{"version":3,"sources":["../node_modules/dotenv/lib/main.js","../node_modules/dotenv/lib/env-options.js","../node_modules/dotenv/lib/cli-options.js","../src/claude-flags.ts","../node_modules/pino-std-serializers/lib/err-helpers.js","../node_modules/pino-std-serializers/lib/err-proto.js","../node_modules/pino-std-serializers/lib/err.js","../node_modules/pino-std-serializers/lib/err-with-cause.js","../node_modules/pino-std-serializers/lib/req.js","../node_modules/pino-std-serializers/lib/res.js","../node_modules/pino-std-serializers/index.js","../node_modules/pino/lib/caller.js","../node_modules/@pinojs/redact/index.js","../node_modules/pino/lib/symbols.js","../node_modules/pino/lib/redaction.js","../node_modules/pino/lib/time.js","../node_modules/quick-format-unescaped/index.js","../node_modules/atomic-sleep/index.js","../node_modules/sonic-boom/index.js","../node_modules/on-exit-leak-free/index.js","../node_modules/thread-stream/package.json","../node_modules/thread-stream/lib/wait.js","../node_modules/thread-stream/lib/indexes.js","../node_modules/thread-stream/index.js","../node_modules/pino/lib/transport.js","../node_modules/pino/lib/tools.js","../node_modules/pino/lib/constants.js","../node_modules/pino/lib/levels.js","../node_modules/pino/lib/meta.js","../node_modules/pino/lib/proto.js","../node_modules/safe-stable-stringify/index.js","../node_modules/pino/lib/multistream.js","../node_modules/pino/pino.js","../src/logger.ts","../src/feature-flags.ts","../src/auth.ts","../node_modules/yaml/dist/nodes/identity.js","../node_modules/yaml/dist/visit.js","../node_modules/yaml/dist/doc/directives.js","../node_modules/yaml/dist/doc/anchors.js","../node_modules/yaml/dist/doc/applyReviver.js","../node_modules/yaml/dist/nodes/toJS.js","../node_modules/yaml/dist/nodes/Node.js","../node_modules/yaml/dist/nodes/Alias.js","../node_modules/yaml/dist/nodes/Scalar.js","../node_modules/yaml/dist/doc/createNode.js","../node_modules/yaml/dist/nodes/Collection.js","../node_modules/yaml/dist/stringify/stringifyComment.js","../node_modules/yaml/dist/stringify/foldFlowLines.js","../node_modules/yaml/dist/stringify/stringifyString.js","../node_modules/yaml/dist/stringify/stringify.js","../node_modules/yaml/dist/stringify/stringifyPair.js","../node_modules/yaml/dist/log.js","../node_modules/yaml/dist/schema/yaml-1.1/merge.js","../node_modules/yaml/dist/nodes/addPairToJSMap.js","../node_modules/yaml/dist/nodes/Pair.js","../node_modules/yaml/dist/stringify/stringifyCollection.js","../node_modules/yaml/dist/nodes/YAMLMap.js","../node_modules/yaml/dist/schema/common/map.js","../node_modules/yaml/dist/nodes/YAMLSeq.js","../node_modules/yaml/dist/schema/common/seq.js","../node_modules/yaml/dist/schema/common/string.js","../node_modules/yaml/dist/schema/common/null.js","../node_modules/yaml/dist/schema/core/bool.js","../node_modules/yaml/dist/stringify/stringifyNumber.js","../node_modules/yaml/dist/schema/core/float.js","../node_modules/yaml/dist/schema/core/int.js","../node_modules/yaml/dist/schema/core/schema.js","../node_modules/yaml/dist/schema/json/schema.js","../node_modules/yaml/dist/schema/yaml-1.1/binary.js","../node_modules/yaml/dist/schema/yaml-1.1/pairs.js","../node_modules/yaml/dist/schema/yaml-1.1/omap.js","../node_modules/yaml/dist/schema/yaml-1.1/bool.js","../node_modules/yaml/dist/schema/yaml-1.1/float.js","../node_modules/yaml/dist/schema/yaml-1.1/int.js","../node_modules/yaml/dist/schema/yaml-1.1/set.js","../node_modules/yaml/dist/schema/yaml-1.1/timestamp.js","../node_modules/yaml/dist/schema/yaml-1.1/schema.js","../node_modules/yaml/dist/schema/tags.js","../node_modules/yaml/dist/schema/Schema.js","../node_modules/yaml/dist/stringify/stringifyDocument.js","../node_modules/yaml/dist/doc/Document.js","../node_modules/yaml/dist/errors.js","../node_modules/yaml/dist/compose/resolve-props.js","../node_modules/yaml/dist/compose/util-contains-newline.js","../node_modules/yaml/dist/compose/util-flow-indent-check.js","../node_modules/yaml/dist/compose/util-map-includes.js","../node_modules/yaml/dist/compose/resolve-block-map.js","../node_modules/yaml/dist/compose/resolve-block-seq.js","../node_modules/yaml/dist/compose/resolve-end.js","../node_modules/yaml/dist/compose/resolve-flow-collection.js","../node_modules/yaml/dist/compose/compose-collection.js","../node_modules/yaml/dist/compose/resolve-block-scalar.js","../node_modules/yaml/dist/compose/resolve-flow-scalar.js","../node_modules/yaml/dist/compose/compose-scalar.js","../node_modules/yaml/dist/compose/util-empty-scalar-position.js","../node_modules/yaml/dist/compose/compose-node.js","../node_modules/yaml/dist/compose/compose-doc.js","../node_modules/yaml/dist/compose/composer.js","../node_modules/yaml/dist/parse/cst-scalar.js","../node_modules/yaml/dist/parse/cst-stringify.js","../node_modules/yaml/dist/parse/cst-visit.js","../node_modules/yaml/dist/parse/cst.js","../node_modules/yaml/dist/parse/lexer.js","../node_modules/yaml/dist/parse/line-counter.js","../node_modules/yaml/dist/parse/parser.js","../node_modules/yaml/dist/public-api.js","../node_modules/yaml/dist/index.js","../node_modules/zod/v4/core/util.js","../node_modules/zod/v4/core/core.js","../node_modules/zod/v4/core/errors.js","../node_modules/zod/v4/core/parse.js","../node_modules/zod/v4/core/regexes.js","../node_modules/zod/v4/core/checks.js","../node_modules/zod/v4/core/doc.js","../node_modules/zod/v4/core/versions.js","../node_modules/zod/v4/core/schemas.js","../node_modules/zod/v4/core/memoizer.js","../node_modules/zod/v4/locales/ar.js","../node_modules/zod/v4/locales/az.js","../node_modules/zod/v4/locales/be.js","../node_modules/zod/v4/locales/bg.js","../node_modules/zod/v4/locales/bn.js","../node_modules/zod/v4/locales/ca.js","../node_modules/zod/v4/locales/ckb.js","../node_modules/zod/v4/locales/cs.js","../node_modules/zod/v4/locales/da.js","../node_modules/zod/v4/locales/de.js","../node_modules/zod/v4/locales/el.js","../node_modules/zod/v4/locales/en.js","../node_modules/zod/v4/locales/eo.js","../node_modules/zod/v4/locales/es.js","../node_modules/zod/v4/locales/fa.js","../node_modules/zod/v4/locales/fi.js","../node_modules/zod/v4/locales/fr.js","../node_modules/zod/v4/locales/fr-CA.js","../node_modules/zod/v4/locales/gu.js","../node_modules/zod/v4/locales/he.js","../node_modules/zod/v4/locales/hi.js","../node_modules/zod/v4/locales/hr.js","../node_modules/zod/v4/locales/hu.js","../node_modules/zod/v4/locales/hy.js","../node_modules/zod/v4/locales/id.js","../node_modules/zod/v4/locales/is.js","../node_modules/zod/v4/locales/it.js","../node_modules/zod/v4/locales/ja.js","../node_modules/zod/v4/locales/ka.js","../node_modules/zod/v4/locales/km.js","../node_modules/zod/v4/locales/kh.js","../node_modules/zod/v4/locales/kn.js","../node_modules/zod/v4/locales/ko.js","../node_modules/zod/v4/locales/lt.js","../node_modules/zod/v4/locales/mk.js","../node_modules/zod/v4/locales/ms.js","../node_modules/zod/v4/locales/ne.js","../node_modules/zod/v4/locales/nl.js","../node_modules/zod/v4/locales/nn.js","../node_modules/zod/v4/locales/no.js","../node_modules/zod/v4/locales/ota.js","../node_modules/zod/v4/locales/ps.js","../node_modules/zod/v4/locales/pl.js","../node_modules/zod/v4/locales/pt.js","../node_modules/zod/v4/locales/pt-BR.js","../node_modules/zod/v4/locales/ro.js","../node_modules/zod/v4/locales/ru.js","../node_modules/zod/v4/locales/sk.js","../node_modules/zod/v4/locales/sl.js","../node_modules/zod/v4/locales/sv.js","../node_modules/zod/v4/locales/ta.js","../node_modules/zod/v4/locales/tg.js","../node_modules/zod/v4/locales/th.js","../node_modules/zod/v4/locales/tk.js","../node_modules/zod/v4/locales/tr.js","../node_modules/zod/v4/locales/uk.js","../node_modules/zod/v4/locales/ua.js","../node_modules/zod/v4/locales/ur.js","../node_modules/zod/v4/locales/uz.js","../node_modules/zod/v4/locales/vi.js","../node_modules/zod/v4/locales/zh-CN.js","../node_modules/zod/v4/locales/zh-TW.js","../node_modules/zod/v4/locales/yo.js","../node_modules/zod/v4/locales/index.js","../node_modules/zod/v4/core/registries.js","../node_modules/zod/v4/core/compile.js","../node_modules/zod/v4/core/api.js","../node_modules/zod/v4/core/to-json-schema.js","../node_modules/zod/v4/core/json-schema-processors.js","../node_modules/zod/v4/core/json-schema-generator.js","../node_modules/zod/v4/core/json-schema.js","../node_modules/zod/v4/core/index.js","../node_modules/zod/v4/classic/checks.js","../node_modules/zod/v4/classic/errors.js","../node_modules/zod/v4/classic/parse.js","../node_modules/zod/v4/classic/schemas.js","../node_modules/zod/v4/classic/compat.js","../node_modules/zod/v4/classic/iso.js","../node_modules/zod/v4/classic/from-json-schema.js","../node_modules/zod/v4/core/visit.js","../node_modules/zod/v4/classic/deep-partial.js","../node_modules/zod/v4/classic/in-out.js","../node_modules/zod/v4/classic/coerce.js","../node_modules/zod/v4/classic/external.js","../node_modules/zod/index.js","../src/lifecycle/constants.ts","../node_modules/@temporalio/common/src/encoding.ts","../node_modules/@temporalio/common/src/type-helpers.ts","../node_modules/@temporalio/common/src/activity-definition-options.ts","../node_modules/@temporalio/common/src/activity-cancellation-details.ts","../node_modules/@temporalio/common/src/errors.ts","../node_modules/@temporalio/common/src/internal-workflow/enums-helpers.ts","../node_modules/@temporalio/common/src/internal-workflow/objects-helpers.ts","../node_modules/@temporalio/common/src/internal-workflow/index.ts","../node_modules/@temporalio/common/src/continue-as-new.ts","../node_modules/nexus-rpc/src/internal/symbol-instanceof.ts","../node_modules/nexus-rpc/src/common/handler-error.ts","../node_modules/nexus-rpc/src/common/operation-error.ts","../node_modules/nexus-rpc/src/common/index.ts","../node_modules/nexus-rpc/src/internal/object-utils.ts","../node_modules/nexus-rpc/src/service/service-definition.ts","../node_modules/nexus-rpc/src/service/helpers.ts","../node_modules/nexus-rpc/src/service/index.ts","../node_modules/nexus-rpc/src/handler/start-operation-result.ts","../node_modules/nexus-rpc/src/handler/operation-handler.ts","../node_modules/nexus-rpc/src/handler/service-handler.ts","../node_modules/nexus-rpc/src/handler/index.ts","../node_modules/nexus-rpc/src/index.ts","../node_modules/long/umd/index.js","../node_modules/@temporalio/common/src/failure.ts","../node_modules/ms/dist/index.cjs","../node_modules/@temporalio/common/src/time.ts","../node_modules/@temporalio/common/src/converter/types.ts","../node_modules/@temporalio/common/src/converter/payload-converter.ts","../node_modules/@temporalio/common/src/converter/failure-converter.ts","../node_modules/@temporalio/common/src/converter/data-converter.ts","../node_modules/@temporalio/common/src/converter/extstore.ts","../node_modules/@temporalio/common/lib/converter/payload-codec.js","../node_modules/@temporalio/common/src/deprecated-time.ts","../node_modules/@temporalio/common/src/interfaces.ts","../node_modules/@temporalio/common/src/logger.ts","../node_modules/@temporalio/common/src/priority.ts","../node_modules/@temporalio/common/src/metrics.ts","../node_modules/@temporalio/common/src/retry-policy.ts","../node_modules/@temporalio/common/src/worker-deployments.ts","../node_modules/@temporalio/common/src/workflow-definition-options.ts","../node_modules/@temporalio/common/lib/workflow-handle.js","../node_modules/@temporalio/common/src/workflow-options.ts","../node_modules/@temporalio/common/lib/versioning-intent.js","../node_modules/@temporalio/common/src/search-attributes.ts","../node_modules/@temporalio/common/src/activity-options.ts","../node_modules/@temporalio/common/src/index.ts","../node_modules/@grpc/grpc-js/src/constants.ts","../node_modules/@grpc/grpc-js/package.json","../node_modules/@grpc/grpc-js/src/logging.ts","../node_modules/@grpc/grpc-js/src/error.ts","../node_modules/@grpc/grpc-js/src/metadata.ts","../node_modules/@grpc/grpc-js/src/call-credentials.ts","../node_modules/@grpc/grpc-js/src/tls-helpers.ts","../node_modules/@grpc/grpc-js/src/uri-parser.ts","../node_modules/@grpc/grpc-js/src/resolver.ts","../node_modules/@grpc/grpc-js/src/channel-credentials.ts","../node_modules/@grpc/grpc-js/src/load-balancer.ts","../node_modules/@grpc/grpc-js/src/service-config.ts","../node_modules/@grpc/grpc-js/src/connectivity-state.ts","../node_modules/@grpc/grpc-js/src/picker.ts","../node_modules/@grpc/grpc-js/src/backoff-timeout.ts","../node_modules/@grpc/grpc-js/src/load-balancer-child-handler.ts","../node_modules/@grpc/grpc-js/src/resolving-load-balancer.ts","../node_modules/@grpc/grpc-js/src/channel-options.ts","../node_modules/@grpc/grpc-js/src/subchannel-address.ts","../node_modules/tslib/tslib.es6.js","../node_modules/@js-sdsl/ordered-map/dist/esm/index.js","../node_modules/@js-sdsl/.build-data/copied-source/src/container/TreeContainer/Base/TreeNode.ts","../node_modules/@js-sdsl/.build-data/copied-source/src/container/ContainerBase/index.ts","../node_modules/@js-sdsl/.build-data/copied-source/src/utils/throwError.ts","../node_modules/@js-sdsl/.build-data/copied-source/src/container/TreeContainer/Base/index.ts","../node_modules/@js-sdsl/.build-data/copied-source/src/container/TreeContainer/Base/TreeIterator.ts","../node_modules/@js-sdsl/.build-data/copied-source/src/container/TreeContainer/OrderedMap.ts","../node_modules/@grpc/grpc-js/src/admin.ts","../node_modules/@grpc/grpc-js/src/call.ts","../node_modules/@grpc/grpc-js/src/call-interface.ts","../node_modules/@grpc/grpc-js/src/client-interceptors.ts","../node_modules/@grpc/grpc-js/src/client.ts","../node_modules/@grpc/grpc-js/src/make-client.ts","../node_modules/lodash.camelcase/index.js","../node_modules/@protobufjs/aspromise/index.js","../node_modules/@protobufjs/base64/index.js","../node_modules/@protobufjs/eventemitter/index.js","../node_modules/@protobufjs/float/index.js","../node_modules/@protobufjs/utf8/index.js","../node_modules/@protobufjs/pool/index.js","../node_modules/protobufjs/src/util/longbits.js","../node_modules/protobufjs/src/util/minimal.js","../node_modules/protobufjs/src/writer.js","../node_modules/protobufjs/src/writer_buffer.js","../node_modules/protobufjs/src/reader.js","../node_modules/protobufjs/src/reader_buffer.js","../node_modules/protobufjs/src/rpc/service.js","../node_modules/protobufjs/src/rpc.js","../node_modules/protobufjs/src/roots.js","../node_modules/protobufjs/src/index-minimal.js","../node_modules/@protobufjs/codegen/index.js","../node_modules/@protobufjs/fetch/util/fs.js","../node_modules/@protobufjs/fetch/index.js","../node_modules/@protobufjs/path/index.js","../node_modules/protobufjs/src/util/patterns.js","../node_modules/protobufjs/src/util/fs.js","../node_modules/protobufjs/src/namespace.js","../node_modules/protobufjs/src/mapfield.js","../node_modules/protobufjs/src/method.js","../node_modules/protobufjs/src/service.js","../node_modules/protobufjs/src/message.js","../node_modules/protobufjs/src/decoder.js","../node_modules/protobufjs/src/verifier.js","../node_modules/protobufjs/src/converter.js","../node_modules/protobufjs/src/wrappers.js","../node_modules/protobufjs/src/type.js","../node_modules/protobufjs/src/root.js","../node_modules/protobufjs/src/util.js","../node_modules/protobufjs/src/types.js","../node_modules/protobufjs/src/field.js","../node_modules/protobufjs/src/oneof.js","../node_modules/protobufjs/src/object.js","../node_modules/protobufjs/src/enum.js","../node_modules/protobufjs/src/encoder.js","../node_modules/protobufjs/src/index-light.js","../node_modules/protobufjs/src/tokenize.js","../node_modules/protobufjs/src/parse.js","../node_modules/protobufjs/src/common.js","../node_modules/protobufjs/src/index.js","../node_modules/protobufjs/index.js","../node_modules/protobufjs/google/protobuf/descriptor.json","../node_modules/protobufjs/ext/descriptor/index.js","../node_modules/protobufjs/google/protobuf/api.json","../node_modules/protobufjs/google/protobuf/source_context.json","../node_modules/protobufjs/google/protobuf/type.json","../node_modules/@grpc/proto-loader/src/util.ts","../node_modules/@grpc/proto-loader/src/index.ts","../node_modules/@grpc/grpc-js/src/channelz.ts","../node_modules/@grpc/grpc-js/src/call-number.ts","../node_modules/@grpc/grpc-js/src/compression-algorithms.ts","../node_modules/@grpc/grpc-js/src/filter.ts","../node_modules/@grpc/grpc-js/src/compression-filter.ts","../node_modules/@grpc/grpc-js/src/control-plane-status.ts","../node_modules/@grpc/grpc-js/src/deadline.ts","../node_modules/@grpc/grpc-js/src/filter-stack.ts","../node_modules/@grpc/grpc-js/src/single-subchannel-channel.ts","../node_modules/@grpc/grpc-js/src/subchannel.ts","../node_modules/@grpc/grpc-js/src/environment.ts","../node_modules/@grpc/grpc-js/src/resolver-dns.ts","../node_modules/@grpc/grpc-js/src/http_proxy.ts","../node_modules/@grpc/grpc-js/src/stream-decoder.ts","../node_modules/@grpc/grpc-js/src/subchannel-call.ts","../node_modules/@grpc/grpc-js/src/transport.ts","../node_modules/@grpc/grpc-js/src/subchannel-pool.ts","../node_modules/@grpc/grpc-js/src/load-balancing-call.ts","../node_modules/@grpc/grpc-js/src/resolving-call.ts","../node_modules/@grpc/grpc-js/src/retrying-call.ts","../node_modules/@grpc/grpc-js/src/subchannel-interface.ts","../node_modules/@grpc/grpc-js/src/internal-channel.ts","../node_modules/@grpc/grpc-js/src/channel.ts","../node_modules/@grpc/grpc-js/src/server-call.ts","../node_modules/@grpc/grpc-js/src/server-credentials.ts","../node_modules/@grpc/grpc-js/src/duration.ts","../node_modules/@grpc/grpc-js/src/orca.ts","../node_modules/@grpc/grpc-js/src/server-interceptors.ts","../node_modules/@grpc/grpc-js/src/server.ts","../node_modules/@grpc/grpc-js/src/status-builder.ts","../node_modules/@grpc/grpc-js/src/load-balancer-pick-first.ts","../node_modules/@grpc/grpc-js/src/certificate-provider.ts","../node_modules/@grpc/grpc-js/src/experimental.ts","../node_modules/@grpc/grpc-js/src/resolver-uds.ts","../node_modules/@grpc/grpc-js/src/resolver-ip.ts","../node_modules/@grpc/grpc-js/src/load-balancer-round-robin.ts","../node_modules/@grpc/grpc-js/src/load-balancer-outlier-detection.ts","../node_modules/@grpc/grpc-js/src/priority-queue.ts","../node_modules/@grpc/grpc-js/src/load-balancer-weighted-round-robin.ts","../node_modules/@grpc/grpc-js/src/index.ts","../node_modules/@temporalio/common/src/internal-non-workflow/codec-helpers.ts","../node_modules/@temporalio/common/lib/internal-non-workflow/codec-types.js","../node_modules/@temporalio/common/src/internal-non-workflow/data-converter-helpers.ts","../node_modules/@temporalio/proto/src/patch-protobuf-root.ts","../node_modules/@temporalio/proto/node_modules/protobufjs/src/util/aspromise.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/util/base64.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/util/eventemitter.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/util/float.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/util/utf8.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/util/pool.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/util/longbits.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/util/minimal.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/writer.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/writer_buffer.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/reader.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/reader_buffer.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/rpc/service.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/rpc.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/roots.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/index-minimal.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/util/patterns.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/util/codegen.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/util/fs.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/util/fetch.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/util/path.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/namespace.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/mapfield.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/method.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/service.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/message.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/decoder.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/verifier.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/converter.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/wrappers.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/type.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/root.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/util.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/types.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/field.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/oneof.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/object.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/enum.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/encoder.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/index-light.js","../node_modules/@temporalio/proto/node_modules/protobufjs/light.js","../node_modules/@temporalio/proto/protos/json-module.js","../node_modules/@temporalio/proto/protos/root.js","../node_modules/@temporalio/proto/protos/index.js","../node_modules/@temporalio/common/node_modules/protobufjs/src/util/aspromise.js","../node_modules/@temporalio/common/node_modules/protobufjs/src/util/base64.js","../node_modules/@temporalio/common/node_modules/protobufjs/src/util/eventemitter.js","../node_modules/@temporalio/common/node_modules/protobufjs/src/util/float.js","../node_modules/@temporalio/common/node_modules/protobufjs/src/util/utf8.js","../node_modules/@temporalio/common/node_modules/protobufjs/src/util/pool.js","../node_modules/@temporalio/common/node_modules/protobufjs/src/util/longbits.js","../node_modules/@temporalio/common/node_modules/protobufjs/src/util/minimal.js","../node_modules/@temporalio/common/node_modules/protobufjs/src/writer.js","../node_modules/@temporalio/common/node_modules/protobufjs/src/writer_buffer.js","../node_modules/@temporalio/common/node_modules/protobufjs/src/reader.js","../node_modules/@temporalio/common/node_modules/protobufjs/src/reader_buffer.js","../node_modules/@temporalio/common/node_modules/protobufjs/src/rpc/service.js","../node_modules/@temporalio/common/node_modules/protobufjs/src/rpc.js","../node_modules/@temporalio/common/node_modules/protobufjs/src/roots.js","../node_modules/@temporalio/common/node_modules/protobufjs/src/index-minimal.js","../node_modules/@temporalio/common/node_modules/protobufjs/src/util/patterns.js","../node_modules/@temporalio/common/node_modules/protobufjs/src/util/codegen.js","../node_modules/@temporalio/common/node_modules/protobufjs/src/util/fs.js","../node_modules/@temporalio/common/node_modules/protobufjs/src/util/fetch.js","../node_modules/@temporalio/common/node_modules/protobufjs/src/util/path.js","../node_modules/@temporalio/common/node_modules/protobufjs/src/namespace.js","../node_modules/@temporalio/common/node_modules/protobufjs/src/mapfield.js","../node_modules/@temporalio/common/node_modules/protobufjs/src/method.js","../node_modules/@temporalio/common/node_modules/protobufjs/src/service.js","../node_modules/@temporalio/common/node_modules/protobufjs/src/message.js","../node_modules/@temporalio/common/node_modules/protobufjs/src/decoder.js","../node_modules/@temporalio/common/node_modules/protobufjs/src/verifier.js","../node_modules/@temporalio/common/node_modules/protobufjs/src/converter.js","../node_modules/@temporalio/common/node_modules/protobufjs/src/wrappers.js","../node_modules/@temporalio/common/node_modules/protobufjs/src/type.js","../node_modules/@temporalio/common/node_modules/protobufjs/src/root.js","../node_modules/@temporalio/common/node_modules/protobufjs/src/util.js","../node_modules/@temporalio/common/node_modules/protobufjs/src/types.js","../node_modules/@temporalio/common/node_modules/protobufjs/src/field.js","../node_modules/@temporalio/common/node_modules/protobufjs/src/oneof.js","../node_modules/@temporalio/common/node_modules/protobufjs/src/object.js","../node_modules/@temporalio/common/node_modules/protobufjs/src/enum.js","../node_modules/@temporalio/common/node_modules/protobufjs/src/encoder.js","../node_modules/@temporalio/common/node_modules/protobufjs/src/index-light.js","../node_modules/@temporalio/common/node_modules/protobufjs/light.js","../node_modules/@temporalio/common/node_modules/protobufjs/ext/protojson.js","../node_modules/@temporalio/common/src/converter/protobuf-payload-converters.ts","../node_modules/@temporalio/common/src/internal-non-workflow/extstore-helpers.ts","../node_modules/@temporalio/common/src/internal-non-workflow/external-storage-runner.ts","../node_modules/@temporalio/common/src/internal-non-workflow/external-storage-visitor.ts","../node_modules/@temporalio/common/src/concurrency/semaphore.ts","../node_modules/@temporalio/common/src/concurrency/limit.ts","../node_modules/@temporalio/proto/src/payload-visitor.generated.ts","../node_modules/@temporalio/common/src/internal-non-workflow/payload-visitor.ts","../node_modules/@temporalio/common/src/internal-non-workflow/parse-host-uri.ts","../node_modules/@temporalio/common/src/internal-non-workflow/proxy-config.ts","../node_modules/@temporalio/common/src/internal-non-workflow/tls-config.ts","../node_modules/@temporalio/common/src/internal-non-workflow/index.ts","../node_modules/@temporalio/client/src/errors.ts","../node_modules/@temporalio/client/src/grpc-retry.ts","../node_modules/@temporalio/client/package.json","../node_modules/@temporalio/client/src/pkg.ts","../node_modules/@temporalio/client/src/types.ts","../node_modules/@temporalio/client/src/connection.ts","../node_modules/@temporalio/client/src/base-client.ts","../node_modules/@temporalio/common/src/converter/payload-search-attributes.ts","../node_modules/@temporalio/client/src/helpers.ts","../node_modules/@temporalio/client/src/async-completion-client.ts","../node_modules/@temporalio/common/src/interceptors.ts","../node_modules/@temporalio/client/src/internal.ts","../node_modules/@temporalio/client/src/activity-client.ts","../node_modules/uuid/dist/cjs/max.js","../node_modules/uuid/dist/cjs/nil.js","../node_modules/uuid/dist/cjs/regex.js","../node_modules/uuid/dist/cjs/validate.js","../node_modules/uuid/dist/cjs/parse.js","../node_modules/uuid/dist/cjs/stringify.js","../node_modules/uuid/dist/cjs/rng.js","../node_modules/uuid/dist/cjs/v1.js","../node_modules/uuid/dist/cjs/v1ToV6.js","../node_modules/uuid/dist/cjs/md5.js","../node_modules/uuid/dist/cjs/v35.js","../node_modules/uuid/dist/cjs/v3.js","../node_modules/uuid/dist/cjs/native.js","../node_modules/uuid/dist/cjs/v4.js","../node_modules/uuid/dist/cjs/sha1.js","../node_modules/uuid/dist/cjs/v5.js","../node_modules/uuid/dist/cjs/v6.js","../node_modules/uuid/dist/cjs/v6ToV1.js","../node_modules/uuid/dist/cjs/v7.js","../node_modules/uuid/dist/cjs/version.js","../node_modules/uuid/dist/cjs/index.js","../node_modules/@temporalio/client/src/nexus-types.ts","../node_modules/@temporalio/client/src/nexus-client.ts","../node_modules/@temporalio/client/src/schedule-types.ts","../node_modules/@temporalio/client/src/schedule-helpers.ts","../node_modules/@temporalio/client/src/schedule-client.ts","../node_modules/@temporalio/client/src/workflow-options.ts","../node_modules/@temporalio/client/src/iterators-utils.ts","../node_modules/@temporalio/client/src/workflow-update-stage.ts","../node_modules/@temporalio/client/src/interceptor-adapters.ts","../node_modules/@temporalio/client/src/workflow-client.ts","../node_modules/@temporalio/client/src/build-id-types.ts","../node_modules/@temporalio/client/src/task-queue-client.ts","../node_modules/@temporalio/client/src/client.ts","../node_modules/@temporalio/client/src/index.ts","../src/services/security/capabilities.ts","../src/db/repositories/devices.repository.ts","../src/providers.ts","../src/platform.ts","../src/server-identity.ts","../src/db/repositories/push.repository.ts","../node_modules/ws/lib/constants.js","../node_modules/ws/lib/buffer-util.js","../node_modules/ws/lib/limiter.js","../node_modules/ws/lib/permessage-deflate.js","../node_modules/ws/lib/validation.js","../node_modules/ws/lib/receiver.js","../node_modules/ws/lib/sender.js","../node_modules/ws/lib/event-target.js","../node_modules/ws/lib/extension.js","../node_modules/ws/lib/websocket.js","../node_modules/ws/lib/stream.js","../node_modules/ws/lib/subprotocol.js","../node_modules/ws/lib/websocket-server.js","../node_modules/ws/wrapper.mjs","../node_modules/flexsearch/dist/flexsearch.bundle.module.min.mjs","../node_modules/fast-glob/out/utils/array.js","../node_modules/fast-glob/out/utils/errno.js","../node_modules/fast-glob/out/utils/fs.js","../node_modules/fast-glob/out/utils/path.js","../node_modules/is-extglob/index.js","../node_modules/is-glob/index.js","../node_modules/glob-parent/index.js","../node_modules/braces/lib/utils.js","../node_modules/braces/lib/stringify.js","../node_modules/is-number/index.js","../node_modules/to-regex-range/index.js","../node_modules/fill-range/index.js","../node_modules/braces/lib/compile.js","../node_modules/braces/lib/expand.js","../node_modules/braces/lib/constants.js","../node_modules/braces/lib/parse.js","../node_modules/braces/index.js","../node_modules/picomatch/lib/constants.js","../node_modules/picomatch/lib/utils.js","../node_modules/picomatch/lib/scan.js","../node_modules/picomatch/lib/parse.js","../node_modules/picomatch/lib/picomatch.js","../node_modules/picomatch/index.js","../node_modules/micromatch/index.js","../node_modules/fast-glob/out/utils/pattern.js","../node_modules/merge2/index.js","../node_modules/fast-glob/out/utils/stream.js","../node_modules/fast-glob/out/utils/string.js","../node_modules/fast-glob/out/utils/index.js","../node_modules/fast-glob/out/managers/tasks.js","../node_modules/@nodelib/fs.stat/out/providers/async.js","../node_modules/@nodelib/fs.stat/out/providers/sync.js","../node_modules/@nodelib/fs.stat/out/adapters/fs.js","../node_modules/@nodelib/fs.stat/out/settings.js","../node_modules/@nodelib/fs.stat/out/index.js","../node_modules/queue-microtask/index.js","../node_modules/run-parallel/index.js","../node_modules/@nodelib/fs.scandir/out/constants.js","../node_modules/@nodelib/fs.scandir/out/utils/fs.js","../node_modules/@nodelib/fs.scandir/out/utils/index.js","../node_modules/@nodelib/fs.scandir/out/providers/common.js","../node_modules/@nodelib/fs.scandir/out/providers/async.js","../node_modules/@nodelib/fs.scandir/out/providers/sync.js","../node_modules/@nodelib/fs.scandir/out/adapters/fs.js","../node_modules/@nodelib/fs.scandir/out/settings.js","../node_modules/@nodelib/fs.scandir/out/index.js","../node_modules/reusify/reusify.js","../node_modules/fastq/queue.js","../node_modules/@nodelib/fs.walk/out/readers/common.js","../node_modules/@nodelib/fs.walk/out/readers/reader.js","../node_modules/@nodelib/fs.walk/out/readers/async.js","../node_modules/@nodelib/fs.walk/out/providers/async.js","../node_modules/@nodelib/fs.walk/out/providers/stream.js","../node_modules/@nodelib/fs.walk/out/readers/sync.js","../node_modules/@nodelib/fs.walk/out/providers/sync.js","../node_modules/@nodelib/fs.walk/out/settings.js","../node_modules/@nodelib/fs.walk/out/index.js","../node_modules/fast-glob/out/readers/reader.js","../node_modules/fast-glob/out/readers/stream.js","../node_modules/fast-glob/out/readers/async.js","../node_modules/fast-glob/out/providers/matchers/matcher.js","../node_modules/fast-glob/out/providers/matchers/partial.js","../node_modules/fast-glob/out/providers/filters/deep.js","../node_modules/fast-glob/out/providers/filters/entry.js","../node_modules/fast-glob/out/providers/filters/error.js","../node_modules/fast-glob/out/providers/transformers/entry.js","../node_modules/fast-glob/out/providers/provider.js","../node_modules/fast-glob/out/providers/async.js","../node_modules/fast-glob/out/providers/stream.js","../node_modules/fast-glob/out/readers/sync.js","../node_modules/fast-glob/out/providers/sync.js","../node_modules/fast-glob/out/settings.js","../node_modules/fast-glob/out/index.js","../node_modules/readdirp/index.js","../node_modules/chokidar/handler.js","../node_modules/chokidar/index.js","../node_modules/@threadbase-sh/scanner/src/filters.ts","../node_modules/@threadbase-sh/scanner/src/git.ts","../node_modules/@threadbase-sh/scanner/src/logger.ts","../node_modules/@threadbase-sh/scanner/src/indexer.ts","../node_modules/@threadbase-sh/scanner/src/search-matches.ts","../node_modules/@threadbase-sh/scanner/src/parser.ts","../node_modules/@threadbase-sh/scanner/src/persistent/metadata-reducer.ts","../node_modules/@threadbase-sh/scanner/src/providers/provider.ts","../node_modules/@threadbase-sh/scanner/src/tags.ts","../node_modules/@threadbase-sh/scanner/src/persistent/conversation-reducer.ts","../node_modules/@threadbase-sh/scanner/src/persistent/sidecar.ts","../node_modules/@threadbase-sh/scanner/src/profiles.ts","../node_modules/@threadbase-sh/scanner/src/providers/codex-cli.ts","../node_modules/@threadbase-sh/scanner/src/canonical-path.ts","../node_modules/@threadbase-sh/scanner/src/providers/cursor.ts","../node_modules/@threadbase-sh/scanner/src/discovery.ts","../node_modules/@threadbase-sh/scanner/src/providers/threadbase.ts","../node_modules/@threadbase-sh/scanner/src/scanner.ts","../node_modules/@threadbase-sh/scanner/src/cache.ts","../node_modules/@threadbase-sh/scanner/src/persistent/conversation-stream.ts","../node_modules/@threadbase-sh/scanner/src/persistent/paged-reader.ts","../node_modules/@threadbase-sh/scanner/src/persistent/jsonl-tail-reader.ts","../node_modules/@threadbase-sh/scanner/src/persistent/cursor.ts","../node_modules/@threadbase-sh/scanner/src/persistent/index-engine.ts","../node_modules/@threadbase-sh/scanner/src/providers/parse.ts","../node_modules/@threadbase-sh/scanner/src/search-document.ts","../node_modules/@threadbase-sh/scanner/src/tiers.ts","../node_modules/@threadbase-sh/scanner/src/persistent/db.ts","../node_modules/@threadbase-sh/scanner/src/persistent/schema.ts","../node_modules/@threadbase-sh/scanner/src/persistent/migrations.ts","../node_modules/@threadbase-sh/scanner/src/persistent/dir-watermark.ts","../node_modules/@threadbase-sh/scanner/src/persistent/repositories/checkpoints.repo.ts","../node_modules/@threadbase-sh/scanner/src/persistent/repositories/conversation-files.repo.ts","../node_modules/@threadbase-sh/scanner/src/persistent/repositories/conversations.repo.ts","../node_modules/@threadbase-sh/scanner/src/persistent/repositories/fts.repo.ts","../node_modules/@threadbase-sh/scanner/src/persistent/repositories/scanned-dirs.repo.ts","../node_modules/@threadbase-sh/scanner/src/watcher/file-watcher.ts","../node_modules/@threadbase-sh/scanner/src/watcher/index-queue.ts","../node_modules/@threadbase-sh/scanner/src/types.ts","../node_modules/@threadbase-sh/scanner/src/index.ts","../src/db/query-timing.ts","../src/db/sqlite-migrate.ts","../src/utils/claudeShapedLine.ts","../src/utils/cursorConversationLine.ts","../src/utils/codexConversationLine.ts","../src/services/conversations/classification.ts","../src/services/conversations/isAgentConversation.ts","../src/utils/canonicalizeFilePath.ts","../src/utils/fileIdentity.ts","../src/conversation-cache.ts","webpack://@xterm/xterm/src/common/CircularList.ts","webpack://@xterm/xterm/src/common/Clone.ts","webpack://@xterm/xterm/src/common/CoreTerminal.ts","webpack://@xterm/xterm/src/common/InputHandler.ts","webpack://@xterm/xterm/src/common/Platform.ts","webpack://@xterm/xterm/src/common/TaskQueue.ts","webpack://@xterm/xterm/src/common/WindowsMode.ts","webpack://@xterm/xterm/src/common/buffer/AttributeData.ts","webpack://@xterm/xterm/src/common/buffer/Buffer.ts","webpack://@xterm/xterm/src/common/buffer/BufferLine.ts","webpack://@xterm/xterm/src/common/buffer/BufferReflow.ts","webpack://@xterm/xterm/src/common/buffer/BufferSet.ts","webpack://@xterm/xterm/src/common/buffer/CellData.ts","webpack://@xterm/xterm/src/common/buffer/Constants.ts","webpack://@xterm/xterm/src/common/buffer/Marker.ts","webpack://@xterm/xterm/src/common/data/Charsets.ts","webpack://@xterm/xterm/src/common/data/EscapeSequences.ts","webpack://@xterm/xterm/src/common/input/TextDecoder.ts","webpack://@xterm/xterm/src/common/input/UnicodeV6.ts","webpack://@xterm/xterm/src/common/input/WriteBuffer.ts","webpack://@xterm/xterm/src/common/input/XParseColor.ts","webpack://@xterm/xterm/src/common/parser/Constants.ts","webpack://@xterm/xterm/src/common/parser/DcsParser.ts","webpack://@xterm/xterm/src/common/parser/EscapeSequenceParser.ts","webpack://@xterm/xterm/src/common/parser/OscParser.ts","webpack://@xterm/xterm/src/common/parser/Params.ts","webpack://@xterm/xterm/src/common/public/AddonManager.ts","webpack://@xterm/xterm/src/common/public/BufferApiView.ts","webpack://@xterm/xterm/src/common/public/BufferLineApiView.ts","webpack://@xterm/xterm/src/common/public/BufferNamespaceApi.ts","webpack://@xterm/xterm/src/common/public/ParserApi.ts","webpack://@xterm/xterm/src/common/public/UnicodeApi.ts","webpack://@xterm/xterm/src/common/services/BufferService.ts","webpack://@xterm/xterm/src/common/services/CharsetService.ts","webpack://@xterm/xterm/src/common/services/CoreMouseService.ts","webpack://@xterm/xterm/src/common/services/CoreService.ts","webpack://@xterm/xterm/src/common/services/InstantiationService.ts","webpack://@xterm/xterm/src/common/services/LogService.ts","webpack://@xterm/xterm/src/common/services/OptionsService.ts","webpack://@xterm/xterm/src/common/services/OscLinkService.ts","webpack://@xterm/xterm/src/common/services/ServiceRegistry.ts","webpack://@xterm/xterm/src/common/services/Services.ts","webpack://@xterm/xterm/src/common/services/UnicodeService.ts","webpack://@xterm/xterm/src/headless/Terminal.ts","webpack://@xterm/xterm/out/vs/base/common/arrays.js","webpack://@xterm/xterm/out/vs/base/common/arraysFind.js","webpack://@xterm/xterm/out/vs/base/common/collections.js","webpack://@xterm/xterm/out/vs/base/common/errors.js","webpack://@xterm/xterm/out/vs/base/common/event.js","webpack://@xterm/xterm/out/vs/base/common/functional.js","webpack://@xterm/xterm/out/vs/base/common/iterator.js","webpack://@xterm/xterm/out/vs/base/common/lifecycle.js","webpack://@xterm/xterm/out/vs/base/common/linkedList.js","webpack://@xterm/xterm/out/vs/base/common/map.js","webpack://@xterm/xterm/out/vs/base/common/stopwatch.js","webpack://@xterm/xterm/webpack/bootstrap","webpack://@xterm/xterm/src/headless/public/Terminal.ts","../src/pty-shared.ts","../src/services/questions/codexScreen.ts","../src/services/questions/detectPermissionGate.ts","../src/services/questions/detectQuestionFromScreen.ts","../src/services/questions/detectShellPrompt.ts","../src/services/questions/detectStartupChoiceGate.ts","../src/services/questions/permissionAnswerKeys.ts","../node_modules/libheif-js/libheif-wasm/libheif-bundle.js","../node_modules/libheif-js/wasm-bundle.js","../node_modules/heic-decode/lib.js","../node_modules/heic-decode/index.js","../node_modules/jpeg-js/lib/encoder.js","../node_modules/jpeg-js/lib/decoder.js","../node_modules/jpeg-js/index.js","../node_modules/pngjs/lib/chunkstream.js","../node_modules/pngjs/lib/interlace.js","../node_modules/pngjs/lib/paeth-predictor.js","../node_modules/pngjs/lib/filter-parse.js","../node_modules/pngjs/lib/filter-parse-async.js","../node_modules/pngjs/lib/constants.js","../node_modules/pngjs/lib/crc.js","../node_modules/pngjs/lib/parser.js","../node_modules/pngjs/lib/bitmapper.js","../node_modules/pngjs/lib/format-normaliser.js","../node_modules/pngjs/lib/parser-async.js","../node_modules/pngjs/lib/bitpacker.js","../node_modules/pngjs/lib/filter-pack.js","../node_modules/pngjs/lib/packer.js","../node_modules/pngjs/lib/packer-async.js","../node_modules/pngjs/lib/sync-inflate.js","../node_modules/pngjs/lib/sync-reader.js","../node_modules/pngjs/lib/filter-parse-sync.js","../node_modules/pngjs/lib/parser-sync.js","../node_modules/pngjs/lib/packer-sync.js","../node_modules/pngjs/lib/png-sync.js","../node_modules/pngjs/lib/png.js","../node_modules/heic-convert/formats-node.js","../node_modules/heic-convert/lib.js","../node_modules/heic-convert/index.js","../node_modules/postgres-array/index.js","../node_modules/pg-types/lib/arrayParser.js","../node_modules/postgres-date/index.js","../node_modules/xtend/mutable.js","../node_modules/postgres-interval/index.js","../node_modules/postgres-bytea/index.js","../node_modules/pg-types/lib/textParsers.js","../node_modules/pg-int8/index.js","../node_modules/pg-types/lib/binaryParsers.js","../node_modules/pg-types/lib/builtins.js","../node_modules/pg-types/index.js","../node_modules/pg/lib/defaults.js","../node_modules/pg/lib/utils.js","../node_modules/pg/lib/crypto/utils.js","../node_modules/pg/lib/crypto/cert-signatures.js","../node_modules/pg/lib/crypto/sasl.js","../node_modules/pg/lib/type-overrides.js","../node_modules/pg-connection-string/index.js","../node_modules/pg/lib/connection-parameters.js","../node_modules/pg/lib/result.js","../node_modules/pg/lib/query.js","../node_modules/pg-protocol/src/messages.ts","../node_modules/pg-protocol/src/buffer-writer.ts","../node_modules/pg-protocol/src/serializer.ts","../node_modules/pg-protocol/src/buffer-reader.ts","../node_modules/pg-protocol/src/parser.ts","../node_modules/pg-protocol/src/index.ts","../node_modules/pg-cloudflare/src/empty.ts","../node_modules/pg/lib/stream.js","../node_modules/pg/lib/connection.js","../node_modules/split2/index.js","../node_modules/pgpass/lib/helper.js","../node_modules/pgpass/lib/index.js","../node_modules/pg/lib/client.js","../node_modules/pg-pool/index.js","../node_modules/pg/lib/native/query.js","../node_modules/pg/lib/native/client.js","../node_modules/pg/lib/native/index.js","../node_modules/pg/lib/index.js","../node_modules/pg/esm/index.mjs","../src/db/runtime-store.ts","../src/services/questions/codexGateAnswers.ts","../src/services/questions/parseAgentPhase.ts","../src/utils/debounce.ts","../src/codex-pty-runner.ts","../src/cursor-pty-runner.ts","../src/pty-host/protocol.ts","../src/pty-host/remote-session-runner.ts","../src/services/questions/detectPromptSuggestion.ts","../src/utils/deriveSessionName.ts","../src/pty-manager.ts","../src/live-session-manager.ts","../src/pty-host/socket.ts","../node_modules/tweetnacl/nacl-fast.js","../node_modules/tweetnacl-util/nacl-util.js","../node_modules/semver/internal/constants.js","../node_modules/semver/internal/debug.js","../node_modules/semver/internal/re.js","../node_modules/semver/internal/parse-options.js","../node_modules/semver/internal/identifiers.js","../node_modules/semver/classes/semver.js","../node_modules/semver/functions/parse.js","../node_modules/semver/functions/valid.js","../node_modules/semver/functions/clean.js","../node_modules/semver/functions/inc.js","../node_modules/semver/functions/diff.js","../node_modules/semver/functions/major.js","../node_modules/semver/functions/minor.js","../node_modules/semver/functions/patch.js","../node_modules/semver/functions/prerelease.js","../node_modules/semver/functions/compare.js","../node_modules/semver/functions/rcompare.js","../node_modules/semver/functions/compare-loose.js","../node_modules/semver/functions/compare-build.js","../node_modules/semver/functions/sort.js","../node_modules/semver/functions/rsort.js","../node_modules/semver/functions/gt.js","../node_modules/semver/functions/lt.js","../node_modules/semver/functions/eq.js","../node_modules/semver/functions/neq.js","../node_modules/semver/functions/gte.js","../node_modules/semver/functions/lte.js","../node_modules/semver/functions/cmp.js","../node_modules/semver/functions/coerce.js","../node_modules/semver/functions/truncate.js","../node_modules/semver/internal/lrucache.js","../node_modules/semver/classes/range.js","../node_modules/semver/classes/comparator.js","../node_modules/semver/functions/satisfies.js","../node_modules/semver/ranges/to-comparators.js","../node_modules/semver/ranges/max-satisfying.js","../node_modules/semver/ranges/min-satisfying.js","../node_modules/semver/ranges/min-version.js","../node_modules/semver/ranges/valid.js","../node_modules/semver/ranges/outside.js","../node_modules/semver/ranges/gtr.js","../node_modules/semver/ranges/ltr.js","../node_modules/semver/ranges/intersects.js","../node_modules/semver/ranges/simplify.js","../node_modules/semver/ranges/subset.js","../node_modules/semver/index.js","../node_modules/qrcode-terminal/vendor/QRCode/QRMode.js","../node_modules/qrcode-terminal/vendor/QRCode/QR8bitByte.js","../node_modules/qrcode-terminal/vendor/QRCode/QRMath.js","../node_modules/qrcode-terminal/vendor/QRCode/QRPolynomial.js","../node_modules/qrcode-terminal/vendor/QRCode/QRMaskPattern.js","../node_modules/qrcode-terminal/vendor/QRCode/QRUtil.js","../node_modules/qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js","../node_modules/qrcode-terminal/vendor/QRCode/QRRSBlock.js","../node_modules/qrcode-terminal/vendor/QRCode/QRBitBuffer.js","../node_modules/qrcode-terminal/vendor/QRCode/index.js","../node_modules/qrcode-terminal/lib/main.js","../src/lifecycle/conflict-check.ts","../src/lifecycle/launchd.ts","../src/lifecycle/marker-schema.ts","../src/lifecycle/marker.ts","../src/lifecycle/task-scheduler.ts","../src/lifecycle/platform.ts","../src/db/check-sqlite-abi.ts","../src/lifecycle/log-cap.ts","../src/lifecycle/prompt.ts","../src/lifecycle/prefs.ts","../src/lifecycle/dev-takeover.ts","../src/lifecycle/repo.ts","../cli/attach.ts","../cli/attach-io.ts","../cli/identity.ts","../cli/setKey.ts","../src/pty-host/host.ts","../node_modules/dotenv/config.js","../cli/index.ts","../node_modules/commander/lib/error.js","../node_modules/commander/lib/argument.js","../node_modules/commander/lib/command.js","../node_modules/commander/lib/help.js","../node_modules/commander/lib/option.js","../node_modules/commander/lib/suggestSimilar.js","../node_modules/commander/index.js","../src/config/update-config.ts","../src/schemas/updateConfig.schema.ts","../src/devLog.ts","../src/lan-url.ts","../src/server.ts","../src/access-probe.ts","../src/agent/agent-client.ts","../src/agent/agent-config.ts","../src/agent/conversation-writer.ts","../node_modules/hono/dist/compose.js","../node_modules/hono/dist/request/constants.js","../node_modules/hono/dist/utils/buffer.js","../node_modules/hono/dist/utils/body.js","../node_modules/hono/dist/utils/url.js","../node_modules/hono/dist/request.js","../node_modules/hono/dist/utils/html.js","../node_modules/hono/dist/context.js","../node_modules/hono/dist/router.js","../node_modules/hono/dist/utils/constants.js","../node_modules/hono/dist/hono-base.js","../node_modules/hono/dist/router/utils.js","../node_modules/hono/dist/router/reg-exp-router/matcher.js","../node_modules/hono/dist/router/reg-exp-router/node.js","../node_modules/hono/dist/router/reg-exp-router/trie.js","../node_modules/hono/dist/router/reg-exp-router/router.js","../node_modules/hono/dist/router/smart-router/router.js","../node_modules/hono/dist/router/trie-router/node.js","../node_modules/hono/dist/router/trie-router/router.js","../node_modules/hono/dist/hono.js","../src/api/app.ts","../src/api/middleware/auth.middleware.ts","../src/e2ee/context.ts","../src/e2ee/protocol.ts","../src/e2ee/record.ts","../src/e2ee/rest-window.ts","../src/api/middleware/e2ee-envelope.middleware.ts","../src/api/middleware/error.middleware.ts","../src/api/middleware/cors.middleware.ts","../src/api/routes/backup.routes.ts","../src/services/backup/backup.ts","../src/version.ts","../src/api/routes/browse.routes.ts","../src/schemas/cacheAlert.schema.ts","../src/api/routes/cacheAlert.routes.ts","../src/schemas/claudeFlags.schema.ts","../src/api/routes/config.routes.ts","../src/api/routes/conversations.routes.ts","../src/api/routes/devices.routes.ts","../src/api/routes/diagnostics.routes.ts","../src/services/diagnostics/diagnostics.ts","../src/services/sessions/resumeIdentity.ts","../src/services/sessions/rehydrateSessions.ts","../src/utils/bootToken.ts","../src/e2ee/noise.ts","../src/e2ee/pair-request.ts","../src/e2ee/replay-cache.ts","../src/api/routes/e2ee.routes.ts","../src/api/rate-limit.ts","../src/api/routes/misc.routes.ts","../src/schemas/notification-prefs.schema.ts","../src/services/push/apnsClient.ts","../src/services/push/notificationCopy.ts","../src/api/routes/health.routes.ts","../src/api/routes/logs.routes.ts","../src/api/routes/pair.routes.ts","../src/api/routes/progress.routes.ts","../src/api/routes/projects.routes.ts","../src/api/routes/providers.routes.ts","../src/services/providers/providerHealth.ts","../src/services/providers/capabilities.ts","../src/api/routes/scanner.routes.ts","../src/api/routes/sessions.routes.ts","../node_modules/hono/dist/helper/websocket/index.js","../node_modules/@hono/node-ws/src/events.ts","../node_modules/@hono/node-ws/src/index.ts","../src/api/routes/ws.routes.ts","../src/api/handlers/conversations.handlers.ts","../src/services/conversations/findSearchTarget.ts","../src/services/conversations/inheritedHistory.ts","../src/services/projectChats/deriveProjectChatTitle.ts","../src/services/search/searchQuery.ts","../src/session-watchers.ts","../src/cursor-transcript-watch.ts","../src/utils/conversationEtag.ts","../src/utils/scanProgressThrottle.ts","../src/api/handlers/http-helpers.ts","../src/api/handlers/sessions.handlers.ts","../node_modules/nanoid/index.js","../node_modules/nanoid/url-alphabet/index.js","../src/agent/handle-send-agent-input.ts","../src/agent/errors.ts","../src/agent/history-mapper.ts","../src/agent/payload-guard.ts","../src/agent/handle-start-agent-session.ts","../src/browse.ts","../src/db/upload-records.ts","../src/process-discovery.ts","../src/schemas/prompt.schema.ts","../src/services/prompts/promptRegistry.ts","../src/services/prompts/ptyPromptAdapter.ts","../src/services/questions/parseStatusLine.ts","../src/services/questions/answersToKeystrokes.ts","../src/services/questions/resolveAnswer.ts","../src/services/sessions/codexRolloutOwner.ts","../src/services/sessions/conversationBusy.ts","../src/utils/canonicalizeProjectPath.ts","../src/services/sessions/idempotency.ts","../src/uploads.ts","../src/db/config.ts","../src/db/migrations.ts","../src/db/pool.ts","../src/db/repositories/cacheMetadata.repository.ts","../src/db/repositories/conversations.repository.ts","../src/db/repositories/managed-sessions.repository.ts","../src/db/repositories/projects.repository.ts","../src/db/repositories/sessions.repository.ts","../src/e2ee/pair-payload.ts","../src/external-tails.ts","../src/pair-store.ts","../src/pty-host/spawn-host.ts","../src/scanner-manager.ts","../src/services/cache/cacheMetadata.ts","../node_modules/date-fns/constants.js","../node_modules/date-fns/constructFrom.js","../node_modules/date-fns/toDate.js","../node_modules/date-fns/compareDesc.js","../node_modules/date-fns/isDate.js","../node_modules/date-fns/isValid.js","../node_modules/date-fns/parseISO.js","../src/utils/dates.ts","../src/services/projects/ensureProjectsForConversations.ts","../src/services/conversations/refreshConversationCache.ts","../src/services/conversations/shouldRefreshProjectsFromHdd.ts","../src/utils/isScannedSnapshotStale.ts","../src/seal.ts","../src/server-wiring.ts","../src/handlers/handleListProjects.ts","../src/services/cache-integrity/cacheIntegrityMonitor.ts","../src/services/cache-integrity/alertStore.ts","../src/services/cache-integrity/backup.ts","../src/services/conversations/conversationWatcher.ts","../src/services/conversations/pruneAgentConversations.ts","../src/services/host-pressure/hostPressure.ts","../src/services/push/expoPushSender.ts","../src/services/push/notificationPrefs.ts","../src/services/push/liveActivityNotifier.ts","../src/services/push/liveActivityContentState.ts","../src/services/push/liveActivityRenewal.ts","../src/services/push/liveActivitySender.ts","../src/services/push/waitingInputNotifier.ts","../src/services/questions/detectAskUserQuestion.ts","../src/services/questions/questionBroadcast.ts","../src/services/sessions/codexFormatCanary.ts","../src/session-registry-boot.ts","../src/lifecycle/process-liveness.ts","../src/services/sessions/autoResumeOnBoot.ts","../src/services/sessions/reconcileSessions.ts","../src/agent/dedupe.ts","../src/session-store.ts","../src/types.ts","../src/ws-hub.ts","../src/updater/check-update.ts","../src/updater/github-releases.ts","../src/updater/install.ts","../src/updater/active-sessions.ts","../src/updater/brew-detect.ts","../src/updater/download.ts","../src/updater/manifest.ts","../src/updater/paths.ts","../src/updater/restart.ts","../src/updater/restart-health.ts","../src/updater/stamp-version.ts","../src/updater/swap.ts","../src/updater/unpack.ts","../node_modules/tar/node_modules/@isaacs/fs-minipass/src/index.ts","../node_modules/tar/node_modules/minipass/src/index.ts","../node_modules/tar/src/create.ts","../node_modules/tar/src/list.ts","../node_modules/tar/src/options.ts","../node_modules/tar/src/make-command.ts","../node_modules/tar/src/parse.ts","../node_modules/tar/node_modules/minizlib/src/index.ts","../node_modules/tar/node_modules/minizlib/src/constants.ts","../node_modules/tar/src/header.ts","../node_modules/tar/src/large-numbers.ts","../node_modules/tar/src/types.ts","../node_modules/tar/src/pax.ts","../node_modules/tar/src/normalize-windows-path.ts","../node_modules/tar/src/read-entry.ts","../node_modules/tar/src/warn-method.ts","../node_modules/tar/src/strip-trailing-slashes.ts","../node_modules/tar/src/pack.ts","../node_modules/tar/src/write-entry.ts","../node_modules/tar/src/mode-fix.ts","../node_modules/tar/src/strip-absolute-path.ts","../node_modules/tar/src/winchars.ts","../node_modules/tar/node_modules/yallist/src/index.ts","../node_modules/tar/src/extract.ts","../node_modules/tar/src/unpack.ts","../node_modules/tar/src/get-write-flag.ts","../node_modules/tar/node_modules/chownr/src/index.ts","../node_modules/tar/src/mkdir.ts","../node_modules/tar/src/cwd-error.ts","../node_modules/tar/src/symlink-error.ts","../node_modules/tar/src/path-reservations.ts","../node_modules/tar/src/normalize-unicode.ts","../node_modules/tar/src/process-umask.ts","../node_modules/tar/src/replace.ts","../node_modules/tar/src/update.ts","../src/updater/update-log.ts","../cli/boot-log.ts","../cli/no-e2ee.ts","../cli/pair-banner.ts","../cli/prod.ts"],"sourcesContent":["const fs = require('fs')\nconst path = require('path')\nconst os = require('os')\nconst crypto = require('crypto')\n\n// Array of tips to display randomly\nconst TIPS = [\n  '◈ encrypted .env [www.dotenvx.com]',\n  '◈ secrets for agents [www.dotenvx.com]',\n  '⌁ auth for agents [www.vestauth.com]',\n  '⌘ custom filepath { path: \\'/custom/path/.env\\' }',\n  '⌘ enable debugging { debug: true }',\n  '⌘ override existing { override: true }',\n  '⌘ suppress logs { quiet: true }',\n  '⌘ multiple files { path: [\\'.env.local\\', \\'.env\\'] }'\n]\n\n// Get a random tip from the tips array\nfunction _getRandomTip () {\n  return TIPS[Math.floor(Math.random() * TIPS.length)]\n}\n\nfunction parseBoolean (value) {\n  if (typeof value === 'string') {\n    return !['false', '0', 'no', 'off', ''].includes(value.toLowerCase())\n  }\n  return Boolean(value)\n}\n\nfunction supportsAnsi () {\n  return process.stdout.isTTY // && process.env.TERM !== 'dumb'\n}\n\nfunction dim (text) {\n  return supportsAnsi() ? `\\x1b[2m${text}\\x1b[0m` : text\n}\n\nconst LINE = /(?:^|^)\\s*(?:export\\s+)?([\\w.-]+)(?:\\s*=\\s*?|:\\s+?)(\\s*'(?:\\\\'|[^'])*'|\\s*\"(?:\\\\\"|[^\"])*\"|\\s*`(?:\\\\`|[^`])*`|[^#\\r\\n]+)?\\s*(?:#.*)?(?:$|$)/mg\n\n// Parse src into an Object\nfunction parse (src) {\n  const obj = {}\n\n  // Convert buffer to string\n  let lines = src.toString()\n\n  // Convert line breaks to same format\n  lines = lines.replace(/\\r\\n?/mg, '\\n')\n\n  let match\n  while ((match = LINE.exec(lines)) != null) {\n    const key = match[1]\n\n    // Default undefined or null to empty string\n    let value = (match[2] || '')\n\n    // Remove whitespace\n    value = value.trim()\n\n    // Check if double quoted\n    const maybeQuote = value[0]\n\n    // Remove surrounding quotes\n    value = value.replace(/^(['\"`])([\\s\\S]*)\\1$/mg, '$2')\n\n    // Expand newlines if double quoted\n    if (maybeQuote === '\"') {\n      value = value.replace(/\\\\n/g, '\\n')\n      value = value.replace(/\\\\r/g, '\\r')\n    }\n\n    // Add to object\n    obj[key] = value\n  }\n\n  return obj\n}\n\nfunction _parseVault (options) {\n  options = options || {}\n\n  const vaultPath = _vaultPath(options)\n  options.path = vaultPath // parse .env.vault\n  const result = DotenvModule.configDotenv(options)\n  if (!result.parsed) {\n    const err = new Error(`MISSING_DATA: Cannot parse ${vaultPath} for an unknown reason`)\n    err.code = 'MISSING_DATA'\n    throw err\n  }\n\n  // handle scenario for comma separated keys - for use with key rotation\n  // example: DOTENV_KEY=\"dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=prod,dotenv://:key_7890@dotenvx.com/vault/.env.vault?environment=prod\"\n  const keys = _dotenvKey(options).split(',')\n  const length = keys.length\n\n  let decrypted\n  for (let i = 0; i < length; i++) {\n    try {\n      // Get full key\n      const key = keys[i].trim()\n\n      // Get instructions for decrypt\n      const attrs = _instructions(result, key)\n\n      // Decrypt\n      decrypted = DotenvModule.decrypt(attrs.ciphertext, attrs.key)\n\n      break\n    } catch (error) {\n      // last key\n      if (i + 1 >= length) {\n        throw error\n      }\n      // try next key\n    }\n  }\n\n  // Parse decrypted .env string\n  return DotenvModule.parse(decrypted)\n}\n\nfunction _warn (message) {\n  console.error(`⚠ ${message}`)\n}\n\nfunction _debug (message) {\n  console.log(`┆ ${message}`)\n}\n\nfunction _log (message) {\n  console.log(`◇ ${message}`)\n}\n\nfunction _dotenvKey (options) {\n  // prioritize developer directly setting options.DOTENV_KEY\n  if (options && options.DOTENV_KEY && options.DOTENV_KEY.length > 0) {\n    return options.DOTENV_KEY\n  }\n\n  // secondary infra already contains a DOTENV_KEY environment variable\n  if (process.env.DOTENV_KEY && process.env.DOTENV_KEY.length > 0) {\n    return process.env.DOTENV_KEY\n  }\n\n  // fallback to empty string\n  return ''\n}\n\nfunction _instructions (result, dotenvKey) {\n  // Parse DOTENV_KEY. Format is a URI\n  let uri\n  try {\n    uri = new URL(dotenvKey)\n  } catch (error) {\n    if (error.code === 'ERR_INVALID_URL') {\n      const err = new Error('INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development')\n      err.code = 'INVALID_DOTENV_KEY'\n      throw err\n    }\n\n    throw error\n  }\n\n  // Get decrypt key\n  const key = uri.password\n  if (!key) {\n    const err = new Error('INVALID_DOTENV_KEY: Missing key part')\n    err.code = 'INVALID_DOTENV_KEY'\n    throw err\n  }\n\n  // Get environment\n  const environment = uri.searchParams.get('environment')\n  if (!environment) {\n    const err = new Error('INVALID_DOTENV_KEY: Missing environment part')\n    err.code = 'INVALID_DOTENV_KEY'\n    throw err\n  }\n\n  // Get ciphertext payload\n  const environmentKey = `DOTENV_VAULT_${environment.toUpperCase()}`\n  const ciphertext = result.parsed[environmentKey] // DOTENV_VAULT_PRODUCTION\n  if (!ciphertext) {\n    const err = new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${environmentKey} in your .env.vault file.`)\n    err.code = 'NOT_FOUND_DOTENV_ENVIRONMENT'\n    throw err\n  }\n\n  return { ciphertext, key }\n}\n\nfunction _vaultPath (options) {\n  let possibleVaultPath = null\n\n  if (options && options.path && options.path.length > 0) {\n    if (Array.isArray(options.path)) {\n      for (const filepath of options.path) {\n        if (fs.existsSync(filepath)) {\n          possibleVaultPath = filepath.endsWith('.vault') ? filepath : `${filepath}.vault`\n        }\n      }\n    } else {\n      possibleVaultPath = options.path.endsWith('.vault') ? options.path : `${options.path}.vault`\n    }\n  } else {\n    possibleVaultPath = path.resolve(process.cwd(), '.env.vault')\n  }\n\n  if (fs.existsSync(possibleVaultPath)) {\n    return possibleVaultPath\n  }\n\n  return null\n}\n\nfunction _resolveHome (envPath) {\n  return envPath[0] === '~' ? path.join(os.homedir(), envPath.slice(1)) : envPath\n}\n\nfunction _configVault (options) {\n  const debug = parseBoolean(process.env.DOTENV_CONFIG_DEBUG || (options && options.debug))\n  const quiet = parseBoolean(process.env.DOTENV_CONFIG_QUIET || (options && options.quiet))\n\n  if (debug || !quiet) {\n    _log('loading env from encrypted .env.vault')\n  }\n\n  const parsed = DotenvModule._parseVault(options)\n\n  let processEnv = process.env\n  if (options && options.processEnv != null) {\n    processEnv = options.processEnv\n  }\n\n  DotenvModule.populate(processEnv, parsed, options)\n\n  return { parsed }\n}\n\nfunction configDotenv (options) {\n  const dotenvPath = path.resolve(process.cwd(), '.env')\n  let encoding = 'utf8'\n  let processEnv = process.env\n  if (options && options.processEnv != null) {\n    processEnv = options.processEnv\n  }\n  let debug = parseBoolean(processEnv.DOTENV_CONFIG_DEBUG || (options && options.debug))\n  let quiet = parseBoolean(processEnv.DOTENV_CONFIG_QUIET || (options && options.quiet))\n\n  if (options && options.encoding) {\n    encoding = options.encoding\n  } else {\n    if (debug) {\n      _debug('no encoding is specified (UTF-8 is used by default)')\n    }\n  }\n\n  let optionPaths = [dotenvPath] // default, look for .env\n  if (options && options.path) {\n    if (!Array.isArray(options.path)) {\n      optionPaths = [_resolveHome(options.path)]\n    } else {\n      optionPaths = [] // reset default\n      for (const filepath of options.path) {\n        optionPaths.push(_resolveHome(filepath))\n      }\n    }\n  }\n\n  // Build the parsed data in a temporary object (because we need to return it).  Once we have the final\n  // parsed data, we will combine it with process.env (or options.processEnv if provided).\n  let lastError\n  const parsedAll = {}\n  for (const path of optionPaths) {\n    try {\n      // Specifying an encoding returns a string instead of a buffer\n      const parsed = DotenvModule.parse(fs.readFileSync(path, { encoding }))\n\n      DotenvModule.populate(parsedAll, parsed, options)\n    } catch (e) {\n      if (debug) {\n        _debug(`failed to load ${path} ${e.message}`)\n      }\n      lastError = e\n    }\n  }\n\n  const populated = DotenvModule.populate(processEnv, parsedAll, options)\n\n  // handle user settings DOTENV_CONFIG_ options inside .env file(s)\n  debug = parseBoolean(processEnv.DOTENV_CONFIG_DEBUG || debug)\n  quiet = parseBoolean(processEnv.DOTENV_CONFIG_QUIET || quiet)\n\n  if (debug || !quiet) {\n    const keysCount = Object.keys(populated).length\n    const shortPaths = []\n    for (const filePath of optionPaths) {\n      try {\n        const relative = path.relative(process.cwd(), filePath)\n        shortPaths.push(relative)\n      } catch (e) {\n        if (debug) {\n          _debug(`failed to load ${filePath} ${e.message}`)\n        }\n        lastError = e\n      }\n    }\n\n    _log(`injected env (${keysCount}) from ${shortPaths.join(',')} ${dim(`// tip: ${_getRandomTip()}`)}`)\n  }\n\n  if (lastError) {\n    return { parsed: parsedAll, error: lastError }\n  } else {\n    return { parsed: parsedAll }\n  }\n}\n\n// Populates process.env from .env file\nfunction config (options) {\n  // fallback to original dotenv if DOTENV_KEY is not set\n  if (_dotenvKey(options).length === 0) {\n    return DotenvModule.configDotenv(options)\n  }\n\n  const vaultPath = _vaultPath(options)\n\n  // dotenvKey exists but .env.vault file does not exist\n  if (!vaultPath) {\n    _warn(`you set DOTENV_KEY but you are missing a .env.vault file at ${vaultPath}`)\n\n    return DotenvModule.configDotenv(options)\n  }\n\n  return DotenvModule._configVault(options)\n}\n\nfunction decrypt (encrypted, keyStr) {\n  const key = Buffer.from(keyStr.slice(-64), 'hex')\n  let ciphertext = Buffer.from(encrypted, 'base64')\n\n  const nonce = ciphertext.subarray(0, 12)\n  const authTag = ciphertext.subarray(-16)\n  ciphertext = ciphertext.subarray(12, -16)\n\n  try {\n    const aesgcm = crypto.createDecipheriv('aes-256-gcm', key, nonce)\n    aesgcm.setAuthTag(authTag)\n    return `${aesgcm.update(ciphertext)}${aesgcm.final()}`\n  } catch (error) {\n    const isRange = error instanceof RangeError\n    const invalidKeyLength = error.message === 'Invalid key length'\n    const decryptionFailed = error.message === 'Unsupported state or unable to authenticate data'\n\n    if (isRange || invalidKeyLength) {\n      const err = new Error('INVALID_DOTENV_KEY: It must be 64 characters long (or more)')\n      err.code = 'INVALID_DOTENV_KEY'\n      throw err\n    } else if (decryptionFailed) {\n      const err = new Error('DECRYPTION_FAILED: Please check your DOTENV_KEY')\n      err.code = 'DECRYPTION_FAILED'\n      throw err\n    } else {\n      throw error\n    }\n  }\n}\n\n// Populate process.env with parsed values\nfunction populate (processEnv, parsed, options = {}) {\n  const debug = Boolean(options && options.debug)\n  const override = Boolean(options && options.override)\n  const populated = {}\n\n  if (typeof parsed !== 'object') {\n    const err = new Error('OBJECT_REQUIRED: Please check the processEnv argument being passed to populate')\n    err.code = 'OBJECT_REQUIRED'\n    throw err\n  }\n\n  // Set process.env\n  for (const key of Object.keys(parsed)) {\n    if (Object.prototype.hasOwnProperty.call(processEnv, key)) {\n      if (override === true) {\n        processEnv[key] = parsed[key]\n        populated[key] = parsed[key]\n      }\n\n      if (debug) {\n        if (override === true) {\n          _debug(`\"${key}\" is already defined and WAS overwritten`)\n        } else {\n          _debug(`\"${key}\" is already defined and was NOT overwritten`)\n        }\n      }\n    } else {\n      processEnv[key] = parsed[key]\n      populated[key] = parsed[key]\n    }\n  }\n\n  return populated\n}\n\nconst DotenvModule = {\n  configDotenv,\n  _configVault,\n  _parseVault,\n  config,\n  decrypt,\n  parse,\n  populate\n}\n\nmodule.exports.configDotenv = DotenvModule.configDotenv\nmodule.exports._configVault = DotenvModule._configVault\nmodule.exports._parseVault = DotenvModule._parseVault\nmodule.exports.config = DotenvModule.config\nmodule.exports.decrypt = DotenvModule.decrypt\nmodule.exports.parse = DotenvModule.parse\nmodule.exports.populate = DotenvModule.populate\n\nmodule.exports = DotenvModule\n","// ../config.js accepts options via environment variables\nconst options = {}\n\nif (process.env.DOTENV_CONFIG_ENCODING != null) {\n  options.encoding = process.env.DOTENV_CONFIG_ENCODING\n}\n\nif (process.env.DOTENV_CONFIG_PATH != null) {\n  options.path = process.env.DOTENV_CONFIG_PATH\n}\n\nif (process.env.DOTENV_CONFIG_QUIET != null) {\n  options.quiet = process.env.DOTENV_CONFIG_QUIET\n}\n\nif (process.env.DOTENV_CONFIG_DEBUG != null) {\n  options.debug = process.env.DOTENV_CONFIG_DEBUG\n}\n\nif (process.env.DOTENV_CONFIG_OVERRIDE != null) {\n  options.override = process.env.DOTENV_CONFIG_OVERRIDE\n}\n\nif (process.env.DOTENV_CONFIG_DOTENV_KEY != null) {\n  options.DOTENV_KEY = process.env.DOTENV_CONFIG_DOTENV_KEY\n}\n\nmodule.exports = options\n","const re = /^dotenv_config_(encoding|path|quiet|debug|override|DOTENV_KEY)=(.+)$/\n\nmodule.exports = function optionMatcher (args) {\n  const options = args.reduce(function (acc, cur) {\n    const matches = cur.match(re)\n    if (matches) {\n      acc[matches[1]] = matches[2]\n    }\n    return acc\n  }, {})\n\n  if (!('quiet' in options)) {\n    options.quiet = 'true'\n  }\n\n  return options\n}\n","// Per-server Claude Code CLI flags: the allowlist registry, validation, and\n// argv construction.\n//\n// The registry is SERVER-owned and shipped to clients (mobile) over\n// `GET /api/config/claude-flags`. Mobile must not hardcode its own copy: only\n// the streamer knows which `claude` binary is installed locally, so a client-side\n// copy drifts the moment the CLI is upgraded — and the failure is silent (the\n// phone offers a flag the local CLI rejects, and the PTY dies at spawn with a\n// stderr the mobile UI never surfaces).\n//\n// `id` is deliberately NOT the CLI spelling. It is the stable key used in\n// server.yaml and over the wire, so a future CLI rename is a one-line change\n// here instead of a config migration.\n\n/** Claude Code `--permission-mode` values, as accepted by CLI v2.1.x. */\nexport const PERMISSION_MODES = [\n  \"acceptEdits\",\n  \"auto\",\n  \"bypassPermissions\",\n  \"manual\",\n  \"dontAsk\",\n  \"plan\",\n] as const;\n\nexport type PermissionMode = (typeof PERMISSION_MODES)[number];\n\nexport function isPermissionMode(value: unknown): value is PermissionMode {\n  return typeof value === \"string\" && (PERMISSION_MODES as readonly string[]).includes(value);\n}\n\n// Modes that disable the human-in-the-loop confirmation entirely. Two\n// consequences, both load-bearing:\n//   1. buildSettingsJson() adds skipDangerousModePermissionPrompt so the\n//      blocking \"Bypass Permissions mode\" boot gate never strands the PTY.\n//   2. Clients render an explicit confirmation before enabling one.\nexport const DANGEROUS_PERMISSION_MODES: readonly PermissionMode[] = [\n  \"bypassPermissions\",\n  \"dontAsk\",\n];\n\nexport function isDangerousPermissionMode(mode: PermissionMode): boolean {\n  return DANGEROUS_PERMISSION_MODES.includes(mode);\n}\n\n/**\n * The mode sessions will actually spawn with, for callers that need to know\n * before any spawn happens (the boot warning). Mirrors the precedence\n * `StreamerServer.spawnFlagOverrides()` applies — `claudeFlags.permissionMode`\n * wins over the `--default-permission-mode` fallback — so the two must not\n * drift: a warning that reads the fallback would stay silent while a\n * `claude_flags:` bypass is what actually reaches argv.\n */\nexport function effectivePermissionMode(\n  flags: ClaudeFlagValues | undefined,\n  fallback: string | undefined,\n): PermissionMode | undefined {\n  const candidate = flags?.permissionMode ?? fallback;\n  return isPermissionMode(candidate) ? candidate : undefined;\n}\n\n/** Claude Code `--effort` levels, as accepted by CLI v2.1.x. */\nexport const EFFORT_LEVELS = [\"low\", \"medium\", \"high\", \"xhigh\", \"max\"] as const;\n\nexport type EffortLevel = (typeof EFFORT_LEVELS)[number];\n\nexport function isEffortLevel(value: unknown): value is EffortLevel {\n  return typeof value === \"string\" && (EFFORT_LEVELS as readonly string[]).includes(value);\n}\n\nexport type FlagValueType = \"boolean\" | \"string\" | \"enum\" | \"list\";\n\n/** How risky enabling a flag is. Drives the client's confirmation UX. */\nexport type FlagRisk = \"low\" | \"elevated\" | \"dangerous\";\n\nexport interface FlagDefinition {\n  /** Stable config/wire key. Never the CLI spelling. */\n  id: string;\n  /** The literal CLI token, e.g. \"--add-dir\". */\n  flag: string;\n  valueType: FlagValueType;\n  /** Allowed values when valueType === \"enum\". */\n  enumValues?: readonly string[];\n  /**\n   * Baseline risk. `permissionMode` is the exception: it is only dangerous for\n   * the values in DANGEROUS_PERMISSION_MODES, so clients must call\n   * `flagValueRisk()` rather than reading this field directly.\n   */\n  risk: FlagRisk;\n}\n\nexport type ClaudeFlagValue = string | string[] | boolean;\nexport type ClaudeFlagValues = Record<string, ClaudeFlagValue>;\n\n// v1 allowlist. Every argv form here was verified against Claude Code v2.1.218.\n//\n// Deliberately excluded:\n//   --append-system-prompt  collides with the existing defaultSystemPrompt /\n//                           options.systemPrompt path; two writers of the system\n//                           prompt is a bug waiting to happen.\n//   --allow-dangerously-skip-permissions\n//                           a strictly weaker duplicate of\n//                           `--permission-mode bypassPermissions`; two paths to\n//                           one outcome is worse than one.\n//   --bare, --agent         no demonstrated need.\n//   --max-budget-usd, --fallback-model\n//                           BOTH ARE \"(only works with --print)\" per `claude\n//                           --help`, and this server never passes --print — it\n//                           spawns interactive PTY sessions. They were in the v1\n//                           allowlist and were silent no-ops there: validated,\n//                           persisted to server.yaml, emitted onto argv, and\n//                           ignored by the CLI. --max-budget-usd was the worse\n//                           of the two, because it was documented as the\n//                           runaway-spend bound for bypass mode — a cap that\n//                           never existed. Do not re-add either without first\n//                           confirming the flag applies without --print.\n// All remain reachable through the free-text extra-args escape hatch.\nexport const CLAUDE_FLAGS: readonly FlagDefinition[] = [\n  {\n    id: \"permissionMode\",\n    flag: \"--permission-mode\",\n    valueType: \"enum\",\n    enumValues: PERMISSION_MODES,\n    risk: \"low\",\n  },\n  { id: \"addDir\", flag: \"--add-dir\", valueType: \"list\", risk: \"elevated\" },\n  { id: \"allowedTools\", flag: \"--allowedTools\", valueType: \"list\", risk: \"elevated\" },\n  { id: \"disallowedTools\", flag: \"--disallowedTools\", valueType: \"list\", risk: \"low\" },\n  { id: \"model\", flag: \"--model\", valueType: \"string\", risk: \"low\" },\n  { id: \"effort\", flag: \"--effort\", valueType: \"enum\", enumValues: EFFORT_LEVELS, risk: \"low\" },\n];\n\n// Ids the spawn paths emit as explicit positionals rather than letting\n// buildFlagArgs append them — see PTYManager.doStart/startFresh, which always\n// pass `--permission-mode`, `--model` and `--effort`. Emitting them here too\n// would put a duplicate flag on the command line.\nconst SPAWN_POSITIONAL_FLAG_IDS = new Set([\"permissionMode\", \"model\", \"effort\"]);\n\nexport function findFlag(id: string): FlagDefinition | undefined {\n  return CLAUDE_FLAGS.find((f) => f.id === id);\n}\n\n/**\n * Effective risk of a specific value. Only `permissionMode` is value-dependent\n * (`acceptEdits` is routine; `bypassPermissions` is not).\n */\nexport function flagValueRisk(id: string, value: ClaudeFlagValue): FlagRisk {\n  const def = findFlag(id);\n  if (!def) return \"low\";\n  if (def.id === \"permissionMode\") {\n    return isPermissionMode(value) && isDangerousPermissionMode(value) ? \"dangerous\" : \"low\";\n  }\n  return def.risk;\n}\n\n/**\n * Drop everything that isn't a known id carrying a well-typed value.\n *\n * This is a TRUST BOUNDARY, not a convenience: values arrive from a\n * user-editable server.yaml and from HTTP, and they become process argv. Never\n * skip it. Unknown/invalid entries are dropped rather than throwing so one bad\n * key can't prevent the server from booting.\n */\nexport function validateFlagValues(raw: unknown): ClaudeFlagValues {\n  if (!raw || typeof raw !== \"object\" || Array.isArray(raw)) return {};\n  const out: ClaudeFlagValues = {};\n  for (const [id, value] of Object.entries(raw as Record<string, unknown>)) {\n    const def = findFlag(id);\n    if (!def) continue;\n    switch (def.valueType) {\n      case \"boolean\":\n        if (typeof value === \"boolean\") out[id] = value;\n        break;\n      case \"enum\":\n        if (typeof value === \"string\" && def.enumValues?.includes(value)) out[id] = value;\n        break;\n      case \"string\":\n        if (typeof value === \"string\" && value.trim().length > 0) out[id] = value.trim();\n        break;\n      case \"list\": {\n        if (!Array.isArray(value)) break;\n        const items = value\n          .filter((v): v is string => typeof v === \"string\" && v.trim().length > 0)\n          .map((v) => v.trim());\n        if (items.length > 0) out[id] = items;\n        break;\n      }\n    }\n  }\n  return out;\n}\n\n/**\n * Split a free-text extra-args string into argv tokens, honouring single and\n * double quotes so a path with spaces survives. Deliberately not a full shell\n * parser — no variable expansion, no globbing, no escapes beyond the quotes.\n */\nexport function tokenizeExtraArgs(input: string | undefined): string[] {\n  if (!input) return [];\n  const tokens: string[] = [];\n  let current = \"\";\n  let quote: '\"' | \"'\" | null = null;\n  let started = false;\n\n  for (const ch of input) {\n    if (quote) {\n      if (ch === quote) quote = null;\n      else current += ch;\n      continue;\n    }\n    if (ch === '\"' || ch === \"'\") {\n      quote = ch;\n      started = true;\n      continue;\n    }\n    if (/\\s/.test(ch)) {\n      if (started) {\n        tokens.push(current);\n        current = \"\";\n        started = false;\n      }\n      continue;\n    }\n    current += ch;\n    started = true;\n  }\n  if (started) tokens.push(current);\n  return tokens;\n}\n\n/**\n * Turn validated flag values + extra args into argv tokens.\n *\n * The SPAWN_POSITIONAL_FLAG_IDS are intentionally NOT emitted here: both PTY\n * spawn paths already pass them as explicit positionals, and emitting them\n * twice would put a duplicate flag on the command line. They flow through\n * `options.permissionMode` / `options.model` / `options.effort` instead, which\n * StreamerServer.spawnFlagOverrides() sources from these same flag values.\n *\n * Extra args land LAST so the escape hatch can override anything the allowlist\n * set.\n */\nexport function buildFlagArgs(values: ClaudeFlagValues | undefined, extraArgs?: string): string[] {\n  const args: string[] = [];\n  const safe = validateFlagValues(values ?? {});\n\n  for (const def of CLAUDE_FLAGS) {\n    if (SPAWN_POSITIONAL_FLAG_IDS.has(def.id)) continue;\n    const value = safe[def.id];\n    if (value === undefined) continue;\n    if (def.valueType === \"boolean\") {\n      if (value === true) args.push(def.flag);\n      continue;\n    }\n    if (Array.isArray(value)) {\n      // Variadic form (`--allowedTools A B`) — verified against v2.1.218.\n      args.push(def.flag, ...value);\n      continue;\n    }\n    args.push(def.flag, String(value));\n  }\n\n  args.push(...tokenizeExtraArgs(extraArgs));\n  return args;\n}\n\n// The `--settings` JSON every PTY session is spawned with.\n//\n// `skipDangerousModePermissionPrompt` is the fix for the blocking\n// \"Bypass Permissions mode\" warning menu (\"1. No, exit\" / \"2. Yes, I accept\").\n// Without it a bypass-mode session stalls on that gate forever and mobile shows\n// an empty screen. Probe-verified on Claude Code v2.1.218: with the key set the\n// session boots straight to a usable prompt. Only added for the modes that can\n// actually trigger the gate, so a normal session's settings blob is unchanged.\nexport function buildSettingsJson(permissionMode: PermissionMode): string {\n  const settings: Record<string, unknown> = { spinnerTipsEnabled: false };\n  if (isDangerousPermissionMode(permissionMode)) {\n    settings.skipDangerousModePermissionPrompt = true;\n  }\n  return JSON.stringify(settings);\n}\n","'use strict'\n\n// **************************************************************\n// * Code initially copied/adapted from \"pony-cause\" npm module *\n// * Please upstream improvements there                         *\n// **************************************************************\n\nconst isErrorLike = (err) => {\n  return err && typeof err.message === 'string'\n}\n\n/**\n * @param {Error|{ cause?: unknown|(()=>err)}} err\n * @returns {Error|Object|undefined}\n */\nconst getErrorCause = (err) => {\n  if (!err) return\n\n  /** @type {unknown} */\n  // @ts-ignore\n  const cause = err.cause\n\n  // VError / NError style causes\n  if (typeof cause === 'function') {\n    // @ts-ignore\n    const causeResult = err.cause()\n\n    return isErrorLike(causeResult)\n      ? causeResult\n      : undefined\n  } else {\n    return isErrorLike(cause)\n      ? cause\n      : undefined\n  }\n}\n\n/**\n * Internal method that keeps a track of which error we have already added, to avoid circular recursion\n *\n * @private\n * @param {Error} err\n * @param {Set<Error>} seen\n * @returns {string}\n */\nconst _stackWithCauses = (err, seen) => {\n  if (!isErrorLike(err)) return ''\n\n  const stack = err.stack || ''\n\n  // Ensure we don't go circular or crazily deep\n  if (seen.has(err)) {\n    return stack + '\\ncauses have become circular...'\n  }\n\n  const cause = getErrorCause(err)\n\n  if (cause) {\n    seen.add(err)\n    return (stack + '\\ncaused by: ' + _stackWithCauses(cause, seen))\n  } else {\n    return stack\n  }\n}\n\n/**\n * @param {Error} err\n * @returns {string}\n */\nconst stackWithCauses = (err) => _stackWithCauses(err, new Set())\n\n/**\n * Internal method that keeps a track of which error we have already added, to avoid circular recursion\n *\n * @private\n * @param {Error} err\n * @param {Set<Error>} seen\n * @param {boolean} [skip]\n * @returns {string}\n */\nconst _messageWithCauses = (err, seen, skip) => {\n  if (!isErrorLike(err)) return ''\n\n  const message = skip ? '' : (err.message || '')\n\n  // Ensure we don't go circular or crazily deep\n  if (seen.has(err)) {\n    return message + ': ...'\n  }\n\n  const cause = getErrorCause(err)\n\n  if (cause) {\n    seen.add(err)\n\n    // @ts-ignore\n    const skipIfVErrorStyleCause = typeof err.cause === 'function'\n\n    return (message +\n      (skipIfVErrorStyleCause ? '' : ': ') +\n      _messageWithCauses(cause, seen, skipIfVErrorStyleCause))\n  } else {\n    return message\n  }\n}\n\n/**\n * @param {Error} err\n * @returns {string}\n */\nconst messageWithCauses = (err) => _messageWithCauses(err, new Set())\n\nmodule.exports = {\n  isErrorLike,\n  getErrorCause,\n  stackWithCauses,\n  messageWithCauses\n}\n","'use strict'\n\nconst seen = Symbol('circular-ref-tag')\nconst rawSymbol = Symbol('pino-raw-err-ref')\n\nconst pinoErrProto = Object.create({}, {\n  type: {\n    enumerable: true,\n    writable: true,\n    value: undefined\n  },\n  message: {\n    enumerable: true,\n    writable: true,\n    value: undefined\n  },\n  stack: {\n    enumerable: true,\n    writable: true,\n    value: undefined\n  },\n  aggregateErrors: {\n    enumerable: true,\n    writable: true,\n    value: undefined\n  },\n  raw: {\n    enumerable: false,\n    get: function () {\n      return this[rawSymbol]\n    },\n    set: function (val) {\n      this[rawSymbol] = val\n    }\n  }\n})\nObject.defineProperty(pinoErrProto, rawSymbol, {\n  writable: true,\n  value: {}\n})\n\nmodule.exports = {\n  pinoErrProto,\n  pinoErrorSymbols: {\n    seen,\n    rawSymbol\n  }\n}\n","'use strict'\n\nmodule.exports = errSerializer\n\nconst { messageWithCauses, stackWithCauses, isErrorLike } = require('./err-helpers')\nconst { pinoErrProto, pinoErrorSymbols } = require('./err-proto')\nconst { seen } = pinoErrorSymbols\n\nconst { toString } = Object.prototype\n\nfunction errSerializer (err) {\n  if (!isErrorLike(err)) {\n    return err\n  }\n\n  err[seen] = undefined // tag to prevent re-looking at this\n  const _err = Object.create(pinoErrProto)\n  _err.type = toString.call(err.constructor) === '[object Function]'\n    ? err.constructor.name\n    : err.name\n  _err.message = messageWithCauses(err)\n  _err.stack = stackWithCauses(err)\n\n  if (Array.isArray(err.errors)) {\n    _err.aggregateErrors = err.errors.map(err => errSerializer(err))\n  }\n\n  for (const key in err) {\n    if (_err[key] === undefined) {\n      const val = err[key]\n      if (isErrorLike(val)) {\n        // We append cause messages and stacks to _err, therefore skipping causes here\n        if (key !== 'cause' && !Object.prototype.hasOwnProperty.call(val, seen)) {\n          _err[key] = errSerializer(val)\n        }\n      } else {\n        _err[key] = val\n      }\n    }\n  }\n\n  delete err[seen] // clean up tag in case err is serialized again later\n  _err.raw = err\n  return _err\n}\n","'use strict'\n\nmodule.exports = errWithCauseSerializer\n\nconst { isErrorLike } = require('./err-helpers')\nconst { pinoErrProto, pinoErrorSymbols } = require('./err-proto')\nconst { seen } = pinoErrorSymbols\n\nconst { toString } = Object.prototype\n\nfunction errWithCauseSerializer (err) {\n  if (!isErrorLike(err)) {\n    return err\n  }\n\n  err[seen] = undefined // tag to prevent re-looking at this\n  const _err = Object.create(pinoErrProto)\n  _err.type = toString.call(err.constructor) === '[object Function]'\n    ? err.constructor.name\n    : err.name\n  _err.message = err.message\n  _err.stack = err.stack\n\n  if (Array.isArray(err.errors)) {\n    _err.aggregateErrors = err.errors.map(err => errWithCauseSerializer(err))\n  }\n\n  if (isErrorLike(err.cause) && !Object.prototype.hasOwnProperty.call(err.cause, seen)) {\n    _err.cause = errWithCauseSerializer(err.cause)\n  }\n\n  for (const key in err) {\n    if (_err[key] === undefined) {\n      const val = err[key]\n      if (isErrorLike(val)) {\n        if (!Object.prototype.hasOwnProperty.call(val, seen)) {\n          _err[key] = errWithCauseSerializer(val)\n        }\n      } else {\n        _err[key] = val\n      }\n    }\n  }\n\n  delete err[seen] // clean up tag in case err is serialized again later\n  _err.raw = err\n  return _err\n}\n","'use strict'\n\nmodule.exports = {\n  mapHttpRequest,\n  reqSerializer\n}\n\nconst rawSymbol = Symbol('pino-raw-req-ref')\nconst pinoReqProto = Object.create({}, {\n  id: {\n    enumerable: true,\n    writable: true,\n    value: ''\n  },\n  method: {\n    enumerable: true,\n    writable: true,\n    value: ''\n  },\n  url: {\n    enumerable: true,\n    writable: true,\n    value: ''\n  },\n  query: {\n    enumerable: true,\n    writable: true,\n    value: ''\n  },\n  params: {\n    enumerable: true,\n    writable: true,\n    value: ''\n  },\n  headers: {\n    enumerable: true,\n    writable: true,\n    value: {}\n  },\n  remoteAddress: {\n    enumerable: true,\n    writable: true,\n    value: ''\n  },\n  remotePort: {\n    enumerable: true,\n    writable: true,\n    value: ''\n  },\n  raw: {\n    enumerable: false,\n    get: function () {\n      return this[rawSymbol]\n    },\n    set: function (val) {\n      this[rawSymbol] = val\n    }\n  }\n})\nObject.defineProperty(pinoReqProto, rawSymbol, {\n  writable: true,\n  value: {}\n})\n\nfunction reqSerializer (req) {\n  // req.info is for hapi compat.\n  const connection = req.info || req.socket\n  const _req = Object.create(pinoReqProto)\n  _req.id = (typeof req.id === 'function' ? req.id() : (req.id || (req.info ? req.info.id : undefined)))\n  _req.method = req.method\n  // req.originalUrl is for expressjs compat.\n  if (req.originalUrl) {\n    _req.url = req.originalUrl\n  } else {\n    const path = req.path\n    // path for safe hapi compat.\n    _req.url = typeof path === 'string' ? path : (req.url ? req.url.path || req.url : undefined)\n  }\n\n  if (req.query) {\n    _req.query = req.query\n  }\n\n  if (req.params) {\n    _req.params = req.params\n  }\n\n  _req.headers = req.headers\n  _req.remoteAddress = connection && connection.remoteAddress\n  _req.remotePort = connection && connection.remotePort\n  // req.raw is  for hapi compat/equivalence\n  _req.raw = req.raw || req\n  return _req\n}\n\nfunction mapHttpRequest (req) {\n  return {\n    req: reqSerializer(req)\n  }\n}\n","'use strict'\n\nmodule.exports = {\n  mapHttpResponse,\n  resSerializer\n}\n\nconst rawSymbol = Symbol('pino-raw-res-ref')\nconst pinoResProto = Object.create({}, {\n  statusCode: {\n    enumerable: true,\n    writable: true,\n    value: 0\n  },\n  headers: {\n    enumerable: true,\n    writable: true,\n    value: ''\n  },\n  raw: {\n    enumerable: false,\n    get: function () {\n      return this[rawSymbol]\n    },\n    set: function (val) {\n      this[rawSymbol] = val\n    }\n  }\n})\nObject.defineProperty(pinoResProto, rawSymbol, {\n  writable: true,\n  value: {}\n})\n\nfunction resSerializer (res) {\n  const _res = Object.create(pinoResProto)\n  _res.statusCode = res.headersSent ? res.statusCode : null\n  _res.headers = res.getHeaders ? res.getHeaders() : res._headers\n  _res.raw = res\n  return _res\n}\n\nfunction mapHttpResponse (res) {\n  return {\n    res: resSerializer(res)\n  }\n}\n","'use strict'\n\nconst errSerializer = require('./lib/err')\nconst errWithCauseSerializer = require('./lib/err-with-cause')\nconst reqSerializers = require('./lib/req')\nconst resSerializers = require('./lib/res')\n\nmodule.exports = {\n  err: errSerializer,\n  errWithCause: errWithCauseSerializer,\n  mapHttpRequest: reqSerializers.mapHttpRequest,\n  mapHttpResponse: resSerializers.mapHttpResponse,\n  req: reqSerializers.reqSerializer,\n  res: resSerializers.resSerializer,\n\n  wrapErrorSerializer: function wrapErrorSerializer (customSerializer) {\n    if (customSerializer === errSerializer) return customSerializer\n    return function wrapErrSerializer (err) {\n      return customSerializer(errSerializer(err))\n    }\n  },\n\n  wrapRequestSerializer: function wrapRequestSerializer (customSerializer) {\n    if (customSerializer === reqSerializers.reqSerializer) return customSerializer\n    return function wrappedReqSerializer (req) {\n      return customSerializer(reqSerializers.reqSerializer(req))\n    }\n  },\n\n  wrapResponseSerializer: function wrapResponseSerializer (customSerializer) {\n    if (customSerializer === resSerializers.resSerializer) return customSerializer\n    return function wrappedResSerializer (res) {\n      return customSerializer(resSerializers.resSerializer(res))\n    }\n  }\n}\n","'use strict'\n\nfunction noOpPrepareStackTrace (_, stack) {\n  return stack\n}\n\nmodule.exports = function getCallers () {\n  const originalPrepare = Error.prepareStackTrace\n  Error.prepareStackTrace = noOpPrepareStackTrace\n  const stack = new Error().stack\n  Error.prepareStackTrace = originalPrepare\n\n  if (!Array.isArray(stack)) {\n    return undefined\n  }\n\n  const entries = stack.slice(2)\n\n  const fileNames = []\n\n  for (const entry of entries) {\n    if (!entry) {\n      continue\n    }\n\n    fileNames.push(entry.getFileName())\n  }\n\n  return fileNames\n}\n","'use strict'\n\nfunction deepClone (obj) {\n  if (obj === null || typeof obj !== 'object') {\n    return obj\n  }\n\n  if (obj instanceof Date) {\n    return new Date(obj.getTime())\n  }\n\n  if (obj instanceof Array) {\n    const cloned = []\n    for (let i = 0; i < obj.length; i++) {\n      cloned[i] = deepClone(obj[i])\n    }\n    return cloned\n  }\n\n  if (typeof obj === 'object') {\n    const cloned = Object.create(Object.getPrototypeOf(obj))\n    for (const key in obj) {\n      if (Object.prototype.hasOwnProperty.call(obj, key)) {\n        cloned[key] = deepClone(obj[key])\n      }\n    }\n    return cloned\n  }\n\n  return obj\n}\n\nfunction parsePath (path) {\n  const parts = []\n  let current = ''\n  let inBrackets = false\n  let inQuotes = false\n  let quoteChar = ''\n\n  for (let i = 0; i < path.length; i++) {\n    const char = path[i]\n\n    if (!inBrackets && char === '.') {\n      if (current) {\n        parts.push(current)\n        current = ''\n      }\n    } else if (char === '[') {\n      if (current) {\n        parts.push(current)\n        current = ''\n      }\n      inBrackets = true\n    } else if (char === ']' && inBrackets) {\n      // Always push the current value when closing brackets, even if it's an empty string\n      parts.push(current)\n      current = ''\n      inBrackets = false\n      inQuotes = false\n    } else if ((char === '\"' || char === \"'\") && inBrackets) {\n      if (!inQuotes) {\n        inQuotes = true\n        quoteChar = char\n      } else if (char === quoteChar) {\n        inQuotes = false\n        quoteChar = ''\n      } else {\n        current += char\n      }\n    } else {\n      current += char\n    }\n  }\n\n  if (current) {\n    parts.push(current)\n  }\n\n  return parts\n}\n\nfunction setValue (obj, parts, value) {\n  let current = obj\n\n  for (let i = 0; i < parts.length - 1; i++) {\n    const key = parts[i]\n    // Type safety: Check if current is an object before using 'in' operator\n    if (typeof current !== 'object' || current === null || !(key in current)) {\n      return false // Path doesn't exist, don't create it\n    }\n    if (typeof current[key] !== 'object' || current[key] === null) {\n      return false // Path doesn't exist properly\n    }\n    current = current[key]\n  }\n\n  const lastKey = parts[parts.length - 1]\n  if (lastKey === '*') {\n    if (Array.isArray(current)) {\n      for (let i = 0; i < current.length; i++) {\n        current[i] = value\n      }\n    } else if (typeof current === 'object' && current !== null) {\n      for (const key in current) {\n        if (Object.prototype.hasOwnProperty.call(current, key)) {\n          current[key] = value\n        }\n      }\n    }\n  } else {\n    // Type safety: Check if current is an object before using 'in' operator\n    if (typeof current === 'object' && current !== null && lastKey in current && Object.prototype.hasOwnProperty.call(current, lastKey)) {\n      current[lastKey] = value\n    }\n  }\n  return true\n}\n\nfunction removeKey (obj, parts) {\n  let current = obj\n\n  for (let i = 0; i < parts.length - 1; i++) {\n    const key = parts[i]\n    // Type safety: Check if current is an object before using 'in' operator\n    if (typeof current !== 'object' || current === null || !(key in current)) {\n      return false // Path doesn't exist, don't create it\n    }\n    if (typeof current[key] !== 'object' || current[key] === null) {\n      return false // Path doesn't exist properly\n    }\n    current = current[key]\n  }\n\n  const lastKey = parts[parts.length - 1]\n  if (lastKey === '*') {\n    if (Array.isArray(current)) {\n      // For arrays, we can't really \"remove\" all items as that would change indices\n      // Instead, we set them to undefined which will be omitted by JSON.stringify\n      for (let i = 0; i < current.length; i++) {\n        current[i] = undefined\n      }\n    } else if (typeof current === 'object' && current !== null) {\n      for (const key in current) {\n        if (Object.prototype.hasOwnProperty.call(current, key)) {\n          delete current[key]\n        }\n      }\n    }\n  } else {\n    // Type safety: Check if current is an object before using 'in' operator\n    if (typeof current === 'object' && current !== null && lastKey in current && Object.prototype.hasOwnProperty.call(current, lastKey)) {\n      delete current[lastKey]\n    }\n  }\n  return true\n}\n\n// Sentinel object to distinguish between undefined value and non-existent path\nconst PATH_NOT_FOUND = Symbol('PATH_NOT_FOUND')\n\nfunction getValueIfExists (obj, parts) {\n  let current = obj\n\n  for (const part of parts) {\n    if (current === null || current === undefined) {\n      return PATH_NOT_FOUND\n    }\n    // Type safety: Check if current is an object before property access\n    if (typeof current !== 'object' || current === null) {\n      return PATH_NOT_FOUND\n    }\n    // Check if the property exists before accessing it\n    if (!(part in current)) {\n      return PATH_NOT_FOUND\n    }\n    current = current[part]\n  }\n\n  return current\n}\n\nfunction getValue (obj, parts) {\n  let current = obj\n\n  for (const part of parts) {\n    if (current === null || current === undefined) {\n      return undefined\n    }\n    // Type safety: Check if current is an object before property access\n    if (typeof current !== 'object' || current === null) {\n      return undefined\n    }\n    current = current[part]\n  }\n\n  return current\n}\n\nfunction redactPaths (obj, paths, censor, remove = false) {\n  for (const path of paths) {\n    const parts = parsePath(path)\n\n    if (parts.includes('*')) {\n      redactWildcardPath(obj, parts, censor, path, remove)\n    } else {\n      if (remove) {\n        removeKey(obj, parts)\n      } else {\n        // Get value only if path exists - single traversal\n        const value = getValueIfExists(obj, parts)\n        if (value === PATH_NOT_FOUND) {\n          continue\n        }\n\n        const actualCensor = typeof censor === 'function'\n          ? censor(value, parts)\n          : censor\n        setValue(obj, parts, actualCensor)\n      }\n    }\n  }\n}\n\nfunction redactWildcardPath (obj, parts, censor, originalPath, remove = false) {\n  const wildcardIndex = parts.indexOf('*')\n\n  if (wildcardIndex === parts.length - 1) {\n    const parentParts = parts.slice(0, -1)\n    let current = obj\n\n    for (const part of parentParts) {\n      if (current === null || current === undefined) return\n      // Type safety: Check if current is an object before property access\n      if (typeof current !== 'object' || current === null) return\n      current = current[part]\n    }\n\n    if (Array.isArray(current)) {\n      if (remove) {\n        // For arrays, set all items to undefined which will be omitted by JSON.stringify\n        for (let i = 0; i < current.length; i++) {\n          current[i] = undefined\n        }\n      } else {\n        for (let i = 0; i < current.length; i++) {\n          const indexPath = [...parentParts, i.toString()]\n          const actualCensor = typeof censor === 'function'\n            ? censor(current[i], indexPath)\n            : censor\n          current[i] = actualCensor\n        }\n      }\n    } else if (typeof current === 'object' && current !== null) {\n      if (remove) {\n        // Collect keys to delete to avoid issues with deleting during iteration\n        const keysToDelete = []\n        for (const key in current) {\n          if (Object.prototype.hasOwnProperty.call(current, key)) {\n            keysToDelete.push(key)\n          }\n        }\n        for (const key of keysToDelete) {\n          delete current[key]\n        }\n      } else {\n        for (const key in current) {\n          const keyPath = [...parentParts, key]\n          const actualCensor = typeof censor === 'function'\n            ? censor(current[key], keyPath)\n            : censor\n          current[key] = actualCensor\n        }\n      }\n    }\n  } else {\n    redactIntermediateWildcard(obj, parts, censor, wildcardIndex, originalPath, remove)\n  }\n}\n\nfunction redactIntermediateWildcard (obj, parts, censor, wildcardIndex, originalPath, remove = false) {\n  const beforeWildcard = parts.slice(0, wildcardIndex)\n  const afterWildcard = parts.slice(wildcardIndex + 1)\n  const pathArray = [] // Cached array to avoid allocations\n\n  function traverse (current, pathLength) {\n    if (pathLength === beforeWildcard.length) {\n      if (Array.isArray(current)) {\n        for (let i = 0; i < current.length; i++) {\n          pathArray[pathLength] = i.toString()\n          traverse(current[i], pathLength + 1)\n        }\n      } else if (typeof current === 'object' && current !== null) {\n        for (const key in current) {\n          pathArray[pathLength] = key\n          traverse(current[key], pathLength + 1)\n        }\n      }\n    } else if (pathLength < beforeWildcard.length) {\n      const nextKey = beforeWildcard[pathLength]\n      // Type safety: Check if current is an object before using 'in' operator\n      if (current && typeof current === 'object' && current !== null && nextKey in current) {\n        pathArray[pathLength] = nextKey\n        traverse(current[nextKey], pathLength + 1)\n      }\n    } else {\n      // Check if afterWildcard contains more wildcards\n      if (afterWildcard.includes('*')) {\n        // Recursively handle remaining wildcards\n        // Wrap censor to prepend current path context\n        const wrappedCensor = typeof censor === 'function'\n          ? (value, path) => {\n              const fullPath = [...pathArray.slice(0, pathLength), ...path]\n              return censor(value, fullPath)\n            }\n          : censor\n        redactWildcardPath(current, afterWildcard, wrappedCensor, originalPath, remove)\n      } else {\n        // No more wildcards, apply the redaction directly\n        if (remove) {\n          removeKey(current, afterWildcard)\n        } else {\n          const actualCensor = typeof censor === 'function'\n            ? censor(getValue(current, afterWildcard), [...pathArray.slice(0, pathLength), ...afterWildcard])\n            : censor\n          setValue(current, afterWildcard, actualCensor)\n        }\n      }\n    }\n  }\n\n  if (beforeWildcard.length === 0) {\n    traverse(obj, 0)\n  } else {\n    let current = obj\n    for (let i = 0; i < beforeWildcard.length; i++) {\n      const part = beforeWildcard[i]\n      if (current === null || current === undefined) return\n      // Type safety: Check if current is an object before property access\n      if (typeof current !== 'object' || current === null) return\n      current = current[part]\n      pathArray[i] = part\n    }\n    if (current !== null && current !== undefined) {\n      traverse(current, beforeWildcard.length)\n    }\n  }\n}\n\nfunction buildPathStructure (pathsToClone) {\n  if (pathsToClone.length === 0) {\n    return null // No paths to redact\n  }\n\n  // Parse all paths and organize by depth\n  const pathStructure = new Map()\n  for (const path of pathsToClone) {\n    const parts = parsePath(path)\n    let current = pathStructure\n    for (let i = 0; i < parts.length; i++) {\n      const part = parts[i]\n      if (!current.has(part)) {\n        current.set(part, new Map())\n      }\n      current = current.get(part)\n    }\n  }\n  return pathStructure\n}\n\nfunction selectiveClone (obj, pathStructure) {\n  if (!pathStructure) {\n    return obj // No paths to redact, return original\n  }\n\n  function cloneSelectively (source, pathMap, depth = 0) {\n    if (!pathMap || pathMap.size === 0) {\n      return source // No more paths to clone, return reference\n    }\n\n    if (source === null || typeof source !== 'object') {\n      return source\n    }\n\n    if (source instanceof Date) {\n      return new Date(source.getTime())\n    }\n\n    if (Array.isArray(source)) {\n      const cloned = []\n      for (let i = 0; i < source.length; i++) {\n        const indexStr = i.toString()\n        if (pathMap.has(indexStr) || pathMap.has('*')) {\n          cloned[i] = cloneSelectively(source[i], pathMap.get(indexStr) || pathMap.get('*'))\n        } else {\n          cloned[i] = source[i] // Share reference for non-redacted items\n        }\n      }\n      return cloned\n    }\n\n    // Handle objects\n    const cloned = Object.create(Object.getPrototypeOf(source))\n    for (const key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        if (pathMap.has(key) || pathMap.has('*')) {\n          cloned[key] = cloneSelectively(source[key], pathMap.get(key) || pathMap.get('*'))\n        } else {\n          cloned[key] = source[key] // Share reference for non-redacted properties\n        }\n      }\n    }\n    return cloned\n  }\n\n  return cloneSelectively(obj, pathStructure)\n}\n\nfunction validatePath (path) {\n  if (typeof path !== 'string') {\n    throw new Error('Paths must be (non-empty) strings')\n  }\n\n  if (path === '') {\n    throw new Error('Invalid redaction path ()')\n  }\n\n  // Check for double dots\n  if (path.includes('..')) {\n    throw new Error(`Invalid redaction path (${path})`)\n  }\n\n  // Check for comma-separated paths (invalid syntax)\n  if (path.includes(',')) {\n    throw new Error(`Invalid redaction path (${path})`)\n  }\n\n  // Check for unmatched brackets\n  let bracketCount = 0\n  let inQuotes = false\n  let quoteChar = ''\n\n  for (let i = 0; i < path.length; i++) {\n    const char = path[i]\n\n    if ((char === '\"' || char === \"'\") && bracketCount > 0) {\n      if (!inQuotes) {\n        inQuotes = true\n        quoteChar = char\n      } else if (char === quoteChar) {\n        inQuotes = false\n        quoteChar = ''\n      }\n    } else if (char === '[' && !inQuotes) {\n      bracketCount++\n    } else if (char === ']' && !inQuotes) {\n      bracketCount--\n      if (bracketCount < 0) {\n        throw new Error(`Invalid redaction path (${path})`)\n      }\n    }\n  }\n\n  if (bracketCount !== 0) {\n    throw new Error(`Invalid redaction path (${path})`)\n  }\n}\n\nfunction validatePaths (paths) {\n  if (!Array.isArray(paths)) {\n    throw new TypeError('paths must be an array')\n  }\n\n  for (const path of paths) {\n    validatePath(path)\n  }\n}\n\nfunction slowRedact (options = {}) {\n  const {\n    paths = [],\n    censor = '[REDACTED]',\n    serialize = JSON.stringify,\n    strict = true,\n    remove = false\n  } = options\n\n  // Validate paths upfront to match fast-redact behavior\n  validatePaths(paths)\n\n  // Build path structure once during setup, not on every call\n  const pathStructure = buildPathStructure(paths)\n\n  return function redact (obj) {\n    if (strict && (obj === null || typeof obj !== 'object')) {\n      if (obj === null || obj === undefined) {\n        return serialize ? serialize(obj) : obj\n      }\n      if (typeof obj !== 'object') {\n        return serialize ? serialize(obj) : obj\n      }\n    }\n\n    // Only clone paths that need redaction\n    const cloned = selectiveClone(obj, pathStructure)\n    const original = obj // Keep reference to original for restore\n\n    let actualCensor = censor\n    if (typeof censor === 'function') {\n      actualCensor = censor\n    }\n\n    redactPaths(cloned, paths, actualCensor, remove)\n\n    if (serialize === false) {\n      cloned.restore = function () {\n        return deepClone(original) // Full clone only when restore is called\n      }\n      return cloned\n    }\n\n    if (typeof serialize === 'function') {\n      return serialize(cloned)\n    }\n\n    return JSON.stringify(cloned)\n  }\n}\n\nmodule.exports = slowRedact\n","'use strict'\n\nconst setLevelSym = Symbol('pino.setLevel')\nconst getLevelSym = Symbol('pino.getLevel')\nconst levelValSym = Symbol('pino.levelVal')\nconst levelCompSym = Symbol('pino.levelComp')\nconst useLevelLabelsSym = Symbol('pino.useLevelLabels')\nconst useOnlyCustomLevelsSym = Symbol('pino.useOnlyCustomLevels')\nconst mixinSym = Symbol('pino.mixin')\n\nconst lsCacheSym = Symbol('pino.lsCache')\nconst chindingsSym = Symbol('pino.chindings')\n\nconst asJsonSym = Symbol('pino.asJson')\nconst writeSym = Symbol('pino.write')\nconst redactFmtSym = Symbol('pino.redactFmt')\n\nconst timeSym = Symbol('pino.time')\nconst timeSliceIndexSym = Symbol('pino.timeSliceIndex')\nconst streamSym = Symbol('pino.stream')\nconst stringifySym = Symbol('pino.stringify')\nconst stringifySafeSym = Symbol('pino.stringifySafe')\nconst stringifiersSym = Symbol('pino.stringifiers')\nconst endSym = Symbol('pino.end')\nconst formatOptsSym = Symbol('pino.formatOpts')\nconst messageKeySym = Symbol('pino.messageKey')\nconst errorKeySym = Symbol('pino.errorKey')\nconst nestedKeySym = Symbol('pino.nestedKey')\nconst nestedKeyStrSym = Symbol('pino.nestedKeyStr')\nconst mixinMergeStrategySym = Symbol('pino.mixinMergeStrategy')\nconst msgPrefixSym = Symbol('pino.msgPrefix')\n\nconst wildcardFirstSym = Symbol('pino.wildcardFirst')\n\n// public symbols, no need to use the same pino\n// version for these\nconst serializersSym = Symbol.for('pino.serializers')\nconst formattersSym = Symbol.for('pino.formatters')\nconst hooksSym = Symbol.for('pino.hooks')\nconst needsMetadataGsym = Symbol.for('pino.metadata')\n\nmodule.exports = {\n  setLevelSym,\n  getLevelSym,\n  levelValSym,\n  levelCompSym,\n  useLevelLabelsSym,\n  mixinSym,\n  lsCacheSym,\n  chindingsSym,\n  asJsonSym,\n  writeSym,\n  serializersSym,\n  redactFmtSym,\n  timeSym,\n  timeSliceIndexSym,\n  streamSym,\n  stringifySym,\n  stringifySafeSym,\n  stringifiersSym,\n  endSym,\n  formatOptsSym,\n  messageKeySym,\n  errorKeySym,\n  nestedKeySym,\n  wildcardFirstSym,\n  needsMetadataGsym,\n  useOnlyCustomLevelsSym,\n  formattersSym,\n  hooksSym,\n  nestedKeyStrSym,\n  mixinMergeStrategySym,\n  msgPrefixSym\n}\n","'use strict'\n\nconst Redact = require('@pinojs/redact')\nconst { redactFmtSym, wildcardFirstSym } = require('./symbols')\n\n// Custom rx regex equivalent to fast-redact's rx\nconst rx = /[^.[\\]]+|\\[([^[\\]]*?)\\]/g\n\nconst CENSOR = '[Redacted]'\nconst strict = false // TODO should this be configurable?\n\nfunction redaction (opts, serialize) {\n  const { paths, censor, remove } = handle(opts)\n\n  const shape = paths.reduce((o, str) => {\n    rx.lastIndex = 0\n    const first = rx.exec(str)\n    const next = rx.exec(str)\n\n    // ns is the top-level path segment, brackets + quoting removed.\n    let ns = first[1] !== undefined\n      ? first[1].replace(/^(?:\"|'|`)(.*)(?:\"|'|`)$/, '$1')\n      : first[0]\n\n    if (ns === '*') {\n      ns = wildcardFirstSym\n    }\n\n    // top level key:\n    if (next === null) {\n      o[ns] = null\n      return o\n    }\n\n    // path with at least two segments:\n    // if ns is already redacted at the top level, ignore lower level redactions\n    if (o[ns] === null) {\n      return o\n    }\n\n    const { index } = next\n    const nextPath = `${str.substr(index, str.length - 1)}`\n\n    o[ns] = o[ns] || []\n\n    // shape is a mix of paths beginning with literal values and wildcard\n    // paths [ \"a.b.c\", \"*.b.z\" ] should reduce to a shape of\n    // { \"a\": [ \"b.c\", \"b.z\" ], *: [ \"b.z\" ] }\n    // note: \"b.z\" is in both \"a\" and * arrays because \"a\" matches the wildcard.\n    // (* entry has wildcardFirstSym as key)\n    if (ns !== wildcardFirstSym && o[ns].length === 0) {\n      // first time ns's get all '*' redactions so far\n      o[ns].push(...(o[wildcardFirstSym] || []))\n    }\n\n    if (ns === wildcardFirstSym) {\n      // new * path gets added to all previously registered literal ns's.\n      Object.keys(o).forEach(function (k) {\n        if (o[k]) {\n          o[k].push(nextPath)\n        }\n      })\n    }\n\n    o[ns].push(nextPath)\n    return o\n  }, {})\n\n  // the redactor assigned to the format symbol key\n  // provides top level redaction for instances where\n  // an object is interpolated into the msg string\n  const result = {\n    [redactFmtSym]: Redact({ paths, censor, serialize, strict, remove })\n  }\n\n  const topCensor = (...args) => {\n    return typeof censor === 'function' ? serialize(censor(...args)) : serialize(censor)\n  }\n\n  return [...Object.keys(shape), ...Object.getOwnPropertySymbols(shape)].reduce((o, k) => {\n    // top level key:\n    if (shape[k] === null) {\n      o[k] = (value) => topCensor(value, [k])\n    } else {\n      const wrappedCensor = typeof censor === 'function'\n        ? (value, path) => {\n            return censor(value, [k, ...path])\n          }\n        : censor\n      o[k] = Redact({\n        paths: shape[k],\n        censor: wrappedCensor,\n        serialize,\n        strict,\n        remove\n      })\n    }\n    return o\n  }, result)\n}\n\nfunction handle (opts) {\n  if (Array.isArray(opts)) {\n    opts = { paths: opts, censor: CENSOR }\n    return opts\n  }\n  let { paths, censor = CENSOR, remove } = opts\n  if (Array.isArray(paths) === false) { throw Error('pino – redact must contain an array of strings') }\n  if (remove === true) censor = undefined\n\n  return { paths, censor, remove }\n}\n\nmodule.exports = redaction\n","'use strict'\n\nconst nullTime = () => ''\n\nconst epochTime = () => `,\"time\":${Date.now()}`\n\nconst unixTime = () => `,\"time\":${Math.round(Date.now() / 1000.0)}`\n\nconst isoTime = () => `,\"time\":\"${new Date(Date.now()).toISOString()}\"` // using Date.now() for testability\n\nconst NS_PER_MS = 1_000_000n\nconst NS_PER_SEC = 1_000_000_000n\n\nconst startWallTimeNs = BigInt(Date.now()) * NS_PER_MS\nconst startHrTime = process.hrtime.bigint()\n\nconst isoTimeNano = () => {\n  const elapsedNs = process.hrtime.bigint() - startHrTime\n  const currentTimeNs = startWallTimeNs + elapsedNs\n\n  const secondsSinceEpoch = currentTimeNs / NS_PER_SEC\n  const nanosWithinSecond = currentTimeNs % NS_PER_SEC\n\n  const msSinceEpoch = Number(secondsSinceEpoch * 1000n + nanosWithinSecond / 1_000_000n)\n  const date = new Date(msSinceEpoch)\n\n  const year = date.getUTCFullYear()\n  const month = (date.getUTCMonth() + 1).toString().padStart(2, '0')\n  const day = date.getUTCDate().toString().padStart(2, '0')\n  const hours = date.getUTCHours().toString().padStart(2, '0')\n  const minutes = date.getUTCMinutes().toString().padStart(2, '0')\n  const seconds = date.getUTCSeconds().toString().padStart(2, '0')\n\n  return `,\"time\":\"${year}-${month}-${day}T${hours}:${minutes}:${seconds}.${nanosWithinSecond\n    .toString()\n    .padStart(9, '0')}Z\"`\n}\n\nmodule.exports = { nullTime, epochTime, unixTime, isoTime, isoTimeNano }\n","'use strict'\nfunction tryStringify (o) {\n  try { return JSON.stringify(o) } catch(e) { return '\"[Circular]\"' }\n}\n\nmodule.exports = format\n\nfunction format(f, args, opts) {\n  var ss = (opts && opts.stringify) || tryStringify\n  var offset = 1\n  if (typeof f === 'object' && f !== null) {\n    var len = args.length + offset\n    if (len === 1) return f\n    var objects = new Array(len)\n    objects[0] = ss(f)\n    for (var index = 1; index < len; index++) {\n      objects[index] = ss(args[index])\n    }\n    return objects.join(' ')\n  }\n  if (typeof f !== 'string') {\n    return f\n  }\n  var argLen = args.length\n  if (argLen === 0) return f\n  var str = ''\n  var a = 1 - offset\n  var lastPos = -1\n  var flen = (f && f.length) || 0\n  for (var i = 0; i < flen;) {\n    if (f.charCodeAt(i) === 37 && i + 1 < flen) {\n      lastPos = lastPos > -1 ? lastPos : 0\n      switch (f.charCodeAt(i + 1)) {\n        case 100: // 'd'\n        case 102: // 'f'\n          if (a >= argLen)\n            break\n          if (args[a] == null)  break\n          if (lastPos < i)\n            str += f.slice(lastPos, i)\n          str += Number(args[a])\n          lastPos = i + 2\n          i++\n          break\n        case 105: // 'i'\n          if (a >= argLen)\n            break\n          if (args[a] == null)  break\n          if (lastPos < i)\n            str += f.slice(lastPos, i)\n          str += Math.floor(Number(args[a]))\n          lastPos = i + 2\n          i++\n          break\n        case 79: // 'O'\n        case 111: // 'o'\n        case 106: // 'j'\n          if (a >= argLen)\n            break\n          if (args[a] === undefined) break\n          if (lastPos < i)\n            str += f.slice(lastPos, i)\n          var type = typeof args[a]\n          if (type === 'string') {\n            str += '\\'' + args[a] + '\\''\n            lastPos = i + 2\n            i++\n            break\n          }\n          if (type === 'function') {\n            str += args[a].name || '<anonymous>'\n            lastPos = i + 2\n            i++\n            break\n          }\n          str += ss(args[a])\n          lastPos = i + 2\n          i++\n          break\n        case 115: // 's'\n          if (a >= argLen)\n            break\n          if (lastPos < i)\n            str += f.slice(lastPos, i)\n          str += String(args[a])\n          lastPos = i + 2\n          i++\n          break\n        case 37: // '%'\n          if (lastPos < i)\n            str += f.slice(lastPos, i)\n          str += '%'\n          lastPos = i + 2\n          i++\n          a--\n          break\n      }\n      ++a\n    }\n    ++i\n  }\n  if (lastPos === -1)\n    return f\n  else if (lastPos < flen) {\n    str += f.slice(lastPos)\n  }\n\n  return str\n}\n","'use strict'\n\n/* global SharedArrayBuffer, Atomics */\n\nif (typeof SharedArrayBuffer !== 'undefined' && typeof Atomics !== 'undefined') {\n  const nil = new Int32Array(new SharedArrayBuffer(4))\n\n  function sleep (ms) {\n    // also filters out NaN, non-number types, including empty strings, but allows bigints\n    const valid = ms > 0 && ms < Infinity \n    if (valid === false) {\n      if (typeof ms !== 'number' && typeof ms !== 'bigint') {\n        throw TypeError('sleep: ms must be a number')\n      }\n      throw RangeError('sleep: ms must be a number that is greater than 0 but less than Infinity')\n    }\n\n    Atomics.wait(nil, 0, 0, Number(ms))\n  }\n  module.exports = sleep\n} else {\n\n  function sleep (ms) {\n    // also filters out NaN, non-number types, including empty strings, but allows bigints\n    const valid = ms > 0 && ms < Infinity \n    if (valid === false) {\n      if (typeof ms !== 'number' && typeof ms !== 'bigint') {\n        throw TypeError('sleep: ms must be a number')\n      }\n      throw RangeError('sleep: ms must be a number that is greater than 0 but less than Infinity')\n    }\n    const target = Date.now() + Number(ms)\n    while (target > Date.now()){}\n  }\n\n  module.exports = sleep\n\n}\n","'use strict'\n\nconst fs = require('fs')\nconst EventEmitter = require('events')\nconst inherits = require('util').inherits\nconst path = require('path')\nconst sleep = require('atomic-sleep')\nconst assert = require('assert')\n\nconst BUSY_WRITE_TIMEOUT = 100\nconst kEmptyBuffer = Buffer.allocUnsafe(0)\n\n// 16 KB. Don't write more than docker buffer size.\n// https://github.com/moby/moby/blob/513ec73831269947d38a644c278ce3cac36783b2/daemon/logger/copier.go#L13\nconst MAX_WRITE = 16 * 1024\n\nconst kContentModeBuffer = 'buffer'\nconst kContentModeUtf8 = 'utf8'\n\nconst [major, minor] = (process.versions.node || '0.0').split('.').map(Number)\nconst kCopyBuffer = major >= 22 && minor >= 7\n\nfunction openFile (file, sonic) {\n  sonic._opening = true\n  sonic._writing = true\n  sonic._asyncDrainScheduled = false\n\n  // NOTE: 'error' and 'ready' events emitted below only relevant when sonic.sync===false\n  // for sync mode, there is no way to add a listener that will receive these\n\n  function fileOpened (err, fd) {\n    if (err) {\n      sonic._reopening = false\n      sonic._writing = false\n      sonic._opening = false\n\n      if (sonic.sync) {\n        process.nextTick(() => {\n          if (sonic.listenerCount('error') > 0) {\n            sonic.emit('error', err)\n          }\n        })\n      } else {\n        sonic.emit('error', err)\n      }\n      return\n    }\n\n    const reopening = sonic._reopening\n\n    sonic.fd = fd\n    sonic.file = file\n    sonic._reopening = false\n    sonic._opening = false\n    sonic._writing = false\n\n    if (sonic.sync) {\n      process.nextTick(() => sonic.emit('ready'))\n    } else {\n      sonic.emit('ready')\n    }\n\n    if (sonic.destroyed) {\n      return\n    }\n\n    // start\n    if ((!sonic._writing && sonic._len > sonic.minLength) || sonic._flushPending) {\n      sonic._actualWrite()\n    } else if (reopening) {\n      process.nextTick(() => sonic.emit('drain'))\n    }\n  }\n\n  const flags = sonic.append ? 'a' : 'w'\n  const mode = sonic.mode\n\n  if (sonic.sync) {\n    try {\n      if (sonic.mkdir) fs.mkdirSync(path.dirname(file), { recursive: true })\n      const fd = fs.openSync(file, flags, mode)\n      fileOpened(null, fd)\n    } catch (err) {\n      fileOpened(err)\n      throw err\n    }\n  } else if (sonic.mkdir) {\n    fs.mkdir(path.dirname(file), { recursive: true }, (err) => {\n      if (err) return fileOpened(err)\n      fs.open(file, flags, mode, fileOpened)\n    })\n  } else {\n    fs.open(file, flags, mode, fileOpened)\n  }\n}\n\nfunction SonicBoom (opts) {\n  if (!(this instanceof SonicBoom)) {\n    return new SonicBoom(opts)\n  }\n\n  let { fd, dest, minLength, maxLength, maxWrite, periodicFlush, sync, append = true, mkdir, retryEAGAIN, fsync, contentMode, mode } = opts || {}\n\n  fd = fd || dest\n\n  this._len = 0\n  this.fd = -1\n  this._bufs = []\n  this._lens = []\n  this._writing = false\n  this._ending = false\n  this._reopening = false\n  this._asyncDrainScheduled = false\n  this._flushPending = false\n  this._hwm = Math.max(minLength || 0, 16387)\n  this.file = null\n  this.destroyed = false\n  this.minLength = minLength || 0\n  this.maxLength = maxLength || 0\n  this.maxWrite = maxWrite || MAX_WRITE\n  this._periodicFlush = periodicFlush || 0\n  this._periodicFlushTimer = undefined\n  this.sync = sync || false\n  this.writable = true\n  this._fsync = fsync || false\n  this.append = append || false\n  this.mode = mode\n  this.retryEAGAIN = retryEAGAIN || (() => true)\n  this.mkdir = mkdir || false\n\n  let fsWriteSync\n  let fsWrite\n  if (contentMode === kContentModeBuffer) {\n    this._writingBuf = kEmptyBuffer\n    this.write = writeBuffer\n    this.flush = flushBuffer\n    this.flushSync = flushBufferSync\n    this._actualWrite = actualWriteBuffer\n    fsWriteSync = () => fs.writeSync(this.fd, this._writingBuf)\n    fsWrite = () => fs.write(this.fd, this._writingBuf, this.release)\n  } else if (contentMode === undefined || contentMode === kContentModeUtf8) {\n    this._writingBuf = ''\n    this.write = write\n    this.flush = flush\n    this.flushSync = flushSync\n    this._actualWrite = actualWrite\n    fsWriteSync = () => {\n      if (Buffer.isBuffer(this._writingBuf)) {\n        return fs.writeSync(this.fd, this._writingBuf)\n      }\n      return fs.writeSync(this.fd, this._writingBuf, 'utf8')\n    }\n    fsWrite = () => {\n      if (Buffer.isBuffer(this._writingBuf)) {\n        return fs.write(this.fd, this._writingBuf, this.release)\n      }\n      return fs.write(this.fd, this._writingBuf, 'utf8', this.release)\n    }\n  } else {\n    throw new Error(`SonicBoom supports \"${kContentModeUtf8}\" and \"${kContentModeBuffer}\", but passed ${contentMode}`)\n  }\n\n  if (typeof fd === 'number') {\n    this.fd = fd\n    process.nextTick(() => this.emit('ready'))\n  } else if (typeof fd === 'string') {\n    openFile(fd, this)\n  } else {\n    throw new Error('SonicBoom supports only file descriptors and files')\n  }\n  if (this.minLength >= this.maxWrite) {\n    throw new Error(`minLength should be smaller than maxWrite (${this.maxWrite})`)\n  }\n\n  this.release = (err, n) => {\n    if (err) {\n      if ((err.code === 'EAGAIN' || err.code === 'EBUSY') && this.retryEAGAIN(err, this._writingBuf.length, this._len - this._writingBuf.length)) {\n        if (this.sync) {\n          // This error code should not happen in sync mode, because it is\n          // not using the underlining operating system asynchronous functions.\n          // However it happens, and so we handle it.\n          // Ref: https://github.com/pinojs/pino/issues/783\n          try {\n            sleep(BUSY_WRITE_TIMEOUT)\n            this.release(undefined, 0)\n          } catch (err) {\n            this.release(err)\n          }\n        } else {\n          // Let's give the destination some time to process the chunk.\n          setTimeout(fsWrite, BUSY_WRITE_TIMEOUT)\n        }\n      } else {\n        this._writing = false\n\n        this.emit('error', err)\n      }\n      return\n    }\n\n    this.emit('write', n)\n    const releasedBufObj = releaseWritingBuf(this._writingBuf, this._len, n)\n    this._len = releasedBufObj.len\n    this._writingBuf = releasedBufObj.writingBuf\n\n    if (this._writingBuf.length) {\n      if (!this.sync) {\n        fsWrite()\n        return\n      }\n\n      try {\n        do {\n          const n = fsWriteSync()\n          const releasedBufObj = releaseWritingBuf(this._writingBuf, this._len, n)\n          this._len = releasedBufObj.len\n          this._writingBuf = releasedBufObj.writingBuf\n        } while (this._writingBuf.length)\n      } catch (err) {\n        this.release(err)\n        return\n      }\n    }\n\n    if (this._fsync) {\n      fs.fsyncSync(this.fd)\n    }\n\n    const len = this._len\n    if (this._reopening) {\n      this._writing = false\n      this._reopening = false\n      this.reopen()\n    } else if (len > this.minLength) {\n      this._actualWrite()\n    } else if (this._ending) {\n      if (len > 0) {\n        this._actualWrite()\n      } else {\n        this._writing = false\n        actualClose(this)\n      }\n    } else {\n      this._writing = false\n      if (this.sync) {\n        if (!this._asyncDrainScheduled) {\n          this._asyncDrainScheduled = true\n          process.nextTick(emitDrain, this)\n        }\n      } else {\n        this.emit('drain')\n      }\n    }\n  }\n\n  this.on('newListener', function (name) {\n    if (name === 'drain') {\n      this._asyncDrainScheduled = false\n    }\n  })\n\n  if (this._periodicFlush !== 0) {\n    this._periodicFlushTimer = setInterval(() => this.flush(null), this._periodicFlush)\n    this._periodicFlushTimer.unref()\n  }\n}\n\n/**\n * Release the writingBuf after fs.write n bytes data\n * @param {string | Buffer} writingBuf - currently writing buffer, usually be instance._writingBuf.\n * @param {number} len - currently buffer length, usually be instance._len.\n * @param {number} n - number of bytes fs already written\n * @returns {{writingBuf: string | Buffer, len: number}} released writingBuf and length\n */\nfunction releaseWritingBuf (writingBuf, len, n) {\n  if (typeof writingBuf === 'string') {\n    writingBuf = Buffer.from(writingBuf)\n  }\n\n  len = Math.max(len - n, 0)\n  writingBuf = writingBuf.subarray(n)\n  return { writingBuf, len }\n}\n\nfunction emitDrain (sonic) {\n  const hasListeners = sonic.listenerCount('drain') > 0\n  if (!hasListeners) return\n  sonic._asyncDrainScheduled = false\n  sonic.emit('drain')\n}\n\ninherits(SonicBoom, EventEmitter)\n\nfunction mergeBuf (bufs, len) {\n  if (bufs.length === 0) {\n    return kEmptyBuffer\n  }\n\n  if (bufs.length === 1) {\n    return bufs[0]\n  }\n\n  return Buffer.concat(bufs, len)\n}\n\nfunction write (data) {\n  if (this.destroyed) {\n    throw new Error('SonicBoom destroyed')\n  }\n\n  data = '' + data\n  const dataLen = Buffer.byteLength(data)\n  const len = this._len + dataLen\n  const bufs = this._bufs\n\n  if (this.maxLength && len > this.maxLength) {\n    this.emit('drop', data)\n    return this._len < this._hwm\n  }\n\n  if (\n    bufs.length === 0 ||\n    Buffer.byteLength(bufs[bufs.length - 1]) + dataLen > this.maxWrite\n  ) {\n    bufs.push(data)\n  } else {\n    bufs[bufs.length - 1] += data\n  }\n\n  this._len = len\n\n  if (!this._writing && this._len >= this.minLength) {\n    this._actualWrite()\n  }\n\n  return this._len < this._hwm\n}\n\nfunction writeBuffer (data) {\n  if (this.destroyed) {\n    throw new Error('SonicBoom destroyed')\n  }\n\n  const len = this._len + data.length\n  const bufs = this._bufs\n  const lens = this._lens\n\n  if (this.maxLength && len > this.maxLength) {\n    this.emit('drop', data)\n    return this._len < this._hwm\n  }\n\n  if (\n    bufs.length === 0 ||\n    lens[lens.length - 1] + data.length > this.maxWrite\n  ) {\n    bufs.push([data])\n    lens.push(data.length)\n  } else {\n    bufs[bufs.length - 1].push(data)\n    lens[lens.length - 1] += data.length\n  }\n\n  this._len = len\n\n  if (!this._writing && this._len >= this.minLength) {\n    this._actualWrite()\n  }\n\n  return this._len < this._hwm\n}\n\nfunction callFlushCallbackOnDrain (cb) {\n  this._flushPending = true\n  const onDrain = () => {\n    // only if _fsync is false to avoid double fsync\n    if (!this._fsync) {\n      try {\n        fs.fsync(this.fd, (err) => {\n          this._flushPending = false\n          cb(err)\n        })\n      } catch (err) {\n        cb(err)\n      }\n    } else {\n      this._flushPending = false\n      cb()\n    }\n    this.off('error', onError)\n  }\n  const onError = (err) => {\n    this._flushPending = false\n    cb(err)\n    this.off('drain', onDrain)\n  }\n\n  this.once('drain', onDrain)\n  this.once('error', onError)\n}\n\nfunction flush (cb) {\n  if (cb != null && typeof cb !== 'function') {\n    throw new Error('flush cb must be a function')\n  }\n\n  if (this.destroyed) {\n    const error = new Error('SonicBoom destroyed')\n    if (cb) {\n      cb(error)\n      return\n    }\n\n    throw error\n  }\n\n  if (this.minLength <= 0) {\n    cb?.()\n    return\n  }\n\n  if (cb) {\n    callFlushCallbackOnDrain.call(this, cb)\n  }\n\n  if (this._writing) {\n    return\n  }\n\n  if (this._bufs.length === 0) {\n    this._bufs.push('')\n  }\n\n  this._actualWrite()\n}\n\nfunction flushBuffer (cb) {\n  if (cb != null && typeof cb !== 'function') {\n    throw new Error('flush cb must be a function')\n  }\n\n  if (this.destroyed) {\n    const error = new Error('SonicBoom destroyed')\n    if (cb) {\n      cb(error)\n      return\n    }\n\n    throw error\n  }\n\n  if (this.minLength <= 0) {\n    cb?.()\n    return\n  }\n\n  if (cb) {\n    callFlushCallbackOnDrain.call(this, cb)\n  }\n\n  if (this._writing) {\n    return\n  }\n\n  if (this._bufs.length === 0) {\n    this._bufs.push([])\n    this._lens.push(0)\n  }\n\n  this._actualWrite()\n}\n\nSonicBoom.prototype.reopen = function (file) {\n  if (this.destroyed) {\n    throw new Error('SonicBoom destroyed')\n  }\n\n  if (this._opening) {\n    this.once('ready', () => {\n      this.reopen(file)\n    })\n    return\n  }\n\n  if (this._ending) {\n    return\n  }\n\n  if (!this.file) {\n    throw new Error('Unable to reopen a file descriptor, you must pass a file to SonicBoom')\n  }\n\n  if (file) {\n    this.file = file\n  }\n  this._reopening = true\n\n  if (this._writing) {\n    return\n  }\n\n  const fd = this.fd\n  this.once('ready', () => {\n    if (fd !== this.fd) {\n      fs.close(fd, (err) => {\n        if (err) {\n          return this.emit('error', err)\n        }\n      })\n    }\n  })\n\n  openFile(this.file, this)\n}\n\nSonicBoom.prototype.end = function () {\n  if (this.destroyed) {\n    throw new Error('SonicBoom destroyed')\n  }\n\n  if (this._opening) {\n    this.once('ready', () => {\n      this.end()\n    })\n    return\n  }\n\n  if (this._ending) {\n    return\n  }\n\n  this._ending = true\n\n  if (this._writing) {\n    return\n  }\n\n  if (this._len > 0 && this.fd >= 0) {\n    this._actualWrite()\n  } else {\n    actualClose(this)\n  }\n}\n\nfunction flushSync () {\n  if (this.destroyed) {\n    throw new Error('SonicBoom destroyed')\n  }\n\n  if (this.fd < 0) {\n    throw new Error('sonic boom is not ready yet')\n  }\n\n  if (!this._writing && this._writingBuf.length > 0) {\n    this._bufs.unshift(this._writingBuf)\n    this._writingBuf = ''\n  }\n\n  let buf = ''\n  while (this._bufs.length || buf.length) {\n    if (buf.length <= 0) {\n      buf = this._bufs[0]\n    }\n    try {\n      const n = Buffer.isBuffer(buf)\n        ? fs.writeSync(this.fd, buf)\n        : fs.writeSync(this.fd, buf, 'utf8')\n      const releasedBufObj = releaseWritingBuf(buf, this._len, n)\n      buf = releasedBufObj.writingBuf\n      this._len = releasedBufObj.len\n      if (buf.length <= 0) {\n        this._bufs.shift()\n      }\n    } catch (err) {\n      const shouldRetry = err.code === 'EAGAIN' || err.code === 'EBUSY'\n      if (shouldRetry && !this.retryEAGAIN(err, buf.length, this._len - buf.length)) {\n        throw err\n      }\n\n      sleep(BUSY_WRITE_TIMEOUT)\n    }\n  }\n\n  try {\n    fs.fsyncSync(this.fd)\n  } catch {\n    // Skip the error. The fd might not support fsync.\n  }\n}\n\nfunction flushBufferSync () {\n  if (this.destroyed) {\n    throw new Error('SonicBoom destroyed')\n  }\n\n  if (this.fd < 0) {\n    throw new Error('sonic boom is not ready yet')\n  }\n\n  if (!this._writing && this._writingBuf.length > 0) {\n    this._bufs.unshift([this._writingBuf])\n    this._writingBuf = kEmptyBuffer\n  }\n\n  let buf = kEmptyBuffer\n  while (this._bufs.length || buf.length) {\n    if (buf.length <= 0) {\n      buf = mergeBuf(this._bufs[0], this._lens[0])\n    }\n    try {\n      const n = fs.writeSync(this.fd, buf)\n      buf = buf.subarray(n)\n      this._len = Math.max(this._len - n, 0)\n      if (buf.length <= 0) {\n        this._bufs.shift()\n        this._lens.shift()\n      }\n    } catch (err) {\n      const shouldRetry = err.code === 'EAGAIN' || err.code === 'EBUSY'\n      if (shouldRetry && !this.retryEAGAIN(err, buf.length, this._len - buf.length)) {\n        throw err\n      }\n\n      sleep(BUSY_WRITE_TIMEOUT)\n    }\n  }\n}\n\nSonicBoom.prototype.destroy = function () {\n  if (this.destroyed) {\n    return\n  }\n  actualClose(this)\n}\n\nfunction actualWrite () {\n  const release = this.release\n  this._writing = true\n  this._writingBuf = this._writingBuf.length ? this._writingBuf : this._bufs.shift() || ''\n\n  if (this.sync) {\n    try {\n      const written = Buffer.isBuffer(this._writingBuf)\n        ? fs.writeSync(this.fd, this._writingBuf)\n        : fs.writeSync(this.fd, this._writingBuf, 'utf8')\n      release(null, written)\n    } catch (err) {\n      release(err)\n    }\n  } else {\n    fs.write(this.fd, this._writingBuf, release)\n  }\n}\n\nfunction actualWriteBuffer () {\n  const release = this.release\n  this._writing = true\n  this._writingBuf = this._writingBuf.length ? this._writingBuf : mergeBuf(this._bufs.shift(), this._lens.shift())\n\n  if (this.sync) {\n    try {\n      const written = fs.writeSync(this.fd, this._writingBuf)\n      release(null, written)\n    } catch (err) {\n      release(err)\n    }\n  } else {\n    // fs.write will need to copy string to buffer anyway so\n    // we do it here to avoid the overhead of calculating the buffer size\n    // in releaseWritingBuf.\n    if (kCopyBuffer) {\n      this._writingBuf = Buffer.from(this._writingBuf)\n    }\n    fs.write(this.fd, this._writingBuf, release)\n  }\n}\n\nfunction actualClose (sonic) {\n  if (sonic.fd === -1) {\n    sonic.once('ready', actualClose.bind(null, sonic))\n    return\n  }\n\n  if (sonic._periodicFlushTimer !== undefined) {\n    clearInterval(sonic._periodicFlushTimer)\n  }\n\n  sonic.destroyed = true\n  sonic._bufs = []\n  sonic._lens = []\n\n  assert(typeof sonic.fd === 'number', `sonic.fd must be a number, got ${typeof sonic.fd}`)\n  try {\n    fs.fsync(sonic.fd, closeWrapped)\n  } catch {\n  }\n\n  function closeWrapped () {\n    // We skip errors in fsync\n\n    if (sonic.fd !== 1 && sonic.fd !== 2) {\n      fs.close(sonic.fd, done)\n    } else {\n      done()\n    }\n  }\n\n  function done (err) {\n    if (err) {\n      sonic.emit('error', err)\n      return\n    }\n\n    if (sonic._ending && !sonic._writing) {\n      sonic.emit('finish')\n    }\n    sonic.emit('close')\n  }\n}\n\n/**\n * These export configurations enable JS and TS developers\n * to consumer SonicBoom in whatever way best suits their needs.\n * Some examples of supported import syntax includes:\n * - `const SonicBoom = require('SonicBoom')`\n * - `const { SonicBoom } = require('SonicBoom')`\n * - `import * as SonicBoom from 'SonicBoom'`\n * - `import { SonicBoom } from 'SonicBoom'`\n * - `import SonicBoom from 'SonicBoom'`\n */\nSonicBoom.SonicBoom = SonicBoom\nSonicBoom.default = SonicBoom\nmodule.exports = SonicBoom\n","'use strict'\n\nconst refs = {\n  exit: [],\n  beforeExit: []\n}\nconst functions = {\n  exit: onExit,\n  beforeExit: onBeforeExit\n}\n\nlet registry\n\nfunction ensureRegistry () {\n  if (registry === undefined) {\n    registry = new FinalizationRegistry(clear)\n  }\n}\n\nfunction install (event) {\n  if (refs[event].length > 0) {\n    return\n  }\n\n  process.on(event, functions[event])\n}\n\nfunction uninstall (event) {\n  if (refs[event].length > 0) {\n    return\n  }\n  process.removeListener(event, functions[event])\n  if (refs.exit.length === 0 && refs.beforeExit.length === 0) {\n    registry = undefined\n  }\n}\n\nfunction onExit () {\n  callRefs('exit')\n}\n\nfunction onBeforeExit () {\n  callRefs('beforeExit')\n}\n\nfunction callRefs (event) {\n  for (const ref of refs[event]) {\n    const obj = ref.deref()\n    const fn = ref.fn\n\n    // This should always happen, however GC is\n    // undeterministic so it might not happen.\n    /* istanbul ignore else */\n    if (obj !== undefined) {\n      fn(obj, event)\n    }\n  }\n  refs[event] = []\n}\n\nfunction clear (ref) {\n  for (const event of ['exit', 'beforeExit']) {\n    const index = refs[event].indexOf(ref)\n    refs[event].splice(index, index + 1)\n    uninstall(event)\n  }\n}\n\nfunction _register (event, obj, fn) {\n  if (obj === undefined) {\n    throw new Error('the object can\\'t be undefined')\n  }\n  install(event)\n  const ref = new WeakRef(obj)\n  ref.fn = fn\n\n  ensureRegistry()\n  registry.register(obj, ref)\n  refs[event].push(ref)\n}\n\nfunction register (obj, fn) {\n  _register('exit', obj, fn)\n}\n\nfunction registerBeforeExit (obj, fn) {\n  _register('beforeExit', obj, fn)\n}\n\nfunction unregister (obj) {\n  if (registry === undefined) {\n    return\n  }\n  registry.unregister(obj)\n  for (const event of ['exit', 'beforeExit']) {\n    refs[event] = refs[event].filter((ref) => {\n      const _obj = ref.deref()\n      return _obj && _obj !== obj\n    })\n    uninstall(event)\n  }\n}\n\nmodule.exports = {\n  register,\n  registerBeforeExit,\n  unregister\n}\n","{\n  \"name\": \"thread-stream\",\n  \"version\": \"4.2.0\",\n  \"description\": \"A streaming way to send data to a Node.js Worker Thread\",\n  \"main\": \"index.js\",\n  \"types\": \"index.d.ts\",\n  \"engines\": {\n    \"node\": \">=20\"\n  },\n  \"dependencies\": {\n    \"real-require\": \"^1.0.0\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"^25.0.2\",\n    \"@yao-pkg/pkg\": \"^6.0.0\",\n    \"borp\": \"^1.0.0\",\n    \"desm\": \"^1.3.0\",\n    \"eslint\": \"^9.39.1\",\n    \"fastbench\": \"^1.0.1\",\n    \"neostandard\": \"^0.13.0\",\n    \"pino-elasticsearch\": \"^9.0.0\",\n    \"sonic-boom\": \"^5.0.0\",\n    \"ts-node\": \"^10.8.0\",\n    \"typescript\": \"~5.7.3\"\n  },\n  \"scripts\": {\n    \"build\": \"tsc --noEmit\",\n    \"lint\": \"eslint\",\n    \"test\": \"npm run lint && npm run build && npm run transpile && borp --pattern \\\"test/*.test.{js,mjs}\\\"\",\n    \"test:ci\": \"npm run lint && npm run transpile && borp --pattern \\\"test/*.test.{js,mjs}\\\"\",\n    \"test:yarn\": \"npm run transpile && borp --pattern \\\"test/*.test.js\\\"\",\n    \"transpile\": \"sh ./test/ts/transpile.sh\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/mcollina/thread-stream.git\"\n  },\n  \"keywords\": [\n    \"worker\",\n    \"thread\",\n    \"threads\",\n    \"stream\"\n  ],\n  \"author\": \"Matteo Collina <hello@matteocollina.com>\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/mcollina/thread-stream/issues\"\n  },\n  \"homepage\": \"https://github.com/mcollina/thread-stream#readme\"\n}\n","'use strict'\n\n// Maximum wait time for a single waitAsync call\n// Used as a fallback poll interval in case notifications are missed\n// Keep this low enough for good throughput but high enough to not busy-loop\nconst WAIT_MS = 10000\n\nfunction wait (state, index, expected, timeout, done) {\n  const max = timeout === Infinity ? Infinity : Date.now() + timeout\n\n  const check = () => {\n    const current = Atomics.load(state, index)\n    if (current === expected) {\n      done(null, 'ok')\n      return\n    }\n\n    if (max !== Infinity && Date.now() > max) {\n      done(null, 'timed-out')\n      return\n    }\n\n    // Wait for any change from current value\n    const remaining = max === Infinity ? WAIT_MS : Math.min(WAIT_MS, Math.max(1, max - Date.now()))\n    const result = Atomics.waitAsync(state, index, current, remaining)\n\n    if (result.async) {\n      result.value.then(check)\n    } else {\n      // Value already changed (not-equal) - recheck on next tick\n      setImmediate(check)\n    }\n  }\n\n  check()\n}\n\nfunction waitDiff (state, index, expected, timeout, done) {\n  const max = timeout === Infinity ? Infinity : Date.now() + timeout\n\n  const check = () => {\n    const current = Atomics.load(state, index)\n    if (current !== expected) {\n      done(null, 'ok')\n      return\n    }\n\n    if (max !== Infinity && Date.now() > max) {\n      done(null, 'timed-out')\n      return\n    }\n\n    // Wait for value to change from expected.\n    // If we are notified, resume immediately even if the value cycled back\n    // to the same number before we could re-read it.\n    const remaining = max === Infinity ? WAIT_MS : Math.min(WAIT_MS, Math.max(1, max - Date.now()))\n    const result = Atomics.waitAsync(state, index, expected, remaining)\n\n    if (result.async) {\n      result.value.then((res) => {\n        if (res === 'ok') {\n          done(null, 'ok')\n          return\n        }\n\n        check()\n      })\n    } else {\n      // Value already changed (not-equal) - recheck on next tick\n      setImmediate(check)\n    }\n  }\n\n  check()\n}\n\nmodule.exports = { wait, waitDiff }\n","'use strict'\n\nconst SEQ_INDEX = 2\nconst WRITE_INDEX = 4\nconst READ_INDEX = 8\n\nmodule.exports = {\n  WRITE_INDEX,\n  READ_INDEX,\n  SEQ_INDEX\n}\n","'use strict'\n\nconst { version } = require('./package.json')\nconst { EventEmitter } = require('events')\nconst { Worker } = require('worker_threads')\nconst { join } = require('path')\nconst { pathToFileURL } = require('url')\nconst { wait } = require('./lib/wait')\nconst {\n  WRITE_INDEX,\n  READ_INDEX,\n  SEQ_INDEX\n} = require('./lib/indexes')\nconst buffer = require('buffer')\nconst assert = require('assert')\n\nconst kImpl = Symbol('kImpl')\n\n// Maximum pending buffered data before forcing a synchronous drain\nconst MAX_STRING = buffer.constants.MAX_STRING_LENGTH\n\nfunction noop () {}\n\nfunction updateState (stream, fn) {\n  Atomics.add(stream[kImpl].state, SEQ_INDEX, 1)\n  fn()\n  Atomics.add(stream[kImpl].state, SEQ_INDEX, 1)\n  Atomics.notify(stream[kImpl].state, SEQ_INDEX)\n}\n\nfunction resetIndexes (stream) {\n  updateState(stream, () => {\n    Atomics.store(stream[kImpl].state, READ_INDEX, 0)\n    Atomics.store(stream[kImpl].state, WRITE_INDEX, 0)\n  })\n}\n\nclass FakeWeakRef {\n  constructor (value) {\n    this._value = value\n  }\n\n  deref () {\n    return this._value\n  }\n}\n\nclass FakeFinalizationRegistry {\n  register () {}\n\n  unregister () {}\n}\n\n// Currently using FinalizationRegistry with code coverage breaks the world\n// Ref: https://github.com/nodejs/node/issues/49344\nconst FinalizationRegistry = process.env.NODE_V8_COVERAGE ? FakeFinalizationRegistry : global.FinalizationRegistry || FakeFinalizationRegistry\nconst WeakRef = process.env.NODE_V8_COVERAGE ? FakeWeakRef : global.WeakRef || FakeWeakRef\n\nconst registry = new FinalizationRegistry((worker) => {\n  if (worker.exited) {\n    return\n  }\n  worker.terminate()\n})\n\nfunction createWorker (stream, opts) {\n  const { filename, workerData } = opts\n\n  const bundlerOverrides = '__bundlerPathsOverrides' in globalThis ? globalThis.__bundlerPathsOverrides : {}\n  const toExecute = bundlerOverrides['thread-stream-worker'] || join(__dirname, 'lib', 'worker.js')\n\n  const worker = new Worker(toExecute, {\n    ...opts.workerOpts,\n    name: opts.workerOpts?.name || 'thread-stream',\n    trackUnmanagedFds: false,\n    workerData: {\n      filename: filename.indexOf('file://') === 0\n        ? filename\n        : pathToFileURL(filename).href,\n      dataBuf: stream[kImpl].dataBuf,\n      stateBuf: stream[kImpl].stateBuf,\n      workerData: {\n        $context: {\n          threadStreamVersion: version\n        },\n        ...workerData\n      }\n    }\n  })\n\n  // We keep a strong reference for now,\n  // we need to start writing first\n  worker.stream = new FakeWeakRef(stream)\n\n  worker.on('message', onWorkerMessage)\n  worker.on('exit', onWorkerExit)\n  registry.register(stream, worker)\n\n  return worker\n}\n\nfunction drain (stream) {\n  assert(!stream[kImpl].sync)\n  if (stream[kImpl].needDrain) {\n    stream[kImpl].needDrain = false\n    stream.emit('drain')\n  }\n}\n\nfunction nextFlush (stream) {\n  while (true) {\n    const writeIndex = Atomics.load(stream[kImpl].state, WRITE_INDEX)\n    const leftover = stream[kImpl].data.length - writeIndex\n\n    if (leftover > 0) {\n      if (stream[kImpl].bufLen === 0) {\n        stream[kImpl].flushing = false\n\n        if (stream[kImpl].ending) {\n          end(stream)\n        } else if (stream[kImpl].needDrain) {\n          process.nextTick(drain, stream)\n        }\n\n        return\n      }\n\n      write(stream, leftover, noop)\n      continue\n    }\n\n    if (leftover === 0) {\n      if (writeIndex === 0 && stream[kImpl].bufLen === 0) {\n        // we had a flushSync in the meanwhile\n        return\n      }\n      waitForRead(stream, () => {\n        if (stream.destroyed) {\n          return\n        }\n\n        resetIndexes(stream)\n        nextFlush(stream)\n      })\n      return\n    }\n\n    // This should never happen\n    destroy(stream, new Error('overwritten'))\n    return\n  }\n}\n\nfunction onWorkerMessage (msg) {\n  const stream = this.stream.deref()\n  if (stream === undefined) {\n    this.exited = true\n    // Terminate the worker.\n    this.terminate()\n    return\n  }\n\n  // Node.js watch mode may send internal worker messages that do not\n  // participate in thread-stream's worker protocol.\n  if (msg?.code == null) {\n    return\n  }\n\n  switch (msg.code) {\n    case 'READY':\n      // Replace the FakeWeakRef with a\n      // proper one.\n      this.stream = new WeakRef(stream)\n\n      waitForRead(stream, () => {\n        stream[kImpl].ready = true\n        stream.emit('ready')\n      })\n      break\n    case 'ERROR':\n      destroy(stream, msg.err)\n      break\n    case 'EVENT':\n      if (Array.isArray(msg.args)) {\n        stream.emit(msg.name, ...msg.args)\n      } else {\n        stream.emit(msg.name, msg.args)\n      }\n      break\n    case 'FLUSHED': {\n      if (msg.context !== 'thread-stream') {\n        destroy(stream, new Error('this should not happen: ' + msg.code))\n        break\n      }\n\n      const cb = stream[kImpl].flushCallbacks.get(msg.id)\n      if (cb) {\n        stream[kImpl].flushCallbacks.delete(msg.id)\n        process.nextTick(cb)\n      }\n      break\n    }\n    case 'WARNING':\n      process.emitWarning(msg.err)\n      break\n    default:\n      destroy(stream, new Error('this should not happen: ' + msg.code))\n  }\n}\n\nfunction onWorkerExit (code) {\n  const stream = this.stream.deref()\n  if (stream === undefined) {\n    // Nothing to do, the worker already exit\n    return\n  }\n  registry.unregister(stream)\n  stream.worker.exited = true\n  stream.worker.off('exit', onWorkerExit)\n  destroy(stream, code !== 0 ? new Error('the worker thread exited') : null)\n}\n\nclass ThreadStream extends EventEmitter {\n  constructor (opts = {}) {\n    super()\n\n    if (opts.bufferSize < 4) {\n      throw new Error('bufferSize must at least fit a 4-byte utf-8 char')\n    }\n\n    this[kImpl] = {}\n    this[kImpl].stateBuf = new SharedArrayBuffer(128)\n    this[kImpl].state = new Int32Array(this[kImpl].stateBuf)\n    this[kImpl].dataBuf = new SharedArrayBuffer(opts.bufferSize || 4 * 1024 * 1024)\n    this[kImpl].data = Buffer.from(this[kImpl].dataBuf)\n    this[kImpl].sync = opts.sync || false\n    this[kImpl].ending = false\n    this[kImpl].ended = false\n    this[kImpl].needDrain = false\n    this[kImpl].destroyed = false\n    this[kImpl].flushing = false\n    this[kImpl].ready = false\n    this[kImpl].finished = false\n    this[kImpl].errored = null\n    this[kImpl].closed = false\n    this[kImpl].buf = []\n    this[kImpl].bufHead = 0\n    this[kImpl].bufLen = 0\n    this[kImpl].flushCallbacks = new Map()\n    this[kImpl].nextFlushId = 0\n\n    // TODO (fix): Make private?\n    this.worker = createWorker(this, opts) // TODO (fix): make private\n    this.on('message', (message, transferList) => {\n      this.worker.postMessage(message, transferList)\n    })\n  }\n\n  write (data) {\n    const dataBuf = Buffer.isBuffer(data) ? data : Buffer.from(data)\n    if (this[kImpl].destroyed) {\n      error(this, new Error('the worker has exited'))\n      return false\n    }\n\n    if (this[kImpl].ending) {\n      error(this, new Error('the worker is ending'))\n      return false\n    }\n\n    if (this[kImpl].flushing && this[kImpl].bufLen + dataBuf.length >= MAX_STRING) {\n      try {\n        writeSync(this)\n        this[kImpl].flushing = true\n      } catch (err) {\n        destroy(this, err)\n        return false\n      }\n    }\n\n    this[kImpl].buf.push(dataBuf)\n    this[kImpl].bufLen += dataBuf.length\n\n    if (this[kImpl].sync) {\n      try {\n        writeSync(this)\n        return true\n      } catch (err) {\n        destroy(this, err)\n        return false\n      }\n    }\n\n    if (!this[kImpl].flushing) {\n      this[kImpl].flushing = true\n      setImmediate(nextFlush, this)\n    }\n\n    this[kImpl].needDrain = this[kImpl].data.length - this[kImpl].bufLen - Atomics.load(this[kImpl].state, WRITE_INDEX) <= 0\n    return !this[kImpl].needDrain\n  }\n\n  end () {\n    if (this[kImpl].destroyed) {\n      return\n    }\n\n    this[kImpl].ending = true\n    end(this)\n  }\n\n  flush (cb) {\n    cb = typeof cb === 'function' ? cb : noop\n\n    flushBuffer(this, (err) => {\n      if (err) {\n        process.nextTick(cb, err)\n        return\n      }\n\n      requestWorkerFlush(this, cb)\n    })\n  }\n\n  flushSync () {\n    if (this[kImpl].destroyed) {\n      return\n    }\n\n    writeSync(this)\n    flushSync(this)\n  }\n\n  unref () {\n    this.worker.unref()\n  }\n\n  ref () {\n    this.worker.ref()\n  }\n\n  get ready () {\n    return this[kImpl].ready\n  }\n\n  get destroyed () {\n    return this[kImpl].destroyed\n  }\n\n  get closed () {\n    return this[kImpl].closed\n  }\n\n  get writable () {\n    return !this[kImpl].destroyed && !this[kImpl].ending\n  }\n\n  get writableEnded () {\n    return this[kImpl].ending\n  }\n\n  get writableFinished () {\n    return this[kImpl].finished\n  }\n\n  get writableNeedDrain () {\n    return this[kImpl].needDrain\n  }\n\n  get writableObjectMode () {\n    return false\n  }\n\n  get writableErrored () {\n    return this[kImpl].errored\n  }\n}\n\nfunction flushBuffer (stream, cb) {\n  if (stream[kImpl].destroyed) {\n    process.nextTick(cb, new Error('the worker has exited'))\n    return\n  }\n\n  if (!stream[kImpl].sync && (stream[kImpl].flushing || stream[kImpl].bufLen > 0)) {\n    setImmediate(flushBuffer, stream, cb)\n    return\n  }\n\n  waitForRead(stream, cb)\n}\n\nfunction waitForRead (stream, cb) {\n  const writeIndex = Atomics.load(stream[kImpl].state, WRITE_INDEX)\n  wait(stream[kImpl].state, READ_INDEX, writeIndex, Infinity, (err, res) => {\n    if (err) {\n      destroy(stream, err)\n      cb(err)\n      return\n    }\n\n    if (res !== 'ok') {\n      waitForRead(stream, cb)\n      return\n    }\n\n    cb()\n  })\n}\n\nfunction requestWorkerFlush (stream, cb) {\n  if (stream[kImpl].destroyed) {\n    process.nextTick(cb, new Error('the worker has exited'))\n    return\n  }\n\n  if (!stream[kImpl].ready) {\n    const onReady = () => {\n      cleanup()\n      requestWorkerFlush(stream, cb)\n    }\n    const onClose = () => {\n      cleanup()\n      process.nextTick(cb, new Error('the worker has exited'))\n    }\n    const cleanup = () => {\n      stream.off('ready', onReady)\n      stream.off('close', onClose)\n    }\n\n    stream.once('ready', onReady)\n    stream.once('close', onClose)\n    return\n  }\n\n  const id = ++stream[kImpl].nextFlushId\n  stream[kImpl].flushCallbacks.set(id, cb)\n\n  try {\n    stream.worker.postMessage({\n      code: 'FLUSH',\n      context: 'thread-stream',\n      id\n    })\n  } catch (err) {\n    stream[kImpl].flushCallbacks.delete(id)\n    destroy(stream, err)\n    process.nextTick(cb, err)\n  }\n}\n\nfunction failPendingFlushCallbacks (stream, err) {\n  const callbacks = stream[kImpl].flushCallbacks\n  if (callbacks.size === 0) {\n    return\n  }\n\n  const flushErr = err || new Error('the worker has exited')\n\n  for (const cb of callbacks.values()) {\n    process.nextTick(cb, flushErr)\n  }\n  callbacks.clear()\n}\n\nfunction error (stream, err) {\n  setImmediate(() => {\n    stream.emit('error', err)\n  })\n}\n\nfunction destroy (stream, err) {\n  if (stream[kImpl].destroyed) {\n    return\n  }\n  stream[kImpl].destroyed = true\n  failPendingFlushCallbacks(stream, err)\n\n  if (err) {\n    stream[kImpl].errored = err\n    error(stream, err)\n  }\n\n  if (!stream.worker.exited) {\n    stream.worker.terminate()\n      .catch(() => {})\n      .then(() => {\n        stream[kImpl].closed = true\n        stream.emit('close')\n      })\n  } else {\n    setImmediate(() => {\n      stream[kImpl].closed = true\n      stream.emit('close')\n    })\n  }\n}\n\nfunction write (stream, maxBytes, cb) {\n  // data is smaller than the shared buffer length\n  const current = Atomics.load(stream[kImpl].state, WRITE_INDEX)\n  let offset = current\n  let remaining = maxBytes\n\n  while (remaining > 0 && stream[kImpl].bufLen !== 0) {\n    const head = stream[kImpl].bufHead\n    const buf = stream[kImpl].buf[head]\n\n    if (buf.length <= remaining) {\n      buf.copy(stream[kImpl].data, offset)\n      offset += buf.length\n      remaining -= buf.length\n      stream[kImpl].bufLen -= buf.length\n      stream[kImpl].bufHead = head + 1\n\n      if (stream[kImpl].bufHead === stream[kImpl].buf.length) {\n        stream[kImpl].buf.length = 0\n        stream[kImpl].bufHead = 0\n      } else if (stream[kImpl].bufHead >= 1024 && stream[kImpl].bufHead * 2 >= stream[kImpl].buf.length) {\n        stream[kImpl].buf.splice(0, stream[kImpl].bufHead)\n        stream[kImpl].bufHead = 0\n      }\n      continue\n    }\n\n    buf.copy(stream[kImpl].data, offset, 0, remaining)\n    stream[kImpl].buf[head] = buf.subarray(remaining)\n    stream[kImpl].bufLen -= remaining\n    offset += remaining\n    remaining = 0\n  }\n\n  updateState(stream, () => {\n    Atomics.store(stream[kImpl].state, WRITE_INDEX, offset)\n  })\n  cb()\n  return true\n}\n\nfunction end (stream) {\n  if (stream[kImpl].ended || !stream[kImpl].ending || stream[kImpl].flushing) {\n    return\n  }\n  stream[kImpl].ended = true\n\n  try {\n    stream.flushSync()\n\n    let readIndex = Atomics.load(stream[kImpl].state, READ_INDEX)\n\n    // process._rawDebug('writing index')\n    updateState(stream, () => {\n      Atomics.store(stream[kImpl].state, WRITE_INDEX, -1)\n    })\n    // process._rawDebug(`(end) readIndex (${Atomics.load(stream.state, READ_INDEX)}) writeIndex (${Atomics.load(stream.state, WRITE_INDEX)})`)\n\n    // Wait for the process to complete\n    let spins = 0\n    while (readIndex !== -1) {\n      // process._rawDebug(`read = ${read}`)\n      Atomics.wait(stream[kImpl].state, READ_INDEX, readIndex, 1000)\n      readIndex = Atomics.load(stream[kImpl].state, READ_INDEX)\n\n      if (readIndex === -2) {\n        destroy(stream, new Error('end() failed'))\n        return\n      }\n\n      if (++spins === 10) {\n        destroy(stream, new Error('end() took too long (10s)'))\n        return\n      }\n    }\n\n    process.nextTick(() => {\n      stream[kImpl].finished = true\n      stream.emit('finish')\n    })\n  } catch (err) {\n    destroy(stream, err)\n  }\n  // process._rawDebug('end finished...')\n}\n\nfunction writeSync (stream) {\n  const cb = () => {\n    if (stream[kImpl].ending) {\n      end(stream)\n    } else if (stream[kImpl].needDrain) {\n      process.nextTick(drain, stream)\n    }\n  }\n  stream[kImpl].flushing = false\n\n  while (stream[kImpl].bufLen !== 0) {\n    const writeIndex = Atomics.load(stream[kImpl].state, WRITE_INDEX)\n    const leftover = stream[kImpl].data.length - writeIndex\n    if (leftover === 0) {\n      flushSync(stream)\n      resetIndexes(stream)\n      continue\n    } else if (leftover < 0) {\n      // stream should never happen\n      throw new Error('overwritten')\n    }\n\n    write(stream, leftover, cb)\n  }\n}\n\nfunction flushSync (stream) {\n  if (stream[kImpl].flushing) {\n    throw new Error('unable to flush while flushing')\n  }\n\n  // process._rawDebug('flushSync started')\n\n  const writeIndex = Atomics.load(stream[kImpl].state, WRITE_INDEX)\n\n  let spins = 0\n\n  // TODO handle deadlock\n  while (true) {\n    const readIndex = Atomics.load(stream[kImpl].state, READ_INDEX)\n\n    if (readIndex === -2) {\n      throw Error('_flushSync failed')\n    }\n\n    // process._rawDebug(`(flushSync) readIndex (${readIndex}) writeIndex (${writeIndex})`)\n    if (readIndex !== writeIndex) {\n      // TODO stream timeouts for some reason.\n      Atomics.wait(stream[kImpl].state, READ_INDEX, readIndex, 1000)\n    } else {\n      break\n    }\n\n    if (++spins === 10) {\n      throw new Error('_flushSync took too long (10s)')\n    }\n  }\n  // process._rawDebug('flushSync finished')\n}\n\nmodule.exports = ThreadStream\n","'use strict'\n\nconst { createRequire } = require('module')\nconst { existsSync } = require('node:fs')\nconst getCallers = require('./caller')\nconst { join, isAbsolute, sep } = require('node:path')\nconst { fileURLToPath } = require('node:url')\nconst sleep = require('atomic-sleep')\nconst onExit = require('on-exit-leak-free')\nconst ThreadStream = require('thread-stream')\n\nfunction setupOnExit (stream) {\n  // This is leak free, it does not leave event handlers\n  onExit.register(stream, autoEnd)\n  onExit.registerBeforeExit(stream, flush)\n\n  stream.on('close', function () {\n    onExit.unregister(stream)\n  })\n}\n\n// Check if preload flags exist in execArgv.\n// During preload phase (require.main undefined), we pass empty execArgv to prevent infinite worker spawning.\n// We don't try to filter and pass other flags because many (like --stack-trace-limit, --tls-cipher-list)\n// aren't valid for worker threads and would cause ERR_WORKER_INVALID_EXEC_ARGV.\nfunction hasPreloadFlags () {\n  const execArgv = process.execArgv\n  for (let i = 0; i < execArgv.length; i++) {\n    const arg = execArgv[i]\n    if (arg === '--import' || arg === '--require' || arg === '-r') {\n      return true\n    }\n    if (arg.startsWith('--import=') || arg.startsWith('--require=') || arg.startsWith('-r=')) {\n      return true\n    }\n  }\n  return false\n}\n\nfunction sanitizeNodeOptions (nodeOptions) {\n  const tokens = nodeOptions.match(/(?:[^\\s\"']+|\"[^\"]*\"|'[^']*')+/g)\n  if (!tokens) {\n    return nodeOptions\n  }\n\n  const sanitized = []\n  let changed = false\n\n  for (let i = 0; i < tokens.length; i++) {\n    const token = tokens[i]\n\n    if (token === '--require' || token === '-r' || token === '--import') {\n      const next = tokens[i + 1]\n      if (next && shouldDropPreload(next)) {\n        changed = true\n        i++\n        continue\n      }\n\n      sanitized.push(token)\n      if (next) {\n        sanitized.push(next)\n        i++\n      }\n      continue\n    }\n\n    if (token.startsWith('--require=') || token.startsWith('-r=') || token.startsWith('--import=')) {\n      const value = token.slice(token.indexOf('=') + 1)\n      if (shouldDropPreload(value)) {\n        changed = true\n        continue\n      }\n    }\n\n    sanitized.push(token)\n  }\n\n  return changed ? sanitized.join(' ') : nodeOptions\n}\n\nfunction shouldDropPreload (value) {\n  const unquoted = stripQuotes(value)\n  if (!unquoted) {\n    return false\n  }\n\n  let path = unquoted\n  if (path.startsWith('file://')) {\n    try {\n      path = fileURLToPath(path)\n    } catch {\n      return false\n    }\n  }\n\n  return isAbsolute(path) && !existsSync(path)\n}\n\nfunction stripQuotes (value) {\n  const first = value[0]\n  const last = value[value.length - 1]\n\n  if ((first === '\"' && last === '\"') || (first === \"'\" && last === \"'\")) {\n    return value.slice(1, -1)\n  }\n\n  return value\n}\n\nfunction buildStream (filename, workerData, workerOpts, sync, name) {\n  // When pino is loaded during a preload phase (via --import or --require),\n  // pass empty execArgv to prevent infinite spawning. Each worker would\n  // otherwise re-run the preload, creating another transport.\n  if (!workerOpts.execArgv && hasPreloadFlags() && require.main === undefined) {\n    workerOpts = {\n      ...workerOpts,\n      execArgv: []\n    }\n  }\n\n  if (!workerOpts.env && process.env.NODE_OPTIONS) {\n    const nodeOptions = sanitizeNodeOptions(process.env.NODE_OPTIONS)\n    if (nodeOptions !== process.env.NODE_OPTIONS) {\n      workerOpts = {\n        ...workerOpts,\n        env: {\n          ...process.env,\n          NODE_OPTIONS: nodeOptions\n        }\n      }\n    }\n  }\n\n  workerOpts = { ...workerOpts, name }\n\n  const stream = new ThreadStream({\n    filename,\n    workerData,\n    workerOpts,\n    sync\n  })\n\n  stream.on('ready', onReady)\n  stream.on('close', function () {\n    process.removeListener('exit', onExit)\n  })\n\n  process.on('exit', onExit)\n\n  function onReady () {\n    process.removeListener('exit', onExit)\n    stream.unref()\n\n    if (workerOpts.autoEnd !== false) {\n      setupOnExit(stream)\n    }\n  }\n\n  function onExit () {\n    /* istanbul ignore next */\n    if (stream.closed) {\n      return\n    }\n    stream.flushSync()\n    // Apparently there is a very sporadic race condition\n    // that in certain OS would prevent the messages to be flushed\n    // because the thread might not have been created still.\n    // Unfortunately we need to sleep(100) in this case.\n    sleep(100)\n    stream.end()\n  }\n\n  return stream\n}\n\nfunction autoEnd (stream) {\n  stream.ref()\n  stream.flushSync()\n  stream.end()\n  stream.once('close', function () {\n    stream.unref()\n  })\n}\n\nfunction flush (stream) {\n  stream.flushSync()\n}\n\nfunction transport (fullOptions) {\n  const { pipeline, targets, levels, dedupe, worker = {}, caller = getCallers(), sync = false } = fullOptions\n\n  const options = {\n    ...fullOptions.options\n  }\n\n  // Backwards compatibility\n  const callers = typeof caller === 'string' ? [caller] : caller\n\n  // This will be eventually modified by bundlers\n  const bundlerOverrides = (typeof globalThis === 'object' &&\n    Object.prototype.hasOwnProperty.call(globalThis, '__bundlerPathsOverrides') &&\n    globalThis.__bundlerPathsOverrides &&\n    typeof globalThis.__bundlerPathsOverrides === 'object')\n    ? globalThis.__bundlerPathsOverrides\n    : Object.create(null)\n\n  let target = fullOptions.target\n\n  if (target && targets) {\n    throw new Error('only one of target or targets can be specified')\n  }\n\n  if (targets) {\n    target = bundlerOverrides['pino-worker'] || join(__dirname, 'worker.js')\n    options.targets = targets.filter(dest => dest.target).map((dest) => {\n      return {\n        ...dest,\n        target: fixTarget(dest.target)\n      }\n    })\n    options.pipelines = targets.filter(dest => dest.pipeline).map((dest) => {\n      return dest.pipeline.map((t) => {\n        return {\n          ...t,\n          level: dest.level, // duplicate the pipeline `level` property defined in the upper level\n          target: fixTarget(t.target)\n        }\n      })\n    })\n  } else if (pipeline) {\n    target = bundlerOverrides['pino-worker'] || join(__dirname, 'worker.js')\n    options.pipelines = [pipeline.map((dest) => {\n      return {\n        ...dest,\n        target: fixTarget(dest.target)\n      }\n    })]\n  }\n\n  if (levels) {\n    options.levels = levels\n  }\n\n  if (dedupe) {\n    options.dedupe = dedupe\n  }\n\n  options.pinoWillSendConfig = true\n\n  const name = (targets || pipeline) ? 'pino.transport' : target\n  return buildStream(fixTarget(target), options, worker, sync, name)\n\n  function fixTarget (origin) {\n    origin = bundlerOverrides[origin] || origin\n\n    if (isAbsolute(origin) || origin.indexOf('file://') === 0) {\n      return origin\n    }\n\n    if (origin === 'pino/file') {\n      return join(__dirname, '..', 'file.js')\n    }\n\n    let fixTarget\n\n    for (const filePath of callers) {\n      try {\n        const context = filePath === 'node:repl'\n          ? process.cwd() + sep\n          : filePath\n\n        fixTarget = createRequire(context).resolve(origin)\n        break\n      } catch (err) {\n        // Silent catch\n        continue\n      }\n    }\n\n    if (!fixTarget) {\n      throw new Error(`unable to determine transport target for \"${origin}\"`)\n    }\n\n    return fixTarget\n  }\n}\n\nmodule.exports = transport\n","'use strict'\n\n/* eslint no-prototype-builtins: 0 */\n\nconst diagChan = require('node:diagnostics_channel')\nconst format = require('quick-format-unescaped')\nconst { mapHttpRequest, mapHttpResponse } = require('pino-std-serializers')\nconst SonicBoom = require('sonic-boom')\nconst onExit = require('on-exit-leak-free')\nconst {\n  lsCacheSym,\n  chindingsSym,\n  writeSym,\n  serializersSym,\n  formatOptsSym,\n  endSym,\n  stringifiersSym,\n  stringifySym,\n  stringifySafeSym,\n  wildcardFirstSym,\n  nestedKeySym,\n  formattersSym,\n  messageKeySym,\n  errorKeySym,\n  nestedKeyStrSym,\n  msgPrefixSym\n} = require('./symbols')\nconst { isMainThread } = require('worker_threads')\nconst transport = require('./transport')\nconst [nodeMajor] = process.versions.node.split('.').map(v => Number(v))\n\nconst asJsonChan = diagChan.tracingChannel('pino_asJson')\n\n// JSON.stringify is faster in node 25+.\nconst asString = nodeMajor >= 25 ? str => JSON.stringify(str) : _asString\n\nfunction noop () {\n}\n\nfunction genLog (level, hook) {\n  if (!hook) return LOG\n\n  return function hookWrappedLog (...args) {\n    hook.call(this, args, LOG, level)\n  }\n\n  function LOG (o, ...n) {\n    if (typeof o === 'object') {\n      let msg = o\n      if (o !== null) {\n        if (o.method && o.headers && o.socket) {\n          o = mapHttpRequest(o)\n        } else if (typeof o.setHeader === 'function') {\n          o = mapHttpResponse(o)\n        }\n      }\n      let formatParams\n      if (msg === null && n.length === 0) {\n        formatParams = [null]\n      } else {\n        msg = n.shift()\n        formatParams = n\n      }\n      // We do not use a coercive check for `msg` as it is\n      // measurably slower than the explicit checks.\n      if (typeof this[msgPrefixSym] === 'string' && msg !== undefined && msg !== null) {\n        msg = this[msgPrefixSym] + msg\n      }\n      this[writeSym](o, format(msg, formatParams, this[formatOptsSym]), level)\n    } else {\n      let msg = o === undefined ? n.shift() : o\n\n      // We do not use a coercive check for `msg` as it is\n      // measurably slower than the explicit checks.\n      if (typeof this[msgPrefixSym] === 'string' && msg !== undefined && msg !== null) {\n        msg = this[msgPrefixSym] + msg\n      }\n      this[writeSym](null, format(msg, n, this[formatOptsSym]), level)\n    }\n  }\n}\n\n// magically escape strings for json\n// relying on their charCodeAt\n// everything below 32 needs JSON.stringify()\n// 34 and 92 happens all the time, so we\n// have a fast case for them\nfunction _asString (str) {\n  let result = ''\n  let last = 0\n  let found = false\n  let point = 255\n  const l = str.length\n  if (l > 100) {\n    return JSON.stringify(str)\n  }\n  for (var i = 0; i < l && point >= 32; i++) {\n    point = str.charCodeAt(i)\n    if (point === 34 || point === 92) {\n      result += str.slice(last, i) + '\\\\'\n      last = i\n      found = true\n    }\n  }\n  if (!found) {\n    result = str\n  } else {\n    result += str.slice(last)\n  }\n  return point < 32 ? JSON.stringify(str) : '\"' + result + '\"'\n}\n\n/**\n * `asJson` wraps `_asJson` in order to facilitate generating diagnostics.\n *\n * @param {object} obj The merging object passed to the log method.\n * @param {string} msg The log message passed to the log method.\n * @param {number} num The log level number.\n * @param {number} time The log time in milliseconds.\n *\n * @returns {string}\n */\nfunction asJson (obj, msg, num, time) {\n  if (asJsonChan.hasSubscribers === false) {\n    return _asJson.call(this, obj, msg, num, time)\n  }\n\n  const store = { instance: this, arguments }\n  return asJsonChan.traceSync(_asJson, store, this, obj, msg, num, time)\n}\n\n/**\n * `_asJson` parses all collected data and generates the finalized newline\n * delimited JSON string.\n *\n * @param {object} obj The merging object passed to the log method.\n * @param {string} msg The log message passed to the log method.\n * @param {number} num The log level number.\n * @param {number} time The log time in milliseconds.\n *\n * @returns {string} The finalized log string terminated with a newline.\n * @private\n */\nfunction _asJson (obj, msg, num, time) {\n  const stringify = this[stringifySym]\n  const stringifySafe = this[stringifySafeSym]\n  const stringifiers = this[stringifiersSym]\n  const end = this[endSym]\n  const chindings = this[chindingsSym]\n  const serializers = this[serializersSym]\n  const formatters = this[formattersSym]\n  const messageKey = this[messageKeySym]\n  const errorKey = this[errorKeySym]\n  let data = this[lsCacheSym][num] + time\n\n  // we need the child bindings added to the output first so instance logged\n  // objects can take precedence when JSON.parse-ing the resulting log line\n  data = data + chindings\n\n  let value\n  if (formatters.log) {\n    obj = formatters.log(obj)\n  }\n  const wildcardStringifier = stringifiers[wildcardFirstSym]\n  let propStr = ''\n  for (const key in obj) {\n    value = obj[key]\n    if (Object.prototype.hasOwnProperty.call(obj, key) && value !== undefined) {\n      if (serializers[key]) {\n        value = serializers[key](value)\n      } else if (key === errorKey && serializers.err) {\n        value = serializers.err(value)\n      }\n\n      const stringifier = stringifiers[key] || wildcardStringifier\n\n      switch (typeof value) {\n        case 'undefined':\n        case 'function':\n          continue\n        case 'number':\n          /* eslint no-fallthrough: \"off\" */\n          if (Number.isFinite(value) === false) {\n            value = null\n          }\n        // this case explicitly falls through to the next one\n        case 'boolean':\n          if (stringifier) value = stringifier(value)\n          break\n        case 'string':\n          value = (stringifier || asString)(value)\n          break\n        default:\n          value = (stringifier || stringify)(value, stringifySafe)\n      }\n      if (value === undefined) continue\n      const strKey = asString(key)\n      propStr += ',' + strKey + ':' + value\n    }\n  }\n\n  let msgStr = ''\n  if (msg !== undefined) {\n    value = serializers[messageKey] ? serializers[messageKey](msg) : msg\n    const stringifier = stringifiers[messageKey] || wildcardStringifier\n\n    switch (typeof value) {\n      case 'function':\n        break\n      case 'number':\n        if (Number.isFinite(value) === false) {\n          value = null\n        }\n      // this case explicitly falls through to the next one\n      case 'boolean':\n        if (stringifier) value = stringifier(value)\n        msgStr = ',\"' + messageKey + '\":' + value\n        break\n      case 'string':\n        value = (stringifier || asString)(value)\n        msgStr = ',\"' + messageKey + '\":' + value\n        break\n      default:\n        value = (stringifier || stringify)(value, stringifySafe)\n        msgStr = ',\"' + messageKey + '\":' + value\n    }\n  }\n\n  if (this[nestedKeySym] && propStr) {\n    // place all the obj properties under the specified key\n    // the nested key is already formatted from the constructor\n    return data + this[nestedKeyStrSym] + propStr.slice(1) + '}' + msgStr + end\n  } else {\n    return data + propStr + msgStr + end\n  }\n}\n\nfunction asChindings (instance, bindings) {\n  let value\n  let data = instance[chindingsSym]\n  const stringify = instance[stringifySym]\n  const stringifySafe = instance[stringifySafeSym]\n  const stringifiers = instance[stringifiersSym]\n  const wildcardStringifier = stringifiers[wildcardFirstSym]\n  const serializers = instance[serializersSym]\n  const formatter = instance[formattersSym].bindings\n  bindings = formatter(bindings)\n\n  for (const key in bindings) {\n    value = bindings[key]\n    const valid = (key.length < 5 || (key !== 'level' &&\n      key !== 'serializers' &&\n      key !== 'formatters' &&\n      key !== 'customLevels')) &&\n      bindings.hasOwnProperty(key) &&\n      value !== undefined\n    if (valid === true) {\n      value = serializers[key] ? serializers[key](value) : value\n      value = (stringifiers[key] || wildcardStringifier || stringify)(value, stringifySafe)\n      if (value === undefined) continue\n      data += ',\"' + key + '\":' + value\n    }\n  }\n  return data\n}\n\nfunction hasBeenTampered (stream) {\n  return stream.write !== stream.constructor.prototype.write\n}\n\nfunction buildSafeSonicBoom (opts) {\n  const stream = new SonicBoom(opts)\n  stream.on('error', filterBrokenPipe)\n  // If we are sync: false, we must flush on exit\n  if (!opts.sync && isMainThread) {\n    onExit.register(stream, autoEnd)\n\n    stream.on('close', function () {\n      onExit.unregister(stream)\n    })\n  }\n  return stream\n\n  function filterBrokenPipe (err) {\n    // Impossible to replicate across all operating systems\n    /* istanbul ignore next */\n    if (err.code === 'EPIPE') {\n      // If we get EPIPE, we should stop logging here\n      // however we have no control to the consumer of\n      // SonicBoom, so we just overwrite the write method\n      stream.write = noop\n      stream.end = noop\n      stream.flushSync = noop\n      stream.destroy = noop\n      return\n    }\n    stream.removeListener('error', filterBrokenPipe)\n    stream.emit('error', err)\n  }\n}\n\nfunction autoEnd (stream, eventName) {\n  // This check is needed only on some platforms\n  /* istanbul ignore next */\n  if (stream.destroyed) {\n    return\n  }\n\n  if (eventName === 'beforeExit') {\n    // We still have an event loop, let's use it\n    stream.flush()\n    stream.on('drain', function () {\n      stream.end()\n    })\n  } else {\n    // For some reason istanbul is not detecting this, but it's there\n    /* istanbul ignore next */\n    // We do not have an event loop, so flush synchronously\n    stream.flushSync()\n  }\n}\n\nfunction createArgsNormalizer (defaultOptions) {\n  return function normalizeArgs (instance, caller, opts = {}, stream) {\n    // support stream as a string\n    if (typeof opts === 'string') {\n      stream = buildSafeSonicBoom({ dest: opts })\n      opts = {}\n    } else if (typeof stream === 'string') {\n      if (opts && opts.transport) {\n        throw Error('only one of option.transport or stream can be specified')\n      }\n      stream = buildSafeSonicBoom({ dest: stream })\n    } else if (opts instanceof SonicBoom || opts.writable || opts._writableState) {\n      stream = opts\n      opts = {}\n    } else if (opts.transport) {\n      if (opts.transport instanceof SonicBoom || opts.transport.writable || opts.transport._writableState) {\n        throw Error('option.transport do not allow stream, please pass to option directly. e.g. pino(transport)')\n      }\n      if (opts.transport.targets && opts.transport.targets.length && opts.formatters && typeof opts.formatters.level === 'function') {\n        throw Error('option.transport.targets do not allow custom level formatters')\n      }\n\n      let customLevels\n      if (opts.customLevels) {\n        customLevels = opts.useOnlyCustomLevels ? opts.customLevels : Object.assign({}, opts.levels, opts.customLevels)\n      }\n      stream = transport({ caller, ...opts.transport, levels: customLevels })\n    }\n    opts = Object.assign({}, defaultOptions, opts)\n    opts.serializers = Object.assign({}, defaultOptions.serializers, opts.serializers)\n    opts.formatters = Object.assign({}, defaultOptions.formatters, opts.formatters)\n\n    if (opts.prettyPrint) {\n      throw new Error('prettyPrint option is no longer supported, see the pino-pretty package (https://github.com/pinojs/pino-pretty)')\n    }\n\n    const { enabled, onChild } = opts\n    if (enabled === false) opts.level = 'silent'\n    if (!onChild) opts.onChild = noop\n    if (!stream) {\n      if (!hasBeenTampered(process.stdout)) {\n        // If process.stdout.fd is undefined, it means that we are running\n        // in a worker thread. Let's assume we are logging to file descriptor 1.\n        stream = buildSafeSonicBoom({ fd: process.stdout.fd || 1 })\n      } else {\n        stream = process.stdout\n      }\n    }\n    return { opts, stream }\n  }\n}\n\nfunction stringify (obj, stringifySafeFn) {\n  try {\n    return JSON.stringify(obj)\n  } catch (_) {\n    try {\n      const stringify = stringifySafeFn || this[stringifySafeSym]\n      return stringify(obj)\n    } catch (_) {\n      return '\"[unable to serialize, circular reference is too complex to analyze]\"'\n    }\n  }\n}\n\nfunction buildFormatters (level, bindings, log) {\n  return {\n    level,\n    bindings,\n    log\n  }\n}\n\n/**\n * Convert a string integer file descriptor to a proper native integer\n * file descriptor.\n *\n * @param {string} destination The file descriptor string to attempt to convert.\n *\n * @returns {Number}\n */\nfunction normalizeDestFileDescriptor (destination) {\n  const fd = Number(destination)\n  if (typeof destination === 'string' && Number.isFinite(fd)) {\n    return fd\n  }\n  // destination could be undefined if we are in a worker\n  if (destination === undefined) {\n    // This is stdout in UNIX systems\n    return 1\n  }\n  return destination\n}\n\nmodule.exports = {\n  noop,\n  buildSafeSonicBoom,\n  asChindings,\n  asJson,\n  genLog,\n  createArgsNormalizer,\n  stringify,\n  buildFormatters,\n  normalizeDestFileDescriptor\n}\n","/**\n * Represents default log level values\n *\n * @enum {number}\n */\nconst DEFAULT_LEVELS = {\n  trace: 10,\n  debug: 20,\n  info: 30,\n  warn: 40,\n  error: 50,\n  fatal: 60\n}\n\n/**\n * Represents sort order direction: `ascending` or `descending`\n *\n * @enum {string}\n */\nconst SORTING_ORDER = {\n  ASC: 'ASC',\n  DESC: 'DESC'\n}\n\nmodule.exports = {\n  DEFAULT_LEVELS,\n  SORTING_ORDER\n}\n","'use strict'\n/* eslint no-prototype-builtins: 0 */\nconst {\n  lsCacheSym,\n  levelValSym,\n  useOnlyCustomLevelsSym,\n  streamSym,\n  formattersSym,\n  hooksSym,\n  levelCompSym\n} = require('./symbols')\nconst { noop, genLog } = require('./tools')\nconst { DEFAULT_LEVELS, SORTING_ORDER } = require('./constants')\n\nconst levelMethods = {\n  fatal: (hook) => {\n    const logFatal = genLog(DEFAULT_LEVELS.fatal, hook)\n    return function (...args) {\n      const stream = this[streamSym]\n      logFatal.call(this, ...args)\n      if (typeof stream.flushSync === 'function') {\n        try {\n          stream.flushSync()\n        } catch (e) {\n          // https://github.com/pinojs/pino/pull/740#discussion_r346788313\n        }\n      }\n    }\n  },\n  error: (hook) => genLog(DEFAULT_LEVELS.error, hook),\n  warn: (hook) => genLog(DEFAULT_LEVELS.warn, hook),\n  info: (hook) => genLog(DEFAULT_LEVELS.info, hook),\n  debug: (hook) => genLog(DEFAULT_LEVELS.debug, hook),\n  trace: (hook) => genLog(DEFAULT_LEVELS.trace, hook)\n}\n\nconst nums = Object.keys(DEFAULT_LEVELS).reduce((o, k) => {\n  o[DEFAULT_LEVELS[k]] = k\n  return o\n}, {})\n\nconst initialLsCache = Object.keys(nums).reduce((o, k) => {\n  o[k] = '{\"level\":' + Number(k)\n  return o\n}, {})\n\nfunction genLsCache (instance) {\n  const formatter = instance[formattersSym].level\n  const { labels } = instance.levels\n  const cache = {}\n  for (const label in labels) {\n    const level = formatter(labels[label], Number(label))\n    cache[label] = JSON.stringify(level).slice(0, -1)\n  }\n  instance[lsCacheSym] = cache\n  return instance\n}\n\nfunction isStandardLevel (level, useOnlyCustomLevels) {\n  if (useOnlyCustomLevels) {\n    return false\n  }\n\n  switch (level) {\n    case 'fatal':\n    case 'error':\n    case 'warn':\n    case 'info':\n    case 'debug':\n    case 'trace':\n      return true\n    default:\n      return false\n  }\n}\n\nfunction setLevel (level) {\n  const { labels, values } = this.levels\n  if (typeof level === 'number') {\n    if (labels[level] === undefined) throw Error('unknown level value' + level)\n    level = labels[level]\n  }\n  if (values[level] === undefined) throw Error('unknown level ' + level)\n  const preLevelVal = this[levelValSym]\n  const levelVal = this[levelValSym] = values[level]\n  const useOnlyCustomLevelsVal = this[useOnlyCustomLevelsSym]\n  const levelComparison = this[levelCompSym]\n  const hook = this[hooksSym].logMethod\n\n  for (const key in values) {\n    if (levelComparison(values[key], levelVal) === false) {\n      this[key] = noop\n      continue\n    }\n    this[key] = isStandardLevel(key, useOnlyCustomLevelsVal) ? levelMethods[key](hook) : genLog(values[key], hook)\n  }\n\n  this.emit(\n    'level-change',\n    level,\n    levelVal,\n    labels[preLevelVal],\n    preLevelVal,\n    this\n  )\n}\n\nfunction getLevel (level) {\n  const { levels, levelVal } = this\n  // protection against potential loss of Pino scope from serializers (edge case with circular refs - https://github.com/pinojs/pino/issues/833)\n  return (levels && levels.labels) ? levels.labels[levelVal] : ''\n}\n\nfunction isLevelEnabled (logLevel) {\n  const { values } = this.levels\n  const logLevelVal = values[logLevel]\n  return logLevelVal !== undefined && this[levelCompSym](logLevelVal, this[levelValSym])\n}\n\n/**\n * Determine if the given `current` level is enabled by comparing it\n * against the current threshold (`expected`).\n *\n * @param {SORTING_ORDER} direction comparison direction \"ASC\" or \"DESC\"\n * @param {number} current current log level number representation\n * @param {number} expected threshold value to compare with\n * @returns {boolean}\n */\nfunction compareLevel (direction, current, expected) {\n  if (direction === SORTING_ORDER.DESC) {\n    return current <= expected\n  }\n\n  return current >= expected\n}\n\n/**\n * Create a level comparison function based on `levelComparison`\n * it could a default function which compares levels either in \"ascending\" or \"descending\" order or custom comparison function\n *\n * @param {SORTING_ORDER | Function} levelComparison sort levels order direction or custom comparison function\n * @returns Function\n */\nfunction genLevelComparison (levelComparison) {\n  if (typeof levelComparison === 'string') {\n    return compareLevel.bind(null, levelComparison)\n  }\n\n  return levelComparison\n}\n\nfunction mappings (customLevels = null, useOnlyCustomLevels = false) {\n  const customNums = customLevels\n    /* eslint-disable */\n    ? Object.keys(customLevels).reduce((o, k) => {\n        o[customLevels[k]] = k\n        return o\n      }, {})\n    : null\n    /* eslint-enable */\n\n  const labels = Object.assign(\n    Object.create(Object.prototype, { Infinity: { value: 'silent' } }),\n    useOnlyCustomLevels ? null : nums,\n    customNums\n  )\n  const values = Object.assign(\n    Object.create(Object.prototype, { silent: { value: Infinity } }),\n    useOnlyCustomLevels ? null : DEFAULT_LEVELS,\n    customLevels\n  )\n  return { labels, values }\n}\n\nfunction assertDefaultLevelFound (defaultLevel, customLevels, useOnlyCustomLevels) {\n  if (typeof defaultLevel === 'number') {\n    const values = [].concat(\n      Object.keys(customLevels || {}).map(key => customLevels[key]),\n      useOnlyCustomLevels ? [] : Object.keys(nums).map(level => +level),\n      Infinity\n    )\n    if (!values.includes(defaultLevel)) {\n      throw Error(`default level:${defaultLevel} must be included in custom levels`)\n    }\n    return\n  }\n\n  const labels = Object.assign(\n    Object.create(Object.prototype, { silent: { value: Infinity } }),\n    useOnlyCustomLevels ? null : DEFAULT_LEVELS,\n    customLevels\n  )\n  if (!(defaultLevel in labels)) {\n    throw Error(`default level:${defaultLevel} must be included in custom levels`)\n  }\n}\n\nfunction assertNoLevelCollisions (levels, customLevels) {\n  const { labels, values } = levels\n  for (const k in customLevels) {\n    if (k in values) {\n      throw Error('levels cannot be overridden')\n    }\n    if (customLevels[k] in labels) {\n      throw Error('pre-existing level values cannot be used for new levels')\n    }\n  }\n}\n\n/**\n * Validates whether `levelComparison` is correct\n *\n * @throws Error\n * @param {SORTING_ORDER | Function} levelComparison - value to validate\n * @returns\n */\nfunction assertLevelComparison (levelComparison) {\n  if (typeof levelComparison === 'function') {\n    return\n  }\n\n  if (typeof levelComparison === 'string' && Object.values(SORTING_ORDER).includes(levelComparison)) {\n    return\n  }\n\n  throw new Error('Levels comparison should be one of \"ASC\", \"DESC\" or \"function\" type')\n}\n\nmodule.exports = {\n  initialLsCache,\n  genLsCache,\n  levelMethods,\n  getLevel,\n  setLevel,\n  isLevelEnabled,\n  mappings,\n  assertNoLevelCollisions,\n  assertDefaultLevelFound,\n  genLevelComparison,\n  assertLevelComparison\n}\n","'use strict'\n\nmodule.exports = { version: '10.3.1' }\n","'use strict'\n\n/* eslint no-prototype-builtins: 0 */\n\nconst { EventEmitter } = require('node:events')\nconst {\n  lsCacheSym,\n  levelValSym,\n  setLevelSym,\n  getLevelSym,\n  chindingsSym,\n  mixinSym,\n  asJsonSym,\n  writeSym,\n  mixinMergeStrategySym,\n  timeSym,\n  timeSliceIndexSym,\n  streamSym,\n  serializersSym,\n  formattersSym,\n  errorKeySym,\n  messageKeySym,\n  useOnlyCustomLevelsSym,\n  needsMetadataGsym,\n  redactFmtSym,\n  stringifySym,\n  formatOptsSym,\n  stringifiersSym,\n  msgPrefixSym,\n  hooksSym\n} = require('./symbols')\nconst {\n  getLevel,\n  setLevel,\n  isLevelEnabled,\n  mappings,\n  initialLsCache,\n  genLsCache,\n  assertNoLevelCollisions\n} = require('./levels')\nconst {\n  asChindings,\n  asJson,\n  buildFormatters,\n  stringify,\n  noop\n} = require('./tools')\nconst {\n  version\n} = require('./meta')\nconst redaction = require('./redaction')\n\n// note: use of class is satirical\n// https://github.com/pinojs/pino/pull/433#pullrequestreview-127703127\nconst constructor = class Pino {}\nconst prototype = {\n  constructor,\n  child,\n  bindings,\n  setBindings,\n  flush,\n  isLevelEnabled,\n  version,\n  get level () { return this[getLevelSym]() },\n  set level (lvl) { this[setLevelSym](lvl) },\n  get levelVal () { return this[levelValSym] },\n  set levelVal (n) { throw Error('levelVal is read-only') },\n  get msgPrefix () { return this[msgPrefixSym] },\n  get [Symbol.toStringTag] () { return 'Pino' },\n  [lsCacheSym]: initialLsCache,\n  [writeSym]: write,\n  [asJsonSym]: asJson,\n  [getLevelSym]: getLevel,\n  [setLevelSym]: setLevel\n}\n\nObject.setPrototypeOf(prototype, EventEmitter.prototype)\n\n// exporting and consuming the prototype object using factory pattern fixes scoping issues with getters when serializing\nmodule.exports = function () {\n  return Object.create(prototype)\n}\n\nconst resetChildingsFormatter = bindings => bindings\nfunction child (bindings, options) {\n  if (!bindings) {\n    throw Error('missing bindings for child Pino')\n  }\n  const serializers = this[serializersSym]\n  const formatters = this[formattersSym]\n  const instance = Object.create(this)\n\n  // If an `options` object was not supplied, we can improve\n  // the performance of child creation by skipping\n  // the checks for set options and simply return\n  // a baseline instance.\n  if (options == null) {\n    if (instance[formattersSym].bindings !== resetChildingsFormatter) {\n      instance[formattersSym] = buildFormatters(\n        formatters.level,\n        resetChildingsFormatter,\n        formatters.log\n      )\n    }\n\n    instance[chindingsSym] = asChindings(instance, bindings)\n\n    if (this.onChild !== noop) {\n      this.onChild(instance)\n    }\n\n    return instance\n  }\n\n  if (options.hasOwnProperty('serializers') === true) {\n    instance[serializersSym] = Object.create(null)\n\n    for (const k in serializers) {\n      instance[serializersSym][k] = serializers[k]\n    }\n    const parentSymbols = Object.getOwnPropertySymbols(serializers)\n    /* eslint no-var: off */\n    for (var i = 0; i < parentSymbols.length; i++) {\n      const ks = parentSymbols[i]\n      instance[serializersSym][ks] = serializers[ks]\n    }\n\n    for (const bk in options.serializers) {\n      instance[serializersSym][bk] = options.serializers[bk]\n    }\n    const bindingsSymbols = Object.getOwnPropertySymbols(options.serializers)\n    for (var bi = 0; bi < bindingsSymbols.length; bi++) {\n      const bks = bindingsSymbols[bi]\n      instance[serializersSym][bks] = options.serializers[bks]\n    }\n  } else instance[serializersSym] = serializers\n  if (options.hasOwnProperty('formatters')) {\n    const { level, bindings: chindings, log } = options.formatters\n    instance[formattersSym] = buildFormatters(\n      level || formatters.level,\n      chindings || resetChildingsFormatter,\n      log || formatters.log\n    )\n  } else {\n    instance[formattersSym] = buildFormatters(\n      formatters.level,\n      resetChildingsFormatter,\n      formatters.log\n    )\n  }\n  if (options.hasOwnProperty('customLevels') === true) {\n    assertNoLevelCollisions(this.levels, options.customLevels)\n    instance.levels = mappings(options.customLevels, instance[useOnlyCustomLevelsSym])\n    genLsCache(instance)\n  }\n\n  // redact must place before asChindings and only replace if exist\n  if ((typeof options.redact === 'object' && options.redact !== null) || Array.isArray(options.redact)) {\n    instance.redact = options.redact // replace redact directly\n    const stringifiers = redaction(instance.redact, stringify)\n    const formatOpts = { stringify: stringifiers[redactFmtSym] }\n    instance[stringifySym] = stringify\n    instance[stringifiersSym] = stringifiers\n    instance[formatOptsSym] = formatOpts\n  }\n\n  if (typeof options.msgPrefix === 'string') {\n    instance[msgPrefixSym] = (this[msgPrefixSym] || '') + options.msgPrefix\n  }\n\n  instance[chindingsSym] = asChindings(instance, bindings)\n  if ((options.level !== undefined && options.level !== this.level) || options.hasOwnProperty('customLevels')) {\n    const childLevel = options.level || this.level\n    instance[setLevelSym](childLevel)\n  }\n  this.onChild(instance)\n  return instance\n}\n\nfunction bindings () {\n  const chindings = this[chindingsSym]\n  const chindingsJson = `{${chindings.substr(1)}}` // at least contains ,\"pid\":7068,\"hostname\":\"myMac\"\n  const bindingsFromJson = JSON.parse(chindingsJson)\n  delete bindingsFromJson.pid\n  delete bindingsFromJson.hostname\n  return bindingsFromJson\n}\n\nfunction setBindings (newBindings) {\n  const chindings = asChindings(this, newBindings)\n  this[chindingsSym] = chindings\n}\n\n/**\n * Default strategy for creating `mergeObject` from arguments and the result from `mixin()`.\n * Fields from `mergeObject` have higher priority in this strategy.\n *\n * @param {Object} mergeObject The object a user has supplied to the logging function.\n * @param {Object} mixinObject The result of the `mixin` method.\n * @return {Object}\n */\nfunction defaultMixinMergeStrategy (mergeObject, mixinObject) {\n  return Object.assign(mixinObject, mergeObject)\n}\n\nfunction write (_obj, msg, num) {\n  const t = this[timeSym]()\n  const mixin = this[mixinSym]\n  const errorKey = this[errorKeySym]\n  const messageKey = this[messageKeySym]\n  const mixinMergeStrategy = this[mixinMergeStrategySym] || defaultMixinMergeStrategy\n  let obj\n  const streamWriteHook = this[hooksSym].streamWrite\n\n  if (_obj === undefined || _obj === null) {\n    obj = {}\n  } else if (_obj instanceof Error) {\n    obj = { [errorKey]: _obj }\n    if (msg === undefined) {\n      msg = _obj.message\n    }\n  } else {\n    obj = _obj\n    if (msg === undefined && _obj[messageKey] === undefined && _obj[errorKey]) {\n      msg = _obj[errorKey].message\n    }\n  }\n\n  if (mixin) {\n    obj = mixinMergeStrategy(obj, mixin(obj, num, this))\n  }\n\n  const s = this[asJsonSym](obj, msg, num, t)\n\n  const stream = this[streamSym]\n  if (stream[needsMetadataGsym] === true) {\n    stream.lastLevel = num\n    stream.lastObj = obj\n    stream.lastMsg = msg\n    stream.lastTime = t.slice(this[timeSliceIndexSym])\n    stream.lastLogger = this // for child loggers\n  }\n  stream.write(streamWriteHook ? streamWriteHook(s) : s)\n}\n\nfunction flush (cb) {\n  if (cb != null && typeof cb !== 'function') {\n    throw Error('callback must be a function')\n  }\n\n  const stream = this[streamSym]\n\n  if (typeof stream.flush === 'function') {\n    stream.flush(cb || noop)\n  } else if (cb) cb()\n}\n","'use strict'\n\nconst { hasOwnProperty } = Object.prototype\n\nconst stringify = configure()\n\n// @ts-expect-error\nstringify.configure = configure\n// @ts-expect-error\nstringify.stringify = stringify\n\n// @ts-expect-error\nstringify.default = stringify\n\n// @ts-expect-error used for named export\nexports.stringify = stringify\n// @ts-expect-error used for named export\nexports.configure = configure\n\nmodule.exports = stringify\n\n// eslint-disable-next-line no-control-regex\nconst strEscapeSequencesRegExp = /[\\u0000-\\u001f\\u0022\\u005c\\ud800-\\udfff]/\n\n// Escape C0 control characters, double quotes, the backslash and every code\n// unit with a numeric value in the inclusive range 0xD800 to 0xDFFF.\nfunction strEscape (str) {\n  // Some magic numbers that worked out fine while benchmarking with v8 8.0\n  if (str.length < 5000 && !strEscapeSequencesRegExp.test(str)) {\n    return `\"${str}\"`\n  }\n  return JSON.stringify(str)\n}\n\nfunction sort (array, comparator) {\n  // Insertion sort is very efficient for small input sizes, but it has a bad\n  // worst case complexity. Thus, use native array sort for bigger values.\n  if (array.length > 2e2 || comparator) {\n    return array.sort(comparator)\n  }\n  for (let i = 1; i < array.length; i++) {\n    const currentValue = array[i]\n    let position = i\n    while (position !== 0 && array[position - 1] > currentValue) {\n      array[position] = array[position - 1]\n      position--\n    }\n    array[position] = currentValue\n  }\n  return array\n}\n\nconst typedArrayPrototypeGetSymbolToStringTag =\n  Object.getOwnPropertyDescriptor(\n    Object.getPrototypeOf(\n      Object.getPrototypeOf(\n        new Int8Array()\n      )\n    ),\n    Symbol.toStringTag\n  ).get\n\nfunction isTypedArrayWithEntries (value) {\n  return typedArrayPrototypeGetSymbolToStringTag.call(value) !== undefined && value.length !== 0\n}\n\nfunction stringifyTypedArray (array, separator, maximumBreadth) {\n  if (array.length < maximumBreadth) {\n    maximumBreadth = array.length\n  }\n  const whitespace = separator === ',' ? '' : ' '\n  let res = `\"0\":${whitespace}${array[0]}`\n  for (let i = 1; i < maximumBreadth; i++) {\n    res += `${separator}\"${i}\":${whitespace}${array[i]}`\n  }\n  return res\n}\n\nfunction getCircularValueOption (options) {\n  if (hasOwnProperty.call(options, 'circularValue')) {\n    const circularValue = options.circularValue\n    if (typeof circularValue === 'string') {\n      return `\"${circularValue}\"`\n    }\n    if (circularValue == null) {\n      return circularValue\n    }\n    if (circularValue === Error || circularValue === TypeError) {\n      return {\n        toString () {\n          throw new TypeError('Converting circular structure to JSON')\n        }\n      }\n    }\n    throw new TypeError('The \"circularValue\" argument must be of type string or the value null or undefined')\n  }\n  return '\"[Circular]\"'\n}\n\nfunction getDeterministicOption (options) {\n  let value\n  if (hasOwnProperty.call(options, 'deterministic')) {\n    value = options.deterministic\n    if (typeof value !== 'boolean' && typeof value !== 'function') {\n      throw new TypeError('The \"deterministic\" argument must be of type boolean or comparator function')\n    }\n  }\n  return value === undefined ? true : value\n}\n\nfunction getBooleanOption (options, key) {\n  let value\n  if (hasOwnProperty.call(options, key)) {\n    value = options[key]\n    if (typeof value !== 'boolean') {\n      throw new TypeError(`The \"${key}\" argument must be of type boolean`)\n    }\n  }\n  return value === undefined ? true : value\n}\n\nfunction getPositiveIntegerOption (options, key) {\n  let value\n  if (hasOwnProperty.call(options, key)) {\n    value = options[key]\n    if (typeof value !== 'number') {\n      throw new TypeError(`The \"${key}\" argument must be of type number`)\n    }\n    if (!Number.isInteger(value)) {\n      throw new TypeError(`The \"${key}\" argument must be an integer`)\n    }\n    if (value < 1) {\n      throw new RangeError(`The \"${key}\" argument must be >= 1`)\n    }\n  }\n  return value === undefined ? Infinity : value\n}\n\nfunction getItemCount (number) {\n  if (number === 1) {\n    return '1 item'\n  }\n  return `${number} items`\n}\n\nfunction getUniqueReplacerSet (replacerArray) {\n  const replacerSet = new Set()\n  for (const value of replacerArray) {\n    if (typeof value === 'string' || typeof value === 'number') {\n      replacerSet.add(String(value))\n    }\n  }\n  return replacerSet\n}\n\nfunction getStrictOption (options) {\n  if (hasOwnProperty.call(options, 'strict')) {\n    const value = options.strict\n    if (typeof value !== 'boolean') {\n      throw new TypeError('The \"strict\" argument must be of type boolean')\n    }\n    if (value) {\n      return (value) => {\n        let message = `Object can not safely be stringified. Received type ${typeof value}`\n        if (typeof value !== 'function') message += ` (${value.toString()})`\n        throw new Error(message)\n      }\n    }\n  }\n}\n\nfunction configure (options) {\n  options = { ...options }\n  const fail = getStrictOption(options)\n  if (fail) {\n    if (options.bigint === undefined) {\n      options.bigint = false\n    }\n    if (!('circularValue' in options)) {\n      options.circularValue = Error\n    }\n  }\n  const circularValue = getCircularValueOption(options)\n  const bigint = getBooleanOption(options, 'bigint')\n  const deterministic = getDeterministicOption(options)\n  const comparator = typeof deterministic === 'function' ? deterministic : undefined\n  const maximumDepth = getPositiveIntegerOption(options, 'maximumDepth')\n  const maximumBreadth = getPositiveIntegerOption(options, 'maximumBreadth')\n\n  function stringifyFnReplacer (key, parent, stack, replacer, spacer, indentation) {\n    let value = parent[key]\n\n    if (typeof value === 'object' && value !== null && typeof value.toJSON === 'function') {\n      value = value.toJSON(key)\n    }\n    value = replacer.call(parent, key, value)\n\n    switch (typeof value) {\n      case 'string':\n        return strEscape(value)\n      case 'object': {\n        if (value === null) {\n          return 'null'\n        }\n        if (stack.indexOf(value) !== -1) {\n          return circularValue\n        }\n\n        let res = ''\n        let join = ','\n        const originalIndentation = indentation\n\n        if (Array.isArray(value)) {\n          if (value.length === 0) {\n            return '[]'\n          }\n          if (maximumDepth < stack.length + 1) {\n            return '\"[Array]\"'\n          }\n          stack.push(value)\n          if (spacer !== '') {\n            indentation += spacer\n            res += `\\n${indentation}`\n            join = `,\\n${indentation}`\n          }\n          const maximumValuesToStringify = Math.min(value.length, maximumBreadth)\n          let i = 0\n          for (; i < maximumValuesToStringify - 1; i++) {\n            const tmp = stringifyFnReplacer(String(i), value, stack, replacer, spacer, indentation)\n            res += tmp !== undefined ? tmp : 'null'\n            res += join\n          }\n          const tmp = stringifyFnReplacer(String(i), value, stack, replacer, spacer, indentation)\n          res += tmp !== undefined ? tmp : 'null'\n          if (value.length - 1 > maximumBreadth) {\n            const removedKeys = value.length - maximumBreadth - 1\n            res += `${join}\"... ${getItemCount(removedKeys)} not stringified\"`\n          }\n          if (spacer !== '') {\n            res += `\\n${originalIndentation}`\n          }\n          stack.pop()\n          return `[${res}]`\n        }\n\n        let keys = Object.keys(value)\n        const keyLength = keys.length\n        if (keyLength === 0) {\n          return '{}'\n        }\n        if (maximumDepth < stack.length + 1) {\n          return '\"[Object]\"'\n        }\n        let whitespace = ''\n        let separator = ''\n        if (spacer !== '') {\n          indentation += spacer\n          join = `,\\n${indentation}`\n          whitespace = ' '\n        }\n        const maximumPropertiesToStringify = Math.min(keyLength, maximumBreadth)\n        if (deterministic && !isTypedArrayWithEntries(value)) {\n          keys = sort(keys, comparator)\n        }\n        stack.push(value)\n        for (let i = 0; i < maximumPropertiesToStringify; i++) {\n          const key = keys[i]\n          const tmp = stringifyFnReplacer(key, value, stack, replacer, spacer, indentation)\n          if (tmp !== undefined) {\n            res += `${separator}${strEscape(key)}:${whitespace}${tmp}`\n            separator = join\n          }\n        }\n        if (keyLength > maximumBreadth) {\n          const removedKeys = keyLength - maximumBreadth\n          res += `${separator}\"...\":${whitespace}\"${getItemCount(removedKeys)} not stringified\"`\n          separator = join\n        }\n        if (spacer !== '' && separator.length > 1) {\n          res = `\\n${indentation}${res}\\n${originalIndentation}`\n        }\n        stack.pop()\n        return `{${res}}`\n      }\n      case 'number':\n        return isFinite(value) ? String(value) : fail ? fail(value) : 'null'\n      case 'boolean':\n        return value === true ? 'true' : 'false'\n      case 'undefined':\n        return undefined\n      case 'bigint':\n        if (bigint) {\n          return String(value)\n        }\n        // fallthrough\n      default:\n        return fail ? fail(value) : undefined\n    }\n  }\n\n  function stringifyArrayReplacer (key, value, stack, replacer, spacer, indentation) {\n    if (typeof value === 'object' && value !== null && typeof value.toJSON === 'function') {\n      value = value.toJSON(key)\n    }\n\n    switch (typeof value) {\n      case 'string':\n        return strEscape(value)\n      case 'object': {\n        if (value === null) {\n          return 'null'\n        }\n        if (stack.indexOf(value) !== -1) {\n          return circularValue\n        }\n\n        const originalIndentation = indentation\n        let res = ''\n        let join = ','\n\n        if (Array.isArray(value)) {\n          if (value.length === 0) {\n            return '[]'\n          }\n          if (maximumDepth < stack.length + 1) {\n            return '\"[Array]\"'\n          }\n          stack.push(value)\n          if (spacer !== '') {\n            indentation += spacer\n            res += `\\n${indentation}`\n            join = `,\\n${indentation}`\n          }\n          const maximumValuesToStringify = Math.min(value.length, maximumBreadth)\n          let i = 0\n          for (; i < maximumValuesToStringify - 1; i++) {\n            const tmp = stringifyArrayReplacer(String(i), value[i], stack, replacer, spacer, indentation)\n            res += tmp !== undefined ? tmp : 'null'\n            res += join\n          }\n          const tmp = stringifyArrayReplacer(String(i), value[i], stack, replacer, spacer, indentation)\n          res += tmp !== undefined ? tmp : 'null'\n          if (value.length - 1 > maximumBreadth) {\n            const removedKeys = value.length - maximumBreadth - 1\n            res += `${join}\"... ${getItemCount(removedKeys)} not stringified\"`\n          }\n          if (spacer !== '') {\n            res += `\\n${originalIndentation}`\n          }\n          stack.pop()\n          return `[${res}]`\n        }\n        stack.push(value)\n        let whitespace = ''\n        if (spacer !== '') {\n          indentation += spacer\n          join = `,\\n${indentation}`\n          whitespace = ' '\n        }\n        let separator = ''\n        for (const key of replacer) {\n          const tmp = stringifyArrayReplacer(key, value[key], stack, replacer, spacer, indentation)\n          if (tmp !== undefined) {\n            res += `${separator}${strEscape(key)}:${whitespace}${tmp}`\n            separator = join\n          }\n        }\n        if (spacer !== '' && separator.length > 1) {\n          res = `\\n${indentation}${res}\\n${originalIndentation}`\n        }\n        stack.pop()\n        return `{${res}}`\n      }\n      case 'number':\n        return isFinite(value) ? String(value) : fail ? fail(value) : 'null'\n      case 'boolean':\n        return value === true ? 'true' : 'false'\n      case 'undefined':\n        return undefined\n      case 'bigint':\n        if (bigint) {\n          return String(value)\n        }\n        // fallthrough\n      default:\n        return fail ? fail(value) : undefined\n    }\n  }\n\n  function stringifyIndent (key, value, stack, spacer, indentation) {\n    switch (typeof value) {\n      case 'string':\n        return strEscape(value)\n      case 'object': {\n        if (value === null) {\n          return 'null'\n        }\n        if (typeof value.toJSON === 'function') {\n          value = value.toJSON(key)\n          // Prevent calling `toJSON` again.\n          if (typeof value !== 'object') {\n            return stringifyIndent(key, value, stack, spacer, indentation)\n          }\n          if (value === null) {\n            return 'null'\n          }\n        }\n        if (stack.indexOf(value) !== -1) {\n          return circularValue\n        }\n        const originalIndentation = indentation\n\n        if (Array.isArray(value)) {\n          if (value.length === 0) {\n            return '[]'\n          }\n          if (maximumDepth < stack.length + 1) {\n            return '\"[Array]\"'\n          }\n          stack.push(value)\n          indentation += spacer\n          let res = `\\n${indentation}`\n          const join = `,\\n${indentation}`\n          const maximumValuesToStringify = Math.min(value.length, maximumBreadth)\n          let i = 0\n          for (; i < maximumValuesToStringify - 1; i++) {\n            const tmp = stringifyIndent(String(i), value[i], stack, spacer, indentation)\n            res += tmp !== undefined ? tmp : 'null'\n            res += join\n          }\n          const tmp = stringifyIndent(String(i), value[i], stack, spacer, indentation)\n          res += tmp !== undefined ? tmp : 'null'\n          if (value.length - 1 > maximumBreadth) {\n            const removedKeys = value.length - maximumBreadth - 1\n            res += `${join}\"... ${getItemCount(removedKeys)} not stringified\"`\n          }\n          res += `\\n${originalIndentation}`\n          stack.pop()\n          return `[${res}]`\n        }\n\n        let keys = Object.keys(value)\n        const keyLength = keys.length\n        if (keyLength === 0) {\n          return '{}'\n        }\n        if (maximumDepth < stack.length + 1) {\n          return '\"[Object]\"'\n        }\n        indentation += spacer\n        const join = `,\\n${indentation}`\n        let res = ''\n        let separator = ''\n        let maximumPropertiesToStringify = Math.min(keyLength, maximumBreadth)\n        if (isTypedArrayWithEntries(value)) {\n          res += stringifyTypedArray(value, join, maximumBreadth)\n          keys = keys.slice(value.length)\n          maximumPropertiesToStringify -= value.length\n          separator = join\n        }\n        if (deterministic) {\n          keys = sort(keys, comparator)\n        }\n        stack.push(value)\n        for (let i = 0; i < maximumPropertiesToStringify; i++) {\n          const key = keys[i]\n          const tmp = stringifyIndent(key, value[key], stack, spacer, indentation)\n          if (tmp !== undefined) {\n            res += `${separator}${strEscape(key)}: ${tmp}`\n            separator = join\n          }\n        }\n        if (keyLength > maximumBreadth) {\n          const removedKeys = keyLength - maximumBreadth\n          res += `${separator}\"...\": \"${getItemCount(removedKeys)} not stringified\"`\n          separator = join\n        }\n        if (separator !== '') {\n          res = `\\n${indentation}${res}\\n${originalIndentation}`\n        }\n        stack.pop()\n        return `{${res}}`\n      }\n      case 'number':\n        return isFinite(value) ? String(value) : fail ? fail(value) : 'null'\n      case 'boolean':\n        return value === true ? 'true' : 'false'\n      case 'undefined':\n        return undefined\n      case 'bigint':\n        if (bigint) {\n          return String(value)\n        }\n        // fallthrough\n      default:\n        return fail ? fail(value) : undefined\n    }\n  }\n\n  function stringifySimple (key, value, stack) {\n    switch (typeof value) {\n      case 'string':\n        return strEscape(value)\n      case 'object': {\n        if (value === null) {\n          return 'null'\n        }\n        if (typeof value.toJSON === 'function') {\n          value = value.toJSON(key)\n          // Prevent calling `toJSON` again\n          if (typeof value !== 'object') {\n            return stringifySimple(key, value, stack)\n          }\n          if (value === null) {\n            return 'null'\n          }\n        }\n        if (stack.indexOf(value) !== -1) {\n          return circularValue\n        }\n\n        let res = ''\n\n        const hasLength = value.length !== undefined\n        if (hasLength && Array.isArray(value)) {\n          if (value.length === 0) {\n            return '[]'\n          }\n          if (maximumDepth < stack.length + 1) {\n            return '\"[Array]\"'\n          }\n          stack.push(value)\n          const maximumValuesToStringify = Math.min(value.length, maximumBreadth)\n          let i = 0\n          for (; i < maximumValuesToStringify - 1; i++) {\n            const tmp = stringifySimple(String(i), value[i], stack)\n            res += tmp !== undefined ? tmp : 'null'\n            res += ','\n          }\n          const tmp = stringifySimple(String(i), value[i], stack)\n          res += tmp !== undefined ? tmp : 'null'\n          if (value.length - 1 > maximumBreadth) {\n            const removedKeys = value.length - maximumBreadth - 1\n            res += `,\"... ${getItemCount(removedKeys)} not stringified\"`\n          }\n          stack.pop()\n          return `[${res}]`\n        }\n\n        let keys = Object.keys(value)\n        const keyLength = keys.length\n        if (keyLength === 0) {\n          return '{}'\n        }\n        if (maximumDepth < stack.length + 1) {\n          return '\"[Object]\"'\n        }\n        let separator = ''\n        let maximumPropertiesToStringify = Math.min(keyLength, maximumBreadth)\n        if (hasLength && isTypedArrayWithEntries(value)) {\n          res += stringifyTypedArray(value, ',', maximumBreadth)\n          keys = keys.slice(value.length)\n          maximumPropertiesToStringify -= value.length\n          separator = ','\n        }\n        if (deterministic) {\n          keys = sort(keys, comparator)\n        }\n        stack.push(value)\n        for (let i = 0; i < maximumPropertiesToStringify; i++) {\n          const key = keys[i]\n          const tmp = stringifySimple(key, value[key], stack)\n          if (tmp !== undefined) {\n            res += `${separator}${strEscape(key)}:${tmp}`\n            separator = ','\n          }\n        }\n        if (keyLength > maximumBreadth) {\n          const removedKeys = keyLength - maximumBreadth\n          res += `${separator}\"...\":\"${getItemCount(removedKeys)} not stringified\"`\n        }\n        stack.pop()\n        return `{${res}}`\n      }\n      case 'number':\n        return isFinite(value) ? String(value) : fail ? fail(value) : 'null'\n      case 'boolean':\n        return value === true ? 'true' : 'false'\n      case 'undefined':\n        return undefined\n      case 'bigint':\n        if (bigint) {\n          return String(value)\n        }\n        // fallthrough\n      default:\n        return fail ? fail(value) : undefined\n    }\n  }\n\n  function stringify (value, replacer, space) {\n    if (arguments.length > 1) {\n      let spacer = ''\n      if (typeof space === 'number') {\n        spacer = ' '.repeat(Math.min(space, 10))\n      } else if (typeof space === 'string') {\n        spacer = space.slice(0, 10)\n      }\n      if (replacer != null) {\n        if (typeof replacer === 'function') {\n          return stringifyFnReplacer('', { '': value }, [], replacer, spacer, '')\n        }\n        if (Array.isArray(replacer)) {\n          return stringifyArrayReplacer('', value, [], getUniqueReplacerSet(replacer), spacer, '')\n        }\n      }\n      if (spacer.length !== 0) {\n        return stringifyIndent('', value, [], spacer, '')\n      }\n    }\n    return stringifySimple('', value, [])\n  }\n\n  return stringify\n}\n","'use strict'\n\nconst metadata = Symbol.for('pino.metadata')\nconst { DEFAULT_LEVELS } = require('./constants')\n\nconst DEFAULT_INFO_LEVEL = DEFAULT_LEVELS.info\n\nfunction multistream (streamsArray, opts) {\n  streamsArray = streamsArray || []\n  opts = opts || { dedupe: false }\n\n  const streamLevels = Object.create(DEFAULT_LEVELS)\n  streamLevels.silent = Infinity\n  if (opts.levels && typeof opts.levels === 'object') {\n    Object.keys(opts.levels).forEach(i => {\n      streamLevels[i] = opts.levels[i]\n    })\n  }\n\n  const res = {\n    write,\n    add,\n    remove,\n    emit,\n    flushSync,\n    end,\n    minLevel: 0,\n    lastId: 0,\n    streams: [],\n    clone,\n    [metadata]: true,\n    streamLevels\n  }\n\n  if (Array.isArray(streamsArray)) {\n    streamsArray.forEach(add, res)\n  } else {\n    add.call(res, streamsArray)\n  }\n\n  // clean this object up\n  // or it will stay allocated forever\n  // as it is closed on the following closures\n  streamsArray = null\n\n  return res\n\n  // we can exit early because the streams are ordered by level\n  function write (data) {\n    let dest\n    const level = this.lastLevel\n    const { streams } = this\n    // for handling situation when several streams has the same level\n    let recordedLevel = 0\n    let stream\n\n    // if dedupe set to true we send logs to the stream with the highest level\n    // therefore, we have to change sorting order\n    for (let i = initLoopVar(streams.length, opts.dedupe); checkLoopVar(i, streams.length, opts.dedupe); i = adjustLoopVar(i, opts.dedupe)) {\n      dest = streams[i]\n      if (dest.level <= level) {\n        if (recordedLevel !== 0 && recordedLevel !== dest.level) {\n          break\n        }\n        stream = dest.stream\n        if (stream[metadata]) {\n          const { lastTime, lastMsg, lastObj, lastLogger } = this\n          stream.lastLevel = level\n          stream.lastTime = lastTime\n          stream.lastMsg = lastMsg\n          stream.lastObj = lastObj\n          stream.lastLogger = lastLogger\n        }\n        stream.write(data)\n        if (opts.dedupe) {\n          recordedLevel = dest.level\n        }\n      } else if (!opts.dedupe) {\n        break\n      }\n    }\n  }\n\n  function emit (...args) {\n    for (const { stream } of this.streams) {\n      if (typeof stream.emit === 'function') {\n        stream.emit(...args)\n      }\n    }\n  }\n\n  function flushSync () {\n    for (const { stream } of this.streams) {\n      if (typeof stream.flushSync === 'function') {\n        stream.flushSync()\n      }\n    }\n  }\n\n  function add (dest) {\n    if (!dest) {\n      return res\n    }\n\n    // Check that dest implements either StreamEntry or DestinationStream\n    const isStream = typeof dest.write === 'function' || dest.stream\n    const stream_ = dest.write ? dest : dest.stream\n    // This is necessary to provide a meaningful error message, otherwise it throws somewhere inside write()\n    if (!isStream) {\n      throw Error('stream object needs to implement either StreamEntry or DestinationStream interface')\n    }\n\n    const { streams, streamLevels } = this\n\n    let level\n    if (typeof dest.levelVal === 'number') {\n      level = dest.levelVal\n    } else if (typeof dest.level === 'string') {\n      level = streamLevels[dest.level]\n    } else if (typeof dest.level === 'number') {\n      level = dest.level\n    } else {\n      level = DEFAULT_INFO_LEVEL\n    }\n\n    const dest_ = {\n      stream: stream_,\n      level,\n      levelVal: undefined,\n      id: ++res.lastId\n    }\n\n    streams.unshift(dest_)\n    streams.sort(compareByLevel)\n\n    this.minLevel = streams[0].level\n\n    return res\n  }\n\n  function remove (id) {\n    const { streams } = this\n    const index = streams.findIndex(s => s.id === id)\n\n    if (index >= 0) {\n      streams.splice(index, 1)\n      streams.sort(compareByLevel)\n      this.minLevel = streams.length > 0 ? streams[0].level : -1\n    }\n\n    return res\n  }\n\n  function end () {\n    for (const { stream } of this.streams) {\n      if (typeof stream.flushSync === 'function') {\n        stream.flushSync()\n      }\n      stream.end()\n    }\n  }\n\n  function clone (level) {\n    const streams = new Array(this.streams.length)\n\n    for (let i = 0; i < streams.length; i++) {\n      streams[i] = {\n        level,\n        stream: this.streams[i].stream\n      }\n    }\n\n    return {\n      write,\n      add,\n      remove,\n      minLevel: level,\n      streams,\n      clone,\n      emit,\n      flushSync,\n      [metadata]: true\n    }\n  }\n}\n\nfunction compareByLevel (a, b) {\n  return a.level - b.level\n}\n\nfunction initLoopVar (length, dedupe) {\n  return dedupe ? length - 1 : 0\n}\n\nfunction adjustLoopVar (i, dedupe) {\n  return dedupe ? i - 1 : i + 1\n}\n\nfunction checkLoopVar (i, length, dedupe) {\n  return dedupe ? i >= 0 : i < length\n}\n\nmodule.exports = multistream\n","'use strict'\n\nconst os = require('node:os')\nconst stdSerializers = require('pino-std-serializers')\nconst caller = require('./lib/caller')\nconst redaction = require('./lib/redaction')\nconst time = require('./lib/time')\nconst proto = require('./lib/proto')\nconst symbols = require('./lib/symbols')\nconst { configure } = require('safe-stable-stringify')\nconst { assertDefaultLevelFound, mappings, genLsCache, genLevelComparison, assertLevelComparison } = require('./lib/levels')\nconst { DEFAULT_LEVELS, SORTING_ORDER } = require('./lib/constants')\nconst {\n  createArgsNormalizer,\n  asChindings,\n  buildSafeSonicBoom,\n  buildFormatters,\n  stringify,\n  normalizeDestFileDescriptor,\n  noop\n} = require('./lib/tools')\nconst { version } = require('./lib/meta')\nconst {\n  chindingsSym,\n  redactFmtSym,\n  serializersSym,\n  timeSym,\n  timeSliceIndexSym,\n  streamSym,\n  stringifySym,\n  stringifySafeSym,\n  stringifiersSym,\n  setLevelSym,\n  endSym,\n  formatOptsSym,\n  messageKeySym,\n  errorKeySym,\n  nestedKeySym,\n  mixinSym,\n  levelCompSym,\n  useOnlyCustomLevelsSym,\n  formattersSym,\n  hooksSym,\n  nestedKeyStrSym,\n  mixinMergeStrategySym,\n  msgPrefixSym\n} = symbols\nconst { epochTime, nullTime } = time\nconst { pid } = process\nconst hostname = os.hostname()\nconst defaultErrorSerializer = stdSerializers.err\nconst defaultOptions = {\n  level: 'info',\n  levelComparison: SORTING_ORDER.ASC,\n  levels: DEFAULT_LEVELS,\n  messageKey: 'msg',\n  errorKey: 'err',\n  nestedKey: null,\n  enabled: true,\n  base: { pid, hostname },\n  serializers: Object.assign(Object.create(null), {\n    err: defaultErrorSerializer\n  }),\n  formatters: Object.assign(Object.create(null), {\n    bindings (bindings) {\n      return bindings\n    },\n    level (label, number) {\n      return { level: number }\n    }\n  }),\n  hooks: {\n    logMethod: undefined,\n    streamWrite: undefined\n  },\n  timestamp: epochTime,\n  name: undefined,\n  redact: null,\n  customLevels: null,\n  useOnlyCustomLevels: false,\n  depthLimit: 5,\n  edgeLimit: 100\n}\n\nconst normalize = createArgsNormalizer(defaultOptions)\n\nconst serializers = Object.assign(Object.create(null), stdSerializers)\n\nfunction pino (...args) {\n  const instance = {}\n  const { opts, stream } = normalize(instance, caller(), ...args)\n\n  if (opts.level && typeof opts.level === 'string' && DEFAULT_LEVELS[opts.level.toLowerCase()] !== undefined) opts.level = opts.level.toLowerCase()\n\n  const {\n    redact,\n    crlf,\n    serializers,\n    timestamp,\n    messageKey,\n    errorKey,\n    nestedKey,\n    base,\n    name,\n    level,\n    customLevels,\n    levelComparison,\n    mixin,\n    mixinMergeStrategy,\n    useOnlyCustomLevels,\n    formatters,\n    hooks,\n    depthLimit,\n    edgeLimit,\n    onChild,\n    msgPrefix\n  } = opts\n\n  const stringifySafe = configure({\n    maximumDepth: depthLimit,\n    maximumBreadth: edgeLimit\n  })\n\n  const allFormatters = buildFormatters(\n    formatters.level,\n    formatters.bindings,\n    formatters.log\n  )\n\n  const stringifyFn = stringify.bind({\n    [stringifySafeSym]: stringifySafe\n  })\n  const stringifiers = redact ? redaction(redact, stringifyFn) : {}\n  const formatOpts = redact\n    ? { stringify: stringifiers[redactFmtSym] }\n    : { stringify: stringifyFn }\n  const end = '}' + (crlf ? '\\r\\n' : '\\n')\n  const coreChindings = asChindings.bind(null, {\n    [chindingsSym]: '',\n    [serializersSym]: serializers,\n    [stringifiersSym]: stringifiers,\n    [stringifySym]: stringify,\n    [stringifySafeSym]: stringifySafe,\n    [formattersSym]: allFormatters\n  })\n\n  let chindings = ''\n  if (base !== null) {\n    if (name === undefined) {\n      chindings = coreChindings(base)\n    } else {\n      chindings = coreChindings(Object.assign({}, base, { name }))\n    }\n  }\n\n  const time = (timestamp instanceof Function)\n    ? timestamp\n    : (timestamp ? epochTime : nullTime)\n  const timeSliceIndex = time().indexOf(':') + 1\n\n  if (useOnlyCustomLevels && !customLevels) throw Error('customLevels is required if useOnlyCustomLevels is set true')\n  if (mixin && typeof mixin !== 'function') throw Error(`Unknown mixin type \"${typeof mixin}\" - expected \"function\"`)\n  if (msgPrefix && typeof msgPrefix !== 'string') throw Error(`Unknown msgPrefix type \"${typeof msgPrefix}\" - expected \"string\"`)\n\n  assertDefaultLevelFound(level, customLevels, useOnlyCustomLevels)\n  const levels = mappings(customLevels, useOnlyCustomLevels)\n\n  if (typeof stream.emit === 'function') {\n    stream.emit('message', { code: 'PINO_CONFIG', config: { levels, messageKey, errorKey } })\n  }\n\n  assertLevelComparison(levelComparison)\n  const levelCompFunc = genLevelComparison(levelComparison)\n\n  Object.assign(instance, {\n    levels,\n    [levelCompSym]: levelCompFunc,\n    [useOnlyCustomLevelsSym]: useOnlyCustomLevels,\n    [streamSym]: stream,\n    [timeSym]: time,\n    [timeSliceIndexSym]: timeSliceIndex,\n    [stringifySym]: stringify,\n    [stringifySafeSym]: stringifySafe,\n    [stringifiersSym]: stringifiers,\n    [endSym]: end,\n    [formatOptsSym]: formatOpts,\n    [messageKeySym]: messageKey,\n    [errorKeySym]: errorKey,\n    [nestedKeySym]: nestedKey,\n    // protect against injection\n    [nestedKeyStrSym]: nestedKey ? `,${JSON.stringify(nestedKey)}:{` : '',\n    [serializersSym]: serializers,\n    [mixinSym]: mixin,\n    [mixinMergeStrategySym]: mixinMergeStrategy,\n    [chindingsSym]: chindings,\n    [formattersSym]: allFormatters,\n    [hooksSym]: hooks,\n    silent: noop,\n    onChild,\n    [msgPrefixSym]: msgPrefix\n  })\n\n  Object.setPrototypeOf(instance, proto())\n\n  genLsCache(instance)\n\n  instance[setLevelSym](level)\n\n  return instance\n}\n\nmodule.exports = pino\n\nmodule.exports.destination = (dest = process.stdout.fd) => {\n  if (typeof dest === 'object') {\n    dest.dest = normalizeDestFileDescriptor(dest.dest || process.stdout.fd)\n    return buildSafeSonicBoom(dest)\n  } else {\n    return buildSafeSonicBoom({ dest: normalizeDestFileDescriptor(dest), minLength: 0 })\n  }\n}\n\nmodule.exports.transport = require('./lib/transport')\nmodule.exports.multistream = require('./lib/multistream')\n\nmodule.exports.levels = mappings()\nmodule.exports.stdSerializers = serializers\nmodule.exports.stdTimeFunctions = Object.assign({}, time)\nmodule.exports.symbols = symbols\nmodule.exports.version = version\n\n// Enables default and name export with TypeScript and Babel\nmodule.exports.default = pino\nmodule.exports.pino = pino\n","import pino, { type Logger as PinoLogger } from \"pino\";\n\nexport type LogDest = \"console\" | \"pino\" | \"both\";\nexport type LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\";\n\nconst baseLogger: PinoLogger = pino({\n  level: process.env.LOG_LEVEL ?? \"info\",\n  base: { service: \"tb-streamer\" },\n  timestamp: pino.stdTimeFunctions.isoTime,\n  redact: {\n    paths: [\"req.headers.authorization\", \"req.headers.cookie\", 'req.headers[\"x-api-key\"]'],\n    censor: \"[redacted]\",\n  },\n});\n\nexport interface Logger {\n  debug(msg: string, fields?: Record<string, unknown>, dest?: LogDest): void;\n  info(msg: string, fields?: Record<string, unknown>, dest?: LogDest): void;\n  warn(msg: string, fields?: Record<string, unknown>, dest?: LogDest): void;\n  error(msg: string, fields?: Record<string, unknown>, dest?: LogDest): void;\n  log(level: LogLevel, msg: string, fields?: Record<string, unknown>, dest?: LogDest): void;\n  pino: PinoLogger;\n}\n\n/**\n * Where a line goes when the caller doesn't pass an explicit `dest`.\n *\n * Under a supervisor (launchd, systemd, Task Scheduler, Docker) fd 1 is a file\n * or a pipe. There the console half of the old `\"both\"` default was an\n * unstructured duplicate of the pino line — and because `console` has no level\n * of its own, it also printed every `debug` call pino had already filtered out.\n * Those two effects were ~40% of a 261 MB stdout.log, the single loudest line\n * being a `debug` one that could not be turned off by any setting.\n *\n * At a human terminal the tradeoff inverts: the pretty line is the useful one\n * and the JSON is the noise. An explicit `dest` still overrides both cases,\n * which is what the CLI's user-facing output (banners, QR, `prod doctor`) uses.\n */\nfunction defaultDest(): LogDest {\n  return process.stdout.isTTY ? \"console\" : \"pino\";\n}\n\nfunction emit(\n  pinoChild: PinoLogger,\n  level: LogLevel,\n  msg: string,\n  fields: Record<string, unknown> | undefined,\n  dest: LogDest,\n): void {\n  if (dest === \"pino\" || dest === \"both\") {\n    if (fields && Object.keys(fields).length > 0) pinoChild[level](fields, msg);\n    else pinoChild[level](msg);\n  }\n  if (dest === \"console\" || dest === \"both\") {\n    const consoleMethod: \"log\" | \"warn\" | \"error\" =\n      level === \"error\" ? \"error\" : level === \"warn\" ? \"warn\" : \"log\";\n    console[consoleMethod](msg);\n  }\n}\n\nfunction build(pinoChild: PinoLogger): Logger {\n  return {\n    debug: (m, f, d = defaultDest()) => emit(pinoChild, \"debug\", m, f, d),\n    info: (m, f, d = defaultDest()) => emit(pinoChild, \"info\", m, f, d),\n    warn: (m, f, d = defaultDest()) => emit(pinoChild, \"warn\", m, f, d),\n    error: (m, f, d = defaultDest()) => emit(pinoChild, \"error\", m, f, d),\n    log: (lvl, m, f, d = defaultDest()) => emit(pinoChild, lvl, m, f, d),\n    pino: pinoChild,\n  };\n}\n\nexport function getLogger(component?: string): Logger {\n  return build(component ? baseLogger.child({ component }) : baseLogger);\n}\n\nexport const logger: Logger = build(baseLogger);\n","// Server feature flags: the registry, the config sources, and boot-time resolution.\n//\n// A feature flag gates behaviour we are not ready to make unconditional — an\n// experiment, a provider quirk, a migration half-step. It is deliberately NOT\n// the same mechanism as src/claude-flags.ts: those are CLI arguments handed to\n// a spawned `claude` process, these change how the STREAMER itself behaves.\n//\n// Two rules make this safe to expose to a hand-editable server.yaml:\n//   1. Booleans only. A flag is on or off; anything richer belongs in a real\n//      config field with its own validation.\n//   2. Resolution happens ONCE, at boot. There is no runtime mutation and no\n//      PUT endpoint — a flag change means a restart, same as every other\n//      startup-resolved setting (ptyGracePeriodMs, cacheDir, …). That keeps a\n//      flag's value stable for the lifetime of a process, so no code has to\n//      reason about it changing underneath a live session.\n\nimport { getLogger } from \"./logger\";\n\n/** Spec for one flag in the keyed registry. The id is the object key, not a field. */\nexport interface FeatureFlagSpec {\n  /** Shipped to clients alongside the values so a UI can render it. */\n  description: string;\n  default: boolean;\n  /** Full env var name. */\n  env: string;\n}\n\n/** Wire shape: the keyed spec plus its id, for GET /api/config/feature-flags. */\nexport interface FeatureFlagDefinition extends FeatureFlagSpec {\n  /** Stable config/wire key. Used in server.yaml, on the CLI, and over HTTP. */\n  id: FeatureFlagId;\n}\n\n/**\n * Values arriving from a config source. PARTIAL on purpose: server.yaml, the\n * CLI and ServerConfig each speak about the flags they mention and stay silent\n * on the rest, which is what lets the precedence chain fall through.\n */\nexport type FeatureFlagValues = Partial<Record<FeatureFlagId, boolean>>;\n\n/** Every flag, resolved. Total — see resolveFeatureFlags(). */\nexport type ResolvedFeatureFlags = Record<FeatureFlagId, boolean>;\n\n/**\n * Which rung of the precedence chain decided a flag.\n *\n * Kept because the resolved boolean alone cannot answer \"why is this on?\", and\n * that is the first question asked of a flag that is on when nobody expected it.\n * `override` is the legacy ServerConfig field (see resolveFeatureFlags).\n */\nexport type FeatureFlagSource = \"override\" | \"env\" | \"cli\" | \"yaml\" | \"default\";\n\nexport interface FeatureFlagResolution {\n  values: ResolvedFeatureFlags;\n  sources: Record<FeatureFlagId, FeatureFlagSource>;\n}\n\n/**\n * The registry, keyed by flag name.\n *\n * Prefer `FEATURE_FLAGS.ptyHost` over a string lookup. A typo is a compile\n * error; `findFeatureFlag(\"…\")` is only for untrusted yaml/CLI tokens.\n *\n * `as const` + `keyof` is what makes `flags.ptyHsot` a compile error instead of\n * `undefined`. A TS enum would add a runtime object without a stronger type.\n */\nexport const FEATURE_FLAGS = {\n  subagentSessions: {\n    description:\n      \"Include provider-created Claude Code and Codex child sessions in history and session APIs.\",\n    default: false,\n    env: \"THREADBASE_FEATURE_SUBAGENT_SESSIONS\",\n  },\n  codexSystemPrompt: {\n    description:\n      \"Send the built system prompt to fresh Codex sessions. Off by default: Codex has no \" +\n      \"--system-prompt flag, so the prompt goes in the positional [PROMPT] argument, which \" +\n      \"Codex treats as the user's opening turn rather than a system-level instruction.\",\n    default: false,\n    env: \"THREADBASE_FEATURE_CODEX_SYSTEM_PROMPT\",\n  },\n  sessionRehydration: {\n    description:\n      \"Seed the session list at boot with sessions a previous streamer run left behind, so a \" +\n      \"restart leaves them one tap from resuming instead of silently gone. On by default, with \" +\n      \"a kill switch: it changes what GET /api/sessions contains.\",\n    default: true,\n    env: \"THREADBASE_FEATURE_SESSION_REHYDRATION\",\n  },\n  liveActivityPush: {\n    description:\n      \"Drive iOS Live Activity surfaces for running sessions. Off by default: the streamer half \" +\n      \"needs an APNs p8 and a registered push-to-start token, and without both, mobile falls back \" +\n      \"to starting the activity locally — which freezes the moment the app backgrounds and \" +\n      \"expires silently after ~8h. Mobile reads this flag and skips its local path too, so one \" +\n      \"switch turns the whole surface off.\",\n    default: false,\n    env: \"THREADBASE_FEATURE_LIVE_ACTIVITY_PUSH\",\n  },\n  e2ee: {\n    description:\n      \"Application-layer encryption between a paired device and this server, independent of TLS, \" +\n      \"so a tunnel or a LAN observer on the path carries ciphertext. On by default (stage 2): it \" +\n      \"is negotiated per device, never forced, because released mobile builds cannot be \" +\n      \"force-updated and a server that demanded it would break every one of them. `required` \" +\n      \"(stage 3, refusing plaintext from any client) is a separate, still-unmade decision.\",\n    default: true,\n    env: \"THREADBASE_FEATURE_E2EE\",\n  },\n  accessProbe: {\n    description:\n      \"At boot, ask this server's own public URL what an unauthenticated device would get, and warn \" +\n      \"if an edge gate (Cloudflare Access) answers instead of the server. On by default because the \" +\n      \"failure it catches is silent and expensive: a sealed request carries no Authorization header, \" +\n      \"so an interactive Access application refuses it before the tunnel and the device reports that \" +\n      \"pairing failed — blaming the server, which never saw the request. One probe, one line, never a \" +\n      \"retry and never a refusal to start.\",\n    default: true,\n    env: \"THREADBASE_FEATURE_ACCESS_PROBE\",\n  },\n  ptyHost: {\n    description:\n      \"Keep live PTYs in a separate host process so a streamer restart can reconnect without \" +\n      \"restarting the agents. Off by default until cross-platform behavior is qualified.\",\n    default: false,\n    env: \"THREADBASE_FEATURE_PTY_HOST\",\n  },\n} as const satisfies Record<string, FeatureFlagSpec>;\n\n/**\n * The registry's ids as a union, derived rather than declared.\n *\n * This is what makes `flags.ptyHsot` a compile error instead of `undefined`.\n * Under the old `Record<string, boolean>` an index signature accepted any key,\n * so a typo in a consumer read as falsy and silently disabled the feature it\n * was meant to gate — the exact failure the \"total map\" contract exists to\n * prevent, reachable through the one door that contract left open.\n */\nexport type FeatureFlagId = keyof typeof FEATURE_FLAGS;\n\n/**\n * The yaml / `--feature` ids, in registry order.\n *\n * These are the `FEATURE_FLAGS` object keys — not the `THREADBASE_FEATURE_*`\n * env names. `feature_flags: {\"ptyHost\":true}` is valid;\n * `{\"THREADBASE_FEATURE_PTY_HOST\":true}` is dropped as unknown.\n */\nexport const FEATURE_FLAG_IDS = Object.keys(FEATURE_FLAGS) as FeatureFlagId[];\n\n/**\n * Ordered list for iteration and the HTTP registry.\n *\n * The wire shape stays an array of `{ id, description, default, env }` so a\n * keyed in-process registry is not a breaking GET /api/config/feature-flags\n * change. Each `id` is the matching `FEATURE_FLAGS` key.\n */\nexport const FEATURE_FLAG_LIST: readonly FeatureFlagDefinition[] = FEATURE_FLAG_IDS.map((id) => ({\n  id,\n  ...FEATURE_FLAGS[id],\n}));\n\nexport function isFeatureFlagId(id: string): id is FeatureFlagId {\n  return Object.hasOwn(FEATURE_FLAGS, id);\n}\n\n/** Typed lookup. The flag is always present; unknown names do not type-check. */\nexport function getFeatureFlag<K extends FeatureFlagId>(id: K) {\n  return { id, ...FEATURE_FLAGS[id] };\n}\n\n/**\n * Look a flag up by an unvalidated string (yaml keys, `--feature` tokens).\n *\n * In-process code should use `FEATURE_FLAGS.ptyHost` or `getFeatureFlag(\"ptyHost\")`.\n */\nexport function findFeatureFlag(id: string): FeatureFlagDefinition | undefined {\n  if (!isFeatureFlagId(id)) return undefined;\n  return getFeatureFlag(id);\n}\n\n/**\n * Parse a boolean env var, tri-state.\n *\n * `undefined` means \"this variable did not speak\" — distinct from `false` — so\n * an unset var lets the next precedence rung (CLI, then yaml) decide instead of\n * silently forcing the flag off.\n *\n * That tri-state return is why this does not reuse one of the existing env\n * parsers (`parseIncludeAgentsEnv` in server.ts, `isTruthy` in\n * agent/agent-config.ts, the inline sets in api/middleware/cors.middleware.ts):\n * all three collapse \"absent\" into a boolean, which is exactly the distinction\n * the precedence chain needs. Consolidating those three is a separate change.\n */\nexport function parseBooleanEnv(raw: string | undefined): boolean | undefined {\n  if (raw === undefined) return undefined;\n  const v = raw.trim().toLowerCase();\n  if (v === \"\") return false;\n  return !(v === \"0\" || v === \"false\" || v === \"no\" || v === \"off\");\n}\n\n/**\n * Drop everything that isn't a known id carrying a boolean.\n *\n * A TRUST BOUNDARY, mirroring validateFlagValues() in claude-flags.ts: values\n * arrive from a user-editable server.yaml. Unknown ids and ill-typed values are\n * dropped with a warning rather than throwing, so one stale or fat-fingered key\n * can never stop the server from booting.\n *\n * Note the deliberate non-coercion: `\"true\"` (a string) is dropped, not read as\n * true. A value that isn't already a boolean means the writer misunderstood the\n * format, and guessing at intent is how a flag silently ends up on.\n */\nexport function validateFeatureFlagValues(raw: unknown): FeatureFlagValues {\n  if (!raw || typeof raw !== \"object\" || Array.isArray(raw)) return {};\n  const out: FeatureFlagValues = {};\n  const dropped: string[] = [];\n  for (const [id, value] of Object.entries(raw as Record<string, unknown>)) {\n    const def = findFeatureFlag(id);\n    if (!def || typeof value !== \"boolean\") {\n      dropped.push(id);\n      continue;\n    }\n    out[def.id] = value;\n  }\n  if (dropped.length > 0) {\n    getLogger(\"feature-flags\").warn(\n      `Ignoring unknown or non-boolean feature flags: ${dropped.join(\", \")}. ` +\n        `Known ids (FEATURE_FLAGS keys, not env names): ${FEATURE_FLAG_IDS.join(\", \")}`,\n      {\n        event: \"config.feature_flags_dropped\",\n        dropped,\n        known: FEATURE_FLAG_IDS,\n      },\n    );\n  }\n  return out;\n}\n\n/**\n * Parse repeatable `--feature <id=bool>` CLI tokens.\n *\n * Errors are returned rather than thrown so the caller owns the exit: a typo on\n * the command line should print one legible message and stop, not surface a\n * stack trace. Unlike the yaml path this is strict — a CLI typo is a mistake the\n * operator is standing right there to fix, whereas a stale yaml key must not\n * block an unattended boot.\n */\nexport function parseFeatureFlagArgs(entries: string[]): {\n  values: FeatureFlagValues;\n  errors: string[];\n} {\n  const values: FeatureFlagValues = {};\n  const errors: string[] = [];\n\n  for (const entry of entries) {\n    const eq = entry.indexOf(\"=\");\n    const id = (eq === -1 ? entry : entry.slice(0, eq)).trim();\n    // A bare `--feature someFlag` reads as \"turn it on\", matching how bare\n    // boolean flags behave everywhere else.\n    const rawValue =\n      eq === -1\n        ? \"true\"\n        : entry\n            .slice(eq + 1)\n            .trim()\n            .toLowerCase();\n\n    const def = findFeatureFlag(id);\n    if (!def) {\n      errors.push(\n        `Unknown feature flag \"${id}\". Known flags (FEATURE_FLAGS keys, not env names): ${FEATURE_FLAG_IDS.join(\", \")}`,\n      );\n      continue;\n    }\n    if (rawValue !== \"true\" && rawValue !== \"false\") {\n      errors.push(`Invalid value \"${rawValue}\" for feature flag \"${id}\" — expected true/false`);\n      continue;\n    }\n    values[def.id] = rawValue === \"true\";\n  }\n\n  return { values, errors };\n}\n\n/**\n * Resolve every flag once, at boot. Precedence, highest first:\n *\n *   override  →  env  →  CLI  →  server.yaml  →  registry default\n *\n * Env beats the CLI so an operator can flip a flag on a supervised instance\n * (launchd/systemd/Task Scheduler) whose argv is fixed — the same reason\n * THREADBASE_ALLOW_BROWSER_CORS overrides browser_cors: in server.yaml.\n *\n * `override` is the legacy explicit ServerConfig field (codexSystemPromptEnabled),\n * kept so embedders and tests that set it directly keep working. It is a real\n * rung here rather than a mutation applied to the finished map afterwards: the\n * old shape meant the resolver was not actually the single source of truth, and\n * an override was invisible to anything reporting where a value came from.\n *\n * The returned `values` map is TOTAL: every registry id is present, defaults\n * filled in. Callers therefore index it without a `?? default`, and a flag added\n * later cannot reach a boolean branch as `undefined` just because an older\n * server.yaml predates it. `sources` is total for the same reason.\n */\nexport function resolveFeatureFlags(opts?: {\n  override?: FeatureFlagValues;\n  cli?: FeatureFlagValues;\n  yaml?: FeatureFlagValues;\n  env?: NodeJS.ProcessEnv;\n}): FeatureFlagResolution {\n  const env = opts?.env ?? process.env;\n  const values = {} as ResolvedFeatureFlags;\n  const sources = {} as Record<FeatureFlagId, FeatureFlagSource>;\n\n  for (const def of FEATURE_FLAG_LIST) {\n    // Written as an ordered list rather than a `??` chain because the chain\n    // discards which rung won, and that is the answer to the only question\n    // anyone asks of a surprising flag.\n    const rungs: ReadonlyArray<[FeatureFlagSource, boolean | undefined]> = [\n      [\"override\", opts?.override?.[def.id]],\n      [\"env\", parseBooleanEnv(env[def.env])],\n      [\"cli\", opts?.cli?.[def.id]],\n      [\"yaml\", opts?.yaml?.[def.id]],\n    ];\n    const won = rungs.find(([, v]) => v !== undefined);\n    values[def.id] = won ? (won[1] as boolean) : def.default;\n    sources[def.id] = won ? won[0] : \"default\";\n  }\n\n  return { values, sources };\n}\n\n/** Registry ids whose resolved value differs from the registry default. */\nexport function nonDefaultFeatureFlags(values: ResolvedFeatureFlags): FeatureFlagId[] {\n  return FEATURE_FLAG_LIST.filter((f) => values[f.id] !== f.default).map((f) => f.id);\n}\n\n/**\n * One line describing the whole resolution: `id=value(source)`, every flag.\n *\n * Replaces a boot log that printed only the ids differing from their defaults\n * under the heading \"Feature flags active\". That heading was wrong for any\n * flag whose default is ON — disabling `sessionRehydration` made it appear in\n * a list of active flags, stating the opposite of what had happened. Printing\n * the value removes the ambiguity, and printing every flag means the log\n * answers \"what was this process running with\" instead of only ever hinting.\n */\nexport function describeFeatureFlags(resolution: FeatureFlagResolution): string {\n  return FEATURE_FLAG_LIST.map(\n    (f) => `${f.id}=${resolution.values[f.id]}(${resolution.sources[f.id]})`,\n  ).join(\" \");\n}\n","import { randomBytes, timingSafeEqual } from \"crypto\";\nimport { chmodSync, mkdirSync, readFileSync, renameSync, writeFileSync } from \"fs\";\nimport { homedir } from \"os\";\nimport { join } from \"path\";\nimport type { AccessServiceToken } from \"./access-probe\";\nimport {\n  type ClaudeFlagValues,\n  isPermissionMode,\n  type PermissionMode,\n  validateFlagValues,\n} from \"./claude-flags\";\nimport { type FeatureFlagValues, validateFeatureFlagValues } from \"./feature-flags\";\nimport { getLogger } from \"./logger\";\n\n// Resolved per call (not frozen at module load) so tests can redirect writes\n// away from the real config via THREADBASE_CONFIG_DIR. Without this, importing\n// this module freezes the path to the real home before any test can sandbox it,\n// and a rotate/set-key test would clobber the live ~/.threadbase/server.yaml.\nfunction configDir(): string {\n  return process.env.THREADBASE_CONFIG_DIR ?? join(homedir(), \".threadbase\");\n}\nfunction configFile(): string {\n  return join(configDir(), \"server.yaml\");\n}\n\nexport function generateApiKey(): string {\n  return `tb_${randomBytes(16).toString(\"hex\")}`;\n}\n\nexport function validateApiKey(provided: string, expected: string): boolean {\n  const a = Buffer.from(provided);\n  const b = Buffer.from(expected);\n  if (a.length !== b.length) return false;\n  return timingSafeEqual(a, b);\n}\n\nexport function loadOrCreateApiKey(): string {\n  try {\n    const content = readFileSync(configFile(), \"utf-8\");\n    const match = content.match(/api_key:\\s*(.+)/);\n    if (match?.[1]) return match[1].trim();\n  } catch {\n    // File doesn't exist, create one\n  }\n\n  const key = generateApiKey();\n  mkdirSync(configDir(), { recursive: true });\n  // 0600 + chmod, matching setConfigValue and setApiKey below. Without the mode\n  // this line created the file at the process umask — typically 0644 — so the\n  // FIRST server.yaml on a machine held the API key world-readable until some\n  // later write happened to rewrite it at 0600. A server that never rotates its\n  // key never gets that write.\n  writeFileSync(configFile(), `api_key: ${key}\\n`, { encoding: \"utf-8\", mode: 0o600 });\n  // writeFileSync's mode only applies when it CREATES the file, and it is\n  // masked by the umask; chmod is what makes the permission unconditional.\n  chmodSync(configFile(), 0o600);\n  return key;\n}\n\nexport function loadBrowseRoot(): string | undefined {\n  try {\n    const content = readFileSync(configFile(), \"utf-8\");\n    const match = content.match(/browse_root:\\s*(.+)/);\n    if (match?.[1]) return match[1].trim();\n  } catch {\n    // File doesn't exist or not readable\n  }\n  return undefined;\n}\n\nexport function loadPublicUrl(): string | undefined {\n  try {\n    const content = readFileSync(configFile(), \"utf-8\");\n    const match = content.match(/public_url:\\s*(.+)/);\n    if (match?.[1]) return match[1].trim();\n  } catch {\n    // File doesn't exist or not readable\n  }\n  return undefined;\n}\n\nexport function loadBrowserCors(): string | undefined {\n  try {\n    const content = readFileSync(configFile(), \"utf-8\");\n    const match = content.match(/browser_cors:\\s*(.+)/);\n    if (match?.[1]) return match[1].trim();\n  } catch {\n    // File doesn't exist or not readable\n  }\n  return undefined;\n}\n\nexport function loadCacheDir(): string | undefined {\n  try {\n    const content = readFileSync(configFile(), \"utf-8\");\n    const match = content.match(/cache_dir:\\s*(.+)/);\n    if (match?.[1]) return match[1].trim();\n  } catch {\n    // File doesn't exist or not readable\n  }\n  return undefined;\n}\n\nexport function loadTailSize(): number | undefined {\n  try {\n    const content = readFileSync(configFile(), \"utf-8\");\n    const match = content.match(/tail_size:\\s*(\\d+)/);\n    if (match?.[1]) return Number.parseInt(match[1], 10);\n  } catch {\n    // File doesn't exist or not readable\n  }\n  return undefined;\n}\n\n// Auto-kill grace period in ms. 0 disables the automatic hold-on-disconnect\n// timer entirely (explicit hold_session still works); a positive value sets the\n// delay; unset falls through to DEFAULT_PTY_GRACE_PERIOD_MS.\nexport function loadPtyGracePeriodMs(): number | undefined {\n  try {\n    const content = readFileSync(configFile(), \"utf-8\");\n    const match = content.match(/pty_grace_period_ms:\\s*(\\d+)/);\n    if (match?.[1]) return Number.parseInt(match[1], 10);\n  } catch {\n    // File doesn't exist or not readable\n  }\n  return undefined;\n}\n\nexport function loadDefaultPermissionMode(): PermissionMode | undefined {\n  try {\n    const content = readFileSync(configFile(), \"utf-8\");\n    const match = content.match(/default_permission_mode:\\s*(\\S+)/);\n    const value = match?.[1]?.trim();\n    if (isPermissionMode(value)) return value;\n  } catch {\n    // File doesn't exist or not readable\n  }\n  return undefined;\n}\n\n/**\n * Write (or delete) a single `key: value` line in server.yaml.\n *\n * server.yaml is a flat, regex-parsed file — no YAML library — so every value\n * must stay on ONE line. Passing `undefined` removes the key rather than\n * writing a bare `key:` that the readers would then match with an empty value.\n *\n * The write is atomic (tmp + rename) and 0600 because this file holds the API\n * key. Every setter in this module goes through here.\n */\nfunction setConfigValue(key: string, value: string | undefined): void {\n  const file = configFile();\n  mkdirSync(configDir(), { recursive: true });\n\n  let content = \"\";\n  try {\n    content = readFileSync(file, \"utf-8\");\n  } catch (err) {\n    if ((err as NodeJS.ErrnoException).code !== \"ENOENT\") throw err;\n    // file does not exist; we'll create it\n  }\n\n  const lineRe = new RegExp(`^${key}:\\\\s*.*$\\\\n?`, \"m\");\n  let updated: string;\n  if (value === undefined) {\n    updated = content.replace(lineRe, \"\");\n  } else {\n    const line = `${key}: ${value}`;\n    if (lineRe.test(content)) {\n      updated = content.replace(lineRe, `${line}\\n`);\n    } else if (content.length === 0 || content.endsWith(\"\\n\")) {\n      updated = `${content}${line}\\n`;\n    } else {\n      updated = `${content}\\n${line}\\n`;\n    }\n  }\n\n  const tmpFile = `${file}.tmp`;\n  writeFileSync(tmpFile, updated, { encoding: \"utf-8\", mode: 0o600 });\n  chmodSync(tmpFile, 0o600);\n  renameSync(tmpFile, file);\n}\n\n// Persists the first-run prompt's answer so subsequent `serve` invocations\n// don't ask again (loadDefaultPermissionMode() returning a value is the\n// \"already configured\" signal cli/index.ts checks before prompting).\nexport function setDefaultPermissionMode(mode: PermissionMode): void {\n  setConfigValue(\"default_permission_mode\", mode);\n}\n\n/**\n * Whether interrupted sessions are re-started automatically at boot\n * (persistence plan Phase 7a).\n *\n * **Tri-state on purpose.** `undefined` means the key is absent — the user has\n * never been asked — and is what triggers the one-time prompt. It is not the\n * same as `false`, which is a real answer and must never be re-asked.\n * Collapsing the two would either nag on every boot or silently decide for\n * someone who was never given the choice.\n *\n * Not a feature flag: feature flags gate behaviour *we* are unsure about, while\n * this is a user preference with a persisted answer — the\n * `default_permission_mode` shape, not the `codexSystemPrompt` shape.\n */\nexport function loadAutoResumeOnBoot(): boolean | undefined {\n  try {\n    const content = readFileSync(configFile(), \"utf-8\");\n    // Anchored and exact: only a literal `true`/`false` is an answer. A typo\n    // must read as \"never asked\" and re-prompt, rather than being coerced into\n    // enabling unattended agent starts.\n    const match = content.match(/^auto_resume_on_boot:\\s*(true|false)\\s*$/m);\n    if (match) return match[1] === \"true\";\n  } catch {\n    // File doesn't exist or not readable\n  }\n  return undefined;\n}\n\nexport function setAutoResumeOnBoot(value: boolean): void {\n  setConfigValue(\"auto_resume_on_boot\", String(value));\n}\n\n/**\n * Allowlisted Claude CLI flags, stored as ONE line of JSON:\n *\n *     claude_flags: {\"permissionMode\":\"bypassPermissions\",\"addDir\":[\"/srv/a b\"]}\n *\n * JSON rather than a bespoke encoding because JSON.stringify already escapes\n * colons, quotes and spaces (killing the whole quoting-bug class) and emits no\n * raw newlines, so the one-line invariant holds by construction. It is also a\n * valid YAML flow mapping, so the file still parses if a real YAML reader is\n * ever pointed at it.\n *\n * A malformed line yields {} plus a warning rather than throwing: server.yaml is\n * hand-editable and a typo must never stop the server from booting.\n */\nexport function loadClaudeFlags(): ClaudeFlagValues {\n  try {\n    const content = readFileSync(configFile(), \"utf-8\");\n    const match = content.match(/^claude_flags:\\s*(.+)$/m);\n    if (!match?.[1]) return {};\n    return validateFlagValues(JSON.parse(match[1].trim()));\n  } catch (err) {\n    if ((err as NodeJS.ErrnoException).code !== \"ENOENT\") {\n      getLogger(\"auth\").warn(`Ignoring unreadable claude_flags in server.yaml: ${String(err)}`, {\n        event: \"config.claude_flags_parse_failed\",\n      });\n    }\n    return {};\n  }\n}\n\nexport function setClaudeFlags(values: ClaudeFlagValues): void {\n  const safe = validateFlagValues(values);\n  setConfigValue(\"claude_flags\", Object.keys(safe).length === 0 ? undefined : JSON.stringify(safe));\n}\n\n/** Free-text argv appended after the allowlisted flags. Unvalidated by design. */\nexport function loadClaudeExtraArgs(): string | undefined {\n  try {\n    const content = readFileSync(configFile(), \"utf-8\");\n    const match = content.match(/^claude_extra_args:\\s*(.+)$/m);\n    const value = match?.[1]?.trim();\n    return value && value.length > 0 ? value : undefined;\n  } catch {\n    // File doesn't exist or not readable\n  }\n  return undefined;\n}\n\n/**\n * Throws on an embedded newline rather than silently sanitizing: a newline would\n * corrupt the flat one-line-per-key file, and the caller (the HTTP layer) should\n * surface that to the user as a validation error instead of quietly rewriting\n * what they typed.\n */\nexport function setClaudeExtraArgs(text: string | undefined): void {\n  const trimmed = text?.trim();\n  if (trimmed && /[\\r\\n]/.test(trimmed)) {\n    throw new Error(\"claude_extra_args must not contain newlines\");\n  }\n  setConfigValue(\"claude_extra_args\", trimmed && trimmed.length > 0 ? trimmed : undefined);\n}\n\n/**\n * Server feature flags, stored as ONE line of JSON — same encoding and the same\n * reasons as claude_flags above:\n *\n *     feature_flags: {\"codexSystemPrompt\":true}\n *\n * Keys must match `FEATURE_FLAGS` object keys (`ptyHost`), not env var names\n * (`THREADBASE_FEATURE_PTY_HOST`). Unknown keys are dropped.\n *\n * Read-only from this module's perspective: nothing writes this key, because\n * flags resolve at boot and there is no runtime-mutation endpoint. Add a\n * setFeatureFlags() alongside a PUT, if one is ever added.\n *\n * A malformed line yields {} plus a warning rather than throwing, so a typo in a\n * hand-edited server.yaml costs the flag, not the boot.\n */\n/**\n * Cloudflare Access service-token credentials, for the boot probe in\n * `access-probe.ts`.\n *\n * One line, JSON, so it reads the same way `feature_flags:` does:\n *\n *     access_service_token: {\"client_id\":\"…\",\"client_secret\":\"…\"}\n *\n * A credential in server.yaml is a real consideration, and the file is already\n * `chmod 600` because it holds the API key. This is the operator's own token for\n * their own edge, it is useless without the hostname it belongs to, and the\n * alternative — the streamer holding it in memory only — cannot survive the\n * restart that the probe runs on.\n *\n * A malformed line costs the probe's second half, not the boot: the gate is\n * still detected and reported, just without the \"does my token satisfy it\"\n * answer.\n */\nexport function loadAccessServiceToken(): AccessServiceToken | undefined {\n  try {\n    const content = readFileSync(configFile(), \"utf-8\");\n    const match = content.match(/^access_service_token:\\s*(.+)$/m);\n    if (!match?.[1]) return undefined;\n    const parsed = JSON.parse(match[1].trim()) as Record<string, unknown>;\n    const clientId = parsed.client_id;\n    const clientSecret = parsed.client_secret;\n    if (typeof clientId !== \"string\" || typeof clientSecret !== \"string\") return undefined;\n    if (!clientId || !clientSecret) return undefined;\n    return { clientId, clientSecret };\n  } catch (err) {\n    if ((err as NodeJS.ErrnoException).code !== \"ENOENT\") {\n      // The value is never logged, only the fact that it could not be read.\n      getLogger(\"auth\").warn(\"Ignoring unreadable access_service_token in server.yaml\", {\n        event: \"config.access_service_token_parse_failed\",\n      });\n    }\n    return undefined;\n  }\n}\n\nexport function loadFeatureFlags(): FeatureFlagValues {\n  try {\n    const content = readFileSync(configFile(), \"utf-8\");\n    const match = content.match(/^feature_flags:\\s*(.+)$/m);\n    if (!match?.[1]) return {};\n    return validateFeatureFlagValues(JSON.parse(match[1].trim()));\n  } catch (err) {\n    if ((err as NodeJS.ErrnoException).code !== \"ENOENT\") {\n      getLogger(\"auth\").warn(`Ignoring unreadable feature_flags in server.yaml: ${String(err)}`, {\n        event: \"config.feature_flags_parse_failed\",\n      });\n    }\n    return {};\n  }\n}\n\nexport type PublicUrlValidation = { ok: true; normalized: string } | { ok: false; error: string };\n\nexport function validatePublicUrl(raw: string): PublicUrlValidation {\n  let parsed: URL;\n  try {\n    parsed = new URL(raw);\n  } catch {\n    return { ok: false, error: `Invalid URL: ${raw}` };\n  }\n  const localHosts = new Set([\"localhost\", \"127.0.0.1\", \"::1\"]);\n  if (parsed.protocol === \"https:\") {\n    return { ok: true, normalized: stripTrailingSlash(parsed.toString()) };\n  }\n  if (parsed.protocol === \"http:\" && localHosts.has(parsed.hostname)) {\n    return { ok: true, normalized: stripTrailingSlash(parsed.toString()) };\n  }\n  return {\n    ok: false,\n    error: `publicUrl must be https:// (got ${parsed.protocol}//). Plain http is only allowed for localhost.`,\n  };\n}\n\nfunction stripTrailingSlash(url: string): string {\n  return url.endsWith(\"/\") ? url.slice(0, -1) : url;\n}\n\nexport function setApiKey(key: string): void {\n  const file = configFile();\n  mkdirSync(configDir(), { recursive: true });\n\n  let content = \"\";\n  try {\n    content = readFileSync(file, \"utf-8\");\n  } catch (err) {\n    if ((err as NodeJS.ErrnoException).code !== \"ENOENT\") throw err;\n    // file does not exist; we'll create it\n  }\n\n  const apiKeyLine = `api_key: ${key}`;\n  let updated: string;\n  if (/^api_key:\\s*.+$/m.test(content)) {\n    updated = content.replace(/^api_key:\\s*.+$/m, apiKeyLine);\n  } else if (content.length === 0 || content.endsWith(\"\\n\")) {\n    updated = `${content}${apiKeyLine}\\n`;\n  } else {\n    updated = `${content}\\n${apiKeyLine}\\n`;\n  }\n\n  const tmpFile = `${file}.tmp`;\n  writeFileSync(tmpFile, updated, { encoding: \"utf-8\", mode: 0o600 });\n  chmodSync(tmpFile, 0o600);\n  renameSync(tmpFile, file);\n}\n","'use strict';\n\nconst ALIAS = Symbol.for('yaml.alias');\nconst DOC = Symbol.for('yaml.document');\nconst MAP = Symbol.for('yaml.map');\nconst PAIR = Symbol.for('yaml.pair');\nconst SCALAR = Symbol.for('yaml.scalar');\nconst SEQ = Symbol.for('yaml.seq');\nconst NODE_TYPE = Symbol.for('yaml.node.type');\nconst isAlias = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === ALIAS;\nconst isDocument = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === DOC;\nconst isMap = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === MAP;\nconst isPair = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === PAIR;\nconst isScalar = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SCALAR;\nconst isSeq = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SEQ;\nfunction isCollection(node) {\n    if (node && typeof node === 'object')\n        switch (node[NODE_TYPE]) {\n            case MAP:\n            case SEQ:\n                return true;\n        }\n    return false;\n}\nfunction isNode(node) {\n    if (node && typeof node === 'object')\n        switch (node[NODE_TYPE]) {\n            case ALIAS:\n            case MAP:\n            case SCALAR:\n            case SEQ:\n                return true;\n        }\n    return false;\n}\nconst hasAnchor = (node) => (isScalar(node) || isCollection(node)) && !!node.anchor;\n\nexports.ALIAS = ALIAS;\nexports.DOC = DOC;\nexports.MAP = MAP;\nexports.NODE_TYPE = NODE_TYPE;\nexports.PAIR = PAIR;\nexports.SCALAR = SCALAR;\nexports.SEQ = SEQ;\nexports.hasAnchor = hasAnchor;\nexports.isAlias = isAlias;\nexports.isCollection = isCollection;\nexports.isDocument = isDocument;\nexports.isMap = isMap;\nexports.isNode = isNode;\nexports.isPair = isPair;\nexports.isScalar = isScalar;\nexports.isSeq = isSeq;\n","'use strict';\n\nvar identity = require('./nodes/identity.js');\n\nconst BREAK = Symbol('break visit');\nconst SKIP = Symbol('skip children');\nconst REMOVE = Symbol('remove node');\n/**\n * Apply a visitor to an AST node or document.\n *\n * Walks through the tree (depth-first) starting from `node`, calling a\n * `visitor` function with three arguments:\n *   - `key`: For sequence values and map `Pair`, the node's index in the\n *     collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.\n *     `null` for the root node.\n *   - `node`: The current node.\n *   - `path`: The ancestry of the current node.\n *\n * The return value of the visitor may be used to control the traversal:\n *   - `undefined` (default): Do nothing and continue\n *   - `visit.SKIP`: Do not visit the children of this node, continue with next\n *     sibling\n *   - `visit.BREAK`: Terminate traversal completely\n *   - `visit.REMOVE`: Remove the current node, then continue with the next one\n *   - `Node`: Replace the current node, then continue by visiting it\n *   - `number`: While iterating the items of a sequence or map, set the index\n *     of the next step. This is useful especially if the index of the current\n *     node has changed.\n *\n * If `visitor` is a single function, it will be called with all values\n * encountered in the tree, including e.g. `null` values. Alternatively,\n * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,\n * `Alias` and `Scalar` node. To define the same visitor function for more than\n * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)\n * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most\n * specific defined one will be used for each node.\n */\nfunction visit(node, visitor) {\n    const visitor_ = initVisitor(visitor);\n    if (identity.isDocument(node)) {\n        const cd = visit_(null, node.contents, visitor_, Object.freeze([node]));\n        if (cd === REMOVE)\n            node.contents = null;\n    }\n    else\n        visit_(null, node, visitor_, Object.freeze([]));\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisit.BREAK = BREAK;\n/** Do not visit the children of the current node */\nvisit.SKIP = SKIP;\n/** Remove the current node */\nvisit.REMOVE = REMOVE;\nfunction visit_(key, node, visitor, path) {\n    const ctrl = callVisitor(key, node, visitor, path);\n    if (identity.isNode(ctrl) || identity.isPair(ctrl)) {\n        replaceNode(key, path, ctrl);\n        return visit_(key, ctrl, visitor, path);\n    }\n    if (typeof ctrl !== 'symbol') {\n        if (identity.isCollection(node)) {\n            path = Object.freeze(path.concat(node));\n            for (let i = 0; i < node.items.length; ++i) {\n                const ci = visit_(i, node.items[i], visitor, path);\n                if (typeof ci === 'number')\n                    i = ci - 1;\n                else if (ci === BREAK)\n                    return BREAK;\n                else if (ci === REMOVE) {\n                    node.items.splice(i, 1);\n                    i -= 1;\n                }\n            }\n        }\n        else if (identity.isPair(node)) {\n            path = Object.freeze(path.concat(node));\n            const ck = visit_('key', node.key, visitor, path);\n            if (ck === BREAK)\n                return BREAK;\n            else if (ck === REMOVE)\n                node.key = null;\n            const cv = visit_('value', node.value, visitor, path);\n            if (cv === BREAK)\n                return BREAK;\n            else if (cv === REMOVE)\n                node.value = null;\n        }\n    }\n    return ctrl;\n}\n/**\n * Apply an async visitor to an AST node or document.\n *\n * Walks through the tree (depth-first) starting from `node`, calling a\n * `visitor` function with three arguments:\n *   - `key`: For sequence values and map `Pair`, the node's index in the\n *     collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.\n *     `null` for the root node.\n *   - `node`: The current node.\n *   - `path`: The ancestry of the current node.\n *\n * The return value of the visitor may be used to control the traversal:\n *   - `Promise`: Must resolve to one of the following values\n *   - `undefined` (default): Do nothing and continue\n *   - `visit.SKIP`: Do not visit the children of this node, continue with next\n *     sibling\n *   - `visit.BREAK`: Terminate traversal completely\n *   - `visit.REMOVE`: Remove the current node, then continue with the next one\n *   - `Node`: Replace the current node, then continue by visiting it\n *   - `number`: While iterating the items of a sequence or map, set the index\n *     of the next step. This is useful especially if the index of the current\n *     node has changed.\n *\n * If `visitor` is a single function, it will be called with all values\n * encountered in the tree, including e.g. `null` values. Alternatively,\n * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,\n * `Alias` and `Scalar` node. To define the same visitor function for more than\n * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)\n * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most\n * specific defined one will be used for each node.\n */\nasync function visitAsync(node, visitor) {\n    const visitor_ = initVisitor(visitor);\n    if (identity.isDocument(node)) {\n        const cd = await visitAsync_(null, node.contents, visitor_, Object.freeze([node]));\n        if (cd === REMOVE)\n            node.contents = null;\n    }\n    else\n        await visitAsync_(null, node, visitor_, Object.freeze([]));\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisitAsync.BREAK = BREAK;\n/** Do not visit the children of the current node */\nvisitAsync.SKIP = SKIP;\n/** Remove the current node */\nvisitAsync.REMOVE = REMOVE;\nasync function visitAsync_(key, node, visitor, path) {\n    const ctrl = await callVisitor(key, node, visitor, path);\n    if (identity.isNode(ctrl) || identity.isPair(ctrl)) {\n        replaceNode(key, path, ctrl);\n        return visitAsync_(key, ctrl, visitor, path);\n    }\n    if (typeof ctrl !== 'symbol') {\n        if (identity.isCollection(node)) {\n            path = Object.freeze(path.concat(node));\n            for (let i = 0; i < node.items.length; ++i) {\n                const ci = await visitAsync_(i, node.items[i], visitor, path);\n                if (typeof ci === 'number')\n                    i = ci - 1;\n                else if (ci === BREAK)\n                    return BREAK;\n                else if (ci === REMOVE) {\n                    node.items.splice(i, 1);\n                    i -= 1;\n                }\n            }\n        }\n        else if (identity.isPair(node)) {\n            path = Object.freeze(path.concat(node));\n            const ck = await visitAsync_('key', node.key, visitor, path);\n            if (ck === BREAK)\n                return BREAK;\n            else if (ck === REMOVE)\n                node.key = null;\n            const cv = await visitAsync_('value', node.value, visitor, path);\n            if (cv === BREAK)\n                return BREAK;\n            else if (cv === REMOVE)\n                node.value = null;\n        }\n    }\n    return ctrl;\n}\nfunction initVisitor(visitor) {\n    if (typeof visitor === 'object' &&\n        (visitor.Collection || visitor.Node || visitor.Value)) {\n        return Object.assign({\n            Alias: visitor.Node,\n            Map: visitor.Node,\n            Scalar: visitor.Node,\n            Seq: visitor.Node\n        }, visitor.Value && {\n            Map: visitor.Value,\n            Scalar: visitor.Value,\n            Seq: visitor.Value\n        }, visitor.Collection && {\n            Map: visitor.Collection,\n            Seq: visitor.Collection\n        }, visitor);\n    }\n    return visitor;\n}\nfunction callVisitor(key, node, visitor, path) {\n    if (typeof visitor === 'function')\n        return visitor(key, node, path);\n    if (identity.isMap(node))\n        return visitor.Map?.(key, node, path);\n    if (identity.isSeq(node))\n        return visitor.Seq?.(key, node, path);\n    if (identity.isPair(node))\n        return visitor.Pair?.(key, node, path);\n    if (identity.isScalar(node))\n        return visitor.Scalar?.(key, node, path);\n    if (identity.isAlias(node))\n        return visitor.Alias?.(key, node, path);\n    return undefined;\n}\nfunction replaceNode(key, path, node) {\n    const parent = path[path.length - 1];\n    if (identity.isCollection(parent)) {\n        parent.items[key] = node;\n    }\n    else if (identity.isPair(parent)) {\n        if (key === 'key')\n            parent.key = node;\n        else\n            parent.value = node;\n    }\n    else if (identity.isDocument(parent)) {\n        parent.contents = node;\n    }\n    else {\n        const pt = identity.isAlias(parent) ? 'alias' : 'scalar';\n        throw new Error(`Cannot replace node with ${pt} parent`);\n    }\n}\n\nexports.visit = visit;\nexports.visitAsync = visitAsync;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar visit = require('../visit.js');\n\nconst escapeChars = {\n    '!': '%21',\n    ',': '%2C',\n    '[': '%5B',\n    ']': '%5D',\n    '{': '%7B',\n    '}': '%7D'\n};\nconst escapeTagName = (tn) => tn.replace(/[!,[\\]{}]/g, ch => escapeChars[ch]);\nclass Directives {\n    constructor(yaml, tags) {\n        /**\n         * The directives-end/doc-start marker `---`. If `null`, a marker may still be\n         * included in the document's stringified representation.\n         */\n        this.docStart = null;\n        /** The doc-end marker `...`.  */\n        this.docEnd = false;\n        this.yaml = Object.assign({}, Directives.defaultYaml, yaml);\n        this.tags = Object.assign({}, Directives.defaultTags, tags);\n    }\n    clone() {\n        const copy = new Directives(this.yaml, this.tags);\n        copy.docStart = this.docStart;\n        return copy;\n    }\n    /**\n     * During parsing, get a Directives instance for the current document and\n     * update the stream state according to the current version's spec.\n     */\n    atDocument() {\n        const res = new Directives(this.yaml, this.tags);\n        switch (this.yaml.version) {\n            case '1.1':\n                this.atNextDocument = true;\n                break;\n            case '1.2':\n                this.atNextDocument = false;\n                this.yaml = {\n                    explicit: Directives.defaultYaml.explicit,\n                    version: '1.2'\n                };\n                this.tags = Object.assign({}, Directives.defaultTags);\n                break;\n        }\n        return res;\n    }\n    /**\n     * @param onError - May be called even if the action was successful\n     * @returns `true` on success\n     */\n    add(line, onError) {\n        if (this.atNextDocument) {\n            this.yaml = { explicit: Directives.defaultYaml.explicit, version: '1.1' };\n            this.tags = Object.assign({}, Directives.defaultTags);\n            this.atNextDocument = false;\n        }\n        const parts = line.trim().split(/[ \\t]+/);\n        const name = parts.shift();\n        switch (name) {\n            case '%TAG': {\n                if (parts.length !== 2) {\n                    onError(0, '%TAG directive should contain exactly two parts');\n                    if (parts.length < 2)\n                        return false;\n                }\n                const [handle, prefix] = parts;\n                this.tags[handle] = prefix;\n                return true;\n            }\n            case '%YAML': {\n                this.yaml.explicit = true;\n                if (parts.length !== 1) {\n                    onError(0, '%YAML directive should contain exactly one part');\n                    return false;\n                }\n                const [version] = parts;\n                if (version === '1.1' || version === '1.2') {\n                    this.yaml.version = version;\n                    return true;\n                }\n                else {\n                    const isValid = /^\\d+\\.\\d+$/.test(version);\n                    onError(6, `Unsupported YAML version ${version}`, isValid);\n                    return false;\n                }\n            }\n            default:\n                onError(0, `Unknown directive ${name}`, true);\n                return false;\n        }\n    }\n    /**\n     * Resolves a tag, matching handles to those defined in %TAG directives.\n     *\n     * @returns Resolved tag, which may also be the non-specific tag `'!'` or a\n     *   `'!local'` tag, or `null` if unresolvable.\n     */\n    tagName(source, onError) {\n        if (source === '!')\n            return '!'; // non-specific tag\n        if (source[0] !== '!') {\n            onError(`Not a valid tag: ${source}`);\n            return null;\n        }\n        if (source[1] === '<') {\n            const verbatim = source.slice(2, -1);\n            if (verbatim === '!' || verbatim === '!!') {\n                onError(`Verbatim tags aren't resolved, so ${source} is invalid.`);\n                return null;\n            }\n            if (source[source.length - 1] !== '>')\n                onError('Verbatim tags must end with a >');\n            return verbatim;\n        }\n        const [, handle, suffix] = source.match(/^(.*!)([^!]*)$/s);\n        if (!suffix)\n            onError(`The ${source} tag has no suffix`);\n        const prefix = this.tags[handle];\n        if (prefix) {\n            try {\n                return prefix + decodeURIComponent(suffix);\n            }\n            catch (error) {\n                onError(String(error));\n                return null;\n            }\n        }\n        if (handle === '!')\n            return source; // local tag\n        onError(`Could not resolve tag: ${source}`);\n        return null;\n    }\n    /**\n     * Given a fully resolved tag, returns its printable string form,\n     * taking into account current tag prefixes and defaults.\n     */\n    tagString(tag) {\n        for (const [handle, prefix] of Object.entries(this.tags)) {\n            if (tag.startsWith(prefix))\n                return handle + escapeTagName(tag.substring(prefix.length));\n        }\n        return tag[0] === '!' ? tag : `!<${tag}>`;\n    }\n    toString(doc) {\n        const lines = this.yaml.explicit\n            ? [`%YAML ${this.yaml.version || '1.2'}`]\n            : [];\n        const tagEntries = Object.entries(this.tags);\n        let tagNames;\n        if (doc && tagEntries.length > 0 && identity.isNode(doc.contents)) {\n            const tags = {};\n            visit.visit(doc.contents, (_key, node) => {\n                if (identity.isNode(node) && node.tag)\n                    tags[node.tag] = true;\n            });\n            tagNames = Object.keys(tags);\n        }\n        else\n            tagNames = [];\n        for (const [handle, prefix] of tagEntries) {\n            if (handle === '!!' && prefix === 'tag:yaml.org,2002:')\n                continue;\n            if (!doc || tagNames.some(tn => tn.startsWith(prefix)))\n                lines.push(`%TAG ${handle} ${prefix}`);\n        }\n        return lines.join('\\n');\n    }\n}\nDirectives.defaultYaml = { explicit: false, version: '1.2' };\nDirectives.defaultTags = { '!!': 'tag:yaml.org,2002:' };\n\nexports.Directives = Directives;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar visit = require('../visit.js');\n\n/**\n * Verify that the input string is a valid anchor.\n *\n * Will throw on errors.\n */\nfunction anchorIsValid(anchor) {\n    if (/[\\x00-\\x19\\s,[\\]{}]/.test(anchor)) {\n        const sa = JSON.stringify(anchor);\n        const msg = `Anchor must not contain whitespace or control characters: ${sa}`;\n        throw new Error(msg);\n    }\n    return true;\n}\nfunction anchorNames(root) {\n    const anchors = new Set();\n    visit.visit(root, {\n        Value(_key, node) {\n            if (node.anchor)\n                anchors.add(node.anchor);\n        }\n    });\n    return anchors;\n}\n/** Find a new anchor name with the given `prefix` and a one-indexed suffix. */\nfunction findNewAnchor(prefix, exclude) {\n    for (let i = 1; true; ++i) {\n        const name = `${prefix}${i}`;\n        if (!exclude.has(name))\n            return name;\n    }\n}\nfunction createNodeAnchors(doc, prefix) {\n    const aliasObjects = [];\n    const sourceObjects = new Map();\n    let prevAnchors = null;\n    return {\n        onAnchor: (source) => {\n            aliasObjects.push(source);\n            prevAnchors ?? (prevAnchors = anchorNames(doc));\n            const anchor = findNewAnchor(prefix, prevAnchors);\n            prevAnchors.add(anchor);\n            return anchor;\n        },\n        /**\n         * With circular references, the source node is only resolved after all\n         * of its child nodes are. This is why anchors are set only after all of\n         * the nodes have been created.\n         */\n        setAnchors: () => {\n            for (const source of aliasObjects) {\n                const ref = sourceObjects.get(source);\n                if (typeof ref === 'object' &&\n                    ref.anchor &&\n                    (identity.isScalar(ref.node) || identity.isCollection(ref.node))) {\n                    ref.node.anchor = ref.anchor;\n                }\n                else {\n                    const error = new Error('Failed to resolve repeated object (this should not happen)');\n                    error.source = source;\n                    throw error;\n                }\n            }\n        },\n        sourceObjects\n    };\n}\n\nexports.anchorIsValid = anchorIsValid;\nexports.anchorNames = anchorNames;\nexports.createNodeAnchors = createNodeAnchors;\nexports.findNewAnchor = findNewAnchor;\n","'use strict';\n\n/**\n * Applies the JSON.parse reviver algorithm as defined in the ECMA-262 spec,\n * in section 24.5.1.1 \"Runtime Semantics: InternalizeJSONProperty\" of the\n * 2021 edition: https://tc39.es/ecma262/#sec-json.parse\n *\n * Includes extensions for handling Map and Set objects.\n */\nfunction applyReviver(reviver, obj, key, val) {\n    if (val && typeof val === 'object') {\n        if (Array.isArray(val)) {\n            for (let i = 0, len = val.length; i < len; ++i) {\n                const v0 = val[i];\n                const v1 = applyReviver(reviver, val, String(i), v0);\n                // eslint-disable-next-line @typescript-eslint/no-array-delete\n                if (v1 === undefined)\n                    delete val[i];\n                else if (v1 !== v0)\n                    val[i] = v1;\n            }\n        }\n        else if (val instanceof Map) {\n            for (const k of Array.from(val.keys())) {\n                const v0 = val.get(k);\n                const v1 = applyReviver(reviver, val, k, v0);\n                if (v1 === undefined)\n                    val.delete(k);\n                else if (v1 !== v0)\n                    val.set(k, v1);\n            }\n        }\n        else if (val instanceof Set) {\n            for (const v0 of Array.from(val)) {\n                const v1 = applyReviver(reviver, val, v0, v0);\n                if (v1 === undefined)\n                    val.delete(v0);\n                else if (v1 !== v0) {\n                    val.delete(v0);\n                    val.add(v1);\n                }\n            }\n        }\n        else {\n            for (const [k, v0] of Object.entries(val)) {\n                const v1 = applyReviver(reviver, val, k, v0);\n                if (v1 === undefined)\n                    delete val[k];\n                else if (v1 !== v0)\n                    val[k] = v1;\n            }\n        }\n    }\n    return reviver.call(obj, key, val);\n}\n\nexports.applyReviver = applyReviver;\n","'use strict';\n\nvar identity = require('./identity.js');\n\n/**\n * Recursively convert any node or its contents to native JavaScript\n *\n * @param value - The input value\n * @param arg - If `value` defines a `toJSON()` method, use this\n *   as its first argument\n * @param ctx - Conversion context, originally set in Document#toJS(). If\n *   `{ keep: true }` is not set, output should be suitable for JSON\n *   stringification.\n */\nfunction toJS(value, arg, ctx) {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n    if (Array.isArray(value))\n        return value.map((v, i) => toJS(v, String(i), ctx));\n    if (value && typeof value.toJSON === 'function') {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n        if (!ctx || !identity.hasAnchor(value))\n            return value.toJSON(arg, ctx);\n        const data = { aliasCount: 0, count: 1, res: undefined };\n        ctx.anchors.set(value, data);\n        ctx.onCreate = res => {\n            data.res = res;\n            delete ctx.onCreate;\n        };\n        const res = value.toJSON(arg, ctx);\n        if (ctx.onCreate)\n            ctx.onCreate(res);\n        return res;\n    }\n    if (typeof value === 'bigint' && !ctx?.keep)\n        return Number(value);\n    return value;\n}\n\nexports.toJS = toJS;\n","'use strict';\n\nvar applyReviver = require('../doc/applyReviver.js');\nvar identity = require('./identity.js');\nvar toJS = require('./toJS.js');\n\nclass NodeBase {\n    constructor(type) {\n        Object.defineProperty(this, identity.NODE_TYPE, { value: type });\n    }\n    /** Create a copy of this node.  */\n    clone() {\n        const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));\n        if (this.range)\n            copy.range = this.range.slice();\n        return copy;\n    }\n    /** A plain JavaScript representation of this node. */\n    toJS(doc, { mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {\n        if (!identity.isDocument(doc))\n            throw new TypeError('A document argument is required');\n        const ctx = {\n            anchors: new Map(),\n            doc,\n            keep: true,\n            mapAsMap: mapAsMap === true,\n            mapKeyWarned: false,\n            maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100\n        };\n        const res = toJS.toJS(this, '', ctx);\n        if (typeof onAnchor === 'function')\n            for (const { count, res } of ctx.anchors.values())\n                onAnchor(res, count);\n        return typeof reviver === 'function'\n            ? applyReviver.applyReviver(reviver, { '': res }, '', res)\n            : res;\n    }\n}\n\nexports.NodeBase = NodeBase;\n","'use strict';\n\nvar anchors = require('../doc/anchors.js');\nvar visit = require('../visit.js');\nvar identity = require('./identity.js');\nvar Node = require('./Node.js');\nvar toJS = require('./toJS.js');\n\nclass Alias extends Node.NodeBase {\n    constructor(source) {\n        super(identity.ALIAS);\n        this.source = source;\n        Object.defineProperty(this, 'tag', {\n            set() {\n                throw new Error('Alias nodes cannot have tags');\n            }\n        });\n    }\n    /**\n     * Resolve the value of this alias within `doc`, finding the last\n     * instance of the `source` anchor before this node.\n     */\n    resolve(doc, ctx) {\n        if (ctx?.maxAliasCount === 0)\n            throw new ReferenceError('Alias resolution is disabled');\n        let nodes;\n        if (ctx?.aliasResolveCache) {\n            nodes = ctx.aliasResolveCache;\n        }\n        else {\n            nodes = [];\n            visit.visit(doc, {\n                Node: (_key, node) => {\n                    if (identity.isAlias(node) || identity.hasAnchor(node))\n                        nodes.push(node);\n                }\n            });\n            if (ctx)\n                ctx.aliasResolveCache = nodes;\n        }\n        let found = undefined;\n        for (const node of nodes) {\n            if (node === this)\n                break;\n            if (node.anchor === this.source)\n                found = node;\n        }\n        if (found && ctx) {\n            const { anchors, doc, maxAliasCount } = ctx;\n            let data = anchors.get(found);\n            if (!data) {\n                // Resolve anchors for Node.prototype.toJS()\n                toJS.toJS(found, null, ctx);\n                data = anchors.get(found);\n            }\n            /* istanbul ignore if */\n            if (data?.res === undefined) {\n                const msg = 'This should not happen: Alias anchor was not resolved?';\n                throw new ReferenceError(msg);\n            }\n            if (maxAliasCount >= 0) {\n                data.count += 1;\n                if (data.aliasCount === 0)\n                    data.aliasCount = getAliasCount(doc, found, anchors);\n                if (data.count * data.aliasCount > maxAliasCount) {\n                    const msg = 'Excessive alias count indicates a resource exhaustion attack';\n                    throw new ReferenceError(msg);\n                }\n            }\n        }\n        return found;\n    }\n    toJSON(_arg, ctx) {\n        if (!ctx)\n            return { source: this.source };\n        const source = this.resolve(ctx.doc, ctx);\n        if (!source) {\n            const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;\n            throw new ReferenceError(msg);\n        }\n        return ctx.anchors.get(source).res;\n    }\n    toString(ctx, _onComment, _onChompKeep) {\n        const src = `*${this.source}`;\n        if (ctx) {\n            anchors.anchorIsValid(this.source);\n            if (ctx.options.verifyAliasOrder && !ctx.anchors.has(this.source)) {\n                const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;\n                throw new Error(msg);\n            }\n            if (ctx.implicitKey)\n                return `${src} `;\n        }\n        return src;\n    }\n}\nfunction getAliasCount(doc, node, anchors) {\n    if (identity.isAlias(node)) {\n        const source = node.resolve(doc);\n        const anchor = anchors && source && anchors.get(source);\n        return anchor ? anchor.count * anchor.aliasCount : 0;\n    }\n    else if (identity.isCollection(node)) {\n        let count = 0;\n        for (const item of node.items) {\n            const c = getAliasCount(doc, item, anchors);\n            if (c > count)\n                count = c;\n        }\n        return count;\n    }\n    else if (identity.isPair(node)) {\n        const kc = getAliasCount(doc, node.key, anchors);\n        const vc = getAliasCount(doc, node.value, anchors);\n        return Math.max(kc, vc);\n    }\n    return 1;\n}\n\nexports.Alias = Alias;\n","'use strict';\n\nvar identity = require('./identity.js');\nvar Node = require('./Node.js');\nvar toJS = require('./toJS.js');\n\nconst isScalarValue = (value) => !value || (typeof value !== 'function' && typeof value !== 'object');\nclass Scalar extends Node.NodeBase {\n    constructor(value) {\n        super(identity.SCALAR);\n        this.value = value;\n    }\n    toJSON(arg, ctx) {\n        return ctx?.keep ? this.value : toJS.toJS(this.value, arg, ctx);\n    }\n    toString() {\n        return String(this.value);\n    }\n}\nScalar.BLOCK_FOLDED = 'BLOCK_FOLDED';\nScalar.BLOCK_LITERAL = 'BLOCK_LITERAL';\nScalar.PLAIN = 'PLAIN';\nScalar.QUOTE_DOUBLE = 'QUOTE_DOUBLE';\nScalar.QUOTE_SINGLE = 'QUOTE_SINGLE';\n\nexports.Scalar = Scalar;\nexports.isScalarValue = isScalarValue;\n","'use strict';\n\nvar Alias = require('../nodes/Alias.js');\nvar identity = require('../nodes/identity.js');\nvar Scalar = require('../nodes/Scalar.js');\n\nconst defaultTagPrefix = 'tag:yaml.org,2002:';\nfunction findTagObject(value, tagName, tags) {\n    if (tagName) {\n        const match = tags.filter(t => t.tag === tagName);\n        const tagObj = match.find(t => !t.format) ?? match[0];\n        if (!tagObj)\n            throw new Error(`Tag ${tagName} not found`);\n        return tagObj;\n    }\n    return tags.find(t => t.identify?.(value) && !t.format);\n}\nfunction createNode(value, tagName, ctx) {\n    if (identity.isDocument(value))\n        value = value.contents;\n    if (identity.isNode(value))\n        return value;\n    if (identity.isPair(value)) {\n        const map = ctx.schema[identity.MAP].createNode?.(ctx.schema, null, ctx);\n        map.items.push(value);\n        return map;\n    }\n    if (value instanceof String ||\n        value instanceof Number ||\n        value instanceof Boolean ||\n        (typeof BigInt !== 'undefined' && value instanceof BigInt) // not supported everywhere\n    ) {\n        // https://tc39.es/ecma262/#sec-serializejsonproperty\n        value = value.valueOf();\n    }\n    const { aliasDuplicateObjects, onAnchor, onTagObj, schema, sourceObjects } = ctx;\n    // Detect duplicate references to the same object & use Alias nodes for all\n    // after first. The `ref` wrapper allows for circular references to resolve.\n    let ref = undefined;\n    if (aliasDuplicateObjects && value && typeof value === 'object') {\n        ref = sourceObjects.get(value);\n        if (ref) {\n            ref.anchor ?? (ref.anchor = onAnchor(value));\n            return new Alias.Alias(ref.anchor);\n        }\n        else {\n            ref = { anchor: null, node: null };\n            sourceObjects.set(value, ref);\n        }\n    }\n    if (tagName?.startsWith('!!'))\n        tagName = defaultTagPrefix + tagName.slice(2);\n    let tagObj = findTagObject(value, tagName, schema.tags);\n    if (!tagObj) {\n        if (value && typeof value.toJSON === 'function') {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n            value = value.toJSON();\n        }\n        if (!value || typeof value !== 'object') {\n            const node = new Scalar.Scalar(value);\n            if (ref)\n                ref.node = node;\n            return node;\n        }\n        tagObj =\n            value instanceof Map\n                ? schema[identity.MAP]\n                : Symbol.iterator in Object(value)\n                    ? schema[identity.SEQ]\n                    : schema[identity.MAP];\n    }\n    if (onTagObj) {\n        onTagObj(tagObj);\n        delete ctx.onTagObj;\n    }\n    const node = tagObj?.createNode\n        ? tagObj.createNode(ctx.schema, value, ctx)\n        : typeof tagObj?.nodeClass?.from === 'function'\n            ? tagObj.nodeClass.from(ctx.schema, value, ctx)\n            : new Scalar.Scalar(value);\n    if (tagName)\n        node.tag = tagName;\n    else if (!tagObj.default)\n        node.tag = tagObj.tag;\n    if (ref)\n        ref.node = node;\n    return node;\n}\n\nexports.createNode = createNode;\n","'use strict';\n\nvar createNode = require('../doc/createNode.js');\nvar identity = require('./identity.js');\nvar Node = require('./Node.js');\n\nfunction collectionFromPath(schema, path, value) {\n    let v = value;\n    for (let i = path.length - 1; i >= 0; --i) {\n        const k = path[i];\n        if (typeof k === 'number' && Number.isInteger(k) && k >= 0) {\n            const a = [];\n            a[k] = v;\n            v = a;\n        }\n        else {\n            v = new Map([[k, v]]);\n        }\n    }\n    return createNode.createNode(v, undefined, {\n        aliasDuplicateObjects: false,\n        keepUndefined: false,\n        onAnchor: () => {\n            throw new Error('This should not happen, please report a bug.');\n        },\n        schema,\n        sourceObjects: new Map()\n    });\n}\n// Type guard is intentionally a little wrong so as to be more useful,\n// as it does not cover untypable empty non-string iterables (e.g. []).\nconst isEmptyPath = (path) => path == null ||\n    (typeof path === 'object' && !!path[Symbol.iterator]().next().done);\nclass Collection extends Node.NodeBase {\n    constructor(type, schema) {\n        super(type);\n        Object.defineProperty(this, 'schema', {\n            value: schema,\n            configurable: true,\n            enumerable: false,\n            writable: true\n        });\n    }\n    /**\n     * Create a copy of this collection.\n     *\n     * @param schema - If defined, overwrites the original's schema\n     */\n    clone(schema) {\n        const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));\n        if (schema)\n            copy.schema = schema;\n        copy.items = copy.items.map(it => identity.isNode(it) || identity.isPair(it) ? it.clone(schema) : it);\n        if (this.range)\n            copy.range = this.range.slice();\n        return copy;\n    }\n    /**\n     * Adds a value to the collection. For `!!map` and `!!omap` the value must\n     * be a Pair instance or a `{ key, value }` object, which may not have a key\n     * that already exists in the map.\n     */\n    addIn(path, value) {\n        if (isEmptyPath(path))\n            this.add(value);\n        else {\n            const [key, ...rest] = path;\n            const node = this.get(key, true);\n            if (identity.isCollection(node))\n                node.addIn(rest, value);\n            else if (node === undefined && this.schema)\n                this.set(key, collectionFromPath(this.schema, rest, value));\n            else\n                throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n        }\n    }\n    /**\n     * Removes a value from the collection.\n     * @returns `true` if the item was found and removed.\n     */\n    deleteIn(path) {\n        const [key, ...rest] = path;\n        if (rest.length === 0)\n            return this.delete(key);\n        const node = this.get(key, true);\n        if (identity.isCollection(node))\n            return node.deleteIn(rest);\n        else\n            throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n    }\n    /**\n     * Returns item at `key`, or `undefined` if not found. By default unwraps\n     * scalar values from their surrounding node; to disable set `keepScalar` to\n     * `true` (collections are always returned intact).\n     */\n    getIn(path, keepScalar) {\n        const [key, ...rest] = path;\n        const node = this.get(key, true);\n        if (rest.length === 0)\n            return !keepScalar && identity.isScalar(node) ? node.value : node;\n        else\n            return identity.isCollection(node) ? node.getIn(rest, keepScalar) : undefined;\n    }\n    hasAllNullValues(allowScalar) {\n        return this.items.every(node => {\n            if (!identity.isPair(node))\n                return false;\n            const n = node.value;\n            return (n == null ||\n                (allowScalar &&\n                    identity.isScalar(n) &&\n                    n.value == null &&\n                    !n.commentBefore &&\n                    !n.comment &&\n                    !n.tag));\n        });\n    }\n    /**\n     * Checks if the collection includes a value with the key `key`.\n     */\n    hasIn(path) {\n        const [key, ...rest] = path;\n        if (rest.length === 0)\n            return this.has(key);\n        const node = this.get(key, true);\n        return identity.isCollection(node) ? node.hasIn(rest) : false;\n    }\n    /**\n     * Sets a value in this collection. For `!!set`, `value` needs to be a\n     * boolean to add/remove the item from the set.\n     */\n    setIn(path, value) {\n        const [key, ...rest] = path;\n        if (rest.length === 0) {\n            this.set(key, value);\n        }\n        else {\n            const node = this.get(key, true);\n            if (identity.isCollection(node))\n                node.setIn(rest, value);\n            else if (node === undefined && this.schema)\n                this.set(key, collectionFromPath(this.schema, rest, value));\n            else\n                throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n        }\n    }\n}\n\nexports.Collection = Collection;\nexports.collectionFromPath = collectionFromPath;\nexports.isEmptyPath = isEmptyPath;\n","'use strict';\n\n/**\n * Stringifies a comment.\n *\n * Empty comment lines are left empty,\n * lines consisting of a single space are replaced by `#`,\n * and all other lines are prefixed with a `#`.\n */\nconst stringifyComment = (str) => str.replace(/^(?!$)(?: $)?/gm, '#');\nfunction indentComment(comment, indent) {\n    if (/^\\n+$/.test(comment))\n        return comment.substring(1);\n    return indent ? comment.replace(/^(?! *$)/gm, indent) : comment;\n}\nconst lineComment = (str, indent, comment) => str.endsWith('\\n')\n    ? indentComment(comment, indent)\n    : comment.includes('\\n')\n        ? '\\n' + indentComment(comment, indent)\n        : (str.endsWith(' ') ? '' : ' ') + comment;\n\nexports.indentComment = indentComment;\nexports.lineComment = lineComment;\nexports.stringifyComment = stringifyComment;\n","'use strict';\n\nconst FOLD_FLOW = 'flow';\nconst FOLD_BLOCK = 'block';\nconst FOLD_QUOTED = 'quoted';\n/**\n * Tries to keep input at up to `lineWidth` characters, splitting only on spaces\n * not followed by newlines or spaces unless `mode` is `'quoted'`. Lines are\n * terminated with `\\n` and started with `indent`.\n */\nfunction foldFlowLines(text, indent, mode = 'flow', { indentAtStart, lineWidth = 80, minContentWidth = 20, onFold, onOverflow } = {}) {\n    if (!lineWidth || lineWidth < 0)\n        return text;\n    if (lineWidth < minContentWidth)\n        minContentWidth = 0;\n    const endStep = Math.max(1 + minContentWidth, 1 + lineWidth - indent.length);\n    if (text.length <= endStep)\n        return text;\n    const folds = [];\n    const escapedFolds = {};\n    let end = lineWidth - indent.length;\n    if (typeof indentAtStart === 'number') {\n        if (indentAtStart > lineWidth - Math.max(2, minContentWidth))\n            folds.push(0);\n        else\n            end = lineWidth - indentAtStart;\n    }\n    let split = undefined;\n    let prev = undefined;\n    let overflow = false;\n    let i = -1;\n    let escStart = -1;\n    let escEnd = -1;\n    if (mode === FOLD_BLOCK) {\n        i = consumeMoreIndentedLines(text, i, indent.length);\n        if (i !== -1)\n            end = i + endStep;\n    }\n    for (let ch; (ch = text[(i += 1)]);) {\n        if (mode === FOLD_QUOTED && ch === '\\\\') {\n            escStart = i;\n            switch (text[i + 1]) {\n                case 'x':\n                    i += 3;\n                    break;\n                case 'u':\n                    i += 5;\n                    break;\n                case 'U':\n                    i += 9;\n                    break;\n                default:\n                    i += 1;\n            }\n            escEnd = i;\n        }\n        if (ch === '\\n') {\n            if (mode === FOLD_BLOCK)\n                i = consumeMoreIndentedLines(text, i, indent.length);\n            end = i + indent.length + endStep;\n            split = undefined;\n        }\n        else {\n            if (ch === ' ' &&\n                prev &&\n                prev !== ' ' &&\n                prev !== '\\n' &&\n                prev !== '\\t') {\n                // space surrounded by non-space can be replaced with newline + indent\n                const next = text[i + 1];\n                if (next && next !== ' ' && next !== '\\n' && next !== '\\t')\n                    split = i;\n            }\n            if (i >= end) {\n                if (split) {\n                    folds.push(split);\n                    end = split + endStep;\n                    split = undefined;\n                }\n                else if (mode === FOLD_QUOTED) {\n                    // white-space collected at end may stretch past lineWidth\n                    while (prev === ' ' || prev === '\\t') {\n                        prev = ch;\n                        ch = text[(i += 1)];\n                        overflow = true;\n                    }\n                    // Account for newline escape, but don't break preceding escape\n                    const j = i > escEnd + 1 ? i - 2 : escStart - 1;\n                    // Bail out if lineWidth & minContentWidth are shorter than an escape string\n                    if (escapedFolds[j])\n                        return text;\n                    folds.push(j);\n                    escapedFolds[j] = true;\n                    end = j + endStep;\n                    split = undefined;\n                }\n                else {\n                    overflow = true;\n                }\n            }\n        }\n        prev = ch;\n    }\n    if (overflow && onOverflow)\n        onOverflow();\n    if (folds.length === 0)\n        return text;\n    if (onFold)\n        onFold();\n    let res = text.slice(0, folds[0]);\n    for (let i = 0; i < folds.length; ++i) {\n        const fold = folds[i];\n        const end = folds[i + 1] || text.length;\n        if (fold === 0)\n            res = `\\n${indent}${text.slice(0, end)}`;\n        else {\n            if (mode === FOLD_QUOTED && escapedFolds[fold])\n                res += `${text[fold]}\\\\`;\n            res += `\\n${indent}${text.slice(fold + 1, end)}`;\n        }\n    }\n    return res;\n}\n/**\n * Presumes `i + 1` is at the start of a line\n * @returns index of last newline in more-indented block\n */\nfunction consumeMoreIndentedLines(text, i, indent) {\n    let end = i;\n    let start = i + 1;\n    let ch = text[start];\n    while (ch === ' ' || ch === '\\t') {\n        if (i < start + indent) {\n            ch = text[++i];\n        }\n        else {\n            do {\n                ch = text[++i];\n            } while (ch && ch !== '\\n');\n            end = i;\n            start = i + 1;\n            ch = text[start];\n        }\n    }\n    return end;\n}\n\nexports.FOLD_BLOCK = FOLD_BLOCK;\nexports.FOLD_FLOW = FOLD_FLOW;\nexports.FOLD_QUOTED = FOLD_QUOTED;\nexports.foldFlowLines = foldFlowLines;\n","'use strict';\n\nvar Scalar = require('../nodes/Scalar.js');\nvar foldFlowLines = require('./foldFlowLines.js');\n\nconst getFoldOptions = (ctx, isBlock) => ({\n    indentAtStart: isBlock ? ctx.indent.length : ctx.indentAtStart,\n    lineWidth: ctx.options.lineWidth,\n    minContentWidth: ctx.options.minContentWidth\n});\n// Also checks for lines starting with %, as parsing the output as YAML 1.1 will\n// presume that's starting a new document.\nconst containsDocumentMarker = (str) => /^(%|---|\\.\\.\\.)/m.test(str);\nfunction lineLengthOverLimit(str, lineWidth, indentLength) {\n    if (!lineWidth || lineWidth < 0)\n        return false;\n    const limit = lineWidth - indentLength;\n    const strLen = str.length;\n    if (strLen <= limit)\n        return false;\n    for (let i = 0, start = 0; i < strLen; ++i) {\n        if (str[i] === '\\n') {\n            if (i - start > limit)\n                return true;\n            start = i + 1;\n            if (strLen - start <= limit)\n                return false;\n        }\n    }\n    return true;\n}\nfunction doubleQuotedString(value, ctx) {\n    const json = JSON.stringify(value);\n    if (ctx.options.doubleQuotedAsJSON)\n        return json;\n    const { implicitKey } = ctx;\n    const minMultiLineLength = ctx.options.doubleQuotedMinMultiLineLength;\n    const indent = ctx.indent || (containsDocumentMarker(value) ? '  ' : '');\n    let str = '';\n    let start = 0;\n    for (let i = 0, ch = json[i]; ch; ch = json[++i]) {\n        if (ch === ' ' && json[i + 1] === '\\\\' && json[i + 2] === 'n') {\n            // space before newline needs to be escaped to not be folded\n            str += json.slice(start, i) + '\\\\ ';\n            i += 1;\n            start = i;\n            ch = '\\\\';\n        }\n        if (ch === '\\\\')\n            switch (json[i + 1]) {\n                case 'u':\n                    {\n                        str += json.slice(start, i);\n                        const code = json.substr(i + 2, 4);\n                        switch (code) {\n                            case '0000':\n                                str += '\\\\0';\n                                break;\n                            case '0007':\n                                str += '\\\\a';\n                                break;\n                            case '000b':\n                                str += '\\\\v';\n                                break;\n                            case '001b':\n                                str += '\\\\e';\n                                break;\n                            case '0085':\n                                str += '\\\\N';\n                                break;\n                            case '00a0':\n                                str += '\\\\_';\n                                break;\n                            case '2028':\n                                str += '\\\\L';\n                                break;\n                            case '2029':\n                                str += '\\\\P';\n                                break;\n                            default:\n                                if (code.substr(0, 2) === '00')\n                                    str += '\\\\x' + code.substr(2);\n                                else\n                                    str += json.substr(i, 6);\n                        }\n                        i += 5;\n                        start = i + 1;\n                    }\n                    break;\n                case 'n':\n                    if (implicitKey ||\n                        json[i + 2] === '\"' ||\n                        json.length < minMultiLineLength) {\n                        i += 1;\n                    }\n                    else {\n                        // folding will eat first newline\n                        str += json.slice(start, i) + '\\n\\n';\n                        while (json[i + 2] === '\\\\' &&\n                            json[i + 3] === 'n' &&\n                            json[i + 4] !== '\"') {\n                            str += '\\n';\n                            i += 2;\n                        }\n                        str += indent;\n                        // space after newline needs to be escaped to not be folded\n                        if (json[i + 2] === ' ')\n                            str += '\\\\';\n                        i += 1;\n                        start = i + 1;\n                    }\n                    break;\n                default:\n                    i += 1;\n            }\n    }\n    str = start ? str + json.slice(start) : json;\n    return implicitKey\n        ? str\n        : foldFlowLines.foldFlowLines(str, indent, foldFlowLines.FOLD_QUOTED, getFoldOptions(ctx, false));\n}\nfunction singleQuotedString(value, ctx) {\n    if (ctx.options.singleQuote === false ||\n        (ctx.implicitKey && value.includes('\\n')) ||\n        /[ \\t]\\n|\\n[ \\t]/.test(value) // single quoted string can't have leading or trailing whitespace around newline\n    )\n        return doubleQuotedString(value, ctx);\n    const indent = ctx.indent || (containsDocumentMarker(value) ? '  ' : '');\n    const res = \"'\" + value.replace(/'/g, \"''\").replace(/\\n+/g, `$&\\n${indent}`) + \"'\";\n    return ctx.implicitKey\n        ? res\n        : foldFlowLines.foldFlowLines(res, indent, foldFlowLines.FOLD_FLOW, getFoldOptions(ctx, false));\n}\nfunction quotedString(value, ctx) {\n    const { singleQuote } = ctx.options;\n    let qs;\n    if (singleQuote === false)\n        qs = doubleQuotedString;\n    else {\n        const hasDouble = value.includes('\"');\n        const hasSingle = value.includes(\"'\");\n        if (hasDouble && !hasSingle)\n            qs = singleQuotedString;\n        else if (hasSingle && !hasDouble)\n            qs = doubleQuotedString;\n        else\n            qs = singleQuote ? singleQuotedString : doubleQuotedString;\n    }\n    return qs(value, ctx);\n}\n// The negative lookbehind avoids a polynomial search,\n// but isn't supported yet on Safari: https://caniuse.com/js-regexp-lookbehind\nlet blockEndNewlines;\ntry {\n    blockEndNewlines = new RegExp('(^|(?<!\\n))\\n+(?!\\n|$)', 'g');\n}\ncatch {\n    blockEndNewlines = /\\n+(?!\\n|$)/g;\n}\nfunction blockString({ comment, type, value }, ctx, onComment, onChompKeep) {\n    const { blockQuote, commentString, lineWidth } = ctx.options;\n    // 1. Block can't end in whitespace unless the last line is non-empty.\n    // 2. Strings consisting of only whitespace are best rendered explicitly.\n    if (!blockQuote || /\\n[\\t ]+$/.test(value)) {\n        return quotedString(value, ctx);\n    }\n    const indent = ctx.indent ||\n        (ctx.forceBlockIndent || containsDocumentMarker(value) ? '  ' : '');\n    const literal = blockQuote === 'literal'\n        ? true\n        : blockQuote === 'folded' || type === Scalar.Scalar.BLOCK_FOLDED\n            ? false\n            : type === Scalar.Scalar.BLOCK_LITERAL\n                ? true\n                : !lineLengthOverLimit(value, lineWidth, indent.length);\n    if (!value)\n        return literal ? '|\\n' : '>\\n';\n    // determine chomping from whitespace at value end\n    let chomp;\n    let endStart;\n    for (endStart = value.length; endStart > 0; --endStart) {\n        const ch = value[endStart - 1];\n        if (ch !== '\\n' && ch !== '\\t' && ch !== ' ')\n            break;\n    }\n    let end = value.substring(endStart);\n    const endNlPos = end.indexOf('\\n');\n    if (endNlPos === -1) {\n        chomp = '-'; // strip\n    }\n    else if (value === end || endNlPos !== end.length - 1) {\n        chomp = '+'; // keep\n        if (onChompKeep)\n            onChompKeep();\n    }\n    else {\n        chomp = ''; // clip\n    }\n    if (end) {\n        value = value.slice(0, -end.length);\n        if (end[end.length - 1] === '\\n')\n            end = end.slice(0, -1);\n        end = end.replace(blockEndNewlines, `$&${indent}`);\n    }\n    // determine indent indicator from whitespace at value start\n    let startWithSpace = false;\n    let startEnd;\n    let startNlPos = -1;\n    for (startEnd = 0; startEnd < value.length; ++startEnd) {\n        const ch = value[startEnd];\n        if (ch === ' ')\n            startWithSpace = true;\n        else if (ch === '\\n')\n            startNlPos = startEnd;\n        else\n            break;\n    }\n    let start = value.substring(0, startNlPos < startEnd ? startNlPos + 1 : startEnd);\n    if (start) {\n        value = value.substring(start.length);\n        start = start.replace(/\\n+/g, `$&${indent}`);\n    }\n    const indentSize = indent ? '2' : '1'; // root is at -1\n    // Leading | or > is added later\n    let header = (startWithSpace ? indentSize : '') + chomp;\n    if (comment) {\n        header += ' ' + commentString(comment.replace(/ ?[\\r\\n]+/g, ' '));\n        if (onComment)\n            onComment();\n    }\n    if (!literal) {\n        const foldedValue = value\n            .replace(/\\n+/g, '\\n$&')\n            .replace(/(?:^|\\n)([\\t ].*)(?:([\\n\\t ]*)\\n(?![\\n\\t ]))?/g, '$1$2') // more-indented lines aren't folded\n            //                ^ more-ind. ^ empty     ^ capture next empty lines only at end of indent\n            .replace(/\\n+/g, `$&${indent}`);\n        let literalFallback = false;\n        const foldOptions = getFoldOptions(ctx, true);\n        if (blockQuote !== 'folded' && type !== Scalar.Scalar.BLOCK_FOLDED) {\n            foldOptions.onOverflow = () => {\n                literalFallback = true;\n            };\n        }\n        const body = foldFlowLines.foldFlowLines(`${start}${foldedValue}${end}`, indent, foldFlowLines.FOLD_BLOCK, foldOptions);\n        if (!literalFallback)\n            return `>${header}\\n${indent}${body}`;\n    }\n    value = value.replace(/\\n+/g, `$&${indent}`);\n    return `|${header}\\n${indent}${start}${value}${end}`;\n}\nfunction plainString(item, ctx, onComment, onChompKeep) {\n    const { type, value } = item;\n    const { actualString, implicitKey, indent, indentStep, inFlow } = ctx;\n    if ((implicitKey && value.includes('\\n')) ||\n        (inFlow && /[[\\]{},]/.test(value))) {\n        return quotedString(value, ctx);\n    }\n    if (/^[\\n\\t ,[\\]{}#&*!|>'\"%@`]|^[?-]$|^[?-][ \\t]|[\\n:][ \\t]|[ \\t]\\n|[\\n\\t ]#|[\\n\\t :]$/.test(value)) {\n        // not allowed:\n        // - '-' or '?'\n        // - start with an indicator character (except [?:-]) or /[?-] /\n        // - '\\n ', ': ' or ' \\n' anywhere\n        // - '#' not preceded by a non-space char\n        // - end with ' ' or ':'\n        return implicitKey || inFlow || !value.includes('\\n')\n            ? quotedString(value, ctx)\n            : blockString(item, ctx, onComment, onChompKeep);\n    }\n    if (!implicitKey &&\n        !inFlow &&\n        type !== Scalar.Scalar.PLAIN &&\n        value.includes('\\n')) {\n        // Where allowed & type not set explicitly, prefer block style for multiline strings\n        return blockString(item, ctx, onComment, onChompKeep);\n    }\n    if (containsDocumentMarker(value)) {\n        if (indent === '') {\n            ctx.forceBlockIndent = true;\n            return blockString(item, ctx, onComment, onChompKeep);\n        }\n        else if (implicitKey && indent === indentStep) {\n            return quotedString(value, ctx);\n        }\n    }\n    const str = value.replace(/\\n+/g, `$&\\n${indent}`);\n    // Verify that output will be parsed as a string, as e.g. plain numbers and\n    // booleans get parsed with those types in v1.2 (e.g. '42', 'true' & '0.9e-3'),\n    // and others in v1.1.\n    if (actualString) {\n        const test = (tag) => tag.default && tag.tag !== 'tag:yaml.org,2002:str' && tag.test?.test(str);\n        const { compat, tags } = ctx.doc.schema;\n        if (tags.some(test) || compat?.some(test))\n            return quotedString(value, ctx);\n    }\n    return implicitKey\n        ? str\n        : foldFlowLines.foldFlowLines(str, indent, foldFlowLines.FOLD_FLOW, getFoldOptions(ctx, false));\n}\nfunction stringifyString(item, ctx, onComment, onChompKeep) {\n    const { implicitKey, inFlow } = ctx;\n    const ss = typeof item.value === 'string'\n        ? item\n        : Object.assign({}, item, { value: String(item.value) });\n    let { type } = item;\n    if (type !== Scalar.Scalar.QUOTE_DOUBLE) {\n        // force double quotes on control characters & unpaired surrogates\n        if (/[\\x00-\\x08\\x0b-\\x1f\\x7f-\\x9f\\u{D800}-\\u{DFFF}]/u.test(ss.value))\n            type = Scalar.Scalar.QUOTE_DOUBLE;\n    }\n    const _stringify = (_type) => {\n        switch (_type) {\n            case Scalar.Scalar.BLOCK_FOLDED:\n            case Scalar.Scalar.BLOCK_LITERAL:\n                return implicitKey || inFlow\n                    ? quotedString(ss.value, ctx) // blocks are not valid inside flow containers\n                    : blockString(ss, ctx, onComment, onChompKeep);\n            case Scalar.Scalar.QUOTE_DOUBLE:\n                return doubleQuotedString(ss.value, ctx);\n            case Scalar.Scalar.QUOTE_SINGLE:\n                return singleQuotedString(ss.value, ctx);\n            case Scalar.Scalar.PLAIN:\n                return plainString(ss, ctx, onComment, onChompKeep);\n            default:\n                return null;\n        }\n    };\n    let res = _stringify(type);\n    if (res === null) {\n        const { defaultKeyType, defaultStringType } = ctx.options;\n        const t = (implicitKey && defaultKeyType) || defaultStringType;\n        res = _stringify(t);\n        if (res === null)\n            throw new Error(`Unsupported default string type ${t}`);\n    }\n    return res;\n}\n\nexports.stringifyString = stringifyString;\n","'use strict';\n\nvar anchors = require('../doc/anchors.js');\nvar identity = require('../nodes/identity.js');\nvar stringifyComment = require('./stringifyComment.js');\nvar stringifyString = require('./stringifyString.js');\n\nfunction createStringifyContext(doc, options) {\n    const opt = Object.assign({\n        blockQuote: true,\n        commentString: stringifyComment.stringifyComment,\n        defaultKeyType: null,\n        defaultStringType: 'PLAIN',\n        directives: null,\n        doubleQuotedAsJSON: false,\n        doubleQuotedMinMultiLineLength: 40,\n        falseStr: 'false',\n        flowCollectionPadding: true,\n        indentSeq: true,\n        lineWidth: 80,\n        minContentWidth: 20,\n        nullStr: 'null',\n        simpleKeys: false,\n        singleQuote: null,\n        trailingComma: false,\n        trueStr: 'true',\n        verifyAliasOrder: true\n    }, doc.schema.toStringOptions, options);\n    let inFlow;\n    switch (opt.collectionStyle) {\n        case 'block':\n            inFlow = false;\n            break;\n        case 'flow':\n            inFlow = true;\n            break;\n        default:\n            inFlow = null;\n    }\n    return {\n        anchors: new Set(),\n        doc,\n        flowCollectionPadding: opt.flowCollectionPadding ? ' ' : '',\n        indent: '',\n        indentStep: typeof opt.indent === 'number' ? ' '.repeat(opt.indent) : '  ',\n        inFlow,\n        options: opt\n    };\n}\nfunction getTagObject(tags, item) {\n    if (item.tag) {\n        const match = tags.filter(t => t.tag === item.tag);\n        if (match.length > 0)\n            return match.find(t => t.format === item.format) ?? match[0];\n    }\n    let tagObj = undefined;\n    let obj;\n    if (identity.isScalar(item)) {\n        obj = item.value;\n        let match = tags.filter(t => t.identify?.(obj));\n        if (match.length > 1) {\n            const testMatch = match.filter(t => t.test);\n            if (testMatch.length > 0)\n                match = testMatch;\n        }\n        tagObj =\n            match.find(t => t.format === item.format) ?? match.find(t => !t.format);\n    }\n    else {\n        obj = item;\n        tagObj = tags.find(t => t.nodeClass && obj instanceof t.nodeClass);\n    }\n    if (!tagObj) {\n        const name = obj?.constructor?.name ?? (obj === null ? 'null' : typeof obj);\n        throw new Error(`Tag not resolved for ${name} value`);\n    }\n    return tagObj;\n}\n// needs to be called before value stringifier to allow for circular anchor refs\nfunction stringifyProps(node, tagObj, { anchors: anchors$1, doc }) {\n    if (!doc.directives)\n        return '';\n    const props = [];\n    const anchor = (identity.isScalar(node) || identity.isCollection(node)) && node.anchor;\n    if (anchor && anchors.anchorIsValid(anchor)) {\n        anchors$1.add(anchor);\n        props.push(`&${anchor}`);\n    }\n    const tag = node.tag ?? (tagObj.default ? null : tagObj.tag);\n    if (tag)\n        props.push(doc.directives.tagString(tag));\n    return props.join(' ');\n}\nfunction stringify(item, ctx, onComment, onChompKeep) {\n    if (identity.isPair(item))\n        return item.toString(ctx, onComment, onChompKeep);\n    if (identity.isAlias(item)) {\n        if (ctx.doc.directives)\n            return item.toString(ctx);\n        if (ctx.resolvedAliases?.has(item)) {\n            throw new TypeError(`Cannot stringify circular structure without alias nodes`);\n        }\n        else {\n            if (ctx.resolvedAliases)\n                ctx.resolvedAliases.add(item);\n            else\n                ctx.resolvedAliases = new Set([item]);\n            item = item.resolve(ctx.doc);\n        }\n    }\n    let tagObj = undefined;\n    const node = identity.isNode(item)\n        ? item\n        : ctx.doc.createNode(item, { onTagObj: o => (tagObj = o) });\n    tagObj ?? (tagObj = getTagObject(ctx.doc.schema.tags, node));\n    const props = stringifyProps(node, tagObj, ctx);\n    if (props.length > 0)\n        ctx.indentAtStart = (ctx.indentAtStart ?? 0) + props.length + 1;\n    const str = typeof tagObj.stringify === 'function'\n        ? tagObj.stringify(node, ctx, onComment, onChompKeep)\n        : identity.isScalar(node)\n            ? stringifyString.stringifyString(node, ctx, onComment, onChompKeep)\n            : node.toString(ctx, onComment, onChompKeep);\n    if (!props)\n        return str;\n    return identity.isScalar(node) || str[0] === '{' || str[0] === '['\n        ? `${props} ${str}`\n        : `${props}\\n${ctx.indent}${str}`;\n}\n\nexports.createStringifyContext = createStringifyContext;\nexports.stringify = stringify;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar Scalar = require('../nodes/Scalar.js');\nvar stringify = require('./stringify.js');\nvar stringifyComment = require('./stringifyComment.js');\n\nfunction stringifyPair({ key, value }, ctx, onComment, onChompKeep) {\n    const { allNullValues, doc, indent, indentStep, options: { commentString, indentSeq, simpleKeys } } = ctx;\n    let keyComment = (identity.isNode(key) && key.comment) || null;\n    if (simpleKeys) {\n        if (keyComment) {\n            throw new Error('With simple keys, key nodes cannot have comments');\n        }\n        if (identity.isCollection(key) || (!identity.isNode(key) && typeof key === 'object')) {\n            const msg = 'With simple keys, collection cannot be used as a key value';\n            throw new Error(msg);\n        }\n    }\n    let explicitKey = !simpleKeys &&\n        (!key ||\n            (keyComment && value == null && !ctx.inFlow) ||\n            identity.isCollection(key) ||\n            (identity.isScalar(key)\n                ? key.type === Scalar.Scalar.BLOCK_FOLDED || key.type === Scalar.Scalar.BLOCK_LITERAL\n                : typeof key === 'object'));\n    ctx = Object.assign({}, ctx, {\n        allNullValues: false,\n        implicitKey: !explicitKey && (simpleKeys || !allNullValues),\n        indent: indent + indentStep\n    });\n    let keyCommentDone = false;\n    let chompKeep = false;\n    let str = stringify.stringify(key, ctx, () => (keyCommentDone = true), () => (chompKeep = true));\n    if (!explicitKey && !ctx.inFlow && str.length > 1024) {\n        if (simpleKeys)\n            throw new Error('With simple keys, single line scalar must not span more than 1024 characters');\n        explicitKey = true;\n    }\n    if (ctx.inFlow) {\n        if (allNullValues || value == null) {\n            if (keyCommentDone && onComment)\n                onComment();\n            return str === '' ? '?' : explicitKey ? `? ${str}` : str;\n        }\n    }\n    else if ((allNullValues && !simpleKeys) || (value == null && explicitKey)) {\n        str = `? ${str}`;\n        if (keyComment && !keyCommentDone) {\n            str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment));\n        }\n        else if (chompKeep && onChompKeep)\n            onChompKeep();\n        return str;\n    }\n    if (keyCommentDone)\n        keyComment = null;\n    if (explicitKey) {\n        if (keyComment)\n            str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment));\n        str = `? ${str}\\n${indent}:`;\n    }\n    else {\n        str = `${str}:`;\n        if (keyComment)\n            str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment));\n    }\n    let vsb, vcb, valueComment;\n    if (identity.isNode(value)) {\n        vsb = !!value.spaceBefore;\n        vcb = value.commentBefore;\n        valueComment = value.comment;\n    }\n    else {\n        vsb = false;\n        vcb = null;\n        valueComment = null;\n        if (value && typeof value === 'object')\n            value = doc.createNode(value);\n    }\n    ctx.implicitKey = false;\n    if (!explicitKey && !keyComment && identity.isScalar(value))\n        ctx.indentAtStart = str.length + 1;\n    chompKeep = false;\n    if (!indentSeq &&\n        indentStep.length >= 2 &&\n        !ctx.inFlow &&\n        !explicitKey &&\n        identity.isSeq(value) &&\n        !value.flow &&\n        !value.tag &&\n        !value.anchor) {\n        // If indentSeq === false, consider '- ' as part of indentation where possible\n        ctx.indent = ctx.indent.substring(2);\n    }\n    let valueCommentDone = false;\n    const valueStr = stringify.stringify(value, ctx, () => (valueCommentDone = true), () => (chompKeep = true));\n    let ws = ' ';\n    if (keyComment || vsb || vcb) {\n        ws = vsb ? '\\n' : '';\n        if (vcb) {\n            const cs = commentString(vcb);\n            ws += `\\n${stringifyComment.indentComment(cs, ctx.indent)}`;\n        }\n        if (valueStr === '' && !ctx.inFlow) {\n            if (ws === '\\n' && valueComment)\n                ws = '\\n\\n';\n        }\n        else {\n            ws += `\\n${ctx.indent}`;\n        }\n    }\n    else if (!explicitKey && identity.isCollection(value)) {\n        const vs0 = valueStr[0];\n        const nl0 = valueStr.indexOf('\\n');\n        const hasNewline = nl0 !== -1;\n        const flow = ctx.inFlow ?? value.flow ?? value.items.length === 0;\n        if (hasNewline || !flow) {\n            let hasPropsLine = false;\n            if (hasNewline && (vs0 === '&' || vs0 === '!')) {\n                let sp0 = valueStr.indexOf(' ');\n                if (vs0 === '&' &&\n                    sp0 !== -1 &&\n                    sp0 < nl0 &&\n                    valueStr[sp0 + 1] === '!') {\n                    sp0 = valueStr.indexOf(' ', sp0 + 1);\n                }\n                if (sp0 === -1 || nl0 < sp0)\n                    hasPropsLine = true;\n            }\n            if (!hasPropsLine)\n                ws = `\\n${ctx.indent}`;\n        }\n    }\n    else if (valueStr === '' || valueStr[0] === '\\n') {\n        ws = '';\n    }\n    str += ws + valueStr;\n    if (ctx.inFlow) {\n        if (valueCommentDone && onComment)\n            onComment();\n    }\n    else if (valueComment && !valueCommentDone) {\n        str += stringifyComment.lineComment(str, ctx.indent, commentString(valueComment));\n    }\n    else if (chompKeep && onChompKeep) {\n        onChompKeep();\n    }\n    return str;\n}\n\nexports.stringifyPair = stringifyPair;\n","'use strict';\n\nvar node_process = require('process');\n\nfunction debug(logLevel, ...messages) {\n    if (logLevel === 'debug')\n        console.log(...messages);\n}\nfunction warn(logLevel, warning) {\n    if (logLevel === 'debug' || logLevel === 'warn') {\n        if (typeof node_process.emitWarning === 'function')\n            node_process.emitWarning(warning);\n        else\n            console.warn(warning);\n    }\n}\n\nexports.debug = debug;\nexports.warn = warn;\n","'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar Scalar = require('../../nodes/Scalar.js');\n\n// If the value associated with a merge key is a single mapping node, each of\n// its key/value pairs is inserted into the current mapping, unless the key\n// already exists in it. If the value associated with the merge key is a\n// sequence, then this sequence is expected to contain mapping nodes and each\n// of these nodes is merged in turn according to its order in the sequence.\n// Keys in mapping nodes earlier in the sequence override keys specified in\n// later mapping nodes. -- http://yaml.org/type/merge.html\nconst MERGE_KEY = '<<';\nconst merge = {\n    identify: value => value === MERGE_KEY ||\n        (typeof value === 'symbol' && value.description === MERGE_KEY),\n    default: 'key',\n    tag: 'tag:yaml.org,2002:merge',\n    test: /^<<$/,\n    resolve: () => Object.assign(new Scalar.Scalar(Symbol(MERGE_KEY)), {\n        addToJSMap: addMergeToJSMap\n    }),\n    stringify: () => MERGE_KEY\n};\nconst isMergeKey = (ctx, key) => (merge.identify(key) ||\n    (identity.isScalar(key) &&\n        (!key.type || key.type === Scalar.Scalar.PLAIN) &&\n        merge.identify(key.value))) &&\n    ctx?.doc.schema.tags.some(tag => tag.tag === merge.tag && tag.default);\nfunction addMergeToJSMap(ctx, map, value) {\n    const source = resolveAliasValue(ctx, value);\n    if (identity.isSeq(source))\n        for (const it of source.items)\n            mergeValue(ctx, map, it);\n    else if (Array.isArray(source))\n        for (const it of source)\n            mergeValue(ctx, map, it);\n    else\n        mergeValue(ctx, map, source);\n}\nfunction mergeValue(ctx, map, value) {\n    const source = resolveAliasValue(ctx, value);\n    if (!identity.isMap(source))\n        throw new Error('Merge sources must be maps or map aliases');\n    const srcMap = source.toJSON(null, ctx, Map);\n    for (const [key, value] of srcMap) {\n        if (map instanceof Map) {\n            if (!map.has(key))\n                map.set(key, value);\n        }\n        else if (map instanceof Set) {\n            map.add(key);\n        }\n        else if (!Object.prototype.hasOwnProperty.call(map, key)) {\n            Object.defineProperty(map, key, {\n                value,\n                writable: true,\n                enumerable: true,\n                configurable: true\n            });\n        }\n    }\n    return map;\n}\nfunction resolveAliasValue(ctx, value) {\n    return ctx && identity.isAlias(value) ? value.resolve(ctx.doc, ctx) : value;\n}\n\nexports.addMergeToJSMap = addMergeToJSMap;\nexports.isMergeKey = isMergeKey;\nexports.merge = merge;\n","'use strict';\n\nvar log = require('../log.js');\nvar merge = require('../schema/yaml-1.1/merge.js');\nvar stringify = require('../stringify/stringify.js');\nvar identity = require('./identity.js');\nvar toJS = require('./toJS.js');\n\nfunction addPairToJSMap(ctx, map, { key, value }) {\n    if (identity.isNode(key) && key.addToJSMap)\n        key.addToJSMap(ctx, map, value);\n    // TODO: Should drop this special case for bare << handling\n    else if (merge.isMergeKey(ctx, key))\n        merge.addMergeToJSMap(ctx, map, value);\n    else {\n        const jsKey = toJS.toJS(key, '', ctx);\n        if (map instanceof Map) {\n            map.set(jsKey, toJS.toJS(value, jsKey, ctx));\n        }\n        else if (map instanceof Set) {\n            map.add(jsKey);\n        }\n        else {\n            const stringKey = stringifyKey(key, jsKey, ctx);\n            const jsValue = toJS.toJS(value, stringKey, ctx);\n            if (stringKey in map)\n                Object.defineProperty(map, stringKey, {\n                    value: jsValue,\n                    writable: true,\n                    enumerable: true,\n                    configurable: true\n                });\n            else\n                map[stringKey] = jsValue;\n        }\n    }\n    return map;\n}\nfunction stringifyKey(key, jsKey, ctx) {\n    if (jsKey === null)\n        return '';\n    // eslint-disable-next-line @typescript-eslint/no-base-to-string\n    if (typeof jsKey !== 'object')\n        return String(jsKey);\n    if (identity.isNode(key) && ctx?.doc) {\n        const strCtx = stringify.createStringifyContext(ctx.doc, {});\n        strCtx.anchors = new Set();\n        for (const node of ctx.anchors.keys())\n            strCtx.anchors.add(node.anchor);\n        strCtx.inFlow = true;\n        strCtx.inStringifyKey = true;\n        const strKey = key.toString(strCtx);\n        if (!ctx.mapKeyWarned) {\n            let jsonStr = JSON.stringify(strKey);\n            if (jsonStr.length > 40)\n                jsonStr = jsonStr.substring(0, 36) + '...\"';\n            log.warn(ctx.doc.options.logLevel, `Keys with collection values will be stringified due to JS Object restrictions: ${jsonStr}. Set mapAsMap: true to use object keys.`);\n            ctx.mapKeyWarned = true;\n        }\n        return strKey;\n    }\n    return JSON.stringify(jsKey);\n}\n\nexports.addPairToJSMap = addPairToJSMap;\n","'use strict';\n\nvar createNode = require('../doc/createNode.js');\nvar stringifyPair = require('../stringify/stringifyPair.js');\nvar addPairToJSMap = require('./addPairToJSMap.js');\nvar identity = require('./identity.js');\n\nfunction createPair(key, value, ctx) {\n    const k = createNode.createNode(key, undefined, ctx);\n    const v = createNode.createNode(value, undefined, ctx);\n    return new Pair(k, v);\n}\nclass Pair {\n    constructor(key, value = null) {\n        Object.defineProperty(this, identity.NODE_TYPE, { value: identity.PAIR });\n        this.key = key;\n        this.value = value;\n    }\n    clone(schema) {\n        let { key, value } = this;\n        if (identity.isNode(key))\n            key = key.clone(schema);\n        if (identity.isNode(value))\n            value = value.clone(schema);\n        return new Pair(key, value);\n    }\n    toJSON(_, ctx) {\n        const pair = ctx?.mapAsMap ? new Map() : {};\n        return addPairToJSMap.addPairToJSMap(ctx, pair, this);\n    }\n    toString(ctx, onComment, onChompKeep) {\n        return ctx?.doc\n            ? stringifyPair.stringifyPair(this, ctx, onComment, onChompKeep)\n            : JSON.stringify(this);\n    }\n}\n\nexports.Pair = Pair;\nexports.createPair = createPair;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar stringify = require('./stringify.js');\nvar stringifyComment = require('./stringifyComment.js');\n\nfunction stringifyCollection(collection, ctx, options) {\n    const flow = ctx.inFlow ?? collection.flow;\n    const stringify = flow ? stringifyFlowCollection : stringifyBlockCollection;\n    return stringify(collection, ctx, options);\n}\nfunction stringifyBlockCollection({ comment, items }, ctx, { blockItemPrefix, flowChars, itemIndent, onChompKeep, onComment }) {\n    const { indent, options: { commentString } } = ctx;\n    const itemCtx = Object.assign({}, ctx, { indent: itemIndent, type: null });\n    let chompKeep = false; // flag for the preceding node's status\n    const lines = [];\n    for (let i = 0; i < items.length; ++i) {\n        const item = items[i];\n        let comment = null;\n        if (identity.isNode(item)) {\n            if (!chompKeep && item.spaceBefore)\n                lines.push('');\n            addCommentBefore(ctx, lines, item.commentBefore, chompKeep);\n            if (item.comment)\n                comment = item.comment;\n        }\n        else if (identity.isPair(item)) {\n            const ik = identity.isNode(item.key) ? item.key : null;\n            if (ik) {\n                if (!chompKeep && ik.spaceBefore)\n                    lines.push('');\n                addCommentBefore(ctx, lines, ik.commentBefore, chompKeep);\n            }\n        }\n        chompKeep = false;\n        let str = stringify.stringify(item, itemCtx, () => (comment = null), () => (chompKeep = true));\n        if (comment)\n            str += stringifyComment.lineComment(str, itemIndent, commentString(comment));\n        if (chompKeep && comment)\n            chompKeep = false;\n        lines.push(blockItemPrefix + str);\n    }\n    let str;\n    if (lines.length === 0) {\n        str = flowChars.start + flowChars.end;\n    }\n    else {\n        str = lines[0];\n        for (let i = 1; i < lines.length; ++i) {\n            const line = lines[i];\n            str += line ? `\\n${indent}${line}` : '\\n';\n        }\n    }\n    if (comment) {\n        str += '\\n' + stringifyComment.indentComment(commentString(comment), indent);\n        if (onComment)\n            onComment();\n    }\n    else if (chompKeep && onChompKeep)\n        onChompKeep();\n    return str;\n}\nfunction stringifyFlowCollection({ items }, ctx, { flowChars, itemIndent }) {\n    const { indent, indentStep, flowCollectionPadding: fcPadding, options: { commentString } } = ctx;\n    itemIndent += indentStep;\n    const itemCtx = Object.assign({}, ctx, {\n        indent: itemIndent,\n        inFlow: true,\n        type: null\n    });\n    let reqNewline = false;\n    let linesAtValue = 0;\n    const lines = [];\n    for (let i = 0; i < items.length; ++i) {\n        const item = items[i];\n        let comment = null;\n        if (identity.isNode(item)) {\n            if (item.spaceBefore)\n                lines.push('');\n            addCommentBefore(ctx, lines, item.commentBefore, false);\n            if (item.comment)\n                comment = item.comment;\n        }\n        else if (identity.isPair(item)) {\n            const ik = identity.isNode(item.key) ? item.key : null;\n            if (ik) {\n                if (ik.spaceBefore)\n                    lines.push('');\n                addCommentBefore(ctx, lines, ik.commentBefore, false);\n                if (ik.comment)\n                    reqNewline = true;\n            }\n            const iv = identity.isNode(item.value) ? item.value : null;\n            if (iv) {\n                if (iv.comment)\n                    comment = iv.comment;\n                if (iv.commentBefore)\n                    reqNewline = true;\n            }\n            else if (item.value == null && ik?.comment) {\n                comment = ik.comment;\n            }\n        }\n        if (comment)\n            reqNewline = true;\n        let str = stringify.stringify(item, itemCtx, () => (comment = null));\n        reqNewline || (reqNewline = lines.length > linesAtValue || str.includes('\\n'));\n        if (i < items.length - 1) {\n            str += ',';\n        }\n        else if (ctx.options.trailingComma) {\n            if (ctx.options.lineWidth > 0) {\n                reqNewline || (reqNewline = lines.reduce((sum, line) => sum + line.length + 2, 2) +\n                    (str.length + 2) >\n                    ctx.options.lineWidth);\n            }\n            if (reqNewline) {\n                str += ',';\n            }\n        }\n        if (comment)\n            str += stringifyComment.lineComment(str, itemIndent, commentString(comment));\n        lines.push(str);\n        linesAtValue = lines.length;\n    }\n    const { start, end } = flowChars;\n    if (lines.length === 0) {\n        return start + end;\n    }\n    else {\n        if (!reqNewline) {\n            const len = lines.reduce((sum, line) => sum + line.length + 2, 2);\n            reqNewline = ctx.options.lineWidth > 0 && len > ctx.options.lineWidth;\n        }\n        if (reqNewline) {\n            let str = start;\n            for (const line of lines)\n                str += line ? `\\n${indentStep}${indent}${line}` : '\\n';\n            return `${str}\\n${indent}${end}`;\n        }\n        else {\n            return `${start}${fcPadding}${lines.join(' ')}${fcPadding}${end}`;\n        }\n    }\n}\nfunction addCommentBefore({ indent, options: { commentString } }, lines, comment, chompKeep) {\n    if (comment && chompKeep)\n        comment = comment.replace(/^\\n+/, '');\n    if (comment) {\n        const ic = stringifyComment.indentComment(commentString(comment), indent);\n        lines.push(ic.trimStart()); // Avoid double indent on first line\n    }\n}\n\nexports.stringifyCollection = stringifyCollection;\n","'use strict';\n\nvar stringifyCollection = require('../stringify/stringifyCollection.js');\nvar addPairToJSMap = require('./addPairToJSMap.js');\nvar Collection = require('./Collection.js');\nvar identity = require('./identity.js');\nvar Pair = require('./Pair.js');\nvar Scalar = require('./Scalar.js');\n\nfunction findPair(items, key) {\n    const k = identity.isScalar(key) ? key.value : key;\n    for (const it of items) {\n        if (identity.isPair(it)) {\n            if (it.key === key || it.key === k)\n                return it;\n            if (identity.isScalar(it.key) && it.key.value === k)\n                return it;\n        }\n    }\n    return undefined;\n}\nclass YAMLMap extends Collection.Collection {\n    static get tagName() {\n        return 'tag:yaml.org,2002:map';\n    }\n    constructor(schema) {\n        super(identity.MAP, schema);\n        this.items = [];\n    }\n    /**\n     * A generic collection parsing method that can be extended\n     * to other node classes that inherit from YAMLMap\n     */\n    static from(schema, obj, ctx) {\n        const { keepUndefined, replacer } = ctx;\n        const map = new this(schema);\n        const add = (key, value) => {\n            if (typeof replacer === 'function')\n                value = replacer.call(obj, key, value);\n            else if (Array.isArray(replacer) && !replacer.includes(key))\n                return;\n            if (value !== undefined || keepUndefined)\n                map.items.push(Pair.createPair(key, value, ctx));\n        };\n        if (obj instanceof Map) {\n            for (const [key, value] of obj)\n                add(key, value);\n        }\n        else if (obj && typeof obj === 'object') {\n            for (const key of Object.keys(obj))\n                add(key, obj[key]);\n        }\n        if (typeof schema.sortMapEntries === 'function') {\n            map.items.sort(schema.sortMapEntries);\n        }\n        return map;\n    }\n    /**\n     * Adds a value to the collection.\n     *\n     * @param overwrite - If not set `true`, using a key that is already in the\n     *   collection will throw. Otherwise, overwrites the previous value.\n     */\n    add(pair, overwrite) {\n        let _pair;\n        if (identity.isPair(pair))\n            _pair = pair;\n        else if (!pair || typeof pair !== 'object' || !('key' in pair)) {\n            // In TypeScript, this never happens.\n            _pair = new Pair.Pair(pair, pair?.value);\n        }\n        else\n            _pair = new Pair.Pair(pair.key, pair.value);\n        const prev = findPair(this.items, _pair.key);\n        const sortEntries = this.schema?.sortMapEntries;\n        if (prev) {\n            if (!overwrite)\n                throw new Error(`Key ${_pair.key} already set`);\n            // For scalars, keep the old node & its comments and anchors\n            if (identity.isScalar(prev.value) && Scalar.isScalarValue(_pair.value))\n                prev.value.value = _pair.value;\n            else\n                prev.value = _pair.value;\n        }\n        else if (sortEntries) {\n            const i = this.items.findIndex(item => sortEntries(_pair, item) < 0);\n            if (i === -1)\n                this.items.push(_pair);\n            else\n                this.items.splice(i, 0, _pair);\n        }\n        else {\n            this.items.push(_pair);\n        }\n    }\n    delete(key) {\n        const it = findPair(this.items, key);\n        if (!it)\n            return false;\n        const del = this.items.splice(this.items.indexOf(it), 1);\n        return del.length > 0;\n    }\n    get(key, keepScalar) {\n        const it = findPair(this.items, key);\n        const node = it?.value;\n        return (!keepScalar && identity.isScalar(node) ? node.value : node) ?? undefined;\n    }\n    has(key) {\n        return !!findPair(this.items, key);\n    }\n    set(key, value) {\n        this.add(new Pair.Pair(key, value), true);\n    }\n    /**\n     * @param ctx - Conversion context, originally set in Document#toJS()\n     * @param {Class} Type - If set, forces the returned collection type\n     * @returns Instance of Type, Map, or Object\n     */\n    toJSON(_, ctx, Type) {\n        const map = Type ? new Type() : ctx?.mapAsMap ? new Map() : {};\n        if (ctx?.onCreate)\n            ctx.onCreate(map);\n        for (const item of this.items)\n            addPairToJSMap.addPairToJSMap(ctx, map, item);\n        return map;\n    }\n    toString(ctx, onComment, onChompKeep) {\n        if (!ctx)\n            return JSON.stringify(this);\n        for (const item of this.items) {\n            if (!identity.isPair(item))\n                throw new Error(`Map items must all be pairs; found ${JSON.stringify(item)} instead`);\n        }\n        if (!ctx.allNullValues && this.hasAllNullValues(false))\n            ctx = Object.assign({}, ctx, { allNullValues: true });\n        return stringifyCollection.stringifyCollection(this, ctx, {\n            blockItemPrefix: '',\n            flowChars: { start: '{', end: '}' },\n            itemIndent: ctx.indent || '',\n            onChompKeep,\n            onComment\n        });\n    }\n}\n\nexports.YAMLMap = YAMLMap;\nexports.findPair = findPair;\n","'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar YAMLMap = require('../../nodes/YAMLMap.js');\n\nconst map = {\n    collection: 'map',\n    default: true,\n    nodeClass: YAMLMap.YAMLMap,\n    tag: 'tag:yaml.org,2002:map',\n    resolve(map, onError) {\n        if (!identity.isMap(map))\n            onError('Expected a mapping for this tag');\n        return map;\n    },\n    createNode: (schema, obj, ctx) => YAMLMap.YAMLMap.from(schema, obj, ctx)\n};\n\nexports.map = map;\n","'use strict';\n\nvar createNode = require('../doc/createNode.js');\nvar stringifyCollection = require('../stringify/stringifyCollection.js');\nvar Collection = require('./Collection.js');\nvar identity = require('./identity.js');\nvar Scalar = require('./Scalar.js');\nvar toJS = require('./toJS.js');\n\nclass YAMLSeq extends Collection.Collection {\n    static get tagName() {\n        return 'tag:yaml.org,2002:seq';\n    }\n    constructor(schema) {\n        super(identity.SEQ, schema);\n        this.items = [];\n    }\n    add(value) {\n        this.items.push(value);\n    }\n    /**\n     * Removes a value from the collection.\n     *\n     * `key` must contain a representation of an integer for this to succeed.\n     * It may be wrapped in a `Scalar`.\n     *\n     * @returns `true` if the item was found and removed.\n     */\n    delete(key) {\n        const idx = asItemIndex(key);\n        if (typeof idx !== 'number')\n            return false;\n        const del = this.items.splice(idx, 1);\n        return del.length > 0;\n    }\n    get(key, keepScalar) {\n        const idx = asItemIndex(key);\n        if (typeof idx !== 'number')\n            return undefined;\n        const it = this.items[idx];\n        return !keepScalar && identity.isScalar(it) ? it.value : it;\n    }\n    /**\n     * Checks if the collection includes a value with the key `key`.\n     *\n     * `key` must contain a representation of an integer for this to succeed.\n     * It may be wrapped in a `Scalar`.\n     */\n    has(key) {\n        const idx = asItemIndex(key);\n        return typeof idx === 'number' && idx < this.items.length;\n    }\n    /**\n     * Sets a value in this collection. For `!!set`, `value` needs to be a\n     * boolean to add/remove the item from the set.\n     *\n     * If `key` does not contain a representation of an integer, this will throw.\n     * It may be wrapped in a `Scalar`.\n     */\n    set(key, value) {\n        const idx = asItemIndex(key);\n        if (typeof idx !== 'number')\n            throw new Error(`Expected a valid index, not ${key}.`);\n        const prev = this.items[idx];\n        if (identity.isScalar(prev) && Scalar.isScalarValue(value))\n            prev.value = value;\n        else\n            this.items[idx] = value;\n    }\n    toJSON(_, ctx) {\n        const seq = [];\n        if (ctx?.onCreate)\n            ctx.onCreate(seq);\n        let i = 0;\n        for (const item of this.items)\n            seq.push(toJS.toJS(item, String(i++), ctx));\n        return seq;\n    }\n    toString(ctx, onComment, onChompKeep) {\n        if (!ctx)\n            return JSON.stringify(this);\n        return stringifyCollection.stringifyCollection(this, ctx, {\n            blockItemPrefix: '- ',\n            flowChars: { start: '[', end: ']' },\n            itemIndent: (ctx.indent || '') + '  ',\n            onChompKeep,\n            onComment\n        });\n    }\n    static from(schema, obj, ctx) {\n        const { replacer } = ctx;\n        const seq = new this(schema);\n        if (obj && Symbol.iterator in Object(obj)) {\n            let i = 0;\n            for (let it of obj) {\n                if (typeof replacer === 'function') {\n                    const key = obj instanceof Set ? it : String(i++);\n                    it = replacer.call(obj, key, it);\n                }\n                seq.items.push(createNode.createNode(it, undefined, ctx));\n            }\n        }\n        return seq;\n    }\n}\nfunction asItemIndex(key) {\n    let idx = identity.isScalar(key) ? key.value : key;\n    if (idx && typeof idx === 'string')\n        idx = Number(idx);\n    return typeof idx === 'number' && Number.isInteger(idx) && idx >= 0\n        ? idx\n        : null;\n}\n\nexports.YAMLSeq = YAMLSeq;\n","'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar YAMLSeq = require('../../nodes/YAMLSeq.js');\n\nconst seq = {\n    collection: 'seq',\n    default: true,\n    nodeClass: YAMLSeq.YAMLSeq,\n    tag: 'tag:yaml.org,2002:seq',\n    resolve(seq, onError) {\n        if (!identity.isSeq(seq))\n            onError('Expected a sequence for this tag');\n        return seq;\n    },\n    createNode: (schema, obj, ctx) => YAMLSeq.YAMLSeq.from(schema, obj, ctx)\n};\n\nexports.seq = seq;\n","'use strict';\n\nvar stringifyString = require('../../stringify/stringifyString.js');\n\nconst string = {\n    identify: value => typeof value === 'string',\n    default: true,\n    tag: 'tag:yaml.org,2002:str',\n    resolve: str => str,\n    stringify(item, ctx, onComment, onChompKeep) {\n        ctx = Object.assign({ actualString: true }, ctx);\n        return stringifyString.stringifyString(item, ctx, onComment, onChompKeep);\n    }\n};\n\nexports.string = string;\n","'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\n\nconst nullTag = {\n    identify: value => value == null,\n    createNode: () => new Scalar.Scalar(null),\n    default: true,\n    tag: 'tag:yaml.org,2002:null',\n    test: /^(?:~|[Nn]ull|NULL)?$/,\n    resolve: () => new Scalar.Scalar(null),\n    stringify: ({ source }, ctx) => typeof source === 'string' && nullTag.test.test(source)\n        ? source\n        : ctx.options.nullStr\n};\n\nexports.nullTag = nullTag;\n","'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\n\nconst boolTag = {\n    identify: value => typeof value === 'boolean',\n    default: true,\n    tag: 'tag:yaml.org,2002:bool',\n    test: /^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,\n    resolve: str => new Scalar.Scalar(str[0] === 't' || str[0] === 'T'),\n    stringify({ source, value }, ctx) {\n        if (source && boolTag.test.test(source)) {\n            const sv = source[0] === 't' || source[0] === 'T';\n            if (value === sv)\n                return source;\n        }\n        return value ? ctx.options.trueStr : ctx.options.falseStr;\n    }\n};\n\nexports.boolTag = boolTag;\n","'use strict';\n\nfunction stringifyNumber({ format, minFractionDigits, tag, value }) {\n    if (typeof value === 'bigint')\n        return String(value);\n    const num = typeof value === 'number' ? value : Number(value);\n    if (!isFinite(num))\n        return isNaN(num) ? '.nan' : num < 0 ? '-.inf' : '.inf';\n    let n = Object.is(value, -0) ? '-0' : JSON.stringify(value);\n    if (!format &&\n        minFractionDigits &&\n        (!tag || tag === 'tag:yaml.org,2002:float') &&\n        /^-?\\d/.test(n) &&\n        !n.includes('e')) {\n        let i = n.indexOf('.');\n        if (i < 0) {\n            i = n.length;\n            n += '.';\n        }\n        let d = minFractionDigits - (n.length - i - 1);\n        while (d-- > 0)\n            n += '0';\n    }\n    return n;\n}\n\nexports.stringifyNumber = stringifyNumber;\n","'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\nconst floatNaN = {\n    identify: value => typeof value === 'number',\n    default: true,\n    tag: 'tag:yaml.org,2002:float',\n    test: /^(?:[-+]?\\.(?:inf|Inf|INF)|\\.nan|\\.NaN|\\.NAN)$/,\n    resolve: str => str.slice(-3).toLowerCase() === 'nan'\n        ? NaN\n        : str[0] === '-'\n            ? Number.NEGATIVE_INFINITY\n            : Number.POSITIVE_INFINITY,\n    stringify: stringifyNumber.stringifyNumber\n};\nconst floatExp = {\n    identify: value => typeof value === 'number',\n    default: true,\n    tag: 'tag:yaml.org,2002:float',\n    format: 'EXP',\n    test: /^[-+]?(?:\\.[0-9]+|[0-9]+(?:\\.[0-9]*)?)[eE][-+]?[0-9]+$/,\n    resolve: str => parseFloat(str),\n    stringify(node) {\n        const num = Number(node.value);\n        return isFinite(num) ? num.toExponential() : stringifyNumber.stringifyNumber(node);\n    }\n};\nconst float = {\n    identify: value => typeof value === 'number',\n    default: true,\n    tag: 'tag:yaml.org,2002:float',\n    test: /^[-+]?(?:\\.[0-9]+|[0-9]+\\.[0-9]*)$/,\n    resolve(str) {\n        const node = new Scalar.Scalar(parseFloat(str));\n        const dot = str.indexOf('.');\n        if (dot !== -1 && str[str.length - 1] === '0')\n            node.minFractionDigits = str.length - dot - 1;\n        return node;\n    },\n    stringify: stringifyNumber.stringifyNumber\n};\n\nexports.float = float;\nexports.floatExp = floatExp;\nexports.floatNaN = floatNaN;\n","'use strict';\n\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\nconst intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);\nconst intResolve = (str, offset, radix, { intAsBigInt }) => (intAsBigInt ? BigInt(str) : parseInt(str.substring(offset), radix));\nfunction intStringify(node, radix, prefix) {\n    const { value } = node;\n    if (intIdentify(value) && value >= 0)\n        return prefix + value.toString(radix);\n    return stringifyNumber.stringifyNumber(node);\n}\nconst intOct = {\n    identify: value => intIdentify(value) && value >= 0,\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    format: 'OCT',\n    test: /^0o[0-7]+$/,\n    resolve: (str, _onError, opt) => intResolve(str, 2, 8, opt),\n    stringify: node => intStringify(node, 8, '0o')\n};\nconst int = {\n    identify: intIdentify,\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    test: /^[-+]?[0-9]+$/,\n    resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),\n    stringify: stringifyNumber.stringifyNumber\n};\nconst intHex = {\n    identify: value => intIdentify(value) && value >= 0,\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    format: 'HEX',\n    test: /^0x[0-9a-fA-F]+$/,\n    resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),\n    stringify: node => intStringify(node, 16, '0x')\n};\n\nexports.int = int;\nexports.intHex = intHex;\nexports.intOct = intOct;\n","'use strict';\n\nvar map = require('../common/map.js');\nvar _null = require('../common/null.js');\nvar seq = require('../common/seq.js');\nvar string = require('../common/string.js');\nvar bool = require('./bool.js');\nvar float = require('./float.js');\nvar int = require('./int.js');\n\nconst schema = [\n    map.map,\n    seq.seq,\n    string.string,\n    _null.nullTag,\n    bool.boolTag,\n    int.intOct,\n    int.int,\n    int.intHex,\n    float.floatNaN,\n    float.floatExp,\n    float.float\n];\n\nexports.schema = schema;\n","'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\nvar map = require('../common/map.js');\nvar seq = require('../common/seq.js');\n\nfunction intIdentify(value) {\n    return typeof value === 'bigint' || Number.isInteger(value);\n}\nconst stringifyJSON = ({ value }) => JSON.stringify(value);\nconst jsonScalars = [\n    {\n        identify: value => typeof value === 'string',\n        default: true,\n        tag: 'tag:yaml.org,2002:str',\n        resolve: str => str,\n        stringify: stringifyJSON\n    },\n    {\n        identify: value => value == null,\n        createNode: () => new Scalar.Scalar(null),\n        default: true,\n        tag: 'tag:yaml.org,2002:null',\n        test: /^null$/,\n        resolve: () => null,\n        stringify: stringifyJSON\n    },\n    {\n        identify: value => typeof value === 'boolean',\n        default: true,\n        tag: 'tag:yaml.org,2002:bool',\n        test: /^true$|^false$/,\n        resolve: str => str === 'true',\n        stringify: stringifyJSON\n    },\n    {\n        identify: intIdentify,\n        default: true,\n        tag: 'tag:yaml.org,2002:int',\n        test: /^-?(?:0|[1-9][0-9]*)$/,\n        resolve: (str, _onError, { intAsBigInt }) => intAsBigInt ? BigInt(str) : parseInt(str, 10),\n        stringify: ({ value }) => intIdentify(value) ? value.toString() : JSON.stringify(value)\n    },\n    {\n        identify: value => typeof value === 'number',\n        default: true,\n        tag: 'tag:yaml.org,2002:float',\n        test: /^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,\n        resolve: str => parseFloat(str),\n        stringify: stringifyJSON\n    }\n];\nconst jsonError = {\n    default: true,\n    tag: '',\n    test: /^/,\n    resolve(str, onError) {\n        onError(`Unresolved plain scalar ${JSON.stringify(str)}`);\n        return str;\n    }\n};\nconst schema = [map.map, seq.seq].concat(jsonScalars, jsonError);\n\nexports.schema = schema;\n","'use strict';\n\nvar node_buffer = require('buffer');\nvar Scalar = require('../../nodes/Scalar.js');\nvar stringifyString = require('../../stringify/stringifyString.js');\n\nconst binary = {\n    identify: value => value instanceof Uint8Array, // Buffer inherits from Uint8Array\n    default: false,\n    tag: 'tag:yaml.org,2002:binary',\n    /**\n     * Returns a Buffer in node and an Uint8Array in browsers\n     *\n     * To use the resulting buffer as an image, you'll want to do something like:\n     *\n     *   const blob = new Blob([buffer], { type: 'image/jpeg' })\n     *   document.querySelector('#photo').src = URL.createObjectURL(blob)\n     */\n    resolve(src, onError) {\n        if (typeof node_buffer.Buffer === 'function') {\n            return node_buffer.Buffer.from(src, 'base64');\n        }\n        else if (typeof atob === 'function') {\n            // On IE 11, atob() can't handle newlines\n            const str = atob(src.replace(/[\\n\\r]/g, ''));\n            const buffer = new Uint8Array(str.length);\n            for (let i = 0; i < str.length; ++i)\n                buffer[i] = str.charCodeAt(i);\n            return buffer;\n        }\n        else {\n            onError('This environment does not support reading binary tags; either Buffer or atob is required');\n            return src;\n        }\n    },\n    stringify({ comment, type, value }, ctx, onComment, onChompKeep) {\n        if (!value)\n            return '';\n        const buf = value; // checked earlier by binary.identify()\n        let str;\n        if (typeof node_buffer.Buffer === 'function') {\n            str =\n                buf instanceof node_buffer.Buffer\n                    ? buf.toString('base64')\n                    : node_buffer.Buffer.from(buf.buffer).toString('base64');\n        }\n        else if (typeof btoa === 'function') {\n            let s = '';\n            for (let i = 0; i < buf.length; ++i)\n                s += String.fromCharCode(buf[i]);\n            str = btoa(s);\n        }\n        else {\n            throw new Error('This environment does not support writing binary tags; either Buffer or btoa is required');\n        }\n        type ?? (type = Scalar.Scalar.BLOCK_LITERAL);\n        if (type !== Scalar.Scalar.QUOTE_DOUBLE) {\n            const lineWidth = Math.max(ctx.options.lineWidth - ctx.indent.length, ctx.options.minContentWidth);\n            const n = Math.ceil(str.length / lineWidth);\n            const lines = new Array(n);\n            for (let i = 0, o = 0; i < n; ++i, o += lineWidth) {\n                lines[i] = str.substr(o, lineWidth);\n            }\n            str = lines.join(type === Scalar.Scalar.BLOCK_LITERAL ? '\\n' : ' ');\n        }\n        return stringifyString.stringifyString({ comment, type, value: str }, ctx, onComment, onChompKeep);\n    }\n};\n\nexports.binary = binary;\n","'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar Pair = require('../../nodes/Pair.js');\nvar Scalar = require('../../nodes/Scalar.js');\nvar YAMLSeq = require('../../nodes/YAMLSeq.js');\n\nfunction resolvePairs(seq, onError) {\n    if (identity.isSeq(seq)) {\n        for (let i = 0; i < seq.items.length; ++i) {\n            let item = seq.items[i];\n            if (identity.isPair(item))\n                continue;\n            else if (identity.isMap(item)) {\n                if (item.items.length > 1)\n                    onError('Each pair must have its own sequence indicator');\n                const pair = item.items[0] || new Pair.Pair(new Scalar.Scalar(null));\n                if (item.commentBefore)\n                    pair.key.commentBefore = pair.key.commentBefore\n                        ? `${item.commentBefore}\\n${pair.key.commentBefore}`\n                        : item.commentBefore;\n                if (item.comment) {\n                    const cn = pair.value ?? pair.key;\n                    cn.comment = cn.comment\n                        ? `${item.comment}\\n${cn.comment}`\n                        : item.comment;\n                }\n                item = pair;\n            }\n            seq.items[i] = identity.isPair(item) ? item : new Pair.Pair(item);\n        }\n    }\n    else\n        onError('Expected a sequence for this tag');\n    return seq;\n}\nfunction createPairs(schema, iterable, ctx) {\n    const { replacer } = ctx;\n    const pairs = new YAMLSeq.YAMLSeq(schema);\n    pairs.tag = 'tag:yaml.org,2002:pairs';\n    let i = 0;\n    if (iterable && Symbol.iterator in Object(iterable))\n        for (let it of iterable) {\n            if (typeof replacer === 'function')\n                it = replacer.call(iterable, String(i++), it);\n            let key, value;\n            if (Array.isArray(it)) {\n                if (it.length === 2) {\n                    key = it[0];\n                    value = it[1];\n                }\n                else\n                    throw new TypeError(`Expected [key, value] tuple: ${it}`);\n            }\n            else if (it && it instanceof Object) {\n                const keys = Object.keys(it);\n                if (keys.length === 1) {\n                    key = keys[0];\n                    value = it[key];\n                }\n                else {\n                    throw new TypeError(`Expected tuple with one key, not ${keys.length} keys`);\n                }\n            }\n            else {\n                key = it;\n            }\n            pairs.items.push(Pair.createPair(key, value, ctx));\n        }\n    return pairs;\n}\nconst pairs = {\n    collection: 'seq',\n    default: false,\n    tag: 'tag:yaml.org,2002:pairs',\n    resolve: resolvePairs,\n    createNode: createPairs\n};\n\nexports.createPairs = createPairs;\nexports.pairs = pairs;\nexports.resolvePairs = resolvePairs;\n","'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar toJS = require('../../nodes/toJS.js');\nvar YAMLMap = require('../../nodes/YAMLMap.js');\nvar YAMLSeq = require('../../nodes/YAMLSeq.js');\nvar pairs = require('./pairs.js');\n\nclass YAMLOMap extends YAMLSeq.YAMLSeq {\n    constructor() {\n        super();\n        this.add = YAMLMap.YAMLMap.prototype.add.bind(this);\n        this.delete = YAMLMap.YAMLMap.prototype.delete.bind(this);\n        this.get = YAMLMap.YAMLMap.prototype.get.bind(this);\n        this.has = YAMLMap.YAMLMap.prototype.has.bind(this);\n        this.set = YAMLMap.YAMLMap.prototype.set.bind(this);\n        this.tag = YAMLOMap.tag;\n    }\n    /**\n     * If `ctx` is given, the return type is actually `Map<unknown, unknown>`,\n     * but TypeScript won't allow widening the signature of a child method.\n     */\n    toJSON(_, ctx) {\n        if (!ctx)\n            return super.toJSON(_);\n        const map = new Map();\n        if (ctx?.onCreate)\n            ctx.onCreate(map);\n        for (const pair of this.items) {\n            let key, value;\n            if (identity.isPair(pair)) {\n                key = toJS.toJS(pair.key, '', ctx);\n                value = toJS.toJS(pair.value, key, ctx);\n            }\n            else {\n                key = toJS.toJS(pair, '', ctx);\n            }\n            if (map.has(key))\n                throw new Error('Ordered maps must not include duplicate keys');\n            map.set(key, value);\n        }\n        return map;\n    }\n    static from(schema, iterable, ctx) {\n        const pairs$1 = pairs.createPairs(schema, iterable, ctx);\n        const omap = new this();\n        omap.items = pairs$1.items;\n        return omap;\n    }\n}\nYAMLOMap.tag = 'tag:yaml.org,2002:omap';\nconst omap = {\n    collection: 'seq',\n    identify: value => value instanceof Map,\n    nodeClass: YAMLOMap,\n    default: false,\n    tag: 'tag:yaml.org,2002:omap',\n    resolve(seq, onError) {\n        const pairs$1 = pairs.resolvePairs(seq, onError);\n        const seenKeys = [];\n        for (const { key } of pairs$1.items) {\n            if (identity.isScalar(key)) {\n                if (seenKeys.includes(key.value)) {\n                    onError(`Ordered maps must not include duplicate keys: ${key.value}`);\n                }\n                else {\n                    seenKeys.push(key.value);\n                }\n            }\n        }\n        return Object.assign(new YAMLOMap(), pairs$1);\n    },\n    createNode: (schema, iterable, ctx) => YAMLOMap.from(schema, iterable, ctx)\n};\n\nexports.YAMLOMap = YAMLOMap;\nexports.omap = omap;\n","'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\n\nfunction boolStringify({ value, source }, ctx) {\n    const boolObj = value ? trueTag : falseTag;\n    if (source && boolObj.test.test(source))\n        return source;\n    return value ? ctx.options.trueStr : ctx.options.falseStr;\n}\nconst trueTag = {\n    identify: value => value === true,\n    default: true,\n    tag: 'tag:yaml.org,2002:bool',\n    test: /^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,\n    resolve: () => new Scalar.Scalar(true),\n    stringify: boolStringify\n};\nconst falseTag = {\n    identify: value => value === false,\n    default: true,\n    tag: 'tag:yaml.org,2002:bool',\n    test: /^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,\n    resolve: () => new Scalar.Scalar(false),\n    stringify: boolStringify\n};\n\nexports.falseTag = falseTag;\nexports.trueTag = trueTag;\n","'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\nconst floatNaN = {\n    identify: value => typeof value === 'number',\n    default: true,\n    tag: 'tag:yaml.org,2002:float',\n    test: /^(?:[-+]?\\.(?:inf|Inf|INF)|\\.nan|\\.NaN|\\.NAN)$/,\n    resolve: (str) => str.slice(-3).toLowerCase() === 'nan'\n        ? NaN\n        : str[0] === '-'\n            ? Number.NEGATIVE_INFINITY\n            : Number.POSITIVE_INFINITY,\n    stringify: stringifyNumber.stringifyNumber\n};\nconst floatExp = {\n    identify: value => typeof value === 'number',\n    default: true,\n    tag: 'tag:yaml.org,2002:float',\n    format: 'EXP',\n    test: /^[-+]?(?:[0-9][0-9_]*)?(?:\\.[0-9_]*)?[eE][-+]?[0-9]+$/,\n    resolve: (str) => parseFloat(str.replace(/_/g, '')),\n    stringify(node) {\n        const num = Number(node.value);\n        return isFinite(num) ? num.toExponential() : stringifyNumber.stringifyNumber(node);\n    }\n};\nconst float = {\n    identify: value => typeof value === 'number',\n    default: true,\n    tag: 'tag:yaml.org,2002:float',\n    test: /^[-+]?(?:[0-9][0-9_]*)?\\.[0-9_]*$/,\n    resolve(str) {\n        const node = new Scalar.Scalar(parseFloat(str.replace(/_/g, '')));\n        const dot = str.indexOf('.');\n        if (dot !== -1) {\n            const f = str.substring(dot + 1).replace(/_/g, '');\n            if (f[f.length - 1] === '0')\n                node.minFractionDigits = f.length;\n        }\n        return node;\n    },\n    stringify: stringifyNumber.stringifyNumber\n};\n\nexports.float = float;\nexports.floatExp = floatExp;\nexports.floatNaN = floatNaN;\n","'use strict';\n\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\nconst intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);\nfunction intResolve(str, offset, radix, { intAsBigInt }) {\n    const sign = str[0];\n    if (sign === '-' || sign === '+')\n        offset += 1;\n    str = str.substring(offset).replace(/_/g, '');\n    if (intAsBigInt) {\n        switch (radix) {\n            case 2:\n                str = `0b${str}`;\n                break;\n            case 8:\n                str = `0o${str}`;\n                break;\n            case 16:\n                str = `0x${str}`;\n                break;\n        }\n        const n = BigInt(str);\n        return sign === '-' ? BigInt(-1) * n : n;\n    }\n    const n = parseInt(str, radix);\n    return sign === '-' ? -1 * n : n;\n}\nfunction intStringify(node, radix, prefix) {\n    const { value } = node;\n    if (intIdentify(value)) {\n        const str = value.toString(radix);\n        return value < 0 ? '-' + prefix + str.substr(1) : prefix + str;\n    }\n    return stringifyNumber.stringifyNumber(node);\n}\nconst intBin = {\n    identify: intIdentify,\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    format: 'BIN',\n    test: /^[-+]?0b[0-1_]+$/,\n    resolve: (str, _onError, opt) => intResolve(str, 2, 2, opt),\n    stringify: node => intStringify(node, 2, '0b')\n};\nconst intOct = {\n    identify: intIdentify,\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    format: 'OCT',\n    test: /^[-+]?0[0-7_]+$/,\n    resolve: (str, _onError, opt) => intResolve(str, 1, 8, opt),\n    stringify: node => intStringify(node, 8, '0')\n};\nconst int = {\n    identify: intIdentify,\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    test: /^[-+]?[0-9][0-9_]*$/,\n    resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),\n    stringify: stringifyNumber.stringifyNumber\n};\nconst intHex = {\n    identify: intIdentify,\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    format: 'HEX',\n    test: /^[-+]?0x[0-9a-fA-F_]+$/,\n    resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),\n    stringify: node => intStringify(node, 16, '0x')\n};\n\nexports.int = int;\nexports.intBin = intBin;\nexports.intHex = intHex;\nexports.intOct = intOct;\n","'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar Pair = require('../../nodes/Pair.js');\nvar YAMLMap = require('../../nodes/YAMLMap.js');\n\nclass YAMLSet extends YAMLMap.YAMLMap {\n    constructor(schema) {\n        super(schema);\n        this.tag = YAMLSet.tag;\n    }\n    add(key) {\n        let pair;\n        if (identity.isPair(key))\n            pair = key;\n        else if (key &&\n            typeof key === 'object' &&\n            'key' in key &&\n            'value' in key &&\n            key.value === null)\n            pair = new Pair.Pair(key.key, null);\n        else\n            pair = new Pair.Pair(key, null);\n        const prev = YAMLMap.findPair(this.items, pair.key);\n        if (!prev)\n            this.items.push(pair);\n    }\n    /**\n     * If `keepPair` is `true`, returns the Pair matching `key`.\n     * Otherwise, returns the value of that Pair's key.\n     */\n    get(key, keepPair) {\n        const pair = YAMLMap.findPair(this.items, key);\n        return !keepPair && identity.isPair(pair)\n            ? identity.isScalar(pair.key)\n                ? pair.key.value\n                : pair.key\n            : pair;\n    }\n    set(key, value) {\n        if (typeof value !== 'boolean')\n            throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof value}`);\n        const prev = YAMLMap.findPair(this.items, key);\n        if (prev && !value) {\n            this.items.splice(this.items.indexOf(prev), 1);\n        }\n        else if (!prev && value) {\n            this.items.push(new Pair.Pair(key));\n        }\n    }\n    toJSON(_, ctx) {\n        return super.toJSON(_, ctx, Set);\n    }\n    toString(ctx, onComment, onChompKeep) {\n        if (!ctx)\n            return JSON.stringify(this);\n        if (this.hasAllNullValues(true))\n            return super.toString(Object.assign({}, ctx, { allNullValues: true }), onComment, onChompKeep);\n        else\n            throw new Error('Set items must all have null values');\n    }\n    static from(schema, iterable, ctx) {\n        const { replacer } = ctx;\n        const set = new this(schema);\n        if (iterable && Symbol.iterator in Object(iterable))\n            for (let value of iterable) {\n                if (typeof replacer === 'function')\n                    value = replacer.call(iterable, value, value);\n                set.items.push(Pair.createPair(value, null, ctx));\n            }\n        return set;\n    }\n}\nYAMLSet.tag = 'tag:yaml.org,2002:set';\nconst set = {\n    collection: 'map',\n    identify: value => value instanceof Set,\n    nodeClass: YAMLSet,\n    default: false,\n    tag: 'tag:yaml.org,2002:set',\n    createNode: (schema, iterable, ctx) => YAMLSet.from(schema, iterable, ctx),\n    resolve(map, onError) {\n        if (identity.isMap(map)) {\n            if (map.hasAllNullValues(true))\n                return Object.assign(new YAMLSet(), map);\n            else\n                onError('Set items must all have null values');\n        }\n        else\n            onError('Expected a mapping for this tag');\n        return map;\n    }\n};\n\nexports.YAMLSet = YAMLSet;\nexports.set = set;\n","'use strict';\n\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\n/** Internal types handle bigint as number, because TS can't figure it out. */\nfunction parseSexagesimal(str, asBigInt) {\n    const sign = str[0];\n    const parts = sign === '-' || sign === '+' ? str.substring(1) : str;\n    const num = (n) => asBigInt ? BigInt(n) : Number(n);\n    const res = parts\n        .replace(/_/g, '')\n        .split(':')\n        .reduce((res, p) => res * num(60) + num(p), num(0));\n    return (sign === '-' ? num(-1) * res : res);\n}\n/**\n * hhhh:mm:ss.sss\n *\n * Internal types handle bigint as number, because TS can't figure it out.\n */\nfunction stringifySexagesimal(node) {\n    let { value } = node;\n    let num = (n) => n;\n    if (typeof value === 'bigint')\n        num = n => BigInt(n);\n    else if (isNaN(value) || !isFinite(value))\n        return stringifyNumber.stringifyNumber(node);\n    let sign = '';\n    if (value < 0) {\n        sign = '-';\n        value *= num(-1);\n    }\n    const _60 = num(60);\n    const parts = [value % _60]; // seconds, including ms\n    if (value < 60) {\n        parts.unshift(0); // at least one : is required\n    }\n    else {\n        value = (value - parts[0]) / _60;\n        parts.unshift(value % _60); // minutes\n        if (value >= 60) {\n            value = (value - parts[0]) / _60;\n            parts.unshift(value); // hours\n        }\n    }\n    return (sign +\n        parts\n            .map(n => String(n).padStart(2, '0'))\n            .join(':')\n            .replace(/000000\\d*$/, '') // % 60 may introduce error\n    );\n}\nconst intTime = {\n    identify: value => typeof value === 'bigint' || Number.isInteger(value),\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    format: 'TIME',\n    test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,\n    resolve: (str, _onError, { intAsBigInt }) => parseSexagesimal(str, intAsBigInt),\n    stringify: stringifySexagesimal\n};\nconst floatTime = {\n    identify: value => typeof value === 'number',\n    default: true,\n    tag: 'tag:yaml.org,2002:float',\n    format: 'TIME',\n    test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*$/,\n    resolve: str => parseSexagesimal(str, false),\n    stringify: stringifySexagesimal\n};\nconst timestamp = {\n    identify: value => value instanceof Date,\n    default: true,\n    tag: 'tag:yaml.org,2002:timestamp',\n    // If the time zone is omitted, the timestamp is assumed to be specified in UTC. The time part\n    // may be omitted altogether, resulting in a date format. In such a case, the time part is\n    // assumed to be 00:00:00Z (start of day, UTC).\n    test: RegExp('^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})' + // YYYY-Mm-Dd\n        '(?:' + // time is optional\n        '(?:t|T|[ \\\\t]+)' + // t | T | whitespace\n        '([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\\\.[0-9]+)?)' + // Hh:Mm:Ss(.ss)?\n        '(?:[ \\\\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?' + // Z | +5 | -03:30\n        ')?$'),\n    resolve(str) {\n        const match = str.match(timestamp.test);\n        if (!match)\n            throw new Error('!!timestamp expects a date, starting with yyyy-mm-dd');\n        const [, year, month, day, hour, minute, second] = match.map(Number);\n        const millisec = match[7] ? Number((match[7] + '00').substr(1, 3)) : 0;\n        let date = Date.UTC(year, month - 1, day, hour || 0, minute || 0, second || 0, millisec);\n        const tz = match[8];\n        if (tz && tz !== 'Z') {\n            let d = parseSexagesimal(tz, false);\n            if (Math.abs(d) < 30)\n                d *= 60;\n            date -= 60000 * d;\n        }\n        return new Date(date);\n    },\n    stringify: ({ value }) => value?.toISOString().replace(/(T00:00:00)?\\.000Z$/, '') ?? ''\n};\n\nexports.floatTime = floatTime;\nexports.intTime = intTime;\nexports.timestamp = timestamp;\n","'use strict';\n\nvar map = require('../common/map.js');\nvar _null = require('../common/null.js');\nvar seq = require('../common/seq.js');\nvar string = require('../common/string.js');\nvar binary = require('./binary.js');\nvar bool = require('./bool.js');\nvar float = require('./float.js');\nvar int = require('./int.js');\nvar merge = require('./merge.js');\nvar omap = require('./omap.js');\nvar pairs = require('./pairs.js');\nvar set = require('./set.js');\nvar timestamp = require('./timestamp.js');\n\nconst schema = [\n    map.map,\n    seq.seq,\n    string.string,\n    _null.nullTag,\n    bool.trueTag,\n    bool.falseTag,\n    int.intBin,\n    int.intOct,\n    int.int,\n    int.intHex,\n    float.floatNaN,\n    float.floatExp,\n    float.float,\n    binary.binary,\n    merge.merge,\n    omap.omap,\n    pairs.pairs,\n    set.set,\n    timestamp.intTime,\n    timestamp.floatTime,\n    timestamp.timestamp\n];\n\nexports.schema = schema;\n","'use strict';\n\nvar map = require('./common/map.js');\nvar _null = require('./common/null.js');\nvar seq = require('./common/seq.js');\nvar string = require('./common/string.js');\nvar bool = require('./core/bool.js');\nvar float = require('./core/float.js');\nvar int = require('./core/int.js');\nvar schema = require('./core/schema.js');\nvar schema$1 = require('./json/schema.js');\nvar binary = require('./yaml-1.1/binary.js');\nvar merge = require('./yaml-1.1/merge.js');\nvar omap = require('./yaml-1.1/omap.js');\nvar pairs = require('./yaml-1.1/pairs.js');\nvar schema$2 = require('./yaml-1.1/schema.js');\nvar set = require('./yaml-1.1/set.js');\nvar timestamp = require('./yaml-1.1/timestamp.js');\n\nconst schemas = new Map([\n    ['core', schema.schema],\n    ['failsafe', [map.map, seq.seq, string.string]],\n    ['json', schema$1.schema],\n    ['yaml11', schema$2.schema],\n    ['yaml-1.1', schema$2.schema]\n]);\nconst tagsByName = {\n    binary: binary.binary,\n    bool: bool.boolTag,\n    float: float.float,\n    floatExp: float.floatExp,\n    floatNaN: float.floatNaN,\n    floatTime: timestamp.floatTime,\n    int: int.int,\n    intHex: int.intHex,\n    intOct: int.intOct,\n    intTime: timestamp.intTime,\n    map: map.map,\n    merge: merge.merge,\n    null: _null.nullTag,\n    omap: omap.omap,\n    pairs: pairs.pairs,\n    seq: seq.seq,\n    set: set.set,\n    timestamp: timestamp.timestamp\n};\nconst coreKnownTags = {\n    'tag:yaml.org,2002:binary': binary.binary,\n    'tag:yaml.org,2002:merge': merge.merge,\n    'tag:yaml.org,2002:omap': omap.omap,\n    'tag:yaml.org,2002:pairs': pairs.pairs,\n    'tag:yaml.org,2002:set': set.set,\n    'tag:yaml.org,2002:timestamp': timestamp.timestamp\n};\nfunction getTags(customTags, schemaName, addMergeTag) {\n    const schemaTags = schemas.get(schemaName);\n    if (schemaTags && !customTags) {\n        return addMergeTag && !schemaTags.includes(merge.merge)\n            ? schemaTags.concat(merge.merge)\n            : schemaTags.slice();\n    }\n    let tags = schemaTags;\n    if (!tags) {\n        if (Array.isArray(customTags))\n            tags = [];\n        else {\n            const keys = Array.from(schemas.keys())\n                .filter(key => key !== 'yaml11')\n                .map(key => JSON.stringify(key))\n                .join(', ');\n            throw new Error(`Unknown schema \"${schemaName}\"; use one of ${keys} or define customTags array`);\n        }\n    }\n    if (Array.isArray(customTags)) {\n        for (const tag of customTags)\n            tags = tags.concat(tag);\n    }\n    else if (typeof customTags === 'function') {\n        tags = customTags(tags.slice());\n    }\n    if (addMergeTag)\n        tags = tags.concat(merge.merge);\n    return tags.reduce((tags, tag) => {\n        const tagObj = typeof tag === 'string' ? tagsByName[tag] : tag;\n        if (!tagObj) {\n            const tagName = JSON.stringify(tag);\n            const keys = Object.keys(tagsByName)\n                .map(key => JSON.stringify(key))\n                .join(', ');\n            throw new Error(`Unknown custom tag ${tagName}; use one of ${keys}`);\n        }\n        if (!tags.includes(tagObj))\n            tags.push(tagObj);\n        return tags;\n    }, []);\n}\n\nexports.coreKnownTags = coreKnownTags;\nexports.getTags = getTags;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar map = require('./common/map.js');\nvar seq = require('./common/seq.js');\nvar string = require('./common/string.js');\nvar tags = require('./tags.js');\n\nconst sortMapEntriesByKey = (a, b) => a.key < b.key ? -1 : a.key > b.key ? 1 : 0;\nclass Schema {\n    constructor({ compat, customTags, merge, resolveKnownTags, schema, sortMapEntries, toStringDefaults }) {\n        this.compat = Array.isArray(compat)\n            ? tags.getTags(compat, 'compat')\n            : compat\n                ? tags.getTags(null, compat)\n                : null;\n        this.name = (typeof schema === 'string' && schema) || 'core';\n        this.knownTags = resolveKnownTags ? tags.coreKnownTags : {};\n        this.tags = tags.getTags(customTags, this.name, merge);\n        this.toStringOptions = toStringDefaults ?? null;\n        Object.defineProperty(this, identity.MAP, { value: map.map });\n        Object.defineProperty(this, identity.SCALAR, { value: string.string });\n        Object.defineProperty(this, identity.SEQ, { value: seq.seq });\n        // Used by createMap()\n        this.sortMapEntries =\n            typeof sortMapEntries === 'function'\n                ? sortMapEntries\n                : sortMapEntries === true\n                    ? sortMapEntriesByKey\n                    : null;\n    }\n    clone() {\n        const copy = Object.create(Schema.prototype, Object.getOwnPropertyDescriptors(this));\n        copy.tags = this.tags.slice();\n        return copy;\n    }\n}\n\nexports.Schema = Schema;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar stringify = require('./stringify.js');\nvar stringifyComment = require('./stringifyComment.js');\n\nfunction stringifyDocument(doc, options) {\n    const lines = [];\n    let hasDirectives = options.directives === true;\n    if (options.directives !== false && doc.directives) {\n        const dir = doc.directives.toString(doc);\n        if (dir) {\n            lines.push(dir);\n            hasDirectives = true;\n        }\n        else if (doc.directives.docStart)\n            hasDirectives = true;\n    }\n    if (hasDirectives)\n        lines.push('---');\n    const ctx = stringify.createStringifyContext(doc, options);\n    const { commentString } = ctx.options;\n    if (doc.commentBefore) {\n        if (lines.length !== 1)\n            lines.unshift('');\n        const cs = commentString(doc.commentBefore);\n        lines.unshift(stringifyComment.indentComment(cs, ''));\n    }\n    let chompKeep = false;\n    let contentComment = null;\n    if (doc.contents) {\n        if (identity.isNode(doc.contents)) {\n            if (doc.contents.spaceBefore && hasDirectives)\n                lines.push('');\n            if (doc.contents.commentBefore) {\n                const cs = commentString(doc.contents.commentBefore);\n                lines.push(stringifyComment.indentComment(cs, ''));\n            }\n            // top-level block scalars need to be indented if followed by a comment\n            ctx.forceBlockIndent = !!doc.comment;\n            contentComment = doc.contents.comment;\n        }\n        const onChompKeep = contentComment ? undefined : () => (chompKeep = true);\n        let body = stringify.stringify(doc.contents, ctx, () => (contentComment = null), onChompKeep);\n        if (contentComment)\n            body += stringifyComment.lineComment(body, '', commentString(contentComment));\n        if ((body[0] === '|' || body[0] === '>') &&\n            lines[lines.length - 1] === '---') {\n            // Top-level block scalars with a preceding doc marker ought to use the\n            // same line for their header.\n            lines[lines.length - 1] = `--- ${body}`;\n        }\n        else\n            lines.push(body);\n    }\n    else {\n        lines.push(stringify.stringify(doc.contents, ctx));\n    }\n    if (doc.directives?.docEnd) {\n        if (doc.comment) {\n            const cs = commentString(doc.comment);\n            if (cs.includes('\\n')) {\n                lines.push('...');\n                lines.push(stringifyComment.indentComment(cs, ''));\n            }\n            else {\n                lines.push(`... ${cs}`);\n            }\n        }\n        else {\n            lines.push('...');\n        }\n    }\n    else {\n        let dc = doc.comment;\n        if (dc && chompKeep)\n            dc = dc.replace(/^\\n+/, '');\n        if (dc) {\n            if ((!chompKeep || contentComment) && lines[lines.length - 1] !== '')\n                lines.push('');\n            lines.push(stringifyComment.indentComment(commentString(dc), ''));\n        }\n    }\n    return lines.join('\\n') + '\\n';\n}\n\nexports.stringifyDocument = stringifyDocument;\n","'use strict';\n\nvar Alias = require('../nodes/Alias.js');\nvar Collection = require('../nodes/Collection.js');\nvar identity = require('../nodes/identity.js');\nvar Pair = require('../nodes/Pair.js');\nvar toJS = require('../nodes/toJS.js');\nvar Schema = require('../schema/Schema.js');\nvar stringifyDocument = require('../stringify/stringifyDocument.js');\nvar anchors = require('./anchors.js');\nvar applyReviver = require('./applyReviver.js');\nvar createNode = require('./createNode.js');\nvar directives = require('./directives.js');\n\nclass Document {\n    constructor(value, replacer, options) {\n        /** A comment before this Document */\n        this.commentBefore = null;\n        /** A comment immediately after this Document */\n        this.comment = null;\n        /** Errors encountered during parsing. */\n        this.errors = [];\n        /** Warnings encountered during parsing. */\n        this.warnings = [];\n        Object.defineProperty(this, identity.NODE_TYPE, { value: identity.DOC });\n        let _replacer = null;\n        if (typeof replacer === 'function' || Array.isArray(replacer)) {\n            _replacer = replacer;\n        }\n        else if (options === undefined && replacer) {\n            options = replacer;\n            replacer = undefined;\n        }\n        const opt = Object.assign({\n            intAsBigInt: false,\n            keepSourceTokens: false,\n            logLevel: 'warn',\n            prettyErrors: true,\n            strict: true,\n            stringKeys: false,\n            uniqueKeys: true,\n            version: '1.2'\n        }, options);\n        this.options = opt;\n        let { version } = opt;\n        if (options?._directives) {\n            this.directives = options._directives.atDocument();\n            if (this.directives.yaml.explicit)\n                version = this.directives.yaml.version;\n        }\n        else\n            this.directives = new directives.Directives({ version });\n        this.setSchema(version, options);\n        // @ts-expect-error We can't really know that this matches Contents.\n        this.contents =\n            value === undefined ? null : this.createNode(value, _replacer, options);\n    }\n    /**\n     * Create a deep copy of this Document and its contents.\n     *\n     * Custom Node values that inherit from `Object` still refer to their original instances.\n     */\n    clone() {\n        const copy = Object.create(Document.prototype, {\n            [identity.NODE_TYPE]: { value: identity.DOC }\n        });\n        copy.commentBefore = this.commentBefore;\n        copy.comment = this.comment;\n        copy.errors = this.errors.slice();\n        copy.warnings = this.warnings.slice();\n        copy.options = Object.assign({}, this.options);\n        if (this.directives)\n            copy.directives = this.directives.clone();\n        copy.schema = this.schema.clone();\n        // @ts-expect-error We can't really know that this matches Contents.\n        copy.contents = identity.isNode(this.contents)\n            ? this.contents.clone(copy.schema)\n            : this.contents;\n        if (this.range)\n            copy.range = this.range.slice();\n        return copy;\n    }\n    /** Adds a value to the document. */\n    add(value) {\n        if (assertCollection(this.contents))\n            this.contents.add(value);\n    }\n    /** Adds a value to the document. */\n    addIn(path, value) {\n        if (assertCollection(this.contents))\n            this.contents.addIn(path, value);\n    }\n    /**\n     * Create a new `Alias` node, ensuring that the target `node` has the required anchor.\n     *\n     * If `node` already has an anchor, `name` is ignored.\n     * Otherwise, the `node.anchor` value will be set to `name`,\n     * or if an anchor with that name is already present in the document,\n     * `name` will be used as a prefix for a new unique anchor.\n     * If `name` is undefined, the generated anchor will use 'a' as a prefix.\n     */\n    createAlias(node, name) {\n        if (!node.anchor) {\n            const prev = anchors.anchorNames(this);\n            node.anchor =\n                // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n                !name || prev.has(name) ? anchors.findNewAnchor(name || 'a', prev) : name;\n        }\n        return new Alias.Alias(node.anchor);\n    }\n    createNode(value, replacer, options) {\n        let _replacer = undefined;\n        if (typeof replacer === 'function') {\n            value = replacer.call({ '': value }, '', value);\n            _replacer = replacer;\n        }\n        else if (Array.isArray(replacer)) {\n            const keyToStr = (v) => typeof v === 'number' || v instanceof String || v instanceof Number;\n            const asStr = replacer.filter(keyToStr).map(String);\n            if (asStr.length > 0)\n                replacer = replacer.concat(asStr);\n            _replacer = replacer;\n        }\n        else if (options === undefined && replacer) {\n            options = replacer;\n            replacer = undefined;\n        }\n        const { aliasDuplicateObjects, anchorPrefix, flow, keepUndefined, onTagObj, tag } = options ?? {};\n        const { onAnchor, setAnchors, sourceObjects } = anchors.createNodeAnchors(this, \n        // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n        anchorPrefix || 'a');\n        const ctx = {\n            aliasDuplicateObjects: aliasDuplicateObjects ?? true,\n            keepUndefined: keepUndefined ?? false,\n            onAnchor,\n            onTagObj,\n            replacer: _replacer,\n            schema: this.schema,\n            sourceObjects\n        };\n        const node = createNode.createNode(value, tag, ctx);\n        if (flow && identity.isCollection(node))\n            node.flow = true;\n        setAnchors();\n        return node;\n    }\n    /**\n     * Convert a key and a value into a `Pair` using the current schema,\n     * recursively wrapping all values as `Scalar` or `Collection` nodes.\n     */\n    createPair(key, value, options = {}) {\n        const k = this.createNode(key, null, options);\n        const v = this.createNode(value, null, options);\n        return new Pair.Pair(k, v);\n    }\n    /**\n     * Removes a value from the document.\n     * @returns `true` if the item was found and removed.\n     */\n    delete(key) {\n        return assertCollection(this.contents) ? this.contents.delete(key) : false;\n    }\n    /**\n     * Removes a value from the document.\n     * @returns `true` if the item was found and removed.\n     */\n    deleteIn(path) {\n        if (Collection.isEmptyPath(path)) {\n            if (this.contents == null)\n                return false;\n            // @ts-expect-error Presumed impossible if Strict extends false\n            this.contents = null;\n            return true;\n        }\n        return assertCollection(this.contents)\n            ? this.contents.deleteIn(path)\n            : false;\n    }\n    /**\n     * Returns item at `key`, or `undefined` if not found. By default unwraps\n     * scalar values from their surrounding node; to disable set `keepScalar` to\n     * `true` (collections are always returned intact).\n     */\n    get(key, keepScalar) {\n        return identity.isCollection(this.contents)\n            ? this.contents.get(key, keepScalar)\n            : undefined;\n    }\n    /**\n     * Returns item at `path`, or `undefined` if not found. By default unwraps\n     * scalar values from their surrounding node; to disable set `keepScalar` to\n     * `true` (collections are always returned intact).\n     */\n    getIn(path, keepScalar) {\n        if (Collection.isEmptyPath(path))\n            return !keepScalar && identity.isScalar(this.contents)\n                ? this.contents.value\n                : this.contents;\n        return identity.isCollection(this.contents)\n            ? this.contents.getIn(path, keepScalar)\n            : undefined;\n    }\n    /**\n     * Checks if the document includes a value with the key `key`.\n     */\n    has(key) {\n        return identity.isCollection(this.contents) ? this.contents.has(key) : false;\n    }\n    /**\n     * Checks if the document includes a value at `path`.\n     */\n    hasIn(path) {\n        if (Collection.isEmptyPath(path))\n            return this.contents !== undefined;\n        return identity.isCollection(this.contents) ? this.contents.hasIn(path) : false;\n    }\n    /**\n     * Sets a value in this document. For `!!set`, `value` needs to be a\n     * boolean to add/remove the item from the set.\n     */\n    set(key, value) {\n        if (this.contents == null) {\n            // @ts-expect-error We can't really know that this matches Contents.\n            this.contents = Collection.collectionFromPath(this.schema, [key], value);\n        }\n        else if (assertCollection(this.contents)) {\n            this.contents.set(key, value);\n        }\n    }\n    /**\n     * Sets a value in this document. For `!!set`, `value` needs to be a\n     * boolean to add/remove the item from the set.\n     */\n    setIn(path, value) {\n        if (Collection.isEmptyPath(path)) {\n            // @ts-expect-error We can't really know that this matches Contents.\n            this.contents = value;\n        }\n        else if (this.contents == null) {\n            // @ts-expect-error We can't really know that this matches Contents.\n            this.contents = Collection.collectionFromPath(this.schema, Array.from(path), value);\n        }\n        else if (assertCollection(this.contents)) {\n            this.contents.setIn(path, value);\n        }\n    }\n    /**\n     * Change the YAML version and schema used by the document.\n     * A `null` version disables support for directives, explicit tags, anchors, and aliases.\n     * It also requires the `schema` option to be given as a `Schema` instance value.\n     *\n     * Overrides all previously set schema options.\n     */\n    setSchema(version, options = {}) {\n        if (typeof version === 'number')\n            version = String(version);\n        let opt;\n        switch (version) {\n            case '1.1':\n                if (this.directives)\n                    this.directives.yaml.version = '1.1';\n                else\n                    this.directives = new directives.Directives({ version: '1.1' });\n                opt = { resolveKnownTags: false, schema: 'yaml-1.1' };\n                break;\n            case '1.2':\n            case 'next':\n                if (this.directives)\n                    this.directives.yaml.version = version;\n                else\n                    this.directives = new directives.Directives({ version });\n                opt = { resolveKnownTags: true, schema: 'core' };\n                break;\n            case null:\n                if (this.directives)\n                    delete this.directives;\n                opt = null;\n                break;\n            default: {\n                const sv = JSON.stringify(version);\n                throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${sv}`);\n            }\n        }\n        // Not using `instanceof Schema` to allow for duck typing\n        if (options.schema instanceof Object)\n            this.schema = options.schema;\n        else if (opt)\n            this.schema = new Schema.Schema(Object.assign(opt, options));\n        else\n            throw new Error(`With a null YAML version, the { schema: Schema } option is required`);\n    }\n    // json & jsonArg are only used from toJSON()\n    toJS({ json, jsonArg, mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {\n        const ctx = {\n            anchors: new Map(),\n            doc: this,\n            keep: !json,\n            mapAsMap: mapAsMap === true,\n            mapKeyWarned: false,\n            maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100\n        };\n        const res = toJS.toJS(this.contents, jsonArg ?? '', ctx);\n        if (typeof onAnchor === 'function')\n            for (const { count, res } of ctx.anchors.values())\n                onAnchor(res, count);\n        return typeof reviver === 'function'\n            ? applyReviver.applyReviver(reviver, { '': res }, '', res)\n            : res;\n    }\n    /**\n     * A JSON representation of the document `contents`.\n     *\n     * @param jsonArg Used by `JSON.stringify` to indicate the array index or\n     *   property name.\n     */\n    toJSON(jsonArg, onAnchor) {\n        return this.toJS({ json: true, jsonArg, mapAsMap: false, onAnchor });\n    }\n    /** A YAML representation of the document. */\n    toString(options = {}) {\n        if (this.errors.length > 0)\n            throw new Error('Document with errors cannot be stringified');\n        if ('indent' in options &&\n            (!Number.isInteger(options.indent) || Number(options.indent) <= 0)) {\n            const s = JSON.stringify(options.indent);\n            throw new Error(`\"indent\" option must be a positive integer, not ${s}`);\n        }\n        return stringifyDocument.stringifyDocument(this, options);\n    }\n}\nfunction assertCollection(contents) {\n    if (identity.isCollection(contents))\n        return true;\n    throw new Error('Expected a YAML collection as document contents');\n}\n\nexports.Document = Document;\n","'use strict';\n\nclass YAMLError extends Error {\n    constructor(name, pos, code, message) {\n        super();\n        this.name = name;\n        this.code = code;\n        this.message = message;\n        this.pos = pos;\n    }\n}\nclass YAMLParseError extends YAMLError {\n    constructor(pos, code, message) {\n        super('YAMLParseError', pos, code, message);\n    }\n}\nclass YAMLWarning extends YAMLError {\n    constructor(pos, code, message) {\n        super('YAMLWarning', pos, code, message);\n    }\n}\nconst prettifyError = (src, lc) => (error) => {\n    if (error.pos[0] === -1)\n        return;\n    error.linePos = error.pos.map(pos => lc.linePos(pos));\n    const { line, col } = error.linePos[0];\n    error.message += ` at line ${line}, column ${col}`;\n    let ci = col - 1;\n    let lineStr = src\n        .substring(lc.lineStarts[line - 1], lc.lineStarts[line])\n        .replace(/[\\n\\r]+$/, '');\n    // Trim to max 80 chars, keeping col position near the middle\n    if (ci >= 60 && lineStr.length > 80) {\n        const trimStart = Math.min(ci - 39, lineStr.length - 79);\n        lineStr = '…' + lineStr.substring(trimStart);\n        ci -= trimStart - 1;\n    }\n    if (lineStr.length > 80)\n        lineStr = lineStr.substring(0, 79) + '…';\n    // Include previous line in context if pointing at line start\n    if (line > 1 && /^ *$/.test(lineStr.substring(0, ci))) {\n        // Regexp won't match if start is trimmed\n        let prev = src.substring(lc.lineStarts[line - 2], lc.lineStarts[line - 1]);\n        if (prev.length > 80)\n            prev = prev.substring(0, 79) + '…\\n';\n        lineStr = prev + lineStr;\n    }\n    if (/[^ ]/.test(lineStr)) {\n        let count = 1;\n        const end = error.linePos[1];\n        if (end?.line === line && end.col > col) {\n            count = Math.max(1, Math.min(end.col - col, 80 - ci));\n        }\n        const pointer = ' '.repeat(ci) + '^'.repeat(count);\n        error.message += `:\\n\\n${lineStr}\\n${pointer}\\n`;\n    }\n};\n\nexports.YAMLError = YAMLError;\nexports.YAMLParseError = YAMLParseError;\nexports.YAMLWarning = YAMLWarning;\nexports.prettifyError = prettifyError;\n","'use strict';\n\nfunction resolveProps(tokens, { flow, indicator, next, offset, onError, parentIndent, startOnNewline }) {\n    let spaceBefore = false;\n    let atNewline = startOnNewline;\n    let hasSpace = startOnNewline;\n    let comment = '';\n    let commentSep = '';\n    let hasNewline = false;\n    let reqSpace = false;\n    let tab = null;\n    let anchor = null;\n    let tag = null;\n    let newlineAfterProp = null;\n    let comma = null;\n    let found = null;\n    let start = null;\n    for (const token of tokens) {\n        if (reqSpace) {\n            if (token.type !== 'space' &&\n                token.type !== 'newline' &&\n                token.type !== 'comma')\n                onError(token.offset, 'MISSING_CHAR', 'Tags and anchors must be separated from the next token by white space');\n            reqSpace = false;\n        }\n        if (tab) {\n            if (atNewline && token.type !== 'comment' && token.type !== 'newline') {\n                onError(tab, 'TAB_AS_INDENT', 'Tabs are not allowed as indentation');\n            }\n            tab = null;\n        }\n        switch (token.type) {\n            case 'space':\n                // At the doc level, tabs at line start may be parsed\n                // as leading white space rather than indentation.\n                // In a flow collection, only the parser handles indent.\n                if (!flow &&\n                    (indicator !== 'doc-start' || next?.type !== 'flow-collection') &&\n                    token.source.includes('\\t')) {\n                    tab = token;\n                }\n                hasSpace = true;\n                break;\n            case 'comment': {\n                if (!hasSpace)\n                    onError(token, 'MISSING_CHAR', 'Comments must be separated from other tokens by white space characters');\n                const cb = token.source.substring(1) || ' ';\n                if (!comment)\n                    comment = cb;\n                else\n                    comment += commentSep + cb;\n                commentSep = '';\n                atNewline = false;\n                break;\n            }\n            case 'newline':\n                if (atNewline) {\n                    if (comment)\n                        comment += token.source;\n                    else if (!found || indicator !== 'seq-item-ind')\n                        spaceBefore = true;\n                }\n                else\n                    commentSep += token.source;\n                atNewline = true;\n                hasNewline = true;\n                if (anchor || tag)\n                    newlineAfterProp = token;\n                hasSpace = true;\n                break;\n            case 'anchor':\n                if (anchor)\n                    onError(token, 'MULTIPLE_ANCHORS', 'A node can have at most one anchor');\n                if (token.source.endsWith(':'))\n                    onError(token.offset + token.source.length - 1, 'BAD_ALIAS', 'Anchor ending in : is ambiguous', true);\n                anchor = token;\n                start ?? (start = token.offset);\n                atNewline = false;\n                hasSpace = false;\n                reqSpace = true;\n                break;\n            case 'tag': {\n                if (tag)\n                    onError(token, 'MULTIPLE_TAGS', 'A node can have at most one tag');\n                tag = token;\n                start ?? (start = token.offset);\n                atNewline = false;\n                hasSpace = false;\n                reqSpace = true;\n                break;\n            }\n            case indicator:\n                // Could here handle preceding comments differently\n                if (anchor || tag)\n                    onError(token, 'BAD_PROP_ORDER', `Anchors and tags must be after the ${token.source} indicator`);\n                if (found)\n                    onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.source} in ${flow ?? 'collection'}`);\n                found = token;\n                atNewline =\n                    indicator === 'seq-item-ind' || indicator === 'explicit-key-ind';\n                hasSpace = false;\n                break;\n            case 'comma':\n                if (flow) {\n                    if (comma)\n                        onError(token, 'UNEXPECTED_TOKEN', `Unexpected , in ${flow}`);\n                    comma = token;\n                    atNewline = false;\n                    hasSpace = false;\n                    break;\n                }\n            // else fallthrough\n            default:\n                onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.type} token`);\n                atNewline = false;\n                hasSpace = false;\n        }\n    }\n    const last = tokens[tokens.length - 1];\n    const end = last ? last.offset + last.source.length : offset;\n    if (reqSpace &&\n        next &&\n        next.type !== 'space' &&\n        next.type !== 'newline' &&\n        next.type !== 'comma' &&\n        (next.type !== 'scalar' || next.source !== '')) {\n        onError(next.offset, 'MISSING_CHAR', 'Tags and anchors must be separated from the next token by white space');\n    }\n    if (tab &&\n        ((atNewline && tab.indent <= parentIndent) ||\n            next?.type === 'block-map' ||\n            next?.type === 'block-seq'))\n        onError(tab, 'TAB_AS_INDENT', 'Tabs are not allowed as indentation');\n    return {\n        comma,\n        found,\n        spaceBefore,\n        comment,\n        hasNewline,\n        anchor,\n        tag,\n        newlineAfterProp,\n        end,\n        start: start ?? end\n    };\n}\n\nexports.resolveProps = resolveProps;\n","'use strict';\n\nfunction containsNewline(key) {\n    if (!key)\n        return null;\n    switch (key.type) {\n        case 'alias':\n        case 'scalar':\n        case 'double-quoted-scalar':\n        case 'single-quoted-scalar':\n            if (key.source.includes('\\n'))\n                return true;\n            if (key.end)\n                for (const st of key.end)\n                    if (st.type === 'newline')\n                        return true;\n            return false;\n        case 'flow-collection':\n            for (const it of key.items) {\n                for (const st of it.start)\n                    if (st.type === 'newline')\n                        return true;\n                if (it.sep)\n                    for (const st of it.sep)\n                        if (st.type === 'newline')\n                            return true;\n                if (containsNewline(it.key) || containsNewline(it.value))\n                    return true;\n            }\n            return false;\n        default:\n            return true;\n    }\n}\n\nexports.containsNewline = containsNewline;\n","'use strict';\n\nvar utilContainsNewline = require('./util-contains-newline.js');\n\nfunction flowIndentCheck(indent, fc, onError) {\n    if (fc?.type === 'flow-collection') {\n        const end = fc.end[0];\n        if (end.indent === indent &&\n            (end.source === ']' || end.source === '}') &&\n            utilContainsNewline.containsNewline(fc)) {\n            const msg = 'Flow end indicator should be more indented than parent';\n            onError(end, 'BAD_INDENT', msg, true);\n        }\n    }\n}\n\nexports.flowIndentCheck = flowIndentCheck;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\n\nfunction mapIncludes(ctx, items, search) {\n    const { uniqueKeys } = ctx.options;\n    if (uniqueKeys === false)\n        return false;\n    const isEqual = typeof uniqueKeys === 'function'\n        ? uniqueKeys\n        : (a, b) => a === b || (identity.isScalar(a) && identity.isScalar(b) && a.value === b.value);\n    return items.some(pair => isEqual(pair.key, search));\n}\n\nexports.mapIncludes = mapIncludes;\n","'use strict';\n\nvar Pair = require('../nodes/Pair.js');\nvar YAMLMap = require('../nodes/YAMLMap.js');\nvar resolveProps = require('./resolve-props.js');\nvar utilContainsNewline = require('./util-contains-newline.js');\nvar utilFlowIndentCheck = require('./util-flow-indent-check.js');\nvar utilMapIncludes = require('./util-map-includes.js');\n\nconst startColMsg = 'All mapping items must start at the same column';\nfunction resolveBlockMap({ composeNode, composeEmptyNode }, ctx, bm, onError, tag) {\n    const NodeClass = tag?.nodeClass ?? YAMLMap.YAMLMap;\n    const map = new NodeClass(ctx.schema);\n    if (ctx.atRoot)\n        ctx.atRoot = false;\n    let offset = bm.offset;\n    let commentEnd = null;\n    for (const collItem of bm.items) {\n        const { start, key, sep, value } = collItem;\n        // key properties\n        const keyProps = resolveProps.resolveProps(start, {\n            indicator: 'explicit-key-ind',\n            next: key ?? sep?.[0],\n            offset,\n            onError,\n            parentIndent: bm.indent,\n            startOnNewline: true\n        });\n        const implicitKey = !keyProps.found;\n        if (implicitKey) {\n            if (key) {\n                if (key.type === 'block-seq')\n                    onError(offset, 'BLOCK_AS_IMPLICIT_KEY', 'A block sequence may not be used as an implicit map key');\n                else if ('indent' in key && key.indent !== bm.indent)\n                    onError(offset, 'BAD_INDENT', startColMsg);\n            }\n            if (!keyProps.anchor && !keyProps.tag && !sep) {\n                commentEnd = keyProps.end;\n                if (keyProps.comment) {\n                    if (map.comment)\n                        map.comment += '\\n' + keyProps.comment;\n                    else\n                        map.comment = keyProps.comment;\n                }\n                continue;\n            }\n            if (keyProps.newlineAfterProp || utilContainsNewline.containsNewline(key)) {\n                onError(key ?? start[start.length - 1], 'MULTILINE_IMPLICIT_KEY', 'Implicit keys need to be on a single line');\n            }\n        }\n        else if (keyProps.found?.indent !== bm.indent) {\n            onError(offset, 'BAD_INDENT', startColMsg);\n        }\n        // key value\n        ctx.atKey = true;\n        const keyStart = keyProps.end;\n        const keyNode = key\n            ? composeNode(ctx, key, keyProps, onError)\n            : composeEmptyNode(ctx, keyStart, start, null, keyProps, onError);\n        if (ctx.schema.compat)\n            utilFlowIndentCheck.flowIndentCheck(bm.indent, key, onError);\n        ctx.atKey = false;\n        if (utilMapIncludes.mapIncludes(ctx, map.items, keyNode))\n            onError(keyStart, 'DUPLICATE_KEY', 'Map keys must be unique');\n        // value properties\n        const valueProps = resolveProps.resolveProps(sep ?? [], {\n            indicator: 'map-value-ind',\n            next: value,\n            offset: keyNode.range[2],\n            onError,\n            parentIndent: bm.indent,\n            startOnNewline: !key || key.type === 'block-scalar'\n        });\n        offset = valueProps.end;\n        if (valueProps.found) {\n            if (implicitKey) {\n                if (value?.type === 'block-map' && !valueProps.hasNewline)\n                    onError(offset, 'BLOCK_AS_IMPLICIT_KEY', 'Nested mappings are not allowed in compact mappings');\n                if (ctx.options.strict &&\n                    keyProps.start < valueProps.found.offset - 1024)\n                    onError(keyNode.range, 'KEY_OVER_1024_CHARS', 'The : indicator must be at most 1024 chars after the start of an implicit block mapping key');\n            }\n            // value value\n            const valueNode = value\n                ? composeNode(ctx, value, valueProps, onError)\n                : composeEmptyNode(ctx, offset, sep, null, valueProps, onError);\n            if (ctx.schema.compat)\n                utilFlowIndentCheck.flowIndentCheck(bm.indent, value, onError);\n            offset = valueNode.range[2];\n            const pair = new Pair.Pair(keyNode, valueNode);\n            if (ctx.options.keepSourceTokens)\n                pair.srcToken = collItem;\n            map.items.push(pair);\n        }\n        else {\n            // key with no value\n            if (implicitKey)\n                onError(keyNode.range, 'MISSING_CHAR', 'Implicit map keys need to be followed by map values');\n            if (valueProps.comment) {\n                if (keyNode.comment)\n                    keyNode.comment += '\\n' + valueProps.comment;\n                else\n                    keyNode.comment = valueProps.comment;\n            }\n            const pair = new Pair.Pair(keyNode);\n            if (ctx.options.keepSourceTokens)\n                pair.srcToken = collItem;\n            map.items.push(pair);\n        }\n    }\n    if (commentEnd && commentEnd < offset)\n        onError(commentEnd, 'IMPOSSIBLE', 'Map comment with trailing content');\n    map.range = [bm.offset, offset, commentEnd ?? offset];\n    return map;\n}\n\nexports.resolveBlockMap = resolveBlockMap;\n","'use strict';\n\nvar YAMLSeq = require('../nodes/YAMLSeq.js');\nvar resolveProps = require('./resolve-props.js');\nvar utilFlowIndentCheck = require('./util-flow-indent-check.js');\n\nfunction resolveBlockSeq({ composeNode, composeEmptyNode }, ctx, bs, onError, tag) {\n    const NodeClass = tag?.nodeClass ?? YAMLSeq.YAMLSeq;\n    const seq = new NodeClass(ctx.schema);\n    if (ctx.atRoot)\n        ctx.atRoot = false;\n    if (ctx.atKey)\n        ctx.atKey = false;\n    let offset = bs.offset;\n    let commentEnd = null;\n    for (const { start, value } of bs.items) {\n        const props = resolveProps.resolveProps(start, {\n            indicator: 'seq-item-ind',\n            next: value,\n            offset,\n            onError,\n            parentIndent: bs.indent,\n            startOnNewline: true\n        });\n        if (!props.found) {\n            if (props.anchor || props.tag || value) {\n                if (value?.type === 'block-seq')\n                    onError(props.end, 'BAD_INDENT', 'All sequence items must start at the same column');\n                else\n                    onError(offset, 'MISSING_CHAR', 'Sequence item without - indicator');\n            }\n            else {\n                commentEnd = props.end;\n                if (props.comment)\n                    seq.comment = props.comment;\n                continue;\n            }\n        }\n        const node = value\n            ? composeNode(ctx, value, props, onError)\n            : composeEmptyNode(ctx, props.end, start, null, props, onError);\n        if (ctx.schema.compat)\n            utilFlowIndentCheck.flowIndentCheck(bs.indent, value, onError);\n        offset = node.range[2];\n        seq.items.push(node);\n    }\n    seq.range = [bs.offset, offset, commentEnd ?? offset];\n    return seq;\n}\n\nexports.resolveBlockSeq = resolveBlockSeq;\n","'use strict';\n\nfunction resolveEnd(end, offset, reqSpace, onError) {\n    let comment = '';\n    if (end) {\n        let hasSpace = false;\n        let sep = '';\n        for (const token of end) {\n            const { source, type } = token;\n            switch (type) {\n                case 'space':\n                    hasSpace = true;\n                    break;\n                case 'comment': {\n                    if (reqSpace && !hasSpace)\n                        onError(token, 'MISSING_CHAR', 'Comments must be separated from other tokens by white space characters');\n                    const cb = source.substring(1) || ' ';\n                    if (!comment)\n                        comment = cb;\n                    else\n                        comment += sep + cb;\n                    sep = '';\n                    break;\n                }\n                case 'newline':\n                    if (comment)\n                        sep += source;\n                    hasSpace = true;\n                    break;\n                default:\n                    onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${type} at node end`);\n            }\n            offset += source.length;\n        }\n    }\n    return { comment, offset };\n}\n\nexports.resolveEnd = resolveEnd;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar Pair = require('../nodes/Pair.js');\nvar YAMLMap = require('../nodes/YAMLMap.js');\nvar YAMLSeq = require('../nodes/YAMLSeq.js');\nvar resolveEnd = require('./resolve-end.js');\nvar resolveProps = require('./resolve-props.js');\nvar utilContainsNewline = require('./util-contains-newline.js');\nvar utilMapIncludes = require('./util-map-includes.js');\n\nconst blockMsg = 'Block collections are not allowed within flow collections';\nconst isBlock = (token) => token && (token.type === 'block-map' || token.type === 'block-seq');\nfunction resolveFlowCollection({ composeNode, composeEmptyNode }, ctx, fc, onError, tag) {\n    const isMap = fc.start.source === '{';\n    const fcName = isMap ? 'flow map' : 'flow sequence';\n    const NodeClass = (tag?.nodeClass ?? (isMap ? YAMLMap.YAMLMap : YAMLSeq.YAMLSeq));\n    const coll = new NodeClass(ctx.schema);\n    coll.flow = true;\n    const atRoot = ctx.atRoot;\n    if (atRoot)\n        ctx.atRoot = false;\n    if (ctx.atKey)\n        ctx.atKey = false;\n    let offset = fc.offset + fc.start.source.length;\n    for (let i = 0; i < fc.items.length; ++i) {\n        const collItem = fc.items[i];\n        const { start, key, sep, value } = collItem;\n        const props = resolveProps.resolveProps(start, {\n            flow: fcName,\n            indicator: 'explicit-key-ind',\n            next: key ?? sep?.[0],\n            offset,\n            onError,\n            parentIndent: fc.indent,\n            startOnNewline: false\n        });\n        if (!props.found) {\n            if (!props.anchor && !props.tag && !sep && !value) {\n                if (i === 0 && props.comma)\n                    onError(props.comma, 'UNEXPECTED_TOKEN', `Unexpected , in ${fcName}`);\n                else if (i < fc.items.length - 1)\n                    onError(props.start, 'UNEXPECTED_TOKEN', `Unexpected empty item in ${fcName}`);\n                if (props.comment) {\n                    if (coll.comment)\n                        coll.comment += '\\n' + props.comment;\n                    else\n                        coll.comment = props.comment;\n                }\n                offset = props.end;\n                continue;\n            }\n            if (!isMap && ctx.options.strict && utilContainsNewline.containsNewline(key))\n                onError(key, // checked by containsNewline()\n                'MULTILINE_IMPLICIT_KEY', 'Implicit keys of flow sequence pairs need to be on a single line');\n        }\n        if (i === 0) {\n            if (props.comma)\n                onError(props.comma, 'UNEXPECTED_TOKEN', `Unexpected , in ${fcName}`);\n        }\n        else {\n            if (!props.comma)\n                onError(props.start, 'MISSING_CHAR', `Missing , between ${fcName} items`);\n            if (props.comment) {\n                let prevItemComment = '';\n                loop: for (const st of start) {\n                    switch (st.type) {\n                        case 'comma':\n                        case 'space':\n                            break;\n                        case 'comment':\n                            prevItemComment = st.source.substring(1);\n                            break loop;\n                        default:\n                            break loop;\n                    }\n                }\n                if (prevItemComment) {\n                    let prev = coll.items[coll.items.length - 1];\n                    if (identity.isPair(prev))\n                        prev = prev.value ?? prev.key;\n                    if (prev.comment)\n                        prev.comment += '\\n' + prevItemComment;\n                    else\n                        prev.comment = prevItemComment;\n                    props.comment = props.comment.substring(prevItemComment.length + 1);\n                }\n            }\n        }\n        if (!isMap && !sep && !props.found) {\n            // item is a value in a seq\n            // → key & sep are empty, start does not include ? or :\n            const valueNode = value\n                ? composeNode(ctx, value, props, onError)\n                : composeEmptyNode(ctx, props.end, sep, null, props, onError);\n            coll.items.push(valueNode);\n            offset = valueNode.range[2];\n            if (isBlock(value))\n                onError(valueNode.range, 'BLOCK_IN_FLOW', blockMsg);\n        }\n        else {\n            // item is a key+value pair\n            // key value\n            ctx.atKey = true;\n            const keyStart = props.end;\n            const keyNode = key\n                ? composeNode(ctx, key, props, onError)\n                : composeEmptyNode(ctx, keyStart, start, null, props, onError);\n            if (isBlock(key))\n                onError(keyNode.range, 'BLOCK_IN_FLOW', blockMsg);\n            ctx.atKey = false;\n            // value properties\n            const valueProps = resolveProps.resolveProps(sep ?? [], {\n                flow: fcName,\n                indicator: 'map-value-ind',\n                next: value,\n                offset: keyNode.range[2],\n                onError,\n                parentIndent: fc.indent,\n                startOnNewline: false\n            });\n            if (valueProps.found) {\n                if (!isMap && !props.found && ctx.options.strict) {\n                    if (sep)\n                        for (const st of sep) {\n                            if (st === valueProps.found)\n                                break;\n                            if (st.type === 'newline') {\n                                onError(st, 'MULTILINE_IMPLICIT_KEY', 'Implicit keys of flow sequence pairs need to be on a single line');\n                                break;\n                            }\n                        }\n                    if (props.start < valueProps.found.offset - 1024)\n                        onError(valueProps.found, 'KEY_OVER_1024_CHARS', 'The : indicator must be at most 1024 chars after the start of an implicit flow sequence key');\n                }\n            }\n            else if (value) {\n                if ('source' in value && value.source?.[0] === ':')\n                    onError(value, 'MISSING_CHAR', `Missing space after : in ${fcName}`);\n                else\n                    onError(valueProps.start, 'MISSING_CHAR', `Missing , or : between ${fcName} items`);\n            }\n            // value value\n            const valueNode = value\n                ? composeNode(ctx, value, valueProps, onError)\n                : valueProps.found\n                    ? composeEmptyNode(ctx, valueProps.end, sep, null, valueProps, onError)\n                    : null;\n            if (valueNode) {\n                if (isBlock(value))\n                    onError(valueNode.range, 'BLOCK_IN_FLOW', blockMsg);\n            }\n            else if (valueProps.comment) {\n                if (keyNode.comment)\n                    keyNode.comment += '\\n' + valueProps.comment;\n                else\n                    keyNode.comment = valueProps.comment;\n            }\n            const pair = new Pair.Pair(keyNode, valueNode);\n            if (ctx.options.keepSourceTokens)\n                pair.srcToken = collItem;\n            if (isMap) {\n                const map = coll;\n                if (utilMapIncludes.mapIncludes(ctx, map.items, keyNode))\n                    onError(keyStart, 'DUPLICATE_KEY', 'Map keys must be unique');\n                map.items.push(pair);\n            }\n            else {\n                const map = new YAMLMap.YAMLMap(ctx.schema);\n                map.flow = true;\n                map.items.push(pair);\n                const endRange = (valueNode ?? keyNode).range;\n                map.range = [keyNode.range[0], endRange[1], endRange[2]];\n                coll.items.push(map);\n            }\n            offset = valueNode ? valueNode.range[2] : valueProps.end;\n        }\n    }\n    const expectedEnd = isMap ? '}' : ']';\n    const [ce, ...ee] = fc.end;\n    let cePos = offset;\n    if (ce?.source === expectedEnd)\n        cePos = ce.offset + ce.source.length;\n    else {\n        const name = fcName[0].toUpperCase() + fcName.substring(1);\n        const msg = atRoot\n            ? `${name} must end with a ${expectedEnd}`\n            : `${name} in block collection must be sufficiently indented and end with a ${expectedEnd}`;\n        onError(offset, atRoot ? 'MISSING_CHAR' : 'BAD_INDENT', msg);\n        if (ce && ce.source.length !== 1)\n            ee.unshift(ce);\n    }\n    if (ee.length > 0) {\n        const end = resolveEnd.resolveEnd(ee, cePos, ctx.options.strict, onError);\n        if (end.comment) {\n            if (coll.comment)\n                coll.comment += '\\n' + end.comment;\n            else\n                coll.comment = end.comment;\n        }\n        coll.range = [fc.offset, cePos, end.offset];\n    }\n    else {\n        coll.range = [fc.offset, cePos, cePos];\n    }\n    return coll;\n}\n\nexports.resolveFlowCollection = resolveFlowCollection;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar Scalar = require('../nodes/Scalar.js');\nvar YAMLMap = require('../nodes/YAMLMap.js');\nvar YAMLSeq = require('../nodes/YAMLSeq.js');\nvar resolveBlockMap = require('./resolve-block-map.js');\nvar resolveBlockSeq = require('./resolve-block-seq.js');\nvar resolveFlowCollection = require('./resolve-flow-collection.js');\n\nfunction resolveCollection(CN, ctx, token, onError, tagName, tag) {\n    const coll = token.type === 'block-map'\n        ? resolveBlockMap.resolveBlockMap(CN, ctx, token, onError, tag)\n        : token.type === 'block-seq'\n            ? resolveBlockSeq.resolveBlockSeq(CN, ctx, token, onError, tag)\n            : resolveFlowCollection.resolveFlowCollection(CN, ctx, token, onError, tag);\n    const Coll = coll.constructor;\n    // If we got a tagName matching the class, or the tag name is '!',\n    // then use the tagName from the node class used to create it.\n    if (tagName === '!' || tagName === Coll.tagName) {\n        coll.tag = Coll.tagName;\n        return coll;\n    }\n    if (tagName)\n        coll.tag = tagName;\n    return coll;\n}\nfunction composeCollection(CN, ctx, token, props, onError) {\n    const tagToken = props.tag;\n    const tagName = !tagToken\n        ? null\n        : ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg));\n    if (token.type === 'block-seq') {\n        const { anchor, newlineAfterProp: nl } = props;\n        const lastProp = anchor && tagToken\n            ? anchor.offset > tagToken.offset\n                ? anchor\n                : tagToken\n            : (anchor ?? tagToken);\n        if (lastProp && (!nl || nl.offset < lastProp.offset)) {\n            const message = 'Missing newline after block sequence props';\n            onError(lastProp, 'MISSING_CHAR', message);\n        }\n    }\n    const expType = token.type === 'block-map'\n        ? 'map'\n        : token.type === 'block-seq'\n            ? 'seq'\n            : token.start.source === '{'\n                ? 'map'\n                : 'seq';\n    // shortcut: check if it's a generic YAMLMap or YAMLSeq\n    // before jumping into the custom tag logic.\n    if (!tagToken ||\n        !tagName ||\n        tagName === '!' ||\n        (tagName === YAMLMap.YAMLMap.tagName && expType === 'map') ||\n        (tagName === YAMLSeq.YAMLSeq.tagName && expType === 'seq')) {\n        return resolveCollection(CN, ctx, token, onError, tagName);\n    }\n    let tag = ctx.schema.tags.find(t => t.tag === tagName && t.collection === expType);\n    if (!tag) {\n        const kt = ctx.schema.knownTags[tagName];\n        if (kt?.collection === expType) {\n            ctx.schema.tags.push(Object.assign({}, kt, { default: false }));\n            tag = kt;\n        }\n        else {\n            if (kt) {\n                onError(tagToken, 'BAD_COLLECTION_TYPE', `${kt.tag} used for ${expType} collection, but expects ${kt.collection ?? 'scalar'}`, true);\n            }\n            else {\n                onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, true);\n            }\n            return resolveCollection(CN, ctx, token, onError, tagName);\n        }\n    }\n    const coll = resolveCollection(CN, ctx, token, onError, tagName, tag);\n    const res = tag.resolve?.(coll, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg), ctx.options) ?? coll;\n    const node = identity.isNode(res)\n        ? res\n        : new Scalar.Scalar(res);\n    node.range = coll.range;\n    node.tag = tagName;\n    if (tag?.format)\n        node.format = tag.format;\n    return node;\n}\n\nexports.composeCollection = composeCollection;\n","'use strict';\n\nvar Scalar = require('../nodes/Scalar.js');\n\nfunction resolveBlockScalar(ctx, scalar, onError) {\n    const start = scalar.offset;\n    const header = parseBlockScalarHeader(scalar, ctx.options.strict, onError);\n    if (!header)\n        return { value: '', type: null, comment: '', range: [start, start, start] };\n    const type = header.mode === '>' ? Scalar.Scalar.BLOCK_FOLDED : Scalar.Scalar.BLOCK_LITERAL;\n    const lines = scalar.source ? splitLines(scalar.source) : [];\n    // determine the end of content & start of chomping\n    let chompStart = lines.length;\n    for (let i = lines.length - 1; i >= 0; --i) {\n        const content = lines[i][1];\n        if (content === '' || content === '\\r')\n            chompStart = i;\n        else\n            break;\n    }\n    // shortcut for empty contents\n    if (chompStart === 0) {\n        const value = header.chomp === '+' && lines.length > 0\n            ? '\\n'.repeat(Math.max(1, lines.length - 1))\n            : '';\n        let end = start + header.length;\n        if (scalar.source)\n            end += scalar.source.length;\n        return { value, type, comment: header.comment, range: [start, end, end] };\n    }\n    // find the indentation level to trim from start\n    let trimIndent = scalar.indent + header.indent;\n    let offset = scalar.offset + header.length;\n    let contentStart = 0;\n    for (let i = 0; i < chompStart; ++i) {\n        const [indent, content] = lines[i];\n        if (content === '' || content === '\\r') {\n            if (header.indent === 0 && indent.length > trimIndent)\n                trimIndent = indent.length;\n        }\n        else {\n            if (indent.length < trimIndent) {\n                const message = 'Block scalars with more-indented leading empty lines must use an explicit indentation indicator';\n                onError(offset + indent.length, 'MISSING_CHAR', message);\n            }\n            if (header.indent === 0)\n                trimIndent = indent.length;\n            contentStart = i;\n            if (trimIndent === 0 && !ctx.atRoot) {\n                const message = 'Block scalar values in collections must be indented';\n                onError(offset, 'BAD_INDENT', message);\n            }\n            break;\n        }\n        offset += indent.length + content.length + 1;\n    }\n    // include trailing more-indented empty lines in content\n    for (let i = lines.length - 1; i >= chompStart; --i) {\n        if (lines[i][0].length > trimIndent)\n            chompStart = i + 1;\n    }\n    let value = '';\n    let sep = '';\n    let prevMoreIndented = false;\n    // leading whitespace is kept intact\n    for (let i = 0; i < contentStart; ++i)\n        value += lines[i][0].slice(trimIndent) + '\\n';\n    for (let i = contentStart; i < chompStart; ++i) {\n        let [indent, content] = lines[i];\n        offset += indent.length + content.length + 1;\n        const crlf = content[content.length - 1] === '\\r';\n        if (crlf)\n            content = content.slice(0, -1);\n        /* istanbul ignore if already caught in lexer */\n        if (content && indent.length < trimIndent) {\n            const src = header.indent\n                ? 'explicit indentation indicator'\n                : 'first line';\n            const message = `Block scalar lines must not be less indented than their ${src}`;\n            onError(offset - content.length - (crlf ? 2 : 1), 'BAD_INDENT', message);\n            indent = '';\n        }\n        if (type === Scalar.Scalar.BLOCK_LITERAL) {\n            value += sep + indent.slice(trimIndent) + content;\n            sep = '\\n';\n        }\n        else if (indent.length > trimIndent || content[0] === '\\t') {\n            // more-indented content within a folded block\n            if (sep === ' ')\n                sep = '\\n';\n            else if (!prevMoreIndented && sep === '\\n')\n                sep = '\\n\\n';\n            value += sep + indent.slice(trimIndent) + content;\n            sep = '\\n';\n            prevMoreIndented = true;\n        }\n        else if (content === '') {\n            // empty line\n            if (sep === '\\n')\n                value += '\\n';\n            else\n                sep = '\\n';\n        }\n        else {\n            value += sep + content;\n            sep = ' ';\n            prevMoreIndented = false;\n        }\n    }\n    switch (header.chomp) {\n        case '-':\n            break;\n        case '+':\n            for (let i = chompStart; i < lines.length; ++i)\n                value += '\\n' + lines[i][0].slice(trimIndent);\n            if (value[value.length - 1] !== '\\n')\n                value += '\\n';\n            break;\n        default:\n            value += '\\n';\n    }\n    const end = start + header.length + scalar.source.length;\n    return { value, type, comment: header.comment, range: [start, end, end] };\n}\nfunction parseBlockScalarHeader({ offset, props }, strict, onError) {\n    /* istanbul ignore if should not happen */\n    if (props[0].type !== 'block-scalar-header') {\n        onError(props[0], 'IMPOSSIBLE', 'Block scalar header not found');\n        return null;\n    }\n    const { source } = props[0];\n    const mode = source[0];\n    let indent = 0;\n    let chomp = '';\n    let error = -1;\n    for (let i = 1; i < source.length; ++i) {\n        const ch = source[i];\n        if (!chomp && (ch === '-' || ch === '+'))\n            chomp = ch;\n        else {\n            const n = Number(ch);\n            if (!indent && n)\n                indent = n;\n            else if (error === -1)\n                error = offset + i;\n        }\n    }\n    if (error !== -1)\n        onError(error, 'UNEXPECTED_TOKEN', `Block scalar header includes extra characters: ${source}`);\n    let hasSpace = false;\n    let comment = '';\n    let length = source.length;\n    for (let i = 1; i < props.length; ++i) {\n        const token = props[i];\n        switch (token.type) {\n            case 'space':\n                hasSpace = true;\n            // fallthrough\n            case 'newline':\n                length += token.source.length;\n                break;\n            case 'comment':\n                if (strict && !hasSpace) {\n                    const message = 'Comments must be separated from other tokens by white space characters';\n                    onError(token, 'MISSING_CHAR', message);\n                }\n                length += token.source.length;\n                comment = token.source.substring(1);\n                break;\n            case 'error':\n                onError(token, 'UNEXPECTED_TOKEN', token.message);\n                length += token.source.length;\n                break;\n            /* istanbul ignore next should not happen */\n            default: {\n                const message = `Unexpected token in block scalar header: ${token.type}`;\n                onError(token, 'UNEXPECTED_TOKEN', message);\n                const ts = token.source;\n                if (ts && typeof ts === 'string')\n                    length += ts.length;\n            }\n        }\n    }\n    return { mode, indent, chomp, comment, length };\n}\n/** @returns Array of lines split up as `[indent, content]` */\nfunction splitLines(source) {\n    const split = source.split(/\\n( *)/);\n    const first = split[0];\n    const m = first.match(/^( *)/);\n    const line0 = m?.[1]\n        ? [m[1], first.slice(m[1].length)]\n        : ['', first];\n    const lines = [line0];\n    for (let i = 1; i < split.length; i += 2)\n        lines.push([split[i], split[i + 1]]);\n    return lines;\n}\n\nexports.resolveBlockScalar = resolveBlockScalar;\n","'use strict';\n\nvar Scalar = require('../nodes/Scalar.js');\nvar resolveEnd = require('./resolve-end.js');\n\nfunction resolveFlowScalar(scalar, strict, onError) {\n    const { offset, type, source, end } = scalar;\n    let _type;\n    let value;\n    const _onError = (rel, code, msg) => onError(offset + rel, code, msg);\n    switch (type) {\n        case 'scalar':\n            _type = Scalar.Scalar.PLAIN;\n            value = plainValue(source, _onError);\n            break;\n        case 'single-quoted-scalar':\n            _type = Scalar.Scalar.QUOTE_SINGLE;\n            value = singleQuotedValue(source, _onError);\n            break;\n        case 'double-quoted-scalar':\n            _type = Scalar.Scalar.QUOTE_DOUBLE;\n            value = doubleQuotedValue(source, _onError);\n            break;\n        /* istanbul ignore next should not happen */\n        default:\n            onError(scalar, 'UNEXPECTED_TOKEN', `Expected a flow scalar value, but found: ${type}`);\n            return {\n                value: '',\n                type: null,\n                comment: '',\n                range: [offset, offset + source.length, offset + source.length]\n            };\n    }\n    const valueEnd = offset + source.length;\n    const re = resolveEnd.resolveEnd(end, valueEnd, strict, onError);\n    return {\n        value,\n        type: _type,\n        comment: re.comment,\n        range: [offset, valueEnd, re.offset]\n    };\n}\nfunction plainValue(source, onError) {\n    let badChar = '';\n    switch (source[0]) {\n        /* istanbul ignore next should not happen */\n        case '\\t':\n            badChar = 'a tab character';\n            break;\n        case ',':\n            badChar = 'flow indicator character ,';\n            break;\n        case '%':\n            badChar = 'directive indicator character %';\n            break;\n        case '|':\n        case '>': {\n            badChar = `block scalar indicator ${source[0]}`;\n            break;\n        }\n        case '@':\n        case '`': {\n            badChar = `reserved character ${source[0]}`;\n            break;\n        }\n    }\n    if (badChar)\n        onError(0, 'BAD_SCALAR_START', `Plain value cannot start with ${badChar}`);\n    return unfoldLines(source);\n}\nfunction singleQuotedValue(source, onError) {\n    if (source[source.length - 1] !== \"'\" || source.length === 1)\n        onError(source.length, 'MISSING_CHAR', \"Missing closing 'quote\");\n    return unfoldLines(source.slice(1, -1)).replace(/''/g, \"'\");\n}\nfunction unfoldLines(source) {\n    const line = /(.*?)\\r?\\n/sy;\n    let match = line.exec(source);\n    if (!match)\n        return source;\n    /**\n     * The negative lookbehinds in these RegExps are to\n     * prevent causing a polynomial search time in certain cases.\n     *\n     * The try-catch is for Safari < 16.4 and other old browsers:\n     * https://caniuse.com/js-regexp-lookbehind\n     */\n    let trimEnd, trimBoth;\n    try {\n        trimEnd = new RegExp('(?<![ \\t])[ \\t]+$');\n        trimBoth = new RegExp('^[ \\t]+|(?<![ \\t])[ \\t]+$', 'g');\n    }\n    catch {\n        trimEnd = /[ \\t]+$/;\n        trimBoth = /^[ \\t]+|[ \\t]+$/g;\n    }\n    let res = match[1].replace(trimEnd, '');\n    let sep = ' ';\n    let pos = line.lastIndex;\n    while ((match = line.exec(source))) {\n        const lm = match[1].replace(trimBoth, '');\n        if (lm === '') {\n            if (sep === '\\n')\n                res += sep;\n            else\n                sep = '\\n';\n        }\n        else {\n            res += sep + lm;\n            sep = ' ';\n        }\n        pos = line.lastIndex;\n    }\n    const last = /[ \\t]*(.*)/sy;\n    last.lastIndex = pos;\n    match = last.exec(source);\n    return res + sep + (match?.[1] ?? '');\n}\nfunction doubleQuotedValue(source, onError) {\n    let res = '';\n    for (let i = 1; i < source.length - 1; ++i) {\n        const ch = source[i];\n        if (ch === '\\r' && source[i + 1] === '\\n')\n            continue;\n        if (ch === '\\n') {\n            const { fold, offset } = foldNewline(source, i);\n            res += fold;\n            i = offset;\n        }\n        else if (ch === '\\\\') {\n            let next = source[++i];\n            const cc = escapeCodes[next];\n            if (cc)\n                res += cc;\n            else if (next === '\\n') {\n                // skip escaped newlines, but still trim the following line\n                next = source[i + 1];\n                while (next === ' ' || next === '\\t')\n                    next = source[++i + 1];\n            }\n            else if (next === '\\r' && source[i + 1] === '\\n') {\n                // skip escaped CRLF newlines, but still trim the following line\n                next = source[++i + 1];\n                while (next === ' ' || next === '\\t')\n                    next = source[++i + 1];\n            }\n            else if (next === 'x' || next === 'u' || next === 'U') {\n                const length = next === 'x' ? 2 : next === 'u' ? 4 : 8;\n                res += parseCharCode(source, i + 1, length, onError);\n                i += length;\n            }\n            else {\n                const raw = source.substr(i - 1, 2);\n                onError(i - 1, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);\n                res += raw;\n            }\n        }\n        else if (ch === ' ' || ch === '\\t') {\n            // trim trailing whitespace\n            const wsStart = i;\n            let next = source[i + 1];\n            while (next === ' ' || next === '\\t')\n                next = source[++i + 1];\n            if (next !== '\\n' && !(next === '\\r' && source[i + 2] === '\\n'))\n                res += i > wsStart ? source.slice(wsStart, i + 1) : ch;\n        }\n        else {\n            res += ch;\n        }\n    }\n    if (source[source.length - 1] !== '\"' || source.length === 1)\n        onError(source.length, 'MISSING_CHAR', 'Missing closing \"quote');\n    return res;\n}\n/**\n * Fold a single newline into a space, multiple newlines to N - 1 newlines.\n * Presumes `source[offset] === '\\n'`\n */\nfunction foldNewline(source, offset) {\n    let fold = '';\n    let ch = source[offset + 1];\n    while (ch === ' ' || ch === '\\t' || ch === '\\n' || ch === '\\r') {\n        if (ch === '\\r' && source[offset + 2] !== '\\n')\n            break;\n        if (ch === '\\n')\n            fold += '\\n';\n        offset += 1;\n        ch = source[offset + 1];\n    }\n    if (!fold)\n        fold = ' ';\n    return { fold, offset };\n}\nconst escapeCodes = {\n    '0': '\\0', // null character\n    a: '\\x07', // bell character\n    b: '\\b', // backspace\n    e: '\\x1b', // escape character\n    f: '\\f', // form feed\n    n: '\\n', // line feed\n    r: '\\r', // carriage return\n    t: '\\t', // horizontal tab\n    v: '\\v', // vertical tab\n    N: '\\u0085', // Unicode next line\n    _: '\\u00a0', // Unicode non-breaking space\n    L: '\\u2028', // Unicode line separator\n    P: '\\u2029', // Unicode paragraph separator\n    ' ': ' ',\n    '\"': '\"',\n    '/': '/',\n    '\\\\': '\\\\',\n    '\\t': '\\t'\n};\nfunction parseCharCode(source, offset, length, onError) {\n    const cc = source.substr(offset, length);\n    const ok = cc.length === length && /^[0-9a-fA-F]+$/.test(cc);\n    const code = ok ? parseInt(cc, 16) : NaN;\n    try {\n        return String.fromCodePoint(code);\n    }\n    catch {\n        const raw = source.substr(offset - 2, length + 2);\n        onError(offset - 2, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);\n        return raw;\n    }\n}\n\nexports.resolveFlowScalar = resolveFlowScalar;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar Scalar = require('../nodes/Scalar.js');\nvar resolveBlockScalar = require('./resolve-block-scalar.js');\nvar resolveFlowScalar = require('./resolve-flow-scalar.js');\n\nfunction composeScalar(ctx, token, tagToken, onError) {\n    const { value, type, comment, range } = token.type === 'block-scalar'\n        ? resolveBlockScalar.resolveBlockScalar(ctx, token, onError)\n        : resolveFlowScalar.resolveFlowScalar(token, ctx.options.strict, onError);\n    const tagName = tagToken\n        ? ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg))\n        : null;\n    let tag;\n    if (ctx.options.stringKeys && ctx.atKey) {\n        tag = ctx.schema[identity.SCALAR];\n    }\n    else if (tagName)\n        tag = findScalarTagByName(ctx.schema, value, tagName, tagToken, onError);\n    else if (token.type === 'scalar')\n        tag = findScalarTagByTest(ctx, value, token, onError);\n    else\n        tag = ctx.schema[identity.SCALAR];\n    let scalar;\n    try {\n        const res = tag.resolve(value, msg => onError(tagToken ?? token, 'TAG_RESOLVE_FAILED', msg), ctx.options);\n        scalar = identity.isScalar(res) ? res : new Scalar.Scalar(res);\n    }\n    catch (error) {\n        const msg = error instanceof Error ? error.message : String(error);\n        onError(tagToken ?? token, 'TAG_RESOLVE_FAILED', msg);\n        scalar = new Scalar.Scalar(value);\n    }\n    scalar.range = range;\n    scalar.source = value;\n    if (type)\n        scalar.type = type;\n    if (tagName)\n        scalar.tag = tagName;\n    if (tag.format)\n        scalar.format = tag.format;\n    if (comment)\n        scalar.comment = comment;\n    return scalar;\n}\nfunction findScalarTagByName(schema, value, tagName, tagToken, onError) {\n    if (tagName === '!')\n        return schema[identity.SCALAR]; // non-specific tag\n    const matchWithTest = [];\n    for (const tag of schema.tags) {\n        if (!tag.collection && tag.tag === tagName) {\n            if (tag.default && tag.test)\n                matchWithTest.push(tag);\n            else\n                return tag;\n        }\n    }\n    for (const tag of matchWithTest)\n        if (tag.test?.test(value))\n            return tag;\n    const kt = schema.knownTags[tagName];\n    if (kt && !kt.collection) {\n        // Ensure that the known tag is available for stringifying,\n        // but does not get used by default.\n        schema.tags.push(Object.assign({}, kt, { default: false, test: undefined }));\n        return kt;\n    }\n    onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, tagName !== 'tag:yaml.org,2002:str');\n    return schema[identity.SCALAR];\n}\nfunction findScalarTagByTest({ atKey, directives, schema }, value, token, onError) {\n    const tag = schema.tags.find(tag => (tag.default === true || (atKey && tag.default === 'key')) &&\n        tag.test?.test(value)) || schema[identity.SCALAR];\n    if (schema.compat) {\n        const compat = schema.compat.find(tag => tag.default && tag.test?.test(value)) ??\n            schema[identity.SCALAR];\n        if (tag.tag !== compat.tag) {\n            const ts = directives.tagString(tag.tag);\n            const cs = directives.tagString(compat.tag);\n            const msg = `Value may be parsed as either ${ts} or ${cs}`;\n            onError(token, 'TAG_RESOLVE_FAILED', msg, true);\n        }\n    }\n    return tag;\n}\n\nexports.composeScalar = composeScalar;\n","'use strict';\n\nfunction emptyScalarPosition(offset, before, pos) {\n    if (before) {\n        pos ?? (pos = before.length);\n        for (let i = pos - 1; i >= 0; --i) {\n            let st = before[i];\n            switch (st.type) {\n                case 'space':\n                case 'comment':\n                case 'newline':\n                    offset -= st.source.length;\n                    continue;\n            }\n            // Technically, an empty scalar is immediately after the last non-empty\n            // node, but it's more useful to place it after any whitespace.\n            st = before[++i];\n            while (st?.type === 'space') {\n                offset += st.source.length;\n                st = before[++i];\n            }\n            break;\n        }\n    }\n    return offset;\n}\n\nexports.emptyScalarPosition = emptyScalarPosition;\n","'use strict';\n\nvar Alias = require('../nodes/Alias.js');\nvar identity = require('../nodes/identity.js');\nvar composeCollection = require('./compose-collection.js');\nvar composeScalar = require('./compose-scalar.js');\nvar resolveEnd = require('./resolve-end.js');\nvar utilEmptyScalarPosition = require('./util-empty-scalar-position.js');\n\nconst CN = { composeNode, composeEmptyNode };\nfunction composeNode(ctx, token, props, onError) {\n    const atKey = ctx.atKey;\n    const { spaceBefore, comment, anchor, tag } = props;\n    let node;\n    let isSrcToken = true;\n    switch (token.type) {\n        case 'alias':\n            node = composeAlias(ctx, token, onError);\n            if (anchor || tag)\n                onError(token, 'ALIAS_PROPS', 'An alias node must not specify any properties');\n            break;\n        case 'scalar':\n        case 'single-quoted-scalar':\n        case 'double-quoted-scalar':\n        case 'block-scalar':\n            node = composeScalar.composeScalar(ctx, token, tag, onError);\n            if (anchor)\n                node.anchor = anchor.source.substring(1);\n            break;\n        case 'block-map':\n        case 'block-seq':\n        case 'flow-collection':\n            try {\n                node = composeCollection.composeCollection(CN, ctx, token, props, onError);\n                if (anchor)\n                    node.anchor = anchor.source.substring(1);\n            }\n            catch (error) {\n                // Almost certainly here due to a stack overflow\n                const message = error instanceof Error ? error.message : String(error);\n                onError(token, 'RESOURCE_EXHAUSTION', message);\n            }\n            break;\n        default: {\n            const message = token.type === 'error'\n                ? token.message\n                : `Unsupported token (type: ${token.type})`;\n            onError(token, 'UNEXPECTED_TOKEN', message);\n            isSrcToken = false;\n        }\n    }\n    node ?? (node = composeEmptyNode(ctx, token.offset, undefined, null, props, onError));\n    if (anchor && node.anchor === '')\n        onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');\n    if (atKey &&\n        ctx.options.stringKeys &&\n        (!identity.isScalar(node) ||\n            typeof node.value !== 'string' ||\n            (node.tag && node.tag !== 'tag:yaml.org,2002:str'))) {\n        const msg = 'With stringKeys, all keys must be strings';\n        onError(tag ?? token, 'NON_STRING_KEY', msg);\n    }\n    if (spaceBefore)\n        node.spaceBefore = true;\n    if (comment) {\n        if (token.type === 'scalar' && token.source === '')\n            node.comment = comment;\n        else\n            node.commentBefore = comment;\n    }\n    // @ts-expect-error Type checking misses meaning of isSrcToken\n    if (ctx.options.keepSourceTokens && isSrcToken)\n        node.srcToken = token;\n    return node;\n}\nfunction composeEmptyNode(ctx, offset, before, pos, { spaceBefore, comment, anchor, tag, end }, onError) {\n    const token = {\n        type: 'scalar',\n        offset: utilEmptyScalarPosition.emptyScalarPosition(offset, before, pos),\n        indent: -1,\n        source: ''\n    };\n    const node = composeScalar.composeScalar(ctx, token, tag, onError);\n    if (anchor) {\n        node.anchor = anchor.source.substring(1);\n        if (node.anchor === '')\n            onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');\n    }\n    if (spaceBefore)\n        node.spaceBefore = true;\n    if (comment) {\n        node.comment = comment;\n        node.range[2] = end;\n    }\n    return node;\n}\nfunction composeAlias({ options }, { offset, source, end }, onError) {\n    const alias = new Alias.Alias(source.substring(1));\n    if (alias.source === '')\n        onError(offset, 'BAD_ALIAS', 'Alias cannot be an empty string');\n    if (alias.source.endsWith(':'))\n        onError(offset + source.length - 1, 'BAD_ALIAS', 'Alias ending in : is ambiguous', true);\n    const valueEnd = offset + source.length;\n    const re = resolveEnd.resolveEnd(end, valueEnd, options.strict, onError);\n    alias.range = [offset, valueEnd, re.offset];\n    if (re.comment)\n        alias.comment = re.comment;\n    return alias;\n}\n\nexports.composeEmptyNode = composeEmptyNode;\nexports.composeNode = composeNode;\n","'use strict';\n\nvar Document = require('../doc/Document.js');\nvar composeNode = require('./compose-node.js');\nvar resolveEnd = require('./resolve-end.js');\nvar resolveProps = require('./resolve-props.js');\n\nfunction composeDoc(options, directives, { offset, start, value, end }, onError) {\n    const opts = Object.assign({ _directives: directives }, options);\n    const doc = new Document.Document(undefined, opts);\n    const ctx = {\n        atKey: false,\n        atRoot: true,\n        directives: doc.directives,\n        options: doc.options,\n        schema: doc.schema\n    };\n    const props = resolveProps.resolveProps(start, {\n        indicator: 'doc-start',\n        next: value ?? end?.[0],\n        offset,\n        onError,\n        parentIndent: 0,\n        startOnNewline: true\n    });\n    if (props.found) {\n        doc.directives.docStart = true;\n        if (value &&\n            (value.type === 'block-map' || value.type === 'block-seq') &&\n            !props.hasNewline)\n            onError(props.end, 'MISSING_CHAR', 'Block collection cannot start on same line with directives-end marker');\n    }\n    // @ts-expect-error If Contents is set, let's trust the user\n    doc.contents = value\n        ? composeNode.composeNode(ctx, value, props, onError)\n        : composeNode.composeEmptyNode(ctx, props.end, start, null, props, onError);\n    const contentEnd = doc.contents.range[2];\n    const re = resolveEnd.resolveEnd(end, contentEnd, false, onError);\n    if (re.comment)\n        doc.comment = re.comment;\n    doc.range = [offset, contentEnd, re.offset];\n    return doc;\n}\n\nexports.composeDoc = composeDoc;\n","'use strict';\n\nvar node_process = require('process');\nvar directives = require('../doc/directives.js');\nvar Document = require('../doc/Document.js');\nvar errors = require('../errors.js');\nvar identity = require('../nodes/identity.js');\nvar composeDoc = require('./compose-doc.js');\nvar resolveEnd = require('./resolve-end.js');\n\nfunction getErrorPos(src) {\n    if (typeof src === 'number')\n        return [src, src + 1];\n    if (Array.isArray(src))\n        return src.length === 2 ? src : [src[0], src[1]];\n    const { offset, source } = src;\n    return [offset, offset + (typeof source === 'string' ? source.length : 1)];\n}\nfunction parsePrelude(prelude) {\n    let comment = '';\n    let atComment = false;\n    let afterEmptyLine = false;\n    for (let i = 0; i < prelude.length; ++i) {\n        const source = prelude[i];\n        switch (source[0]) {\n            case '#':\n                comment +=\n                    (comment === '' ? '' : afterEmptyLine ? '\\n\\n' : '\\n') +\n                        (source.substring(1) || ' ');\n                atComment = true;\n                afterEmptyLine = false;\n                break;\n            case '%':\n                if (prelude[i + 1]?.[0] !== '#')\n                    i += 1;\n                atComment = false;\n                break;\n            default:\n                // This may be wrong after doc-end, but in that case it doesn't matter\n                if (!atComment)\n                    afterEmptyLine = true;\n                atComment = false;\n        }\n    }\n    return { comment, afterEmptyLine };\n}\n/**\n * Compose a stream of CST nodes into a stream of YAML Documents.\n *\n * ```ts\n * import { Composer, Parser } from 'yaml'\n *\n * const src: string = ...\n * const tokens = new Parser().parse(src)\n * const docs = new Composer().compose(tokens)\n * ```\n */\nclass Composer {\n    constructor(options = {}) {\n        this.doc = null;\n        this.atDirectives = false;\n        this.prelude = [];\n        this.errors = [];\n        this.warnings = [];\n        this.onError = (source, code, message, warning) => {\n            const pos = getErrorPos(source);\n            if (warning)\n                this.warnings.push(new errors.YAMLWarning(pos, code, message));\n            else\n                this.errors.push(new errors.YAMLParseError(pos, code, message));\n        };\n        // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n        this.directives = new directives.Directives({ version: options.version || '1.2' });\n        this.options = options;\n    }\n    decorate(doc, afterDoc) {\n        const { comment, afterEmptyLine } = parsePrelude(this.prelude);\n        //console.log({ dc: doc.comment, prelude, comment })\n        if (comment) {\n            const dc = doc.contents;\n            if (afterDoc) {\n                doc.comment = doc.comment ? `${doc.comment}\\n${comment}` : comment;\n            }\n            else if (afterEmptyLine || doc.directives.docStart || !dc) {\n                doc.commentBefore = comment;\n            }\n            else if (identity.isCollection(dc) && !dc.flow && dc.items.length > 0) {\n                let it = dc.items[0];\n                if (identity.isPair(it))\n                    it = it.key;\n                const cb = it.commentBefore;\n                it.commentBefore = cb ? `${comment}\\n${cb}` : comment;\n            }\n            else {\n                const cb = dc.commentBefore;\n                dc.commentBefore = cb ? `${comment}\\n${cb}` : comment;\n            }\n        }\n        if (afterDoc) {\n            for (let i = 0; i < this.errors.length; ++i)\n                doc.errors.push(this.errors[i]);\n            for (let i = 0; i < this.warnings.length; ++i)\n                doc.warnings.push(this.warnings[i]);\n        }\n        else {\n            doc.errors = this.errors;\n            doc.warnings = this.warnings;\n        }\n        this.prelude = [];\n        this.errors = [];\n        this.warnings = [];\n    }\n    /**\n     * Current stream status information.\n     *\n     * Mostly useful at the end of input for an empty stream.\n     */\n    streamInfo() {\n        return {\n            comment: parsePrelude(this.prelude).comment,\n            directives: this.directives,\n            errors: this.errors,\n            warnings: this.warnings\n        };\n    }\n    /**\n     * Compose tokens into documents.\n     *\n     * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.\n     * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.\n     */\n    *compose(tokens, forceDoc = false, endOffset = -1) {\n        for (const token of tokens)\n            yield* this.next(token);\n        yield* this.end(forceDoc, endOffset);\n    }\n    /** Advance the composer by one CST token. */\n    *next(token) {\n        if (node_process.env.LOG_STREAM)\n            console.dir(token, { depth: null });\n        switch (token.type) {\n            case 'directive':\n                this.directives.add(token.source, (offset, message, warning) => {\n                    const pos = getErrorPos(token);\n                    pos[0] += offset;\n                    this.onError(pos, 'BAD_DIRECTIVE', message, warning);\n                });\n                this.prelude.push(token.source);\n                this.atDirectives = true;\n                break;\n            case 'document': {\n                const doc = composeDoc.composeDoc(this.options, this.directives, token, this.onError);\n                if (this.atDirectives && !doc.directives.docStart)\n                    this.onError(token, 'MISSING_CHAR', 'Missing directives-end/doc-start indicator line');\n                this.decorate(doc, false);\n                if (this.doc)\n                    yield this.doc;\n                this.doc = doc;\n                this.atDirectives = false;\n                break;\n            }\n            case 'byte-order-mark':\n            case 'space':\n                break;\n            case 'comment':\n            case 'newline':\n                this.prelude.push(token.source);\n                break;\n            case 'error': {\n                const msg = token.source\n                    ? `${token.message}: ${JSON.stringify(token.source)}`\n                    : token.message;\n                const error = new errors.YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg);\n                if (this.atDirectives || !this.doc)\n                    this.errors.push(error);\n                else\n                    this.doc.errors.push(error);\n                break;\n            }\n            case 'doc-end': {\n                if (!this.doc) {\n                    const msg = 'Unexpected doc-end without preceding document';\n                    this.errors.push(new errors.YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg));\n                    break;\n                }\n                this.doc.directives.docEnd = true;\n                const end = resolveEnd.resolveEnd(token.end, token.offset + token.source.length, this.doc.options.strict, this.onError);\n                this.decorate(this.doc, true);\n                if (end.comment) {\n                    const dc = this.doc.comment;\n                    this.doc.comment = dc ? `${dc}\\n${end.comment}` : end.comment;\n                }\n                this.doc.range[2] = end.offset;\n                break;\n            }\n            default:\n                this.errors.push(new errors.YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', `Unsupported token ${token.type}`));\n        }\n    }\n    /**\n     * Call at end of input to yield any remaining document.\n     *\n     * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.\n     * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.\n     */\n    *end(forceDoc = false, endOffset = -1) {\n        if (this.doc) {\n            this.decorate(this.doc, true);\n            yield this.doc;\n            this.doc = null;\n        }\n        else if (forceDoc) {\n            const opts = Object.assign({ _directives: this.directives }, this.options);\n            const doc = new Document.Document(undefined, opts);\n            if (this.atDirectives)\n                this.onError(endOffset, 'MISSING_CHAR', 'Missing directives-end indicator line');\n            doc.range = [0, endOffset, endOffset];\n            this.decorate(doc, false);\n            yield doc;\n        }\n    }\n}\n\nexports.Composer = Composer;\n","'use strict';\n\nvar resolveBlockScalar = require('../compose/resolve-block-scalar.js');\nvar resolveFlowScalar = require('../compose/resolve-flow-scalar.js');\nvar errors = require('../errors.js');\nvar stringifyString = require('../stringify/stringifyString.js');\n\nfunction resolveAsScalar(token, strict = true, onError) {\n    if (token) {\n        const _onError = (pos, code, message) => {\n            const offset = typeof pos === 'number' ? pos : Array.isArray(pos) ? pos[0] : pos.offset;\n            if (onError)\n                onError(offset, code, message);\n            else\n                throw new errors.YAMLParseError([offset, offset + 1], code, message);\n        };\n        switch (token.type) {\n            case 'scalar':\n            case 'single-quoted-scalar':\n            case 'double-quoted-scalar':\n                return resolveFlowScalar.resolveFlowScalar(token, strict, _onError);\n            case 'block-scalar':\n                return resolveBlockScalar.resolveBlockScalar({ options: { strict } }, token, _onError);\n        }\n    }\n    return null;\n}\n/**\n * Create a new scalar token with `value`\n *\n * Values that represent an actual string but may be parsed as a different type should use a `type` other than `'PLAIN'`,\n * as this function does not support any schema operations and won't check for such conflicts.\n *\n * @param value The string representation of the value, which will have its content properly indented.\n * @param context.end Comments and whitespace after the end of the value, or after the block scalar header. If undefined, a newline will be added.\n * @param context.implicitKey Being within an implicit key may affect the resolved type of the token's value.\n * @param context.indent The indent level of the token.\n * @param context.inFlow Is this scalar within a flow collection? This may affect the resolved type of the token's value.\n * @param context.offset The offset position of the token.\n * @param context.type The preferred type of the scalar token. If undefined, the previous type of the `token` will be used, defaulting to `'PLAIN'`.\n */\nfunction createScalarToken(value, context) {\n    const { implicitKey = false, indent, inFlow = false, offset = -1, type = 'PLAIN' } = context;\n    const source = stringifyString.stringifyString({ type, value }, {\n        implicitKey,\n        indent: indent > 0 ? ' '.repeat(indent) : '',\n        inFlow,\n        options: { blockQuote: true, lineWidth: -1 }\n    });\n    const end = context.end ?? [\n        { type: 'newline', offset: -1, indent, source: '\\n' }\n    ];\n    switch (source[0]) {\n        case '|':\n        case '>': {\n            const he = source.indexOf('\\n');\n            const head = source.substring(0, he);\n            const body = source.substring(he + 1) + '\\n';\n            const props = [\n                { type: 'block-scalar-header', offset, indent, source: head }\n            ];\n            if (!addEndtoBlockProps(props, end))\n                props.push({ type: 'newline', offset: -1, indent, source: '\\n' });\n            return { type: 'block-scalar', offset, indent, props, source: body };\n        }\n        case '\"':\n            return { type: 'double-quoted-scalar', offset, indent, source, end };\n        case \"'\":\n            return { type: 'single-quoted-scalar', offset, indent, source, end };\n        default:\n            return { type: 'scalar', offset, indent, source, end };\n    }\n}\n/**\n * Set the value of `token` to the given string `value`, overwriting any previous contents and type that it may have.\n *\n * Best efforts are made to retain any comments previously associated with the `token`,\n * though all contents within a collection's `items` will be overwritten.\n *\n * Values that represent an actual string but may be parsed as a different type should use a `type` other than `'PLAIN'`,\n * as this function does not support any schema operations and won't check for such conflicts.\n *\n * @param token Any token. If it does not include an `indent` value, the value will be stringified as if it were an implicit key.\n * @param value The string representation of the value, which will have its content properly indented.\n * @param context.afterKey In most cases, values after a key should have an additional level of indentation.\n * @param context.implicitKey Being within an implicit key may affect the resolved type of the token's value.\n * @param context.inFlow Being within a flow collection may affect the resolved type of the token's value.\n * @param context.type The preferred type of the scalar token. If undefined, the previous type of the `token` will be used, defaulting to `'PLAIN'`.\n */\nfunction setScalarValue(token, value, context = {}) {\n    let { afterKey = false, implicitKey = false, inFlow = false, type } = context;\n    let indent = 'indent' in token ? token.indent : null;\n    if (afterKey && typeof indent === 'number')\n        indent += 2;\n    if (!type)\n        switch (token.type) {\n            case 'single-quoted-scalar':\n                type = 'QUOTE_SINGLE';\n                break;\n            case 'double-quoted-scalar':\n                type = 'QUOTE_DOUBLE';\n                break;\n            case 'block-scalar': {\n                const header = token.props[0];\n                if (header.type !== 'block-scalar-header')\n                    throw new Error('Invalid block scalar header');\n                type = header.source[0] === '>' ? 'BLOCK_FOLDED' : 'BLOCK_LITERAL';\n                break;\n            }\n            default:\n                type = 'PLAIN';\n        }\n    const source = stringifyString.stringifyString({ type, value }, {\n        implicitKey: implicitKey || indent === null,\n        indent: indent !== null && indent > 0 ? ' '.repeat(indent) : '',\n        inFlow,\n        options: { blockQuote: true, lineWidth: -1 }\n    });\n    switch (source[0]) {\n        case '|':\n        case '>':\n            setBlockScalarValue(token, source);\n            break;\n        case '\"':\n            setFlowScalarValue(token, source, 'double-quoted-scalar');\n            break;\n        case \"'\":\n            setFlowScalarValue(token, source, 'single-quoted-scalar');\n            break;\n        default:\n            setFlowScalarValue(token, source, 'scalar');\n    }\n}\nfunction setBlockScalarValue(token, source) {\n    const he = source.indexOf('\\n');\n    const head = source.substring(0, he);\n    const body = source.substring(he + 1) + '\\n';\n    if (token.type === 'block-scalar') {\n        const header = token.props[0];\n        if (header.type !== 'block-scalar-header')\n            throw new Error('Invalid block scalar header');\n        header.source = head;\n        token.source = body;\n    }\n    else {\n        const { offset } = token;\n        const indent = 'indent' in token ? token.indent : -1;\n        const props = [\n            { type: 'block-scalar-header', offset, indent, source: head }\n        ];\n        if (!addEndtoBlockProps(props, 'end' in token ? token.end : undefined))\n            props.push({ type: 'newline', offset: -1, indent, source: '\\n' });\n        for (const key of Object.keys(token))\n            if (key !== 'type' && key !== 'offset')\n                delete token[key];\n        Object.assign(token, { type: 'block-scalar', indent, props, source: body });\n    }\n}\n/** @returns `true` if last token is a newline */\nfunction addEndtoBlockProps(props, end) {\n    if (end)\n        for (const st of end)\n            switch (st.type) {\n                case 'space':\n                case 'comment':\n                    props.push(st);\n                    break;\n                case 'newline':\n                    props.push(st);\n                    return true;\n            }\n    return false;\n}\nfunction setFlowScalarValue(token, source, type) {\n    switch (token.type) {\n        case 'scalar':\n        case 'double-quoted-scalar':\n        case 'single-quoted-scalar':\n            token.type = type;\n            token.source = source;\n            break;\n        case 'block-scalar': {\n            const end = token.props.slice(1);\n            let oa = source.length;\n            if (token.props[0].type === 'block-scalar-header')\n                oa -= token.props[0].source.length;\n            for (const tok of end)\n                tok.offset += oa;\n            delete token.props;\n            Object.assign(token, { type, source, end });\n            break;\n        }\n        case 'block-map':\n        case 'block-seq': {\n            const offset = token.offset + source.length;\n            const nl = { type: 'newline', offset, indent: token.indent, source: '\\n' };\n            delete token.items;\n            Object.assign(token, { type, source, end: [nl] });\n            break;\n        }\n        default: {\n            const indent = 'indent' in token ? token.indent : -1;\n            const end = 'end' in token && Array.isArray(token.end)\n                ? token.end.filter(st => st.type === 'space' ||\n                    st.type === 'comment' ||\n                    st.type === 'newline')\n                : [];\n            for (const key of Object.keys(token))\n                if (key !== 'type' && key !== 'offset')\n                    delete token[key];\n            Object.assign(token, { type, indent, source, end });\n        }\n    }\n}\n\nexports.createScalarToken = createScalarToken;\nexports.resolveAsScalar = resolveAsScalar;\nexports.setScalarValue = setScalarValue;\n","'use strict';\n\n/**\n * Stringify a CST document, token, or collection item\n *\n * Fair warning: This applies no validation whatsoever, and\n * simply concatenates the sources in their logical order.\n */\nconst stringify = (cst) => 'type' in cst ? stringifyToken(cst) : stringifyItem(cst);\nfunction stringifyToken(token) {\n    switch (token.type) {\n        case 'block-scalar': {\n            let res = '';\n            for (const tok of token.props)\n                res += stringifyToken(tok);\n            return res + token.source;\n        }\n        case 'block-map':\n        case 'block-seq': {\n            let res = '';\n            for (const item of token.items)\n                res += stringifyItem(item);\n            return res;\n        }\n        case 'flow-collection': {\n            let res = token.start.source;\n            for (const item of token.items)\n                res += stringifyItem(item);\n            for (const st of token.end)\n                res += st.source;\n            return res;\n        }\n        case 'document': {\n            let res = stringifyItem(token);\n            if (token.end)\n                for (const st of token.end)\n                    res += st.source;\n            return res;\n        }\n        default: {\n            let res = token.source;\n            if ('end' in token && token.end)\n                for (const st of token.end)\n                    res += st.source;\n            return res;\n        }\n    }\n}\nfunction stringifyItem({ start, key, sep, value }) {\n    let res = '';\n    for (const st of start)\n        res += st.source;\n    if (key)\n        res += stringifyToken(key);\n    if (sep)\n        for (const st of sep)\n            res += st.source;\n    if (value)\n        res += stringifyToken(value);\n    return res;\n}\n\nexports.stringify = stringify;\n","'use strict';\n\nconst BREAK = Symbol('break visit');\nconst SKIP = Symbol('skip children');\nconst REMOVE = Symbol('remove item');\n/**\n * Apply a visitor to a CST document or item.\n *\n * Walks through the tree (depth-first) starting from the root, calling a\n * `visitor` function with two arguments when entering each item:\n *   - `item`: The current item, which included the following members:\n *     - `start: SourceToken[]` – Source tokens before the key or value,\n *       possibly including its anchor or tag.\n *     - `key?: Token | null` – Set for pair values. May then be `null`, if\n *       the key before the `:` separator is empty.\n *     - `sep?: SourceToken[]` – Source tokens between the key and the value,\n *       which should include the `:` map value indicator if `value` is set.\n *     - `value?: Token` – The value of a sequence item, or of a map pair.\n *   - `path`: The steps from the root to the current node, as an array of\n *     `['key' | 'value', number]` tuples.\n *\n * The return value of the visitor may be used to control the traversal:\n *   - `undefined` (default): Do nothing and continue\n *   - `visit.SKIP`: Do not visit the children of this token, continue with\n *      next sibling\n *   - `visit.BREAK`: Terminate traversal completely\n *   - `visit.REMOVE`: Remove the current item, then continue with the next one\n *   - `number`: Set the index of the next step. This is useful especially if\n *     the index of the current token has changed.\n *   - `function`: Define the next visitor for this item. After the original\n *     visitor is called on item entry, next visitors are called after handling\n *     a non-empty `key` and when exiting the item.\n */\nfunction visit(cst, visitor) {\n    if ('type' in cst && cst.type === 'document')\n        cst = { start: cst.start, value: cst.value };\n    _visit(Object.freeze([]), cst, visitor);\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisit.BREAK = BREAK;\n/** Do not visit the children of the current item */\nvisit.SKIP = SKIP;\n/** Remove the current item */\nvisit.REMOVE = REMOVE;\n/** Find the item at `path` from `cst` as the root */\nvisit.itemAtPath = (cst, path) => {\n    let item = cst;\n    for (const [field, index] of path) {\n        const tok = item?.[field];\n        if (tok && 'items' in tok) {\n            item = tok.items[index];\n        }\n        else\n            return undefined;\n    }\n    return item;\n};\n/**\n * Get the immediate parent collection of the item at `path` from `cst` as the root.\n *\n * Throws an error if the collection is not found, which should never happen if the item itself exists.\n */\nvisit.parentCollection = (cst, path) => {\n    const parent = visit.itemAtPath(cst, path.slice(0, -1));\n    const field = path[path.length - 1][0];\n    const coll = parent?.[field];\n    if (coll && 'items' in coll)\n        return coll;\n    throw new Error('Parent collection not found');\n};\nfunction _visit(path, item, visitor) {\n    let ctrl = visitor(item, path);\n    if (typeof ctrl === 'symbol')\n        return ctrl;\n    for (const field of ['key', 'value']) {\n        const token = item[field];\n        if (token && 'items' in token) {\n            for (let i = 0; i < token.items.length; ++i) {\n                const ci = _visit(Object.freeze(path.concat([[field, i]])), token.items[i], visitor);\n                if (typeof ci === 'number')\n                    i = ci - 1;\n                else if (ci === BREAK)\n                    return BREAK;\n                else if (ci === REMOVE) {\n                    token.items.splice(i, 1);\n                    i -= 1;\n                }\n            }\n            if (typeof ctrl === 'function' && field === 'key')\n                ctrl = ctrl(item, path);\n        }\n    }\n    return typeof ctrl === 'function' ? ctrl(item, path) : ctrl;\n}\n\nexports.visit = visit;\n","'use strict';\n\nvar cstScalar = require('./cst-scalar.js');\nvar cstStringify = require('./cst-stringify.js');\nvar cstVisit = require('./cst-visit.js');\n\n/** The byte order mark */\nconst BOM = '\\u{FEFF}';\n/** Start of doc-mode */\nconst DOCUMENT = '\\x02'; // C0: Start of Text\n/** Unexpected end of flow-mode */\nconst FLOW_END = '\\x18'; // C0: Cancel\n/** Next token is a scalar value */\nconst SCALAR = '\\x1f'; // C0: Unit Separator\n/** @returns `true` if `token` is a flow or block collection */\nconst isCollection = (token) => !!token && 'items' in token;\n/** @returns `true` if `token` is a flow or block scalar; not an alias */\nconst isScalar = (token) => !!token &&\n    (token.type === 'scalar' ||\n        token.type === 'single-quoted-scalar' ||\n        token.type === 'double-quoted-scalar' ||\n        token.type === 'block-scalar');\n/* istanbul ignore next */\n/** Get a printable representation of a lexer token */\nfunction prettyToken(token) {\n    switch (token) {\n        case BOM:\n            return '<BOM>';\n        case DOCUMENT:\n            return '<DOC>';\n        case FLOW_END:\n            return '<FLOW_END>';\n        case SCALAR:\n            return '<SCALAR>';\n        default:\n            return JSON.stringify(token);\n    }\n}\n/** Identify the type of a lexer token. May return `null` for unknown tokens. */\nfunction tokenType(source) {\n    switch (source) {\n        case BOM:\n            return 'byte-order-mark';\n        case DOCUMENT:\n            return 'doc-mode';\n        case FLOW_END:\n            return 'flow-error-end';\n        case SCALAR:\n            return 'scalar';\n        case '---':\n            return 'doc-start';\n        case '...':\n            return 'doc-end';\n        case '':\n        case '\\n':\n        case '\\r\\n':\n            return 'newline';\n        case '-':\n            return 'seq-item-ind';\n        case '?':\n            return 'explicit-key-ind';\n        case ':':\n            return 'map-value-ind';\n        case '{':\n            return 'flow-map-start';\n        case '}':\n            return 'flow-map-end';\n        case '[':\n            return 'flow-seq-start';\n        case ']':\n            return 'flow-seq-end';\n        case ',':\n            return 'comma';\n    }\n    switch (source[0]) {\n        case ' ':\n        case '\\t':\n            return 'space';\n        case '#':\n            return 'comment';\n        case '%':\n            return 'directive-line';\n        case '*':\n            return 'alias';\n        case '&':\n            return 'anchor';\n        case '!':\n            return 'tag';\n        case \"'\":\n            return 'single-quoted-scalar';\n        case '\"':\n            return 'double-quoted-scalar';\n        case '|':\n        case '>':\n            return 'block-scalar-header';\n    }\n    return null;\n}\n\nexports.createScalarToken = cstScalar.createScalarToken;\nexports.resolveAsScalar = cstScalar.resolveAsScalar;\nexports.setScalarValue = cstScalar.setScalarValue;\nexports.stringify = cstStringify.stringify;\nexports.visit = cstVisit.visit;\nexports.BOM = BOM;\nexports.DOCUMENT = DOCUMENT;\nexports.FLOW_END = FLOW_END;\nexports.SCALAR = SCALAR;\nexports.isCollection = isCollection;\nexports.isScalar = isScalar;\nexports.prettyToken = prettyToken;\nexports.tokenType = tokenType;\n","'use strict';\n\nvar cst = require('./cst.js');\n\n/*\nSTART -> stream\n\nstream\n  directive -> line-end -> stream\n  indent + line-end -> stream\n  [else] -> line-start\n\nline-end\n  comment -> line-end\n  newline -> .\n  input-end -> END\n\nline-start\n  doc-start -> doc\n  doc-end -> stream\n  [else] -> indent -> block-start\n\nblock-start\n  seq-item-start -> block-start\n  explicit-key-start -> block-start\n  map-value-start -> block-start\n  [else] -> doc\n\ndoc\n  line-end -> line-start\n  spaces -> doc\n  anchor -> doc\n  tag -> doc\n  flow-start -> flow -> doc\n  flow-end -> error -> doc\n  seq-item-start -> error -> doc\n  explicit-key-start -> error -> doc\n  map-value-start -> doc\n  alias -> doc\n  quote-start -> quoted-scalar -> doc\n  block-scalar-header -> line-end -> block-scalar(min) -> line-start\n  [else] -> plain-scalar(false, min) -> doc\n\nflow\n  line-end -> flow\n  spaces -> flow\n  anchor -> flow\n  tag -> flow\n  flow-start -> flow -> flow\n  flow-end -> .\n  seq-item-start -> error -> flow\n  explicit-key-start -> flow\n  map-value-start -> flow\n  alias -> flow\n  quote-start -> quoted-scalar -> flow\n  comma -> flow\n  [else] -> plain-scalar(true, 0) -> flow\n\nquoted-scalar\n  quote-end -> .\n  [else] -> quoted-scalar\n\nblock-scalar(min)\n  newline + peek(indent < min) -> .\n  [else] -> block-scalar(min)\n\nplain-scalar(is-flow, min)\n  scalar-end(is-flow) -> .\n  peek(newline + (indent < min)) -> .\n  [else] -> plain-scalar(min)\n*/\nfunction isEmpty(ch) {\n    switch (ch) {\n        case undefined:\n        case ' ':\n        case '\\n':\n        case '\\r':\n        case '\\t':\n            return true;\n        default:\n            return false;\n    }\n}\nconst hexDigits = new Set('0123456789ABCDEFabcdef');\nconst tagChars = new Set(\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()\");\nconst flowIndicatorChars = new Set(',[]{}');\nconst invalidAnchorChars = new Set(' ,[]{}\\n\\r\\t');\nconst isNotAnchorChar = (ch) => !ch || invalidAnchorChars.has(ch);\n/**\n * Splits an input string into lexical tokens, i.e. smaller strings that are\n * easily identifiable by `tokens.tokenType()`.\n *\n * Lexing starts always in a \"stream\" context. Incomplete input may be buffered\n * until a complete token can be emitted.\n *\n * In addition to slices of the original input, the following control characters\n * may also be emitted:\n *\n * - `\\x02` (Start of Text): A document starts with the next token\n * - `\\x18` (Cancel): Unexpected end of flow-mode (indicates an error)\n * - `\\x1f` (Unit Separator): Next token is a scalar value\n * - `\\u{FEFF}` (Byte order mark): Emitted separately outside documents\n */\nclass Lexer {\n    constructor() {\n        /**\n         * Flag indicating whether the end of the current buffer marks the end of\n         * all input\n         */\n        this.atEnd = false;\n        /**\n         * Explicit indent set in block scalar header, as an offset from the current\n         * minimum indent, so e.g. set to 1 from a header `|2+`. Set to -1 if not\n         * explicitly set.\n         */\n        this.blockScalarIndent = -1;\n        /**\n         * Block scalars that include a + (keep) chomping indicator in their header\n         * include trailing empty lines, which are otherwise excluded from the\n         * scalar's contents.\n         */\n        this.blockScalarKeep = false;\n        /** Current input */\n        this.buffer = '';\n        /**\n         * Flag noting whether the map value indicator : can immediately follow this\n         * node within a flow context.\n         */\n        this.flowKey = false;\n        /** Count of surrounding flow collection levels. */\n        this.flowLevel = 0;\n        /**\n         * Minimum level of indentation required for next lines to be parsed as a\n         * part of the current scalar value.\n         */\n        this.indentNext = 0;\n        /** Indentation level of the current line. */\n        this.indentValue = 0;\n        /** Position of the next \\n character. */\n        this.lineEndPos = null;\n        /** Stores the state of the lexer if reaching the end of incpomplete input */\n        this.next = null;\n        /** A pointer to `buffer`; the current position of the lexer. */\n        this.pos = 0;\n    }\n    /**\n     * Generate YAML tokens from the `source` string. If `incomplete`,\n     * a part of the last line may be left as a buffer for the next call.\n     *\n     * @returns A generator of lexical tokens\n     */\n    *lex(source, incomplete = false) {\n        if (source) {\n            if (typeof source !== 'string')\n                throw TypeError('source is not a string');\n            this.buffer = this.buffer ? this.buffer + source : source;\n            this.lineEndPos = null;\n        }\n        this.atEnd = !incomplete;\n        let next = this.next ?? 'stream';\n        while (next && (incomplete || this.hasChars(1)))\n            next = yield* this.parseNext(next);\n    }\n    atLineEnd() {\n        let i = this.pos;\n        let ch = this.buffer[i];\n        while (ch === ' ' || ch === '\\t')\n            ch = this.buffer[++i];\n        if (!ch || ch === '#' || ch === '\\n')\n            return true;\n        if (ch === '\\r')\n            return this.buffer[i + 1] === '\\n';\n        return false;\n    }\n    charAt(n) {\n        return this.buffer[this.pos + n];\n    }\n    continueScalar(offset) {\n        let ch = this.buffer[offset];\n        if (this.indentNext > 0) {\n            let indent = 0;\n            while (ch === ' ')\n                ch = this.buffer[++indent + offset];\n            if (ch === '\\r') {\n                const next = this.buffer[indent + offset + 1];\n                if (next === '\\n' || (!next && !this.atEnd))\n                    return offset + indent + 1;\n            }\n            return ch === '\\n' || indent >= this.indentNext || (!ch && !this.atEnd)\n                ? offset + indent\n                : -1;\n        }\n        if (ch === '-' || ch === '.') {\n            const dt = this.buffer.substr(offset, 3);\n            if ((dt === '---' || dt === '...') && isEmpty(this.buffer[offset + 3]))\n                return -1;\n        }\n        return offset;\n    }\n    getLine() {\n        let end = this.lineEndPos;\n        if (typeof end !== 'number' || (end !== -1 && end < this.pos)) {\n            end = this.buffer.indexOf('\\n', this.pos);\n            this.lineEndPos = end;\n        }\n        if (end === -1)\n            return this.atEnd ? this.buffer.substring(this.pos) : null;\n        if (this.buffer[end - 1] === '\\r')\n            end -= 1;\n        return this.buffer.substring(this.pos, end);\n    }\n    hasChars(n) {\n        return this.pos + n <= this.buffer.length;\n    }\n    setNext(state) {\n        this.buffer = this.buffer.substring(this.pos);\n        this.pos = 0;\n        this.lineEndPos = null;\n        this.next = state;\n        return null;\n    }\n    peek(n) {\n        return this.buffer.substr(this.pos, n);\n    }\n    *parseNext(next) {\n        switch (next) {\n            case 'stream':\n                return yield* this.parseStream();\n            case 'line-start':\n                return yield* this.parseLineStart();\n            case 'block-start':\n                return yield* this.parseBlockStart();\n            case 'doc':\n                return yield* this.parseDocument();\n            case 'flow':\n                return yield* this.parseFlowCollection();\n            case 'quoted-scalar':\n                return yield* this.parseQuotedScalar();\n            case 'block-scalar':\n                return yield* this.parseBlockScalar();\n            case 'plain-scalar':\n                return yield* this.parsePlainScalar();\n        }\n    }\n    *parseStream() {\n        let line = this.getLine();\n        if (line === null)\n            return this.setNext('stream');\n        if (line[0] === cst.BOM) {\n            yield* this.pushCount(1);\n            line = line.substring(1);\n        }\n        if (line[0] === '%') {\n            let dirEnd = line.length;\n            let cs = line.indexOf('#');\n            while (cs !== -1) {\n                const ch = line[cs - 1];\n                if (ch === ' ' || ch === '\\t') {\n                    dirEnd = cs - 1;\n                    break;\n                }\n                else {\n                    cs = line.indexOf('#', cs + 1);\n                }\n            }\n            while (true) {\n                const ch = line[dirEnd - 1];\n                if (ch === ' ' || ch === '\\t')\n                    dirEnd -= 1;\n                else\n                    break;\n            }\n            const n = (yield* this.pushCount(dirEnd)) + (yield* this.pushSpaces(true));\n            yield* this.pushCount(line.length - n); // possible comment\n            this.pushNewline();\n            return 'stream';\n        }\n        if (this.atLineEnd()) {\n            const sp = yield* this.pushSpaces(true);\n            yield* this.pushCount(line.length - sp);\n            yield* this.pushNewline();\n            return 'stream';\n        }\n        yield cst.DOCUMENT;\n        return yield* this.parseLineStart();\n    }\n    *parseLineStart() {\n        const ch = this.charAt(0);\n        if (!ch && !this.atEnd)\n            return this.setNext('line-start');\n        if (ch === '-' || ch === '.') {\n            if (!this.atEnd && !this.hasChars(4))\n                return this.setNext('line-start');\n            const s = this.peek(3);\n            if ((s === '---' || s === '...') && isEmpty(this.charAt(3))) {\n                yield* this.pushCount(3);\n                this.indentValue = 0;\n                this.indentNext = 0;\n                return s === '---' ? 'doc' : 'stream';\n            }\n        }\n        this.indentValue = yield* this.pushSpaces(false);\n        if (this.indentNext > this.indentValue && !isEmpty(this.charAt(1)))\n            this.indentNext = this.indentValue;\n        return yield* this.parseBlockStart();\n    }\n    *parseBlockStart() {\n        const [ch0, ch1] = this.peek(2);\n        if (!ch1 && !this.atEnd)\n            return this.setNext('block-start');\n        if ((ch0 === '-' || ch0 === '?' || ch0 === ':') && isEmpty(ch1)) {\n            const n = (yield* this.pushCount(1)) + (yield* this.pushSpaces(true));\n            this.indentNext = this.indentValue + 1;\n            this.indentValue += n;\n            return 'block-start';\n        }\n        return 'doc';\n    }\n    *parseDocument() {\n        yield* this.pushSpaces(true);\n        const line = this.getLine();\n        if (line === null)\n            return this.setNext('doc');\n        let n = yield* this.pushIndicators();\n        switch (line[n]) {\n            case '#':\n                yield* this.pushCount(line.length - n);\n            // fallthrough\n            case undefined:\n                yield* this.pushNewline();\n                return yield* this.parseLineStart();\n            case '{':\n            case '[':\n                yield* this.pushCount(1);\n                this.flowKey = false;\n                this.flowLevel = 1;\n                return 'flow';\n            case '}':\n            case ']':\n                // this is an error\n                yield* this.pushCount(1);\n                return 'doc';\n            case '*':\n                yield* this.pushUntil(isNotAnchorChar);\n                return 'doc';\n            case '\"':\n            case \"'\":\n                return yield* this.parseQuotedScalar();\n            case '|':\n            case '>':\n                n += yield* this.parseBlockScalarHeader();\n                n += yield* this.pushSpaces(true);\n                yield* this.pushCount(line.length - n);\n                yield* this.pushNewline();\n                return yield* this.parseBlockScalar();\n            default:\n                return yield* this.parsePlainScalar();\n        }\n    }\n    *parseFlowCollection() {\n        let nl, sp;\n        let indent = -1;\n        do {\n            nl = yield* this.pushNewline();\n            if (nl > 0) {\n                sp = yield* this.pushSpaces(false);\n                this.indentValue = indent = sp;\n            }\n            else {\n                sp = 0;\n            }\n            sp += yield* this.pushSpaces(true);\n        } while (nl + sp > 0);\n        const line = this.getLine();\n        if (line === null)\n            return this.setNext('flow');\n        if ((indent !== -1 && indent < this.indentNext && line[0] !== '#') ||\n            (indent === 0 &&\n                (line.startsWith('---') || line.startsWith('...')) &&\n                isEmpty(line[3]))) {\n            // Allowing for the terminal ] or } at the same (rather than greater)\n            // indent level as the initial [ or { is technically invalid, but\n            // failing here would be surprising to users.\n            const atFlowEndMarker = indent === this.indentNext - 1 &&\n                this.flowLevel === 1 &&\n                (line[0] === ']' || line[0] === '}');\n            if (!atFlowEndMarker) {\n                // this is an error\n                this.flowLevel = 0;\n                yield cst.FLOW_END;\n                return yield* this.parseLineStart();\n            }\n        }\n        let n = 0;\n        while (line[n] === ',') {\n            n += yield* this.pushCount(1);\n            n += yield* this.pushSpaces(true);\n            this.flowKey = false;\n        }\n        n += yield* this.pushIndicators();\n        switch (line[n]) {\n            case undefined:\n                return 'flow';\n            case '#':\n                yield* this.pushCount(line.length - n);\n                return 'flow';\n            case '{':\n            case '[':\n                yield* this.pushCount(1);\n                this.flowKey = false;\n                this.flowLevel += 1;\n                return 'flow';\n            case '}':\n            case ']':\n                yield* this.pushCount(1);\n                this.flowKey = true;\n                this.flowLevel -= 1;\n                return this.flowLevel ? 'flow' : 'doc';\n            case '*':\n                yield* this.pushUntil(isNotAnchorChar);\n                return 'flow';\n            case '\"':\n            case \"'\":\n                this.flowKey = true;\n                return yield* this.parseQuotedScalar();\n            case ':': {\n                const next = this.charAt(1);\n                if (this.flowKey || isEmpty(next) || next === ',') {\n                    this.flowKey = false;\n                    yield* this.pushCount(1);\n                    yield* this.pushSpaces(true);\n                    return 'flow';\n                }\n            }\n            // fallthrough\n            default:\n                this.flowKey = false;\n                return yield* this.parsePlainScalar();\n        }\n    }\n    *parseQuotedScalar() {\n        const quote = this.charAt(0);\n        let end = this.buffer.indexOf(quote, this.pos + 1);\n        if (quote === \"'\") {\n            while (end !== -1 && this.buffer[end + 1] === \"'\")\n                end = this.buffer.indexOf(\"'\", end + 2);\n        }\n        else {\n            // double-quote\n            while (end !== -1) {\n                let n = 0;\n                while (this.buffer[end - 1 - n] === '\\\\')\n                    n += 1;\n                if (n % 2 === 0)\n                    break;\n                end = this.buffer.indexOf('\"', end + 1);\n            }\n        }\n        // Only looking for newlines within the quotes\n        const qb = this.buffer.substring(0, end);\n        let nl = qb.indexOf('\\n', this.pos);\n        if (nl !== -1) {\n            while (nl !== -1) {\n                const cs = this.continueScalar(nl + 1);\n                if (cs === -1)\n                    break;\n                nl = qb.indexOf('\\n', cs);\n            }\n            if (nl !== -1) {\n                // this is an error caused by an unexpected unindent\n                end = nl - (qb[nl - 1] === '\\r' ? 2 : 1);\n            }\n        }\n        if (end === -1) {\n            if (!this.atEnd)\n                return this.setNext('quoted-scalar');\n            end = this.buffer.length;\n        }\n        yield* this.pushToIndex(end + 1, false);\n        return this.flowLevel ? 'flow' : 'doc';\n    }\n    *parseBlockScalarHeader() {\n        this.blockScalarIndent = -1;\n        this.blockScalarKeep = false;\n        let i = this.pos;\n        while (true) {\n            const ch = this.buffer[++i];\n            if (ch === '+')\n                this.blockScalarKeep = true;\n            else if (ch > '0' && ch <= '9')\n                this.blockScalarIndent = Number(ch) - 1;\n            else if (ch !== '-')\n                break;\n        }\n        return yield* this.pushUntil(ch => isEmpty(ch) || ch === '#');\n    }\n    *parseBlockScalar() {\n        let nl = this.pos - 1; // may be -1 if this.pos === 0\n        let indent = 0;\n        let ch;\n        loop: for (let i = this.pos; (ch = this.buffer[i]); ++i) {\n            switch (ch) {\n                case ' ':\n                    indent += 1;\n                    break;\n                case '\\n':\n                    nl = i;\n                    indent = 0;\n                    break;\n                case '\\r': {\n                    const next = this.buffer[i + 1];\n                    if (!next && !this.atEnd)\n                        return this.setNext('block-scalar');\n                    if (next === '\\n')\n                        break;\n                } // fallthrough\n                default:\n                    break loop;\n            }\n        }\n        if (!ch && !this.atEnd)\n            return this.setNext('block-scalar');\n        if (indent >= this.indentNext) {\n            if (this.blockScalarIndent === -1)\n                this.indentNext = indent;\n            else {\n                this.indentNext =\n                    this.blockScalarIndent + (this.indentNext === 0 ? 1 : this.indentNext);\n            }\n            do {\n                const cs = this.continueScalar(nl + 1);\n                if (cs === -1)\n                    break;\n                nl = this.buffer.indexOf('\\n', cs);\n            } while (nl !== -1);\n            if (nl === -1) {\n                if (!this.atEnd)\n                    return this.setNext('block-scalar');\n                nl = this.buffer.length;\n            }\n        }\n        // Trailing insufficiently indented tabs are invalid.\n        // To catch that during parsing, we include them in the block scalar value.\n        let i = nl + 1;\n        ch = this.buffer[i];\n        while (ch === ' ')\n            ch = this.buffer[++i];\n        if (ch === '\\t') {\n            while (ch === '\\t' || ch === ' ' || ch === '\\r' || ch === '\\n')\n                ch = this.buffer[++i];\n            nl = i - 1;\n        }\n        else if (!this.blockScalarKeep) {\n            do {\n                let i = nl - 1;\n                let ch = this.buffer[i];\n                if (ch === '\\r')\n                    ch = this.buffer[--i];\n                const lastChar = i; // Drop the line if last char not more indented\n                while (ch === ' ')\n                    ch = this.buffer[--i];\n                if (ch === '\\n' && i >= this.pos && i + 1 + indent > lastChar)\n                    nl = i;\n                else\n                    break;\n            } while (true);\n        }\n        yield cst.SCALAR;\n        yield* this.pushToIndex(nl + 1, true);\n        return yield* this.parseLineStart();\n    }\n    *parsePlainScalar() {\n        const inFlow = this.flowLevel > 0;\n        let end = this.pos - 1;\n        let i = this.pos - 1;\n        let ch;\n        while ((ch = this.buffer[++i])) {\n            if (ch === ':') {\n                const next = this.buffer[i + 1];\n                if (isEmpty(next) || (inFlow && flowIndicatorChars.has(next)))\n                    break;\n                end = i;\n            }\n            else if (isEmpty(ch)) {\n                let next = this.buffer[i + 1];\n                if (ch === '\\r') {\n                    if (next === '\\n') {\n                        i += 1;\n                        ch = '\\n';\n                        next = this.buffer[i + 1];\n                    }\n                    else\n                        end = i;\n                }\n                if (next === '#' || (inFlow && flowIndicatorChars.has(next)))\n                    break;\n                if (ch === '\\n') {\n                    const cs = this.continueScalar(i + 1);\n                    if (cs === -1)\n                        break;\n                    i = Math.max(i, cs - 2); // to advance, but still account for ' #'\n                }\n            }\n            else {\n                if (inFlow && flowIndicatorChars.has(ch))\n                    break;\n                end = i;\n            }\n        }\n        if (!ch && !this.atEnd)\n            return this.setNext('plain-scalar');\n        yield cst.SCALAR;\n        yield* this.pushToIndex(end + 1, true);\n        return inFlow ? 'flow' : 'doc';\n    }\n    *pushCount(n) {\n        if (n > 0) {\n            yield this.buffer.substr(this.pos, n);\n            this.pos += n;\n            return n;\n        }\n        return 0;\n    }\n    *pushToIndex(i, allowEmpty) {\n        const s = this.buffer.slice(this.pos, i);\n        if (s) {\n            yield s;\n            this.pos += s.length;\n            return s.length;\n        }\n        else if (allowEmpty)\n            yield '';\n        return 0;\n    }\n    *pushIndicators() {\n        let n = 0;\n        loop: while (true) {\n            switch (this.charAt(0)) {\n                case '!':\n                    n += yield* this.pushTag();\n                    n += yield* this.pushSpaces(true);\n                    continue loop;\n                case '&':\n                    n += yield* this.pushUntil(isNotAnchorChar);\n                    n += yield* this.pushSpaces(true);\n                    continue loop;\n                case '-': // this is an error\n                case '?': // this is an error outside flow collections\n                case ':': {\n                    const inFlow = this.flowLevel > 0;\n                    const ch1 = this.charAt(1);\n                    if (isEmpty(ch1) || (inFlow && flowIndicatorChars.has(ch1))) {\n                        if (!inFlow)\n                            this.indentNext = this.indentValue + 1;\n                        else if (this.flowKey)\n                            this.flowKey = false;\n                        n += yield* this.pushCount(1);\n                        n += yield* this.pushSpaces(true);\n                        continue loop;\n                    }\n                }\n            }\n            break loop;\n        }\n        return n;\n    }\n    *pushTag() {\n        if (this.charAt(1) === '<') {\n            let i = this.pos + 2;\n            let ch = this.buffer[i];\n            while (!isEmpty(ch) && ch !== '>')\n                ch = this.buffer[++i];\n            return yield* this.pushToIndex(ch === '>' ? i + 1 : i, false);\n        }\n        else {\n            let i = this.pos + 1;\n            let ch = this.buffer[i];\n            while (ch) {\n                if (tagChars.has(ch))\n                    ch = this.buffer[++i];\n                else if (ch === '%' &&\n                    hexDigits.has(this.buffer[i + 1]) &&\n                    hexDigits.has(this.buffer[i + 2])) {\n                    ch = this.buffer[(i += 3)];\n                }\n                else\n                    break;\n            }\n            return yield* this.pushToIndex(i, false);\n        }\n    }\n    *pushNewline() {\n        const ch = this.buffer[this.pos];\n        if (ch === '\\n')\n            return yield* this.pushCount(1);\n        else if (ch === '\\r' && this.charAt(1) === '\\n')\n            return yield* this.pushCount(2);\n        else\n            return 0;\n    }\n    *pushSpaces(allowTabs) {\n        let i = this.pos - 1;\n        let ch;\n        do {\n            ch = this.buffer[++i];\n        } while (ch === ' ' || (allowTabs && ch === '\\t'));\n        const n = i - this.pos;\n        if (n > 0) {\n            yield this.buffer.substr(this.pos, n);\n            this.pos = i;\n        }\n        return n;\n    }\n    *pushUntil(test) {\n        let i = this.pos;\n        let ch = this.buffer[i];\n        while (!test(ch))\n            ch = this.buffer[++i];\n        return yield* this.pushToIndex(i, false);\n    }\n}\n\nexports.Lexer = Lexer;\n","'use strict';\n\n/**\n * Tracks newlines during parsing in order to provide an efficient API for\n * determining the one-indexed `{ line, col }` position for any offset\n * within the input.\n */\nclass LineCounter {\n    constructor() {\n        this.lineStarts = [];\n        /**\n         * Should be called in ascending order. Otherwise, call\n         * `lineCounter.lineStarts.sort()` before calling `linePos()`.\n         */\n        this.addNewLine = (offset) => this.lineStarts.push(offset);\n        /**\n         * Performs a binary search and returns the 1-indexed { line, col }\n         * position of `offset`. If `line === 0`, `addNewLine` has never been\n         * called or `offset` is before the first known newline.\n         */\n        this.linePos = (offset) => {\n            let low = 0;\n            let high = this.lineStarts.length;\n            while (low < high) {\n                const mid = (low + high) >> 1; // Math.floor((low + high) / 2)\n                if (this.lineStarts[mid] < offset)\n                    low = mid + 1;\n                else\n                    high = mid;\n            }\n            if (this.lineStarts[low] === offset)\n                return { line: low + 1, col: 1 };\n            if (low === 0)\n                return { line: 0, col: offset };\n            const start = this.lineStarts[low - 1];\n            return { line: low, col: offset - start + 1 };\n        };\n    }\n}\n\nexports.LineCounter = LineCounter;\n","'use strict';\n\nvar node_process = require('process');\nvar cst = require('./cst.js');\nvar lexer = require('./lexer.js');\n\nfunction includesToken(list, type) {\n    for (let i = 0; i < list.length; ++i)\n        if (list[i].type === type)\n            return true;\n    return false;\n}\nfunction findNonEmptyIndex(list) {\n    for (let i = 0; i < list.length; ++i) {\n        switch (list[i].type) {\n            case 'space':\n            case 'comment':\n            case 'newline':\n                break;\n            default:\n                return i;\n        }\n    }\n    return -1;\n}\nfunction isFlowToken(token) {\n    switch (token?.type) {\n        case 'alias':\n        case 'scalar':\n        case 'single-quoted-scalar':\n        case 'double-quoted-scalar':\n        case 'flow-collection':\n            return true;\n        default:\n            return false;\n    }\n}\nfunction getPrevProps(parent) {\n    switch (parent.type) {\n        case 'document':\n            return parent.start;\n        case 'block-map': {\n            const it = parent.items[parent.items.length - 1];\n            return it.sep ?? it.start;\n        }\n        case 'block-seq':\n            return parent.items[parent.items.length - 1].start;\n        /* istanbul ignore next should not happen */\n        default:\n            return [];\n    }\n}\n/** Note: May modify input array */\nfunction getFirstKeyStartProps(prev) {\n    if (prev.length === 0)\n        return [];\n    let i = prev.length;\n    loop: while (--i >= 0) {\n        switch (prev[i].type) {\n            case 'doc-start':\n            case 'explicit-key-ind':\n            case 'map-value-ind':\n            case 'seq-item-ind':\n            case 'newline':\n                break loop;\n        }\n    }\n    while (prev[++i]?.type === 'space') {\n        /* loop */\n    }\n    return prev.splice(i, prev.length);\n}\nfunction arrayPushArray(target, source) {\n    // May exhaust call stack with large `source` array\n    if (source.length < 1e5)\n        Array.prototype.push.apply(target, source);\n    else\n        for (let i = 0; i < source.length; ++i)\n            target.push(source[i]);\n}\nfunction fixFlowSeqItems(fc) {\n    if (fc.start.type === 'flow-seq-start') {\n        for (const it of fc.items) {\n            if (it.sep &&\n                !it.value &&\n                !includesToken(it.start, 'explicit-key-ind') &&\n                !includesToken(it.sep, 'map-value-ind')) {\n                if (it.key)\n                    it.value = it.key;\n                delete it.key;\n                if (isFlowToken(it.value)) {\n                    if (it.value.end)\n                        arrayPushArray(it.value.end, it.sep);\n                    else\n                        it.value.end = it.sep;\n                }\n                else\n                    arrayPushArray(it.start, it.sep);\n                delete it.sep;\n            }\n        }\n    }\n}\n/**\n * A YAML concrete syntax tree (CST) parser\n *\n * ```ts\n * const src: string = ...\n * for (const token of new Parser().parse(src)) {\n *   // token: Token\n * }\n * ```\n *\n * To use the parser with a user-provided lexer:\n *\n * ```ts\n * function* parse(source: string, lexer: Lexer) {\n *   const parser = new Parser()\n *   for (const lexeme of lexer.lex(source))\n *     yield* parser.next(lexeme)\n *   yield* parser.end()\n * }\n *\n * const src: string = ...\n * const lexer = new Lexer()\n * for (const token of parse(src, lexer)) {\n *   // token: Token\n * }\n * ```\n */\nclass Parser {\n    /**\n     * @param onNewLine - If defined, called separately with the start position of\n     *   each new line (in `parse()`, including the start of input).\n     */\n    constructor(onNewLine) {\n        /** If true, space and sequence indicators count as indentation */\n        this.atNewLine = true;\n        /** If true, next token is a scalar value */\n        this.atScalar = false;\n        /** Current indentation level */\n        this.indent = 0;\n        /** Current offset since the start of parsing */\n        this.offset = 0;\n        /** On the same line with a block map key */\n        this.onKeyLine = false;\n        /** Top indicates the node that's currently being built */\n        this.stack = [];\n        /** The source of the current token, set in parse() */\n        this.source = '';\n        /** The type of the current token, set in parse() */\n        this.type = '';\n        // Must be defined after `next()`\n        this.lexer = new lexer.Lexer();\n        this.onNewLine = onNewLine;\n    }\n    /**\n     * Parse `source` as a YAML stream.\n     * If `incomplete`, a part of the last line may be left as a buffer for the next call.\n     *\n     * Errors are not thrown, but yielded as `{ type: 'error', message }` tokens.\n     *\n     * @returns A generator of tokens representing each directive, document, and other structure.\n     */\n    *parse(source, incomplete = false) {\n        if (this.onNewLine && this.offset === 0)\n            this.onNewLine(0);\n        for (const lexeme of this.lexer.lex(source, incomplete))\n            yield* this.next(lexeme);\n        if (!incomplete)\n            yield* this.end();\n    }\n    /**\n     * Advance the parser by the `source` of one lexical token.\n     */\n    *next(source) {\n        this.source = source;\n        if (node_process.env.LOG_TOKENS)\n            console.log('|', cst.prettyToken(source));\n        if (this.atScalar) {\n            this.atScalar = false;\n            yield* this.step();\n            this.offset += source.length;\n            return;\n        }\n        const type = cst.tokenType(source);\n        if (!type) {\n            const message = `Not a YAML token: ${source}`;\n            yield* this.pop({ type: 'error', offset: this.offset, message, source });\n            this.offset += source.length;\n        }\n        else if (type === 'scalar') {\n            this.atNewLine = false;\n            this.atScalar = true;\n            this.type = 'scalar';\n        }\n        else {\n            this.type = type;\n            yield* this.step();\n            switch (type) {\n                case 'newline':\n                    this.atNewLine = true;\n                    this.indent = 0;\n                    if (this.onNewLine)\n                        this.onNewLine(this.offset + source.length);\n                    break;\n                case 'space':\n                    if (this.atNewLine && source[0] === ' ')\n                        this.indent += source.length;\n                    break;\n                case 'explicit-key-ind':\n                case 'map-value-ind':\n                case 'seq-item-ind':\n                    if (this.atNewLine)\n                        this.indent += source.length;\n                    break;\n                case 'doc-mode':\n                case 'flow-error-end':\n                    return;\n                default:\n                    this.atNewLine = false;\n            }\n            this.offset += source.length;\n        }\n    }\n    /** Call at end of input to push out any remaining constructions */\n    *end() {\n        while (this.stack.length > 0)\n            yield* this.pop();\n    }\n    get sourceToken() {\n        const st = {\n            type: this.type,\n            offset: this.offset,\n            indent: this.indent,\n            source: this.source\n        };\n        return st;\n    }\n    *step() {\n        const top = this.peek(1);\n        if (this.type === 'doc-end' && top?.type !== 'doc-end') {\n            while (this.stack.length > 0)\n                yield* this.pop();\n            this.stack.push({\n                type: 'doc-end',\n                offset: this.offset,\n                source: this.source\n            });\n            return;\n        }\n        if (!top)\n            return yield* this.stream();\n        switch (top.type) {\n            case 'document':\n                return yield* this.document(top);\n            case 'alias':\n            case 'scalar':\n            case 'single-quoted-scalar':\n            case 'double-quoted-scalar':\n                return yield* this.scalar(top);\n            case 'block-scalar':\n                return yield* this.blockScalar(top);\n            case 'block-map':\n                return yield* this.blockMap(top);\n            case 'block-seq':\n                return yield* this.blockSequence(top);\n            case 'flow-collection':\n                return yield* this.flowCollection(top);\n            case 'doc-end':\n                return yield* this.documentEnd(top);\n        }\n        /* istanbul ignore next should not happen */\n        yield* this.pop();\n    }\n    peek(n) {\n        return this.stack[this.stack.length - n];\n    }\n    *pop(error) {\n        const token = error ?? this.stack.pop();\n        /* istanbul ignore if should not happen */\n        if (!token) {\n            const message = 'Tried to pop an empty stack';\n            yield { type: 'error', offset: this.offset, source: '', message };\n        }\n        else if (this.stack.length === 0) {\n            yield token;\n        }\n        else {\n            const top = this.peek(1);\n            if (token.type === 'block-scalar') {\n                // Block scalars use their parent rather than header indent\n                token.indent = 'indent' in top ? top.indent : 0;\n            }\n            else if (token.type === 'flow-collection' && top.type === 'document') {\n                // Ignore all indent for top-level flow collections\n                token.indent = 0;\n            }\n            if (token.type === 'flow-collection')\n                fixFlowSeqItems(token);\n            switch (top.type) {\n                case 'document':\n                    top.value = token;\n                    break;\n                case 'block-scalar':\n                    top.props.push(token); // error\n                    break;\n                case 'block-map': {\n                    const it = top.items[top.items.length - 1];\n                    if (it.value) {\n                        top.items.push({ start: [], key: token, sep: [] });\n                        this.onKeyLine = true;\n                        return;\n                    }\n                    else if (it.sep) {\n                        it.value = token;\n                    }\n                    else {\n                        Object.assign(it, { key: token, sep: [] });\n                        this.onKeyLine = !it.explicitKey;\n                        return;\n                    }\n                    break;\n                }\n                case 'block-seq': {\n                    const it = top.items[top.items.length - 1];\n                    if (it.value)\n                        top.items.push({ start: [], value: token });\n                    else\n                        it.value = token;\n                    break;\n                }\n                case 'flow-collection': {\n                    const it = top.items[top.items.length - 1];\n                    if (!it || it.value)\n                        top.items.push({ start: [], key: token, sep: [] });\n                    else if (it.sep)\n                        it.value = token;\n                    else\n                        Object.assign(it, { key: token, sep: [] });\n                    return;\n                }\n                /* istanbul ignore next should not happen */\n                default:\n                    yield* this.pop();\n                    yield* this.pop(token);\n            }\n            if ((top.type === 'document' ||\n                top.type === 'block-map' ||\n                top.type === 'block-seq') &&\n                (token.type === 'block-map' || token.type === 'block-seq')) {\n                const last = token.items[token.items.length - 1];\n                if (last &&\n                    !last.sep &&\n                    !last.value &&\n                    last.start.length > 0 &&\n                    findNonEmptyIndex(last.start) === -1 &&\n                    (token.indent === 0 ||\n                        last.start.every(st => st.type !== 'comment' || st.indent < token.indent))) {\n                    if (top.type === 'document')\n                        top.end = last.start;\n                    else\n                        top.items.push({ start: last.start });\n                    token.items.splice(-1, 1);\n                }\n            }\n        }\n    }\n    *stream() {\n        switch (this.type) {\n            case 'directive-line':\n                yield { type: 'directive', offset: this.offset, source: this.source };\n                return;\n            case 'byte-order-mark':\n            case 'space':\n            case 'comment':\n            case 'newline':\n                yield this.sourceToken;\n                return;\n            case 'doc-mode':\n            case 'doc-start': {\n                const doc = {\n                    type: 'document',\n                    offset: this.offset,\n                    start: []\n                };\n                if (this.type === 'doc-start')\n                    doc.start.push(this.sourceToken);\n                this.stack.push(doc);\n                return;\n            }\n        }\n        yield {\n            type: 'error',\n            offset: this.offset,\n            message: `Unexpected ${this.type} token in YAML stream`,\n            source: this.source\n        };\n    }\n    *document(doc) {\n        if (doc.value)\n            return yield* this.lineEnd(doc);\n        switch (this.type) {\n            case 'doc-start': {\n                if (findNonEmptyIndex(doc.start) !== -1) {\n                    yield* this.pop();\n                    yield* this.step();\n                }\n                else\n                    doc.start.push(this.sourceToken);\n                return;\n            }\n            case 'anchor':\n            case 'tag':\n            case 'space':\n            case 'comment':\n            case 'newline':\n                doc.start.push(this.sourceToken);\n                return;\n        }\n        const bv = this.startBlockValue(doc);\n        if (bv)\n            this.stack.push(bv);\n        else {\n            yield {\n                type: 'error',\n                offset: this.offset,\n                message: `Unexpected ${this.type} token in YAML document`,\n                source: this.source\n            };\n        }\n    }\n    *scalar(scalar) {\n        if (this.type === 'map-value-ind') {\n            const prev = getPrevProps(this.peek(2));\n            const start = getFirstKeyStartProps(prev);\n            let sep;\n            if (scalar.end) {\n                sep = scalar.end;\n                sep.push(this.sourceToken);\n                delete scalar.end;\n            }\n            else\n                sep = [this.sourceToken];\n            const map = {\n                type: 'block-map',\n                offset: scalar.offset,\n                indent: scalar.indent,\n                items: [{ start, key: scalar, sep }]\n            };\n            this.onKeyLine = true;\n            this.stack[this.stack.length - 1] = map;\n        }\n        else\n            yield* this.lineEnd(scalar);\n    }\n    *blockScalar(scalar) {\n        switch (this.type) {\n            case 'space':\n            case 'comment':\n            case 'newline':\n                scalar.props.push(this.sourceToken);\n                return;\n            case 'scalar':\n                scalar.source = this.source;\n                // block-scalar source includes trailing newline\n                this.atNewLine = true;\n                this.indent = 0;\n                if (this.onNewLine) {\n                    let nl = this.source.indexOf('\\n') + 1;\n                    while (nl !== 0) {\n                        this.onNewLine(this.offset + nl);\n                        nl = this.source.indexOf('\\n', nl) + 1;\n                    }\n                }\n                yield* this.pop();\n                break;\n            /* istanbul ignore next should not happen */\n            default:\n                yield* this.pop();\n                yield* this.step();\n        }\n    }\n    *blockMap(map) {\n        const it = map.items[map.items.length - 1];\n        // it.sep is true-ish if pair already has key or : separator\n        switch (this.type) {\n            case 'newline':\n                this.onKeyLine = false;\n                if (it.value) {\n                    const end = 'end' in it.value ? it.value.end : undefined;\n                    const last = Array.isArray(end) ? end[end.length - 1] : undefined;\n                    if (last?.type === 'comment')\n                        end?.push(this.sourceToken);\n                    else\n                        map.items.push({ start: [this.sourceToken] });\n                }\n                else if (it.sep) {\n                    it.sep.push(this.sourceToken);\n                }\n                else {\n                    it.start.push(this.sourceToken);\n                }\n                return;\n            case 'space':\n            case 'comment':\n                if (it.value) {\n                    map.items.push({ start: [this.sourceToken] });\n                }\n                else if (it.sep) {\n                    it.sep.push(this.sourceToken);\n                }\n                else {\n                    if (this.atIndentedComment(it.start, map.indent)) {\n                        const prev = map.items[map.items.length - 2];\n                        const end = prev?.value?.end;\n                        if (Array.isArray(end)) {\n                            arrayPushArray(end, it.start);\n                            end.push(this.sourceToken);\n                            map.items.pop();\n                            return;\n                        }\n                    }\n                    it.start.push(this.sourceToken);\n                }\n                return;\n        }\n        if (this.indent >= map.indent) {\n            const atMapIndent = !this.onKeyLine && this.indent === map.indent;\n            const atNextItem = atMapIndent &&\n                (it.sep || it.explicitKey) &&\n                this.type !== 'seq-item-ind';\n            // For empty nodes, assign newline-separated not indented empty tokens to following node\n            let start = [];\n            if (atNextItem && it.sep && !it.value) {\n                const nl = [];\n                for (let i = 0; i < it.sep.length; ++i) {\n                    const st = it.sep[i];\n                    switch (st.type) {\n                        case 'newline':\n                            nl.push(i);\n                            break;\n                        case 'space':\n                            break;\n                        case 'comment':\n                            if (st.indent > map.indent)\n                                nl.length = 0;\n                            break;\n                        default:\n                            nl.length = 0;\n                    }\n                }\n                if (nl.length >= 2)\n                    start = it.sep.splice(nl[1]);\n            }\n            switch (this.type) {\n                case 'anchor':\n                case 'tag':\n                    if (atNextItem || it.value) {\n                        start.push(this.sourceToken);\n                        map.items.push({ start });\n                        this.onKeyLine = true;\n                    }\n                    else if (it.sep) {\n                        it.sep.push(this.sourceToken);\n                    }\n                    else {\n                        it.start.push(this.sourceToken);\n                    }\n                    return;\n                case 'explicit-key-ind':\n                    if (!it.sep && !it.explicitKey) {\n                        it.start.push(this.sourceToken);\n                        it.explicitKey = true;\n                    }\n                    else if (atNextItem || it.value) {\n                        start.push(this.sourceToken);\n                        map.items.push({ start, explicitKey: true });\n                    }\n                    else {\n                        this.stack.push({\n                            type: 'block-map',\n                            offset: this.offset,\n                            indent: this.indent,\n                            items: [{ start: [this.sourceToken], explicitKey: true }]\n                        });\n                    }\n                    this.onKeyLine = true;\n                    return;\n                case 'map-value-ind':\n                    if (it.explicitKey) {\n                        if (!it.sep) {\n                            if (includesToken(it.start, 'newline')) {\n                                Object.assign(it, { key: null, sep: [this.sourceToken] });\n                            }\n                            else {\n                                const start = getFirstKeyStartProps(it.start);\n                                this.stack.push({\n                                    type: 'block-map',\n                                    offset: this.offset,\n                                    indent: this.indent,\n                                    items: [{ start, key: null, sep: [this.sourceToken] }]\n                                });\n                            }\n                        }\n                        else if (it.value) {\n                            map.items.push({ start: [], key: null, sep: [this.sourceToken] });\n                        }\n                        else if (includesToken(it.sep, 'map-value-ind')) {\n                            this.stack.push({\n                                type: 'block-map',\n                                offset: this.offset,\n                                indent: this.indent,\n                                items: [{ start, key: null, sep: [this.sourceToken] }]\n                            });\n                        }\n                        else if (isFlowToken(it.key) &&\n                            !includesToken(it.sep, 'newline')) {\n                            const start = getFirstKeyStartProps(it.start);\n                            const key = it.key;\n                            const sep = it.sep;\n                            sep.push(this.sourceToken);\n                            // @ts-expect-error type guard is wrong here\n                            delete it.key;\n                            // @ts-expect-error type guard is wrong here\n                            delete it.sep;\n                            this.stack.push({\n                                type: 'block-map',\n                                offset: this.offset,\n                                indent: this.indent,\n                                items: [{ start, key, sep }]\n                            });\n                        }\n                        else if (start.length > 0) {\n                            // Not actually at next item\n                            it.sep = it.sep.concat(start, this.sourceToken);\n                        }\n                        else {\n                            it.sep.push(this.sourceToken);\n                        }\n                    }\n                    else {\n                        if (!it.sep) {\n                            Object.assign(it, { key: null, sep: [this.sourceToken] });\n                        }\n                        else if (it.value || atNextItem) {\n                            map.items.push({ start, key: null, sep: [this.sourceToken] });\n                        }\n                        else if (includesToken(it.sep, 'map-value-ind')) {\n                            this.stack.push({\n                                type: 'block-map',\n                                offset: this.offset,\n                                indent: this.indent,\n                                items: [{ start: [], key: null, sep: [this.sourceToken] }]\n                            });\n                        }\n                        else {\n                            it.sep.push(this.sourceToken);\n                        }\n                    }\n                    this.onKeyLine = true;\n                    return;\n                case 'alias':\n                case 'scalar':\n                case 'single-quoted-scalar':\n                case 'double-quoted-scalar': {\n                    const fs = this.flowScalar(this.type);\n                    if (atNextItem || it.value) {\n                        map.items.push({ start, key: fs, sep: [] });\n                        this.onKeyLine = true;\n                    }\n                    else if (it.sep) {\n                        this.stack.push(fs);\n                    }\n                    else {\n                        Object.assign(it, { key: fs, sep: [] });\n                        this.onKeyLine = true;\n                    }\n                    return;\n                }\n                default: {\n                    const bv = this.startBlockValue(map);\n                    if (bv) {\n                        if (bv.type === 'block-seq') {\n                            if (!it.explicitKey &&\n                                it.sep &&\n                                !includesToken(it.sep, 'newline')) {\n                                yield* this.pop({\n                                    type: 'error',\n                                    offset: this.offset,\n                                    message: 'Unexpected block-seq-ind on same line with key',\n                                    source: this.source\n                                });\n                                return;\n                            }\n                        }\n                        else if (atMapIndent) {\n                            map.items.push({ start });\n                        }\n                        this.stack.push(bv);\n                        return;\n                    }\n                }\n            }\n        }\n        yield* this.pop();\n        yield* this.step();\n    }\n    *blockSequence(seq) {\n        const it = seq.items[seq.items.length - 1];\n        switch (this.type) {\n            case 'newline':\n                if (it.value) {\n                    const end = 'end' in it.value ? it.value.end : undefined;\n                    const last = Array.isArray(end) ? end[end.length - 1] : undefined;\n                    if (last?.type === 'comment')\n                        end?.push(this.sourceToken);\n                    else\n                        seq.items.push({ start: [this.sourceToken] });\n                }\n                else\n                    it.start.push(this.sourceToken);\n                return;\n            case 'space':\n            case 'comment':\n                if (it.value)\n                    seq.items.push({ start: [this.sourceToken] });\n                else {\n                    if (this.atIndentedComment(it.start, seq.indent)) {\n                        const prev = seq.items[seq.items.length - 2];\n                        const end = prev?.value?.end;\n                        if (Array.isArray(end)) {\n                            arrayPushArray(end, it.start);\n                            end.push(this.sourceToken);\n                            seq.items.pop();\n                            return;\n                        }\n                    }\n                    it.start.push(this.sourceToken);\n                }\n                return;\n            case 'anchor':\n            case 'tag':\n                if (it.value || this.indent <= seq.indent)\n                    break;\n                it.start.push(this.sourceToken);\n                return;\n            case 'seq-item-ind':\n                if (this.indent !== seq.indent)\n                    break;\n                if (it.value || includesToken(it.start, 'seq-item-ind'))\n                    seq.items.push({ start: [this.sourceToken] });\n                else\n                    it.start.push(this.sourceToken);\n                return;\n        }\n        if (this.indent > seq.indent) {\n            const bv = this.startBlockValue(seq);\n            if (bv) {\n                this.stack.push(bv);\n                return;\n            }\n        }\n        yield* this.pop();\n        yield* this.step();\n    }\n    *flowCollection(fc) {\n        const it = fc.items[fc.items.length - 1];\n        if (this.type === 'flow-error-end') {\n            let top;\n            do {\n                yield* this.pop();\n                top = this.peek(1);\n            } while (top?.type === 'flow-collection');\n        }\n        else if (fc.end.length === 0) {\n            switch (this.type) {\n                case 'comma':\n                case 'explicit-key-ind':\n                    if (!it || it.sep)\n                        fc.items.push({ start: [this.sourceToken] });\n                    else\n                        it.start.push(this.sourceToken);\n                    return;\n                case 'map-value-ind':\n                    if (!it || it.value)\n                        fc.items.push({ start: [], key: null, sep: [this.sourceToken] });\n                    else if (it.sep)\n                        it.sep.push(this.sourceToken);\n                    else\n                        Object.assign(it, { key: null, sep: [this.sourceToken] });\n                    return;\n                case 'space':\n                case 'comment':\n                case 'newline':\n                case 'anchor':\n                case 'tag':\n                    if (!it || it.value)\n                        fc.items.push({ start: [this.sourceToken] });\n                    else if (it.sep)\n                        it.sep.push(this.sourceToken);\n                    else\n                        it.start.push(this.sourceToken);\n                    return;\n                case 'alias':\n                case 'scalar':\n                case 'single-quoted-scalar':\n                case 'double-quoted-scalar': {\n                    const fs = this.flowScalar(this.type);\n                    if (!it || it.value)\n                        fc.items.push({ start: [], key: fs, sep: [] });\n                    else if (it.sep)\n                        this.stack.push(fs);\n                    else\n                        Object.assign(it, { key: fs, sep: [] });\n                    return;\n                }\n                case 'flow-map-end':\n                case 'flow-seq-end':\n                    fc.end.push(this.sourceToken);\n                    return;\n            }\n            const bv = this.startBlockValue(fc);\n            /* istanbul ignore else should not happen */\n            if (bv)\n                this.stack.push(bv);\n            else {\n                yield* this.pop();\n                yield* this.step();\n            }\n        }\n        else {\n            const parent = this.peek(2);\n            if (parent.type === 'block-map' &&\n                ((this.type === 'map-value-ind' && parent.indent === fc.indent) ||\n                    (this.type === 'newline' &&\n                        !parent.items[parent.items.length - 1].sep))) {\n                yield* this.pop();\n                yield* this.step();\n            }\n            else if (this.type === 'map-value-ind' &&\n                parent.type !== 'flow-collection') {\n                const prev = getPrevProps(parent);\n                const start = getFirstKeyStartProps(prev);\n                fixFlowSeqItems(fc);\n                const sep = fc.end.splice(1, fc.end.length);\n                sep.push(this.sourceToken);\n                const map = {\n                    type: 'block-map',\n                    offset: fc.offset,\n                    indent: fc.indent,\n                    items: [{ start, key: fc, sep }]\n                };\n                this.onKeyLine = true;\n                this.stack[this.stack.length - 1] = map;\n            }\n            else {\n                yield* this.lineEnd(fc);\n            }\n        }\n    }\n    flowScalar(type) {\n        if (this.onNewLine) {\n            let nl = this.source.indexOf('\\n') + 1;\n            while (nl !== 0) {\n                this.onNewLine(this.offset + nl);\n                nl = this.source.indexOf('\\n', nl) + 1;\n            }\n        }\n        return {\n            type,\n            offset: this.offset,\n            indent: this.indent,\n            source: this.source\n        };\n    }\n    startBlockValue(parent) {\n        switch (this.type) {\n            case 'alias':\n            case 'scalar':\n            case 'single-quoted-scalar':\n            case 'double-quoted-scalar':\n                return this.flowScalar(this.type);\n            case 'block-scalar-header':\n                return {\n                    type: 'block-scalar',\n                    offset: this.offset,\n                    indent: this.indent,\n                    props: [this.sourceToken],\n                    source: ''\n                };\n            case 'flow-map-start':\n            case 'flow-seq-start':\n                return {\n                    type: 'flow-collection',\n                    offset: this.offset,\n                    indent: this.indent,\n                    start: this.sourceToken,\n                    items: [],\n                    end: []\n                };\n            case 'seq-item-ind':\n                return {\n                    type: 'block-seq',\n                    offset: this.offset,\n                    indent: this.indent,\n                    items: [{ start: [this.sourceToken] }]\n                };\n            case 'explicit-key-ind': {\n                this.onKeyLine = true;\n                const prev = getPrevProps(parent);\n                const start = getFirstKeyStartProps(prev);\n                start.push(this.sourceToken);\n                return {\n                    type: 'block-map',\n                    offset: this.offset,\n                    indent: this.indent,\n                    items: [{ start, explicitKey: true }]\n                };\n            }\n            case 'map-value-ind': {\n                this.onKeyLine = true;\n                const prev = getPrevProps(parent);\n                const start = getFirstKeyStartProps(prev);\n                return {\n                    type: 'block-map',\n                    offset: this.offset,\n                    indent: this.indent,\n                    items: [{ start, key: null, sep: [this.sourceToken] }]\n                };\n            }\n        }\n        return null;\n    }\n    atIndentedComment(start, indent) {\n        if (this.type !== 'comment')\n            return false;\n        if (this.indent <= indent)\n            return false;\n        return start.every(st => st.type === 'newline' || st.type === 'space');\n    }\n    *documentEnd(docEnd) {\n        if (this.type !== 'doc-mode') {\n            if (docEnd.end)\n                docEnd.end.push(this.sourceToken);\n            else\n                docEnd.end = [this.sourceToken];\n            if (this.type === 'newline')\n                yield* this.pop();\n        }\n    }\n    *lineEnd(token) {\n        switch (this.type) {\n            case 'comma':\n            case 'doc-start':\n            case 'doc-end':\n            case 'flow-seq-end':\n            case 'flow-map-end':\n            case 'map-value-ind':\n                yield* this.pop();\n                yield* this.step();\n                break;\n            case 'newline':\n                this.onKeyLine = false;\n            // fallthrough\n            case 'space':\n            case 'comment':\n            default:\n                // all other values are errors\n                if (token.end)\n                    token.end.push(this.sourceToken);\n                else\n                    token.end = [this.sourceToken];\n                if (this.type === 'newline')\n                    yield* this.pop();\n        }\n    }\n}\n\nexports.Parser = Parser;\n","'use strict';\n\nvar composer = require('./compose/composer.js');\nvar Document = require('./doc/Document.js');\nvar errors = require('./errors.js');\nvar log = require('./log.js');\nvar identity = require('./nodes/identity.js');\nvar lineCounter = require('./parse/line-counter.js');\nvar parser = require('./parse/parser.js');\n\nfunction parseOptions(options) {\n    const prettyErrors = options.prettyErrors !== false;\n    const lineCounter$1 = options.lineCounter || (prettyErrors && new lineCounter.LineCounter()) || null;\n    return { lineCounter: lineCounter$1, prettyErrors };\n}\n/**\n * Parse the input as a stream of YAML documents.\n *\n * Documents should be separated from each other by `...` or `---` marker lines.\n *\n * @returns If an empty `docs` array is returned, it will be of type\n *   EmptyStream and contain additional stream information. In\n *   TypeScript, you should use `'empty' in docs` as a type guard for it.\n */\nfunction parseAllDocuments(source, options = {}) {\n    const { lineCounter, prettyErrors } = parseOptions(options);\n    const parser$1 = new parser.Parser(lineCounter?.addNewLine);\n    const composer$1 = new composer.Composer(options);\n    const docs = Array.from(composer$1.compose(parser$1.parse(source)));\n    if (prettyErrors && lineCounter)\n        for (const doc of docs) {\n            doc.errors.forEach(errors.prettifyError(source, lineCounter));\n            doc.warnings.forEach(errors.prettifyError(source, lineCounter));\n        }\n    if (docs.length > 0)\n        return docs;\n    return Object.assign([], { empty: true }, composer$1.streamInfo());\n}\n/** Parse an input string into a single YAML.Document */\nfunction parseDocument(source, options = {}) {\n    const { lineCounter, prettyErrors } = parseOptions(options);\n    const parser$1 = new parser.Parser(lineCounter?.addNewLine);\n    const composer$1 = new composer.Composer(options);\n    // `doc` is always set by compose.end(true) at the very latest\n    let doc = null;\n    for (const _doc of composer$1.compose(parser$1.parse(source), true, source.length)) {\n        if (!doc)\n            doc = _doc;\n        else if (doc.options.logLevel !== 'silent') {\n            doc.errors.push(new errors.YAMLParseError(_doc.range.slice(0, 2), 'MULTIPLE_DOCS', 'Source contains multiple documents; please use YAML.parseAllDocuments()'));\n            break;\n        }\n    }\n    if (prettyErrors && lineCounter) {\n        doc.errors.forEach(errors.prettifyError(source, lineCounter));\n        doc.warnings.forEach(errors.prettifyError(source, lineCounter));\n    }\n    return doc;\n}\nfunction parse(src, reviver, options) {\n    let _reviver = undefined;\n    if (typeof reviver === 'function') {\n        _reviver = reviver;\n    }\n    else if (options === undefined && reviver && typeof reviver === 'object') {\n        options = reviver;\n    }\n    const doc = parseDocument(src, options);\n    if (!doc)\n        return null;\n    doc.warnings.forEach(warning => log.warn(doc.options.logLevel, warning));\n    if (doc.errors.length > 0) {\n        if (doc.options.logLevel !== 'silent')\n            throw doc.errors[0];\n        else\n            doc.errors = [];\n    }\n    return doc.toJS(Object.assign({ reviver: _reviver }, options));\n}\nfunction stringify(value, replacer, options) {\n    let _replacer = null;\n    if (typeof replacer === 'function' || Array.isArray(replacer)) {\n        _replacer = replacer;\n    }\n    else if (options === undefined && replacer) {\n        options = replacer;\n    }\n    if (typeof options === 'string')\n        options = options.length;\n    if (typeof options === 'number') {\n        const indent = Math.round(options);\n        options = indent < 1 ? undefined : indent > 8 ? { indent: 8 } : { indent };\n    }\n    if (value === undefined) {\n        const { keepUndefined } = options ?? replacer ?? {};\n        if (!keepUndefined)\n            return undefined;\n    }\n    if (identity.isDocument(value) && !_replacer)\n        return value.toString(options);\n    return new Document.Document(value, _replacer, options).toString(options);\n}\n\nexports.parse = parse;\nexports.parseAllDocuments = parseAllDocuments;\nexports.parseDocument = parseDocument;\nexports.stringify = stringify;\n","'use strict';\n\nvar composer = require('./compose/composer.js');\nvar Document = require('./doc/Document.js');\nvar Schema = require('./schema/Schema.js');\nvar errors = require('./errors.js');\nvar Alias = require('./nodes/Alias.js');\nvar identity = require('./nodes/identity.js');\nvar Pair = require('./nodes/Pair.js');\nvar Scalar = require('./nodes/Scalar.js');\nvar YAMLMap = require('./nodes/YAMLMap.js');\nvar YAMLSeq = require('./nodes/YAMLSeq.js');\nvar cst = require('./parse/cst.js');\nvar lexer = require('./parse/lexer.js');\nvar lineCounter = require('./parse/line-counter.js');\nvar parser = require('./parse/parser.js');\nvar publicApi = require('./public-api.js');\nvar visit = require('./visit.js');\n\n\n\nexports.Composer = composer.Composer;\nexports.Document = Document.Document;\nexports.Schema = Schema.Schema;\nexports.YAMLError = errors.YAMLError;\nexports.YAMLParseError = errors.YAMLParseError;\nexports.YAMLWarning = errors.YAMLWarning;\nexports.Alias = Alias.Alias;\nexports.isAlias = identity.isAlias;\nexports.isCollection = identity.isCollection;\nexports.isDocument = identity.isDocument;\nexports.isMap = identity.isMap;\nexports.isNode = identity.isNode;\nexports.isPair = identity.isPair;\nexports.isScalar = identity.isScalar;\nexports.isSeq = identity.isSeq;\nexports.Pair = Pair.Pair;\nexports.Scalar = Scalar.Scalar;\nexports.YAMLMap = YAMLMap.YAMLMap;\nexports.YAMLSeq = YAMLSeq.YAMLSeq;\nexports.CST = cst;\nexports.Lexer = lexer.Lexer;\nexports.LineCounter = lineCounter.LineCounter;\nexports.Parser = parser.Parser;\nexports.parse = publicApi.parse;\nexports.parseAllDocuments = publicApi.parseAllDocuments;\nexports.parseDocument = publicApi.parseDocument;\nexports.stringify = publicApi.stringify;\nexports.visit = visit.visit;\nexports.visitAsync = visit.visitAsync;\n","import { globalConfig } from \"./core.js\";\n// functions\nexport function assertEqual(val) {\n    return val;\n}\nexport function assertNotEqual(val) {\n    return val;\n}\nexport function toZod() {\n    return (schema) => schema;\n}\nexport function assertIs(_arg) { }\nexport function assertNever(_x) {\n    throw new Error(\"Unexpected value in exhaustive check\");\n}\nexport function assert(_) { }\nexport function getEnumValues(entries) {\n    const numericValues = Object.values(entries).filter((v) => typeof v === \"number\");\n    const values = Object.entries(entries)\n        .filter(([k, _]) => numericValues.indexOf(+k) === -1)\n        .map(([_, v]) => v);\n    return values;\n}\nexport function joinValues(array, separator = \"|\") {\n    return array.map((val) => stringifyPrimitive(val)).join(separator);\n}\nexport function jsonStringifyReplacer(_, value) {\n    if (typeof value === \"bigint\")\n        return value.toString();\n    return value;\n}\n// the accessor lives on a shared prototype: an own accessor makes every box a dictionary-mode object (~360 B and a slow load per read against ~100 B and an inlined getter here)\nclass Cached {\n    constructor(getter) {\n        this._getter = getter;\n        this._value = undefined;\n    }\n    get value() {\n        const getter = this._getter;\n        if (getter !== undefined) {\n            this._value = getter();\n            this._getter = undefined;\n        }\n        return this._value;\n    }\n}\nexport function cached(getter) {\n    return new Cached(getter);\n}\nexport function nullish(input) {\n    return input === null || input === undefined;\n}\nexport function cleanRegex(source) {\n    const start = source.startsWith(\"^\") ? 1 : 0;\n    const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n    return source.slice(start, end);\n}\nexport function floatSafeRemainder(val, step) {\n    const ratio = val / step;\n    const roundedRatio = Math.round(ratio);\n    // `val` and `step` each round to a double before the division rounds again, so a true decimal multiple's quotient can sit up to 1.5 of these scaled epsilons from the integer. A 1x tolerance therefore rejected 2.03 as a multiple of 0.07; 4x covers the worst case with margin.\n    const tolerance = 4 * Number.EPSILON * Math.max(Math.abs(ratio), 1);\n    if (Math.abs(ratio - roundedRatio) < tolerance)\n        return 0;\n    return ratio - roundedRatio;\n}\nconst EVALUATING = /* @__PURE__*/ Symbol(\"evaluating\");\nexport function defineLazy(object, key, getter) {\n    let value = undefined;\n    Object.defineProperty(object, key, {\n        get() {\n            if (value === EVALUATING) {\n                // Circular reference detected, return undefined to break the cycle\n                return undefined;\n            }\n            if (value === undefined) {\n                value = EVALUATING;\n                value = getter();\n            }\n            return value;\n        },\n        set(v) {\n            Object.defineProperty(object, key, {\n                value: v,\n                // configurable: true,\n            });\n            // object[key] = v;\n        },\n        configurable: true,\n    });\n}\nexport function objectClone(obj) {\n    return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));\n}\nexport function assignProp(target, prop, value) {\n    Object.defineProperty(target, prop, {\n        value,\n        writable: true,\n        enumerable: true,\n        configurable: true,\n    });\n}\n/**\n * Whichever object a def's `shape` currently answers from: the one the caller passed until the first read, the frozen copy after it.\n *\n * Its keys and descriptors read without invoking anything, which is what lets a discriminated union check its discriminator, and the cycle walk read a shape, without resolving a getter that references the schema being constructed. A def that answers `shape` from an accessor of its own has none.\n */\nexport function rawShape(def) {\n    const desc = Object.getOwnPropertyDescriptor(def, \"shape\");\n    return desc?.get ? desc.get.raw : desc?.value;\n}\n// where a builder reads its source's keys and descriptors, resolving only a shape a def answers for itself. A shape resolves by object spread, so only its enumerable keys are ever part of it.\nfunction sourceShape(schema) {\n    return rawShape(schema._zod.def) ?? schema._zod.def.shape;\n}\n// a key whose value is not settled yet, self-caching so every read after the first gets the same one\nfunction deferProp(target, key, getter) {\n    Object.defineProperty(target, key, {\n        get() {\n            const value = getter();\n            assignProp(this, key, value);\n            return value;\n        },\n        enumerable: true,\n        configurable: true,\n    });\n}\n// Writes a settled key. A plain assignment is much cheaper than `defineProperty` and produces the same descriptor, but it runs whatever setter already answers to the key — an accessor this shape deferred, or an inherited one, which `__proto__` has on every object and prototype pollution can add for any name.\nfunction putProp(target, key, value) {\n    if (key in target)\n        assignProp(target, key, value);\n    else\n        target[key] = value;\n}\n/**\n * Copies `keys` of `source`'s shape onto `target`, each value passed through `wrap`.\n *\n * A key the source has resolved is copied through now, so the derived shape states it outright and nothing has to resolve it to learn what it holds. A key the source still defers stays deferred, and reads back through the source's own `shape`, so it resolves once and both shapes get that one schema.\n */\nfunction mirrorShape(target, source, keys, wrap) {\n    const raw = sourceShape(source);\n    for (const key of keys) {\n        const desc = Object.getOwnPropertyDescriptor(raw, key);\n        if (!desc.enumerable)\n            continue;\n        if (desc.get) {\n            deferProp(target, key, () => {\n                const value = source._zod.def.shape[key];\n                return wrap ? wrap(value, key) : value;\n            });\n        }\n        else\n            putProp(target, key, wrap ? wrap(desc.value, key) : desc.value);\n    }\n}\n// same, for a plain shape a caller passed rather than a schema's\nfunction mirrorProps(target, source) {\n    for (const key of Reflect.ownKeys(source)) {\n        const desc = Object.getOwnPropertyDescriptor(source, key);\n        if (!desc.enumerable)\n            continue;\n        if (desc.get)\n            deferProp(target, key, () => source[key]);\n        else\n            putProp(target, key, desc.value);\n    }\n}\nexport function mergeDefs(...defs) {\n    const mergedDescriptors = {};\n    for (const def of defs) {\n        const descriptors = Object.getOwnPropertyDescriptors(def);\n        Object.assign(mergedDescriptors, descriptors);\n    }\n    return Object.defineProperties({}, mergedDescriptors);\n}\nexport function cloneDef(schema) {\n    return mergeDefs(schema._zod.def);\n}\nexport function getElementAtPath(obj, path) {\n    if (!path)\n        return obj;\n    return path.reduce((acc, key) => acc?.[key], obj);\n}\nexport function promiseAllObject(promisesObj) {\n    const keys = Object.keys(promisesObj);\n    const promises = keys.map((key) => promisesObj[key]);\n    return Promise.all(promises).then((results) => {\n        const resolvedObj = {};\n        for (let i = 0; i < keys.length; i++) {\n            resolvedObj[keys[i]] = results[i];\n        }\n        return resolvedObj;\n    });\n}\nexport function randomString(length = 10) {\n    const chars = \"abcdefghijklmnopqrstuvwxyz\";\n    let str = \"\";\n    for (let i = 0; i < length; i++) {\n        str += chars[Math.floor(Math.random() * chars.length)];\n    }\n    return str;\n}\nexport function esc(str) {\n    return JSON.stringify(str);\n}\nexport function slugify(input) {\n    return input\n        .toLowerCase()\n        .trim()\n        .replace(/[^\\w\\s-]/g, \"\")\n        .replace(/[\\s_-]+/g, \"-\")\n        .replace(/^-+|-+$/g, \"\");\n}\nexport const captureStackTrace = (\"captureStackTrace\" in Error ? Error.captureStackTrace : (..._args) => { });\nexport function isObject(data) {\n    return typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nexport const allowsEval = /* @__PURE__*/ cached(() => {\n    // Skip the probe under `jitless`: strict CSPs report the caught `new Function` as a `securitypolicyviolation` even though the throw is swallowed.\n    if (globalConfig.jitless) {\n        return false;\n    }\n    // @ts-ignore\n    if (typeof navigator !== \"undefined\" && navigator?.userAgent?.includes(\"Cloudflare\")) {\n        return false;\n    }\n    try {\n        const F = Function;\n        new F(\"\");\n        return true;\n    }\n    catch (_) {\n        return false;\n    }\n});\nexport function isPlainObject(o) {\n    if (isObject(o) === false)\n        return false;\n    // modified constructor\n    const ctor = o.constructor;\n    if (ctor === undefined)\n        return true;\n    if (typeof ctor !== \"function\")\n        return true;\n    // modified prototype\n    const prot = ctor.prototype;\n    if (isObject(prot) === false)\n        return false;\n    // ctor doesn't have static `isPrototypeOf`\n    if (Object.prototype.hasOwnProperty.call(prot, \"isPrototypeOf\") === false) {\n        return false;\n    }\n    return true;\n}\nexport function shallowClone(o) {\n    if (isPlainObject(o))\n        return { ...o };\n    if (Array.isArray(o))\n        return [...o];\n    if (o instanceof Map)\n        return new Map(o);\n    if (o instanceof Set)\n        return new Set(o);\n    return o;\n}\nexport function numKeys(data) {\n    let keyCount = 0;\n    for (const key in data) {\n        if (Object.prototype.hasOwnProperty.call(data, key)) {\n            keyCount++;\n        }\n    }\n    return keyCount;\n}\nexport const getParsedType = (data) => {\n    const t = typeof data;\n    switch (t) {\n        case \"undefined\":\n            return \"undefined\";\n        case \"string\":\n            return \"string\";\n        case \"number\":\n            return Number.isNaN(data) ? \"nan\" : \"number\";\n        case \"boolean\":\n            return \"boolean\";\n        case \"function\":\n            return \"function\";\n        case \"bigint\":\n            return \"bigint\";\n        case \"symbol\":\n            return \"symbol\";\n        case \"object\":\n            if (Array.isArray(data)) {\n                return \"array\";\n            }\n            if (data === null) {\n                return \"null\";\n            }\n            if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n                return \"promise\";\n            }\n            if (typeof Map !== \"undefined\" && data instanceof Map) {\n                return \"map\";\n            }\n            if (typeof Set !== \"undefined\" && data instanceof Set) {\n                return \"set\";\n            }\n            if (typeof Date !== \"undefined\" && data instanceof Date) {\n                return \"date\";\n            }\n            // @ts-ignore\n            if (typeof File !== \"undefined\" && data instanceof File) {\n                return \"file\";\n            }\n            return \"object\";\n        default:\n            throw new Error(`Unknown data type: ${t}`);\n    }\n};\nexport const propertyKeyTypes = /* @__PURE__*/ new Set([\"string\", \"number\", \"symbol\"]);\nexport const primitiveTypes = /* @__PURE__*/ new Set([\n    \"string\",\n    \"number\",\n    \"bigint\",\n    \"boolean\",\n    \"symbol\",\n    \"undefined\",\n]);\nexport function escapeRegex(str) {\n    return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n// zod-specific utils\nexport function clone(inst, def, params) {\n    const cl = new inst._zod.constr(def ?? inst._zod.def);\n    if (!def || params?.parent)\n        cl._zod.parent = inst;\n    return cl;\n}\nexport function normalizeParams(_params) {\n    const params = _params;\n    if (!params)\n        return {};\n    if (typeof params === \"string\")\n        return { error: () => params };\n    if (params?.message !== undefined) {\n        if (params?.error !== undefined)\n            throw new Error(\"Cannot specify both `message` and `error` params\");\n        params.error = params.message;\n    }\n    delete params.message;\n    if (typeof params.error === \"string\")\n        return { ...params, error: () => params.error };\n    return params;\n}\nexport function createTransparentProxy(getter) {\n    let target;\n    return new Proxy({}, {\n        get(_, prop, receiver) {\n            target ?? (target = getter());\n            return Reflect.get(target, prop, receiver);\n        },\n        set(_, prop, value, receiver) {\n            target ?? (target = getter());\n            return Reflect.set(target, prop, value, receiver);\n        },\n        has(_, prop) {\n            target ?? (target = getter());\n            return Reflect.has(target, prop);\n        },\n        deleteProperty(_, prop) {\n            target ?? (target = getter());\n            return Reflect.deleteProperty(target, prop);\n        },\n        ownKeys(_) {\n            target ?? (target = getter());\n            return Reflect.ownKeys(target);\n        },\n        getOwnPropertyDescriptor(_, prop) {\n            target ?? (target = getter());\n            return Reflect.getOwnPropertyDescriptor(target, prop);\n        },\n        defineProperty(_, prop, descriptor) {\n            target ?? (target = getter());\n            return Reflect.defineProperty(target, prop, descriptor);\n        },\n    });\n}\nexport function stringifyPrimitive(value) {\n    if (typeof value === \"bigint\")\n        return value.toString() + \"n\";\n    if (typeof value === \"string\")\n        return `\"${value}\"`;\n    return `${value}`;\n}\nexport function optionalKeys(shape) {\n    return Object.keys(shape).filter((k) => {\n        return shape[k]._zod.optin !== undefined && shape[k]._zod.optout === \"optional\";\n    });\n}\n// Wrapped in a `@__PURE__` IIFE: esbuild never tree-shakes a top-level initializer that contains a member access on `Number`, so the bare object literal survived into every bundle.\nexport const NUMBER_FORMAT_RANGES = /*@__PURE__*/ (() => ({\n    safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],\n    int32: [-2147483648, 2147483647],\n    uint32: [0, 4294967295],\n    float32: [-3.4028234663852886e38, 3.4028234663852886e38],\n    float64: [-Number.MAX_VALUE, Number.MAX_VALUE],\n}))();\nexport const BIGINT_FORMAT_RANGES = {\n    int64: [/* @__PURE__*/ BigInt(\"-9223372036854775808\"), /* @__PURE__*/ BigInt(\"9223372036854775807\")],\n    uint64: [/* @__PURE__*/ BigInt(0), /* @__PURE__*/ BigInt(\"18446744073709551615\")],\n};\nexport function pick(schema, mask) {\n    const currDef = schema._zod.def;\n    const checks = currDef.checks;\n    const hasChecks = checks && checks.length > 0;\n    if (hasChecks) {\n        throw new Error(\".pick() cannot be used on object schemas containing refinements\");\n    }\n    const newShape = {};\n    mirrorShape(newShape, schema, maskedKeys(schema, mask));\n    return clone(schema, mergeDefs(currDef, { shape: newShape, checks: [] }));\n}\n// the mask keys that select something, checked against the source's shape without resolving it\nfunction maskedKeys(schema, mask) {\n    const raw = sourceShape(schema);\n    const keys = [];\n    // `for...in` skips symbols, so a symbol in the mask would select nothing\n    for (const key of Reflect.ownKeys(mask)) {\n        if (!Object.getOwnPropertyDescriptor(raw, key)?.enumerable) {\n            throw new Error(`Unrecognized key: \"${String(key)}\"`);\n        }\n        if (mask[key])\n            keys.push(key);\n    }\n    return keys;\n}\nexport function omit(schema, mask) {\n    const currDef = schema._zod.def;\n    const checks = currDef.checks;\n    const hasChecks = checks && checks.length > 0;\n    if (hasChecks) {\n        throw new Error(\".omit() cannot be used on object schemas containing refinements\");\n    }\n    const omitted = new Set(maskedKeys(schema, mask));\n    const newShape = {};\n    mirrorShape(newShape, schema, Reflect.ownKeys(sourceShape(schema)).filter((key) => !omitted.has(key)));\n    return clone(schema, mergeDefs(currDef, { shape: newShape, checks: [] }));\n}\nexport function extend(schema, shape) {\n    if (!isPlainObject(shape)) {\n        throw new Error(\"Invalid input to extend: expected a plain object\");\n    }\n    const checks = schema._zod.def.checks;\n    const hasChecks = checks && checks.length > 0;\n    if (hasChecks) {\n        // Only throw if new shape overlaps with existing shape. Use getOwnPropertyDescriptor to check key existence without accessing values\n        const existingShape = sourceShape(schema);\n        for (const key of Reflect.ownKeys(shape)) {\n            if (Object.getOwnPropertyDescriptor(existingShape, key) !== undefined) {\n                throw new Error(\"Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.\");\n            }\n        }\n    }\n    return clone(schema, mergeDefs(schema._zod.def, { shape: extended(schema, shape) }));\n}\n// the source's keys, then the caller's overlaid on top\nfunction extended(schema, shape) {\n    const newShape = {};\n    mirrorShape(newShape, schema, Reflect.ownKeys(sourceShape(schema)));\n    mirrorProps(newShape, shape);\n    return newShape;\n}\nexport function safeExtend(schema, shape) {\n    if (!isPlainObject(shape)) {\n        throw new Error(\"Invalid input to safeExtend: expected a plain object\");\n    }\n    return clone(schema, mergeDefs(schema._zod.def, { shape: extended(schema, shape) }));\n}\nexport function merge(a, b) {\n    if (!b?._zod?.def) {\n        throw new Error(\"Invalid input to merge: expected an object schema. To merge a plain shape, use `.extend()`.\");\n    }\n    if (a._zod.def.checks?.length) {\n        throw new Error(\".merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.\");\n    }\n    const newShape = {};\n    mirrorShape(newShape, a, Reflect.ownKeys(sourceShape(a)));\n    mirrorShape(newShape, b, Reflect.ownKeys(sourceShape(b)));\n    const def = mergeDefs(a._zod.def, {\n        shape: newShape,\n        get catchall() {\n            return b._zod.def.catchall;\n        },\n        checks: b._zod.def.checks ?? [],\n    });\n    return clone(a, def);\n}\nexport function partial(Class, schema, mask, name = \"partial\") {\n    const currDef = schema._zod.def;\n    const checks = currDef.checks;\n    const hasChecks = checks && checks.length > 0;\n    if (hasChecks) {\n        throw new Error(`.${name}() cannot be used on object schemas containing refinements`);\n    }\n    const selected = mask ? new Set(maskedKeys(schema, mask)) : undefined;\n    const newShape = {};\n    mirrorShape(newShape, schema, Reflect.ownKeys(sourceShape(schema)), Class &&\n        ((value, key) => (selected && !selected.has(key) ? value : new Class({ type: \"optional\", innerType: value }))));\n    return clone(schema, mergeDefs(schema._zod.def, { shape: newShape, checks: [] }));\n}\nexport function required(Class, schema, mask) {\n    const selected = mask ? new Set(maskedKeys(schema, mask)) : undefined;\n    const newShape = {};\n    mirrorShape(newShape, schema, Reflect.ownKeys(sourceShape(schema)), (value, key) => \n    // overwrite with non-optional\n    selected && !selected.has(key) ? value : new Class({ type: \"nonoptional\", innerType: value }));\n    return clone(schema, mergeDefs(schema._zod.def, { shape: newShape }));\n}\n// invalid_type | too_big | too_small | invalid_format | not_multiple_of | unrecognized_keys | invalid_union | invalid_key | invalid_element | invalid_value | custom\nexport function aborted(x, startIndex = 0) {\n    if (x.aborted === true)\n        return true;\n    for (let i = startIndex; i < x.issues.length; i++) {\n        if (x.issues[i]?.continue !== true) {\n            return true;\n        }\n    }\n    return false;\n}\n// Checks for explicit abort (continue === false), as opposed to implicit abort (continue === undefined). Used to respect `abort: true` in .refine() even for checks that have a `when` function.\nexport function explicitlyAborted(x, startIndex = 0) {\n    if (x.aborted === true)\n        return true;\n    for (let i = startIndex; i < x.issues.length; i++) {\n        if (x.issues[i]?.continue === false) {\n            return true;\n        }\n    }\n    return false;\n}\nexport function prefixIssues(path, issues) {\n    return issues.map((iss) => {\n        var _a;\n        (_a = iss).path ?? (_a.path = []);\n        iss.path.unshift(path);\n        return iss;\n    });\n}\nexport function unwrapMessage(message) {\n    return typeof message === \"string\" ? message : message?.message;\n}\n/* A check holds no link back to the schema it is attached to — the same check instance is shared by every clone of that schema — so the owner is stamped onto the issues a check just raised, at the only point where both are in scope. Runs on the failure path only; `start` is the issue count from before the check ran. */\nexport function attachSchema(issues, start, inst) {\n    var _a;\n    for (let i = start; i < issues.length; i++) {\n        (_a = issues[i]).schema ?? (_a.schema = inst);\n    }\n}\nexport function finalizeIssue(iss, ctx, config) {\n    var _a;\n    // A schema that raised an issue itself owns it outright, and outranks any stamp an enclosing check left in `attachSchema`. String formats and z.custom() are schema and check at once, so when they act as a check they defer to that stamp instead.\n    const traits = iss.inst?._zod?.traits;\n    if (traits?.has(\"$ZodType\")) {\n        if (traits.has(\"$ZodCheck\"))\n            (_a = iss).schema ?? (_a.schema = iss.inst);\n        else\n            iss.schema = iss.inst;\n    }\n    // Decreasing specificity, first map to return a message wins. `inst` is whatever raised the issue, so a check's own map outranks the owning schema's.\n    const schemaError = iss.schema !== iss.inst ? iss.schema?._zod.def?.error : undefined;\n    const message = iss.message\n        ? iss.message\n        : (unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ??\n            unwrapMessage(schemaError?.(iss)) ??\n            unwrapMessage(ctx?.error?.(iss)) ??\n            unwrapMessage(config.customError?.(iss)) ??\n            unwrapMessage(config.localeError?.(iss)) ??\n            \"Invalid input\");\n    // an explicit own-key copy beats object rest with excluded keys, which v8 routes through a generic runtime call; Object.keys rather than for-in so an issue pushed with a prototype does not leak inherited keys, and an own __proto__ key is dropped rather than assigned through the setter\n    const full = {};\n    for (const k of Object.keys(iss)) {\n        if (k === \"inst\" || k === \"schema\" || k === \"continue\" || k === \"input\" || k === \"__proto__\")\n            continue;\n        full[k] = iss[k];\n    }\n    full.path ?? (full.path = []);\n    full.message = message;\n    if (ctx?.reportInput) {\n        full.input = iss.input;\n    }\n    return full;\n}\nexport function getSizableOrigin(input) {\n    if (input instanceof Set)\n        return \"set\";\n    if (input instanceof Map)\n        return \"map\";\n    // @ts-ignore\n    if (input instanceof File)\n        return \"file\";\n    return \"unknown\";\n}\nconst highSurrogate = /[\\uD800-\\uDBFF]/;\n// Code points in `str`: a surrogate pair counts once, a lone surrogate as itself. Hand-rolled because the string iterator allocates and runs ~250x slower on this path; the regex probe exits ~50x quicker for a string with no astral characters.\nexport function codePointLength(str) {\n    const units = str.length;\n    if (!highSurrogate.test(str))\n        return units;\n    let count = units;\n    for (let i = 0; i < units - 1; i++) {\n        if ((str.charCodeAt(i) & 0xfc00) === 0xd800 && (str.charCodeAt(i + 1) & 0xfc00) === 0xdc00) {\n            count--;\n            i++;\n        }\n    }\n    return count;\n}\nexport function getLengthableOrigin(input) {\n    if (Array.isArray(input))\n        return \"array\";\n    if (typeof input === \"string\")\n        return \"string\";\n    return \"unknown\";\n}\nexport function parsedType(data) {\n    const t = typeof data;\n    switch (t) {\n        case \"number\": {\n            return Number.isNaN(data) ? \"nan\" : \"number\";\n        }\n        case \"object\": {\n            if (data === null) {\n                return \"null\";\n            }\n            if (Array.isArray(data)) {\n                return \"array\";\n            }\n            const obj = data;\n            if (obj && Object.getPrototypeOf(obj) !== Object.prototype && \"constructor\" in obj && obj.constructor) {\n                return obj.constructor.name;\n            }\n        }\n    }\n    return t;\n}\nexport function issue(...args) {\n    const [iss, input, inst] = args;\n    if (typeof iss === \"string\") {\n        return {\n            message: iss,\n            code: \"custom\",\n            input,\n            inst,\n        };\n    }\n    return { ...iss };\n}\nexport function cleanEnum(obj) {\n    return Object.entries(obj)\n        .filter(([k, _]) => {\n        // return true if NaN, meaning it's not a number, thus a string key\n        return Number.isNaN(Number.parseInt(k, 10));\n    })\n        .map((el) => el[1]);\n}\n// Codec utility functions\nexport function base64ToUint8Array(base64) {\n    const binaryString = atob(base64);\n    const bytes = new Uint8Array(binaryString.length);\n    for (let i = 0; i < binaryString.length; i++) {\n        bytes[i] = binaryString.charCodeAt(i);\n    }\n    return bytes;\n}\nexport function uint8ArrayToBase64(bytes) {\n    let binaryString = \"\";\n    for (let i = 0; i < bytes.length; i++) {\n        binaryString += String.fromCharCode(bytes[i]);\n    }\n    return btoa(binaryString);\n}\nexport function base64urlToUint8Array(base64url) {\n    const base64 = base64url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n    const padding = \"=\".repeat((4 - (base64.length % 4)) % 4);\n    return base64ToUint8Array(base64 + padding);\n}\nexport function uint8ArrayToBase64url(bytes) {\n    return uint8ArrayToBase64(bytes).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\nexport function hexToUint8Array(hex) {\n    const cleanHex = hex.replace(/^0x/, \"\");\n    if (cleanHex.length % 2 !== 0) {\n        throw new Error(\"Invalid hex string length\");\n    }\n    const bytes = new Uint8Array(cleanHex.length / 2);\n    for (let i = 0; i < cleanHex.length; i += 2) {\n        bytes[i / 2] = Number.parseInt(cleanHex.slice(i, i + 2), 16);\n    }\n    return bytes;\n}\nexport function uint8ArrayToHex(bytes) {\n    return Array.from(bytes)\n        .map((b) => b.toString(16).padStart(2, \"0\"))\n        .join(\"\");\n}\n// instanceof\nexport class Class {\n    constructor(..._args) { }\n}\n//////////    PROTOTYPE INSTALLERS     //////////\n//\n// Members live on the prototype and materialize per instance on first read, which keeps own-property count under the step where V8 stops using inline slots. Changing anything here means re-measuring runtime, memory and bundle size together — see \"The three axes\" in AGENTS.md.\n/**\n * Installs a trait's members on its prototype. Each value builds that member for the instance on first read; the built value shadows the accessor as an own property, so a detached `const { parse } = schema` keeps working.\n *\n * Call this from a `proto` initializer, which runs once per prototype — never per instance.\n */\nexport function members(proto, table) {\n    for (const key in table) {\n        const desc = Object.getOwnPropertyDescriptor(table, key);\n        // a getter installs as written, so it stays live: `description` reads through to the registry on every access. not enumerable: an object literal's is, and a prototype member never was\n        if (desc.get)\n            Object.defineProperty(proto, key, { ...desc, enumerable: false });\n        // a method materializes bound on first read, which is what keeps a detached member working: `const opt = schema.optional; opt()`\n        else\n            defineBound(proto, key, desc.value);\n    }\n}\n/** Shadows a prototype member with an own value, so a getter that builds from the instance runs once. */\nexport function own(inst, key, value, enumerable = true) {\n    Object.defineProperty(inst, key, { configurable: true, writable: true, enumerable, value });\n    return value;\n}\n/** Like {@link own}, for a member that was never an own data property and has to stay out of `Object.keys`. */\nexport function hide(inst, key, value) {\n    return own(inst, key, value, false);\n}\n/** Adds members a table derives from the instance: each builds on first read and shadows as own data, and assignment shadows the same way, as when these were own properties. */\nexport /*@__NO_SIDE_EFFECTS__*/ function derived(computes, table) {\n    for (const key in computes) {\n        const compute = computes[key];\n        // an object literal's accessor is configurable and enumerable, and `members` copies the descriptor as written\n        Object.defineProperty(table, key, {\n            configurable: true,\n            enumerable: true,\n            get() {\n                return own(this, key, compute(this));\n            },\n            set(value) {\n                own(this, key, value);\n            },\n        });\n    }\n    return table;\n}\nfunction defineBound(proto, key, fn) {\n    Object.defineProperty(proto, key, {\n        configurable: true,\n        get() {\n            // vitest's spyOn calls a prototype getter bare to find the function it wraps, so a nullish receiver answers the raw method\n            return this == null ? fn : own(this, key, fn.bind(this));\n        },\n        set(value) {\n            own(this, key, value);\n        },\n    });\n}\n/** Returns the prototype to install on, or `undefined` if this group is already installed on it. */\nfunction claim(inst, sentinel) {\n    const proto = Object.getPrototypeOf(inst);\n    // Runs on every construction, so `in` rather than the costlier `hasOwnProperty.call`. Sentinels are keys the group itself defines.\n    return sentinel in proto ? undefined : proto;\n}\n// The internals whose init chain is installing. A second call for the same one is a derived constructor overriding its base, so it must not construct another schema in between or the override is dropped.\nlet installing;\n// Set while a getter is running, so a value that resolved through a recursion break is not memoized. One shared descriptor shadows the key for the duration, which costs no per-key allocation.\nlet broke = false;\nconst breaker = {\n    configurable: true,\n    get() {\n        broke = true;\n        return undefined;\n    },\n};\n/**\n * Installs a lazily-derived internal on the `_zod` prototype of `inst`'s\n * constructor, computed from the internals object itself and cached there on\n * first read. One accessor per constructor rather than one per instance.\n */\nexport function defineLazyInternal(inst, key, compute) {\n    const proto = Object.getPrototypeOf(inst._zod);\n    if (key in proto && installing !== inst._zod) {\n        // A repeat construction: everything is installed already. Cleared here so the reference is not held past the first construction of every type.\n        installing = undefined;\n        return;\n    }\n    installing = inst._zod;\n    Object.defineProperty(proto, key, {\n        configurable: true,\n        get() {\n            // Shadowed before computing so a re-entrant read from a recursive schema resolves to undefined instead of running the getter again.\n            Object.defineProperty(this, key, breaker);\n            const outer = broke;\n            broke = false;\n            try {\n                const value = compute(this);\n                // A result that resolved through a recursion break is recomputed once the graph is complete; everything else memoizes, undefined included.\n                if (broke)\n                    delete this[key];\n                else\n                    Object.defineProperty(this, key, { configurable: true, writable: true, value });\n                broke = broke || outer;\n                return value;\n            }\n            catch (err) {\n                // A compute that threw memoizes nothing, so a later read runs it again and fails the same way. The shadow goes with it, since leaving it installed would answer undefined for every later read.\n                delete this[key];\n                broke = broke || outer;\n                throw err;\n            }\n        },\n        set(value) {\n            Object.defineProperty(this, key, { configurable: true, writable: true, value });\n        },\n    });\n}\n/**\n * Installs `key` on `inst`'s prototype, computed by `make` on first read and cached there as an own\n * data property. One accessor per constructor rather than one per instance, because an own accessor\n * puts every instance after the first into v8 dictionary mode. The key doubles as the sentinel.\n */\nexport function installLazyProp(inst, key, make, enumerable) {\n    const proto = claim(inst, key);\n    if (!proto)\n        return;\n    Object.defineProperty(proto, key, {\n        configurable: true,\n        get() {\n            // Shadowed before computing, so a re-entrant read from a self-referential shape resolves to undefined instead of running the getter again. A data property rather than an accessor: an own accessor is the dictionary-mode transition this exists to avoid.\n            const desc = { configurable: true, writable: true, enumerable, value: undefined };\n            Object.defineProperty(this, key, desc);\n            // a compute that throws leaves the shadow behind, so later reads answer undefined instead of re-throwing; `defineLazy` did the same, and `defineLazyInternal`'s delete-on-catch would cost bytes in every bundle for a case only a throwing user getter reaches\n            desc.value = make(this);\n            Object.defineProperty(this, key, desc);\n            return desc.value;\n        },\n        set(value) {\n            Object.defineProperty(this, key, { configurable: true, writable: true, enumerable, value });\n        },\n    });\n}\n/** Marks the thunk `_catch` synthesises for a constant catch value. `Function.length` cannot tell that thunk from a user callback — rest and defaulted parameters both report arity 0 — and a user callback reads `ctx.error`, whose issues only finalize correctly against the caller's per-parse error map. Provenance can say what arity cannot. A plain string key rather than `Symbol.for`, whose call at module scope no bundler can prove pure — the same shape that anchored `urlCanParse` into every build. */\nexport const CONSTANT_CATCH = \"~constantCatch\";\n/** Wraps a constant catch value in a thunk tagged with {@link CONSTANT_CATCH}. */\nexport function constantCatch(value) {\n    const fn = () => value;\n    fn[CONSTANT_CATCH] = true;\n    return fn;\n}\n","var _a;\nimport { members as installMembers } from \"./util.js\";\n/** A special constant with type `never` */\nexport const NEVER = /*@__PURE__*/ Object.freeze({\n    status: \"aborted\",\n});\n/* Shared descriptor for installing `_zod`; defineProperty reads it\n * synchronously, so reusing one object avoids a per-instance allocation. */\nconst _zodDesc = { value: undefined, enumerable: false };\n// null where suppressing the capture would be unrecoverable: `parse()` puts the frames back with `captureStackTrace`, so without it the throw would lose its stack. also latched to null once `stackTraceLimit` proves unassignable, which a realm can do at any point by hardening Error\nlet _E = \"captureStackTrace\" in Error ? Error : null;\n// v8 captures a stack trace inside the Error constructor, which dominates a failed parse; costs only the frames, and parse() restores those. the constructor must RUN: Object.create is cheaper and passes instanceof, but Error.isError and util.types.isNativeError check an internal slot\nfunction newError(Definition) {\n    const E = _E;\n    if (E) {\n        const saved = E.stackTraceLimit;\n        if (typeof saved === \"number\") {\n            try {\n                E.stackTraceLimit = 0;\n            }\n            catch {\n                _E = null;\n                return new Definition();\n            }\n            try {\n                return new Definition();\n            }\n            finally {\n                E.stackTraceLimit = saved;\n            }\n        }\n    }\n    return new Definition();\n}\nexport /*@__NO_SIDE_EFFECTS__*/ function $constructor(name, initializer, \n/** This trait's members, installed once on every prototype that composes it. They cannot be declared in the initializer above: that runs per instance, and the prototype is shared. */\nproto, params) {\n    // Prototype for this constructor's `_zod` internals. Lazily-derived fields (`values`, `pattern`, `optin`, …) install here once rather than as an accessor on every instance.\n    const zodProto = {};\n    // Assigning the fields in the constructor body is what gives instances in-object slots; building the object literally and reparenting it costs a second allocation and a generic property copy.\n    function Internals(def) {\n        this.def = def;\n        this.constr = _;\n        this.traits = new Set();\n    }\n    Internals.prototype = zodProto;\n    const protoMembers = proto;\n    // One trait's members land on every prototype whose chain composes it, so the answer is per prototype rather than per trait.\n    const initialized = protoMembers && new WeakSet();\n    function init(inst, def) {\n        if (!inst._zod) {\n            _zodDesc.value = new Internals(def);\n            try {\n                Object.defineProperty(inst, \"_zod\", _zodDesc);\n            }\n            finally {\n                // Cleared even on throw, so the shared descriptor never leaks one instance's internals into the next.\n                _zodDesc.value = undefined;\n            }\n        }\n        else if (inst._zod.traits.has(name)) {\n            return;\n        }\n        inst._zod.traits.add(name);\n        initializer(inst, def);\n        if (initialized) {\n            // `super(def)` from a user subclass gives `this` a prototype the subclass owns, and installing there would overwrite whatever the subclass declared. `constr` built the instance, so its prototype is the one below the subclass's that should carry the members. A receiver whose chain never reaches that prototype installs on its own, which for a plain object handed straight to `init` means `Object.prototype` — unchanged from before.\n            const own = Object.getPrototypeOf(inst);\n            const ctorProto = inst._zod.constr.prototype;\n            let up = own;\n            while (up && up !== ctorProto)\n                up = Object.getPrototypeOf(up);\n            const target = up ?? own;\n            if (!initialized.has(target)) {\n                initialized.add(target);\n                installMembers(target, protoMembers);\n            }\n        }\n        // support prototype modifications; for-in avoids the array allocation of Object.keys on the (usually empty) prototype\n        const proto = _.prototype;\n        for (const k in proto) {\n            if (!Object.prototype.hasOwnProperty.call(proto, k))\n                continue;\n            if (!(k in inst)) {\n                inst[k] = proto[k].bind(inst);\n            }\n        }\n    }\n    // doesn't work if Parent has a constructor with arguments\n    const Parent = params?.Parent ?? Object;\n    class Definition extends Parent {\n    }\n    Object.defineProperty(Definition, \"name\", { value: name });\n    function _(def) {\n        const inst = params?.Parent ? newError(Definition) : this;\n        init(inst, def);\n        const deferred = inst._zod.deferred;\n        if (deferred) {\n            for (const fn of deferred) {\n                fn();\n            }\n            // Released: initializers run once, and the list would otherwise be retained for the schema's lifetime.\n            inst._zod.deferred = undefined;\n        }\n        // Global post-processor hook. Internal: installed by `import \"zod/compile\"` to enable AOT compilation for every constructed schema. Runs last, once the instance is fully built, because it hands the instance to compile(). The post-processor is expected to be reentrancy-guarded by its own implementation.\n        const pp = globalThis.__zod_globalConfig?.postProcessor;\n        if (pp)\n            pp(inst);\n        return inst;\n    }\n    Object.defineProperty(_, \"init\", { value: init });\n    Object.defineProperty(_, Symbol.hasInstance, {\n        value: (inst) => {\n            if (params?.Parent && inst instanceof params.Parent)\n                return true;\n            return inst?._zod?.traits?.has(name);\n        },\n    });\n    Object.defineProperty(_, \"name\", { value: name });\n    return _;\n}\n//////////////////////////////   UTILITIES   ///////////////////////////////////////\nexport const $brand = /*@__PURE__*/ Symbol(\"zod_brand\");\nexport class $ZodAsyncError extends Error {\n    constructor() {\n        super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);\n    }\n}\nexport class $ZodEncodeError extends Error {\n    constructor(name) {\n        super(`Encountered unidirectional transform during encode: ${name}`);\n        this.name = \"ZodEncodeError\";\n    }\n}\n(_a = globalThis).__zod_globalConfig ?? (_a.__zod_globalConfig = {});\nexport const globalConfig = globalThis.__zod_globalConfig;\nexport function config(newConfig) {\n    if (newConfig)\n        Object.assign(globalConfig, newConfig);\n    return globalConfig;\n}\n","import { $constructor } from \"./core.js\";\nimport * as util from \"./util.js\";\n/* Computing the message eagerly is expensive (pretty-printed JSON of all\n * issues), so defer it until first read. The accessor functions and\n * descriptors are shared across instances to keep error construction\n * cheap; the computed message is cached on the internals object. The\n * setter preserves plain assignment semantics for consumers that\n * overwrite `message`. */\nfunction _getMessage() {\n    const internals = this._zod;\n    internals.message ?? (internals.message = JSON.stringify(internals.def, util.jsonStringifyReplacer, 2));\n    return internals.message;\n}\nfunction _setMessage(value) {\n    this._zod.message = value;\n}\nconst _messageDesc = {\n    get: _getMessage,\n    set: _setMessage,\n    enumerable: true,\n    configurable: true,\n};\nconst _issuesDesc = { value: undefined, enumerable: false };\n/* Prototypes that already carry the lazy `toString`. Seeded with the\n * intrinsics so that `init` on a foreign object — it accepts any object —\n * can never install an accessor onto a prototype we do not own. */\nconst _installedToString = /* @__PURE__ */ new WeakSet([Object.prototype, Error.prototype]);\nconst initializer = (inst, def) => {\n    inst.name = \"$ZodError\";\n    // `_zod` is already non-enumerable: $constructor's init defined it with this same descriptor\n    _issuesDesc.value = def;\n    Object.defineProperty(inst, \"issues\", _issuesDesc);\n    // Clear the shared slot; a retained `value` pins the last error's issues.\n    _issuesDesc.value = undefined;\n    Object.defineProperty(inst, \"message\", _messageDesc);\n    /* `toString` lives as a non-enumerable lazy getter on the shared\n     * prototype; on first access it caches a per-instance closure so\n     * detached usage still works. */\n    const proto = Object.getPrototypeOf(inst);\n    if (!_installedToString.has(proto)) {\n        _installedToString.add(proto);\n        Object.defineProperty(proto, \"toString\", {\n            configurable: true,\n            enumerable: false,\n            get() {\n                const value = () => this.message;\n                Object.defineProperty(this, \"toString\", { value, configurable: true, writable: true });\n                return value;\n            },\n            set(value) {\n                Object.defineProperty(this, \"toString\", { value, configurable: true, writable: true });\n            },\n        });\n    }\n};\nexport const $ZodError = $constructor(\"$ZodError\", initializer);\nexport const $ZodRealError = $constructor(\"$ZodError\", initializer, undefined, {\n    Parent: Error,\n});\n/** Get-or-create `obj[key]` as an own data property. A path segment naming an inherited member\n * (\"toString\", \"constructor\") would otherwise read through to the prototype, and assigning\n * \"__proto__\" would hit the setter instead of creating a key. */\nfunction node(obj, key, make) {\n    if (!Object.prototype.hasOwnProperty.call(obj, key)) {\n        if (key === \"__proto__\") {\n            Object.defineProperty(obj, key, { value: make(), writable: true, enumerable: true, configurable: true });\n        }\n        else {\n            obj[key] = make();\n        }\n    }\n    return obj[key];\n}\nexport function flattenError(error, mapper = (issue) => issue.message) {\n    const fieldErrors = {};\n    const formErrors = [];\n    for (const sub of error.issues) {\n        if (sub.path.length > 0) {\n            node(fieldErrors, sub.path[0], () => []).push(mapper(sub));\n        }\n        else {\n            formErrors.push(mapper(sub));\n        }\n    }\n    return { formErrors, fieldErrors };\n}\nexport function formatError(error, mapper = (issue) => issue.message) {\n    const fieldErrors = { _errors: [] };\n    const processError = (error, path = []) => {\n        for (const issue of error.issues) {\n            if (issue.code === \"invalid_union\" && issue.errors.length) {\n                issue.errors.map((issues) => processError({ issues }, [...path, ...issue.path]));\n            }\n            else if (issue.code === \"invalid_key\") {\n                processError({ issues: issue.issues }, [...path, ...issue.path]);\n            }\n            else if (issue.code === \"invalid_element\") {\n                processError({ issues: issue.issues }, [...path, ...issue.path]);\n            }\n            else {\n                const fullpath = [...path, ...issue.path];\n                if (fullpath.length === 0) {\n                    fieldErrors._errors.push(mapper(issue));\n                }\n                else {\n                    let curr = fieldErrors;\n                    let i = 0;\n                    while (i < fullpath.length) {\n                        const el = fullpath[i];\n                        const terminal = i === fullpath.length - 1;\n                        // `_errors` is reserved by this legacy format, so merge a matching path segment into the current node instead of treating its array as a child.\n                        if (el === \"_errors\") {\n                            if (terminal)\n                                curr._errors.push(mapper(issue));\n                            i++;\n                            continue;\n                        }\n                        // A path element may collide with an inherited property name such as\n                        // \"__proto__\" or \"constructor\". Truthiness checks read the prototype\n                        // (so no node is created, then ._errors.push throws), and bracket\n                        // assignment of \"__proto__\" hits the setter instead of creating an\n                        // own key. Guard the read with hasOwnProperty and create the node\n                        // with defineProperty so any path element becomes a real own key.\n                        if (!Object.prototype.hasOwnProperty.call(curr, el)) {\n                            Object.defineProperty(curr, el, {\n                                value: { _errors: [] },\n                                enumerable: true,\n                                writable: true,\n                                configurable: true,\n                            });\n                        }\n                        const node = curr[el];\n                        if (terminal) {\n                            node._errors.push(mapper(issue));\n                        }\n                        curr = node;\n                        i++;\n                    }\n                }\n            }\n        }\n    };\n    processError(error);\n    return fieldErrors;\n}\nexport function treeifyError(error, mapper = (issue) => issue.message) {\n    const result = { errors: [] };\n    const processError = (error, path = []) => {\n        var _a;\n        for (const issue of error.issues) {\n            if (issue.code === \"invalid_union\" && issue.errors.length) {\n                // regular union error\n                issue.errors.map((issues) => processError({ issues }, [...path, ...issue.path]));\n            }\n            else if (issue.code === \"invalid_key\") {\n                processError({ issues: issue.issues }, [...path, ...issue.path]);\n            }\n            else if (issue.code === \"invalid_element\") {\n                processError({ issues: issue.issues }, [...path, ...issue.path]);\n            }\n            else {\n                const fullpath = [...path, ...issue.path];\n                if (fullpath.length === 0) {\n                    result.errors.push(mapper(issue));\n                    continue;\n                }\n                let curr = result;\n                let i = 0;\n                while (i < fullpath.length) {\n                    const el = fullpath[i];\n                    const terminal = i === fullpath.length - 1;\n                    if (typeof el === \"string\") {\n                        curr.properties ?? (curr.properties = {});\n                        // el may collide with an inherited property name (\"__proto__\",\n                        // \"constructor\", ...); ??= reads the prototype so the node is never\n                        // created and curr.errors.push throws. Guard with hasOwnProperty and\n                        // create the node with defineProperty so \"__proto__\" becomes a real\n                        // own key rather than invoking the prototype setter.\n                        if (!Object.prototype.hasOwnProperty.call(curr.properties, el)) {\n                            Object.defineProperty(curr.properties, el, {\n                                value: { errors: [] },\n                                enumerable: true,\n                                writable: true,\n                                configurable: true,\n                            });\n                        }\n                        curr = curr.properties[el];\n                    }\n                    else {\n                        curr.items ?? (curr.items = []);\n                        (_a = curr.items)[el] ?? (_a[el] = { errors: [] });\n                        curr = curr.items[el];\n                    }\n                    if (terminal) {\n                        curr.errors.push(mapper(issue));\n                    }\n                    i++;\n                }\n            }\n        }\n    };\n    processError(error);\n    return result;\n}\n/** Format a ZodError as a human-readable string in the following form.\n *\n * From\n *\n * ```ts\n * ZodError {\n *   issues: [\n *     {\n *       expected: 'string',\n *       code: 'invalid_type',\n *       path: [ 'username' ],\n *       message: 'Invalid input: expected string'\n *     },\n *     {\n *       expected: 'number',\n *       code: 'invalid_type',\n *       path: [ 'favoriteNumbers', 1 ],\n *       message: 'Invalid input: expected number'\n *     }\n *   ];\n * }\n * ```\n *\n * to\n *\n * ```\n * username\n *   ✖ Expected number, received string at \"username\n * favoriteNumbers[0]\n *   ✖ Invalid input: expected number\n * ```\n */\nexport function toDotPath(_path) {\n    const segs = [];\n    const path = _path.map((seg) => (typeof seg === \"object\" ? seg.key : seg));\n    for (const seg of path) {\n        if (typeof seg === \"number\")\n            segs.push(`[${seg}]`);\n        else if (typeof seg === \"symbol\")\n            segs.push(`[${JSON.stringify(String(seg))}]`);\n        else if (/[^\\w$]/.test(seg))\n            segs.push(`[${JSON.stringify(seg)}]`);\n        else {\n            if (segs.length)\n                segs.push(\".\");\n            segs.push(seg);\n        }\n    }\n    return segs.join(\"\");\n}\nexport function prettifyError(error) {\n    const lines = [];\n    // sort by path length\n    const issues = [...error.issues].sort((a, b) => (a.path ?? []).length - (b.path ?? []).length);\n    // Process each issue\n    for (const issue of issues) {\n        lines.push(`✖ ${issue.message}`);\n        if (issue.path?.length)\n            lines.push(`  → at ${toDotPath(issue.path)}`);\n    }\n    // Convert Map to formatted string\n    return lines.join(\"\\n\");\n}\n","import * as core from \"./core.js\";\nimport * as errors from \"./errors.js\";\nimport * as util from \"./util.js\";\n// Always both keys, so the `_params` read site in `_parse` sees one object shape rather than two.\nfunction finalizeParams(callee, params) {\n    return { callee: params?.callee ?? callee, Err: params?.Err };\n}\nexport const _parse = (_Err) => {\n    const fn = (schema, value, _ctx, _params) => {\n        const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n        const result = schema._zod.run({ value, issues: [] }, ctx);\n        if (result instanceof Promise) {\n            throw new core.$ZodAsyncError();\n        }\n        if (result.issues.length) {\n            const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n            util.captureStackTrace(e, _params?.callee ?? fn);\n            throw e;\n        }\n        return result.value;\n    };\n    return fn;\n};\nexport const parse = /* @__PURE__*/ _parse(errors.$ZodRealError);\nexport const _parseAsync = (_Err) => {\n    const fn = async (schema, value, _ctx, params) => {\n        const ctx = _ctx ? { ..._ctx, async: true } : { async: true };\n        let result = schema._zod.run({ value, issues: [] }, ctx);\n        if (result instanceof Promise)\n            result = await result;\n        if (result.issues.length) {\n            const e = new (params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n            util.captureStackTrace(e, params?.callee ?? fn);\n            throw e;\n        }\n        return result.value;\n    };\n    return fn;\n};\nexport const parseAsync = /* @__PURE__*/ _parseAsync(errors.$ZodRealError);\nexport const _safeParse = (_Err) => (schema, value, _ctx) => {\n    const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n    const result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise) {\n        throw new core.$ZodAsyncError();\n    }\n    return result.issues.length ? failure(_Err, result.issues, ctx) : { success: true, data: result.value };\n};\nexport const safeParse = /* @__PURE__*/ _safeParse(errors.$ZodRealError);\n// the error is built on the first read of `error`: finalizing the issues and constructing the instance is most of a failing parse, and a caller that only branches on `success` never pays it. a getter in the literal keeps this small; the alternative, one shared accessor descriptor plus a hidden state slot, reads ~15% faster but costs ~75 B gzipped in every bundle\nfunction failure(Err, issues, ctx) {\n    let error;\n    return {\n        success: false,\n        get error() {\n            if (!error) {\n                error = new Err(issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n                // finalizeIssue drops `input`, so the built error holds nothing; keeping the raw issues past this point pins the parsed value for the life of the result\n                issues = undefined;\n                ctx = undefined;\n            }\n            return error;\n        },\n        set error(e) {\n            error = e;\n            // a replacement makes the getter's branch unreachable, so the captures have to go here too\n            issues = undefined;\n            ctx = undefined;\n        },\n    };\n}\nexport const _safeParseAsync = (_Err) => async (schema, value, _ctx) => {\n    const ctx = _ctx ? { ..._ctx, async: true } : { async: true };\n    let result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise)\n        result = await result;\n    return result.issues.length ? failure(_Err, result.issues, ctx) : { success: true, data: result.value };\n};\nexport const safeParseAsync = /* @__PURE__*/ _safeParseAsync(errors.$ZodRealError);\n// registry mirrors of the compiler's sentinels, so this module never imports the compiler\nconst COMPILE_INVALID = /* @__PURE__ */ Symbol.for(\"zod.compile.invalid\");\nconst COMPILE_FALLBACK = /* @__PURE__ */ Symbol.for(\"zod.compile.fallback\");\n// Deliberately tiny, because v8 will not inline a body carrying the fallback's object literals and throw. Everything that is not the compiled happy path lives in validateFallback, and that split is worth ~35% on a compiled schema.\nexport const validate = ((schema, value, _ctx) => {\n    const validator = schema._zod.bag.validator;\n    if (validator !== undefined) {\n        if (validator(value) !== COMPILE_INVALID)\n            return true;\n        // a definite sentinel means the runtime would reject, so skip the re-parse; a ctx can still change the answer\n        if (validator.definite === true && _ctx === undefined)\n            return false;\n    }\n    return validateFallback(schema, value, _ctx);\n});\nfunction validateFallback(schema, value, _ctx) {\n    const ctx = _ctx\n        ? { ..._ctx, async: false, abortEarly: true }\n        : { async: false, abortEarly: true };\n    const fallbackRun = schema._zod.bag.fallbackRun;\n    let result;\n    if (fallbackRun) {\n        // skip nested fast paths on the fallback, so user callbacks keep the at-most-twice bound\n        ctx[COMPILE_FALLBACK] = true;\n        result = fallbackRun({ value, issues: [] }, ctx);\n    }\n    else {\n        result = schema._zod.run({ value, issues: [] }, ctx);\n    }\n    if (result instanceof Promise) {\n        throw new core.$ZodAsyncError();\n    }\n    return result.issues.length === 0;\n}\n// no fast path: the compiler keeps async parses on the runtime, because a promise-returning callback that is not declared async compiles to a throw\nexport const validateAsync = async (schema, value, _ctx) => {\n    const ctx = _ctx\n        ? { ..._ctx, async: true, abortEarly: true }\n        : { async: true, abortEarly: true };\n    let result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise)\n        result = await result;\n    return result.issues.length === 0;\n};\nexport const _encode = (_Err) => {\n    const parse = _parse(_Err);\n    const fn = (schema, value, _ctx, _params) => {\n        const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n        return parse(schema, value, ctx, finalizeParams(fn, _params));\n    };\n    return fn;\n};\nexport const encode = /* @__PURE__*/ _encode(errors.$ZodRealError);\nexport const _decode = (_Err) => {\n    const parse = _parse(_Err);\n    const fn = (schema, value, _ctx, _params) => {\n        return parse(schema, value, _ctx, finalizeParams(fn, _params));\n    };\n    return fn;\n};\nexport const decode = /* @__PURE__*/ _decode(errors.$ZodRealError);\nexport const _encodeAsync = (_Err) => {\n    const parseAsync = _parseAsync(_Err);\n    const fn = async (schema, value, _ctx, _params) => {\n        const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n        return (await parseAsync(schema, value, ctx, finalizeParams(fn, _params)));\n    };\n    return fn;\n};\nexport const encodeAsync = /* @__PURE__*/ _encodeAsync(errors.$ZodRealError);\nexport const _decodeAsync = (_Err) => {\n    const parseAsync = _parseAsync(_Err);\n    const fn = async (schema, value, _ctx, _params) => {\n        return await parseAsync(schema, value, _ctx, finalizeParams(fn, _params));\n    };\n    return fn;\n};\nexport const decodeAsync = /* @__PURE__*/ _decodeAsync(errors.$ZodRealError);\nexport const _safeEncode = (_Err) => (schema, value, _ctx) => {\n    const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n    return _safeParse(_Err)(schema, value, ctx);\n};\nexport const safeEncode = /* @__PURE__*/ _safeEncode(errors.$ZodRealError);\nexport const _safeDecode = (_Err) => (schema, value, _ctx) => {\n    return _safeParse(_Err)(schema, value, _ctx);\n};\nexport const safeDecode = /* @__PURE__*/ _safeDecode(errors.$ZodRealError);\nexport const _safeEncodeAsync = (_Err) => async (schema, value, _ctx) => {\n    const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n    return _safeParseAsync(_Err)(schema, value, ctx);\n};\nexport const safeEncodeAsync = /* @__PURE__*/ _safeEncodeAsync(errors.$ZodRealError);\nexport const _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => {\n    return _safeParseAsync(_Err)(schema, value, _ctx);\n};\nexport const safeDecodeAsync = /* @__PURE__*/ _safeDecodeAsync(errors.$ZodRealError);\n","import * as util from \"./util.js\";\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link cuid2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nexport const cuid = /^[cC][0-9a-z]{6,}$/;\nexport const cuid2 = /^[0-9a-z]+$/;\nexport const ulid = /^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$/;\nexport const xid = /^[0-9a-vA-V]{20}$/;\nexport const ksuid = /^[A-Za-z0-9]{27}$/;\nexport const nanoid = /^[a-zA-Z0-9_-]{21}$/;\nexport function nanoidOfLength(length) {\n    return new RegExp(`^[a-zA-Z0-9_-]{${length}}$`);\n}\n/** ISO 8601-1 duration regex. Does not support the 8601-2 extensions like negative durations or fractional/negative components. */\nexport const duration = /^P(?:(\\d+W)|(?!.*W)(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+([.,]\\d+)?S)?)?)$/;\n/** Implements ISO 8601-2 extensions like explicit +- prefixes, mixing weeks with other units, and fractional/negative components. */\nexport const extendedDuration = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n/** A regex for any UUID-like identifier: 8-4-4-4-12 hex pattern */\nexport const guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;\n/** Returns a regex for validating an RFC 9562/4122 UUID.\n *\n * @param version Optionally specify a version 1-8. If no version is specified, all versions are supported. */\nexport const uuid = (version) => {\n    if (!version)\n        return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/;\n    return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);\n};\nexport const uuid4 = /*@__PURE__*/ uuid(4);\nexport const uuid6 = /*@__PURE__*/ uuid(6);\nexport const uuid7 = /*@__PURE__*/ uuid(7);\n/** Practical email validation */\nexport const email = /^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$/;\n/** Equivalent to the HTML5 input[type=email] validation implemented by browsers. Source: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email */\nexport const html5Email = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n/** The classic emailregex.com regex for RFC 5322-compliant emails */\nexport const rfc5322Email = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n/** A loose regex that allows Unicode characters, enforces length limits, and that's about it. */\nexport const unicodeEmail = /^[^\\s@\"]{1,64}@[^\\s@]{1,255}$/u;\nexport const idnEmail = unicodeEmail;\nexport const browserEmail = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\n// Single character class, not an alternation: the two properties overlap (U+1F9B0-U+1F9B3), so `(A|B)+` backtracks exponentially on a failed match. The leading lookahead then demands one anchor — a pictograph, a regional indicator, or the enclosing keycap — because `\\p{Emoji_Component}` on its own covers ASCII digits, `#`, `*`, ZWJ, variation selectors and skin tone modifiers, none of which is an emoji without a base.\nconst _emoji = `^(?=[\\\\s\\\\S]*[\\\\p{Extended_Pictographic}\\\\p{Regional_Indicator}\\\\u20E3])[\\\\p{Extended_Pictographic}\\\\p{Emoji_Component}]+$`;\nexport function emoji() {\n    return new RegExp(_emoji, \"u\");\n}\nexport const ipv4 = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nexport const ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/;\nexport const mac = (delimiter) => {\n    const escapedDelim = util.escapeRegex(delimiter ?? \":\");\n    return new RegExp(`^(?:[0-9A-F]{2}${escapedDelim}){5}[0-9A-F]{2}$|^(?:[0-9a-f]{2}${escapedDelim}){5}[0-9a-f]{2}$`);\n};\nexport const cidrv4 = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/([0-9]|[1-2][0-9]|3[0-2])$/;\nexport const cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nexport const base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/;\nexport const base64url = /^(?:[A-Za-z0-9_-]{4})*(?:[A-Za-z0-9_-]{2,3})?$/;\n// based on https://stackoverflow.com/questions/106179/regular-expression-to-match-dns-hostname-or-ip-address\n// export const hostname: RegExp = /^([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+$/;\nexport const hostname = /^(?=.{1,253}\\.?$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?)*\\.?$/;\nexport const domain = /^(?=.{1,253}$)([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,63}$/;\nexport const httpProtocol = /^https?$/;\n// https://blog.stevenlevithan.com/archives/validate-phone-number#r4-3 (regex sans spaces) E.164: leading digit must be 1-9; total digits (excluding '+') between 7-15\nexport const e164 = /^\\+[1-9]\\d{6,14}$/;\n// Credit card shape: 12–19 digits, optionally separated by single spaces or single hyphens. ISO/IEC 7812 caps the PAN at 19 digits; 12 is the shortest issued length (Maestro).\nexport const creditCard = /^\\d(?:[ -]?\\d){11,18}$/;\n// ISO 4217 alpha codes from the SIX list, regenerated by scripts/update-iso-4217.ts\nexport const currencyCode = /^(?:AED|AFN|ALL|AMD|AOA|ARS|AUD|AWG|AZN|BAM|BBD|BDT|BHD|BIF|BMD|BND|BOB|BOV|BRL|BSD|BTN|BWP|BYN|BZD|CAD|CDF|CHE|CHF|CHW|CLF|CLP|CNY|COP|COU|CRC|CUP|CVE|CZK|DJF|DKK|DOP|DZD|EGP|ERN|ETB|EUR|FJD|FKP|GBP|GEL|GHS|GIP|GMD|GNF|GTQ|GYD|HKD|HNL|HTG|HUF|IDR|ILS|INR|IQD|IRR|ISK|JMD|JOD|JPY|KES|KGS|KHR|KMF|KPW|KRW|KWD|KYD|KZT|LAK|LBP|LKR|LRD|LSL|LYD|MAD|MDL|MGA|MKD|MMK|MNT|MOP|MRU|MUR|MVR|MWK|MXN|MXV|MYR|MZN|NAD|NGN|NIO|NOK|NPR|NZD|OMR|PAB|PEN|PGK|PHP|PKR|PLN|PYG|QAR|RON|RSD|RUB|RWF|SAR|SBD|SCR|SDG|SEK|SGD|SHP|SLE|SOS|SRD|SSP|STN|SVC|SYP|SZL|THB|TJS|TMT|TND|TOP|TRY|TTD|TWD|TZS|UAH|UGX|USD|USN|UYI|UYU|UYW|UZS|VED|VES|VND|VUV|WST|XAD|XAF|XAG|XAU|XBA|XBB|XBC|XBD|XCD|XCG|XDR|XOF|XPD|XPF|XPT|XSU|XTS|XUA|XXX|YER|ZAR|ZMW|ZWG)$/;\n// iban electronic format: 2-letter country, check digits 02-98 (the only values `98 - remainder` can produce), 11-30 bban characters\nexport const iban = /^[A-Z]{2}(?!00|01|99)\\d{2}[A-Z0-9]{11,30}$/;\nconst dateSource = `(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))`;\n/** Anchors a pattern source. The interpolation lives here rather than at the call site because\n * esbuild will not drop a `@__PURE__` call whose own argument interpolates a variable, but it\n * will drop `anchor(dateSource)`. Keeping it inline pinned `date` into every bundle. */\nfunction anchor(source) {\n    return new RegExp(`^${source}$`);\n}\nexport const date = /*@__PURE__*/ anchor(dateSource);\nfunction timeSource(args) {\n    const hhmm = `(?:[01]\\\\d|2[0-3]):[0-5]\\\\d`;\n    const regex = typeof args.precision === \"number\"\n        ? args.precision === -1\n            ? `${hhmm}`\n            : args.precision === 0\n                ? `${hhmm}:[0-5]\\\\d`\n                : `${hhmm}:[0-5]\\\\d\\\\.\\\\d{${args.precision}}`\n        : args.seconds\n            ? `${hhmm}:[0-5]\\\\d(?:\\\\.\\\\d+)?`\n            : `${hhmm}(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?`;\n    return regex;\n}\nexport function time(args) {\n    return new RegExp(`^${timeSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetime(args) {\n    const opts = [\"Z\"];\n    // if (args.offset) opts.push(`([+-]\\\\d{2}:\\\\d{2})`);\n    if (args.offset)\n        opts.push(`([+-](?:[01]\\\\d|2[0-3]):[0-5]\\\\d)`);\n    // RFC 3339 mandates seconds wherever the time carries a `Z` or an offset, so only the unqualified form `local` adds may omit them\n    const qualified = `${timeSource({ precision: args.precision, seconds: true })}(?:${opts.join(\"|\")})`;\n    const timeRegex = args.local ? `${qualified}|${timeSource({ precision: args.precision })}` : qualified;\n    return new RegExp(`^${dateSource}T(?:${timeRegex})$`);\n}\n// the unbounded form of `string()` as a literal, so every plain string shares one instance instead of building its own\nexport const anyString = /^[\\s\\S]{0,}$/;\nexport const string = (params) => {\n    const regex = params ? `[\\\\s\\\\S]{${params?.minimum ?? 0},${params?.maximum ?? \"\"}}` : `[\\\\s\\\\S]*`;\n    return new RegExp(`^${regex}$`);\n};\nexport const bigint = /^-?\\d+n?$/;\nexport const integer = /^-?\\d+$/;\nexport const number = /^-?\\d+(?:\\.\\d+)?$/;\nexport const boolean = /^(?:true|false)$/i;\nconst _null = /^null$/i;\nexport { _null as null };\nconst _undefined = /^undefined$/i;\nexport { _undefined as undefined };\n// regex for string with no uppercase letters\nexport const lowercase = /^[^A-Z]*$/;\n// regex for string with no lowercase letters\nexport const uppercase = /^[^a-z]*$/;\n// regex for hexadecimal strings (any length)\nexport const hex = /^[0-9a-fA-F]*$/;\n// Hash regexes for different algorithms and encodings\n// Helper function to create base64 regex with exact length and padding\nfunction fixedBase64(bodyLength, padding) {\n    return new RegExp(`^[A-Za-z0-9+/]{${bodyLength}}${padding}$`);\n}\n// Helper function to create base64url regex with exact length (no padding)\nfunction fixedBase64url(length) {\n    return new RegExp(`^[A-Za-z0-9_-]{${length}}$`);\n}\n// MD5 (16 bytes): base64 = 24 chars total (22 + \"==\")\nexport const md5_hex = /^[0-9a-fA-F]{32}$/;\nexport const md5_base64 = /*@__PURE__*/ fixedBase64(22, \"==\");\nexport const md5_base64url = /*@__PURE__*/ fixedBase64url(22);\n// SHA1 (20 bytes): base64 = 28 chars total (27 + \"=\")\nexport const sha1_hex = /^[0-9a-fA-F]{40}$/;\nexport const sha1_base64 = /*@__PURE__*/ fixedBase64(27, \"=\");\nexport const sha1_base64url = /*@__PURE__*/ fixedBase64url(27);\n// SHA256 (32 bytes): base64 = 44 chars total (43 + \"=\")\nexport const sha256_hex = /^[0-9a-fA-F]{64}$/;\nexport const sha256_base64 = /*@__PURE__*/ fixedBase64(43, \"=\");\nexport const sha256_base64url = /*@__PURE__*/ fixedBase64url(43);\n// SHA384 (48 bytes): base64 = 64 chars total (no padding)\nexport const sha384_hex = /^[0-9a-fA-F]{96}$/;\nexport const sha384_base64 = /*@__PURE__*/ fixedBase64(64, \"\");\nexport const sha384_base64url = /*@__PURE__*/ fixedBase64url(64);\n// SHA512 (64 bytes): base64 = 88 chars total (86 + \"==\")\nexport const sha512_hex = /^[0-9a-fA-F]{128}$/;\nexport const sha512_base64 = /*@__PURE__*/ fixedBase64(86, \"==\");\nexport const sha512_base64url = /*@__PURE__*/ fixedBase64url(86);\n","// import { $ZodType } from \"./schemas.js\";\nimport * as core from \"./core.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nexport const $ZodCheck = /*@__PURE__*/ core.$constructor(\"$ZodCheck\", (inst, def) => {\n    var _a;\n    inst._zod ?? (inst._zod = {});\n    inst._zod.def = def;\n    (_a = inst._zod).onattach ?? (_a.onattach = []);\n});\n/** Default `when` for size-based checks: run only on non-nullish values with a `size`. */\nconst _whenHasSize = (payload) => {\n    const val = payload.value;\n    return !util.nullish(val) && val.size !== undefined;\n};\n/** Default `when` for length-based checks: run only on non-nullish values with a `length`. */\nconst _whenHasLength = (payload) => {\n    const val = payload.value;\n    return !util.nullish(val) && val.length !== undefined;\n};\nconst numericOriginMap = {\n    number: \"number\",\n    bigint: \"bigint\",\n    object: \"date\",\n};\nexport const $ZodCheckLessThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckLessThan\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const origin = numericOriginMap[typeof def.value];\n    inst._zod.check = (payload) => {\n        if (def.inclusive ? payload.value <= def.value : payload.value < def.value) {\n            return;\n        }\n        payload.issues.push({\n            origin: numericOriginMap[typeof payload.value] ?? origin,\n            code: \"too_big\",\n            maximum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n            input: payload.value,\n            inclusive: def.inclusive,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckGreaterThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckGreaterThan\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const origin = numericOriginMap[typeof def.value];\n    inst._zod.check = (payload) => {\n        if (def.inclusive ? payload.value >= def.value : payload.value > def.value) {\n            return;\n        }\n        payload.issues.push({\n            origin: numericOriginMap[typeof payload.value] ?? origin,\n            code: \"too_small\",\n            minimum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n            input: payload.value,\n            inclusive: def.inclusive,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMultipleOf = \n/*@__PURE__*/ core.$constructor(\"$ZodCheckMultipleOf\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (typeof payload.value !== typeof def.value)\n            throw new Error(\"Cannot mix number and bigint in multiple_of check.\");\n        const isMultiple = typeof payload.value === \"bigint\"\n            ? // `value % 0n` throws, and nothing is a multiple of zero — the number branch already fails this way via NaN\n                def.value !== BigInt(0) && payload.value % def.value === BigInt(0)\n            : util.floatSafeRemainder(payload.value, def.value) === 0;\n        if (isMultiple)\n            return;\n        payload.issues.push({\n            origin: typeof payload.value,\n            code: \"not_multiple_of\",\n            divisor: def.value,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckNumberFormat\", (inst, def) => {\n    $ZodCheck.init(inst, def); // no format checks\n    def.format = def.format || \"float64\";\n    const isInt = def.format?.includes(\"int\");\n    const origin = isInt ? \"int\" : \"number\";\n    const [minimum, maximum] = util.NUMBER_FORMAT_RANGES[def.format];\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        if (isInt) {\n            if (!Number.isInteger(input)) {\n                // invalid_format issue\n                // payload.issues.push({\n                //   expected: def.format,\n                //   format: def.format,\n                //   code: \"invalid_format\",\n                //   input,\n                //   inst,\n                // });\n                // invalid_type issue\n                payload.issues.push({\n                    expected: origin,\n                    format: def.format,\n                    code: \"invalid_type\",\n                    continue: false,\n                    input,\n                    inst,\n                });\n                return;\n                // not_multiple_of issue\n                // payload.issues.push({\n                //   code: \"not_multiple_of\",\n                //   origin: \"number\",\n                //   input,\n                //   inst,\n                //   divisor: 1,\n                // });\n            }\n            if (!Number.isSafeInteger(input)) {\n                if (input > 0) {\n                    // too_big\n                    payload.issues.push({\n                        input,\n                        code: \"too_big\",\n                        maximum: Number.MAX_SAFE_INTEGER,\n                        note: \"Integers must be within the safe integer range.\",\n                        inst,\n                        origin,\n                        inclusive: true,\n                        continue: !def.abort,\n                    });\n                }\n                else {\n                    // too_small\n                    payload.issues.push({\n                        input,\n                        code: \"too_small\",\n                        minimum: Number.MIN_SAFE_INTEGER,\n                        note: \"Integers must be within the safe integer range.\",\n                        inst,\n                        origin,\n                        inclusive: true,\n                        continue: !def.abort,\n                    });\n                }\n                return;\n            }\n        }\n        if (input < minimum) {\n            payload.issues.push({\n                origin: \"number\",\n                input,\n                code: \"too_small\",\n                minimum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n        if (input > maximum) {\n            payload.issues.push({\n                origin: \"number\",\n                input,\n                code: \"too_big\",\n                maximum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodCheckBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckBigIntFormat\", (inst, def) => {\n    $ZodCheck.init(inst, def); // no format checks\n    const [minimum, maximum] = util.BIGINT_FORMAT_RANGES[def.format];\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        if (input < minimum) {\n            payload.issues.push({\n                origin: \"bigint\",\n                input,\n                code: \"too_small\",\n                minimum: minimum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n        if (input > maximum) {\n            payload.issues.push({\n                origin: \"bigint\",\n                input,\n                code: \"too_big\",\n                maximum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodCheckMaxSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxSize\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = _whenHasSize);\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size <= def.maximum)\n            return;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            code: \"too_big\",\n            maximum: def.maximum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMinSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinSize\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = _whenHasSize);\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size >= def.minimum)\n            return;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            code: \"too_small\",\n            minimum: def.minimum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckSizeEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckSizeEquals\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = _whenHasSize);\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size === def.size)\n            return;\n        const tooBig = size > def.size;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            ...(tooBig ? { code: \"too_big\", maximum: def.size } : { code: \"too_small\", minimum: def.size }),\n            inclusive: true,\n            exact: true,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMaxLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxLength\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = _whenHasLength);\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const units = input.length;\n        // Strings are measured in Unicode code points, not UTF-16 units. A code point is at most two units, so a string that already fits in units fits in code points; only an overflow has to be counted.\n        const length = typeof input === \"string\" && units > def.maximum ? util.codePointLength(input) : units;\n        if (length <= def.maximum)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        payload.issues.push({\n            origin,\n            code: \"too_big\",\n            maximum: def.maximum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMinLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinLength\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = _whenHasLength);\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const units = input.length;\n        // A code point is one or two UTF-16 units, so fewer units than the floor can never reach it and twice the floor always clears it. Only in between is the exact count in doubt.\n        const length = typeof input === \"string\" && units >= def.minimum && units < def.minimum * 2\n            ? util.codePointLength(input)\n            : units;\n        if (length >= def.minimum)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        payload.issues.push({\n            origin,\n            code: \"too_small\",\n            minimum: def.minimum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckLengthEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckLengthEquals\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = _whenHasLength);\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const units = input.length;\n        // A code point is one or two UTF-16 units, so outside `[length, length * 2]` units the target is missed either way — and missed in the same direction in both measures.\n        const length = typeof input === \"string\" && units >= def.length && units <= def.length * 2\n            ? util.codePointLength(input)\n            : units;\n        if (length === def.length)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        const tooBig = length > def.length;\n        payload.issues.push({\n            origin,\n            ...(tooBig ? { code: \"too_big\", maximum: def.length } : { code: \"too_small\", minimum: def.length }),\n            inclusive: true,\n            exact: true,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckStringFormat\", (inst, def) => {\n    var _a, _b;\n    $ZodCheck.init(inst, def);\n    if (def.pattern)\n        (_a = inst._zod).check ?? (_a.check = (payload) => {\n            def.pattern.lastIndex = 0;\n            if (def.pattern.test(payload.value))\n                return;\n            payload.issues.push({\n                origin: \"string\",\n                code: \"invalid_format\",\n                format: def.format,\n                input: payload.value,\n                ...(def.pattern ? { pattern: def.pattern.toString() } : {}),\n                inst,\n                continue: !def.abort,\n            });\n        });\n    else\n        (_b = inst._zod).check ?? (_b.check = () => { });\n});\nexport const $ZodCheckRegex = /*@__PURE__*/ core.$constructor(\"$ZodCheckRegex\", (inst, def) => {\n    $ZodCheckStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        def.pattern.lastIndex = 0;\n        if (def.pattern.test(payload.value))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"regex\",\n            input: payload.value,\n            pattern: def.pattern.toString(),\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckLowerCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckLowerCase\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.lowercase);\n    $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckUpperCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckUpperCase\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.uppercase);\n    $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckIncludes = /*@__PURE__*/ core.$constructor(\"$ZodCheckIncludes\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const escapedRegex = util.escapeRegex(def.includes);\n    // `String.prototype.includes(sub, position)` matches `sub` at `position`\n    // OR LATER, so the pattern must allow at least `position` leading chars\n    // (`{N,}`), not exactly `position` chars (`{N}`).\n    const pattern = new RegExp(typeof def.position === \"number\" ? `^.{${def.position},}${escapedRegex}` : escapedRegex);\n    def.pattern = pattern;\n    inst._zod.check = (payload) => {\n        if (payload.value.includes(def.includes, def.position))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"includes\",\n            includes: def.includes,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckStartsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckStartsWith\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const pattern = new RegExp(`^${util.escapeRegex(def.prefix)}.*`);\n    def.pattern ?? (def.pattern = pattern);\n    inst._zod.check = (payload) => {\n        if (payload.value.startsWith(def.prefix))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"starts_with\",\n            prefix: def.prefix,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckEndsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckEndsWith\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const pattern = new RegExp(`.*${util.escapeRegex(def.suffix)}$`);\n    def.pattern ?? (def.pattern = pattern);\n    inst._zod.check = (payload) => {\n        if (payload.value.endsWith(def.suffix))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"ends_with\",\n            suffix: def.suffix,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\n///////////////////////////////////\n/////    $ZodCheckProperty    /////\n///////////////////////////////////\nfunction handleCheckPropertyResult(result, payload, property) {\n    if (result.issues.length) {\n        payload.issues.push(...util.prefixIssues(property, result.issues));\n    }\n}\nexport const $ZodCheckProperty = /*@__PURE__*/ core.$constructor(\"$ZodCheckProperty\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.check = (payload) => {\n        const result = def.schema._zod.run({\n            value: payload.value[def.property],\n            issues: [],\n        }, {});\n        if (result instanceof Promise) {\n            return result.then((result) => handleCheckPropertyResult(result, payload, def.property));\n        }\n        handleCheckPropertyResult(result, payload, def.property);\n        return;\n    };\n});\nexport const $ZodCheckProperties = /*@__PURE__*/ core.$constructor(\"$ZodCheckProperties\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    util.hide(inst, Symbol.iterator, function* () {\n        yield inst;\n    });\n    // key and schema snapshotted together: reading one live and the other cached lets a later mutation of the caller's shape object pair a stale key with a missing schema\n    let entries;\n    inst._zod.check = (payload) => {\n        // the base schema already typed the value, so only a nullish one is rejected here: the properties read on a primitive too, matching z.property() on a string's length\n        if (payload.value == null) {\n            payload.issues.push({ expected: \"object\", code: \"invalid_type\", input: payload.value, inst });\n            return undefined;\n        }\n        entries ?? (entries = Reflect.ownKeys(def.shape).map((key) => [key, def.shape[key]]));\n        const input = payload.value;\n        let proms;\n        for (const [key, schema] of entries) {\n            const result = schema._zod.run({ value: input[key], issues: [] }, {});\n            if (result instanceof Promise) {\n                proms ?? (proms = []);\n                proms.push(result.then((result) => handleCheckPropertyResult(result, payload, key)));\n            }\n            else {\n                handleCheckPropertyResult(result, payload, key);\n            }\n        }\n        if (proms)\n            return Promise.all(proms).then(() => undefined);\n        return undefined;\n    };\n});\nexport const $ZodCheckMimeType = /*@__PURE__*/ core.$constructor(\"$ZodCheckMimeType\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const mimeSet = new Set(def.mime);\n    inst._zod.check = (payload) => {\n        if (mimeSet.has(payload.value.type))\n            return;\n        payload.issues.push({\n            code: \"invalid_value\",\n            values: def.mime,\n            input: payload.value.type,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckOverwrite = /*@__PURE__*/ core.$constructor(\"$ZodCheckOverwrite\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.check = (payload) => {\n        payload.value = def.tx(payload.value);\n    };\n});\n","export class Doc {\n    constructor(args = [], closed = {}) {\n        this.content = [];\n        this.indent = 0;\n        this.args = args;\n        this.closed = closed;\n    }\n    // the compiler catches a child's throw and keeps writing into this doc, so the indent has to unwind with it\n    indented(fn) {\n        this.indent += 1;\n        try {\n            fn(this);\n        }\n        finally {\n            this.indent -= 1;\n        }\n    }\n    write(arg) {\n        if (typeof arg === \"function\") {\n            arg(this, { execution: \"sync\" });\n            arg(this, { execution: \"async\" });\n            return;\n        }\n        const content = arg;\n        const lines = content.split(\"\\n\").filter((x) => x);\n        const minIndent = Math.min(...lines.map((x) => x.length - x.trimStart().length));\n        const dedented = lines.map((x) => x.slice(minIndent)).map((x) => \" \".repeat(this.indent * 2) + x);\n        for (const line of dedented) {\n            this.content.push(line);\n        }\n    }\n    compile() {\n        const F = Function;\n        const content = this?.content ?? [``];\n        const factory = new F(...Object.keys(this.closed), `return function (${this.args.join(\", \")}) {\\n${content.join(\"\\n\")}\\n};`);\n        return factory(...Object.values(this.closed));\n    }\n}\n","export const version = {\n    major: 4,\n    minor: 6,\n    patch: 5,\n};\n","import * as checks from \"./checks.js\";\nimport * as core from \"./core.js\";\nimport { Doc } from \"./doc.js\";\nimport { parse, parseAsync } from \"./parse.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nimport { version } from \"./versions.js\";\nexport const $ZodType = /*@__PURE__*/ core.$constructor(\"$ZodType\", (inst, def) => {\n    var _a;\n    inst ?? (inst = {});\n    inst._zod.def = def; // set _def property\n    inst._zod.bag = inst._zod.bag || {}; // initialize _bag object\n    inst._zod.version = version;\n    const defChecks = inst._zod.def.checks;\n    // if inst is itself a checks.$ZodCheck, run it as a check\n    const checks = inst._zod.traits.has(\"$ZodCheck\")\n        ? [inst, ...(defChecks ?? [])]\n        : defChecks?.length\n            ? [...defChecks]\n            : [];\n    for (const ch of checks) {\n        for (const fn of ch._zod.onattach) {\n            fn(inst);\n        }\n    }\n    if (checks.length === 0) {\n        // deferred initializer inst._zod.parse is not yet defined\n        (_a = inst._zod).deferred ?? (_a.deferred = []);\n        inst._zod.deferred?.push(() => {\n            inst._zod.run = inst._zod.parse;\n        });\n    }\n    else {\n        const runChecks = (payload, checks, ctx) => {\n            if (payload.memo)\n                return payload;\n            let isAborted = util.aborted(payload);\n            let asyncResult;\n            for (const ch of checks) {\n                if (ch._zod.def.when) {\n                    if (util.explicitlyAborted(payload))\n                        continue;\n                    const shouldRun = ch._zod.def.when(payload);\n                    if (!shouldRun)\n                        continue;\n                }\n                else if (isAborted) {\n                    continue;\n                }\n                const currLen = payload.issues.length;\n                const _ = ch._zod.check(payload);\n                if (_ instanceof Promise && ctx?.async === false) {\n                    throw new core.$ZodAsyncError();\n                }\n                if (asyncResult || _ instanceof Promise) {\n                    asyncResult = (asyncResult ?? Promise.resolve()).then(async () => {\n                        await _;\n                        const nextLen = payload.issues.length;\n                        if (nextLen === currLen)\n                            return;\n                        util.attachSchema(payload.issues, currLen, inst);\n                        if (!isAborted)\n                            isAborted = util.aborted(payload, currLen);\n                    });\n                }\n                else {\n                    const nextLen = payload.issues.length;\n                    if (nextLen === currLen)\n                        continue;\n                    util.attachSchema(payload.issues, currLen, inst);\n                    if (!isAborted)\n                        isAborted = util.aborted(payload, currLen);\n                }\n            }\n            if (asyncResult) {\n                return asyncResult.then(() => {\n                    return payload;\n                });\n            }\n            return payload;\n        };\n        const handleCanaryResult = (canary, payload, ctx) => {\n            // abort if the canary is aborted\n            if (util.aborted(canary)) {\n                canary.aborted = true;\n                return canary;\n            }\n            // run checks first, then\n            const checkResult = runChecks(payload, checks, ctx);\n            if (checkResult instanceof Promise) {\n                if (ctx.async === false)\n                    throw new core.$ZodAsyncError();\n                return checkResult.then((checkResult) => inst._zod.parse(checkResult, ctx));\n            }\n            return inst._zod.parse(checkResult, ctx);\n        };\n        inst._zod.run = (payload, ctx) => {\n            if (ctx.skipChecks) {\n                return inst._zod.parse(payload, ctx);\n            }\n            if (ctx.direction === \"backward\") {\n                // run canary initial pass (no checks)\n                const canary = inst._zod.parse({ value: payload.value, issues: [] }, { ...ctx, skipChecks: true });\n                if (canary instanceof Promise) {\n                    return canary.then((canary) => {\n                        return handleCanaryResult(canary, payload, ctx);\n                    });\n                }\n                return handleCanaryResult(canary, payload, ctx);\n            }\n            // forward\n            const result = inst._zod.parse(payload, ctx);\n            if (result instanceof Promise) {\n                if (ctx.async === false)\n                    throw new core.$ZodAsyncError();\n                return result.then((result) => runChecks(result, checks, ctx));\n            }\n            return runChecks(result, checks, ctx);\n        };\n    }\n}, {\n    // Wrappers extend this by installing a richer factory over it; reading it eagerly would defeat the laziness.\n    get \"~standard\"() {\n        return util.hide(this, \"~standard\", standardProps(this));\n    },\n    set \"~standard\"(value) {\n        util.own(this, \"~standard\", value);\n    },\n});\n/** The Standard Schema surface for `inst`. Shared so wrappers can extend it without forcing it. */\n// a Standard Schema result only reports issues, so a failure finalizes them straight off the raw payload: no ZodError, and no lazy result to read through\nconst toStandardResult = (r, ctx) => r.issues.length ? { issues: r.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())) } : { value: r.value };\nasync function validateAsync(inst, value) {\n    const ctx = { async: true };\n    return toStandardResult((await inst._zod.run({ value, issues: [] }, ctx)), ctx);\n}\nexport function standardProps(inst) {\n    return {\n        validate: (value) => {\n            const ctx = { async: false };\n            try {\n                const r = inst._zod.run({ value, issues: [] }, ctx);\n                if (!(r instanceof Promise))\n                    return toStandardResult(r, ctx);\n            }\n            catch (_) { }\n            // async function so a synchronously throwing check rejects instead of escaping validate\n            return validateAsync(inst, value);\n        },\n        vendor: \"zod\",\n        version: 1,\n    };\n}\nexport { clone } from \"./util.js\";\nexport const $ZodString = /*@__PURE__*/ core.$constructor(\"$ZodString\", (inst, def) => {\n    $ZodType.init(inst, def);\n    // a format's own pattern, else unbounded; a template literal derives the check-aware form itself\n    inst._zod.pattern = def.pattern ?? regexes.anyString;\n    inst._zod.parse = (payload, _) => {\n        if (def.coerce)\n            try {\n                payload.value = String(payload.value);\n            }\n            catch (_) { }\n        if (typeof payload.value === \"string\")\n            return payload;\n        payload.issues.push({\n            expected: \"string\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodStringFormat\", (inst, def) => {\n    // check initialization must come first\n    checks.$ZodCheckStringFormat.init(inst, def);\n    $ZodString.init(inst, def);\n});\nexport const $ZodGUID = /*@__PURE__*/ core.$constructor(\"$ZodGUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.guid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodUUID = /*@__PURE__*/ core.$constructor(\"$ZodUUID\", (inst, def) => {\n    if (def.version) {\n        const versionMap = {\n            v1: 1,\n            v2: 2,\n            v3: 3,\n            v4: 4,\n            v5: 5,\n            v6: 6,\n            v7: 7,\n            v8: 8,\n        };\n        const v = versionMap[def.version];\n        if (v === undefined)\n            throw new Error(`Invalid UUID version: \"${def.version}\"`);\n        def.pattern ?? (def.pattern = regexes.uuid(v));\n    }\n    else\n        def.pattern ?? (def.pattern = regexes.uuid());\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodEmail = /*@__PURE__*/ core.$constructor(\"$ZodEmail\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.email);\n    $ZodStringFormat.init(inst, def);\n});\n/** The `://` guard rejected the input before the URL constructor saw it. */\nexport const URL_BAD_FORMAT = 1;\n/** The URL parser rejected the input. */\nexport const URL_UNPARSEABLE = 2;\nexport function canParseURL(input) {\n    try {\n        if (typeof URL !== \"undefined\" && typeof URL.canParse === \"function\")\n            return URL.canParse(input);\n        new URL(input);\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nexport function validateURL(trimmed, def) {\n    if (!(\"normalize\" in def) && !(\"hostname\" in def) && !(\"protocol\" in def)) {\n        return canParseURL(trimmed) || URL_UNPARSEABLE;\n    }\n    return parseURLObject(trimmed, def);\n}\n/** Parses a URL while preserving the non-normalizing HTTP guard. */\nexport function parseURLObject(trimmed, def) {\n    // When normalize is off, require :// for http/https URLs. This prevents strings like \"http:example.com\" or \"https:/path\" from being silently accepted\n    if (!def.normalize && def.protocol?.source === regexes.httpProtocol.source && !/^https?:\\/\\//i.test(trimmed)) {\n        return URL_BAD_FORMAT;\n    }\n    try {\n        if (typeof URL !== \"undefined\") {\n            const URLStatic = URL;\n            if (typeof URLStatic.parse === \"function\")\n                return URLStatic.parse(trimmed) ?? URL_UNPARSEABLE;\n        }\n        // @ts-ignore\n        return new URL(trimmed);\n    }\n    catch {\n        return URL_UNPARSEABLE;\n    }\n}\nconst asciiTabOrNewline = /[\\t\\n\\r]/g;\n/** The URL parser deletes every ASCII tab, LF and CR from its input before it parses, so `new URL(\"https://exa\\nmple.com\")` reports on `example.com`. Applying the same deletion to the returned value closes the half of that divergence which can move the host; the parser's other rewrite, stripping C0 controls at the edges, cannot. */\nexport function stripTabAndNewline(value) {\n    return value.replace(asciiTabOrNewline, \"\");\n}\nexport function urlHostnameOk(url, hostname) {\n    hostname.lastIndex = 0;\n    return hostname.test(url.hostname);\n}\nexport function urlProtocolOk(url, protocol) {\n    protocol.lastIndex = 0;\n    return protocol.test(url.protocol.endsWith(\":\") ? url.protocol.slice(0, -1) : url.protocol);\n}\nexport const $ZodURL = /*@__PURE__*/ core.$constructor(\"$ZodURL\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        try {\n            // Trim whitespace from input\n            const trimmed = payload.value.trim();\n            const url = validateURL(trimmed, def);\n            if (url === URL_BAD_FORMAT) {\n                payload.issues.push({\n                    code: \"invalid_format\",\n                    format: \"url\",\n                    note: \"Invalid URL format\",\n                    input: payload.value,\n                    inst,\n                    continue: !def.abort,\n                });\n                return;\n            }\n            if (url === URL_UNPARSEABLE) {\n                payload.issues.push({\n                    code: \"invalid_format\",\n                    format: \"url\",\n                    input: payload.value,\n                    inst,\n                    continue: !def.abort,\n                });\n                return;\n            }\n            if (url === true) {\n                payload.value = stripTabAndNewline(trimmed);\n                return;\n            }\n            if (def.hostname && !urlHostnameOk(url, def.hostname)) {\n                payload.issues.push({\n                    code: \"invalid_format\",\n                    format: \"url\",\n                    note: \"Invalid hostname\",\n                    pattern: def.hostname.source,\n                    input: payload.value,\n                    inst,\n                    continue: !def.abort,\n                });\n            }\n            if (def.protocol && !urlProtocolOk(url, def.protocol)) {\n                payload.issues.push({\n                    code: \"invalid_format\",\n                    format: \"url\",\n                    note: \"Invalid protocol\",\n                    pattern: def.protocol.source,\n                    input: payload.value,\n                    inst,\n                    continue: !def.abort,\n                });\n            }\n            // Set the output value based on normalize flag\n            payload.value = def.normalize ? url.href : stripTabAndNewline(trimmed);\n            return;\n        }\n        catch (_) {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"url\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodEmoji = /*@__PURE__*/ core.$constructor(\"$ZodEmoji\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.emoji());\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodNanoID = /*@__PURE__*/ core.$constructor(\"$ZodNanoID\", (inst, def) => {\n    if (def.length !== undefined && (!Number.isInteger(def.length) || def.length < 1))\n        throw new Error(`Invalid nanoid length: ${def.length}`);\n    def.pattern ?? (def.pattern = def.length === undefined ? regexes.nanoid : regexes.nanoidOfLength(def.length));\n    $ZodStringFormat.init(inst, def);\n});\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link $ZodCUID2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nexport const $ZodCUID = /*@__PURE__*/ core.$constructor(\"$ZodCUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cuid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID2 = /*@__PURE__*/ core.$constructor(\"$ZodCUID2\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cuid2);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodULID = /*@__PURE__*/ core.$constructor(\"$ZodULID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ulid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodXID = /*@__PURE__*/ core.$constructor(\"$ZodXID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.xid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodKSUID = /*@__PURE__*/ core.$constructor(\"$ZodKSUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ksuid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODateTime = /*@__PURE__*/ core.$constructor(\"$ZodISODateTime\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.datetime(def));\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODate = /*@__PURE__*/ core.$constructor(\"$ZodISODate\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.date);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISOTime = /*@__PURE__*/ core.$constructor(\"$ZodISOTime\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.time(def));\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODuration = /*@__PURE__*/ core.$constructor(\"$ZodISODuration\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.duration);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodIPv4 = /*@__PURE__*/ core.$constructor(\"$ZodIPv4\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ipv4);\n    $ZodStringFormat.init(inst, def);\n});\n/** An IPv6 address is written with hex digits, colons and dots, and nothing else. The guard is what makes the check below an IPv6 check: `new URL(\"http://[...]\")` parses an authority, not an address, so `@` and `\\` re-delimit it and `\"::@1\\\\\"` validates against the host `0.0.0.1`. The URL parser also deletes ASCII tab, LF and CR rather than failing, which is how `\"::1\\n\"` validated as `::1`. */\nconst ipv6Alphabet = /^[0-9a-fA-F:.]+$/;\nexport function isValidIPv6(value) {\n    if (!ipv6Alphabet.test(value))\n        return false;\n    return canParseURL(`http://[${value}]`);\n}\nexport const $ZodIPv6 = /*@__PURE__*/ core.$constructor(\"$ZodIPv6\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ipv6);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (!isValidIPv6(payload.value)) {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"ipv6\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodMAC = /*@__PURE__*/ core.$constructor(\"$ZodMAC\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.mac(def.delimiter));\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv4\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cidrv4);\n    $ZodStringFormat.init(inst, def);\n});\nexport function isValidCIDRv6(value) {\n    const parts = value.split(\"/\");\n    if (parts.length !== 2)\n        return false;\n    const [address, prefix] = parts;\n    if (!prefix)\n        return false;\n    const prefixNum = Number(prefix);\n    if (`${prefixNum}` !== prefix)\n        return false;\n    if (prefixNum < 0 || prefixNum > 128)\n        return false;\n    return isValidIPv6(address);\n}\nexport const $ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv6\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cidrv6); // not used for validation\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (!isValidCIDRv6(payload.value)) {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"cidrv6\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\n//////////////////////////////   ZodBase64   //////////////////////////////\nexport function isValidBase64(data) {\n    if (data === \"\")\n        return true;\n    // atob ignores whitespace, so reject it up front.\n    if (/\\s/.test(data))\n        return false;\n    if (data.length % 4 !== 0)\n        return false;\n    try {\n        // @ts-ignore\n        atob(data);\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\n// lax on purpose: the quantified regexes.base64 overflows the regex stack on multi-MB input and its leading ^$| alternation leaks through template-literal composition; isValidBase64 enforces length and padding\nexport const base64Charset = /^[0-9a-zA-Z+/]*={0,2}$/;\nexport const $ZodBase64 = /*@__PURE__*/ core.$constructor(\"$ZodBase64\", (inst, def) => {\n    def.pattern ?? (def.pattern = base64Charset);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (isValidBase64(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"base64\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\n//////////////////////////////   ZodBase64URL   //////////////////////////////\n// lax on purpose: the quantified regexes.base64url overflows the regex stack on multi-MB input; isValidBase64 enforces length on the padded string\nexport const base64urlCharset = /^[A-Za-z0-9_-]*$/;\nexport function isValidBase64URL(data) {\n    if (!base64urlCharset.test(data))\n        return false;\n    const base64 = data.replace(/[-_]/g, (c) => (c === \"-\" ? \"+\" : \"/\"));\n    const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\");\n    return isValidBase64(padded);\n}\nexport const $ZodBase64URL = /*@__PURE__*/ core.$constructor(\"$ZodBase64URL\", (inst, def) => {\n    def.pattern ?? (def.pattern = base64urlCharset);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (isValidBase64URL(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"base64url\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodE164 = /*@__PURE__*/ core.$constructor(\"$ZodE164\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.e164);\n    $ZodStringFormat.init(inst, def);\n});\n//////////////////////////////   ZodCreditCard   //////////////////////////////\nconst CC_SANITIZE = /[- ]/g;\n/** Luhn checksum on a digit-only string. Adapted from valibot (MIT). */\nfunction isLuhnAlgo(digits) {\n    let length = digits.length;\n    let bit = 1;\n    let sum = 0;\n    while (length) {\n        const value = digits.charCodeAt(--length) - 48;\n        bit ^= 1;\n        sum += bit ? [0, 2, 4, 6, 8, 1, 3, 5, 7, 9][value] : value;\n    }\n    return sum % 10 === 0;\n}\nexport function isValidCreditCard(input) {\n    if (!regexes.creditCard.test(input))\n        return false;\n    return isLuhnAlgo(input.replace(CC_SANITIZE, \"\"));\n}\nexport const $ZodCreditCard = /*@__PURE__*/ core.$constructor(\"$ZodCreditCard\", (inst, def) => {\n    // Shape only — the Luhn check below is not expressible as a pattern, so consumers of `pattern` (JSON Schema, template literals) get the length and separator rules alone.\n    def.pattern ?? (def.pattern = regexes.creditCard);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (isValidCreditCard(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"credit_card\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\n//////////////////////////////   ZodIBAN   //////////////////////////////\n// iso 7064 mod 97-10 checksum without BigInt\nfunction isIso7064Mod97(iban) {\n    let remainder = 0;\n    const len = iban.length;\n    for (let i = 4; i < len; i++) {\n        const code = iban.charCodeAt(i);\n        remainder = (code >= 65 ? remainder * 100 + (code - 55) : remainder * 10 + (code - 48)) % 97;\n    }\n    for (let i = 0; i < 4; i++) {\n        const code = iban.charCodeAt(i);\n        remainder = (code >= 65 ? remainder * 100 + (code - 55) : remainder * 10 + (code - 48)) % 97;\n    }\n    return remainder === 1;\n}\nexport function isValidIBAN(input) {\n    if (!regexes.iban.test(input))\n        return false;\n    return isIso7064Mod97(input);\n}\nexport const $ZodIBAN = /*@__PURE__*/ core.$constructor(\"$ZodIBAN\", (inst, def) => {\n    // shape only — checksum is not expressible as a pattern\n    def.pattern ?? (def.pattern = regexes.iban);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (isValidIBAN(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"iban\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\n//////////////////////////////   ZodJWT   //////////////////////////////\nexport function isValidJWT(token, algorithm = null) {\n    try {\n        const tokensParts = token.split(\".\");\n        if (tokensParts.length !== 3)\n            return false;\n        const [header] = tokensParts;\n        if (!header)\n            return false;\n        // @ts-ignore\n        const parsedHeader = JSON.parse(atob(header));\n        if (\"typ\" in parsedHeader && parsedHeader?.typ !== \"JWT\")\n            return false;\n        if (!parsedHeader.alg)\n            return false;\n        if (algorithm && (!(\"alg\" in parsedHeader) || parsedHeader.alg !== algorithm))\n            return false;\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nexport const $ZodJWT = /*@__PURE__*/ core.$constructor(\"$ZodJWT\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (isValidJWT(payload.value, def.alg))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"jwt\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCustomStringFormat\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (def.fn(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: def.format,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodNumber = /*@__PURE__*/ core.$constructor(\"$ZodNumber\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.number;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = Number(payload.value);\n            }\n            catch (_) { }\n        const input = payload.value;\n        if (typeof input === \"number\" && !Number.isNaN(input) && Number.isFinite(input)) {\n            return payload;\n        }\n        const received = typeof input === \"number\"\n            ? Number.isNaN(input)\n                ? \"NaN\"\n                : !Number.isFinite(input)\n                    ? String(input)\n                    : undefined\n            : undefined;\n        payload.issues.push({\n            expected: \"number\",\n            code: \"invalid_type\",\n            input,\n            inst,\n            ...(received ? { received } : {}),\n        });\n        return payload;\n    };\n});\nexport const $ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodNumberFormat\", (inst, def) => {\n    checks.$ZodCheckNumberFormat.init(inst, def);\n    $ZodNumber.init(inst, def); // no format checks\n});\nexport const $ZodBoolean = /*@__PURE__*/ core.$constructor(\"$ZodBoolean\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.boolean;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = Boolean(payload.value);\n            }\n            catch (_) { }\n        const input = payload.value;\n        if (typeof input === \"boolean\")\n            return payload;\n        payload.issues.push({\n            expected: \"boolean\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodBigInt = /*@__PURE__*/ core.$constructor(\"$ZodBigInt\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.bigint;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = BigInt(payload.value);\n            }\n            catch (_) { }\n        if (typeof payload.value === \"bigint\")\n            return payload;\n        payload.issues.push({\n            expected: \"bigint\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodBigIntFormat\", (inst, def) => {\n    checks.$ZodCheckBigIntFormat.init(inst, def);\n    $ZodBigInt.init(inst, def); // no format checks\n});\nexport const $ZodSymbol = /*@__PURE__*/ core.$constructor(\"$ZodSymbol\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"symbol\")\n            return payload;\n        payload.issues.push({\n            expected: \"symbol\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodUndefined = /*@__PURE__*/ core.$constructor(\"$ZodUndefined\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.undefined;\n    inst._zod.values = new Set([undefined]);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"undefined\")\n            return payload;\n        payload.issues.push({\n            expected: \"undefined\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodNull = /*@__PURE__*/ core.$constructor(\"$ZodNull\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.null;\n    inst._zod.values = new Set([null]);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (input === null)\n            return payload;\n        payload.issues.push({\n            expected: \"null\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodAny = /*@__PURE__*/ core.$constructor(\"$ZodAny\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload) => payload;\n});\nexport const $ZodUnknown = /*@__PURE__*/ core.$constructor(\"$ZodUnknown\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload) => payload;\n});\nexport const $ZodNever = /*@__PURE__*/ core.$constructor(\"$ZodNever\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        payload.issues.push({\n            expected: \"never\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodVoid = /*@__PURE__*/ core.$constructor(\"$ZodVoid\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"undefined\")\n            return payload;\n        payload.issues.push({\n            expected: \"void\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodDate = /*@__PURE__*/ core.$constructor(\"$ZodDate\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce) {\n            try {\n                payload.value = new Date(payload.value);\n            }\n            catch (_err) { }\n        }\n        const input = payload.value;\n        const isDate = input instanceof Date;\n        const isValidDate = isDate && !Number.isNaN(input.getTime());\n        if (isValidDate)\n            return payload;\n        payload.issues.push({\n            expected: \"date\",\n            code: \"invalid_type\",\n            input,\n            ...(isDate ? { received: \"Invalid Date\" } : {}),\n            inst,\n        });\n        return payload;\n    };\n});\nfunction handleArrayResult(result, final, index) {\n    if (result.issues.length) {\n        final.issues.push(...util.prefixIssues(index, result.issues));\n    }\n    final.value[index] = result.value;\n}\nexport const $ZodArray = /*@__PURE__*/ core.$constructor(\"$ZodArray\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const memo = core.globalConfig.memoizer;\n    memo?.attach(inst);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!Array.isArray(input)) {\n            payload.issues.push({\n                expected: \"array\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        payload.value = memo ? memo.alloc(inst, payload, Array(input.length), ctx) : Array(input.length);\n        const proms = [];\n        const abortEarly = ctx?.abortEarly;\n        for (let i = 0; i < input.length; i++) {\n            const item = input[i];\n            const result = def.element._zod.run({\n                value: item,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleArrayResult(result, payload, i)));\n            }\n            else {\n                handleArrayResult(result, payload, i);\n                // the element's payload is authoritative here, since handleArrayResult forwards every issue; an object's is not, because it drops a failed absent optional\n                if (abortEarly && result.issues.length !== 0 && util.aborted(result))\n                    break;\n            }\n        }\n        if (proms.length) {\n            return Promise.all(proms).then(() => payload);\n        }\n        return payload; //handleArrayResultsAsync(parseResults, final);\n    };\n});\nfunction handlePropertyResult(result, final, key, input, optin, optout) {\n    const isPresent = key in input;\n    const isOptionalOut = optout === \"optional\";\n    // The middle rung means \"absence permitted, nothing supplied in its place\", so an absent key contributes nothing — whatever the schema made of `undefined` is invented, not substituted. Only `optional` reaches this with a value: `defaulted` substitutes, and a schema that isn't optional-out has to keep the key.\n    if (!isPresent && isOptionalOut && optin === \"optional\") {\n        return;\n    }\n    if (result.issues.length) {\n        // For optional-in/out schemas, ignore errors on absent keys.\n        if (optin !== undefined && isOptionalOut && !isPresent) {\n            return;\n        }\n        final.issues.push(...util.prefixIssues(key, result.issues));\n    }\n    if (!isPresent && optin === undefined) {\n        if (!result.issues.length) {\n            final.issues.push({\n                code: \"invalid_type\",\n                expected: \"nonoptional\",\n                input: undefined,\n                path: [key],\n            });\n        }\n        return;\n    }\n    if (result.value === undefined) {\n        if (isPresent || (optin === \"defaulted\" && !isOptionalOut)) {\n            final.value[key] = undefined;\n        }\n    }\n    else {\n        final.value[key] = result.value;\n    }\n}\n// one shared instance; a fresh [] per schema cost 56 bytes retained\nconst NO_SYMBOL_KEYS = [];\nfunction normalizeDef(def) {\n    const keys = Object.keys(def.shape);\n    const ownSymbols = Object.getOwnPropertySymbols(def.shape);\n    const symbolKeys = ownSymbols.length ? ownSymbols : NO_SYMBOL_KEYS;\n    // aliases `keys` when there are no symbols, so a string-only shape keeps one array\n    const allKeys = symbolKeys.length ? [...keys, ...symbolKeys] : keys;\n    for (const k of allKeys) {\n        if (!def.shape?.[k]?._zod?.traits?.has(\"$ZodType\")) {\n            throw new Error(`Invalid element at key \"${String(k)}\": expected a Zod schema`);\n        }\n    }\n    const okeys = util.optionalKeys(def.shape);\n    return {\n        ...def,\n        allKeys,\n        symbolKeys,\n        // string-only: handleCatchall matches it against `for...in`, which never yields a symbol\n        keySet: new Set(keys),\n        numKeys: keys.length,\n        optionalKeys: new Set(okeys),\n    };\n}\nfunction handleCatchall(proms, input, payload, ctx, def, inst, abortEarly) {\n    const unrecognized = [];\n    const keySet = def.keySet;\n    const _catchall = def.catchall._zod;\n    const t = _catchall.def.type;\n    const optin = _catchall.optin;\n    const optout = _catchall.optout;\n    // starts at 0, not the current length: the shape phase already ran and may have aborted\n    let seen = 0;\n    for (const key in input) {\n        if (abortEarly && payload.issues.length !== seen) {\n            if (util.aborted(payload, seen))\n                break;\n            seen = payload.issues.length;\n        }\n        // Must precede the __proto__ branch: a declared key is not unrecognized, even though the shape loop deliberately strips __proto__ from the parsed output.\n        if (keySet.has(key))\n            continue;\n        // Don't copy an undeclared __proto__ into the result; assignment to a plain {} would replace the result prototype. But in strict mode it is still an unknown key, so report it before skipping.\n        if (key === \"__proto__\") {\n            if (t === \"never\")\n                unrecognized.push(key);\n            continue;\n        }\n        if (t === \"never\") {\n            unrecognized.push(key);\n            continue;\n        }\n        const r = _catchall.run({ value: input[key], issues: [] }, ctx);\n        if (r instanceof Promise) {\n            proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, optin, optout)));\n        }\n        else {\n            handlePropertyResult(r, payload, key, input, optin, optout);\n        }\n    }\n    if (unrecognized.length) {\n        payload.issues.push({\n            code: \"unrecognized_keys\",\n            keys: unrecognized,\n            input,\n            inst,\n            // Describes the shape of the input, not the validity of the parsed value, so it never aborts. The parse still fails; the schema's own checks just get to run first, and an enclosing intersection can reconcile the key against a sibling operand.\n            continue: true,\n        });\n    }\n    if (!proms.length)\n        return payload;\n    return Promise.all(proms).then(() => {\n        return payload;\n    });\n}\nexport const $ZodObject = /*@__PURE__*/ core.$constructor(\"$ZodObject\", (inst, def) => {\n    // requires cast because technically $ZodObject doesn't extend\n    $ZodType.init(inst, def);\n    const desc = Object.getOwnPropertyDescriptor(def, \"shape\");\n    // a cloned def carries its source's accessor, which knows the shape it answers from; adopting that keeps the clone's keys readable without running it\n    const sh = desc?.get ? desc.get.raw : (def.shape ?? {});\n    if (sh) {\n        // Freezes the shape on first read, so its getters resolve once and every later read sees the same schemas.\n        const get = () => {\n            const newSh = { ...sh };\n            Object.defineProperty(def, \"shape\", { value: newSh });\n            get.raw = newSh;\n            return newSh;\n        };\n        get.raw = sh;\n        Object.defineProperty(def, \"shape\", { get });\n    }\n    const _normalized = util.cached(() => normalizeDef(def));\n    util.defineLazyInternal(inst, \"propValues\", (zod) => {\n        const shape = zod.def.shape;\n        const propValues = {};\n        for (const key in shape) {\n            const field = shape[key]._zod;\n            if (field.values) {\n                if (!Object.prototype.hasOwnProperty.call(propValues, key)) {\n                    util.assignProp(propValues, key, new Set());\n                }\n                for (const v of field.values)\n                    propValues[key].add(v);\n                // An omittable slot reads back as undefined at a discriminator lookup, so it has to claim undefined: two options that can both omit the key are not discriminable on it.\n                if (field.optin !== undefined)\n                    propValues[key].add(undefined);\n            }\n        }\n        return propValues;\n    });\n    const isObject = util.isObject;\n    const catchall = def.catchall;\n    let value;\n    const memo = core.globalConfig.memoizer;\n    memo?.attach(inst);\n    inst._zod.parse = (payload, ctx) => {\n        value ?? (value = _normalized.value);\n        const input = payload.value;\n        if (!isObject(input)) {\n            payload.issues.push({\n                expected: \"object\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        payload.value = memo ? memo.alloc(inst, payload, {}, ctx) : {};\n        const proms = [];\n        const shape = value.shape;\n        const abortEarly = ctx?.abortEarly;\n        let seen = payload.issues.length;\n        for (const key of value.allKeys) {\n            if (abortEarly && payload.issues.length !== seen) {\n                if (util.aborted(payload, seen))\n                    break;\n                seen = payload.issues.length;\n            }\n            if (key === \"__proto__\")\n                continue;\n            const el = shape[key];\n            const optin = el._zod.optin;\n            const optout = el._zod.optout;\n            const r = el._zod.run({ value: input[key], issues: [] }, ctx);\n            if (r instanceof Promise) {\n                proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, optin, optout)));\n            }\n            else {\n                handlePropertyResult(r, payload, key, input, optin, optout);\n            }\n        }\n        if (!catchall) {\n            return proms.length ? Promise.all(proms).then(() => payload) : payload;\n        }\n        return handleCatchall(proms, input, payload, ctx, _normalized.value, inst, abortEarly === true);\n    };\n});\nexport const $ZodObjectJIT = /*@__PURE__*/ core.$constructor(\"$ZodObjectJIT\", (inst, def) => {\n    // requires cast because technically $ZodObject doesn't extend\n    $ZodObject.init(inst, def);\n    const superParse = inst._zod.parse;\n    const _normalized = util.cached(() => normalizeDef(def));\n    const memo = core.globalConfig.memoizer;\n    const generateFastpass = (shape) => {\n        const normalized = _normalized.value;\n        const syms = normalized.symbolKeys;\n        // a symbol has no source literal, so it is read as `syms[i]` off the closed-over scope\n        const doc = new Doc([\"payload\", \"ctx\"], { shape, inst, memo, syms });\n        const parseStr = (k) => `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`;\n        // prefixes in place, like util.prefixIssues. newResult must land before the early return: a catchall runs after this and would otherwise write onto the caller's input\n        const prefixStr = (id, k) => `\n          let ${id}_ab = false;\n          for (let i = 0; i < ${id}.issues.length; i++) {\n            const iss = ${id}.issues[i];\n            iss.path = iss.path ? [${k}, ...iss.path] : [${k}];\n            payload.issues.push(iss);\n            if (iss.continue !== true) ${id}_ab = true;\n          }\n          if (${id}_ab && ctx && ctx.abortEarly) {\n            payload.value = newResult;\n            return payload;\n          }`;\n        doc.write(`const input = payload.value;`);\n        const ids = Object.create(null);\n        let counter = 0;\n        for (const key of normalized.allKeys) {\n            ids[key] = `key_${counter++}`;\n        }\n        // A: preserve key order {\n        doc.write(memo ? `const newResult = memo.alloc(inst, payload, {}, ctx);` : `const newResult = {};`);\n        for (const key of normalized.allKeys) {\n            if (key === \"__proto__\")\n                continue;\n            const id = ids[key];\n            const k = typeof key === \"symbol\" ? `syms[${syms.indexOf(key)}]` : util.esc(key);\n            const isPresent = `${k} in input`;\n            const schema = shape[key];\n            const optin = schema?._zod?.optin;\n            const isOptionalIn = optin !== undefined;\n            const isOptionalOut = schema?._zod?.optout === \"optional\";\n            doc.write(`const ${id} = ${parseStr(k)};`);\n            if (isOptionalIn && isOptionalOut) {\n                // For optional-in/out schemas, ignore errors on absent keys — and, like the interpreted path, drop the value produced alongside them. The middle rung goes further: it permits absence without supplying anything in its place, so an absent key contributes nothing at all.\n                const assign = optin === \"optional\" ? `${id}_present` : `${id}.value !== undefined || ${id}_present`;\n                doc.write(`\n        const ${id}_present = ${isPresent};\n        if (!${id}.issues.length || ${id}_present) {\n          if (${id}.issues.length) {${prefixStr(id, k)}\n          }\n\n          if (${assign}) {\n            newResult[${k}] = ${id}.value;\n          }\n        }\n\n      `);\n            }\n            else if (!isOptionalIn) {\n                doc.write(`\n        const ${id}_present = ${isPresent};\n        if (${id}.issues.length) {${prefixStr(id, k)}\n        }\n        if (!${id}_present && !${id}.issues.length) {\n          payload.issues.push({\n            code: \"invalid_type\",\n            expected: \"nonoptional\",\n            input: undefined,\n            path: [${k}]\n          });\n          if (ctx && ctx.abortEarly) {\n            payload.value = newResult;\n            return payload;\n          }\n        }\n\n        if (${id}_present) {\n          newResult[${k}] = ${id}.value;\n        }\n\n      `);\n            }\n            else {\n                doc.write(`\n        if (${id}.issues.length) {${prefixStr(id, k)}\n        }\n      `);\n                if (optin === \"defaulted\") {\n                    doc.write(`newResult[${k}] = ${id}.value;`);\n                }\n                else {\n                    doc.write(`\n        if (${id}.value !== undefined || ${isPresent}) {\n          newResult[${k}] = ${id}.value;\n        }\n      `);\n                }\n            }\n        }\n        doc.write(`payload.value = newResult;`);\n        doc.write(`return payload;`);\n        // closing `shape` in is what pays: turbofan specializes the parser against that one shape object, so every `shape[k]._zod.run` folds to a known callee. as a parameter it stays a generic load and measures 13% slower even with the forwarding frame gone\n        return doc.compile();\n    };\n    let fastpass;\n    const isObject = util.isObject;\n    const jit = !core.globalConfig.jitless;\n    const allowsEval = util.allowsEval;\n    const fastEnabled = jit && allowsEval.value; // && !def.catchall;\n    const catchall = def.catchall;\n    let value;\n    inst._zod.parse = (payload, ctx) => {\n        value ?? (value = _normalized.value);\n        const input = payload.value;\n        if (!isObject(input)) {\n            payload.issues.push({\n                expected: \"object\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        if (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) {\n            // always synchronous\n            if (!fastpass)\n                fastpass = generateFastpass(def.shape);\n            payload = fastpass(payload, ctx);\n            if (!catchall)\n                return payload;\n            return handleCatchall([], input, payload, ctx, value, inst, ctx?.abortEarly === true);\n        }\n        return superParse(payload, ctx);\n    };\n});\nfunction handleUnionResults(results, final, inst, ctx) {\n    for (const result of results) {\n        if (result.issues.length === 0) {\n            final.value = result.value;\n            return final;\n        }\n    }\n    const nonaborted = results.filter((r) => !util.aborted(r));\n    if (nonaborted.length === 1) {\n        final.value = nonaborted[0].value;\n        return nonaborted[0];\n    }\n    final.issues.push({\n        code: \"invalid_union\",\n        input: final.value,\n        inst,\n        errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n    });\n    return final;\n}\nexport const $ZodUnion = /*@__PURE__*/ core.$constructor(\"$ZodUnion\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazyInternal(inst, \"optin\", (zod) => zod.def.options.some((o) => o._zod.optin === \"defaulted\")\n        ? \"defaulted\"\n        : zod.def.options.some((o) => o._zod.optin !== undefined)\n            ? \"optional\"\n            : undefined);\n    util.defineLazyInternal(inst, \"optout\", (zod) => zod.def.options.some((o) => o._zod.optout === \"optional\") ? \"optional\" : undefined);\n    util.defineLazyInternal(inst, \"values\", (zod) => {\n        if (zod.def.options.every((o) => o._zod.values)) {\n            return new Set(zod.def.options.flatMap((option) => Array.from(option._zod.values)));\n        }\n        return undefined;\n    });\n    util.defineLazyInternal(inst, \"pattern\", (zod) => {\n        if (zod.def.options.every((o) => o._zod.pattern)) {\n            const patterns = zod.def.options.map((o) => o._zod.pattern);\n            return new RegExp(`^(${patterns.map((p) => util.cleanRegex(p.source)).join(\"|\")})$`);\n        }\n        return undefined;\n    });\n    const first = def.options.length === 1 ? def.options[0]._zod.run : null;\n    inst._zod.parse = (payload, ctx) => {\n        if (first) {\n            return first(payload, ctx);\n        }\n        let async = false;\n        const results = [];\n        for (const option of def.options) {\n            const result = option._zod.run({\n                value: payload.value,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                results.push(result);\n                async = true;\n            }\n            else {\n                if (result.issues.length === 0)\n                    return result;\n                results.push(result);\n            }\n        }\n        if (!async)\n            return handleUnionResults(results, payload, inst, ctx);\n        return Promise.all(results).then((results) => {\n            return handleUnionResults(results, payload, inst, ctx);\n        });\n    };\n});\nfunction handleExclusiveUnionResults(results, final, inst, ctx) {\n    const matches = [];\n    for (let i = 0; i < results.length; i++) {\n        if (results[i].issues.length === 0)\n            matches.push(i);\n    }\n    if (matches.length === 1) {\n        final.value = results[matches[0]].value;\n        return final;\n    }\n    if (matches.length === 0) {\n        // No matches - same as regular union\n        final.issues.push({\n            code: \"invalid_union\",\n            input: final.value,\n            inst,\n            errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n        });\n    }\n    else {\n        // Multiple matches - exclusive union failure\n        final.issues.push({\n            code: \"invalid_union\",\n            input: final.value,\n            inst,\n            errors: [],\n            inclusive: false,\n            matches,\n        });\n    }\n    return final;\n}\nexport const $ZodXor = /*@__PURE__*/ core.$constructor(\"$ZodXor\", (inst, def) => {\n    $ZodUnion.init(inst, def);\n    def.inclusive = false;\n    const first = def.options.length === 1 ? def.options[0]._zod.run : null;\n    inst._zod.parse = (payload, ctx) => {\n        if (first) {\n            return first(payload, ctx);\n        }\n        let async = false;\n        const results = [];\n        for (const option of def.options) {\n            const result = option._zod.run({\n                value: payload.value,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                results.push(result);\n                async = true;\n            }\n            else {\n                results.push(result);\n            }\n        }\n        if (!async)\n            return handleExclusiveUnionResults(results, payload, inst, ctx);\n        return Promise.all(results).then((results) => {\n            return handleExclusiveUnionResults(results, payload, inst, ctx);\n        });\n    };\n});\n/** Returns the option whose discriminator claims `value`, or throws if ambiguous. */\nexport function getDiscriminatedOption(union, value) {\n    const internals = union._zod;\n    let map = internals.bag.optionsMap;\n    if (!map) {\n        map = discriminatorMap(internals.def);\n        internals.bag.optionsMap = map;\n    }\n    const option = map.get(value);\n    if (option === null)\n        throw new Error(`Ambiguous discriminator value \"${String(value)}\"`);\n    return option;\n}\nfunction discriminatorMap(def) {\n    const map = new Map();\n    for (const option of def.options) {\n        const values = option._zod.propValues?.[def.discriminator];\n        if (!values || values.size === 0)\n            throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(option)}\"`);\n        for (const value of values) {\n            if (map.has(value)) {\n                if (value !== undefined)\n                    throw new Error(`Duplicate discriminator value \"${String(value)}\"`);\n                // keep the collision marked so a later member cannot reclaim it\n                map.set(value, null);\n            }\n            else {\n                map.set(value, option);\n            }\n        }\n    }\n    return map;\n}\nexport const $ZodDiscriminatedUnion = \n/*@__PURE__*/\ncore.$constructor(\"$ZodDiscriminatedUnion\", (inst, def) => {\n    def.inclusive = false;\n    $ZodUnion.init(inst, def);\n    const _super = inst._zod.parse;\n    util.defineLazyInternal(inst, \"propValues\", (zod) => {\n        const propValues = {};\n        let undefinedCount = 0;\n        for (const option of zod.def.options) {\n            const pv = option._zod.propValues;\n            if (!pv || Object.keys(pv).length === 0)\n                throw new Error(`Invalid discriminated union option at index \"${zod.def.options.indexOf(option)}\"`);\n            if (pv[zod.def.discriminator]?.has(undefined))\n                undefinedCount++;\n            for (const [k, v] of Object.entries(pv)) {\n                if (!Object.prototype.hasOwnProperty.call(propValues, k)) {\n                    util.assignProp(propValues, k, new Set());\n                }\n                for (const val of v) {\n                    propValues[k].add(val);\n                }\n            }\n        }\n        if (!zod.def.unionFallback && undefinedCount > 1)\n            propValues[zod.def.discriminator]?.delete(undefined);\n        return propValues;\n    });\n    // Checked now rather than in the lookup map below, so an option that lacks the discriminator fails at the `discriminatedUnion` call instead of on the first object parsed. Options whose shape cannot be enumerated without resolving it — pipes and lazies — are left to the map.\n    def.options.forEach((option, i) => {\n        const propShape = util.rawShape(option._zod.def);\n        if (propShape && !Object.prototype.hasOwnProperty.call(propShape, def.discriminator)) {\n            throw new Error(`Invalid discriminated union option at index \"${i}\"`);\n        }\n    });\n    const disc = util.cached(() => discriminatorMap(def));\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!util.isObject(input)) {\n            payload.issues.push({\n                code: \"invalid_type\",\n                expected: \"object\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const value = input?.[def.discriminator];\n        const opt = disc.value.get(value);\n        // forward metadata cannot choose an encoder for an absent tag\n        if (opt && (value !== undefined || ctx.direction !== \"backward\")) {\n            return opt._zod.run(payload, ctx);\n        }\n        // Fall back to union matching when the fast discriminator path fails:\n        // - explicitly enabled via unionFallback, or\n        // - during backward direction (encode), since codec-based discriminators have different values in forward vs backward directions\n        if (def.unionFallback || ctx.direction === \"backward\") {\n            return _super(payload, ctx);\n        }\n        // no matching discriminator\n        payload.issues.push({\n            code: \"invalid_union\",\n            errors: [],\n            note: \"No matching discriminator\",\n            discriminator: def.discriminator,\n            options: Array.from(disc.value.keys()).filter((value) => disc.value.get(value) !== null),\n            input,\n            path: [def.discriminator],\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodIntersection = /*@__PURE__*/ core.$constructor(\"$ZodIntersection\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        const left = def.left._zod.run({ value: input, issues: [] }, ctx);\n        const right = def.right._zod.run({ value: input, issues: [] }, ctx);\n        const async = left instanceof Promise || right instanceof Promise;\n        if (async) {\n            return Promise.all([left, right]).then(([left, right]) => {\n                return handleIntersectionResults(payload, left, right);\n            });\n        }\n        return handleIntersectionResults(payload, left, right);\n    };\n});\nexport function mergeValues(a, b) {\n    // const aType = parse.t(a);\n    // const bType = parse.t(b);\n    if (a === b) {\n        return { valid: true, data: a };\n    }\n    if (a instanceof Date && b instanceof Date && +a === +b) {\n        return { valid: true, data: a };\n    }\n    if (util.isPlainObject(a) && util.isPlainObject(b)) {\n        const bKeys = Object.keys(b);\n        const sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1);\n        const newObj = { ...a, ...b };\n        if (Object.prototype.hasOwnProperty.call(newObj, \"__proto__\"))\n            delete newObj.__proto__;\n        for (const key of sharedKeys) {\n            if (key === \"__proto__\")\n                continue;\n            const sharedValue = mergeValues(a[key], b[key]);\n            if (!sharedValue.valid) {\n                return {\n                    valid: false,\n                    mergeErrorPath: [key, ...sharedValue.mergeErrorPath],\n                };\n            }\n            newObj[key] = sharedValue.data;\n        }\n        return { valid: true, data: newObj };\n    }\n    if (Array.isArray(a) && Array.isArray(b)) {\n        if (a.length !== b.length) {\n            return { valid: false, mergeErrorPath: [] };\n        }\n        const newArray = [];\n        for (let index = 0; index < a.length; index++) {\n            const itemA = a[index];\n            const itemB = b[index];\n            const sharedValue = mergeValues(itemA, itemB);\n            if (!sharedValue.valid) {\n                return {\n                    valid: false,\n                    mergeErrorPath: [index, ...sharedValue.mergeErrorPath],\n                };\n            }\n            newArray.push(sharedValue.data);\n        }\n        return { valid: true, data: newArray };\n    }\n    return { valid: false, mergeErrorPath: [] };\n}\nfunction handleIntersectionResults(result, left, right) {\n    // Track which side(s) reject each key. A key rejection is reported only when BOTH sides reject it, so a key owned by one branch survives the other's key schema. strictObject reports these as unrecognized_keys; a record with an open key schema reports one invalid_key per key.\n    const unrecKeys = new Map();\n    let unrecIssue;\n    const keyIssues = new Map();\n    const collect = (iss, side) => {\n        let keys;\n        if (iss.code === \"unrecognized_keys\" && !iss.path?.length) {\n            unrecIssue ?? (unrecIssue = iss);\n            keys = iss.keys;\n        }\n        else if (iss.code === \"invalid_key\" && iss.origin === \"record\" && iss.path?.length === 1) {\n            const k = String(iss.path[0]);\n            if (!keyIssues.has(k))\n                keyIssues.set(k, iss);\n            keys = [k];\n        }\n        else {\n            return false;\n        }\n        for (const k of keys) {\n            if (!unrecKeys.has(k))\n                unrecKeys.set(k, {});\n            unrecKeys.get(k)[side] = true;\n        }\n        return true;\n    };\n    for (const iss of left.issues) {\n        if (!collect(iss, \"l\"))\n            result.issues.push(iss);\n    }\n    for (const iss of right.issues) {\n        if (!collect(iss, \"r\"))\n            result.issues.push(iss);\n    }\n    // Report only keys rejected by BOTH sides\n    const bothKeys = [...unrecKeys].filter(([, f]) => f.l && f.r).map(([k]) => k);\n    if (bothKeys.length) {\n        const aggregated = unrecIssue ? bothKeys.filter((k) => unrecIssue.keys.includes(k)) : [];\n        if (aggregated.length)\n            result.issues.push({ ...unrecIssue, keys: aggregated });\n        for (const k of bothKeys) {\n            if (!aggregated.includes(k) && keyIssues.has(k))\n                result.issues.push(keyIssues.get(k));\n        }\n    }\n    const merged = mergeValues(left.value, right.value);\n    if (!merged.valid) {\n        if (util.aborted(result))\n            return result;\n        throw new Error(`Unmergable intersection. Error path: ` + `${JSON.stringify(merged.mergeErrorPath)}`);\n    }\n    result.value = merged.data;\n    return result;\n}\nexport const $ZodTuple = /*@__PURE__*/ core.$constructor(\"$ZodTuple\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const items = def.items;\n    const memo = core.globalConfig.memoizer;\n    memo?.attach(inst);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!Array.isArray(input)) {\n            payload.issues.push({\n                input,\n                inst,\n                expected: \"tuple\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        payload.value = memo ? memo.alloc(inst, payload, [], ctx) : [];\n        const proms = [];\n        const optinStart = getTupleOptStart(items, \"optin\");\n        const optoutStart = getTupleOptStart(items, \"optout\");\n        if (!def.rest) {\n            if (input.length < optinStart) {\n                payload.issues.push({\n                    code: \"too_small\",\n                    minimum: optinStart,\n                    inclusive: true,\n                    input,\n                    inst,\n                    origin: \"array\",\n                });\n                return payload;\n            }\n            if (input.length > items.length) {\n                payload.issues.push({\n                    code: \"too_big\",\n                    maximum: items.length,\n                    inclusive: true,\n                    input,\n                    inst,\n                    origin: \"array\",\n                });\n            }\n        }\n        // Run every item in parallel, collecting results into an indexed array. The post-processing in `handleTupleResults` walks them in order so it can decide whether an absent optional-output error can truncate the tail or must be reported to preserve required output.\n        const itemResults = new Array(items.length);\n        // only tracked when there is a rest loop to skip\n        const abortEarly = def.rest ? ctx?.abortEarly : undefined;\n        let itemAborted = false;\n        for (let i = 0; i < items.length; i++) {\n            const r = items[i]._zod.run({ value: input[i], issues: [] }, ctx);\n            if (r instanceof Promise) {\n                proms.push(r.then((rr) => {\n                    itemResults[i] = rr;\n                }));\n            }\n            else {\n                itemResults[i] = r;\n                if (abortEarly && !itemAborted && r.issues.length)\n                    itemAborted = util.aborted(r);\n            }\n        }\n        // sound because rest is non-empty exactly when every fixed index is present, the one case handleTupleResults cannot discard an item's issues\n        if (def.rest && !itemAborted) {\n            let i = items.length - 1;\n            const rest = input.slice(items.length);\n            let seen = payload.issues.length;\n            for (const el of rest) {\n                if (abortEarly && payload.issues.length !== seen) {\n                    if (util.aborted(payload, seen))\n                        break;\n                    seen = payload.issues.length;\n                }\n                i++;\n                const result = def.rest._zod.run({ value: el, issues: [] }, ctx);\n                if (result instanceof Promise) {\n                    proms.push(result.then((r) => handleTupleResult(r, payload, i)));\n                }\n                else {\n                    handleTupleResult(result, payload, i);\n                }\n            }\n        }\n        if (proms.length) {\n            return Promise.all(proms).then(() => handleTupleResults(itemResults, payload, items, input, optoutStart));\n        }\n        return handleTupleResults(itemResults, payload, items, input, optoutStart);\n    };\n});\nfunction getTupleOptStart(items, key) {\n    for (let i = items.length - 1; i >= 0; i--) {\n        // optin is a three-rung ladder so any rung above `undefined` permits an absent slot; optout stays two-valued.\n        const omittable = key === \"optin\" ? items[i]._zod.optin !== undefined : items[i]._zod.optout === \"optional\";\n        if (!omittable)\n            return i + 1;\n    }\n    return 0;\n}\nfunction handleTupleResult(result, final, index) {\n    if (result.issues.length) {\n        final.issues.push(...util.prefixIssues(index, result.issues));\n    }\n    final.value[index] = result.value;\n}\nfunction handleTupleResults(itemResults, final, items, input, optoutStart) {\n    // Walk results in order. Mirror $ZodObject's swallow-on-absent-optional rule, but only after `optoutStart`: the first index where the output tuple tail can be absent.\n    for (let i = 0; i < items.length; i++) {\n        const r = itemResults[i];\n        const isPresent = i < input.length;\n        // The array analog of `handlePropertyResult`'s absent-key early return: the middle rung permits absence without supplying anything in its place, so the tail truncates here instead of materializing whatever the item made of `undefined`.\n        if (!isPresent && i >= optoutStart && items[i]._zod.optin === \"optional\") {\n            final.value.length = i;\n            break;\n        }\n        if (r.issues.length) {\n            if (!isPresent && i >= optoutStart) {\n                final.value.length = i;\n                break;\n            }\n            final.issues.push(...util.prefixIssues(i, r.issues));\n        }\n        final.value[i] = r.value;\n    }\n    // Drop trailing slots that produced `undefined` for absent input\n    // (the array analog of an absent optional key on an object). The\n    // `i >= input.length` floor is critical: an explicit `undefined`\n    // *inside* the input must be preserved even when the schema is\n    // optional-out (e.g. `z.string().or(z.undefined())` accepting an\n    // explicit undefined value).\n    for (let i = final.value.length - 1; i >= input.length; i--) {\n        if (items[i]._zod.optout === \"optional\" && final.value[i] === undefined) {\n            final.value.length = i;\n        }\n        else {\n            break;\n        }\n    }\n    return final;\n}\nexport const $ZodRecord = /*@__PURE__*/ core.$constructor(\"$ZodRecord\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const memo = core.globalConfig.memoizer;\n    memo?.attach(inst);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!util.isPlainObject(input)) {\n            payload.issues.push({\n                expected: \"record\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        // no guard in either loop below: a record's invalid_key aborts but an enclosing intersection can reconcile it, so a stopped loop hides keys the sibling does not own and the intersection then rejects nothing\n        const proms = [];\n        const values = def.keyType._zod.values;\n        if (values && !def.partial) {\n            payload.value = memo ? memo.alloc(inst, payload, {}, ctx) : {};\n            const recordKeys = new Set();\n            for (const key of values) {\n                if (typeof key === \"string\" || typeof key === \"number\" || typeof key === \"symbol\") {\n                    recordKeys.add(typeof key === \"number\" ? key.toString() : key);\n                    // A declared __proto__ is stripped but is not an unrecognized key.\n                    if (key === \"__proto__\")\n                        continue;\n                    const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n                    if (keyResult instanceof Promise) {\n                        throw new Error(\"Async schemas not supported in object keys currently\");\n                    }\n                    if (keyResult.issues.length) {\n                        payload.issues.push({\n                            code: \"invalid_key\",\n                            origin: \"record\",\n                            issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                            input: key,\n                            path: [key],\n                            inst,\n                        });\n                        continue;\n                    }\n                    const outKey = keyResult.value;\n                    if (outKey === \"__proto__\")\n                        continue;\n                    const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n                    if (result instanceof Promise) {\n                        proms.push(result.then((result) => {\n                            if (result.issues.length) {\n                                payload.issues.push(...util.prefixIssues(key, result.issues));\n                            }\n                            payload.value[outKey] = result.value;\n                        }));\n                    }\n                    else {\n                        if (result.issues.length) {\n                            payload.issues.push(...util.prefixIssues(key, result.issues));\n                        }\n                        payload.value[outKey] = result.value;\n                    }\n                }\n            }\n            let unrecognized;\n            for (const key in input) {\n                if (!recordKeys.has(key)) {\n                    if (def.mode === \"loose\") {\n                        // skip __proto__ so it can't replace the result prototype via the assignment setter on the plain {} we build into\n                        if (key === \"__proto__\")\n                            continue;\n                        payload.value[key] = input[key];\n                    }\n                    else {\n                        unrecognized = unrecognized ?? [];\n                        unrecognized.push(key);\n                    }\n                }\n            }\n            if (unrecognized && unrecognized.length > 0) {\n                payload.issues.push({\n                    code: \"unrecognized_keys\",\n                    input,\n                    inst,\n                    keys: unrecognized,\n                    continue: true,\n                });\n            }\n        }\n        else {\n            payload.value = memo ? memo.alloc(inst, payload, {}, ctx) : {};\n            // An enumerable key schema declares which keys the record owns, so a key outside the set is unrecognized. A non-enumerable one (regex, refine) is a constraint every key must satisfy, so a failing key is invalid. Only the former is reconcilable against the other side of an intersection.\n            let unrecognized;\n            // Reflect.ownKeys for Symbol-key support; filter non-enumerable to match z.object()\n            for (const key of Reflect.ownKeys(input)) {\n                if (key === \"__proto__\")\n                    continue;\n                if (!Object.prototype.propertyIsEnumerable.call(input, key))\n                    continue;\n                let keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n                if (keyResult instanceof Promise) {\n                    throw new Error(\"Async schemas not supported in object keys currently\");\n                }\n                // Numeric string fallback: if key is a numeric string and failed, retry with Number(key). This handles z.number(), z.literal([1, 2, 3]), and unions containing numeric literals\n                const checkNumericKey = typeof key === \"string\" && regexes.number.test(key) && keyResult.issues.length;\n                if (checkNumericKey) {\n                    const retryResult = def.keyType._zod.run({ value: Number(key), issues: [] }, ctx);\n                    if (retryResult instanceof Promise) {\n                        throw new Error(\"Async schemas not supported in object keys currently\");\n                    }\n                    if (retryResult.issues.length === 0) {\n                        keyResult = retryResult;\n                    }\n                }\n                if (keyResult.issues.length) {\n                    if (def.mode === \"loose\") {\n                        // Pass through unchanged\n                        payload.value[key] = input[key];\n                    }\n                    else if (values) {\n                        unrecognized = unrecognized ?? [];\n                        unrecognized.push(key);\n                    }\n                    else {\n                        // Default \"strict\" behavior: error on invalid key\n                        payload.issues.push({\n                            code: \"invalid_key\",\n                            origin: \"record\",\n                            issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                            input: key,\n                            path: [key],\n                            inst,\n                        });\n                    }\n                    continue;\n                }\n                // the guard above tests the raw input key, but the key schema can normalize an ordinary key into __proto__; re-check the key we actually write under\n                const outKey = keyResult.value;\n                if (outKey === \"__proto__\")\n                    continue;\n                const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n                if (result instanceof Promise) {\n                    proms.push(result.then((result) => {\n                        if (result.issues.length) {\n                            payload.issues.push(...util.prefixIssues(key, result.issues));\n                        }\n                        payload.value[outKey] = result.value;\n                    }));\n                }\n                else {\n                    if (result.issues.length) {\n                        payload.issues.push(...util.prefixIssues(key, result.issues));\n                    }\n                    payload.value[outKey] = result.value;\n                }\n            }\n            if (unrecognized && unrecognized.length > 0) {\n                payload.issues.push({\n                    code: \"unrecognized_keys\",\n                    input,\n                    inst,\n                    keys: unrecognized,\n                    continue: true,\n                });\n            }\n        }\n        if (proms.length) {\n            return Promise.all(proms).then(() => payload);\n        }\n        return payload;\n    };\n});\nexport const $ZodMap = /*@__PURE__*/ core.$constructor(\"$ZodMap\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const memo = core.globalConfig.memoizer;\n    memo?.attach(inst);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!(input instanceof Map)) {\n            payload.issues.push({\n                expected: \"map\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const proms = [];\n        payload.value = memo ? memo.alloc(inst, payload, new Map(), ctx) : new Map();\n        const abortEarly = ctx?.abortEarly;\n        let seen = payload.issues.length;\n        for (const [key, value] of input) {\n            if (abortEarly && payload.issues.length !== seen) {\n                if (util.aborted(payload, seen))\n                    break;\n                seen = payload.issues.length;\n            }\n            const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n            const valueResult = def.valueType._zod.run({ value: value, issues: [] }, ctx);\n            if (keyResult instanceof Promise || valueResult instanceof Promise) {\n                proms.push(Promise.all([keyResult, valueResult]).then(([keyResult, valueResult]) => {\n                    handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n                }));\n            }\n            else {\n                handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n            }\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n});\nfunction handleMapResult(keyResult, valueResult, final, key, input, inst, ctx) {\n    if (keyResult.issues.length) {\n        if (util.propertyKeyTypes.has(typeof key)) {\n            final.issues.push(...util.prefixIssues(key, keyResult.issues));\n        }\n        else {\n            final.issues.push({\n                code: \"invalid_key\",\n                origin: \"map\",\n                input,\n                inst,\n                issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n            });\n        }\n    }\n    if (valueResult.issues.length) {\n        if (util.propertyKeyTypes.has(typeof key)) {\n            final.issues.push(...util.prefixIssues(key, valueResult.issues));\n        }\n        else {\n            final.issues.push({\n                origin: \"map\",\n                code: \"invalid_element\",\n                input,\n                inst,\n                key: key,\n                issues: valueResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n            });\n        }\n    }\n    final.value.set(keyResult.value, valueResult.value);\n}\nexport const $ZodSet = /*@__PURE__*/ core.$constructor(\"$ZodSet\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const memo = core.globalConfig.memoizer;\n    memo?.attach(inst);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!(input instanceof Set)) {\n            payload.issues.push({\n                input,\n                inst,\n                expected: \"set\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        const proms = [];\n        payload.value = memo ? memo.alloc(inst, payload, new Set(), ctx) : new Set();\n        const abortEarly = ctx?.abortEarly;\n        let seen = payload.issues.length;\n        for (const item of input) {\n            if (abortEarly && payload.issues.length !== seen) {\n                if (util.aborted(payload, seen))\n                    break;\n                seen = payload.issues.length;\n            }\n            const result = def.valueType._zod.run({ value: item, issues: [] }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleSetResult(result, payload)));\n            }\n            else\n                handleSetResult(result, payload);\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n});\nfunction handleSetResult(result, final) {\n    if (result.issues.length) {\n        final.issues.push(...result.issues);\n    }\n    final.value.add(result.value);\n}\nexport const $ZodEnum = /*@__PURE__*/ core.$constructor(\"$ZodEnum\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const values = util.getEnumValues(def.entries);\n    const valuesSet = new Set(values);\n    inst._zod.values = valuesSet;\n    util.defineLazyInternal(inst, \"pattern\", (zod) => {\n        const patternValues = util.getEnumValues(zod.def.entries).filter((k) => util.propertyKeyTypes.has(typeof k));\n        // unmatchable fallback, RE2-safe: an empty alternation would compile to /^()$/, which matches \"\"\n        return new RegExp(patternValues.length ? `^(${patternValues.map((o) => util.escapeRegex(o.toString())).join(\"|\")})$` : \"^[^\\\\s\\\\S]$\");\n    });\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (valuesSet.has(input)) {\n            return payload;\n        }\n        payload.issues.push({\n            code: \"invalid_value\",\n            values,\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodLiteral = /*@__PURE__*/ core.$constructor(\"$ZodLiteral\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const values = new Set(def.values);\n    inst._zod.values = values;\n    util.defineLazyInternal(inst, \"pattern\", (zod) => {\n        const vals = zod.def.values;\n        // unmatchable fallback, RE2-safe: an empty alternation would compile to /^()$/, which matches \"\"\n        return new RegExp(vals.length\n            ? `^(${vals\n                .map((o) => typeof o === \"string\" ? util.escapeRegex(o) : o ? util.escapeRegex(o.toString()) : String(o))\n                .join(\"|\")})$`\n            : \"^[^\\\\s\\\\S]$\");\n    });\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (values.has(input)) {\n            return payload;\n        }\n        payload.issues.push({\n            code: \"invalid_value\",\n            values: def.values,\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodFile = /*@__PURE__*/ core.$constructor(\"$ZodFile\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        // @ts-ignore\n        if (input instanceof File)\n            return payload;\n        payload.issues.push({\n            expected: \"file\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodTransform = /*@__PURE__*/ core.$constructor(\"$ZodTransform\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.optin = \"optional\";\n    core.globalConfig.memoizer?.guard(inst);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            throw new core.$ZodEncodeError(inst.constructor.name);\n        }\n        const _out = def.transform(payload.value, payload);\n        if (ctx.async) {\n            const output = _out instanceof Promise ? _out : Promise.resolve(_out);\n            return output.then((output) => {\n                payload.value = output;\n                return payload;\n            });\n        }\n        if (_out instanceof Promise) {\n            throw new core.$ZodAsyncError();\n        }\n        payload.value = _out;\n        return payload;\n    };\n});\nfunction handleOptionalResult(payload, result) {\n    // A substituting schema that still failed has no usable answer; yield undefined. Its issues are simply dropped: it ran on a payload of its own, so there is no shared array to truncate and nothing of the caller's to lose with it.\n    payload.value = result.issues.length ? undefined : result.value;\n    return payload;\n}\nexport const $ZodOptional = /*@__PURE__*/ core.$constructor(\"$ZodOptional\", (inst, def) => {\n    $ZodType.init(inst, def);\n    // .optional() propagates absence rather than substituting for it, so a defaulted inner keeps its rung.\n    util.defineLazyInternal(inst, \"optin\", (zod) => zod.def.innerType._zod.optin === \"defaulted\" ? \"defaulted\" : \"optional\");\n    inst._zod.optout = \"optional\";\n    util.defineLazyInternal(inst, \"values\", (zod) => {\n        const values = zod.def.innerType._zod.values;\n        return values ? new Set([...values, undefined]) : undefined;\n    });\n    util.defineLazyInternal(inst, \"pattern\", (zod) => {\n        const pattern = zod.def.innerType._zod.pattern;\n        return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)})?$`) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        if (payload.value === undefined) {\n            // Only the top rung substitutes a value for absence; everything else leaves it intact, which is what .optional() means.\n            if (def.innerType._zod.optin !== \"defaulted\")\n                return payload;\n            // Its own payload, for the same reason $ZodCatch gets one: a pipe forwards an unrecognized key through the caller's issues array, and this must not read that as the substituting schema failing and drop it.\n            const result = def.innerType._zod.run({ value: payload.value, issues: [] }, ctx);\n            if (result instanceof Promise)\n                return result.then((result) => handleOptionalResult(payload, result));\n            return handleOptionalResult(payload, result);\n        }\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodExactOptional = /*@__PURE__*/ core.$constructor(\"$ZodExactOptional\", (inst, def) => {\n    // Call parent init - inherits optin/optout = \"optional\"\n    $ZodOptional.init(inst, def);\n    // Override values/pattern to NOT add undefined\n    util.defineLazyInternal(inst, \"values\", (zod) => zod.def.innerType._zod.values);\n    util.defineLazyInternal(inst, \"pattern\", (zod) => zod.def.innerType._zod.pattern);\n    // Override parse to just delegate (no undefined handling)\n    inst._zod.parse = (payload, ctx) => {\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodNullable = /*@__PURE__*/ core.$constructor(\"$ZodNullable\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazyInternal(inst, \"optin\", (zod) => zod.def.innerType._zod.optin);\n    util.defineLazyInternal(inst, \"optout\", (zod) => zod.def.innerType._zod.optout);\n    util.defineLazyInternal(inst, \"pattern\", (zod) => {\n        const pattern = zod.def.innerType._zod.pattern;\n        return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)}|null)$`) : undefined;\n    });\n    util.defineLazyInternal(inst, \"values\", (zod) => {\n        return zod.def.innerType._zod.values ? new Set([...zod.def.innerType._zod.values, null]) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        // Forward direction (decode): allow null to pass through\n        if (payload.value === null)\n            return payload;\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodDefault = /*@__PURE__*/ core.$constructor(\"$ZodDefault\", (inst, def) => {\n    $ZodType.init(inst, def);\n    // inst._zod.qin = \"true\";\n    inst._zod.optin = \"defaulted\";\n    util.defineLazyInternal(inst, \"values\", (zod) => zod.def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        // Forward direction (decode): apply defaults for undefined input\n        if (payload.value === undefined) {\n            payload.value = def.defaultValue;\n            /**\n             * $ZodDefault returns the default value immediately in forward direction.\n             * It doesn't pass the default value into the validator (\"prefault\"). There's no reason to pass the default value through validation. The validity of the default is enforced by TypeScript statically. Otherwise, it's the responsibility of the user to ensure the default is valid. In the case of pipes with divergent in/out types, you can specify the default on the `in` schema of your ZodPipe to set a \"prefault\" for the pipe.   */\n            return payload;\n        }\n        // Forward direction: continue with default handling\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => handleDefaultResult(result, def));\n        }\n        return handleDefaultResult(result, def);\n    };\n});\nfunction handleDefaultResult(payload, def) {\n    if (payload.value === undefined) {\n        payload.value = def.defaultValue;\n    }\n    return payload;\n}\nexport const $ZodPrefault = /*@__PURE__*/ core.$constructor(\"$ZodPrefault\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.optin = \"defaulted\";\n    util.defineLazyInternal(inst, \"values\", (zod) => zod.def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        // Forward direction (decode): apply prefault for undefined input\n        if (payload.value === undefined) {\n            payload.value = def.defaultValue;\n        }\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodNonOptional = /*@__PURE__*/ core.$constructor(\"$ZodNonOptional\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazyInternal(inst, \"values\", (zod) => {\n        const v = zod.def.innerType._zod.values;\n        return v ? new Set([...v].filter((x) => x !== undefined)) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => handleNonOptionalResult(result, inst));\n        }\n        return handleNonOptionalResult(result, inst);\n    };\n});\nfunction handleNonOptionalResult(payload, inst) {\n    if (!payload.issues.length && payload.value === undefined) {\n        payload.issues.push({\n            code: \"invalid_type\",\n            expected: \"nonoptional\",\n            input: payload.value,\n            inst,\n        });\n    }\n    return payload;\n}\nexport const $ZodSuccess = /*@__PURE__*/ core.$constructor(\"$ZodSuccess\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            throw new core.$ZodEncodeError(\"ZodSuccess\");\n        }\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => {\n                payload.value = result.issues.length === 0;\n                return payload;\n            });\n        }\n        payload.value = result.issues.length === 0;\n        return payload;\n    };\n});\nfunction handleCatchResult(payload, result, def, ctx) {\n    if (!result.issues.length) {\n        payload.value = result.value;\n        // The value carries up, so the flag describing it has to carry with it: a back-edge into a node still being parsed must not be frozen by an enclosing readonly, and its checks belong to the node itself. Guarded so the ordinary case adds no own property.\n        if (result.memo)\n            payload.memo = true;\n        return payload;\n    }\n    // Spread the inner's own payload, not ours: `value` has to stay the input the catch was handed, and the inner ran on a payload of its own so its issues are already private to this call.\n    payload.value = def.catchValue({\n        ...result,\n        value: payload.value,\n        error: {\n            issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n        },\n        input: payload.value,\n    });\n    return payload;\n}\nexport const $ZodCatch = /*@__PURE__*/ core.$constructor(\"$ZodCatch\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazyInternal(inst, \"optin\", (zod) => zod.def.innerType._zod.optin === \"defaulted\" ? \"defaulted\" : \"optional\");\n    util.defineLazyInternal(inst, \"optout\", (zod) => zod.def.innerType._zod.optout);\n    util.defineLazyInternal(inst, \"values\", (zod) => zod.def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        // Forward direction (decode): apply catch logic\n        const result = def.innerType._zod.run({ value: payload.value, issues: [] }, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => handleCatchResult(payload, result, def, ctx));\n        }\n        return handleCatchResult(payload, result, def, ctx);\n    };\n});\nexport const $ZodNaN = /*@__PURE__*/ core.$constructor(\"$ZodNaN\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"number\" || !Number.isNaN(payload.value)) {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                expected: \"nan\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        return payload;\n    };\n});\nexport const $ZodPipe = /*@__PURE__*/ core.$constructor(\"$ZodPipe\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazyInternal(inst, \"values\", (zod) => zod.def.in._zod.values);\n    util.defineLazyInternal(inst, \"optin\", (zod) => zod.def.in._zod.optin);\n    util.defineLazyInternal(inst, \"optout\", (zod) => zod.def.out._zod.optout);\n    util.defineLazyInternal(inst, \"propValues\", (zod) => zod.def.in._zod.propValues);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            const right = def.out._zod.run(payload, ctx);\n            if (right instanceof Promise) {\n                return right.then((right) => handlePipeResult(right, def.in, ctx));\n            }\n            return handlePipeResult(right, def.in, ctx);\n        }\n        const left = def.in._zod.run(payload, ctx);\n        if (left instanceof Promise) {\n            return left.then((left) => handlePipeResult(left, def.out, ctx));\n        }\n        return handlePipeResult(left, def.out, ctx);\n    };\n});\nfunction handlePipeResult(left, next, ctx) {\n    // Any issue stops the pipe, so a failing refinement never feeds its transform. An unrecognized key is the exception: it describes the input's extra properties, not the value being piped, and an enclosing intersection may yet reconcile it.\n    if (left.issues.some((iss) => iss.code !== \"unrecognized_keys\")) {\n        // prevent further checks\n        left.aborted = true;\n        return left;\n    }\n    return next._zod.run({ value: left.value, issues: left.issues }, ctx);\n}\nexport const $ZodCodec = /*@__PURE__*/ core.$constructor(\"$ZodCodec\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazyInternal(inst, \"values\", (zod) => zod.def.in._zod.values);\n    util.defineLazyInternal(inst, \"optin\", (zod) => zod.def.in._zod.optin);\n    util.defineLazyInternal(inst, \"optout\", (zod) => zod.def.out._zod.optout);\n    util.defineLazyInternal(inst, \"propValues\", (zod) => zod.def.in._zod.propValues);\n    inst._zod.parse = (payload, ctx) => {\n        const direction = ctx.direction || \"forward\";\n        if (direction === \"forward\") {\n            const left = def.in._zod.run(payload, ctx);\n            if (left instanceof Promise) {\n                return left.then((left) => handleCodecAResult(left, def, ctx));\n            }\n            return handleCodecAResult(left, def, ctx);\n        }\n        else {\n            const right = def.out._zod.run(payload, ctx);\n            if (right instanceof Promise) {\n                return right.then((right) => handleCodecAResult(right, def, ctx));\n            }\n            return handleCodecAResult(right, def, ctx);\n        }\n    };\n});\nfunction handleCodecAResult(result, def, ctx) {\n    if (result.issues.length) {\n        // prevent further checks\n        result.aborted = true;\n        return result;\n    }\n    const direction = ctx.direction || \"forward\";\n    if (direction === \"forward\") {\n        const transformed = def.transform(result.value, result);\n        if (transformed instanceof Promise) {\n            return transformed.then((value) => handleCodecTxResult(result, value, def.out, ctx));\n        }\n        return handleCodecTxResult(result, transformed, def.out, ctx);\n    }\n    else {\n        const transformed = def.reverseTransform(result.value, result);\n        if (transformed instanceof Promise) {\n            return transformed.then((value) => handleCodecTxResult(result, value, def.in, ctx));\n        }\n        return handleCodecTxResult(result, transformed, def.in, ctx);\n    }\n}\nfunction handleCodecTxResult(left, value, nextSchema, ctx) {\n    // Check if transform added any issues\n    if (left.issues.length) {\n        left.aborted = true;\n        return left;\n    }\n    return nextSchema._zod.run({ value, issues: left.issues }, ctx);\n}\nexport const $ZodPreprocess = /*@__PURE__*/ core.$constructor(\"$ZodPreprocess\", (inst, def) => {\n    $ZodPipe.init(inst, def);\n});\nexport const $ZodReadonly = /*@__PURE__*/ core.$constructor(\"$ZodReadonly\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazyInternal(inst, \"propValues\", (zod) => zod.def.innerType._zod.propValues);\n    util.defineLazyInternal(inst, \"values\", (zod) => zod.def.innerType._zod.values);\n    util.defineLazyInternal(inst, \"optin\", (zod) => zod.def.innerType?._zod?.optin);\n    util.defineLazyInternal(inst, \"optout\", (zod) => zod.def.innerType?._zod?.optout);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then(handleReadonlyResult);\n        }\n        return handleReadonlyResult(result);\n    };\n});\nfunction handleReadonlyResult(payload) {\n    // A repeat visit hands back a node that is still being built; freezing it here would make the rest of its keys fail to assign.\n    if (!payload.memo)\n        payload.value = Object.freeze(payload.value);\n    return payload;\n}\n// a leaf's pattern source with its own checks folded in: the last pattern-carrying check wins, else length bounds narrow the catch-all, else an integer format narrows the number form. the fold lives here instead of on `_zod.pattern` so a bundle without template literals never pays for it\nfunction leafPattern(schema) {\n    const def = schema._zod.def;\n    let pattern = def.pattern;\n    let isInt = !!def.format?.includes(\"int\");\n    let minimum;\n    let maximum;\n    for (const ch of def.checks ?? []) {\n        const d = ch._zod.def;\n        if (d.pattern)\n            pattern = d.pattern;\n        isInt || (isInt = !!d.format?.includes(\"int\"));\n        const lo = d.minimum ?? d.length;\n        const hi = d.maximum ?? d.length;\n        if (lo !== undefined && (minimum === undefined || lo > minimum))\n            minimum = lo;\n        if (hi !== undefined && (maximum === undefined || hi < maximum))\n            maximum = hi;\n    }\n    if (pattern)\n        return pattern.source;\n    // an empty range matches nothing at runtime, and `{8,5}` is not a legal quantifier\n    if (minimum !== undefined && maximum !== undefined && minimum > maximum)\n        return \"(?!)\";\n    if (minimum !== undefined || maximum !== undefined)\n        return regexes.string({ minimum, maximum }).source;\n    const own = schema._zod.pattern;\n    return (isInt && own === regexes.number ? regexes.integer : own)?.source;\n}\n// a part's pattern source. a wrapper's pattern embeds its inner pattern's source verbatim, so the folded form is substituted in place without knowing the wrapper's own composition; a union's options are joined the way the union builds its own pattern\nfunction partPattern(schema) {\n    const def = schema._zod.def;\n    const own = schema._zod.pattern?.source;\n    // lazy resolves its inner on the internals, not the def\n    const inner = def.innerType ?? schema._zod.innerType;\n    if (inner) {\n        const before = inner._zod.pattern?.source;\n        const after = partPattern(inner);\n        if (own && before && after && after !== before) {\n            return own.replace(util.cleanRegex(before), () => util.cleanRegex(after));\n        }\n        return own;\n    }\n    if (def.options) {\n        const sources = def.options.map(partPattern);\n        if (sources.every(Boolean))\n            return `^(${sources.map((s) => util.cleanRegex(s)).join(\"|\")})$`;\n    }\n    return leafPattern(schema);\n}\nexport const $ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"$ZodTemplateLiteral\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const regexParts = [];\n    for (const part of def.parts) {\n        if (typeof part === \"object\" && part !== null) {\n            // is Zod schema\n            const source = partPattern(part);\n            if (!source) {\n                throw new Error(`Invalid template literal part, no pattern found: ${[...part._zod.traits].shift()}`);\n            }\n            regexParts.push(util.cleanRegex(source));\n        }\n        else if (part === null || util.primitiveTypes.has(typeof part)) {\n            regexParts.push(util.escapeRegex(`${part}`));\n        }\n        else {\n            throw new Error(`Invalid template literal part: ${part}`);\n        }\n    }\n    inst._zod.pattern = new RegExp(`^${regexParts.join(\"\")}$`);\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"string\") {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                expected: \"string\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        inst._zod.pattern.lastIndex = 0;\n        if (!inst._zod.pattern.test(payload.value)) {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                code: \"invalid_format\",\n                format: def.format ?? \"template_literal\",\n                pattern: inst._zod.pattern.source,\n            });\n            return payload;\n        }\n        return payload;\n    };\n});\nexport const $ZodFunction = /*@__PURE__*/ core.$constructor(\"$ZodFunction\", (inst, def) => {\n    $ZodType.init(inst, def);\n    // Defined, not assigned: the classic prototype exposes `_def` as a getter with no setter.\n    Object.defineProperty(inst, \"_def\", { value: def });\n    inst._zod.def = def;\n    inst.implement = (func) => {\n        if (typeof func !== \"function\") {\n            throw new Error(\"implement() must be called with a function\");\n        }\n        // Defined inline so the closure stays anonymous: binding it to a `const` first names it, which costs 256 bytes per implemented function.\n        return Object.defineProperty(function (...args) {\n            const parsedArgs = inst._def.input ? parse(inst._def.input, args) : args;\n            const result = Reflect.apply(func, this, parsedArgs);\n            if (inst._def.output) {\n                return parse(inst._def.output, result);\n            }\n            return result;\n        }, \"_zod\", { value: inst._zod, enumerable: false });\n    };\n    inst.implementAsync = (func) => {\n        if (typeof func !== \"function\") {\n            throw new Error(\"implementAsync() must be called with a function\");\n        }\n        return Object.defineProperty(async function (...args) {\n            const parsedArgs = inst._def.input ? await parseAsync(inst._def.input, args) : args;\n            const result = await Reflect.apply(func, this, parsedArgs);\n            if (inst._def.output) {\n                return await parseAsync(inst._def.output, result);\n            }\n            return result;\n        }, \"_zod\", { value: inst._zod, enumerable: false });\n    };\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"function\") {\n            payload.issues.push({\n                code: \"invalid_type\",\n                expected: \"function\",\n                input: payload.value,\n                inst,\n            });\n            return payload;\n        }\n        // Check if output is a promise type to determine if we should use async implementation\n        const hasPromiseOutput = inst._def.output && inst._def.output._zod.def.type === \"promise\";\n        if (hasPromiseOutput) {\n            payload.value = inst.implementAsync(payload.value);\n        }\n        else {\n            payload.value = inst.implement(payload.value);\n        }\n        return payload;\n    };\n    inst.input = (...args) => {\n        const F = inst.constructor;\n        if (Array.isArray(args[0])) {\n            return new F({\n                type: \"function\",\n                input: new $ZodTuple({\n                    type: \"tuple\",\n                    items: args[0],\n                    rest: args[1],\n                }),\n                output: inst._def.output,\n            });\n        }\n        return new F({\n            type: \"function\",\n            input: args[0],\n            output: inst._def.output,\n        });\n    };\n    inst.output = (output) => {\n        const F = inst.constructor;\n        return new F({\n            type: \"function\",\n            input: inst._def.input,\n            output,\n        });\n    };\n    return inst;\n});\nexport const $ZodPromise = /*@__PURE__*/ core.$constructor(\"$ZodPromise\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        return Promise.resolve(payload.value).then((inner) => def.innerType._zod.run({ value: inner, issues: [] }, ctx));\n    };\n});\nexport const $ZodLazy = /*@__PURE__*/ core.$constructor(\"$ZodLazy\", (inst, def) => {\n    $ZodType.init(inst, def);\n    // Cache the resolved inner type on the shared `def` so all clones of this lazy (e.g. via `.describe()`/`.meta()`) share the same inner instance, preserving identity for cycle detection on recursive schemas.\n    util.defineLazy(inst._zod, \"innerType\", () => {\n        const d = def;\n        if (!d._cachedInner)\n            d._cachedInner = def.getter();\n        return d._cachedInner;\n    });\n    util.defineLazyInternal(inst, \"pattern\", (zod) => zod.innerType?._zod?.pattern);\n    util.defineLazyInternal(inst, \"propValues\", (zod) => zod.innerType?._zod?.propValues);\n    util.defineLazyInternal(inst, \"optin\", (zod) => zod.innerType?._zod?.optin ?? undefined);\n    util.defineLazyInternal(inst, \"optout\", (zod) => zod.innerType?._zod?.optout ?? undefined);\n    inst._zod.parse = (payload, ctx) => {\n        const inner = inst._zod.innerType;\n        return inner._zod.run(payload, ctx);\n    };\n});\nexport const $ZodCustom = /*@__PURE__*/ core.$constructor(\"$ZodCustom\", (inst, def) => {\n    checks.$ZodCheck.init(inst, def);\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _) => {\n        return payload;\n    };\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const r = def.fn(input);\n        if (r instanceof Promise) {\n            return r.then((r) => handleRefineResult(r, payload, input, inst));\n        }\n        handleRefineResult(r, payload, input, inst);\n        return;\n    };\n});\nfunction handleRefineResult(result, payload, input, inst) {\n    if (!result) {\n        const _iss = {\n            code: \"custom\",\n            input,\n            inst, // incorporates params.error into issue reporting\n            path: [...(inst._zod.def.path ?? [])], // incorporates params.error into issue reporting\n            continue: !inst._zod.def.abort,\n            // params: inst._zod.def.params,\n        };\n        if (inst._zod.def.params)\n            _iss.params = inst._zod.def.params;\n        payload.issues.push(util.issue(_iss));\n    }\n}\n","import * as util from \"./util.js\";\nexport class $ZodCyclicError extends Error {\n    constructor() {\n        super(`Cannot parse a reference cycle that closes through a transform`);\n        this.name = \"ZodCyclicError\";\n    }\n}\n/** Keyed off the context object every schema in one parse call already shares. */\nconst STATE = \"~memo\";\nconst NO_ISSUES = [];\n// a value a cycle can close through\nfunction isRef(value) {\n    return value !== null && typeof value === \"object\";\n}\n// Receivers prefix paths in place, so the cache and every hand-out need their own copies.\nfunction cloneIssues(issues) {\n    return issues.map((iss) => (iss.path ? { ...iss, path: iss.path.slice() } : { ...iss }));\n}\nconst recursive = /*@__PURE__*/ new WeakMap();\n/** What the walk established, in order of certainty: ordered so the strongest answer among children wins. */\nconst NONE = 0;\nconst ASSUMED = 1;\nconst PROVEN = 2;\n/** Whether this schema's subtree contains a cycle, so one parse can re-enter it. */\nfunction isRecursive(inst, stack, resolve) {\n    const cached = recursive.get(inst);\n    if (cached !== undefined)\n        return cached ? PROVEN : NONE;\n    // Relative to the walk in progress, so not cached.\n    if (stack.has(inst))\n        return PROVEN;\n    stack.add(inst);\n    let result = NONE;\n    const check = (child) => {\n        if (result !== PROVEN && child?._zod) {\n            const answer = isRecursive(child, stack, resolve);\n            if (answer > result)\n                result = answer;\n        }\n    };\n    // `Reflect.ownKeys` rather than `Object.keys`, so a cycle through a declared symbol key is still seen\n    const shape = (sh, spread) => {\n        let answer = NONE;\n        for (const key of Reflect.ownKeys(sh)) {\n            const desc = Object.getOwnPropertyDescriptor(sh, key);\n            // an object resolves its shape by spread, so a key it does not enumerate is never parsed; `z.properties` reads every own key and so keeps them all\n            if (spread && !desc.enumerable)\n                continue;\n            // resolving runs user code, and a factory mints a fresh subtree per read, so an edge the walk can't follow counts as a cycle\n            const child = desc.get ? ASSUMED : desc.value?._zod ? isRecursive(desc.value, stack, resolve) : NONE;\n            if (child > answer)\n                answer = child;\n        }\n        return answer;\n    };\n    const merge = (answer) => {\n        if (answer > result)\n            result = answer;\n    };\n    const def = inst._zod.def;\n    const kind = def.type;\n    switch (kind) {\n        case \"object\": {\n            const raw = util.rawShape(def);\n            // a def with no raw shape answers `shape` from an accessor of its own, and running that can mint a whole fresh subtree\n            merge(raw ? shape(raw, true) : ASSUMED);\n            check(def.catchall);\n            break;\n        }\n        case \"array\":\n            check(def.element);\n            break;\n        case \"tuple\":\n            for (const el of def.items)\n                check(el);\n            check(def.rest);\n            break;\n        case \"record\":\n        case \"map\":\n            check(def.keyType);\n            check(def.valueType);\n            break;\n        case \"set\":\n            check(def.valueType);\n            break;\n        case \"union\":\n            for (const el of def.options)\n                check(el);\n            break;\n        case \"intersection\":\n            check(def.left);\n            check(def.right);\n            break;\n        case \"optional\":\n        case \"nullable\":\n        case \"default\":\n        case \"prefault\":\n        case \"catch\":\n        case \"readonly\":\n        case \"nonoptional\":\n        case \"promise\":\n        case \"success\":\n            check(def.innerType);\n            break;\n        case \"pipe\":\n            check(def.in);\n            check(def.out);\n            break;\n        case \"function\":\n            check(def.input);\n            check(def.output);\n            break;\n        // `$ZodLazy` caches its inner on the def, so a resolved edge is followed exactly\n        case \"lazy\": {\n            const inner = def._cachedInner ?? (resolve ? inst._zod.innerType : undefined);\n            // walked with resolution off: one hop sees past the deferral, and a lazy that yields only another unresolved lazy is generative, so it stops there\n            merge(inner ? isRecursive(inner, stack, false) : ASSUMED);\n            break;\n        }\n        // a leaf by choice: `parts` are regex fragments, not data positions\n        case \"template_literal\":\n        // leaves\n        case \"string\":\n        case \"number\":\n        case \"int\":\n        case \"boolean\":\n        case \"bigint\":\n        case \"symbol\":\n        case \"undefined\":\n        case \"null\":\n        case \"void\":\n        case \"never\":\n        case \"any\":\n        case \"unknown\":\n        case \"date\":\n        case \"nan\":\n        case \"enum\":\n        case \"literal\":\n        case \"file\":\n        case \"transform\":\n        case \"custom\":\n            break;\n        default: {\n            // a new built-in kind becomes a compile error here\n            kind;\n            // a user-defined kind can still hold children, and only its author knows where, so fall back to scanning the def — skipping accessors, since reading one can run user code\n            for (const key in def) {\n                const desc = Object.getOwnPropertyDescriptor(def, key);\n                if (!desc || desc.get)\n                    continue;\n                const value = desc.value;\n                if (!value || typeof value !== \"object\")\n                    continue;\n                if (value._zod)\n                    check(value);\n                else if (Array.isArray(value))\n                    for (const el of value)\n                        check(el);\n            }\n        }\n    }\n    stack.delete(inst);\n    return settle(inst, result);\n}\n/** An assumed answer must not outlive the resolution that settles it, so only a certain one is cached. */\nfunction settle(inst, answer) {\n    if (answer !== ASSUMED)\n        recursive.set(inst, answer === PROVEN);\n    return answer;\n}\n/**\n * Whether one parse can re-enter this schema, i.e. its subtree contains a cycle.\n * Exported for `z.compile`, which refuses to compile such a schema: cycle\n * breaking is driven from here off state keyed on the parse context, and a\n * generated fast path has no context to key on.\n */\nexport function isRecursiveSchema(inst) {\n    // z.compile never parses, so nothing would ever resolve a lazy for it; it runs once and already treats a throw here as recursive\n    return isRecursive(inst, new Set(), true) !== NONE;\n}\nfunction bucketFor(state, inst) {\n    let bucket = state.buckets.get(inst);\n    if (!bucket) {\n        bucket = new WeakMap();\n        state.buckets.set(inst, bucket);\n    }\n    return bucket;\n}\n// Set immediately before delegating to core and cleared immediately after, so `alloc` registers only for a visit this module is driving.\nlet handoff;\n// Allocated but unfinished entries. `alloc` and the matching pop both happen in the synchronous part of a parse, so they nest even when children are async, and one stack serves every schema.\nconst open = [];\nconst memo = {\n    alloc(_inst, payload, empty) {\n        const bucket = handoff;\n        if (!bucket)\n            return empty;\n        handoff = undefined;\n        const entry = { value: empty, issues: null };\n        bucket.set(payload.value, entry);\n        open.push(entry);\n        return empty;\n    },\n    guard(inst) {\n        var _a;\n        (_a = inst._zod).deferred ?? (_a.deferred = []);\n        inst._zod.deferred.push(() => {\n            const base = inst._zod.parse;\n            const wrapped = (payload, ctx) => {\n                // The value is a placeholder a back-edge is still waiting on, so the cycle closes through this transform. Its output can't exist in time to bind.\n                if (ctx.direction !== \"backward\" && isBackEdge(ctx, payload.value))\n                    throw new $ZodCyclicError();\n                return base(payload, ctx);\n            };\n            inst._zod.parse = wrapped;\n            if (inst._zod.run === base)\n                inst._zod.run = wrapped;\n        });\n    },\n    attach(inst) {\n        var _a;\n        let isRecursiveInst;\n        let rechecked = false;\n        // a recursive schema is re-entered many times per parse and its bucket never changes\n        let lastCtx;\n        let lastBucket;\n        // Wraps `parse` in a deferred so it sees the container's final parse. Core's own deferred copies `parse` into `run` when there are no checks, and it ran first, so `run` is patched to match; with checks, `run` reads `parse` dynamically.\n        (_a = inst._zod).deferred ?? (_a.deferred = []);\n        inst._zod.deferred.push(() => {\n            const base = inst._zod.parse;\n            const wrapped = (payload, ctx) => {\n                if (isRecursiveInst === undefined) {\n                    const walked = isRecursive(inst, new Set(), false);\n                    if (walked === NONE) {\n                        // Nothing here can ever fire, so take it back out.\n                        inst._zod.parse = base;\n                        if (inst._zod.run === wrapped)\n                            inst._zod.run = base;\n                        return base(payload, ctx);\n                    }\n                    // this parse resolves the deferred edges on its own path, so ask once more before latching\n                    if (walked === PROVEN || rechecked)\n                        isRecursiveInst = true;\n                    else\n                        rechecked = true;\n                }\n                const input = payload.value;\n                if (!isRef(input))\n                    return base(payload, ctx);\n                let state = ctx[STATE];\n                if (!state) {\n                    state = { buckets: new WeakMap(), backEdges: undefined };\n                    ctx[STATE] = state;\n                }\n                let bucket;\n                if (lastCtx === ctx) {\n                    bucket = lastBucket;\n                }\n                else {\n                    bucket = bucketFor(state, inst);\n                    lastCtx = ctx;\n                    lastBucket = bucket;\n                }\n                const hit = bucket.get(input);\n                if (hit) {\n                    payload.value = hit.value;\n                    if (hit.issues) {\n                        if (hit.issues.length)\n                            payload.issues.push(...cloneIssues(hit.issues));\n                    }\n                    else {\n                        // Still being parsed: its own checks cover it, so skip them here.\n                        payload.memo = true;\n                        state.backEdges ?? (state.backEdges = new WeakSet());\n                        state.backEdges.add(hit.value);\n                    }\n                    return payload;\n                }\n                handoff = bucket;\n                const depth = open.length;\n                const result = base(payload, ctx);\n                handoff = undefined;\n                // A container that rejected its input outright allocated nothing.\n                const entry = open.length > depth ? open.pop() : undefined;\n                // Both paths written out so the sync one allocates no closure. It runs once per node, and capturing here cost more than everything else combined.\n                if (result instanceof Promise) {\n                    return result.then((r) => {\n                        if (entry)\n                            entry.issues = r.issues.length ? cloneIssues(r.issues) : NO_ISSUES;\n                        return r;\n                    });\n                }\n                if (entry)\n                    entry.issues = result.issues.length ? cloneIssues(result.issues) : NO_ISSUES;\n                return result;\n            };\n            inst._zod.parse = wrapped;\n            if (inst._zod.run === base)\n                inst._zod.run = wrapped;\n        });\n    },\n};\n/** The memoizer that gives containers cycle support. `zod` installs it by default; `zod/mini` opts in with `config({ memoizer: memoizer() })`. */\nexport function memoizer() {\n    return memo;\n}\n/** Whether this value is a node a back-edge resolved to before it finished. */\nexport function isBackEdge(ctx, value) {\n    const backEdges = ctx[STATE]?.backEdges;\n    return backEdges !== undefined && isRef(value) && backEdges.has(value);\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"حرف\", verb: \"أن يحوي\" },\n        file: { unit: \"بايت\", verb: \"أن يحوي\" },\n        array: { unit: \"عنصر\", verb: \"أن يحوي\" },\n        set: { unit: \"عنصر\", verb: \"أن يحوي\" },\n        map: { unit: \"عنصر\", verb: \"أن يحوي\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"مدخل\",\n        email: \"بريد إلكتروني\",\n        url: \"رابط\",\n        emoji: \"إيموجي\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"تاريخ ووقت بمعيار ISO\",\n        date: \"تاريخ بمعيار ISO\",\n        time: \"وقت بمعيار ISO\",\n        duration: \"مدة بمعيار ISO\",\n        ipv4: \"عنوان IPv4\",\n        ipv6: \"عنوان IPv6\",\n        mac: \"عنوان MAC\",\n        cidrv4: \"مدى عناوين بصيغة IPv4\",\n        cidrv6: \"مدى عناوين بصيغة IPv6\",\n        base64: \"نَص بترميز base64-encoded\",\n        base64url: \"نَص بترميز base64url-encoded\",\n        json_string: \"نَص على هيئة JSON\",\n        e164: \"رقم هاتف بمعيار E.164\",\n        credit_card: \"رقم بطاقة الائتمان\",\n        currency_code: \"رمز العملة\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"مدخل\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `مدخلات غير مقبولة: يفترض إدخال instanceof ${issue.expected}، ولكن تم إدخال ${received}`;\n                }\n                return `مدخلات غير مقبولة: يفترض إدخال ${expected}، ولكن تم إدخال ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `مدخلات غير مقبولة: يفترض إدخال ${util.stringifyPrimitive(issue.values[0])}`;\n                return `اختيار غير مقبول: يتوقع انتقاء أحد هذه الخيارات: ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return ` أكبر من اللازم: يفترض أن تكون ${issue.origin ?? \"القيمة\"} ${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"عنصر\"}`;\n                return `أكبر من اللازم: يفترض أن تكون ${issue.origin ?? \"القيمة\"} ${adj} ${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `أصغر من اللازم: يفترض لـ ${issue.origin} أن يكون ${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `أصغر من اللازم: يفترض لـ ${issue.origin} أن يكون ${adj} ${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `نَص غير مقبول: يجب أن يبدأ بـ \"${issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `نَص غير مقبول: يجب أن ينتهي بـ \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `نَص غير مقبول: يجب أن يتضمَّن \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `نَص غير مقبول: يجب أن يطابق النمط ${_issue.pattern}`;\n                return `${FormatDictionary[_issue.format] ?? issue.format} غير مقبول`;\n            }\n            case \"not_multiple_of\":\n                return `رقم غير مقبول: يجب أن يكون من مضاعفات ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `معرف${issue.keys.length > 1 ? \"ات\" : \"\"} غريب${issue.keys.length > 1 ? \"ة\" : \"\"}: ${util.joinValues(issue.keys, \"، \")}`;\n            case \"invalid_key\":\n                return `معرف غير مقبول في ${issue.origin}`;\n            case \"invalid_union\":\n                return \"مدخل غير مقبول\";\n            case \"invalid_element\":\n                return `مدخل غير مقبول في ${issue.origin}`;\n            default:\n                return \"مدخل غير مقبول\";\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"simvol\", verb: \"olmalıdır\" },\n        file: { unit: \"bayt\", verb: \"olmalıdır\" },\n        array: { unit: \"element\", verb: \"olmalıdır\" },\n        set: { unit: \"element\", verb: \"olmalıdır\" },\n        map: { unit: \"element\", verb: \"olmalıdır\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"input\",\n        email: \"email address\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO datetime\",\n        date: \"ISO date\",\n        time: \"ISO time\",\n        duration: \"ISO duration\",\n        ipv4: \"IPv4 address\",\n        ipv6: \"IPv6 address\",\n        mac: \"MAC address\",\n        cidrv4: \"IPv4 range\",\n        cidrv6: \"IPv6 range\",\n        base64: \"base64-encoded string\",\n        base64url: \"base64url-encoded string\",\n        json_string: \"JSON string\",\n        e164: \"E.164 number\",\n        credit_card: \"kredit kartı nömrəsi\",\n        currency_code: \"valyuta kodu\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Yanlış dəyər: gözlənilən instanceof ${issue.expected}, daxil olan ${received}`;\n                }\n                return `Yanlış dəyər: gözlənilən ${expected}, daxil olan ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Yanlış dəyər: gözlənilən ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Yanlış seçim: aşağıdakılardan biri olmalıdır: ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Çox böyük: gözlənilən ${issue.origin ?? \"dəyər\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"element\"}`;\n                return `Çox böyük: gözlənilən ${issue.origin ?? \"dəyər\"} ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Çox kiçik: gözlənilən ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                return `Çox kiçik: gözlənilən ${issue.origin} ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Yanlış mətn: \"${_issue.prefix}\" ilə başlamalıdır`;\n                if (_issue.format === \"ends_with\")\n                    return `Yanlış mətn: \"${_issue.suffix}\" ilə bitməlidir`;\n                if (_issue.format === \"includes\")\n                    return `Yanlış mətn: \"${_issue.includes}\" daxil olmalıdır`;\n                if (_issue.format === \"regex\")\n                    return `Yanlış mətn: ${_issue.pattern} şablonuna uyğun olmalıdır`;\n                return `Yanlış ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Yanlış ədəd: ${issue.divisor} ilə bölünə bilən olmalıdır`;\n            case \"unrecognized_keys\":\n                return `Tanınmayan açar${issue.keys.length > 1 ? \"lar\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} daxilində yanlış açar`;\n            case \"invalid_union\":\n                return \"Yanlış dəyər\";\n            case \"invalid_element\":\n                return `${issue.origin} daxilində yanlış dəyər`;\n            default:\n                return `Yanlış dəyər`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nfunction getBelarusianPlural(count, one, few, many) {\n    const absCount = Math.abs(count);\n    const lastDigit = absCount % 10;\n    const lastTwoDigits = absCount % 100;\n    if (lastTwoDigits >= 11 && lastTwoDigits <= 19) {\n        return many;\n    }\n    if (lastDigit === 1) {\n        return one;\n    }\n    if (lastDigit >= 2 && lastDigit <= 4) {\n        return few;\n    }\n    return many;\n}\nconst error = () => {\n    const Sizable = {\n        string: {\n            unit: {\n                one: \"сімвал\",\n                few: \"сімвалы\",\n                many: \"сімвалаў\",\n            },\n            verb: \"мець\",\n        },\n        array: {\n            unit: {\n                one: \"элемент\",\n                few: \"элементы\",\n                many: \"элементаў\",\n            },\n            verb: \"мець\",\n        },\n        set: {\n            unit: {\n                one: \"элемент\",\n                few: \"элементы\",\n                many: \"элементаў\",\n            },\n            verb: \"мець\",\n        },\n        map: {\n            unit: {\n                one: \"элемент\",\n                few: \"элементы\",\n                many: \"элементаў\",\n            },\n            verb: \"мець\",\n        },\n        file: {\n            unit: {\n                one: \"байт\",\n                few: \"байты\",\n                many: \"байтаў\",\n            },\n            verb: \"мець\",\n        },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"увод\",\n        email: \"email адрас\",\n        url: \"URL\",\n        emoji: \"эмодзі\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO дата і час\",\n        date: \"ISO дата\",\n        time: \"ISO час\",\n        duration: \"ISO працягласць\",\n        ipv4: \"IPv4 адрас\",\n        ipv6: \"IPv6 адрас\",\n        mac: \"MAC адрас\",\n        cidrv4: \"IPv4 дыяпазон\",\n        cidrv6: \"IPv6 дыяпазон\",\n        base64: \"радок у фармаце base64\",\n        base64url: \"радок у фармаце base64url\",\n        json_string: \"JSON радок\",\n        e164: \"нумар E.164\",\n        credit_card: \"нумар крэдытнай карты\",\n        currency_code: \"код валюты\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"увод\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"лік\",\n        array: \"масіў\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Няправільны ўвод: чакаўся instanceof ${issue.expected}, атрымана ${received}`;\n                }\n                return `Няправільны ўвод: чакаўся ${expected}, атрымана ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Няправільны ўвод: чакалася ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Няправільны варыянт: чакаўся адзін з ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    const maxValue = Number(issue.maximum);\n                    const unit = getBelarusianPlural(maxValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);\n                    return `Занадта вялікі: чакалася, што ${issue.origin ?? \"значэнне\"} павінна ${sizing.verb} ${adj}${issue.maximum.toString()} ${unit}`;\n                }\n                return `Занадта вялікі: чакалася, што ${issue.origin ?? \"значэнне\"} павінна быць ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    const minValue = Number(issue.minimum);\n                    const unit = getBelarusianPlural(minValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);\n                    return `Занадта малы: чакалася, што ${issue.origin} павінна ${sizing.verb} ${adj}${issue.minimum.toString()} ${unit}`;\n                }\n                return `Занадта малы: чакалася, што ${issue.origin} павінна быць ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Няправільны радок: павінен пачынацца з \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Няправільны радок: павінен заканчвацца на \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Няправільны радок: павінен змяшчаць \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Няправільны радок: павінен адпавядаць шаблону ${_issue.pattern}`;\n                return `Няправільны ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Няправільны лік: павінен быць кратным ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Нераспазнаны ${issue.keys.length > 1 ? \"ключы\" : \"ключ\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Няправільны ключ у ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Няправільны ўвод\";\n            case \"invalid_element\":\n                return `Няправільнае значэнне ў ${issue.origin}`;\n            default:\n                return `Няправільны ўвод`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"символа\", verb: \"да съдържа\" },\n        file: { unit: \"байта\", verb: \"да съдържа\" },\n        array: { unit: \"елемента\", verb: \"да съдържа\" },\n        set: { unit: \"елемента\", verb: \"да съдържа\" },\n        map: { unit: \"елемента\", verb: \"да съдържа\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"вход\",\n        email: \"имейл адрес\",\n        url: \"URL\",\n        emoji: \"емоджи\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO време\",\n        date: \"ISO дата\",\n        time: \"ISO време\",\n        duration: \"ISO продължителност\",\n        ipv4: \"IPv4 адрес\",\n        ipv6: \"IPv6 адрес\",\n        mac: \"MAC адрес\",\n        cidrv4: \"IPv4 диапазон\",\n        cidrv6: \"IPv6 диапазон\",\n        base64: \"base64-кодиран низ\",\n        base64url: \"base64url-кодиран низ\",\n        json_string: \"JSON низ\",\n        e164: \"E.164 номер\",\n        credit_card: \"номер на кредитна карта\",\n        currency_code: \"код на валута\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"вход\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"число\",\n        array: \"масив\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Невалиден вход: очакван instanceof ${issue.expected}, получен ${received}`;\n                }\n                return `Невалиден вход: очакван ${expected}, получен ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Невалиден вход: очакван ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Невалидна опция: очаквано едно от ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Твърде голямо: очаква се ${issue.origin ?? \"стойност\"} да съдържа ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"елемента\"}`;\n                return `Твърде голямо: очаква се ${issue.origin ?? \"стойност\"} да бъде ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Твърде малко: очаква се ${issue.origin} да съдържа ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Твърде малко: очаква се ${issue.origin} да бъде ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Невалиден низ: трябва да започва с \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Невалиден низ: трябва да завършва с \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Невалиден низ: трябва да включва \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Невалиден низ: трябва да съвпада с ${_issue.pattern}`;\n                let invalid_adj = \"Невалиден\";\n                if (_issue.format === \"emoji\")\n                    invalid_adj = \"Невалидно\";\n                if (_issue.format === \"datetime\")\n                    invalid_adj = \"Невалидно\";\n                if (_issue.format === \"date\")\n                    invalid_adj = \"Невалидна\";\n                if (_issue.format === \"time\")\n                    invalid_adj = \"Невалидно\";\n                if (_issue.format === \"duration\")\n                    invalid_adj = \"Невалидна\";\n                return `${invalid_adj} ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Невалидно число: трябва да бъде кратно на ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Неразпознат${issue.keys.length > 1 ? \"и\" : \"\"} ключ${issue.keys.length > 1 ? \"ове\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Невалиден ключ в ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Невалиден вход\";\n            case \"invalid_element\":\n                return `Невалидна стойност в ${issue.origin}`;\n            default:\n                return `Невалиден вход`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"অক্ষর\", verb: \"থাকতে হবে\" },\n        file: { unit: \"বাইট\", verb: \"থাকতে হবে\" },\n        array: { unit: \"আইটেম\", verb: \"থাকতে হবে\" },\n        set: { unit: \"আইটেম\", verb: \"থাকতে হবে\" },\n        map: { unit: \"এন্ট্রি\", verb: \"থাকতে হবে\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"ইনপুট\",\n        email: \"ইমেইল ঠিকানা\",\n        url: \"URL\",\n        emoji: \"ইমোজি\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO তারিখ ও সময়\",\n        date: \"ISO তারিখ\",\n        time: \"ISO সময়\",\n        duration: \"ISO সময়কাল\",\n        ipv4: \"IPv4 ঠিকানা\",\n        ipv6: \"IPv6 ঠিকানা\",\n        mac: \"MAC ঠিকানা\",\n        cidrv4: \"IPv4 রেঞ্জ\",\n        cidrv6: \"IPv6 রেঞ্জ\",\n        base64: \"base64-এনকোডেড স্ট্রিং\",\n        base64url: \"base64url-এনকোডেড স্ট্রিং\",\n        json_string: \"JSON স্ট্রিং\",\n        e164: \"E.164 নম্বর\",\n        credit_card: \"ক্রেডিট কার্ড নম্বর\",\n        currency_code: \"মুদ্রা কোড\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"ইনপুট\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                return `অবৈধ ইনপুট: প্রত্যাশিত ${expected}, প্রাপ্ত ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `অবৈধ ইনপুট: প্রত্যাশিত ${util.stringifyPrimitive(issue.values[0])}`;\n                return `অবৈধ অপশন: ${util.joinValues(issue.values, \" | \")} এর মধ্যে একটি প্রত্যাশিত`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `অনেক বড়: ${issue.origin ?? \"মান\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"এলিমেন্ট\"} হতে হবে`;\n                return `অনেক বড়: ${issue.origin ?? \"মান\"} ${adj}${issue.maximum.toString()} হতে হবে`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `অনেক ছোট: ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} হতে হবে`;\n                }\n                return `অনেক ছোট: ${issue.origin} ${adj}${issue.minimum.toString()} হতে হবে`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `অবৈধ স্ট্রিং: \"${_issue.prefix}\" দিয়ে শুরু হতে হবে`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `অবৈধ স্ট্রিং: \"${_issue.suffix}\" দিয়ে শেষ হতে হবে`;\n                if (_issue.format === \"includes\")\n                    return `অবৈধ স্ট্রিং: \"${_issue.includes}\" অন্তর্ভুক্ত থাকতে হবে`;\n                if (_issue.format === \"regex\")\n                    return `অবৈধ স্ট্রিং: ${_issue.pattern} প্যাটার্ন মিলতে হবে`;\n                return `অবৈধ ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `অবৈধ নম্বর: ${issue.divisor} এর গুণিতক হতে হবে`;\n            case \"unrecognized_keys\":\n                return `অচেনা কী${issue.keys.length > 1 ? \"গুলো\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} এ অবৈধ কী`;\n            case \"invalid_union\":\n                if (issue.options && Array.isArray(issue.options) && issue.options.length > 0) {\n                    const opts = issue.options.map((o) => `'${o}'`).join(\" | \");\n                    return `অবৈধ ডিসক্রিমিনেটর মান। প্রত্যাশিত ${opts}`;\n                }\n                return \"অবৈধ ইনপুট\";\n            case \"invalid_element\":\n                return `${issue.origin} এ অবৈধ মান`;\n            default:\n                return \"অবৈধ ইনপুট\";\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"caràcters\", verb: \"contenir\" },\n        file: { unit: \"bytes\", verb: \"contenir\" },\n        array: { unit: \"elements\", verb: \"contenir\" },\n        set: { unit: \"elements\", verb: \"contenir\" },\n        map: { unit: \"elements\", verb: \"contenir\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"entrada\",\n        email: \"adreça electrònica\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"data i hora ISO\",\n        date: \"data ISO\",\n        time: \"hora ISO\",\n        duration: \"durada ISO\",\n        ipv4: \"adreça IPv4\",\n        ipv6: \"adreça IPv6\",\n        mac: \"adreça MAC\",\n        cidrv4: \"rang IPv4\",\n        cidrv6: \"rang IPv6\",\n        base64: \"cadena codificada en base64\",\n        base64url: \"cadena codificada en base64url\",\n        json_string: \"cadena JSON\",\n        e164: \"número E.164\",\n        credit_card: \"número de targeta de crèdit\",\n        currency_code: \"codi de moneda\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"entrada\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Tipus invàlid: s'esperava instanceof ${issue.expected}, s'ha rebut ${received}`;\n                }\n                return `Tipus invàlid: s'esperava ${expected}, s'ha rebut ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Valor invàlid: s'esperava ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Opció invàlida: s'esperava una de ${util.joinValues(issue.values, \" o \")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"com a màxim\" : \"menys de\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Massa gran: s'esperava que ${issue.origin ?? \"el valor\"} contingués ${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"elements\"}`;\n                return `Massa gran: s'esperava que ${issue.origin ?? \"el valor\"} fos ${adj} ${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \"com a mínim\" : \"més de\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Massa petit: s'esperava que ${issue.origin} contingués ${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Massa petit: s'esperava que ${issue.origin} fos ${adj} ${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Format invàlid: ha de començar amb \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Format invàlid: ha d'acabar amb \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Format invàlid: ha d'incloure \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Format invàlid: ha de coincidir amb el patró ${_issue.pattern}`;\n                return `Format invàlid per a ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Número invàlid: ha de ser múltiple de ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Clau${issue.keys.length > 1 ? \"s\" : \"\"} no reconeguda${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Clau invàlida a ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Entrada invàlida\"; // Could also be \"Tipus d'unió invàlid\" but \"Entrada invàlida\" is more general\n            case \"invalid_element\":\n                return `Element invàlid a ${issue.origin}`;\n            default:\n                return `Entrada invàlida`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"پیت\", verb: \"بێت\" },\n        file: { unit: \"بایت\", verb: \"بێت\" },\n        array: { unit: \"دانە\", verb: \"بێت\" },\n        set: { unit: \"دانە\", verb: \"بێت\" },\n        map: { unit: \"دانە\", verb: \"بێت\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"regex\",\n        email: \"ئیمەیڵ\",\n        url: \"بەستەر (URL)\",\n        emoji: \"ئیمۆجی\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ڕێکەوت و کات\",\n        date: \"ڕێکەوت\",\n        time: \"کات\",\n        duration: \"ماوە\",\n        ipv4: \"ناونیشانی IPv4\",\n        ipv6: \"ناونیشانی IPv6\",\n        mac: \"ناونیشانی MAC\",\n        cidrv4: \"مەودای IPv4\",\n        cidrv6: \"مەودای IPv6\",\n        base64: \"دەقی base64\",\n        base64url: \"دەقی base64url\",\n        json_string: \"دەقی JSON\",\n        e164: \"ژمارەی E.164\",\n        credit_card: \"ژمارەی کارتی کرێدیت\",\n        currency_code: \"کۆدی دراو\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"تێکردە\",\n    };\n    // type names: missing keys = do not translate (use raw value via ?? fallback)\n    const TypeDictionary = {\n        nan: \"NaN\",\n        string: \"نووسین\",\n        number: \"ژمارە\",\n        boolean: \"boolean\",\n        array: \"array\",\n        object: \"object\",\n        date: \"ڕێکەوت\",\n        integer: \"ژمارە\",\n        float: \"ژمارە\",\n        null: \"null\",\n        undefined: \"undefined\",\n        function: \"function\",\n        symbol: \"symbol\",\n        unknown: \"unknown\",\n        promise: \"promise\",\n        void: \"void\",\n        never: \"never\",\n        map: \"map\",\n        set: \"set\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                const postfix = [\"ا\", \"و\", \"ۆ\", \"وو\", \"ە\", \"ی\", \"ێ\"].some((p) => received.endsWith(p)) ? \"یە\" : \"ە\";\n                const isEnglish = /^[a-zA-Z]+$/.test(received);\n                if (receivedType === \"null\" || receivedType === \"undefined\")\n                    return `داواکراوە`;\n                return `چاوەڕوانکراوە ${expected} بێت، بەڵام ${received}${isEnglish ? \"\" : postfix}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `بەهاکە نادرووستە: چاوەڕوانکراوە ${util.stringifyPrimitive(issue.values[0])} بێت`;\n                return `هەڵبژاردەی نادروست: چاوەڕوانکراوە یەکێک بێت لە ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `پێویستە بە لایەنی زۆرەوە ${issue.maximum.toString()} ${sizing.unit} ${sizing.verb}`;\n                return `پێویستە بە لایەنی زۆرەوە ${issue.maximum.toString()} بێت`;\n            }\n            case \"too_small\": {\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `پێویستە بە لایەنی کەمەوە ${issue.minimum.toString()} ${sizing.unit} ${sizing.verb}`;\n                return `پێویستە بە لایەنی کەمەوە ${issue.minimum.toString()} بێت`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `دەقی نادروست: پێویستە دەستپێبکات بە \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `دەقی نادروست: پێویستە کۆتاییبێت بە \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `دەقی نادروست: پێویستە \"${_issue.includes}\" لەخۆبگرێت`;\n                if (_issue.format === \"regex\")\n                    return `دەقی نادروست: پێویستە لەگەڵ پاتێرنی ${_issue.pattern} بگونجێت`;\n                return `بەهای ${FormatDictionary[_issue.format] ?? issue.format} نادروستە`;\n            }\n            case \"not_multiple_of\":\n                return `ژمارەی نادروست: دەبێت چەند هێندە بێت بۆ ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `کلیلی نەناسراو: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `کلیلی نادروست لە ${issue.origin}`;\n            case \"invalid_union\":\n                if (issue.options && Array.isArray(issue.options) && issue.options.length > 0) {\n                    const opts = issue.options.map((o) => `'${o}'`).join(\" | \");\n                    return `بەهای نەناسراو هەیە. بەهای چاوەڕوانکراو: ${opts}`;\n                }\n                return \"یەکگرتنی نادروست\";\n            case \"invalid_element\":\n                return `${issue.origin} بەهاکە نادروستە`;\n            default:\n                return `تێکردەی نادروست`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"znaků\", verb: \"mít\" },\n        file: { unit: \"bajtů\", verb: \"mít\" },\n        array: { unit: \"prvků\", verb: \"mít\" },\n        set: { unit: \"prvků\", verb: \"mít\" },\n        map: { unit: \"prvků\", verb: \"mít\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"regulární výraz\",\n        email: \"e-mailová adresa\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"datum a čas ve formátu ISO\",\n        date: \"datum ve formátu ISO\",\n        time: \"čas ve formátu ISO\",\n        duration: \"doba trvání ISO\",\n        ipv4: \"IPv4 adresa\",\n        ipv6: \"IPv6 adresa\",\n        mac: \"MAC adresa\",\n        cidrv4: \"rozsah IPv4\",\n        cidrv6: \"rozsah IPv6\",\n        base64: \"řetězec zakódovaný ve formátu base64\",\n        base64url: \"řetězec zakódovaný ve formátu base64url\",\n        json_string: \"řetězec ve formátu JSON\",\n        e164: \"číslo E.164\",\n        credit_card: \"číslo kreditní karty\",\n        currency_code: \"kód měny\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"vstup\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"číslo\",\n        string: \"řetězec\",\n        function: \"funkce\",\n        array: \"pole\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Neplatný vstup: očekáváno instanceof ${issue.expected}, obdrženo ${received}`;\n                }\n                return `Neplatný vstup: očekáváno ${expected}, obdrženo ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Neplatný vstup: očekáváno ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Neplatná možnost: očekávána jedna z hodnot ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Hodnota je příliš velká: ${issue.origin ?? \"hodnota\"} musí mít ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"prvků\"}`;\n                }\n                return `Hodnota je příliš velká: ${issue.origin ?? \"hodnota\"} musí být ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Hodnota je příliš malá: ${issue.origin ?? \"hodnota\"} musí mít ${adj}${issue.minimum.toString()} ${sizing.unit ?? \"prvků\"}`;\n                }\n                return `Hodnota je příliš malá: ${issue.origin ?? \"hodnota\"} musí být ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Neplatný řetězec: musí začínat na \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Neplatný řetězec: musí končit na \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Neplatný řetězec: musí obsahovat \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Neplatný řetězec: musí odpovídat vzoru ${_issue.pattern}`;\n                return `Neplatný formát ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Neplatné číslo: musí být násobkem ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Neznámé klíče: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Neplatný klíč v ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Neplatný vstup\";\n            case \"invalid_element\":\n                return `Neplatná hodnota v ${issue.origin}`;\n            default:\n                return `Neplatný vstup`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"tegn\", verb: \"havde\" },\n        file: { unit: \"bytes\", verb: \"havde\" },\n        array: { unit: \"elementer\", verb: \"indeholdt\" },\n        set: { unit: \"elementer\", verb: \"indeholdt\" },\n        map: { unit: \"elementer\", verb: \"indeholdt\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"input\",\n        email: \"e-mailadresse\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO dato- og klokkeslæt\",\n        date: \"ISO-dato\",\n        time: \"ISO-klokkeslæt\",\n        duration: \"ISO-varighed\",\n        ipv4: \"IPv4-adresse\",\n        ipv6: \"IPv6-adresse\",\n        mac: \"MAC-adresse\",\n        cidrv4: \"IPv4-spektrum\",\n        cidrv6: \"IPv6-spektrum\",\n        base64: \"base64-kodet streng\",\n        base64url: \"base64url-kodet streng\",\n        json_string: \"JSON-streng\",\n        e164: \"E.164-nummer\",\n        credit_card: \"kreditkortnummer\",\n        currency_code: \"valutakode\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        string: \"streng\",\n        number: \"tal\",\n        boolean: \"boolean\",\n        array: \"liste\",\n        object: \"objekt\",\n        set: \"sæt\",\n        file: \"fil\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Ugyldigt input: forventede instanceof ${issue.expected}, fik ${received}`;\n                }\n                return `Ugyldigt input: forventede ${expected}, fik ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Ugyldig værdi: forventede ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Ugyldigt valg: forventede en af følgende ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                const origin = TypeDictionary[issue.origin] ?? issue.origin;\n                if (sizing)\n                    return `For stor: forventede ${origin ?? \"value\"} ${sizing.verb} ${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"elementer\"}`;\n                return `For stor: forventede ${origin ?? \"value\"} havde ${adj} ${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                const origin = TypeDictionary[issue.origin] ?? issue.origin;\n                if (sizing) {\n                    return `For lille: forventede ${origin} ${sizing.verb} ${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `For lille: forventede ${origin} havde ${adj} ${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Ugyldig streng: skal starte med \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Ugyldig streng: skal ende med \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Ugyldig streng: skal indeholde \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Ugyldig streng: skal matche mønsteret ${_issue.pattern}`;\n                return `Ugyldig ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Ugyldigt tal: skal være deleligt med ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `${issue.keys.length > 1 ? \"Ukendte nøgler\" : \"Ukendt nøgle\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Ugyldig nøgle i ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Ugyldigt input: matcher ingen af de tilladte typer\";\n            case \"invalid_element\":\n                return `Ugyldig værdi i ${issue.origin}`;\n            default:\n                return `Ugyldigt input`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"Zeichen\", verb: \"zu haben\" },\n        file: { unit: \"Bytes\", verb: \"zu haben\" },\n        array: { unit: \"Elemente\", verb: \"zu haben\" },\n        set: { unit: \"Elemente\", verb: \"zu haben\" },\n        map: { unit: \"Elemente\", verb: \"zu haben\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"Eingabe\",\n        email: \"E-Mail-Adresse\",\n        url: \"URL\",\n        emoji: \"Emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO-Datum und -Uhrzeit\",\n        date: \"ISO-Datum\",\n        time: \"ISO-Uhrzeit\",\n        duration: \"ISO-Dauer\",\n        ipv4: \"IPv4-Adresse\",\n        ipv6: \"IPv6-Adresse\",\n        mac: \"MAC-Adresse\",\n        cidrv4: \"IPv4-Bereich\",\n        cidrv6: \"IPv6-Bereich\",\n        base64: \"Base64-codierter String\",\n        base64url: \"Base64-URL-codierter String\",\n        json_string: \"JSON-String\",\n        e164: \"E.164-Nummer\",\n        credit_card: \"Kreditkartennummer\",\n        currency_code: \"Währungscode\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"Eingabe\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"Zahl\",\n        array: \"Array\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Ungültige Eingabe: erwartet instanceof ${issue.expected}, erhalten ${received}`;\n                }\n                return `Ungültige Eingabe: erwartet ${expected}, erhalten ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Ungültige Eingabe: erwartet ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Ungültige Option: erwartet eine von ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Zu groß: erwartet, dass ${issue.origin ?? \"Wert\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"Elemente\"} hat`;\n                return `Zu groß: erwartet, dass ${issue.origin ?? \"Wert\"} ${adj}${issue.maximum.toString()} ist`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Zu klein: erwartet, dass ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} hat`;\n                }\n                return `Zu klein: erwartet, dass ${issue.origin} ${adj}${issue.minimum.toString()} ist`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Ungültiger String: muss mit \"${_issue.prefix}\" beginnen`;\n                if (_issue.format === \"ends_with\")\n                    return `Ungültiger String: muss mit \"${_issue.suffix}\" enden`;\n                if (_issue.format === \"includes\")\n                    return `Ungültiger String: muss \"${_issue.includes}\" enthalten`;\n                if (_issue.format === \"regex\")\n                    return `Ungültiger String: muss dem Muster ${_issue.pattern} entsprechen`;\n                return `Ungültig: ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Ungültige Zahl: muss ein Vielfaches von ${issue.divisor} sein`;\n            case \"unrecognized_keys\":\n                return `${issue.keys.length > 1 ? \"Unbekannte Schlüssel\" : \"Unbekannter Schlüssel\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Ungültiger Schlüssel in ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Ungültige Eingabe\";\n            case \"invalid_element\":\n                return `Ungültiger Wert in ${issue.origin}`;\n            default:\n                return `Ungültige Eingabe`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"χαρακτήρες\", verb: \"να έχει\" },\n        file: { unit: \"bytes\", verb: \"να έχει\" },\n        array: { unit: \"στοιχεία\", verb: \"να έχει\" },\n        set: { unit: \"στοιχεία\", verb: \"να έχει\" },\n        map: { unit: \"καταχωρήσεις\", verb: \"να έχει\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"είσοδος\",\n        email: \"διεύθυνση email\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO ημερομηνία και ώρα\",\n        date: \"ISO ημερομηνία\",\n        time: \"ISO ώρα\",\n        duration: \"ISO διάρκεια\",\n        ipv4: \"διεύθυνση IPv4\",\n        ipv6: \"διεύθυνση IPv6\",\n        mac: \"διεύθυνση MAC\",\n        cidrv4: \"εύρος IPv4\",\n        cidrv6: \"εύρος IPv6\",\n        base64: \"συμβολοσειρά κωδικοποιημένη σε base64\",\n        base64url: \"συμβολοσειρά κωδικοποιημένη σε base64url\",\n        json_string: \"συμβολοσειρά JSON\",\n        e164: \"αριθμός E.164\",\n        credit_card: \"αριθμός πιστωτικής κάρτας\",\n        currency_code: \"κωδικός νομίσματος\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"είσοδος\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (typeof issue.expected === \"string\" && /^[A-Z]/.test(issue.expected)) {\n                    return `Μη έγκυρη είσοδος: αναμενόταν instanceof ${issue.expected}, λήφθηκε ${received}`;\n                }\n                return `Μη έγκυρη είσοδος: αναμενόταν ${expected}, λήφθηκε ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Μη έγκυρη είσοδος: αναμενόταν ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Μη έγκυρη επιλογή: αναμενόταν ένα από ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Πολύ μεγάλο: αναμενόταν ${issue.origin ?? \"τιμή\"} να έχει ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"στοιχεία\"}`;\n                return `Πολύ μεγάλο: αναμενόταν ${issue.origin ?? \"τιμή\"} να είναι ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Πολύ μικρό: αναμενόταν ${issue.origin} να έχει ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Πολύ μικρό: αναμενόταν ${issue.origin} να είναι ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Μη έγκυρη συμβολοσειρά: πρέπει να ξεκινά με \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Μη έγκυρη συμβολοσειρά: πρέπει να τελειώνει με \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Μη έγκυρη συμβολοσειρά: πρέπει να περιέχει \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Μη έγκυρη συμβολοσειρά: πρέπει να ταιριάζει με το μοτίβο ${_issue.pattern}`;\n                return `Μη έγκυρο: ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Μη έγκυρος αριθμός: πρέπει να είναι πολλαπλάσιο του ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Άγνωστ${issue.keys.length > 1 ? \"α\" : \"ο\"} κλειδ${issue.keys.length > 1 ? \"ιά\" : \"ί\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Μη έγκυρο κλειδί στο ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Μη έγκυρη είσοδος\";\n            case \"invalid_element\":\n                return `Μη έγκυρη τιμή στο ${issue.origin}`;\n            default:\n                return `Μη έγκυρη είσοδος`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"characters\", verb: \"to have\" },\n        file: { unit: \"bytes\", verb: \"to have\" },\n        array: { unit: \"items\", verb: \"to have\" },\n        set: { unit: \"items\", verb: \"to have\" },\n        map: { unit: \"entries\", verb: \"to have\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"input\",\n        email: \"email address\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO datetime\",\n        date: \"ISO date\",\n        time: \"ISO time\",\n        duration: \"ISO duration\",\n        ipv4: \"IPv4 address\",\n        ipv6: \"IPv6 address\",\n        mac: \"MAC address\",\n        cidrv4: \"IPv4 range\",\n        cidrv6: \"IPv6 range\",\n        base64: \"base64-encoded string\",\n        base64url: \"base64url-encoded string\",\n        json_string: \"JSON string\",\n        e164: \"E.164 number\",\n        currency_code: \"currency code\",\n        credit_card: \"credit card number\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    // type names: missing keys = do not translate (use raw value via ?? fallback)\n    const TypeDictionary = {\n        // Compatibility: \"nan\" -> \"NaN\" for display\n        nan: \"NaN\",\n        // All other type names omitted - they fall back to raw values via ?? operator\n    };\n    function getTypeName(type, input) {\n        if (type === \"number\" && typeof input === \"number\" && !Number.isFinite(input)) {\n            return String(input);\n        }\n        return TypeDictionary[type] ?? type;\n    }\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = getTypeName(issue.expected);\n                const receivedType = util.parsedType(issue.input);\n                const received = getTypeName(receivedType, issue.input);\n                return `Invalid input: expected ${expected}, received ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Invalid input: expected ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Invalid option: expected one of ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.exact ? \"exactly \" : issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Too big: expected ${issue.origin ?? \"value\"} to have ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elements\"}`;\n                return `Too big: expected ${issue.origin ?? \"value\"} to be ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.exact ? \"exactly \" : issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Too small: expected ${issue.origin} to have ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Too small: expected ${issue.origin} to be ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Invalid string: must start with \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Invalid string: must end with \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Invalid string: must include \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Invalid string: must match pattern ${_issue.pattern}`;\n                return `Invalid ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Invalid number: must be a multiple of ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Unrecognized key${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Invalid key in ${issue.origin}`;\n            case \"invalid_union\":\n                if (issue.options && Array.isArray(issue.options) && issue.options.length > 0) {\n                    const opts = issue.options.map((o) => `'${o}'`).join(\" | \");\n                    return `Invalid discriminator value. Expected ${opts}`;\n                }\n                if (issue.inclusive === false) {\n                    return \"Invalid input: more than one option matched\";\n                }\n                return \"Invalid input\";\n            case \"invalid_element\":\n                return `Invalid value in ${issue.origin}`;\n            default:\n                return `Invalid input`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"karaktrojn\", verb: \"havi\" },\n        file: { unit: \"bajtojn\", verb: \"havi\" },\n        array: { unit: \"elementojn\", verb: \"havi\" },\n        set: { unit: \"elementojn\", verb: \"havi\" },\n        map: { unit: \"elementojn\", verb: \"havi\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"enigo\",\n        email: \"retadreso\",\n        url: \"URL\",\n        emoji: \"emoĝio\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO-datotempo\",\n        date: \"ISO-dato\",\n        time: \"ISO-tempo\",\n        duration: \"ISO-daŭro\",\n        ipv4: \"IPv4-adreso\",\n        ipv6: \"IPv6-adreso\",\n        mac: \"MAC-adreso\",\n        cidrv4: \"IPv4-rango\",\n        cidrv6: \"IPv6-rango\",\n        base64: \"64-ume kodita karaktraro\",\n        base64url: \"URL-64-ume kodita karaktraro\",\n        json_string: \"JSON-karaktraro\",\n        e164: \"E.164-nombro\",\n        credit_card: \"kreditkarta numero\",\n        currency_code: \"valuta kodo\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"enigo\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"nombro\",\n        array: \"tabelo\",\n        null: \"senvalora\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Nevalida enigo: atendiĝis instanceof ${issue.expected}, riceviĝis ${received}`;\n                }\n                return `Nevalida enigo: atendiĝis ${expected}, riceviĝis ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Nevalida enigo: atendiĝis ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Nevalida opcio: atendiĝis unu el ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Tro granda: atendiĝis ke ${issue.origin ?? \"valoro\"} havu ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementojn\"}`;\n                return `Tro granda: atendiĝis ke ${issue.origin ?? \"valoro\"} havu ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Tro malgranda: atendiĝis ke ${issue.origin} havu ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Tro malgranda: atendiĝis ke ${issue.origin} estu ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Nevalida karaktraro: devas komenciĝi per \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Nevalida karaktraro: devas finiĝi per \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Nevalida karaktraro: devas inkluzivi \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Nevalida karaktraro: devas kongrui kun la modelo ${_issue.pattern}`;\n                return `Nevalida ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Nevalida nombro: devas esti oblo de ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Nekonata${issue.keys.length > 1 ? \"j\" : \"\"} ŝlosilo${issue.keys.length > 1 ? \"j\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Nevalida ŝlosilo en ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Nevalida enigo\";\n            case \"invalid_element\":\n                return `Nevalida valoro en ${issue.origin}`;\n            default:\n                return `Nevalida enigo`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"caracteres\", verb: \"tener\" },\n        file: { unit: \"bytes\", verb: \"tener\" },\n        array: { unit: \"elementos\", verb: \"tener\" },\n        set: { unit: \"elementos\", verb: \"tener\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"entrada\",\n        email: \"dirección de correo electrónico\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"fecha y hora ISO\",\n        date: \"fecha ISO\",\n        time: \"hora ISO\",\n        duration: \"duración ISO\",\n        ipv4: \"dirección IPv4\",\n        ipv6: \"dirección IPv6\",\n        mac: \"dirección MAC\",\n        cidrv4: \"rango IPv4\",\n        cidrv6: \"rango IPv6\",\n        base64: \"cadena codificada en base64\",\n        base64url: \"URL codificada en base64\",\n        json_string: \"cadena JSON\",\n        e164: \"número E.164\",\n        credit_card: \"número de tarjeta de crédito\",\n        currency_code: \"código de moneda\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"entrada\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        string: \"texto\",\n        number: \"número\",\n        boolean: \"booleano\",\n        array: \"arreglo\",\n        object: \"objeto\",\n        set: \"conjunto\",\n        file: \"archivo\",\n        date: \"fecha\",\n        bigint: \"número grande\",\n        symbol: \"símbolo\",\n        undefined: \"indefinido\",\n        null: \"nulo\",\n        function: \"función\",\n        map: \"mapa\",\n        record: \"registro\",\n        tuple: \"tupla\",\n        enum: \"enumeración\",\n        union: \"unión\",\n        literal: \"literal\",\n        promise: \"promesa\",\n        void: \"vacío\",\n        never: \"nunca\",\n        unknown: \"desconocido\",\n        any: \"cualquiera\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Entrada inválida: se esperaba instanceof ${issue.expected}, recibido ${received}`;\n                }\n                return `Entrada inválida: se esperaba ${expected}, recibido ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Entrada inválida: se esperaba ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Opción inválida: se esperaba una de ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                const origin = TypeDictionary[issue.origin] ?? issue.origin;\n                if (sizing)\n                    return `Demasiado grande: se esperaba que ${origin ?? \"valor\"} tuviera ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementos\"}`;\n                return `Demasiado grande: se esperaba que ${origin ?? \"valor\"} fuera ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                const origin = TypeDictionary[issue.origin] ?? issue.origin;\n                if (sizing) {\n                    return `Demasiado pequeño: se esperaba que ${origin} tuviera ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Demasiado pequeño: se esperaba que ${origin} fuera ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Cadena inválida: debe comenzar con \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Cadena inválida: debe terminar en \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Cadena inválida: debe incluir \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Cadena inválida: debe coincidir con el patrón ${_issue.pattern}`;\n                return `Inválido ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Número inválido: debe ser múltiplo de ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Llave${issue.keys.length > 1 ? \"s\" : \"\"} desconocida${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Llave inválida en ${TypeDictionary[issue.origin] ?? issue.origin}`;\n            case \"invalid_union\":\n                return \"Entrada inválida\";\n            case \"invalid_element\":\n                return `Valor inválido en ${TypeDictionary[issue.origin] ?? issue.origin}`;\n            default:\n                return `Entrada inválida`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"کاراکتر\", verb: \"داشته باشد\" },\n        file: { unit: \"بایت\", verb: \"داشته باشد\" },\n        array: { unit: \"آیتم\", verb: \"داشته باشد\" },\n        set: { unit: \"آیتم\", verb: \"داشته باشد\" },\n        map: { unit: \"آیتم\", verb: \"داشته باشد\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"ورودی\",\n        email: \"آدرس ایمیل\",\n        url: \"URL\",\n        emoji: \"ایموجی\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"تاریخ و زمان ایزو\",\n        date: \"تاریخ ایزو\",\n        time: \"زمان ایزو\",\n        duration: \"مدت زمان ایزو\",\n        ipv4: \"IPv4 آدرس\",\n        ipv6: \"IPv6 آدرس\",\n        mac: \"MAC آدرس\",\n        cidrv4: \"IPv4 دامنه\",\n        cidrv6: \"IPv6 دامنه\",\n        base64: \"base64-encoded رشته\",\n        base64url: \"base64url-encoded رشته\",\n        json_string: \"JSON رشته\",\n        e164: \"E.164 عدد\",\n        credit_card: \"شماره کارت اعتباری\",\n        currency_code: \"کد ارز\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"ورودی\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"عدد\",\n        array: \"آرایه\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `ورودی نامعتبر: می‌بایست instanceof ${issue.expected} می‌بود، ${received} دریافت شد`;\n                }\n                return `ورودی نامعتبر: می‌بایست ${expected} می‌بود، ${received} دریافت شد`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1) {\n                    return `ورودی نامعتبر: می‌بایست ${util.stringifyPrimitive(issue.values[0])} می‌بود`;\n                }\n                return `گزینه نامعتبر: می‌بایست یکی از ${util.joinValues(issue.values, \"|\")} می‌بود`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `خیلی بزرگ: ${issue.origin ?? \"مقدار\"} باید ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"عنصر\"} باشد`;\n                }\n                return `خیلی بزرگ: ${issue.origin ?? \"مقدار\"} باید ${adj}${issue.maximum.toString()} باشد`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `خیلی کوچک: ${issue.origin} باید ${adj}${issue.minimum.toString()} ${sizing.unit} باشد`;\n                }\n                return `خیلی کوچک: ${issue.origin} باید ${adj}${issue.minimum.toString()} باشد`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `رشته نامعتبر: باید با \"${_issue.prefix}\" شروع شود`;\n                }\n                if (_issue.format === \"ends_with\") {\n                    return `رشته نامعتبر: باید با \"${_issue.suffix}\" تمام شود`;\n                }\n                if (_issue.format === \"includes\") {\n                    return `رشته نامعتبر: باید شامل \"${_issue.includes}\" باشد`;\n                }\n                if (_issue.format === \"regex\") {\n                    return `رشته نامعتبر: باید با الگوی ${_issue.pattern} مطابقت داشته باشد`;\n                }\n                return `${FormatDictionary[_issue.format] ?? issue.format} نامعتبر`;\n            }\n            case \"not_multiple_of\":\n                return `عدد نامعتبر: باید مضرب ${issue.divisor} باشد`;\n            case \"unrecognized_keys\":\n                return `کلید${issue.keys.length > 1 ? \"های\" : \"\"} ناشناس: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `کلید ناشناس در ${issue.origin}`;\n            case \"invalid_union\":\n                return `ورودی نامعتبر`;\n            case \"invalid_element\":\n                return `مقدار نامعتبر در ${issue.origin}`;\n            default:\n                return `ورودی نامعتبر`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"merkkiä\", subject: \"merkkijonon\" },\n        file: { unit: \"tavua\", subject: \"tiedoston\" },\n        array: { unit: \"alkiota\", subject: \"listan\" },\n        set: { unit: \"alkiota\", subject: \"joukon\" },\n        map: { unit: \"alkiota\", subject: \"kuvauksen\" },\n        number: { unit: \"\", subject: \"luvun\" },\n        bigint: { unit: \"\", subject: \"suuren kokonaisluvun\" },\n        int: { unit: \"\", subject: \"kokonaisluvun\" },\n        date: { unit: \"\", subject: \"päivämäärän\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"säännöllinen lauseke\",\n        email: \"sähköpostiosoite\",\n        url: \"URL-osoite\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO-aikaleima\",\n        date: \"ISO-päivämäärä\",\n        time: \"ISO-aika\",\n        duration: \"ISO-kesto\",\n        ipv4: \"IPv4-osoite\",\n        ipv6: \"IPv6-osoite\",\n        mac: \"MAC-osoite\",\n        cidrv4: \"IPv4-alue\",\n        cidrv6: \"IPv6-alue\",\n        base64: \"base64-koodattu merkkijono\",\n        base64url: \"base64url-koodattu merkkijono\",\n        json_string: \"JSON-merkkijono\",\n        e164: \"E.164-luku\",\n        credit_card: \"luottokortin numero\",\n        currency_code: \"valuuttakoodi\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"templaattimerkkijono\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Virheellinen tyyppi: odotettiin instanceof ${issue.expected}, oli ${received}`;\n                }\n                return `Virheellinen tyyppi: odotettiin ${expected}, oli ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Virheellinen syöte: täytyy olla ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Virheellinen valinta: täytyy olla yksi seuraavista: ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Liian suuri: ${sizing.subject} täytyy olla ${adj}${issue.maximum.toString()} ${sizing.unit}`.trim();\n                }\n                return `Liian suuri: arvon täytyy olla ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Liian pieni: ${sizing.subject} täytyy olla ${adj}${issue.minimum.toString()} ${sizing.unit}`.trim();\n                }\n                return `Liian pieni: arvon täytyy olla ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Virheellinen syöte: täytyy alkaa \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Virheellinen syöte: täytyy loppua \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Virheellinen syöte: täytyy sisältää \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\") {\n                    return `Virheellinen syöte: täytyy vastata säännöllistä lauseketta ${_issue.pattern}`;\n                }\n                return `Virheellinen ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Virheellinen luku: täytyy olla luvun ${issue.divisor} monikerta`;\n            case \"unrecognized_keys\":\n                return `${issue.keys.length > 1 ? \"Tuntemattomat avaimet\" : \"Tuntematon avain\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return \"Virheellinen avain tietueessa\";\n            case \"invalid_union\":\n                return \"Virheellinen unioni\";\n            case \"invalid_element\":\n                return \"Virheellinen arvo joukossa\";\n            default:\n                return `Virheellinen syöte`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"caractères\", verb: \"avoir\" },\n        file: { unit: \"octets\", verb: \"avoir\" },\n        array: { unit: \"éléments\", verb: \"avoir\" },\n        set: { unit: \"éléments\", verb: \"avoir\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"expression régulière\",\n        email: \"adresse e-mail\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"date et heure ISO\",\n        date: \"date ISO\",\n        time: \"heure ISO\",\n        duration: \"durée ISO\",\n        ipv4: \"adresse IPv4\",\n        ipv6: \"adresse IPv6\",\n        mac: \"adresse MAC\",\n        cidrv4: \"plage IPv4\",\n        cidrv6: \"plage IPv6\",\n        base64: \"chaîne de caractères encodée en base64\",\n        base64url: \"chaîne de caractères encodée en base64url\",\n        json_string: \"chaîne de caractères JSON\",\n        e164: \"numéro au format E.164\",\n        credit_card: \"numéro de carte de crédit\",\n        currency_code: \"code de devise\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"entrée\",\n    };\n    const TypeDictionary = {\n        string: \"chaîne de caractères\",\n        number: \"nombre\",\n        int: \"entier\",\n        boolean: \"booléen\",\n        bigint: \"grand entier\",\n        symbol: \"symbole\",\n        undefined: \"indéfini\",\n        null: \"null\",\n        never: \"jamais\",\n        void: \"vide\",\n        date: \"date\",\n        array: \"tableau\",\n        object: \"objet\",\n        tuple: \"tuple\",\n        record: \"record\",\n        map: \"map\",\n        set: \"ensemble\",\n        file: \"fichier\",\n        nonoptional: \"non optionnel\",\n        nan: \"NaN\",\n        function: \"fonction\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Entrée invalide : instance de ${issue.expected} attendu, ${received} reçu`;\n                }\n                return `Entrée invalide : ${expected} attendu, ${received} reçu`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Entrée invalide : ${util.stringifyPrimitive(issue.values[0])} attendu`;\n                return `Option invalide : une valeur parmi ${util.joinValues(issue.values, \"|\")} attendue`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Trop grand : ${TypeDictionary[issue.origin] ?? \"valeur\"} doit ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"élément(s)\"}`;\n                return `Trop grand : ${TypeDictionary[issue.origin] ?? \"valeur\"} doit être ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Trop petit : ${TypeDictionary[issue.origin] ?? \"valeur\"} doit ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                return `Trop petit : ${TypeDictionary[issue.origin] ?? \"valeur\"} doit être ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Chaîne de caractères invalide : doit commencer par \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Chaîne de caractères invalide : doit se terminer par \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Chaîne de caractères invalide : doit inclure \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Chaîne de caractères invalide : doit correspondre au motif ${_issue.pattern}`;\n                return `${FormatDictionary[_issue.format] ?? issue.format} invalide`;\n            }\n            case \"not_multiple_of\":\n                return `Nombre invalide : doit être un multiple de ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Clé${issue.keys.length > 1 ? \"s\" : \"\"} non reconnue${issue.keys.length > 1 ? \"s\" : \"\"} : ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Clé invalide dans ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Entrée invalide\";\n            case \"invalid_element\":\n                return `Valeur invalide dans ${issue.origin}`;\n            default:\n                return `Entrée invalide`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"caractères\", verb: \"avoir\" },\n        file: { unit: \"octets\", verb: \"avoir\" },\n        array: { unit: \"éléments\", verb: \"avoir\" },\n        set: { unit: \"éléments\", verb: \"avoir\" },\n        map: { unit: \"éléments\", verb: \"avoir\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"entrée\",\n        email: \"adresse courriel\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"date-heure ISO\",\n        date: \"date ISO\",\n        time: \"heure ISO\",\n        duration: \"durée ISO\",\n        ipv4: \"adresse IPv4\",\n        ipv6: \"adresse IPv6\",\n        mac: \"adresse MAC\",\n        cidrv4: \"plage IPv4\",\n        cidrv6: \"plage IPv6\",\n        base64: \"chaîne encodée en base64\",\n        base64url: \"chaîne encodée en base64url\",\n        json_string: \"chaîne JSON\",\n        e164: \"numéro E.164\",\n        credit_card: \"numéro de carte de crédit\",\n        currency_code: \"code de devise\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"entrée\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Entrée invalide : attendu instanceof ${issue.expected}, reçu ${received}`;\n                }\n                return `Entrée invalide : attendu ${expected}, reçu ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Entrée invalide : attendu ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Option invalide : attendu l'une des valeurs suivantes ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"≤\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Trop grand : attendu que ${issue.origin ?? \"la valeur\"} ait ${adj}${issue.maximum.toString()} ${sizing.unit}`;\n                return `Trop grand : attendu que ${issue.origin ?? \"la valeur\"} soit ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \"≥\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Trop petit : attendu que ${issue.origin} ait ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Trop petit : attendu que ${issue.origin} soit ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Chaîne invalide : doit commencer par \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Chaîne invalide : doit se terminer par \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Chaîne invalide : doit inclure \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Chaîne invalide : doit correspondre au motif ${_issue.pattern}`;\n                return `${FormatDictionary[_issue.format] ?? issue.format} invalide`;\n            }\n            case \"not_multiple_of\":\n                return `Nombre invalide : doit être un multiple de ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Clé${issue.keys.length > 1 ? \"s\" : \"\"} non reconnue${issue.keys.length > 1 ? \"s\" : \"\"} : ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Clé invalide dans ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Entrée invalide\";\n            case \"invalid_element\":\n                return `Valeur invalide dans ${issue.origin}`;\n            default:\n                return `Entrée invalide`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"અક્ષર\", verb: \"હોવા જોઈએ\" },\n        file: { unit: \"બાયટ\", verb: \"હોવા જોઈએ\" },\n        array: { unit: \"આઇટમ\", verb: \"હોવા જોઈએ\" },\n        set: { unit: \"આઇટમ\", verb: \"હોવા જોઈએ\" },\n        map: { unit: \"એન્ટ્રી\", verb: \"હોવા જોઈએ\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"ઇનપુટ\",\n        email: \"ઈમેઇલ એડ્રેસ\",\n        url: \"URL\",\n        emoji: \"ઇમોજી\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO તારીખ અને સમય\",\n        date: \"ISO તારીખ\",\n        time: \"ISO સમય\",\n        duration: \"ISO અવધિ\",\n        ipv4: \"IPv4 એડ્રેસ\",\n        ipv6: \"IPv6 એડ્રેસ\",\n        mac: \"MAC એડ્રેસ\",\n        cidrv4: \"IPv4 શ્રેણી\",\n        cidrv6: \"IPv6 શ્રેણી\",\n        base64: \"base64-એન્કોડેડ સ્ટ્રિંગ\",\n        base64url: \"base64url-એન્કોડેડ સ્ટ્રિંગ\",\n        json_string: \"JSON સ્ટ્રિંગ\",\n        e164: \"E.164 નંબર\",\n        credit_card: \"ક્રેડિટ કાર્ડ નંબર\",\n        currency_code: \"ચલણ કોડ\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"ઇનપુટ\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                return `અમાન્ય ઇનપુટ: અપેક્ષિત ${expected}, પ્રાપ્ત ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `અમાન્ય ઇનપુટ: અપેક્ષિત ${util.stringifyPrimitive(issue.values[0])}`;\n                return `અમાન્ય વિકલ્પ: ${util.joinValues(issue.values, \" | \")} માધ્યમથી એક અપેક્ષિત`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `ખૂબ મોટું: ${issue.origin ?? \"મૂલ્ય\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"એલિમેન્ટ\"} હોવા જોઈએ`;\n                return `ખૂબ મોટું: ${issue.origin ?? \"મૂલ્ય\"} ${adj}${issue.maximum.toString()} હોવું જોઈએ`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `ખૂબ નાનું: ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} હોવા જોઈએ`;\n                }\n                return `ખૂબ નાનું: ${issue.origin} ${adj}${issue.minimum.toString()} હોવું જોઈએ`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `અમાન્ય સ્ટ્રિંગ: \"${_issue.prefix}\" થી શરૂ થવું જોઈએ`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `અમાન્ય સ્ટ્રિંગ: \"${_issue.suffix}\" પર સમાપ્ત થવું જોઈએ`;\n                if (_issue.format === \"includes\")\n                    return `અમાન્ય સ્ટ્રિંગ: \"${_issue.includes}\" શામેલ હોવું જોઈએ`;\n                if (_issue.format === \"regex\")\n                    return `અમાન્ય સ્ટ્રિંગ: પેટર્ન ${_issue.pattern} સાથે મેળ ખાવું જોઈએ`;\n                return `અમાન્ય ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `અમાન્ય નંબર: ${issue.divisor} નો ગુણાંક હોવો જોઈએ`;\n            case \"unrecognized_keys\":\n                return `ઓળખી શકાતા નહીં તે કી${issue.keys.length > 1 ? \"ઓ\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} માં અમાન્ય કી`;\n            case \"invalid_union\":\n                if (issue.options && Array.isArray(issue.options) && issue.options.length > 0) {\n                    const opts = issue.options.map((o) => `'${o}'`).join(\" | \");\n                    return `અમાન્ય ડિસ્ક્રિમિનેટર મૂલ્ય. અપેક્ષિત ${opts}`;\n                }\n                return \"અમાન્ય ઇનપુટ\";\n            case \"invalid_element\":\n                return `${issue.origin} માં અમાન્ય મૂલ્ય`;\n            default:\n                return \"અમાન્ય ઇનપુટ\";\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    // Hebrew labels + grammatical gender\n    const TypeNames = {\n        string: { label: \"מחרוזת\", gender: \"f\" },\n        number: { label: \"מספר\", gender: \"m\" },\n        boolean: { label: \"ערך בוליאני\", gender: \"m\" },\n        bigint: { label: \"BigInt\", gender: \"m\" },\n        date: { label: \"תאריך\", gender: \"m\" },\n        array: { label: \"מערך\", gender: \"m\" },\n        object: { label: \"אובייקט\", gender: \"m\" },\n        null: { label: \"ערך ריק (null)\", gender: \"m\" },\n        undefined: { label: \"ערך לא מוגדר (undefined)\", gender: \"m\" },\n        symbol: { label: \"סימבול (Symbol)\", gender: \"m\" },\n        function: { label: \"פונקציה\", gender: \"f\" },\n        map: { label: \"מפה (Map)\", gender: \"f\" },\n        set: { label: \"קבוצה (Set)\", gender: \"f\" },\n        file: { label: \"קובץ\", gender: \"m\" },\n        promise: { label: \"Promise\", gender: \"m\" },\n        NaN: { label: \"NaN\", gender: \"m\" },\n        unknown: { label: \"ערך לא ידוע\", gender: \"m\" },\n        value: { label: \"ערך\", gender: \"m\" },\n    };\n    // Sizing units for size-related messages + localized origin labels\n    const Sizable = {\n        string: { unit: \"תווים\", shortLabel: \"קצר\", longLabel: \"ארוך\" },\n        file: { unit: \"בייטים\", shortLabel: \"קטן\", longLabel: \"גדול\" },\n        array: { unit: \"פריטים\", shortLabel: \"קטן\", longLabel: \"גדול\" },\n        set: { unit: \"פריטים\", shortLabel: \"קטן\", longLabel: \"גדול\" },\n        number: { unit: \"\", shortLabel: \"קטן\", longLabel: \"גדול\" }, // no unit\n    };\n    // Helpers — labels, articles, and verbs\n    const typeEntry = (t) => (t ? TypeNames[t] : undefined);\n    const typeLabel = (t) => {\n        const e = typeEntry(t);\n        if (e)\n            return e.label;\n        // fallback: show raw string if unknown\n        return t ?? TypeNames.unknown.label;\n    };\n    const withDefinite = (t) => `ה${typeLabel(t)}`;\n    const verbFor = (t) => {\n        const e = typeEntry(t);\n        const gender = e?.gender ?? \"m\";\n        return gender === \"f\" ? \"צריכה להיות\" : \"צריך להיות\";\n    };\n    const getSizing = (origin) => {\n        if (!origin)\n            return null;\n        return Sizable[origin] ?? null;\n    };\n    const FormatDictionary = {\n        regex: { label: \"קלט\", gender: \"m\" },\n        email: { label: \"כתובת אימייל\", gender: \"f\" },\n        url: { label: \"כתובת רשת\", gender: \"f\" },\n        emoji: { label: \"אימוג'י\", gender: \"m\" },\n        uuid: { label: \"UUID\", gender: \"m\" },\n        uuidv4: { label: \"UUIDv4\", gender: \"m\" },\n        uuidv6: { label: \"UUIDv6\", gender: \"m\" },\n        nanoid: { label: \"nanoid\", gender: \"m\" },\n        guid: { label: \"GUID\", gender: \"m\" },\n        cuid: { label: \"cuid\", gender: \"m\" },\n        cuid2: { label: \"cuid2\", gender: \"m\" },\n        ulid: { label: \"ULID\", gender: \"m\" },\n        xid: { label: \"XID\", gender: \"m\" },\n        ksuid: { label: \"KSUID\", gender: \"m\" },\n        datetime: { label: \"תאריך וזמן ISO\", gender: \"m\" },\n        date: { label: \"תאריך ISO\", gender: \"m\" },\n        time: { label: \"זמן ISO\", gender: \"m\" },\n        duration: { label: \"משך זמן ISO\", gender: \"m\" },\n        ipv4: { label: \"כתובת IPv4\", gender: \"f\" },\n        ipv6: { label: \"כתובת IPv6\", gender: \"f\" },\n        mac: { label: \"כתובת MAC\", gender: \"f\" },\n        cidrv4: { label: \"טווח IPv4\", gender: \"m\" },\n        cidrv6: { label: \"טווח IPv6\", gender: \"m\" },\n        base64: { label: \"מחרוזת בבסיס 64\", gender: \"f\" },\n        base64url: { label: \"מחרוזת בבסיס 64 לכתובות רשת\", gender: \"f\" },\n        json_string: { label: \"מחרוזת JSON\", gender: \"f\" },\n        e164: { label: \"מספר E.164\", gender: \"m\" },\n        credit_card: { label: \"מספר כרטיס אשראי\", gender: \"m\" },\n        currency_code: { label: \"קוד מטבע\", gender: \"m\" },\n        iban: { label: \"IBAN\", gender: \"m\" },\n        jwt: { label: \"JWT\", gender: \"m\" },\n        template_literal: { label: \"קלט\", gender: \"m\" },\n        ends_with: { label: \"קלט\", gender: \"m\" },\n        includes: { label: \"קלט\", gender: \"m\" },\n        lowercase: { label: \"קלט\", gender: \"m\" },\n        starts_with: { label: \"קלט\", gender: \"m\" },\n        uppercase: { label: \"קלט\", gender: \"m\" },\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                // Expected type: show without definite article for clearer Hebrew\n                const expectedKey = issue.expected;\n                const expected = TypeDictionary[expectedKey ?? \"\"] ?? typeLabel(expectedKey);\n                // Received: show localized label if known, otherwise constructor/raw\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? TypeNames[receivedType]?.label ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `קלט לא תקין: צריך להיות instanceof ${issue.expected}, התקבל ${received}`;\n                }\n                return `קלט לא תקין: צריך להיות ${expected}, התקבל ${received}`;\n            }\n            case \"invalid_value\": {\n                if (issue.values.length === 1) {\n                    return `ערך לא תקין: הערך חייב להיות ${util.stringifyPrimitive(issue.values[0])}`;\n                }\n                // Join values with proper Hebrew formatting\n                const stringified = issue.values.map((v) => util.stringifyPrimitive(v));\n                if (issue.values.length === 2) {\n                    return `ערך לא תקין: האפשרויות המתאימות הן ${stringified[0]} או ${stringified[1]}`;\n                }\n                // For 3+ values: \"a\", \"b\" או \"c\"\n                const lastValue = stringified[stringified.length - 1];\n                const restValues = stringified.slice(0, -1).join(\", \");\n                return `ערך לא תקין: האפשרויות המתאימות הן ${restValues} או ${lastValue}`;\n            }\n            case \"too_big\": {\n                const sizing = getSizing(issue.origin);\n                const subject = withDefinite(issue.origin ?? \"value\");\n                if (issue.origin === \"string\") {\n                    // Special handling for strings - more natural Hebrew\n                    return `${sizing?.longLabel ?? \"ארוך\"} מדי: ${subject} צריכה להכיל ${issue.maximum.toString()} ${sizing?.unit ?? \"\"} ${issue.inclusive ? \"או פחות\" : \"לכל היותר\"}`.trim();\n                }\n                if (issue.origin === \"number\") {\n                    // Natural Hebrew for numbers\n                    const comparison = issue.inclusive ? `קטן או שווה ל-${issue.maximum}` : `קטן מ-${issue.maximum}`;\n                    return `גדול מדי: ${subject} צריך להיות ${comparison}`;\n                }\n                if (issue.origin === \"array\" || issue.origin === \"set\") {\n                    // Natural Hebrew for arrays and sets\n                    const verb = issue.origin === \"set\" ? \"צריכה\" : \"צריך\";\n                    const comparison = issue.inclusive\n                        ? `${issue.maximum} ${sizing?.unit ?? \"\"} או פחות`\n                        : `פחות מ-${issue.maximum} ${sizing?.unit ?? \"\"}`;\n                    return `גדול מדי: ${subject} ${verb} להכיל ${comparison}`.trim();\n                }\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const be = verbFor(issue.origin ?? \"value\");\n                if (sizing?.unit) {\n                    return `${sizing.longLabel} מדי: ${subject} ${be} ${adj}${issue.maximum.toString()} ${sizing.unit}`;\n                }\n                return `${sizing?.longLabel ?? \"גדול\"} מדי: ${subject} ${be} ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const sizing = getSizing(issue.origin);\n                const subject = withDefinite(issue.origin ?? \"value\");\n                if (issue.origin === \"string\") {\n                    // Special handling for strings - more natural Hebrew\n                    return `${sizing?.shortLabel ?? \"קצר\"} מדי: ${subject} צריכה להכיל ${issue.minimum.toString()} ${sizing?.unit ?? \"\"} ${issue.inclusive ? \"או יותר\" : \"לפחות\"}`.trim();\n                }\n                if (issue.origin === \"number\") {\n                    // Natural Hebrew for numbers\n                    const comparison = issue.inclusive ? `גדול או שווה ל-${issue.minimum}` : `גדול מ-${issue.minimum}`;\n                    return `קטן מדי: ${subject} צריך להיות ${comparison}`;\n                }\n                if (issue.origin === \"array\" || issue.origin === \"set\") {\n                    // Natural Hebrew for arrays and sets\n                    const verb = issue.origin === \"set\" ? \"צריכה\" : \"צריך\";\n                    // Special case for singular (minimum === 1)\n                    if (issue.minimum === 1 && issue.inclusive) {\n                        const singularPhrase = issue.origin === \"set\" ? \"לפחות פריט אחד\" : \"לפחות פריט אחד\";\n                        return `קטן מדי: ${subject} ${verb} להכיל ${singularPhrase}`;\n                    }\n                    const comparison = issue.inclusive\n                        ? `${issue.minimum} ${sizing?.unit ?? \"\"} או יותר`\n                        : `יותר מ-${issue.minimum} ${sizing?.unit ?? \"\"}`;\n                    return `קטן מדי: ${subject} ${verb} להכיל ${comparison}`.trim();\n                }\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const be = verbFor(issue.origin ?? \"value\");\n                if (sizing?.unit) {\n                    return `${sizing.shortLabel} מדי: ${subject} ${be} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `${sizing?.shortLabel ?? \"קטן\"} מדי: ${subject} ${be} ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                // These apply to strings — use feminine grammar + ה׳ הידיעה\n                if (_issue.format === \"starts_with\")\n                    return `המחרוזת חייבת להתחיל ב \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `המחרוזת חייבת להסתיים ב \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `המחרוזת חייבת לכלול \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `המחרוזת חייבת להתאים לתבנית ${_issue.pattern}`;\n                // Handle gender agreement for formats\n                const nounEntry = FormatDictionary[_issue.format];\n                const noun = nounEntry?.label ?? _issue.format;\n                const gender = nounEntry?.gender ?? \"m\";\n                const adjective = gender === \"f\" ? \"תקינה\" : \"תקין\";\n                return `${noun} לא ${adjective}`;\n            }\n            case \"not_multiple_of\":\n                return `מספר לא תקין: חייב להיות מכפלה של ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `מפתח${issue.keys.length > 1 ? \"ות\" : \"\"} לא מזוה${issue.keys.length > 1 ? \"ים\" : \"ה\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\": {\n                return `שדה לא תקין באובייקט`;\n            }\n            case \"invalid_union\":\n                return \"קלט לא תקין\";\n            case \"invalid_element\": {\n                const place = withDefinite(issue.origin ?? \"array\");\n                return `ערך לא תקין ב${place}`;\n            }\n            default:\n                return `קלט לא תקין`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"अक्षर\", verb: \"रखने के लिए\" },\n        file: { unit: \"बाइट्स\", verb: \"रखने के लिए\" },\n        array: { unit: \"तत्व\", verb: \"रखने के लिए\" },\n        set: { unit: \"तत्व\", verb: \"रखने के लिए\" },\n        map: { unit: \"प्रविष्टियाँ\", verb: \"रखने के लिए\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"इनपुट\",\n        email: \"ईमेल पता\",\n        url: \"URL\",\n        emoji: \"इमोजी\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO तिथि और समय\",\n        date: \"ISO तिथि\",\n        time: \"ISO समय\",\n        duration: \"ISO अवधि\",\n        ipv4: \"IPv4 पता\",\n        ipv6: \"IPv6 पता\",\n        mac: \"MAC पता\",\n        cidrv4: \"IPv4 श्रेणी\",\n        cidrv6: \"IPv6 श्रेणी\",\n        base64: \"Base64-एन्कोडेड स्ट्रिंग\",\n        base64url: \"Base64URL-एन्कोडेड स्ट्रिंग\",\n        json_string: \"JSON स्ट्रिंग\",\n        e164: \"E.164 संख्या\",\n        credit_card: \"क्रेडिट कार्ड संख्या\",\n        currency_code: \"मुद्रा कोड\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"इनपुट\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                return `अमान्य इनपुट: अपेक्षित ${expected}, प्राप्त ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `अमान्य इनपुट: अपेक्षित ${util.stringifyPrimitive(issue.values[0])}`;\n                return `अमान्य विकल्प: अपेक्षित मानों में से एक ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `बहुत बड़ा: अपेक्षित था कि ${issue.origin ?? \"मान\"} में ${adj}${issue.maximum} ${sizing.unit} हों`;\n                return `बहुत बड़ा: अपेक्षित था कि ${issue.origin ?? \"मान\"} ${adj}${issue.maximum} हो`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `बहुत छोटा: अपेक्षित था कि ${issue.origin} में ${adj}${issue.minimum} ${sizing.unit} हों`;\n                return `बहुत छोटा: अपेक्षित था कि ${issue.origin} ${adj}${issue.minimum} हो`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `अमान्य स्ट्रिंग: \"${_issue.prefix}\" से शुरू होना चाहिए`;\n                if (_issue.format === \"ends_with\")\n                    return `अमान्य स्ट्रिंग: \"${_issue.suffix}\" पर समाप्त होना चाहिए`;\n                if (_issue.format === \"includes\")\n                    return `अमान्य स्ट्रिंग: इसमें \"${_issue.includes}\" शामिल होना चाहिए`;\n                if (_issue.format === \"regex\")\n                    return `अमान्य स्ट्रिंग: पैटर्न ${_issue.pattern} से मेल खाना चाहिए`;\n                return `अमान्य ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `अमान्य संख्या: यह ${issue.divisor} का गुणज होना चाहिए`;\n            case \"unrecognized_keys\":\n                return `अपरिचित कुंजी${issue.keys.length > 1 ? \"याँ\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `अमान्य कुंजी: ${issue.origin} में`;\n            case \"invalid_union\":\n                if (issue.options && Array.isArray(issue.options) && issue.options.length > 0) {\n                    const opts = issue.options.map((o) => `'${o}'`).join(\" | \");\n                    return `अमान्य डिस्क्रिमिनेटर मान: अपेक्षित ${opts}`;\n                }\n                return \"अमान्य इनपुट\";\n            case \"invalid_element\":\n                return `अमान्य मान: ${issue.origin} में`;\n            default:\n                return `अमान्य इनपुट`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"znakova\", verb: \"imati\" },\n        file: { unit: \"bajtova\", verb: \"imati\" },\n        array: { unit: \"stavki\", verb: \"imati\" },\n        set: { unit: \"stavki\", verb: \"imati\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"unos\",\n        email: \"email adresa\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO datum i vrijeme\",\n        date: \"ISO datum\",\n        time: \"ISO vrijeme\",\n        duration: \"ISO trajanje\",\n        ipv4: \"IPv4 adresa\",\n        ipv6: \"IPv6 adresa\",\n        mac: \"MAC adresa\",\n        cidrv4: \"IPv4 raspon\",\n        cidrv6: \"IPv6 raspon\",\n        base64: \"base64 kodirani tekst\",\n        base64url: \"base64url kodirani tekst\",\n        json_string: \"JSON tekst\",\n        e164: \"E.164 broj\",\n        credit_card: \"broj kreditne kartice\",\n        currency_code: \"kod valute\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"unos\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        string: \"tekst\",\n        number: \"broj\",\n        boolean: \"boolean\",\n        array: \"niz\",\n        object: \"objekt\",\n        set: \"skup\",\n        file: \"datoteka\",\n        date: \"datum\",\n        bigint: \"bigint\",\n        symbol: \"simbol\",\n        undefined: \"undefined\",\n        null: \"null\",\n        function: \"funkcija\",\n        map: \"mapa\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Neispravan unos: očekuje se instanceof ${issue.expected}, a primljeno je ${received}`;\n                }\n                return `Neispravan unos: očekuje se ${expected}, a primljeno je ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Neispravna vrijednost: očekivano ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Neispravna opcija: očekivano jedno od ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                const origin = TypeDictionary[issue.origin] ?? issue.origin;\n                if (sizing)\n                    return `Preveliko: očekivano da ${origin ?? \"vrijednost\"} ima ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elemenata\"}`;\n                return `Preveliko: očekivano da ${origin ?? \"vrijednost\"} bude ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                const origin = TypeDictionary[issue.origin] ?? issue.origin;\n                if (sizing) {\n                    return `Premalo: očekivano da ${origin} ima ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Premalo: očekivano da ${origin} bude ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Neispravan tekst: mora započinjati s \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Neispravan tekst: mora završavati s \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Neispravan tekst: mora sadržavati \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Neispravan tekst: mora odgovarati uzorku ${_issue.pattern}`;\n                return `Neispravna ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Neispravan broj: mora biti višekratnik od ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Neprepoznat${issue.keys.length > 1 ? \"i ključevi\" : \" ključ\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Neispravan ključ u ${TypeDictionary[issue.origin] ?? issue.origin}`;\n            case \"invalid_union\":\n                return \"Neispravan unos\";\n            case \"invalid_element\":\n                return `Neispravna vrijednost u ${TypeDictionary[issue.origin] ?? issue.origin}`;\n            default:\n                return `Neispravan unos`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"karakter\", verb: \"legyen\" },\n        file: { unit: \"byte\", verb: \"legyen\" },\n        array: { unit: \"elem\", verb: \"legyen\" },\n        set: { unit: \"elem\", verb: \"legyen\" },\n        map: { unit: \"elem\", verb: \"legyen\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"bemenet\",\n        email: \"email cím\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO időbélyeg\",\n        date: \"ISO dátum\",\n        time: \"ISO idő\",\n        duration: \"ISO időintervallum\",\n        ipv4: \"IPv4 cím\",\n        ipv6: \"IPv6 cím\",\n        mac: \"MAC cím\",\n        cidrv4: \"IPv4 tartomány\",\n        cidrv6: \"IPv6 tartomány\",\n        base64: \"base64-kódolt string\",\n        base64url: \"base64url-kódolt string\",\n        json_string: \"JSON string\",\n        e164: \"E.164 szám\",\n        credit_card: \"hitelkártyaszám\",\n        currency_code: \"pénznemkód\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"bemenet\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"szám\",\n        array: \"tömb\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Érvénytelen bemenet: a várt érték instanceof ${issue.expected}, a kapott érték ${received}`;\n                }\n                return `Érvénytelen bemenet: a várt érték ${expected}, a kapott érték ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Érvénytelen bemenet: a várt érték ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Érvénytelen opció: valamelyik érték várt ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Túl nagy: ${issue.origin ?? \"érték\"} mérete túl nagy ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elem\"}`;\n                return `Túl nagy: a bemeneti érték ${issue.origin ?? \"érték\"} túl nagy: ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Túl kicsi: a bemeneti érték ${issue.origin} mérete túl kicsi ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Túl kicsi: a bemeneti érték ${issue.origin} túl kicsi ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Érvénytelen string: \"${_issue.prefix}\" értékkel kell kezdődnie`;\n                if (_issue.format === \"ends_with\")\n                    return `Érvénytelen string: \"${_issue.suffix}\" értékkel kell végződnie`;\n                if (_issue.format === \"includes\")\n                    return `Érvénytelen string: \"${_issue.includes}\" értéket kell tartalmaznia`;\n                if (_issue.format === \"regex\")\n                    return `Érvénytelen string: ${_issue.pattern} mintának kell megfelelnie`;\n                return `Érvénytelen ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Érvénytelen szám: ${issue.divisor} többszörösének kell lennie`;\n            case \"unrecognized_keys\":\n                return `Ismeretlen kulcs${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Érvénytelen kulcs ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Érvénytelen bemenet\";\n            case \"invalid_element\":\n                return `Érvénytelen érték: ${issue.origin}`;\n            default:\n                return `Érvénytelen bemenet`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nfunction getArmenianPlural(count, one, many) {\n    return Math.abs(count) === 1 ? one : many;\n}\nfunction withDefiniteArticle(word) {\n    if (!word)\n        return \"\";\n    const vowels = [\"ա\", \"ե\", \"ը\", \"ի\", \"ո\", \"ու\", \"օ\"];\n    const lastChar = word[word.length - 1];\n    return word + (vowels.includes(lastChar) ? \"ն\" : \"ը\");\n}\nconst error = () => {\n    const Sizable = {\n        string: {\n            unit: {\n                one: \"նշան\",\n                many: \"նշաններ\",\n            },\n            verb: \"ունենալ\",\n        },\n        file: {\n            unit: {\n                one: \"բայթ\",\n                many: \"բայթեր\",\n            },\n            verb: \"ունենալ\",\n        },\n        array: {\n            unit: {\n                one: \"տարր\",\n                many: \"տարրեր\",\n            },\n            verb: \"ունենալ\",\n        },\n        set: {\n            unit: {\n                one: \"տարր\",\n                many: \"տարրեր\",\n            },\n            verb: \"ունենալ\",\n        },\n        map: {\n            unit: {\n                one: \"տարր\",\n                many: \"տարրեր\",\n            },\n            verb: \"ունենալ\",\n        },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"մուտք\",\n        email: \"էլ. հասցե\",\n        url: \"URL\",\n        emoji: \"էմոջի\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO ամսաթիվ և ժամ\",\n        date: \"ISO ամսաթիվ\",\n        time: \"ISO ժամ\",\n        duration: \"ISO տևողություն\",\n        ipv4: \"IPv4 հասցե\",\n        ipv6: \"IPv6 հասցե\",\n        mac: \"MAC հասցե\",\n        cidrv4: \"IPv4 միջակայք\",\n        cidrv6: \"IPv6 միջակայք\",\n        base64: \"base64 ձևաչափով տող\",\n        base64url: \"base64url ձևաչափով տող\",\n        json_string: \"JSON տող\",\n        e164: \"E.164 համար\",\n        credit_card: \"կրեդիտ քարտի համար\",\n        currency_code: \"արժույթի կոդ\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"մուտք\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"թիվ\",\n        array: \"զանգված\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Սխալ մուտքագրում․ սպասվում էր instanceof ${issue.expected}, ստացվել է ${received}`;\n                }\n                return `Սխալ մուտքագրում․ սպասվում էր ${expected}, ստացվել է ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Սխալ մուտքագրում․ սպասվում էր ${util.stringifyPrimitive(issue.values[1])}`;\n                return `Սխալ տարբերակ․ սպասվում էր հետևյալներից մեկը՝ ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    const maxValue = Number(issue.maximum);\n                    const unit = getArmenianPlural(maxValue, sizing.unit.one, sizing.unit.many);\n                    return `Չափազանց մեծ արժեք․ սպասվում է, որ ${withDefiniteArticle(issue.origin ?? \"արժեք\")} կունենա ${adj}${issue.maximum.toString()} ${unit}`;\n                }\n                return `Չափազանց մեծ արժեք․ սպասվում է, որ ${withDefiniteArticle(issue.origin ?? \"արժեք\")} լինի ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    const minValue = Number(issue.minimum);\n                    const unit = getArmenianPlural(minValue, sizing.unit.one, sizing.unit.many);\n                    return `Չափազանց փոքր արժեք․ սպասվում է, որ ${withDefiniteArticle(issue.origin)} կունենա ${adj}${issue.minimum.toString()} ${unit}`;\n                }\n                return `Չափազանց փոքր արժեք․ սպասվում է, որ ${withDefiniteArticle(issue.origin)} լինի ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Սխալ տող․ պետք է սկսվի \"${_issue.prefix}\"-ով`;\n                if (_issue.format === \"ends_with\")\n                    return `Սխալ տող․ պետք է ավարտվի \"${_issue.suffix}\"-ով`;\n                if (_issue.format === \"includes\")\n                    return `Սխալ տող․ պետք է պարունակի \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Սխալ տող․ պետք է համապատասխանի ${_issue.pattern} ձևաչափին`;\n                return `Սխալ ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Սխալ թիվ․ պետք է բազմապատիկ լինի ${issue.divisor}-ի`;\n            case \"unrecognized_keys\":\n                return `Չճանաչված բանալի${issue.keys.length > 1 ? \"ներ\" : \"\"}. ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Սխալ բանալի ${withDefiniteArticle(issue.origin)}-ում`;\n            case \"invalid_union\":\n                return \"Սխալ մուտքագրում\";\n            case \"invalid_element\":\n                return `Սխալ արժեք ${withDefiniteArticle(issue.origin)}-ում`;\n            default:\n                return `Սխալ մուտքագրում`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"karakter\", verb: \"memiliki\" },\n        file: { unit: \"byte\", verb: \"memiliki\" },\n        array: { unit: \"item\", verb: \"memiliki\" },\n        set: { unit: \"item\", verb: \"memiliki\" },\n        map: { unit: \"item\", verb: \"memiliki\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"input\",\n        email: \"alamat email\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"tanggal dan waktu format ISO\",\n        date: \"tanggal format ISO\",\n        time: \"jam format ISO\",\n        duration: \"durasi format ISO\",\n        ipv4: \"alamat IPv4\",\n        ipv6: \"alamat IPv6\",\n        mac: \"alamat MAC\",\n        cidrv4: \"rentang alamat IPv4\",\n        cidrv6: \"rentang alamat IPv6\",\n        base64: \"string dengan enkode base64\",\n        base64url: \"string dengan enkode base64url\",\n        json_string: \"string JSON\",\n        e164: \"angka E.164\",\n        credit_card: \"nomor kartu kredit\",\n        currency_code: \"kode mata uang\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Input tidak valid: diharapkan instanceof ${issue.expected}, diterima ${received}`;\n                }\n                return `Input tidak valid: diharapkan ${expected}, diterima ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Input tidak valid: diharapkan ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Pilihan tidak valid: diharapkan salah satu dari ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Terlalu besar: diharapkan ${issue.origin ?? \"value\"} memiliki ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elemen\"}`;\n                return `Terlalu besar: diharapkan ${issue.origin ?? \"value\"} menjadi ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Terlalu kecil: diharapkan ${issue.origin} memiliki ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Terlalu kecil: diharapkan ${issue.origin} menjadi ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `String tidak valid: harus dimulai dengan \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `String tidak valid: harus berakhir dengan \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `String tidak valid: harus menyertakan \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `String tidak valid: harus sesuai pola ${_issue.pattern}`;\n                return `${FormatDictionary[_issue.format] ?? issue.format} tidak valid`;\n            }\n            case \"not_multiple_of\":\n                return `Angka tidak valid: harus kelipatan dari ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Kunci tidak dikenali ${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Kunci tidak valid di ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Input tidak valid\";\n            case \"invalid_element\":\n                return `Nilai tidak valid di ${issue.origin}`;\n            default:\n                return `Input tidak valid`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"stafi\", verb: \"að hafa\" },\n        file: { unit: \"bæti\", verb: \"að hafa\" },\n        array: { unit: \"hluti\", verb: \"að hafa\" },\n        set: { unit: \"hluti\", verb: \"að hafa\" },\n        map: { unit: \"hluti\", verb: \"að hafa\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"gildi\",\n        email: \"netfang\",\n        url: \"vefslóð\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO dagsetning og tími\",\n        date: \"ISO dagsetning\",\n        time: \"ISO tími\",\n        duration: \"ISO tímalengd\",\n        ipv4: \"IPv4 address\",\n        ipv6: \"IPv6 address\",\n        mac: \"MAC address\",\n        cidrv4: \"IPv4 range\",\n        cidrv6: \"IPv6 range\",\n        base64: \"base64-encoded strengur\",\n        base64url: \"base64url-encoded strengur\",\n        json_string: \"JSON strengur\",\n        e164: \"E.164 tölugildi\",\n        credit_card: \"kreditkortanúmer\",\n        currency_code: \"gjaldmiðilskóði\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"gildi\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"númer\",\n        array: \"fylki\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Rangt gildi: Þú slóst inn ${received} þar sem á að vera instanceof ${issue.expected}`;\n                }\n                return `Rangt gildi: Þú slóst inn ${received} þar sem á að vera ${expected}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Rangt gildi: gert ráð fyrir ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Ógilt val: má vera eitt af eftirfarandi ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Of stórt: gert er ráð fyrir að ${issue.origin ?? \"gildi\"} hafi ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"hluti\"}`;\n                return `Of stórt: gert er ráð fyrir að ${issue.origin ?? \"gildi\"} sé ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Of lítið: gert er ráð fyrir að ${issue.origin} hafi ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Of lítið: gert er ráð fyrir að ${issue.origin} sé ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Ógildur strengur: verður að byrja á \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Ógildur strengur: verður að enda á \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Ógildur strengur: verður að innihalda \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Ógildur strengur: verður að fylgja mynstri ${_issue.pattern}`;\n                return `Rangt ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Röng tala: verður að vera margfeldi af ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Óþekkt ${issue.keys.length > 1 ? \"ir lyklar\" : \"ur lykill\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Rangur lykill í ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Rangt gildi\";\n            case \"invalid_element\":\n                return `Rangt gildi í ${issue.origin}`;\n            default:\n                return `Rangt gildi`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"caratteri\", verb: \"avere\" },\n        file: { unit: \"byte\", verb: \"avere\" },\n        array: { unit: \"elementi\", verb: \"avere\" },\n        set: { unit: \"elementi\", verb: \"avere\" },\n        map: { unit: \"elementi\", verb: \"avere\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"input\",\n        email: \"indirizzo email\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"data e ora ISO\",\n        date: \"data ISO\",\n        time: \"ora ISO\",\n        duration: \"durata ISO\",\n        ipv4: \"indirizzo IPv4\",\n        ipv6: \"indirizzo IPv6\",\n        mac: \"indirizzo MAC\",\n        cidrv4: \"intervallo IPv4\",\n        cidrv6: \"intervallo IPv6\",\n        base64: \"stringa codificata in base64\",\n        base64url: \"URL codificata in base64\",\n        json_string: \"stringa JSON\",\n        e164: \"numero E.164\",\n        credit_card: \"numero di carta di credito\",\n        currency_code: \"codice valuta\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"numero\",\n        array: \"vettore\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Input non valido: atteso instanceof ${issue.expected}, ricevuto ${received}`;\n                }\n                return `Input non valido: atteso ${expected}, ricevuto ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Input non valido: atteso ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Opzione non valida: atteso uno tra ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Troppo grande: ${issue.origin ?? \"valore\"} deve avere ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementi\"}`;\n                return `Troppo grande: ${issue.origin ?? \"valore\"} deve essere ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Troppo piccolo: ${issue.origin} deve avere ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Troppo piccolo: ${issue.origin} deve essere ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Stringa non valida: deve iniziare con \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Stringa non valida: deve terminare con \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Stringa non valida: deve includere \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Stringa non valida: deve corrispondere al pattern ${_issue.pattern}`;\n                return `Input non valido: ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Numero non valido: deve essere un multiplo di ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Chiav${issue.keys.length > 1 ? \"i\" : \"e\"} non riconosciut${issue.keys.length > 1 ? \"e\" : \"a\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Chiave non valida in ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Input non valido\";\n            case \"invalid_element\":\n                return `Valore non valido in ${issue.origin}`;\n            default:\n                return `Input non valido`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"文字\", verb: \"である\" },\n        file: { unit: \"バイト\", verb: \"である\" },\n        array: { unit: \"要素\", verb: \"である\" },\n        set: { unit: \"要素\", verb: \"である\" },\n        map: { unit: \"要素\", verb: \"である\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"入力値\",\n        email: \"メールアドレス\",\n        url: \"URL\",\n        emoji: \"絵文字\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO日時\",\n        date: \"ISO日付\",\n        time: \"ISO時刻\",\n        duration: \"ISO期間\",\n        ipv4: \"IPv4アドレス\",\n        ipv6: \"IPv6アドレス\",\n        mac: \"MACアドレス\",\n        cidrv4: \"IPv4範囲\",\n        cidrv6: \"IPv6範囲\",\n        base64: \"base64エンコード文字列\",\n        base64url: \"base64urlエンコード文字列\",\n        json_string: \"JSON文字列\",\n        e164: \"E.164番号\",\n        credit_card: \"クレジットカード番号\",\n        currency_code: \"通貨コード\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"入力値\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"数値\",\n        array: \"配列\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `無効な入力: instanceof ${issue.expected}が期待されましたが、${received}が入力されました`;\n                }\n                return `無効な入力: ${expected}が期待されましたが、${received}が入力されました`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `無効な入力: ${util.stringifyPrimitive(issue.values[0])}が期待されました`;\n                return `無効な選択: ${util.joinValues(issue.values, \"、\")}のいずれかである必要があります`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"以下である\" : \"より小さい\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `大きすぎる値: ${issue.origin ?? \"値\"}は${issue.maximum.toString()}${sizing.unit ?? \"要素\"}${adj}必要があります`;\n                return `大きすぎる値: ${issue.origin ?? \"値\"}は${issue.maximum.toString()}${adj}必要があります`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \"以上である\" : \"より大きい\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `小さすぎる値: ${issue.origin}は${issue.minimum.toString()}${sizing.unit}${adj}必要があります`;\n                return `小さすぎる値: ${issue.origin}は${issue.minimum.toString()}${adj}必要があります`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `無効な文字列: \"${_issue.prefix}\"で始まる必要があります`;\n                if (_issue.format === \"ends_with\")\n                    return `無効な文字列: \"${_issue.suffix}\"で終わる必要があります`;\n                if (_issue.format === \"includes\")\n                    return `無効な文字列: \"${_issue.includes}\"を含む必要があります`;\n                if (_issue.format === \"regex\")\n                    return `無効な文字列: パターン${_issue.pattern}に一致する必要があります`;\n                return `無効な${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `無効な数値: ${issue.divisor}の倍数である必要があります`;\n            case \"unrecognized_keys\":\n                return `認識されていないキー${issue.keys.length > 1 ? \"群\" : \"\"}: ${util.joinValues(issue.keys, \"、\")}`;\n            case \"invalid_key\":\n                return `${issue.origin}内の無効なキー`;\n            case \"invalid_union\":\n                return \"無効な入力\";\n            case \"invalid_element\":\n                return `${issue.origin}内の無効な値`;\n            default:\n                return `無効な入力`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"სიმბოლო\", verb: \"უნდა შეიცავდეს\" },\n        file: { unit: \"ბაიტი\", verb: \"უნდა შეიცავდეს\" },\n        array: { unit: \"ელემენტი\", verb: \"უნდა შეიცავდეს\" },\n        set: { unit: \"ელემენტი\", verb: \"უნდა შეიცავდეს\" },\n        map: { unit: \"ელემენტი\", verb: \"უნდა შეიცავდეს\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"შეყვანა\",\n        email: \"ელ-ფოსტის მისამართი\",\n        url: \"URL\",\n        emoji: \"ემოჯი\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"თარიღი-დრო\",\n        date: \"თარიღი\",\n        time: \"დრო\",\n        duration: \"ხანგრძლივობა\",\n        ipv4: \"IPv4 მისამართი\",\n        ipv6: \"IPv6 მისამართი\",\n        mac: \"MAC მისამართი\",\n        cidrv4: \"IPv4 დიაპაზონი\",\n        cidrv6: \"IPv6 დიაპაზონი\",\n        base64: \"base64-კოდირებული ველი\",\n        base64url: \"base64url-კოდირებული ველი\",\n        json_string: \"JSON ველი\",\n        e164: \"E.164 ნომერი\",\n        credit_card: \"საკრედიტო ბარათის ნომერი\",\n        currency_code: \"ვალუტის კოდი\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"შეყვანა\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"რიცხვი\",\n        string: \"ველი\",\n        boolean: \"ბულეანი\",\n        function: \"ფუნქცია\",\n        array: \"მასივი\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `არასწორი შეყვანა: მოსალოდნელი instanceof ${issue.expected}, მიღებული ${received}`;\n                }\n                return `არასწორი შეყვანა: მოსალოდნელი ${expected}, მიღებული ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `არასწორი შეყვანა: მოსალოდნელი ${util.stringifyPrimitive(issue.values[0])}`;\n                return `არასწორი ვარიანტი: მოსალოდნელია ერთ-ერთი ${util.joinValues(issue.values, \"|\")}-დან`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `ზედმეტად დიდი: მოსალოდნელი ${issue.origin ?? \"მნიშვნელობა\"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit}`;\n                return `ზედმეტად დიდი: მოსალოდნელი ${issue.origin ?? \"მნიშვნელობა\"} იყოს ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `ზედმეტად პატარა: მოსალოდნელი ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `ზედმეტად პატარა: მოსალოდნელი ${issue.origin} იყოს ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `არასწორი ველი: უნდა იწყებოდეს \"${_issue.prefix}\"-ით`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `არასწორი ველი: უნდა მთავრდებოდეს \"${_issue.suffix}\"-ით`;\n                if (_issue.format === \"includes\")\n                    return `არასწორი ველი: უნდა შეიცავდეს \"${_issue.includes}\"-ს`;\n                if (_issue.format === \"regex\")\n                    return `არასწორი ველი: უნდა შეესაბამებოდეს შაბლონს ${_issue.pattern}`;\n                return `არასწორი ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `არასწორი რიცხვი: უნდა იყოს ${issue.divisor}-ის ჯერადი`;\n            case \"unrecognized_keys\":\n                return `უცნობი გასაღებ${issue.keys.length > 1 ? \"ები\" : \"ი\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `არასწორი გასაღები ${issue.origin}-ში`;\n            case \"invalid_union\":\n                return \"არასწორი შეყვანა\";\n            case \"invalid_element\":\n                return `არასწორი მნიშვნელობა ${issue.origin}-ში`;\n            default:\n                return `არასწორი შეყვანა`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"តួអក្សរ\", verb: \"គួរមាន\" },\n        file: { unit: \"បៃ\", verb: \"គួរមាន\" },\n        array: { unit: \"ធាតុ\", verb: \"គួរមាន\" },\n        set: { unit: \"ធាតុ\", verb: \"គួរមាន\" },\n        map: { unit: \"ធាតុ\", verb: \"គួរមាន\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"ទិន្នន័យបញ្ចូល\",\n        email: \"អាសយដ្ឋានអ៊ីមែល\",\n        url: \"URL\",\n        emoji: \"សញ្ញាអារម្មណ៍\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"កាលបរិច្ឆេទ និងម៉ោង ISO\",\n        date: \"កាលបរិច្ឆេទ ISO\",\n        time: \"ម៉ោង ISO\",\n        duration: \"រយៈពេល ISO\",\n        ipv4: \"អាសយដ្ឋាន IPv4\",\n        ipv6: \"អាសយដ្ឋាន IPv6\",\n        mac: \"អាសយដ្ឋាន MAC\",\n        cidrv4: \"ដែនអាសយដ្ឋាន IPv4\",\n        cidrv6: \"ដែនអាសយដ្ឋាន IPv6\",\n        base64: \"ខ្សែអក្សរអ៊ិកូដ base64\",\n        base64url: \"ខ្សែអក្សរអ៊ិកូដ base64url\",\n        json_string: \"ខ្សែអក្សរ JSON\",\n        e164: \"លេខ E.164\",\n        credit_card: \"លេខប័ណ្ណឥណទាន\",\n        currency_code: \"កូដរូបិយប័ណ្ណ\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"ទិន្នន័យបញ្ចូល\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"លេខ\",\n        array: \"អារេ (Array)\",\n        null: \"គ្មានតម្លៃ (null)\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `ទិន្នន័យបញ្ចូលមិនត្រឹមត្រូវ៖ ត្រូវការ instanceof ${issue.expected} ប៉ុន្តែទទួលបាន ${received}`;\n                }\n                return `ទិន្នន័យបញ្ចូលមិនត្រឹមត្រូវ៖ ត្រូវការ ${expected} ប៉ុន្តែទទួលបាន ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `ទិន្នន័យបញ្ចូលមិនត្រឹមត្រូវ៖ ត្រូវការ ${util.stringifyPrimitive(issue.values[0])}`;\n                return `ជម្រើសមិនត្រឹមត្រូវ៖ ត្រូវជាមួយក្នុងចំណោម ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `ធំពេក៖ ត្រូវការ ${issue.origin ?? \"តម្លៃ\"} ${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"ធាតុ\"}`;\n                return `ធំពេក៖ ត្រូវការ ${issue.origin ?? \"តម្លៃ\"} ${adj} ${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `តូចពេក៖ ត្រូវការ ${issue.origin} ${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `តូចពេក៖ ត្រូវការ ${issue.origin} ${adj} ${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `ខ្សែអក្សរមិនត្រឹមត្រូវ៖ ត្រូវចាប់ផ្តើមដោយ \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `ខ្សែអក្សរមិនត្រឹមត្រូវ៖ ត្រូវបញ្ចប់ដោយ \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `ខ្សែអក្សរមិនត្រឹមត្រូវ៖ ត្រូវមាន \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `ខ្សែអក្សរមិនត្រឹមត្រូវ៖ ត្រូវតែផ្គូផ្គងនឹងទម្រង់ដែលបានកំណត់ ${_issue.pattern}`;\n                return `មិនត្រឹមត្រូវ៖ ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `លេខមិនត្រឹមត្រូវ៖ ត្រូវតែជាពហុគុណនៃ ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `រកឃើញសោមិនស្គាល់៖ ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `សោមិនត្រឹមត្រូវនៅក្នុង ${issue.origin}`;\n            case \"invalid_union\":\n                return `ទិន្នន័យមិនត្រឹមត្រូវ`;\n            case \"invalid_element\":\n                return `ទិន្នន័យមិនត្រឹមត្រូវនៅក្នុង ${issue.origin}`;\n            default:\n                return `ទិន្នន័យមិនត្រឹមត្រូវ`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import km from \"./km.js\";\n/** @deprecated Use `km` instead. */\nexport default function () {\n    return km();\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"ಅಕ್ಷರಗಳು\", verb: \"ಹೊಂದಲು\" },\n        file: { unit: \"ಬೈಟ್‌ಗಳು\", verb: \"ಹೊಂದಲು\" },\n        array: { unit: \"ವಸ್ತುಗಳು\", verb: \"ಹೊಂದಲು\" },\n        set: { unit: \"ವಸ್ತುಗಳು\", verb: \"ಹೊಂದಲು\" },\n        map: { unit: \"entries\", verb: \"ಹೊಂದಲು\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"ಇನ್ಪುಟ್\",\n        email: \"email ವಿಳಾಸ\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO ದಿನಾಂಕದ ಸಮಯ\",\n        date: \"ISO ದಿನಾಂಕ\",\n        time: \"ISO ಸಮಯ\",\n        duration: \"ISO ಅವಧಿ\",\n        ipv4: \"IPv4 ವಿಳಾಸ\",\n        ipv6: \"IPv6 ವಿಳಾಸ\",\n        mac: \"MAC ವಿಳಾಸ\",\n        cidrv4: \"IPv4 ವ್ಯಾಪ್ತಿಯ\",\n        cidrv6: \"IPv6 ವ್ಯಾಪ್ತಿಯ\",\n        base64: \"base64-encodedಸ್ಟ್ರಿಂಗ್\",\n        base64url: \"base64url-encodedಸ್ಟ್ರಿಂಗ್\",\n        json_string: \"JSONಸ್ಟ್ರಿಂಗ್\",\n        e164: \"E.164 ಸಂಖ್ಯೆ\",\n        credit_card: \"ಕ್ರೆಡಿಟ್ ಕಾರ್ಡ್ ಸಂಖ್ಯೆ\",\n        currency_code: \"ಕರೆನ್ಸಿ ಕೋಡ್\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"ಇನ್ಪುಟ್\",\n    };\n    // type names: missing keys = do not translate (use raw value via ?? fallback)\n    const TypeDictionary = {\n        // Compatibility: \"nan\" -> \"NaN\" for display\n        nan: \"NaN\",\n        // All other type names omitted - they fall back to raw values via ?? operator\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                return `ಅಮಾನ್ಯ ಇನ್‌ಪುಟ್: ನಿರೀಕ್ಷಿಸಲಾಗಿದೆ ${expected}, ಸ್ವೀಕರಿಸಿದನು ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `ಅಮಾನ್ಯ ಇನ್‌ಪುಟ್: ನಿರೀಕ್ಷಿಸಲಾಗಿದೆ ${util.stringifyPrimitive(issue.values[0])}`;\n                return `ಅಮಾನ್ಯ ಆಯ್ಕೆ: ಇವುಗಳಲ್ಲಿ ಒಂದನ್ನು ನಿರೀಕ್ಷಿಸಲಾಗಿದೆ ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `ತುಂಬಾ ದೊಡ್ಡದು: ನಿರೀಕ್ಷಿಸಲಾಗಿದೆ ${issue.origin ?? \"value\"} ಹೊಂದಲು ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"ಅಂಶಗಳು\"}`;\n                return `ತುಂಬಾ ದೊಡ್ಡದು: ನಿರೀಕ್ಷಿಸಲಾಗಿದೆ ${issue.origin ?? \"value\"} ಎಂದು ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `ತುಂಬಾ ಚಿಕ್ಕದು: ನಿರೀಕ್ಷಿಸಲಾಗಿದೆ ${issue.origin} ಹೊಂದಲು ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `ತುಂಬಾ ಚಿಕ್ಕದು: ನಿರೀಕ್ಷಿಸಲಾಗಿದೆ ${issue.origin} ಎಂದು ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `ಅಮಾನ್ಯವಾದ ಸ್ಟ್ರಿಂಗ್: ಇದರೊಂದಿಗೆ ಪ್ರಾರಂಭಿಸಬೇಕು \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `ಅಮಾನ್ಯವಾದ ಸ್ಟ್ರಿಂಗ್: ಇದರೊಂದಿಗೆ ಕೊನೆಗೊಳ್ಳಬೇಕು \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `ಅಮಾನ್ಯ ಸ್ಟ್ರಿಂಗ್: ಒಳಗೊಂಡಿರಬೇಕು \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `ಅಮಾನ್ಯವಾದ ಸ್ಟ್ರಿಂಗ್: ಮಾದರಿಗೆ ಹೊಂದಿಕೆಯಾಗಬೇಕು ${_issue.pattern}`;\n                return `ಅಮಾನ್ಯ ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `ಅಮಾನ್ಯ ಸಂಖ್ಯೆ: ಬಹುಸಂಖ್ಯೆಯಾಗಿರಬೇಕು ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `ಗುರುತಿಸಲಾಗದ ಕೀ ${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `ಅಮಾನ್ಯವಾದ ಕೀ ಇನ್ ${issue.origin}`;\n            case \"invalid_union\":\n                if (issue.options && Array.isArray(issue.options) && issue.options.length > 0) {\n                    const opts = issue.options.map((o) => `'${o}'`).join(\" | \");\n                    return `ಅಮಾನ್ಯ ತಾರತಮ್ಯ ಮೌಲ್ಯ. ನಿರೀಕ್ಷಿಸಲಾಗಿದೆ ${opts}`;\n                }\n                return \"ಅಮಾನ್ಯ ಇನ್‌ಪುಟ್\";\n            case \"invalid_element\":\n                return `ರಲ್ಲಿ ಅಮಾನ್ಯ ಮೌಲ್ಯ ${issue.origin}`;\n            default:\n                return `ಅಮಾನ್ಯ ಇನ್‌ಪುಟ್`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"문자\", verb: \"to have\" },\n        file: { unit: \"바이트\", verb: \"to have\" },\n        array: { unit: \"개\", verb: \"to have\" },\n        set: { unit: \"개\", verb: \"to have\" },\n        map: { unit: \"개\", verb: \"to have\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"입력\",\n        email: \"이메일 주소\",\n        url: \"URL\",\n        emoji: \"이모지\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO 날짜시간\",\n        date: \"ISO 날짜\",\n        time: \"ISO 시간\",\n        duration: \"ISO 기간\",\n        ipv4: \"IPv4 주소\",\n        ipv6: \"IPv6 주소\",\n        mac: \"MAC 주소\",\n        cidrv4: \"IPv4 범위\",\n        cidrv6: \"IPv6 범위\",\n        base64: \"base64 인코딩 문자열\",\n        base64url: \"base64url 인코딩 문자열\",\n        json_string: \"JSON 문자열\",\n        e164: \"E.164 번호\",\n        credit_card: \"신용카드 번호\",\n        currency_code: \"통화 코드\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"입력\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `잘못된 입력: 예상 타입은 instanceof ${issue.expected}, 받은 타입은 ${received}입니다`;\n                }\n                return `잘못된 입력: 예상 타입은 ${expected}, 받은 타입은 ${received}입니다`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `잘못된 입력: 값은 ${util.stringifyPrimitive(issue.values[0])} 이어야 합니다`;\n                return `잘못된 옵션: ${util.joinValues(issue.values, \"또는 \")} 중 하나여야 합니다`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"이하\" : \"미만\";\n                const suffix = adj === \"미만\" ? \"이어야 합니다\" : \"여야 합니다\";\n                const sizing = getSizing(issue.origin);\n                const unit = sizing?.unit ?? \"요소\";\n                if (sizing)\n                    return `${issue.origin ?? \"값\"}이 너무 큽니다: ${issue.maximum.toString()}${unit} ${adj}${suffix}`;\n                return `${issue.origin ?? \"값\"}이 너무 큽니다: ${issue.maximum.toString()} ${adj}${suffix}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \"이상\" : \"초과\";\n                const suffix = adj === \"이상\" ? \"이어야 합니다\" : \"여야 합니다\";\n                const sizing = getSizing(issue.origin);\n                const unit = sizing?.unit ?? \"요소\";\n                if (sizing) {\n                    return `${issue.origin ?? \"값\"}이 너무 작습니다: ${issue.minimum.toString()}${unit} ${adj}${suffix}`;\n                }\n                return `${issue.origin ?? \"값\"}이 너무 작습니다: ${issue.minimum.toString()} ${adj}${suffix}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `잘못된 문자열: \"${_issue.prefix}\"(으)로 시작해야 합니다`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `잘못된 문자열: \"${_issue.suffix}\"(으)로 끝나야 합니다`;\n                if (_issue.format === \"includes\")\n                    return `잘못된 문자열: \"${_issue.includes}\"을(를) 포함해야 합니다`;\n                if (_issue.format === \"regex\")\n                    return `잘못된 문자열: 정규식 ${_issue.pattern} 패턴과 일치해야 합니다`;\n                return `잘못된 ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `잘못된 숫자: ${issue.divisor}의 배수여야 합니다`;\n            case \"unrecognized_keys\":\n                return `인식할 수 없는 키: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `잘못된 키: ${issue.origin}`;\n            case \"invalid_union\":\n                return `잘못된 입력`;\n            case \"invalid_element\":\n                return `잘못된 값: ${issue.origin}`;\n            default:\n                return `잘못된 입력`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst capitalizeFirstCharacter = (text) => {\n    return text.charAt(0).toUpperCase() + text.slice(1);\n};\nfunction getUnitTypeFromNumber(number) {\n    const abs = Math.abs(number);\n    const last = abs % 10;\n    const last2 = abs % 100;\n    if ((last2 >= 11 && last2 <= 19) || last === 0)\n        return \"many\";\n    if (last === 1)\n        return \"one\";\n    return \"few\";\n}\nconst error = () => {\n    const Sizable = {\n        string: {\n            unit: {\n                one: \"simbolis\",\n                few: \"simboliai\",\n                many: \"simbolių\",\n            },\n            verb: {\n                smaller: {\n                    inclusive: \"turi būti ne ilgesnė kaip\",\n                    notInclusive: \"turi būti trumpesnė kaip\",\n                },\n                bigger: {\n                    inclusive: \"turi būti ne trumpesnė kaip\",\n                    notInclusive: \"turi būti ilgesnė kaip\",\n                },\n            },\n        },\n        file: {\n            unit: {\n                one: \"baitas\",\n                few: \"baitai\",\n                many: \"baitų\",\n            },\n            verb: {\n                smaller: {\n                    inclusive: \"turi būti ne didesnis kaip\",\n                    notInclusive: \"turi būti mažesnis kaip\",\n                },\n                bigger: {\n                    inclusive: \"turi būti ne mažesnis kaip\",\n                    notInclusive: \"turi būti didesnis kaip\",\n                },\n            },\n        },\n        array: {\n            unit: {\n                one: \"elementą\",\n                few: \"elementus\",\n                many: \"elementų\",\n            },\n            verb: {\n                smaller: {\n                    inclusive: \"turi turėti ne daugiau kaip\",\n                    notInclusive: \"turi turėti mažiau kaip\",\n                },\n                bigger: {\n                    inclusive: \"turi turėti ne mažiau kaip\",\n                    notInclusive: \"turi turėti daugiau kaip\",\n                },\n            },\n        },\n        set: {\n            unit: {\n                one: \"elementą\",\n                few: \"elementus\",\n                many: \"elementų\",\n            },\n            verb: {\n                smaller: {\n                    inclusive: \"turi turėti ne daugiau kaip\",\n                    notInclusive: \"turi turėti mažiau kaip\",\n                },\n                bigger: {\n                    inclusive: \"turi turėti ne mažiau kaip\",\n                    notInclusive: \"turi turėti daugiau kaip\",\n                },\n            },\n        },\n    };\n    function getSizing(origin, unitType, inclusive, targetShouldBe) {\n        const result = Sizable[origin] ?? null;\n        if (result === null)\n            return result;\n        return {\n            unit: result.unit[unitType],\n            verb: result.verb[targetShouldBe][inclusive ? \"inclusive\" : \"notInclusive\"],\n        };\n    }\n    const FormatDictionary = {\n        regex: \"įvestis\",\n        email: \"el. pašto adresas\",\n        url: \"URL\",\n        emoji: \"jaustukas\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO data ir laikas\",\n        date: \"ISO data\",\n        time: \"ISO laikas\",\n        duration: \"ISO trukmė\",\n        ipv4: \"IPv4 adresas\",\n        ipv6: \"IPv6 adresas\",\n        mac: \"MAC adresas\",\n        cidrv4: \"IPv4 tinklo prefiksas (CIDR)\",\n        cidrv6: \"IPv6 tinklo prefiksas (CIDR)\",\n        base64: \"base64 užkoduota eilutė\",\n        base64url: \"base64url užkoduota eilutė\",\n        json_string: \"JSON eilutė\",\n        e164: \"E.164 numeris\",\n        credit_card: \"kredito kortelės numeris\",\n        currency_code: \"valiutos kodas\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"įvestis\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"skaičius\",\n        bigint: \"sveikasis skaičius\",\n        string: \"eilutė\",\n        boolean: \"loginė reikšmė\",\n        undefined: \"neapibrėžta reikšmė\",\n        function: \"funkcija\",\n        symbol: \"simbolis\",\n        array: \"masyvas\",\n        object: \"objektas\",\n        null: \"nulinė reikšmė\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Gautas tipas ${received}, o tikėtasi - instanceof ${issue.expected}`;\n                }\n                return `Gautas tipas ${received}, o tikėtasi - ${expected}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Privalo būti ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Privalo būti vienas iš ${util.joinValues(issue.values, \"|\")} pasirinkimų`;\n            case \"too_big\": {\n                const origin = TypeDictionary[issue.origin] ?? issue.origin;\n                const sizing = getSizing(issue.origin, getUnitTypeFromNumber(Number(issue.maximum)), issue.inclusive ?? false, \"smaller\");\n                if (sizing?.verb)\n                    return `${capitalizeFirstCharacter(origin ?? issue.origin ?? \"reikšmė\")} ${sizing.verb} ${issue.maximum.toString()} ${sizing.unit ?? \"elementų\"}`;\n                const adj = issue.inclusive ? \"ne didesnis kaip\" : \"mažesnis kaip\";\n                return `${capitalizeFirstCharacter(origin ?? issue.origin ?? \"reikšmė\")} turi būti ${adj} ${issue.maximum.toString()} ${sizing?.unit}`;\n            }\n            case \"too_small\": {\n                const origin = TypeDictionary[issue.origin] ?? issue.origin;\n                const sizing = getSizing(issue.origin, getUnitTypeFromNumber(Number(issue.minimum)), issue.inclusive ?? false, \"bigger\");\n                if (sizing?.verb)\n                    return `${capitalizeFirstCharacter(origin ?? issue.origin ?? \"reikšmė\")} ${sizing.verb} ${issue.minimum.toString()} ${sizing.unit ?? \"elementų\"}`;\n                const adj = issue.inclusive ? \"ne mažesnis kaip\" : \"didesnis kaip\";\n                return `${capitalizeFirstCharacter(origin ?? issue.origin ?? \"reikšmė\")} turi būti ${adj} ${issue.minimum.toString()} ${sizing?.unit}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Eilutė privalo prasidėti \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Eilutė privalo pasibaigti \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Eilutė privalo įtraukti \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Eilutė privalo atitikti ${_issue.pattern}`;\n                return `Neteisingas ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Skaičius privalo būti ${issue.divisor} kartotinis.`;\n            case \"unrecognized_keys\":\n                return `Neatpažint${issue.keys.length > 1 ? \"i\" : \"as\"} rakt${issue.keys.length > 1 ? \"ai\" : \"as\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return \"Rastas klaidingas raktas\";\n            case \"invalid_union\":\n                return \"Klaidinga įvestis\";\n            case \"invalid_element\": {\n                const origin = TypeDictionary[issue.origin] ?? issue.origin;\n                return `${capitalizeFirstCharacter(origin ?? issue.origin ?? \"reikšmė\")} turi klaidingą įvestį`;\n            }\n            default:\n                return \"Klaidinga įvestis\";\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"знаци\", verb: \"да имаат\" },\n        file: { unit: \"бајти\", verb: \"да имаат\" },\n        array: { unit: \"ставки\", verb: \"да имаат\" },\n        set: { unit: \"ставки\", verb: \"да имаат\" },\n        map: { unit: \"ставки\", verb: \"да имаат\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"внес\",\n        email: \"адреса на е-пошта\",\n        url: \"URL\",\n        emoji: \"емоџи\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO датум и време\",\n        date: \"ISO датум\",\n        time: \"ISO време\",\n        duration: \"ISO времетраење\",\n        ipv4: \"IPv4 адреса\",\n        ipv6: \"IPv6 адреса\",\n        mac: \"MAC адреса\",\n        cidrv4: \"IPv4 опсег\",\n        cidrv6: \"IPv6 опсег\",\n        base64: \"base64-енкодирана низа\",\n        base64url: \"base64url-енкодирана низа\",\n        json_string: \"JSON низа\",\n        e164: \"E.164 број\",\n        credit_card: \"број на кредитна картичка\",\n        currency_code: \"код на валута\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"внес\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"број\",\n        array: \"низа\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Грешен внес: се очекува instanceof ${issue.expected}, примено ${received}`;\n                }\n                return `Грешен внес: се очекува ${expected}, примено ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Invalid input: expected ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Грешана опција: се очекува една ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Премногу голем: се очекува ${issue.origin ?? \"вредноста\"} да има ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"елементи\"}`;\n                return `Премногу голем: се очекува ${issue.origin ?? \"вредноста\"} да биде ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Премногу мал: се очекува ${issue.origin} да има ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Премногу мал: се очекува ${issue.origin} да биде ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Неважечка низа: мора да започнува со \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Неважечка низа: мора да завршува со \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Неважечка низа: мора да вклучува \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Неважечка низа: мора да одгоара на патернот ${_issue.pattern}`;\n                return `Invalid ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Грешен број: мора да биде делив со ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `${issue.keys.length > 1 ? \"Непрепознаени клучеви\" : \"Непрепознаен клуч\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Грешен клуч во ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Грешен внес\";\n            case \"invalid_element\":\n                return `Грешна вредност во ${issue.origin}`;\n            default:\n                return `Грешен внес`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"aksara\", verb: \"mempunyai\" },\n        file: { unit: \"bait\", verb: \"mempunyai\" },\n        array: { unit: \"elemen\", verb: \"mempunyai\" },\n        set: { unit: \"elemen\", verb: \"mempunyai\" },\n        map: { unit: \"elemen\", verb: \"mempunyai\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"input\",\n        email: \"alamat e-mel\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"tarikh masa ISO\",\n        date: \"tarikh ISO\",\n        time: \"masa ISO\",\n        duration: \"tempoh ISO\",\n        ipv4: \"alamat IPv4\",\n        ipv6: \"alamat IPv6\",\n        mac: \"alamat MAC\",\n        cidrv4: \"julat IPv4\",\n        cidrv6: \"julat IPv6\",\n        base64: \"string dikodkan base64\",\n        base64url: \"string dikodkan base64url\",\n        json_string: \"string JSON\",\n        e164: \"nombor E.164\",\n        credit_card: \"nombor kad kredit\",\n        currency_code: \"kod mata wang\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"nombor\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Input tidak sah: dijangka instanceof ${issue.expected}, diterima ${received}`;\n                }\n                return `Input tidak sah: dijangka ${expected}, diterima ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Input tidak sah: dijangka ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Pilihan tidak sah: dijangka salah satu daripada ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Terlalu besar: dijangka ${issue.origin ?? \"nilai\"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elemen\"}`;\n                return `Terlalu besar: dijangka ${issue.origin ?? \"nilai\"} adalah ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Terlalu kecil: dijangka ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Terlalu kecil: dijangka ${issue.origin} adalah ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `String tidak sah: mesti bermula dengan \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `String tidak sah: mesti berakhir dengan \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `String tidak sah: mesti mengandungi \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `String tidak sah: mesti sepadan dengan corak ${_issue.pattern}`;\n                return `${FormatDictionary[_issue.format] ?? issue.format} tidak sah`;\n            }\n            case \"not_multiple_of\":\n                return `Nombor tidak sah: perlu gandaan ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Kunci tidak dikenali: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Kunci tidak sah dalam ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Input tidak sah\";\n            case \"invalid_element\":\n                return `Nilai tidak sah dalam ${issue.origin}`;\n            default:\n                return `Input tidak sah`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"अक्षर\", verb: \"हुनुपर्छ\" },\n        file: { unit: \"बाइट\", verb: \"हुनुपर्छ\" },\n        array: { unit: \"तत्व\", verb: \"हुनुपर्छ\" },\n        set: { unit: \"तत्व\", verb: \"हुनुपर्छ\" },\n        map: { unit: \"प्रविष्टि\", verb: \"हुनुपर्छ\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"इनपुट\",\n        email: \"इमेल ठेगाना\",\n        url: \"URL\",\n        emoji: \"इमोजी\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO मिति र समय\",\n        date: \"ISO मिति\",\n        time: \"ISO समय\",\n        duration: \"ISO अवधि\",\n        ipv4: \"IPv4 ठेगाना\",\n        ipv6: \"IPv6 ठेगाना\",\n        mac: \"MAC ठेगाना\",\n        cidrv4: \"IPv4 दायरा\",\n        cidrv6: \"IPv6 दायरा\",\n        base64: \"base64-इन्कोड गरिएको स्ट्रिङ\",\n        base64url: \"base64url-इन्कोड गरिएको स्ट्रिङ\",\n        json_string: \"JSON स्ट्रिङ\",\n        e164: \"E.164 नम्बर\",\n        credit_card: \"क्रेडिट कार्ड नम्बर\",\n        currency_code: \"मुद्रा कोड\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"इनपुट\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                return `अमान्य इनपुट: अपेक्षित ${expected}, प्राप्त ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `अमान्य इनपुट: अपेक्षित ${util.stringifyPrimitive(issue.values[0])}`;\n                return `अमान्य विकल्प: अपेक्षित मानहरू मध्ये एक ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `धेरै ठूलो: ${issue.origin ?? \"मान\"} मा ${adj}${issue.maximum.toString()} ${sizing.unit} ${sizing.verb}`;\n                return `धेरै ठूलो: ${issue.origin ?? \"मान\"} ${adj}${issue.maximum.toString()} हुनुपर्छ`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `धेरै सानो: ${issue.origin} मा ${adj}${issue.minimum.toString()} ${sizing.unit} ${sizing.verb}`;\n                return `धेरै सानो: ${issue.origin} ${adj}${issue.minimum.toString()} हुनुपर्छ`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `अमान्य स्ट्रिङ: \"${_issue.prefix}\" बाट सुरु हुनुपर्छ`;\n                if (_issue.format === \"ends_with\")\n                    return `अमान्य स्ट्रिङ: \"${_issue.suffix}\" मा समाप्त हुनुपर्छ`;\n                if (_issue.format === \"includes\")\n                    return `अमान्य स्ट्रिङ: \"${_issue.includes}\" समावेश हुनुपर्छ`;\n                if (_issue.format === \"regex\")\n                    return `अमान्य स्ट्रिङ: ढाँचा ${_issue.pattern} सँग मेल खानुपर्छ`;\n                return `अमान्य ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `अमान्य संख्या: ${issue.divisor} को गुणज हुनुपर्छ`;\n            case \"unrecognized_keys\":\n                return `अपरिचित कुञ्जी${issue.keys.length > 1 ? \"हरू\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `अमान्य कुञ्जी: ${issue.origin} मा`;\n            case \"invalid_union\":\n                if (issue.options && Array.isArray(issue.options) && issue.options.length > 0) {\n                    const opts = issue.options.map((o) => `'${o}'`).join(\" | \");\n                    return `अमान्य डिस्क्रिमिनेटर मान: अपेक्षित ${opts}`;\n                }\n                return \"अमान्य इनपुट\";\n            case \"invalid_element\":\n                return `अमान्य मान: ${issue.origin} मा`;\n            default:\n                return `अमान्य इनपुट`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"tekens\", verb: \"heeft\" },\n        file: { unit: \"bytes\", verb: \"heeft\" },\n        array: { unit: \"elementen\", verb: \"heeft\" },\n        set: { unit: \"elementen\", verb: \"heeft\" },\n        map: { unit: \"elementen\", verb: \"heeft\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"invoer\",\n        email: \"emailadres\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO datum en tijd\",\n        date: \"ISO datum\",\n        time: \"ISO tijd\",\n        duration: \"ISO duur\",\n        ipv4: \"IPv4-adres\",\n        ipv6: \"IPv6-adres\",\n        mac: \"MAC-adres\",\n        cidrv4: \"IPv4-bereik\",\n        cidrv6: \"IPv6-bereik\",\n        base64: \"base64-gecodeerde tekst\",\n        base64url: \"base64 URL-gecodeerde tekst\",\n        json_string: \"JSON string\",\n        e164: \"E.164-nummer\",\n        credit_card: \"creditcardnummer\",\n        currency_code: \"valutacode\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"invoer\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"getal\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Ongeldige invoer: verwacht instanceof ${issue.expected}, ontving ${received}`;\n                }\n                return `Ongeldige invoer: verwacht ${expected}, ontving ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Ongeldige invoer: verwacht ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Ongeldige optie: verwacht één van ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                const longName = issue.origin === \"date\" ? \"laat\" : issue.origin === \"string\" ? \"lang\" : \"groot\";\n                if (sizing)\n                    return `Te ${longName}: verwacht dat ${issue.origin ?? \"waarde\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementen\"} ${sizing.verb}`;\n                return `Te ${longName}: verwacht dat ${issue.origin ?? \"waarde\"} ${adj}${issue.maximum.toString()} is`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                const shortName = issue.origin === \"date\" ? \"vroeg\" : issue.origin === \"string\" ? \"kort\" : \"klein\";\n                if (sizing) {\n                    return `Te ${shortName}: verwacht dat ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} ${sizing.verb}`;\n                }\n                return `Te ${shortName}: verwacht dat ${issue.origin} ${adj}${issue.minimum.toString()} is`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Ongeldige tekst: moet met \"${_issue.prefix}\" beginnen`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Ongeldige tekst: moet op \"${_issue.suffix}\" eindigen`;\n                if (_issue.format === \"includes\")\n                    return `Ongeldige tekst: moet \"${_issue.includes}\" bevatten`;\n                if (_issue.format === \"regex\")\n                    return `Ongeldige tekst: moet overeenkomen met patroon ${_issue.pattern}`;\n                return `Ongeldig: ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Ongeldig getal: moet een veelvoud van ${issue.divisor} zijn`;\n            case \"unrecognized_keys\":\n                return `Onbekende key${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Ongeldige key in ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Ongeldige invoer\";\n            case \"invalid_element\":\n                return `Ongeldige waarde in ${issue.origin}`;\n            default:\n                return `Ongeldige invoer`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"teikn\", verb: \"å ha\" },\n        file: { unit: \"bytes\", verb: \"å ha\" },\n        array: { unit: \"element\", verb: \"å innehalde\" },\n        set: { unit: \"element\", verb: \"å innehalde\" },\n        map: { unit: \"element\", verb: \"å innehalde\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"input\",\n        email: \"e-postadresse\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO dato- og klokkeslett\",\n        date: \"ISO-dato\",\n        time: \"ISO-klokkeslett\",\n        duration: \"ISO-varigheit\",\n        ipv4: \"IPv4-adresse\",\n        ipv6: \"IPv6-adresse\",\n        mac: \"MAC-adresse\",\n        cidrv4: \"IPv4-spekter\",\n        cidrv6: \"IPv6-spekter\",\n        base64: \"base64-enkoda streng\",\n        base64url: \"base64url-enkoda streng\",\n        json_string: \"JSON-streng\",\n        e164: \"E.164-nummer\",\n        credit_card: \"kredittkortnummer\",\n        currency_code: \"valutakode\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"tal\",\n        array: \"liste\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Ugyldig input: forventa instanceof ${issue.expected}, fekk ${received}`;\n                }\n                return `Ugyldig input: forventa ${expected}, fekk ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Ugyldig verdi: forventa ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Ugyldig val: forventa eitt av ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `For stor(t): forventa ${issue.origin ?? \"value\"} til å ha ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"element\"}`;\n                return `For stor(t): forventa ${issue.origin ?? \"value\"} til å ha ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `For lite(n): forventa ${issue.origin} til å ha ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `For lite(n): forventa ${issue.origin} til å ha ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Ugyldig streng: må starte med \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Ugyldig streng: må slutte med \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Ugyldig streng: må innehalde \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Ugyldig streng: må matche mønsteret ${_issue.pattern}`;\n                return `Ugyldig ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Ugyldig tal: må vere eit multiplum av ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `${issue.keys.length > 1 ? \"Ukjende nøklar\" : \"Ukjend nøkkel\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Ugyldig nøkkel i ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Ugyldig input\";\n            case \"invalid_element\":\n                return `Ugyldig verdi i ${issue.origin}`;\n            default:\n                return `Ugyldig input`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"tegn\", verb: \"å ha\" },\n        file: { unit: \"bytes\", verb: \"å ha\" },\n        array: { unit: \"elementer\", verb: \"å inneholde\" },\n        set: { unit: \"elementer\", verb: \"å inneholde\" },\n        map: { unit: \"elementer\", verb: \"å inneholde\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"input\",\n        email: \"e-postadresse\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO dato- og klokkeslett\",\n        date: \"ISO-dato\",\n        time: \"ISO-klokkeslett\",\n        duration: \"ISO-varighet\",\n        ipv4: \"IPv4-adresse\",\n        ipv6: \"IPv6-adresse\",\n        mac: \"MAC-adresse\",\n        cidrv4: \"IPv4-spekter\",\n        cidrv6: \"IPv6-spekter\",\n        base64: \"base64-enkodet streng\",\n        base64url: \"base64url-enkodet streng\",\n        json_string: \"JSON-streng\",\n        e164: \"E.164-nummer\",\n        credit_card: \"kredittkortnummer\",\n        currency_code: \"valutakode\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"tall\",\n        array: \"liste\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Ugyldig input: forventet instanceof ${issue.expected}, fikk ${received}`;\n                }\n                return `Ugyldig input: forventet ${expected}, fikk ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Ugyldig verdi: forventet ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Ugyldig valg: forventet en av ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `For stor(t): forventet ${issue.origin ?? \"value\"} til å ha ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementer\"}`;\n                return `For stor(t): forventet ${issue.origin ?? \"value\"} til å ha ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `For lite(n): forventet ${issue.origin} til å ha ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `For lite(n): forventet ${issue.origin} til å ha ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Ugyldig streng: må starte med \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Ugyldig streng: må ende med \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Ugyldig streng: må inneholde \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Ugyldig streng: må matche mønsteret ${_issue.pattern}`;\n                return `Ugyldig ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Ugyldig tall: må være et multiplum av ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `${issue.keys.length > 1 ? \"Ukjente nøkler\" : \"Ukjent nøkkel\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Ugyldig nøkkel i ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Ugyldig input\";\n            case \"invalid_element\":\n                return `Ugyldig verdi i ${issue.origin}`;\n            default:\n                return `Ugyldig input`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"harf\", verb: \"olmalıdır\" },\n        file: { unit: \"bayt\", verb: \"olmalıdır\" },\n        array: { unit: \"unsur\", verb: \"olmalıdır\" },\n        set: { unit: \"unsur\", verb: \"olmalıdır\" },\n        map: { unit: \"unsur\", verb: \"olmalıdır\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"giren\",\n        email: \"epostagâh\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO hengâmı\",\n        date: \"ISO tarihi\",\n        time: \"ISO zamanı\",\n        duration: \"ISO müddeti\",\n        ipv4: \"IPv4 nişânı\",\n        ipv6: \"IPv6 nişânı\",\n        mac: \"MAC nişânı\",\n        cidrv4: \"IPv4 menzili\",\n        cidrv6: \"IPv6 menzili\",\n        base64: \"base64-şifreli metin\",\n        base64url: \"base64url-şifreli metin\",\n        json_string: \"JSON metin\",\n        e164: \"E.164 sayısı\",\n        credit_card: \"i'tibâr kartı numarası\",\n        currency_code: \"para birimi kodu\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"giren\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"numara\",\n        array: \"saf\",\n        null: \"gayb\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Fâsit giren: umulan instanceof ${issue.expected}, alınan ${received}`;\n                }\n                return `Fâsit giren: umulan ${expected}, alınan ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Fâsit giren: umulan ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Fâsit tercih: mûteberler ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Fazla büyük: ${issue.origin ?? \"value\"}, ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elements\"} sahip olmalıydı.`;\n                return `Fazla büyük: ${issue.origin ?? \"value\"}, ${adj}${issue.maximum.toString()} olmalıydı.`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Fazla küçük: ${issue.origin}, ${adj}${issue.minimum.toString()} ${sizing.unit} sahip olmalıydı.`;\n                }\n                return `Fazla küçük: ${issue.origin}, ${adj}${issue.minimum.toString()} olmalıydı.`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Fâsit metin: \"${_issue.prefix}\" ile başlamalı.`;\n                if (_issue.format === \"ends_with\")\n                    return `Fâsit metin: \"${_issue.suffix}\" ile bitmeli.`;\n                if (_issue.format === \"includes\")\n                    return `Fâsit metin: \"${_issue.includes}\" ihtivâ etmeli.`;\n                if (_issue.format === \"regex\")\n                    return `Fâsit metin: ${_issue.pattern} nakşına uymalı.`;\n                return `Fâsit ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Fâsit sayı: ${issue.divisor} katı olmalıydı.`;\n            case \"unrecognized_keys\":\n                return `Tanınmayan anahtar ${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} için tanınmayan anahtar var.`;\n            case \"invalid_union\":\n                return \"Giren tanınamadı.\";\n            case \"invalid_element\":\n                return `${issue.origin} için tanınmayan kıymet var.`;\n            default:\n                return `Kıymet tanınamadı.`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"توکي\", verb: \"ولري\" },\n        file: { unit: \"بایټس\", verb: \"ولري\" },\n        array: { unit: \"توکي\", verb: \"ولري\" },\n        set: { unit: \"توکي\", verb: \"ولري\" },\n        map: { unit: \"توکي\", verb: \"ولري\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"ورودي\",\n        email: \"بریښنالیک\",\n        url: \"یو آر ال\",\n        emoji: \"ایموجي\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"نیټه او وخت\",\n        date: \"نېټه\",\n        time: \"وخت\",\n        duration: \"موده\",\n        ipv4: \"د IPv4 پته\",\n        ipv6: \"د IPv6 پته\",\n        mac: \"د MAC پته\",\n        cidrv4: \"د IPv4 ساحه\",\n        cidrv6: \"د IPv6 ساحه\",\n        base64: \"base64-encoded متن\",\n        base64url: \"base64url-encoded متن\",\n        json_string: \"JSON متن\",\n        e164: \"د E.164 شمېره\",\n        credit_card: \"د کریډیټ کارت شمیره\",\n        currency_code: \"د اسعارو کوډ\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"ورودي\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"عدد\",\n        array: \"ارې\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `ناسم ورودي: باید instanceof ${issue.expected} وای, مګر ${received} ترلاسه شو`;\n                }\n                return `ناسم ورودي: باید ${expected} وای, مګر ${received} ترلاسه شو`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1) {\n                    return `ناسم ورودي: باید ${util.stringifyPrimitive(issue.values[0])} وای`;\n                }\n                return `ناسم انتخاب: باید یو له ${util.joinValues(issue.values, \"|\")} څخه وای`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `ډیر لوی: ${issue.origin ?? \"ارزښت\"} باید ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"عنصرونه\"} ولري`;\n                }\n                return `ډیر لوی: ${issue.origin ?? \"ارزښت\"} باید ${adj}${issue.maximum.toString()} وي`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `ډیر کوچنی: ${issue.origin} باید ${adj}${issue.minimum.toString()} ${sizing.unit} ولري`;\n                }\n                return `ډیر کوچنی: ${issue.origin} باید ${adj}${issue.minimum.toString()} وي`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `ناسم متن: باید د \"${_issue.prefix}\" سره پیل شي`;\n                }\n                if (_issue.format === \"ends_with\") {\n                    return `ناسم متن: باید د \"${_issue.suffix}\" سره پای ته ورسيږي`;\n                }\n                if (_issue.format === \"includes\") {\n                    return `ناسم متن: باید \"${_issue.includes}\" ولري`;\n                }\n                if (_issue.format === \"regex\") {\n                    return `ناسم متن: باید د ${_issue.pattern} سره مطابقت ولري`;\n                }\n                return `${FormatDictionary[_issue.format] ?? issue.format} ناسم دی`;\n            }\n            case \"not_multiple_of\":\n                return `ناسم عدد: باید د ${issue.divisor} مضرب وي`;\n            case \"unrecognized_keys\":\n                return `ناسم ${issue.keys.length > 1 ? \"کلیډونه\" : \"کلیډ\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `ناسم کلیډ په ${issue.origin} کې`;\n            case \"invalid_union\":\n                return `ناسمه ورودي`;\n            case \"invalid_element\":\n                return `ناسم عنصر په ${issue.origin} کې`;\n            default:\n                return `ناسمه ورودي`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"znaków\", verb: \"mieć\" },\n        file: { unit: \"bajtów\", verb: \"mieć\" },\n        array: { unit: \"elementów\", verb: \"mieć\" },\n        set: { unit: \"elementów\", verb: \"mieć\" },\n        map: { unit: \"elementów\", verb: \"mieć\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"wyrażenie\",\n        email: \"adres email\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"data i godzina w formacie ISO\",\n        date: \"data w formacie ISO\",\n        time: \"godzina w formacie ISO\",\n        duration: \"czas trwania ISO\",\n        ipv4: \"adres IPv4\",\n        ipv6: \"adres IPv6\",\n        mac: \"adres MAC\",\n        cidrv4: \"zakres IPv4\",\n        cidrv6: \"zakres IPv6\",\n        base64: \"ciąg znaków zakodowany w formacie base64\",\n        base64url: \"ciąg znaków zakodowany w formacie base64url\",\n        json_string: \"ciąg znaków w formacie JSON\",\n        e164: \"liczba E.164\",\n        credit_card: \"numer karty kredytowej\",\n        currency_code: \"kod waluty\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"wejście\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"liczba\",\n        array: \"tablica\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Nieprawidłowe dane wejściowe: oczekiwano instanceof ${issue.expected}, otrzymano ${received}`;\n                }\n                return `Nieprawidłowe dane wejściowe: oczekiwano ${expected}, otrzymano ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Nieprawidłowe dane wejściowe: oczekiwano ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Nieprawidłowa opcja: oczekiwano jednej z wartości ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Za duża wartość: oczekiwano, że ${issue.origin ?? \"wartość\"} będzie mieć ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementów\"}`;\n                }\n                return `Zbyt duż(y/a/e): oczekiwano, że ${issue.origin ?? \"wartość\"} będzie wynosić ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Za mała wartość: oczekiwano, że ${issue.origin ?? \"wartość\"} będzie mieć ${adj}${issue.minimum.toString()} ${sizing.unit ?? \"elementów\"}`;\n                }\n                return `Zbyt mał(y/a/e): oczekiwano, że ${issue.origin ?? \"wartość\"} będzie wynosić ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Nieprawidłowy ciąg znaków: musi zaczynać się od \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Nieprawidłowy ciąg znaków: musi kończyć się na \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Nieprawidłowy ciąg znaków: musi zawierać \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Nieprawidłowy ciąg znaków: musi odpowiadać wzorcowi ${_issue.pattern}`;\n                return `Nieprawidłow(y/a/e) ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Nieprawidłowa liczba: musi być wielokrotnością ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Nierozpoznane klucze${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Nieprawidłowy klucz w ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Nieprawidłowe dane wejściowe\";\n            case \"invalid_element\":\n                return `Nieprawidłowa wartość w ${issue.origin}`;\n            default:\n                return `Nieprawidłowe dane wejściowe`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"caracteres\" },\n        file: { unit: \"bytes\" },\n        array: { unit: \"elementos\" },\n        set: { unit: \"elementos\" },\n        map: { unit: \"entradas\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"a entrada\",\n        email: \"o endereço de e-mail\",\n        url: \"o URL\",\n        emoji: \"o emoji\",\n        uuid: \"o UUID\",\n        uuidv4: \"o UUIDv4\",\n        uuidv6: \"o UUIDv6\",\n        nanoid: \"o nanoid\",\n        guid: \"o GUID\",\n        cuid: \"o cuid\",\n        cuid2: \"o cuid2\",\n        ulid: \"o ULID\",\n        xid: \"o XID\",\n        ksuid: \"o KSUID\",\n        datetime: \"a data e hora ISO\",\n        date: \"a data ISO\",\n        time: \"a hora ISO\",\n        duration: \"a duração ISO\",\n        ipv4: \"o endereço IPv4\",\n        ipv6: \"o endereço IPv6\",\n        mac: \"o endereço MAC\",\n        cidrv4: \"o intervalo de endereços IPv4\",\n        cidrv6: \"o intervalo de endereços IPv6\",\n        base64: \"o texto codificado em base64\",\n        base64url: \"o texto codificado em base64url\",\n        json_string: \"o texto JSON\",\n        e164: \"o número E.164\",\n        credit_card: \"o número de cartão de crédito\",\n        currency_code: \"o código de moeda\",\n        iban: \"o IBAN\",\n        jwt: \"o JWT\",\n        template_literal: \"a entrada\",\n    };\n    const Gender = {\n        masculine: { definite: \"o\", indefinite: \"um\" },\n        feminine: { definite: \"a\", indefinite: \"uma\" },\n    };\n    const TypeDictionary = {\n        string: { name: \"texto\", articles: Gender.masculine },\n        number: { name: \"número\", articles: Gender.masculine },\n        int: { name: \"número inteiro\", articles: Gender.masculine },\n        boolean: { name: \"valor booleano\", articles: Gender.masculine },\n        bigint: { name: \"número bigint\", articles: Gender.masculine },\n        symbol: { name: \"símbolo\", articles: Gender.masculine },\n        undefined: { name: 'valor \"undefined\"', articles: Gender.masculine },\n        null: { name: 'valor \"nulo\"', articles: Gender.masculine },\n        never: { name: 'valor \"never\"', articles: Gender.masculine },\n        void: { name: 'valor \"void\"', articles: Gender.masculine },\n        date: { name: \"data\", articles: Gender.feminine },\n        array: { name: \"vetor\", articles: Gender.masculine },\n        object: { name: \"objeto\", articles: Gender.masculine },\n        tuple: { name: \"tuplo\", articles: Gender.masculine },\n        record: { name: \"registo\", articles: Gender.masculine },\n        map: { name: \"mapa\", articles: Gender.masculine },\n        set: { name: \"conjunto\", articles: Gender.masculine },\n        file: { name: \"ficheiro\", articles: Gender.masculine },\n        nonoptional: { name: \"valor não opcional\", articles: Gender.masculine },\n        nan: { name: 'valor \"NaN\"', articles: Gender.masculine }, // Compatibility: \"nan\" -> \"NaN\" for display\n        function: { name: \"função\", articles: Gender.feminine },\n    };\n    function translateOriginWithArticle(type, articleType) {\n        const translatedValue = TypeDictionary[type] ?? { name: `valor \"${type}\"`, articles: Gender.masculine };\n        return `${translatedValue.articles[articleType]} ${translatedValue.name}`;\n    }\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = translateOriginWithArticle(issue.expected, \"indefinite\");\n                const receivedType = util.parsedType(issue.input);\n                const received = translateOriginWithArticle(receivedType, \"indefinite\");\n                return `Entrada inválida: esperava ${expected}, recebeu ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Entrada inválida: esperava ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Opção inválida: esperava uma das seguintes opções: ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Demasiado grande: esperava que ${translateOriginWithArticle(issue.origin, \"definite\")} tivesse ${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"elementos\"}`;\n                return `Demasiado grande: esperava que ${translateOriginWithArticle(issue.origin, \"definite\")} fosse ${adj} ${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Demasiado pequeno: esperava que ${translateOriginWithArticle(issue.origin, \"definite\")} tivesse ${adj} ${issue.minimum.toString()} ${sizing.unit ?? \"elementos\"}`;\n                }\n                return `Demasiado pequeno: esperava que ${translateOriginWithArticle(issue.origin, \"definite\")} fosse ${adj} ${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Texto inválido: deve começar por \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Texto inválido: deve terminar em \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Texto inválido: deve incluir \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Texto inválido: deve corresponder ao padrão ${_issue.pattern}`;\n                return `Formato d${FormatDictionary[_issue.format] ?? issue.format} inválido`;\n            }\n            case \"not_multiple_of\":\n                return `Número inválido: deve ser múltiplo de ${issue.divisor}`;\n            case \"unrecognized_keys\": {\n                const plural = issue.keys.length > 1 ? \"s\" : \"\";\n                return `Chave${plural} inválida${plural}: ${util.joinValues(issue.keys, \", \")}`;\n            }\n            case \"invalid_key\":\n                return `Entrada inválida n${translateOriginWithArticle(issue.origin, \"definite\")}`;\n            case \"invalid_union\":\n                if (issue.options && Array.isArray(issue.options) && issue.options.length > 0) {\n                    const opts = issue.options.map((o) => `'${o}'`).join(\" | \");\n                    return `Valor de discriminação inválido. Esperava ${opts}`;\n                }\n                return \"Entrada inválida\";\n            case \"invalid_element\":\n                return `Entrada inválida n${translateOriginWithArticle(issue.origin, \"definite\")}`;\n            default:\n                return `Entrada inválida`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"caracteres\" },\n        file: { unit: \"bytes\" },\n        array: { unit: \"elementos\" },\n        set: { unit: \"elementos\" },\n        map: { unit: \"entradas\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"a entrada\",\n        email: \"o endereço de e-mail\",\n        url: \"o URL\",\n        emoji: \"o emoji\",\n        uuid: \"o UUID\",\n        uuidv4: \"o UUIDv4\",\n        uuidv6: \"o UUIDv6\",\n        nanoid: \"o nanoid\",\n        guid: \"o GUID\",\n        cuid: \"o cuid\",\n        cuid2: \"o cuid2\",\n        ulid: \"o ULID\",\n        xid: \"o XID\",\n        ksuid: \"o KSUID\",\n        datetime: \"a data e hora ISO\",\n        date: \"a data ISO\",\n        time: \"a hora ISO\",\n        duration: \"a duração ISO\",\n        ipv4: \"o endereço IPv4\",\n        ipv6: \"o endereço IPv6\",\n        mac: \"o endereço MAC\",\n        cidrv4: \"a faixa de endereços IPv4\",\n        cidrv6: \"a faixa de endereços IPv6\",\n        base64: \"o texto codificado em base64\",\n        base64url: \"o texto codificado em base64url\",\n        json_string: \"o texto JSON\",\n        e164: \"o número E.164\",\n        credit_card: \"o número de cartão de crédito\",\n        currency_code: \"o código de moeda\",\n        iban: \"o IBAN\",\n        jwt: \"o JWT\",\n        template_literal: \"a entrada\",\n    };\n    const Gender = {\n        masculine: { definite: \"o\", indefinite: \"um\" },\n        feminine: { definite: \"a\", indefinite: \"uma\" },\n    };\n    const TypeDictionary = {\n        string: { name: \"texto\", articles: Gender.masculine },\n        number: { name: \"número\", articles: Gender.masculine },\n        int: { name: \"número inteiro\", articles: Gender.masculine },\n        boolean: { name: \"valor booleano\", articles: Gender.masculine },\n        bigint: { name: \"número bigint\", articles: Gender.masculine },\n        symbol: { name: \"símbolo\", articles: Gender.masculine },\n        undefined: { name: 'valor \"undefined\"', articles: Gender.masculine },\n        null: { name: 'valor \"nulo\"', articles: Gender.masculine },\n        never: { name: 'valor \"never\"', articles: Gender.masculine },\n        void: { name: 'valor \"void\"', articles: Gender.masculine },\n        date: { name: \"data\", articles: Gender.feminine },\n        array: { name: \"vetor\", articles: Gender.masculine },\n        object: { name: \"objeto\", articles: Gender.masculine },\n        tuple: { name: \"tupla\", articles: Gender.feminine },\n        record: { name: \"registro\", articles: Gender.masculine },\n        map: { name: \"mapa\", articles: Gender.masculine },\n        set: { name: \"conjunto\", articles: Gender.masculine },\n        file: { name: \"arquivo\", articles: Gender.masculine },\n        nonoptional: { name: \"valor não opcional\", articles: Gender.masculine },\n        nan: { name: 'valor \"NaN\"', articles: Gender.masculine }, // Compatibility: \"nan\" -> \"NaN\" for display\n        function: { name: \"função\", articles: Gender.feminine },\n    };\n    function translateOriginWithArticle(type, articleType) {\n        const translatedValue = TypeDictionary[type] ?? { name: `valor \"${type}\"`, articles: Gender.masculine };\n        return `${translatedValue.articles[articleType]} ${translatedValue.name}`;\n    }\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = translateOriginWithArticle(issue.expected, \"indefinite\");\n                const receivedType = util.parsedType(issue.input);\n                const received = translateOriginWithArticle(receivedType, \"indefinite\");\n                return `Entrada inválida: esperava ${expected}, recebeu ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Entrada inválida: esperava ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Opção inválida: esperava uma das seguintes opções: ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Grande demais: esperava que ${translateOriginWithArticle(issue.origin, \"definite\")} tivesse ${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"elementos\"}`;\n                return `Grande demais: esperava que ${translateOriginWithArticle(issue.origin, \"definite\")} fosse ${adj} ${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Pequeno demais: esperava que ${translateOriginWithArticle(issue.origin, \"definite\")} tivesse ${adj} ${issue.minimum.toString()} ${sizing.unit ?? \"elementos\"}`;\n                }\n                return `Pequeno demais: esperava que ${translateOriginWithArticle(issue.origin, \"definite\")} fosse ${adj} ${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Texto inválido: deve começar com \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Texto inválido: deve terminar com \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Texto inválido: deve incluir \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Texto inválido: deve corresponder ao padrão ${_issue.pattern}`;\n                return `Formato d${FormatDictionary[_issue.format] ?? issue.format} inválido`;\n            }\n            case \"not_multiple_of\":\n                return `Número inválido: deve ser múltiplo de ${issue.divisor}`;\n            case \"unrecognized_keys\": {\n                const plural = issue.keys.length > 1 ? \"s\" : \"\";\n                return `Chave${plural} inválida${plural}: ${util.joinValues(issue.keys, \", \")}`;\n            }\n            case \"invalid_key\":\n                return `Entrada inválida n${translateOriginWithArticle(issue.origin, \"definite\")}`;\n            case \"invalid_union\":\n                if (issue.options && Array.isArray(issue.options) && issue.options.length > 0) {\n                    const opts = issue.options.map((o) => `'${o}'`).join(\" | \");\n                    return `Valor de discriminação inválido. Esperava ${opts}`;\n                }\n                return \"Entrada inválida\";\n            case \"invalid_element\":\n                return `Entrada inválida n${translateOriginWithArticle(issue.origin, \"definite\")}`;\n            default:\n                return `Entrada inválida`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"caractere\", verb: \"să aibă\" },\n        file: { unit: \"octeți\", verb: \"să aibă\" },\n        array: { unit: \"elemente\", verb: \"să aibă\" },\n        set: { unit: \"elemente\", verb: \"să aibă\" },\n        map: { unit: \"intrări\", verb: \"să aibă\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"intrare\",\n        email: \"adresă de email\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"dată și oră ISO\",\n        date: \"dată ISO\",\n        time: \"oră ISO\",\n        duration: \"durată ISO\",\n        ipv4: \"adresă IPv4\",\n        ipv6: \"adresă IPv6\",\n        mac: \"adresă MAC\",\n        cidrv4: \"interval IPv4\",\n        cidrv6: \"interval IPv6\",\n        base64: \"șir codat base64\",\n        base64url: \"șir codat base64url\",\n        json_string: \"șir JSON\",\n        e164: \"număr E.164\",\n        credit_card: \"număr de card de credit\",\n        currency_code: \"cod valutar\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"intrare\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        string: \"șir\",\n        number: \"număr\",\n        boolean: \"boolean\",\n        function: \"funcție\",\n        array: \"matrice\",\n        object: \"obiect\",\n        undefined: \"nedefinit\",\n        symbol: \"simbol\",\n        bigint: \"număr mare\",\n        void: \"void\",\n        never: \"never\",\n        map: \"hartă\",\n        set: \"set\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                return `Intrare invalidă: așteptat ${expected}, primit ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Intrare invalidă: așteptat ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Opțiune invalidă: așteptat una dintre ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Prea mare: așteptat ca ${issue.origin ?? \"valoarea\"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elemente\"}`;\n                return `Prea mare: așteptat ca ${issue.origin ?? \"valoarea\"} să fie ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Prea mic: așteptat ca ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Prea mic: așteptat ca ${issue.origin} să fie ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Șir invalid: trebuie să înceapă cu \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Șir invalid: trebuie să se termine cu \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Șir invalid: trebuie să includă \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Șir invalid: trebuie să se potrivească cu modelul ${_issue.pattern}`;\n                return `Format invalid: ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Număr invalid: trebuie să fie multiplu de ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Chei nerecunoscute: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Cheie invalidă în ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Intrare invalidă\";\n            case \"invalid_element\":\n                return `Valoare invalidă în ${issue.origin}`;\n            default:\n                return `Intrare invalidă`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nfunction getRussianPlural(count, one, few, many) {\n    const absCount = Math.abs(count);\n    const lastDigit = absCount % 10;\n    const lastTwoDigits = absCount % 100;\n    if (lastTwoDigits >= 11 && lastTwoDigits <= 19) {\n        return many;\n    }\n    if (lastDigit === 1) {\n        return one;\n    }\n    if (lastDigit >= 2 && lastDigit <= 4) {\n        return few;\n    }\n    return many;\n}\nconst error = () => {\n    const Sizable = {\n        string: {\n            unit: {\n                one: \"символ\",\n                few: \"символа\",\n                many: \"символов\",\n            },\n            verb: \"иметь\",\n        },\n        file: {\n            unit: {\n                one: \"байт\",\n                few: \"байта\",\n                many: \"байт\",\n            },\n            verb: \"иметь\",\n        },\n        array: {\n            unit: {\n                one: \"элемент\",\n                few: \"элемента\",\n                many: \"элементов\",\n            },\n            verb: \"иметь\",\n        },\n        set: {\n            unit: {\n                one: \"элемент\",\n                few: \"элемента\",\n                many: \"элементов\",\n            },\n            verb: \"иметь\",\n        },\n        map: {\n            unit: {\n                one: \"элемент\",\n                few: \"элемента\",\n                many: \"элементов\",\n            },\n            verb: \"иметь\",\n        },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"ввод\",\n        email: \"email адрес\",\n        url: \"URL\",\n        emoji: \"эмодзи\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO дата и время\",\n        date: \"ISO дата\",\n        time: \"ISO время\",\n        duration: \"ISO длительность\",\n        ipv4: \"IPv4 адрес\",\n        ipv6: \"IPv6 адрес\",\n        mac: \"MAC адрес\",\n        cidrv4: \"IPv4 диапазон\",\n        cidrv6: \"IPv6 диапазон\",\n        base64: \"строка в формате base64\",\n        base64url: \"строка в формате base64url\",\n        json_string: \"JSON строка\",\n        e164: \"номер E.164\",\n        credit_card: \"номер кредитной карты\",\n        currency_code: \"код валюты\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"ввод\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"число\",\n        array: \"массив\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Неверный ввод: ожидалось instanceof ${issue.expected}, получено ${received}`;\n                }\n                return `Неверный ввод: ожидалось ${expected}, получено ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Неверный ввод: ожидалось ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Неверный вариант: ожидалось одно из ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    const maxValue = Number(issue.maximum);\n                    const unit = getRussianPlural(maxValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);\n                    return `Слишком большое значение: ожидалось, что ${issue.origin ?? \"значение\"} будет иметь ${adj}${issue.maximum.toString()} ${unit}`;\n                }\n                return `Слишком большое значение: ожидалось, что ${issue.origin ?? \"значение\"} будет ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    const minValue = Number(issue.minimum);\n                    const unit = getRussianPlural(minValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);\n                    return `Слишком маленькое значение: ожидалось, что ${issue.origin} будет иметь ${adj}${issue.minimum.toString()} ${unit}`;\n                }\n                return `Слишком маленькое значение: ожидалось, что ${issue.origin} будет ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Неверная строка: должна начинаться с \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Неверная строка: должна заканчиваться на \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Неверная строка: должна содержать \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Неверная строка: должна соответствовать шаблону ${_issue.pattern}`;\n                return `Неверный ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Неверное число: должно быть кратным ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Нераспознанн${issue.keys.length > 1 ? \"ые\" : \"ый\"} ключ${issue.keys.length > 1 ? \"и\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Неверный ключ в ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Неверные входные данные\";\n            case \"invalid_element\":\n                return `Неверное значение в ${issue.origin}`;\n            default:\n                return `Неверные входные данные`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"znakov\", verb: \"mať\" },\n        file: { unit: \"bajtov\", verb: \"mať\" },\n        array: { unit: \"prvkov\", verb: \"mať\" },\n        set: { unit: \"prvkov\", verb: \"mať\" },\n        map: { unit: \"položiek\", verb: \"mať\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"regulárny výraz\",\n        email: \"e-mailová adresa\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"dátum a čas vo formáte ISO\",\n        date: \"dátum vo formáte ISO\",\n        time: \"čas vo formáte ISO\",\n        duration: \"doba trvania ISO\",\n        ipv4: \"IPv4 adresa\",\n        ipv6: \"IPv6 adresa\",\n        mac: \"MAC adresa\",\n        cidrv4: \"rozsah IPv4\",\n        cidrv6: \"rozsah IPv6\",\n        base64: \"reťazec zakódovaný vo formáte base64\",\n        base64url: \"reťazec zakódovaný vo formáte base64url\",\n        json_string: \"reťazec vo formáte JSON\",\n        e164: \"číslo E.164\",\n        credit_card: \"číslo kreditnej karty\",\n        currency_code: \"kód meny\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"vstup\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"číslo\",\n        string: \"reťazec\",\n        function: \"funkcia\",\n        array: \"pole\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Neplatný vstup: očakávané instanceof ${issue.expected}, obdržané ${received}`;\n                }\n                return `Neplatný vstup: očakávané ${expected}, obdržané ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Neplatný vstup: očakávané ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Neplatný vstup: očakávaná jedna z hodnôt ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Hodnota je príliš veľká: ${issue.origin ?? \"hodnota\"} musí mať ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"prvkov\"}`;\n                }\n                return `Hodnota je príliš veľká: ${issue.origin ?? \"hodnota\"} musí byť ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Hodnota je príliš malá: ${issue.origin ?? \"hodnota\"} musí mať ${adj}${issue.minimum.toString()} ${sizing.unit ?? \"prvkov\"}`;\n                }\n                return `Hodnota je príliš malá: ${issue.origin ?? \"hodnota\"} musí byť ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Neplatný reťazec: musí začínať na \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Neplatný reťazec: musí končiť na \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Neplatný reťazec: musí obsahovať \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Neplatný reťazec: musí zodpovedať vzoru ${_issue.pattern}`;\n                return `Neplatný formát ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Neplatné číslo: musí byť násobkom ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Neznáme klúče: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Neplatný klúč v ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Neplatný vstup\";\n            case \"invalid_element\":\n                return `Neplatná hodnota v ${issue.origin}`;\n            default:\n                return `Neplatný vstup`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"znakov\", verb: \"imeti\" },\n        file: { unit: \"bajtov\", verb: \"imeti\" },\n        array: { unit: \"elementov\", verb: \"imeti\" },\n        set: { unit: \"elementov\", verb: \"imeti\" },\n        map: { unit: \"elementov\", verb: \"imeti\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"vnos\",\n        email: \"e-poštni naslov\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO datum in čas\",\n        date: \"ISO datum\",\n        time: \"ISO čas\",\n        duration: \"ISO trajanje\",\n        ipv4: \"IPv4 naslov\",\n        ipv6: \"IPv6 naslov\",\n        mac: \"MAC naslov\",\n        cidrv4: \"obseg IPv4\",\n        cidrv6: \"obseg IPv6\",\n        base64: \"base64 kodiran niz\",\n        base64url: \"base64url kodiran niz\",\n        json_string: \"JSON niz\",\n        e164: \"E.164 številka\",\n        credit_card: \"številka kreditne kartice\",\n        currency_code: \"koda valute\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"vnos\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"število\",\n        array: \"tabela\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Neveljaven vnos: pričakovano instanceof ${issue.expected}, prejeto ${received}`;\n                }\n                return `Neveljaven vnos: pričakovano ${expected}, prejeto ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Neveljaven vnos: pričakovano ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Neveljavna možnost: pričakovano eno izmed ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Preveliko: pričakovano, da bo ${issue.origin ?? \"vrednost\"} imelo ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementov\"}`;\n                return `Preveliko: pričakovano, da bo ${issue.origin ?? \"vrednost\"} ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Premajhno: pričakovano, da bo ${issue.origin} imelo ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Premajhno: pričakovano, da bo ${issue.origin} ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Neveljaven niz: mora se začeti z \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Neveljaven niz: mora se končati z \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Neveljaven niz: mora vsebovati \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Neveljaven niz: mora ustrezati vzorcu ${_issue.pattern}`;\n                return `Neveljaven ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Neveljavno število: mora biti večkratnik ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Neprepoznan${issue.keys.length > 1 ? \"i ključi\" : \" ključ\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Neveljaven ključ v ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Neveljaven vnos\";\n            case \"invalid_element\":\n                return `Neveljavna vrednost v ${issue.origin}`;\n            default:\n                return \"Neveljaven vnos\";\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"tecken\", verb: \"att ha\" },\n        file: { unit: \"bytes\", verb: \"att ha\" },\n        array: { unit: \"objekt\", verb: \"att innehålla\" },\n        set: { unit: \"objekt\", verb: \"att innehålla\" },\n        map: { unit: \"objekt\", verb: \"att innehålla\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"reguljärt uttryck\",\n        email: \"e-postadress\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO-datum och tid\",\n        date: \"ISO-datum\",\n        time: \"ISO-tid\",\n        duration: \"ISO-varaktighet\",\n        ipv4: \"IPv4-adress\",\n        ipv6: \"IPv6-adress\",\n        mac: \"MAC-adress\",\n        cidrv4: \"IPv4-spektrum\",\n        cidrv6: \"IPv6-spektrum\",\n        base64: \"base64-kodad sträng\",\n        base64url: \"base64url-kodad sträng\",\n        json_string: \"JSON-sträng\",\n        e164: \"E.164-nummer\",\n        credit_card: \"kreditkortsnummer\",\n        currency_code: \"valutakod\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"mall-literal\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"antal\",\n        array: \"lista\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Ogiltig inmatning: förväntat instanceof ${issue.expected}, fick ${received}`;\n                }\n                return `Ogiltig inmatning: förväntat ${expected}, fick ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Ogiltig inmatning: förväntat ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Ogiltigt val: förväntade en av ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `För stor(t): förväntade ${issue.origin ?? \"värdet\"} att ha ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"element\"}`;\n                }\n                return `För stor(t): förväntat ${issue.origin ?? \"värdet\"} att ha ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `För lite(t): förväntade ${issue.origin ?? \"värdet\"} att ha ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `För lite(t): förväntade ${issue.origin ?? \"värdet\"} att ha ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Ogiltig sträng: måste börja med \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Ogiltig sträng: måste sluta med \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Ogiltig sträng: måste innehålla \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Ogiltig sträng: måste matcha mönstret \"${_issue.pattern}\"`;\n                return `Ogiltig(t) ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Ogiltigt tal: måste vara en multipel av ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `${issue.keys.length > 1 ? \"Okända nycklar\" : \"Okänd nyckel\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Ogiltig nyckel i ${issue.origin ?? \"värdet\"}`;\n            case \"invalid_union\":\n                return \"Ogiltig input\";\n            case \"invalid_element\":\n                return `Ogiltigt värde i ${issue.origin ?? \"värdet\"}`;\n            default:\n                return `Ogiltig input`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"எழுத்துக்கள்\", verb: \"கொண்டிருக்க வேண்டும்\" },\n        file: { unit: \"பைட்டுகள்\", verb: \"கொண்டிருக்க வேண்டும்\" },\n        array: { unit: \"உறுப்புகள்\", verb: \"கொண்டிருக்க வேண்டும்\" },\n        set: { unit: \"உறுப்புகள்\", verb: \"கொண்டிருக்க வேண்டும்\" },\n        map: { unit: \"உறுப்புகள்\", verb: \"கொண்டிருக்க வேண்டும்\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"உள்ளீடு\",\n        email: \"மின்னஞ்சல் முகவரி\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO தேதி நேரம்\",\n        date: \"ISO தேதி\",\n        time: \"ISO நேரம்\",\n        duration: \"ISO கால அளவு\",\n        ipv4: \"IPv4 முகவரி\",\n        ipv6: \"IPv6 முகவரி\",\n        mac: \"MAC முகவரி\",\n        cidrv4: \"IPv4 வரம்பு\",\n        cidrv6: \"IPv6 வரம்பு\",\n        base64: \"base64-encoded சரம்\",\n        base64url: \"base64url-encoded சரம்\",\n        json_string: \"JSON சரம்\",\n        e164: \"E.164 எண்\",\n        credit_card: \"கடன் அட்டை எண்\",\n        currency_code: \"நாணயக் குறியீடு\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"எண்\",\n        array: \"அணி\",\n        null: \"வெறுமை\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `தவறான உள்ளீடு: எதிர்பார்க்கப்பட்டது instanceof ${issue.expected}, பெறப்பட்டது ${received}`;\n                }\n                return `தவறான உள்ளீடு: எதிர்பார்க்கப்பட்டது ${expected}, பெறப்பட்டது ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `தவறான உள்ளீடு: எதிர்பார்க்கப்பட்டது ${util.stringifyPrimitive(issue.values[0])}`;\n                return `தவறான விருப்பம்: எதிர்பார்க்கப்பட்டது ${util.joinValues(issue.values, \"|\")} இல் ஒன்று`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `மிக பெரியது: எதிர்பார்க்கப்பட்டது ${issue.origin ?? \"மதிப்பு\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"உறுப்புகள்\"} ஆக இருக்க வேண்டும்`;\n                }\n                return `மிக பெரியது: எதிர்பார்க்கப்பட்டது ${issue.origin ?? \"மதிப்பு\"} ${adj}${issue.maximum.toString()} ஆக இருக்க வேண்டும்`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `மிகச் சிறியது: எதிர்பார்க்கப்பட்டது ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} ஆக இருக்க வேண்டும்`; //\n                }\n                return `மிகச் சிறியது: எதிர்பார்க்கப்பட்டது ${issue.origin} ${adj}${issue.minimum.toString()} ஆக இருக்க வேண்டும்`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `தவறான சரம்: \"${_issue.prefix}\" இல் தொடங்க வேண்டும்`;\n                if (_issue.format === \"ends_with\")\n                    return `தவறான சரம்: \"${_issue.suffix}\" இல் முடிவடைய வேண்டும்`;\n                if (_issue.format === \"includes\")\n                    return `தவறான சரம்: \"${_issue.includes}\" ஐ உள்ளடக்க வேண்டும்`;\n                if (_issue.format === \"regex\")\n                    return `தவறான சரம்: ${_issue.pattern} முறைபாட்டுடன் பொருந்த வேண்டும்`;\n                return `தவறான ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `தவறான எண்: ${issue.divisor} இன் பலமாக இருக்க வேண்டும்`;\n            case \"unrecognized_keys\":\n                return `அடையாளம் தெரியாத விசை${issue.keys.length > 1 ? \"கள்\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} இல் தவறான விசை`;\n            case \"invalid_union\":\n                return \"தவறான உள்ளீடு\";\n            case \"invalid_element\":\n                return `${issue.origin} இல் தவறான மதிப்பு`;\n            default:\n                return `தவறான உள்ளீடு`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    // singular units after numerals in Tajik\n    const Sizable = {\n        string: { unit: \"аломат\", verb: \"дошта бошад\" },\n        file: { unit: \"байт\", verb: \"дошта бошад\" },\n        array: { unit: \"унсур\", verb: \"дошта бошад\" },\n        set: { unit: \"унсур\", verb: \"дошта бошад\" },\n        map: { unit: \"сабт\", verb: \"дошта бошад\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"вуруд\",\n        email: \"суроғаи email\",\n        url: \"URL\",\n        emoji: \"эмоҷи\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"санаву вақти ISO\",\n        date: \"санаи ISO\",\n        time: \"вақти ISO\",\n        duration: \"давомнокии ISO\",\n        ipv4: \"суроғаи IPv4\",\n        ipv6: \"суроғаи IPv6\",\n        mac: \"суроғаи MAC\",\n        cidrv4: \"маҳдудаи IPv4\",\n        cidrv6: \"маҳдудаи IPv6\",\n        base64: \"сатри дар формати base64\",\n        base64url: \"сатри дар формати base64url\",\n        json_string: \"сатри JSON\",\n        e164: \"рақами E.164\",\n        credit_card: \"рақами корти кредитӣ\",\n        currency_code: \"рамзи асъор\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"вуруд\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"рақам\",\n        string: \"сатр\",\n        array: \"массив\",\n        object: \"объект\",\n        date: \"сана\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                return `Вуруди нодуруст: ${expected} интизор мерафт, ${received} гирифта шуд`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Вуруди нодуруст: ${util.stringifyPrimitive(issue.values[0])} интизор мерафт`;\n                return `Интихоби нодуруст: яке аз ${util.joinValues(issue.values, \"|\")} интизор мерафт`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Хеле калон: ${issue.origin ?? \"қимат\"} бояд ${adj}${issue.maximum.toString()} ${sizing.unit} ${sizing.verb}`;\n                return `Хеле калон: ${issue.origin ?? \"қимат\"} бояд ${adj}${issue.maximum.toString()} бошад`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Хеле хурд: ${issue.origin} бояд ${adj}${issue.minimum.toString()} ${sizing.unit} ${sizing.verb}`;\n                return `Хеле хурд: ${issue.origin} бояд ${adj}${issue.minimum.toString()} бошад`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Сатри нодуруст: бояд бо \"${_issue.prefix}\" оғоз шавад`;\n                if (_issue.format === \"ends_with\")\n                    return `Сатри нодуруст: бояд бо \"${_issue.suffix}\" анҷом ёбад`;\n                if (_issue.format === \"includes\")\n                    return `Сатри нодуруст: бояд \"${_issue.includes}\"-ро дар бар гирад`;\n                if (_issue.format === \"regex\")\n                    return `Сатри нодуруст: бояд ба намунаи ${_issue.pattern} мувофиқат кунад`;\n                return `${FormatDictionary[_issue.format] ?? issue.format}-и нодуруст`;\n            }\n            case \"not_multiple_of\":\n                return `Рақами нодуруст: бояд ба ${issue.divisor} бе бақия тақсим шавад`;\n            case \"unrecognized_keys\":\n                return `Калид${issue.keys.length > 1 ? \"ҳои\" : \"и\"} номаълум: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Калиди нодуруст дар ${issue.origin}`;\n            case \"invalid_union\":\n                if (issue.options && Array.isArray(issue.options) && issue.options.length > 0) {\n                    const opts = issue.options.map((o) => `'${o}'`).join(\" | \");\n                    return `Қимати нодурусти дискриминатор: ${opts} интизор мерафт`;\n                }\n                return \"Вуруди нодуруст\";\n            case \"invalid_element\":\n                return `Қимати нодуруст дар ${issue.origin}`;\n            default:\n                return `Вуруди нодуруст`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"ตัวอักษร\", verb: \"ควรมี\" },\n        file: { unit: \"ไบต์\", verb: \"ควรมี\" },\n        array: { unit: \"รายการ\", verb: \"ควรมี\" },\n        set: { unit: \"รายการ\", verb: \"ควรมี\" },\n        map: { unit: \"รายการ\", verb: \"ควรมี\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"ข้อมูลที่ป้อน\",\n        email: \"ที่อยู่อีเมล\",\n        url: \"URL\",\n        emoji: \"อิโมจิ\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"วันที่เวลาแบบ ISO\",\n        date: \"วันที่แบบ ISO\",\n        time: \"เวลาแบบ ISO\",\n        duration: \"ช่วงเวลาแบบ ISO\",\n        ipv4: \"ที่อยู่ IPv4\",\n        ipv6: \"ที่อยู่ IPv6\",\n        mac: \"ที่อยู่ MAC\",\n        cidrv4: \"ช่วง IP แบบ IPv4\",\n        cidrv6: \"ช่วง IP แบบ IPv6\",\n        base64: \"ข้อความแบบ Base64\",\n        base64url: \"ข้อความแบบ Base64 สำหรับ URL\",\n        json_string: \"ข้อความแบบ JSON\",\n        e164: \"เบอร์โทรศัพท์ระหว่างประเทศ (E.164)\",\n        credit_card: \"หมายเลขบัตรเครดิต\",\n        currency_code: \"รหัสสกุลเงิน\",\n        iban: \"IBAN\",\n        jwt: \"โทเคน JWT\",\n        template_literal: \"ข้อมูลที่ป้อน\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"ตัวเลข\",\n        array: \"อาร์เรย์ (Array)\",\n        null: \"ไม่มีค่า (null)\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `ประเภทข้อมูลไม่ถูกต้อง: ควรเป็น instanceof ${issue.expected} แต่ได้รับ ${received}`;\n                }\n                return `ประเภทข้อมูลไม่ถูกต้อง: ควรเป็น ${expected} แต่ได้รับ ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `ค่าไม่ถูกต้อง: ควรเป็น ${util.stringifyPrimitive(issue.values[0])}`;\n                return `ตัวเลือกไม่ถูกต้อง: ควรเป็นหนึ่งใน ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"ไม่เกิน\" : \"น้อยกว่า\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `เกินกำหนด: ${issue.origin ?? \"ค่า\"} ควรมี${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"รายการ\"}`;\n                return `เกินกำหนด: ${issue.origin ?? \"ค่า\"} ควรมี${adj} ${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \"อย่างน้อย\" : \"มากกว่า\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `น้อยกว่ากำหนด: ${issue.origin} ควรมี${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `น้อยกว่ากำหนด: ${issue.origin} ควรมี${adj} ${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `รูปแบบไม่ถูกต้อง: ข้อความต้องขึ้นต้นด้วย \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `รูปแบบไม่ถูกต้อง: ข้อความต้องลงท้ายด้วย \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `รูปแบบไม่ถูกต้อง: ข้อความต้องมี \"${_issue.includes}\" อยู่ในข้อความ`;\n                if (_issue.format === \"regex\")\n                    return `รูปแบบไม่ถูกต้อง: ต้องตรงกับรูปแบบที่กำหนด ${_issue.pattern}`;\n                return `รูปแบบไม่ถูกต้อง: ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `ตัวเลขไม่ถูกต้อง: ต้องเป็นจำนวนที่หารด้วย ${issue.divisor} ได้ลงตัว`;\n            case \"unrecognized_keys\":\n                return `พบคีย์ที่ไม่รู้จัก: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `คีย์ไม่ถูกต้องใน ${issue.origin}`;\n            case \"invalid_union\":\n                return \"ข้อมูลไม่ถูกต้อง: ไม่ตรงกับรูปแบบยูเนียนที่กำหนดไว้\";\n            case \"invalid_element\":\n                return `ข้อมูลไม่ถูกต้องใน ${issue.origin}`;\n            default:\n                return `ข้อมูลไม่ถูกต้อง`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"simwol\", verb: \"bolmaly\" },\n        file: { unit: \"baýt\", verb: \"bolmaly\" },\n        array: { unit: \"elementler\", verb: \"bolmaly\" },\n        set: { unit: \"elementler\", verb: \"bolmaly\" },\n        map: { unit: \"elementler\", verb: \"bolmaly\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"giriş\",\n        email: \"e-poçta salgysy\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO sene we wagt\",\n        date: \"ISO sene\",\n        time: \"ISO wagt\",\n        duration: \"ISO wagt aralygy\",\n        ipv4: \"IPv4 salgysy\",\n        ipv6: \"IPv6 salgysy\",\n        mac: \"MAC salgysy\",\n        cidrv4: \"IPv4 aralygy\",\n        cidrv6: \"IPv6 aralygy\",\n        base64: \"base64 bilen şifrlenen setir\",\n        base64url: \"base64url bilen şifrlenen setir\",\n        json_string: \"JSON setiri\",\n        e164: \"E.164 nomeri\",\n        credit_card: \"kredit kartynyň nomeri\",\n        currency_code: \"walýuta kody\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"şablon\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                return `Nädogry baha: garaşylan ${expected} ýerine ${received} alyndy`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Nädogry baha: ${util.stringifyPrimitive(issue.values[0])} bolmaly`;\n                return `Nädogry saýlaw: aşakdakylardan biri bolmaly: ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Has uly: garaşylýan ${issue.origin ?? \"baha\"} ${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"element\"}`;\n                return `Has uly: garaşylýan ${issue.origin ?? \"baha\"} ${adj} ${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Has kiçi: garaşylýan ${issue.origin} ${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n                return `Has kiçi: garaşylýan ${issue.origin} ${adj} ${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Nädogry setir: \"${_issue.prefix}\" bilen başlamaly`;\n                if (_issue.format === \"ends_with\")\n                    return `Nädogry setir: \"${_issue.suffix}\" bilen gutarmaly`;\n                if (_issue.format === \"includes\")\n                    return `Nädogry setir: \"${_issue.includes}\" saklamaly`;\n                if (_issue.format === \"regex\")\n                    return `Nädogry setir: ${_issue.pattern} nusga laýyk bolmaly`;\n                return `Nädogry ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Nädogry san: ${issue.divisor} bilen galyndysyz bölünmeli`;\n            case \"unrecognized_keys\":\n                return `Tanalmaýan açar${issue.keys.length > 1 ? \"lar\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} içinde nädogry açar`;\n            case \"invalid_union\":\n                return \"Nädogry baha\";\n            case \"invalid_element\":\n                return `${issue.origin} içinde nädogry baha`;\n            default:\n                return `Nädogry baha`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"karakter\", verb: \"olmalı\" },\n        file: { unit: \"bayt\", verb: \"olmalı\" },\n        array: { unit: \"öğe\", verb: \"olmalı\" },\n        set: { unit: \"öğe\", verb: \"olmalı\" },\n        map: { unit: \"öğe\", verb: \"olmalı\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"girdi\",\n        email: \"e-posta adresi\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO tarih ve saat\",\n        date: \"ISO tarih\",\n        time: \"ISO saat\",\n        duration: \"ISO süre\",\n        ipv4: \"IPv4 adresi\",\n        ipv6: \"IPv6 adresi\",\n        mac: \"MAC adresi\",\n        cidrv4: \"IPv4 aralığı\",\n        cidrv6: \"IPv6 aralığı\",\n        base64: \"base64 ile şifrelenmiş metin\",\n        base64url: \"base64url ile şifrelenmiş metin\",\n        json_string: \"JSON dizesi\",\n        e164: \"E.164 sayısı\",\n        credit_card: \"kredi kartı numarası\",\n        currency_code: \"para birimi kodu\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"Şablon dizesi\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Geçersiz değer: beklenen instanceof ${issue.expected}, alınan ${received}`;\n                }\n                return `Geçersiz değer: beklenen ${expected}, alınan ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Geçersiz değer: beklenen ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Geçersiz seçenek: aşağıdakilerden biri olmalı: ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Çok büyük: beklenen ${issue.origin ?? \"değer\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"öğe\"}`;\n                return `Çok büyük: beklenen ${issue.origin ?? \"değer\"} ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Çok küçük: beklenen ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                return `Çok küçük: beklenen ${issue.origin} ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Geçersiz metin: \"${_issue.prefix}\" ile başlamalı`;\n                if (_issue.format === \"ends_with\")\n                    return `Geçersiz metin: \"${_issue.suffix}\" ile bitmeli`;\n                if (_issue.format === \"includes\")\n                    return `Geçersiz metin: \"${_issue.includes}\" içermeli`;\n                if (_issue.format === \"regex\")\n                    return `Geçersiz metin: ${_issue.pattern} desenine uymalı`;\n                return `Geçersiz ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Geçersiz sayı: ${issue.divisor} ile tam bölünebilmeli`;\n            case \"unrecognized_keys\":\n                return `Tanınmayan anahtar${issue.keys.length > 1 ? \"lar\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} içinde geçersiz anahtar`;\n            case \"invalid_union\":\n                return \"Geçersiz değer\";\n            case \"invalid_element\":\n                return `${issue.origin} içinde geçersiz değer`;\n            default:\n                return `Geçersiz değer`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"символів\", verb: \"матиме\" },\n        file: { unit: \"байтів\", verb: \"матиме\" },\n        array: { unit: \"елементів\", verb: \"матиме\" },\n        set: { unit: \"елементів\", verb: \"матиме\" },\n        map: { unit: \"елементів\", verb: \"матиме\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"вхідні дані\",\n        email: \"адреса електронної пошти\",\n        url: \"URL\",\n        emoji: \"емодзі\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"дата та час ISO\",\n        date: \"дата ISO\",\n        time: \"час ISO\",\n        duration: \"тривалість ISO\",\n        ipv4: \"адреса IPv4\",\n        ipv6: \"адреса IPv6\",\n        mac: \"адреса MAC\",\n        cidrv4: \"діапазон IPv4\",\n        cidrv6: \"діапазон IPv6\",\n        base64: \"рядок у кодуванні base64\",\n        base64url: \"рядок у кодуванні base64url\",\n        json_string: \"рядок JSON\",\n        e164: \"номер E.164\",\n        credit_card: \"номер кредитної картки\",\n        currency_code: \"код валюти\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"вхідні дані\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"число\",\n        array: \"масив\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Неправильні вхідні дані: очікується instanceof ${issue.expected}, отримано ${received}`;\n                }\n                return `Неправильні вхідні дані: очікується ${expected}, отримано ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Неправильні вхідні дані: очікується ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Неправильна опція: очікується одне з ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Занадто велике: очікується, що ${issue.origin ?? \"значення\"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"елементів\"}`;\n                return `Занадто велике: очікується, що ${issue.origin ?? \"значення\"} буде ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Занадто мале: очікується, що ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Занадто мале: очікується, що ${issue.origin} буде ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Неправильний рядок: повинен починатися з \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Неправильний рядок: повинен закінчуватися на \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Неправильний рядок: повинен містити \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Неправильний рядок: повинен відповідати шаблону ${_issue.pattern}`;\n                return `Неправильний ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Неправильне число: повинно бути кратним ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Нерозпізнаний ключ${issue.keys.length > 1 ? \"і\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Неправильний ключ у ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Неправильні вхідні дані\";\n            case \"invalid_element\":\n                return `Неправильне значення у ${issue.origin}`;\n            default:\n                return `Неправильні вхідні дані`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import uk from \"./uk.js\";\n/** @deprecated Use `uk` instead. */\nexport default function () {\n    return uk();\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"حروف\", verb: \"ہونا\" },\n        file: { unit: \"بائٹس\", verb: \"ہونا\" },\n        array: { unit: \"آئٹمز\", verb: \"ہونا\" },\n        set: { unit: \"آئٹمز\", verb: \"ہونا\" },\n        map: { unit: \"آئٹمز\", verb: \"ہونا\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"ان پٹ\",\n        email: \"ای میل ایڈریس\",\n        url: \"یو آر ایل\",\n        emoji: \"ایموجی\",\n        uuid: \"یو یو آئی ڈی\",\n        uuidv4: \"یو یو آئی ڈی وی 4\",\n        uuidv6: \"یو یو آئی ڈی وی 6\",\n        nanoid: \"نینو آئی ڈی\",\n        guid: \"جی یو آئی ڈی\",\n        cuid: \"سی یو آئی ڈی\",\n        cuid2: \"سی یو آئی ڈی 2\",\n        ulid: \"یو ایل آئی ڈی\",\n        xid: \"ایکس آئی ڈی\",\n        ksuid: \"کے ایس یو آئی ڈی\",\n        datetime: \"آئی ایس او ڈیٹ ٹائم\",\n        date: \"آئی ایس او تاریخ\",\n        time: \"آئی ایس او وقت\",\n        duration: \"آئی ایس او مدت\",\n        ipv4: \"آئی پی وی 4 ایڈریس\",\n        ipv6: \"آئی پی وی 6 ایڈریس\",\n        mac: \"ایم اے سی ایڈریس\",\n        cidrv4: \"آئی پی وی 4 رینج\",\n        cidrv6: \"آئی پی وی 6 رینج\",\n        base64: \"بیس 64 ان کوڈڈ سٹرنگ\",\n        base64url: \"بیس 64 یو آر ایل ان کوڈڈ سٹرنگ\",\n        json_string: \"جے ایس او این سٹرنگ\",\n        e164: \"ای 164 نمبر\",\n        credit_card: \"کریڈٹ کارڈ نمبر\",\n        currency_code: \"کرنسی کوڈ\",\n        iban: \"IBAN\",\n        jwt: \"جے ڈبلیو ٹی\",\n        template_literal: \"ان پٹ\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"نمبر\",\n        array: \"آرے\",\n        null: \"نل\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `غلط ان پٹ: instanceof ${issue.expected} متوقع تھا، ${received} موصول ہوا`;\n                }\n                return `غلط ان پٹ: ${expected} متوقع تھا، ${received} موصول ہوا`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `غلط ان پٹ: ${util.stringifyPrimitive(issue.values[0])} متوقع تھا`;\n                return `غلط آپشن: ${util.joinValues(issue.values, \"|\")} میں سے ایک متوقع تھا`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `بہت بڑا: ${issue.origin ?? \"ویلیو\"} کے ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"عناصر\"} ہونے متوقع تھے`;\n                return `بہت بڑا: ${issue.origin ?? \"ویلیو\"} کا ${adj}${issue.maximum.toString()} ہونا متوقع تھا`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `بہت چھوٹا: ${issue.origin} کے ${adj}${issue.minimum.toString()} ${sizing.unit} ہونے متوقع تھے`;\n                }\n                return `بہت چھوٹا: ${issue.origin} کا ${adj}${issue.minimum.toString()} ہونا متوقع تھا`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `غلط سٹرنگ: \"${_issue.prefix}\" سے شروع ہونا چاہیے`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `غلط سٹرنگ: \"${_issue.suffix}\" پر ختم ہونا چاہیے`;\n                if (_issue.format === \"includes\")\n                    return `غلط سٹرنگ: \"${_issue.includes}\" شامل ہونا چاہیے`;\n                if (_issue.format === \"regex\")\n                    return `غلط سٹرنگ: پیٹرن ${_issue.pattern} سے میچ ہونا چاہیے`;\n                return `غلط ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `غلط نمبر: ${issue.divisor} کا مضاعف ہونا چاہیے`;\n            case \"unrecognized_keys\":\n                return `غیر تسلیم شدہ کی${issue.keys.length > 1 ? \"ز\" : \"\"}: ${util.joinValues(issue.keys, \"، \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} میں غلط کی`;\n            case \"invalid_union\":\n                return \"غلط ان پٹ\";\n            case \"invalid_element\":\n                return `${issue.origin} میں غلط ویلیو`;\n            default:\n                return `غلط ان پٹ`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"belgi\", verb: \"bo‘lishi kerak\" },\n        file: { unit: \"bayt\", verb: \"bo‘lishi kerak\" },\n        array: { unit: \"element\", verb: \"bo‘lishi kerak\" },\n        set: { unit: \"element\", verb: \"bo‘lishi kerak\" },\n        map: { unit: \"yozuv\", verb: \"bo‘lishi kerak\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"kirish\",\n        email: \"elektron pochta manzili\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO sana va vaqti\",\n        date: \"ISO sana\",\n        time: \"ISO vaqt\",\n        duration: \"ISO davomiylik\",\n        ipv4: \"IPv4 manzil\",\n        ipv6: \"IPv6 manzil\",\n        mac: \"MAC manzil\",\n        cidrv4: \"IPv4 diapazon\",\n        cidrv6: \"IPv6 diapazon\",\n        base64: \"base64 kodlangan satr\",\n        base64url: \"base64url kodlangan satr\",\n        json_string: \"JSON satr\",\n        e164: \"E.164 raqam\",\n        credit_card: \"kredit karta raqami\",\n        currency_code: \"valyuta kodi\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"kirish\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"raqam\",\n        array: \"massiv\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Noto‘g‘ri kirish: kutilgan instanceof ${issue.expected}, qabul qilingan ${received}`;\n                }\n                return `Noto‘g‘ri kirish: kutilgan ${expected}, qabul qilingan ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Noto‘g‘ri kirish: kutilgan ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Noto‘g‘ri variant: quyidagilardan biri kutilgan ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Juda katta: kutilgan ${issue.origin ?? \"qiymat\"} ${adj}${issue.maximum.toString()} ${sizing.unit} ${sizing.verb}`;\n                return `Juda katta: kutilgan ${issue.origin ?? \"qiymat\"} ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Juda kichik: kutilgan ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} ${sizing.verb}`;\n                }\n                return `Juda kichik: kutilgan ${issue.origin} ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Noto‘g‘ri satr: \"${_issue.prefix}\" bilan boshlanishi kerak`;\n                if (_issue.format === \"ends_with\")\n                    return `Noto‘g‘ri satr: \"${_issue.suffix}\" bilan tugashi kerak`;\n                if (_issue.format === \"includes\")\n                    return `Noto‘g‘ri satr: \"${_issue.includes}\" ni o‘z ichiga olishi kerak`;\n                if (_issue.format === \"regex\")\n                    return `Noto‘g‘ri satr: ${_issue.pattern} shabloniga mos kelishi kerak`;\n                return `Noto‘g‘ri ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Noto‘g‘ri raqam: ${issue.divisor} ning karralisi bo‘lishi kerak`;\n            case \"unrecognized_keys\":\n                return `Noma’lum kalit${issue.keys.length > 1 ? \"lar\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} dagi kalit noto‘g‘ri`;\n            case \"invalid_union\":\n                return \"Noto‘g‘ri kirish\";\n            case \"invalid_element\":\n                return `${issue.origin} da noto‘g‘ri qiymat`;\n            default:\n                return `Noto‘g‘ri kirish`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"ký tự\", verb: \"có\" },\n        file: { unit: \"byte\", verb: \"có\" },\n        array: { unit: \"phần tử\", verb: \"có\" },\n        set: { unit: \"phần tử\", verb: \"có\" },\n        map: { unit: \"phần tử\", verb: \"có\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"đầu vào\",\n        email: \"địa chỉ email\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ngày giờ ISO\",\n        date: \"ngày ISO\",\n        time: \"giờ ISO\",\n        duration: \"khoảng thời gian ISO\",\n        ipv4: \"địa chỉ IPv4\",\n        ipv6: \"địa chỉ IPv6\",\n        mac: \"địa chỉ MAC\",\n        cidrv4: \"dải IPv4\",\n        cidrv6: \"dải IPv6\",\n        base64: \"chuỗi mã hóa base64\",\n        base64url: \"chuỗi mã hóa base64url\",\n        json_string: \"chuỗi JSON\",\n        e164: \"số E.164\",\n        credit_card: \"số thẻ tín dụng\",\n        currency_code: \"mã tiền tệ\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"đầu vào\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"số\",\n        array: \"mảng\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Đầu vào không hợp lệ: mong đợi instanceof ${issue.expected}, nhận được ${received}`;\n                }\n                return `Đầu vào không hợp lệ: mong đợi ${expected}, nhận được ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Đầu vào không hợp lệ: mong đợi ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Tùy chọn không hợp lệ: mong đợi một trong các giá trị ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Quá lớn: mong đợi ${issue.origin ?? \"giá trị\"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"phần tử\"}`;\n                return `Quá lớn: mong đợi ${issue.origin ?? \"giá trị\"} ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Quá nhỏ: mong đợi ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Quá nhỏ: mong đợi ${issue.origin} ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Chuỗi không hợp lệ: phải bắt đầu bằng \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Chuỗi không hợp lệ: phải kết thúc bằng \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Chuỗi không hợp lệ: phải bao gồm \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Chuỗi không hợp lệ: phải khớp với mẫu ${_issue.pattern}`;\n                return `${FormatDictionary[_issue.format] ?? issue.format} không hợp lệ`;\n            }\n            case \"not_multiple_of\":\n                return `Số không hợp lệ: phải là bội số của ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Khóa không được nhận dạng: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Khóa không hợp lệ trong ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Đầu vào không hợp lệ\";\n            case \"invalid_element\":\n                return `Giá trị không hợp lệ trong ${issue.origin}`;\n            default:\n                return `Đầu vào không hợp lệ`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"字符\", verb: \"包含\" },\n        file: { unit: \"字节\", verb: \"包含\" },\n        array: { unit: \"项\", verb: \"包含\" },\n        set: { unit: \"项\", verb: \"包含\" },\n        map: { unit: \"项\", verb: \"包含\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"输入\",\n        email: \"电子邮件\",\n        url: \"URL\",\n        emoji: \"表情符号\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO日期时间\",\n        date: \"ISO日期\",\n        time: \"ISO时间\",\n        duration: \"ISO时长\",\n        ipv4: \"IPv4地址\",\n        ipv6: \"IPv6地址\",\n        mac: \"MAC地址\",\n        cidrv4: \"IPv4网段\",\n        cidrv6: \"IPv6网段\",\n        base64: \"base64编码字符串\",\n        base64url: \"base64url编码字符串\",\n        json_string: \"JSON字符串\",\n        e164: \"E.164号码\",\n        credit_card: \"信用卡号\",\n        currency_code: \"货币代码\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"输入\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"数字\",\n        array: \"数组\",\n        null: \"空值(null)\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `无效输入：期望 instanceof ${issue.expected}，实际接收 ${received}`;\n                }\n                return `无效输入：期望 ${expected}，实际接收 ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `无效输入：期望 ${util.stringifyPrimitive(issue.values[0])}`;\n                return `无效选项：期望以下之一 ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `数值过大：期望 ${issue.origin ?? \"值\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"个元素\"}`;\n                return `数值过大：期望 ${issue.origin ?? \"值\"} ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `数值过小：期望 ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `数值过小：期望 ${issue.origin} ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `无效字符串：必须以 \"${_issue.prefix}\" 开头`;\n                if (_issue.format === \"ends_with\")\n                    return `无效字符串：必须以 \"${_issue.suffix}\" 结尾`;\n                if (_issue.format === \"includes\")\n                    return `无效字符串：必须包含 \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `无效字符串：必须满足正则表达式 ${_issue.pattern}`;\n                return `无效${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `无效数字：必须是 ${issue.divisor} 的倍数`;\n            case \"unrecognized_keys\":\n                return `出现未知的键(key): ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} 中的键(key)无效`;\n            case \"invalid_union\":\n                return \"无效输入\";\n            case \"invalid_element\":\n                return `${issue.origin} 中包含无效值(value)`;\n            default:\n                return `无效输入`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"字元\", verb: \"擁有\" },\n        file: { unit: \"位元組\", verb: \"擁有\" },\n        array: { unit: \"項目\", verb: \"擁有\" },\n        set: { unit: \"項目\", verb: \"擁有\" },\n        map: { unit: \"項目\", verb: \"擁有\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"輸入\",\n        email: \"郵件地址\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO 日期時間\",\n        date: \"ISO 日期\",\n        time: \"ISO 時間\",\n        duration: \"ISO 期間\",\n        ipv4: \"IPv4 位址\",\n        ipv6: \"IPv6 位址\",\n        mac: \"MAC 位址\",\n        cidrv4: \"IPv4 範圍\",\n        cidrv6: \"IPv6 範圍\",\n        base64: \"base64 編碼字串\",\n        base64url: \"base64url 編碼字串\",\n        json_string: \"JSON 字串\",\n        e164: \"E.164 數值\",\n        credit_card: \"信用卡號\",\n        currency_code: \"貨幣代碼\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"輸入\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `無效的輸入值：預期為 instanceof ${issue.expected}，但收到 ${received}`;\n                }\n                return `無效的輸入值：預期為 ${expected}，但收到 ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `無效的輸入值：預期為 ${util.stringifyPrimitive(issue.values[0])}`;\n                return `無效的選項：預期為以下其中之一 ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `數值過大：預期 ${issue.origin ?? \"值\"} 應為 ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"個元素\"}`;\n                return `數值過大：預期 ${issue.origin ?? \"值\"} 應為 ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `數值過小：預期 ${issue.origin} 應為 ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `數值過小：預期 ${issue.origin} 應為 ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `無效的字串：必須以 \"${_issue.prefix}\" 開頭`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `無效的字串：必須以 \"${_issue.suffix}\" 結尾`;\n                if (_issue.format === \"includes\")\n                    return `無效的字串：必須包含 \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `無效的字串：必須符合格式 ${_issue.pattern}`;\n                return `無效的 ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `無效的數字：必須為 ${issue.divisor} 的倍數`;\n            case \"unrecognized_keys\":\n                return `無法識別的鍵值${issue.keys.length > 1 ? \"們\" : \"\"}：${util.joinValues(issue.keys, \"、\")}`;\n            case \"invalid_key\":\n                return `${issue.origin} 中有無效的鍵值`;\n            case \"invalid_union\":\n                return \"無效的輸入值\";\n            case \"invalid_element\":\n                return `${issue.origin} 中有無效的值`;\n            default:\n                return `無效的輸入值`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"àmi\", verb: \"ní\" },\n        file: { unit: \"bytes\", verb: \"ní\" },\n        array: { unit: \"nkan\", verb: \"ní\" },\n        set: { unit: \"nkan\", verb: \"ní\" },\n        map: { unit: \"nkan\", verb: \"ní\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"ẹ̀rọ ìbáwọlé\",\n        email: \"àdírẹ́sì ìmẹ́lì\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"àkókò ISO\",\n        date: \"ọjọ́ ISO\",\n        time: \"àkókò ISO\",\n        duration: \"àkókò tó pé ISO\",\n        ipv4: \"àdírẹ́sì IPv4\",\n        ipv6: \"àdírẹ́sì IPv6\",\n        mac: \"àdírẹ́sì MAC\",\n        cidrv4: \"àgbègbè IPv4\",\n        cidrv6: \"àgbègbè IPv6\",\n        base64: \"ọ̀rọ̀ tí a kọ́ ní base64\",\n        base64url: \"ọ̀rọ̀ base64url\",\n        json_string: \"ọ̀rọ̀ JSON\",\n        e164: \"nọ́mbà E.164\",\n        credit_card: \"nọmba kaadi gbese\",\n        currency_code: \"koodu owó\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"ẹ̀rọ ìbáwọlé\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"nọ́mbà\",\n        array: \"akopọ\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Ìbáwọlé aṣìṣe: a ní láti fi instanceof ${issue.expected}, àmọ̀ a rí ${received}`;\n                }\n                return `Ìbáwọlé aṣìṣe: a ní láti fi ${expected}, àmọ̀ a rí ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Ìbáwọlé aṣìṣe: a ní láti fi ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Àṣàyàn aṣìṣe: yan ọ̀kan lára ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Tó pọ̀ jù: a ní láti jẹ́ pé ${issue.origin ?? \"iye\"} ${sizing.verb} ${adj}${issue.maximum} ${sizing.unit}`;\n                return `Tó pọ̀ jù: a ní láti jẹ́ ${adj}${issue.maximum}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Kéré ju: a ní láti jẹ́ pé ${issue.origin} ${sizing.verb} ${adj}${issue.minimum} ${sizing.unit}`;\n                return `Kéré ju: a ní láti jẹ́ ${adj}${issue.minimum}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Ọ̀rọ̀ aṣìṣe: gbọ́dọ̀ bẹ̀rẹ̀ pẹ̀lú \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Ọ̀rọ̀ aṣìṣe: gbọ́dọ̀ parí pẹ̀lú \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Ọ̀rọ̀ aṣìṣe: gbọ́dọ̀ ní \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Ọ̀rọ̀ aṣìṣe: gbọ́dọ̀ bá àpẹẹrẹ mu ${_issue.pattern}`;\n                return `Aṣìṣe: ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Nọ́mbà aṣìṣe: gbọ́dọ̀ jẹ́ èyà pípín ti ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Bọtìnì àìmọ̀: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Bọtìnì aṣìṣe nínú ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Ìbáwọlé aṣìṣe\";\n            case \"invalid_element\":\n                return `Iye aṣìṣe nínú ${issue.origin}`;\n            default:\n                return \"Ìbáwọlé aṣìṣe\";\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","export { default as ar } from \"./ar.js\";\nexport { default as az } from \"./az.js\";\nexport { default as be } from \"./be.js\";\nexport { default as bg } from \"./bg.js\";\nexport { default as bn } from \"./bn.js\";\nexport { default as ca } from \"./ca.js\";\nexport { default as ckb } from \"./ckb.js\";\nexport { default as cs } from \"./cs.js\";\nexport { default as da } from \"./da.js\";\nexport { default as de } from \"./de.js\";\nexport { default as el } from \"./el.js\";\nexport { default as en } from \"./en.js\";\nexport { default as eo } from \"./eo.js\";\nexport { default as es } from \"./es.js\";\nexport { default as fa } from \"./fa.js\";\nexport { default as fi } from \"./fi.js\";\nexport { default as fr } from \"./fr.js\";\nexport { default as frCA } from \"./fr-CA.js\";\nexport { default as gu } from \"./gu.js\";\nexport { default as he } from \"./he.js\";\nexport { default as hi } from \"./hi.js\";\nexport { default as hr } from \"./hr.js\";\nexport { default as hu } from \"./hu.js\";\nexport { default as hy } from \"./hy.js\";\nexport { default as id } from \"./id.js\";\nexport { default as is } from \"./is.js\";\nexport { default as it } from \"./it.js\";\nexport { default as ja } from \"./ja.js\";\nexport { default as ka } from \"./ka.js\";\nexport { default as kh } from \"./kh.js\";\nexport { default as km } from \"./km.js\";\nexport { default as kn } from \"./kn.js\";\nexport { default as ko } from \"./ko.js\";\nexport { default as lt } from \"./lt.js\";\nexport { default as mk } from \"./mk.js\";\nexport { default as ms } from \"./ms.js\";\nexport { default as ne } from \"./ne.js\";\nexport { default as nl } from \"./nl.js\";\nexport { default as nn } from \"./nn.js\";\nexport { default as no } from \"./no.js\";\nexport { default as ota } from \"./ota.js\";\nexport { default as ps } from \"./ps.js\";\nexport { default as pl } from \"./pl.js\";\nexport { default as pt } from \"./pt.js\";\nexport { default as ptBR } from \"./pt-BR.js\";\nexport { default as ro } from \"./ro.js\";\nexport { default as ru } from \"./ru.js\";\nexport { default as sk } from \"./sk.js\";\nexport { default as sl } from \"./sl.js\";\nexport { default as sv } from \"./sv.js\";\nexport { default as ta } from \"./ta.js\";\nexport { default as tg } from \"./tg.js\";\nexport { default as th } from \"./th.js\";\nexport { default as tk } from \"./tk.js\";\nexport { default as tr } from \"./tr.js\";\nexport { default as ua } from \"./ua.js\";\nexport { default as uk } from \"./uk.js\";\nexport { default as ur } from \"./ur.js\";\nexport { default as uz } from \"./uz.js\";\nexport { default as vi } from \"./vi.js\";\nexport { default as zhCN } from \"./zh-CN.js\";\nexport { default as zhTW } from \"./zh-TW.js\";\nexport { default as yo } from \"./yo.js\";\n","var _a;\nexport const $output = /*@__PURE__*/ Symbol(\"ZodOutput\");\nexport const $input = /*@__PURE__*/ Symbol(\"ZodInput\");\nexport class $ZodRegistry {\n    constructor() {\n        this._map = new WeakMap();\n        this._idmap = new Map();\n    }\n    add(schema, ..._meta) {\n        const meta = _meta[0];\n        this._map.set(schema, meta);\n        if (meta && typeof meta === \"object\" && \"id\" in meta) {\n            this._idmap.set(meta.id, schema);\n        }\n        return this;\n    }\n    clear() {\n        this._map = new WeakMap();\n        this._idmap = new Map();\n        return this;\n    }\n    remove(schema) {\n        const meta = this._map.get(schema);\n        if (meta && typeof meta === \"object\" && \"id\" in meta) {\n            this._idmap.delete(meta.id);\n        }\n        this._map.delete(schema);\n        return this;\n    }\n    get(schema) {\n        // return this._map.get(schema) as any;\n        // inherit metadata\n        const p = schema._zod.parent;\n        if (p) {\n            const pm = { ...(this.get(p) ?? {}) };\n            delete pm.id; // do not inherit id\n            const f = { ...pm, ...this._map.get(schema) };\n            return Object.keys(f).length ? f : undefined;\n        }\n        return this._map.get(schema);\n    }\n    has(schema) {\n        return this._map.has(schema);\n    }\n}\n// registries\nexport function registry() {\n    return new $ZodRegistry();\n}\n(_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry());\nexport const globalRegistry = globalThis.__zod_globalRegistry;\n","import { $ZodAsyncError } from \"./core.js\";\nimport { Doc } from \"./doc.js\";\nimport { isBackEdge, isRecursiveSchema } from \"./memoizer.js\";\nimport * as regexes from \"./regexes.js\";\nimport { isValidBase64, isValidBase64URL, isValidCIDRv6, isValidCreditCard, isValidIBAN, isValidIPv6, isValidJWT, mergeValues, stripTabAndNewline, urlHostnameOk, urlProtocolOk, validateURL, } from \"./schemas.js\";\nimport * as util from \"./util.js\";\n/** @internal Sentinel the compiled fast path returns when validation fails. */\nexport const INVALID = Symbol.for(\"zod.compile.invalid\");\n// Set on the parse ctx when a compiled wrapper falls back to the runtime, so nested compiled wrappers skip their fast paths for the rest of that parse.\nconst FALLBACK_FLAG = Symbol.for(\"zod.compile.fallback\");\n/** Raised when the schema contains async refinements or transforms. Surfaces only under `compile(schema, { strict: true })`. */\nexport class ZodCompileAsyncError extends Error {\n    constructor(message = \"z.compile does not support async refinements, transforms, or checks\") {\n        super(message);\n        this.name = \"ZodCompileAsyncError\";\n    }\n}\n/**\n * Raised when the schema contains a feature whose semantics the fast path\n * can't fully model. Both the shim in `zod/compile` and the default\n * `compile()` fall back to the runtime parser for that schema; only\n * `compile(schema, { strict: true })` lets it surface.\n */\nexport class ZodCompileUnsupportedError extends Error {\n    constructor(feature, islandable = true) {\n        super(`z.compile does not support ${feature}; this schema must use the runtime parser`);\n        this.name = \"ZodCompileUnsupportedError\";\n        this.islandable = islandable;\n    }\n}\n/**\n * Build the validator `validate` calls: the same codegen as the parser with the output construction\n * dropped. A schema the flag cannot express reuses the parser, which still answers correctly — it\n * just builds a value nothing reads.\n */\nfunction compileValidator(schema, parser) {\n    try {\n        return compileFn(schema, { assertOnly: true });\n    }\n    catch {\n        return parser;\n    }\n}\n/**\n * AOT-compile a Zod schema. Returns a clone whose `_zod.run` calls a generated\n * fast path first and falls back to the original runtime parser on failure.\n *\n * - Forward direction only. Backward (encode), async, and `skipChecks` paths\n *   bypass the fast path and use the runtime directly.\n * - Never throws. A schema the fast path can't model is returned unchanged and\n *   keeps using the runtime parser. Pass `{ strict: true }` to get the refusal\n *   as a thrown `ZodCompileUnsupportedError` / `ZodCompileAsyncError` instead.\n * - The original schema is unchanged. The clone shares children by reference.\n */\nexport function compile(schema, options) {\n    try {\n        const parser = compileFn(schema);\n        const clone = withParser(schema, parser);\n        // withParser leaves the parser as its own validator; the generated assert-only variant is better when we have one\n        clone._zod.bag.validator = compileValidator(schema, parser);\n        return clone;\n    }\n    catch (err) {\n        if (options?.strict)\n            throw err;\n        // a schema we can't compile still has to work, so hand it back untouched on the runtime parser — the same silent fallback global mode already does\n        return schema;\n    }\n}\n/**\n * Install an already-generated parser as a schema's fast path. Returns a clone; the original is\n * unchanged.\n *\n * The parser takes the input and returns the parsed value, or `INVALID` to hand the parse to the\n * runtime. It must be synchronous and forward-direction, and it must build fresh output rather than\n * return its input — Zod cannot check either, and a wrong *success* is returned to the caller as-is.\n *\n * `compile()` is the ordinary entry point. This is for a build-time or native compiler that produces\n * a parser where `new Function` is unavailable.\n */\nexport function withParser(schema, parser) {\n    // generated code never receives the parse context, so only the runtime can close a reference cycle; compileFn refuses these too\n    if (isRecursiveSchema(schema)) {\n        throw new ZodCompileUnsupportedError(\"a schema whose subtree contains a reference cycle\");\n    }\n    const clone = util.clone(schema);\n    // Capture the source-of-truth runtime eagerly. If schema._zod.run is itself a shim installed by global-mode (`__originalRun` set), unwrap past it. Otherwise capturing the live property lazily would let a later self- replacement of schema._zod.run feed our wrapper back into itself.\n    const liveRun = schema._zod.run;\n    const originalRun = liveRun.__originalRun ?? liveRun;\n    // Delegate to the *original* schema's run on bypass/fallback, not the clone's. The original closed over its own `inst` at construction time, and issue payloads use that reference to derive things like the class name for `z.instanceof(Test)`; calling the clone's freshly-initialized run would push issues with `inst === clone` and diverge from the original schema's error messages.\n    const wrapped = (payload, ctx) => {\n        if (ctx?.async ||\n            ctx?.direction === \"backward\" ||\n            ctx?.skipChecks ||\n            ctx?.[FALLBACK_FLAG]) {\n            return originalRun(payload, ctx);\n        }\n        // A memoized back-edge: only the runtime can close a reference cycle, and a transform on one must raise $ZodCyclicError from its own parse.\n        if (ctx && isBackEdge(ctx, payload.value)) {\n            return originalRun(payload, ctx);\n        }\n        const out = parser(payload.value);\n        if (out !== INVALID) {\n            payload.value = out;\n            return payload;\n        }\n        // Mark this parse as runtime-driven: under global mode every nested schema carries its own compiled wrapper, and without the flag the parent's runtime fallback re-enters each child's fast path, running user callbacks a third time on invalid input.\n        if (ctx)\n            ctx[FALLBACK_FLAG] = true;\n        return originalRun(payload, ctx);\n    };\n    // Let later compiles of (or through) this run unwrap to the true runtime — both the global shim and repeated z.compile calls rely on this. The bag also carries the parser and the validator, so the standalone validate can skip the payload and wrapper on the happy path.\n    wrapped.__originalRun = originalRun;\n    clone._zod.bag.fallbackRun = originalRun;\n    // a supplied parser answers `validate` too: one implementation means parse and validate cannot disagree, and its undefined `definite` keeps the runtime re-parse on every rejection\n    clone._zod.bag.validator = parser;\n    clone._zod.run = wrapped;\n    // The fast parse/safeParse closures fall back through the source schema's methods. If the source is shim- or wrapper-managed, those methods route into a compiled run and would execute user callbacks a third time on invalid input — the plain method → wrapper path is exactly 2x, so skip.\n    if (!liveRun.__originalRun)\n        installCompiledUserMethods(clone, schema, parser);\n    return clone;\n}\nfunction installCompiledUserMethods(target, source, parser) {\n    const targetAny = target;\n    const sourceAny = source;\n    if (typeof sourceAny.safeParse === \"function\") {\n        const originalSafeParse = sourceAny.safeParse;\n        targetAny.safeParse = (data, params) => {\n            const out = parser(data);\n            if (out !== INVALID) {\n                return { success: true, data: out };\n            }\n            return originalSafeParse(data, params);\n        };\n    }\n    if (typeof sourceAny.parse === \"function\") {\n        const originalParse = sourceAny.parse;\n        targetAny.parse = (data, params) => {\n            const out = parser(data);\n            if (out !== INVALID) {\n                return out;\n            }\n            return originalParse(data, params);\n        };\n    }\n}\n/**\n * @internal Generate the standalone compiled function: a parser by default, a validator under\n * `assertOnly`. Returns the parsed value, `true` where nothing reads the output, or `INVALID`. Consumers use `compile()`.\n */\nexport function compileFn(schema, options) {\n    // Cycle-breaking is keyed on the parse context, which generated code never receives. `shape` can be a getter that throws (z.pick() with an unrecognized mask key), so treat \"can't tell\" as recursive.\n    let recursive = true;\n    try {\n        recursive = isRecursiveSchema(schema);\n    }\n    catch { }\n    if (recursive) {\n        throw new ZodCompileUnsupportedError(\"a schema whose subtree contains a reference cycle\");\n    }\n    const ctx = {\n        constants: new Map(),\n        constantCounter: 0,\n        varCounter: 0,\n        definite: true,\n    };\n    const doc = new Doc([\"input\"]);\n    const outputAccessor = generateCheck(doc, ctx, schema, \"input\", !options?.assertOnly);\n    // In assert mode a root that built nothing has already returned INVALID on every failure, so reaching the end means valid.\n    doc.write(outputAccessor === null ? `return true;` : `return ${outputAccessor};`);\n    // Build the function with hoisted constants Always include INVALID as the first constant\n    const constantNames = [\"INVALID\", ...ctx.constants.keys()];\n    const constantValues = [INVALID, ...ctx.constants.values()];\n    const code = doc.content.join(\"\\n\");\n    const fullCode = options?.debug\n        ? constantNames.length > 0\n            ? `// Constants: ${constantNames.join(\", \")}\\n${code}`\n            : code\n        : \"\";\n    const F = Function;\n    const factoryCode = `return (input) => {\\n${code}\\n}`;\n    let fn;\n    try {\n        const factory = new F(...constantNames, factoryCode);\n        fn = factory(...constantValues);\n    }\n    catch (err) {\n        // Malformed generated code (or a CSP environment rejecting `new Function`) surfaces as a typed error so the global shim falls back to the runtime instead of crashing with a raw SyntaxError/EvalError.\n        throw new ZodCompileUnsupportedError(`this schema (generated code failed to evaluate: ${err.message})`);\n    }\n    if (options?.debug) {\n        fn.code = fullCode;\n    }\n    fn.definite = ctx.definite;\n    return fn;\n}\nfunction addConstant(ctx, value) {\n    // Check if we already have this constant\n    for (const [name, v] of ctx.constants) {\n        if (v === value)\n            return name;\n    }\n    const name = `c${ctx.constantCounter++}`;\n    ctx.constants.set(name, value);\n    return name;\n}\n/** Hoists a user-supplied callback. Anything the schema's author wrote can throw, and generated code can reject an earlier sibling before ever reaching it, so this clears `definite` — a rejection is then no longer proof that the interpreter would have rejected rather than thrown. */\nfunction addUserConstant(ctx, fn) {\n    ctx.definite = false;\n    return addConstant(ctx, fn);\n}\nfunction newVar(ctx) {\n    return `v${ctx.varCounter++}`;\n}\n// Runs a child schema as a black box: its value, or INVALID for a failure or an async run.\nfunction runtimeRun(schema, value) {\n    const result = schema._zod.run({ value, issues: [] }, {});\n    if (result && typeof result.then === \"function\")\n        return INVALID;\n    const r = result;\n    return r.issues.length === 0 ? r.value : INVALID;\n}\n// `null` means the node built no value because nothing reads it. The overloads keep that case out of the 20-odd callers that always want one, so only a caller passing needsValue has to handle it.\nfunction compileChild(doc, ctx, schema, accessor, needsValue = true) {\n    const contentLen = doc.content.length;\n    const constantCount = ctx.constants.size;\n    const constantCounter = ctx.constantCounter;\n    const varCounter = ctx.varCounter;\n    try {\n        return generateCheck(doc, ctx, schema, accessor, needsValue);\n    }\n    catch (err) {\n        if (!(err instanceof ZodCompileUnsupportedError) || !err.islandable)\n            throw err;\n        doc.content.length = contentLen;\n        if (ctx.constants.size > constantCount) {\n            const trailing = Array.from(ctx.constants.keys()).slice(constantCount);\n            for (const k of trailing)\n                ctx.constants.delete(k);\n        }\n        ctx.constantCounter = constantCounter;\n        ctx.varCounter = varCounter;\n        return emitRuntimeIsland(doc, ctx, schema, accessor);\n    }\n}\nfunction emitRuntimeIsland(doc, ctx, schema, accessor) {\n    // an islanded child answers INVALID for an async run too, which the interpreter throws for\n    ctx.definite = false;\n    const schemaConst = addConstant(ctx, schema);\n    const runConst = addConstant(ctx, runtimeRun);\n    const outVar = newVar(ctx);\n    doc.write(`const ${outVar} = ${runConst}(${schemaConst}, ${accessor});`);\n    doc.write(`if (${outVar} === INVALID) return INVALID;`);\n    return outVar;\n}\n// Check classes whose `when` is auto-defaulted at init (checks.ts `when ??=`).\nconst WHEN_DEFAULTED_CHECKS = new Set([\n    \"max_size\",\n    \"min_size\",\n    \"size_equals\",\n    \"max_length\",\n    \"min_length\",\n    \"length_equals\",\n]);\nfunction generateChecks(doc, ctx, schema, accessor) {\n    const schemaChecks = schema._zod.def.checks;\n    if (!schemaChecks || schemaChecks.length === 0)\n        return accessor;\n    // Track current accessor - may change if overwrite checks are encountered\n    let currentAccessor = accessor;\n    for (const check of schemaChecks) {\n        const def = check._zod.def;\n        // A custom `when` skips a check the fast path always runs; the one auto-defaulted on size/length classes matches its bail-on-first-failure.\n        if (def.when && !WHEN_DEFAULTED_CHECKS.has(def.check)) {\n            throw new ZodCompileUnsupportedError(`check with a custom \"when\" condition`);\n        }\n        switch (def.check) {\n            case \"greater_than\":\n                generateGreaterThanCheck(doc, ctx, def, currentAccessor);\n                break;\n            case \"less_than\":\n                generateLessThanCheck(doc, ctx, def, currentAccessor);\n                break;\n            case \"multiple_of\":\n                generateMultipleOfCheck(doc, ctx, def, currentAccessor);\n                break;\n            case \"number_format\":\n                generateNumberFormatCheck(doc, def, currentAccessor);\n                break;\n            case \"min_length\": {\n                const min = numericOperand(def.minimum, \"min_length\");\n                const len = codePointLengthVar(doc, ctx, currentAccessor, `${currentAccessor}.length >= ${min} && ${currentAccessor}.length < ${def.minimum * 2}`);\n                doc.write(`if (${len} < ${min}) return INVALID;`);\n                break;\n            }\n            case \"max_length\": {\n                const max = numericOperand(def.maximum, \"max_length\");\n                const len = codePointLengthVar(doc, ctx, currentAccessor, `${currentAccessor}.length > ${max}`);\n                doc.write(`if (${len} > ${max}) return INVALID;`);\n                break;\n            }\n            case \"length_equals\": {\n                const exact = numericOperand(def.length, \"length_equals\");\n                const len = codePointLengthVar(doc, ctx, currentAccessor, `${currentAccessor}.length >= ${exact} && ${currentAccessor}.length <= ${def.length * 2}`);\n                doc.write(`if (${len} !== ${exact}) return INVALID;`);\n                break;\n            }\n            case \"min_size\":\n                doc.write(`if (${currentAccessor}.size < ${numericOperand(def.minimum, \"min_size\")}) return INVALID;`);\n                break;\n            case \"max_size\":\n                doc.write(`if (${currentAccessor}.size > ${numericOperand(def.maximum, \"max_size\")}) return INVALID;`);\n                break;\n            case \"size_equals\":\n                doc.write(`if (${currentAccessor}.size !== ${numericOperand(def.size, \"size_equals\")}) return INVALID;`);\n                break;\n            case \"string_format\":\n                currentAccessor = generateStringFormatCheck(doc, ctx, def, currentAccessor);\n                break;\n            case \"custom\":\n                currentAccessor = generateCustomRefineCheck(doc, ctx, check, currentAccessor);\n                break;\n            case \"bigint_format\":\n                generateBigIntFormatCheck(doc, def, currentAccessor);\n                break;\n            case \"mime_type\":\n                generateMimeTypeCheck(doc, ctx, def, currentAccessor);\n                break;\n            case \"property\":\n                generatePropertyCheck(doc, ctx, def, currentAccessor);\n                break;\n            case \"properties\":\n                generatePropertiesChecks(doc, ctx, def, currentAccessor);\n                break;\n            case \"overwrite\": {\n                // Overwrite transforms the value - create new variable for transformed result\n                const newAccessor = newVar(ctx);\n                generateOverwriteCheck(doc, ctx, check, currentAccessor, newAccessor);\n                currentAccessor = newAccessor;\n                break;\n            }\n            default: {\n                void def;\n                throw new ZodCompileUnsupportedError(`check type ${def.check}`);\n            }\n        }\n    }\n    return currentAccessor;\n}\n// Emit the length operand for a length check, mirroring `$ZodCheckMinLength` and friends: strings measure in code points, everything else in `.length`. `inDoubt` is the caller's cheap UTF-16 bound test — outside it the unit count already settles the comparison, so the scan is skipped.\nfunction codePointLengthVar(doc, ctx, accessor, inDoubt) {\n    const cpLen = addConstant(ctx, util.codePointLength);\n    const v = newVar(ctx);\n    doc.write(`const ${v} = typeof ${accessor} === \"string\" && ${inDoubt} ? ${cpLen}(${accessor}) : ${accessor}.length;`);\n    return v;\n}\n// Emit a source operand for a gt/lt bound. Numbers inline; Dates hoist as a constant (relational operators compare via valueOf). NaN and Invalid Date bounds can't compile to a comparison that matches runtime semantics.\n/**\n * A count bound reaches generated source verbatim, so a non-number would be\n * emitted as code rather than as a value — `min('0) {} evil(); if (0')` writes an\n * arbitrary statement into the function body. TypeScript types these as `number`\n * and fromJSONSchema guards them, so this is a backstop rather than a live hole,\n * but generated source is the one place a wrong type stops being a type error.\n */\nfunction numericOperand(value, label) {\n    if (typeof value !== \"number\" || !Number.isFinite(value)) {\n        throw new ZodCompileUnsupportedError(`${label} bound of type ${typeof value}`);\n    }\n    return `${value}`;\n}\nfunction comparisonOperand(ctx, value) {\n    if (typeof value === \"bigint\")\n        return `${value}n`;\n    if (typeof value === \"number\") {\n        if (Number.isNaN(value))\n            throw new ZodCompileUnsupportedError(\"comparison check with NaN bound\");\n        return `${value}`;\n    }\n    if (value instanceof Date) {\n        if (Number.isNaN(value.getTime())) {\n            throw new ZodCompileUnsupportedError(\"comparison check with Invalid Date bound\");\n        }\n        return addConstant(ctx, value);\n    }\n    throw new ZodCompileUnsupportedError(`comparison check bound of type ${typeof value}`);\n}\nfunction generateGreaterThanCheck(doc, ctx, def, accessor) {\n    const op = def.inclusive ? \"<\" : \"<=\";\n    doc.write(`if (${accessor} ${op} ${comparisonOperand(ctx, def.value)}) return INVALID;`);\n}\nfunction generateLessThanCheck(doc, ctx, def, accessor) {\n    const op = def.inclusive ? \">\" : \">=\";\n    doc.write(`if (${accessor} ${op} ${comparisonOperand(ctx, def.value)}) return INVALID;`);\n}\nfunction generateMultipleOfCheck(doc, ctx, def, accessor) {\n    if (typeof def.value === \"bigint\") {\n        // a zero divisor has no compiled form: `x % 0n` throws\n        if (def.value === BigInt(0))\n            throw new ZodCompileUnsupportedError(\"multiple_of check with a zero divisor\");\n        doc.write(`if (${accessor} % ${def.value}n !== 0n) return INVALID;`);\n    }\n    else {\n        // Float `%` has well-known precision issues for sub-integer steps\n        // (`1.5 % 0.1`, `2.5e-7 % 1e-7`). Defer to util.floatSafeRemainder so the\n        // exact tolerance logic stays in one place — single function call is fine\n        // since `multipleOf` runs at most once per number.\n        const remainder = addConstant(ctx, util.floatSafeRemainder);\n        doc.write(`if (${remainder}(${accessor}, ${numericOperand(def.value, \"multiple_of\")}) !== 0) return INVALID;`);\n    }\n}\nfunction generateNumberFormatCheck(doc, def, accessor) {\n    const format = def.format;\n    switch (format) {\n        case \"safeint\":\n            doc.write(`if (!Number.isSafeInteger(${accessor})) return INVALID;`);\n            break;\n        case \"int32\":\n            doc.write(`if (!Number.isInteger(${accessor}) || ${accessor} < -2147483648 || ${accessor} > 2147483647) return INVALID;`);\n            break;\n        case \"uint32\":\n            doc.write(`if (!Number.isInteger(${accessor}) || ${accessor} < 0 || ${accessor} > 4294967295) return INVALID;`);\n            break;\n        case \"float32\":\n            // Float32 range per util.NUMBER_FORMAT_RANGES\n            doc.write(`if (!Number.isFinite(${accessor}) || ${accessor} < -3.4028234663852886e38 || ${accessor} > 3.4028234663852886e38) return INVALID;`);\n            break;\n        case \"float64\":\n            doc.write(`if (!Number.isFinite(${accessor})) return INVALID;`);\n            break;\n        default: {\n            void format;\n            throw new ZodCompileUnsupportedError(`number format ${format}`);\n        }\n    }\n}\nfunction generateBigIntFormatCheck(doc, def, accessor) {\n    const format = def.format;\n    if (!format)\n        return; // undefined format means no range check\n    switch (format) {\n        case \"int64\":\n            doc.write(`if (${accessor} < -9223372036854775808n || ${accessor} > 9223372036854775807n) return INVALID;`);\n            break;\n        case \"uint64\":\n            doc.write(`if (${accessor} < 0n || ${accessor} > 18446744073709551615n) return INVALID;`);\n            break;\n        default: {\n            void format;\n            throw new ZodCompileUnsupportedError(`bigint format ${format}`);\n        }\n    }\n}\nfunction generateMimeTypeCheck(doc, ctx, def, accessor) {\n    const mimeTypes = def.mime;\n    if (mimeTypes && mimeTypes.length > 0) {\n        const mimeSet = addConstant(ctx, new Set(mimeTypes));\n        doc.write(`if (!${mimeSet}.has(${accessor}.type)) return INVALID;`);\n    }\n}\n// asserts each named property in place; children compile assert-only because z.properties never rebuilds its input\nfunction generatePropertiesChecks(doc, ctx, def, accessor) {\n    // a custom `when` gates the assertion at runtime; inside a union a wrongly-run branch is absorbed as a branch failure rather than falling back, so refuse at codegen\n    if (def.when) {\n        throw new ZodCompileUnsupportedError(`check with a custom \"when\" condition`);\n    }\n    // matches the runtime gate: the base schema already typed the value, so only a nullish one is rejected\n    doc.write(`if (${accessor} == null) return INVALID;`);\n    const shape = def.shape;\n    for (const key of Reflect.ownKeys(shape)) {\n        // a symbol has no source literal, so it is hoisted as a constant\n        const keyExpr = typeof key === \"symbol\" ? addConstant(ctx, key) : util.esc(key);\n        // cache the property read so a getter runs exactly once, matching the runtime\n        const inputVar = newVar(ctx);\n        doc.write(`const ${inputVar} = ${accessor}[${keyExpr}];`);\n        compileChild(doc, ctx, shape[key], inputVar, false);\n    }\n}\nfunction generatePropertyCheck(doc, ctx, def, accessor) {\n    const propAccessor = `${accessor}[${JSON.stringify(def.property)}]`;\n    generateCheck(doc, ctx, def.schema, propAccessor);\n}\nfunction generateOverwriteCheck(doc, ctx, check, currentAccessor, newAccessor) {\n    const tx = check._zod.def.tx;\n    if (!tx) {\n        throw new ZodCompileUnsupportedError(\"overwrite check without a transform function\");\n    }\n    // Check for async transform\n    if (isAsyncFunction(tx)) {\n        throw new ZodCompileAsyncError(\"z.compile: async overwrite transforms are not supported\");\n    }\n    // Hoist the transform function as a constant and apply it\n    const txConst = addConstant(ctx, tx);\n    doc.write(`const ${newAccessor} = ${txConst}(${currentAccessor});`);\n}\n/** A predicate that hands back a thenable is an async check reached synchronously, and the interpreter throws `$ZodAsyncError` for it. Returning INVALID instead would be a bail-out, and a union reads a bail-out as a rejected branch and answers with a later one — so the throw has to survive into generated code. */\nfunction throwAsync() {\n    throw new $ZodAsyncError();\n}\n/** Shared `addIssue` for the spoofed payloads a refine, check or transform receives. Allocating one per call — a fresh closure plus a `this`-bound method on a fresh literal — pinned every payload-allocating schema at ~2.7M ops/sec against 135M for a plain object literal. It captures nothing per call; it only reaches `this.issues`. */\nfunction pushIssue(issue) {\n    this.issues.push(issue);\n}\nfunction generateCustomRefineCheck(doc, ctx, check, accessor) {\n    const def = check._zod.def;\n    if (def.fn) {\n        // Simple predicate function (from .refine())\n        if (isAsyncFunction(def.fn)) {\n            throw new ZodCompileAsyncError(\"z.compile: async .refine() predicates are not supported\");\n        }\n        const fnConst = addUserConstant(ctx, def.fn);\n        const throwAsyncConst = addConstant(ctx, throwAsync);\n        const resVar = newVar(ctx);\n        doc.write(`const ${resVar} = ${fnConst}(${accessor});`);\n        // A thenable is truthy, so it would otherwise read as a pass. It is not a rejection either: the interpreter throws, and INVALID inside a union would just hand the parse to the next branch.\n        doc.write(`if (${resVar} instanceof Promise) ${throwAsyncConst}();`);\n        doc.write(`if (!${resVar}) return INVALID;`);\n        // A `.refine()` predicate only answers yes or no; it cannot rewrite the value.\n        return accessor;\n    }\n    if (check._zod.check) {\n        if (isAsyncFunction(check._zod.check)) {\n            throw new ZodCompileAsyncError(\"z.compile: async .superRefine() / check functions are not supported\");\n        }\n        // SuperRefine or other check function - need to spoof context Create a helper that runs the check and returns true if no issues\n        const checkFn = check._zod.check;\n        // `$RefinementCtx` extends the parse payload, so a check may rewrite\n        // `ctx.value` as well as push issues — `.superRefine((v, ctx) => { ctx.value =\n        // v.trim() })` is a value transform. Returning only a boolean discarded that\n        // write and emitted the untrimmed input. Hand the value back and thread it on.\n        const helperFn = (value) => {\n            const fakePayload = { value, issues: [], addIssue: pushIssue };\n            const result = checkFn(fakePayload);\n            // Throw rather than return INVALID: the interpreter throws here, and a union would read INVALID as a rejected branch.\n            if (result instanceof Promise)\n                throwAsync();\n            return fakePayload.issues.length === 0 ? fakePayload.value : INVALID;\n        };\n        const helperConst = addUserConstant(ctx, helperFn);\n        const outVar = newVar(ctx);\n        doc.write(`const ${outVar} = ${helperConst}(${accessor});`);\n        doc.write(`if (${outVar} === INVALID) return INVALID;`);\n        return outVar;\n    }\n    throw new ZodCompileUnsupportedError(\"custom check without a predicate or check function\");\n}\n/**\n * Built-in formats that validate with nothing but `def.pattern`, so compiling\n * the regex reproduces the runtime exactly. Deliberately an allowlist: a format\n * missing from it loses its fast path, while a format wrongly added to it\n * silently accepts input the runtime rejects. Formats that layer extra\n * validation over a shape-only pattern (`credit_card`, `base64`, `ipv6`, …) are\n * handled above by hoisting the runtime validator itself.\n */\nconst PATTERN_IS_COMPLETE = new Set([\n    \"cidrv4\",\n    \"cuid\",\n    \"cuid2\",\n    \"date\",\n    \"datetime\",\n    \"duration\",\n    \"e164\",\n    \"email\",\n    \"emoji\",\n    \"ends_with\",\n    \"guid\",\n    \"includes\",\n    \"ipv4\",\n    \"ksuid\",\n    \"lowercase\",\n    \"mac\",\n    \"nanoid\",\n    \"regex\",\n    \"starts_with\",\n    \"time\",\n    \"ulid\",\n    \"uppercase\",\n    \"uuid\",\n    \"xid\",\n]);\nfunction generateStringFormatCheck(doc, ctx, def, accessor, needsValue = true) {\n    // Some string formats do runtime validation beyond their advertised pattern. For cheap pure utility checks, hoist the runtime function and call it so the fast path stays correct without cloning the utility logic into codegen.\n    const fmt = def.format;\n    if (fmt === \"base64\") {\n        const validator = addConstant(ctx, isValidBase64);\n        doc.write(`if (!${validator}(${accessor})) return INVALID;`);\n        return accessor;\n    }\n    if (fmt === \"base64url\") {\n        const validator = addConstant(ctx, isValidBase64URL);\n        doc.write(`if (!${validator}(${accessor})) return INVALID;`);\n        return accessor;\n    }\n    if (fmt === \"jwt\") {\n        const validator = addConstant(ctx, isValidJWT);\n        const alg = addConstant(ctx, def.alg ?? null);\n        doc.write(`if (!${validator}(${accessor}, ${alg})) return INVALID;`);\n        return accessor;\n    }\n    if (fmt === \"ipv6\") {\n        const validator = addConstant(ctx, isValidIPv6);\n        doc.write(`if (!${validator}(${accessor})) return INVALID;`);\n        return accessor;\n    }\n    if (fmt === \"cidrv6\") {\n        const validator = addConstant(ctx, isValidCIDRv6);\n        doc.write(`if (!${validator}(${accessor})) return INVALID;`);\n        return accessor;\n    }\n    if (fmt === \"credit_card\") {\n        const validator = addConstant(ctx, isValidCreditCard);\n        doc.write(`if (!${validator}(${accessor})) return INVALID;`);\n        return accessor;\n    }\n    if (fmt === \"iban\") {\n        const validator = addConstant(ctx, isValidIBAN);\n        doc.write(`if (!${validator}(${accessor})) return INVALID;`);\n        return accessor;\n    }\n    const formatDef = def;\n    if (fmt === \"url\" ||\n        fmt === \"httpurl\" ||\n        formatDef.normalize ||\n        formatDef.hostname !== undefined ||\n        formatDef.protocol !== undefined) {\n        // Same three predicates the runtime calls, in the same order, so there is no second URL implementation to drift. Which options exist is known now, so the calls the runtime makes conditionally are emitted conditionally instead.\n        const parseConst = addConstant(ctx, validateURL);\n        const defConst = addConstant(ctx, def);\n        const trimVar = newVar(ctx);\n        const urlVar = newVar(ctx);\n        doc.write(`const ${trimVar} = ${accessor}.trim();`);\n        doc.write(`const ${urlVar} = ${parseConst}(${trimVar}, ${defConst});`);\n        doc.write(`if (typeof ${urlVar} === \"number\") return INVALID;`);\n        if (formatDef.hostname !== undefined) {\n            const hostnameConst = addConstant(ctx, urlHostnameOk);\n            doc.write(`if (!${hostnameConst}(${urlVar}, ${defConst}.hostname)) return INVALID;`);\n        }\n        if (formatDef.protocol !== undefined) {\n            const protocolConst = addConstant(ctx, urlProtocolOk);\n            doc.write(`if (!${protocolConst}(${urlVar}, ${defConst}.protocol)) return INVALID;`);\n        }\n        if (!needsValue)\n            return null;\n        const outputVar = newVar(ctx);\n        const outputExpr = formatDef.normalize ? `${urlVar}.href` : `${addConstant(ctx, stripTabAndNewline)}(${trimVar})`;\n        doc.write(`const ${outputVar} = ${outputExpr};`);\n        return outputVar;\n    }\n    // A custom string format carries the predicate the runtime actually calls. Hoist and call it instead of testing `def.pattern`: the two only coincide when the format was built from a RegExp, and relying on that coupling is how supplemental validation gets dropped.\n    const customFn = def.fn;\n    if (customFn) {\n        if (isAsyncFunction(customFn))\n            throw new ZodCompileUnsupportedError(`async string format ${fmt}`);\n        const fnConst = addConstant(ctx, customFn);\n        doc.write(`if (!${fnConst}(${accessor})) return INVALID;`);\n        return accessor;\n    }\n    // Formats whose `pattern` IS the whole check. An allowlist rather than `if (def.pattern)`, because credit_card, base64 and ipv6 carry a shape-only pattern and validate the rest separately.\n    if (PATTERN_IS_COMPLETE.has(fmt) && def.pattern) {\n        const patternConst = addConstant(ctx, def.pattern);\n        doc.write(`${patternConst}.lastIndex = 0;`);\n        doc.write(`if (!${patternConst}.test(${accessor})) return INVALID;`);\n        return accessor;\n    }\n    const format = def.format;\n    switch (format) {\n        case \"regex\":\n            // A regex check with a pattern returned above. Reaching here means there is no pattern to test, and accepting unconditionally would pass every input, so hand the schema back to the runtime.\n            throw new ZodCompileUnsupportedError(\"regex format without a pattern\");\n        case \"lowercase\":\n            doc.write(`if (${accessor} !== ${accessor}.toLowerCase()) return INVALID;`);\n            break;\n        case \"uppercase\":\n            doc.write(`if (${accessor} !== ${accessor}.toUpperCase()) return INVALID;`);\n            break;\n        case \"includes\":\n            doc.write(`if (!${accessor}.includes(${util.esc(def.includes)})) return INVALID;`);\n            break;\n        case \"starts_with\": {\n            const prefix = def.prefix;\n            doc.write(`if (${accessor}.slice(0, ${prefix.length}) !== ${util.esc(prefix)}) return INVALID;`);\n            break;\n        }\n        case \"ends_with\": {\n            const suffix = def.suffix;\n            doc.write(`if (${accessor}.slice(-${suffix.length}) !== ${util.esc(suffix)}) return INVALID;`);\n            break;\n        }\n        default: {\n            void format;\n            throw new ZodCompileUnsupportedError(`string format ${format}`);\n        }\n    }\n    return accessor;\n}\nfunction generateCheck(doc, ctx, schema, accessor, needsValue = true) {\n    const def = schema._zod.def;\n    const type = def.type;\n    // A coercing schema would compile to the bare type test and reject what it should convert; inside a union that reads as a rejected branch, so refuse at codegen.\n    if (def.coerce) {\n        throw new ZodCompileUnsupportedError(`coercion (z.coerce.${type}())`);\n    }\n    // A node builds its output when its caller reads one, or when it carries checks of its own, since a check reads what was built. One polarity for the whole walk: this is what the node does, and it is what its children are told they need.\n    const buildsValue = needsValue || !!def.checks?.length;\n    let typeAccessor;\n    switch (type) {\n        case \"string\":\n            typeAccessor = generateStringCheck(doc, ctx, schema, accessor, buildsValue);\n            break;\n        case \"number\":\n            typeAccessor = generateNumberCheck(doc, schema, accessor);\n            break;\n        case \"boolean\":\n            typeAccessor = generateBooleanCheck(doc, accessor);\n            break;\n        case \"bigint\":\n            typeAccessor = generateBigIntCheck(doc, schema, accessor);\n            break;\n        case \"symbol\":\n            typeAccessor = generateSymbolCheck(doc, accessor);\n            break;\n        case \"undefined\":\n            typeAccessor = generateUndefinedCheck(doc, accessor);\n            break;\n        case \"null\":\n            typeAccessor = generateNullCheck(doc, accessor);\n            break;\n        case \"any\":\n        case \"unknown\":\n            // No check needed - pass through\n            typeAccessor = accessor;\n            break;\n        case \"never\":\n            doc.write(\"return INVALID;\");\n            typeAccessor = accessor;\n            break;\n        case \"void\":\n            typeAccessor = generateVoidCheck(doc, accessor);\n            break;\n        case \"nan\":\n            typeAccessor = generateNaNCheck(doc, accessor);\n            break;\n        case \"date\":\n            typeAccessor = generateDateCheck(doc, accessor);\n            break;\n        case \"object\":\n            typeAccessor = generateObjectCheck(doc, ctx, schema, accessor, buildsValue);\n            break;\n        case \"optional\":\n            typeAccessor = generateOptionalCheck(doc, ctx, schema, accessor, buildsValue);\n            break;\n        case \"nullable\":\n            typeAccessor = generateNullableCheck(doc, ctx, schema, accessor, buildsValue);\n            break;\n        case \"array\":\n            typeAccessor = generateArrayCheck(doc, ctx, schema, accessor, buildsValue);\n            break;\n        case \"literal\":\n            typeAccessor = generateLiteralCheck(doc, ctx, schema, accessor);\n            break;\n        case \"enum\":\n            typeAccessor = generateEnumCheck(doc, ctx, schema, accessor);\n            break;\n        case \"readonly\": {\n            const innerOut = generateWrapperCheck(doc, ctx, schema, accessor);\n            // Runtime freezes the parsed value (schemas.ts handleReadonlyResult).\n            const frozenVar = newVar(ctx);\n            doc.write(`const ${frozenVar} = Object.freeze(${innerOut});`);\n            typeAccessor = frozenVar;\n            break;\n        }\n        case \"success\":\n            // Runtime output is `issues.length === 0`. The fast path only reaches\n            // here when the inner check passed (failure returns INVALID and the\n            // runtime fallback reproduces the inner issues), so the output is\n            // always `true`.\n            generateWrapperCheck(doc, ctx, schema, accessor);\n            typeAccessor = \"true\";\n            break;\n        case \"default\":\n        case \"prefault\":\n            typeAccessor = generateDefaultCheck(doc, ctx, schema, accessor);\n            break;\n        case \"nonoptional\":\n            typeAccessor = generateNonOptionalCheck(doc, ctx, schema, accessor);\n            break;\n        case \"tuple\":\n            typeAccessor = generateTupleCheck(doc, ctx, schema, accessor);\n            break;\n        case \"union\":\n            typeAccessor = generateUnionCheck(doc, ctx, schema, accessor);\n            break;\n        case \"intersection\":\n            typeAccessor = generateIntersectionCheck(doc, ctx, schema, accessor);\n            break;\n        case \"record\":\n            typeAccessor = generateRecordCheck(doc, ctx, schema, accessor);\n            break;\n        case \"map\":\n            typeAccessor = generateMapCheck(doc, ctx, schema, accessor);\n            break;\n        case \"set\":\n            typeAccessor = generateSetCheck(doc, ctx, schema, accessor);\n            break;\n        case \"file\":\n            typeAccessor = generateFileCheck(doc, accessor);\n            break;\n        case \"template_literal\":\n            typeAccessor = generateTemplateLiteralCheck(doc, ctx, schema, accessor);\n            break;\n        case \"lazy\":\n            typeAccessor = generateLazyCheck(doc, ctx, schema, accessor);\n            break;\n        case \"pipe\":\n            typeAccessor = generatePipeCheck(doc, ctx, schema, accessor);\n            break;\n        case \"custom\":\n            typeAccessor = generateCustomCheck(doc, ctx, schema, accessor);\n            break;\n        case \"transform\":\n            typeAccessor = generateTransformCheck(doc, ctx, schema, accessor);\n            break;\n        case \"catch\":\n            typeAccessor = generateCatchCheck(doc, ctx, schema, accessor);\n            break;\n        default: {\n            void type;\n            throw new ZodCompileUnsupportedError(`schema type ${type}`);\n        }\n    }\n    // a node that built nothing has no checks to run: not building requires an empty check list\n    if (typeAccessor === null)\n        return null;\n    // Generate checks after the type-specific validation (may transform value)\n    return generateChecks(doc, ctx, schema, typeAccessor);\n}\nfunction generateStringCheck(doc, ctx, schema, accessor, needsValue = true) {\n    doc.write(`if (typeof ${accessor} !== \"string\") return INVALID;`);\n    // z.email() carries its format on the def, z.string().email() in def.checks; both route here so the format table has no second copy to drift from.\n    const def = schema._zod.def;\n    if (def.format === undefined)\n        return accessor;\n    return generateStringFormatCheck(doc, ctx, def, accessor, needsValue);\n}\nfunction generateNumberCheck(doc, schema, accessor) {\n    // Runtime z.number() rejects NaN and ±Infinity. Number.isFinite covers both.\n    doc.write(`if (typeof ${accessor} !== \"number\" || !Number.isFinite(${accessor})) return INVALID;`);\n    // Mini factories like z.int(), z.int32(), z.uint32(), z.float32() bake a number_format check into the schema def itself (not into def.checks). Apply the same constraint here.\n    const def = schema._zod.def;\n    if (def.check === \"number_format\" && def.format) {\n        generateNumberFormatCheck(doc, { format: def.format }, accessor);\n    }\n    return accessor;\n}\nfunction generateBooleanCheck(doc, accessor) {\n    doc.write(`if (typeof ${accessor} !== \"boolean\") return INVALID;`);\n    return accessor;\n}\nfunction generateBigIntCheck(doc, schema, accessor) {\n    doc.write(`if (typeof ${accessor} !== \"bigint\") return INVALID;`);\n    // Handle bigint format (int64, uint64) directly on the schema def\n    const def = schema._zod.def;\n    if (def.format) {\n        switch (def.format) {\n            case \"int64\":\n                doc.write(`if (${accessor} < -9223372036854775808n || ${accessor} > 9223372036854775807n) return INVALID;`);\n                break;\n            case \"uint64\":\n                doc.write(`if (${accessor} < 0n || ${accessor} > 18446744073709551615n) return INVALID;`);\n                break;\n        }\n    }\n    return accessor;\n}\nfunction generateSymbolCheck(doc, accessor) {\n    doc.write(`if (typeof ${accessor} !== \"symbol\") return INVALID;`);\n    return accessor;\n}\nfunction generateUndefinedCheck(doc, accessor) {\n    doc.write(`if (${accessor} !== undefined) return INVALID;`);\n    return accessor;\n}\nfunction generateNullCheck(doc, accessor) {\n    doc.write(`if (${accessor} !== null) return INVALID;`);\n    return accessor;\n}\nfunction generateVoidCheck(doc, accessor) {\n    doc.write(`if (${accessor} !== undefined) return INVALID;`);\n    return accessor;\n}\nfunction generateNaNCheck(doc, accessor) {\n    doc.write(`if (typeof ${accessor} !== \"number\" || !Number.isNaN(${accessor})) return INVALID;`);\n    return accessor;\n}\nfunction generateDateCheck(doc, accessor) {\n    doc.write(`if (!(${accessor} instanceof Date) || Number.isNaN(${accessor}.getTime())) return INVALID;`);\n    return accessor;\n}\nfunction generateObjectCheck(doc, ctx, schema, accessor, buildsValue = true) {\n    const def = schema._zod.def;\n    // Check that input is a non-null, non-array object\n    doc.write(`if (typeof ${accessor} !== \"object\" || ${accessor} === null || Array.isArray(${accessor})) return INVALID;`);\n    const shape = def.shape;\n    const keys = Object.keys(shape);\n    const symbolKeys = Object.getOwnPropertySymbols(shape);\n    // a symbol has no source literal, so it is hoisted as a constant; `keys` stays string-only where the emitted code uses `for...in`\n    const allKeys = symbolKeys.length ? [...keys, ...symbolKeys] : keys;\n    const keyExpr = (k) => (typeof k === \"symbol\" ? addConstant(ctx, k) : util.esc(k));\n    const propKey = (k) => (typeof k === \"symbol\" ? `[${keyExpr(k)}]` : util.esc(k));\n    const propShape = shape;\n    // `__proto__` as an own shape key can't be expressed in an output object literal (the literal form sets the prototype instead of an own property).\n    if (keys.includes(\"__proto__\")) {\n        throw new ZodCompileUnsupportedError('object shape key \"__proto__\"');\n    }\n    // Map from key to output accessor for that property\n    const propOutputs = new Map();\n    // Validate each property and collect output accessors\n    for (const key of allKeys) {\n        const propSchema = propShape[key];\n        const kx = keyExpr(key);\n        // Always cache the property read: the runtime reads input[key] exactly once, so a getter must not be re-read by checks or output assembly.\n        const inputVar = newVar(ctx);\n        doc.write(`const ${inputVar} = ${accessor}[${kx}];`);\n        if (propSchema._zod.optin !== undefined) {\n            // Any optin rung means the key may be omitted. The runtime runs the property anyway and ignores issues only when the key is genuinely absent, which is what makes exactOptional compositional.\n            const outputVar = newVar(ctx);\n            doc.write(`let ${outputVar} = (() => {`);\n            doc.indented((d) => {\n                const outputAccessor = compileChild(d, ctx, propSchema, inputVar);\n                d.write(`return ${outputAccessor};`);\n            });\n            doc.write(`})();`);\n            if (propSchema._zod.optout === \"optional\") {\n                doc.write(`if (${outputVar} === INVALID) {`);\n                doc.indented((d) => {\n                    d.write(`if (${kx} in ${accessor}) return INVALID;`);\n                    d.write(`${outputVar} = undefined;`);\n                });\n                doc.write(`}`);\n            }\n            else {\n                doc.write(`if (${outputVar} === INVALID) return INVALID;`);\n            }\n            propOutputs.set(key, outputVar);\n        }\n        else {\n            if (requiresPresenceCheck(propSchema)) {\n                doc.write(`if (!(${kx} in ${accessor})) return INVALID;`);\n            }\n            // Generate check and get output accessor\n            const outputAccessor = compileChild(doc, ctx, propSchema, inputVar, buildsValue);\n            if (outputAccessor !== null)\n                propOutputs.set(key, outputAccessor);\n        }\n    }\n    // Handle catchall\n    const catchall = def.catchall;\n    let unknownKeysMode = \"none\";\n    if (catchall) {\n        const catchallType = catchall._zod.def.type;\n        if (catchallType === \"never\") {\n            // Strict: one `for...in`, as the runtime does, so inherited enumerable keys count. An undeclared `__proto__` is reported here and excluded only from the output (#6221); an own-key count would wrongly reject a class instance.\n            const condition = keys.map((k) => `k !== ${util.esc(k)}`).join(\" && \") || \"true\";\n            doc.write(`for (const k in ${accessor}) {`);\n            doc.indented((d) => {\n                d.write(`if (${condition}) return INVALID;`);\n            });\n            doc.write(`}`);\n        }\n        else if ((catchallType === \"unknown\" || catchallType === \"any\") && !catchall._zod.def.checks?.length) {\n            unknownKeysMode = \"passthrough\";\n        }\n        else {\n            unknownKeysMode = \"schema\";\n        }\n    }\n    // else: strip mode (no catchall) - unknown keys ignored, only include known keys\n    // defaulted required outputs keep their keys even when undefined\n    const outputVar = newVar(ctx);\n    const hasConditionalKeys = allKeys.some((k) => mayOmitUndefined(propShape[k]) || dropsWhenAbsent(propShape[k]));\n    // Assert mode: every declared key is validated above, so the output literal and the unknown-key copy are pure waste. A `never` catchall already emitted its rejection loop; a schema catchall still has to validate the values it would otherwise have stored.\n    if (!buildsValue) {\n        if (unknownKeysMode === \"schema\") {\n            const knownSet = keys.length > 0 ? addConstant(ctx, new Set(keys)) : null;\n            doc.write(`for (const k in ${accessor}) {`);\n            doc.indented((d) => {\n                d.write(`if (k === \"__proto__\") continue;`);\n                if (knownSet)\n                    d.write(`if (${knownSet}.has(k)) continue;`);\n                const valVar = newVar(ctx);\n                d.write(`const ${valVar} = ${accessor}[k];`);\n                compileChild(d, ctx, catchall, valVar, false);\n            });\n            doc.write(`}`);\n        }\n        return null;\n    }\n    if (!hasConditionalKeys) {\n        const propLiterals = allKeys.map((k) => `${propKey(k)}: ${propOutputs.get(k)}`).join(\", \");\n        doc.write(`const ${outputVar} = { ${propLiterals} };`);\n    }\n    else {\n        doc.write(`const ${outputVar} = {};`);\n        for (const k of allKeys) {\n            const kx = keyExpr(k);\n            const out = propOutputs.get(k);\n            if (dropsWhenAbsent(propShape[k])) {\n                doc.write(`if (${kx} in ${accessor}) ${outputVar}[${kx}] = ${out};`);\n            }\n            else if (mayOmitUndefined(propShape[k])) {\n                doc.write(`if (${out} !== undefined || ${kx} in ${accessor}) ${outputVar}[${kx}] = ${out};`);\n            }\n            else {\n                doc.write(`${outputVar}[${kx}] = ${out};`);\n            }\n        }\n    }\n    if (unknownKeysMode !== \"none\") {\n        // Unknown keys are written directly into the output after shape keys — for...in (like the runtime) so inherited enumerables participate.\n        const knownSet = keys.length > 0 ? addConstant(ctx, new Set(keys)) : null;\n        doc.write(`for (const k in ${accessor}) {`);\n        doc.indented((d) => {\n            // Skip __proto__: assigning obj[\"__proto__\"] on a plain {} replaces the prototype via the setter rather than adding an own property. Mirrors the runtime catchall fix (#5898).\n            d.write(`if (k === \"__proto__\") continue;`);\n            if (knownSet)\n                d.write(`if (${knownSet}.has(k)) continue;`);\n            if (unknownKeysMode === \"passthrough\") {\n                d.write(`${outputVar}[k] = ${accessor}[k];`);\n            }\n            else {\n                const valVar = newVar(ctx);\n                d.write(`const ${valVar} = ${accessor}[k];`);\n                const catchallOut = compileChild(d, ctx, catchall, valVar);\n                d.write(`${outputVar}[k] = ${catchallOut};`);\n            }\n        });\n        doc.write(`}`);\n    }\n    return outputVar;\n}\nfunction generateOptionalCheck(doc, ctx, schema, accessor, buildsValue = true) {\n    const def = schema._zod.def;\n    if (isExactOptional(schema)) {\n        return generateCheck(doc, ctx, def.innerType, accessor, buildsValue);\n    }\n    // Same question $ZodOptional asks: only the top rung of the optin ladder substitutes a value for an absent input, so only it is worth running on `undefined`. Every other rung leaves the value intact, which is the skip branch below.\n    if (def.innerType._zod.optin === \"defaulted\") {\n        const outputVar = newVar(ctx);\n        const branchVar = newVar(ctx);\n        doc.write(`let ${outputVar};`);\n        doc.write(`if (${accessor} === undefined) {`);\n        doc.indented((d) => {\n            d.write(`const ${branchVar} = (() => {`);\n            d.indented((d2) => {\n                const innerOutput = generateCheck(d2, ctx, def.innerType, accessor);\n                d2.write(`return ${innerOutput};`);\n            });\n            d.write(`})();`);\n            d.write(`if (${branchVar} !== INVALID) ${outputVar} = ${branchVar};`);\n        });\n        doc.write(`} else {`);\n        doc.indented((d) => {\n            const innerOutput = generateCheck(d, ctx, def.innerType, accessor);\n            d.write(`${outputVar} = ${innerOutput};`);\n        });\n        doc.write(`}`);\n        return outputVar;\n    }\n    const outputVar = buildsValue ? newVar(ctx) : null;\n    if (outputVar)\n        doc.write(`let ${outputVar};`);\n    doc.write(`if (${accessor} !== undefined) {`);\n    doc.indented((d) => {\n        const innerOutput = generateCheck(d, ctx, def.innerType, accessor, buildsValue);\n        if (outputVar && innerOutput !== null)\n            d.write(`${outputVar} = ${innerOutput};`);\n    });\n    doc.write(`}`);\n    return outputVar;\n}\nfunction isExactOptional(schema) {\n    return schema._zod.traits?.has(\"$ZodExactOptional\") === true;\n}\n// A value-level fast path reads an absent key as `undefined`, so z.undefined(), z.any() and unions containing undefined would accept a missing property the runtime rejects.\nfunction requiresPresenceCheck(schema) {\n    return schema._zod.optin === undefined && fastPathAcceptsAbsence(schema);\n}\nfunction fastPathAcceptsAbsence(schema) {\n    // An island is handed `input[key]` and cannot tell absent from explicitly undefined, so report absence-accepting and let the object emit the presence guard (#6405).\n    if (schema._zod.def.coerce)\n        return true;\n    const def = schema._zod.def;\n    switch (def.type) {\n        case \"any\":\n        case \"unknown\":\n        case \"undefined\":\n        case \"void\":\n        case \"default\":\n        case \"prefault\":\n        case \"transform\":\n        case \"custom\":\n        case \"lazy\":\n            return true;\n        case \"string\":\n        case \"number\":\n        case \"boolean\":\n        case \"bigint\":\n        case \"symbol\":\n        case \"null\":\n        case \"never\":\n        case \"nan\":\n        case \"date\":\n        case \"object\":\n        case \"array\":\n        case \"tuple\":\n        case \"record\":\n        case \"map\":\n        case \"set\":\n        case \"file\":\n        case \"template_literal\":\n            return false;\n        case \"nonoptional\":\n            // Normally rejects an absent key, but not when something inside supplies a value for it: `.default(v).optional().nonoptional()` accepts absence and yields v. Defer to the inner — over-reporting here only costs a presence check, and a fast path that wrongly rejects still falls back to the runtime.\n            return def.innerType ? fastPathAcceptsAbsence(def.innerType) : false;\n        case \"literal\":\n            return !!def.values?.includes(undefined);\n        case \"enum\":\n            return !!schema._zod.values?.has(undefined);\n        case \"optional\":\n        case \"nullable\":\n        case \"readonly\":\n        case \"success\":\n            return def.innerType ? fastPathAcceptsAbsence(def.innerType) : true;\n        case \"catch\":\n            // catch always produces a value (inner may fail → catchValue substitutes), so it accepts an absent key regardless of inner.\n            return true;\n        case \"union\":\n            return def.options ? def.options.some(fastPathAcceptsAbsence) : true;\n        case \"intersection\":\n            if (!def.left || !def.right)\n                return true;\n            return fastPathAcceptsAbsence(def.left) && fastPathAcceptsAbsence(def.right);\n        case \"pipe\":\n            return def.in ? fastPathAcceptsAbsence(def.in) : true;\n        default:\n            return true;\n    }\n}\n/** The middle rung permits absence without supplying anything in its place, so an absent key contributes nothing — mirrors the leading gate in `handlePropertyResult`. */\nfunction dropsWhenAbsent(schema) {\n    return schema._zod.optin === \"optional\" && schema._zod.optout === \"optional\";\n}\nfunction mayOmitUndefined(schema) {\n    return (schema._zod.optin !== \"defaulted\" || schema._zod.optout === \"optional\") && mayOutputUndefined(schema);\n}\n// whether a schema's success-path output can be undefined\nfunction mayOutputUndefined(schema) {\n    const def = schema._zod.def;\n    switch (def.type) {\n        case \"string\":\n        case \"number\":\n        case \"boolean\":\n        case \"bigint\":\n        case \"symbol\":\n        case \"null\":\n        case \"nan\":\n        case \"date\":\n        case \"object\":\n        case \"array\":\n        case \"tuple\":\n        case \"record\":\n        case \"map\":\n        case \"set\":\n        case \"file\":\n        case \"template_literal\":\n        case \"never\":\n        case \"success\":\n            return false;\n        case \"literal\":\n            return !!def.values?.includes(undefined);\n        case \"enum\":\n            return !!schema._zod.values?.has(undefined);\n        case \"optional\":\n            return true;\n        case \"nullable\":\n        case \"readonly\":\n        case \"nonoptional\":\n            return def.innerType ? mayOutputUndefined(def.innerType) : true;\n        case \"union\":\n            return def.options ? def.options.some(mayOutputUndefined) : true;\n        case \"intersection\":\n            return !def.left || !def.right || mayOutputUndefined(def.left) || mayOutputUndefined(def.right);\n        case \"pipe\":\n            return def.out ? mayOutputUndefined(def.out) : true;\n        default:\n            // any/unknown/undefined/void/default/prefault/transform/custom/lazy/catch\n            return true;\n    }\n}\nfunction generateNullableCheck(doc, ctx, schema, accessor, buildsValue = true) {\n    const def = schema._zod.def;\n    const outputVar = buildsValue ? newVar(ctx) : null;\n    if (outputVar)\n        doc.write(`let ${outputVar} = null;`);\n    doc.write(`if (${accessor} !== null) {`);\n    doc.indented((d) => {\n        const innerOutput = generateCheck(d, ctx, def.innerType, accessor, buildsValue);\n        if (outputVar && innerOutput !== null)\n            d.write(`${outputVar} = ${innerOutput};`);\n    });\n    doc.write(`}`);\n    return outputVar;\n}\nfunction generateArrayCheck(doc, ctx, schema, accessor, buildsValue = true) {\n    const def = schema._zod.def;\n    doc.write(`if (!Array.isArray(${accessor})) return INVALID;`);\n    // Build a new array with validated/transformed elements.\n    const outputVar = buildsValue ? newVar(ctx) : null;\n    const iVar = newVar(ctx);\n    const elemVar = newVar(ctx);\n    if (outputVar)\n        doc.write(`const ${outputVar} = new Array(${accessor}.length);`);\n    doc.write(`for (let ${iVar} = 0; ${iVar} < ${accessor}.length; ${iVar}++) {`);\n    doc.indented((d) => {\n        d.write(`const ${elemVar} = ${accessor}[${iVar}];`);\n        const elemOutput = compileChild(d, ctx, def.element, elemVar, buildsValue);\n        if (outputVar && elemOutput !== null)\n            d.write(`${outputVar}[${iVar}] = ${elemOutput};`);\n    });\n    doc.write(`}`);\n    return outputVar;\n}\nfunction generateLiteralCheck(doc, ctx, schema, accessor) {\n    const def = schema._zod.def;\n    const values = def.values;\n    // Anything but a single value goes through Set.has: multi-value so every value participates, empty so nothing does — values[0] would be undefined and compile to an `!== undefined` check that accepts it. Single-value stays inlined for speed.\n    if (values.length !== 1) {\n        const literalSet = addConstant(ctx, new Set(values));\n        doc.write(`if (!${literalSet}.has(${accessor})) return INVALID;`);\n        return accessor;\n    }\n    const value = values[0];\n    // `$ZodLiteral` matches with `values.has`, i.e. SameValueZero, so NaN matches itself. `x !== NaN` is true for every input, which would reject everything — hand it to the same Set form the multi-value path uses.\n    if (typeof value === \"number\" && Number.isNaN(value)) {\n        const literalSet = addConstant(ctx, new Set(values));\n        doc.write(`if (!${literalSet}.has(${accessor})) return INVALID;`);\n        return accessor;\n    }\n    if (typeof value === \"string\") {\n        doc.write(`if (${accessor} !== ${util.esc(value)}) return INVALID;`);\n    }\n    else if (typeof value === \"number\" || typeof value === \"boolean\") {\n        doc.write(`if (${accessor} !== ${value}) return INVALID;`);\n    }\n    else if (value === null) {\n        doc.write(`if (${accessor} !== null) return INVALID;`);\n    }\n    else if (value === undefined) {\n        doc.write(`if (${accessor} !== undefined) return INVALID;`);\n    }\n    else if (typeof value === \"bigint\") {\n        doc.write(`if (${accessor} !== ${value}n) return INVALID;`);\n    }\n    else {\n        throw new ZodCompileUnsupportedError(`literal type ${typeof value}`);\n    }\n    return accessor;\n}\nfunction generateEnumCheck(doc, ctx, schema, accessor) {\n    const values = schema._zod.values;\n    // z.partialRecord and friends clear `_zod.values`, leaving no set to test membership against. Throw rather than emit INVALID so a union falls back whole instead of counting a false rejection.\n    if (!values) {\n        throw new ZodCompileUnsupportedError(\"enum schema without enumerated values\");\n    }\n    const enumSet = addConstant(ctx, values);\n    doc.write(`if (!${enumSet}.has(${accessor})) return INVALID;`);\n    return accessor;\n}\nfunction generateWrapperCheck(doc, ctx, schema, accessor) {\n    const def = schema._zod.def;\n    return generateCheck(doc, ctx, def.innerType, accessor);\n}\nfunction generateDefaultCheck(doc, ctx, schema, accessor) {\n    const def = schema._zod.def;\n    // `defaultValue` is an accessor on schemas built through the classic/mini\n    // factories and a plain data property on ones rebuilt programmatically\n    // (deepPartial and friends). Read it off the def either way — taking only\n    // `descriptor.get` silently dropped the default for the second kind, so\n    // `.default(v)` compiled to `undefined` instead of `v`.\n    const descriptor = Object.getOwnPropertyDescriptor(schema._zod.def, \"defaultValue\");\n    const defaultGetter = descriptor\n        ? () => schema._zod.def.defaultValue\n        : undefined;\n    // prefault differs from default: undefined-input is first replaced with the prefault value, then run through the inner schema.\n    if (schema._zod.def.type === \"prefault\") {\n        if (!defaultGetter) {\n            return generateCheck(doc, ctx, def.innerType, accessor);\n        }\n        const defaultFn = addConstant(ctx, defaultGetter);\n        const inputVar = newVar(ctx);\n        doc.write(`let ${inputVar} = ${accessor};`);\n        doc.write(`if (${accessor} === undefined) ${inputVar} = ${defaultFn}();`);\n        return generateCheck(doc, ctx, def.innerType, inputVar);\n    }\n    const outputVar = newVar(ctx);\n    // Default allows undefined (replaces with default value), otherwise validates inner type\n    if (defaultGetter) {\n        const defaultFn = addConstant(ctx, defaultGetter);\n        const cloneFn = addConstant(ctx, util.shallowClone);\n        doc.write(`let ${outputVar};`);\n        doc.write(`if (${accessor} === undefined) {`);\n        doc.indented((d) => {\n            // Shallow-clone the default so callers can mutate the result without affecting subsequent parses (#5855 — also covers Map/Set).\n            d.write(`${outputVar} = ${cloneFn}(${defaultFn}());`);\n        });\n        doc.write(`} else {`);\n        doc.indented((d) => {\n            const innerOutput = generateCheck(d, ctx, def.innerType, accessor);\n            d.write(`${outputVar} = ${innerOutput} === undefined ? ${cloneFn}(${defaultFn}()) : ${innerOutput};`);\n        });\n        doc.write(`}`);\n    }\n    else {\n        doc.write(`let ${outputVar};`);\n        doc.write(`if (${accessor} !== undefined) {`);\n        doc.indented((d) => {\n            const innerOutput = generateCheck(d, ctx, def.innerType, accessor);\n            d.write(`${outputVar} = ${innerOutput};`);\n        });\n        doc.write(`}`);\n    }\n    return outputVar;\n}\nfunction generateNonOptionalCheck(doc, ctx, schema, accessor) {\n    const def = schema._zod.def;\n    // The runtime inspects what the inner produced, not what it was given: a catch can turn a defined input into undefined, a default an absent one into a value.\n    const innerOutput = generateCheck(doc, ctx, def.innerType, accessor);\n    const outputVar = newVar(ctx);\n    doc.write(`const ${outputVar} = ${innerOutput};`);\n    doc.write(`if (${outputVar} === undefined) return INVALID;`);\n    return outputVar;\n}\nfunction generateTupleCheck(doc, ctx, schema, accessor) {\n    const def = schema._zod.def;\n    const items = def.items;\n    const rest = def.rest;\n    doc.write(`if (!Array.isArray(${accessor})) return INVALID;`);\n    // Mirror the runtime's getTupleOptStart: find the first index where every subsequent slot accepts `undefined` (i.e. is optional on input). Anything shorter than this is too_small; trailing absent slots are legal.\n    const optinStart = getTupleOptStart(items, \"optin\");\n    const optoutStart = getTupleOptStart(items, \"optout\");\n    // Length bounds\n    if (rest) {\n        // With rest: minimum length is the last required input slot\n        doc.write(`if (${accessor}.length < ${optinStart}) return INVALID;`);\n    }\n    else {\n        // No rest: input must be in [optinStart, items.length]\n        doc.write(`if (${accessor}.length < ${optinStart} || ${accessor}.length > ${items.length}) return INVALID;`);\n    }\n    // Build the output in assignment order so absent optional-output tail slots can truncate while default/prefault slots still fill missing positions.\n    const outputVar = newVar(ctx);\n    doc.write(`const ${outputVar} = [];`);\n    // Validate and collect each fixed item\n    for (let i = 0; i < items.length; i++) {\n        const itemSchema = items[i];\n        if (i >= optoutStart) {\n            doc.write(`if (${outputVar}.length === ${i}) {`);\n            doc.indented((d) => {\n                d.write(`if (${i} < ${accessor}.length) {`);\n                d.indented((d2) => {\n                    const elemVar = newVar(ctx);\n                    d2.write(`const ${elemVar} = ${accessor}[${i}];`);\n                    const elemOutput = compileChild(d2, ctx, itemSchema, elemVar);\n                    d2.write(`${outputVar}[${i}] = ${elemOutput};`);\n                });\n                d.write(`} else {`);\n                d.indented((d2) => {\n                    // Middle rung: absence supplies nothing in its place, so truncate rather than running the item on `undefined` and keeping what it invents. Mirrors the leading gate in `handleTupleResults`.\n                    if (dropsWhenAbsent(itemSchema)) {\n                        d2.write(`${outputVar}.length = ${i};`);\n                        return;\n                    }\n                    const elemVar = newVar(ctx);\n                    const branchVar = newVar(ctx);\n                    d2.write(`const ${elemVar} = undefined;`);\n                    d2.write(`const ${branchVar} = (() => {`);\n                    d2.indented((d3) => {\n                        const elemOutput = compileChild(d3, ctx, itemSchema, elemVar);\n                        d3.write(`return ${elemOutput};`);\n                    });\n                    d2.write(`})();`);\n                    d2.write(`if (${branchVar} === INVALID || ${branchVar} === undefined) ${outputVar}.length = ${i};`);\n                    d2.write(`else ${outputVar}[${i}] = ${branchVar};`);\n                });\n                d.write(`}`);\n            });\n            doc.write(`}`);\n        }\n        else {\n            const elemVar = newVar(ctx);\n            doc.write(`const ${elemVar} = ${accessor}[${i}];`);\n            const elemOutput = compileChild(doc, ctx, itemSchema, elemVar);\n            doc.write(`${outputVar}[${i}] = ${elemOutput};`);\n        }\n    }\n    // Validate and collect rest elements if present\n    if (rest) {\n        const iVar = newVar(ctx);\n        const elemVar = newVar(ctx);\n        doc.write(`for (let ${iVar} = ${items.length}; ${iVar} < ${accessor}.length; ${iVar}++) {`);\n        doc.indented((d) => {\n            d.write(`const ${elemVar} = ${accessor}[${iVar}];`);\n            const elemOutput = compileChild(d, ctx, rest, elemVar);\n            d.write(`${outputVar}[${iVar}] = ${elemOutput};`);\n        });\n        doc.write(`}`);\n    }\n    return outputVar;\n}\nfunction getTupleOptStart(items, key) {\n    for (let i = items.length - 1; i >= 0; i--) {\n        // Mirrors the runtime: optin is a three-rung ladder so any rung above `undefined` permits an absent slot; optout stays two-valued.\n        const omittable = key === \"optin\" ? items[i]._zod.optin !== undefined : items[i]._zod.optout === \"optional\";\n        if (!omittable)\n            return i + 1;\n    }\n    return 0;\n}\nfunction generateUnionCheck(doc, ctx, schema, accessor) {\n    const def = schema._zod.def;\n    const options = def.options;\n    if (def.discriminator) {\n        return generateDiscriminatedUnionCheck(doc, ctx, def, accessor);\n    }\n    // z.xor requires *exactly one* option to match. Match-counting in the fast path is only sound if every branch is exactly as strict as the runtime — any falsely-rejecting branch silently turns a multi-match rejection into an accept. Force the runtime for this rare combinator.\n    if (def.inclusive === false) {\n        throw new ZodCompileUnsupportedError(\"exclusive unions (z.xor)\");\n    }\n    if (options.length === 0) {\n        doc.write(\"return INVALID;\");\n        return accessor;\n    }\n    if (options.length === 1) {\n        return generateCheck(doc, ctx, options[0], accessor);\n    }\n    // Check if all options are bare literals - use Set optimization. A literal option carrying checks (e.g. .refine) must take the general path or the Set would accept values its checks reject.\n    const allLiterals = options.every((opt) => opt._zod.def.type === \"literal\" && !opt._zod.def.checks?.length);\n    if (allLiterals) {\n        const values = new Set(options.flatMap((opt) => opt._zod.def.values));\n        const valuesConst = addConstant(ctx, values);\n        doc.write(`if (!${valuesConst}.has(${accessor})) return INVALID;`);\n        return accessor;\n    }\n    // General case: try each option until one succeeds Use IIFEs that return the output or INVALID\n    const outputVar = newVar(ctx);\n    doc.write(`let ${outputVar};`);\n    for (let i = 0; i < options.length; i++) {\n        const opt = options[i];\n        if (i === 0) {\n            doc.write(`${outputVar} = (() => {`);\n        }\n        else {\n            doc.write(`if (${outputVar} === INVALID) ${outputVar} = (() => {`);\n        }\n        doc.indented((d) => {\n            // Generate check inside IIFE - returns INVALID on failure\n            const branchOutput = generateCheck(d, ctx, opt, accessor);\n            d.write(`return ${branchOutput};`);\n        });\n        doc.write(`})();`);\n    }\n    doc.write(`if (${outputVar} === INVALID) return INVALID;`);\n    return outputVar;\n}\nfunction generateDiscriminatedUnionCheck(doc, ctx, def, accessor) {\n    if (def.unionFallback) {\n        throw new ZodCompileUnsupportedError(\"discriminated union with unionFallback\");\n    }\n    if (def.options.length === 0) {\n        doc.write(\"return INVALID;\");\n        return accessor;\n    }\n    const discVar = newVar(ctx);\n    const outputVar = newVar(ctx);\n    doc.write(`const ${discVar} = ${accessor}?.[${util.esc(def.discriminator)}];`);\n    doc.write(`let ${outputVar};`);\n    let firstBranch = true;\n    const claimed = new Set();\n    for (const option of def.options) {\n        const values = option._zod.propValues?.[def.discriminator];\n        if (!values || values.size === 0) {\n            throw new ZodCompileUnsupportedError(\"discriminated union option without static discriminator values\");\n        }\n        // let the interpreter handle collisions instead of compiling first-match dispatch\n        for (const value of values) {\n            if (claimed.has(value)) {\n                throw new ZodCompileUnsupportedError(`duplicate discriminator value ${String(value)}`);\n            }\n            claimed.add(value);\n        }\n        const conditions = Array.from(values, (value) => literalEquality(ctx, discVar, value));\n        const prefix = firstBranch ? \"if\" : \"else if\";\n        doc.write(`${prefix} (${conditions.join(\" || \")}) {`);\n        doc.indented((d) => {\n            const branchOutput = generateCheck(d, ctx, option, accessor);\n            d.write(`${outputVar} = ${branchOutput};`);\n        });\n        doc.write(`}`);\n        firstBranch = false;\n    }\n    doc.write(`else { return INVALID; }`);\n    return outputVar;\n}\nfunction literalEquality(ctx, accessor, value) {\n    if (typeof value === \"string\")\n        return `${accessor} === ${util.esc(value)}`;\n    if (typeof value === \"number\") {\n        if (Number.isNaN(value))\n            return `Number.isNaN(${accessor})`;\n        return `${accessor} === ${value}`;\n    }\n    if (typeof value === \"boolean\")\n        return `${accessor} === ${value}`;\n    if (value === null)\n        return `${accessor} === null`;\n    if (value === undefined)\n        return `${accessor} === undefined`;\n    if (typeof value === \"bigint\")\n        return `${accessor} === ${value}n`;\n    if (typeof value === \"symbol\") {\n        const symbolConst = addConstant(ctx, value);\n        return `${accessor} === ${symbolConst}`;\n    }\n    throw new ZodCompileUnsupportedError(`literal discriminator value ${String(value)}`);\n}\nfunction generateIntersectionCheck(doc, ctx, schema, accessor) {\n    const def = schema._zod.def;\n    // An unmergeable merge, and a child failing before the merge is even reached, both return INVALID for a case the interpreter answers with a throw.\n    ctx.definite = false;\n    const leftOutput = compileChild(doc, ctx, def.left, accessor);\n    const rightOutput = compileChild(doc, ctx, def.right, accessor);\n    // Hoist the runtime merge helper so recursive object/array merge semantics stay in one place. If the merge is invalid, return INVALID and let the runtime fallback construct canonical errors.\n    const mergeConst = addConstant(ctx, mergeValues);\n    const mergedVar = newVar(ctx);\n    doc.write(`const ${mergedVar} = ${mergeConst}(${leftOutput}, ${rightOutput});`);\n    doc.write(`if (!${mergedVar}.valid) return INVALID;`);\n    return `${mergedVar}.data`;\n}\nfunction generateRecordCheck(doc, ctx, schema, accessor) {\n    const def = schema._zod.def;\n    // Use util.isPlainObject (rejects Date, Map, Set, class instances, etc.) to match runtime behavior. Hoisted call instead of inline so this stays a single source of truth with the runtime parser.\n    const isPlainObjectConst = addConstant(ctx, util.isPlainObject);\n    doc.write(`if (!${isPlainObjectConst}(${accessor})) return INVALID;`);\n    const outputVar = newVar(ctx);\n    const kVar = newVar(ctx);\n    const valVar = newVar(ctx);\n    doc.write(`const ${outputVar} = {};`);\n    // Exhaustive record. The runtime gates this on `values && !def.partial`, since z.partialRecord keeps its value set but makes every key optional; a loose record passes unrecognized keys through, which the per-key scan cannot express.\n    const recordDef = def;\n    const keyValues = recordDef.partial ? undefined : def.keyType._zod.values;\n    if (keyValues) {\n        const inputKeys = [];\n        for (const key of keyValues) {\n            if (!(typeof key === \"string\" || typeof key === \"number\" || typeof key === \"symbol\")) {\n                throw new ZodCompileUnsupportedError(`record key value ${String(key)}`);\n            }\n            const inputKey = typeof key === \"number\" ? key.toString() : key;\n            if (inputKey === \"__proto__\") {\n                // `out[\"__proto__\"] = v` would hit the prototype setter on the output.\n                throw new ZodCompileUnsupportedError('record key \"__proto__\"');\n            }\n            inputKeys.push(inputKey);\n            const keyConst = addConstant(ctx, key);\n            const outKey = generateCheck(doc, ctx, def.keyType, keyConst);\n            // Read the property once. Passing the raw expression let compileChild validate one read while the output write performed a second, so a getter could hand back a value nothing had checked.\n            const valueVar = newVar(ctx);\n            doc.write(`const ${valueVar} = ${accessor}[${literalPropertyKey(ctx, inputKey)}];`);\n            const valOutput = compileChild(doc, ctx, def.valueType, valueVar);\n            doc.write(`${outputVar}[${outKey}] = ${valOutput};`);\n        }\n        // `mode: \"loose\"` changes only what happens to unrecognized keys, so it belongs here rather than the per-present-key scan. Passing them through matches the runtime, which skips `__proto__`.\n        const knownKeysConst = addConstant(ctx, new Set(inputKeys));\n        doc.write(`for (const ${kVar} in ${accessor}) {`);\n        doc.indented((d) => {\n            d.write(`if (${knownKeysConst}.has(${kVar})) continue;`);\n            if (recordDef.mode === \"loose\") {\n                d.write(`if (${kVar} !== \"__proto__\") ${outputVar}[${kVar}] = ${accessor}[${kVar}];`);\n            }\n            else {\n                d.write(`return INVALID;`);\n            }\n        });\n        doc.write(`}`);\n        return outputVar;\n    }\n    // The bare-string shortcut below only tests `typeof key === \"string\"`, so it\n    // is correct exclusively for a `z.string()` carrying nothing else. A string\n    // *format* lives on the def rather than in `checks` — `z.record(z.email(), …)`\n    // reads as a plain string here — and coercion rewrites the key, so both have\n    // to take the general path or the shortcut accepts keys the runtime rejects.\n    const keyDef = def.keyType._zod.def;\n    const keyIsBareString = keyDef.type === \"string\" && keyDef.format === undefined && !keyDef.coerce && (keyDef.checks?.length ?? 0) === 0;\n    if (!keyIsBareString) {\n        // A key schema with no value set is a constraint every key must satisfy\n        // (`z.email()`, `z.string().min(3)`, `z.number()`, a template literal).\n        // The runtime runs it against each own enumerable key and writes the value\n        // under the key it produced, so compile it once and call it per key.\n        const isLoose = def.mode === \"loose\";\n        // the key compiles in its own context, so carry its verdict out: a key schema that can answer INVALID undecidably makes this validator undecidable too\n        const keyFn = compileFn(def.keyType);\n        if (keyFn.definite === false)\n            ctx.definite = false;\n        const keyFast = addConstant(ctx, keyFn);\n        const numericConst = addConstant(ctx, regexes.number);\n        const outKeyVar = newVar(ctx);\n        // the body runs once per string key and once per symbol key, since a key schema can accept symbols\n        emitOwnKeys(doc, ctx, accessor, kVar, (d) => {\n            d.write(`let ${outKeyVar} = ${keyFast}(${kVar});`);\n            // Numeric-string retry, mirroring the runtime: a key the schema rejects as a string is tried again as a number, so z.record(z.number(), …) matches the numeric keys JavaScript stringified on the way in.\n            d.write(`if (${outKeyVar} === INVALID && typeof ${kVar} === \"string\" && ${numericConst}.test(${kVar})) ${outKeyVar} = ${keyFast}(Number(${kVar}));`);\n            if (isLoose) {\n                // A loose record keeps a key its schema rejects, copying the value across unvalidated rather than failing the parse.\n                d.write(`if (${outKeyVar} === INVALID) { ${outputVar}[${kVar}] = ${accessor}[${kVar}]; continue; }`);\n            }\n            else {\n                d.write(`if (${outKeyVar} === INVALID) return INVALID;`);\n            }\n            // The guard above tested the input key, but the schema can normalize an ordinary key into __proto__; re-check the one actually written under.\n            d.write(`if (${outKeyVar} === \"__proto__\") continue;`);\n            // Read once: the raw expression would be evaluated again by the output write below, so an accessor could return an unvalidated second value.\n            const valueVar = newVar(ctx);\n            d.write(`const ${valueVar} = ${accessor}[${kVar}];`);\n            const valOutput = compileChild(d, ctx, def.valueType, valueVar);\n            d.write(`${outputVar}[${outKeyVar}] = ${valOutput};`);\n        });\n        return outputVar;\n    }\n    // Plain z.string() keys: every own enumerable string key's value is validated, and an own enumerable symbol key fails the string key schema, as it does in the runtime's Reflect.ownKeys walk.\n    emitOwnKeys(doc, ctx, accessor, kVar, (d) => {\n        d.write(`const ${valVar} = ${accessor}[${kVar}];`);\n        const valOutput = compileChild(d, ctx, def.valueType, valVar);\n        d.write(`${outputVar}[${kVar}] = ${valOutput};`);\n    }, `return INVALID;`);\n    return outputVar;\n}\n// Walks the own enumerable keys of a plain object in Reflect.ownKeys order — strings from getOwnPropertyNames, then symbols — instead of Reflect.ownKeys, whose accumulator made that walk 3–6x the cost of the loop it fed. Both snapshots are taken before any value is read and every key is rechecked with propertyIsEnumerable when visited, exactly the runtime's walk, so a getter that adds, deletes, hides or reveals a key mid-walk sees the runtime's verdict; for-in and Object.keys were no faster and each lost a case (for-in enumerates the prototype chain after the own keys, Object.keys drops a key that is non-enumerable at snapshot time). `body` is written once for the string loop and once for the symbol loop unless `onSymbol` replaces the latter.\nfunction emitOwnKeys(doc, ctx, accessor, kVar, body, onSymbol) {\n    const propIsEnumerableConst = addConstant(ctx, Object.prototype.propertyIsEnumerable);\n    const symsVar = newVar(ctx);\n    const keysVar = newVar(ctx);\n    const iVar = newVar(ctx);\n    doc.write(`const ${symsVar} = Object.getOwnPropertySymbols(${accessor});`);\n    doc.write(`const ${keysVar} = Object.getOwnPropertyNames(${accessor});`);\n    doc.write(`for (let ${iVar} = 0; ${iVar} < ${keysVar}.length; ${iVar}++) {`);\n    doc.indented((d) => {\n        d.write(`const ${kVar} = ${keysVar}[${iVar}];`);\n        d.write(`if (${kVar} === \"__proto__\" || !${propIsEnumerableConst}.call(${accessor}, ${kVar})) continue;`);\n        body(d);\n    });\n    doc.write(`}`);\n    doc.write(`for (let ${iVar} = 0; ${iVar} < ${symsVar}.length; ${iVar}++) {`);\n    doc.indented((d) => {\n        d.write(`const ${kVar} = ${symsVar}[${iVar}];`);\n        d.write(`if (!${propIsEnumerableConst}.call(${accessor}, ${kVar})) continue;`);\n        if (onSymbol)\n            d.write(onSymbol);\n        else\n            body(d);\n    });\n    doc.write(`}`);\n}\nfunction literalPropertyKey(ctx, key) {\n    if (typeof key === \"string\")\n        return util.esc(key);\n    return addConstant(ctx, key);\n}\nfunction generateMapCheck(doc, ctx, schema, accessor) {\n    const def = schema._zod.def;\n    doc.write(`if (!(${accessor} instanceof Map)) return INVALID;`);\n    const outputVar = newVar(ctx);\n    const kVar = newVar(ctx);\n    const valVar = newVar(ctx);\n    doc.write(`const ${outputVar} = new Map();`);\n    doc.write(`for (const [${kVar}, ${valVar}] of ${accessor}) {`);\n    doc.indented((d) => {\n        const keyOutput = generateCheck(d, ctx, def.keyType, kVar);\n        const valOutput = generateCheck(d, ctx, def.valueType, valVar);\n        d.write(`${outputVar}.set(${keyOutput}, ${valOutput});`);\n    });\n    doc.write(`}`);\n    return outputVar;\n}\nfunction generateSetCheck(doc, ctx, schema, accessor) {\n    const def = schema._zod.def;\n    doc.write(`if (!(${accessor} instanceof Set)) return INVALID;`);\n    const outputVar = newVar(ctx);\n    const valVar = newVar(ctx);\n    doc.write(`const ${outputVar} = new Set();`);\n    doc.write(`for (const ${valVar} of ${accessor}) {`);\n    doc.indented((d) => {\n        const valOutput = generateCheck(d, ctx, def.valueType, valVar);\n        d.write(`${outputVar}.add(${valOutput});`);\n    });\n    doc.write(`}`);\n    return outputVar;\n}\nfunction generateFileCheck(doc, accessor) {\n    // Runtime $ZodFile is a bare `instanceof File`, including the implicit global lookup. The previous duck-typed fallback accepted arbitrary {name, size} objects in File-less environments — behavior the runtime never had.\n    doc.write(`if (!(${accessor} instanceof File)) return INVALID;`);\n    return accessor;\n}\nfunction generateTemplateLiteralCheck(doc, ctx, schema, accessor) {\n    doc.write(`if (typeof ${accessor} !== \"string\") return INVALID;`);\n    // Template literal schemas have a pre-computed pattern in _zod.pattern\n    const pattern = schema._zod.pattern;\n    if (pattern) {\n        const patternConst = addConstant(ctx, pattern);\n        doc.write(`${patternConst}.lastIndex = 0;`);\n        doc.write(`if (!${patternConst}.test(${accessor})) return INVALID;`);\n    }\n    return accessor;\n}\nfunction generateLazyCheck(doc, ctx, schema, accessor) {\n    // For lazy schemas, we use a cached parser that falls back to runtime Zod parsing This handles recursive schemas correctly by avoiding infinite compilation loops\n    const def = schema._zod.def;\n    const getterConst = addUserConstant(ctx, def.getter);\n    const cacheConst = addConstant(ctx, { parser: null });\n    doc.write(`if (!${cacheConst}.parser) {`);\n    doc.indented((d) => {\n        d.write(`const inner = ${getterConst}();`);\n        d.write(`${cacheConst}.parser = function(input) {`);\n        d.indented((d2) => {\n            // Use runtime Zod parsing - this correctly handles recursive schemas Pass an empty ctx like runtimeRun does — runtime parsers read ctx.skipChecks/ctx.direction unconditionally and crash on undefined.\n            d2.write(`const result = inner._zod.run({ value: input, issues: [] }, {});`);\n            d2.write(`return result.issues.length === 0 ? result.value : INVALID;`);\n        });\n        d.write(`};`);\n    });\n    doc.write(`}`);\n    const outputVar = newVar(ctx);\n    doc.write(`const ${outputVar} = ${cacheConst}.parser(${accessor});`);\n    doc.write(`if (${outputVar} === INVALID) return INVALID;`);\n    return outputVar;\n}\nfunction generatePipeCheck(doc, ctx, schema, accessor) {\n    const def = schema._zod.def;\n    // Validate input type first\n    const inputOutput = generateCheck(doc, ctx, def.in, accessor);\n    if (def.transform) {\n        // Apply transform and validate output. The transform may read its second `payload` argument (codec transforms like z.stringbool() push issues there) so wrap the call in a helper that spoofs a payload. Pushed issues signal INVALID and the wrapper falls back to the runtime, and a plain function handing back a promise answers INVALID too — union parity, but not a decidable rejection at the top level.\n        if (isAsyncFunction(def.transform)) {\n            throw new ZodCompileAsyncError(\"z.compile: async transforms in pipes are not supported\");\n        }\n        const transformFn = def.transform;\n        const helperFn = (value) => {\n            // `addIssue` has to be here: a transform reporting through it is reporting, not failing. Without it the call threw a TypeError that the old catch swallowed into a fallback, so every ctx.addIssue transform quietly lost its fast path and the real error was never visible.\n            const fakePayload = { value, issues: [], addIssue: pushIssue };\n            // A throw is deliberately not caught. The interpreter lets one propagate out of the whole parse; swallowing it into INVALID turned a thrown error into a merely-rejected union branch, so a later branch answered instead.\n            const result = transformFn(value, fakePayload);\n            if (result instanceof Promise)\n                return INVALID;\n            return fakePayload.issues.length === 0 ? result : INVALID;\n        };\n        const helperConst = addUserConstant(ctx, helperFn);\n        const transformedVar = newVar(ctx);\n        doc.write(`const ${transformedVar} = ${helperConst}(${inputOutput});`);\n        doc.write(`if (${transformedVar} === INVALID) return INVALID;`);\n        return generateCheck(doc, ctx, def.out, transformedVar);\n    }\n    else {\n        // No transform - validate output type on same value\n        return generateCheck(doc, ctx, def.out, inputOutput);\n    }\n}\nfunction isAsyncFunction(fn) {\n    return (typeof fn === \"function\" &&\n        (fn.constructor.name === \"AsyncFunction\" ||\n            fn[Symbol.toStringTag] === \"AsyncFunction\"));\n}\nfunction generateCustomCheck(doc, ctx, schema, accessor) {\n    const def = schema._zod.def;\n    if (def.fn) {\n        // Check for async function\n        if (isAsyncFunction(def.fn)) {\n            throw new ZodCompileAsyncError(\"z.compile: async custom predicates are not supported\");\n        }\n        // Custom schema with a predicate function (e.g. z.instanceof). `isAsyncFunction` above is syntactic, so a plain function returning a promise reaches here, and a promise is truthy — it would read as a pass where the interpreter throws.\n        const fnConst = addUserConstant(ctx, def.fn);\n        const throwAsyncConst = addConstant(ctx, throwAsync);\n        const resVar = newVar(ctx);\n        doc.write(`const ${resVar} = ${fnConst}(${accessor});`);\n        doc.write(`if (${resVar} instanceof Promise) ${throwAsyncConst}();`);\n        doc.write(`if (!${resVar}) return INVALID;`);\n    }\n    else {\n        throw new ZodCompileUnsupportedError(\"custom schema without a predicate function\");\n    }\n    return accessor;\n}\n// Runtime helper for a compiled `catch`: runs the inner schema once and returns its value when it succeeded. Anything else — a failure the catch would handle, or an async inner — returns INVALID so the interpreter takes over.\nfunction runtimeCatch(innerSchema, catchValue, value) {\n    const result = innerSchema._zod.run({ value, issues: [] }, {});\n    if (result && typeof result.then === \"function\")\n        return INVALID;\n    const r = result;\n    if (r.issues.length === 0)\n        return r.value;\n    // Only reached for a catch value that ignores the parse context — codegen refuses the rest — so there are no issues to finalize and nothing here needs the caller's error map.\n    return catchValue();\n}\nfunction generateCatchCheck(doc, ctx, schema, accessor) {\n    const def = schema._zod.def;\n    // An untagged catchValue is a user callback, and one reading `ctx.error` needs the caller's per-parse error map. Catch *succeeds*, so a wrong message there is unobservable — refuse at codegen, and not islandable either, since `runtimeRun` has no context to hand it.\n    if (!def.catchValue[util.CONSTANT_CATCH]) {\n        throw new ZodCompileUnsupportedError(\"catch with a callback (only a constant catch value compiles)\", false);\n    }\n    const outputVar = newVar(ctx);\n    doc.write(`let ${outputVar} = (() => {`);\n    doc.indented((d) => {\n        const innerOut = compileChild(d, ctx, def.innerType, accessor);\n        d.write(`return ${innerOut};`);\n    });\n    doc.write(`})();`);\n    const innerConst = addConstant(ctx, def.innerType);\n    const catchConst = addUserConstant(ctx, def.catchValue);\n    const catchHelperConst = addConstant(ctx, runtimeCatch);\n    doc.write(`if (${outputVar} === INVALID) {`);\n    doc.indented((d) => {\n        d.write(`${outputVar} = ${catchHelperConst}(${innerConst}, ${catchConst}, ${accessor});`);\n        d.write(`if (${outputVar} === INVALID) return INVALID;`);\n    });\n    doc.write(`}`);\n    return outputVar;\n}\nfunction generateTransformCheck(doc, ctx, schema, accessor) {\n    const def = schema._zod.def;\n    if (def.transform) {\n        // Check for async transform\n        if (isAsyncFunction(def.transform)) {\n            throw new ZodCompileAsyncError(\"z.compile: async transforms are not supported\");\n        }\n        // Create a helper that runs the transform and returns the result or INVALID on error\n        const transformFn = def.transform;\n        const helperFn = (value) => {\n            const fakePayload = { value, issues: [], addIssue: pushIssue };\n            // As in the pipe helper: a throw propagates, because the interpreter lets it out of the whole parse rather than treating it as a failed branch.\n            const result = transformFn(value, fakePayload);\n            if (result instanceof Promise)\n                return INVALID;\n            return fakePayload.issues.length === 0 ? result : INVALID;\n        };\n        const helperConst = addUserConstant(ctx, helperFn);\n        const outputVar = newVar(ctx);\n        doc.write(`const ${outputVar} = ${helperConst}(${accessor});`);\n        doc.write(`if (${outputVar} === INVALID) return INVALID;`);\n        return outputVar;\n    }\n    return accessor;\n}\n","import * as checks from \"./checks.js\";\nimport * as registries from \"./registries.js\";\nimport * as schemas from \"./schemas.js\";\nimport * as util from \"./util.js\";\nfunction snapshotChecks(def) {\n    if (def.checks)\n        def.checks = [...def.checks];\n    return def;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _string(Class, params) {\n    return new Class(snapshotChecks({ type: \"string\", ...util.normalizeParams(params) }));\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedString(Class, params) {\n    return new Class(snapshotChecks({ type: \"string\", coerce: true, ...util.normalizeParams(params) }));\n}\n// @__NO_SIDE_EFFECTS__\nexport function _email(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"email\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _guid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"guid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v4\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v6\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv7(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v7\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _url(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"url\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _emoji(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"emoji\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nanoid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"nanoid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link _cuid2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\n// @__NO_SIDE_EFFECTS__\nexport function _cuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cuid2(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cuid2\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ulid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ulid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _xid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"xid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ksuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ksuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ipv4\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ipv6\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mac(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"mac\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cidrv4\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cidrv6\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"base64\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64url(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"base64url\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _e164(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"e164\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _creditCard(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"credit_card\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _iban(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"iban\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _jwt(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"jwt\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport const TimePrecision = {\n    Any: null,\n    Minute: -1,\n    Second: 0,\n    Millisecond: 3,\n    Microsecond: 6,\n};\n// @__NO_SIDE_EFFECTS__\nexport function _isoDateTime(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"datetime\",\n        check: \"string_format\",\n        offset: false,\n        local: false,\n        precision: null,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDate(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"date\",\n        check: \"string_format\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoTime(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"time\",\n        check: \"string_format\",\n        precision: null,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDuration(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"duration\",\n        check: \"string_format\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _number(Class, params) {\n    return new Class(snapshotChecks({ type: \"number\", checks: [], ...util.normalizeParams(params) }));\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedNumber(Class, params) {\n    return new Class(snapshotChecks({ type: \"number\", coerce: true, checks: [], ...util.normalizeParams(params) }));\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"safeint\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"float32\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float64(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"float64\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"int32\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"uint32\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _boolean(Class, params) {\n    return new Class({\n        type: \"boolean\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBoolean(Class, params) {\n    return new Class({\n        type: \"boolean\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _bigint(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBigint(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int64(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        check: \"bigint_format\",\n        abort: false,\n        format: \"int64\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint64(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        check: \"bigint_format\",\n        abort: false,\n        format: \"uint64\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _symbol(Class, params) {\n    return new Class({\n        type: \"symbol\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _undefined(Class, params) {\n    return new Class({\n        type: \"undefined\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _null(Class, params) {\n    return new Class({\n        type: \"null\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _any(Class) {\n    return new Class({\n        type: \"any\",\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _unknown(Class) {\n    return new Class({\n        type: \"unknown\",\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _never(Class, params) {\n    return new Class({\n        type: \"never\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _void(Class, params) {\n    return new Class({\n        type: \"void\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _date(Class, params) {\n    return new Class({\n        type: \"date\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedDate(Class, params) {\n    return new Class({\n        type: \"date\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nan(Class, params) {\n    return new Class({\n        type: \"nan\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lt(value, params) {\n    return new checks.$ZodCheckLessThan({\n        check: \"less_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: false,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lte(value, params) {\n    return new checks.$ZodCheckLessThan({\n        check: \"less_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: true,\n    });\n}\nexport { \n/** @deprecated Use `z.lte()` instead. */\n_lte as _max, };\n// @__NO_SIDE_EFFECTS__\nexport function _gt(value, params) {\n    return new checks.$ZodCheckGreaterThan({\n        check: \"greater_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: false,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _gte(value, params) {\n    return new checks.$ZodCheckGreaterThan({\n        check: \"greater_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: true,\n    });\n}\nexport { \n/** @deprecated Use `z.gte()` instead. */\n_gte as _min, };\n// @__NO_SIDE_EFFECTS__\nexport function _positive(params) {\n    return _gt(0, params);\n}\n// negative\n// @__NO_SIDE_EFFECTS__\nexport function _negative(params) {\n    return _lt(0, params);\n}\n// nonpositive\n// @__NO_SIDE_EFFECTS__\nexport function _nonpositive(params) {\n    return _lte(0, params);\n}\n// nonnegative\n// @__NO_SIDE_EFFECTS__\nexport function _nonnegative(params) {\n    return _gte(0, params);\n}\n// @__NO_SIDE_EFFECTS__\nexport function _multipleOf(value, params) {\n    return new checks.$ZodCheckMultipleOf({\n        check: \"multiple_of\",\n        ...util.normalizeParams(params),\n        value,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxSize(maximum, params) {\n    return new checks.$ZodCheckMaxSize({\n        check: \"max_size\",\n        ...util.normalizeParams(params),\n        maximum,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minSize(minimum, params) {\n    return new checks.$ZodCheckMinSize({\n        check: \"min_size\",\n        ...util.normalizeParams(params),\n        minimum,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _size(size, params) {\n    return new checks.$ZodCheckSizeEquals({\n        check: \"size_equals\",\n        ...util.normalizeParams(params),\n        size,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxLength(maximum, params) {\n    const ch = new checks.$ZodCheckMaxLength({\n        check: \"max_length\",\n        ...util.normalizeParams(params),\n        maximum,\n    });\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minLength(minimum, params) {\n    return new checks.$ZodCheckMinLength({\n        check: \"min_length\",\n        ...util.normalizeParams(params),\n        minimum,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _length(length, params) {\n    return new checks.$ZodCheckLengthEquals({\n        check: \"length_equals\",\n        ...util.normalizeParams(params),\n        length,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _regex(pattern, params) {\n    return new checks.$ZodCheckRegex({\n        check: \"string_format\",\n        format: \"regex\",\n        ...util.normalizeParams(params),\n        pattern,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lowercase(params) {\n    return new checks.$ZodCheckLowerCase({\n        check: \"string_format\",\n        format: \"lowercase\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uppercase(params) {\n    return new checks.$ZodCheckUpperCase({\n        check: \"string_format\",\n        format: \"uppercase\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _includes(includes, params) {\n    return new checks.$ZodCheckIncludes({\n        check: \"string_format\",\n        format: \"includes\",\n        ...util.normalizeParams(params),\n        includes,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _startsWith(prefix, params) {\n    return new checks.$ZodCheckStartsWith({\n        check: \"string_format\",\n        format: \"starts_with\",\n        ...util.normalizeParams(params),\n        prefix,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _endsWith(suffix, params) {\n    return new checks.$ZodCheckEndsWith({\n        check: \"string_format\",\n        format: \"ends_with\",\n        ...util.normalizeParams(params),\n        suffix,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _property(property, schema, params) {\n    return new checks.$ZodCheckProperty({\n        check: \"property\",\n        property,\n        schema,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _properties(shape, params) {\n    return new checks.$ZodCheckProperties({\n        check: \"properties\",\n        shape,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mime(types, params) {\n    return new checks.$ZodCheckMimeType({\n        check: \"mime_type\",\n        mime: types,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _overwrite(tx) {\n    return new checks.$ZodCheckOverwrite({\n        check: \"overwrite\",\n        tx,\n    });\n}\n// normalize\n// @__NO_SIDE_EFFECTS__\nexport function _normalize(form) {\n    return _overwrite((input) => input.normalize(form));\n}\n// trim\n// @__NO_SIDE_EFFECTS__\nexport function _trim() {\n    return _overwrite((input) => input.trim());\n}\n// toLowerCase\n// @__NO_SIDE_EFFECTS__\nexport function _toLowerCase() {\n    return _overwrite((input) => input.toLowerCase());\n}\n// toUpperCase\n// @__NO_SIDE_EFFECTS__\nexport function _toUpperCase() {\n    return _overwrite((input) => input.toUpperCase());\n}\n// slugify\n// @__NO_SIDE_EFFECTS__\nexport function _slugify() {\n    return _overwrite((input) => util.slugify(input));\n}\n// @__NO_SIDE_EFFECTS__\nexport function _array(Class, element, params) {\n    return new Class({\n        type: \"array\",\n        element,\n        // get element() {\n        //   return element;\n        // },\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _union(Class, options, params) {\n    return new Class({\n        type: \"union\",\n        options,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _xor(Class, options, params) {\n    return new Class({\n        type: \"union\",\n        options,\n        inclusive: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _discriminatedUnion(Class, discriminator, options, params) {\n    return new Class({\n        type: \"union\",\n        options: options,\n        discriminator,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _intersection(Class, left, right) {\n    return new Class({\n        type: \"intersection\",\n        left,\n        right,\n    });\n}\n// export function _tuple(\n//   Class: util.SchemaClass<schemas.$ZodTuple>,\n//   items: [],\n//   params?: string | $ZodTupleParams\n// ): schemas.$ZodTuple<[], null>;\n// @__NO_SIDE_EFFECTS__\nexport function _tuple(Class, items, _paramsOrRest, _params) {\n    const hasRest = _paramsOrRest instanceof schemas.$ZodType;\n    const params = hasRest ? _params : _paramsOrRest;\n    const rest = hasRest ? _paramsOrRest : null;\n    return new Class({\n        type: \"tuple\",\n        items,\n        rest,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _record(Class, keyType, valueType, params) {\n    return new Class({\n        type: \"record\",\n        keyType,\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _map(Class, keyType, valueType, params) {\n    return new Class({\n        type: \"map\",\n        keyType,\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _set(Class, valueType, params) {\n    return new Class({\n        type: \"set\",\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _enum(Class, values, params) {\n    const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n    // if (Array.isArray(values)) {\n    //   for (const value of values) {\n    //     entries[value] = value;\n    //   }\n    // } else {\n    //   Object.assign(entries, values);\n    // }\n    // const entries: util.EnumLike = {};\n    // for (const val of values) {\n    //   entries[val] = val;\n    // }\n    return new Class({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function _nativeEnum(Class, entries, params) {\n    return new Class({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _literal(Class, value, params) {\n    return new Class({\n        type: \"literal\",\n        values: Array.isArray(value) ? value : [value],\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _file(Class, params) {\n    return new Class({\n        type: \"file\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _transform(Class, fn) {\n    return new Class({\n        type: \"transform\",\n        transform: fn,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _optional(Class, innerType) {\n    return new Class({\n        type: \"optional\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nullable(Class, innerType) {\n    return new Class({\n        type: \"nullable\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _default(Class, innerType, defaultValue) {\n    return new Class({\n        type: \"default\",\n        innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n        },\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nonoptional(Class, innerType, params) {\n    return new Class({\n        type: \"nonoptional\",\n        innerType,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _success(Class, innerType) {\n    return new Class({\n        type: \"success\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _catch(Class, innerType, catchValue) {\n    return new Class({\n        type: \"catch\",\n        innerType,\n        catchValue: (typeof catchValue === \"function\" ? catchValue : util.constantCatch(catchValue)),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _pipe(Class, in_, out) {\n    return new Class({\n        type: \"pipe\",\n        in: in_,\n        out,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _readonly(Class, innerType) {\n    return new Class({\n        type: \"readonly\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _templateLiteral(Class, parts, params) {\n    return new Class({\n        type: \"template_literal\",\n        parts,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lazy(Class, getter) {\n    return new Class({\n        type: \"lazy\",\n        getter,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _promise(Class, innerType) {\n    return new Class({\n        type: \"promise\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _custom(Class, fn, _params) {\n    const norm = util.normalizeParams(_params);\n    norm.abort ?? (norm.abort = true); // default to abort:false\n    const schema = new Class({\n        type: \"custom\",\n        check: \"custom\",\n        fn: fn,\n        ...norm,\n    });\n    return schema;\n}\n// same as _custom but defaults to abort:false\n// @__NO_SIDE_EFFECTS__\nexport function _refine(Class, fn, _params) {\n    const schema = new Class({\n        type: \"custom\",\n        check: \"custom\",\n        fn: fn,\n        ...util.normalizeParams(_params),\n    });\n    return schema;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _superRefine(fn, params) {\n    const ch = _check((payload) => {\n        payload.addIssue = (issue) => {\n            if (typeof issue === \"string\") {\n                payload.issues.push(util.issue(issue, payload.value, ch._zod.def));\n            }\n            else {\n                // for Zod 3 backwards compatibility\n                const _issue = issue;\n                if (_issue.fatal)\n                    _issue.continue = false;\n                _issue.code ?? (_issue.code = \"custom\");\n                if (!(\"input\" in _issue))\n                    _issue.input = payload.value;\n                _issue.inst ?? (_issue.inst = ch);\n                _issue.continue ?? (_issue.continue = !ch._zod.def.abort); // abort is always undefined, so this is always true...\n                payload.issues.push(util.issue(_issue));\n            }\n        };\n        return fn(payload.value, payload);\n    }, params);\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _check(fn, params) {\n    const ch = new checks.$ZodCheck({\n        check: \"custom\",\n        ...util.normalizeParams(params),\n    });\n    ch._zod.check = fn;\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function describe(description) {\n    const ch = new checks.$ZodCheck({ check: \"describe\" });\n    ch._zod.onattach = [\n        (inst) => {\n            const existing = registries.globalRegistry.get(inst) ?? {};\n            registries.globalRegistry.add(inst, { ...existing, description });\n        },\n    ];\n    ch._zod.check = () => { }; // no-op check\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function meta(metadata) {\n    const ch = new checks.$ZodCheck({ check: \"meta\" });\n    ch._zod.onattach = [\n        (inst) => {\n            const existing = registries.globalRegistry.get(inst) ?? {};\n            registries.globalRegistry.add(inst, { ...existing, ...metadata });\n        },\n    ];\n    ch._zod.check = () => { }; // no-op check\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringbool(Classes, _params) {\n    const params = util.normalizeParams(_params);\n    let truthyArray = params.truthy ?? [\"true\", \"1\", \"yes\", \"on\", \"y\", \"enabled\"];\n    let falsyArray = params.falsy ?? [\"false\", \"0\", \"no\", \"off\", \"n\", \"disabled\"];\n    if (params.case !== \"sensitive\") {\n        truthyArray = truthyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n        falsyArray = falsyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n    }\n    const truthySet = new Set(truthyArray);\n    const falsySet = new Set(falsyArray);\n    const _Codec = Classes.Codec ?? schemas.$ZodCodec;\n    const _Boolean = Classes.Boolean ?? schemas.$ZodBoolean;\n    const _String = Classes.String ?? schemas.$ZodString;\n    const stringSchema = new _String({ type: \"string\", error: params.error });\n    const booleanSchema = new _Boolean({ type: \"boolean\", error: params.error });\n    const codec = new _Codec({\n        type: \"pipe\",\n        in: stringSchema,\n        out: booleanSchema,\n        transform: ((input, payload) => {\n            let data = input;\n            if (params.case !== \"sensitive\")\n                data = data.toLowerCase();\n            if (truthySet.has(data)) {\n                return true;\n            }\n            else if (falsySet.has(data)) {\n                return false;\n            }\n            else {\n                payload.issues.push({\n                    code: \"invalid_value\",\n                    expected: \"stringbool\",\n                    values: [...truthySet, ...falsySet],\n                    input: payload.value,\n                    inst: codec,\n                    continue: false,\n                });\n                return {};\n            }\n        }),\n        reverseTransform: ((input, _payload) => {\n            if (input === true) {\n                return truthyArray[0] || \"true\";\n            }\n            else {\n                return falsyArray[0] || \"false\";\n            }\n        }),\n        error: params.error,\n    });\n    codec._zod.bag.truthy = truthyArray;\n    codec._zod.bag.falsy = falsyArray;\n    codec._zod.bag.case = params.case ?? \"insensitive\";\n    return codec;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringFormat(Class, format, fnOrRegex, _params = {}) {\n    const params = util.normalizeParams(_params);\n    const def = {\n        check: \"string_format\",\n        type: \"string\",\n        format,\n        fn: typeof fnOrRegex === \"function\" ? fnOrRegex : (val) => fnOrRegex.test(val),\n        ...params,\n    };\n    if (fnOrRegex instanceof RegExp) {\n        def.pattern = fnOrRegex;\n    }\n    const inst = new Class(def);\n    return inst;\n}\n","import { globalRegistry } from \"./registries.js\";\nimport { assignProp } from \"./util.js\";\nfunction assignProps(target, ...sources) {\n    for (const source of sources) {\n        for (const key of Reflect.ownKeys(source)) {\n            if (Object.prototype.propertyIsEnumerable.call(source, key)) {\n                assignProp(target, key, source[key]);\n            }\n        }\n    }\n    return target;\n}\n// function initializeContext<T extends schemas.$ZodType>(inputs: JSONSchemaGeneratorParams<T>): ToJSONSchemaContext<T> {\n//   return {\n//     processor: inputs.processor,\n//     metadataRegistry: inputs.metadata ?? globalRegistry,\n//     target: inputs.target ?? \"draft-2020-12\",\n//     unrepresentable: inputs.unrepresentable ?? \"throw\",\n//   };\n// }\nexport function initializeContext(params) {\n    // Normalize target: convert old non-hyphenated versions to hyphenated versions\n    let target = params?.target ?? \"draft-2020-12\";\n    if (target === \"draft-4\")\n        target = \"draft-04\";\n    if (target === \"draft-7\")\n        target = \"draft-07\";\n    return {\n        processors: params.processors ?? {},\n        metadataRegistry: params?.metadata ?? globalRegistry,\n        target,\n        unrepresentable: params?.unrepresentable ?? \"throw\",\n        override: params?.override ?? (() => { }),\n        io: params?.io ?? \"output\",\n        counter: 0,\n        seen: new Map(),\n        sharedDefsExtractedFor: undefined,\n        sharedEmitDoneFor: undefined,\n        cycles: params?.cycles ?? \"ref\",\n        reused: params?.reused ?? \"inline\",\n        intersections: [],\n        deferred: [],\n        external: params?.external ?? undefined,\n    };\n}\n/**\n * Applies the `unrepresentable` setting at a site that has no JSON Schema equivalent. Throws\n * `message` unless the setting (or the handler's return value) says otherwise. Returns `true` if a\n * custom JSON Schema was written into `json`, in which case the caller must not write its own.\n */\nexport function handleUnrepresentable(schema, ctx, json, params, message) {\n    const result = typeof ctx.unrepresentable === \"function\"\n        ? ctx.unrepresentable({ zodSchema: schema, path: params.path, message })\n        : ctx.unrepresentable;\n    if (result === \"any\")\n        return false;\n    if (result === undefined || result === \"throw\")\n        throw new Error(message);\n    Object.assign(json, result);\n    return true;\n}\n// never rename this back to `process`: bundler polyfills inject a top-level `const process` that a lexical declaration of the same name collides with (#6397)\nexport function processSchema(schema, ctx, _params = { path: [], schemaPath: [] }) {\n    var _a;\n    const def = schema._zod.def;\n    // check for schema in seens\n    const seen = ctx.seen.get(schema);\n    if (seen) {\n        seen.count++;\n        // check if cycle\n        const isCycle = _params.schemaPath.includes(schema);\n        if (isCycle) {\n            seen.cycle = _params.path;\n        }\n        return seen.schema;\n    }\n    // initialize\n    const result = { schema: {}, count: 1, cycle: undefined, path: _params.path };\n    ctx.seen.set(schema, result);\n    ctx.sharedDefsExtractedFor = undefined;\n    ctx.sharedEmitDoneFor = undefined;\n    // custom method overrides default behavior\n    const overrideSchema = schema._zod.toJSONSchema?.();\n    if (overrideSchema) {\n        result.schema = overrideSchema;\n    }\n    else {\n        const params = {\n            ..._params,\n            schemaPath: [..._params.schemaPath, schema],\n            path: _params.path,\n        };\n        if (schema._zod.processJSONSchema) {\n            schema._zod.processJSONSchema(ctx, result.schema, params);\n        }\n        else {\n            const _json = result.schema;\n            const processor = ctx.processors[def.type];\n            if (!processor) {\n                throw new Error(`[toJSONSchema]: Non-representable type encountered: ${def.type}`);\n            }\n            processor(schema, ctx, _json, params);\n        }\n        const parent = schema._zod.parent;\n        if (parent) {\n            // Also set ref if processor didn't (for inheritance)\n            if (!result.ref)\n                result.ref = parent;\n            processSchema(parent, ctx, params);\n            ctx.seen.get(parent).isParent = true;\n        }\n    }\n    // metadata\n    const meta = ctx.metadataRegistry.get(schema);\n    if (meta)\n        assignProps(result.schema, meta);\n    if (ctx.io === \"input\" && isTransforming(schema)) {\n        // examples/defaults only apply to output type of pipe\n        delete result.schema.examples;\n        delete result.schema.default;\n    }\n    // set prefault as default\n    if (ctx.io === \"input\" && \"_prefault\" in result.schema)\n        (_a = result.schema).default ?? (_a.default = result.schema._prefault);\n    delete result.schema._prefault;\n    // pulling fresh from ctx.seen in case it was overwritten\n    const _result = ctx.seen.get(schema);\n    return _result.schema;\n}\n/** @deprecated Renamed to `processSchema`. An export alias declares no binding, so it is safe to keep. */\nexport { processSchema as process };\n// Escape a reference token for use in a JSON Pointer fragment (RFC 6901): `~` becomes `~0` and `/` becomes `~1`. The `~` replacement must run first.\nfunction encodeJSONPointerSegment(segment) {\n    return segment.replace(/~/g, \"~0\").replace(/\\//g, \"~1\");\n}\nexport function extractDefs(ctx, schema\n// params: EmitParams\n) {\n    // iterate over seen map;\n    const root = ctx.seen.get(schema);\n    if (!root)\n        throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n    // With `external` set, every registered schema resolves through the external branch of `makeURI`, so the root branch below produces the same ref the external branch would — this pass is identical whichever schema it is called with, and only needs to run once.\n    if (ctx.external && ctx.sharedDefsExtractedFor === ctx.external)\n        return;\n    // Track ids to detect duplicates across different schemas\n    const idToSchema = new Map();\n    for (const entry of ctx.seen.entries()) {\n        const id = ctx.metadataRegistry.get(entry[0])?.id;\n        if (id) {\n            const existing = idToSchema.get(id);\n            if (existing && existing !== entry[0]) {\n                throw new Error(`Duplicate schema id \"${id}\" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);\n            }\n            idToSchema.set(id, entry[0]);\n        }\n    }\n    // returns a ref to the schema defId will be empty if the ref points to an external schema (or #)\n    const makeURI = (entry) => {\n        // comparing the seen objects because sometimes multiple schemas map to the same seen object. e.g. lazy\n        // external is configured\n        const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n        if (ctx.external) {\n            const externalId = ctx.external.registry.get(entry[0])?.id; // ?? \"__shared\";// `__schema${ctx.counter++}`;\n            // check if schema is in the external registry\n            const uriGenerator = ctx.external.uri ?? ((id) => id);\n            if (externalId) {\n                return { ref: uriGenerator(externalId) };\n            }\n            // otherwise, add to __shared\n            const id = entry[1].defId ?? entry[1].schema.id ?? `schema${ctx.counter++}`;\n            entry[1].defId = id; // set defId so it will be reused if needed\n            return { defId: id, ref: `${uriGenerator(\"__shared\")}#/${defsSegment}/${encodeJSONPointerSegment(id)}` };\n        }\n        const uriPrefix = `#`;\n        const defUriPrefix = `${uriPrefix}/${defsSegment}/`;\n        // an id-less root has nowhere to be extracted to, so it stays inline and self-references as `#`\n        if (entry[1] === root && !entry[1].schema.id) {\n            return { ref: uriPrefix };\n        }\n        // self-contained schema\n        const defId = entry[1].schema.id ?? `__schema${ctx.counter++}`;\n        return { defId, ref: defUriPrefix + encodeJSONPointerSegment(defId) };\n    };\n    // stored cached version in `def` property remove all properties, set $ref\n    const extractToDef = (entry) => {\n        // if the schema is already a reference, do not extract it\n        if (entry[1].schema.$ref) {\n            return;\n        }\n        const seen = entry[1];\n        const { ref, defId } = makeURI(entry);\n        seen.def = { ...seen.schema };\n        // defId won't be set if the schema is a reference to an external schema or if the schema is the root schema\n        if (defId)\n            seen.defId = defId;\n        // wipe away all properties except $ref\n        const schema = seen.schema;\n        for (const key in schema) {\n            delete schema[key];\n        }\n        schema.$ref = ref;\n    };\n    // throw on cycles\n    // break cycles\n    if (ctx.cycles === \"throw\") {\n        for (const entry of ctx.seen.entries()) {\n            const seen = entry[1];\n            if (seen.cycle) {\n                throw new Error(\"Cycle detected: \" +\n                    `#/${seen.cycle?.join(\"/\")}/<root>` +\n                    '\\n\\nSet the `cycles` parameter to `\"ref\"` to resolve cyclical schemas with defs.');\n            }\n        }\n    }\n    // extract schemas into $defs\n    for (const entry of ctx.seen.entries()) {\n        const seen = entry[1];\n        // convert root schema to # $ref\n        if (schema === entry[0]) {\n            extractToDef(entry); // this has special handling for the root schema\n            continue;\n        }\n        // extract schemas that are in the external registry\n        if (ctx.external) {\n            const ext = ctx.external.registry.get(entry[0])?.id;\n            if (schema !== entry[0] && ext) {\n                extractToDef(entry);\n                continue;\n            }\n        }\n        // extract schemas with `id` meta\n        const id = ctx.metadataRegistry.get(entry[0])?.id;\n        if (id) {\n            extractToDef(entry);\n            continue;\n        }\n        // break cycles\n        if (seen.cycle) {\n            // any\n            extractToDef(entry);\n            continue;\n        }\n        // extract reused schemas\n        if (seen.count > 1) {\n            if (ctx.reused === \"ref\") {\n                extractToDef(entry);\n            }\n        }\n    }\n    if (ctx.external)\n        ctx.sharedDefsExtractedFor = ctx.external;\n}\n/** Rewrites `anyOf: [{type: \"a\"}, {type: \"b\"}]` to `type: [\"a\", \"b\"]`, which every JSON Schema draft treats as equivalent and most consumers render far better for the nullable case. Only branches that are a bare type assertion qualify — anything carrying a constraint, `$ref`, `const` or metadata is left alone. Runs after `flattenRef`, so a branch an override decorated or `$defs` extraction turned into a `$ref` is no longer bare and correctly stays in `anyOf`. `oneOf` is excluded: `integer` and `number` overlap, so \"exactly one\" and \"at least one\" are not the same there. OpenAPI 3.0 is excluded: its `type` must be a single string. */\nfunction compactTypeUnion(schema) {\n    const options = schema.anyOf;\n    if (!Array.isArray(options) || options.length === 0 || schema.type !== undefined)\n        return;\n    const types = [];\n    for (const option of options) {\n        if (!option || typeof option !== \"object\")\n            return;\n        // A branch that is itself a compactible union folds into this one — nested `anyOf` and a flat `type` array say the same thing. Compacting it first also makes the result independent of the order this pass walks the seen map in.\n        compactTypeUnion(option);\n        const keys = Object.keys(option);\n        if (keys.length !== 1 || keys[0] !== \"type\")\n            return;\n        const type = option.type;\n        for (const member of Array.isArray(type) ? type : [type]) {\n            if (typeof member !== \"string\")\n                return;\n            if (!types.includes(member))\n                types.push(member);\n        }\n    }\n    delete schema.anyOf;\n    // A `type` array must be non-empty and unique (metaschema); a single member is spelled as a bare string.\n    schema.type = types.length === 1 ? types[0] : types;\n}\n/** Keywords `foldIntersection` knows how to combine. Anything else — `$ref`, `patternProperties`,\n * an annotation like `description` — makes a member unfoldable, so a constraint this does not\n * understand leaves the `allOf` alone instead of being silently dropped or misattributed. */\nconst FOLDABLE_KEYS = new Set([\"type\", \"properties\", \"required\", \"additionalProperties\"]);\nconst UNION_KEYS = [\"oneOf\", \"anyOf\"];\n/** A member's constraint on a key it does not declare itself. A `catchall` states one; `false`, an absent `additionalProperties`, and the empty schema a loose object emits state nothing. */\nfunction undeclaredConstraint(member) {\n    const extra = member.additionalProperties;\n    if (extra === undefined || extra === false || typeof extra !== \"object\" || extra === null)\n        return null;\n    return Object.keys(extra).length ? extra : null;\n}\n/** Combines object members into the single object they describe together, or returns `null` if any of them carries a keyword outside {@link FOLDABLE_KEYS}. */\nfunction foldObjects(members) {\n    const objects = [];\n    for (const member of members) {\n        // A boolean subschema is legal JSON Schema and carries no keywords to fold.\n        if (typeof member !== \"object\" || member.type !== \"object\")\n            return null;\n        for (const key in member) {\n            if (!FOLDABLE_KEYS.has(key))\n                return null;\n        }\n        objects.push(member);\n    }\n    const properties = {};\n    const required = new Set();\n    for (const object of objects) {\n        for (const key in object.properties) {\n            // `in` would report a `__proto__` key as already present via the prototype chain and skip it.\n            if (Object.prototype.hasOwnProperty.call(properties, key))\n                continue;\n            // Every member constrains this key: the ones that declare it say how, and a `catchall` member constrains it too even though it does not name it. The key has to satisfy all of them, which is the same intersection one level down.\n            const parts = [];\n            for (const other of objects) {\n                const part = other.properties?.[key] ?? undeclaredConstraint(other);\n                if (part === null || part === undefined)\n                    continue;\n                if (!parts.some((seen) => JSON.stringify(seen) === JSON.stringify(part)))\n                    parts.push(part);\n            }\n            const merged = parts.length === 1\n                ? parts[0]\n                : (foldObjects(parts) ?? { allOf: parts });\n            assignProp(properties, key, merged);\n        }\n        for (const key of object.required ?? [])\n            required.add(key);\n    }\n    const folded = { type: \"object\", properties };\n    if (required.size)\n        folded.required = [...required];\n    // A key no member declares is rejected only when every member rejects it, so the fold is closed only when every member is. Otherwise it carries whatever the `catchall` members demand of such a key.\n    if (objects.every((object) => object.additionalProperties === false)) {\n        folded.additionalProperties = false;\n    }\n    else {\n        const constraints = [];\n        for (const object of objects) {\n            const constraint = undeclaredConstraint(object);\n            if (constraint && !constraints.some((seen) => JSON.stringify(seen) === JSON.stringify(constraint)))\n                constraints.push(constraint);\n        }\n        if (constraints.length === 1)\n            folded.additionalProperties = constraints[0];\n        else if (constraints.length > 1)\n            folded.additionalProperties = { allOf: constraints };\n    }\n    return folded;\n}\n/** `additionalProperties` in an `allOf` member sees only that member's own `properties`, so two\n * closed object members reject each other's keys and the schema validates nothing. Zod's parser\n * pools the key sets instead — `handleIntersectionResults` reports a key as unrecognized only when\n * *every* side rejects it — so the emitted schema has to pool them too, and folding the members\n * into one object is the encoding that says so on every target.\n *\n * This runs from `finalize`, after `extractDefs`, which is what keeps it clear of the `$ref`\n * machinery: a member extracted into `$defs` is already a `$ref` by now and declines to fold, so it\n * keeps its reference and its own closedness rather than being inlined as a stale copy. */\nfunction foldIntersection(json) {\n    const allOf = json.allOf;\n    if (!Array.isArray(allOf) || allOf.length < 2)\n        return;\n    // An `override` runs before this pass and may have written object keywords onto the intersection itself. Those are deliberate, so decline rather than overwrite them.\n    for (const key of FOLDABLE_KEYS)\n        if (key in json)\n            return;\n    // An intersection distributes over a union: `A & (X | Y)` is `(A & X) | (A & Y)`. Only the first union is distributed over; a second one stays among the members every branch folds against, where it fails the object check and declines the whole intersection rather than multiplying out.\n    const unions = allOf.filter((m) => UNION_KEYS.some((k) => Array.isArray(m[k])));\n    let folded = null;\n    if (!unions.length) {\n        folded = foldObjects(allOf);\n    }\n    else {\n        const union = unions[0];\n        const keyword = UNION_KEYS.find((k) => Array.isArray(union[k]));\n        if (Object.keys(union).length !== 1)\n            return;\n        const rest = allOf.filter((m) => m !== union);\n        const branches = union[keyword].map((branch) => foldObjects([...rest, branch]));\n        if (branches.some((b) => !b))\n            return;\n        folded = { [keyword]: branches };\n    }\n    if (!folded)\n        return;\n    delete json.allOf;\n    assignProps(json, folded);\n}\nexport function finalize(ctx, schema) {\n    const root = ctx.seen.get(schema);\n    if (!root)\n        throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n    // flatten refs - inherit properties from parent schemas\n    const flattenRef = (zodSchema) => {\n        const seen = ctx.seen.get(zodSchema);\n        // already processed\n        if (seen.ref === null)\n            return;\n        const schema = seen.def ?? seen.schema;\n        const _cached = { ...schema };\n        const ref = seen.ref;\n        seen.ref = null; // prevent infinite recursion\n        if (ref) {\n            flattenRef(ref);\n            const refSeen = ctx.seen.get(ref);\n            const refSchema = refSeen.schema;\n            // merge referenced schema into current\n            if (refSchema.$ref && (ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\")) {\n                // older drafts can't combine $ref with other properties\n                schema.allOf = schema.allOf ?? [];\n                schema.allOf.push(refSchema);\n            }\n            else {\n                assignProps(schema, refSchema);\n            }\n            // restore child's own properties (child wins)\n            assignProps(schema, _cached);\n            const isParentRef = zodSchema._zod.parent === ref;\n            // For parent chain, child is a refinement - remove parent-only properties\n            if (isParentRef) {\n                for (const key in schema) {\n                    if (key === \"$ref\" || key === \"allOf\")\n                        continue;\n                    if (!(key in _cached)) {\n                        delete schema[key];\n                    }\n                }\n            }\n            // When ref was extracted to $defs, remove properties that match the definition\n            if (refSchema.$ref && refSeen.def) {\n                for (const key in schema) {\n                    if (key === \"$ref\" || key === \"allOf\")\n                        continue;\n                    if (key in refSeen.def && JSON.stringify(schema[key]) === JSON.stringify(refSeen.def[key])) {\n                        delete schema[key];\n                    }\n                }\n            }\n        }\n        // If parent was extracted (has $ref), propagate $ref to this schema. This handles cases like: readonly().meta({id}).describe() where processor sets ref to innerType but parent should be referenced\n        const parent = zodSchema._zod.parent;\n        if (parent && parent !== ref) {\n            // Ensure parent is processed first so its def has inherited properties\n            flattenRef(parent);\n            const parentSeen = ctx.seen.get(parent);\n            if (parentSeen?.schema.$ref) {\n                schema.$ref = parentSeen.schema.$ref;\n                // De-duplicate with parent's definition\n                if (parentSeen.def) {\n                    for (const key in schema) {\n                        if (key === \"$ref\" || key === \"allOf\")\n                            continue;\n                        if (key in parentSeen.def && JSON.stringify(schema[key]) === JSON.stringify(parentSeen.def[key])) {\n                            delete schema[key];\n                        }\n                    }\n                }\n            }\n        }\n        // execute overrides\n        ctx.override({\n            zodSchema: zodSchema,\n            jsonSchema: schema,\n            path: seen.path ?? [],\n        });\n    };\n    // Flattening walks the whole map and clears each `ref` as it goes, so a second call over the same map is a no-op scan. Skip it outright once it has run for a registry conversion.\n    if (!ctx.external || ctx.sharedEmitDoneFor !== ctx.external) {\n        for (const entry of [...ctx.seen.entries()].reverse()) {\n            flattenRef(entry[0]);\n        }\n        if (ctx.target !== \"openapi-3.0\") {\n            for (const entry of ctx.seen.entries()) {\n                compactTypeUnion(entry[1].def ?? entry[1].schema);\n            }\n        }\n        for (const rewrite of ctx.deferred)\n            rewrite();\n        // After flattening, every member that was extracted is a `$ref`, so the fold sees the final shape. A schema that inherits an intersection — through `z.lazy`, or any `ref` chain — holds the same `allOf` array, so fold by array identity to catch every copy.\n        if (ctx.intersections.length) {\n            const carriers = new Map();\n            for (const seen of ctx.seen.values()) {\n                for (const json of [seen.schema, seen.def]) {\n                    const allOf = json?.allOf;\n                    if (!Array.isArray(allOf))\n                        continue;\n                    const existing = carriers.get(allOf);\n                    if (existing)\n                        existing.push(json);\n                    else\n                        carriers.set(allOf, [json]);\n                }\n            }\n            for (const allOf of ctx.intersections) {\n                for (const json of carriers.get(allOf) ?? [])\n                    foldIntersection(json);\n            }\n        }\n    }\n    const result = {};\n    if (ctx.target === \"draft-2020-12\") {\n        result.$schema = \"https://json-schema.org/draft/2020-12/schema\";\n    }\n    else if (ctx.target === \"draft-07\") {\n        result.$schema = \"http://json-schema.org/draft-07/schema#\";\n    }\n    else if (ctx.target === \"draft-04\") {\n        result.$schema = \"http://json-schema.org/draft-04/schema#\";\n    }\n    else if (ctx.target === \"openapi-3.0\") {\n        // OpenAPI 3.0 schema objects should not include a $schema property\n    }\n    else {\n        // Arbitrary string values are allowed but won't have a $schema property set\n    }\n    if (ctx.external?.uri) {\n        const id = ctx.external.registry.get(schema)?.id;\n        if (!id)\n            throw new Error(\"Schema is missing an `id` property\");\n        result.$id = ctx.external.uri(id);\n    }\n    // when the root was extracted into $defs, `root.schema` is the `$ref` wrapper and `root.def` is the body that now lives under $defs\n    assignProps(result, root.defId ? root.schema : (root.def ?? root.schema));\n    // The `id` in `.meta()` is a Zod-specific registration tag used to extract schemas into $defs — it is not user-facing JSON Schema metadata. Strip it from the output body where it would otherwise leak. The id is preserved implicitly via the $defs key (and via $ref paths).\n    const rootMetaId = ctx.metadataRegistry.get(schema)?.id;\n    if (rootMetaId !== undefined && result.id === rootMetaId)\n        delete result.id;\n    // build defs object. With `external`, `defs` is the shared object every schema writes into, so the same entries are reassigned on every call. Without it, `defs` is fresh per call and must be rebuilt.\n    const defs = ctx.external?.defs ?? {};\n    if (!ctx.external || ctx.sharedEmitDoneFor !== ctx.external) {\n        for (const entry of ctx.seen.entries()) {\n            const seen = entry[1];\n            if (seen.def && seen.defId) {\n                if (seen.def.id === seen.defId)\n                    delete seen.def.id;\n                assignProp(defs, seen.defId, seen.def);\n            }\n        }\n    }\n    if (ctx.external)\n        ctx.sharedEmitDoneFor = ctx.external;\n    // set definitions in result\n    if (ctx.external) {\n    }\n    else {\n        if (Object.keys(defs).length > 0) {\n            if (ctx.target === \"draft-2020-12\") {\n                result.$defs = defs;\n            }\n            else {\n                result.definitions = defs;\n            }\n        }\n    }\n    try {\n        // this \"finalizes\" this schema and ensures all cycles are removed each call to finalize() is functionally independent though the seen map is shared\n        const finalized = JSON.parse(JSON.stringify(result));\n        Object.defineProperty(finalized, \"~standard\", {\n            value: {\n                ...schema[\"~standard\"],\n                jsonSchema: {\n                    input: createStandardJSONSchemaMethod(schema, \"input\", ctx.processors),\n                    output: createStandardJSONSchemaMethod(schema, \"output\", ctx.processors),\n                },\n            },\n            enumerable: false,\n            writable: false,\n        });\n        return finalized;\n    }\n    catch (_err) {\n        throw new Error(\"Error converting schema to JSON.\");\n    }\n}\nfunction isTransforming(_schema, _ctx) {\n    const ctx = _ctx ?? { seen: new Set() };\n    if (ctx.seen.has(_schema))\n        return false;\n    ctx.seen.add(_schema);\n    const def = _schema._zod.def;\n    if (def.type === \"transform\")\n        return true;\n    if (def.type === \"array\")\n        return isTransforming(def.element, ctx);\n    if (def.type === \"set\")\n        return isTransforming(def.valueType, ctx);\n    if (def.type === \"lazy\")\n        return isTransforming(def.getter(), ctx);\n    if (def.type === \"promise\" ||\n        def.type === \"optional\" ||\n        def.type === \"nonoptional\" ||\n        def.type === \"nullable\" ||\n        def.type === \"readonly\" ||\n        def.type === \"default\" ||\n        def.type === \"prefault\" ||\n        def.type === \"catch\") {\n        return isTransforming(def.innerType, ctx);\n    }\n    if (def.type === \"intersection\") {\n        return isTransforming(def.left, ctx) || isTransforming(def.right, ctx);\n    }\n    if (def.type === \"record\" || def.type === \"map\") {\n        return isTransforming(def.keyType, ctx) || isTransforming(def.valueType, ctx);\n    }\n    if (def.type === \"pipe\") {\n        if (_schema._zod.traits.has(\"$ZodCodec\"))\n            return true;\n        return isTransforming(def.in, ctx) || isTransforming(def.out, ctx);\n    }\n    if (def.type === \"object\") {\n        for (const key in def.shape) {\n            if (isTransforming(def.shape[key], ctx))\n                return true;\n        }\n        return false;\n    }\n    if (def.type === \"union\") {\n        for (const option of def.options) {\n            if (isTransforming(option, ctx))\n                return true;\n        }\n        return false;\n    }\n    if (def.type === \"tuple\") {\n        for (const item of def.items) {\n            if (isTransforming(item, ctx))\n                return true;\n        }\n        if (def.rest && isTransforming(def.rest, ctx))\n            return true;\n        return false;\n    }\n    return false;\n}\n/**\n * Creates a toJSONSchema method for a schema instance.\n * This encapsulates the logic of initializing context, processing, extracting defs, and finalizing.\n */\nexport const createToJSONSchemaMethod = (schema, processors = {}) => (params) => {\n    const ctx = initializeContext({ ...params, processors });\n    processSchema(schema, ctx);\n    extractDefs(ctx, schema);\n    return finalize(ctx, schema);\n};\nexport const createStandardJSONSchemaMethod = (schema, io, processors = {}) => (params) => {\n    const { libraryOptions, target } = params ?? {};\n    const ctx = initializeContext({ ...(libraryOptions ?? {}), target, io, processors });\n    processSchema(schema, ctx);\n    extractDefs(ctx, schema);\n    return finalize(ctx, schema);\n};\n","import * as regexes from \"./regexes.js\";\nimport { base64Charset, base64urlCharset } from \"./schemas.js\";\nimport { extractDefs, finalize, handleUnrepresentable, initializeContext, processSchema, } from \"./to-json-schema.js\";\nimport { BIGINT_FORMAT_RANGES, NUMBER_FORMAT_RANGES, assignProp, getEnumValues } from \"./util.js\";\nconst narrowMin = (agg, key, value) => {\n    if (agg[key] === undefined || value > agg[key])\n        agg[key] = value;\n};\nconst narrowMax = (agg, key, value) => {\n    if (agg[key] === undefined || value < agg[key])\n        agg[key] = value;\n};\nconst narrowBoth = (agg, value) => {\n    narrowMin(agg, \"minimum\", value);\n    narrowMax(agg, \"maximum\", value);\n};\nconst addDivisor = (agg, value) => {\n    agg.multipleOf ?? (agg.multipleOf = []);\n    if (!agg.multipleOf.includes(value))\n        agg.multipleOf.push(value);\n};\nconst addPattern = (agg, pattern) => {\n    agg.patterns ?? (agg.patterns = new Set());\n    agg.patterns.add(pattern);\n};\nconst intersectMime = (agg, mime) => {\n    agg.mime = agg.mime ? agg.mime.filter((m) => mime.includes(m)) : [...mime];\n};\n// last-wins, matching the bag's historical write order; the flag keeps an integer format from being lost to a later float one\nconst setFormat = (agg, format) => {\n    agg.format = format;\n    if (format.includes(\"int\"))\n        agg.isInt = true;\n};\nconst minContributor = (agg, def) => narrowMin(agg, \"minimum\", def.minimum);\nconst maxContributor = (agg, def) => narrowMax(agg, \"maximum\", def.maximum);\nconst formatContributor = (ranges) => (agg, def) => {\n    setFormat(agg, def.format);\n    const [minimum, maximum] = ranges[def.format];\n    narrowMin(agg, \"minimum\", minimum);\n    narrowMax(agg, \"maximum\", maximum);\n};\nconst contributors = {\n    greater_than: (agg, def) => narrowMin(agg, def.inclusive ? \"minimum\" : \"exclusiveMinimum\", def.value),\n    less_than: (agg, def) => narrowMax(agg, def.inclusive ? \"maximum\" : \"exclusiveMaximum\", def.value),\n    multiple_of: (agg, def) => addDivisor(agg, def.value),\n    number_format: formatContributor(NUMBER_FORMAT_RANGES),\n    bigint_format: formatContributor(BIGINT_FORMAT_RANGES),\n    min_length: minContributor,\n    max_length: maxContributor,\n    length_equals: (agg, def) => narrowBoth(agg, def.length),\n    min_size: minContributor,\n    max_size: maxContributor,\n    size_equals: (agg, def) => narrowBoth(agg, def.size),\n    string_format: (agg, def) => {\n        setFormat(agg, def.format);\n        if (def.pattern)\n            addPattern(agg, def.pattern);\n        if (def.format === \"base64\" || def.format === \"base64url\")\n            agg.contentEncoding = def.format;\n        if (def.local || def.precision === -1)\n            agg.laxFormat = true;\n    },\n    mime_type: (agg, def) => intersectMime(agg, def.mime),\n};\nexport function aggregateChecks(schema) {\n    const agg = {};\n    const def = schema._zod.def;\n    // a format schema is its own first check, same rule as $ZodType init\n    const list = schema._zod.traits.has(\"$ZodCheck\")\n        ? [schema, ...(def.checks ?? [])]\n        : (def.checks ?? []);\n    for (const ch of list)\n        contributors[ch._zod.def.check]?.(agg, ch._zod.def);\n    // reconcile with the bag so third-party onattach contributions still land; first-party residue is never tighter than the fold, so merging it back is idempotent for one and additive for the other\n    const bag = schema._zod.bag;\n    if (bag.minimum !== undefined)\n        narrowMin(agg, \"minimum\", bag.minimum);\n    if (bag.exclusiveMinimum !== undefined)\n        narrowMin(agg, \"exclusiveMinimum\", bag.exclusiveMinimum);\n    if (bag.maximum !== undefined)\n        narrowMax(agg, \"maximum\", bag.maximum);\n    if (bag.exclusiveMaximum !== undefined)\n        narrowMax(agg, \"exclusiveMaximum\", bag.exclusiveMaximum);\n    if (bag.multipleOf !== undefined)\n        addDivisor(agg, bag.multipleOf);\n    if (bag.format !== undefined) {\n        agg.format ?? (agg.format = bag.format);\n        if (bag.format.includes(\"int\"))\n            agg.isInt = true;\n    }\n    if (bag.mime)\n        intersectMime(agg, bag.mime);\n    for (const pattern of bag.patterns ?? [])\n        addPattern(agg, pattern);\n    return agg;\n}\nconst formatMap = {\n    guid: \"uuid\",\n    url: \"uri\",\n    datetime: \"date-time\",\n    json_string: \"json-string\",\n    regex: \"\", // do not set\n};\n// ==================== SIMPLE TYPE PROCESSORS ====================\n// the runtime patterns are lax so parse paths never overflow the regex stack; the emitted schema swaps in the exact block forms, which zod itself never executes\nconst exactPatterns = new Map([\n    [base64Charset, regexes.base64],\n    [base64urlCharset, regexes.base64url],\n]);\nconst exactPattern = (p) => exactPatterns.get(p) ?? p;\nexport const stringProcessor = (schema, ctx, _json, _params) => {\n    const json = _json;\n    json.type = \"string\";\n    const { minimum, maximum, format, patterns, contentEncoding, laxFormat } = aggregateChecks(schema);\n    if (typeof minimum === \"number\")\n        json.minLength = minimum;\n    if (typeof maximum === \"number\")\n        json.maxLength = maximum;\n    // custom pattern overrides format\n    if (format) {\n        json.format = formatMap[format] ?? format;\n        if (json.format === \"\")\n            delete json.format; // empty format is not valid\n        // `z.iso.time()` is never full-time, and `laxFormat` carries the datetime shapes that also accept what their keyword forbids\n        if (format === \"time\" || laxFormat) {\n            delete json.format;\n        }\n    }\n    if (contentEncoding)\n        json.contentEncoding = contentEncoding;\n    if (patterns && patterns.size > 0) {\n        const patternList = [...patterns].map(exactPattern);\n        if (patternList.length === 1)\n            json.pattern = patternList[0].source;\n        else if (patternList.length > 1) {\n            json.allOf = [\n                ...patternList.map((regex) => ({\n                    ...(ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\"\n                        ? { type: \"string\" }\n                        : {}),\n                    pattern: regex.source,\n                })),\n            ];\n        }\n    }\n};\nexport const numberProcessor = (schema, ctx, _json, params) => {\n    const json = _json;\n    const { minimum, maximum, multipleOf, exclusiveMaximum, exclusiveMinimum, isInt } = aggregateChecks(schema);\n    json.type = isInt ? \"integer\" : \"number\";\n    // when both minimum and exclusiveMinimum exist, pick the more restrictive one\n    const exMin = typeof exclusiveMinimum === \"number\" && exclusiveMinimum >= (minimum ?? Number.NEGATIVE_INFINITY);\n    const exMax = typeof exclusiveMaximum === \"number\" && exclusiveMaximum <= (maximum ?? Number.POSITIVE_INFINITY);\n    const legacy = ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\";\n    if (exMin) {\n        if (legacy) {\n            json.minimum = exclusiveMinimum;\n            json.exclusiveMinimum = true;\n        }\n        else {\n            json.exclusiveMinimum = exclusiveMinimum;\n        }\n    }\n    else if (typeof minimum === \"number\") {\n        json.minimum = minimum;\n    }\n    if (exMax) {\n        if (legacy) {\n            json.maximum = exclusiveMaximum;\n            json.exclusiveMaximum = true;\n        }\n        else {\n            json.exclusiveMaximum = exclusiveMaximum;\n        }\n    }\n    else if (typeof maximum === \"number\") {\n        json.maximum = maximum;\n    }\n    if (multipleOf) {\n        // JSON Schema requires a divisor strictly greater than zero, and a non-finite one does not survive JSON at all. A negative divisor accepts exactly what its absolute value accepts, so it still maps; zero, NaN and Infinity have no keyword form.\n        const divisors = new Set();\n        for (const divisor of multipleOf) {\n            if (Number.isFinite(divisor) && divisor !== 0)\n                divisors.add(Math.abs(divisor));\n            else\n                handleUnrepresentable(schema, ctx, json, params, `A multipleOf divisor of ${divisor} cannot be represented in JSON Schema`);\n        }\n        // chained divisors are a conjunction the keyword cannot carry alone, so extras ride an allOf, same as stacked patterns\n        const [first, ...rest] = divisors;\n        if (first !== undefined)\n            json.multipleOf = first;\n        if (rest.length)\n            json.allOf = [...(json.allOf ?? []), ...rest.map((m) => ({ multipleOf: m }))];\n    }\n};\nexport const booleanProcessor = (_schema, _ctx, json, _params) => {\n    json.type = \"boolean\";\n};\nexport const bigintProcessor = (schema, ctx, json, params) => {\n    handleUnrepresentable(schema, ctx, json, params, \"BigInt cannot be represented in JSON Schema\");\n};\nexport const symbolProcessor = (schema, ctx, json, params) => {\n    handleUnrepresentable(schema, ctx, json, params, \"Symbols cannot be represented in JSON Schema\");\n};\nexport const nullProcessor = (_schema, ctx, json, _params) => {\n    if (ctx.target === \"openapi-3.0\") {\n        json.type = \"string\";\n        json.nullable = true;\n        json.enum = [null];\n    }\n    else {\n        json.type = \"null\";\n    }\n};\nexport const undefinedProcessor = (schema, ctx, json, params) => {\n    handleUnrepresentable(schema, ctx, json, params, \"Undefined cannot be represented in JSON Schema\");\n};\nexport const voidProcessor = (schema, ctx, json, params) => {\n    handleUnrepresentable(schema, ctx, json, params, \"Void cannot be represented in JSON Schema\");\n};\nexport const neverProcessor = (_schema, _ctx, json, _params) => {\n    json.not = {};\n};\nexport const anyProcessor = (_schema, _ctx, _json, _params) => {\n    // empty schema accepts anything\n};\nexport const unknownProcessor = (_schema, _ctx, _json, _params) => {\n    // empty schema accepts anything\n};\nexport const dateProcessor = (schema, ctx, json, params) => {\n    handleUnrepresentable(schema, ctx, json, params, \"Date cannot be represented in JSON Schema\");\n};\nexport const enumProcessor = (schema, _ctx, json, _params) => {\n    const def = schema._zod.def;\n    const values = getEnumValues(def.entries);\n    // an empty enum accepts nothing, same as z.never()\n    if (values.length === 0) {\n        json.not = {};\n        return;\n    }\n    // Number enums can have both string and number values\n    if (values.every((v) => typeof v === \"number\"))\n        json.type = \"number\";\n    if (values.every((v) => typeof v === \"string\"))\n        json.type = \"string\";\n    json.enum = values;\n};\nexport const literalProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    // a literal with no values accepts nothing, same as z.never()\n    if (def.values.length === 0) {\n        json.not = {};\n        return;\n    }\n    const vals = [];\n    for (const val of def.values) {\n        if (val === undefined) {\n            // a custom schema replaces the whole literal, so there is nothing left to accumulate\n            if (handleUnrepresentable(schema, ctx, json, params, \"Literal `undefined` cannot be represented in JSON Schema\"))\n                return;\n            // otherwise do not add to vals\n        }\n        else if (typeof val === \"bigint\") {\n            if (handleUnrepresentable(schema, ctx, json, params, \"BigInt literals cannot be represented in JSON Schema\"))\n                return;\n            vals.push(Number(val));\n        }\n        else {\n            vals.push(val);\n        }\n    }\n    if (vals.length === 0) {\n        // do nothing (an undefined literal was stripped)\n    }\n    else if (vals.length === 1) {\n        const val = vals[0];\n        json.type = val === null ? \"null\" : typeof val;\n        if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n            json.enum = [val];\n        }\n        else {\n            json.const = val;\n        }\n    }\n    else {\n        if (vals.every((v) => typeof v === \"number\"))\n            json.type = \"number\";\n        if (vals.every((v) => typeof v === \"string\"))\n            json.type = \"string\";\n        if (vals.every((v) => typeof v === \"boolean\"))\n            json.type = \"boolean\";\n        if (vals.every((v) => v === null))\n            json.type = \"null\";\n        json.enum = vals;\n    }\n};\nexport const nanProcessor = (schema, ctx, json, params) => {\n    handleUnrepresentable(schema, ctx, json, params, \"NaN cannot be represented in JSON Schema\");\n};\nexport const templateLiteralProcessor = (schema, _ctx, json, _params) => {\n    const _json = json;\n    const pattern = schema._zod.pattern;\n    if (!pattern)\n        throw new Error(\"Pattern not found in template literal\");\n    _json.type = \"string\";\n    _json.pattern = pattern.source;\n};\nexport const fileProcessor = (schema, _ctx, json, _params) => {\n    const _json = json;\n    _json.type = \"string\";\n    _json.format = \"binary\";\n    _json.contentEncoding = \"binary\";\n    const { minimum, maximum, mime } = aggregateChecks(schema);\n    if (minimum !== undefined)\n        _json.minLength = minimum;\n    if (maximum !== undefined)\n        _json.maxLength = maximum;\n    if (!mime)\n        return;\n    // an empty intersection means the mime checks share no value, so nothing passes at runtime; `anyOf` must be non-empty, so the false schema is `not: {}`\n    if (mime.length === 0)\n        _json.not = {};\n    else if (mime.length === 1)\n        _json.contentMediaType = mime[0];\n    // only contentMediaType differs, so the shared props stay at the root\n    else\n        _json.anyOf = mime.map((m) => ({ contentMediaType: m }));\n};\nexport const successProcessor = (_schema, _ctx, json, _params) => {\n    json.type = \"boolean\";\n};\nexport const customProcessor = (schema, ctx, json, params) => {\n    handleUnrepresentable(schema, ctx, json, params, \"Custom types cannot be represented in JSON Schema\");\n};\nexport const functionProcessor = (schema, ctx, json, params) => {\n    handleUnrepresentable(schema, ctx, json, params, \"Function types cannot be represented in JSON Schema\");\n};\nexport const transformProcessor = (schema, ctx, json, params) => {\n    handleUnrepresentable(schema, ctx, json, params, \"Transforms cannot be represented in JSON Schema\");\n};\nexport const mapProcessor = (schema, ctx, json, params) => {\n    handleUnrepresentable(schema, ctx, json, params, \"Map cannot be represented in JSON Schema\");\n};\nexport const setProcessor = (schema, ctx, json, params) => {\n    handleUnrepresentable(schema, ctx, json, params, \"Set cannot be represented in JSON Schema\");\n};\n// ==================== COMPOSITE TYPE PROCESSORS ====================\nexport const arrayProcessor = (schema, ctx, _json, params) => {\n    const json = _json;\n    const def = schema._zod.def;\n    const { minimum, maximum } = aggregateChecks(schema);\n    if (typeof minimum === \"number\")\n        json.minItems = minimum;\n    if (typeof maximum === \"number\")\n        json.maxItems = maximum;\n    json.type = \"array\";\n    json.items = processSchema(def.element, ctx, {\n        ...params,\n        path: [...params.path, \"items\"],\n    });\n};\n// Transform and catch set `optin = \"optional\"` at runtime so the parser lets them observe an\n// absent key, but their declared input type stays required. An input JSON Schema describes the\n// declared type, so resolve past them to the schema that actually carries the optionality.\n// Used by both `objectProcessor` (for `required`) and `tupleProcessor` (for `minItems`); see\n// wiki/optionality.md, \"The JSON Schema emitter reads the *static* value\".\nfunction inputOptin(schema) {\n    const def = schema._zod.def;\n    if (def.type === \"pipe\" && def.in._zod.traits.has(\"$ZodTransform\")) {\n        return inputOptin(def.out);\n    }\n    if (def.type === \"catch\") {\n        return inputOptin(def.innerType);\n    }\n    return schema._zod.optin;\n}\nexport const objectProcessor = (schema, ctx, _json, params) => {\n    const json = _json;\n    const def = schema._zod.def;\n    const shape = def.shape;\n    // dropping it while still emitting `additionalProperties: false` would emit a schema that rejects data this one requires\n    const symbolKeys = Object.getOwnPropertySymbols(shape);\n    if (symbolKeys.length &&\n        handleUnrepresentable(schema, ctx, json, params, \"Symbol keys cannot be represented in JSON Schema\")) {\n        return;\n    }\n    json.type = \"object\";\n    json.properties = {};\n    for (const key in shape) {\n        // assignProp so a __proto__ key becomes an own property instead of hitting the inherited setter on the plain {} we build into\n        assignProp(json.properties, key, processSchema(shape[key], ctx, {\n            ...params,\n            path: [...params.path, \"properties\", key],\n        }));\n    }\n    // required keys\n    const requiredKeys = [];\n    for (const key of Object.keys(shape)) {\n        const field = def.shape[key];\n        if (ctx.io === \"input\" ? inputOptin(field) === undefined : field._zod.optout === undefined) {\n            requiredKeys.push(key);\n        }\n    }\n    if (requiredKeys.length > 0) {\n        json.required = requiredKeys;\n    }\n    // catchall\n    if (def.catchall?._zod.def.type === \"never\") {\n        // strict\n        json.additionalProperties = false;\n    }\n    else if (!def.catchall) {\n        // regular\n        if (ctx.io === \"output\")\n            json.additionalProperties = false;\n    }\n    else if (def.catchall) {\n        json.additionalProperties = processSchema(def.catchall, ctx, {\n            ...params,\n            path: [...params.path, \"additionalProperties\"],\n        });\n    }\n};\nexport const unionProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    // Exclusive unions (inclusive === false) use oneOf (exactly one match) instead of anyOf (one or more matches). This includes both z.xor() and discriminated unions\n    const isExclusive = def.inclusive === false;\n    const options = def.options.map((x, i) => processSchema(x, ctx, {\n        ...params,\n        path: [...params.path, isExclusive ? \"oneOf\" : \"anyOf\", i],\n    }));\n    if (isExclusive) {\n        json.oneOf = options;\n    }\n    else {\n        json.anyOf = options;\n    }\n};\nexport const intersectionProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    const a = processSchema(def.left, ctx, {\n        ...params,\n        path: [...params.path, \"allOf\", 0],\n    });\n    const b = processSchema(def.right, ctx, {\n        ...params,\n        path: [...params.path, \"allOf\", 1],\n    });\n    const isSimpleIntersection = (val) => \"allOf\" in val && Object.keys(val).length === 1;\n    const allOf = [\n        ...(isSimpleIntersection(a) ? a.allOf : [a]),\n        ...(isSimpleIntersection(b) ? b.allOf : [b]),\n    ];\n    json.allOf = allOf;\n    // Recorded innermost first, so a nested intersection has already folded by the time this one is considered. The array is the handle rather than the schema, because a wrapper that inherits this schema shares the same array; `finalize` folds every object holding it. See `foldIntersection`.\n    ctx.intersections.push(allOf);\n};\nexport const tupleProcessor = (schema, ctx, _json, params) => {\n    const json = _json;\n    const def = schema._zod.def;\n    json.type = \"array\";\n    const prefixPath = ctx.target === \"draft-2020-12\" ? \"prefixItems\" : \"items\";\n    const restPath = ctx.target === \"draft-2020-12\" ? \"items\" : ctx.target === \"openapi-3.0\" ? \"items\" : \"additionalItems\";\n    const prefixItems = def.items.map((x, i) => processSchema(x, ctx, {\n        ...params,\n        path: [...params.path, prefixPath, i],\n    }));\n    const rest = def.rest\n        ? processSchema(def.rest, ctx, {\n            ...params,\n            path: [...params.path, restPath, ...(ctx.target === \"openapi-3.0\" ? [def.items.length] : [])],\n        })\n        : null;\n    let minItems = def.items.length;\n    while (minItems > 0) {\n        const item = def.items[minItems - 1];\n        const optional = ctx.io === \"input\" ? inputOptin(item) !== undefined : item._zod.optout === \"optional\";\n        if (!optional)\n            break;\n        minItems--;\n    }\n    const maxItems = def.items.length;\n    const isClosed = !def.rest;\n    if (ctx.target === \"draft-2020-12\") {\n        json.prefixItems = prefixItems;\n        if (isClosed) {\n            json.items = false;\n        }\n        else if (rest) {\n            json.items = rest;\n        }\n        if (minItems > 0)\n            json.minItems = minItems;\n        if (isClosed)\n            json.maxItems = maxItems;\n    }\n    else if (ctx.target === \"openapi-3.0\") {\n        json.items = {\n            anyOf: prefixItems,\n        };\n        if (rest) {\n            json.items.anyOf.push(rest);\n        }\n        if (minItems > 0)\n            json.minItems = minItems;\n        if (isClosed)\n            json.maxItems = maxItems;\n    }\n    else {\n        json.items = prefixItems;\n        if (isClosed) {\n            json.additionalItems = false;\n        }\n        else if (rest) {\n            json.additionalItems = rest;\n        }\n        if (minItems > 0)\n            json.minItems = minItems;\n        if (isClosed)\n            json.maxItems = maxItems;\n    }\n    // explicit user-defined length checks take precedence\n    const { minimum, maximum } = aggregateChecks(schema);\n    if (typeof minimum === \"number\")\n        json.minItems = minimum;\n    if (typeof maximum === \"number\")\n        json.maxItems = maximum;\n};\n/** JSON object keys are always strings, so a numeric record key schema is re-expressed over the\n * numeric-string form the record parser matches. Deferred to `finalize`, after the flatten: a key\n * behind a wrapper only carries its own `type` before then, and a union key only has its branches.\n *\n * A numeric bound cannot apply to a property name, so `minimum` and its siblings are dropped rather\n * than carried over: keeping them beside `type: \"string\"` reproduces the match-nothing schema this\n * exists to fix. A key that carries one therefore emits wider than the record parses — `z.record(z.number().min(5), V)`\n * accepts `\"3\"` — which is the deliberate trade, since throwing on it would reject an ordinary schema\n * outright. */\nfunction stringifyKeyNames(bySchema, json, visited) {\n    // an extracted key that rewrites cannot go on sharing its definition — the string form a key position needs is not the number form every other reference wants — so it inlines. One that does not rewrite keeps the `$ref`.\n    if (json.$ref) {\n        // a recursive key holds its own reference inside its definition, so a node already on the path is left alone rather than resolved again\n        if (visited.has(json))\n            return json;\n        visited.add(json);\n        const def = bySchema.get(json)?.def;\n        if (!def)\n            return json;\n        const inlined = stringifyKeyNames(bySchema, def, visited);\n        return inlined === def ? json : inlined;\n    }\n    for (const keyword of [\"anyOf\", \"oneOf\"]) {\n        const branches = json[keyword];\n        if (!Array.isArray(branches))\n            continue;\n        const mapped = branches.map((branch) => stringifyKeyNames(bySchema, branch, visited));\n        // rebuilding regardless would detach a key that had nothing to re-express, dropping its `$ref` and leaking the internal `id`\n        if (mapped.some((branch, i) => branch !== branches[i]))\n            json = { ...json, [keyword]: mapped };\n    }\n    // a member that already admits a string leaves the key unconstrained, so the node's own type re-expresses only when every member is numeric\n    const types = Array.isArray(json.type) ? json.type : [json.type];\n    const numericType = !types.includes(\"string\") && types.some((t) => t === \"number\" || t === \"integer\");\n    // a heterogeneous key carries no type at all, so its numeric members are caught here instead\n    const values = json.enum ?? (json.const !== undefined ? [json.const] : undefined);\n    if (!numericType && !values?.some((v) => typeof v === \"number\"))\n        return json;\n    const { minimum, maximum, exclusiveMinimum, exclusiveMaximum, multipleOf, format, id, ...rest } = json;\n    if (rest.enum)\n        rest.enum = rest.enum.map((v) => (typeof v === \"number\" ? String(v) : v));\n    else if (typeof rest.const === \"number\")\n        rest.const = String(rest.const);\n    // a heterogeneous key keeps its absent type: the stringified members already say what a key may be\n    if (!numericType)\n        return rest;\n    rest.type = \"string\";\n    if (!values)\n        rest.pattern = (types.includes(\"number\") ? regexes.number : regexes.integer).source;\n    return rest;\n}\n/** Every record of one conversion, so the carriers are found in a single pass rather than once per record. */\nconst pendingRecords = new WeakMap();\nfunction rewriteKeyNames(ctx) {\n    // an extracted key is resolved by the object `extractToDef` left in its place, so the map is built once rather than searched per reference. `_zod.toJSONSchema` can hand the same object to two schemas, so the first entry carrying a body wins, as a search would have found it.\n    const bySchema = new Map();\n    for (const entry of ctx.seen.values()) {\n        if (entry.def && !bySchema.has(entry.schema))\n            bySchema.set(entry.schema, entry);\n    }\n    const rewrites = new Map();\n    for (const record of pendingRecords.get(ctx) ?? []) {\n        const seen = ctx.seen.get(record);\n        const names = (seen?.def ?? seen?.schema)?.propertyNames;\n        if (!names || names === true || rewrites.has(names))\n            continue;\n        const rewritten = stringifyKeyNames(bySchema, names, new Set());\n        if (rewritten !== names)\n            rewrites.set(names, rewritten);\n    }\n    if (!rewrites.size)\n        return;\n    // the flatten has already copied each record's own properties onto every wrapper by reference, and an extracted body is another such copy, so every carrier holding a rewritten key is updated together\n    for (const entry of ctx.seen.values()) {\n        for (const carrier of [entry.schema, entry.def]) {\n            const rewritten = carrier && rewrites.get(carrier.propertyNames);\n            if (rewritten)\n                carrier.propertyNames = rewritten;\n        }\n    }\n}\nexport const recordProcessor = (schema, ctx, _json, params) => {\n    const json = _json;\n    const def = schema._zod.def;\n    json.type = \"object\";\n    // For looseRecord with regex patterns, use patternProperties. This correctly represents \"only validate keys matching the pattern\" semantics and composes well with allOf (intersections)\n    const keyType = def.keyType;\n    const patterns = aggregateChecks(keyType).patterns;\n    if (def.mode === \"loose\" && patterns && patterns.size > 0) {\n        // Use patternProperties for looseRecord with regex patterns\n        const valueSchema = processSchema(def.valueType, ctx, {\n            ...params,\n            path: [...params.path, \"patternProperties\", \"*\"],\n        });\n        json.patternProperties = {};\n        for (const pattern of patterns) {\n            assignProp(json.patternProperties, exactPattern(pattern).source, valueSchema);\n        }\n    }\n    else {\n        // Default behavior: use propertyNames + additionalProperties\n        if (ctx.target === \"draft-07\" || ctx.target === \"draft-2020-12\") {\n            json.propertyNames = processSchema(def.keyType, ctx, {\n                ...params,\n                path: [...params.path, \"propertyNames\"],\n            });\n            let pending = pendingRecords.get(ctx);\n            if (!pending) {\n                pending = [];\n                pendingRecords.set(ctx, pending);\n                ctx.deferred.push(() => rewriteKeyNames(ctx));\n            }\n            pending.push(schema);\n        }\n        json.additionalProperties = processSchema(def.valueType, ctx, {\n            ...params,\n            path: [...params.path, \"additionalProperties\"],\n        });\n    }\n    // Add required for keys with discrete values (enum, literal, etc.)\n    const keyValues = keyType._zod.values;\n    // Every key shares one value schema, so an optional-in value makes the whole key set omittable on input. Output keeps them: the exhaustive branch assigns every key, even one whose value came back undefined.\n    const omittableOnInput = ctx.io === \"input\" && inputOptin(def.valueType) !== undefined;\n    if (keyValues && !def.partial && !omittableOnInput) {\n        const validKeyValues = [...keyValues].filter((v) => typeof v === \"string\" || typeof v === \"number\");\n        if (validKeyValues.length > 0) {\n            json.required = validKeyValues.map(String);\n        }\n    }\n};\nexport const nullableProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    const inner = processSchema(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    if (ctx.target === \"openapi-3.0\") {\n        seen.ref = def.innerType;\n        json.nullable = true;\n    }\n    else {\n        json.anyOf = [inner, { type: \"null\" }];\n    }\n};\nexport const nonoptionalProcessor = (schema, ctx, _json, params) => {\n    const def = schema._zod.def;\n    processSchema(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n};\n/** Round-trips a default value through JSON so the emitted schema is guaranteed to be valid JSON.\n * A BigInt has no reliable encoding, so it goes through `unrepresentable` like any other\n * unrepresentable value. Returns a sentinel when the caller must not write a default of its own. */\nconst UNREPRESENTABLE_DEFAULT = Symbol();\nfunction serializeDefaultValue(value, schema, ctx, json, params) {\n    let unrepresentable = false;\n    const serialized = JSON.stringify(value, (_, val) => {\n        if (typeof val !== \"bigint\")\n            return val;\n        unrepresentable = true;\n        return null;\n    });\n    if (!unrepresentable)\n        return JSON.parse(serialized);\n    handleUnrepresentable(schema, ctx, json, params, \"BigInt defaults cannot be represented in JSON Schema\");\n    return UNREPRESENTABLE_DEFAULT;\n}\nexport const defaultProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    processSchema(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n    const value = serializeDefaultValue(def.defaultValue, schema, ctx, json, params);\n    if (value !== UNREPRESENTABLE_DEFAULT)\n        json.default = value;\n};\nexport const prefaultProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    processSchema(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n    if (ctx.io !== \"input\")\n        return;\n    const value = serializeDefaultValue(def.defaultValue, schema, ctx, json, params);\n    if (value !== UNREPRESENTABLE_DEFAULT)\n        json._prefault = value;\n};\nexport const catchProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    processSchema(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n    let catchValue;\n    try {\n        catchValue = def.catchValue(undefined);\n    }\n    catch {\n        handleUnrepresentable(schema, ctx, json, params, \"Dynamic catch values are not supported in JSON Schema\");\n        return;\n    }\n    json.default = catchValue;\n};\nexport const pipeProcessor = (schema, ctx, _json, params) => {\n    const def = schema._zod.def;\n    const inIsTransform = def.in._zod.traits.has(\"$ZodTransform\");\n    const innerType = ctx.io === \"input\" ? (inIsTransform ? def.out : def.in) : def.out;\n    processSchema(innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = innerType;\n};\nexport const readonlyProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    processSchema(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n    json.readOnly = true;\n};\nexport const promiseProcessor = (schema, ctx, _json, params) => {\n    const def = schema._zod.def;\n    processSchema(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n};\nexport const optionalProcessor = (schema, ctx, _json, params) => {\n    const def = schema._zod.def;\n    processSchema(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n};\nexport const lazyProcessor = (schema, ctx, _json, params) => {\n    const innerType = schema._zod.innerType;\n    processSchema(innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = innerType;\n};\n// ==================== ALL PROCESSORS ====================\nexport const allProcessors = {\n    string: stringProcessor,\n    number: numberProcessor,\n    boolean: booleanProcessor,\n    bigint: bigintProcessor,\n    symbol: symbolProcessor,\n    null: nullProcessor,\n    undefined: undefinedProcessor,\n    void: voidProcessor,\n    never: neverProcessor,\n    any: anyProcessor,\n    unknown: unknownProcessor,\n    date: dateProcessor,\n    enum: enumProcessor,\n    literal: literalProcessor,\n    nan: nanProcessor,\n    template_literal: templateLiteralProcessor,\n    file: fileProcessor,\n    success: successProcessor,\n    custom: customProcessor,\n    function: functionProcessor,\n    transform: transformProcessor,\n    map: mapProcessor,\n    set: setProcessor,\n    array: arrayProcessor,\n    object: objectProcessor,\n    union: unionProcessor,\n    intersection: intersectionProcessor,\n    tuple: tupleProcessor,\n    record: recordProcessor,\n    nullable: nullableProcessor,\n    nonoptional: nonoptionalProcessor,\n    default: defaultProcessor,\n    prefault: prefaultProcessor,\n    catch: catchProcessor,\n    pipe: pipeProcessor,\n    readonly: readonlyProcessor,\n    promise: promiseProcessor,\n    optional: optionalProcessor,\n    lazy: lazyProcessor,\n};\nexport function toJSONSchema(input, params) {\n    if (\"_idmap\" in input) {\n        // Registry case\n        const registry = input;\n        const ctx = initializeContext({ ...params, processors: allProcessors });\n        const defs = {};\n        // First pass: process all schemas to build the seen map\n        for (const entry of registry._idmap.entries()) {\n            const [_, schema] = entry;\n            processSchema(schema, ctx);\n        }\n        const schemas = {};\n        const external = {\n            registry,\n            uri: params?.uri,\n            defs,\n        };\n        // Update the context with external configuration\n        ctx.external = external;\n        // Second pass: emit each schema\n        for (const entry of registry._idmap.entries()) {\n            const [key, schema] = entry;\n            extractDefs(ctx, schema);\n            assignProp(schemas, key, finalize(ctx, schema));\n        }\n        if (Object.keys(defs).length > 0) {\n            const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n            schemas.__shared = {\n                [defsSegment]: defs,\n            };\n        }\n        return { schemas };\n    }\n    // Single schema case\n    const ctx = initializeContext({ ...params, processors: allProcessors });\n    processSchema(input, ctx);\n    extractDefs(ctx, input);\n    return finalize(ctx, input);\n}\n","import { allProcessors } from \"./json-schema-processors.js\";\nimport { extractDefs, finalize, initializeContext, processSchema, } from \"./to-json-schema.js\";\n/**\n * Legacy class-based interface for JSON Schema generation.\n * This class wraps the new functional implementation to provide backward compatibility.\n *\n * @deprecated Use the `toJSONSchema` function instead for new code.\n *\n * @example\n * ```typescript\n * // Legacy usage (still supported)\n * const gen = new JSONSchemaGenerator({ target: \"draft-07\" });\n * gen.process(schema);\n * const result = gen.emit(schema);\n *\n * // Preferred modern usage\n * const result = toJSONSchema(schema, { target: \"draft-07\" });\n * ```\n */\nexport class JSONSchemaGenerator {\n    /** @deprecated Access via ctx instead */\n    get metadataRegistry() {\n        return this.ctx.metadataRegistry;\n    }\n    /** @deprecated Access via ctx instead */\n    get target() {\n        return this.ctx.target;\n    }\n    // annotated so the .d.cts emits an indexed access rather than an inline `import()` of an ESM path\n    /** @deprecated Access via ctx instead */\n    get unrepresentable() {\n        return this.ctx.unrepresentable;\n    }\n    /** @deprecated Access via ctx instead */\n    get override() {\n        return this.ctx.override;\n    }\n    /** @deprecated Access via ctx instead */\n    get io() {\n        return this.ctx.io;\n    }\n    /** @deprecated Access via ctx instead */\n    get counter() {\n        return this.ctx.counter;\n    }\n    set counter(value) {\n        this.ctx.counter = value;\n    }\n    /** @deprecated Access via ctx instead */\n    get seen() {\n        return this.ctx.seen;\n    }\n    constructor(params) {\n        // Normalize target for internal context\n        let normalizedTarget = params?.target ?? \"draft-2020-12\";\n        if (normalizedTarget === \"draft-4\")\n            normalizedTarget = \"draft-04\";\n        if (normalizedTarget === \"draft-7\")\n            normalizedTarget = \"draft-07\";\n        this.ctx = initializeContext({\n            processors: allProcessors,\n            target: normalizedTarget,\n            ...(params?.metadata && { metadata: params.metadata }),\n            ...(params?.unrepresentable && { unrepresentable: params.unrepresentable }),\n            ...(params?.override && { override: params.override }),\n            ...(params?.io && { io: params.io }),\n        });\n    }\n    /**\n     * Process a schema to prepare it for JSON Schema generation.\n     * This must be called before emit().\n     */\n    process(schema, _params = { path: [], schemaPath: [] }) {\n        return processSchema(schema, this.ctx, _params);\n    }\n    /**\n     * Emit the final JSON Schema after processing.\n     * Must call process() first.\n     */\n    emit(schema, _params) {\n        // Apply emit params to the context\n        if (_params) {\n            if (_params.cycles)\n                this.ctx.cycles = _params.cycles;\n            if (_params.reused)\n                this.ctx.reused = _params.reused;\n            if (_params.external)\n                this.ctx.external = _params.external;\n        }\n        // extractDefs/finalize skip their whole-map passes when they have already run for this `external`, but they also branch on `cycles`, `reused`, `seen.count` and the metadata registry — any of which can change between emits, including with no params at all. Drop the guards so the passes re-run. The registry conversion calls extractDefs/finalize directly and never routes through here, so it keeps skipping them.\n        this.ctx.sharedDefsExtractedFor = undefined;\n        this.ctx.sharedEmitDoneFor = undefined;\n        extractDefs(this.ctx, schema);\n        const result = finalize(this.ctx, schema);\n        // Strip ~standard property to match old implementation's return type\n        const { \"~standard\": _, ...plainResult } = result;\n        return plainResult;\n    }\n}\n","export {};\n","export * from \"./core.js\";\nexport * from \"./parse.js\";\nexport * from \"./errors.js\";\nexport * from \"./schemas.js\";\nexport * from \"./memoizer.js\";\nexport * from \"./checks.js\";\nexport * from \"./versions.js\";\nexport * as util from \"./util.js\";\nexport { toZod } from \"./util.js\";\nexport * as regexes from \"./regexes.js\";\nexport * as locales from \"../locales/index.js\";\nexport * from \"./registries.js\";\nexport * from \"./doc.js\";\nexport * from \"./compile.js\";\nexport * from \"./api.js\";\nexport * from \"./to-json-schema.js\";\nexport { toJSONSchema } from \"./json-schema-processors.js\";\nexport { JSONSchemaGenerator } from \"./json-schema-generator.js\";\nexport * as JSONSchema from \"./json-schema.js\";\n","export { _lt as lt, _lte as lte, _gt as gt, _gte as gte, _positive as positive, _negative as negative, _nonpositive as nonpositive, _nonnegative as nonnegative, _multipleOf as multipleOf, _maxSize as maxSize, _minSize as minSize, _size as size, _maxLength as maxLength, _minLength as minLength, _length as length, _regex as regex, _lowercase as lowercase, _uppercase as uppercase, _includes as includes, _startsWith as startsWith, _endsWith as endsWith, _property as property, _properties as properties, _mime as mime, _overwrite as overwrite, _normalize as normalize, _trim as trim, _toLowerCase as toLowerCase, _toUpperCase as toUpperCase, _slugify as slugify, } from \"../core/index.js\";\n","import * as core from \"../core/index.js\";\nimport { $ZodError } from \"../core/index.js\";\nimport * as util from \"../core/util.js\";\n/* Prototypes that already carry the lazy helper methods. Seeded with the\n * intrinsics so that `init` on a foreign object — it accepts any object —\n * can never install an accessor onto a prototype we do not own. */\nconst _installedErrorProtos = /* @__PURE__ */ new WeakSet([Object.prototype, Error.prototype]);\n/* Helper methods live as non-enumerable lazy getters on the shared\n * prototype instead of own properties on every instance. On first\n * access the getter allocates the per-instance closure and caches it\n * as a non-enumerable own property, so detached usage still works and\n * the allocation only happens for methods actually touched. */\nfunction _lazyMethod(proto, key, make) {\n    Object.defineProperty(proto, key, {\n        configurable: true,\n        enumerable: false,\n        get() {\n            const value = make(this);\n            Object.defineProperty(this, key, { value, configurable: true, writable: true });\n            return value;\n        },\n        set(value) {\n            Object.defineProperty(this, key, { value, configurable: true, writable: true });\n        },\n    });\n}\nconst initializer = (inst, issues) => {\n    $ZodError.init(inst, issues);\n    inst.name = \"ZodError\";\n    const proto = Object.getPrototypeOf(inst);\n    if (_installedErrorProtos.has(proto))\n        return;\n    _installedErrorProtos.add(proto);\n    _lazyMethod(proto, \"format\", (self) => (mapper) => core.formatError(self, mapper));\n    _lazyMethod(proto, \"flatten\", (self) => (mapper) => core.flattenError(self, mapper));\n    _lazyMethod(proto, \"addIssue\", (self) => (issue) => {\n        self.issues.push(issue);\n        self.message = JSON.stringify(self.issues, util.jsonStringifyReplacer, 2);\n    });\n    _lazyMethod(proto, \"addIssues\", (self) => (issues) => {\n        self.issues.push(...issues);\n        self.message = JSON.stringify(self.issues, util.jsonStringifyReplacer, 2);\n    });\n    Object.defineProperty(proto, \"isEmpty\", {\n        configurable: true,\n        enumerable: false,\n        get() {\n            return this.issues.length === 0;\n        },\n    });\n};\nexport const ZodError = /*@__PURE__*/ core.$constructor(\"ZodError\", initializer);\nexport const ZodRealError = /*@__PURE__*/ core.$constructor(\"ZodError\", initializer, undefined, {\n    Parent: Error,\n});\n// /** @deprecated Use `z.core.$ZodErrorMapCtx` instead. */\n// export type ErrorMapCtx = core.$ZodErrorMapCtx;\n","import * as core from \"../core/index.js\";\nimport { ZodRealError } from \"./errors.js\";\nexport const parse = /* @__PURE__ */ core._parse(ZodRealError);\nexport const parseAsync = /* @__PURE__ */ core._parseAsync(ZodRealError);\nexport const safeParse = /* @__PURE__ */ core._safeParse(ZodRealError);\nexport const safeParseAsync = /* @__PURE__ */ core._safeParseAsync(ZodRealError);\nexport { validate, validateAsync } from \"../core/index.js\";\n// Codec functions\nexport const encode = /* @__PURE__ */ core._encode(ZodRealError);\nexport const decode = /* @__PURE__ */ core._decode(ZodRealError);\nexport const encodeAsync = /* @__PURE__ */ core._encodeAsync(ZodRealError);\nexport const decodeAsync = /* @__PURE__ */ core._decodeAsync(ZodRealError);\nexport const safeEncode = /* @__PURE__ */ core._safeEncode(ZodRealError);\nexport const safeDecode = /* @__PURE__ */ core._safeDecode(ZodRealError);\nexport const safeEncodeAsync = /* @__PURE__ */ core._safeEncodeAsync(ZodRealError);\nexport const safeDecodeAsync = /* @__PURE__ */ core._safeDecodeAsync(ZodRealError);\n","import * as core from \"../core/index.js\";\nimport { util } from \"../core/index.js\";\nimport * as processors from \"../core/json-schema-processors.js\";\nimport * as regexes from \"../core/regexes.js\";\nimport { createStandardJSONSchemaMethod, createToJSONSchemaMethod } from \"../core/to-json-schema.js\";\nimport en from \"../locales/en.js\";\nimport * as checks from \"./checks.js\";\nimport * as parse from \"./parse.js\";\n// Register English as the default locale on first ZodType construction. Hooked into the `ZodType` `$constructor` (rather than a top-level `config(en())` in `external.ts`) so bundlers honoring `sideEffects: false` can't tree-shake it out — see #5953, #5725. An explicit `z.config(z.locales.xx())` call wins regardless of order, since this only sets the default when none is present.\nfunction _ensureDefaultLocale() {\n    if (!core.globalConfig.localeError)\n        core.config(en());\n}\n// the default memoizer is read by the core container init, which runs before `ZodType.init`, so each container calls this first\nfunction _ensureDefaultMemoizer() {\n    if (!core.globalConfig.memoizer)\n        core.config({ memoizer: core.memoizer() });\n}\nexport const ZodType = /*@__PURE__*/ core.$constructor(\"ZodType\", (inst, def) => {\n    _ensureDefaultLocale();\n    core.$ZodType.init(inst, def);\n    inst.def = def;\n    inst.type = def.type;\n    return inst;\n}, {\n    check(...chks) {\n        const def = this.def;\n        return this.clone(util.mergeDefs(def, {\n            checks: [\n                ...(def.checks ?? []),\n                ...chks.map((ch) => typeof ch === \"function\" ? { _zod: { check: ch, def: { check: \"custom\" }, onattach: [] } } : ch),\n            ],\n        }), { parent: true });\n    },\n    with(...chks) {\n        return this.check(...chks);\n    },\n    clone(def, params) {\n        return core.clone(this, def, params);\n    },\n    brand() {\n        return this;\n    },\n    register(reg, meta) {\n        reg.add(this, meta);\n        return this;\n    },\n    refine(check, params) {\n        return this.check(refine(check, params));\n    },\n    superRefine(refinement, params) {\n        return this.check(superRefine(refinement, params));\n    },\n    overwrite(fn) {\n        return this.check(checks.overwrite(fn));\n    },\n    optional() {\n        return optional(this);\n    },\n    exactOptional() {\n        return exactOptional(this);\n    },\n    nullable() {\n        return nullable(this);\n    },\n    nullish() {\n        return optional(nullable(this));\n    },\n    nonoptional(params) {\n        return nonoptional(this, params);\n    },\n    array() {\n        return array(this);\n    },\n    or(arg) {\n        return union([this, arg]);\n    },\n    and(arg) {\n        return intersection(this, arg);\n    },\n    transform(tx) {\n        return pipe(this, transform(tx));\n    },\n    default(d) {\n        return _default(this, d);\n    },\n    prefault(d) {\n        return prefault(this, d);\n    },\n    catch(params) {\n        return _catch(this, params);\n    },\n    pipe(target) {\n        return pipe(this, target);\n    },\n    readonly() {\n        return readonly(this);\n    },\n    describe(description) {\n        const cl = this.clone();\n        core.globalRegistry.add(cl, { description });\n        return cl;\n    },\n    meta(...args) {\n        // overloaded: meta() returns the registered metadata, meta(data) returns a clone with `data` registered. The mapped type picks up the second overload, so we accept variadic any-args and return `any` to satisfy both at runtime.\n        if (args.length === 0)\n            return core.globalRegistry.get(this);\n        const cl = this.clone();\n        core.globalRegistry.add(cl, args[0]);\n        return cl;\n    },\n    isOptional() {\n        return this.safeParse(undefined).success;\n    },\n    isNullable() {\n        return this.safeParse(null).success;\n    },\n    apply(fn, ...args) {\n        return args.length === 0 ? fn(this) : fn(this, ...args);\n    },\n    // Overrides core's `~standard` to add `jsonSchema`. Must stay a prototype entry: redefining it per instance demotes instances to dictionary mode.\n    get \"~standard\"() {\n        return util.hide(this, \"~standard\", {\n            ...core.standardProps(this),\n            jsonSchema: {\n                input: createStandardJSONSchemaMethod(this, \"input\"),\n                output: createStandardJSONSchemaMethod(this, \"output\"),\n            },\n        });\n    },\n    set \"~standard\"(value) {\n        util.own(this, \"~standard\", value);\n    },\n    parse: function _parse(data, params) {\n        return parse.parse(this, data, params, { callee: _parse });\n    },\n    parseAsync: async function _parseAsync(data, params) {\n        return await parse.parseAsync(this, data, params, { callee: _parseAsync });\n    },\n    safeParse(data, params) {\n        return parse.safeParse(this, data, params);\n    },\n    async safeParseAsync(data, params) {\n        return parse.safeParseAsync(this, data, params);\n    },\n    // `spa` is an alias: same function object as `safeParseAsync`, as before.\n    get spa() {\n        return this?.safeParseAsync;\n    },\n    set spa(value) {\n        util.own(this, \"spa\", value);\n    },\n    validate(data, params) {\n        return parse.validate(this, data, params);\n    },\n    validateAsync(data, params) {\n        return parse.validateAsync(this, data, params);\n    },\n    encode: function _encode(data, params) {\n        return parse.encode(this, data, params, { callee: _encode });\n    },\n    decode: function _decode(data, params) {\n        return parse.decode(this, data, params, { callee: _decode });\n    },\n    encodeAsync: async function _encodeAsync(data, params) {\n        return await parse.encodeAsync(this, data, params, { callee: _encodeAsync });\n    },\n    decodeAsync: async function _decodeAsync(data, params) {\n        return await parse.decodeAsync(this, data, params, { callee: _decodeAsync });\n    },\n    safeEncode(data, params) {\n        return parse.safeEncode(this, data, params);\n    },\n    safeDecode(data, params) {\n        return parse.safeDecode(this, data, params);\n    },\n    async safeEncodeAsync(data, params) {\n        return parse.safeEncodeAsync(this, data, params);\n    },\n    async safeDecodeAsync(data, params) {\n        return parse.safeDecodeAsync(this, data, params);\n    },\n    toJSONSchema(params) {\n        return createToJSONSchemaMethod(this, {})(params);\n    },\n    // Reads through to the registry on every access, so it must not cache.\n    get description() {\n        return core.globalRegistry.get(this)?.description;\n    },\n    // No setter: `schema._def = x` throws, as it did when `_def` was a non-writable own property.\n    get _def() {\n        return this._zod.def;\n    },\n});\n/** @internal */\nexport const _ZodString = /*@__PURE__*/ core.$constructor(\"_ZodString\", (inst, def) => {\n    core.$ZodString.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.stringProcessor(inst, ctx, json, params);\n}, \n/*@__PURE__*/ util.derived({\n    format: (inst) => processors.aggregateChecks(inst).format ?? null,\n    minLength: (inst) => processors.aggregateChecks(inst).minimum ?? null,\n    maxLength: (inst) => processors.aggregateChecks(inst).maximum ?? null,\n}, {\n    regex(...args) {\n        return this.check(checks.regex(...args));\n    },\n    includes(...args) {\n        return this.check(checks.includes(...args));\n    },\n    startsWith(...args) {\n        return this.check(checks.startsWith(...args));\n    },\n    endsWith(...args) {\n        return this.check(checks.endsWith(...args));\n    },\n    min(...args) {\n        return this.check(checks.minLength(...args));\n    },\n    max(...args) {\n        return this.check(checks.maxLength(...args));\n    },\n    length(...args) {\n        return this.check(checks.length(...args));\n    },\n    nonempty(...args) {\n        return this.check(checks.minLength(1, ...args));\n    },\n    lowercase(params) {\n        return this.check(checks.lowercase(params));\n    },\n    uppercase(params) {\n        return this.check(checks.uppercase(params));\n    },\n    trim() {\n        return this.check(checks.trim());\n    },\n    normalize(...args) {\n        return this.check(checks.normalize(...args));\n    },\n    toLowerCase() {\n        return this.check(checks.toLowerCase());\n    },\n    toUpperCase() {\n        return this.check(checks.toUpperCase());\n    },\n    slugify() {\n        return this.check(checks.slugify());\n    },\n}));\nexport const ZodString = /*@__PURE__*/ core.$constructor(\"ZodString\", (inst, def) => {\n    core.$ZodString.init(inst, def);\n    _ZodString.init(inst, def);\n}, {\n    email(params) {\n        return this.check(core._email(ZodEmail, params));\n    },\n    url(params) {\n        return this.check(core._url(ZodURL, params));\n    },\n    jwt(params) {\n        return this.check(core._jwt(ZodJWT, params));\n    },\n    emoji(params) {\n        return this.check(core._emoji(ZodEmoji, params));\n    },\n    guid(params) {\n        return this.check(core._guid(ZodGUID, params));\n    },\n    uuid(params) {\n        return this.check(core._uuid(ZodUUID, params));\n    },\n    uuidv4(params) {\n        return this.check(core._uuidv4(ZodUUID, params));\n    },\n    uuidv6(params) {\n        return this.check(core._uuidv6(ZodUUID, params));\n    },\n    uuidv7(params) {\n        return this.check(core._uuidv7(ZodUUID, params));\n    },\n    nanoid(params) {\n        return this.check(core._nanoid(ZodNanoID, params));\n    },\n    cuid(params) {\n        return this.check(core._cuid(ZodCUID, params));\n    },\n    cuid2(params) {\n        return this.check(core._cuid2(ZodCUID2, params));\n    },\n    ulid(params) {\n        return this.check(core._ulid(ZodULID, params));\n    },\n    base64(params) {\n        return this.check(core._base64(ZodBase64, params));\n    },\n    base64url(params) {\n        return this.check(core._base64url(ZodBase64URL, params));\n    },\n    xid(params) {\n        return this.check(core._xid(ZodXID, params));\n    },\n    ksuid(params) {\n        return this.check(core._ksuid(ZodKSUID, params));\n    },\n    ipv4(params) {\n        return this.check(core._ipv4(ZodIPv4, params));\n    },\n    ipv6(params) {\n        return this.check(core._ipv6(ZodIPv6, params));\n    },\n    cidrv4(params) {\n        return this.check(core._cidrv4(ZodCIDRv4, params));\n    },\n    cidrv6(params) {\n        return this.check(core._cidrv6(ZodCIDRv6, params));\n    },\n    e164(params) {\n        return this.check(core._e164(ZodE164, params));\n    },\n    datetime(params) {\n        return this.check(core._isoDateTime(ZodISODateTime, params));\n    },\n    date(params) {\n        return this.check(core._isoDate(ZodISODate, params));\n    },\n    time(params) {\n        return this.check(core._isoTime(ZodISOTime, params));\n    },\n    duration(params) {\n        return this.check(core._isoDuration(ZodISODuration, params));\n    },\n});\nexport function string(params) {\n    return core._string(ZodString, params);\n}\nexport const ZodStringFormat = /*@__PURE__*/ core.$constructor(\"ZodStringFormat\", (inst, def) => {\n    core.$ZodStringFormat.init(inst, def);\n    _ZodString.init(inst, def);\n});\nexport const ZodISODateTime = /*@__PURE__*/ core.$constructor(\"ZodISODateTime\", (inst, def) => {\n    core.$ZodISODateTime.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport const ZodISODate = /*@__PURE__*/ core.$constructor(\"ZodISODate\", (inst, def) => {\n    core.$ZodISODate.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport const ZodISOTime = /*@__PURE__*/ core.$constructor(\"ZodISOTime\", (inst, def) => {\n    core.$ZodISOTime.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport const ZodISODuration = /*@__PURE__*/ core.$constructor(\"ZodISODuration\", (inst, def) => {\n    core.$ZodISODuration.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport const ZodEmail = /*@__PURE__*/ core.$constructor(\"ZodEmail\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodEmail.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function email(params) {\n    return core._email(ZodEmail, params);\n}\nexport const ZodGUID = /*@__PURE__*/ core.$constructor(\"ZodGUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodGUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function guid(params) {\n    return core._guid(ZodGUID, params);\n}\nexport const ZodUUID = /*@__PURE__*/ core.$constructor(\"ZodUUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodUUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function uuid(params) {\n    return core._uuid(ZodUUID, params);\n}\nexport function uuidv4(params) {\n    return core._uuidv4(ZodUUID, params);\n}\n// ZodUUIDv6\nexport function uuidv6(params) {\n    return core._uuidv6(ZodUUID, params);\n}\n// ZodUUIDv7\nexport function uuidv7(params) {\n    return core._uuidv7(ZodUUID, params);\n}\nexport const ZodURL = /*@__PURE__*/ core.$constructor(\"ZodURL\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodURL.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function url(params) {\n    return core._url(ZodURL, params);\n}\nexport function httpUrl(params) {\n    return core._url(ZodURL, {\n        protocol: regexes.httpProtocol,\n        hostname: regexes.domain,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodEmoji = /*@__PURE__*/ core.$constructor(\"ZodEmoji\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodEmoji.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function emoji(params) {\n    return core._emoji(ZodEmoji, params);\n}\nexport const ZodNanoID = /*@__PURE__*/ core.$constructor(\"ZodNanoID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodNanoID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function nanoid(params) {\n    return core._nanoid(ZodNanoID, params);\n}\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link ZodCUID2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nexport const ZodCUID = /*@__PURE__*/ core.$constructor(\"ZodCUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\n/**\n * Validates a CUID v1 string.\n *\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link cuid2 | `z.cuid2()`} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nexport function cuid(params) {\n    return core._cuid(ZodCUID, params);\n}\nexport const ZodCUID2 = /*@__PURE__*/ core.$constructor(\"ZodCUID2\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCUID2.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cuid2(params) {\n    return core._cuid2(ZodCUID2, params);\n}\nexport const ZodULID = /*@__PURE__*/ core.$constructor(\"ZodULID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodULID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ulid(params) {\n    return core._ulid(ZodULID, params);\n}\nexport const ZodXID = /*@__PURE__*/ core.$constructor(\"ZodXID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodXID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function xid(params) {\n    return core._xid(ZodXID, params);\n}\nexport const ZodKSUID = /*@__PURE__*/ core.$constructor(\"ZodKSUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodKSUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ksuid(params) {\n    return core._ksuid(ZodKSUID, params);\n}\nexport const ZodIPv4 = /*@__PURE__*/ core.$constructor(\"ZodIPv4\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodIPv4.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ipv4(params) {\n    return core._ipv4(ZodIPv4, params);\n}\nexport const ZodMAC = /*@__PURE__*/ core.$constructor(\"ZodMAC\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodMAC.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function mac(params) {\n    return core._mac(ZodMAC, params);\n}\nexport const ZodIPv6 = /*@__PURE__*/ core.$constructor(\"ZodIPv6\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodIPv6.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ipv6(params) {\n    return core._ipv6(ZodIPv6, params);\n}\nexport const ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv4\", (inst, def) => {\n    core.$ZodCIDRv4.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cidrv4(params) {\n    return core._cidrv4(ZodCIDRv4, params);\n}\nexport const ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv6\", (inst, def) => {\n    core.$ZodCIDRv6.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cidrv6(params) {\n    return core._cidrv6(ZodCIDRv6, params);\n}\nexport const ZodBase64 = /*@__PURE__*/ core.$constructor(\"ZodBase64\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodBase64.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function base64(params) {\n    return core._base64(ZodBase64, params);\n}\nexport const ZodBase64URL = /*@__PURE__*/ core.$constructor(\"ZodBase64URL\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodBase64URL.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function base64url(params) {\n    return core._base64url(ZodBase64URL, params);\n}\nexport const ZodE164 = /*@__PURE__*/ core.$constructor(\"ZodE164\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodE164.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function e164(params) {\n    return core._e164(ZodE164, params);\n}\nexport const ZodCreditCard = /*@__PURE__*/ core.$constructor(\"ZodCreditCard\", (inst, def) => {\n    core.$ZodCreditCard.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function creditCard(params) {\n    return core._creditCard(ZodCreditCard, params);\n}\nexport const ZodIBAN = /*@__PURE__*/ core.$constructor(\"ZodIBAN\", (inst, def) => {\n    core.$ZodIBAN.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function iban(params) {\n    return core._iban(ZodIBAN, params);\n}\nexport const ZodJWT = /*@__PURE__*/ core.$constructor(\"ZodJWT\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodJWT.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function jwt(params) {\n    return core._jwt(ZodJWT, params);\n}\nexport const ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"ZodCustomStringFormat\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCustomStringFormat.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function stringFormat(format, fnOrRegex, _params = {}) {\n    return core._stringFormat(ZodCustomStringFormat, format, fnOrRegex, _params);\n}\nexport function hostname(_params) {\n    return core._stringFormat(ZodCustomStringFormat, \"hostname\", regexes.hostname, _params);\n}\nexport function hex(_params) {\n    return core._stringFormat(ZodCustomStringFormat, \"hex\", regexes.hex, _params);\n}\nexport function currencyCode(_params) {\n    return core._stringFormat(ZodCustomStringFormat, \"currency_code\", regexes.currencyCode, _params);\n}\nexport function hash(alg, params) {\n    const enc = params?.enc ?? \"hex\";\n    const format = `${alg}_${enc}`;\n    const regex = core.regexes[format];\n    if (!regex)\n        throw new Error(`Unrecognized hash format: ${format}`);\n    return core._stringFormat(ZodCustomStringFormat, format, regex, params);\n}\nexport const ZodNumber = /*@__PURE__*/ core.$constructor(\"ZodNumber\", (inst, def) => {\n    core.$ZodNumber.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.numberProcessor(inst, ctx, json, params);\n    inst.isFinite = true;\n}, \n/*@__PURE__*/ util.derived({\n    minValue: (inst) => {\n        const { minimum, exclusiveMinimum } = processors.aggregateChecks(inst);\n        return Math.max(minimum ?? Number.NEGATIVE_INFINITY, exclusiveMinimum ?? Number.NEGATIVE_INFINITY);\n    },\n    maxValue: (inst) => {\n        const { maximum, exclusiveMaximum } = processors.aggregateChecks(inst);\n        return Math.min(maximum ?? Number.POSITIVE_INFINITY, exclusiveMaximum ?? Number.POSITIVE_INFINITY);\n    },\n    isInt: (inst) => {\n        const { isInt, multipleOf } = processors.aggregateChecks(inst);\n        return !!isInt || !!multipleOf?.some(Number.isSafeInteger);\n    },\n    format: (inst) => processors.aggregateChecks(inst).format ?? null,\n}, {\n    gt(value, params) {\n        return this.check(checks.gt(value, params));\n    },\n    gte(value, params) {\n        return this.check(checks.gte(value, params));\n    },\n    min(value, params) {\n        return this.check(checks.gte(value, params));\n    },\n    lt(value, params) {\n        return this.check(checks.lt(value, params));\n    },\n    lte(value, params) {\n        return this.check(checks.lte(value, params));\n    },\n    max(value, params) {\n        return this.check(checks.lte(value, params));\n    },\n    int(params) {\n        return this.check(int(params));\n    },\n    safe(params) {\n        return this.check(int(params));\n    },\n    positive(params) {\n        return this.check(checks.gt(0, params));\n    },\n    nonnegative(params) {\n        return this.check(checks.gte(0, params));\n    },\n    negative(params) {\n        return this.check(checks.lt(0, params));\n    },\n    nonpositive(params) {\n        return this.check(checks.lte(0, params));\n    },\n    multipleOf(value, params) {\n        return this.check(checks.multipleOf(value, params));\n    },\n    step(value, params) {\n        return this.check(checks.multipleOf(value, params));\n    },\n    finite() {\n        return this;\n    },\n}));\nexport function number(params) {\n    return core._number(ZodNumber, params);\n}\nexport const ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"ZodNumberFormat\", (inst, def) => {\n    core.$ZodNumberFormat.init(inst, def);\n    ZodNumber.init(inst, def);\n});\nexport function int(params) {\n    return core._int(ZodNumberFormat, params);\n}\nexport function float32(params) {\n    return core._float32(ZodNumberFormat, params);\n}\nexport function float64(params) {\n    return core._float64(ZodNumberFormat, params);\n}\nexport function int32(params) {\n    return core._int32(ZodNumberFormat, params);\n}\nexport function uint32(params) {\n    return core._uint32(ZodNumberFormat, params);\n}\nexport const ZodBoolean = /*@__PURE__*/ core.$constructor(\"ZodBoolean\", (inst, def) => {\n    core.$ZodBoolean.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.booleanProcessor(inst, ctx, json, params);\n});\nexport function boolean(params) {\n    return core._boolean(ZodBoolean, params);\n}\nexport const ZodBigInt = /*@__PURE__*/ core.$constructor(\"ZodBigInt\", (inst, def) => {\n    core.$ZodBigInt.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.bigintProcessor(inst, ctx, json, params);\n}, \n/*@__PURE__*/ util.derived({\n    minValue: (inst) => processors.aggregateChecks(inst).minimum ?? null,\n    maxValue: (inst) => processors.aggregateChecks(inst).maximum ?? null,\n    format: (inst) => processors.aggregateChecks(inst).format ?? null,\n}, {\n    gte(value, params) {\n        return this.check(checks.gte(value, params));\n    },\n    min(value, params) {\n        return this.check(checks.gte(value, params));\n    },\n    gt(value, params) {\n        return this.check(checks.gt(value, params));\n    },\n    lt(value, params) {\n        return this.check(checks.lt(value, params));\n    },\n    lte(value, params) {\n        return this.check(checks.lte(value, params));\n    },\n    max(value, params) {\n        return this.check(checks.lte(value, params));\n    },\n    positive(params) {\n        return this.check(checks.gt(BigInt(0), params));\n    },\n    negative(params) {\n        return this.check(checks.lt(BigInt(0), params));\n    },\n    nonpositive(params) {\n        return this.check(checks.lte(BigInt(0), params));\n    },\n    nonnegative(params) {\n        return this.check(checks.gte(BigInt(0), params));\n    },\n    multipleOf(value, params) {\n        return this.check(checks.multipleOf(value, params));\n    },\n}));\nexport function bigint(params) {\n    return core._bigint(ZodBigInt, params);\n}\nexport const ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"ZodBigIntFormat\", (inst, def) => {\n    core.$ZodBigIntFormat.init(inst, def);\n    ZodBigInt.init(inst, def);\n});\nexport function int64(params) {\n    return core._int64(ZodBigIntFormat, params);\n}\nexport function uint64(params) {\n    return core._uint64(ZodBigIntFormat, params);\n}\nexport const ZodSymbol = /*@__PURE__*/ core.$constructor(\"ZodSymbol\", (inst, def) => {\n    core.$ZodSymbol.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.symbolProcessor(inst, ctx, json, params);\n});\nexport function symbol(params) {\n    return core._symbol(ZodSymbol, params);\n}\nexport const ZodUndefined = /*@__PURE__*/ core.$constructor(\"ZodUndefined\", (inst, def) => {\n    core.$ZodUndefined.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.undefinedProcessor(inst, ctx, json, params);\n});\nfunction _undefined(params) {\n    return core._undefined(ZodUndefined, params);\n}\nexport { _undefined as undefined };\nexport const ZodNull = /*@__PURE__*/ core.$constructor(\"ZodNull\", (inst, def) => {\n    core.$ZodNull.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.nullProcessor(inst, ctx, json, params);\n});\nfunction _null(params) {\n    return core._null(ZodNull, params);\n}\nexport { _null as null };\nexport const ZodAny = /*@__PURE__*/ core.$constructor(\"ZodAny\", (inst, def) => {\n    core.$ZodAny.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.anyProcessor(inst, ctx, json, params);\n});\nexport function any() {\n    return core._any(ZodAny);\n}\nexport const ZodUnknown = /*@__PURE__*/ core.$constructor(\"ZodUnknown\", (inst, def) => {\n    core.$ZodUnknown.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.unknownProcessor(inst, ctx, json, params);\n});\nexport function unknown() {\n    return core._unknown(ZodUnknown);\n}\nexport const ZodNever = /*@__PURE__*/ core.$constructor(\"ZodNever\", (inst, def) => {\n    core.$ZodNever.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.neverProcessor(inst, ctx, json, params);\n});\nexport function never(params) {\n    return core._never(ZodNever, params);\n}\nexport const ZodVoid = /*@__PURE__*/ core.$constructor(\"ZodVoid\", (inst, def) => {\n    core.$ZodVoid.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.voidProcessor(inst, ctx, json, params);\n});\nfunction _void(params) {\n    return core._void(ZodVoid, params);\n}\nexport { _void as void };\nexport const ZodDate = /*@__PURE__*/ core.$constructor(\"ZodDate\", (inst, def) => {\n    core.$ZodDate.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.dateProcessor(inst, ctx, json, params);\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.max = (value, params) => inst.check(checks.lte(value, params));\n}, \n/*@__PURE__*/ util.derived({\n    minDate: (inst) => {\n        const { minimum } = processors.aggregateChecks(inst);\n        return minimum ? new Date(minimum) : null;\n    },\n    maxDate: (inst) => {\n        const { maximum } = processors.aggregateChecks(inst);\n        return maximum ? new Date(maximum) : null;\n    },\n}, {}));\nexport function date(params) {\n    return core._date(ZodDate, params);\n}\nexport const ZodArray = /*@__PURE__*/ core.$constructor(\"ZodArray\", (inst, def) => {\n    _ensureDefaultMemoizer();\n    core.$ZodArray.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.arrayProcessor(inst, ctx, json, params);\n    inst.element = def.element;\n}, {\n    min(n, params) {\n        return this.check(checks.minLength(n, params));\n    },\n    nonempty(params) {\n        return this.check(checks.minLength(1, params));\n    },\n    max(n, params) {\n        return this.check(checks.maxLength(n, params));\n    },\n    length(n, params) {\n        return this.check(checks.length(n, params));\n    },\n    unwrap() {\n        return this.element;\n    },\n});\nexport function array(element, params) {\n    return core._array(ZodArray, element, params);\n}\n// .keyof\nexport function keyof(schema) {\n    const shape = schema._zod.def.shape;\n    return _enum(Object.keys(shape));\n}\nexport const ZodObject = /*@__PURE__*/ core.$constructor(\"ZodObject\", (inst, def) => {\n    _ensureDefaultMemoizer();\n    core.$ZodObjectJIT.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.objectProcessor(inst, ctx, json, params);\n    util.installLazyProp(inst, \"shape\", (self) => self._zod.def.shape, false);\n}, {\n    keyof() {\n        return _enum(Object.keys(this._zod.def.shape));\n    },\n    catchall(catchall) {\n        // `mergeDefs` rather than a spread: spreading reads `shape`, and resolving it can mint a whole fresh subtree\n        return this.clone(util.mergeDefs(this._zod.def, { catchall: catchall }));\n    },\n    passthrough() {\n        return this.clone(util.mergeDefs(this._zod.def, { catchall: unknown() }));\n    },\n    loose() {\n        return this.clone(util.mergeDefs(this._zod.def, { catchall: unknown() }));\n    },\n    strict() {\n        return this.clone(util.mergeDefs(this._zod.def, { catchall: never() }));\n    },\n    strip() {\n        return this.clone(util.mergeDefs(this._zod.def, { catchall: undefined }));\n    },\n    extend(incoming) {\n        return util.extend(this, incoming);\n    },\n    safeExtend(incoming) {\n        return util.safeExtend(this, incoming);\n    },\n    merge(other) {\n        return util.merge(this, other);\n    },\n    pick(mask) {\n        return util.pick(this, mask);\n    },\n    omit(mask) {\n        return util.omit(this, mask);\n    },\n    partial(...args) {\n        return util.partial(ZodOptional, this, args[0]);\n    },\n    exactPartial(...args) {\n        return util.partial(ZodExactOptional, this, args[0], \"exactPartial\");\n    },\n    required(...args) {\n        return util.required(ZodNonOptional, this, args[0]);\n    },\n});\nexport function object(shape, params) {\n    const def = {\n        type: \"object\",\n        shape: shape ?? {},\n        ...util.normalizeParams(params),\n    };\n    return new ZodObject(def);\n}\n// strictObject\nexport function strictObject(shape, params) {\n    return new ZodObject({\n        type: \"object\",\n        shape,\n        catchall: never(),\n        ...util.normalizeParams(params),\n    });\n}\n// looseObject\nexport function looseObject(shape, params) {\n    return new ZodObject({\n        type: \"object\",\n        shape,\n        catchall: unknown(),\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodUnion = /*@__PURE__*/ core.$constructor(\"ZodUnion\", (inst, def) => {\n    core.$ZodUnion.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n    inst.options = def.options;\n});\nexport function union(options, params) {\n    return new ZodUnion({\n        type: \"union\",\n        options: options,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodXor = /*@__PURE__*/ core.$constructor(\"ZodXor\", (inst, def) => {\n    ZodUnion.init(inst, def);\n    core.$ZodXor.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n    inst.options = def.options;\n});\n/** Creates an exclusive union (XOR) where exactly one option must match.\n * Unlike regular unions that succeed when any option matches, xor fails if\n * zero or more than one option matches the input. */\nexport function xor(options, params) {\n    return new ZodXor({\n        type: \"union\",\n        options: options,\n        inclusive: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodDiscriminatedUnion = /*@__PURE__*/ core.$constructor(\"ZodDiscriminatedUnion\", (inst, def) => {\n    ZodUnion.init(inst, def);\n    core.$ZodDiscriminatedUnion.init(inst, def);\n});\nexport function discriminatedUnion(discriminator, options, params) {\n    // const [options, params] = args;\n    return new ZodDiscriminatedUnion({\n        type: \"union\",\n        options: options,\n        discriminator,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodIntersection = /*@__PURE__*/ core.$constructor(\"ZodIntersection\", (inst, def) => {\n    core.$ZodIntersection.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.intersectionProcessor(inst, ctx, json, params);\n});\nexport function intersection(left, right) {\n    return new ZodIntersection({\n        type: \"intersection\",\n        left: left,\n        right: right,\n    });\n}\nexport const ZodTuple = /*@__PURE__*/ core.$constructor(\"ZodTuple\", (inst, def) => {\n    _ensureDefaultMemoizer();\n    core.$ZodTuple.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.tupleProcessor(inst, ctx, json, params);\n}, {\n    rest(rest) {\n        return this.clone({\n            ...this._zod.def,\n            rest: rest,\n        });\n    },\n    partial() {\n        const def = this._zod.def;\n        // a refinement was authored against the full arity; partialing would run it on a shorter array\n        if (def.checks?.length)\n            throw new Error(\".partial() cannot be used on tuple schemas containing refinements\");\n        return this.clone({\n            ...def,\n            items: def.items.map((item) => new ZodOptional({ type: \"optional\", innerType: item })),\n        });\n    },\n});\nexport function tuple(items, _paramsOrRest, _params) {\n    const hasRest = _paramsOrRest instanceof core.$ZodType;\n    const params = hasRest ? _params : _paramsOrRest;\n    const rest = hasRest ? _paramsOrRest : null;\n    return new ZodTuple({\n        type: \"tuple\",\n        items: items,\n        rest,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodRecord = /*@__PURE__*/ core.$constructor(\"ZodRecord\", (inst, def) => {\n    _ensureDefaultMemoizer();\n    core.$ZodRecord.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.recordProcessor(inst, ctx, json, params);\n    inst.keyType = def.keyType;\n    inst.valueType = def.valueType;\n});\nexport function record(keyType, valueType, params) {\n    // v3-compat: z.record(valueType, params?) — defaults keyType to z.string()\n    if (!valueType || !valueType._zod) {\n        return new ZodRecord({\n            type: \"record\",\n            keyType: string(),\n            valueType: keyType,\n            ...util.normalizeParams(valueType),\n        });\n    }\n    return new ZodRecord({\n        type: \"record\",\n        keyType,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// type alksjf = core.output<core.$ZodRecordKey>;\nexport function partialRecord(keyType, valueType, params) {\n    return new ZodRecord({\n        type: \"record\",\n        keyType,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n        partial: true,\n    });\n}\nexport function looseRecord(keyType, valueType, params) {\n    return new ZodRecord({\n        type: \"record\",\n        keyType,\n        valueType: valueType,\n        mode: \"loose\",\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMap = /*@__PURE__*/ core.$constructor(\"ZodMap\", (inst, def) => {\n    _ensureDefaultMemoizer();\n    core.$ZodMap.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.mapProcessor(inst, ctx, json, params);\n    inst.keyType = def.keyType;\n    inst.valueType = def.valueType;\n    inst.min = (...args) => inst.check(core._minSize(...args));\n    inst.nonempty = (params) => inst.check(core._minSize(1, params));\n    inst.max = (...args) => inst.check(core._maxSize(...args));\n    inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function map(keyType, valueType, params) {\n    return new ZodMap({\n        type: \"map\",\n        keyType: keyType,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodSet = /*@__PURE__*/ core.$constructor(\"ZodSet\", (inst, def) => {\n    _ensureDefaultMemoizer();\n    core.$ZodSet.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.setProcessor(inst, ctx, json, params);\n    inst.min = (...args) => inst.check(core._minSize(...args));\n    inst.nonempty = (params) => inst.check(core._minSize(1, params));\n    inst.max = (...args) => inst.check(core._maxSize(...args));\n    inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function set(valueType, params) {\n    return new ZodSet({\n        type: \"set\",\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodEnum = /*@__PURE__*/ core.$constructor(\"ZodEnum\", (inst, def) => {\n    core.$ZodEnum.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.enumProcessor(inst, ctx, json, params);\n    inst.enum = def.entries;\n    // reuse the parsed value set so a numeric TS enum's reverse-mapping keys stay out\n    inst.options = [...inst._zod.values];\n    const keys = new Set(Object.keys(def.entries));\n    inst.extract = (values, params) => {\n        const newEntries = {};\n        for (const value of values) {\n            if (keys.has(value)) {\n                newEntries[value] = def.entries[value];\n            }\n            else\n                throw new Error(`Key ${value} not found in enum`);\n        }\n        return new ZodEnum({\n            ...def,\n            checks: [],\n            ...util.normalizeParams(params),\n            entries: newEntries,\n        });\n    };\n    inst.exclude = (values, params) => {\n        const newEntries = { ...def.entries };\n        for (const value of values) {\n            if (keys.has(value)) {\n                delete newEntries[value];\n            }\n            else\n                throw new Error(`Key ${value} not found in enum`);\n        }\n        return new ZodEnum({\n            ...def,\n            checks: [],\n            ...util.normalizeParams(params),\n            entries: newEntries,\n        });\n    };\n});\nfunction _enum(values, params) {\n    const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n    return new ZodEnum({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport { _enum as enum };\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function nativeEnum(entries, params) {\n    return new ZodEnum({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodLiteral = /*@__PURE__*/ core.$constructor(\"ZodLiteral\", (inst, def) => {\n    core.$ZodLiteral.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.literalProcessor(inst, ctx, json, params);\n    inst.values = new Set(def.values);\n    Object.defineProperty(inst, \"value\", {\n        get() {\n            if (def.values.length > 1) {\n                throw new Error(\"This schema contains multiple valid literal values. Use `.values` instead.\");\n            }\n            return def.values[0];\n        },\n    });\n});\nexport function literal(value, params) {\n    return new ZodLiteral({\n        type: \"literal\",\n        values: Array.isArray(value) ? value : [value],\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodFile = /*@__PURE__*/ core.$constructor(\"ZodFile\", (inst, def) => {\n    core.$ZodFile.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.fileProcessor(inst, ctx, json, params);\n    inst.min = (size, params) => inst.check(core._minSize(size, params));\n    inst.max = (size, params) => inst.check(core._maxSize(size, params));\n    inst.mime = (types, params) => inst.check(core._mime(Array.isArray(types) ? types : [types], params));\n});\nexport function file(params) {\n    return core._file(ZodFile, params);\n}\nexport const ZodTransform = /*@__PURE__*/ core.$constructor(\"ZodTransform\", (inst, def) => {\n    _ensureDefaultMemoizer();\n    core.$ZodTransform.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.transformProcessor(inst, ctx, json, params);\n    inst._zod.parse = (payload, _ctx) => {\n        if (_ctx.direction === \"backward\") {\n            throw new core.$ZodEncodeError(inst.constructor.name);\n        }\n        payload.addIssue = (issue) => {\n            if (typeof issue === \"string\") {\n                payload.issues.push(util.issue(issue, payload.value, def));\n            }\n            else {\n                // for Zod 3 backwards compatibility\n                const _issue = issue;\n                if (_issue.fatal)\n                    _issue.continue = false;\n                _issue.code ?? (_issue.code = \"custom\");\n                if (!(\"input\" in _issue))\n                    _issue.input = payload.value;\n                _issue.inst ?? (_issue.inst = inst);\n                // _issue.continue ??= true;\n                payload.issues.push(util.issue(_issue));\n            }\n        };\n        const output = def.transform(payload.value, payload);\n        if (output instanceof Promise) {\n            return output.then((output) => {\n                payload.value = output;\n                return payload;\n            });\n        }\n        payload.value = output;\n        return payload;\n    };\n});\nexport function transform(fn) {\n    return new ZodTransform({\n        type: \"transform\",\n        transform: fn,\n    });\n}\nexport const ZodOptional = /*@__PURE__*/ core.$constructor(\"ZodOptional\", (inst, def) => {\n    core.$ZodOptional.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function optional(innerType) {\n    return new ZodOptional({\n        type: \"optional\",\n        innerType: innerType,\n    });\n}\nexport const ZodExactOptional = /*@__PURE__*/ core.$constructor(\"ZodExactOptional\", (inst, def) => {\n    core.$ZodExactOptional.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function exactOptional(innerType) {\n    return new ZodExactOptional({\n        type: \"optional\",\n        innerType: innerType,\n    });\n}\nexport const ZodNullable = /*@__PURE__*/ core.$constructor(\"ZodNullable\", (inst, def) => {\n    core.$ZodNullable.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.nullableProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nullable(innerType) {\n    return new ZodNullable({\n        type: \"nullable\",\n        innerType: innerType,\n    });\n}\n// nullish\nexport function nullish(innerType) {\n    return optional(nullable(innerType));\n}\nexport const ZodDefault = /*@__PURE__*/ core.$constructor(\"ZodDefault\", (inst, def) => {\n    core.$ZodDefault.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.defaultProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n    inst.removeDefault = inst.unwrap;\n});\nexport function _default(innerType, defaultValue) {\n    return new ZodDefault({\n        type: \"default\",\n        innerType: innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n        },\n    });\n}\nexport const ZodPrefault = /*@__PURE__*/ core.$constructor(\"ZodPrefault\", (inst, def) => {\n    core.$ZodPrefault.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.prefaultProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function prefault(innerType, defaultValue) {\n    return new ZodPrefault({\n        type: \"prefault\",\n        innerType: innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n        },\n    });\n}\nexport const ZodNonOptional = /*@__PURE__*/ core.$constructor(\"ZodNonOptional\", (inst, def) => {\n    core.$ZodNonOptional.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.nonoptionalProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nonoptional(innerType, params) {\n    return new ZodNonOptional({\n        type: \"nonoptional\",\n        innerType: innerType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodSuccess = /*@__PURE__*/ core.$constructor(\"ZodSuccess\", (inst, def) => {\n    core.$ZodSuccess.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.successProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function success(innerType) {\n    return new ZodSuccess({\n        type: \"success\",\n        innerType: innerType,\n    });\n}\nexport const ZodCatch = /*@__PURE__*/ core.$constructor(\"ZodCatch\", (inst, def) => {\n    core.$ZodCatch.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.catchProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n    inst.removeCatch = inst.unwrap;\n});\nfunction _catch(innerType, catchValue) {\n    return new ZodCatch({\n        type: \"catch\",\n        innerType: innerType,\n        catchValue: (typeof catchValue === \"function\" ? catchValue : core.util.constantCatch(catchValue)),\n    });\n}\nexport { _catch as catch };\nexport const ZodNaN = /*@__PURE__*/ core.$constructor(\"ZodNaN\", (inst, def) => {\n    core.$ZodNaN.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.nanProcessor(inst, ctx, json, params);\n});\nexport function nan(params) {\n    return core._nan(ZodNaN, params);\n}\nexport const ZodPipe = /*@__PURE__*/ core.$constructor(\"ZodPipe\", (inst, def) => {\n    core.$ZodPipe.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.pipeProcessor(inst, ctx, json, params);\n    inst.in = def.in;\n    inst.out = def.out;\n});\nexport function pipe(in_, out) {\n    return new ZodPipe({\n        type: \"pipe\",\n        in: in_,\n        out: out,\n        // ...util.normalizeParams(params),\n    });\n}\nexport const ZodCodec = /*@__PURE__*/ core.$constructor(\"ZodCodec\", (inst, def) => {\n    ZodPipe.init(inst, def);\n    core.$ZodCodec.init(inst, def);\n});\nexport function codec(in_, out, params) {\n    return new ZodCodec({\n        type: \"pipe\",\n        in: in_,\n        out: out,\n        transform: params.decode,\n        reverseTransform: params.encode,\n    });\n}\nexport function invertCodec(codec) {\n    const def = codec._zod.def;\n    return new ZodCodec({\n        type: \"pipe\",\n        in: def.out,\n        out: def.in,\n        transform: def.reverseTransform,\n        reverseTransform: def.transform,\n    });\n}\nexport const ZodPreprocess = /*@__PURE__*/ core.$constructor(\"ZodPreprocess\", (inst, def) => {\n    ZodPipe.init(inst, def);\n    core.$ZodPreprocess.init(inst, def);\n});\nexport const ZodReadonly = /*@__PURE__*/ core.$constructor(\"ZodReadonly\", (inst, def) => {\n    core.$ZodReadonly.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.readonlyProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function readonly(innerType) {\n    return new ZodReadonly({\n        type: \"readonly\",\n        innerType: innerType,\n    });\n}\nexport const ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"ZodTemplateLiteral\", (inst, def) => {\n    core.$ZodTemplateLiteral.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.templateLiteralProcessor(inst, ctx, json, params);\n});\nexport function templateLiteral(parts, params) {\n    return new ZodTemplateLiteral({\n        type: \"template_literal\",\n        parts,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodLazy = /*@__PURE__*/ core.$constructor(\"ZodLazy\", (inst, def) => {\n    core.$ZodLazy.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.lazyProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.getter();\n});\nexport function lazy(getter) {\n    return new ZodLazy({\n        type: \"lazy\",\n        getter: getter,\n    });\n}\nexport const ZodPromise = /*@__PURE__*/ core.$constructor(\"ZodPromise\", (inst, def) => {\n    core.$ZodPromise.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.promiseProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function promise(innerType) {\n    return new ZodPromise({\n        type: \"promise\",\n        innerType: innerType,\n    });\n}\nexport const ZodFunction = /*@__PURE__*/ core.$constructor(\"ZodFunction\", (inst, def) => {\n    core.$ZodFunction.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.functionProcessor(inst, ctx, json, params);\n});\nexport function _function(params) {\n    return new ZodFunction({\n        type: \"function\",\n        input: Array.isArray(params?.input) ? tuple(params?.input) : (params?.input ?? array(unknown())),\n        output: params?.output ?? unknown(),\n    });\n}\nexport { _function as function };\nexport const ZodCustom = /*@__PURE__*/ core.$constructor(\"ZodCustom\", (inst, def) => {\n    core.$ZodCustom.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.customProcessor(inst, ctx, json, params);\n});\n// custom checks\nexport function check(fn) {\n    const ch = new core.$ZodCheck({\n        check: \"custom\",\n        // ...util.normalizeParams(params),\n    });\n    ch._zod.check = fn;\n    return ch;\n}\nexport function custom(fn, _params) {\n    return core._custom(ZodCustom, fn ?? (() => true), _params);\n}\nexport function refine(fn, _params = {}) {\n    return core._refine(ZodCustom, fn, _params);\n}\n// superRefine\nexport function superRefine(fn, params) {\n    return core._superRefine(fn, params);\n}\n// Re-export describe and meta from core\nexport const describe = core.describe;\nexport const meta = core.meta;\nexport const ZodInstanceOf = /*@__PURE__*/ core.$constructor(\"ZodInstanceOf\", (inst, def) => {\n    ZodCustom.init(inst, def);\n}, {\n    properties(shape, params) {\n        // asserts in place, so the narrowed output type is truthful without a wrapper\n        return this.check(core._properties(shape, params));\n    },\n});\nfunction _instanceof(cls, params = {}) {\n    const inst = new ZodInstanceOf({\n        type: \"custom\",\n        check: \"custom\",\n        fn: (data) => data instanceof cls,\n        abort: true,\n        ...util.normalizeParams(params),\n    });\n    inst._zod.bag.Class = cls;\n    // Override check to emit invalid_type instead of custom\n    inst._zod.check = (payload) => {\n        if (!(payload.value instanceof cls)) {\n            payload.issues.push({\n                code: \"invalid_type\",\n                expected: cls.name,\n                input: payload.value,\n                inst,\n                path: [...(inst._zod.def.path ?? [])],\n            });\n        }\n    };\n    return inst;\n}\nexport { _instanceof as instanceof };\n// stringbool\nexport const stringbool = (...args) => core._stringbool({\n    Codec: ZodCodec,\n    Boolean: ZodBoolean,\n    String: ZodString,\n}, ...args);\nexport function json(params) {\n    const jsonSchema = lazy(() => {\n        return union([string(params), number(), boolean(), _null(), array(jsonSchema), record(string(), jsonSchema)]);\n    });\n    return jsonSchema;\n}\n// preprocess\nexport function preprocess(fn, schema) {\n    return new ZodPreprocess({\n        type: \"pipe\",\n        in: transform(fn),\n        out: schema,\n    });\n}\n","// Zod 3 compat layer\nimport * as core from \"../core/index.js\";\n/** @deprecated Use the raw string literal codes instead, e.g. \"invalid_type\". */\nexport const ZodIssueCode = {\n    invalid_type: \"invalid_type\",\n    too_big: \"too_big\",\n    too_small: \"too_small\",\n    invalid_format: \"invalid_format\",\n    not_multiple_of: \"not_multiple_of\",\n    unrecognized_keys: \"unrecognized_keys\",\n    invalid_union: \"invalid_union\",\n    invalid_key: \"invalid_key\",\n    invalid_element: \"invalid_element\",\n    invalid_value: \"invalid_value\",\n    custom: \"custom\",\n};\nexport { $brand, config } from \"../core/index.js\";\n/** @deprecated Use `z.config(params)` instead. */\nexport function setErrorMap(map) {\n    core.config({\n        customError: map,\n    });\n}\n/** @deprecated Use `z.config()` instead. */\nexport function getErrorMap() {\n    return core.config().customError;\n}\n/** @deprecated Do not use. Stub definition, only included for zod-to-json-schema compatibility. */\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n","import * as core from \"../core/index.js\";\nimport { ZodISODate, ZodISODateTime, ZodISODuration, ZodISOTime } from \"./schemas.js\";\nexport { ZodISODate, ZodISODateTime, ZodISODuration, ZodISOTime } from \"./schemas.js\";\nexport function datetime(params) {\n    return core._isoDateTime(ZodISODateTime, params);\n}\nexport function date(params) {\n    return core._isoDate(ZodISODate, params);\n}\nexport function time(params) {\n    return core._isoTime(ZodISOTime, params);\n}\nexport function duration(params) {\n    return core._isoDuration(ZodISODuration, params);\n}\n","import { globalRegistry } from \"../core/registries.js\";\nimport { assignProp, isPlainObject } from \"../core/util.js\";\nimport * as _checks from \"./checks.js\";\nimport * as _iso from \"./iso.js\";\nimport * as _schemas from \"./schemas.js\";\n// Local z object to avoid circular dependency with ../index.js\nconst z = {\n    ..._schemas,\n    ..._checks,\n    iso: _iso,\n};\n// Keys that are recognized and handled by the conversion logic\nconst RECOGNIZED_KEYS = /*@__PURE__*/ new Set([\n    // Schema identification\n    \"$schema\",\n    \"$ref\",\n    \"$defs\",\n    \"definitions\",\n    // Core schema keywords\n    \"$id\",\n    \"id\",\n    \"$comment\",\n    \"$anchor\",\n    \"$vocabulary\",\n    \"$dynamicRef\",\n    \"$dynamicAnchor\",\n    // Type\n    \"type\",\n    \"enum\",\n    \"const\",\n    // Composition\n    \"anyOf\",\n    \"oneOf\",\n    \"allOf\",\n    \"not\",\n    // Object\n    \"properties\",\n    \"required\",\n    \"additionalProperties\",\n    \"patternProperties\",\n    \"propertyNames\",\n    \"minProperties\",\n    \"maxProperties\",\n    // Array\n    \"items\",\n    \"prefixItems\",\n    \"additionalItems\",\n    \"minItems\",\n    \"maxItems\",\n    \"uniqueItems\",\n    \"contains\",\n    \"minContains\",\n    \"maxContains\",\n    // String\n    \"minLength\",\n    \"maxLength\",\n    \"pattern\",\n    \"format\",\n    // Number\n    \"minimum\",\n    \"maximum\",\n    \"exclusiveMinimum\",\n    \"exclusiveMaximum\",\n    \"multipleOf\",\n    // Already handled metadata\n    \"description\",\n    \"default\",\n    // Content\n    \"contentEncoding\",\n    \"contentMediaType\",\n    \"contentSchema\",\n    // Unsupported (error-throwing)\n    \"unevaluatedItems\",\n    \"unevaluatedProperties\",\n    \"if\",\n    \"then\",\n    \"else\",\n    \"dependentSchemas\",\n    \"dependentRequired\",\n    // OpenAPI\n    \"nullable\",\n    \"readOnly\",\n]);\nfunction detectVersion(schema, defaultTarget) {\n    const $schema = schema.$schema;\n    if ($schema === \"https://json-schema.org/draft/2020-12/schema\") {\n        return \"draft-2020-12\";\n    }\n    if ($schema === \"http://json-schema.org/draft-07/schema#\") {\n        return \"draft-7\";\n    }\n    if ($schema === \"http://json-schema.org/draft-04/schema#\") {\n        return \"draft-4\";\n    }\n    // Use defaultTarget if provided, otherwise default to draft-2020-12\n    return defaultTarget ?? \"draft-2020-12\";\n}\n// Positional schemas constrain the elements that are present; only minItems makes them required.\nfunction applyMinItems(items, minItems) {\n    return items.map((item, index) => (index < minItems ? item : item.optional()));\n}\n// Inverse of the encoding applied to $ref pointer segments in to-json-schema.ts. Per RFC 6901 the `~1` replacement must run before `~0`.\nfunction decodeJSONPointerSegment(segment) {\n    return segment.replace(/~1/g, \"/\").replace(/~0/g, \"~\");\n}\nfunction resolveRef(ref, ctx) {\n    if (!ref.startsWith(\"#\")) {\n        throw new Error(\"External $ref is not supported, only local refs (#/...) are allowed\");\n    }\n    const path = ref.slice(1).split(\"/\").filter(Boolean);\n    // Handle root reference \"#\"\n    if (path.length === 0) {\n        return ctx.rootSchema;\n    }\n    const defsKey = ctx.version === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n    if (path[0] === defsKey) {\n        const key = path[1] === undefined ? undefined : decodeJSONPointerSegment(path[1]);\n        if (!key || !ctx.defs[key]) {\n            throw new Error(`Reference not found: ${ref}`);\n        }\n        return ctx.defs[key];\n    }\n    throw new Error(`Reference not found: ${ref}`);\n}\n/**\n * Enforces the keywords that constrain an object's own keys — `propertyNames`,\n * `minProperties`, `maxProperties` — before `objectSchema` runs. The guard has\n * to see the raw input: an object parse drops `__proto__` and can add keys from\n * a property `default`, so its output is not the set of names the instance\n * actually carried.\n */\nfunction checkObjectGuards(objectSchema, guards) {\n    // An identity transform, not z.any(), so `toJSONSchema` reports the object on both the input and the output side of the pipe.\n    const guard = z\n        .transform((value) => value)\n        .check((payload) => {\n        const value = payload.value;\n        if (typeof value !== \"object\" || value === null || Array.isArray(value))\n            return;\n        const keys = Object.getOwnPropertyNames(value);\n        if (guards.minProperties !== undefined && keys.length < guards.minProperties) {\n            payload.issues.push({\n                origin: \"object\",\n                code: \"too_small\",\n                minimum: guards.minProperties,\n                inclusive: true,\n                message: `Too small: expected object to have >=${guards.minProperties} properties`,\n                input: value,\n                inst: objectSchema,\n                continue: true,\n            });\n        }\n        if (guards.maxProperties !== undefined && keys.length > guards.maxProperties) {\n            payload.issues.push({\n                origin: \"object\",\n                code: \"too_big\",\n                maximum: guards.maxProperties,\n                inclusive: true,\n                message: `Too big: expected object to have <=${guards.maxProperties} properties`,\n                input: value,\n                inst: objectSchema,\n                continue: true,\n            });\n        }\n        if (guards.keySchema) {\n            for (const key of keys) {\n                const result = guards.keySchema.safeParse(key);\n                if (result.success)\n                    continue;\n                payload.issues.push({\n                    code: \"invalid_key\",\n                    origin: \"record\",\n                    issues: result.error.issues,\n                    input: key,\n                    path: [key],\n                    continue: true,\n                });\n            }\n        }\n    });\n    return guard.pipe(objectSchema);\n}\n/**\n * An injective string for JSON data: two values share a key exactly when `uniqueItems` calls them\n * equal, so duplicate detection is a Map lookup rather than a pairwise walk. Strings and keys are\n * length-prefixed so no value can spell another one. `null` means \"never equal to anything\" — a\n * cycle or a NaN, neither of which JSON can express.\n */\nfunction canonicalKey(value, seen) {\n    if (value === null)\n        return \"z\";\n    const type = typeof value;\n    if (type !== \"object\") {\n        if (type === \"number\" && Number.isNaN(value))\n            return null;\n        const raw = String(value);\n        return `${type[0]}${raw.length}:${raw}`;\n    }\n    if (seen.has(value))\n        return null;\n    seen.add(value);\n    try {\n        if (Array.isArray(value)) {\n            const parts = [];\n            for (const item of value) {\n                const key = canonicalKey(item, seen);\n                if (key === null)\n                    return null;\n                parts.push(key);\n            }\n            return `a${parts.length}:[${parts.join(\",\")}]`;\n        }\n        const keys = Object.keys(value).sort();\n        const parts = [];\n        for (const k of keys) {\n            const key = canonicalKey(value[k], seen);\n            if (key === null)\n                return null;\n            parts.push(`${k.length}:${k}=${key}`);\n        }\n        return `o${parts.length}:{${parts.join(\",\")}}`;\n    }\n    finally {\n        seen.delete(value);\n    }\n}\n// keywords whose value is a schema or an array of them\nconst SCHEMA_KEYWORDS = /*@__PURE__*/ new Set([\n    \"items\",\n    \"prefixItems\",\n    \"additionalItems\",\n    \"additionalProperties\",\n    \"contains\",\n    \"propertyNames\",\n    \"not\",\n    \"if\",\n    \"then\",\n    \"else\",\n    \"allOf\",\n    \"anyOf\",\n    \"oneOf\",\n    \"unevaluatedItems\",\n    \"unevaluatedProperties\",\n    \"contentSchema\",\n]);\n// keywords whose value maps names to schemas. draft-7 `dependencies` also allows an array of property names, which holds no schema to walk\nconst SCHEMA_MAP_KEYWORDS = /*@__PURE__*/ new Set([\n    \"properties\",\n    \"patternProperties\",\n    \"dependentSchemas\",\n    \"dependencies\",\n    \"$defs\",\n    \"definitions\",\n]);\n/**\n * True when a subschema holds a `$ref` anywhere a schema can appear. Only those positions are\n * walked: `$ref` under `default` or an `x-` annotation is instance data with an ordinary key, and\n * reading it as a reference would drop a constraint that resolves perfectly well.\n */\nfunction containsRef(value) {\n    if (typeof value !== \"object\" || value === null)\n        return false;\n    if (Array.isArray(value))\n        return value.some(containsRef);\n    if (typeof value.$ref === \"string\")\n        return true;\n    return Object.entries(value).some(([key, sub]) => {\n        if (SCHEMA_KEYWORDS.has(key))\n            return containsRef(sub);\n        if (!SCHEMA_MAP_KEYWORDS.has(key) || typeof sub !== \"object\" || sub === null)\n            return false;\n        return Object.values(sub).some(containsRef);\n    });\n}\nfunction plural(n) {\n    return n === 1 ? \"element\" : \"elements\";\n}\n/**\n * Enforces `uniqueItems` and the `contains` family before `arraySchema` runs, for the same reason\n * `checkObjectGuards` runs pre-pipe: an item parse can apply a nested `default`, so the parsed\n * array is not the instance the keywords are defined over. A guard issue aborts the pipe, so\n * `minItems`/`maxItems` are not also reported on the same parse — instance correctness is worth\n * more than co-reporting two issues.\n */\nfunction checkArrayGuards(arraySchema, guards) {\n    // An identity transform, not z.any(), so `toJSONSchema` reports the array on both the input and the output side of the pipe.\n    const guard = z\n        .transform((value) => value)\n        .check((payload) => {\n        const items = payload.value;\n        if (!Array.isArray(items))\n            return;\n        if (guards.uniqueItems === true) {\n            const firstSeen = new Map();\n            for (let i = 0; i < items.length; i++) {\n                const key = canonicalKey(items[i], new Set());\n                if (key === null)\n                    continue;\n                const first = firstSeen.get(key);\n                if (first === undefined) {\n                    firstSeen.set(key, i);\n                    continue;\n                }\n                payload.issues.push({\n                    code: \"custom\",\n                    message: `Array items must be unique: element at index ${i} duplicates the one at index ${first}`,\n                    input: items,\n                    path: [i],\n                    continue: true,\n                });\n            }\n        }\n        if (guards.containsSchema) {\n            const minContains = guards.minContains ?? 1;\n            // one past the ceiling already proves the failure, and nothing above it changes the verdict\n            const ceiling = guards.maxContains !== undefined ? guards.maxContains + 1 : Number.POSITIVE_INFINITY;\n            let matches = 0;\n            for (const item of items) {\n                if (guards.containsSchema.safeParse(item).success && ++matches >= ceiling)\n                    break;\n            }\n            if (matches < minContains) {\n                // the scan ran to the end, so this count is exact\n                payload.issues.push({\n                    code: \"custom\",\n                    message: `Array must contain at least ${minContains} matching ${plural(minContains)}; found ${matches}`,\n                    input: items,\n                    continue: true,\n                });\n            }\n            if (guards.maxContains !== undefined && matches > guards.maxContains) {\n                payload.issues.push({\n                    code: \"custom\",\n                    message: `Array must contain at most ${guards.maxContains} matching ${plural(guards.maxContains)}`,\n                    input: items,\n                    continue: true,\n                });\n            }\n        }\n    });\n    return guard.pipe(arraySchema);\n}\nfunction getTupleRest(restSchema, ctx) {\n    if (restSchema === false) {\n        return undefined;\n    }\n    if (restSchema === undefined || restSchema === true) {\n        return z.any();\n    }\n    return convertSchema(restSchema, ctx);\n}\n// the RFC 3339 full-time keyword, narrower than `z.iso.time()`; local because sharing it via `timeSource` pins that builder into every bundle (+139 B gzipped on a mini `z.boolean()`)\nconst fullTime = /^(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|[+-](?:[01]\\d|2[0-3]):[0-5]\\d)$/;\nfunction convertBaseSchema(schema, ctx) {\n    // Handle unsupported features\n    if (schema.not !== undefined) {\n        // Special case: { not: {} } represents never\n        if (typeof schema.not === \"object\" && Object.keys(schema.not).length === 0) {\n            return z.never();\n        }\n        throw new Error(\"not is not supported in Zod (except { not: {} } for never)\");\n    }\n    if (schema.unevaluatedItems !== undefined) {\n        throw new Error(\"unevaluatedItems is not supported\");\n    }\n    if (schema.unevaluatedProperties !== undefined) {\n        throw new Error(\"unevaluatedProperties is not supported\");\n    }\n    if (schema.if !== undefined || schema.then !== undefined || schema.else !== undefined) {\n        throw new Error(\"Conditional schemas (if/then/else) are not supported\");\n    }\n    if (schema.dependentSchemas !== undefined || schema.dependentRequired !== undefined) {\n        throw new Error(\"dependentSchemas and dependentRequired are not supported\");\n    }\n    // Handle $ref\n    if (schema.$ref) {\n        const refPath = schema.$ref;\n        if (ctx.refs.has(refPath)) {\n            return ctx.refs.get(refPath);\n        }\n        if (ctx.processing.has(refPath)) {\n            // Circular reference - use lazy\n            return z.lazy(() => {\n                if (!ctx.refs.has(refPath)) {\n                    throw new Error(`Circular reference not resolved: ${refPath}`);\n                }\n                return ctx.refs.get(refPath);\n            });\n        }\n        ctx.processing.add(refPath);\n        const resolved = resolveRef(refPath, ctx);\n        const zodSchema = convertSchema(resolved, ctx);\n        ctx.refs.set(refPath, zodSchema);\n        ctx.processing.delete(refPath);\n        return zodSchema;\n    }\n    // Handle enum\n    if (schema.enum !== undefined) {\n        const enumValues = schema.enum;\n        // Special case: OpenAPI 3.0 null representation { type: \"string\", nullable: true, enum: [null] }\n        if (ctx.version === \"openapi-3.0\" &&\n            schema.nullable === true &&\n            enumValues.length === 1 &&\n            enumValues[0] === null) {\n            return z.null();\n        }\n        if (enumValues.length === 0) {\n            return z.never();\n        }\n        if (enumValues.length === 1) {\n            return z.literal(enumValues[0]);\n        }\n        // Check if all values are strings\n        if (enumValues.every((v) => typeof v === \"string\")) {\n            return z.enum(enumValues);\n        }\n        // Mixed types - use union of literals\n        const literalSchemas = enumValues.map((v) => z.literal(v));\n        if (literalSchemas.length < 2) {\n            return literalSchemas[0];\n        }\n        return z.union([literalSchemas[0], literalSchemas[1], ...literalSchemas.slice(2)]);\n    }\n    // Handle const\n    if (schema.const !== undefined) {\n        return z.literal(schema.const);\n    }\n    // Handle type\n    const type = schema.type;\n    if (Array.isArray(type)) {\n        // Expand type array into anyOf union\n        const typeSchemas = type.map((t) => {\n            const typeSchema = { ...schema, type: t };\n            return convertBaseSchema(typeSchema, ctx);\n        });\n        if (typeSchemas.length === 0) {\n            return z.never();\n        }\n        if (typeSchemas.length === 1) {\n            return typeSchemas[0];\n        }\n        return z.union(typeSchemas);\n    }\n    if (!type) {\n        // No type specified - empty schema (any)\n        return z.any();\n    }\n    let zodSchema;\n    switch (type) {\n        case \"string\": {\n            let stringSchema = z.string();\n            // Apply format using .check() with Zod format functions\n            if (schema.format) {\n                const format = schema.format;\n                // Map common formats to Zod check functions\n                if (format === \"email\") {\n                    stringSchema = stringSchema.check(z.email());\n                }\n                else if (format === \"uri\" || format === \"uri-reference\") {\n                    stringSchema = stringSchema.check(z.url());\n                }\n                else if (format === \"uuid\" || format === \"guid\") {\n                    stringSchema = stringSchema.check(z.uuid());\n                }\n                else if (format === \"date-time\") {\n                    stringSchema = stringSchema.check(z.iso.datetime({ offset: true }));\n                }\n                else if (format === \"date\") {\n                    stringSchema = stringSchema.check(z.iso.date());\n                }\n                else if (format === \"time\") {\n                    stringSchema = stringSchema.check(z.regex(fullTime));\n                }\n                else if (format === \"duration\") {\n                    stringSchema = stringSchema.check(z.iso.duration());\n                }\n                else if (format === \"hostname\") {\n                    stringSchema = stringSchema.check(z.hostname());\n                }\n                else if (format === \"ipv4\") {\n                    stringSchema = stringSchema.check(z.ipv4());\n                }\n                else if (format === \"ipv6\") {\n                    stringSchema = stringSchema.check(z.ipv6());\n                }\n                else if (format === \"mac\") {\n                    stringSchema = stringSchema.check(z.mac());\n                }\n                else if (format === \"cidr\") {\n                    stringSchema = stringSchema.check(z.cidrv4());\n                }\n                else if (format === \"cidr-v6\") {\n                    stringSchema = stringSchema.check(z.cidrv6());\n                }\n                else if (format === \"base64\") {\n                    stringSchema = stringSchema.check(z.base64());\n                }\n                else if (format === \"base64url\") {\n                    stringSchema = stringSchema.check(z.base64url());\n                }\n                else if (format === \"e164\") {\n                    stringSchema = stringSchema.check(z.e164());\n                }\n                else if (format === \"credit_card\") {\n                    stringSchema = stringSchema.check(z.creditCard());\n                }\n                else if (format === \"iban\") {\n                    stringSchema = stringSchema.check(z.iban());\n                }\n                else if (format === \"jwt\") {\n                    stringSchema = stringSchema.check(z.jwt());\n                }\n                else if (format === \"emoji\") {\n                    stringSchema = stringSchema.check(z.emoji());\n                }\n                else if (format === \"nanoid\") {\n                    stringSchema = stringSchema.check(z.nanoid());\n                }\n                else if (format === \"cuid\") {\n                    stringSchema = stringSchema.check(z.cuid());\n                }\n                else if (format === \"cuid2\") {\n                    stringSchema = stringSchema.check(z.cuid2());\n                }\n                else if (format === \"ulid\") {\n                    stringSchema = stringSchema.check(z.ulid());\n                }\n                else if (format === \"xid\") {\n                    stringSchema = stringSchema.check(z.xid());\n                }\n                else if (format === \"ksuid\") {\n                    stringSchema = stringSchema.check(z.ksuid());\n                }\n                // Note: json-string format is not currently supported by Zod\n                // Custom formats are ignored - keep as plain string\n            }\n            // Apply constraints\n            if (typeof schema.minLength === \"number\") {\n                stringSchema = stringSchema.min(schema.minLength);\n            }\n            if (typeof schema.maxLength === \"number\") {\n                stringSchema = stringSchema.max(schema.maxLength);\n            }\n            if (schema.pattern) {\n                // JSON Schema patterns are not implicitly anchored (match anywhere in string)\n                stringSchema = stringSchema.regex(new RegExp(schema.pattern));\n            }\n            zodSchema = stringSchema;\n            break;\n        }\n        case \"number\":\n        case \"integer\": {\n            let numberSchema = type === \"integer\" ? z.number().int() : z.number();\n            // Apply constraints\n            // In draft-04, `exclusiveMinimum: true` makes the sibling `minimum` exclusive rather than an independent bound, so the inclusive `.min()` is skipped; emitting it too would be dominated by the exclusive check and report a second, weaker issue.\n            if (typeof schema.minimum === \"number\" && schema.exclusiveMinimum !== true) {\n                numberSchema = numberSchema.min(schema.minimum);\n            }\n            if (typeof schema.maximum === \"number\" && schema.exclusiveMaximum !== true) {\n                numberSchema = numberSchema.max(schema.maximum);\n            }\n            if (typeof schema.exclusiveMinimum === \"number\") {\n                numberSchema = numberSchema.gt(schema.exclusiveMinimum);\n            }\n            else if (schema.exclusiveMinimum === true && typeof schema.minimum === \"number\") {\n                numberSchema = numberSchema.gt(schema.minimum);\n            }\n            if (typeof schema.exclusiveMaximum === \"number\") {\n                numberSchema = numberSchema.lt(schema.exclusiveMaximum);\n            }\n            else if (schema.exclusiveMaximum === true && typeof schema.maximum === \"number\") {\n                numberSchema = numberSchema.lt(schema.maximum);\n            }\n            if (typeof schema.multipleOf === \"number\") {\n                numberSchema = numberSchema.multipleOf(schema.multipleOf);\n            }\n            zodSchema = numberSchema;\n            break;\n        }\n        case \"boolean\": {\n            zodSchema = z.boolean();\n            break;\n        }\n        case \"null\": {\n            zodSchema = z.null();\n            break;\n        }\n        case \"object\": {\n            const shape = {};\n            const properties = schema.properties || {};\n            const requiredSet = new Set(schema.required || []);\n            const additionalSchema = typeof schema.additionalProperties === \"object\"\n                ? convertSchema(schema.additionalProperties, ctx)\n                : undefined;\n            // Convert properties - mark optional ones\n            for (const [key, propSchema] of Object.entries(properties)) {\n                const propZodSchema = convertSchema(propSchema, ctx);\n                // If not in required array, make it optional. assignProp so a __proto__ key becomes an own property instead of hitting the inherited setter\n                assignProp(shape, key, requiredSet.has(key) ? propZodSchema : propZodSchema.optional());\n            }\n            // Handle patternProperties\n            if (schema.patternProperties) {\n                // patternProperties: keys matching pattern must satisfy corresponding schema. Use loose records so non-matching keys pass through\n                const patternProps = schema.patternProperties;\n                const patternKeys = Object.keys(patternProps);\n                const looseRecords = [];\n                for (const pattern of patternKeys) {\n                    const patternValue = convertSchema(patternProps[pattern], ctx);\n                    const keySchema = z.string().regex(new RegExp(pattern));\n                    looseRecords.push(z.looseRecord(keySchema, patternValue));\n                }\n                // Build intersection: object schema + all pattern property records\n                const schemasToIntersect = [];\n                if (Object.keys(shape).length > 0) {\n                    // Use passthrough so patternProperties can validate additional keys\n                    schemasToIntersect.push(z.object(shape).passthrough());\n                }\n                schemasToIntersect.push(...looseRecords);\n                if (schemasToIntersect.length === 0) {\n                    zodSchema = z.object({}).passthrough();\n                }\n                else if (schemasToIntersect.length === 1) {\n                    zodSchema = schemasToIntersect[0];\n                }\n                else {\n                    // Chain intersections: (A & B) & C & D ...\n                    let result = z.intersection(schemasToIntersect[0], schemasToIntersect[1]);\n                    for (let i = 2; i < schemasToIntersect.length; i++) {\n                        result = z.intersection(result, schemasToIntersect[i]);\n                    }\n                    zodSchema = result;\n                }\n                // When additionalProperties is false, reject keys that are neither defined in properties nor matched by any patternProperty.\n                if (schema.additionalProperties === false) {\n                    const propertyKeys = Object.keys(shape);\n                    const patterns = patternKeys.map((p) => new RegExp(p));\n                    const basePatternSchema = zodSchema;\n                    zodSchema = zodSchema.check((payload) => {\n                        if (!isPlainObject(payload.value))\n                            return;\n                        const unrecognized = [];\n                        for (const key of Object.keys(payload.value)) {\n                            if (propertyKeys.includes(key))\n                                continue;\n                            if (patterns.some((regex) => regex.test(key)))\n                                continue;\n                            unrecognized.push(key);\n                        }\n                        if (unrecognized.length) {\n                            payload.issues.push({\n                                code: \"unrecognized_keys\",\n                                keys: unrecognized,\n                                input: payload.value,\n                                inst: basePatternSchema,\n                            });\n                        }\n                    });\n                }\n            }\n            else {\n                // Handle additionalProperties. In JSON Schema, additionalProperties defaults to true (allow any extra properties). In Zod, objects strip unknown keys by default, so we need to handle this explicitly\n                const objectSchema = z.object(shape);\n                if (schema.additionalProperties === false) {\n                    // Strict mode - no extra properties allowed\n                    zodSchema = objectSchema.strict();\n                }\n                else if (additionalSchema) {\n                    // Extra properties must match the specified schema\n                    zodSchema = objectSchema.catchall(additionalSchema);\n                }\n                else {\n                    // additionalProperties is true or undefined - allow any extra properties (passthrough)\n                    zodSchema = objectSchema.passthrough();\n                }\n            }\n            // propertyNames constrains key *names* only, and says nothing about which keys are required or how their values validate. Layering it on top of the result keeps properties/patternProperties/additionalProperties composing underneath. `true` allows every name, so it needs no guard.\n            const hasKeyGuard = schema.propertyNames !== undefined && schema.propertyNames !== true;\n            const minProperties = typeof schema.minProperties === \"number\" ? schema.minProperties : undefined;\n            const maxProperties = typeof schema.maxProperties === \"number\" ? schema.maxProperties : undefined;\n            if (hasKeyGuard || minProperties !== undefined || maxProperties !== undefined) {\n                let keySchema;\n                if (hasKeyGuard) {\n                    // Keys are always strings, so a propertyNames subschema that omits `type` still constrains them — without this it would convert to z.any().\n                    const keyJSONSchema = typeof schema.propertyNames === \"object\" && schema.propertyNames.type === undefined\n                        ? { type: \"string\", ...schema.propertyNames }\n                        : schema.propertyNames;\n                    keySchema = convertSchema(keyJSONSchema, ctx);\n                }\n                zodSchema = checkObjectGuards(zodSchema, { keySchema, minProperties, maxProperties });\n            }\n            break;\n        }\n        case \"array\": {\n            // Check if this is a tuple (prefixItems or items as array)\n            const prefixItems = schema.prefixItems;\n            const items = schema.items;\n            if (prefixItems && Array.isArray(prefixItems)) {\n                // Tuple with prefixItems (draft-2020-12)\n                const minItems = typeof schema.minItems === \"number\" ? schema.minItems : 0;\n                const tupleItems = prefixItems.map((item) => convertSchema(item, ctx));\n                const positionalItems = applyMinItems(tupleItems, minItems);\n                const rest = !Array.isArray(items) ? getTupleRest(items, ctx) : undefined;\n                const tupleSchema = z.tuple(positionalItems);\n                zodSchema = rest ? tupleSchema.rest(rest) : tupleSchema;\n                // Apply minItems/maxItems constraints to tuples\n                if (typeof schema.minItems === \"number\") {\n                    zodSchema = zodSchema.check(z.minLength(schema.minItems));\n                }\n                if (typeof schema.maxItems === \"number\") {\n                    zodSchema = zodSchema.check(z.maxLength(schema.maxItems));\n                }\n            }\n            else if (Array.isArray(items)) {\n                // Tuple with items array (draft-7)\n                const minItems = typeof schema.minItems === \"number\" ? schema.minItems : 0;\n                const tupleItems = items.map((item) => convertSchema(item, ctx));\n                const positionalItems = applyMinItems(tupleItems, minItems);\n                const rest = getTupleRest(schema.additionalItems, ctx);\n                const tupleSchema = z.tuple(positionalItems);\n                zodSchema = rest ? tupleSchema.rest(rest) : tupleSchema;\n                // Apply minItems/maxItems constraints to tuples\n                if (typeof schema.minItems === \"number\") {\n                    zodSchema = zodSchema.check(z.minLength(schema.minItems));\n                }\n                if (typeof schema.maxItems === \"number\") {\n                    zodSchema = zodSchema.check(z.maxLength(schema.maxItems));\n                }\n            }\n            else if (items !== undefined) {\n                // Regular array\n                const element = convertSchema(items, ctx);\n                let arraySchema = z.array(element);\n                // Apply constraints\n                if (typeof schema.minItems === \"number\") {\n                    arraySchema = arraySchema.min(schema.minItems);\n                }\n                if (typeof schema.maxItems === \"number\") {\n                    arraySchema = arraySchema.max(schema.maxItems);\n                }\n                zodSchema = arraySchema;\n            }\n            else {\n                // No items specified - array of any\n                zodSchema = z.array(z.any());\n            }\n            // minContains/maxContains only constrain anything when `contains` itself is present\n            if (schema.uniqueItems === true || schema.contains !== undefined) {\n                zodSchema = checkArrayGuards(zodSchema, {\n                    uniqueItems: schema.uniqueItems === true,\n                    containsSchema: schema.contains !== undefined ? convertSchema(schema.contains, ctx) : undefined,\n                    minContains: typeof schema.minContains === \"number\" ? schema.minContains : undefined,\n                    maxContains: typeof schema.maxContains === \"number\" ? schema.maxContains : undefined,\n                });\n            }\n            break;\n        }\n        default:\n            throw new Error(`Unsupported type: ${type}`);\n    }\n    return zodSchema;\n}\nfunction convertSchema(schema, ctx) {\n    if (typeof schema === \"boolean\") {\n        return schema ? z.any() : z.never();\n    }\n    // Convert base schema first (ignoring composition keywords)\n    let baseSchema = convertBaseSchema(schema, ctx);\n    const hasExplicitType = schema.type || schema.enum !== undefined || schema.const !== undefined;\n    // Process composition keywords LAST (they can appear together)\n    // Handle anyOf - wrap base schema with union\n    if (schema.anyOf && Array.isArray(schema.anyOf)) {\n        const options = schema.anyOf.map((s) => convertSchema(s, ctx));\n        const anyOfUnion = z.union(options);\n        baseSchema = hasExplicitType ? z.intersection(baseSchema, anyOfUnion) : anyOfUnion;\n    }\n    // Handle oneOf - exclusive union (exactly one must match)\n    if (schema.oneOf && Array.isArray(schema.oneOf)) {\n        const options = schema.oneOf.map((s) => convertSchema(s, ctx));\n        const oneOfUnion = z.xor(options);\n        baseSchema = hasExplicitType ? z.intersection(baseSchema, oneOfUnion) : oneOfUnion;\n    }\n    // Handle allOf - wrap base schema with intersection\n    if (schema.allOf && Array.isArray(schema.allOf)) {\n        if (schema.allOf.length === 0) {\n            baseSchema = hasExplicitType ? baseSchema : z.any();\n        }\n        else {\n            let result = hasExplicitType ? baseSchema : convertSchema(schema.allOf[0], ctx);\n            const startIdx = hasExplicitType ? 0 : 1;\n            for (let i = startIdx; i < schema.allOf.length; i++) {\n                result = z.intersection(result, convertSchema(schema.allOf[i], ctx));\n            }\n            baseSchema = result;\n        }\n    }\n    // Handle nullable (OpenAPI 3.0)\n    if (schema.nullable === true && ctx.version === \"openapi-3.0\") {\n        baseSchema = z.nullable(baseSchema);\n    }\n    // Handle readOnly\n    if (schema.readOnly === true) {\n        baseSchema = z.readonly(baseSchema);\n    }\n    // Apply `default` so it wraps the fully-composed schema. This ensures `parse(undefined) -> default` works regardless of which branch of `convertBaseSchema` produced the inner schema (enum/const/not/typed/etc.).\n    if (schema.default !== undefined) {\n        baseSchema = baseSchema.default(schema.default);\n    }\n    // Collect non-description annotation metadata into the user-supplied registry. Description is handled separately below via `.describe()` to preserve the contract that `schema.description` reads from globalRegistry.\n    const extraMeta = {};\n    const coreMetadataKeys = [\"$id\", \"id\", \"$comment\", \"$anchor\", \"$vocabulary\", \"$dynamicRef\", \"$dynamicAnchor\"];\n    for (const key of coreMetadataKeys) {\n        if (key in schema) {\n            extraMeta[key] = schema[key];\n        }\n    }\n    const contentMetadataKeys = [\"contentEncoding\", \"contentMediaType\", \"contentSchema\"];\n    for (const key of contentMetadataKeys) {\n        if (key in schema) {\n            extraMeta[key] = schema[key];\n        }\n    }\n    // `propertyNames` and `contains` are enforced by a guard, which `toJSONSchema` cannot infer, so the original keyword is carried as metadata to keep the round-trip lossless. Only where it was actually applied: on any other type it is inert, and on a `$ref` the metadata would land on the target every reference shares. A carried subschema is copied verbatim while the root `$defs` stay behind, so one holding a `$ref` is dropped rather than emitted as a dangling reference.\n    if (schema.type === \"object\" && schema.$ref === undefined) {\n        if (schema.propertyNames !== undefined && !containsRef(schema.propertyNames)) {\n            extraMeta.propertyNames = schema.propertyNames;\n        }\n        for (const key of [\"minProperties\", \"maxProperties\"]) {\n            if (schema[key] !== undefined)\n                extraMeta[key] = schema[key];\n        }\n    }\n    if (schema.type === \"array\" && schema.$ref === undefined) {\n        if (schema.contains !== undefined && !containsRef(schema.contains)) {\n            extraMeta.contains = schema.contains;\n        }\n        for (const key of [\"uniqueItems\", \"minContains\", \"maxContains\"]) {\n            if (schema[key] !== undefined)\n                extraMeta[key] = schema[key];\n        }\n    }\n    for (const key of Object.keys(schema)) {\n        if (!RECOGNIZED_KEYS.has(key)) {\n            assignProp(extraMeta, key, schema[key]);\n        }\n    }\n    if (Object.keys(extraMeta).length > 0) {\n        ctx.registry.add(baseSchema, extraMeta);\n    }\n    // Apply description last. `.describe()` clones the schema and sets `_zod.parent` on the clone, so registry lookups on the returned reference still resolve `extraMeta` via parent inheritance.\n    if (schema.description) {\n        baseSchema = baseSchema.describe(schema.description);\n    }\n    return baseSchema;\n}\n/**\n * Converts a JSON Schema to a Zod schema. This function should be considered semi-experimental. It's behavior is liable to change. */\nexport function fromJSONSchema(schema, params) {\n    // Handle boolean schemas\n    if (typeof schema === \"boolean\") {\n        return schema ? z.any() : z.never();\n    }\n    // Normalize input via a JSON round-trip. This guarantees the converter walks a plain, finite, JSON-valid object graph: cyclic inputs fail here, getter/Proxy-based properties are materialized into static values, and class instances collapse to plain objects.\n    let normalized;\n    try {\n        normalized = JSON.parse(JSON.stringify(schema));\n    }\n    catch {\n        throw new Error(\"fromJSONSchema input is not valid JSON (possibly cyclic); use $defs/$ref for recursive schemas\");\n    }\n    const version = detectVersion(normalized, params?.defaultTarget);\n    const defs = (normalized.$defs || normalized.definitions || {});\n    const ctx = {\n        version,\n        defs,\n        refs: new Map(),\n        processing: new Set(),\n        rootSchema: normalized,\n        registry: params?.registry ?? globalRegistry,\n    };\n    return convertSchema(normalized, ctx);\n}\n","// Traversal pattern adapted from Jaen's v3 `mapOnSchema` (Apache-2.0): https://gist.github.com/jaens/7e15ae1984bb338c86eb5e452dee3010\nimport * as schemas from \"./schemas.js\";\nimport { clone } from \"./util.js\";\nconst RESOLVING = Symbol(\"z.visit/resolving\");\nexport function visit(schema, fnOrHandlers) {\n    const fn = typeof fnOrHandlers === \"function\"\n        ? fnOrHandlers\n        : (node, rewritten) => {\n            // A union of handlers isn't callable with one argument; handler `K` only ever sees kind `K`.\n            const h = fnOrHandlers[node._zod.def.type];\n            return h ? h(node, rewritten) : node;\n        };\n    const cache = new Map();\n    function run(s) {\n        const cached = cache.get(s);\n        if (cached === RESOLVING) {\n            // Non-lazy cycle. Defer to parse time, when the cache holds the finished node.\n            return new schemas.$ZodLazy({\n                type: \"lazy\",\n                getter: () => cache.get(s),\n            });\n        }\n        if (cached !== undefined)\n            return cached;\n        cache.set(s, RESOLVING);\n        const inner = mapInner(s);\n        const mapped = fn(inner, inner !== s);\n        cache.set(s, mapped);\n        return mapped;\n    }\n    function mapInner(s) {\n        const def = s._zod.def;\n        const kind = def.type;\n        switch (kind) {\n            case \"object\": {\n                const oldShape = def.shape;\n                const keys = Object.keys(oldShape);\n                let changed = false;\n                const newShape = {};\n                for (const k of keys) {\n                    const mapped = run(oldShape[k]);\n                    if (mapped !== oldShape[k])\n                        changed = true;\n                    newShape[k] = mapped;\n                }\n                let newCatchall = def.catchall;\n                if (def.catchall) {\n                    newCatchall = run(def.catchall);\n                    if (newCatchall !== def.catchall)\n                        changed = true;\n                }\n                return changed ? clone(s, { ...def, shape: newShape, catchall: newCatchall }) : s;\n            }\n            case \"array\": {\n                const mapped = run(def.element);\n                return mapped === def.element ? s : clone(s, { ...def, element: mapped });\n            }\n            case \"tuple\": {\n                const oldItems = def.items;\n                let changed = false;\n                const newItems = [];\n                for (const item of oldItems) {\n                    const mapped = run(item);\n                    if (mapped !== item)\n                        changed = true;\n                    newItems.push(mapped);\n                }\n                let newRest = def.rest;\n                if (def.rest) {\n                    newRest = run(def.rest);\n                    if (newRest !== def.rest)\n                        changed = true;\n                }\n                return changed ? clone(s, { ...def, items: newItems, rest: newRest }) : s;\n            }\n            case \"record\":\n            case \"map\": {\n                const newKey = run(def.keyType);\n                const newVal = run(def.valueType);\n                return newKey === def.keyType && newVal === def.valueType\n                    ? s\n                    : clone(s, { ...def, keyType: newKey, valueType: newVal });\n            }\n            case \"set\": {\n                const newVal = run(def.valueType);\n                return newVal === def.valueType ? s : clone(s, { ...def, valueType: newVal });\n            }\n            case \"union\": {\n                const oldOptions = def.options;\n                let changed = false;\n                const newOptions = [];\n                for (const opt of oldOptions) {\n                    const mapped = run(opt);\n                    if (mapped !== opt)\n                        changed = true;\n                    newOptions.push(mapped);\n                }\n                return changed ? clone(s, { ...def, options: newOptions }) : s;\n            }\n            case \"intersection\": {\n                const newLeft = run(def.left);\n                const newRight = run(def.right);\n                return newLeft === def.left && newRight === def.right\n                    ? s\n                    : clone(s, { ...def, left: newLeft, right: newRight });\n            }\n            case \"optional\":\n            case \"nullable\":\n            case \"default\":\n            case \"prefault\":\n            case \"catch\":\n            case \"readonly\":\n            case \"nonoptional\":\n            case \"promise\":\n            case \"success\": {\n                const newInner = run(def.innerType);\n                return newInner === def.innerType ? s : clone(s, { ...def, innerType: newInner });\n            }\n            case \"pipe\": {\n                const newIn = run(def.in);\n                const newOut = run(def.out);\n                return newIn === def.in && newOut === def.out ? s : clone(s, { ...def, in: newIn, out: newOut });\n            }\n            case \"function\": {\n                const newInput = run(def.input);\n                const newOutput = run(def.output);\n                return newInput === def.input && newOutput === def.output\n                    ? s\n                    : clone(s, { ...def, input: newInput, output: newOutput });\n            }\n            case \"lazy\": {\n                // Invoking the getter here would trip the cycle check, so lazy nodes always re-clone.\n                const original = def.getter;\n                // Drop the memo, or it shadows the new getter forever.\n                const { _cachedInner, ...rest } = def;\n                return clone(s, { ...rest, getter: () => run(original()) });\n            }\n            // A leaf by choice: `parts` are regex fragments, not data positions.\n            case \"template_literal\":\n            // Leaves.\n            case \"string\":\n            case \"number\":\n            case \"int\":\n            case \"boolean\":\n            case \"bigint\":\n            case \"symbol\":\n            case \"undefined\":\n            case \"null\":\n            case \"void\":\n            case \"never\":\n            case \"any\":\n            case \"unknown\":\n            case \"date\":\n            case \"nan\":\n            case \"enum\":\n            case \"literal\":\n            case \"file\":\n            case \"transform\":\n            case \"custom\":\n                return s;\n            default: {\n                // A new built-in kind becomes a compile error here; unknown user kinds fall through.\n                kind;\n                return s;\n            }\n        }\n    }\n    return run(schema);\n}\n","import { visit } from \"../core/visit.js\";\nimport * as schemas from \"./schemas.js\";\n/** Returns a copy of the schema with every nested object's properties made optional. */\nexport function deepPartial(schema) {\n    return visit(schema, {\n        object: (s) => s.partial(),\n        // Every partialed option now admits `undefined`, which the constructor rejects as a duplicate.\n        union: (s) => {\n            const def = s._zod.def;\n            return def.discriminator === undefined ? s : schemas.union(def.options);\n        },\n    });\n}\n","import { clone, mergeDefs } from \"../core/util.js\";\nimport { visit } from \"../core/visit.js\";\nimport * as schemas from \"./schemas.js\";\n/** Appends a pipe's own checks to the side that replaces it, mirroring how `.check()` clones. */\nfunction withChecks(side, checks) {\n    if (!checks?.length)\n        return side;\n    const def = side._zod.def;\n    return clone(side, mergeDefs(def, { checks: [...(def.checks ?? []), ...checks] }), { parent: true });\n}\n/** The out side, carrying the pipe's own checks: those run against the decoded value, which is what `out` produces. */\nfunction outSide(def) {\n    return withChecks(def.out, def.checks);\n}\n/** The in side. `z.preprocess` pipes a transform into a schema, and a bare transform validates nothing, so the schema it feeds is the real input side — the resolution `toJSONSchema` already makes for this case. */\nfunction inSide(def) {\n    return def.in._zod.traits.has(\"$ZodTransform\") ? outSide(def) : def.in;\n}\n/** Returns a copy of the schema with every pipe replaced by its input side. A codec's checks are dropped: they constrain the decoded value the input side never produces. */\nexport function input(schema) {\n    return visit(schema, {\n        pipe: (s) => inSide(s._zod.def),\n        // A default value belongs to the output side, so a rewritten inner type leaves it stranded. `.default()` widens the declared input type with `undefined`, and `optional` is what carries that across.\n        default: (s, rewritten) => (rewritten ? schemas.optional(s._zod.def.innerType) : s),\n        // A catch value is output-side too, but `.catch()` leaves the declared input type alone, so the inner schema stands on its own.\n        catch: (s, rewritten) => (rewritten ? s._zod.def.innerType : s),\n    });\n}\n/** Returns a copy of the schema with every pipe replaced by its output side, carrying over the pipe's own checks. */\nexport function output(schema) {\n    return visit(schema, {\n        pipe: (s) => outSide(s._zod.def),\n        // A prefault value is fed through the schema, which makes it input-side, so a rewritten inner type leaves it stranded.\n        prefault: (s, rewritten) => (rewritten ? s._zod.def.innerType : s),\n    });\n}\n","import * as core from \"../core/index.js\";\nimport * as schemas from \"./schemas.js\";\nexport function string(params) {\n    return core._coercedString(schemas.ZodString, params);\n}\nexport function number(params) {\n    return core._coercedNumber(schemas.ZodNumber, params);\n}\nexport function boolean(params) {\n    return core._coercedBoolean(schemas.ZodBoolean, params);\n}\nexport function bigint(params) {\n    return core._coercedBigint(schemas.ZodBigInt, params);\n}\nexport function date(params) {\n    return core._coercedDate(schemas.ZodDate, params);\n}\n","export * as core from \"../core/index.js\";\nexport * from \"./schemas.js\";\nexport * from \"./checks.js\";\nexport * from \"./errors.js\";\nexport * from \"./parse.js\";\nexport * from \"./compat.js\";\nexport { globalRegistry, registry, config, memoizer, $output, $input, $brand, clone, regexes, treeifyError, prettifyError, formatError, flattenError, TimePrecision, util, NEVER, INVALID, toZod, compile, withParser, ZodCompileAsyncError, ZodCompileUnsupportedError, getDiscriminatedOption, } from \"../core/index.js\";\nexport { toJSONSchema } from \"../core/json-schema-processors.js\";\nexport { fromJSONSchema } from \"./from-json-schema.js\";\nexport { deepPartial } from \"./deep-partial.js\";\n// Types and values both, from one module — re-exporting the types from core would collide.\nexport { input, output } from \"./in-out.js\";\nexport * as locales from \"../locales/index.js\";\n// iso must be exported from top-level https://github.com/colinhacks/zod/issues/4491\nexport { ZodISODateTime, ZodISODate, ZodISOTime, ZodISODuration } from \"./iso.js\";\nexport * as iso from \"./iso.js\";\nexport * as coerce from \"./coerce.js\";\n","import * as z from \"./v4/classic/external.js\";\nexport * from \"./v4/classic/external.js\";\n// Aliasing the binding, instead of `export default z`, keeps the default export a\n// re-export of `z` rather than a fresh namespace value. Rollup and Webpack can then\n// shake `import z from \"zod\"` as they already shake `import { z } from \"zod\"` — without\n// this they pull in every locale. See #6050.\nexport { z, z as default };\n","import { homedir } from \"node:os\";\nimport { join } from \"node:path\";\n\nexport const LAUNCHD_LABEL = \"com.ronen.threadbase\";\nexport const TASK_NAME = process.env.THREADBASE_TASK_NAME ?? \"Threadbase\";\nexport const DEFAULT_PROD_PORT = 8766;\n\nexport function installDir(): string {\n  return process.env.THREADBASE_INSTALL_DIR ?? join(homedir(), \".threadbase\");\n}\n\nexport function markerPath(): string {\n  return join(installDir(), \"prod-suspended.json\");\n}\n\nexport function prefsPath(): string {\n  return join(installDir(), \"dev-prefs.json\");\n}\n\nexport function activeLink(): string {\n  return join(installDir(), \"cli.js\");\n}\n\n/**\n * Absolute paths to the supervised streamer's stdout/stderr logs — the single\n * source of truth every supervisor backend and deploy script must agree on.\n *\n * macOS points the plist's StandardOutPath/StandardErrorPath here; Windows has\n * no native redirection, so `scripts/deploy.ps1` writes the same two paths into\n * launch.cmd as cmd `>>` targets. That agreement is what `tb-streamer prod logs`\n * depends on, and it is locked by `__tests__/deploy-windows-script.test.ts`.\n */\nexport function logPaths(): { stdout: string; stderr: string } {\n  const dir = join(installDir(), \"logs\");\n  return { stdout: join(dir, \"stdout.log\"), stderr: join(dir, \"stderr.log\") };\n}\n","// Pasted with modifications from: https://raw.githubusercontent.com/anonyco/FastestSmallestTextEncoderDecoder/master/EncoderDecoderTogether.src.js\n/* eslint no-fallthrough: 0 */\n\nconst fromCharCode = String.fromCharCode;\nconst encoderRegexp = /[\\x80-\\uD7ff\\uDC00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]?/g;\nconst tmpBufferU16 = new Uint16Array(32);\n\nexport class TextDecoder {\n  decode(inputArrayOrBuffer: Uint8Array | ArrayBuffer | SharedArrayBuffer): string {\n    const inputAs8 = inputArrayOrBuffer instanceof Uint8Array ? inputArrayOrBuffer : new Uint8Array(inputArrayOrBuffer);\n\n    let resultingString = '',\n      tmpStr = '',\n      index = 0,\n      nextEnd = 0,\n      cp0 = 0,\n      codePoint = 0,\n      minBits = 0,\n      cp1 = 0,\n      pos = 0,\n      tmp = -1;\n    const len = inputAs8.length | 0;\n    const lenMinus32 = (len - 32) | 0;\n    // Note that tmp represents the 2nd half of a surrogate pair incase a surrogate gets divided between blocks\n    for (; index < len; ) {\n      nextEnd = index <= lenMinus32 ? 32 : (len - index) | 0;\n      for (; pos < nextEnd; index = (index + 1) | 0, pos = (pos + 1) | 0) {\n        // @ts-expect-error ignoring unchecked index\n        cp0 = inputAs8[index] & 0xff;\n        switch (cp0 >> 4) {\n          case 15:\n            // @ts-expect-error ignoring unchecked index\n            cp1 = inputAs8[(index = (index + 1) | 0)] & 0xff;\n            if (cp1 >> 6 !== 0b10 || 0b11110111 < cp0) {\n              index = (index - 1) | 0;\n              break;\n            }\n            codePoint = ((cp0 & 0b111) << 6) | (cp1 & 0b00111111);\n            minBits = 5; // 20 ensures it never passes -> all invalid replacements\n            cp0 = 0x100; //  keep track of th bit size\n          case 14:\n            // @ts-expect-error ignoring unchecked index\n            cp1 = inputAs8[(index = (index + 1) | 0)] & 0xff;\n            codePoint <<= 6;\n            codePoint |= ((cp0 & 0b1111) << 6) | (cp1 & 0b00111111);\n            minBits = cp1 >> 6 === 0b10 ? (minBits + 4) | 0 : 24; // 24 ensures it never passes -> all invalid replacements\n            cp0 = (cp0 + 0x100) & 0x300; // keep track of th bit size\n          case 13:\n          case 12:\n            // @ts-expect-error ignoring unchecked index\n            cp1 = inputAs8[(index = (index + 1) | 0)] & 0xff;\n            codePoint <<= 6;\n            codePoint |= ((cp0 & 0b11111) << 6) | (cp1 & 0b00111111);\n            minBits = (minBits + 7) | 0;\n\n            // Now, process the code point\n            if (index < len && cp1 >> 6 === 0b10 && codePoint >> minBits && codePoint < 0x110000) {\n              cp0 = codePoint;\n              codePoint = (codePoint - 0x10000) | 0;\n              if (0 <= codePoint /*0xffff < codePoint*/) {\n                // BMP code point\n                //nextEnd = nextEnd - 1|0;\n\n                tmp = ((codePoint >> 10) + 0xd800) | 0; // highSurrogate\n                cp0 = ((codePoint & 0x3ff) + 0xdc00) | 0; // lowSurrogate (will be inserted later in the switch-statement)\n\n                if (pos < 31) {\n                  // notice 31 instead of 32\n                  tmpBufferU16[pos] = tmp;\n                  pos = (pos + 1) | 0;\n                  tmp = -1;\n                } else {\n                  // else, we are at the end of the inputAs8 and let tmp0 be filled in later on\n                  // NOTE that cp1 is being used as a temporary variable for the swapping of tmp with cp0\n                  cp1 = tmp;\n                  tmp = cp0;\n                  cp0 = cp1;\n                }\n              } else nextEnd = (nextEnd + 1) | 0; // because we are advancing i without advancing pos\n            } else {\n              // invalid code point means replacing the whole thing with null replacement characters\n              cp0 >>= 8;\n              index = (index - cp0 - 1) | 0; // reset index  back to what it was before\n              cp0 = 0xfffd;\n            }\n\n            // Finally, reset the variables for the next go-around\n            minBits = 0;\n            codePoint = 0;\n            nextEnd = index <= lenMinus32 ? 32 : (len - index) | 0;\n          /*case 11:\n        case 10:\n        case 9:\n        case 8:\n          codePoint ? codePoint = 0 : cp0 = 0xfffd; // fill with invalid replacement character\n        case 7:\n        case 6:\n        case 5:\n        case 4:\n        case 3:\n        case 2:\n        case 1:\n        case 0:\n          tmpBufferU16[pos] = cp0;\n          continue;*/\n          default: // fill with invalid replacement character\n            tmpBufferU16[pos] = cp0;\n            continue;\n          case 11:\n          case 10:\n          case 9:\n          case 8:\n        }\n        tmpBufferU16[pos] = 0xfffd; // fill with invalid replacement character\n      }\n      tmpStr += fromCharCode(\n        // @ts-expect-error ignoring unchecked index\n        tmpBufferU16[0],\n        tmpBufferU16[1],\n        tmpBufferU16[2],\n        tmpBufferU16[3],\n        tmpBufferU16[4],\n        tmpBufferU16[5],\n        tmpBufferU16[6],\n        tmpBufferU16[7],\n        tmpBufferU16[8],\n        tmpBufferU16[9],\n        tmpBufferU16[10],\n        tmpBufferU16[11],\n        tmpBufferU16[12],\n        tmpBufferU16[13],\n        tmpBufferU16[14],\n        tmpBufferU16[15],\n        tmpBufferU16[16],\n        tmpBufferU16[17],\n        tmpBufferU16[18],\n        tmpBufferU16[19],\n        tmpBufferU16[20],\n        tmpBufferU16[21],\n        tmpBufferU16[22],\n        tmpBufferU16[23],\n        tmpBufferU16[24],\n        tmpBufferU16[25],\n        tmpBufferU16[26],\n        tmpBufferU16[27],\n        tmpBufferU16[28],\n        tmpBufferU16[29],\n        tmpBufferU16[30],\n        tmpBufferU16[31]\n      );\n      if (pos < 32) tmpStr = tmpStr.slice(0, (pos - 32) | 0); //-(32-pos));\n      if (index < len) {\n        //fromCharCode.apply(0, tmpBufferU16 : Uint8Array ?  tmpBufferU16.subarray(0,pos) : tmpBufferU16.slice(0,pos));\n        tmpBufferU16[0] = tmp;\n        pos = ~tmp >>> 31; //tmp !== -1 ? 1 : 0;\n        tmp = -1;\n\n        if (tmpStr.length < resultingString.length) continue;\n      } else if (tmp !== -1) {\n        tmpStr += fromCharCode(tmp);\n      }\n\n      resultingString += tmpStr;\n      tmpStr = '';\n    }\n\n    return resultingString;\n  }\n}\n\n//////////////////////////////////////////////////////////////////////////////////////\nfunction encoderReplacer(nonAsciiChars: string) {\n  // make the UTF string into a binary UTF-8 encoded string\n  let point = nonAsciiChars.charCodeAt(0) | 0;\n  if (0xd800 <= point) {\n    if (point <= 0xdbff) {\n      const nextcode = nonAsciiChars.charCodeAt(1) | 0; // defaults to 0 when NaN, causing null replacement character\n\n      if (0xdc00 <= nextcode && nextcode <= 0xdfff) {\n        //point = ((point - 0xD800)<<10) + nextcode - 0xDC00 + 0x10000|0;\n        point = ((point << 10) + nextcode - 0x35fdc00) | 0;\n        if (point > 0xffff)\n          return fromCharCode(\n            (0x1e /*0b11110*/ << 3) | (point >> 18),\n            (0x2 /*0b10*/ << 6) | ((point >> 12) & 0x3f) /*0b00111111*/,\n            (0x2 /*0b10*/ << 6) | ((point >> 6) & 0x3f) /*0b00111111*/,\n            (0x2 /*0b10*/ << 6) | (point & 0x3f) /*0b00111111*/\n          );\n      } else point = 65533 /*0b1111111111111101*/; //return '\\xEF\\xBF\\xBD';//fromCharCode(0xef, 0xbf, 0xbd);\n    } else if (point <= 0xdfff) {\n      point = 65533 /*0b1111111111111101*/; //return '\\xEF\\xBF\\xBD';//fromCharCode(0xef, 0xbf, 0xbd);\n    }\n  }\n  /*if (point <= 0x007f) return nonAsciiChars;\n  else */ if (point <= 0x07ff) {\n    return fromCharCode((0x6 << 5) | (point >> 6), (0x2 << 6) | (point & 0x3f));\n  } else\n    return fromCharCode(\n      (0xe /*0b1110*/ << 4) | (point >> 12),\n      (0x2 /*0b10*/ << 6) | ((point >> 6) & 0x3f) /*0b00111111*/,\n      (0x2 /*0b10*/ << 6) | (point & 0x3f) /*0b00111111*/\n    );\n}\n\nexport class TextEncoder {\n  public encode(inputString: string): Uint8Array {\n    // 0xc0 => 0b11000000; 0xff => 0b11111111; 0xc0-0xff => 0b11xxxxxx\n    // 0x80 => 0b10000000; 0xbf => 0b10111111; 0x80-0xbf => 0b10xxxxxx\n    const encodedString = inputString === void 0 ? '' : '' + inputString,\n      len = encodedString.length | 0;\n    let result = new Uint8Array(((len << 1) + 8) | 0);\n    let tmpResult: Uint8Array;\n    let i = 0,\n      pos = 0,\n      point = 0,\n      nextcode = 0;\n    let upgradededArraySize = !Uint8Array; // normal arrays are auto-expanding\n    for (i = 0; i < len; i = (i + 1) | 0, pos = (pos + 1) | 0) {\n      point = encodedString.charCodeAt(i) | 0;\n      if (point <= 0x007f) {\n        result[pos] = point;\n      } else if (point <= 0x07ff) {\n        result[pos] = (0x6 << 5) | (point >> 6);\n        result[(pos = (pos + 1) | 0)] = (0x2 << 6) | (point & 0x3f);\n      } else {\n        widenCheck: {\n          if (0xd800 <= point) {\n            if (point <= 0xdbff) {\n              nextcode = encodedString.charCodeAt((i = (i + 1) | 0)) | 0; // defaults to 0 when NaN, causing null replacement character\n\n              if (0xdc00 <= nextcode && nextcode <= 0xdfff) {\n                //point = ((point - 0xD800)<<10) + nextcode - 0xDC00 + 0x10000|0;\n                point = ((point << 10) + nextcode - 0x35fdc00) | 0;\n                if (point > 0xffff) {\n                  result[pos] = (0x1e /*0b11110*/ << 3) | (point >> 18);\n                  result[(pos = (pos + 1) | 0)] = (0x2 /*0b10*/ << 6) | ((point >> 12) & 0x3f) /*0b00111111*/;\n                  result[(pos = (pos + 1) | 0)] = (0x2 /*0b10*/ << 6) | ((point >> 6) & 0x3f) /*0b00111111*/;\n                  result[(pos = (pos + 1) | 0)] = (0x2 /*0b10*/ << 6) | (point & 0x3f) /*0b00111111*/;\n                  continue;\n                }\n                break widenCheck;\n              }\n              point = 65533 /*0b1111111111111101*/; //return '\\xEF\\xBF\\xBD';//fromCharCode(0xef, 0xbf, 0xbd);\n            } else if (point <= 0xdfff) {\n              point = 65533 /*0b1111111111111101*/; //return '\\xEF\\xBF\\xBD';//fromCharCode(0xef, 0xbf, 0xbd);\n            }\n          }\n          if (!upgradededArraySize && i << 1 < pos && i << 1 < ((pos - 7) | 0)) {\n            upgradededArraySize = true;\n            tmpResult = new Uint8Array(len * 3);\n            tmpResult.set(result);\n            result = tmpResult;\n          }\n        }\n        result[pos] = (0xe /*0b1110*/ << 4) | (point >> 12);\n        result[(pos = (pos + 1) | 0)] = (0x2 /*0b10*/ << 6) | ((point >> 6) & 0x3f) /*0b00111111*/;\n        result[(pos = (pos + 1) | 0)] = (0x2 /*0b10*/ << 6) | (point & 0x3f) /*0b00111111*/;\n      }\n    }\n    return Uint8Array ? result.subarray(0, pos) : result.slice(0, pos);\n  }\n\n  public encodeInto(inputString: string, u8Arr: Uint8Array): { written: number; read: number } {\n    const encodedString = inputString === void 0 ? '' : ('' + inputString).replace(encoderRegexp, encoderReplacer);\n    let len = encodedString.length | 0,\n      i = 0,\n      char = 0,\n      read = 0;\n    const u8ArrLen = u8Arr.length | 0;\n    const inputLength = inputString.length | 0;\n    if (u8ArrLen < len) len = u8ArrLen;\n    putChars: {\n      for (; i < len; i = (i + 1) | 0) {\n        char = encodedString.charCodeAt(i) | 0;\n        switch (char >> 4) {\n          case 0:\n          case 1:\n          case 2:\n          case 3:\n          case 4:\n          case 5:\n          case 6:\n          case 7:\n            read = (read + 1) | 0;\n          // extension points:\n          case 8:\n          case 9:\n          case 10:\n          case 11:\n            break;\n          case 12:\n          case 13:\n            if (((i + 1) | 0) < u8ArrLen) {\n              read = (read + 1) | 0;\n              break;\n            }\n          case 14:\n            if (((i + 2) | 0) < u8ArrLen) {\n              //if (!(char === 0xEF && encodedString.substr(i+1|0,2) === \"\\xBF\\xBD\"))\n              read = (read + 1) | 0;\n              break;\n            }\n          case 15:\n            if (((i + 3) | 0) < u8ArrLen) {\n              read = (read + 1) | 0;\n              break;\n            }\n          default:\n            break putChars;\n        }\n        //read = read + ((char >> 6) !== 2) |0;\n        u8Arr[i] = char;\n      }\n    }\n    return { written: i, read: inputLength < read ? inputLength : read };\n  }\n}\n\n/**\n * Encode a UTF-8 string into a Uint8Array\n */\nexport function encode(s: string): Uint8Array {\n  return TextEncoder.prototype.encode(s);\n}\n\n/**\n * Decode a Uint8Array into a UTF-8 string\n */\nexport function decode(a: Uint8Array): string {\n  return TextDecoder.prototype.decode(a);\n}\n","export type NonNullableObject<T> = { [P in keyof T]-?: NonNullable<T[P]> };\n\n/** Shorthand alias */\nexport type AnyFunc = (...args: any[]) => any;\n\n/** A tuple without its last element */\nexport type OmitLast<T> = T extends [...infer REST, any] ? REST : never;\n\n/** F with all arguments but the last */\nexport type OmitLastParam<F extends AnyFunc> = (...args: OmitLast<Parameters<F>>) => ReturnType<F>;\n\nexport type OmitFirst<T> = T extends [any, ...infer REST] ? REST : never;\n\nexport type OmitFirstParam<T> = T extends (...args: any[]) => any\n  ? (...args: OmitFirst<Parameters<T>>) => ReturnType<T>\n  : never;\n\n/** Require that T has at least one of the provided properties defined */\nexport type RequireAtLeastOne<T, Keys extends keyof T = keyof T> = Pick<T, Exclude<keyof T, Keys>> &\n  {\n    [K in Keys]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<Keys, K>>>;\n  }[Keys];\n\n/** Verify that an type _Copy extends _Orig */\nexport function checkExtends<_Orig, _Copy extends _Orig>(): void {\n  // noop, just type check\n}\n\nexport type Replace<Base, New> = Omit<Base, keyof New> & New;\n\n/** An object T with any nested values of type ToReplace replaced with ReplaceWith */\nexport type ReplaceNested<T, ToReplace, ReplaceWith> = T extends (...args: any[]) => any\n  ? T\n  : [keyof T] extends [never]\n    ? T\n    : T extends Record<string, string> // Special exception for Nexus Headers.\n      ? T\n      : T extends { [k: string]: ToReplace }\n        ? {\n            [P in keyof T]: ReplaceNested<T[P], ToReplace, ReplaceWith>;\n          }\n        : T extends ToReplace\n          ? ReplaceWith | Exclude<T, ToReplace>\n          : {\n              [P in keyof T]: ReplaceNested<T[P], ToReplace, ReplaceWith>;\n            };\n\n// From https://github.com/sindresorhus/type-fest/blob/main/source/union-to-intersection.d.ts\n// MIT or CC0-1.0 — It is meant to be copied into your codebase rather than being used as a dependency.\nexport type UnionToIntersection<Union> =\n  // `extends unknown` is always going to be the case and is used to convert the `Union` into a\n  // [distributive conditional type](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-8.html#distributive-conditional-types).\n  (\n    Union extends unknown\n      ? // The union type is used as the only argument to a function since the union\n        // of function arguments is an intersection.\n        (distributedUnion: Union) => void\n      : // This won't happen.\n        never\n  ) extends // Infer the `Intersection` type since TypeScript represents the positional\n  // arguments of unions of functions as an intersection of the union.\n  (mergedIntersection: infer Intersection) => void\n    ? // The `& Union` is to allow indexing by the resulting type\n      Intersection & Union\n    : never;\n\ntype IsEqual<A, B> = (<G>() => G extends A ? 1 : 2) extends <G>() => G extends B ? 1 : 2 ? true : false;\n\ntype Primitive = null | undefined | string | number | boolean | symbol | bigint;\n\ntype IsNull<T> = [T] extends [null] ? true : false;\n\ntype IsUnknown<T> = unknown extends T // `T` can be `unknown` or `any`\n  ? IsNull<T> extends false // `any` can be `null`, but `unknown` can't be\n    ? true\n    : false\n  : false;\n\ntype ObjectValue<T, K> = K extends keyof T\n  ? T[K]\n  : ToString<K> extends keyof T\n    ? T[ToString<K>]\n    : K extends `${infer NumberK extends number}`\n      ? NumberK extends keyof T\n        ? T[NumberK]\n        : never\n      : never;\n\ntype ToString<T> = T extends string | number ? `${T}` : never;\n\ntype KeysOfUnion<ObjectType> = ObjectType extends unknown ? keyof ObjectType : never;\n\ntype ArrayElement<T> = T extends readonly unknown[] ? T[0] : never;\n\ntype ExactObject<ParameterType, InputType> = {\n  [Key in keyof ParameterType]: Exact<ParameterType[Key], ObjectValue<InputType, Key>>;\n} & Record<Exclude<keyof InputType, KeysOfUnion<ParameterType>>, never>;\n\nexport type Exact<ParameterType, InputType> =\n  // Before distributing, check if the two types are equal and if so, return the parameter type immediately\n  IsEqual<ParameterType, InputType> extends true\n    ? ParameterType\n    : // If the parameter is a primitive, return it as is immediately to avoid it being converted to a complex type\n      ParameterType extends Primitive\n      ? ParameterType\n      : // If the parameter is an unknown, return it as is immediately to avoid it being converted to a complex type\n        IsUnknown<ParameterType> extends true\n        ? unknown\n        : // If the parameter is a Function, return it as is because this type is not capable of handling function, leave it to TypeScript\n          // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n          ParameterType extends Function\n          ? ParameterType\n          : // Convert union of array to array of union: A[] & B[] => (A & B)[]\n            ParameterType extends unknown[]\n            ? Array<Exact<ArrayElement<ParameterType>, ArrayElement<InputType>>>\n            : // In TypeScript, Array is a subtype of ReadonlyArray, so always test Array before ReadonlyArray.\n              ParameterType extends readonly unknown[]\n              ? ReadonlyArray<Exact<ArrayElement<ParameterType>, ArrayElement<InputType>>>\n              : ExactObject<ParameterType, InputType>;\n// End of borrow from  https://github.com/sindresorhus/type-fest/blob/main/source/union-to-intersection.d.ts\n\nexport type RemovePrefix<Prefix extends string, Keys extends string> = {\n  [k in Keys]: k extends `${Prefix}${infer Suffix}` ? Suffix : never;\n}[Keys];\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === 'object' && value !== null;\n}\n\nexport function hasOwnProperty<X extends Record<string, unknown>, Y extends PropertyKey>(\n  record: X,\n  prop: Y\n): record is X & Record<Y, unknown> {\n  return prop in record;\n}\n\nexport function hasOwnProperties<X extends Record<string, unknown>, Y extends PropertyKey>(\n  record: X,\n  props: Y[]\n): record is X & Record<Y, unknown> {\n  return props.every((prop) => prop in record);\n}\n\nexport function isError(error: unknown): error is Error {\n  return (\n    isRecord(error) &&\n    typeof error.name === 'string' &&\n    typeof error.message === 'string' &&\n    (error.stack == null || typeof error.stack === 'string')\n  );\n}\n\nexport function isAbortError(error: unknown): error is Error & { name: 'AbortError' } {\n  return isError(error) && error.name === 'AbortError';\n}\n\n/**\n * Get `error.message` (or `undefined` if not present)\n */\nexport function errorMessage(error: unknown): string | undefined {\n  if (isError(error)) {\n    return error.message;\n  } else if (typeof error === 'string') {\n    return error;\n  }\n  return undefined;\n}\n\ninterface ErrorWithCode {\n  code: string;\n}\n\nfunction isErrorWithCode(error: unknown): error is ErrorWithCode {\n  return isRecord(error) && typeof error.code === 'string';\n}\n\n/**\n * Get `error.code` (or `undefined` if not present)\n */\nexport function errorCode(error: unknown): string | undefined {\n  if (isErrorWithCode(error)) {\n    return error.code;\n  }\n\n  return undefined;\n}\n\n/**\n * Asserts that some type is the never type\n */\nexport function assertNever(msg: string, x: never): never {\n  throw new TypeError(msg + ': ' + x);\n}\n\nexport type Class<E extends Error> = {\n  new (...args: any[]): E;\n  prototype: E;\n};\n\n/**\n * A decorator to be used on error classes. It adds the 'name' property AND provides a custom\n * 'instanceof' handler that works correctly across execution contexts.\n *\n * ### Details ###\n *\n * According to the EcmaScript's spec, the default behavior of JavaScript's `x instanceof Y` operator is to walk up the\n * prototype chain of object 'x', checking if any constructor in that hierarchy is _exactly the same object_ as the\n * constructor function 'Y'.\n *\n * Unfortunately, it happens in various situations that different constructor function objects get created for what\n * appears to be the very same class. This leads to surprising behavior where `instanceof` returns false though it is\n * known that the object is indeed an instance of that class. One particular case where this happens is when constructor\n * 'Y' belongs to a different realm than the constuctor with which 'x' was instantiated. Another case is when two copies\n * of the same library gets loaded in the same realm.\n *\n * In practice, this tends to cause issues when crossing the workflow-sandboxing boundary (since Node's vm module\n * really creates new execution realms), as well as when running tests using Jest (see https://github.com/jestjs/jest/issues/2549\n * for some details on that one).\n *\n * This function injects a custom 'instanceof' handler into the prototype of 'clazz', which is both cross-realm safe and\n * cross-copies-of-the-same-lib safe. It works by adding a special symbol property to the prototype of 'clazz', and then\n * checking for the presence of that symbol.\n */\nexport function SymbolBasedInstanceOfError<E extends Error>(markerName: string): (clazz: Class<E>) => void {\n  return (clazz: Class<E>): void => {\n    const marker = Symbol.for(`__temporal_is${markerName}`);\n\n    Object.defineProperty(clazz.prototype, 'name', { value: markerName, enumerable: true });\n    Object.defineProperty(clazz.prototype, marker, { value: true, enumerable: false });\n    Object.defineProperty(clazz, Symbol.hasInstance, {\n      // eslint-disable-next-line object-shorthand\n      value: function (this: any, error: object): boolean {\n        if (this === clazz) {\n          return isRecord(error) && (error as any)[marker] === true;\n        } else {\n          // 'this' must be a _subclass_ of clazz that doesn't redefined [Symbol.hasInstance], so that it inherited\n          // from clazz's [Symbol.hasInstance]. If we don't handle this particular situation, then\n          // `x instanceof SubclassOfParent` would return true for any instance of 'Parent', which is clearly wrong.\n          //\n          // Ideally, it'd be preferable to avoid this case entirely, by making sure that all subclasses of 'clazz'\n          // redefine [Symbol.hasInstance], but we can't enforce that. We therefore fallback to the default instanceof\n          // behavior (which is NOT cross-realm safe).\n          return this.prototype.isPrototypeOf(error); // eslint-disable-line no-prototype-builtins\n        }\n      },\n    });\n  };\n}\n","import type { ActivityFunction } from './interfaces';\nimport type { PayloadTypeInfo } from './type-info';\n\n/**\n * Static metadata attached to an Activity function.\n *\n * @experimental\n */\nexport interface ActivityDefinitionOptions {\n  /** Type information used to decode Activity arguments and encode its result. */\n  typeInfo?: PayloadTypeInfo;\n}\n\ntype ActivityKeys<A> = {\n  [K in keyof A & string]: A[K] extends ActivityFunction ? K : never;\n}[keyof A & string];\n\n/**\n * Type information keyed only by Activity-valued properties of `A`.\n *\n * @experimental\n */\nexport type ActivityTypeInfoMap<A> = Partial<Record<ActivityKeys<A>, PayloadTypeInfo>>;\n\n/** @internal */\nexport interface ActivityFunctionWithOptions<Args extends any[] = any[], ReturnType = any>\n  extends ActivityFunction<Args, ReturnType> {\n  activityDefinitionOptions: ActivityDefinitionOptions;\n}\n\nconst activityDefinitionOptionsProperty = 'activityDefinitionOptions' satisfies keyof ActivityFunctionWithOptions;\n\n/** @internal */\nexport function isActivityFunctionWithOptions(value: unknown): value is ActivityFunctionWithOptions<any[], any> {\n  if (typeof value !== 'function' || !Object.hasOwn(value, activityDefinitionOptionsProperty)) {\n    return false;\n  }\n  const { activityDefinitionOptions } = value as { activityDefinitionOptions?: unknown };\n  return typeof activityDefinitionOptions === 'object' && activityDefinitionOptions !== null;\n}\n","import type { coresdk } from '@temporalio/proto';\n\n// ts-prune-ignore-next\nexport interface ActivityCancellationDetailsHolder {\n  details?: ActivityCancellationDetails;\n}\n\nexport interface ActivityCancellationDetailsOptions {\n  notFound?: boolean;\n  cancelRequested?: boolean;\n  paused?: boolean;\n  timedOut?: boolean;\n  workerShutdown?: boolean;\n  reset?: boolean;\n}\n\n/**\n * Provides the reasons for the activity's cancellation. Cancellation details are set once and do not change once set.\n */\nexport class ActivityCancellationDetails {\n  readonly notFound: boolean;\n  readonly cancelRequested: boolean;\n  readonly paused: boolean;\n  readonly timedOut: boolean;\n  readonly workerShutdown: boolean;\n  readonly reset: boolean;\n\n  public constructor(options: ActivityCancellationDetailsOptions = {}) {\n    this.notFound = options.notFound ?? false;\n    this.cancelRequested = options.cancelRequested ?? false;\n    this.paused = options.paused ?? false;\n    this.timedOut = options.timedOut ?? false;\n    this.workerShutdown = options.workerShutdown ?? false;\n    this.reset = options.reset ?? false;\n  }\n\n  static fromProto(\n    proto: coresdk.activity_task.IActivityCancellationDetails | null | undefined\n  ): ActivityCancellationDetails {\n    if (proto == null) {\n      return new ActivityCancellationDetails();\n    }\n    return new ActivityCancellationDetails({\n      notFound: proto.isNotFound ?? false,\n      cancelRequested: proto.isCancelled ?? false,\n      paused: proto.isPaused ?? false,\n      timedOut: proto.isTimedOut ?? false,\n      workerShutdown: proto.isWorkerShutdown ?? false,\n      reset: proto.isReset ?? false,\n    });\n  }\n}\n","import { SymbolBasedInstanceOfError } from './type-helpers';\n\n/**\n * Thrown from code that receives a value that is unexpected or that it's unable to handle.\n */\n@SymbolBasedInstanceOfError('ValueError')\nexport class ValueError extends Error {\n  constructor(\n    message: string | undefined,\n    public readonly cause?: unknown\n  ) {\n    super(message ?? undefined);\n  }\n}\n\n/**\n * Thrown when a Payload Converter is misconfigured.\n */\n@SymbolBasedInstanceOfError('PayloadConverterError')\nexport class PayloadConverterError extends ValueError {}\n\n/**\n * Signals that a requested operation can't be completed because it is illegal given the\n * current state of the object; e.g. trying to use a resource after it has been closed.\n */\n@SymbolBasedInstanceOfError('IllegalStateError')\nexport class IllegalStateError extends Error {}\n\n/**\n * Thrown when a Workflow with the given Id is not known to Temporal Server.\n * It could be because:\n * - Id passed is incorrect\n * - Workflow is closed (for some calls, e.g. `terminate`)\n * - Workflow was deleted from the Server after reaching its retention limit\n */\n@SymbolBasedInstanceOfError('WorkflowNotFoundError')\nexport class WorkflowNotFoundError extends Error {\n  constructor(\n    message: string,\n    public readonly workflowId: string,\n    public readonly runId: string | undefined\n  ) {\n    super(message);\n  }\n}\n\n/**\n * Thrown when the specified namespace is not known to Temporal Server.\n */\n@SymbolBasedInstanceOfError('NamespaceNotFoundError')\nexport class NamespaceNotFoundError extends Error {\n  constructor(public readonly namespace: string) {\n    super(`Namespace not found: '${namespace}'`);\n  }\n}\n\n/**\n * Throw this error from an Activity in order to make the Worker forget about this Activity.\n *\n * The Activity can then be completed asynchronously (from anywhere—usually outside the Worker) using\n * the Client's activity handle.\n *\n * @example\n *\n * ```ts\n *import { CompleteAsyncError } from '@temporalio/activity';\n *\n *export async function myActivity(): Promise<never> {\n *  // ...\n *  throw new CompleteAsyncError();\n *}\n * ```\n */\n@SymbolBasedInstanceOfError('CompleteAsyncError')\nexport class CompleteAsyncError extends Error {}\n\n/**\n * Thrown when an inbound payload is detected as an external-storage reference\n * but no `ExternalStorage` is configured to resolve it.\n *\n * @experimental\n */\n@SymbolBasedInstanceOfError('ExternalStorageNotConfiguredError')\nexport class ExternalStorageNotConfiguredError extends Error {\n  constructor(message = 'Detected externally stored payload(s) but external storage is not configured.') {\n    super(`[TMPRL1105] ${message}`);\n  }\n}\n","import { ValueError } from '../errors';\nimport type { Exact, RemovePrefix, UnionToIntersection } from '../type-helpers';\n\n/**\n * Create encoding and decoding functions to convert between the numeric `enum` types produced by our\n * Protobuf compiler and \"const object of strings\" enum values that we expose in our public APIs.\n *\n * ### Usage\n *\n * Newly introduced enums should follow the following pattern:\n *\n * ```ts\n *     const ParentClosePolicy = {\n *       TERMINATE: 'TERMINATE',\n *       ABANDON: 'ABANDON',\n *       REQUEST_CANCEL: 'REQUEST_CANCEL',\n *     } as const;\n *     type ParentClosePolicy = (typeof ParentClosePolicy)[keyof typeof ParentClosePolicy];\n *\n *     const [encodeParentClosePolicy, decodeParentClosePolicy] = //\n *       makeProtoEnumConverters<\n *         coresdk.child_workflow.ParentClosePolicy,\n *         typeof coresdk.child_workflow.ParentClosePolicy,\n *         keyof typeof coresdk.child_workflow.ParentClosePolicy,\n *         typeof ParentClosePolicy,\n *         'PARENT_CLOSE_POLICY_'  // This may be an empty string if the proto enum doesn't add a repeated prefix on values\n *       >(\n *         {\n *           [ParentClosePolicy.TERMINATE]: 1, // These numbers must match the ones in the proto enum\n *           [ParentClosePolicy.ABANDON]: 2,\n *           [ParentClosePolicy.REQUEST_CANCEL]: 3,\n *\n *           UNSPECIFIED: 0,\n *         } as const,\n *         'PARENT_CLOSE_POLICY_'\n *       );\n * ```\n *\n * `makeProtoEnumConverters` supports other usage patterns, but they are only meant for\n * backward compatibility with former enum definitions and should not be used for new enums.\n *\n * ### Context\n *\n * Temporal's Protobuf APIs define several `enum` types; our Protobuf compiler transforms these to\n * traditional (i.e. non-const) [TypeScript numeric `enum`s](https://www.typescriptlang.org/docs/handbook/enums.html#numeric-enums).\n *\n * For various reasons, this is far from ideal:\n *\n *  - Due to the dual nature of non-const TypeScript `enum`s (they are both a type and a value),\n *    it is not possible to refer to an enum value from code without a \"real\" import of the enum type\n *    (i.e. can't simply do `import type ...`). In Workflow code, such an import would result in\n *    loading our entire Protobuf definitions into the workflow sandbox, adding several megabytes to\n *    the per-workflow memory footprint, which is unacceptable; to avoid that, we need to maintain\n *    a mirror copy of each enum types used by in-workflow APIs, and export these from either\n *    `@temporalio/common` or `@temporalio/workflow`.\n *  - It is not desirable for users to need an explicit dependency on `@temporalio/proto` just to\n *    get access to these enum types; we therefore made it a common practice to reexport these enums\n *    from our public facing packages. However, experience demontrated that these reexports effectively\n *    resulted in poor and inconsistent documentation coverage compared to mirrored enums types.\n *  - Our Protobuf enum types tend to follow a verbose and redundant naming convention, which feels\n *    unatural and excessive according to most TypeScript style guides; e.g. instead of\n *    `workflowIdReusePolicy: WorkflowIdReusePolicy.WORKFLOW_ID_REUSE_POLICY_REJECT_DUPLICATE`,\n *    a TypeScript developer would generally expect to be able to write something similar to\n *    `workflowIdReusePolicy: 'REJECT_DUPLICATE'`.\n *  - Because of the way Protobuf works, many of our enum types contain an `UNSPECIFIED` value, which\n *    is used to explicitly identify a value that is unset. In TypeScript code, the `undefined` value\n *    already serves that purpose, and is definitely more idiomatic to TS developers, whereas these\n *    `UNSPECIFIED` values create noise and confusion in our APIs.\n *  - TypeScript editors generally do a very bad job at providing autocompletion that implies reaching\n *    for values of a TypeScript enum type, forcing developers to explicitly type in at least part\n *    of the name of the enum type before they can get autocompletion for its values. On the other\n *    hand, all TS editors immediately provide autocompletion for string union types.\n *  - The [TypeScript's official documentation](https://www.typescriptlang.org/docs/handbook/enums.html#objects-vs-enums)\n *    itself suggests that, in modern TypeScript, the use of `as const` objects may generally suffice\n *    and may be advantageous over the use of `enum` types.\n *\n * A const object of strings, combined with a union type of possible string values, provides a much\n * more idiomatic syntax and a better DX for TypeScript developers. This however requires a way to\n * convert back and forth between the `enum` values produced by the Protobuf compiler and the\n * equivalent string values.\n *\n * This helper dynamically creates these conversion functions for a given Protobuf enum type,\n * strongly building upon specific conventions that we have adopted in our Protobuf definitions.\n *\n * ### Validations\n *\n * The complex type signature of this helper is there to prevent most potential incoherencies\n * that could result from having to manually synchronize the const object of strings enum and the\n * conversion table with the proto enum, while not requiring a regular import on the Protobuf enum\n * itself (so it can be used safely for enums meant to be used from workflow code).\n *\n * In particular, failing any of the following invariants will result in build time errors:\n *\n * - For every key of the form `PREFIX_KEY: number` in the proto enum, excluding the `UNSPECIFIED` key:\n *   - There MUST be a corresponding `KEY: 'KEY'` entry in the const object of strings enum;\n *   - There MAY be a corresponding `PREFIX_KEY: 'KEY'` in the const object of strings enum\n *     (this is meant to preserve backward compatibility with the former syntax; such aliases should\n *     not be added for new enums and enum entries introduced going forward);\n *   - There MUST be a corresponding `KEY: number` in the mapping table.\n * - If the proto enum contains a `PREFIX_UNSPECIFIED` entry, then:\n *   - There MAY be a corresponding `PREFIX_UNSPECIFIED: undefined` and/or `UNSPECIFIED: undefined`\n *     entries in the const object of strings enum — this is meant to preserve backward compatibility\n *     with the former syntax; this alias should not be added for new enums introduced going forward;\n *   - There MUST be an `UNSPECIFIED: 0` in the mapping table.\n * - The const object of strings enum MUST NOT contain any other keys than the ones mandated or\n *   optionally allowed be the preceeding rules.\n * - The mapping table MUST NOT contain any other keys than the ones mandated above.\n *\n * These rules notably ensure that whenever a new value is added to an existing Proto enum, the code\n * will fail to compile until the corresponding entry is added on the const object of strings enum\n * and the mapping table.\n *\n * @internal\n */\nexport function makeProtoEnumConverters<\n  ProtoEnumValue extends number,\n  ProtoEnum extends { [k in ProtoEnumKey]: ProtoEnumValue },\n  ProtoEnumKey extends `${Prefix}${string}`,\n  StringEnumTypeActual extends Exact<StringEnumType, StringEnumTypeActual>,\n  Prefix extends string,\n  //\n  // Parameters after this point will be inferred; they're not meant not to be specified by developers\n  Unspecified = ProtoEnumKey extends `${Prefix}UNSPECIFIED` ? 'UNSPECIFIED' : never,\n  ShortStringEnumKey extends RemovePrefix<Prefix, ProtoEnumKey> = Exclude<\n    RemovePrefix<Prefix, ProtoEnumKey>,\n    Unspecified\n  >,\n  StringEnumType extends ProtoConstObjectOfStringsEnum<\n    ShortStringEnumKey,\n    Prefix,\n    Unspecified\n  > = ProtoConstObjectOfStringsEnum<ShortStringEnumKey, Prefix, Unspecified>,\n  MapTable extends ProtoEnumToConstObjectOfStringMapTable<\n    StringEnumType,\n    ProtoEnumValue,\n    ProtoEnum,\n    ProtoEnumKey,\n    Prefix,\n    Unspecified,\n    ShortStringEnumKey\n  > = ProtoEnumToConstObjectOfStringMapTable<\n    StringEnumType,\n    ProtoEnumValue,\n    ProtoEnum,\n    ProtoEnumKey,\n    Prefix,\n    Unspecified,\n    ShortStringEnumKey\n  >,\n>(\n  mapTable: MapTable,\n  prefix: Prefix\n): [\n  (\n    input: ShortStringEnumKey | `${Prefix}${ShortStringEnumKey}` | ProtoEnumValue | null | undefined\n  ) => ProtoEnumValue | undefined, //\n  (input: ProtoEnumValue | null | undefined) => ShortStringEnumKey | undefined, //\n] {\n  const reverseTable: Record<ProtoEnumValue, ShortStringEnumKey> = Object.fromEntries(\n    Object.entries(mapTable).map(([k, v]) => [v, k])\n  );\n  const hasUnspecified = (mapTable as any)['UNSPECIFIED'] === 0 || (mapTable as any)[`${prefix}UNSPECIFIED`] === 0;\n\n  function isShortStringEnumKeys(x: unknown): x is ShortStringEnumKey {\n    return typeof x === 'string' && x in mapTable;\n  }\n\n  function isNumericEnumValue(x: unknown): x is ProtoEnum[keyof ProtoEnum] {\n    return typeof x === 'number' && x in reverseTable;\n  }\n\n  function encode(\n    input: ShortStringEnumKey | `${Prefix}${ShortStringEnumKey}` | ProtoEnumValue | null | undefined\n  ): ProtoEnumValue | undefined {\n    if (input == null) {\n      return undefined;\n    } else if (typeof input === 'string') {\n      let shorten: string = input;\n      if (shorten.startsWith(prefix)) {\n        shorten = shorten.slice(prefix.length);\n      }\n      if (isShortStringEnumKeys(shorten)) {\n        return mapTable[shorten];\n      }\n      throw new ValueError(`Invalid enum value: '${input}'`);\n    } else if (typeof input === 'number') {\n      return input;\n    } else {\n      throw new ValueError(`Invalid enum value: '${input}' of type ${typeof input}`);\n    }\n  }\n\n  function decode(input: ProtoEnumValue | null | undefined): ShortStringEnumKey | undefined {\n    if (input == null) {\n      return undefined;\n    } else if (typeof input === 'number') {\n      if (hasUnspecified && input === 0) {\n        return undefined;\n      }\n\n      if (isNumericEnumValue(input)) {\n        return reverseTable[input];\n      }\n\n      // We got a proto enum value that we don't yet know about (i.e. it didn't exist when this code\n      // was compiled). This is certainly a possibility, but given how our APIs evolve, this is is\n      // unlikely to be a terribly bad thing by itself (we avoid adding new enum values in places\n      // that would break backward compatibility with existing deployed code). Therefore, throwing\n      // on \"unexpected\" values is likely to end up causing more problems than it might avoid,\n      // especially given that the decoded value may actually never get read anwyay.\n      //\n      // Therefore, we instead cheat on type constraints and return a string of the form \"unknown_23\".\n      // That somewhat mirrors the behavior we'd get with the pure numerical approach.\n      return `unknown_${input}` as ShortStringEnumKey;\n    }\n\n    throw new ValueError(`Invalid proto enum value: '${input}' of type ${typeof input}`);\n  }\n\n  return [encode, decode] as const;\n}\n\n/**\n * Given the exploded parameters of a proto enum (i.e. short keys, prefix, and short key of the\n * unspecified value), make a type that _exactly_ corresponds to the const object of strings enum,\n * e.g. the type that the developer is expected to write.\n *\n * For example, for coresdk.child_workflow.ParentClosePolicy, this evaluates to:\n *\n * {\n *   TERMINATE: \"TERMINATE\";\n *   ABANDON: \"ABANDON\";\n *   REQUEST_CANCEL: \"REQUEST_CANCEL\";\n *\n *   PARENT_CLOSE_POLICY_TERMINATE?: \"TERMINATE\";\n *   PARENT_CLOSE_POLICY_ABANDON?: \"ABANDON\";\n *   PARENT_CLOSE_POLICY_REQUEST_CANCEL?: \"REQUEST_CANCEL\";\n *\n *   PARENT_CLOSE_POLICY_UNSPECIFIED?: undefined;\n * }\n */\ntype ProtoConstObjectOfStringsEnum<\n  ShortStringEnumKey extends string,\n  Prefix extends string,\n  Unspecified, // e.g. 'UNSPECIFIED'\n> = UnionToIntersection<\n  | {\n      // e.g.: \"TERMINATE\": \"TERMINATE\"\n      readonly [k in ShortStringEnumKey]: k;\n    }\n  | {\n      [k in ShortStringEnumKey]: Prefix extends ''\n        ? object\n        : {\n            // e.g.: \"PARENT_CLOSE_POLICY_TERMINATE\"?: \"TERMINATE\"\n            readonly [kk in `${Prefix}${k}`]?: k;\n          };\n    }[ShortStringEnumKey]\n  | (Unspecified extends string\n      ? {\n          // e.g.: \"PARENT_CLOSE_POLICY_UNSPECIFIED\"?: undefined\n          [k in `${Prefix}${Unspecified}`]?: undefined;\n        }\n      : object)\n  | (Unspecified extends string\n      ? {\n          // e.g.: \"UNSPECIFIED\"?: undefined\n          [k in `${Unspecified}`]?: undefined;\n        }\n      : object)\n>;\n\n/**\n * Given the exploded parameters of a proto enum (i.e. short keys, prefix, and short key of the\n * unspecified value), make a type that _exactly_ corresponds to the mapping table that the user is\n * expected to provide.\n *\n * For example, for coresdk.child_workflow.ParentClosePolicy, this evaluates to:\n *\n * {\n *  UNSPECIFIED: 0,\n *  TERMINATE: 1,\n *  ABANDON: 2,\n *  REQUEST_CANCEL: 3,\n * }\n */\ntype ProtoEnumToConstObjectOfStringMapTable<\n  _StringEnum extends ProtoConstObjectOfStringsEnum<ShortStringEnumKey, Prefix, Unspecified>,\n  ProtoEnumValue extends number,\n  ProtoEnum extends { [k in ProtoEnumKey]: ProtoEnumValue },\n  ProtoEnumKey extends `${Prefix}${string}`,\n  Prefix extends string,\n  Unspecified,\n  ShortStringEnumKey extends RemovePrefix<Prefix, ProtoEnumKey>,\n> = UnionToIntersection<\n  {\n    [k in ProtoEnumKey]: {\n      [kk in RemovePrefix<Prefix, k>]: ProtoEnum[k] extends number ? ProtoEnum[k] : never;\n    };\n  }[ProtoEnumKey]\n>;\n","/**\n * Helper to prevent `undefined` and `null` values overriding defaults when merging maps.\n */\nexport function filterNullAndUndefined<T extends Record<string, any>>(obj: T): T {\n  return Object.fromEntries(Object.entries(obj).filter(([_k, v]) => v != null)) as any;\n}\n\n/**\n * Merge two objects, possibly removing keys.\n *\n * More specifically:\n * - Any key/value pair in `delta` overrides the corresponding key/value pair in `original`;\n * - A key present in `delta` with value `undefined` removes the key from the resulting object;\n * - If `original` is `undefined` or empty, return `delta`;\n * - If `delta` is `undefined` or empty, return `original` (or undefined if `original` is also undefined);\n * - If there are no changes, then return `original`.\n */\nexport function mergeObjects<T extends Record<string, any>>(original: T, delta: T | undefined): T;\nexport function mergeObjects<T extends Record<string, any>>(\n  original: T | undefined,\n  delta: T | undefined\n): T | undefined {\n  if (original == null) return delta;\n  if (delta == null) return original;\n\n  const merged: Record<string, any> = { ...original };\n  let changed = false;\n  for (const [k, v] of Object.entries(delta)) {\n    if (v !== merged[k]) {\n      if (v == null) delete merged[k];\n      else merged[k] = v;\n      changed = true;\n    }\n  }\n\n  return changed ? (merged as T) : original;\n}\n\nfunction isObject(item: any): item is Record<string, any> {\n  return item && typeof item === 'object' && !Array.isArray(item);\n}\n\n/**\n * Recursively merges two objects, returning a new object.\n *\n * Properties from `source` will overwrite properties on `target`.\n * Nested objects are merged recursively.\n *\n * Object fields in the returned object are references, as in,\n * the returned object is not completely fresh.\n */\nexport function deepMerge<T extends Record<string, any>>(target: T, source: Partial<T>): T {\n  const output = { ...target };\n\n  if (isObject(target) && isObject(source)) {\n    for (const key of Object.keys(source)) {\n      const sourceValue = source[key];\n      if (isObject(sourceValue) && key in target && isObject(target[key] as any)) {\n        output[key as keyof T] = deepMerge(target[key], sourceValue);\n      } else {\n        (output as any)[key] = sourceValue;\n      }\n    }\n  }\n\n  return output;\n}\n","export * from './enums-helpers';\nexport {\n  filterNullAndUndefined,\n  mergeObjects,\n  // ts-prune-ignore-next\n  deepMerge,\n} from './objects-helpers';\n","import type { temporal } from '@temporalio/proto';\nimport { makeProtoEnumConverters } from './internal-workflow';\n\n/**\n * Reason(s) why continue as new is suggested. Can potentially be multiple reasons.\n *\n * @experimental May be removed or changed in the future.\n */\nexport const SuggestContinueAsNewReason = {\n  HISTORY_SIZE_TOO_LARGE: 'HISTORY_SIZE_TOO_LARGE',\n  TOO_MANY_HISTORY_EVENTS: 'TOO_MANY_HISTORY_EVENTS',\n  TOO_MANY_UPDATES: 'TOO_MANY_UPDATES',\n} as const;\nexport type SuggestContinueAsNewReason = (typeof SuggestContinueAsNewReason)[keyof typeof SuggestContinueAsNewReason];\n\n// ts-prune-ignore-next\nexport const [encodeSuggestContinueAsNewReason, decodeSuggestContinueAsNewReason] = makeProtoEnumConverters<\n  temporal.api.enums.v1.SuggestContinueAsNewReason,\n  typeof temporal.api.enums.v1.SuggestContinueAsNewReason,\n  keyof typeof temporal.api.enums.v1.SuggestContinueAsNewReason,\n  typeof SuggestContinueAsNewReason,\n  'SUGGEST_CONTINUE_AS_NEW_REASON_'\n>(\n  {\n    [SuggestContinueAsNewReason.HISTORY_SIZE_TOO_LARGE]: 1,\n    [SuggestContinueAsNewReason.TOO_MANY_HISTORY_EVENTS]: 2,\n    [SuggestContinueAsNewReason.TOO_MANY_UPDATES]: 3,\n    UNSPECIFIED: 0,\n  } as const,\n  'SUGGEST_CONTINUE_AS_NEW_REASON_'\n);\n\n// ts-prune-ignore-next\nexport function suggestContinueAsNewReasonsFromProto(\n  reasons: temporal.api.enums.v1.SuggestContinueAsNewReason[] | null | undefined\n): SuggestContinueAsNewReason[] | undefined {\n  if (reasons == null) {\n    return undefined;\n  }\n\n  const res: SuggestContinueAsNewReason[] = [];\n  for (const r of reasons) {\n    const decoded = decodeSuggestContinueAsNewReason(r);\n    if (decoded !== undefined) {\n      res.push(decoded);\n    }\n  }\n  if (res.length === 0) {\n    return undefined;\n  }\n  return res;\n}\n","/**\n * Inject a custom 'instanceof' handler on the given class, that works correctly across execution contexts.\n *\n * ### Details ###\n *\n * According to the EcmaScript's spec, the default behavior of JavaScript's `x instanceof Y` operator is to walk up the\n * prototype chain of object 'x', checking if any constructor in that hierarchy is _exactly the same object_ as the\n * constructor function 'Y'.\n *\n * Unfortunately, it happens in various situations that different constructor function objects get created for what\n * appears to be the very same class. This leads to surprising behavior where `instanceof` returns false though it is\n * known that the object is indeed an instance of that class. One particular case where this happens is when constructor\n * 'Y' belongs to a different realm than the constuctor with which 'x' was instantiated. Another case is when two copies\n * of the same library gets loaded in the same realm.\n *\n * In practice, this tends to cause issues when crossing the workflow-sandboxing boundary (since Node's vm module\n * really creates new execution realms), as well as when running tests using Jest (see https://github.com/jestjs/jest/issues/2549\n * for some details on that one).\n *\n * This function injects a custom 'instanceof' handler into the prototype of 'clazz', which is both cross-realm safe and\n * cross-copies-of-the-same-lib safe. It works by adding a special symbol property to the prototype of 'clazz', and then\n * checking for the presence of that symbol.\n *\n * @internal\n * @hidden\n */\nexport function injectSymbolBasedInstanceOf<E>(clazz: Class<E>, markerName: string): void {\n  // It may seem redundant to have an explicit markerName argument here. Can't we simply use the class\n  // function name for that? Unfortunately, no, as the class name may get mangled if the file gets minified.\n  const marker = Symbol.for(`__nexus_is${markerName}`);\n\n  Object.defineProperty(clazz.prototype, \"name\", { value: markerName, enumerable: true });\n  Object.defineProperty(clazz.prototype, marker, { value: true, enumerable: false });\n  Object.defineProperty(clazz, Symbol.hasInstance, {\n    value: function (this: any, value: object): boolean {\n      if (this === clazz) {\n        return typeof value === \"object\" && value !== null && (value as any)[marker] === true;\n      } else {\n        // 'this' must be a _subclass_ of clazz that doesn't redefined [Symbol.hasInstance], so that it inherited\n        // from clazz's [Symbol.hasInstance]. If we don't handle this particular situation, then\n        // `x instanceof SubclassOfParent` would return true for any instance of 'Parent', which is clearly wrong.\n        //\n        // Ideally, it'd be preferable to avoid this case entirely, by making sure that all subclasses of 'clazz'\n        // redefine [Symbol.hasInstance], but we can't enforce that. We therefore fallback to the default instanceof\n        // behavior (which is NOT cross-realm safe).\n        return this.prototype.isPrototypeOf(value); // eslint-disable-line no-prototype-builtins\n      }\n    },\n  });\n}\n\n/**\n * Type definition for a class.\n *\n * @internal\n */\nexport interface Class<E> {\n  new (...args: any[]): E;\n  prototype: E;\n}\n","import { injectSymbolBasedInstanceOf } from \"../internal/symbol-instanceof\";\nimport type { Failure } from \"./failure\";\n\n/**\n * A Nexus handler error.\n *\n * This error class represents an error that occurred during the handling of a\n * Nexus operation that should be reported to the caller as a handler error.\n *\n * Example:\n *\n * ```ts\n *     import { HandlerError } from \"nexus-rpc\";\n *\n *     // Throw a bad request error\n *     throw new HandlerError(\"BAD_REQUEST\", \"Invalid input provided\");\n *\n *     // Throw a bad request error, with a cause\n *     throw new HandlerError(\"BAD_REQUEST\", \"Invalid input provided\", { cause });\n *\n *     // Throw a retryable internal error\n *     throw new HandlerError(\"INTERNAL\", \"Database unavailable\", { retryableOverride: true });\n *\n * ```\n *\n * @experimental\n */\nexport class HandlerError extends Error {\n  /**\n   * One of the predefined error types.\n   *\n   * If the constructor received an unknown string, this will be `\"UNKNOWN\"`.\n   * Use {@link rawErrorType} to access the original string.\n   *\n   * @see {@link HandlerErrorType}\n   */\n  public readonly type: HandlerErrorType;\n\n  /**\n   * The raw error type string.\n   *\n   * For known types, this equals {@link type}. For unknown types, this preserves\n   * the original wire string while {@link type} is set to `\"UNKNOWN\"`.\n   */\n  public readonly rawErrorType: string;\n\n  /**\n   * Whether this error should be considered retryable.\n   *\n   * By default, the retry behavior is determined from the error type.\n   * For example, by default, `INTERNAL` is retryable, but `UNAVAILABLE` is non-retryable.\n   *\n   * If specified, `retryableOverride` overrides the default retry behavior determined based on\n   * the error type. Use {@link retryable} to determine the effective retry behavior.\n   *\n   * @see {@link retryable}.\n   */\n  public readonly retryableOverride?: boolean;\n\n  /**\n   * Set if this error was constructed from a {@link Failure} object.\n   *\n   * Preserves the original failure for round-tripping through the wire format.\n   */\n  public readonly originalFailure?: Failure;\n\n  /**\n   * Constructs a new {@link HandlerError}.\n   *\n   * @param type - The type of the error. Must be a known {@link HandlerErrorType}.\n   * @param message - The message of the error.\n   * @param options - Extra options for the error, including the cause and retryable override.\n   *\n   * @experimental\n   */\n  constructor(type: HandlerErrorType, message?: string | undefined, options?: HandlerErrorOptions) {\n    const actualMessage = message || `Handler error: ${type}`;\n\n    super(actualMessage, { cause: options?.cause });\n\n    if (!Object.hasOwn(HandlerErrorType, type)) {\n      throw new TypeError(`Invalid HandlerErrorType: ${type}`);\n    }\n    this.type = type;\n    this.rawErrorType = type === \"UNKNOWN\" ? (options?.rawErrorType ?? type) : type;\n    this.retryableOverride = options?.retryableOverride;\n    this.originalFailure = options?.originalFailure;\n    if (options?.stackTrace !== undefined) {\n      this.stack = options.stackTrace;\n    }\n  }\n\n  /**\n   * Whether this error is retryable.\n   *\n   * This differs from the {@link retryableOverride} property in that `retryable` takes into\n   * account the default behavior resulting from the error type, if no override is provided.\n   *\n   * @see {@link retryableOverride}.\n   */\n  public get retryable(): boolean {\n    if (typeof this.retryableOverride === \"boolean\") return this.retryableOverride;\n\n    switch (this.type) {\n      case \"BAD_REQUEST\":\n      case \"UNAUTHENTICATED\":\n      case \"UNAUTHORIZED\":\n      case \"NOT_FOUND\":\n      case \"NOT_IMPLEMENTED\":\n      case \"CONFLICT\":\n        return false;\n\n      case \"UNAVAILABLE\":\n      case \"UPSTREAM_TIMEOUT\":\n      case \"RESOURCE_EXHAUSTED\":\n      case \"INTERNAL\":\n      case \"REQUEST_TIMEOUT\":\n      case \"UNKNOWN\":\n        return true;\n\n      default: {\n        // Force a compile time error if missing a case\n        const _noMissingCase: never = this.type;\n        return true;\n      }\n    }\n  }\n}\n\ninjectSymbolBasedInstanceOf(HandlerError, \"HandlerError\");\n\n/**\n * Options for constructing a {@link HandlerError}.\n *\n * @experimental\n * @inline\n */\nexport interface HandlerErrorOptions {\n  /**\n   * Underlying cause of the error.\n   */\n  cause?: unknown;\n\n  /**\n   * Whether this error should be considered retryable.\n   *\n   * If not set, the retry behavior is determined from the error type.\n   * For example, by default, `INTERNAL` is retryable, but `UNAVAILABLE` is non-retryable.\n   */\n  retryableOverride?: boolean | undefined;\n\n  /**\n   * An optional stack trace string associated with this error.\n   *\n   * When provided, this overrides the native `stack` property on the error.\n   * This is typically used for remote stack traces received over the wire,\n   * which may originate from a different language runtime.\n   */\n  stackTrace?: string;\n\n  /**\n   * An optional {@link Failure} object from which this error was constructed.\n   *\n   * Preserves the original failure for round-tripping through the wire format.\n   */\n  originalFailure?: Failure;\n\n  /**\n   * The original error type string, preserving the raw wire value.\n   *\n   * For known types, this option is ignored.\n   * When the error's type is set to `\"UNKNOWN\"`, this option is used to preserve the original wire string.\n   */\n  rawErrorType?: string;\n}\n\n/**\n * An error type associated with a {@link HandlerError}, defined according to the Nexus specification.\n *\n * @experimental\n */\nexport type HandlerErrorType = (typeof HandlerErrorType)[keyof typeof HandlerErrorType];\nexport const HandlerErrorType = {\n  /**\n   * The error type is unknown.\n   *\n   * Subsequent requests by the client are permissible.\n   */\n  UNKNOWN: \"UNKNOWN\",\n\n  /**\n   * The handler cannot or will not process the request due to an apparent client error.\n   *\n   * Clients should not retry this request unless advised otherwise.\n   */\n  BAD_REQUEST: \"BAD_REQUEST\",\n\n  /**\n   * The client did not supply valid authentication credentials for this request.\n   *\n   * Clients should not retry this request unless advised otherwise.\n   */\n  UNAUTHENTICATED: \"UNAUTHENTICATED\",\n\n  /**\n   * The caller does not have permission to execute the specified operation.\n   *\n   * Clients should not retry this request unless advised otherwise.\n   */\n  UNAUTHORIZED: \"UNAUTHORIZED\",\n\n  /**\n   * The requested resource could not be found but may be available in the future.\n   */\n  NOT_FOUND: \"NOT_FOUND\",\n\n  /**\n   * Returned by the server when it has given up handling a request. This may occur by enforcing\n   * a client provided `Request-Timeout` or for any arbitrary reason such as enforcing some\n   * configurable limit.\n   *\n   * Subsequent requests by the client are permissible.\n   */\n  REQUEST_TIMEOUT: \"REQUEST_TIMEOUT\",\n\n  /**\n   * The request could not be made due to a conflict. This may happen when trying to create an\n   * operation that has already been started.\n   *\n   * Clients should not retry this request unless advised otherwise.\n   */\n  CONFLICT: \"CONFLICT\",\n\n  /**\n   * Some resource has been exhausted, perhaps a per-user quota, or perhaps the entire file system\n   * is out of space.\n   *\n   * Subsequent requests by the client are permissible.\n   */\n  RESOURCE_EXHAUSTED: \"RESOURCE_EXHAUSTED\",\n\n  /**\n   * An internal error occurred.\n   *\n   * Subsequent requests by the client are permissible.\n   */\n  INTERNAL: \"INTERNAL\",\n\n  /**\n   * The server either does not recognize the request method, or it lacks the ability to fulfill the\n   * request. Clients should not retry this request unless advised otherwise.\n   */\n  NOT_IMPLEMENTED: \"NOT_IMPLEMENTED\",\n\n  /**\n   * The service is currently unavailable.\n   *\n   * Subsequent requests by the client are permissible.\n   */\n  UNAVAILABLE: \"UNAVAILABLE\",\n\n  /**\n   * Used by gateways to report that a request to an upstream server has timed out.\n   *\n   * Subsequent requests by the client are permissible.\n   */\n  UPSTREAM_TIMEOUT: \"UPSTREAM_TIMEOUT\",\n} as const;\n","import { injectSymbolBasedInstanceOf } from \"../internal/symbol-instanceof\";\nimport type { Failure } from \"./failure\";\n\n/**\n * A Nexus operation error.\n *\n * This error class represents the abnormal completion of a Nexus operation,\n * that should be reported to the caller as an operation error.\n *\n * Example:\n *\n * ```ts\n *     import { OperationError } from \"nexus-rpc\";\n *\n *     // Throw a failed operation error\n *     throw new OperationError(\"failed\", \"Not enough inventory\");\n *\n *     // Throw a failed operation error, with a cause\n *     throw new OperationError(\"failed\", \"Not enough inventory\", { cause });\n *\n *     // Throw a canceled operation error\n *     throw new OperationError(\"canceled\", \"User canceled the operation\");\n * ```\n *\n * @experimental\n */\nexport class OperationError extends Error {\n  /**\n   * State of the operation.\n   */\n  public readonly state: OperationErrorState;\n\n  /**\n   * The error that resulted in this operation error.\n   */\n  declare public readonly cause: Error;\n\n  /**\n   * Set if this error was constructed from a {@link Failure} object.\n   *\n   * Preserves the original failure for round-tripping through the wire format.\n   */\n  public readonly originalFailure?: Failure;\n\n  /**\n   * Constructs a new {@link OperationError}.\n   *\n   * @param state - The state of the operation.\n   * @param message - The message of the error.\n   * @param options - Extra options for the error, e.g. the cause.\n   *\n   * @experimental\n   */\n  constructor(\n    state: OperationErrorState,\n    message?: string | undefined,\n    options?: OperationErrorOptions,\n  ) {\n    const defaultMessage = state === \"canceled\" ? `Operation canceled` : `Operation failed`;\n    const actualMessage = message || defaultMessage;\n\n    super(actualMessage, { cause: options?.cause });\n    this.state = state;\n    this.originalFailure = options?.originalFailure;\n    if (options?.stackTrace !== undefined) {\n      this.stack = options.stackTrace;\n    }\n  }\n}\n\ninjectSymbolBasedInstanceOf(OperationError, \"OperationError\");\n\n/**\n * Options for constructing an {@link OperationError}.\n *\n * @experimental\n * @inline\n */\nexport interface OperationErrorOptions {\n  /**\n   * Underlying cause of the error.\n   */\n  cause?: Error | undefined;\n\n  /**\n   * An optional stack trace string associated with this error.\n   *\n   * When provided, this overrides the native `stack` property on the error.\n   * This is typically used for remote stack traces received over the wire,\n   * which may originate from a different language runtime.\n   */\n  stackTrace?: string;\n\n  /**\n   * An optional {@link Failure} object from which this error was constructed.\n   *\n   * Preserves the original failure for round-tripping through the wire format.\n   */\n  originalFailure?: Failure;\n}\n\n/**\n * Describes state of an operation that did not complete successfully.\n *\n * @experimental\n * @inline\n */\nexport type OperationErrorState = \"failed\" | \"canceled\";\n","export { type Failure } from \"./failure\";\nexport { HandlerError, HandlerErrorType, type HandlerErrorOptions } from \"./handler-error\";\nexport { type Link } from \"./link\";\nexport {\n  OperationError,\n  type OperationErrorState,\n  type OperationErrorOptions,\n} from \"./operation-error\";\n","/**\n * Creates a new object by mapping all string properties (keys and values) of an existing object\n * through a mapper function.\n *\n * @param obj - The source object, whose properties will be mapped.\n * @param fn - The mapper function.\n *\n * @returns A new object with the properties mapped to the new type.\n *\n * @internal\n * @hidden\n */\nexport function mapKeyValues<T extends Record<string, any>, U>(\n  obj: T,\n  fn: (key: keyof T & string, value: T[keyof T & string]) => U,\n): Record<keyof T, U> {\n  return Object.fromEntries(\n    Object.entries(obj).map(([key, value]) => [key, fn(key, value)]),\n  ) as Record<keyof T, U>;\n}\n","import type { TypeInfo } from \"./type-info\";\n\nexport declare const inputBrand: unique symbol;\nexport declare const outputBrand: unique symbol;\n\n/**\n * Definition of a Nexus service contract, including its name and operations.\n *\n * Can only be constructed by the {@link service} function.\n *\n * @experimental\n */\nexport interface ServiceDefinition<Ops extends OperationMap = OperationMap> {\n  name: string;\n  operations: Ops;\n}\n\n/**\n * An operation contract that describes the name, and input and output types of an operation.\n *\n * @experimental\n */\nexport interface OperationDefinition<I, O> {\n  name: string;\n  inputType?: TypeInfo<I, unknown>;\n  outputType?: TypeInfo<O, unknown>;\n  [inputBrand]: I;\n  [outputBrand]: O;\n}\n\n/**\n * A named collection of operations, as defined by a {@link ServiceDefinition}.\n *\n * @experimental\n */\nexport type OperationMap = Record<string, OperationDefinition<any, any>>;\n\n/**\n * A mapped type that extracts the input type from an operation in a service.\n *\n * @experimental\n */\nexport type OperationInput<T> = T extends OperationDefinition<infer I, any> ? I : any;\n\n/**\n * A mapped type that extracts the output type from an operation in a service.\n *\n * @experimental\n */\nexport type OperationOutput<T> = T extends OperationDefinition<any, infer O> ? O : any;\n\n/**\n * A mapped type that extracts all operation names from a service.\n *\n * @experimental\n */\nexport type OperationKey<T> = {\n  [K in keyof T & string]: T[K] extends OperationDefinition<any, any> ? K : never;\n}[keyof T & string];\n\n/**\n * Confirm that a service definition is valid.\n *\n * @param service - The service definition to validate.\n *\n * @throws {TypeError} If the service definition is invalid.\n *\n * @experimental\n */\nexport function validateServiceDefinition(service: ServiceDefinition) {\n  if (typeof service.name !== \"string\" || !service.name) {\n    throw new TypeError(\"Service name must be a non-empty string\");\n  }\n\n  const operationNames = new Set<string>();\n  for (const [propName, operation] of Object.entries(service.operations)) {\n    const operationName = operation.name;\n    if (typeof operationName !== \"string\" || !operationName) {\n      throw new TypeError(`Operation name must be a non-empty string, for property '${propName}'`);\n    }\n    if (operationNames.has(operationName)) {\n      throw new TypeError(`Duplicate operation definition for name: '${operationName}'`);\n    }\n    operationNames.add(operationName);\n  }\n}\n","import { mapKeyValues } from \"../internal/object-utils\";\nimport { Simplify } from \"../internal/types\";\nimport { inputBrand, outputBrand, validateServiceDefinition } from \"./service-definition\";\nimport { OperationDefinition, ServiceDefinition } from \"./service-definition\";\nimport type { TypeInfo } from \"./type-info\";\n\n/**\n * Construct a service definition for a collection of operations.\n *\n * @experimental\n */\nexport function service<Ops extends PartialOperationMap>(\n  name: string,\n  operations: Ops,\n): ServiceDefinition<Simplify<OperationMapFromPartial<Ops>>> {\n  const service = {\n    name,\n    operations: mapKeyValues(operations, (key, op: PartialOperation<any, any>) => ({\n      ...op,\n      name: op.name || key,\n    })),\n  } as ServiceDefinition<OperationMapFromPartial<Ops>>;\n\n  validateServiceDefinition(service);\n  return service;\n}\n\n/**\n * Construct an operation definition as part of a service contract.\n *\n * @experimental\n */\nexport function operation<I, O>(op?: OperationOptions<I, O>): PartialOperation<I, O> {\n  return { ...op } as PartialOperation<I, O>;\n}\n\n/**\n * Options for the {@link operation} function.\n *\n * @experimental\n */\nexport interface OperationOptions<_I, _O> {\n  name?: string;\n  inputType?: TypeInfo<_I, unknown>;\n  outputType?: TypeInfo<_O, unknown>;\n}\n\n/**\n * A named collection of partial operation handlers. Input for the {@link service} function.\n *\n * @experimental\n */\nexport type PartialOperationMap = Record<string, PartialOperation<any, any>>;\n\n/**\n * A type that transforms a {@link PartialOperationMap} into an {@link OperationMap}.\n *\n * @experimental\n */\nexport type OperationMapFromPartial<T extends PartialOperationMap> = {\n  [K in keyof T & string]: T[K] extends PartialOperation<infer I, infer O>\n    ? OperationDefinition<I, O>\n    : never;\n};\n\n/**\n * A partial {@link OperationDefinition} that is used to define an operation in a {@link ServiceDefinition}.\n *\n * The difference between this and {@link OperationDefinition} is that the name is optional.\n *\n * @experimental\n */\nexport interface PartialOperation<I, O> {\n  name?: string;\n  inputType?: TypeInfo<I, unknown>;\n  outputType?: TypeInfo<O, unknown>;\n  [inputBrand]: I;\n  [outputBrand]: O;\n}\n","export {\n  type ServiceDefinition,\n  type OperationDefinition,\n  type OperationMap,\n  type OperationInput,\n  type OperationOutput,\n  type OperationKey,\n} from \"./service-definition\";\n\nexport { type TypeInfo, type TransferTypeConverter } from \"./type-info\";\n\nexport {\n  service,\n  operation,\n  type OperationOptions,\n  type PartialOperationMap,\n  type OperationMapFromPartial,\n  type PartialOperation,\n} from \"./helpers\";\n","/** @import { OperationHandler } from \"./operation-handler\" */\n\n/**\n * An internal symbol, used to prevent direct implementation of interfaces.\n *\n * @hidden\n * @internal\n */\nconst isHandlerStartOperationResultSymbol = Symbol(\"__nexus_isHandlerStartOperationResult\");\n\n/**\n * The return type from the {@link OperationHandler.start} method.\n *\n * Use either {@link HandlerStartOperationResult.sync} or {@link HandlerStartOperationResult.async}\n * to create a result object. Do not implement this interface directly.\n *\n * @experimental\n */\nexport type HandlerStartOperationResult<T = unknown> =\n  | HandlerStartOperationResultSync<T>\n  | HandlerStartOperationResultAsync;\n\n/**\n * The return type from the {@link OperationHandler.start} method.\n *\n * Use either {@link HandlerStartOperationResult.sync} or {@link HandlerStartOperationResult.async}\n * to create a result object. Do not implement this interface directly.\n *\n * @experimental\n */\nexport const HandlerStartOperationResult = {\n  /**\n   * Create a result that indicates that an operation has been accepted and will complete asynchronously.\n   */\n  async(token: string): HandlerStartOperationResultAsync {\n    return {\n      isAsync: true,\n      token,\n      [isHandlerStartOperationResultSymbol]: true,\n    };\n  },\n\n  /**\n   * Create a result that indicates that an operation completed successfully.\n   */\n  sync<T>(value: T): HandlerStartOperationResultSync<T> {\n    return {\n      isAsync: false,\n      value,\n      [isHandlerStartOperationResultSymbol]: true,\n    };\n  },\n\n  [Symbol.hasInstance]: function (this: any, value: object): boolean {\n    return (\n      typeof value === \"object\" &&\n      value !== null &&\n      (value as any)[isHandlerStartOperationResultSymbol] === true\n    );\n  },\n};\n\n/**\n * A result that indicates that an operation completed successfully.\n *\n * Use {@link HandlerStartOperationResult.sync} to create a sync result object.\n * Do not implement this interface directly.\n *\n * @example\n * ```typescript\n *   return HandlerStartOperationResult.sync(42);\n * ```\n *\n * @experimental\n */\nexport interface HandlerStartOperationResultSync<T = unknown> {\n  /**\n   * Indicate whether the operation completed synchronously (false) or will complete\n   * asynchronously (true).\n   */\n  isAsync: false;\n\n  /**\n   * The return value of the operation.\n   */\n  value: T;\n\n  /**\n   * Prevents direct implementation of this interface.\n   *\n   * @hidden\n   * @internal\n   */\n  [isHandlerStartOperationResultSymbol]: true;\n}\n\n/**\n * A result that indicates that an operation has been accepted and will complete asynchronously.\n *\n * Use {@link HandlerStartOperationResult.async} to create an async result object.\n * Do not implement this interface directly.\n *\n * @example\n * ```typescript\n *   return HandlerStartOperationResult.async(\"unique token\");\n * ```\n *\n * @experimental\n */\nexport interface HandlerStartOperationResultAsync {\n  /**\n   * Indicate whether the operation completed synchronously (false) or will complete\n   * asynchronously (true).\n   */\n  isAsync: true;\n\n  /**\n   * A token to identify the operation in followup handler methods such as {@link OperationHandler.getResult}\n   * and {@link OperationHandler.cancel}.\n   */\n  token: string;\n\n  /**\n   * Prevents direct implementation of this interface.\n   *\n   * @hidden\n   * @internal\n   */\n  [isHandlerStartOperationResultSymbol]: true;\n}\n","import { HandlerError } from \"../common\";\nimport { HandlerStartOperationResult } from \"./start-operation-result\";\nimport { CancelOperationContext, StartOperationContext } from \"./operation-context\";\nimport {\n  OperationDefinition,\n  OperationInput,\n  OperationKey,\n  OperationMap,\n  OperationOutput,\n} from \"../service\";\n\n/**\n * A handler for a Nexus operation.\n *\n * This interface is meant to be implemented by Nexus service implementors.\n *\n * @experimental\n */\nexport interface OperationHandler<I, O> {\n  /**\n   * Handle requests to start an operation.\n   *\n   * Return {@link HandlerStartOperationResultSync} to respond successfully inline, or\n   * {@link HandlerStartOperationResultAsync} to indicate that an asynchronous operation was started.\n   * Throw an {@link OperationError} to indicate that an operation completed as failed or canceled.\n   */\n  start(ctx: StartOperationContext, input: I): Promise<HandlerStartOperationResult<O>>;\n\n  /**\n   * Handle requests to cancel an asynchronous operation.\n   *\n   * Cancelation of a Nexus operation is:\n   * 1. _asynchronous_ - returning from this method only confirms that cancelation was notified;\n   *    the implementation may however choose to process the cancellation at a later time, or to\n   *    ignore it entirely.\n   * 2. _idempotent_ - implementations must ignore duplicate cancelations for the same operation.\n   */\n  cancel(ctx: CancelOperationContext, token: string): Promise<void>;\n}\n\n/**\n * A shortcut for defining an operation handler that only implements the {@link OperationHandler.start}\n * method and always returns a {@link HandlerStartOperationResultSync}.\n *\n * @experimental\n */\nexport type SyncOperationHandler<I, O> = (ctx: StartOperationContext, input: I) => Promise<O>;\n\n/**\n * Compiles an operation handler into a {@link CompiledOperationHandler}. A compiled operation\n * handler is a single object that is both an operation definition and a full-fledged operation\n * handler for that operation.\n *\n * @hidden\n * @internal\n */\nexport function compileOperationHandler<I, O>(\n  definition: OperationDefinition<I, O>,\n  handler: OperationHandler<I, O> | SyncOperationHandler<I, O> | undefined,\n): CompiledOperationHandler<I, O> {\n  if (handler == null) {\n    throw new TypeError(\n      `No handler registered for operation '${definition.name}' (expected property name '${definition.name}')`,\n    );\n  }\n\n  if (typeof handler === \"function\") {\n    // Operation handler is declared using the shortcut syntax. Wrap it into a full-fledged handler.\n    return {\n      ...definition,\n\n      start: async (ctx, input) => {\n        return HandlerStartOperationResult.sync(await handler(ctx, input));\n      },\n      cancel: notImplemented,\n    };\n  }\n\n  if (typeof handler.start !== \"function\") {\n    throw new TypeError(`Handler for operation '${definition.name}' has no start method`);\n  }\n\n  return {\n    ...definition,\n\n    // Defensively ensure that the handler has all the required methods,\n    // defaulting to throwing a not implemented error if some methods are missing.\n    start: handler.start.bind(handler),\n    cancel: handler.cancel?.bind(handler) ?? notImplemented,\n  };\n}\n\n/**\n * A compiled operation handler is a single object that is both an operation definition and a\n * full-fledged operation handler for that operation.\n *\n * @hidden\n * @internal\n * @experimental\n */\nexport type CompiledOperationHandler<I, O> = OperationDefinition<I, O> & OperationHandler<I, O>;\n\n/**\n * @internal\n * @hidden\n */\nexport type CompiledOperationHandlerFor<Ops extends OperationMap> = CompiledOperationHandler<\n  OperationInput<Ops[OperationKey<Ops>]>,\n  OperationOutput<Ops[OperationKey<Ops>]>\n>;\n\n/**\n * @internal\n * @hidden\n */\nfunction notImplemented(): never {\n  throw new HandlerError(\"NOT_IMPLEMENTED\", \"Not implemented\");\n}\n","import { HandlerError } from \"../common\";\nimport { OperationDefinition, OperationKey, OperationMap, ServiceDefinition } from \"../service\";\nimport {\n  CompiledOperationHandlerFor,\n  compileOperationHandler,\n  OperationHandler,\n  SyncOperationHandler,\n} from \"./operation-handler\";\n\n/**\n * A Nexus Service implementation, that provides handlers for each of its operations.\n *\n * @experimental\n */\nexport class ServiceHandler<Ops extends OperationMap = OperationMap> {\n  /**\n   * Build a `ServiceHandler` from a service definition and a collection of operation handlers.\n   *\n   * There must be an operation handler for every operation in the service definition.\n   *\n   * @param service The service definition\n   * @param handlers The collection of handlers\n   * @returns The compiled service handler\n   *\n   * @internal\n   * @hidden\n   */\n  static build<Ops extends OperationMap>(\n    service: ServiceDefinition<Ops>,\n    handlers: ServiceHandlerFor<Ops>,\n  ): ServiceHandler<Ops> {\n    const operations = new Map<OperationKey<Ops>, CompiledOperationHandlerFor<Ops>>();\n\n    for (const [propName, definition] of Object.entries(service.operations)) {\n      const compiledOpHandler = compileOperationHandler(definition, handlers[propName]);\n      const operationName = compiledOpHandler.name as OperationKey<Ops>;\n\n      if (operations.has(operationName)) {\n        throw new TypeError(\n          `Operation with name '${operationName}' already registered for service '${service.name}'`,\n        );\n      }\n\n      operations.set(operationName, compiledOpHandler);\n    }\n\n    return new ServiceHandler(service, handlers, operations);\n  }\n\n  private constructor(\n    public readonly definition: ServiceDefinition<Ops>,\n    public readonly handlers: ServiceHandlerFor<Ops>,\n    private readonly operationsMap: Map<OperationKey<Ops>, CompiledOperationHandlerFor<Ops>>,\n  ) {}\n\n  /**\n   * Returns the definition and handler for a given operation.\n   *\n   * @param operationName\n   */\n  public getOperationHandler<K extends OperationKey<Ops>>(\n    operationName: K,\n  ): CompiledOperationHandlerFor<Ops> {\n    const entry = this.operationsMap.get(operationName);\n    if (entry == null) {\n      throw new HandlerError(\n        \"NOT_FOUND\",\n        `Operation handler not registered for operation '${operationName}' in service '${this.definition.name}'`,\n      );\n    }\n    return entry;\n  }\n}\n\n/**\n * Constructs a service handler for a given service contract.\n *\n * @experimental\n */\nexport function serviceHandler<Ops extends OperationMap>(\n  service: ServiceDefinition<Ops>,\n  handlers: ServiceHandlerFor<Ops>,\n): ServiceHandler<Ops> {\n  return ServiceHandler.build(service, handlers);\n}\n\n/**\n * A type that defines a handler for a given operation.\n *\n * @experimental\n */\nexport type OperationHandlerFor<T> =\n  T extends OperationDefinition<infer I, infer O>\n    ? OperationHandler<I, O> | SyncOperationHandler<I, O>\n    : never;\n\n/**\n * A type that defines a collection of handlers for a given collection of operation interfaces.\n *\n * @experimental\n */\nexport type ServiceHandlerFor<T extends OperationMap = OperationMap> = {\n  [K in keyof T & string]: OperationHandlerFor<T[K]>;\n};\n","export {\n  type OperationContext,\n  type StartOperationContext,\n  type CancelOperationContext,\n} from \"./operation-context\";\n\nexport {\n  HandlerStartOperationResult,\n  type HandlerStartOperationResultSync,\n  type HandlerStartOperationResultAsync,\n} from \"./start-operation-result\";\n\nexport {\n  //\n  type OperationHandler,\n  type SyncOperationHandler,\n} from \"./operation-handler\";\n\nexport {\n  ServiceHandler,\n  serviceHandler,\n  type OperationHandlerFor,\n  type ServiceHandlerFor,\n} from \"./service-handler\";\n","export * from \"./common\";\nexport * from \"./service\";\nexport * from \"./handler\";\n","// GENERATED FILE. DO NOT EDIT.\n(function (global, factory) {\n  function preferDefault(exports) {\n    return exports.default || exports;\n  }\n  if (typeof define === \"function\" && define.amd) {\n    define([], function () {\n      var exports = {};\n      factory(exports);\n      return preferDefault(exports);\n    });\n  } else if (typeof exports === \"object\") {\n    factory(exports);\n    if (typeof module === \"object\") module.exports = preferDefault(exports);\n  } else {\n    (function () {\n      var exports = {};\n      factory(exports);\n      global.Long = preferDefault(exports);\n    })();\n  }\n})(\n  typeof globalThis !== \"undefined\"\n    ? globalThis\n    : typeof self !== \"undefined\"\n      ? self\n      : this,\n  function (_exports) {\n    \"use strict\";\n\n    Object.defineProperty(_exports, \"__esModule\", {\n      value: true,\n    });\n    _exports.default = void 0;\n    /**\n     * @license\n     * Copyright 2009 The Closure Library Authors\n     * Copyright 2020 Daniel Wirtz / The long.js Authors.\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *     http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     *\n     * SPDX-License-Identifier: Apache-2.0\n     */\n\n    // WebAssembly optimizations to do native i64 multiplication and divide\n    var wasm = null;\n    try {\n      wasm = new WebAssembly.Instance(\n        new WebAssembly.Module(\n          new Uint8Array([\n            // \\0asm\n            0, 97, 115, 109,\n            // version 1\n            1, 0, 0, 0,\n            // section \"type\"\n            1, 13, 2,\n            // 0, () => i32\n            96, 0, 1, 127,\n            // 1, (i32, i32, i32, i32) => i32\n            96, 4, 127, 127, 127, 127, 1, 127,\n            // section \"function\"\n            3, 7, 6,\n            // 0, type 0\n            0,\n            // 1, type 1\n            1,\n            // 2, type 1\n            1,\n            // 3, type 1\n            1,\n            // 4, type 1\n            1,\n            // 5, type 1\n            1,\n            // section \"global\"\n            6, 6, 1,\n            // 0, \"high\", mutable i32\n            127, 1, 65, 0, 11,\n            // section \"export\"\n            7, 50, 6,\n            // 0, \"mul\"\n            3, 109, 117, 108, 0, 1,\n            // 1, \"div_s\"\n            5, 100, 105, 118, 95, 115, 0, 2,\n            // 2, \"div_u\"\n            5, 100, 105, 118, 95, 117, 0, 3,\n            // 3, \"rem_s\"\n            5, 114, 101, 109, 95, 115, 0, 4,\n            // 4, \"rem_u\"\n            5, 114, 101, 109, 95, 117, 0, 5,\n            // 5, \"get_high\"\n            8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0,\n            // section \"code\"\n            10, 191, 1, 6,\n            // 0, \"get_high\"\n            4, 0, 35, 0, 11,\n            // 1, \"mul\"\n            36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173,\n            32, 3, 173, 66, 32, 134, 132, 126, 34, 4, 66, 32, 135, 167, 36, 0,\n            32, 4, 167, 11,\n            // 2, \"div_s\"\n            36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173,\n            32, 3, 173, 66, 32, 134, 132, 127, 34, 4, 66, 32, 135, 167, 36, 0,\n            32, 4, 167, 11,\n            // 3, \"div_u\"\n            36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173,\n            32, 3, 173, 66, 32, 134, 132, 128, 34, 4, 66, 32, 135, 167, 36, 0,\n            32, 4, 167, 11,\n            // 4, \"rem_s\"\n            36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173,\n            32, 3, 173, 66, 32, 134, 132, 129, 34, 4, 66, 32, 135, 167, 36, 0,\n            32, 4, 167, 11,\n            // 5, \"rem_u\"\n            36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173,\n            32, 3, 173, 66, 32, 134, 132, 130, 34, 4, 66, 32, 135, 167, 36, 0,\n            32, 4, 167, 11,\n          ]),\n        ),\n        {},\n      ).exports;\n    } catch {\n      // no wasm support :(\n    }\n\n    /**\n     * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers.\n     *  See the from* functions below for more convenient ways of constructing Longs.\n     * @exports Long\n     * @class A Long class for representing a 64 bit two's-complement integer value.\n     * @param {number} low The low (signed) 32 bits of the long\n     * @param {number} high The high (signed) 32 bits of the long\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n     * @constructor\n     */\n    function Long(low, high, unsigned) {\n      /**\n       * The low 32 bits as a signed value.\n       * @type {number}\n       */\n      this.low = low | 0;\n\n      /**\n       * The high 32 bits as a signed value.\n       * @type {number}\n       */\n      this.high = high | 0;\n\n      /**\n       * Whether unsigned or not.\n       * @type {boolean}\n       */\n      this.unsigned = !!unsigned;\n    }\n\n    // The internal representation of a long is the two given signed, 32-bit values.\n    // We use 32-bit pieces because these are the size of integers on which\n    // Javascript performs bit-operations.  For operations like addition and\n    // multiplication, we split each number into 16 bit pieces, which can easily be\n    // multiplied within Javascript's floating-point representation without overflow\n    // or change in sign.\n    //\n    // In the algorithms below, we frequently reduce the negative case to the\n    // positive case by negating the input(s) and then post-processing the result.\n    // Note that we must ALWAYS check specially whether those values are MIN_VALUE\n    // (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as\n    // a positive number, it overflows back into a negative).  Not handling this\n    // case would often result in infinite recursion.\n    //\n    // Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the from*\n    // methods on which they depend.\n\n    /**\n     * An indicator used to reliably determine if an object is a Long or not.\n     * @type {boolean}\n     * @const\n     * @private\n     */\n    Long.prototype.__isLong__;\n    Object.defineProperty(Long.prototype, \"__isLong__\", {\n      value: true,\n    });\n\n    /**\n     * @function\n     * @param {*} obj Object\n     * @returns {boolean}\n     * @inner\n     */\n    function isLong(obj) {\n      return (obj && obj[\"__isLong__\"]) === true;\n    }\n\n    /**\n     * @function\n     * @param {*} value number\n     * @returns {number}\n     * @inner\n     */\n    function ctz32(value) {\n      var c = Math.clz32(value & -value);\n      return value ? 31 - c : c;\n    }\n\n    /**\n     * Tests if the specified object is a Long.\n     * @function\n     * @param {*} obj Object\n     * @returns {boolean}\n     */\n    Long.isLong = isLong;\n\n    /**\n     * A cache of the Long representations of small integer values.\n     * @type {!Object}\n     * @inner\n     */\n    var INT_CACHE = {};\n\n    /**\n     * A cache of the Long representations of small unsigned integer values.\n     * @type {!Object}\n     * @inner\n     */\n    var UINT_CACHE = {};\n\n    /**\n     * @param {number} value\n     * @param {boolean=} unsigned\n     * @returns {!Long}\n     * @inner\n     */\n    function fromInt(value, unsigned) {\n      var obj, cachedObj, cache;\n      if (unsigned) {\n        value >>>= 0;\n        if ((cache = 0 <= value && value < 256)) {\n          cachedObj = UINT_CACHE[value];\n          if (cachedObj) return cachedObj;\n        }\n        obj = fromBits(value, 0, true);\n        if (cache) UINT_CACHE[value] = obj;\n        return obj;\n      } else {\n        value |= 0;\n        if ((cache = -128 <= value && value < 128)) {\n          cachedObj = INT_CACHE[value];\n          if (cachedObj) return cachedObj;\n        }\n        obj = fromBits(value, value < 0 ? -1 : 0, false);\n        if (cache) INT_CACHE[value] = obj;\n        return obj;\n      }\n    }\n\n    /**\n     * Returns a Long representing the given 32 bit integer value.\n     * @function\n     * @param {number} value The 32 bit integer in question\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n     * @returns {!Long} The corresponding Long value\n     */\n    Long.fromInt = fromInt;\n\n    /**\n     * @param {number} value\n     * @param {boolean=} unsigned\n     * @returns {!Long}\n     * @inner\n     */\n    function fromNumber(value, unsigned) {\n      if (isNaN(value)) return unsigned ? UZERO : ZERO;\n      if (unsigned) {\n        if (value < 0) return UZERO;\n        if (value >= TWO_PWR_64_DBL) return MAX_UNSIGNED_VALUE;\n      } else {\n        if (value <= -TWO_PWR_63_DBL) return MIN_VALUE;\n        if (value + 1 >= TWO_PWR_63_DBL) return MAX_VALUE;\n      }\n      if (value < 0) return fromNumber(-value, unsigned).neg();\n      return fromBits(\n        value % TWO_PWR_32_DBL | 0,\n        (value / TWO_PWR_32_DBL) | 0,\n        unsigned,\n      );\n    }\n\n    /**\n     * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.\n     * @function\n     * @param {number} value The number in question\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n     * @returns {!Long} The corresponding Long value\n     */\n    Long.fromNumber = fromNumber;\n\n    /**\n     * @param {number} lowBits\n     * @param {number} highBits\n     * @param {boolean=} unsigned\n     * @returns {!Long}\n     * @inner\n     */\n    function fromBits(lowBits, highBits, unsigned) {\n      return new Long(lowBits, highBits, unsigned);\n    }\n\n    /**\n     * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is\n     *  assumed to use 32 bits.\n     * @function\n     * @param {number} lowBits The low 32 bits\n     * @param {number} highBits The high 32 bits\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n     * @returns {!Long} The corresponding Long value\n     */\n    Long.fromBits = fromBits;\n\n    /**\n     * @function\n     * @param {number} base\n     * @param {number} exponent\n     * @returns {number}\n     * @inner\n     */\n    var pow_dbl = Math.pow; // Used 4 times (4*8 to 15+4)\n\n    /**\n     * @param {string} str\n     * @param {(boolean|number)=} unsigned\n     * @param {number=} radix\n     * @returns {!Long}\n     * @inner\n     */\n    function fromString(str, unsigned, radix) {\n      if (str.length === 0) throw Error(\"empty string\");\n      if (typeof unsigned === \"number\") {\n        // For goog.math.long compatibility\n        radix = unsigned;\n        unsigned = false;\n      } else {\n        unsigned = !!unsigned;\n      }\n      if (\n        str === \"NaN\" ||\n        str === \"Infinity\" ||\n        str === \"+Infinity\" ||\n        str === \"-Infinity\"\n      )\n        return unsigned ? UZERO : ZERO;\n      radix = radix || 10;\n      if (radix < 2 || 36 < radix) throw RangeError(\"radix\");\n      var p;\n      if ((p = str.indexOf(\"-\")) > 0) throw Error(\"interior hyphen\");\n      else if (p === 0) {\n        return fromString(str.substring(1), unsigned, radix).neg();\n      }\n\n      // Do several (8) digits each time through the loop, so as to\n      // minimize the calls to the very expensive emulated div.\n      var radixToPower = fromNumber(pow_dbl(radix, 8));\n      var result = ZERO;\n      for (var i = 0; i < str.length; i += 8) {\n        var size = Math.min(8, str.length - i),\n          value = parseInt(str.substring(i, i + size), radix);\n        if (size < 8) {\n          var power = fromNumber(pow_dbl(radix, size));\n          result = result.mul(power).add(fromNumber(value));\n        } else {\n          result = result.mul(radixToPower);\n          result = result.add(fromNumber(value));\n        }\n      }\n      result.unsigned = unsigned;\n      return result;\n    }\n\n    /**\n     * Returns a Long representation of the given string, written using the specified radix.\n     * @function\n     * @param {string} str The textual representation of the Long\n     * @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to signed\n     * @param {number=} radix The radix in which the text is written (2-36), defaults to 10\n     * @returns {!Long} The corresponding Long value\n     */\n    Long.fromString = fromString;\n\n    /**\n     * @function\n     * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val\n     * @param {boolean=} unsigned\n     * @returns {!Long}\n     * @inner\n     */\n    function fromValue(val, unsigned) {\n      if (typeof val === \"number\") return fromNumber(val, unsigned);\n      if (typeof val === \"string\") return fromString(val, unsigned);\n      // Throws for non-objects, converts non-instanceof Long:\n      return fromBits(\n        val.low,\n        val.high,\n        typeof unsigned === \"boolean\" ? unsigned : val.unsigned,\n      );\n    }\n\n    /**\n     * Converts the specified value to a Long using the appropriate from* function for its type.\n     * @function\n     * @param {!Long|number|bigint|string|!{low: number, high: number, unsigned: boolean}} val Value\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n     * @returns {!Long}\n     */\n    Long.fromValue = fromValue;\n\n    // NOTE: the compiler should inline these constant values below and then remove these variables, so there should be\n    // no runtime penalty for these.\n\n    /**\n     * @type {number}\n     * @const\n     * @inner\n     */\n    var TWO_PWR_16_DBL = 1 << 16;\n\n    /**\n     * @type {number}\n     * @const\n     * @inner\n     */\n    var TWO_PWR_24_DBL = 1 << 24;\n\n    /**\n     * @type {number}\n     * @const\n     * @inner\n     */\n    var TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;\n\n    /**\n     * @type {number}\n     * @const\n     * @inner\n     */\n    var TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;\n\n    /**\n     * @type {number}\n     * @const\n     * @inner\n     */\n    var TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;\n\n    /**\n     * @type {!Long}\n     * @const\n     * @inner\n     */\n    var TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);\n\n    /**\n     * @type {!Long}\n     * @inner\n     */\n    var ZERO = fromInt(0);\n\n    /**\n     * Signed zero.\n     * @type {!Long}\n     */\n    Long.ZERO = ZERO;\n\n    /**\n     * @type {!Long}\n     * @inner\n     */\n    var UZERO = fromInt(0, true);\n\n    /**\n     * Unsigned zero.\n     * @type {!Long}\n     */\n    Long.UZERO = UZERO;\n\n    /**\n     * @type {!Long}\n     * @inner\n     */\n    var ONE = fromInt(1);\n\n    /**\n     * Signed one.\n     * @type {!Long}\n     */\n    Long.ONE = ONE;\n\n    /**\n     * @type {!Long}\n     * @inner\n     */\n    var UONE = fromInt(1, true);\n\n    /**\n     * Unsigned one.\n     * @type {!Long}\n     */\n    Long.UONE = UONE;\n\n    /**\n     * @type {!Long}\n     * @inner\n     */\n    var NEG_ONE = fromInt(-1);\n\n    /**\n     * Signed negative one.\n     * @type {!Long}\n     */\n    Long.NEG_ONE = NEG_ONE;\n\n    /**\n     * @type {!Long}\n     * @inner\n     */\n    var MAX_VALUE = fromBits(0xffffffff | 0, 0x7fffffff | 0, false);\n\n    /**\n     * Maximum signed value.\n     * @type {!Long}\n     */\n    Long.MAX_VALUE = MAX_VALUE;\n\n    /**\n     * @type {!Long}\n     * @inner\n     */\n    var MAX_UNSIGNED_VALUE = fromBits(0xffffffff | 0, 0xffffffff | 0, true);\n\n    /**\n     * Maximum unsigned value.\n     * @type {!Long}\n     */\n    Long.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;\n\n    /**\n     * @type {!Long}\n     * @inner\n     */\n    var MIN_VALUE = fromBits(0, 0x80000000 | 0, false);\n\n    /**\n     * Minimum signed value.\n     * @type {!Long}\n     */\n    Long.MIN_VALUE = MIN_VALUE;\n\n    /**\n     * @alias Long.prototype\n     * @inner\n     */\n    var LongPrototype = Long.prototype;\n\n    /**\n     * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.\n     * @this {!Long}\n     * @returns {number}\n     */\n    LongPrototype.toInt = function toInt() {\n      return this.unsigned ? this.low >>> 0 : this.low;\n    };\n\n    /**\n     * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).\n     * @this {!Long}\n     * @returns {number}\n     */\n    LongPrototype.toNumber = function toNumber() {\n      if (this.unsigned)\n        return (this.high >>> 0) * TWO_PWR_32_DBL + (this.low >>> 0);\n      return this.high * TWO_PWR_32_DBL + (this.low >>> 0);\n    };\n\n    /**\n     * Converts the Long to a string written in the specified radix.\n     * @this {!Long}\n     * @param {number=} radix Radix (2-36), defaults to 10\n     * @returns {string}\n     * @override\n     * @throws {RangeError} If `radix` is out of range\n     */\n    LongPrototype.toString = function toString(radix) {\n      radix = radix || 10;\n      if (radix < 2 || 36 < radix) throw RangeError(\"radix\");\n      if (this.isZero()) return \"0\";\n      if (this.isNegative()) {\n        // Unsigned Longs are never negative\n        if (this.eq(MIN_VALUE)) {\n          // We need to change the Long value before it can be negated, so we remove\n          // the bottom-most digit in this base and then recurse to do the rest.\n          var radixLong = fromNumber(radix),\n            div = this.div(radixLong),\n            rem1 = div.mul(radixLong).sub(this);\n          return div.toString(radix) + rem1.toInt().toString(radix);\n        } else return \"-\" + this.neg().toString(radix);\n      }\n\n      // Do several (6) digits each time through the loop, so as to\n      // minimize the calls to the very expensive emulated div.\n      var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned),\n        rem = this;\n      var result = \"\";\n      while (true) {\n        var remDiv = rem.div(radixToPower),\n          intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0,\n          digits = intval.toString(radix);\n        rem = remDiv;\n        if (rem.isZero()) return digits + result;\n        else {\n          while (digits.length < 6) digits = \"0\" + digits;\n          result = \"\" + digits + result;\n        }\n      }\n    };\n\n    /**\n     * Gets the high 32 bits as a signed integer.\n     * @this {!Long}\n     * @returns {number} Signed high bits\n     */\n    LongPrototype.getHighBits = function getHighBits() {\n      return this.high;\n    };\n\n    /**\n     * Gets the high 32 bits as an unsigned integer.\n     * @this {!Long}\n     * @returns {number} Unsigned high bits\n     */\n    LongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {\n      return this.high >>> 0;\n    };\n\n    /**\n     * Gets the low 32 bits as a signed integer.\n     * @this {!Long}\n     * @returns {number} Signed low bits\n     */\n    LongPrototype.getLowBits = function getLowBits() {\n      return this.low;\n    };\n\n    /**\n     * Gets the low 32 bits as an unsigned integer.\n     * @this {!Long}\n     * @returns {number} Unsigned low bits\n     */\n    LongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {\n      return this.low >>> 0;\n    };\n\n    /**\n     * Gets the number of bits needed to represent the absolute value of this Long.\n     * @this {!Long}\n     * @returns {number}\n     */\n    LongPrototype.getNumBitsAbs = function getNumBitsAbs() {\n      if (this.isNegative())\n        // Unsigned Longs are never negative\n        return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();\n      var val = this.high != 0 ? this.high : this.low;\n      for (var bit = 31; bit > 0; bit--) if ((val & (1 << bit)) != 0) break;\n      return this.high != 0 ? bit + 33 : bit + 1;\n    };\n\n    /**\n     * Tests if this Long can be safely represented as a JavaScript number.\n     * @this {!Long}\n     * @returns {boolean}\n     */\n    LongPrototype.isSafeInteger = function isSafeInteger() {\n      // 2^53-1 is the maximum safe value\n      var top11Bits = this.high >> 21;\n      // [0, 2^53-1]\n      if (!top11Bits) return true;\n      // > 2^53-1\n      if (this.unsigned) return false;\n      // [-2^53, -1] except -2^53\n      return top11Bits === -1 && !(this.low === 0 && this.high === -0x200000);\n    };\n\n    /**\n     * Tests if this Long's value equals zero.\n     * @this {!Long}\n     * @returns {boolean}\n     */\n    LongPrototype.isZero = function isZero() {\n      return this.high === 0 && this.low === 0;\n    };\n\n    /**\n     * Tests if this Long's value equals zero. This is an alias of {@link Long#isZero}.\n     * @returns {boolean}\n     */\n    LongPrototype.eqz = LongPrototype.isZero;\n\n    /**\n     * Tests if this Long's value is negative.\n     * @this {!Long}\n     * @returns {boolean}\n     */\n    LongPrototype.isNegative = function isNegative() {\n      return !this.unsigned && this.high < 0;\n    };\n\n    /**\n     * Tests if this Long's value is positive or zero.\n     * @this {!Long}\n     * @returns {boolean}\n     */\n    LongPrototype.isPositive = function isPositive() {\n      return this.unsigned || this.high >= 0;\n    };\n\n    /**\n     * Tests if this Long's value is odd.\n     * @this {!Long}\n     * @returns {boolean}\n     */\n    LongPrototype.isOdd = function isOdd() {\n      return (this.low & 1) === 1;\n    };\n\n    /**\n     * Tests if this Long's value is even.\n     * @this {!Long}\n     * @returns {boolean}\n     */\n    LongPrototype.isEven = function isEven() {\n      return (this.low & 1) === 0;\n    };\n\n    /**\n     * Tests if this Long's value equals the specified's.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.equals = function equals(other) {\n      if (!isLong(other)) other = fromValue(other);\n      if (\n        this.unsigned !== other.unsigned &&\n        this.high >>> 31 === 1 &&\n        other.high >>> 31 === 1\n      )\n        return false;\n      return this.high === other.high && this.low === other.low;\n    };\n\n    /**\n     * Tests if this Long's value equals the specified's. This is an alias of {@link Long#equals}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.eq = LongPrototype.equals;\n\n    /**\n     * Tests if this Long's value differs from the specified's.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.notEquals = function notEquals(other) {\n      return !this.eq(/* validates */ other);\n    };\n\n    /**\n     * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.neq = LongPrototype.notEquals;\n\n    /**\n     * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.ne = LongPrototype.notEquals;\n\n    /**\n     * Tests if this Long's value is less than the specified's.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.lessThan = function lessThan(other) {\n      return this.comp(/* validates */ other) < 0;\n    };\n\n    /**\n     * Tests if this Long's value is less than the specified's. This is an alias of {@link Long#lessThan}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.lt = LongPrototype.lessThan;\n\n    /**\n     * Tests if this Long's value is less than or equal the specified's.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {\n      return this.comp(/* validates */ other) <= 0;\n    };\n\n    /**\n     * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.lte = LongPrototype.lessThanOrEqual;\n\n    /**\n     * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.le = LongPrototype.lessThanOrEqual;\n\n    /**\n     * Tests if this Long's value is greater than the specified's.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.greaterThan = function greaterThan(other) {\n      return this.comp(/* validates */ other) > 0;\n    };\n\n    /**\n     * Tests if this Long's value is greater than the specified's. This is an alias of {@link Long#greaterThan}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.gt = LongPrototype.greaterThan;\n\n    /**\n     * Tests if this Long's value is greater than or equal the specified's.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {\n      return this.comp(/* validates */ other) >= 0;\n    };\n\n    /**\n     * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.gte = LongPrototype.greaterThanOrEqual;\n\n    /**\n     * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.ge = LongPrototype.greaterThanOrEqual;\n\n    /**\n     * Compares this Long's value with the specified's.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {number} 0 if they are the same, 1 if the this is greater and -1\n     *  if the given one is greater\n     */\n    LongPrototype.compare = function compare(other) {\n      if (!isLong(other)) other = fromValue(other);\n      if (this.eq(other)) return 0;\n      var thisNeg = this.isNegative(),\n        otherNeg = other.isNegative();\n      if (thisNeg && !otherNeg) return -1;\n      if (!thisNeg && otherNeg) return 1;\n      // At this point the sign bits are the same\n      if (!this.unsigned) return this.sub(other).isNegative() ? -1 : 1;\n      // Both are positive if at least one is unsigned\n      return other.high >>> 0 > this.high >>> 0 ||\n        (other.high === this.high && other.low >>> 0 > this.low >>> 0)\n        ? -1\n        : 1;\n    };\n\n    /**\n     * Compares this Long's value with the specified's. This is an alias of {@link Long#compare}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {number} 0 if they are the same, 1 if the this is greater and -1\n     *  if the given one is greater\n     */\n    LongPrototype.comp = LongPrototype.compare;\n\n    /**\n     * Negates this Long's value.\n     * @this {!Long}\n     * @returns {!Long} Negated Long\n     */\n    LongPrototype.negate = function negate() {\n      if (!this.unsigned && this.eq(MIN_VALUE)) return MIN_VALUE;\n      return this.not().add(ONE);\n    };\n\n    /**\n     * Negates this Long's value. This is an alias of {@link Long#negate}.\n     * @function\n     * @returns {!Long} Negated Long\n     */\n    LongPrototype.neg = LongPrototype.negate;\n\n    /**\n     * Returns the sum of this and the specified Long.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} addend Addend\n     * @returns {!Long} Sum\n     */\n    LongPrototype.add = function add(addend) {\n      if (!isLong(addend)) addend = fromValue(addend);\n\n      // Divide each number into 4 chunks of 16 bits, and then sum the chunks.\n\n      var a48 = this.high >>> 16;\n      var a32 = this.high & 0xffff;\n      var a16 = this.low >>> 16;\n      var a00 = this.low & 0xffff;\n      var b48 = addend.high >>> 16;\n      var b32 = addend.high & 0xffff;\n      var b16 = addend.low >>> 16;\n      var b00 = addend.low & 0xffff;\n      var c48 = 0,\n        c32 = 0,\n        c16 = 0,\n        c00 = 0;\n      c00 += a00 + b00;\n      c16 += c00 >>> 16;\n      c00 &= 0xffff;\n      c16 += a16 + b16;\n      c32 += c16 >>> 16;\n      c16 &= 0xffff;\n      c32 += a32 + b32;\n      c48 += c32 >>> 16;\n      c32 &= 0xffff;\n      c48 += a48 + b48;\n      c48 &= 0xffff;\n      return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\n    };\n\n    /**\n     * Returns the difference of this and the specified Long.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} subtrahend Subtrahend\n     * @returns {!Long} Difference\n     */\n    LongPrototype.subtract = function subtract(subtrahend) {\n      if (!isLong(subtrahend)) subtrahend = fromValue(subtrahend);\n      return this.add(subtrahend.neg());\n    };\n\n    /**\n     * Returns the difference of this and the specified Long. This is an alias of {@link Long#subtract}.\n     * @function\n     * @param {!Long|number|bigint|string} subtrahend Subtrahend\n     * @returns {!Long} Difference\n     */\n    LongPrototype.sub = LongPrototype.subtract;\n\n    /**\n     * Returns the product of this and the specified Long.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} multiplier Multiplier\n     * @returns {!Long} Product\n     */\n    LongPrototype.multiply = function multiply(multiplier) {\n      if (this.isZero()) return this;\n      if (!isLong(multiplier)) multiplier = fromValue(multiplier);\n\n      // use wasm support if present\n      if (wasm) {\n        var low = wasm[\"mul\"](\n          this.low,\n          this.high,\n          multiplier.low,\n          multiplier.high,\n        );\n        return fromBits(low, wasm[\"get_high\"](), this.unsigned);\n      }\n      if (multiplier.isZero()) return this.unsigned ? UZERO : ZERO;\n      if (this.eq(MIN_VALUE)) return multiplier.isOdd() ? MIN_VALUE : ZERO;\n      if (multiplier.eq(MIN_VALUE)) return this.isOdd() ? MIN_VALUE : ZERO;\n      if (this.isNegative()) {\n        if (multiplier.isNegative()) return this.neg().mul(multiplier.neg());\n        else return this.neg().mul(multiplier).neg();\n      } else if (multiplier.isNegative())\n        return this.mul(multiplier.neg()).neg();\n\n      // If both longs are small, use float multiplication\n      if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24))\n        return fromNumber(\n          this.toNumber() * multiplier.toNumber(),\n          this.unsigned,\n        );\n\n      // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.\n      // We can skip products that would overflow.\n\n      var a48 = this.high >>> 16;\n      var a32 = this.high & 0xffff;\n      var a16 = this.low >>> 16;\n      var a00 = this.low & 0xffff;\n      var b48 = multiplier.high >>> 16;\n      var b32 = multiplier.high & 0xffff;\n      var b16 = multiplier.low >>> 16;\n      var b00 = multiplier.low & 0xffff;\n      var c48 = 0,\n        c32 = 0,\n        c16 = 0,\n        c00 = 0;\n      c00 += a00 * b00;\n      c16 += c00 >>> 16;\n      c00 &= 0xffff;\n      c16 += a16 * b00;\n      c32 += c16 >>> 16;\n      c16 &= 0xffff;\n      c16 += a00 * b16;\n      c32 += c16 >>> 16;\n      c16 &= 0xffff;\n      c32 += a32 * b00;\n      c48 += c32 >>> 16;\n      c32 &= 0xffff;\n      c32 += a16 * b16;\n      c48 += c32 >>> 16;\n      c32 &= 0xffff;\n      c32 += a00 * b32;\n      c48 += c32 >>> 16;\n      c32 &= 0xffff;\n      c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;\n      c48 &= 0xffff;\n      return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\n    };\n\n    /**\n     * Returns the product of this and the specified Long. This is an alias of {@link Long#multiply}.\n     * @function\n     * @param {!Long|number|bigint|string} multiplier Multiplier\n     * @returns {!Long} Product\n     */\n    LongPrototype.mul = LongPrototype.multiply;\n\n    /**\n     * Returns this Long divided by the specified. The result is signed if this Long is signed or\n     *  unsigned if this Long is unsigned.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} divisor Divisor\n     * @returns {!Long} Quotient\n     */\n    LongPrototype.divide = function divide(divisor) {\n      if (!isLong(divisor)) divisor = fromValue(divisor);\n      if (divisor.isZero()) throw Error(\"division by zero\");\n\n      // use wasm support if present\n      if (wasm) {\n        // guard against signed division overflow: the largest\n        // negative number / -1 would be 1 larger than the largest\n        // positive number, due to two's complement.\n        if (\n          !this.unsigned &&\n          this.high === -0x80000000 &&\n          divisor.low === -1 &&\n          divisor.high === -1\n        ) {\n          // be consistent with non-wasm code path\n          return this;\n        }\n        var low = (this.unsigned ? wasm[\"div_u\"] : wasm[\"div_s\"])(\n          this.low,\n          this.high,\n          divisor.low,\n          divisor.high,\n        );\n        return fromBits(low, wasm[\"get_high\"](), this.unsigned);\n      }\n      if (this.isZero()) return this.unsigned ? UZERO : ZERO;\n      var approx, rem, res;\n      if (!this.unsigned) {\n        // This section is only relevant for signed longs and is derived from the\n        // closure library as a whole.\n        if (this.eq(MIN_VALUE)) {\n          if (divisor.eq(ONE) || divisor.eq(NEG_ONE))\n            return MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE\n          else if (divisor.eq(MIN_VALUE)) return ONE;\n          else {\n            // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.\n            var halfThis = this.shr(1);\n            approx = halfThis.div(divisor).shl(1);\n            if (approx.eq(ZERO)) {\n              return divisor.isNegative() ? ONE : NEG_ONE;\n            } else {\n              rem = this.sub(divisor.mul(approx));\n              res = approx.add(rem.div(divisor));\n              return res;\n            }\n          }\n        } else if (divisor.eq(MIN_VALUE)) return this.unsigned ? UZERO : ZERO;\n        if (this.isNegative()) {\n          if (divisor.isNegative()) return this.neg().div(divisor.neg());\n          return this.neg().div(divisor).neg();\n        } else if (divisor.isNegative()) return this.div(divisor.neg()).neg();\n        res = ZERO;\n      } else {\n        // The algorithm below has not been made for unsigned longs. It's therefore\n        // required to take special care of the MSB prior to running it.\n        if (!divisor.unsigned) divisor = divisor.toUnsigned();\n        if (divisor.gt(this)) return UZERO;\n        if (divisor.gt(this.shru(1)))\n          // 15 >>> 1 = 7 ; with divisor = 8 ; true\n          return UONE;\n        res = UZERO;\n      }\n\n      // Repeat the following until the remainder is less than other:  find a\n      // floating-point that approximates remainder / other *from below*, add this\n      // into the result, and subtract it from the remainder.  It is critical that\n      // the approximate value is less than or equal to the real value so that the\n      // remainder never becomes negative.\n      rem = this;\n      while (rem.gte(divisor)) {\n        // Approximate the result of division. This may be a little greater or\n        // smaller than the actual value.\n        approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber()));\n\n        // We will tweak the approximate result by changing it in the 48-th digit or\n        // the smallest non-fractional digit, whichever is larger.\n        var log2 = Math.ceil(Math.log(approx) / Math.LN2),\n          delta = log2 <= 48 ? 1 : pow_dbl(2, log2 - 48),\n          // Decrease the approximation until it is smaller than the remainder.  Note\n          // that if it is too large, the product overflows and is negative.\n          approxRes = fromNumber(approx),\n          approxRem = approxRes.mul(divisor);\n        while (approxRem.isNegative() || approxRem.gt(rem)) {\n          approx -= delta;\n          approxRes = fromNumber(approx, this.unsigned);\n          approxRem = approxRes.mul(divisor);\n        }\n\n        // We know the answer can't be zero... and actually, zero would cause\n        // infinite recursion since we would make no progress.\n        if (approxRes.isZero()) approxRes = ONE;\n        res = res.add(approxRes);\n        rem = rem.sub(approxRem);\n      }\n      return res;\n    };\n\n    /**\n     * Returns this Long divided by the specified. This is an alias of {@link Long#divide}.\n     * @function\n     * @param {!Long|number|bigint|string} divisor Divisor\n     * @returns {!Long} Quotient\n     */\n    LongPrototype.div = LongPrototype.divide;\n\n    /**\n     * Returns this Long modulo the specified.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} divisor Divisor\n     * @returns {!Long} Remainder\n     */\n    LongPrototype.modulo = function modulo(divisor) {\n      if (!isLong(divisor)) divisor = fromValue(divisor);\n\n      // use wasm support if present\n      if (wasm) {\n        var low = (this.unsigned ? wasm[\"rem_u\"] : wasm[\"rem_s\"])(\n          this.low,\n          this.high,\n          divisor.low,\n          divisor.high,\n        );\n        return fromBits(low, wasm[\"get_high\"](), this.unsigned);\n      }\n      return this.sub(this.div(divisor).mul(divisor));\n    };\n\n    /**\n     * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\n     * @function\n     * @param {!Long|number|bigint|string} divisor Divisor\n     * @returns {!Long} Remainder\n     */\n    LongPrototype.mod = LongPrototype.modulo;\n\n    /**\n     * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\n     * @function\n     * @param {!Long|number|bigint|string} divisor Divisor\n     * @returns {!Long} Remainder\n     */\n    LongPrototype.rem = LongPrototype.modulo;\n\n    /**\n     * Returns the bitwise NOT of this Long.\n     * @this {!Long}\n     * @returns {!Long}\n     */\n    LongPrototype.not = function not() {\n      return fromBits(~this.low, ~this.high, this.unsigned);\n    };\n\n    /**\n     * Returns count leading zeros of this Long.\n     * @this {!Long}\n     * @returns {!number}\n     */\n    LongPrototype.countLeadingZeros = function countLeadingZeros() {\n      return this.high ? Math.clz32(this.high) : Math.clz32(this.low) + 32;\n    };\n\n    /**\n     * Returns count leading zeros. This is an alias of {@link Long#countLeadingZeros}.\n     * @function\n     * @param {!Long}\n     * @returns {!number}\n     */\n    LongPrototype.clz = LongPrototype.countLeadingZeros;\n\n    /**\n     * Returns count trailing zeros of this Long.\n     * @this {!Long}\n     * @returns {!number}\n     */\n    LongPrototype.countTrailingZeros = function countTrailingZeros() {\n      return this.low ? ctz32(this.low) : ctz32(this.high) + 32;\n    };\n\n    /**\n     * Returns count trailing zeros. This is an alias of {@link Long#countTrailingZeros}.\n     * @function\n     * @param {!Long}\n     * @returns {!number}\n     */\n    LongPrototype.ctz = LongPrototype.countTrailingZeros;\n\n    /**\n     * Returns the bitwise AND of this Long and the specified.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other Long\n     * @returns {!Long}\n     */\n    LongPrototype.and = function and(other) {\n      if (!isLong(other)) other = fromValue(other);\n      return fromBits(\n        this.low & other.low,\n        this.high & other.high,\n        this.unsigned,\n      );\n    };\n\n    /**\n     * Returns the bitwise OR of this Long and the specified.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other Long\n     * @returns {!Long}\n     */\n    LongPrototype.or = function or(other) {\n      if (!isLong(other)) other = fromValue(other);\n      return fromBits(\n        this.low | other.low,\n        this.high | other.high,\n        this.unsigned,\n      );\n    };\n\n    /**\n     * Returns the bitwise XOR of this Long and the given one.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other Long\n     * @returns {!Long}\n     */\n    LongPrototype.xor = function xor(other) {\n      if (!isLong(other)) other = fromValue(other);\n      return fromBits(\n        this.low ^ other.low,\n        this.high ^ other.high,\n        this.unsigned,\n      );\n    };\n\n    /**\n     * Returns this Long with bits shifted to the left by the given amount.\n     * @this {!Long}\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Shifted Long\n     */\n    LongPrototype.shiftLeft = function shiftLeft(numBits) {\n      if (isLong(numBits)) numBits = numBits.toInt();\n      if ((numBits &= 63) === 0) return this;\n      else if (numBits < 32)\n        return fromBits(\n          this.low << numBits,\n          (this.high << numBits) | (this.low >>> (32 - numBits)),\n          this.unsigned,\n        );\n      else return fromBits(0, this.low << (numBits - 32), this.unsigned);\n    };\n\n    /**\n     * Returns this Long with bits shifted to the left by the given amount. This is an alias of {@link Long#shiftLeft}.\n     * @function\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Shifted Long\n     */\n    LongPrototype.shl = LongPrototype.shiftLeft;\n\n    /**\n     * Returns this Long with bits arithmetically shifted to the right by the given amount.\n     * @this {!Long}\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Shifted Long\n     */\n    LongPrototype.shiftRight = function shiftRight(numBits) {\n      if (isLong(numBits)) numBits = numBits.toInt();\n      if ((numBits &= 63) === 0) return this;\n      else if (numBits < 32)\n        return fromBits(\n          (this.low >>> numBits) | (this.high << (32 - numBits)),\n          this.high >> numBits,\n          this.unsigned,\n        );\n      else\n        return fromBits(\n          this.high >> (numBits - 32),\n          this.high >= 0 ? 0 : -1,\n          this.unsigned,\n        );\n    };\n\n    /**\n     * Returns this Long with bits arithmetically shifted to the right by the given amount. This is an alias of {@link Long#shiftRight}.\n     * @function\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Shifted Long\n     */\n    LongPrototype.shr = LongPrototype.shiftRight;\n\n    /**\n     * Returns this Long with bits logically shifted to the right by the given amount.\n     * @this {!Long}\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Shifted Long\n     */\n    LongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {\n      if (isLong(numBits)) numBits = numBits.toInt();\n      if ((numBits &= 63) === 0) return this;\n      if (numBits < 32)\n        return fromBits(\n          (this.low >>> numBits) | (this.high << (32 - numBits)),\n          this.high >>> numBits,\n          this.unsigned,\n        );\n      if (numBits === 32) return fromBits(this.high, 0, this.unsigned);\n      return fromBits(this.high >>> (numBits - 32), 0, this.unsigned);\n    };\n\n    /**\n     * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\n     * @function\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Shifted Long\n     */\n    LongPrototype.shru = LongPrototype.shiftRightUnsigned;\n\n    /**\n     * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\n     * @function\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Shifted Long\n     */\n    LongPrototype.shr_u = LongPrototype.shiftRightUnsigned;\n\n    /**\n     * Returns this Long with bits rotated to the left by the given amount.\n     * @this {!Long}\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Rotated Long\n     */\n    LongPrototype.rotateLeft = function rotateLeft(numBits) {\n      var b;\n      if (isLong(numBits)) numBits = numBits.toInt();\n      if ((numBits &= 63) === 0) return this;\n      if (numBits === 32) return fromBits(this.high, this.low, this.unsigned);\n      if (numBits < 32) {\n        b = 32 - numBits;\n        return fromBits(\n          (this.low << numBits) | (this.high >>> b),\n          (this.high << numBits) | (this.low >>> b),\n          this.unsigned,\n        );\n      }\n      numBits -= 32;\n      b = 32 - numBits;\n      return fromBits(\n        (this.high << numBits) | (this.low >>> b),\n        (this.low << numBits) | (this.high >>> b),\n        this.unsigned,\n      );\n    };\n    /**\n     * Returns this Long with bits rotated to the left by the given amount. This is an alias of {@link Long#rotateLeft}.\n     * @function\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Rotated Long\n     */\n    LongPrototype.rotl = LongPrototype.rotateLeft;\n\n    /**\n     * Returns this Long with bits rotated to the right by the given amount.\n     * @this {!Long}\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Rotated Long\n     */\n    LongPrototype.rotateRight = function rotateRight(numBits) {\n      var b;\n      if (isLong(numBits)) numBits = numBits.toInt();\n      if ((numBits &= 63) === 0) return this;\n      if (numBits === 32) return fromBits(this.high, this.low, this.unsigned);\n      if (numBits < 32) {\n        b = 32 - numBits;\n        return fromBits(\n          (this.high << b) | (this.low >>> numBits),\n          (this.low << b) | (this.high >>> numBits),\n          this.unsigned,\n        );\n      }\n      numBits -= 32;\n      b = 32 - numBits;\n      return fromBits(\n        (this.low << b) | (this.high >>> numBits),\n        (this.high << b) | (this.low >>> numBits),\n        this.unsigned,\n      );\n    };\n    /**\n     * Returns this Long with bits rotated to the right by the given amount. This is an alias of {@link Long#rotateRight}.\n     * @function\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Rotated Long\n     */\n    LongPrototype.rotr = LongPrototype.rotateRight;\n\n    /**\n     * Converts this Long to signed.\n     * @this {!Long}\n     * @returns {!Long} Signed long\n     */\n    LongPrototype.toSigned = function toSigned() {\n      if (!this.unsigned) return this;\n      return fromBits(this.low, this.high, false);\n    };\n\n    /**\n     * Converts this Long to unsigned.\n     * @this {!Long}\n     * @returns {!Long} Unsigned long\n     */\n    LongPrototype.toUnsigned = function toUnsigned() {\n      if (this.unsigned) return this;\n      return fromBits(this.low, this.high, true);\n    };\n\n    /**\n     * Converts this Long to its byte representation.\n     * @param {boolean=} le Whether little or big endian, defaults to big endian\n     * @this {!Long}\n     * @returns {!Array.<number>} Byte representation\n     */\n    LongPrototype.toBytes = function toBytes(le) {\n      return le ? this.toBytesLE() : this.toBytesBE();\n    };\n\n    /**\n     * Converts this Long to its little endian byte representation.\n     * @this {!Long}\n     * @returns {!Array.<number>} Little endian byte representation\n     */\n    LongPrototype.toBytesLE = function toBytesLE() {\n      var hi = this.high,\n        lo = this.low;\n      return [\n        lo & 0xff,\n        (lo >>> 8) & 0xff,\n        (lo >>> 16) & 0xff,\n        lo >>> 24,\n        hi & 0xff,\n        (hi >>> 8) & 0xff,\n        (hi >>> 16) & 0xff,\n        hi >>> 24,\n      ];\n    };\n\n    /**\n     * Converts this Long to its big endian byte representation.\n     * @this {!Long}\n     * @returns {!Array.<number>} Big endian byte representation\n     */\n    LongPrototype.toBytesBE = function toBytesBE() {\n      var hi = this.high,\n        lo = this.low;\n      return [\n        hi >>> 24,\n        (hi >>> 16) & 0xff,\n        (hi >>> 8) & 0xff,\n        hi & 0xff,\n        lo >>> 24,\n        (lo >>> 16) & 0xff,\n        (lo >>> 8) & 0xff,\n        lo & 0xff,\n      ];\n    };\n\n    /**\n     * Creates a Long from its byte representation.\n     * @param {!Array.<number>} bytes Byte representation\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n     * @param {boolean=} le Whether little or big endian, defaults to big endian\n     * @returns {Long} The corresponding Long value\n     */\n    Long.fromBytes = function fromBytes(bytes, unsigned, le) {\n      return le\n        ? Long.fromBytesLE(bytes, unsigned)\n        : Long.fromBytesBE(bytes, unsigned);\n    };\n\n    /**\n     * Creates a Long from its little endian byte representation.\n     * @param {!Array.<number>} bytes Little endian byte representation\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n     * @returns {Long} The corresponding Long value\n     */\n    Long.fromBytesLE = function fromBytesLE(bytes, unsigned) {\n      return new Long(\n        bytes[0] | (bytes[1] << 8) | (bytes[2] << 16) | (bytes[3] << 24),\n        bytes[4] | (bytes[5] << 8) | (bytes[6] << 16) | (bytes[7] << 24),\n        unsigned,\n      );\n    };\n\n    /**\n     * Creates a Long from its big endian byte representation.\n     * @param {!Array.<number>} bytes Big endian byte representation\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n     * @returns {Long} The corresponding Long value\n     */\n    Long.fromBytesBE = function fromBytesBE(bytes, unsigned) {\n      return new Long(\n        (bytes[4] << 24) | (bytes[5] << 16) | (bytes[6] << 8) | bytes[7],\n        (bytes[0] << 24) | (bytes[1] << 16) | (bytes[2] << 8) | bytes[3],\n        unsigned,\n      );\n    };\n\n    // Support conversion to/from BigInt where available\n    if (typeof BigInt === \"function\") {\n      /**\n       * Returns a Long representing the given big integer.\n       * @function\n       * @param {number} value The big integer value\n       * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n       * @returns {!Long} The corresponding Long value\n       */\n      Long.fromBigInt = function fromBigInt(value, unsigned) {\n        var lowBits = Number(BigInt.asIntN(32, value));\n        var highBits = Number(BigInt.asIntN(32, value >> BigInt(32)));\n        return fromBits(lowBits, highBits, unsigned);\n      };\n\n      // Override\n      Long.fromValue = function fromValueWithBigInt(value, unsigned) {\n        if (typeof value === \"bigint\") return Long.fromBigInt(value, unsigned);\n        return fromValue(value, unsigned);\n      };\n\n      /**\n       * Converts the Long to its big integer representation.\n       * @this {!Long}\n       * @returns {bigint}\n       */\n      LongPrototype.toBigInt = function toBigInt() {\n        var lowBigInt = BigInt(this.low >>> 0);\n        var highBigInt = BigInt(this.unsigned ? this.high >>> 0 : this.high);\n        return (highBigInt << BigInt(32)) | lowBigInt;\n      };\n    }\n    var _default = (_exports.default = Long);\n  },\n);\n","import type { temporal } from '@temporalio/proto';\nimport { errorMessage, isRecord, SymbolBasedInstanceOfError } from './type-helpers';\nimport type { Duration } from './time';\nimport { makeProtoEnumConverters } from './internal-workflow';\n\nexport const FAILURE_SOURCE = 'TypeScriptSDK';\nexport type ProtoFailure = temporal.api.failure.v1.IFailure;\n\nexport const TimeoutType = {\n  START_TO_CLOSE: 'START_TO_CLOSE',\n  SCHEDULE_TO_START: 'SCHEDULE_TO_START',\n  SCHEDULE_TO_CLOSE: 'SCHEDULE_TO_CLOSE',\n  HEARTBEAT: 'HEARTBEAT',\n\n  /** @deprecated Use {@link START_TO_CLOSE} instead. */\n  TIMEOUT_TYPE_START_TO_CLOSE: 'START_TO_CLOSE',\n\n  /** @deprecated Use {@link SCHEDULE_TO_START} instead. */\n  TIMEOUT_TYPE_SCHEDULE_TO_START: 'SCHEDULE_TO_START',\n\n  /** @deprecated Use {@link SCHEDULE_TO_CLOSE} instead. */\n  TIMEOUT_TYPE_SCHEDULE_TO_CLOSE: 'SCHEDULE_TO_CLOSE',\n\n  /** @deprecated Use {@link HEARTBEAT} instead. */\n  TIMEOUT_TYPE_HEARTBEAT: 'HEARTBEAT',\n\n  /** @deprecated Use `undefined` instead. */\n  TIMEOUT_TYPE_UNSPECIFIED: undefined,\n} as const;\nexport type TimeoutType = (typeof TimeoutType)[keyof typeof TimeoutType];\n\nexport const [encodeTimeoutType, decodeTimeoutType] = makeProtoEnumConverters<\n  temporal.api.enums.v1.TimeoutType,\n  typeof temporal.api.enums.v1.TimeoutType,\n  keyof typeof temporal.api.enums.v1.TimeoutType,\n  typeof TimeoutType,\n  'TIMEOUT_TYPE_'\n>(\n  {\n    [TimeoutType.START_TO_CLOSE]: 1,\n    [TimeoutType.SCHEDULE_TO_START]: 2,\n    [TimeoutType.SCHEDULE_TO_CLOSE]: 3,\n    [TimeoutType.HEARTBEAT]: 4,\n    UNSPECIFIED: 0,\n  } as const,\n  'TIMEOUT_TYPE_'\n);\n\nexport const RetryState = {\n  IN_PROGRESS: 'IN_PROGRESS',\n  NON_RETRYABLE_FAILURE: 'NON_RETRYABLE_FAILURE',\n  TIMEOUT: 'TIMEOUT',\n  MAXIMUM_ATTEMPTS_REACHED: 'MAXIMUM_ATTEMPTS_REACHED',\n  RETRY_POLICY_NOT_SET: 'RETRY_POLICY_NOT_SET',\n  INTERNAL_SERVER_ERROR: 'INTERNAL_SERVER_ERROR',\n  CANCEL_REQUESTED: 'CANCEL_REQUESTED',\n\n  /** @deprecated Use {@link IN_PROGRESS} instead. */\n  RETRY_STATE_IN_PROGRESS: 'IN_PROGRESS',\n\n  /** @deprecated Use {@link NON_RETRYABLE_FAILURE} instead. */\n  RETRY_STATE_NON_RETRYABLE_FAILURE: 'NON_RETRYABLE_FAILURE',\n\n  /** @deprecated Use {@link TIMEOUT} instead. */\n  RETRY_STATE_TIMEOUT: 'TIMEOUT',\n\n  /** @deprecated Use {@link MAXIMUM_ATTEMPTS_REACHED} instead. */\n  RETRY_STATE_MAXIMUM_ATTEMPTS_REACHED: 'MAXIMUM_ATTEMPTS_REACHED',\n\n  /** @deprecated Use {@link RETRY_POLICY_NOT_SET} instead. */\n  RETRY_STATE_RETRY_POLICY_NOT_SET: 'RETRY_POLICY_NOT_SET',\n\n  /** @deprecated Use {@link INTERNAL_SERVER_ERROR} instead. */\n  RETRY_STATE_INTERNAL_SERVER_ERROR: 'INTERNAL_SERVER_ERROR',\n\n  /** @deprecated Use {@link CANCEL_REQUESTED} instead. */\n  RETRY_STATE_CANCEL_REQUESTED: 'CANCEL_REQUESTED',\n\n  /** @deprecated Use `undefined` instead. */\n  RETRY_STATE_UNSPECIFIED: undefined,\n} as const;\nexport type RetryState = (typeof RetryState)[keyof typeof RetryState];\n\nexport const [encodeRetryState, decodeRetryState] = makeProtoEnumConverters<\n  temporal.api.enums.v1.RetryState,\n  typeof temporal.api.enums.v1.RetryState,\n  keyof typeof temporal.api.enums.v1.RetryState,\n  typeof RetryState,\n  'RETRY_STATE_'\n>(\n  {\n    [RetryState.IN_PROGRESS]: 1,\n    [RetryState.NON_RETRYABLE_FAILURE]: 2,\n    [RetryState.TIMEOUT]: 3,\n    [RetryState.MAXIMUM_ATTEMPTS_REACHED]: 4,\n    [RetryState.RETRY_POLICY_NOT_SET]: 5,\n    [RetryState.INTERNAL_SERVER_ERROR]: 6,\n    [RetryState.CANCEL_REQUESTED]: 7,\n    UNSPECIFIED: 0,\n  } as const,\n  'RETRY_STATE_'\n);\n\n/**\n * A category to describe the severity and change the observability behavior of an application failure.\n *\n * Currently, observability behavior changes are limited to:\n * - activities that fail due to a BENIGN application failure emit DEBUG level logs and do not record metrics\n *\n * @experimental Category is a new feature and may be subject to change.\n */\nexport const ApplicationFailureCategory = {\n  BENIGN: 'BENIGN',\n} as const;\nexport type ApplicationFailureCategory = (typeof ApplicationFailureCategory)[keyof typeof ApplicationFailureCategory];\n\nexport const [encodeApplicationFailureCategory, decodeApplicationFailureCategory] = makeProtoEnumConverters<\n  temporal.api.enums.v1.ApplicationErrorCategory,\n  typeof temporal.api.enums.v1.ApplicationErrorCategory,\n  keyof typeof temporal.api.enums.v1.ApplicationErrorCategory,\n  typeof ApplicationFailureCategory,\n  'APPLICATION_ERROR_CATEGORY_'\n>(\n  {\n    [ApplicationFailureCategory.BENIGN]: 1,\n    UNSPECIFIED: 0,\n  } as const,\n  'APPLICATION_ERROR_CATEGORY_'\n);\n\nexport type WorkflowExecution = temporal.api.common.v1.IWorkflowExecution;\n\n/**\n * Represents failures that can cross Workflow and Activity boundaries.\n *\n * **Never extend this class or any of its children.**\n *\n * The only child class you should ever throw from your code is {@link ApplicationFailure}.\n */\n@SymbolBasedInstanceOfError('TemporalFailure')\nexport class TemporalFailure extends Error {\n  /**\n   * The original failure that constructed this error.\n   *\n   * Only present if this error was generated from an external operation.\n   */\n  public failure?: ProtoFailure;\n\n  constructor(\n    message?: string | undefined | null,\n    public readonly cause?: Error\n  ) {\n    super(message ?? undefined);\n  }\n}\n\n/** Exceptions originated at the Temporal service. */\n@SymbolBasedInstanceOfError('ServerFailure')\nexport class ServerFailure extends TemporalFailure {\n  constructor(\n    message: string | undefined,\n    public readonly nonRetryable: boolean,\n    cause?: Error\n  ) {\n    super(message, cause);\n  }\n}\n\n/**\n * `ApplicationFailure`s are used to communicate application-specific failures in Workflows and Activities.\n *\n * The {@link type} property is matched against {@link RetryPolicy.nonRetryableErrorTypes} to determine if an instance\n * of this error is retryable. Another way to avoid retrying is by setting the {@link nonRetryable} flag to `true`.\n *\n * In Workflows, if you throw a non-`ApplicationFailure`, the Workflow Task will fail and be retried. If you throw an\n * `ApplicationFailure`, the Workflow Execution will fail.\n *\n * In Activities, you can either throw an `ApplicationFailure` or another `Error` to fail the Activity Task. In the\n * latter case, the `Error` will be converted to an `ApplicationFailure`. The conversion is done as following:\n *\n * - `type` is set to `error.constructor?.name ?? error.name`\n * - `message` is set to `error.message`\n * - `nonRetryable` is set to false\n * - `details` are set to null\n * - stack trace is copied from the original error\n *\n * When an {@link https://docs.temporal.io/activity-execution#activity-execution | Activity Execution} fails, the\n * `ApplicationFailure` from the last Activity Task will be the `cause` of the {@link ActivityFailure} thrown in the\n * Workflow.\n */\n@SymbolBasedInstanceOfError('ApplicationFailure')\nexport class ApplicationFailure extends TemporalFailure {\n  /**\n   * Alternatively, use {@link fromError} or {@link create}.\n   */\n  constructor(\n    message?: string | undefined | null,\n    public readonly type?: string | undefined | null,\n    public readonly nonRetryable?: boolean | undefined | null,\n    public readonly details?: unknown[] | undefined | null,\n    cause?: Error,\n    public readonly nextRetryDelay?: Duration | undefined | null,\n    public readonly category?: ApplicationFailureCategory | undefined | null\n  ) {\n    super(message, cause);\n  }\n\n  /**\n   * Create a new `ApplicationFailure` from an Error object.\n   *\n   * First calls {@link ensureApplicationFailure | `ensureApplicationFailure(error)`} and then overrides any fields\n   * provided in `overrides`.\n   */\n  public static fromError(error: Error | unknown, overrides?: ApplicationFailureOptions): ApplicationFailure {\n    const failure = ensureApplicationFailure(error);\n    Object.assign(failure, overrides);\n    return failure;\n  }\n\n  /**\n   * Create a new `ApplicationFailure`.\n   *\n   * By default, will be retryable (unless its `type` is included in {@link RetryPolicy.nonRetryableErrorTypes}).\n   */\n  public static create(options: ApplicationFailureOptions): ApplicationFailure {\n    const { message, type, nonRetryable = false, details, nextRetryDelay, cause, category } = options;\n    return new this(message, type, nonRetryable, details, cause, nextRetryDelay, category);\n  }\n\n  /**\n   * Get a new `ApplicationFailure` with the {@link nonRetryable} flag set to false. Note that this error will still\n   * not be retried if its `type` is included in {@link RetryPolicy.nonRetryableErrorTypes}.\n   *\n   * @param message Optional error message\n   * @param type Optional error type (used by {@link RetryPolicy.nonRetryableErrorTypes})\n   * @param details Optional details about the failure. Serialized by the Worker's {@link PayloadConverter}.\n   */\n  public static retryable(message?: string | null, type?: string | null, ...details: unknown[]): ApplicationFailure {\n    return new this(message, type ?? 'Error', false, details);\n  }\n\n  /**\n   * Get a new `ApplicationFailure` with the {@link nonRetryable} flag set to true.\n   *\n   * When thrown from an Activity or Workflow, the Activity or Workflow will not be retried (even if `type` is not\n   * listed in {@link RetryPolicy.nonRetryableErrorTypes}).\n   *\n   * @param message Optional error message\n   * @param type Optional error type\n   * @param details Optional details about the failure. Serialized by the Worker's {@link PayloadConverter}.\n   */\n  public static nonRetryable(message?: string | null, type?: string | null, ...details: unknown[]): ApplicationFailure {\n    return new this(message, type ?? 'Error', true, details);\n  }\n}\n\nexport interface ApplicationFailureOptions {\n  /**\n   * Error message\n   */\n  message?: string;\n\n  /**\n   * Error type (used by {@link RetryPolicy.nonRetryableErrorTypes})\n   */\n  type?: string;\n\n  /**\n   * Whether the current Activity or Workflow can be retried\n   *\n   * @default false\n   */\n  nonRetryable?: boolean;\n\n  /**\n   * Details about the failure. Serialized by the Worker's {@link PayloadConverter}.\n   */\n  details?: unknown[];\n\n  /**\n   * If set, overrides the delay until the next retry of this Activity / Workflow Task.\n   *\n   * Retry attempts will still be subject to the maximum retries limit and total time limit defined\n   * by the policy.\n   */\n  nextRetryDelay?: Duration;\n\n  /**\n   * Cause of the failure\n   */\n  cause?: Error;\n\n  /**\n   * Severity category of the application error.\n   * Affects worker-side logging and metrics behavior of this failure.\n   */\n  category?: ApplicationFailureCategory;\n}\n\n/**\n * Create a non-retryable {@link ApplicationFailure} for reporting a Payload validation failure.\n *\n * Payload Converters and Payload Codecs can throw this failure when they understand a Payload but\n * reject it as invalid. A non-nullish value is stored as a single failure detail; `null` and\n * `undefined` produce an empty details array.\n */\nexport function createPayloadValidationError(details: unknown): ApplicationFailure {\n  return ApplicationFailure.create({\n    message: 'Payload validation failed',\n    type: 'PayloadValidationError',\n    nonRetryable: true,\n    details: details == null ? [] : [details],\n  });\n}\n\n/**\n * This error is thrown when Cancellation has been requested. To allow Cancellation to happen, let it propagate. To\n * ignore Cancellation, catch it and continue executing. Note that Cancellation can only be requested a single time, so\n * your Workflow/Activity Execution will not receive further Cancellation requests.\n *\n * When a Workflow or Activity has been successfully cancelled, a `CancelledFailure` will be the `cause`.\n */\n@SymbolBasedInstanceOfError('CancelledFailure')\nexport class CancelledFailure extends TemporalFailure {\n  constructor(\n    message: string | undefined,\n    public readonly details: unknown[] = [],\n    cause?: Error\n  ) {\n    super(message, cause);\n  }\n}\n\n/**\n * Used as the `cause` when a Workflow has been terminated\n */\n@SymbolBasedInstanceOfError('TerminatedFailure')\nexport class TerminatedFailure extends TemporalFailure {\n  constructor(message: string | undefined, cause?: Error) {\n    super(message, cause);\n  }\n}\n\n/**\n * Used to represent timeouts of Activities and Workflows\n */\n@SymbolBasedInstanceOfError('TimeoutFailure')\nexport class TimeoutFailure extends TemporalFailure {\n  constructor(\n    message: string | undefined,\n    public readonly lastHeartbeatDetails: unknown,\n    public readonly timeoutType: TimeoutType\n  ) {\n    super(message);\n  }\n}\n\n/**\n * Contains information about an Activity failure. Always contains the original reason for the failure as its `cause`.\n * For example, if an Activity timed out, the cause will be a {@link TimeoutFailure}.\n *\n * This exception is expected to be thrown only by the framework code.\n */\n@SymbolBasedInstanceOfError('ActivityFailure')\nexport class ActivityFailure extends TemporalFailure {\n  public constructor(\n    message: string | undefined,\n    public readonly activityType: string,\n    public readonly activityId: string | undefined,\n    public readonly retryState: RetryState,\n    public readonly identity: string | undefined,\n    cause?: Error\n  ) {\n    super(message, cause);\n  }\n}\n\n/**\n * Contains information about a Child Workflow failure. Always contains the reason for the failure as its {@link cause}.\n * For example, if the Child was Terminated, the `cause` is a {@link TerminatedFailure}.\n *\n * This exception is expected to be thrown only by the framework code.\n */\n@SymbolBasedInstanceOfError('ChildWorkflowFailure')\nexport class ChildWorkflowFailure extends TemporalFailure {\n  public constructor(\n    public readonly namespace: string | undefined,\n    public readonly execution: WorkflowExecution,\n    public readonly workflowType: string,\n    public readonly retryState: RetryState,\n    cause?: Error\n  ) {\n    super('Child Workflow execution failed', cause);\n  }\n}\n\n/**\n * Thrown when a Nexus Operation executed inside a Workflow fails.\n *\n */\n@SymbolBasedInstanceOfError('NexusOperationFailure')\nexport class NexusOperationFailure extends TemporalFailure {\n  public constructor(\n    message: string | undefined,\n    public readonly scheduledEventId: number | undefined,\n    public readonly endpoint: string,\n    public readonly service: string,\n    public readonly operation: string,\n    public readonly operationToken: string | undefined,\n    cause?: Error\n  ) {\n    super(message, cause);\n  }\n}\n\n// TODO(nexus/error): Maybe add a NexusHandlerFailure class here, once we've decided on error handling.\n\n/**\n * This exception is thrown in the following cases:\n *  - Workflow with the same Workflow ID is currently running and the {@link WorkflowOptions.workflowIdConflictPolicy} is `WORKFLOW_ID_CONFLICT_POLICY_FAIL`\n *  - There is a closed Workflow with the same Workflow Id and the {@link WorkflowOptions.workflowIdReusePolicy}\n *    is `WORKFLOW_ID_REUSE_POLICY_REJECT_DUPLICATE`\n *  - There is closed Workflow in the `Completed` state with the same Workflow Id and the {@link WorkflowOptions.workflowIdReusePolicy}\n *    is `WORKFLOW_ID_REUSE_POLICY_ALLOW_DUPLICATE_FAILED_ONLY`\n */\n@SymbolBasedInstanceOfError('WorkflowExecutionAlreadyStartedError')\nexport class WorkflowExecutionAlreadyStartedError extends TemporalFailure {\n  constructor(\n    message: string,\n    public readonly workflowId: string,\n    public readonly workflowType: string\n  ) {\n    super(message);\n  }\n}\n\n/**\n * If `error` is already an `ApplicationFailure`, returns `error`.\n *\n * Otherwise, converts `error` into an `ApplicationFailure` with:\n *\n * - `message`: `error.message` or `String(error)`\n * - `type`: `error.constructor.name` or `error.name`\n * - `stack`: `error.stack` or `''`\n */\nexport function ensureApplicationFailure(error: unknown): ApplicationFailure {\n  if (error instanceof ApplicationFailure) {\n    return error;\n  }\n\n  const message = (isRecord(error) && String(error.message)) || String(error);\n  const type = (isRecord(error) && (error.constructor?.name ?? error.name)) || undefined;\n  const failure = ApplicationFailure.create({ message, type, nonRetryable: false });\n  failure.stack = (isRecord(error) && String(error.stack)) || '';\n  return failure;\n}\n\n/**\n * If `err` is an Error it is turned into an `ApplicationFailure`.\n *\n * If `err` was already a `TemporalFailure`, returns the original error.\n *\n * Otherwise returns an `ApplicationFailure` with `String(err)` as the message.\n */\nexport function ensureTemporalFailure(err: unknown): TemporalFailure {\n  if (err instanceof TemporalFailure) {\n    return err;\n  }\n  return ensureApplicationFailure(err);\n}\n\n/**\n * Get the root cause message of given `error`.\n *\n * In case `error` is a {@link TemporalFailure}, recurse the `cause` chain and return the root `cause.message`.\n * Otherwise, return `error.message`.\n */\nexport function rootCause(error: unknown): string | undefined {\n  if (error instanceof TemporalFailure) {\n    return error.cause ? rootCause(error.cause) : error.message;\n  }\n  return errorMessage(error);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// Helpers.\nconst s = 1000;\nconst m = s * 60;\nconst h = m * 60;\nconst d = h * 24;\nconst w = d * 7;\nconst y = d * 365.25;\nfunction ms(value, options) {\n    try {\n        if (typeof value === 'string' && value.length > 0) {\n            return parse(value);\n        }\n        else if (typeof value === 'number' && isFinite(value)) {\n            return options?.long ? fmtLong(value) : fmtShort(value);\n        }\n        throw new Error('Value is not a string or number.');\n    }\n    catch (error) {\n        const message = isError(error)\n            ? `${error.message}. value=${JSON.stringify(value)}`\n            : 'An unknown error has occured.';\n        throw new Error(message);\n    }\n}\n/**\n * Parse the given `str` and return milliseconds.\n */\nfunction parse(str) {\n    str = String(str);\n    if (str.length > 100) {\n        throw new Error('Value exceeds the maximum length of 100 characters.');\n    }\n    const match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(str);\n    if (!match) {\n        return NaN;\n    }\n    const n = parseFloat(match[1]);\n    const type = (match[2] || 'ms').toLowerCase();\n    switch (type) {\n        case 'years':\n        case 'year':\n        case 'yrs':\n        case 'yr':\n        case 'y':\n            return n * y;\n        case 'weeks':\n        case 'week':\n        case 'w':\n            return n * w;\n        case 'days':\n        case 'day':\n        case 'd':\n            return n * d;\n        case 'hours':\n        case 'hour':\n        case 'hrs':\n        case 'hr':\n        case 'h':\n            return n * h;\n        case 'minutes':\n        case 'minute':\n        case 'mins':\n        case 'min':\n        case 'm':\n            return n * m;\n        case 'seconds':\n        case 'second':\n        case 'secs':\n        case 'sec':\n        case 's':\n            return n * s;\n        case 'milliseconds':\n        case 'millisecond':\n        case 'msecs':\n        case 'msec':\n        case 'ms':\n            return n;\n        default:\n            // This should never occur.\n            throw new Error(`The unit ${type} was matched, but no matching case exists.`);\n    }\n}\nexports.default = ms;\n/**\n * Short format for `ms`.\n */\nfunction fmtShort(ms) {\n    const msAbs = Math.abs(ms);\n    if (msAbs >= d) {\n        return `${Math.round(ms / d)}d`;\n    }\n    if (msAbs >= h) {\n        return `${Math.round(ms / h)}h`;\n    }\n    if (msAbs >= m) {\n        return `${Math.round(ms / m)}m`;\n    }\n    if (msAbs >= s) {\n        return `${Math.round(ms / s)}s`;\n    }\n    return `${ms}ms`;\n}\n/**\n * Long format for `ms`.\n */\nfunction fmtLong(ms) {\n    const msAbs = Math.abs(ms);\n    if (msAbs >= d) {\n        return plural(ms, msAbs, d, 'day');\n    }\n    if (msAbs >= h) {\n        return plural(ms, msAbs, h, 'hour');\n    }\n    if (msAbs >= m) {\n        return plural(ms, msAbs, m, 'minute');\n    }\n    if (msAbs >= s) {\n        return plural(ms, msAbs, s, 'second');\n    }\n    return `${ms} ms`;\n}\n/**\n * Pluralization helper.\n */\nfunction plural(ms, msAbs, n, name) {\n    const isPlural = msAbs >= n * 1.5;\n    return `${Math.round(ms / n)} ${name}${isPlural ? 's' : ''}`;\n}\n/**\n * A type guard for errors.\n */\nfunction isError(error) {\n    return typeof error === 'object' && error !== null && 'message' in error;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;\n","import Long from 'long';\nimport type { StringValue } from 'ms';\nimport ms from 'ms';\nimport type { google } from '@temporalio/proto';\nimport { ValueError } from './errors';\n\n// NOTE: these are the same interface in JS\n// google.protobuf.IDuration;\n// google.protobuf.ITimestamp;\n// The conversion functions below should work for both\n\nexport type Timestamp = google.protobuf.ITimestamp;\n\n/**\n * A duration, expressed either as a number of milliseconds, or as a {@link https://www.npmjs.com/package/ms | ms-formatted string}.\n */\nexport type Duration = StringValue | number;\n\nexport type { StringValue } from 'ms';\n\n/**\n * Lossy conversion function from Timestamp to number due to possible overflow.\n * If ts is null or undefined returns undefined.\n */\nexport function optionalTsToMs(ts: Timestamp | null | undefined): number | undefined {\n  if (ts === undefined || ts === null) {\n    return undefined;\n  }\n  return tsToMs(ts);\n}\n\n/**\n * Lossy conversion function from Timestamp to number due to possible overflow.\n * If ts is null or undefined, throws a TypeError, with error message including the name of the field.\n */\nexport function requiredTsToMs(ts: Timestamp | null | undefined, fieldName: string): number {\n  if (ts === undefined || ts === null) {\n    throw new TypeError(`Expected ${fieldName} to be a timestamp, got ${ts}`);\n  }\n  return tsToMs(ts);\n}\n\n/**\n * Lossy conversion function from Timestamp to number due to possible overflow\n */\nexport function tsToMs(ts: Timestamp | null | undefined): number {\n  if (ts === undefined || ts === null) {\n    throw new Error(`Expected timestamp, got ${ts}`);\n  }\n  const { seconds, nanos } = ts;\n  return (seconds || Long.UZERO)\n    .mul(1000)\n    .add(Math.floor((nanos || 0) / 1000000))\n    .toNumber();\n}\n\nexport function msNumberToTs(millis: number): Timestamp {\n  const seconds = Math.floor(millis / 1000);\n  const nanos = (millis % 1000) * 1000000;\n  if (Number.isNaN(seconds) || Number.isNaN(nanos)) {\n    throw new ValueError(`Invalid millis ${millis}`);\n  }\n  return { seconds: Long.fromNumber(seconds), nanos };\n}\n\nexport function msToTs(str: Duration): Timestamp {\n  return msNumberToTs(msToNumber(str));\n}\n\nexport function msOptionalToTs(str: Duration | undefined | null): Timestamp | undefined {\n  return str != null ? msToTs(str) : undefined;\n}\n\nexport function msOptionalToNumber(val: Duration | undefined): number | undefined {\n  if (val === undefined) return undefined;\n  return msToNumber(val);\n}\n\nexport function msToNumber(val: Duration): number {\n  if (typeof val === 'number') {\n    return val;\n  }\n  return msWithValidation(val);\n}\n\nfunction msWithValidation(str: StringValue): number {\n  const millis = ms(str);\n  if (millis == null || isNaN(millis)) {\n    throw new TypeError(`Invalid duration string: '${str}'`);\n  }\n  return millis;\n}\n\nexport function tsToDate(ts: Timestamp): Date {\n  return new Date(tsToMs(ts));\n}\n\n// ts-prune-ignore-next\nexport function requiredTsToDate(ts: Timestamp | null | undefined, fieldName: string): Date {\n  return new Date(requiredTsToMs(ts, fieldName));\n}\n\nexport function optionalTsToDate(ts: Timestamp | null | undefined): Date | undefined {\n  if (ts === undefined || ts === null) {\n    return undefined;\n  }\n  return new Date(tsToMs(ts));\n}\n\n// ts-prune-ignore-next (imported via schedule-helpers.ts)\nexport function optionalDateToTs(date: Date | null | undefined): Timestamp | undefined {\n  if (date === undefined || date === null) {\n    return undefined;\n  }\n  return msToTs(date.getTime());\n}\n","import { encode } from '../encoding';\n\nexport const METADATA_ENCODING_KEY = 'encoding';\nexport const encodingTypes = {\n  METADATA_ENCODING_NULL: 'binary/null',\n  METADATA_ENCODING_RAW: 'binary/plain',\n  METADATA_ENCODING_JSON: 'json/plain',\n  METADATA_ENCODING_PROTOBUF_JSON: 'json/protobuf',\n  METADATA_ENCODING_PROTOBUF: 'binary/protobuf',\n} as const;\nexport type EncodingType = (typeof encodingTypes)[keyof typeof encodingTypes];\n\nexport const encodingKeys = {\n  METADATA_ENCODING_NULL: encode(encodingTypes.METADATA_ENCODING_NULL),\n  METADATA_ENCODING_RAW: encode(encodingTypes.METADATA_ENCODING_RAW),\n  METADATA_ENCODING_JSON: encode(encodingTypes.METADATA_ENCODING_JSON),\n  METADATA_ENCODING_PROTOBUF_JSON: encode(encodingTypes.METADATA_ENCODING_PROTOBUF_JSON),\n  METADATA_ENCODING_PROTOBUF: encode(encodingTypes.METADATA_ENCODING_PROTOBUF),\n} as const;\n\nexport const METADATA_MESSAGE_TYPE_KEY = 'messageType';\n","import { decode, encode } from '../encoding';\nimport { PayloadConverterError, ValueError } from '../errors';\nimport type { Payload } from '../interfaces';\nimport type { ConverterHint, TypeInfo } from '../type-info';\nimport type { SerializationContext } from './serialization-context';\nimport { encodingKeys, encodingTypes, METADATA_ENCODING_KEY } from './types';\n\n/**\n * Used by the framework to serialize/deserialize data like parameters and return values.\n *\n * This is called inside the {@link https://docs.temporal.io/typescript/determinism | Workflow isolate}.\n * To write async code or use Node APIs (or use packages that use Node APIs), use a {@link PayloadCodec}.\n */\nexport interface PayloadConverter {\n  /**\n   * Converts a value to a {@link Payload}.\n   *\n   * @param value The value to convert. Example values include the Workflow args sent from the Client and the values returned by a Workflow or Activity.\n   *\n   * @returns The {@link Payload}.\n   *\n   * Should throw {@link ValueError} if unable to convert.\n   */\n  toPayload<T>(value: T, context?: SerializationContext, hint?: ConverterHint<T>): Payload;\n\n  /**\n   * Converts a {@link Payload} back to a value.\n   */\n  fromPayload<T>(payload: Payload, context?: SerializationContext, hint?: ConverterHint<T>): T;\n\n  /**\n   * Return whether this converter can handle the supplied converter hint.\n   *\n   * Implementations may also use this method to validate hints within {@link toPayload} and {@link fromPayload}.\n   *\n   * @experimental\n   */\n  validateConverterHint?: (hint: ConverterHint) => boolean;\n}\n\n/**\n * Apply TypeInfo transfer conversion before converting a value to a Payload.\n *\n * @experimental\n */\nexport function toPayloadWithTypeInfo<T, D = T>(\n  converter: PayloadConverter,\n  value: T,\n  context: SerializationContext | undefined,\n  typeInfo: TypeInfo<T, D> | undefined\n): Payload {\n  const transferValue = typeInfo?.transferTypeConverter ? typeInfo.transferTypeConverter.toTransferType(value) : value;\n  return converter.toPayload(transferValue, context, typeInfo?.payloadConverterHint);\n}\n\n/**\n * Convert a Payload and then apply TypeInfo transfer conversion to the result.\n *\n * @experimental\n */\nexport function fromPayloadWithTypeInfo<T, D = T>(\n  converter: PayloadConverter,\n  payload: Payload,\n  context: SerializationContext | undefined,\n  typeInfo: TypeInfo<T, D> | undefined\n): T {\n  const transferValue = converter.fromPayload<D>(payload, context, typeInfo?.payloadConverterHint);\n  return typeInfo?.transferTypeConverter\n    ? typeInfo.transferTypeConverter.fromTransferType(transferValue)\n    : (transferValue as unknown as T);\n}\n\n/**\n * Implements conversion of a list of values.\n *\n * @param converter\n * @param values JS values to convert to Payloads\n * @return list of {@link Payload}s\n * @throws {@link ValueError} if conversion of the value passed as parameter failed for any\n *     reason.\n */\nexport function toPayloads(converter: PayloadConverter, ...values: unknown[]): Payload[] | undefined {\n  return toPayloadsWithContext(converter, undefined, values);\n}\n\n/**\n * Implements conversion of a list of values with an optional serialization context.\n *\n * @hidden\n */\nexport function toPayloadsWithContext(\n  converter: PayloadConverter,\n  context: SerializationContext | undefined,\n  values: unknown[],\n  typeInfo?: readonly TypeInfo[]\n): Payload[] | undefined {\n  if (values.length === 0) {\n    return undefined;\n  }\n\n  return values.map((value, index) => toPayloadWithTypeInfo(converter, value, context, typeInfo?.[index]));\n}\n\n/**\n * Run {@link PayloadConverter.toPayload} on an optional value, and then encode it.\n */\nexport function convertOptionalToPayload(\n  payloadConverter: PayloadConverter,\n  value: unknown,\n  context?: SerializationContext\n): Payload | null | undefined {\n  if (value == null) return value;\n\n  return payloadConverter.toPayload(value, context);\n}\n\n/**\n * Run {@link PayloadConverter.toPayload} on each value in the map.\n *\n * @throws {@link ValueError} if conversion of any value in the map fails\n */\nexport function mapToPayloads<K extends string, T = any>(\n  converter: PayloadConverter,\n  map: Record<K, T>,\n  context?: SerializationContext\n): Record<K, Payload> {\n  return Object.fromEntries(\n    Object.entries(map).map(([k, v]): [K, Payload] => [k as K, converter.toPayload(v, context)])\n  ) as Record<K, Payload>;\n}\n\n/**\n * Implements conversion of an array of values of different types. Useful for deserializing\n * arguments of function invocations.\n *\n * @param converter\n * @param index index of the value in the payloads\n * @param payloads serialized value to convert to JS values.\n * @return converted JS value\n * @throws {@link PayloadConverterError} if conversion of the data passed as parameter failed for any\n *     reason.\n */\nexport function fromPayloadsAtIndex<T, D = T>(\n  converter: PayloadConverter,\n  index: number,\n  payloads?: Payload[] | null,\n  context?: SerializationContext,\n  typeInfo?: TypeInfo<T, D>\n): T {\n  // To make adding arguments a backwards compatible change\n  if (payloads === undefined || payloads === null || index >= payloads.length) {\n    return undefined as any;\n  }\n  const payload = payloads?.[index];\n  if (!payload) {\n    return undefined as any;\n  }\n  return fromPayloadWithTypeInfo(converter, payload, context, typeInfo);\n}\n\n/**\n * Run {@link PayloadConverter.fromPayload} on each value in the array.\n */\nexport function arrayFromPayloads(\n  converter: PayloadConverter,\n  payloads?: Payload[] | null,\n  context?: SerializationContext,\n  typeInfo?: readonly TypeInfo[]\n): unknown[] {\n  if (!payloads) {\n    return [];\n  }\n  return payloads.map((payload: Payload, index) =>\n    fromPayloadWithTypeInfo(converter, payload, context, typeInfo?.[index])\n  );\n}\n\nexport function mapFromPayloads<K extends string, T = unknown>(\n  converter: PayloadConverter,\n  map?: Record<K, Payload> | null | undefined,\n  context?: SerializationContext\n): Record<K, T> | undefined {\n  if (map == null) return undefined;\n  return Object.fromEntries(\n    Object.entries(map).map(([k, payload]): [K, unknown] => {\n      const value = converter.fromPayload(payload as Payload, context);\n      return [k as K, value];\n    })\n  ) as Record<K, T>;\n}\n\nexport declare const rawPayloadTypeBrand: unique symbol;\n/**\n * RawValue is a wrapper over a payload.\n * A payload that belongs to a RawValue is special in that it bypasses user-defined payload converters,\n * instead using the default payload converter. The payload still undergoes codec conversion.\n */\nexport class RawValue<T = unknown> {\n  private readonly _payload: Payload;\n  private readonly [rawPayloadTypeBrand]: T = undefined as T;\n\n  constructor(value: T, payloadConverter: PayloadConverter = defaultPayloadConverter, context?: SerializationContext) {\n    this._payload = payloadConverter.toPayload(value, context);\n  }\n\n  static fromPayload(p: Payload): RawValue {\n    return new RawValue(p, identityPayloadConverter);\n  }\n\n  get payload(): Payload {\n    return this._payload;\n  }\n}\n\nexport interface PayloadConverterWithEncoding {\n  /**\n   * Converts a value to a {@link Payload}.\n   *\n   * @param value The value to convert. Example values include the Workflow args sent from the Client and the values returned by a Workflow or Activity.\n   * @returns The {@link Payload}, or `undefined` if unable to convert.\n   */\n  toPayload<T>(value: T, context?: SerializationContext, hint?: ConverterHint<T>): Payload | undefined;\n\n  /**\n   * Converts a {@link Payload} back to a value.\n   */\n  fromPayload<T>(payload: Payload, context?: SerializationContext, hint?: ConverterHint<T>): T;\n\n  readonly encodingType: string;\n\n  /**\n   * Return whether this converter can handle the supplied converter hint.\n   *\n   * Implementations may also use this method to validate hints within {@link toPayload} and {@link fromPayload}.\n   *\n   * @experimental\n   */\n  validateConverterHint?: (hint: ConverterHint) => boolean;\n}\n\n/**\n * Tries to convert values to {@link Payload}s using the {@link PayloadConverterWithEncoding}s provided to the constructor, in the order provided.\n *\n * Converts Payloads to values based on the `Payload.metadata.encoding` field, which matches the {@link PayloadConverterWithEncoding.encodingType}\n * of the converter that created the Payload.\n */\nexport class CompositePayloadConverter implements PayloadConverter {\n  readonly converters: PayloadConverterWithEncoding[];\n  readonly converterByEncoding: Map<string, PayloadConverterWithEncoding> = new Map();\n\n  constructor(...converters: PayloadConverterWithEncoding[]) {\n    if (converters.length === 0) {\n      throw new PayloadConverterError('Must provide at least one PayloadConverterWithEncoding');\n    }\n\n    this.converters = converters;\n    for (const converter of converters) {\n      this.converterByEncoding.set(converter.encodingType, converter);\n    }\n  }\n\n  /**\n   * Tries to run `.toPayload(value)` on each converter in the order provided at construction.\n   * Returns the first successful result, throws {@link ValueError} if there is no converter that can handle the value.\n   */\n  public toPayload<T>(value: T, context?: SerializationContext, hint?: ConverterHint<T>): Payload {\n    if (value instanceof RawValue) {\n      return value.payload;\n    }\n    for (const converter of this.converters) {\n      if (hint !== undefined && !converter.validateConverterHint?.(hint)) {\n        continue;\n      }\n      const result = converter.toPayload(value, context, hint);\n      if (result !== undefined) {\n        return result;\n      }\n    }\n\n    if (hint !== undefined) {\n      throw new ValueError(`No payload converter supports converter hint '${hint.converter}'`);\n    }\n    throw new ValueError(`Unable to convert ${value} to payload`);\n  }\n\n  /**\n   * Run {@link PayloadConverterWithEncoding.fromPayload} based on the `encoding` metadata of the {@link Payload}.\n   */\n  public fromPayload<T>(payload: Payload, context?: SerializationContext, hint?: ConverterHint<T>): T {\n    if (payload.metadata === undefined || payload.metadata === null) {\n      throw new ValueError('Missing payload metadata');\n    }\n\n    const encoding = decode(payload.metadata[METADATA_ENCODING_KEY]!);\n    const converter = this.converterByEncoding.get(encoding);\n    if (converter === undefined) {\n      throw new ValueError(`Unknown encoding: ${encoding}`);\n    }\n    if (hint !== undefined && !converter.validateConverterHint?.(hint)) {\n      throw new PayloadConverterError(\n        `Payload encoding '${encoding}' does not support converter hint '${hint.converter}'`\n      );\n    }\n    return converter.fromPayload(payload, context, hint);\n  }\n}\n\n/**\n * Converts between JS undefined and NULL Payload\n */\nexport class UndefinedPayloadConverter implements PayloadConverterWithEncoding {\n  public encodingType = encodingTypes.METADATA_ENCODING_NULL;\n\n  public toPayload(value: unknown): Payload | undefined {\n    if (value !== undefined) {\n      return undefined;\n    }\n\n    return {\n      metadata: {\n        [METADATA_ENCODING_KEY]: encodingKeys.METADATA_ENCODING_NULL,\n      },\n    };\n  }\n\n  public fromPayload<T>(_content: Payload): T {\n    return undefined as any; // Just return undefined\n  }\n}\n\n/**\n * Converts between binary data types and RAW Payload\n */\nexport class BinaryPayloadConverter implements PayloadConverterWithEncoding {\n  public encodingType = encodingTypes.METADATA_ENCODING_RAW;\n\n  public toPayload(value: unknown): Payload | undefined {\n    if (!(value instanceof Uint8Array)) {\n      return undefined;\n    }\n\n    return {\n      metadata: {\n        [METADATA_ENCODING_KEY]: encodingKeys.METADATA_ENCODING_RAW,\n      },\n      data: value,\n    };\n  }\n\n  public fromPayload<T>(content: Payload): T {\n    return (\n      // Wrap with Uint8Array from this context to ensure `instanceof` works\n      (\n        content.data ? new Uint8Array(content.data.buffer, content.data.byteOffset, content.data.length) : content.data\n      ) as any\n    );\n  }\n}\n\n/**\n * Converts between non-undefined values and serialized JSON Payload\n */\nexport class JsonPayloadConverter implements PayloadConverterWithEncoding {\n  public encodingType = encodingTypes.METADATA_ENCODING_JSON;\n\n  public toPayload(value: unknown): Payload | undefined {\n    if (value === undefined) {\n      return undefined;\n    }\n\n    let json;\n    try {\n      json = JSON.stringify(value);\n    } catch (_err) {\n      return undefined;\n    }\n\n    return {\n      metadata: {\n        [METADATA_ENCODING_KEY]: encodingKeys.METADATA_ENCODING_JSON,\n      },\n      data: encode(json),\n    };\n  }\n\n  public fromPayload<T>(content: Payload): T {\n    if (content.data === undefined || content.data === null) {\n      throw new ValueError('Got payload with no data');\n    }\n    return JSON.parse(decode(content.data));\n  }\n}\n\nexport class DefaultPayloadConverter extends CompositePayloadConverter {\n  // Match the order used in other SDKs, with the exception of the Protobuf converter, which is\n  // excluded by default to avoid the significant bundle size increase it introduces.\n  //\n  // To use `protobufjs` for Payload conversion, use {@link DefaultPayloadConverterWithProtobufs}.\n  //\n  // Go SDK:\n  // https://github.com/temporalio/sdk-go/blob/5e5645f0c550dcf717c095ae32c76a7087d2e985/converter/default_data_converter.go#L28\n  constructor() {\n    super(new UndefinedPayloadConverter(), new BinaryPayloadConverter(), new JsonPayloadConverter());\n  }\n}\n\n/**\n * The default {@link PayloadConverter} used by the SDK. Supports `Uint8Array` and JSON serializables (so if\n * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#description | `JSON.stringify(yourArgOrRetval)`}\n * works, the default payload converter will work).\n *\n * To also support Protobufs, create a custom payload converter with {@link DefaultPayloadConverter}:\n *\n * `const myConverter = new DefaultPayloadConverter({ protobufRoot })`\n */\nexport const defaultPayloadConverter = new DefaultPayloadConverter();\n\n/**\n * The identity payload converter returns the inputs it was given.\n */\nclass IdentityPayloadConverter implements PayloadConverter {\n  toPayload<T>(value: T): Payload {\n    return value as Payload;\n  }\n\n  fromPayload<T>(payload: Payload): T {\n    return payload as T;\n  }\n}\n\nconst identityPayloadConverter = new IdentityPayloadConverter();\n","import * as nexus from 'nexus-rpc';\nimport Long from 'long';\nimport type { temporal } from '@temporalio/proto';\nimport type { ProtoFailure } from '../failure';\nimport {\n  ActivityFailure,\n  ApplicationFailure,\n  CancelledFailure,\n  ChildWorkflowFailure,\n  decodeApplicationFailureCategory,\n  decodeRetryState,\n  decodeTimeoutType,\n  encodeApplicationFailureCategory,\n  encodeRetryState,\n  encodeTimeoutType,\n  FAILURE_SOURCE,\n  NexusOperationFailure,\n  ServerFailure,\n  TemporalFailure,\n  TerminatedFailure,\n  TimeoutFailure,\n} from '../failure';\nimport { makeProtoEnumConverters } from '../internal-workflow';\nimport { isError } from '../type-helpers';\nimport { msOptionalToTs } from '../time';\nimport { encode } from '../encoding';\nimport type { PayloadConverter } from './payload-converter';\nimport { arrayFromPayloads, fromPayloadsAtIndex, toPayloadsWithContext } from './payload-converter';\nimport type { SerializationContext } from './serialization-context';\n\n// Can't import proto enums into the workflow sandbox, use this helper type and enum converter instead.\nconst NexusHandlerErrorRetryBehavior = {\n  RETRYABLE: 'RETRYABLE',\n  NON_RETRYABLE: 'NON_RETRYABLE',\n} as const;\ntype NexusHandlerErrorRetryBehavior =\n  (typeof NexusHandlerErrorRetryBehavior)[keyof typeof NexusHandlerErrorRetryBehavior];\n\nconst [encodeNexusHandlerErrorRetryBehavior, decodeNexusHandlerErrorRetryBehavior] = makeProtoEnumConverters<\n  temporal.api.enums.v1.NexusHandlerErrorRetryBehavior,\n  typeof temporal.api.enums.v1.NexusHandlerErrorRetryBehavior,\n  keyof typeof temporal.api.enums.v1.NexusHandlerErrorRetryBehavior,\n  typeof NexusHandlerErrorRetryBehavior,\n  'NEXUS_HANDLER_ERROR_RETRY_BEHAVIOR_'\n>(\n  {\n    UNSPECIFIED: 0,\n    [NexusHandlerErrorRetryBehavior.RETRYABLE]: 1,\n    [NexusHandlerErrorRetryBehavior.NON_RETRYABLE]: 2,\n  } as const,\n  'NEXUS_HANDLER_ERROR_RETRY_BEHAVIOR_'\n);\n\nfunction combineRegExp(...regexps: RegExp[]): RegExp {\n  return new RegExp(regexps.map((x) => `(?:${x.source})`).join('|'));\n}\n\n/**\n * Stack traces will be cutoff when on of these patterns is matched\n */\nconst CUTOFF_STACK_PATTERNS = combineRegExp(\n  /** Activity execution */\n  /\\s+at (Activity\\.)?execute \\(.*[\\\\/]worker[\\\\/](?:src|lib)[\\\\/]activity\\.[jt]s:\\d+:\\d+\\)/,\n  /** Nexus execution */\n  /\\s+at( async)? (NexusHandler\\.)?invokeUserCode \\(.*[\\\\/]worker[\\\\/](?:src|lib)[\\\\/]nexus[\\\\/]index\\.[jt]s:\\d+:\\d+\\)/,\n  /** Workflow activation (inbound handlers only) */\n  /\\s+at( async)? (Activator\\.)?(startWorkflow|queryWorkflow|signalWorkflow|update|validateUpdate)NextHandler \\(.*\\.[jt]s:\\d+:\\d+\\)/,\n  /** Workflow run anything in context */\n  /\\s+at (Script\\.)?runInContext \\(native|unknown|(?:(?:node:vm|vm\\.js):\\d+:\\d+)\\)/\n);\n\n/**\n * Any stack trace frames that match any of those wil be dopped.\n * The \"null.\" prefix on some cases is to avoid https://github.com/nodejs/node/issues/42417\n */\nconst DROPPED_STACK_FRAMES_PATTERNS = combineRegExp(\n  /** Internal functions used to recursively chain interceptors */\n  /\\s+at (null\\.)?next \\(.*[\\\\/]common[\\\\/](?:src|lib)[\\\\/]interceptors\\.[jt]s:\\d+:\\d+\\)/,\n  /** Internal functions used to recursively chain interceptors */\n  /\\s+at (null\\.)?executeNextHandler \\(.*[\\\\/]worker[\\\\/](?:src|lib)[\\\\/]activity\\.[jt]s:\\d+:\\d+\\)/\n);\n\n/**\n * Cuts out the framework part of a stack trace, leaving only user code entries\n */\nexport function cutoffStackTrace(stack?: string): string {\n  const lines = (stack ?? '').split(/\\r?\\n/);\n  const acc = Array<string>();\n  for (const line of lines) {\n    if (CUTOFF_STACK_PATTERNS.test(line)) break;\n    if (!DROPPED_STACK_FRAMES_PATTERNS.test(line)) acc.push(line);\n  }\n  return acc.join('\\n');\n}\n\n/**\n * A `FailureConverter` is responsible for converting from proto `Failure` instances to JS `Errors` and back.\n *\n * We recommended using the {@link DefaultFailureConverter} instead of customizing the default implementation in order\n * to maintain cross-language Failure serialization compatibility.\n */\nexport interface FailureConverter {\n  /**\n   * Converts a caught error to a Failure proto message.\n   */\n  errorToFailure(err: unknown, payloadConverter: PayloadConverter, context?: SerializationContext): ProtoFailure;\n\n  /**\n   * Converts a Failure proto message to a JS Error object.\n   *\n   * The returned error must be an instance of `TemporalFailure`.\n   */\n  failureToError(err: ProtoFailure, payloadConverter: PayloadConverter, context?: SerializationContext): Error;\n}\n\n/**\n * The \"shape\" of the attributes set as the {@link ProtoFailure.encodedAttributes} payload in case\n * {@link DefaultEncodedFailureAttributes.encodeCommonAttributes} is set to `true`.\n */\nexport interface DefaultEncodedFailureAttributes {\n  message: string;\n  stack_trace: string;\n}\n\n/**\n * Options for the {@link DefaultFailureConverter} constructor.\n */\nexport interface DefaultFailureConverterOptions {\n  /**\n   * Whether to encode error messages and stack traces (for encrypting these attributes use a {@link PayloadCodec}).\n   */\n  encodeCommonAttributes: boolean;\n}\n\n/**\n * Default, cross-language-compatible Failure converter.\n *\n * By default, it will leave error messages and stack traces as plain text. In order to encrypt them, set\n * `encodeCommonAttributes` to `true` in the constructor options and use a {@link PayloadCodec} that can encrypt /\n * decrypt Payloads in your {@link WorkerOptions.dataConverter | Worker} and\n * {@link ClientOptions.dataConverter | Client options}.\n */\nexport class DefaultFailureConverter implements FailureConverter {\n  public readonly options: DefaultFailureConverterOptions;\n\n  constructor(options?: Partial<DefaultFailureConverterOptions>) {\n    const { encodeCommonAttributes } = options ?? {};\n    this.options = {\n      encodeCommonAttributes: encodeCommonAttributes ?? false,\n    };\n  }\n\n  /**\n   * Converts a Failure proto message to a JS Error object.\n   *\n   * Does not set common properties, that is done in {@link failureToError}.\n   */\n  failureToErrorInner(\n    failure: ProtoFailure,\n    payloadConverter: PayloadConverter,\n    context?: SerializationContext\n  ): Error {\n    if (failure.applicationFailureInfo) {\n      return new ApplicationFailure(\n        failure.message ?? undefined,\n        failure.applicationFailureInfo.type,\n        Boolean(failure.applicationFailureInfo.nonRetryable),\n        arrayFromPayloads(payloadConverter, failure.applicationFailureInfo.details?.payloads, context),\n        this.optionalFailureToOptionalError(failure.cause, payloadConverter, context),\n        undefined,\n        decodeApplicationFailureCategory(failure.applicationFailureInfo.category)\n      );\n    }\n    if (failure.serverFailureInfo) {\n      return new ServerFailure(\n        failure.message ?? undefined,\n        Boolean(failure.serverFailureInfo.nonRetryable),\n        this.optionalFailureToOptionalError(failure.cause, payloadConverter, context)\n      );\n    }\n    if (failure.timeoutFailureInfo) {\n      return new TimeoutFailure(\n        failure.message ?? undefined,\n        fromPayloadsAtIndex(payloadConverter, 0, failure.timeoutFailureInfo.lastHeartbeatDetails?.payloads, context),\n        decodeTimeoutType(failure.timeoutFailureInfo.timeoutType)\n      );\n    }\n    if (failure.terminatedFailureInfo) {\n      return new TerminatedFailure(\n        failure.message ?? undefined,\n        this.optionalFailureToOptionalError(failure.cause, payloadConverter, context)\n      );\n    }\n    if (failure.canceledFailureInfo) {\n      return new CancelledFailure(\n        failure.message ?? undefined,\n        arrayFromPayloads(payloadConverter, failure.canceledFailureInfo.details?.payloads, context),\n        this.optionalFailureToOptionalError(failure.cause, payloadConverter, context)\n      );\n    }\n    if (failure.resetWorkflowFailureInfo) {\n      return new ApplicationFailure(\n        failure.message ?? undefined,\n        'ResetWorkflow',\n        false,\n        arrayFromPayloads(payloadConverter, failure.resetWorkflowFailureInfo.lastHeartbeatDetails?.payloads, context),\n        this.optionalFailureToOptionalError(failure.cause, payloadConverter, context)\n      );\n    }\n    if (failure.childWorkflowExecutionFailureInfo) {\n      const { namespace, workflowType, workflowExecution, retryState } = failure.childWorkflowExecutionFailureInfo;\n      if (!(workflowType?.name && workflowExecution)) {\n        throw new TypeError('Missing attributes on childWorkflowExecutionFailureInfo');\n      }\n      return new ChildWorkflowFailure(\n        namespace ?? undefined,\n        workflowExecution,\n        workflowType.name,\n        decodeRetryState(retryState),\n        this.optionalFailureToOptionalError(failure.cause, payloadConverter, context)\n      );\n    }\n    if (failure.activityFailureInfo) {\n      if (!failure.activityFailureInfo.activityType?.name) {\n        throw new TypeError('Missing activityType?.name on activityFailureInfo');\n      }\n      return new ActivityFailure(\n        failure.message ?? undefined,\n        failure.activityFailureInfo.activityType.name,\n        failure.activityFailureInfo.activityId ?? undefined,\n        decodeRetryState(failure.activityFailureInfo.retryState),\n        failure.activityFailureInfo.identity ?? undefined,\n        this.optionalFailureToOptionalError(failure.cause, payloadConverter, context)\n      );\n    }\n    if (failure.nexusHandlerFailureInfo) {\n      let retryableOverride: boolean | undefined = undefined;\n      const retryBehavior = decodeNexusHandlerErrorRetryBehavior(failure.nexusHandlerFailureInfo.retryBehavior);\n      switch (retryBehavior) {\n        case 'RETRYABLE':\n          retryableOverride = true;\n          break;\n        case 'NON_RETRYABLE':\n          retryableOverride = false;\n          break;\n      }\n\n      const rawErrorType = failure.nexusHandlerFailureInfo.type || '';\n      const resolvedType: nexus.HandlerErrorType = Object.hasOwn(nexus.HandlerErrorType, rawErrorType)\n        ? nexus.HandlerErrorType[rawErrorType as keyof typeof nexus.HandlerErrorType]\n        : 'UNKNOWN';\n\n      return new nexus.HandlerError(resolvedType, failure.message ?? 'Nexus handler error', {\n        cause: this.optionalFailureToOptionalError(failure.cause, payloadConverter, context),\n        retryableOverride,\n        rawErrorType,\n        originalFailure: this.temporalFailureToNexusFailure(failure),\n      });\n    }\n    if (failure.nexusOperationExecutionFailureInfo) {\n      return new NexusOperationFailure(\n        // TODO(nexus/error): Maybe set a default message here, once we've decided on error handling.\n        failure.message ?? undefined,\n        failure.nexusOperationExecutionFailureInfo.scheduledEventId?.toNumber(),\n        // We assume these will always be set or gracefully set to empty strings.\n        failure.nexusOperationExecutionFailureInfo.endpoint ?? '',\n        failure.nexusOperationExecutionFailureInfo.service ?? '',\n        failure.nexusOperationExecutionFailureInfo.operation ?? '',\n        failure.nexusOperationExecutionFailureInfo.operationToken ?? undefined,\n        this.optionalFailureToOptionalError(failure.cause, payloadConverter, context)\n      );\n    }\n    return new TemporalFailure(\n      failure.message ?? undefined,\n      this.optionalFailureToOptionalError(failure.cause, payloadConverter, context)\n    );\n  }\n\n  failureToError(failure: ProtoFailure, payloadConverter: PayloadConverter, context?: SerializationContext): Error {\n    if (failure.encodedAttributes) {\n      const attrs = payloadConverter.fromPayload<DefaultEncodedFailureAttributes>(failure.encodedAttributes, context);\n      // Don't apply encodedAttributes unless they conform to an expected schema\n      if (typeof attrs === 'object' && attrs !== null) {\n        const { message, stack_trace } = attrs;\n        // Avoid mutating the argument\n        failure = { ...failure };\n        if (typeof message === 'string') {\n          failure.message = message;\n        }\n        if (typeof stack_trace === 'string') {\n          failure.stackTrace = stack_trace;\n        }\n      }\n    }\n    const err = this.failureToErrorInner(failure, payloadConverter, context);\n    err.stack = failure.stackTrace ?? '';\n    if (err instanceof TemporalFailure) {\n      err.failure = failure;\n    }\n    return err;\n  }\n\n  errorToFailure(err: unknown, payloadConverter: PayloadConverter, context?: SerializationContext): ProtoFailure {\n    const failure = this.errorToFailureInner(err, payloadConverter, context);\n    if (this.options.encodeCommonAttributes) {\n      const { message, stackTrace } = failure;\n      failure.message = 'Encoded failure';\n      failure.stackTrace = '';\n      failure.encodedAttributes = payloadConverter.toPayload({ message, stack_trace: stackTrace }, context);\n    }\n    return failure;\n  }\n\n  errorToFailureInner(err: unknown, payloadConverter: PayloadConverter, context?: SerializationContext): ProtoFailure {\n    if (err instanceof TemporalFailure || err instanceof nexus.HandlerError) {\n      if (err instanceof TemporalFailure && err.failure) return err.failure;\n      const base = {\n        message: err.message,\n        stackTrace: cutoffStackTrace(err.stack),\n        cause: this.optionalErrorToOptionalFailure(err.cause, payloadConverter, context),\n        source: FAILURE_SOURCE,\n      };\n\n      if (err instanceof ActivityFailure) {\n        return {\n          ...base,\n          activityFailureInfo: {\n            ...err,\n            retryState: encodeRetryState(err.retryState),\n            activityType: { name: err.activityType },\n          },\n        };\n      }\n      if (err instanceof ChildWorkflowFailure) {\n        return {\n          ...base,\n          childWorkflowExecutionFailureInfo: {\n            ...err,\n            retryState: encodeRetryState(err.retryState),\n            workflowExecution: err.execution,\n            workflowType: { name: err.workflowType },\n          },\n        };\n      }\n      if (err instanceof ApplicationFailure) {\n        return {\n          ...base,\n          applicationFailureInfo: {\n            type: err.type,\n            nonRetryable: err.nonRetryable,\n            details:\n              err.details && err.details.length\n                ? { payloads: toPayloadsWithContext(payloadConverter, context, err.details) }\n                : undefined,\n            nextRetryDelay: msOptionalToTs(err.nextRetryDelay),\n            category: encodeApplicationFailureCategory(err.category),\n          },\n        };\n      }\n      if (err instanceof CancelledFailure) {\n        return {\n          ...base,\n          canceledFailureInfo: {\n            details:\n              err.details && err.details.length\n                ? { payloads: toPayloadsWithContext(payloadConverter, context, err.details) }\n                : undefined,\n          },\n        };\n      }\n      if (err instanceof TimeoutFailure) {\n        return {\n          ...base,\n          timeoutFailureInfo: {\n            timeoutType: encodeTimeoutType(err.timeoutType),\n            lastHeartbeatDetails: err.lastHeartbeatDetails\n              ? { payloads: toPayloadsWithContext(payloadConverter, context, [err.lastHeartbeatDetails]) }\n              : undefined,\n          },\n        };\n      }\n      if (err instanceof ServerFailure) {\n        return {\n          ...base,\n          serverFailureInfo: { nonRetryable: err.nonRetryable },\n        };\n      }\n      if (err instanceof TerminatedFailure) {\n        return {\n          ...base,\n          terminatedFailureInfo: {},\n        };\n      }\n      if (err instanceof nexus.HandlerError) {\n        if (err.originalFailure) {\n          return this.nexusFailureToTemporalFailure(err.originalFailure, err.retryable);\n        } else {\n          let retryBehavior: temporal.api.enums.v1.NexusHandlerErrorRetryBehavior | undefined = undefined;\n          switch (err.retryableOverride) {\n            case true:\n              retryBehavior = encodeNexusHandlerErrorRetryBehavior('RETRYABLE');\n              break;\n            case false:\n              retryBehavior = encodeNexusHandlerErrorRetryBehavior('NON_RETRYABLE');\n              break;\n          }\n\n          return {\n            ...base,\n            nexusHandlerFailureInfo: {\n              type: err.type,\n              retryBehavior,\n            },\n          };\n        }\n      }\n      if (err instanceof NexusOperationFailure) {\n        return {\n          ...base,\n          nexusOperationExecutionFailureInfo: {\n            scheduledEventId: err.scheduledEventId ? Long.fromNumber(err.scheduledEventId) : undefined,\n            endpoint: err.endpoint,\n            service: err.service,\n            operation: err.operation,\n            operationToken: err.operationToken,\n          },\n        };\n      }\n      // Just a TemporalFailure\n      return base;\n    }\n\n    const base = {\n      source: FAILURE_SOURCE,\n    };\n\n    if (isError(err)) {\n      return {\n        ...base,\n        message: String(err.message ?? ''),\n        stackTrace: cutoffStackTrace(err.stack),\n        cause: this.optionalErrorToOptionalFailure((err as any).cause, payloadConverter, context),\n      };\n    }\n\n    const recommendation = ` [A non-Error value was thrown from your code. We recommend throwing Error objects so that we can provide a stack trace]`;\n\n    if (typeof err === 'string') {\n      return { ...base, message: err + recommendation };\n    }\n    if (typeof err === 'object') {\n      let message = '';\n      try {\n        message = JSON.stringify(err);\n      } catch (_err) {\n        message = String(err);\n      }\n      return { ...base, message: message + recommendation };\n    }\n\n    return { ...base, message: String(err) + recommendation };\n  }\n\n  /**\n   * Converts a Failure proto message to a JS Error object if defined or returns undefined.\n   */\n  optionalFailureToOptionalError(\n    failure: ProtoFailure | undefined | null,\n    payloadConverter: PayloadConverter,\n    context?: SerializationContext\n  ): Error | undefined {\n    return failure ? this.failureToError(failure, payloadConverter, context) : undefined;\n  }\n\n  /**\n   * Converts an error to a Failure proto message if defined or returns undefined\n   */\n  optionalErrorToOptionalFailure(\n    err: unknown,\n    payloadConverter: PayloadConverter,\n    context?: SerializationContext\n  ): ProtoFailure | undefined {\n    return err ? this.errorToFailure(err, payloadConverter, context) : undefined;\n  }\n\n  private nexusFailureToTemporalFailure(failure: nexus.Failure, retryable: boolean): ProtoFailure {\n    if (failure.metadata?.type === 'temporal.api.failure.v1.Failure') {\n      if (failure.details == null) {\n        throw new TypeError(\"missing details for Nexus Failure of type 'temporal.api.failure.v1.Failure'\");\n      }\n      return failure.details;\n    } else {\n      const temporalFailure: ProtoFailure = {};\n      temporalFailure.applicationFailureInfo = {\n        type: 'NexusFailure',\n        nonRetryable: !retryable,\n        details: {\n          payloads: [\n            {\n              metadata: { encoding: encode('json/plain') },\n              data: encode(JSON.stringify({ ...failure, message: '' })),\n            },\n          ],\n        },\n      };\n      temporalFailure.message = failure.message;\n      temporalFailure.stackTrace = failure.stackTrace ?? '';\n      return temporalFailure;\n    }\n  }\n\n  private temporalFailureToNexusFailure(failure: ProtoFailure): nexus.Failure {\n    return {\n      message: failure.message ?? '',\n      metadata: { type: 'temporal.api.failure.v1.Failure' },\n      // Store the full ProtoFailure as the Nexus failure details so it can be round-tripped\n      // losslessly back to a ProtoFailure via nexusFailureToTemporalFailure.\n      details: { ...failure },\n    };\n  }\n}\n","import type { ExternalStorage } from './extstore';\nimport type { FailureConverter } from './failure-converter';\nimport { DefaultFailureConverter } from './failure-converter';\nimport type { PayloadCodec } from './payload-codec';\nimport type { PayloadConverter } from './payload-converter';\nimport { defaultPayloadConverter } from './payload-converter';\n\n/**\n * When your data (arguments and return values) is sent over the wire and stored by Temporal Server, it is encoded in\n * binary in a {@link Payload} Protobuf message.\n *\n * The default `DataConverter` supports `undefined`, `Uint8Array`, and JSON serializables (so if\n * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#description | `JSON.stringify(yourArgOrRetval)`}\n * works, the default data converter will work). Protobufs are supported via\n * {@link https://docs.temporal.io/typescript/data-converters#protobufs | this API}.\n *\n * Use a custom `DataConverter` to control the contents of your {@link Payload}s. Common reasons for using a custom\n * `DataConverter` are:\n * - Converting values that are not supported by the default `DataConverter` (for example, `JSON.stringify()` doesn't\n *   handle `BigInt`s, so if you want to return `{ total: 1000n }` from a Workflow, Signal, or Activity, you need your\n *   own `DataConverter`).\n * - Encrypting values that may contain private information that you don't want stored in plaintext in Temporal Server's\n *   database.\n * - Compressing values to reduce disk or network usage.\n *\n * To use your custom `DataConverter`, provide it to the {@link WorkflowClient}, {@link Worker}, and\n * {@link bundleWorkflowCode} (if you use it):\n * - `new WorkflowClient({ ..., dataConverter })`\n * - `Worker.create({ ..., dataConverter })`\n * - `bundleWorkflowCode({ ..., payloadConverterPath })`\n */\nexport interface DataConverter {\n  /**\n   * Path of a file that has a `payloadConverter` named export.\n   * `payloadConverter` should be an object that implements {@link PayloadConverter}.\n   * If no path is provided, {@link defaultPayloadConverter} is used.\n   */\n  payloadConverterPath?: string;\n\n  /**\n   * Path of a file that has a `failureConverter` named export.\n   * `failureConverter` should be an object that implements {@link FailureConverter}.\n   * If no path is provided, {@link defaultFailureConverter} is used.\n   */\n  failureConverterPath?: string;\n\n  /**\n   * An array of {@link PayloadCodec} instances.\n   *\n   * Payloads are encoded in the order of the array and decoded in the opposite order. For example, if you have a\n   * compression codec and an encryption codec, then you want data to be encoded with the compression codec first, so\n   * you'd do `payloadCodecs: [compressionCodec, encryptionCodec]`.\n   */\n  payloadCodecs?: PayloadCodec[];\n\n  /**\n   * Configuration for offloading {@link Payload}s to external storage instead of sending them inline to Temporal Server.\n   *\n   * When set, {@link Payload}s whose size exceeds {@link ExternalStorage.payloadSizeThreshold} are written to one of the\n   * configured {@link StorageDriver}s and replaced on the wire by a small reference; they are transparently retrieved\n   * again on the receiving side.\n   *\n   * @experimental\n   */\n  externalStorage?: ExternalStorage;\n}\n\n/**\n * A {@link DataConverter} that has been loaded via {@link loadDataConverter}.\n */\nexport interface LoadedDataConverter {\n  payloadConverter: PayloadConverter;\n  failureConverter: FailureConverter;\n  payloadCodecs: PayloadCodec[];\n\n  /**\n   * Configuration for offloading {@link Payload}s to external storage, carried through unchanged from\n   * {@link DataConverter.externalStorage} by {@link loadDataConverter}. `undefined` when external storage is not\n   * configured. Consumed by the Worker and Client runtime to store/retrieve offloaded payloads. See\n   * {@link DataConverter.externalStorage} for details.\n   *\n   * @experimental\n   */\n  externalStorage?: ExternalStorage;\n}\n\n/**\n * The default {@link FailureConverter} used by the SDK.\n *\n * Error messages and stack traces are serialized as plain text.\n */\nexport const defaultFailureConverter: FailureConverter = new DefaultFailureConverter();\n\n/**\n * A \"loaded\" data converter that uses the default set of failure and payload converters.\n */\nexport const defaultDataConverter: LoadedDataConverter = {\n  payloadConverter: defaultPayloadConverter,\n  failureConverter: defaultFailureConverter,\n  payloadCodecs: [],\n};\n","import { ValueError } from '../errors';\nimport type { Payload } from '../interfaces';\n\n/**\n * Reference returned from {@link StorageDriver.store}. `claimData` is an\n * opaque key/value map the driver uses to retrieve the payload later.\n *\n * @experimental\n */\nexport class StorageDriverClaim {\n  constructor(readonly claimData: Record<string, string>) {}\n}\n\n/**\n * Workflow identity information passed to a storage driver.\n *\n * @experimental\n */\nexport interface StorageDriverWorkflowInfo {\n  readonly kind: 'workflow';\n  /** The namespace of the workflow execution. */\n  readonly namespace: string;\n  /** The workflow ID. */\n  readonly id?: string;\n  /** The workflow run ID, if available. */\n  readonly runId?: string;\n  /** The workflow type name, if available. */\n  readonly type?: string;\n}\n\n/**\n * Activity identity information passed to a storage driver.\n *\n * @experimental\n */\nexport interface StorageDriverActivityInfo {\n  readonly kind: 'activity';\n  /** The namespace of the activity execution. */\n  readonly namespace: string;\n  /** The activity ID. */\n  readonly id?: string;\n  /** The activity run ID (only for standalone activities). */\n  readonly runId?: string;\n  /** The activity type name, if available. */\n  readonly type?: string;\n}\n\n/**\n * Identity of the workflow or activity that produced the payloads being stored.\n *\n * @experimental\n */\nexport type StorageDriverTargetInfo = StorageDriverWorkflowInfo | StorageDriverActivityInfo;\n\n/**\n * Context handed to {@link StorageDriver.store} (and to the selector).\n *\n * @experimental\n */\nexport interface StorageDriverStoreContext {\n  /** Aborts the in-flight operation; siblings are cancelled on first error. */\n  abortSignal?: AbortSignal;\n  /** Identity of the workflow / activity that produced the payloads. */\n  target?: StorageDriverTargetInfo;\n}\n\n/**\n * Context handed to {@link StorageDriver.retrieve}.\n *\n * @experimental\n */\nexport interface StorageDriverRetrieveContext {\n  abortSignal?: AbortSignal;\n}\n\n/**\n * External storage backend driver.\n *\n * `name` is the per-instance routing key written into the wire format.\n * `type` is a stable cross-language driver-implementation identifier\n * reported via worker heartbeat (e.g. `\"aws.s3driver\"`).\n *\n * @experimental\n */\nexport interface StorageDriver {\n  readonly name: string;\n  readonly type: string;\n  store(context: StorageDriverStoreContext, payloads: Payload[]): Promise<StorageDriverClaim[]>;\n  retrieve(context: StorageDriverRetrieveContext, claims: StorageDriverClaim[]): Promise<Payload[]>;\n}\n\n/**\n * User-supplied function that picks the destination driver for a given\n * payload, or returns `null` to keep the payload inline.\n *\n * @experimental\n */\nexport type StorageDriverSelector = (context: StorageDriverStoreContext, payload: Payload) => StorageDriver | null;\n\n// ============================================================================\n// Configuration\n// ============================================================================\n\n/** Default {@link ExternalStorage.payloadSizeThreshold}: 256 KiB. */\nconst DEFAULT_PAYLOAD_SIZE_THRESHOLD = 256 * 1024;\n\n/**\n * Configuration for external storage. Holds the registered drivers, an\n * optional selector, and the size threshold above which payloads are\n * eligible for offloading to external storage. A selector function is\n * required when more than one driver is registered.\n *\n * @experimental\n */\nexport class ExternalStorage {\n  readonly drivers: StorageDriver[];\n  /**\n   * Selects the destination driver for each payload, or returns `null` to keep\n   * the payload inline.\n   */\n  readonly driverSelector: StorageDriverSelector;\n  readonly payloadSizeThreshold: number;\n  private readonly driversByName: ReadonlyMap<string, StorageDriver>;\n\n  constructor({\n    drivers,\n    driverSelector,\n    payloadSizeThreshold = DEFAULT_PAYLOAD_SIZE_THRESHOLD,\n  }: {\n    drivers: StorageDriver[];\n    driverSelector?: StorageDriverSelector;\n    /** Omit for default (256 KiB). Set `0` to consider all payloads regardless of size. */\n    payloadSizeThreshold?: number;\n  }) {\n    if (!Array.isArray(drivers) || drivers.length === 0) {\n      throw new ValueError('ExternalStorage requires at least one driver');\n    }\n    if (\n      typeof payloadSizeThreshold !== 'number' ||\n      !Number.isFinite(payloadSizeThreshold) ||\n      payloadSizeThreshold < 0\n    ) {\n      throw new ValueError(\n        `ExternalStorage.payloadSizeThreshold must be a non-negative finite number, got ${String(payloadSizeThreshold)}`\n      );\n    }\n\n    const driversByName = new Map<string, StorageDriver>();\n    for (const driver of drivers) {\n      if (typeof driver?.name !== 'string' || driver.name.length === 0) {\n        throw new ValueError(\"Storage driver 'name' must be a non-empty string\");\n      }\n      if (driversByName.has(driver.name)) {\n        throw new ValueError(`Duplicate storage driver name: '${driver.name}'`);\n      }\n      driversByName.set(driver.name, driver);\n    }\n\n    if (driverSelector === undefined && driversByName.size > 1) {\n      throw new ValueError('ExternalStorage.driverSelector is required when more than one driver is registered');\n    }\n\n    this.drivers = [...drivers];\n    this.driverSelector = driverSelector ?? (() => drivers[0] as StorageDriver);\n    this.payloadSizeThreshold = payloadSizeThreshold;\n    this.driversByName = driversByName;\n  }\n\n  /** Look up a registered driver by name. Returns `null` if no driver with that name is registered. */\n  getDriver(name: string): StorageDriver | null {\n    return this.driversByName.get(name) ?? null;\n  }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=payload-codec.js.map","import * as time from './time';\nimport type { Duration } from './time';\nimport { type Timestamp } from './time';\n\n/**\n * Lossy conversion function from Timestamp to number due to possible overflow.\n * If ts is null or undefined returns undefined.\n *\n * @hidden\n * @deprecated - meant for internal use only\n */\nexport function optionalTsToMs(ts: Timestamp | null | undefined): number | undefined {\n  return time.optionalTsToMs(ts);\n}\n\n/**\n * Lossy conversion function from Timestamp to number due to possible overflow\n *\n * @hidden\n * @deprecated - meant for internal use only\n * @deprecated - meant for internal use only\n */\nexport function tsToMs(ts: Timestamp | null | undefined): number {\n  return time.tsToMs(ts);\n}\n\n/**\n * @hidden\n * @deprecated - meant for internal use only\n */\nexport function msNumberToTs(millis: number): Timestamp {\n  return time.msNumberToTs(millis);\n}\n\n/**\n * @hidden\n * @deprecated - meant for internal use only\n */\nexport function msToTs(str: Duration): Timestamp {\n  return time.msToTs(str);\n}\n\n/**\n * @hidden\n * @deprecated - meant for internal use only\n */\nexport function msOptionalToTs(str: Duration | undefined): Timestamp | undefined {\n  return time.msOptionalToTs(str);\n}\n\n/**\n * @hidden\n * @deprecated - meant for internal use only\n */\nexport function msOptionalToNumber(val: Duration | undefined): number | undefined {\n  return time.msOptionalToNumber(val);\n}\n\n/**\n * @hidden\n * @deprecated - meant for internal use only\n */\nexport function msToNumber(val: Duration): number {\n  return time.msToNumber(val);\n}\n\n/**\n * @hidden\n * @deprecated - meant for internal use only\n */\nexport function tsToDate(ts: Timestamp): Date {\n  return time.tsToDate(ts);\n}\n\n/**\n * @hidden\n * @deprecated - meant for internal use only\n */\nexport function optionalTsToDate(ts: Timestamp | null | undefined): Date | undefined {\n  return time.optionalTsToDate(ts);\n}\n","import type { temporal } from '@temporalio/proto';\nimport type { PayloadTypeInfo } from './type-info';\n\nexport type Payload = temporal.api.common.v1.IPayload;\n\n/** Type that can be returned from a Workflow `execute` function */\nexport type WorkflowReturnType = Promise<any>;\nexport type WorkflowUpdateType = (...args: any[]) => Promise<any> | any;\nexport type WorkflowUpdateValidatorType = (...args: any[]) => void;\nexport type WorkflowUpdateAnnotatedType = {\n  handler: WorkflowUpdateType;\n  unfinishedPolicy: HandlerUnfinishedPolicy;\n  validator?: WorkflowUpdateValidatorType;\n  description?: string;\n  typeInfo?: PayloadTypeInfo;\n};\nexport type WorkflowSignalType = (...args: any[]) => Promise<void> | void;\nexport type WorkflowSignalAnnotatedType = {\n  handler: WorkflowSignalType;\n  unfinishedPolicy: HandlerUnfinishedPolicy;\n  description?: string;\n  typeInfo?: SignalTypeInfo;\n};\nexport type WorkflowQueryType = (...args: any[]) => any;\nexport type WorkflowQueryAnnotatedType = {\n  handler: WorkflowQueryType;\n  description?: string;\n  typeInfo?: PayloadTypeInfo;\n};\n\n/**\n * Broad Workflow function definition, specific Workflows will typically use a narrower type definition, e.g:\n * ```ts\n * export async function myWorkflow(arg1: number, arg2: string): Promise<string>;\n * ```\n */\nexport type Workflow = (...args: any[]) => WorkflowReturnType;\n\ndeclare const argsBrand: unique symbol;\ndeclare const retBrand: unique symbol;\n\n/**\n * Options for {@link UpdateDefinition}.\n *\n * @experimental\n */\nexport interface UpdateDefinitionOptions {\n  /** Type information used to convert Update arguments and results. */\n  typeInfo?: PayloadTypeInfo;\n}\n\n/**\n * An interface representing a Workflow update definition, as returned from {@link defineUpdate}\n *\n * @remarks `Args` can be used for parameter type inference in handler functions and WorkflowHandle methods.\n * `Name` can optionally be specified with a string literal type to preserve type-level knowledge of the update name.\n */\nexport interface UpdateDefinition<Ret, Args extends any[] = [], Name extends string = string> {\n  type: 'update';\n  name: Name;\n  /** Type information used to convert Update arguments and results. */\n  typeInfo?: PayloadTypeInfo;\n  /**\n   * Virtual type brand to maintain a distinction between {@link UpdateDefinition} types with different args.\n   * This field is not present at run-time.\n   */\n  [argsBrand]: Args;\n  /**\n   * Virtual type brand to maintain a distinction between {@link UpdateDefinition} types with different return types.\n   * This field is not present at run-time.\n   */\n  [retBrand]: Ret;\n}\n\n/**\n * An interface representing a Workflow signal definition, as returned from {@link defineSignal}\n *\n * @remarks `Args` can be used for parameter type inference in handler functions and WorkflowHandle methods.\n * `Name` can optionally be specified with a string literal type to preserve type-level knowledge of the signal name.\n */\nexport type SignalTypeInfo = Pick<PayloadTypeInfo, 'inputTypes'>;\n\n/**\n * Options for {@link SignalDefinition}.\n *\n * @experimental\n */\nexport interface SignalDefinitionOptions {\n  /** Type information used to convert Signal arguments. */\n  typeInfo?: SignalTypeInfo;\n}\n\nexport interface SignalDefinition<Args extends any[] = [], Name extends string = string> {\n  type: 'signal';\n  name: Name;\n  /** Type information used to convert Signal arguments. */\n  typeInfo?: SignalTypeInfo;\n  /**\n   * Virtual type brand to maintain a distinction between {@link SignalDefinition} types with different args.\n   * This field is not present at run-time.\n   */\n  [argsBrand]: Args;\n}\n\n/**\n * Options for {@link QueryDefinition}.\n *\n * @experimental\n */\nexport interface QueryDefinitionOptions {\n  /** Type information used to convert Query arguments and results. */\n  typeInfo?: PayloadTypeInfo;\n}\n\n/**\n * An interface representing a Workflow query definition as returned from {@link defineQuery}\n *\n * @remarks `Args` and `Ret` can be used for parameter type inference in handler functions and WorkflowHandle methods.\n * `Name` can optionally be specified with a string literal type to preserve type-level knowledge of the query name.\n */\nexport interface QueryDefinition<Ret, Args extends any[] = [], Name extends string = string> {\n  type: 'query';\n  name: Name;\n  /** Type information used to convert Query arguments and results. */\n  typeInfo?: PayloadTypeInfo;\n  /**\n   * Virtual type brand to maintain a distinction between {@link QueryDefinition} types with different args.\n   * This field is not present at run-time.\n   */\n  [argsBrand]: Args;\n  /**\n   * Virtual type brand to maintain a distinction between {@link QueryDefinition} types with different return types.\n   * This field is not present at run-time.\n   */\n  [retBrand]: Ret;\n}\n\n/** Get the \"unwrapped\" return type (without Promise) of the execute handler from Workflow type `W` */\nexport type WorkflowResultType<W extends Workflow> = ReturnType<W> extends Promise<infer R> ? R : never;\n\nexport interface ActivityFunction<P extends any[] = any[], R = any> {\n  (...args: P): Promise<R>;\n}\n\n/**\n * Mapping of Activity name to function\n * @deprecated not required anymore, for untyped activities use {@link UntypedActivities}\n */\nexport type ActivityInterface = Record<string, ActivityFunction>;\n\n/**\n * Mapping of Activity name to function\n */\nexport type UntypedActivities = Record<string, ActivityFunction>;\n\n/**\n * A workflow's history and ID. Useful for replay.\n */\nexport interface HistoryAndWorkflowId {\n  workflowId: string;\n  history: temporal.api.history.v1.History | unknown | undefined;\n}\n\n/**\n * Policy defining actions taken when a workflow exits while update or signal handlers are running.\n * The workflow exit may be due to successful return, failure, cancellation, or continue-as-new.\n */\nexport const HandlerUnfinishedPolicy = {\n  /**\n   * Issue a warning in addition to abandoning the handler execution. The warning will not be issued if the workflow fails.\n   */\n  WARN_AND_ABANDON: 'WARN_AND_ABANDON',\n\n  /**\n   * Abandon the handler execution.\n   *\n   * In the case of an update handler this means that the client will receive an error rather than\n   * the update result.\n   */\n  ABANDON: 'ABANDON',\n} as const;\nexport type HandlerUnfinishedPolicy = (typeof HandlerUnfinishedPolicy)[keyof typeof HandlerUnfinishedPolicy];\n","import { filterNullAndUndefined, mergeObjects } from './internal-workflow';\n\nexport type LogLevel = 'TRACE' | 'DEBUG' | 'INFO' | 'WARN' | 'ERROR';\n\nexport type LogMetadata = Record<string | symbol, any>;\n\n/**\n * Implement this interface in order to customize worker logging\n */\nexport interface Logger {\n  log(level: LogLevel, message: string, meta?: LogMetadata): any;\n  trace(message: string, meta?: LogMetadata): any;\n  debug(message: string, meta?: LogMetadata): any;\n  info(message: string, meta?: LogMetadata): any;\n  warn(message: string, meta?: LogMetadata): any;\n  error(message: string, meta?: LogMetadata): any;\n}\n\n/**\n * Possible values of the `sdkComponent` meta attributes on log messages. This\n * attribute indicates which subsystem emitted the log message; this may for\n * example be used to implement fine-grained filtering of log messages.\n *\n * Note that there is no guarantee that this list will remain stable in the\n * future; values may be added or removed, and messages that are currently\n * emitted with some `sdkComponent` value may use a different value in the future.\n */\nexport enum SdkComponent {\n  /**\n   * Component name for messages emited from Workflow code, using the {@link Workflow context logger|workflow.log}.\n   * The SDK itself never publishes messages with this component name.\n   */\n  workflow = 'workflow',\n\n  /**\n   * Component name for messages emited from an activity, using the {@link activity context logger|Context.log}.\n   * The SDK itself never publishes messages with this component name.\n   */\n  activity = 'activity',\n\n  /**\n   * Component name for messages emited from a Nexus Operation Handler, using the Nexus context logger.\n   * The SDK itself never publishes messages with this component name.\n   */\n  nexus = 'nexus',\n\n  /**\n   * Component name for messages emited from a Temporal Worker instance.\n   *\n   * This notably includes:\n   * - Issues with Worker or runtime configuration, or the JS execution environment;\n   * - Worker's, Activity's, and Workflow's lifecycle events;\n   * - Workflow Activation and Activity Task processing events;\n   * - Workflow bundling messages;\n   * - Sink processing issues.\n   */\n  worker = 'worker',\n\n  /**\n   * Component name for all messages emitted by the Rust Core SDK library.\n   */\n  core = 'core',\n}\n\n////////////////////////////////////////////////////////////////////////////////////////////////////\n\n/**\n * @internal\n * @hidden\n */\nexport type LogMetaOrFunc = LogMetadata | (() => LogMetadata);\n\n/**\n * A logger implementation that adds metadata before delegating calls to a parent logger.\n *\n * @internal\n * @hidden\n */\nexport class LoggerWithComposedMetadata implements Logger {\n  /**\n   * Return a {@link Logger} that adds metadata before delegating calls to a parent logger.\n   *\n   * New metadata may either be specified statically as a delta object, or as a function evaluated\n   * every time a log is emitted that will return a delta object.\n   *\n   * Some optimizations are performed to avoid creating unnecessary objects and to keep runtime\n   * overhead associated with resolving metadata as low as possible.\n   */\n  public static compose(logger: Logger, metaOrFunc: LogMetaOrFunc): Logger {\n    // Flatten recursive LoggerWithComposedMetadata instances\n    if (logger instanceof LoggerWithComposedMetadata) {\n      const contributors = appendToChain(logger.contributors, metaOrFunc);\n      // If the new contributor results in no actual change to the chain, then we don't need a new logger\n      if (contributors === undefined) return logger;\n      return new LoggerWithComposedMetadata(logger.parentLogger, contributors);\n    } else {\n      const contributors = appendToChain(undefined, metaOrFunc);\n      if (contributors === undefined) return logger;\n      return new LoggerWithComposedMetadata(logger, contributors);\n    }\n  }\n\n  constructor(\n    private readonly parentLogger: Logger,\n    private readonly contributors: LogMetaOrFunc[]\n  ) {}\n\n  log(level: LogLevel, message: string, extraMeta?: LogMetadata): void {\n    this.parentLogger.log(level, message, resolveMetadata(this.contributors, extraMeta));\n  }\n\n  trace(message: string, extraMeta?: LogMetadata): void {\n    this.parentLogger.trace(message, resolveMetadata(this.contributors, extraMeta));\n  }\n\n  debug(message: string, extraMeta?: LogMetadata): void {\n    this.parentLogger.debug(message, resolveMetadata(this.contributors, extraMeta));\n  }\n\n  info(message: string, extraMeta?: LogMetadata): void {\n    this.parentLogger.info(message, resolveMetadata(this.contributors, extraMeta));\n  }\n\n  warn(message: string, extraMeta?: LogMetadata): void {\n    this.parentLogger.warn(message, resolveMetadata(this.contributors, extraMeta));\n  }\n\n  error(message: string, extraMeta?: LogMetadata): void {\n    this.parentLogger.error(message, resolveMetadata(this.contributors, extraMeta));\n  }\n}\n\nfunction resolveMetadata(contributors: LogMetaOrFunc[], extraMeta?: LogMetadata): LogMetadata {\n  const resolved = {};\n  for (const contributor of contributors) {\n    Object.assign(resolved, typeof contributor === 'function' ? contributor() : contributor);\n  }\n  Object.assign(resolved, extraMeta);\n  return filterNullAndUndefined(resolved);\n}\n\n/**\n * Append a metadata contributor to the chain, merging it with the former last contributor if both are plain objects\n */\nfunction appendToChain(\n  existingContributors: LogMetaOrFunc[] | undefined,\n  newContributor: LogMetaOrFunc\n): LogMetaOrFunc[] | undefined {\n  // If the new contributor is an empty object, then it results in no actual change to the chain\n  if (typeof newContributor === 'object' && Object.keys(newContributor).length === 0) {\n    return existingContributors;\n  }\n\n  // If existing chain is empty, then the new contributor is the chain\n  if (existingContributors == null || existingContributors.length === 0) {\n    return [newContributor];\n  }\n\n  // If both last contributor and new contributor are plain objects, merge them to a single object.\n  const last = existingContributors[existingContributors.length - 1];\n  if (typeof last === 'object' && typeof newContributor === 'object') {\n    const merged = mergeObjects(last, newContributor);\n    if (merged === last) return existingContributors;\n    return [...existingContributors.slice(0, -1), merged];\n  }\n\n  // Otherwise, just append the new contributor to the chain.\n  return [...existingContributors, newContributor];\n}\n","import type { temporal } from '@temporalio/proto';\n\n/**\n * Priority contains metadata that controls relative ordering of task processing when tasks are\n * backlogged in a queue. Initially, Priority will be used in activity and workflow task queues,\n * which are typically where backlogs exist.\n * Priority is (for now) attached to workflows and activities. Activities and child workflows\n * inherit Priority from the workflow that created them, but may override fields when they are\n * started or modified. For each field of a Priority on an activity/workflow, not present or equal\n * to zero/empty string means to inherit the value from the calling workflow, or if there is no\n * calling workflow, then use the default (documented on the field).\n * The overall semantics of Priority are:\n * 1. First, consider \"priority_key\": lower number goes first.\n * 2. Then, consider fairness: the fairness mechanism attempts to dispatch tasks for a given key in\n *    proportion to its weight.\n */\nexport interface Priority {\n  /**\n   * Priority key is a positive integer from 1 to n, where smaller integers\n   * correspond to higher priorities (tasks run sooner). In general, tasks in\n   * a queue should be processed in close to priority order, although small\n   * deviations are possible.\n   *\n   * The maximum priority value (minimum priority) is determined by server configuration, and\n   * defaults to 5.\n   *\n   * The default priority is (min+max)/2. With the default max of 5 and min of 1, that comes out to 3.\n   */\n  priorityKey?: number;\n\n  /**\n   * FairnessKey is a short string that's used as a key for a fairness\n   * balancing mechanism. It may correspond to a tenant id, or to a fixed\n   * string like \"high\" or \"low\". The default is the empty string.\n   *\n   * The fairness mechanism attempts to dispatch tasks for a given key in\n   * proportion to its weight. For example, using a thousand distinct tenant\n   * ids, each with a weight of 1.0 (the default) will result in each tenant\n   * getting a roughly equal share of task dispatch throughput.\n   *\n   * Fairness keys are limited to 64 bytes.\n   */\n  fairnessKey?: string;\n\n  /**\n   * FairnessWeight for a task can come from multiple sources for\n   * flexibility. From highest to lowest precedence:\n   * 1. Weights for a small set of keys can be overridden in task queue\n   *    configuration with an API.\n   * 2. It can be attached to the workflow/activity in this field.\n   * 3. The default weight of 1.0 will be used.\n   *\n   * Weight values are clamped to the range [0.001, 1000].\n   */\n  fairnessWeight?: number;\n}\n\n/**\n * Turn a proto compatible Priority into a TS Priority\n */\nexport function decodePriority(priority?: temporal.api.common.v1.IPriority | null): Priority {\n  return {\n    priorityKey: priority?.priorityKey ?? undefined,\n    fairnessKey: priority?.fairnessKey ?? undefined,\n    fairnessWeight: priority?.fairnessWeight ?? undefined,\n  };\n}\n\n/**\n * Turn a TS Priority into a proto compatible Priority\n */\nexport function compilePriority(priority: Priority): temporal.api.common.v1.IPriority {\n  if (priority.priorityKey !== undefined && priority.priorityKey !== null) {\n    if (!Number.isInteger(priority.priorityKey)) {\n      throw new TypeError('priorityKey must be an integer');\n    }\n    if (priority.priorityKey < 0) {\n      throw new RangeError('priorityKey must be a positive integer');\n    }\n  }\n\n  return {\n    priorityKey: priority.priorityKey ?? 0,\n    fairnessKey: priority.fairnessKey ?? '',\n    fairnessWeight: priority.fairnessWeight ?? 0,\n  };\n}\n","import { filterNullAndUndefined, mergeObjects } from './internal-workflow';\n\n/**\n * A meter for creating metrics to record values on.\n *\n * @experimental The Metric API is an experimental feature and may be subject to change.\n */\nexport interface MetricMeter {\n  /**\n   * Create a new counter metric that supports adding values.\n   *\n   * @param name Name for the counter metric.\n   * @param unit Unit for the counter metric. Optional.\n   * @param description Description for the counter metric. Optional.\n   */\n  createCounter(name: string, unit?: string, description?: string): MetricCounter;\n\n  /**\n   * Create a new histogram metric that supports recording values.\n   *\n   * @param name Name for the histogram metric.\n   * @param valueType Type of value to record. Defaults to `int`.\n   * @param unit Unit for the histogram metric. Optional.\n   * @param description Description for the histogram metric. Optional.\n   */\n  createHistogram(\n    name: string,\n    valueType?: NumericMetricValueType,\n    unit?: string,\n    description?: string\n  ): MetricHistogram;\n\n  /**\n   * Create a new gauge metric that supports setting values.\n   *\n   * @param name Name for the gauge metric.\n   * @param valueType Type of value to set. Defaults to `int`.\n   * @param unit Unit for the gauge metric. Optional.\n   * @param description Description for the gauge metric. Optional.\n   */\n  createGauge(name: string, valueType?: NumericMetricValueType, unit?: string, description?: string): MetricGauge;\n\n  /**\n   * Create a new up-down counter metric that supports adding signed values.\n   *\n   * @param name Name for the up-down counter metric.\n   * @param unit Unit for the up-down counter metric. Optional.\n   * @param description Description for the up-down counter metric. Optional.\n   */\n  createUpDownCounter?(name: string, unit?: string, description?: string): MetricUpDownCounter;\n\n  /**\n   * Return a clone of this meter, with additional tags. All metrics created off the meter will\n   * have the tags.\n   *\n   * @param tags Tags to append.\n   */\n  withTags(tags: MetricTags): MetricMeter;\n}\n\n/**\n * Base interface for all metrics.\n *\n * @experimental The Metric API is an experimental feature and may be subject to change.\n */\nexport interface Metric {\n  /**\n   * The name of the metric.\n   */\n  name: string;\n\n  /**\n   * The unit of the metric, if any.\n   */\n  unit?: string;\n\n  /**\n   * The description of the metric, if any.\n   */\n  description?: string;\n\n  /**\n   * The kind of the metric (e.g. `counter`, `histogram`, `gauge`).\n   */\n  kind: MetricKind;\n\n  /**\n   * The type of value recorded by the metric. Either `int` or `float`.\n   */\n  valueType: NumericMetricValueType;\n}\n\n/**\n * Tags to be attached to some metrics.\n *\n * @experimental The Metric API is an experimental feature and may be subject to change.\n */\nexport type MetricTags = Record<string, string | number | boolean>;\n\n/**\n * Type of numerical values recorded by a metric.\n *\n * Note that this represents the _configuration_ of the metric; however, since JavaScript doesn't\n * have different runtime representation for integers and floats, the actual value type is always\n * a JS 'number'.\n *\n * @experimental The Metric API is an experimental feature and may be subject to change.\n */\nexport type NumericMetricValueType = 'int' | 'float';\n\n/**\n * The kind of a metric.\n *\n * @experimental The Metric API is an experimental feature and may be subject to change.\n */\nexport type MetricKind = 'counter' | 'histogram' | 'gauge' | 'up-down-counter';\n\n/**\n * A metric that supports adding values as a counter.\n *\n * @experimental The Metric API is an experimental feature and may be subject to change.\n */\nexport interface MetricCounter extends Metric {\n  /**\n   * Add the given value to the counter.\n   *\n   * @param value Value to add.\n   * @param extraTags Extra tags if any.\n   */\n  add(value: number, extraTags?: MetricTags): void;\n\n  /**\n   * Return a clone of this counter, with additional tags.\n   *\n   * @param tags Tags to append to existing tags.\n   */\n  withTags(tags: MetricTags): MetricCounter;\n\n  kind: 'counter';\n  valueType: 'int';\n}\n\n/**\n * A metric that supports recording values on a histogram.\n *\n * @experimental The Metric API is an experimental feature and may be subject to change.\n */\nexport interface MetricHistogram extends Metric {\n  /**\n   * Record the given value on the histogram.\n   *\n   * @param value Value to record. Must be a non-negative number. Value will be casted to the given\n   *              {@link valueType}. Loss of precision may occur if the value is not already of the\n   *              correct type.\n   * @param extraTags Extra tags if any.\n   */\n  record(value: number, extraTags?: MetricTags): void;\n\n  /**\n   * Return a clone of this histogram, with additional tags.\n   *\n   * @param tags Tags to append to existing tags.\n   */\n  withTags(tags: MetricTags): MetricHistogram;\n\n  kind: 'histogram';\n}\n\n/**\n * A metric that supports setting values.\n *\n * @experimental The Metric API is an experimental feature and may be subject to change.\n */\nexport interface MetricGauge extends Metric {\n  /**\n   * Set the given value on the gauge.\n   *\n   * @param value Value to set.\n   * @param extraTags Extra tags if any.\n   */\n  set(value: number, extraTags?: MetricTags): void;\n\n  /**\n   * Return a clone of this gauge, with additional tags.\n   *\n   * @param tags Tags to append to existing tags.\n   */\n  withTags(tags: MetricTags): MetricGauge;\n\n  kind: 'gauge';\n}\n\n/**\n * A metric that supports adding signed values as an up-down counter.\n *\n * @experimental The Metric API is an experimental feature and may be subject to change.\n */\nexport interface MetricUpDownCounter extends Metric {\n  /**\n   * Add the given value to the up-down counter. Value may be negative.\n   *\n   * @param value Value to add (can be positive or negative).\n   * @param extraTags Extra tags if any.\n   */\n  add(value: number, extraTags?: MetricTags): void;\n\n  /**\n   * Return a clone of this up-down counter, with additional tags.\n   *\n   * @param tags Tags to append to existing tags.\n   */\n  withTags(tags: MetricTags): MetricUpDownCounter;\n\n  kind: 'up-down-counter';\n  valueType: 'int';\n}\n\n////////////////////////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A meter implementation that does nothing.\n */\nclass NoopMetricMeter implements MetricMeter {\n  createCounter(name: string, unit?: string, description?: string): MetricCounter {\n    return {\n      name,\n      unit,\n      description,\n\n      kind: 'counter',\n      valueType: 'int',\n\n      add(_value, _extraTags) {},\n\n      withTags(_extraTags) {\n        return this;\n      },\n    };\n  }\n\n  createHistogram(\n    name: string,\n    valueType: NumericMetricValueType = 'int',\n    unit?: string,\n    description?: string\n  ): MetricHistogram {\n    return {\n      name,\n      unit,\n      description,\n\n      kind: 'histogram',\n      valueType,\n\n      record(_value, _extraTags) {},\n\n      withTags(_extraTags) {\n        return this;\n      },\n    };\n  }\n\n  createGauge(\n    name: string,\n    valueType: NumericMetricValueType = 'int',\n    unit?: string,\n    description?: string\n  ): MetricGauge {\n    return {\n      name,\n      unit,\n      description,\n\n      kind: 'gauge',\n      valueType,\n\n      set(_value, _extraTags) {},\n\n      withTags(_extraTags) {\n        return this;\n      },\n    };\n  }\n\n  createUpDownCounter(name: string, unit?: string, description?: string): MetricUpDownCounter {\n    return {\n      name,\n      unit,\n      description,\n\n      kind: 'up-down-counter',\n      valueType: 'int',\n\n      add(_value, _extraTags) {},\n\n      withTags(_extraTags) {\n        return this;\n      },\n    };\n  }\n\n  withTags(_extraTags: MetricTags): MetricMeter {\n    return this;\n  }\n}\n\nexport const noopMetricMeter = new NoopMetricMeter();\n\n////////////////////////////////////////////////////////////////////////////////////////////////////\n\nexport type MetricTagsOrFunc = MetricTags | (() => MetricTags);\n\n/**\n * A meter implementation that adds tags before delegating calls to a parent meter.\n *\n * @experimental The Metric API is an experimental feature and may be subject to change.\n * @internal\n * @hidden\n */\nexport class MetricMeterWithComposedTags implements MetricMeter {\n  /**\n   * Return a {@link MetricMeter} that adds tags before delegating calls to a parent meter.\n   *\n   * New tags may either be specified statically as a delta object, or as a function evaluated\n   * every time a metric is recorded that will return a delta object.\n   *\n   * Some optimizations are performed to avoid creating unnecessary objects and to keep runtime\n   * overhead associated with resolving tags as low as possible.\n   *\n   * @param meter The parent meter to delegate calls to.\n   * @param tagsOrFunc New tags may either be specified statically as a delta object, or as a function\n   *                   evaluated every time a metric is recorded that will return a delta object.\n   * @param force if `true`, then a `MetricMeterWithComposedTags` will be created even if there\n   *              is no tags to add. This is useful to add tags support to an underlying meter\n   *              implementation that does not support tags directly.\n   */\n  public static compose(meter: MetricMeter, tagsOrFunc: MetricTagsOrFunc, force: boolean = false): MetricMeter {\n    if (meter instanceof MetricMeterWithComposedTags) {\n      const contributors = appendToChain(meter.contributors, tagsOrFunc);\n      // If the new contributor results in no actual change to the chain, then we don't need a new meter\n      if (contributors === undefined && !force) return meter;\n      return new MetricMeterWithComposedTags(meter.parentMeter, contributors ?? []);\n    } else {\n      const contributors = appendToChain(undefined, tagsOrFunc);\n      if (contributors === undefined && !force) return meter;\n      return new MetricMeterWithComposedTags(meter, contributors ?? []);\n    }\n  }\n\n  private constructor(\n    private readonly parentMeter: MetricMeter,\n    private readonly contributors: MetricTagsOrFunc[]\n  ) {}\n\n  createCounter(name: string, unit?: string, description?: string): MetricCounter {\n    const parentCounter = this.parentMeter.createCounter(name, unit, description);\n    return new MetricCounterWithComposedTags(parentCounter, this.contributors);\n  }\n\n  createHistogram(\n    name: string,\n    valueType: NumericMetricValueType = 'int',\n    unit?: string,\n    description?: string\n  ): MetricHistogram {\n    const parentHistogram = this.parentMeter.createHistogram(name, valueType, unit, description);\n    return new MetricHistogramWithComposedTags(parentHistogram, this.contributors);\n  }\n\n  createGauge(\n    name: string,\n    valueType: NumericMetricValueType = 'int',\n    unit?: string,\n    description?: string\n  ): MetricGauge {\n    const parentGauge = this.parentMeter.createGauge(name, valueType, unit, description);\n    return new MetricGaugeWithComposedTags(parentGauge, this.contributors);\n  }\n\n  createUpDownCounter(name: string, unit?: string, description?: string): MetricUpDownCounter {\n    // FIXME: Remove this guard once up-down-counter support is complete on all MetricMeter\n    // implementations and `createUpDownCounter` is no longer optional on MetricMeter.\n    if (!this.parentMeter.createUpDownCounter) {\n      throw new Error('createUpDownCounter is not supported by the underlying meter');\n    }\n    const parentCounter = this.parentMeter.createUpDownCounter(name, unit, description);\n    return new MetricUpDownCounterWithComposedTags(parentCounter, this.contributors);\n  }\n\n  withTags(tags: MetricTags): MetricMeter {\n    return MetricMeterWithComposedTags.compose(this, tags);\n  }\n}\n\n/**\n * @experimental The Metric API is an experimental feature and may be subject to change.\n */\nclass MetricCounterWithComposedTags implements MetricCounter {\n  public readonly kind = 'counter';\n  public readonly valueType = 'int';\n\n  constructor(\n    private parentCounter: MetricCounter,\n    private contributors: MetricTagsOrFunc[]\n  ) {}\n\n  add(value: number, extraTags?: MetricTags | undefined): void {\n    this.parentCounter.add(value, resolveTags(this.contributors, extraTags));\n  }\n\n  withTags(extraTags: MetricTags): MetricCounter {\n    const contributors = appendToChain(this.contributors, extraTags);\n    if (contributors === undefined) return this;\n    return new MetricCounterWithComposedTags(this.parentCounter, contributors);\n  }\n\n  get name(): string {\n    return this.parentCounter.name;\n  }\n\n  get unit(): string | undefined {\n    return this.parentCounter.unit;\n  }\n\n  get description(): string | undefined {\n    return this.parentCounter.description;\n  }\n}\n\n/**\n * @experimental The Metric API is an experimental feature and may be subject to change.\n */\nclass MetricHistogramWithComposedTags implements MetricHistogram {\n  public readonly kind = 'histogram';\n\n  constructor(\n    private parentHistogram: MetricHistogram,\n    private contributors: MetricTagsOrFunc[]\n  ) {}\n\n  record(value: number, extraTags?: MetricTags): void {\n    this.parentHistogram.record(value, resolveTags(this.contributors, extraTags));\n  }\n\n  withTags(extraTags: MetricTags): MetricHistogram {\n    const contributors = appendToChain(this.contributors, extraTags);\n    if (contributors === undefined) return this;\n    return new MetricHistogramWithComposedTags(this.parentHistogram, contributors);\n  }\n\n  get name(): string {\n    return this.parentHistogram.name;\n  }\n\n  get valueType(): NumericMetricValueType {\n    return this.parentHistogram.valueType;\n  }\n\n  get unit(): string | undefined {\n    return this.parentHistogram.unit;\n  }\n\n  get description(): string | undefined {\n    return this.parentHistogram.description;\n  }\n}\n\n/**\n * @internal\n * @hidden\n */\nclass MetricGaugeWithComposedTags implements MetricGauge {\n  public readonly kind = 'gauge';\n\n  constructor(\n    private parentGauge: MetricGauge,\n    private contributors: MetricTagsOrFunc[]\n  ) {}\n\n  set(value: number, extraTags?: MetricTags): void {\n    this.parentGauge.set(value, resolveTags(this.contributors, extraTags));\n  }\n\n  withTags(extraTags: MetricTags): MetricGauge {\n    const contributors = appendToChain(this.contributors, extraTags);\n    if (contributors === undefined) return this;\n    return new MetricGaugeWithComposedTags(this.parentGauge, contributors);\n  }\n\n  get name(): string {\n    return this.parentGauge.name;\n  }\n\n  get valueType(): NumericMetricValueType {\n    return this.parentGauge.valueType;\n  }\n\n  get unit(): string | undefined {\n    return this.parentGauge.unit;\n  }\n\n  get description(): string | undefined {\n    return this.parentGauge.description;\n  }\n}\n\n/**\n * @internal\n * @hidden\n */\nclass MetricUpDownCounterWithComposedTags implements MetricUpDownCounter {\n  public readonly kind = 'up-down-counter';\n  public readonly valueType = 'int';\n\n  constructor(\n    private parentCounter: MetricUpDownCounter,\n    private contributors: MetricTagsOrFunc[]\n  ) {}\n\n  add(value: number, extraTags?: MetricTags | undefined): void {\n    this.parentCounter.add(value, resolveTags(this.contributors, extraTags));\n  }\n\n  withTags(extraTags: MetricTags): MetricUpDownCounter {\n    const contributors = appendToChain(this.contributors, extraTags);\n    if (contributors === undefined) return this;\n    return new MetricUpDownCounterWithComposedTags(this.parentCounter, contributors);\n  }\n\n  get name(): string {\n    return this.parentCounter.name;\n  }\n\n  get unit(): string | undefined {\n    return this.parentCounter.unit;\n  }\n\n  get description(): string | undefined {\n    return this.parentCounter.description;\n  }\n}\n\nfunction resolveTags(contributors: MetricTagsOrFunc[], extraTags?: MetricTags): MetricTags {\n  const resolved = {};\n  for (const contributor of contributors) {\n    Object.assign(resolved, typeof contributor === 'function' ? contributor() : contributor);\n  }\n  Object.assign(resolved, extraTags);\n  return filterNullAndUndefined(resolved);\n}\n\n/**\n * Append a tags contributor to the chain, merging it with the former last contributor if possible.\n *\n * If appending the new contributor results in no actual change to the chain of contributors, return\n * `existingContributors`; in that case, the caller should avoid creating a new object if possible.\n */\nfunction appendToChain(\n  existingContributors: MetricTagsOrFunc[] | undefined,\n  newContributor: MetricTagsOrFunc\n): MetricTagsOrFunc[] | undefined {\n  // If the new contributor is an empty object, then it results in no actual change to the chain\n  if (typeof newContributor === 'object' && Object.keys(newContributor).length === 0) {\n    return existingContributors;\n  }\n\n  // If existing chain is empty, then the new contributor is the chain\n  if (existingContributors == null || existingContributors.length === 0) {\n    return [newContributor];\n  }\n\n  // If both last contributor and new contributor are plain objects, merge them to a single object.\n  const last = existingContributors[existingContributors.length - 1];\n  if (typeof last === 'object' && typeof newContributor === 'object') {\n    const merged = mergeObjects(last, newContributor);\n    if (merged === last) return existingContributors;\n    return [...existingContributors.slice(0, -1), merged!];\n  }\n\n  // Otherwise, just append the new contributor to the chain.\n  return [...existingContributors, newContributor];\n}\n","import type { temporal } from '@temporalio/proto';\nimport { ValueError } from './errors';\nimport type { Duration } from './time';\nimport { msOptionalToNumber, msOptionalToTs, msToNumber, msToTs, optionalTsToMs } from './time';\n\n/**\n * Options for retrying Workflows and Activities\n */\nexport interface RetryPolicy {\n  /**\n   * Coefficient used to calculate the next retry interval.\n   * The next retry interval is previous interval multiplied by this coefficient.\n   * @minimum 1\n   * @default 2\n   */\n  backoffCoefficient?: number;\n  /**\n   * Interval of the first retry.\n   * If coefficient is 1 then it is used for all retries\n   * @format number of milliseconds or {@link https://www.npmjs.com/package/ms | ms-formatted string}\n   * @default 1 second\n   */\n  initialInterval?: Duration;\n  /**\n   * Maximum number of attempts. When exceeded, retries stop (even if {@link ActivityOptions.scheduleToCloseTimeout}\n   * hasn't been reached).\n   *\n   * @default Infinity\n   */\n  maximumAttempts?: number;\n  /**\n   * Maximum interval between retries.\n   * Exponential backoff leads to interval increase.\n   * This value is the cap of the increase.\n   *\n   * @default 100x of {@link initialInterval}\n   * @format number of milliseconds or {@link https://www.npmjs.com/package/ms | ms-formatted string}\n   */\n  maximumInterval?: Duration;\n\n  /**\n   * List of application failures types to not retry.\n   */\n  nonRetryableErrorTypes?: string[];\n}\n\n/**\n * Turn a TS RetryPolicy into a proto compatible RetryPolicy\n */\nexport function compileRetryPolicy(retryPolicy: RetryPolicy): temporal.api.common.v1.IRetryPolicy {\n  if (retryPolicy.backoffCoefficient != null && retryPolicy.backoffCoefficient <= 0) {\n    throw new ValueError('RetryPolicy.backoffCoefficient must be greater than 0');\n  }\n  if (retryPolicy.maximumAttempts != null) {\n    if (retryPolicy.maximumAttempts === Number.POSITIVE_INFINITY) {\n      // drop field (Infinity is the default)\n      const { maximumAttempts: _, ...without } = retryPolicy;\n      retryPolicy = without;\n    } else if (retryPolicy.maximumAttempts <= 0) {\n      throw new ValueError('RetryPolicy.maximumAttempts must be a positive integer');\n    } else if (!Number.isInteger(retryPolicy.maximumAttempts)) {\n      throw new ValueError('RetryPolicy.maximumAttempts must be an integer');\n    }\n  }\n  const maximumInterval = msOptionalToNumber(retryPolicy.maximumInterval);\n  const initialInterval = msToNumber(retryPolicy.initialInterval ?? 1000);\n  if (maximumInterval === 0) {\n    throw new ValueError('RetryPolicy.maximumInterval cannot be 0');\n  }\n  if (initialInterval === 0) {\n    throw new ValueError('RetryPolicy.initialInterval cannot be 0');\n  }\n  if (maximumInterval != null && maximumInterval < initialInterval) {\n    throw new ValueError('RetryPolicy.maximumInterval cannot be less than its initialInterval');\n  }\n  return {\n    maximumAttempts: retryPolicy.maximumAttempts,\n    initialInterval: msToTs(initialInterval),\n    maximumInterval: msOptionalToTs(maximumInterval),\n    backoffCoefficient: retryPolicy.backoffCoefficient,\n    nonRetryableErrorTypes: retryPolicy.nonRetryableErrorTypes,\n  };\n}\n\n/**\n * Turn a proto compatible RetryPolicy into a TS RetryPolicy\n */\nexport function decompileRetryPolicy(\n  retryPolicy?: temporal.api.common.v1.IRetryPolicy | null\n): RetryPolicy | undefined {\n  if (!retryPolicy) {\n    return undefined;\n  }\n\n  return {\n    backoffCoefficient: retryPolicy.backoffCoefficient ?? undefined,\n    maximumAttempts: retryPolicy.maximumAttempts ?? undefined,\n    maximumInterval: optionalTsToMs(retryPolicy.maximumInterval),\n    initialInterval: optionalTsToMs(retryPolicy.initialInterval),\n    nonRetryableErrorTypes: retryPolicy.nonRetryableErrorTypes ?? undefined,\n  };\n}\n","import type { coresdk, temporal } from '@temporalio/proto';\nimport { makeProtoEnumConverters } from './internal-workflow';\n\n/**\n * Represents the version of a specific worker deployment.\n */\nexport interface WorkerDeploymentVersion {\n  readonly buildId: string;\n  readonly deploymentName: string;\n}\n\n/**\n * @returns The canonical representation of a deployment version, which is a string in the format\n * `deploymentName.buildId`.\n */\nexport function toCanonicalString(version: WorkerDeploymentVersion): string {\n  return `${version.deploymentName}.${version.buildId}`;\n}\n\n/**\n * Specifies when a workflow might move from a worker of one Build Id to another.\n *\n * * 'PINNED' - The workflow will be pinned to the current Build ID unless manually moved.\n * * 'AUTO_UPGRADE' - The workflow will automatically move to the latest version (default Build ID\n *    of the task queue) when the next task is dispatched.\n */\nexport const VersioningBehavior = {\n  PINNED: 'PINNED',\n  AUTO_UPGRADE: 'AUTO_UPGRADE',\n} as const;\nexport type VersioningBehavior = (typeof VersioningBehavior)[keyof typeof VersioningBehavior];\n\nexport const [encodeVersioningBehavior, decodeVersioningBehavior] = makeProtoEnumConverters<\n  temporal.api.enums.v1.VersioningBehavior,\n  typeof temporal.api.enums.v1.VersioningBehavior,\n  keyof typeof temporal.api.enums.v1.VersioningBehavior,\n  typeof VersioningBehavior,\n  'VERSIONING_BEHAVIOR_'\n>(\n  {\n    [VersioningBehavior.PINNED]: 1,\n    [VersioningBehavior.AUTO_UPGRADE]: 2,\n    UNSPECIFIED: 0,\n  } as const,\n  'VERSIONING_BEHAVIOR_'\n);\n\n/**\n * Represents versioning overrides. For example, when starting workflows.\n */\nexport type VersioningOverride = PinnedVersioningOverride | 'AUTO_UPGRADE';\n\n/**\n * Workflow will be pinned to a specific deployment version.\n */\nexport interface PinnedVersioningOverride {\n  /**\n   * The worker deployment version to pin the workflow to.\n   */\n  pinnedTo: WorkerDeploymentVersion;\n}\n\n/**\n * The workflow will auto-upgrade to the current deployment version on the next workflow task.\n */\nexport type AutoUpgradeVersioningOverride = 'AUTO_UPGRADE';\n\n/**\n * Defines the versioning behavior to be used by the first task of a new workflow run in a continue-as-new chain.\n *\n * AUTO_UPGRADE - Start the new run with AutoUpgrade behavior. Use the Target Version of the workflow's task queue at\n *   start-time, as AutoUpgrade workflows do. After the first workflow task completes, use whatever\n *   Versioning Behavior the workflow is annotated with in the workflow code.\n *\n *   Note that if the previous workflow had a Pinned override, that override will be inherited by the\n *   new workflow run regardless of the ContinueAsNewVersioningBehavior specified in the continue-as-new\n *   command. If a Pinned override is inherited by the new run, and the new run starts with AutoUpgrade\n *   behavior, the base version of the new run will be the Target Version as described above, but the\n *   effective version will be whatever is specified by the Versioning Override until the override is removed.\n *\n * USE_RAMPING_VERSION - Use the Ramping Version of the workflow's task queue at start time, regardless of the workflow's\n *   Target Version (according to f(workflow_id, ramp_percentage)). After the first workflow task completes,\n *   the workflow will use whatever Versioning Behavior it is annotated with. If there is no Ramping\n *   Version by the time that the first workflow task is dispatched, it will be sent to the Current Version.\n *\n *   It is highly discouraged to use this if the workflow is annotated with AutoUpgrade behavior, because\n *   this setting ONLY applies to the first task of the workflow. If, after the first task, the workflow\n *   is AutoUpgrade, it will behave like a normal AutoUpgrade workflow and go to the Target Version, which\n *   may be the Current Version instead of the Ramping Version.\n *\n *   Note that if the workflow being continued has a Pinned override, that override will be inherited by the\n *   new workflow run regardless of the ContinueAsNewVersioningBehavior specified in the continue-as-new\n *   command. Versioning Override always takes precedence until it's removed manually via UpdateWorkflowExecutionOptions.\n *\n * @experimental Versioning semantics with continue-as-new are experimental and may change in the future.\n */\nexport const InitialVersioningBehavior = {\n  AUTO_UPGRADE: 'AUTO_UPGRADE',\n  USE_RAMPING_VERSION: 'USE_RAMPING_VERSION',\n} as const;\nexport type InitialVersioningBehavior = (typeof InitialVersioningBehavior)[keyof typeof InitialVersioningBehavior];\n\nexport const [encodeInitialVersioningBehavior, decodeInitialVersioningBehavior] = makeProtoEnumConverters<\n  temporal.api.enums.v1.ContinueAsNewVersioningBehavior,\n  typeof temporal.api.enums.v1.ContinueAsNewVersioningBehavior,\n  keyof typeof temporal.api.enums.v1.ContinueAsNewVersioningBehavior,\n  typeof InitialVersioningBehavior,\n  'CONTINUE_AS_NEW_VERSIONING_BEHAVIOR_'\n>(\n  {\n    [InitialVersioningBehavior.AUTO_UPGRADE]: 1,\n    [InitialVersioningBehavior.USE_RAMPING_VERSION]: 2,\n    UNSPECIFIED: 0,\n  } as const,\n  'CONTINUE_AS_NEW_VERSIONING_BEHAVIOR_'\n);\n\n/**\n * @internal\n */\nexport function convertDeploymentVersion(\n  v: coresdk.common.IWorkerDeploymentVersion | null | undefined\n): WorkerDeploymentVersion | undefined {\n  if (!v || !v.buildId) {\n    return undefined;\n  }\n\n  return {\n    buildId: v.buildId,\n    deploymentName: v.deploymentName ?? '',\n  };\n}\n","import type { PayloadTypeInfo } from './type-info';\nimport type { VersioningBehavior } from './worker-deployments';\n\n/**\n * Options that can be attached to a Workflow function at definition time.\n *\n * @experimental\n */\nexport interface WorkflowDefinitionConfig {\n  /** Options that may be evaluated for each Workflow Execution. */\n  workflowDefinitionOptions?: WorkflowDefinitionOptionsOrGetter;\n  /** Static metadata that must be available before Workflow input decoding. */\n  staticOptions?: WorkflowStaticOptions;\n}\n\n/**\n * Options that can be used when defining a workflow via {@link setWorkflowOptions}.\n */\nexport interface WorkflowDefinitionOptions {\n  versioningBehavior?: VersioningBehavior;\n\n  /**\n   * The types of errors that, if thrown by the Workflow function, a signal handler, or an update\n   * handler, will cause the Workflow Execution or the Update to fail instead of failing the\n   * Workflow Task (which would result in retrying the Workflow Task until it eventually succeeds).\n   *\n   * This is a per-Workflow-type equivalent of {@link WorkerOptions.workflowFailureErrorTypes}.\n   * Both settings are evaluated; an error matching either will cause Workflow failure.\n   * Unlike the string-based {@link WorkerOptions.workflowFailureErrorTypes}, this accepts\n   * actual class references, enabling subclass matching via `instanceof`, but doesn't allow\n   * failing the workflow execution on _non-determinism errors_. Failing the workflow execution on\n   * non-determinism errors can only be set via {@link WorkerOptions.workflowFailureErrorTypes}.\n   *\n   * Passing the `Error` class to this setting will fail the Workflow on any error, except\n   * non-determinism errors.\n   *\n   * Note that {@link TemporalFailure} subclasses and cancellation errors that bubbles out\n   * of the Workflow always fail the Workflow Execution, regardless of either this and the\n   * {@link WorkerOptions.workflowFailureErrorTypes} settings.\n   *\n   * @experimental\n   */\n  failureExceptionTypes?: Array<new (...args: any[]) => Error>;\n}\n\nexport interface WorkflowStaticOptions {\n  /**\n   * Type information used to encode and decode Workflow input and output.\n   *\n   * @experimental\n   */\n  typeInfo?: PayloadTypeInfo;\n}\n\ntype AsyncFunction<Args extends any[], ReturnType> = (...args: Args) => Promise<ReturnType>;\nexport type WorkflowDefinitionOptionsOrGetter = WorkflowDefinitionOptions | (() => WorkflowDefinitionOptions);\n\n/**\n * @internal\n * @hidden\n * A workflow function that has been defined with options from {@link WorkflowDefinitionOptions}.\n */\nexport interface WorkflowFunctionWithOptions<Args extends any[], ReturnType> extends AsyncFunction<Args, ReturnType> {\n  workflowDefinitionOptions: WorkflowDefinitionOptionsOrGetter;\n}\n\n/** @internal */\nexport interface WorkflowFunctionWithStaticOptions<Args extends any[], ReturnType>\n  extends AsyncFunction<Args, ReturnType> {\n  staticOptions: WorkflowStaticOptions;\n}\n\nconst workflowDefinitionOptionsProperty = 'workflowDefinitionOptions' satisfies keyof WorkflowFunctionWithOptions<\n  any[],\n  any\n>;\nconst workflowStaticOptionsProperty = 'staticOptions' satisfies keyof WorkflowFunctionWithStaticOptions<any[], any>;\n\n/** @internal */\nexport function isWorkflowFunctionWithOptions(obj: unknown): obj is WorkflowFunctionWithOptions<any[], any> {\n  return typeof obj === 'function' && Object.hasOwn(obj, workflowDefinitionOptionsProperty);\n}\n\n/** @internal */\nexport function isWorkflowFunctionWithStaticOptions(\n  obj: unknown\n): obj is WorkflowFunctionWithStaticOptions<any[], any> {\n  if (typeof obj !== 'function' || !Object.hasOwn(obj, workflowStaticOptionsProperty)) {\n    return false;\n  }\n  const { staticOptions } = obj as { staticOptions?: unknown };\n  return typeof staticOptions === 'object' && staticOptions !== null;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=workflow-handle.js.map","import type { temporal } from '@temporalio/proto';\nimport type { Workflow } from './interfaces';\nimport type { RetryPolicy } from './retry-policy';\nimport type { Duration } from './time';\nimport { makeProtoEnumConverters } from './internal-workflow';\nimport type { SearchAttributePair, SearchAttributes, TypedSearchAttributes } from './search-attributes';\nimport type { Priority } from './priority';\nimport { isWorkflowFunctionWithStaticOptions } from './workflow-definition-options';\nimport type { PayloadTypeInfo } from './type-info';\n/**\n * Defines what happens when trying to start a Workflow with the same ID as a *Closed* Workflow.\n *\n * See {@link WorkflowOptions.workflowIdConflictPolicy} for what happens when trying to start a\n * Workflow with the same ID as a *Running* Workflow.\n *\n * Concept: {@link https://docs.temporal.io/workflow-execution/workflowid-runid#workflow-id-reuse-policy | Workflow Id Reuse Policy}\n *\n * *Note: It is not possible to have two actively running Workflows with the same ID.*\n *\n */\nexport const WorkflowIdReusePolicy = {\n  /**\n   * The Workflow can be started if the previous Workflow is in a Closed state.\n   * @default\n   */\n  ALLOW_DUPLICATE: 'ALLOW_DUPLICATE',\n\n  /**\n   * The Workflow can be started if the previous Workflow is in a Closed state that is not Completed.\n   */\n  ALLOW_DUPLICATE_FAILED_ONLY: 'ALLOW_DUPLICATE_FAILED_ONLY',\n\n  /**\n   * The Workflow cannot be started.\n   */\n  REJECT_DUPLICATE: 'REJECT_DUPLICATE',\n\n  /**\n   * Terminate the current Workflow if one is already running; otherwise allow reusing the Workflow ID.\n   *\n   * @deprecated Use {@link WORKFLOW_ID_REUSE_POLICY_ALLOW_DUPLICATE} instead, and\n   *             set `WorkflowOptions.workflowIdConflictPolicy` to\n   *             {@link WorkflowIdConflictPolicy.WORKFLOW_ID_CONFLICT_POLICY_TERMINATE_EXISTING}.\n   *             When using this option, `WorkflowOptions.workflowIdConflictPolicy` must be left unspecified.\n   */\n  TERMINATE_IF_RUNNING: 'TERMINATE_IF_RUNNING',\n\n  /// Anything below this line has been deprecated\n\n  /**\n   * No need to use this. If a `WorkflowIdReusePolicy` is set to this, or is not set at all, the default value will be used.\n   *\n   * @deprecated Either leave property `undefined`, or use {@link ALLOW_DUPLICATE} instead.\n   */\n  WORKFLOW_ID_REUSE_POLICY_UNSPECIFIED: undefined,\n\n  /** @deprecated Use {@link ALLOW_DUPLICATE} instead. */\n  WORKFLOW_ID_REUSE_POLICY_ALLOW_DUPLICATE: 'ALLOW_DUPLICATE',\n\n  /** @deprecated Use {@link ALLOW_DUPLICATE_FAILED_ONLY} instead. */\n  WORKFLOW_ID_REUSE_POLICY_ALLOW_DUPLICATE_FAILED_ONLY: 'ALLOW_DUPLICATE_FAILED_ONLY',\n\n  /** @deprecated Use {@link REJECT_DUPLICATE} instead. */\n  WORKFLOW_ID_REUSE_POLICY_REJECT_DUPLICATE: 'REJECT_DUPLICATE',\n\n  /** @deprecated Use {@link TERMINATE_IF_RUNNING} instead. */\n  WORKFLOW_ID_REUSE_POLICY_TERMINATE_IF_RUNNING: 'TERMINATE_IF_RUNNING',\n} as const;\nexport type WorkflowIdReusePolicy = (typeof WorkflowIdReusePolicy)[keyof typeof WorkflowIdReusePolicy];\n\nexport const [encodeWorkflowIdReusePolicy, decodeWorkflowIdReusePolicy] = makeProtoEnumConverters<\n  temporal.api.enums.v1.WorkflowIdReusePolicy,\n  typeof temporal.api.enums.v1.WorkflowIdReusePolicy,\n  keyof typeof temporal.api.enums.v1.WorkflowIdReusePolicy,\n  typeof WorkflowIdReusePolicy,\n  'WORKFLOW_ID_REUSE_POLICY_'\n>(\n  {\n    [WorkflowIdReusePolicy.ALLOW_DUPLICATE]: 1,\n    [WorkflowIdReusePolicy.ALLOW_DUPLICATE_FAILED_ONLY]: 2,\n    [WorkflowIdReusePolicy.REJECT_DUPLICATE]: 3,\n    [WorkflowIdReusePolicy.TERMINATE_IF_RUNNING]: 4, // eslint-disable-line @typescript-eslint/no-deprecated\n    UNSPECIFIED: 0,\n  } as const,\n  'WORKFLOW_ID_REUSE_POLICY_'\n);\n\n/**\n * Defines what happens when trying to start a Workflow with the same ID as a *Running* Workflow.\n *\n * See {@link WorkflowOptions.workflowIdReusePolicy} for what happens when trying to start a Workflow\n * with the same ID as a *Closed* Workflow.\n *\n * *Note: It is never possible to have two _actively running_ Workflows with the same ID.*\n */\nexport const WorkflowIdConflictPolicy = {\n  /**\n   * Do not start a new Workflow. Instead raise a `WorkflowExecutionAlreadyStartedError`.\n   */\n  FAIL: 'FAIL',\n\n  /**\n   * Do not start a new Workflow. Instead return a Workflow Handle for the already Running Workflow.\n   */\n  USE_EXISTING: 'USE_EXISTING',\n\n  /**\n   * Start a new Workflow, terminating the current workflow if one is already running.\n   */\n  TERMINATE_EXISTING: 'TERMINATE_EXISTING',\n} as const;\nexport type WorkflowIdConflictPolicy = (typeof WorkflowIdConflictPolicy)[keyof typeof WorkflowIdConflictPolicy];\n\nexport const [encodeWorkflowIdConflictPolicy, decodeWorkflowIdConflictPolicy] = makeProtoEnumConverters<\n  temporal.api.enums.v1.WorkflowIdConflictPolicy,\n  typeof temporal.api.enums.v1.WorkflowIdConflictPolicy,\n  keyof typeof temporal.api.enums.v1.WorkflowIdConflictPolicy,\n  typeof WorkflowIdConflictPolicy,\n  'WORKFLOW_ID_CONFLICT_POLICY_'\n>(\n  {\n    [WorkflowIdConflictPolicy.FAIL]: 1,\n    [WorkflowIdConflictPolicy.USE_EXISTING]: 2,\n    [WorkflowIdConflictPolicy.TERMINATE_EXISTING]: 3,\n    UNSPECIFIED: 0,\n  } as const,\n  'WORKFLOW_ID_CONFLICT_POLICY_'\n);\n\nexport interface BaseWorkflowOptions {\n  /**\n   * Defines what happens when trying to start a Workflow with the same ID as a *Closed* Workflow.\n   *\n   * *Note: It is not possible to have two actively running Workflows with the same ID.*\n   *\n   * @default WorkflowIdReusePolicy.WORKFLOW_ID_REUSE_POLICY_ALLOW_DUPLICATE\n   */\n  workflowIdReusePolicy?: WorkflowIdReusePolicy;\n\n  /**\n   * Defines what happens when trying to start a Workflow with the same ID as a *Running* Workflow.\n   *\n   * *Note: It is not possible to have two actively running Workflows with the same ID.*\n   *\n   * @default WorkflowIdConflictPolicy.WORKFLOW_ID_CONFLICT_POLICY_UNSPECIFIED\n   */\n  workflowIdConflictPolicy?: WorkflowIdConflictPolicy;\n\n  /**\n   * Controls how a Workflow Execution is retried.\n   *\n   * By default, Workflow Executions are not retried. Do not override this behavior unless you know what you're doing.\n   * {@link https://docs.temporal.io/encyclopedia/retry-policies | More information}.\n   */\n  retry?: RetryPolicy;\n\n  /**\n   * Optional cron schedule for Workflow. If a cron schedule is specified, the Workflow will run as a cron based on the\n   * schedule. The scheduling will be based on UTC time. The schedule for the next run only happens after the current\n   * run is completed/failed/timeout. If a RetryPolicy is also supplied, and the Workflow failed or timed out, the\n   * Workflow will be retried based on the retry policy. While the Workflow is retrying, it won't schedule its next run.\n   * If the next schedule is due while the Workflow is running (or retrying), then it will skip that schedule. Cron\n   * Workflow will not stop until it is terminated or cancelled (by returning temporal.CanceledError).\n   * https://crontab.guru/ is useful for testing your cron expressions.\n   */\n  cronSchedule?: string;\n\n  /**\n   * Specifies additional non-indexed information to attach to the Workflow Execution. The values can be anything that\n   * is serializable by {@link DataConverter}.\n   */\n  memo?: Record<string, unknown>;\n\n  /**\n   * Specifies additional indexed information to attach to the Workflow Execution. More info:\n   * https://docs.temporal.io/docs/typescript/search-attributes\n   *\n   * Values are always converted using {@link JsonPayloadConverter}, even when a custom data converter is provided.\n   *\n   * @deprecated Use {@link typedSearchAttributes} instead.\n   */\n  searchAttributes?: SearchAttributes;\n\n  /**\n   * Specifies additional indexed information to attach to the Workflow Execution. More info:\n   * https://docs.temporal.io/docs/typescript/search-attributes\n   *\n   * Values are always converted using {@link JsonPayloadConverter}, even when a custom data converter is provided.\n   * Note that search attributes are not encoded, as such, do not include any sensitive information.\n   *\n   * If both {@link searchAttributes} and {@link typedSearchAttributes} are provided, conflicting keys will be overwritten\n   * by {@link typedSearchAttributes}.\n   */\n  typedSearchAttributes?: SearchAttributePair[] | TypedSearchAttributes;\n\n  /**\n   * General fixed details for this workflow execution that may appear in UI/CLI.\n   * This can be in Temporal markdown format and can span multiple lines.\n   */\n  staticDetails?: string;\n  /**\n   * A single-line fixed summary for this workflow execution that may appear in the UI/CLI.\n   * This can be in single-line Temporal markdown format.\n   */\n  staticSummary?: string;\n\n  /**\n   * Priority of a workflow\n   */\n  priority?: Priority;\n}\n\nexport type WithWorkflowArgs<W extends Workflow, T> = T &\n  (Parameters<W> extends [any, ...any[]]\n    ? {\n        /**\n         * Arguments to pass to the Workflow\n         */\n        args: Parameters<W> | Readonly<Parameters<W>>;\n      }\n    : {\n        /**\n         * Arguments to pass to the Workflow\n         */\n        args?: Parameters<W> | Readonly<Parameters<W>>;\n      });\n\nexport interface WorkflowDurationOptions {\n  /**\n   * The time after which workflow run is automatically terminated by Temporal service. Do not\n   * rely on run timeout for business level timeouts. It is preferred to use in workflow timers\n   * for this purpose.\n   *\n   * @format number of milliseconds or {@link https://www.npmjs.com/package/ms | ms-formatted string}\n   */\n  workflowRunTimeout?: Duration;\n\n  /**\n   *\n   * The time after which workflow execution (which includes run retries and continue as new) is\n   * automatically terminated by Temporal service. Do not rely on execution timeout for business\n   * level timeouts. It is preferred to use in workflow timers for this purpose.\n   *\n   * @format number of milliseconds or {@link https://www.npmjs.com/package/ms | ms-formatted string}\n   */\n  workflowExecutionTimeout?: Duration;\n\n  /**\n   * Maximum execution time of a single workflow task. Default is 10 seconds.\n   *\n   * @format number of milliseconds or {@link https://www.npmjs.com/package/ms | ms-formatted string}\n   */\n  workflowTaskTimeout?: Duration;\n}\n\nexport type CommonWorkflowOptions = BaseWorkflowOptions & WorkflowDurationOptions;\n\nexport interface WorkflowTypeOptions {\n  type: string;\n  typeInfo?: PayloadTypeInfo;\n}\n\nexport function extractWorkflowTypeAndConfig<T extends Workflow>(\n  workflowTypeOrFunc: string | T,\n  callSiteTypeInfo?: PayloadTypeInfo\n): WorkflowTypeOptions {\n  if (typeof workflowTypeOrFunc === 'string') {\n    return { type: workflowTypeOrFunc, typeInfo: callSiteTypeInfo };\n  }\n  if (typeof workflowTypeOrFunc === 'function') {\n    if (!workflowTypeOrFunc.name) {\n      throw new TypeError('Invalid workflow type: the workflow function is anonymous');\n    }\n    if (callSiteTypeInfo !== undefined) {\n      throw new TypeError(\n        'Workflow type information cannot be supplied at the call site when using a workflow function. ' +\n          'Use defineWorkflowOptions(..., { staticOptions: { typeInfo } }) on the workflow function instead, ' +\n          'or pass the workflow type as a string.'\n      );\n    }\n    const definitionTypeInfo = isWorkflowFunctionWithStaticOptions(workflowTypeOrFunc)\n      ? workflowTypeOrFunc.staticOptions.typeInfo\n      : undefined;\n    return {\n      type: workflowTypeOrFunc.name,\n      typeInfo: definitionTypeInfo,\n    };\n  }\n  throw new TypeError(\n    `Invalid workflow type: expected either a string or a function, got '${typeof workflowTypeOrFunc}'`\n  );\n}\n\nexport function extractWorkflowType<T extends Workflow>(workflowTypeOrFunc: string | T): string {\n  return extractWorkflowTypeAndConfig(workflowTypeOrFunc).type;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=versioning-intent.js.map","import type { temporal } from '@temporalio/proto';\nimport { makeProtoEnumConverters } from './internal-workflow';\n\n/** @deprecated: Use {@link TypedSearchAttributes} instead */\nexport type SearchAttributeValueOrReadonly = SearchAttributeValue | Readonly<SearchAttributeValue> | undefined;\n/** @deprecated: Use {@link TypedSearchAttributes} instead */\nexport type SearchAttributes = Record<string, SearchAttributeValueOrReadonly>;\n/** @deprecated: Use {@link TypedSearchAttributes} instead */\nexport type SearchAttributeValue = string[] | number[] | boolean[] | Date[];\n\nexport const SearchAttributeType = {\n  TEXT: 'TEXT',\n  KEYWORD: 'KEYWORD',\n  INT: 'INT',\n  DOUBLE: 'DOUBLE',\n  BOOL: 'BOOL',\n  DATETIME: 'DATETIME',\n  KEYWORD_LIST: 'KEYWORD_LIST',\n} as const;\nexport type SearchAttributeType = (typeof SearchAttributeType)[keyof typeof SearchAttributeType];\n\n// Note: encodeSearchAttributeIndexedValueType exported for use in tests to register search attributes\n// ts-prune-ignore-next\nexport const [encodeSearchAttributeIndexedValueType, _] = makeProtoEnumConverters<\n  temporal.api.enums.v1.IndexedValueType,\n  typeof temporal.api.enums.v1.IndexedValueType,\n  keyof typeof temporal.api.enums.v1.IndexedValueType,\n  typeof SearchAttributeType,\n  'INDEXED_VALUE_TYPE_'\n>(\n  {\n    [SearchAttributeType.TEXT]: 1,\n    [SearchAttributeType.KEYWORD]: 2,\n    [SearchAttributeType.INT]: 3,\n    [SearchAttributeType.DOUBLE]: 4,\n    [SearchAttributeType.BOOL]: 5,\n    [SearchAttributeType.DATETIME]: 6,\n    [SearchAttributeType.KEYWORD_LIST]: 7,\n    UNSPECIFIED: 0,\n  } as const,\n  'INDEXED_VALUE_TYPE_'\n);\n\ninterface IndexedValueTypeMapping {\n  TEXT: string;\n  KEYWORD: string;\n  INT: number;\n  DOUBLE: number;\n  BOOL: boolean;\n  DATETIME: Date;\n  KEYWORD_LIST: string[];\n}\n\nexport function isValidValueForType<T extends SearchAttributeType>(\n  type: T,\n  value: unknown\n): value is IndexedValueTypeMapping[T] {\n  switch (type) {\n    case SearchAttributeType.TEXT:\n    case SearchAttributeType.KEYWORD:\n      return typeof value === 'string';\n    case SearchAttributeType.INT:\n      return Number.isInteger(value);\n    case SearchAttributeType.DOUBLE:\n      return typeof value === 'number';\n    case SearchAttributeType.BOOL:\n      return typeof value === 'boolean';\n    case SearchAttributeType.DATETIME:\n      return value instanceof Date;\n    case SearchAttributeType.KEYWORD_LIST:\n      return Array.isArray(value) && value.every((item) => typeof item === 'string');\n    default:\n      return false;\n  }\n}\n\nexport interface SearchAttributeKey<T extends SearchAttributeType> {\n  name: string;\n  type: T;\n}\n\nexport function defineSearchAttributeKey<T extends SearchAttributeType>(name: string, type: T): SearchAttributeKey<T> {\n  return { name, type };\n}\n\nclass BaseSearchAttributeValue<T extends SearchAttributeType, V = IndexedValueTypeMapping[T]> {\n  private readonly _type: T;\n  private readonly _value: V;\n\n  constructor(type: T, value: V) {\n    this._type = type;\n    this._value = value;\n  }\n\n  get type(): T {\n    return this._type;\n  }\n\n  get value(): V {\n    return this._value;\n  }\n}\n\n// Internal type for class private data.\n// Exported for use in payload conversion.\nexport class TypedSearchAttributeValue<T extends SearchAttributeType> extends BaseSearchAttributeValue<T> {}\n// ts-prune-ignore-next\nexport class TypedSearchAttributeUpdateValue<T extends SearchAttributeType> extends BaseSearchAttributeValue<\n  T,\n  IndexedValueTypeMapping[T] | null\n> {}\n\nexport type SearchAttributePair = {\n  [T in SearchAttributeType]: { key: SearchAttributeKey<T>; value: IndexedValueTypeMapping[T] };\n}[SearchAttributeType];\n\nexport type SearchAttributeUpdatePair = {\n  [T in SearchAttributeType]: { key: SearchAttributeKey<T>; value: IndexedValueTypeMapping[T] | null };\n}[SearchAttributeType];\n\nexport class TypedSearchAttributes {\n  private searchAttributes: Record<string, TypedSearchAttributeValue<SearchAttributeType>> = {};\n\n  constructor(initialAttributes?: SearchAttributePair[]) {\n    if (initialAttributes === undefined) return;\n    for (const pair of initialAttributes) {\n      if (pair.key.name in this.searchAttributes) {\n        throw new Error(`Duplicate search attribute key: ${pair.key.name}`);\n      }\n      this.searchAttributes[pair.key.name] = new TypedSearchAttributeValue(pair.key.type, pair.value);\n    }\n  }\n\n  get<T extends SearchAttributeType>(key: SearchAttributeKey<T>): IndexedValueTypeMapping[T] | undefined {\n    const attr = this.searchAttributes[key.name];\n    // Key not found or type mismatch.\n    if (attr === undefined || !isValidValueForType(key.type, attr.value)) {\n      return undefined;\n    }\n    return attr.value;\n  }\n\n  /** Returns a deep copy of the given TypedSearchAttributes instance */\n  copy(): TypedSearchAttributes {\n    const state: Record<string, TypedSearchAttributeValue<SearchAttributeType>> = {};\n\n    for (const [key, attr] of Object.entries(this.searchAttributes)) {\n      // Create a new instance with the same properties\n      let value = attr.value;\n      // For non-primitive types, create a deep copy\n      if (attr.value instanceof Date) {\n        value = new Date(attr.value);\n      } else if (Array.isArray(attr.value)) {\n        value = [...attr.value];\n      }\n      state[key] = new TypedSearchAttributeValue(attr.type, value);\n    }\n\n    // Create return value with manually assigned state.\n    const res = new TypedSearchAttributes();\n    res.searchAttributes = state;\n    return res;\n  }\n\n  /**\n   * @hidden\n   * Return JSON representation of this class as SearchAttributePair[]\n   * Default toJSON method is not used because it's JSON representation includes private state.\n   */\n  toJSON(): SearchAttributePair[] {\n    return this.getAll();\n  }\n\n  /** Returns a copy of the current TypedSearchAttributes instance with the updated attributes. */\n  updateCopy(updates: SearchAttributeUpdatePair[]): TypedSearchAttributes {\n    // Create a deep copy of the current instance.\n    const res = this.copy();\n    // Apply updates.\n    res.update(updates);\n    return res;\n  }\n\n  // Performs direct mutation on the current instance.\n  private update(updates: SearchAttributeUpdatePair[]) {\n    // Apply updates.\n    for (const pair of updates) {\n      // Delete attribute.\n      if (pair.value === null) {\n        // Delete only if the update matches a key and type.\n        const attrVal = this.searchAttributes[pair.key.name];\n        if (attrVal && attrVal.type === pair.key.type) {\n          delete this.searchAttributes[pair.key.name];\n        }\n        continue;\n      }\n      // Add or update attribute.\n      this.searchAttributes[pair.key.name] = new TypedSearchAttributeValue(pair.key.type, pair.value);\n    }\n  }\n\n  getAll(): SearchAttributePair[] {\n    const res: SearchAttributePair[] = [];\n    for (const [key, attr] of Object.entries(this.searchAttributes)) {\n      const attrKey = { name: key, type: attr.type };\n      // Sanity check, should always be legal.\n      if (isValidValueForType(attrKey.type, attr.value)) {\n        res.push({ key: attrKey, value: attr.value } as SearchAttributePair);\n      }\n    }\n    return res;\n  }\n\n  static getKeyFromUntyped(\n    key: string,\n    value: SearchAttributeValueOrReadonly\n  ): SearchAttributeKey<SearchAttributeType> | undefined {\n    if (value == null) {\n      return;\n    }\n\n    // Unpack single-element arrays.\n    const val = value.length === 1 ? value[0] : value;\n    switch (typeof val) {\n      case 'string':\n        // Check if val is an ISO string, if so, return a DATETIME key.\n        if (!isNaN(Date.parse(val)) && Date.parse(val) === new Date(val).getTime()) {\n          return { name: key, type: SearchAttributeType.DATETIME };\n        }\n        return { name: key, type: SearchAttributeType.TEXT };\n      case 'number':\n        return {\n          name: key,\n          type: Number.isInteger(val) ? SearchAttributeType.INT : SearchAttributeType.DOUBLE,\n        };\n      case 'boolean':\n        return { name: key, type: SearchAttributeType.BOOL };\n      case 'object':\n        if (val instanceof Date) {\n          return { name: key, type: SearchAttributeType.DATETIME };\n        }\n        if (Array.isArray(val) && val.every((item) => typeof item === 'string')) {\n          return { name: key, type: SearchAttributeType.KEYWORD_LIST };\n        }\n        return;\n      default:\n        return;\n    }\n  }\n\n  static toMetadataType(type: SearchAttributeType): string {\n    switch (type) {\n      case SearchAttributeType.TEXT:\n        return 'Text';\n      case SearchAttributeType.KEYWORD:\n        return 'Keyword';\n      case SearchAttributeType.INT:\n        return 'Int';\n      case SearchAttributeType.DOUBLE:\n        return 'Double';\n      case SearchAttributeType.BOOL:\n        return 'Bool';\n      case SearchAttributeType.DATETIME:\n        return 'Datetime';\n      case SearchAttributeType.KEYWORD_LIST:\n        return 'KeywordList';\n      default:\n        throw new Error(`Unknown search attribute type: ${type}`);\n    }\n  }\n\n  static toSearchAttributeType(type: string): SearchAttributeType | undefined {\n    // The type metadata is usually in PascalCase (e.g. \"KeywordList\") but in\n    // rare cases may be in SCREAMING_SNAKE_CASE (e.g. \"INDEXED_VALUE_TYPE_KEYWORD_LIST\").\n    switch (type) {\n      case 'Text':\n      case 'INDEXED_VALUE_TYPE_TEXT':\n        return SearchAttributeType.TEXT;\n      case 'Keyword':\n      case 'INDEXED_VALUE_TYPE_KEYWORD':\n        return SearchAttributeType.KEYWORD;\n      case 'Int':\n      case 'INDEXED_VALUE_TYPE_INT':\n        return SearchAttributeType.INT;\n      case 'Double':\n      case 'INDEXED_VALUE_TYPE_DOUBLE':\n        return SearchAttributeType.DOUBLE;\n      case 'Bool':\n      case 'INDEXED_VALUE_TYPE_BOOL':\n        return SearchAttributeType.BOOL;\n      case 'Datetime':\n      case 'INDEXED_VALUE_TYPE_DATETIME':\n        return SearchAttributeType.DATETIME;\n      case 'KeywordList':\n      case 'INDEXED_VALUE_TYPE_KEYWORD_LIST':\n        return SearchAttributeType.KEYWORD_LIST;\n      default:\n        return;\n    }\n  }\n}\n","import type { coresdk } from '@temporalio/proto';\nimport type { RetryPolicy } from './retry-policy';\nimport type { Duration } from './time';\nimport type { VersioningIntent } from './versioning-intent';\nimport { makeProtoEnumConverters } from './internal-workflow';\nimport type { Priority } from './priority';\n\n// Note: The types defined in this file are here for legacy reasons. They should have been defined\n// in the 'workflow' package, instead of 'common'. They are now reexported from the 'workflow'\n// package, which is the preferred way to import them, but we unfortunately can't remove them from\n// here as that would be a breaking change.\n\n/**\n * Determines:\n * - whether cancellation requests should be propagated from the current Workflow to the Activity; and\n * - when should the Activity cancellation be reported to Workflow (i.e. at which moment should the\n *   Activity call's promise fail with an `ActivityFailure`, with `cause` set to a `CancelledFailure`).\n *\n * Note that this setting only applies to cancellation originating from cancellation being\n * externally requested on the Workflow itself, or from internal cancellation of the\n * `CancellationScope` in which the Activity call was made. Termination of a Workflow Execution\n * always results in cancellation of its outstanding Activity executions, regardless of those\n * Activities' {@link ActivityCancellationType} settings.\n *\n * @default ActivityCancellationType.WAIT_CANCELLATION_COMPLETED\n */\n// MAINTENANCE: Keep this typedoc in sync with the `ActivityOptions.cancellationType` and\n//              `LocalActivityOptions.cancellationType` fields later in this file.\nexport const ActivityCancellationType = {\n  /**\n   * Do not propagate cancellation requests to the Activity, and immediately report cancellation\n   * to the caller.\n   */\n  ABANDON: 'ABANDON',\n\n  /**\n   * Propagate cancellation request from the Workflow to the Activity, yet _immediately_ report\n   * cancellation to the caller, i.e. without waiting for the server to confirm the cancellation\n   * request.\n   *\n   * Note that this cancellation type provides no guarantee, from the Workflow-side, that the\n   * cancellation request will actually be delivered to the Activity; e.g. the calling Workflow\n   * may exit before the delivery is completed, or the Activity may complete (either successfully\n   * or uncessfully) before the cancellation is delivered, resulting in a situation where the\n   * workflow thinks the activity was cancelled, but the activity actually completed successfully.\n   *\n   * To ensure that the Workflow is properly informed of the Activity's final state (i.e. either\n   * completion or cancellation), use {@link WAIT_CANCELLATION_COMPLETED}.\n   */\n  TRY_CANCEL: 'TRY_CANCEL',\n\n  /**\n   * Propagate cancellation request from the Workflow to the Activity, and wait for the activity\n   * to complete its execution (either successfully, uncessfully, or as cancelled).\n   *\n   * Note that the Activity must heartbeat to receive a cancellation notification. This can block\n   * the Workflow's cancellation for a long time if the Activity doesn't heartbeat or chooses to\n   * ignore the cancellation request.\n   */\n  WAIT_CANCELLATION_COMPLETED: 'WAIT_CANCELLATION_COMPLETED',\n} as const;\nexport type ActivityCancellationType = (typeof ActivityCancellationType)[keyof typeof ActivityCancellationType];\n\nexport const [encodeActivityCancellationType, decodeActivityCancellationType] = makeProtoEnumConverters<\n  coresdk.workflow_commands.ActivityCancellationType,\n  typeof coresdk.workflow_commands.ActivityCancellationType,\n  keyof typeof coresdk.workflow_commands.ActivityCancellationType,\n  typeof ActivityCancellationType,\n  ''\n>(\n  {\n    [ActivityCancellationType.TRY_CANCEL]: 0,\n    [ActivityCancellationType.WAIT_CANCELLATION_COMPLETED]: 1,\n    [ActivityCancellationType.ABANDON]: 2,\n  } as const,\n  ''\n);\n\n/**\n * Options for non-local activity invocation inside a workflow\n */\nexport interface ActivityOptions {\n  /**\n   * Identifier to use for tracking the activity in Workflow history.\n   * The `activityId` can be accessed by the activity function.\n   * Does not need to be unique.\n   *\n   * @default an incremental sequence number\n   */\n  activityId?: string;\n\n  /**\n   * Task queue name.\n   *\n   * @default current worker task queue\n   */\n  taskQueue?: string;\n\n  /**\n   * Heartbeat interval. Activity must heartbeat before this interval passes after a last heartbeat or activity start.\n   * @format number of milliseconds or {@link https://www.npmjs.com/package/ms | ms-formatted string}\n   */\n  heartbeatTimeout?: Duration;\n\n  /**\n   * RetryPolicy that define how activity is retried in case of failure. If this is not set, then the server-defined default activity retry policy will be used. To ensure zero retries, set maximum attempts to 1.\n   */\n  retry?: RetryPolicy;\n\n  /**\n   * Maximum time of a single Activity execution attempt. Note that the Temporal Server doesn't detect Worker process\n   * failures directly: instead, it relies on this timeout to detect that an Activity didn't complete on time. Therefore, this\n   * timeout should be as short as the longest possible execution of the Activity body. Potentially long-running\n   * Activities must specify {@link heartbeatTimeout} and call {@link activity.Context.heartbeat} periodically for\n   * timely failure detection.\n   *\n   * Either this option or {@link scheduleToCloseTimeout} is required.\n   *\n   * @default `scheduleToCloseTimeout` or unlimited\n   * @format number of milliseconds or {@link https://www.npmjs.com/package/ms | ms-formatted string}\n   */\n  startToCloseTimeout?: Duration;\n\n  /**\n   * Time that the Activity Task can stay in the Task Queue before it is picked up by a Worker. Do not specify this timeout unless using host-specific Task Queues for Activity Tasks are being used for routing.\n   * `scheduleToStartTimeout` is always non-retryable. Retrying after this timeout doesn't make sense as it would just put the Activity Task back into the same Task Queue.\n   *\n   * @default `scheduleToCloseTimeout` or unlimited\n   * @format number of milliseconds or {@link https://www.npmjs.com/package/ms | ms-formatted string}\n   */\n  scheduleToStartTimeout?: Duration;\n\n  /**\n   * Total time that a workflow is willing to wait for the Activity to complete.\n   * `scheduleToCloseTimeout` limits the total time of an Activity's execution including retries (use {@link startToCloseTimeout} to limit the time of a single attempt).\n   *\n   * Either this option or {@link startToCloseTimeout} is required.\n   *\n   * @default unlimited\n   * @format number of milliseconds or {@link https://www.npmjs.com/package/ms | ms-formatted string}\n   */\n  scheduleToCloseTimeout?: Duration;\n\n  /**\n   * Determines:\n   * - whether cancellation requests should be propagated from the current Workflow to the Activity; and\n   * - when should the Activity cancellation be reported to Workflow (i.e. at which moment should the\n   *   Activity call's promise fail with an `ActivityFailure`, with `cause` set to a `CancelledFailure`).\n   *\n   * Note that this setting only applies to cancellation originating from cancellation being\n   * externally requested on the Workflow itself, or from internal cancellation of the\n   * `CancellationScope` in which the Activity call was made. Termination of a Workflow Execution\n   * always results in cancellation of its outstanding Activity executions, regardless of those\n   * Activities' {@link ActivityCancellationType} settings.\n   *\n   * @default ActivityCancellationType.WAIT_CANCELLATION_COMPLETED\n   */\n  // MAINTENANCE: Keep this typedoc in sync with the `ActivityCancellationType` enum\n  cancellationType?: ActivityCancellationType;\n\n  /**\n   * Eager dispatch is an optimization that improves the throughput and load on the server for scheduling Activities.\n   * When used, the server will hand out Activity tasks back to the Worker when it completes a Workflow task.\n   * It is available from server version 1.17 behind the `system.enableActivityEagerExecution` feature flag.\n   *\n   * Eager dispatch will only be used if `allowEagerDispatch` is enabled (the default) and {@link taskQueue} is either\n   * omitted or the same as the current Workflow.\n   *\n   * @default true\n   */\n  allowEagerDispatch?: boolean;\n\n  /**\n   * When using the Worker Versioning feature, specifies whether this Activity should run on a\n   * worker with a compatible Build Id or not. See {@link VersioningIntent}.\n   *\n   * @default 'COMPATIBLE'\n   *\n   * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n   */\n  versioningIntent?: VersioningIntent;\n\n  /**\n   * A fixed, single-line summary for this workflow execution that may appear in the UI/CLI.\n   * This can be in single-line Temporal markdown format.\n   */\n  summary?: string;\n\n  /**\n   * Priority of this activity\n   */\n  priority?: Priority;\n}\n\n/**\n * Options for local activity invocation\n */\nexport interface LocalActivityOptions {\n  /**\n   * RetryPolicy that defines how an activity is retried in case of failure. If this is not set, then the SDK-defined default activity retry policy will be used.\n   * Note that local activities are always executed at least once, even if maximum attempts is set to 1 due to Workflow task retries.\n   */\n  retry?: RetryPolicy;\n\n  /**\n   * Maximum time the local activity is allowed to execute after the task is dispatched. This\n   * timeout is always retryable.\n   *\n   * Either this option or {@link scheduleToCloseTimeout} is required.\n   * If set, this must be <= {@link scheduleToCloseTimeout}, otherwise, it will be clamped down.\n   *\n   * @format number of milliseconds or {@link https://www.npmjs.com/package/ms | ms-formatted string}\n   */\n  startToCloseTimeout?: Duration;\n\n  /**\n   * Limits time the local activity can idle internally before being executed. That can happen if\n   * the worker is currently at max concurrent local activity executions. This timeout is always\n   * non retryable as all a retry would achieve is to put it back into the same queue. Defaults\n   * to {@link scheduleToCloseTimeout} if not specified and that is set. Must be <=\n   * {@link scheduleToCloseTimeout} when set, otherwise, it will be clamped down.\n   *\n   * @default unlimited\n   * @format number of milliseconds or {@link https://www.npmjs.com/package/ms | ms-formatted string}\n   */\n  scheduleToStartTimeout?: Duration;\n\n  /**\n   * Indicates how long the caller is willing to wait for local activity completion. Limits how\n   * long retries will be attempted.\n   *\n   * Either this option or {@link startToCloseTimeout} is required.\n   *\n   * @default unlimited\n   * @format number of milliseconds or {@link https://www.npmjs.com/package/ms | ms-formatted string}\n   */\n  scheduleToCloseTimeout?: Duration;\n\n  /**\n   * If the activity is retrying and backoff would exceed this value, a server side timer will be scheduled for the next attempt.\n   * Otherwise, backoff will happen internally in the SDK.\n   *\n   * @default 1 minute\n   * @format number of milliseconds or {@link https://www.npmjs.com/package/ms | ms-formatted string}\n   **/\n  localRetryThreshold?: Duration;\n\n  /**\n   * Determines:\n   * - whether cancellation requests should be propagated from the current Workflow to the Activity; and\n   * - when should the Activity cancellation be reported to Workflow (i.e. at which moment should the\n   *   Activity call's promise fail with an `ActivityFailure`, with `cause` set to a `CancelledFailure`).\n   *\n   * Note that this setting only applies to cancellation originating from cancellation being\n   * externally requested on the Workflow itself, or from internal cancellation of the\n   * `CancellationScope` in which the Activity call was made. Termination of a Workflow Execution\n   * always results in cancellation of its outstanding Activity executions, regardless of those\n   * Activities' {@link ActivityCancellationType} settings.\n   *\n   * @default ActivityCancellationType.WAIT_CANCELLATION_COMPLETED\n   */\n  // MAINTENANCE: Keep this typedoc in sync with the `ActivityCancellationType` enum\n  cancellationType?: ActivityCancellationType;\n\n  /**\n   * A fixed, single-line summary for this workflow execution that may appear in the UI/CLI.\n   * This can be in single-line Temporal markdown format.\n   */\n  summary?: string;\n}\n","/**\n * Common library for code that's used across the Client, Worker, and/or Workflow\n *\n * @module\n */\n\nimport * as encoding from './encoding';\nimport * as helpers from './type-helpers';\n\nexport * from './activity-definition-options';\nexport { ActivityCancellationDetailsOptions, ActivityCancellationDetails } from './activity-cancellation-details';\nexport { SuggestContinueAsNewReason } from './continue-as-new';\nexport * from './converter/data-converter';\nexport * from './converter/extstore';\nexport * from './converter/failure-converter';\nexport * from './converter/payload-codec';\nexport * from './converter/payload-converter';\nexport type {\n  ActivitySerializationContext,\n  SerializationContext,\n  WorkflowSerializationContext,\n} from './converter/serialization-context';\nexport * from './converter/types';\nexport * from './deprecated-time';\nexport * from './errors';\nexport * from './failure';\nexport { Headers, Next } from './interceptors';\nexport * from './interfaces';\nexport * from './logger';\nexport * from './priority';\nexport * from './metrics';\nexport * from './retry-policy';\nexport type { Timestamp, Duration, StringValue } from './time';\nexport type { ConverterHint, PayloadTypeInfo, TransferTypeConverter, TypeInfo } from './type-info';\nexport * from './worker-deployments';\nexport * from './workflow-definition-options';\nexport * from './workflow-handle';\nexport * from './workflow-options';\nexport * from './versioning-intent';\nexport {\n  SearchAttributes,\n  SearchAttributeValue,\n  SearchAttributeType,\n  SearchAttributePair,\n  SearchAttributeUpdatePair,\n  TypedSearchAttributes,\n  defineSearchAttributeKey,\n} from './search-attributes';\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// Deprecated APIs\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nexport {\n  /**\n   * @deprecated Import from `@temporalio/workflow` instead.\n   * @hidden\n   */\n  type ActivityOptions,\n  /**\n   * @deprecated Import from `@temporalio/workflow` instead.\n   * @hidden\n   */\n  type LocalActivityOptions,\n  /**\n   * @deprecated Import from `@temporalio/workflow` instead.\n   * @hidden\n   */\n  ActivityCancellationType,\n} from './activity-options';\n\n/**\n * Encode a UTF-8 string into a Uint8Array\n *\n * @hidden\n * @deprecated - meant for internal use only\n */\nexport function u8(s: string): Uint8Array {\n  return encoding.encode(s);\n}\n\n/**\n * Decode a Uint8Array into a UTF-8 string\n *\n * @hidden\n * @deprecated - meant for internal use only\n */\nexport function str(arr: Uint8Array): string {\n  return encoding.decode(arr);\n}\n\n/**\n * Get `error.message` (or `undefined` if not present)\n *\n * @hidden\n * @deprecated - meant for internal use only\n */\nexport function errorMessage(error: unknown): string | undefined {\n  return helpers.errorMessage(error);\n}\n\n/**\n * Get `error.code` (or `undefined` if not present)\n *\n * @hidden\n * @deprecated - meant for internal use only\n */\nexport function errorCode(error: unknown): string | undefined {\n  return helpers.errorCode(error);\n}\n","/*\n * Copyright 2019 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nexport enum Status {\n  OK = 0,\n  CANCELLED,\n  UNKNOWN,\n  INVALID_ARGUMENT,\n  DEADLINE_EXCEEDED,\n  NOT_FOUND,\n  ALREADY_EXISTS,\n  PERMISSION_DENIED,\n  RESOURCE_EXHAUSTED,\n  FAILED_PRECONDITION,\n  ABORTED,\n  OUT_OF_RANGE,\n  UNIMPLEMENTED,\n  INTERNAL,\n  UNAVAILABLE,\n  DATA_LOSS,\n  UNAUTHENTICATED,\n}\n\nexport enum LogVerbosity {\n  DEBUG = 0,\n  INFO,\n  ERROR,\n  NONE,\n}\n\n/**\n * NOTE: This enum is not currently used in any implemented API in this\n * library. It is included only for type parity with the other implementation.\n */\nexport enum Propagate {\n  DEADLINE = 1,\n  CENSUS_STATS_CONTEXT = 2,\n  CENSUS_TRACING_CONTEXT = 4,\n  CANCELLATION = 8,\n  // https://github.com/grpc/grpc/blob/master/include/grpc/impl/codegen/propagation_bits.h#L43\n  DEFAULTS = 0xffff |\n    Propagate.DEADLINE |\n    Propagate.CENSUS_STATS_CONTEXT |\n    Propagate.CENSUS_TRACING_CONTEXT |\n    Propagate.CANCELLATION,\n}\n\n// -1 means unlimited\nexport const DEFAULT_MAX_SEND_MESSAGE_LENGTH = -1;\n\n// 4 MB default\nexport const DEFAULT_MAX_RECEIVE_MESSAGE_LENGTH = 4 * 1024 * 1024;\n","{\n  \"name\": \"@grpc/grpc-js\",\n  \"version\": \"1.14.4\",\n  \"description\": \"gRPC Library for Node - pure JS implementation\",\n  \"homepage\": \"https://grpc.io/\",\n  \"repository\": \"https://github.com/grpc/grpc-node/tree/master/packages/grpc-js\",\n  \"main\": \"build/src/index.js\",\n  \"engines\": {\n    \"node\": \">=12.10.0\"\n  },\n  \"keywords\": [],\n  \"author\": {\n    \"name\": \"Google Inc.\"\n  },\n  \"types\": \"build/src/index.d.ts\",\n  \"license\": \"Apache-2.0\",\n  \"devDependencies\": {\n    \"@grpc/proto-loader\": \"file:../proto-loader\",\n    \"@types/gulp\": \"^4.0.17\",\n    \"@types/gulp-mocha\": \"0.0.37\",\n    \"@types/lodash\": \"^4.14.202\",\n    \"@types/mocha\": \"^10.0.6\",\n    \"@types/ncp\": \"^2.0.8\",\n    \"@types/node\": \">=20.11.20\",\n    \"@types/pify\": \"^5.0.4\",\n    \"@types/semver\": \"^7.5.8\",\n    \"@typescript-eslint/eslint-plugin\": \"^7.1.0\",\n    \"@typescript-eslint/parser\": \"^7.1.0\",\n    \"@typescript-eslint/typescript-estree\": \"^7.1.0\",\n    \"clang-format\": \"^1.8.0\",\n    \"eslint\": \"^8.42.0\",\n    \"eslint-config-prettier\": \"^8.8.0\",\n    \"eslint-plugin-node\": \"^11.1.0\",\n    \"eslint-plugin-prettier\": \"^4.2.1\",\n    \"execa\": \"^2.0.3\",\n    \"gulp\": \"^4.0.2\",\n    \"gulp-mocha\": \"^6.0.0\",\n    \"lodash\": \"^4.17.21\",\n    \"madge\": \"^5.0.1\",\n    \"mocha-jenkins-reporter\": \"^0.4.1\",\n    \"ncp\": \"^2.0.0\",\n    \"pify\": \"^4.0.1\",\n    \"prettier\": \"^2.8.8\",\n    \"rimraf\": \"^3.0.2\",\n    \"semver\": \"^7.6.0\",\n    \"ts-node\": \"^10.9.2\",\n    \"typescript\": \"^5.3.3\"\n  },\n  \"contributors\": [\n    {\n      \"name\": \"Google Inc.\"\n    }\n  ],\n  \"scripts\": {\n    \"build\": \"npm run compile\",\n    \"clean\": \"rimraf ./build\",\n    \"compile\": \"tsc -p .\",\n    \"format\": \"clang-format -i -style=\\\"{Language: JavaScript, BasedOnStyle: Google, ColumnLimit: 80}\\\" src/*.ts test/*.ts\",\n    \"lint\": \"eslint src/*.ts test/*.ts\",\n    \"prepare\": \"npm run copy-protos && npm run generate-types && npm run generate-test-types && npm run compile\",\n    \"test\": \"gulp test\",\n    \"check\": \"npm run lint\",\n    \"fix\": \"eslint --fix src/*.ts test/*.ts\",\n    \"pretest\": \"npm run generate-types && npm run generate-test-types && npm run compile\",\n    \"posttest\": \"npm run check && madge -c ./build/src\",\n    \"generate-types\": \"proto-loader-gen-types --keepCase --longs String --enums String --defaults --oneofs --includeComments --includeDirs proto/ --include-dirs proto/ proto/xds/ proto/protoc-gen-validate/ -O src/generated/ --grpcLib ../index channelz.proto xds/service/orca/v3/orca.proto\",\n    \"generate-test-types\": \"proto-loader-gen-types --keepCase --longs String --enums String --defaults --oneofs --includeComments --include-dirs test/fixtures/ -O test/generated/ --grpcLib ../../src/index test_service.proto echo_service.proto\",\n    \"copy-protos\": \"node ./copy-protos\"\n  },\n  \"dependencies\": {\n    \"@grpc/proto-loader\": \"^0.8.0\",\n    \"@js-sdsl/ordered-map\": \"^4.4.2\"\n  },\n  \"files\": [\n    \"src/**/*.ts\",\n    \"build/src/**/*.{js,d.ts,js.map}\",\n    \"proto/**/*.proto\",\n    \"proto/**/LICENSE\",\n    \"LICENSE\",\n    \"deps/envoy-api/envoy/api/v2/**/*.proto\",\n    \"deps/envoy-api/envoy/config/**/*.proto\",\n    \"deps/envoy-api/envoy/service/**/*.proto\",\n    \"deps/envoy-api/envoy/type/**/*.proto\",\n    \"deps/udpa/udpa/**/*.proto\",\n    \"deps/googleapis/google/api/*.proto\",\n    \"deps/googleapis/google/rpc/*.proto\",\n    \"deps/protoc-gen-validate/validate/**/*.proto\"\n  ]\n}\n","/*\n * Copyright 2019 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport { LogVerbosity } from './constants';\nimport { pid } from 'process';\n\nconst clientVersion = require('../../package.json').version;\n\nconst DEFAULT_LOGGER: Partial<Console> = {\n  error: (message?: any, ...optionalParams: any[]) => {\n    console.error('E ' + message, ...optionalParams);\n  },\n  info: (message?: any, ...optionalParams: any[]) => {\n    console.error('I ' + message, ...optionalParams);\n  },\n  debug: (message?: any, ...optionalParams: any[]) => {\n    console.error('D ' + message, ...optionalParams);\n  },\n};\n\nlet _logger: Partial<Console> = DEFAULT_LOGGER;\nlet _logVerbosity: LogVerbosity = LogVerbosity.ERROR;\n\nconst verbosityString =\n  process.env.GRPC_NODE_VERBOSITY ?? process.env.GRPC_VERBOSITY ?? '';\n\nswitch (verbosityString.toUpperCase()) {\n  case 'DEBUG':\n    _logVerbosity = LogVerbosity.DEBUG;\n    break;\n  case 'INFO':\n    _logVerbosity = LogVerbosity.INFO;\n    break;\n  case 'ERROR':\n    _logVerbosity = LogVerbosity.ERROR;\n    break;\n  case 'NONE':\n    _logVerbosity = LogVerbosity.NONE;\n    break;\n  default:\n  // Ignore any other values\n}\n\nexport const getLogger = (): Partial<Console> => {\n  return _logger;\n};\n\nexport const setLogger = (logger: Partial<Console>): void => {\n  _logger = logger;\n};\n\nexport const setLoggerVerbosity = (verbosity: LogVerbosity): void => {\n  _logVerbosity = verbosity;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const log = (severity: LogVerbosity, ...args: any[]): void => {\n  let logFunction: typeof DEFAULT_LOGGER.error;\n  if (severity >= _logVerbosity) {\n    switch (severity) {\n      case LogVerbosity.DEBUG:\n        logFunction = _logger.debug;\n        break;\n      case LogVerbosity.INFO:\n        logFunction = _logger.info;\n        break;\n      case LogVerbosity.ERROR:\n        logFunction = _logger.error;\n        break;\n    }\n    /* Fall back to _logger.error when other methods are not available for\n     * compatiblity with older behavior that always logged to _logger.error */\n    if (!logFunction) {\n      logFunction = _logger.error;\n    }\n    if (logFunction) {\n      logFunction.bind(_logger)(...args);\n    }\n  }\n};\n\nconst tracersString =\n  process.env.GRPC_NODE_TRACE ?? process.env.GRPC_TRACE ?? '';\nconst enabledTracers = new Set<string>();\nconst disabledTracers = new Set<string>();\nfor (const tracerName of tracersString.split(',')) {\n  if (tracerName.startsWith('-')) {\n    disabledTracers.add(tracerName.substring(1));\n  } else {\n    enabledTracers.add(tracerName);\n  }\n}\nconst allEnabled = enabledTracers.has('all');\n\nexport function trace(\n  severity: LogVerbosity,\n  tracer: string,\n  text: string\n): void {\n  if (isTracerEnabled(tracer)) {\n    log(\n      severity,\n      new Date().toISOString() +\n        ' | v' +\n        clientVersion +\n        ' ' +\n        pid +\n        ' | ' +\n        tracer +\n        ' | ' +\n        text\n    );\n  }\n}\n\nexport function isTracerEnabled(tracer: string): boolean {\n  return (\n    !disabledTracers.has(tracer) && (allEnabled || enabledTracers.has(tracer))\n  );\n}\n","/*\n * Copyright 2022 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nexport function getErrorMessage(error: unknown): string {\n  if (error instanceof Error) {\n    return error.message;\n  } else {\n    return String(error);\n  }\n}\n\nexport function getErrorCode(error: unknown): number | null {\n  if (\n    typeof error === 'object' &&\n    error !== null &&\n    'code' in error &&\n    typeof (error as Record<string, unknown>).code === 'number'\n  ) {\n    return (error as Record<string, number>).code;\n  } else {\n    return null;\n  }\n}\n","/*\n * Copyright 2019 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport * as http2 from 'http2';\nimport { log } from './logging';\nimport { LogVerbosity } from './constants';\nimport { getErrorMessage } from './error';\nconst LEGAL_KEY_REGEX = /^[:0-9a-z_.-]+$/;\nconst LEGAL_NON_BINARY_VALUE_REGEX = /^[ -~]*$/;\n\nexport type MetadataValue = string | Buffer;\nexport type MetadataObject = Map<string, MetadataValue[]>;\n\nfunction isLegalKey(key: string): boolean {\n  return LEGAL_KEY_REGEX.test(key);\n}\n\nfunction isLegalNonBinaryValue(value: string): boolean {\n  return LEGAL_NON_BINARY_VALUE_REGEX.test(value);\n}\n\nfunction isBinaryKey(key: string): boolean {\n  return key.endsWith('-bin');\n}\n\nfunction isCustomMetadata(key: string): boolean {\n  return !key.startsWith('grpc-');\n}\n\nfunction normalizeKey(key: string): string {\n  return key.toLowerCase();\n}\n\nfunction validate(key: string, value?: MetadataValue): void {\n  if (!isLegalKey(key)) {\n    throw new Error('Metadata key \"' + key + '\" contains illegal characters');\n  }\n\n  if (value !== null && value !== undefined) {\n    if (isBinaryKey(key)) {\n      if (!Buffer.isBuffer(value)) {\n        throw new Error(\"keys that end with '-bin' must have Buffer values\");\n      }\n    } else {\n      if (Buffer.isBuffer(value)) {\n        throw new Error(\n          \"keys that don't end with '-bin' must have String values\"\n        );\n      }\n      if (!isLegalNonBinaryValue(value)) {\n        throw new Error(\n          'Metadata string value \"' + value + '\" contains illegal characters'\n        );\n      }\n    }\n  }\n}\n\nexport interface MetadataOptions {\n  /* Signal that the request is idempotent. Defaults to false */\n  idempotentRequest?: boolean;\n  /* Signal that the call should not return UNAVAILABLE before it has\n   * started. Defaults to false. */\n  waitForReady?: boolean;\n  /* Signal that the call is cacheable. GRPC is free to use GET verb.\n   * Defaults to false */\n  cacheableRequest?: boolean;\n  /* Signal that the initial metadata should be corked. Defaults to false. */\n  corked?: boolean;\n}\n\n/**\n * A class for storing metadata. Keys are normalized to lowercase ASCII.\n */\nexport class Metadata {\n  protected internalRepr: MetadataObject = new Map<string, MetadataValue[]>();\n  private options: MetadataOptions;\n  private opaqueData: Map<string, unknown> = new Map();\n\n  constructor(options: MetadataOptions = {}) {\n    this.options = options;\n  }\n\n  /**\n   * Sets the given value for the given key by replacing any other values\n   * associated with that key. Normalizes the key.\n   * @param key The key to whose value should be set.\n   * @param value The value to set. Must be a buffer if and only\n   *   if the normalized key ends with '-bin'.\n   */\n  set(key: string, value: MetadataValue): void {\n    key = normalizeKey(key);\n    validate(key, value);\n    this.internalRepr.set(key, [value]);\n  }\n\n  /**\n   * Adds the given value for the given key by appending to a list of previous\n   * values associated with that key. Normalizes the key.\n   * @param key The key for which a new value should be appended.\n   * @param value The value to add. Must be a buffer if and only\n   *   if the normalized key ends with '-bin'.\n   */\n  add(key: string, value: MetadataValue): void {\n    key = normalizeKey(key);\n    validate(key, value);\n\n    const existingValue: MetadataValue[] | undefined =\n      this.internalRepr.get(key);\n\n    if (existingValue === undefined) {\n      this.internalRepr.set(key, [value]);\n    } else {\n      existingValue.push(value);\n    }\n  }\n\n  /**\n   * Removes the given key and any associated values. Normalizes the key.\n   * @param key The key whose values should be removed.\n   */\n  remove(key: string): void {\n    key = normalizeKey(key);\n    // validate(key);\n    this.internalRepr.delete(key);\n  }\n\n  /**\n   * Gets a list of all values associated with the key. Normalizes the key.\n   * @param key The key whose value should be retrieved.\n   * @return A list of values associated with the given key.\n   */\n  get(key: string): MetadataValue[] {\n    key = normalizeKey(key);\n    // validate(key);\n    return this.internalRepr.get(key) || [];\n  }\n\n  /**\n   * Gets a plain object mapping each key to the first value associated with it.\n   * This reflects the most common way that people will want to see metadata.\n   * @return A key/value mapping of the metadata.\n   */\n  getMap(): { [key: string]: MetadataValue } {\n    const result: { [key: string]: MetadataValue } = {};\n\n    for (const [key, values] of this.internalRepr) {\n      if (values.length > 0) {\n        const v = values[0];\n        result[key] = Buffer.isBuffer(v) ? Buffer.from(v) : v;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Clones the metadata object.\n   * @return The newly cloned object.\n   */\n  clone(): Metadata {\n    const newMetadata = new Metadata(this.options);\n    const newInternalRepr = newMetadata.internalRepr;\n\n    for (const [key, value] of this.internalRepr) {\n      const clonedValue: MetadataValue[] = value.map(v => {\n        if (Buffer.isBuffer(v)) {\n          return Buffer.from(v);\n        } else {\n          return v;\n        }\n      });\n\n      newInternalRepr.set(key, clonedValue);\n    }\n\n    return newMetadata;\n  }\n\n  /**\n   * Merges all key-value pairs from a given Metadata object into this one.\n   * If both this object and the given object have values in the same key,\n   * values from the other Metadata object will be appended to this object's\n   * values.\n   * @param other A Metadata object.\n   */\n  merge(other: Metadata): void {\n    for (const [key, values] of other.internalRepr) {\n      const mergedValue: MetadataValue[] = (\n        this.internalRepr.get(key) || []\n      ).concat(values);\n\n      this.internalRepr.set(key, mergedValue);\n    }\n  }\n\n  setOptions(options: MetadataOptions) {\n    this.options = options;\n  }\n\n  getOptions(): MetadataOptions {\n    return this.options;\n  }\n\n  /**\n   * Creates an OutgoingHttpHeaders object that can be used with the http2 API.\n   */\n  toHttp2Headers(): http2.OutgoingHttpHeaders {\n    // NOTE: Node <8.9 formats http2 headers incorrectly.\n    const result: http2.OutgoingHttpHeaders = {};\n\n    for (const [key, values] of this.internalRepr) {\n      if (key.startsWith(':')) {\n        continue;\n      }\n      // We assume that the user's interaction with this object is limited to\n      // through its public API (i.e. keys and values are already validated).\n      result[key] = values.map(bufToString);\n    }\n\n    return result;\n  }\n\n  /**\n   * This modifies the behavior of JSON.stringify to show an object\n   * representation of the metadata map.\n   */\n  toJSON() {\n    const result: { [key: string]: MetadataValue[] } = {};\n    for (const [key, values] of this.internalRepr) {\n      result[key] = values;\n    }\n    return result;\n  }\n\n  /**\n   * Attach additional data of any type to the metadata object, which will not\n   * be included when sending headers. The data can later be retrieved with\n   * `getOpaque`. Keys with the prefix `grpc` are reserved for use by this\n   * library.\n   * @param key\n   * @param value\n   */\n  setOpaque(key: string, value: unknown) {\n    this.opaqueData.set(key, value);\n  }\n\n  /**\n   * Retrieve data previously added with `setOpaque`.\n   * @param key\n   * @returns\n   */\n  getOpaque(key: string) {\n    return this.opaqueData.get(key);\n  }\n\n  /**\n   * Returns a new Metadata object based fields in a given IncomingHttpHeaders\n   * object.\n   * @param headers An IncomingHttpHeaders object.\n   */\n  static fromHttp2Headers(headers: http2.IncomingHttpHeaders): Metadata {\n    const result = new Metadata();\n    for (const key of Object.keys(headers)) {\n      // Reserved headers (beginning with `:`) are not valid keys.\n      if (key.charAt(0) === ':') {\n        continue;\n      }\n\n      const values = headers[key];\n\n      try {\n        if (isBinaryKey(key)) {\n          if (Array.isArray(values)) {\n            values.forEach(value => {\n              result.add(key, Buffer.from(value, 'base64'));\n            });\n          } else if (values !== undefined) {\n            if (isCustomMetadata(key)) {\n              values.split(',').forEach(v => {\n                result.add(key, Buffer.from(v.trim(), 'base64'));\n              });\n            } else {\n              result.add(key, Buffer.from(values, 'base64'));\n            }\n          }\n        } else {\n          if (Array.isArray(values)) {\n            values.forEach(value => {\n              result.add(key, value);\n            });\n          } else if (values !== undefined) {\n            result.add(key, values);\n          }\n        }\n      } catch (error) {\n        const message = `Failed to add metadata entry ${key}: ${values}. ${getErrorMessage(\n          error\n        )}. For more information see https://github.com/grpc/grpc-node/issues/1173`;\n        log(LogVerbosity.ERROR, message);\n      }\n    }\n\n    return result;\n  }\n}\n\nconst bufToString = (val: string | Buffer): string => {\n  return Buffer.isBuffer(val) ? val.toString('base64') : val;\n};\n","/*\n * Copyright 2019 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport { Metadata } from './metadata';\n\nexport interface CallMetadataOptions {\n  method_name: string;\n  service_url: string;\n}\n\nexport type CallMetadataGenerator = (\n  options: CallMetadataOptions,\n  cb: (err: Error | null, metadata?: Metadata) => void\n) => void;\n\n// google-auth-library pre-v2.0.0 does not have getRequestHeaders\n// but has getRequestMetadata, which is deprecated in v2.0.0\nexport interface OldOAuth2Client {\n  getRequestMetadata: (\n    url: string,\n    callback: (\n      err: Error | null,\n      headers?: {\n        [index: string]: string;\n      }\n    ) => void\n  ) => void;\n}\n\nexport interface CurrentOAuth2Client {\n  getRequestHeaders: (url?: string) => Promise<{ [index: string]: string }>;\n}\n\nexport type OAuth2Client = OldOAuth2Client | CurrentOAuth2Client;\n\nfunction isCurrentOauth2Client(\n  client: OAuth2Client\n): client is CurrentOAuth2Client {\n  return (\n    'getRequestHeaders' in client &&\n    typeof client.getRequestHeaders === 'function'\n  );\n}\n\n/**\n * A class that represents a generic method of adding authentication-related\n * metadata on a per-request basis.\n */\nexport abstract class CallCredentials {\n  /**\n   * Asynchronously generates a new Metadata object.\n   * @param options Options used in generating the Metadata object.\n   */\n  abstract generateMetadata(options: CallMetadataOptions): Promise<Metadata>;\n  /**\n   * Creates a new CallCredentials object from properties of both this and\n   * another CallCredentials object. This object's metadata generator will be\n   * called first.\n   * @param callCredentials The other CallCredentials object.\n   */\n  abstract compose(callCredentials: CallCredentials): CallCredentials;\n\n  /**\n   * Check whether two call credentials objects are equal. Separate\n   * SingleCallCredentials with identical metadata generator functions are\n   * equal.\n   * @param other The other CallCredentials object to compare with.\n   */\n  abstract _equals(other: CallCredentials): boolean;\n\n  /**\n   * Creates a new CallCredentials object from a given function that generates\n   * Metadata objects.\n   * @param metadataGenerator A function that accepts a set of options, and\n   * generates a Metadata object based on these options, which is passed back\n   * to the caller via a supplied (err, metadata) callback.\n   */\n  static createFromMetadataGenerator(\n    metadataGenerator: CallMetadataGenerator\n  ): CallCredentials {\n    return new SingleCallCredentials(metadataGenerator);\n  }\n\n  /**\n   * Create a gRPC credential from a Google credential object.\n   * @param googleCredentials The authentication client to use.\n   * @return The resulting CallCredentials object.\n   */\n  static createFromGoogleCredential(\n    googleCredentials: OAuth2Client\n  ): CallCredentials {\n    return CallCredentials.createFromMetadataGenerator((options, callback) => {\n      let getHeaders: Promise<{ [index: string]: string }>;\n      if (isCurrentOauth2Client(googleCredentials)) {\n        getHeaders = googleCredentials.getRequestHeaders(options.service_url);\n      } else {\n        getHeaders = new Promise((resolve, reject) => {\n          googleCredentials.getRequestMetadata(\n            options.service_url,\n            (err, headers) => {\n              if (err) {\n                reject(err);\n                return;\n              }\n              if (!headers) {\n                reject(new Error('Headers not set by metadata plugin'));\n                return;\n              }\n              resolve(headers);\n            }\n          );\n        });\n      }\n      getHeaders.then(\n        headers => {\n          const metadata = new Metadata();\n          for (const key of Object.keys(headers)) {\n            metadata.add(key, headers[key]);\n          }\n          callback(null, metadata);\n        },\n        err => {\n          callback(err);\n        }\n      );\n    });\n  }\n\n  static createEmpty(): CallCredentials {\n    return new EmptyCallCredentials();\n  }\n}\n\nclass ComposedCallCredentials extends CallCredentials {\n  constructor(private creds: CallCredentials[]) {\n    super();\n  }\n\n  async generateMetadata(options: CallMetadataOptions): Promise<Metadata> {\n    const base: Metadata = new Metadata();\n    const generated: Metadata[] = await Promise.all(\n      this.creds.map(cred => cred.generateMetadata(options))\n    );\n    for (const gen of generated) {\n      base.merge(gen);\n    }\n    return base;\n  }\n\n  compose(other: CallCredentials): CallCredentials {\n    return new ComposedCallCredentials(this.creds.concat([other]));\n  }\n\n  _equals(other: CallCredentials): boolean {\n    if (this === other) {\n      return true;\n    }\n    if (other instanceof ComposedCallCredentials) {\n      return this.creds.every((value, index) =>\n        value._equals(other.creds[index])\n      );\n    } else {\n      return false;\n    }\n  }\n}\n\nclass SingleCallCredentials extends CallCredentials {\n  constructor(private metadataGenerator: CallMetadataGenerator) {\n    super();\n  }\n\n  generateMetadata(options: CallMetadataOptions): Promise<Metadata> {\n    return new Promise<Metadata>((resolve, reject) => {\n      this.metadataGenerator(options, (err, metadata) => {\n        if (metadata !== undefined) {\n          resolve(metadata);\n        } else {\n          reject(err);\n        }\n      });\n    });\n  }\n\n  compose(other: CallCredentials): CallCredentials {\n    return new ComposedCallCredentials([this, other]);\n  }\n\n  _equals(other: CallCredentials): boolean {\n    if (this === other) {\n      return true;\n    }\n    if (other instanceof SingleCallCredentials) {\n      return this.metadataGenerator === other.metadataGenerator;\n    } else {\n      return false;\n    }\n  }\n}\n\nclass EmptyCallCredentials extends CallCredentials {\n  generateMetadata(options: CallMetadataOptions): Promise<Metadata> {\n    return Promise.resolve(new Metadata());\n  }\n\n  compose(other: CallCredentials): CallCredentials {\n    return other;\n  }\n\n  _equals(other: CallCredentials): boolean {\n    return other instanceof EmptyCallCredentials;\n  }\n}\n","/*\n * Copyright 2019 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport * as fs from 'fs';\n\nexport const CIPHER_SUITES: string | undefined =\n  process.env.GRPC_SSL_CIPHER_SUITES;\n\nconst DEFAULT_ROOTS_FILE_PATH = process.env.GRPC_DEFAULT_SSL_ROOTS_FILE_PATH;\n\nlet defaultRootsData: Buffer | null = null;\n\nexport function getDefaultRootsData(): Buffer | null {\n  if (DEFAULT_ROOTS_FILE_PATH) {\n    if (defaultRootsData === null) {\n      defaultRootsData = fs.readFileSync(DEFAULT_ROOTS_FILE_PATH);\n    }\n    return defaultRootsData;\n  }\n  return null;\n}\n","/*\n * Copyright 2020 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nexport interface GrpcUri {\n  scheme?: string;\n  authority?: string;\n  path: string;\n}\n\n/*\n * The groups correspond to URI parts as follows:\n * 1. scheme\n * 2. authority\n * 3. path\n */\nconst URI_REGEX = /^(?:([A-Za-z0-9+.-]+):)?(?:\\/\\/([^/]*)\\/)?(.+)$/;\n\nexport function parseUri(uriString: string): GrpcUri | null {\n  const parsedUri = URI_REGEX.exec(uriString);\n  if (parsedUri === null) {\n    return null;\n  }\n  return {\n    scheme: parsedUri[1],\n    authority: parsedUri[2],\n    path: parsedUri[3],\n  };\n}\n\nexport interface HostPort {\n  host: string;\n  port?: number;\n}\n\nconst NUMBER_REGEX = /^\\d+$/;\n\nexport function splitHostPort(path: string): HostPort | null {\n  if (path.startsWith('[')) {\n    const hostEnd = path.indexOf(']');\n    if (hostEnd === -1) {\n      return null;\n    }\n    const host = path.substring(1, hostEnd);\n    /* Only an IPv6 address should be in bracketed notation, and an IPv6\n     * address should have at least one colon */\n    if (host.indexOf(':') === -1) {\n      return null;\n    }\n    if (path.length > hostEnd + 1) {\n      if (path[hostEnd + 1] === ':') {\n        const portString = path.substring(hostEnd + 2);\n        if (NUMBER_REGEX.test(portString)) {\n          return {\n            host: host,\n            port: +portString,\n          };\n        } else {\n          return null;\n        }\n      } else {\n        return null;\n      }\n    } else {\n      return {\n        host,\n      };\n    }\n  } else {\n    const splitPath = path.split(':');\n    /* Exactly one colon means that this is host:port. Zero colons means that\n     * there is no port. And multiple colons means that this is a bare IPv6\n     * address with no port */\n    if (splitPath.length === 2) {\n      if (NUMBER_REGEX.test(splitPath[1])) {\n        return {\n          host: splitPath[0],\n          port: +splitPath[1],\n        };\n      } else {\n        return null;\n      }\n    } else {\n      return {\n        host: path,\n      };\n    }\n  }\n}\n\nexport function combineHostPort(hostPort: HostPort): string {\n  if (hostPort.port === undefined) {\n    return hostPort.host;\n  } else {\n    // Only an IPv6 host should include a colon\n    if (hostPort.host.includes(':')) {\n      return `[${hostPort.host}]:${hostPort.port}`;\n    } else {\n      return `${hostPort.host}:${hostPort.port}`;\n    }\n  }\n}\n\nexport function uriToString(uri: GrpcUri): string {\n  let result = '';\n  if (uri.scheme !== undefined) {\n    result += uri.scheme + ':';\n  }\n  if (uri.authority !== undefined) {\n    result += '//' + uri.authority + '/';\n  }\n  result += uri.path;\n  return result;\n}\n","/*\n * Copyright 2019 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport { MethodConfig, ServiceConfig } from './service-config';\nimport { StatusOr } from './call-interface';\nimport { Endpoint } from './subchannel-address';\nimport { GrpcUri, uriToString } from './uri-parser';\nimport { ChannelOptions } from './channel-options';\nimport { Metadata } from './metadata';\nimport { Status } from './constants';\nimport { Filter, FilterFactory } from './filter';\n\nexport const CHANNEL_ARGS_CONFIG_SELECTOR_KEY = 'grpc.internal.config_selector';\n\nexport interface CallConfig {\n  methodConfig: MethodConfig;\n  onCommitted?: () => void;\n  pickInformation: { [key: string]: string };\n  status: Status;\n  dynamicFilterFactories: FilterFactory<Filter>[];\n}\n\n/**\n * Selects a configuration for a method given the name and metadata. Defined in\n * https://github.com/grpc/proposal/blob/master/A31-xds-timeout-support-and-config-selector.md#new-functionality-in-grpc\n */\nexport interface ConfigSelector {\n  invoke(methodName: string, metadata: Metadata, channelId: number): CallConfig;\n  unref(): void;\n}\n\nexport interface ResolverListener {\n  /**\n   * Called whenever the resolver has new name resolution results or an error to\n   * report.\n   * @param endpointList The list of endpoints, or an error if resolution failed\n   * @param attributes Arbitrary key/value pairs to pass along to load balancing\n   *     policies\n   * @param serviceConfig The service service config for the endpoint list, or an\n   *     error if the retrieved service config is invalid, or null if there is no\n   *     service config\n   * @param resolutionNote Provides additional context to RPC failure status\n   *     messages generated by the load balancing policy.\n   * @returns Whether or not the load balancing policy accepted the result.\n   */\n  (\n    endpointList: StatusOr<Endpoint[]>,\n    attributes: { [key: string]: unknown },\n    serviceConfig: StatusOr<ServiceConfig> | null,\n    resolutionNote: string\n  ): boolean;\n}\n/**\n * A resolver class that handles one or more of the name syntax schemes defined\n * in the [gRPC Name Resolution document](https://github.com/grpc/grpc/blob/master/doc/naming.md)\n */\nexport interface Resolver {\n  /**\n   * Indicates that the caller wants new name resolution data. Calling this\n   * function may eventually result in calling one of the `ResolverListener`\n   * functions, but that is not guaranteed. Those functions will never be\n   * called synchronously with the constructor or updateResolution.\n   */\n  updateResolution(): void;\n\n  /**\n   * Discard all resources owned by the resolver. A later call to\n   * `updateResolution` should reinitialize those resources.  No\n   * `ResolverListener` callbacks should be called after `destroy` is called\n   * until `updateResolution` is called again.\n   */\n  destroy(): void;\n}\n\nexport interface ResolverConstructor {\n  new (\n    target: GrpcUri,\n    listener: ResolverListener,\n    channelOptions: ChannelOptions\n  ): Resolver;\n  /**\n   * Get the default authority for a target. This loosely corresponds to that\n   * target's hostname. Throws an error if this resolver class cannot parse the\n   * `target`.\n   * @param target\n   */\n  getDefaultAuthority(target: GrpcUri): string;\n}\n\nconst registeredResolvers: { [scheme: string]: ResolverConstructor } = {};\nlet defaultScheme: string | null = null;\n\n/**\n * Register a resolver class to handle target names prefixed with the `prefix`\n * string. This prefix should correspond to a URI scheme name listed in the\n * [gRPC Name Resolution document](https://github.com/grpc/grpc/blob/master/doc/naming.md)\n * @param prefix\n * @param resolverClass\n */\nexport function registerResolver(\n  scheme: string,\n  resolverClass: ResolverConstructor\n) {\n  registeredResolvers[scheme] = resolverClass;\n}\n\n/**\n * Register a default resolver to handle target names that do not start with\n * any registered prefix.\n * @param resolverClass\n */\nexport function registerDefaultScheme(scheme: string) {\n  defaultScheme = scheme;\n}\n\n/**\n * Create a name resolver for the specified target, if possible. Throws an\n * error if no such name resolver can be created.\n * @param target\n * @param listener\n */\nexport function createResolver(\n  target: GrpcUri,\n  listener: ResolverListener,\n  options: ChannelOptions\n): Resolver {\n  if (target.scheme !== undefined && target.scheme in registeredResolvers) {\n    return new registeredResolvers[target.scheme](target, listener, options);\n  } else {\n    throw new Error(\n      `No resolver could be created for target ${uriToString(target)}`\n    );\n  }\n}\n\n/**\n * Get the default authority for the specified target, if possible. Throws an\n * error if no registered name resolver can parse that target string.\n * @param target\n */\nexport function getDefaultAuthority(target: GrpcUri): string {\n  if (target.scheme !== undefined && target.scheme in registeredResolvers) {\n    return registeredResolvers[target.scheme].getDefaultAuthority(target);\n  } else {\n    throw new Error(`Invalid target ${uriToString(target)}`);\n  }\n}\n\nexport function mapUriDefaultScheme(target: GrpcUri): GrpcUri | null {\n  if (target.scheme === undefined || !(target.scheme in registeredResolvers)) {\n    if (defaultScheme !== null) {\n      return {\n        scheme: defaultScheme,\n        authority: undefined,\n        path: uriToString(target),\n      };\n    } else {\n      return null;\n    }\n  }\n  return target;\n}\n","/*\n * Copyright 2019 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport {\n  ConnectionOptions,\n  createSecureContext,\n  PeerCertificate,\n  SecureContext,\n  checkServerIdentity,\n  connect as tlsConnect\n} from 'tls';\n\nimport { CallCredentials } from './call-credentials';\nimport { CIPHER_SUITES, getDefaultRootsData } from './tls-helpers';\nimport { CaCertificateUpdate, CaCertificateUpdateListener, CertificateProvider, IdentityCertificateUpdate, IdentityCertificateUpdateListener } from './certificate-provider';\nimport { Socket } from 'net';\nimport { ChannelOptions } from './channel-options';\nimport { GrpcUri, parseUri, splitHostPort } from './uri-parser';\nimport { getDefaultAuthority } from './resolver';\nimport { log } from './logging';\nimport { LogVerbosity } from './constants';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction verifyIsBufferOrNull(obj: any, friendlyName: string): void {\n  if (obj && !(obj instanceof Buffer)) {\n    throw new TypeError(`${friendlyName}, if provided, must be a Buffer.`);\n  }\n}\n\n/**\n * A callback that will receive the expected hostname and presented peer\n * certificate as parameters. The callback should return an error to\n * indicate that the presented certificate is considered invalid and\n * otherwise returned undefined.\n */\nexport type CheckServerIdentityCallback = (\n  hostname: string,\n  cert: PeerCertificate\n) => Error | undefined;\n\n/**\n * Additional peer verification options that can be set when creating\n * SSL credentials.\n */\nexport interface VerifyOptions {\n  /**\n   * If set, this callback will be invoked after the usual hostname verification\n   * has been performed on the peer certificate.\n   */\n  checkServerIdentity?: CheckServerIdentityCallback;\n  rejectUnauthorized?: boolean;\n}\n\nexport interface SecureConnectResult {\n  socket: Socket;\n  secure: boolean;\n}\n\nexport interface SecureConnector {\n  connect(socket: Socket): Promise<SecureConnectResult>;\n  waitForReady(): Promise<void>;\n  getCallCredentials(): CallCredentials;\n  destroy(): void;\n}\n\n/**\n * A class that contains credentials for communicating over a channel, as well\n * as a set of per-call credentials, which are applied to every method call made\n * over a channel initialized with an instance of this class.\n */\nexport abstract class ChannelCredentials {\n  /**\n   * Returns a copy of this object with the included set of per-call credentials\n   * expanded to include callCredentials.\n   * @param callCredentials A CallCredentials object to associate with this\n   * instance.\n   */\n  compose(callCredentials: CallCredentials): ChannelCredentials {\n    return new ComposedChannelCredentialsImpl(this, callCredentials);\n  }\n\n  /**\n   * Indicates whether this credentials object creates a secure channel.\n   */\n  abstract _isSecure(): boolean;\n\n  /**\n   * Check whether two channel credentials objects are equal. Two secure\n   * credentials are equal if they were constructed with the same parameters.\n   * @param other The other ChannelCredentials Object\n   */\n  abstract _equals(other: ChannelCredentials): boolean;\n\n  abstract _createSecureConnector(channelTarget: GrpcUri, options: ChannelOptions, callCredentials?: CallCredentials): SecureConnector;\n\n  /**\n   * Return a new ChannelCredentials instance with a given set of credentials.\n   * The resulting instance can be used to construct a Channel that communicates\n   * over TLS.\n   * @param rootCerts The root certificate data.\n   * @param privateKey The client certificate private key, if available.\n   * @param certChain The client certificate key chain, if available.\n   * @param verifyOptions Additional options to modify certificate verification\n   */\n  static createSsl(\n    rootCerts?: Buffer | null,\n    privateKey?: Buffer | null,\n    certChain?: Buffer | null,\n    verifyOptions?: VerifyOptions\n  ): ChannelCredentials {\n    verifyIsBufferOrNull(rootCerts, 'Root certificate');\n    verifyIsBufferOrNull(privateKey, 'Private key');\n    verifyIsBufferOrNull(certChain, 'Certificate chain');\n    if (privateKey && !certChain) {\n      throw new Error(\n        'Private key must be given with accompanying certificate chain'\n      );\n    }\n    if (!privateKey && certChain) {\n      throw new Error(\n        'Certificate chain must be given with accompanying private key'\n      );\n    }\n    const secureContext = createSecureContext({\n      ca: rootCerts ?? getDefaultRootsData() ?? undefined,\n      key: privateKey ?? undefined,\n      cert: certChain ?? undefined,\n      ciphers: CIPHER_SUITES,\n    });\n    return new SecureChannelCredentialsImpl(secureContext, verifyOptions ?? {});\n  }\n\n  /**\n   * Return a new ChannelCredentials instance with credentials created using\n   * the provided secureContext. The resulting instances can be used to\n   * construct a Channel that communicates over TLS. gRPC will not override\n   * anything in the provided secureContext, so the environment variables\n   * GRPC_SSL_CIPHER_SUITES and GRPC_DEFAULT_SSL_ROOTS_FILE_PATH will\n   * not be applied.\n   * @param secureContext The return value of tls.createSecureContext()\n   * @param verifyOptions Additional options to modify certificate verification\n   */\n  static createFromSecureContext(\n    secureContext: SecureContext,\n    verifyOptions?: VerifyOptions\n  ): ChannelCredentials {\n    return new SecureChannelCredentialsImpl(secureContext, verifyOptions ?? {});\n  }\n\n  /**\n   * Return a new ChannelCredentials instance with no credentials.\n   */\n  static createInsecure(): ChannelCredentials {\n    return new InsecureChannelCredentialsImpl();\n  }\n}\n\nclass InsecureChannelCredentialsImpl extends ChannelCredentials {\n  constructor() {\n    super();\n  }\n\n  override compose(callCredentials: CallCredentials): never {\n    throw new Error('Cannot compose insecure credentials');\n  }\n  _isSecure(): boolean {\n    return false;\n  }\n  _equals(other: ChannelCredentials): boolean {\n    return other instanceof InsecureChannelCredentialsImpl;\n  }\n  _createSecureConnector(channelTarget: GrpcUri, options: ChannelOptions, callCredentials?: CallCredentials): SecureConnector {\n    return {\n      connect(socket) {\n        return Promise.resolve({\n          socket,\n          secure: false\n        });\n      },\n      waitForReady: () => {\n        return Promise.resolve();\n      },\n      getCallCredentials: () => {\n        return callCredentials ?? CallCredentials.createEmpty();\n      },\n      destroy() {}\n    }\n  }\n}\n\nfunction getConnectionOptions(secureContext: SecureContext, verifyOptions: VerifyOptions, channelTarget: GrpcUri, options: ChannelOptions): ConnectionOptions {\n  const connectionOptions: ConnectionOptions = {\n    secureContext: secureContext\n  };\n  let realTarget: GrpcUri = channelTarget;\n  if ('grpc.http_connect_target' in options) {\n    const parsedTarget = parseUri(options['grpc.http_connect_target']!);\n    if (parsedTarget) {\n      realTarget = parsedTarget;\n    }\n  }\n  const targetPath = getDefaultAuthority(realTarget);\n  const hostPort = splitHostPort(targetPath);\n  const remoteHost = hostPort?.host ?? targetPath;\n  connectionOptions.host = remoteHost;\n\n  if (verifyOptions.checkServerIdentity) {\n    connectionOptions.checkServerIdentity = verifyOptions.checkServerIdentity;\n  }\n  if (verifyOptions.rejectUnauthorized !== undefined) {\n    connectionOptions.rejectUnauthorized = verifyOptions.rejectUnauthorized;\n  }\n  connectionOptions.ALPNProtocols = ['h2'];\n  if (options['grpc.ssl_target_name_override']) {\n    const sslTargetNameOverride = options['grpc.ssl_target_name_override']!;\n    const originalCheckServerIdentity =\n      connectionOptions.checkServerIdentity ?? checkServerIdentity;\n    connectionOptions.checkServerIdentity = (\n      host: string,\n      cert: PeerCertificate\n    ): Error | undefined => {\n      return originalCheckServerIdentity(sslTargetNameOverride, cert);\n    };\n    connectionOptions.servername = sslTargetNameOverride;\n  } else {\n    connectionOptions.servername = remoteHost;\n  }\n  if (options['grpc-node.tls_enable_trace']) {\n    connectionOptions.enableTrace = true;\n  }\n  return connectionOptions;\n}\n\nclass SecureConnectorImpl implements SecureConnector {\n  constructor(private connectionOptions: ConnectionOptions, private callCredentials: CallCredentials) {\n  }\n  connect(socket: Socket): Promise<SecureConnectResult> {\n    const tlsConnectOptions: ConnectionOptions = {\n      socket: socket,\n      ...this.connectionOptions\n    };\n    return new Promise<SecureConnectResult>((resolve, reject) => {\n      const tlsSocket = tlsConnect(tlsConnectOptions, () => {\n        if ((this.connectionOptions.rejectUnauthorized ?? true) && !tlsSocket.authorized) {\n          reject(tlsSocket.authorizationError);\n          return;\n        }\n        resolve({\n          socket: tlsSocket,\n          secure: true\n        })\n      });\n      tlsSocket.on('error', (error: Error) => {\n        reject(error);\n      });\n    });\n  }\n  waitForReady(): Promise<void> {\n    return Promise.resolve();\n  }\n  getCallCredentials(): CallCredentials {\n    return this.callCredentials;\n  }\n  destroy() {}\n}\n\nclass SecureChannelCredentialsImpl extends ChannelCredentials {\n  constructor(\n    private secureContext: SecureContext,\n    private verifyOptions: VerifyOptions\n  ) {\n    super();\n  }\n\n  _isSecure(): boolean {\n    return true;\n  }\n  _equals(other: ChannelCredentials): boolean {\n    if (this === other) {\n      return true;\n    }\n    if (other instanceof SecureChannelCredentialsImpl) {\n      return (\n        this.secureContext === other.secureContext &&\n        this.verifyOptions.checkServerIdentity ===\n          other.verifyOptions.checkServerIdentity\n      );\n    } else {\n      return false;\n    }\n  }\n  _createSecureConnector(channelTarget: GrpcUri, options: ChannelOptions, callCredentials?: CallCredentials): SecureConnector {\n    const connectionOptions = getConnectionOptions(this.secureContext, this.verifyOptions, channelTarget, options);\n    return new SecureConnectorImpl(connectionOptions, callCredentials ?? CallCredentials.createEmpty());\n  }\n}\n\nclass CertificateProviderChannelCredentialsImpl extends ChannelCredentials {\n  private refcount: number = 0;\n  /**\n   * `undefined` means that the certificates have not yet been loaded. `null`\n   * means that an attempt to load them has completed, and has failed.\n   */\n  private latestCaUpdate: CaCertificateUpdate | null | undefined = undefined;\n  /**\n   * `undefined` means that the certificates have not yet been loaded. `null`\n   * means that an attempt to load them has completed, and has failed.\n   */\n  private latestIdentityUpdate: IdentityCertificateUpdate | null | undefined = undefined;\n  private caCertificateUpdateListener: CaCertificateUpdateListener = this.handleCaCertificateUpdate.bind(this);\n  private identityCertificateUpdateListener: IdentityCertificateUpdateListener = this.handleIdentityCertitificateUpdate.bind(this);\n  private secureContextWatchers: ((context: SecureContext | null) => void)[] = [];\n  private static SecureConnectorImpl = class implements SecureConnector {\n    constructor(private parent: CertificateProviderChannelCredentialsImpl, private channelTarget: GrpcUri, private options: ChannelOptions, private callCredentials: CallCredentials) {}\n\n    connect(socket: Socket): Promise<SecureConnectResult> {\n      return new Promise((resolve, reject) => {\n        const secureContext = this.parent.getLatestSecureContext();\n        if (!secureContext) {\n          reject(new Error('Failed to load credentials'));\n          return;\n        }\n        if (socket.closed) {\n          reject(new Error('Socket closed while loading credentials'));\n        }\n        const connnectionOptions = getConnectionOptions(secureContext, this.parent.verifyOptions, this.channelTarget, this.options);\n        const tlsConnectOptions: ConnectionOptions = {\n          socket: socket,\n          ...connnectionOptions\n        }\n        const closeCallback = () => {\n          reject(new Error('Socket closed'));\n        };\n        const errorCallback = (error: Error) => {\n          reject(error);\n        }\n        const tlsSocket = tlsConnect(tlsConnectOptions, () => {\n          tlsSocket.removeListener('close', closeCallback);\n          tlsSocket.removeListener('error', errorCallback);\n          if ((this.parent.verifyOptions.rejectUnauthorized ?? true) && !tlsSocket.authorized) {\n            reject(tlsSocket.authorizationError);\n            return;\n          }\n          resolve({\n            socket: tlsSocket,\n            secure: true\n          });\n        });\n        tlsSocket.once('close', closeCallback);\n        tlsSocket.once('error', errorCallback);\n      });\n    }\n\n    async waitForReady(): Promise<void> {\n      await this.parent.getSecureContext();\n    }\n\n    getCallCredentials(): CallCredentials {\n      return this.callCredentials;\n    }\n\n    destroy() {\n      this.parent.unref();\n    }\n  }\n  constructor(\n    private caCertificateProvider: CertificateProvider,\n    private identityCertificateProvider: CertificateProvider | null,\n    private verifyOptions: VerifyOptions\n  ) {\n    super();\n  }\n  _isSecure(): boolean {\n    return true;\n  }\n  _equals(other: ChannelCredentials): boolean {\n    if (this === other) {\n      return true;\n    }\n    if (other instanceof CertificateProviderChannelCredentialsImpl) {\n      return this.caCertificateProvider === other.caCertificateProvider &&\n        this.identityCertificateProvider === other.identityCertificateProvider &&\n        this.verifyOptions?.checkServerIdentity === other.verifyOptions?.checkServerIdentity;\n    } else {\n      return false;\n    }\n  }\n  private ref(): void {\n    if (this.refcount === 0) {\n      this.caCertificateProvider.addCaCertificateListener(this.caCertificateUpdateListener);\n      this.identityCertificateProvider?.addIdentityCertificateListener(this.identityCertificateUpdateListener);\n    }\n    this.refcount += 1;\n  }\n  private unref(): void {\n    this.refcount -= 1;\n    if (this.refcount === 0) {\n      this.caCertificateProvider.removeCaCertificateListener(this.caCertificateUpdateListener);\n      this.identityCertificateProvider?.removeIdentityCertificateListener(this.identityCertificateUpdateListener);\n    }\n  }\n  _createSecureConnector(channelTarget: GrpcUri, options: ChannelOptions, callCredentials?: CallCredentials): SecureConnector {\n    this.ref();\n    return new CertificateProviderChannelCredentialsImpl.SecureConnectorImpl(this, channelTarget, options, callCredentials ?? CallCredentials.createEmpty());\n  }\n\n  private maybeUpdateWatchers() {\n    if (this.hasReceivedUpdates()) {\n      for (const watcher of this.secureContextWatchers) {\n        watcher(this.getLatestSecureContext());\n      }\n      this.secureContextWatchers = [];\n    }\n  }\n\n  private handleCaCertificateUpdate(update: CaCertificateUpdate | null) {\n    this.latestCaUpdate = update;\n    this.maybeUpdateWatchers();\n  }\n\n  private handleIdentityCertitificateUpdate(update: IdentityCertificateUpdate | null) {\n    this.latestIdentityUpdate = update;\n    this.maybeUpdateWatchers();\n  }\n\n  private hasReceivedUpdates(): boolean {\n    if (this.latestCaUpdate === undefined) {\n      return false;\n    }\n    if (this.identityCertificateProvider && this.latestIdentityUpdate === undefined) {\n      return false;\n    }\n    return true;\n  }\n\n  private getSecureContext(): Promise<SecureContext | null> {\n    if (this.hasReceivedUpdates()) {\n      return Promise.resolve(this.getLatestSecureContext());\n    } else {\n      return new Promise(resolve => {\n        this.secureContextWatchers.push(resolve);\n      });\n    }\n  }\n\n  private getLatestSecureContext(): SecureContext | null {\n    if (!this.latestCaUpdate) {\n      return null;\n    }\n    if (this.identityCertificateProvider !== null && !this.latestIdentityUpdate) {\n      return null;\n    }\n    try {\n      return createSecureContext({\n        ca: this.latestCaUpdate.caCertificate,\n        key: this.latestIdentityUpdate?.privateKey,\n        cert: this.latestIdentityUpdate?.certificate,\n        ciphers: CIPHER_SUITES\n      });\n    } catch (e) {\n      log(LogVerbosity.ERROR, 'Failed to createSecureContext with error ' + (e as Error).message);\n      return null;\n    }\n  }\n}\n\nexport function createCertificateProviderChannelCredentials(caCertificateProvider: CertificateProvider, identityCertificateProvider: CertificateProvider | null, verifyOptions?: VerifyOptions) {\n  return new CertificateProviderChannelCredentialsImpl(caCertificateProvider, identityCertificateProvider, verifyOptions ?? {});\n}\n\nclass ComposedChannelCredentialsImpl extends ChannelCredentials {\n  constructor(\n    private channelCredentials: ChannelCredentials,\n    private callCredentials: CallCredentials\n  ) {\n    super();\n    if (!channelCredentials._isSecure()) {\n      throw new Error('Cannot compose insecure credentials');\n    }\n  }\n  compose(callCredentials: CallCredentials) {\n    const combinedCallCredentials =\n      this.callCredentials.compose(callCredentials);\n    return new ComposedChannelCredentialsImpl(\n      this.channelCredentials,\n      combinedCallCredentials\n    );\n  }\n  _isSecure(): boolean {\n    return true;\n  }\n  _equals(other: ChannelCredentials): boolean {\n    if (this === other) {\n      return true;\n    }\n    if (other instanceof ComposedChannelCredentialsImpl) {\n      return (\n        this.channelCredentials._equals(other.channelCredentials) &&\n        this.callCredentials._equals(other.callCredentials)\n      );\n    } else {\n      return false;\n    }\n  }\n  _createSecureConnector(channelTarget: GrpcUri, options: ChannelOptions, callCredentials?: CallCredentials): SecureConnector {\n    const combinedCallCredentials = this.callCredentials.compose(callCredentials ?? CallCredentials.createEmpty());\n    return this.channelCredentials._createSecureConnector(channelTarget, options, combinedCallCredentials);\n  }\n}\n","/*\n * Copyright 2019 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport { ChannelOptions } from './channel-options';\nimport { Endpoint, SubchannelAddress } from './subchannel-address';\nimport { ConnectivityState } from './connectivity-state';\nimport { Picker } from './picker';\nimport type { ChannelRef, SubchannelRef } from './channelz';\nimport { SubchannelInterface } from './subchannel-interface';\nimport { LoadBalancingConfig } from './service-config';\nimport { log } from './logging';\nimport { LogVerbosity } from './constants';\nimport { StatusOr } from './call-interface';\n\n/**\n * A collection of functions associated with a channel that a load balancer\n * can call as necessary.\n */\nexport interface ChannelControlHelper {\n  /**\n   * Returns a subchannel connected to the specified address.\n   * @param subchannelAddress The address to connect to\n   * @param subchannelArgs Channel arguments to use to construct the subchannel\n   */\n  createSubchannel(\n    subchannelAddress: SubchannelAddress,\n    subchannelArgs: ChannelOptions\n  ): SubchannelInterface;\n  /**\n   * Passes a new subchannel picker up to the channel. This is called if either\n   * the connectivity state changes or if a different picker is needed for any\n   * other reason.\n   * @param connectivityState New connectivity state\n   * @param picker New picker\n   */\n  updateState(\n    connectivityState: ConnectivityState,\n    picker: Picker,\n    errorMessage: string | null\n  ): void;\n  /**\n   * Request new data from the resolver.\n   */\n  requestReresolution(): void;\n  addChannelzChild(child: ChannelRef | SubchannelRef): void;\n  removeChannelzChild(child: ChannelRef | SubchannelRef): void;\n}\n\n/**\n * Create a child ChannelControlHelper that overrides some methods of the\n * parent while letting others pass through to the parent unmodified. This\n * allows other code to create these children without needing to know about\n * all of the methods to be passed through.\n * @param parent\n * @param overrides\n */\nexport function createChildChannelControlHelper(\n  parent: ChannelControlHelper,\n  overrides: Partial<ChannelControlHelper>\n): ChannelControlHelper {\n  return {\n    createSubchannel:\n      overrides.createSubchannel?.bind(overrides) ??\n      parent.createSubchannel.bind(parent),\n    updateState:\n      overrides.updateState?.bind(overrides) ?? parent.updateState.bind(parent),\n    requestReresolution:\n      overrides.requestReresolution?.bind(overrides) ??\n      parent.requestReresolution.bind(parent),\n    addChannelzChild:\n      overrides.addChannelzChild?.bind(overrides) ??\n      parent.addChannelzChild.bind(parent),\n    removeChannelzChild:\n      overrides.removeChannelzChild?.bind(overrides) ??\n      parent.removeChannelzChild.bind(parent),\n  };\n}\n\n/**\n * Tracks one or more connected subchannels and determines which subchannel\n * each request should use.\n */\nexport interface LoadBalancer {\n  /**\n   * Gives the load balancer a new list of addresses to start connecting to.\n   * The load balancer will start establishing connections with the new list,\n   * but will continue using any existing connections until the new connections\n   * are established\n   * @param endpointList The new list of addresses to connect to\n   * @param lbConfig The load balancing config object from the service config,\n   *     if one was provided\n   * @param channelOptions Channel options from the channel, plus resolver\n   *     attributes\n   * @param resolutionNote A not from the resolver to include in errors\n   */\n  updateAddressList(\n    endpointList: StatusOr<Endpoint[]>,\n    lbConfig: TypedLoadBalancingConfig,\n    channelOptions: ChannelOptions,\n    resolutionNote: string\n  ): boolean;\n  /**\n   * If the load balancer is currently in the IDLE state, start connecting.\n   */\n  exitIdle(): void;\n  /**\n   * If the load balancer is currently in the CONNECTING or TRANSIENT_FAILURE\n   * state, reset the current connection backoff timeout to its base value and\n   * transition to CONNECTING if in TRANSIENT_FAILURE.\n   */\n  resetBackoff(): void;\n  /**\n   * The load balancer unrefs all of its subchannels and stops calling methods\n   * of its channel control helper.\n   */\n  destroy(): void;\n  /**\n   * Get the type name for this load balancer type. Must be constant across an\n   * entire load balancer implementation class and must match the name that the\n   * balancer implementation class was registered with.\n   */\n  getTypeName(): string;\n}\n\nexport interface LoadBalancerConstructor {\n  new (\n    channelControlHelper: ChannelControlHelper\n  ): LoadBalancer;\n}\n\nexport interface TypedLoadBalancingConfig {\n  getLoadBalancerName(): string;\n  toJsonObject(): object;\n}\n\nexport interface TypedLoadBalancingConfigConstructor {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  new (...args: any): TypedLoadBalancingConfig;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  createFromJson(obj: any): TypedLoadBalancingConfig;\n}\n\nconst registeredLoadBalancerTypes: {\n  [name: string]: {\n    LoadBalancer: LoadBalancerConstructor;\n    LoadBalancingConfig: TypedLoadBalancingConfigConstructor;\n  };\n} = {};\n\nlet defaultLoadBalancerType: string | null = null;\n\nexport function registerLoadBalancerType(\n  typeName: string,\n  loadBalancerType: LoadBalancerConstructor,\n  loadBalancingConfigType: TypedLoadBalancingConfigConstructor\n) {\n  registeredLoadBalancerTypes[typeName] = {\n    LoadBalancer: loadBalancerType,\n    LoadBalancingConfig: loadBalancingConfigType,\n  };\n}\n\nexport function registerDefaultLoadBalancerType(typeName: string) {\n  defaultLoadBalancerType = typeName;\n}\n\nexport function createLoadBalancer(\n  config: TypedLoadBalancingConfig,\n  channelControlHelper: ChannelControlHelper\n): LoadBalancer | null {\n  const typeName = config.getLoadBalancerName();\n  if (typeName in registeredLoadBalancerTypes) {\n    return new registeredLoadBalancerTypes[typeName].LoadBalancer(\n      channelControlHelper\n    );\n  } else {\n    return null;\n  }\n}\n\nexport function isLoadBalancerNameRegistered(typeName: string): boolean {\n  return typeName in registeredLoadBalancerTypes;\n}\n\nexport function parseLoadBalancingConfig(\n  rawConfig: LoadBalancingConfig\n): TypedLoadBalancingConfig {\n  const keys = Object.keys(rawConfig);\n  if (keys.length !== 1) {\n    throw new Error(\n      'Provided load balancing config has multiple conflicting entries'\n    );\n  }\n  const typeName = keys[0];\n  if (typeName in registeredLoadBalancerTypes) {\n    try {\n      return registeredLoadBalancerTypes[\n        typeName\n      ].LoadBalancingConfig.createFromJson(rawConfig[typeName]);\n    } catch (e) {\n      throw new Error(`${typeName}: ${(e as Error).message}`);\n    }\n  } else {\n    throw new Error(`Unrecognized load balancing config name ${typeName}`);\n  }\n}\n\nexport function getDefaultConfig() {\n  if (!defaultLoadBalancerType) {\n    throw new Error('No default load balancer type registered');\n  }\n  return new registeredLoadBalancerTypes[\n    defaultLoadBalancerType\n  ]!.LoadBalancingConfig();\n}\n\nexport function selectLbConfigFromList(\n  configs: LoadBalancingConfig[],\n  fallbackTodefault = false\n): TypedLoadBalancingConfig | null {\n  for (const config of configs) {\n    try {\n      return parseLoadBalancingConfig(config);\n    } catch (e) {\n      log(\n        LogVerbosity.DEBUG,\n        'Config parsing failed with error',\n        (e as Error).message\n      );\n      continue;\n    }\n  }\n  if (fallbackTodefault) {\n    if (defaultLoadBalancerType) {\n      return new registeredLoadBalancerTypes[\n        defaultLoadBalancerType\n      ]!.LoadBalancingConfig();\n    } else {\n      return null;\n    }\n  } else {\n    return null;\n  }\n}\n","/*\n * Copyright 2019 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n/* This file implements gRFC A2 and the service config spec:\n * https://github.com/grpc/proposal/blob/master/A2-service-configs-in-dns.md\n * https://github.com/grpc/grpc/blob/master/doc/service_config.md. Each\n * function here takes an object with unknown structure and returns its\n * specific object type if the input has the right structure, and throws an\n * error otherwise. */\n\n/* The any type is purposely used here. All functions validate their input at\n * runtime */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport * as os from 'os';\nimport { Status } from './constants';\nimport { Duration } from './duration';\n\nexport interface MethodConfigName {\n  service?: string;\n  method?: string;\n}\n\nexport interface RetryPolicy {\n  maxAttempts: number;\n  initialBackoff: string;\n  maxBackoff: string;\n  backoffMultiplier: number;\n  retryableStatusCodes: (Status | string)[];\n}\n\nexport interface HedgingPolicy {\n  maxAttempts: number;\n  hedgingDelay?: string;\n  nonFatalStatusCodes?: (Status | string)[];\n}\n\nexport interface MethodConfig {\n  name: MethodConfigName[];\n  waitForReady?: boolean;\n  timeout?: Duration;\n  maxRequestBytes?: number;\n  maxResponseBytes?: number;\n  retryPolicy?: RetryPolicy;\n  hedgingPolicy?: HedgingPolicy;\n}\n\nexport interface RetryThrottling {\n  maxTokens: number;\n  tokenRatio: number;\n}\n\nexport interface LoadBalancingConfig {\n  [key: string]: object;\n}\n\nexport interface ServiceConfig {\n  loadBalancingPolicy?: string;\n  loadBalancingConfig: LoadBalancingConfig[];\n  methodConfig: MethodConfig[];\n  retryThrottling?: RetryThrottling;\n}\n\nexport interface ServiceConfigCanaryConfig {\n  clientLanguage?: string[];\n  percentage?: number;\n  clientHostname?: string[];\n  serviceConfig: ServiceConfig;\n}\n\n/**\n * Recognizes a number with up to 9 digits after the decimal point, followed by\n * an \"s\", representing a number of seconds.\n */\nconst DURATION_REGEX = /^\\d+(\\.\\d{1,9})?s$/;\n\n/**\n * Client language name used for determining whether this client matches a\n * `ServiceConfigCanaryConfig`'s `clientLanguage` list.\n */\nconst CLIENT_LANGUAGE_STRING = 'node';\n\nfunction validateName(obj: any): MethodConfigName {\n  // In this context, and unset field and '' are considered the same\n  if ('service' in obj && obj.service !== '') {\n    if (typeof obj.service !== 'string') {\n      throw new Error(\n        `Invalid method config name: invalid service: expected type string, got ${typeof obj.service}`\n      );\n    }\n    if ('method' in obj && obj.method !== '') {\n      if (typeof obj.method !== 'string') {\n        throw new Error(\n          `Invalid method config name: invalid method: expected type string, got ${typeof obj.service}`\n        );\n      }\n      return {\n        service: obj.service,\n        method: obj.method,\n      };\n    } else {\n      return {\n        service: obj.service,\n      };\n    }\n  } else {\n    if ('method' in obj && obj.method !== undefined) {\n      throw new Error(\n        `Invalid method config name: method set with empty or unset service`\n      );\n    }\n    return {};\n  }\n}\n\nfunction validateRetryPolicy(obj: any): RetryPolicy {\n  if (\n    !('maxAttempts' in obj) ||\n    !Number.isInteger(obj.maxAttempts) ||\n    obj.maxAttempts < 2\n  ) {\n    throw new Error(\n      'Invalid method config retry policy: maxAttempts must be an integer at least 2'\n    );\n  }\n  if (\n    !('initialBackoff' in obj) ||\n    typeof obj.initialBackoff !== 'string' ||\n    !DURATION_REGEX.test(obj.initialBackoff)\n  ) {\n    throw new Error(\n      'Invalid method config retry policy: initialBackoff must be a string consisting of a positive integer or decimal followed by s'\n    );\n  }\n  if (\n    !('maxBackoff' in obj) ||\n    typeof obj.maxBackoff !== 'string' ||\n    !DURATION_REGEX.test(obj.maxBackoff)\n  ) {\n    throw new Error(\n      'Invalid method config retry policy: maxBackoff must be a string consisting of a positive integer or decimal followed by s'\n    );\n  }\n  if (\n    !('backoffMultiplier' in obj) ||\n    typeof obj.backoffMultiplier !== 'number' ||\n    obj.backoffMultiplier <= 0\n  ) {\n    throw new Error(\n      'Invalid method config retry policy: backoffMultiplier must be a number greater than 0'\n    );\n  }\n  if (\n    !('retryableStatusCodes' in obj && Array.isArray(obj.retryableStatusCodes))\n  ) {\n    throw new Error(\n      'Invalid method config retry policy: retryableStatusCodes is required'\n    );\n  }\n  if (obj.retryableStatusCodes.length === 0) {\n    throw new Error(\n      'Invalid method config retry policy: retryableStatusCodes must be non-empty'\n    );\n  }\n  for (const value of obj.retryableStatusCodes) {\n    if (typeof value === 'number') {\n      if (!Object.values(Status).includes(value)) {\n        throw new Error(\n          'Invalid method config retry policy: retryableStatusCodes value not in status code range'\n        );\n      }\n    } else if (typeof value === 'string') {\n      if (!Object.values(Status).includes(value.toUpperCase())) {\n        throw new Error(\n          'Invalid method config retry policy: retryableStatusCodes value not a status code name'\n        );\n      }\n    } else {\n      throw new Error(\n        'Invalid method config retry policy: retryableStatusCodes value must be a string or number'\n      );\n    }\n  }\n  return {\n    maxAttempts: obj.maxAttempts,\n    initialBackoff: obj.initialBackoff,\n    maxBackoff: obj.maxBackoff,\n    backoffMultiplier: obj.backoffMultiplier,\n    retryableStatusCodes: obj.retryableStatusCodes,\n  };\n}\n\nfunction validateHedgingPolicy(obj: any): HedgingPolicy {\n  if (\n    !('maxAttempts' in obj) ||\n    !Number.isInteger(obj.maxAttempts) ||\n    obj.maxAttempts < 2\n  ) {\n    throw new Error(\n      'Invalid method config hedging policy: maxAttempts must be an integer at least 2'\n    );\n  }\n  if (\n    'hedgingDelay' in obj &&\n    (typeof obj.hedgingDelay !== 'string' ||\n      !DURATION_REGEX.test(obj.hedgingDelay))\n  ) {\n    throw new Error(\n      'Invalid method config hedging policy: hedgingDelay must be a string consisting of a positive integer followed by s'\n    );\n  }\n  if ('nonFatalStatusCodes' in obj && Array.isArray(obj.nonFatalStatusCodes)) {\n    for (const value of obj.nonFatalStatusCodes) {\n      if (typeof value === 'number') {\n        if (!Object.values(Status).includes(value)) {\n          throw new Error(\n            'Invalid method config hedging policy: nonFatalStatusCodes value not in status code range'\n          );\n        }\n      } else if (typeof value === 'string') {\n        if (!Object.values(Status).includes(value.toUpperCase())) {\n          throw new Error(\n            'Invalid method config hedging policy: nonFatalStatusCodes value not a status code name'\n          );\n        }\n      } else {\n        throw new Error(\n          'Invalid method config hedging policy: nonFatalStatusCodes value must be a string or number'\n        );\n      }\n    }\n  }\n  const result: HedgingPolicy = {\n    maxAttempts: obj.maxAttempts,\n  };\n  if (obj.hedgingDelay) {\n    result.hedgingDelay = obj.hedgingDelay;\n  }\n  if (obj.nonFatalStatusCodes) {\n    result.nonFatalStatusCodes = obj.nonFatalStatusCodes;\n  }\n  return result;\n}\n\nfunction validateMethodConfig(obj: any): MethodConfig {\n  const result: MethodConfig = {\n    name: [],\n  };\n  if (!('name' in obj) || !Array.isArray(obj.name)) {\n    throw new Error('Invalid method config: invalid name array');\n  }\n  for (const name of obj.name) {\n    result.name.push(validateName(name));\n  }\n  if ('waitForReady' in obj) {\n    if (typeof obj.waitForReady !== 'boolean') {\n      throw new Error('Invalid method config: invalid waitForReady');\n    }\n    result.waitForReady = obj.waitForReady;\n  }\n  if ('timeout' in obj) {\n    if (typeof obj.timeout === 'object') {\n      if (\n        !('seconds' in obj.timeout) ||\n        !(typeof obj.timeout.seconds === 'number')\n      ) {\n        throw new Error('Invalid method config: invalid timeout.seconds');\n      }\n      if (\n        !('nanos' in obj.timeout) ||\n        !(typeof obj.timeout.nanos === 'number')\n      ) {\n        throw new Error('Invalid method config: invalid timeout.nanos');\n      }\n      result.timeout = obj.timeout;\n    } else if (\n      typeof obj.timeout === 'string' &&\n      DURATION_REGEX.test(obj.timeout)\n    ) {\n      const timeoutParts = obj.timeout\n        .substring(0, obj.timeout.length - 1)\n        .split('.');\n      result.timeout = {\n        seconds: timeoutParts[0] | 0,\n        nanos: (timeoutParts[1] ?? 0) | 0,\n      };\n    } else {\n      throw new Error('Invalid method config: invalid timeout');\n    }\n  }\n  if ('maxRequestBytes' in obj) {\n    if (typeof obj.maxRequestBytes !== 'number') {\n      throw new Error('Invalid method config: invalid maxRequestBytes');\n    }\n    result.maxRequestBytes = obj.maxRequestBytes;\n  }\n  if ('maxResponseBytes' in obj) {\n    if (typeof obj.maxResponseBytes !== 'number') {\n      throw new Error('Invalid method config: invalid maxRequestBytes');\n    }\n    result.maxResponseBytes = obj.maxResponseBytes;\n  }\n  if ('retryPolicy' in obj) {\n    if ('hedgingPolicy' in obj) {\n      throw new Error(\n        'Invalid method config: retryPolicy and hedgingPolicy cannot both be specified'\n      );\n    } else {\n      result.retryPolicy = validateRetryPolicy(obj.retryPolicy);\n    }\n  } else if ('hedgingPolicy' in obj) {\n    result.hedgingPolicy = validateHedgingPolicy(obj.hedgingPolicy);\n  }\n  return result;\n}\n\nexport function validateRetryThrottling(obj: any): RetryThrottling {\n  if (\n    !('maxTokens' in obj) ||\n    typeof obj.maxTokens !== 'number' ||\n    obj.maxTokens <= 0 ||\n    obj.maxTokens > 1000\n  ) {\n    throw new Error(\n      'Invalid retryThrottling: maxTokens must be a number in (0, 1000]'\n    );\n  }\n  if (\n    !('tokenRatio' in obj) ||\n    typeof obj.tokenRatio !== 'number' ||\n    obj.tokenRatio <= 0\n  ) {\n    throw new Error(\n      'Invalid retryThrottling: tokenRatio must be a number greater than 0'\n    );\n  }\n  return {\n    maxTokens: +(obj.maxTokens as number).toFixed(3),\n    tokenRatio: +(obj.tokenRatio as number).toFixed(3),\n  };\n}\n\nfunction validateLoadBalancingConfig(obj: any): LoadBalancingConfig {\n  if (!(typeof obj === 'object' && obj !== null)) {\n    throw new Error(\n      `Invalid loadBalancingConfig: unexpected type ${typeof obj}`\n    );\n  }\n  const keys = Object.keys(obj);\n  if (keys.length > 1) {\n    throw new Error(\n      `Invalid loadBalancingConfig: unexpected multiple keys ${keys}`\n    );\n  }\n  if (keys.length === 0) {\n    throw new Error(\n      'Invalid loadBalancingConfig: load balancing policy name required'\n    );\n  }\n  return {\n    [keys[0]]: obj[keys[0]],\n  };\n}\n\nexport function validateServiceConfig(obj: any): ServiceConfig {\n  const result: ServiceConfig = {\n    loadBalancingConfig: [],\n    methodConfig: [],\n  };\n  if ('loadBalancingPolicy' in obj) {\n    if (typeof obj.loadBalancingPolicy === 'string') {\n      result.loadBalancingPolicy = obj.loadBalancingPolicy;\n    } else {\n      throw new Error('Invalid service config: invalid loadBalancingPolicy');\n    }\n  }\n  if ('loadBalancingConfig' in obj) {\n    if (Array.isArray(obj.loadBalancingConfig)) {\n      for (const config of obj.loadBalancingConfig) {\n        result.loadBalancingConfig.push(validateLoadBalancingConfig(config));\n      }\n    } else {\n      throw new Error('Invalid service config: invalid loadBalancingConfig');\n    }\n  }\n  if ('methodConfig' in obj) {\n    if (Array.isArray(obj.methodConfig)) {\n      for (const methodConfig of obj.methodConfig) {\n        result.methodConfig.push(validateMethodConfig(methodConfig));\n      }\n    }\n  }\n  if ('retryThrottling' in obj) {\n    result.retryThrottling = validateRetryThrottling(obj.retryThrottling);\n  }\n  // Validate method name uniqueness\n  const seenMethodNames: MethodConfigName[] = [];\n  for (const methodConfig of result.methodConfig) {\n    for (const name of methodConfig.name) {\n      for (const seenName of seenMethodNames) {\n        if (\n          name.service === seenName.service &&\n          name.method === seenName.method\n        ) {\n          throw new Error(\n            `Invalid service config: duplicate name ${name.service}/${name.method}`\n          );\n        }\n      }\n      seenMethodNames.push(name);\n    }\n  }\n  return result;\n}\n\nfunction validateCanaryConfig(obj: any): ServiceConfigCanaryConfig {\n  if (!('serviceConfig' in obj)) {\n    throw new Error('Invalid service config choice: missing service config');\n  }\n  const result: ServiceConfigCanaryConfig = {\n    serviceConfig: validateServiceConfig(obj.serviceConfig),\n  };\n  if ('clientLanguage' in obj) {\n    if (Array.isArray(obj.clientLanguage)) {\n      result.clientLanguage = [];\n      for (const lang of obj.clientLanguage) {\n        if (typeof lang === 'string') {\n          result.clientLanguage.push(lang);\n        } else {\n          throw new Error(\n            'Invalid service config choice: invalid clientLanguage'\n          );\n        }\n      }\n    } else {\n      throw new Error('Invalid service config choice: invalid clientLanguage');\n    }\n  }\n  if ('clientHostname' in obj) {\n    if (Array.isArray(obj.clientHostname)) {\n      result.clientHostname = [];\n      for (const lang of obj.clientHostname) {\n        if (typeof lang === 'string') {\n          result.clientHostname.push(lang);\n        } else {\n          throw new Error(\n            'Invalid service config choice: invalid clientHostname'\n          );\n        }\n      }\n    } else {\n      throw new Error('Invalid service config choice: invalid clientHostname');\n    }\n  }\n  if ('percentage' in obj) {\n    if (\n      typeof obj.percentage === 'number' &&\n      0 <= obj.percentage &&\n      obj.percentage <= 100\n    ) {\n      result.percentage = obj.percentage;\n    } else {\n      throw new Error('Invalid service config choice: invalid percentage');\n    }\n  }\n  // Validate that no unexpected fields are present\n  const allowedFields = [\n    'clientLanguage',\n    'percentage',\n    'clientHostname',\n    'serviceConfig',\n  ];\n  for (const field in obj) {\n    if (!allowedFields.includes(field)) {\n      throw new Error(\n        `Invalid service config choice: unexpected field ${field}`\n      );\n    }\n  }\n  return result;\n}\n\nfunction validateAndSelectCanaryConfig(\n  obj: any,\n  percentage: number\n): ServiceConfig {\n  if (!Array.isArray(obj)) {\n    throw new Error('Invalid service config list');\n  }\n  for (const config of obj) {\n    const validatedConfig = validateCanaryConfig(config);\n    /* For each field, we check if it is present, then only discard the\n     * config if the field value does not match the current client */\n    if (\n      typeof validatedConfig.percentage === 'number' &&\n      percentage > validatedConfig.percentage\n    ) {\n      continue;\n    }\n    if (Array.isArray(validatedConfig.clientHostname)) {\n      let hostnameMatched = false;\n      for (const hostname of validatedConfig.clientHostname) {\n        if (hostname === os.hostname()) {\n          hostnameMatched = true;\n        }\n      }\n      if (!hostnameMatched) {\n        continue;\n      }\n    }\n    if (Array.isArray(validatedConfig.clientLanguage)) {\n      let languageMatched = false;\n      for (const language of validatedConfig.clientLanguage) {\n        if (language === CLIENT_LANGUAGE_STRING) {\n          languageMatched = true;\n        }\n      }\n      if (!languageMatched) {\n        continue;\n      }\n    }\n    return validatedConfig.serviceConfig;\n  }\n  throw new Error('No matching service config found');\n}\n\n/**\n * Find the \"grpc_config\" record among the TXT records, parse its value as JSON, validate its contents,\n * and select a service config with selection fields that all match this client. Most of these steps\n * can fail with an error; the caller must handle any errors thrown this way.\n * @param txtRecord The TXT record array that is output from a successful call to dns.resolveTxt\n * @param percentage A number chosen from the range [0, 100) that is used to select which config to use\n * @return The service configuration to use, given the percentage value, or null if the service config\n *     data has a valid format but none of the options match the current client.\n */\nexport function extractAndSelectServiceConfig(\n  txtRecord: string[][],\n  percentage: number\n): ServiceConfig | null {\n  for (const record of txtRecord) {\n    if (record.length > 0 && record[0].startsWith('grpc_config=')) {\n      /* Treat the list of strings in this record as a single string and remove\n       * \"grpc_config=\" from the beginning. The rest should be a JSON string */\n      const recordString = record.join('').substring('grpc_config='.length);\n      const recordJson: any = JSON.parse(recordString);\n      return validateAndSelectCanaryConfig(recordJson, percentage);\n    }\n  }\n  return null;\n}\n","/*\n * Copyright 2021 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nexport enum ConnectivityState {\n  IDLE,\n  CONNECTING,\n  READY,\n  TRANSIENT_FAILURE,\n  SHUTDOWN,\n}\n","/*\n * Copyright 2019 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport { StatusObject } from './call-interface';\nimport { Metadata } from './metadata';\nimport { Status } from './constants';\nimport { LoadBalancer } from './load-balancer';\nimport { SubchannelInterface } from './subchannel-interface';\n\nexport enum PickResultType {\n  COMPLETE,\n  QUEUE,\n  TRANSIENT_FAILURE,\n  DROP,\n}\n\nexport type OnCallEnded = (statusCode: Status, details: string, metadata: Metadata) => void;\n\nexport interface PickResult {\n  pickResultType: PickResultType;\n  /**\n   * The subchannel to use as the transport for the call. Only meaningful if\n   * `pickResultType` is COMPLETE. If null, indicates that the call should be\n   * dropped.\n   */\n  subchannel: SubchannelInterface | null;\n  /**\n   * The status object to end the call with. Populated if and only if\n   * `pickResultType` is TRANSIENT_FAILURE.\n   */\n  status: StatusObject | null;\n  onCallStarted: (() => void) | null;\n  onCallEnded: OnCallEnded | null;\n}\n\nexport interface CompletePickResult extends PickResult {\n  pickResultType: PickResultType.COMPLETE;\n  subchannel: SubchannelInterface | null;\n  status: null;\n  onCallStarted: (() => void) | null;\n  onCallEnded: OnCallEnded | null;\n}\n\nexport interface QueuePickResult extends PickResult {\n  pickResultType: PickResultType.QUEUE;\n  subchannel: null;\n  status: null;\n  onCallStarted: null;\n  onCallEnded: null;\n}\n\nexport interface TransientFailurePickResult extends PickResult {\n  pickResultType: PickResultType.TRANSIENT_FAILURE;\n  subchannel: null;\n  status: StatusObject;\n  onCallStarted: null;\n  onCallEnded: null;\n}\n\nexport interface DropCallPickResult extends PickResult {\n  pickResultType: PickResultType.DROP;\n  subchannel: null;\n  status: StatusObject;\n  onCallStarted: null;\n  onCallEnded: null;\n}\n\nexport interface PickArgs {\n  metadata: Metadata;\n  extraPickInfo: { [key: string]: string };\n}\n\n/**\n * A proxy object representing the momentary state of a load balancer. Picks\n * subchannels or returns other information based on that state. Should be\n * replaced every time the load balancer changes state.\n */\nexport interface Picker {\n  pick(pickArgs: PickArgs): PickResult;\n}\n\n/**\n * A standard picker representing a load balancer in the TRANSIENT_FAILURE\n * state. Always responds to every pick request with an UNAVAILABLE status.\n */\nexport class UnavailablePicker implements Picker {\n  private status: StatusObject;\n  constructor(status?: Partial<StatusObject>) {\n    this.status = {\n      code: Status.UNAVAILABLE,\n      details: 'No connection established',\n      metadata: new Metadata(),\n      ...status,\n    };\n  }\n  pick(pickArgs: PickArgs): TransientFailurePickResult {\n    return {\n      pickResultType: PickResultType.TRANSIENT_FAILURE,\n      subchannel: null,\n      status: this.status,\n      onCallStarted: null,\n      onCallEnded: null,\n    };\n  }\n}\n\n/**\n * A standard picker representing a load balancer in the IDLE or CONNECTING\n * state. Always responds to every pick request with a QUEUE pick result\n * indicating that the pick should be tried again with the next `Picker`. Also\n * reports back to the load balancer that a connection should be established\n * once any pick is attempted.\n * If the childPicker is provided, delegate to it instead of returning the\n * hardcoded QUEUE pick result, but still calls exitIdle.\n */\nexport class QueuePicker {\n  private calledExitIdle = false;\n  // Constructed with a load balancer. Calls exitIdle on it the first time pick is called\n  constructor(\n    private loadBalancer: LoadBalancer,\n    private childPicker?: Picker\n  ) {}\n\n  pick(pickArgs: PickArgs): PickResult {\n    if (!this.calledExitIdle) {\n      process.nextTick(() => {\n        this.loadBalancer.exitIdle();\n      });\n      this.calledExitIdle = true;\n    }\n    if (this.childPicker) {\n      return this.childPicker.pick(pickArgs);\n    } else {\n      return {\n        pickResultType: PickResultType.QUEUE,\n        subchannel: null,\n        status: null,\n        onCallStarted: null,\n        onCallEnded: null,\n      };\n    }\n  }\n}\n","/*\n * Copyright 2019 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport { LogVerbosity } from './constants';\nimport * as logging from './logging';\n\nconst TRACER_NAME = 'backoff';\n\nconst INITIAL_BACKOFF_MS = 1000;\nconst BACKOFF_MULTIPLIER = 1.6;\nconst MAX_BACKOFF_MS = 120000;\nconst BACKOFF_JITTER = 0.2;\n\n/**\n * Get a number uniformly at random in the range [min, max)\n * @param min\n * @param max\n */\nfunction uniformRandom(min: number, max: number) {\n  return Math.random() * (max - min) + min;\n}\n\nexport interface BackoffOptions {\n  initialDelay?: number;\n  multiplier?: number;\n  jitter?: number;\n  maxDelay?: number;\n}\n\nexport class BackoffTimeout {\n  /**\n   * The delay time at the start, and after each reset.\n   */\n  private readonly initialDelay: number = INITIAL_BACKOFF_MS;\n  /**\n   * The exponential backoff multiplier.\n   */\n  private readonly multiplier: number = BACKOFF_MULTIPLIER;\n  /**\n   * The maximum delay time\n   */\n  private readonly maxDelay: number = MAX_BACKOFF_MS;\n  /**\n   * The maximum fraction by which the delay time can randomly vary after\n   * applying the multiplier.\n   */\n  private readonly jitter: number = BACKOFF_JITTER;\n  /**\n   * The delay time for the next time the timer runs.\n   */\n  private nextDelay: number;\n  /**\n   * The handle of the underlying timer. If running is false, this value refers\n   * to an object representing a timer that has ended, but it can still be\n   * interacted with without error.\n   */\n  private timerId: NodeJS.Timeout;\n  /**\n   * Indicates whether the timer is currently running.\n   */\n  private running = false;\n  /**\n   * Indicates whether the timer should keep the Node process running if no\n   * other async operation is doing so.\n   */\n  private hasRef = true;\n  /**\n   * The time that the currently running timer was started. Only valid if\n   * running is true.\n   */\n  private startTime: Date = new Date();\n  /**\n   * The approximate time that the currently running timer will end. Only valid\n   * if running is true.\n   */\n  private endTime: Date = new Date();\n\n  private id: number;\n\n  private static nextId = 0;\n\n  constructor(private callback: () => void, options?: BackoffOptions) {\n    this.id = BackoffTimeout.getNextId();\n    if (options) {\n      if (options.initialDelay) {\n        this.initialDelay = options.initialDelay;\n      }\n      if (options.multiplier) {\n        this.multiplier = options.multiplier;\n      }\n      if (options.jitter) {\n        this.jitter = options.jitter;\n      }\n      if (options.maxDelay) {\n        this.maxDelay = options.maxDelay;\n      }\n    }\n    this.trace('constructed initialDelay=' + this.initialDelay + ' multiplier=' + this.multiplier + ' jitter=' + this.jitter + ' maxDelay=' + this.maxDelay);\n    this.nextDelay = this.initialDelay;\n    this.timerId = setTimeout(() => {}, 0);\n    clearTimeout(this.timerId);\n  }\n\n  private static getNextId() {\n    return this.nextId++;\n  }\n\n  private trace(text: string) {\n    logging.trace(LogVerbosity.DEBUG, TRACER_NAME, '{' + this.id + '} ' + text);\n  }\n\n  private runTimer(delay: number) {\n    this.trace('runTimer(delay=' + delay + ')');\n    this.endTime = this.startTime;\n    this.endTime.setMilliseconds(\n      this.endTime.getMilliseconds() + delay\n    );\n    clearTimeout(this.timerId);\n    this.timerId = setTimeout(() => {\n      this.trace('timer fired');\n      this.running = false;\n      this.callback();\n    }, delay);\n    if (!this.hasRef) {\n      this.timerId.unref?.();\n    }\n  }\n\n  /**\n   * Call the callback after the current amount of delay time\n   */\n  runOnce() {\n    this.trace('runOnce()');\n    this.running = true;\n    this.startTime = new Date();\n    this.runTimer(this.nextDelay);\n    const nextBackoff = Math.min(\n      this.nextDelay * this.multiplier,\n      this.maxDelay\n    );\n    const jitterMagnitude = nextBackoff * this.jitter;\n    this.nextDelay =\n      nextBackoff + uniformRandom(-jitterMagnitude, jitterMagnitude);\n  }\n\n  /**\n   * Stop the timer. The callback will not be called until `runOnce` is called\n   * again.\n   */\n  stop() {\n    this.trace('stop()');\n    clearTimeout(this.timerId);\n    this.running = false;\n  }\n\n  /**\n   * Reset the delay time to its initial value. If the timer is still running,\n   * retroactively apply that reset to the current timer.\n   */\n  reset() {\n    this.trace('reset() running=' + this.running);\n    this.nextDelay = this.initialDelay;\n    if (this.running) {\n      const now = new Date();\n      const newEndTime = this.startTime;\n      newEndTime.setMilliseconds(newEndTime.getMilliseconds() + this.nextDelay);\n      clearTimeout(this.timerId);\n      if (now < newEndTime) {\n        this.runTimer(newEndTime.getTime() - now.getTime());\n      } else {\n        this.running = false;\n      }\n    }\n  }\n\n  /**\n   * Check whether the timer is currently running.\n   */\n  isRunning() {\n    return this.running;\n  }\n\n  /**\n   * Set that while the timer is running, it should keep the Node process\n   * running.\n   */\n  ref() {\n    this.hasRef = true;\n    this.timerId.ref?.();\n  }\n\n  /**\n   * Set that while the timer is running, it should not keep the Node process\n   * running.\n   */\n  unref() {\n    this.hasRef = false;\n    this.timerId.unref?.();\n  }\n\n  /**\n   * Get the approximate timestamp of when the timer will fire. Only valid if\n   * this.isRunning() is true.\n   */\n  getEndTime() {\n    return this.endTime;\n  }\n}\n","/*\n * Copyright 2020 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport {\n  LoadBalancer,\n  ChannelControlHelper,\n  TypedLoadBalancingConfig,\n  createLoadBalancer,\n} from './load-balancer';\nimport { Endpoint, SubchannelAddress } from './subchannel-address';\nimport { ChannelOptions } from './channel-options';\nimport { ConnectivityState } from './connectivity-state';\nimport { Picker } from './picker';\nimport type { ChannelRef, SubchannelRef } from './channelz';\nimport { SubchannelInterface } from './subchannel-interface';\nimport { StatusOr } from './call-interface';\n\nconst TYPE_NAME = 'child_load_balancer_helper';\n\nexport class ChildLoadBalancerHandler {\n  private currentChild: LoadBalancer | null = null;\n  private pendingChild: LoadBalancer | null = null;\n  private latestConfig: TypedLoadBalancingConfig | null = null;\n\n  private ChildPolicyHelper = class {\n    private child: LoadBalancer | null = null;\n    constructor(private parent: ChildLoadBalancerHandler) {}\n    createSubchannel(\n      subchannelAddress: SubchannelAddress,\n      subchannelArgs: ChannelOptions\n    ): SubchannelInterface {\n      return this.parent.channelControlHelper.createSubchannel(\n        subchannelAddress,\n        subchannelArgs\n      );\n    }\n    updateState(connectivityState: ConnectivityState, picker: Picker, errorMessage: string | null): void {\n      if (this.calledByPendingChild()) {\n        if (connectivityState === ConnectivityState.CONNECTING) {\n          return;\n        }\n        this.parent.currentChild?.destroy();\n        this.parent.currentChild = this.parent.pendingChild;\n        this.parent.pendingChild = null;\n      } else if (!this.calledByCurrentChild()) {\n        return;\n      }\n      this.parent.channelControlHelper.updateState(connectivityState, picker, errorMessage);\n    }\n    requestReresolution(): void {\n      const latestChild = this.parent.pendingChild ?? this.parent.currentChild;\n      if (this.child === latestChild) {\n        this.parent.channelControlHelper.requestReresolution();\n      }\n    }\n    setChild(newChild: LoadBalancer) {\n      this.child = newChild;\n    }\n    addChannelzChild(child: ChannelRef | SubchannelRef) {\n      this.parent.channelControlHelper.addChannelzChild(child);\n    }\n    removeChannelzChild(child: ChannelRef | SubchannelRef) {\n      this.parent.channelControlHelper.removeChannelzChild(child);\n    }\n\n    private calledByPendingChild(): boolean {\n      return this.child === this.parent.pendingChild;\n    }\n    private calledByCurrentChild(): boolean {\n      return this.child === this.parent.currentChild;\n    }\n  };\n\n  constructor(\n    private readonly channelControlHelper: ChannelControlHelper\n  ) {}\n\n  protected configUpdateRequiresNewPolicyInstance(\n    oldConfig: TypedLoadBalancingConfig,\n    newConfig: TypedLoadBalancingConfig\n  ): boolean {\n    return oldConfig.getLoadBalancerName() !== newConfig.getLoadBalancerName();\n  }\n\n  /**\n   * Prerequisites: lbConfig !== null and lbConfig.name is registered\n   * @param endpointList\n   * @param lbConfig\n   * @param attributes\n   */\n  updateAddressList(\n    endpointList: StatusOr<Endpoint[]>,\n    lbConfig: TypedLoadBalancingConfig,\n    options: ChannelOptions,\n    resolutionNote: string\n  ): boolean {\n    let childToUpdate: LoadBalancer;\n    if (\n      this.currentChild === null ||\n      this.latestConfig === null ||\n      this.configUpdateRequiresNewPolicyInstance(this.latestConfig, lbConfig)\n    ) {\n      const newHelper = new this.ChildPolicyHelper(this);\n      const newChild = createLoadBalancer(lbConfig, newHelper)!;\n      newHelper.setChild(newChild);\n      if (this.currentChild === null) {\n        this.currentChild = newChild;\n        childToUpdate = this.currentChild;\n      } else {\n        if (this.pendingChild) {\n          this.pendingChild.destroy();\n        }\n        this.pendingChild = newChild;\n        childToUpdate = this.pendingChild;\n      }\n    } else {\n      if (this.pendingChild === null) {\n        childToUpdate = this.currentChild;\n      } else {\n        childToUpdate = this.pendingChild;\n      }\n    }\n    this.latestConfig = lbConfig;\n    return childToUpdate.updateAddressList(endpointList, lbConfig, options, resolutionNote);\n  }\n  exitIdle(): void {\n    if (this.currentChild) {\n      this.currentChild.exitIdle();\n      if (this.pendingChild) {\n        this.pendingChild.exitIdle();\n      }\n    }\n  }\n  resetBackoff(): void {\n    if (this.currentChild) {\n      this.currentChild.resetBackoff();\n      if (this.pendingChild) {\n        this.pendingChild.resetBackoff();\n      }\n    }\n  }\n  destroy(): void {\n    /* Note: state updates are only propagated from the child balancer if that\n     * object is equal to this.currentChild or this.pendingChild. Since this\n     * function sets both of those to null, no further state updates will\n     * occur after this function returns. */\n    if (this.currentChild) {\n      this.currentChild.destroy();\n      this.currentChild = null;\n    }\n    if (this.pendingChild) {\n      this.pendingChild.destroy();\n      this.pendingChild = null;\n    }\n  }\n  getTypeName(): string {\n    return TYPE_NAME;\n  }\n}\n","/*\n * Copyright 2019 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport {\n  ChannelControlHelper,\n  LoadBalancer,\n  TypedLoadBalancingConfig,\n  selectLbConfigFromList,\n} from './load-balancer';\nimport {\n  MethodConfig,\n  ServiceConfig,\n  validateServiceConfig,\n} from './service-config';\nimport { ConnectivityState } from './connectivity-state';\nimport { CHANNEL_ARGS_CONFIG_SELECTOR_KEY, ConfigSelector, createResolver, Resolver } from './resolver';\nimport { Picker, UnavailablePicker, QueuePicker } from './picker';\nimport { BackoffOptions, BackoffTimeout } from './backoff-timeout';\nimport { Status } from './constants';\nimport { StatusObject, StatusOr } from './call-interface';\nimport { Metadata } from './metadata';\nimport * as logging from './logging';\nimport { LogVerbosity } from './constants';\nimport { Endpoint } from './subchannel-address';\nimport { GrpcUri, uriToString } from './uri-parser';\nimport { ChildLoadBalancerHandler } from './load-balancer-child-handler';\nimport { ChannelOptions } from './channel-options';\n\nconst TRACER_NAME = 'resolving_load_balancer';\n\nfunction trace(text: string): void {\n  logging.trace(LogVerbosity.DEBUG, TRACER_NAME, text);\n}\n\ntype NameMatchLevel = 'EMPTY' | 'SERVICE' | 'SERVICE_AND_METHOD';\n\n/**\n * Name match levels in order from most to least specific. This is the order in\n * which searches will be performed.\n */\nconst NAME_MATCH_LEVEL_ORDER: NameMatchLevel[] = [\n  'SERVICE_AND_METHOD',\n  'SERVICE',\n  'EMPTY',\n];\n\nfunction hasMatchingName(\n  service: string,\n  method: string,\n  methodConfig: MethodConfig,\n  matchLevel: NameMatchLevel\n): boolean {\n  for (const name of methodConfig.name) {\n    switch (matchLevel) {\n      case 'EMPTY':\n        if (!name.service && !name.method) {\n          return true;\n        }\n        break;\n      case 'SERVICE':\n        if (name.service === service && !name.method) {\n          return true;\n        }\n        break;\n      case 'SERVICE_AND_METHOD':\n        if (name.service === service && name.method === method) {\n          return true;\n        }\n    }\n  }\n  return false;\n}\n\nfunction findMatchingConfig(\n  service: string,\n  method: string,\n  methodConfigs: MethodConfig[],\n  matchLevel: NameMatchLevel\n): MethodConfig | null {\n  for (const config of methodConfigs) {\n    if (hasMatchingName(service, method, config, matchLevel)) {\n      return config;\n    }\n  }\n  return null;\n}\n\nfunction getDefaultConfigSelector(\n  serviceConfig: ServiceConfig | null\n): ConfigSelector {\n  return {\n      invoke(\n      methodName: string,\n      metadata: Metadata\n    ) {\n      const splitName = methodName.split('/').filter(x => x.length > 0);\n      const service = splitName[0] ?? '';\n      const method = splitName[1] ?? '';\n      if (serviceConfig && serviceConfig.methodConfig) {\n        /* Check for the following in order, and return the first method\n        * config that matches:\n        * 1. A name that exactly matches the service and method\n        * 2. A name with no method set that matches the service\n        * 3. An empty name\n        */\n        for (const matchLevel of NAME_MATCH_LEVEL_ORDER) {\n          const matchingConfig = findMatchingConfig(\n            service,\n            method,\n            serviceConfig.methodConfig,\n            matchLevel\n          );\n          if (matchingConfig) {\n            return {\n              methodConfig: matchingConfig,\n              pickInformation: {},\n              status: Status.OK,\n              dynamicFilterFactories: [],\n            };\n          }\n        }\n      }\n      return {\n        methodConfig: { name: [] },\n        pickInformation: {},\n        status: Status.OK,\n        dynamicFilterFactories: [],\n      };\n    },\n    unref() {}\n  };\n}\n\nexport interface ResolutionCallback {\n  (serviceConfig: ServiceConfig, configSelector: ConfigSelector): void;\n}\n\nexport interface ResolutionFailureCallback {\n  (status: StatusObject): void;\n}\n\nexport class ResolvingLoadBalancer implements LoadBalancer {\n  /**\n   * The resolver class constructed for the target address.\n   */\n  private readonly innerResolver: Resolver;\n\n  private readonly childLoadBalancer: ChildLoadBalancerHandler;\n  private latestChildState: ConnectivityState = ConnectivityState.IDLE;\n  private latestChildPicker: Picker = new QueuePicker(this);\n  private latestChildErrorMessage: string | null = null;\n  /**\n   * This resolving load balancer's current connectivity state.\n   */\n  private currentState: ConnectivityState = ConnectivityState.IDLE;\n  private readonly defaultServiceConfig: ServiceConfig;\n  /**\n   * The service config object from the last successful resolution, if\n   * available. A value of null indicates that we have not yet received a valid\n   * service config from the resolver.\n   */\n  private previousServiceConfig: ServiceConfig | null = null;\n\n  /**\n   * The backoff timer for handling name resolution failures.\n   */\n  private readonly backoffTimeout: BackoffTimeout;\n\n  /**\n   * Indicates whether we should attempt to resolve again after the backoff\n   * timer runs out.\n   */\n  private continueResolving = false;\n\n  /**\n   * Wrapper class that behaves like a `LoadBalancer` and also handles name\n   * resolution internally.\n   * @param target The address of the backend to connect to.\n   * @param channelControlHelper `ChannelControlHelper` instance provided by\n   *     this load balancer's owner.\n   * @param defaultServiceConfig The default service configuration to be used\n   *     if none is provided by the name resolver. A `null` value indicates\n   *     that the default behavior should be the default unconfigured behavior.\n   *     In practice, that means using the \"pick first\" load balancer\n   *     implmentation\n   */\n  constructor(\n    private readonly target: GrpcUri,\n    private readonly channelControlHelper: ChannelControlHelper,\n    private readonly channelOptions: ChannelOptions,\n    private readonly onSuccessfulResolution: ResolutionCallback,\n    private readonly onFailedResolution: ResolutionFailureCallback\n  ) {\n    if (channelOptions['grpc.service_config']) {\n      this.defaultServiceConfig = validateServiceConfig(\n        JSON.parse(channelOptions['grpc.service_config']!)\n      );\n    } else {\n      this.defaultServiceConfig = {\n        loadBalancingConfig: [],\n        methodConfig: [],\n      };\n    }\n\n    this.updateState(ConnectivityState.IDLE, new QueuePicker(this), null);\n    this.childLoadBalancer = new ChildLoadBalancerHandler(\n      {\n        createSubchannel:\n          channelControlHelper.createSubchannel.bind(channelControlHelper),\n        requestReresolution: () => {\n          /* If the backoffTimeout is running, we're still backing off from\n           * making resolve requests, so we shouldn't make another one here.\n           * In that case, the backoff timer callback will call\n           * updateResolution */\n          if (this.backoffTimeout.isRunning()) {\n            trace(\n              'requestReresolution delayed by backoff timer until ' +\n                this.backoffTimeout.getEndTime().toISOString()\n            );\n            this.continueResolving = true;\n          } else {\n            this.updateResolution();\n          }\n        },\n        updateState: (newState: ConnectivityState, picker: Picker, errorMessage: string | null) => {\n          this.latestChildState = newState;\n          this.latestChildPicker = picker;\n          this.latestChildErrorMessage = errorMessage;\n          this.updateState(newState, picker, errorMessage);\n        },\n        addChannelzChild:\n          channelControlHelper.addChannelzChild.bind(channelControlHelper),\n        removeChannelzChild:\n          channelControlHelper.removeChannelzChild.bind(channelControlHelper),\n      }\n    );\n    this.innerResolver = createResolver(\n      target,\n      this.handleResolverResult.bind(this),\n      channelOptions\n    );\n    const backoffOptions: BackoffOptions = {\n      initialDelay: channelOptions['grpc.initial_reconnect_backoff_ms'],\n      maxDelay: channelOptions['grpc.max_reconnect_backoff_ms'],\n    };\n    this.backoffTimeout = new BackoffTimeout(() => {\n      if (this.continueResolving) {\n        this.updateResolution();\n        this.continueResolving = false;\n      } else {\n        this.updateState(this.latestChildState, this.latestChildPicker, this.latestChildErrorMessage);\n      }\n    }, backoffOptions);\n    this.backoffTimeout.unref();\n  }\n\n  private handleResolverResult(\n    endpointList: StatusOr<Endpoint[]>,\n    attributes: { [key: string]: unknown },\n    serviceConfig: StatusOr<ServiceConfig> | null,\n    resolutionNote: string\n  ): boolean {\n    this.backoffTimeout.stop();\n    this.backoffTimeout.reset();\n    let resultAccepted = true;\n    let workingServiceConfig: ServiceConfig | null = null;\n    if (serviceConfig === null) {\n      workingServiceConfig = this.defaultServiceConfig;\n    } else if (serviceConfig.ok) {\n      workingServiceConfig = serviceConfig.value;\n    } else {\n      if (this.previousServiceConfig !== null) {\n        workingServiceConfig = this.previousServiceConfig;\n      } else {\n        resultAccepted = false;\n        this.handleResolutionFailure(serviceConfig.error);\n      }\n    }\n\n    if (workingServiceConfig !== null) {\n      const workingConfigList =\n        workingServiceConfig?.loadBalancingConfig ?? [];\n      const loadBalancingConfig = selectLbConfigFromList(\n        workingConfigList,\n        true\n      );\n      if (loadBalancingConfig === null) {\n        resultAccepted = false;\n        this.handleResolutionFailure({\n          code: Status.UNAVAILABLE,\n          details:\n            'All load balancer options in service config are not compatible',\n          metadata: new Metadata(),\n        });\n      } else {\n        resultAccepted = this.childLoadBalancer.updateAddressList(\n          endpointList,\n          loadBalancingConfig,\n          {...this.channelOptions, ...attributes},\n          resolutionNote\n        );\n      }\n    }\n    if (resultAccepted) {\n      this.onSuccessfulResolution(\n        workingServiceConfig!,\n        attributes[CHANNEL_ARGS_CONFIG_SELECTOR_KEY] as ConfigSelector ?? getDefaultConfigSelector(workingServiceConfig!)\n      );\n    }\n    return resultAccepted;\n  }\n\n  private updateResolution() {\n    this.innerResolver.updateResolution();\n    if (this.currentState === ConnectivityState.IDLE) {\n      /* this.latestChildPicker is initialized as new QueuePicker(this), which\n       * is an appropriate value here if the child LB policy is unset.\n       * Otherwise, we want to delegate to the child here, in case that\n       * triggers something. */\n      this.updateState(ConnectivityState.CONNECTING, this.latestChildPicker, this.latestChildErrorMessage);\n    }\n    this.backoffTimeout.runOnce();\n  }\n\n  private updateState(connectivityState: ConnectivityState, picker: Picker, errorMessage: string | null) {\n    trace(\n      uriToString(this.target) +\n        ' ' +\n        ConnectivityState[this.currentState] +\n        ' -> ' +\n        ConnectivityState[connectivityState]\n    );\n    // Ensure that this.exitIdle() is called by the picker\n    if (connectivityState === ConnectivityState.IDLE) {\n      picker = new QueuePicker(this, picker);\n    }\n    this.currentState = connectivityState;\n    this.channelControlHelper.updateState(connectivityState, picker, errorMessage);\n  }\n\n  private handleResolutionFailure(error: StatusObject) {\n    if (this.latestChildState === ConnectivityState.IDLE) {\n      this.updateState(\n        ConnectivityState.TRANSIENT_FAILURE,\n        new UnavailablePicker(error),\n        error.details\n      );\n      this.onFailedResolution(error);\n    }\n  }\n\n  exitIdle() {\n    if (\n      this.currentState === ConnectivityState.IDLE ||\n      this.currentState === ConnectivityState.TRANSIENT_FAILURE\n    ) {\n      if (this.backoffTimeout.isRunning()) {\n        this.continueResolving = true;\n      } else {\n        this.updateResolution();\n      }\n    }\n    this.childLoadBalancer.exitIdle();\n  }\n\n  updateAddressList(\n    endpointList: StatusOr<Endpoint[]>,\n    lbConfig: TypedLoadBalancingConfig | null\n  ): never {\n    throw new Error('updateAddressList not supported on ResolvingLoadBalancer');\n  }\n\n  resetBackoff() {\n    this.backoffTimeout.reset();\n    this.childLoadBalancer.resetBackoff();\n  }\n\n  destroy() {\n    this.childLoadBalancer.destroy();\n    this.innerResolver.destroy();\n    this.backoffTimeout.reset();\n    this.backoffTimeout.stop();\n    this.latestChildState = ConnectivityState.IDLE;\n    this.latestChildPicker = new QueuePicker(this);\n    this.currentState = ConnectivityState.IDLE;\n    this.previousServiceConfig = null;\n    this.continueResolving = false;\n  }\n\n  getTypeName() {\n    return 'resolving_load_balancer';\n  }\n}\n","/*\n * Copyright 2019 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport { CompressionAlgorithms } from './compression-algorithms';\n\n/**\n * An interface that contains options used when initializing a Channel instance.\n */\nexport interface ChannelOptions {\n  'grpc.ssl_target_name_override'?: string;\n  'grpc.primary_user_agent'?: string;\n  'grpc.secondary_user_agent'?: string;\n  'grpc.default_authority'?: string;\n  'grpc.keepalive_time_ms'?: number;\n  'grpc.keepalive_timeout_ms'?: number;\n  'grpc.keepalive_permit_without_calls'?: number;\n  'grpc.service_config'?: string;\n  'grpc.max_concurrent_streams'?: number;\n  'grpc.initial_reconnect_backoff_ms'?: number;\n  'grpc.max_reconnect_backoff_ms'?: number;\n  'grpc.use_local_subchannel_pool'?: number;\n  'grpc.max_send_message_length'?: number;\n  'grpc.max_receive_message_length'?: number;\n  'grpc.enable_http_proxy'?: number;\n  /* http_connect_target and http_connect_creds are used for passing data\n   * around internally, and should not be documented as public-facing options\n   */\n  'grpc.http_connect_target'?: string;\n  'grpc.http_connect_creds'?: string;\n  'grpc.default_compression_algorithm'?: CompressionAlgorithms;\n  'grpc.enable_channelz'?: number;\n  'grpc.dns_min_time_between_resolutions_ms'?: number;\n  'grpc.enable_retries'?: number;\n  'grpc.per_rpc_retry_buffer_size'?: number;\n  /* This option is pattered like a core option, but the core does not have\n   * this option. It is closely related to the option\n   * grpc.per_rpc_retry_buffer_size, which is in the core. The core will likely\n   * implement this functionality using the ResourceQuota mechanism, so there\n   * will probably not be any collision or other inconsistency. */\n  'grpc.retry_buffer_size'?: number;\n  'grpc.max_connection_age_ms'?: number;\n  'grpc.max_connection_age_grace_ms'?: number;\n  'grpc.max_connection_idle_ms'?: number;\n  'grpc-node.max_session_memory'?: number;\n  'grpc.service_config_disable_resolution'?: number;\n  'grpc.client_idle_timeout_ms'?: number;\n  /**\n   * Set the enableTrace option in TLS clients and servers\n   */\n  'grpc-node.tls_enable_trace'?: number;\n  'grpc.lb.ring_hash.ring_size_cap'?: number;\n  'grpc-node.retry_max_attempts_limit'?: number;\n  'grpc-node.flow_control_window'?: number;\n  'grpc.server_call_metric_recording'?: number;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  [key: string]: any;\n}\n\n/**\n * This is for checking provided options at runtime. This is an object for\n * easier membership checking.\n */\nexport const recognizedOptions = {\n  'grpc.ssl_target_name_override': true,\n  'grpc.primary_user_agent': true,\n  'grpc.secondary_user_agent': true,\n  'grpc.default_authority': true,\n  'grpc.keepalive_time_ms': true,\n  'grpc.keepalive_timeout_ms': true,\n  'grpc.keepalive_permit_without_calls': true,\n  'grpc.service_config': true,\n  'grpc.max_concurrent_streams': true,\n  'grpc.initial_reconnect_backoff_ms': true,\n  'grpc.max_reconnect_backoff_ms': true,\n  'grpc.use_local_subchannel_pool': true,\n  'grpc.max_send_message_length': true,\n  'grpc.max_receive_message_length': true,\n  'grpc.enable_http_proxy': true,\n  'grpc.enable_channelz': true,\n  'grpc.dns_min_time_between_resolutions_ms': true,\n  'grpc.enable_retries': true,\n  'grpc.per_rpc_retry_buffer_size': true,\n  'grpc.retry_buffer_size': true,\n  'grpc.max_connection_age_ms': true,\n  'grpc.max_connection_age_grace_ms': true,\n  'grpc-node.max_session_memory': true,\n  'grpc.service_config_disable_resolution': true,\n  'grpc.client_idle_timeout_ms': true,\n  'grpc-node.tls_enable_trace': true,\n  'grpc.lb.ring_hash.ring_size_cap': true,\n  'grpc-node.retry_max_attempts_limit': true,\n  'grpc-node.flow_control_window': true,\n  'grpc.server_call_metric_recording': true\n};\n\nexport function channelOptionsEqual(\n  options1: ChannelOptions,\n  options2: ChannelOptions\n) {\n  const keys1 = Object.keys(options1).sort();\n  const keys2 = Object.keys(options2).sort();\n  if (keys1.length !== keys2.length) {\n    return false;\n  }\n  for (let i = 0; i < keys1.length; i += 1) {\n    if (keys1[i] !== keys2[i]) {\n      return false;\n    }\n    if (options1[keys1[i]] !== options2[keys2[i]]) {\n      return false;\n    }\n  }\n  return true;\n}\n","/*\n * Copyright 2021 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport { isIP, isIPv6 } from 'net';\n\nexport interface TcpSubchannelAddress {\n  port: number;\n  host: string;\n}\n\nexport interface IpcSubchannelAddress {\n  path: string;\n}\n/**\n * This represents a single backend address to connect to. This interface is a\n * subset of net.SocketConnectOpts, i.e. the options described at\n * https://nodejs.org/api/net.html#net_socket_connect_options_connectlistener.\n * Those are in turn a subset of the options that can be passed to http2.connect.\n */\n\nexport type SubchannelAddress = TcpSubchannelAddress | IpcSubchannelAddress;\n\nexport function isTcpSubchannelAddress(\n  address: SubchannelAddress\n): address is TcpSubchannelAddress {\n  return 'port' in address;\n}\n\nexport function subchannelAddressEqual(\n  address1?: SubchannelAddress,\n  address2?: SubchannelAddress\n): boolean {\n  if (!address1 && !address2) {\n    return true;\n  }\n  if (!address1 || !address2) {\n    return false;\n  }\n  if (isTcpSubchannelAddress(address1)) {\n    return (\n      isTcpSubchannelAddress(address2) &&\n      address1.host === address2.host &&\n      address1.port === address2.port\n    );\n  } else {\n    return !isTcpSubchannelAddress(address2) && address1.path === address2.path;\n  }\n}\n\nexport function subchannelAddressToString(address: SubchannelAddress): string {\n  if (isTcpSubchannelAddress(address)) {\n    if (isIPv6(address.host)) {\n      return '[' + address.host + ']:' + address.port;\n    } else {\n      return address.host + ':' + address.port;\n    }\n  } else {\n    return address.path;\n  }\n}\n\nconst DEFAULT_PORT = 443;\n\nexport function stringToSubchannelAddress(\n  addressString: string,\n  port?: number\n): SubchannelAddress {\n  if (isIP(addressString)) {\n    return {\n      host: addressString,\n      port: port ?? DEFAULT_PORT,\n    };\n  } else {\n    return {\n      path: addressString,\n    };\n  }\n}\n\nexport interface Endpoint {\n  addresses: SubchannelAddress[];\n}\n\nexport function endpointEqual(endpoint1: Endpoint, endpoint2: Endpoint) {\n  if (endpoint1.addresses.length !== endpoint2.addresses.length) {\n    return false;\n  }\n  for (let i = 0; i < endpoint1.addresses.length; i++) {\n    if (\n      !subchannelAddressEqual(endpoint1.addresses[i], endpoint2.addresses[i])\n    ) {\n      return false;\n    }\n  }\n  return true;\n}\n\nexport function endpointToString(endpoint: Endpoint): string {\n  return (\n    '[' + endpoint.addresses.map(subchannelAddressToString).join(', ') + ']'\n  );\n}\n\nexport function endpointHasAddress(\n  endpoint: Endpoint,\n  expectedAddress: SubchannelAddress\n): boolean {\n  for (const address of endpoint.addresses) {\n    if (subchannelAddressEqual(address, expectedAddress)) {\n      return true;\n    }\n  }\n  return false;\n}\n\ninterface EndpointMapEntry<ValueType> {\n  key: Endpoint;\n  value: ValueType;\n}\n\nfunction endpointEqualUnordered(\n  endpoint1: Endpoint,\n  endpoint2: Endpoint\n): boolean {\n  if (endpoint1.addresses.length !== endpoint2.addresses.length) {\n    return false;\n  }\n  for (const address1 of endpoint1.addresses) {\n    let matchFound = false;\n    for (const address2 of endpoint2.addresses) {\n      if (subchannelAddressEqual(address1, address2)) {\n        matchFound = true;\n        break;\n      }\n    }\n    if (!matchFound) {\n      return false;\n    }\n  }\n  return true;\n}\n\nexport class EndpointMap<ValueType> {\n  private map: Set<EndpointMapEntry<ValueType>> = new Set();\n\n  get size() {\n    return this.map.size;\n  }\n\n  getForSubchannelAddress(address: SubchannelAddress): ValueType | undefined {\n    for (const entry of this.map) {\n      if (endpointHasAddress(entry.key, address)) {\n        return entry.value;\n      }\n    }\n    return undefined;\n  }\n\n  /**\n   * Delete any entries in this map with keys that are not in endpoints\n   * @param endpoints\n   */\n  deleteMissing(endpoints: Endpoint[]): ValueType[] {\n    const removedValues: ValueType[] = [];\n    for (const entry of this.map) {\n      let foundEntry = false;\n      for (const endpoint of endpoints) {\n        if (endpointEqualUnordered(endpoint, entry.key)) {\n          foundEntry = true;\n        }\n      }\n      if (!foundEntry) {\n        removedValues.push(entry.value);\n        this.map.delete(entry);\n      }\n    }\n    return removedValues;\n  }\n\n  get(endpoint: Endpoint): ValueType | undefined {\n    for (const entry of this.map) {\n      if (endpointEqualUnordered(endpoint, entry.key)) {\n        return entry.value;\n      }\n    }\n    return undefined;\n  }\n\n  set(endpoint: Endpoint, mapEntry: ValueType) {\n    for (const entry of this.map) {\n      if (endpointEqualUnordered(endpoint, entry.key)) {\n        entry.value = mapEntry;\n        return;\n      }\n    }\n    this.map.add({ key: endpoint, value: mapEntry });\n  }\n\n  delete(endpoint: Endpoint) {\n    for (const entry of this.map) {\n      if (endpointEqualUnordered(endpoint, entry.key)) {\n        this.map.delete(entry);\n        return;\n      }\n    }\n  }\n\n  has(endpoint: Endpoint): boolean {\n    for (const entry of this.map) {\n      if (endpointEqualUnordered(endpoint, entry.key)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  clear() {\n    this.map.clear();\n  }\n\n  *keys(): IterableIterator<Endpoint> {\n    for (const entry of this.map) {\n      yield entry.key;\n    }\n  }\n\n  *values(): IterableIterator<ValueType> {\n    for (const entry of this.map) {\n      yield entry.value;\n    }\n  }\n\n  *entries(): IterableIterator<[Endpoint, ValueType]> {\n    for (const entry of this.map) {\n      yield [entry.key, entry.value];\n    }\n  }\n}\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    if (typeof b !== \"function\" && b !== null)\r\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n    function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n    var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n    var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n    var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n    var _, done = false;\r\n    for (var i = decorators.length - 1; i >= 0; i--) {\r\n        var context = {};\r\n        for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n        for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n        context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n        var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n        if (kind === \"accessor\") {\r\n            if (result === void 0) continue;\r\n            if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n            if (_ = accept(result.get)) descriptor.get = _;\r\n            if (_ = accept(result.set)) descriptor.set = _;\r\n            if (_ = accept(result.init)) initializers.unshift(_);\r\n        }\r\n        else if (_ = accept(result)) {\r\n            if (kind === \"field\") initializers.unshift(_);\r\n            else descriptor[key] = _;\r\n        }\r\n    }\r\n    if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n    done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n    var useValue = arguments.length > 2;\r\n    for (var i = 0; i < initializers.length; i++) {\r\n        value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n    }\r\n    return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n    return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n    if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n    return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    var desc = Object.getOwnPropertyDescriptor(m, k);\r\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n        desc = { enumerable: true, get: function() { return m[k]; } };\r\n    }\r\n    Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n        if (ar || !(i in from)) {\r\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n            ar[i] = from[i];\r\n        }\r\n    }\r\n    return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\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\");\r\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\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\");\r\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n    if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n    return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n    if (value !== null && value !== void 0) {\r\n        if (typeof value !== \"object\") throw new TypeError(\"Object expected.\");\r\n        var dispose;\r\n        if (async) {\r\n            if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n            dispose = value[Symbol.asyncDispose];\r\n        }\r\n        if (dispose === void 0) {\r\n            if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n            dispose = value[Symbol.dispose];\r\n        }\r\n        if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n        env.stack.push({ value: value, dispose: dispose, async: async });\r\n    }\r\n    else if (async) {\r\n        env.stack.push({ async: true });\r\n    }\r\n    return value;\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n    var e = new Error(message);\r\n    return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n    function fail(e) {\r\n        env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n        env.hasError = true;\r\n    }\r\n    function next() {\r\n        while (env.stack.length) {\r\n            var rec = env.stack.pop();\r\n            try {\r\n                var result = rec.dispose && rec.dispose.call(rec.value);\r\n                if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n            }\r\n            catch (e) {\r\n                fail(e);\r\n            }\r\n        }\r\n        if (env.hasError) throw env.error;\r\n    }\r\n    return next();\r\n}\r\n\r\nexport default {\r\n    __extends,\r\n    __assign,\r\n    __rest,\r\n    __decorate,\r\n    __param,\r\n    __metadata,\r\n    __awaiter,\r\n    __generator,\r\n    __createBinding,\r\n    __exportStar,\r\n    __values,\r\n    __read,\r\n    __spread,\r\n    __spreadArrays,\r\n    __spreadArray,\r\n    __await,\r\n    __asyncGenerator,\r\n    __asyncDelegator,\r\n    __asyncValues,\r\n    __makeTemplateObject,\r\n    __importStar,\r\n    __importDefault,\r\n    __classPrivateFieldGet,\r\n    __classPrivateFieldSet,\r\n    __classPrivateFieldIn,\r\n    __addDisposableResource,\r\n    __disposeResources,\r\n};\r\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol */\n\nvar extendStatics = function (d, b) {\n  extendStatics = Object.setPrototypeOf || {\n    __proto__: []\n  } instanceof Array && function (d, b) {\n    d.__proto__ = b;\n  } || function (d, b) {\n    for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n  };\n  return extendStatics(d, b);\n};\nfunction __extends(d, b) {\n  if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n  extendStatics(d, b);\n  function __() {\n    this.constructor = d;\n  }\n  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\nfunction __generator(thisArg, body) {\n  var _ = {\n      label: 0,\n      sent: function () {\n        if (t[0] & 1) throw t[1];\n        return t[1];\n      },\n      trys: [],\n      ops: []\n    },\n    f,\n    y,\n    t,\n    g;\n  return g = {\n    next: verb(0),\n    \"throw\": verb(1),\n    \"return\": verb(2)\n  }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function () {\n    return this;\n  }), g;\n  function verb(n) {\n    return function (v) {\n      return step([n, v]);\n    };\n  }\n  function step(op) {\n    if (f) throw new TypeError(\"Generator is already executing.\");\n    while (g && (g = 0, op[0] && (_ = 0)), _) try {\n      if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n      if (y = 0, t) op = [op[0] & 2, t.value];\n      switch (op[0]) {\n        case 0:\n        case 1:\n          t = op;\n          break;\n        case 4:\n          _.label++;\n          return {\n            value: op[1],\n            done: false\n          };\n        case 5:\n          _.label++;\n          y = op[1];\n          op = [0];\n          continue;\n        case 7:\n          op = _.ops.pop();\n          _.trys.pop();\n          continue;\n        default:\n          if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n            _ = 0;\n            continue;\n          }\n          if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n            _.label = op[1];\n            break;\n          }\n          if (op[0] === 6 && _.label < t[1]) {\n            _.label = t[1];\n            t = op;\n            break;\n          }\n          if (t && _.label < t[2]) {\n            _.label = t[2];\n            _.ops.push(op);\n            break;\n          }\n          if (t[2]) _.ops.pop();\n          _.trys.pop();\n          continue;\n      }\n      op = body.call(thisArg, _);\n    } catch (e) {\n      op = [6, e];\n      y = 0;\n    } finally {\n      f = t = 0;\n    }\n    if (op[0] & 5) throw op[1];\n    return {\n      value: op[0] ? op[1] : void 0,\n      done: true\n    };\n  }\n}\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n  var e = new Error(message);\n  return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nvar TreeNode = /** @class */function () {\n  function TreeNode(key, value, color) {\n    if (color === void 0) {\n      color = 1 /* TreeNodeColor.RED */;\n    }\n    this._left = undefined;\n    this._right = undefined;\n    this._parent = undefined;\n    this._key = key;\n    this._value = value;\n    this._color = color;\n  }\n  /**\n   * @description Get the pre node.\n   * @returns TreeNode about the pre node.\n   */\n  TreeNode.prototype._pre = function () {\n    var preNode = this;\n    var isRootOrHeader = preNode._parent._parent === preNode;\n    if (isRootOrHeader && preNode._color === 1 /* TreeNodeColor.RED */) {\n      preNode = preNode._right;\n    } else if (preNode._left) {\n      preNode = preNode._left;\n      while (preNode._right) {\n        preNode = preNode._right;\n      }\n    } else {\n      // Must be root and left is null\n      if (isRootOrHeader) {\n        return preNode._parent;\n      }\n      var pre = preNode._parent;\n      while (pre._left === preNode) {\n        preNode = pre;\n        pre = preNode._parent;\n      }\n      preNode = pre;\n    }\n    return preNode;\n  };\n  /**\n   * @description Get the next node.\n   * @returns TreeNode about the next node.\n   */\n  TreeNode.prototype._next = function () {\n    var nextNode = this;\n    if (nextNode._right) {\n      nextNode = nextNode._right;\n      while (nextNode._left) {\n        nextNode = nextNode._left;\n      }\n      return nextNode;\n    } else {\n      var pre = nextNode._parent;\n      while (pre._right === nextNode) {\n        nextNode = pre;\n        pre = nextNode._parent;\n      }\n      if (nextNode._right !== pre) {\n        return pre;\n      } else return nextNode;\n    }\n  };\n  /**\n   * @description Rotate left.\n   * @returns TreeNode about moved to original position after rotation.\n   */\n  TreeNode.prototype._rotateLeft = function () {\n    var PP = this._parent;\n    var V = this._right;\n    var R = V._left;\n    if (PP._parent === this) PP._parent = V;else if (PP._left === this) PP._left = V;else PP._right = V;\n    V._parent = PP;\n    V._left = this;\n    this._parent = V;\n    this._right = R;\n    if (R) R._parent = this;\n    return V;\n  };\n  /**\n   * @description Rotate right.\n   * @returns TreeNode about moved to original position after rotation.\n   */\n  TreeNode.prototype._rotateRight = function () {\n    var PP = this._parent;\n    var F = this._left;\n    var K = F._right;\n    if (PP._parent === this) PP._parent = F;else if (PP._left === this) PP._left = F;else PP._right = F;\n    F._parent = PP;\n    F._right = this;\n    this._parent = F;\n    this._left = K;\n    if (K) K._parent = this;\n    return F;\n  };\n  return TreeNode;\n}();\nvar TreeNodeEnableIndex = /** @class */function (_super) {\n  __extends(TreeNodeEnableIndex, _super);\n  function TreeNodeEnableIndex() {\n    var _this = _super !== null && _super.apply(this, arguments) || this;\n    _this._subTreeSize = 1;\n    return _this;\n  }\n  /**\n   * @description Rotate left and do recount.\n   * @returns TreeNode about moved to original position after rotation.\n   */\n  TreeNodeEnableIndex.prototype._rotateLeft = function () {\n    var parent = _super.prototype._rotateLeft.call(this);\n    this._recount();\n    parent._recount();\n    return parent;\n  };\n  /**\n   * @description Rotate right and do recount.\n   * @returns TreeNode about moved to original position after rotation.\n   */\n  TreeNodeEnableIndex.prototype._rotateRight = function () {\n    var parent = _super.prototype._rotateRight.call(this);\n    this._recount();\n    parent._recount();\n    return parent;\n  };\n  TreeNodeEnableIndex.prototype._recount = function () {\n    this._subTreeSize = 1;\n    if (this._left) {\n      this._subTreeSize += this._left._subTreeSize;\n    }\n    if (this._right) {\n      this._subTreeSize += this._right._subTreeSize;\n    }\n  };\n  return TreeNodeEnableIndex;\n}(TreeNode);\n\nvar ContainerIterator = /** @class */function () {\n  /**\n   * @internal\n   */\n  function ContainerIterator(iteratorType) {\n    if (iteratorType === void 0) {\n      iteratorType = 0 /* IteratorType.NORMAL */;\n    }\n    this.iteratorType = iteratorType;\n  }\n  /**\n   * @param iter - The other iterator you want to compare.\n   * @returns Whether this equals to obj.\n   * @example\n   * container.find(1).equals(container.end());\n   */\n  ContainerIterator.prototype.equals = function (iter) {\n    return this._node === iter._node;\n  };\n  return ContainerIterator;\n}();\nvar Base = /** @class */function () {\n  function Base() {\n    /**\n     * @description Container's size.\n     * @internal\n     */\n    this._length = 0;\n  }\n  Object.defineProperty(Base.prototype, \"length\", {\n    /**\n     * @returns The size of the container.\n     * @example\n     * const container = new Vector([1, 2]);\n     * console.log(container.length); // 2\n     */\n    get: function () {\n      return this._length;\n    },\n    enumerable: false,\n    configurable: true\n  });\n  /**\n   * @returns The size of the container.\n   * @example\n   * const container = new Vector([1, 2]);\n   * console.log(container.size()); // 2\n   */\n  Base.prototype.size = function () {\n    return this._length;\n  };\n  /**\n   * @returns Whether the container is empty.\n   * @example\n   * container.clear();\n   * console.log(container.empty());  // true\n   */\n  Base.prototype.empty = function () {\n    return this._length === 0;\n  };\n  return Base;\n}();\nvar Container = /** @class */function (_super) {\n  __extends(Container, _super);\n  function Container() {\n    return _super !== null && _super.apply(this, arguments) || this;\n  }\n  return Container;\n}(Base);\n\n/**\n * @description Throw an iterator access error.\n * @internal\n */\nfunction throwIteratorAccessError() {\n  throw new RangeError('Iterator access denied!');\n}\n\nvar TreeContainer = /** @class */function (_super) {\n  __extends(TreeContainer, _super);\n  /**\n   * @internal\n   */\n  function TreeContainer(cmp, enableIndex) {\n    if (cmp === void 0) {\n      cmp = function (x, y) {\n        if (x < y) return -1;\n        if (x > y) return 1;\n        return 0;\n      };\n    }\n    if (enableIndex === void 0) {\n      enableIndex = false;\n    }\n    var _this = _super.call(this) || this;\n    /**\n     * @internal\n     */\n    _this._root = undefined;\n    _this._cmp = cmp;\n    _this.enableIndex = enableIndex;\n    _this._TreeNodeClass = enableIndex ? TreeNodeEnableIndex : TreeNode;\n    _this._header = new _this._TreeNodeClass();\n    return _this;\n  }\n  /**\n   * @internal\n   */\n  TreeContainer.prototype._lowerBound = function (curNode, key) {\n    var resNode = this._header;\n    while (curNode) {\n      var cmpResult = this._cmp(curNode._key, key);\n      if (cmpResult < 0) {\n        curNode = curNode._right;\n      } else if (cmpResult > 0) {\n        resNode = curNode;\n        curNode = curNode._left;\n      } else return curNode;\n    }\n    return resNode;\n  };\n  /**\n   * @internal\n   */\n  TreeContainer.prototype._upperBound = function (curNode, key) {\n    var resNode = this._header;\n    while (curNode) {\n      var cmpResult = this._cmp(curNode._key, key);\n      if (cmpResult <= 0) {\n        curNode = curNode._right;\n      } else {\n        resNode = curNode;\n        curNode = curNode._left;\n      }\n    }\n    return resNode;\n  };\n  /**\n   * @internal\n   */\n  TreeContainer.prototype._reverseLowerBound = function (curNode, key) {\n    var resNode = this._header;\n    while (curNode) {\n      var cmpResult = this._cmp(curNode._key, key);\n      if (cmpResult < 0) {\n        resNode = curNode;\n        curNode = curNode._right;\n      } else if (cmpResult > 0) {\n        curNode = curNode._left;\n      } else return curNode;\n    }\n    return resNode;\n  };\n  /**\n   * @internal\n   */\n  TreeContainer.prototype._reverseUpperBound = function (curNode, key) {\n    var resNode = this._header;\n    while (curNode) {\n      var cmpResult = this._cmp(curNode._key, key);\n      if (cmpResult < 0) {\n        resNode = curNode;\n        curNode = curNode._right;\n      } else {\n        curNode = curNode._left;\n      }\n    }\n    return resNode;\n  };\n  /**\n   * @internal\n   */\n  TreeContainer.prototype._eraseNodeSelfBalance = function (curNode) {\n    while (true) {\n      var parentNode = curNode._parent;\n      if (parentNode === this._header) return;\n      if (curNode._color === 1 /* TreeNodeColor.RED */) {\n        curNode._color = 0 /* TreeNodeColor.BLACK */;\n        return;\n      }\n      if (curNode === parentNode._left) {\n        var brother = parentNode._right;\n        if (brother._color === 1 /* TreeNodeColor.RED */) {\n          brother._color = 0 /* TreeNodeColor.BLACK */;\n          parentNode._color = 1 /* TreeNodeColor.RED */;\n          if (parentNode === this._root) {\n            this._root = parentNode._rotateLeft();\n          } else parentNode._rotateLeft();\n        } else {\n          if (brother._right && brother._right._color === 1 /* TreeNodeColor.RED */) {\n            brother._color = parentNode._color;\n            parentNode._color = 0 /* TreeNodeColor.BLACK */;\n            brother._right._color = 0 /* TreeNodeColor.BLACK */;\n            if (parentNode === this._root) {\n              this._root = parentNode._rotateLeft();\n            } else parentNode._rotateLeft();\n            return;\n          } else if (brother._left && brother._left._color === 1 /* TreeNodeColor.RED */) {\n            brother._color = 1 /* TreeNodeColor.RED */;\n            brother._left._color = 0 /* TreeNodeColor.BLACK */;\n            brother._rotateRight();\n          } else {\n            brother._color = 1 /* TreeNodeColor.RED */;\n            curNode = parentNode;\n          }\n        }\n      } else {\n        var brother = parentNode._left;\n        if (brother._color === 1 /* TreeNodeColor.RED */) {\n          brother._color = 0 /* TreeNodeColor.BLACK */;\n          parentNode._color = 1 /* TreeNodeColor.RED */;\n          if (parentNode === this._root) {\n            this._root = parentNode._rotateRight();\n          } else parentNode._rotateRight();\n        } else {\n          if (brother._left && brother._left._color === 1 /* TreeNodeColor.RED */) {\n            brother._color = parentNode._color;\n            parentNode._color = 0 /* TreeNodeColor.BLACK */;\n            brother._left._color = 0 /* TreeNodeColor.BLACK */;\n            if (parentNode === this._root) {\n              this._root = parentNode._rotateRight();\n            } else parentNode._rotateRight();\n            return;\n          } else if (brother._right && brother._right._color === 1 /* TreeNodeColor.RED */) {\n            brother._color = 1 /* TreeNodeColor.RED */;\n            brother._right._color = 0 /* TreeNodeColor.BLACK */;\n            brother._rotateLeft();\n          } else {\n            brother._color = 1 /* TreeNodeColor.RED */;\n            curNode = parentNode;\n          }\n        }\n      }\n    }\n  };\n  /**\n   * @internal\n   */\n  TreeContainer.prototype._eraseNode = function (curNode) {\n    if (this._length === 1) {\n      this.clear();\n      return;\n    }\n    var swapNode = curNode;\n    while (swapNode._left || swapNode._right) {\n      if (swapNode._right) {\n        swapNode = swapNode._right;\n        while (swapNode._left) swapNode = swapNode._left;\n      } else {\n        swapNode = swapNode._left;\n      }\n      var key = curNode._key;\n      curNode._key = swapNode._key;\n      swapNode._key = key;\n      var value = curNode._value;\n      curNode._value = swapNode._value;\n      swapNode._value = value;\n      curNode = swapNode;\n    }\n    if (this._header._left === swapNode) {\n      this._header._left = swapNode._parent;\n    } else if (this._header._right === swapNode) {\n      this._header._right = swapNode._parent;\n    }\n    this._eraseNodeSelfBalance(swapNode);\n    var _parent = swapNode._parent;\n    if (swapNode === _parent._left) {\n      _parent._left = undefined;\n    } else _parent._right = undefined;\n    this._length -= 1;\n    this._root._color = 0 /* TreeNodeColor.BLACK */;\n    if (this.enableIndex) {\n      while (_parent !== this._header) {\n        _parent._subTreeSize -= 1;\n        _parent = _parent._parent;\n      }\n    }\n  };\n  /**\n   * @internal\n   */\n  TreeContainer.prototype._inOrderTraversal = function (param) {\n    var pos = typeof param === 'number' ? param : undefined;\n    var callback = typeof param === 'function' ? param : undefined;\n    var nodeList = typeof param === 'undefined' ? [] : undefined;\n    var index = 0;\n    var curNode = this._root;\n    var stack = [];\n    while (stack.length || curNode) {\n      if (curNode) {\n        stack.push(curNode);\n        curNode = curNode._left;\n      } else {\n        curNode = stack.pop();\n        if (index === pos) return curNode;\n        nodeList && nodeList.push(curNode);\n        callback && callback(curNode, index, this);\n        index += 1;\n        curNode = curNode._right;\n      }\n    }\n    return nodeList;\n  };\n  /**\n   * @internal\n   */\n  TreeContainer.prototype._insertNodeSelfBalance = function (curNode) {\n    while (true) {\n      var parentNode = curNode._parent;\n      if (parentNode._color === 0 /* TreeNodeColor.BLACK */) return;\n      var grandParent = parentNode._parent;\n      if (parentNode === grandParent._left) {\n        var uncle = grandParent._right;\n        if (uncle && uncle._color === 1 /* TreeNodeColor.RED */) {\n          uncle._color = parentNode._color = 0 /* TreeNodeColor.BLACK */;\n          if (grandParent === this._root) return;\n          grandParent._color = 1 /* TreeNodeColor.RED */;\n          curNode = grandParent;\n          continue;\n        } else if (curNode === parentNode._right) {\n          curNode._color = 0 /* TreeNodeColor.BLACK */;\n          if (curNode._left) {\n            curNode._left._parent = parentNode;\n          }\n          if (curNode._right) {\n            curNode._right._parent = grandParent;\n          }\n          parentNode._right = curNode._left;\n          grandParent._left = curNode._right;\n          curNode._left = parentNode;\n          curNode._right = grandParent;\n          if (grandParent === this._root) {\n            this._root = curNode;\n            this._header._parent = curNode;\n          } else {\n            var GP = grandParent._parent;\n            if (GP._left === grandParent) {\n              GP._left = curNode;\n            } else GP._right = curNode;\n          }\n          curNode._parent = grandParent._parent;\n          parentNode._parent = curNode;\n          grandParent._parent = curNode;\n          grandParent._color = 1 /* TreeNodeColor.RED */;\n        } else {\n          parentNode._color = 0 /* TreeNodeColor.BLACK */;\n          if (grandParent === this._root) {\n            this._root = grandParent._rotateRight();\n          } else grandParent._rotateRight();\n          grandParent._color = 1 /* TreeNodeColor.RED */;\n          return;\n        }\n      } else {\n        var uncle = grandParent._left;\n        if (uncle && uncle._color === 1 /* TreeNodeColor.RED */) {\n          uncle._color = parentNode._color = 0 /* TreeNodeColor.BLACK */;\n          if (grandParent === this._root) return;\n          grandParent._color = 1 /* TreeNodeColor.RED */;\n          curNode = grandParent;\n          continue;\n        } else if (curNode === parentNode._left) {\n          curNode._color = 0 /* TreeNodeColor.BLACK */;\n          if (curNode._left) {\n            curNode._left._parent = grandParent;\n          }\n          if (curNode._right) {\n            curNode._right._parent = parentNode;\n          }\n          grandParent._right = curNode._left;\n          parentNode._left = curNode._right;\n          curNode._left = grandParent;\n          curNode._right = parentNode;\n          if (grandParent === this._root) {\n            this._root = curNode;\n            this._header._parent = curNode;\n          } else {\n            var GP = grandParent._parent;\n            if (GP._left === grandParent) {\n              GP._left = curNode;\n            } else GP._right = curNode;\n          }\n          curNode._parent = grandParent._parent;\n          parentNode._parent = curNode;\n          grandParent._parent = curNode;\n          grandParent._color = 1 /* TreeNodeColor.RED */;\n        } else {\n          parentNode._color = 0 /* TreeNodeColor.BLACK */;\n          if (grandParent === this._root) {\n            this._root = grandParent._rotateLeft();\n          } else grandParent._rotateLeft();\n          grandParent._color = 1 /* TreeNodeColor.RED */;\n          return;\n        }\n      }\n      if (this.enableIndex) {\n        parentNode._recount();\n        grandParent._recount();\n        curNode._recount();\n      }\n      return;\n    }\n  };\n  /**\n   * @internal\n   */\n  TreeContainer.prototype._set = function (key, value, hint) {\n    if (this._root === undefined) {\n      this._length += 1;\n      this._root = new this._TreeNodeClass(key, value, 0 /* TreeNodeColor.BLACK */);\n      this._root._parent = this._header;\n      this._header._parent = this._header._left = this._header._right = this._root;\n      return this._length;\n    }\n    var curNode;\n    var minNode = this._header._left;\n    var compareToMin = this._cmp(minNode._key, key);\n    if (compareToMin === 0) {\n      minNode._value = value;\n      return this._length;\n    } else if (compareToMin > 0) {\n      minNode._left = new this._TreeNodeClass(key, value);\n      minNode._left._parent = minNode;\n      curNode = minNode._left;\n      this._header._left = curNode;\n    } else {\n      var maxNode = this._header._right;\n      var compareToMax = this._cmp(maxNode._key, key);\n      if (compareToMax === 0) {\n        maxNode._value = value;\n        return this._length;\n      } else if (compareToMax < 0) {\n        maxNode._right = new this._TreeNodeClass(key, value);\n        maxNode._right._parent = maxNode;\n        curNode = maxNode._right;\n        this._header._right = curNode;\n      } else {\n        if (hint !== undefined) {\n          var iterNode = hint._node;\n          if (iterNode !== this._header) {\n            var iterCmpRes = this._cmp(iterNode._key, key);\n            if (iterCmpRes === 0) {\n              iterNode._value = value;\n              return this._length;\n            } else /* istanbul ignore else */if (iterCmpRes > 0) {\n                var preNode = iterNode._pre();\n                var preCmpRes = this._cmp(preNode._key, key);\n                if (preCmpRes === 0) {\n                  preNode._value = value;\n                  return this._length;\n                } else if (preCmpRes < 0) {\n                  curNode = new this._TreeNodeClass(key, value);\n                  if (preNode._right === undefined) {\n                    preNode._right = curNode;\n                    curNode._parent = preNode;\n                  } else {\n                    iterNode._left = curNode;\n                    curNode._parent = iterNode;\n                  }\n                }\n              }\n          }\n        }\n        if (curNode === undefined) {\n          curNode = this._root;\n          while (true) {\n            var cmpResult = this._cmp(curNode._key, key);\n            if (cmpResult > 0) {\n              if (curNode._left === undefined) {\n                curNode._left = new this._TreeNodeClass(key, value);\n                curNode._left._parent = curNode;\n                curNode = curNode._left;\n                break;\n              }\n              curNode = curNode._left;\n            } else if (cmpResult < 0) {\n              if (curNode._right === undefined) {\n                curNode._right = new this._TreeNodeClass(key, value);\n                curNode._right._parent = curNode;\n                curNode = curNode._right;\n                break;\n              }\n              curNode = curNode._right;\n            } else {\n              curNode._value = value;\n              return this._length;\n            }\n          }\n        }\n      }\n    }\n    if (this.enableIndex) {\n      var parent_1 = curNode._parent;\n      while (parent_1 !== this._header) {\n        parent_1._subTreeSize += 1;\n        parent_1 = parent_1._parent;\n      }\n    }\n    this._insertNodeSelfBalance(curNode);\n    this._length += 1;\n    return this._length;\n  };\n  /**\n   * @internal\n   */\n  TreeContainer.prototype._getTreeNodeByKey = function (curNode, key) {\n    while (curNode) {\n      var cmpResult = this._cmp(curNode._key, key);\n      if (cmpResult < 0) {\n        curNode = curNode._right;\n      } else if (cmpResult > 0) {\n        curNode = curNode._left;\n      } else return curNode;\n    }\n    return curNode || this._header;\n  };\n  TreeContainer.prototype.clear = function () {\n    this._length = 0;\n    this._root = undefined;\n    this._header._parent = undefined;\n    this._header._left = this._header._right = undefined;\n  };\n  /**\n   * @description Update node's key by iterator.\n   * @param iter - The iterator you want to change.\n   * @param key - The key you want to update.\n   * @returns Whether the modification is successful.\n   * @example\n   * const st = new orderedSet([1, 2, 5]);\n   * const iter = st.find(2);\n   * st.updateKeyByIterator(iter, 3); // then st will become [1, 3, 5]\n   */\n  TreeContainer.prototype.updateKeyByIterator = function (iter, key) {\n    var node = iter._node;\n    if (node === this._header) {\n      throwIteratorAccessError();\n    }\n    if (this._length === 1) {\n      node._key = key;\n      return true;\n    }\n    var nextKey = node._next()._key;\n    if (node === this._header._left) {\n      if (this._cmp(nextKey, key) > 0) {\n        node._key = key;\n        return true;\n      }\n      return false;\n    }\n    var preKey = node._pre()._key;\n    if (node === this._header._right) {\n      if (this._cmp(preKey, key) < 0) {\n        node._key = key;\n        return true;\n      }\n      return false;\n    }\n    if (this._cmp(preKey, key) >= 0 || this._cmp(nextKey, key) <= 0) return false;\n    node._key = key;\n    return true;\n  };\n  TreeContainer.prototype.eraseElementByPos = function (pos) {\n    if (pos < 0 || pos > this._length - 1) {\n      throw new RangeError();\n    }\n    var node = this._inOrderTraversal(pos);\n    this._eraseNode(node);\n    return this._length;\n  };\n  /**\n   * @description Remove the element of the specified key.\n   * @param key - The key you want to remove.\n   * @returns Whether erase successfully.\n   */\n  TreeContainer.prototype.eraseElementByKey = function (key) {\n    if (this._length === 0) return false;\n    var curNode = this._getTreeNodeByKey(this._root, key);\n    if (curNode === this._header) return false;\n    this._eraseNode(curNode);\n    return true;\n  };\n  TreeContainer.prototype.eraseElementByIterator = function (iter) {\n    var node = iter._node;\n    if (node === this._header) {\n      throwIteratorAccessError();\n    }\n    var hasNoRight = node._right === undefined;\n    var isNormal = iter.iteratorType === 0 /* IteratorType.NORMAL */;\n    // For the normal iterator, the `next` node will be swapped to `this` node when has right.\n    if (isNormal) {\n      // So we should move it to next when it's right is null.\n      if (hasNoRight) iter.next();\n    } else {\n      // For the reverse iterator, only when it doesn't have right and has left the `next` node will be swapped.\n      // So when it has right, or it is a leaf node we should move it to `next`.\n      if (!hasNoRight || node._left === undefined) iter.next();\n    }\n    this._eraseNode(node);\n    return iter;\n  };\n  /**\n   * @description Get the height of the tree.\n   * @returns Number about the height of the RB-tree.\n   */\n  TreeContainer.prototype.getHeight = function () {\n    if (this._length === 0) return 0;\n    function traversal(curNode) {\n      if (!curNode) return 0;\n      return Math.max(traversal(curNode._left), traversal(curNode._right)) + 1;\n    }\n    return traversal(this._root);\n  };\n  return TreeContainer;\n}(Container);\n\nvar TreeIterator = /** @class */function (_super) {\n  __extends(TreeIterator, _super);\n  /**\n   * @internal\n   */\n  function TreeIterator(node, header, iteratorType) {\n    var _this = _super.call(this, iteratorType) || this;\n    _this._node = node;\n    _this._header = header;\n    if (_this.iteratorType === 0 /* IteratorType.NORMAL */) {\n      _this.pre = function () {\n        if (this._node === this._header._left) {\n          throwIteratorAccessError();\n        }\n        this._node = this._node._pre();\n        return this;\n      };\n      _this.next = function () {\n        if (this._node === this._header) {\n          throwIteratorAccessError();\n        }\n        this._node = this._node._next();\n        return this;\n      };\n    } else {\n      _this.pre = function () {\n        if (this._node === this._header._right) {\n          throwIteratorAccessError();\n        }\n        this._node = this._node._next();\n        return this;\n      };\n      _this.next = function () {\n        if (this._node === this._header) {\n          throwIteratorAccessError();\n        }\n        this._node = this._node._pre();\n        return this;\n      };\n    }\n    return _this;\n  }\n  Object.defineProperty(TreeIterator.prototype, \"index\", {\n    /**\n     * @description Get the sequential index of the iterator in the tree container.<br/>\n     *              <strong>Note:</strong>\n     *              This function only takes effect when the specified tree container `enableIndex = true`.\n     * @returns The index subscript of the node in the tree.\n     * @example\n     * const st = new OrderedSet([1, 2, 3], true);\n     * console.log(st.begin().next().index);  // 1\n     */\n    get: function () {\n      var _node = this._node;\n      var root = this._header._parent;\n      if (_node === this._header) {\n        if (root) {\n          return root._subTreeSize - 1;\n        }\n        return 0;\n      }\n      var index = 0;\n      if (_node._left) {\n        index += _node._left._subTreeSize;\n      }\n      while (_node !== root) {\n        var _parent = _node._parent;\n        if (_node === _parent._right) {\n          index += 1;\n          if (_parent._left) {\n            index += _parent._left._subTreeSize;\n          }\n        }\n        _node = _parent;\n      }\n      return index;\n    },\n    enumerable: false,\n    configurable: true\n  });\n  TreeIterator.prototype.isAccessible = function () {\n    return this._node !== this._header;\n  };\n  return TreeIterator;\n}(ContainerIterator);\n\nvar OrderedMapIterator = /** @class */function (_super) {\n  __extends(OrderedMapIterator, _super);\n  function OrderedMapIterator(node, header, container, iteratorType) {\n    var _this = _super.call(this, node, header, iteratorType) || this;\n    _this.container = container;\n    return _this;\n  }\n  Object.defineProperty(OrderedMapIterator.prototype, \"pointer\", {\n    get: function () {\n      if (this._node === this._header) {\n        throwIteratorAccessError();\n      }\n      var self = this;\n      return new Proxy([], {\n        get: function (target, prop) {\n          if (prop === '0') return self._node._key;else if (prop === '1') return self._node._value;\n          target[0] = self._node._key;\n          target[1] = self._node._value;\n          return target[prop];\n        },\n        set: function (_, prop, newValue) {\n          if (prop !== '1') {\n            throw new TypeError('prop must be 1');\n          }\n          self._node._value = newValue;\n          return true;\n        }\n      });\n    },\n    enumerable: false,\n    configurable: true\n  });\n  OrderedMapIterator.prototype.copy = function () {\n    return new OrderedMapIterator(this._node, this._header, this.container, this.iteratorType);\n  };\n  return OrderedMapIterator;\n}(TreeIterator);\nvar OrderedMap = /** @class */function (_super) {\n  __extends(OrderedMap, _super);\n  /**\n   * @param container - The initialization container.\n   * @param cmp - The compare function.\n   * @param enableIndex - Whether to enable iterator indexing function.\n   * @example\n   * new OrderedMap();\n   * new OrderedMap([[0, 1], [2, 1]]);\n   * new OrderedMap([[0, 1], [2, 1]], (x, y) => x - y);\n   * new OrderedMap([[0, 1], [2, 1]], (x, y) => x - y, true);\n   */\n  function OrderedMap(container, cmp, enableIndex) {\n    if (container === void 0) {\n      container = [];\n    }\n    var _this = _super.call(this, cmp, enableIndex) || this;\n    var self = _this;\n    container.forEach(function (el) {\n      self.setElement(el[0], el[1]);\n    });\n    return _this;\n  }\n  OrderedMap.prototype.begin = function () {\n    return new OrderedMapIterator(this._header._left || this._header, this._header, this);\n  };\n  OrderedMap.prototype.end = function () {\n    return new OrderedMapIterator(this._header, this._header, this);\n  };\n  OrderedMap.prototype.rBegin = function () {\n    return new OrderedMapIterator(this._header._right || this._header, this._header, this, 1 /* IteratorType.REVERSE */);\n  };\n\n  OrderedMap.prototype.rEnd = function () {\n    return new OrderedMapIterator(this._header, this._header, this, 1 /* IteratorType.REVERSE */);\n  };\n\n  OrderedMap.prototype.front = function () {\n    if (this._length === 0) return;\n    var minNode = this._header._left;\n    return [minNode._key, minNode._value];\n  };\n  OrderedMap.prototype.back = function () {\n    if (this._length === 0) return;\n    var maxNode = this._header._right;\n    return [maxNode._key, maxNode._value];\n  };\n  OrderedMap.prototype.lowerBound = function (key) {\n    var resNode = this._lowerBound(this._root, key);\n    return new OrderedMapIterator(resNode, this._header, this);\n  };\n  OrderedMap.prototype.upperBound = function (key) {\n    var resNode = this._upperBound(this._root, key);\n    return new OrderedMapIterator(resNode, this._header, this);\n  };\n  OrderedMap.prototype.reverseLowerBound = function (key) {\n    var resNode = this._reverseLowerBound(this._root, key);\n    return new OrderedMapIterator(resNode, this._header, this);\n  };\n  OrderedMap.prototype.reverseUpperBound = function (key) {\n    var resNode = this._reverseUpperBound(this._root, key);\n    return new OrderedMapIterator(resNode, this._header, this);\n  };\n  OrderedMap.prototype.forEach = function (callback) {\n    this._inOrderTraversal(function (node, index, map) {\n      callback([node._key, node._value], index, map);\n    });\n  };\n  /**\n   * @description Insert a key-value pair or set value by the given key.\n   * @param key - The key want to insert.\n   * @param value - The value want to set.\n   * @param hint - You can give an iterator hint to improve insertion efficiency.\n   * @return The size of container after setting.\n   * @example\n   * const mp = new OrderedMap([[2, 0], [4, 0], [5, 0]]);\n   * const iter = mp.begin();\n   * mp.setElement(1, 0);\n   * mp.setElement(3, 0, iter);  // give a hint will be faster.\n   */\n  OrderedMap.prototype.setElement = function (key, value, hint) {\n    return this._set(key, value, hint);\n  };\n  OrderedMap.prototype.getElementByPos = function (pos) {\n    if (pos < 0 || pos > this._length - 1) {\n      throw new RangeError();\n    }\n    var node = this._inOrderTraversal(pos);\n    return [node._key, node._value];\n  };\n  OrderedMap.prototype.find = function (key) {\n    var curNode = this._getTreeNodeByKey(this._root, key);\n    return new OrderedMapIterator(curNode, this._header, this);\n  };\n  /**\n   * @description Get the value of the element of the specified key.\n   * @param key - The specified key you want to get.\n   * @example\n   * const val = container.getElementByKey(1);\n   */\n  OrderedMap.prototype.getElementByKey = function (key) {\n    var curNode = this._getTreeNodeByKey(this._root, key);\n    return curNode._value;\n  };\n  OrderedMap.prototype.union = function (other) {\n    var self = this;\n    other.forEach(function (el) {\n      self.setElement(el[0], el[1]);\n    });\n    return this._length;\n  };\n  OrderedMap.prototype[Symbol.iterator] = function () {\n    var length, nodeList, i, node;\n    return __generator(this, function (_a) {\n      switch (_a.label) {\n        case 0:\n          length = this._length;\n          nodeList = this._inOrderTraversal();\n          i = 0;\n          _a.label = 1;\n        case 1:\n          if (!(i < length)) return [3 /*break*/, 4];\n          node = nodeList[i];\n          return [4 /*yield*/, [node._key, node._value]];\n        case 2:\n          _a.sent();\n          _a.label = 3;\n        case 3:\n          ++i;\n          return [3 /*break*/, 1];\n        case 4:\n          return [2 /*return*/];\n      }\n    });\n  };\n\n  return OrderedMap;\n}(TreeContainer);\n\nexport { OrderedMap };\n//# sourceMappingURL=index.js.map\n","export const enum TreeNodeColor {\n  RED = 1,\n  BLACK = 0\n}\n\nexport class TreeNode<K, V> {\n  _color: TreeNodeColor;\n  _key: K | undefined;\n  _value: V | undefined;\n  _left: TreeNode<K, V> | undefined = undefined;\n  _right: TreeNode<K, V> | undefined = undefined;\n  _parent: TreeNode<K, V> | undefined = undefined;\n  constructor(\n    key?: K,\n    value?: V,\n    color: TreeNodeColor = TreeNodeColor.RED\n  ) {\n    this._key = key;\n    this._value = value;\n    this._color = color;\n  }\n  /**\n   * @description Get the pre node.\n   * @returns TreeNode about the pre node.\n   */\n  _pre() {\n    let preNode: TreeNode<K, V> = this;\n    const isRootOrHeader = preNode._parent!._parent === preNode;\n    if (isRootOrHeader && preNode._color === TreeNodeColor.RED) {\n      preNode = preNode._right!;\n    } else if (preNode._left) {\n      preNode = preNode._left;\n      while (preNode._right) {\n        preNode = preNode._right;\n      }\n    } else {\n      // Must be root and left is null\n      if (isRootOrHeader) {\n        return preNode._parent!;\n      }\n      let pre = preNode._parent!;\n      while (pre._left === preNode) {\n        preNode = pre;\n        pre = preNode._parent!;\n      }\n      preNode = pre;\n    }\n    return preNode;\n  }\n  /**\n   * @description Get the next node.\n   * @returns TreeNode about the next node.\n   */\n  _next() {\n    let nextNode: TreeNode<K, V> = this;\n    if (nextNode._right) {\n      nextNode = nextNode._right;\n      while (nextNode._left) {\n        nextNode = nextNode._left;\n      }\n      return nextNode;\n    } else {\n      let pre = nextNode._parent!;\n      while (pre._right === nextNode) {\n        nextNode = pre;\n        pre = nextNode._parent!;\n      }\n      if (nextNode._right !== pre) {\n        return pre;\n      } else return nextNode;\n    }\n  }\n  /**\n   * @description Rotate left.\n   * @returns TreeNode about moved to original position after rotation.\n   */\n  _rotateLeft() {\n    const PP = this._parent!;\n    const V = this._right!;\n    const R = V._left;\n\n    if (PP._parent === this) PP._parent = V;\n    else if (PP._left === this) PP._left = V;\n    else PP._right = V;\n\n    V._parent = PP;\n    V._left = this;\n\n    this._parent = V;\n    this._right = R;\n\n    if (R) R._parent = this;\n\n    return V;\n  }\n  /**\n   * @description Rotate right.\n   * @returns TreeNode about moved to original position after rotation.\n   */\n  _rotateRight() {\n    const PP = this._parent!;\n    const F = this._left!;\n    const K = F._right;\n\n    if (PP._parent === this) PP._parent = F;\n    else if (PP._left === this) PP._left = F;\n    else PP._right = F;\n\n    F._parent = PP;\n    F._right = this;\n\n    this._parent = F;\n    this._left = K;\n\n    if (K) K._parent = this;\n\n    return F;\n  }\n}\n\nexport class TreeNodeEnableIndex<K, V> extends TreeNode<K, V> {\n  _subTreeSize = 1;\n  /**\n   * @description Rotate left and do recount.\n   * @returns TreeNode about moved to original position after rotation.\n   */\n  _rotateLeft() {\n    const parent = super._rotateLeft() as TreeNodeEnableIndex<K, V>;\n    this._recount();\n    parent._recount();\n    return parent;\n  }\n  /**\n   * @description Rotate right and do recount.\n   * @returns TreeNode about moved to original position after rotation.\n   */\n  _rotateRight() {\n    const parent = super._rotateRight() as TreeNodeEnableIndex<K, V>;\n    this._recount();\n    parent._recount();\n    return parent;\n  }\n  _recount() {\n    this._subTreeSize = 1;\n    if (this._left) {\n      this._subTreeSize += (this._left as TreeNodeEnableIndex<K, V>)._subTreeSize;\n    }\n    if (this._right) {\n      this._subTreeSize += (this._right as TreeNodeEnableIndex<K, V>)._subTreeSize;\n    }\n  }\n}\n","/**\n * @description The iterator type including `NORMAL` and `REVERSE`.\n */\nexport const enum IteratorType {\n  NORMAL = 0,\n  REVERSE = 1\n}\n\nexport abstract class ContainerIterator<T> {\n  /**\n   * @description The container pointed to by the iterator.\n   */\n  abstract readonly container: Container<T>;\n  /**\n   * @internal\n   */\n  abstract _node: unknown;\n  /**\n   * @description Iterator's type.\n   * @example\n   * console.log(container.end().iteratorType === IteratorType.NORMAL);  // true\n   */\n  readonly iteratorType: IteratorType;\n  /**\n   * @internal\n   */\n  protected constructor(iteratorType = IteratorType.NORMAL) {\n    this.iteratorType = iteratorType;\n  }\n  /**\n   * @param iter - The other iterator you want to compare.\n   * @returns Whether this equals to obj.\n   * @example\n   * container.find(1).equals(container.end());\n   */\n  equals(iter: ContainerIterator<T>) {\n    return this._node === iter._node;\n  }\n  /**\n   * @description Pointers to element.\n   * @returns The value of the pointer's element.\n   * @example\n   * const val = container.begin().pointer;\n   */\n  abstract get pointer(): T;\n  /**\n   * @description Set pointer's value (some containers are unavailable).\n   * @param newValue - The new value you want to set.\n   * @example\n   * (<LinkList<number>>container).begin().pointer = 1;\n   */\n  abstract set pointer(newValue: T);\n  /**\n   * @description Move `this` iterator to pre.\n   * @returns The iterator's self.\n   * @example\n   * const iter = container.find(1);  // container = [0, 1]\n   * const pre = iter.pre();\n   * console.log(pre === iter);  // true\n   * console.log(pre.equals(iter));  // true\n   * console.log(pre.pointer, iter.pointer); // 0, 0\n   */\n  abstract pre(): this;\n  /**\n   * @description Move `this` iterator to next.\n   * @returns The iterator's self.\n   * @example\n   * const iter = container.find(1);  // container = [1, 2]\n   * const next = iter.next();\n   * console.log(next === iter);  // true\n   * console.log(next.equals(iter));  // true\n   * console.log(next.pointer, iter.pointer); // 2, 2\n   */\n  abstract next(): this;\n  /**\n   * @description Get a copy of itself.\n   * @returns The copy of self.\n   * @example\n   * const iter = container.find(1);  // container = [1, 2]\n   * const next = iter.copy().next();\n   * console.log(next === iter);  // false\n   * console.log(next.equals(iter));  // false\n   * console.log(next.pointer, iter.pointer); // 2, 1\n   */\n  abstract copy(): ContainerIterator<T>;\n  abstract isAccessible(): boolean;\n}\n\nexport abstract class Base {\n  /**\n   * @description Container's size.\n   * @internal\n   */\n  protected _length = 0;\n  /**\n   * @returns The size of the container.\n   * @example\n   * const container = new Vector([1, 2]);\n   * console.log(container.length); // 2\n   */\n  get length() {\n    return this._length;\n  }\n  /**\n   * @returns The size of the container.\n   * @example\n   * const container = new Vector([1, 2]);\n   * console.log(container.size()); // 2\n   */\n  size() {\n    return this._length;\n  }\n  /**\n   * @returns Whether the container is empty.\n   * @example\n   * container.clear();\n   * console.log(container.empty());  // true\n   */\n  empty() {\n    return this._length === 0;\n  }\n  /**\n   * @description Clear the container.\n   * @example\n   * container.clear();\n   * console.log(container.empty());  // true\n   */\n  abstract clear(): void;\n}\n\nexport abstract class Container<T> extends Base {\n  /**\n   * @returns Iterator pointing to the beginning element.\n   * @example\n   * const begin = container.begin();\n   * const end = container.end();\n   * for (const it = begin; !it.equals(end); it.next()) {\n   *   doSomething(it.pointer);\n   * }\n   */\n  abstract begin(): ContainerIterator<T>;\n  /**\n   * @returns Iterator pointing to the super end like c++.\n   * @example\n   * const begin = container.begin();\n   * const end = container.end();\n   * for (const it = begin; !it.equals(end); it.next()) {\n   *   doSomething(it.pointer);\n   * }\n   */\n  abstract end(): ContainerIterator<T>;\n  /**\n   * @returns Iterator pointing to the end element.\n   * @example\n   * const rBegin = container.rBegin();\n   * const rEnd = container.rEnd();\n   * for (const it = rBegin; !it.equals(rEnd); it.next()) {\n   *   doSomething(it.pointer);\n   * }\n   */\n  abstract rBegin(): ContainerIterator<T>;\n  /**\n   * @returns Iterator pointing to the super begin like c++.\n   * @example\n   * const rBegin = container.rBegin();\n   * const rEnd = container.rEnd();\n   * for (const it = rBegin; !it.equals(rEnd); it.next()) {\n   *   doSomething(it.pointer);\n   * }\n   */\n  abstract rEnd(): ContainerIterator<T>;\n  /**\n   * @returns The first element of the container.\n   */\n  abstract front(): T | undefined;\n  /**\n   * @returns The last element of the container.\n   */\n  abstract back(): T | undefined;\n  /**\n   * @param element - The element you want to find.\n   * @returns An iterator pointing to the element if found, or super end if not found.\n   * @example\n   * container.find(1).equals(container.end());\n   */\n  abstract find(element: T): ContainerIterator<T>;\n  /**\n   * @description Iterate over all elements in the container.\n   * @param callback - Callback function like Array.forEach.\n   * @example\n   * container.forEach((element, index) => console.log(element, index));\n   */\n  abstract forEach(callback: (element: T, index: number, container: Container<T>) => void): void;\n  /**\n   * @description Gets the value of the element at the specified position.\n   * @example\n   * const val = container.getElementByPos(-1); // throw a RangeError\n   */\n  abstract getElementByPos(pos: number): T;\n  /**\n   * @description Removes the element at the specified position.\n   * @param pos - The element's position you want to remove.\n   * @returns The container length after erasing.\n   * @example\n   * container.eraseElementByPos(-1); // throw a RangeError\n   */\n  abstract eraseElementByPos(pos: number): number;\n  /**\n   * @description Removes element by iterator and move `iter` to next.\n   * @param iter - The iterator you want to erase.\n   * @returns The next iterator.\n   * @example\n   * container.eraseElementByIterator(container.begin());\n   * container.eraseElementByIterator(container.end()); // throw a RangeError\n   */\n  abstract eraseElementByIterator(\n    iter: ContainerIterator<T>\n  ): ContainerIterator<T>;\n  /**\n   * @description Using for `for...of` syntax like Array.\n   * @example\n   * for (const element of container) {\n   *   console.log(element);\n   * }\n   */\n  abstract [Symbol.iterator](): Generator<T, void>;\n}\n\n/**\n * @description The initial data type passed in when initializing the container.\n */\nexport type initContainer<T> = {\n  size?: number | (() => number);\n  length?: number;\n  forEach: (callback: (el: T) => void) => void;\n}\n","/**\n * @description Throw an iterator access error.\n * @internal\n */\nexport function throwIteratorAccessError() {\n  throw new RangeError('Iterator access denied!');\n}\n","import type TreeIterator from './TreeIterator';\nimport { TreeNode, TreeNodeColor, TreeNodeEnableIndex } from './TreeNode';\nimport { Container, IteratorType } from '@/container/ContainerBase';\nimport $checkWithinAccessParams from '@/utils/checkParams.macro';\nimport { throwIteratorAccessError } from '@/utils/throwError';\n\nabstract class TreeContainer<K, V> extends Container<K | [K, V]> {\n  enableIndex: boolean;\n  /**\n   * @internal\n   */\n  protected _header: TreeNode<K, V>;\n  /**\n   * @internal\n   */\n  protected _root: TreeNode<K, V> | undefined = undefined;\n  /**\n   * @internal\n   */\n  protected readonly _cmp: (x: K, y: K) => number;\n  /**\n   * @internal\n   */\n  protected readonly _TreeNodeClass: typeof TreeNode | typeof TreeNodeEnableIndex;\n  /**\n   * @internal\n   */\n  protected constructor(\n    cmp: (x: K, y: K) => number =\n    function (x: K, y: K) {\n      if (x < y) return -1;\n      if (x > y) return 1;\n      return 0;\n    },\n    enableIndex = false\n  ) {\n    super();\n    this._cmp = cmp;\n    this.enableIndex = enableIndex;\n    this._TreeNodeClass = enableIndex ? TreeNodeEnableIndex : TreeNode;\n    this._header = new this._TreeNodeClass();\n  }\n  /**\n   * @internal\n   */\n  protected _lowerBound(curNode: TreeNode<K, V> | undefined, key: K) {\n    let resNode = this._header;\n    while (curNode) {\n      const cmpResult = this._cmp(curNode._key!, key);\n      if (cmpResult < 0) {\n        curNode = curNode._right;\n      } else if (cmpResult > 0) {\n        resNode = curNode;\n        curNode = curNode._left;\n      } else return curNode;\n    }\n    return resNode;\n  }\n  /**\n   * @internal\n   */\n  protected _upperBound(curNode: TreeNode<K, V> | undefined, key: K) {\n    let resNode = this._header;\n    while (curNode) {\n      const cmpResult = this._cmp(curNode._key!, key);\n      if (cmpResult <= 0) {\n        curNode = curNode._right;\n      } else {\n        resNode = curNode;\n        curNode = curNode._left;\n      }\n    }\n    return resNode;\n  }\n  /**\n   * @internal\n   */\n  protected _reverseLowerBound(curNode: TreeNode<K, V> | undefined, key: K) {\n    let resNode = this._header;\n    while (curNode) {\n      const cmpResult = this._cmp(curNode._key!, key);\n      if (cmpResult < 0) {\n        resNode = curNode;\n        curNode = curNode._right;\n      } else if (cmpResult > 0) {\n        curNode = curNode._left;\n      } else return curNode;\n    }\n    return resNode;\n  }\n  /**\n   * @internal\n   */\n  protected _reverseUpperBound(curNode: TreeNode<K, V> | undefined, key: K) {\n    let resNode = this._header;\n    while (curNode) {\n      const cmpResult = this._cmp(curNode._key!, key);\n      if (cmpResult < 0) {\n        resNode = curNode;\n        curNode = curNode._right;\n      } else {\n        curNode = curNode._left;\n      }\n    }\n    return resNode;\n  }\n  /**\n   * @internal\n   */\n  protected _eraseNodeSelfBalance(curNode: TreeNode<K, V>) {\n    while (true) {\n      const parentNode = curNode._parent!;\n      if (parentNode === this._header) return;\n      if (curNode._color === TreeNodeColor.RED) {\n        curNode._color = TreeNodeColor.BLACK;\n        return;\n      }\n      if (curNode === parentNode._left) {\n        const brother = parentNode._right!;\n        if (brother._color === TreeNodeColor.RED) {\n          brother._color = TreeNodeColor.BLACK;\n          parentNode._color = TreeNodeColor.RED;\n          if (parentNode === this._root) {\n            this._root = parentNode._rotateLeft();\n          } else parentNode._rotateLeft();\n        } else {\n          if (brother._right && brother._right._color === TreeNodeColor.RED) {\n            brother._color = parentNode._color;\n            parentNode._color = TreeNodeColor.BLACK;\n            brother._right._color = TreeNodeColor.BLACK;\n            if (parentNode === this._root) {\n              this._root = parentNode._rotateLeft();\n            } else parentNode._rotateLeft();\n            return;\n          } else if (brother._left && brother._left._color === TreeNodeColor.RED) {\n            brother._color = TreeNodeColor.RED;\n            brother._left._color = TreeNodeColor.BLACK;\n            brother._rotateRight();\n          } else {\n            brother._color = TreeNodeColor.RED;\n            curNode = parentNode;\n          }\n        }\n      } else {\n        const brother = parentNode._left!;\n        if (brother._color === TreeNodeColor.RED) {\n          brother._color = TreeNodeColor.BLACK;\n          parentNode._color = TreeNodeColor.RED;\n          if (parentNode === this._root) {\n            this._root = parentNode._rotateRight();\n          } else parentNode._rotateRight();\n        } else {\n          if (brother._left && brother._left._color === TreeNodeColor.RED) {\n            brother._color = parentNode._color;\n            parentNode._color = TreeNodeColor.BLACK;\n            brother._left._color = TreeNodeColor.BLACK;\n            if (parentNode === this._root) {\n              this._root = parentNode._rotateRight();\n            } else parentNode._rotateRight();\n            return;\n          } else if (brother._right && brother._right._color === TreeNodeColor.RED) {\n            brother._color = TreeNodeColor.RED;\n            brother._right._color = TreeNodeColor.BLACK;\n            brother._rotateLeft();\n          } else {\n            brother._color = TreeNodeColor.RED;\n            curNode = parentNode;\n          }\n        }\n      }\n    }\n  }\n  /**\n   * @internal\n   */\n  protected _eraseNode(curNode: TreeNode<K, V>) {\n    if (this._length === 1) {\n      this.clear();\n      return;\n    }\n    let swapNode = curNode;\n    while (swapNode._left || swapNode._right) {\n      if (swapNode._right) {\n        swapNode = swapNode._right;\n        while (swapNode._left) swapNode = swapNode._left;\n      } else {\n        swapNode = swapNode._left!;\n      }\n      const key = curNode._key;\n      curNode._key = swapNode._key;\n      swapNode._key = key;\n      const value = curNode._value;\n      curNode._value = swapNode._value;\n      swapNode._value = value;\n      curNode = swapNode;\n    }\n    if (this._header._left === swapNode) {\n      this._header._left = swapNode._parent;\n    } else if (this._header._right === swapNode) {\n      this._header._right = swapNode._parent;\n    }\n    this._eraseNodeSelfBalance(swapNode);\n    let _parent = swapNode._parent as TreeNodeEnableIndex<K, V>;\n    if (swapNode === _parent._left) {\n      _parent._left = undefined;\n    } else _parent._right = undefined;\n    this._length -= 1;\n    this._root!._color = TreeNodeColor.BLACK;\n    if (this.enableIndex) {\n      while (_parent !== this._header) {\n        _parent._subTreeSize -= 1;\n        _parent = _parent._parent as TreeNodeEnableIndex<K, V>;\n      }\n    }\n  }\n  protected _inOrderTraversal(): TreeNode<K, V>[];\n  protected _inOrderTraversal(pos: number): TreeNode<K, V>;\n  protected _inOrderTraversal(\n    callback: (node: TreeNode<K, V>, index: number, map: this) => void\n  ): TreeNode<K, V>;\n  /**\n   * @internal\n   */\n  protected _inOrderTraversal(\n    param?: number | ((node: TreeNode<K, V>, index: number, map: this) => void)\n  ) {\n    const pos = typeof param === 'number' ? param : undefined;\n    const callback = typeof param === 'function' ? param : undefined;\n    const nodeList = typeof param === 'undefined' ? <TreeNode<K, V>[]>[] : undefined;\n    let index = 0;\n    let curNode = this._root;\n    const stack: TreeNode<K, V>[] = [];\n    while (stack.length || curNode) {\n      if (curNode) {\n        stack.push(curNode);\n        curNode = curNode._left;\n      } else {\n        curNode = stack.pop()!;\n        if (index === pos) return curNode;\n        nodeList && nodeList.push(curNode);\n        callback && callback(curNode, index, this);\n        index += 1;\n        curNode = curNode._right;\n      }\n    }\n    return nodeList;\n  }\n  /**\n   * @internal\n   */\n  protected _insertNodeSelfBalance(curNode: TreeNode<K, V>) {\n    while (true) {\n      const parentNode = curNode._parent!;\n      if (parentNode._color === TreeNodeColor.BLACK) return;\n      const grandParent = parentNode._parent!;\n      if (parentNode === grandParent._left) {\n        const uncle = grandParent._right;\n        if (uncle && uncle._color === TreeNodeColor.RED) {\n          uncle._color = parentNode._color = TreeNodeColor.BLACK;\n          if (grandParent === this._root) return;\n          grandParent._color = TreeNodeColor.RED;\n          curNode = grandParent;\n          continue;\n        } else if (curNode === parentNode._right) {\n          curNode._color = TreeNodeColor.BLACK;\n          if (curNode._left) {\n            curNode._left._parent = parentNode;\n          }\n          if (curNode._right) {\n            curNode._right._parent = grandParent;\n          }\n          parentNode._right = curNode._left;\n          grandParent._left = curNode._right;\n          curNode._left = parentNode;\n          curNode._right = grandParent;\n          if (grandParent === this._root) {\n            this._root = curNode;\n            this._header._parent = curNode;\n          } else {\n            const GP = grandParent._parent!;\n            if (GP._left === grandParent) {\n              GP._left = curNode;\n            } else GP._right = curNode;\n          }\n          curNode._parent = grandParent._parent;\n          parentNode._parent = curNode;\n          grandParent._parent = curNode;\n          grandParent._color = TreeNodeColor.RED;\n        } else {\n          parentNode._color = TreeNodeColor.BLACK;\n          if (grandParent === this._root) {\n            this._root = grandParent._rotateRight();\n          } else grandParent._rotateRight();\n          grandParent._color = TreeNodeColor.RED;\n          return;\n        }\n      } else {\n        const uncle = grandParent._left;\n        if (uncle && uncle._color === TreeNodeColor.RED) {\n          uncle._color = parentNode._color = TreeNodeColor.BLACK;\n          if (grandParent === this._root) return;\n          grandParent._color = TreeNodeColor.RED;\n          curNode = grandParent;\n          continue;\n        } else if (curNode === parentNode._left) {\n          curNode._color = TreeNodeColor.BLACK;\n          if (curNode._left) {\n            curNode._left._parent = grandParent;\n          }\n          if (curNode._right) {\n            curNode._right._parent = parentNode;\n          }\n          grandParent._right = curNode._left;\n          parentNode._left = curNode._right;\n          curNode._left = grandParent;\n          curNode._right = parentNode;\n          if (grandParent === this._root) {\n            this._root = curNode;\n            this._header._parent = curNode;\n          } else {\n            const GP = grandParent._parent!;\n            if (GP._left === grandParent) {\n              GP._left = curNode;\n            } else GP._right = curNode;\n          }\n          curNode._parent = grandParent._parent;\n          parentNode._parent = curNode;\n          grandParent._parent = curNode;\n          grandParent._color = TreeNodeColor.RED;\n        } else {\n          parentNode._color = TreeNodeColor.BLACK;\n          if (grandParent === this._root) {\n            this._root = grandParent._rotateLeft();\n          } else grandParent._rotateLeft();\n          grandParent._color = TreeNodeColor.RED;\n          return;\n        }\n      }\n      if (this.enableIndex) {\n        (<TreeNodeEnableIndex<K, V>>parentNode)._recount();\n        (<TreeNodeEnableIndex<K, V>>grandParent)._recount();\n        (<TreeNodeEnableIndex<K, V>>curNode)._recount();\n      }\n      return;\n    }\n  }\n  /**\n   * @internal\n   */\n  protected _set(key: K, value?: V, hint?: TreeIterator<K, V>) {\n    if (this._root === undefined) {\n      this._length += 1;\n      this._root = new this._TreeNodeClass(key, value, TreeNodeColor.BLACK);\n      this._root._parent = this._header;\n      this._header._parent = this._header._left = this._header._right = this._root;\n      return this._length;\n    }\n    let curNode;\n    const minNode = this._header._left!;\n    const compareToMin = this._cmp(minNode._key!, key);\n    if (compareToMin === 0) {\n      minNode._value = value;\n      return this._length;\n    } else if (compareToMin > 0) {\n      minNode._left = new this._TreeNodeClass(key, value);\n      minNode._left._parent = minNode;\n      curNode = minNode._left;\n      this._header._left = curNode;\n    } else {\n      const maxNode = this._header._right!;\n      const compareToMax = this._cmp(maxNode._key!, key);\n      if (compareToMax === 0) {\n        maxNode._value = value;\n        return this._length;\n      } else if (compareToMax < 0) {\n        maxNode._right = new this._TreeNodeClass(key, value);\n        maxNode._right._parent = maxNode;\n        curNode = maxNode._right;\n        this._header._right = curNode;\n      } else {\n        if (hint !== undefined) {\n          const iterNode = hint._node;\n          if (iterNode !== this._header) {\n            const iterCmpRes = this._cmp(iterNode._key!, key);\n            if (iterCmpRes === 0) {\n              iterNode._value = value;\n              return this._length;\n            } else /* istanbul ignore else */ if (iterCmpRes > 0) {\n              const preNode = iterNode._pre();\n              const preCmpRes = this._cmp(preNode._key!, key);\n              if (preCmpRes === 0) {\n                preNode._value = value;\n                return this._length;\n              } else if (preCmpRes < 0) {\n                curNode = new this._TreeNodeClass(key, value);\n                if (preNode._right === undefined) {\n                  preNode._right = curNode;\n                  curNode._parent = preNode;\n                } else {\n                  iterNode._left = curNode;\n                  curNode._parent = iterNode;\n                }\n              }\n            }\n          }\n        }\n        if (curNode === undefined) {\n          curNode = this._root;\n          while (true) {\n            const cmpResult = this._cmp(curNode._key!, key);\n            if (cmpResult > 0) {\n              if (curNode._left === undefined) {\n                curNode._left = new this._TreeNodeClass(key, value);\n                curNode._left._parent = curNode;\n                curNode = curNode._left;\n                break;\n              }\n              curNode = curNode._left;\n            } else if (cmpResult < 0) {\n              if (curNode._right === undefined) {\n                curNode._right = new this._TreeNodeClass(key, value);\n                curNode._right._parent = curNode;\n                curNode = curNode._right;\n                break;\n              }\n              curNode = curNode._right;\n            } else {\n              curNode._value = value;\n              return this._length;\n            }\n          }\n        }\n      }\n    }\n    if (this.enableIndex) {\n      let parent = curNode._parent as TreeNodeEnableIndex<K, V>;\n      while (parent !== this._header) {\n        parent._subTreeSize += 1;\n        parent = parent._parent as TreeNodeEnableIndex<K, V>;\n      }\n    }\n    this._insertNodeSelfBalance(curNode);\n    this._length += 1;\n    return this._length;\n  }\n  /**\n   * @internal\n   */\n  protected _getTreeNodeByKey(curNode: TreeNode<K, V> | undefined, key: K) {\n    while (curNode) {\n      const cmpResult = this._cmp(curNode._key!, key);\n      if (cmpResult < 0) {\n        curNode = curNode._right;\n      } else if (cmpResult > 0) {\n        curNode = curNode._left;\n      } else return curNode;\n    }\n    return curNode || this._header;\n  }\n  clear() {\n    this._length = 0;\n    this._root = undefined;\n    this._header._parent = undefined;\n    this._header._left = this._header._right = undefined;\n  }\n  /**\n   * @description Update node's key by iterator.\n   * @param iter - The iterator you want to change.\n   * @param key - The key you want to update.\n   * @returns Whether the modification is successful.\n   * @example\n   * const st = new orderedSet([1, 2, 5]);\n   * const iter = st.find(2);\n   * st.updateKeyByIterator(iter, 3); // then st will become [1, 3, 5]\n   */\n  updateKeyByIterator(iter: TreeIterator<K, V>, key: K): boolean {\n    const node = iter._node;\n    if (node === this._header) {\n      throwIteratorAccessError();\n    }\n    if (this._length === 1) {\n      node._key = key;\n      return true;\n    }\n    const nextKey = node._next()._key!;\n    if (node === this._header._left) {\n      if (this._cmp(nextKey, key) > 0) {\n        node._key = key;\n        return true;\n      }\n      return false;\n    }\n    const preKey = node._pre()._key!;\n    if (node === this._header._right) {\n      if (this._cmp(preKey, key) < 0) {\n        node._key = key;\n        return true;\n      }\n      return false;\n    }\n    if (\n      this._cmp(preKey, key) >= 0 ||\n      this._cmp(nextKey, key) <= 0\n    ) return false;\n    node._key = key;\n    return true;\n  }\n  eraseElementByPos(pos: number) {\n    $checkWithinAccessParams!(pos, 0, this._length - 1);\n    const node = this._inOrderTraversal(pos);\n    this._eraseNode(node);\n    return this._length;\n  }\n  /**\n   * @description Remove the element of the specified key.\n   * @param key - The key you want to remove.\n   * @returns Whether erase successfully.\n   */\n  eraseElementByKey(key: K) {\n    if (this._length === 0) return false;\n    const curNode = this._getTreeNodeByKey(this._root, key);\n    if (curNode === this._header) return false;\n    this._eraseNode(curNode);\n    return true;\n  }\n  eraseElementByIterator(iter: TreeIterator<K, V>) {\n    const node = iter._node;\n    if (node === this._header) {\n      throwIteratorAccessError();\n    }\n    const hasNoRight = node._right === undefined;\n    const isNormal = iter.iteratorType === IteratorType.NORMAL;\n    // For the normal iterator, the `next` node will be swapped to `this` node when has right.\n    if (isNormal) {\n      // So we should move it to next when it's right is null.\n      if (hasNoRight) iter.next();\n    } else {\n      // For the reverse iterator, only when it doesn't have right and has left the `next` node will be swapped.\n      // So when it has right, or it is a leaf node we should move it to `next`.\n      if (!hasNoRight || node._left === undefined) iter.next();\n    }\n    this._eraseNode(node);\n    return iter;\n  }\n  /**\n   * @description Get the height of the tree.\n   * @returns Number about the height of the RB-tree.\n   */\n  getHeight() {\n    if (this._length === 0) return 0;\n    function traversal(curNode: TreeNode<K, V> | undefined): number {\n      if (!curNode) return 0;\n      return Math.max(traversal(curNode._left), traversal(curNode._right)) + 1;\n    }\n    return traversal(this._root);\n  }\n  /**\n   * @param key - The given key you want to compare.\n   * @returns An iterator to the first element less than the given key.\n   */\n  abstract reverseUpperBound(key: K): TreeIterator<K, V>;\n  /**\n   * @description Union the other tree to self.\n   * @param other - The other tree container you want to merge.\n   * @returns The size of the tree after union.\n   */\n  abstract union(other: TreeContainer<K, V>): number;\n  /**\n   * @param key - The given key you want to compare.\n   * @returns An iterator to the first element not greater than the given key.\n   */\n  abstract reverseLowerBound(key: K): TreeIterator<K, V>;\n  /**\n   * @param key - The given key you want to compare.\n   * @returns An iterator to the first element not less than the given key.\n   */\n  abstract lowerBound(key: K): TreeIterator<K, V>;\n  /**\n   * @param key - The given key you want to compare.\n   * @returns An iterator to the first element greater than the given key.\n   */\n  abstract upperBound(key: K): TreeIterator<K, V>;\n}\n\nexport default TreeContainer;\n","import { TreeNode } from './TreeNode';\nimport type { TreeNodeEnableIndex } from './TreeNode';\nimport { ContainerIterator, IteratorType } from '@/container/ContainerBase';\nimport TreeContainer from '@/container/TreeContainer/Base/index';\nimport { throwIteratorAccessError } from '@/utils/throwError';\n\nabstract class TreeIterator<K, V> extends ContainerIterator<K | [K, V]> {\n  abstract readonly container: TreeContainer<K, V>;\n  /**\n   * @internal\n   */\n  _node: TreeNode<K, V>;\n  /**\n   * @internal\n   */\n  protected _header: TreeNode<K, V>;\n  /**\n   * @internal\n   */\n  protected constructor(\n    node: TreeNode<K, V>,\n    header: TreeNode<K, V>,\n    iteratorType?: IteratorType\n  ) {\n    super(iteratorType);\n    this._node = node;\n    this._header = header;\n    if (this.iteratorType === IteratorType.NORMAL) {\n      this.pre = function () {\n        if (this._node === this._header._left) {\n          throwIteratorAccessError();\n        }\n        this._node = this._node._pre();\n        return this;\n      };\n\n      this.next = function () {\n        if (this._node === this._header) {\n          throwIteratorAccessError();\n        }\n        this._node = this._node._next();\n        return this;\n      };\n    } else {\n      this.pre = function () {\n        if (this._node === this._header._right) {\n          throwIteratorAccessError();\n        }\n        this._node = this._node._next();\n        return this;\n      };\n\n      this.next = function () {\n        if (this._node === this._header) {\n          throwIteratorAccessError();\n        }\n        this._node = this._node._pre();\n        return this;\n      };\n    }\n  }\n  /**\n   * @description Get the sequential index of the iterator in the tree container.<br/>\n   *              <strong>Note:</strong>\n   *              This function only takes effect when the specified tree container `enableIndex = true`.\n   * @returns The index subscript of the node in the tree.\n   * @example\n   * const st = new OrderedSet([1, 2, 3], true);\n   * console.log(st.begin().next().index);  // 1\n   */\n  get index() {\n    let _node = this._node as TreeNodeEnableIndex<K, V>;\n    const root = this._header._parent as TreeNodeEnableIndex<K, V>;\n    if (_node === this._header) {\n      if (root) {\n        return root._subTreeSize - 1;\n      }\n      return 0;\n    }\n    let index = 0;\n    if (_node._left) {\n      index += (_node._left as TreeNodeEnableIndex<K, V>)._subTreeSize;\n    }\n    while (_node !== root) {\n      const _parent = _node._parent as TreeNodeEnableIndex<K, V>;\n      if (_node === _parent._right) {\n        index += 1;\n        if (_parent._left) {\n          index += (_parent._left as TreeNodeEnableIndex<K, V>)._subTreeSize;\n        }\n      }\n      _node = _parent;\n    }\n    return index;\n  }\n  isAccessible() {\n    return this._node !== this._header;\n  }\n  // @ts-ignore\n  pre(): this;\n  // @ts-ignore\n  next(): this;\n}\n\nexport default TreeIterator;\n","import TreeContainer from './Base';\nimport TreeIterator from './Base/TreeIterator';\nimport { TreeNode } from './Base/TreeNode';\nimport { initContainer, IteratorType } from '@/container/ContainerBase';\nimport $checkWithinAccessParams from '@/utils/checkParams.macro';\nimport { throwIteratorAccessError } from '@/utils/throwError';\n\nclass OrderedMapIterator<K, V> extends TreeIterator<K, V> {\n  container: OrderedMap<K, V>;\n  constructor(\n    node: TreeNode<K, V>,\n    header: TreeNode<K, V>,\n    container: OrderedMap<K, V>,\n    iteratorType?: IteratorType\n  ) {\n    super(node, header, iteratorType);\n    this.container = container;\n  }\n  get pointer() {\n    if (this._node === this._header) {\n      throwIteratorAccessError();\n    }\n    const self = this;\n    return new Proxy(<[K, V]><unknown>[], {\n      get(target, prop: '0' | '1') {\n        if (prop === '0') return self._node._key!;\n        else if (prop === '1') return self._node._value!;\n        target[0] = self._node._key!;\n        target[1] = self._node._value!;\n        return target[prop];\n      },\n      set(_, prop: '1', newValue: V) {\n        if (prop !== '1') {\n          throw new TypeError('prop must be 1');\n        }\n        self._node._value = newValue;\n        return true;\n      }\n    });\n  }\n  copy() {\n    return new OrderedMapIterator<K, V>(\n      this._node,\n      this._header,\n      this.container,\n      this.iteratorType\n    );\n  }\n  // @ts-ignore\n  equals(iter: OrderedMapIterator<K, V>): boolean;\n}\n\nexport type { OrderedMapIterator };\n\nclass OrderedMap<K, V> extends TreeContainer<K, V> {\n  /**\n   * @param container - The initialization container.\n   * @param cmp - The compare function.\n   * @param enableIndex - Whether to enable iterator indexing function.\n   * @example\n   * new OrderedMap();\n   * new OrderedMap([[0, 1], [2, 1]]);\n   * new OrderedMap([[0, 1], [2, 1]], (x, y) => x - y);\n   * new OrderedMap([[0, 1], [2, 1]], (x, y) => x - y, true);\n   */\n  constructor(\n    container: initContainer<[K, V]> = [],\n    cmp?: (x: K, y: K) => number,\n    enableIndex?: boolean\n  ) {\n    super(cmp, enableIndex);\n    const self = this;\n    container.forEach(function (el) {\n      self.setElement(el[0], el[1]);\n    });\n  }\n  begin() {\n    return new OrderedMapIterator<K, V>(this._header._left || this._header, this._header, this);\n  }\n  end() {\n    return new OrderedMapIterator<K, V>(this._header, this._header, this);\n  }\n  rBegin() {\n    return new OrderedMapIterator<K, V>(\n      this._header._right || this._header,\n      this._header,\n      this,\n      IteratorType.REVERSE\n    );\n  }\n  rEnd() {\n    return new OrderedMapIterator<K, V>(this._header, this._header, this, IteratorType.REVERSE);\n  }\n  front() {\n    if (this._length === 0) return;\n    const minNode = this._header._left!;\n    return <[K, V]>[minNode._key, minNode._value];\n  }\n  back() {\n    if (this._length === 0) return;\n    const maxNode = this._header._right!;\n    return <[K, V]>[maxNode._key, maxNode._value];\n  }\n  lowerBound(key: K) {\n    const resNode = this._lowerBound(this._root, key);\n    return new OrderedMapIterator<K, V>(resNode, this._header, this);\n  }\n  upperBound(key: K) {\n    const resNode = this._upperBound(this._root, key);\n    return new OrderedMapIterator<K, V>(resNode, this._header, this);\n  }\n  reverseLowerBound(key: K) {\n    const resNode = this._reverseLowerBound(this._root, key);\n    return new OrderedMapIterator<K, V>(resNode, this._header, this);\n  }\n  reverseUpperBound(key: K) {\n    const resNode = this._reverseUpperBound(this._root, key);\n    return new OrderedMapIterator<K, V>(resNode, this._header, this);\n  }\n  forEach(callback: (element: [K, V], index: number, map: OrderedMap<K, V>) => void) {\n    this._inOrderTraversal(function (node, index, map) {\n      callback(<[K, V]>[node._key, node._value], index, map);\n    });\n  }\n  /**\n   * @description Insert a key-value pair or set value by the given key.\n   * @param key - The key want to insert.\n   * @param value - The value want to set.\n   * @param hint - You can give an iterator hint to improve insertion efficiency.\n   * @return The size of container after setting.\n   * @example\n   * const mp = new OrderedMap([[2, 0], [4, 0], [5, 0]]);\n   * const iter = mp.begin();\n   * mp.setElement(1, 0);\n   * mp.setElement(3, 0, iter);  // give a hint will be faster.\n   */\n  setElement(key: K, value: V, hint?: OrderedMapIterator<K, V>) {\n    return this._set(key, value, hint);\n  }\n  getElementByPos(pos: number) {\n    $checkWithinAccessParams!(pos, 0, this._length - 1);\n    const node = this._inOrderTraversal(pos);\n    return <[K, V]>[node._key, node._value];\n  }\n  find(key: K) {\n    const curNode = this._getTreeNodeByKey(this._root, key);\n    return new OrderedMapIterator<K, V>(curNode, this._header, this);\n  }\n  /**\n   * @description Get the value of the element of the specified key.\n   * @param key - The specified key you want to get.\n   * @example\n   * const val = container.getElementByKey(1);\n   */\n  getElementByKey(key: K) {\n    const curNode = this._getTreeNodeByKey(this._root, key);\n    return curNode._value;\n  }\n  union(other: OrderedMap<K, V>) {\n    const self = this;\n    other.forEach(function (el) {\n      self.setElement(el[0], el[1]);\n    });\n    return this._length;\n  }\n  * [Symbol.iterator]() {\n    const length = this._length;\n    const nodeList = this._inOrderTraversal();\n    for (let i = 0; i < length; ++i) {\n      const node = nodeList[i];\n      yield <[K, V]>[node._key, node._value];\n    }\n  }\n  // @ts-ignore\n  eraseElementByIterator(iter: OrderedMapIterator<K, V>): OrderedMapIterator<K, V>;\n}\n\nexport default OrderedMap;\n","/*\n * Copyright 2021 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport { ServiceDefinition } from './make-client';\nimport { Server, UntypedServiceImplementation } from './server';\n\ninterface GetServiceDefinition {\n  (): ServiceDefinition;\n}\n\ninterface GetHandlers {\n  (): UntypedServiceImplementation;\n}\n\nconst registeredAdminServices: {\n  getServiceDefinition: GetServiceDefinition;\n  getHandlers: GetHandlers;\n}[] = [];\n\nexport function registerAdminService(\n  getServiceDefinition: GetServiceDefinition,\n  getHandlers: GetHandlers\n) {\n  registeredAdminServices.push({ getServiceDefinition, getHandlers });\n}\n\nexport function addAdminServicesToServer(server: Server): void {\n  for (const { getServiceDefinition, getHandlers } of registeredAdminServices) {\n    server.addService(getServiceDefinition(), getHandlers());\n  }\n}\n","/*\n * Copyright 2019 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport { EventEmitter } from 'events';\nimport { Duplex, Readable, Writable } from 'stream';\n\nimport { StatusObject, MessageContext } from './call-interface';\nimport { Status } from './constants';\nimport { EmitterAugmentation1 } from './events';\nimport { Metadata } from './metadata';\nimport { ObjectReadable, ObjectWritable, WriteCallback } from './object-stream';\nimport { InterceptingCallInterface } from './client-interceptors';\nimport { AuthContext } from './auth-context';\n\n/**\n * A type extending the built-in Error object with additional fields.\n */\nexport type ServiceError = StatusObject & Error;\n\n/**\n * A base type for all user-facing values returned by client-side method calls.\n */\nexport type SurfaceCall = {\n  call?: InterceptingCallInterface;\n  cancel(): void;\n  getPeer(): string;\n  getAuthContext(): AuthContext | null;\n} & EmitterAugmentation1<'metadata', Metadata> &\n  EmitterAugmentation1<'status', StatusObject> &\n  EventEmitter;\n\n/**\n * A type representing the return value of a unary method call.\n */\nexport type ClientUnaryCall = SurfaceCall;\n\n/**\n * A type representing the return value of a server stream method call.\n */\nexport type ClientReadableStream<ResponseType> = {\n  deserialize: (chunk: Buffer) => ResponseType;\n} & SurfaceCall &\n  ObjectReadable<ResponseType>;\n\n/**\n * A type representing the return value of a client stream method call.\n */\nexport type ClientWritableStream<RequestType> = {\n  serialize: (value: RequestType) => Buffer;\n} & SurfaceCall &\n  ObjectWritable<RequestType>;\n\n/**\n * A type representing the return value of a bidirectional stream method call.\n */\nexport type ClientDuplexStream<RequestType, ResponseType> =\n  ClientWritableStream<RequestType> & ClientReadableStream<ResponseType>;\n\n/**\n * Construct a ServiceError from a StatusObject. This function exists primarily\n * as an attempt to make the error stack trace clearly communicate that the\n * error is not necessarily a problem in gRPC itself.\n * @param status\n */\nexport function callErrorFromStatus(\n  status: StatusObject,\n  callerStack: string\n): ServiceError {\n  const message = `${status.code} ${Status[status.code]}: ${status.details}`;\n  const error = new Error(message);\n  const stack = `${error.stack}\\nfor call at\\n${callerStack}`;\n  return Object.assign(new Error(message), status, { stack });\n}\n\nexport class ClientUnaryCallImpl\n  extends EventEmitter\n  implements ClientUnaryCall\n{\n  public call?: InterceptingCallInterface;\n  constructor() {\n    super();\n  }\n\n  cancel(): void {\n    this.call?.cancelWithStatus(Status.CANCELLED, 'Cancelled on client');\n  }\n\n  getPeer(): string {\n    return this.call?.getPeer() ?? 'unknown';\n  }\n\n  getAuthContext(): AuthContext | null {\n    return this.call?.getAuthContext() ?? null;\n  }\n}\n\nexport class ClientReadableStreamImpl<ResponseType>\n  extends Readable\n  implements ClientReadableStream<ResponseType>\n{\n  public call?: InterceptingCallInterface;\n  constructor(readonly deserialize: (chunk: Buffer) => ResponseType) {\n    super({ objectMode: true });\n  }\n\n  cancel(): void {\n    this.call?.cancelWithStatus(Status.CANCELLED, 'Cancelled on client');\n  }\n\n  getPeer(): string {\n    return this.call?.getPeer() ?? 'unknown';\n  }\n\n  getAuthContext(): AuthContext | null {\n    return this.call?.getAuthContext() ?? null;\n  }\n\n  _read(_size: number): void {\n    this.call?.startRead();\n  }\n}\n\nexport class ClientWritableStreamImpl<RequestType>\n  extends Writable\n  implements ClientWritableStream<RequestType>\n{\n  public call?: InterceptingCallInterface;\n  constructor(readonly serialize: (value: RequestType) => Buffer) {\n    super({ objectMode: true });\n  }\n\n  cancel(): void {\n    this.call?.cancelWithStatus(Status.CANCELLED, 'Cancelled on client');\n  }\n\n  getPeer(): string {\n    return this.call?.getPeer() ?? 'unknown';\n  }\n\n  getAuthContext(): AuthContext | null {\n    return this.call?.getAuthContext() ?? null;\n  }\n\n  _write(chunk: RequestType, encoding: string, cb: WriteCallback) {\n    const context: MessageContext = {\n      callback: cb,\n    };\n    const flags = Number(encoding);\n    if (!Number.isNaN(flags)) {\n      context.flags = flags;\n    }\n    this.call?.sendMessageWithContext(context, chunk);\n  }\n\n  _final(cb: Function) {\n    this.call?.halfClose();\n    cb();\n  }\n}\n\nexport class ClientDuplexStreamImpl<RequestType, ResponseType>\n  extends Duplex\n  implements ClientDuplexStream<RequestType, ResponseType>\n{\n  public call?: InterceptingCallInterface;\n  constructor(\n    readonly serialize: (value: RequestType) => Buffer,\n    readonly deserialize: (chunk: Buffer) => ResponseType\n  ) {\n    super({ objectMode: true });\n  }\n\n  cancel(): void {\n    this.call?.cancelWithStatus(Status.CANCELLED, 'Cancelled on client');\n  }\n\n  getPeer(): string {\n    return this.call?.getPeer() ?? 'unknown';\n  }\n\n  getAuthContext(): AuthContext | null {\n    return this.call?.getAuthContext() ?? null;\n  }\n\n  _read(_size: number): void {\n    this.call?.startRead();\n  }\n\n  _write(chunk: RequestType, encoding: string, cb: WriteCallback) {\n    const context: MessageContext = {\n      callback: cb,\n    };\n    const flags = Number(encoding);\n    if (!Number.isNaN(flags)) {\n      context.flags = flags;\n    }\n    this.call?.sendMessageWithContext(context, chunk);\n  }\n\n  _final(cb: Function) {\n    this.call?.halfClose();\n    cb();\n  }\n}\n","/*\n * Copyright 2022 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport { AuthContext } from './auth-context';\nimport { CallCredentials } from './call-credentials';\nimport { Status } from './constants';\nimport { Deadline } from './deadline';\nimport { Metadata } from './metadata';\nimport { ServerSurfaceCall } from './server-call';\n\nexport interface CallStreamOptions {\n  deadline: Deadline;\n  flags: number;\n  host: string;\n  parentCall: ServerSurfaceCall | null;\n}\n\nexport type PartialCallStreamOptions = Partial<CallStreamOptions>;\n\nexport interface StatusObject {\n  code: Status;\n  details: string;\n  metadata: Metadata;\n}\n\nexport type PartialStatusObject = Pick<StatusObject, 'code' | 'details'> & {\n  metadata?: Metadata | null | undefined;\n};\n\nexport interface StatusOrOk<T> {\n  ok: true;\n  value: T;\n}\n\nexport interface StatusOrError {\n  ok: false;\n  error: StatusObject;\n}\n\nexport type StatusOr<T> = StatusOrOk<T> | StatusOrError;\n\nexport function statusOrFromValue<T>(value: T): StatusOr<T> {\n  return {\n    ok: true,\n    value: value\n  };\n}\n\nexport function statusOrFromError<T>(error: PartialStatusObject): StatusOr<T> {\n  return {\n    ok: false,\n    error: {\n      ...error,\n      metadata: error.metadata ?? new Metadata()\n    }\n  };\n}\n\nexport const enum WriteFlags {\n  BufferHint = 1,\n  NoCompress = 2,\n  WriteThrough = 4,\n}\n\nexport interface WriteObject {\n  message: Buffer;\n  flags?: number;\n}\n\nexport interface MetadataListener {\n  (metadata: Metadata, next: (metadata: Metadata) => void): void;\n}\n\nexport interface MessageListener {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  (message: any, next: (message: any) => void): void;\n}\n\nexport interface StatusListener {\n  (status: StatusObject, next: (status: StatusObject) => void): void;\n}\n\nexport interface FullListener {\n  onReceiveMetadata: MetadataListener;\n  onReceiveMessage: MessageListener;\n  onReceiveStatus: StatusListener;\n}\n\nexport type Listener = Partial<FullListener>;\n\n/**\n * An object with methods for handling the responses to a call.\n */\nexport interface InterceptingListener {\n  onReceiveMetadata(metadata: Metadata): void;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  onReceiveMessage(message: any): void;\n  onReceiveStatus(status: StatusObject): void;\n}\n\nexport function isInterceptingListener(\n  listener: Listener | InterceptingListener\n): listener is InterceptingListener {\n  return (\n    listener.onReceiveMetadata !== undefined &&\n    listener.onReceiveMetadata.length === 1\n  );\n}\n\nexport class InterceptingListenerImpl implements InterceptingListener {\n  private processingMetadata = false;\n  private hasPendingMessage = false;\n  private pendingMessage: any;\n  private processingMessage = false;\n  private pendingStatus: StatusObject | null = null;\n  constructor(\n    private listener: FullListener,\n    private nextListener: InterceptingListener\n  ) {}\n\n  private processPendingMessage() {\n    if (this.hasPendingMessage) {\n      this.nextListener.onReceiveMessage(this.pendingMessage);\n      this.pendingMessage = null;\n      this.hasPendingMessage = false;\n    }\n  }\n\n  private processPendingStatus() {\n    if (this.pendingStatus) {\n      this.nextListener.onReceiveStatus(this.pendingStatus);\n    }\n  }\n\n  onReceiveMetadata(metadata: Metadata): void {\n    this.processingMetadata = true;\n    this.listener.onReceiveMetadata(metadata, metadata => {\n      this.processingMetadata = false;\n      this.nextListener.onReceiveMetadata(metadata);\n      this.processPendingMessage();\n      this.processPendingStatus();\n    });\n  }\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  onReceiveMessage(message: any): void {\n    /* If this listener processes messages asynchronously, the last message may\n     * be reordered with respect to the status */\n    this.processingMessage = true;\n    this.listener.onReceiveMessage(message, msg => {\n      this.processingMessage = false;\n      if (this.processingMetadata) {\n        this.pendingMessage = msg;\n        this.hasPendingMessage = true;\n      } else {\n        this.nextListener.onReceiveMessage(msg);\n        this.processPendingStatus();\n      }\n    });\n  }\n  onReceiveStatus(status: StatusObject): void {\n    this.listener.onReceiveStatus(status, processedStatus => {\n      if (this.processingMetadata || this.processingMessage) {\n        this.pendingStatus = processedStatus;\n      } else {\n        this.nextListener.onReceiveStatus(processedStatus);\n      }\n    });\n  }\n}\n\nexport interface WriteCallback {\n  (error?: Error | null): void;\n}\n\nexport interface MessageContext {\n  callback?: WriteCallback;\n  flags?: number;\n}\n\nexport interface Call {\n  cancelWithStatus(status: Status, details: string): void;\n  getPeer(): string;\n  start(metadata: Metadata, listener: InterceptingListener): void;\n  sendMessageWithContext(context: MessageContext, message: Buffer): void;\n  startRead(): void;\n  halfClose(): void;\n  getCallNumber(): number;\n  setCredentials(credentials: CallCredentials): void;\n  getAuthContext(): AuthContext | null;\n}\n\nexport interface DeadlineInfoProvider {\n  getDeadlineInfo(): string[];\n}\n","/*\n * Copyright 2019 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport { Metadata } from './metadata';\nimport {\n  StatusObject,\n  Listener,\n  MetadataListener,\n  MessageListener,\n  StatusListener,\n  FullListener,\n  InterceptingListener,\n  InterceptingListenerImpl,\n  isInterceptingListener,\n  MessageContext,\n  Call,\n} from './call-interface';\nimport { Status } from './constants';\nimport { Channel } from './channel';\nimport { CallOptions } from './client';\nimport { ClientMethodDefinition } from './make-client';\nimport { getErrorMessage } from './error';\nimport { AuthContext } from './auth-context';\n\n/**\n * Error class associated with passing both interceptors and interceptor\n * providers to a client constructor or as call options.\n */\nexport class InterceptorConfigurationError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = 'InterceptorConfigurationError';\n    Error.captureStackTrace(this, InterceptorConfigurationError);\n  }\n}\n\nexport interface MetadataRequester {\n  (\n    metadata: Metadata,\n    listener: InterceptingListener,\n    next: (\n      metadata: Metadata,\n      listener: InterceptingListener | Listener\n    ) => void\n  ): void;\n}\n\nexport interface MessageRequester {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  (message: any, next: (message: any) => void): void;\n}\n\nexport interface CloseRequester {\n  (next: () => void): void;\n}\n\nexport interface CancelRequester {\n  (next: () => void): void;\n}\n\n/**\n * An object with methods for intercepting and modifying outgoing call operations.\n */\nexport interface FullRequester {\n  start: MetadataRequester;\n  sendMessage: MessageRequester;\n  halfClose: CloseRequester;\n  cancel: CancelRequester;\n}\n\nexport type Requester = Partial<FullRequester>;\n\nexport class ListenerBuilder {\n  private metadata: MetadataListener | undefined = undefined;\n  private message: MessageListener | undefined = undefined;\n  private status: StatusListener | undefined = undefined;\n\n  withOnReceiveMetadata(onReceiveMetadata: MetadataListener): this {\n    this.metadata = onReceiveMetadata;\n    return this;\n  }\n\n  withOnReceiveMessage(onReceiveMessage: MessageListener): this {\n    this.message = onReceiveMessage;\n    return this;\n  }\n\n  withOnReceiveStatus(onReceiveStatus: StatusListener): this {\n    this.status = onReceiveStatus;\n    return this;\n  }\n\n  build(): Listener {\n    return {\n      onReceiveMetadata: this.metadata,\n      onReceiveMessage: this.message,\n      onReceiveStatus: this.status,\n    };\n  }\n}\n\nexport class RequesterBuilder {\n  private start: MetadataRequester | undefined = undefined;\n  private message: MessageRequester | undefined = undefined;\n  private halfClose: CloseRequester | undefined = undefined;\n  private cancel: CancelRequester | undefined = undefined;\n\n  withStart(start: MetadataRequester): this {\n    this.start = start;\n    return this;\n  }\n\n  withSendMessage(sendMessage: MessageRequester): this {\n    this.message = sendMessage;\n    return this;\n  }\n\n  withHalfClose(halfClose: CloseRequester): this {\n    this.halfClose = halfClose;\n    return this;\n  }\n\n  withCancel(cancel: CancelRequester): this {\n    this.cancel = cancel;\n    return this;\n  }\n\n  build(): Requester {\n    return {\n      start: this.start,\n      sendMessage: this.message,\n      halfClose: this.halfClose,\n      cancel: this.cancel,\n    };\n  }\n}\n\n/**\n * A Listener with a default pass-through implementation of each method. Used\n * for filling out Listeners with some methods omitted.\n */\nconst defaultListener: FullListener = {\n  onReceiveMetadata: (metadata, next) => {\n    next(metadata);\n  },\n  onReceiveMessage: (message, next) => {\n    next(message);\n  },\n  onReceiveStatus: (status, next) => {\n    next(status);\n  },\n};\n\n/**\n * A Requester with a default pass-through implementation of each method. Used\n * for filling out Requesters with some methods omitted.\n */\nconst defaultRequester: FullRequester = {\n  start: (metadata, listener, next) => {\n    next(metadata, listener);\n  },\n  sendMessage: (message, next) => {\n    next(message);\n  },\n  halfClose: next => {\n    next();\n  },\n  cancel: next => {\n    next();\n  },\n};\n\nexport interface InterceptorOptions extends CallOptions {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  method_definition: ClientMethodDefinition<any, any>;\n}\n\nexport interface InterceptingCallInterface {\n  cancelWithStatus(status: Status, details: string): void;\n  getPeer(): string;\n  start(metadata: Metadata, listener?: Partial<InterceptingListener>): void;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  sendMessageWithContext(context: MessageContext, message: any): void;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  sendMessage(message: any): void;\n  startRead(): void;\n  halfClose(): void;\n  getAuthContext(): AuthContext | null;\n}\n\nexport class InterceptingCall implements InterceptingCallInterface {\n  /**\n   * The requester that this InterceptingCall uses to modify outgoing operations\n   */\n  private requester: FullRequester;\n  /**\n   * Indicates that metadata has been passed to the requester's start\n   * method but it has not been passed to the corresponding next callback\n   */\n  private processingMetadata = false;\n  /**\n   * Message context for a pending message that is waiting for\n   */\n  private pendingMessageContext: MessageContext | null = null;\n  private pendingMessage: any;\n  /**\n   * Indicates that a message has been passed to the requester's sendMessage\n   * method but it has not been passed to the corresponding next callback\n   */\n  private processingMessage = false;\n  /**\n   * Indicates that a status was received but could not be propagated because\n   * a message was still being processed.\n   */\n  private pendingHalfClose = false;\n  constructor(\n    private nextCall: InterceptingCallInterface,\n    requester?: Requester\n  ) {\n    if (requester) {\n      this.requester = {\n        start: requester.start ?? defaultRequester.start,\n        sendMessage: requester.sendMessage ?? defaultRequester.sendMessage,\n        halfClose: requester.halfClose ?? defaultRequester.halfClose,\n        cancel: requester.cancel ?? defaultRequester.cancel,\n      };\n    } else {\n      this.requester = defaultRequester;\n    }\n  }\n\n  cancelWithStatus(status: Status, details: string) {\n    this.requester.cancel(() => {\n      this.nextCall.cancelWithStatus(status, details);\n    });\n  }\n\n  getPeer() {\n    return this.nextCall.getPeer();\n  }\n\n  private processPendingMessage() {\n    if (this.pendingMessageContext) {\n      this.nextCall.sendMessageWithContext(\n        this.pendingMessageContext,\n        this.pendingMessage\n      );\n      this.pendingMessageContext = null;\n      this.pendingMessage = null;\n    }\n  }\n\n  private processPendingHalfClose() {\n    if (this.pendingHalfClose) {\n      this.nextCall.halfClose();\n    }\n  }\n\n  start(\n    metadata: Metadata,\n    interceptingListener?: Partial<InterceptingListener>\n  ): void {\n    const fullInterceptingListener: InterceptingListener = {\n      onReceiveMetadata:\n        interceptingListener?.onReceiveMetadata?.bind(interceptingListener) ??\n        (metadata => {}),\n      onReceiveMessage:\n        interceptingListener?.onReceiveMessage?.bind(interceptingListener) ??\n        (message => {}),\n      onReceiveStatus:\n        interceptingListener?.onReceiveStatus?.bind(interceptingListener) ??\n        (status => {}),\n    };\n    this.processingMetadata = true;\n    this.requester.start(metadata, fullInterceptingListener, (md, listener) => {\n      this.processingMetadata = false;\n      let finalInterceptingListener: InterceptingListener;\n      if (isInterceptingListener(listener)) {\n        finalInterceptingListener = listener;\n      } else {\n        const fullListener: FullListener = {\n          onReceiveMetadata:\n            listener.onReceiveMetadata ?? defaultListener.onReceiveMetadata,\n          onReceiveMessage:\n            listener.onReceiveMessage ?? defaultListener.onReceiveMessage,\n          onReceiveStatus:\n            listener.onReceiveStatus ?? defaultListener.onReceiveStatus,\n        };\n        finalInterceptingListener = new InterceptingListenerImpl(\n          fullListener,\n          fullInterceptingListener\n        );\n      }\n      this.nextCall.start(md, finalInterceptingListener);\n      this.processPendingMessage();\n      this.processPendingHalfClose();\n    });\n  }\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  sendMessageWithContext(context: MessageContext, message: any): void {\n    this.processingMessage = true;\n    this.requester.sendMessage(message, finalMessage => {\n      this.processingMessage = false;\n      if (this.processingMetadata) {\n        this.pendingMessageContext = context;\n        this.pendingMessage = message;\n      } else {\n        this.nextCall.sendMessageWithContext(context, finalMessage);\n        this.processPendingHalfClose();\n      }\n    });\n  }\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  sendMessage(message: any): void {\n    this.sendMessageWithContext({}, message);\n  }\n  startRead(): void {\n    this.nextCall.startRead();\n  }\n  halfClose(): void {\n    this.requester.halfClose(() => {\n      if (this.processingMetadata || this.processingMessage) {\n        this.pendingHalfClose = true;\n      } else {\n        this.nextCall.halfClose();\n      }\n    });\n  }\n  getAuthContext(): AuthContext | null {\n    return this.nextCall.getAuthContext();\n  }\n}\n\nfunction getCall(channel: Channel, path: string, options: CallOptions): Call {\n  const deadline = options.deadline ?? Infinity;\n  const host = options.host;\n  const parent = options.parent ?? null;\n  const propagateFlags = options.propagate_flags;\n  const credentials = options.credentials;\n  const call = channel.createCall(path, deadline, host, parent, propagateFlags);\n  if (credentials) {\n    call.setCredentials(credentials);\n  }\n  return call;\n}\n\n/**\n * InterceptingCall implementation that directly owns the underlying Call\n * object and handles serialization and deseraizliation.\n */\nclass BaseInterceptingCall implements InterceptingCallInterface {\n  constructor(\n    protected call: Call,\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    protected methodDefinition: ClientMethodDefinition<any, any>\n  ) {}\n  cancelWithStatus(status: Status, details: string): void {\n    this.call.cancelWithStatus(status, details);\n  }\n  getPeer(): string {\n    return this.call.getPeer();\n  }\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  sendMessageWithContext(context: MessageContext, message: any): void {\n    let serialized: Buffer;\n    try {\n      serialized = this.methodDefinition.requestSerialize(message);\n    } catch (e) {\n      this.call.cancelWithStatus(\n        Status.INTERNAL,\n        `Request message serialization failure: ${getErrorMessage(e)}`\n      );\n      return;\n    }\n    this.call.sendMessageWithContext(context, serialized);\n  }\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  sendMessage(message: any) {\n    this.sendMessageWithContext({}, message);\n  }\n  start(\n    metadata: Metadata,\n    interceptingListener?: Partial<InterceptingListener>\n  ): void {\n    let readError: StatusObject | null = null;\n    this.call.start(metadata, {\n      onReceiveMetadata: metadata => {\n        interceptingListener?.onReceiveMetadata?.(metadata);\n      },\n      onReceiveMessage: message => {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        let deserialized: any;\n        try {\n          deserialized = this.methodDefinition.responseDeserialize(message);\n        } catch (e) {\n          readError = {\n            code: Status.INTERNAL,\n            details: `Response message parsing error: ${getErrorMessage(e)}`,\n            metadata: new Metadata(),\n          };\n          this.call.cancelWithStatus(readError.code, readError.details);\n          return;\n        }\n        interceptingListener?.onReceiveMessage?.(deserialized);\n      },\n      onReceiveStatus: status => {\n        if (readError) {\n          interceptingListener?.onReceiveStatus?.(readError);\n        } else {\n          interceptingListener?.onReceiveStatus?.(status);\n        }\n      },\n    });\n  }\n  startRead() {\n    this.call.startRead();\n  }\n  halfClose(): void {\n    this.call.halfClose();\n  }\n  getAuthContext(): AuthContext | null {\n    return this.call.getAuthContext();\n  }\n}\n\n/**\n * BaseInterceptingCall with special-cased behavior for methods with unary\n * responses.\n */\nclass BaseUnaryInterceptingCall\n  extends BaseInterceptingCall\n  implements InterceptingCallInterface\n{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  constructor(call: Call, methodDefinition: ClientMethodDefinition<any, any>) {\n    super(call, methodDefinition);\n  }\n  start(metadata: Metadata, listener?: Partial<InterceptingListener>): void {\n    let receivedMessage = false;\n    const wrapperListener: InterceptingListener = {\n      onReceiveMetadata:\n        listener?.onReceiveMetadata?.bind(listener) ?? (metadata => {}),\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      onReceiveMessage: (message: any) => {\n        receivedMessage = true;\n        listener?.onReceiveMessage?.(message);\n      },\n      onReceiveStatus: (status: StatusObject) => {\n        if (!receivedMessage) {\n          listener?.onReceiveMessage?.(null);\n        }\n        listener?.onReceiveStatus?.(status);\n      },\n    };\n    super.start(metadata, wrapperListener);\n    this.call.startRead();\n  }\n}\n\n/**\n * BaseInterceptingCall with special-cased behavior for methods with streaming\n * responses.\n */\nclass BaseStreamingInterceptingCall\n  extends BaseInterceptingCall\n  implements InterceptingCallInterface {}\n\nfunction getBottomInterceptingCall(\n  channel: Channel,\n  options: InterceptorOptions,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  methodDefinition: ClientMethodDefinition<any, any>\n) {\n  const call = getCall(channel, methodDefinition.path, options);\n  if (methodDefinition.responseStream) {\n    return new BaseStreamingInterceptingCall(call, methodDefinition);\n  } else {\n    return new BaseUnaryInterceptingCall(call, methodDefinition);\n  }\n}\n\nexport interface NextCall {\n  (options: InterceptorOptions): InterceptingCallInterface;\n}\n\nexport interface Interceptor {\n  (options: InterceptorOptions, nextCall: NextCall): InterceptingCall;\n}\n\nexport interface InterceptorProvider {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  (methodDefinition: ClientMethodDefinition<any, any>): Interceptor;\n}\n\nexport interface InterceptorArguments {\n  clientInterceptors: Interceptor[];\n  clientInterceptorProviders: InterceptorProvider[];\n  callInterceptors: Interceptor[];\n  callInterceptorProviders: InterceptorProvider[];\n}\n\nexport function getInterceptingCall(\n  interceptorArgs: InterceptorArguments,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  methodDefinition: ClientMethodDefinition<any, any>,\n  options: CallOptions,\n  channel: Channel\n): InterceptingCallInterface {\n  if (\n    interceptorArgs.clientInterceptors.length > 0 &&\n    interceptorArgs.clientInterceptorProviders.length > 0\n  ) {\n    throw new InterceptorConfigurationError(\n      'Both interceptors and interceptor_providers were passed as options ' +\n        'to the client constructor. Only one of these is allowed.'\n    );\n  }\n  if (\n    interceptorArgs.callInterceptors.length > 0 &&\n    interceptorArgs.callInterceptorProviders.length > 0\n  ) {\n    throw new InterceptorConfigurationError(\n      'Both interceptors and interceptor_providers were passed as call ' +\n        'options. Only one of these is allowed.'\n    );\n  }\n  let interceptors: Interceptor[] = [];\n  // Interceptors passed to the call override interceptors passed to the client constructor\n  if (\n    interceptorArgs.callInterceptors.length > 0 ||\n    interceptorArgs.callInterceptorProviders.length > 0\n  ) {\n    interceptors = ([] as Interceptor[])\n      .concat(\n        interceptorArgs.callInterceptors,\n        interceptorArgs.callInterceptorProviders.map(provider =>\n          provider(methodDefinition)\n        )\n      )\n      .filter(interceptor => interceptor);\n    // Filter out falsy values when providers return nothing\n  } else {\n    interceptors = ([] as Interceptor[])\n      .concat(\n        interceptorArgs.clientInterceptors,\n        interceptorArgs.clientInterceptorProviders.map(provider =>\n          provider(methodDefinition)\n        )\n      )\n      .filter(interceptor => interceptor);\n    // Filter out falsy values when providers return nothing\n  }\n  const interceptorOptions = Object.assign({}, options, {\n    method_definition: methodDefinition,\n  });\n  /* For each interceptor in the list, the nextCall function passed to it is\n   * based on the next interceptor in the list, using a nextCall function\n   * constructed with the following interceptor in the list, and so on. The\n   * initialValue, which is effectively at the end of the list, is a nextCall\n   * function that invokes getBottomInterceptingCall, the result of which\n   * handles (de)serialization and also gets the underlying call from the\n   * channel. */\n  const getCall: NextCall = interceptors.reduceRight<NextCall>(\n    (nextCall: NextCall, nextInterceptor: Interceptor) => {\n      return currentOptions => nextInterceptor(currentOptions, nextCall);\n    },\n    (finalOptions: InterceptorOptions) =>\n      getBottomInterceptingCall(channel, finalOptions, methodDefinition)\n  );\n  return getCall(interceptorOptions);\n}\n","/*\n * Copyright 2019 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport {\n  ClientDuplexStream,\n  ClientDuplexStreamImpl,\n  ClientReadableStream,\n  ClientReadableStreamImpl,\n  ClientUnaryCall,\n  ClientUnaryCallImpl,\n  ClientWritableStream,\n  ClientWritableStreamImpl,\n  ServiceError,\n  callErrorFromStatus,\n  SurfaceCall,\n} from './call';\nimport { CallCredentials } from './call-credentials';\nimport { StatusObject } from './call-interface';\nimport { Channel, ChannelImplementation } from './channel';\nimport { ConnectivityState } from './connectivity-state';\nimport { ChannelCredentials } from './channel-credentials';\nimport { ChannelOptions } from './channel-options';\nimport { Status } from './constants';\nimport { Metadata } from './metadata';\nimport { ClientMethodDefinition } from './make-client';\nimport {\n  getInterceptingCall,\n  Interceptor,\n  InterceptorProvider,\n  InterceptorArguments,\n  InterceptingCallInterface,\n} from './client-interceptors';\nimport {\n  ServerUnaryCall,\n  ServerReadableStream,\n  ServerWritableStream,\n  ServerDuplexStream,\n} from './server-call';\nimport { Deadline } from './deadline';\n\nconst CHANNEL_SYMBOL = Symbol();\nconst INTERCEPTOR_SYMBOL = Symbol();\nconst INTERCEPTOR_PROVIDER_SYMBOL = Symbol();\nconst CALL_INVOCATION_TRANSFORMER_SYMBOL = Symbol();\n\nfunction isFunction<ResponseType>(\n  arg: Metadata | CallOptions | UnaryCallback<ResponseType> | undefined\n): arg is UnaryCallback<ResponseType> {\n  return typeof arg === 'function';\n}\n\nexport interface UnaryCallback<ResponseType> {\n  (err: ServiceError | null, value?: ResponseType): void;\n}\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nexport interface CallOptions {\n  deadline?: Deadline;\n  host?: string;\n  parent?:\n    | ServerUnaryCall<any, any>\n    | ServerReadableStream<any, any>\n    | ServerWritableStream<any, any>\n    | ServerDuplexStream<any, any>;\n  propagate_flags?: number;\n  credentials?: CallCredentials;\n  interceptors?: Interceptor[];\n  interceptor_providers?: InterceptorProvider[];\n}\n/* eslint-enable @typescript-eslint/no-explicit-any */\n\nexport interface CallProperties<RequestType, ResponseType> {\n  argument?: RequestType;\n  metadata: Metadata;\n  call: SurfaceCall;\n  channel: Channel;\n  methodDefinition: ClientMethodDefinition<RequestType, ResponseType>;\n  callOptions: CallOptions;\n  callback?: UnaryCallback<ResponseType>;\n}\n\nexport interface CallInvocationTransformer {\n  (callProperties: CallProperties<any, any>): CallProperties<any, any>; // eslint-disable-line @typescript-eslint/no-explicit-any\n}\n\nexport type ClientOptions = Partial<ChannelOptions> & {\n  channelOverride?: Channel;\n  channelFactoryOverride?: (\n    address: string,\n    credentials: ChannelCredentials,\n    options: ClientOptions\n  ) => Channel;\n  interceptors?: Interceptor[];\n  interceptor_providers?: InterceptorProvider[];\n  callInvocationTransformer?: CallInvocationTransformer;\n};\n\nfunction getErrorStackString(error: Error): string {\n  return error.stack?.split('\\n').slice(1).join('\\n') || 'no stack trace available';\n}\n\n/**\n * A generic gRPC client. Primarily useful as a base class for all generated\n * clients.\n */\nexport class Client {\n  private readonly [CHANNEL_SYMBOL]: Channel;\n  private readonly [INTERCEPTOR_SYMBOL]: Interceptor[];\n  private readonly [INTERCEPTOR_PROVIDER_SYMBOL]: InterceptorProvider[];\n  private readonly [CALL_INVOCATION_TRANSFORMER_SYMBOL]?: CallInvocationTransformer;\n  constructor(\n    address: string,\n    credentials: ChannelCredentials,\n    options: ClientOptions = {}\n  ) {\n    options = Object.assign({}, options);\n    this[INTERCEPTOR_SYMBOL] = options.interceptors ?? [];\n    delete options.interceptors;\n    this[INTERCEPTOR_PROVIDER_SYMBOL] = options.interceptor_providers ?? [];\n    delete options.interceptor_providers;\n    if (\n      this[INTERCEPTOR_SYMBOL].length > 0 &&\n      this[INTERCEPTOR_PROVIDER_SYMBOL].length > 0\n    ) {\n      throw new Error(\n        'Both interceptors and interceptor_providers were passed as options ' +\n          'to the client constructor. Only one of these is allowed.'\n      );\n    }\n    this[CALL_INVOCATION_TRANSFORMER_SYMBOL] =\n      options.callInvocationTransformer;\n    delete options.callInvocationTransformer;\n    if (options.channelOverride) {\n      this[CHANNEL_SYMBOL] = options.channelOverride;\n    } else if (options.channelFactoryOverride) {\n      const channelFactoryOverride = options.channelFactoryOverride;\n      delete options.channelFactoryOverride;\n      this[CHANNEL_SYMBOL] = channelFactoryOverride(\n        address,\n        credentials,\n        options\n      );\n    } else {\n      this[CHANNEL_SYMBOL] = new ChannelImplementation(\n        address,\n        credentials,\n        options\n      );\n    }\n  }\n\n  close(): void {\n    this[CHANNEL_SYMBOL].close();\n  }\n\n  getChannel(): Channel {\n    return this[CHANNEL_SYMBOL];\n  }\n\n  waitForReady(deadline: Deadline, callback: (error?: Error) => void): void {\n    const checkState = (err?: Error) => {\n      if (err) {\n        callback(new Error('Failed to connect before the deadline'));\n        return;\n      }\n      let newState;\n      try {\n        newState = this[CHANNEL_SYMBOL].getConnectivityState(true);\n      } catch (e) {\n        callback(new Error('The channel has been closed'));\n        return;\n      }\n      if (newState === ConnectivityState.READY) {\n        callback();\n      } else {\n        try {\n          this[CHANNEL_SYMBOL].watchConnectivityState(\n            newState,\n            deadline,\n            checkState\n          );\n        } catch (e) {\n          callback(new Error('The channel has been closed'));\n        }\n      }\n    };\n    setImmediate(checkState);\n  }\n\n  private checkOptionalUnaryResponseArguments<ResponseType>(\n    arg1: Metadata | CallOptions | UnaryCallback<ResponseType>,\n    arg2?: CallOptions | UnaryCallback<ResponseType>,\n    arg3?: UnaryCallback<ResponseType>\n  ): {\n    metadata: Metadata;\n    options: CallOptions;\n    callback: UnaryCallback<ResponseType>;\n  } {\n    if (isFunction(arg1)) {\n      return { metadata: new Metadata(), options: {}, callback: arg1 };\n    } else if (isFunction(arg2)) {\n      if (arg1 instanceof Metadata) {\n        return { metadata: arg1, options: {}, callback: arg2 };\n      } else {\n        return { metadata: new Metadata(), options: arg1, callback: arg2 };\n      }\n    } else {\n      if (\n        !(\n          arg1 instanceof Metadata &&\n          arg2 instanceof Object &&\n          isFunction(arg3)\n        )\n      ) {\n        throw new Error('Incorrect arguments passed');\n      }\n      return { metadata: arg1, options: arg2, callback: arg3 };\n    }\n  }\n\n  makeUnaryRequest<RequestType, ResponseType>(\n    method: string,\n    serialize: (value: RequestType) => Buffer,\n    deserialize: (value: Buffer) => ResponseType,\n    argument: RequestType,\n    metadata: Metadata,\n    options: CallOptions,\n    callback: UnaryCallback<ResponseType>\n  ): ClientUnaryCall;\n  makeUnaryRequest<RequestType, ResponseType>(\n    method: string,\n    serialize: (value: RequestType) => Buffer,\n    deserialize: (value: Buffer) => ResponseType,\n    argument: RequestType,\n    metadata: Metadata,\n    callback: UnaryCallback<ResponseType>\n  ): ClientUnaryCall;\n  makeUnaryRequest<RequestType, ResponseType>(\n    method: string,\n    serialize: (value: RequestType) => Buffer,\n    deserialize: (value: Buffer) => ResponseType,\n    argument: RequestType,\n    options: CallOptions,\n    callback: UnaryCallback<ResponseType>\n  ): ClientUnaryCall;\n  makeUnaryRequest<RequestType, ResponseType>(\n    method: string,\n    serialize: (value: RequestType) => Buffer,\n    deserialize: (value: Buffer) => ResponseType,\n    argument: RequestType,\n    callback: UnaryCallback<ResponseType>\n  ): ClientUnaryCall;\n  makeUnaryRequest<RequestType, ResponseType>(\n    method: string,\n    serialize: (value: RequestType) => Buffer,\n    deserialize: (value: Buffer) => ResponseType,\n    argument: RequestType,\n    metadata: Metadata | CallOptions | UnaryCallback<ResponseType>,\n    options?: CallOptions | UnaryCallback<ResponseType>,\n    callback?: UnaryCallback<ResponseType>\n  ): ClientUnaryCall {\n    const checkedArguments =\n      this.checkOptionalUnaryResponseArguments<ResponseType>(\n        metadata,\n        options,\n        callback\n      );\n    const methodDefinition: ClientMethodDefinition<RequestType, ResponseType> =\n      {\n        path: method,\n        requestStream: false,\n        responseStream: false,\n        requestSerialize: serialize,\n        responseDeserialize: deserialize,\n      };\n    let callProperties: CallProperties<RequestType, ResponseType> = {\n      argument: argument,\n      metadata: checkedArguments.metadata,\n      call: new ClientUnaryCallImpl(),\n      channel: this[CHANNEL_SYMBOL],\n      methodDefinition: methodDefinition,\n      callOptions: checkedArguments.options,\n      callback: checkedArguments.callback,\n    };\n    if (this[CALL_INVOCATION_TRANSFORMER_SYMBOL]) {\n      callProperties = this[CALL_INVOCATION_TRANSFORMER_SYMBOL]!(\n        callProperties\n      ) as CallProperties<RequestType, ResponseType>;\n    }\n    const emitter: ClientUnaryCall = callProperties.call;\n    const interceptorArgs: InterceptorArguments = {\n      clientInterceptors: this[INTERCEPTOR_SYMBOL],\n      clientInterceptorProviders: this[INTERCEPTOR_PROVIDER_SYMBOL],\n      callInterceptors: callProperties.callOptions.interceptors ?? [],\n      callInterceptorProviders:\n        callProperties.callOptions.interceptor_providers ?? [],\n    };\n    const call: InterceptingCallInterface = getInterceptingCall(\n      interceptorArgs,\n      callProperties.methodDefinition,\n      callProperties.callOptions,\n      callProperties.channel\n    );\n    /* This needs to happen before the emitter is used. Unfortunately we can't\n     * enforce this with the type system. We need to construct this emitter\n     * before calling the CallInvocationTransformer, and we need to create the\n     * call after that. */\n    emitter.call = call;\n    let responseMessage: ResponseType | null = null;\n    let receivedStatus = false;\n    let callerStackError: Error | null = new Error();\n    call.start(callProperties.metadata, {\n      onReceiveMetadata: metadata => {\n        emitter.emit('metadata', metadata);\n      },\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      onReceiveMessage(message: any) {\n        if (responseMessage !== null) {\n          call.cancelWithStatus(Status.UNIMPLEMENTED, 'Too many responses received');\n        }\n        responseMessage = message;\n      },\n      onReceiveStatus(status: StatusObject) {\n        if (receivedStatus) {\n          return;\n        }\n        receivedStatus = true;\n        if (status.code === Status.OK) {\n          if (responseMessage === null) {\n            const callerStack = getErrorStackString(callerStackError!);\n            callProperties.callback!(\n              callErrorFromStatus(\n                {\n                  code: Status.UNIMPLEMENTED,\n                  details: 'No message received',\n                  metadata: status.metadata,\n                },\n                callerStack\n              )\n            );\n          } else {\n            callProperties.callback!(null, responseMessage);\n          }\n        } else {\n          const callerStack = getErrorStackString(callerStackError!);\n          callProperties.callback!(callErrorFromStatus(status, callerStack));\n        }\n        /* Avoid retaining the callerStackError object in the call context of\n         * the status event handler. */\n        callerStackError = null;\n        emitter.emit('status', status);\n      },\n    });\n    call.sendMessage(argument);\n    call.halfClose();\n    return emitter;\n  }\n\n  makeClientStreamRequest<RequestType, ResponseType>(\n    method: string,\n    serialize: (value: RequestType) => Buffer,\n    deserialize: (value: Buffer) => ResponseType,\n    metadata: Metadata,\n    options: CallOptions,\n    callback: UnaryCallback<ResponseType>\n  ): ClientWritableStream<RequestType>;\n  makeClientStreamRequest<RequestType, ResponseType>(\n    method: string,\n    serialize: (value: RequestType) => Buffer,\n    deserialize: (value: Buffer) => ResponseType,\n    metadata: Metadata,\n    callback: UnaryCallback<ResponseType>\n  ): ClientWritableStream<RequestType>;\n  makeClientStreamRequest<RequestType, ResponseType>(\n    method: string,\n    serialize: (value: RequestType) => Buffer,\n    deserialize: (value: Buffer) => ResponseType,\n    options: CallOptions,\n    callback: UnaryCallback<ResponseType>\n  ): ClientWritableStream<RequestType>;\n  makeClientStreamRequest<RequestType, ResponseType>(\n    method: string,\n    serialize: (value: RequestType) => Buffer,\n    deserialize: (value: Buffer) => ResponseType,\n    callback: UnaryCallback<ResponseType>\n  ): ClientWritableStream<RequestType>;\n  makeClientStreamRequest<RequestType, ResponseType>(\n    method: string,\n    serialize: (value: RequestType) => Buffer,\n    deserialize: (value: Buffer) => ResponseType,\n    metadata: Metadata | CallOptions | UnaryCallback<ResponseType>,\n    options?: CallOptions | UnaryCallback<ResponseType>,\n    callback?: UnaryCallback<ResponseType>\n  ): ClientWritableStream<RequestType> {\n    const checkedArguments =\n      this.checkOptionalUnaryResponseArguments<ResponseType>(\n        metadata,\n        options,\n        callback\n      );\n    const methodDefinition: ClientMethodDefinition<RequestType, ResponseType> =\n      {\n        path: method,\n        requestStream: true,\n        responseStream: false,\n        requestSerialize: serialize,\n        responseDeserialize: deserialize,\n      };\n    let callProperties: CallProperties<RequestType, ResponseType> = {\n      metadata: checkedArguments.metadata,\n      call: new ClientWritableStreamImpl<RequestType>(serialize),\n      channel: this[CHANNEL_SYMBOL],\n      methodDefinition: methodDefinition,\n      callOptions: checkedArguments.options,\n      callback: checkedArguments.callback,\n    };\n    if (this[CALL_INVOCATION_TRANSFORMER_SYMBOL]) {\n      callProperties = this[CALL_INVOCATION_TRANSFORMER_SYMBOL]!(\n        callProperties\n      ) as CallProperties<RequestType, ResponseType>;\n    }\n    const emitter: ClientWritableStream<RequestType> =\n      callProperties.call as ClientWritableStream<RequestType>;\n    const interceptorArgs: InterceptorArguments = {\n      clientInterceptors: this[INTERCEPTOR_SYMBOL],\n      clientInterceptorProviders: this[INTERCEPTOR_PROVIDER_SYMBOL],\n      callInterceptors: callProperties.callOptions.interceptors ?? [],\n      callInterceptorProviders:\n        callProperties.callOptions.interceptor_providers ?? [],\n    };\n    const call: InterceptingCallInterface = getInterceptingCall(\n      interceptorArgs,\n      callProperties.methodDefinition,\n      callProperties.callOptions,\n      callProperties.channel\n    );\n    /* This needs to happen before the emitter is used. Unfortunately we can't\n     * enforce this with the type system. We need to construct this emitter\n     * before calling the CallInvocationTransformer, and we need to create the\n     * call after that. */\n    emitter.call = call;\n    let responseMessage: ResponseType | null = null;\n    let receivedStatus = false;\n    let callerStackError: Error | null = new Error();\n    call.start(callProperties.metadata, {\n      onReceiveMetadata: metadata => {\n        emitter.emit('metadata', metadata);\n      },\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      onReceiveMessage(message: any) {\n        if (responseMessage !== null) {\n          call.cancelWithStatus(Status.UNIMPLEMENTED, 'Too many responses received');\n        }\n        responseMessage = message;\n        call.startRead();\n      },\n      onReceiveStatus(status: StatusObject) {\n        if (receivedStatus) {\n          return;\n        }\n        receivedStatus = true;\n        if (status.code === Status.OK) {\n          if (responseMessage === null) {\n            const callerStack = getErrorStackString(callerStackError!);\n            callProperties.callback!(\n              callErrorFromStatus(\n                {\n                  code: Status.UNIMPLEMENTED,\n                  details: 'No message received',\n                  metadata: status.metadata,\n                },\n                callerStack\n              )\n            );\n          } else {\n            callProperties.callback!(null, responseMessage);\n          }\n        } else {\n          const callerStack = getErrorStackString(callerStackError!);\n          callProperties.callback!(callErrorFromStatus(status, callerStack));\n        }\n        /* Avoid retaining the callerStackError object in the call context of\n         * the status event handler. */\n        callerStackError = null;\n        emitter.emit('status', status);\n      },\n    });\n    return emitter;\n  }\n\n  private checkMetadataAndOptions(\n    arg1?: Metadata | CallOptions,\n    arg2?: CallOptions\n  ): { metadata: Metadata; options: CallOptions } {\n    let metadata: Metadata;\n    let options: CallOptions;\n    if (arg1 instanceof Metadata) {\n      metadata = arg1;\n      if (arg2) {\n        options = arg2;\n      } else {\n        options = {};\n      }\n    } else {\n      if (arg1) {\n        options = arg1;\n      } else {\n        options = {};\n      }\n      metadata = new Metadata();\n    }\n    return { metadata, options };\n  }\n\n  makeServerStreamRequest<RequestType, ResponseType>(\n    method: string,\n    serialize: (value: RequestType) => Buffer,\n    deserialize: (value: Buffer) => ResponseType,\n    argument: RequestType,\n    metadata: Metadata,\n    options?: CallOptions\n  ): ClientReadableStream<ResponseType>;\n  makeServerStreamRequest<RequestType, ResponseType>(\n    method: string,\n    serialize: (value: RequestType) => Buffer,\n    deserialize: (value: Buffer) => ResponseType,\n    argument: RequestType,\n    options?: CallOptions\n  ): ClientReadableStream<ResponseType>;\n  makeServerStreamRequest<RequestType, ResponseType>(\n    method: string,\n    serialize: (value: RequestType) => Buffer,\n    deserialize: (value: Buffer) => ResponseType,\n    argument: RequestType,\n    metadata?: Metadata | CallOptions,\n    options?: CallOptions\n  ): ClientReadableStream<ResponseType> {\n    const checkedArguments = this.checkMetadataAndOptions(metadata, options);\n    const methodDefinition: ClientMethodDefinition<RequestType, ResponseType> =\n      {\n        path: method,\n        requestStream: false,\n        responseStream: true,\n        requestSerialize: serialize,\n        responseDeserialize: deserialize,\n      };\n    let callProperties: CallProperties<RequestType, ResponseType> = {\n      argument: argument,\n      metadata: checkedArguments.metadata,\n      call: new ClientReadableStreamImpl<ResponseType>(deserialize),\n      channel: this[CHANNEL_SYMBOL],\n      methodDefinition: methodDefinition,\n      callOptions: checkedArguments.options,\n    };\n    if (this[CALL_INVOCATION_TRANSFORMER_SYMBOL]) {\n      callProperties = this[CALL_INVOCATION_TRANSFORMER_SYMBOL]!(\n        callProperties\n      ) as CallProperties<RequestType, ResponseType>;\n    }\n    const stream: ClientReadableStream<ResponseType> =\n      callProperties.call as ClientReadableStream<ResponseType>;\n    const interceptorArgs: InterceptorArguments = {\n      clientInterceptors: this[INTERCEPTOR_SYMBOL],\n      clientInterceptorProviders: this[INTERCEPTOR_PROVIDER_SYMBOL],\n      callInterceptors: callProperties.callOptions.interceptors ?? [],\n      callInterceptorProviders:\n        callProperties.callOptions.interceptor_providers ?? [],\n    };\n    const call: InterceptingCallInterface = getInterceptingCall(\n      interceptorArgs,\n      callProperties.methodDefinition,\n      callProperties.callOptions,\n      callProperties.channel\n    );\n    /* This needs to happen before the emitter is used. Unfortunately we can't\n     * enforce this with the type system. We need to construct this emitter\n     * before calling the CallInvocationTransformer, and we need to create the\n     * call after that. */\n    stream.call = call;\n    let receivedStatus = false;\n    let callerStackError: Error | null = new Error();\n    call.start(callProperties.metadata, {\n      onReceiveMetadata(metadata: Metadata) {\n        stream.emit('metadata', metadata);\n      },\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      onReceiveMessage(message: any) {\n        stream.push(message);\n      },\n      onReceiveStatus(status: StatusObject) {\n        if (receivedStatus) {\n          return;\n        }\n        receivedStatus = true;\n        stream.push(null);\n        if (status.code !== Status.OK) {\n          const callerStack = getErrorStackString(callerStackError!);\n          stream.emit('error', callErrorFromStatus(status, callerStack));\n        }\n        /* Avoid retaining the callerStackError object in the call context of\n         * the status event handler. */\n        callerStackError = null;\n        stream.emit('status', status);\n      },\n    });\n    call.sendMessage(argument);\n    call.halfClose();\n    return stream;\n  }\n\n  makeBidiStreamRequest<RequestType, ResponseType>(\n    method: string,\n    serialize: (value: RequestType) => Buffer,\n    deserialize: (value: Buffer) => ResponseType,\n    metadata: Metadata,\n    options?: CallOptions\n  ): ClientDuplexStream<RequestType, ResponseType>;\n  makeBidiStreamRequest<RequestType, ResponseType>(\n    method: string,\n    serialize: (value: RequestType) => Buffer,\n    deserialize: (value: Buffer) => ResponseType,\n    options?: CallOptions\n  ): ClientDuplexStream<RequestType, ResponseType>;\n  makeBidiStreamRequest<RequestType, ResponseType>(\n    method: string,\n    serialize: (value: RequestType) => Buffer,\n    deserialize: (value: Buffer) => ResponseType,\n    metadata?: Metadata | CallOptions,\n    options?: CallOptions\n  ): ClientDuplexStream<RequestType, ResponseType> {\n    const checkedArguments = this.checkMetadataAndOptions(metadata, options);\n    const methodDefinition: ClientMethodDefinition<RequestType, ResponseType> =\n      {\n        path: method,\n        requestStream: true,\n        responseStream: true,\n        requestSerialize: serialize,\n        responseDeserialize: deserialize,\n      };\n    let callProperties: CallProperties<RequestType, ResponseType> = {\n      metadata: checkedArguments.metadata,\n      call: new ClientDuplexStreamImpl<RequestType, ResponseType>(\n        serialize,\n        deserialize\n      ),\n      channel: this[CHANNEL_SYMBOL],\n      methodDefinition: methodDefinition,\n      callOptions: checkedArguments.options,\n    };\n    if (this[CALL_INVOCATION_TRANSFORMER_SYMBOL]) {\n      callProperties = this[CALL_INVOCATION_TRANSFORMER_SYMBOL]!(\n        callProperties\n      ) as CallProperties<RequestType, ResponseType>;\n    }\n    const stream: ClientDuplexStream<RequestType, ResponseType> =\n      callProperties.call as ClientDuplexStream<RequestType, ResponseType>;\n    const interceptorArgs: InterceptorArguments = {\n      clientInterceptors: this[INTERCEPTOR_SYMBOL],\n      clientInterceptorProviders: this[INTERCEPTOR_PROVIDER_SYMBOL],\n      callInterceptors: callProperties.callOptions.interceptors ?? [],\n      callInterceptorProviders:\n        callProperties.callOptions.interceptor_providers ?? [],\n    };\n    const call: InterceptingCallInterface = getInterceptingCall(\n      interceptorArgs,\n      callProperties.methodDefinition,\n      callProperties.callOptions,\n      callProperties.channel\n    );\n    /* This needs to happen before the emitter is used. Unfortunately we can't\n     * enforce this with the type system. We need to construct this emitter\n     * before calling the CallInvocationTransformer, and we need to create the\n     * call after that. */\n    stream.call = call;\n    let receivedStatus = false;\n    let callerStackError: Error | null = new Error();\n    call.start(callProperties.metadata, {\n      onReceiveMetadata(metadata: Metadata) {\n        stream.emit('metadata', metadata);\n      },\n      onReceiveMessage(message: Buffer) {\n        stream.push(message);\n      },\n      onReceiveStatus(status: StatusObject) {\n        if (receivedStatus) {\n          return;\n        }\n        receivedStatus = true;\n        stream.push(null);\n        if (status.code !== Status.OK) {\n          const callerStack = getErrorStackString(callerStackError!);\n          stream.emit('error', callErrorFromStatus(status, callerStack));\n        }\n        /* Avoid retaining the callerStackError object in the call context of\n         * the status event handler. */\n        callerStackError = null;\n        stream.emit('status', status);\n      },\n    });\n    return stream;\n  }\n}\n","/*\n * Copyright 2019 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport { ChannelCredentials } from './channel-credentials';\nimport { ChannelOptions } from './channel-options';\nimport { Client } from './client';\nimport { UntypedServiceImplementation } from './server';\n\nexport interface Serialize<T> {\n  (value: T): Buffer;\n}\n\nexport interface Deserialize<T> {\n  (bytes: Buffer): T;\n}\n\nexport interface ClientMethodDefinition<RequestType, ResponseType> {\n  path: string;\n  requestStream: boolean;\n  responseStream: boolean;\n  requestSerialize: Serialize<RequestType>;\n  responseDeserialize: Deserialize<ResponseType>;\n  originalName?: string;\n}\n\nexport interface ServerMethodDefinition<RequestType, ResponseType> {\n  path: string;\n  requestStream: boolean;\n  responseStream: boolean;\n  responseSerialize: Serialize<ResponseType>;\n  requestDeserialize: Deserialize<RequestType>;\n  originalName?: string;\n}\n\nexport interface MethodDefinition<RequestType, ResponseType>\n  extends ClientMethodDefinition<RequestType, ResponseType>,\n    ServerMethodDefinition<RequestType, ResponseType> {}\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nexport type ServiceDefinition<\n  ImplementationType = UntypedServiceImplementation\n> = {\n  readonly [index in keyof ImplementationType]: MethodDefinition<any, any>;\n};\n/* eslint-enable @typescript-eslint/no-explicit-any */\n\nexport interface ProtobufTypeDefinition {\n  format: string;\n  type: object;\n  fileDescriptorProtos: Buffer[];\n}\n\nexport interface PackageDefinition {\n  [index: string]: ServiceDefinition | ProtobufTypeDefinition;\n}\n\n/**\n * Map with short names for each of the requester maker functions. Used in\n * makeClientConstructor\n * @private\n */\nconst requesterFuncs = {\n  unary: Client.prototype.makeUnaryRequest,\n  server_stream: Client.prototype.makeServerStreamRequest,\n  client_stream: Client.prototype.makeClientStreamRequest,\n  bidi: Client.prototype.makeBidiStreamRequest,\n};\n\nexport interface ServiceClient extends Client {\n  [methodName: string]: Function;\n}\n\nexport interface ServiceClientConstructor {\n  new (\n    address: string,\n    credentials: ChannelCredentials,\n    options?: Partial<ChannelOptions>\n  ): ServiceClient;\n  service: ServiceDefinition;\n  serviceName: string;\n}\n\n/**\n * Returns true, if given key is included in the blacklisted\n * keys.\n * @param key key for check, string.\n */\nfunction isPrototypePolluted(key: string): boolean {\n  return ['__proto__', 'prototype', 'constructor'].includes(key);\n}\n\n/**\n * Creates a constructor for a client with the given methods, as specified in\n * the methods argument. The resulting class will have an instance method for\n * each method in the service, which is a partial application of one of the\n * [Client]{@link grpc.Client} request methods, depending on `requestSerialize`\n * and `responseSerialize`, with the `method`, `serialize`, and `deserialize`\n * arguments predefined.\n * @param methods An object mapping method names to\n *     method attributes\n * @param serviceName The fully qualified name of the service\n * @param classOptions An options object.\n * @return New client constructor, which is a subclass of\n *     {@link grpc.Client}, and has the same arguments as that constructor.\n */\nexport function makeClientConstructor(\n  methods: ServiceDefinition,\n  serviceName: string,\n  classOptions?: {}\n): ServiceClientConstructor {\n  if (!classOptions) {\n    classOptions = {};\n  }\n\n  class ServiceClientImpl extends Client implements ServiceClient {\n    static service: ServiceDefinition;\n    static serviceName: string;\n    [methodName: string]: Function;\n  }\n\n  Object.keys(methods).forEach(name => {\n    if (isPrototypePolluted(name)) {\n      return;\n    }\n    const attrs = methods[name];\n    let methodType: keyof typeof requesterFuncs;\n    // TODO(murgatroid99): Verify that we don't need this anymore\n    if (typeof name === 'string' && name.charAt(0) === '$') {\n      throw new Error('Method names cannot start with $');\n    }\n    if (attrs.requestStream) {\n      if (attrs.responseStream) {\n        methodType = 'bidi';\n      } else {\n        methodType = 'client_stream';\n      }\n    } else {\n      if (attrs.responseStream) {\n        methodType = 'server_stream';\n      } else {\n        methodType = 'unary';\n      }\n    }\n    const serialize = attrs.requestSerialize;\n    const deserialize = attrs.responseDeserialize;\n    const methodFunc = partial(\n      requesterFuncs[methodType],\n      attrs.path,\n      serialize,\n      deserialize\n    );\n    ServiceClientImpl.prototype[name] = methodFunc;\n    // Associate all provided attributes with the method\n    Object.assign(ServiceClientImpl.prototype[name], attrs);\n    if (attrs.originalName && !isPrototypePolluted(attrs.originalName)) {\n      ServiceClientImpl.prototype[attrs.originalName] =\n        ServiceClientImpl.prototype[name];\n    }\n  });\n\n  ServiceClientImpl.service = methods;\n  ServiceClientImpl.serviceName = serviceName;\n\n  return ServiceClientImpl;\n}\n\nfunction partial(\n  fn: Function,\n  path: string,\n  serialize: Function,\n  deserialize: Function\n): Function {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  return function (this: any, ...args: any[]) {\n    return fn.call(this, path, serialize, deserialize, ...args);\n  };\n}\n\nexport interface GrpcObject {\n  [index: string]:\n    | GrpcObject\n    | ServiceClientConstructor\n    | ProtobufTypeDefinition;\n}\n\nfunction isProtobufTypeDefinition(\n  obj: ServiceDefinition | ProtobufTypeDefinition\n): obj is ProtobufTypeDefinition {\n  return 'format' in obj;\n}\n\n/**\n * Load a gRPC package definition as a gRPC object hierarchy.\n * @param packageDef The package definition object.\n * @return The resulting gRPC object.\n */\nexport function loadPackageDefinition(\n  packageDef: PackageDefinition\n): GrpcObject {\n  const result: GrpcObject = {};\n  for (const serviceFqn in packageDef) {\n    if (Object.prototype.hasOwnProperty.call(packageDef, serviceFqn)) {\n      const service = packageDef[serviceFqn];\n      const nameComponents = serviceFqn.split('.');\n      if (nameComponents.some((comp: string) => isPrototypePolluted(comp))) {\n        continue;\n      }\n      const serviceName = nameComponents[nameComponents.length - 1];\n      let current = result;\n      for (const packageName of nameComponents.slice(0, -1)) {\n        if (!current[packageName]) {\n          current[packageName] = {};\n        }\n        current = current[packageName] as GrpcObject;\n      }\n      if (isProtobufTypeDefinition(service)) {\n        current[serviceName] = service;\n      } else {\n        current[serviceName] = makeClientConstructor(service, serviceName, {});\n      }\n    }\n  }\n  return result;\n}\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match words composed of alphanumeric characters. */\nvar reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n/** Used to match Latin Unicode letters (excluding mathematical operators). */\nvar reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n    rsComboMarksRange = '\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe23',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20f0',\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. */\nvar rsApos = \"['\\u2019]\",\n    rsAstral = '[' + rsAstralRange + ']',\n    rsBreak = '[' + rsBreakRange + ']',\n    rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']',\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. */\nvar rsLowerMisc = '(?:' + rsLower + '|' + rsMisc + ')',\n    rsUpperMisc = '(?:' + rsUpper + '|' + rsMisc + ')',\n    rsOptLowerContr = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n    rsOptUpperContr = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n    reOptMod = rsModifier + '?',\n    rsOptVar = '[' + rsVarRange + ']?',\n    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\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. */\nvar 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 */\nvar reComboMark = RegExp(rsCombo, 'g');\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/** Used to match complex or compound words. */\nvar reUnicodeWord = RegExp([\n  rsUpper + '?' + rsLower + '+' + rsOptLowerContr + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n  rsUpperMisc + '+' + rsOptUpperContr + '(?=' + [rsBreak, rsUpper + rsLowerMisc, '$'].join('|') + ')',\n  rsUpper + '?' + rsLowerMisc + '+' + rsOptLowerContr,\n  rsUpper + '+' + rsOptUpperContr,\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/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']');\n\n/** Used to detect strings that need a more robust regexp to match words. */\nvar 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 map Latin Unicode letters to basic Latin letters. */\nvar 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': 'ss'\n};\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * A 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 */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n  var index = -1,\n      length = array ? array.length : 0;\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 * 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 */\nfunction 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 */\nfunction asciiWords(string) {\n  return string.match(reAsciiWord) || [];\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 */\nfunction basePropertyOf(object) {\n  return function(key) {\n    return object == null ? undefined : object[key];\n  };\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 */\nvar deburrLetter = basePropertyOf(deburredLetters);\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 */\nfunction 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 */\nfunction hasUnicodeWord(string) {\n  return reHasUnicodeWord.test(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 */\nfunction stringToArray(string) {\n  return hasUnicode(string)\n    ? unicodeToArray(string)\n    : asciiToArray(string);\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 */\nfunction 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 */\nfunction unicodeWords(string) {\n  return string.match(reUnicodeWord) || [];\n}\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolToString = symbolProto ? symbolProto.toString : undefined;\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 */\nfunction 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 `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  // Exit early for strings to avoid a performance hit in some environments.\n  if (typeof value == 'string') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return symbolToString ? symbolToString.call(value) : '';\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Casts `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 */\nfunction 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 * 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 */\nfunction 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 */\nfunction createCompounder(callback) {\n  return function(string) {\n    return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n  };\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n  return value == null ? '' : baseToString(value);\n}\n\n/**\n * 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 */\nvar 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 */\nfunction capitalize(string) {\n  return upperFirst(toString(string).toLowerCase());\n}\n\n/**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\nfunction deburr(string) {\n  string = toString(string);\n  return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\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 */\nvar 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 */\nfunction 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\nmodule.exports = camelCase;\n","\"use strict\";\r\nmodule.exports = asPromise;\r\n\r\n/**\r\n * Callback as used by {@link util.asPromise}.\r\n * @typedef asPromiseCallback\r\n * @type {function}\r\n * @param {Error|null} error Error, if any\r\n * @param {...*} params Additional arguments\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Returns a promise from a node-style callback function.\r\n * @memberof util\r\n * @param {asPromiseCallback} fn Function to call\r\n * @param {*} ctx Function context\r\n * @param {...*} params Function arguments\r\n * @returns {Promise<*>} Promisified function\r\n */\r\nfunction asPromise(fn, ctx/*, varargs */) {\r\n    var params  = new Array(arguments.length - 1),\r\n        offset  = 0,\r\n        index   = 2,\r\n        pending = true;\r\n    while (index < arguments.length)\r\n        params[offset++] = arguments[index++];\r\n    return new Promise(function executor(resolve, reject) {\r\n        params[offset] = function callback(err/*, varargs */) {\r\n            if (pending) {\r\n                pending = false;\r\n                if (err)\r\n                    reject(err);\r\n                else {\r\n                    var params = new Array(arguments.length - 1),\r\n                        offset = 0;\r\n                    while (offset < params.length)\r\n                        params[offset++] = arguments[offset];\r\n                    resolve.apply(null, params);\r\n                }\r\n            }\r\n        };\r\n        try {\r\n            fn.apply(ctx || null, params);\r\n        } catch (err) {\r\n            if (pending) {\r\n                pending = false;\r\n                reject(err);\r\n            }\r\n        }\r\n    });\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal base64 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar base64 = exports;\r\n\r\n/**\r\n * Calculates the byte length of a base64 encoded string.\r\n * @param {string} string Base64 encoded string\r\n * @returns {number} Byte length\r\n */\r\nbase64.length = function length(string) {\r\n    var p = string.length;\r\n    if (!p)\r\n        return 0;\r\n    var n = 0;\r\n    while (--p % 4 > 1 && string.charAt(p) === \"=\")\r\n        ++n;\r\n    return Math.ceil(string.length * 3) / 4 - n;\r\n};\r\n\r\n// Base64 encoding table\r\nvar b64 = new Array(64);\r\n\r\n// Base64 decoding table\r\nvar s64 = new Array(123);\r\n\r\n// 65..90, 97..122, 48..57, 43, 47\r\nfor (var i = 0; i < 64;)\r\n    s64[b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++;\r\n\r\n/**\r\n * Encodes a buffer to a base64 encoded string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} Base64 encoded string\r\n */\r\nbase64.encode = function encode(buffer, start, end) {\r\n    var parts = null,\r\n        chunk = [];\r\n    var i = 0, // output index\r\n        j = 0, // goto index\r\n        t;     // temporary\r\n    while (start < end) {\r\n        var b = buffer[start++];\r\n        switch (j) {\r\n            case 0:\r\n                chunk[i++] = b64[b >> 2];\r\n                t = (b & 3) << 4;\r\n                j = 1;\r\n                break;\r\n            case 1:\r\n                chunk[i++] = b64[t | b >> 4];\r\n                t = (b & 15) << 2;\r\n                j = 2;\r\n                break;\r\n            case 2:\r\n                chunk[i++] = b64[t | b >> 6];\r\n                chunk[i++] = b64[b & 63];\r\n                j = 0;\r\n                break;\r\n        }\r\n        if (i > 8191) {\r\n            (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n            i = 0;\r\n        }\r\n    }\r\n    if (j) {\r\n        chunk[i++] = b64[t];\r\n        chunk[i++] = 61;\r\n        if (j === 1)\r\n            chunk[i++] = 61;\r\n    }\r\n    if (parts) {\r\n        if (i)\r\n            parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n        return parts.join(\"\");\r\n    }\r\n    return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\nvar invalidEncoding = \"invalid encoding\";\r\n\r\n/**\r\n * Decodes a base64 encoded string to a buffer.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Number of bytes written\r\n * @throws {Error} If encoding is invalid\r\n */\r\nbase64.decode = function decode(string, buffer, offset) {\r\n    var start = offset;\r\n    var j = 0, // goto index\r\n        t;     // temporary\r\n    for (var i = 0; i < string.length;) {\r\n        var c = string.charCodeAt(i++);\r\n        if (c === 61 && j > 1)\r\n            break;\r\n        if ((c = s64[c]) === undefined)\r\n            throw Error(invalidEncoding);\r\n        switch (j) {\r\n            case 0:\r\n                t = c;\r\n                j = 1;\r\n                break;\r\n            case 1:\r\n                buffer[offset++] = t << 2 | (c & 48) >> 4;\r\n                t = c;\r\n                j = 2;\r\n                break;\r\n            case 2:\r\n                buffer[offset++] = (t & 15) << 4 | (c & 60) >> 2;\r\n                t = c;\r\n                j = 3;\r\n                break;\r\n            case 3:\r\n                buffer[offset++] = (t & 3) << 6 | c;\r\n                j = 0;\r\n                break;\r\n        }\r\n    }\r\n    if (j === 1)\r\n        throw Error(invalidEncoding);\r\n    return offset - start;\r\n};\r\n\r\n/**\r\n * Tests if the specified string appears to be base64 encoded.\r\n * @param {string} string String to test\r\n * @returns {boolean} `true` if probably base64 encoded, otherwise false\r\n */\r\nbase64.test = function test(string) {\r\n    return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(string);\r\n};\r\n","\"use strict\";\r\nmodule.exports = EventEmitter;\r\n\r\n/**\r\n * Constructs a new event emitter instance.\r\n * @classdesc A minimal event emitter.\r\n * @memberof util\r\n * @constructor\r\n */\r\nfunction EventEmitter() {\r\n\r\n    /**\r\n     * Registered listeners.\r\n     * @type {Object.<string,*>}\r\n     * @private\r\n     */\r\n    this._listeners = Object.create(null);\r\n}\r\n\r\n/**\r\n * Event listener as used by {@link util.EventEmitter}.\r\n * @typedef EventEmitterListener\r\n * @type {function}\r\n * @param {...*} args Arguments\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Registers an event listener.\r\n * @param {string} evt Event name\r\n * @param {EventEmitterListener} fn Listener\r\n * @param {*} [ctx] Listener context\r\n * @returns {this} `this`\r\n */\r\nEventEmitter.prototype.on = function on(evt, fn, ctx) {\r\n    (this._listeners[evt] || (this._listeners[evt] = [])).push({\r\n        fn  : fn,\r\n        ctx : ctx || this\r\n    });\r\n    return this;\r\n};\r\n\r\n/**\r\n * Removes an event listener or any matching listeners if arguments are omitted.\r\n * @param {string} [evt] Event name. Removes all listeners if omitted.\r\n * @param {EventEmitterListener} [fn] Listener to remove. Removes all listeners of `evt` if omitted.\r\n * @returns {this} `this`\r\n */\r\nEventEmitter.prototype.off = function off(evt, fn) {\r\n    if (evt === undefined)\r\n        this._listeners = Object.create(null);\r\n    else {\r\n        if (fn === undefined)\r\n            this._listeners[evt] = [];\r\n        else {\r\n            var listeners = this._listeners[evt];\r\n            if (!listeners)\r\n                return this;\r\n            for (var i = 0; i < listeners.length;)\r\n                if (listeners[i].fn === fn)\r\n                    listeners.splice(i, 1);\r\n                else\r\n                    ++i;\r\n        }\r\n    }\r\n    return this;\r\n};\r\n\r\n/**\r\n * Emits an event by calling its listeners with the specified arguments.\r\n * @param {string} evt Event name\r\n * @param {...*} args Arguments\r\n * @returns {this} `this`\r\n */\r\nEventEmitter.prototype.emit = function emit(evt) {\r\n    var listeners = this._listeners[evt];\r\n    if (listeners) {\r\n        var args = [],\r\n            i = 1;\r\n        for (; i < arguments.length;)\r\n            args.push(arguments[i++]);\r\n        for (i = 0; i < listeners.length;)\r\n            listeners[i].fn.apply(listeners[i++].ctx, args);\r\n    }\r\n    return this;\r\n};\r\n","\"use strict\";\r\n\r\nmodule.exports = factory(factory);\r\n\r\n/**\r\n * Reads / writes floats / doubles from / to buffers.\r\n * @name util.float\r\n * @namespace\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using little endian byte order.\r\n * @name util.float.writeFloatLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using big endian byte order.\r\n * @name util.float.writeFloatBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using little endian byte order.\r\n * @name util.float.readFloatLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using big endian byte order.\r\n * @name util.float.readFloatBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using little endian byte order.\r\n * @name util.float.writeDoubleLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using big endian byte order.\r\n * @name util.float.writeDoubleBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using little endian byte order.\r\n * @name util.float.readDoubleLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using big endian byte order.\r\n * @name util.float.readDoubleBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n// Factory function for the purpose of node-based testing in modified global environments\r\nfunction factory(exports) {\r\n\r\n    // float: typed array\r\n    if (typeof Float32Array !== \"undefined\") (function() {\r\n\r\n        var f32 = new Float32Array([ -0 ]),\r\n            f8b = new Uint8Array(f32.buffer),\r\n            le  = f8b[3] === 128;\r\n\r\n        function writeFloat_f32_cpy(val, buf, pos) {\r\n            f32[0] = val;\r\n            buf[pos    ] = f8b[0];\r\n            buf[pos + 1] = f8b[1];\r\n            buf[pos + 2] = f8b[2];\r\n            buf[pos + 3] = f8b[3];\r\n        }\r\n\r\n        function writeFloat_f32_rev(val, buf, pos) {\r\n            f32[0] = val;\r\n            buf[pos    ] = f8b[3];\r\n            buf[pos + 1] = f8b[2];\r\n            buf[pos + 2] = f8b[1];\r\n            buf[pos + 3] = f8b[0];\r\n        }\r\n\r\n        /* istanbul ignore next */\r\n        exports.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;\r\n        /* istanbul ignore next */\r\n        exports.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;\r\n\r\n        function readFloat_f32_cpy(buf, pos) {\r\n            f8b[0] = buf[pos    ];\r\n            f8b[1] = buf[pos + 1];\r\n            f8b[2] = buf[pos + 2];\r\n            f8b[3] = buf[pos + 3];\r\n            return f32[0];\r\n        }\r\n\r\n        function readFloat_f32_rev(buf, pos) {\r\n            f8b[3] = buf[pos    ];\r\n            f8b[2] = buf[pos + 1];\r\n            f8b[1] = buf[pos + 2];\r\n            f8b[0] = buf[pos + 3];\r\n            return f32[0];\r\n        }\r\n\r\n        /* istanbul ignore next */\r\n        exports.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;\r\n        /* istanbul ignore next */\r\n        exports.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;\r\n\r\n    // float: ieee754\r\n    })(); else (function() {\r\n\r\n        function writeFloat_ieee754(writeUint, val, buf, pos) {\r\n            var sign = val < 0 ? 1 : 0;\r\n            if (sign)\r\n                val = -val;\r\n            if (val === 0)\r\n                writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos);\r\n            else if (isNaN(val))\r\n                writeUint(2143289344, buf, pos);\r\n            else if (val > 3.4028234663852886e+38) // +-Infinity\r\n                writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);\r\n            else if (val < 1.1754943508222875e-38) // denormal\r\n                writeUint((sign << 31 | Math.round(val / 1.401298464324817e-45)) >>> 0, buf, pos);\r\n            else {\r\n                var exponent = Math.floor(Math.log(val) / Math.LN2),\r\n                    mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;\r\n                writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);\r\n            }\r\n        }\r\n\r\n        exports.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);\r\n        exports.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);\r\n\r\n        function readFloat_ieee754(readUint, buf, pos) {\r\n            var uint = readUint(buf, pos),\r\n                sign = (uint >> 31) * 2 + 1,\r\n                exponent = uint >>> 23 & 255,\r\n                mantissa = uint & 8388607;\r\n            return exponent === 255\r\n                ? mantissa\r\n                ? NaN\r\n                : sign * Infinity\r\n                : exponent === 0 // denormal\r\n                ? sign * 1.401298464324817e-45 * mantissa\r\n                : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);\r\n        }\r\n\r\n        exports.readFloatLE = readFloat_ieee754.bind(null, readUintLE);\r\n        exports.readFloatBE = readFloat_ieee754.bind(null, readUintBE);\r\n\r\n    })();\r\n\r\n    // double: typed array\r\n    if (typeof Float64Array !== \"undefined\") (function() {\r\n\r\n        var f64 = new Float64Array([-0]),\r\n            f8b = new Uint8Array(f64.buffer),\r\n            le  = f8b[7] === 128;\r\n\r\n        function writeDouble_f64_cpy(val, buf, pos) {\r\n            f64[0] = val;\r\n            buf[pos    ] = f8b[0];\r\n            buf[pos + 1] = f8b[1];\r\n            buf[pos + 2] = f8b[2];\r\n            buf[pos + 3] = f8b[3];\r\n            buf[pos + 4] = f8b[4];\r\n            buf[pos + 5] = f8b[5];\r\n            buf[pos + 6] = f8b[6];\r\n            buf[pos + 7] = f8b[7];\r\n        }\r\n\r\n        function writeDouble_f64_rev(val, buf, pos) {\r\n            f64[0] = val;\r\n            buf[pos    ] = f8b[7];\r\n            buf[pos + 1] = f8b[6];\r\n            buf[pos + 2] = f8b[5];\r\n            buf[pos + 3] = f8b[4];\r\n            buf[pos + 4] = f8b[3];\r\n            buf[pos + 5] = f8b[2];\r\n            buf[pos + 6] = f8b[1];\r\n            buf[pos + 7] = f8b[0];\r\n        }\r\n\r\n        /* istanbul ignore next */\r\n        exports.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;\r\n        /* istanbul ignore next */\r\n        exports.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;\r\n\r\n        function readDouble_f64_cpy(buf, pos) {\r\n            f8b[0] = buf[pos    ];\r\n            f8b[1] = buf[pos + 1];\r\n            f8b[2] = buf[pos + 2];\r\n            f8b[3] = buf[pos + 3];\r\n            f8b[4] = buf[pos + 4];\r\n            f8b[5] = buf[pos + 5];\r\n            f8b[6] = buf[pos + 6];\r\n            f8b[7] = buf[pos + 7];\r\n            return f64[0];\r\n        }\r\n\r\n        function readDouble_f64_rev(buf, pos) {\r\n            f8b[7] = buf[pos    ];\r\n            f8b[6] = buf[pos + 1];\r\n            f8b[5] = buf[pos + 2];\r\n            f8b[4] = buf[pos + 3];\r\n            f8b[3] = buf[pos + 4];\r\n            f8b[2] = buf[pos + 5];\r\n            f8b[1] = buf[pos + 6];\r\n            f8b[0] = buf[pos + 7];\r\n            return f64[0];\r\n        }\r\n\r\n        /* istanbul ignore next */\r\n        exports.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;\r\n        /* istanbul ignore next */\r\n        exports.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;\r\n\r\n    // double: ieee754\r\n    })(); else (function() {\r\n\r\n        function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {\r\n            var sign = val < 0 ? 1 : 0;\r\n            if (sign)\r\n                val = -val;\r\n            if (val === 0) {\r\n                writeUint(0, buf, pos + off0);\r\n                writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos + off1);\r\n            } else if (isNaN(val)) {\r\n                writeUint(0, buf, pos + off0);\r\n                writeUint(2146959360, buf, pos + off1);\r\n            } else if (val > 1.7976931348623157e+308) { // +-Infinity\r\n                writeUint(0, buf, pos + off0);\r\n                writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);\r\n            } else {\r\n                var mantissa;\r\n                if (val < 2.2250738585072014e-308) { // denormal\r\n                    mantissa = val / 5e-324;\r\n                    writeUint(mantissa >>> 0, buf, pos + off0);\r\n                    writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);\r\n                } else {\r\n                    var exponent = Math.floor(Math.log(val) / Math.LN2);\r\n                    if (exponent === 1024)\r\n                        exponent = 1023;\r\n                    mantissa = val * Math.pow(2, -exponent);\r\n                    writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);\r\n                    writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);\r\n                }\r\n            }\r\n        }\r\n\r\n        exports.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);\r\n        exports.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);\r\n\r\n        function readDouble_ieee754(readUint, off0, off1, buf, pos) {\r\n            var lo = readUint(buf, pos + off0),\r\n                hi = readUint(buf, pos + off1);\r\n            var sign = (hi >> 31) * 2 + 1,\r\n                exponent = hi >>> 20 & 2047,\r\n                mantissa = 4294967296 * (hi & 1048575) + lo;\r\n            return exponent === 2047\r\n                ? mantissa\r\n                ? NaN\r\n                : sign * Infinity\r\n                : exponent === 0 // denormal\r\n                ? sign * 5e-324 * mantissa\r\n                : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);\r\n        }\r\n\r\n        exports.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);\r\n        exports.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);\r\n\r\n    })();\r\n\r\n    return exports;\r\n}\r\n\r\n// uint helpers\r\n\r\nfunction writeUintLE(val, buf, pos) {\r\n    buf[pos    ] =  val        & 255;\r\n    buf[pos + 1] =  val >>> 8  & 255;\r\n    buf[pos + 2] =  val >>> 16 & 255;\r\n    buf[pos + 3] =  val >>> 24;\r\n}\r\n\r\nfunction writeUintBE(val, buf, pos) {\r\n    buf[pos    ] =  val >>> 24;\r\n    buf[pos + 1] =  val >>> 16 & 255;\r\n    buf[pos + 2] =  val >>> 8  & 255;\r\n    buf[pos + 3] =  val        & 255;\r\n}\r\n\r\nfunction readUintLE(buf, pos) {\r\n    return (buf[pos    ]\r\n          | buf[pos + 1] << 8\r\n          | buf[pos + 2] << 16\r\n          | buf[pos + 3] << 24) >>> 0;\r\n}\r\n\r\nfunction readUintBE(buf, pos) {\r\n    return (buf[pos    ] << 24\r\n          | buf[pos + 1] << 16\r\n          | buf[pos + 2] << 8\r\n          | buf[pos + 3]) >>> 0;\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal UTF8 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar utf8 = exports,\r\n    replacementCharCode = 0xFFFD; // U+FFFD REPLACEMENT CHARACTER\r\n\r\n/**\r\n * Calculates the UTF8 byte length of a string.\r\n * @param {string} string String\r\n * @returns {number} Byte length\r\n */\r\nutf8.length = function utf8_length(string) {\r\n    var len = 0,\r\n        c = 0;\r\n    for (var i = 0; i < string.length; ++i) {\r\n        c = string.charCodeAt(i);\r\n        if (c < 128)\r\n            len += 1;\r\n        else if (c < 2048)\r\n            len += 2;\r\n        else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\r\n            ++i;\r\n            len += 4;\r\n        } else\r\n            len += 3;\r\n    }\r\n    return len;\r\n};\r\n\r\n/**\r\n * Reads UTF8 bytes as a string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} String read\r\n */\r\nutf8.read = function utf8_read(buffer, start, end) {\r\n    if (end - start < 1)\r\n        return \"\";\r\n    // Batch code units and flush via String.fromCharCode.apply in 8192-unit\r\n    // chunks to avoid the per-character ConsString buildup of `str += ...`.\r\n    var parts = null,\r\n        chunk = [],\r\n        i = 0, // chunk write index\r\n        t, t2, c2, c3;\r\n    while (start < end) {\r\n        t = buffer[start++];\r\n        if (t <= 0x7F) {\r\n            chunk[i++] = t;\r\n        } else if (t >= 0xC0 && t < 0xE0) {\r\n            c2 = (t & 0x1F) << 6 | buffer[start++] & 0x3F;\r\n            chunk[i++] = c2 >= 0x80 ? c2 : replacementCharCode;\r\n        } else if (t >= 0xE0 && t < 0xF0) {\r\n            c3 = (t & 0xF) << 12 | (buffer[start++] & 0x3F) << 6 | buffer[start++] & 0x3F;\r\n            chunk[i++] = c3 >= 0x800 ? c3 : replacementCharCode;\r\n        } else if (t >= 0xF0) {\r\n            t2 = (t & 7) << 18 | (buffer[start++] & 0x3F) << 12 | (buffer[start++] & 0x3F) << 6 | buffer[start++] & 0x3F;\r\n            if (t2 < 0x10000 || t2 > 0x10FFFF)\r\n                chunk[i++] = replacementCharCode;\r\n            else {\r\n                t2 -= 0x10000;\r\n                chunk[i++] = 0xD800 + (t2 >> 10);\r\n                chunk[i++] = 0xDC00 + (t2 & 0x3FF);\r\n            }\r\n        }\r\n        if (i > 8191) {\r\n            (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n            i = 0;\r\n        }\r\n    }\r\n    if (parts) {\r\n        if (i)\r\n            parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n        return parts.join(\"\");\r\n    }\r\n    return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\n/**\r\n * Writes a string as UTF8 bytes.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Bytes written\r\n */\r\nutf8.write = function utf8_write(string, buffer, offset) {\r\n    var start = offset,\r\n        c1, // character 1\r\n        c2; // character 2\r\n    for (var i = 0; i < string.length; ++i) {\r\n        c1 = string.charCodeAt(i);\r\n        if (c1 < 128) {\r\n            buffer[offset++] = c1;\r\n        } else if (c1 < 2048) {\r\n            buffer[offset++] = c1 >> 6       | 192;\r\n            buffer[offset++] = c1       & 63 | 128;\r\n        } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\r\n            c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF);\r\n            ++i;\r\n            buffer[offset++] = c1 >> 18      | 240;\r\n            buffer[offset++] = c1 >> 12 & 63 | 128;\r\n            buffer[offset++] = c1 >> 6  & 63 | 128;\r\n            buffer[offset++] = c1       & 63 | 128;\r\n        } else {\r\n            buffer[offset++] = c1 >> 12      | 224;\r\n            buffer[offset++] = c1 >> 6  & 63 | 128;\r\n            buffer[offset++] = c1       & 63 | 128;\r\n        }\r\n    }\r\n    return offset - start;\r\n};\r\n","\"use strict\";\r\nmodule.exports = pool;\r\n\r\n/**\r\n * An allocator as used by {@link util.pool}.\r\n * @typedef PoolAllocator\r\n * @type {function}\r\n * @param {number} size Buffer size\r\n * @returns {Uint8Array} Buffer\r\n */\r\n\r\n/**\r\n * A slicer as used by {@link util.pool}.\r\n * @typedef PoolSlicer\r\n * @type {function}\r\n * @param {number} start Start offset\r\n * @param {number} end End offset\r\n * @returns {Uint8Array} Buffer slice\r\n * @this {Uint8Array}\r\n */\r\n\r\n/**\r\n * A general purpose buffer pool.\r\n * @memberof util\r\n * @function\r\n * @param {PoolAllocator} alloc Allocator\r\n * @param {PoolSlicer} slice Slicer\r\n * @param {number} [size=8192] Slab size\r\n * @returns {PoolAllocator} Pooled allocator\r\n */\r\nfunction pool(alloc, slice, size) {\r\n    var SIZE   = size || 8192;\r\n    var MAX    = SIZE >>> 1;\r\n    var slab   = null;\r\n    var offset = SIZE;\r\n    return function pool_alloc(size) {\r\n        if (size < 1 || size > MAX)\r\n            return alloc(size);\r\n        if (offset + size > SIZE) {\r\n            slab = alloc(SIZE);\r\n            offset = 0;\r\n        }\r\n        var buf = slice.call(slab, offset, offset += size);\r\n        if (offset & 7) // align to 32 bit\r\n            offset = (offset | 7) + 1;\r\n        return buf;\r\n    };\r\n}\r\n","\"use strict\";\nmodule.exports = LongBits;\n\nvar util = require(\"../util/minimal\");\n\n/**\n * Constructs new long bits.\n * @classdesc Helper class for working with the low and high bits of a 64 bit value.\n * @memberof util\n * @constructor\n * @param {number} lo Low 32 bits, unsigned\n * @param {number} hi High 32 bits, unsigned\n */\nfunction LongBits(lo, hi) {\n\n    // note that the casts below are theoretically unnecessary as of today, but older statically\n    // generated converter code might still call the ctor with signed 32bits. kept for compat.\n\n    /**\n     * Low bits.\n     * @type {number}\n     */\n    this.lo = lo >>> 0;\n\n    /**\n     * High bits.\n     * @type {number}\n     */\n    this.hi = hi >>> 0;\n}\n\n/**\n * Zero bits.\n * @memberof util.LongBits\n * @type {util.LongBits}\n */\nvar zero = LongBits.zero = new LongBits(0, 0);\n\nzero.toNumber = function() { return 0; };\nzero.zzEncode = zero.zzDecode = function() { return this; };\nzero.length = function() { return 1; };\n\n/**\n * Zero hash.\n * @memberof util.LongBits\n * @type {string}\n */\nvar zeroHash = LongBits.zeroHash = \"\\0\\0\\0\\0\\0\\0\\0\\0\";\n\n/**\n * Constructs new long bits from the specified number.\n * @param {number} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.fromNumber = function fromNumber(value) {\n    if (value === 0)\n        return zero;\n    var sign = value < 0;\n    if (sign)\n        value = -value;\n    var lo = value >>> 0,\n        hi = (value - lo) / 4294967296 >>> 0;\n    if (sign) {\n        hi = ~hi >>> 0;\n        lo = ~lo >>> 0;\n        if (++lo > 4294967295) {\n            lo = 0;\n            if (++hi > 4294967295)\n                hi = 0;\n        }\n    }\n    return new LongBits(lo, hi);\n};\n\n/**\n * Constructs new long bits from a number, long or string.\n * @param {Long|number|string} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.from = function from(value) {\n    if (typeof value === \"number\")\n        return LongBits.fromNumber(value);\n    if (util.isString(value)) {\n        /* istanbul ignore else */\n        if (util.Long)\n            value = util.Long.fromString(value);\n        else\n            return LongBits.fromNumber(parseInt(value, 10));\n    }\n    return value.low || value.high ? new LongBits(value.low >>> 0, value.high >>> 0) : zero;\n};\n\n/**\n * Converts this long bits to a possibly unsafe JavaScript number.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {number} Possibly unsafe number\n */\nLongBits.prototype.toNumber = function toNumber(unsigned) {\n    if (!unsigned && this.hi >>> 31) {\n        var lo = ~this.lo + 1 >>> 0,\n            hi = ~this.hi     >>> 0;\n        if (!lo)\n            hi = hi + 1 >>> 0;\n        return -(lo + hi * 4294967296);\n    }\n    return this.lo + this.hi * 4294967296;\n};\n\n/**\n * Converts this long bits to a long.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long} Long\n */\nLongBits.prototype.toLong = function toLong(unsigned) {\n    return util.Long\n        ? new util.Long(this.lo | 0, this.hi | 0, Boolean(unsigned))\n        /* istanbul ignore next */\n        : { low: this.lo | 0, high: this.hi | 0, unsigned: Boolean(unsigned) };\n};\n\nvar charCodeAt = String.prototype.charCodeAt;\n\n/**\n * Constructs new long bits from the specified 8 characters long hash.\n * @param {string} hash Hash\n * @returns {util.LongBits} Bits\n */\nLongBits.fromHash = function fromHash(hash) {\n    if (hash === zeroHash)\n        return zero;\n    return new LongBits(\n        ( charCodeAt.call(hash, 0)\n        | charCodeAt.call(hash, 1) << 8\n        | charCodeAt.call(hash, 2) << 16\n        | charCodeAt.call(hash, 3) << 24) >>> 0\n    ,\n        ( charCodeAt.call(hash, 4)\n        | charCodeAt.call(hash, 5) << 8\n        | charCodeAt.call(hash, 6) << 16\n        | charCodeAt.call(hash, 7) << 24) >>> 0\n    );\n};\n\n/**\n * Converts this long bits to a 8 characters long hash.\n * @returns {string} Hash\n */\nLongBits.prototype.toHash = function toHash() {\n    return String.fromCharCode(\n        this.lo        & 255,\n        this.lo >>> 8  & 255,\n        this.lo >>> 16 & 255,\n        this.lo >>> 24      ,\n        this.hi        & 255,\n        this.hi >>> 8  & 255,\n        this.hi >>> 16 & 255,\n        this.hi >>> 24\n    );\n};\n\n/**\n * Zig-zag encodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzEncode = function zzEncode() {\n    var mask =   this.hi >> 31;\n    this.hi  = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0;\n    this.lo  = ( this.lo << 1                   ^ mask) >>> 0;\n    return this;\n};\n\n/**\n * Zig-zag decodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzDecode = function zzDecode() {\n    var mask = -(this.lo & 1);\n    this.lo  = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0;\n    this.hi  = ( this.hi >>> 1                  ^ mask) >>> 0;\n    return this;\n};\n\n/**\n * Calculates the length of this longbits when encoded as a varint.\n * @returns {number} Length\n */\nLongBits.prototype.length = function length() {\n    var part0 =  this.lo,\n        part1 = (this.lo >>> 28 | this.hi << 4) >>> 0,\n        part2 =  this.hi >>> 24;\n    return part2 === 0\n         ? part1 === 0\n           ? part0 < 16384\n             ? part0 < 128 ? 1 : 2\n             : part0 < 2097152 ? 3 : 4\n           : part1 < 16384\n             ? part1 < 128 ? 5 : 6\n             : part1 < 2097152 ? 7 : 8\n         : part2 < 128 ? 9 : 10;\n};\n","\"use strict\";\nvar util = exports;\n\n// used to return a Promise where callback is omitted\nutil.asPromise = require(\"@protobufjs/aspromise\");\n\n// converts to / from base64 encoded strings\nutil.base64 = require(\"@protobufjs/base64\");\n\n// base class of rpc.Service\nutil.EventEmitter = require(\"@protobufjs/eventemitter\");\n\n// float handling accross browsers\nutil.float = require(\"@protobufjs/float\");\n\n// converts to / from utf8 encoded strings\nutil.utf8 = require(\"@protobufjs/utf8\");\n\n// provides a node-like buffer pool in the browser\nutil.pool = require(\"@protobufjs/pool\");\n\n// utility to work with the low and high bits of a 64 bit value\nutil.LongBits = require(\"./longbits\");\n\n/**\n * Tests if the specified key can affect object prototypes.\n * @memberof util\n * @param {string} key Key to test\n * @returns {boolean} `true` if the key is unsafe\n */\nfunction isUnsafeProperty(key) {\n    return key === \"__proto__\" || key === \"prototype\" || key === \"constructor\";\n}\n\nutil.isUnsafeProperty = isUnsafeProperty;\n\n/**\n * Whether running within node or not.\n * @memberof util\n * @type {boolean}\n */\nutil.isNode = Boolean(typeof global !== \"undefined\"\n                   && global\n                   && global.process\n                   && global.process.versions\n                   && global.process.versions.node);\n\n/**\n * Global object reference.\n * @memberof util\n * @type {Object}\n */\nutil.global = util.isNode && global\n           || typeof window !== \"undefined\" && window\n           || typeof self   !== \"undefined\" && self\n           || this; // eslint-disable-line no-invalid-this\n\n/**\n * An immuable empty array.\n * @memberof util\n * @type {Array.<*>}\n * @const\n */\nutil.emptyArray = Object.freeze ? Object.freeze([]) : /* istanbul ignore next */ []; // used on prototypes\n\n/**\n * An immutable empty object.\n * @type {Object}\n * @const\n */\nutil.emptyObject = Object.freeze ? Object.freeze({}) : /* istanbul ignore next */ {}; // used on prototypes\n\n/**\n * Tests if the specified value is an integer.\n * @function\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is an integer\n */\nutil.isInteger = Number.isInteger || /* istanbul ignore next */ function isInteger(value) {\n    return typeof value === \"number\" && isFinite(value) && Math.floor(value) === value;\n};\n\n/**\n * Tests if the specified value is a string.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a string\n */\nutil.isString = function isString(value) {\n    return typeof value === \"string\" || value instanceof String;\n};\n\n/**\n * Tests if the specified value is a non-null object.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a non-null object\n */\nutil.isObject = function isObject(value) {\n    return value && typeof value === \"object\";\n};\n\n/**\n * Checks if a property on a message is considered to be present.\n * This is an alias of {@link util.isSet}.\n * @function\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isset =\n\n/**\n * Checks if a property on a message is considered to be present.\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isSet = function isSet(obj, prop) {\n    var value = obj[prop];\n    if (value != null && Object.hasOwnProperty.call(obj, prop)) // eslint-disable-line eqeqeq\n        return typeof value !== \"object\" || (Array.isArray(value) ? value.length : Object.keys(value).length) > 0;\n    return false;\n};\n\n/**\n * Any compatible Buffer instance.\n * This is a minimal stand-alone definition of a Buffer instance. The actual type is that exported by node's typings.\n * @interface Buffer\n * @extends Uint8Array\n */\n\n/**\n * Node's Buffer class if available.\n * @type {Constructor<Buffer>}\n */\nutil.Buffer = (function() {\n    try {\n        var Buffer = util.global.Buffer;\n        // refuse to use non-node buffers if not explicitly assigned (perf reasons):\n        return Buffer.prototype.utf8Write ? Buffer : /* istanbul ignore next */ null;\n    } catch (e) {\n        /* istanbul ignore next */\n        return null;\n    }\n})();\n\n// Internal alias of or polyfull for Buffer.from.\nutil._Buffer_from = null;\n\n// Internal alias of or polyfill for Buffer.allocUnsafe.\nutil._Buffer_allocUnsafe = null;\n\n/**\n * Creates a new buffer of whatever type supported by the environment.\n * @param {number|number[]} [sizeOrArray=0] Buffer size or number array\n * @returns {Uint8Array|Buffer} Buffer\n */\nutil.newBuffer = function newBuffer(sizeOrArray) {\n    /* istanbul ignore next */\n    return typeof sizeOrArray === \"number\"\n        ? util.Buffer\n            ? util._Buffer_allocUnsafe(sizeOrArray)\n            : new util.Array(sizeOrArray)\n        : util.Buffer\n            ? util._Buffer_from(sizeOrArray)\n            : typeof Uint8Array === \"undefined\"\n                ? sizeOrArray\n                : new Uint8Array(sizeOrArray);\n};\n\n/**\n * Array implementation used in the browser. `Uint8Array` if supported, otherwise `Array`.\n * @type {Constructor<Uint8Array>}\n */\nutil.Array = typeof Uint8Array !== \"undefined\" ? Uint8Array /* istanbul ignore next */ : Array;\n\n/**\n * Any compatible Long instance.\n * This is a minimal stand-alone definition of a Long instance. The actual type is that exported by long.js.\n * @interface Long\n * @property {number} low Low bits\n * @property {number} high High bits\n * @property {boolean} unsigned Whether unsigned or not\n */\n\n/**\n * Long.js's Long class if available.\n * @type {Constructor<Long>}\n */\nutil.Long = /* istanbul ignore next */ util.global.dcodeIO && /* istanbul ignore next */ util.global.dcodeIO.Long\n         || /* istanbul ignore next */ util.global.Long\n         || (function() {\n                try {\n                    var Long = require(\"long\");\n                    return Long && Long.isLong ? Long : null;\n                } catch (e) {\n                    /* istanbul ignore next */\n                    return null;\n                }\n            })();\n\n/**\n * Regular expression used to verify 2 bit (`bool`) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key2Re = /^true|false|0|1$/;\n\n/**\n * Regular expression used to verify 32 bit (`int32` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key32Re = /^-?(?:0|[1-9][0-9]*)$/;\n\n/**\n * Regular expression used to verify 64 bit (`int64` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key64Re = /^(?:[\\\\x00-\\\\xff]{8}|-?(?:0|[1-9][0-9]*))$/;\n\n/**\n * Converts a number or long to an 8 characters long hash string.\n * @param {Long|number} value Value to convert\n * @returns {string} Hash\n */\nutil.longToHash = function longToHash(value) {\n    return value\n        ? util.LongBits.from(value).toHash()\n        : util.LongBits.zeroHash;\n};\n\n/**\n * Converts an 8 characters long hash string to a long or number.\n * @param {string} hash Hash\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long|number} Original value\n */\nutil.longFromHash = function longFromHash(hash, unsigned) {\n    var bits = util.LongBits.fromHash(hash);\n    if (util.Long)\n        return util.Long.fromBits(bits.lo, bits.hi, unsigned);\n    return bits.toNumber(Boolean(unsigned));\n};\n\n/**\n * Merges the properties of the source object into the destination object.\n * @memberof util\n * @param {Object.<string,*>} dst Destination object\n * @param {...(Object.<string,*>|boolean)} src Source objects, optionally followed by an `ifNotSet` flag\n * @returns {Object.<string,*>} Destination object\n */\nfunction merge(dst) { // used by converters\n    var ifNotSet = typeof arguments[arguments.length - 1] === \"boolean\",\n        limit = ifNotSet ? arguments.length - 1 : arguments.length;\n    ifNotSet = ifNotSet && arguments[arguments.length - 1];\n    for (var a = 1; a < limit; ++a) {\n        var src = arguments[a];\n        if (!src)\n            continue;\n        for (var keys = Object.keys(src), i = 0; i < keys.length; ++i)\n            if (!isUnsafeProperty(keys[i]) && (dst[keys[i]] === undefined || !ifNotSet))\n                dst[keys[i]] = src[keys[i]];\n    }\n    return dst;\n}\n\nutil.merge = merge;\n\n/**\n * Schema declaration nesting limit.\n * @memberof util\n * @type {number}\n */\nutil.nestingLimit = 32; // protoc: MaxMessageDeclarationNestingDepth\n\n/**\n * Recursion limit.\n * @memberof util\n * @type {number}\n */\nutil.recursionLimit = 100; // protoc: CodedInputStream::default_recursion_limit_\n\n/**\n * Makes a property safe for assignment as an own property.\n * @memberof util\n * @param {Object.<string,*>} obj Object\n * @param {string} key Property key\n * @returns {undefined}\n */\nutil.makeProp = function makeProp(obj, key) {\n    Object.defineProperty(obj, key, {\n        enumerable: true,\n        configurable: true,\n        writable: true\n    });\n};\n\n/**\n * Converts the first character of a string to lower case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.lcFirst = function lcFirst(str) {\n    return str.charAt(0).toLowerCase() + str.substring(1);\n};\n\n/**\n * Creates a custom error constructor.\n * @memberof util\n * @param {string} name Error name\n * @returns {Constructor<Error>} Custom error constructor\n */\nfunction newError(name) {\n\n    function CustomError(message, properties) {\n\n        if (!(this instanceof CustomError))\n            return new CustomError(message, properties);\n\n        // Error.call(this, message);\n        // ^ just returns a new error instance because the ctor can be called as a function\n\n        Object.defineProperty(this, \"message\", { get: function() { return message; } });\n\n        /* istanbul ignore next */\n        if (Error.captureStackTrace) // node\n            Error.captureStackTrace(this, CustomError);\n        else\n            Object.defineProperty(this, \"stack\", { value: new Error().stack || \"\" });\n\n        if (properties)\n            merge(this, properties);\n    }\n\n    CustomError.prototype = Object.create(Error.prototype, {\n        constructor: {\n            value: CustomError,\n            writable: true,\n            enumerable: false,\n            configurable: true,\n        },\n        name: {\n            get: function get() { return name; },\n            set: undefined,\n            enumerable: false,\n            // configurable: false would accurately preserve the behavior of\n            // the original, but I'm guessing that was not intentional.\n            // For an actual error subclass, this property would\n            // be configurable.\n            configurable: true,\n        },\n        toString: {\n            value: function value() { return this.name + \": \" + this.message; },\n            writable: true,\n            enumerable: false,\n            configurable: true,\n        },\n    });\n\n    return CustomError;\n}\n\nutil.newError = newError;\n\n/**\n * Constructs a new protocol error.\n * @classdesc Error subclass indicating a protocol specifc error.\n * @memberof util\n * @extends Error\n * @template T extends Message<T>\n * @constructor\n * @param {string} message Error message\n * @param {Object.<string,*>} [properties] Additional properties\n * @example\n * try {\n *     MyMessage.decode(someBuffer); // throws if required fields are missing\n * } catch (e) {\n *     if (e instanceof ProtocolError && e.instance)\n *         console.log(\"decoded so far: \" + JSON.stringify(e.instance));\n * }\n */\nutil.ProtocolError = newError(\"ProtocolError\");\n\n/**\n * So far decoded message instance.\n * @name util.ProtocolError#instance\n * @type {Message<T>}\n */\n\n/**\n * A OneOf getter as returned by {@link util.oneOfGetter}.\n * @typedef OneOfGetter\n * @type {function}\n * @returns {string|undefined} Set field name, if any\n */\n\n/**\n * Builds a getter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfGetter} Unbound getter\n */\nutil.oneOfGetter = function getOneOf(fieldNames) {\n    var fieldMap = {};\n    for (var i = 0; i < fieldNames.length; ++i)\n        fieldMap[fieldNames[i]] = 1;\n\n    /**\n     * @returns {string|undefined} Set field name, if any\n     * @this Object\n     * @ignore\n     */\n    return function() { // eslint-disable-line consistent-return\n        for (var keys = Object.keys(this), i = keys.length - 1; i > -1; --i)\n            if (fieldMap[keys[i]] === 1 && this[keys[i]] !== undefined && this[keys[i]] !== null)\n                return keys[i];\n    };\n};\n\n/**\n * A OneOf setter as returned by {@link util.oneOfSetter}.\n * @typedef OneOfSetter\n * @type {function}\n * @param {string|undefined} value Field name\n * @returns {undefined}\n */\n\n/**\n * Builds a setter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfSetter} Unbound setter\n */\nutil.oneOfSetter = function setOneOf(fieldNames) {\n\n    /**\n     * @param {string} name Field name\n     * @returns {undefined}\n     * @this Object\n     * @ignore\n     */\n    return function(name) {\n        for (var i = 0; i < fieldNames.length; ++i)\n            if (fieldNames[i] !== name)\n                delete this[fieldNames[i]];\n    };\n};\n\n/**\n * Default conversion options used for {@link Message#toJSON} implementations.\n *\n * These options are close to proto3's JSON mapping with the exception that internal types like Any are handled just like messages. More precisely:\n *\n * - Longs become strings\n * - Enums become string keys\n * - Bytes become base64 encoded strings\n * - (Sub-)Messages become plain objects\n * - Maps become plain objects with all string keys\n * - Repeated fields become arrays\n * - NaN and Infinity for float and double fields become strings\n *\n * @type {IConversionOptions}\n * @see https://developers.google.com/protocol-buffers/docs/proto3?hl=en#json\n */\nutil.toJSONOptions = {\n    longs: String,\n    enums: String,\n    bytes: String,\n    json: true\n};\n\n// Sets up buffer utility according to the environment (called in index-minimal)\nutil._configure = function() {\n    var Buffer = util.Buffer;\n    /* istanbul ignore if */\n    if (!Buffer) {\n        util._Buffer_from = util._Buffer_allocUnsafe = null;\n        return;\n    }\n    // because node 4.x buffers are incompatible & immutable\n    // see: https://github.com/dcodeIO/protobuf.js/pull/665\n    util._Buffer_from = Buffer.from !== Uint8Array.from && Buffer.from ||\n        /* istanbul ignore next */\n        function Buffer_from(value, encoding) {\n            return new Buffer(value, encoding);\n        };\n    util._Buffer_allocUnsafe = Buffer.allocUnsafe ||\n        /* istanbul ignore next */\n        function Buffer_allocUnsafe(size) {\n            return new Buffer(size);\n        };\n};\n","\"use strict\";\nmodule.exports = Writer;\n\nvar util      = require(\"./util/minimal\");\n\nvar BufferWriter; // cyclic\n\nvar LongBits  = util.LongBits,\n    base64    = util.base64,\n    utf8      = util.utf8;\n\n/**\n * Constructs a new writer operation instance.\n * @classdesc Scheduled writer operation.\n * @constructor\n * @param {function(*, Uint8Array, number)} fn Function to call\n * @param {number} len Value byte length\n * @param {*} val Value to write\n * @ignore\n */\nfunction Op(fn, len, val) {\n\n    /**\n     * Function to call.\n     * @type {function(Uint8Array, number, *)}\n     */\n    this.fn = fn;\n\n    /**\n     * Value byte length.\n     * @type {number}\n     */\n    this.len = len;\n\n    /**\n     * Next operation.\n     * @type {Writer.Op|undefined}\n     */\n    this.next = undefined;\n\n    /**\n     * Value to write.\n     * @type {*}\n     */\n    this.val = val; // type varies\n}\n\n/* istanbul ignore next */\nfunction noop() {} // eslint-disable-line no-empty-function\n\n/**\n * Constructs a new writer state instance.\n * @classdesc Copied writer state.\n * @memberof Writer\n * @constructor\n * @param {Writer} writer Writer to copy state from\n * @ignore\n */\nfunction State(writer) {\n\n    /**\n     * Current head.\n     * @type {Writer.Op}\n     */\n    this.head = writer.head;\n\n    /**\n     * Current tail.\n     * @type {Writer.Op}\n     */\n    this.tail = writer.tail;\n\n    /**\n     * Current buffer length.\n     * @type {number}\n     */\n    this.len = writer.len;\n\n    /**\n     * Next state.\n     * @type {State|null}\n     */\n    this.next = writer.states;\n}\n\n/**\n * Constructs a new writer instance.\n * @classdesc Wire format writer using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n */\nfunction Writer() {\n\n    /**\n     * Current length.\n     * @type {number}\n     */\n    this.len = 0;\n\n    /**\n     * Operations head.\n     * @type {Object}\n     */\n    this.head = new Op(noop, 0, 0);\n\n    /**\n     * Operations tail\n     * @type {Object}\n     */\n    this.tail = this.head;\n\n    /**\n     * Linked forked states.\n     * @type {Object|null}\n     */\n    this.states = null;\n\n    // When a value is written, the writer calculates its byte length and puts it into a linked\n    // list of operations to perform when finish() is called. This both allows us to allocate\n    // buffers of the exact required size and reduces the amount of work we have to do compared\n    // to first calculating over objects and then encoding over objects. In our case, the encoding\n    // part is just a linked list walk calling operations with already prepared values.\n}\n\nvar create = function create() {\n    return util.Buffer\n        ? function create_buffer_setup() {\n            return (Writer.create = function create_buffer() {\n                return new BufferWriter();\n            })();\n        }\n        /* istanbul ignore next */\n        : function create_array() {\n            return new Writer();\n        };\n};\n\n/**\n * Creates a new writer.\n * @function\n * @returns {BufferWriter|Writer} A {@link BufferWriter} when Buffers are supported, otherwise a {@link Writer}\n */\nWriter.create = create();\n\n/**\n * Allocates a buffer of the specified size.\n * @param {number} size Buffer size\n * @returns {Uint8Array} Buffer\n */\nWriter.alloc = function alloc(size) {\n    return new util.Array(size);\n};\n\n// Use Uint8Array buffer pool in the browser, just like node does with buffers\n/* istanbul ignore else */\nif (util.Array !== Array)\n    Writer.alloc = util.pool(Writer.alloc, util.Array.prototype.subarray);\n\n/**\n * Pushes a new operation to the queue.\n * @param {function(Uint8Array, number, *)} fn Function to call\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @returns {Writer} `this`\n * @private\n */\nWriter.prototype._push = function push(fn, len, val) {\n    this.tail = this.tail.next = new Op(fn, len, val);\n    this.len += len;\n    return this;\n};\n\nfunction writeByte(val, buf, pos) {\n    buf[pos] = val & 255;\n}\n\nfunction writeVarint32(val, buf, pos) {\n    while (val > 127) {\n        buf[pos++] = val & 127 | 128;\n        val >>>= 7;\n    }\n    buf[pos] = val;\n}\n\n/**\n * Constructs a new varint writer operation instance.\n * @classdesc Scheduled varint writer operation.\n * @extends Op\n * @constructor\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @ignore\n */\nfunction VarintOp(len, val) {\n    this.len = len;\n    this.next = undefined;\n    this.val = val;\n}\n\nVarintOp.prototype = Object.create(Op.prototype);\nVarintOp.prototype.fn = writeVarint32;\n\n/**\n * Writes an unsigned 32 bit value as a varint.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.uint32 = function write_uint32(value) {\n    // here, the call to this.push has been inlined and a varint specific Op subclass is used.\n    // uint32 is by far the most frequently used operation and benefits significantly from this.\n    this.len += (this.tail = this.tail.next = new VarintOp(\n        (value = value >>> 0)\n                < 128       ? 1\n        : value < 16384     ? 2\n        : value < 2097152   ? 3\n        : value < 268435456 ? 4\n        :                     5,\n    value)).len;\n    return this;\n};\n\n/**\n * Writes a signed 32 bit value as a varint.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.int32 = function write_int32(value) {\n    return (value |= 0) < 0\n        ? this._push(writeVarint64, 10, LongBits.fromNumber(value)) // 10 bytes per spec\n        : this.uint32(value);\n};\n\n/**\n * Writes a 32 bit value as a varint, zig-zag encoded.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sint32 = function write_sint32(value) {\n    return this.uint32((value << 1 ^ value >> 31) >>> 0);\n};\n\nfunction writeVarint64(val, buf, pos) {\n    var lo = val.lo,\n        hi = val.hi;\n    while (hi) {\n        buf[pos++] = lo & 127 | 128;\n        lo = (lo >>> 7 | hi << 25) >>> 0;\n        hi >>>= 7;\n    }\n    while (lo > 127) {\n        buf[pos++] = lo & 127 | 128;\n        lo = lo >>> 7;\n    }\n    buf[pos++] = lo;\n}\n\n/**\n * Writes an unsigned 64 bit value as a varint.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.uint64 = function write_uint64(value) {\n    var bits = LongBits.from(value);\n    return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a signed 64 bit value as a varint.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.int64 = Writer.prototype.uint64;\n\n/**\n * Writes a signed 64 bit value as a varint, zig-zag encoded.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sint64 = function write_sint64(value) {\n    var bits = LongBits.from(value).zzEncode();\n    return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a boolish value as a varint.\n * @param {boolean} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bool = function write_bool(value) {\n    return this._push(writeByte, 1, value ? 1 : 0);\n};\n\nfunction writeFixed32(val, buf, pos) {\n    buf[pos    ] =  val         & 255;\n    buf[pos + 1] =  val >>> 8   & 255;\n    buf[pos + 2] =  val >>> 16  & 255;\n    buf[pos + 3] =  val >>> 24;\n}\n\n/**\n * Writes an unsigned 32 bit value as fixed 32 bits.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.fixed32 = function write_fixed32(value) {\n    return this._push(writeFixed32, 4, value >>> 0);\n};\n\n/**\n * Writes a signed 32 bit value as fixed 32 bits.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sfixed32 = Writer.prototype.fixed32;\n\n/**\n * Writes an unsigned 64 bit value as fixed 64 bits.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.fixed64 = function write_fixed64(value) {\n    var bits = LongBits.from(value);\n    return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi);\n};\n\n/**\n * Writes a signed 64 bit value as fixed 64 bits.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sfixed64 = Writer.prototype.fixed64;\n\n/**\n * Writes a float (32 bit).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.float = function write_float(value) {\n    return this._push(util.float.writeFloatLE, 4, value);\n};\n\n/**\n * Writes a double (64 bit float).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.double = function write_double(value) {\n    return this._push(util.float.writeDoubleLE, 8, value);\n};\n\nvar writeBytes = util.Array.prototype.set\n    ? function writeBytes_set(val, buf, pos) {\n        buf.set(val, pos); // also works for plain array values\n    }\n    /* istanbul ignore next */\n    : function writeBytes_for(val, buf, pos) {\n        for (var i = 0; i < val.length; ++i)\n            buf[pos + i] = val[i];\n    };\n\n/**\n * Writes a sequence of bytes.\n * @param {Uint8Array|string} value Buffer or base64 encoded string to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bytes = function write_bytes(value) {\n    var len = value.length >>> 0;\n    if (!len)\n        return this._push(writeByte, 1, 0);\n    if (util.isString(value)) {\n        var buf = Writer.alloc(len = base64.length(value));\n        base64.decode(value, buf, 0);\n        value = buf;\n    }\n    return this.uint32(len)._push(writeBytes, len, value);\n};\n\n/**\n * Writes a string.\n * @param {string} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.string = function write_string(value) {\n    var len = utf8.length(value);\n    return len\n        ? this.uint32(len)._push(utf8.write, len, value)\n        : this._push(writeByte, 1, 0);\n};\n\n/**\n * Forks this writer's state by pushing it to a stack.\n * Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.\n * @returns {Writer} `this`\n */\nWriter.prototype.fork = function fork() {\n    this.states = new State(this);\n    this.head = this.tail = new Op(noop, 0, 0);\n    this.len = 0;\n    return this;\n};\n\n/**\n * Resets this instance to the last state.\n * @returns {Writer} `this`\n */\nWriter.prototype.reset = function reset() {\n    if (this.states) {\n        this.head   = this.states.head;\n        this.tail   = this.states.tail;\n        this.len    = this.states.len;\n        this.states = this.states.next;\n    } else {\n        this.head = this.tail = new Op(noop, 0, 0);\n        this.len  = 0;\n    }\n    return this;\n};\n\n/**\n * Resets to the last state and appends the fork state's current write length as a varint followed by its operations.\n * @returns {Writer} `this`\n */\nWriter.prototype.ldelim = function ldelim() {\n    var head = this.head,\n        tail = this.tail,\n        len  = this.len;\n    this.reset().uint32(len);\n    if (len) {\n        this.tail.next = head.next; // skip noop\n        this.tail = tail;\n        this.len += len;\n    }\n    return this;\n};\n\n/**\n * Finishes the write operation.\n * @returns {Uint8Array} Finished buffer\n */\nWriter.prototype.finish = function finish() {\n    var head = this.head.next, // skip noop\n        buf  = this.constructor.alloc(this.len),\n        pos  = 0;\n    while (head) {\n        head.fn(head.val, buf, pos);\n        pos += head.len;\n        head = head.next;\n    }\n    // this.head = this.tail = null;\n    return buf;\n};\n\nWriter._configure = function(BufferWriter_) {\n    BufferWriter = BufferWriter_;\n    Writer.create = create();\n    BufferWriter._configure();\n};\n","\"use strict\";\nmodule.exports = BufferWriter;\n\n// extends Writer\nvar Writer = require(\"./writer\");\n(BufferWriter.prototype = Object.create(Writer.prototype)).constructor = BufferWriter;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer writer instance.\n * @classdesc Wire format writer using node buffers.\n * @extends Writer\n * @constructor\n */\nfunction BufferWriter() {\n    Writer.call(this);\n}\n\nBufferWriter._configure = function () {\n    /**\n     * Allocates a buffer of the specified size.\n     * @function\n     * @param {number} size Buffer size\n     * @returns {Buffer} Buffer\n     */\n    BufferWriter.alloc = util._Buffer_allocUnsafe;\n\n    BufferWriter.writeBytesBuffer = util.Buffer && util.Buffer.prototype instanceof Uint8Array && util.Buffer.prototype.set.name === \"set\"\n        ? function writeBytesBuffer_set(val, buf, pos) {\n          buf.set(val, pos); // faster than copy (requires node >= 4 where Buffers extend Uint8Array and set is properly inherited)\n          // also works for plain array values\n        }\n        /* istanbul ignore next */\n        : function writeBytesBuffer_copy(val, buf, pos) {\n          if (val.copy) // Buffer values\n            val.copy(buf, pos, 0, val.length);\n          else for (var i = 0; i < val.length;) // plain array values\n            buf[pos++] = val[i++];\n        };\n};\n\n\n/**\n * @override\n */\nBufferWriter.prototype.bytes = function write_bytes_buffer(value) {\n    if (util.isString(value))\n        value = util._Buffer_from(value, \"base64\");\n    var len = value.length >>> 0;\n    this.uint32(len);\n    if (len)\n        this._push(BufferWriter.writeBytesBuffer, len, value);\n    return this;\n};\n\nfunction writeStringBuffer(val, buf, pos) {\n    if (val.length < 40) // plain js is faster for short strings (probably due to redundant assertions)\n        util.utf8.write(val, buf, pos);\n    else if (buf.utf8Write)\n        buf.utf8Write(val, pos);\n    else\n        buf.write(val, pos);\n}\n\n/**\n * @override\n */\nBufferWriter.prototype.string = function write_string_buffer(value) {\n    var len = util.Buffer.byteLength(value);\n    this.uint32(len);\n    if (len)\n        this._push(writeStringBuffer, len, value);\n    return this;\n};\n\n\n/**\n * Finishes the write operation.\n * @name BufferWriter#finish\n * @function\n * @returns {Buffer} Finished buffer\n */\n\nBufferWriter._configure();\n","\"use strict\";\nmodule.exports = Reader;\n\nvar util      = require(\"./util/minimal\");\n\nvar BufferReader; // cyclic\n\nvar LongBits  = util.LongBits,\n    utf8      = util.utf8;\n\n/* istanbul ignore next */\nfunction indexOutOfRange(reader, writeLength) {\n    return RangeError(\"index out of range: \" + reader.pos + \" + \" + (writeLength || 1) + \" > \" + reader.len);\n}\n\n/**\n * Constructs a new reader instance using the specified buffer.\n * @classdesc Wire format reader using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n * @param {Uint8Array} buffer Buffer to read from\n */\nfunction Reader(buffer) {\n\n    /**\n     * Read buffer.\n     * @type {Uint8Array}\n     */\n    this.buf = buffer;\n\n    /**\n     * Read buffer position.\n     * @type {number}\n     */\n    this.pos = 0;\n\n    /**\n     * Read buffer length.\n     * @type {number}\n     */\n    this.len = buffer.length;\n}\n\nvar create_array = typeof Uint8Array !== \"undefined\"\n    ? function create_typed_array(buffer) {\n        if (buffer instanceof Uint8Array || Array.isArray(buffer))\n            return new Reader(buffer);\n        throw Error(\"illegal buffer\");\n    }\n    /* istanbul ignore next */\n    : function create_array(buffer) {\n        if (Array.isArray(buffer))\n            return new Reader(buffer);\n        throw Error(\"illegal buffer\");\n    };\n\nvar create = function create() {\n    return util.Buffer\n        ? function create_buffer_setup(buffer) {\n            return (Reader.create = function create_buffer(buffer) {\n                return util.Buffer.isBuffer(buffer)\n                    ? new BufferReader(buffer)\n                    /* istanbul ignore next */\n                    : create_array(buffer);\n            })(buffer);\n        }\n        /* istanbul ignore next */\n        : create_array;\n};\n\n/**\n * Creates a new reader using the specified buffer.\n * @function\n * @param {Uint8Array|Buffer} buffer Buffer to read from\n * @returns {Reader|BufferReader} A {@link BufferReader} if `buffer` is a Buffer, otherwise a {@link Reader}\n * @throws {Error} If `buffer` is not a valid buffer\n */\nReader.create = create();\n\nReader.prototype._slice = util.Array.prototype.subarray || /* istanbul ignore next */ util.Array.prototype.slice;\n\n/**\n * Reads a varint as an unsigned 32 bit value.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.uint32 = (function read_uint32_setup() {\n    var value = 4294967295; // optimizer type-hint, tends to deopt otherwise (?!)\n    return function read_uint32() {\n        value = (         this.buf[this.pos] & 127       ) >>> 0; if (this.buf[this.pos++] < 128) return value;\n        value = (value | (this.buf[this.pos] & 127) <<  7) >>> 0; if (this.buf[this.pos++] < 128) return value;\n        value = (value | (this.buf[this.pos] & 127) << 14) >>> 0; if (this.buf[this.pos++] < 128) return value;\n        value = (value | (this.buf[this.pos] & 127) << 21) >>> 0; if (this.buf[this.pos++] < 128) return value;\n        value = (value | (this.buf[this.pos] &  15) << 28) >>> 0; if (this.buf[this.pos++] < 128) return value;\n\n        /* istanbul ignore if */\n        if ((this.pos += 5) > this.len) {\n            this.pos = this.len;\n            throw indexOutOfRange(this, 10);\n        }\n        return value;\n    };\n})();\n\n/**\n * Reads a varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.int32 = function read_int32() {\n    return this.uint32() | 0;\n};\n\n/**\n * Reads a zig-zag encoded varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.sint32 = function read_sint32() {\n    var value = this.uint32();\n    return value >>> 1 ^ -(value & 1) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readLongVarint() {\n    // tends to deopt with local vars for octet etc.\n    var bits = new LongBits(0, 0);\n    var i = 0;\n    if (this.len - this.pos > 4) { // fast route (lo)\n        for (; i < 4; ++i) {\n            // 1st..4th\n            bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n            if (this.buf[this.pos++] < 128)\n                return bits;\n        }\n        // 5th\n        bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0;\n        bits.hi = (bits.hi | (this.buf[this.pos] & 127) >>  4) >>> 0;\n        if (this.buf[this.pos++] < 128)\n            return bits;\n        i = 0;\n    } else {\n        for (; i < 3; ++i) {\n            /* istanbul ignore if */\n            if (this.pos >= this.len)\n                throw indexOutOfRange(this);\n            // 1st..3th\n            bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n            if (this.buf[this.pos++] < 128)\n                return bits;\n        }\n        // 4th\n        bits.lo = (bits.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0;\n        return bits;\n    }\n    if (this.len - this.pos > 4) { // fast route (hi)\n        for (; i < 5; ++i) {\n            // 6th..10th\n            bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n            if (this.buf[this.pos++] < 128)\n                return bits;\n        }\n    } else {\n        for (; i < 5; ++i) {\n            /* istanbul ignore if */\n            if (this.pos >= this.len)\n                throw indexOutOfRange(this);\n            // 6th..10th\n            bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n            if (this.buf[this.pos++] < 128)\n                return bits;\n        }\n    }\n    /* istanbul ignore next */\n    throw Error(\"invalid varint encoding\");\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads a varint as a signed 64 bit value.\n * @name Reader#int64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as an unsigned 64 bit value.\n * @name Reader#uint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a zig-zag encoded varint as a signed 64 bit value.\n * @name Reader#sint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as a boolean.\n * @returns {boolean} Value read\n */\nReader.prototype.bool = function read_bool() {\n    return this.uint32() !== 0;\n};\n\nfunction readFixed32_end(buf, end) { // note that this uses `end`, not `pos`\n    return (buf[end - 4]\n          | buf[end - 3] << 8\n          | buf[end - 2] << 16\n          | buf[end - 1] << 24) >>> 0;\n}\n\n/**\n * Reads fixed 32 bits as an unsigned 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.fixed32 = function read_fixed32() {\n\n    /* istanbul ignore if */\n    if (this.pos + 4 > this.len)\n        throw indexOutOfRange(this, 4);\n\n    return readFixed32_end(this.buf, this.pos += 4);\n};\n\n/**\n * Reads fixed 32 bits as a signed 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.sfixed32 = function read_sfixed32() {\n\n    /* istanbul ignore if */\n    if (this.pos + 4 > this.len)\n        throw indexOutOfRange(this, 4);\n\n    return readFixed32_end(this.buf, this.pos += 4) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readFixed64(/* this: Reader */) {\n\n    /* istanbul ignore if */\n    if (this.pos + 8 > this.len)\n        throw indexOutOfRange(this, 8);\n\n    return new LongBits(readFixed32_end(this.buf, this.pos += 4), readFixed32_end(this.buf, this.pos += 4));\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads fixed 64 bits.\n * @name Reader#fixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads zig-zag encoded fixed 64 bits.\n * @name Reader#sfixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a float (32 bit) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.float = function read_float() {\n\n    /* istanbul ignore if */\n    if (this.pos + 4 > this.len)\n        throw indexOutOfRange(this, 4);\n\n    var value = util.float.readFloatLE(this.buf, this.pos);\n    this.pos += 4;\n    return value;\n};\n\n/**\n * Reads a double (64 bit float) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.double = function read_double() {\n\n    /* istanbul ignore if */\n    if (this.pos + 8 > this.len)\n        throw indexOutOfRange(this, 4);\n\n    var value = util.float.readDoubleLE(this.buf, this.pos);\n    this.pos += 8;\n    return value;\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @returns {Uint8Array} Value read\n */\nReader.prototype.bytes = function read_bytes() {\n    var length = this.uint32(),\n        start  = this.pos,\n        end    = this.pos + length;\n\n    /* istanbul ignore if */\n    if (end > this.len)\n        throw indexOutOfRange(this, length);\n\n    this.pos += length;\n    if (Array.isArray(this.buf)) // plain array\n        return this.buf.slice(start, end);\n\n    if (start === end) { // fix for IE 10/Win8 and others' subarray returning array of size 1\n        var nativeBuffer = util.Buffer;\n        return nativeBuffer\n            ? nativeBuffer.alloc(0)\n            : new this.buf.constructor(0);\n    }\n    return this._slice.call(this.buf, start, end);\n};\n\n/**\n * Reads a string preceeded by its byte length as a varint.\n * @returns {string} Value read\n */\nReader.prototype.string = function read_string() {\n    var bytes = this.bytes();\n    return utf8.read(bytes, 0, bytes.length);\n};\n\n/**\n * Skips the specified number of bytes if specified, otherwise skips a varint.\n * @param {number} [length] Length if known, otherwise a varint is assumed\n * @returns {Reader} `this`\n */\nReader.prototype.skip = function skip(length) {\n    if (typeof length === \"number\") {\n        /* istanbul ignore if */\n        if (this.pos + length > this.len)\n            throw indexOutOfRange(this, length);\n        this.pos += length;\n    } else {\n        do {\n            /* istanbul ignore if */\n            if (this.pos >= this.len)\n                throw indexOutOfRange(this);\n        } while (this.buf[this.pos++] & 128);\n    }\n    return this;\n};\n\n/**\n * Recursion limit.\n * @type {number}\n */\nReader.recursionLimit = util.recursionLimit;\n\n/**\n * Skips the next element of the specified wire type.\n * @param {number} wireType Wire type received\n * @param {number} [depth] Depth of recursion to control nested calls; 0 if omitted\n * @returns {Reader} `this`\n */\nReader.prototype.skipType = function(wireType, depth) {\n    if (depth === undefined) depth = 0;\n    if (depth > Reader.recursionLimit)\n        throw Error(\"maximum nesting depth exceeded\");\n    switch (wireType) {\n        case 0:\n            this.skip();\n            break;\n        case 1:\n            this.skip(8);\n            break;\n        case 2:\n            this.skip(this.uint32());\n            break;\n        case 3:\n            while ((wireType = this.uint32() & 7) !== 4) {\n                this.skipType(wireType, depth + 1);\n            }\n            break;\n        case 5:\n            this.skip(4);\n            break;\n\n        /* istanbul ignore next */\n        default:\n            throw Error(\"invalid wire type \" + wireType + \" at offset \" + this.pos);\n    }\n    return this;\n};\n\nReader._configure = function(BufferReader_) {\n    BufferReader = BufferReader_;\n    Reader.create = create();\n    BufferReader._configure();\n\n    var fn = util.Long ? \"toLong\" : /* istanbul ignore next */ \"toNumber\";\n    util.merge(Reader.prototype, {\n\n        int64: function read_int64() {\n            return readLongVarint.call(this)[fn](false);\n        },\n\n        uint64: function read_uint64() {\n            return readLongVarint.call(this)[fn](true);\n        },\n\n        sint64: function read_sint64() {\n            return readLongVarint.call(this).zzDecode()[fn](false);\n        },\n\n        fixed64: function read_fixed64() {\n            return readFixed64.call(this)[fn](true);\n        },\n\n        sfixed64: function read_sfixed64() {\n            return readFixed64.call(this)[fn](false);\n        }\n\n    });\n};\n","\"use strict\";\nmodule.exports = BufferReader;\n\n// extends Reader\nvar Reader = require(\"./reader\");\n(BufferReader.prototype = Object.create(Reader.prototype)).constructor = BufferReader;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer reader instance.\n * @classdesc Wire format reader using node buffers.\n * @extends Reader\n * @constructor\n * @param {Buffer} buffer Buffer to read from\n */\nfunction BufferReader(buffer) {\n    Reader.call(this, buffer);\n\n    /**\n     * Read buffer.\n     * @name BufferReader#buf\n     * @type {Buffer}\n     */\n}\n\nBufferReader._configure = function () {\n    /* istanbul ignore else */\n    if (util.Buffer)\n        BufferReader.prototype._slice = util.Buffer.prototype.slice;\n};\n\n\n/**\n * @override\n */\nBufferReader.prototype.string = function read_string_buffer() {\n    var len = this.uint32(); // modifies pos\n    return this.buf.utf8Slice\n        ? this.buf.utf8Slice(this.pos, this.pos = Math.min(this.pos + len, this.len))\n        : this.buf.toString(\"utf-8\", this.pos, this.pos = Math.min(this.pos + len, this.len));\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @name BufferReader#bytes\n * @function\n * @returns {Buffer} Value read\n */\n\nBufferReader._configure();\n","\"use strict\";\nmodule.exports = Service;\n\nvar util = require(\"../util/minimal\");\n\n// Extends EventEmitter\n(Service.prototype = Object.create(util.EventEmitter.prototype)).constructor = Service;\n\n/**\n * A service method callback as used by {@link rpc.ServiceMethod|ServiceMethod}.\n *\n * Differs from {@link RPCImplCallback} in that it is an actual callback of a service method which may not return `response = null`.\n * @typedef rpc.ServiceMethodCallback\n * @template TRes extends Message<TRes>\n * @type {function}\n * @param {Error|null} error Error, if any\n * @param {TRes} [response] Response message\n * @returns {undefined}\n */\n\n/**\n * A service method part of a {@link rpc.Service} as created by {@link Service.create}.\n * @typedef rpc.ServiceMethod\n * @template TReq extends Message<TReq>\n * @template TRes extends Message<TRes>\n * @type {function}\n * @param {TReq|Properties<TReq>} request Request message or plain object\n * @param {rpc.ServiceMethodCallback<TRes>} [callback] Node-style callback called with the error, if any, and the response message\n * @returns {Promise<Message<TRes>>} Promise if `callback` has been omitted, otherwise `undefined`\n */\n\n/**\n * Constructs a new RPC service instance.\n * @classdesc An RPC service as returned by {@link Service#create}.\n * @exports rpc.Service\n * @extends util.EventEmitter\n * @constructor\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n */\nfunction Service(rpcImpl, requestDelimited, responseDelimited) {\n\n    if (typeof rpcImpl !== \"function\")\n        throw TypeError(\"rpcImpl must be a function\");\n\n    util.EventEmitter.call(this);\n\n    /**\n     * RPC implementation. Becomes `null` once the service is ended.\n     * @type {RPCImpl|null}\n     */\n    this.rpcImpl = rpcImpl;\n\n    /**\n     * Whether requests are length-delimited.\n     * @type {boolean}\n     */\n    this.requestDelimited = Boolean(requestDelimited);\n\n    /**\n     * Whether responses are length-delimited.\n     * @type {boolean}\n     */\n    this.responseDelimited = Boolean(responseDelimited);\n}\n\n/**\n * Calls a service method through {@link rpc.Service#rpcImpl|rpcImpl}.\n * @param {Method|rpc.ServiceMethod<TReq,TRes>} method Reflected or static method\n * @param {Constructor<TReq>} requestCtor Request constructor\n * @param {Constructor<TRes>} responseCtor Response constructor\n * @param {TReq|Properties<TReq>} request Request message or plain object\n * @param {rpc.ServiceMethodCallback<TRes>} callback Service callback\n * @returns {undefined}\n * @template TReq extends Message<TReq>\n * @template TRes extends Message<TRes>\n */\nService.prototype.rpcCall = function rpcCall(method, requestCtor, responseCtor, request, callback) {\n\n    if (!request)\n        throw TypeError(\"request must be specified\");\n\n    var self = this;\n    if (!callback)\n        return util.asPromise(rpcCall, self, method, requestCtor, responseCtor, request);\n\n    if (!self.rpcImpl) {\n        setTimeout(function() { callback(Error(\"already ended\")); }, 0);\n        return undefined;\n    }\n\n    try {\n        return self.rpcImpl(\n            method,\n            requestCtor[self.requestDelimited ? \"encodeDelimited\" : \"encode\"](request).finish(),\n            function rpcCallback(err, response) {\n\n                if (err) {\n                    self.emit(\"error\", err, method);\n                    return callback(err);\n                }\n\n                if (response === null) {\n                    self.end(/* endedByRPC */ true);\n                    return undefined;\n                }\n\n                if (!(response instanceof responseCtor)) {\n                    try {\n                        response = responseCtor[self.responseDelimited ? \"decodeDelimited\" : \"decode\"](response);\n                    } catch (err) {\n                        self.emit(\"error\", err, method);\n                        return callback(err);\n                    }\n                }\n\n                self.emit(\"data\", response, method);\n                return callback(null, response);\n            }\n        );\n    } catch (err) {\n        self.emit(\"error\", err, method);\n        setTimeout(function() { callback(err); }, 0);\n        return undefined;\n    }\n};\n\n/**\n * Ends this service and emits the `end` event.\n * @param {boolean} [endedByRPC=false] Whether the service has been ended by the RPC implementation.\n * @returns {rpc.Service} `this`\n */\nService.prototype.end = function end(endedByRPC) {\n    if (this.rpcImpl) {\n        if (!endedByRPC) // signal end to rpcImpl\n            this.rpcImpl(null, null, null);\n        this.rpcImpl = null;\n        this.emit(\"end\").off();\n    }\n    return this;\n};\n","\"use strict\";\n\n/**\n * Streaming RPC helpers.\n * @namespace\n */\nvar rpc = exports;\n\n/**\n * RPC implementation passed to {@link Service#create} performing a service request on network level, i.e. by utilizing http requests or websockets.\n * @typedef RPCImpl\n * @type {function}\n * @param {Method|rpc.ServiceMethod<Message<{}>,Message<{}>>} method Reflected or static method being called\n * @param {Uint8Array} requestData Request data\n * @param {RPCImplCallback} callback Callback function\n * @returns {undefined}\n * @example\n * function rpcImpl(method, requestData, callback) {\n *     if (protobuf.util.lcFirst(method.name) !== \"myMethod\") // compatible with static code\n *         throw Error(\"no such method\");\n *     asynchronouslyObtainAResponse(requestData, function(err, responseData) {\n *         callback(err, responseData);\n *     });\n * }\n */\n\n/**\n * Node-style callback as used by {@link RPCImpl}.\n * @typedef RPCImplCallback\n * @type {function}\n * @param {Error|null} error Error, if any, otherwise `null`\n * @param {Uint8Array|null} [response] Response data or `null` to signal end of stream, if there hasn't been an error\n * @returns {undefined}\n */\n\nrpc.Service = require(\"./rpc/service\");\n","\"use strict\";\nmodule.exports = Object.create(null);\n\n/**\n * Named roots.\n * This is where pbjs stores generated structures (the option `-r, --root` specifies a name).\n * Can also be used manually to make roots available across modules.\n * @name roots\n * @type {Object.<string,Root>}\n * @example\n * // pbjs -r myroot -o compiled.js ...\n *\n * // in another module:\n * require(\"./compiled.js\");\n *\n * // in any subsequent module:\n * var root = protobuf.roots[\"myroot\"];\n */\n","\"use strict\";\nvar protobuf = exports;\n\n/**\n * Build type, one of `\"full\"`, `\"light\"` or `\"minimal\"`.\n * @name build\n * @type {string}\n * @const\n */\nprotobuf.build = \"minimal\";\n\n// Serialization\nprotobuf.Writer       = require(\"./writer\");\nprotobuf.BufferWriter = require(\"./writer_buffer\");\nprotobuf.Reader       = require(\"./reader\");\nprotobuf.BufferReader = require(\"./reader_buffer\");\n\n// Utility\nprotobuf.util         = require(\"./util/minimal\");\nprotobuf.rpc          = require(\"./rpc\");\nprotobuf.roots        = require(\"./roots\");\nprotobuf.configure    = configure;\n\n/* istanbul ignore next */\n/**\n * Reconfigures the library according to the environment.\n * @returns {undefined}\n */\nfunction configure() {\n    protobuf.util._configure();\n    protobuf.Writer._configure(protobuf.BufferWriter);\n    protobuf.Reader._configure(protobuf.BufferReader);\n}\n\n// Set up buffer utility according to the environment\nconfigure();\n","\"use strict\";\r\nmodule.exports = codegen;\r\n\r\nvar reservedRe = /^(?:do|if|in|for|let|new|try|var|case|else|enum|eval|false|null|this|true|void|with|break|catch|class|const|super|throw|while|yield|delete|export|import|public|return|static|switch|typeof|default|extends|finally|package|private|continue|debugger|function|arguments|interface|protected|implements|instanceof)$/;\r\n\r\n/**\r\n * Begins generating a function.\r\n * @memberof util\r\n * @param {string[]} functionParams Function parameter names\r\n * @param {string} [functionName] Function name if not anonymous\r\n * @returns {Codegen} Appender that appends code to the function's body\r\n */\r\nfunction codegen(functionParams, functionName) {\r\n\r\n    /* istanbul ignore if */\r\n    if (typeof functionParams === \"string\") {\r\n        functionName = functionParams;\r\n        functionParams = undefined;\r\n    }\r\n\r\n    var body = [];\r\n\r\n    /**\r\n     * Appends code to the function's body or finishes generation.\r\n     * @typedef Codegen\r\n     * @type {function}\r\n     * @param {string|Object.<string,*>} [formatStringOrScope] Format string or, to finish the function, an object of additional scope variables, if any\r\n     * @param {...*} [formatParams] Format parameters\r\n     * @returns {Codegen|Function} Itself or the generated function if finished\r\n     * @throws {Error} If format parameter counts do not match\r\n     */\r\n\r\n    function Codegen(formatStringOrScope) {\r\n        // note that explicit array handling below makes this ~50% faster\r\n\r\n        // finish the function\r\n        if (typeof formatStringOrScope !== \"string\") {\r\n            var source = toString();\r\n            if (codegen.verbose)\r\n                console.log(\"codegen: \" + source); // eslint-disable-line no-console\r\n            source = \"return \" + source;\r\n            if (formatStringOrScope) {\r\n                var scopeKeys   = Object.keys(formatStringOrScope),\r\n                    scopeParams = new Array(scopeKeys.length + 1),\r\n                    scopeValues = new Array(scopeKeys.length),\r\n                    scopeOffset = 0;\r\n                while (scopeOffset < scopeKeys.length) {\r\n                    scopeParams[scopeOffset] = scopeKeys[scopeOffset];\r\n                    scopeValues[scopeOffset] = formatStringOrScope[scopeKeys[scopeOffset++]];\r\n                }\r\n                scopeParams[scopeOffset] = source;\r\n                return Function.apply(null, scopeParams).apply(null, scopeValues); // eslint-disable-line no-new-func\r\n            }\r\n            return Function(source)(); // eslint-disable-line no-new-func\r\n        }\r\n\r\n        // otherwise append to body\r\n        var formatParams = new Array(arguments.length - 1),\r\n            formatOffset = 0;\r\n        while (formatOffset < formatParams.length)\r\n            formatParams[formatOffset] = arguments[++formatOffset];\r\n        formatOffset = 0;\r\n        formatStringOrScope = formatStringOrScope.replace(/%([%dfijs])/g, function replace($0, $1) {\r\n            var value = formatParams[formatOffset++];\r\n            switch ($1) {\r\n                case \"d\": case \"f\": return String(Number(value));\r\n                case \"i\": return String(Math.floor(value));\r\n                case \"j\": return JSON.stringify(value);\r\n                case \"s\": return String(value);\r\n            }\r\n            return \"%\";\r\n        });\r\n        if (formatOffset !== formatParams.length)\r\n            throw Error(\"parameter count mismatch\");\r\n        body.push(formatStringOrScope);\r\n        return Codegen;\r\n    }\r\n\r\n    function toString(functionNameOverride) {\r\n        return \"function \" + safeFunctionName(functionNameOverride || functionName) + \"(\" + (functionParams && functionParams.join(\",\") || \"\") + \"){\\n  \" + body.join(\"\\n  \") + \"\\n}\";\r\n    }\r\n\r\n    Codegen.toString = toString;\r\n    return Codegen;\r\n}\r\n\r\n/**\r\n * Begins generating a function.\r\n * @memberof util\r\n * @function codegen\r\n * @param {string} [functionName] Function name if not anonymous\r\n * @returns {Codegen} Appender that appends code to the function's body\r\n * @variation 2\r\n */\r\n\r\n/**\r\n * When set to `true`, codegen will log generated code to console. Useful for debugging.\r\n * @name util.codegen.verbose\r\n * @type {boolean}\r\n */\r\ncodegen.verbose = false;\r\n\r\nfunction safeFunctionName(name) {\r\n    if (!name)\r\n        return \"\";\r\n    name = String(name).replace(/[^\\w$]/g, \"\");\r\n    if (!name)\r\n        return \"\";\r\n    if (/^\\d/.test(name))\r\n        name = \"_\" + name;\r\n    return reservedRe.test(name) ? name + \"_\" : name;\r\n}\r\n","\"use strict\";\r\n\r\nvar fs = null;\r\ntry {\r\n    fs = require(/* webpackIgnore: true */ \"fs\");\r\n    if (!fs || !fs.readFile || !fs.readFileSync)\r\n        fs = null;\r\n} catch (e) {\r\n    // `fs` is unavailable in browsers and browser-like bundles.\r\n}\r\nmodule.exports = fs;\r\n","\"use strict\";\r\nmodule.exports = fetch;\r\n\r\nvar asPromise = require(\"@protobufjs/aspromise\"),\r\n    fs        = require(\"./util/fs\");\r\n\r\n/**\r\n * Node-style callback as used by {@link util.fetch}.\r\n * @typedef FetchCallback\r\n * @type {function}\r\n * @param {?Error} error Error, if any, otherwise `null`\r\n * @param {string} [contents] File contents, if there hasn't been an error\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Options as used by {@link util.fetch}.\r\n * @interface IFetchOptions\r\n * @property {boolean} [binary=false] Whether expecting a binary response\r\n * @property {boolean} [xhr=false] If `true`, forces the use of XMLHttpRequest\r\n */\r\n\r\n/**\r\n * Fetches the contents of a file.\r\n * @memberof util\r\n * @param {string} filename File path or url\r\n * @param {IFetchOptions} options Fetch options\r\n * @param {FetchCallback} callback Callback function\r\n * @returns {undefined}\r\n */\r\nfunction fetch(filename, options, callback) {\r\n    if (typeof options === \"function\") {\r\n        callback = options;\r\n        options = {};\r\n    } else if (!options)\r\n        options = {};\r\n\r\n    if (!callback)\r\n        return asPromise(fetch, this, filename, options); // eslint-disable-line no-invalid-this\r\n\r\n    // if a node-like filesystem is present, try it first but fall back to XHR if nothing is found.\r\n    if (!options.xhr && fs && fs.readFile)\r\n        return fs.readFile(filename, function fetchReadFileCallback(err, contents) {\r\n            return err && typeof XMLHttpRequest !== \"undefined\"\r\n                ? fetch.xhr(filename, options, callback)\r\n                : err\r\n                ? callback(err)\r\n                : callback(null, options.binary ? contents : contents.toString(\"utf8\"));\r\n        });\r\n\r\n    // use the XHR version otherwise.\r\n    return fetch.xhr(filename, options, callback);\r\n}\r\n\r\n/**\r\n * Fetches the contents of a file.\r\n * @name util.fetch\r\n * @function\r\n * @param {string} path File path or url\r\n * @param {FetchCallback} callback Callback function\r\n * @returns {undefined}\r\n * @variation 2\r\n */\r\n\r\n/**\r\n * Fetches the contents of a file.\r\n * @name util.fetch\r\n * @function\r\n * @param {string} path File path or url\r\n * @param {IFetchOptions} [options] Fetch options\r\n * @returns {Promise<string|Uint8Array>} Promise\r\n * @variation 3\r\n */\r\n\r\n/**/\r\nfetch.xhr = function fetch_xhr(filename, options, callback) {\r\n    var xhr = new XMLHttpRequest();\r\n    xhr.onreadystatechange /* works everywhere */ = function fetchOnReadyStateChange() {\r\n\r\n        if (xhr.readyState !== 4)\r\n            return undefined;\r\n\r\n        // local cors security errors return status 0 / empty string, too. afaik this cannot be\r\n        // reliably distinguished from an actually empty file for security reasons. feel free\r\n        // to send a pull request if you are aware of a solution.\r\n        if (xhr.status !== 0 && xhr.status !== 200)\r\n            return callback(Error(\"status \" + xhr.status));\r\n\r\n        // if binary data is expected, make sure that some sort of array is returned, even if\r\n        // ArrayBuffers are not supported. the binary string fallback, however, is unsafe.\r\n        if (options.binary) {\r\n            var buffer = xhr.response;\r\n            if (!buffer) {\r\n                buffer = [];\r\n                for (var i = 0; i < xhr.responseText.length; ++i)\r\n                    buffer.push(xhr.responseText.charCodeAt(i) & 255);\r\n            }\r\n            return callback(null, typeof Uint8Array !== \"undefined\" ? new Uint8Array(buffer) : buffer);\r\n        }\r\n        return callback(null, xhr.responseText);\r\n    };\r\n\r\n    if (options.binary) {\r\n        // ref: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Sending_and_Receiving_Binary_Data#Receiving_binary_data_in_older_browsers\r\n        if (\"overrideMimeType\" in xhr)\r\n            xhr.overrideMimeType(\"text/plain; charset=x-user-defined\");\r\n        xhr.responseType = \"arraybuffer\";\r\n    }\r\n\r\n    xhr.open(\"GET\", filename);\r\n    xhr.send();\r\n};\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal path module to resolve Unix, Windows and URL paths alike.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar path = exports;\r\n\r\nvar isAbsolute =\r\n/**\r\n * Tests if the specified path is absolute.\r\n * @param {string} path Path to test\r\n * @returns {boolean} `true` if path is absolute\r\n */\r\npath.isAbsolute = function isAbsolute(path) {\r\n    return /^(?:\\/|\\w+:)/.test(path);\r\n};\r\n\r\nvar normalize =\r\n/**\r\n * Normalizes the specified path.\r\n * @param {string} path Path to normalize\r\n * @returns {string} Normalized path\r\n */\r\npath.normalize = function normalize(path) {\r\n    path = path.replace(/\\\\/g, \"/\")\r\n               .replace(/\\/{2,}/g, \"/\");\r\n    var parts    = path.split(\"/\"),\r\n        absolute = isAbsolute(path),\r\n        prefix   = \"\";\r\n    if (absolute)\r\n        prefix = parts.shift() + \"/\";\r\n    for (var i = 0; i < parts.length;) {\r\n        if (parts[i] === \"..\") {\r\n            if (i > 0 && parts[i - 1] !== \"..\")\r\n                parts.splice(--i, 2);\r\n            else if (absolute)\r\n                parts.splice(i, 1);\r\n            else\r\n                ++i;\r\n        } else if (parts[i] === \".\")\r\n            parts.splice(i, 1);\r\n        else\r\n            ++i;\r\n    }\r\n    return prefix + parts.join(\"/\");\r\n};\r\n\r\n/**\r\n * Resolves the specified include path against the specified origin path.\r\n * @param {string} originPath Path to the origin file\r\n * @param {string} includePath Include path relative to origin path\r\n * @param {boolean} [alreadyNormalized=false] `true` if both paths are already known to be normalized\r\n * @returns {string} Path to the include file\r\n */\r\npath.resolve = function resolve(originPath, includePath, alreadyNormalized) {\r\n    if (!alreadyNormalized)\r\n        includePath = normalize(includePath);\r\n    if (isAbsolute(includePath))\r\n        return includePath;\r\n    if (!alreadyNormalized)\r\n        originPath = normalize(originPath);\r\n    return (originPath = originPath.replace(/(?:\\/|^)[^/]+$/, \"\")).length ? normalize(originPath + \"/\" + includePath) : includePath;\r\n};\r\n","\"use strict\";\n\nvar patterns = exports;\n\npatterns.numberRe    = /^(?![eE])[0-9]*(?:\\.[0-9]*)?(?:[eE][+-]?[0-9]+)?$/;\npatterns.typeRefRe   = /^(?:\\.?[a-zA-Z_][a-zA-Z_0-9]*)(?:\\.[a-zA-Z_][a-zA-Z_0-9]*)*$/;\npatterns.reservedRe  = /^(?:do|if|in|for|let|new|try|var|case|else|enum|eval|false|null|this|true|void|with|break|catch|class|const|super|throw|while|yield|delete|export|import|public|return|static|switch|typeof|default|extends|finally|package|private|continue|debugger|function|arguments|interface|protected|implements|instanceof)$/;\n","\"use strict\";\n\nvar fs = null;\ntry {\n    fs = require(/* webpackIgnore: true */ \"fs\");\n    if (!fs || !fs.readFile || !fs.readFileSync)\n        fs = null;\n} catch (e) {\n    // `fs` is unavailable in browsers and browser-like bundles.\n}\nmodule.exports = fs;\n","\"use strict\";\nmodule.exports = Namespace;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Namespace.prototype = Object.create(ReflectionObject.prototype)).constructor = Namespace).className = \"Namespace\";\n\nvar Field    = require(\"./field\"),\n    util     = require(\"./util\"),\n    OneOf    = require(\"./oneof\");\n\nvar Type,    // cyclic\n    Service,\n    Enum;\n\n/**\n * Constructs a new namespace instance.\n * @name Namespace\n * @classdesc Reflected namespace.\n * @extends NamespaceBase\n * @constructor\n * @param {string} name Namespace name\n * @param {Object.<string,*>} [options] Declared options\n */\n\n/**\n * Constructs a namespace from JSON.\n * @memberof Namespace\n * @function\n * @param {string} name Namespace name\n * @param {Object.<string,*>} json JSON object\n * @param {number} [depth] Current nesting depth, defaults to `0`\n * @returns {Namespace} Created namespace\n * @throws {TypeError} If arguments are invalid\n */\nNamespace.fromJSON = function fromJSON(name, json, depth) {\n    depth = util.checkDepth(depth);\n    return new Namespace(name, json.options).addJSON(json.nested, depth);\n};\n\n/**\n * Converts an array of reflection objects to JSON.\n * @memberof Namespace\n * @param {ReflectionObject[]} array Object array\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {Object.<string,*>|undefined} JSON object or `undefined` when array is empty\n */\nfunction arrayToJSON(array, toJSONOptions) {\n    if (!(array && array.length))\n        return undefined;\n    var obj = {};\n    for (var i = 0; i < array.length; ++i)\n        obj[array[i].name] = array[i].toJSON(toJSONOptions);\n    return obj;\n}\n\nNamespace.arrayToJSON = arrayToJSON;\n\n/**\n * Tests if the specified id is reserved.\n * @param {Array.<number[]|string>|undefined} reserved Array of reserved ranges and names\n * @param {number} id Id to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nNamespace.isReservedId = function isReservedId(reserved, id) {\n    if (reserved)\n        for (var i = 0; i < reserved.length; ++i)\n            if (typeof reserved[i] !== \"string\" && reserved[i][0] <= id && reserved[i][1] > id)\n                return true;\n    return false;\n};\n\n/**\n * Tests if the specified name is reserved.\n * @param {Array.<number[]|string>|undefined} reserved Array of reserved ranges and names\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nNamespace.isReservedName = function isReservedName(reserved, name) {\n    if (reserved)\n        for (var i = 0; i < reserved.length; ++i)\n            if (reserved[i] === name)\n                return true;\n    return false;\n};\n\n/**\n * Not an actual constructor. Use {@link Namespace} instead.\n * @classdesc Base class of all reflection objects containing nested objects. This is not an actual class but here for the sake of having consistent type definitions.\n * @exports NamespaceBase\n * @extends ReflectionObject\n * @abstract\n * @constructor\n * @param {string} name Namespace name\n * @param {Object.<string,*>} [options] Declared options\n * @see {@link Namespace}\n */\nfunction Namespace(name, options) {\n    ReflectionObject.call(this, name, options);\n\n    /**\n     * Nested objects by name.\n     * @type {Object.<string,ReflectionObject>|undefined}\n     */\n    this.nested = undefined; // toJSON\n\n    /**\n     * Cached nested objects as an array.\n     * @type {ReflectionObject[]|null}\n     * @private\n     */\n    this._nestedArray = null;\n\n    /**\n     * Cache lookup calls for any objects contains anywhere under this namespace.\n     * This drastically speeds up resolve for large cross-linked protos where the same\n     * types are looked up repeatedly.\n     * @type {Object.<string,ReflectionObject|null>}\n     * @private\n     */\n    this._lookupCache = Object.create(null);\n\n    /**\n     * Whether or not objects contained in this namespace need feature resolution.\n     * @type {boolean}\n     * @protected\n     */\n    this._needsRecursiveFeatureResolution = true;\n\n    /**\n     * Whether or not objects contained in this namespace need a resolve.\n     * @type {boolean}\n     * @protected\n     */\n    this._needsRecursiveResolve = true;\n}\n\nfunction clearCache(namespace) {\n    namespace._nestedArray = null;\n    namespace._lookupCache = Object.create(null);\n\n    // Also clear parent caches, since they include nested lookups.\n    var parent = namespace;\n    while(parent = parent.parent) {\n        parent._lookupCache = Object.create(null);\n    }\n    return namespace;\n}\n\n/**\n * Nested objects of this namespace as an array for iteration.\n * @name NamespaceBase#nestedArray\n * @type {ReflectionObject[]}\n * @readonly\n */\nObject.defineProperty(Namespace.prototype, \"nestedArray\", {\n    get: function() {\n        return this._nestedArray || (this._nestedArray = util.toArray(this.nested));\n    }\n});\n\n/**\n * Namespace descriptor.\n * @interface INamespace\n * @property {Object.<string,*>} [options] Namespace options\n * @property {Object.<string,AnyNestedObject>} [nested] Nested object descriptors\n */\n\n/**\n * Any extension field descriptor.\n * @typedef AnyExtensionField\n * @type {IExtensionField|IExtensionMapField}\n */\n\n/**\n * Any nested object descriptor.\n * @typedef AnyNestedObject\n * @type {IEnum|IType|IService|AnyExtensionField|INamespace|IOneOf}\n */\n\n/**\n * Converts this namespace to a namespace descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {INamespace} Namespace descriptor\n */\nNamespace.prototype.toJSON = function toJSON(toJSONOptions) {\n    return util.toObject([\n        \"options\" , this.options,\n        \"nested\"  , arrayToJSON(this.nestedArray, toJSONOptions)\n    ]);\n};\n\n/**\n * Adds nested objects to this namespace from nested object descriptors.\n * @param {Object.<string,AnyNestedObject>} nestedJson Any nested object descriptors\n * @param {number} [depth] Current nesting depth, defaults to `0`\n * @returns {Namespace} `this`\n */\nNamespace.prototype.addJSON = function addJSON(nestedJson, depth) {\n    depth = util.checkDepth(depth);\n    var ns = this;\n    /* istanbul ignore else */\n    if (nestedJson) {\n        for (var names = Object.keys(nestedJson), i = 0, nested; i < names.length; ++i) {\n            nested = nestedJson[names[i]];\n            ns.add( // most to least likely\n                ( nested.fields !== undefined\n                ? Type.fromJSON\n                : nested.values !== undefined\n                ? Enum.fromJSON\n                : nested.methods !== undefined\n                ? Service.fromJSON\n                : nested.id !== undefined\n                ? Field.fromJSON\n                : Namespace.fromJSON )(names[i], nested, depth + 1)\n            );\n        }\n    }\n    return this;\n};\n\n/**\n * Gets the nested object of the specified name.\n * @param {string} name Nested object name\n * @returns {ReflectionObject|null} The reflection object or `null` if it doesn't exist\n */\nNamespace.prototype.get = function get(name) {\n    return this.nested && Object.prototype.hasOwnProperty.call(this.nested, name)\n        ? this.nested[name]\n        : null;\n};\n\n/**\n * Gets the values of the nested {@link Enum|enum} of the specified name.\n * This methods differs from {@link Namespace#get|get} in that it returns an enum's values directly and throws instead of returning `null`.\n * @param {string} name Nested enum name\n * @returns {Object.<string,number>} Enum values\n * @throws {Error} If there is no such enum\n */\nNamespace.prototype.getEnum = function getEnum(name) {\n    if (this.nested && Object.prototype.hasOwnProperty.call(this.nested, name) && this.nested[name] instanceof Enum)\n        return this.nested[name].values;\n    throw Error(\"no such enum: \" + name);\n};\n\n/**\n * Adds a nested object to this namespace.\n * @param {ReflectionObject} object Nested object to add\n * @returns {Namespace} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If there is already a nested object with this name\n */\nNamespace.prototype.add = function add(object) {\n\n    if (!(object instanceof Field && object.extend !== undefined || object instanceof Type  || object instanceof OneOf || object instanceof Enum || object instanceof Service || object instanceof Namespace))\n        throw TypeError(\"object must be a valid nested object\");\n\n    if (object.name === \"__proto__\")\n        return this;\n\n    if (!this.nested)\n        this.nested = {};\n    else {\n        var prev = this.get(object.name);\n        if (prev) {\n            if (prev instanceof Namespace && object instanceof Namespace && !(prev instanceof Type || prev instanceof Service)) {\n                // replace plain namespace but keep existing nested elements and options\n                var nested = prev.nestedArray;\n                for (var i = 0; i < nested.length; ++i)\n                    object.add(nested[i]);\n                this.remove(prev);\n                if (!this.nested)\n                    this.nested = {};\n                object.setOptions(prev.options, true);\n\n            } else\n                throw Error(\"duplicate name '\" + object.name + \"' in \" + this);\n        }\n    }\n    this.nested[object.name] = object;\n\n    if (!(this instanceof Type || this instanceof Service || this instanceof Enum || this instanceof Field)) {\n        // This is a package or a root namespace.\n        if (!object._edition) {\n            // Make sure that some edition is set if it hasn't already been specified.\n            object._edition = object._defaultEdition;\n        }\n    }\n\n    this._needsRecursiveFeatureResolution = true;\n    this._needsRecursiveResolve = true;\n\n    // Also clear parent caches, since they need to recurse down.\n    var parent = this;\n    while(parent = parent.parent) {\n        parent._needsRecursiveFeatureResolution = true;\n        parent._needsRecursiveResolve = true;\n    }\n\n    object.onAdd(this);\n    return clearCache(this);\n};\n\n/**\n * Removes a nested object from this namespace.\n * @param {ReflectionObject} object Nested object to remove\n * @returns {Namespace} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If `object` is not a member of this namespace\n */\nNamespace.prototype.remove = function remove(object) {\n\n    if (!(object instanceof ReflectionObject))\n        throw TypeError(\"object must be a ReflectionObject\");\n    if (object.parent !== this)\n        throw Error(object + \" is not a member of \" + this);\n\n    delete this.nested[object.name];\n    if (!Object.keys(this.nested).length)\n        this.nested = undefined;\n\n    object.onRemove(this);\n    return clearCache(this);\n};\n\n/**\n * Defines additial namespaces within this one if not yet existing.\n * @param {string|string[]} path Path to create\n * @param {*} [json] Nested types to create from JSON\n * @returns {Namespace} Pointer to the last namespace created or `this` if path is empty\n */\nNamespace.prototype.define = function define(path, json) {\n\n    if (util.isString(path))\n        path = path.split(\".\");\n    else if (!Array.isArray(path))\n        throw TypeError(\"illegal path\");\n    if (path && path.length && path[0] === \"\")\n        throw Error(\"path must be relative\");\n    if (path.length > util.recursionLimit)\n        throw Error(\"max depth exceeded\");\n\n    var ptr = this;\n    while (path.length > 0) {\n        var part = path.shift();\n        if (ptr.nested && ptr.nested[part]) {\n            ptr = ptr.nested[part];\n            if (!(ptr instanceof Namespace))\n                throw Error(\"path conflicts with non-namespace objects\");\n        } else\n            ptr.add(ptr = new Namespace(part));\n    }\n    if (json)\n        ptr.addJSON(json);\n    return ptr;\n};\n\n/**\n * Resolves this namespace's and all its nested objects' type references. Useful to validate a reflection tree, but comes at a cost.\n * @returns {Namespace} `this`\n */\nNamespace.prototype.resolveAll = function resolveAll() {\n    if (!this._needsRecursiveResolve) return this;\n\n    this._resolveFeaturesRecursive(this._edition);\n\n    var nested = this.nestedArray, i = 0;\n    this.resolve();\n    while (i < nested.length)\n        if (nested[i] instanceof Namespace)\n            nested[i++].resolveAll();\n        else\n            nested[i++].resolve();\n    this._needsRecursiveResolve = false;\n    return this;\n};\n\n/**\n * @override\n */\nNamespace.prototype._resolveFeaturesRecursive = function _resolveFeaturesRecursive(edition) {\n    if (!this._needsRecursiveFeatureResolution) return this;\n    this._needsRecursiveFeatureResolution = false;\n\n    edition = this._edition || edition;\n\n    ReflectionObject.prototype._resolveFeaturesRecursive.call(this, edition);\n    this.nestedArray.forEach(nested => {\n        nested._resolveFeaturesRecursive(edition);\n    });\n    return this;\n};\n\n/**\n * Recursively looks up the reflection object matching the specified path in the scope of this namespace.\n * @param {string|string[]} path Path to look up\n * @param {*|Array.<*>} filterTypes Filter types, any combination of the constructors of `protobuf.Type`, `protobuf.Enum`, `protobuf.Service` etc.\n * @param {boolean} [parentAlreadyChecked=false] If known, whether the parent has already been checked\n * @returns {ReflectionObject|null} Looked up object or `null` if none could be found\n */\nNamespace.prototype.lookup = function lookup(path, filterTypes, parentAlreadyChecked) {\n    /* istanbul ignore next */\n    if (typeof filterTypes === \"boolean\") {\n        parentAlreadyChecked = filterTypes;\n        filterTypes = undefined;\n    } else if (filterTypes && !Array.isArray(filterTypes))\n        filterTypes = [ filterTypes ];\n\n    if (util.isString(path) && path.length) {\n        if (path === \".\")\n            return this.root;\n        path = path.split(\".\");\n    } else if (!path.length)\n        return this;\n\n    var flatPath = path.join(\".\");\n\n    // Start at root if path is absolute\n    if (path[0] === \"\")\n        return this.root.lookup(path.slice(1), filterTypes);\n\n    // Early bailout for objects with matching absolute paths\n    var found = this.root._fullyQualifiedObjects && this.root._fullyQualifiedObjects[\".\" + flatPath];\n    if (found && (!filterTypes || filterTypes.indexOf(found.constructor) > -1)) {\n        return found;\n    }\n\n    // Do a regular lookup at this namespace and below\n    found = this._lookupImpl(path, flatPath);\n    if (found && (!filterTypes || filterTypes.indexOf(found.constructor) > -1)) {\n        return found;\n    }\n\n    if (parentAlreadyChecked)\n        return null;\n\n    // If there hasn't been a match, walk up the tree and look more broadly\n    var current = this;\n    while (current.parent) {\n        found = current.parent._lookupImpl(path, flatPath);\n        if (found && (!filterTypes || filterTypes.indexOf(found.constructor) > -1)) {\n            return found;\n        }\n        current = current.parent;\n    }\n    return null;\n};\n\n/**\n * Internal helper for lookup that handles searching just at this namespace and below along with caching.\n * @param {string[]} path Path to look up\n * @param {string} flatPath Flattened version of the path to use as a cache key\n * @returns {ReflectionObject|null} Looked up object or `null` if none could be found\n * @private\n */\nNamespace.prototype._lookupImpl = function lookup(path, flatPath) {\n    if(Object.prototype.hasOwnProperty.call(this._lookupCache, flatPath)) {\n        return this._lookupCache[flatPath];\n    }\n\n    // Test if the first part matches any nested object, and if so, traverse if path contains more\n    var found = this.get(path[0]);\n    var exact = null;\n    if (found) {\n        if (path.length === 1) {\n            exact = found;\n        } else if (found instanceof Namespace) {\n            path = path.slice(1);\n            exact = found._lookupImpl(path, path.join(\".\"));\n        }\n\n    // Otherwise try each nested namespace\n    } else {\n        for (var i = 0; i < this.nestedArray.length; ++i)\n            if (this._nestedArray[i] instanceof Namespace && (found = this._nestedArray[i]._lookupImpl(path, flatPath))) {\n                exact = found;\n                break;\n            }\n    }\n\n    // Set this even when null, so that when we walk up the tree we can quickly bail on repeated checks back down.\n    this._lookupCache[flatPath] = exact;\n    return exact;\n};\n\n/**\n * Looks up the reflection object at the specified path, relative to this namespace.\n * @name NamespaceBase#lookup\n * @function\n * @param {string|string[]} path Path to look up\n * @param {boolean} [parentAlreadyChecked=false] Whether the parent has already been checked\n * @returns {ReflectionObject|null} Looked up object or `null` if none could be found\n * @variation 2\n */\n// lookup(path: string, [parentAlreadyChecked: boolean])\n\n/**\n * Looks up the {@link Type|type} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Type} Looked up type\n * @throws {Error} If `path` does not point to a type\n */\nNamespace.prototype.lookupType = function lookupType(path) {\n    var found = this.lookup(path, [ Type ]);\n    if (!found)\n        throw Error(\"no such type: \" + path);\n    return found;\n};\n\n/**\n * Looks up the values of the {@link Enum|enum} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Enum} Looked up enum\n * @throws {Error} If `path` does not point to an enum\n */\nNamespace.prototype.lookupEnum = function lookupEnum(path) {\n    var found = this.lookup(path, [ Enum ]);\n    if (!found)\n        throw Error(\"no such Enum '\" + path + \"' in \" + this);\n    return found;\n};\n\n/**\n * Looks up the {@link Type|type} or {@link Enum|enum} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Type} Looked up type or enum\n * @throws {Error} If `path` does not point to a type or enum\n */\nNamespace.prototype.lookupTypeOrEnum = function lookupTypeOrEnum(path) {\n    var found = this.lookup(path, [ Type, Enum ]);\n    if (!found)\n        throw Error(\"no such Type or Enum '\" + path + \"' in \" + this);\n    return found;\n};\n\n/**\n * Looks up the {@link Service|service} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Service} Looked up service\n * @throws {Error} If `path` does not point to a service\n */\nNamespace.prototype.lookupService = function lookupService(path) {\n    var found = this.lookup(path, [ Service ]);\n    if (!found)\n        throw Error(\"no such Service '\" + path + \"' in \" + this);\n    return found;\n};\n\n// Sets up cyclic dependencies (called in index-light)\nNamespace._configure = function(Type_, Service_, Enum_) {\n    Type    = Type_;\n    Service = Service_;\n    Enum    = Enum_;\n};\n","\"use strict\";\nmodule.exports = MapField;\n\n// extends Field\nvar Field = require(\"./field\");\n((MapField.prototype = Object.create(Field.prototype)).constructor = MapField).className = \"MapField\";\n\nvar types   = require(\"./types\"),\n    util    = require(\"./util\");\n\n/**\n * Constructs a new map field instance.\n * @classdesc Reflected map field.\n * @extends FieldBase\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {number} id Unique id within its namespace\n * @param {string} keyType Key type\n * @param {string} type Value type\n * @param {Object.<string,*>} [options] Declared options\n * @param {string} [comment] Comment associated with this field\n */\nfunction MapField(name, id, keyType, type, options, comment) {\n    Field.call(this, name, id, type, undefined, undefined, options, comment);\n\n    /* istanbul ignore if */\n    if (!util.isString(keyType))\n        throw TypeError(\"keyType must be a string\");\n\n    /**\n     * Key type.\n     * @type {string}\n     */\n    this.keyType = keyType; // toJSON, marker\n\n    /**\n     * Resolved key type if not a basic type.\n     * @type {ReflectionObject|null}\n     */\n    this.resolvedKeyType = null;\n\n    // Overrides Field#map\n    this.map = true;\n}\n\n/**\n * Map field descriptor.\n * @interface IMapField\n * @extends {IField}\n * @property {string} keyType Key type\n */\n\n/**\n * Extension map field descriptor.\n * @interface IExtensionMapField\n * @extends IMapField\n * @property {string} extend Extended type\n */\n\n/**\n * Constructs a map field from a map field descriptor.\n * @param {string} name Field name\n * @param {IMapField} json Map field descriptor\n * @returns {MapField} Created map field\n * @throws {TypeError} If arguments are invalid\n */\nMapField.fromJSON = function fromJSON(name, json) {\n    return new MapField(name, json.id, json.keyType, json.type, json.options, json.comment);\n};\n\n/**\n * Converts this map field to a map field descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IMapField} Map field descriptor\n */\nMapField.prototype.toJSON = function toJSON(toJSONOptions) {\n    var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n    return util.toObject([\n        \"keyType\" , this.keyType,\n        \"type\"    , this.type,\n        \"id\"      , this.id,\n        \"extend\"  , this.extend,\n        \"options\" , this.options,\n        \"comment\" , keepComments ? this.comment : undefined\n    ]);\n};\n\n/**\n * @override\n */\nMapField.prototype.resolve = function resolve() {\n    if (this.resolved)\n        return this;\n\n    // Besides a value type, map fields have a key type that may be \"any scalar type except for floating point types and bytes\"\n    if (types.mapKey[this.keyType] === undefined)\n        throw Error(\"invalid key type: \" + this.keyType);\n\n    return Field.prototype.resolve.call(this);\n};\n\n/**\n * Map field decorator (TypeScript).\n * @name MapField.d\n * @function\n * @param {number} fieldId Field id\n * @param {\"int32\"|\"uint32\"|\"sint32\"|\"fixed32\"|\"sfixed32\"|\"int64\"|\"uint64\"|\"sint64\"|\"fixed64\"|\"sfixed64\"|\"bool\"|\"string\"} fieldKeyType Field key type\n * @param {\"double\"|\"float\"|\"int32\"|\"uint32\"|\"sint32\"|\"fixed32\"|\"sfixed32\"|\"int64\"|\"uint64\"|\"sint64\"|\"fixed64\"|\"sfixed64\"|\"bool\"|\"string\"|\"bytes\"|Object|Constructor<{}>} fieldValueType Field value type\n * @returns {FieldDecorator} Decorator function\n * @template T extends { [key: string]: number | Long | string | boolean | Uint8Array | Buffer | number[] | Message<{}> }\n */\nMapField.d = function decorateMapField(fieldId, fieldKeyType, fieldValueType) {\n\n    // submessage value: decorate the submessage and use its name as the type\n    if (typeof fieldValueType === \"function\")\n        fieldValueType = util.decorateType(fieldValueType).name;\n\n    // enum reference value: create a reflected copy of the enum and keep reuseing it\n    else if (fieldValueType && typeof fieldValueType === \"object\")\n        fieldValueType = util.decorateEnum(fieldValueType).name;\n\n    return function mapFieldDecorator(prototype, fieldName) {\n        util.decorateType(prototype.constructor)\n            .add(new MapField(fieldName, fieldId, fieldKeyType, fieldValueType));\n    };\n};\n","\"use strict\";\nmodule.exports = Method;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Method.prototype = Object.create(ReflectionObject.prototype)).constructor = Method).className = \"Method\";\n\nvar util = require(\"./util\");\n\n/**\n * Constructs a new service method instance.\n * @classdesc Reflected service method.\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Method name\n * @param {string|undefined} type Method type, usually `\"rpc\"`\n * @param {string} requestType Request message type\n * @param {string} responseType Response message type\n * @param {boolean|Object.<string,*>} [requestStream] Whether the request is streamed\n * @param {boolean|Object.<string,*>} [responseStream] Whether the response is streamed\n * @param {Object.<string,*>} [options] Declared options\n * @param {string} [comment] The comment for this method\n * @param {Object.<string,*>} [parsedOptions] Declared options, properly parsed into an object\n */\nfunction Method(name, type, requestType, responseType, requestStream, responseStream, options, comment, parsedOptions) {\n\n    /* istanbul ignore next */\n    if (util.isObject(requestStream)) {\n        options = requestStream;\n        requestStream = responseStream = undefined;\n    } else if (util.isObject(responseStream)) {\n        options = responseStream;\n        responseStream = undefined;\n    }\n\n    /* istanbul ignore if */\n    if (!(type === undefined || util.isString(type)))\n        throw TypeError(\"type must be a string\");\n\n    /* istanbul ignore if */\n    if (!util.isString(requestType))\n        throw TypeError(\"requestType must be a string\");\n\n    /* istanbul ignore if */\n    if (!util.isString(responseType))\n        throw TypeError(\"responseType must be a string\");\n\n    ReflectionObject.call(this, name, options);\n\n    /**\n     * Method type.\n     * @type {string}\n     */\n    this.type = type || \"rpc\"; // toJSON\n\n    /**\n     * Request type.\n     * @type {string}\n     */\n    this.requestType = requestType; // toJSON, marker\n\n    /**\n     * Whether requests are streamed or not.\n     * @type {boolean|undefined}\n     */\n    this.requestStream = requestStream ? true : undefined; // toJSON\n\n    /**\n     * Response type.\n     * @type {string}\n     */\n    this.responseType = responseType; // toJSON\n\n    /**\n     * Whether responses are streamed or not.\n     * @type {boolean|undefined}\n     */\n    this.responseStream = responseStream ? true : undefined; // toJSON\n\n    /**\n     * Resolved request type.\n     * @type {Type|null}\n     */\n    this.resolvedRequestType = null;\n\n    /**\n     * Resolved response type.\n     * @type {Type|null}\n     */\n    this.resolvedResponseType = null;\n\n    /**\n     * Comment for this method\n     * @type {string|null}\n     */\n    this.comment = comment;\n\n    /**\n     * Options properly parsed into an object\n     */\n    this.parsedOptions = parsedOptions;\n}\n\n/**\n * Method descriptor.\n * @interface IMethod\n * @property {string} [type=\"rpc\"] Method type\n * @property {string} requestType Request type\n * @property {string} responseType Response type\n * @property {boolean} [requestStream=false] Whether requests are streamed\n * @property {boolean} [responseStream=false] Whether responses are streamed\n * @property {Object.<string,*>} [options] Method options\n * @property {string} comment Method comments\n * @property {Object.<string,*>} [parsedOptions] Method options properly parsed into an object\n */\n\n/**\n * Constructs a method from a method descriptor.\n * @param {string} name Method name\n * @param {IMethod} json Method descriptor\n * @returns {Method} Created method\n * @throws {TypeError} If arguments are invalid\n */\nMethod.fromJSON = function fromJSON(name, json) {\n    return new Method(name, json.type, json.requestType, json.responseType, json.requestStream, json.responseStream, json.options, json.comment, json.parsedOptions);\n};\n\n/**\n * Converts this method to a method descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IMethod} Method descriptor\n */\nMethod.prototype.toJSON = function toJSON(toJSONOptions) {\n    var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n    return util.toObject([\n        \"type\"           , this.type !== \"rpc\" && /* istanbul ignore next */ this.type || undefined,\n        \"requestType\"    , this.requestType,\n        \"requestStream\"  , this.requestStream,\n        \"responseType\"   , this.responseType,\n        \"responseStream\" , this.responseStream,\n        \"options\"        , this.options,\n        \"comment\"        , keepComments ? this.comment : undefined,\n        \"parsedOptions\"  , this.parsedOptions,\n    ]);\n};\n\n/**\n * @override\n */\nMethod.prototype.resolve = function resolve() {\n\n    /* istanbul ignore if */\n    if (this.resolved)\n        return this;\n\n    this.resolvedRequestType = this.parent.lookupType(this.requestType);\n    this.resolvedResponseType = this.parent.lookupType(this.responseType);\n\n    return ReflectionObject.prototype.resolve.call(this);\n};\n","\"use strict\";\nmodule.exports = Service;\n\n// extends Namespace\nvar Namespace = require(\"./namespace\");\n((Service.prototype = Object.create(Namespace.prototype)).constructor = Service).className = \"Service\";\n\nvar Method = require(\"./method\"),\n    util   = require(\"./util\"),\n    rpc    = require(\"./rpc\");\n\n/**\n * Constructs a new service instance.\n * @classdesc Reflected service.\n * @extends NamespaceBase\n * @constructor\n * @param {string} name Service name\n * @param {Object.<string,*>} [options] Service options\n * @throws {TypeError} If arguments are invalid\n */\nfunction Service(name, options) {\n    Namespace.call(this, name, options);\n\n    /**\n     * Service methods.\n     * @type {Object.<string,Method>}\n     */\n    this.methods = {}; // toJSON, marker\n\n    /**\n     * Cached methods as an array.\n     * @type {Method[]|null}\n     * @private\n     */\n    this._methodsArray = null;\n}\n\n/**\n * Service descriptor.\n * @interface IService\n * @extends INamespace\n * @property {Object.<string,IMethod>} methods Method descriptors\n */\n\n/**\n * Constructs a service from a service descriptor.\n * @param {string} name Service name\n * @param {IService} json Service descriptor\n * @param {number} [depth] Current nesting depth, defaults to `0`\n * @returns {Service} Created service\n * @throws {TypeError} If arguments are invalid\n */\nService.fromJSON = function fromJSON(name, json, depth) {\n    depth = util.checkDepth(depth);\n    var service = new Service(name, json.options);\n    /* istanbul ignore else */\n    if (json.methods)\n        for (var names = Object.keys(json.methods), i = 0; i < names.length; ++i)\n            service.add(Method.fromJSON(names[i], json.methods[names[i]]));\n    if (json.nested)\n        service.addJSON(json.nested, depth);\n    if (json.edition)\n        service._edition = json.edition;\n    service.comment = json.comment;\n    service._defaultEdition = \"proto3\";  // For backwards-compatibility.\n    return service;\n};\n\n/**\n * Converts this service to a service descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IService} Service descriptor\n */\nService.prototype.toJSON = function toJSON(toJSONOptions) {\n    var inherited = Namespace.prototype.toJSON.call(this, toJSONOptions);\n    var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n    return util.toObject([\n        \"edition\" , this._editionToJSON(),\n        \"options\" , inherited && inherited.options || undefined,\n        \"methods\" , Namespace.arrayToJSON(this.methodsArray, toJSONOptions) || /* istanbul ignore next */ {},\n        \"nested\"  , inherited && inherited.nested || undefined,\n        \"comment\" , keepComments ? this.comment : undefined\n    ]);\n};\n\n/**\n * Methods of this service as an array for iteration.\n * @name Service#methodsArray\n * @type {Method[]}\n * @readonly\n */\nObject.defineProperty(Service.prototype, \"methodsArray\", {\n    get: function() {\n        return this._methodsArray || (this._methodsArray = util.toArray(this.methods));\n    }\n});\n\nfunction clearCache(service) {\n    service._methodsArray = null;\n    return service;\n}\n\n/**\n * @override\n */\nService.prototype.get = function get(name) {\n    return Object.prototype.hasOwnProperty.call(this.methods, name)\n        ? this.methods[name]\n        : Namespace.prototype.get.call(this, name);\n};\n\n/**\n * @override\n */\nService.prototype.resolveAll = function resolveAll() {\n    if (!this._needsRecursiveResolve) return this;\n\n    Namespace.prototype.resolve.call(this);\n    var methods = this.methodsArray;\n    for (var i = 0; i < methods.length; ++i)\n        methods[i].resolve();\n    return this;\n};\n\n/**\n * @override\n */\nService.prototype._resolveFeaturesRecursive = function _resolveFeaturesRecursive(edition) {\n    if (!this._needsRecursiveFeatureResolution) return this;\n\n    edition = this._edition || edition;\n\n    Namespace.prototype._resolveFeaturesRecursive.call(this, edition);\n    this.methodsArray.forEach(method => {\n        method._resolveFeaturesRecursive(edition);\n    });\n    return this;\n};\n\n/**\n * @override\n */\nService.prototype.add = function add(object) {\n    /* istanbul ignore if */\n    if (this.get(object.name))\n        throw Error(\"duplicate name '\" + object.name + \"' in \" + this);\n\n    if (object instanceof Method) {\n        if (object.name === \"__proto__\")\n            return this;\n        this.methods[object.name] = object;\n        object.parent = this;\n        return clearCache(this);\n    }\n    return Namespace.prototype.add.call(this, object);\n};\n\n/**\n * @override\n */\nService.prototype.remove = function remove(object) {\n    if (object instanceof Method) {\n\n        /* istanbul ignore if */\n        if (this.methods[object.name] !== object)\n            throw Error(object + \" is not a member of \" + this);\n\n        delete this.methods[object.name];\n        object.parent = null;\n        return clearCache(this);\n    }\n    return Namespace.prototype.remove.call(this, object);\n};\n\n/**\n * Creates a runtime service using the specified rpc implementation.\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n * @returns {rpc.Service} RPC service. Useful where requests and/or responses are streamed.\n */\nService.prototype.create = function create(rpcImpl, requestDelimited, responseDelimited) {\n    var rpcService = new rpc.Service(rpcImpl, requestDelimited, responseDelimited);\n    for (var i = 0, method; i < /* initializes */ this.methodsArray.length; ++i) {\n        var methodName = util.lcFirst((method = this._methodsArray[i]).resolve().name).replace(/[^$\\w_]/g, \"\");\n        rpcService[methodName] = (function(method, requestType, responseType) {\n            return function rpcMethod(request, callback) {\n                return rpc.Service.prototype.rpcCall.call(this, method, requestType, responseType, request, callback);\n            };\n        })(method, method.resolvedRequestType.ctor, method.resolvedResponseType.ctor);\n    }\n    return rpcService;\n};\n","\"use strict\";\nmodule.exports = Message;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new message instance.\n * @classdesc Abstract runtime message.\n * @constructor\n * @param {Properties<T>} [properties] Properties to set\n * @template T extends object = object\n */\nfunction Message(properties) {\n    // not used internally\n    if (properties)\n        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) {\n            var key = keys[i];\n            if (key === \"__proto__\")\n                continue;\n            this[key] = properties[key];\n        }\n}\n\n/**\n * Reference to the reflected type.\n * @name Message.$type\n * @type {Type}\n * @readonly\n */\n\n/**\n * Reference to the reflected type.\n * @name Message#$type\n * @type {Type}\n * @readonly\n */\n\n/*eslint-disable valid-jsdoc*/\n\n/**\n * Creates a new message of this type using the specified properties.\n * @param {Object.<string,*>} [properties] Properties to set\n * @returns {Message<T>} Message instance\n * @template T extends Message<T>\n * @this Constructor<T>\n */\nMessage.create = function create(properties) {\n    return this.$type.create(properties);\n};\n\n/**\n * Encodes a message of this type.\n * @param {T|Object.<string,*>} message Message to encode\n * @param {Writer} [writer] Writer to use\n * @returns {Writer} Writer\n * @template T extends Message<T>\n * @this Constructor<T>\n */\nMessage.encode = function encode(message, writer) {\n    return this.$type.encode(message, writer);\n};\n\n/**\n * Encodes a message of this type preceeded by its length as a varint.\n * @param {T|Object.<string,*>} message Message to encode\n * @param {Writer} [writer] Writer to use\n * @returns {Writer} Writer\n * @template T extends Message<T>\n * @this Constructor<T>\n */\nMessage.encodeDelimited = function encodeDelimited(message, writer) {\n    return this.$type.encodeDelimited(message, writer);\n};\n\n/**\n * Decodes a message of this type.\n * @name Message.decode\n * @function\n * @param {Reader|Uint8Array} reader Reader or buffer to decode\n * @returns {T} Decoded message\n * @template T extends Message<T>\n * @this Constructor<T>\n */\nMessage.decode = function decode(reader) {\n    return this.$type.decode(reader);\n};\n\n/**\n * Decodes a message of this type preceeded by its length as a varint.\n * @name Message.decodeDelimited\n * @function\n * @param {Reader|Uint8Array} reader Reader or buffer to decode\n * @returns {T} Decoded message\n * @template T extends Message<T>\n * @this Constructor<T>\n */\nMessage.decodeDelimited = function decodeDelimited(reader) {\n    return this.$type.decodeDelimited(reader);\n};\n\n/**\n * Verifies a message of this type.\n * @name Message.verify\n * @function\n * @param {Object.<string,*>} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\nMessage.verify = function verify(message) {\n    return this.$type.verify(message);\n};\n\n/**\n * Creates a new message of this type from a plain object. Also converts values to their respective internal types.\n * @param {Object.<string,*>} object Plain object\n * @returns {T} Message instance\n * @template T extends Message<T>\n * @this Constructor<T>\n */\nMessage.fromObject = function fromObject(object) {\n    return this.$type.fromObject(object);\n};\n\n/**\n * Creates a plain object from a message of this type. Also converts values to other types if specified.\n * @param {T} message Message instance\n * @param {IConversionOptions} [options] Conversion options\n * @returns {Object.<string,*>} Plain object\n * @template T extends Message<T>\n * @this Constructor<T>\n */\nMessage.toObject = function toObject(message, options) {\n    return this.$type.toObject(message, options);\n};\n\n/**\n * Converts this message to JSON.\n * @returns {Object.<string,*>} JSON object\n */\nMessage.prototype.toJSON = function toJSON() {\n    return this.$type.toObject(this, util.toJSONOptions);\n};\n\n/*eslint-enable valid-jsdoc*/\n","\"use strict\";\nmodule.exports = decoder;\n\nvar Enum    = require(\"./enum\"),\n    types   = require(\"./types\"),\n    util    = require(\"./util\");\n\nfunction missing(field) {\n    return \"missing required '\" + field.name + \"'\";\n}\n\n/**\n * Generates a decoder specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nfunction decoder(mtype) {\n    /* eslint-disable no-unexpected-multiline */\n    var gen = util.codegen([\"r\", \"l\", \"e\", \"n\"], mtype.name + \"$decode\")\n    (\"if(!(r instanceof Reader))\")\n        (\"r=Reader.create(r)\")\n    (\"if(n===undefined)n=0\")\n    (\"if(n>Reader.recursionLimit)\")\n        (\"throw Error(\\\"maximum nesting depth exceeded\\\")\")\n    (\"var c=l===undefined?r.len:r.pos+l,m=new this.ctor\" + (mtype.fieldsArray.filter(function(field) { return field.map; }).length ? \",k,value\" : \"\"))\n    (\"while(r.pos<c){\")\n        (\"var t=r.uint32()\")\n        (\"if(t===e)\")\n            (\"break\")\n        (\"switch(t>>>3){\");\n\n    var i = 0;\n    for (; i < /* initializes */ mtype.fieldsArray.length; ++i) {\n        var field = mtype._fieldsArray[i].resolve(),\n            type  = field.resolvedType instanceof Enum ? \"int32\" : field.type,\n            ref   = \"m\" + util.safeProp(field.name); gen\n            (\"case %i: {\", field.id);\n\n        // Map fields\n        if (field.map) { gen\n                (\"if(%s===util.emptyObject)\", ref)\n                    (\"%s={}\", ref)\n                (\"var c2 = r.uint32()+r.pos\");\n\n            if (types.defaults[field.keyType] !== undefined) gen\n                (\"k=%j\", types.defaults[field.keyType]);\n            else gen\n                (\"k=null\");\n\n            if (types.defaults[type] !== undefined) gen\n                (\"value=%j\", types.defaults[type]);\n            else gen\n                (\"value=null\");\n\n            gen\n                (\"while(r.pos<c2){\")\n                    (\"var tag2=r.uint32()\")\n                    (\"switch(tag2>>>3){\")\n                        (\"case 1: k=r.%s(); break\", field.keyType)\n                        (\"case 2:\");\n\n            if (types.basic[type] === undefined) gen\n                            (\"value=types[%i].decode(r,r.uint32(),undefined,n+1)\", i); // can't be groups\n            else gen\n                            (\"value=r.%s()\", type);\n\n            gen\n                            (\"break\")\n                        (\"default:\")\n                            (\"r.skipType(tag2&7,n)\")\n                            (\"break\")\n                    (\"}\")\n                (\"}\");\n\n            if (types.long[field.keyType] !== undefined) gen\n                (\"%s[typeof k===\\\"object\\\"?util.longToHash(k):k]=value\", ref);\n            else {\n                if (field.keyType === \"string\") gen\n                (\"if(k===\\\"__proto__\\\")\")\n                    (\"util.makeProp(%s,k)\", ref);\n                gen\n                (\"%s[k]=value\", ref);\n            }\n\n        // Repeated fields\n        } else if (field.repeated) { gen\n\n                (\"if(!(%s&&%s.length))\", ref, ref)\n                    (\"%s=[]\", ref);\n\n            // Packable (always check for forward and backward compatiblity)\n            if (types.packed[type] !== undefined) gen\n                (\"if((t&7)===2){\")\n                    (\"var c2=r.uint32()+r.pos\")\n                    (\"while(r.pos<c2)\")\n                        (\"%s.push(r.%s())\", ref, type)\n                (\"}else\");\n\n            // Non-packed\n            if (types.basic[type] === undefined) gen(field.delimited\n                    ? \"%s.push(types[%i].decode(r,undefined,((t&~7)|4),n+1))\"\n                    : \"%s.push(types[%i].decode(r,r.uint32(),undefined,n+1))\", ref, i);\n            else gen\n                    (\"%s.push(r.%s())\", ref, type);\n\n        // Non-repeated\n        } else if (types.basic[type] === undefined) gen(field.delimited\n                ? \"%s=types[%i].decode(r,undefined,((t&~7)|4),n+1)\"\n                : \"%s=types[%i].decode(r,r.uint32(),undefined,n+1)\", ref, i);\n        else gen\n                (\"%s=r.%s()\", ref, type);\n        gen\n                (\"break\")\n            (\"}\");\n        // Unknown fields\n    } gen\n            (\"default:\")\n                (\"r.skipType(t&7,n)\")\n                (\"break\")\n\n        (\"}\")\n    (\"}\");\n\n    // Field presence\n    for (i = 0; i < mtype._fieldsArray.length; ++i) {\n        var rfield = mtype._fieldsArray[i];\n        if (rfield.required) gen\n            (\"if(!Object.hasOwnProperty.call(m,%j))\", rfield.name)\n        (\"throw util.ProtocolError(%j,{instance:m})\", missing(rfield));\n    }\n\n    return gen\n    (\"return m\");\n    /* eslint-enable no-unexpected-multiline */\n}\n","\"use strict\";\nmodule.exports = verifier;\n\nvar Enum      = require(\"./enum\"),\n    util      = require(\"./util\");\n\nfunction invalid(field, expected) {\n    return field.name + \": \" + expected + (field.repeated && expected !== \"array\" ? \"[]\" : field.map && expected !== \"object\" ? \"{k:\"+field.keyType+\"}\" : \"\") + \" expected\";\n}\n\n/**\n * Generates a partial value verifier.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {number} fieldIndex Field index\n * @param {string} ref Variable reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genVerifyValue(gen, field, fieldIndex, ref) {\n    /* eslint-disable no-unexpected-multiline */\n    if (field.resolvedType) {\n        if (field.resolvedType instanceof Enum) { gen\n            (\"switch(%s){\", ref)\n                (\"default:\")\n                    (\"return%j\", invalid(field, \"enum value\"));\n            for (var keys = Object.keys(field.resolvedType.values), j = 0; j < keys.length; ++j) gen\n                (\"case %i:\", field.resolvedType.values[keys[j]]);\n            gen\n                    (\"break\")\n            (\"}\");\n        } else {\n            gen\n            (\"{\")\n                (\"var e=types[%i].verify(%s,n+1);\", fieldIndex, ref)\n                (\"if(e)\")\n                    (\"return%j+e\", field.name + \".\")\n            (\"}\");\n        }\n    } else {\n        switch (field.type) {\n            case \"int32\":\n            case \"uint32\":\n            case \"sint32\":\n            case \"fixed32\":\n            case \"sfixed32\": gen\n                (\"if(!util.isInteger(%s))\", ref)\n                    (\"return%j\", invalid(field, \"integer\"));\n                break;\n            case \"int64\":\n            case \"uint64\":\n            case \"sint64\":\n            case \"fixed64\":\n            case \"sfixed64\": gen\n                (\"if(!util.isInteger(%s)&&!(%s&&util.isInteger(%s.low)&&util.isInteger(%s.high)))\", ref, ref, ref, ref)\n                    (\"return%j\", invalid(field, \"integer|Long\"));\n                break;\n            case \"float\":\n            case \"double\": gen\n                (\"if(typeof %s!==\\\"number\\\")\", ref)\n                    (\"return%j\", invalid(field, \"number\"));\n                break;\n            case \"bool\": gen\n                (\"if(typeof %s!==\\\"boolean\\\")\", ref)\n                    (\"return%j\", invalid(field, \"boolean\"));\n                break;\n            case \"string\": gen\n                (\"if(!util.isString(%s))\", ref)\n                    (\"return%j\", invalid(field, \"string\"));\n                break;\n            case \"bytes\": gen\n                (\"if(!(%s&&typeof %s.length===\\\"number\\\"||util.isString(%s)))\", ref, ref, ref)\n                    (\"return%j\", invalid(field, \"buffer\"));\n                break;\n        }\n    }\n    return gen;\n    /* eslint-enable no-unexpected-multiline */\n}\n\n/**\n * Generates a partial key verifier.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {string} ref Variable reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genVerifyKey(gen, field, ref) {\n    /* eslint-disable no-unexpected-multiline */\n    switch (field.keyType) {\n        case \"int32\":\n        case \"uint32\":\n        case \"sint32\":\n        case \"fixed32\":\n        case \"sfixed32\": gen\n            (\"if(!util.key32Re.test(%s))\", ref)\n                (\"return%j\", invalid(field, \"integer key\"));\n            break;\n        case \"int64\":\n        case \"uint64\":\n        case \"sint64\":\n        case \"fixed64\":\n        case \"sfixed64\": gen\n            (\"if(!util.key64Re.test(%s))\", ref) // see comment above: x is ok, d is not\n                (\"return%j\", invalid(field, \"integer|Long key\"));\n            break;\n        case \"bool\": gen\n            (\"if(!util.key2Re.test(%s))\", ref)\n                (\"return%j\", invalid(field, \"boolean key\"));\n            break;\n    }\n    return gen;\n    /* eslint-enable no-unexpected-multiline */\n}\n\n/**\n * Generates a verifier specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nfunction verifier(mtype) {\n    /* eslint-disable no-unexpected-multiline */\n\n    var gen = util.codegen([\"m\", \"n\"], mtype.name + \"$verify\")\n    (\"if(typeof m!==\\\"object\\\"||m===null)\")\n        (\"return%j\", \"object expected\")\n    (\"if(n===undefined)n=0\")\n    (\"if(n>util.recursionLimit)\")\n        (\"return%j\", \"maximum nesting depth exceeded\");\n    var oneofs = mtype.oneofsArray,\n        seenFirstField = {};\n    if (oneofs.length) gen\n    (\"var p={}\");\n\n    for (var i = 0; i < /* initializes */ mtype.fieldsArray.length; ++i) {\n        var field = mtype._fieldsArray[i].resolve(),\n            ref   = \"m\" + util.safeProp(field.name);\n\n        if (field.optional) gen\n        (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j)){\", ref, field.name); // !== undefined && !== null\n\n        // map fields\n        if (field.map) { gen\n            (\"if(!util.isObject(%s))\", ref)\n                (\"return%j\", invalid(field, \"object\"))\n            (\"var k=Object.keys(%s)\", ref)\n            (\"for(var i=0;i<k.length;++i){\");\n                genVerifyKey(gen, field, \"k[i]\");\n                genVerifyValue(gen, field, i, ref + \"[k[i]]\")\n            (\"}\");\n\n        // repeated fields\n        } else if (field.repeated) { gen\n            (\"if(!Array.isArray(%s))\", ref)\n                (\"return%j\", invalid(field, \"array\"))\n            (\"for(var i=0;i<%s.length;++i){\", ref);\n                genVerifyValue(gen, field, i, ref + \"[i]\")\n            (\"}\");\n\n        // required or present fields\n        } else {\n            if (field.partOf) {\n                var oneofProp = util.safeProp(field.partOf.name);\n                if (seenFirstField[field.partOf.name] === 1) gen\n            (\"if(p%s===1)\", oneofProp)\n                (\"return%j\", field.partOf.name + \": multiple values\");\n                seenFirstField[field.partOf.name] = 1;\n                gen\n            (\"p%s=1\", oneofProp);\n            }\n            genVerifyValue(gen, field, i, ref);\n        }\n        if (field.optional) gen\n        (\"}\");\n    }\n    return gen\n    (\"return null\");\n    /* eslint-enable no-unexpected-multiline */\n}\n","\"use strict\";\n/**\n * Runtime message from/to plain object converters.\n * @namespace\n */\nvar converter = exports;\n\nvar Enum = require(\"./enum\"),\n    util = require(\"./util\");\n\n/**\n * Generates a partial value fromObject conveter.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {number} fieldIndex Field index\n * @param {string} prop Property reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genValuePartial_fromObject(gen, field, fieldIndex, prop) {\n    var defaultAlreadyEmitted = false;\n    /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n    if (field.resolvedType) {\n        if (field.resolvedType instanceof Enum) { gen\n            (\"switch(d%s){\", prop);\n            for (var values = field.resolvedType.values, keys = Object.keys(values), i = 0; i < keys.length; ++i) {\n                // enum unknown values passthrough\n                if (values[keys[i]] === field.typeDefault && !defaultAlreadyEmitted) { gen\n                    (\"default:\")\n                        (\"if(typeof(d%s)===\\\"number\\\"){m%s=d%s;break}\", prop, prop, prop);\n                    if (!field.repeated) gen // fallback to default value only for\n                                             // arrays, to avoid leaving holes.\n                        (\"break\");           // for non-repeated fields, just ignore\n                    defaultAlreadyEmitted = true;\n                }\n                gen\n                (\"case%j:\", keys[i])\n                (\"case %i:\", values[keys[i]])\n                    (\"m%s=%j\", prop, values[keys[i]])\n                    (\"break\");\n            } gen\n            (\"}\");\n        } else gen\n            (\"if(!util.isObject(d%s))\", prop)\n                (\"throw TypeError(%j)\", field.fullName + \": object expected\")\n            (\"m%s=types[%i].fromObject(d%s,n+1)\", prop, fieldIndex, prop);\n    } else {\n        var isUnsigned = false;\n        switch (field.type) {\n            case \"double\":\n            case \"float\": gen\n                (\"m%s=Number(d%s)\", prop, prop); // also catches \"NaN\", \"Infinity\"\n                break;\n            case \"uint32\":\n            case \"fixed32\": gen\n                (\"m%s=d%s>>>0\", prop, prop);\n                break;\n            case \"int32\":\n            case \"sint32\":\n            case \"sfixed32\": gen\n                (\"m%s=d%s|0\", prop, prop);\n                break;\n            case \"uint64\":\n            case \"fixed64\":\n                isUnsigned = true;\n                // eslint-disable-next-line no-fallthrough\n            case \"int64\":\n            case \"sint64\":\n            case \"sfixed64\": gen\n                (\"if(util.Long)\")\n                    (\"m%s=util.Long.fromValue(d%s,%j)\", prop, prop, isUnsigned)\n                (\"else if(typeof d%s===\\\"string\\\")\", prop)\n                    (\"m%s=parseInt(d%s,10)\", prop, prop)\n                (\"else if(typeof d%s===\\\"number\\\")\", prop)\n                    (\"m%s=d%s\", prop, prop)\n                (\"else if(typeof d%s===\\\"object\\\")\", prop)\n                    (\"m%s=new util.LongBits(d%s.low>>>0,d%s.high>>>0).toNumber(%s)\", prop, prop, prop, isUnsigned ? \"true\" : \"\");\n                break;\n            case \"bytes\": gen\n                (\"if(typeof d%s===\\\"string\\\")\", prop)\n                    (\"util.base64.decode(d%s,m%s=util.newBuffer(util.base64.length(d%s)),0)\", prop, prop, prop)\n                (\"else if(d%s.length >= 0)\", prop)\n                    (\"m%s=d%s\", prop, prop);\n                break;\n            case \"string\": gen\n                (\"m%s=String(d%s)\", prop, prop);\n                break;\n            case \"bool\": gen\n                (\"m%s=Boolean(d%s)\", prop, prop);\n                break;\n            /* default: gen\n                (\"m%s=d%s\", prop, prop);\n                break; */\n        }\n    }\n    return gen;\n    /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n}\n\n/**\n * Generates a plain object to runtime message converter specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nconverter.fromObject = function fromObject(mtype) {\n    /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n    var fields = mtype.fieldsArray;\n    var gen = util.codegen([\"d\", \"n\"], mtype.name + \"$fromObject\")\n    (\"if(d instanceof this.ctor)\")\n        (\"return d\");\n    if (!fields.length) return gen\n    (\"return new this.ctor\");\n    gen\n    (\"if(!util.isObject(d))\")\n        (\"throw TypeError(%j)\", mtype.fullName + \": object expected\")\n    (\"if(n===undefined)n=0\")\n    (\"if(n>util.recursionLimit)\")\n        (\"throw Error(\\\"maximum nesting depth exceeded\\\")\");\n    gen\n    (\"var m=new this.ctor\");\n    for (var i = 0; i < fields.length; ++i) {\n        var field  = fields[i].resolve(),\n            prop   = util.safeProp(field.name);\n\n        // Map fields\n        if (field.map) { gen\n    (\"if(d%s){\", prop)\n        (\"if(!util.isObject(d%s))\", prop)\n            (\"throw TypeError(%j)\", field.fullName + \": object expected\")\n        (\"m%s={}\", prop)\n        (\"for(var ks=Object.keys(d%s),i=0;i<ks.length;++i){\", prop);\n            gen\n        (\"if(ks[i]===\\\"__proto__\\\")\")\n            (\"util.makeProp(m%s,ks[i])\", prop);\n            genValuePartial_fromObject(gen, field, /* not sorted */ i, prop + \"[ks[i]]\")\n        (\"}\")\n    (\"}\");\n\n        // Repeated fields\n        } else if (field.repeated) { gen\n    (\"if(d%s){\", prop)\n        (\"if(!Array.isArray(d%s))\", prop)\n            (\"throw TypeError(%j)\", field.fullName + \": array expected\")\n        (\"m%s=[]\", prop)\n        (\"for(var i=0;i<d%s.length;++i){\", prop);\n            genValuePartial_fromObject(gen, field, /* not sorted */ i, prop + \"[i]\")\n        (\"}\")\n    (\"}\");\n\n        // Non-repeated fields\n        } else {\n            if (!(field.resolvedType instanceof Enum)) gen // no need to test for null/undefined if an enum (uses switch)\n    (\"if(d%s!=null){\", prop); // !== undefined && !== null\n        genValuePartial_fromObject(gen, field, /* not sorted */ i, prop);\n            if (!(field.resolvedType instanceof Enum)) gen\n    (\"}\");\n        }\n    } return gen\n    (\"return m\");\n    /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n};\n\n/**\n * Generates a partial value toObject converter.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {number} fieldIndex Field index\n * @param {string} prop Property reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genValuePartial_toObject(gen, field, fieldIndex, prop) {\n    /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n    if (field.resolvedType) {\n        if (field.resolvedType instanceof Enum) gen\n            (\"d%s=o.enums===String?(types[%i].values[m%s]===undefined?m%s:types[%i].values[m%s]):m%s\", prop, fieldIndex, prop, prop, fieldIndex, prop, prop);\n        else gen\n            (\"d%s=types[%i].toObject(m%s,o,q+1)\", prop, fieldIndex, prop);\n    } else {\n        var isUnsigned = false;\n        switch (field.type) {\n            case \"double\":\n            case \"float\": gen\n            (\"d%s=o.json&&!isFinite(m%s)?String(m%s):m%s\", prop, prop, prop, prop);\n                break;\n            case \"uint64\":\n            case \"fixed64\":\n                isUnsigned = true;\n                // eslint-disable-next-line no-fallthrough\n            case \"int64\":\n            case \"sint64\":\n            case \"sfixed64\": gen\n            (\"if(typeof BigInt!==\\\"undefined\\\"&&o.longs===BigInt)\")\n                (\"d%s=typeof m%s===\\\"number\\\"?BigInt(m%s):util.Long.fromBits(m%s.low>>>0,m%s.high>>>0,%j).toBigInt()\", prop, prop, prop, prop, prop, isUnsigned)\n            (\"else if(typeof m%s===\\\"number\\\")\", prop)\n                (\"d%s=o.longs===String?String(m%s):m%s\", prop, prop, prop)\n            (\"else\") // Long-like\n                (\"d%s=o.longs===String?util.Long.prototype.toString.call(m%s):o.longs===Number?new util.LongBits(m%s.low>>>0,m%s.high>>>0).toNumber(%s):m%s\", prop, prop, prop, prop, isUnsigned ? \"true\": \"\", prop);\n                break;\n            case \"bytes\": gen\n            (\"d%s=o.bytes===String?util.base64.encode(m%s,0,m%s.length):o.bytes===Array?Array.prototype.slice.call(m%s):m%s\", prop, prop, prop, prop, prop);\n                break;\n            default: gen\n            (\"d%s=m%s\", prop, prop);\n                break;\n        }\n    }\n    return gen;\n    /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n}\n\n/**\n * Generates a runtime message to plain object converter specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nconverter.toObject = function toObject(mtype) {\n    /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n    var fields = mtype.fieldsArray.slice().sort(util.compareFieldsById);\n    if (!fields.length)\n        return util.codegen()(\"return {}\");\n    var gen = util.codegen([\"m\", \"o\", \"q\"], mtype.name + \"$toObject\")\n    (\"if(!o)\")\n        (\"o={}\")\n    (\"if(q===undefined)q=0\")\n    (\"if(q>util.recursionLimit)\")\n        (\"throw Error(\\\"max depth exceeded\\\")\")\n    (\"var d={}\");\n\n    var repeatedFields = [],\n        mapFields = [],\n        normalFields = [],\n        i = 0;\n    for (; i < fields.length; ++i)\n        if (!fields[i].partOf)\n            ( fields[i].resolve().repeated ? repeatedFields\n            : fields[i].map ? mapFields\n            : normalFields).push(fields[i]);\n\n    if (repeatedFields.length) { gen\n    (\"if(o.arrays||o.defaults){\");\n        for (i = 0; i < repeatedFields.length; ++i) gen\n        (\"d%s=[]\", util.safeProp(repeatedFields[i].name));\n        gen\n    (\"}\");\n    }\n\n    if (mapFields.length) { gen\n    (\"if(o.objects||o.defaults){\");\n        for (i = 0; i < mapFields.length; ++i) gen\n        (\"d%s={}\", util.safeProp(mapFields[i].name));\n        gen\n    (\"}\");\n    }\n\n    if (normalFields.length) { gen\n    (\"if(o.defaults){\");\n        for (i = 0; i < normalFields.length; ++i) {\n            var field = normalFields[i],\n                prop  = util.safeProp(field.name);\n            if (field.resolvedType instanceof Enum) gen\n        (\"d%s=o.enums===String?%j:%j\", prop, field.resolvedType.valuesById[field.typeDefault], field.typeDefault);\n            else if (field.long) gen\n        (\"if(util.Long){\")\n            (\"var n=new util.Long(%i,%i,%j)\", field.typeDefault.low, field.typeDefault.high, field.typeDefault.unsigned)\n            (\"d%s=o.longs===String?n.toString():o.longs===Number?n.toNumber():typeof BigInt!==\\\"undefined\\\"&&o.longs===BigInt?n.toBigInt():n\", prop)\n        (\"}else\")\n            (\"d%s=o.longs===String?%j:typeof BigInt!==\\\"undefined\\\"&&o.longs===BigInt?BigInt(%j):%i\", prop, field.typeDefault.toString(), field.typeDefault.toString(), field.typeDefault.toNumber());\n            else if (field.bytes) {\n                var arrayDefault = Array.prototype.slice.call(field.typeDefault);\n                gen\n        (\"if(o.bytes===String)d%s=%j\", prop, String.fromCharCode.apply(String, field.typeDefault))\n        (\"else{\")\n            (\"d%s=%j\", prop, arrayDefault)\n            (\"if(o.bytes!==Array)d%s=util.newBuffer(d%s)\", prop, prop)\n        (\"}\");\n            } else gen\n        (\"d%s=%j\", prop, field.typeDefault); // also messages (=null)\n        } gen\n    (\"}\");\n    }\n    var hasKs2 = false;\n    for (i = 0; i < fields.length; ++i) {\n        var field = fields[i],\n            index = mtype._fieldsArray.indexOf(field),\n            prop  = util.safeProp(field.name);\n        if (field.map) {\n            if (!hasKs2) { hasKs2 = true; gen\n    (\"var ks2\");\n            } gen\n    (\"if(m%s&&(ks2=Object.keys(m%s)).length){\", prop, prop)\n        (\"d%s={}\", prop)\n        (\"for(var j=0;j<ks2.length;++j){\");\n            gen\n        (\"if(ks2[j]===\\\"__proto__\\\")\")\n            (\"util.makeProp(d%s,ks2[j])\", prop);\n            genValuePartial_toObject(gen, field, /* sorted */ index, prop + \"[ks2[j]]\")\n        (\"}\");\n        } else if (field.repeated) { gen\n    (\"if(m%s&&m%s.length){\", prop, prop)\n        (\"d%s=[]\", prop)\n        (\"for(var j=0;j<m%s.length;++j){\", prop);\n            genValuePartial_toObject(gen, field, /* sorted */ index, prop + \"[j]\")\n        (\"}\");\n        } else { gen\n    (\"if(m%s!=null&&Object.hasOwnProperty.call(m,%j)){\", prop, field.name); // !== undefined && !== null\n        genValuePartial_toObject(gen, field, /* sorted */ index, prop);\n        if (field.partOf) gen\n        (\"if(o.oneofs)\")\n            (\"d%s=%j\", util.safeProp(field.partOf.name), field.name);\n        }\n        gen\n    (\"}\");\n    }\n    return gen\n    (\"return d\");\n    /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n};\n","\"use strict\";\n\n/**\n * Wrappers for common types.\n * @type {Object.<string,IWrapper>}\n * @const\n */\nvar wrappers = exports;\n\nvar Message = require(\"./message\"),\n    util    = require(\"./util/minimal\");\n\n/**\n * From object converter part of an {@link IWrapper}.\n * @typedef WrapperFromObjectConverter\n * @type {function}\n * @param {Object.<string,*>} object Plain object\n * @returns {Message<{}>} Message instance\n * @this Type\n */\n\n/**\n * To object converter part of an {@link IWrapper}.\n * @typedef WrapperToObjectConverter\n * @type {function}\n * @param {Message<{}>} message Message instance\n * @param {IConversionOptions} [options] Conversion options\n * @returns {Object.<string,*>} Plain object\n * @this Type\n */\n\n/**\n * Common type wrapper part of {@link wrappers}.\n * @interface IWrapper\n * @property {WrapperFromObjectConverter} [fromObject] From object converter\n * @property {WrapperToObjectConverter} [toObject] To object converter\n */\n\n// Custom wrapper for Any\nwrappers[\".google.protobuf.Any\"] = {\n\n    fromObject: function(object, depth) {\n\n        // unwrap value type if mapped\n        if (object && object[\"@type\"]) {\n             // Only use fully qualified type name after the last '/'\n            var name = object[\"@type\"].substring(object[\"@type\"].lastIndexOf(\"/\") + 1);\n            var type = this.lookup(name);\n            /* istanbul ignore else */\n            if (type) {\n                // type_url does not accept leading \".\"\n                var type_url = object[\"@type\"].charAt(0) === \".\" ?\n                    object[\"@type\"].slice(1) : object[\"@type\"];\n                // type_url prefix is optional, but path seperator is required\n                if (type_url.indexOf(\"/\") === -1) {\n                    type_url = \"/\" + type_url;\n                }\n                return this.create({\n                    type_url: type_url,\n                    value: type.encode(type.fromObject(object, depth === undefined ? 1 : depth + 1)).finish()\n                });\n            }\n        }\n\n        return this.fromObject(object, depth);\n    },\n\n    toObject: function(message, options, depth) {\n        if (depth === undefined)\n            depth = 0;\n        if (depth > util.recursionLimit)\n            throw Error(\"max depth exceeded\");\n\n        // Default prefix\n        var googleApi = \"type.googleapis.com/\";\n        var prefix = \"\";\n        var name = \"\";\n\n        // decode value if requested and unmapped\n        if (options && options.json && message.type_url && message.value) {\n            // Only use fully qualified type name after the last '/'\n            name = message.type_url.substring(message.type_url.lastIndexOf(\"/\") + 1);\n            // Separate the prefix used\n            prefix = message.type_url.substring(0, message.type_url.lastIndexOf(\"/\") + 1);\n            var type = this.lookup(name);\n            /* istanbul ignore else */\n            if (type)\n                message = type.decode(message.value, undefined, undefined, depth + 1);\n        }\n\n        // wrap value if unmapped\n        if (!(message instanceof this.ctor) && message instanceof Message) {\n            var object = message.$type.toObject(message, options, depth + 1);\n            var messageName = message.$type.fullName[0] === \".\" ?\n                message.$type.fullName.slice(1) : message.$type.fullName;\n            // Default to type.googleapis.com prefix if no prefix is used\n            if (prefix === \"\") {\n                prefix = googleApi;\n            }\n            name = prefix + messageName;\n            object[\"@type\"] = name;\n            return object;\n        }\n\n        return this.toObject(message, options, depth);\n    }\n};\n","\"use strict\";\nmodule.exports = Type;\n\n// extends Namespace\nvar Namespace = require(\"./namespace\");\n((Type.prototype = Object.create(Namespace.prototype)).constructor = Type).className = \"Type\";\n\nvar Enum      = require(\"./enum\"),\n    OneOf     = require(\"./oneof\"),\n    Field     = require(\"./field\"),\n    MapField  = require(\"./mapfield\"),\n    Service   = require(\"./service\"),\n    Message   = require(\"./message\"),\n    Reader    = require(\"./reader\"),\n    Writer    = require(\"./writer\"),\n    util      = require(\"./util\"),\n    encoder   = require(\"./encoder\"),\n    decoder   = require(\"./decoder\"),\n    verifier  = require(\"./verifier\"),\n    converter = require(\"./converter\"),\n    wrappers  = require(\"./wrappers\");\n\n/**\n * Constructs a new reflected message type instance.\n * @classdesc Reflected message type.\n * @extends NamespaceBase\n * @constructor\n * @param {string} name Message name\n * @param {Object.<string,*>} [options] Declared options\n */\nfunction Type(name, options) {\n    name = name.replace(/\\W/g, \"\");\n    Namespace.call(this, name, options);\n\n    /**\n     * Message fields.\n     * @type {Object.<string,Field>}\n     */\n    this.fields = {};  // toJSON, marker\n\n    /**\n     * Oneofs declared within this namespace, if any.\n     * @type {Object.<string,OneOf>}\n     */\n    this.oneofs = undefined; // toJSON\n\n    /**\n     * Extension ranges, if any.\n     * @type {number[][]}\n     */\n    this.extensions = undefined; // toJSON\n\n    /**\n     * Reserved ranges, if any.\n     * @type {Array.<number[]|string>}\n     */\n    this.reserved = undefined; // toJSON\n\n    /*?\n     * Whether this type is a legacy group.\n     * @type {boolean|undefined}\n     */\n    this.group = undefined; // toJSON\n\n    /**\n     * Cached fields by id.\n     * @type {Object.<number,Field>|null}\n     * @private\n     */\n    this._fieldsById = null;\n\n    /**\n     * Cached fields as an array.\n     * @type {Field[]|null}\n     * @private\n     */\n    this._fieldsArray = null;\n\n    /**\n     * Cached oneofs as an array.\n     * @type {OneOf[]|null}\n     * @private\n     */\n    this._oneofsArray = null;\n\n    /**\n     * Cached constructor.\n     * @type {Constructor<{}>}\n     * @private\n     */\n    this._ctor = null;\n}\n\nObject.defineProperties(Type.prototype, {\n\n    /**\n     * Message fields by id.\n     * @name Type#fieldsById\n     * @type {Object.<number,Field>}\n     * @readonly\n     */\n    fieldsById: {\n        get: function() {\n\n            /* istanbul ignore if */\n            if (this._fieldsById)\n                return this._fieldsById;\n\n            this._fieldsById = {};\n            for (var names = Object.keys(this.fields), i = 0; i < names.length; ++i) {\n                var field = this.fields[names[i]],\n                    id = field.id;\n\n                /* istanbul ignore if */\n                if (this._fieldsById[id])\n                    throw Error(\"duplicate id \" + id + \" in \" + this);\n\n                this._fieldsById[id] = field;\n            }\n            return this._fieldsById;\n        }\n    },\n\n    /**\n     * Fields of this message as an array for iteration.\n     * @name Type#fieldsArray\n     * @type {Field[]}\n     * @readonly\n     */\n    fieldsArray: {\n        get: function() {\n            return this._fieldsArray || (this._fieldsArray = util.toArray(this.fields));\n        }\n    },\n\n    /**\n     * Oneofs of this message as an array for iteration.\n     * @name Type#oneofsArray\n     * @type {OneOf[]}\n     * @readonly\n     */\n    oneofsArray: {\n        get: function() {\n            return this._oneofsArray || (this._oneofsArray = util.toArray(this.oneofs));\n        }\n    },\n\n    /**\n     * The registered constructor, if any registered, otherwise a generic constructor.\n     * Assigning a function replaces the internal constructor. If the function does not extend {@link Message} yet, its prototype will be setup accordingly and static methods will be populated. If it already extends {@link Message}, it will just replace the internal constructor.\n     * @name Type#ctor\n     * @type {Constructor<{}>}\n     */\n    ctor: {\n        get: function() {\n            return this._ctor || (this.ctor = Type.generateConstructor(this)());\n        },\n        set: function(ctor) {\n\n            // Ensure proper prototype\n            var prototype = ctor.prototype;\n            if (!(prototype instanceof Message)) {\n                (ctor.prototype = new Message()).constructor = ctor;\n                util.merge(ctor.prototype, prototype);\n            }\n\n            // Classes and messages reference their reflected type\n            ctor.$type = ctor.prototype.$type = this;\n\n            // Mix in static methods\n            util.merge(ctor, Message, true);\n\n            this._ctor = ctor;\n\n            // Messages have non-enumerable default values on their prototype\n            var i = 0;\n            for (; i < /* initializes */ this.fieldsArray.length; ++i)\n                this._fieldsArray[i].resolve(); // ensures a proper value\n\n            // Messages have non-enumerable getters and setters for each virtual oneof field\n            var ctorProperties = {};\n            for (i = 0; i < /* initializes */ this.oneofsArray.length; ++i)\n                ctorProperties[this._oneofsArray[i].resolve().name] = {\n                    get: util.oneOfGetter(this._oneofsArray[i].oneof),\n                    set: util.oneOfSetter(this._oneofsArray[i].oneof)\n                };\n            if (i)\n                Object.defineProperties(ctor.prototype, ctorProperties);\n        }\n    }\n});\n\n/**\n * Generates a constructor function for the specified type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nType.generateConstructor = function generateConstructor(mtype) {\n    /* eslint-disable no-unexpected-multiline */\n    var gen = util.codegen([\"p\"], mtype.name);\n    // explicitly initialize mutable object/array fields so that these aren't just inherited from the prototype\n    for (var i = 0, field; i < mtype.fieldsArray.length; ++i)\n        if ((field = mtype._fieldsArray[i]).map) gen\n            (\"this%s={}\", util.safeProp(field.name));\n        else if (field.repeated) gen\n            (\"this%s=[]\", util.safeProp(field.name));\n    return gen\n    (\"if(p)for(var ks=Object.keys(p),i=0;i<ks.length;++i)if(p[ks[i]]!=null&&ks[i]!==\\\"__proto__\\\")\") // omit undefined or null\n        (\"this[ks[i]]=p[ks[i]]\");\n    /* eslint-enable no-unexpected-multiline */\n};\n\nfunction clearCache(type) {\n    type._fieldsById = type._fieldsArray = type._oneofsArray = null;\n    delete type.encode;\n    delete type.decode;\n    delete type.verify;\n    return type;\n}\n\n/**\n * Message type descriptor.\n * @interface IType\n * @extends INamespace\n * @property {Object.<string,IOneOf>} [oneofs] Oneof descriptors\n * @property {Object.<string,IField>} fields Field descriptors\n * @property {number[][]} [extensions] Extension ranges\n * @property {Array.<number[]|string>} [reserved] Reserved ranges\n * @property {boolean} [group=false] Whether a legacy group or not\n */\n\n/**\n * Creates a message type from a message type descriptor.\n * @param {string} name Message name\n * @param {IType} json Message type descriptor\n * @param {number} [depth] Current nesting depth, defaults to `0`\n * @returns {Type} Created message type\n */\nType.fromJSON = function fromJSON(name, json, depth) {\n    if (depth === undefined)\n        depth = 0;\n    if (depth > util.nestingLimit)\n        throw Error(\"max depth exceeded\");\n    var type = new Type(name, json.options);\n    type.extensions = json.extensions;\n    type.reserved = json.reserved;\n    var names = Object.keys(json.fields),\n        i = 0;\n    for (; i < names.length; ++i)\n        type.add(\n            ( typeof json.fields[names[i]].keyType !== \"undefined\"\n            ? MapField.fromJSON\n            : Field.fromJSON )(names[i], json.fields[names[i]])\n        );\n    if (json.oneofs)\n        for (names = Object.keys(json.oneofs), i = 0; i < names.length; ++i)\n            type.add(OneOf.fromJSON(names[i], json.oneofs[names[i]]));\n    if (json.nested)\n        for (names = Object.keys(json.nested), i = 0; i < names.length; ++i) {\n            var nested = json.nested[names[i]];\n            type.add( // most to least likely\n                ( nested.id !== undefined\n                ? Field.fromJSON\n                : nested.fields !== undefined\n                ? Type.fromJSON\n                : nested.values !== undefined\n                ? Enum.fromJSON\n                : nested.methods !== undefined\n                ? Service.fromJSON\n                : Namespace.fromJSON )(names[i], nested, depth + 1)\n            );\n        }\n    if (json.extensions && json.extensions.length)\n        type.extensions = json.extensions;\n    if (json.reserved && json.reserved.length)\n        type.reserved = json.reserved;\n    if (json.group)\n        type.group = true;\n    if (json.comment)\n        type.comment = json.comment;\n    if (json.edition)\n        type._edition = json.edition;\n    type._defaultEdition = \"proto3\";  // For backwards-compatibility.\n    return type;\n};\n\n/**\n * Converts this message type to a message type descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IType} Message type descriptor\n */\nType.prototype.toJSON = function toJSON(toJSONOptions) {\n    var inherited = Namespace.prototype.toJSON.call(this, toJSONOptions);\n    var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n    return util.toObject([\n        \"edition\"    , this._editionToJSON(),\n        \"options\"    , inherited && inherited.options || undefined,\n        \"oneofs\"     , Namespace.arrayToJSON(this.oneofsArray, toJSONOptions),\n        \"fields\"     , Namespace.arrayToJSON(this.fieldsArray.filter(function(obj) { return !obj.declaringField; }), toJSONOptions) || {},\n        \"extensions\" , this.extensions && this.extensions.length ? this.extensions : undefined,\n        \"reserved\"   , this.reserved && this.reserved.length ? this.reserved : undefined,\n        \"group\"      , this.group || undefined,\n        \"nested\"     , inherited && inherited.nested || undefined,\n        \"comment\"    , keepComments ? this.comment : undefined\n    ]);\n};\n\n/**\n * @override\n */\nType.prototype.resolveAll = function resolveAll() {\n    if (!this._needsRecursiveResolve) return this;\n\n    Namespace.prototype.resolveAll.call(this);\n    var oneofs = this.oneofsArray; i = 0;\n    while (i < oneofs.length)\n        oneofs[i++].resolve();\n    var fields = this.fieldsArray, i = 0;\n    while (i < fields.length)\n        fields[i++].resolve();\n    return this;\n};\n\n/**\n * @override\n */\nType.prototype._resolveFeaturesRecursive = function _resolveFeaturesRecursive(edition) {\n    if (!this._needsRecursiveFeatureResolution) return this;\n\n    edition = this._edition || edition;\n\n    Namespace.prototype._resolveFeaturesRecursive.call(this, edition);\n    this.oneofsArray.forEach(oneof => {\n        oneof._resolveFeatures(edition);\n    });\n    this.fieldsArray.forEach(field => {\n        field._resolveFeatures(edition);\n    });\n    return this;\n};\n\n/**\n * @override\n */\nType.prototype.get = function get(name) {\n    if (Object.prototype.hasOwnProperty.call(this.fields, name))\n        return this.fields[name];\n    if (this.oneofs && Object.prototype.hasOwnProperty.call(this.oneofs, name))\n        return this.oneofs[name];\n    if (this.nested && Object.prototype.hasOwnProperty.call(this.nested, name))\n        return this.nested[name];\n    return null;\n};\n\n/**\n * Adds a nested object to this type.\n * @param {ReflectionObject} object Nested object to add\n * @returns {Type} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If there is already a nested object with this name or, if a field, when there is already a field with this id\n */\nType.prototype.add = function add(object) {\n    if (this.get(object.name))\n        throw Error(\"duplicate name '\" + object.name + \"' in \" + this);\n\n    if (object instanceof Field && object.extend === undefined) {\n        // NOTE: Extension fields aren't actual fields on the declaring type, but nested objects.\n        // The root object takes care of adding distinct sister-fields to the respective extended\n        // type instead.\n\n        // avoids calling the getter if not absolutely necessary because it's called quite frequently\n        if (this._fieldsById ? /* istanbul ignore next */ this._fieldsById[object.id] : this.fieldsById[object.id])\n            throw Error(\"duplicate id \" + object.id + \" in \" + this);\n        if (this.isReservedId(object.id))\n            throw Error(\"id \" + object.id + \" is reserved in \" + this);\n        if (this.isReservedName(object.name) || object.name.charAt(0) === \"$\")\n            throw Error(\"name '\" + object.name + \"' is reserved in \" + this);\n        if (object.name === \"__proto__\")\n            return this;\n\n        if (object.parent)\n            object.parent.remove(object);\n        this.fields[object.name] = object;\n        object.message = this;\n        object.onAdd(this);\n        return clearCache(this);\n    }\n    if (object instanceof OneOf) {\n        if (object.name.charAt(0) === \"$\")\n            throw Error(\"name '\" + object.name + \"' is reserved in \" + this);\n        if (object.name === \"__proto__\")\n            return this;\n        if (!this.oneofs)\n            this.oneofs = {};\n        this.oneofs[object.name] = object;\n        object.onAdd(this);\n        return clearCache(this);\n    }\n    return Namespace.prototype.add.call(this, object);\n};\n\n/**\n * Removes a nested object from this type.\n * @param {ReflectionObject} object Nested object to remove\n * @returns {Type} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If `object` is not a member of this type\n */\nType.prototype.remove = function remove(object) {\n    if (object instanceof Field && object.extend === undefined) {\n        // See Type#add for the reason why extension fields are excluded here.\n\n        /* istanbul ignore if */\n        if (!this.fields || this.fields[object.name] !== object)\n            throw Error(object + \" is not a member of \" + this);\n\n        delete this.fields[object.name];\n        object.parent = null;\n        object.onRemove(this);\n        return clearCache(this);\n    }\n    if (object instanceof OneOf) {\n\n        /* istanbul ignore if */\n        if (!this.oneofs || this.oneofs[object.name] !== object)\n            throw Error(object + \" is not a member of \" + this);\n\n        delete this.oneofs[object.name];\n        object.parent = null;\n        object.onRemove(this);\n        return clearCache(this);\n    }\n    return Namespace.prototype.remove.call(this, object);\n};\n\n/**\n * Tests if the specified id is reserved.\n * @param {number} id Id to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nType.prototype.isReservedId = function isReservedId(id) {\n    return Namespace.isReservedId(this.reserved, id);\n};\n\n/**\n * Tests if the specified name is reserved.\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nType.prototype.isReservedName = function isReservedName(name) {\n    return Namespace.isReservedName(this.reserved, name);\n};\n\n/**\n * Creates a new message of this type using the specified properties.\n * @param {Object.<string,*>} [properties] Properties to set\n * @returns {Message<{}>} Message instance\n */\nType.prototype.create = function create(properties) {\n    return new this.ctor(properties);\n};\n\n/**\n * Sets up {@link Type#encode|encode}, {@link Type#decode|decode} and {@link Type#verify|verify}.\n * @returns {Type} `this`\n */\nType.prototype.setup = function setup() {\n    // Sets up everything at once so that the prototype chain does not have to be re-evaluated\n    // multiple times (V8, soft-deopt prototype-check).\n\n    var fullName = this.fullName,\n        types    = [];\n    for (var i = 0; i < /* initializes */ this.fieldsArray.length; ++i)\n        types.push(this._fieldsArray[i].resolve().resolvedType);\n\n    // Replace setup methods with type-specific generated functions\n    this.encode = encoder(this)({\n        Writer : Writer,\n        types  : types,\n        util   : util\n    });\n    this.decode = decoder(this)({\n        Reader : Reader,\n        types  : types,\n        util   : util\n    });\n    this.verify = verifier(this)({\n        types : types,\n        util  : util\n    });\n    this.fromObject = converter.fromObject(this)({\n        types : types,\n        util  : util\n    });\n    this.toObject = converter.toObject(this)({\n        types : types,\n        util  : util\n    });\n\n    // Inject custom wrappers for common types\n    var wrapper = wrappers[fullName];\n    if (wrapper) {\n        var originalThis = Object.create(this);\n        // if (wrapper.fromObject) {\n            originalThis.fromObject = this.fromObject;\n            this.fromObject = wrapper.fromObject.bind(originalThis);\n        // }\n        // if (wrapper.toObject) {\n            originalThis.toObject = this.toObject;\n            this.toObject = wrapper.toObject.bind(originalThis);\n        // }\n    }\n\n    return this;\n};\n\n/**\n * Encodes a message of this type. Does not implicitly {@link Type#verify|verify} messages.\n * @param {Message<{}>|Object.<string,*>} message Message instance or plain object\n * @param {Writer} [writer] Writer to encode to\n * @returns {Writer} writer\n */\nType.prototype.encode = function encode_setup(message, writer) { // eslint-disable-line no-unused-vars\n    return this.setup().encode.apply(this, arguments); // overrides this method\n};\n\n/**\n * Encodes a message of this type preceeded by its byte length as a varint. Does not implicitly {@link Type#verify|verify} messages.\n * @param {Message<{}>|Object.<string,*>} message Message instance or plain object\n * @param {Writer} [writer] Writer to encode to\n * @returns {Writer} writer\n */\nType.prototype.encodeDelimited = function encodeDelimited(message, writer) {\n    return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();\n};\n\n/**\n * Decodes a message of this type.\n * @param {Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Length of the message, if known beforehand\n * @param {number} [end] Expected group end tag, if decoding a group\n * @param {number} [depth] Current nesting depth\n * @returns {Message<{}>} Decoded message\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {util.ProtocolError<{}>} If required fields are missing\n */\nType.prototype.decode = function decode_setup(reader, length, end, depth) {\n    return this.setup().decode(reader, length, end, depth); // overrides this method\n};\n\n/**\n * Decodes a message of this type preceeded by its byte length as a varint.\n * @param {Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {Message<{}>} Decoded message\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {util.ProtocolError} If required fields are missing\n */\nType.prototype.decodeDelimited = function decodeDelimited(reader) {\n    if (!(reader instanceof Reader))\n        reader = Reader.create(reader);\n    return this.decode(reader, reader.uint32());\n};\n\n/**\n * Verifies that field values are valid and that required fields are present.\n * @param {Object.<string,*>} message Plain object to verify\n * @param {number} [depth] Current nesting depth\n * @returns {null|string} `null` if valid, otherwise the reason why it is not\n */\nType.prototype.verify = function verify_setup(message, depth) {\n    return this.setup().verify(message, depth); // overrides this method\n};\n\n/**\n * Creates a new message of this type from a plain object. Also converts values to their respective internal types.\n * @param {Object.<string,*>} object Plain object to convert\n * @param {number} [depth] Current nesting depth\n * @returns {Message<{}>} Message instance\n */\nType.prototype.fromObject = function fromObject(object, depth) {\n    return this.setup().fromObject(object, depth);\n};\n\n/**\n * Conversion options as used by {@link Type#toObject} and {@link Message.toObject}.\n * @interface IConversionOptions\n * @property {Function} [longs] Long conversion type.\n * Valid values are `BigInt`, `String` and `Number` (the global types).\n * Defaults to copy the present value, which is a possibly unsafe number without and a {@link Long} with a long library.\n * @property {Function} [enums] Enum value conversion type.\n * Only valid value is `String` (the global type).\n * Defaults to copy the present value, which is the numeric id.\n * @property {Function} [bytes] Bytes value conversion type.\n * Valid values are `Array` and (a base64 encoded) `String` (the global types).\n * Defaults to copy the present value, which usually is a Buffer under node and an Uint8Array in the browser.\n * @property {boolean} [defaults=false] Also sets default values on the resulting object\n * @property {boolean} [arrays=false] Sets empty arrays for missing repeated fields even if `defaults=false`\n * @property {boolean} [objects=false] Sets empty objects for missing map fields even if `defaults=false`\n * @property {boolean} [oneofs=false] Includes virtual oneof properties set to the present field's name, if any\n * @property {boolean} [json=false] Performs additional JSON compatibility conversions, i.e. NaN and Infinity to strings\n */\n\n/**\n * Creates a plain object from a message of this type. Also converts values to other types if specified.\n * @param {Message<{}>} message Message instance\n * @param {IConversionOptions} [options] Conversion options\n * @returns {Object.<string,*>} Plain object\n */\nType.prototype.toObject = function toObject(message, options) { // eslint-disable-line no-unused-vars\n    return this.setup().toObject.apply(this, arguments);\n};\n\n/**\n * Decorator function as returned by {@link Type.d} (TypeScript).\n * @typedef TypeDecorator\n * @type {function}\n * @param {Constructor<T>} target Target constructor\n * @returns {undefined}\n * @template T extends Message<T>\n */\n\n/**\n * Type decorator (TypeScript).\n * @param {string} [typeName] Type name, defaults to the constructor's name\n * @returns {TypeDecorator<T>} Decorator function\n * @template T extends Message<T>\n */\nType.d = function decorateType(typeName) {\n    return function typeDecorator(target) {\n        util.decorateType(target, typeName);\n    };\n};\n","\"use strict\";\nmodule.exports = Root;\n\n// extends Namespace\nvar Namespace = require(\"./namespace\");\n((Root.prototype = Object.create(Namespace.prototype)).constructor = Root).className = \"Root\";\n\nvar Field   = require(\"./field\"),\n    Enum    = require(\"./enum\"),\n    OneOf   = require(\"./oneof\"),\n    util    = require(\"./util\");\n\nvar Type,   // cyclic\n    parse,  // might be excluded\n    common; // \"\n\n/**\n * Constructs a new root namespace instance.\n * @classdesc Root namespace wrapping all types, enums, services, sub-namespaces etc. that belong together.\n * @extends NamespaceBase\n * @constructor\n * @param {Object.<string,*>} [options] Top level options\n */\nfunction Root(options) {\n    Namespace.call(this, \"\", options);\n\n    /**\n     * Deferred extension fields.\n     * @type {Field[]}\n     */\n    this.deferred = [];\n\n    /**\n     * Resolved file names of loaded files.\n     * @type {string[]}\n     */\n    this.files = [];\n\n    /**\n     * Edition, defaults to proto2 if unspecified.\n     * @type {string}\n     * @private\n     */\n    this._edition = \"proto2\";\n\n    /**\n     * Global lookup cache of fully qualified names.\n     * @type {Object.<string,ReflectionObject>}\n     * @private\n     */\n    this._fullyQualifiedObjects = {};\n}\n\n/**\n * Loads a namespace descriptor into a root namespace.\n * @param {INamespace} json Namespace descriptor\n * @param {Root} [root] Root namespace, defaults to create a new one if omitted\n * @param {number} [depth] Current nesting depth, defaults to `0`\n * @returns {Root} Root namespace\n */\nRoot.fromJSON = function fromJSON(json, root, depth) {\n    depth = util.checkDepth(depth);\n    if (!root)\n        root = new Root();\n    if (json.options)\n        root.setOptions(json.options);\n    return root.addJSON(json.nested, depth).resolveAll();\n};\n\n/**\n * Resolves the path of an imported file, relative to the importing origin.\n * This method exists so you can override it with your own logic in case your imports are scattered over multiple directories.\n * @function\n * @param {string} origin The file name of the importing file\n * @param {string} target The file name being imported\n * @returns {string|null} Resolved path to `target` or `null` to skip the file\n */\nRoot.prototype.resolvePath = util.path.resolve;\n\n/**\n * Fetch content from file path or url\n * This method exists so you can override it with your own logic.\n * @function\n * @param {string} path File path or url\n * @param {FetchCallback} callback Callback function\n * @returns {undefined}\n */\nRoot.prototype.fetch = util.fetch;\n\n// A symbol-like function to safely signal synchronous loading\n/* istanbul ignore next */\nfunction SYNC() {} // eslint-disable-line no-empty-function\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into this root namespace and calls the callback.\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {IParseOptions} options Parse options\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n */\nRoot.prototype.load = function load(filename, options, callback) {\n    if (typeof options === \"function\") {\n        callback = options;\n        options = undefined;\n    }\n    var self = this;\n    if (!callback) {\n        return util.asPromise(load, self, filename, options);\n    }\n\n    var sync = callback === SYNC; // undocumented\n\n    // Finishes loading by calling the callback (exactly once)\n    function finish(err, root) {\n        /* istanbul ignore if */\n        if (!callback) {\n            return;\n        }\n        if (sync) {\n            throw err;\n        }\n        if (root) {\n            root.resolveAll();\n        }\n        var cb = callback;\n        callback = null;\n        cb(err, root);\n    }\n\n    // Bundled definition existence checking\n    function getBundledFileName(filename) {\n        var idx = filename.lastIndexOf(\"google/protobuf/\");\n        if (idx > -1) {\n            var altname = filename.substring(idx);\n            if (altname in common) return altname;\n        }\n        return null;\n    }\n\n    // Processes a single file\n    function process(filename, source, depth) {\n        if (depth === undefined)\n            depth = 0;\n        try {\n            if (depth > util.recursionLimit)\n                throw Error(\"max depth exceeded\");\n            if (util.isString(source) && source.charAt(0) === \"{\")\n                source = JSON.parse(source);\n            if (!util.isString(source))\n                self.setOptions(source.options).addJSON(source.nested);\n            else {\n                parse.filename = filename;\n                var parsed = parse(source, self, options),\n                    resolved,\n                    i = 0;\n                if (parsed.imports)\n                    for (; i < parsed.imports.length; ++i)\n                        if (resolved = getBundledFileName(parsed.imports[i]) || self.resolvePath(filename, parsed.imports[i]))\n                            fetch(resolved, false, depth + 1);\n                if (parsed.weakImports)\n                    for (i = 0; i < parsed.weakImports.length; ++i)\n                        if (resolved = getBundledFileName(parsed.weakImports[i]) || self.resolvePath(filename, parsed.weakImports[i]))\n                            fetch(resolved, true, depth + 1);\n            }\n        } catch (err) {\n            finish(err);\n        }\n        if (!sync && !queued) {\n            finish(null, self); // only once anyway\n        }\n    }\n\n    // Fetches a single file\n    function fetch(filename, weak, depth) {\n        if (depth === undefined)\n            depth = 0;\n        filename = getBundledFileName(filename) || filename;\n\n        // Skip if already loaded / attempted\n        if (self.files.indexOf(filename) > -1) {\n            return;\n        }\n        self.files.push(filename);\n\n        // Shortcut bundled definitions\n        if (filename in common) {\n            if (sync) {\n                process(filename, common[filename], depth);\n            } else {\n                ++queued;\n                setTimeout(function() {\n                    --queued;\n                    process(filename, common[filename], depth);\n                });\n            }\n            return;\n        }\n\n        // Otherwise fetch from disk or network\n        if (sync) {\n            var source;\n            try {\n                source = util.fs.readFileSync(filename).toString(\"utf8\");\n            } catch (err) {\n                if (!weak)\n                    finish(err);\n                return;\n            }\n            process(filename, source, depth);\n        } else {\n            ++queued;\n            self.fetch(filename, function(err, source) {\n                --queued;\n                /* istanbul ignore if */\n                if (!callback) {\n                    return; // terminated meanwhile\n                }\n                if (err) {\n                    /* istanbul ignore else */\n                    if (!weak)\n                        finish(err);\n                    else if (!queued) // can't be covered reliably\n                        finish(null, self);\n                    return;\n                }\n                process(filename, source, depth);\n            });\n        }\n    }\n    var queued = 0;\n\n    // Assembling the root namespace doesn't require working type\n    // references anymore, so we can load everything in parallel\n    if (util.isString(filename)) {\n        filename = [ filename ];\n    }\n    for (var i = 0, resolved; i < filename.length; ++i)\n        if (resolved = self.resolvePath(\"\", filename[i]))\n            fetch(resolved);\n    if (sync) {\n        self.resolveAll();\n        return self;\n    }\n    if (!queued) {\n        finish(null, self);\n    }\n\n    return self;\n};\n// function load(filename:string, options:IParseOptions, callback:LoadCallback):undefined\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into this root namespace and calls the callback.\n * @function Root#load\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n * @variation 2\n */\n// function load(filename:string, callback:LoadCallback):undefined\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into this root namespace and returns a promise.\n * @function Root#load\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {IParseOptions} [options] Parse options. Defaults to {@link parse.defaults} when omitted.\n * @returns {Promise<Root>} Promise\n * @variation 3\n */\n// function load(filename:string, [options:IParseOptions]):Promise<Root>\n\n/**\n * Synchronously loads one or multiple .proto or preprocessed .json files into this root namespace (node only).\n * @function Root#loadSync\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {IParseOptions} [options] Parse options. Defaults to {@link parse.defaults} when omitted.\n * @returns {Root} Root namespace\n * @throws {Error} If synchronous fetching is not supported (i.e. in browsers) or if a file's syntax is invalid\n */\nRoot.prototype.loadSync = function loadSync(filename, options) {\n    if (!util.isNode)\n        throw Error(\"not supported\");\n    return this.load(filename, options, SYNC);\n};\n\n/**\n * @override\n */\nRoot.prototype.resolveAll = function resolveAll() {\n    if (!this._needsRecursiveResolve) return this;\n\n    if (this.deferred.length)\n        throw Error(\"unresolvable extensions: \" + this.deferred.map(function(field) {\n            return \"'extend \" + field.extend + \"' in \" + field.parent.fullName;\n        }).join(\", \"));\n    return Namespace.prototype.resolveAll.call(this);\n};\n\n// only uppercased (and thus conflict-free) children are exposed, see below\nvar exposeRe = /^[A-Z]/;\n\n/**\n * Handles a deferred declaring extension field by creating a sister field to represent it within its extended type.\n * @param {Root} root Root instance\n * @param {Field} field Declaring extension field witin the declaring type\n * @returns {boolean} `true` if successfully added to the extended type, `false` otherwise\n * @inner\n * @ignore\n */\nfunction tryHandleExtension(root, field) {\n    var extendedType = field.parent.lookup(field.extend);\n    if (extendedType) {\n        var sisterField = new Field(field.fullName, field.id, field.type, field.rule, undefined, field.options);\n        //do not allow to extend same field twice to prevent the error\n        if (extendedType.get(sisterField.name)) {\n            return true;\n        }\n        sisterField.declaringField = field;\n        field.extensionField = sisterField;\n        extendedType.add(sisterField);\n        return true;\n    }\n    return false;\n}\n\n/**\n * Called when any object is added to this root or its sub-namespaces.\n * @param {ReflectionObject} object Object added\n * @returns {undefined}\n * @private\n */\nRoot.prototype._handleAdd = function _handleAdd(object) {\n    if (object instanceof Field) {\n\n        if (/* an extension field (implies not part of a oneof) */ object.extend !== undefined && /* not already handled */ !object.extensionField)\n            if (!tryHandleExtension(this, object))\n                this.deferred.push(object);\n\n    } else if (object instanceof Enum) {\n\n        if (exposeRe.test(object.name))\n            object.parent[object.name] = object.values; // expose enum values as property of its parent\n\n    } else if (!(object instanceof OneOf)) /* everything else is a namespace */ {\n\n        if (object instanceof Type) // Try to handle any deferred extensions\n            for (var i = 0; i < this.deferred.length;)\n                if (tryHandleExtension(this, this.deferred[i]))\n                    this.deferred.splice(i, 1);\n                else\n                    ++i;\n        for (var j = 0; j < /* initializes */ object.nestedArray.length; ++j) // recurse into the namespace\n            this._handleAdd(object._nestedArray[j]);\n        if (exposeRe.test(object.name))\n            object.parent[object.name] = object; // expose namespace as property of its parent\n    }\n\n    if (object instanceof Type || object instanceof Enum || object instanceof Field) {\n        // Only store types and enums for quick lookup during resolve.\n        this._fullyQualifiedObjects[object.fullName] = object;\n    }\n\n    // The above also adds uppercased (and thus conflict-free) nested types, services and enums as\n    // properties of namespaces just like static code does. This allows using a .d.ts generated for\n    // a static module with reflection-based solutions where the condition is met.\n};\n\n/**\n * Called when any object is removed from this root or its sub-namespaces.\n * @param {ReflectionObject} object Object removed\n * @returns {undefined}\n * @private\n */\nRoot.prototype._handleRemove = function _handleRemove(object) {\n    if (object instanceof Field) {\n\n        if (/* an extension field */ object.extend !== undefined) {\n            if (/* already handled */ object.extensionField) { // remove its sister field\n                object.extensionField.parent.remove(object.extensionField);\n                object.extensionField = null;\n            } else { // cancel the extension\n                var index = this.deferred.indexOf(object);\n                /* istanbul ignore else */\n                if (index > -1)\n                    this.deferred.splice(index, 1);\n            }\n        }\n\n    } else if (object instanceof Enum) {\n\n        if (exposeRe.test(object.name))\n            delete object.parent[object.name]; // unexpose enum values\n\n    } else if (object instanceof Namespace) {\n\n        for (var i = 0; i < /* initializes */ object.nestedArray.length; ++i) // recurse into the namespace\n            this._handleRemove(object._nestedArray[i]);\n\n        if (exposeRe.test(object.name))\n            delete object.parent[object.name]; // unexpose namespaces\n\n    }\n\n    delete this._fullyQualifiedObjects[object.fullName];\n};\n\n// Sets up cyclic dependencies (called in index-light)\nRoot._configure = function(Type_, parse_, common_) {\n    Type   = Type_;\n    parse  = parse_;\n    common = common_;\n};\n","\"use strict\";\n\n/**\n * Various utility functions.\n * @namespace\n */\nvar util = module.exports = require(\"./util/minimal\");\n\nvar roots = require(\"./roots\");\n\nvar Type, // cyclic\n    Enum;\n\nutil.codegen = require(\"@protobufjs/codegen\");\nutil.fetch   = require(\"@protobufjs/fetch\");\nutil.path    = require(\"@protobufjs/path\");\nutil.patterns = require(\"./util/patterns\");\n\nvar reservedRe = util.patterns.reservedRe;\n\n/**\n * Node's fs module if available.\n * @type {Object.<string,*>}\n */\nutil.fs = require(\"./util/fs\");\n\n/**\n * Checks a recursion depth.\n * @param {number|undefined} depth Depth of recursion\n * @returns {number} Depth of recursion\n * @throws {Error} If depth exceeds util.recursionLimit\n */\nutil.checkDepth = function checkDepth(depth) {\n    if (depth === undefined)\n        depth = 0;\n    if (depth > util.recursionLimit)\n        throw Error(\"max depth exceeded\");\n    return depth;\n};\n\n/**\n * Converts an object's values to an array.\n * @param {Object.<string,*>} object Object to convert\n * @returns {Array.<*>} Converted array\n */\nutil.toArray = function toArray(object) {\n    if (object) {\n        var keys  = Object.keys(object),\n            array = new Array(keys.length),\n            index = 0;\n        while (index < keys.length)\n            array[index] = object[keys[index++]];\n        return array;\n    }\n    return [];\n};\n\n/**\n * Converts an array of keys immediately followed by their respective value to an object, omitting undefined values.\n * @param {Array.<*>} array Array to convert\n * @returns {Object.<string,*>} Converted object\n */\nutil.toObject = function toObject(array) {\n    var object = {},\n        index  = 0;\n    while (index < array.length) {\n        var key = array[index++],\n            val = array[index++];\n        if (val !== undefined)\n            object[key] = val;\n    }\n    return object;\n};\n\n/**\n * Tests whether the specified name is a reserved word in JS.\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nutil.isReserved = function isReserved(name) {\n    return reservedRe.test(name);\n};\n\n/**\n * Returns a safe property accessor for the specified property name.\n * @param {string} prop Property name\n * @returns {string} Safe accessor\n */\nutil.safeProp = function safeProp(prop) {\n    if (!/^[$\\w_]+$/.test(prop) || reservedRe.test(prop))\n        return \"[\" + JSON.stringify(prop) + \"]\";\n    return \".\" + prop;\n};\n\n/**\n * Converts the first character of a string to upper case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.ucFirst = function ucFirst(str) {\n    return str.charAt(0).toUpperCase() + str.substring(1);\n};\n\nvar camelCaseRe = /_([a-z])/g;\n\n/**\n * Converts a string to camel case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.camelCase = function camelCase(str) {\n    return str.substring(0, 1)\n         + str.substring(1)\n               .replace(camelCaseRe, function($0, $1) { return $1.toUpperCase(); });\n};\n\n/**\n * Compares reflected fields by id.\n * @param {Field} a First field\n * @param {Field} b Second field\n * @returns {number} Comparison value\n */\nutil.compareFieldsById = function compareFieldsById(a, b) {\n    return a.id - b.id;\n};\n\n/**\n * Decorator helper for types (TypeScript).\n * @param {Constructor<T>} ctor Constructor function\n * @param {string} [typeName] Type name, defaults to the constructor's name\n * @returns {Type} Reflected type\n * @template T extends Message<T>\n * @property {Root} root Decorators root\n */\nutil.decorateType = function decorateType(ctor, typeName) {\n\n    /* istanbul ignore if */\n    if (ctor.$type) {\n        if (typeName && ctor.$type.name !== typeName) {\n            util.decorateRoot.remove(ctor.$type);\n            ctor.$type.name = typeName;\n            util.decorateRoot.add(ctor.$type);\n        }\n        return ctor.$type;\n    }\n\n    /* istanbul ignore next */\n    if (!Type)\n        Type = require(\"./type\");\n\n    var type = new Type(typeName || ctor.name);\n    util.decorateRoot.add(type);\n    type.ctor = ctor; // sets up .encode, .decode etc.\n    Object.defineProperty(ctor, \"$type\", { value: type, enumerable: false });\n    Object.defineProperty(ctor.prototype, \"$type\", { value: type, enumerable: false });\n    return type;\n};\n\nvar decorateEnumIndex = 0;\n\n/**\n * Decorator helper for enums (TypeScript).\n * @param {Object} object Enum object\n * @returns {Enum} Reflected enum\n */\nutil.decorateEnum = function decorateEnum(object) {\n\n    /* istanbul ignore if */\n    if (object.$type)\n        return object.$type;\n\n    /* istanbul ignore next */\n    if (!Enum)\n        Enum = require(\"./enum\");\n\n    var enm = new Enum(\"Enum\" + decorateEnumIndex++, object);\n    util.decorateRoot.add(enm);\n    Object.defineProperty(object, \"$type\", { value: enm, enumerable: false });\n    return enm;\n};\n\n\n/**\n * Sets the value of a property by property path. If a value already exists, it is turned to an array\n * @param {Object.<string,*>} dst Destination object\n * @param {string} path dot '.' delimited path of the property to set\n * @param {Object} value the value to set\n * @param {boolean|undefined} [ifNotSet] Sets the option only if it isn't currently set\n * @returns {Object.<string,*>} Destination object\n */\nutil.setProperty = function setProperty(dst, path, value, ifNotSet) {\n    function setProp(dst, path, value) {\n        var part = path.shift();\n        if (util.isUnsafeProperty(part))\n            return dst;\n        if (path.length > 0) {\n            dst[part] = setProp(dst[part] || {}, path, value);\n        } else {\n            var prevValue = dst[part];\n            if (prevValue && ifNotSet)\n                return dst;\n            if (prevValue)\n                value = [].concat(prevValue).concat(value);\n            dst[part] = value;\n        }\n        return dst;\n    }\n\n    if (typeof dst !== \"object\")\n        throw TypeError(\"dst must be an object\");\n    if (!path)\n        throw TypeError(\"path must be specified\");\n\n    path = path.split(\".\");\n    if (path.length > util.recursionLimit)\n        throw Error(\"max depth exceeded\");\n    return setProp(dst, path, value);\n};\n\n/**\n * Decorator root (TypeScript).\n * @name util.decorateRoot\n * @type {Root}\n * @readonly\n */\nObject.defineProperty(util, \"decorateRoot\", {\n    get: function() {\n        return roots[\"decorated\"] || (roots[\"decorated\"] = new (require(\"./root\"))());\n    }\n});\n","\"use strict\";\n\n/**\n * Common type constants.\n * @namespace\n */\nvar types = exports;\n\nvar util = require(\"./util\");\n\nvar s = [\n    \"double\",   // 0\n    \"float\",    // 1\n    \"int32\",    // 2\n    \"uint32\",   // 3\n    \"sint32\",   // 4\n    \"fixed32\",  // 5\n    \"sfixed32\", // 6\n    \"int64\",    // 7\n    \"uint64\",   // 8\n    \"sint64\",   // 9\n    \"fixed64\",  // 10\n    \"sfixed64\", // 11\n    \"bool\",     // 12\n    \"string\",   // 13\n    \"bytes\"     // 14\n];\n\nfunction bake(values, offset) {\n    var i = 0, o = Object.create(null);\n    offset |= 0;\n    while (i < values.length) o[s[i + offset]] = values[i++];\n    return o;\n}\n\n/**\n * Basic type wire types.\n * @type {Object.<string,number>}\n * @const\n * @property {number} double=1 Fixed64 wire type\n * @property {number} float=5 Fixed32 wire type\n * @property {number} int32=0 Varint wire type\n * @property {number} uint32=0 Varint wire type\n * @property {number} sint32=0 Varint wire type\n * @property {number} fixed32=5 Fixed32 wire type\n * @property {number} sfixed32=5 Fixed32 wire type\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n * @property {number} bool=0 Varint wire type\n * @property {number} string=2 Ldelim wire type\n * @property {number} bytes=2 Ldelim wire type\n */\ntypes.basic = bake([\n    /* double   */ 1,\n    /* float    */ 5,\n    /* int32    */ 0,\n    /* uint32   */ 0,\n    /* sint32   */ 0,\n    /* fixed32  */ 5,\n    /* sfixed32 */ 5,\n    /* int64    */ 0,\n    /* uint64   */ 0,\n    /* sint64   */ 0,\n    /* fixed64  */ 1,\n    /* sfixed64 */ 1,\n    /* bool     */ 0,\n    /* string   */ 2,\n    /* bytes    */ 2\n]);\n\n/**\n * Basic type defaults.\n * @type {Object.<string,*>}\n * @const\n * @property {number} double=0 Double default\n * @property {number} float=0 Float default\n * @property {number} int32=0 Int32 default\n * @property {number} uint32=0 Uint32 default\n * @property {number} sint32=0 Sint32 default\n * @property {number} fixed32=0 Fixed32 default\n * @property {number} sfixed32=0 Sfixed32 default\n * @property {number} int64=0 Int64 default\n * @property {number} uint64=0 Uint64 default\n * @property {number} sint64=0 Sint32 default\n * @property {number} fixed64=0 Fixed64 default\n * @property {number} sfixed64=0 Sfixed64 default\n * @property {boolean} bool=false Bool default\n * @property {string} string=\"\" String default\n * @property {Array.<number>} bytes=Array(0) Bytes default\n * @property {null} message=null Message default\n */\ntypes.defaults = bake([\n    /* double   */ 0,\n    /* float    */ 0,\n    /* int32    */ 0,\n    /* uint32   */ 0,\n    /* sint32   */ 0,\n    /* fixed32  */ 0,\n    /* sfixed32 */ 0,\n    /* int64    */ 0,\n    /* uint64   */ 0,\n    /* sint64   */ 0,\n    /* fixed64  */ 0,\n    /* sfixed64 */ 0,\n    /* bool     */ false,\n    /* string   */ \"\",\n    /* bytes    */ util.emptyArray,\n    /* message  */ null\n]);\n\n/**\n * Basic long type wire types.\n * @type {Object.<string,number>}\n * @const\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n */\ntypes.long = bake([\n    /* int64    */ 0,\n    /* uint64   */ 0,\n    /* sint64   */ 0,\n    /* fixed64  */ 1,\n    /* sfixed64 */ 1\n], 7);\n\n/**\n * Allowed types for map keys with their associated wire type.\n * @type {Object.<string,number>}\n * @const\n * @property {number} int32=0 Varint wire type\n * @property {number} uint32=0 Varint wire type\n * @property {number} sint32=0 Varint wire type\n * @property {number} fixed32=5 Fixed32 wire type\n * @property {number} sfixed32=5 Fixed32 wire type\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n * @property {number} bool=0 Varint wire type\n * @property {number} string=2 Ldelim wire type\n */\ntypes.mapKey = bake([\n    /* int32    */ 0,\n    /* uint32   */ 0,\n    /* sint32   */ 0,\n    /* fixed32  */ 5,\n    /* sfixed32 */ 5,\n    /* int64    */ 0,\n    /* uint64   */ 0,\n    /* sint64   */ 0,\n    /* fixed64  */ 1,\n    /* sfixed64 */ 1,\n    /* bool     */ 0,\n    /* string   */ 2\n], 2);\n\n/**\n * Allowed types for packed repeated fields with their associated wire type.\n * @type {Object.<string,number>}\n * @const\n * @property {number} double=1 Fixed64 wire type\n * @property {number} float=5 Fixed32 wire type\n * @property {number} int32=0 Varint wire type\n * @property {number} uint32=0 Varint wire type\n * @property {number} sint32=0 Varint wire type\n * @property {number} fixed32=5 Fixed32 wire type\n * @property {number} sfixed32=5 Fixed32 wire type\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n * @property {number} bool=0 Varint wire type\n */\ntypes.packed = bake([\n    /* double   */ 1,\n    /* float    */ 5,\n    /* int32    */ 0,\n    /* uint32   */ 0,\n    /* sint32   */ 0,\n    /* fixed32  */ 5,\n    /* sfixed32 */ 5,\n    /* int64    */ 0,\n    /* uint64   */ 0,\n    /* sint64   */ 0,\n    /* fixed64  */ 1,\n    /* sfixed64 */ 1,\n    /* bool     */ 0\n]);\n","\"use strict\";\nmodule.exports = Field;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Field.prototype = Object.create(ReflectionObject.prototype)).constructor = Field).className = \"Field\";\n\nvar Enum  = require(\"./enum\"),\n    types = require(\"./types\"),\n    util  = require(\"./util\");\n\nvar Type; // cyclic\n\nvar ruleRe = /^required|optional|repeated$/;\n\n/**\n * Constructs a new message field instance. Note that {@link MapField|map fields} have their own class.\n * @name Field\n * @classdesc Reflected message field.\n * @extends FieldBase\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {number} id Unique id within its namespace\n * @param {string} type Value type\n * @param {string|Object.<string,*>} [rule=\"optional\"] Field rule\n * @param {string|Object.<string,*>} [extend] Extended type if different from parent\n * @param {Object.<string,*>} [options] Declared options\n */\n\n/**\n * Constructs a field from a field descriptor.\n * @param {string} name Field name\n * @param {IField} json Field descriptor\n * @returns {Field} Created field\n * @throws {TypeError} If arguments are invalid\n */\nField.fromJSON = function fromJSON(name, json) {\n    var field = new Field(name, json.id, json.type, json.rule, json.extend, json.options, json.comment);\n    if (json.edition)\n        field._edition = json.edition;\n    field._defaultEdition = \"proto3\";  // For backwards-compatibility.\n    return field;\n};\n\n/**\n * Not an actual constructor. Use {@link Field} instead.\n * @classdesc Base class of all reflected message fields. This is not an actual class but here for the sake of having consistent type definitions.\n * @exports FieldBase\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {number} id Unique id within its namespace\n * @param {string} type Value type\n * @param {string|Object.<string,*>} [rule=\"optional\"] Field rule\n * @param {string|Object.<string,*>} [extend] Extended type if different from parent\n * @param {Object.<string,*>} [options] Declared options\n * @param {string} [comment] Comment associated with this field\n */\nfunction Field(name, id, type, rule, extend, options, comment) {\n\n    if (util.isObject(rule)) {\n        comment = extend;\n        options = rule;\n        rule = extend = undefined;\n    } else if (util.isObject(extend)) {\n        comment = options;\n        options = extend;\n        extend = undefined;\n    }\n\n    ReflectionObject.call(this, name, options);\n\n    if (!util.isInteger(id) || id < 0)\n        throw TypeError(\"id must be a non-negative integer\");\n\n    if (!util.isString(type))\n        throw TypeError(\"type must be a string\");\n\n    if (rule !== undefined && !ruleRe.test(rule = rule.toString().toLowerCase()))\n        throw TypeError(\"rule must be a string rule\");\n\n    if (extend !== undefined && !util.isString(extend))\n        throw TypeError(\"extend must be a string\");\n\n    /**\n     * Field rule, if any.\n     * @type {string|undefined}\n     */\n    if (rule === \"proto3_optional\") {\n        rule = \"optional\";\n    }\n    this.rule = rule && rule !== \"optional\" ? rule : undefined; // toJSON\n\n    /**\n     * Field type.\n     * @type {string}\n     */\n    this.type = type; // toJSON\n\n    /**\n     * Unique field id.\n     * @type {number}\n     */\n    this.id = id; // toJSON, marker\n\n    /**\n     * Extended type if different from parent.\n     * @type {string|undefined}\n     */\n    this.extend = extend || undefined; // toJSON\n\n    /**\n     * Whether this field is repeated.\n     * @type {boolean}\n     */\n    this.repeated = rule === \"repeated\";\n\n    /**\n     * Whether this field is a map or not.\n     * @type {boolean}\n     */\n    this.map = false;\n\n    /**\n     * Message this field belongs to.\n     * @type {Type|null}\n     */\n    this.message = null;\n\n    /**\n     * OneOf this field belongs to, if any,\n     * @type {OneOf|null}\n     */\n    this.partOf = null;\n\n    /**\n     * The field type's default value.\n     * @type {*}\n     */\n    this.typeDefault = null;\n\n    /**\n     * The field's default value on prototypes.\n     * @type {*}\n     */\n    this.defaultValue = null;\n\n    /**\n     * Whether this field's value should be treated as a long.\n     * @type {boolean}\n     */\n    this.long = util.Long ? types.long[type] !== undefined : /* istanbul ignore next */ false;\n\n    /**\n     * Whether this field's value is a buffer.\n     * @type {boolean}\n     */\n    this.bytes = type === \"bytes\";\n\n    /**\n     * Resolved type if not a basic type.\n     * @type {Type|Enum|null}\n     */\n    this.resolvedType = null;\n\n    /**\n     * Sister-field within the extended type if a declaring extension field.\n     * @type {Field|null}\n     */\n    this.extensionField = null;\n\n    /**\n     * Sister-field within the declaring namespace if an extended field.\n     * @type {Field|null}\n     */\n    this.declaringField = null;\n\n    /**\n     * Comment for this field.\n     * @type {string|null}\n     */\n    this.comment = comment;\n}\n\n/**\n * Determines whether this field is required.\n * @name Field#required\n * @type {boolean}\n * @readonly\n */\nObject.defineProperty(Field.prototype, \"required\", {\n    get: function() {\n        return this._features.field_presence === \"LEGACY_REQUIRED\";\n    }\n});\n\n/**\n * Determines whether this field is not required.\n * @name Field#optional\n * @type {boolean}\n * @readonly\n */\nObject.defineProperty(Field.prototype, \"optional\", {\n    get: function() {\n        return !this.required;\n    }\n});\n\n/**\n * Determines whether this field uses tag-delimited encoding.  In proto2 this\n * corresponded to group syntax.\n * @name Field#delimited\n * @type {boolean}\n * @readonly\n */\nObject.defineProperty(Field.prototype, \"delimited\", {\n    get: function() {\n        return this.resolvedType instanceof Type &&\n            this._features.message_encoding === \"DELIMITED\";\n    }\n});\n\n/**\n * Determines whether this field is packed. Only relevant when repeated.\n * @name Field#packed\n * @type {boolean}\n * @readonly\n */\nObject.defineProperty(Field.prototype, \"packed\", {\n    get: function() {\n        return this._features.repeated_field_encoding === \"PACKED\";\n    }\n});\n\n/**\n * Determines whether this field tracks presence.\n * @name Field#hasPresence\n * @type {boolean}\n * @readonly\n */\nObject.defineProperty(Field.prototype, \"hasPresence\", {\n    get: function() {\n        if (this.repeated || this.map) {\n            return false;\n        }\n        return this.partOf || // oneofs\n            this.declaringField || this.extensionField || // extensions\n            this._features.field_presence !== \"IMPLICIT\";\n    }\n});\n\n/**\n * @override\n */\nField.prototype.setOption = function setOption(name, value, ifNotSet) {\n    return ReflectionObject.prototype.setOption.call(this, name, value, ifNotSet);\n};\n\n/**\n * Field descriptor.\n * @interface IField\n * @property {string} [rule=\"optional\"] Field rule\n * @property {string} type Field type\n * @property {number} id Field id\n * @property {Object.<string,*>} [options] Field options\n */\n\n/**\n * Extension field descriptor.\n * @interface IExtensionField\n * @extends IField\n * @property {string} extend Extended type\n */\n\n/**\n * Converts this field to a field descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IField} Field descriptor\n */\nField.prototype.toJSON = function toJSON(toJSONOptions) {\n    var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n    return util.toObject([\n        \"edition\" , this._editionToJSON(),\n        \"rule\"    , this.rule !== \"optional\" && this.rule || undefined,\n        \"type\"    , this.type,\n        \"id\"      , this.id,\n        \"extend\"  , this.extend,\n        \"options\" , this.options,\n        \"comment\" , keepComments ? this.comment : undefined\n    ]);\n};\n\n/**\n * Resolves this field's type references.\n * @returns {Field} `this`\n * @throws {Error} If any reference cannot be resolved\n */\nField.prototype.resolve = function resolve() {\n\n    if (this.resolved)\n        return this;\n\n    if ((this.typeDefault = types.defaults[this.type]) === undefined) { // if not a basic type, resolve it\n        this.resolvedType = (this.declaringField ? this.declaringField.parent : this.parent).lookupTypeOrEnum(this.type);\n        if (this.resolvedType instanceof Type)\n            this.typeDefault = null;\n        else // instanceof Enum\n            this.typeDefault = this.resolvedType.values[Object.keys(this.resolvedType.values)[0]]; // first defined\n    } else if (this.options && this.options.proto3_optional) {\n        // proto3 scalar value marked optional; should default to null\n        this.typeDefault = null;\n    }\n\n    // use explicitly set default value if present\n    if (this.options && this.options[\"default\"] != null) {\n        this.typeDefault = this.options[\"default\"];\n        if (this.resolvedType instanceof Enum && typeof this.typeDefault === \"string\")\n            this.typeDefault = this.resolvedType.values[this.typeDefault];\n    }\n\n    // remove unnecessary options\n    if (this.options) {\n        if (this.options.packed !== undefined && this.resolvedType && !(this.resolvedType instanceof Enum))\n            delete this.options.packed;\n        if (!Object.keys(this.options).length)\n            this.options = undefined;\n    }\n\n    // convert to internal data type if necesssary\n    if (this.long) {\n        this.typeDefault = util.Long.fromNumber(this.typeDefault, this.type === \"uint64\" || this.type === \"fixed64\");\n\n        /* istanbul ignore else */\n        if (Object.freeze)\n            Object.freeze(this.typeDefault); // long instances are meant to be immutable anyway (i.e. use small int cache that even requires it)\n\n    } else if (this.bytes && typeof this.typeDefault === \"string\") {\n        var buf;\n        if (util.base64.test(this.typeDefault))\n            util.base64.decode(this.typeDefault, buf = util.newBuffer(util.base64.length(this.typeDefault)), 0);\n        else\n            util.utf8.write(this.typeDefault, buf = util.newBuffer(util.utf8.length(this.typeDefault)), 0);\n        this.typeDefault = buf;\n    }\n\n    // take special care of maps and repeated fields\n    if (this.map)\n        this.defaultValue = util.emptyObject;\n    else if (this.repeated)\n        this.defaultValue = util.emptyArray;\n    else\n        this.defaultValue = this.typeDefault;\n\n    // ensure proper value on prototype\n    if (this.parent instanceof Type)\n        this.parent.ctor.prototype[this.name] = this.defaultValue;\n\n    return ReflectionObject.prototype.resolve.call(this);\n};\n\n/**\n * Infers field features from legacy syntax that may have been specified differently.\n * in older editions.\n * @param {string|undefined} edition The edition this proto is on, or undefined if pre-editions\n * @returns {object} The feature values to override\n */\nField.prototype._inferLegacyProtoFeatures = function _inferLegacyProtoFeatures(edition) {\n    if (edition !== \"proto2\" && edition !== \"proto3\") {\n        return {};\n    }\n\n    var features = {};\n\n    if (this.rule === \"required\") {\n        features.field_presence = \"LEGACY_REQUIRED\";\n    }\n    if (this.parent && types.defaults[this.type] === undefined) {\n        // We can't use resolvedType because types may not have been resolved yet.  However,\n        // legacy groups are always in the same scope as the field so we don't have to do a\n        // full scan of the tree.\n        var type = this.parent.get(this.type.split(\".\").pop());\n        if (type && type instanceof Type && type.group) {\n            features.message_encoding = \"DELIMITED\";\n        }\n    }\n    if (this.getOption(\"packed\") === true) {\n        features.repeated_field_encoding = \"PACKED\";\n    } else if (this.getOption(\"packed\") === false) {\n        features.repeated_field_encoding = \"EXPANDED\";\n    }\n    return features;\n};\n\n/**\n * @override\n */\nField.prototype._resolveFeatures = function _resolveFeatures(edition) {\n    return ReflectionObject.prototype._resolveFeatures.call(this, this._edition || edition);\n};\n\n/**\n * Decorator function as returned by {@link Field.d} and {@link MapField.d} (TypeScript).\n * @typedef FieldDecorator\n * @type {function}\n * @param {Object} prototype Target prototype\n * @param {string} fieldName Field name\n * @returns {undefined}\n */\n\n/**\n * Field decorator (TypeScript).\n * @name Field.d\n * @function\n * @param {number} fieldId Field id\n * @param {\"double\"|\"float\"|\"int32\"|\"uint32\"|\"sint32\"|\"fixed32\"|\"sfixed32\"|\"int64\"|\"uint64\"|\"sint64\"|\"fixed64\"|\"sfixed64\"|\"string\"|\"bool\"|\"bytes\"|Object} fieldType Field type\n * @param {\"optional\"|\"required\"|\"repeated\"} [fieldRule=\"optional\"] Field rule\n * @param {T} [defaultValue] Default value\n * @returns {FieldDecorator} Decorator function\n * @template T extends number | number[] | Long | Long[] | string | string[] | boolean | boolean[] | Uint8Array | Uint8Array[] | Buffer | Buffer[]\n */\nField.d = function decorateField(fieldId, fieldType, fieldRule, defaultValue) {\n\n    // submessage: decorate the submessage and use its name as the type\n    if (typeof fieldType === \"function\")\n        fieldType = util.decorateType(fieldType).name;\n\n    // enum reference: create a reflected copy of the enum and keep reuseing it\n    else if (fieldType && typeof fieldType === \"object\")\n        fieldType = util.decorateEnum(fieldType).name;\n\n    return function fieldDecorator(prototype, fieldName) {\n        util.decorateType(prototype.constructor)\n            .add(new Field(fieldName, fieldId, fieldType, fieldRule, { \"default\": defaultValue }));\n    };\n};\n\n/**\n * Field decorator (TypeScript).\n * @name Field.d\n * @function\n * @param {number} fieldId Field id\n * @param {Constructor<T>|string} fieldType Field type\n * @param {\"optional\"|\"required\"|\"repeated\"} [fieldRule=\"optional\"] Field rule\n * @returns {FieldDecorator} Decorator function\n * @template T extends Message<T>\n * @variation 2\n */\n// like Field.d but without a default value\n\n// Sets up cyclic dependencies (called in index-light)\nField._configure = function configure(Type_) {\n    Type = Type_;\n};\n","\"use strict\";\nmodule.exports = OneOf;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((OneOf.prototype = Object.create(ReflectionObject.prototype)).constructor = OneOf).className = \"OneOf\";\n\nvar Field = require(\"./field\"),\n    util  = require(\"./util\");\n\n/**\n * Constructs a new oneof instance.\n * @classdesc Reflected oneof.\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Oneof name\n * @param {string[]|Object.<string,*>} [fieldNames] Field names\n * @param {Object.<string,*>} [options] Declared options\n * @param {string} [comment] Comment associated with this field\n */\nfunction OneOf(name, fieldNames, options, comment) {\n    if (!Array.isArray(fieldNames)) {\n        options = fieldNames;\n        fieldNames = undefined;\n    }\n    ReflectionObject.call(this, name, options);\n\n    /* istanbul ignore if */\n    if (!(fieldNames === undefined || Array.isArray(fieldNames)))\n        throw TypeError(\"fieldNames must be an Array\");\n\n    /**\n     * Field names that belong to this oneof.\n     * @type {string[]}\n     */\n    this.oneof = fieldNames || []; // toJSON, marker\n\n    /**\n     * Fields that belong to this oneof as an array for iteration.\n     * @type {Field[]}\n     * @readonly\n     */\n    this.fieldsArray = []; // declared readonly for conformance, possibly not yet added to parent\n\n    /**\n     * Comment for this field.\n     * @type {string|null}\n     */\n    this.comment = comment;\n}\n\n/**\n * Oneof descriptor.\n * @interface IOneOf\n * @property {Array.<string>} oneof Oneof field names\n * @property {Object.<string,*>} [options] Oneof options\n */\n\n/**\n * Constructs a oneof from a oneof descriptor.\n * @param {string} name Oneof name\n * @param {IOneOf} json Oneof descriptor\n * @returns {OneOf} Created oneof\n * @throws {TypeError} If arguments are invalid\n */\nOneOf.fromJSON = function fromJSON(name, json) {\n    return new OneOf(name, json.oneof, json.options, json.comment);\n};\n\n/**\n * Converts this oneof to a oneof descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IOneOf} Oneof descriptor\n */\nOneOf.prototype.toJSON = function toJSON(toJSONOptions) {\n    var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n    return util.toObject([\n        \"options\" , this.options,\n        \"oneof\"   , this.oneof,\n        \"comment\" , keepComments ? this.comment : undefined\n    ]);\n};\n\n/**\n * Adds the fields of the specified oneof to the parent if not already done so.\n * @param {OneOf} oneof The oneof\n * @returns {undefined}\n * @inner\n * @ignore\n */\nfunction addFieldsToParent(oneof) {\n    if (oneof.parent)\n        for (var i = 0; i < oneof.fieldsArray.length; ++i)\n            if (!oneof.fieldsArray[i].parent)\n                oneof.parent.add(oneof.fieldsArray[i]);\n}\n\n/**\n * Adds a field to this oneof and removes it from its current parent, if any.\n * @param {Field} field Field to add\n * @returns {OneOf} `this`\n */\nOneOf.prototype.add = function add(field) {\n\n    /* istanbul ignore if */\n    if (!(field instanceof Field))\n        throw TypeError(\"field must be a Field\");\n\n    if (field.parent && field.parent !== this.parent)\n        field.parent.remove(field);\n    this.oneof.push(field.name);\n    this.fieldsArray.push(field);\n    field.partOf = this; // field.parent remains null\n    addFieldsToParent(this);\n    return this;\n};\n\n/**\n * Removes a field from this oneof and puts it back to the oneof's parent.\n * @param {Field} field Field to remove\n * @returns {OneOf} `this`\n */\nOneOf.prototype.remove = function remove(field) {\n\n    /* istanbul ignore if */\n    if (!(field instanceof Field))\n        throw TypeError(\"field must be a Field\");\n\n    var index = this.fieldsArray.indexOf(field);\n\n    /* istanbul ignore if */\n    if (index < 0)\n        throw Error(field + \" is not a member of \" + this);\n\n    this.fieldsArray.splice(index, 1);\n    index = this.oneof.indexOf(field.name);\n\n    /* istanbul ignore else */\n    if (index > -1) // theoretical\n        this.oneof.splice(index, 1);\n\n    field.partOf = null;\n    return this;\n};\n\n/**\n * @override\n */\nOneOf.prototype.onAdd = function onAdd(parent) {\n    ReflectionObject.prototype.onAdd.call(this, parent);\n    var self = this;\n    // Collect present fields\n    for (var i = 0; i < this.oneof.length; ++i) {\n        var field = parent.get(this.oneof[i]);\n        if (field && !field.partOf) {\n            field.partOf = self;\n            self.fieldsArray.push(field);\n        }\n    }\n    // Add not yet present fields\n    addFieldsToParent(this);\n};\n\n/**\n * @override\n */\nOneOf.prototype.onRemove = function onRemove(parent) {\n    for (var i = 0, field; i < this.fieldsArray.length; ++i)\n        if ((field = this.fieldsArray[i]).parent)\n            field.parent.remove(field);\n    ReflectionObject.prototype.onRemove.call(this, parent);\n};\n\n/**\n * Determines whether this field corresponds to a synthetic oneof created for\n * a proto3 optional field.  No behavioral logic should depend on this, but it\n * can be relevant for reflection.\n * @name OneOf#isProto3Optional\n * @type {boolean}\n * @readonly\n */\nObject.defineProperty(OneOf.prototype, \"isProto3Optional\", {\n    get: function() {\n        if (this.fieldsArray == null || this.fieldsArray.length !== 1) {\n            return false;\n        }\n\n        var field = this.fieldsArray[0];\n        return field.options != null && field.options[\"proto3_optional\"] === true;\n    }\n});\n\n/**\n * Decorator function as returned by {@link OneOf.d} (TypeScript).\n * @typedef OneOfDecorator\n * @type {function}\n * @param {Object} prototype Target prototype\n * @param {string} oneofName OneOf name\n * @returns {undefined}\n */\n\n/**\n * OneOf decorator (TypeScript).\n * @function\n * @param {...string} fieldNames Field names\n * @returns {OneOfDecorator} Decorator function\n * @template T extends string\n */\nOneOf.d = function decorateOneOf() {\n    var fieldNames = new Array(arguments.length),\n        index = 0;\n    while (index < arguments.length)\n        fieldNames[index] = arguments[index++];\n    return function oneOfDecorator(prototype, oneofName) {\n        util.decorateType(prototype.constructor)\n            .add(new OneOf(oneofName, fieldNames));\n        Object.defineProperty(prototype, oneofName, {\n            get: util.oneOfGetter(fieldNames),\n            set: util.oneOfSetter(fieldNames)\n        });\n    };\n};\n","\"use strict\";\nmodule.exports = ReflectionObject;\n\nReflectionObject.className = \"ReflectionObject\";\n\nconst OneOf = require(\"./oneof\");\nvar util = require(\"./util\");\n\nvar Root; // cyclic\n\n/* eslint-disable no-warning-comments */\n// TODO: Replace with embedded proto.\nvar editions2023Defaults = {enum_type: \"OPEN\", field_presence: \"EXPLICIT\", json_format: \"ALLOW\", message_encoding: \"LENGTH_PREFIXED\", repeated_field_encoding: \"PACKED\", utf8_validation: \"VERIFY\"};\nvar proto2Defaults = {enum_type: \"CLOSED\", field_presence: \"EXPLICIT\", json_format: \"LEGACY_BEST_EFFORT\", message_encoding: \"LENGTH_PREFIXED\", repeated_field_encoding: \"EXPANDED\", utf8_validation: \"NONE\"};\nvar proto3Defaults = {enum_type: \"OPEN\", field_presence: \"IMPLICIT\", json_format: \"ALLOW\", message_encoding: \"LENGTH_PREFIXED\", repeated_field_encoding: \"PACKED\", utf8_validation: \"VERIFY\"};\n\n/**\n * Constructs a new reflection object instance.\n * @classdesc Base class of all reflection objects.\n * @constructor\n * @param {string} name Object name\n * @param {Object.<string,*>} [options] Declared options\n * @abstract\n */\nfunction ReflectionObject(name, options) {\n\n    if (!util.isString(name))\n        throw TypeError(\"name must be a string\");\n\n    if (options && !util.isObject(options))\n        throw TypeError(\"options must be an object\");\n\n    /**\n     * Options.\n     * @type {Object.<string,*>|undefined}\n     */\n    this.options = options; // toJSON\n\n    /**\n     * Parsed Options.\n     * @type {Array.<Object.<string,*>>|undefined}\n     */\n    this.parsedOptions = null;\n\n    /**\n     * Unique name within its namespace.\n     * @type {string}\n     */\n    this.name = name;\n\n    /**\n     * The edition specified for this object.  Only relevant for top-level objects.\n     * @type {string}\n     * @private\n     */\n    this._edition = null;\n\n    /**\n     * The default edition to use for this object if none is specified.  For legacy reasons,\n     * this is proto2 except in the JSON parsing case where it was proto3.\n     * @type {string}\n     * @private\n     */\n    this._defaultEdition = \"proto2\";\n\n    /**\n     * Resolved Features.\n     * @type {object}\n     * @private\n     */\n    this._features = {};\n\n    /**\n     * Whether or not features have been resolved.\n     * @type {boolean}\n     * @private\n     */\n    this._featuresResolved = false;\n\n    /**\n     * Parent namespace.\n     * @type {Namespace|null}\n     */\n    this.parent = null;\n\n    /**\n     * Whether already resolved or not.\n     * @type {boolean}\n     */\n    this.resolved = false;\n\n    /**\n     * Comment text, if any.\n     * @type {string|null}\n     */\n    this.comment = null;\n\n    /**\n     * Defining file name.\n     * @type {string|null}\n     */\n    this.filename = null;\n}\n\nObject.defineProperties(ReflectionObject.prototype, {\n\n    /**\n     * Reference to the root namespace.\n     * @name ReflectionObject#root\n     * @type {Root}\n     * @readonly\n     */\n    root: {\n        get: function() {\n            var ptr = this;\n            while (ptr.parent !== null)\n                ptr = ptr.parent;\n            return ptr;\n        }\n    },\n\n    /**\n     * Full name including leading dot.\n     * @name ReflectionObject#fullName\n     * @type {string}\n     * @readonly\n     */\n    fullName: {\n        get: function() {\n            var path = [ this.name ],\n                ptr = this.parent;\n            while (ptr) {\n                path.unshift(ptr.name);\n                ptr = ptr.parent;\n            }\n            return path.join(\".\");\n        }\n    }\n});\n\n/**\n * Converts this reflection object to its descriptor representation.\n * @returns {Object.<string,*>} Descriptor\n * @abstract\n */\nReflectionObject.prototype.toJSON = /* istanbul ignore next */ function toJSON() {\n    throw Error(); // not implemented, shouldn't happen\n};\n\n/**\n * Called when this object is added to a parent.\n * @param {ReflectionObject} parent Parent added to\n * @returns {undefined}\n */\nReflectionObject.prototype.onAdd = function onAdd(parent) {\n    if (this.parent && this.parent !== parent)\n        this.parent.remove(this);\n    this.parent = parent;\n    this.resolved = false;\n    var root = parent.root;\n    if (root instanceof Root)\n        root._handleAdd(this);\n};\n\n/**\n * Called when this object is removed from a parent.\n * @param {ReflectionObject} parent Parent removed from\n * @returns {undefined}\n */\nReflectionObject.prototype.onRemove = function onRemove(parent) {\n    var root = parent.root;\n    if (root instanceof Root)\n        root._handleRemove(this);\n    this.parent = null;\n    this.resolved = false;\n};\n\n/**\n * Resolves this objects type references.\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.resolve = function resolve() {\n    if (this.resolved)\n        return this;\n    if (this.root instanceof Root)\n        this.resolved = true; // only if part of a root\n    return this;\n};\n\n/**\n * Resolves this objects editions features.\n * @param {string} edition The edition we're currently resolving for.\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype._resolveFeaturesRecursive = function _resolveFeaturesRecursive(edition) {\n    return this._resolveFeatures(this._edition || edition);\n};\n\n/**\n * Resolves child features from parent features\n * @param {string} edition The edition we're currently resolving for.\n * @returns {undefined}\n */\nReflectionObject.prototype._resolveFeatures = function _resolveFeatures(edition) {\n    if (this._featuresResolved) {\n        return;\n    }\n\n    var defaults = {};\n\n    /* istanbul ignore if */\n    if (!edition) {\n        throw new Error(\"Unknown edition for \" + this.fullName);\n    }\n\n    var protoFeatures = util.merge({}, this.options && this.options.features,\n        this._inferLegacyProtoFeatures(edition));\n\n    if (this._edition) {\n        // For a namespace marked with a specific edition, reset defaults.\n        /* istanbul ignore else */\n        if (edition === \"proto2\") {\n            defaults = Object.assign({}, proto2Defaults);\n        } else if (edition === \"proto3\") {\n            defaults = Object.assign({}, proto3Defaults);\n        } else if (edition === \"2023\") {\n            defaults = Object.assign({}, editions2023Defaults);\n        } else {\n            throw new Error(\"Unknown edition: \" + edition);\n        }\n        this._features = util.merge(defaults, protoFeatures);\n        this._featuresResolved = true;\n        return;\n    }\n\n    // fields in Oneofs aren't actually children of them, so we have to\n    // special-case it\n    /* istanbul ignore else */\n    if (this.partOf instanceof OneOf) {\n        var lexicalParentFeaturesCopy = util.merge({}, this.partOf._features);\n        this._features = util.merge(lexicalParentFeaturesCopy, protoFeatures);\n    } else if (this.declaringField) {\n        // Skip feature resolution of sister fields.\n    } else if (this.parent) {\n        var parentFeaturesCopy = util.merge({}, this.parent._features);\n        this._features = util.merge(parentFeaturesCopy, protoFeatures);\n    } else {\n        throw new Error(\"Unable to find a parent for \" + this.fullName);\n    }\n    if (this.extensionField) {\n        // Sister fields should have the same features as their extensions.\n        this.extensionField._features = this._features;\n    }\n    this._featuresResolved = true;\n};\n\n/**\n * Infers features from legacy syntax that may have been specified differently.\n * in older editions.\n * @param {string|undefined} edition The edition this proto is on, or undefined if pre-editions\n * @returns {object} The feature values to override\n */\nReflectionObject.prototype._inferLegacyProtoFeatures = function _inferLegacyProtoFeatures(/*edition*/) {\n    return {};\n};\n\n/**\n * Gets an option value.\n * @param {string} name Option name\n * @returns {*} Option value or `undefined` if not set\n */\nReflectionObject.prototype.getOption = function getOption(name) {\n    if (this.options)\n        return this.options[name];\n    return undefined;\n};\n\n/**\n * Sets an option.\n * @param {string} name Option name\n * @param {*} value Option value\n * @param {boolean|undefined} [ifNotSet] Sets the option only if it isn't currently set\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.setOption = function setOption(name, value, ifNotSet) {\n    if (name === \"__proto__\")\n        return this;\n    if (!this.options)\n        this.options = {};\n    if (/^features\\./.test(name)) {\n        util.setProperty(this.options, name, value, ifNotSet);\n    } else if (!ifNotSet || this.options[name] === undefined) {\n        if (this.getOption(name) !== value) this.resolved = false;\n        this.options[name] = value;\n    }\n\n    return this;\n};\n\n/**\n * Sets a parsed option.\n * @param {string} name parsed Option name\n * @param {*} value Option value\n * @param {string} propName dot '.' delimited full path of property within the option to set. if undefined\\empty, will add a new option with that value\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.setParsedOption = function setParsedOption(name, value, propName) {\n    if (name === \"__proto__\")\n        return this;\n    if (!this.parsedOptions) {\n        this.parsedOptions = [];\n    }\n    var parsedOptions = this.parsedOptions;\n    if (propName) {\n        // If setting a sub property of an option then try to merge it\n        // with an existing option\n        var opt = parsedOptions.find(function (opt) {\n            return Object.prototype.hasOwnProperty.call(opt, name);\n        });\n        if (opt) {\n            // If we found an existing option - just merge the property value\n            // (If it's a feature, will just write over)\n            var newValue = opt[name];\n            util.setProperty(newValue, propName, value);\n        } else {\n            // otherwise, create a new option, set its property and add it to the list\n            opt = {};\n            opt[name] = util.setProperty({}, propName, value);\n            parsedOptions.push(opt);\n        }\n    } else {\n        // Always create a new option when setting the value of the option itself\n        var newOpt = {};\n        newOpt[name] = value;\n        parsedOptions.push(newOpt);\n    }\n\n    return this;\n};\n\n/**\n * Sets multiple options.\n * @param {Object.<string,*>} options Options to set\n * @param {boolean} [ifNotSet] Sets an option only if it isn't currently set\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.setOptions = function setOptions(options, ifNotSet) {\n    if (options)\n        for (var keys = Object.keys(options), i = 0; i < keys.length; ++i)\n            this.setOption(keys[i], options[keys[i]], ifNotSet);\n    return this;\n};\n\n/**\n * Converts this instance to its string representation.\n * @returns {string} Class name[, space, full name]\n */\nReflectionObject.prototype.toString = function toString() {\n    var className = this.constructor.className,\n        fullName  = this.fullName;\n    if (fullName.length)\n        return className + \" \" + fullName;\n    return className;\n};\n\n/**\n * Converts the edition this object is pinned to for JSON format.\n * @returns {string|undefined} The edition string for JSON representation\n */\nReflectionObject.prototype._editionToJSON = function _editionToJSON() {\n    if (!this._edition || this._edition === \"proto3\") {\n        // Avoid emitting proto3 since we need to default to it for backwards\n        // compatibility anyway.\n        return undefined;\n    }\n    return this._edition;\n};\n\n// Sets up cyclic dependencies (called in index-light)\nReflectionObject._configure = function(Root_) {\n    Root = Root_;\n};\n","\"use strict\";\nmodule.exports = Enum;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Enum.prototype = Object.create(ReflectionObject.prototype)).constructor = Enum).className = \"Enum\";\n\nvar Namespace = require(\"./namespace\"),\n    util = require(\"./util\");\n\n/**\n * Constructs a new enum instance.\n * @classdesc Reflected enum.\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {Object.<string,number>} [values] Enum values as an object, by name\n * @param {Object.<string,*>} [options] Declared options\n * @param {string} [comment] The comment for this enum\n * @param {Object.<string,string>} [comments] The value comments for this enum\n * @param {Object.<string,Object<string,*>>|undefined} [valuesOptions] The value options for this enum\n */\nfunction Enum(name, values, options, comment, comments, valuesOptions) {\n    ReflectionObject.call(this, name, options);\n\n    if (values && typeof values !== \"object\")\n        throw TypeError(\"values must be an object\");\n\n    /**\n     * Enum values by id.\n     * @type {Object.<number,string>}\n     */\n    this.valuesById = {};\n\n    /**\n     * Enum values by name.\n     * @type {Object.<string,number>}\n     */\n    this.values = Object.create(this.valuesById); // toJSON, marker\n\n    /**\n     * Enum comment text.\n     * @type {string|null}\n     */\n    this.comment = comment;\n\n    /**\n     * Value comment texts, if any.\n     * @type {Object.<string,string>}\n     */\n    this.comments = comments || {};\n\n    /**\n     * Values options, if any\n     * @type {Object<string, Object<string, *>>|undefined}\n     */\n    this.valuesOptions = valuesOptions;\n\n    /**\n     * Resolved values features, if any\n     * @type {Object<string, Object<string, *>>|undefined}\n     */\n    this._valuesFeatures = {};\n\n    /**\n     * Reserved ranges, if any.\n     * @type {Array.<number[]|string>}\n     */\n    this.reserved = undefined; // toJSON\n\n    // Note that values inherit valuesById on their prototype which makes them a TypeScript-\n    // compatible enum. This is used by pbts to write actual enum definitions that work for\n    // static and reflection code alike instead of emitting generic object definitions.\n\n    if (values)\n        for (var keys = Object.keys(values), i = 0; i < keys.length; ++i)\n            if (keys[i] !== \"__proto__\" && typeof values[keys[i]] === \"number\") // use forward entries only\n                this.valuesById[ this.values[keys[i]] = values[keys[i]] ] = keys[i];\n}\n\n/**\n * @override\n */\nEnum.prototype._resolveFeatures = function _resolveFeatures(edition) {\n    edition = this._edition || edition;\n    ReflectionObject.prototype._resolveFeatures.call(this, edition);\n\n    Object.keys(this.values).forEach(key => {\n        var parentFeaturesCopy = util.merge({}, this._features);\n        this._valuesFeatures[key] = util.merge(parentFeaturesCopy, this.valuesOptions && this.valuesOptions[key] && this.valuesOptions[key].features || {});\n    });\n\n    return this;\n};\n\n/**\n * Enum descriptor.\n * @interface IEnum\n * @property {Object.<string,number>} values Enum values\n * @property {Object.<string,*>} [options] Enum options\n */\n\n/**\n * Constructs an enum from an enum descriptor.\n * @param {string} name Enum name\n * @param {IEnum} json Enum descriptor\n * @returns {Enum} Created enum\n * @throws {TypeError} If arguments are invalid\n */\nEnum.fromJSON = function fromJSON(name, json) {\n    var enm = new Enum(name, json.values, json.options, json.comment, json.comments);\n    enm.reserved = json.reserved;\n    if (json.edition)\n        enm._edition = json.edition;\n    enm._defaultEdition = \"proto3\";  // For backwards-compatibility.\n    return enm;\n};\n\n/**\n * Converts this enum to an enum descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IEnum} Enum descriptor\n */\nEnum.prototype.toJSON = function toJSON(toJSONOptions) {\n    var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n    return util.toObject([\n        \"edition\"       , this._editionToJSON(),\n        \"options\"       , this.options,\n        \"valuesOptions\" , this.valuesOptions,\n        \"values\"        , this.values,\n        \"reserved\"      , this.reserved && this.reserved.length ? this.reserved : undefined,\n        \"comment\"       , keepComments ? this.comment : undefined,\n        \"comments\"      , keepComments ? this.comments : undefined\n    ]);\n};\n\n/**\n * Adds a value to this enum.\n * @param {string} name Value name\n * @param {number} id Value id\n * @param {string} [comment] Comment, if any\n * @param {Object.<string, *>|undefined} [options] Options, if any\n * @returns {Enum} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If there is already a value with this name or id\n */\nEnum.prototype.add = function add(name, id, comment, options) {\n    // utilized by the parser but not by .fromJSON\n\n    if (!util.isString(name))\n        throw TypeError(\"name must be a string\");\n\n    if (!util.isInteger(id))\n        throw TypeError(\"id must be an integer\");\n\n    if (name === \"__proto__\")\n        return this;\n\n    if (this.values[name] !== undefined)\n        throw Error(\"duplicate name '\" + name + \"' in \" + this);\n\n    if (this.isReservedId(id))\n        throw Error(\"id \" + id + \" is reserved in \" + this);\n\n    if (this.isReservedName(name))\n        throw Error(\"name '\" + name + \"' is reserved in \" + this);\n\n    if (this.valuesById[id] !== undefined) {\n        if (!(this.options && this.options.allow_alias))\n            throw Error(\"duplicate id \" + id + \" in \" + this);\n        this.values[name] = id;\n    } else\n        this.valuesById[this.values[name] = id] = name;\n\n    if (options) {\n        if (this.valuesOptions === undefined)\n            this.valuesOptions = {};\n        this.valuesOptions[name] = options || null;\n    }\n\n    this.comments[name] = comment || null;\n    return this;\n};\n\n/**\n * Removes a value from this enum\n * @param {string} name Value name\n * @returns {Enum} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If `name` is not a name of this enum\n */\nEnum.prototype.remove = function remove(name) {\n\n    if (!util.isString(name))\n        throw TypeError(\"name must be a string\");\n\n    var val = this.values[name];\n    if (val == null)\n        throw Error(\"name '\" + name + \"' does not exist in \" + this);\n\n    delete this.valuesById[val];\n    delete this.values[name];\n    delete this.comments[name];\n    if (this.valuesOptions)\n        delete this.valuesOptions[name];\n\n    return this;\n};\n\n/**\n * Tests if the specified id is reserved.\n * @param {number} id Id to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nEnum.prototype.isReservedId = function isReservedId(id) {\n    return Namespace.isReservedId(this.reserved, id);\n};\n\n/**\n * Tests if the specified name is reserved.\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nEnum.prototype.isReservedName = function isReservedName(name) {\n    return Namespace.isReservedName(this.reserved, name);\n};\n","\"use strict\";\nmodule.exports = encoder;\n\nvar Enum     = require(\"./enum\"),\n    types    = require(\"./types\"),\n    util     = require(\"./util\");\n\n/**\n * Generates a partial message type encoder.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {number} fieldIndex Field index\n * @param {string} ref Variable reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genTypePartial(gen, field, fieldIndex, ref) {\n    return field.delimited\n        ? gen(\"types[%i].encode(%s,w.uint32(%i),q+1).uint32(%i)\", fieldIndex, ref, (field.id << 3 | 3) >>> 0, (field.id << 3 | 4) >>> 0)\n        : gen(\"types[%i].encode(%s,w.uint32(%i).fork(),q+1).ldelim()\", fieldIndex, ref, (field.id << 3 | 2) >>> 0);\n}\n\n/**\n * Generates an encoder specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nfunction encoder(mtype) {\n    /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n    var gen = util.codegen([\"m\", \"w\", \"q\"], mtype.name + \"$encode\")\n    (\"if(!w)\")\n        (\"w=Writer.create()\")\n    (\"if(q===undefined)q=0\")\n    (\"if(q>util.recursionLimit)\")\n        (\"throw Error(\\\"max depth exceeded\\\")\");\n\n    var i, ref;\n\n    // \"when a message is serialized its known fields should be written sequentially by field number\"\n    var fields = /* initializes */ mtype.fieldsArray.slice().sort(util.compareFieldsById);\n\n    for (var i = 0; i < fields.length; ++i) {\n        var field    = fields[i].resolve(),\n            index    = mtype._fieldsArray.indexOf(field),\n            type     = field.resolvedType instanceof Enum ? \"int32\" : field.type,\n            wireType = types.basic[type];\n            ref      = \"m\" + util.safeProp(field.name);\n\n        // Map fields\n        if (field.map) {\n            gen\n    (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j)){\", ref, field.name) // !== undefined && !== null\n        (\"for(var ks=Object.keys(%s),i=0;i<ks.length;++i){\", ref)\n            (\"w.uint32(%i).fork().uint32(%i).%s(ks[i])\", (field.id << 3 | 2) >>> 0, 8 | types.mapKey[field.keyType], field.keyType);\n            if (wireType === undefined) gen\n            (\"types[%i].encode(%s[ks[i]],w.uint32(18).fork(),q+1).ldelim().ldelim()\", index, ref); // can't be groups\n            else gen\n            (\".uint32(%i).%s(%s[ks[i]]).ldelim()\", 16 | wireType, type, ref);\n            gen\n        (\"}\")\n    (\"}\");\n\n            // Repeated fields\n        } else if (field.repeated) { gen\n    (\"if(%s!=null&&%s.length){\", ref, ref); // !== undefined && !== null\n\n            // Packed repeated\n            if (field.packed && types.packed[type] !== undefined) { gen\n\n        (\"w.uint32(%i).fork()\", (field.id << 3 | 2) >>> 0)\n        (\"for(var i=0;i<%s.length;++i)\", ref)\n            (\"w.%s(%s[i])\", type, ref)\n        (\"w.ldelim()\");\n\n            // Non-packed\n            } else { gen\n\n        (\"for(var i=0;i<%s.length;++i)\", ref);\n                if (wireType === undefined)\n            genTypePartial(gen, field, index, ref + \"[i]\");\n                else gen\n            (\"w.uint32(%i).%s(%s[i])\", (field.id << 3 | wireType) >>> 0, type, ref);\n\n            } gen\n    (\"}\");\n\n        // Non-repeated\n        } else {\n            if (field.optional) gen\n    (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j))\", ref, field.name); // !== undefined && !== null\n\n            if (wireType === undefined)\n        genTypePartial(gen, field, index, ref);\n            else gen\n        (\"w.uint32(%i).%s(%s)\", (field.id << 3 | wireType) >>> 0, type, ref);\n\n        }\n    }\n\n    return gen\n    (\"return w\");\n    /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n}\n","\"use strict\";\nvar protobuf = module.exports = require(\"./index-minimal\");\n\nprotobuf.build = \"light\";\n\n/**\n * A node-style callback as used by {@link load} and {@link Root#load}.\n * @typedef LoadCallback\n * @type {function}\n * @param {Error|null} error Error, if any, otherwise `null`\n * @param {Root} [root] Root, if there hasn't been an error\n * @returns {undefined}\n */\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into a common root namespace and calls the callback.\n * @param {string|string[]} filename One or multiple files to load\n * @param {Root} root Root namespace, defaults to create a new one if omitted.\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n * @see {@link Root#load}\n */\nfunction load(filename, root, callback) {\n    if (typeof root === \"function\") {\n        callback = root;\n        root = new protobuf.Root();\n    } else if (!root)\n        root = new protobuf.Root();\n    return root.load(filename, callback);\n}\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into a common root namespace and calls the callback.\n * @name load\n * @function\n * @param {string|string[]} filename One or multiple files to load\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n * @see {@link Root#load}\n * @variation 2\n */\n// function load(filename:string, callback:LoadCallback):undefined\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into a common root namespace and returns a promise.\n * @name load\n * @function\n * @param {string|string[]} filename One or multiple files to load\n * @param {Root} [root] Root namespace, defaults to create a new one if omitted.\n * @returns {Promise<Root>} Promise\n * @see {@link Root#load}\n * @variation 3\n */\n// function load(filename:string, [root:Root]):Promise<Root>\n\nprotobuf.load = load;\n\n/**\n * Synchronously loads one or multiple .proto or preprocessed .json files into a common root namespace (node only).\n * @param {string|string[]} filename One or multiple files to load\n * @param {Root} [root] Root namespace, defaults to create a new one if omitted.\n * @returns {Root} Root namespace\n * @throws {Error} If synchronous fetching is not supported (i.e. in browsers) or if a file's syntax is invalid\n * @see {@link Root#loadSync}\n */\nfunction loadSync(filename, root) {\n    if (!root)\n        root = new protobuf.Root();\n    return root.loadSync(filename);\n}\n\nprotobuf.loadSync = loadSync;\n\n// Serialization\nprotobuf.encoder          = require(\"./encoder\");\nprotobuf.decoder          = require(\"./decoder\");\nprotobuf.verifier         = require(\"./verifier\");\nprotobuf.converter        = require(\"./converter\");\n\n// Reflection\nprotobuf.ReflectionObject = require(\"./object\");\nprotobuf.Namespace        = require(\"./namespace\");\nprotobuf.Root             = require(\"./root\");\nprotobuf.Enum             = require(\"./enum\");\nprotobuf.Type             = require(\"./type\");\nprotobuf.Field            = require(\"./field\");\nprotobuf.OneOf            = require(\"./oneof\");\nprotobuf.MapField         = require(\"./mapfield\");\nprotobuf.Service          = require(\"./service\");\nprotobuf.Method           = require(\"./method\");\n\n// Runtime\nprotobuf.Message          = require(\"./message\");\nprotobuf.wrappers         = require(\"./wrappers\");\n\n// Utility\nprotobuf.types            = require(\"./types\");\nprotobuf.util             = require(\"./util\");\n\n// Set up possibly cyclic reflection dependencies\nprotobuf.ReflectionObject._configure(protobuf.Root);\nprotobuf.Namespace._configure(protobuf.Type, protobuf.Service, protobuf.Enum);\nprotobuf.Root._configure(protobuf.Type);\nprotobuf.Field._configure(protobuf.Type);\n","\"use strict\";\nmodule.exports = tokenize;\n\nvar delimRe        = /[\\s{}=;:[\\],'\"()<>]/g,\n    stringDoubleRe = /(?:\"([^\"\\\\]*(?:\\\\.[^\"\\\\]*)*)\")/g,\n    stringSingleRe = /(?:'([^'\\\\]*(?:\\\\.[^'\\\\]*)*)')/g;\n\nvar setCommentRe = /^ *[*/]+ */,\n    setCommentAltRe = /^\\s*\\*?\\/*/,\n    setCommentSplitRe = /\\n/g,\n    whitespaceRe = /\\s/,\n    unescapeRe = /\\\\(.?)/g;\n\nvar unescapeMap = {\n    \"0\": \"\\0\",\n    \"r\": \"\\r\",\n    \"n\": \"\\n\",\n    \"t\": \"\\t\"\n};\n\n/**\n * Unescapes a string.\n * @param {string} str String to unescape\n * @returns {string} Unescaped string\n * @property {Object.<string,string>} map Special characters map\n * @memberof tokenize\n */\nfunction unescape(str) {\n    return str.replace(unescapeRe, function($0, $1) {\n        switch ($1) {\n            case \"\\\\\":\n            case \"\":\n                return $1;\n            default:\n                return unescapeMap[$1] || \"\";\n        }\n    });\n}\n\ntokenize.unescape = unescape;\n\n/**\n * Gets the next token and advances.\n * @typedef TokenizerHandleNext\n * @type {function}\n * @returns {string|null} Next token or `null` on eof\n */\n\n/**\n * Peeks for the next token.\n * @typedef TokenizerHandlePeek\n * @type {function}\n * @returns {string|null} Next token or `null` on eof\n */\n\n/**\n * Pushes a token back to the stack.\n * @typedef TokenizerHandlePush\n * @type {function}\n * @param {string} token Token\n * @returns {undefined}\n */\n\n/**\n * Skips the next token.\n * @typedef TokenizerHandleSkip\n * @type {function}\n * @param {string} expected Expected token\n * @param {boolean} [optional=false] If optional\n * @returns {boolean} Whether the token matched\n * @throws {Error} If the token didn't match and is not optional\n */\n\n/**\n * Gets the comment on the previous line or, alternatively, the line comment on the specified line.\n * @typedef TokenizerHandleCmnt\n * @type {function}\n * @param {number} [line] Line number\n * @returns {string|null} Comment text or `null` if none\n */\n\n/**\n * Handle object returned from {@link tokenize}.\n * @interface ITokenizerHandle\n * @property {TokenizerHandleNext} next Gets the next token and advances (`null` on eof)\n * @property {TokenizerHandlePeek} peek Peeks for the next token (`null` on eof)\n * @property {TokenizerHandlePush} push Pushes a token back to the stack\n * @property {TokenizerHandleSkip} skip Skips a token, returns its presence and advances or, if non-optional and not present, throws\n * @property {TokenizerHandleCmnt} cmnt Gets the comment on the previous line or the line comment on the specified line, if any\n * @property {number} line Current line number\n */\n\n/**\n * Tokenizes the given .proto source and returns an object with useful utility functions.\n * @param {string} source Source contents\n * @param {boolean} alternateCommentMode Whether we should activate alternate comment parsing mode.\n * @returns {ITokenizerHandle} Tokenizer handle\n */\nfunction tokenize(source, alternateCommentMode) {\n    /* eslint-disable callback-return */\n    source = source.toString();\n\n    var offset = 0,\n        length = source.length,\n        line = 1,\n        lastCommentLine = 0,\n        comments = {};\n\n    var stack = [];\n\n    var stringDelim = null;\n\n    /* istanbul ignore next */\n    /**\n     * Creates an error for illegal syntax.\n     * @param {string} subject Subject\n     * @returns {Error} Error created\n     * @inner\n     */\n    function illegal(subject) {\n        return Error(\"illegal \" + subject + \" (line \" + line + \")\");\n    }\n\n    /**\n     * Reads a string till its end.\n     * @returns {string} String read\n     * @inner\n     */\n    function readString() {\n        var re = stringDelim === \"'\" ? stringSingleRe : stringDoubleRe;\n        re.lastIndex = offset - 1;\n        var match = re.exec(source);\n        if (!match)\n            throw illegal(\"string\");\n        offset = re.lastIndex;\n        push(stringDelim);\n        stringDelim = null;\n        return unescape(match[1]);\n    }\n\n    /**\n     * Gets the character at `pos` within the source.\n     * @param {number} pos Position\n     * @returns {string} Character\n     * @inner\n     */\n    function charAt(pos) {\n        return source.charAt(pos);\n    }\n\n    /**\n     * Sets the current comment text.\n     * @param {number} start Start offset\n     * @param {number} end End offset\n     * @param {boolean} isLeading set if a leading comment\n     * @returns {undefined}\n     * @inner\n     */\n    function setComment(start, end, isLeading) {\n        var comment = {\n            type: source.charAt(start++),\n            lineEmpty: false,\n            leading: isLeading,\n        };\n        var lookback;\n        if (alternateCommentMode) {\n            lookback = 2;  // alternate comment parsing: \"//\" or \"/*\"\n        } else {\n            lookback = 3;  // \"///\" or \"/**\"\n        }\n        var commentOffset = start - lookback,\n            c;\n        do {\n            if (--commentOffset < 0 ||\n                    (c = source.charAt(commentOffset)) === \"\\n\") {\n                comment.lineEmpty = true;\n                break;\n            }\n        } while (c === \" \" || c === \"\\t\");\n        var lines = source\n            .substring(start, end)\n            .split(setCommentSplitRe);\n        for (var i = 0; i < lines.length; ++i)\n            lines[i] = lines[i]\n                .replace(alternateCommentMode ? setCommentAltRe : setCommentRe, \"\")\n                .trim();\n        comment.text = lines\n            .join(\"\\n\")\n            .trim();\n\n        comments[line] = comment;\n        lastCommentLine = line;\n    }\n\n    function isDoubleSlashCommentLine(startOffset) {\n        var endOffset = findEndOfLine(startOffset);\n\n        // see if remaining line matches comment pattern\n        var lineText = source.substring(startOffset, endOffset);\n        var isComment = /^\\s*\\/\\//.test(lineText);\n        return isComment;\n    }\n\n    function findEndOfLine(cursor) {\n        // find end of cursor's line\n        var endOffset = cursor;\n        while (endOffset < length && charAt(endOffset) !== \"\\n\") {\n            endOffset++;\n        }\n        return endOffset;\n    }\n\n    /**\n     * Obtains the next token.\n     * @returns {string|null} Next token or `null` on eof\n     * @inner\n     */\n    function next() {\n        if (stack.length > 0)\n            return stack.shift();\n        if (stringDelim)\n            return readString();\n        var repeat,\n            prev,\n            curr,\n            start,\n            isDoc,\n            isLeadingComment = offset === 0;\n        do {\n            if (offset === length)\n                return null;\n            repeat = false;\n            while (whitespaceRe.test(curr = charAt(offset))) {\n                if (curr === \"\\n\") {\n                    isLeadingComment = true;\n                    ++line;\n                }\n                if (++offset === length)\n                    return null;\n            }\n\n            if (charAt(offset) === \"/\") {\n                if (++offset === length) {\n                    throw illegal(\"comment\");\n                }\n                if (charAt(offset) === \"/\") { // Line\n                    if (!alternateCommentMode) {\n                        // check for triple-slash comment\n                        isDoc = charAt(start = offset + 1) === \"/\";\n\n                        while (charAt(++offset) !== \"\\n\") {\n                            if (offset === length) {\n                                return null;\n                            }\n                        }\n                        ++offset;\n                        if (isDoc) {\n                            setComment(start, offset - 1, isLeadingComment);\n                            // Trailing comment cannot not be multi-line,\n                            // so leading comment state should be reset to handle potential next comments\n                            isLeadingComment = true;\n                        }\n                        ++line;\n                        repeat = true;\n                    } else {\n                        // check for double-slash comments, consolidating consecutive lines\n                        start = offset;\n                        isDoc = false;\n                        if (isDoubleSlashCommentLine(offset - 1)) {\n                            isDoc = true;\n                            do {\n                                offset = findEndOfLine(offset);\n                                if (offset === length) {\n                                    break;\n                                }\n                                offset++;\n                                if (!isLeadingComment) {\n                                    // Trailing comment cannot not be multi-line\n                                    break;\n                                }\n                            } while (isDoubleSlashCommentLine(offset));\n                        } else {\n                            offset = Math.min(length, findEndOfLine(offset) + 1);\n                        }\n                        if (isDoc) {\n                            setComment(start, offset, isLeadingComment);\n                            isLeadingComment = true;\n                        }\n                        line++;\n                        repeat = true;\n                    }\n                } else if ((curr = charAt(offset)) === \"*\") { /* Block */\n                    // check for /** (regular comment mode) or /* (alternate comment mode)\n                    start = offset + 1;\n                    isDoc = alternateCommentMode || charAt(start) === \"*\";\n                    do {\n                        if (curr === \"\\n\") {\n                            ++line;\n                        }\n                        if (++offset === length) {\n                            throw illegal(\"comment\");\n                        }\n                        prev = curr;\n                        curr = charAt(offset);\n                    } while (prev !== \"*\" || curr !== \"/\");\n                    ++offset;\n                    if (isDoc) {\n                        setComment(start, offset - 2, isLeadingComment);\n                        isLeadingComment = true;\n                    }\n                    repeat = true;\n                } else {\n                    return \"/\";\n                }\n            }\n        } while (repeat);\n\n        // offset !== length if we got here\n\n        var end = offset;\n        delimRe.lastIndex = 0;\n        var delim = delimRe.test(charAt(end++));\n        if (!delim)\n            while (end < length && !delimRe.test(charAt(end)))\n                ++end;\n        var token = source.substring(offset, offset = end);\n        if (token === \"\\\"\" || token === \"'\")\n            stringDelim = token;\n        return token;\n    }\n\n    /**\n     * Pushes a token back to the stack.\n     * @param {string} token Token\n     * @returns {undefined}\n     * @inner\n     */\n    function push(token) {\n        stack.push(token);\n    }\n\n    /**\n     * Peeks for the next token.\n     * @returns {string|null} Token or `null` on eof\n     * @inner\n     */\n    function peek() {\n        if (!stack.length) {\n            var token = next();\n            if (token === null)\n                return null;\n            push(token);\n        }\n        return stack[0];\n    }\n\n    /**\n     * Skips a token.\n     * @param {string} expected Expected token\n     * @param {boolean} [optional=false] Whether the token is optional\n     * @returns {boolean} `true` when skipped, `false` if not\n     * @throws {Error} When a required token is not present\n     * @inner\n     */\n    function skip(expected, optional) {\n        var actual = peek(),\n            equals = actual === expected;\n        if (equals) {\n            next();\n            return true;\n        }\n        if (!optional)\n            throw illegal(\"token '\" + actual + \"', '\" + expected + \"' expected\");\n        return false;\n    }\n\n    /**\n     * Gets a comment.\n     * @param {number} [trailingLine] Line number if looking for a trailing comment\n     * @returns {string|null} Comment text\n     * @inner\n     */\n    function cmnt(trailingLine) {\n        var ret = null;\n        var comment;\n        if (trailingLine === undefined) {\n            comment = comments[line - 1];\n            delete comments[line - 1];\n            if (comment && (alternateCommentMode || comment.type === \"*\" || comment.lineEmpty)) {\n                ret = comment.leading ? comment.text : null;\n            }\n        } else {\n            /* istanbul ignore else */\n            if (lastCommentLine < trailingLine) {\n                peek();\n            }\n            comment = comments[trailingLine];\n            delete comments[trailingLine];\n            if (comment && !comment.lineEmpty && (alternateCommentMode || comment.type === \"/\")) {\n                ret = comment.leading ? null : comment.text;\n            }\n        }\n        return ret;\n    }\n\n    return Object.defineProperty({\n        next: next,\n        peek: peek,\n        push: push,\n        skip: skip,\n        cmnt: cmnt\n    }, \"line\", {\n        get: function() { return line; }\n    });\n    /* eslint-enable callback-return */\n}\n","\"use strict\";\nmodule.exports = parse;\n\nparse.filename = null;\nparse.defaults = { keepCase: false };\n\nvar tokenize  = require(\"./tokenize\"),\n    Root      = require(\"./root\"),\n    Type      = require(\"./type\"),\n    Field     = require(\"./field\"),\n    MapField  = require(\"./mapfield\"),\n    OneOf     = require(\"./oneof\"),\n    Enum      = require(\"./enum\"),\n    Service   = require(\"./service\"),\n    Method    = require(\"./method\"),\n    ReflectionObject = require(\"./object\"),\n    types     = require(\"./types\"),\n    util      = require(\"./util\");\n\nvar base10Re    = /^[1-9][0-9]*$/,\n    base10NegRe = /^-?[1-9][0-9]*$/,\n    base16Re    = /^0[x][0-9a-fA-F]+$/,\n    base16NegRe = /^-?0[x][0-9a-fA-F]+$/,\n    base8Re     = /^0[0-7]+$/,\n    base8NegRe  = /^-?0[0-7]+$/,\n    numberRe    = util.patterns.numberRe,\n    nameRe      = /^[a-zA-Z_][a-zA-Z_0-9]*$/,\n    typeRefRe   = util.patterns.typeRefRe;\n\n/**\n * Result object returned from {@link parse}.\n * @interface IParserResult\n * @property {string|undefined} package Package name, if declared\n * @property {string[]|undefined} imports Imports, if any\n * @property {string[]|undefined} weakImports Weak imports, if any\n * @property {Root} root Populated root instance\n */\n\n/**\n * Options modifying the behavior of {@link parse}.\n * @interface IParseOptions\n * @property {boolean} [keepCase=false] Keeps field casing instead of converting to camel case\n * @property {boolean} [alternateCommentMode=false] Recognize double-slash comments in addition to doc-block comments.\n * @property {boolean} [preferTrailingComment=false] Use trailing comment when both leading comment and trailing comment exist.\n */\n\n/**\n * Options modifying the behavior of JSON serialization.\n * @interface IToJSONOptions\n * @property {boolean} [keepComments=false] Serializes comments.\n */\n\n/**\n * Parses the given .proto source and returns an object with the parsed contents.\n * @param {string} source Source contents\n * @param {Root} root Root to populate\n * @param {IParseOptions} [options] Parse options. Defaults to {@link parse.defaults} when omitted.\n * @returns {IParserResult} Parser result\n * @property {string} filename=null Currently processing file name for error reporting, if known\n * @property {IParseOptions} defaults Default {@link IParseOptions}\n */\nfunction parse(source, root, options) {\n    /* eslint-disable callback-return */\n    if (!(root instanceof Root)) {\n        options = root;\n        root = new Root();\n    }\n    if (!options)\n        options = parse.defaults;\n\n    var preferTrailingComment = options.preferTrailingComment || false;\n    var tn = tokenize(source, options.alternateCommentMode || false),\n        next = tn.next,\n        push = tn.push,\n        peek = tn.peek,\n        skip = tn.skip,\n        cmnt = tn.cmnt;\n\n    var head = true,\n        pkg,\n        imports,\n        weakImports,\n        edition = \"proto2\";\n\n    var ptr = root;\n\n    var topLevelObjects = [];\n    var topLevelOptions = {};\n\n    var applyCase = options.keepCase ? function(name) { return name; } : util.camelCase;\n\n    function resolveFileFeatures() {\n        topLevelObjects.forEach(obj => {\n            obj._edition = edition;\n            Object.keys(topLevelOptions).forEach(opt => {\n                if (obj.getOption(opt) !== undefined) return;\n                obj.setOption(opt, topLevelOptions[opt], true);\n            });\n        });\n    }\n\n    /* istanbul ignore next */\n    function illegal(token, name, insideTryCatch) {\n        var filename = parse.filename;\n        if (!insideTryCatch)\n            parse.filename = null;\n        return Error(\"illegal \" + (name || \"token\") + \" '\" + token + \"' (\" + (filename ? filename + \", \" : \"\") + \"line \" + tn.line + \")\");\n    }\n\n    function readString() {\n        var values = [],\n            token;\n        do {\n            /* istanbul ignore if */\n            if ((token = next()) !== \"\\\"\" && token !== \"'\")\n                throw illegal(token);\n\n            values.push(next());\n            skip(token);\n            token = peek();\n        } while (token === \"\\\"\" || token === \"'\");\n        return values.join(\"\");\n    }\n\n    function readValue(acceptTypeRef) {\n        var token = next();\n        switch (token) {\n            case \"'\":\n            case \"\\\"\":\n                push(token);\n                return readString();\n            case \"true\": case \"TRUE\":\n                return true;\n            case \"false\": case \"FALSE\":\n                return false;\n        }\n        try {\n            return parseNumber(token, /* insideTryCatch */ true);\n        } catch (e) {\n            /* istanbul ignore else */\n            if (acceptTypeRef && typeRefRe.test(token))\n                return token;\n\n            /* istanbul ignore next */\n            throw illegal(token, \"value\");\n        }\n    }\n\n    function readRanges(target, acceptStrings) {\n        var token, start;\n        do {\n            if (acceptStrings && ((token = peek()) === \"\\\"\" || token === \"'\")) {\n                var str = readString();\n                target.push(str);\n                if (edition >= 2023) {\n                    throw illegal(str, \"id\");\n                }\n            } else {\n                try {\n                    target.push([ start = parseId(next()), skip(\"to\", true) ? parseId(next()) : start ]);\n                } catch (err) {\n                    if (acceptStrings && typeRefRe.test(token) && edition >= 2023) {\n                        target.push(token);\n                    } else {\n                        throw err;\n                    }\n                }\n            }\n        } while (skip(\",\", true));\n        var dummy = {options: undefined};\n        dummy.setOption = function(name, value) {\n          if (this.options === undefined) this.options = {};\n          this.options[name] = value;\n        };\n        ifBlock(\n            dummy,\n            function parseRange_block(token) {\n              /* istanbul ignore else */\n              if (token === \"option\") {\n                parseOption(dummy, token);  // skip\n                skip(\";\");\n              } else\n                throw illegal(token);\n            },\n            function parseRange_line() {\n              parseInlineOptions(dummy);  // skip\n            });\n    }\n\n    function parseNumber(token, insideTryCatch) {\n        var sign = 1;\n        if (token.charAt(0) === \"-\") {\n            sign = -1;\n            token = token.substring(1);\n        }\n        switch (token) {\n            case \"inf\": case \"INF\": case \"Inf\":\n                return sign * Infinity;\n            case \"nan\": case \"NAN\": case \"Nan\": case \"NaN\":\n                return NaN;\n            case \"0\":\n                return 0;\n        }\n        if (base10Re.test(token))\n            return sign * parseInt(token, 10);\n        if (base16Re.test(token))\n            return sign * parseInt(token, 16);\n        if (base8Re.test(token))\n            return sign * parseInt(token, 8);\n\n        /* istanbul ignore else */\n        if (numberRe.test(token))\n            return sign * parseFloat(token);\n\n        /* istanbul ignore next */\n        throw illegal(token, \"number\", insideTryCatch);\n    }\n\n    function parseId(token, acceptNegative) {\n        switch (token) {\n            case \"max\": case \"MAX\": case \"Max\":\n                return 536870911;\n            case \"0\":\n                return 0;\n        }\n\n        /* istanbul ignore if */\n        if (!acceptNegative && token.charAt(0) === \"-\")\n            throw illegal(token, \"id\");\n\n        if (base10NegRe.test(token))\n            return parseInt(token, 10);\n        if (base16NegRe.test(token))\n            return parseInt(token, 16);\n\n        /* istanbul ignore else */\n        if (base8NegRe.test(token))\n            return parseInt(token, 8);\n\n        /* istanbul ignore next */\n        throw illegal(token, \"id\");\n    }\n\n    function parsePackage() {\n        /* istanbul ignore if */\n        if (pkg !== undefined)\n            throw illegal(\"package\");\n\n        pkg = next();\n\n        /* istanbul ignore if */\n        if (!typeRefRe.test(pkg))\n            throw illegal(pkg, \"name\");\n\n        ptr = ptr.define(pkg);\n\n        skip(\";\");\n    }\n\n    function parseImport() {\n        var token = peek();\n        var whichImports;\n        switch (token) {\n            case \"weak\":\n                whichImports = weakImports || (weakImports = []);\n                next();\n                break;\n            case \"public\":\n                next();\n                // eslint-disable-next-line no-fallthrough\n            default:\n                whichImports = imports || (imports = []);\n                break;\n        }\n        token = readString();\n        skip(\";\");\n        whichImports.push(token);\n    }\n\n    function parseSyntax() {\n        skip(\"=\");\n        edition = readString();\n\n        /* istanbul ignore if */\n        if (edition < 2023)\n            throw illegal(edition, \"syntax\");\n\n        skip(\";\");\n    }\n\n    function parseEdition() {\n        skip(\"=\");\n        edition = readString();\n        const supportedEditions = [\"2023\"];\n\n        /* istanbul ignore if */\n        if (!supportedEditions.includes(edition))\n            throw illegal(edition, \"edition\");\n\n        skip(\";\");\n    }\n\n\n    function parseCommon(parent, token, depth) {\n        if (depth === undefined)\n            depth = 0;\n        // depth is checked by dispatched functions\n        switch (token) {\n\n            case \"option\":\n                parseOption(parent, token);\n                skip(\";\");\n                return true;\n\n            case \"message\":\n                parseType(parent, token, depth + 1);\n                return true;\n\n            case \"enum\":\n                parseEnum(parent, token);\n                return true;\n\n            case \"service\":\n                parseService(parent, token, depth + 1);\n                return true;\n\n            case \"extend\":\n                parseExtension(parent, token, depth);\n                return true;\n        }\n        return false;\n    }\n\n    function ifBlock(obj, fnIf, fnElse) {\n        var trailingLine = tn.line;\n        if (obj) {\n            if(typeof obj.comment !== \"string\") {\n              obj.comment = cmnt(); // try block-type comment\n            }\n            obj.filename = parse.filename;\n        }\n        if (skip(\"{\", true)) {\n            var token;\n            while ((token = next()) !== \"}\")\n                fnIf(token);\n            skip(\";\", true);\n        } else {\n            if (fnElse)\n                fnElse();\n            skip(\";\");\n            if (obj && (typeof obj.comment !== \"string\" || preferTrailingComment))\n                obj.comment = cmnt(trailingLine) || obj.comment; // try line-type comment\n        }\n    }\n\n    function parseType(parent, token, depth) {\n        if (depth === undefined)\n            depth = 0;\n        if (depth > util.nestingLimit)\n            throw Error(\"max depth exceeded\");\n\n        /* istanbul ignore if */\n        if (!nameRe.test(token = next()))\n            throw illegal(token, \"type name\");\n\n        var type = new Type(token);\n        ifBlock(type, function parseType_block(token) {\n            if (parseCommon(type, token, depth))\n                return;\n\n            switch (token) {\n\n                case \"map\":\n                    parseMapField(type, token);\n                    break;\n\n                case \"required\":\n                    if (edition !== \"proto2\")\n                        throw illegal(token);\n                /* eslint-disable no-fallthrough */\n                case \"repeated\":\n                    parseField(type, token, undefined, depth + 1);\n                    break;\n\n                case \"optional\":\n                    /* istanbul ignore if */\n                    if (edition === \"proto3\") {\n                        parseField(type, \"proto3_optional\", undefined, depth + 1);\n                    } else if (edition !== \"proto2\") {\n                        throw illegal(token);\n                    } else {\n                        parseField(type, \"optional\", undefined, depth + 1);\n                    }\n                    break;\n\n                case \"oneof\":\n                    parseOneOf(type, token, depth + 1);\n                    break;\n\n                case \"extensions\":\n                    readRanges(type.extensions || (type.extensions = []));\n                    break;\n\n                case \"reserved\":\n                    readRanges(type.reserved || (type.reserved = []), true);\n                    break;\n\n                default:\n                    /* istanbul ignore if */\n                    if (edition === \"proto2\" || !typeRefRe.test(token)) {\n                        throw illegal(token);\n                    }\n\n                    push(token);\n                    parseField(type, \"optional\", undefined, depth + 1);\n                    break;\n            }\n        });\n        parent.add(type);\n        if (parent === ptr) {\n            topLevelObjects.push(type);\n        }\n    }\n\n    function parseField(parent, rule, extend, depth) {\n        var type = next();\n        if (type === \"group\") {\n            parseGroup(parent, rule, depth);\n            return;\n        }\n        // Type names can consume multiple tokens, in multiple variants:\n        //    package.subpackage   field       tokens: \"package.subpackage\" [TYPE NAME ENDS HERE] \"field\"\n        //    package . subpackage field       tokens: \"package\" \".\" \"subpackage\" [TYPE NAME ENDS HERE] \"field\"\n        //    package.  subpackage field       tokens: \"package.\" \"subpackage\" [TYPE NAME ENDS HERE] \"field\"\n        //    package  .subpackage field       tokens: \"package\" \".subpackage\" [TYPE NAME ENDS HERE] \"field\"\n        // Keep reading tokens until we get a type name with no period at the end,\n        // and the next token does not start with a period.\n        while (type.endsWith(\".\") || peek().startsWith(\".\")) {\n            type += next();\n        }\n\n        /* istanbul ignore if */\n        if (!typeRefRe.test(type))\n            throw illegal(type, \"type\");\n\n        var name = next();\n\n        /* istanbul ignore if */\n\n        if (!nameRe.test(name))\n            throw illegal(name, \"name\");\n\n        name = applyCase(name);\n        skip(\"=\");\n\n        var field = new Field(name, parseId(next()), type, rule, extend);\n\n        ifBlock(field, function parseField_block(token) {\n\n            /* istanbul ignore else */\n            if (token === \"option\") {\n                parseOption(field, token);\n                skip(\";\");\n            } else\n                throw illegal(token);\n\n        }, function parseField_line() {\n            parseInlineOptions(field);\n        });\n\n        if (rule === \"proto3_optional\") {\n            // for proto3 optional fields, we create a single-member Oneof to mimic \"optional\" behavior\n            var oneof = new OneOf(\"_\" + name);\n            field.setOption(\"proto3_optional\", true);\n            oneof.add(field);\n            parent.add(oneof);\n        } else {\n            parent.add(field);\n        }\n        if (parent === ptr) {\n            topLevelObjects.push(field);\n        }\n    }\n\n    function parseGroup(parent, rule, depth) {\n        if (depth === undefined)\n            depth = 0;\n        if (depth > util.nestingLimit)\n            throw Error(\"max depth exceeded\");\n        if (edition >= 2023) {\n            throw illegal(\"group\");\n        }\n        var name = next();\n\n        /* istanbul ignore if */\n        if (!nameRe.test(name))\n            throw illegal(name, \"name\");\n\n        var fieldName = util.lcFirst(name);\n        if (name === fieldName)\n            name = util.ucFirst(name);\n        skip(\"=\");\n        var id = parseId(next());\n        var type = new Type(name);\n        type.group = true;\n        var field = new Field(fieldName, id, name, rule);\n        field.filename = parse.filename;\n        ifBlock(type, function parseGroup_block(token) {\n            switch (token) {\n\n                case \"option\":\n                    parseOption(type, token);\n                    skip(\";\");\n                    break;\n                case \"required\":\n                case \"repeated\":\n                    parseField(type, token, undefined, depth + 1);\n                    break;\n\n                case \"optional\":\n                    /* istanbul ignore if */\n                    if (edition === \"proto3\") {\n                        parseField(type, \"proto3_optional\", undefined, depth + 1);\n                    } else {\n                        parseField(type, \"optional\", undefined, depth + 1);\n                    }\n                    break;\n\n                case \"message\":\n                    parseType(type, token, depth + 1);\n                    break;\n\n                case \"enum\":\n                    parseEnum(type, token);\n                    break;\n\n                case \"reserved\":\n                    readRanges(type.reserved || (type.reserved = []), true);\n                    break;\n\n                /* istanbul ignore next */\n                default:\n                    throw illegal(token); // there are no groups with proto3 semantics\n            }\n        });\n        parent.add(type)\n              .add(field);\n    }\n\n    function parseMapField(parent) {\n        skip(\"<\");\n        var keyType = next();\n\n        /* istanbul ignore if */\n        if (types.mapKey[keyType] === undefined)\n            throw illegal(keyType, \"type\");\n\n        skip(\",\");\n        var valueType = next();\n\n        /* istanbul ignore if */\n        if (!typeRefRe.test(valueType))\n            throw illegal(valueType, \"type\");\n\n        skip(\">\");\n        var name = next();\n\n        /* istanbul ignore if */\n        if (!nameRe.test(name))\n            throw illegal(name, \"name\");\n\n        skip(\"=\");\n        var field = new MapField(applyCase(name), parseId(next()), keyType, valueType);\n        ifBlock(field, function parseMapField_block(token) {\n\n            /* istanbul ignore else */\n            if (token === \"option\") {\n                parseOption(field, token);\n                skip(\";\");\n            } else\n                throw illegal(token);\n\n        }, function parseMapField_line() {\n            parseInlineOptions(field);\n        });\n        parent.add(field);\n    }\n\n    function parseOneOf(parent, token, depth) {\n\n        /* istanbul ignore if */\n        if (!nameRe.test(token = next()))\n            throw illegal(token, \"name\");\n\n        var oneof = new OneOf(applyCase(token));\n        ifBlock(oneof, function parseOneOf_block(token) {\n            if (token === \"option\") {\n                parseOption(oneof, token);\n                skip(\";\");\n            } else {\n                push(token);\n                parseField(oneof, \"optional\", undefined, depth);\n            }\n        });\n        parent.add(oneof);\n    }\n\n    function parseEnum(parent, token) {\n\n        /* istanbul ignore if */\n        if (!nameRe.test(token = next()))\n            throw illegal(token, \"name\");\n\n        var enm = new Enum(token);\n        ifBlock(enm, function parseEnum_block(token) {\n          switch(token) {\n            case \"option\":\n              parseOption(enm, token);\n              skip(\";\");\n              break;\n\n            case \"reserved\":\n              readRanges(enm.reserved || (enm.reserved = []), true);\n              if(enm.reserved === undefined) enm.reserved = [];\n              break;\n\n            default:\n              parseEnumValue(enm, token);\n          }\n        });\n        parent.add(enm);\n        if (parent === ptr) {\n            topLevelObjects.push(enm);\n        }\n    }\n\n    function parseEnumValue(parent, token) {\n\n        /* istanbul ignore if */\n        if (!nameRe.test(token))\n            throw illegal(token, \"name\");\n\n        skip(\"=\");\n        var value = parseId(next(), true),\n            dummy = {\n                options: undefined\n            };\n        dummy.getOption = function(name) {\n            return this.options[name];\n        };\n        dummy.setOption = function(name, value) {\n            ReflectionObject.prototype.setOption.call(dummy, name, value);\n        };\n        dummy.setParsedOption = function() {\n            return undefined;\n        };\n        ifBlock(dummy, function parseEnumValue_block(token) {\n\n            /* istanbul ignore else */\n            if (token === \"option\") {\n                parseOption(dummy, token); // skip\n                skip(\";\");\n            } else\n                throw illegal(token);\n\n        }, function parseEnumValue_line() {\n            parseInlineOptions(dummy); // skip\n        });\n        parent.add(token, value, dummy.comment, dummy.parsedOptions || dummy.options);\n    }\n\n    function parseOption(parent, token) {\n            var option;\n            var propName;\n            var isOption = true;\n            if (token === \"option\") {\n                token = next();\n            }\n\n            while (token !== \"=\") {\n                if (token === null) {\n                    throw illegal(token, \"end of input\");\n                }\n                if (token === \"(\") {\n                    var parensValue = next();\n                    skip(\")\");\n                    token = \"(\" + parensValue + \")\";\n                }\n                if (isOption) {\n                    isOption = false;\n                    if (token.includes(\".\") && !token.includes(\"(\")) {\n                        var tokens = token.split(\".\");\n                        option = tokens[0] + \".\";\n                        token = tokens[1];\n                        continue;\n                    }\n                    option = token;\n                } else {\n                    propName = propName ? propName += token : token;\n                }\n                token = next();\n            }\n            var name = propName ? option.concat(propName) : option;\n            var optionValue = parseOptionValue(parent, name);\n            propName = propName && propName[0] === \".\" ? propName.slice(1) : propName;\n            option = option && option[option.length - 1] === \".\" ? option.slice(0, -1) : option;\n            setParsedOption(parent, option, optionValue, propName);\n    }\n\n    function parseOptionValue(parent, name, depth) {\n        if (depth === undefined)\n            depth = 0;\n        if (depth > util.recursionLimit)\n            throw Error(\"max depth exceeded\");\n        // { a: \"foo\" b { c: \"bar\" } }\n        if (skip(\"{\", true)) {\n            var objectResult = {};\n\n            while (!skip(\"}\", true)) {\n                /* istanbul ignore if */\n                if (!nameRe.test(token = next())) {\n                    throw illegal(token, \"name\");\n                }\n                if (token === null) {\n                  throw illegal(token, \"end of input\");\n                }\n\n                var value;\n                var propName = token;\n\n                skip(\":\", true);\n\n                if (peek() === \"{\") {\n                    // option (my_option) = {\n                    //     repeated_value: [ \"foo\", \"bar\" ]\n                    // };\n                    value = parseOptionValue(parent, name + \".\" + token, depth + 1);\n                } else if (peek() === \"[\") {\n                    value = [];\n                    var lastValue;\n                    if (skip(\"[\", true)) {\n                        do {\n                            lastValue = readValue(true);\n                            value.push(lastValue);\n                        } while (skip(\",\", true));\n                        skip(\"]\");\n                        if (typeof lastValue !== \"undefined\") {\n                            setOption(parent, name + \".\" + token, lastValue);\n                        }\n                    }\n                } else {\n                    value = readValue(true);\n                    setOption(parent, name + \".\" + token, value);\n                }\n\n                var prevValue = objectResult[propName];\n\n                if (prevValue)\n                    value = [].concat(prevValue).concat(value);\n\n                if (propName !== \"__proto__\")\n                    objectResult[propName] = value;\n\n                // Semicolons and commas can be optional\n                skip(\",\", true);\n                skip(\";\", true);\n            }\n\n            return objectResult;\n        }\n\n        var simpleValue = readValue(true);\n        setOption(parent, name, simpleValue);\n        return simpleValue;\n        // Does not enforce a delimiter to be universal\n    }\n\n    function setOption(parent, name, value) {\n        if (ptr === parent && /^features\\./.test(name)) {\n            topLevelOptions[name] = value;\n            return;\n        }\n        if (parent.setOption)\n            parent.setOption(name, value);\n    }\n\n    function setParsedOption(parent, name, value, propName) {\n        if (parent.setParsedOption)\n            parent.setParsedOption(name, value, propName);\n    }\n\n    function parseInlineOptions(parent) {\n        if (skip(\"[\", true)) {\n            do {\n                parseOption(parent, \"option\");\n            } while (skip(\",\", true));\n            skip(\"]\");\n        }\n        return parent;\n    }\n\n    function parseService(parent, token, depth) {\n        if (depth === undefined)\n            depth = 0;\n        if (depth > util.recursionLimit)\n            throw Error(\"max depth exceeded\");\n\n        /* istanbul ignore if */\n        if (!nameRe.test(token = next()))\n            throw illegal(token, \"service name\");\n\n        var service = new Service(token);\n        ifBlock(service, function parseService_block(token) {\n            if (parseCommon(service, token, depth)) {\n                return;\n            }\n\n            /* istanbul ignore else */\n            if (token === \"rpc\")\n                parseMethod(service, token);\n            else\n                throw illegal(token);\n        });\n        parent.add(service);\n        if (parent === ptr) {\n            topLevelObjects.push(service);\n        }\n    }\n\n    function parseMethod(parent, token) {\n        // Get the comment of the preceding line now (if one exists) in case the\n        // method is defined across multiple lines.\n        var commentText = cmnt();\n\n        var type = token;\n\n        /* istanbul ignore if */\n        if (!nameRe.test(token = next()))\n            throw illegal(token, \"name\");\n\n        var name = token,\n            requestType, requestStream,\n            responseType, responseStream;\n\n        skip(\"(\");\n        if (skip(\"stream\", true))\n            requestStream = true;\n\n        /* istanbul ignore if */\n        if (!typeRefRe.test(token = next()))\n            throw illegal(token);\n\n        requestType = token;\n        skip(\")\"); skip(\"returns\"); skip(\"(\");\n        if (skip(\"stream\", true))\n            responseStream = true;\n\n        /* istanbul ignore if */\n        if (!typeRefRe.test(token = next()))\n            throw illegal(token);\n\n        responseType = token;\n        skip(\")\");\n\n        var method = new Method(name, type, requestType, responseType, requestStream, responseStream);\n        method.comment = commentText;\n        ifBlock(method, function parseMethod_block(token) {\n\n            /* istanbul ignore else */\n            if (token === \"option\") {\n                parseOption(method, token);\n                skip(\";\");\n            } else\n                throw illegal(token);\n\n        });\n        parent.add(method);\n    }\n\n    function parseExtension(parent, token, depth) {\n\n        /* istanbul ignore if */\n        if (!typeRefRe.test(token = next()))\n            throw illegal(token, \"reference\");\n\n        var reference = token;\n        ifBlock(null, function parseExtension_block(token) {\n            switch (token) {\n\n                case \"required\":\n                case \"repeated\":\n                    parseField(parent, token, reference, depth + 1);\n                    break;\n\n                case \"optional\":\n                    /* istanbul ignore if */\n                    if (edition === \"proto3\") {\n                        parseField(parent, \"proto3_optional\", reference, depth + 1);\n                    } else {\n                        parseField(parent, \"optional\", reference, depth + 1);\n                    }\n                    break;\n\n                default:\n                    /* istanbul ignore if */\n                    if (edition === \"proto2\" || !typeRefRe.test(token))\n                        throw illegal(token);\n                    push(token);\n                    parseField(parent, \"optional\", reference, depth + 1);\n                    break;\n            }\n        });\n    }\n\n    var token;\n    while ((token = next()) !== null) {\n        switch (token) {\n\n            case \"package\":\n\n                /* istanbul ignore if */\n                if (!head)\n                    throw illegal(token);\n\n                parsePackage();\n                break;\n\n            case \"import\":\n\n                /* istanbul ignore if */\n                if (!head)\n                    throw illegal(token);\n\n                parseImport();\n                break;\n\n            case \"syntax\":\n\n                /* istanbul ignore if */\n                if (!head)\n                    throw illegal(token);\n\n                parseSyntax();\n                break;\n\n            case \"edition\":\n                /* istanbul ignore if */\n                if (!head)\n                    throw illegal(token);\n                parseEdition();\n                break;\n\n            case \"option\":\n                parseOption(ptr, token);\n                skip(\";\", true);\n                break;\n\n            default:\n\n                /* istanbul ignore else */\n                if (parseCommon(ptr, token, 0)) {\n                    head = false;\n                    continue;\n                }\n\n                /* istanbul ignore next */\n                throw illegal(token);\n        }\n    }\n\n    resolveFileFeatures();\n\n    parse.filename = null;\n    return {\n        \"package\"     : pkg,\n        \"imports\"     : imports,\n         weakImports  : weakImports,\n         root         : root\n    };\n}\n\n/**\n * Parses the given .proto source and returns an object with the parsed contents.\n * @name parse\n * @function\n * @param {string} source Source contents\n * @param {IParseOptions} [options] Parse options. Defaults to {@link parse.defaults} when omitted.\n * @returns {IParserResult} Parser result\n * @property {string} filename=null Currently processing file name for error reporting, if known\n * @property {IParseOptions} defaults Default {@link IParseOptions}\n * @variation 2\n */\n","\"use strict\";\nmodule.exports = common;\n\nvar commonRe = /\\/|\\./;\n\n/**\n * Provides common type definitions.\n * Can also be used to provide additional google types or your own custom types.\n * @param {string} name Short name as in `google/protobuf/[name].proto` or full file name\n * @param {Object.<string,*>} json JSON definition within `google.protobuf` if a short name, otherwise the file's root definition\n * @returns {undefined}\n * @property {INamespace} google/protobuf/any.proto Any\n * @property {INamespace} google/protobuf/duration.proto Duration\n * @property {INamespace} google/protobuf/empty.proto Empty\n * @property {INamespace} google/protobuf/field_mask.proto FieldMask\n * @property {INamespace} google/protobuf/struct.proto Struct, Value, NullValue and ListValue\n * @property {INamespace} google/protobuf/timestamp.proto Timestamp\n * @property {INamespace} google/protobuf/wrappers.proto Wrappers\n * @example\n * // manually provides descriptor.proto (assumes google/protobuf/ namespace and .proto extension)\n * protobuf.common(\"descriptor\", descriptorJson);\n *\n * // manually provides a custom definition (uses my.foo namespace)\n * protobuf.common(\"my/foo/bar.proto\", myFooBarJson);\n */\nfunction common(name, json) {\n    if (!commonRe.test(name)) {\n        name = \"google/protobuf/\" + name + \".proto\";\n        json = { nested: { google: { nested: { protobuf: { nested: json } } } } };\n    }\n    common[name] = json;\n}\n\n// Not provided because of limited use (feel free to discuss or to provide yourself):\n//\n// google/protobuf/descriptor.proto\n// google/protobuf/source_context.proto\n// google/protobuf/type.proto\n//\n// Stripped and pre-parsed versions of these non-bundled files are instead available as part of\n// the repository or package within the google/protobuf directory.\n\ncommon(\"any\", {\n\n    /**\n     * Properties of a google.protobuf.Any message.\n     * @interface IAny\n     * @type {Object}\n     * @property {string} [typeUrl]\n     * @property {Uint8Array} [bytes]\n     * @memberof common\n     */\n    Any: {\n        fields: {\n            type_url: {\n                type: \"string\",\n                id: 1\n            },\n            value: {\n                type: \"bytes\",\n                id: 2\n            }\n        }\n    }\n});\n\nvar timeType;\n\ncommon(\"duration\", {\n\n    /**\n     * Properties of a google.protobuf.Duration message.\n     * @interface IDuration\n     * @type {Object}\n     * @property {number|Long} [seconds]\n     * @property {number} [nanos]\n     * @memberof common\n     */\n    Duration: timeType = {\n        fields: {\n            seconds: {\n                type: \"int64\",\n                id: 1\n            },\n            nanos: {\n                type: \"int32\",\n                id: 2\n            }\n        }\n    }\n});\n\ncommon(\"timestamp\", {\n\n    /**\n     * Properties of a google.protobuf.Timestamp message.\n     * @interface ITimestamp\n     * @type {Object}\n     * @property {number|Long} [seconds]\n     * @property {number} [nanos]\n     * @memberof common\n     */\n    Timestamp: timeType\n});\n\ncommon(\"empty\", {\n\n    /**\n     * Properties of a google.protobuf.Empty message.\n     * @interface IEmpty\n     * @memberof common\n     */\n    Empty: {\n        fields: {}\n    }\n});\n\ncommon(\"struct\", {\n\n    /**\n     * Properties of a google.protobuf.Struct message.\n     * @interface IStruct\n     * @type {Object}\n     * @property {Object.<string,IValue>} [fields]\n     * @memberof common\n     */\n    Struct: {\n        fields: {\n            fields: {\n                keyType: \"string\",\n                type: \"Value\",\n                id: 1\n            }\n        }\n    },\n\n    /**\n     * Properties of a google.protobuf.Value message.\n     * @interface IValue\n     * @type {Object}\n     * @property {string} [kind]\n     * @property {0} [nullValue]\n     * @property {number} [numberValue]\n     * @property {string} [stringValue]\n     * @property {boolean} [boolValue]\n     * @property {IStruct} [structValue]\n     * @property {IListValue} [listValue]\n     * @memberof common\n     */\n    Value: {\n        oneofs: {\n            kind: {\n                oneof: [\n                    \"nullValue\",\n                    \"numberValue\",\n                    \"stringValue\",\n                    \"boolValue\",\n                    \"structValue\",\n                    \"listValue\"\n                ]\n            }\n        },\n        fields: {\n            nullValue: {\n                type: \"NullValue\",\n                id: 1\n            },\n            numberValue: {\n                type: \"double\",\n                id: 2\n            },\n            stringValue: {\n                type: \"string\",\n                id: 3\n            },\n            boolValue: {\n                type: \"bool\",\n                id: 4\n            },\n            structValue: {\n                type: \"Struct\",\n                id: 5\n            },\n            listValue: {\n                type: \"ListValue\",\n                id: 6\n            }\n        }\n    },\n\n    NullValue: {\n        values: {\n            NULL_VALUE: 0\n        }\n    },\n\n    /**\n     * Properties of a google.protobuf.ListValue message.\n     * @interface IListValue\n     * @type {Object}\n     * @property {Array.<IValue>} [values]\n     * @memberof common\n     */\n    ListValue: {\n        fields: {\n            values: {\n                rule: \"repeated\",\n                type: \"Value\",\n                id: 1\n            }\n        }\n    }\n});\n\ncommon(\"wrappers\", {\n\n    /**\n     * Properties of a google.protobuf.DoubleValue message.\n     * @interface IDoubleValue\n     * @type {Object}\n     * @property {number} [value]\n     * @memberof common\n     */\n    DoubleValue: {\n        fields: {\n            value: {\n                type: \"double\",\n                id: 1\n            }\n        }\n    },\n\n    /**\n     * Properties of a google.protobuf.FloatValue message.\n     * @interface IFloatValue\n     * @type {Object}\n     * @property {number} [value]\n     * @memberof common\n     */\n    FloatValue: {\n        fields: {\n            value: {\n                type: \"float\",\n                id: 1\n            }\n        }\n    },\n\n    /**\n     * Properties of a google.protobuf.Int64Value message.\n     * @interface IInt64Value\n     * @type {Object}\n     * @property {number|Long} [value]\n     * @memberof common\n     */\n    Int64Value: {\n        fields: {\n            value: {\n                type: \"int64\",\n                id: 1\n            }\n        }\n    },\n\n    /**\n     * Properties of a google.protobuf.UInt64Value message.\n     * @interface IUInt64Value\n     * @type {Object}\n     * @property {number|Long} [value]\n     * @memberof common\n     */\n    UInt64Value: {\n        fields: {\n            value: {\n                type: \"uint64\",\n                id: 1\n            }\n        }\n    },\n\n    /**\n     * Properties of a google.protobuf.Int32Value message.\n     * @interface IInt32Value\n     * @type {Object}\n     * @property {number} [value]\n     * @memberof common\n     */\n    Int32Value: {\n        fields: {\n            value: {\n                type: \"int32\",\n                id: 1\n            }\n        }\n    },\n\n    /**\n     * Properties of a google.protobuf.UInt32Value message.\n     * @interface IUInt32Value\n     * @type {Object}\n     * @property {number} [value]\n     * @memberof common\n     */\n    UInt32Value: {\n        fields: {\n            value: {\n                type: \"uint32\",\n                id: 1\n            }\n        }\n    },\n\n    /**\n     * Properties of a google.protobuf.BoolValue message.\n     * @interface IBoolValue\n     * @type {Object}\n     * @property {boolean} [value]\n     * @memberof common\n     */\n    BoolValue: {\n        fields: {\n            value: {\n                type: \"bool\",\n                id: 1\n            }\n        }\n    },\n\n    /**\n     * Properties of a google.protobuf.StringValue message.\n     * @interface IStringValue\n     * @type {Object}\n     * @property {string} [value]\n     * @memberof common\n     */\n    StringValue: {\n        fields: {\n            value: {\n                type: \"string\",\n                id: 1\n            }\n        }\n    },\n\n    /**\n     * Properties of a google.protobuf.BytesValue message.\n     * @interface IBytesValue\n     * @type {Object}\n     * @property {Uint8Array} [value]\n     * @memberof common\n     */\n    BytesValue: {\n        fields: {\n            value: {\n                type: \"bytes\",\n                id: 1\n            }\n        }\n    }\n});\n\ncommon(\"field_mask\", {\n\n    /**\n     * Properties of a google.protobuf.FieldMask message.\n     * @interface IDoubleValue\n     * @type {Object}\n     * @property {number} [value]\n     * @memberof common\n     */\n    FieldMask: {\n        fields: {\n            paths: {\n                rule: \"repeated\",\n                type: \"string\",\n                id: 1\n            }\n        }\n    }\n});\n\n/**\n * Gets the root definition of the specified common proto file.\n *\n * Bundled definitions are:\n * - google/protobuf/any.proto\n * - google/protobuf/duration.proto\n * - google/protobuf/empty.proto\n * - google/protobuf/field_mask.proto\n * - google/protobuf/struct.proto\n * - google/protobuf/timestamp.proto\n * - google/protobuf/wrappers.proto\n *\n * @param {string} file Proto file name\n * @returns {INamespace|null} Root definition or `null` if not defined\n */\ncommon.get = function get(file) {\n    return common[file] || null;\n};\n","\"use strict\";\nvar protobuf = module.exports = require(\"./index-light\");\n\nprotobuf.build = \"full\";\n\n// Parser\nprotobuf.tokenize         = require(\"./tokenize\");\nprotobuf.parse            = require(\"./parse\");\nprotobuf.common           = require(\"./common\");\n\n// Configure parser\nprotobuf.Root._configure(protobuf.Type, protobuf.parse, protobuf.common);\n","// full library entry point.\n\n\"use strict\";\nmodule.exports = require(\"./src/index\");\n","{\n  \"nested\": {\n    \"google\": {\n      \"nested\": {\n        \"protobuf\": {\n          \"options\": {\n            \"go_package\": \"google.golang.org/protobuf/types/descriptorpb\",\n            \"java_package\": \"com.google.protobuf\",\n            \"java_outer_classname\": \"DescriptorProtos\",\n            \"csharp_namespace\": \"Google.Protobuf.Reflection\",\n            \"objc_class_prefix\": \"GPB\",\n            \"cc_enable_arenas\": true,\n            \"optimize_for\": \"SPEED\"\n          },\n          \"nested\": {\n            \"FileDescriptorSet\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"file\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"FileDescriptorProto\",\n                  \"id\": 1\n                }\n              },\n              \"extensions\": [\n                [\n                  536000000,\n                  536000000\n                ]\n              ]\n            },\n            \"Edition\": {\n              \"edition\": \"proto2\",\n              \"values\": {\n                \"EDITION_UNKNOWN\": 0,\n                \"EDITION_LEGACY\": 900,\n                \"EDITION_PROTO2\": 998,\n                \"EDITION_PROTO3\": 999,\n                \"EDITION_2023\": 1000,\n                \"EDITION_2024\": 1001,\n                \"EDITION_1_TEST_ONLY\": 1,\n                \"EDITION_2_TEST_ONLY\": 2,\n                \"EDITION_99997_TEST_ONLY\": 99997,\n                \"EDITION_99998_TEST_ONLY\": 99998,\n                \"EDITION_99999_TEST_ONLY\": 99999,\n                \"EDITION_MAX\": 2147483647\n              }\n            },\n            \"FileDescriptorProto\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"name\": {\n                  \"type\": \"string\",\n                  \"id\": 1\n                },\n                \"package\": {\n                  \"type\": \"string\",\n                  \"id\": 2\n                },\n                \"dependency\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"string\",\n                  \"id\": 3\n                },\n                \"publicDependency\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"int32\",\n                  \"id\": 10\n                },\n                \"weakDependency\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"int32\",\n                  \"id\": 11\n                },\n                \"optionDependency\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"string\",\n                  \"id\": 15\n                },\n                \"messageType\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"DescriptorProto\",\n                  \"id\": 4\n                },\n                \"enumType\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"EnumDescriptorProto\",\n                  \"id\": 5\n                },\n                \"service\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"ServiceDescriptorProto\",\n                  \"id\": 6\n                },\n                \"extension\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"FieldDescriptorProto\",\n                  \"id\": 7\n                },\n                \"options\": {\n                  \"type\": \"FileOptions\",\n                  \"id\": 8\n                },\n                \"sourceCodeInfo\": {\n                  \"type\": \"SourceCodeInfo\",\n                  \"id\": 9\n                },\n                \"syntax\": {\n                  \"type\": \"string\",\n                  \"id\": 12\n                },\n                \"edition\": {\n                  \"type\": \"Edition\",\n                  \"id\": 14\n                }\n              }\n            },\n            \"DescriptorProto\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"name\": {\n                  \"type\": \"string\",\n                  \"id\": 1\n                },\n                \"field\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"FieldDescriptorProto\",\n                  \"id\": 2\n                },\n                \"extension\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"FieldDescriptorProto\",\n                  \"id\": 6\n                },\n                \"nestedType\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"DescriptorProto\",\n                  \"id\": 3\n                },\n                \"enumType\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"EnumDescriptorProto\",\n                  \"id\": 4\n                },\n                \"extensionRange\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"ExtensionRange\",\n                  \"id\": 5\n                },\n                \"oneofDecl\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"OneofDescriptorProto\",\n                  \"id\": 8\n                },\n                \"options\": {\n                  \"type\": \"MessageOptions\",\n                  \"id\": 7\n                },\n                \"reservedRange\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"ReservedRange\",\n                  \"id\": 9\n                },\n                \"reservedName\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"string\",\n                  \"id\": 10\n                },\n                \"visibility\": {\n                  \"type\": \"SymbolVisibility\",\n                  \"id\": 11\n                }\n              },\n              \"nested\": {\n                \"ExtensionRange\": {\n                  \"fields\": {\n                    \"start\": {\n                      \"type\": \"int32\",\n                      \"id\": 1\n                    },\n                    \"end\": {\n                      \"type\": \"int32\",\n                      \"id\": 2\n                    },\n                    \"options\": {\n                      \"type\": \"ExtensionRangeOptions\",\n                      \"id\": 3\n                    }\n                  }\n                },\n                \"ReservedRange\": {\n                  \"fields\": {\n                    \"start\": {\n                      \"type\": \"int32\",\n                      \"id\": 1\n                    },\n                    \"end\": {\n                      \"type\": \"int32\",\n                      \"id\": 2\n                    }\n                  }\n                }\n              }\n            },\n            \"ExtensionRangeOptions\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"uninterpretedOption\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"UninterpretedOption\",\n                  \"id\": 999\n                },\n                \"declaration\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"Declaration\",\n                  \"id\": 2,\n                  \"options\": {\n                    \"retention\": \"RETENTION_SOURCE\"\n                  }\n                },\n                \"features\": {\n                  \"type\": \"FeatureSet\",\n                  \"id\": 50\n                },\n                \"verification\": {\n                  \"type\": \"VerificationState\",\n                  \"id\": 3,\n                  \"options\": {\n                    \"default\": \"UNVERIFIED\",\n                    \"retention\": \"RETENTION_SOURCE\"\n                  }\n                }\n              },\n              \"extensions\": [\n                [\n                  1000,\n                  536870911\n                ]\n              ],\n              \"nested\": {\n                \"Declaration\": {\n                  \"fields\": {\n                    \"number\": {\n                      \"type\": \"int32\",\n                      \"id\": 1\n                    },\n                    \"fullName\": {\n                      \"type\": \"string\",\n                      \"id\": 2\n                    },\n                    \"type\": {\n                      \"type\": \"string\",\n                      \"id\": 3\n                    },\n                    \"reserved\": {\n                      \"type\": \"bool\",\n                      \"id\": 5\n                    },\n                    \"repeated\": {\n                      \"type\": \"bool\",\n                      \"id\": 6\n                    }\n                  },\n                  \"reserved\": [\n                    [\n                      4,\n                      4\n                    ]\n                  ]\n                },\n                \"VerificationState\": {\n                  \"values\": {\n                    \"DECLARATION\": 0,\n                    \"UNVERIFIED\": 1\n                  }\n                }\n              }\n            },\n            \"FieldDescriptorProto\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"name\": {\n                  \"type\": \"string\",\n                  \"id\": 1\n                },\n                \"number\": {\n                  \"type\": \"int32\",\n                  \"id\": 3\n                },\n                \"label\": {\n                  \"type\": \"Label\",\n                  \"id\": 4\n                },\n                \"type\": {\n                  \"type\": \"Type\",\n                  \"id\": 5\n                },\n                \"typeName\": {\n                  \"type\": \"string\",\n                  \"id\": 6\n                },\n                \"extendee\": {\n                  \"type\": \"string\",\n                  \"id\": 2\n                },\n                \"defaultValue\": {\n                  \"type\": \"string\",\n                  \"id\": 7\n                },\n                \"oneofIndex\": {\n                  \"type\": \"int32\",\n                  \"id\": 9\n                },\n                \"jsonName\": {\n                  \"type\": \"string\",\n                  \"id\": 10\n                },\n                \"options\": {\n                  \"type\": \"FieldOptions\",\n                  \"id\": 8\n                },\n                \"proto3Optional\": {\n                  \"type\": \"bool\",\n                  \"id\": 17\n                }\n              },\n              \"nested\": {\n                \"Type\": {\n                  \"values\": {\n                    \"TYPE_DOUBLE\": 1,\n                    \"TYPE_FLOAT\": 2,\n                    \"TYPE_INT64\": 3,\n                    \"TYPE_UINT64\": 4,\n                    \"TYPE_INT32\": 5,\n                    \"TYPE_FIXED64\": 6,\n                    \"TYPE_FIXED32\": 7,\n                    \"TYPE_BOOL\": 8,\n                    \"TYPE_STRING\": 9,\n                    \"TYPE_GROUP\": 10,\n                    \"TYPE_MESSAGE\": 11,\n                    \"TYPE_BYTES\": 12,\n                    \"TYPE_UINT32\": 13,\n                    \"TYPE_ENUM\": 14,\n                    \"TYPE_SFIXED32\": 15,\n                    \"TYPE_SFIXED64\": 16,\n                    \"TYPE_SINT32\": 17,\n                    \"TYPE_SINT64\": 18\n                  }\n                },\n                \"Label\": {\n                  \"values\": {\n                    \"LABEL_OPTIONAL\": 1,\n                    \"LABEL_REPEATED\": 3,\n                    \"LABEL_REQUIRED\": 2\n                  }\n                }\n              }\n            },\n            \"OneofDescriptorProto\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"name\": {\n                  \"type\": \"string\",\n                  \"id\": 1\n                },\n                \"options\": {\n                  \"type\": \"OneofOptions\",\n                  \"id\": 2\n                }\n              }\n            },\n            \"EnumDescriptorProto\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"name\": {\n                  \"type\": \"string\",\n                  \"id\": 1\n                },\n                \"value\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"EnumValueDescriptorProto\",\n                  \"id\": 2\n                },\n                \"options\": {\n                  \"type\": \"EnumOptions\",\n                  \"id\": 3\n                },\n                \"reservedRange\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"EnumReservedRange\",\n                  \"id\": 4\n                },\n                \"reservedName\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"string\",\n                  \"id\": 5\n                },\n                \"visibility\": {\n                  \"type\": \"SymbolVisibility\",\n                  \"id\": 6\n                }\n              },\n              \"nested\": {\n                \"EnumReservedRange\": {\n                  \"fields\": {\n                    \"start\": {\n                      \"type\": \"int32\",\n                      \"id\": 1\n                    },\n                    \"end\": {\n                      \"type\": \"int32\",\n                      \"id\": 2\n                    }\n                  }\n                }\n              }\n            },\n            \"EnumValueDescriptorProto\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"name\": {\n                  \"type\": \"string\",\n                  \"id\": 1\n                },\n                \"number\": {\n                  \"type\": \"int32\",\n                  \"id\": 2\n                },\n                \"options\": {\n                  \"type\": \"EnumValueOptions\",\n                  \"id\": 3\n                }\n              }\n            },\n            \"ServiceDescriptorProto\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"name\": {\n                  \"type\": \"string\",\n                  \"id\": 1\n                },\n                \"method\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"MethodDescriptorProto\",\n                  \"id\": 2\n                },\n                \"options\": {\n                  \"type\": \"ServiceOptions\",\n                  \"id\": 3\n                }\n              }\n            },\n            \"MethodDescriptorProto\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"name\": {\n                  \"type\": \"string\",\n                  \"id\": 1\n                },\n                \"inputType\": {\n                  \"type\": \"string\",\n                  \"id\": 2\n                },\n                \"outputType\": {\n                  \"type\": \"string\",\n                  \"id\": 3\n                },\n                \"options\": {\n                  \"type\": \"MethodOptions\",\n                  \"id\": 4\n                },\n                \"clientStreaming\": {\n                  \"type\": \"bool\",\n                  \"id\": 5\n                },\n                \"serverStreaming\": {\n                  \"type\": \"bool\",\n                  \"id\": 6\n                }\n              }\n            },\n            \"FileOptions\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"javaPackage\": {\n                  \"type\": \"string\",\n                  \"id\": 1\n                },\n                \"javaOuterClassname\": {\n                  \"type\": \"string\",\n                  \"id\": 8\n                },\n                \"javaMultipleFiles\": {\n                  \"type\": \"bool\",\n                  \"id\": 10\n                },\n                \"javaGenerateEqualsAndHash\": {\n                  \"type\": \"bool\",\n                  \"id\": 20,\n                  \"options\": {\n                    \"deprecated\": true\n                  }\n                },\n                \"javaStringCheckUtf8\": {\n                  \"type\": \"bool\",\n                  \"id\": 27\n                },\n                \"optimizeFor\": {\n                  \"type\": \"OptimizeMode\",\n                  \"id\": 9,\n                  \"options\": {\n                    \"default\": \"SPEED\"\n                  }\n                },\n                \"goPackage\": {\n                  \"type\": \"string\",\n                  \"id\": 11\n                },\n                \"ccGenericServices\": {\n                  \"type\": \"bool\",\n                  \"id\": 16\n                },\n                \"javaGenericServices\": {\n                  \"type\": \"bool\",\n                  \"id\": 17\n                },\n                \"pyGenericServices\": {\n                  \"type\": \"bool\",\n                  \"id\": 18\n                },\n                \"deprecated\": {\n                  \"type\": \"bool\",\n                  \"id\": 23\n                },\n                \"ccEnableArenas\": {\n                  \"type\": \"bool\",\n                  \"id\": 31,\n                  \"options\": {\n                    \"default\": true\n                  }\n                },\n                \"objcClassPrefix\": {\n                  \"type\": \"string\",\n                  \"id\": 36\n                },\n                \"csharpNamespace\": {\n                  \"type\": \"string\",\n                  \"id\": 37\n                },\n                \"swiftPrefix\": {\n                  \"type\": \"string\",\n                  \"id\": 39\n                },\n                \"phpClassPrefix\": {\n                  \"type\": \"string\",\n                  \"id\": 40\n                },\n                \"phpNamespace\": {\n                  \"type\": \"string\",\n                  \"id\": 41\n                },\n                \"phpMetadataNamespace\": {\n                  \"type\": \"string\",\n                  \"id\": 44\n                },\n                \"rubyPackage\": {\n                  \"type\": \"string\",\n                  \"id\": 45\n                },\n                \"features\": {\n                  \"type\": \"FeatureSet\",\n                  \"id\": 50\n                },\n                \"uninterpretedOption\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"UninterpretedOption\",\n                  \"id\": 999\n                }\n              },\n              \"extensions\": [\n                [\n                  1000,\n                  536870911\n                ]\n              ],\n              \"reserved\": [\n                [\n                  42,\n                  42\n                ],\n                [\n                  38,\n                  38\n                ],\n                \"php_generic_services\"\n              ],\n              \"nested\": {\n                \"OptimizeMode\": {\n                  \"values\": {\n                    \"SPEED\": 1,\n                    \"CODE_SIZE\": 2,\n                    \"LITE_RUNTIME\": 3\n                  }\n                }\n              }\n            },\n            \"MessageOptions\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"messageSetWireFormat\": {\n                  \"type\": \"bool\",\n                  \"id\": 1\n                },\n                \"noStandardDescriptorAccessor\": {\n                  \"type\": \"bool\",\n                  \"id\": 2\n                },\n                \"deprecated\": {\n                  \"type\": \"bool\",\n                  \"id\": 3\n                },\n                \"mapEntry\": {\n                  \"type\": \"bool\",\n                  \"id\": 7\n                },\n                \"deprecatedLegacyJsonFieldConflicts\": {\n                  \"type\": \"bool\",\n                  \"id\": 11,\n                  \"options\": {\n                    \"deprecated\": true\n                  }\n                },\n                \"features\": {\n                  \"type\": \"FeatureSet\",\n                  \"id\": 12\n                },\n                \"uninterpretedOption\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"UninterpretedOption\",\n                  \"id\": 999\n                }\n              },\n              \"extensions\": [\n                [\n                  1000,\n                  536870911\n                ]\n              ],\n              \"reserved\": [\n                [\n                  4,\n                  4\n                ],\n                [\n                  5,\n                  5\n                ],\n                [\n                  6,\n                  6\n                ],\n                [\n                  8,\n                  8\n                ],\n                [\n                  9,\n                  9\n                ]\n              ]\n            },\n            \"FieldOptions\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"ctype\": {\n                  \"type\": \"CType\",\n                  \"id\": 1,\n                  \"options\": {\n                    \"default\": \"STRING\"\n                  }\n                },\n                \"packed\": {\n                  \"type\": \"bool\",\n                  \"id\": 2\n                },\n                \"jstype\": {\n                  \"type\": \"JSType\",\n                  \"id\": 6,\n                  \"options\": {\n                    \"default\": \"JS_NORMAL\"\n                  }\n                },\n                \"lazy\": {\n                  \"type\": \"bool\",\n                  \"id\": 5\n                },\n                \"unverifiedLazy\": {\n                  \"type\": \"bool\",\n                  \"id\": 15\n                },\n                \"deprecated\": {\n                  \"type\": \"bool\",\n                  \"id\": 3\n                },\n                \"weak\": {\n                  \"type\": \"bool\",\n                  \"id\": 10,\n                  \"options\": {\n                    \"deprecated\": true\n                  }\n                },\n                \"debugRedact\": {\n                  \"type\": \"bool\",\n                  \"id\": 16\n                },\n                \"retention\": {\n                  \"type\": \"OptionRetention\",\n                  \"id\": 17\n                },\n                \"targets\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"OptionTargetType\",\n                  \"id\": 19\n                },\n                \"editionDefaults\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"EditionDefault\",\n                  \"id\": 20\n                },\n                \"features\": {\n                  \"type\": \"FeatureSet\",\n                  \"id\": 21\n                },\n                \"featureSupport\": {\n                  \"type\": \"FeatureSupport\",\n                  \"id\": 22\n                },\n                \"uninterpretedOption\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"UninterpretedOption\",\n                  \"id\": 999\n                }\n              },\n              \"extensions\": [\n                [\n                  1000,\n                  536870911\n                ]\n              ],\n              \"reserved\": [\n                [\n                  4,\n                  4\n                ],\n                [\n                  18,\n                  18\n                ]\n              ],\n              \"nested\": {\n                \"CType\": {\n                  \"values\": {\n                    \"STRING\": 0,\n                    \"CORD\": 1,\n                    \"STRING_PIECE\": 2\n                  }\n                },\n                \"JSType\": {\n                  \"values\": {\n                    \"JS_NORMAL\": 0,\n                    \"JS_STRING\": 1,\n                    \"JS_NUMBER\": 2\n                  }\n                },\n                \"OptionRetention\": {\n                  \"values\": {\n                    \"RETENTION_UNKNOWN\": 0,\n                    \"RETENTION_RUNTIME\": 1,\n                    \"RETENTION_SOURCE\": 2\n                  }\n                },\n                \"OptionTargetType\": {\n                  \"values\": {\n                    \"TARGET_TYPE_UNKNOWN\": 0,\n                    \"TARGET_TYPE_FILE\": 1,\n                    \"TARGET_TYPE_EXTENSION_RANGE\": 2,\n                    \"TARGET_TYPE_MESSAGE\": 3,\n                    \"TARGET_TYPE_FIELD\": 4,\n                    \"TARGET_TYPE_ONEOF\": 5,\n                    \"TARGET_TYPE_ENUM\": 6,\n                    \"TARGET_TYPE_ENUM_ENTRY\": 7,\n                    \"TARGET_TYPE_SERVICE\": 8,\n                    \"TARGET_TYPE_METHOD\": 9\n                  }\n                },\n                \"EditionDefault\": {\n                  \"fields\": {\n                    \"edition\": {\n                      \"type\": \"Edition\",\n                      \"id\": 3\n                    },\n                    \"value\": {\n                      \"type\": \"string\",\n                      \"id\": 2\n                    }\n                  }\n                },\n                \"FeatureSupport\": {\n                  \"fields\": {\n                    \"editionIntroduced\": {\n                      \"type\": \"Edition\",\n                      \"id\": 1\n                    },\n                    \"editionDeprecated\": {\n                      \"type\": \"Edition\",\n                      \"id\": 2\n                    },\n                    \"deprecationWarning\": {\n                      \"type\": \"string\",\n                      \"id\": 3\n                    },\n                    \"editionRemoved\": {\n                      \"type\": \"Edition\",\n                      \"id\": 4\n                    }\n                  }\n                }\n              }\n            },\n            \"OneofOptions\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"features\": {\n                  \"type\": \"FeatureSet\",\n                  \"id\": 1\n                },\n                \"uninterpretedOption\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"UninterpretedOption\",\n                  \"id\": 999\n                }\n              },\n              \"extensions\": [\n                [\n                  1000,\n                  536870911\n                ]\n              ]\n            },\n            \"EnumOptions\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"allowAlias\": {\n                  \"type\": \"bool\",\n                  \"id\": 2\n                },\n                \"deprecated\": {\n                  \"type\": \"bool\",\n                  \"id\": 3\n                },\n                \"deprecatedLegacyJsonFieldConflicts\": {\n                  \"type\": \"bool\",\n                  \"id\": 6,\n                  \"options\": {\n                    \"deprecated\": true\n                  }\n                },\n                \"features\": {\n                  \"type\": \"FeatureSet\",\n                  \"id\": 7\n                },\n                \"uninterpretedOption\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"UninterpretedOption\",\n                  \"id\": 999\n                }\n              },\n              \"extensions\": [\n                [\n                  1000,\n                  536870911\n                ]\n              ],\n              \"reserved\": [\n                [\n                  5,\n                  5\n                ]\n              ]\n            },\n            \"EnumValueOptions\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"deprecated\": {\n                  \"type\": \"bool\",\n                  \"id\": 1\n                },\n                \"features\": {\n                  \"type\": \"FeatureSet\",\n                  \"id\": 2\n                },\n                \"debugRedact\": {\n                  \"type\": \"bool\",\n                  \"id\": 3\n                },\n                \"featureSupport\": {\n                  \"type\": \"FieldOptions.FeatureSupport\",\n                  \"id\": 4\n                },\n                \"uninterpretedOption\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"UninterpretedOption\",\n                  \"id\": 999\n                }\n              },\n              \"extensions\": [\n                [\n                  1000,\n                  536870911\n                ]\n              ]\n            },\n            \"ServiceOptions\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"features\": {\n                  \"type\": \"FeatureSet\",\n                  \"id\": 34\n                },\n                \"deprecated\": {\n                  \"type\": \"bool\",\n                  \"id\": 33\n                },\n                \"uninterpretedOption\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"UninterpretedOption\",\n                  \"id\": 999\n                }\n              },\n              \"extensions\": [\n                [\n                  1000,\n                  536870911\n                ]\n              ]\n            },\n            \"MethodOptions\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"deprecated\": {\n                  \"type\": \"bool\",\n                  \"id\": 33\n                },\n                \"idempotencyLevel\": {\n                  \"type\": \"IdempotencyLevel\",\n                  \"id\": 34,\n                  \"options\": {\n                    \"default\": \"IDEMPOTENCY_UNKNOWN\"\n                  }\n                },\n                \"features\": {\n                  \"type\": \"FeatureSet\",\n                  \"id\": 35\n                },\n                \"uninterpretedOption\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"UninterpretedOption\",\n                  \"id\": 999\n                }\n              },\n              \"extensions\": [\n                [\n                  1000,\n                  536870911\n                ]\n              ],\n              \"nested\": {\n                \"IdempotencyLevel\": {\n                  \"values\": {\n                    \"IDEMPOTENCY_UNKNOWN\": 0,\n                    \"NO_SIDE_EFFECTS\": 1,\n                    \"IDEMPOTENT\": 2\n                  }\n                }\n              }\n            },\n            \"UninterpretedOption\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"name\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"NamePart\",\n                  \"id\": 2\n                },\n                \"identifierValue\": {\n                  \"type\": \"string\",\n                  \"id\": 3\n                },\n                \"positiveIntValue\": {\n                  \"type\": \"uint64\",\n                  \"id\": 4\n                },\n                \"negativeIntValue\": {\n                  \"type\": \"int64\",\n                  \"id\": 5\n                },\n                \"doubleValue\": {\n                  \"type\": \"double\",\n                  \"id\": 6\n                },\n                \"stringValue\": {\n                  \"type\": \"bytes\",\n                  \"id\": 7\n                },\n                \"aggregateValue\": {\n                  \"type\": \"string\",\n                  \"id\": 8\n                }\n              },\n              \"nested\": {\n                \"NamePart\": {\n                  \"fields\": {\n                    \"namePart\": {\n                      \"rule\": \"required\",\n                      \"type\": \"string\",\n                      \"id\": 1\n                    },\n                    \"isExtension\": {\n                      \"rule\": \"required\",\n                      \"type\": \"bool\",\n                      \"id\": 2\n                    }\n                  }\n                }\n              }\n            },\n            \"FeatureSet\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"fieldPresence\": {\n                  \"type\": \"FieldPresence\",\n                  \"id\": 1,\n                  \"options\": {\n                    \"retention\": \"RETENTION_RUNTIME\",\n                    \"targets\": \"TARGET_TYPE_FILE\",\n                    \"feature_support.edition_introduced\": \"EDITION_2023\",\n                    \"edition_defaults.edition\": \"EDITION_2023\",\n                    \"edition_defaults.value\": \"EXPLICIT\"\n                  }\n                },\n                \"enumType\": {\n                  \"type\": \"EnumType\",\n                  \"id\": 2,\n                  \"options\": {\n                    \"retention\": \"RETENTION_RUNTIME\",\n                    \"targets\": \"TARGET_TYPE_FILE\",\n                    \"feature_support.edition_introduced\": \"EDITION_2023\",\n                    \"edition_defaults.edition\": \"EDITION_PROTO3\",\n                    \"edition_defaults.value\": \"OPEN\"\n                  }\n                },\n                \"repeatedFieldEncoding\": {\n                  \"type\": \"RepeatedFieldEncoding\",\n                  \"id\": 3,\n                  \"options\": {\n                    \"retention\": \"RETENTION_RUNTIME\",\n                    \"targets\": \"TARGET_TYPE_FILE\",\n                    \"feature_support.edition_introduced\": \"EDITION_2023\",\n                    \"edition_defaults.edition\": \"EDITION_PROTO3\",\n                    \"edition_defaults.value\": \"PACKED\"\n                  }\n                },\n                \"utf8Validation\": {\n                  \"type\": \"Utf8Validation\",\n                  \"id\": 4,\n                  \"options\": {\n                    \"retention\": \"RETENTION_RUNTIME\",\n                    \"targets\": \"TARGET_TYPE_FILE\",\n                    \"feature_support.edition_introduced\": \"EDITION_2023\",\n                    \"edition_defaults.edition\": \"EDITION_PROTO3\",\n                    \"edition_defaults.value\": \"VERIFY\"\n                  }\n                },\n                \"messageEncoding\": {\n                  \"type\": \"MessageEncoding\",\n                  \"id\": 5,\n                  \"options\": {\n                    \"retention\": \"RETENTION_RUNTIME\",\n                    \"targets\": \"TARGET_TYPE_FILE\",\n                    \"feature_support.edition_introduced\": \"EDITION_2023\",\n                    \"edition_defaults.edition\": \"EDITION_LEGACY\",\n                    \"edition_defaults.value\": \"LENGTH_PREFIXED\"\n                  }\n                },\n                \"jsonFormat\": {\n                  \"type\": \"JsonFormat\",\n                  \"id\": 6,\n                  \"options\": {\n                    \"retention\": \"RETENTION_RUNTIME\",\n                    \"targets\": \"TARGET_TYPE_FILE\",\n                    \"feature_support.edition_introduced\": \"EDITION_2023\",\n                    \"edition_defaults.edition\": \"EDITION_PROTO3\",\n                    \"edition_defaults.value\": \"ALLOW\"\n                  }\n                },\n                \"enforceNamingStyle\": {\n                  \"type\": \"EnforceNamingStyle\",\n                  \"id\": 7,\n                  \"options\": {\n                    \"retention\": \"RETENTION_SOURCE\",\n                    \"targets\": \"TARGET_TYPE_METHOD\",\n                    \"feature_support.edition_introduced\": \"EDITION_2024\",\n                    \"edition_defaults.edition\": \"EDITION_2024\",\n                    \"edition_defaults.value\": \"STYLE2024\"\n                  }\n                },\n                \"defaultSymbolVisibility\": {\n                  \"type\": \"VisibilityFeature.DefaultSymbolVisibility\",\n                  \"id\": 8,\n                  \"options\": {\n                    \"retention\": \"RETENTION_SOURCE\",\n                    \"targets\": \"TARGET_TYPE_FILE\",\n                    \"feature_support.edition_introduced\": \"EDITION_2024\",\n                    \"edition_defaults.edition\": \"EDITION_2024\",\n                    \"edition_defaults.value\": \"EXPORT_TOP_LEVEL\"\n                  }\n                }\n              },\n              \"extensions\": [\n                [\n                  1000,\n                  9994\n                ],\n                [\n                  9995,\n                  9999\n                ],\n                [\n                  10000,\n                  10000\n                ]\n              ],\n              \"reserved\": [\n                [\n                  999,\n                  999\n                ]\n              ],\n              \"nested\": {\n                \"FieldPresence\": {\n                  \"values\": {\n                    \"FIELD_PRESENCE_UNKNOWN\": 0,\n                    \"EXPLICIT\": 1,\n                    \"IMPLICIT\": 2,\n                    \"LEGACY_REQUIRED\": 3\n                  }\n                },\n                \"EnumType\": {\n                  \"values\": {\n                    \"ENUM_TYPE_UNKNOWN\": 0,\n                    \"OPEN\": 1,\n                    \"CLOSED\": 2\n                  }\n                },\n                \"RepeatedFieldEncoding\": {\n                  \"values\": {\n                    \"REPEATED_FIELD_ENCODING_UNKNOWN\": 0,\n                    \"PACKED\": 1,\n                    \"EXPANDED\": 2\n                  }\n                },\n                \"Utf8Validation\": {\n                  \"values\": {\n                    \"UTF8_VALIDATION_UNKNOWN\": 0,\n                    \"VERIFY\": 2,\n                    \"NONE\": 3\n                  }\n                },\n                \"MessageEncoding\": {\n                  \"values\": {\n                    \"MESSAGE_ENCODING_UNKNOWN\": 0,\n                    \"LENGTH_PREFIXED\": 1,\n                    \"DELIMITED\": 2\n                  }\n                },\n                \"JsonFormat\": {\n                  \"values\": {\n                    \"JSON_FORMAT_UNKNOWN\": 0,\n                    \"ALLOW\": 1,\n                    \"LEGACY_BEST_EFFORT\": 2\n                  }\n                },\n                \"EnforceNamingStyle\": {\n                  \"values\": {\n                    \"ENFORCE_NAMING_STYLE_UNKNOWN\": 0,\n                    \"STYLE2024\": 1,\n                    \"STYLE_LEGACY\": 2\n                  }\n                },\n                \"VisibilityFeature\": {\n                  \"fields\": {},\n                  \"reserved\": [\n                    [\n                      1,\n                      536870911\n                    ]\n                  ],\n                  \"nested\": {\n                    \"DefaultSymbolVisibility\": {\n                      \"values\": {\n                        \"DEFAULT_SYMBOL_VISIBILITY_UNKNOWN\": 0,\n                        \"EXPORT_ALL\": 1,\n                        \"EXPORT_TOP_LEVEL\": 2,\n                        \"LOCAL_ALL\": 3,\n                        \"STRICT\": 4\n                      }\n                    }\n                  }\n                }\n              }\n            },\n            \"FeatureSetDefaults\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"defaults\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"FeatureSetEditionDefault\",\n                  \"id\": 1\n                },\n                \"minimumEdition\": {\n                  \"type\": \"Edition\",\n                  \"id\": 4\n                },\n                \"maximumEdition\": {\n                  \"type\": \"Edition\",\n                  \"id\": 5\n                }\n              },\n              \"nested\": {\n                \"FeatureSetEditionDefault\": {\n                  \"fields\": {\n                    \"edition\": {\n                      \"type\": \"Edition\",\n                      \"id\": 3\n                    },\n                    \"overridableFeatures\": {\n                      \"type\": \"FeatureSet\",\n                      \"id\": 4\n                    },\n                    \"fixedFeatures\": {\n                      \"type\": \"FeatureSet\",\n                      \"id\": 5\n                    }\n                  },\n                  \"reserved\": [\n                    [\n                      1,\n                      1\n                    ],\n                    [\n                      2,\n                      2\n                    ],\n                    \"features\"\n                  ]\n                }\n              }\n            },\n            \"SourceCodeInfo\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"location\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"Location\",\n                  \"id\": 1\n                }\n              },\n              \"extensions\": [\n                [\n                  536000000,\n                  536000000\n                ]\n              ],\n              \"nested\": {\n                \"Location\": {\n                  \"fields\": {\n                    \"path\": {\n                      \"rule\": \"repeated\",\n                      \"type\": \"int32\",\n                      \"id\": 1,\n                      \"options\": {\n                        \"packed\": true\n                      }\n                    },\n                    \"span\": {\n                      \"rule\": \"repeated\",\n                      \"type\": \"int32\",\n                      \"id\": 2,\n                      \"options\": {\n                        \"packed\": true\n                      }\n                    },\n                    \"leadingComments\": {\n                      \"type\": \"string\",\n                      \"id\": 3\n                    },\n                    \"trailingComments\": {\n                      \"type\": \"string\",\n                      \"id\": 4\n                    },\n                    \"leadingDetachedComments\": {\n                      \"rule\": \"repeated\",\n                      \"type\": \"string\",\n                      \"id\": 6\n                    }\n                  }\n                }\n              }\n            },\n            \"GeneratedCodeInfo\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"annotation\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"Annotation\",\n                  \"id\": 1\n                }\n              },\n              \"nested\": {\n                \"Annotation\": {\n                  \"fields\": {\n                    \"path\": {\n                      \"rule\": \"repeated\",\n                      \"type\": \"int32\",\n                      \"id\": 1,\n                      \"options\": {\n                        \"packed\": true\n                      }\n                    },\n                    \"sourceFile\": {\n                      \"type\": \"string\",\n                      \"id\": 2\n                    },\n                    \"begin\": {\n                      \"type\": \"int32\",\n                      \"id\": 3\n                    },\n                    \"end\": {\n                      \"type\": \"int32\",\n                      \"id\": 4\n                    },\n                    \"semantic\": {\n                      \"type\": \"Semantic\",\n                      \"id\": 5\n                    }\n                  },\n                  \"nested\": {\n                    \"Semantic\": {\n                      \"values\": {\n                        \"NONE\": 0,\n                        \"SET\": 1,\n                        \"ALIAS\": 2\n                      }\n                    }\n                  }\n                }\n              }\n            },\n            \"SymbolVisibility\": {\n              \"edition\": \"proto2\",\n              \"values\": {\n                \"VISIBILITY_UNSET\": 0,\n                \"VISIBILITY_LOCAL\": 1,\n                \"VISIBILITY_EXPORT\": 2\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}","\"use strict\";\nvar $protobuf = require(\"../..\");\nmodule.exports = exports = $protobuf.descriptor = $protobuf.Root.fromJSON(require(\"../../google/protobuf/descriptor.json\")).lookup(\".google.protobuf\");\n\nvar Namespace = $protobuf.Namespace,\n    Root      = $protobuf.Root,\n    Enum      = $protobuf.Enum,\n    Type      = $protobuf.Type,\n    Field     = $protobuf.Field,\n    MapField  = $protobuf.MapField,\n    OneOf     = $protobuf.OneOf,\n    Service   = $protobuf.Service,\n    Method    = $protobuf.Method,\n    patterns  = $protobuf.util.patterns;\n\nvar numberRe  = patterns.numberRe,\n    typeRefRe = patterns.typeRefRe;\n\n// --- Root ---\n\n/**\n * Properties of a FileDescriptorSet message.\n * @interface IFileDescriptorSet\n * @property {IFileDescriptorProto[]} file Files\n */\n\n/**\n * Properties of a FileDescriptorProto message.\n * @interface IFileDescriptorProto\n * @property {string} [name] File name\n * @property {string} [package] Package\n * @property {*} [dependency] Not supported\n * @property {*} [publicDependency] Not supported\n * @property {*} [weakDependency] Not supported\n * @property {IDescriptorProto[]} [messageType] Nested message types\n * @property {IEnumDescriptorProto[]} [enumType] Nested enums\n * @property {IServiceDescriptorProto[]} [service] Nested services\n * @property {IFieldDescriptorProto[]} [extension] Nested extension fields\n * @property {IFileOptions} [options] Options\n * @property {*} [sourceCodeInfo] Not supported\n * @property {string} [syntax=\"proto2\"] Syntax\n * @property {IEdition} [edition] Edition\n */\n\n/**\n * Values of the Edition enum.\n * @typedef IEdition\n * @type {number}\n * @property {number} EDITION_UNKNOWN=0\n * @property {number} EDITION_LEGACY=900\n * @property {number} EDITION_PROTO2=998\n * @property {number} EDITION_PROTO3=999\n * @property {number} EDITION_2023=1000\n * @property {number} EDITION_2024=1001\n * @property {number} EDITION_1_TEST_ONLY=1\n * @property {number} EDITION_2_TEST_ONLY=2\n * @property {number} EDITION_99997_TEST_ONLY=99997\n * @property {number} EDITION_99998_TEST_ONLY=99998\n * @property {number} EDITION_99998_TEST_ONLY=99999\n * @property {number} EDITION_MAX=2147483647\n */\n\n/**\n * Properties of a FileOptions message.\n * @interface IFileOptions\n * @property {string} [javaPackage]\n * @property {string} [javaOuterClassname]\n * @property {boolean} [javaMultipleFiles]\n * @property {boolean} [javaGenerateEqualsAndHash]\n * @property {boolean} [javaStringCheckUtf8]\n * @property {IFileOptionsOptimizeMode} [optimizeFor=1]\n * @property {string} [goPackage]\n * @property {boolean} [ccGenericServices]\n * @property {boolean} [javaGenericServices]\n * @property {boolean} [pyGenericServices]\n * @property {boolean} [deprecated]\n * @property {boolean} [ccEnableArenas]\n * @property {string} [objcClassPrefix]\n * @property {string} [csharpNamespace]\n */\n\n/**\n * Values of he FileOptions.OptimizeMode enum.\n * @typedef IFileOptionsOptimizeMode\n * @type {number}\n * @property {number} SPEED=1\n * @property {number} CODE_SIZE=2\n * @property {number} LITE_RUNTIME=3\n */\n\n/**\n * Creates a root from a descriptor set.\n * @param {IFileDescriptorSet|Reader|Uint8Array} descriptor Descriptor\n * @returns {Root} Root instance\n */\nRoot.fromDescriptor = function fromDescriptor(descriptor) {\n\n    // Decode the descriptor message if specified as a buffer:\n    if (typeof descriptor.length === \"number\")\n        descriptor = exports.FileDescriptorSet.decode(descriptor);\n\n    var root = new Root();\n\n    if (descriptor.file) {\n        var fileDescriptor,\n            filePackage;\n        for (var j = 0, i; j < descriptor.file.length; ++j) {\n            filePackage = root;\n            if ((fileDescriptor = descriptor.file[j])[\"package\"] && fileDescriptor[\"package\"].length)\n                filePackage = root.define(fileDescriptor[\"package\"]);\n            var edition = editionFromDescriptor(fileDescriptor);\n            if (fileDescriptor.name && fileDescriptor.name.length)\n                root.files.push(filePackage.filename = fileDescriptor.name);\n            if (fileDescriptor.messageType)\n                for (i = 0; i < fileDescriptor.messageType.length; ++i)\n                    filePackage.add(Type.fromDescriptor(fileDescriptor.messageType[i], edition));\n            if (fileDescriptor.enumType)\n                for (i = 0; i < fileDescriptor.enumType.length; ++i)\n                    filePackage.add(Enum.fromDescriptor(fileDescriptor.enumType[i], edition));\n            if (fileDescriptor.extension)\n                for (i = 0; i < fileDescriptor.extension.length; ++i)\n                    filePackage.add(Field.fromDescriptor(fileDescriptor.extension[i], edition));\n            if (fileDescriptor.service)\n                for (i = 0; i < fileDescriptor.service.length; ++i)\n                    filePackage.add(Service.fromDescriptor(fileDescriptor.service[i], edition));\n            var opts = fromDescriptorOptions(fileDescriptor.options, exports.FileOptions);\n            if (opts) {\n                var ks = Object.keys(opts);\n                for (i = 0; i < ks.length; ++i)\n                    filePackage.setOption(ks[i], opts[ks[i]]);\n            }\n        }\n    }\n\n    return root.resolveAll();\n};\n\n/**\n * Converts a root to a descriptor set.\n * @returns {Message<IFileDescriptorSet>} Descriptor\n * @param {string} [edition=\"proto2\"] The syntax or edition to use\n */\nRoot.prototype.toDescriptor = function toDescriptor(edition) {\n    var set = exports.FileDescriptorSet.create();\n    Root_toDescriptorRecursive(this, set.file, edition);\n    return set;\n};\n\n// Traverses a namespace and assembles the descriptor set\nfunction Root_toDescriptorRecursive(ns, files, edition) {\n\n    // Create a new file\n    var file = exports.FileDescriptorProto.create({ name: ns.filename || (ns.fullName.substring(1).replace(/\\./g, \"_\") || \"root\") + \".proto\" });\n    editionToDescriptor(edition, file);\n    if (!(ns instanceof Root))\n        file[\"package\"] = ns.fullName.substring(1);\n\n    // Add nested types\n    for (var i = 0, nested; i < ns.nestedArray.length; ++i)\n        if ((nested = ns._nestedArray[i]) instanceof Type)\n            file.messageType.push(nested.toDescriptor(edition));\n        else if (nested instanceof Enum)\n            file.enumType.push(nested.toDescriptor());\n        else if (nested instanceof Field)\n            file.extension.push(nested.toDescriptor(edition));\n        else if (nested instanceof Service)\n            file.service.push(nested.toDescriptor());\n        else if (nested instanceof /* plain */ Namespace)\n            Root_toDescriptorRecursive(nested, files, edition); // requires new file\n\n    // Keep package-level options\n    file.options = toDescriptorOptions(ns.options, exports.FileOptions);\n\n    // And keep the file only if there is at least one nested object\n    if (file.messageType.length + file.enumType.length + file.extension.length + file.service.length)\n        files.push(file);\n}\n\n// --- Type ---\n\n/**\n * Properties of a DescriptorProto message.\n * @interface IDescriptorProto\n * @property {string} [name] Message type name\n * @property {IFieldDescriptorProto[]} [field] Fields\n * @property {IFieldDescriptorProto[]} [extension] Extension fields\n * @property {IDescriptorProto[]} [nestedType] Nested message types\n * @property {IEnumDescriptorProto[]} [enumType] Nested enums\n * @property {IDescriptorProtoExtensionRange[]} [extensionRange] Extension ranges\n * @property {IOneofDescriptorProto[]} [oneofDecl] Oneofs\n * @property {IMessageOptions} [options] Not supported\n * @property {IDescriptorProtoReservedRange[]} [reservedRange] Reserved ranges\n * @property {string[]} [reservedName] Reserved names\n */\n\n/**\n * Properties of a MessageOptions message.\n * @interface IMessageOptions\n * @property {boolean} [mapEntry=false] Whether this message is a map entry\n */\n\n/**\n * Properties of an ExtensionRange message.\n * @interface IDescriptorProtoExtensionRange\n * @property {number} [start] Start field id\n * @property {number} [end] End field id\n */\n\n/**\n * Properties of a ReservedRange message.\n * @interface IDescriptorProtoReservedRange\n * @property {number} [start] Start field id\n * @property {number} [end] End field id\n */\n\nvar unnamedMessageIndex = 0;\n\n/**\n * Creates a type from a descriptor.\n *\n * Warning: this is not safe to use with editions protos, since it discards relevant file context.\n *\n * @param {IDescriptorProto|Reader|Uint8Array} descriptor Descriptor\n * @param {string} [edition=\"proto2\"] The syntax or edition to use\n * @param {boolean} [nested=false] Whether or not this is a nested object\n * @param {number} [depth] Current nesting depth, defaults to `0`\n * @returns {Type} Type instance\n */\nType.fromDescriptor = function fromDescriptor(descriptor, edition, nested, depth) {\n    if (depth === undefined)\n        depth = 0;\n    if (depth > $protobuf.util.nestingLimit)\n        throw Error(\"max depth exceeded\");\n    // Decode the descriptor message if specified as a buffer:\n    if (typeof descriptor.length === \"number\")\n        descriptor = exports.DescriptorProto.decode(descriptor);\n\n    // Create the message type\n    var type = new Type(descriptor.name.length ? descriptor.name : \"Type\" + unnamedMessageIndex++, fromDescriptorOptions(descriptor.options, exports.MessageOptions)),\n        i;\n\n    if (!nested)\n        type._edition = edition;\n\n    /* Oneofs */ if (descriptor.oneofDecl)\n        for (i = 0; i < descriptor.oneofDecl.length; ++i)\n            type.add(OneOf.fromDescriptor(descriptor.oneofDecl[i]));\n    /* Fields */ if (descriptor.field)\n        for (i = 0; i < descriptor.field.length; ++i) {\n            var field = Field.fromDescriptor(descriptor.field[i], edition, true);\n            type.add(field);\n            if (descriptor.field[i].hasOwnProperty(\"oneofIndex\")) // eslint-disable-line no-prototype-builtins\n                type.oneofsArray[descriptor.field[i].oneofIndex].add(field);\n        }\n    /* Extension fields */ if (descriptor.extension)\n        for (i = 0; i < descriptor.extension.length; ++i)\n            type.add(Field.fromDescriptor(descriptor.extension[i], edition, true));\n    /* Nested types */ if (descriptor.nestedType)\n        for (i = 0; i < descriptor.nestedType.length; ++i) {\n            type.add(Type.fromDescriptor(descriptor.nestedType[i], edition, true, depth + 1));\n            if (descriptor.nestedType[i].options && descriptor.nestedType[i].options.mapEntry)\n                type.setOption(\"map_entry\", true);\n        }\n    /* Nested enums */ if (descriptor.enumType)\n        for (i = 0; i < descriptor.enumType.length; ++i)\n            type.add(Enum.fromDescriptor(descriptor.enumType[i], edition, true));\n    /* Extension ranges */ if (descriptor.extensionRange && descriptor.extensionRange.length) {\n        type.extensions = [];\n        for (i = 0; i < descriptor.extensionRange.length; ++i)\n            type.extensions.push([ descriptor.extensionRange[i].start, descriptor.extensionRange[i].end ]);\n    }\n    /* Reserved... */ if (descriptor.reservedRange && descriptor.reservedRange.length || descriptor.reservedName && descriptor.reservedName.length) {\n        type.reserved = [];\n        /* Ranges */ if (descriptor.reservedRange)\n            for (i = 0; i < descriptor.reservedRange.length; ++i)\n                type.reserved.push([ descriptor.reservedRange[i].start, descriptor.reservedRange[i].end ]);\n        /* Names */ if (descriptor.reservedName)\n            for (i = 0; i < descriptor.reservedName.length; ++i)\n                type.reserved.push(descriptor.reservedName[i]);\n    }\n\n    return type;\n};\n\n/**\n * Converts a type to a descriptor.\n * @returns {Message<IDescriptorProto>} Descriptor\n * @param {string} [edition=\"proto2\"] The syntax or edition to use\n */\nType.prototype.toDescriptor = function toDescriptor(edition) {\n    var descriptor = exports.DescriptorProto.create({ name: this.name }),\n        i;\n\n    /* Fields */ for (i = 0; i < this.fieldsArray.length; ++i) {\n        var fieldDescriptor;\n        descriptor.field.push(fieldDescriptor = this._fieldsArray[i].toDescriptor(edition));\n        if (this._fieldsArray[i] instanceof MapField) { // map fields are repeated FieldNameEntry\n            var keyType = toDescriptorType(this._fieldsArray[i].keyType, this._fieldsArray[i].resolvedKeyType, false),\n                valueType = toDescriptorType(this._fieldsArray[i].type, this._fieldsArray[i].resolvedType, false),\n                valueTypeName = valueType === /* type */ 11 || valueType === /* enum */ 14\n                    ? this._fieldsArray[i].resolvedType && shortname(this.parent, this._fieldsArray[i].resolvedType) || this._fieldsArray[i].type\n                    : undefined;\n            descriptor.nestedType.push(exports.DescriptorProto.create({\n                name: fieldDescriptor.typeName,\n                field: [\n                    exports.FieldDescriptorProto.create({ name: \"key\", number: 1, label: 1, type: keyType }), // can't reference a type or enum\n                    exports.FieldDescriptorProto.create({ name: \"value\", number: 2, label: 1, type: valueType, typeName: valueTypeName })\n                ],\n                options: exports.MessageOptions.create({ mapEntry: true })\n            }));\n        }\n    }\n    /* Oneofs */ for (i = 0; i < this.oneofsArray.length; ++i)\n        descriptor.oneofDecl.push(this._oneofsArray[i].toDescriptor());\n    /* Nested... */ for (i = 0; i < this.nestedArray.length; ++i) {\n        /* Extension fields */ if (this._nestedArray[i] instanceof Field)\n            descriptor.field.push(this._nestedArray[i].toDescriptor(edition));\n        /* Types */ else if (this._nestedArray[i] instanceof Type)\n            descriptor.nestedType.push(this._nestedArray[i].toDescriptor(edition));\n        /* Enums */ else if (this._nestedArray[i] instanceof Enum)\n            descriptor.enumType.push(this._nestedArray[i].toDescriptor());\n        // plain nested namespaces become packages instead in Root#toDescriptor\n    }\n    /* Extension ranges */ if (this.extensions)\n        for (i = 0; i < this.extensions.length; ++i)\n            descriptor.extensionRange.push(exports.DescriptorProto.ExtensionRange.create({ start: this.extensions[i][0], end: this.extensions[i][1] }));\n    /* Reserved... */ if (this.reserved)\n        for (i = 0; i < this.reserved.length; ++i)\n            /* Names */ if (typeof this.reserved[i] === \"string\")\n                descriptor.reservedName.push(this.reserved[i]);\n            /* Ranges */ else\n                descriptor.reservedRange.push(exports.DescriptorProto.ReservedRange.create({ start: this.reserved[i][0], end: this.reserved[i][1] }));\n\n    descriptor.options = toDescriptorOptions(this.options, exports.MessageOptions);\n\n    return descriptor;\n};\n\n// --- Field ---\n\n/**\n * Properties of a FieldDescriptorProto message.\n * @interface IFieldDescriptorProto\n * @property {string} [name] Field name\n * @property {number} [number] Field id\n * @property {IFieldDescriptorProtoLabel} [label] Field rule\n * @property {IFieldDescriptorProtoType} [type] Field basic type\n * @property {string} [typeName] Field type name\n * @property {string} [extendee] Extended type name\n * @property {string} [defaultValue] Literal default value\n * @property {number} [oneofIndex] Oneof index if part of a oneof\n * @property {*} [jsonName] Not supported\n * @property {IFieldOptions} [options] Field options\n */\n\n/**\n * Values of the FieldDescriptorProto.Label enum.\n * @typedef IFieldDescriptorProtoLabel\n * @type {number}\n * @property {number} LABEL_OPTIONAL=1\n * @property {number} LABEL_REQUIRED=2\n * @property {number} LABEL_REPEATED=3\n */\n\n/**\n * Values of the FieldDescriptorProto.Type enum.\n * @typedef IFieldDescriptorProtoType\n * @type {number}\n * @property {number} TYPE_DOUBLE=1\n * @property {number} TYPE_FLOAT=2\n * @property {number} TYPE_INT64=3\n * @property {number} TYPE_UINT64=4\n * @property {number} TYPE_INT32=5\n * @property {number} TYPE_FIXED64=6\n * @property {number} TYPE_FIXED32=7\n * @property {number} TYPE_BOOL=8\n * @property {number} TYPE_STRING=9\n * @property {number} TYPE_GROUP=10\n * @property {number} TYPE_MESSAGE=11\n * @property {number} TYPE_BYTES=12\n * @property {number} TYPE_UINT32=13\n * @property {number} TYPE_ENUM=14\n * @property {number} TYPE_SFIXED32=15\n * @property {number} TYPE_SFIXED64=16\n * @property {number} TYPE_SINT32=17\n * @property {number} TYPE_SINT64=18\n */\n\n/**\n * Properties of a FieldOptions message.\n * @interface IFieldOptions\n * @property {boolean} [packed] Whether packed or not (defaults to `false` for proto2 and `true` for proto3)\n * @property {IFieldOptionsJSType} [jstype] JavaScript value type (not used by protobuf.js)\n */\n\n/**\n * Values of the FieldOptions.JSType enum.\n * @typedef IFieldOptionsJSType\n * @type {number}\n * @property {number} JS_NORMAL=0\n * @property {number} JS_STRING=1\n * @property {number} JS_NUMBER=2\n */\n\n/**\n * Creates a field from a descriptor.\n *\n * Warning: this is not safe to use with editions protos, since it discards relevant file context.\n *\n * @param {IFieldDescriptorProto|Reader|Uint8Array} descriptor Descriptor\n * @param {string} [edition=\"proto2\"] The syntax or edition to use\n * @param {boolean} [nested=false] Whether or not this is a top-level object\n * @returns {Field} Field instance\n */\nField.fromDescriptor = function fromDescriptor(descriptor, edition, nested) {\n\n    // Decode the descriptor message if specified as a buffer:\n    if (typeof descriptor.length === \"number\")\n        descriptor = exports.DescriptorProto.decode(descriptor);\n\n    if (typeof descriptor.number !== \"number\")\n        throw Error(\"missing field id\");\n\n    // Rewire field type\n    var typeName = descriptor.typeName,\n        fieldType;\n    if (typeName != null && typeName !== \"\") {\n        if (typeof typeName !== \"string\" || !typeRefRe.test(typeName))\n            throw Error(\"illegal type name: \" + typeName);\n        fieldType = typeName;\n    } else\n        fieldType = fromDescriptorType(descriptor.type);\n\n    // Rewire field rule\n    var fieldRule;\n    switch (descriptor.label) {\n        // 0 is reserved for errors\n        case 1: fieldRule = undefined; break;\n        case 2: fieldRule = \"required\"; break;\n        case 3: fieldRule = \"repeated\"; break;\n        default: throw Error(\"illegal label: \" + descriptor.label);\n    }\n\n    var extendee = descriptor.extendee;\n    if (extendee != null && extendee !== \"\") {\n        if (typeof extendee !== \"string\" || !typeRefRe.test(extendee))\n            throw Error(\"illegal type name: \" + extendee);\n    } else\n        extendee = undefined;\n    var field = new Field(\n        descriptor.name.length ? descriptor.name : \"field\" + descriptor.number,\n        descriptor.number,\n        fieldType,\n        fieldRule,\n        extendee\n    );\n\n    if (!nested)\n        field._edition = edition;\n\n    field.options = fromDescriptorOptions(descriptor.options, exports.FieldOptions);\n    if (descriptor.proto3_optional)\n        field.options.proto3_optional = true;\n\n    if (descriptor.defaultValue && descriptor.defaultValue.length) {\n        var defaultValue = descriptor.defaultValue;\n        switch (defaultValue) {\n            case \"true\": case \"TRUE\":\n                defaultValue = true;\n                break;\n            case \"false\": case \"FALSE\":\n                defaultValue = false;\n                break;\n            default:\n                var match = numberRe.exec(defaultValue);\n                if (match)\n                    defaultValue = parseInt(defaultValue); // eslint-disable-line radix\n                break;\n        }\n        field.setOption(\"default\", defaultValue);\n    }\n\n    if (packableDescriptorType(descriptor.type)) {\n        if (edition === \"proto3\") { // defaults to packed=true (internal preset is packed=true)\n            if (descriptor.options && !descriptor.options.packed)\n                field.setOption(\"packed\", false);\n        } else if ((!edition || edition === \"proto2\") && descriptor.options && descriptor.options.packed) // defaults to packed=false\n            field.setOption(\"packed\", true);\n    }\n\n    return field;\n};\n\n/**\n * Converts a field to a descriptor.\n * @returns {Message<IFieldDescriptorProto>} Descriptor\n * @param {string} [edition=\"proto2\"] The syntax or edition to use\n */\nField.prototype.toDescriptor = function toDescriptor(edition) {\n    var descriptor = exports.FieldDescriptorProto.create({ name: this.name, number: this.id });\n\n    if (this.map) {\n\n        descriptor.type = 11; // message\n        descriptor.typeName = $protobuf.util.ucFirst(this.name); // fieldName -> FieldNameEntry (built in Type#toDescriptor)\n        descriptor.label = 3; // repeated\n\n    } else {\n\n        // Rewire field type\n        switch (descriptor.type = toDescriptorType(this.type, this.resolve().resolvedType, this.delimited)) {\n            case 10: // group\n            case 11: // type\n            case 14: // enum\n                descriptor.typeName = this.resolvedType ? shortname(this.parent, this.resolvedType) : this.type;\n                break;\n        }\n\n        // Rewire field rule\n        if (this.rule === \"repeated\") {\n            descriptor.label = 3;\n        } else if (this.required && edition === \"proto2\") {\n            descriptor.label = 2;\n        } else {\n            descriptor.label = 1;\n        }\n    }\n\n    // Handle extension field\n    descriptor.extendee = this.extensionField ? this.extensionField.parent.fullName : this.extend;\n\n    // Handle part of oneof (only meaningful for message types)\n    if (this.partOf && this.parent instanceof Type) {\n        if ((descriptor.oneofIndex = this.parent.oneofsArray.indexOf(this.partOf)) < 0)\n            throw Error(\"missing oneof\");\n    }\n\n    if (this.options) {\n        descriptor.options = toDescriptorOptions(this.options, exports.FieldOptions);\n        if (this.options[\"default\"] != null)\n            descriptor.defaultValue = String(this.options[\"default\"]);\n        if (this.options.proto3_optional)\n            descriptor.proto3_optional = true;\n    }\n\n    if (edition === \"proto3\") { // defaults to packed=true\n        if (!this.packed)\n            (descriptor.options || (descriptor.options = exports.FieldOptions.create())).packed = false;\n    } else if ((!edition || edition === \"proto2\") && this.packed) // defaults to packed=false\n        (descriptor.options || (descriptor.options = exports.FieldOptions.create())).packed = true;\n\n    return descriptor;\n};\n\n// --- Enum ---\n\n/**\n * Properties of an EnumDescriptorProto message.\n * @interface IEnumDescriptorProto\n * @property {string} [name] Enum name\n * @property {IEnumValueDescriptorProto[]} [value] Enum values\n * @property {IEnumOptions} [options] Enum options\n */\n\n/**\n * Properties of an EnumValueDescriptorProto message.\n * @interface IEnumValueDescriptorProto\n * @property {string} [name] Name\n * @property {number} [number] Value\n * @property {*} [options] Not supported\n */\n\n/**\n * Properties of an EnumOptions message.\n * @interface IEnumOptions\n * @property {boolean} [allowAlias] Whether aliases are allowed\n * @property {boolean} [deprecated]\n */\n\nvar unnamedEnumIndex = 0;\n\n/**\n * Creates an enum from a descriptor.\n *\n * Warning: this is not safe to use with editions protos, since it discards relevant file context.\n *\n * @param {IEnumDescriptorProto|Reader|Uint8Array} descriptor Descriptor\n * @param {string} [edition=\"proto2\"] The syntax or edition to use\n * @param {boolean} [nested=false] Whether or not this is a top-level object\n * @returns {Enum} Enum instance\n */\nEnum.fromDescriptor = function fromDescriptor(descriptor, edition, nested) {\n\n    // Decode the descriptor message if specified as a buffer:\n    if (typeof descriptor.length === \"number\")\n        descriptor = exports.EnumDescriptorProto.decode(descriptor);\n\n    // Construct values object\n    var values = {};\n    if (descriptor.value)\n        for (var i = 0; i < descriptor.value.length; ++i) {\n            var name  = descriptor.value[i].name,\n                value = descriptor.value[i].number || 0;\n            values[name && name.length ? name : \"NAME\" + value] = value;\n        }\n\n    var enm = new Enum(\n        descriptor.name && descriptor.name.length ? descriptor.name : \"Enum\" + unnamedEnumIndex++,\n        values,\n        fromDescriptorOptions(descriptor.options, exports.EnumOptions)\n    );\n\n    if (!nested)\n        enm._edition = edition;\n\n    return enm;\n};\n\n/**\n * Converts an enum to a descriptor.\n * @returns {Message<IEnumDescriptorProto>} Descriptor\n */\nEnum.prototype.toDescriptor = function toDescriptor() {\n\n    // Values\n    var values = [];\n    for (var i = 0, ks = Object.keys(this.values); i < ks.length; ++i)\n        values.push(exports.EnumValueDescriptorProto.create({ name: ks[i], number: this.values[ks[i]] }));\n\n    return exports.EnumDescriptorProto.create({\n        name: this.name,\n        value: values,\n        options: toDescriptorOptions(this.options, exports.EnumOptions)\n    });\n};\n\n// --- OneOf ---\n\n/**\n * Properties of a OneofDescriptorProto message.\n * @interface IOneofDescriptorProto\n * @property {string} [name] Oneof name\n * @property {*} [options] Not supported\n */\n\nvar unnamedOneofIndex = 0;\n\n/**\n * Creates a oneof from a descriptor.\n *\n * Warning: this is not safe to use with editions protos, since it discards relevant file context.\n *\n * @param {IOneofDescriptorProto|Reader|Uint8Array} descriptor Descriptor\n * @returns {OneOf} OneOf instance\n */\nOneOf.fromDescriptor = function fromDescriptor(descriptor) {\n\n    // Decode the descriptor message if specified as a buffer:\n    if (typeof descriptor.length === \"number\")\n        descriptor = exports.OneofDescriptorProto.decode(descriptor);\n\n    return new OneOf(\n        // unnamedOneOfIndex is global, not per type, because we have no ref to a type here\n        descriptor.name && descriptor.name.length ? descriptor.name : \"oneof\" + unnamedOneofIndex++\n        // fromDescriptorOptions(descriptor.options, exports.OneofOptions) - only uninterpreted_option\n    );\n};\n\n/**\n * Converts a oneof to a descriptor.\n * @returns {Message<IOneofDescriptorProto>} Descriptor\n */\nOneOf.prototype.toDescriptor = function toDescriptor() {\n    return exports.OneofDescriptorProto.create({\n        name: this.name\n        // options: toDescriptorOptions(this.options, exports.OneofOptions) - only uninterpreted_option\n    });\n};\n\n// --- Service ---\n\n/**\n * Properties of a ServiceDescriptorProto message.\n * @interface IServiceDescriptorProto\n * @property {string} [name] Service name\n * @property {IMethodDescriptorProto[]} [method] Methods\n * @property {IServiceOptions} [options] Options\n */\n\n/**\n * Properties of a ServiceOptions message.\n * @interface IServiceOptions\n * @property {boolean} [deprecated]\n */\n\nvar unnamedServiceIndex = 0;\n\n/**\n * Creates a service from a descriptor.\n *\n * Warning: this is not safe to use with editions protos, since it discards relevant file context.\n *\n * @param {IServiceDescriptorProto|Reader|Uint8Array} descriptor Descriptor\n * @param {string} [edition=\"proto2\"] The syntax or edition to use\n * @param {boolean} [nested=false] Whether or not this is a top-level object\n * @returns {Service} Service instance\n */\nService.fromDescriptor = function fromDescriptor(descriptor, edition, nested) {\n\n    // Decode the descriptor message if specified as a buffer:\n    if (typeof descriptor.length === \"number\")\n        descriptor = exports.ServiceDescriptorProto.decode(descriptor);\n\n    var service = new Service(descriptor.name && descriptor.name.length ? descriptor.name : \"Service\" + unnamedServiceIndex++, fromDescriptorOptions(descriptor.options, exports.ServiceOptions));\n    if (!nested)\n        service._edition = edition;\n    if (descriptor.method)\n        for (var i = 0; i < descriptor.method.length; ++i)\n            service.add(Method.fromDescriptor(descriptor.method[i]));\n\n    return service;\n};\n\n/**\n * Converts a service to a descriptor.\n * @returns {Message<IServiceDescriptorProto>} Descriptor\n */\nService.prototype.toDescriptor = function toDescriptor() {\n\n    // Methods\n    var methods = [];\n    for (var i = 0; i < this.methodsArray.length; ++i)\n        methods.push(this._methodsArray[i].toDescriptor());\n\n    return exports.ServiceDescriptorProto.create({\n        name: this.name,\n        method: methods,\n        options: toDescriptorOptions(this.options, exports.ServiceOptions)\n    });\n};\n\n// --- Method ---\n\n/**\n * Properties of a MethodDescriptorProto message.\n * @interface IMethodDescriptorProto\n * @property {string} [name] Method name\n * @property {string} [inputType] Request type name\n * @property {string} [outputType] Response type name\n * @property {IMethodOptions} [options] Not supported\n * @property {boolean} [clientStreaming=false] Whether requests are streamed\n * @property {boolean} [serverStreaming=false] Whether responses are streamed\n */\n\n/**\n * Properties of a MethodOptions message.\n *\n * Warning: this is not safe to use with editions protos, since it discards relevant file context.\n *\n * @interface IMethodOptions\n * @property {boolean} [deprecated]\n */\n\nvar unnamedMethodIndex = 0;\n\n/**\n * Creates a method from a descriptor.\n * @param {IMethodDescriptorProto|Reader|Uint8Array} descriptor Descriptor\n * @returns {Method} Reflected method instance\n */\nMethod.fromDescriptor = function fromDescriptor(descriptor) {\n\n    // Decode the descriptor message if specified as a buffer:\n    if (typeof descriptor.length === \"number\")\n        descriptor = exports.MethodDescriptorProto.decode(descriptor);\n\n    var inputType = descriptor.inputType,\n        outputType = descriptor.outputType;\n\n    if (inputType != null && inputType !== \"\") {\n        if (typeof inputType !== \"string\" || !typeRefRe.test(inputType))\n            throw Error(\"illegal type name: \" + inputType);\n    }\n    if (outputType != null && outputType !== \"\") {\n        if (typeof outputType !== \"string\" || !typeRefRe.test(outputType))\n            throw Error(\"illegal type name: \" + outputType);\n    }\n\n    return new Method(\n        // unnamedMethodIndex is global, not per service, because we have no ref to a service here\n        descriptor.name && descriptor.name.length ? descriptor.name : \"Method\" + unnamedMethodIndex++,\n        \"rpc\",\n        inputType,\n        outputType,\n        Boolean(descriptor.clientStreaming),\n        Boolean(descriptor.serverStreaming),\n        fromDescriptorOptions(descriptor.options, exports.MethodOptions)\n    );\n};\n\n/**\n * Converts a method to a descriptor.\n * @returns {Message<IMethodDescriptorProto>} Descriptor\n */\nMethod.prototype.toDescriptor = function toDescriptor() {\n    return exports.MethodDescriptorProto.create({\n        name: this.name,\n        inputType: this.resolvedRequestType ? this.resolvedRequestType.fullName : this.requestType,\n        outputType: this.resolvedResponseType ? this.resolvedResponseType.fullName : this.responseType,\n        clientStreaming: this.requestStream,\n        serverStreaming: this.responseStream,\n        options: toDescriptorOptions(this.options, exports.MethodOptions)\n    });\n};\n\n// --- utility ---\n\n// Converts a descriptor type to a protobuf.js basic type\nfunction fromDescriptorType(type) {\n    switch (type) {\n        // 0 is reserved for errors\n        case 1: return \"double\";\n        case 2: return \"float\";\n        case 3: return \"int64\";\n        case 4: return \"uint64\";\n        case 5: return \"int32\";\n        case 6: return \"fixed64\";\n        case 7: return \"fixed32\";\n        case 8: return \"bool\";\n        case 9: return \"string\";\n        case 12: return \"bytes\";\n        case 13: return \"uint32\";\n        case 15: return \"sfixed32\";\n        case 16: return \"sfixed64\";\n        case 17: return \"sint32\";\n        case 18: return \"sint64\";\n    }\n    throw Error(\"illegal type: \" + type);\n}\n\n// Tests if a descriptor type is packable\nfunction packableDescriptorType(type) {\n    switch (type) {\n        case 1: // double\n        case 2: // float\n        case 3: // int64\n        case 4: // uint64\n        case 5: // int32\n        case 6: // fixed64\n        case 7: // fixed32\n        case 8: // bool\n        case 13: // uint32\n        case 14: // enum (!)\n        case 15: // sfixed32\n        case 16: // sfixed64\n        case 17: // sint32\n        case 18: // sint64\n            return true;\n    }\n    return false;\n}\n\n// Converts a protobuf.js basic type to a descriptor type\nfunction toDescriptorType(type, resolvedType, delimited) {\n    switch (type) {\n        // 0 is reserved for errors\n        case \"double\": return 1;\n        case \"float\": return 2;\n        case \"int64\": return 3;\n        case \"uint64\": return 4;\n        case \"int32\": return 5;\n        case \"fixed64\": return 6;\n        case \"fixed32\": return 7;\n        case \"bool\": return 8;\n        case \"string\": return 9;\n        case \"bytes\": return 12;\n        case \"uint32\": return 13;\n        case \"sfixed32\": return 15;\n        case \"sfixed64\": return 16;\n        case \"sint32\": return 17;\n        case \"sint64\": return 18;\n    }\n    if (resolvedType instanceof Enum)\n        return 14;\n    if (resolvedType instanceof Type)\n        return delimited ? 10 : 11;\n    throw Error(\"illegal type: \" + type);\n}\n\nfunction fromDescriptorOptionsRecursive(obj, type) {\n    var val = {};\n    for (var i = 0, field, key; i < type.fieldsArray.length; ++i) {\n        if ((key = (field = type._fieldsArray[i]).name) === \"uninterpretedOption\") continue;\n        if (!Object.prototype.hasOwnProperty.call(obj, key)) continue;\n\n        var newKey = underScore(key);\n        if (field.resolvedType instanceof Type) {\n            val[newKey] = fromDescriptorOptionsRecursive(obj[key], field.resolvedType);\n        } else if(field.resolvedType instanceof Enum) {\n            val[newKey] = field.resolvedType.valuesById[obj[key]];\n        } else {\n            val[newKey] = obj[key];\n        }\n    }\n    return val;\n}\n\n// Converts descriptor options to an options object\nfunction fromDescriptorOptions(options, type) {\n    if (!options)\n        return undefined;\n    return fromDescriptorOptionsRecursive(type.toObject(options), type);\n}\n\nfunction toDescriptorOptionsRecursive(obj, type) {\n    var val = {};\n    var keys = Object.keys(obj);\n    for (var i = 0; i < keys.length; ++i) {\n        var key = keys[i];\n        var newKey = $protobuf.util.camelCase(key);\n        if (!Object.prototype.hasOwnProperty.call(type.fields, newKey)) continue;\n        var field = type.fields[newKey];\n        if (field.resolvedType instanceof Type) {\n            val[newKey] = toDescriptorOptionsRecursive(obj[key], field.resolvedType);\n        } else {\n            val[newKey] = obj[key];\n        }\n        if (field.repeated && !Array.isArray(val[newKey])) {\n            val[newKey] = [val[newKey]];\n        }\n    }\n    return val;\n}\n\n// Converts an options object to descriptor options\nfunction toDescriptorOptions(options, type) {\n    if (!options)\n        return undefined;\n    return type.fromObject(toDescriptorOptionsRecursive(options, type));\n}\n\n// Calculates the shortest relative path from `from` to `to`.\nfunction shortname(from, to) {\n    var fromPath = from.fullName.split(\".\"),\n        toPath = to.fullName.split(\".\"),\n        i = 0,\n        j = 0,\n        k = toPath.length - 1;\n    if (!(from instanceof Root) && to instanceof Namespace)\n        while (i < fromPath.length && j < k && fromPath[i] === toPath[j]) {\n            var other = to.lookup(fromPath[i++], true);\n            if (other !== null && other !== to)\n                break;\n            ++j;\n        }\n    else\n        for (; i < fromPath.length && j < k && fromPath[i] === toPath[j]; ++i, ++j);\n    return toPath.slice(j).join(\".\");\n}\n\n// copied here from cli/targets/proto.js\nfunction underScore(str) {\n    return str.substring(0,1)\n         + str.substring(1)\n               .replace(/([A-Z])(?=[a-z]|$)/g, function($0, $1) { return \"_\" + $1.toLowerCase(); });\n}\n\nfunction editionFromDescriptor(fileDescriptor) {\n    if (fileDescriptor.syntax === \"editions\") {\n        switch(fileDescriptor.edition) {\n            case exports.Edition.EDITION_2023:\n                return \"2023\";\n            default:\n                throw new Error(\"Unsupported edition \" + fileDescriptor.edition);\n        }\n    }\n    if (fileDescriptor.syntax === \"proto3\") {\n        return \"proto3\";\n    }\n    return \"proto2\";\n}\n\nfunction editionToDescriptor(edition, fileDescriptor) {\n    if (!edition) return;\n    if (edition === \"proto2\" || edition === \"proto3\") {\n        fileDescriptor.syntax = edition;\n    } else {\n        fileDescriptor.syntax = \"editions\";\n        switch(edition) {\n            case \"2023\":\n                fileDescriptor.edition = exports.Edition.EDITION_2023;\n                break;\n            default:\n                throw new Error(\"Unsupported edition \" + edition);\n        }\n    }\n}\n\n// --- exports ---\n\n/**\n * Reflected file descriptor set.\n * @name FileDescriptorSet\n * @type {Type}\n * @const\n * @tstype $protobuf.Type\n */\n\n/**\n * Reflected file descriptor proto.\n * @name FileDescriptorProto\n * @type {Type}\n * @const\n * @tstype $protobuf.Type\n */\n\n/**\n * Reflected descriptor proto.\n * @name DescriptorProto\n * @type {Type}\n * @property {Type} ExtensionRange\n * @property {Type} ReservedRange\n * @const\n * @tstype $protobuf.Type & {\n *     ExtensionRange: $protobuf.Type,\n *     ReservedRange: $protobuf.Type\n * }\n */\n\n/**\n * Reflected field descriptor proto.\n * @name FieldDescriptorProto\n * @type {Type}\n * @property {Enum} Label\n * @property {Enum} Type\n * @const\n * @tstype $protobuf.Type & {\n *     Label: $protobuf.Enum,\n *     Type: $protobuf.Enum\n * }\n */\n\n/**\n * Reflected oneof descriptor proto.\n * @name OneofDescriptorProto\n * @type {Type}\n * @const\n * @tstype $protobuf.Type\n */\n\n/**\n * Reflected enum descriptor proto.\n * @name EnumDescriptorProto\n * @type {Type}\n * @const\n * @tstype $protobuf.Type\n */\n\n/**\n * Reflected service descriptor proto.\n * @name ServiceDescriptorProto\n * @type {Type}\n * @const\n * @tstype $protobuf.Type\n */\n\n/**\n * Reflected enum value descriptor proto.\n * @name EnumValueDescriptorProto\n * @type {Type}\n * @const\n * @tstype $protobuf.Type\n */\n\n/**\n * Reflected method descriptor proto.\n * @name MethodDescriptorProto\n * @type {Type}\n * @const\n * @tstype $protobuf.Type\n */\n\n/**\n * Reflected file options.\n * @name FileOptions\n * @type {Type}\n * @property {Enum} OptimizeMode\n * @const\n * @tstype $protobuf.Type & {\n *     OptimizeMode: $protobuf.Enum\n * }\n */\n\n/**\n * Reflected message options.\n * @name MessageOptions\n * @type {Type}\n * @const\n * @tstype $protobuf.Type\n */\n\n/**\n * Reflected field options.\n * @name FieldOptions\n * @type {Type}\n * @property {Enum} CType\n * @property {Enum} JSType\n * @const\n * @tstype $protobuf.Type & {\n *     CType: $protobuf.Enum,\n *     JSType: $protobuf.Enum\n * }\n */\n\n/**\n * Reflected oneof options.\n * @name OneofOptions\n * @type {Type}\n * @const\n * @tstype $protobuf.Type\n */\n\n/**\n * Reflected enum options.\n * @name EnumOptions\n * @type {Type}\n * @const\n * @tstype $protobuf.Type\n */\n\n/**\n * Reflected enum value options.\n * @name EnumValueOptions\n * @type {Type}\n * @const\n * @tstype $protobuf.Type\n */\n\n/**\n * Reflected service options.\n * @name ServiceOptions\n * @type {Type}\n * @const\n * @tstype $protobuf.Type\n */\n\n/**\n * Reflected method options.\n * @name MethodOptions\n * @type {Type}\n * @const\n * @tstype $protobuf.Type\n */\n\n/**\n * Reflected uninterpretet option.\n * @name UninterpretedOption\n * @type {Type}\n * @property {Type} NamePart\n * @const\n * @tstype $protobuf.Type & {\n *     NamePart: $protobuf.Type\n * }\n */\n\n/**\n * Reflected source code info.\n * @name SourceCodeInfo\n * @type {Type}\n * @property {Type} Location\n * @const\n * @tstype $protobuf.Type & {\n *     Location: $protobuf.Type\n * }\n */\n\n/**\n * Reflected generated code info.\n * @name GeneratedCodeInfo\n * @type {Type}\n * @property {Type} Annotation\n * @const\n * @tstype $protobuf.Type & {\n *     Annotation: $protobuf.Type\n * }\n */\n","{\n  \"nested\": {\n    \"google\": {\n      \"nested\": {\n        \"protobuf\": {\n          \"nested\": {\n            \"Api\": {\n              \"fields\": {\n                \"name\": {\n                  \"type\": \"string\",\n                  \"id\": 1\n                },\n                \"methods\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"Method\",\n                  \"id\": 2\n                },\n                \"options\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"Option\",\n                  \"id\": 3\n                },\n                \"version\": {\n                  \"type\": \"string\",\n                  \"id\": 4\n                },\n                \"sourceContext\": {\n                  \"type\": \"SourceContext\",\n                  \"id\": 5\n                },\n                \"mixins\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"Mixin\",\n                  \"id\": 6\n                },\n                \"syntax\": {\n                  \"type\": \"Syntax\",\n                  \"id\": 7\n                }\n              }\n            },\n            \"Method\": {\n              \"fields\": {\n                \"name\": {\n                  \"type\": \"string\",\n                  \"id\": 1\n                },\n                \"requestTypeUrl\": {\n                  \"type\": \"string\",\n                  \"id\": 2\n                },\n                \"requestStreaming\": {\n                  \"type\": \"bool\",\n                  \"id\": 3\n                },\n                \"responseTypeUrl\": {\n                  \"type\": \"string\",\n                  \"id\": 4\n                },\n                \"responseStreaming\": {\n                  \"type\": \"bool\",\n                  \"id\": 5\n                },\n                \"options\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"Option\",\n                  \"id\": 6\n                },\n                \"syntax\": {\n                  \"type\": \"Syntax\",\n                  \"id\": 7\n                }\n              }\n            },\n            \"Mixin\": {\n              \"fields\": {\n                \"name\": {\n                  \"type\": \"string\",\n                  \"id\": 1\n                },\n                \"root\": {\n                  \"type\": \"string\",\n                  \"id\": 2\n                }\n              }\n            },\n            \"SourceContext\": {\n              \"fields\": {\n                \"fileName\": {\n                  \"type\": \"string\",\n                  \"id\": 1\n                }\n              }\n            },\n            \"Option\": {\n              \"fields\": {\n                \"name\": {\n                  \"type\": \"string\",\n                  \"id\": 1\n                },\n                \"value\": {\n                  \"type\": \"Any\",\n                  \"id\": 2\n                }\n              }\n            },\n            \"Syntax\": {\n              \"values\": {\n                \"SYNTAX_PROTO2\": 0,\n                \"SYNTAX_PROTO3\": 1\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}","{\n  \"nested\": {\n    \"google\": {\n      \"nested\": {\n        \"protobuf\": {\n          \"nested\": {\n            \"SourceContext\": {\n              \"fields\": {\n                \"fileName\": {\n                  \"type\": \"string\",\n                  \"id\": 1\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}","{\n  \"nested\": {\n    \"google\": {\n      \"nested\": {\n        \"protobuf\": {\n          \"nested\": {\n            \"Type\": {\n              \"fields\": {\n                \"name\": {\n                  \"type\": \"string\",\n                  \"id\": 1\n                },\n                \"fields\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"Field\",\n                  \"id\": 2\n                },\n                \"oneofs\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"string\",\n                  \"id\": 3\n                },\n                \"options\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"Option\",\n                  \"id\": 4\n                },\n                \"sourceContext\": {\n                  \"type\": \"SourceContext\",\n                  \"id\": 5\n                },\n                \"syntax\": {\n                  \"type\": \"Syntax\",\n                  \"id\": 6\n                }\n              }\n            },\n            \"Field\": {\n              \"fields\": {\n                \"kind\": {\n                  \"type\": \"Kind\",\n                  \"id\": 1\n                },\n                \"cardinality\": {\n                  \"type\": \"Cardinality\",\n                  \"id\": 2\n                },\n                \"number\": {\n                  \"type\": \"int32\",\n                  \"id\": 3\n                },\n                \"name\": {\n                  \"type\": \"string\",\n                  \"id\": 4\n                },\n                \"typeUrl\": {\n                  \"type\": \"string\",\n                  \"id\": 6\n                },\n                \"oneofIndex\": {\n                  \"type\": \"int32\",\n                  \"id\": 7\n                },\n                \"packed\": {\n                  \"type\": \"bool\",\n                  \"id\": 8\n                },\n                \"options\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"Option\",\n                  \"id\": 9\n                },\n                \"jsonName\": {\n                  \"type\": \"string\",\n                  \"id\": 10\n                },\n                \"defaultValue\": {\n                  \"type\": \"string\",\n                  \"id\": 11\n                }\n              },\n              \"nested\": {\n                \"Kind\": {\n                  \"values\": {\n                    \"TYPE_UNKNOWN\": 0,\n                    \"TYPE_DOUBLE\": 1,\n                    \"TYPE_FLOAT\": 2,\n                    \"TYPE_INT64\": 3,\n                    \"TYPE_UINT64\": 4,\n                    \"TYPE_INT32\": 5,\n                    \"TYPE_FIXED64\": 6,\n                    \"TYPE_FIXED32\": 7,\n                    \"TYPE_BOOL\": 8,\n                    \"TYPE_STRING\": 9,\n                    \"TYPE_GROUP\": 10,\n                    \"TYPE_MESSAGE\": 11,\n                    \"TYPE_BYTES\": 12,\n                    \"TYPE_UINT32\": 13,\n                    \"TYPE_ENUM\": 14,\n                    \"TYPE_SFIXED32\": 15,\n                    \"TYPE_SFIXED64\": 16,\n                    \"TYPE_SINT32\": 17,\n                    \"TYPE_SINT64\": 18\n                  }\n                },\n                \"Cardinality\": {\n                  \"values\": {\n                    \"CARDINALITY_UNKNOWN\": 0,\n                    \"CARDINALITY_OPTIONAL\": 1,\n                    \"CARDINALITY_REQUIRED\": 2,\n                    \"CARDINALITY_REPEATED\": 3\n                  }\n                }\n              }\n            },\n            \"Enum\": {\n              \"fields\": {\n                \"name\": {\n                  \"type\": \"string\",\n                  \"id\": 1\n                },\n                \"enumvalue\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"EnumValue\",\n                  \"id\": 2\n                },\n                \"options\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"Option\",\n                  \"id\": 3\n                },\n                \"sourceContext\": {\n                  \"type\": \"SourceContext\",\n                  \"id\": 4\n                },\n                \"syntax\": {\n                  \"type\": \"Syntax\",\n                  \"id\": 5\n                }\n              }\n            },\n            \"EnumValue\": {\n              \"fields\": {\n                \"name\": {\n                  \"type\": \"string\",\n                  \"id\": 1\n                },\n                \"number\": {\n                  \"type\": \"int32\",\n                  \"id\": 2\n                },\n                \"options\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"Option\",\n                  \"id\": 3\n                }\n              }\n            },\n            \"Option\": {\n              \"fields\": {\n                \"name\": {\n                  \"type\": \"string\",\n                  \"id\": 1\n                },\n                \"value\": {\n                  \"type\": \"Any\",\n                  \"id\": 2\n                }\n              }\n            },\n            \"Syntax\": {\n              \"values\": {\n                \"SYNTAX_PROTO2\": 0,\n                \"SYNTAX_PROTO3\": 1\n              }\n            },\n            \"Any\": {\n              \"fields\": {\n                \"type_url\": {\n                  \"type\": \"string\",\n                  \"id\": 1\n                },\n                \"value\": {\n                  \"type\": \"bytes\",\n                  \"id\": 2\n                }\n              }\n            },\n            \"SourceContext\": {\n              \"fields\": {\n                \"fileName\": {\n                  \"type\": \"string\",\n                  \"id\": 1\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}",null,null,"/*\n * Copyright 2021 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport { isIPv4, isIPv6 } from 'net';\nimport { OrderedMap, type OrderedMapIterator } from '@js-sdsl/ordered-map';\nimport { ConnectivityState } from './connectivity-state';\nimport { Status } from './constants';\nimport { Timestamp } from './generated/google/protobuf/Timestamp';\nimport { Channel as ChannelMessage } from './generated/grpc/channelz/v1/Channel';\nimport { ChannelConnectivityState__Output } from './generated/grpc/channelz/v1/ChannelConnectivityState';\nimport { ChannelRef as ChannelRefMessage } from './generated/grpc/channelz/v1/ChannelRef';\nimport { ChannelTrace } from './generated/grpc/channelz/v1/ChannelTrace';\nimport { GetChannelRequest__Output } from './generated/grpc/channelz/v1/GetChannelRequest';\nimport { GetChannelResponse } from './generated/grpc/channelz/v1/GetChannelResponse';\nimport { sendUnaryData, ServerUnaryCall } from './server-call';\nimport { ServerRef as ServerRefMessage } from './generated/grpc/channelz/v1/ServerRef';\nimport { SocketRef as SocketRefMessage } from './generated/grpc/channelz/v1/SocketRef';\nimport {\n  isTcpSubchannelAddress,\n  SubchannelAddress,\n} from './subchannel-address';\nimport { SubchannelRef as SubchannelRefMessage } from './generated/grpc/channelz/v1/SubchannelRef';\nimport { GetServerRequest__Output } from './generated/grpc/channelz/v1/GetServerRequest';\nimport { GetServerResponse } from './generated/grpc/channelz/v1/GetServerResponse';\nimport { Server as ServerMessage } from './generated/grpc/channelz/v1/Server';\nimport { GetServersRequest__Output } from './generated/grpc/channelz/v1/GetServersRequest';\nimport { GetServersResponse } from './generated/grpc/channelz/v1/GetServersResponse';\nimport { GetTopChannelsRequest__Output } from './generated/grpc/channelz/v1/GetTopChannelsRequest';\nimport { GetTopChannelsResponse } from './generated/grpc/channelz/v1/GetTopChannelsResponse';\nimport { GetSubchannelRequest__Output } from './generated/grpc/channelz/v1/GetSubchannelRequest';\nimport { GetSubchannelResponse } from './generated/grpc/channelz/v1/GetSubchannelResponse';\nimport { Subchannel as SubchannelMessage } from './generated/grpc/channelz/v1/Subchannel';\nimport { GetSocketRequest__Output } from './generated/grpc/channelz/v1/GetSocketRequest';\nimport { GetSocketResponse } from './generated/grpc/channelz/v1/GetSocketResponse';\nimport { Socket as SocketMessage } from './generated/grpc/channelz/v1/Socket';\nimport { Address } from './generated/grpc/channelz/v1/Address';\nimport { Security } from './generated/grpc/channelz/v1/Security';\nimport { GetServerSocketsRequest__Output } from './generated/grpc/channelz/v1/GetServerSocketsRequest';\nimport { GetServerSocketsResponse } from './generated/grpc/channelz/v1/GetServerSocketsResponse';\nimport {\n  ChannelzDefinition,\n  ChannelzHandlers,\n} from './generated/grpc/channelz/v1/Channelz';\nimport { ProtoGrpcType as ChannelzProtoGrpcType } from './generated/channelz';\nimport type { loadSync } from '@grpc/proto-loader';\nimport { registerAdminService } from './admin';\nimport { loadPackageDefinition } from './make-client';\n\nexport type TraceSeverity =\n  | 'CT_UNKNOWN'\n  | 'CT_INFO'\n  | 'CT_WARNING'\n  | 'CT_ERROR';\n\ninterface Ref {\n  kind: EntityTypes;\n  id: number;\n  name: string;\n}\n\nexport interface ChannelRef extends Ref {\n  kind: EntityTypes.channel;\n}\n\nexport interface SubchannelRef extends Ref {\n  kind: EntityTypes.subchannel;\n}\n\nexport interface ServerRef extends Ref {\n  kind: EntityTypes.server;\n}\n\nexport interface SocketRef extends Ref {\n  kind: EntityTypes.socket;\n}\n\nfunction channelRefToMessage(ref: ChannelRef): ChannelRefMessage {\n  return {\n    channel_id: ref.id,\n    name: ref.name,\n  };\n}\n\nfunction subchannelRefToMessage(ref: SubchannelRef): SubchannelRefMessage {\n  return {\n    subchannel_id: ref.id,\n    name: ref.name,\n  };\n}\n\nfunction serverRefToMessage(ref: ServerRef): ServerRefMessage {\n  return {\n    server_id: ref.id,\n  };\n}\n\nfunction socketRefToMessage(ref: SocketRef): SocketRefMessage {\n  return {\n    socket_id: ref.id,\n    name: ref.name,\n  };\n}\n\ninterface TraceEvent {\n  description: string;\n  severity: TraceSeverity;\n  timestamp: Date;\n  childChannel?: ChannelRef;\n  childSubchannel?: SubchannelRef;\n}\n\n/**\n * The loose upper bound on the number of events that should be retained in a\n * trace. This may be exceeded by up to a factor of 2. Arbitrarily chosen as a\n * number that should be large enough to contain the recent relevant\n * information, but small enough to not use excessive memory.\n */\nconst TARGET_RETAINED_TRACES = 32;\n\n/**\n * Default number of sockets/servers/channels/subchannels to return\n */\nconst DEFAULT_MAX_RESULTS = 100;\n\nexport class ChannelzTraceStub {\n  readonly events: TraceEvent[] = [];\n  readonly creationTimestamp: Date = new Date();\n  readonly eventsLogged = 0;\n\n  addTrace(): void {}\n  getTraceMessage(): ChannelTrace {\n    return {\n      creation_timestamp: dateToProtoTimestamp(this.creationTimestamp),\n      num_events_logged: this.eventsLogged,\n      events: [],\n    };\n  }\n}\n\nexport class ChannelzTrace {\n  events: TraceEvent[] = [];\n  creationTimestamp: Date;\n  eventsLogged = 0;\n\n  constructor() {\n    this.creationTimestamp = new Date();\n  }\n\n  addTrace(\n    severity: TraceSeverity,\n    description: string,\n    child?: ChannelRef | SubchannelRef\n  ) {\n    const timestamp = new Date();\n    this.events.push({\n      description: description,\n      severity: severity,\n      timestamp: timestamp,\n      childChannel: child?.kind === 'channel' ? child : undefined,\n      childSubchannel: child?.kind === 'subchannel' ? child : undefined,\n    });\n    // Whenever the trace array gets too large, discard the first half\n    if (this.events.length >= TARGET_RETAINED_TRACES * 2) {\n      this.events = this.events.slice(TARGET_RETAINED_TRACES);\n    }\n    this.eventsLogged += 1;\n  }\n\n  getTraceMessage(): ChannelTrace {\n    return {\n      creation_timestamp: dateToProtoTimestamp(this.creationTimestamp),\n      num_events_logged: this.eventsLogged,\n      events: this.events.map(event => {\n        return {\n          description: event.description,\n          severity: event.severity,\n          timestamp: dateToProtoTimestamp(event.timestamp),\n          channel_ref: event.childChannel\n            ? channelRefToMessage(event.childChannel)\n            : null,\n          subchannel_ref: event.childSubchannel\n            ? subchannelRefToMessage(event.childSubchannel)\n            : null,\n        };\n      }),\n    };\n  }\n}\n\ntype RefOrderedMap = OrderedMap<\n  number,\n  { ref: { id: number; kind: EntityTypes; name: string }; count: number }\n>;\n\nexport class ChannelzChildrenTracker {\n  private channelChildren: RefOrderedMap = new OrderedMap();\n  private subchannelChildren: RefOrderedMap = new OrderedMap();\n  private socketChildren: RefOrderedMap = new OrderedMap();\n  private trackerMap = {\n    [EntityTypes.channel]: this.channelChildren,\n    [EntityTypes.subchannel]: this.subchannelChildren,\n    [EntityTypes.socket]: this.socketChildren,\n  } as const;\n\n  refChild(child: ChannelRef | SubchannelRef | SocketRef) {\n    const tracker = this.trackerMap[child.kind];\n    const trackedChild = tracker.find(child.id);\n\n    if (trackedChild.equals(tracker.end())) {\n      tracker.setElement(\n        child.id,\n        {\n          ref: child,\n          count: 1,\n        },\n        trackedChild\n      );\n    } else {\n      trackedChild.pointer[1].count += 1;\n    }\n  }\n\n  unrefChild(child: ChannelRef | SubchannelRef | SocketRef) {\n    const tracker = this.trackerMap[child.kind];\n    const trackedChild = tracker.getElementByKey(child.id);\n    if (trackedChild !== undefined) {\n      trackedChild.count -= 1;\n      if (trackedChild.count === 0) {\n        tracker.eraseElementByKey(child.id);\n      }\n    }\n  }\n\n  getChildLists(): ChannelzChildren {\n    return {\n      channels: this.channelChildren as ChannelzChildren['channels'],\n      subchannels: this.subchannelChildren as ChannelzChildren['subchannels'],\n      sockets: this.socketChildren as ChannelzChildren['sockets'],\n    };\n  }\n}\n\nexport class ChannelzChildrenTrackerStub extends ChannelzChildrenTracker {\n  override refChild(): void {}\n  override unrefChild(): void {}\n}\n\nexport class ChannelzCallTracker {\n  callsStarted = 0;\n  callsSucceeded = 0;\n  callsFailed = 0;\n  lastCallStartedTimestamp: Date | null = null;\n\n  addCallStarted() {\n    this.callsStarted += 1;\n    this.lastCallStartedTimestamp = new Date();\n  }\n  addCallSucceeded() {\n    this.callsSucceeded += 1;\n  }\n  addCallFailed() {\n    this.callsFailed += 1;\n  }\n}\n\nexport class ChannelzCallTrackerStub extends ChannelzCallTracker {\n  override addCallStarted() {}\n  override addCallSucceeded() {}\n  override addCallFailed() {}\n}\n\nexport interface ChannelzChildren {\n  channels: OrderedMap<number, { ref: ChannelRef; count: number }>;\n  subchannels: OrderedMap<number, { ref: SubchannelRef; count: number }>;\n  sockets: OrderedMap<number, { ref: SocketRef; count: number }>;\n}\n\nexport interface ChannelInfo {\n  target: string;\n  state: ConnectivityState;\n  trace: ChannelzTrace | ChannelzTraceStub;\n  callTracker: ChannelzCallTracker | ChannelzCallTrackerStub;\n  children: ChannelzChildren;\n}\n\nexport type SubchannelInfo = ChannelInfo;\n\nexport interface ServerInfo {\n  trace: ChannelzTrace;\n  callTracker: ChannelzCallTracker;\n  listenerChildren: ChannelzChildren;\n  sessionChildren: ChannelzChildren;\n}\n\nexport interface TlsInfo {\n  cipherSuiteStandardName: string | null;\n  cipherSuiteOtherName: string | null;\n  localCertificate: Buffer | null;\n  remoteCertificate: Buffer | null;\n}\n\nexport interface SocketInfo {\n  localAddress: SubchannelAddress | null;\n  remoteAddress: SubchannelAddress | null;\n  security: TlsInfo | null;\n  remoteName: string | null;\n  streamsStarted: number;\n  streamsSucceeded: number;\n  streamsFailed: number;\n  messagesSent: number;\n  messagesReceived: number;\n  keepAlivesSent: number;\n  lastLocalStreamCreatedTimestamp: Date | null;\n  lastRemoteStreamCreatedTimestamp: Date | null;\n  lastMessageSentTimestamp: Date | null;\n  lastMessageReceivedTimestamp: Date | null;\n  localFlowControlWindow: number | null;\n  remoteFlowControlWindow: number | null;\n}\n\ninterface ChannelEntry {\n  ref: ChannelRef;\n  getInfo(): ChannelInfo;\n}\n\ninterface SubchannelEntry {\n  ref: SubchannelRef;\n  getInfo(): SubchannelInfo;\n}\n\ninterface ServerEntry {\n  ref: ServerRef;\n  getInfo(): ServerInfo;\n}\n\ninterface SocketEntry {\n  ref: SocketRef;\n  getInfo(): SocketInfo;\n}\n\nexport const enum EntityTypes {\n  channel = 'channel',\n  subchannel = 'subchannel',\n  server = 'server',\n  socket = 'socket',\n}\n\ntype EntryOrderedMap = OrderedMap<number, { ref: Ref; getInfo: () => any }>;\n\nconst entityMaps = {\n  [EntityTypes.channel]: new OrderedMap<number, ChannelEntry>(),\n  [EntityTypes.subchannel]: new OrderedMap<number, SubchannelEntry>(),\n  [EntityTypes.server]: new OrderedMap<number, ServerEntry>(),\n  [EntityTypes.socket]: new OrderedMap<number, SocketEntry>(),\n} as const;\n\nexport type RefByType<T extends EntityTypes> = T extends EntityTypes.channel\n  ? ChannelRef\n  : T extends EntityTypes.server\n  ? ServerRef\n  : T extends EntityTypes.socket\n  ? SocketRef\n  : T extends EntityTypes.subchannel\n  ? SubchannelRef\n  : never;\n\nexport type EntryByType<T extends EntityTypes> = T extends EntityTypes.channel\n  ? ChannelEntry\n  : T extends EntityTypes.server\n  ? ServerEntry\n  : T extends EntityTypes.socket\n  ? SocketEntry\n  : T extends EntityTypes.subchannel\n  ? SubchannelEntry\n  : never;\n\nexport type InfoByType<T extends EntityTypes> = T extends EntityTypes.channel\n  ? ChannelInfo\n  : T extends EntityTypes.subchannel\n  ? SubchannelInfo\n  : T extends EntityTypes.server\n  ? ServerInfo\n  : T extends EntityTypes.socket\n  ? SocketInfo\n  : never;\n\nconst generateRegisterFn = <R extends EntityTypes>(kind: R) => {\n  let nextId = 1;\n  function getNextId(): number {\n    return nextId++;\n  }\n\n  const entityMap: EntryOrderedMap = entityMaps[kind];\n\n  return (\n    name: string,\n    getInfo: () => InfoByType<R>,\n    channelzEnabled: boolean\n  ): RefByType<R> => {\n    const id = getNextId();\n    const ref = { id, name, kind } as RefByType<R>;\n    if (channelzEnabled) {\n      entityMap.setElement(id, { ref, getInfo });\n    }\n    return ref;\n  };\n};\n\nexport const registerChannelzChannel = generateRegisterFn(EntityTypes.channel);\nexport const registerChannelzSubchannel = generateRegisterFn(\n  EntityTypes.subchannel\n);\nexport const registerChannelzServer = generateRegisterFn(EntityTypes.server);\nexport const registerChannelzSocket = generateRegisterFn(EntityTypes.socket);\n\nexport function unregisterChannelzRef(\n  ref: ChannelRef | SubchannelRef | ServerRef | SocketRef\n) {\n  entityMaps[ref.kind].eraseElementByKey(ref.id);\n}\n\n/**\n * Parse a single section of an IPv6 address as two bytes\n * @param addressSection A hexadecimal string of length up to 4\n * @returns The pair of bytes representing this address section\n */\nfunction parseIPv6Section(addressSection: string): [number, number] {\n  const numberValue = Number.parseInt(addressSection, 16);\n  return [(numberValue / 256) | 0, numberValue % 256];\n}\n\n/**\n * Parse a chunk of an IPv6 address string to some number of bytes\n * @param addressChunk Some number of segments of up to 4 hexadecimal\n *   characters each, joined by colons.\n * @returns The list of bytes representing this address chunk\n */\nfunction parseIPv6Chunk(addressChunk: string): number[] {\n  if (addressChunk === '') {\n    return [];\n  }\n  const bytePairs = addressChunk\n    .split(':')\n    .map(section => parseIPv6Section(section));\n  const result: number[] = [];\n  return result.concat(...bytePairs);\n}\n\nfunction isIPv6MappedIPv4(ipAddress: string) {\n  return isIPv6(ipAddress) && ipAddress.toLowerCase().startsWith('::ffff:') && isIPv4(ipAddress.substring(7));\n}\n\n/**\n * Prerequisite: isIPv4(ipAddress)\n * @param ipAddress\n * @returns\n */\nfunction ipv4AddressStringToBuffer(ipAddress: string): Buffer {\n  return Buffer.from(\n    Uint8Array.from(\n      ipAddress.split('.').map(segment => Number.parseInt(segment))\n    )\n  );\n}\n\n/**\n * Converts an IPv4 or IPv6 address from string representation to binary\n * representation\n * @param ipAddress an IP address in standard IPv4 or IPv6 text format\n * @returns\n */\nfunction ipAddressStringToBuffer(ipAddress: string): Buffer | null {\n  if (isIPv4(ipAddress)) {\n    return ipv4AddressStringToBuffer(ipAddress);\n  } else if (isIPv6MappedIPv4(ipAddress)) {\n    return ipv4AddressStringToBuffer(ipAddress.substring(7));\n  } else if (isIPv6(ipAddress)) {\n    let leftSection: string;\n    let rightSection: string;\n    const doubleColonIndex = ipAddress.indexOf('::');\n    if (doubleColonIndex === -1) {\n      leftSection = ipAddress;\n      rightSection = '';\n    } else {\n      leftSection = ipAddress.substring(0, doubleColonIndex);\n      rightSection = ipAddress.substring(doubleColonIndex + 2);\n    }\n    const leftBuffer = Buffer.from(parseIPv6Chunk(leftSection));\n    const rightBuffer = Buffer.from(parseIPv6Chunk(rightSection));\n    const middleBuffer = Buffer.alloc(\n      16 - leftBuffer.length - rightBuffer.length,\n      0\n    );\n    return Buffer.concat([leftBuffer, middleBuffer, rightBuffer]);\n  } else {\n    return null;\n  }\n}\n\nfunction connectivityStateToMessage(\n  state: ConnectivityState\n): ChannelConnectivityState__Output {\n  switch (state) {\n    case ConnectivityState.CONNECTING:\n      return {\n        state: 'CONNECTING',\n      };\n    case ConnectivityState.IDLE:\n      return {\n        state: 'IDLE',\n      };\n    case ConnectivityState.READY:\n      return {\n        state: 'READY',\n      };\n    case ConnectivityState.SHUTDOWN:\n      return {\n        state: 'SHUTDOWN',\n      };\n    case ConnectivityState.TRANSIENT_FAILURE:\n      return {\n        state: 'TRANSIENT_FAILURE',\n      };\n    default:\n      return {\n        state: 'UNKNOWN',\n      };\n  }\n}\n\nfunction dateToProtoTimestamp(date?: Date | null): Timestamp | null {\n  if (!date) {\n    return null;\n  }\n  const millisSinceEpoch = date.getTime();\n  return {\n    seconds: (millisSinceEpoch / 1000) | 0,\n    nanos: (millisSinceEpoch % 1000) * 1_000_000,\n  };\n}\n\nfunction getChannelMessage(channelEntry: ChannelEntry): ChannelMessage {\n  const resolvedInfo = channelEntry.getInfo();\n  const channelRef: ChannelRefMessage[] = [];\n  const subchannelRef: SubchannelRefMessage[] = [];\n\n  resolvedInfo.children.channels.forEach(el => {\n    channelRef.push(channelRefToMessage(el[1].ref));\n  });\n\n  resolvedInfo.children.subchannels.forEach(el => {\n    subchannelRef.push(subchannelRefToMessage(el[1].ref));\n  });\n\n  return {\n    ref: channelRefToMessage(channelEntry.ref),\n    data: {\n      target: resolvedInfo.target,\n      state: connectivityStateToMessage(resolvedInfo.state),\n      calls_started: resolvedInfo.callTracker.callsStarted,\n      calls_succeeded: resolvedInfo.callTracker.callsSucceeded,\n      calls_failed: resolvedInfo.callTracker.callsFailed,\n      last_call_started_timestamp: dateToProtoTimestamp(\n        resolvedInfo.callTracker.lastCallStartedTimestamp\n      ),\n      trace: resolvedInfo.trace.getTraceMessage(),\n    },\n    channel_ref: channelRef,\n    subchannel_ref: subchannelRef,\n  };\n}\n\nfunction GetChannel(\n  call: ServerUnaryCall<GetChannelRequest__Output, GetChannelResponse>,\n  callback: sendUnaryData<GetChannelResponse>\n): void {\n  const channelId = parseInt(call.request.channel_id, 10);\n  const channelEntry =\n    entityMaps[EntityTypes.channel].getElementByKey(channelId);\n  if (channelEntry === undefined) {\n    callback({\n      code: Status.NOT_FOUND,\n      details: 'No channel data found for id ' + channelId,\n    });\n    return;\n  }\n  callback(null, { channel: getChannelMessage(channelEntry) });\n}\n\nfunction GetTopChannels(\n  call: ServerUnaryCall<GetTopChannelsRequest__Output, GetTopChannelsResponse>,\n  callback: sendUnaryData<GetTopChannelsResponse>\n): void {\n  const maxResults =\n    parseInt(call.request.max_results, 10) || DEFAULT_MAX_RESULTS;\n  const resultList: ChannelMessage[] = [];\n  const startId = parseInt(call.request.start_channel_id, 10);\n  const channelEntries = entityMaps[EntityTypes.channel];\n\n  let i: OrderedMapIterator<number, ChannelEntry>;\n  for (\n    i = channelEntries.lowerBound(startId);\n    !i.equals(channelEntries.end()) && resultList.length < maxResults;\n    i = i.next()\n  ) {\n    resultList.push(getChannelMessage(i.pointer[1]));\n  }\n\n  callback(null, {\n    channel: resultList,\n    end: i.equals(channelEntries.end()),\n  });\n}\n\nfunction getServerMessage(serverEntry: ServerEntry): ServerMessage {\n  const resolvedInfo = serverEntry.getInfo();\n  const listenSocket: SocketRefMessage[] = [];\n\n  resolvedInfo.listenerChildren.sockets.forEach(el => {\n    listenSocket.push(socketRefToMessage(el[1].ref));\n  });\n\n  return {\n    ref: serverRefToMessage(serverEntry.ref),\n    data: {\n      calls_started: resolvedInfo.callTracker.callsStarted,\n      calls_succeeded: resolvedInfo.callTracker.callsSucceeded,\n      calls_failed: resolvedInfo.callTracker.callsFailed,\n      last_call_started_timestamp: dateToProtoTimestamp(\n        resolvedInfo.callTracker.lastCallStartedTimestamp\n      ),\n      trace: resolvedInfo.trace.getTraceMessage(),\n    },\n    listen_socket: listenSocket,\n  };\n}\n\nfunction GetServer(\n  call: ServerUnaryCall<GetServerRequest__Output, GetServerResponse>,\n  callback: sendUnaryData<GetServerResponse>\n): void {\n  const serverId = parseInt(call.request.server_id, 10);\n  const serverEntries = entityMaps[EntityTypes.server];\n  const serverEntry = serverEntries.getElementByKey(serverId);\n  if (serverEntry === undefined) {\n    callback({\n      code: Status.NOT_FOUND,\n      details: 'No server data found for id ' + serverId,\n    });\n    return;\n  }\n  callback(null, { server: getServerMessage(serverEntry) });\n}\n\nfunction GetServers(\n  call: ServerUnaryCall<GetServersRequest__Output, GetServersResponse>,\n  callback: sendUnaryData<GetServersResponse>\n): void {\n  const maxResults =\n    parseInt(call.request.max_results, 10) || DEFAULT_MAX_RESULTS;\n  const startId = parseInt(call.request.start_server_id, 10);\n  const serverEntries = entityMaps[EntityTypes.server];\n  const resultList: ServerMessage[] = [];\n\n  let i: OrderedMapIterator<number, ServerEntry>;\n  for (\n    i = serverEntries.lowerBound(startId);\n    !i.equals(serverEntries.end()) && resultList.length < maxResults;\n    i = i.next()\n  ) {\n    resultList.push(getServerMessage(i.pointer[1]));\n  }\n\n  callback(null, {\n    server: resultList,\n    end: i.equals(serverEntries.end()),\n  });\n}\n\nfunction GetSubchannel(\n  call: ServerUnaryCall<GetSubchannelRequest__Output, GetSubchannelResponse>,\n  callback: sendUnaryData<GetSubchannelResponse>\n): void {\n  const subchannelId = parseInt(call.request.subchannel_id, 10);\n  const subchannelEntry =\n    entityMaps[EntityTypes.subchannel].getElementByKey(subchannelId);\n  if (subchannelEntry === undefined) {\n    callback({\n      code: Status.NOT_FOUND,\n      details: 'No subchannel data found for id ' + subchannelId,\n    });\n    return;\n  }\n  const resolvedInfo = subchannelEntry.getInfo();\n  const listenSocket: SocketRefMessage[] = [];\n\n  resolvedInfo.children.sockets.forEach(el => {\n    listenSocket.push(socketRefToMessage(el[1].ref));\n  });\n\n  const subchannelMessage: SubchannelMessage = {\n    ref: subchannelRefToMessage(subchannelEntry.ref),\n    data: {\n      target: resolvedInfo.target,\n      state: connectivityStateToMessage(resolvedInfo.state),\n      calls_started: resolvedInfo.callTracker.callsStarted,\n      calls_succeeded: resolvedInfo.callTracker.callsSucceeded,\n      calls_failed: resolvedInfo.callTracker.callsFailed,\n      last_call_started_timestamp: dateToProtoTimestamp(\n        resolvedInfo.callTracker.lastCallStartedTimestamp\n      ),\n      trace: resolvedInfo.trace.getTraceMessage(),\n    },\n    socket_ref: listenSocket,\n  };\n  callback(null, { subchannel: subchannelMessage });\n}\n\nfunction subchannelAddressToAddressMessage(\n  subchannelAddress: SubchannelAddress\n): Address {\n  if (isTcpSubchannelAddress(subchannelAddress)) {\n    return {\n      address: 'tcpip_address',\n      tcpip_address: {\n        ip_address:\n          ipAddressStringToBuffer(subchannelAddress.host) ?? undefined,\n        port: subchannelAddress.port,\n      },\n    };\n  } else {\n    return {\n      address: 'uds_address',\n      uds_address: {\n        filename: subchannelAddress.path,\n      },\n    };\n  }\n}\n\nfunction GetSocket(\n  call: ServerUnaryCall<GetSocketRequest__Output, GetSocketResponse>,\n  callback: sendUnaryData<GetSocketResponse>\n): void {\n  const socketId = parseInt(call.request.socket_id, 10);\n  const socketEntry = entityMaps[EntityTypes.socket].getElementByKey(socketId);\n  if (socketEntry === undefined) {\n    callback({\n      code: Status.NOT_FOUND,\n      details: 'No socket data found for id ' + socketId,\n    });\n    return;\n  }\n  const resolvedInfo = socketEntry.getInfo();\n  const securityMessage: Security | null = resolvedInfo.security\n    ? {\n        model: 'tls',\n        tls: {\n          cipher_suite: resolvedInfo.security.cipherSuiteStandardName\n            ? 'standard_name'\n            : 'other_name',\n          standard_name:\n            resolvedInfo.security.cipherSuiteStandardName ?? undefined,\n          other_name: resolvedInfo.security.cipherSuiteOtherName ?? undefined,\n          local_certificate:\n            resolvedInfo.security.localCertificate ?? undefined,\n          remote_certificate:\n            resolvedInfo.security.remoteCertificate ?? undefined,\n        },\n      }\n    : null;\n  const socketMessage: SocketMessage = {\n    ref: socketRefToMessage(socketEntry.ref),\n    local: resolvedInfo.localAddress\n      ? subchannelAddressToAddressMessage(resolvedInfo.localAddress)\n      : null,\n    remote: resolvedInfo.remoteAddress\n      ? subchannelAddressToAddressMessage(resolvedInfo.remoteAddress)\n      : null,\n    remote_name: resolvedInfo.remoteName ?? undefined,\n    security: securityMessage,\n    data: {\n      keep_alives_sent: resolvedInfo.keepAlivesSent,\n      streams_started: resolvedInfo.streamsStarted,\n      streams_succeeded: resolvedInfo.streamsSucceeded,\n      streams_failed: resolvedInfo.streamsFailed,\n      last_local_stream_created_timestamp: dateToProtoTimestamp(\n        resolvedInfo.lastLocalStreamCreatedTimestamp\n      ),\n      last_remote_stream_created_timestamp: dateToProtoTimestamp(\n        resolvedInfo.lastRemoteStreamCreatedTimestamp\n      ),\n      messages_received: resolvedInfo.messagesReceived,\n      messages_sent: resolvedInfo.messagesSent,\n      last_message_received_timestamp: dateToProtoTimestamp(\n        resolvedInfo.lastMessageReceivedTimestamp\n      ),\n      last_message_sent_timestamp: dateToProtoTimestamp(\n        resolvedInfo.lastMessageSentTimestamp\n      ),\n      local_flow_control_window: resolvedInfo.localFlowControlWindow\n        ? { value: resolvedInfo.localFlowControlWindow }\n        : null,\n      remote_flow_control_window: resolvedInfo.remoteFlowControlWindow\n        ? { value: resolvedInfo.remoteFlowControlWindow }\n        : null,\n    },\n  };\n  callback(null, { socket: socketMessage });\n}\n\nfunction GetServerSockets(\n  call: ServerUnaryCall<\n    GetServerSocketsRequest__Output,\n    GetServerSocketsResponse\n  >,\n  callback: sendUnaryData<GetServerSocketsResponse>\n): void {\n  const serverId = parseInt(call.request.server_id, 10);\n  const serverEntry = entityMaps[EntityTypes.server].getElementByKey(serverId);\n\n  if (serverEntry === undefined) {\n    callback({\n      code: Status.NOT_FOUND,\n      details: 'No server data found for id ' + serverId,\n    });\n    return;\n  }\n\n  const startId = parseInt(call.request.start_socket_id, 10);\n  const maxResults =\n    parseInt(call.request.max_results, 10) || DEFAULT_MAX_RESULTS;\n  const resolvedInfo = serverEntry.getInfo();\n  // If we wanted to include listener sockets in the result, this line would\n  // instead say\n  // const allSockets = resolvedInfo.listenerChildren.sockets.concat(resolvedInfo.sessionChildren.sockets).sort((ref1, ref2) => ref1.id - ref2.id);\n  const allSockets = resolvedInfo.sessionChildren.sockets;\n  const resultList: SocketRefMessage[] = [];\n\n  let i: OrderedMapIterator<number, { ref: SocketRef }>;\n  for (\n    i = allSockets.lowerBound(startId);\n    !i.equals(allSockets.end()) && resultList.length < maxResults;\n    i = i.next()\n  ) {\n    resultList.push(socketRefToMessage(i.pointer[1].ref));\n  }\n\n  callback(null, {\n    socket_ref: resultList,\n    end: i.equals(allSockets.end()),\n  });\n}\n\nexport function getChannelzHandlers(): ChannelzHandlers {\n  return {\n    GetChannel,\n    GetTopChannels,\n    GetServer,\n    GetServers,\n    GetSubchannel,\n    GetSocket,\n    GetServerSockets,\n  };\n}\n\nlet loadedChannelzDefinition: ChannelzDefinition | null = null;\n\nexport function getChannelzServiceDefinition(): ChannelzDefinition {\n  if (loadedChannelzDefinition) {\n    return loadedChannelzDefinition;\n  }\n  /* The purpose of this complexity is to avoid loading @grpc/proto-loader at\n   * runtime for users who will not use/enable channelz. */\n  const loaderLoadSync = require('@grpc/proto-loader')\n    .loadSync as typeof loadSync;\n  const loadedProto = loaderLoadSync('channelz.proto', {\n    keepCase: true,\n    longs: String,\n    enums: String,\n    defaults: true,\n    oneofs: true,\n    includeDirs: [`${__dirname}/../../proto`],\n  });\n  const channelzGrpcObject = loadPackageDefinition(\n    loadedProto\n  ) as unknown as ChannelzProtoGrpcType;\n  loadedChannelzDefinition =\n    channelzGrpcObject.grpc.channelz.v1.Channelz.service;\n  return loadedChannelzDefinition;\n}\n\nexport function setup() {\n  registerAdminService(getChannelzServiceDefinition, getChannelzHandlers);\n}\n","/*\n * Copyright 2022 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nlet nextCallNumber = 0;\n\nexport function getNextCallNumber() {\n  return nextCallNumber++;\n}\n","/*\n * Copyright 2021 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nexport enum CompressionAlgorithms {\n  identity = 0,\n  deflate = 1,\n  gzip = 2,\n}\n","/*\n * Copyright 2019 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport { StatusObject, WriteObject } from './call-interface';\nimport { Metadata } from './metadata';\n\n/**\n * Filter classes represent related per-call logic and state that is primarily\n * used to modify incoming and outgoing data. All async filters can be\n * rejected. The rejection error must be a StatusObject, and a rejection will\n * cause the call to end with that status.\n */\nexport interface Filter {\n  sendMetadata(metadata: Promise<Metadata>): Promise<Metadata>;\n\n  receiveMetadata(metadata: Metadata): Metadata;\n\n  sendMessage(message: Promise<WriteObject>): Promise<WriteObject>;\n\n  receiveMessage(message: Promise<Buffer>): Promise<Buffer>;\n\n  receiveTrailers(status: StatusObject): StatusObject;\n}\n\nexport abstract class BaseFilter implements Filter {\n  async sendMetadata(metadata: Promise<Metadata>): Promise<Metadata> {\n    return metadata;\n  }\n\n  receiveMetadata(metadata: Metadata): Metadata {\n    return metadata;\n  }\n\n  async sendMessage(message: Promise<WriteObject>): Promise<WriteObject> {\n    return message;\n  }\n\n  async receiveMessage(message: Promise<Buffer>): Promise<Buffer> {\n    return message;\n  }\n\n  receiveTrailers(status: StatusObject): StatusObject {\n    return status;\n  }\n}\n\nexport interface FilterFactory<T extends Filter> {\n  createFilter(): T;\n}\n","/*\n * Copyright 2019 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport * as zlib from 'zlib';\n\nimport { WriteObject, WriteFlags } from './call-interface';\nimport { Channel } from './channel';\nimport { ChannelOptions } from './channel-options';\nimport { CompressionAlgorithms } from './compression-algorithms';\nimport { DEFAULT_MAX_RECEIVE_MESSAGE_LENGTH, DEFAULT_MAX_SEND_MESSAGE_LENGTH, LogVerbosity, Status } from './constants';\nimport { BaseFilter, Filter, FilterFactory } from './filter';\nimport * as logging from './logging';\nimport { Metadata, MetadataValue } from './metadata';\n\nconst isCompressionAlgorithmKey = (\n  key: number\n): key is CompressionAlgorithms => {\n  return (\n    typeof key === 'number' && typeof CompressionAlgorithms[key] === 'string'\n  );\n};\n\ntype CompressionAlgorithm = keyof typeof CompressionAlgorithms;\n\ntype SharedCompressionFilterConfig = {\n  serverSupportedEncodingHeader?: string;\n};\n\nabstract class CompressionHandler {\n  protected abstract compressMessage(message: Buffer): Promise<Buffer>;\n  protected abstract decompressMessage(data: Buffer): Promise<Buffer>;\n  /**\n   * @param message Raw uncompressed message bytes\n   * @param compress Indicates whether the message should be compressed\n   * @return Framed message, compressed if applicable\n   */\n  async writeMessage(message: Buffer, compress: boolean): Promise<Buffer> {\n    let messageBuffer = message;\n    if (compress) {\n      messageBuffer = await this.compressMessage(messageBuffer);\n    }\n    const output = Buffer.allocUnsafe(messageBuffer.length + 5);\n    output.writeUInt8(compress ? 1 : 0, 0);\n    output.writeUInt32BE(messageBuffer.length, 1);\n    messageBuffer.copy(output, 5);\n    return output;\n  }\n  /**\n   * @param data Framed message, possibly compressed\n   * @return Uncompressed message\n   */\n  async readMessage(data: Buffer): Promise<Buffer> {\n    const compressed = data.readUInt8(0) === 1;\n    let messageBuffer: Buffer<ArrayBufferLike> = data.slice(5);\n    if (compressed) {\n      messageBuffer = await this.decompressMessage(messageBuffer);\n    }\n    return messageBuffer;\n  }\n}\n\nclass IdentityHandler extends CompressionHandler {\n  async compressMessage(message: Buffer) {\n    return message;\n  }\n\n  async writeMessage(message: Buffer, compress: boolean): Promise<Buffer> {\n    const output = Buffer.allocUnsafe(message.length + 5);\n    /* With \"identity\" compression, messages should always be marked as\n     * uncompressed */\n    output.writeUInt8(0, 0);\n    output.writeUInt32BE(message.length, 1);\n    message.copy(output, 5);\n    return output;\n  }\n\n  decompressMessage(message: Buffer): Promise<Buffer> {\n    return Promise.reject<Buffer>(\n      new Error(\n        'Received compressed message but \"grpc-encoding\" header was identity'\n      )\n    );\n  }\n}\n\nclass DeflateHandler extends CompressionHandler {\n  constructor(private maxRecvMessageLength: number) {\n    super();\n  }\n\n  compressMessage(message: Buffer) {\n    return new Promise<Buffer>((resolve, reject) => {\n      zlib.deflate(message, (err, output) => {\n        if (err) {\n          reject(err);\n        } else {\n          resolve(output);\n        }\n      });\n    });\n  }\n\n  decompressMessage(message: Buffer) {\n    return new Promise<Buffer>((resolve, reject) => {\n      let totalLength = 0;\n      const messageParts: Buffer[] = [];\n      const decompresser = zlib.createInflate();\n      decompresser.on('error', (error: Error) => {\n        reject({\n          code: Status.INTERNAL,\n          details: 'Failed to decompress deflate-encoded message'\n        });\n      });\n      decompresser.on('data', (chunk: Buffer) => {\n        messageParts.push(chunk);\n        totalLength += chunk.byteLength;\n        if (this.maxRecvMessageLength !== -1 && totalLength > this.maxRecvMessageLength) {\n          decompresser.destroy();\n          reject({\n            code: Status.RESOURCE_EXHAUSTED,\n            details: `Received message that decompresses to a size larger than ${this.maxRecvMessageLength}`\n          });\n        }\n      });\n      decompresser.on('end', () => {\n        resolve(Buffer.concat(messageParts));\n      });\n      decompresser.write(message);\n      decompresser.end();\n    });\n  }\n}\n\nclass GzipHandler extends CompressionHandler {\n  constructor(private maxRecvMessageLength: number) {\n    super();\n  }\n\n  compressMessage(message: Buffer) {\n    return new Promise<Buffer>((resolve, reject) => {\n      zlib.gzip(message, (err, output) => {\n        if (err) {\n          reject(err);\n        } else {\n          resolve(output);\n        }\n      });\n    });\n  }\n\n  decompressMessage(message: Buffer) {\n    return new Promise<Buffer>((resolve, reject) => {\n      let totalLength = 0;\n      const messageParts: Buffer[] = [];\n      const decompresser = zlib.createGunzip();\n      decompresser.on('error', (error: Error) => {\n        reject({\n          code: Status.INTERNAL,\n          details: 'Failed to decompress gzip-encoded message'\n        });\n      });\n      decompresser.on('data', (chunk: Buffer) => {\n        messageParts.push(chunk);\n        totalLength += chunk.byteLength;\n        if (this.maxRecvMessageLength !== -1 && totalLength > this.maxRecvMessageLength) {\n          decompresser.destroy();\n          reject({\n            code: Status.RESOURCE_EXHAUSTED,\n            details: `Received message that decompresses to a size larger than ${this.maxRecvMessageLength}`\n          });\n        }\n      });\n      decompresser.on('end', () => {\n        resolve(Buffer.concat(messageParts));\n      });\n      decompresser.write(message);\n      decompresser.end();\n    });\n  }\n}\n\nclass UnknownHandler extends CompressionHandler {\n  constructor(private readonly compressionName: string) {\n    super();\n  }\n  compressMessage(message: Buffer): Promise<Buffer> {\n    return Promise.reject<Buffer>(\n      new Error(\n        `Received message compressed with unsupported compression method ${this.compressionName}`\n      )\n    );\n  }\n\n  decompressMessage(message: Buffer): Promise<Buffer> {\n    // This should be unreachable\n    return Promise.reject<Buffer>(\n      new Error(`Compression method not supported: ${this.compressionName}`)\n    );\n  }\n}\n\nfunction getCompressionHandler(compressionName: string, maxReceiveMessageSize: number): CompressionHandler {\n  switch (compressionName) {\n    case 'identity':\n      return new IdentityHandler();\n    case 'deflate':\n      return new DeflateHandler(maxReceiveMessageSize);\n    case 'gzip':\n      return new GzipHandler(maxReceiveMessageSize);\n    default:\n      return new UnknownHandler(compressionName);\n  }\n}\n\nexport class CompressionFilter extends BaseFilter implements Filter {\n  private sendCompression: CompressionHandler = new IdentityHandler();\n  private receiveCompression: CompressionHandler = new IdentityHandler();\n  private currentCompressionAlgorithm: CompressionAlgorithm = 'identity';\n  private maxReceiveMessageLength: number;\n  private maxSendMessageLength: number;\n\n  constructor(\n    channelOptions: ChannelOptions,\n    private sharedFilterConfig: SharedCompressionFilterConfig\n  ) {\n    super();\n\n    const compressionAlgorithmKey =\n      channelOptions['grpc.default_compression_algorithm'];\n    this.maxReceiveMessageLength = channelOptions['grpc.max_receive_message_length'] ?? DEFAULT_MAX_RECEIVE_MESSAGE_LENGTH;\n    this.maxSendMessageLength = channelOptions['grpc.max_send_message_length'] ?? DEFAULT_MAX_SEND_MESSAGE_LENGTH;\n    if (compressionAlgorithmKey !== undefined) {\n      if (isCompressionAlgorithmKey(compressionAlgorithmKey)) {\n        const clientSelectedEncoding = CompressionAlgorithms[\n          compressionAlgorithmKey\n        ] as CompressionAlgorithm;\n        const serverSupportedEncodings =\n          sharedFilterConfig.serverSupportedEncodingHeader?.split(',');\n        /**\n         * There are two possible situations here:\n         * 1) We don't have any info yet from the server about what compression it supports\n         *    In that case we should just use what the client tells us to use\n         * 2) We've previously received a response from the server including a grpc-accept-encoding header\n         *    In that case we only want to use the encoding chosen by the client if the server supports it\n         */\n        if (\n          !serverSupportedEncodings ||\n          serverSupportedEncodings.includes(clientSelectedEncoding)\n        ) {\n          this.currentCompressionAlgorithm = clientSelectedEncoding;\n          this.sendCompression = getCompressionHandler(\n            this.currentCompressionAlgorithm,\n            -1\n          );\n        }\n      } else {\n        logging.log(\n          LogVerbosity.ERROR,\n          `Invalid value provided for grpc.default_compression_algorithm option: ${compressionAlgorithmKey}`\n        );\n      }\n    }\n  }\n\n  async sendMetadata(metadata: Promise<Metadata>): Promise<Metadata> {\n    const headers: Metadata = await metadata;\n    headers.set('grpc-accept-encoding', 'identity,deflate,gzip');\n    headers.set('accept-encoding', 'identity');\n\n    // No need to send the header if it's \"identity\" -  behavior is identical; save the bandwidth\n    if (this.currentCompressionAlgorithm === 'identity') {\n      headers.remove('grpc-encoding');\n    } else {\n      headers.set('grpc-encoding', this.currentCompressionAlgorithm);\n    }\n\n    return headers;\n  }\n\n  receiveMetadata(metadata: Metadata): Metadata {\n    const receiveEncoding: MetadataValue[] = metadata.get('grpc-encoding');\n    if (receiveEncoding.length > 0) {\n      const encoding: MetadataValue = receiveEncoding[0];\n      if (typeof encoding === 'string') {\n        this.receiveCompression = getCompressionHandler(encoding, this.maxReceiveMessageLength);\n      }\n    }\n    metadata.remove('grpc-encoding');\n\n    /* Check to see if the compression we're using to send messages is supported by the server\n     * If not, reset the sendCompression filter and have it use the default IdentityHandler */\n    const serverSupportedEncodingsHeader = metadata.get(\n      'grpc-accept-encoding'\n    )[0] as string | undefined;\n    if (serverSupportedEncodingsHeader) {\n      this.sharedFilterConfig.serverSupportedEncodingHeader =\n        serverSupportedEncodingsHeader;\n      const serverSupportedEncodings =\n        serverSupportedEncodingsHeader.split(',');\n\n      if (\n        !serverSupportedEncodings.includes(this.currentCompressionAlgorithm)\n      ) {\n        this.sendCompression = new IdentityHandler();\n        this.currentCompressionAlgorithm = 'identity';\n      }\n    }\n    metadata.remove('grpc-accept-encoding');\n    return metadata;\n  }\n\n  async sendMessage(message: Promise<WriteObject>): Promise<WriteObject> {\n    /* This filter is special. The input message is the bare message bytes,\n     * and the output is a framed and possibly compressed message. For this\n     * reason, this filter should be at the bottom of the filter stack */\n    const resolvedMessage: WriteObject = await message;\n    if (this.maxSendMessageLength !== -1 && resolvedMessage.message.length > this.maxSendMessageLength) {\n      throw {\n        code: Status.RESOURCE_EXHAUSTED,\n        details: `Attempted to send message with a size larger than ${this.maxSendMessageLength}`\n      };\n    }\n    let compress: boolean;\n    if (this.sendCompression instanceof IdentityHandler) {\n      compress = false;\n    } else {\n      compress = ((resolvedMessage.flags ?? 0) & WriteFlags.NoCompress) === 0;\n    }\n\n    return {\n      message: await this.sendCompression.writeMessage(\n        resolvedMessage.message,\n        compress\n      ),\n      flags: resolvedMessage.flags,\n    };\n  }\n\n  async receiveMessage(message: Promise<Buffer>) {\n    /* This filter is also special. The input message is framed and possibly\n     * compressed, and the output message is deframed and uncompressed. So\n     * this is another reason that this filter should be at the bottom of the\n     * filter stack. */\n    return this.receiveCompression.readMessage(await message);\n  }\n}\n\nexport class CompressionFilterFactory\n  implements FilterFactory<CompressionFilter>\n{\n  private sharedFilterConfig: SharedCompressionFilterConfig = {};\n  constructor(channel: Channel, private readonly options: ChannelOptions) {}\n  createFilter(): CompressionFilter {\n    return new CompressionFilter(this.options, this.sharedFilterConfig);\n  }\n}\n","/*\n * Copyright 2022 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport { Status } from './constants';\n\nconst INAPPROPRIATE_CONTROL_PLANE_CODES: Status[] = [\n  Status.OK,\n  Status.INVALID_ARGUMENT,\n  Status.NOT_FOUND,\n  Status.ALREADY_EXISTS,\n  Status.FAILED_PRECONDITION,\n  Status.ABORTED,\n  Status.OUT_OF_RANGE,\n  Status.DATA_LOSS,\n];\n\nexport function restrictControlPlaneStatusCode(\n  code: Status,\n  details: string\n): { code: Status; details: string } {\n  if (INAPPROPRIATE_CONTROL_PLANE_CODES.includes(code)) {\n    return {\n      code: Status.INTERNAL,\n      details: `Invalid status from control plane: ${code} ${Status[code]} ${details}`,\n    };\n  } else {\n    return { code, details };\n  }\n}\n","/*\n * Copyright 2019 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nexport type Deadline = Date | number;\n\nexport function minDeadline(...deadlineList: Deadline[]): Deadline {\n  let minValue = Infinity;\n  for (const deadline of deadlineList) {\n    const deadlineMsecs =\n      deadline instanceof Date ? deadline.getTime() : deadline;\n    if (deadlineMsecs < minValue) {\n      minValue = deadlineMsecs;\n    }\n  }\n  return minValue;\n}\n\nconst units: Array<[string, number]> = [\n  ['m', 1],\n  ['S', 1000],\n  ['M', 60 * 1000],\n  ['H', 60 * 60 * 1000],\n];\n\nexport function getDeadlineTimeoutString(deadline: Deadline) {\n  const now = new Date().getTime();\n  if (deadline instanceof Date) {\n    deadline = deadline.getTime();\n  }\n  const timeoutMs = Math.max(deadline - now, 0);\n  for (const [unit, factor] of units) {\n    const amount = timeoutMs / factor;\n    if (amount < 1e8) {\n      return String(Math.ceil(amount)) + unit;\n    }\n  }\n  throw new Error('Deadline is too far in the future');\n}\n\n/**\n * See https://nodejs.org/api/timers.html#settimeoutcallback-delay-args\n * In particular, \"When delay is larger than 2147483647 or less than 1, the\n * delay will be set to 1. Non-integer delays are truncated to an integer.\"\n * This number of milliseconds is almost 25 days.\n */\nconst MAX_TIMEOUT_TIME = 2147483647;\n\n/**\n * Get the timeout value that should be passed to setTimeout now for the timer\n * to end at the deadline. For any deadline before now, the timer should end\n * immediately, represented by a value of 0. For any deadline more than\n * MAX_TIMEOUT_TIME milliseconds in the future, a timer cannot be set that will\n * end at that time, so it is treated as infinitely far in the future.\n * @param deadline\n * @returns\n */\nexport function getRelativeTimeout(deadline: Deadline) {\n  const deadlineMs = deadline instanceof Date ? deadline.getTime() : deadline;\n  const now = new Date().getTime();\n  const timeout = deadlineMs - now;\n  if (timeout < 0) {\n    return 0;\n  } else if (timeout > MAX_TIMEOUT_TIME) {\n    return Infinity;\n  } else {\n    return timeout;\n  }\n}\n\nexport function deadlineToString(deadline: Deadline): string {\n  if (deadline instanceof Date) {\n    return deadline.toISOString();\n  } else {\n    const dateDeadline = new Date(deadline);\n    if (Number.isNaN(dateDeadline.getTime())) {\n      return '' + deadline;\n    } else {\n      return dateDeadline.toISOString();\n    }\n  }\n}\n\n/**\n * Calculate the difference between two dates as a number of seconds and format\n * it as a string.\n * @param startDate\n * @param endDate\n * @returns\n */\nexport function formatDateDifference(startDate: Date, endDate: Date): string {\n  return ((endDate.getTime() - startDate.getTime()) / 1000).toFixed(3) + 's';\n}\n","/*\n * Copyright 2019 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport { StatusObject, WriteObject } from './call-interface';\nimport { Filter, FilterFactory } from './filter';\nimport { Metadata } from './metadata';\n\nexport class FilterStack implements Filter {\n  constructor(private readonly filters: Filter[]) {}\n\n  sendMetadata(metadata: Promise<Metadata>): Promise<Metadata> {\n    let result: Promise<Metadata> = metadata;\n\n    for (let i = 0; i < this.filters.length; i++) {\n      result = this.filters[i].sendMetadata(result);\n    }\n\n    return result;\n  }\n\n  receiveMetadata(metadata: Metadata) {\n    let result: Metadata = metadata;\n\n    for (let i = this.filters.length - 1; i >= 0; i--) {\n      result = this.filters[i].receiveMetadata(result);\n    }\n\n    return result;\n  }\n\n  sendMessage(message: Promise<WriteObject>): Promise<WriteObject> {\n    let result: Promise<WriteObject> = message;\n\n    for (let i = 0; i < this.filters.length; i++) {\n      result = this.filters[i].sendMessage(result);\n    }\n\n    return result;\n  }\n\n  receiveMessage(message: Promise<Buffer>): Promise<Buffer> {\n    let result: Promise<Buffer> = message;\n\n    for (let i = this.filters.length - 1; i >= 0; i--) {\n      result = this.filters[i].receiveMessage(result);\n    }\n\n    return result;\n  }\n\n  receiveTrailers(status: StatusObject): StatusObject {\n    let result: StatusObject = status;\n\n    for (let i = this.filters.length - 1; i >= 0; i--) {\n      result = this.filters[i].receiveTrailers(result);\n    }\n\n    return result;\n  }\n\n  push(filters: Filter[]) {\n    this.filters.unshift(...filters);\n  }\n\n  getFilters(): Filter[] {\n    return this.filters;\n  }\n}\n\nexport class FilterStackFactory implements FilterFactory<FilterStack> {\n  constructor(private readonly factories: Array<FilterFactory<Filter>>) {}\n\n  push(filterFactories: FilterFactory<Filter>[]) {\n    this.factories.unshift(...filterFactories);\n  }\n\n  clone(): FilterStackFactory {\n    return new FilterStackFactory([...this.factories]);\n  }\n\n  createFilter(): FilterStack {\n    return new FilterStack(\n      this.factories.map(factory => factory.createFilter())\n    );\n  }\n}\n","/*\n * Copyright 2025 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport { AuthContext } from \"./auth-context\";\nimport { CallCredentials } from \"./call-credentials\";\nimport { Call, CallStreamOptions, InterceptingListener, MessageContext, StatusObject } from \"./call-interface\";\nimport { getNextCallNumber } from \"./call-number\";\nimport { Channel } from \"./channel\";\nimport { ChannelOptions } from \"./channel-options\";\nimport { ChannelRef, ChannelzCallTracker, ChannelzChildrenTracker, ChannelzTrace, registerChannelzChannel, unregisterChannelzRef } from \"./channelz\";\nimport { CompressionFilterFactory } from \"./compression-filter\";\nimport { ConnectivityState } from \"./connectivity-state\";\nimport { Propagate, Status } from \"./constants\";\nimport { restrictControlPlaneStatusCode } from \"./control-plane-status\";\nimport { Deadline, getRelativeTimeout } from \"./deadline\";\nimport { FilterStack, FilterStackFactory } from \"./filter-stack\";\nimport { Metadata } from \"./metadata\";\nimport { getDefaultAuthority } from \"./resolver\";\nimport { Subchannel } from \"./subchannel\";\nimport { SubchannelCall } from \"./subchannel-call\";\nimport { GrpcUri, splitHostPort, uriToString } from \"./uri-parser\";\n\nclass SubchannelCallWrapper implements Call {\n  private childCall: SubchannelCall | null = null;\n  private pendingMessage: { context: MessageContext; message: Buffer } | null =\n    null;\n  private readPending = false;\n  private halfClosePending = false;\n  private pendingStatus: StatusObject | null = null;\n  private serviceUrl: string;\n  private filterStack: FilterStack;\n  private readFilterPending = false;\n  private writeFilterPending = false;\n  constructor(private subchannel: Subchannel, private method: string, filterStackFactory: FilterStackFactory, private options: CallStreamOptions, private callNumber: number) {\n    const splitPath: string[] = this.method.split('/');\n    let serviceName = '';\n    /* The standard path format is \"/{serviceName}/{methodName}\", so if we split\n      * by '/', the first item should be empty and the second should be the\n      * service name */\n    if (splitPath.length >= 2) {\n      serviceName = splitPath[1];\n    }\n    const hostname = splitHostPort(this.options.host)?.host ?? 'localhost';\n    /* Currently, call credentials are only allowed on HTTPS connections, so we\n      * can assume that the scheme is \"https\" */\n    this.serviceUrl = `https://${hostname}/${serviceName}`;\n    const timeout = getRelativeTimeout(options.deadline);\n    if (timeout !== Infinity) {\n      if (timeout <= 0) {\n        this.cancelWithStatus(Status.DEADLINE_EXCEEDED, 'Deadline exceeded');\n      } else {\n        setTimeout(() => {\n          this.cancelWithStatus(Status.DEADLINE_EXCEEDED, 'Deadline exceeded');\n        }, timeout);\n      }\n    }\n    this.filterStack = filterStackFactory.createFilter();\n  }\n\n  cancelWithStatus(status: Status, details: string): void {\n    if (this.childCall) {\n      this.childCall.cancelWithStatus(status, details);\n    } else {\n      this.pendingStatus = {\n        code: status,\n        details: details,\n        metadata: new Metadata()\n      };\n    }\n\n  }\n  getPeer(): string {\n    return this.childCall?.getPeer() ?? this.subchannel.getAddress();\n  }\n  async start(metadata: Metadata, listener: InterceptingListener): Promise<void> {\n    if (this.pendingStatus) {\n      listener.onReceiveStatus(this.pendingStatus);\n      return;\n    }\n    if (this.subchannel.getConnectivityState() !== ConnectivityState.READY) {\n      listener.onReceiveStatus({\n        code: Status.UNAVAILABLE,\n        details: 'Subchannel not ready',\n        metadata: new Metadata()\n      });\n      return;\n    }\n    const filteredMetadata = await this.filterStack.sendMetadata(Promise.resolve(metadata));\n    let credsMetadata: Metadata;\n    try {\n      credsMetadata = await this.subchannel.getCallCredentials()\n        .generateMetadata({method_name: this.method, service_url: this.serviceUrl});\n    } catch (e) {\n      const error = e as (Error & { code: number });\n      const { code, details } = restrictControlPlaneStatusCode(\n        typeof error.code === 'number' ? error.code : Status.UNKNOWN,\n        `Getting metadata from plugin failed with error: ${error.message}`\n      );\n      listener.onReceiveStatus(\n        {\n          code: code,\n          details: details,\n          metadata: new Metadata(),\n        }\n      );\n      return;\n    }\n    credsMetadata.merge(filteredMetadata);\n    const childListener: InterceptingListener = {\n      onReceiveMetadata: async metadata => {\n        listener.onReceiveMetadata(await this.filterStack.receiveMetadata(metadata));\n      },\n      onReceiveMessage: async message => {\n        this.readFilterPending = true;\n        const filteredMessage = await this.filterStack.receiveMessage(message);\n        this.readFilterPending = false;\n        listener.onReceiveMessage(filteredMessage);\n        if (this.pendingStatus) {\n          listener.onReceiveStatus(this.pendingStatus);\n        }\n      },\n      onReceiveStatus: async status => {\n        const filteredStatus = await this.filterStack.receiveTrailers(status);\n        if (this.readFilterPending) {\n          this.pendingStatus = filteredStatus;\n        } else {\n          listener.onReceiveStatus(filteredStatus);\n        }\n      }\n    }\n    this.childCall = this.subchannel.createCall(credsMetadata, this.options.host, this.method, childListener);\n    if (this.readPending) {\n      this.childCall.startRead();\n    }\n    if (this.pendingMessage) {\n      this.childCall.sendMessageWithContext(this.pendingMessage.context, this.pendingMessage.message);\n    }\n    if (this.halfClosePending && !this.writeFilterPending) {\n      this.childCall.halfClose();\n    }\n  }\n  async sendMessageWithContext(context: MessageContext, message: Buffer): Promise<void> {\n    this.writeFilterPending = true;\n    const filteredMessage = await this.filterStack.sendMessage(Promise.resolve({message: message, flags: context.flags}));\n    this.writeFilterPending = false;\n    if (this.childCall) {\n      this.childCall.sendMessageWithContext(context, filteredMessage.message);\n      if (this.halfClosePending) {\n        this.childCall.halfClose();\n      }\n    } else {\n      this.pendingMessage = { context, message: filteredMessage.message };\n    }\n  }\n  startRead(): void {\n    if (this.childCall) {\n      this.childCall.startRead();\n    } else {\n      this.readPending = true;\n    }\n  }\n  halfClose(): void {\n    if (this.childCall && !this.writeFilterPending) {\n      this.childCall.halfClose();\n    } else {\n      this.halfClosePending = true;\n    }\n  }\n  getCallNumber(): number {\n    return this.callNumber;\n  }\n  setCredentials(credentials: CallCredentials): void {\n    throw new Error(\"Method not implemented.\");\n  }\n  getAuthContext(): AuthContext | null {\n    if (this.childCall) {\n      return this.childCall.getAuthContext();\n    } else {\n      return null;\n    }\n  }\n}\n\nexport class SingleSubchannelChannel implements Channel {\n  private channelzRef: ChannelRef;\n  private channelzEnabled = false;\n  private channelzTrace = new ChannelzTrace();\n  private callTracker = new ChannelzCallTracker();\n  private childrenTracker = new ChannelzChildrenTracker();\n  private filterStackFactory: FilterStackFactory;\n  constructor(private subchannel: Subchannel, private target: GrpcUri, options: ChannelOptions) {\n    this.channelzEnabled = options['grpc.enable_channelz'] !== 0;\n    this.channelzRef = registerChannelzChannel(uriToString(target),  () => ({\n      target: `${uriToString(target)} (${subchannel.getAddress()})`,\n      state: this.subchannel.getConnectivityState(),\n      trace: this.channelzTrace,\n      callTracker: this.callTracker,\n      children: this.childrenTracker.getChildLists()\n    }), this.channelzEnabled);\n    if (this.channelzEnabled) {\n      this.childrenTracker.refChild(subchannel.getChannelzRef());\n    }\n    this.filterStackFactory = new FilterStackFactory([new CompressionFilterFactory(this, options)]);\n  }\n\n  close(): void {\n    if (this.channelzEnabled) {\n      this.childrenTracker.unrefChild(this.subchannel.getChannelzRef());\n    }\n    unregisterChannelzRef(this.channelzRef);\n  }\n\n  getTarget(): string {\n    return uriToString(this.target);\n  }\n  getConnectivityState(tryToConnect: boolean): ConnectivityState {\n    throw new Error(\"Method not implemented.\");\n  }\n  watchConnectivityState(currentState: ConnectivityState, deadline: Date | number, callback: (error?: Error) => void): void {\n    throw new Error(\"Method not implemented.\");\n  }\n  getChannelzRef(): ChannelRef {\n    return this.channelzRef;\n  }\n  createCall(method: string, deadline: Deadline): Call {\n    const callOptions: CallStreamOptions = {\n      deadline: deadline,\n      host: getDefaultAuthority(this.target),\n      flags: Propagate.DEFAULTS,\n      parentCall: null\n    };\n    return new SubchannelCallWrapper(this.subchannel, method, this.filterStackFactory, callOptions, getNextCallNumber());\n  }\n}\n","/*\n * Copyright 2019 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport { ChannelCredentials, SecureConnector } from './channel-credentials';\nimport { Metadata } from './metadata';\nimport { ChannelOptions } from './channel-options';\nimport { ConnectivityState } from './connectivity-state';\nimport { BackoffTimeout, BackoffOptions } from './backoff-timeout';\nimport * as logging from './logging';\nimport { LogVerbosity, Status } from './constants';\nimport { GrpcUri, uriToString } from './uri-parser';\nimport {\n  SubchannelAddress,\n  subchannelAddressToString,\n} from './subchannel-address';\nimport {\n  SubchannelRef,\n  ChannelzTrace,\n  ChannelzChildrenTracker,\n  ChannelzChildrenTrackerStub,\n  SubchannelInfo,\n  registerChannelzSubchannel,\n  ChannelzCallTracker,\n  ChannelzCallTrackerStub,\n  unregisterChannelzRef,\n  ChannelzTraceStub,\n} from './channelz';\nimport {\n  ConnectivityStateListener,\n  DataWatcher,\n  SubchannelInterface,\n} from './subchannel-interface';\nimport { SubchannelCallInterceptingListener } from './subchannel-call';\nimport { SubchannelCall } from './subchannel-call';\nimport { CallEventTracker, SubchannelConnector, Transport } from './transport';\nimport { CallCredentials } from './call-credentials';\nimport { SingleSubchannelChannel } from './single-subchannel-channel';\nimport { Channel } from './channel';\n\nconst TRACER_NAME = 'subchannel';\n\n/* setInterval and setTimeout only accept signed 32 bit integers. JS doesn't\n * have a constant for the max signed 32 bit integer, so this is a simple way\n * to calculate it */\nconst KEEPALIVE_MAX_TIME_MS = ~(1 << 31);\n\nexport interface DataProducer {\n  addDataWatcher(dataWatcher: DataWatcher): void;\n  removeDataWatcher(dataWatcher: DataWatcher): void;\n}\n\nexport class Subchannel implements SubchannelInterface {\n  /**\n   * The subchannel's current connectivity state. Invariant: `session` === `null`\n   * if and only if `connectivityState` is IDLE or TRANSIENT_FAILURE.\n   */\n  private connectivityState: ConnectivityState = ConnectivityState.IDLE;\n  /**\n   * The underlying http2 session used to make requests.\n   */\n  private transport: Transport | null = null;\n  /**\n   * Indicates that the subchannel should transition from TRANSIENT_FAILURE to\n   * CONNECTING instead of IDLE when the backoff timeout ends.\n   */\n  private continueConnecting = false;\n  /**\n   * A list of listener functions that will be called whenever the connectivity\n   * state changes. Will be modified by `addConnectivityStateListener` and\n   * `removeConnectivityStateListener`\n   */\n  private stateListeners: Set<ConnectivityStateListener> = new Set();\n\n  private backoffTimeout: BackoffTimeout;\n\n  private keepaliveTime: number;\n  /**\n   * Tracks channels and subchannel pools with references to this subchannel\n   */\n  private refcount = 0;\n\n  /**\n   * A string representation of the subchannel address, for logging/tracing\n   */\n  private subchannelAddressString: string;\n\n  // Channelz info\n  private readonly channelzEnabled: boolean = true;\n  private channelzRef: SubchannelRef;\n\n  private channelzTrace: ChannelzTrace | ChannelzTraceStub;\n  private callTracker: ChannelzCallTracker | ChannelzCallTrackerStub;\n  private childrenTracker:\n    | ChannelzChildrenTracker\n    | ChannelzChildrenTrackerStub;\n\n  // Channelz socket info\n  private streamTracker: ChannelzCallTracker | ChannelzCallTrackerStub;\n\n  private secureConnector: SecureConnector;\n\n  private dataProducers: Map<string, DataProducer> = new Map();\n\n  private subchannelChannel: Channel | null = null;\n\n  /**\n   * A class representing a connection to a single backend.\n   * @param channelTarget The target string for the channel as a whole\n   * @param subchannelAddress The address for the backend that this subchannel\n   *     will connect to\n   * @param options The channel options, plus any specific subchannel options\n   *     for this subchannel\n   * @param credentials The channel credentials used to establish this\n   *     connection\n   */\n  constructor(\n    private channelTarget: GrpcUri,\n    private subchannelAddress: SubchannelAddress,\n    private options: ChannelOptions,\n    credentials: ChannelCredentials,\n    private connector: SubchannelConnector\n  ) {\n    const backoffOptions: BackoffOptions = {\n      initialDelay: options['grpc.initial_reconnect_backoff_ms'],\n      maxDelay: options['grpc.max_reconnect_backoff_ms'],\n    };\n    this.backoffTimeout = new BackoffTimeout(() => {\n      this.handleBackoffTimer();\n    }, backoffOptions);\n    this.backoffTimeout.unref();\n    this.subchannelAddressString = subchannelAddressToString(subchannelAddress);\n\n    this.keepaliveTime = options['grpc.keepalive_time_ms'] ?? -1;\n\n    if (options['grpc.enable_channelz'] === 0) {\n      this.channelzEnabled = false;\n      this.channelzTrace = new ChannelzTraceStub();\n      this.callTracker = new ChannelzCallTrackerStub();\n      this.childrenTracker = new ChannelzChildrenTrackerStub();\n      this.streamTracker = new ChannelzCallTrackerStub();\n    } else {\n      this.channelzTrace = new ChannelzTrace();\n      this.callTracker = new ChannelzCallTracker();\n      this.childrenTracker = new ChannelzChildrenTracker();\n      this.streamTracker = new ChannelzCallTracker();\n    }\n\n    this.channelzRef = registerChannelzSubchannel(\n      this.subchannelAddressString,\n      () => this.getChannelzInfo(),\n      this.channelzEnabled\n    );\n\n    this.channelzTrace.addTrace('CT_INFO', 'Subchannel created');\n    this.trace(\n      'Subchannel constructed with options ' +\n        JSON.stringify(options, undefined, 2)\n    );\n    this.secureConnector = credentials._createSecureConnector(channelTarget, options);\n  }\n\n  private getChannelzInfo(): SubchannelInfo {\n    return {\n      state: this.connectivityState,\n      trace: this.channelzTrace,\n      callTracker: this.callTracker,\n      children: this.childrenTracker.getChildLists(),\n      target: this.subchannelAddressString,\n    };\n  }\n\n  private trace(text: string): void {\n    logging.trace(\n      LogVerbosity.DEBUG,\n      TRACER_NAME,\n      '(' +\n        this.channelzRef.id +\n        ') ' +\n        this.subchannelAddressString +\n        ' ' +\n        text\n    );\n  }\n\n  private refTrace(text: string): void {\n    logging.trace(\n      LogVerbosity.DEBUG,\n      'subchannel_refcount',\n      '(' +\n        this.channelzRef.id +\n        ') ' +\n        this.subchannelAddressString +\n        ' ' +\n        text\n    );\n  }\n\n  private handleBackoffTimer() {\n    if (this.continueConnecting) {\n      this.transitionToState(\n        [ConnectivityState.TRANSIENT_FAILURE],\n        ConnectivityState.CONNECTING\n      );\n    } else {\n      this.transitionToState(\n        [ConnectivityState.TRANSIENT_FAILURE],\n        ConnectivityState.IDLE\n      );\n    }\n  }\n\n  /**\n   * Start a backoff timer with the current nextBackoff timeout\n   */\n  private startBackoff() {\n    this.backoffTimeout.runOnce();\n  }\n\n  private stopBackoff() {\n    this.backoffTimeout.stop();\n    this.backoffTimeout.reset();\n  }\n\n  private startConnectingInternal() {\n    let options = this.options;\n    if (options['grpc.keepalive_time_ms']) {\n      const adjustedKeepaliveTime = Math.min(\n        this.keepaliveTime,\n        KEEPALIVE_MAX_TIME_MS\n      );\n      options = { ...options, 'grpc.keepalive_time_ms': adjustedKeepaliveTime };\n    }\n    this.connector\n      .connect(this.subchannelAddress, this.secureConnector, options)\n      .then(\n        transport => {\n          if (\n            this.transitionToState(\n              [ConnectivityState.CONNECTING],\n              ConnectivityState.READY\n            )\n          ) {\n            this.transport = transport;\n            if (this.channelzEnabled) {\n              this.childrenTracker.refChild(transport.getChannelzRef());\n            }\n            transport.addDisconnectListener(tooManyPings => {\n              this.transitionToState(\n                [ConnectivityState.READY],\n                ConnectivityState.IDLE\n              );\n              if (tooManyPings && this.keepaliveTime > 0) {\n                this.keepaliveTime *= 2;\n                logging.log(\n                  LogVerbosity.ERROR,\n                  `Connection to ${uriToString(this.channelTarget)} at ${\n                    this.subchannelAddressString\n                  } rejected by server because of excess pings. Increasing ping interval to ${\n                    this.keepaliveTime\n                  } ms`\n                );\n              }\n            });\n          } else {\n            /* If we can't transition from CONNECTING to READY here, we will\n             * not be using this transport, so release its resources. */\n            transport.shutdown();\n          }\n        },\n        error => {\n          this.transitionToState(\n            [ConnectivityState.CONNECTING],\n            ConnectivityState.TRANSIENT_FAILURE,\n            `${error}`\n          );\n        }\n      );\n  }\n\n  /**\n   * Initiate a state transition from any element of oldStates to the new\n   * state. If the current connectivityState is not in oldStates, do nothing.\n   * @param oldStates The set of states to transition from\n   * @param newState The state to transition to\n   * @returns True if the state changed, false otherwise\n   */\n  private transitionToState(\n    oldStates: ConnectivityState[],\n    newState: ConnectivityState,\n    errorMessage?: string\n  ): boolean {\n    if (oldStates.indexOf(this.connectivityState) === -1) {\n      return false;\n    }\n    if (errorMessage) {\n      this.trace(\n        ConnectivityState[this.connectivityState] +\n          ' -> ' +\n          ConnectivityState[newState] +\n          ' with error \"' + errorMessage + '\"'\n      );\n\n    } else {\n      this.trace(\n        ConnectivityState[this.connectivityState] +\n          ' -> ' +\n          ConnectivityState[newState]\n      );\n    }\n    if (this.channelzEnabled) {\n      this.channelzTrace.addTrace(\n        'CT_INFO',\n        'Connectivity state change to ' + ConnectivityState[newState]\n      );\n    }\n    const previousState = this.connectivityState;\n    this.connectivityState = newState;\n    switch (newState) {\n      case ConnectivityState.READY:\n        this.stopBackoff();\n        break;\n      case ConnectivityState.CONNECTING:\n        this.startBackoff();\n        this.startConnectingInternal();\n        this.continueConnecting = false;\n        break;\n      case ConnectivityState.TRANSIENT_FAILURE:\n        if (this.channelzEnabled && this.transport) {\n          this.childrenTracker.unrefChild(this.transport.getChannelzRef());\n        }\n        this.transport?.shutdown();\n        this.transport = null;\n        /* If the backoff timer has already ended by the time we get to the\n         * TRANSIENT_FAILURE state, we want to immediately transition out of\n         * TRANSIENT_FAILURE as though the backoff timer is ending right now */\n        if (!this.backoffTimeout.isRunning()) {\n          process.nextTick(() => {\n            this.handleBackoffTimer();\n          });\n        }\n        break;\n      case ConnectivityState.IDLE:\n        if (this.channelzEnabled && this.transport) {\n          this.childrenTracker.unrefChild(this.transport.getChannelzRef());\n        }\n        this.transport?.shutdown();\n        this.transport = null;\n        break;\n      default:\n        throw new Error(`Invalid state: unknown ConnectivityState ${newState}`);\n    }\n    for (const listener of this.stateListeners) {\n      listener(this, previousState, newState, this.keepaliveTime, errorMessage);\n    }\n    return true;\n  }\n\n  ref() {\n    this.refTrace('refcount ' + this.refcount + ' -> ' + (this.refcount + 1));\n    this.refcount += 1;\n  }\n\n  unref() {\n    this.refTrace('refcount ' + this.refcount + ' -> ' + (this.refcount - 1));\n    this.refcount -= 1;\n    if (this.refcount === 0) {\n      this.channelzTrace.addTrace('CT_INFO', 'Shutting down');\n      unregisterChannelzRef(this.channelzRef);\n      this.secureConnector.destroy();\n      process.nextTick(() => {\n        this.transitionToState(\n          [ConnectivityState.CONNECTING, ConnectivityState.READY],\n          ConnectivityState.IDLE\n        );\n      });\n    }\n  }\n\n  unrefIfOneRef(): boolean {\n    if (this.refcount === 1) {\n      this.unref();\n      return true;\n    }\n    return false;\n  }\n\n  createCall(\n    metadata: Metadata,\n    host: string,\n    method: string,\n    listener: SubchannelCallInterceptingListener\n  ): SubchannelCall {\n    if (!this.transport) {\n      throw new Error('Cannot create call, subchannel not READY');\n    }\n    let statsTracker: Partial<CallEventTracker>;\n    if (this.channelzEnabled) {\n      this.callTracker.addCallStarted();\n      this.streamTracker.addCallStarted();\n      statsTracker = {\n        onCallEnd: status => {\n          if (status.code === Status.OK) {\n            this.callTracker.addCallSucceeded();\n          } else {\n            this.callTracker.addCallFailed();\n          }\n        },\n      };\n    } else {\n      statsTracker = {};\n    }\n    return this.transport.createCall(\n      metadata,\n      host,\n      method,\n      listener,\n      statsTracker\n    );\n  }\n\n  /**\n   * If the subchannel is currently IDLE, start connecting and switch to the\n   * CONNECTING state. If the subchannel is current in TRANSIENT_FAILURE,\n   * the next time it would transition to IDLE, start connecting again instead.\n   * Otherwise, do nothing.\n   */\n  startConnecting() {\n    process.nextTick(() => {\n      /* First, try to transition from IDLE to connecting. If that doesn't happen\n       * because the state is not currently IDLE, check if it is\n       * TRANSIENT_FAILURE, and if so indicate that it should go back to\n       * connecting after the backoff timer ends. Otherwise do nothing */\n      if (\n        !this.transitionToState(\n          [ConnectivityState.IDLE],\n          ConnectivityState.CONNECTING\n        )\n      ) {\n        if (this.connectivityState === ConnectivityState.TRANSIENT_FAILURE) {\n          this.continueConnecting = true;\n        }\n      }\n    });\n  }\n\n  /**\n   * Get the subchannel's current connectivity state.\n   */\n  getConnectivityState() {\n    return this.connectivityState;\n  }\n\n  /**\n   * Add a listener function to be called whenever the subchannel's\n   * connectivity state changes.\n   * @param listener\n   */\n  addConnectivityStateListener(listener: ConnectivityStateListener) {\n    this.stateListeners.add(listener);\n  }\n\n  /**\n   * Remove a listener previously added with `addConnectivityStateListener`\n   * @param listener A reference to a function previously passed to\n   *     `addConnectivityStateListener`\n   */\n  removeConnectivityStateListener(listener: ConnectivityStateListener) {\n    this.stateListeners.delete(listener);\n  }\n\n  /**\n   * Reset the backoff timeout, and immediately start connecting if in backoff.\n   */\n  resetBackoff() {\n    process.nextTick(() => {\n      this.backoffTimeout.reset();\n      this.transitionToState(\n        [ConnectivityState.TRANSIENT_FAILURE],\n        ConnectivityState.CONNECTING\n      );\n    });\n  }\n\n  getAddress(): string {\n    return this.subchannelAddressString;\n  }\n\n  getChannelzRef(): SubchannelRef {\n    return this.channelzRef;\n  }\n\n  isHealthy(): boolean {\n    return true;\n  }\n\n  addHealthStateWatcher(listener: (healthy: boolean) => void): void {\n    // Do nothing with the listener\n  }\n\n  removeHealthStateWatcher(listener: (healthy: boolean) => void): void {\n    // Do nothing with the listener\n  }\n\n  getRealSubchannel(): this {\n    return this;\n  }\n\n  realSubchannelEquals(other: SubchannelInterface): boolean {\n    return other.getRealSubchannel() === this;\n  }\n\n  throttleKeepalive(newKeepaliveTime: number) {\n    if (newKeepaliveTime > this.keepaliveTime) {\n      this.keepaliveTime = newKeepaliveTime;\n    }\n  }\n  getCallCredentials(): CallCredentials {\n    return this.secureConnector.getCallCredentials();\n  }\n\n  getChannel(): Channel {\n    if (!this.subchannelChannel) {\n      this.subchannelChannel = new SingleSubchannelChannel(this, this.channelTarget, this.options);\n    }\n    return this.subchannelChannel;\n  }\n\n  addDataWatcher(dataWatcher: DataWatcher): void {\n    throw new Error('Not implemented');\n  }\n\n  getOrCreateDataProducer(name: string, createDataProducer: (subchannel: Subchannel) => DataProducer): DataProducer {\n    const existingProducer = this.dataProducers.get(name);\n    if (existingProducer){\n      return existingProducer;\n    }\n    const newProducer = createDataProducer(this);\n    this.dataProducers.set(name, newProducer);\n    return newProducer;\n  }\n\n  removeDataProducer(name: string) {\n    this.dataProducers.delete(name);\n  }\n}\n","/*\n * Copyright 2024 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nexport const GRPC_NODE_USE_ALTERNATIVE_RESOLVER =\n  (process.env.GRPC_NODE_USE_ALTERNATIVE_RESOLVER ?? 'false') === 'true';\n","/*\n * Copyright 2019 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  Resolver,\n  ResolverListener,\n  registerResolver,\n  registerDefaultScheme,\n} from './resolver';\nimport { promises as dns } from 'dns';\nimport { extractAndSelectServiceConfig, ServiceConfig } from './service-config';\nimport { Status } from './constants';\nimport { StatusObject, StatusOr, statusOrFromError, statusOrFromValue } from './call-interface';\nimport { Metadata } from './metadata';\nimport * as logging from './logging';\nimport { LogVerbosity } from './constants';\nimport { Endpoint, TcpSubchannelAddress } from './subchannel-address';\nimport { GrpcUri, uriToString, splitHostPort } from './uri-parser';\nimport { isIPv6, isIPv4 } from 'net';\nimport { ChannelOptions } from './channel-options';\nimport { BackoffOptions, BackoffTimeout } from './backoff-timeout';\nimport { GRPC_NODE_USE_ALTERNATIVE_RESOLVER } from './environment';\n\nconst TRACER_NAME = 'dns_resolver';\n\nfunction trace(text: string): void {\n  logging.trace(LogVerbosity.DEBUG, TRACER_NAME, text);\n}\n\n/**\n * The default TCP port to connect to if not explicitly specified in the target.\n */\nexport const DEFAULT_PORT = 443;\n\nconst DEFAULT_MIN_TIME_BETWEEN_RESOLUTIONS_MS = 30_000;\n\n/**\n * Resolver implementation that handles DNS names and IP addresses.\n */\nclass DnsResolver implements Resolver {\n  private readonly ipResult: Endpoint[] | null;\n  private readonly dnsHostname: string | null;\n  private readonly port: number | null;\n  /**\n   * Minimum time between resolutions, measured as the time between starting\n   * successive resolution requests. Only applies to successful resolutions.\n   * Failures are handled by the backoff timer.\n   */\n  private readonly minTimeBetweenResolutionsMs: number;\n  private pendingLookupPromise: Promise<TcpSubchannelAddress[]> | null = null;\n  private pendingTxtPromise: Promise<string[][]> | null = null;\n  private latestLookupResult: StatusOr<Endpoint[]> | null = null;\n  private latestServiceConfigResult: StatusOr<ServiceConfig> | null = null;\n  private percentage: number;\n  private defaultResolutionError: StatusObject;\n  private backoff: BackoffTimeout;\n  private continueResolving = false;\n  private nextResolutionTimer: NodeJS.Timeout;\n  private isNextResolutionTimerRunning = false;\n  private isServiceConfigEnabled = true;\n  private returnedIpResult = false;\n  private alternativeResolver = new dns.Resolver();\n\n  constructor(\n    private target: GrpcUri,\n    private listener: ResolverListener,\n    channelOptions: ChannelOptions\n  ) {\n    trace('Resolver constructed for target ' + uriToString(target));\n    if (target.authority) {\n      this.alternativeResolver.setServers([target.authority]);\n    }\n    const hostPort = splitHostPort(target.path);\n    if (hostPort === null) {\n      this.ipResult = null;\n      this.dnsHostname = null;\n      this.port = null;\n    } else {\n      if (isIPv4(hostPort.host) || isIPv6(hostPort.host)) {\n        this.ipResult = [\n          {\n            addresses: [\n              {\n                host: hostPort.host,\n                port: hostPort.port ?? DEFAULT_PORT,\n              },\n            ],\n          },\n        ];\n        this.dnsHostname = null;\n        this.port = null;\n      } else {\n        this.ipResult = null;\n        this.dnsHostname = hostPort.host;\n        this.port = hostPort.port ?? DEFAULT_PORT;\n      }\n    }\n    this.percentage = Math.random() * 100;\n\n    if (channelOptions['grpc.service_config_disable_resolution'] === 1) {\n      this.isServiceConfigEnabled = false;\n    }\n\n    this.defaultResolutionError = {\n      code: Status.UNAVAILABLE,\n      details: `Name resolution failed for target ${uriToString(this.target)}`,\n      metadata: new Metadata(),\n    };\n\n    const backoffOptions: BackoffOptions = {\n      initialDelay: channelOptions['grpc.initial_reconnect_backoff_ms'],\n      maxDelay: channelOptions['grpc.max_reconnect_backoff_ms'],\n    };\n\n    this.backoff = new BackoffTimeout(() => {\n      if (this.continueResolving) {\n        this.startResolutionWithBackoff();\n      }\n    }, backoffOptions);\n    this.backoff.unref();\n\n    this.minTimeBetweenResolutionsMs =\n      channelOptions['grpc.dns_min_time_between_resolutions_ms'] ??\n      DEFAULT_MIN_TIME_BETWEEN_RESOLUTIONS_MS;\n    this.nextResolutionTimer = setTimeout(() => {}, 0);\n    clearTimeout(this.nextResolutionTimer);\n  }\n\n  /**\n   * If the target is an IP address, just provide that address as a result.\n   * Otherwise, initiate A, AAAA, and TXT lookups\n   */\n  private startResolution() {\n    if (this.ipResult !== null) {\n      if (!this.returnedIpResult) {\n        trace('Returning IP address for target ' + uriToString(this.target));\n        setImmediate(() => {\n          this.listener(\n            statusOrFromValue(this.ipResult!),\n            {},\n            null,\n            ''\n          )\n        });\n        this.returnedIpResult = true;\n      }\n      this.backoff.stop();\n      this.backoff.reset();\n      this.stopNextResolutionTimer();\n      return;\n    }\n    if (this.dnsHostname === null) {\n      trace('Failed to parse DNS address ' + uriToString(this.target));\n      setImmediate(() => {\n        this.listener(\n          statusOrFromError({\n            code: Status.UNAVAILABLE,\n            details: `Failed to parse DNS address ${uriToString(this.target)}`\n          }),\n          {},\n          null,\n          ''\n        );\n      });\n      this.stopNextResolutionTimer();\n    } else {\n      if (this.pendingLookupPromise !== null) {\n        return;\n      }\n      trace('Looking up DNS hostname ' + this.dnsHostname);\n      /* We clear out latestLookupResult here to ensure that it contains the\n       * latest result since the last time we started resolving. That way, the\n       * TXT resolution handler can use it, but only if it finishes second. We\n       * don't clear out any previous service config results because it's\n       * better to use a service config that's slightly out of date than to\n       * revert to an effectively blank one. */\n      this.latestLookupResult = null;\n      const hostname: string = this.dnsHostname;\n      this.pendingLookupPromise = this.lookup(hostname);\n      this.pendingLookupPromise.then(\n        addressList => {\n          if (this.pendingLookupPromise === null) {\n            return;\n          }\n          this.pendingLookupPromise = null;\n          this.latestLookupResult = statusOrFromValue(addressList.map(address => ({\n            addresses: [address],\n          })));\n          const allAddressesString: string =\n            '[' +\n            addressList.map(addr => addr.host + ':' + addr.port).join(',') +\n            ']';\n          trace(\n            'Resolved addresses for target ' +\n              uriToString(this.target) +\n              ': ' +\n              allAddressesString\n          );\n          /* If the TXT lookup has not yet finished, both of the last two\n           * arguments will be null, which is the equivalent of getting an\n           * empty TXT response. When the TXT lookup does finish, its handler\n           * can update the service config by using the same address list */\n          const healthStatus = this.listener(\n            this.latestLookupResult,\n            {},\n            this.latestServiceConfigResult,\n            ''\n          );\n          this.handleHealthStatus(healthStatus);\n        },\n        err => {\n          if (this.pendingLookupPromise === null) {\n            return;\n          }\n          trace(\n            'Resolution error for target ' +\n              uriToString(this.target) +\n              ': ' +\n              (err as Error).message\n          );\n          this.pendingLookupPromise = null;\n          this.stopNextResolutionTimer();\n          this.listener(\n            statusOrFromError(this.defaultResolutionError),\n            {},\n            this.latestServiceConfigResult,\n            ''\n          )\n        }\n      );\n      /* If there already is a still-pending TXT resolution, we can just use\n       * that result when it comes in */\n      if (this.isServiceConfigEnabled && this.pendingTxtPromise === null) {\n        /* We handle the TXT query promise differently than the others because\n         * the name resolution attempt as a whole is a success even if the TXT\n         * lookup fails */\n        this.pendingTxtPromise = this.resolveTxt(hostname);\n        this.pendingTxtPromise.then(\n          txtRecord => {\n            if (this.pendingTxtPromise === null) {\n              return;\n            }\n            this.pendingTxtPromise = null;\n            let serviceConfig: ServiceConfig | null;\n            try {\n              serviceConfig = extractAndSelectServiceConfig(\n                txtRecord,\n                this.percentage\n              );\n              if (serviceConfig) {\n                this.latestServiceConfigResult = statusOrFromValue(serviceConfig);\n              } else {\n                this.latestServiceConfigResult = null;\n              }\n            } catch (err) {\n              this.latestServiceConfigResult = statusOrFromError({\n                code: Status.UNAVAILABLE,\n                details: `Parsing service config failed with error ${\n                  (err as Error).message\n                }`\n              });\n            }\n            if (this.latestLookupResult !== null) {\n              /* We rely here on the assumption that calling this function with\n               * identical parameters will be essentialy idempotent, and calling\n               * it with the same address list and a different service config\n               * should result in a fast and seamless switchover. */\n              this.listener(\n                this.latestLookupResult,\n                {},\n                this.latestServiceConfigResult,\n                ''\n              );\n            }\n          },\n          err => {\n            /* If TXT lookup fails we should do nothing, which means that we\n             * continue to use the result of the most recent successful lookup,\n             * or the default null config object if there has never been a\n             * successful lookup. We do not set the latestServiceConfigError\n             * here because that is specifically used for response validation\n             * errors. We still need to handle this error so that it does not\n             * bubble up as an unhandled promise rejection. */\n          }\n        );\n      }\n    }\n  }\n\n  /**\n   * The ResolverListener returns a boolean indicating whether the LB policy\n   * accepted the resolution result. A false result on an otherwise successful\n   * resolution should be treated as a resolution failure.\n   * @param healthStatus\n   */\n  private handleHealthStatus(healthStatus: boolean) {\n    if (healthStatus) {\n      this.backoff.stop();\n      this.backoff.reset();\n    } else {\n      this.continueResolving = true;\n    }\n  }\n\n  private async lookup(hostname: string): Promise<TcpSubchannelAddress[]> {\n    if (GRPC_NODE_USE_ALTERNATIVE_RESOLVER) {\n      trace('Using alternative DNS resolver.');\n\n      const records = await Promise.allSettled([\n        this.alternativeResolver.resolve4(hostname),\n        this.alternativeResolver.resolve6(hostname),\n      ]);\n\n      if (records.every(result => result.status === 'rejected')) {\n        throw new Error((records[0] as PromiseRejectedResult).reason);\n      }\n\n      return records\n        .reduce<string[]>((acc, result) => {\n          return result.status === 'fulfilled'\n            ? [...acc, ...result.value]\n            : acc;\n        }, [])\n        .map(addr => ({\n          host: addr,\n          port: +this.port!,\n        }));\n    }\n\n    /* We lookup both address families here and then split them up later\n     * because when looking up a single family, dns.lookup outputs an error\n     * if the name exists but there are no records for that family, and that\n     * error is indistinguishable from other kinds of errors */\n    const addressList = await dns.lookup(hostname, { all: true });\n    return addressList.map(addr => ({ host: addr.address, port: +this.port! }));\n  }\n\n  private async resolveTxt(hostname: string): Promise<string[][]> {\n    if (GRPC_NODE_USE_ALTERNATIVE_RESOLVER) {\n      trace('Using alternative DNS resolver.');\n      return this.alternativeResolver.resolveTxt(hostname);\n    }\n\n    return dns.resolveTxt(hostname);\n  }\n\n  private startNextResolutionTimer() {\n    clearTimeout(this.nextResolutionTimer);\n    this.nextResolutionTimer = setTimeout(() => {\n      this.stopNextResolutionTimer();\n      if (this.continueResolving) {\n        this.startResolutionWithBackoff();\n      }\n    }, this.minTimeBetweenResolutionsMs);\n    this.nextResolutionTimer.unref?.();\n    this.isNextResolutionTimerRunning = true;\n  }\n\n  private stopNextResolutionTimer() {\n    clearTimeout(this.nextResolutionTimer);\n    this.isNextResolutionTimerRunning = false;\n  }\n\n  private startResolutionWithBackoff() {\n    if (this.pendingLookupPromise === null) {\n      this.continueResolving = false;\n      this.backoff.runOnce();\n      this.startNextResolutionTimer();\n      this.startResolution();\n    }\n  }\n\n  updateResolution() {\n    /* If there is a pending lookup, just let it finish. Otherwise, if the\n     * nextResolutionTimer or backoff timer is running, set the\n     * continueResolving flag to resolve when whichever of those timers\n     * fires. Otherwise, start resolving immediately. */\n    if (this.pendingLookupPromise === null) {\n      if (this.isNextResolutionTimerRunning || this.backoff.isRunning()) {\n        if (this.isNextResolutionTimerRunning) {\n          trace(\n            'resolution update delayed by \"min time between resolutions\" rate limit'\n          );\n        } else {\n          trace(\n            'resolution update delayed by backoff timer until ' +\n              this.backoff.getEndTime().toISOString()\n          );\n        }\n        this.continueResolving = true;\n      } else {\n        this.startResolutionWithBackoff();\n      }\n    }\n  }\n\n  /**\n   * Reset the resolver to the same state it had when it was created. In-flight\n   * DNS requests cannot be cancelled, but they are discarded and their results\n   * will be ignored.\n   */\n  destroy() {\n    this.continueResolving = false;\n    this.backoff.reset();\n    this.backoff.stop();\n    this.stopNextResolutionTimer();\n    this.pendingLookupPromise = null;\n    this.pendingTxtPromise = null;\n    this.latestLookupResult = null;\n    this.latestServiceConfigResult = null;\n    this.returnedIpResult = false;\n  }\n\n  /**\n   * Get the default authority for the given target. For IP targets, that is\n   * the IP address. For DNS targets, it is the hostname.\n   * @param target\n   */\n  static getDefaultAuthority(target: GrpcUri): string {\n    return target.path;\n  }\n}\n\n/**\n * Set up the DNS resolver class by registering it as the handler for the\n * \"dns:\" prefix and as the default resolver.\n */\nexport function setup(): void {\n  registerResolver('dns', DnsResolver);\n  registerDefaultScheme('dns');\n}\n\nexport interface DnsUrl {\n  host: string;\n  port?: string;\n}\n","/*\n * Copyright 2019 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport { log } from './logging';\nimport { LogVerbosity } from './constants';\nimport { isIPv4, Socket } from 'net';\nimport * as http from 'http';\nimport * as logging from './logging';\nimport {\n  SubchannelAddress,\n  isTcpSubchannelAddress,\n  subchannelAddressToString,\n} from './subchannel-address';\nimport { ChannelOptions } from './channel-options';\nimport { GrpcUri, parseUri, splitHostPort, uriToString } from './uri-parser';\nimport { URL } from 'url';\nimport { DEFAULT_PORT } from './resolver-dns';\n\nconst TRACER_NAME = 'proxy';\n\nfunction trace(text: string): void {\n  logging.trace(LogVerbosity.DEBUG, TRACER_NAME, text);\n}\n\ninterface ProxyInfo {\n  address?: string;\n  creds?: string;\n}\n\nfunction getProxyInfo(): ProxyInfo {\n  let proxyEnv = '';\n  let envVar = '';\n  /* Prefer using 'grpc_proxy'. Fallback on 'http_proxy' if it is not set.\n   * Also prefer using 'https_proxy' with fallback on 'http_proxy'. The\n   * fallback behavior can be removed if there's a demand for it.\n   */\n  if (process.env.grpc_proxy) {\n    envVar = 'grpc_proxy';\n    proxyEnv = process.env.grpc_proxy;\n  } else if (process.env.https_proxy) {\n    envVar = 'https_proxy';\n    proxyEnv = process.env.https_proxy;\n  } else if (process.env.http_proxy) {\n    envVar = 'http_proxy';\n    proxyEnv = process.env.http_proxy;\n  } else {\n    return {};\n  }\n  let proxyUrl: URL;\n  try {\n    proxyUrl = new URL(proxyEnv);\n  } catch (e) {\n    log(LogVerbosity.ERROR, `cannot parse value of \"${envVar}\" env var`);\n    return {};\n  }\n  if (proxyUrl.protocol !== 'http:') {\n    log(\n      LogVerbosity.ERROR,\n      `\"${proxyUrl.protocol}\" scheme not supported in proxy URI`\n    );\n    return {};\n  }\n  let userCred: string | null = null;\n  if (proxyUrl.username) {\n    if (proxyUrl.password) {\n      log(LogVerbosity.INFO, 'userinfo found in proxy URI');\n      userCred = decodeURIComponent(`${proxyUrl.username}:${proxyUrl.password}`);\n    } else {\n      userCred = proxyUrl.username;\n    }\n  }\n  const hostname = proxyUrl.hostname;\n  let port = proxyUrl.port;\n  /* The proxy URL uses the scheme \"http:\", which has a default port number of\n   * 80. We need to set that explicitly here if it is omitted because otherwise\n   * it will use gRPC's default port 443. */\n  if (port === '') {\n    port = '80';\n  }\n  const result: ProxyInfo = {\n    address: `${hostname}:${port}`,\n  };\n  if (userCred) {\n    result.creds = userCred;\n  }\n  trace(\n    'Proxy server ' + result.address + ' set by environment variable ' + envVar\n  );\n  return result;\n}\n\nfunction getNoProxyHostList(): string[] {\n  /* Prefer using 'no_grpc_proxy'. Fallback on 'no_proxy' if it is not set. */\n  let noProxyStr: string | undefined = process.env.no_grpc_proxy;\n  let envVar = 'no_grpc_proxy';\n  if (!noProxyStr) {\n    noProxyStr = process.env.no_proxy;\n    envVar = 'no_proxy';\n  }\n  if (noProxyStr) {\n    trace('No proxy server list set by environment variable ' + envVar);\n    return noProxyStr.split(',');\n  } else {\n    return [];\n  }\n}\n\ninterface CIDRNotation {\n  ip: number;\n  prefixLength: number;\n}\n\n/*\n * The groups correspond to CIDR parts as follows:\n * 1. ip\n * 2. prefixLength\n */\n\nexport function parseCIDR(cidrString: string): CIDRNotation | null {\n  const splitRange = cidrString.split('/');  \n  if (splitRange.length !== 2) {  \n    return null;  \n  }  \n  const prefixLength = parseInt(splitRange[1], 10);  \n  if (!isIPv4(splitRange[0]) || Number.isNaN(prefixLength) || prefixLength < 0 || prefixLength > 32) {  \n    return null;  \n  }  \n  return {  \n    ip: ipToInt(splitRange[0]),  \n    prefixLength: prefixLength  \n  };\n}\n\nfunction ipToInt(ip: string) {\n  return ip.split(\".\").reduce((acc, octet) => (acc << 8) + parseInt(octet, 10), 0);\n}\n\nfunction isIpInCIDR(cidr: CIDRNotation, serverHost: string) {\n  const ip = cidr.ip;\n  const mask = -1 << (32 - cidr.prefixLength);\n  const hostIP = ipToInt(serverHost);\n\n  return (hostIP & mask) === (ip & mask);\n}\n\nfunction hostMatchesNoProxyList(serverHost: string): boolean {\n  for (const host of getNoProxyHostList()) {\n    const parsedCIDR = parseCIDR(host);\n    // host is a CIDR and serverHost is an IP address\n    if (isIPv4(serverHost) && parsedCIDR && isIpInCIDR(parsedCIDR, serverHost)) {\n      return true;\n    } else if (serverHost.endsWith(host)) {\n      // host is a single IP or a domain name suffix\n      return true;\n    }\n  }\n  return false;\n}\n\nexport interface ProxyMapResult {\n  target: GrpcUri;\n  extraOptions: ChannelOptions;\n}\n\nexport function mapProxyName(\n  target: GrpcUri,\n  options: ChannelOptions\n): ProxyMapResult {\n  const noProxyResult: ProxyMapResult = {\n    target: target,\n    extraOptions: {},\n  };\n  if ((options['grpc.enable_http_proxy'] ?? 1) === 0) {\n    return noProxyResult;\n  }\n  if (target.scheme === 'unix') {\n    return noProxyResult;\n  }\n  const proxyInfo = getProxyInfo();\n  if (!proxyInfo.address) {\n    return noProxyResult;\n  }\n  const hostPort = splitHostPort(target.path);\n  if (!hostPort) {\n    return noProxyResult;\n  }\n  const serverHost = hostPort.host;\n  if (hostMatchesNoProxyList(serverHost)) {\n    trace('Not using proxy for target in no_proxy list: ' + uriToString(target));\n    return noProxyResult;\n  }\n  const extraOptions: ChannelOptions = {\n    'grpc.http_connect_target': uriToString(target),\n  };\n  if (proxyInfo.creds) {\n    extraOptions['grpc.http_connect_creds'] = proxyInfo.creds;\n  }\n  return {\n    target: {\n      scheme: 'dns',\n      path: proxyInfo.address,\n    },\n    extraOptions: extraOptions,\n  };\n}\n\nexport function getProxiedConnection(\n  address: SubchannelAddress,\n  channelOptions: ChannelOptions\n): Promise<Socket | null> {\n  if (!('grpc.http_connect_target' in channelOptions)) {\n    return Promise.resolve(null);\n  }\n  const realTarget = channelOptions['grpc.http_connect_target'] as string;\n  const parsedTarget = parseUri(realTarget);\n  if (parsedTarget === null) {\n    return Promise.resolve(null);\n  }\n  const splitHostPost = splitHostPort(parsedTarget.path);\n  if (splitHostPost === null) {\n    return Promise.resolve(null);\n  }\n  const hostPort = `${splitHostPost.host}:${\n    splitHostPost.port ?? DEFAULT_PORT\n  }`;\n  const options: http.RequestOptions = {\n    method: 'CONNECT',\n    path: hostPort,\n  };\n  const headers: http.OutgoingHttpHeaders = {\n    Host: hostPort,\n  };\n  // Connect to the subchannel address as a proxy\n  if (isTcpSubchannelAddress(address)) {\n    options.host = address.host;\n    options.port = address.port;\n  } else {\n    options.socketPath = address.path;\n  }\n  if ('grpc.http_connect_creds' in channelOptions) {\n    headers['Proxy-Authorization'] =\n      'Basic ' +\n      Buffer.from(channelOptions['grpc.http_connect_creds'] as string).toString(\n        'base64'\n      );\n  }\n  options.headers = headers;\n  const proxyAddressString = subchannelAddressToString(address);\n  trace('Using proxy ' + proxyAddressString + ' to connect to ' + options.path);\n  return new Promise<Socket | null>((resolve, reject) => {\n    const request = http.request(options);\n    request.once('connect', (res, socket, head) => {\n      request.removeAllListeners();\n      socket.removeAllListeners();\n      if (res.statusCode === 200) {\n        trace(\n          'Successfully connected to ' +\n            options.path +\n            ' through proxy ' +\n            proxyAddressString\n        );\n        // The HTTP client may have already read a few bytes of the proxied\n        // connection. If that's the case, put them back into the socket.\n        // See https://github.com/grpc/grpc-node/issues/2744.\n        if (head.length > 0) {\n          socket.unshift(head);\n        }\n        trace(\n          'Successfully established a plaintext connection to ' +\n            options.path +\n            ' through proxy ' +\n            proxyAddressString\n        );\n        resolve(socket);\n      } else {\n        log(\n          LogVerbosity.ERROR,\n          'Failed to connect to ' +\n            options.path +\n            ' through proxy ' +\n            proxyAddressString +\n            ' with status ' +\n            res.statusCode\n        );\n        reject();\n      }\n    });\n    request.once('error', err => {\n      request.removeAllListeners();\n      log(\n        LogVerbosity.ERROR,\n        'Failed to connect to proxy ' +\n          proxyAddressString +\n          ' with error ' +\n          err.message\n      );\n      reject();\n    });\n    request.end();\n  });\n}\n","/*\n * Copyright 2019 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nenum ReadState {\n  NO_DATA,\n  READING_SIZE,\n  READING_MESSAGE,\n}\n\nexport class StreamDecoder {\n  private readState: ReadState = ReadState.NO_DATA;\n  private readCompressFlag: Buffer = Buffer.alloc(1);\n  private readPartialSize: Buffer = Buffer.alloc(4);\n  private readSizeRemaining = 4;\n  private readMessageSize = 0;\n  private readPartialMessage: Buffer[] = [];\n  private readMessageRemaining = 0;\n\n  constructor(private maxReadMessageLength: number) {}\n\n  write(data: Buffer): Buffer[] {\n    let readHead = 0;\n    let toRead: number;\n    const result: Buffer[] = [];\n\n    while (readHead < data.length) {\n      switch (this.readState) {\n        case ReadState.NO_DATA:\n          this.readCompressFlag = data.slice(readHead, readHead + 1);\n          readHead += 1;\n          this.readState = ReadState.READING_SIZE;\n          this.readPartialSize.fill(0);\n          this.readSizeRemaining = 4;\n          this.readMessageSize = 0;\n          this.readMessageRemaining = 0;\n          this.readPartialMessage = [];\n          break;\n        case ReadState.READING_SIZE:\n          toRead = Math.min(data.length - readHead, this.readSizeRemaining);\n          data.copy(\n            this.readPartialSize,\n            4 - this.readSizeRemaining,\n            readHead,\n            readHead + toRead\n          );\n          this.readSizeRemaining -= toRead;\n          readHead += toRead;\n          // readSizeRemaining >=0 here\n          if (this.readSizeRemaining === 0) {\n            this.readMessageSize = this.readPartialSize.readUInt32BE(0);\n            if (this.maxReadMessageLength !== -1 && this.readMessageSize > this.maxReadMessageLength) {\n              throw new Error(`Received message larger than max (${this.readMessageSize} vs ${this.maxReadMessageLength})`);\n            }\n            this.readMessageRemaining = this.readMessageSize;\n            if (this.readMessageRemaining > 0) {\n              this.readState = ReadState.READING_MESSAGE;\n            } else {\n              const message = Buffer.concat(\n                [this.readCompressFlag, this.readPartialSize],\n                5\n              );\n\n              this.readState = ReadState.NO_DATA;\n              result.push(message);\n            }\n          }\n          break;\n        case ReadState.READING_MESSAGE:\n          toRead = Math.min(data.length - readHead, this.readMessageRemaining);\n          this.readPartialMessage.push(data.slice(readHead, readHead + toRead));\n          this.readMessageRemaining -= toRead;\n          readHead += toRead;\n          // readMessageRemaining >=0 here\n          if (this.readMessageRemaining === 0) {\n            // At this point, we have read a full message\n            const framedMessageBuffers = [\n              this.readCompressFlag,\n              this.readPartialSize,\n            ].concat(this.readPartialMessage);\n            const framedMessage = Buffer.concat(\n              framedMessageBuffers,\n              this.readMessageSize + 5\n            );\n\n            this.readState = ReadState.NO_DATA;\n            result.push(framedMessage);\n          }\n          break;\n        default:\n          throw new Error('Unexpected read state');\n      }\n    }\n\n    return result;\n  }\n}\n","/*\n * Copyright 2019 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport * as http2 from 'http2';\nimport * as os from 'os';\n\nimport { DEFAULT_MAX_RECEIVE_MESSAGE_LENGTH, Status } from './constants';\nimport { Metadata } from './metadata';\nimport { StreamDecoder } from './stream-decoder';\nimport * as logging from './logging';\nimport { LogVerbosity } from './constants';\nimport {\n  InterceptingListener,\n  MessageContext,\n  StatusObject,\n  WriteCallback,\n} from './call-interface';\nimport { CallEventTracker, Transport } from './transport';\nimport { AuthContext } from './auth-context';\n\nconst TRACER_NAME = 'subchannel_call';\n\n/**\n * https://nodejs.org/api/errors.html#errors_class_systemerror\n */\ninterface SystemError extends Error {\n  address?: string;\n  code: string;\n  dest?: string;\n  errno: number;\n  info?: object;\n  message: string;\n  path?: string;\n  port?: number;\n  syscall: string;\n}\n\n/**\n * Should do approximately the same thing as util.getSystemErrorName but the\n * TypeScript types don't have that function for some reason so I just made my\n * own.\n * @param errno\n */\nfunction getSystemErrorName(errno: number): string {\n  for (const [name, num] of Object.entries(os.constants.errno)) {\n    if (num === errno) {\n      return name;\n    }\n  }\n  return 'Unknown system error ' + errno;\n}\n\nexport interface SubchannelCall {\n  cancelWithStatus(status: Status, details: string): void;\n  getPeer(): string;\n  sendMessageWithContext(context: MessageContext, message: Buffer): void;\n  startRead(): void;\n  halfClose(): void;\n  getCallNumber(): number;\n  getDeadlineInfo(): string[];\n  getAuthContext(): AuthContext;\n}\n\nexport interface StatusObjectWithRstCode extends StatusObject {\n  rstCode?: number;\n}\n\nexport interface SubchannelCallInterceptingListener\n  extends InterceptingListener {\n  onReceiveStatus(status: StatusObjectWithRstCode): void;\n}\n\nfunction mapHttpStatusCode(code: number): StatusObject {\n  const details = `Received HTTP status code ${code}`;\n  let mappedStatusCode: number;\n  switch (code) {\n    // TODO(murgatroid99): handle 100 and 101\n    case 400:\n      mappedStatusCode = Status.INTERNAL;\n      break;\n    case 401:\n      mappedStatusCode = Status.UNAUTHENTICATED;\n      break;\n    case 403:\n      mappedStatusCode = Status.PERMISSION_DENIED;\n      break;\n    case 404:\n      mappedStatusCode = Status.UNIMPLEMENTED;\n      break;\n    case 429:\n    case 502:\n    case 503:\n    case 504:\n      mappedStatusCode = Status.UNAVAILABLE;\n      break;\n    default:\n      mappedStatusCode = Status.UNKNOWN;\n  }\n  return {\n    code: mappedStatusCode,\n    details: details,\n    metadata: new Metadata()\n  };\n}\n\nexport class Http2SubchannelCall implements SubchannelCall {\n  private decoder: StreamDecoder;\n\n  private isReadFilterPending = false;\n  private isPushPending = false;\n  private canPush = false;\n  /**\n   * Indicates that an 'end' event has come from the http2 stream, so there\n   * will be no more data events.\n   */\n  private readsClosed = false;\n\n  private statusOutput = false;\n\n  private unpushedReadMessages: Buffer[] = [];\n\n  private httpStatusCode: number | undefined;\n\n  // This is populated (non-null) if and only if the call has ended\n  private finalStatus: StatusObject | null = null;\n\n  private internalError: SystemError | null = null;\n\n  private serverEndedCall = false;\n\n  private connectionDropped = false;\n\n  constructor(\n    private readonly http2Stream: http2.ClientHttp2Stream,\n    private readonly callEventTracker: CallEventTracker,\n    private readonly listener: SubchannelCallInterceptingListener,\n    private readonly transport: Transport,\n    private readonly callId: number\n  ) {\n    const maxReceiveMessageLength = transport.getOptions()['grpc.max_receive_message_length'] ?? DEFAULT_MAX_RECEIVE_MESSAGE_LENGTH;\n    this.decoder = new StreamDecoder(maxReceiveMessageLength);\n    http2Stream.on('response', (headers, flags) => {\n      let headersString = '';\n      for (const header of Object.keys(headers)) {\n        headersString += '\\t\\t' + header + ': ' + headers[header] + '\\n';\n      }\n      this.trace('Received server headers:\\n' + headersString);\n      this.httpStatusCode = headers[':status'];\n\n      if (flags & http2.constants.NGHTTP2_FLAG_END_STREAM) {\n        this.handleTrailers(headers);\n      } else {\n        let metadata: Metadata;\n        try {\n          metadata = Metadata.fromHttp2Headers(headers);\n        } catch (error) {\n          this.endCall({\n            code: Status.UNKNOWN,\n            details: (error as Error).message,\n            metadata: new Metadata(),\n          });\n          return;\n        }\n        this.listener.onReceiveMetadata(metadata);\n      }\n    });\n    http2Stream.on('trailers', (headers: http2.IncomingHttpHeaders) => {\n      this.handleTrailers(headers);\n    });\n    http2Stream.on('data', (data: Buffer) => {\n      /* If the status has already been output, allow the http2 stream to\n       * drain without processing the data. */\n      if (this.statusOutput) {\n        return;\n      }\n      this.trace('receive HTTP/2 data frame of length ' + data.length);\n      let messages: Buffer[];\n      try {\n        messages = this.decoder.write(data);\n      } catch (e) {\n        /* Some servers send HTML error pages along with HTTP status codes.\n         * When the client attempts to parse this as a length-delimited\n         * message, the parsed message size is greater than the default limit,\n         * resulting in a message decoding error. In that situation, the HTTP\n         * error code information is more useful to the user than the\n         * RESOURCE_EXHAUSTED error is, so we report that instead. Normally,\n         * we delay processing the HTTP status until after the stream ends, to\n         * prioritize reporting the gRPC status from trailers if it is present,\n         * but when there is a message parsing error we end the stream early\n         * before processing trailers. */\n        if (this.httpStatusCode !== undefined && this.httpStatusCode !== 200) {\n          const mappedStatus = mapHttpStatusCode(this.httpStatusCode);\n          this.cancelWithStatus(mappedStatus.code, mappedStatus.details);\n        } else {\n          this.cancelWithStatus(Status.RESOURCE_EXHAUSTED, (e as Error).message);\n        }\n        return;\n      }\n\n      for (const message of messages) {\n        this.trace('parsed message of length ' + message.length);\n        this.callEventTracker!.addMessageReceived();\n        this.tryPush(message);\n      }\n    });\n    http2Stream.on('end', () => {\n      this.readsClosed = true;\n      this.maybeOutputStatus();\n    });\n    http2Stream.on('close', () => {\n      this.serverEndedCall = true;\n      /* Use process.next tick to ensure that this code happens after any\n       * \"error\" event that may be emitted at about the same time, so that\n       * we can bubble up the error message from that event. */\n      process.nextTick(() => {\n        this.trace('HTTP/2 stream closed with code ' + http2Stream.rstCode);\n        /* If we have a final status with an OK status code, that means that\n         * we have received all of the messages and we have processed the\n         * trailers and the call completed successfully, so it doesn't matter\n         * how the stream ends after that */\n        if (this.finalStatus?.code === Status.OK) {\n          return;\n        }\n        let code: Status;\n        let details = '';\n        switch (http2Stream.rstCode) {\n          case http2.constants.NGHTTP2_NO_ERROR:\n            /* If we get a NO_ERROR code and we already have a status, the\n             * stream completed properly and we just haven't fully processed\n             * it yet */\n            if (this.finalStatus !== null) {\n              return;\n            }\n            if (this.httpStatusCode && this.httpStatusCode !== 200) {\n              const mappedStatus = mapHttpStatusCode(this.httpStatusCode);\n              code = mappedStatus.code;\n              details = mappedStatus.details;\n            } else {\n              code = Status.INTERNAL;\n              details = `Received RST_STREAM with code ${http2Stream.rstCode} (Call ended without gRPC status)`;\n            }\n            break;\n          case http2.constants.NGHTTP2_REFUSED_STREAM:\n            code = Status.UNAVAILABLE;\n            details = 'Stream refused by server';\n            break;\n          case http2.constants.NGHTTP2_CANCEL:\n            /* Bug reports indicate that Node synthesizes a NGHTTP2_CANCEL\n             * code from connection drops. We want to prioritize reporting\n             * an unavailable status when that happens. */\n            if (this.connectionDropped) {\n              code = Status.UNAVAILABLE;\n              details = 'Connection dropped';\n            } else {\n              code = Status.CANCELLED;\n              details = 'Call cancelled';\n            }\n            break;\n          case http2.constants.NGHTTP2_ENHANCE_YOUR_CALM:\n            code = Status.RESOURCE_EXHAUSTED;\n            details = 'Bandwidth exhausted or memory limit exceeded';\n            break;\n          case http2.constants.NGHTTP2_INADEQUATE_SECURITY:\n            code = Status.PERMISSION_DENIED;\n            details = 'Protocol not secure enough';\n            break;\n          case http2.constants.NGHTTP2_INTERNAL_ERROR:\n            code = Status.INTERNAL;\n            if (this.internalError === null) {\n              /* This error code was previously handled in the default case, and\n               * there are several instances of it online, so I wanted to\n               * preserve the original error message so that people find existing\n               * information in searches, but also include the more recognizable\n               * \"Internal server error\" message. */\n              details = `Received RST_STREAM with code ${http2Stream.rstCode} (Internal server error)`;\n            } else {\n              if (\n                this.internalError.code === 'ECONNRESET' ||\n                this.internalError.code === 'ETIMEDOUT'\n              ) {\n                code = Status.UNAVAILABLE;\n                details = this.internalError.message;\n              } else {\n                /* The \"Received RST_STREAM with code ...\" error is preserved\n                 * here for continuity with errors reported online, but the\n                 * error message at the end will probably be more relevant in\n                 * most cases. */\n                details = `Received RST_STREAM with code ${http2Stream.rstCode} triggered by internal client error: ${this.internalError.message}`;\n              }\n            }\n            break;\n          default:\n            code = Status.INTERNAL;\n            details = `Received RST_STREAM with code ${http2Stream.rstCode}`;\n        }\n        // This is a no-op if trailers were received at all.\n        // This is OK, because status codes emitted here correspond to more\n        // catastrophic issues that prevent us from receiving trailers in the\n        // first place.\n        this.endCall({\n          code,\n          details,\n          metadata: new Metadata(),\n          rstCode: http2Stream.rstCode,\n        });\n      });\n    });\n    http2Stream.on('error', (err: SystemError) => {\n      /* We need an error handler here to stop \"Uncaught Error\" exceptions\n       * from bubbling up. However, errors here should all correspond to\n       * \"close\" events, where we will handle the error more granularly */\n      /* Specifically looking for stream errors that were *not* constructed\n       * from a RST_STREAM response here:\n       * https://github.com/nodejs/node/blob/8b8620d580314050175983402dfddf2674e8e22a/lib/internal/http2/core.js#L2267\n       */\n      if (err.code !== 'ERR_HTTP2_STREAM_ERROR') {\n        this.trace(\n          'Node error event: message=' +\n            err.message +\n            ' code=' +\n            err.code +\n            ' errno=' +\n            getSystemErrorName(err.errno) +\n            ' syscall=' +\n            err.syscall\n        );\n        this.internalError = err;\n      }\n      this.callEventTracker.onStreamEnd(false);\n    });\n  }\n  getDeadlineInfo(): string[] {\n    return [`remote_addr=${this.getPeer()}`];\n  }\n\n  public onDisconnect() {\n    this.connectionDropped = true;\n    /* Give the call an event loop cycle to finish naturally before reporting\n     * the disconnection as an error. */\n    setImmediate(() => {\n      this.endCall({\n        code: Status.UNAVAILABLE,\n        details: 'Connection dropped',\n        metadata: new Metadata(),\n      });\n    });\n  }\n\n  private outputStatus() {\n    /* Precondition: this.finalStatus !== null */\n    if (!this.statusOutput) {\n      this.statusOutput = true;\n      this.trace(\n        'ended with status: code=' +\n          this.finalStatus!.code +\n          ' details=\"' +\n          this.finalStatus!.details +\n          '\"'\n      );\n      this.callEventTracker.onCallEnd(this.finalStatus!);\n      /* We delay the actual action of bubbling up the status to insulate the\n       * cleanup code in this class from any errors that may be thrown in the\n       * upper layers as a result of bubbling up the status. In particular,\n       * if the status is not OK, the \"error\" event may be emitted\n       * synchronously at the top level, which will result in a thrown error if\n       * the user does not handle that event. */\n      process.nextTick(() => {\n        this.listener.onReceiveStatus(this.finalStatus!);\n      });\n      /* Leave the http2 stream in flowing state to drain incoming messages, to\n       * ensure that the stream closure completes. The call stream already does\n       * not push more messages after the status is output, so the messages go\n       * nowhere either way. */\n      this.http2Stream.resume();\n    }\n  }\n\n  private trace(text: string): void {\n    logging.trace(\n      LogVerbosity.DEBUG,\n      TRACER_NAME,\n      '[' + this.callId + '] ' + text\n    );\n  }\n\n  /**\n   * On first call, emits a 'status' event with the given StatusObject.\n   * Subsequent calls are no-ops.\n   * @param status The status of the call.\n   */\n  private endCall(status: StatusObjectWithRstCode): void {\n    /* If the status is OK and a new status comes in (e.g. from a\n     * deserialization failure), that new status takes priority */\n    if (this.finalStatus === null || this.finalStatus.code === Status.OK) {\n      this.finalStatus = status;\n      this.maybeOutputStatus();\n    }\n    this.destroyHttp2Stream();\n  }\n\n  private maybeOutputStatus() {\n    if (this.finalStatus !== null) {\n      /* The combination check of readsClosed and that the two message buffer\n       * arrays are empty checks that there all incoming data has been fully\n       * processed */\n      if (\n        this.finalStatus.code !== Status.OK ||\n        (this.readsClosed &&\n          this.unpushedReadMessages.length === 0 &&\n          !this.isReadFilterPending &&\n          !this.isPushPending)\n      ) {\n        this.outputStatus();\n      }\n    }\n  }\n\n  private push(message: Buffer): void {\n    this.trace(\n      'pushing to reader message of length ' +\n        (message instanceof Buffer ? message.length : null)\n    );\n    this.canPush = false;\n    this.isPushPending = true;\n    process.nextTick(() => {\n      this.isPushPending = false;\n      /* If we have already output the status any later messages should be\n       * ignored, and can cause out-of-order operation errors higher up in the\n       * stack. Checking as late as possible here to avoid any race conditions.\n       */\n      if (this.statusOutput) {\n        return;\n      }\n      this.listener.onReceiveMessage(message);\n      this.maybeOutputStatus();\n    });\n  }\n\n  private tryPush(messageBytes: Buffer): void {\n    if (this.canPush) {\n      this.http2Stream!.pause();\n      this.push(messageBytes);\n    } else {\n      this.trace(\n        'unpushedReadMessages.push message of length ' + messageBytes.length\n      );\n      this.unpushedReadMessages.push(messageBytes);\n    }\n  }\n\n  private handleTrailers(headers: http2.IncomingHttpHeaders) {\n    this.serverEndedCall = true;\n    this.callEventTracker.onStreamEnd(true);\n    let headersString = '';\n    for (const header of Object.keys(headers)) {\n      headersString += '\\t\\t' + header + ': ' + headers[header] + '\\n';\n    }\n    this.trace('Received server trailers:\\n' + headersString);\n    let metadata: Metadata;\n    try {\n      metadata = Metadata.fromHttp2Headers(headers);\n    } catch (e) {\n      metadata = new Metadata();\n    }\n    const metadataMap = metadata.getMap();\n    let status: StatusObject;\n    if (typeof metadataMap['grpc-status'] === 'string') {\n      const receivedStatus: Status = Number(metadataMap['grpc-status']);\n      this.trace('received status code ' + receivedStatus + ' from server');\n      metadata.remove('grpc-status');\n      let details = '';\n      if (typeof metadataMap['grpc-message'] === 'string') {\n        try {\n          details = decodeURI(metadataMap['grpc-message']);\n        } catch (e) {\n          details = metadataMap['grpc-message'];\n        }\n        metadata.remove('grpc-message');\n        this.trace(\n          'received status details string \"' + details + '\" from server'\n        );\n      }\n      status = {\n        code: receivedStatus,\n        details: details,\n        metadata: metadata\n      };\n    } else if (this.httpStatusCode) {\n      status = mapHttpStatusCode(this.httpStatusCode);\n      status.metadata = metadata;\n    } else {\n      status = {\n        code: Status.UNKNOWN,\n        details: 'No status information received',\n        metadata: metadata\n      };\n    }\n    // This is a no-op if the call was already ended when handling headers.\n    this.endCall(status);\n  }\n\n  private destroyHttp2Stream() {\n    // The http2 stream could already have been destroyed if cancelWithStatus\n    // is called in response to an internal http2 error.\n    if (this.http2Stream.destroyed) {\n      return;\n    }\n    /* If the server ended the call, sending an RST_STREAM is redundant, so we\n     * just half close on the client side instead to finish closing the stream.\n     */\n    if (this.serverEndedCall) {\n      this.http2Stream.end();\n    } else {\n      /* If the call has ended with an OK status, communicate that when closing\n       * the stream, partly to avoid a situation in which we detect an error\n       * RST_STREAM as a result after we have the status */\n      let code: number;\n      if (this.finalStatus?.code === Status.OK) {\n        code = http2.constants.NGHTTP2_NO_ERROR;\n      } else {\n        code = http2.constants.NGHTTP2_CANCEL;\n      }\n      this.trace('close http2 stream with code ' + code);\n      this.http2Stream.close(code);\n    }\n  }\n\n  cancelWithStatus(status: Status, details: string): void {\n    this.trace(\n      'cancelWithStatus code: ' + status + ' details: \"' + details + '\"'\n    );\n    this.endCall({ code: status, details, metadata: new Metadata() });\n  }\n\n  getStatus(): StatusObject | null {\n    return this.finalStatus;\n  }\n\n  getPeer(): string {\n    return this.transport.getPeerName();\n  }\n\n  getCallNumber(): number {\n    return this.callId;\n  }\n\n  getAuthContext(): AuthContext {\n    return this.transport.getAuthContext();\n  }\n\n  startRead() {\n    /* If the stream has ended with an error, we should not emit any more\n     * messages and we should communicate that the stream has ended */\n    if (this.finalStatus !== null && this.finalStatus.code !== Status.OK) {\n      this.readsClosed = true;\n      this.maybeOutputStatus();\n      return;\n    }\n    this.canPush = true;\n    if (this.unpushedReadMessages.length > 0) {\n      const nextMessage: Buffer = this.unpushedReadMessages.shift()!;\n      this.push(nextMessage);\n      return;\n    }\n    /* Only resume reading from the http2Stream if we don't have any pending\n     * messages to emit */\n    this.http2Stream.resume();\n  }\n\n  sendMessageWithContext(context: MessageContext, message: Buffer) {\n    this.trace('write() called with message of length ' + message.length);\n    const cb: WriteCallback = (error?: Error | null) => {\n      /* nextTick here ensures that no stream action can be taken in the call\n       * stack of the write callback, in order to hopefully work around\n       * https://github.com/nodejs/node/issues/49147 */\n      process.nextTick(() => {\n        let code: Status = Status.UNAVAILABLE;\n        if (\n          (error as NodeJS.ErrnoException)?.code ===\n          'ERR_STREAM_WRITE_AFTER_END'\n        ) {\n          code = Status.INTERNAL;\n        }\n        if (error) {\n          this.cancelWithStatus(code, `Write error: ${error.message}`);\n        }\n        context.callback?.();\n      });\n    };\n    this.trace('sending data chunk of length ' + message.length);\n    this.callEventTracker.addMessageSent();\n    try {\n      this.http2Stream!.write(message, cb);\n    } catch (error) {\n      this.endCall({\n        code: Status.UNAVAILABLE,\n        details: `Write failed with error ${(error as Error).message}`,\n        metadata: new Metadata(),\n      });\n    }\n  }\n\n  halfClose() {\n    this.trace('end() called');\n    this.trace('calling end() on HTTP/2 stream');\n    this.http2Stream.end();\n  }\n}\n","/*\n * Copyright 2023 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport * as http2 from 'http2';\nimport {\n  CipherNameAndProtocol,\n  TLSSocket,\n} from 'tls';\nimport { PartialStatusObject } from './call-interface';\nimport { SecureConnector, SecureConnectResult } from './channel-credentials';\nimport { ChannelOptions } from './channel-options';\nimport {\n  ChannelzCallTracker,\n  ChannelzCallTrackerStub,\n  registerChannelzSocket,\n  SocketInfo,\n  SocketRef,\n  TlsInfo,\n  unregisterChannelzRef,\n} from './channelz';\nimport { LogVerbosity } from './constants';\nimport { getProxiedConnection } from './http_proxy';\nimport * as logging from './logging';\nimport { getDefaultAuthority } from './resolver';\nimport {\n  stringToSubchannelAddress,\n  SubchannelAddress,\n  subchannelAddressToString,\n} from './subchannel-address';\nimport { GrpcUri, parseUri, uriToString } from './uri-parser';\nimport * as net from 'net';\nimport {\n  Http2SubchannelCall,\n  SubchannelCall,\n  SubchannelCallInterceptingListener,\n} from './subchannel-call';\nimport { Metadata } from './metadata';\nimport { getNextCallNumber } from './call-number';\nimport { Socket } from 'net';\nimport { AuthContext } from './auth-context';\n\nconst TRACER_NAME = 'transport';\nconst FLOW_CONTROL_TRACER_NAME = 'transport_flowctrl';\n\nconst clientVersion = require('../../package.json').version;\n\nconst {\n  HTTP2_HEADER_AUTHORITY,\n  HTTP2_HEADER_CONTENT_TYPE,\n  HTTP2_HEADER_METHOD,\n  HTTP2_HEADER_PATH,\n  HTTP2_HEADER_TE,\n  HTTP2_HEADER_USER_AGENT,\n} = http2.constants;\n\nconst KEEPALIVE_TIMEOUT_MS = 20000;\n\nexport interface CallEventTracker {\n  addMessageSent(): void;\n  addMessageReceived(): void;\n  onCallEnd(status: PartialStatusObject): void;\n  onStreamEnd(success: boolean): void;\n}\n\nexport interface TransportDisconnectListener {\n  (tooManyPings: boolean): void;\n}\n\nexport interface Transport {\n  getChannelzRef(): SocketRef;\n  getPeerName(): string;\n  getOptions(): ChannelOptions;\n  getAuthContext(): AuthContext;\n  createCall(\n    metadata: Metadata,\n    host: string,\n    method: string,\n    listener: SubchannelCallInterceptingListener,\n    subchannelCallStatsTracker: Partial<CallEventTracker>\n  ): SubchannelCall;\n  addDisconnectListener(listener: TransportDisconnectListener): void;\n  shutdown(): void;\n}\n\nconst tooManyPingsData: Buffer = Buffer.from('too_many_pings', 'ascii');\n\nclass Http2Transport implements Transport {\n  /**\n   * The amount of time in between sending pings\n   */\n  private readonly keepaliveTimeMs: number;\n  /**\n   * The amount of time to wait for an acknowledgement after sending a ping\n   */\n  private readonly keepaliveTimeoutMs: number;\n  /**\n   * Indicates whether keepalive pings should be sent without any active calls\n   */\n  private readonly keepaliveWithoutCalls: boolean;\n  /**\n   * Timer reference indicating when to send the next ping or when the most recent ping will be considered lost.\n   */\n  private keepaliveTimer: NodeJS.Timeout | null = null;\n  /**\n   * Indicates that the keepalive timer ran out while there were no active\n   * calls, and a ping should be sent the next time a call starts.\n   */\n  private pendingSendKeepalivePing = false;\n\n  private userAgent: string;\n\n  private activeCalls: Set<Http2SubchannelCall> = new Set();\n\n  private subchannelAddressString: string;\n\n  private disconnectListeners: TransportDisconnectListener[] = [];\n\n  private disconnectHandled = false;\n\n  private authContext: AuthContext;\n\n  // Channelz info\n  private channelzRef: SocketRef;\n  private readonly channelzEnabled: boolean = true;\n  private streamTracker: ChannelzCallTracker | ChannelzCallTrackerStub;\n  private keepalivesSent = 0;\n  private messagesSent = 0;\n  private messagesReceived = 0;\n  private lastMessageSentTimestamp: Date | null = null;\n  private lastMessageReceivedTimestamp: Date | null = null;\n\n  constructor(\n    private session: http2.ClientHttp2Session,\n    subchannelAddress: SubchannelAddress,\n    private options: ChannelOptions,\n    /**\n     * Name of the remote server, if it is not the same as the subchannel\n     * address, i.e. if connecting through an HTTP CONNECT proxy.\n     */\n    private remoteName: string | null\n  ) {\n    /* Populate subchannelAddressString and channelzRef before doing anything\n     * else, because they are used in the trace methods. */\n    this.subchannelAddressString = subchannelAddressToString(subchannelAddress);\n\n    if (options['grpc.enable_channelz'] === 0) {\n      this.channelzEnabled = false;\n      this.streamTracker = new ChannelzCallTrackerStub();\n    } else {\n      this.streamTracker = new ChannelzCallTracker();\n    }\n\n    this.channelzRef = registerChannelzSocket(\n      this.subchannelAddressString,\n      () => this.getChannelzInfo(),\n      this.channelzEnabled\n    );\n\n    // Build user-agent string.\n    this.userAgent = [\n      options['grpc.primary_user_agent'],\n      `grpc-node-js/${clientVersion}`,\n      options['grpc.secondary_user_agent'],\n    ]\n      .filter(e => e)\n      .join(' '); // remove falsey values first\n\n    if ('grpc.keepalive_time_ms' in options) {\n      this.keepaliveTimeMs = options['grpc.keepalive_time_ms']!;\n    } else {\n      this.keepaliveTimeMs = -1;\n    }\n    if ('grpc.keepalive_timeout_ms' in options) {\n      this.keepaliveTimeoutMs = options['grpc.keepalive_timeout_ms']!;\n    } else {\n      this.keepaliveTimeoutMs = KEEPALIVE_TIMEOUT_MS;\n    }\n    if ('grpc.keepalive_permit_without_calls' in options) {\n      this.keepaliveWithoutCalls =\n        options['grpc.keepalive_permit_without_calls'] === 1;\n    } else {\n      this.keepaliveWithoutCalls = false;\n    }\n\n    session.once('close', () => {\n      this.trace('session closed');\n      this.handleDisconnect();\n    });\n\n    session.once(\n      'goaway',\n      (errorCode: number, lastStreamID: number, opaqueData?: Buffer) => {\n        let tooManyPings = false;\n        /* See the last paragraph of\n         * https://github.com/grpc/proposal/blob/master/A8-client-side-keepalive.md#basic-keepalive */\n        if (\n          errorCode === http2.constants.NGHTTP2_ENHANCE_YOUR_CALM &&\n          opaqueData &&\n          opaqueData.equals(tooManyPingsData)\n        ) {\n          tooManyPings = true;\n        }\n        this.trace(\n          'connection closed by GOAWAY with code ' +\n            errorCode +\n            ' and data ' +\n            opaqueData?.toString()\n        );\n        this.reportDisconnectToOwner(tooManyPings);\n      }\n    );\n\n    session.once('error', error => {\n      this.trace('connection closed with error ' + (error as Error).message);\n      this.handleDisconnect();\n    });\n\n    session.socket.once('close', (hadError) => {\n      this.trace('connection closed. hadError=' + hadError);\n      this.handleDisconnect();\n    });\n\n    if (logging.isTracerEnabled(TRACER_NAME)) {\n      session.on('remoteSettings', (settings: http2.Settings) => {\n        this.trace(\n          'new settings received' +\n            (this.session !== session ? ' on the old connection' : '') +\n            ': ' +\n            JSON.stringify(settings)\n        );\n      });\n      session.on('localSettings', (settings: http2.Settings) => {\n        this.trace(\n          'local settings acknowledged by remote' +\n            (this.session !== session ? ' on the old connection' : '') +\n            ': ' +\n            JSON.stringify(settings)\n        );\n      });\n    }\n\n    /* Start the keepalive timer last, because this can trigger trace logs,\n     * which should only happen after everything else is set up. */\n    if (this.keepaliveWithoutCalls) {\n      this.maybeStartKeepalivePingTimer();\n    }\n\n    if (session.socket instanceof TLSSocket) {\n      this.authContext = {\n        transportSecurityType: 'ssl',\n        sslPeerCertificate: session.socket.getPeerCertificate()\n      };\n    } else {\n      this.authContext = {};\n    }\n  }\n\n  private getChannelzInfo(): SocketInfo {\n    const sessionSocket = this.session.socket;\n    const remoteAddress = sessionSocket.remoteAddress\n      ? stringToSubchannelAddress(\n          sessionSocket.remoteAddress,\n          sessionSocket.remotePort\n        )\n      : null;\n    const localAddress = sessionSocket.localAddress\n      ? stringToSubchannelAddress(\n          sessionSocket.localAddress,\n          sessionSocket.localPort\n        )\n      : null;\n    let tlsInfo: TlsInfo | null;\n    if (this.session.encrypted) {\n      const tlsSocket: TLSSocket = sessionSocket as TLSSocket;\n      const cipherInfo: CipherNameAndProtocol & { standardName?: string } =\n        tlsSocket.getCipher();\n      const certificate = tlsSocket.getCertificate();\n      const peerCertificate = tlsSocket.getPeerCertificate();\n      tlsInfo = {\n        cipherSuiteStandardName: cipherInfo.standardName ?? null,\n        cipherSuiteOtherName: cipherInfo.standardName ? null : cipherInfo.name,\n        localCertificate:\n          certificate && 'raw' in certificate ? certificate.raw : null,\n        remoteCertificate:\n          peerCertificate && 'raw' in peerCertificate\n            ? peerCertificate.raw\n            : null,\n      };\n    } else {\n      tlsInfo = null;\n    }\n    const socketInfo: SocketInfo = {\n      remoteAddress: remoteAddress,\n      localAddress: localAddress,\n      security: tlsInfo,\n      remoteName: this.remoteName,\n      streamsStarted: this.streamTracker.callsStarted,\n      streamsSucceeded: this.streamTracker.callsSucceeded,\n      streamsFailed: this.streamTracker.callsFailed,\n      messagesSent: this.messagesSent,\n      messagesReceived: this.messagesReceived,\n      keepAlivesSent: this.keepalivesSent,\n      lastLocalStreamCreatedTimestamp:\n        this.streamTracker.lastCallStartedTimestamp,\n      lastRemoteStreamCreatedTimestamp: null,\n      lastMessageSentTimestamp: this.lastMessageSentTimestamp,\n      lastMessageReceivedTimestamp: this.lastMessageReceivedTimestamp,\n      localFlowControlWindow: this.session.state.localWindowSize ?? null,\n      remoteFlowControlWindow: this.session.state.remoteWindowSize ?? null,\n    };\n    return socketInfo;\n  }\n\n  private trace(text: string): void {\n    logging.trace(\n      LogVerbosity.DEBUG,\n      TRACER_NAME,\n      '(' +\n        this.channelzRef.id +\n        ') ' +\n        this.subchannelAddressString +\n        ' ' +\n        text\n    );\n  }\n\n  private keepaliveTrace(text: string): void {\n    logging.trace(\n      LogVerbosity.DEBUG,\n      'keepalive',\n      '(' +\n        this.channelzRef.id +\n        ') ' +\n        this.subchannelAddressString +\n        ' ' +\n        text\n    );\n  }\n\n  private flowControlTrace(text: string): void {\n    logging.trace(\n      LogVerbosity.DEBUG,\n      FLOW_CONTROL_TRACER_NAME,\n      '(' +\n        this.channelzRef.id +\n        ') ' +\n        this.subchannelAddressString +\n        ' ' +\n        text\n    );\n  }\n\n  private internalsTrace(text: string): void {\n    logging.trace(\n      LogVerbosity.DEBUG,\n      'transport_internals',\n      '(' +\n        this.channelzRef.id +\n        ') ' +\n        this.subchannelAddressString +\n        ' ' +\n        text\n    );\n  }\n\n  /**\n   * Indicate to the owner of this object that this transport should no longer\n   * be used. That happens if the connection drops, or if the server sends a\n   * GOAWAY.\n   * @param tooManyPings If true, this was triggered by a GOAWAY with data\n   * indicating that the session was closed becaues the client sent too many\n   * pings.\n   * @returns\n   */\n  private reportDisconnectToOwner(tooManyPings: boolean) {\n    if (this.disconnectHandled) {\n      return;\n    }\n    this.disconnectHandled = true;\n    this.disconnectListeners.forEach(listener => listener(tooManyPings));\n  }\n\n  /**\n   * Handle connection drops, but not GOAWAYs.\n   */\n  private handleDisconnect() {\n    this.clearKeepaliveTimeout();\n    this.reportDisconnectToOwner(false);\n    for (const call of this.activeCalls) {\n      call.onDisconnect();\n    }\n    // Wait an event loop cycle before destroying the connection\n    setImmediate(() => {\n      this.session.destroy();\n    });\n  }\n\n  addDisconnectListener(listener: TransportDisconnectListener): void {\n    this.disconnectListeners.push(listener);\n  }\n\n  private canSendPing() {\n    return (\n      !this.session.destroyed &&\n      this.keepaliveTimeMs > 0 &&\n      (this.keepaliveWithoutCalls || this.activeCalls.size > 0)\n    );\n  }\n\n  private maybeSendPing() {\n    if (!this.canSendPing()) {\n      this.pendingSendKeepalivePing = true;\n      return;\n    }\n    if (this.keepaliveTimer) {\n      console.error('keepaliveTimeout is not null');\n      return;\n    }\n    if (this.channelzEnabled) {\n      this.keepalivesSent += 1;\n    }\n    this.keepaliveTrace(\n      'Sending ping with timeout ' + this.keepaliveTimeoutMs + 'ms'\n    );\n    this.keepaliveTimer = setTimeout(() => {\n      this.keepaliveTimer = null;\n      this.keepaliveTrace('Ping timeout passed without response');\n      this.handleDisconnect();\n    }, this.keepaliveTimeoutMs);\n    this.keepaliveTimer.unref?.();\n    let pingSendError = '';\n    try {\n      const pingSentSuccessfully = this.session.ping(\n        (err: Error | null, duration: number, payload: Buffer) => {\n          this.clearKeepaliveTimeout();\n          if (err) {\n            this.keepaliveTrace('Ping failed with error ' + err.message);\n            this.handleDisconnect();\n          } else {\n            this.keepaliveTrace('Received ping response');\n            this.maybeStartKeepalivePingTimer();\n          }\n        }\n      );\n      if (!pingSentSuccessfully) {\n        pingSendError = 'Ping returned false';\n      }\n    } catch (e) {\n      // grpc/grpc-node#2139\n      pingSendError = (e instanceof Error ? e.message : '') || 'Unknown error';\n    }\n    if (pingSendError) {\n      this.keepaliveTrace('Ping send failed: ' + pingSendError);\n      this.handleDisconnect();\n    }\n  }\n\n  /**\n   * Starts the keepalive ping timer if appropriate. If the timer already ran\n   * out while there were no active requests, instead send a ping immediately.\n   * If the ping timer is already running or a ping is currently in flight,\n   * instead do nothing and wait for them to resolve.\n   */\n  private maybeStartKeepalivePingTimer() {\n    if (!this.canSendPing()) {\n      return;\n    }\n    if (this.pendingSendKeepalivePing) {\n      this.pendingSendKeepalivePing = false;\n      this.maybeSendPing();\n    } else if (!this.keepaliveTimer) {\n      this.keepaliveTrace(\n        'Starting keepalive timer for ' + this.keepaliveTimeMs + 'ms'\n      );\n      this.keepaliveTimer = setTimeout(() => {\n        this.keepaliveTimer = null;\n        this.maybeSendPing();\n      }, this.keepaliveTimeMs);\n      this.keepaliveTimer.unref?.();\n    }\n    /* Otherwise, there is already either a keepalive timer or a ping pending,\n     * wait for those to resolve. */\n  }\n\n  /**\n   * Clears whichever keepalive timeout is currently active, if any.\n   */\n  private clearKeepaliveTimeout() {\n    if (this.keepaliveTimer) {\n      clearTimeout(this.keepaliveTimer);\n      this.keepaliveTimer = null;\n    }\n  }\n\n  private removeActiveCall(call: Http2SubchannelCall) {\n    this.activeCalls.delete(call);\n    if (this.activeCalls.size === 0) {\n      this.session.unref();\n    }\n  }\n\n  private addActiveCall(call: Http2SubchannelCall) {\n    this.activeCalls.add(call);\n    if (this.activeCalls.size === 1) {\n      this.session.ref();\n      if (!this.keepaliveWithoutCalls) {\n        this.maybeStartKeepalivePingTimer();\n      }\n    }\n  }\n\n  createCall(\n    metadata: Metadata,\n    host: string,\n    method: string,\n    listener: SubchannelCallInterceptingListener,\n    subchannelCallStatsTracker: Partial<CallEventTracker>\n  ): Http2SubchannelCall {\n    const headers = metadata.toHttp2Headers();\n    headers[HTTP2_HEADER_AUTHORITY] = host;\n    headers[HTTP2_HEADER_USER_AGENT] = this.userAgent;\n    headers[HTTP2_HEADER_CONTENT_TYPE] = 'application/grpc';\n    headers[HTTP2_HEADER_METHOD] = 'POST';\n    headers[HTTP2_HEADER_PATH] = method;\n    headers[HTTP2_HEADER_TE] = 'trailers';\n    let http2Stream: http2.ClientHttp2Stream;\n    /* In theory, if an error is thrown by session.request because session has\n     * become unusable (e.g. because it has received a goaway), this subchannel\n     * should soon see the corresponding close or goaway event anyway and leave\n     * READY. But we have seen reports that this does not happen\n     * (https://github.com/googleapis/nodejs-firestore/issues/1023#issuecomment-653204096)\n     * so for defense in depth, we just discard the session when we see an\n     * error here.\n     */\n    try {\n      http2Stream = this.session.request(headers);\n    } catch (e) {\n      this.handleDisconnect();\n      throw e;\n    }\n    this.flowControlTrace(\n      'local window size: ' +\n        this.session.state.localWindowSize +\n        ' remote window size: ' +\n        this.session.state.remoteWindowSize\n    );\n    this.internalsTrace(\n      'session.closed=' +\n        this.session.closed +\n        ' session.destroyed=' +\n        this.session.destroyed +\n        ' session.socket.destroyed=' +\n        this.session.socket.destroyed\n    );\n    let eventTracker: CallEventTracker;\n    // eslint-disable-next-line prefer-const\n    let call: Http2SubchannelCall;\n    if (this.channelzEnabled) {\n      this.streamTracker.addCallStarted();\n      eventTracker = {\n        addMessageSent: () => {\n          this.messagesSent += 1;\n          this.lastMessageSentTimestamp = new Date();\n          subchannelCallStatsTracker.addMessageSent?.();\n        },\n        addMessageReceived: () => {\n          this.messagesReceived += 1;\n          this.lastMessageReceivedTimestamp = new Date();\n          subchannelCallStatsTracker.addMessageReceived?.();\n        },\n        onCallEnd: status => {\n          subchannelCallStatsTracker.onCallEnd?.(status);\n          this.removeActiveCall(call);\n        },\n        onStreamEnd: success => {\n          if (success) {\n            this.streamTracker.addCallSucceeded();\n          } else {\n            this.streamTracker.addCallFailed();\n          }\n          subchannelCallStatsTracker.onStreamEnd?.(success);\n        },\n      };\n    } else {\n      eventTracker = {\n        addMessageSent: () => {\n          subchannelCallStatsTracker.addMessageSent?.();\n        },\n        addMessageReceived: () => {\n          subchannelCallStatsTracker.addMessageReceived?.();\n        },\n        onCallEnd: status => {\n          subchannelCallStatsTracker.onCallEnd?.(status);\n          this.removeActiveCall(call);\n        },\n        onStreamEnd: success => {\n          subchannelCallStatsTracker.onStreamEnd?.(success);\n        },\n      };\n    }\n    call = new Http2SubchannelCall(\n      http2Stream,\n      eventTracker,\n      listener,\n      this,\n      getNextCallNumber()\n    );\n    this.addActiveCall(call);\n    return call;\n  }\n\n  getChannelzRef(): SocketRef {\n    return this.channelzRef;\n  }\n\n  getPeerName() {\n    return this.subchannelAddressString;\n  }\n\n  getOptions() {\n    return this.options;\n  }\n\n  getAuthContext(): AuthContext {\n    return this.authContext;\n  }\n\n  shutdown() {\n    this.session.close();\n    unregisterChannelzRef(this.channelzRef);\n  }\n}\n\nexport interface SubchannelConnector {\n  connect(\n    address: SubchannelAddress,\n    secureConnector: SecureConnector,\n    options: ChannelOptions\n  ): Promise<Transport>;\n  shutdown(): void;\n}\n\nexport class Http2SubchannelConnector implements SubchannelConnector {\n  private session: http2.ClientHttp2Session | null = null;\n  private isShutdown = false;\n  constructor(private channelTarget: GrpcUri) {}\n\n  private trace(text: string) {\n    logging.trace(\n      LogVerbosity.DEBUG,\n      TRACER_NAME,\n      uriToString(this.channelTarget) + ' ' + text\n    );\n  }\n\n  private createSession(\n    secureConnectResult: SecureConnectResult,\n    address: SubchannelAddress,\n    options: ChannelOptions\n  ): Promise<Http2Transport> {\n    if (this.isShutdown) {\n      return Promise.reject();\n    }\n\n    if (secureConnectResult.socket.closed) {\n      return Promise.reject('Connection closed before starting HTTP/2 handshake');\n    }\n\n    return new Promise<Http2Transport>((resolve, reject) => {\n      let remoteName: string | null = null;\n      let realTarget: GrpcUri = this.channelTarget;\n      if ('grpc.http_connect_target' in options) {\n        const parsedTarget = parseUri(options['grpc.http_connect_target']!);\n        if (parsedTarget) {\n          realTarget = parsedTarget;\n          remoteName = uriToString(parsedTarget);\n        }\n      }\n      const scheme = secureConnectResult.secure ? 'https' : 'http';\n      const targetPath = getDefaultAuthority(realTarget);\n      const closeHandler = () => {\n        this.session?.destroy();\n        this.session = null;\n        // Leave time for error event to happen before rejecting\n        setImmediate(() => {\n          if (!reportedError) {\n            reportedError = true;\n            reject(`${errorMessage.trim()} (${new Date().toISOString()})`);\n          }\n        });\n      };\n      const errorHandler = (error: Error) => {\n        this.session?.destroy();\n        errorMessage = (error as Error).message;\n        this.trace('connection failed with error ' + errorMessage);\n        if (!reportedError) {\n          reportedError = true;\n          reject(`${errorMessage} (${new Date().toISOString()})`);\n        }\n      };\n      const sessionOptions: http2.ClientSessionOptions = {\n        createConnection: (authority, option) => {\n          return secureConnectResult.socket;\n        },\n        settings: {\n          initialWindowSize:\n            options['grpc-node.flow_control_window'] ??\n            http2.getDefaultSettings?.()?.initialWindowSize ?? 65535,\n        },\n        maxSendHeaderBlockLength: Number.MAX_SAFE_INTEGER,\n        /* By default, set a very large max session memory limit, to effectively\n         * disable enforcement of the limit. Some testing indicates that Node's\n         * behavior degrades badly when this limit is reached, so we solve that\n         * by disabling the check entirely. */\n        maxSessionMemory: options['grpc-node.max_session_memory'] ?? Number.MAX_SAFE_INTEGER\n      };\n      const session = http2.connect(`${scheme}://${targetPath}`, sessionOptions);\n      // Prepare window size configuration for remoteSettings handler\n      const defaultWin = http2.getDefaultSettings?.()?.initialWindowSize ?? 65535; // 65 535 B\n      const connWin = options[\n        'grpc-node.flow_control_window'\n      ] as number | undefined;\n\n      this.session = session;\n      let errorMessage = 'Failed to connect';\n      let reportedError = false;\n      session.unref();\n      session.once('remoteSettings', () => {\n        // Send WINDOW_UPDATE now to avoid 65 KB start-window stall.\n        if (connWin && connWin > defaultWin) {\n          try {\n            // Node ≥ 14.18\n            (session as any).setLocalWindowSize(connWin);\n          } catch {\n            // Older Node: bump by the delta\n            const delta = connWin - (session.state.localWindowSize ?? defaultWin);\n            if (delta > 0) (session as any).incrementWindowSize(delta);\n          }\n        }\n\n        session.removeAllListeners();\n        secureConnectResult.socket.removeListener('close', closeHandler);\n        secureConnectResult.socket.removeListener('error', errorHandler);\n        resolve(new Http2Transport(session, address, options, remoteName));\n        this.session = null;\n      });\n      session.once('close', closeHandler);\n      session.once('error', errorHandler);\n      secureConnectResult.socket.once('close', closeHandler);\n      secureConnectResult.socket.once('error', errorHandler);\n    });\n  }\n\n  private tcpConnect(address: SubchannelAddress, options: ChannelOptions): Promise<Socket> {\n    return getProxiedConnection(address, options).then(proxiedSocket => {\n      if (proxiedSocket) {\n        return proxiedSocket;\n      } else {\n        return new Promise<Socket>((resolve, reject) => {\n          const closeCallback = () => {\n            reject(new Error('Socket closed'));\n          };\n          const errorCallback = (error: Error) => {\n            reject(error);\n          }\n          const socket = net.connect(address, () => {\n            socket.removeListener('close', closeCallback);\n            socket.removeListener('error', errorCallback);\n            resolve(socket);\n          });\n          socket.once('close', closeCallback);\n          socket.once('error', errorCallback);\n        });\n      }\n    });\n  }\n\n  async connect(\n    address: SubchannelAddress,\n    secureConnector: SecureConnector,\n    options: ChannelOptions\n  ): Promise<Http2Transport> {\n    if (this.isShutdown) {\n      return Promise.reject();\n    }\n    let tcpConnection: net.Socket | null = null;\n    let secureConnectResult: SecureConnectResult | null  = null;\n    const addressString = subchannelAddressToString(address);\n    try {\n      this.trace(addressString + ' Waiting for secureConnector to be ready');\n      await secureConnector.waitForReady();\n      this.trace(addressString + ' secureConnector is ready');\n      tcpConnection = await this.tcpConnect(address, options);\n      tcpConnection.setNoDelay();\n      this.trace(addressString + ' Established TCP connection');\n      secureConnectResult = await secureConnector.connect(tcpConnection);\n      this.trace(addressString + ' Established secure connection');\n      return this.createSession(secureConnectResult, address, options);\n    } catch (e) {\n      tcpConnection?.destroy();\n      secureConnectResult?.socket.destroy();\n      throw e;\n    }\n  }\n\n  shutdown(): void {\n    this.isShutdown = true;\n    this.session?.close();\n    this.session = null;\n  }\n}\n","/*\n * Copyright 2019 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport { ChannelOptions, channelOptionsEqual } from './channel-options';\nimport { Subchannel } from './subchannel';\nimport {\n  SubchannelAddress,\n  subchannelAddressEqual,\n} from './subchannel-address';\nimport { ChannelCredentials } from './channel-credentials';\nimport { GrpcUri, uriToString } from './uri-parser';\nimport { Http2SubchannelConnector } from './transport';\n\n// 10 seconds in milliseconds. This value is arbitrary.\n/**\n * The amount of time in between checks for dropping subchannels that have no\n * other references\n */\nconst REF_CHECK_INTERVAL = 10_000;\n\nexport class SubchannelPool {\n  private pool: {\n    [channelTarget: string]: Array<{\n      subchannelAddress: SubchannelAddress;\n      channelArguments: ChannelOptions;\n      channelCredentials: ChannelCredentials;\n      subchannel: Subchannel;\n    }>;\n  } = Object.create(null);\n\n  /**\n   * A timer of a task performing a periodic subchannel cleanup.\n   */\n  private cleanupTimer: NodeJS.Timeout | null = null;\n\n  /**\n   * A pool of subchannels use for making connections. Subchannels with the\n   * exact same parameters will be reused.\n   */\n  constructor() {}\n\n  /**\n   * Unrefs all unused subchannels and cancels the cleanup task if all\n   * subchannels have been unrefed.\n   */\n  unrefUnusedSubchannels(): void {\n    let allSubchannelsUnrefed = true;\n\n    /* These objects are created with Object.create(null), so they do not\n     * have a prototype, which means that for (... in ...) loops over them\n     * do not need to be filtered */\n    // eslint-disable-disable-next-line:forin\n    for (const channelTarget in this.pool) {\n      const subchannelObjArray = this.pool[channelTarget];\n\n      const refedSubchannels = subchannelObjArray.filter(\n        value => !value.subchannel.unrefIfOneRef()\n      );\n\n      if (refedSubchannels.length > 0) {\n        allSubchannelsUnrefed = false;\n      }\n\n      /* For each subchannel in the pool, try to unref it if it has\n       * exactly one ref (which is the ref from the pool itself). If that\n       * does happen, remove the subchannel from the pool */\n      this.pool[channelTarget] = refedSubchannels;\n    }\n    /* Currently we do not delete keys with empty values. If that results\n     * in significant memory usage we should change it. */\n\n    // Cancel the cleanup task if all subchannels have been unrefed.\n    if (allSubchannelsUnrefed && this.cleanupTimer !== null) {\n      clearInterval(this.cleanupTimer);\n      this.cleanupTimer = null;\n    }\n  }\n\n  /**\n   * Ensures that the cleanup task is spawned.\n   */\n  ensureCleanupTask(): void {\n    if (this.cleanupTimer === null) {\n      this.cleanupTimer = setInterval(() => {\n        this.unrefUnusedSubchannels();\n      }, REF_CHECK_INTERVAL);\n\n      // Unref because this timer should not keep the event loop running.\n      // Call unref only if it exists to address electron/electron#21162\n      this.cleanupTimer.unref?.();\n    }\n  }\n\n  /**\n   * Get a subchannel if one already exists with exactly matching parameters.\n   * Otherwise, create and save a subchannel with those parameters.\n   * @param channelTarget\n   * @param subchannelTarget\n   * @param channelArguments\n   * @param channelCredentials\n   */\n  getOrCreateSubchannel(\n    channelTargetUri: GrpcUri,\n    subchannelTarget: SubchannelAddress,\n    channelArguments: ChannelOptions,\n    channelCredentials: ChannelCredentials\n  ): Subchannel {\n    this.ensureCleanupTask();\n    const channelTarget = uriToString(channelTargetUri);\n    if (channelTarget in this.pool) {\n      const subchannelObjArray = this.pool[channelTarget];\n      for (const subchannelObj of subchannelObjArray) {\n        if (\n          subchannelAddressEqual(\n            subchannelTarget,\n            subchannelObj.subchannelAddress\n          ) &&\n          channelOptionsEqual(\n            channelArguments,\n            subchannelObj.channelArguments\n          ) &&\n          channelCredentials._equals(subchannelObj.channelCredentials)\n        ) {\n          return subchannelObj.subchannel;\n        }\n      }\n    }\n    // If we get here, no matching subchannel was found\n    const subchannel = new Subchannel(\n      channelTargetUri,\n      subchannelTarget,\n      channelArguments,\n      channelCredentials,\n      new Http2SubchannelConnector(channelTargetUri)\n    );\n    if (!(channelTarget in this.pool)) {\n      this.pool[channelTarget] = [];\n    }\n    this.pool[channelTarget].push({\n      subchannelAddress: subchannelTarget,\n      channelArguments,\n      channelCredentials,\n      subchannel,\n    });\n    subchannel.ref();\n    return subchannel;\n  }\n}\n\nconst globalSubchannelPool = new SubchannelPool();\n\n/**\n * Get either the global subchannel pool, or a new subchannel pool.\n * @param global\n */\nexport function getSubchannelPool(global: boolean): SubchannelPool {\n  if (global) {\n    return globalSubchannelPool;\n  } else {\n    return new SubchannelPool();\n  }\n}\n","/*\n * Copyright 2022 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport { CallCredentials } from './call-credentials';\nimport {\n  Call,\n  DeadlineInfoProvider,\n  InterceptingListener,\n  MessageContext,\n  StatusObject,\n} from './call-interface';\nimport { SubchannelCall } from './subchannel-call';\nimport { ConnectivityState } from './connectivity-state';\nimport { LogVerbosity, Status } from './constants';\nimport { Deadline, formatDateDifference, getDeadlineTimeoutString } from './deadline';\nimport { InternalChannel } from './internal-channel';\nimport { Metadata } from './metadata';\nimport { OnCallEnded, PickResultType } from './picker';\nimport { CallConfig } from './resolver';\nimport { splitHostPort } from './uri-parser';\nimport * as logging from './logging';\nimport { restrictControlPlaneStatusCode } from './control-plane-status';\nimport * as http2 from 'http2';\nimport { AuthContext } from './auth-context';\n\nconst TRACER_NAME = 'load_balancing_call';\n\nexport type RpcProgress = 'NOT_STARTED' | 'DROP' | 'REFUSED' | 'PROCESSED';\n\nexport interface StatusObjectWithProgress extends StatusObject {\n  progress: RpcProgress;\n}\n\nexport interface LoadBalancingCallInterceptingListener\n  extends InterceptingListener {\n  onReceiveStatus(status: StatusObjectWithProgress): void;\n}\n\nexport class LoadBalancingCall implements Call, DeadlineInfoProvider {\n  private child: SubchannelCall | null = null;\n  private readPending = false;\n  private pendingMessage: { context: MessageContext; message: Buffer } | null =\n    null;\n  private pendingHalfClose = false;\n  private ended = false;\n  private serviceUrl: string;\n  private metadata: Metadata | null = null;\n  private listener: InterceptingListener | null = null;\n  private onCallEnded: OnCallEnded | null = null;\n  private startTime: Date;\n  private childStartTime: Date | null = null;\n  constructor(\n    private readonly channel: InternalChannel,\n    private readonly callConfig: CallConfig,\n    private readonly methodName: string,\n    private readonly host: string,\n    private readonly credentials: CallCredentials,\n    private readonly deadline: Deadline,\n    private readonly callNumber: number\n  ) {\n    const splitPath: string[] = this.methodName.split('/');\n    let serviceName = '';\n    /* The standard path format is \"/{serviceName}/{methodName}\", so if we split\n     * by '/', the first item should be empty and the second should be the\n     * service name */\n    if (splitPath.length >= 2) {\n      serviceName = splitPath[1];\n    }\n    const hostname = splitHostPort(this.host)?.host ?? 'localhost';\n    /* Currently, call credentials are only allowed on HTTPS connections, so we\n     * can assume that the scheme is \"https\" */\n    this.serviceUrl = `https://${hostname}/${serviceName}`;\n    this.startTime = new Date();\n  }\n  getDeadlineInfo(): string[] {\n    const deadlineInfo: string[] = [];\n    if (this.childStartTime) {\n      if (this.childStartTime > this.startTime) {\n        if (this.metadata?.getOptions().waitForReady) {\n          deadlineInfo.push('wait_for_ready');\n        }\n        deadlineInfo.push(`LB pick: ${formatDateDifference(this.startTime, this.childStartTime)}`);\n      }\n      deadlineInfo.push(...this.child!.getDeadlineInfo());\n      return deadlineInfo;\n    } else {\n      if (this.metadata?.getOptions().waitForReady) {\n        deadlineInfo.push('wait_for_ready');\n      }\n      deadlineInfo.push('Waiting for LB pick');\n    }\n    return deadlineInfo;\n  }\n\n  private trace(text: string): void {\n    logging.trace(\n      LogVerbosity.DEBUG,\n      TRACER_NAME,\n      '[' + this.callNumber + '] ' + text\n    );\n  }\n\n  private outputStatus(status: StatusObject, progress: RpcProgress) {\n    if (!this.ended) {\n      this.ended = true;\n      this.trace(\n        'ended with status: code=' +\n          status.code +\n          ' details=\"' +\n          status.details +\n          '\" start time=' +\n          this.startTime.toISOString()\n      );\n      const finalStatus = { ...status, progress };\n      this.listener?.onReceiveStatus(finalStatus);\n      this.onCallEnded?.(finalStatus.code, finalStatus.details, finalStatus.metadata);\n    }\n  }\n\n  doPick() {\n    if (this.ended) {\n      return;\n    }\n    if (!this.metadata) {\n      throw new Error('doPick called before start');\n    }\n    this.trace('Pick called');\n    const finalMetadata = this.metadata.clone();\n    const pickResult = this.channel.doPick(\n      finalMetadata,\n      this.callConfig.pickInformation\n    );\n    const subchannelString = pickResult.subchannel\n      ? '(' +\n        pickResult.subchannel.getChannelzRef().id +\n        ') ' +\n        pickResult.subchannel.getAddress()\n      : '' + pickResult.subchannel;\n    this.trace(\n      'Pick result: ' +\n        PickResultType[pickResult.pickResultType] +\n        ' subchannel: ' +\n        subchannelString +\n        ' status: ' +\n        pickResult.status?.code +\n        ' ' +\n        pickResult.status?.details\n    );\n    switch (pickResult.pickResultType) {\n      case PickResultType.COMPLETE:\n        const combinedCallCredentials = this.credentials.compose(pickResult.subchannel!.getCallCredentials());\n        combinedCallCredentials\n          .generateMetadata({ method_name: this.methodName, service_url: this.serviceUrl })\n          .then(\n            credsMetadata => {\n              /* If this call was cancelled (e.g. by the deadline) before\n               * metadata generation finished, we shouldn't do anything with\n               * it. */\n              if (this.ended) {\n                this.trace(\n                  'Credentials metadata generation finished after call ended'\n                );\n                return;\n              }\n              finalMetadata.merge(credsMetadata);\n              if (finalMetadata.get('authorization').length > 1) {\n                this.outputStatus(\n                  {\n                    code: Status.INTERNAL,\n                    details:\n                      '\"authorization\" metadata cannot have multiple values',\n                    metadata: new Metadata(),\n                  },\n                  'PROCESSED'\n                );\n              }\n              if (\n                pickResult.subchannel!.getConnectivityState() !==\n                ConnectivityState.READY\n              ) {\n                this.trace(\n                  'Picked subchannel ' +\n                    subchannelString +\n                    ' has state ' +\n                    ConnectivityState[\n                      pickResult.subchannel!.getConnectivityState()\n                    ] +\n                    ' after getting credentials metadata. Retrying pick'\n                );\n                this.doPick();\n                return;\n              }\n\n              if (this.deadline !== Infinity) {\n                finalMetadata.set(\n                  'grpc-timeout',\n                  getDeadlineTimeoutString(this.deadline)\n                );\n              }\n              try {\n                this.child = pickResult\n                  .subchannel!.getRealSubchannel()\n                  .createCall(finalMetadata, this.host, this.methodName, {\n                    onReceiveMetadata: metadata => {\n                      this.trace('Received metadata');\n                      this.listener!.onReceiveMetadata(metadata);\n                    },\n                    onReceiveMessage: message => {\n                      this.trace('Received message');\n                      this.listener!.onReceiveMessage(message);\n                    },\n                    onReceiveStatus: status => {\n                      this.trace('Received status');\n                      if (\n                        status.rstCode ===\n                        http2.constants.NGHTTP2_REFUSED_STREAM\n                      ) {\n                        this.outputStatus(status, 'REFUSED');\n                      } else {\n                        this.outputStatus(status, 'PROCESSED');\n                      }\n                    },\n                  });\n                this.childStartTime = new Date();\n              } catch (error) {\n                this.trace(\n                  'Failed to start call on picked subchannel ' +\n                    subchannelString +\n                    ' with error ' +\n                    (error as Error).message\n                );\n                this.outputStatus(\n                  {\n                    code: Status.INTERNAL,\n                    details:\n                      'Failed to start HTTP/2 stream with error ' +\n                      (error as Error).message,\n                    metadata: new Metadata(),\n                  },\n                  'NOT_STARTED'\n                );\n                return;\n              }\n              pickResult.onCallStarted?.();\n              this.onCallEnded = pickResult.onCallEnded;\n              this.trace(\n                'Created child call [' + this.child.getCallNumber() + ']'\n              );\n              if (this.readPending) {\n                this.child.startRead();\n              }\n              if (this.pendingMessage) {\n                this.child.sendMessageWithContext(\n                  this.pendingMessage.context,\n                  this.pendingMessage.message\n                );\n              }\n              if (this.pendingHalfClose) {\n                this.child.halfClose();\n              }\n            },\n            (error: Error & { code: number }) => {\n              // We assume the error code isn't 0 (Status.OK)\n              const { code, details } = restrictControlPlaneStatusCode(\n                typeof error.code === 'number' ? error.code : Status.UNKNOWN,\n                `Getting metadata from plugin failed with error: ${error.message}`\n              );\n              this.outputStatus(\n                {\n                  code: code,\n                  details: details,\n                  metadata: new Metadata(),\n                },\n                'PROCESSED'\n              );\n            }\n          );\n        break;\n      case PickResultType.DROP:\n        const { code, details } = restrictControlPlaneStatusCode(\n          pickResult.status!.code,\n          pickResult.status!.details\n        );\n        setImmediate(() => {\n          this.outputStatus(\n            { code, details, metadata: pickResult.status!.metadata },\n            'DROP'\n          );\n        });\n        break;\n      case PickResultType.TRANSIENT_FAILURE:\n        if (this.metadata.getOptions().waitForReady) {\n          this.channel.queueCallForPick(this);\n        } else {\n          const { code, details } = restrictControlPlaneStatusCode(\n            pickResult.status!.code,\n            pickResult.status!.details\n          );\n          setImmediate(() => {\n            this.outputStatus(\n              { code, details, metadata: pickResult.status!.metadata },\n              'PROCESSED'\n            );\n          });\n        }\n        break;\n      case PickResultType.QUEUE:\n        this.channel.queueCallForPick(this);\n    }\n  }\n\n  cancelWithStatus(status: Status, details: string): void {\n    this.trace(\n      'cancelWithStatus code: ' + status + ' details: \"' + details + '\"'\n    );\n    this.child?.cancelWithStatus(status, details);\n    this.outputStatus(\n      { code: status, details: details, metadata: new Metadata() },\n      'PROCESSED'\n    );\n  }\n  getPeer(): string {\n    return this.child?.getPeer() ?? this.channel.getTarget();\n  }\n  start(\n    metadata: Metadata,\n    listener: LoadBalancingCallInterceptingListener\n  ): void {\n    this.trace('start called');\n    this.listener = listener;\n    this.metadata = metadata;\n    this.doPick();\n  }\n  sendMessageWithContext(context: MessageContext, message: Buffer): void {\n    this.trace('write() called with message of length ' + message.length);\n    if (this.child) {\n      this.child.sendMessageWithContext(context, message);\n    } else {\n      this.pendingMessage = { context, message };\n    }\n  }\n  startRead(): void {\n    this.trace('startRead called');\n    if (this.child) {\n      this.child.startRead();\n    } else {\n      this.readPending = true;\n    }\n  }\n  halfClose(): void {\n    this.trace('halfClose called');\n    if (this.child) {\n      this.child.halfClose();\n    } else {\n      this.pendingHalfClose = true;\n    }\n  }\n  setCredentials(credentials: CallCredentials): void {\n    throw new Error('Method not implemented.');\n  }\n\n  getCallNumber(): number {\n    return this.callNumber;\n  }\n\n  getAuthContext(): AuthContext | null {\n    if (this.child) {\n      return this.child.getAuthContext();\n    } else {\n      return null;\n    }\n  }\n}\n","/*\n * Copyright 2022 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport { CallCredentials } from './call-credentials';\nimport {\n  Call,\n  CallStreamOptions,\n  DeadlineInfoProvider,\n  InterceptingListener,\n  MessageContext,\n  StatusObject,\n} from './call-interface';\nimport { LogVerbosity, Propagate, Status } from './constants';\nimport {\n  Deadline,\n  deadlineToString,\n  formatDateDifference,\n  getRelativeTimeout,\n  minDeadline,\n} from './deadline';\nimport { FilterStack, FilterStackFactory } from './filter-stack';\nimport { InternalChannel } from './internal-channel';\nimport { Metadata } from './metadata';\nimport * as logging from './logging';\nimport { restrictControlPlaneStatusCode } from './control-plane-status';\nimport { AuthContext } from './auth-context';\n\nconst TRACER_NAME = 'resolving_call';\n\nexport class ResolvingCall implements Call {\n  private child: (Call & DeadlineInfoProvider) | null = null;\n  private readPending = false;\n  private pendingMessage: { context: MessageContext; message: Buffer } | null =\n    null;\n  private pendingHalfClose = false;\n  private ended = false;\n  private readFilterPending = false;\n  private writeFilterPending = false;\n  private pendingChildStatus: StatusObject | null = null;\n  private metadata: Metadata | null = null;\n  private listener: InterceptingListener | null = null;\n  private deadline: Deadline;\n  private host: string;\n  private statusWatchers: ((status: StatusObject) => void)[] = [];\n  private deadlineTimer: NodeJS.Timeout = setTimeout(() => {}, 0);\n  private filterStack: FilterStack | null = null;\n\n  private deadlineStartTime: Date | null = null;\n  private configReceivedTime: Date | null = null;\n  private childStartTime: Date | null = null;\n\n  /**\n   * Credentials configured for this specific call. Does not include\n   * call credentials associated with the channel credentials used to create\n   * the channel.\n   */\n  private credentials: CallCredentials = CallCredentials.createEmpty();\n\n  constructor(\n    private readonly channel: InternalChannel,\n    private readonly method: string,\n    options: CallStreamOptions,\n    private readonly filterStackFactory: FilterStackFactory,\n    private callNumber: number\n  ) {\n    this.deadline = options.deadline;\n    this.host = options.host;\n    if (options.parentCall) {\n      if (options.flags & Propagate.CANCELLATION) {\n        options.parentCall.on('cancelled', () => {\n          this.cancelWithStatus(Status.CANCELLED, 'Cancelled by parent call');\n        });\n      }\n      if (options.flags & Propagate.DEADLINE) {\n        this.trace(\n          'Propagating deadline from parent: ' +\n            options.parentCall.getDeadline()\n        );\n        this.deadline = minDeadline(\n          this.deadline,\n          options.parentCall.getDeadline()\n        );\n      }\n    }\n    this.trace('Created');\n    this.runDeadlineTimer();\n  }\n\n  private trace(text: string): void {\n    logging.trace(\n      LogVerbosity.DEBUG,\n      TRACER_NAME,\n      '[' + this.callNumber + '] ' + text\n    );\n  }\n\n  private runDeadlineTimer() {\n    clearTimeout(this.deadlineTimer);\n    this.deadlineStartTime = new Date();\n    this.trace('Deadline: ' + deadlineToString(this.deadline));\n    const timeout = getRelativeTimeout(this.deadline);\n    if (timeout !== Infinity) {\n      this.trace('Deadline will be reached in ' + timeout + 'ms');\n      const handleDeadline = () => {\n        if (!this.deadlineStartTime) {\n          this.cancelWithStatus(Status.DEADLINE_EXCEEDED, 'Deadline exceeded');\n          return;\n        }\n        const deadlineInfo: string[] = [];\n        const deadlineEndTime = new Date();\n        deadlineInfo.push(`Deadline exceeded after ${formatDateDifference(this.deadlineStartTime, deadlineEndTime)}`);\n        if (this.configReceivedTime) {\n          if (this.configReceivedTime > this.deadlineStartTime) {\n            deadlineInfo.push(`name resolution: ${formatDateDifference(this.deadlineStartTime, this.configReceivedTime)}`);\n          }\n          if (this.childStartTime) {\n            if (this.childStartTime > this.configReceivedTime) {\n              deadlineInfo.push(`metadata filters: ${formatDateDifference(this.configReceivedTime, this.childStartTime)}`);\n            }\n          } else {\n            deadlineInfo.push('waiting for metadata filters');\n          }\n        } else {\n          deadlineInfo.push('waiting for name resolution');\n        }\n        if (this.child) {\n          deadlineInfo.push(...this.child.getDeadlineInfo());\n        }\n        this.cancelWithStatus(Status.DEADLINE_EXCEEDED, deadlineInfo.join(','));\n      };\n      if (timeout <= 0) {\n        process.nextTick(handleDeadline);\n      } else {\n        this.deadlineTimer = setTimeout(handleDeadline, timeout);\n      }\n    }\n  }\n\n  private outputStatus(status: StatusObject) {\n    if (!this.ended) {\n      this.ended = true;\n      if (!this.filterStack) {\n        this.filterStack = this.filterStackFactory.createFilter();\n      }\n      clearTimeout(this.deadlineTimer);\n      const filteredStatus = this.filterStack.receiveTrailers(status);\n      this.trace(\n        'ended with status: code=' +\n          filteredStatus.code +\n          ' details=\"' +\n          filteredStatus.details +\n          '\"'\n      );\n      this.statusWatchers.forEach(watcher => watcher(filteredStatus));\n      process.nextTick(() => {\n        this.listener?.onReceiveStatus(filteredStatus);\n      });\n    }\n  }\n\n  private sendMessageOnChild(context: MessageContext, message: Buffer): void {\n    if (!this.child) {\n      throw new Error('sendMessageonChild called with child not populated');\n    }\n    const child = this.child;\n    this.writeFilterPending = true;\n    this.filterStack!.sendMessage(\n      Promise.resolve({ message: message, flags: context.flags })\n    ).then(\n      filteredMessage => {\n        this.writeFilterPending = false;\n        child.sendMessageWithContext(context, filteredMessage.message);\n        if (this.pendingHalfClose) {\n          child.halfClose();\n        }\n      },\n      (status: StatusObject) => {\n        this.cancelWithStatus(status.code, status.details);\n      }\n    );\n  }\n\n  getConfig(): void {\n    if (this.ended) {\n      return;\n    }\n    if (!this.metadata || !this.listener) {\n      throw new Error('getConfig called before start');\n    }\n    const configResult = this.channel.getConfig(this.method, this.metadata);\n    if (configResult.type === 'NONE') {\n      this.channel.queueCallForConfig(this);\n      return;\n    } else if (configResult.type === 'ERROR') {\n      if (this.metadata.getOptions().waitForReady) {\n        this.channel.queueCallForConfig(this);\n      } else {\n        this.outputStatus(configResult.error);\n      }\n      return;\n    }\n    // configResult.type === 'SUCCESS'\n    this.configReceivedTime = new Date();\n    const config = configResult.config;\n    if (config.status !== Status.OK) {\n      const { code, details } = restrictControlPlaneStatusCode(\n        config.status,\n        'Failed to route call to method ' + this.method\n      );\n      this.outputStatus({\n        code: code,\n        details: details,\n        metadata: new Metadata(),\n      });\n      return;\n    }\n\n    if (config.methodConfig.timeout) {\n      const configDeadline = new Date();\n      configDeadline.setSeconds(\n        configDeadline.getSeconds() + config.methodConfig.timeout.seconds\n      );\n      configDeadline.setMilliseconds(\n        configDeadline.getMilliseconds() +\n          config.methodConfig.timeout.nanos / 1_000_000\n      );\n      this.deadline = minDeadline(this.deadline, configDeadline);\n      this.runDeadlineTimer();\n    }\n\n    this.filterStackFactory.push(config.dynamicFilterFactories);\n    this.filterStack = this.filterStackFactory.createFilter();\n    this.filterStack.sendMetadata(Promise.resolve(this.metadata)).then(\n      filteredMetadata => {\n        this.child = this.channel.createRetryingCall(\n          config,\n          this.method,\n          this.host,\n          this.credentials,\n          this.deadline\n        );\n        this.trace('Created child [' + this.child.getCallNumber() + ']');\n        this.childStartTime = new Date();\n        this.child.start(filteredMetadata, {\n          onReceiveMetadata: metadata => {\n            this.trace('Received metadata');\n            this.listener!.onReceiveMetadata(\n              this.filterStack!.receiveMetadata(metadata)\n            );\n          },\n          onReceiveMessage: message => {\n            this.trace('Received message');\n            this.readFilterPending = true;\n            this.filterStack!.receiveMessage(message).then(\n              filteredMesssage => {\n                this.trace('Finished filtering received message');\n                this.readFilterPending = false;\n                this.listener!.onReceiveMessage(filteredMesssage);\n                if (this.pendingChildStatus) {\n                  this.outputStatus(this.pendingChildStatus);\n                }\n              },\n              (status: StatusObject) => {\n                this.cancelWithStatus(status.code, status.details);\n              }\n            );\n          },\n          onReceiveStatus: status => {\n            this.trace('Received status');\n            if (this.readFilterPending) {\n              this.pendingChildStatus = status;\n            } else {\n              this.outputStatus(status);\n            }\n          },\n        });\n        if (this.readPending) {\n          this.child.startRead();\n        }\n        if (this.pendingMessage) {\n          this.sendMessageOnChild(\n            this.pendingMessage.context,\n            this.pendingMessage.message\n          );\n        } else if (this.pendingHalfClose) {\n          this.child.halfClose();\n        }\n      },\n      (status: StatusObject) => {\n        this.outputStatus(status);\n      }\n    );\n  }\n\n  reportResolverError(status: StatusObject) {\n    if (this.metadata?.getOptions().waitForReady) {\n      this.channel.queueCallForConfig(this);\n    } else {\n      this.outputStatus(status);\n    }\n  }\n  cancelWithStatus(status: Status, details: string): void {\n    this.trace(\n      'cancelWithStatus code: ' + status + ' details: \"' + details + '\"'\n    );\n    this.child?.cancelWithStatus(status, details);\n    this.outputStatus({\n      code: status,\n      details: details,\n      metadata: new Metadata(),\n    });\n  }\n  getPeer(): string {\n    return this.child?.getPeer() ?? this.channel.getTarget();\n  }\n  start(metadata: Metadata, listener: InterceptingListener): void {\n    this.trace('start called');\n    this.metadata = metadata.clone();\n    this.listener = listener;\n    this.getConfig();\n  }\n  sendMessageWithContext(context: MessageContext, message: Buffer): void {\n    this.trace('write() called with message of length ' + message.length);\n    if (this.child) {\n      this.sendMessageOnChild(context, message);\n    } else {\n      this.pendingMessage = { context, message };\n    }\n  }\n  startRead(): void {\n    this.trace('startRead called');\n    if (this.child) {\n      this.child.startRead();\n    } else {\n      this.readPending = true;\n    }\n  }\n  halfClose(): void {\n    this.trace('halfClose called');\n    if (this.child && !this.writeFilterPending) {\n      this.child.halfClose();\n    } else {\n      this.pendingHalfClose = true;\n    }\n  }\n  setCredentials(credentials: CallCredentials): void {\n    this.credentials = credentials;\n  }\n\n  addStatusWatcher(watcher: (status: StatusObject) => void) {\n    this.statusWatchers.push(watcher);\n  }\n\n  getCallNumber(): number {\n    return this.callNumber;\n  }\n\n  getAuthContext(): AuthContext | null {\n    if (this.child) {\n      return this.child.getAuthContext();\n    } else {\n      return null;\n    }\n  }\n}\n","/*\n * Copyright 2022 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport { CallCredentials } from './call-credentials';\nimport { LogVerbosity, Status } from './constants';\nimport { Deadline, formatDateDifference } from './deadline';\nimport { Metadata } from './metadata';\nimport { CallConfig } from './resolver';\nimport * as logging from './logging';\nimport {\n  Call,\n  DeadlineInfoProvider,\n  InterceptingListener,\n  MessageContext,\n  StatusObject,\n  WriteCallback,\n  WriteObject,\n} from './call-interface';\nimport {\n  LoadBalancingCall,\n  StatusObjectWithProgress,\n} from './load-balancing-call';\nimport { InternalChannel } from './internal-channel';\nimport { AuthContext } from './auth-context';\n\nconst TRACER_NAME = 'retrying_call';\n\nexport class RetryThrottler {\n  private tokens: number;\n  constructor(\n    private readonly maxTokens: number,\n    private readonly tokenRatio: number,\n    previousRetryThrottler?: RetryThrottler\n  ) {\n    if (previousRetryThrottler) {\n      /* When carrying over tokens from a previous config, rescale them to the\n       * new max value */\n      this.tokens =\n        previousRetryThrottler.tokens *\n        (maxTokens / previousRetryThrottler.maxTokens);\n    } else {\n      this.tokens = maxTokens;\n    }\n  }\n\n  addCallSucceeded() {\n    this.tokens = Math.min(this.tokens + this.tokenRatio, this.maxTokens);\n  }\n\n  addCallFailed() {\n    this.tokens = Math.max(this.tokens - 1, 0);\n  }\n\n  canRetryCall() {\n    return this.tokens > (this.maxTokens / 2);\n  }\n}\n\nexport class MessageBufferTracker {\n  private totalAllocated = 0;\n  private allocatedPerCall: Map<number, number> = new Map<number, number>();\n\n  constructor(private totalLimit: number, private limitPerCall: number) {}\n\n  allocate(size: number, callId: number): boolean {\n    const currentPerCall = this.allocatedPerCall.get(callId) ?? 0;\n    if (\n      this.limitPerCall - currentPerCall < size ||\n      this.totalLimit - this.totalAllocated < size\n    ) {\n      return false;\n    }\n    this.allocatedPerCall.set(callId, currentPerCall + size);\n    this.totalAllocated += size;\n    return true;\n  }\n\n  free(size: number, callId: number) {\n    if (this.totalAllocated < size) {\n      throw new Error(\n        `Invalid buffer allocation state: call ${callId} freed ${size} > total allocated ${this.totalAllocated}`\n      );\n    }\n    this.totalAllocated -= size;\n    const currentPerCall = this.allocatedPerCall.get(callId) ?? 0;\n    if (currentPerCall < size) {\n      throw new Error(\n        `Invalid buffer allocation state: call ${callId} freed ${size} > allocated for call ${currentPerCall}`\n      );\n    }\n    this.allocatedPerCall.set(callId, currentPerCall - size);\n  }\n\n  freeAll(callId: number) {\n    const currentPerCall = this.allocatedPerCall.get(callId) ?? 0;\n    if (this.totalAllocated < currentPerCall) {\n      throw new Error(\n        `Invalid buffer allocation state: call ${callId} allocated ${currentPerCall} > total allocated ${this.totalAllocated}`\n      );\n    }\n    this.totalAllocated -= currentPerCall;\n    this.allocatedPerCall.delete(callId);\n  }\n}\n\ntype UnderlyingCallState = 'ACTIVE' | 'COMPLETED';\n\ninterface UnderlyingCall {\n  state: UnderlyingCallState;\n  call: LoadBalancingCall;\n  nextMessageToSend: number;\n  startTime: Date;\n}\n\n/**\n * A retrying call can be in one of these states:\n * RETRY: Retries are configured and new attempts may be sent\n * HEDGING: Hedging is configured and new attempts may be sent\n * TRANSPARENT_ONLY: Neither retries nor hedging are configured, and\n * transparent retry attempts may still be sent\n * COMMITTED: One attempt is committed, and no new attempts will be\n * sent\n * NO_RETRY: Retries are disabled. Exists to track the transition to COMMITTED\n */\ntype RetryingCallState =\n  | 'RETRY'\n  | 'HEDGING'\n  | 'TRANSPARENT_ONLY'\n  | 'COMMITTED'\n  | 'NO_RETRY';\n\n/**\n * The different types of objects that can be stored in the write buffer, with\n * the following meanings:\n * MESSAGE: This is a message to be sent.\n * HALF_CLOSE: When this entry is reached, the calls should send a half-close.\n * FREED: This slot previously contained a message that has been sent on all\n * child calls and is no longer needed.\n */\ntype WriteBufferEntryType = 'MESSAGE' | 'HALF_CLOSE' | 'FREED';\n\n/**\n * Entry in the buffer of messages to send to the remote end.\n */\ninterface WriteBufferEntry {\n  entryType: WriteBufferEntryType;\n  /**\n   * Message to send.\n   * Only populated if entryType is MESSAGE.\n   */\n  message?: WriteObject;\n  /**\n   * Callback to call after sending the message.\n   * Only populated if entryType is MESSAGE and the call is in the COMMITTED\n   * state.\n   */\n  callback?: WriteCallback;\n  /**\n   * Indicates whether the message is allocated in the buffer tracker. Ignored\n   * if entryType is not MESSAGE. Should be the return value of\n   * bufferTracker.allocate.\n   */\n  allocated: boolean;\n}\n\nconst PREVIONS_RPC_ATTEMPTS_METADATA_KEY = 'grpc-previous-rpc-attempts';\n\nconst DEFAULT_MAX_ATTEMPTS_LIMIT = 5;\n\nexport class RetryingCall implements Call, DeadlineInfoProvider {\n  private state: RetryingCallState;\n  private listener: InterceptingListener | null = null;\n  private initialMetadata: Metadata | null = null;\n  private underlyingCalls: UnderlyingCall[] = [];\n  private writeBuffer: WriteBufferEntry[] = [];\n  /**\n   * The offset of message indices in the writeBuffer. For example, if\n   * writeBufferOffset is 10, message 10 is in writeBuffer[0] and message 15\n   * is in writeBuffer[5].\n   */\n  private writeBufferOffset = 0;\n  /**\n   * Tracks whether a read has been started, so that we know whether to start\n   * reads on new child calls. This only matters for the first read, because\n   * once a message comes in the child call becomes committed and there will\n   * be no new child calls.\n   */\n  private readStarted = false;\n  private transparentRetryUsed = false;\n  /**\n   * Number of attempts so far\n   */\n  private attempts = 0;\n  private hedgingTimer: NodeJS.Timeout | null = null;\n  private committedCallIndex: number | null = null;\n  private initialRetryBackoffSec = 0;\n  private nextRetryBackoffSec = 0;\n  private startTime: Date;\n  private maxAttempts: number;\n  constructor(\n    private readonly channel: InternalChannel,\n    private readonly callConfig: CallConfig,\n    private readonly methodName: string,\n    private readonly host: string,\n    private readonly credentials: CallCredentials,\n    private readonly deadline: Deadline,\n    private readonly callNumber: number,\n    private readonly bufferTracker: MessageBufferTracker,\n    private readonly retryThrottler?: RetryThrottler\n  ) {\n    const maxAttemptsLimit =\n      channel.getOptions()['grpc-node.retry_max_attempts_limit'] ??\n      DEFAULT_MAX_ATTEMPTS_LIMIT;\n    if (channel.getOptions()['grpc.enable_retries'] === 0) {\n      this.state = 'NO_RETRY';\n      this.maxAttempts = 1;\n    } else if (callConfig.methodConfig.retryPolicy) {\n      this.state = 'RETRY';\n      const retryPolicy = callConfig.methodConfig.retryPolicy;\n      this.nextRetryBackoffSec = this.initialRetryBackoffSec = Number(\n        retryPolicy.initialBackoff.substring(\n          0,\n          retryPolicy.initialBackoff.length - 1\n        )\n      );\n      this.maxAttempts = Math.min(retryPolicy.maxAttempts, maxAttemptsLimit);\n    } else if (callConfig.methodConfig.hedgingPolicy) {\n      this.state = 'HEDGING';\n      this.maxAttempts = Math.min(\n        callConfig.methodConfig.hedgingPolicy.maxAttempts,\n        maxAttemptsLimit\n      );\n    } else {\n      this.state = 'TRANSPARENT_ONLY';\n      this.maxAttempts = 1;\n    }\n    this.startTime = new Date();\n  }\n  getDeadlineInfo(): string[] {\n    if (this.underlyingCalls.length === 0) {\n      return [];\n    }\n    const deadlineInfo: string[] = [];\n    const latestCall = this.underlyingCalls[this.underlyingCalls.length - 1];\n    if (this.underlyingCalls.length > 1) {\n      deadlineInfo.push(\n        `previous attempts: ${this.underlyingCalls.length - 1}`\n      );\n    }\n    if (latestCall.startTime > this.startTime) {\n      deadlineInfo.push(\n        `time to current attempt start: ${formatDateDifference(\n          this.startTime,\n          latestCall.startTime\n        )}`\n      );\n    }\n    deadlineInfo.push(...latestCall.call.getDeadlineInfo());\n    return deadlineInfo;\n  }\n  getCallNumber(): number {\n    return this.callNumber;\n  }\n\n  private trace(text: string): void {\n    logging.trace(\n      LogVerbosity.DEBUG,\n      TRACER_NAME,\n      '[' + this.callNumber + '] ' + text\n    );\n  }\n\n  private reportStatus(statusObject: StatusObject) {\n    this.trace(\n      'ended with status: code=' +\n        statusObject.code +\n        ' details=\"' +\n        statusObject.details +\n        '\" start time=' +\n        this.startTime.toISOString()\n    );\n    this.bufferTracker.freeAll(this.callNumber);\n    this.writeBufferOffset = this.writeBufferOffset + this.writeBuffer.length;\n    this.writeBuffer = [];\n    process.nextTick(() => {\n      // Explicitly construct status object to remove progress field\n      this.listener?.onReceiveStatus({\n        code: statusObject.code,\n        details: statusObject.details,\n        metadata: statusObject.metadata,\n      });\n    });\n  }\n\n  cancelWithStatus(status: Status, details: string): void {\n    this.trace(\n      'cancelWithStatus code: ' + status + ' details: \"' + details + '\"'\n    );\n    this.reportStatus({ code: status, details, metadata: new Metadata() });\n    for (const { call } of this.underlyingCalls) {\n      call.cancelWithStatus(status, details);\n    }\n  }\n  getPeer(): string {\n    if (this.committedCallIndex !== null) {\n      return this.underlyingCalls[this.committedCallIndex].call.getPeer();\n    } else {\n      return 'unknown';\n    }\n  }\n\n  private getBufferEntry(messageIndex: number): WriteBufferEntry {\n    return (\n      this.writeBuffer[messageIndex - this.writeBufferOffset] ?? {\n        entryType: 'FREED',\n        allocated: false,\n      }\n    );\n  }\n\n  private getNextBufferIndex() {\n    return this.writeBufferOffset + this.writeBuffer.length;\n  }\n\n  private clearSentMessages() {\n    if (this.state !== 'COMMITTED') {\n      return;\n    }\n    let earliestNeededMessageIndex: number;\n    if (this.underlyingCalls[this.committedCallIndex!].state === 'COMPLETED') {\n      /* If the committed call is completed, clear all messages, even if some\n       * have not been sent. */\n      earliestNeededMessageIndex = this.getNextBufferIndex();\n    } else {\n      earliestNeededMessageIndex =\n        this.underlyingCalls[this.committedCallIndex!].nextMessageToSend;\n    }\n    for (\n      let messageIndex = this.writeBufferOffset;\n      messageIndex < earliestNeededMessageIndex;\n      messageIndex++\n    ) {\n      const bufferEntry = this.getBufferEntry(messageIndex);\n      if (bufferEntry.allocated) {\n        this.bufferTracker.free(\n          bufferEntry.message!.message.length,\n          this.callNumber\n        );\n      }\n    }\n    this.writeBuffer = this.writeBuffer.slice(\n      earliestNeededMessageIndex - this.writeBufferOffset\n    );\n    this.writeBufferOffset = earliestNeededMessageIndex;\n  }\n\n  private commitCall(index: number) {\n    if (this.state === 'COMMITTED') {\n      return;\n    }\n    this.trace(\n      'Committing call [' +\n        this.underlyingCalls[index].call.getCallNumber() +\n        '] at index ' +\n        index\n    );\n    this.state = 'COMMITTED';\n    this.callConfig.onCommitted?.();\n    this.committedCallIndex = index;\n    for (let i = 0; i < this.underlyingCalls.length; i++) {\n      if (i === index) {\n        continue;\n      }\n      if (this.underlyingCalls[i].state === 'COMPLETED') {\n        continue;\n      }\n      this.underlyingCalls[i].state = 'COMPLETED';\n      this.underlyingCalls[i].call.cancelWithStatus(\n        Status.CANCELLED,\n        'Discarded in favor of other hedged attempt'\n      );\n    }\n    this.clearSentMessages();\n  }\n\n  private commitCallWithMostMessages() {\n    if (this.state === 'COMMITTED') {\n      return;\n    }\n    let mostMessages = -1;\n    let callWithMostMessages = -1;\n    for (const [index, childCall] of this.underlyingCalls.entries()) {\n      if (\n        childCall.state === 'ACTIVE' &&\n        childCall.nextMessageToSend > mostMessages\n      ) {\n        mostMessages = childCall.nextMessageToSend;\n        callWithMostMessages = index;\n      }\n    }\n    if (callWithMostMessages === -1) {\n      /* There are no active calls, disable retries to force the next call that\n       * is started to be committed. */\n      this.state = 'TRANSPARENT_ONLY';\n    } else {\n      this.commitCall(callWithMostMessages);\n    }\n  }\n\n  private isStatusCodeInList(list: (Status | string)[], code: Status) {\n    return list.some(\n      value =>\n        value === code ||\n        value.toString().toLowerCase() === Status[code]?.toLowerCase()\n    );\n  }\n\n  private getNextRetryJitter() {\n    /* Jitter of +-20% is applied: https://github.com/grpc/proposal/blob/master/A6-client-retries.md#exponential-backoff */\n    return Math.random() * (1.2 - 0.8) + 0.8;\n  }\n\n  private getNextRetryBackoffMs() {\n    const retryPolicy = this.callConfig?.methodConfig.retryPolicy;\n    if (!retryPolicy) {\n      return 0;\n    }\n    const jitter = this.getNextRetryJitter();\n    const nextBackoffMs = jitter * this.nextRetryBackoffSec * 1000;\n    const maxBackoffSec = Number(\n      retryPolicy.maxBackoff.substring(0, retryPolicy.maxBackoff.length - 1)\n    );\n    this.nextRetryBackoffSec = Math.min(\n      this.nextRetryBackoffSec * retryPolicy.backoffMultiplier,\n      maxBackoffSec\n    );\n    return nextBackoffMs;\n  }\n\n  private maybeRetryCall(\n    pushback: number | null,\n    callback: (retried: boolean) => void\n  ) {\n    if (this.state !== 'RETRY') {\n      callback(false);\n      return;\n    }\n    if (this.attempts >= this.maxAttempts) {\n      callback(false);\n      return;\n    }\n    let retryDelayMs: number;\n    if (pushback === null) {\n      retryDelayMs = this.getNextRetryBackoffMs();\n    } else if (pushback < 0) {\n      this.state = 'TRANSPARENT_ONLY';\n      callback(false);\n      return;\n    } else {\n      retryDelayMs = pushback;\n      this.nextRetryBackoffSec = this.initialRetryBackoffSec;\n    }\n    setTimeout(() => {\n      if (this.state !== 'RETRY') {\n        callback(false);\n        return;\n      }\n      if (this.retryThrottler?.canRetryCall() ?? true) {\n        callback(true);\n        this.attempts += 1;\n        this.startNewAttempt();\n      } else {\n        this.trace('Retry attempt denied by throttling policy');\n        callback(false);\n      }\n    }, retryDelayMs);\n  }\n\n  private countActiveCalls(): number {\n    let count = 0;\n    for (const call of this.underlyingCalls) {\n      if (call?.state === 'ACTIVE') {\n        count += 1;\n      }\n    }\n    return count;\n  }\n\n  private handleProcessedStatus(\n    status: StatusObject,\n    callIndex: number,\n    pushback: number | null\n  ) {\n    switch (this.state) {\n      case 'COMMITTED':\n      case 'NO_RETRY':\n      case 'TRANSPARENT_ONLY':\n        this.commitCall(callIndex);\n        this.reportStatus(status);\n        break;\n      case 'HEDGING':\n        if (\n          this.isStatusCodeInList(\n            this.callConfig!.methodConfig.hedgingPolicy!.nonFatalStatusCodes ??\n              [],\n            status.code\n          )\n        ) {\n          this.retryThrottler?.addCallFailed();\n          let delayMs: number;\n          if (pushback === null) {\n            delayMs = 0;\n          } else if (pushback < 0) {\n            this.state = 'TRANSPARENT_ONLY';\n            this.commitCall(callIndex);\n            this.reportStatus(status);\n            return;\n          } else {\n            delayMs = pushback;\n          }\n          setTimeout(() => {\n            this.maybeStartHedgingAttempt();\n            // If after trying to start a call there are no active calls, this was the last one\n            if (this.countActiveCalls() === 0) {\n              this.commitCall(callIndex);\n              this.reportStatus(status);\n            }\n          }, delayMs);\n        } else {\n          this.commitCall(callIndex);\n          this.reportStatus(status);\n        }\n        break;\n      case 'RETRY':\n        if (\n          this.isStatusCodeInList(\n            this.callConfig!.methodConfig.retryPolicy!.retryableStatusCodes,\n            status.code\n          )\n        ) {\n          this.retryThrottler?.addCallFailed();\n          this.maybeRetryCall(pushback, retried => {\n            if (!retried) {\n              this.commitCall(callIndex);\n              this.reportStatus(status);\n            }\n          });\n        } else {\n          this.commitCall(callIndex);\n          this.reportStatus(status);\n        }\n        break;\n    }\n  }\n\n  private getPushback(metadata: Metadata): number | null {\n    const mdValue = metadata.get('grpc-retry-pushback-ms');\n    if (mdValue.length === 0) {\n      return null;\n    }\n    try {\n      return parseInt(mdValue[0] as string);\n    } catch (e) {\n      return -1;\n    }\n  }\n\n  private handleChildStatus(\n    status: StatusObjectWithProgress,\n    callIndex: number\n  ) {\n    if (this.underlyingCalls[callIndex].state === 'COMPLETED') {\n      return;\n    }\n    this.trace(\n      'state=' +\n        this.state +\n        ' handling status with progress ' +\n        status.progress +\n        ' from child [' +\n        this.underlyingCalls[callIndex].call.getCallNumber() +\n        '] in state ' +\n        this.underlyingCalls[callIndex].state\n    );\n    this.underlyingCalls[callIndex].state = 'COMPLETED';\n    if (status.code === Status.OK) {\n      this.retryThrottler?.addCallSucceeded();\n      this.commitCall(callIndex);\n      this.reportStatus(status);\n      return;\n    }\n    if (this.state === 'NO_RETRY') {\n      this.commitCall(callIndex);\n      this.reportStatus(status);\n      return;\n    }\n    if (this.state === 'COMMITTED') {\n      this.reportStatus(status);\n      return;\n    }\n    const pushback = this.getPushback(status.metadata);\n    switch (status.progress) {\n      case 'NOT_STARTED':\n        // RPC never leaves the client, always safe to retry\n        this.startNewAttempt();\n        break;\n      case 'REFUSED':\n        // RPC reaches the server library, but not the server application logic\n        if (this.transparentRetryUsed) {\n          this.handleProcessedStatus(status, callIndex, pushback);\n        } else {\n          this.transparentRetryUsed = true;\n          this.startNewAttempt();\n        }\n        break;\n      case 'DROP':\n        this.commitCall(callIndex);\n        this.reportStatus(status);\n        break;\n      case 'PROCESSED':\n        this.handleProcessedStatus(status, callIndex, pushback);\n        break;\n    }\n  }\n\n  private maybeStartHedgingAttempt() {\n    if (this.state !== 'HEDGING') {\n      return;\n    }\n    if (!this.callConfig.methodConfig.hedgingPolicy) {\n      return;\n    }\n    if (this.attempts >= this.maxAttempts) {\n      return;\n    }\n    this.attempts += 1;\n    this.startNewAttempt();\n    this.maybeStartHedgingTimer();\n  }\n\n  private maybeStartHedgingTimer() {\n    if (this.hedgingTimer) {\n      clearTimeout(this.hedgingTimer);\n    }\n    if (this.state !== 'HEDGING') {\n      return;\n    }\n    if (!this.callConfig.methodConfig.hedgingPolicy) {\n      return;\n    }\n    const hedgingPolicy = this.callConfig.methodConfig.hedgingPolicy;\n    if (this.attempts >= this.maxAttempts) {\n      return;\n    }\n    const hedgingDelayString = hedgingPolicy.hedgingDelay ?? '0s';\n    const hedgingDelaySec = Number(\n      hedgingDelayString.substring(0, hedgingDelayString.length - 1)\n    );\n    this.hedgingTimer = setTimeout(() => {\n      this.maybeStartHedgingAttempt();\n    }, hedgingDelaySec * 1000);\n    this.hedgingTimer.unref?.();\n  }\n\n  private startNewAttempt() {\n    const child = this.channel.createLoadBalancingCall(\n      this.callConfig,\n      this.methodName,\n      this.host,\n      this.credentials,\n      this.deadline\n    );\n    this.trace(\n      'Created child call [' +\n        child.getCallNumber() +\n        '] for attempt ' +\n        this.attempts\n    );\n    const index = this.underlyingCalls.length;\n    this.underlyingCalls.push({\n      state: 'ACTIVE',\n      call: child,\n      nextMessageToSend: 0,\n      startTime: new Date(),\n    });\n    const previousAttempts = this.attempts - 1;\n    const initialMetadata = this.initialMetadata!.clone();\n    if (previousAttempts > 0) {\n      initialMetadata.set(\n        PREVIONS_RPC_ATTEMPTS_METADATA_KEY,\n        `${previousAttempts}`\n      );\n    }\n    let receivedMetadata = false;\n    child.start(initialMetadata, {\n      onReceiveMetadata: metadata => {\n        this.trace(\n          'Received metadata from child [' + child.getCallNumber() + ']'\n        );\n        this.commitCall(index);\n        receivedMetadata = true;\n        if (previousAttempts > 0) {\n          metadata.set(\n            PREVIONS_RPC_ATTEMPTS_METADATA_KEY,\n            `${previousAttempts}`\n          );\n        }\n        if (this.underlyingCalls[index].state === 'ACTIVE') {\n          this.listener!.onReceiveMetadata(metadata);\n        }\n      },\n      onReceiveMessage: message => {\n        this.trace(\n          'Received message from child [' + child.getCallNumber() + ']'\n        );\n        this.commitCall(index);\n        if (this.underlyingCalls[index].state === 'ACTIVE') {\n          this.listener!.onReceiveMessage(message);\n        }\n      },\n      onReceiveStatus: status => {\n        this.trace(\n          'Received status from child [' + child.getCallNumber() + ']'\n        );\n        if (!receivedMetadata && previousAttempts > 0) {\n          status.metadata.set(\n            PREVIONS_RPC_ATTEMPTS_METADATA_KEY,\n            `${previousAttempts}`\n          );\n        }\n        this.handleChildStatus(status, index);\n      },\n    });\n    this.sendNextChildMessage(index);\n    if (this.readStarted) {\n      child.startRead();\n    }\n  }\n\n  start(metadata: Metadata, listener: InterceptingListener): void {\n    this.trace('start called');\n    this.listener = listener;\n    this.initialMetadata = metadata;\n    this.attempts += 1;\n    this.startNewAttempt();\n    this.maybeStartHedgingTimer();\n  }\n\n  private handleChildWriteCompleted(childIndex: number, messageIndex: number) {\n    this.getBufferEntry(messageIndex).callback?.();\n    this.clearSentMessages();\n    const childCall = this.underlyingCalls[childIndex];\n    childCall.nextMessageToSend += 1;\n    this.sendNextChildMessage(childIndex);\n  }\n\n  private sendNextChildMessage(childIndex: number) {\n    const childCall = this.underlyingCalls[childIndex];\n    if (childCall.state === 'COMPLETED') {\n      return;\n    }\n    const messageIndex = childCall.nextMessageToSend;\n    if (this.getBufferEntry(messageIndex)) {\n      const bufferEntry = this.getBufferEntry(messageIndex);\n      switch (bufferEntry.entryType) {\n        case 'MESSAGE':\n          childCall.call.sendMessageWithContext(\n            {\n              callback: error => {\n                // Ignore error\n                this.handleChildWriteCompleted(childIndex, messageIndex);\n              },\n            },\n            bufferEntry.message!.message\n          );\n          // Optimization: if the next entry is HALF_CLOSE, send it immediately\n          // without waiting for the message callback. This is safe because the message\n          // has already been passed to the underlying transport.\n          const nextEntry = this.getBufferEntry(messageIndex + 1);\n          if (nextEntry.entryType === 'HALF_CLOSE') {\n            this.trace(\n              'Sending halfClose immediately after message to child [' +\n                childCall.call.getCallNumber() +\n                '] - optimizing for unary/final message'\n            );\n            childCall.nextMessageToSend += 1;\n            childCall.call.halfClose();\n          }\n          break;\n        case 'HALF_CLOSE':\n          childCall.nextMessageToSend += 1;\n          childCall.call.halfClose();\n          break;\n        case 'FREED':\n          // Should not be possible\n          break;\n      }\n    }\n  }\n\n  sendMessageWithContext(context: MessageContext, message: Buffer): void {\n    this.trace('write() called with message of length ' + message.length);\n    const writeObj: WriteObject = {\n      message,\n      flags: context.flags,\n    };\n    const messageIndex = this.getNextBufferIndex();\n    const bufferEntry: WriteBufferEntry = {\n      entryType: 'MESSAGE',\n      message: writeObj,\n      allocated: this.bufferTracker.allocate(message.length, this.callNumber),\n    };\n    this.writeBuffer.push(bufferEntry);\n    if (bufferEntry.allocated) {\n      // Run this in next tick to avoid suspending the current execution context\n      // otherwise it might cause half closing the call before sending message\n      process.nextTick(() => {\n        context.callback?.();\n      });\n      for (const [callIndex, call] of this.underlyingCalls.entries()) {\n        if (\n          call.state === 'ACTIVE' &&\n          call.nextMessageToSend === messageIndex\n        ) {\n          call.call.sendMessageWithContext(\n            {\n              callback: error => {\n                // Ignore error\n                this.handleChildWriteCompleted(callIndex, messageIndex);\n              },\n            },\n            message\n          );\n        }\n      }\n    } else {\n      this.commitCallWithMostMessages();\n      // commitCallWithMostMessages can fail if we are between ping attempts\n      if (this.committedCallIndex === null) {\n        return;\n      }\n      const call = this.underlyingCalls[this.committedCallIndex];\n      bufferEntry.callback = context.callback;\n      if (call.state === 'ACTIVE' && call.nextMessageToSend === messageIndex) {\n        call.call.sendMessageWithContext(\n          {\n            callback: error => {\n              // Ignore error\n              this.handleChildWriteCompleted(this.committedCallIndex!, messageIndex);\n            },\n          },\n          message\n        );\n      }\n    }\n  }\n  startRead(): void {\n    this.trace('startRead called');\n    this.readStarted = true;\n    for (const underlyingCall of this.underlyingCalls) {\n      if (underlyingCall?.state === 'ACTIVE') {\n        underlyingCall.call.startRead();\n      }\n    }\n  }\n  halfClose(): void {\n    this.trace('halfClose called');\n    const halfCloseIndex = this.getNextBufferIndex();\n    this.writeBuffer.push({\n      entryType: 'HALF_CLOSE',\n      allocated: false,\n    });\n    for (const call of this.underlyingCalls) {\n      if (call?.state === 'ACTIVE') {\n        // Send halfClose to call when either:\n        // - nextMessageToSend === halfCloseIndex - 1: last message sent, callback pending (optimization)\n        // - nextMessageToSend === halfCloseIndex: all messages sent and acknowledged\n        if (call.nextMessageToSend === halfCloseIndex \n          || call.nextMessageToSend === halfCloseIndex - 1) {\n          this.trace(\n            'Sending halfClose immediately to child [' +\n              call.call.getCallNumber() +\n              '] - all messages already sent'\n          );\n          call.nextMessageToSend += 1;\n          call.call.halfClose();\n        }\n        // Otherwise, halfClose will be sent by sendNextChildMessage when message callbacks complete\n      }\n    }\n  }\n  setCredentials(newCredentials: CallCredentials): void {\n    throw new Error('Method not implemented.');\n  }\n  getMethod(): string {\n    return this.methodName;\n  }\n  getHost(): string {\n    return this.host;\n  }\n  getAuthContext(): AuthContext | null {\n    if (this.committedCallIndex !== null) {\n      return this.underlyingCalls[\n        this.committedCallIndex\n      ].call.getAuthContext();\n    } else {\n      return null;\n    }\n  }\n}","/*\n * Copyright 2022 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport { CallCredentials } from './call-credentials';\nimport { Channel } from './channel';\nimport type { SubchannelRef } from './channelz';\nimport { ConnectivityState } from './connectivity-state';\nimport { Subchannel } from './subchannel';\n\nexport type ConnectivityStateListener = (\n  subchannel: SubchannelInterface,\n  previousState: ConnectivityState,\n  newState: ConnectivityState,\n  keepaliveTime: number,\n  errorMessage?: string\n) => void;\n\nexport type HealthListener = (healthy: boolean) => void;\n\nexport interface DataWatcher {\n  setSubchannel(subchannel: Subchannel): void;\n  destroy(): void;\n}\n\n/**\n * This is an interface for load balancing policies to use to interact with\n * subchannels. This allows load balancing policies to wrap and unwrap\n * subchannels.\n *\n * Any load balancing policy that wraps subchannels must unwrap the subchannel\n * in the picker, so that other load balancing policies consistently have\n * access to their own wrapper objects.\n */\nexport interface SubchannelInterface {\n  getConnectivityState(): ConnectivityState;\n  addConnectivityStateListener(listener: ConnectivityStateListener): void;\n  removeConnectivityStateListener(listener: ConnectivityStateListener): void;\n  startConnecting(): void;\n  getAddress(): string;\n  throttleKeepalive(newKeepaliveTime: number): void;\n  ref(): void;\n  unref(): void;\n  getChannelzRef(): SubchannelRef;\n  isHealthy(): boolean;\n  addHealthStateWatcher(listener: HealthListener): void;\n  removeHealthStateWatcher(listener: HealthListener): void;\n  addDataWatcher(dataWatcher: DataWatcher): void;\n  /**\n   * If this is a wrapper, return the wrapped subchannel, otherwise return this\n   */\n  getRealSubchannel(): Subchannel;\n  /**\n   * Returns true if this and other both proxy the same underlying subchannel.\n   * Can be used instead of directly accessing getRealSubchannel to allow mocks\n   * to avoid implementing getRealSubchannel\n   */\n  realSubchannelEquals(other: SubchannelInterface): boolean;\n  /**\n   * Get the call credentials associated with the channel credentials for this\n   * subchannel.\n   */\n  getCallCredentials(): CallCredentials;\n  /**\n   * Get a channel that can be used to make requests with just this\n   */\n  getChannel(): Channel;\n}\n\nexport abstract class BaseSubchannelWrapper implements SubchannelInterface {\n  private healthy = true;\n  private healthListeners: Set<HealthListener> = new Set();\n  private refcount = 0;\n  private dataWatchers: Set<DataWatcher> = new Set();\n  constructor(protected child: SubchannelInterface) {\n    child.addHealthStateWatcher(childHealthy => {\n      /* A change to the child health state only affects this wrapper's overall\n       * health state if this wrapper is reporting healthy. */\n      if (this.healthy) {\n        this.updateHealthListeners();\n      }\n    });\n  }\n\n  private updateHealthListeners(): void {\n    for (const listener of this.healthListeners) {\n      listener(this.isHealthy());\n    }\n  }\n\n  getConnectivityState(): ConnectivityState {\n    return this.child.getConnectivityState();\n  }\n  addConnectivityStateListener(listener: ConnectivityStateListener): void {\n    this.child.addConnectivityStateListener(listener);\n  }\n  removeConnectivityStateListener(listener: ConnectivityStateListener): void {\n    this.child.removeConnectivityStateListener(listener);\n  }\n  startConnecting(): void {\n    this.child.startConnecting();\n  }\n  getAddress(): string {\n    return this.child.getAddress();\n  }\n  throttleKeepalive(newKeepaliveTime: number): void {\n    this.child.throttleKeepalive(newKeepaliveTime);\n  }\n  ref(): void {\n    this.child.ref();\n    this.refcount += 1;\n  }\n  unref(): void {\n    this.child.unref();\n    this.refcount -= 1;\n    if (this.refcount === 0) {\n      this.destroy();\n    }\n  }\n  protected destroy() {\n    for (const watcher of this.dataWatchers) {\n      watcher.destroy();\n    }\n  }\n  getChannelzRef(): SubchannelRef {\n    return this.child.getChannelzRef();\n  }\n  isHealthy(): boolean {\n    return this.healthy && this.child.isHealthy();\n  }\n  addHealthStateWatcher(listener: HealthListener): void {\n    this.healthListeners.add(listener);\n  }\n  removeHealthStateWatcher(listener: HealthListener): void {\n    this.healthListeners.delete(listener);\n  }\n  addDataWatcher(dataWatcher: DataWatcher): void {\n    dataWatcher.setSubchannel(this.getRealSubchannel());\n    this.dataWatchers.add(dataWatcher);\n  }\n  protected setHealthy(healthy: boolean): void {\n    if (healthy !== this.healthy) {\n      this.healthy = healthy;\n      /* A change to this wrapper's health state only affects the overall\n       * reported health state if the child is healthy. */\n      if (this.child.isHealthy()) {\n        this.updateHealthListeners();\n      }\n    }\n  }\n  getRealSubchannel(): Subchannel {\n    return this.child.getRealSubchannel();\n  }\n  realSubchannelEquals(other: SubchannelInterface): boolean {\n    return this.getRealSubchannel() === other.getRealSubchannel();\n  }\n  getCallCredentials(): CallCredentials {\n    return this.child.getCallCredentials();\n  }\n  getChannel(): Channel {\n      return this.child.getChannel();\n  }\n}\n","/*\n * Copyright 2019 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport { ChannelCredentials } from './channel-credentials';\nimport { ChannelOptions } from './channel-options';\nimport { ResolvingLoadBalancer } from './resolving-load-balancer';\nimport { SubchannelPool, getSubchannelPool } from './subchannel-pool';\nimport { ChannelControlHelper } from './load-balancer';\nimport { UnavailablePicker, Picker, QueuePicker, PickArgs, PickResult, PickResultType } from './picker';\nimport { Metadata } from './metadata';\nimport { Status, LogVerbosity, Propagate } from './constants';\nimport { FilterStackFactory } from './filter-stack';\nimport { CompressionFilterFactory } from './compression-filter';\nimport {\n  CallConfig,\n  ConfigSelector,\n  getDefaultAuthority,\n  mapUriDefaultScheme,\n} from './resolver';\nimport { trace, isTracerEnabled } from './logging';\nimport { SubchannelAddress } from './subchannel-address';\nimport { mapProxyName } from './http_proxy';\nimport { GrpcUri, parseUri, uriToString } from './uri-parser';\nimport { ServerSurfaceCall } from './server-call';\n\nimport { ConnectivityState } from './connectivity-state';\nimport {\n  ChannelInfo,\n  ChannelRef,\n  ChannelzCallTracker,\n  ChannelzChildrenTracker,\n  ChannelzTrace,\n  registerChannelzChannel,\n  SubchannelRef,\n  unregisterChannelzRef,\n} from './channelz';\nimport { LoadBalancingCall } from './load-balancing-call';\nimport { CallCredentials } from './call-credentials';\nimport { Call, CallStreamOptions, StatusObject } from './call-interface';\nimport { Deadline, deadlineToString } from './deadline';\nimport { ResolvingCall } from './resolving-call';\nimport { getNextCallNumber } from './call-number';\nimport { restrictControlPlaneStatusCode } from './control-plane-status';\nimport {\n  MessageBufferTracker,\n  RetryingCall,\n  RetryThrottler,\n} from './retrying-call';\nimport {\n  BaseSubchannelWrapper,\n  ConnectivityStateListener,\n  SubchannelInterface,\n} from './subchannel-interface';\n\n/**\n * See https://nodejs.org/api/timers.html#timers_setinterval_callback_delay_args\n */\nconst MAX_TIMEOUT_TIME = 2147483647;\n\nconst MIN_IDLE_TIMEOUT_MS = 1000;\n\n// 30 minutes\nconst DEFAULT_IDLE_TIMEOUT_MS = 30 * 60 * 1000;\n\ninterface ConnectivityStateWatcher {\n  currentState: ConnectivityState;\n  timer: NodeJS.Timeout | null;\n  callback: (error?: Error) => void;\n}\n\ninterface NoneConfigResult {\n  type: 'NONE';\n}\n\ninterface SuccessConfigResult {\n  type: 'SUCCESS';\n  config: CallConfig;\n}\n\ninterface ErrorConfigResult {\n  type: 'ERROR';\n  error: StatusObject;\n}\n\ntype GetConfigResult =\n  | NoneConfigResult\n  | SuccessConfigResult\n  | ErrorConfigResult;\n\nconst RETRY_THROTTLER_MAP: Map<string, RetryThrottler> = new Map();\n\nconst DEFAULT_RETRY_BUFFER_SIZE_BYTES = 1 << 24; // 16 MB\nconst DEFAULT_PER_RPC_RETRY_BUFFER_SIZE_BYTES = 1 << 20; // 1 MB\n\nclass ChannelSubchannelWrapper\n  extends BaseSubchannelWrapper\n  implements SubchannelInterface\n{\n  private refCount = 0;\n  private subchannelStateListener: ConnectivityStateListener;\n  constructor(\n    childSubchannel: SubchannelInterface,\n    private channel: InternalChannel\n  ) {\n    super(childSubchannel);\n    this.subchannelStateListener = (\n      subchannel,\n      previousState,\n      newState,\n      keepaliveTime\n    ) => {\n      channel.throttleKeepalive(keepaliveTime);\n    };\n  }\n\n  ref(): void {\n    if (this.refCount === 0) {\n      this.child.addConnectivityStateListener(this.subchannelStateListener);\n      this.channel.addWrappedSubchannel(this);\n    }\n    this.child.ref();\n    this.refCount += 1;\n  }\n\n  unref(): void {\n    this.child.unref();\n    this.refCount -= 1;\n    if (this.refCount <= 0) {\n      this.child.removeConnectivityStateListener(this.subchannelStateListener);\n      this.channel.removeWrappedSubchannel(this);\n    }\n  }\n}\n\nclass ShutdownPicker implements Picker {\n  pick(pickArgs: PickArgs): PickResult {\n    return {\n      pickResultType: PickResultType.DROP,\n      status: {\n        code: Status.UNAVAILABLE,\n        details: 'Channel closed before call started',\n        metadata: new Metadata()\n      },\n      subchannel: null,\n      onCallStarted: null,\n      onCallEnded: null\n    }\n  }\n}\n\nexport const SUBCHANNEL_ARGS_EXCLUDE_KEY_PREFIX = 'grpc.internal.no_subchannel';\nclass ChannelzInfoTracker {\n  readonly trace = new ChannelzTrace();\n  readonly callTracker = new ChannelzCallTracker();\n  readonly childrenTracker = new ChannelzChildrenTracker();\n  state: ConnectivityState = ConnectivityState.IDLE;\n  constructor(private target: string) {}\n\n  getChannelzInfoCallback(): () => ChannelInfo {\n    return () => {\n      return {\n        target: this.target,\n        state: this.state,\n        trace: this.trace,\n        callTracker: this.callTracker,\n        children: this.childrenTracker.getChildLists()\n      };\n    };\n  }\n}\n\nexport class InternalChannel {\n  private readonly resolvingLoadBalancer: ResolvingLoadBalancer;\n  private readonly subchannelPool: SubchannelPool;\n  private connectivityState: ConnectivityState = ConnectivityState.IDLE;\n  private currentPicker: Picker = new UnavailablePicker();\n  /**\n   * Calls queued up to get a call config. Should only be populated before the\n   * first time the resolver returns a result, which includes the ConfigSelector.\n   */\n  private configSelectionQueue: ResolvingCall[] = [];\n  private pickQueue: LoadBalancingCall[] = [];\n  private connectivityStateWatchers: ConnectivityStateWatcher[] = [];\n  private readonly defaultAuthority: string;\n  private readonly filterStackFactory: FilterStackFactory;\n  private readonly target: GrpcUri;\n  /**\n   * This timer does not do anything on its own. Its purpose is to hold the\n   * event loop open while there are any pending calls for the channel that\n   * have not yet been assigned to specific subchannels. In other words,\n   * the invariant is that callRefTimer is reffed if and only if pickQueue\n   * is non-empty. In addition, the timer is null while the state is IDLE or\n   * SHUTDOWN and there are no pending calls.\n   */\n  private callRefTimer: NodeJS.Timeout | null = null;\n  private configSelector: ConfigSelector | null = null;\n  /**\n   * This is the error from the name resolver if it failed most recently. It\n   * is only used to end calls that start while there is no config selector\n   * and the name resolver is in backoff, so it should be nulled if\n   * configSelector becomes set or the channel state becomes anything other\n   * than TRANSIENT_FAILURE.\n   */\n  private currentResolutionError: StatusObject | null = null;\n  private readonly retryBufferTracker: MessageBufferTracker;\n  private keepaliveTime: number;\n  private readonly wrappedSubchannels: Set<ChannelSubchannelWrapper> =\n    new Set();\n\n  private callCount = 0;\n  private idleTimer: NodeJS.Timeout | null = null;\n  private readonly idleTimeoutMs: number;\n  private lastActivityTimestamp: Date;\n\n  // Channelz info\n  private readonly channelzEnabled: boolean = true;\n  private readonly channelzRef: ChannelRef;\n  private readonly channelzInfoTracker: ChannelzInfoTracker;\n\n  /**\n   * Randomly generated ID to be passed to the config selector, for use by\n   * ring_hash in xDS. An integer distributed approximately uniformly between\n   * 0 and MAX_SAFE_INTEGER.\n   */\n  private readonly randomChannelId = Math.floor(\n    Math.random() * Number.MAX_SAFE_INTEGER\n  );\n\n  constructor(\n    target: string,\n    private readonly credentials: ChannelCredentials,\n    private readonly options: ChannelOptions\n  ) {\n    if (typeof target !== 'string') {\n      throw new TypeError('Channel target must be a string');\n    }\n    if (!(credentials instanceof ChannelCredentials)) {\n      throw new TypeError(\n        'Channel credentials must be a ChannelCredentials object'\n      );\n    }\n    if (options) {\n      if (typeof options !== 'object') {\n        throw new TypeError('Channel options must be an object');\n      }\n    }\n    this.channelzInfoTracker = new ChannelzInfoTracker(target);\n    const originalTargetUri = parseUri(target);\n    if (originalTargetUri === null) {\n      throw new Error(`Could not parse target name \"${target}\"`);\n    }\n    /* This ensures that the target has a scheme that is registered with the\n     * resolver */\n    const defaultSchemeMapResult = mapUriDefaultScheme(originalTargetUri);\n    if (defaultSchemeMapResult === null) {\n      throw new Error(\n        `Could not find a default scheme for target name \"${target}\"`\n      );\n    }\n\n    if (this.options['grpc.enable_channelz'] === 0) {\n      this.channelzEnabled = false;\n    }\n\n    this.channelzRef = registerChannelzChannel(\n      target,\n      this.channelzInfoTracker.getChannelzInfoCallback(),\n      this.channelzEnabled\n    );\n    if (this.channelzEnabled) {\n      this.channelzInfoTracker.trace.addTrace('CT_INFO', 'Channel created');\n    }\n\n    if (this.options['grpc.default_authority']) {\n      this.defaultAuthority = this.options['grpc.default_authority'] as string;\n    } else {\n      this.defaultAuthority = getDefaultAuthority(defaultSchemeMapResult);\n    }\n    const proxyMapResult = mapProxyName(defaultSchemeMapResult, options);\n    this.target = proxyMapResult.target;\n    this.options = Object.assign({}, this.options, proxyMapResult.extraOptions);\n\n    /* The global boolean parameter to getSubchannelPool has the inverse meaning to what\n     * the grpc.use_local_subchannel_pool channel option means. */\n    this.subchannelPool = getSubchannelPool(\n      (this.options['grpc.use_local_subchannel_pool'] ?? 0) === 0\n    );\n    this.retryBufferTracker = new MessageBufferTracker(\n      this.options['grpc.retry_buffer_size'] ?? DEFAULT_RETRY_BUFFER_SIZE_BYTES,\n      this.options['grpc.per_rpc_retry_buffer_size'] ??\n        DEFAULT_PER_RPC_RETRY_BUFFER_SIZE_BYTES\n    );\n    this.keepaliveTime = this.options['grpc.keepalive_time_ms'] ?? -1;\n    this.idleTimeoutMs = Math.max(\n      this.options['grpc.client_idle_timeout_ms'] ?? DEFAULT_IDLE_TIMEOUT_MS,\n      MIN_IDLE_TIMEOUT_MS\n    );\n    const channelControlHelper: ChannelControlHelper = {\n      createSubchannel: (\n        subchannelAddress: SubchannelAddress,\n        subchannelArgs: ChannelOptions\n      ) => {\n        const finalSubchannelArgs: ChannelOptions = {};\n        for (const [key, value] of Object.entries(subchannelArgs)) {\n          if (!key.startsWith(SUBCHANNEL_ARGS_EXCLUDE_KEY_PREFIX)) {\n            finalSubchannelArgs[key] = value;\n          }\n        }\n        const subchannel = this.subchannelPool.getOrCreateSubchannel(\n          this.target,\n          subchannelAddress,\n          finalSubchannelArgs,\n          this.credentials\n        );\n        subchannel.throttleKeepalive(this.keepaliveTime);\n        if (this.channelzEnabled) {\n          this.channelzInfoTracker.trace.addTrace(\n            'CT_INFO',\n            'Created subchannel or used existing subchannel',\n            subchannel.getChannelzRef()\n          );\n        }\n        const wrappedSubchannel = new ChannelSubchannelWrapper(\n          subchannel,\n          this\n        );\n        return wrappedSubchannel;\n      },\n      updateState: (connectivityState: ConnectivityState, picker: Picker) => {\n        this.currentPicker = picker;\n        const queueCopy = this.pickQueue.slice();\n        this.pickQueue = [];\n        if (queueCopy.length > 0) {\n          this.callRefTimerUnref();\n        }\n        for (const call of queueCopy) {\n          call.doPick();\n        }\n        this.updateState(connectivityState);\n      },\n      requestReresolution: () => {\n        // This should never be called.\n        throw new Error(\n          'Resolving load balancer should never call requestReresolution'\n        );\n      },\n      addChannelzChild: (child: ChannelRef | SubchannelRef) => {\n        if (this.channelzEnabled) {\n          this.channelzInfoTracker.childrenTracker.refChild(child);\n        }\n      },\n      removeChannelzChild: (child: ChannelRef | SubchannelRef) => {\n        if (this.channelzEnabled) {\n          this.channelzInfoTracker.childrenTracker.unrefChild(child);\n        }\n      },\n    };\n    this.resolvingLoadBalancer = new ResolvingLoadBalancer(\n      this.target,\n      channelControlHelper,\n      this.options,\n      (serviceConfig, configSelector) => {\n        if (serviceConfig.retryThrottling) {\n          RETRY_THROTTLER_MAP.set(\n            this.getTarget(),\n            new RetryThrottler(\n              serviceConfig.retryThrottling.maxTokens,\n              serviceConfig.retryThrottling.tokenRatio,\n              RETRY_THROTTLER_MAP.get(this.getTarget())\n            )\n          );\n        } else {\n          RETRY_THROTTLER_MAP.delete(this.getTarget());\n        }\n        if (this.channelzEnabled) {\n          this.channelzInfoTracker.trace.addTrace(\n            'CT_INFO',\n            'Address resolution succeeded'\n          );\n        }\n        this.configSelector?.unref();\n        this.configSelector = configSelector;\n        this.currentResolutionError = null;\n        /* We process the queue asynchronously to ensure that the corresponding\n         * load balancer update has completed. */\n        process.nextTick(() => {\n          const localQueue = this.configSelectionQueue;\n          this.configSelectionQueue = [];\n          if (localQueue.length > 0) {\n            this.callRefTimerUnref();\n          }\n          for (const call of localQueue) {\n            call.getConfig();\n          }\n        });\n      },\n      status => {\n        if (this.channelzEnabled) {\n          this.channelzInfoTracker.trace.addTrace(\n            'CT_WARNING',\n            'Address resolution failed with code ' +\n              status.code +\n              ' and details \"' +\n              status.details +\n              '\"'\n          );\n        }\n        if (this.configSelectionQueue.length > 0) {\n          this.trace(\n            'Name resolution failed with calls queued for config selection'\n          );\n        }\n        if (this.configSelector === null) {\n          this.currentResolutionError = {\n            ...restrictControlPlaneStatusCode(status.code, status.details),\n            metadata: status.metadata,\n          };\n        }\n        const localQueue = this.configSelectionQueue;\n        this.configSelectionQueue = [];\n        if (localQueue.length > 0) {\n          this.callRefTimerUnref();\n        }\n        for (const call of localQueue) {\n          call.reportResolverError(status);\n        }\n      }\n    );\n    this.filterStackFactory = new FilterStackFactory([\n      new CompressionFilterFactory(this, this.options),\n    ]);\n    this.trace(\n      'Channel constructed with options ' +\n        JSON.stringify(options, undefined, 2)\n    );\n    const error = new Error();\n    if (isTracerEnabled('channel_stacktrace')){\n      trace(\n        LogVerbosity.DEBUG,\n        'channel_stacktrace',\n        '(' +\n          this.channelzRef.id +\n          ') ' +\n          'Channel constructed \\n' +\n          error.stack?.substring(error.stack.indexOf('\\n') + 1)\n      );\n    }\n    this.lastActivityTimestamp = new Date();\n  }\n\n  private trace(text: string, verbosityOverride?: LogVerbosity) {\n    trace(\n      verbosityOverride ?? LogVerbosity.DEBUG,\n      'channel',\n      '(' + this.channelzRef.id + ') ' + uriToString(this.target) + ' ' + text\n    );\n  }\n\n  private callRefTimerRef() {\n    if (!this.callRefTimer) {\n      this.callRefTimer = setInterval(() => {}, MAX_TIMEOUT_TIME)\n    }\n    // If the hasRef function does not exist, always run the code\n    if (!this.callRefTimer.hasRef?.()) {\n      this.trace(\n        'callRefTimer.ref | configSelectionQueue.length=' +\n          this.configSelectionQueue.length +\n          ' pickQueue.length=' +\n          this.pickQueue.length\n      );\n      this.callRefTimer.ref?.();\n    }\n  }\n\n  private callRefTimerUnref() {\n    // If the timer or the hasRef function does not exist, always run the code\n    if (!this.callRefTimer?.hasRef || this.callRefTimer.hasRef()) {\n      this.trace(\n        'callRefTimer.unref | configSelectionQueue.length=' +\n          this.configSelectionQueue.length +\n          ' pickQueue.length=' +\n          this.pickQueue.length\n      );\n      this.callRefTimer?.unref?.();\n    }\n  }\n\n  private removeConnectivityStateWatcher(\n    watcherObject: ConnectivityStateWatcher\n  ) {\n    const watcherIndex = this.connectivityStateWatchers.findIndex(\n      value => value === watcherObject\n    );\n    if (watcherIndex >= 0) {\n      this.connectivityStateWatchers.splice(watcherIndex, 1);\n    }\n  }\n\n  private updateState(newState: ConnectivityState): void {\n    trace(\n      LogVerbosity.DEBUG,\n      'connectivity_state',\n      '(' +\n        this.channelzRef.id +\n        ') ' +\n        uriToString(this.target) +\n        ' ' +\n        ConnectivityState[this.connectivityState] +\n        ' -> ' +\n        ConnectivityState[newState]\n    );\n    if (this.channelzEnabled) {\n      this.channelzInfoTracker.trace.addTrace(\n        'CT_INFO',\n        'Connectivity state change to ' + ConnectivityState[newState]\n      );\n    }\n    this.connectivityState = newState;\n    this.channelzInfoTracker.state = newState;\n    const watchersCopy = this.connectivityStateWatchers.slice();\n    for (const watcherObject of watchersCopy) {\n      if (newState !== watcherObject.currentState) {\n        if (watcherObject.timer) {\n          clearTimeout(watcherObject.timer);\n        }\n        this.removeConnectivityStateWatcher(watcherObject);\n        watcherObject.callback();\n      }\n    }\n    if (newState !== ConnectivityState.TRANSIENT_FAILURE) {\n      this.currentResolutionError = null;\n    }\n  }\n\n  throttleKeepalive(newKeepaliveTime: number) {\n    if (newKeepaliveTime > this.keepaliveTime) {\n      this.keepaliveTime = newKeepaliveTime;\n      for (const wrappedSubchannel of this.wrappedSubchannels) {\n        wrappedSubchannel.throttleKeepalive(newKeepaliveTime);\n      }\n    }\n  }\n\n  addWrappedSubchannel(wrappedSubchannel: ChannelSubchannelWrapper) {\n    this.wrappedSubchannels.add(wrappedSubchannel);\n  }\n\n  removeWrappedSubchannel(wrappedSubchannel: ChannelSubchannelWrapper) {\n    this.wrappedSubchannels.delete(wrappedSubchannel);\n  }\n\n  doPick(metadata: Metadata, extraPickInfo: { [key: string]: string }) {\n    return this.currentPicker.pick({\n      metadata: metadata,\n      extraPickInfo: extraPickInfo,\n    });\n  }\n\n  queueCallForPick(call: LoadBalancingCall) {\n    this.pickQueue.push(call);\n    this.callRefTimerRef();\n  }\n\n  getConfig(method: string, metadata: Metadata): GetConfigResult {\n    if (this.connectivityState !== ConnectivityState.SHUTDOWN) {\n      this.resolvingLoadBalancer.exitIdle();\n    }\n    if (this.configSelector) {\n      return {\n        type: 'SUCCESS',\n        config: this.configSelector.invoke(method, metadata, this.randomChannelId),\n      };\n    } else {\n      if (this.currentResolutionError) {\n        return {\n          type: 'ERROR',\n          error: this.currentResolutionError,\n        };\n      } else {\n        return {\n          type: 'NONE',\n        };\n      }\n    }\n  }\n\n  queueCallForConfig(call: ResolvingCall) {\n    this.configSelectionQueue.push(call);\n    this.callRefTimerRef();\n  }\n\n  private enterIdle() {\n    this.resolvingLoadBalancer.destroy();\n    this.updateState(ConnectivityState.IDLE);\n    this.currentPicker = new QueuePicker(this.resolvingLoadBalancer);\n    if (this.idleTimer) {\n      clearTimeout(this.idleTimer);\n      this.idleTimer = null;\n    }\n    if (this.callRefTimer) {\n      clearInterval(this.callRefTimer);\n      this.callRefTimer = null;\n    }\n  }\n\n  private startIdleTimeout(timeoutMs: number) {\n    this.idleTimer = setTimeout(() => {\n      if (this.callCount > 0) {\n        /* If there is currently a call, the channel will not go idle for a\n         * period of at least idleTimeoutMs, so check again after that time.\n         */\n        this.startIdleTimeout(this.idleTimeoutMs);\n        return;\n      }\n      const now = new Date();\n      const timeSinceLastActivity =\n        now.valueOf() - this.lastActivityTimestamp.valueOf();\n      if (timeSinceLastActivity >= this.idleTimeoutMs) {\n        this.trace(\n          'Idle timer triggered after ' +\n            this.idleTimeoutMs +\n            'ms of inactivity'\n        );\n        this.enterIdle();\n      } else {\n        /* Whenever the timer fires with the latest activity being too recent,\n         * set the timer again for the time when the time since the last\n         * activity is equal to the timeout. This should result in the timer\n         * firing no more than once every idleTimeoutMs/2 on average. */\n        this.startIdleTimeout(this.idleTimeoutMs - timeSinceLastActivity);\n      }\n    }, timeoutMs);\n    this.idleTimer.unref?.();\n  }\n\n  private maybeStartIdleTimer() {\n    if (\n      this.connectivityState !== ConnectivityState.SHUTDOWN &&\n      !this.idleTimer\n    ) {\n      this.startIdleTimeout(this.idleTimeoutMs);\n    }\n  }\n\n  private onCallStart() {\n    if (this.channelzEnabled) {\n      this.channelzInfoTracker.callTracker.addCallStarted();\n    }\n    this.callCount += 1;\n  }\n\n  private onCallEnd(status: StatusObject) {\n    if (this.channelzEnabled) {\n      if (status.code === Status.OK) {\n        this.channelzInfoTracker.callTracker.addCallSucceeded();\n      } else {\n        this.channelzInfoTracker.callTracker.addCallFailed();\n      }\n    }\n    this.callCount -= 1;\n    this.lastActivityTimestamp = new Date();\n    this.maybeStartIdleTimer();\n  }\n\n  createLoadBalancingCall(\n    callConfig: CallConfig,\n    method: string,\n    host: string,\n    credentials: CallCredentials,\n    deadline: Deadline\n  ): LoadBalancingCall {\n    const callNumber = getNextCallNumber();\n    this.trace(\n      'createLoadBalancingCall [' + callNumber + '] method=\"' + method + '\"'\n    );\n    return new LoadBalancingCall(\n      this,\n      callConfig,\n      method,\n      host,\n      credentials,\n      deadline,\n      callNumber\n    );\n  }\n\n  createRetryingCall(\n    callConfig: CallConfig,\n    method: string,\n    host: string,\n    credentials: CallCredentials,\n    deadline: Deadline\n  ): RetryingCall {\n    const callNumber = getNextCallNumber();\n    this.trace(\n      'createRetryingCall [' + callNumber + '] method=\"' + method + '\"'\n    );\n    return new RetryingCall(\n      this,\n      callConfig,\n      method,\n      host,\n      credentials,\n      deadline,\n      callNumber,\n      this.retryBufferTracker,\n      RETRY_THROTTLER_MAP.get(this.getTarget())\n    );\n  }\n\n  createResolvingCall(\n    method: string,\n    deadline: Deadline,\n    host: string | null | undefined,\n    parentCall: ServerSurfaceCall | null,\n    propagateFlags: number | null | undefined\n  ): ResolvingCall {\n    const callNumber = getNextCallNumber();\n    this.trace(\n      'createResolvingCall [' +\n        callNumber +\n        '] method=\"' +\n        method +\n        '\", deadline=' +\n        deadlineToString(deadline)\n    );\n    const finalOptions: CallStreamOptions = {\n      deadline: deadline,\n      flags: propagateFlags ?? Propagate.DEFAULTS,\n      host: host ?? this.defaultAuthority,\n      parentCall: parentCall,\n    };\n\n    const call = new ResolvingCall(\n      this,\n      method,\n      finalOptions,\n      this.filterStackFactory.clone(),\n      callNumber\n    );\n\n    this.onCallStart();\n    call.addStatusWatcher(status => {\n      this.onCallEnd(status);\n    });\n    return call;\n  }\n\n  close() {\n    this.resolvingLoadBalancer.destroy();\n    this.updateState(ConnectivityState.SHUTDOWN);\n    this.currentPicker = new ShutdownPicker();\n    for (const call of this.configSelectionQueue) {\n      call.cancelWithStatus(Status.UNAVAILABLE, 'Channel closed before call started');\n    }\n    this.configSelectionQueue = [];\n    for (const call of this.pickQueue) {\n      call.cancelWithStatus(Status.UNAVAILABLE, 'Channel closed before call started');\n    }\n    this.pickQueue = [];\n    if (this.callRefTimer) {\n      clearInterval(this.callRefTimer);\n    }\n    if (this.idleTimer) {\n      clearTimeout(this.idleTimer);\n    }\n    if (this.channelzEnabled) {\n      unregisterChannelzRef(this.channelzRef);\n    }\n\n    this.subchannelPool.unrefUnusedSubchannels();\n    this.configSelector?.unref();\n    this.configSelector = null;\n  }\n\n  getTarget() {\n    return uriToString(this.target);\n  }\n\n  getConnectivityState(tryToConnect: boolean) {\n    const connectivityState = this.connectivityState;\n    if (tryToConnect) {\n      this.resolvingLoadBalancer.exitIdle();\n      this.lastActivityTimestamp = new Date();\n      this.maybeStartIdleTimer();\n    }\n    return connectivityState;\n  }\n\n  watchConnectivityState(\n    currentState: ConnectivityState,\n    deadline: Date | number,\n    callback: (error?: Error) => void\n  ): void {\n    if (this.connectivityState === ConnectivityState.SHUTDOWN) {\n      throw new Error('Channel has been shut down');\n    }\n    let timer = null;\n    if (deadline !== Infinity) {\n      const deadlineDate: Date =\n        deadline instanceof Date ? deadline : new Date(deadline);\n      const now = new Date();\n      if (deadline === -Infinity || deadlineDate <= now) {\n        process.nextTick(\n          callback,\n          new Error('Deadline passed without connectivity state change')\n        );\n        return;\n      }\n      timer = setTimeout(() => {\n        this.removeConnectivityStateWatcher(watcherObject);\n        callback(\n          new Error('Deadline passed without connectivity state change')\n        );\n      }, deadlineDate.getTime() - now.getTime());\n    }\n    const watcherObject = {\n      currentState,\n      callback,\n      timer,\n    };\n    this.connectivityStateWatchers.push(watcherObject);\n  }\n\n  /**\n   * Get the channelz reference object for this channel. The returned value is\n   * garbage if channelz is disabled for this channel.\n   * @returns\n   */\n  getChannelzRef() {\n    return this.channelzRef;\n  }\n\n  createCall(\n    method: string,\n    deadline: Deadline,\n    host: string | null | undefined,\n    parentCall: ServerSurfaceCall | null,\n    propagateFlags: number | null | undefined\n  ): Call {\n    if (typeof method !== 'string') {\n      throw new TypeError('Channel#createCall: method must be a string');\n    }\n    if (!(typeof deadline === 'number' || deadline instanceof Date)) {\n      throw new TypeError(\n        'Channel#createCall: deadline must be a number or Date'\n      );\n    }\n    if (this.connectivityState === ConnectivityState.SHUTDOWN) {\n      throw new Error('Channel has been shut down');\n    }\n    return this.createResolvingCall(\n      method,\n      deadline,\n      host,\n      parentCall,\n      propagateFlags\n    );\n  }\n\n  getOptions() {\n    return this.options;\n  }\n}\n","/*\n * Copyright 2019 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport { ChannelCredentials } from './channel-credentials';\nimport { ChannelOptions } from './channel-options';\nimport { ServerSurfaceCall } from './server-call';\n\nimport { ConnectivityState } from './connectivity-state';\nimport type { ChannelRef } from './channelz';\nimport { Call } from './call-interface';\nimport { InternalChannel } from './internal-channel';\nimport { Deadline } from './deadline';\n\n/**\n * An interface that represents a communication channel to a server specified\n * by a given address.\n */\nexport interface Channel {\n  /**\n   * Close the channel. This has the same functionality as the existing\n   * grpc.Client.prototype.close\n   */\n  close(): void;\n  /**\n   * Return the target that this channel connects to\n   */\n  getTarget(): string;\n  /**\n   * Get the channel's current connectivity state. This method is here mainly\n   * because it is in the existing internal Channel class, and there isn't\n   * another good place to put it.\n   * @param tryToConnect If true, the channel will start connecting if it is\n   *     idle. Otherwise, idle channels will only start connecting when a\n   *     call starts.\n   */\n  getConnectivityState(tryToConnect: boolean): ConnectivityState;\n  /**\n   * Watch for connectivity state changes. This is also here mainly because\n   * it is in the existing external Channel class.\n   * @param currentState The state to watch for transitions from. This should\n   *     always be populated by calling getConnectivityState immediately\n   *     before.\n   * @param deadline A deadline for waiting for a state change\n   * @param callback Called with no error when a state change, or with an\n   *     error if the deadline passes without a state change.\n   */\n  watchConnectivityState(\n    currentState: ConnectivityState,\n    deadline: Date | number,\n    callback: (error?: Error) => void\n  ): void;\n  /**\n   * Get the channelz reference object for this channel. A request to the\n   * channelz service for the id in this object will provide information\n   * about this channel.\n   */\n  getChannelzRef(): ChannelRef;\n  /**\n   * Create a call object. Call is an opaque type that is used by the Client\n   * class. This function is called by the gRPC library when starting a\n   * request. Implementers should return an instance of Call that is returned\n   * from calling createCall on an instance of the provided Channel class.\n   * @param method The full method string to request.\n   * @param deadline The call deadline\n   * @param host A host string override for making the request\n   * @param parentCall A server call to propagate some information from\n   * @param propagateFlags A bitwise combination of elements of grpc.propagate\n   *     that indicates what information to propagate from parentCall.\n   */\n  createCall(\n    method: string,\n    deadline: Deadline,\n    host: string | null | undefined,\n    parentCall: ServerSurfaceCall | null,\n    propagateFlags: number | null | undefined\n  ): Call;\n}\n\nexport class ChannelImplementation implements Channel {\n  private internalChannel: InternalChannel;\n\n  constructor(\n    target: string,\n    credentials: ChannelCredentials,\n    options: ChannelOptions\n  ) {\n    if (typeof target !== 'string') {\n      throw new TypeError('Channel target must be a string');\n    }\n    if (!(credentials instanceof ChannelCredentials)) {\n      throw new TypeError(\n        'Channel credentials must be a ChannelCredentials object'\n      );\n    }\n    if (options) {\n      if (typeof options !== 'object') {\n        throw new TypeError('Channel options must be an object');\n      }\n    }\n\n    this.internalChannel = new InternalChannel(target, credentials, options);\n  }\n\n  close() {\n    this.internalChannel.close();\n  }\n\n  getTarget() {\n    return this.internalChannel.getTarget();\n  }\n\n  getConnectivityState(tryToConnect: boolean) {\n    return this.internalChannel.getConnectivityState(tryToConnect);\n  }\n\n  watchConnectivityState(\n    currentState: ConnectivityState,\n    deadline: Date | number,\n    callback: (error?: Error) => void\n  ): void {\n    this.internalChannel.watchConnectivityState(\n      currentState,\n      deadline,\n      callback\n    );\n  }\n\n  /**\n   * Get the channelz reference object for this channel. The returned value is\n   * garbage if channelz is disabled for this channel.\n   * @returns\n   */\n  getChannelzRef() {\n    return this.internalChannel.getChannelzRef();\n  }\n\n  createCall(\n    method: string,\n    deadline: Deadline,\n    host: string | null | undefined,\n    parentCall: ServerSurfaceCall | null,\n    propagateFlags: number | null | undefined\n  ): Call {\n    if (typeof method !== 'string') {\n      throw new TypeError('Channel#createCall: method must be a string');\n    }\n    if (!(typeof deadline === 'number' || deadline instanceof Date)) {\n      throw new TypeError(\n        'Channel#createCall: deadline must be a number or Date'\n      );\n    }\n    return this.internalChannel.createCall(\n      method,\n      deadline,\n      host,\n      parentCall,\n      propagateFlags\n    );\n  }\n}\n","/*\n * Copyright 2019 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport { EventEmitter } from 'events';\nimport { Duplex, Readable, Writable } from 'stream';\n\nimport { Status } from './constants';\nimport type { Deserialize, Serialize } from './make-client';\nimport { Metadata } from './metadata';\nimport type { ObjectReadable, ObjectWritable } from './object-stream';\nimport type { StatusObject, PartialStatusObject } from './call-interface';\nimport type { Deadline } from './deadline';\nimport type { ServerInterceptingCallInterface } from './server-interceptors';\nimport { AuthContext } from './auth-context';\nimport { PerRequestMetricRecorder } from './orca';\n\nexport type ServerStatusResponse = Partial<StatusObject>;\n\nexport type ServerErrorResponse = ServerStatusResponse & Error;\n\nexport type ServerSurfaceCall = {\n  cancelled: boolean;\n  readonly metadata: Metadata;\n  getPeer(): string;\n  sendMetadata(responseMetadata: Metadata): void;\n  getDeadline(): Deadline;\n  getPath(): string;\n  getHost(): string;\n  getAuthContext(): AuthContext;\n  getMetricsRecorder(): PerRequestMetricRecorder;\n} & EventEmitter;\n\nexport type ServerUnaryCall<RequestType, ResponseType> = ServerSurfaceCall & {\n  request: RequestType;\n};\nexport type ServerReadableStream<RequestType, ResponseType> =\n  ServerSurfaceCall & ObjectReadable<RequestType>;\nexport type ServerWritableStream<RequestType, ResponseType> =\n  ServerSurfaceCall &\n    ObjectWritable<ResponseType> & {\n      request: RequestType;\n      end: (metadata?: Metadata) => void;\n    };\nexport type ServerDuplexStream<RequestType, ResponseType> = ServerSurfaceCall &\n  ObjectReadable<RequestType> &\n  ObjectWritable<ResponseType> & { end: (metadata?: Metadata) => void };\n\nexport function serverErrorToStatus(\n  error: ServerErrorResponse | ServerStatusResponse,\n  overrideTrailers?: Metadata | undefined\n): PartialStatusObject {\n  const status: PartialStatusObject = {\n    code: Status.UNKNOWN,\n    details: 'message' in error ? error.message : 'Unknown Error',\n    metadata: overrideTrailers ?? error.metadata ?? null,\n  };\n\n  if (\n    'code' in error &&\n    typeof error.code === 'number' &&\n    Number.isInteger(error.code)\n  ) {\n    status.code = error.code;\n\n    if ('details' in error && typeof error.details === 'string') {\n      status.details = error.details!;\n    }\n  }\n  return status;\n}\n\nexport class ServerUnaryCallImpl<RequestType, ResponseType>\n  extends EventEmitter\n  implements ServerUnaryCall<RequestType, ResponseType>\n{\n  cancelled: boolean;\n\n  constructor(\n    private path: string,\n    private call: ServerInterceptingCallInterface,\n    public metadata: Metadata,\n    public request: RequestType\n  ) {\n    super();\n    this.cancelled = false;\n  }\n\n  getPeer(): string {\n    return this.call.getPeer();\n  }\n\n  sendMetadata(responseMetadata: Metadata): void {\n    this.call.sendMetadata(responseMetadata);\n  }\n\n  getDeadline(): Deadline {\n    return this.call.getDeadline();\n  }\n\n  getPath(): string {\n    return this.path;\n  }\n\n  getHost(): string {\n    return this.call.getHost();\n  }\n\n  getAuthContext(): AuthContext {\n    return this.call.getAuthContext();\n  }\n\n  getMetricsRecorder(): PerRequestMetricRecorder {\n    return this.call.getMetricsRecorder();\n  }\n}\n\nexport class ServerReadableStreamImpl<RequestType, ResponseType>\n  extends Readable\n  implements ServerReadableStream<RequestType, ResponseType>\n{\n  cancelled: boolean;\n\n  constructor(\n    private path: string,\n    private call: ServerInterceptingCallInterface,\n    public metadata: Metadata\n  ) {\n    super({ objectMode: true });\n    this.cancelled = false;\n  }\n\n  _read(size: number) {\n    this.call.startRead();\n  }\n\n  getPeer(): string {\n    return this.call.getPeer();\n  }\n\n  sendMetadata(responseMetadata: Metadata): void {\n    this.call.sendMetadata(responseMetadata);\n  }\n\n  getDeadline(): Deadline {\n    return this.call.getDeadline();\n  }\n\n  getPath(): string {\n    return this.path;\n  }\n\n  getHost(): string {\n    return this.call.getHost();\n  }\n\n  getAuthContext(): AuthContext {\n    return this.call.getAuthContext();\n  }\n\n  getMetricsRecorder(): PerRequestMetricRecorder {\n    return this.call.getMetricsRecorder();\n  }\n}\n\nexport class ServerWritableStreamImpl<RequestType, ResponseType>\n  extends Writable\n  implements ServerWritableStream<RequestType, ResponseType>\n{\n  cancelled: boolean;\n  private trailingMetadata: Metadata;\n  private pendingStatus: PartialStatusObject = {\n    code: Status.OK,\n    details: 'OK',\n  };\n\n  constructor(\n    private path: string,\n    private call: ServerInterceptingCallInterface,\n    public metadata: Metadata,\n    public request: RequestType\n  ) {\n    super({ objectMode: true });\n    this.cancelled = false;\n    this.trailingMetadata = new Metadata();\n\n    this.on('error', err => {\n      this.pendingStatus = serverErrorToStatus(err);\n      this.end();\n    });\n  }\n\n  getPeer(): string {\n    return this.call.getPeer();\n  }\n\n  sendMetadata(responseMetadata: Metadata): void {\n    this.call.sendMetadata(responseMetadata);\n  }\n\n  getDeadline(): Deadline {\n    return this.call.getDeadline();\n  }\n\n  getPath(): string {\n    return this.path;\n  }\n\n  getHost(): string {\n    return this.call.getHost();\n  }\n\n  getAuthContext(): AuthContext {\n    return this.call.getAuthContext();\n  }\n\n  getMetricsRecorder(): PerRequestMetricRecorder {\n    return this.call.getMetricsRecorder();\n  }\n\n  _write(\n    chunk: ResponseType,\n    encoding: string,\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    callback: (...args: any[]) => void\n  ) {\n    this.call.sendMessage(chunk, callback);\n  }\n\n  _final(callback: Function): void {\n    callback(null);\n    this.call.sendStatus({\n      ...this.pendingStatus,\n      metadata: this.pendingStatus.metadata ?? this.trailingMetadata,\n    });\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  end(metadata?: any) {\n    if (metadata) {\n      this.trailingMetadata = metadata;\n    }\n\n    return super.end();\n  }\n}\n\nexport class ServerDuplexStreamImpl<RequestType, ResponseType>\n  extends Duplex\n  implements ServerDuplexStream<RequestType, ResponseType>\n{\n  cancelled: boolean;\n  private trailingMetadata: Metadata;\n  private pendingStatus: PartialStatusObject = {\n    code: Status.OK,\n    details: 'OK',\n  };\n\n  constructor(\n    private path: string,\n    private call: ServerInterceptingCallInterface,\n    public metadata: Metadata\n  ) {\n    super({ objectMode: true });\n    this.cancelled = false;\n    this.trailingMetadata = new Metadata();\n\n    this.on('error', err => {\n      this.pendingStatus = serverErrorToStatus(err);\n      this.end();\n    });\n  }\n\n  getPeer(): string {\n    return this.call.getPeer();\n  }\n\n  sendMetadata(responseMetadata: Metadata): void {\n    this.call.sendMetadata(responseMetadata);\n  }\n\n  getDeadline(): Deadline {\n    return this.call.getDeadline();\n  }\n\n  getPath(): string {\n    return this.path;\n  }\n\n  getHost(): string {\n    return this.call.getHost();\n  }\n\n  getAuthContext(): AuthContext {\n    return this.call.getAuthContext();\n  }\n\n  getMetricsRecorder(): PerRequestMetricRecorder {\n    return this.call.getMetricsRecorder();\n  }\n\n  _read(size: number) {\n    this.call.startRead();\n  }\n\n  _write(\n    chunk: ResponseType,\n    encoding: string,\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    callback: (...args: any[]) => void\n  ) {\n    this.call.sendMessage(chunk, callback);\n  }\n\n  _final(callback: Function): void {\n    callback(null);\n    this.call.sendStatus({\n      ...this.pendingStatus,\n      metadata: this.pendingStatus.metadata ?? this.trailingMetadata,\n    });\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  end(metadata?: any) {\n    if (metadata) {\n      this.trailingMetadata = metadata;\n    }\n\n    return super.end();\n  }\n}\n\n// Unary response callback signature.\nexport type sendUnaryData<ResponseType> = (\n  error: ServerErrorResponse | ServerStatusResponse | null,\n  value?: ResponseType | null,\n  trailer?: Metadata,\n  flags?: number\n) => void;\n\n// User provided handler for unary calls.\nexport type handleUnaryCall<RequestType, ResponseType> = (\n  call: ServerUnaryCall<RequestType, ResponseType>,\n  callback: sendUnaryData<ResponseType>\n) => void;\n\n// User provided handler for client streaming calls.\nexport type handleClientStreamingCall<RequestType, ResponseType> = (\n  call: ServerReadableStream<RequestType, ResponseType>,\n  callback: sendUnaryData<ResponseType>\n) => void;\n\n// User provided handler for server streaming calls.\nexport type handleServerStreamingCall<RequestType, ResponseType> = (\n  call: ServerWritableStream<RequestType, ResponseType>\n) => void;\n\n// User provided handler for bidirectional streaming calls.\nexport type handleBidiStreamingCall<RequestType, ResponseType> = (\n  call: ServerDuplexStream<RequestType, ResponseType>\n) => void;\n\nexport type HandleCall<RequestType, ResponseType> =\n  | handleUnaryCall<RequestType, ResponseType>\n  | handleClientStreamingCall<RequestType, ResponseType>\n  | handleServerStreamingCall<RequestType, ResponseType>\n  | handleBidiStreamingCall<RequestType, ResponseType>;\n\nexport interface UnaryHandler<RequestType, ResponseType> {\n  func: handleUnaryCall<RequestType, ResponseType>;\n  serialize: Serialize<ResponseType>;\n  deserialize: Deserialize<RequestType>;\n  type: 'unary';\n  path: string;\n}\n\nexport interface ClientStreamingHandler<RequestType, ResponseType> {\n  func: handleClientStreamingCall<RequestType, ResponseType>;\n  serialize: Serialize<ResponseType>;\n  deserialize: Deserialize<RequestType>;\n  type: 'clientStream';\n  path: string;\n}\n\nexport interface ServerStreamingHandler<RequestType, ResponseType> {\n  func: handleServerStreamingCall<RequestType, ResponseType>;\n  serialize: Serialize<ResponseType>;\n  deserialize: Deserialize<RequestType>;\n  type: 'serverStream';\n  path: string;\n}\n\nexport interface BidiStreamingHandler<RequestType, ResponseType> {\n  func: handleBidiStreamingCall<RequestType, ResponseType>;\n  serialize: Serialize<ResponseType>;\n  deserialize: Deserialize<RequestType>;\n  type: 'bidi';\n  path: string;\n}\n\nexport type Handler<RequestType, ResponseType> =\n  | UnaryHandler<RequestType, ResponseType>\n  | ClientStreamingHandler<RequestType, ResponseType>\n  | ServerStreamingHandler<RequestType, ResponseType>\n  | BidiStreamingHandler<RequestType, ResponseType>;\n\nexport type HandlerType = 'bidi' | 'clientStream' | 'serverStream' | 'unary';\n","/*\n * Copyright 2019 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport { SecureServerOptions } from 'http2';\nimport { CIPHER_SUITES, getDefaultRootsData } from './tls-helpers';\nimport { SecureContextOptions } from 'tls';\nimport { ServerInterceptor } from '.';\nimport { CaCertificateUpdate, CaCertificateUpdateListener, CertificateProvider, IdentityCertificateUpdate, IdentityCertificateUpdateListener } from './certificate-provider';\n\nexport interface KeyCertPair {\n  private_key: Buffer;\n  cert_chain: Buffer;\n}\n\nexport interface SecureContextWatcher {\n  (context: SecureContextOptions | null): void;\n}\n\nexport abstract class ServerCredentials {\n  private watchers: Set<SecureContextWatcher> = new Set();\n  private latestContextOptions: SecureContextOptions | null = null;\n  constructor(private serverConstructorOptions: SecureServerOptions | null, contextOptions?: SecureContextOptions) {\n    this.latestContextOptions = contextOptions ?? null;\n  }\n\n  _addWatcher(watcher: SecureContextWatcher) {\n    this.watchers.add(watcher);\n  }\n  _removeWatcher(watcher: SecureContextWatcher) {\n    this.watchers.delete(watcher);\n  }\n  protected getWatcherCount() {\n    return this.watchers.size;\n  }\n  protected updateSecureContextOptions(options: SecureContextOptions | null) {\n    this.latestContextOptions = options;\n    for (const watcher of this.watchers) {\n      watcher(this.latestContextOptions);\n    }\n  }\n  _isSecure(): boolean {\n    return this.serverConstructorOptions !== null;\n  }\n  _getSecureContextOptions(): SecureContextOptions | null {\n    return this.latestContextOptions;\n  }\n  _getConstructorOptions(): SecureServerOptions | null {\n    return this.serverConstructorOptions;\n  }\n  _getInterceptors(): ServerInterceptor[] {\n    return [];\n  }\n  abstract _equals(other: ServerCredentials): boolean;\n\n  static createInsecure(): ServerCredentials {\n    return new InsecureServerCredentials();\n  }\n\n  static createSsl(\n    rootCerts: Buffer | null,\n    keyCertPairs: KeyCertPair[],\n    checkClientCertificate = false\n  ): ServerCredentials {\n    if (rootCerts !== null && !Buffer.isBuffer(rootCerts)) {\n      throw new TypeError('rootCerts must be null or a Buffer');\n    }\n\n    if (!Array.isArray(keyCertPairs)) {\n      throw new TypeError('keyCertPairs must be an array');\n    }\n\n    if (typeof checkClientCertificate !== 'boolean') {\n      throw new TypeError('checkClientCertificate must be a boolean');\n    }\n\n    const cert: Buffer[] = [];\n    const key: Buffer[] = [];\n\n    for (let i = 0; i < keyCertPairs.length; i++) {\n      const pair = keyCertPairs[i];\n\n      if (pair === null || typeof pair !== 'object') {\n        throw new TypeError(`keyCertPair[${i}] must be an object`);\n      }\n\n      if (!Buffer.isBuffer(pair.private_key)) {\n        throw new TypeError(`keyCertPair[${i}].private_key must be a Buffer`);\n      }\n\n      if (!Buffer.isBuffer(pair.cert_chain)) {\n        throw new TypeError(`keyCertPair[${i}].cert_chain must be a Buffer`);\n      }\n\n      cert.push(pair.cert_chain);\n      key.push(pair.private_key);\n    }\n\n    return new SecureServerCredentials({\n      requestCert: checkClientCertificate,\n      ciphers: CIPHER_SUITES,\n    }, {\n      ca: rootCerts ?? getDefaultRootsData() ?? undefined,\n      cert,\n      key,\n    });\n  }\n}\n\nclass InsecureServerCredentials extends ServerCredentials {\n  constructor() {\n    super(null);\n  }\n\n  _getSettings(): null {\n    return null;\n  }\n\n  _equals(other: ServerCredentials): boolean {\n    return other instanceof InsecureServerCredentials;\n  }\n}\n\nclass SecureServerCredentials extends ServerCredentials {\n  private options: SecureServerOptions;\n\n  constructor(constructorOptions: SecureServerOptions, contextOptions: SecureContextOptions) {\n    super(constructorOptions, contextOptions);\n    this.options = {...constructorOptions, ...contextOptions};\n  }\n\n  /**\n   * Checks equality by checking the options that are actually set by\n   * createSsl.\n   * @param other\n   * @returns\n   */\n  _equals(other: ServerCredentials): boolean {\n    if (this === other) {\n      return true;\n    }\n    if (!(other instanceof SecureServerCredentials)) {\n      return false;\n    }\n    // options.ca equality check\n    if (Buffer.isBuffer(this.options.ca) && Buffer.isBuffer(other.options.ca)) {\n      if (!this.options.ca.equals(other.options.ca)) {\n        return false;\n      }\n    } else {\n      if (this.options.ca !== other.options.ca) {\n        return false;\n      }\n    }\n    // options.cert equality check\n    if (Array.isArray(this.options.cert) && Array.isArray(other.options.cert)) {\n      if (this.options.cert.length !== other.options.cert.length) {\n        return false;\n      }\n      for (let i = 0; i < this.options.cert.length; i++) {\n        const thisCert = this.options.cert[i];\n        const otherCert = other.options.cert[i];\n        if (Buffer.isBuffer(thisCert) && Buffer.isBuffer(otherCert)) {\n          if (!thisCert.equals(otherCert)) {\n            return false;\n          }\n        } else {\n          if (thisCert !== otherCert) {\n            return false;\n          }\n        }\n      }\n    } else {\n      if (this.options.cert !== other.options.cert) {\n        return false;\n      }\n    }\n    // options.key equality check\n    if (Array.isArray(this.options.key) && Array.isArray(other.options.key)) {\n      if (this.options.key.length !== other.options.key.length) {\n        return false;\n      }\n      for (let i = 0; i < this.options.key.length; i++) {\n        const thisKey = this.options.key[i];\n        const otherKey = other.options.key[i];\n        if (Buffer.isBuffer(thisKey) && Buffer.isBuffer(otherKey)) {\n          if (!thisKey.equals(otherKey)) {\n            return false;\n          }\n        } else {\n          if (thisKey !== otherKey) {\n            return false;\n          }\n        }\n      }\n    } else {\n      if (this.options.key !== other.options.key) {\n        return false;\n      }\n    }\n    // options.requestCert equality check\n    if (this.options.requestCert !== other.options.requestCert) {\n      return false;\n    }\n    /* ciphers is derived from a value that is constant for the process, so no\n     * equality check is needed. */\n    return true;\n  }\n}\n\nclass CertificateProviderServerCredentials extends ServerCredentials {\n  private latestCaUpdate: CaCertificateUpdate | null = null;\n  private latestIdentityUpdate: IdentityCertificateUpdate | null = null;\n  private caCertificateUpdateListener: CaCertificateUpdateListener = this.handleCaCertificateUpdate.bind(this);\n  private identityCertificateUpdateListener: IdentityCertificateUpdateListener = this.handleIdentityCertitificateUpdate.bind(this);\n  constructor(\n    private identityCertificateProvider: CertificateProvider,\n    private caCertificateProvider: CertificateProvider | null,\n    private requireClientCertificate: boolean\n  ) {\n    super({\n      requestCert: caCertificateProvider !== null,\n      rejectUnauthorized: requireClientCertificate,\n      ciphers: CIPHER_SUITES\n    });\n  }\n  _addWatcher(watcher: SecureContextWatcher): void {\n    if (this.getWatcherCount() === 0) {\n      this.caCertificateProvider?.addCaCertificateListener(this.caCertificateUpdateListener);\n      this.identityCertificateProvider.addIdentityCertificateListener(this.identityCertificateUpdateListener);\n    }\n    super._addWatcher(watcher);\n  }\n  _removeWatcher(watcher: SecureContextWatcher): void {\n    super._removeWatcher(watcher);\n    if (this.getWatcherCount() === 0) {\n      this.caCertificateProvider?.removeCaCertificateListener(this.caCertificateUpdateListener);\n      this.identityCertificateProvider.removeIdentityCertificateListener(this.identityCertificateUpdateListener);\n    }\n  }\n  _equals(other: ServerCredentials): boolean {\n    if (this === other) {\n      return true;\n    }\n    if (!(other instanceof CertificateProviderServerCredentials)) {\n      return false;\n    }\n    return (\n      this.caCertificateProvider === other.caCertificateProvider &&\n      this.identityCertificateProvider === other.identityCertificateProvider &&\n      this.requireClientCertificate === other.requireClientCertificate\n    )\n  }\n\n  private calculateSecureContextOptions(): SecureContextOptions | null {\n    if (this.latestIdentityUpdate === null) {\n      return null;\n    }\n    if (this.caCertificateProvider !== null && this.latestCaUpdate === null) {\n      return null;\n    }\n    return {\n      ca: this.latestCaUpdate?.caCertificate,\n      cert: [this.latestIdentityUpdate.certificate],\n      key: [this.latestIdentityUpdate.privateKey],\n    };\n  }\n\n  private finalizeUpdate() {\n    const secureContextOptions = this.calculateSecureContextOptions();\n    this.updateSecureContextOptions(secureContextOptions);\n  }\n\n  private handleCaCertificateUpdate(update: CaCertificateUpdate | null) {\n    this.latestCaUpdate = update;\n    this.finalizeUpdate();\n  }\n\n  private handleIdentityCertitificateUpdate(update: IdentityCertificateUpdate | null) {\n    this.latestIdentityUpdate = update;\n    this.finalizeUpdate();\n  }\n}\n\nexport function createCertificateProviderServerCredentials(\n  caCertificateProvider: CertificateProvider,\n  identityCertificateProvider: CertificateProvider | null,\n  requireClientCertificate: boolean\n) {\n  return new CertificateProviderServerCredentials(\n    caCertificateProvider,\n    identityCertificateProvider,\n    requireClientCertificate);\n}\n\nclass InterceptorServerCredentials extends ServerCredentials {\n  constructor(private readonly childCredentials: ServerCredentials, private readonly interceptors: ServerInterceptor[]) {\n    super({});\n  }\n  _isSecure(): boolean {\n    return this.childCredentials._isSecure();\n  }\n  _equals(other: ServerCredentials): boolean {\n    if (!(other instanceof InterceptorServerCredentials)) {\n      return false;\n    }\n    if (!(this.childCredentials._equals(other.childCredentials))) {\n      return false;\n    }\n    if (this.interceptors.length !== other.interceptors.length) {\n      return false;\n    }\n    for (let i = 0; i < this.interceptors.length; i++) {\n      if (this.interceptors[i] !== other.interceptors[i]) {\n        return false;\n      }\n    }\n    return true;\n  }\n  override _getInterceptors(): ServerInterceptor[] {\n    return this.interceptors;\n  }\n  override _addWatcher(watcher: SecureContextWatcher): void {\n    this.childCredentials._addWatcher(watcher);\n  }\n  override _removeWatcher(watcher: SecureContextWatcher): void {\n    this.childCredentials._removeWatcher(watcher);\n  }\n  override _getConstructorOptions(): SecureServerOptions | null {\n    return this.childCredentials._getConstructorOptions();\n  }\n  override _getSecureContextOptions(): SecureContextOptions | null {\n    return this.childCredentials._getSecureContextOptions();\n  }\n}\n\nexport function createServerCredentialsWithInterceptors(credentials: ServerCredentials, interceptors: ServerInterceptor[]): ServerCredentials {\n  return new InterceptorServerCredentials(credentials, interceptors);\n}\n","/*\n * Copyright 2022 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nexport interface Duration {\n  seconds: number;\n  nanos: number;\n}\n\nexport interface DurationMessage {\n  seconds: string;\n  nanos: number;\n}\n\nexport function durationMessageToDuration(message: DurationMessage): Duration {\n  return {\n    seconds: Number.parseInt(message.seconds),\n    nanos: message.nanos\n  };\n}\n\nexport function msToDuration(millis: number): Duration {\n  return {\n    seconds: (millis / 1000) | 0,\n    nanos: ((millis % 1000) * 1_000_000) | 0,\n  };\n}\n\nexport function durationToMs(duration: Duration): number {\n  return (duration.seconds * 1000 + duration.nanos / 1_000_000) | 0;\n}\n\nexport function isDuration(value: any): value is Duration {\n  return typeof value.seconds === 'number' && typeof value.nanos === 'number';\n}\n\nexport function isDurationMessage(value: any): value is DurationMessage {\n  return typeof value.seconds === 'string' && typeof value.nanos === 'number';\n}\n\nconst durationRegex = /^(\\d+)(?:\\.(\\d+))?s$/;\nexport function parseDuration(value: string): Duration | null {\n  const match = value.match(durationRegex);\n  if (!match) {\n    return null;\n  }\n  return {\n    seconds: Number.parseInt(match[1], 10),\n    nanos: match[2] ? Number.parseInt(match[2].padEnd(9, '0'), 10) : 0\n  };\n}\n\nexport function durationToString(duration: Duration): string {\n  if (duration.nanos === 0) {\n    return `${duration.seconds}s`;\n  }\n  let scaleFactor: number;\n  if (duration.nanos % 1_000_000 === 0) {\n    scaleFactor = 1_000_000;\n  } else if (duration.nanos % 1_000 === 0) {\n    scaleFactor = 1_000;\n  } else {\n    scaleFactor = 1;\n  }\n  return `${duration.seconds}.${duration.nanos/scaleFactor}s`;\n}\n","/*\n * Copyright 2025 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport { OrcaLoadReport, OrcaLoadReport__Output } from \"./generated/xds/data/orca/v3/OrcaLoadReport\";\n\nimport type { loadSync } from '@grpc/proto-loader';\nimport { ProtoGrpcType as OrcaProtoGrpcType } from \"./generated/orca\";\nimport { loadPackageDefinition } from \"./make-client\";\nimport { OpenRcaServiceClient, OpenRcaServiceHandlers } from \"./generated/xds/service/orca/v3/OpenRcaService\";\nimport { durationMessageToDuration, durationToMs, msToDuration } from \"./duration\";\nimport { Server } from \"./server\";\nimport { ChannelCredentials } from \"./channel-credentials\";\nimport { Channel } from \"./channel\";\nimport { OnCallEnded } from \"./picker\";\nimport { DataProducer, Subchannel } from \"./subchannel\";\nimport { BaseSubchannelWrapper, DataWatcher, SubchannelInterface } from \"./subchannel-interface\";\nimport { ClientReadableStream, ServiceError } from \"./call\";\nimport { Status } from \"./constants\";\nimport { BackoffTimeout } from \"./backoff-timeout\";\nimport { ConnectivityState } from \"./connectivity-state\";\n\nconst loadedOrcaProto: OrcaProtoGrpcType | null = null;\nfunction loadOrcaProto(): OrcaProtoGrpcType {\n  if (loadedOrcaProto) {\n    return loadedOrcaProto;\n  }\n  /* The purpose of this complexity is to avoid loading @grpc/proto-loader at\n   * runtime for users who will not use/enable ORCA. */\n  const loaderLoadSync = require('@grpc/proto-loader')\n    .loadSync as typeof loadSync;\n  const loadedProto = loaderLoadSync('xds/service/orca/v3/orca.proto', {\n    keepCase: true,\n    longs: String,\n    enums: String,\n    defaults: true,\n    oneofs: true,\n    includeDirs: [\n      `${__dirname}/../../proto/xds`,\n      `${__dirname}/../../proto/protoc-gen-validate`\n    ],\n  });\n  return loadPackageDefinition(loadedProto) as unknown as OrcaProtoGrpcType;\n}\n\n/**\n * ORCA metrics recorder for a single request\n */\nexport class PerRequestMetricRecorder {\n  private message: OrcaLoadReport = {};\n\n  /**\n   * Records a request cost metric measurement for the call.\n   * @param name\n   * @param value\n   */\n  recordRequestCostMetric(name: string, value: number) {\n    if (!this.message.request_cost) {\n      this.message.request_cost = {};\n    }\n    this.message.request_cost[name] = value;\n  }\n\n  /**\n   * Records a request cost metric measurement for the call.\n   * @param name\n   * @param value\n   */\n  recordUtilizationMetric(name: string, value: number) {\n    if (!this.message.utilization) {\n      this.message.utilization = {};\n    }\n    this.message.utilization[name] = value;\n  }\n\n  /**\n   * Records an opaque named metric measurement for the call.\n   * @param name\n   * @param value\n   */\n  recordNamedMetric(name: string, value: number) {\n    if (!this.message.named_metrics) {\n      this.message.named_metrics = {};\n    }\n    this.message.named_metrics[name] = value;\n  }\n\n  /**\n   * Records the CPU utilization metric measurement for the call.\n   * @param value\n   */\n  recordCPUUtilizationMetric(value: number) {\n    this.message.cpu_utilization = value;\n  }\n\n  /**\n   * Records the memory utilization metric measurement for the call.\n   * @param value\n   */\n  recordMemoryUtilizationMetric(value: number) {\n    this.message.mem_utilization = value;\n  }\n\n  /**\n   * Records the memory utilization metric measurement for the call.\n   * @param value\n   */\n  recordApplicationUtilizationMetric(value: number) {\n    this.message.application_utilization = value;\n  }\n\n  /**\n   * Records the queries per second measurement.\n   * @param value\n   */\n  recordQpsMetric(value: number) {\n    this.message.rps_fractional = value;\n  }\n\n  /**\n   * Records the errors per second measurement.\n   * @param value\n   */\n  recordEpsMetric(value: number) {\n    this.message.eps = value;\n  }\n\n  serialize(): Buffer {\n    const orcaProto = loadOrcaProto();\n    return orcaProto.xds.data.orca.v3.OrcaLoadReport.serialize(this.message);\n  }\n}\n\nconst DEFAULT_REPORT_INTERVAL_MS = 30_000;\n\nexport class ServerMetricRecorder {\n  private message: OrcaLoadReport = {};\n\n  private serviceImplementation: OpenRcaServiceHandlers = {\n    StreamCoreMetrics: call => {\n      const reportInterval = call.request.report_interval ?\n        durationToMs(durationMessageToDuration(call.request.report_interval)) :\n        DEFAULT_REPORT_INTERVAL_MS;\n      const reportTimer = setInterval(() => {\n        call.write(this.message);\n      }, reportInterval);\n      call.on('cancelled', () => {\n        clearInterval(reportTimer);\n      })\n    }\n  }\n\n  putUtilizationMetric(name: string, value: number) {\n    if (!this.message.utilization) {\n      this.message.utilization = {};\n    }\n    this.message.utilization[name] = value;\n  }\n\n  setAllUtilizationMetrics(metrics: {[name: string]: number}) {\n    this.message.utilization = {...metrics};\n  }\n\n  deleteUtilizationMetric(name: string) {\n    delete this.message.utilization?.[name];\n  }\n\n  setCpuUtilizationMetric(value: number) {\n    this.message.cpu_utilization = value;\n  }\n\n  deleteCpuUtilizationMetric() {\n    delete this.message.cpu_utilization;\n  }\n\n  setApplicationUtilizationMetric(value: number) {\n    this.message.application_utilization = value;\n  }\n\n  deleteApplicationUtilizationMetric() {\n    delete this.message.application_utilization;\n  }\n\n  setQpsMetric(value: number) {\n    this.message.rps_fractional = value;\n  }\n\n  deleteQpsMetric() {\n    delete this.message.rps_fractional;\n  }\n\n  setEpsMetric(value: number) {\n    this.message.eps = value;\n  }\n\n  deleteEpsMetric() {\n    delete this.message.eps;\n  }\n\n  addToServer(server: Server) {\n    const serviceDefinition = loadOrcaProto().xds.service.orca.v3.OpenRcaService.service;\n    server.addService(serviceDefinition, this.serviceImplementation);\n  }\n}\n\nexport function createOrcaClient(channel: Channel): OpenRcaServiceClient {\n  const ClientClass = loadOrcaProto().xds.service.orca.v3.OpenRcaService;\n  return new ClientClass('unused', ChannelCredentials.createInsecure(), {channelOverride: channel});\n}\n\nexport type MetricsListener = (loadReport: OrcaLoadReport__Output) => void;\n\nexport const GRPC_METRICS_HEADER = 'endpoint-load-metrics-bin';\nconst PARSED_LOAD_REPORT_KEY = 'grpc_orca_load_report';\n\n/**\n * Create an onCallEnded callback for use in a picker.\n * @param listener The listener to handle metrics, whenever they are provided.\n * @param previousOnCallEnded The previous onCallEnded callback to propagate\n * to, if applicable.\n * @returns\n */\nexport function createMetricsReader(listener: MetricsListener, previousOnCallEnded: OnCallEnded | null): OnCallEnded {\n  return (code, details, metadata) => {\n    let parsedLoadReport = metadata.getOpaque(PARSED_LOAD_REPORT_KEY) as (OrcaLoadReport__Output | undefined);\n    if (parsedLoadReport) {\n      listener(parsedLoadReport);\n    } else {\n      const serializedLoadReport = metadata.get(GRPC_METRICS_HEADER);\n      if (serializedLoadReport.length > 0) {\n        const orcaProto = loadOrcaProto();\n        parsedLoadReport = orcaProto.xds.data.orca.v3.OrcaLoadReport.deserialize(serializedLoadReport[0] as Buffer);\n        listener(parsedLoadReport);\n        metadata.setOpaque(PARSED_LOAD_REPORT_KEY, parsedLoadReport);\n      }\n    }\n    if (previousOnCallEnded) {\n      previousOnCallEnded(code, details, metadata);\n    }\n  }\n}\n\nconst DATA_PRODUCER_KEY = 'orca_oob_metrics';\n\nclass OobMetricsDataWatcher implements DataWatcher {\n  private dataProducer: DataProducer | null = null;\n  constructor(private metricsListener: MetricsListener, private intervalMs: number) {}\n  setSubchannel(subchannel: Subchannel): void {\n    const producer = subchannel.getOrCreateDataProducer(DATA_PRODUCER_KEY, createOobMetricsDataProducer);\n    this.dataProducer = producer;\n    producer.addDataWatcher(this);\n  }\n  destroy(): void {\n    this.dataProducer?.removeDataWatcher(this);\n  }\n  getInterval(): number {\n    return this.intervalMs;\n  }\n  onMetricsUpdate(metrics: OrcaLoadReport__Output) {\n    this.metricsListener(metrics);\n  }\n}\n\nclass OobMetricsDataProducer implements DataProducer {\n  private dataWatchers: Set<OobMetricsDataWatcher> = new Set();\n  private orcaSupported = true;\n  private client: OpenRcaServiceClient;\n  private metricsCall: ClientReadableStream<OrcaLoadReport__Output> | null = null;\n  private currentInterval = Infinity;\n  private backoffTimer = new BackoffTimeout(() => this.updateMetricsSubscription());\n  private subchannelStateListener = () => this.updateMetricsSubscription();\n  constructor(private subchannel: Subchannel) {\n    const channel = subchannel.getChannel();\n    this.client = createOrcaClient(channel);\n    subchannel.addConnectivityStateListener(this.subchannelStateListener);\n  }\n  addDataWatcher(dataWatcher: OobMetricsDataWatcher): void {\n    this.dataWatchers.add(dataWatcher);\n    this.updateMetricsSubscription();\n  }\n  removeDataWatcher(dataWatcher: OobMetricsDataWatcher): void {\n    this.dataWatchers.delete(dataWatcher);\n    if (this.dataWatchers.size === 0) {\n      this.subchannel.removeDataProducer(DATA_PRODUCER_KEY);\n      this.metricsCall?.cancel();\n      this.metricsCall = null;\n      this.client.close();\n      this.subchannel.removeConnectivityStateListener(this.subchannelStateListener);\n    } else {\n      this.updateMetricsSubscription();\n    }\n  }\n  private updateMetricsSubscription() {\n    if (this.dataWatchers.size === 0 || !this.orcaSupported || this.subchannel.getConnectivityState() !== ConnectivityState.READY) {\n      return;\n    }\n    const newInterval = Math.min(...Array.from(this.dataWatchers).map(watcher => watcher.getInterval()));\n    if (!this.metricsCall || newInterval !== this.currentInterval) {\n      this.metricsCall?.cancel();\n      this.currentInterval = newInterval;\n      const metricsCall = this.client.streamCoreMetrics({report_interval: msToDuration(newInterval)});\n      this.metricsCall = metricsCall;\n      metricsCall.on('data', (report: OrcaLoadReport__Output) => {\n        this.dataWatchers.forEach(watcher => {\n          watcher.onMetricsUpdate(report);\n        });\n      });\n      metricsCall.on('error', (error: ServiceError) => {\n        this.metricsCall = null;\n        if (error.code === Status.UNIMPLEMENTED) {\n          this.orcaSupported = false;\n          return;\n        }\n        if (error.code === Status.CANCELLED) {\n          return;\n        }\n        this.backoffTimer.runOnce();\n      });\n    }\n  }\n}\n\nexport class OrcaOobMetricsSubchannelWrapper extends BaseSubchannelWrapper {\n  constructor(child: SubchannelInterface, metricsListener: MetricsListener, intervalMs: number) {\n    super(child);\n    this.addDataWatcher(new OobMetricsDataWatcher(metricsListener, intervalMs));\n  }\n\n  getWrappedSubchannel(): SubchannelInterface {\n    return this.child;\n  }\n}\n\nfunction createOobMetricsDataProducer(subchannel: Subchannel) {\n  return new OobMetricsDataProducer(subchannel);\n}\n","/*\n * Copyright 2024 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport { PartialStatusObject } from './call-interface';\nimport { ServerMethodDefinition } from './make-client';\nimport { Metadata } from './metadata';\nimport { ChannelOptions } from './channel-options';\nimport { Handler } from './server-call';\nimport { Deadline } from './deadline';\nimport {\n  DEFAULT_MAX_RECEIVE_MESSAGE_LENGTH,\n  DEFAULT_MAX_SEND_MESSAGE_LENGTH,\n  LogVerbosity,\n  Status,\n} from './constants';\nimport * as http2 from 'http2';\nimport { getErrorMessage } from './error';\nimport * as zlib from 'zlib';\nimport { StreamDecoder } from './stream-decoder';\nimport { CallEventTracker } from './transport';\nimport * as logging from './logging';\nimport { AuthContext } from './auth-context';\nimport { TLSSocket } from 'tls';\nimport { GRPC_METRICS_HEADER, PerRequestMetricRecorder } from './orca';\n\nconst TRACER_NAME = 'server_call';\n\nfunction trace(text: string) {\n  logging.trace(LogVerbosity.DEBUG, TRACER_NAME, text);\n}\n\nexport interface ServerMetadataListener {\n  (metadata: Metadata, next: (metadata: Metadata) => void): void;\n}\n\nexport interface ServerMessageListener {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  (message: any, next: (message: any) => void): void;\n}\n\nexport interface ServerHalfCloseListener {\n  (next: () => void): void;\n}\n\nexport interface ServerCancelListener {\n  (): void;\n}\n\nexport interface FullServerListener {\n  onReceiveMetadata: ServerMetadataListener;\n  onReceiveMessage: ServerMessageListener;\n  onReceiveHalfClose: ServerHalfCloseListener;\n  onCancel: ServerCancelListener;\n}\n\nexport type ServerListener = Partial<FullServerListener>;\n\nexport class ServerListenerBuilder {\n  private metadata: ServerMetadataListener | undefined = undefined;\n  private message: ServerMessageListener | undefined = undefined;\n  private halfClose: ServerHalfCloseListener | undefined = undefined;\n  private cancel: ServerCancelListener | undefined = undefined;\n\n  withOnReceiveMetadata(onReceiveMetadata: ServerMetadataListener): this {\n    this.metadata = onReceiveMetadata;\n    return this;\n  }\n\n  withOnReceiveMessage(onReceiveMessage: ServerMessageListener): this {\n    this.message = onReceiveMessage;\n    return this;\n  }\n\n  withOnReceiveHalfClose(onReceiveHalfClose: ServerHalfCloseListener): this {\n    this.halfClose = onReceiveHalfClose;\n    return this;\n  }\n\n  withOnCancel(onCancel: ServerCancelListener): this {\n    this.cancel = onCancel;\n    return this;\n  }\n\n  build(): ServerListener {\n    return {\n      onReceiveMetadata: this.metadata,\n      onReceiveMessage: this.message,\n      onReceiveHalfClose: this.halfClose,\n      onCancel: this.cancel,\n    };\n  }\n}\n\nexport interface InterceptingServerListener {\n  onReceiveMetadata(metadata: Metadata): void;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  onReceiveMessage(message: any): void;\n  onReceiveHalfClose(): void;\n  onCancel(): void;\n}\n\nexport function isInterceptingServerListener(\n  listener: ServerListener | InterceptingServerListener\n): listener is InterceptingServerListener {\n  return (\n    listener.onReceiveMetadata !== undefined &&\n    listener.onReceiveMetadata.length === 1\n  );\n}\n\nclass InterceptingServerListenerImpl implements InterceptingServerListener {\n  /**\n   * Once the call is cancelled, ignore all other events.\n   */\n  private cancelled = false;\n  private processingMetadata = false;\n  private hasPendingMessage = false;\n  private pendingMessage: any = null;\n  private processingMessage = false;\n  private hasPendingHalfClose = false;\n\n  constructor(\n    private listener: FullServerListener,\n    private nextListener: InterceptingServerListener\n  ) {}\n\n  private processPendingMessage() {\n    if (this.hasPendingMessage) {\n      this.nextListener.onReceiveMessage(this.pendingMessage);\n      this.pendingMessage = null;\n      this.hasPendingMessage = false;\n    }\n  }\n\n  private processPendingHalfClose() {\n    if (this.hasPendingHalfClose) {\n      this.nextListener.onReceiveHalfClose();\n      this.hasPendingHalfClose = false;\n    }\n  }\n\n  onReceiveMetadata(metadata: Metadata): void {\n    if (this.cancelled) {\n      return;\n    }\n    this.processingMetadata = true;\n    this.listener.onReceiveMetadata(metadata, interceptedMetadata => {\n      this.processingMetadata = false;\n      if (this.cancelled) {\n        return;\n      }\n      this.nextListener.onReceiveMetadata(interceptedMetadata);\n      this.processPendingMessage();\n      this.processPendingHalfClose();\n    });\n  }\n  onReceiveMessage(message: any): void {\n    if (this.cancelled) {\n      return;\n    }\n    this.processingMessage = true;\n    this.listener.onReceiveMessage(message, msg => {\n      this.processingMessage = false;\n      if (this.cancelled) {\n        return;\n      }\n      if (this.processingMetadata) {\n        this.pendingMessage = msg;\n        this.hasPendingMessage = true;\n      } else {\n        this.nextListener.onReceiveMessage(msg);\n        this.processPendingHalfClose();\n      }\n    });\n  }\n  onReceiveHalfClose(): void {\n    if (this.cancelled) {\n      return;\n    }\n    this.listener.onReceiveHalfClose(() => {\n      if (this.cancelled) {\n        return;\n      }\n      if (this.processingMetadata || this.processingMessage) {\n        this.hasPendingHalfClose = true;\n      } else {\n        this.nextListener.onReceiveHalfClose();\n      }\n    });\n  }\n  onCancel(): void {\n    this.cancelled = true;\n    this.listener.onCancel();\n    this.nextListener.onCancel();\n  }\n}\n\nexport interface StartResponder {\n  (next: (listener?: ServerListener) => void): void;\n}\n\nexport interface MetadataResponder {\n  (metadata: Metadata, next: (metadata: Metadata) => void): void;\n}\n\nexport interface MessageResponder {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  (message: any, next: (message: any) => void): void;\n}\n\nexport interface StatusResponder {\n  (\n    status: PartialStatusObject,\n    next: (status: PartialStatusObject) => void\n  ): void;\n}\n\nexport interface FullResponder {\n  start: StartResponder;\n  sendMetadata: MetadataResponder;\n  sendMessage: MessageResponder;\n  sendStatus: StatusResponder;\n}\n\nexport type Responder = Partial<FullResponder>;\n\nexport class ResponderBuilder {\n  private start: StartResponder | undefined = undefined;\n  private metadata: MetadataResponder | undefined = undefined;\n  private message: MessageResponder | undefined = undefined;\n  private status: StatusResponder | undefined = undefined;\n\n  withStart(start: StartResponder): this {\n    this.start = start;\n    return this;\n  }\n\n  withSendMetadata(sendMetadata: MetadataResponder): this {\n    this.metadata = sendMetadata;\n    return this;\n  }\n\n  withSendMessage(sendMessage: MessageResponder): this {\n    this.message = sendMessage;\n    return this;\n  }\n\n  withSendStatus(sendStatus: StatusResponder): this {\n    this.status = sendStatus;\n    return this;\n  }\n\n  build(): Responder {\n    return {\n      start: this.start,\n      sendMetadata: this.metadata,\n      sendMessage: this.message,\n      sendStatus: this.status,\n    };\n  }\n}\n\nconst defaultServerListener: FullServerListener = {\n  onReceiveMetadata: (metadata, next) => {\n    next(metadata);\n  },\n  onReceiveMessage: (message, next) => {\n    next(message);\n  },\n  onReceiveHalfClose: next => {\n    next();\n  },\n  onCancel: () => {},\n};\n\nconst defaultResponder: FullResponder = {\n  start: next => {\n    next();\n  },\n  sendMetadata: (metadata, next) => {\n    next(metadata);\n  },\n  sendMessage: (message, next) => {\n    next(message);\n  },\n  sendStatus: (status, next) => {\n    next(status);\n  },\n};\n\nexport interface ConnectionInfo {\n  localAddress?: string | undefined;\n  localPort?: number | undefined;\n  remoteAddress?: string | undefined;\n  remotePort?: number | undefined;\n}\n\nexport interface ServerInterceptingCallInterface {\n  /**\n   * Register the listener to handle inbound events.\n   */\n  start(listener: InterceptingServerListener): void;\n  /**\n   * Send response metadata.\n   */\n  sendMetadata(metadata: Metadata): void;\n  /**\n   * Send a response message.\n   */\n  sendMessage(message: any, callback: () => void): void;\n  /**\n   * End the call by sending this status.\n   */\n  sendStatus(status: PartialStatusObject): void;\n  /**\n   * Start a single read, eventually triggering either listener.onReceiveMessage or listener.onReceiveHalfClose.\n   */\n  startRead(): void;\n  /**\n   * Return the peer address of the client making the request, if known, or \"unknown\" otherwise\n   */\n  getPeer(): string;\n  /**\n   * Return the call deadline set by the client. The value is Infinity if there is no deadline.\n   */\n  getDeadline(): Deadline;\n  /**\n   * Return the host requested by the client in the \":authority\" header.\n   */\n  getHost(): string;\n  /**\n   * Return the auth context of the connection the call is associated with.\n   */\n  getAuthContext(): AuthContext;\n  /**\n   * Return information about the connection used to make the call.\n   */\n  getConnectionInfo(): ConnectionInfo;\n  /**\n   * Get the metrics recorder for this call. Metrics will not be sent unless\n   * the server was constructed with the `grpc.server_call_metric_recording`\n   * option.\n   */\n  getMetricsRecorder(): PerRequestMetricRecorder;\n}\n\nexport class ServerInterceptingCall implements ServerInterceptingCallInterface {\n  private responder: FullResponder;\n  private processingMetadata = false;\n  private sentMetadata = false;\n  private processingMessage = false;\n  private pendingMessage: any = null;\n  private pendingMessageCallback: (() => void) | null = null;\n  private pendingStatus: PartialStatusObject | null = null;\n  constructor(\n    private nextCall: ServerInterceptingCallInterface,\n    responder?: Responder\n  ) {\n    this.responder = {\n      start: responder?.start ?? defaultResponder.start,\n      sendMetadata: responder?.sendMetadata ?? defaultResponder.sendMetadata,\n      sendMessage: responder?.sendMessage ?? defaultResponder.sendMessage,\n      sendStatus: responder?.sendStatus ?? defaultResponder.sendStatus,\n    };\n  }\n\n  private processPendingMessage() {\n    if (this.pendingMessageCallback) {\n      this.nextCall.sendMessage(\n        this.pendingMessage,\n        this.pendingMessageCallback\n      );\n      this.pendingMessage = null;\n      this.pendingMessageCallback = null;\n    }\n  }\n\n  private processPendingStatus() {\n    if (this.pendingStatus) {\n      this.nextCall.sendStatus(this.pendingStatus);\n      this.pendingStatus = null;\n    }\n  }\n\n  start(listener: InterceptingServerListener): void {\n    this.responder.start(interceptedListener => {\n      const fullInterceptedListener: FullServerListener = {\n        onReceiveMetadata:\n          interceptedListener?.onReceiveMetadata ??\n          defaultServerListener.onReceiveMetadata,\n        onReceiveMessage:\n          interceptedListener?.onReceiveMessage ??\n          defaultServerListener.onReceiveMessage,\n        onReceiveHalfClose:\n          interceptedListener?.onReceiveHalfClose ??\n          defaultServerListener.onReceiveHalfClose,\n        onCancel:\n          interceptedListener?.onCancel ?? defaultServerListener.onCancel,\n      };\n      const finalInterceptingListener = new InterceptingServerListenerImpl(\n        fullInterceptedListener,\n        listener\n      );\n      this.nextCall.start(finalInterceptingListener);\n    });\n  }\n  sendMetadata(metadata: Metadata): void {\n    this.processingMetadata = true;\n    this.sentMetadata = true;\n    this.responder.sendMetadata(metadata, interceptedMetadata => {\n      this.processingMetadata = false;\n      this.nextCall.sendMetadata(interceptedMetadata);\n      this.processPendingMessage();\n      this.processPendingStatus();\n    });\n  }\n  sendMessage(message: any, callback: () => void): void {\n    this.processingMessage = true;\n    if (!this.sentMetadata) {\n      this.sendMetadata(new Metadata());\n    }\n    this.responder.sendMessage(message, interceptedMessage => {\n      this.processingMessage = false;\n      if (this.processingMetadata) {\n        this.pendingMessage = interceptedMessage;\n        this.pendingMessageCallback = callback;\n      } else {\n        this.nextCall.sendMessage(interceptedMessage, callback);\n      }\n    });\n  }\n  sendStatus(status: PartialStatusObject): void {\n    this.responder.sendStatus(status, interceptedStatus => {\n      if (this.processingMetadata || this.processingMessage) {\n        this.pendingStatus = interceptedStatus;\n      } else {\n        this.nextCall.sendStatus(interceptedStatus);\n      }\n    });\n  }\n  startRead(): void {\n    this.nextCall.startRead();\n  }\n  getPeer(): string {\n    return this.nextCall.getPeer();\n  }\n  getDeadline(): Deadline {\n    return this.nextCall.getDeadline();\n  }\n  getHost(): string {\n    return this.nextCall.getHost();\n  }\n  getAuthContext(): AuthContext {\n    return this.nextCall.getAuthContext();\n  }\n  getConnectionInfo(): ConnectionInfo {\n    return this.nextCall.getConnectionInfo();\n  }\n  getMetricsRecorder(): PerRequestMetricRecorder {\n    return this.nextCall.getMetricsRecorder();\n  }\n}\n\nexport interface ServerInterceptor {\n  (\n    methodDescriptor: ServerMethodDefinition<any, any>,\n    call: ServerInterceptingCallInterface\n  ): ServerInterceptingCall;\n}\n\ninterface DeadlineUnitIndexSignature {\n  [name: string]: number;\n}\n\nconst GRPC_ACCEPT_ENCODING_HEADER = 'grpc-accept-encoding';\nconst GRPC_ENCODING_HEADER = 'grpc-encoding';\nconst GRPC_MESSAGE_HEADER = 'grpc-message';\nconst GRPC_STATUS_HEADER = 'grpc-status';\nconst GRPC_TIMEOUT_HEADER = 'grpc-timeout';\nconst DEADLINE_REGEX = /(\\d{1,8})\\s*([HMSmun])/;\nconst deadlineUnitsToMs: DeadlineUnitIndexSignature = {\n  H: 3600000,\n  M: 60000,\n  S: 1000,\n  m: 1,\n  u: 0.001,\n  n: 0.000001,\n};\n\nconst defaultCompressionHeaders = {\n  // TODO(cjihrig): Remove these encoding headers from the default response\n  // once compression is integrated.\n  [GRPC_ACCEPT_ENCODING_HEADER]: 'identity,deflate,gzip',\n  [GRPC_ENCODING_HEADER]: 'identity',\n};\nconst defaultResponseHeaders = {\n  [http2.constants.HTTP2_HEADER_STATUS]: http2.constants.HTTP_STATUS_OK,\n  [http2.constants.HTTP2_HEADER_CONTENT_TYPE]: 'application/grpc+proto',\n};\nconst defaultResponseOptions = {\n  waitForTrailers: true,\n} as http2.ServerStreamResponseOptions;\n\ntype ReadQueueEntryType = 'COMPRESSED' | 'READABLE' | 'HALF_CLOSE';\n\ninterface ReadQueueEntry {\n  type: ReadQueueEntryType;\n  compressedMessage: Buffer | null;\n  parsedMessage: any;\n}\n\nexport class BaseServerInterceptingCall\n  implements ServerInterceptingCallInterface\n{\n  private listener: InterceptingServerListener | null = null;\n  private metadata: Metadata;\n  private deadlineTimer: NodeJS.Timeout | null = null;\n  private deadline: Deadline = Infinity;\n  private maxSendMessageSize: number = DEFAULT_MAX_SEND_MESSAGE_LENGTH;\n  private maxReceiveMessageSize: number = DEFAULT_MAX_RECEIVE_MESSAGE_LENGTH;\n  private cancelled = false;\n  private metadataSent = false;\n  private wantTrailers = false;\n  private cancelNotified = false;\n  private incomingEncoding = 'identity';\n  private decoder: StreamDecoder;\n  private readQueue: ReadQueueEntry[] = [];\n  private isReadPending = false;\n  private receivedHalfClose = false;\n  private streamEnded = false;\n  private host: string;\n  private connectionInfo: ConnectionInfo;\n  private metricsRecorder = new PerRequestMetricRecorder();\n  private shouldSendMetrics: boolean;\n\n  constructor(\n    private readonly stream: http2.ServerHttp2Stream,\n    headers: http2.IncomingHttpHeaders,\n    private readonly callEventTracker: CallEventTracker | null,\n    private readonly handler: Handler<any, any>,\n    options: ChannelOptions\n  ) {\n    this.stream.once('close', () => {\n      trace(\n        'Request to method ' +\n          this.handler?.path +\n          ' stream closed with rstCode ' +\n          this.stream.rstCode\n      );\n\n      if (this.callEventTracker && !this.streamEnded) {\n        this.streamEnded = true;\n        this.callEventTracker.onStreamEnd(false);\n        this.callEventTracker.onCallEnd({\n          code: Status.CANCELLED,\n          details: 'Stream closed before sending status',\n          metadata: null,\n        });\n      }\n\n      this.notifyOnCancel();\n    });\n\n    this.stream.on('data', (data: Buffer) => {\n      this.handleDataFrame(data);\n    });\n    this.stream.pause();\n\n    this.stream.on('end', () => {\n      this.handleEndEvent();\n    });\n\n    if ('grpc.max_send_message_length' in options) {\n      this.maxSendMessageSize = options['grpc.max_send_message_length']!;\n    }\n    if ('grpc.max_receive_message_length' in options) {\n      this.maxReceiveMessageSize = options['grpc.max_receive_message_length']!;\n    }\n\n    this.host = headers[':authority'] ?? headers.host!;\n    this.decoder = new StreamDecoder(this.maxReceiveMessageSize);\n\n    const metadata = Metadata.fromHttp2Headers(headers);\n\n    if (logging.isTracerEnabled(TRACER_NAME)) {\n      trace(\n        'Request to ' +\n          this.handler.path +\n          ' received headers ' +\n          JSON.stringify(metadata.toJSON())\n      );\n    }\n\n    const timeoutHeader = metadata.get(GRPC_TIMEOUT_HEADER);\n\n    if (timeoutHeader.length > 0) {\n      this.handleTimeoutHeader(timeoutHeader[0] as string);\n    }\n\n    const encodingHeader = metadata.get(GRPC_ENCODING_HEADER);\n\n    if (encodingHeader.length > 0) {\n      this.incomingEncoding = encodingHeader[0] as string;\n    }\n\n    // Remove several headers that should not be propagated to the application\n    metadata.remove(GRPC_TIMEOUT_HEADER);\n    metadata.remove(GRPC_ENCODING_HEADER);\n    metadata.remove(GRPC_ACCEPT_ENCODING_HEADER);\n    metadata.remove(http2.constants.HTTP2_HEADER_ACCEPT_ENCODING);\n    metadata.remove(http2.constants.HTTP2_HEADER_TE);\n    metadata.remove(http2.constants.HTTP2_HEADER_CONTENT_TYPE);\n    this.metadata = metadata;\n\n    const socket = stream.session?.socket;\n    this.connectionInfo = {\n      localAddress: socket?.localAddress,\n      localPort: socket?.localPort,\n      remoteAddress: socket?.remoteAddress,\n      remotePort: socket?.remotePort\n    };\n    this.shouldSendMetrics = !!options['grpc.server_call_metric_recording'];\n  }\n\n  private handleTimeoutHeader(timeoutHeader: string) {\n    const match = timeoutHeader.toString().match(DEADLINE_REGEX);\n\n    if (match === null) {\n      const status: PartialStatusObject = {\n        code: Status.INTERNAL,\n        details: `Invalid ${GRPC_TIMEOUT_HEADER} value \"${timeoutHeader}\"`,\n        metadata: null,\n      };\n      // Wait for the constructor to complete before sending the error.\n      process.nextTick(() => {\n        this.sendStatus(status);\n      });\n      return;\n    }\n\n    const timeout = (+match[1] * deadlineUnitsToMs[match[2]]) | 0;\n\n    const now = new Date();\n    this.deadline = now.setMilliseconds(now.getMilliseconds() + timeout);\n    this.deadlineTimer = setTimeout(() => {\n      const status: PartialStatusObject = {\n        code: Status.DEADLINE_EXCEEDED,\n        details: 'Deadline exceeded',\n        metadata: null,\n      };\n      this.sendStatus(status);\n    }, timeout);\n  }\n\n  private checkCancelled(): boolean {\n    /* In some cases the stream can become destroyed before the close event\n     * fires. That creates a race condition that this check works around */\n    if (!this.cancelled && (this.stream.destroyed || this.stream.closed)) {\n      this.notifyOnCancel();\n      this.cancelled = true;\n    }\n    return this.cancelled;\n  }\n  private notifyOnCancel() {\n    if (this.cancelNotified) {\n      return;\n    }\n    this.cancelNotified = true;\n    this.cancelled = true;\n    process.nextTick(() => {\n      this.listener?.onCancel();\n    });\n    if (this.deadlineTimer) {\n      clearTimeout(this.deadlineTimer);\n    }\n    // Flush incoming data frames\n    this.stream.resume();\n  }\n\n  /**\n   * A server handler can start sending messages without explicitly sending\n   * metadata. In that case, we need to send headers before sending any\n   * messages. This function does that if necessary.\n   */\n  private maybeSendMetadata() {\n    if (!this.metadataSent) {\n      this.sendMetadata(new Metadata());\n    }\n  }\n\n  /**\n   * Serialize a message to a length-delimited byte string.\n   * @param value\n   * @returns\n   */\n  private serializeMessage(value: any) {\n    const messageBuffer = this.handler.serialize(value);\n    const byteLength = messageBuffer.byteLength;\n    const output = Buffer.allocUnsafe(byteLength + 5);\n    /* Note: response compression is currently not supported, so this\n     * compressed bit is always 0. */\n    output.writeUInt8(0, 0);\n    output.writeUInt32BE(byteLength, 1);\n    messageBuffer.copy(output, 5);\n    return output;\n  }\n\n  private decompressMessage(\n    message: Buffer,\n    encoding: string\n  ): Buffer | Promise<Buffer> {\n    const messageContents = message.subarray(5);\n    if (encoding === 'identity') {\n      return messageContents;\n    } else if (encoding === 'deflate' || encoding === 'gzip') {\n      let decompresser: zlib.Gunzip | zlib.Deflate;\n      if (encoding === 'deflate') {\n        decompresser = zlib.createInflate();\n      } else {\n        decompresser = zlib.createGunzip();\n      }\n      return new Promise((resolve, reject) => {\n        let totalLength = 0\n        const messageParts: Buffer[] = [];\n        decompresser.on('error', (error: Error) => {\n          reject({\n            code: Status.INTERNAL,\n            details: 'Failed to decompress message'\n          });\n        });\n        decompresser.on('data', (chunk: Buffer) => {\n          messageParts.push(chunk);\n          totalLength += chunk.byteLength;\n          if (this.maxReceiveMessageSize !== -1 && totalLength > this.maxReceiveMessageSize) {\n            decompresser.destroy();\n            reject({\n              code: Status.RESOURCE_EXHAUSTED,\n              details: `Received message that decompresses to a size larger than ${this.maxReceiveMessageSize}`\n            });\n          }\n        });\n        decompresser.on('end', () => {\n          resolve(Buffer.concat(messageParts));\n        });\n        decompresser.write(messageContents);\n        decompresser.end();\n      });\n    } else {\n      return Promise.reject({\n        code: Status.UNIMPLEMENTED,\n        details: `Received message compressed with unsupported encoding \"${encoding}\"`,\n      });\n    }\n  }\n\n  private async decompressAndMaybePush(queueEntry: ReadQueueEntry) {\n    if (queueEntry.type !== 'COMPRESSED') {\n      throw new Error(`Invalid queue entry type: ${queueEntry.type}`);\n    }\n\n    const compressed = queueEntry.compressedMessage!.readUInt8(0) === 1;\n    const compressedMessageEncoding = compressed\n      ? this.incomingEncoding\n      : 'identity';\n    let decompressedMessage: Buffer;\n    try {\n      decompressedMessage = await this.decompressMessage(\n        queueEntry.compressedMessage!,\n        compressedMessageEncoding\n      );\n    } catch (err) {\n      this.sendStatus(err as PartialStatusObject);\n      return;\n    }\n    try {\n      queueEntry.parsedMessage = this.handler.deserialize(decompressedMessage);\n    } catch (err) {\n      this.sendStatus({\n        code: Status.INTERNAL,\n        details: `Error deserializing request: ${(err as Error).message}`,\n      });\n      return;\n    }\n    queueEntry.type = 'READABLE';\n    this.maybePushNextMessage();\n  }\n\n  private maybePushNextMessage() {\n    if (\n      this.listener &&\n      this.isReadPending &&\n      this.readQueue.length > 0 &&\n      this.readQueue[0].type !== 'COMPRESSED'\n    ) {\n      this.isReadPending = false;\n      const nextQueueEntry = this.readQueue.shift()!;\n      if (nextQueueEntry.type === 'READABLE') {\n        this.listener.onReceiveMessage(nextQueueEntry.parsedMessage);\n      } else {\n        // nextQueueEntry.type === 'HALF_CLOSE'\n        this.listener.onReceiveHalfClose();\n      }\n    }\n  }\n\n  private handleDataFrame(data: Buffer) {\n    if (this.checkCancelled()) {\n      return;\n    }\n    trace(\n      'Request to ' +\n        this.handler.path +\n        ' received data frame of size ' +\n        data.length\n    );\n    let rawMessages: Buffer[];\n    try {\n      rawMessages = this.decoder.write(data);\n    } catch (e) {\n      this.sendStatus({ code: Status.RESOURCE_EXHAUSTED, details: (e as Error).message });\n      return;\n    }\n\n    for (const messageBytes of rawMessages) {\n      this.stream.pause();\n      const queueEntry: ReadQueueEntry = {\n        type: 'COMPRESSED',\n        compressedMessage: messageBytes,\n        parsedMessage: null,\n      };\n      this.readQueue.push(queueEntry);\n      this.decompressAndMaybePush(queueEntry);\n      this.callEventTracker?.addMessageReceived();\n    }\n  }\n  private handleEndEvent() {\n    this.readQueue.push({\n      type: 'HALF_CLOSE',\n      compressedMessage: null,\n      parsedMessage: null,\n    });\n    this.receivedHalfClose = true;\n    this.maybePushNextMessage();\n  }\n  start(listener: InterceptingServerListener): void {\n    trace('Request to ' + this.handler.path + ' start called');\n    if (this.checkCancelled()) {\n      return;\n    }\n    this.listener = listener;\n    listener.onReceiveMetadata(this.metadata);\n  }\n  sendMetadata(metadata: Metadata): void {\n    if (this.checkCancelled()) {\n      return;\n    }\n\n    if (this.metadataSent) {\n      return;\n    }\n\n    this.metadataSent = true;\n    const custom = metadata ? metadata.toHttp2Headers() : null;\n    const headers = {\n      ...defaultResponseHeaders,\n      ...defaultCompressionHeaders,\n      ...custom,\n    };\n    this.stream.respond(headers, defaultResponseOptions);\n  }\n  sendMessage(message: any, callback: () => void): void {\n    if (this.checkCancelled()) {\n      return;\n    }\n    let response: Buffer;\n    try {\n      response = this.serializeMessage(message);\n    } catch (e) {\n      this.sendStatus({\n        code: Status.INTERNAL,\n        details: `Error serializing response: ${getErrorMessage(e)}`,\n        metadata: null,\n      });\n      return;\n    }\n\n    if (\n      this.maxSendMessageSize !== -1 &&\n      response.length - 5 > this.maxSendMessageSize\n    ) {\n      this.sendStatus({\n        code: Status.RESOURCE_EXHAUSTED,\n        details: `Sent message larger than max (${response.length} vs. ${this.maxSendMessageSize})`,\n        metadata: null,\n      });\n      return;\n    }\n    this.maybeSendMetadata();\n    trace(\n      'Request to ' +\n        this.handler.path +\n        ' sent data frame of size ' +\n        response.length\n    );\n    this.stream.write(response, error => {\n      if (error) {\n        this.sendStatus({\n          code: Status.INTERNAL,\n          details: `Error writing message: ${getErrorMessage(error)}`,\n          metadata: null,\n        });\n        return;\n      }\n      this.callEventTracker?.addMessageSent();\n      callback();\n    });\n  }\n  sendStatus(status: PartialStatusObject): void {\n    if (this.checkCancelled()) {\n      return;\n    }\n\n    trace(\n      'Request to method ' +\n        this.handler?.path +\n        ' ended with status code: ' +\n        Status[status.code] +\n        ' details: ' +\n        status.details\n    );\n\n    const statusMetadata = status.metadata?.clone() ?? new Metadata();\n    if (this.shouldSendMetrics) {\n      statusMetadata.set(GRPC_METRICS_HEADER, this.metricsRecorder.serialize());\n    }\n\n    if (this.metadataSent) {\n      if (!this.wantTrailers) {\n        this.wantTrailers = true;\n        this.stream.once('wantTrailers', () => {\n          if (this.callEventTracker && !this.streamEnded) {\n            this.streamEnded = true;\n            this.callEventTracker.onStreamEnd(true);\n            this.callEventTracker.onCallEnd(status);\n          }\n          const trailersToSend: http2.OutgoingHttpHeaders = {\n            [GRPC_STATUS_HEADER]: status.code,\n            [GRPC_MESSAGE_HEADER]: encodeURI(status.details),\n            ...statusMetadata.toHttp2Headers(),\n          };\n\n          this.stream.sendTrailers(trailersToSend);\n          this.notifyOnCancel();\n        });\n        this.stream.end();\n      } else {\n        this.notifyOnCancel();\n      }\n    } else {\n      if (this.callEventTracker && !this.streamEnded) {\n        this.streamEnded = true;\n        this.callEventTracker.onStreamEnd(true);\n        this.callEventTracker.onCallEnd(status);\n      }\n      // Trailers-only response\n      const trailersToSend: http2.OutgoingHttpHeaders = {\n        [GRPC_STATUS_HEADER]: status.code,\n        [GRPC_MESSAGE_HEADER]: encodeURI(status.details),\n        ...defaultResponseHeaders,\n        ...statusMetadata.toHttp2Headers(),\n      };\n      this.stream.respond(trailersToSend, { endStream: true });\n      this.notifyOnCancel();\n    }\n  }\n  startRead(): void {\n    trace('Request to ' + this.handler.path + ' startRead called');\n    if (this.checkCancelled()) {\n      return;\n    }\n    this.isReadPending = true;\n    if (this.readQueue.length === 0) {\n      if (!this.receivedHalfClose) {\n        this.stream.resume();\n      }\n    } else {\n      this.maybePushNextMessage();\n    }\n  }\n  getPeer(): string {\n    const socket = this.stream.session?.socket;\n    if (socket?.remoteAddress) {\n      if (socket.remotePort) {\n        return `${socket.remoteAddress}:${socket.remotePort}`;\n      } else {\n        return socket.remoteAddress;\n      }\n    } else {\n      return 'unknown';\n    }\n  }\n  getDeadline(): Deadline {\n    return this.deadline;\n  }\n  getHost(): string {\n    return this.host;\n  }\n  getAuthContext(): AuthContext {\n    if (this.stream.session?.socket instanceof TLSSocket) {\n      const peerCertificate = this.stream.session.socket.getPeerCertificate();\n      return {\n        transportSecurityType: 'ssl',\n        sslPeerCertificate: peerCertificate.raw ? peerCertificate : undefined\n      }\n    } else {\n      return {};\n    }\n  }\n  getConnectionInfo(): ConnectionInfo {\n    return this.connectionInfo;\n  }\n  getMetricsRecorder(): PerRequestMetricRecorder {\n    return this.metricsRecorder;\n  }\n}\n\nexport function getServerInterceptingCall(\n  interceptors: ServerInterceptor[],\n  stream: http2.ServerHttp2Stream,\n  headers: http2.IncomingHttpHeaders,\n  callEventTracker: CallEventTracker | null,\n  handler: Handler<any, any>,\n  options: ChannelOptions\n) {\n  const methodDefinition: ServerMethodDefinition<any, any> = {\n    path: handler.path,\n    requestStream: handler.type === 'clientStream' || handler.type === 'bidi',\n    responseStream: handler.type === 'serverStream' || handler.type === 'bidi',\n    requestDeserialize: handler.deserialize,\n    responseSerialize: handler.serialize,\n  };\n  const baseCall = new BaseServerInterceptingCall(\n    stream,\n    headers,\n    callEventTracker,\n    handler,\n    options\n  );\n  return interceptors.reduce(\n    (call: ServerInterceptingCallInterface, interceptor: ServerInterceptor) => {\n      return interceptor(methodDefinition, call);\n    },\n    baseCall\n  );\n}\n","/*\n * Copyright 2019 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport * as http2 from 'http2';\nimport * as util from 'util';\n\nimport { ServiceError } from './call';\nimport { Status, LogVerbosity } from './constants';\nimport { Deserialize, Serialize, ServiceDefinition } from './make-client';\nimport { Metadata } from './metadata';\nimport {\n  BidiStreamingHandler,\n  ClientStreamingHandler,\n  HandleCall,\n  Handler,\n  HandlerType,\n  sendUnaryData,\n  ServerDuplexStream,\n  ServerDuplexStreamImpl,\n  ServerReadableStream,\n  ServerStreamingHandler,\n  ServerUnaryCall,\n  ServerWritableStream,\n  ServerWritableStreamImpl,\n  UnaryHandler,\n  ServerErrorResponse,\n  ServerStatusResponse,\n  serverErrorToStatus,\n} from './server-call';\nimport { SecureContextWatcher, ServerCredentials } from './server-credentials';\nimport { ChannelOptions } from './channel-options';\nimport {\n  createResolver,\n  ResolverListener,\n  mapUriDefaultScheme,\n} from './resolver';\nimport * as logging from './logging';\nimport {\n  SubchannelAddress,\n  isTcpSubchannelAddress,\n  subchannelAddressToString,\n  stringToSubchannelAddress,\n} from './subchannel-address';\nimport {\n  GrpcUri,\n  combineHostPort,\n  parseUri,\n  splitHostPort,\n  uriToString,\n} from './uri-parser';\nimport {\n  ChannelzCallTracker,\n  ChannelzCallTrackerStub,\n  ChannelzChildrenTracker,\n  ChannelzChildrenTrackerStub,\n  ChannelzTrace,\n  ChannelzTraceStub,\n  registerChannelzServer,\n  registerChannelzSocket,\n  ServerInfo,\n  ServerRef,\n  SocketInfo,\n  SocketRef,\n  TlsInfo,\n  unregisterChannelzRef,\n} from './channelz';\nimport { CipherNameAndProtocol, TLSSocket } from 'tls';\nimport {\n  ServerInterceptingCallInterface,\n  ServerInterceptor,\n  getServerInterceptingCall,\n} from './server-interceptors';\nimport { PartialStatusObject } from './call-interface';\nimport { CallEventTracker } from './transport';\nimport { Socket } from 'net';\nimport { Duplex } from 'stream';\n\nconst UNLIMITED_CONNECTION_AGE_MS = ~(1 << 31);\nconst KEEPALIVE_MAX_TIME_MS = ~(1 << 31);\nconst KEEPALIVE_TIMEOUT_MS = 20000;\nconst MAX_CONNECTION_IDLE_MS = ~(1 << 31);\n\nconst { HTTP2_HEADER_PATH } = http2.constants;\n\nconst TRACER_NAME = 'server';\nconst kMaxAge = Buffer.from('max_age');\n\nfunction serverCallTrace(text: string) {\n  logging.trace(LogVerbosity.DEBUG, 'server_call', text);\n}\n\ntype AnyHttp2Server = http2.Http2Server | http2.Http2SecureServer;\n\ninterface BindResult {\n  port: number;\n  count: number;\n  errors: string[];\n}\n\ninterface SingleAddressBindResult {\n  port: number;\n  error?: string;\n}\n\nfunction noop(): void {}\n\n/**\n * Decorator to wrap a class method with util.deprecate\n * @param message The message to output if the deprecated method is called\n * @returns\n */\nfunction deprecate(message: string) {\n  return function <This, Args extends any[], Return>(\n    target: (this: This, ...args: Args) => Return,\n    context: ClassMethodDecoratorContext<\n      This,\n      (this: This, ...args: Args) => Return\n    >\n  ) {\n    return util.deprecate(target, message);\n  };\n}\n\nfunction getUnimplementedStatusResponse(\n  methodName: string\n): PartialStatusObject {\n  return {\n    code: Status.UNIMPLEMENTED,\n    details: `The server does not implement the method ${methodName}`,\n  };\n}\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\ntype UntypedUnaryHandler = UnaryHandler<any, any>;\ntype UntypedClientStreamingHandler = ClientStreamingHandler<any, any>;\ntype UntypedServerStreamingHandler = ServerStreamingHandler<any, any>;\ntype UntypedBidiStreamingHandler = BidiStreamingHandler<any, any>;\nexport type UntypedHandleCall = HandleCall<any, any>;\ntype UntypedHandler = Handler<any, any>;\nexport interface UntypedServiceImplementation {\n  [name: string]: UntypedHandleCall;\n}\n\nfunction getDefaultHandler(handlerType: HandlerType, methodName: string) {\n  const unimplementedStatusResponse =\n    getUnimplementedStatusResponse(methodName);\n  switch (handlerType) {\n    case 'unary':\n      return (\n        call: ServerUnaryCall<any, any>,\n        callback: sendUnaryData<any>\n      ) => {\n        callback(unimplementedStatusResponse as ServiceError, null);\n      };\n    case 'clientStream':\n      return (\n        call: ServerReadableStream<any, any>,\n        callback: sendUnaryData<any>\n      ) => {\n        callback(unimplementedStatusResponse as ServiceError, null);\n      };\n    case 'serverStream':\n      return (call: ServerWritableStream<any, any>) => {\n        call.emit('error', unimplementedStatusResponse);\n      };\n    case 'bidi':\n      return (call: ServerDuplexStream<any, any>) => {\n        call.emit('error', unimplementedStatusResponse);\n      };\n    default:\n      throw new Error(`Invalid handlerType ${handlerType}`);\n  }\n}\n\ninterface ChannelzSessionInfo {\n  ref: SocketRef;\n  streamTracker: ChannelzCallTracker | ChannelzCallTrackerStub;\n  messagesSent: number;\n  messagesReceived: number;\n  keepAlivesSent: number;\n  lastMessageSentTimestamp: Date | null;\n  lastMessageReceivedTimestamp: Date | null;\n}\n\n/**\n * Information related to a single invocation of bindAsync. This should be\n * tracked in a map keyed by target string, normalized with a pass through\n * parseUri -> mapUriDefaultScheme -> uriToString. If the target has a port\n * number and the port number is 0, the target string is modified with the\n * concrete bound port.\n */\ninterface BoundPort {\n  /**\n   * The key used to refer to this object in the boundPorts map.\n   */\n  mapKey: string;\n  /**\n   * The target string, passed through parseUri -> mapUriDefaultScheme. Used\n   * to determine the final key when the port number is 0.\n   */\n  originalUri: GrpcUri;\n  /**\n   * If there is a pending bindAsync operation, this is a promise that resolves\n   * with the port number when that operation succeeds. If there is no such\n   * operation pending, this is null.\n   */\n  completionPromise: Promise<number> | null;\n  /**\n   * The port number that was actually bound. Populated only after\n   * completionPromise resolves.\n   */\n  portNumber: number;\n  /**\n   * Set by unbind if called while pending is true.\n   */\n  cancelled: boolean;\n  /**\n   * The credentials object passed to the original bindAsync call.\n   */\n  credentials: ServerCredentials;\n  /**\n   * The set of servers associated with this listening port. A target string\n   * that expands to multiple addresses will result in multiple listening\n   * servers.\n   */\n  listeningServers: Set<AnyHttp2Server>;\n}\n\n/**\n * Should be in a map keyed by AnyHttp2Server.\n */\ninterface Http2ServerInfo {\n  channelzRef: SocketRef;\n  sessions: Set<http2.ServerHttp2Session>;\n  ownsChannelzRef: boolean;\n}\n\ninterface SessionIdleTimeoutTracker {\n  activeStreams: number;\n  lastIdle: number;\n  timeout: NodeJS.Timeout;\n  onClose: (session: http2.ServerHttp2Session) => void | null;\n}\n\nexport interface ServerOptions extends ChannelOptions {\n  interceptors?: ServerInterceptor[];\n}\n\nexport interface ConnectionInjector {\n  injectConnection(connection: Duplex): void;\n  drain(graceTimeMs: number): void;\n  destroy(): void;\n}\n\nexport class Server {\n  private boundPorts: Map<string, BoundPort> = new Map();\n  private http2Servers: Map<AnyHttp2Server, Http2ServerInfo> = new Map();\n  private sessionIdleTimeouts = new Map<\n    http2.ServerHttp2Session,\n    SessionIdleTimeoutTracker\n  >();\n\n  private handlers: Map<string, UntypedHandler> = new Map<\n    string,\n    UntypedHandler\n  >();\n  private sessions = new Map<http2.ServerHttp2Session, ChannelzSessionInfo>();\n  /**\n   * This field only exists to ensure that the start method throws an error if\n   * it is called twice, as it did previously.\n   */\n  private started = false;\n  private shutdown = false;\n  private options: ServerOptions;\n  private serverAddressString = 'null';\n\n  // Channelz Info\n  private readonly channelzEnabled: boolean = true;\n  private channelzRef: ServerRef;\n  private channelzTrace: ChannelzTrace | ChannelzTraceStub;\n  private callTracker: ChannelzCallTracker | ChannelzCallTrackerStub;\n  private listenerChildrenTracker:\n    | ChannelzChildrenTracker\n    | ChannelzChildrenTrackerStub;\n  private sessionChildrenTracker:\n    | ChannelzChildrenTracker\n    | ChannelzChildrenTrackerStub;\n\n  private readonly maxConnectionAgeMs: number;\n  private readonly maxConnectionAgeGraceMs: number;\n\n  private readonly keepaliveTimeMs: number;\n  private readonly keepaliveTimeoutMs: number;\n\n  private readonly sessionIdleTimeout: number;\n\n  private readonly interceptors: ServerInterceptor[];\n\n  /**\n   * Options that will be used to construct all Http2Server instances for this\n   * Server.\n   */\n  private commonServerOptions: http2.ServerOptions;\n\n  constructor(options?: ServerOptions) {\n    this.options = options ?? {};\n    if (this.options['grpc.enable_channelz'] === 0) {\n      this.channelzEnabled = false;\n      this.channelzTrace = new ChannelzTraceStub();\n      this.callTracker = new ChannelzCallTrackerStub();\n      this.listenerChildrenTracker = new ChannelzChildrenTrackerStub();\n      this.sessionChildrenTracker = new ChannelzChildrenTrackerStub();\n    } else {\n      this.channelzTrace = new ChannelzTrace();\n      this.callTracker = new ChannelzCallTracker();\n      this.listenerChildrenTracker = new ChannelzChildrenTracker();\n      this.sessionChildrenTracker = new ChannelzChildrenTracker();\n    }\n\n    this.channelzRef = registerChannelzServer(\n      'server',\n      () => this.getChannelzInfo(),\n      this.channelzEnabled\n    );\n\n    this.channelzTrace.addTrace('CT_INFO', 'Server created');\n    this.maxConnectionAgeMs =\n      this.options['grpc.max_connection_age_ms'] ?? UNLIMITED_CONNECTION_AGE_MS;\n    this.maxConnectionAgeGraceMs =\n      this.options['grpc.max_connection_age_grace_ms'] ??\n      UNLIMITED_CONNECTION_AGE_MS;\n    this.keepaliveTimeMs =\n      this.options['grpc.keepalive_time_ms'] ?? KEEPALIVE_MAX_TIME_MS;\n    this.keepaliveTimeoutMs =\n      this.options['grpc.keepalive_timeout_ms'] ?? KEEPALIVE_TIMEOUT_MS;\n    this.sessionIdleTimeout =\n      this.options['grpc.max_connection_idle_ms'] ?? MAX_CONNECTION_IDLE_MS;\n\n    this.commonServerOptions = {\n      maxSendHeaderBlockLength: Number.MAX_SAFE_INTEGER,\n    };\n    if ('grpc-node.max_session_memory' in this.options) {\n      this.commonServerOptions.maxSessionMemory =\n        this.options['grpc-node.max_session_memory'];\n    } else {\n      /* By default, set a very large max session memory limit, to effectively\n       * disable enforcement of the limit. Some testing indicates that Node's\n       * behavior degrades badly when this limit is reached, so we solve that\n       * by disabling the check entirely. */\n      this.commonServerOptions.maxSessionMemory = Number.MAX_SAFE_INTEGER;\n    }\n    if ('grpc.max_concurrent_streams' in this.options) {\n      this.commonServerOptions.settings = {\n        maxConcurrentStreams: this.options['grpc.max_concurrent_streams'],\n      };\n    }\n    this.interceptors = this.options.interceptors ?? [];\n    this.trace('Server constructed');\n  }\n\n  private getChannelzInfo(): ServerInfo {\n    return {\n      trace: this.channelzTrace,\n      callTracker: this.callTracker,\n      listenerChildren: this.listenerChildrenTracker.getChildLists(),\n      sessionChildren: this.sessionChildrenTracker.getChildLists(),\n    };\n  }\n\n  private getChannelzSessionInfo(\n    session: http2.ServerHttp2Session\n  ): SocketInfo {\n    const sessionInfo = this.sessions.get(session)!;\n    const sessionSocket = session.socket;\n    const remoteAddress = sessionSocket.remoteAddress\n      ? stringToSubchannelAddress(\n          sessionSocket.remoteAddress,\n          sessionSocket.remotePort\n        )\n      : null;\n    const localAddress = sessionSocket.localAddress\n      ? stringToSubchannelAddress(\n          sessionSocket.localAddress!,\n          sessionSocket.localPort\n        )\n      : null;\n    let tlsInfo: TlsInfo | null;\n    if (session.encrypted) {\n      const tlsSocket: TLSSocket = sessionSocket as TLSSocket;\n      const cipherInfo: CipherNameAndProtocol & { standardName?: string } =\n        tlsSocket.getCipher();\n      const certificate = tlsSocket.getCertificate();\n      const peerCertificate = tlsSocket.getPeerCertificate();\n      tlsInfo = {\n        cipherSuiteStandardName: cipherInfo.standardName ?? null,\n        cipherSuiteOtherName: cipherInfo.standardName ? null : cipherInfo.name,\n        localCertificate:\n          certificate && 'raw' in certificate ? certificate.raw : null,\n        remoteCertificate:\n          peerCertificate && 'raw' in peerCertificate\n            ? peerCertificate.raw\n            : null,\n      };\n    } else {\n      tlsInfo = null;\n    }\n    const socketInfo: SocketInfo = {\n      remoteAddress: remoteAddress,\n      localAddress: localAddress,\n      security: tlsInfo,\n      remoteName: null,\n      streamsStarted: sessionInfo.streamTracker.callsStarted,\n      streamsSucceeded: sessionInfo.streamTracker.callsSucceeded,\n      streamsFailed: sessionInfo.streamTracker.callsFailed,\n      messagesSent: sessionInfo.messagesSent,\n      messagesReceived: sessionInfo.messagesReceived,\n      keepAlivesSent: sessionInfo.keepAlivesSent,\n      lastLocalStreamCreatedTimestamp: null,\n      lastRemoteStreamCreatedTimestamp:\n        sessionInfo.streamTracker.lastCallStartedTimestamp,\n      lastMessageSentTimestamp: sessionInfo.lastMessageSentTimestamp,\n      lastMessageReceivedTimestamp: sessionInfo.lastMessageReceivedTimestamp,\n      localFlowControlWindow: session.state.localWindowSize ?? null,\n      remoteFlowControlWindow: session.state.remoteWindowSize ?? null,\n    };\n    return socketInfo;\n  }\n\n  private trace(text: string): void {\n    logging.trace(\n      LogVerbosity.DEBUG,\n      TRACER_NAME,\n      '(' + this.channelzRef.id + ') ' + text\n    );\n  }\n\n  private keepaliveTrace(text: string): void {\n    logging.trace(\n      LogVerbosity.DEBUG,\n      'keepalive',\n      '(' + this.channelzRef.id + ') ' + text\n    );\n  }\n\n  addProtoService(): never {\n    throw new Error('Not implemented. Use addService() instead');\n  }\n\n  addService(\n    service: ServiceDefinition,\n    implementation: UntypedServiceImplementation\n  ): void {\n    if (\n      service === null ||\n      typeof service !== 'object' ||\n      implementation === null ||\n      typeof implementation !== 'object'\n    ) {\n      throw new Error('addService() requires two objects as arguments');\n    }\n\n    const serviceKeys = Object.keys(service);\n\n    if (serviceKeys.length === 0) {\n      throw new Error('Cannot add an empty service to a server');\n    }\n\n    serviceKeys.forEach(name => {\n      const attrs = service[name];\n      let methodType: HandlerType;\n\n      if (attrs.requestStream) {\n        if (attrs.responseStream) {\n          methodType = 'bidi';\n        } else {\n          methodType = 'clientStream';\n        }\n      } else {\n        if (attrs.responseStream) {\n          methodType = 'serverStream';\n        } else {\n          methodType = 'unary';\n        }\n      }\n\n      let implFn = implementation[name];\n      let impl;\n\n      if (implFn === undefined && typeof attrs.originalName === 'string') {\n        implFn = implementation[attrs.originalName];\n      }\n\n      if (implFn !== undefined) {\n        impl = implFn.bind(implementation);\n      } else {\n        impl = getDefaultHandler(methodType, name);\n      }\n\n      const success = this.register(\n        attrs.path,\n        impl as UntypedHandleCall,\n        attrs.responseSerialize,\n        attrs.requestDeserialize,\n        methodType\n      );\n\n      if (success === false) {\n        throw new Error(`Method handler for ${attrs.path} already provided.`);\n      }\n    });\n  }\n\n  removeService(service: ServiceDefinition): void {\n    if (service === null || typeof service !== 'object') {\n      throw new Error('removeService() requires object as argument');\n    }\n\n    const serviceKeys = Object.keys(service);\n    serviceKeys.forEach(name => {\n      const attrs = service[name];\n      this.unregister(attrs.path);\n    });\n  }\n\n  bind(port: string, creds: ServerCredentials): never {\n    throw new Error('Not implemented. Use bindAsync() instead');\n  }\n\n  /**\n   * This API is experimental, so API stability is not guaranteed across minor versions.\n   * @param boundAddress\n   * @returns\n   */\n  protected experimentalRegisterListenerToChannelz(boundAddress: SubchannelAddress) {\n    return registerChannelzSocket(\n      subchannelAddressToString(boundAddress),\n      () => {\n        return {\n          localAddress: boundAddress,\n          remoteAddress: null,\n          security: null,\n          remoteName: null,\n          streamsStarted: 0,\n          streamsSucceeded: 0,\n          streamsFailed: 0,\n          messagesSent: 0,\n          messagesReceived: 0,\n          keepAlivesSent: 0,\n          lastLocalStreamCreatedTimestamp: null,\n          lastRemoteStreamCreatedTimestamp: null,\n          lastMessageSentTimestamp: null,\n          lastMessageReceivedTimestamp: null,\n          localFlowControlWindow: null,\n          remoteFlowControlWindow: null,\n        };\n      },\n      this.channelzEnabled\n    );\n  }\n\n  protected experimentalUnregisterListenerFromChannelz(channelzRef: SocketRef) {\n    unregisterChannelzRef(channelzRef);\n  }\n\n  private createHttp2Server(credentials: ServerCredentials) {\n    let http2Server: http2.Http2Server | http2.Http2SecureServer;\n    if (credentials._isSecure()) {\n      const constructorOptions = credentials._getConstructorOptions();\n      const contextOptions = credentials._getSecureContextOptions();\n      const secureServerOptions: http2.SecureServerOptions = {\n        ...this.commonServerOptions,\n        ...constructorOptions,\n        ...contextOptions,\n        enableTrace: this.options['grpc-node.tls_enable_trace'] === 1\n      };\n      let areCredentialsValid = contextOptions !== null;\n      this.trace('Initial credentials valid: ' + areCredentialsValid);\n      http2Server = http2.createSecureServer(secureServerOptions);\n      http2Server.prependListener('connection', (socket: Socket) => {\n        if (!areCredentialsValid) {\n          this.trace('Dropped connection from ' + JSON.stringify(socket.address()) + ' due to unloaded credentials');\n          socket.destroy();\n        }\n      });\n      http2Server.on('secureConnection', (socket: TLSSocket) => {\n        /* These errors need to be handled by the user of Http2SecureServer,\n         * according to https://github.com/nodejs/node/issues/35824 */\n        socket.on('error', (e: Error) => {\n          this.trace(\n            'An incoming TLS connection closed with error: ' + e.message\n          );\n        });\n      });\n      const credsWatcher: SecureContextWatcher = options => {\n        if (options) {\n          const secureServer = http2Server as http2.Http2SecureServer;\n          try {\n            secureServer.setSecureContext(options);\n          } catch (e) {\n            logging.log(LogVerbosity.ERROR, 'Failed to set secure context with error ' + (e as Error).message);\n            options = null;\n          }\n        }\n        areCredentialsValid = options !== null;\n        this.trace('Post-update credentials valid: ' + areCredentialsValid);\n      }\n      credentials._addWatcher(credsWatcher);\n      http2Server.on('close', () => {\n        credentials._removeWatcher(credsWatcher);\n      });\n    } else {\n      http2Server = http2.createServer(this.commonServerOptions);\n    }\n\n    http2Server.setTimeout(0, noop);\n    this._setupHandlers(http2Server, credentials._getInterceptors());\n    return http2Server;\n  }\n\n  private bindOneAddress(\n    address: SubchannelAddress,\n    boundPortObject: BoundPort\n  ): Promise<SingleAddressBindResult> {\n    this.trace('Attempting to bind ' + subchannelAddressToString(address));\n    const http2Server = this.createHttp2Server(boundPortObject.credentials);\n    return new Promise<SingleAddressBindResult>((resolve, reject) => {\n      const onError = (err: Error) => {\n        this.trace(\n          'Failed to bind ' +\n            subchannelAddressToString(address) +\n            ' with error ' +\n            err.message\n        );\n        resolve({\n          port: 'port' in address ? address.port : 1,\n          error: err.message,\n        });\n      };\n\n      http2Server.once('error', onError);\n\n      http2Server.listen(address, () => {\n        const boundAddress = http2Server.address()!;\n        let boundSubchannelAddress: SubchannelAddress;\n        if (typeof boundAddress === 'string') {\n          boundSubchannelAddress = {\n            path: boundAddress,\n          };\n        } else {\n          boundSubchannelAddress = {\n            host: boundAddress.address,\n            port: boundAddress.port,\n          };\n        }\n\n        const channelzRef = this.experimentalRegisterListenerToChannelz(\n          boundSubchannelAddress\n        );\n        this.listenerChildrenTracker.refChild(channelzRef);\n\n        this.http2Servers.set(http2Server, {\n          channelzRef: channelzRef,\n          sessions: new Set(),\n          ownsChannelzRef: true\n        });\n        boundPortObject.listeningServers.add(http2Server);\n        this.trace(\n          'Successfully bound ' +\n            subchannelAddressToString(boundSubchannelAddress)\n        );\n        resolve({\n          port:\n            'port' in boundSubchannelAddress ? boundSubchannelAddress.port : 1,\n        });\n        http2Server.removeListener('error', onError);\n      });\n    });\n  }\n\n  private async bindManyPorts(\n    addressList: SubchannelAddress[],\n    boundPortObject: BoundPort\n  ): Promise<BindResult> {\n    if (addressList.length === 0) {\n      return {\n        count: 0,\n        port: 0,\n        errors: [],\n      };\n    }\n    if (isTcpSubchannelAddress(addressList[0]) && addressList[0].port === 0) {\n      /* If binding to port 0, first try to bind the first address, then bind\n       * the rest of the address list to the specific port that it binds. */\n      const firstAddressResult = await this.bindOneAddress(\n        addressList[0],\n        boundPortObject\n      );\n      if (firstAddressResult.error) {\n        /* If the first address fails to bind, try the same operation starting\n         * from the second item in the list. */\n        const restAddressResult = await this.bindManyPorts(\n          addressList.slice(1),\n          boundPortObject\n        );\n        return {\n          ...restAddressResult,\n          errors: [firstAddressResult.error, ...restAddressResult.errors],\n        };\n      } else {\n        const restAddresses = addressList\n          .slice(1)\n          .map(address =>\n            isTcpSubchannelAddress(address)\n              ? { host: address.host, port: firstAddressResult.port }\n              : address\n          );\n        const restAddressResult = await Promise.all(\n          restAddresses.map(address =>\n            this.bindOneAddress(address, boundPortObject)\n          )\n        );\n        const allResults = [firstAddressResult, ...restAddressResult];\n        return {\n          count: allResults.filter(result => result.error === undefined).length,\n          port: firstAddressResult.port,\n          errors: allResults\n            .filter(result => result.error)\n            .map(result => result.error!),\n        };\n      }\n    } else {\n      const allResults = await Promise.all(\n        addressList.map(address =>\n          this.bindOneAddress(address, boundPortObject)\n        )\n      );\n      return {\n        count: allResults.filter(result => result.error === undefined).length,\n        port: allResults[0].port,\n        errors: allResults\n          .filter(result => result.error)\n          .map(result => result.error!),\n      };\n    }\n  }\n\n  private async bindAddressList(\n    addressList: SubchannelAddress[],\n    boundPortObject: BoundPort\n  ): Promise<number> {\n    const bindResult = await this.bindManyPorts(addressList, boundPortObject);\n    if (bindResult.count > 0) {\n      if (bindResult.count < addressList.length) {\n        logging.log(\n          LogVerbosity.INFO,\n          `WARNING Only ${bindResult.count} addresses added out of total ${addressList.length} resolved`\n        );\n      }\n      return bindResult.port;\n    } else {\n      const errorString = `No address added out of total ${addressList.length} resolved`;\n      logging.log(LogVerbosity.ERROR, errorString);\n      throw new Error(\n        `${errorString} errors: [${bindResult.errors.join(',')}]`\n      );\n    }\n  }\n\n  private resolvePort(port: GrpcUri): Promise<SubchannelAddress[]> {\n    return new Promise<SubchannelAddress[]>((resolve, reject) => {\n      let seenResolution = false;\n      const resolverListener: ResolverListener = (\n        endpointList,\n        attributes,\n        serviceConfig,\n        resolutionNote\n      ) => {\n        if (seenResolution) {\n          return true;\n        }\n        seenResolution = true;\n        if (!endpointList.ok) {\n          reject(new Error(endpointList.error.details));\n          return true;\n        }\n        const addressList = ([] as SubchannelAddress[]).concat(\n          ...endpointList.value.map(endpoint => endpoint.addresses)\n        );\n        if (addressList.length === 0) {\n          reject(new Error(`No addresses resolved for port ${port}`));\n          return true;\n        }\n        resolve(addressList);\n        return true;\n      }\n      const resolver = createResolver(port, resolverListener, this.options);\n      resolver.updateResolution();\n    });\n  }\n\n  private async bindPort(\n    port: GrpcUri,\n    boundPortObject: BoundPort\n  ): Promise<number> {\n    const addressList = await this.resolvePort(port);\n    if (boundPortObject.cancelled) {\n      this.completeUnbind(boundPortObject);\n      throw new Error('bindAsync operation cancelled by unbind call');\n    }\n    const portNumber = await this.bindAddressList(addressList, boundPortObject);\n    if (boundPortObject.cancelled) {\n      this.completeUnbind(boundPortObject);\n      throw new Error('bindAsync operation cancelled by unbind call');\n    }\n    return portNumber;\n  }\n\n  private normalizePort(port: string): GrpcUri {\n    const initialPortUri = parseUri(port);\n    if (initialPortUri === null) {\n      throw new Error(`Could not parse port \"${port}\"`);\n    }\n    const portUri = mapUriDefaultScheme(initialPortUri);\n    if (portUri === null) {\n      throw new Error(`Could not get a default scheme for port \"${port}\"`);\n    }\n    return portUri;\n  }\n\n  bindAsync(\n    port: string,\n    creds: ServerCredentials,\n    callback: (error: Error | null, port: number) => void\n  ): void {\n    if (this.shutdown) {\n      throw new Error('bindAsync called after shutdown');\n    }\n    if (typeof port !== 'string') {\n      throw new TypeError('port must be a string');\n    }\n\n    if (creds === null || !(creds instanceof ServerCredentials)) {\n      throw new TypeError('creds must be a ServerCredentials object');\n    }\n\n    if (typeof callback !== 'function') {\n      throw new TypeError('callback must be a function');\n    }\n\n    this.trace('bindAsync port=' + port);\n\n    const portUri = this.normalizePort(port);\n\n    const deferredCallback = (error: Error | null, port: number) => {\n      process.nextTick(() => callback(error, port));\n    };\n\n    /* First, if this port is already bound or that bind operation is in\n     * progress, use that result. */\n    let boundPortObject = this.boundPorts.get(uriToString(portUri));\n    if (boundPortObject) {\n      if (!creds._equals(boundPortObject.credentials)) {\n        deferredCallback(\n          new Error(`${port} already bound with incompatible credentials`),\n          0\n        );\n        return;\n      }\n      /* If that operation has previously been cancelled by an unbind call,\n       * uncancel it. */\n      boundPortObject.cancelled = false;\n      if (boundPortObject.completionPromise) {\n        boundPortObject.completionPromise.then(\n          portNum => callback(null, portNum),\n          error => callback(error as Error, 0)\n        );\n      } else {\n        deferredCallback(null, boundPortObject.portNumber);\n      }\n      return;\n    }\n    boundPortObject = {\n      mapKey: uriToString(portUri),\n      originalUri: portUri,\n      completionPromise: null,\n      cancelled: false,\n      portNumber: 0,\n      credentials: creds,\n      listeningServers: new Set(),\n    };\n    const splitPort = splitHostPort(portUri.path);\n    const completionPromise = this.bindPort(portUri, boundPortObject);\n    boundPortObject.completionPromise = completionPromise;\n    /* If the port number is 0, defer populating the map entry until after the\n     * bind operation completes and we have a specific port number. Otherwise,\n     * populate it immediately. */\n    if (splitPort?.port === 0) {\n      completionPromise.then(\n        portNum => {\n          const finalUri: GrpcUri = {\n            scheme: portUri.scheme,\n            authority: portUri.authority,\n            path: combineHostPort({ host: splitPort.host, port: portNum }),\n          };\n          boundPortObject!.mapKey = uriToString(finalUri);\n          boundPortObject!.completionPromise = null;\n          boundPortObject!.portNumber = portNum;\n          this.boundPorts.set(boundPortObject!.mapKey, boundPortObject!);\n          callback(null, portNum);\n        },\n        error => {\n          callback(error, 0);\n        }\n      );\n    } else {\n      this.boundPorts.set(boundPortObject.mapKey, boundPortObject);\n      completionPromise.then(\n        portNum => {\n          boundPortObject!.completionPromise = null;\n          boundPortObject!.portNumber = portNum;\n          callback(null, portNum);\n        },\n        error => {\n          callback(error, 0);\n        }\n      );\n    }\n  }\n\n  private registerInjectorToChannelz() {\n    return registerChannelzSocket(\n      'injector',\n      () => {\n        return {\n          localAddress: null,\n          remoteAddress: null,\n          security: null,\n          remoteName: null,\n          streamsStarted: 0,\n          streamsSucceeded: 0,\n          streamsFailed: 0,\n          messagesSent: 0,\n          messagesReceived: 0,\n          keepAlivesSent: 0,\n          lastLocalStreamCreatedTimestamp: null,\n          lastRemoteStreamCreatedTimestamp: null,\n          lastMessageSentTimestamp: null,\n          lastMessageReceivedTimestamp: null,\n          localFlowControlWindow: null,\n          remoteFlowControlWindow: null,\n        };\n      },\n      this.channelzEnabled\n    );\n  }\n\n  /**\n   * This API is experimental, so API stability is not guaranteed across minor versions.\n   * @param credentials\n   * @param channelzRef\n   * @returns\n   */\n  protected experimentalCreateConnectionInjectorWithChannelzRef(credentials: ServerCredentials, channelzRef: SocketRef, ownsChannelzRef=false) {\n    if (credentials === null || !(credentials instanceof ServerCredentials)) {\n      throw new TypeError('creds must be a ServerCredentials object');\n    }\n    if (this.channelzEnabled) {\n      this.listenerChildrenTracker.refChild(channelzRef);\n    }\n    const server = this.createHttp2Server(credentials);\n    const sessionsSet: Set<http2.ServerHttp2Session> = new Set();\n    this.http2Servers.set(server, {\n      channelzRef: channelzRef,\n      sessions: sessionsSet,\n      ownsChannelzRef\n    });\n    return {\n      injectConnection: (connection: Duplex) => {\n        server.emit('connection', connection);\n      },\n      drain: (graceTimeMs: number) => {\n        for (const session of sessionsSet) {\n          this.closeSession(session);\n        }\n        setTimeout(() => {\n          for (const session of sessionsSet) {\n            session.destroy(http2.constants.NGHTTP2_CANCEL as any);\n          }\n        }, graceTimeMs).unref?.();\n      },\n      destroy: () => {\n        this.closeServer(server)\n        for (const session of sessionsSet) {\n          this.closeSession(session);\n        }\n      }\n    };\n  }\n\n  createConnectionInjector(credentials: ServerCredentials): ConnectionInjector {\n    if (credentials === null || !(credentials instanceof ServerCredentials)) {\n      throw new TypeError('creds must be a ServerCredentials object');\n    }\n    const channelzRef = this.registerInjectorToChannelz();\n    return this.experimentalCreateConnectionInjectorWithChannelzRef(credentials, channelzRef, true);\n  }\n\n  private closeServer(server: AnyHttp2Server, callback?: () => void) {\n    this.trace(\n      'Closing server with address ' + JSON.stringify(server.address())\n    );\n    const serverInfo = this.http2Servers.get(server);\n    server.close(() => {\n      if (serverInfo && serverInfo.ownsChannelzRef) {\n        this.listenerChildrenTracker.unrefChild(serverInfo.channelzRef);\n        unregisterChannelzRef(serverInfo.channelzRef);\n      }\n      this.http2Servers.delete(server);\n      callback?.();\n    });\n  }\n\n  private closeSession(\n    session: http2.ServerHttp2Session,\n    callback?: () => void\n  ) {\n    this.trace('Closing session initiated by ' + session.socket?.remoteAddress);\n    const sessionInfo = this.sessions.get(session);\n    const closeCallback = () => {\n      if (sessionInfo) {\n        this.sessionChildrenTracker.unrefChild(sessionInfo.ref);\n        unregisterChannelzRef(sessionInfo.ref);\n      }\n      callback?.();\n    };\n    if (session.closed) {\n      queueMicrotask(closeCallback);\n    } else {\n      session.close(closeCallback);\n    }\n  }\n\n  private completeUnbind(boundPortObject: BoundPort) {\n    for (const server of boundPortObject.listeningServers) {\n      const serverInfo = this.http2Servers.get(server);\n      this.closeServer(server, () => {\n        boundPortObject.listeningServers.delete(server);\n      });\n      if (serverInfo) {\n        for (const session of serverInfo.sessions) {\n          this.closeSession(session);\n        }\n      }\n    }\n    this.boundPorts.delete(boundPortObject.mapKey);\n  }\n\n  /**\n   * Unbind a previously bound port, or cancel an in-progress bindAsync\n   * operation. If port 0 was bound, only the actual bound port can be\n   * unbound. For example, if bindAsync was called with \"localhost:0\" and the\n   * bound port result was 54321, it can be unbound as \"localhost:54321\".\n   * @param port\n   */\n  unbind(port: string): void {\n    this.trace('unbind port=' + port);\n    const portUri = this.normalizePort(port);\n    const splitPort = splitHostPort(portUri.path);\n    if (splitPort?.port === 0) {\n      throw new Error('Cannot unbind port 0');\n    }\n    const boundPortObject = this.boundPorts.get(uriToString(portUri));\n    if (boundPortObject) {\n      this.trace(\n        'unbinding ' +\n          boundPortObject.mapKey +\n          ' originally bound as ' +\n          uriToString(boundPortObject.originalUri)\n      );\n      /* If the bind operation is pending, the cancelled flag will trigger\n       * the unbind operation later. */\n      if (boundPortObject.completionPromise) {\n        boundPortObject.cancelled = true;\n      } else {\n        this.completeUnbind(boundPortObject);\n      }\n    }\n  }\n\n  /**\n   * Gracefully close all connections associated with a previously bound port.\n   * After the grace time, forcefully close all remaining open connections.\n   *\n   * If port 0 was bound, only the actual bound port can be\n   * drained. For example, if bindAsync was called with \"localhost:0\" and the\n   * bound port result was 54321, it can be drained as \"localhost:54321\".\n   * @param port\n   * @param graceTimeMs\n   * @returns\n   */\n  drain(port: string, graceTimeMs: number): void {\n    this.trace('drain port=' + port + ' graceTimeMs=' + graceTimeMs);\n    const portUri = this.normalizePort(port);\n    const splitPort = splitHostPort(portUri.path);\n    if (splitPort?.port === 0) {\n      throw new Error('Cannot drain port 0');\n    }\n    const boundPortObject = this.boundPorts.get(uriToString(portUri));\n    if (!boundPortObject) {\n      return;\n    }\n    const allSessions: Set<http2.Http2Session> = new Set();\n    for (const http2Server of boundPortObject.listeningServers) {\n      const serverEntry = this.http2Servers.get(http2Server);\n      if (serverEntry) {\n        for (const session of serverEntry.sessions) {\n          allSessions.add(session);\n          this.closeSession(session, () => {\n            allSessions.delete(session);\n          });\n        }\n      }\n    }\n    /* After the grace time ends, send another goaway to all remaining sessions\n     * with the CANCEL code. */\n    setTimeout(() => {\n      for (const session of allSessions) {\n        session.destroy(http2.constants.NGHTTP2_CANCEL as any);\n      }\n    }, graceTimeMs).unref?.();\n  }\n\n  forceShutdown(): void {\n    for (const boundPortObject of this.boundPorts.values()) {\n      boundPortObject.cancelled = true;\n    }\n    this.boundPorts.clear();\n    // Close the server if it is still running.\n    for (const server of this.http2Servers.keys()) {\n      this.closeServer(server);\n    }\n\n    // Always destroy any available sessions. It's possible that one or more\n    // tryShutdown() calls are in progress. Don't wait on them to finish.\n    this.sessions.forEach((channelzInfo, session) => {\n      this.closeSession(session);\n      // Cast NGHTTP2_CANCEL to any because TypeScript doesn't seem to\n      // recognize destroy(code) as a valid signature.\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      session.destroy(http2.constants.NGHTTP2_CANCEL as any);\n    });\n    this.sessions.clear();\n    unregisterChannelzRef(this.channelzRef);\n\n    this.shutdown = true;\n  }\n\n  register<RequestType, ResponseType>(\n    name: string,\n    handler: HandleCall<RequestType, ResponseType>,\n    serialize: Serialize<ResponseType>,\n    deserialize: Deserialize<RequestType>,\n    type: string\n  ): boolean {\n    if (this.handlers.has(name)) {\n      return false;\n    }\n\n    this.handlers.set(name, {\n      func: handler,\n      serialize,\n      deserialize,\n      type,\n      path: name,\n    } as UntypedHandler);\n    return true;\n  }\n\n  unregister(name: string): boolean {\n    return this.handlers.delete(name);\n  }\n\n  /**\n   * @deprecated No longer needed as of version 1.10.x\n   */\n  @deprecate(\n    'Calling start() is no longer necessary. It can be safely omitted.'\n  )\n  start(): void {\n    if (\n      this.http2Servers.size === 0 ||\n      [...this.http2Servers.keys()].every(server => !server.listening)\n    ) {\n      throw new Error('server must be bound in order to start');\n    }\n\n    if (this.started === true) {\n      throw new Error('server is already started');\n    }\n    this.started = true;\n  }\n\n  tryShutdown(callback: (error?: Error) => void): void {\n    const wrappedCallback = (error?: Error) => {\n      unregisterChannelzRef(this.channelzRef);\n      callback(error);\n    };\n    let pendingChecks = 0;\n\n    function maybeCallback(): void {\n      pendingChecks--;\n\n      if (pendingChecks === 0) {\n        wrappedCallback();\n      }\n    }\n    this.shutdown = true;\n\n    for (const [serverKey, server] of this.http2Servers.entries()) {\n      pendingChecks++;\n      const serverString = server.channelzRef.name;\n      this.trace('Waiting for server ' + serverString + ' to close');\n      this.closeServer(serverKey, () => {\n        this.trace('Server ' + serverString + ' finished closing');\n        maybeCallback();\n      });\n\n      for (const session of server.sessions.keys()) {\n        pendingChecks++;\n        const sessionString = session.socket?.remoteAddress;\n        this.trace('Waiting for session ' + sessionString + ' to close');\n        this.closeSession(session, () => {\n          this.trace('Session ' + sessionString + ' finished closing');\n          maybeCallback();\n        });\n      }\n    }\n\n    if (pendingChecks === 0) {\n      wrappedCallback();\n    }\n  }\n\n  addHttp2Port(): never {\n    throw new Error('Not yet implemented');\n  }\n\n  /**\n   * Get the channelz reference object for this server. The returned value is\n   * garbage if channelz is disabled for this server.\n   * @returns\n   */\n  getChannelzRef() {\n    return this.channelzRef;\n  }\n\n  private _verifyContentType(\n    stream: http2.ServerHttp2Stream,\n    headers: http2.IncomingHttpHeaders\n  ): boolean {\n    const contentType = headers[http2.constants.HTTP2_HEADER_CONTENT_TYPE];\n\n    if (\n      typeof contentType !== 'string' ||\n      !contentType.startsWith('application/grpc')\n    ) {\n      stream.respond(\n        {\n          [http2.constants.HTTP2_HEADER_STATUS]:\n            http2.constants.HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE,\n        },\n        { endStream: true }\n      );\n      return false;\n    }\n\n    return true;\n  }\n\n  private _retrieveHandler(path: string): Handler<any, any> | null {\n    serverCallTrace(\n      'Received call to method ' +\n        path +\n        ' at address ' +\n        this.serverAddressString\n    );\n\n    const handler = this.handlers.get(path);\n\n    if (handler === undefined) {\n      serverCallTrace(\n        'No handler registered for method ' +\n          path +\n          '. Sending UNIMPLEMENTED status.'\n      );\n      return null;\n    }\n\n    return handler;\n  }\n\n  private _respondWithError(\n    err: PartialStatusObject,\n    stream: http2.ServerHttp2Stream,\n    channelzSessionInfo: ChannelzSessionInfo | null = null\n  ) {\n    const trailersToSend = {\n      'grpc-status': err.code ?? Status.INTERNAL,\n      'grpc-message': err.details,\n      [http2.constants.HTTP2_HEADER_STATUS]: http2.constants.HTTP_STATUS_OK,\n      [http2.constants.HTTP2_HEADER_CONTENT_TYPE]: 'application/grpc+proto',\n      ...err.metadata?.toHttp2Headers(),\n    };\n    stream.respond(trailersToSend, { endStream: true });\n\n    this.callTracker.addCallFailed();\n    channelzSessionInfo?.streamTracker.addCallFailed();\n  }\n\n  private _channelzHandler(\n    extraInterceptors: ServerInterceptor[],\n    stream: http2.ServerHttp2Stream,\n    headers: http2.IncomingHttpHeaders\n  ) {\n    stream.once('error', (err: ServerErrorResponse) => {\n      /* We need an error handler to avoid uncaught error event exceptions, but\n       * there is nothing we can reasonably do here. Any error event should\n       * have a corresponding close event, which handles emitting the cancelled\n       * event. And the stream is now in a bad state, so we can't reasonably\n       * expect to be able to send an error over it. */\n    });\n    // for handling idle timeout\n    this.onStreamOpened(stream);\n\n    const channelzSessionInfo = this.sessions.get(\n      stream.session as http2.ServerHttp2Session\n    );\n\n    this.callTracker.addCallStarted();\n    channelzSessionInfo?.streamTracker.addCallStarted();\n\n    if (!this._verifyContentType(stream, headers)) {\n      this.callTracker.addCallFailed();\n      channelzSessionInfo?.streamTracker.addCallFailed();\n      return;\n    }\n\n    const path = headers[HTTP2_HEADER_PATH] as string;\n\n    const handler = this._retrieveHandler(path);\n    if (!handler) {\n      this._respondWithError(\n        getUnimplementedStatusResponse(path),\n        stream,\n        channelzSessionInfo\n      );\n      return;\n    }\n\n    const callEventTracker: CallEventTracker = {\n      addMessageSent: () => {\n        if (channelzSessionInfo) {\n          channelzSessionInfo.messagesSent += 1;\n          channelzSessionInfo.lastMessageSentTimestamp = new Date();\n        }\n      },\n      addMessageReceived: () => {\n        if (channelzSessionInfo) {\n          channelzSessionInfo.messagesReceived += 1;\n          channelzSessionInfo.lastMessageReceivedTimestamp = new Date();\n        }\n      },\n      onCallEnd: status => {\n        if (status.code === Status.OK) {\n          this.callTracker.addCallSucceeded();\n        } else {\n          this.callTracker.addCallFailed();\n        }\n      },\n      onStreamEnd: success => {\n        if (channelzSessionInfo) {\n          if (success) {\n            channelzSessionInfo.streamTracker.addCallSucceeded();\n          } else {\n            channelzSessionInfo.streamTracker.addCallFailed();\n          }\n        }\n      },\n    };\n\n    const call = getServerInterceptingCall(\n      [...extraInterceptors, ...this.interceptors],\n      stream,\n      headers,\n      callEventTracker,\n      handler,\n      this.options\n    );\n\n    if (!this._runHandlerForCall(call, handler)) {\n      this.callTracker.addCallFailed();\n      channelzSessionInfo?.streamTracker.addCallFailed();\n\n      call.sendStatus({\n        code: Status.INTERNAL,\n        details: `Unknown handler type: ${handler.type}`,\n      });\n    }\n  }\n\n  private _streamHandler(\n    extraInterceptors: ServerInterceptor[],\n    stream: http2.ServerHttp2Stream,\n    headers: http2.IncomingHttpHeaders\n  ) {\n    stream.once('error', (err: ServerErrorResponse) => {\n      /* We need an error handler to avoid uncaught error event exceptions, but\n       * there is nothing we can reasonably do here. Any error event should\n       * have a corresponding close event, which handles emitting the cancelled\n       * event. And the stream is now in a bad state, so we can't reasonably\n       * expect to be able to send an error over it. */\n    });\n    // for handling idle timeout\n    this.onStreamOpened(stream);\n\n    if (this._verifyContentType(stream, headers) !== true) {\n      return;\n    }\n\n    const path = headers[HTTP2_HEADER_PATH] as string;\n\n    const handler = this._retrieveHandler(path);\n    if (!handler) {\n      this._respondWithError(\n        getUnimplementedStatusResponse(path),\n        stream,\n        null\n      );\n      return;\n    }\n\n    const call = getServerInterceptingCall(\n      [...extraInterceptors, ...this.interceptors],\n      stream,\n      headers,\n      null,\n      handler,\n      this.options\n    );\n\n    if (!this._runHandlerForCall(call, handler)) {\n      call.sendStatus({\n        code: Status.INTERNAL,\n        details: `Unknown handler type: ${handler.type}`,\n      });\n    }\n  }\n\n  private _runHandlerForCall(\n    call: ServerInterceptingCallInterface,\n    handler:\n      | UntypedUnaryHandler\n      | UntypedClientStreamingHandler\n      | UntypedServerStreamingHandler\n      | UntypedBidiStreamingHandler\n  ): boolean {\n    const { type } = handler;\n    if (type === 'unary') {\n      handleUnary(call, handler);\n    } else if (type === 'clientStream') {\n      handleClientStreaming(call, handler);\n    } else if (type === 'serverStream') {\n      handleServerStreaming(call, handler);\n    } else if (type === 'bidi') {\n      handleBidiStreaming(call, handler);\n    } else {\n      return false;\n    }\n\n    return true;\n  }\n\n  private _setupHandlers(\n    http2Server: http2.Http2Server | http2.Http2SecureServer,\n    extraInterceptors: ServerInterceptor[]\n  ): void {\n    if (http2Server === null) {\n      return;\n    }\n\n    const serverAddress = http2Server.address();\n    let serverAddressString = 'null';\n    if (serverAddress) {\n      if (typeof serverAddress === 'string') {\n        serverAddressString = serverAddress;\n      } else {\n        serverAddressString = serverAddress.address + ':' + serverAddress.port;\n      }\n    }\n    this.serverAddressString = serverAddressString;\n\n    const handler = this.channelzEnabled\n      ? this._channelzHandler\n      : this._streamHandler;\n\n    const sessionHandler = this.channelzEnabled\n      ? this._channelzSessionHandler(http2Server)\n      : this._sessionHandler(http2Server);\n\n    http2Server.on('stream', handler.bind(this, extraInterceptors));\n    http2Server.on('session', sessionHandler);\n  }\n\n  private _sessionHandler(\n    http2Server: http2.Http2Server | http2.Http2SecureServer\n  ) {\n    return (session: http2.ServerHttp2Session) => {\n      this.http2Servers.get(http2Server)?.sessions.add(session);\n\n      let connectionAgeTimer: NodeJS.Timeout | null = null;\n      let connectionAgeGraceTimer: NodeJS.Timeout | null = null;\n      let keepaliveTimer: NodeJS.Timeout | null = null;\n      let sessionClosedByServer = false;\n\n      const idleTimeoutObj = this.enableIdleTimeout(session);\n\n      if (this.maxConnectionAgeMs !== UNLIMITED_CONNECTION_AGE_MS) {\n        // Apply a random jitter within a +/-10% range\n        const jitterMagnitude = this.maxConnectionAgeMs / 10;\n        const jitter = Math.random() * jitterMagnitude * 2 - jitterMagnitude;\n\n        connectionAgeTimer = setTimeout(() => {\n          sessionClosedByServer = true;\n\n          this.trace(\n            'Connection dropped by max connection age: ' +\n              session.socket?.remoteAddress\n          );\n\n          try {\n            session.goaway(\n              http2.constants.NGHTTP2_NO_ERROR,\n              ~(1 << 31),\n              kMaxAge\n            );\n          } catch (e) {\n            // The goaway can't be sent because the session is already closed\n            session.destroy();\n            return;\n          }\n          session.close();\n\n          /* Allow a grace period after sending the GOAWAY before forcibly\n           * closing the connection. */\n          if (this.maxConnectionAgeGraceMs !== UNLIMITED_CONNECTION_AGE_MS) {\n            connectionAgeGraceTimer = setTimeout(() => {\n              session.destroy();\n            }, this.maxConnectionAgeGraceMs);\n            connectionAgeGraceTimer.unref?.();\n          }\n        }, this.maxConnectionAgeMs + jitter);\n        connectionAgeTimer.unref?.();\n      }\n\n      const clearKeepaliveTimeout = () => {\n        if (keepaliveTimer) {\n          clearTimeout(keepaliveTimer);\n          keepaliveTimer = null;\n        }\n      };\n\n      const canSendPing = () => {\n        return (\n          !session.destroyed &&\n          this.keepaliveTimeMs < KEEPALIVE_MAX_TIME_MS &&\n          this.keepaliveTimeMs > 0\n        );\n      };\n\n      /* eslint-disable-next-line prefer-const */\n      let sendPing: () => void; // hoisted for use in maybeStartKeepalivePingTimer\n\n      const maybeStartKeepalivePingTimer = () => {\n        if (!canSendPing()) {\n          return;\n        }\n        this.keepaliveTrace(\n          'Starting keepalive timer for ' + this.keepaliveTimeMs + 'ms'\n        );\n        keepaliveTimer = setTimeout(() => {\n          clearKeepaliveTimeout();\n          sendPing();\n        }, this.keepaliveTimeMs);\n        keepaliveTimer.unref?.();\n      };\n\n      sendPing = () => {\n        if (!canSendPing()) {\n          return;\n        }\n        this.keepaliveTrace(\n          'Sending ping with timeout ' + this.keepaliveTimeoutMs + 'ms'\n        );\n        let pingSendError = '';\n        try {\n          const pingSentSuccessfully = session.ping(\n            (err: Error | null, duration: number, payload: Buffer) => {\n              clearKeepaliveTimeout();\n              if (err) {\n                this.keepaliveTrace('Ping failed with error: ' + err.message);\n                sessionClosedByServer = true;\n                session.destroy();\n              } else {\n                this.keepaliveTrace('Received ping response');\n                maybeStartKeepalivePingTimer();\n              }\n            }\n          );\n          if (!pingSentSuccessfully) {\n            pingSendError = 'Ping returned false';\n          }\n        } catch (e) {\n          // grpc/grpc-node#2139\n          pingSendError =\n            (e instanceof Error ? e.message : '') || 'Unknown error';\n        }\n\n        if (pingSendError) {\n          this.keepaliveTrace('Ping send failed: ' + pingSendError);\n          this.trace(\n            'Connection dropped due to ping send error: ' + pingSendError\n          );\n          sessionClosedByServer = true;\n          session.destroy();\n          return;\n        }\n\n        keepaliveTimer = setTimeout(() => {\n          clearKeepaliveTimeout();\n          this.keepaliveTrace('Ping timeout passed without response');\n          this.trace('Connection dropped by keepalive timeout');\n          sessionClosedByServer = true;\n          session.destroy();\n        }, this.keepaliveTimeoutMs);\n        keepaliveTimer.unref?.();\n      };\n\n      maybeStartKeepalivePingTimer();\n\n      session.on('close', () => {\n        if (!sessionClosedByServer) {\n          this.trace(\n            `Connection dropped by client ${session.socket?.remoteAddress}`\n          );\n        }\n\n        if (connectionAgeTimer) {\n          clearTimeout(connectionAgeTimer);\n        }\n\n        if (connectionAgeGraceTimer) {\n          clearTimeout(connectionAgeGraceTimer);\n        }\n\n        clearKeepaliveTimeout();\n\n        if (idleTimeoutObj !== null) {\n          clearTimeout(idleTimeoutObj.timeout);\n          this.sessionIdleTimeouts.delete(session);\n        }\n\n        this.http2Servers.get(http2Server)?.sessions.delete(session);\n      });\n    };\n  }\n\n  private _channelzSessionHandler(\n    http2Server: http2.Http2Server | http2.Http2SecureServer\n  ) {\n    return (session: http2.ServerHttp2Session) => {\n      const channelzRef = registerChannelzSocket(\n        session.socket?.remoteAddress ?? 'unknown',\n        this.getChannelzSessionInfo.bind(this, session),\n        this.channelzEnabled\n      );\n\n      const channelzSessionInfo: ChannelzSessionInfo = {\n        ref: channelzRef,\n        streamTracker: new ChannelzCallTracker(),\n        messagesSent: 0,\n        messagesReceived: 0,\n        keepAlivesSent: 0,\n        lastMessageSentTimestamp: null,\n        lastMessageReceivedTimestamp: null,\n      };\n\n      this.http2Servers.get(http2Server)?.sessions.add(session);\n      this.sessions.set(session, channelzSessionInfo);\n      const clientAddress = `${session.socket.remoteAddress}:${session.socket.remotePort}`;\n\n      this.channelzTrace.addTrace(\n        'CT_INFO',\n        'Connection established by client ' + clientAddress\n      );\n      this.trace('Connection established by client ' + clientAddress);\n      this.sessionChildrenTracker.refChild(channelzRef);\n\n      let connectionAgeTimer: NodeJS.Timeout | null = null;\n      let connectionAgeGraceTimer: NodeJS.Timeout | null = null;\n      let keepaliveTimeout: NodeJS.Timeout | null = null;\n      let sessionClosedByServer = false;\n\n      const idleTimeoutObj = this.enableIdleTimeout(session);\n\n      if (this.maxConnectionAgeMs !== UNLIMITED_CONNECTION_AGE_MS) {\n        // Apply a random jitter within a +/-10% range\n        const jitterMagnitude = this.maxConnectionAgeMs / 10;\n        const jitter = Math.random() * jitterMagnitude * 2 - jitterMagnitude;\n\n        connectionAgeTimer = setTimeout(() => {\n          sessionClosedByServer = true;\n          this.channelzTrace.addTrace(\n            'CT_INFO',\n            'Connection dropped by max connection age from ' + clientAddress\n          );\n\n          try {\n            session.goaway(\n              http2.constants.NGHTTP2_NO_ERROR,\n              ~(1 << 31),\n              kMaxAge\n            );\n          } catch (e) {\n            // The goaway can't be sent because the session is already closed\n            session.destroy();\n            return;\n          }\n          session.close();\n\n          /* Allow a grace period after sending the GOAWAY before forcibly\n           * closing the connection. */\n          if (this.maxConnectionAgeGraceMs !== UNLIMITED_CONNECTION_AGE_MS) {\n            connectionAgeGraceTimer = setTimeout(() => {\n              session.destroy();\n            }, this.maxConnectionAgeGraceMs);\n            connectionAgeGraceTimer.unref?.();\n          }\n        }, this.maxConnectionAgeMs + jitter);\n        connectionAgeTimer.unref?.();\n      }\n\n      const clearKeepaliveTimeout = () => {\n        if (keepaliveTimeout) {\n          clearTimeout(keepaliveTimeout);\n          keepaliveTimeout = null;\n        }\n      };\n\n      const canSendPing = () => {\n        return (\n          !session.destroyed &&\n          this.keepaliveTimeMs < KEEPALIVE_MAX_TIME_MS &&\n          this.keepaliveTimeMs > 0\n        );\n      };\n\n      /* eslint-disable-next-line prefer-const */\n      let sendPing: () => void; // hoisted for use in maybeStartKeepalivePingTimer\n\n      const maybeStartKeepalivePingTimer = () => {\n        if (!canSendPing()) {\n          return;\n        }\n        this.keepaliveTrace(\n          'Starting keepalive timer for ' + this.keepaliveTimeMs + 'ms'\n        );\n        keepaliveTimeout = setTimeout(() => {\n          clearKeepaliveTimeout();\n          sendPing();\n        }, this.keepaliveTimeMs);\n        keepaliveTimeout.unref?.();\n      };\n\n      sendPing = () => {\n        if (!canSendPing()) {\n          return;\n        }\n        this.keepaliveTrace(\n          'Sending ping with timeout ' + this.keepaliveTimeoutMs + 'ms'\n        );\n        let pingSendError = '';\n        try {\n          const pingSentSuccessfully = session.ping(\n            (err: Error | null, duration: number, payload: Buffer) => {\n              clearKeepaliveTimeout();\n              if (err) {\n                this.keepaliveTrace('Ping failed with error: ' + err.message);\n                this.channelzTrace.addTrace(\n                  'CT_INFO',\n                  'Connection dropped due to error of a ping frame ' +\n                    err.message +\n                    ' return in ' +\n                    duration\n                );\n                sessionClosedByServer = true;\n                session.destroy();\n              } else {\n                this.keepaliveTrace('Received ping response');\n                maybeStartKeepalivePingTimer();\n              }\n            }\n          );\n          if (!pingSentSuccessfully) {\n            pingSendError = 'Ping returned false';\n          }\n        } catch (e) {\n          // grpc/grpc-node#2139\n          pingSendError =\n            (e instanceof Error ? e.message : '') || 'Unknown error';\n        }\n\n        if (pingSendError) {\n          this.keepaliveTrace('Ping send failed: ' + pingSendError);\n          this.channelzTrace.addTrace(\n            'CT_INFO',\n            'Connection dropped due to ping send error: ' + pingSendError\n          );\n          sessionClosedByServer = true;\n          session.destroy();\n          return;\n        }\n\n        channelzSessionInfo.keepAlivesSent += 1;\n\n        keepaliveTimeout = setTimeout(() => {\n          clearKeepaliveTimeout();\n          this.keepaliveTrace('Ping timeout passed without response');\n          this.channelzTrace.addTrace(\n            'CT_INFO',\n            'Connection dropped by keepalive timeout from ' + clientAddress\n          );\n          sessionClosedByServer = true;\n          session.destroy();\n        }, this.keepaliveTimeoutMs);\n        keepaliveTimeout.unref?.();\n      };\n\n      maybeStartKeepalivePingTimer();\n\n      session.on('close', () => {\n        if (!sessionClosedByServer) {\n          this.channelzTrace.addTrace(\n            'CT_INFO',\n            'Connection dropped by client ' + clientAddress\n          );\n        }\n\n        this.sessionChildrenTracker.unrefChild(channelzRef);\n        unregisterChannelzRef(channelzRef);\n\n        if (connectionAgeTimer) {\n          clearTimeout(connectionAgeTimer);\n        }\n\n        if (connectionAgeGraceTimer) {\n          clearTimeout(connectionAgeGraceTimer);\n        }\n\n        clearKeepaliveTimeout();\n\n        if (idleTimeoutObj !== null) {\n          clearTimeout(idleTimeoutObj.timeout);\n          this.sessionIdleTimeouts.delete(session);\n        }\n\n        this.http2Servers.get(http2Server)?.sessions.delete(session);\n        this.sessions.delete(session);\n      });\n    };\n  }\n\n  private enableIdleTimeout(\n    session: http2.ServerHttp2Session\n  ): SessionIdleTimeoutTracker | null {\n    if (this.sessionIdleTimeout >= MAX_CONNECTION_IDLE_MS) {\n      return null;\n    }\n\n    const idleTimeoutObj: SessionIdleTimeoutTracker = {\n      activeStreams: 0,\n      lastIdle: Date.now(),\n      onClose: this.onStreamClose.bind(this, session),\n      timeout: setTimeout(\n        this.onIdleTimeout,\n        this.sessionIdleTimeout,\n        this,\n        session\n      ),\n    };\n    idleTimeoutObj.timeout.unref?.();\n    this.sessionIdleTimeouts.set(session, idleTimeoutObj);\n\n    const { socket } = session;\n    this.trace(\n      'Enable idle timeout for ' +\n        socket.remoteAddress +\n        ':' +\n        socket.remotePort\n    );\n\n    return idleTimeoutObj;\n  }\n\n  private onIdleTimeout(\n    this: undefined,\n    ctx: Server,\n    session: http2.ServerHttp2Session\n  ) {\n    const { socket } = session;\n    const sessionInfo = ctx.sessionIdleTimeouts.get(session);\n\n    // if it is called while we have activeStreams - timer will not be rescheduled\n    // until last active stream is closed, then it will call .refresh() on the timer\n    // important part is to not clearTimeout(timer) or it becomes unusable\n    // for future refreshes\n    if (\n      sessionInfo !== undefined &&\n      sessionInfo.activeStreams === 0\n    ) {\n      if (Date.now() - sessionInfo.lastIdle >= ctx.sessionIdleTimeout) {\n        ctx.trace(\n          'Session idle timeout triggered for ' +\n            socket?.remoteAddress +\n            ':' +\n            socket?.remotePort +\n            ' last idle at ' +\n            sessionInfo.lastIdle\n        );\n\n        ctx.closeSession(session);\n      } else {\n        sessionInfo.timeout.refresh();\n      }\n    }\n  }\n\n  private onStreamOpened(stream: http2.ServerHttp2Stream) {\n    const session = stream.session as http2.ServerHttp2Session;\n\n    const idleTimeoutObj = this.sessionIdleTimeouts.get(session);\n    if (idleTimeoutObj) {\n      idleTimeoutObj.activeStreams += 1;\n      stream.once('close', idleTimeoutObj.onClose);\n    }\n  }\n\n  private onStreamClose(session: http2.ServerHttp2Session) {\n    const idleTimeoutObj = this.sessionIdleTimeouts.get(session);\n\n    if (idleTimeoutObj) {\n      idleTimeoutObj.activeStreams -= 1;\n      if (idleTimeoutObj.activeStreams === 0) {\n        idleTimeoutObj.lastIdle = Date.now();\n        idleTimeoutObj.timeout.refresh();\n\n        this.trace(\n          'Session onStreamClose' +\n            session.socket?.remoteAddress +\n            ':' +\n            session.socket?.remotePort +\n            ' at ' +\n            idleTimeoutObj.lastIdle\n        );\n      }\n    }\n  }\n}\n\nasync function handleUnary<RequestType, ResponseType>(\n  call: ServerInterceptingCallInterface,\n  handler: UnaryHandler<RequestType, ResponseType>\n): Promise<void> {\n  let stream: ServerUnaryCall<RequestType, ResponseType>;\n\n  function respond(\n    err: ServerErrorResponse | ServerStatusResponse | null,\n    value?: ResponseType | null,\n    trailer?: Metadata,\n    flags?: number\n  ) {\n    if (err) {\n      call.sendStatus(serverErrorToStatus(err, trailer));\n      return;\n    }\n    call.sendMessage(value, () => {\n      call.sendStatus({\n        code: Status.OK,\n        details: 'OK',\n        metadata: trailer ?? null,\n      });\n    });\n  }\n\n  let requestMetadata: Metadata;\n  let requestMessage: RequestType | null = null;\n  call.start({\n    onReceiveMetadata(metadata) {\n      requestMetadata = metadata;\n      call.startRead();\n    },\n    onReceiveMessage(message) {\n      if (requestMessage) {\n        call.sendStatus({\n          code: Status.UNIMPLEMENTED,\n          details: `Received a second request message for server streaming method ${handler.path}`,\n          metadata: null,\n        });\n        return;\n      }\n      requestMessage = message;\n      call.startRead();\n    },\n    onReceiveHalfClose() {\n      if (!requestMessage) {\n        call.sendStatus({\n          code: Status.UNIMPLEMENTED,\n          details: `Received no request message for server streaming method ${handler.path}`,\n          metadata: null,\n        });\n        return;\n      }\n      stream = new ServerWritableStreamImpl(\n        handler.path,\n        call,\n        requestMetadata,\n        requestMessage\n      );\n      try {\n        handler.func(stream, respond);\n      } catch (err) {\n        call.sendStatus({\n          code: Status.UNKNOWN,\n          details: `Server method handler threw error ${\n            (err as Error).message\n          }`,\n          metadata: null,\n        });\n      }\n    },\n    onCancel() {\n      if (stream) {\n        stream.cancelled = true;\n        stream.emit('cancelled', 'cancelled');\n      }\n    },\n  });\n}\n\nfunction handleClientStreaming<RequestType, ResponseType>(\n  call: ServerInterceptingCallInterface,\n  handler: ClientStreamingHandler<RequestType, ResponseType>\n): void {\n  let stream: ServerReadableStream<RequestType, ResponseType>;\n\n  function respond(\n    err: ServerErrorResponse | ServerStatusResponse | null,\n    value?: ResponseType | null,\n    trailer?: Metadata,\n    flags?: number\n  ) {\n    if (err) {\n      call.sendStatus(serverErrorToStatus(err, trailer));\n      return;\n    }\n    call.sendMessage(value, () => {\n      call.sendStatus({\n        code: Status.OK,\n        details: 'OK',\n        metadata: trailer ?? null,\n      });\n    });\n  }\n\n  call.start({\n    onReceiveMetadata(metadata) {\n      stream = new ServerDuplexStreamImpl(handler.path, call, metadata);\n      try {\n        handler.func(stream, respond);\n      } catch (err) {\n        call.sendStatus({\n          code: Status.UNKNOWN,\n          details: `Server method handler threw error ${\n            (err as Error).message\n          }`,\n          metadata: null,\n        });\n      }\n    },\n    onReceiveMessage(message) {\n      stream.push(message);\n    },\n    onReceiveHalfClose() {\n      stream.push(null);\n    },\n    onCancel() {\n      if (stream) {\n        stream.cancelled = true;\n        stream.emit('cancelled', 'cancelled');\n        stream.destroy();\n      }\n    },\n  });\n}\n\nfunction handleServerStreaming<RequestType, ResponseType>(\n  call: ServerInterceptingCallInterface,\n  handler: ServerStreamingHandler<RequestType, ResponseType>\n): void {\n  let stream: ServerWritableStream<RequestType, ResponseType>;\n\n  let requestMetadata: Metadata;\n  let requestMessage: RequestType | null = null;\n  call.start({\n    onReceiveMetadata(metadata) {\n      requestMetadata = metadata;\n      call.startRead();\n    },\n    onReceiveMessage(message) {\n      if (requestMessage) {\n        call.sendStatus({\n          code: Status.UNIMPLEMENTED,\n          details: `Received a second request message for server streaming method ${handler.path}`,\n          metadata: null,\n        });\n        return;\n      }\n      requestMessage = message;\n      call.startRead();\n    },\n    onReceiveHalfClose() {\n      if (!requestMessage) {\n        call.sendStatus({\n          code: Status.UNIMPLEMENTED,\n          details: `Received no request message for server streaming method ${handler.path}`,\n          metadata: null,\n        });\n        return;\n      }\n      stream = new ServerWritableStreamImpl(\n        handler.path,\n        call,\n        requestMetadata,\n        requestMessage\n      );\n      try {\n        handler.func(stream);\n      } catch (err) {\n        call.sendStatus({\n          code: Status.UNKNOWN,\n          details: `Server method handler threw error ${\n            (err as Error).message\n          }`,\n          metadata: null,\n        });\n      }\n    },\n    onCancel() {\n      if (stream) {\n        stream.cancelled = true;\n        stream.emit('cancelled', 'cancelled');\n        stream.destroy();\n      }\n    },\n  });\n}\n\nfunction handleBidiStreaming<RequestType, ResponseType>(\n  call: ServerInterceptingCallInterface,\n  handler: BidiStreamingHandler<RequestType, ResponseType>\n): void {\n  let stream: ServerDuplexStream<RequestType, ResponseType>;\n\n  call.start({\n    onReceiveMetadata(metadata) {\n      stream = new ServerDuplexStreamImpl(handler.path, call, metadata);\n      try {\n        handler.func(stream);\n      } catch (err) {\n        call.sendStatus({\n          code: Status.UNKNOWN,\n          details: `Server method handler threw error ${\n            (err as Error).message\n          }`,\n          metadata: null,\n        });\n      }\n    },\n    onReceiveMessage(message) {\n      stream.push(message);\n    },\n    onReceiveHalfClose() {\n      stream.push(null);\n    },\n    onCancel() {\n      if (stream) {\n        stream.cancelled = true;\n        stream.emit('cancelled', 'cancelled');\n        stream.destroy();\n      }\n    },\n  });\n}\n","/*\n * Copyright 2019 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport { StatusObject } from './call-interface';\nimport { Status } from './constants';\nimport { Metadata } from './metadata';\n\n/**\n * A builder for gRPC status objects.\n */\nexport class StatusBuilder {\n  private code: Status | null;\n  private details: string | null;\n  private metadata: Metadata | null;\n\n  constructor() {\n    this.code = null;\n    this.details = null;\n    this.metadata = null;\n  }\n\n  /**\n   * Adds a status code to the builder.\n   */\n  withCode(code: Status): this {\n    this.code = code;\n    return this;\n  }\n\n  /**\n   * Adds details to the builder.\n   */\n  withDetails(details: string): this {\n    this.details = details;\n    return this;\n  }\n\n  /**\n   * Adds metadata to the builder.\n   */\n  withMetadata(metadata: Metadata): this {\n    this.metadata = metadata;\n    return this;\n  }\n\n  /**\n   * Builds the status object.\n   */\n  build(): Partial<StatusObject> {\n    const status: Partial<StatusObject> = {};\n\n    if (this.code !== null) {\n      status.code = this.code;\n    }\n\n    if (this.details !== null) {\n      status.details = this.details;\n    }\n\n    if (this.metadata !== null) {\n      status.metadata = this.metadata;\n    }\n\n    return status;\n  }\n}\n","/*\n * Copyright 2019 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport {\n  LoadBalancer,\n  ChannelControlHelper,\n  TypedLoadBalancingConfig,\n  registerDefaultLoadBalancerType,\n  registerLoadBalancerType,\n  createChildChannelControlHelper,\n} from './load-balancer';\nimport { ConnectivityState } from './connectivity-state';\nimport {\n  QueuePicker,\n  Picker,\n  PickArgs,\n  CompletePickResult,\n  PickResultType,\n  UnavailablePicker,\n} from './picker';\nimport { Endpoint, SubchannelAddress, subchannelAddressToString } from './subchannel-address';\nimport * as logging from './logging';\nimport { LogVerbosity } from './constants';\nimport {\n  SubchannelInterface,\n  ConnectivityStateListener,\n  HealthListener,\n} from './subchannel-interface';\nimport { isTcpSubchannelAddress } from './subchannel-address';\nimport { isIPv6 } from 'net';\nimport { ChannelOptions } from './channel-options';\nimport { StatusOr, statusOrFromValue } from './call-interface';\n\nconst TRACER_NAME = 'pick_first';\n\nfunction trace(text: string): void {\n  logging.trace(LogVerbosity.DEBUG, TRACER_NAME, text);\n}\n\nconst TYPE_NAME = 'pick_first';\n\n/**\n * Delay after starting a connection on a subchannel before starting a\n * connection on the next subchannel in the list, for Happy Eyeballs algorithm.\n */\nconst CONNECTION_DELAY_INTERVAL_MS = 250;\n\nexport class PickFirstLoadBalancingConfig implements TypedLoadBalancingConfig {\n  constructor(private readonly shuffleAddressList: boolean) {}\n\n  getLoadBalancerName(): string {\n    return TYPE_NAME;\n  }\n\n  toJsonObject(): object {\n    return {\n      [TYPE_NAME]: {\n        shuffleAddressList: this.shuffleAddressList,\n      },\n    };\n  }\n\n  getShuffleAddressList() {\n    return this.shuffleAddressList;\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  static createFromJson(obj: any) {\n    if (\n      'shuffleAddressList' in obj &&\n      !(typeof obj.shuffleAddressList === 'boolean')\n    ) {\n      throw new Error(\n        'pick_first config field shuffleAddressList must be a boolean if provided'\n      );\n    }\n    return new PickFirstLoadBalancingConfig(obj.shuffleAddressList === true);\n  }\n}\n\n/**\n * Picker for a `PickFirstLoadBalancer` in the READY state. Always returns the\n * picked subchannel.\n */\nclass PickFirstPicker implements Picker {\n  constructor(private subchannel: SubchannelInterface) {}\n\n  pick(pickArgs: PickArgs): CompletePickResult {\n    return {\n      pickResultType: PickResultType.COMPLETE,\n      subchannel: this.subchannel,\n      status: null,\n      onCallStarted: null,\n      onCallEnded: null,\n    };\n  }\n}\n\ninterface SubchannelChild {\n  subchannel: SubchannelInterface;\n  hasReportedTransientFailure: boolean;\n}\n\n/**\n * Return a new array with the elements of the input array in a random order\n * @param list The input array\n * @returns A shuffled array of the elements of list\n */\nexport function shuffled<T>(list: T[]): T[] {\n  const result = list.slice();\n  for (let i = result.length - 1; i > 1; i--) {\n    const j = Math.floor(Math.random() * (i + 1));\n    const temp = result[i];\n    result[i] = result[j];\n    result[j] = temp;\n  }\n  return result;\n}\n\n/**\n * Interleave addresses in addressList by family in accordance with RFC-8304 section 4\n * @param addressList\n * @returns\n */\nfunction interleaveAddressFamilies(\n  addressList: SubchannelAddress[]\n): SubchannelAddress[] {\n  if (addressList.length === 0) {\n    return [];\n  }\n  const result: SubchannelAddress[] = [];\n  const ipv6Addresses: SubchannelAddress[] = [];\n  const ipv4Addresses: SubchannelAddress[] = [];\n  const ipv6First =\n    isTcpSubchannelAddress(addressList[0]) && isIPv6(addressList[0].host);\n  for (const address of addressList) {\n    if (isTcpSubchannelAddress(address) && isIPv6(address.host)) {\n      ipv6Addresses.push(address);\n    } else {\n      ipv4Addresses.push(address);\n    }\n  }\n  const firstList = ipv6First ? ipv6Addresses : ipv4Addresses;\n  const secondList = ipv6First ? ipv4Addresses : ipv6Addresses;\n  for (let i = 0; i < Math.max(firstList.length, secondList.length); i++) {\n    if (i < firstList.length) {\n      result.push(firstList[i]);\n    }\n    if (i < secondList.length) {\n      result.push(secondList[i]);\n    }\n  }\n  return result;\n}\n\nconst REPORT_HEALTH_STATUS_OPTION_NAME =\n  'grpc-node.internal.pick-first.report_health_status';\n\nexport class PickFirstLoadBalancer implements LoadBalancer {\n  /**\n   * The list of subchannels this load balancer is currently attempting to\n   * connect to.\n   */\n  private children: SubchannelChild[] = [];\n  /**\n   * The current connectivity state of the load balancer.\n   */\n  private currentState: ConnectivityState = ConnectivityState.IDLE;\n  /**\n   * The index within the `subchannels` array of the subchannel with the most\n   * recently started connection attempt.\n   */\n  private currentSubchannelIndex = 0;\n  /**\n   * The currently picked subchannel used for making calls. Populated if\n   * and only if the load balancer's current state is READY. In that case,\n   * the subchannel's current state is also READY.\n   */\n  private currentPick: SubchannelInterface | null = null;\n  /**\n   * Listener callback attached to each subchannel in the `subchannels` list\n   * while establishing a connection.\n   */\n  private subchannelStateListener: ConnectivityStateListener = (\n    subchannel,\n    previousState,\n    newState,\n    keepaliveTime,\n    errorMessage\n  ) => {\n    this.onSubchannelStateUpdate(\n      subchannel,\n      previousState,\n      newState,\n      errorMessage\n    );\n  };\n\n  private pickedSubchannelHealthListener: HealthListener = () =>\n    this.calculateAndReportNewState();\n  /**\n   * Timer reference for the timer tracking when to start\n   */\n  private connectionDelayTimeout: NodeJS.Timeout;\n\n  /**\n   * The LB policy enters sticky TRANSIENT_FAILURE mode when all\n   * subchannels have failed to connect at least once, and it stays in that\n   * mode until a connection attempt is successful. While in sticky TF mode,\n   * the LB policy continuously attempts to connect to all of its subchannels.\n   */\n  private stickyTransientFailureMode = false;\n\n  private reportHealthStatus: boolean = false;\n\n  /**\n   * The most recent error reported by any subchannel as it transitioned to\n   * TRANSIENT_FAILURE.\n   */\n  private lastError: string | null = null;\n\n  private latestAddressList: SubchannelAddress[] | null = null;\n\n  private latestOptions: ChannelOptions = {};\n\n  private latestResolutionNote: string = '';\n\n  /**\n   * Load balancer that attempts to connect to each backend in the address list\n   * in order, and picks the first one that connects, using it for every\n   * request.\n   * @param channelControlHelper `ChannelControlHelper` instance provided by\n   *     this load balancer's owner.\n   */\n  constructor(\n    private readonly channelControlHelper: ChannelControlHelper\n  ) {\n    this.connectionDelayTimeout = setTimeout(() => {}, 0);\n    clearTimeout(this.connectionDelayTimeout);\n  }\n\n  private allChildrenHaveReportedTF(): boolean {\n    return this.children.every(child => child.hasReportedTransientFailure);\n  }\n\n  private resetChildrenReportedTF() {\n    this.children.every(child => child.hasReportedTransientFailure = false);\n  }\n\n  private calculateAndReportNewState() {\n    if (this.currentPick) {\n      if (this.reportHealthStatus && !this.currentPick.isHealthy()) {\n        const errorMessage = `Picked subchannel ${this.currentPick.getAddress()} is unhealthy`;\n        this.updateState(\n          ConnectivityState.TRANSIENT_FAILURE,\n          new UnavailablePicker({\n            details: errorMessage,\n          }),\n          errorMessage\n        );\n      } else {\n        this.updateState(\n          ConnectivityState.READY,\n          new PickFirstPicker(this.currentPick),\n          null\n        );\n      }\n    } else if (this.latestAddressList?.length === 0) {\n      const errorMessage = `No connection established. Last error: ${this.lastError}. Resolution note: ${this.latestResolutionNote}`;\n      this.updateState(\n        ConnectivityState.TRANSIENT_FAILURE,\n        new UnavailablePicker({\n          details: errorMessage,\n        }),\n        errorMessage\n      );\n    } else if (this.children.length === 0) {\n      this.updateState(ConnectivityState.IDLE, new QueuePicker(this), null);\n    } else {\n      if (this.stickyTransientFailureMode) {\n        const errorMessage = `No connection established. Last error: ${this.lastError}. Resolution note: ${this.latestResolutionNote}`;\n        this.updateState(\n          ConnectivityState.TRANSIENT_FAILURE,\n          new UnavailablePicker({\n            details: errorMessage,\n          }),\n          errorMessage\n        );\n      } else {\n        this.updateState(ConnectivityState.CONNECTING, new QueuePicker(this), null);\n      }\n    }\n  }\n\n  private requestReresolution() {\n    this.channelControlHelper.requestReresolution();\n  }\n\n  private maybeEnterStickyTransientFailureMode() {\n    if (!this.allChildrenHaveReportedTF()) {\n      return;\n    }\n    this.requestReresolution();\n    this.resetChildrenReportedTF();\n    if (this.stickyTransientFailureMode) {\n      this.calculateAndReportNewState();\n      return;\n    }\n    this.stickyTransientFailureMode = true;\n    for (const { subchannel } of this.children) {\n      subchannel.startConnecting();\n    }\n    this.calculateAndReportNewState();\n  }\n\n  private removeCurrentPick() {\n    if (this.currentPick !== null) {\n      this.currentPick.removeConnectivityStateListener(this.subchannelStateListener);\n      this.channelControlHelper.removeChannelzChild(\n        this.currentPick.getChannelzRef()\n      );\n      this.currentPick.removeHealthStateWatcher(\n        this.pickedSubchannelHealthListener\n      );\n      // Unref last, to avoid triggering listeners\n      this.currentPick.unref();\n      this.currentPick = null;\n    }\n  }\n\n  private onSubchannelStateUpdate(\n    subchannel: SubchannelInterface,\n    previousState: ConnectivityState,\n    newState: ConnectivityState,\n    errorMessage?: string\n  ) {\n    if (this.currentPick?.realSubchannelEquals(subchannel)) {\n      if (newState !== ConnectivityState.READY) {\n        this.removeCurrentPick();\n        this.calculateAndReportNewState();\n      }\n      return;\n    }\n    for (const [index, child] of this.children.entries()) {\n      if (subchannel.realSubchannelEquals(child.subchannel)) {\n        if (newState === ConnectivityState.READY) {\n          this.pickSubchannel(child.subchannel);\n        }\n        if (newState === ConnectivityState.TRANSIENT_FAILURE) {\n          child.hasReportedTransientFailure = true;\n          if (errorMessage) {\n            this.lastError = errorMessage;\n          }\n          this.maybeEnterStickyTransientFailureMode();\n          if (index === this.currentSubchannelIndex) {\n            this.startNextSubchannelConnecting(index + 1);\n          }\n        }\n        child.subchannel.startConnecting();\n        return;\n      }\n    }\n  }\n\n  private startNextSubchannelConnecting(startIndex: number) {\n    clearTimeout(this.connectionDelayTimeout);\n    for (const [index, child] of this.children.entries()) {\n      if (index >= startIndex) {\n        const subchannelState = child.subchannel.getConnectivityState();\n        if (\n          subchannelState === ConnectivityState.IDLE ||\n          subchannelState === ConnectivityState.CONNECTING\n        ) {\n          this.startConnecting(index);\n          return;\n        }\n      }\n    }\n    this.maybeEnterStickyTransientFailureMode();\n  }\n\n  /**\n   * Have a single subchannel in the `subchannels` list start connecting.\n   * @param subchannelIndex The index into the `subchannels` list.\n   */\n  private startConnecting(subchannelIndex: number) {\n    clearTimeout(this.connectionDelayTimeout);\n    this.currentSubchannelIndex = subchannelIndex;\n    if (\n      this.children[subchannelIndex].subchannel.getConnectivityState() ===\n      ConnectivityState.IDLE\n    ) {\n      trace(\n        'Start connecting to subchannel with address ' +\n          this.children[subchannelIndex].subchannel.getAddress()\n      );\n      process.nextTick(() => {\n        this.children[subchannelIndex]?.subchannel.startConnecting();\n      });\n    }\n    this.connectionDelayTimeout = setTimeout(() => {\n      this.startNextSubchannelConnecting(subchannelIndex + 1);\n    }, CONNECTION_DELAY_INTERVAL_MS);\n    this.connectionDelayTimeout.unref?.();\n  }\n\n  /**\n   * Declare that the specified subchannel should be used to make requests.\n   * This functions the same independent of whether subchannel is a member of\n   * this.children and whether it is equal to this.currentPick.\n   * Prerequisite: subchannel.getConnectivityState() === READY.\n   * @param subchannel\n   */\n  private pickSubchannel(subchannel: SubchannelInterface) {\n    trace('Pick subchannel with address ' + subchannel.getAddress());\n    this.stickyTransientFailureMode = false;\n    /* Ref before removeCurrentPick and resetSubchannelList to avoid the\n     * refcount dropping to 0 during this process. */\n    subchannel.ref();\n    this.channelControlHelper.addChannelzChild(subchannel.getChannelzRef());\n    this.removeCurrentPick();\n    this.resetSubchannelList();\n    subchannel.addConnectivityStateListener(this.subchannelStateListener);\n    subchannel.addHealthStateWatcher(this.pickedSubchannelHealthListener);\n    this.currentPick = subchannel;\n    clearTimeout(this.connectionDelayTimeout);\n    this.calculateAndReportNewState();\n  }\n\n  private updateState(newState: ConnectivityState, picker: Picker, errorMessage: string | null) {\n    trace(\n      ConnectivityState[this.currentState] +\n        ' -> ' +\n        ConnectivityState[newState]\n    );\n    this.currentState = newState;\n    this.channelControlHelper.updateState(newState, picker, errorMessage);\n  }\n\n  private resetSubchannelList() {\n    for (const child of this.children) {\n      /* Always remoev the connectivity state listener. If the subchannel is\n         getting picked, it will be re-added then. */\n      child.subchannel.removeConnectivityStateListener(\n        this.subchannelStateListener\n      );\n      /* Refs are counted independently for the children list and the\n       * currentPick, so we call unref whether or not the child is the\n       * currentPick. Channelz child references are also refcounted, so\n       * removeChannelzChild can be handled the same way. */\n      child.subchannel.unref();\n      this.channelControlHelper.removeChannelzChild(\n        child.subchannel.getChannelzRef()\n      );\n    }\n    this.currentSubchannelIndex = 0;\n    this.children = [];\n  }\n\n  private connectToAddressList(addressList: SubchannelAddress[], options: ChannelOptions) {\n    trace('connectToAddressList([' + addressList.map(address => subchannelAddressToString(address)) + '])');\n    const newChildrenList = addressList.map(address => ({\n      subchannel: this.channelControlHelper.createSubchannel(address, options),\n      hasReportedTransientFailure: false,\n    }));\n    for (const { subchannel } of newChildrenList) {\n      if (subchannel.getConnectivityState() === ConnectivityState.READY) {\n        this.pickSubchannel(subchannel);\n        return;\n      }\n    }\n    /* Ref each subchannel before resetting the list, to ensure that\n     * subchannels shared between the list don't drop to 0 refs during the\n     * transition. */\n    for (const { subchannel } of newChildrenList) {\n      subchannel.ref();\n      this.channelControlHelper.addChannelzChild(subchannel.getChannelzRef());\n    }\n    this.resetSubchannelList();\n    this.children = newChildrenList;\n    for (const { subchannel } of this.children) {\n      subchannel.addConnectivityStateListener(this.subchannelStateListener);\n    }\n    for (const child of this.children) {\n      if (\n        child.subchannel.getConnectivityState() ===\n        ConnectivityState.TRANSIENT_FAILURE\n      ) {\n        child.hasReportedTransientFailure = true;\n      }\n    }\n    this.startNextSubchannelConnecting(0);\n    this.calculateAndReportNewState();\n  }\n\n  updateAddressList(\n    maybeEndpointList: StatusOr<Endpoint[]>,\n    lbConfig: TypedLoadBalancingConfig,\n    options: ChannelOptions,\n    resolutionNote: string\n  ): boolean {\n    if (!(lbConfig instanceof PickFirstLoadBalancingConfig)) {\n      return false;\n    }\n    if (!maybeEndpointList.ok) {\n      if (this.children.length === 0 && this.currentPick === null) {\n        this.channelControlHelper.updateState(\n          ConnectivityState.TRANSIENT_FAILURE,\n          new UnavailablePicker(maybeEndpointList.error),\n          maybeEndpointList.error.details\n        );\n      }\n      return true;\n    }\n    let endpointList = maybeEndpointList.value;\n    this.reportHealthStatus = options[REPORT_HEALTH_STATUS_OPTION_NAME];\n    /* Previously, an update would be discarded if it was identical to the\n     * previous update, to minimize churn. Now the DNS resolver is\n     * rate-limited, so that is less of a concern. */\n    if (lbConfig.getShuffleAddressList()) {\n      endpointList = shuffled(endpointList);\n    }\n    const rawAddressList = ([] as SubchannelAddress[]).concat(\n      ...endpointList.map(endpoint => endpoint.addresses)\n    );\n    trace('updateAddressList([' + rawAddressList.map(address => subchannelAddressToString(address)) + '])');\n    const addressList = interleaveAddressFamilies(rawAddressList);\n    this.latestAddressList = addressList;\n    this.latestOptions = options;\n    this.connectToAddressList(addressList, options);\n    this.latestResolutionNote = resolutionNote;\n    if (rawAddressList.length > 0) {\n      return true;\n    } else {\n      this.lastError = 'No addresses resolved';\n      return false;\n    }\n  }\n\n  exitIdle() {\n    if (\n      this.currentState === ConnectivityState.IDLE &&\n      this.latestAddressList\n    ) {\n      this.connectToAddressList(this.latestAddressList, this.latestOptions);\n    }\n  }\n\n  resetBackoff() {\n    /* The pick first load balancer does not have a connection backoff, so this\n     * does nothing */\n  }\n\n  destroy() {\n    this.resetSubchannelList();\n    this.removeCurrentPick();\n  }\n\n  getTypeName(): string {\n    return TYPE_NAME;\n  }\n}\n\nconst LEAF_CONFIG = new PickFirstLoadBalancingConfig(false);\n\n/**\n * This class handles the leaf load balancing operations for a single endpoint.\n * It is a thin wrapper around a PickFirstLoadBalancer with a different API\n * that more closely reflects how it will be used as a leaf balancer.\n */\nexport class LeafLoadBalancer {\n  private pickFirstBalancer: PickFirstLoadBalancer;\n  private latestState: ConnectivityState = ConnectivityState.IDLE;\n  private latestPicker: Picker;\n  constructor(\n    private endpoint: Endpoint,\n    channelControlHelper: ChannelControlHelper,\n    private options: ChannelOptions,\n    private resolutionNote: string\n  ) {\n    const childChannelControlHelper = createChildChannelControlHelper(\n      channelControlHelper,\n      {\n        updateState: (connectivityState, picker, errorMessage) => {\n          this.latestState = connectivityState;\n          this.latestPicker = picker;\n          channelControlHelper.updateState(connectivityState, picker, errorMessage);\n        },\n      }\n    );\n    this.pickFirstBalancer = new PickFirstLoadBalancer(\n      childChannelControlHelper\n    );\n    this.latestPicker = new QueuePicker(this.pickFirstBalancer);\n  }\n\n  startConnecting() {\n    this.pickFirstBalancer.updateAddressList(\n      statusOrFromValue([this.endpoint]),\n      LEAF_CONFIG,\n      { ...this.options, [REPORT_HEALTH_STATUS_OPTION_NAME]: true },\n      this.resolutionNote\n    );\n  }\n\n  /**\n   * Update the endpoint associated with this LeafLoadBalancer to a new\n   * endpoint. Does not trigger connection establishment if a connection\n   * attempt is not already in progress.\n   * @param newEndpoint\n   */\n  updateEndpoint(newEndpoint: Endpoint, newOptions: ChannelOptions) {\n    this.options = newOptions;\n    this.endpoint = newEndpoint;\n    if (this.latestState !== ConnectivityState.IDLE) {\n      this.startConnecting();\n    }\n  }\n\n  getConnectivityState() {\n    return this.latestState;\n  }\n\n  getPicker() {\n    return this.latestPicker;\n  }\n\n  getEndpoint() {\n    return this.endpoint;\n  }\n\n  exitIdle() {\n    this.pickFirstBalancer.exitIdle();\n  }\n\n  destroy() {\n    this.pickFirstBalancer.destroy();\n  }\n}\n\nexport function setup(): void {\n  registerLoadBalancerType(\n    TYPE_NAME,\n    PickFirstLoadBalancer,\n    PickFirstLoadBalancingConfig\n  );\n  registerDefaultLoadBalancerType(TYPE_NAME);\n}\n","/*\n * Copyright 2024 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport * as fs from 'fs';\nimport * as logging from './logging';\nimport { LogVerbosity } from './constants';\nimport { promisify } from 'util';\n\nconst TRACER_NAME = 'certificate_provider';\n\nfunction trace(text: string) {\n  logging.trace(LogVerbosity.DEBUG, TRACER_NAME, text);\n}\n\nexport interface CaCertificateUpdate {\n  caCertificate: Buffer;\n}\n\nexport interface IdentityCertificateUpdate {\n  certificate: Buffer;\n  privateKey: Buffer;\n}\n\nexport interface CaCertificateUpdateListener {\n  (update: CaCertificateUpdate | null): void;\n}\n\nexport interface IdentityCertificateUpdateListener {\n  (update: IdentityCertificateUpdate | null) : void;\n}\n\nexport interface CertificateProvider {\n  addCaCertificateListener(listener: CaCertificateUpdateListener): void;\n  removeCaCertificateListener(listener: CaCertificateUpdateListener): void;\n  addIdentityCertificateListener(listener: IdentityCertificateUpdateListener): void;\n  removeIdentityCertificateListener(listener: IdentityCertificateUpdateListener): void;\n}\n\nexport interface FileWatcherCertificateProviderConfig {\n  certificateFile?: string | undefined;\n  privateKeyFile?: string | undefined;\n  caCertificateFile?: string | undefined;\n  refreshIntervalMs: number;\n}\n\nconst readFilePromise = promisify(fs.readFile);\n\nexport class FileWatcherCertificateProvider implements CertificateProvider {\n  private refreshTimer: NodeJS.Timeout | null = null;\n  private fileResultPromise: Promise<[PromiseSettledResult<Buffer>, PromiseSettledResult<Buffer>, PromiseSettledResult<Buffer>]> | null = null;\n  private latestCaUpdate: CaCertificateUpdate | null | undefined = undefined;\n  private caListeners: Set<CaCertificateUpdateListener> = new Set();\n  private latestIdentityUpdate: IdentityCertificateUpdate | null | undefined = undefined;\n  private identityListeners: Set<IdentityCertificateUpdateListener> = new Set();\n  private lastUpdateTime: Date | null = null;\n\n  constructor(\n    private config: FileWatcherCertificateProviderConfig\n  ) {\n    if ((config.certificateFile === undefined) !== (config.privateKeyFile === undefined)) {\n      throw new Error('certificateFile and privateKeyFile must be set or unset together');\n    }\n    if (config.certificateFile === undefined && config.caCertificateFile === undefined) {\n      throw new Error('At least one of certificateFile and caCertificateFile must be set');\n    }\n    trace('File watcher constructed with config ' + JSON.stringify(config));\n  }\n\n  private updateCertificates() {\n    if (this.fileResultPromise) {\n      return;\n    }\n    this.fileResultPromise = Promise.allSettled([\n      this.config.certificateFile ? readFilePromise(this.config.certificateFile) : Promise.reject<Buffer>(),\n      this.config.privateKeyFile ? readFilePromise(this.config.privateKeyFile) : Promise.reject<Buffer>(),\n      this.config.caCertificateFile ? readFilePromise(this.config.caCertificateFile) : Promise.reject<Buffer>()\n    ]);\n    this.fileResultPromise.then(([certificateResult, privateKeyResult, caCertificateResult]) => {\n      if (!this.refreshTimer) {\n        return;\n      }\n      trace('File watcher read certificates certificate ' + certificateResult.status + ', privateKey ' + privateKeyResult.status + ', CA certificate ' + caCertificateResult.status);\n      this.lastUpdateTime = new Date();\n      this.fileResultPromise = null;\n      if (certificateResult.status === 'fulfilled' && privateKeyResult.status === 'fulfilled') {\n        this.latestIdentityUpdate = {\n          certificate: certificateResult.value,\n          privateKey: privateKeyResult.value\n        };\n      } else {\n        this.latestIdentityUpdate = null;\n      }\n      if (caCertificateResult.status === 'fulfilled') {\n        this.latestCaUpdate = {\n          caCertificate: caCertificateResult.value\n        };\n      } else {\n        this.latestCaUpdate = null;\n      }\n      for (const listener of this.identityListeners) {\n        listener(this.latestIdentityUpdate);\n      }\n      for (const listener of this.caListeners) {\n        listener(this.latestCaUpdate);\n      }\n    });\n    trace('File watcher initiated certificate update');\n  }\n\n  private maybeStartWatchingFiles() {\n    if (!this.refreshTimer) {\n      /* Perform the first read immediately, but only if there was not already\n       * a recent read, to avoid reading from the filesystem significantly more\n       * frequently than configured if the provider quickly switches between\n       * used and unused. */\n      const timeSinceLastUpdate = this.lastUpdateTime ? (new Date()).getTime() - this.lastUpdateTime.getTime() : Infinity;\n      if (timeSinceLastUpdate > this.config.refreshIntervalMs) {\n        this.updateCertificates();\n      }\n      if (timeSinceLastUpdate > this.config.refreshIntervalMs * 2) {\n        // Clear out old updates if they are definitely stale\n        this.latestCaUpdate = undefined;\n        this.latestIdentityUpdate = undefined;\n      }\n      this.refreshTimer = setInterval(() => this.updateCertificates(), this.config.refreshIntervalMs);\n      trace('File watcher started watching');\n    }\n  }\n\n  private maybeStopWatchingFiles() {\n    if (this.caListeners.size === 0 && this.identityListeners.size === 0) {\n      this.fileResultPromise = null;\n      if (this.refreshTimer) {\n        clearInterval(this.refreshTimer);\n        this.refreshTimer = null;\n      }\n    }\n  }\n\n  addCaCertificateListener(listener: CaCertificateUpdateListener): void {\n    this.caListeners.add(listener);\n    this.maybeStartWatchingFiles();\n    if (this.latestCaUpdate !== undefined) {\n      process.nextTick(listener, this.latestCaUpdate);\n    }\n  }\n  removeCaCertificateListener(listener: CaCertificateUpdateListener): void {\n    this.caListeners.delete(listener);\n    this.maybeStopWatchingFiles();\n  }\n  addIdentityCertificateListener(listener: IdentityCertificateUpdateListener): void {\n    this.identityListeners.add(listener);\n    this.maybeStartWatchingFiles();\n    if (this.latestIdentityUpdate !== undefined) {\n      process.nextTick(listener, this.latestIdentityUpdate);\n    }\n  }\n  removeIdentityCertificateListener(listener: IdentityCertificateUpdateListener): void {\n    this.identityListeners.delete(listener);\n    this.maybeStopWatchingFiles();\n  }\n}\n","export { trace, log } from './logging';\nexport {\n  Resolver,\n  ResolverListener,\n  registerResolver,\n  ConfigSelector,\n  createResolver,\n  CHANNEL_ARGS_CONFIG_SELECTOR_KEY,\n} from './resolver';\nexport { GrpcUri, uriToString, splitHostPort, HostPort } from './uri-parser';\nexport { Duration, durationToMs, parseDuration } from './duration';\nexport { BackoffTimeout } from './backoff-timeout';\nexport {\n  LoadBalancer,\n  TypedLoadBalancingConfig,\n  ChannelControlHelper,\n  createChildChannelControlHelper,\n  registerLoadBalancerType,\n  selectLbConfigFromList,\n  parseLoadBalancingConfig,\n  isLoadBalancerNameRegistered,\n} from './load-balancer';\nexport { LeafLoadBalancer } from './load-balancer-pick-first';\nexport {\n  SubchannelAddress,\n  subchannelAddressToString,\n  Endpoint,\n  endpointToString,\n  endpointHasAddress,\n  EndpointMap,\n} from './subchannel-address';\nexport { ChildLoadBalancerHandler } from './load-balancer-child-handler';\nexport {\n  Picker,\n  UnavailablePicker,\n  QueuePicker,\n  PickResult,\n  PickArgs,\n  PickResultType,\n} from './picker';\nexport {\n  Call as CallStream,\n  StatusOr,\n  statusOrFromValue,\n  statusOrFromError\n} from './call-interface';\nexport { Filter, BaseFilter, FilterFactory } from './filter';\nexport { FilterStackFactory } from './filter-stack';\nexport { registerAdminService } from './admin';\nexport {\n  SubchannelInterface,\n  BaseSubchannelWrapper,\n  ConnectivityStateListener,\n  HealthListener,\n} from './subchannel-interface';\nexport {\n  OutlierDetectionRawConfig,\n  SuccessRateEjectionConfig,\n  FailurePercentageEjectionConfig,\n} from './load-balancer-outlier-detection';\n\nexport { createServerCredentialsWithInterceptors, createCertificateProviderServerCredentials } from './server-credentials';\nexport {\n  CaCertificateUpdate,\n  CaCertificateUpdateListener,\n  IdentityCertificateUpdate,\n  IdentityCertificateUpdateListener,\n  CertificateProvider,\n  FileWatcherCertificateProvider,\n  FileWatcherCertificateProviderConfig\n} from './certificate-provider';\nexport { createCertificateProviderChannelCredentials, SecureConnector, SecureConnectResult } from './channel-credentials';\nexport { SUBCHANNEL_ARGS_EXCLUDE_KEY_PREFIX } from './internal-channel';\n","/*\n * Copyright 2019 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Resolver, ResolverListener, registerResolver } from './resolver';\nimport { Endpoint } from './subchannel-address';\nimport { GrpcUri } from './uri-parser';\nimport { ChannelOptions } from './channel-options';\nimport { statusOrFromValue } from './call-interface';\n\nclass UdsResolver implements Resolver {\n  private hasReturnedResult = false;\n  private endpoints: Endpoint[] = [];\n  constructor(\n    target: GrpcUri,\n    private listener: ResolverListener,\n    channelOptions: ChannelOptions\n  ) {\n    let path: string;\n    if (target.authority === '') {\n      path = '/' + target.path;\n    } else {\n      path = target.path;\n    }\n    this.endpoints = [{ addresses: [{ path }] }];\n  }\n  updateResolution(): void {\n    if (!this.hasReturnedResult) {\n      this.hasReturnedResult = true;\n      process.nextTick(\n        this.listener,\n        statusOrFromValue(this.endpoints),\n        {},\n        null,\n        ''\n      );\n    }\n  }\n\n  destroy() {\n    this.hasReturnedResult = false;\n  }\n\n  static getDefaultAuthority(target: GrpcUri): string {\n    return 'localhost';\n  }\n}\n\nexport function setup() {\n  registerResolver('unix', UdsResolver);\n}\n","/*\n * Copyright 2021 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { isIPv4, isIPv6 } from 'net';\nimport { StatusObject, statusOrFromError, statusOrFromValue } from './call-interface';\nimport { ChannelOptions } from './channel-options';\nimport { LogVerbosity, Status } from './constants';\nimport { Metadata } from './metadata';\nimport { registerResolver, Resolver, ResolverListener } from './resolver';\nimport { Endpoint, SubchannelAddress, subchannelAddressToString } from './subchannel-address';\nimport { GrpcUri, splitHostPort, uriToString } from './uri-parser';\nimport * as logging from './logging';\n\nconst TRACER_NAME = 'ip_resolver';\n\nfunction trace(text: string): void {\n  logging.trace(LogVerbosity.DEBUG, TRACER_NAME, text);\n}\n\nconst IPV4_SCHEME = 'ipv4';\nconst IPV6_SCHEME = 'ipv6';\n\n/**\n * The default TCP port to connect to if not explicitly specified in the target.\n */\nconst DEFAULT_PORT = 443;\n\nclass IpResolver implements Resolver {\n  private endpoints: Endpoint[] = [];\n  private error: StatusObject | null = null;\n  private hasReturnedResult = false;\n  constructor(\n    target: GrpcUri,\n    private listener: ResolverListener,\n    channelOptions: ChannelOptions\n  ) {\n    trace('Resolver constructed for target ' + uriToString(target));\n    const addresses: SubchannelAddress[] = [];\n    if (!(target.scheme === IPV4_SCHEME || target.scheme === IPV6_SCHEME)) {\n      this.error = {\n        code: Status.UNAVAILABLE,\n        details: `Unrecognized scheme ${target.scheme} in IP resolver`,\n        metadata: new Metadata(),\n      };\n      return;\n    }\n    const pathList = target.path.split(',');\n    for (const path of pathList) {\n      const hostPort = splitHostPort(path);\n      if (hostPort === null) {\n        this.error = {\n          code: Status.UNAVAILABLE,\n          details: `Failed to parse ${target.scheme} address ${path}`,\n          metadata: new Metadata(),\n        };\n        return;\n      }\n      if (\n        (target.scheme === IPV4_SCHEME && !isIPv4(hostPort.host)) ||\n        (target.scheme === IPV6_SCHEME && !isIPv6(hostPort.host))\n      ) {\n        this.error = {\n          code: Status.UNAVAILABLE,\n          details: `Failed to parse ${target.scheme} address ${path}`,\n          metadata: new Metadata(),\n        };\n        return;\n      }\n      addresses.push({\n        host: hostPort.host,\n        port: hostPort.port ?? DEFAULT_PORT,\n      });\n    }\n    this.endpoints = addresses.map(address => ({ addresses: [address] }));\n    trace('Parsed ' + target.scheme + ' address list ' + addresses.map(subchannelAddressToString));\n  }\n  updateResolution(): void {\n    if (!this.hasReturnedResult) {\n      this.hasReturnedResult = true;\n      process.nextTick(() => {\n        if (this.error) {\n          this.listener(\n            statusOrFromError(this.error),\n            {},\n            null,\n            ''\n          );\n        } else {\n          this.listener(\n            statusOrFromValue(this.endpoints),\n            {},\n            null,\n            ''\n          );\n        }\n      });\n    }\n  }\n  destroy(): void {\n    this.hasReturnedResult = false;\n  }\n\n  static getDefaultAuthority(target: GrpcUri): string {\n    return target.path.split(',')[0];\n  }\n}\n\nexport function setup() {\n  registerResolver(IPV4_SCHEME, IpResolver);\n  registerResolver(IPV6_SCHEME, IpResolver);\n}\n","/*\n * Copyright 2019 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport {\n  LoadBalancer,\n  ChannelControlHelper,\n  TypedLoadBalancingConfig,\n  registerLoadBalancerType,\n  createChildChannelControlHelper,\n} from './load-balancer';\nimport { ConnectivityState } from './connectivity-state';\nimport {\n  QueuePicker,\n  Picker,\n  PickArgs,\n  UnavailablePicker,\n  PickResult,\n} from './picker';\nimport * as logging from './logging';\nimport { LogVerbosity } from './constants';\nimport {\n  Endpoint,\n  endpointEqual,\n  endpointToString,\n} from './subchannel-address';\nimport { LeafLoadBalancer } from './load-balancer-pick-first';\nimport { ChannelOptions } from './channel-options';\nimport { StatusOr } from './call-interface';\n\nconst TRACER_NAME = 'round_robin';\n\nfunction trace(text: string): void {\n  logging.trace(LogVerbosity.DEBUG, TRACER_NAME, text);\n}\n\nconst TYPE_NAME = 'round_robin';\n\nclass RoundRobinLoadBalancingConfig implements TypedLoadBalancingConfig {\n  getLoadBalancerName(): string {\n    return TYPE_NAME;\n  }\n\n  constructor() {}\n\n  toJsonObject(): object {\n    return {\n      [TYPE_NAME]: {},\n    };\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  static createFromJson(obj: any) {\n    return new RoundRobinLoadBalancingConfig();\n  }\n}\n\nclass RoundRobinPicker implements Picker {\n  constructor(\n    private readonly children: { endpoint: Endpoint; picker: Picker }[],\n    private nextIndex = 0\n  ) {}\n\n  pick(pickArgs: PickArgs): PickResult {\n    const childPicker = this.children[this.nextIndex].picker;\n    this.nextIndex = (this.nextIndex + 1) % this.children.length;\n    return childPicker.pick(pickArgs);\n  }\n\n  /**\n   * Check what the next subchannel returned would be. Used by the load\n   * balancer implementation to preserve this part of the picker state if\n   * possible when a subchannel connects or disconnects.\n   */\n  peekNextEndpoint(): Endpoint {\n    return this.children[this.nextIndex].endpoint;\n  }\n}\n\nfunction rotateArray<T>(list: T[], startIndex: number) {\n  return [...list.slice(startIndex), ...list.slice(0, startIndex)];\n}\n\nexport class RoundRobinLoadBalancer implements LoadBalancer {\n  private children: LeafLoadBalancer[] = [];\n\n  private currentState: ConnectivityState = ConnectivityState.IDLE;\n\n  private currentReadyPicker: RoundRobinPicker | null = null;\n\n  private updatesPaused = false;\n\n  private childChannelControlHelper: ChannelControlHelper;\n\n  private lastError: string | null = null;\n\n  constructor(\n    private readonly channelControlHelper: ChannelControlHelper\n  ) {\n    this.childChannelControlHelper = createChildChannelControlHelper(\n      channelControlHelper,\n      {\n        updateState: (connectivityState, picker, errorMessage) => {\n          /* Ensure that name resolution is requested again after active\n           * connections are dropped. This is more aggressive than necessary to\n           * accomplish that, so we are counting on resolvers to have\n           * reasonable rate limits. */\n          if (this.currentState === ConnectivityState.READY && connectivityState !== ConnectivityState.READY) {\n            this.channelControlHelper.requestReresolution();\n          }\n          if (errorMessage) {\n            this.lastError = errorMessage;\n          }\n          this.calculateAndUpdateState();\n        },\n      }\n    );\n  }\n\n  private countChildrenWithState(state: ConnectivityState) {\n    return this.children.filter(child => child.getConnectivityState() === state)\n      .length;\n  }\n\n  private calculateAndUpdateState() {\n    if (this.updatesPaused) {\n      return;\n    }\n    if (this.countChildrenWithState(ConnectivityState.READY) > 0) {\n      const readyChildren = this.children.filter(\n        child => child.getConnectivityState() === ConnectivityState.READY\n      );\n      let index = 0;\n      if (this.currentReadyPicker !== null) {\n        const nextPickedEndpoint = this.currentReadyPicker.peekNextEndpoint();\n        index = readyChildren.findIndex(child =>\n          endpointEqual(child.getEndpoint(), nextPickedEndpoint)\n        );\n        if (index < 0) {\n          index = 0;\n        }\n      }\n      this.updateState(\n        ConnectivityState.READY,\n        new RoundRobinPicker(\n          readyChildren.map(child => ({\n            endpoint: child.getEndpoint(),\n            picker: child.getPicker(),\n          })),\n          index\n        ),\n        null\n      );\n    } else if (this.countChildrenWithState(ConnectivityState.CONNECTING) > 0) {\n      this.updateState(ConnectivityState.CONNECTING, new QueuePicker(this), null);\n    } else if (\n      this.countChildrenWithState(ConnectivityState.TRANSIENT_FAILURE) > 0\n    ) {\n      const errorMessage = `round_robin: No connection established. Last error: ${this.lastError}`;\n      this.updateState(\n        ConnectivityState.TRANSIENT_FAILURE,\n        new UnavailablePicker({\n          details: errorMessage,\n        }),\n        errorMessage\n      );\n    } else {\n      this.updateState(ConnectivityState.IDLE, new QueuePicker(this), null);\n    }\n    /* round_robin should keep all children connected, this is how we do that.\n     * We can't do this more efficiently in the individual child's updateState\n     * callback because that doesn't have a reference to which child the state\n     * change is associated with. */\n    for (const child of this.children) {\n      if (child.getConnectivityState() === ConnectivityState.IDLE) {\n        child.exitIdle();\n      }\n    }\n  }\n\n  private updateState(newState: ConnectivityState, picker: Picker, errorMessage: string | null) {\n    trace(\n      ConnectivityState[this.currentState] +\n        ' -> ' +\n        ConnectivityState[newState]\n    );\n    if (newState === ConnectivityState.READY) {\n      this.currentReadyPicker = picker as RoundRobinPicker;\n    } else {\n      this.currentReadyPicker = null;\n    }\n    this.currentState = newState;\n    this.channelControlHelper.updateState(newState, picker, errorMessage);\n  }\n\n  private resetSubchannelList() {\n    for (const child of this.children) {\n      child.destroy();\n    }\n    this.children = [];\n  }\n\n  updateAddressList(\n    maybeEndpointList: StatusOr<Endpoint[]>,\n    lbConfig: TypedLoadBalancingConfig,\n    options: ChannelOptions,\n    resolutionNote: string\n  ): boolean {\n    if (!(lbConfig instanceof RoundRobinLoadBalancingConfig)) {\n      return false;\n    }\n    if (!maybeEndpointList.ok) {\n      if (this.children.length === 0) {\n        this.updateState(\n          ConnectivityState.TRANSIENT_FAILURE,\n          new UnavailablePicker(maybeEndpointList.error),\n          maybeEndpointList.error.details\n        );\n      }\n      return true;\n    }\n    const startIndex = (Math.random() * maybeEndpointList.value.length) | 0;\n    const endpointList = rotateArray(maybeEndpointList.value, startIndex);\n    this.resetSubchannelList();\n    if (endpointList.length === 0) {\n      const errorMessage = `No addresses resolved. Resolution note: ${resolutionNote}`;\n      this.updateState(\n        ConnectivityState.TRANSIENT_FAILURE,\n        new UnavailablePicker({details: errorMessage}),\n        errorMessage\n      );\n    }\n    trace('Connect to endpoint list ' + endpointList.map(endpointToString));\n    this.updatesPaused = true;\n    this.children = endpointList.map(\n      endpoint =>\n        new LeafLoadBalancer(\n          endpoint,\n          this.childChannelControlHelper,\n          options,\n          resolutionNote\n        )\n    );\n    for (const child of this.children) {\n      child.startConnecting();\n    }\n    this.updatesPaused = false;\n    this.calculateAndUpdateState();\n    return true;\n  }\n\n  exitIdle(): void {\n    /* The round_robin LB policy is only in the IDLE state if it has no\n     * addresses to try to connect to and it has no picked subchannel.\n     * In that case, there is no meaningful action that can be taken here. */\n  }\n  resetBackoff(): void {\n    // This LB policy has no backoff to reset\n  }\n  destroy(): void {\n    this.resetSubchannelList();\n  }\n  getTypeName(): string {\n    return TYPE_NAME;\n  }\n}\n\nexport function setup() {\n  registerLoadBalancerType(\n    TYPE_NAME,\n    RoundRobinLoadBalancer,\n    RoundRobinLoadBalancingConfig\n  );\n}\n","/*\n * Copyright 2022 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport { ChannelOptions } from './channel-options';\nimport { ConnectivityState } from './connectivity-state';\nimport { LogVerbosity, Status } from './constants';\nimport { Duration, durationToMs, isDuration, msToDuration } from './duration';\nimport {\n  ChannelControlHelper,\n  createChildChannelControlHelper,\n  registerLoadBalancerType,\n} from './experimental';\nimport {\n  selectLbConfigFromList,\n  LoadBalancer,\n  TypedLoadBalancingConfig,\n} from './load-balancer';\nimport { ChildLoadBalancerHandler } from './load-balancer-child-handler';\nimport { PickArgs, Picker, PickResult, PickResultType } from './picker';\nimport {\n  Endpoint,\n  EndpointMap,\n  SubchannelAddress,\n  endpointToString,\n} from './subchannel-address';\nimport {\n  BaseSubchannelWrapper,\n  SubchannelInterface,\n} from './subchannel-interface';\nimport * as logging from './logging';\nimport { LoadBalancingConfig } from './service-config';\nimport { StatusOr } from './call-interface';\n\nconst TRACER_NAME = 'outlier_detection';\n\nfunction trace(text: string): void {\n  logging.trace(LogVerbosity.DEBUG, TRACER_NAME, text);\n}\n\nconst TYPE_NAME = 'outlier_detection';\n\nconst OUTLIER_DETECTION_ENABLED =\n  (process.env.GRPC_EXPERIMENTAL_ENABLE_OUTLIER_DETECTION ?? 'true') === 'true';\n\nexport interface SuccessRateEjectionConfig {\n  readonly stdev_factor: number;\n  readonly enforcement_percentage: number;\n  readonly minimum_hosts: number;\n  readonly request_volume: number;\n}\n\nexport interface FailurePercentageEjectionConfig {\n  readonly threshold: number;\n  readonly enforcement_percentage: number;\n  readonly minimum_hosts: number;\n  readonly request_volume: number;\n}\n\nexport interface OutlierDetectionRawConfig {\n  interval?: Duration;\n  base_ejection_time?: Duration;\n  max_ejection_time?: Duration;\n  max_ejection_percent?: number;\n  success_rate_ejection?: Partial<SuccessRateEjectionConfig>;\n  failure_percentage_ejection?: Partial<FailurePercentageEjectionConfig>;\n  child_policy: LoadBalancingConfig[];\n}\n\nconst defaultSuccessRateEjectionConfig: SuccessRateEjectionConfig = {\n  stdev_factor: 1900,\n  enforcement_percentage: 100,\n  minimum_hosts: 5,\n  request_volume: 100,\n};\n\nconst defaultFailurePercentageEjectionConfig: FailurePercentageEjectionConfig =\n  {\n    threshold: 85,\n    enforcement_percentage: 100,\n    minimum_hosts: 5,\n    request_volume: 50,\n  };\n\ntype TypeofValues =\n  | 'object'\n  | 'boolean'\n  | 'function'\n  | 'number'\n  | 'string'\n  | 'undefined';\n\nfunction validateFieldType(\n  obj: any,\n  fieldName: string,\n  expectedType: TypeofValues,\n  objectName?: string\n) {\n  if (\n    fieldName in obj &&\n    obj[fieldName] !== undefined &&\n    typeof obj[fieldName] !== expectedType\n  ) {\n    const fullFieldName = objectName ? `${objectName}.${fieldName}` : fieldName;\n    throw new Error(\n      `outlier detection config ${fullFieldName} parse error: expected ${expectedType}, got ${typeof obj[\n        fieldName\n      ]}`\n    );\n  }\n}\n\nfunction validatePositiveDuration(\n  obj: any,\n  fieldName: string,\n  objectName?: string\n) {\n  const fullFieldName = objectName ? `${objectName}.${fieldName}` : fieldName;\n  if (fieldName in obj && obj[fieldName] !== undefined) {\n    if (!isDuration(obj[fieldName])) {\n      throw new Error(\n        `outlier detection config ${fullFieldName} parse error: expected Duration, got ${typeof obj[\n          fieldName\n        ]}`\n      );\n    }\n    if (\n      !(\n        obj[fieldName].seconds >= 0 &&\n        obj[fieldName].seconds <= 315_576_000_000 &&\n        obj[fieldName].nanos >= 0 &&\n        obj[fieldName].nanos <= 999_999_999\n      )\n    ) {\n      throw new Error(\n        `outlier detection config ${fullFieldName} parse error: values out of range for non-negative Duaration`\n      );\n    }\n  }\n}\n\nfunction validatePercentage(obj: any, fieldName: string, objectName?: string) {\n  const fullFieldName = objectName ? `${objectName}.${fieldName}` : fieldName;\n  validateFieldType(obj, fieldName, 'number', objectName);\n  if (\n    fieldName in obj &&\n    obj[fieldName] !== undefined &&\n    !(obj[fieldName] >= 0 && obj[fieldName] <= 100)\n  ) {\n    throw new Error(\n      `outlier detection config ${fullFieldName} parse error: value out of range for percentage (0-100)`\n    );\n  }\n}\n\nexport class OutlierDetectionLoadBalancingConfig\n  implements TypedLoadBalancingConfig\n{\n  private readonly intervalMs: number;\n  private readonly baseEjectionTimeMs: number;\n  private readonly maxEjectionTimeMs: number;\n  private readonly maxEjectionPercent: number;\n  private readonly successRateEjection: SuccessRateEjectionConfig | null;\n  private readonly failurePercentageEjection: FailurePercentageEjectionConfig | null;\n\n  constructor(\n    intervalMs: number | null,\n    baseEjectionTimeMs: number | null,\n    maxEjectionTimeMs: number | null,\n    maxEjectionPercent: number | null,\n    successRateEjection: Partial<SuccessRateEjectionConfig> | null,\n    failurePercentageEjection: Partial<FailurePercentageEjectionConfig> | null,\n    private readonly childPolicy: TypedLoadBalancingConfig\n  ) {\n    if (childPolicy.getLoadBalancerName() === 'pick_first') {\n      throw new Error(\n        'outlier_detection LB policy cannot have a pick_first child policy'\n      );\n    }\n    this.intervalMs = intervalMs ?? 10_000;\n    this.baseEjectionTimeMs = baseEjectionTimeMs ?? 30_000;\n    this.maxEjectionTimeMs = maxEjectionTimeMs ?? 300_000;\n    this.maxEjectionPercent = maxEjectionPercent ?? 10;\n    this.successRateEjection = successRateEjection\n      ? { ...defaultSuccessRateEjectionConfig, ...successRateEjection }\n      : null;\n    this.failurePercentageEjection = failurePercentageEjection\n      ? {\n          ...defaultFailurePercentageEjectionConfig,\n          ...failurePercentageEjection,\n        }\n      : null;\n  }\n  getLoadBalancerName(): string {\n    return TYPE_NAME;\n  }\n  toJsonObject(): object {\n    return {\n      outlier_detection: {\n        interval: msToDuration(this.intervalMs),\n        base_ejection_time: msToDuration(this.baseEjectionTimeMs),\n        max_ejection_time: msToDuration(this.maxEjectionTimeMs),\n        max_ejection_percent: this.maxEjectionPercent,\n        success_rate_ejection: this.successRateEjection ?? undefined,\n        failure_percentage_ejection:\n          this.failurePercentageEjection ?? undefined,\n        child_policy: [this.childPolicy.toJsonObject()],\n      },\n    };\n  }\n\n  getIntervalMs(): number {\n    return this.intervalMs;\n  }\n  getBaseEjectionTimeMs(): number {\n    return this.baseEjectionTimeMs;\n  }\n  getMaxEjectionTimeMs(): number {\n    return this.maxEjectionTimeMs;\n  }\n  getMaxEjectionPercent(): number {\n    return this.maxEjectionPercent;\n  }\n  getSuccessRateEjectionConfig(): SuccessRateEjectionConfig | null {\n    return this.successRateEjection;\n  }\n  getFailurePercentageEjectionConfig(): FailurePercentageEjectionConfig | null {\n    return this.failurePercentageEjection;\n  }\n  getChildPolicy(): TypedLoadBalancingConfig {\n    return this.childPolicy;\n  }\n\n  static createFromJson(obj: any): OutlierDetectionLoadBalancingConfig {\n    validatePositiveDuration(obj, 'interval');\n    validatePositiveDuration(obj, 'base_ejection_time');\n    validatePositiveDuration(obj, 'max_ejection_time');\n    validatePercentage(obj, 'max_ejection_percent');\n    if (\n      'success_rate_ejection' in obj &&\n      obj.success_rate_ejection !== undefined\n    ) {\n      if (typeof obj.success_rate_ejection !== 'object') {\n        throw new Error(\n          'outlier detection config success_rate_ejection must be an object'\n        );\n      }\n      validateFieldType(\n        obj.success_rate_ejection,\n        'stdev_factor',\n        'number',\n        'success_rate_ejection'\n      );\n      validatePercentage(\n        obj.success_rate_ejection,\n        'enforcement_percentage',\n        'success_rate_ejection'\n      );\n      validateFieldType(\n        obj.success_rate_ejection,\n        'minimum_hosts',\n        'number',\n        'success_rate_ejection'\n      );\n      validateFieldType(\n        obj.success_rate_ejection,\n        'request_volume',\n        'number',\n        'success_rate_ejection'\n      );\n    }\n    if (\n      'failure_percentage_ejection' in obj &&\n      obj.failure_percentage_ejection !== undefined\n    ) {\n      if (typeof obj.failure_percentage_ejection !== 'object') {\n        throw new Error(\n          'outlier detection config failure_percentage_ejection must be an object'\n        );\n      }\n      validatePercentage(\n        obj.failure_percentage_ejection,\n        'threshold',\n        'failure_percentage_ejection'\n      );\n      validatePercentage(\n        obj.failure_percentage_ejection,\n        'enforcement_percentage',\n        'failure_percentage_ejection'\n      );\n      validateFieldType(\n        obj.failure_percentage_ejection,\n        'minimum_hosts',\n        'number',\n        'failure_percentage_ejection'\n      );\n      validateFieldType(\n        obj.failure_percentage_ejection,\n        'request_volume',\n        'number',\n        'failure_percentage_ejection'\n      );\n    }\n\n    if (!('child_policy' in obj) || !Array.isArray(obj.child_policy)) {\n      throw new Error('outlier detection config child_policy must be an array');\n    }\n    const childPolicy = selectLbConfigFromList(obj.child_policy);\n    if (!childPolicy) {\n      throw new Error(\n        'outlier detection config child_policy: no valid recognized policy found'\n      );\n    }\n\n    return new OutlierDetectionLoadBalancingConfig(\n      obj.interval ? durationToMs(obj.interval) : null,\n      obj.base_ejection_time ? durationToMs(obj.base_ejection_time) : null,\n      obj.max_ejection_time ? durationToMs(obj.max_ejection_time) : null,\n      obj.max_ejection_percent ?? null,\n      obj.success_rate_ejection,\n      obj.failure_percentage_ejection,\n      childPolicy\n    );\n  }\n}\n\nclass OutlierDetectionSubchannelWrapper\n  extends BaseSubchannelWrapper\n  implements SubchannelInterface\n{\n  private refCount = 0;\n  constructor(\n    childSubchannel: SubchannelInterface,\n    private mapEntry?: MapEntry\n  ) {\n    super(childSubchannel);\n  }\n\n  ref() {\n    this.child.ref();\n    this.refCount += 1;\n  }\n\n  unref() {\n    this.child.unref();\n    this.refCount -= 1;\n    if (this.refCount <= 0) {\n      if (this.mapEntry) {\n        const index = this.mapEntry.subchannelWrappers.indexOf(this);\n        if (index >= 0) {\n          this.mapEntry.subchannelWrappers.splice(index, 1);\n        }\n      }\n    }\n  }\n\n  eject() {\n    this.setHealthy(false);\n  }\n\n  uneject() {\n    this.setHealthy(true);\n  }\n\n  getMapEntry(): MapEntry | undefined {\n    return this.mapEntry;\n  }\n\n  getWrappedSubchannel(): SubchannelInterface {\n    return this.child;\n  }\n}\n\ninterface CallCountBucket {\n  success: number;\n  failure: number;\n}\n\nfunction createEmptyBucket(): CallCountBucket {\n  return {\n    success: 0,\n    failure: 0,\n  };\n}\n\nclass CallCounter {\n  private activeBucket: CallCountBucket = createEmptyBucket();\n  private inactiveBucket: CallCountBucket = createEmptyBucket();\n  addSuccess() {\n    this.activeBucket.success += 1;\n  }\n  addFailure() {\n    this.activeBucket.failure += 1;\n  }\n  switchBuckets() {\n    this.inactiveBucket = this.activeBucket;\n    this.activeBucket = createEmptyBucket();\n  }\n  getLastSuccesses() {\n    return this.inactiveBucket.success;\n  }\n  getLastFailures() {\n    return this.inactiveBucket.failure;\n  }\n}\n\nclass OutlierDetectionPicker implements Picker {\n  constructor(private wrappedPicker: Picker, private countCalls: boolean) {}\n  pick(pickArgs: PickArgs): PickResult {\n    const wrappedPick = this.wrappedPicker.pick(pickArgs);\n    if (wrappedPick.pickResultType === PickResultType.COMPLETE) {\n      const subchannelWrapper =\n        wrappedPick.subchannel as OutlierDetectionSubchannelWrapper;\n      const mapEntry = subchannelWrapper.getMapEntry();\n      if (mapEntry) {\n        let onCallEnded = wrappedPick.onCallEnded;\n        if (this.countCalls) {\n          onCallEnded = (statusCode, details, metadata) => {\n            if (statusCode === Status.OK) {\n              mapEntry.counter.addSuccess();\n            } else {\n              mapEntry.counter.addFailure();\n            }\n            wrappedPick.onCallEnded?.(statusCode, details, metadata);\n          };\n        }\n        return {\n          ...wrappedPick,\n          subchannel: subchannelWrapper.getWrappedSubchannel(),\n          onCallEnded: onCallEnded,\n        };\n      } else {\n        return {\n          ...wrappedPick,\n          subchannel: subchannelWrapper.getWrappedSubchannel(),\n        };\n      }\n    } else {\n      return wrappedPick;\n    }\n  }\n}\n\ninterface MapEntry {\n  counter: CallCounter;\n  currentEjectionTimestamp: Date | null;\n  ejectionTimeMultiplier: number;\n  subchannelWrappers: OutlierDetectionSubchannelWrapper[];\n}\n\nexport class OutlierDetectionLoadBalancer implements LoadBalancer {\n  private childBalancer: ChildLoadBalancerHandler;\n  private entryMap = new EndpointMap<MapEntry>();\n  private latestConfig: OutlierDetectionLoadBalancingConfig | null = null;\n  private ejectionTimer: NodeJS.Timeout;\n  private timerStartTime: Date | null = null;\n\n  constructor(\n    channelControlHelper: ChannelControlHelper\n  ) {\n    this.childBalancer = new ChildLoadBalancerHandler(\n      createChildChannelControlHelper(channelControlHelper, {\n        createSubchannel: (\n          subchannelAddress: SubchannelAddress,\n          subchannelArgs: ChannelOptions\n        ) => {\n          const originalSubchannel = channelControlHelper.createSubchannel(\n            subchannelAddress,\n            subchannelArgs\n          );\n          const mapEntry =\n            this.entryMap.getForSubchannelAddress(subchannelAddress);\n          const subchannelWrapper = new OutlierDetectionSubchannelWrapper(\n            originalSubchannel,\n            mapEntry\n          );\n          if (mapEntry?.currentEjectionTimestamp !== null) {\n            // If the address is ejected, propagate that to the new subchannel wrapper\n            subchannelWrapper.eject();\n          }\n          mapEntry?.subchannelWrappers.push(subchannelWrapper);\n          return subchannelWrapper;\n        },\n        updateState: (connectivityState: ConnectivityState, picker: Picker, errorMessage: string) => {\n          if (connectivityState === ConnectivityState.READY) {\n            channelControlHelper.updateState(\n              connectivityState,\n              new OutlierDetectionPicker(picker, this.isCountingEnabled()),\n              errorMessage\n            );\n          } else {\n            channelControlHelper.updateState(connectivityState, picker, errorMessage);\n          }\n        },\n      })\n    );\n    this.ejectionTimer = setInterval(() => {}, 0);\n    clearInterval(this.ejectionTimer);\n  }\n\n  private isCountingEnabled(): boolean {\n    return (\n      this.latestConfig !== null &&\n      (this.latestConfig.getSuccessRateEjectionConfig() !== null ||\n        this.latestConfig.getFailurePercentageEjectionConfig() !== null)\n    );\n  }\n\n  private getCurrentEjectionPercent() {\n    let ejectionCount = 0;\n    for (const mapEntry of this.entryMap.values()) {\n      if (mapEntry.currentEjectionTimestamp !== null) {\n        ejectionCount += 1;\n      }\n    }\n    return (ejectionCount * 100) / this.entryMap.size;\n  }\n\n  private runSuccessRateCheck(ejectionTimestamp: Date) {\n    if (!this.latestConfig) {\n      return;\n    }\n    const successRateConfig = this.latestConfig.getSuccessRateEjectionConfig();\n    if (!successRateConfig) {\n      return;\n    }\n    trace('Running success rate check');\n    // Step 1\n    const targetRequestVolume = successRateConfig.request_volume;\n    let addresesWithTargetVolume = 0;\n    const successRates: number[] = [];\n    for (const [endpoint, mapEntry] of this.entryMap.entries()) {\n      const successes = mapEntry.counter.getLastSuccesses();\n      const failures = mapEntry.counter.getLastFailures();\n      trace(\n        'Stats for ' +\n          endpointToString(endpoint) +\n          ': successes=' +\n          successes +\n          ' failures=' +\n          failures +\n          ' targetRequestVolume=' +\n          targetRequestVolume\n      );\n      if (successes + failures >= targetRequestVolume) {\n        addresesWithTargetVolume += 1;\n        successRates.push(successes / (successes + failures));\n      }\n    }\n    trace(\n      'Found ' +\n        addresesWithTargetVolume +\n        ' success rate candidates; currentEjectionPercent=' +\n        this.getCurrentEjectionPercent() +\n        ' successRates=[' +\n        successRates +\n        ']'\n    );\n    if (addresesWithTargetVolume < successRateConfig.minimum_hosts) {\n      return;\n    }\n\n    // Step 2\n    const successRateMean =\n      successRates.reduce((a, b) => a + b) / successRates.length;\n    let successRateDeviationSum = 0;\n    for (const rate of successRates) {\n      const deviation = rate - successRateMean;\n      successRateDeviationSum += deviation * deviation;\n    }\n    const successRateVariance = successRateDeviationSum / successRates.length;\n    const successRateStdev = Math.sqrt(successRateVariance);\n    const ejectionThreshold =\n      successRateMean -\n      successRateStdev * (successRateConfig.stdev_factor / 1000);\n    trace(\n      'stdev=' + successRateStdev + ' ejectionThreshold=' + ejectionThreshold\n    );\n\n    // Step 3\n    for (const [address, mapEntry] of this.entryMap.entries()) {\n      // Step 3.i\n      if (\n        this.getCurrentEjectionPercent() >=\n        this.latestConfig.getMaxEjectionPercent()\n      ) {\n        break;\n      }\n      // Step 3.ii\n      const successes = mapEntry.counter.getLastSuccesses();\n      const failures = mapEntry.counter.getLastFailures();\n      if (successes + failures < targetRequestVolume) {\n        continue;\n      }\n      // Step 3.iii\n      const successRate = successes / (successes + failures);\n      trace('Checking candidate ' + address + ' successRate=' + successRate);\n      if (successRate < ejectionThreshold) {\n        const randomNumber = Math.random() * 100;\n        trace(\n          'Candidate ' +\n            address +\n            ' randomNumber=' +\n            randomNumber +\n            ' enforcement_percentage=' +\n            successRateConfig.enforcement_percentage\n        );\n        if (randomNumber < successRateConfig.enforcement_percentage) {\n          trace('Ejecting candidate ' + address);\n          this.eject(mapEntry, ejectionTimestamp);\n        }\n      }\n    }\n  }\n\n  private runFailurePercentageCheck(ejectionTimestamp: Date) {\n    if (!this.latestConfig) {\n      return;\n    }\n    const failurePercentageConfig =\n      this.latestConfig.getFailurePercentageEjectionConfig();\n    if (!failurePercentageConfig) {\n      return;\n    }\n    trace(\n      'Running failure percentage check. threshold=' +\n        failurePercentageConfig.threshold +\n        ' request volume threshold=' +\n        failurePercentageConfig.request_volume\n    );\n    // Step 1\n    let addressesWithTargetVolume = 0;\n    for (const mapEntry of this.entryMap.values()) {\n      const successes = mapEntry.counter.getLastSuccesses();\n      const failures = mapEntry.counter.getLastFailures();\n      if (successes + failures >= failurePercentageConfig.request_volume) {\n        addressesWithTargetVolume += 1;\n      }\n    }\n    if (addressesWithTargetVolume < failurePercentageConfig.minimum_hosts) {\n      return;\n    }\n\n    // Step 2\n    for (const [address, mapEntry] of this.entryMap.entries()) {\n      // Step 2.i\n      if (\n        this.getCurrentEjectionPercent() >=\n        this.latestConfig.getMaxEjectionPercent()\n      ) {\n        break;\n      }\n      // Step 2.ii\n      const successes = mapEntry.counter.getLastSuccesses();\n      const failures = mapEntry.counter.getLastFailures();\n      trace('Candidate successes=' + successes + ' failures=' + failures);\n      if (successes + failures < failurePercentageConfig.request_volume) {\n        continue;\n      }\n      // Step 2.iii\n      const failurePercentage = (failures * 100) / (failures + successes);\n      if (failurePercentage > failurePercentageConfig.threshold) {\n        const randomNumber = Math.random() * 100;\n        trace(\n          'Candidate ' +\n            address +\n            ' randomNumber=' +\n            randomNumber +\n            ' enforcement_percentage=' +\n            failurePercentageConfig.enforcement_percentage\n        );\n        if (randomNumber < failurePercentageConfig.enforcement_percentage) {\n          trace('Ejecting candidate ' + address);\n          this.eject(mapEntry, ejectionTimestamp);\n        }\n      }\n    }\n  }\n\n  private eject(mapEntry: MapEntry, ejectionTimestamp: Date) {\n    mapEntry.currentEjectionTimestamp = new Date();\n    mapEntry.ejectionTimeMultiplier += 1;\n    for (const subchannelWrapper of mapEntry.subchannelWrappers) {\n      subchannelWrapper.eject();\n    }\n  }\n\n  private uneject(mapEntry: MapEntry) {\n    mapEntry.currentEjectionTimestamp = null;\n    for (const subchannelWrapper of mapEntry.subchannelWrappers) {\n      subchannelWrapper.uneject();\n    }\n  }\n\n  private switchAllBuckets() {\n    for (const mapEntry of this.entryMap.values()) {\n      mapEntry.counter.switchBuckets();\n    }\n  }\n\n  private startTimer(delayMs: number) {\n    this.ejectionTimer = setTimeout(() => this.runChecks(), delayMs);\n    this.ejectionTimer.unref?.();\n  }\n\n  private runChecks() {\n    const ejectionTimestamp = new Date();\n    trace('Ejection timer running');\n\n    this.switchAllBuckets();\n\n    if (!this.latestConfig) {\n      return;\n    }\n    this.timerStartTime = ejectionTimestamp;\n    this.startTimer(this.latestConfig.getIntervalMs());\n\n    this.runSuccessRateCheck(ejectionTimestamp);\n    this.runFailurePercentageCheck(ejectionTimestamp);\n\n    for (const [address, mapEntry] of this.entryMap.entries()) {\n      if (mapEntry.currentEjectionTimestamp === null) {\n        if (mapEntry.ejectionTimeMultiplier > 0) {\n          mapEntry.ejectionTimeMultiplier -= 1;\n        }\n      } else {\n        const baseEjectionTimeMs = this.latestConfig.getBaseEjectionTimeMs();\n        const maxEjectionTimeMs = this.latestConfig.getMaxEjectionTimeMs();\n        const returnTime = new Date(\n          mapEntry.currentEjectionTimestamp.getTime()\n        );\n        returnTime.setMilliseconds(\n          returnTime.getMilliseconds() +\n            Math.min(\n              baseEjectionTimeMs * mapEntry.ejectionTimeMultiplier,\n              Math.max(baseEjectionTimeMs, maxEjectionTimeMs)\n            )\n        );\n        if (returnTime < new Date()) {\n          trace('Unejecting ' + address);\n          this.uneject(mapEntry);\n        }\n      }\n    }\n  }\n\n  updateAddressList(\n    endpointList: StatusOr<Endpoint[]>,\n    lbConfig: TypedLoadBalancingConfig,\n    options: ChannelOptions,\n    resolutionNote: string\n  ): boolean {\n    if (!(lbConfig instanceof OutlierDetectionLoadBalancingConfig)) {\n      return false;\n    }\n    trace('Received update with config: ' + JSON.stringify(lbConfig.toJsonObject(), undefined, 2));\n    if (endpointList.ok) {\n      for (const endpoint of endpointList.value) {\n        if (!this.entryMap.has(endpoint)) {\n          trace('Adding map entry for ' + endpointToString(endpoint));\n          this.entryMap.set(endpoint, {\n            counter: new CallCounter(),\n            currentEjectionTimestamp: null,\n            ejectionTimeMultiplier: 0,\n            subchannelWrappers: [],\n          });\n        }\n      }\n      this.entryMap.deleteMissing(endpointList.value);\n    }\n    const childPolicy = lbConfig.getChildPolicy();\n    this.childBalancer.updateAddressList(endpointList, childPolicy, options, resolutionNote);\n\n    if (\n      lbConfig.getSuccessRateEjectionConfig() ||\n      lbConfig.getFailurePercentageEjectionConfig()\n    ) {\n      if (this.timerStartTime) {\n        trace('Previous timer existed. Replacing timer');\n        clearTimeout(this.ejectionTimer);\n        const remainingDelay =\n          lbConfig.getIntervalMs() -\n          (new Date().getTime() - this.timerStartTime.getTime());\n        this.startTimer(remainingDelay);\n      } else {\n        trace('Starting new timer');\n        this.timerStartTime = new Date();\n        this.startTimer(lbConfig.getIntervalMs());\n        this.switchAllBuckets();\n      }\n    } else {\n      trace('Counting disabled. Cancelling timer.');\n      this.timerStartTime = null;\n      clearTimeout(this.ejectionTimer);\n      for (const mapEntry of this.entryMap.values()) {\n        this.uneject(mapEntry);\n        mapEntry.ejectionTimeMultiplier = 0;\n      }\n    }\n\n    this.latestConfig = lbConfig;\n    return true;\n  }\n  exitIdle(): void {\n    this.childBalancer.exitIdle();\n  }\n  resetBackoff(): void {\n    this.childBalancer.resetBackoff();\n  }\n  destroy(): void {\n    clearTimeout(this.ejectionTimer);\n    this.childBalancer.destroy();\n  }\n  getTypeName(): string {\n    return TYPE_NAME;\n  }\n}\n\nexport function setup() {\n  if (OUTLIER_DETECTION_ENABLED) {\n    registerLoadBalancerType(\n      TYPE_NAME,\n      OutlierDetectionLoadBalancer,\n      OutlierDetectionLoadBalancingConfig\n    );\n  }\n}\n","/*\n * Copyright 2025 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nconst top = 0;\nconst parent = (i: number) => Math.floor(i / 2);\nconst left = (i: number) => i * 2 + 1;\nconst right = (i: number) => i * 2 + 2;\n\n/**\n * A generic priority queue implemented as an array-based binary heap.\n * Adapted from https://stackoverflow.com/a/42919752/159388\n */\nexport class PriorityQueue<T=number> {\n  private readonly heap: T[] = [];\n  /**\n   *\n   * @param comparator Returns true if the first argument should precede the\n   *   second in the queue. Defaults to `(a, b) => a > b`\n   */\n  constructor(private readonly comparator = (a: T, b: T) => a > b) {}\n\n  /**\n   * @returns The number of items currently in the queue\n   */\n  size(): number {\n    return this.heap.length;\n  }\n  /**\n   * @returns True if there are no items in the queue, false otherwise\n   */\n  isEmpty(): boolean {\n    return this.size() == 0;\n  }\n  /**\n   * Look at the front item that would be popped, without modifying the contents\n   * of the queue\n   * @returns The front item in the queue, or undefined if the queue is empty\n   */\n  peek(): T | undefined {\n    return this.heap[top];\n  }\n  /**\n   * Add the items to the queue\n   * @param values The items to add\n   * @returns The new size of the queue after adding the items\n   */\n  push(...values: T[]): number {\n    values.forEach(value => {\n      this.heap.push(value);\n      this.siftUp();\n    });\n    return this.size();\n  }\n  /**\n   * Remove the front item in the queue and return it\n   * @returns The front item in the queue, or undefined if the queue is empty\n   */\n  pop(): T | undefined {\n    const poppedValue = this.peek();\n    const bottom = this.size() - 1;\n    if (bottom > top) {\n      this.swap(top, bottom);\n    }\n    this.heap.pop();\n    this.siftDown();\n    return poppedValue;\n  }\n  /**\n   * Simultaneously remove the front item in the queue and add the provided\n   * item.\n   * @param value The item to add\n   * @returns The front item in the queue, or undefined if the queue is empty\n   */\n  replace(value: T): T | undefined {\n    const replacedValue = this.peek();\n    this.heap[top] = value;\n    this.siftDown();\n    return replacedValue;\n  }\n  private greater(i: number, j: number): boolean {\n    return this.comparator(this.heap[i], this.heap[j]);\n  }\n  private swap(i: number, j: number): void {\n    [this.heap[i], this.heap[j]] = [this.heap[j], this.heap[i]];\n  }\n  private siftUp(): void {\n    let node = this.size() - 1;\n    while (node > top && this.greater(node, parent(node))) {\n      this.swap(node, parent(node));\n      node = parent(node);\n    }\n  }\n  private siftDown(): void {\n    let node = top;\n    while (\n      (left(node) < this.size() && this.greater(left(node), node)) ||\n      (right(node) < this.size() && this.greater(right(node), node))\n    ) {\n      let maxChild = (right(node) < this.size() && this.greater(right(node), left(node))) ? right(node) : left(node);\n      this.swap(node, maxChild);\n      node = maxChild;\n    }\n  }\n}\n","/*\n * Copyright 2025 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport { StatusOr } from './call-interface';\nimport { ChannelOptions } from './channel-options';\nimport { ConnectivityState } from './connectivity-state';\nimport { LogVerbosity } from './constants';\nimport { Duration, durationMessageToDuration, durationToMs, durationToString, isDuration, isDurationMessage, msToDuration, parseDuration } from './duration';\nimport { OrcaLoadReport__Output } from './generated/xds/data/orca/v3/OrcaLoadReport';\nimport { ChannelControlHelper, createChildChannelControlHelper, LoadBalancer, registerLoadBalancerType, TypedLoadBalancingConfig } from './load-balancer';\nimport { LeafLoadBalancer } from './load-balancer-pick-first';\nimport * as logging from './logging';\nimport { createMetricsReader, MetricsListener, OrcaOobMetricsSubchannelWrapper } from './orca';\nimport { PickArgs, Picker, PickResult, PickResultType, QueuePicker, UnavailablePicker } from './picker';\nimport { PriorityQueue } from './priority-queue';\nimport { Endpoint, endpointToString } from './subchannel-address';\n\nconst TRACER_NAME = 'weighted_round_robin';\n\nfunction trace(text: string): void {\n  logging.trace(LogVerbosity.DEBUG, TRACER_NAME, text);\n}\n\nconst TYPE_NAME = 'weighted_round_robin';\n\nconst DEFAULT_OOB_REPORTING_PERIOD_MS = 10_000;\nconst DEFAULT_BLACKOUT_PERIOD_MS = 10_000;\nconst DEFAULT_WEIGHT_EXPIRATION_PERIOD_MS = 3 * 60_000;\nconst DEFAULT_WEIGHT_UPDATE_PERIOD_MS = 1_000;\nconst DEFAULT_ERROR_UTILIZATION_PENALTY = 1;\n\ntype TypeofValues =\n  | 'object'\n  | 'boolean'\n  | 'function'\n  | 'number'\n  | 'string'\n  | 'undefined';\n\nfunction validateFieldType(\n  obj: any,\n  fieldName: string,\n  expectedType: TypeofValues\n) {\n  if (\n    fieldName in obj &&\n    obj[fieldName] !== undefined &&\n    typeof obj[fieldName] !== expectedType\n  ) {\n    throw new Error(\n      `weighted round robin config ${fieldName} parse error: expected ${expectedType}, got ${typeof obj[\n        fieldName\n      ]}`\n    );\n  }\n}\n\nfunction parseDurationField(obj: any, fieldName: string): number | null {\n  if (fieldName in obj && obj[fieldName] !== undefined && obj[fieldName] !== null) {\n    let durationObject: Duration;\n    if (isDuration(obj[fieldName])) {\n      durationObject = obj[fieldName];\n    } else if (isDurationMessage(obj[fieldName])) {\n      durationObject = durationMessageToDuration(obj[fieldName]);\n    } else if (typeof obj[fieldName] === 'string') {\n      const parsedDuration = parseDuration(obj[fieldName]);\n      if (!parsedDuration) {\n        throw new Error(`weighted round robin config ${fieldName}: failed to parse duration string ${obj[fieldName]}`);\n      }\n      durationObject = parsedDuration;\n    } else {\n      throw new Error(`weighted round robin config ${fieldName}: expected duration, got ${typeof obj[fieldName]}`);\n    }\n    return durationToMs(durationObject);\n  }\n  return null;\n}\n\nexport class WeightedRoundRobinLoadBalancingConfig implements TypedLoadBalancingConfig {\n  private readonly enableOobLoadReport: boolean;\n  private readonly oobLoadReportingPeriodMs: number;\n  private readonly blackoutPeriodMs: number;\n  private readonly weightExpirationPeriodMs: number;\n  private readonly weightUpdatePeriodMs: number;\n  private readonly errorUtilizationPenalty: number;\n\n  constructor(\n    enableOobLoadReport: boolean | null,\n    oobLoadReportingPeriodMs: number | null,\n    blackoutPeriodMs: number | null,\n    weightExpirationPeriodMs: number | null,\n    weightUpdatePeriodMs: number | null,\n    errorUtilizationPenalty: number | null\n  ) {\n    this.enableOobLoadReport = enableOobLoadReport ?? false;\n    this.oobLoadReportingPeriodMs = oobLoadReportingPeriodMs ?? DEFAULT_OOB_REPORTING_PERIOD_MS;\n    this.blackoutPeriodMs = blackoutPeriodMs ?? DEFAULT_BLACKOUT_PERIOD_MS;\n    this.weightExpirationPeriodMs = weightExpirationPeriodMs ?? DEFAULT_WEIGHT_EXPIRATION_PERIOD_MS;\n    this.weightUpdatePeriodMs = Math.max(weightUpdatePeriodMs ?? DEFAULT_WEIGHT_UPDATE_PERIOD_MS, 100);\n    this.errorUtilizationPenalty = errorUtilizationPenalty ?? DEFAULT_ERROR_UTILIZATION_PENALTY;\n  }\n\n  getLoadBalancerName(): string {\n    return TYPE_NAME;\n  }\n  toJsonObject(): object {\n    return {\n      enable_oob_load_report: this.enableOobLoadReport,\n      oob_load_reporting_period: durationToString(msToDuration(this.oobLoadReportingPeriodMs)),\n      blackout_period: durationToString(msToDuration(this.blackoutPeriodMs)),\n      weight_expiration_period: durationToString(msToDuration(this.weightExpirationPeriodMs)),\n      weight_update_period: durationToString(msToDuration(this.weightUpdatePeriodMs)),\n      error_utilization_penalty: this.errorUtilizationPenalty\n    };\n  }\n  static createFromJson(obj: any): WeightedRoundRobinLoadBalancingConfig {\n    validateFieldType(obj, 'enable_oob_load_report', 'boolean');\n    validateFieldType(obj, 'error_utilization_penalty', 'number');\n    if (obj.error_utilization_penalty < 0) {\n      throw new Error('weighted round robin config error_utilization_penalty < 0');\n    }\n    return new WeightedRoundRobinLoadBalancingConfig(\n      obj.enable_oob_load_report,\n      parseDurationField(obj, 'oob_load_reporting_period'),\n      parseDurationField(obj, 'blackout_period'),\n      parseDurationField(obj, 'weight_expiration_period'),\n      parseDurationField(obj, 'weight_update_period'),\n      obj.error_utilization_penalty\n    )\n  }\n\n  getEnableOobLoadReport() {\n    return this.enableOobLoadReport;\n  }\n  getOobLoadReportingPeriodMs() {\n    return this.oobLoadReportingPeriodMs;\n  }\n  getBlackoutPeriodMs() {\n    return this.blackoutPeriodMs;\n  }\n  getWeightExpirationPeriodMs() {\n    return this.weightExpirationPeriodMs;\n  }\n  getWeightUpdatePeriodMs() {\n    return this.weightUpdatePeriodMs;\n  }\n  getErrorUtilizationPenalty() {\n    return this.errorUtilizationPenalty;\n  }\n}\n\ninterface WeightedPicker {\n  endpointName: string;\n  picker: Picker;\n  weight: number;\n}\n\ninterface QueueEntry {\n  endpointName: string;\n  picker: Picker;\n  period: number;\n  deadline: number;\n}\n\ntype MetricsHandler = (loadReport: OrcaLoadReport__Output, endpointName: string) => void;\n\nclass WeightedRoundRobinPicker implements Picker {\n  private queue: PriorityQueue<QueueEntry> = new PriorityQueue((a, b) => a.deadline < b.deadline);\n  constructor(children: WeightedPicker[], private readonly metricsHandler: MetricsHandler | null) {\n    const positiveWeight = children.filter(picker => picker.weight > 0);\n    let averageWeight: number;\n    if (positiveWeight.length < 2) {\n      averageWeight = 1;\n    } else {\n      let weightSum: number = 0;\n      for (const { weight } of positiveWeight) {\n        weightSum += weight;\n      }\n      averageWeight = weightSum / positiveWeight.length;\n    }\n    for (const child of children) {\n      const period = child.weight > 0 ? 1 / child.weight : averageWeight;\n      this.queue.push({\n        endpointName: child.endpointName,\n        picker: child.picker,\n        period: period,\n        deadline: Math.random() * period\n      });\n    }\n  }\n  pick(pickArgs: PickArgs): PickResult {\n    const entry = this.queue.pop()!;\n    this.queue.push({\n      ...entry,\n      deadline: entry.deadline + entry.period\n    })\n    const childPick = entry.picker.pick(pickArgs);\n    if (childPick.pickResultType === PickResultType.COMPLETE) {\n      if (this.metricsHandler) {\n        return {\n          ...childPick,\n          onCallEnded: createMetricsReader(loadReport => this.metricsHandler!(loadReport, entry.endpointName), childPick.onCallEnded)\n        };\n      } else {\n        const subchannelWrapper = childPick.subchannel as OrcaOobMetricsSubchannelWrapper;\n        return {\n          ...childPick,\n          subchannel: subchannelWrapper.getWrappedSubchannel()\n        }\n      }\n    } else {\n      return childPick;\n    }\n  }\n}\n\ninterface ChildEntry {\n  child: LeafLoadBalancer;\n  lastUpdated: Date;\n  nonEmptySince: Date | null;\n  weight: number;\n  oobMetricsListener: MetricsListener | null;\n}\n\nclass WeightedRoundRobinLoadBalancer implements LoadBalancer {\n  private latestConfig: WeightedRoundRobinLoadBalancingConfig | null = null;\n\n  private children: Map<string, ChildEntry> = new Map();\n\n  private currentState: ConnectivityState = ConnectivityState.IDLE;\n\n  private updatesPaused = false;\n\n  private lastError: string | null = null;\n\n  private weightUpdateTimer: NodeJS.Timeout | null = null;\n\n  constructor(private readonly channelControlHelper: ChannelControlHelper) {}\n\n  private countChildrenWithState(state: ConnectivityState) {\n    let count = 0;\n    for (const entry of this.children.values()) {\n      if (entry.child.getConnectivityState() === state) {\n        count += 1;\n      }\n    }\n    return count;\n  }\n\n  updateWeight(entry: ChildEntry, loadReport: OrcaLoadReport__Output): void {\n    const qps = loadReport.rps_fractional;\n    let utilization = loadReport.application_utilization;\n    if (utilization > 0 && qps > 0) {\n      utilization += (loadReport.eps / qps) * (this.latestConfig?.getErrorUtilizationPenalty() ?? 0);\n    }\n    const newWeight = utilization === 0 ? 0 : qps / utilization;\n    if (newWeight === 0) {\n      return;\n    }\n    const now = new Date();\n    if (entry.nonEmptySince === null) {\n      entry.nonEmptySince = now;\n    }\n    entry.lastUpdated = now;\n    entry.weight = newWeight;\n  }\n\n  getWeight(entry: ChildEntry): number {\n    if (!this.latestConfig) {\n      return 0;\n    }\n    const now = new Date().getTime();\n    if (now - entry.lastUpdated.getTime() >= this.latestConfig.getWeightExpirationPeriodMs()) {\n      entry.nonEmptySince = null;\n      return 0;\n    }\n    const blackoutPeriod = this.latestConfig.getBlackoutPeriodMs();\n    if (blackoutPeriod > 0 && (entry.nonEmptySince === null || now - entry.nonEmptySince.getTime() < blackoutPeriod)) {\n      return 0;\n    }\n    return entry.weight;\n  }\n\n  private calculateAndUpdateState() {\n    if (this.updatesPaused || !this.latestConfig) {\n      return;\n    }\n    if (this.countChildrenWithState(ConnectivityState.READY) > 0) {\n      const weightedPickers: WeightedPicker[] = [];\n      for (const [endpoint, entry] of this.children) {\n        if (entry.child.getConnectivityState() !== ConnectivityState.READY) {\n          continue;\n        }\n        weightedPickers.push({\n          endpointName: endpoint,\n          picker: entry.child.getPicker(),\n          weight: this.getWeight(entry)\n        });\n      }\n      trace('Created picker with weights: ' + weightedPickers.map(entry => entry.endpointName + ':' + entry.weight).join(','));\n      let metricsHandler: MetricsHandler | null;\n      if (!this.latestConfig.getEnableOobLoadReport()) {\n        metricsHandler = (loadReport, endpointName) => {\n          const childEntry = this.children.get(endpointName);\n          if (childEntry) {\n            this.updateWeight(childEntry, loadReport);\n          }\n        };\n      } else {\n        metricsHandler = null;\n      }\n      this.updateState(\n        ConnectivityState.READY,\n        new WeightedRoundRobinPicker(\n          weightedPickers,\n          metricsHandler\n        ),\n        null\n      );\n    } else if (this.countChildrenWithState(ConnectivityState.CONNECTING) > 0) {\n      this.updateState(ConnectivityState.CONNECTING, new QueuePicker(this), null);\n    } else if (\n      this.countChildrenWithState(ConnectivityState.TRANSIENT_FAILURE) > 0\n    ) {\n      const errorMessage = `weighted_round_robin: No connection established. Last error: ${this.lastError}`;\n      this.updateState(\n        ConnectivityState.TRANSIENT_FAILURE,\n        new UnavailablePicker({\n          details: errorMessage,\n        }),\n        errorMessage\n      );\n    } else {\n      this.updateState(ConnectivityState.IDLE, new QueuePicker(this), null);\n    }\n    /* round_robin should keep all children connected, this is how we do that.\n      * We can't do this more efficiently in the individual child's updateState\n      * callback because that doesn't have a reference to which child the state\n      * change is associated with. */\n    for (const {child} of this.children.values()) {\n      if (child.getConnectivityState() === ConnectivityState.IDLE) {\n        child.exitIdle();\n      }\n    }\n  }\n\n  private updateState(newState: ConnectivityState, picker: Picker, errorMessage: string | null) {\n    trace(\n      ConnectivityState[this.currentState] +\n        ' -> ' +\n        ConnectivityState[newState]\n    );\n    this.currentState = newState;\n    this.channelControlHelper.updateState(newState, picker, errorMessage);\n  }\n\n  updateAddressList(maybeEndpointList: StatusOr<Endpoint[]>, lbConfig: TypedLoadBalancingConfig, options: ChannelOptions, resolutionNote: string): boolean {\n    if (!(lbConfig instanceof WeightedRoundRobinLoadBalancingConfig)) {\n      return false;\n    }\n    if (!maybeEndpointList.ok) {\n      if (this.children.size === 0) {\n        this.updateState(\n          ConnectivityState.TRANSIENT_FAILURE,\n          new UnavailablePicker(maybeEndpointList.error),\n          maybeEndpointList.error.details\n        );\n      }\n      return true;\n    }\n    if (maybeEndpointList.value.length === 0) {\n      const errorMessage = `No addresses resolved. Resolution note: ${resolutionNote}`;\n      this.updateState(\n        ConnectivityState.TRANSIENT_FAILURE,\n        new UnavailablePicker({details: errorMessage}),\n        errorMessage\n      );\n      return false;\n    }\n    trace('Connect to endpoint list ' + maybeEndpointList.value.map(endpointToString));\n    const now = new Date();\n    const seenEndpointNames = new Set<string>();\n    this.updatesPaused = true;\n    this.latestConfig = lbConfig;\n    for (const endpoint of maybeEndpointList.value) {\n      const name = endpointToString(endpoint);\n      seenEndpointNames.add(name);\n      let entry = this.children.get(name);\n      if (!entry) {\n        entry = {\n          child: new LeafLoadBalancer(endpoint, createChildChannelControlHelper(this.channelControlHelper, {\n            updateState: (connectivityState, picker, errorMessage) => {\n              /* Ensure that name resolution is requested again after active\n                * connections are dropped. This is more aggressive than necessary to\n                * accomplish that, so we are counting on resolvers to have\n                * reasonable rate limits. */\n              if (this.currentState === ConnectivityState.READY && connectivityState !== ConnectivityState.READY) {\n                this.channelControlHelper.requestReresolution();\n              }\n              if (connectivityState === ConnectivityState.READY) {\n                entry!.nonEmptySince = null;\n              }\n              if (errorMessage) {\n                this.lastError = errorMessage;\n              }\n              this.calculateAndUpdateState();\n            },\n            createSubchannel: (subchannelAddress, subchannelArgs) => {\n              const subchannel = this.channelControlHelper.createSubchannel(subchannelAddress, subchannelArgs);\n              if (entry?.oobMetricsListener) {\n                return new OrcaOobMetricsSubchannelWrapper(subchannel, entry.oobMetricsListener, this.latestConfig!.getOobLoadReportingPeriodMs());\n              } else {\n                return subchannel;\n              }\n            }\n          }), options, resolutionNote),\n          lastUpdated: now,\n          nonEmptySince: null,\n          weight: 0,\n          oobMetricsListener: null\n        };\n        this.children.set(name, entry);\n      }\n      if (lbConfig.getEnableOobLoadReport()) {\n        entry.oobMetricsListener = loadReport => {\n          this.updateWeight(entry!, loadReport);\n        };\n      } else {\n        entry.oobMetricsListener = null;\n      }\n    }\n    for (const [endpointName, entry] of this.children) {\n      if (seenEndpointNames.has(endpointName)) {\n        entry.child.startConnecting();\n      } else {\n        entry.child.destroy();\n        this.children.delete(endpointName);\n      }\n    }\n    this.updatesPaused = false;\n    this.calculateAndUpdateState();\n    if (this.weightUpdateTimer) {\n      clearInterval(this.weightUpdateTimer);\n    }\n    this.weightUpdateTimer = setInterval(() => {\n      if (this.currentState === ConnectivityState.READY) {\n        this.calculateAndUpdateState();\n      }\n    }, lbConfig.getWeightUpdatePeriodMs()).unref?.();\n    return true;\n  }\n  exitIdle(): void {\n    /* The weighted_round_robin LB policy is only in the IDLE state if it has\n     * no addresses to try to connect to and it has no picked subchannel.\n     * In that case, there is no meaningful action that can be taken here. */\n  }\n  resetBackoff(): void {\n    // This LB policy has no backoff to reset\n  }\n  destroy(): void {\n    for (const entry of this.children.values()) {\n      entry.child.destroy();\n    }\n    this.children.clear();\n    if (this.weightUpdateTimer) {\n      clearInterval(this.weightUpdateTimer);\n    }\n  }\n  getTypeName(): string {\n    return TYPE_NAME;\n  }\n}\n\nexport function setup() {\n  registerLoadBalancerType(\n    TYPE_NAME,\n    WeightedRoundRobinLoadBalancer,\n    WeightedRoundRobinLoadBalancingConfig\n  );\n}\n","/*\n * Copyright 2019 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport {\n  ClientDuplexStream,\n  ClientReadableStream,\n  ClientUnaryCall,\n  ClientWritableStream,\n  ServiceError,\n} from './call';\nimport { CallCredentials, OAuth2Client } from './call-credentials';\nimport { StatusObject } from './call-interface';\nimport { Channel, ChannelImplementation } from './channel';\nimport { CompressionAlgorithms } from './compression-algorithms';\nimport { ConnectivityState } from './connectivity-state';\nimport { ChannelCredentials, VerifyOptions } from './channel-credentials';\nimport {\n  CallOptions,\n  Client,\n  ClientOptions,\n  CallInvocationTransformer,\n  CallProperties,\n  UnaryCallback,\n} from './client';\nimport { LogVerbosity, Status, Propagate } from './constants';\nimport * as logging from './logging';\nimport {\n  Deserialize,\n  loadPackageDefinition,\n  makeClientConstructor,\n  MethodDefinition,\n  Serialize,\n  ServerMethodDefinition,\n  ServiceDefinition,\n} from './make-client';\nimport { Metadata, MetadataOptions, MetadataValue } from './metadata';\nimport {\n  ConnectionInjector,\n  Server,\n  ServerOptions,\n  UntypedHandleCall,\n  UntypedServiceImplementation,\n} from './server';\nimport { KeyCertPair, ServerCredentials } from './server-credentials';\nimport { StatusBuilder } from './status-builder';\nimport {\n  handleBidiStreamingCall,\n  handleServerStreamingCall,\n  handleClientStreamingCall,\n  handleUnaryCall,\n  sendUnaryData,\n  ServerUnaryCall,\n  ServerReadableStream,\n  ServerWritableStream,\n  ServerDuplexStream,\n  ServerErrorResponse,\n} from './server-call';\n\nexport { OAuth2Client };\n\n/**** Client Credentials ****/\n\n// Using assign only copies enumerable properties, which is what we want\nexport const credentials = {\n  /**\n   * Combine a ChannelCredentials with any number of CallCredentials into a\n   * single ChannelCredentials object.\n   * @param channelCredentials The ChannelCredentials object.\n   * @param callCredentials Any number of CallCredentials objects.\n   * @return The resulting ChannelCredentials object.\n   */\n  combineChannelCredentials: (\n    channelCredentials: ChannelCredentials,\n    ...callCredentials: CallCredentials[]\n  ): ChannelCredentials => {\n    return callCredentials.reduce(\n      (acc, other) => acc.compose(other),\n      channelCredentials\n    );\n  },\n\n  /**\n   * Combine any number of CallCredentials into a single CallCredentials\n   * object.\n   * @param first The first CallCredentials object.\n   * @param additional Any number of additional CallCredentials objects.\n   * @return The resulting CallCredentials object.\n   */\n  combineCallCredentials: (\n    first: CallCredentials,\n    ...additional: CallCredentials[]\n  ): CallCredentials => {\n    return additional.reduce((acc, other) => acc.compose(other), first);\n  },\n\n  // from channel-credentials.ts\n  createInsecure: ChannelCredentials.createInsecure,\n  createSsl: ChannelCredentials.createSsl,\n  createFromSecureContext: ChannelCredentials.createFromSecureContext,\n\n  // from call-credentials.ts\n  createFromMetadataGenerator: CallCredentials.createFromMetadataGenerator,\n  createFromGoogleCredential: CallCredentials.createFromGoogleCredential,\n  createEmpty: CallCredentials.createEmpty,\n};\n\n/**** Metadata ****/\n\nexport { Metadata, MetadataOptions, MetadataValue };\n\n/**** Constants ****/\n\nexport {\n  LogVerbosity as logVerbosity,\n  Status as status,\n  ConnectivityState as connectivityState,\n  Propagate as propagate,\n  CompressionAlgorithms as compressionAlgorithms,\n  // TODO: Other constants as well\n};\n\n/**** Client ****/\n\nexport {\n  Client,\n  ClientOptions,\n  loadPackageDefinition,\n  makeClientConstructor,\n  makeClientConstructor as makeGenericClientConstructor,\n  CallProperties,\n  CallInvocationTransformer,\n  ChannelImplementation as Channel,\n  Channel as ChannelInterface,\n  UnaryCallback as requestCallback,\n};\n\n/**\n * Close a Client object.\n * @param client The client to close.\n */\nexport const closeClient = (client: Client) => client.close();\n\nexport const waitForClientReady = (\n  client: Client,\n  deadline: Date | number,\n  callback: (error?: Error) => void\n) => client.waitForReady(deadline, callback);\n\n/* Interfaces */\n\nexport {\n  sendUnaryData,\n  ChannelCredentials,\n  CallCredentials,\n  Deadline,\n  Serialize as serialize,\n  Deserialize as deserialize,\n  ClientUnaryCall,\n  ClientReadableStream,\n  ClientWritableStream,\n  ClientDuplexStream,\n  CallOptions,\n  MethodDefinition,\n  StatusObject,\n  ServiceError,\n  ServerUnaryCall,\n  ServerReadableStream,\n  ServerWritableStream,\n  ServerDuplexStream,\n  ServerErrorResponse,\n  ServerMethodDefinition,\n  ServiceDefinition,\n  UntypedHandleCall,\n  UntypedServiceImplementation,\n  VerifyOptions,\n};\n\n/**** Server ****/\n\nexport {\n  handleBidiStreamingCall,\n  handleServerStreamingCall,\n  handleUnaryCall,\n  handleClientStreamingCall,\n};\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nexport type Call =\n  | ClientUnaryCall\n  | ClientReadableStream<any>\n  | ClientWritableStream<any>\n  | ClientDuplexStream<any, any>;\n/* eslint-enable @typescript-eslint/no-explicit-any */\n\n/**** Unimplemented function stubs ****/\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nexport const loadObject = (value: any, options: any): never => {\n  throw new Error(\n    'Not available in this library. Use @grpc/proto-loader and loadPackageDefinition instead'\n  );\n};\n\nexport const load = (filename: any, format: any, options: any): never => {\n  throw new Error(\n    'Not available in this library. Use @grpc/proto-loader and loadPackageDefinition instead'\n  );\n};\n\nexport const setLogger = (logger: Partial<Console>): void => {\n  logging.setLogger(logger);\n};\n\nexport const setLogVerbosity = (verbosity: LogVerbosity): void => {\n  logging.setLoggerVerbosity(verbosity);\n};\n\nexport { ConnectionInjector, Server, ServerOptions };\nexport { ServerCredentials };\nexport { KeyCertPair };\n\nexport const getClientChannel = (client: Client) => {\n  return Client.prototype.getChannel.call(client);\n};\n\nexport { StatusBuilder };\n\nexport { Listener, InterceptingListener } from './call-interface';\n\nexport {\n  Requester,\n  ListenerBuilder,\n  RequesterBuilder,\n  Interceptor,\n  InterceptorOptions,\n  InterceptorProvider,\n  InterceptingCall,\n  InterceptorConfigurationError,\n  NextCall,\n} from './client-interceptors';\n\nexport {\n  GrpcObject,\n  ServiceClientConstructor,\n  ProtobufTypeDefinition,\n} from './make-client';\n\nexport { ChannelOptions } from './channel-options';\n\nexport { getChannelzServiceDefinition, getChannelzHandlers } from './channelz';\n\nexport { addAdminServicesToServer } from './admin';\n\nexport {\n  ServiceConfig,\n  LoadBalancingConfig,\n  MethodConfig,\n  RetryPolicy,\n} from './service-config';\n\nexport {\n  ServerListener,\n  FullServerListener,\n  ServerListenerBuilder,\n  Responder,\n  FullResponder,\n  ResponderBuilder,\n  ServerInterceptingCallInterface,\n  ServerInterceptingCall,\n  ServerInterceptor,\n} from './server-interceptors';\n\nexport { ServerMetricRecorder } from './orca';\n\nimport * as experimental from './experimental';\nexport { experimental };\n\nimport * as resolver_dns from './resolver-dns';\nimport * as resolver_uds from './resolver-uds';\nimport * as resolver_ip from './resolver-ip';\nimport * as load_balancer_pick_first from './load-balancer-pick-first';\nimport * as load_balancer_round_robin from './load-balancer-round-robin';\nimport * as load_balancer_outlier_detection from './load-balancer-outlier-detection';\nimport * as load_balancer_weighted_round_robin from './load-balancer-weighted-round-robin';\nimport * as channelz from './channelz';\nimport { Deadline } from './deadline';\n\n(() => {\n  resolver_dns.setup();\n  resolver_uds.setup();\n  resolver_ip.setup();\n  load_balancer_pick_first.setup();\n  load_balancer_round_robin.setup();\n  load_balancer_outlier_detection.setup();\n  load_balancer_weighted_round_robin.setup();\n  channelz.setup();\n})();\n","import type { temporal } from '@temporalio/proto';\nimport type { Payload } from '../interfaces';\nimport {\n  arrayFromPayloads,\n  convertOptionalToPayload,\n  fromPayloadsAtIndex,\n  toPayloadWithTypeInfo,\n  toPayloadsWithContext,\n} from '../converter/payload-converter';\nimport { PayloadConverterError } from '../errors';\nimport type { PayloadCodec } from '../converter/payload-codec';\nimport type { ProtoFailure } from '../failure';\nimport type { LoadedDataConverter } from '../converter/data-converter';\nimport type { UserMetadata } from '../user-metadata';\nimport type { TypeInfo } from '../type-info';\nimport type { SerializationContext } from '../converter/serialization-context';\nimport type { DecodedPayload, DecodedProtoFailure, EncodedPayload, EncodedProtoFailure } from './codec-types';\n\n/**\n * Decode through each codec, starting with the last codec.\n */\nexport async function decode(\n  codecs: PayloadCodec[],\n  payloads: Payload[],\n  context?: SerializationContext\n): Promise<DecodedPayload[]> {\n  for (let i = codecs.length - 1; i >= 0; i--) {\n    payloads = await codecs[i]!.decode(payloads, context);\n  }\n  return payloads as DecodedPayload[];\n}\n\n/**\n * Encode through each codec, starting with the first codec.\n */\nexport async function encode(\n  codecs: PayloadCodec[],\n  payloads: Payload[],\n  context?: SerializationContext\n): Promise<EncodedPayload[]> {\n  for (let i = 0; i < codecs.length; i++) {\n    payloads = await codecs[i]!.encode(payloads, context);\n  }\n  return payloads as EncodedPayload[];\n}\n\n/** Run {@link PayloadCodec.encode} on `payloads` */\nexport async function encodeOptional(\n  codecs: PayloadCodec[],\n  payloads: Payload[] | null | undefined,\n  context?: SerializationContext\n): Promise<EncodedPayload[] | null | undefined> {\n  if (payloads == null) return payloads;\n  return await encode(codecs, payloads, context);\n}\n\n/** Run {@link PayloadCodec.decode} on `payloads` */\nexport async function decodeOptional(\n  codecs: PayloadCodec[],\n  payloads: Payload[] | null | undefined,\n  context?: SerializationContext\n): Promise<DecodedPayload[] | null | undefined> {\n  if (payloads == null) return payloads;\n  return await decode(codecs, payloads, context);\n}\n\nasync function encodeSingle(\n  codecs: PayloadCodec[],\n  payload: Payload,\n  context?: SerializationContext\n): Promise<EncodedPayload> {\n  const encodedPayloads = await encode(codecs, [payload], context);\n  return encodedPayloads[0] as EncodedPayload;\n}\n\nasync function decodeSingle(\n  codecs: PayloadCodec[],\n  payload: Payload,\n  context?: SerializationContext\n): Promise<DecodedPayload> {\n  const [decodedPayload] = await decode(codecs, [payload], context);\n  return decodedPayload!;\n}\n\n/** Run {@link PayloadCodec.encode} on a single Payload */\nexport async function encodeOptionalSingle(\n  codecs: PayloadCodec[],\n  payload: Payload | null | undefined,\n  context?: SerializationContext\n): Promise<EncodedPayload | null | undefined> {\n  if (payload == null) return payload;\n  return await encodeSingle(codecs, payload, context);\n}\n\n/** Run {@link PayloadCodec.decode} on a single Payload */\nexport async function decodeOptionalSingle(\n  codecs: PayloadCodec[],\n  payload: Payload | null | undefined,\n  context?: SerializationContext\n): Promise<DecodedPayload | null | undefined> {\n  if (payload == null) return payload;\n  return await decodeSingle(codecs, payload, context);\n}\n\n/** Run {@link PayloadCodec.decode} and convert from a single Payload */\nexport async function decodeOptionalSinglePayload<T>(\n  dataConverter: LoadedDataConverter,\n  payload?: Payload | null | undefined,\n  context?: SerializationContext\n): Promise<T | null | undefined> {\n  const { payloadConverter, payloadCodecs } = dataConverter;\n  const decoded = await decodeOptionalSingle(payloadCodecs, payload, context);\n  if (decoded == null) return decoded;\n  return payloadConverter.fromPayload(decoded, context);\n}\n\n/** Apply optional TypeInfo, run payload conversion, and then encode the resulting Payload. */\nexport async function encodeToPayload<T>(\n  converter: LoadedDataConverter,\n  value: T,\n  context?: SerializationContext,\n  typeInfo?: TypeInfo<T, unknown>\n): Promise<Payload> {\n  const { payloadConverter, payloadCodecs } = converter;\n  return await encodeSingle(payloadCodecs, toPayloadWithTypeInfo(payloadConverter, value, context, typeInfo), context);\n}\n\n/**\n * Decode `payloads` and then return {@link arrayFromPayloads}`.\n */\nexport async function decodeArrayFromPayloads(\n  converter: LoadedDataConverter,\n  payloads?: Payload[] | null,\n  context?: SerializationContext,\n  typeInfo?: readonly TypeInfo[]\n): Promise<unknown[]> {\n  const { payloadConverter, payloadCodecs } = converter;\n  return arrayFromPayloads(payloadConverter, await decodeOptional(payloadCodecs, payloads, context), context, typeInfo);\n}\n\n/**\n * Decode `payloads` and then return {@link fromPayloadsAtIndex}.\n */\nexport async function decodeFromPayloadsAtIndex<T, D = T>(\n  converter: LoadedDataConverter,\n  index: number,\n  payloads?: Payload[] | null,\n  context?: SerializationContext,\n  typeInfo?: TypeInfo<T, D>\n): Promise<T> {\n  const { payloadConverter, payloadCodecs } = converter;\n  return await fromPayloadsAtIndex(\n    payloadConverter,\n    index,\n    await decodeOptional(payloadCodecs, payloads, context),\n    context,\n    typeInfo\n  );\n}\n\n/**\n * Run {@link decodeFailure} and then return {@link failureToError}.\n */\nexport async function decodeOptionalFailureToOptionalError(\n  converter: LoadedDataConverter,\n  failure: ProtoFailure | undefined | null,\n  context?: SerializationContext\n): Promise<Error | undefined> {\n  const { failureConverter, payloadConverter, payloadCodecs } = converter;\n  return failure\n    ? failureConverter.failureToError(await decodeFailure(payloadCodecs, failure, context), payloadConverter, context)\n    : undefined;\n}\n\nexport async function decodeOptionalMap(\n  codecs: PayloadCodec[],\n  payloads: Record<string, Payload> | null | undefined,\n  context?: SerializationContext\n): Promise<Record<string, DecodedPayload> | null | undefined> {\n  if (payloads == null) return payloads;\n  return Object.fromEntries(\n    await Promise.all(Object.entries(payloads).map(async ([k, v]) => [k, (await decode(codecs, [v], context))[0]]))\n  );\n}\n\n/**\n * Run {@link PayloadConverter.toPayload} on values, and then encode them.\n */\nexport async function encodeToPayloads(\n  converter: LoadedDataConverter,\n  ...values: unknown[]\n): Promise<Payload[] | undefined> {\n  return encodeToPayloadsWithContext(converter, undefined, values);\n}\n\n/**\n * Run {@link PayloadConverter.toPayload} on values with an optional serialization context, and then encode them.\n */\nexport async function encodeToPayloadsWithContext(\n  converter: LoadedDataConverter,\n  context: SerializationContext | undefined,\n  values: unknown[],\n  typeInfo?: readonly TypeInfo[]\n): Promise<Payload[] | undefined> {\n  const { payloadConverter, payloadCodecs } = converter;\n  if (values.length === 0) {\n    return undefined;\n  }\n  const payloads = toPayloadsWithContext(payloadConverter, context, values, typeInfo);\n  return payloads ? await encode(payloadCodecs, payloads, context) : undefined;\n}\n\n/**\n * Run {@link PayloadCodec.decode} and then {@link PayloadConverter.fromPayload} on values in `map`.\n */\nexport async function decodeMapFromPayloads<K extends string>(\n  converter: LoadedDataConverter,\n  map: Record<K, Payload> | null | undefined,\n  context?: SerializationContext\n): Promise<Record<K, unknown> | undefined> {\n  if (!map) return undefined;\n  const { payloadConverter, payloadCodecs } = converter;\n  return Object.fromEntries(\n    await Promise.all(\n      Object.entries(map).map(async ([k, payload]): Promise<[K, unknown]> => {\n        const [decodedPayload] = await decode(payloadCodecs, [payload as Payload], context);\n        const value = payloadConverter.fromPayload(decodedPayload!, context);\n        return [k as K, value];\n      })\n    )\n  ) as Record<K, unknown>;\n}\n\n/** Run {@link PayloadCodec.encode} on all values in `map` */\nexport async function encodeMap<K extends string>(\n  codecs: PayloadCodec[],\n  map: Record<K, Payload> | null | undefined,\n  context?: SerializationContext\n): Promise<Record<K, EncodedPayload> | null | undefined> {\n  if (map === null) return null;\n  if (map === undefined) return undefined;\n  return Object.fromEntries(\n    await Promise.all(\n      Object.entries(map).map(async ([k, payload]): Promise<[K, EncodedPayload]> => {\n        return [k as K, await encodeSingle(codecs, payload as Payload, context)];\n      })\n    )\n  ) as Record<K, EncodedPayload>;\n}\n\n/**\n * Run {@link PayloadConverter.toPayload} and then {@link PayloadCodec.encode} on values in `map`.\n */\nexport async function encodeMapToPayloads<K extends string>(\n  converter: LoadedDataConverter,\n  map: Record<K, unknown>,\n  context?: SerializationContext\n): Promise<Record<K, Payload>> {\n  const { payloadConverter, payloadCodecs } = converter;\n  return Object.fromEntries(\n    await Promise.all(\n      Object.entries(map).map(async ([k, v]): Promise<[K, Payload]> => {\n        const payload = payloadConverter.toPayload(v, context);\n        if (payload === undefined) throw new PayloadConverterError(`Failed to encode entry: ${k}: ${v}`);\n        const [encodedPayload] = await encode(payloadCodecs, [payload], context);\n        return [k as K, encodedPayload!];\n      })\n    )\n  ) as Record<K, Payload>;\n}\n\n/**\n * Run {@link errorToFailure} on `error`, and then {@link encodeFailure}.\n */\nexport async function encodeErrorToFailure(\n  dataConverter: LoadedDataConverter,\n  error: unknown,\n  context?: SerializationContext\n): Promise<ProtoFailure> {\n  const { failureConverter, payloadConverter, payloadCodecs } = dataConverter;\n  return await encodeFailure(payloadCodecs, failureConverter.errorToFailure(error, payloadConverter, context), context);\n}\n\n/**\n * Return a new {@link ProtoFailure} with `codec.encode()` run on all the {@link Payload}s.\n */\nexport async function encodeFailure(\n  codecs: PayloadCodec[],\n  failure: ProtoFailure,\n  context?: SerializationContext\n): Promise<EncodedProtoFailure> {\n  return {\n    ...failure,\n    encodedAttributes: failure.encodedAttributes\n      ? (await encode(codecs, [failure.encodedAttributes], context))[0]\n      : undefined,\n    cause: failure.cause ? await encodeFailure(codecs, failure.cause, context) : null,\n    applicationFailureInfo: failure.applicationFailureInfo\n      ? {\n          ...failure.applicationFailureInfo,\n          details: failure.applicationFailureInfo.details\n            ? {\n                payloads: await encode(codecs, failure.applicationFailureInfo.details.payloads ?? [], context),\n              }\n            : undefined,\n        }\n      : undefined,\n    timeoutFailureInfo: failure.timeoutFailureInfo\n      ? {\n          ...failure.timeoutFailureInfo,\n          lastHeartbeatDetails: failure.timeoutFailureInfo.lastHeartbeatDetails\n            ? {\n                payloads: await encode(codecs, failure.timeoutFailureInfo.lastHeartbeatDetails.payloads ?? [], context),\n              }\n            : undefined,\n        }\n      : undefined,\n    canceledFailureInfo: failure.canceledFailureInfo\n      ? {\n          ...failure.canceledFailureInfo,\n          details: failure.canceledFailureInfo.details\n            ? {\n                payloads: await encode(codecs, failure.canceledFailureInfo.details.payloads ?? [], context),\n              }\n            : undefined,\n        }\n      : undefined,\n    resetWorkflowFailureInfo: failure.resetWorkflowFailureInfo\n      ? {\n          ...failure.resetWorkflowFailureInfo,\n          lastHeartbeatDetails: failure.resetWorkflowFailureInfo.lastHeartbeatDetails\n            ? {\n                payloads: await encode(\n                  codecs,\n                  failure.resetWorkflowFailureInfo.lastHeartbeatDetails.payloads ?? [],\n                  context\n                ),\n              }\n            : undefined,\n        }\n      : undefined,\n  };\n}\n\n/**\n * Return a new {@link ProtoFailure} with `codec.decode()` run on all the {@link Payload}s.\n */\nexport async function decodeFailure(\n  codecs: PayloadCodec[],\n  failure: ProtoFailure,\n  context?: SerializationContext\n): Promise<DecodedProtoFailure> {\n  return {\n    ...failure,\n    encodedAttributes: failure.encodedAttributes\n      ? (await decode(codecs, [failure.encodedAttributes], context))[0]\n      : undefined,\n    cause: failure.cause ? await decodeFailure(codecs, failure.cause, context) : null,\n    applicationFailureInfo: failure.applicationFailureInfo\n      ? {\n          ...failure.applicationFailureInfo,\n          details: failure.applicationFailureInfo.details\n            ? {\n                payloads: await decode(codecs, failure.applicationFailureInfo.details.payloads ?? [], context),\n              }\n            : undefined,\n        }\n      : undefined,\n    timeoutFailureInfo: failure.timeoutFailureInfo\n      ? {\n          ...failure.timeoutFailureInfo,\n          lastHeartbeatDetails: failure.timeoutFailureInfo.lastHeartbeatDetails\n            ? {\n                payloads: await decode(codecs, failure.timeoutFailureInfo.lastHeartbeatDetails.payloads ?? [], context),\n              }\n            : undefined,\n        }\n      : undefined,\n    canceledFailureInfo: failure.canceledFailureInfo\n      ? {\n          ...failure.canceledFailureInfo,\n          details: failure.canceledFailureInfo.details\n            ? {\n                payloads: await decode(codecs, failure.canceledFailureInfo.details.payloads ?? [], context),\n              }\n            : undefined,\n        }\n      : undefined,\n    resetWorkflowFailureInfo: failure.resetWorkflowFailureInfo\n      ? {\n          ...failure.resetWorkflowFailureInfo,\n          lastHeartbeatDetails: failure.resetWorkflowFailureInfo.lastHeartbeatDetails\n            ? {\n                payloads: await decode(\n                  codecs,\n                  failure.resetWorkflowFailureInfo.lastHeartbeatDetails.payloads ?? [],\n                  context\n                ),\n              }\n            : undefined,\n        }\n      : undefined,\n  };\n}\n\n/**\n * Return a new {@link ProtoFailure} with `codec.encode()` run on all the {@link Payload}s.\n */\nexport async function encodeOptionalFailure(\n  codecs: PayloadCodec[],\n  failure: ProtoFailure | null | undefined,\n  context?: SerializationContext\n): Promise<EncodedProtoFailure | null | undefined> {\n  if (failure == null) return failure;\n  return await encodeFailure(codecs, failure, context);\n}\n\n/**\n * Return a new {@link ProtoFailure} with `codec.encode()` run on all the {@link Payload}s.\n */\nexport async function decodeOptionalFailure(\n  codecs: PayloadCodec[],\n  failure: ProtoFailure | null | undefined,\n  context?: SerializationContext\n): Promise<DecodedProtoFailure | null | undefined> {\n  if (failure == null) return failure;\n  return await decodeFailure(codecs, failure, context);\n}\n\n/**\n * Mark all values in the map as encoded.\n * Use this for headers, which we don't encode.\n */\nexport function noopEncodeMap<K extends string>(\n  map: Record<K, Payload> | null | undefined\n): Record<K, EncodedPayload> | null | undefined {\n  return map as Record<K, EncodedPayload> | null | undefined;\n}\n\nexport function noopEncodeSearchAttrs(\n  attrs: temporal.api.common.v1.ISearchAttributes | null | undefined\n): temporal.api.common.v1.ISearchAttributes | null | undefined {\n  if (!attrs) {\n    return attrs;\n  }\n  return {\n    indexedFields: noopEncodeMap(attrs.indexedFields),\n  };\n}\n\n/**\n * Mark all values in the map as decoded.\n * Use this for headers, which we don't encode.\n */\nexport function noopDecodeMap<K extends string>(\n  map: Record<K, Payload> | null | undefined\n): Record<K, DecodedPayload> | null | undefined {\n  return map as Record<K, DecodedPayload> | null | undefined;\n}\n\nexport async function encodeUserMetadata(\n  dataConverter: LoadedDataConverter,\n  staticSummary: string | undefined,\n  staticDetails: string | undefined,\n  context?: SerializationContext\n): Promise<temporal.api.sdk.v1.IUserMetadata | undefined> {\n  if (staticSummary == null && staticDetails == null) return undefined;\n\n  const { payloadConverter, payloadCodecs } = dataConverter;\n  const summary = await encodeOptionalSingle(\n    payloadCodecs,\n    convertOptionalToPayload(payloadConverter, staticSummary, context),\n    context\n  );\n  const details = await encodeOptionalSingle(\n    payloadCodecs,\n    convertOptionalToPayload(payloadConverter, staticDetails, context),\n    context\n  );\n\n  if (summary == null && details == null) return undefined;\n\n  return { summary, details };\n}\n\nexport async function decodeUserMetadata(\n  dataConverter: LoadedDataConverter,\n  metadata: temporal.api.sdk.v1.IUserMetadata | undefined | null,\n  context?: SerializationContext\n): Promise<UserMetadata> {\n  const res = { staticSummary: undefined, staticDetails: undefined };\n  if (metadata == null) return res;\n\n  const staticSummary =\n    (await decodeOptionalSinglePayload<string>(dataConverter, metadata.summary, context)) ?? undefined;\n  const staticDetails =\n    (await decodeOptionalSinglePayload<string>(dataConverter, metadata.details, context)) ?? undefined;\n\n  return { staticSummary, staticDetails };\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=codec-types.js.map","import type { PayloadConverter } from '../converter/payload-converter';\nimport { defaultPayloadConverter } from '../converter/payload-converter';\nimport type { DataConverter, LoadedDataConverter } from '../converter/data-converter';\nimport { defaultFailureConverter } from '../converter/data-converter';\nimport type { FailureConverter } from '../converter/failure-converter';\nimport { errorCode, hasOwnProperty, isRecord } from '../type-helpers';\nimport { ValueError } from '../errors';\n\nconst isValidPayloadConverter = (converter: unknown, path: string): asserts converter is PayloadConverter => {\n  const isValid =\n    typeof converter === 'object' &&\n    converter !== null &&\n    ['toPayload', 'fromPayload'].every(\n      (method) => typeof (converter as Record<string, unknown>)[method] === 'function'\n    );\n  if (!isValid) {\n    throw new ValueError(`payloadConverter export at ${path} must be an object with toPayload and fromPayload methods`);\n  }\n};\n\nconst isValidFailureConverter = (converter: unknown, path: string): asserts converter is FailureConverter => {\n  const isValid =\n    typeof converter === 'object' &&\n    converter !== null &&\n    ['errorToFailure', 'failureToError'].every(\n      (method) => typeof (converter as Record<string, unknown>)[method] === 'function'\n    );\n  if (!isValid) {\n    throw new ValueError(\n      `failureConverter export at ${path} must be an object with errorToFailure and failureToError methods`\n    );\n  }\n};\n\nfunction requireConverter<T>(\n  path: string,\n  type: string,\n  validator: (converter: unknown, path: string) => asserts converter is T\n): T {\n  let module;\n  try {\n    module = require(path); // eslint-disable-line @typescript-eslint/no-require-imports\n  } catch (error) {\n    if (errorCode(error) === 'MODULE_NOT_FOUND') {\n      throw new ValueError(`Could not find a file at the specified ${type}Path: '${path}'.`);\n    }\n    throw error;\n  }\n\n  if (isRecord(module) && hasOwnProperty(module, type)) {\n    const converter = module[type];\n    validator(converter, path);\n    return converter;\n  } else {\n    throw new ValueError(`Module ${path} does not have a \\`${type}\\` named export`);\n  }\n}\n\n/**\n * If {@link DataConverter.payloadConverterPath} is specified, `require()` it and validate that the module has a `payloadConverter` named export.\n * If not, use {@link defaultPayloadConverter}.\n * If {@link DataConverter.payloadCodecs} is unspecified, use an empty array.\n */\nexport function loadDataConverter(dataConverter?: DataConverter): LoadedDataConverter {\n  let payloadConverter: PayloadConverter = defaultPayloadConverter;\n  if (dataConverter?.payloadConverterPath) {\n    payloadConverter = requireConverter(\n      dataConverter.payloadConverterPath,\n      'payloadConverter',\n      isValidPayloadConverter\n    );\n  }\n  let failureConverter: FailureConverter = defaultFailureConverter;\n  if (dataConverter?.failureConverterPath) {\n    failureConverter = requireConverter(\n      dataConverter.failureConverterPath,\n      'failureConverter',\n      isValidFailureConverter\n    );\n  }\n  return {\n    payloadConverter,\n    failureConverter,\n    payloadCodecs: dataConverter?.payloadCodecs ?? [],\n    externalStorage: dataConverter?.externalStorage,\n  };\n}\n\n/**\n * Returns true if the converter is already \"loaded\"\n */\nexport function isLoadedDataConverter(\n  dataConverter?: DataConverter | LoadedDataConverter\n): dataConverter is LoadedDataConverter {\n  return isRecord(dataConverter) && hasOwnProperty(dataConverter, 'payloadConverter');\n}\n","// Properties used internally by protobufjs on Namespace/ReflectionObject instances.\n// A protobuf package component that happens to share one of these names must not be\n// promoted to a direct property, or it would corrupt protobufjs's internal state.\n// (Such types are still reachable via root.lookup() or root.nested traversal.)\nconst ROOT_PROPS = new Set([\n  'options',\n  'parsedOptions',\n  'name',\n  'parent',\n  'resolved',\n  'comment',\n  'filename',\n  'nested',\n  '_nestedArray',\n]);\n\n/**\n * Create a version of `root` with non-nested namespaces to match the generated types.\n * For more information, see:\n * https://github.com/temporalio/sdk-typescript/blob/main/docs/protobuf-libraries.md#current-solution\n * @param root Generated by `pbjs -t json-module -w commonjs -o json-module.js *.proto`\n * @returns A new patched `root`\n */\nexport function patchProtobufRoot<T extends Record<string, unknown>>(root: T): T {\n  const patched = _patchProtobufRoot(root);\n\n  // Protobufjs >=7.5.2 added a fast-path cache in Namespace#lookup() that accesses\n  // `this.root._fullyQualifiedObjects`. The `root` accessor is defined as a non-enumerable\n  // getter on `ReflectionObject.prototype`, so it is not copied by `for...in` loops.\n  // When the patched root is imported via `import * as proto from '@temporalio/proto'`,\n  // TypeScript's `__importStar` helper wraps the CJS module in a plain object by iterating\n  // own enumerable properties with `for...in` + `hasOwnProperty`. Because `root` is\n  // non-enumerable, it is skipped, the wrapper's `root` is `undefined`, and any subsequent\n  // `this.root._fullyQualifiedObjects` access crashes.\n  // Defining `root` as an own **enumerable** getter ensures `__importStar` includes it in\n  // the wrapper, so that `wrapper.root` delegates back to the patched root (which has the\n  // proper `_fullyQualifiedObjects` map and full prototype chain).\n  if (!Object.getOwnPropertyDescriptor(patched, 'root')) {\n    Object.defineProperty(patched, 'root', {\n      get(this: any) {\n        // eslint-disable-next-line @typescript-eslint/no-this-alias\n        let ptr = this;\n        while (ptr.parent !== null) ptr = ptr.parent;\n        return ptr;\n      },\n      enumerable: true,\n      configurable: true,\n    });\n  }\n\n  // Protobufjs >=8 declares `constructor` as a non-enumerable property on the prototypes of its\n  // reflection classes; before that it was assigned plainly, making it enumerable. `__importStar`\n  // only carries over own enumerable properties, so without this the wrapper it builds for\n  // `import * as proto from '@temporalio/proto'` loses its link back to `Root`, and the\n  // `constructor.className` checks used to recognize a root would reject it.\n  if (!Object.getOwnPropertyDescriptor(patched, 'constructor')) {\n    Object.defineProperty(patched, 'constructor', {\n      value: patched.constructor,\n      enumerable: true,\n      writable: true,\n      configurable: true,\n    });\n  }\n\n  return patched;\n}\n\nfunction _patchProtobufRoot<T extends Record<string, unknown>>(root: T, name?: string): T {\n  const newRoot = new (root.constructor as any)(isNamespace(root) ? name : {});\n  for (const key in root) {\n    // 'root' is a getter-only accessor defined on ReflectionObject.prototype. Trying to\n    // assign it as a plain property on a new Root/Namespace instance throws in strict mode.\n    // It is also safe to skip because each object correctly resolves its own root at runtime\n    // by traversing the parent chain. The top-level own enumerable getter is added separately\n    // by patchProtobufRoot() after recursion completes.\n    if (key === 'root') continue;\n    newRoot[key] = root[key];\n  }\n\n  if (isRecord(root.nested)) {\n    for (const typeOrNamespace in root.nested) {\n      // Skip names that protobufjs uses internally — overriding them would corrupt\n      // the namespace object's internal state. Types/namespaces with these names are\n      // still reachable via root.lookup() or by traversing root.nested manually.\n      if (ROOT_PROPS.has(typeOrNamespace)) continue;\n\n      const value = root.nested[typeOrNamespace];\n      if (isNamespace(value)) {\n        newRoot[typeOrNamespace] = _patchProtobufRoot(value, typeOrNamespace);\n      } else if (isType(value)) {\n        newRoot[typeOrNamespace] = value;\n      }\n    }\n  }\n\n  return newRoot;\n}\n\ntype Type = Record<string, unknown>;\ntype Namespace = { nested: Record<string, unknown> };\n\nfunction isType(value: unknown): value is Type {\n  // constructor.name may get mangled by minifiers; thanksfuly protobufjs also sets a constructor.className property\n  return isRecord(value) && (value.constructor as any).className === 'Type';\n}\n\nfunction isNamespace(value: unknown): value is Namespace {\n  // constructor.name may get mangled by minifiers; thanksfuly protobufjs also sets a constructor.className property\n  return isRecord(value) && (value.constructor as any).className === 'Namespace';\n}\n\n// Duplicate from type-helpers instead of importing in order to avoid circular dependency\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === 'object' && value !== null;\n}\n","\"use strict\";\nmodule.exports = asPromise;\n\n/**\n * Callback as used by {@link util.asPromise}.\n * @typedef asPromiseCallback\n * @type {function}\n * @param {Error|null} error Error, if any\n * @param {...*} params Additional arguments\n * @returns {undefined}\n */\n\n/**\n * Returns a promise from a node-style callback function.\n * @memberof util\n * @param {asPromiseCallback} fn Function to call\n * @param {*} ctx Function context\n * @param {...*} params Function arguments\n * @returns {Promise<*>} Promisified function\n */\nfunction asPromise(fn, ctx/*, varargs */) {\n    var params  = new Array(arguments.length - 1),\n        offset  = 0,\n        index   = 2,\n        pending = true;\n    while (index < arguments.length)\n        params[offset++] = arguments[index++];\n    return new Promise(function executor(resolve, reject) {\n        params[offset] = function callback(err/*, varargs */) {\n            if (pending) {\n                pending = false;\n                if (err)\n                    reject(err);\n                else {\n                    var params = new Array(arguments.length - 1),\n                        offset = 0;\n                    while (offset < params.length)\n                        params[offset++] = arguments[offset];\n                    resolve.apply(null, params);\n                }\n            }\n        };\n        try {\n            fn.apply(ctx || null, params);\n        } catch (err) {\n            if (pending) {\n                pending = false;\n                reject(err);\n            }\n        }\n    });\n}\n","\"use strict\";\n\n/**\n * A minimal base64 implementation for number arrays.\n * @memberof util\n * @namespace\n */\nvar base64 = exports;\n\n/**\n * Calculates the byte length of a base64 encoded string.\n * @param {string} string Base64 encoded string\n * @returns {number} Byte length\n */\nbase64.length = function length(string) {\n    var p = string.length;\n    if (!p)\n        return 0;\n    while (p > 0 && string.charAt(p - 1) === \"=\")\n        --p;\n    return Math.floor(p * 3 / 4);\n};\n\n// Base64 encoding table\nvar b64 = new Array(64);\n\n// Base64 decoding table\nvar s64 = new Array(123);\n\n// 65..90, 97..122, 48..57, 43, 47\nfor (var i = 0; i < 64;)\n    s64[b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++;\n\ns64[45] = 62; // - -> +\ns64[95] = 63; // _ -> /\n\n/**\n * Encodes a buffer to a base64 encoded string.\n * @param {Uint8Array} buffer Source buffer\n * @param {number} start Source start\n * @param {number} end Source end\n * @returns {string} Base64 encoded string\n */\nbase64.encode = function encode(buffer, start, end) {\n    var parts = null,\n        chunk = [];\n    var i = 0, // output index\n        j = 0, // goto index\n        t;     // temporary\n    while (start < end) {\n        var b = buffer[start++];\n        switch (j) {\n            case 0:\n                chunk[i++] = b64[b >> 2];\n                t = (b & 3) << 4;\n                j = 1;\n                break;\n            case 1:\n                chunk[i++] = b64[t | b >> 4];\n                t = (b & 15) << 2;\n                j = 2;\n                break;\n            case 2:\n                chunk[i++] = b64[t | b >> 6];\n                chunk[i++] = b64[b & 63];\n                j = 0;\n                break;\n        }\n        if (i > 8191) {\n            (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\n            i = 0;\n        }\n    }\n    if (j) {\n        chunk[i++] = b64[t];\n        chunk[i++] = 61;\n        if (j === 1)\n            chunk[i++] = 61;\n    }\n    if (parts) {\n        if (i)\n            parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\n        return parts.join(\"\");\n    }\n    return String.fromCharCode.apply(String, chunk.slice(0, i));\n};\n\nvar invalidEncoding = \"invalid encoding\";\n\n/**\n * Decodes a base64 encoded string to a buffer.\n * @param {string} string Source string\n * @param {Uint8Array} buffer Destination buffer\n * @param {number} offset Destination offset\n * @returns {number} Number of bytes written\n * @throws {Error} If encoding is invalid\n */\nbase64.decode = function decode(string, buffer, offset) {\n    var start = offset;\n    var j = 0, // goto index\n        t;     // temporary\n    for (var i = 0; i < string.length;) {\n        var c = string.charCodeAt(i++);\n        if (c === 61 && j > 1)\n            break;\n        if ((c = s64[c]) === undefined)\n            throw Error(invalidEncoding);\n        switch (j) {\n            case 0:\n                t = c;\n                j = 1;\n                break;\n            case 1:\n                buffer[offset++] = t << 2 | (c & 48) >> 4;\n                t = c;\n                j = 2;\n                break;\n            case 2:\n                buffer[offset++] = (t & 15) << 4 | (c & 60) >> 2;\n                t = c;\n                j = 3;\n                break;\n            case 3:\n                buffer[offset++] = (t & 3) << 6 | c;\n                j = 0;\n                break;\n        }\n    }\n    if (j === 1)\n        throw Error(invalidEncoding);\n    return offset - start;\n};\n\nvar base64Re = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,\n    base64UrlRe = /[-_]/,\n    base64UrlNoPaddingRe = /^(?:[A-Za-z0-9_-]{4})*(?:[A-Za-z0-9_-]{2}(?:==)?|[A-Za-z0-9_-]{3}=?)?$/;\n\n/**\n * Tests if the specified string appears to be base64 encoded.\n * @param {string} string String to test\n * @returns {boolean} `true` if probably base64 encoded, otherwise false\n */\nbase64.test = function test(string) {\n    return base64Re.test(string)\n        || base64UrlRe.test(string) && base64UrlNoPaddingRe.test(string);\n};\n","\"use strict\";\nmodule.exports = EventEmitter;\n\n/**\n * Constructs a new event emitter instance.\n * @classdesc A minimal event emitter.\n * @memberof util\n * @constructor\n */\nfunction EventEmitter() {\n\n    /**\n     * Registered listeners.\n     * @type {Object.<string,*>}\n     * @private\n     */\n    this._listeners = Object.create(null);\n}\n\n/**\n * Event listener as used by {@link util.EventEmitter}.\n * @typedef EventEmitterListener\n * @type {function}\n * @param {...*} args Arguments\n * @returns {undefined}\n */\n\n/**\n * Registers an event listener.\n * @param {string} evt Event name\n * @param {EventEmitterListener} fn Listener\n * @param {*} [ctx] Listener context\n * @returns {this} `this`\n */\nEventEmitter.prototype.on = function on(evt, fn, ctx) {\n    (this._listeners[evt] || (this._listeners[evt] = [])).push({\n        fn  : fn,\n        ctx : ctx || this\n    });\n    return this;\n};\n\n/**\n * Removes an event listener or any matching listeners if arguments are omitted.\n * @param {string} [evt] Event name. Removes all listeners if omitted.\n * @param {EventEmitterListener} [fn] Listener to remove. Removes all listeners of `evt` if omitted.\n * @returns {this} `this`\n */\nEventEmitter.prototype.off = function off(evt, fn) {\n    if (evt === undefined)\n        this._listeners = Object.create(null);\n    else {\n        if (fn === undefined)\n            this._listeners[evt] = [];\n        else {\n            var listeners = this._listeners[evt];\n            if (!listeners)\n                return this;\n            for (var i = 0; i < listeners.length;)\n                if (listeners[i].fn === fn)\n                    listeners.splice(i, 1);\n                else\n                    ++i;\n        }\n    }\n    return this;\n};\n\n/**\n * Emits an event by calling its listeners with the specified arguments.\n * @param {string} evt Event name\n * @param {...*} args Arguments\n * @returns {this} `this`\n */\nEventEmitter.prototype.emit = function emit(evt) {\n    var listeners = this._listeners[evt];\n    if (listeners) {\n        var args = [],\n            i = 1;\n        for (; i < arguments.length;)\n            args.push(arguments[i++]);\n        for (i = 0; i < listeners.length;)\n            listeners[i].fn.apply(listeners[i++].ctx, args);\n    }\n    return this;\n};\n","\"use strict\";\n\nmodule.exports = factory(factory);\n\n/**\n * Reads / writes floats / doubles from / to buffers.\n * @name util.float\n * @namespace\n */\n\n/**\n * Writes a 32 bit float to a buffer using little endian byte order.\n * @name util.float.writeFloatLE\n * @function\n * @param {number} val Value to write\n * @param {Uint8Array} buf Target buffer\n * @param {number} pos Target buffer offset\n * @returns {undefined}\n */\n\n/**\n * Writes a 32 bit float to a buffer using big endian byte order.\n * @name util.float.writeFloatBE\n * @function\n * @param {number} val Value to write\n * @param {Uint8Array} buf Target buffer\n * @param {number} pos Target buffer offset\n * @returns {undefined}\n */\n\n/**\n * Reads a 32 bit float from a buffer using little endian byte order.\n * @name util.float.readFloatLE\n * @function\n * @param {Uint8Array} buf Source buffer\n * @param {number} pos Source buffer offset\n * @returns {number} Value read\n */\n\n/**\n * Reads a 32 bit float from a buffer using big endian byte order.\n * @name util.float.readFloatBE\n * @function\n * @param {Uint8Array} buf Source buffer\n * @param {number} pos Source buffer offset\n * @returns {number} Value read\n */\n\n/**\n * Writes a 64 bit double to a buffer using little endian byte order.\n * @name util.float.writeDoubleLE\n * @function\n * @param {number} val Value to write\n * @param {Uint8Array} buf Target buffer\n * @param {number} pos Target buffer offset\n * @returns {undefined}\n */\n\n/**\n * Writes a 64 bit double to a buffer using big endian byte order.\n * @name util.float.writeDoubleBE\n * @function\n * @param {number} val Value to write\n * @param {Uint8Array} buf Target buffer\n * @param {number} pos Target buffer offset\n * @returns {undefined}\n */\n\n/**\n * Reads a 64 bit double from a buffer using little endian byte order.\n * @name util.float.readDoubleLE\n * @function\n * @param {Uint8Array} buf Source buffer\n * @param {number} pos Source buffer offset\n * @returns {number} Value read\n */\n\n/**\n * Reads a 64 bit double from a buffer using big endian byte order.\n * @name util.float.readDoubleBE\n * @function\n * @param {Uint8Array} buf Source buffer\n * @param {number} pos Source buffer offset\n * @returns {number} Value read\n */\n\n// Factory function for the purpose of node-based testing in modified global environments\nfunction factory(exports) {\n\n    // float: typed array\n    if (typeof Float32Array !== \"undefined\") (function() {\n\n        var f32 = new Float32Array([ -0 ]),\n            f8b = new Uint8Array(f32.buffer),\n            le  = f8b[3] === 128;\n\n        function writeFloat_f32_cpy(val, buf, pos) {\n            f32[0] = val;\n            buf[pos    ] = f8b[0];\n            buf[pos + 1] = f8b[1];\n            buf[pos + 2] = f8b[2];\n            buf[pos + 3] = f8b[3];\n        }\n\n        function writeFloat_f32_rev(val, buf, pos) {\n            f32[0] = val;\n            buf[pos    ] = f8b[3];\n            buf[pos + 1] = f8b[2];\n            buf[pos + 2] = f8b[1];\n            buf[pos + 3] = f8b[0];\n        }\n\n        /* istanbul ignore next */\n        exports.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;\n        /* istanbul ignore next */\n        exports.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;\n\n        function readFloat_f32_cpy(buf, pos) {\n            f8b[0] = buf[pos    ];\n            f8b[1] = buf[pos + 1];\n            f8b[2] = buf[pos + 2];\n            f8b[3] = buf[pos + 3];\n            return f32[0];\n        }\n\n        function readFloat_f32_rev(buf, pos) {\n            f8b[3] = buf[pos    ];\n            f8b[2] = buf[pos + 1];\n            f8b[1] = buf[pos + 2];\n            f8b[0] = buf[pos + 3];\n            return f32[0];\n        }\n\n        /* istanbul ignore next */\n        exports.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;\n        /* istanbul ignore next */\n        exports.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;\n\n    // float: ieee754\n    })(); else (function() {\n\n        function writeFloat_ieee754(writeUint, val, buf, pos) {\n            var sign = val < 0 ? 1 : 0;\n            if (sign)\n                val = -val;\n            if (val === 0)\n                writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos);\n            else if (isNaN(val))\n                writeUint(2143289344, buf, pos);\n            else if (val > 3.4028234663852886e+38) // +-Infinity\n                writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);\n            else if (val < 1.1754943508222875e-38) // denormal\n                writeUint((sign << 31 | Math.round(val / 1.401298464324817e-45)) >>> 0, buf, pos);\n            else {\n                var exponent = Math.floor(Math.log(val) / Math.LN2),\n                    mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;\n                writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);\n            }\n        }\n\n        exports.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);\n        exports.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);\n\n        function readFloat_ieee754(readUint, buf, pos) {\n            var uint = readUint(buf, pos),\n                sign = (uint >> 31) * 2 + 1,\n                exponent = uint >>> 23 & 255,\n                mantissa = uint & 8388607;\n            return exponent === 255\n                ? mantissa\n                ? NaN\n                : sign * Infinity\n                : exponent === 0 // denormal\n                ? sign * 1.401298464324817e-45 * mantissa\n                : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);\n        }\n\n        exports.readFloatLE = readFloat_ieee754.bind(null, readUintLE);\n        exports.readFloatBE = readFloat_ieee754.bind(null, readUintBE);\n\n    })();\n\n    // double: typed array\n    if (typeof Float64Array !== \"undefined\") (function() {\n\n        var f64 = new Float64Array([-0]),\n            f8b = new Uint8Array(f64.buffer),\n            le  = f8b[7] === 128;\n\n        function writeDouble_f64_cpy(val, buf, pos) {\n            f64[0] = val;\n            buf[pos    ] = f8b[0];\n            buf[pos + 1] = f8b[1];\n            buf[pos + 2] = f8b[2];\n            buf[pos + 3] = f8b[3];\n            buf[pos + 4] = f8b[4];\n            buf[pos + 5] = f8b[5];\n            buf[pos + 6] = f8b[6];\n            buf[pos + 7] = f8b[7];\n        }\n\n        function writeDouble_f64_rev(val, buf, pos) {\n            f64[0] = val;\n            buf[pos    ] = f8b[7];\n            buf[pos + 1] = f8b[6];\n            buf[pos + 2] = f8b[5];\n            buf[pos + 3] = f8b[4];\n            buf[pos + 4] = f8b[3];\n            buf[pos + 5] = f8b[2];\n            buf[pos + 6] = f8b[1];\n            buf[pos + 7] = f8b[0];\n        }\n\n        /* istanbul ignore next */\n        exports.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;\n        /* istanbul ignore next */\n        exports.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;\n\n        function readDouble_f64_cpy(buf, pos) {\n            f8b[0] = buf[pos    ];\n            f8b[1] = buf[pos + 1];\n            f8b[2] = buf[pos + 2];\n            f8b[3] = buf[pos + 3];\n            f8b[4] = buf[pos + 4];\n            f8b[5] = buf[pos + 5];\n            f8b[6] = buf[pos + 6];\n            f8b[7] = buf[pos + 7];\n            return f64[0];\n        }\n\n        function readDouble_f64_rev(buf, pos) {\n            f8b[7] = buf[pos    ];\n            f8b[6] = buf[pos + 1];\n            f8b[5] = buf[pos + 2];\n            f8b[4] = buf[pos + 3];\n            f8b[3] = buf[pos + 4];\n            f8b[2] = buf[pos + 5];\n            f8b[1] = buf[pos + 6];\n            f8b[0] = buf[pos + 7];\n            return f64[0];\n        }\n\n        /* istanbul ignore next */\n        exports.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;\n        /* istanbul ignore next */\n        exports.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;\n\n    // double: ieee754\n    })(); else (function() {\n\n        function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {\n            var sign = val < 0 ? 1 : 0;\n            if (sign)\n                val = -val;\n            if (val === 0) {\n                writeUint(0, buf, pos + off0);\n                writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos + off1);\n            } else if (isNaN(val)) {\n                writeUint(0, buf, pos + off0);\n                writeUint(2146959360, buf, pos + off1);\n            } else if (val > 1.7976931348623157e+308) { // +-Infinity\n                writeUint(0, buf, pos + off0);\n                writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);\n            } else {\n                var mantissa;\n                if (val < 2.2250738585072014e-308) { // denormal\n                    mantissa = val / 5e-324;\n                    writeUint(mantissa >>> 0, buf, pos + off0);\n                    writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);\n                } else {\n                    var exponent = Math.floor(Math.log(val) / Math.LN2);\n                    if (exponent === 1024)\n                        exponent = 1023;\n                    mantissa = val * Math.pow(2, -exponent);\n                    writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);\n                    writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);\n                }\n            }\n        }\n\n        exports.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);\n        exports.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);\n\n        function readDouble_ieee754(readUint, off0, off1, buf, pos) {\n            var lo = readUint(buf, pos + off0),\n                hi = readUint(buf, pos + off1);\n            var sign = (hi >> 31) * 2 + 1,\n                exponent = hi >>> 20 & 2047,\n                mantissa = 4294967296 * (hi & 1048575) + lo;\n            return exponent === 2047\n                ? mantissa\n                ? NaN\n                : sign * Infinity\n                : exponent === 0 // denormal\n                ? sign * 5e-324 * mantissa\n                : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);\n        }\n\n        exports.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);\n        exports.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);\n\n    })();\n\n    return exports;\n}\n\n// uint helpers\n\nfunction writeUintLE(val, buf, pos) {\n    buf[pos    ] =  val        & 255;\n    buf[pos + 1] =  val >>> 8  & 255;\n    buf[pos + 2] =  val >>> 16 & 255;\n    buf[pos + 3] =  val >>> 24;\n}\n\nfunction writeUintBE(val, buf, pos) {\n    buf[pos    ] =  val >>> 24;\n    buf[pos + 1] =  val >>> 16 & 255;\n    buf[pos + 2] =  val >>> 8  & 255;\n    buf[pos + 3] =  val        & 255;\n}\n\nfunction readUintLE(buf, pos) {\n    return (buf[pos    ]\n          | buf[pos + 1] << 8\n          | buf[pos + 2] << 16\n          | buf[pos + 3] << 24) >>> 0;\n}\n\nfunction readUintBE(buf, pos) {\n    return (buf[pos    ] << 24\n          | buf[pos + 1] << 16\n          | buf[pos + 2] << 8\n          | buf[pos + 3]) >>> 0;\n}\n","\"use strict\";\n\n/**\n * A minimal UTF8 implementation.\n * @memberof util\n * @namespace\n */\nvar utf8 = exports,\n    looseDecoder = new TextDecoder(\"utf-8\", { ignoreBOM: true }),\n    strictDecoder;\nvar TEXT_DECODER_MIN_LENGTH = 64;\n\ntry {\n    strictDecoder = new TextDecoder(\"utf-8\", { fatal: true, ignoreBOM: true });\n} catch (err) {\n    // \"fatal\" option is not supported on Node.js compiled without ICU\n    strictDecoder = looseDecoder;\n}\n\n/**\n * Calculates the UTF8 byte length of a string.\n * @param {string} string String\n * @returns {number} Byte length\n */\nutf8.length = function utf8_length(string) {\n    var len = 0,\n        c = 0;\n    for (var i = 0; i < string.length; ++i) {\n        c = string.charCodeAt(i);\n        if (c < 128)\n            len += 1;\n        else if (c < 2048)\n            len += 2;\n        else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\n            ++i;\n            len += 4;\n        } else\n            len += 3;\n    }\n    return len;\n};\n\nfunction utf8_read_decoder(decoder, buffer, start, end) {\n    var source = start === 0 && end === buffer.length\n        ? buffer\n        : buffer.subarray(start, end);\n    return decoder.decode(source);\n}\n\n/**\n * Reads UTF8 bytes as a string.\n * @param {Uint8Array} buffer Source buffer\n * @param {number} start Source start\n * @param {number} end Source end\n * @returns {string} String read\n */\nutf8.read = function utf8_read_loose(buffer, start, end) {\n    if (end - start < 1)\n        return \"\";\n    if (end - start >= TEXT_DECODER_MIN_LENGTH)\n        return utf8_read_decoder(looseDecoder, buffer, start, end);\n\n    var str = \"\",\n        i = start,\n        c1, c2, c3, c4, c5, c6, c7, c8;\n\n    for (; i + 7 < end; i += 8) {\n        c1 = buffer[i];\n        c2 = buffer[i + 1];\n        c3 = buffer[i + 2];\n        c4 = buffer[i + 3];\n        c5 = buffer[i + 4];\n        c6 = buffer[i + 5];\n        c7 = buffer[i + 6];\n        c8 = buffer[i + 7];\n        if ((c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8) & 0x80)\n            return str + utf8_read_decoder(looseDecoder, buffer, i, end);\n        str += String.fromCharCode(c1, c2, c3, c4, c5, c6, c7, c8);\n    }\n\n    for (; i < end; ++i) {\n        c1 = buffer[i];\n        if (c1 & 0x80)\n            return str + utf8_read_decoder(looseDecoder, buffer, i, end);\n        str += String.fromCharCode(c1);\n    }\n\n    return str;\n};\n\n/**\n * Reads UTF8 bytes as a string, rejecting invalid UTF8.\n * @param {Uint8Array} buffer Source buffer\n * @param {number} start Source start\n * @param {number} end Source end\n * @returns {string} String read\n */\nutf8.readStrict = function utf8_read_strict(buffer, start, end) {\n    if (end - start < 1)\n        return \"\";\n    if (end - start >= TEXT_DECODER_MIN_LENGTH)\n        return utf8_read_decoder(strictDecoder, buffer, start, end);\n\n    var str = \"\",\n        i = start,\n        c1, c2, c3, c4, c5, c6, c7, c8;\n\n    for (; i + 7 < end; i += 8) {\n        c1 = buffer[i];\n        c2 = buffer[i + 1];\n        c3 = buffer[i + 2];\n        c4 = buffer[i + 3];\n        c5 = buffer[i + 4];\n        c6 = buffer[i + 5];\n        c7 = buffer[i + 6];\n        c8 = buffer[i + 7];\n        if ((c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8) & 0x80)\n            return str + utf8_read_decoder(strictDecoder, buffer, i, end);\n        str += String.fromCharCode(c1, c2, c3, c4, c5, c6, c7, c8);\n    }\n\n    for (; i < end; ++i) {\n        c1 = buffer[i];\n        if (c1 & 0x80)\n            return str + utf8_read_decoder(strictDecoder, buffer, i, end);\n        str += String.fromCharCode(c1);\n    }\n\n    return str;\n};\n\n/**\n * Writes a string as UTF8 bytes.\n * @param {string} string Source string\n * @param {Uint8Array} buffer Destination buffer\n * @param {number} offset Destination offset\n * @returns {number} Bytes written\n */\nutf8.write = function utf8_write(string, buffer, offset) {\n    var start = offset,\n        c1, // character 1\n        c2; // character 2\n    for (var i = 0; i < string.length; ++i) {\n        c1 = string.charCodeAt(i);\n        if (c1 < 128) {\n            buffer[offset++] = c1;\n        } else if (c1 < 2048) {\n            buffer[offset++] = c1 >> 6       | 192;\n            buffer[offset++] = c1       & 63 | 128;\n        } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\n            c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF);\n            ++i;\n            buffer[offset++] = c1 >> 18      | 240;\n            buffer[offset++] = c1 >> 12 & 63 | 128;\n            buffer[offset++] = c1 >> 6  & 63 | 128;\n            buffer[offset++] = c1       & 63 | 128;\n        } else {\n            buffer[offset++] = c1 >> 12      | 224;\n            buffer[offset++] = c1 >> 6  & 63 | 128;\n            buffer[offset++] = c1       & 63 | 128;\n        }\n    }\n    return offset - start;\n};\n","\"use strict\";\nmodule.exports = pool;\n\n/**\n * An allocator as used by {@link util.pool}.\n * @typedef PoolAllocator\n * @type {function}\n * @param {number} size Buffer size\n * @returns {Uint8Array} Buffer\n */\n\n/**\n * A slicer as used by {@link util.pool}.\n * @typedef PoolSlicer\n * @type {function}\n * @param {number} start Start offset\n * @param {number} end End offset\n * @returns {Uint8Array} Buffer slice\n * @this Uint8Array\n */\n\n/**\n * A general purpose buffer pool.\n * @memberof util\n * @function\n * @param {PoolAllocator} alloc Allocator\n * @param {PoolSlicer} slice Slicer\n * @param {number} [size=8192] Slab size\n * @returns {PoolAllocator} Pooled allocator\n */\nfunction pool(alloc, slice, size) {\n    var SIZE   = size || 8192;\n    var MAX    = SIZE >>> 1;\n    var slab   = null;\n    var offset = SIZE;\n    return function pool_alloc(size) {\n        if (size < 1 || size > MAX)\n            return alloc(size);\n        if (offset + size > SIZE) {\n            slab = alloc(SIZE);\n            offset = 0;\n        }\n        var buf = slice.call(slab, offset, offset += size);\n        if (offset & 7) // align to 32 bit\n            offset = (offset | 7) + 1;\n        return buf;\n    };\n}\n","\"use strict\";\nmodule.exports = LongBits;\n\nvar Long;\n\n/**\n * Constructs new long bits.\n * @classdesc Helper class for working with the low and high bits of a 64 bit value.\n * @memberof util\n * @constructor\n * @param {number} lo Low 32 bits, unsigned\n * @param {number} hi High 32 bits, unsigned\n */\nfunction LongBits(lo, hi) {\n\n    // note that the casts below are theoretically unnecessary as of today, but older statically\n    // generated converter code might still call the ctor with signed 32bits. kept for compat.\n\n    /**\n     * Low bits.\n     * @type {number}\n     */\n    this.lo = lo >>> 0;\n\n    /**\n     * High bits.\n     * @type {number}\n     */\n    this.hi = hi >>> 0;\n}\n\n/**\n * Zero bits.\n * @memberof util.LongBits\n * @type {util.LongBits}\n */\nvar zero = LongBits.zero = new LongBits(0, 0);\n\nzero.toNumber = function() { return 0; };\nzero.zzEncode = zero.zzDecode = function() { return this; };\nzero.length = function() { return 1; };\n\n/**\n * Zero hash.\n * @memberof util.LongBits\n * @type {string}\n */\nvar zeroHash = LongBits.zeroHash = \"\\0\\0\\0\\0\\0\\0\\0\\0\";\n\n/**\n * Constructs new long bits from the specified number.\n * @param {number} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.fromNumber = function fromNumber(value) {\n    if (value === 0)\n        return zero;\n    var sign = value < 0;\n    if (sign)\n        value = -value;\n    var lo = value >>> 0,\n        hi = (value - lo) / 4294967296 >>> 0;\n    if (sign) {\n        hi = ~hi >>> 0;\n        lo = ~lo >>> 0;\n        if (++lo > 4294967295) {\n            lo = 0;\n            if (++hi > 4294967295)\n                hi = 0;\n        }\n    }\n    return new LongBits(lo, hi);\n};\n\n/**\n * Constructs new long bits from a number, long or string.\n * @param {Long|number|string} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.from = function from(value) {\n    if (typeof value === \"number\")\n        return LongBits.fromNumber(value);\n    if (typeof value === \"string\" || value instanceof String) {\n        /* istanbul ignore else */\n        if (Long)\n            value = Long.fromString(value);\n        else\n            return LongBits.fromNumber(parseInt(value, 10));\n    }\n    return value.low || value.high ? new LongBits(value.low >>> 0, value.high >>> 0) : zero;\n};\n\n/**\n * Converts this long bits to a possibly unsafe JavaScript number.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {number} Possibly unsafe number\n */\nLongBits.prototype.toNumber = function toNumber(unsigned) {\n    if (!unsigned && this.hi >>> 31) {\n        var lo = ~this.lo + 1 >>> 0,\n            hi = ~this.hi     >>> 0;\n        if (!lo)\n            hi = hi + 1 >>> 0;\n        return -(lo + hi * 4294967296);\n    }\n    return this.lo + this.hi * 4294967296;\n};\n\n/**\n * Converts this long bits to a long.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long} Long\n */\nLongBits.prototype.toLong = function toLong(unsigned) {\n    return Long\n        ? new Long(this.lo | 0, this.hi | 0, Boolean(unsigned))\n        /* istanbul ignore next */\n        : { low: this.lo | 0, high: this.hi | 0, unsigned: Boolean(unsigned) };\n};\n\nvar charCodeAt = String.prototype.charCodeAt;\n\n/**\n * Constructs new long bits from the specified 8 characters long hash.\n * @param {string} hash Hash\n * @returns {util.LongBits} Bits\n */\nLongBits.fromHash = function fromHash(hash) {\n    if (hash === zeroHash)\n        return zero;\n    return new LongBits(\n        ( charCodeAt.call(hash, 0)\n        | charCodeAt.call(hash, 1) << 8\n        | charCodeAt.call(hash, 2) << 16\n        | charCodeAt.call(hash, 3) << 24) >>> 0\n    ,\n        ( charCodeAt.call(hash, 4)\n        | charCodeAt.call(hash, 5) << 8\n        | charCodeAt.call(hash, 6) << 16\n        | charCodeAt.call(hash, 7) << 24) >>> 0\n    );\n};\n\n/**\n * Converts this long bits to a 8 characters long hash.\n * @returns {string} Hash\n */\nLongBits.prototype.toHash = function toHash() {\n    return String.fromCharCode(\n        this.lo        & 255,\n        this.lo >>> 8  & 255,\n        this.lo >>> 16 & 255,\n        this.lo >>> 24      ,\n        this.hi        & 255,\n        this.hi >>> 8  & 255,\n        this.hi >>> 16 & 255,\n        this.hi >>> 24\n    );\n};\n\n/**\n * Zig-zag encodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzEncode = function zzEncode() {\n    var mask =   this.hi >> 31;\n    this.hi  = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0;\n    this.lo  = ( this.lo << 1                   ^ mask) >>> 0;\n    return this;\n};\n\n/**\n * Zig-zag decodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzDecode = function zzDecode() {\n    var mask = -(this.lo & 1);\n    this.lo  = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0;\n    this.hi  = ( this.hi >>> 1                  ^ mask) >>> 0;\n    return this;\n};\n\n/**\n * Calculates the length of this longbits when encoded as a varint.\n * @returns {number} Length\n */\nLongBits.prototype.length = function length() {\n    var part0 =  this.lo,\n        part1 = (this.lo >>> 28 | this.hi << 4) >>> 0,\n        part2 =  this.hi >>> 24;\n    return part2 === 0\n         ? part1 === 0\n           ? part0 < 16384\n             ? part0 < 128 ? 1 : 2\n             : part0 < 2097152 ? 3 : 4\n           : part1 < 16384\n             ? part1 < 128 ? 5 : 6\n             : part1 < 2097152 ? 7 : 8\n         : part2 < 128 ? 9 : 10;\n};\n\nLongBits._configure = function(Long_) {\n    Long = Long_;\n};\n","\"use strict\";\n/* global globalThis */\nvar util = exports;\n\n// used to return a Promise where callback is omitted\nutil.asPromise = require(\"./aspromise\");\n\n// converts to / from base64 encoded strings\nutil.base64 = require(\"./base64\");\n\n// base class of rpc.Service\nutil.EventEmitter = require(\"./eventemitter\");\n\n// float handling accross browsers\nutil.float = require(\"./float\");\n\n// converts to / from utf8 encoded strings\nutil.utf8 = require(\"./utf8\");\n\n// provides a node-like buffer pool in the browser\nutil.pool = require(\"./pool\");\n\n// utility to work with the low and high bits of a 64 bit value\nutil.LongBits = require(\"./longbits\");\n\n/**\n * Tests if the specified key can affect object prototypes.\n * @memberof util\n * @param {string} key Key to test\n * @returns {boolean} `true` if the key is unsafe\n */\nfunction isUnsafeProperty(key) {\n    return key === \"__proto__\" || key === \"prototype\" || key === \"constructor\";\n}\n\nutil.isUnsafeProperty = isUnsafeProperty;\n\n/**\n * Whether running within node or not.\n * @memberof util\n * @type {boolean}\n */\nutil.isNode = Boolean(typeof global !== \"undefined\"\n                   && global\n                   && global.process\n                   && global.process.versions\n                   && global.process.versions.node);\n\n/**\n * Global object reference.\n * @memberof util\n * @type {Object}\n */\nutil.global = util.isNode && global\n           || typeof window !== \"undefined\" && window\n           || typeof self   !== \"undefined\" && self\n           || typeof globalThis !== \"undefined\" && globalThis\n           || this; // eslint-disable-line no-invalid-this\n\n/**\n * An immuable empty array.\n * @memberof util\n * @type {Array.<*>}\n * @const\n */\nutil.emptyArray = Object.freeze ? Object.freeze([]) : /* istanbul ignore next */ []; // used on prototypes\n\n/**\n * An immutable empty object.\n * @type {Object}\n * @const\n */\nutil.emptyObject = Object.freeze ? Object.freeze({}) : /* istanbul ignore next */ {}; // used on prototypes\n\n/**\n * Tests if the specified value is an integer.\n * @function\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is an integer\n */\nutil.isInteger = Number.isInteger || /* istanbul ignore next */ function isInteger(value) {\n    return typeof value === \"number\" && isFinite(value) && Math.floor(value) === value;\n};\n\n/**\n * Tests if the specified value is a string.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a string\n */\nutil.isString = function isString(value) {\n    return typeof value === \"string\" || value instanceof String;\n};\n\n/**\n * Tests if the specified value is a non-null object.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a non-null object\n */\nutil.isObject = function isObject(value) {\n    return value && typeof value === \"object\";\n};\n\n/**\n * Checks if a property on a message is considered to be present.\n * This is an alias of {@link util.isSet}.\n * @function\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isset =\n\n/**\n * Checks if a property on a message is considered to be present.\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isSet = function isSet(obj, prop) {\n    var value = obj[prop];\n    if (value != null && Object.hasOwnProperty.call(obj, prop)) // eslint-disable-line eqeqeq\n        return typeof value !== \"object\" || (Array.isArray(value) ? value.length : Object.keys(value).length) > 0;\n    return false;\n};\n\n/**\n * Any compatible Buffer instance.\n * This is a minimal stand-alone definition of a Buffer instance. The actual type is that exported by node's typings.\n * @interface Buffer\n * @extends Uint8Array\n */\n\n/**\n * Node's Buffer class if available.\n * @type {Constructor<Buffer>}\n */\nutil.Buffer = (function() {\n    try {\n        var Buffer = util.global.Buffer;\n        // refuse to use non-node buffers if not explicitly assigned (perf reasons)\n        return Buffer.prototype.utf8Write || util.isNode ? Buffer : /* istanbul ignore next */ null;\n    } catch (e) {\n        /* istanbul ignore next */\n        return null;\n    }\n})();\n\n/**\n * Creates a new buffer of whatever type supported by the environment.\n * @param {number|number[]} [sizeOrArray=0] Buffer size or number array\n * @returns {Uint8Array|Buffer} Buffer\n */\nutil.newBuffer = function newBuffer(sizeOrArray) {\n    var Buffer = util.Buffer;\n    /* istanbul ignore next */\n    return typeof sizeOrArray === \"number\"\n        ? Buffer\n            ? Buffer.allocUnsafe(sizeOrArray)\n            : new Uint8Array(sizeOrArray)\n        : Buffer\n            ? Buffer.from(sizeOrArray)\n            : new Uint8Array(sizeOrArray);\n};\n\n/**\n * Prepends a raw field tag to raw field data.\n * @param {number} id Field id\n * @param {number} wireType Wire type\n * @param {Uint8Array} data Raw field data\n * @returns {Uint8Array|Buffer} Raw field bytes\n * @ignore\n */\nutil.rawField = function rawField(id, wireType, data) {\n    var out = [],\n        tag = id << 3 | wireType;\n    tag >>>= 0;\n    while (tag > 127) {\n        out.push(tag & 127 | 128);\n        tag >>>= 7;\n    }\n    out.push(tag);\n    for (var i = 0; i < data.length; ++i)\n        out.push(data[i]);\n    return util.newBuffer(out);\n};\n\n/**\n * Array implementation used in the browser.\n * @type {Constructor<Uint8Array>}\n * @deprecated Use `Uint8Array` instead.\n */\nutil.Array = Uint8Array;\n\n/**\n * Any compatible Long instance.\n * This is a minimal stand-alone definition of a Long instance. The actual type is that exported by long.js.\n * @interface Long\n * @property {number} low Low bits\n * @property {number} high High bits\n * @property {boolean} unsigned Whether unsigned or not\n */\n\n/**\n * Long.js's Long class if available.\n * @type {Constructor<Long>}\n */\nutil.Long = /* istanbul ignore next */ util.global.dcodeIO && /* istanbul ignore next */ util.global.dcodeIO.Long\n         || /* istanbul ignore next */ util.global.Long\n         || (function() {\n                try {\n                    var Long = require(\"long\");\n                    return Long && Long.isLong ? Long : null;\n                } catch (e) {\n                    /* istanbul ignore next */\n                    return null;\n                }\n            })();\n\n/**\n * Regular expression used to verify 2 bit (`bool`) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key2Re = /^(?:true|false|0|1)$/;\n\n/**\n * Regular expression used to verify 32 bit (`int32` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key32Re = /^-?(?:0|[1-9][0-9]*)$/;\n\n/**\n * Regular expression used to verify 64 bit (`int64` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key64Re = /^(?:[\\x00-\\xff]{8}|-?(?:0|[1-9][0-9]*))$/; // eslint-disable-line no-control-regex\n\n/**\n * Converts a number or long to an 8 characters long hash string.\n * @param {Long|number} value Value to convert\n * @returns {string} Hash\n */\nutil.longToHash = function longToHash(value) {\n    return value\n        ? util.LongBits.from(value).toHash()\n        : util.LongBits.zeroHash;\n};\n\n/**\n * Converts an 8 characters long hash string to a long or number.\n * @param {string} hash Hash\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long|number} Original value\n */\nutil.longFromHash = function longFromHash(hash, unsigned) {\n    var bits = util.LongBits.fromHash(hash);\n    if (util.Long)\n        return util.Long.fromBits(bits.lo, bits.hi, unsigned);\n    return bits.toNumber(Boolean(unsigned));\n};\n\n/**\n * Converts a 64 bit key to a long or number if it is an 8 characters long hash string.\n * @param {string} key Map key\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long|number|string} Original value\n */\nutil.longFromKey = function longFromKey(key, unsigned) {\n    return util.key64Re.test(key) && !util.key32Re.test(key)\n        ? util.longFromHash(key, unsigned)\n        : key;\n};\n\n/**\n * Converts a boolean key to a boolean value.\n * @param {string} key Map key\n * @returns {boolean} Boolean value\n */\nutil.boolFromKey = function boolFromKey(key) {\n    return key === \"true\" || key === \"1\";\n};\n\n/**\n * Merges the properties of the source object into the destination object.\n * @memberof util\n * @param {Object.<string,*>} dst Destination object\n * @param {...(Object.<string,*>|boolean)} src Source objects, optionally followed by an `ifNotSet` flag\n * @returns {Object.<string,*>} Destination object\n */\nfunction merge(dst) { // used by converters\n    var ifNotSet = typeof arguments[arguments.length - 1] === \"boolean\",\n        limit = ifNotSet ? arguments.length - 1 : arguments.length;\n    ifNotSet = ifNotSet && arguments[arguments.length - 1];\n    for (var a = 1; a < limit; ++a) {\n        var src = arguments[a];\n        if (!src)\n            continue;\n        for (var keys = Object.keys(src), i = 0; i < keys.length; ++i)\n            if (!isUnsafeProperty(keys[i]) && (!ifNotSet || !Object.prototype.hasOwnProperty.call(dst, keys[i]) || dst[keys[i]] === undefined))\n                dst[keys[i]] = src[keys[i]];\n    }\n    return dst;\n}\n\nutil.merge = merge;\n\n/**\n * Schema declaration nesting limit.\n * @memberof util\n * @type {number}\n */\nutil.nestingLimit = 32; // protoc: MaxMessageDeclarationNestingDepth\n\n/**\n * Recursion limit.\n * @memberof util\n * @type {number}\n */\nutil.recursionLimit = 100; // protoc: CodedInputStream::default_recursion_limit_\n\n/**\n * Makes a property safe for assignment as an own property.\n * @memberof util\n * @param {Object.<string,*>} obj Object\n * @param {string} key Property key\n * @param {boolean} [enumerable=true] Whether the property should be enumerable\n * @returns {undefined}\n */\nutil.makeProp = function makeProp(obj, key, enumerable) {\n    if (Object.prototype.hasOwnProperty.call(obj, key))\n        return;\n    Object.defineProperty(obj, key, {\n        enumerable: enumerable === undefined ? true : enumerable,\n        configurable: true,\n        writable: true\n    });\n};\n\n/**\n * Converts the first character of a string to lower case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.lcFirst = function lcFirst(str) {\n    return str.charAt(0).toLowerCase() + str.substring(1);\n};\n\n/**\n * Creates a custom error constructor.\n * @memberof util\n * @param {string} name Error name\n * @returns {Constructor<Error>} Custom error constructor\n */\nfunction newError(name) {\n\n    function CustomError(message, properties) {\n\n        if (!(this instanceof CustomError))\n            return new CustomError(message, properties);\n\n        // Error.call(this, message);\n        // ^ just returns a new error instance because the ctor can be called as a function\n\n        Object.defineProperty(this, \"message\", { get: function() { return message; } });\n\n        /* istanbul ignore next */\n        if (Error.captureStackTrace) // node\n            Error.captureStackTrace(this, CustomError);\n        else\n            Object.defineProperty(this, \"stack\", { value: new Error().stack || \"\" });\n\n        if (properties)\n            merge(this, properties);\n    }\n\n    CustomError.prototype = Object.create(Error.prototype, {\n        constructor: {\n            value: CustomError,\n            writable: true,\n            enumerable: false,\n            configurable: true,\n        },\n        name: {\n            get: function get() { return name; },\n            set: undefined,\n            enumerable: false,\n            // configurable: false would accurately preserve the behavior of\n            // the original, but I'm guessing that was not intentional.\n            // For an actual error subclass, this property would\n            // be configurable.\n            configurable: true,\n        },\n        toString: {\n            value: function value() { return this.name + \": \" + this.message; },\n            writable: true,\n            enumerable: false,\n            configurable: true,\n        },\n    });\n\n    return CustomError;\n}\n\nutil.newError = newError;\n\n/**\n * Constructs a new protocol error.\n * @classdesc Error subclass indicating a protocol specifc error.\n * @memberof util\n * @extends Error\n * @template T extends Message<T>\n * @constructor\n * @param {string} message Error message\n * @param {Object.<string,*>} [properties] Additional properties\n * @example\n * try {\n *     MyMessage.decode(someBuffer); // throws if required fields are missing\n * } catch (e) {\n *     if (e instanceof ProtocolError && e.instance)\n *         console.log(\"decoded so far: \" + JSON.stringify(e.instance));\n * }\n */\nutil.ProtocolError = newError(\"ProtocolError\");\n\n/**\n * So far decoded message instance.\n * @name util.ProtocolError#instance\n * @type {Message<T>}\n */\n\n/**\n * A OneOf getter as returned by {@link util.oneOfGetter}.\n * @typedef OneOfGetter\n * @type {function}\n * @returns {string|undefined} Set field name, if any\n */\n\n/**\n * Builds a getter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfGetter} Unbound getter\n */\nutil.oneOfGetter = function getOneOf(fieldNames) {\n    var fieldMap = {};\n    for (var i = 0; i < fieldNames.length; ++i)\n        fieldMap[fieldNames[i]] = 1;\n\n    /**\n     * @returns {string|undefined} Set field name, if any\n     * @this Object\n     * @ignore\n     */\n    return function() { // eslint-disable-line consistent-return\n        for (var keys = Object.keys(this), i = keys.length - 1; i > -1; --i)\n            if (fieldMap[keys[i]] === 1 && this[keys[i]] !== undefined && this[keys[i]] !== null)\n                return keys[i];\n    };\n};\n\n/**\n * A OneOf setter as returned by {@link util.oneOfSetter}.\n * @typedef OneOfSetter\n * @type {function}\n * @param {string|undefined} value Field name\n * @returns {undefined}\n */\n\n/**\n * Builds a setter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfSetter} Unbound setter\n */\nutil.oneOfSetter = function setOneOf(fieldNames) {\n\n    /**\n     * @param {string} name Field name\n     * @returns {undefined}\n     * @this Object\n     * @ignore\n     */\n    return function(name) {\n        for (var i = 0; i < fieldNames.length; ++i)\n            if (fieldNames[i] !== name)\n                delete this[fieldNames[i]];\n    };\n};\n\n/**\n * Default conversion options used for {@link Message#toJSON} implementations.\n *\n * These options are close to proto3's JSON mapping with the exception that internal types like Any are handled just like messages. More precisely:\n *\n * - Longs become strings\n * - Enums become string keys\n * - Bytes become base64 encoded strings\n * - (Sub-)Messages become plain objects\n * - Maps become plain objects with all string keys\n * - Repeated fields become arrays\n * - NaN and Infinity for float and double fields become strings\n *\n * @type {IConversionOptions}\n * @see https://developers.google.com/protocol-buffers/docs/proto3?hl=en#json\n */\nutil.toJSONOptions = {\n    longs: String,\n    enums: String,\n    bytes: String,\n    json: true\n};\n","\"use strict\";\nmodule.exports = Writer;\n\nvar util      = require(\"./util/minimal\");\n\nvar BufferWriter; // cyclic\n\nvar LongBits  = util.LongBits,\n    base64    = util.base64,\n    utf8      = util.utf8;\n\n/**\n * Constructs a new writer instance.\n * @classdesc Wire format writer using `Uint8Array`.\n * @constructor\n */\nfunction Writer() {\n\n    /**\n     * Write cursor into {@link Writer#buf}.\n     * @type {number}\n     */\n    this.pos = 0;\n\n    /**\n     * Backing buffer.\n     * @type {Uint8Array}\n     */\n    this.buf = this.constructor.alloc(Writer.initialBufferSize);\n\n    /**\n     * Cached DataView over {@link Writer#buf}.\n     * @type {DataView|null}\n     */\n    this.view = null;\n\n    /**\n     * Stack of forked length-prefix positions.\n     * @type {Array<number>|null}\n     */\n    this.states = null;\n}\n\n/**\n * Initial backing buffer size in bytes. Defaults to 128.\n * @type {number}\n */\nWriter.initialBufferSize = 128;\n\n/**\n * Current write position.\n * @name Writer#len\n * @type {number}\n * @deprecated Use {@link Writer#pos} instead.\n */\nObject.defineProperty(Writer.prototype, \"len\", {\n    configurable: true,\n    enumerable: true,\n    get: function get_len() {\n        return this.pos;\n    }\n});\n\nvar create = function create() {\n    return util.Buffer\n        ? function create_buffer_setup() {\n            return (Writer.create = function create_buffer() {\n                return new BufferWriter();\n            })();\n        }\n        /* istanbul ignore next */\n        : function create_array() {\n            return new Writer();\n        };\n};\n\n/**\n * Creates a new writer.\n * @function\n * @returns {BufferWriter|Writer} A {@link BufferWriter} when Buffers are supported, otherwise a {@link Writer}\n */\nWriter.create = create();\n\n/**\n * Allocates a buffer of the specified size.\n * @param {number} size Buffer size\n * @returns {Uint8Array} Buffer\n */\nWriter.alloc = function alloc(size) {\n    return new Uint8Array(size);\n};\n\n// Use Uint8Array buffer pool in the browser, just like node does with buffers\nWriter.alloc = util.pool(Writer.alloc, Uint8Array.prototype.subarray);\n\n/**\n * Calculates the number of bytes a value occupies as a varint.\n * @param {number} value Value to size (unsigned)\n * @returns {number} Byte length (1..5)\n * @ignore\n */\nfunction sizeVarint32(value) {\n    return value         < 128       ? 1\n         : value         < 16384     ? 2\n         : value         < 2097152   ? 3\n         : value         < 268435456 ? 4\n         :                             5;\n}\n\n/**\n * Ensures that at least `n` more bytes fit into the backing buffer, doubling it if not.\n * @param {number} n Number of additional bytes required\n * @returns {undefined}\n * @private\n */\nWriter.prototype._reserve = function _reserve(n) {\n    var need = this.pos + n;\n    if (need > this.buf.length) {\n        var size = this.buf.length << 1;\n        if (size < need)\n            size = need;\n        var buf = this.constructor.alloc(size);\n        buf.set(this.buf.subarray(0, this.pos), 0);\n        this.buf = buf;\n        this.view = null; // invalidate\n    }\n};\n\nfunction writeStringAscii(val, buf, pos) {\n    for (var i = 0; i < val.length;)\n        buf[pos++] = val.charCodeAt(i++);\n}\n\nfunction writeVarint32(val, buf, pos) {\n    while (val > 127) {\n        buf[pos++] = val & 127 | 128;\n        val >>>= 7;\n    }\n    buf[pos] = val;\n    return pos + 1;\n}\n\n/**\n * Writes an unsigned 32 bit value as a varint.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.uint32 = function write_uint32(value) {\n    value = value >>> 0;\n    this._reserve(5);\n    var pos = this.pos;\n    this.pos = writeVarint32(value, this.buf, pos);\n    return this;\n};\n\n/**\n * Writes a signed 32 bit value as a varint.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.int32 = function write_int32(value) {\n    if ((value |= 0) < 0) { // 10 bytes per spec\n        this._reserve(10);\n        writeVarint64(LongBits.fromNumber(value), this.buf, this.pos);\n        this.pos += 10;\n        return this;\n    }\n    return this.uint32(value);\n};\n\n/**\n * Writes a 32 bit value as a varint, zig-zag encoded.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sint32 = function write_sint32(value) {\n    return this.uint32((value << 1 ^ value >> 31) >>> 0);\n};\n\nfunction writeVarint64(val, buf, pos) {\n    var lo = val.lo,\n        hi = val.hi;\n    while (hi) {\n        buf[pos++] = lo & 127 | 128;\n        lo = (lo >>> 7 | hi << 25) >>> 0;\n        hi >>>= 7;\n    }\n    while (lo > 127) {\n        buf[pos++] = lo & 127 | 128;\n        lo = lo >>> 7;\n    }\n    buf[pos] = lo;\n    return pos + 1;\n}\n\n/**\n * Writes an unsigned 64 bit value as a varint.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.uint64 = function write_uint64(value) {\n    var bits = LongBits.from(value);\n    this._reserve(10);\n    var pos = this.pos;\n    this.pos = writeVarint64(bits, this.buf, pos);\n    return this;\n};\n\n/**\n * Writes a signed 64 bit value as a varint.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.int64 = Writer.prototype.uint64;\n\n/**\n * Writes a signed 64 bit value as a varint, zig-zag encoded.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sint64 = function write_sint64(value) {\n    var bits = LongBits.from(value).zzEncode();\n    this._reserve(10);\n    var pos = this.pos;\n    this.pos = writeVarint64(bits, this.buf, pos);\n    return this;\n};\n\n/**\n * Writes a boolish value as a varint.\n * @param {boolean} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bool = function write_bool(value) {\n    this._reserve(1);\n    this.buf[this.pos++] = value ? 1 : 0;\n    return this;\n};\n\nfunction writeFixed32(val, buf, pos) {\n    buf[pos    ] =  val         & 255;\n    buf[pos + 1] =  val >>> 8   & 255;\n    buf[pos + 2] =  val >>> 16  & 255;\n    buf[pos + 3] =  val >>> 24;\n}\n\n/**\n * Writes an unsigned 32 bit value as fixed 32 bits.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.fixed32 = function write_fixed32(value) {\n    this._reserve(4);\n    writeFixed32(value >>> 0, this.buf, this.pos);\n    this.pos += 4;\n    return this;\n};\n\n/**\n * Writes a signed 32 bit value as fixed 32 bits.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sfixed32 = Writer.prototype.fixed32;\n\n/**\n * Writes an unsigned 64 bit value as fixed 64 bits.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.fixed64 = function write_fixed64(value) {\n    var bits = LongBits.from(value);\n    this._reserve(8);\n    writeFixed32(bits.lo, this.buf, this.pos);\n    writeFixed32(bits.hi, this.buf, this.pos + 4);\n    this.pos += 8;\n    return this;\n};\n\n/**\n * Writes a signed 64 bit value as fixed 64 bits.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sfixed64 = Writer.prototype.fixed64;\n\n/**\n * Writes a float (32 bit).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.float = function write_float(value) {\n    this._reserve(4);\n    util.float.writeFloatLE(value, this.buf, this.pos);\n    this.pos += 4;\n    return this;\n};\n\n/**\n * Writes a double (64 bit float).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.double = function write_double(value) {\n    this._reserve(8);\n    util.float.writeDoubleLE(value, this.buf, this.pos);\n    this.pos += 8;\n    return this;\n};\n\n/**\n * Writes a sequence of bytes.\n * @param {Uint8Array|string} value Buffer or base64 encoded string to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bytes = function write_bytes(value) {\n    var len = value.length >>> 0;\n    if (!len) {\n        this._reserve(1);\n        this.buf[this.pos++] = 0;\n        return this;\n    }\n    if (util.isString(value)) {\n        var buf = Writer.alloc(len = base64.length(value));\n        base64.decode(value, buf, 0);\n        value = buf;\n    }\n    this.uint32(len);\n    this._reserve(len);\n    this.buf.set(value, this.pos);\n    this.pos += len;\n    return this;\n};\n\n/**\n * Writes raw bytes without a tag or length prefix.\n * @param {Uint8Array} value Raw bytes\n * @returns {Writer} `this`\n */\nWriter.prototype.raw = function write_raw(value) {\n    var len = value.length >>> 0;\n    if (!len)\n        return this;\n    this._reserve(len);\n    this.buf.set(value, this.pos);\n    this.pos += len;\n    return this;\n};\n\n/**\n * Backfills the length varint.\n * @param {number} pos Position of reserved length byte\n * @param {number} len Length of content after length varint\n * @returns {Writer} `this`\n * @private\n */\nWriter.prototype._delim = function _delim(pos, len) {\n    var n = sizeVarint32(len);\n    if (n > 1)\n        this.buf.copyWithin(pos + n, pos + 1, pos + 1 + len);\n    writeVarint32(len, this.buf, pos);\n    this.pos = pos + n + len;\n    return this;\n};\n\n/**\n * Writes a string.\n * @param {string} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.string = function write_string(value) {\n    var n = value.length;\n    if (!n) {\n        this._reserve(1);\n        this.buf[this.pos++] = 0;\n        return this;\n    }\n    if (n < 0x80) {\n        this._reserve(n * 3 + 5); // worst case\n        var lenPos = this.pos;\n        return this._delim(lenPos, utf8.write(value, this.buf, lenPos + 1));\n    }\n    var len = utf8.length(value);\n    this.uint32(len);\n    this._reserve(len);\n    if (len === value.length)\n        writeStringAscii(value, this.buf, this.pos);\n    else\n        utf8.write(value, this.buf, this.pos);\n    this.pos += len;\n    return this;\n};\n\n/**\n * Writes an array of unsigned 32 bit values as a packed repeated field.\n * @param {number[]} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.uint32s = function write_uint32s(value) {\n    var n = value.length;\n    this._reserve(n * 5 + 5); // worst case: 5 bytes per value + length varint\n    var buf = this.buf, lenPos = this.pos, p = lenPos + 1;\n    for (var i = 0; i < n; ++i)\n        p = writeVarint32(value[i] >>> 0, buf, p);\n    return this._delim(lenPos, p - lenPos - 1);\n};\n\n/**\n * Writes an array of signed 32 bit values as a packed repeated field.\n * @param {number[]} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.int32s = function write_int32s(value) {\n    var n = value.length;\n    this._reserve(n * 10 + 5); // worst case: 10 bytes per negative value + length varint\n    var buf = this.buf, lenPos = this.pos, pos = lenPos + 1, val;\n    for (var i = 0; i < n; ++i) {\n        if ((val = value[i] | 0) < 0) { // negatives are 10 bytes per spec\n            pos = writeVarint64(LongBits.fromNumber(val), buf, pos);\n        } else {\n            pos = writeVarint32(val, buf, pos);\n        }\n    }\n    return this._delim(lenPos, pos - lenPos - 1);\n};\n\n/**\n * Writes an array of 32 bit values as packed, zig-zag encoded varints.\n * @param {number[]} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sint32s = function write_sint32s(value) {\n    var n = value.length;\n    this._reserve(n * 5 + 5);\n    var buf = this.buf, lenPos = this.pos, pos = lenPos + 1;\n    for (var i = 0; i < n; ++i)\n        pos = writeVarint32((value[i] << 1 ^ value[i] >> 31) >>> 0, buf, pos);\n    return this._delim(lenPos, pos - lenPos - 1);\n};\n\n/**\n * Writes an array of unsigned 64 bit values as a packed repeated field.\n * @param {Array.<Long|number|string>} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.uint64s = function write_uint64s(value) {\n    var n = value.length;\n    this._reserve(n * 10 + 5);\n    var buf = this.buf, lenPos = this.pos, pos = lenPos + 1;\n    for (var i = 0; i < n; ++i) {\n        pos = writeVarint64(LongBits.from(value[i]), buf, pos);\n    }\n    return this._delim(lenPos, pos - lenPos - 1);\n};\n\n/**\n * Writes an array of signed 64 bit values as a packed repeated field.\n * @function\n * @param {Array.<Long|number|string>} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.int64s = Writer.prototype.uint64s;\n\n/**\n * Writes an array of 64 bit values as packed, zig-zag encoded varints.\n * @param {Array.<Long|number|string>} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sint64s = function write_sint64s(value) {\n    var n = value.length;\n    this._reserve(n * 10 + 5);\n    var buf = this.buf, lenPos = this.pos, pos = lenPos + 1;\n    for (var i = 0; i < n; ++i) {\n        pos = writeVarint64(LongBits.from(value[i]).zzEncode(), buf, pos);\n    }\n    return this._delim(lenPos, pos - lenPos - 1);\n};\n\n/**\n * Writes an array of boolish values as a packed repeated field.\n * @param {boolean[]} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bools = function write_bools(value) {\n    var n = value.length;\n    this.uint32(n); // one byte per value\n    this._reserve(n);\n    var buf = this.buf, p = this.pos;\n    for (var i = 0; i < n; ++i)\n        buf[p++] = value[i] ? 1 : 0;\n    this.pos += n;\n    return this;\n};\n\n// The view allocation only pays off when amortized over enough writes\nvar VIEW_THRESHOLD_FLOAT = 16,\n    VIEW_THRESHOLD_INT   = 128;\n\nfunction getLazyView(writer, count, threshold) {\n    var view = writer.view;\n    if (view || count < threshold)\n        return view;\n    var buf = writer.buf;\n    return writer.view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);\n}\n\n/**\n * Writes an array of unsigned 32 bit values as packed, fixed 32 bits.\n * @param {number[]} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.fixed32s = function write_fixed32s(value) {\n    var n = value.length, bytes = n * 4;\n    this.uint32(bytes); // length is known exactly\n    this._reserve(bytes);\n    var p = this.pos, i, dv = getLazyView(this, n, VIEW_THRESHOLD_INT);\n    if (dv)\n        for (i = 0; i < n; ++i) { dv.setUint32(p, value[i] >>> 0, true); p += 4; }\n    else {\n        var buf = this.buf;\n        for (i = 0; i < n; ++i) { writeFixed32(value[i] >>> 0, buf, p); p += 4; }\n    }\n    this.pos += bytes;\n    return this;\n};\n\n/**\n * Writes an array of signed 32 bit values as packed, fixed 32 bits.\n * @function\n * @param {number[]} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sfixed32s = Writer.prototype.fixed32s;\n\n/**\n * Writes an array of unsigned 64 bit values as packed, fixed 64 bits.\n * @param {Array.<Long|number|string>} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.fixed64s = function write_fixed64s(value) {\n    var n = value.length, bytes = n * 8;\n    this.uint32(bytes);\n    this._reserve(bytes);\n    var p = this.pos, i, bits, dv = getLazyView(this, n, VIEW_THRESHOLD_INT);\n    if (dv)\n        for (i = 0; i < n; ++i) { bits = LongBits.from(value[i]); dv.setUint32(p, bits.lo, true); dv.setUint32(p + 4, bits.hi, true); p += 8; }\n    else {\n        var buf = this.buf;\n        for (i = 0; i < n; ++i) { bits = LongBits.from(value[i]); writeFixed32(bits.lo, buf, p); writeFixed32(bits.hi, buf, p + 4); p += 8; }\n    }\n    this.pos += bytes;\n    return this;\n};\n\n/**\n * Writes an array of signed 64 bit values as packed, fixed 64 bits.\n * @function\n * @param {Array.<Long|number|string>} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sfixed64s = Writer.prototype.fixed64s;\n\n/**\n * Writes an array of floats (32 bit) as a packed repeated field.\n * @param {number[]} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.floats = function write_floats(value) {\n    var n = value.length, bytes = n * 4;\n    this.uint32(bytes);\n    this._reserve(bytes);\n    var p = this.pos, i, dv = getLazyView(this, n, VIEW_THRESHOLD_FLOAT);\n    if (dv)\n        for (i = 0; i < n; ++i) { dv.setFloat32(p, value[i], true); p += 4; }\n    else {\n        var buf = this.buf;\n        for (i = 0; i < n; ++i) { util.float.writeFloatLE(value[i], buf, p); p += 4; }\n    }\n    this.pos += bytes;\n    return this;\n};\n\n/**\n * Writes an array of doubles (64 bit float) as a packed repeated field.\n * @param {number[]} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.doubles = function write_doubles(value) {\n    var n = value.length, bytes = n * 8;\n    this.uint32(bytes);\n    this._reserve(bytes);\n    var p = this.pos, i, dv = getLazyView(this, n, VIEW_THRESHOLD_FLOAT);\n    if (dv)\n        for (i = 0; i < n; ++i) { dv.setFloat64(p, value[i], true); p += 8; }\n    else {\n        var buf = this.buf;\n        for (i = 0; i < n; ++i) { util.float.writeDoubleLE(value[i], buf, p); p += 8; }\n    }\n    this.pos += bytes;\n    return this;\n};\n\n/**\n * Forks this writer's state by pushing it to a stack.\n * @returns {Writer} `this`\n */\nWriter.prototype.fork = function fork() {\n    this._reserve(1);\n    (this.states || (this.states = [])).push(this.pos);\n    this.pos += 1;\n    return this;\n};\n\n/**\n * Resets this instance to the last state.\n * @returns {Writer} `this`\n */\nWriter.prototype.reset = function reset() {\n    var states = this.states;\n    if (states && states.length) {\n        this.pos = states.pop();\n    } else {\n        this.pos = 0;\n    }\n    return this;\n};\n\n/**\n * Resets to the last state and prepends the fork state's current write length as a varint.\n * @returns {Writer} `this`\n */\nWriter.prototype.ldelim = function ldelim() {\n    var states = this.states,\n        len,\n        vlen;\n    if (states && states.length) {\n        var lenPos = states.pop();\n        len = this.pos - lenPos - 1;\n        vlen = sizeVarint32(len);\n        if (vlen > 1) { // grow the reserved single byte and shift content forward\n            this._reserve(vlen - 1);\n            this.buf.copyWithin(lenPos + vlen, lenPos + 1, lenPos + 1 + len);\n            this.pos += vlen - 1;\n            writeVarint32(len, this.buf, lenPos);\n        } else {\n            this.buf[lenPos] = len;\n        }\n    } else { // not forked: prefix the entire buffer with its length\n        // TODO: Compatibility with older generated code.\n        // Remove this branch in the next major release.\n        len = this.pos;\n        vlen = sizeVarint32(len);\n        this._reserve(vlen);\n        this.buf.copyWithin(vlen, 0, len);\n        writeVarint32(len, this.buf, 0);\n        this.pos += vlen;\n    }\n    return this;\n};\n\n/**\n * Finishes the write operation.\n * Returns a buffer sized to the written data by default.\n * @param {boolean} [shared=false] Whether to return a shared view instead of a unique copy\n * @returns {Uint8Array} Finished buffer\n */\nWriter.prototype.finish = function finish(shared) {\n    if (shared)\n        return this.buf.subarray(0, this.pos);\n    var buf = this.constructor.alloc(this.pos);\n    buf.set(this.buf.subarray(0, this.pos), 0);\n    return buf;\n};\n\n/**\n * Finishes the write operation, writing into the provided buffer.\n * The caller must ensure that `buf` has enough space starting at `offset`\n * to hold {@link Writer#pos} bytes.\n * @param {T} buf Target buffer\n * @param {number} [offset=0] Offset to start writing at\n * @returns {T} The provided buffer\n * @template T extends Uint8Array\n */\nWriter.prototype.finishInto = function finishInto(buf, offset) {\n    if (offset === undefined)\n        offset = 0;\n    buf.set(this.buf.subarray(0, this.pos), offset);\n    return buf;\n};\n\nWriter._configure = function(BufferWriter_) {\n    BufferWriter = BufferWriter_;\n    Writer.create = create();\n    BufferWriter._configure();\n};\n","\"use strict\";\nmodule.exports = BufferWriter;\n\n// extends Writer\nvar Writer = require(\"./writer\");\nBufferWriter.prototype = Object.create(Writer.prototype, {\n    constructor: {\n        value: BufferWriter,\n        writable: true,\n        enumerable: false,\n        configurable: true\n    }\n});\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer writer instance.\n * @classdesc Wire format writer using node buffers.\n * @extends Writer\n * @constructor\n */\nfunction BufferWriter() {\n    Writer.call(this);\n}\n\nvar writeStringBuffer;\n\nBufferWriter._configure = function () {\n    /**\n     * Allocates a buffer of the specified size.\n     * @function\n     * @param {number} size Buffer size\n     * @returns {Buffer} Buffer\n     */\n    BufferWriter.alloc = util.Buffer && util.Buffer.allocUnsafe;\n\n    writeStringBuffer = util.Buffer && util.Buffer.prototype.utf8Write\n        ? function writeStringBuffer_utf8Write(val, buf, pos) {\n            return buf.utf8Write(val, pos);\n        }\n        : function writeStringBuffer_write(val, buf, pos) {\n            return buf.write(val, pos);\n        };\n};\n\n\n/**\n * @override\n */\nBufferWriter.prototype.bytes = function write_bytes_buffer(value) {\n    if (util.isString(value))\n        value = util.Buffer.from(value, \"base64\");\n    var len = value.length >>> 0;\n    this.uint32(len);\n    if (len) {\n        this._reserve(len);\n        this.buf.set(value, this.pos);\n        this.pos += len;\n    }\n    return this;\n};\n\n/**\n * @override\n */\nBufferWriter.prototype.string = function write_string_buffer(value) {\n    var n = value.length;\n    if (!n) {\n        this._reserve(1);\n        this.buf[this.pos++] = 0;\n        return this;\n    }\n    if (n < 0x80) {\n        this._reserve(n * 3 + 5); // worst case\n        var pos = this.pos,\n            buf = this.buf;\n        return this._delim(pos,\n            n < 40\n                ? util.utf8.write(value, buf, pos + 1)\n                : writeStringBuffer(value, buf, pos + 1)\n        );\n    }\n    var len = util.Buffer.byteLength(value);\n    this.uint32(len);\n    this._reserve(len);\n    writeStringBuffer(value, this.buf, this.pos);\n    this.pos += len;\n    return this;\n};\n\n\n/**\n * Finishes the write operation.\n * @name BufferWriter#finish\n * @function\n * @returns {Buffer} Finished buffer\n */\n\nBufferWriter._configure();\n","\"use strict\";\nmodule.exports = Reader;\n\nvar util      = require(\"./util/minimal\");\n\nvar BufferReader; // cyclic\n\nvar LongBits  = util.LongBits,\n    utf8      = util.utf8;\n\n/* istanbul ignore next */\nfunction indexOutOfRange(reader, writeLength) {\n    return RangeError(\"index out of range: \" + reader.pos + \" + \" + (writeLength || 1) + \" > \" + reader.len);\n}\n\n/**\n * Constructs a new reader instance using the specified buffer.\n * @classdesc Wire format reader using `Uint8Array`.\n * @constructor\n * @param {Uint8Array} buffer Buffer to read from\n */\nfunction Reader(buffer) {\n\n    /**\n     * Read buffer.\n     * @type {Uint8Array}\n     */\n    this.buf = buffer;\n\n    /**\n     * Read buffer position.\n     * @type {number}\n     */\n    this.pos = 0;\n\n    /**\n     * Read buffer length.\n     * @type {number}\n     */\n    this.len = buffer.length;\n\n    /**\n     * Cached DataView for packed reads.\n     * @type {DataView|null}\n     */\n    this.view = null;\n\n    /**\n     * Whether to discard unknown fields while decoding.\n     * @type {boolean}\n     */\n    this.discardUnknown = Reader.discardUnknown;\n}\n\nfunction create_array(buffer) {\n    // TODO: Remove plain array reader support in the next major release.\n    if (Array.isArray(buffer))\n        buffer = new Uint8Array(buffer);\n    if (buffer instanceof Uint8Array)\n        return new Reader(buffer);\n    throw Error(\"illegal buffer\");\n}\n\nvar create = function create() {\n    return util.Buffer\n        ? function create_buffer_setup(buffer) {\n            return (Reader.create = function create_buffer(buffer) {\n                return util.Buffer.isBuffer(buffer)\n                    ? new BufferReader(buffer)\n                    /* istanbul ignore next */\n                    : create_array(buffer);\n            })(buffer);\n        }\n        /* istanbul ignore next */\n        : create_array;\n};\n\n/**\n * Creates a new reader using the specified buffer.\n * @function\n * @param {Uint8Array|Buffer} buffer Buffer to read from\n * @returns {Reader|BufferReader} A {@link BufferReader} if `buffer` is a Buffer, otherwise a {@link Reader}\n * @throws {Error} If `buffer` is not a valid buffer\n */\nReader.create = create();\n\n/**\n * Returns raw bytes from the backing buffer without advancing the reader.\n * @param {number} start Start offset\n * @param {number} end End offset\n * @returns {Uint8Array} Raw bytes\n */\nReader.prototype.raw = function read_raw(start, end) {\n    return this.buf.subarray(start, end);\n};\n\n/**\n * Reads a varint as an unsigned 32 bit value.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.uint32 = function read_uint32() {\n    var buf = this.buf,\n        pos = this.pos,\n        value = (buf[pos] & 127) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n    value = (value | (buf[pos] & 127) << 7) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n    value = (value | (buf[pos] & 127) << 14) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n    value = (value | (buf[pos] & 127) << 21) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n    value = (value | (buf[pos] & 15) << 28) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n\n    for (var i = 0; i < 5; ++i) {\n        /* istanbul ignore if */\n        if (pos >= this.len) {\n            this.pos = pos;\n            throw indexOutOfRange(this);\n        }\n        if (buf[pos++] < 128) {\n            this.pos = pos;\n            return value;\n        }\n    }\n    /* istanbul ignore next */\n    this.pos = pos;\n    throw Error(\"invalid varint encoding\");\n};\n\n/**\n * Reads a field tag.\n * @function\n * @returns {number} Tag read\n */\nReader.prototype.tag = function read_tag() {\n    var buf = this.buf,\n        pos = this.pos,\n        value = (buf[pos] & 127) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n    value = (value | (buf[pos] & 127) << 7) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n    value = (value | (buf[pos] & 127) << 14) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n    value = (value | (buf[pos] & 127) << 21) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n    value = (value | (buf[pos] & 15) << 28) >>> 0;\n    if (buf[pos] < 128 && (buf[pos] & 112) === 0) {\n        this.pos = pos + 1;\n        return value;\n    }\n\n    this.pos = pos + 1;\n    throw Error(\"invalid tag encoding\");\n};\n\n/**\n * Reads a varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.int32 = function read_int32() {\n    return this.uint32() | 0;\n};\n\n/**\n * Reads a zig-zag encoded varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.sint32 = function read_sint32() {\n    var value = this.uint32();\n    return value >>> 1 ^ -(value & 1) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readLongVarint() {\n    // tends to deopt with local vars for octet etc.\n    var bits = new LongBits(0, 0);\n    var i = 0;\n    if (this.len - this.pos > 4) { // fast route (lo)\n        for (; i < 4; ++i) {\n            // 1st..4th\n            bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n            if (this.buf[this.pos++] < 128)\n                return bits;\n        }\n        // 5th\n        bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0;\n        bits.hi = (bits.hi | (this.buf[this.pos] & 127) >>  4) >>> 0;\n        if (this.buf[this.pos++] < 128)\n            return bits;\n        i = 0;\n    } else {\n        for (; i < 4; ++i) {\n            /* istanbul ignore if */\n            if (this.pos >= this.len)\n                throw indexOutOfRange(this);\n            // 1st..4th\n            bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n            if (this.buf[this.pos++] < 128)\n                return bits;\n        }\n        throw indexOutOfRange(this);\n    }\n    if (this.len - this.pos > 4) { // fast route (hi)\n        for (; i < 5; ++i) {\n            // 6th..10th\n            bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n            if (this.buf[this.pos++] < 128)\n                return bits;\n        }\n    } else {\n        for (; i < 5; ++i) {\n            /* istanbul ignore if */\n            if (this.pos >= this.len)\n                throw indexOutOfRange(this);\n            // 6th..10th\n            bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n            if (this.buf[this.pos++] < 128)\n                return bits;\n        }\n    }\n    /* istanbul ignore next */\n    throw Error(\"invalid varint encoding\");\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads a varint as a signed 64 bit value.\n * @name Reader#int64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as an unsigned 64 bit value.\n * @name Reader#uint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a zig-zag encoded varint as a signed 64 bit value.\n * @name Reader#sint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as a boolean.\n * @returns {boolean} Value read\n */\nReader.prototype.bool = function read_bool() {\n    var value = false,\n        b;\n    for (var i = 0; i < 10; ++i) {\n        /* istanbul ignore if */\n        if (this.pos >= this.len)\n            throw indexOutOfRange(this);\n        b = this.buf[this.pos++];\n        if (b & 127)\n            value = true;\n        if (b < 128)\n            return value;\n    }\n    /* istanbul ignore next */\n    throw Error(\"invalid varint encoding\");\n};\n\nfunction readFixed32_end(buf, end) { // note that this uses `end`, not `pos`\n    return (buf[end - 4]\n          | buf[end - 3] << 8\n          | buf[end - 2] << 16\n          | buf[end - 1] << 24) >>> 0;\n}\n\n/**\n * Reads fixed 32 bits as an unsigned 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.fixed32 = function read_fixed32() {\n\n    /* istanbul ignore if */\n    if (this.pos + 4 > this.len)\n        throw indexOutOfRange(this, 4);\n\n    return readFixed32_end(this.buf, this.pos += 4);\n};\n\n/**\n * Reads fixed 32 bits as a signed 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.sfixed32 = function read_sfixed32() {\n\n    /* istanbul ignore if */\n    if (this.pos + 4 > this.len)\n        throw indexOutOfRange(this, 4);\n\n    return readFixed32_end(this.buf, this.pos += 4) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readFixed64(/* this: Reader */) {\n\n    /* istanbul ignore if */\n    if (this.pos + 8 > this.len)\n        throw indexOutOfRange(this, 8);\n\n    return new LongBits(readFixed32_end(this.buf, this.pos += 4), readFixed32_end(this.buf, this.pos += 4));\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads fixed 64 bits.\n * @name Reader#fixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads zig-zag encoded fixed 64 bits.\n * @name Reader#sfixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a float (32 bit) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.float = function read_float() {\n\n    /* istanbul ignore if */\n    if (this.pos + 4 > this.len)\n        throw indexOutOfRange(this, 4);\n\n    var value = util.float.readFloatLE(this.buf, this.pos);\n    this.pos += 4;\n    return value;\n};\n\n/**\n * Reads a double (64 bit float) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.double = function read_double() {\n\n    /* istanbul ignore if */\n    if (this.pos + 8 > this.len)\n        throw indexOutOfRange(this, 4);\n\n    var value = util.float.readDoubleLE(this.buf, this.pos);\n    this.pos += 8;\n    return value;\n};\n\n/**\n * Reads a packed repeated field of unsigned 32 bit varints.\n * @param {number[]} [array] Array to read into; a new one is created if omitted\n * @returns {number[]} Array read into\n */\nReader.prototype.uint32s = function read_uint32s(array) {\n    if (array === undefined) array = [];\n    var end = this.uint32() + this.pos, buf = this.buf, pos = this.pos, value;\n    while (pos < end) {\n        value = buf[pos++];\n        if (value < 128)\n            array.push(value);\n        else {\n            this.pos = pos - 1;\n            array.push(this.uint32());\n            pos = this.pos;\n        }\n    }\n    this.pos = pos;\n    return array;\n};\n\n/**\n * Reads a packed repeated field of signed 32 bit varints.\n * @param {number[]} [array] Array to read into; a new one is created if omitted\n * @returns {number[]} Array read into\n */\nReader.prototype.int32s = function read_int32s(array) {\n    if (array === undefined) array = [];\n    var end = this.uint32() + this.pos, buf = this.buf, pos = this.pos, value;\n    while (pos < end) {\n        value = buf[pos++];\n        if (value < 128)\n            array.push(value);\n        else {\n            this.pos = pos - 1;\n            array.push(this.int32());\n            pos = this.pos;\n        }\n    }\n    this.pos = pos;\n    return array;\n};\n\n/**\n * Reads a packed repeated field of zig-zag encoded signed 32 bit varints.\n * @param {number[]} [array] Array to read into; a new one is created if omitted\n * @returns {number[]} Array read into\n */\nReader.prototype.sint32s = function read_sint32s(array) {\n    if (array === undefined) array = [];\n    var end = this.uint32() + this.pos;\n    while (this.pos < end)\n        array.push(this.sint32());\n    return array;\n};\n\n/**\n * Reads a packed repeated field of booleans.\n * @param {boolean[]} [array] Array to read into; a new one is created if omitted\n * @returns {boolean[]} Array read into\n */\nReader.prototype.bools = function read_bools(array) {\n    if (array === undefined) array = [];\n    var end = this.uint32() + this.pos, buf = this.buf, pos = this.pos, value;\n    while (pos < end) {\n        value = buf[pos++];\n        if (value < 128)\n            array.push(value !== 0);\n        else {\n            this.pos = pos - 1;\n            array.push(this.bool());\n            pos = this.pos;\n        }\n    }\n    this.pos = pos;\n    return array;\n};\n\n// The view allocation only pays off when amortized over enough reads\nvar VIEW_THRESHOLD_FLOAT = 8,\n    VIEW_THRESHOLD_INT   = 128;\n\nfunction getLazyView(reader, count, threshold) {\n    var view = reader.view;\n    if (view || count < threshold)\n        return view;\n    var buf = reader.buf;\n    return reader.view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);\n}\n\n/**\n * Reads a packed repeated field of unsigned 32 bit fixed values.\n * @param {number[]} [array] Array to read into; a new one is created if omitted\n * @returns {number[]} Array read into\n */\nReader.prototype.fixed32s = function read_fixed32s(array) {\n    if (array === undefined) array = [];\n    var len = this.uint32(), end = this.pos + len;\n    /* istanbul ignore if */\n    if (end > this.len) throw indexOutOfRange(this, len);\n    var count = len >>> 2, i = array.length, pos = this.pos;\n    array.length = i + count;\n    var dv = getLazyView(this, count, VIEW_THRESHOLD_INT);\n    if (dv)\n        for (var k = 0; k < count; ++k, pos += 4) array[i++] = dv.getUint32(pos, true);\n    else {\n        var buf = this.buf;\n        for (var j = 0; j < count; ++j, pos += 4) array[i++] = readFixed32_end(buf, pos + 4);\n    }\n    this.pos = pos;\n    if (pos !== end) throw indexOutOfRange(this, 4);\n    return array;\n};\n\n/**\n * Reads a packed repeated field of signed 32 bit fixed values.\n * @param {number[]} [array] Array to read into; a new one is created if omitted\n * @returns {number[]} Array read into\n */\nReader.prototype.sfixed32s = function read_sfixed32s(array) {\n    if (array === undefined) array = [];\n    var len = this.uint32(), end = this.pos + len;\n    /* istanbul ignore if */\n    if (end > this.len) throw indexOutOfRange(this, len);\n    var count = len >>> 2, i = array.length, pos = this.pos;\n    array.length = i + count;\n    var dv = getLazyView(this, count, VIEW_THRESHOLD_INT);\n    if (dv)\n        for (var k = 0; k < count; ++k, pos += 4) array[i++] = dv.getInt32(pos, true);\n    else {\n        var buf = this.buf;\n        for (var j = 0; j < count; ++j, pos += 4) array[i++] = readFixed32_end(buf, pos + 4) | 0;\n    }\n    this.pos = pos;\n    if (pos !== end) throw indexOutOfRange(this, 4);\n    return array;\n};\n\n/**\n * Reads a packed repeated field of floats (32 bit).\n * @param {number[]} [array] Array to read into; a new one is created if omitted\n * @returns {number[]} Array read into\n */\nReader.prototype.floats = function read_floats(array) {\n    if (array === undefined) array = [];\n    var len = this.uint32(), end = this.pos + len;\n    /* istanbul ignore if */\n    if (end > this.len) throw indexOutOfRange(this, len);\n    var count = len >>> 2, i = array.length, pos = this.pos;\n    array.length = i + count;\n    var dv = getLazyView(this, count, VIEW_THRESHOLD_FLOAT);\n    if (dv)\n        for (var k = 0; k < count; ++k, pos += 4) array[i++] = dv.getFloat32(pos, true);\n    else {\n        var buf = this.buf;\n        for (var j = 0; j < count; ++j, pos += 4) array[i++] = util.float.readFloatLE(buf, pos);\n    }\n    this.pos = pos;\n    if (pos !== end) throw indexOutOfRange(this, 4);\n    return array;\n};\n\n/**\n * Reads a packed repeated field of doubles (64 bit float).\n * @param {number[]} [array] Array to read into; a new one is created if omitted\n * @returns {number[]} Array read into\n */\nReader.prototype.doubles = function read_doubles(array) {\n    if (array === undefined) array = [];\n    var len = this.uint32(), end = this.pos + len;\n    /* istanbul ignore if */\n    if (end > this.len) throw indexOutOfRange(this, len);\n    var count = len >>> 3, i = array.length, pos = this.pos;\n    array.length = i + count;\n    var dv = getLazyView(this, count, VIEW_THRESHOLD_FLOAT);\n    if (dv)\n        for (var k = 0; k < count; ++k, pos += 8) array[i++] = dv.getFloat64(pos, true);\n    else {\n        var buf = this.buf;\n        for (var j = 0; j < count; ++j, pos += 8) array[i++] = util.float.readDoubleLE(buf, pos);\n    }\n    this.pos = pos;\n    if (pos !== end) throw indexOutOfRange(this, 8);\n    return array;\n};\n\n/**\n * Reads a packed repeated field of unsigned 64 bit varints.\n * @param {Array.<Long|number>} [array] Array to read into; a new one is created if omitted\n * @returns {Array.<Long|number>} Array read into\n */\nReader.prototype.uint64s = function read_uint64s(array) {\n    if (array === undefined) array = [];\n    var end = this.uint32() + this.pos;\n    while (this.pos < end)\n        array.push(this.uint64());\n    return array;\n};\n\n/**\n * Reads a packed repeated field of signed 64 bit varints.\n * @param {Array.<Long|number>} [array] Array to read into; a new one is created if omitted\n * @returns {Array.<Long|number>} Array read into\n */\nReader.prototype.int64s = function read_int64s(array) {\n    if (array === undefined) array = [];\n    var end = this.uint32() + this.pos;\n    while (this.pos < end)\n        array.push(this.int64());\n    return array;\n};\n\n/**\n * Reads a packed repeated field of zig-zag encoded signed 64 bit varints.\n * @param {Array.<Long|number>} [array] Array to read into; a new one is created if omitted\n * @returns {Array.<Long|number>} Array read into\n */\nReader.prototype.sint64s = function read_sint64s(array) {\n    if (array === undefined) array = [];\n    var end = this.uint32() + this.pos;\n    while (this.pos < end)\n        array.push(this.sint64());\n    return array;\n};\n\n/**\n * Reads a packed repeated field of unsigned 64 bit fixed values.\n * @param {Array.<Long|number>} [array] Array to read into; a new one is created if omitted\n * @returns {Array.<Long|number>} Array read into\n */\nReader.prototype.fixed64s = function read_fixed64s(array) {\n    if (array === undefined) array = [];\n    var len = this.uint32(), end = this.pos + len, i = array.length;\n    /* istanbul ignore if */\n    if (end > this.len) throw indexOutOfRange(this, len);\n    var count = len >>> 3;\n    array.length = i + count; // 8 bytes per value, count is known\n    for (var j = 0; j < count; ++j)\n        array[i++] = this.fixed64();\n    if (this.pos !== end) throw indexOutOfRange(this, 8);\n    return array;\n};\n\n/**\n * Reads a packed repeated field of signed 64 bit fixed values.\n * @param {Array.<Long|number>} [array] Array to read into; a new one is created if omitted\n * @returns {Array.<Long|number>} Array read into\n */\nReader.prototype.sfixed64s = function read_sfixed64s(array) {\n    if (array === undefined) array = [];\n    var len = this.uint32(), end = this.pos + len, i = array.length;\n    /* istanbul ignore if */\n    if (end > this.len) throw indexOutOfRange(this, len);\n    var count = len >>> 3;\n    array.length = i + count; // 8 bytes per value, count is known\n    for (var j = 0; j < count; ++j)\n        array[i++] = this.sfixed64();\n    if (this.pos !== end) throw indexOutOfRange(this, 8);\n    return array;\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @returns {Uint8Array} Value read\n */\nReader.prototype.bytes = function read_bytes() {\n    var length = this.uint32(),\n        start  = this.pos,\n        end    = this.pos + length;\n\n    /* istanbul ignore if */\n    if (end > this.len)\n        throw indexOutOfRange(this, length);\n\n    this.pos = end;\n    return this.raw(start, end);\n};\n\n/**\n * Reads a string preceeded by its byte length as a varint.\n * @returns {string} Value read\n */\nReader.prototype.string = function read_string() {\n    var length = this.uint32(),\n        start  = this.pos,\n        end    = this.pos + length;\n\n    /* istanbul ignore if */\n    if (end > this.len)\n        throw indexOutOfRange(this, length);\n\n    this.pos = end;\n    return utf8.read(this.buf, start, end);\n};\n\n/**\n * Reads a string preceeded by its byte length as a varint, rejecting invalid UTF8.\n * @returns {string} Value read\n */\nReader.prototype.stringVerify = function read_string_verify() {\n    var length = this.uint32(),\n        start  = this.pos,\n        end    = this.pos + length;\n\n    /* istanbul ignore if */\n    if (end > this.len)\n        throw indexOutOfRange(this, length);\n\n    this.pos = end;\n    return utf8.readStrict(this.buf, start, end);\n};\n\n/**\n * Skips the specified number of bytes if specified, otherwise skips a varint.\n * @param {number} [length] Length if known, otherwise a varint is assumed\n * @returns {Reader} `this`\n */\nReader.prototype.skip = function skip(length) {\n    if (typeof length === \"number\") {\n        /* istanbul ignore if */\n        if (this.pos + length > this.len)\n            throw indexOutOfRange(this, length);\n        this.pos += length;\n    } else {\n        do {\n            /* istanbul ignore if */\n            if (this.pos >= this.len)\n                throw indexOutOfRange(this);\n        } while (this.buf[this.pos++] & 128);\n    }\n    return this;\n};\n\n/**\n * Recursion limit.\n * @type {number}\n */\nReader.recursionLimit = util.recursionLimit;\n\n/**\n * Whether readers discard unknown fields while decoding.\n * @type {boolean}\n */\nReader.discardUnknown = true;\n\n/**\n * Skips the next element of the specified wire type.\n * @param {number} wireType Wire type received\n * @param {number} [depth] Depth of recursion to control nested calls; 0 if omitted\n * @param {number} [fieldNumber] Field number for validating group end tags\n * @returns {Reader} `this`\n */\nReader.prototype.skipType = function(wireType, depth, fieldNumber) {\n    if (depth === undefined) depth = 0;\n    if (depth > Reader.recursionLimit)\n        throw Error(\"max depth exceeded\");\n    if (fieldNumber === 0)\n        throw Error(\"illegal tag: field number 0\");\n    switch (wireType) {\n        case 0:\n            this.skip();\n            break;\n        case 1:\n            this.skip(8);\n            break;\n        case 2:\n            this.skip(this.uint32());\n            break;\n        case 3:\n            while (true) {\n                var tag = this.tag();\n                var nestedField = tag >>> 3;\n                wireType = tag & 7;\n                if (!nestedField)\n                    throw Error(\"illegal tag: field number 0\");\n                if (wireType === 4) {\n                    if (fieldNumber !== undefined && nestedField !== fieldNumber)\n                        throw Error(\"invalid end group tag\");\n                    break;\n                }\n                this.skipType(wireType, depth + 1, nestedField);\n            }\n            break;\n        case 5:\n            this.skip(4);\n            break;\n\n        /* istanbul ignore next */\n        default:\n            throw Error(\"invalid wire type \" + wireType + \" at offset \" + this.pos);\n    }\n    return this;\n};\n\nReader._configure = function(BufferReader_) {\n    BufferReader = BufferReader_;\n    Reader.create = create();\n    BufferReader._configure();\n\n    var fn = util.Long ? \"toLong\" : /* istanbul ignore next */ \"toNumber\";\n    util.merge(Reader.prototype, {\n\n        int64: function read_int64() {\n            return readLongVarint.call(this)[fn](false);\n        },\n\n        uint64: function read_uint64() {\n            return readLongVarint.call(this)[fn](true);\n        },\n\n        sint64: function read_sint64() {\n            return readLongVarint.call(this).zzDecode()[fn](false);\n        },\n\n        fixed64: function read_fixed64() {\n            return readFixed64.call(this)[fn](true);\n        },\n\n        sfixed64: function read_sfixed64() {\n            return readFixed64.call(this)[fn](false);\n        }\n\n    });\n};\n","\"use strict\";\nmodule.exports = BufferReader;\n\n// extends Reader\nvar Reader = require(\"./reader\");\nBufferReader.prototype = Object.create(Reader.prototype, {\n    constructor: {\n        value: BufferReader,\n        writable: true,\n        enumerable: false,\n        configurable: true\n    }\n});\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer reader instance.\n * @classdesc Wire format reader using node buffers.\n * @extends Reader\n * @constructor\n * @param {Buffer} buffer Buffer to read from\n */\nfunction BufferReader(buffer) {\n    Reader.call(this, buffer);\n\n    /**\n     * Read buffer.\n     * @name BufferReader#buf\n     * @type {Buffer}\n    */\n}\n\nBufferReader._configure = function () {\n    /* istanbul ignore else */\n    if (util.Buffer)\n        BufferReader.prototype._slice = util.Buffer.prototype.slice;\n};\n\n/**\n * Returns raw bytes from the backing buffer without advancing the reader.\n * @name BufferReader#raw\n * @function\n * @param {number} start Start offset\n * @param {number} end End offset\n * @returns {Buffer} Raw bytes\n */\nBufferReader.prototype.raw = function read_raw_buffer(start, end) {\n    return this._slice.call(this.buf, start, end);\n};\n\n/**\n * @override\n */\nBufferReader.prototype.string = function read_string_buffer() {\n    var len = this.uint32(), // modifies pos\n        start = this.pos,\n        end = this.pos + len;\n\n    /* istanbul ignore if */\n    if (end > this.len)\n        throw RangeError(\"index out of range: \" + this.pos + \" + \" + len + \" > \" + this.len);\n\n    this.pos = end;\n    return this.buf.utf8Slice\n        ? this.buf.utf8Slice(start, end)\n        : this.buf.toString(\"utf-8\", start, end);\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @name BufferReader#bytes\n * @function\n * @returns {Buffer} Value read\n */\n\nBufferReader._configure();\n","\"use strict\";\nmodule.exports = Service;\n\nvar util = require(\"../util/minimal\");\n\n// Extends EventEmitter\nService.prototype = Object.create(util.EventEmitter.prototype, {\n    constructor: {\n        value: Service,\n        writable: true,\n        enumerable: false,\n        configurable: true\n    }\n});\n\n/**\n * A service method callback as used by {@link rpc.ServiceMethod|ServiceMethod}.\n *\n * Differs from {@link RPCImplCallback} in that it is an actual callback of a service method which may not return `response = null`.\n * @typedef rpc.ServiceMethodCallback\n * @template TRes extends Message<TRes>\n * @type {function}\n * @param {Error|null} error Error, if any\n * @param {TRes} [response] Response message\n * @returns {undefined}\n */\n\n/**\n * A service method part of a {@link rpc.Service} as created by {@link Service.create}.\n * @typedef rpc.ServiceMethod\n * @template TReq extends Message<TReq>\n * @template TRes extends Message<TRes>\n * @type {{\n *   (request: TReq|Properties<TReq>, callback: rpc.ServiceMethodCallback<TRes>): void;\n *   (request: TReq|Properties<TReq>): Promise<TRes>;\n *   readonly name: string;\n *   readonly path: string;\n *   readonly requestType: string;\n *   readonly responseType: string;\n *   readonly requestStream: true|undefined;\n *   readonly responseStream: true|undefined;\n * }}\n */\n\n/**\n * Constructs a new RPC service instance.\n * @classdesc An RPC service as returned by {@link Service#create}.\n * @exports rpc.Service\n * @extends util.EventEmitter\n * @constructor\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n */\nfunction Service(rpcImpl, requestDelimited, responseDelimited) {\n\n    if (typeof rpcImpl !== \"function\")\n        throw TypeError(\"rpcImpl must be a function\");\n\n    util.EventEmitter.call(this);\n\n    /**\n     * RPC implementation. Becomes `null` once the service is ended.\n     * @type {RPCImpl|null}\n     */\n    this.rpcImpl = rpcImpl;\n\n    /**\n     * Whether requests are length-delimited.\n     * @type {boolean}\n     */\n    this.requestDelimited = Boolean(requestDelimited);\n\n    /**\n     * Whether responses are length-delimited.\n     * @type {boolean}\n     */\n    this.responseDelimited = Boolean(responseDelimited);\n}\n\n/**\n * Calls a service method through {@link rpc.Service#rpcImpl|rpcImpl}.\n * @param {Method|rpc.ServiceMethod<TReq,TRes>} method Reflected or static method\n * @param {Constructor<TReq>} requestCtor Request constructor\n * @param {Constructor<TRes>} responseCtor Response constructor\n * @param {TReq|Properties<TReq>} request Request message or plain object\n * @param {rpc.ServiceMethodCallback<TRes>} callback Service callback\n * @returns {undefined}\n * @template TReq extends Message<TReq>\n * @template TRes extends Message<TRes>\n */\nService.prototype.rpcCall = function rpcCall(method, requestCtor, responseCtor, request, callback) {\n\n    if (!request)\n        throw TypeError(\"request must be specified\");\n\n    var self = this;\n    if (!callback)\n        return util.asPromise(rpcCall, self, method, requestCtor, responseCtor, request);\n\n    if (!self.rpcImpl) {\n        setTimeout(function() { callback(Error(\"already ended\")); }, 0);\n        return undefined;\n    }\n\n    try {\n        return self.rpcImpl(\n            method,\n            requestCtor[self.requestDelimited ? \"encodeDelimited\" : \"encode\"](request).finish(),\n            function rpcCallback(err, response) {\n\n                if (err) {\n                    self.emit(\"error\", err, method);\n                    return callback(err);\n                }\n\n                if (response === null) {\n                    self.end(/* endedByRPC */ true);\n                    return undefined;\n                }\n\n                if (!(response instanceof responseCtor)) {\n                    try {\n                        response = responseCtor[self.responseDelimited ? \"decodeDelimited\" : \"decode\"](response);\n                    } catch (err) {\n                        self.emit(\"error\", err, method);\n                        return callback(err);\n                    }\n                }\n\n                self.emit(\"data\", response, method);\n                return callback(null, response);\n            }\n        );\n    } catch (err) {\n        self.emit(\"error\", err, method);\n        setTimeout(function() { callback(err); }, 0);\n        return undefined;\n    }\n};\n\n/**\n * Ends this service and emits the `end` event.\n * @param {boolean} [endedByRPC=false] Whether the service has been ended by the RPC implementation.\n * @returns {rpc.Service} `this`\n */\nService.prototype.end = function end(endedByRPC) {\n    if (this.rpcImpl) {\n        if (!endedByRPC) // signal end to rpcImpl\n            this.rpcImpl(null, null, null);\n        this.rpcImpl = null;\n        this.emit(\"end\").off();\n    }\n    return this;\n};\n","\"use strict\";\n\n/**\n * Streaming RPC helpers.\n * @namespace\n */\nvar rpc = exports;\n\n/**\n * RPC implementation passed to {@link Service#create} performing a service request on network level, i.e. by utilizing http requests or websockets.\n * @typedef RPCImpl\n * @type {function}\n * @param {Method|rpc.ServiceMethod<Message<{}>,Message<{}>>} method Reflected or static method being called\n * @param {Uint8Array} requestData Request data\n * @param {RPCImplCallback} callback Callback function\n * @returns {undefined}\n * @example\n * function rpcImpl(method, requestData, callback) {\n *     if (protobuf.util.lcFirst(method.name) !== \"myMethod\") // compatible with static code\n *         throw Error(\"no such method\");\n *     asynchronouslyObtainAResponse(requestData, function(err, responseData) {\n *         callback(err, responseData);\n *     });\n * }\n */\n\n/**\n * Node-style callback as used by {@link RPCImpl}.\n * @typedef RPCImplCallback\n * @type {function}\n * @param {Error|null} error Error, if any, otherwise `null`\n * @param {Uint8Array|null} [response] Response data or `null` to signal end of stream, if there hasn't been an error\n * @returns {undefined}\n */\n\nrpc.Service = require(\"./rpc/service\");\n","\"use strict\";\nmodule.exports = Object.create(null);\n\n/**\n * Named roots.\n * This is where pbjs stores generated structures (the option `-r, --root` specifies a name).\n * Can also be used manually to make roots available across modules.\n * @name roots\n * @type {Object.<string,Root>}\n * @example\n * // pbjs -r myroot -o compiled.js ...\n *\n * // in another module:\n * require(\"./compiled.js\");\n *\n * // in any subsequent module:\n * var root = protobuf.roots[\"myroot\"];\n */\n","\"use strict\";\n\n/**\n * Build type, one of `\"full\"`, `\"light\"` or `\"minimal\"`.\n * @name build\n * @type {string}\n * @const\n */\nexports.build = \"minimal\";\n\n// Serialization\nexports.Writer       = require(\"./writer\");\nexports.BufferWriter = require(\"./writer_buffer\");\nexports.Reader       = require(\"./reader\");\nexports.BufferReader = require(\"./reader_buffer\");\n\n// Utility\nexports.util         = require(\"./util/minimal\");\nexports.rpc          = require(\"./rpc\");\nexports.roots        = require(\"./roots\");\nexports.configure    = configure;\n\n/* istanbul ignore next */\n/**\n * Reconfigures the library according to the environment.\n * @returns {undefined}\n */\nfunction configure() {\n    exports.util.LongBits._configure(exports.util.Long);\n    exports.Writer._configure(exports.BufferWriter);\n    exports.Reader._configure(exports.BufferReader);\n}\n\n// Set up buffer utility according to the environment\nconfigure();\n","\"use strict\";\n\nvar patterns = exports;\n\npatterns.numberRe    = /^(?![eE])[0-9]*(?:\\.[0-9]*)?(?:[eE][+-]?[0-9]+)?$/;\npatterns.typeRefRe   = /^(?:\\.?[a-zA-Z_][a-zA-Z_0-9]*)(?:\\.[a-zA-Z_][a-zA-Z_0-9]*)*$/;\npatterns.reservedRe  = /^(?:do|if|in|for|let|new|try|var|case|else|enum|eval|false|null|this|true|void|with|break|catch|class|const|super|throw|while|yield|delete|export|import|public|return|static|switch|typeof|default|extends|finally|package|private|continue|debugger|function|arguments|interface|protected|implements|instanceof)$/;\n","\"use strict\";\nmodule.exports = codegen;\n\nvar patterns = require(\"./patterns\");\nvar reservedRe = patterns.reservedRe;\n\n/**\n * Begins generating a function.\n * @memberof util\n * @param {string[]} functionParams Function parameter names\n * @param {string} [functionName] Function name if not anonymous\n * @returns {Codegen} Appender that appends code to the function's body\n */\nfunction codegen(functionParams, functionName) {\n\n    /* istanbul ignore if */\n    if (typeof functionParams === \"string\") {\n        functionName = functionParams;\n        functionParams = undefined;\n    }\n\n    var body = [];\n\n    /**\n     * Appends code to the function's body or finishes generation.\n     * @typedef Codegen\n     * @type {function}\n     * @param {string|Object.<string,*>} [formatStringOrScope] Format string or, to finish the function, an object of additional scope variables, if any\n     * @param {...*} [formatParams] Format parameters\n     * @returns {Codegen|Function} Itself or the generated function if finished\n     * @throws {Error} If format parameter counts do not match\n     */\n\n    function Codegen(formatStringOrScope) {\n        // note that explicit array handling below makes this ~50% faster\n\n        // finish the function\n        if (typeof formatStringOrScope !== \"string\") {\n            var source = toString();\n            if (codegen.verbose)\n                console.log(\"codegen: \" + source); // eslint-disable-line no-console\n            source = \"return \" + source;\n            if (formatStringOrScope) {\n                var scopeKeys   = Object.keys(formatStringOrScope),\n                    scopeParams = new Array(scopeKeys.length + 1),\n                    scopeValues = new Array(scopeKeys.length),\n                    scopeOffset = 0;\n                while (scopeOffset < scopeKeys.length) {\n                    scopeParams[scopeOffset] = scopeKeys[scopeOffset];\n                    scopeValues[scopeOffset] = formatStringOrScope[scopeKeys[scopeOffset++]];\n                }\n                scopeParams[scopeOffset] = source;\n                return Function.apply(null, scopeParams).apply(null, scopeValues); // eslint-disable-line no-new-func\n            }\n            return Function(source)(); // eslint-disable-line no-new-func\n        }\n\n        // otherwise append to body\n        var formatParams = new Array(arguments.length - 1),\n            formatOffset = 0;\n        while (formatOffset < formatParams.length)\n            formatParams[formatOffset] = arguments[++formatOffset];\n        formatOffset = 0;\n        formatStringOrScope = formatStringOrScope.replace(/%([%dfijs])/g, function replace($0, $1) {\n            var value = formatParams[formatOffset++];\n            switch ($1) {\n                case \"d\": case \"f\":\n                    value = Number(value);\n                    return Object.is(value, -0) ? \"-0\" : String(value);\n                case \"i\": return String(Math.floor(value));\n                case \"j\": return JSON.stringify(value);\n                case \"s\": return String(value);\n            }\n            return \"%\";\n        });\n        if (formatOffset !== formatParams.length)\n            throw Error(\"parameter count mismatch\");\n        body.push(formatStringOrScope);\n        return Codegen;\n    }\n\n    function toString(functionNameOverride) {\n        return \"function \" + safeFunctionName(functionNameOverride || functionName) + \"(\" + (functionParams && functionParams.join(\",\") || \"\") + \"){\\n  \" + body.join(\"\\n  \") + \"\\n}\";\n    }\n\n    Object.defineProperty(Codegen, \"toString\", {\n        value: toString,\n        writable: true,\n        enumerable: true,\n        configurable: true\n    });\n    return Codegen;\n}\n\n/**\n * Begins generating a function.\n * @memberof util\n * @function codegen\n * @param {string} [functionName] Function name if not anonymous\n * @returns {Codegen} Appender that appends code to the function's body\n * @variation 2\n */\n\n/**\n * When set to `true`, codegen will log generated code to console. Useful for debugging.\n * @name util.codegen.verbose\n * @type {boolean}\n */\ncodegen.verbose = false;\n\nfunction safeFunctionName(name) {\n    if (!name)\n        return \"\";\n    name = String(name).replace(/[^\\w$]/g, \"\");\n    if (!name)\n        return \"\";\n    if (/^\\d/.test(name))\n        name = \"_\" + name;\n    return reservedRe.test(name) ? name + \"_\" : name;\n}\n","\"use strict\";\n\nvar fs = null;\ntry {\n    fs = require(/* webpackIgnore: true */ \"fs\");\n    if (!fs || !fs.readFile || !fs.readFileSync)\n        fs = null;\n} catch (e) {\n    // `fs` is unavailable in browsers and browser-like bundles.\n}\nmodule.exports = fs;\n","\"use strict\";\nmodule.exports = fetch;\n\nvar asPromise = require(\"./aspromise\"),\n    fs        = require(\"./fs\");\n\n/**\n * Node-style callback as used by {@link util.fetch}.\n * @typedef FetchCallback\n * @type {function}\n * @param {?Error} error Error, if any, otherwise `null`\n * @param {string} [contents] File contents, if there hasn't been an error\n * @returns {undefined}\n */\n\n/**\n * Options as used by {@link util.fetch}.\n * @interface IFetchOptions\n * @property {boolean} [binary=false] Whether expecting a binary response\n * @property {boolean} [xhr=false] If `true`, forces the use of XMLHttpRequest\n */\n\n/**\n * Fetches the contents of a file.\n * @memberof util\n * @param {string} filename File path or url\n * @param {IFetchOptions} options Fetch options\n * @param {FetchCallback} callback Callback function\n * @returns {undefined}\n */\nfunction fetch(filename, options, callback) {\n    if (typeof options === \"function\") {\n        callback = options;\n        options = {};\n    } else if (!options)\n        options = {};\n\n    if (!callback)\n        return asPromise(fetch, this, filename, options); // eslint-disable-line no-invalid-this\n\n    // if a node-like filesystem is present, try it first but fall back to XHR if nothing is found.\n    if (!options.xhr && fs && fs.readFile)\n        return fs.readFile(filename, function fetchReadFileCallback(err, contents) {\n            return err && typeof XMLHttpRequest !== \"undefined\"\n                ? fetch.xhr(filename, options, callback)\n                : err\n                ? callback(err)\n                : callback(null, options.binary ? contents : contents.toString(\"utf8\"));\n        });\n\n    // use the XHR version otherwise.\n    return fetch.xhr(filename, options, callback);\n}\n\n/**\n * Fetches the contents of a file.\n * @name util.fetch\n * @function\n * @param {string} path File path or url\n * @param {FetchCallback} callback Callback function\n * @returns {undefined}\n * @variation 2\n */\n\n/**\n * Fetches the contents of a file.\n * @name util.fetch\n * @function\n * @param {string} path File path or url\n * @param {IFetchOptions} [options] Fetch options\n * @returns {Promise<string|Uint8Array>} Promise\n * @variation 3\n */\n\n/**/\nfetch.xhr = function fetch_xhr(filename, options, callback) {\n    var xhr = new XMLHttpRequest();\n    xhr.onreadystatechange /* works everywhere */ = function fetchOnReadyStateChange() {\n\n        if (xhr.readyState !== 4)\n            return undefined;\n\n        // local cors security errors return status 0 / empty string, too. afaik this cannot be\n        // reliably distinguished from an actually empty file for security reasons. feel free\n        // to send a pull request if you are aware of a solution.\n        if (xhr.status !== 0 && xhr.status !== 200)\n            return callback(Error(\"status \" + xhr.status));\n\n        // if binary data is expected, make sure that some sort of array is returned, even if\n        // ArrayBuffers are not supported. the binary string fallback, however, is unsafe.\n        if (options.binary) {\n            var buffer = xhr.response;\n            if (!buffer) {\n                buffer = [];\n                for (var i = 0; i < xhr.responseText.length; ++i)\n                    buffer.push(xhr.responseText.charCodeAt(i) & 255);\n            }\n            return callback(null, typeof Uint8Array !== \"undefined\" ? new Uint8Array(buffer) : buffer);\n        }\n        return callback(null, xhr.responseText);\n    };\n\n    if (options.binary) {\n        // ref: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Sending_and_Receiving_Binary_Data#Receiving_binary_data_in_older_browsers\n        if (\"overrideMimeType\" in xhr)\n            xhr.overrideMimeType(\"text/plain; charset=x-user-defined\");\n        xhr.responseType = \"arraybuffer\";\n    }\n\n    xhr.open(\"GET\", filename);\n    xhr.send();\n};\n","\"use strict\";\n\n/**\n * A minimal path module to resolve Unix, Windows and URL paths alike.\n * @memberof util\n * @namespace\n */\nvar path = exports;\n\nvar urlRe = /^[a-zA-Z][a-zA-Z0-9+.-]+:\\/\\//;\n\nfunction normalizeUrl(path) {\n    if (typeof URL === \"undefined\" || !urlRe.test(path))\n        return null;\n    try {\n        return new URL(path).href;\n    } catch (e) {\n        return null;\n    }\n}\n\nfunction resolveUrl(originPath, includePath) {\n    if (typeof URL === \"undefined\" || !urlRe.test(originPath) || urlRe.test(includePath))\n        return null;\n    try {\n        return new URL(includePath, originPath).href;\n    } catch (e) {\n        return null;\n    }\n}\n\nvar isAbsolute =\n/**\n * Tests if the specified path is absolute.\n * @param {string} path Path to test\n * @returns {boolean} `true` if path is absolute\n */\npath.isAbsolute = function isAbsolute(path) {\n    return /^(?:\\/|\\w+:|\\\\\\\\\\w+)/.test(path);\n};\n\nvar normalize =\n/**\n * Normalizes the specified path.\n * @param {string} path Path to normalize\n * @returns {string} Normalized path\n */\npath.normalize = function normalize(path) {\n    var normalizedUrl = normalizeUrl(path);\n    if (normalizedUrl)\n        return normalizedUrl;\n    var firstTwoCharacters = path.substring(0,2);\n    var uncPrefix = \"\";\n    if (firstTwoCharacters === \"\\\\\\\\\") {\n        uncPrefix = firstTwoCharacters;\n        path = path.substring(2);\n    }\n\n    path = path.replace(/\\\\/g, \"/\")\n               .replace(/\\/{2,}/g, \"/\");\n    var parts    = path.split(\"/\"),\n        absolute = isAbsolute(path),\n        prefix   = \"\";\n    if (absolute)\n        prefix = parts.shift() + \"/\";\n    for (var i = 0; i < parts.length;) {\n        if (parts[i] === \"..\") {\n            if (i > 0 && parts[i - 1] !== \"..\")\n                parts.splice(--i, 2);\n            else if (absolute)\n                parts.splice(i, 1);\n            else\n                ++i;\n        } else if (parts[i] === \".\")\n            parts.splice(i, 1);\n        else\n            ++i;\n    }\n    return uncPrefix + prefix + parts.join(\"/\");\n};\n\n/**\n * Resolves the specified include path against the specified origin path.\n * @param {string} originPath Path to the origin file\n * @param {string} includePath Include path relative to origin path\n * @param {boolean} [alreadyNormalized=false] `true` if both paths are already known to be normalized\n * @returns {string} Path to the include file\n */\npath.resolve = function resolve(originPath, includePath, alreadyNormalized) {\n    var resolvedUrl = resolveUrl(originPath, includePath);\n    if (resolvedUrl)\n        return resolvedUrl;\n    if (!alreadyNormalized)\n        includePath = normalize(includePath); // path or absolute url\n    if (isAbsolute(includePath))\n        return includePath;\n    if (!alreadyNormalized)\n        originPath = normalize(originPath);\n    return (originPath = originPath.replace(/(?:\\/|^)[^/]+$/, \"\")).length ? normalize(originPath + \"/\" + includePath) : includePath;\n};\n","\"use strict\";\nmodule.exports = Namespace;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\nNamespace.prototype = Object.create(ReflectionObject.prototype, {\n    constructor: {\n        value: Namespace,\n        writable: true,\n        enumerable: false,\n        configurable: true\n    }\n});\nNamespace.className = \"Namespace\";\n\nvar Field    = require(\"./field\"),\n    util     = require(\"./util\"),\n    OneOf    = require(\"./oneof\");\n\nvar Type,    // cyclic\n    Service,\n    Enum;\n\n/**\n * Constructs a new namespace instance.\n * @name Namespace\n * @classdesc Reflected namespace.\n * @extends NamespaceBase\n * @constructor\n * @param {string} name Namespace name\n * @param {Object.<string,*>} [options] Declared options\n */\n\n/**\n * Constructs a namespace from JSON.\n * @memberof Namespace\n * @function\n * @param {string} name Namespace name\n * @param {Object.<string,*>} json JSON object\n * @param {number} [depth] Current nesting depth, defaults to `0`\n * @returns {Namespace} Created namespace\n * @throws {TypeError} If arguments are invalid\n */\nNamespace.fromJSON = function fromJSON(name, json, depth) {\n    if (depth === undefined)\n        depth = 0;\n    if (depth > util.recursionLimit)\n        throw Error(\"max depth exceeded\");\n    return new Namespace(name, json.options).addJSON(json.nested, depth);\n};\n\n/**\n * Converts an array of reflection objects to JSON.\n * @memberof Namespace\n * @param {ReflectionObject[]} array Object array\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {Object.<string,*>|undefined} JSON object or `undefined` when array is empty\n */\nfunction arrayToJSON(array, toJSONOptions) {\n    if (!(array && array.length))\n        return undefined;\n    var obj = {};\n    for (var i = 0; i < array.length; ++i)\n        obj[array[i].name] = array[i].toJSON(toJSONOptions);\n    return obj;\n}\n\nNamespace.arrayToJSON = arrayToJSON;\n\n/**\n * Tests if the specified id is reserved.\n * @param {Array.<number[]|string>|undefined} reserved Array of reserved ranges and names\n * @param {number} id Id to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nNamespace.isReservedId = function isReservedId(reserved, id) {\n    if (reserved)\n        for (var i = 0; i < reserved.length; ++i)\n            if (typeof reserved[i] !== \"string\" && reserved[i][0] <= id && reserved[i][1] >= id)\n                return true;\n    return false;\n};\n\n/**\n * Tests if the specified name is reserved.\n * @param {Array.<number[]|string>|undefined} reserved Array of reserved ranges and names\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nNamespace.isReservedName = function isReservedName(reserved, name) {\n    if (reserved)\n        for (var i = 0; i < reserved.length; ++i)\n            if (reserved[i] === name)\n                return true;\n    return false;\n};\n\n/**\n * Not an actual constructor. Use {@link Namespace} instead.\n * @classdesc Base class of all reflection objects containing nested objects. This is not an actual class but here for the sake of having consistent type definitions.\n * @exports NamespaceBase\n * @extends ReflectionObject\n * @abstract\n * @constructor\n * @param {string} name Namespace name\n * @param {Object.<string,*>} [options] Declared options\n * @see {@link Namespace}\n */\nfunction Namespace(name, options) {\n    ReflectionObject.call(this, name, options);\n\n    /**\n     * Nested objects by name.\n     * @type {Object.<string,ReflectionObject>|undefined}\n     */\n    this.nested = undefined; // toJSON\n\n    /**\n     * Cached nested objects as an array.\n     * @type {ReflectionObject[]|null}\n     * @private\n     */\n    this._nestedArray = null;\n\n    /**\n     * Cache lookup calls for any objects contains anywhere under this namespace.\n     * This drastically speeds up resolve for large cross-linked protos where the same\n     * types are looked up repeatedly.\n     * @type {Object.<string,ReflectionObject|null>}\n     * @private\n     */\n    this._lookupCache = Object.create(null);\n\n    /**\n     * Whether or not objects contained in this namespace need feature resolution.\n     * @type {boolean}\n     * @protected\n     */\n    this._needsRecursiveFeatureResolution = true;\n\n    /**\n     * Whether or not objects contained in this namespace need a resolve.\n     * @type {boolean}\n     * @protected\n     */\n    this._needsRecursiveResolve = true;\n}\n\nfunction clearCache(namespace) {\n    namespace._nestedArray = null;\n    namespace._lookupCache = Object.create(null);\n\n    // Also clear parent caches, since they include nested lookups.\n    var parent = namespace;\n    while(parent = parent.parent) {\n        parent._lookupCache = Object.create(null);\n    }\n    return namespace;\n}\n\n/**\n * Nested objects of this namespace as an array for iteration.\n * @name NamespaceBase#nestedArray\n * @type {ReflectionObject[]}\n * @readonly\n */\nObject.defineProperty(Namespace.prototype, \"nestedArray\", {\n    get: function() {\n        return this._nestedArray || (this._nestedArray = util.toArray(this.nested));\n    }\n});\n\n/**\n * Namespace descriptor.\n * @interface INamespace\n * @property {Object.<string,*>} [options] Namespace options\n * @property {Object.<string,AnyNestedObject>} [nested] Nested object descriptors\n */\n\n/**\n * Any extension field descriptor.\n * @typedef AnyExtensionField\n * @type {IExtensionField|IExtensionMapField}\n */\n\n/**\n * Any nested object descriptor.\n * @typedef AnyNestedObject\n * @type {IEnum|IType|IService|AnyExtensionField|INamespace|IOneOf}\n */\n\n/**\n * Converts this namespace to a namespace descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {INamespace} Namespace descriptor\n */\nNamespace.prototype.toJSON = function toJSON(toJSONOptions) {\n    return util.toObject([\n        \"options\" , this.options,\n        \"nested\"  , arrayToJSON(this.nestedArray, toJSONOptions)\n    ]);\n};\n\n/**\n * Adds nested objects to this namespace from nested object descriptors.\n * @param {Object.<string,AnyNestedObject>} nestedJson Any nested object descriptors\n * @param {number} [depth] Current nesting depth, defaults to `0`\n * @returns {Namespace} `this`\n */\nNamespace.prototype.addJSON = function addJSON(nestedJson, depth) {\n    if (depth === undefined)\n        depth = 0;\n    if (depth > util.recursionLimit)\n        throw Error(\"max depth exceeded\");\n    var ns = this;\n    /* istanbul ignore else */\n    if (nestedJson) {\n        for (var names = Object.keys(nestedJson), i = 0, nested; i < names.length; ++i) {\n            nested = nestedJson[names[i]];\n            ns.add( // most to least likely\n                ( nested.fields !== undefined\n                ? Type.fromJSON\n                : nested.values !== undefined\n                ? Enum.fromJSON\n                : nested.methods !== undefined\n                ? Service.fromJSON\n                : nested.id !== undefined\n                ? Field.fromJSON\n                : Namespace.fromJSON )(names[i], nested, depth + 1)\n            );\n        }\n    }\n    return this;\n};\n\n/**\n * Gets the nested object of the specified name.\n * @param {string} name Nested object name\n * @returns {ReflectionObject|null} The reflection object or `null` if it doesn't exist\n */\nNamespace.prototype.get = function get(name) {\n    return this.nested && Object.prototype.hasOwnProperty.call(this.nested, name)\n        ? this.nested[name]\n        : null;\n};\n\n/**\n * Gets the values of the nested {@link Enum|enum} of the specified name.\n * This methods differs from {@link Namespace#get|get} in that it returns an enum's values directly and throws instead of returning `null`.\n * @param {string} name Nested enum name\n * @returns {Object.<string,number>} Enum values\n * @throws {Error} If there is no such enum\n */\nNamespace.prototype.getEnum = function getEnum(name) {\n    if (this.nested && Object.prototype.hasOwnProperty.call(this.nested, name) && this.nested[name] instanceof Enum)\n        return this.nested[name].values;\n    throw Error(\"no such enum: \" + name);\n};\n\n/**\n * Adds a nested object to this namespace.\n * @param {ReflectionObject} object Nested object to add\n * @returns {Namespace} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If there is already a nested object with this name\n */\nNamespace.prototype.add = function add(object) {\n\n    if (!(object instanceof Field && object.extend !== undefined || object instanceof Type  || object instanceof OneOf || object instanceof Enum || object instanceof Service || object instanceof Namespace))\n        throw TypeError(\"object must be a valid nested object\");\n\n    if (object.name === \"__proto__\")\n        return this;\n\n    if (!this.nested)\n        this.nested = {};\n    else {\n        var prev = this.get(object.name);\n        if (prev) {\n            if (prev instanceof Namespace && object instanceof Namespace && !(prev instanceof Type || prev instanceof Service)) {\n                // replace plain namespace but keep existing nested elements and options\n                var nested = prev.nestedArray;\n                for (var i = 0; i < nested.length; ++i)\n                    object.add(nested[i]);\n                this.remove(prev);\n                if (!this.nested)\n                    this.nested = {};\n                object.setOptions(prev.options, true);\n\n            } else\n                throw Error(\"duplicate name '\" + object.name + \"' in \" + this);\n        }\n    }\n    this.nested[object.name] = object;\n\n    if (!(this instanceof Type || this instanceof Service || this instanceof Enum || this instanceof Field)) {\n        // This is a package or a root namespace.\n        if (!object._edition) {\n            // Make sure that some edition is set if it hasn't already been specified.\n            object._edition = object._defaultEdition;\n        }\n    }\n\n    this._needsRecursiveFeatureResolution = true;\n    this._needsRecursiveResolve = true;\n\n    // Also clear parent caches, since they need to recurse down.\n    var parent = this;\n    while(parent = parent.parent) {\n        parent._needsRecursiveFeatureResolution = true;\n        parent._needsRecursiveResolve = true;\n    }\n\n    object.onAdd(this);\n    return clearCache(this);\n};\n\n/**\n * Removes a nested object from this namespace.\n * @param {ReflectionObject} object Nested object to remove\n * @returns {Namespace} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If `object` is not a member of this namespace\n */\nNamespace.prototype.remove = function remove(object) {\n\n    if (!(object instanceof ReflectionObject))\n        throw TypeError(\"object must be a ReflectionObject\");\n    if (object.parent !== this)\n        throw Error(object + \" is not a member of \" + this);\n\n    if (!util.remove(this.nested, object, object.name))\n        throw Error(object + \" is not a member of \" + this);\n    if (!Object.keys(this.nested).length)\n        this.nested = undefined;\n\n    object.onRemove(this);\n    return clearCache(this);\n};\n\n/**\n * Defines additial namespaces within this one if not yet existing.\n * @param {string|string[]} path Path to create\n * @param {*} [json] Nested types to create from JSON\n * @returns {Namespace} Pointer to the last namespace created or `this` if path is empty\n */\nNamespace.prototype.define = function define(path, json) {\n\n    if (util.isString(path))\n        path = path.split(\".\");\n    else if (!Array.isArray(path))\n        throw TypeError(\"illegal path\");\n    if (path && path.length && path[0] === \"\")\n        throw Error(\"path must be relative\");\n    if (path.length > util.recursionLimit)\n        throw Error(\"max depth exceeded\");\n\n    var ptr = this;\n    while (path.length > 0) {\n        var part = path.shift();\n        if (ptr.nested && ptr.nested[part]) {\n            ptr = ptr.nested[part];\n            if (!(ptr instanceof Namespace))\n                throw Error(\"path conflicts with non-namespace objects\");\n        } else\n            ptr.add(ptr = new Namespace(part));\n    }\n    if (json)\n        ptr.addJSON(json);\n    return ptr;\n};\n\n/**\n * Resolves this namespace's and all its nested objects' type references. Useful to validate a reflection tree, but comes at a cost.\n * @returns {Namespace} `this`\n */\nNamespace.prototype.resolveAll = function resolveAll() {\n    if (!this._needsRecursiveResolve) return this;\n\n    if (this._needsRecursiveFeatureResolution)\n        this._resolveFeaturesRecursive(this._edition);\n\n    var nested = this.nestedArray, i = 0;\n    this.resolve();\n    while (i < nested.length)\n        if (nested[i] instanceof Namespace)\n            nested[i++].resolveAll();\n        else\n            nested[i++].resolve();\n    this._needsRecursiveResolve = false;\n    return this;\n};\n\n/**\n * @override\n */\nNamespace.prototype._resolveFeaturesRecursive = function _resolveFeaturesRecursive(edition) {\n    if (!this._needsRecursiveFeatureResolution) return this;\n    this._needsRecursiveFeatureResolution = false;\n\n    edition = this._edition || edition;\n\n    ReflectionObject.prototype._resolveFeaturesRecursive.call(this, edition);\n    this.nestedArray.forEach(nested => {\n        nested._resolveFeaturesRecursive(edition);\n    });\n    return this;\n};\n\n/**\n * Recursively looks up the reflection object matching the specified path in the scope of this namespace.\n * @param {string|string[]} path Path to look up\n * @param {*|Array.<*>} filterTypes Filter types, any combination of the constructors of `protobuf.Type`, `protobuf.Enum`, `protobuf.Service` etc.\n * @param {boolean} [parentAlreadyChecked=false] If known, whether the parent has already been checked\n * @returns {ReflectionObject|null} Looked up object or `null` if none could be found\n */\nNamespace.prototype.lookup = function lookup(path, filterTypes, parentAlreadyChecked) {\n    /* istanbul ignore next */\n    if (typeof filterTypes === \"boolean\") {\n        parentAlreadyChecked = filterTypes;\n        filterTypes = undefined;\n    } else if (filterTypes && !Array.isArray(filterTypes))\n        filterTypes = [ filterTypes ];\n\n    if (util.isString(path) && path.length) {\n        if (path === \".\")\n            return this.root;\n        path = path.split(\".\");\n    } else if (!path.length)\n        return this;\n\n    var flatPath = path.join(\".\");\n\n    // Start at root if path is absolute\n    if (path[0] === \"\")\n        return this.root.lookup(path.slice(1), filterTypes);\n\n    // Lookup at this namespace and below\n    var found = this._lookupImpl(path, flatPath);\n    if (found && (!filterTypes || filterTypes.indexOf(found.constructor) > -1)) {\n        return found;\n    }\n\n    // Fall back to respective absolute path once relative scope has been checked (non-standard)\n    found = this.root._fullyQualifiedObjects && this.root._fullyQualifiedObjects[\".\" + flatPath];\n    if (found && (!filterTypes || filterTypes.indexOf(found.constructor) > -1)) {\n        return found;\n    }\n\n    if (parentAlreadyChecked)\n        return null;\n\n    // If there hasn't been a match, walk up the tree and look more broadly\n    var current = this;\n    while (current.parent) {\n        found = current.parent._lookupImpl(path, flatPath);\n        if (found && (!filterTypes || filterTypes.indexOf(found.constructor) > -1)) {\n            return found;\n        }\n        current = current.parent;\n    }\n    return null;\n};\n\n/**\n * Internal helper for lookup that handles searching just at this namespace and below along with caching.\n * @param {string[]} path Path to look up\n * @param {string} flatPath Flattened version of the path to use as a cache key\n * @returns {ReflectionObject|null} Looked up object or `null` if none could be found\n * @private\n */\nNamespace.prototype._lookupImpl = function lookup(path, flatPath) {\n    if(Object.prototype.hasOwnProperty.call(this._lookupCache, flatPath)) {\n        return this._lookupCache[flatPath];\n    }\n\n    // Test if the first part matches any nested object, and if so, traverse if path contains more\n    var found = this.get(path[0]);\n    var exact = null;\n    if (found) {\n        if (path.length === 1) {\n            exact = found;\n        } else if (found instanceof Namespace) {\n            path = path.slice(1);\n            exact = found._lookupImpl(path, path.join(\".\"));\n        }\n\n    // Otherwise try each nested namespace\n    } else {\n        for (var i = 0; i < this.nestedArray.length; ++i)\n            if (this._nestedArray[i] instanceof Namespace && (found = this._nestedArray[i]._lookupImpl(path, flatPath))) {\n                exact = found;\n                break;\n            }\n    }\n\n    // Set this even when null, so that when we walk up the tree we can quickly bail on repeated checks back down.\n    this._lookupCache[flatPath] = exact;\n    return exact;\n};\n\n/**\n * Looks up the reflection object at the specified path, relative to this namespace.\n * @name NamespaceBase#lookup\n * @function\n * @param {string|string[]} path Path to look up\n * @param {boolean} [parentAlreadyChecked=false] Whether the parent has already been checked\n * @returns {ReflectionObject|null} Looked up object or `null` if none could be found\n * @variation 2\n */\n// lookup(path: string, [parentAlreadyChecked: boolean])\n\n/**\n * Looks up the {@link Type|type} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Type} Looked up type\n * @throws {Error} If `path` does not point to a type\n */\nNamespace.prototype.lookupType = function lookupType(path) {\n    var found = this.lookup(path, [ Type ]);\n    if (!found)\n        throw Error(\"no such type: \" + path);\n    return found;\n};\n\n/**\n * Looks up the values of the {@link Enum|enum} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Enum} Looked up enum\n * @throws {Error} If `path` does not point to an enum\n */\nNamespace.prototype.lookupEnum = function lookupEnum(path) {\n    var found = this.lookup(path, [ Enum ]);\n    if (!found)\n        throw Error(\"no such Enum '\" + path + \"' in \" + this);\n    return found;\n};\n\n/**\n * Looks up the {@link Type|type} or {@link Enum|enum} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Type} Looked up type or enum\n * @throws {Error} If `path` does not point to a type or enum\n */\nNamespace.prototype.lookupTypeOrEnum = function lookupTypeOrEnum(path) {\n    var found = this.lookup(path, [ Type, Enum ]);\n    if (!found)\n        throw Error(\"no such Type or Enum '\" + path + \"' in \" + this);\n    return found;\n};\n\n/**\n * Looks up the {@link Service|service} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Service} Looked up service\n * @throws {Error} If `path` does not point to a service\n */\nNamespace.prototype.lookupService = function lookupService(path) {\n    var found = this.lookup(path, [ Service ]);\n    if (!found)\n        throw Error(\"no such Service '\" + path + \"' in \" + this);\n    return found;\n};\n\n// Sets up cyclic dependencies (called in index-light)\nNamespace._configure = function(Type_, Service_, Enum_) {\n    Type    = Type_;\n    Service = Service_;\n    Enum    = Enum_;\n};\n","\"use strict\";\nmodule.exports = MapField;\n\n// extends Field\nvar Field = require(\"./field\");\nMapField.prototype = Object.create(Field.prototype, {\n    constructor: {\n        value: MapField,\n        writable: true,\n        enumerable: false,\n        configurable: true\n    }\n});\nMapField.className = \"MapField\";\n\nvar types   = require(\"./types\"),\n    util    = require(\"./util\");\n\n/**\n * Constructs a new map field instance.\n * @classdesc Reflected map field.\n * @extends FieldBase\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {number} id Unique id within its namespace\n * @param {string} keyType Key type\n * @param {string} type Value type\n * @param {Object.<string,*>} [options] Declared options\n * @param {string} [comment] Comment associated with this field\n */\nfunction MapField(name, id, keyType, type, options, comment) {\n    Field.call(this, name, id, type, undefined, undefined, options, comment);\n\n    /* istanbul ignore if */\n    if (!util.isString(keyType))\n        throw TypeError(\"keyType must be a string\");\n\n    /**\n     * Key type.\n     * @type {string}\n     */\n    this.keyType = keyType; // toJSON, marker\n\n    /**\n     * Resolved key type if not a basic type.\n     * @type {ReflectionObject|null}\n     */\n    this.resolvedKeyType = null;\n\n    // Overrides Field#map\n    this.map = true;\n}\n\n/**\n * Map field descriptor.\n * @interface IMapField\n * @extends {IField}\n * @property {string} keyType Key type\n */\n\n/**\n * Extension map field descriptor.\n * @interface IExtensionMapField\n * @extends IMapField\n * @property {string} extend Extended type\n */\n\n/**\n * Constructs a map field from a map field descriptor.\n * @param {string} name Field name\n * @param {IMapField} json Map field descriptor\n * @returns {MapField} Created map field\n * @throws {TypeError} If arguments are invalid\n */\nMapField.fromJSON = function fromJSON(name, json) {\n    var field = new MapField(name, json.id, json.keyType, json.type, json.options, json.comment);\n    if (json.protoName)\n        field.protoName = json.protoName;\n    if (json.jsonName !== undefined)\n        field.jsonName = json.jsonName;\n    else if (json.options && json.options.json_name !== undefined)\n        field.jsonName = json.options.json_name;\n    return field;\n};\n\n/**\n * Converts this map field to a map field descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IMapField} Map field descriptor\n */\nMapField.prototype.toJSON = function toJSON(toJSONOptions) {\n    var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n    return util.toObject([\n        \"keyType\"      , this.keyType,\n        \"type\"         , this.type,\n        \"id\"           , this.id,\n        \"extend\"       , this.extend,\n        \"protoName\"    , this.protoName !== this.name ? this.protoName : undefined,\n        \"jsonName\"     , this.jsonName !== util.jsonName(this.protoName || this.name) ? this.jsonName : undefined,\n        \"options\"      , this.options,\n        \"comment\"      , keepComments ? this.comment : undefined\n    ]);\n};\n\n/**\n * @override\n */\nMapField.prototype.resolve = function resolve() {\n    if (this.resolved)\n        return this;\n\n    // Besides a value type, map fields have a key type that may be \"any scalar type except for floating point types and bytes\"\n    if (types.mapKey[this.keyType] === undefined)\n        throw Error(\"invalid key type: \" + this.keyType);\n\n    return Field.prototype.resolve.call(this);\n};\n\n/**\n * Map field decorator (TypeScript).\n * @name MapField.d\n * @function\n * @param {number} fieldId Field id\n * @param {\"int32\"|\"uint32\"|\"sint32\"|\"fixed32\"|\"sfixed32\"|\"int64\"|\"uint64\"|\"sint64\"|\"fixed64\"|\"sfixed64\"|\"bool\"|\"string\"} fieldKeyType Field key type\n * @param {\"double\"|\"float\"|\"int32\"|\"uint32\"|\"sint32\"|\"fixed32\"|\"sfixed32\"|\"int64\"|\"uint64\"|\"sint64\"|\"fixed64\"|\"sfixed64\"|\"bool\"|\"string\"|\"bytes\"|Object|Constructor<{}>} fieldValueType Field value type\n * @returns {FieldDecorator} Decorator function\n * @template T extends { [key: string]: number | Long | string | boolean | Uint8Array | Buffer | number[] | Message<{}> }\n * @deprecated Legacy TypeScript decorator support. Will be removed in a future release.\n */\nMapField.d = function decorateMapField(fieldId, fieldKeyType, fieldValueType) {\n\n    // submessage value: decorate the submessage and use its name as the type\n    if (typeof fieldValueType === \"function\")\n        fieldValueType = util.decorateType(fieldValueType).name;\n\n    // enum reference value: create a reflected copy of the enum and keep reuseing it\n    else if (fieldValueType && typeof fieldValueType === \"object\")\n        fieldValueType = util.decorateEnum(fieldValueType).name;\n\n    return function mapFieldDecorator(prototype, fieldName) {\n        util.decorateType(prototype.constructor)\n            .add(new MapField(fieldName, fieldId, fieldKeyType, fieldValueType));\n    };\n};\n","\"use strict\";\nmodule.exports = Method;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\nMethod.prototype = Object.create(ReflectionObject.prototype, {\n    constructor: {\n        value: Method,\n        writable: true,\n        enumerable: false,\n        configurable: true\n    }\n});\nMethod.className = \"Method\";\n\nvar util = require(\"./util\");\n\n/**\n * Constructs a new service method instance.\n * @classdesc Reflected service method.\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Method name\n * @param {string|undefined} type Method type, usually `\"rpc\"`\n * @param {string} requestType Request message type\n * @param {string} responseType Response message type\n * @param {boolean|Object.<string,*>} [requestStream] Whether the request is streamed\n * @param {boolean|Object.<string,*>} [responseStream] Whether the response is streamed\n * @param {Object.<string,*>} [options] Declared options\n * @param {string} [comment] The comment for this method\n * @param {Array.<Object.<string,*>>} [parsedOptions] Declared options, properly parsed into objects\n */\nfunction Method(name, type, requestType, responseType, requestStream, responseStream, options, comment, parsedOptions) {\n\n    /* istanbul ignore next */\n    if (util.isObject(requestStream)) {\n        options = requestStream;\n        requestStream = responseStream = undefined;\n    } else if (util.isObject(responseStream)) {\n        options = responseStream;\n        responseStream = undefined;\n    }\n\n    /* istanbul ignore if */\n    if (!(type === undefined || util.isString(type)))\n        throw TypeError(\"type must be a string\");\n\n    /* istanbul ignore if */\n    if (!util.isString(requestType))\n        throw TypeError(\"requestType must be a string\");\n\n    /* istanbul ignore if */\n    if (!util.isString(responseType))\n        throw TypeError(\"responseType must be a string\");\n\n    ReflectionObject.call(this, name, options);\n\n    /**\n     * Method type.\n     * @type {string}\n     */\n    this.type = type || \"rpc\"; // toJSON\n\n    /**\n     * Request type.\n     * @type {string}\n     */\n    this.requestType = requestType; // toJSON, marker\n\n    /**\n     * Whether requests are streamed or not.\n     * @type {true|undefined}\n     */\n    this.requestStream = requestStream ? true : undefined; // toJSON\n\n    /**\n     * Response type.\n     * @type {string}\n     */\n    this.responseType = responseType; // toJSON\n\n    /**\n     * Whether responses are streamed or not.\n     * @type {true|undefined}\n     */\n    this.responseStream = responseStream ? true : undefined; // toJSON\n\n    /**\n     * gRPC-style method path.\n     * @type {string}\n     */\n    this.path = \"/\" + this.name;\n\n    /**\n     * Resolved request type.\n     * @type {Type|null}\n     */\n    this.resolvedRequestType = null;\n\n    /**\n     * Resolved response type.\n     * @type {Type|null}\n     */\n    this.resolvedResponseType = null;\n\n    /**\n     * Comment for this method\n     * @type {string|null}\n     */\n    this.comment = comment;\n\n    /**\n     * Options properly parsed into objects\n     * @type {Array.<Object.<string,*>>|undefined}\n     */\n    this.parsedOptions = parsedOptions;\n}\n\n/**\n * Method descriptor.\n * @interface IMethod\n * @property {string} [type=\"rpc\"] Method type\n * @property {string} requestType Request type\n * @property {string} responseType Response type\n * @property {boolean} [requestStream=false] Whether requests are streamed\n * @property {boolean} [responseStream=false] Whether responses are streamed\n * @property {Object.<string,*>} [options] Method options\n * @property {string|null} [comment] Method comment\n * @property {Array.<Object.<string,*>>} [parsedOptions] Method options properly parsed into objects\n */\n\n/**\n * Constructs a method from a method descriptor.\n * @param {string} name Method name\n * @param {IMethod} json Method descriptor\n * @returns {Method} Created method\n * @throws {TypeError} If arguments are invalid\n */\nMethod.fromJSON = function fromJSON(name, json) {\n    return new Method(name, json.type, json.requestType, json.responseType, json.requestStream, json.responseStream, json.options, json.comment, json.parsedOptions);\n};\n\n/**\n * Converts this method to a method descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IMethod} Method descriptor\n */\nMethod.prototype.toJSON = function toJSON(toJSONOptions) {\n    var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n    return util.toObject([\n        \"type\"           , this.type !== \"rpc\" && /* istanbul ignore next */ this.type || undefined,\n        \"requestType\"    , this.requestType,\n        \"requestStream\"  , this.requestStream,\n        \"responseType\"   , this.responseType,\n        \"responseStream\" , this.responseStream,\n        \"options\"        , this.options,\n        \"comment\"        , keepComments ? this.comment : undefined,\n        \"parsedOptions\"  , this.parsedOptions,\n    ]);\n};\n\n/**\n * @override\n */\nMethod.prototype.resolve = function resolve() {\n\n    /* istanbul ignore if */\n    if (this.resolved)\n        return this;\n\n    if (this.parent) {\n        var serviceName = this.parent.fullName;\n        if (serviceName.charAt(0) === \".\")\n            serviceName = serviceName.substring(1);\n        this.path = \"/\" + serviceName + \"/\" + this.name;\n    } else\n        this.path = \"/\" + this.name;\n\n    this.resolvedRequestType = this.parent.lookupType(this.requestType);\n    this.resolvedResponseType = this.parent.lookupType(this.responseType);\n\n    return ReflectionObject.prototype.resolve.call(this);\n};\n","\"use strict\";\nmodule.exports = Service;\n\n// extends Namespace\nvar Namespace = require(\"./namespace\");\nService.prototype = Object.create(Namespace.prototype, {\n    constructor: {\n        value: Service,\n        writable: true,\n        enumerable: false,\n        configurable: true\n    }\n});\nService.className = \"Service\";\n\nvar Method = require(\"./method\"),\n    util   = require(\"./util\"),\n    rpc    = require(\"./rpc\");\n\n/**\n * Constructs a new service instance.\n * @classdesc Reflected service.\n * @extends NamespaceBase\n * @constructor\n * @param {string} name Service name\n * @param {Object.<string,*>} [options] Service options\n * @throws {TypeError} If arguments are invalid\n */\nfunction Service(name, options) {\n    Namespace.call(this, name, options);\n\n    /**\n     * Service methods.\n     * @type {Object.<string,Method>}\n     */\n    this.methods = {}; // toJSON, marker\n\n    /**\n     * Cached methods as an array.\n     * @type {Method[]|null}\n     * @private\n     */\n    this._methodsArray = null;\n}\n\n/**\n * Service descriptor.\n * @interface IService\n * @extends INamespace\n * @property {string} [edition] Edition\n * @property {Object.<string,IMethod>} methods Method descriptors\n * @property {string|null} [comment] Service comment\n */\n\n/**\n * Constructs a service from a service descriptor.\n * @param {string} name Service name\n * @param {IService} json Service descriptor\n * @param {number} [depth] Current nesting depth, defaults to `0`\n * @returns {Service} Created service\n * @throws {TypeError} If arguments are invalid\n */\nService.fromJSON = function fromJSON(name, json, depth) {\n    if (depth === undefined)\n        depth = 0;\n    if (depth > util.recursionLimit)\n        throw Error(\"max depth exceeded\");\n    var service = new Service(name, json.options);\n    /* istanbul ignore else */\n    if (json.methods)\n        for (var names = Object.keys(json.methods), i = 0; i < names.length; ++i)\n            service.add(Method.fromJSON(names[i], json.methods[names[i]]));\n    if (json.nested)\n        service.addJSON(json.nested, depth);\n    if (json.edition)\n        service._edition = json.edition;\n    service.comment = json.comment;\n    service._defaultEdition = \"proto3\";  // For backwards-compatibility.\n    return service;\n};\n\n/**\n * Converts this service to a service descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IService} Service descriptor\n */\nService.prototype.toJSON = function toJSON(toJSONOptions) {\n    var inherited = Namespace.prototype.toJSON.call(this, toJSONOptions);\n    var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n    return util.toObject([\n        \"edition\" , this._editionToJSON(),\n        \"options\" , inherited && inherited.options || undefined,\n        \"methods\" , Namespace.arrayToJSON(this.methodsArray, toJSONOptions) || /* istanbul ignore next */ {},\n        \"nested\"  , inherited && inherited.nested || undefined,\n        \"comment\" , keepComments ? this.comment : undefined\n    ]);\n};\n\n/**\n * Methods of this service as an array for iteration.\n * @name Service#methodsArray\n * @type {Method[]}\n * @readonly\n */\nObject.defineProperty(Service.prototype, \"methodsArray\", {\n    get: function() {\n        return this._methodsArray || (this._methodsArray = util.toArray(this.methods));\n    }\n});\n\nfunction clearCache(service) {\n    service._methodsArray = null;\n    return service;\n}\n\n/**\n * @override\n */\nService.prototype.get = function get(name) {\n    return Object.prototype.hasOwnProperty.call(this.methods, name)\n        ? this.methods[name]\n        : Namespace.prototype.get.call(this, name);\n};\n\n/**\n * @override\n */\nService.prototype.resolveAll = function resolveAll() {\n    if (!this._needsRecursiveResolve) return this;\n\n    Namespace.prototype.resolve.call(this);\n    var methods = this.methodsArray;\n    for (var i = 0; i < methods.length; ++i)\n        methods[i].resolve();\n    return this;\n};\n\n/**\n * @override\n */\nService.prototype._resolveFeaturesRecursive = function _resolveFeaturesRecursive(edition) {\n    if (!this._needsRecursiveFeatureResolution) return this;\n\n    edition = this._edition || edition;\n\n    Namespace.prototype._resolveFeaturesRecursive.call(this, edition);\n    this.methodsArray.forEach(method => {\n        method._resolveFeaturesRecursive(edition);\n    });\n    return this;\n};\n\n/**\n * @override\n */\nService.prototype.add = function add(object) {\n    /* istanbul ignore if */\n    if (this.get(object.name))\n        throw Error(\"duplicate name '\" + object.name + \"' in \" + this);\n\n    if (object instanceof Method) {\n        if (object.name === \"__proto__\")\n            return this;\n        this.methods[object.name] = object;\n        object.parent = this;\n        return clearCache(this);\n    }\n    return Namespace.prototype.add.call(this, object);\n};\n\n/**\n * @override\n */\nService.prototype.remove = function remove(object) {\n    if (object instanceof Method) {\n\n        /* istanbul ignore if */\n        if (this.methods[object.name] !== object)\n            throw Error(object + \" is not a member of \" + this);\n\n        delete this.methods[object.name];\n        object.parent = null;\n        return clearCache(this);\n    }\n    return Namespace.prototype.remove.call(this, object);\n};\n\n/**\n * Creates a runtime service using the specified rpc implementation.\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n * @returns {rpc.Service} RPC service. Useful where requests and/or responses are streamed.\n */\nService.prototype.create = function create(rpcImpl, requestDelimited, responseDelimited) {\n    var rpcService = new rpc.Service(rpcImpl, requestDelimited, responseDelimited);\n    for (var i = 0, method; i < /* initializes */ this.methodsArray.length; ++i) {\n        var methodName = util.lcFirst((method = this._methodsArray[i]).resolve().name).replace(/[^$\\w_]/g, \"\");\n        rpcService[methodName] = (function(method, requestType, responseType) {\n            return function rpcMethod(request, callback) {\n                return rpc.Service.prototype.rpcCall.call(this, method, requestType, responseType, request, callback);\n            };\n        })(method, method.resolvedRequestType.ctor, method.resolvedResponseType.ctor);\n    }\n    return rpcService;\n};\n","\"use strict\";\nmodule.exports = Message;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new message instance.\n * @classdesc Abstract runtime message.\n * @constructor\n * @param {Properties<T>} [properties] Properties to set\n * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n * @template T extends object = object\n */\nfunction Message(properties) {\n    // not used internally\n    if (properties)\n        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n            if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                this[keys[i]] = properties[keys[i]];\n}\n\n/**\n * Reference to the reflected type.\n * @name Message.$type\n * @type {Type}\n * @readonly\n */\n\n/**\n * Reference to the reflected type.\n * @name Message#$type\n * @type {Type}\n * @readonly\n */\n\n/**\n * Creates a new message of this type using the specified properties.\n * @param {Object.<string,*>} [properties] Properties to set\n * @returns {T} Message instance\n * @template T extends Message<T>\n * @this Constructor<T>\n */\nMessage.create = function create(properties) {\n    return this.$type.create(properties);\n};\n\n/**\n * Encodes a message of this type.\n * @param {T|Object.<string,*>} message Message to encode\n * @param {Writer} [writer] Writer to use\n * @returns {Writer} Writer\n * @template T extends Message<T>\n * @this Constructor<T>\n */\nMessage.encode = function encode(message, writer) {\n    return this.$type.encode(message, writer);\n};\n\n/**\n * Encodes a message of this type preceeded by its length as a varint.\n * @param {T|Object.<string,*>} message Message to encode\n * @param {Writer} [writer] Writer to use\n * @returns {Writer} Writer\n * @template T extends Message<T>\n * @this Constructor<T>\n */\nMessage.encodeDelimited = function encodeDelimited(message, writer) {\n    return this.$type.encodeDelimited(message, writer);\n};\n\n/**\n * Decodes a message of this type.\n * @name Message.decode\n * @function\n * @param {Reader|Uint8Array} reader Reader or buffer to decode\n * @returns {T} Decoded message\n * @template T extends Message<T>\n * @this Constructor<T>\n */\nMessage.decode = function decode(reader) {\n    return this.$type.decode(reader);\n};\n\n/**\n * Decodes a message of this type preceeded by its length as a varint.\n * @name Message.decodeDelimited\n * @function\n * @param {Reader|Uint8Array} reader Reader or buffer to decode\n * @returns {T} Decoded message\n * @template T extends Message<T>\n * @this Constructor<T>\n */\nMessage.decodeDelimited = function decodeDelimited(reader) {\n    return this.$type.decodeDelimited(reader);\n};\n\n/**\n * Verifies a message of this type.\n * @name Message.verify\n * @function\n * @param {Object.<string,*>} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\nMessage.verify = function verify(message) {\n    return this.$type.verify(message);\n};\n\n/**\n * Creates a new message of this type from a plain object. Also converts values to their respective internal types.\n * @param {Object.<string,*>} object Plain object\n * @returns {T} Message instance\n * @template T extends Message<T>\n * @this Constructor<T>\n */\nMessage.fromObject = function fromObject(object) {\n    return this.$type.fromObject(object);\n};\n\n/**\n * Creates a plain object from a message of this type. Also converts values to other types if specified.\n * @param {T} message Message instance\n * @param {IConversionOptions} [options] Conversion options\n * @returns {Object.<string,*>} Plain object\n * @template T extends Message<T>\n * @this Constructor<T>\n */\nMessage.toObject = function toObject(message, options) {\n    return this.$type.toObject(message, options);\n};\n\n/**\n * Converts this message to JSON.\n * @returns {Object.<string,*>} JSON object\n */\nMessage.prototype.toJSON = function toJSON() {\n    return this.$type.toObject(this, util.toJSONOptions);\n};\n","\"use strict\";\nmodule.exports = decoder;\n\nvar Enum    = require(\"./enum\"),\n    types   = require(\"./types\"),\n    util    = require(\"./util\");\n\nfunction missing(field) {\n    return \"missing required '\" + field.name + \"'\";\n}\n\nfunction stringMethod(field) {\n    return field._features.utf8_validation === \"VERIFY\" ? \"stringVerify\" : \"string\";\n}\n\nfunction genPreserveUnknown(gen, ref) {\n    /* eslint-disable no-unexpected-multiline */\n    return gen\n        (\"if(!r.discardUnknown){\")\n            (\"util.makeProp(m,\\\"$unknowns\\\",false);\")\n            (\"(m.$unknowns||(m.$unknowns=[])).push(%s)\", ref)\n        (\"}\");\n    /* eslint-enable no-unexpected-multiline */\n}\n\n/**\n * Generates a decoder specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nfunction decoder(mtype) {\n    /* eslint-disable no-unexpected-multiline */\n    var hasMapField = false,\n        needsValueVar = false,\n        i = 0;\n    for (; i < mtype.fieldsArray.length; ++i) {\n        var pfield = mtype._fieldsArray[i];\n        if (pfield.map)\n            hasMapField = true;\n        if (pfield.resolvedType instanceof Enum || !pfield.repeated && !pfield.map && !pfield.hasPresence)\n            needsValueVar = true;\n    }\n    var gen = util.codegen([\"r\", \"l\", \"z\", \"q\", \"g\"])\n    (\"if(!(r instanceof Reader))\")\n        (\"r=Reader.create(r)\")\n    (\"if(q===undefined)q=0\")\n    (\"if(q>Reader.recursionLimit)\")\n        (\"throw Error(\\\"max depth exceeded\\\")\")\n    (\"var c=l===undefined?r.len:r.pos+l,m=g||new C\" + (hasMapField ? \",k,v\" : needsValueVar ? \",v\" : \"\"))\n    (\"while(r.pos<c){\")\n        (\"var s=r.pos\")\n        (\"var t=r.tag()\")\n        (\"if(t===z){\")\n            (\"z=undefined\")\n            (\"break\")\n        (\"}\");\n    if (mtype.fieldsArray.length) gen\n        (\"var u=t&7\")\n        (\"switch(t>>>=3){\");\n    for (i = 0; i < /* initializes */ mtype.fieldsArray.length; ++i) {\n        var field  = mtype._fieldsArray[i].resolve(),\n            type   = field.resolvedType instanceof Enum ? \"int32\" : field.type,\n            ref    = \"m\" + util.safeProp(field.name),\n            closed = field.resolvedType instanceof Enum && field.resolvedType._features.enum_type === \"CLOSED\";\n\n        // Map fields\n        if (field.map) {\n            gen\n            (\"case %i:{\", field.id)\n                (\"if(u!==2)\")\n                    (\"break\");\n            if (!closed) gen\n                (\"if(%s===util.emptyObject)\", ref)\n                    (\"%s={}\", ref);\n            gen\n                (\"var c2=r.uint32()+r.pos\");\n\n            if (types.defaults[field.keyType] !== undefined) gen\n                (\"k=%j\", types.defaults[field.keyType]);\n            else gen\n                (\"k=null\");\n\n            if (types.long[type] !== undefined) gen\n                (\"v=util.Long?util.Long.fromNumber(0,%j):0\", type === \"uint64\" || type === \"fixed64\");\n            else if (types.defaults[type] !== undefined) gen\n                (\"v=%j\", types.defaults[type]);\n            else gen\n                (\"v=null\");\n\n            gen\n                (\"while(r.pos<c2){\")\n                    (\"var t2=r.tag()\")\n                    (\"u=t2&7\")\n                    (\"switch(t2>>>=3){\")\n                        (\"case 1:\")\n                            (\"if(u!==%i)\", types.mapKey[field.keyType])\n                                (\"break\")\n                            (\"k=r.%s()\", field.keyType === \"string\" ? stringMethod(field) : field.keyType)\n                            (\"continue\")\n                        (\"case 2:\")\n                            (\"if(u!==%i)\", types.basic[type] === undefined ? 2 : types.basic[type])\n                                (\"break\");\n\n            if (types.basic[type] === undefined) gen\n                            (\"v=types[%i].decode(r,r.uint32(),undefined,q+1,v)\", i); // can't be groups\n            else gen\n                            (\"v=r.%s()\", type === \"string\" ? stringMethod(field) : type);\n\n            gen\n                            (\"continue\")\n                    (\"}\")\n                    (\"r.skipType(u,q,t2)\")\n                (\"}\");\n\n            if (closed) { gen\n                (\"if(types[%i].valuesById[v]===undefined){\", i);\n                    genPreserveUnknown(gen, \"r.raw(s,r.pos)\")\n                    (\"continue\")\n                (\"}\")\n                (\"if(%s===util.emptyObject)\", ref)\n                    (\"%s={}\", ref);\n            }\n\n            var val = types.basic[type] === undefined ? \"v||new types[\" + i + \"].ctor\" : \"v\";\n            if (types.long[field.keyType] !== undefined) gen\n                (\"%s[typeof k===\\\"object\\\"?util.longToHash(k):k]=%s\", ref, val);\n            else {\n                if (field.keyType === \"string\") gen\n                (\"if(k===\\\"__proto__\\\")\")\n                    (\"util.makeProp(%s,k)\", ref);\n                gen\n                (\"%s[k]=%s\", ref, val);\n            }\n\n        // Repeated fields\n        } else if (field.repeated) { gen\n            (\"case %i:\", field.id)\n            (\"{\");\n\n            // Packable (always check for forward and backward compatiblity)\n            if (types.packed[type] !== undefined) {\n                gen\n                (\"if(u===2){\");\n                if (closed) {\n                    gen\n                    (\"var c2=r.uint32()+r.pos\")\n                    (\"while(r.pos<c2){\")\n                        (\"s=r.pos\")\n                        (\"v=r.%s()\", type)\n                        (\"if(types[%i].valuesById[v]!==undefined){\", i)\n                            (\"if(!(%s&&%s.length))\", ref, ref)\n                                (\"%s=[]\", ref)\n                            (\"%s.push(v)\", ref)\n                        (\"}else\");\n                            genPreserveUnknown(gen, \"util.rawField(\" + field.id + \",0,r.raw(s,r.pos))\")\n                    (\"}\");\n                } else gen\n                    (\"if(!(%s&&%s.length))\", ref, ref)\n                        (\"%s=[]\", ref)\n                    (\"r.%ss(%s)\", type, ref);\n                gen\n                    (\"continue\")\n                (\"}\");\n            }\n\n            // Non-packed\n            gen\n                (\"if(u!==%i)\", types.basic[type] === undefined ? field.delimited ? 3 : 2 : types.basic[type])\n                    (\"break\");\n            if (!closed) gen\n                (\"if(!(%s&&%s.length))\", ref, ref)\n                    (\"%s=[]\", ref);\n            if (types.basic[type] === undefined) {\n                if (field.delimited) gen\n                    (\"%s.push(types[%i].decode(r,undefined,%i,q+1))\", ref, i, field.id * 8 + 4);\n                else gen\n                    (\"%s.push(types[%i].decode(r,r.uint32(),undefined,q+1))\", ref, i);\n            } else if (closed) { gen\n                    (\"v=r.%s()\", type)\n                    (\"if(types[%i].valuesById[v]!==undefined){\", i)\n                        (\"if(!(%s&&%s.length))\", ref, ref)\n                            (\"%s=[]\", ref)\n                        (\"%s.push(v)\", ref)\n                    (\"}else\");\n                        genPreserveUnknown(gen, \"r.raw(s,r.pos)\");\n            } else gen\n                    (\"%s.push(r.%s())\", ref, type === \"string\" ? stringMethod(field) : type);\n\n        // Non-repeated\n        } else if (types.basic[type] === undefined) {\n            gen\n            (\"case %i:{\", field.id)\n                (\"if(u!==%i)\", field.delimited ? 3 : 2)\n                    (\"break\");\n            if (field.delimited) gen\n                (\"%s=types[%i].decode(r,undefined,%i,q+1,%s)\", ref, i, field.id * 8 + 4, ref);\n            else gen\n                (\"%s=types[%i].decode(r,r.uint32(),undefined,q+1,%s)\", ref, i, ref);\n        }\n        else if (field.hasPresence) {\n            gen\n            (\"case %i:{\", field.id)\n                (\"if(u!==%i)\", types.basic[type])\n                    (\"break\");\n            if (closed) { gen\n                (\"v=r.%s()\", type)\n                (\"if(types[%i].valuesById[v]!==undefined){\", i)\n                    (\"%s=v\", ref);\n                if (field.partOf) gen\n                    (\"m%s=%j\", util.safeProp(field.partOf.name), field.name);\n                gen\n                (\"}else\");\n                    genPreserveUnknown(gen, \"r.raw(s,r.pos)\");\n            } else gen\n                (\"%s=r.%s()\", ref, type === \"string\" ? stringMethod(field) : type);\n        } else {\n            gen\n            (\"case %i:{\", field.id)\n                (\"if(u!==%i)\", types.basic[type])\n                    (\"break\");\n            if (closed) { gen\n                (\"v=r.%s()\", type)\n                (\"if(types[%i].valuesById[v]!==undefined){\", i)\n                    (\"if(v!==%j)\", field.typeDefault)\n                        (\"%s=v\", ref)\n                    (\"else\")\n                        (\"delete %s\", ref)\n                (\"}else{\");\n                    genPreserveUnknown(gen, \"r.raw(s,r.pos)\")\n                (\"}\");\n            } else {\n                if (field.resolvedType instanceof Enum && field.typeDefault !== 0) gen\n                    // TODO: Protoc rejects open enums whose first value is not zero.\n                    // We should do the same, but for v8 this would be a regression.\n                    (\"if((v=r.%s())!==%j)\", type, field.typeDefault);\n                else if (type === \"string\") gen\n                    (\"if((v=r.%s()).length)\", stringMethod(field));\n                else if (type === \"bytes\") gen\n                    (\"if((v=r.%s()).length)\", type);\n                else if (types.long[type] !== undefined) gen\n                    (\"if(typeof(v=r.%s())===\\\"object\\\"?v.low||v.high:v!==0)\", type);\n                else if (type === \"double\" || type === \"float\") gen\n                    (\"if(!Object.is(v=r.%s(),0))\", type);\n                else gen\n                    (\"if(v=r.%s())\", type);\n                gen\n                        (\"%s=v\", ref)\n                    (\"else\")\n                        (\"delete %s\", ref); // rare/odd case: later default clears earlier non-default\n            }\n        }\n        if (field.partOf && !closed) gen\n                (\"m%s=%j\", util.safeProp(field.partOf.name), field.name);\n        gen\n                (\"continue\")\n            (\"}\");\n    }\n    if (i) gen\n        (\"}\");\n    // Unknown fields\n    gen\n        (\"r.skipType(%s,q,t)\", i ? \"u\" : \"t&7\");\n    genPreserveUnknown(gen, \"r.raw(s,r.pos)\")\n    (\"}\")\n    (\"if(z!==undefined)\")\n        (\"throw Error(\\\"missing end group\\\")\");\n\n    // Field presence\n    for (i = 0; i < mtype._fieldsArray.length; ++i) {\n        var rfield = mtype._fieldsArray[i];\n        if (rfield.required) gen\n    (\"if(!Object.hasOwnProperty.call(m,%j))\", rfield.name)\n        (\"throw util.ProtocolError(%j,{instance:m})\", missing(rfield));\n    }\n\n    return gen\n    (\"return m\");\n    /* eslint-enable no-unexpected-multiline */\n}\n","\"use strict\";\nmodule.exports = verifier;\n\nvar Enum      = require(\"./enum\"),\n    util      = require(\"./util\");\n\nfunction invalid(field, expected) {\n    return field.name + \": \" + expected + (field.repeated && expected !== \"array\" ? \"[]\" : field.map && expected !== \"object\" ? \"{k:\"+field.keyType+\"}\" : \"\") + \" expected\";\n}\n\n/**\n * Generates a partial value verifier.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {number} fieldIndex Field index\n * @param {string} ref Variable reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genVerifyValue(gen, field, fieldIndex, ref) {\n    /* eslint-disable no-unexpected-multiline */\n    var resolvedType = field.resolvedType;\n    if (resolvedType) {\n        if (resolvedType instanceof Enum) {\n            if (resolvedType._features.enum_type === \"CLOSED\") { gen\n                (\"switch(%s){\", ref)\n                    (\"default:\")\n                        (\"return%j\", invalid(field, \"enum value\"));\n                for (var keys = Object.keys(resolvedType.values), j = 0; j < keys.length; ++j) gen\n                    (\"case %i:\", resolvedType.values[keys[j]]);\n                gen\n                        (\"break\")\n                (\"}\");\n            } else gen\n                (\"if(typeof %s!==\\\"number\\\"||(%s|0)!==%s)\", ref, ref, ref)\n                    (\"return%j\", invalid(field, \"enum value\"));\n        } else {\n            gen\n            (\"{\")\n                (\"var e=types[%i].verify(%s,q+1);\", fieldIndex, ref)\n                (\"if(e)\")\n                    (\"return%j+e\", field.name + \".\")\n            (\"}\");\n        }\n    } else {\n        switch (field.type) {\n            case \"int32\":\n            case \"uint32\":\n            case \"sint32\":\n            case \"fixed32\":\n            case \"sfixed32\": gen\n                (\"if(!util.isInteger(%s))\", ref)\n                    (\"return%j\", invalid(field, \"integer\"));\n                break;\n            case \"int64\":\n            case \"uint64\":\n            case \"sint64\":\n            case \"fixed64\":\n            case \"sfixed64\": gen\n                (\"if(!util.isInteger(%s)&&!(%s&&util.isInteger(%s.low)&&util.isInteger(%s.high)))\", ref, ref, ref, ref)\n                    (\"return%j\", invalid(field, \"integer|Long\"));\n                break;\n            case \"float\":\n            case \"double\": gen\n                (\"if(typeof %s!==\\\"number\\\")\", ref)\n                    (\"return%j\", invalid(field, \"number\"));\n                break;\n            case \"bool\": gen\n                (\"if(typeof %s!==\\\"boolean\\\")\", ref)\n                    (\"return%j\", invalid(field, \"boolean\"));\n                break;\n            case \"string\": gen\n                (\"if(!util.isString(%s))\", ref)\n                    (\"return%j\", invalid(field, \"string\"));\n                break;\n            case \"bytes\": gen\n                (\"if(!(%s&&typeof %s.length===\\\"number\\\"||util.isString(%s)))\", ref, ref, ref)\n                    (\"return%j\", invalid(field, \"buffer\"));\n                break;\n        }\n    }\n    return gen;\n    /* eslint-enable no-unexpected-multiline */\n}\n\n/**\n * Generates a partial key verifier.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {string} ref Variable reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genVerifyKey(gen, field, ref) {\n    /* eslint-disable no-unexpected-multiline */\n    switch (field.keyType) {\n        case \"int32\":\n        case \"uint32\":\n        case \"sint32\":\n        case \"fixed32\":\n        case \"sfixed32\": gen\n            (\"if(!util.key32Re.test(%s))\", ref)\n                (\"return%j\", invalid(field, \"integer key\"));\n            break;\n        case \"int64\":\n        case \"uint64\":\n        case \"sint64\":\n        case \"fixed64\":\n        case \"sfixed64\": gen\n            (\"if(!util.key64Re.test(%s))\", ref) // see comment above: x is ok, d is not\n                (\"return%j\", invalid(field, \"integer|Long key\"));\n            break;\n        case \"bool\": gen\n            (\"if(!util.key2Re.test(%s))\", ref)\n                (\"return%j\", invalid(field, \"boolean key\"));\n            break;\n    }\n    return gen;\n    /* eslint-enable no-unexpected-multiline */\n}\n\n/**\n * Generates a verifier specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nfunction verifier(mtype) {\n    /* eslint-disable no-unexpected-multiline */\n\n    var gen = util.codegen([\"m\", \"q\"])\n    (\"if(typeof m!==\\\"object\\\"||m===null)\")\n        (\"return%j\", \"object expected\")\n    (\"if(q===undefined)q=0\")\n    (\"if(q>util.recursionLimit)\")\n        (\"return%j\", \"max depth exceeded\");\n    var oneofs = mtype.oneofsArray,\n        seenFirstField = {};\n    if (oneofs.length) gen\n    (\"var p={}\");\n\n    for (var i = 0; i < /* initializes */ mtype.fieldsArray.length; ++i) {\n        var field = mtype._fieldsArray[i].resolve(),\n            ref   = \"m\" + util.safeProp(field.name);\n\n        if (field.optional) gen\n        (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j)){\", ref, field.name); // !== undefined && !== null\n\n        // map fields\n        if (field.map) { gen\n            (\"if(!util.isObject(%s))\", ref)\n                (\"return%j\", invalid(field, \"object\"))\n            (\"var k=Object.keys(%s)\", ref)\n            (\"for(var i=0;i<k.length;++i){\");\n                genVerifyKey(gen, field, \"k[i]\");\n                genVerifyValue(gen, field, i, ref + \"[k[i]]\")\n            (\"}\");\n\n        // repeated fields\n        } else if (field.repeated) { gen\n            (\"if(!Array.isArray(%s))\", ref)\n                (\"return%j\", invalid(field, \"array\"))\n            (\"for(var i=0;i<%s.length;++i){\", ref);\n                genVerifyValue(gen, field, i, ref + \"[i]\")\n            (\"}\");\n\n        // required or present fields\n        } else {\n            if (field.partOf) {\n                var oneofProp = util.safeProp(field.partOf.name);\n                if (seenFirstField[field.partOf.name] === 1) gen\n            (\"if(p%s===1)\", oneofProp)\n                (\"return%j\", field.partOf.name + \": multiple values\");\n                seenFirstField[field.partOf.name] = 1;\n                gen\n            (\"p%s=1\", oneofProp);\n            }\n            genVerifyValue(gen, field, i, ref);\n        }\n        if (field.optional) gen\n        (\"}\");\n    }\n    return gen\n    (\"return null\");\n    /* eslint-enable no-unexpected-multiline */\n}\n","\"use strict\";\n/**\n * Runtime message from/to plain object converters.\n * @namespace\n */\nvar converter = exports;\n\nvar Enum  = require(\"./enum\"),\n    types = require(\"./types\"),\n    util  = require(\"./util\");\n\n/**\n * Generates a partial value fromObject conveter.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {number} fieldIndex Field index\n * @param {string} prop Property reference\n * @param {string} [dstProp] Repeated destination property reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genValuePartial_fromObject(gen, field, fieldIndex, prop, dstProp) {\n    /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n    if (field.resolvedType) {\n        if (field.resolvedType instanceof Enum) {\n            var dst = dstProp\n                ? \"m\" + dstProp + \"[m\" + dstProp + \".length]\"\n                : \"m\" + prop;\n            gen\n            (\"switch(d%s){\", prop);\n            for (var values = field.resolvedType.values, keys = Object.keys(values), i = 0; i < keys.length; ++i) { gen\n                (\"case%j:\", keys[i])\n                (\"case %i:\", values[keys[i]])\n                    (\"%s=%j\", dst, values[keys[i]])\n                    (\"break\");\n            }\n            gen\n                (\"default:\");\n            if (field.resolvedType._features.enum_type !== \"CLOSED\") {\n                gen\n                    (\"if(typeof d%s===\\\"number\\\"&&(d%s|0)===d%s)\", prop, prop, prop)\n                        (\"%s=d%s\", dst, prop);\n            }\n            gen\n            (\"}\");\n        } else gen\n            (\"if(!util.isObject(d%s))\", prop)\n                (\"throw TypeError(%j)\", field.fullName + \": object expected\")\n            (\"m%s=types[%i].fromObject(d%s,q+1)\", prop, fieldIndex, prop);\n    } else {\n        var isUnsigned = false;\n        switch (field.type) {\n            case \"double\":\n            case \"float\": gen\n                (\"m%s=Number(d%s)\", prop, prop); // also catches \"NaN\", \"Infinity\"\n                break;\n            case \"uint32\":\n            case \"fixed32\": gen\n                (\"m%s=d%s>>>0\", prop, prop);\n                break;\n            case \"int32\":\n            case \"sint32\":\n            case \"sfixed32\": gen\n                (\"m%s=d%s|0\", prop, prop);\n                break;\n            case \"uint64\":\n            case \"fixed64\":\n                isUnsigned = true;\n                // eslint-disable-next-line no-fallthrough\n            case \"int64\":\n            case \"sint64\":\n            case \"sfixed64\": gen\n                (\"if(util.Long)\")\n                    (\"m%s=util.Long.fromValue(d%s,%j)\", prop, prop, isUnsigned)\n                (\"else if(typeof d%s===\\\"string\\\")\", prop)\n                    (\"m%s=parseInt(d%s,10)\", prop, prop)\n                (\"else if(typeof d%s===\\\"number\\\")\", prop)\n                    (\"m%s=d%s\", prop, prop)\n                (\"else if(typeof d%s===\\\"object\\\")\", prop)\n                    (\"m%s=new util.LongBits(d%s.low>>>0,d%s.high>>>0).toNumber(%s)\", prop, prop, prop, isUnsigned ? \"true\" : \"\");\n                break;\n            case \"bytes\": gen\n                (\"if(typeof d%s===\\\"string\\\")\", prop)\n                    (\"util.base64.decode(d%s,m%s=util.newBuffer(util.base64.length(d%s)),0)\", prop, prop, prop)\n                (\"else if(d%s.length>=0)\", prop)\n                    (\"m%s=d%s\", prop, prop);\n                break;\n            case \"string\": gen\n                (\"m%s=String(d%s)\", prop, prop);\n                break;\n            case \"bool\": gen\n                (\"m%s=Boolean(d%s)\", prop, prop);\n                break;\n            /* default: gen\n                (\"m%s=d%s\", prop, prop);\n                break; */\n        }\n    }\n    return gen;\n    /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n}\n\n/**\n * Generates a plain object to runtime message converter specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nconverter.fromObject = function fromObject(mtype) {\n    /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n    var fields = mtype.fieldsArray;\n    var gen = util.codegen([\"d\", \"q\"])\n    (\"if(d instanceof C)\")\n        (\"return d\")\n    (\"if(!util.isObject(d))\")\n        (\"throw TypeError(%j)\", mtype.fullName + \": object expected\")\n    (\"if(q===undefined)q=0\")\n    (\"if(q>util.recursionLimit)\")\n        (\"throw Error(\\\"max depth exceeded\\\")\");\n    if (!fields.length) return gen\n    (\"return new C\");\n    gen\n    (\"var m=new C\");\n    for (var i = 0; i < fields.length; ++i) {\n        var field  = fields[i].resolve(),\n            prop   = util.safeProp(field.name),\n            implicitPresence = !field.hasPresence && !field.repeated && !field.map\n                && (field.resolvedType instanceof Enum || types.basic[field.type] !== undefined);\n\n        // Map fields\n        if (field.map) { gen\n    (\"if(d%s){\", prop)\n        (\"if(!util.isObject(d%s))\", prop)\n            (\"throw TypeError(%j)\", field.fullName + \": object expected\")\n        (\"m%s={}\", prop)\n        (\"for(var ks=Object.keys(d%s),i=0;i<ks.length;++i){\", prop);\n            gen\n        (\"if(ks[i]===\\\"__proto__\\\")\")\n            (\"util.makeProp(m%s,ks[i])\", prop);\n            genValuePartial_fromObject(gen, field, /* not sorted */ i, prop + \"[ks[i]]\")\n        (\"}\")\n    (\"}\");\n\n        // Repeated fields\n        } else if (field.repeated) { gen\n    (\"if(d%s){\", prop)\n        (\"if(!Array.isArray(d%s))\", prop)\n            (\"throw TypeError(%j)\", field.fullName + \": array expected\");\n            if (field.resolvedType instanceof Enum) gen\n        (\"m%s=[]\", prop);\n            else gen\n        (\"m%s=Array(d%s.length)\", prop, prop);\n            gen\n        (\"for(var i=0;i<d%s.length;++i){\", prop);\n            genValuePartial_fromObject(gen, field, /* not sorted */ i, prop + \"[i]\", field.resolvedType instanceof Enum ? prop : undefined)\n        (\"}\")\n    (\"}\");\n\n        // Non-repeated fields\n        } else {\n            if (!(field.resolvedType instanceof Enum)) gen // no need to test for null/undefined if an enum (uses switch)\n    (\"if(d%s!=null){\", prop); // !== undefined && !== null\n            if (implicitPresence) {\n                if (field.resolvedType instanceof Enum) gen\n    (\"if(d%s!==%j&&(typeof d%s!==\\\"string\\\"||types[%i].values[d%s]!==%j)){\", prop, field.typeDefault, prop, i, prop, field.typeDefault);\n                else if (field.type === \"string\") gen\n    (\"if(typeof d%s!==\\\"string\\\"||d%s.length){\", prop, prop);\n                else if (field.type === \"bytes\") gen\n    (\"if(d%s.length){\", prop);\n                else if (field.type === \"bool\") gen\n    (\"if(d%s){\", prop);\n                else if (field.type === \"double\" || field.type === \"float\") gen\n    (\"if(!Object.is(Number(d%s),0)){\", prop);\n                else if (types.long[field.type] !== undefined) gen\n    (\"if(typeof d%s===\\\"object\\\"?d%s.low||d%s.high:Number(d%s)!==0){\", prop, prop, prop, prop);\n                else gen\n    (\"if(Number(d%s)!==0){\", prop);\n            }\n        genValuePartial_fromObject(gen, field, /* not sorted */ i, prop);\n            if (implicitPresence) gen\n    (\"}\");\n            if (!(field.resolvedType instanceof Enum)) gen\n    (\"}\");\n        }\n    } return gen\n    (\"return m\");\n    /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n};\n\n/**\n * Generates a partial value toObject converter.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {number} fieldIndex Field index\n * @param {string} dstProp Destination property reference\n * @param {string} [srcProp] Source property reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genValuePartial_toObject(gen, field, fieldIndex, dstProp, srcProp) {\n    /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n    if (!srcProp)\n        srcProp = dstProp;\n    if (field.resolvedType) {\n        if (field.resolvedType instanceof Enum) gen\n            (\"d%s=o.enums===String?(types[%i].values[m%s]===undefined?m%s:types[%i].values[m%s]):m%s\", dstProp, fieldIndex, srcProp, srcProp, fieldIndex, srcProp, srcProp);\n        else gen\n            (\"d%s=types[%i].toObject(m%s,o,q+1)\", dstProp, fieldIndex, srcProp);\n    } else {\n        var isUnsigned = false;\n        switch (field.type) {\n            case \"double\":\n            case \"float\": gen\n            (\"d%s=o.json&&!isFinite(m%s)?String(m%s):m%s\", dstProp, srcProp, srcProp, srcProp);\n                break;\n            case \"uint64\":\n            case \"fixed64\":\n                isUnsigned = true;\n                // eslint-disable-next-line no-fallthrough\n            case \"int64\":\n            case \"sint64\":\n            case \"sfixed64\": gen\n            (\"if(typeof BigInt!==\\\"undefined\\\"&&o.longs===BigInt)\")\n                (\"d%s=typeof m%s===\\\"number\\\"?BigInt(m%s):util.Long.fromBits(m%s.low>>>0,m%s.high>>>0,%j).toBigInt()\", dstProp, srcProp, srcProp, srcProp, srcProp, isUnsigned)\n            (\"else if(typeof m%s===\\\"number\\\")\", srcProp)\n                (\"d%s=o.longs===String?String(m%s):m%s\", dstProp, srcProp, srcProp)\n            (\"else\") // Long-like\n                (\"d%s=o.longs===String?util.Long.prototype.toString.call(m%s):o.longs===Number?new util.LongBits(m%s.low>>>0,m%s.high>>>0).toNumber(%s):m%s\", dstProp, srcProp, srcProp, srcProp, isUnsigned ? \"true\": \"\", srcProp);\n                break;\n            case \"bytes\": gen\n            (\"d%s=o.bytes===String?util.base64.encode(m%s,0,m%s.length):o.bytes===Array?Array.prototype.slice.call(m%s):m%s\", dstProp, srcProp, srcProp, srcProp, srcProp);\n                break;\n            default: gen\n            (\"d%s=m%s\", dstProp, srcProp);\n                break;\n        }\n    }\n    return gen;\n    /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n}\n\n/**\n * Generates a runtime message to plain object converter specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nconverter.toObject = function toObject(mtype) {\n    /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n    var fields = mtype.fieldsArray.slice().sort(util.compareFieldsById);\n    if (!fields.length)\n        return util.codegen()(\"return {}\");\n    var gen = util.codegen([\"m\", \"o\", \"q\"])\n    (\"if(!o)\")\n        (\"o={}\")\n    (\"if(q===undefined)q=0\")\n    (\"if(q>util.recursionLimit)\")\n        (\"throw Error(\\\"max depth exceeded\\\")\")\n    (\"var d={}\");\n\n    var repeatedFields = [],\n        mapFields = [],\n        normalFields = [],\n        i = 0;\n    for (; i < fields.length; ++i)\n        if (!fields[i].partOf)\n            ( fields[i].resolve().repeated ? repeatedFields\n            : fields[i].map ? mapFields\n            : normalFields).push(fields[i]);\n\n    if (repeatedFields.length) { gen\n    (\"if(o.arrays||o.defaults){\");\n        for (i = 0; i < repeatedFields.length; ++i) gen\n        (\"d%s=[]\", util.safeProp(repeatedFields[i].name));\n        gen\n    (\"}\");\n    }\n\n    if (mapFields.length) { gen\n    (\"if(o.objects||o.defaults){\");\n        for (i = 0; i < mapFields.length; ++i) gen\n        (\"d%s={}\", util.safeProp(mapFields[i].name));\n        gen\n    (\"}\");\n    }\n\n    if (normalFields.length) { gen\n    (\"if(o.defaults){\");\n        for (i = 0; i < normalFields.length; ++i) {\n            var field = normalFields[i],\n                prop  = util.safeProp(field.name);\n            if (field.resolvedType instanceof Enum) gen\n        (\"d%s=o.enums===String?%j:%j\", prop, field.resolvedType.valuesById[field.typeDefault], field.typeDefault);\n            else if (field.long) gen\n        (\"if(util.Long){\")\n            (\"var n=new util.Long(%i,%i,%j)\", field.typeDefault.low, field.typeDefault.high, field.typeDefault.unsigned)\n            (\"d%s=o.longs===String?n.toString():o.longs===Number?n.toNumber():typeof BigInt!==\\\"undefined\\\"&&o.longs===BigInt?n.toBigInt():n\", prop)\n        (\"}else\")\n            (\"d%s=o.longs===String?%j:typeof BigInt!==\\\"undefined\\\"&&o.longs===BigInt?BigInt(%j):%i\", prop, field.typeDefault.toString(), field.typeDefault.toString(), field.typeDefault.toNumber());\n            else if (field.bytes) {\n                var arrayDefault = Array.prototype.slice.call(field.typeDefault);\n                gen\n        (\"if(o.bytes===String)d%s=%j\", prop, util.base64.encode(field.typeDefault, 0, field.typeDefault.length))\n        (\"else{\")\n            (\"d%s=%j\", prop, arrayDefault)\n            (\"if(o.bytes!==Array)d%s=util.newBuffer(d%s)\", prop, prop)\n        (\"}\");\n            } else if ((field.type === \"double\" || field.type === \"float\") && typeof field.typeDefault === \"number\"\n                    && (!isFinite(field.typeDefault) || Object.is(field.typeDefault, -0))) gen\n        (\"d%s=%f\", prop, field.typeDefault)\n        (\"if(o.json&&!isFinite(d%s))d%s=String(d%s)\", prop, prop, prop);\n            else gen\n        (\"d%s=%j\", prop, field.typeDefault); // also messages (=null)\n        } gen\n    (\"}\");\n    }\n    var hasKs2 = false;\n    for (i = 0; i < fields.length; ++i) {\n        var field = fields[i],\n            index = mtype._fieldsArray.indexOf(field),\n            prop  = util.safeProp(field.name);\n        if (field.map) {\n            if (!hasKs2) { hasKs2 = true; gen\n    (\"var ks2\");\n            } gen\n    (\"if(m%s&&(ks2=Object.keys(m%s)).length){\", prop, prop)\n        (\"d%s={}\", prop);\n            var longKey = types.long[field.keyType] !== undefined,\n                srcProp = prop + \"[ks2[j]]\";\n            gen\n        (\"for(var j=0;j<ks2.length;++j){\");\n            if (longKey) gen\n            (\"var k2=util.longFromKey(ks2[j],%j).toString()\", field.keyType === \"uint64\" || field.keyType === \"fixed64\");\n            gen\n        (\"if(ks2[j]===\\\"__proto__\\\")\")\n            (\"util.makeProp(d%s,ks2[j])\", prop);\n            genValuePartial_toObject(gen, field, /* sorted */ index, longKey ? prop + \"[k2]\" : srcProp, srcProp)\n        (\"}\");\n        } else if (field.repeated) { gen\n    (\"if(m%s&&m%s.length){\", prop, prop)\n        (\"d%s=Array(m%s.length)\", prop, prop)\n        (\"for(var j=0;j<m%s.length;++j){\", prop);\n            genValuePartial_toObject(gen, field, /* sorted */ index, prop + \"[j]\")\n        (\"}\");\n        } else { gen\n    (\"if(m%s!=null&&Object.hasOwnProperty.call(m,%j)){\", prop, field.name); // !== undefined && !== null\n        genValuePartial_toObject(gen, field, /* sorted */ index, prop);\n        if (field.partOf && !field.partOf.isProto3Optional) gen\n        (\"if(o.oneofs)\")\n            (\"d%s=%j\", util.safeProp(field.partOf.name), field.name);\n        }\n        gen\n    (\"}\");\n    }\n    return gen\n    (\"return d\");\n    /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n};\n","\"use strict\";\n\n/**\n * Wrappers for common types.\n * @type {Object.<string,IWrapper>}\n * @const\n */\nvar wrappers = exports;\n\nvar Message = require(\"./message\"),\n    util    = require(\"./util/minimal\");\n\n/**\n * From object converter part of an {@link IWrapper}.\n * @typedef WrapperFromObjectConverter\n * @type {function}\n * @param {Object.<string,*>} object Plain object\n * @returns {Message<{}>} Message instance\n * @this Type\n */\n\n/**\n * To object converter part of an {@link IWrapper}.\n * @typedef WrapperToObjectConverter\n * @type {function}\n * @param {Message<{}>} message Message instance\n * @param {IConversionOptions} [options] Conversion options\n * @returns {Object.<string,*>} Plain object\n * @this Type\n */\n\n/**\n * Common type wrapper part of {@link wrappers}.\n * @interface IWrapper\n * @property {WrapperFromObjectConverter} [fromObject] From object converter\n * @property {WrapperToObjectConverter} [toObject] To object converter\n */\n\n// Custom wrapper for Any\nwrappers[\".google.protobuf.Any\"] = {\n\n    fromObject: function(object, depth) {\n\n        // unwrap value type if mapped\n        if (object && object[\"@type\"]) {\n             // Only use fully qualified type name after the last '/'\n            var name = object[\"@type\"].substring(object[\"@type\"].lastIndexOf(\"/\") + 1);\n            var type = this.lookup(name, [ this.constructor ]);\n            /* istanbul ignore else */\n            if (type) {\n                // type_url does not accept leading \".\"\n                var type_url = object[\"@type\"].charAt(0) === \".\" ?\n                    object[\"@type\"].slice(1) : object[\"@type\"];\n                // type_url prefix is optional, but path seperator is required\n                if (type_url.indexOf(\"/\") === -1) {\n                    type_url = \"/\" + type_url;\n                }\n                return this.create({\n                    type_url: type_url,\n                    value: type.encode(type.fromObject(object, depth === undefined ? 1 : depth + 1)).finish()\n                });\n            }\n        }\n\n        return this.fromObject(object, depth);\n    },\n\n    toObject: function(message, options, depth) {\n        if (depth === undefined)\n            depth = 0;\n        if (depth > util.recursionLimit)\n            throw Error(\"max depth exceeded\");\n\n        // Default prefix\n        var googleApi = \"type.googleapis.com/\";\n        var prefix = \"\";\n        var name = \"\";\n        // decode value if requested and unmapped\n        if (options && options.json && message.type_url && message.value) {\n            // Only use fully qualified type name after the last '/'\n            name = message.type_url.substring(message.type_url.lastIndexOf(\"/\") + 1);\n            // Separate the prefix used\n            prefix = message.type_url.substring(0, message.type_url.lastIndexOf(\"/\") + 1);\n            var type = this.lookup(name, [ this.constructor ]);\n            /* istanbul ignore else */\n            if (type)\n                message = type.decode(message.value, undefined, undefined, depth + 1);\n        }\n\n        // wrap value if unmapped\n        if (!(message instanceof this.ctor) && message instanceof Message) {\n            var object = message.$type.toObject(message, options, depth + 1);\n            var messageName = message.$type.fullName[0] === \".\" ?\n                message.$type.fullName.slice(1) : message.$type.fullName;\n            // Default to type.googleapis.com prefix if no prefix is used\n            if (prefix === \"\") {\n                prefix = googleApi;\n            }\n            name = prefix + messageName;\n            object[\"@type\"] = name;\n            return object;\n        }\n\n        return this.toObject(message, options, depth);\n    }\n};\n","\"use strict\";\nmodule.exports = Type;\n\n// extends Namespace\nvar Namespace = require(\"./namespace\");\nType.prototype = Object.create(Namespace.prototype, {\n    constructor: {\n        value: Type,\n        writable: true,\n        enumerable: false,\n        configurable: true\n    }\n});\nType.className = \"Type\";\n\nvar Enum      = require(\"./enum\"),\n    OneOf     = require(\"./oneof\"),\n    Field     = require(\"./field\"),\n    MapField  = require(\"./mapfield\"),\n    Service   = require(\"./service\"),\n    Message   = require(\"./message\"),\n    Reader    = require(\"./reader\"),\n    Writer    = require(\"./writer\"),\n    util      = require(\"./util\"),\n    encoder   = require(\"./encoder\"),\n    decoder   = require(\"./decoder\"),\n    verifier  = require(\"./verifier\"),\n    converter = require(\"./converter\"),\n    wrappers  = require(\"./wrappers\");\n\n/**\n * Constructs a new reflected message type instance.\n * @classdesc Reflected message type.\n * @extends NamespaceBase\n * @constructor\n * @param {string} name Message name\n * @param {Object.<string,*>} [options] Declared options\n */\nfunction Type(name, options) {\n    name = name.replace(/\\W/g, \"\");\n    Namespace.call(this, name, options);\n\n    /**\n     * Message fields.\n     * @type {Object.<string,Field>}\n     */\n    this.fields = {};  // toJSON, marker\n\n    /**\n     * Oneofs declared within this namespace, if any.\n     * @type {Object.<string,OneOf>}\n     */\n    this.oneofs = undefined; // toJSON\n\n    /**\n     * Extension ranges, if any.\n     * @type {number[][]}\n     */\n    this.extensions = undefined; // toJSON\n\n    /**\n     * Reserved ranges, if any.\n     * @type {Array.<number[]|string>}\n     */\n    this.reserved = undefined; // toJSON\n\n    /*?\n     * Whether this type is a legacy group.\n     * @type {boolean|undefined}\n     */\n    this.group = undefined; // toJSON\n\n    /**\n     * Cached fields by id.\n     * @type {Object.<number,Field>|null}\n     * @private\n     */\n    this._fieldsById = null;\n\n    /**\n     * Cached fields as an array.\n     * @type {Field[]|null}\n     * @private\n     */\n    this._fieldsArray = null;\n\n    /**\n     * Cached oneofs as an array.\n     * @type {OneOf[]|null}\n     * @private\n     */\n    this._oneofsArray = null;\n\n    /**\n     * Cached constructor.\n     * @type {Constructor<{}>}\n     * @private\n     */\n    this._ctor = null;\n\n    /**\n     * Cached fields by JSON name.\n     * @type {Object.<string,Field>|null}\n     * @private\n     */\n    this._fieldsByJsonName = null; // used by ext/protojson\n}\n\nObject.defineProperties(Type.prototype, {\n\n    /**\n     * Message fields by id.\n     * @name Type#fieldsById\n     * @type {Object.<number,Field>}\n     * @readonly\n     */\n    fieldsById: {\n        get: function() {\n\n            /* istanbul ignore if */\n            if (this._fieldsById)\n                return this._fieldsById;\n\n            this._fieldsById = {};\n            for (var names = Object.keys(this.fields), i = 0; i < names.length; ++i) {\n                var field = this.fields[names[i]],\n                    id = field.id;\n\n                /* istanbul ignore if */\n                if (this._fieldsById[id])\n                    throw Error(\"duplicate id \" + id + \" in \" + this);\n\n                this._fieldsById[id] = field;\n            }\n            return this._fieldsById;\n        }\n    },\n\n    /**\n     * Fields of this message as an array for iteration.\n     * @name Type#fieldsArray\n     * @type {Field[]}\n     * @readonly\n     */\n    fieldsArray: {\n        get: function() {\n            return this._fieldsArray || (this._fieldsArray = util.toArray(this.fields));\n        }\n    },\n\n    /**\n     * Oneofs of this message as an array for iteration.\n     * @name Type#oneofsArray\n     * @type {OneOf[]}\n     * @readonly\n     */\n    oneofsArray: {\n        get: function() {\n            return this._oneofsArray || (this._oneofsArray = util.toArray(this.oneofs));\n        }\n    },\n\n    /**\n     * The registered constructor, if any registered, otherwise a generic constructor.\n     * Assigning a function replaces the internal constructor. If the function does not extend {@link Message} yet, its prototype will be setup accordingly and static methods will be populated. If it already extends {@link Message}, it will just replace the internal constructor.\n     * When assigning manually, add the type to its parent namespace/root first if fields reference other reflected types, because constructor setup resolves field defaults.\n     * @name Type#ctor\n     * @type {Constructor<{}>}\n     */\n    ctor: {\n        get: function() {\n            return this._ctor || (this.ctor = Type.generateConstructor(this)());\n        },\n        set: function(ctor) {\n\n            // Ensure proper prototype\n            var prototype = ctor.prototype;\n            if (!(prototype instanceof Message)) {\n                ctor.prototype = new Message();\n                Object.defineProperty(ctor.prototype, \"constructor\", {\n                    value: ctor,\n                    writable: true,\n                    enumerable: false,\n                    configurable: true\n                });\n                util.merge(ctor.prototype, prototype);\n            }\n\n            // Classes and messages reference their reflected type\n            ctor.$type = ctor.prototype.$type = this;\n\n            // Mix in static methods\n            util.merge(ctor, Message, true);\n\n            this._ctor = ctor;\n            delete this.decode;\n            delete this.fromObject;\n\n            // Messages have non-enumerable default values on their prototype\n            var i = 0;\n            for (var field; i < /* initializes */ this.fieldsArray.length; ++i) {\n                field = this._fieldsArray[i].resolve(); // ensures a proper value\n                ctor.prototype[field.name] = field.defaultValue;\n            }\n\n            // Messages have non-enumerable getters and setters for each virtual oneof field\n            var ctorProperties = {};\n            for (i = 0; i < /* initializes */ this.oneofsArray.length; ++i)\n                ctorProperties[this._oneofsArray[i].resolve().name] = {\n                    get: util.oneOfGetter(this._oneofsArray[i].oneof),\n                    set: util.oneOfSetter(this._oneofsArray[i].oneof)\n                };\n            if (i)\n                Object.defineProperties(ctor.prototype, ctorProperties);\n        }\n    }\n});\n\n/**\n * Generates a constructor function for the specified type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nType.generateConstructor = function generateConstructor(mtype) {\n    /* eslint-disable no-unexpected-multiline */\n    var gen = util.codegen([\"p\"]);\n    // explicitly initialize mutable object/array fields so that these aren't just inherited from the prototype\n    for (var i = 0, field; i < mtype.fieldsArray.length; ++i)\n        if ((field = mtype._fieldsArray[i]).map) gen\n            (\"this%s={}\", util.safeProp(field.name));\n        else if (field.repeated) gen\n            (\"this%s=[]\", util.safeProp(field.name));\n    return gen\n    (\"if(p)for(var ks=Object.keys(p),i=0;i<ks.length;++i)if(p[ks[i]]!=null&&ks[i]!==\\\"__proto__\\\")\") // omit undefined or null\n        (\"this[ks[i]]=p[ks[i]]\");\n    /* eslint-enable no-unexpected-multiline */\n};\n\nfunction clearCache(type) {\n    type._fieldsById = type._fieldsArray = type._oneofsArray = type._fieldsByJsonName = null;\n    delete type.encode;\n    delete type.decode;\n    delete type.verify;\n    return type;\n}\n\n/**\n * Message type descriptor.\n * @interface IType\n * @extends INamespace\n * @property {string} [edition] Edition\n * @property {Object.<string,IOneOf>} [oneofs] Oneof descriptors\n * @property {Object.<string,IField>} fields Field descriptors\n * @property {number[][]} [extensions] Extension ranges\n * @property {Array.<number[]|string>} [reserved] Reserved ranges\n * @property {boolean} [group=false] Whether a legacy group or not\n * @property {string|null} [comment] Message type comment\n */\n\n/**\n * Creates a message type from a message type descriptor.\n * @param {string} name Message name\n * @param {IType} json Message type descriptor\n * @param {number} [depth] Current nesting depth, defaults to `0`\n * @returns {Type} Created message type\n */\nType.fromJSON = function fromJSON(name, json, depth) {\n    if (depth === undefined)\n        depth = 0;\n    if (depth > util.nestingLimit)\n        throw Error(\"max depth exceeded\");\n    var type = new Type(name, json.options);\n    type.extensions = json.extensions;\n    type.reserved = json.reserved;\n    var names = Object.keys(json.fields),\n        i = 0;\n    for (; i < names.length; ++i)\n        type.add(\n            ( typeof json.fields[names[i]].keyType !== \"undefined\"\n            ? MapField.fromJSON\n            : Field.fromJSON )(names[i], json.fields[names[i]])\n        );\n    if (json.oneofs)\n        for (names = Object.keys(json.oneofs), i = 0; i < names.length; ++i)\n            type.add(OneOf.fromJSON(names[i], json.oneofs[names[i]]));\n    if (json.nested)\n        for (names = Object.keys(json.nested), i = 0; i < names.length; ++i) {\n            var nested = json.nested[names[i]];\n            type.add( // most to least likely\n                ( nested.id !== undefined\n                ? Field.fromJSON\n                : nested.fields !== undefined\n                ? Type.fromJSON\n                : nested.values !== undefined\n                ? Enum.fromJSON\n                : nested.methods !== undefined\n                ? Service.fromJSON\n                : Namespace.fromJSON )(names[i], nested, depth + 1)\n            );\n        }\n    if (json.extensions && json.extensions.length)\n        type.extensions = json.extensions;\n    if (json.reserved && json.reserved.length)\n        type.reserved = json.reserved;\n    if (json.group)\n        type.group = true;\n    if (json.comment)\n        type.comment = json.comment;\n    if (json.edition)\n        type._edition = json.edition;\n    type._defaultEdition = \"proto3\";  // For backwards-compatibility.\n    return type;\n};\n\n/**\n * Converts this message type to a message type descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IType} Message type descriptor\n */\nType.prototype.toJSON = function toJSON(toJSONOptions) {\n    var inherited = Namespace.prototype.toJSON.call(this, toJSONOptions);\n    var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n    return util.toObject([\n        \"edition\"    , this._editionToJSON(),\n        \"options\"    , inherited && inherited.options || undefined,\n        \"oneofs\"     , Namespace.arrayToJSON(this.oneofsArray, toJSONOptions),\n        \"fields\"     , Namespace.arrayToJSON(this.fieldsArray.filter(function(obj) { return !obj.declaringField; }), toJSONOptions) || {},\n        \"extensions\" , this.extensions && this.extensions.length ? this.extensions : undefined,\n        \"reserved\"   , this.reserved && this.reserved.length ? this.reserved : undefined,\n        \"group\"      , this.group || undefined,\n        \"nested\"     , inherited && inherited.nested || undefined,\n        \"comment\"    , keepComments ? this.comment : undefined\n    ]);\n};\n\n/**\n * @override\n */\nType.prototype.resolveAll = function resolveAll() {\n    if (!this._needsRecursiveResolve) return this;\n\n    Namespace.prototype.resolveAll.call(this);\n    var oneofs = this.oneofsArray; i = 0;\n    while (i < oneofs.length)\n        oneofs[i++].resolve();\n    var fields = this.fieldsArray, i = 0;\n    while (i < fields.length)\n        fields[i++].resolve();\n    return this;\n};\n\n/**\n * @override\n */\nType.prototype._resolveFeaturesRecursive = function _resolveFeaturesRecursive(edition) {\n    if (!this._needsRecursiveFeatureResolution) return this;\n\n    edition = this._edition || edition;\n\n    Namespace.prototype._resolveFeaturesRecursive.call(this, edition);\n    this.oneofsArray.forEach(oneof => {\n        oneof._resolveFeatures(edition);\n    });\n    this.fieldsArray.forEach(field => {\n        field._resolveFeatures(edition);\n    });\n    return this;\n};\n\n/**\n * @override\n */\nType.prototype.get = function get(name) {\n    if (Object.prototype.hasOwnProperty.call(this.fields, name))\n        return this.fields[name];\n    if (this.oneofs && Object.prototype.hasOwnProperty.call(this.oneofs, name))\n        return this.oneofs[name];\n    if (this.nested && Object.prototype.hasOwnProperty.call(this.nested, name))\n        return this.nested[name];\n    return null;\n};\n\n/**\n * Adds a nested object to this type.\n * @param {ReflectionObject} object Nested object to add\n * @returns {Type} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If there is already a nested object with this name or, if a field, when there is already a field with this id\n */\nType.prototype.add = function add(object) {\n    if (this.get(object.name))\n        throw Error(\"duplicate name '\" + object.name + \"' in \" + this);\n\n    if (object instanceof Field && object.extend === undefined) {\n        // NOTE: Extension fields aren't actual fields on the declaring type, but nested objects.\n        // The root object takes care of adding distinct sister-fields to the respective extended\n        // type instead.\n\n        // avoids calling the getter if not absolutely necessary because it's called quite frequently\n        if (this._fieldsById ? /* istanbul ignore next */ this._fieldsById[object.id] : this.fieldsById[object.id])\n            throw Error(\"duplicate id \" + object.id + \" in \" + this);\n        if (this.isReservedId(object.id))\n            throw Error(\"id \" + object.id + \" is reserved in \" + this);\n        if (this.isReservedName(object.name) || object.name.charAt(0) === \"$\")\n            throw Error(\"name '\" + object.name + \"' is reserved in \" + this);\n        if (object.name === \"__proto__\")\n            return this;\n\n        if (object.parent)\n            object.parent.remove(object);\n        this.fields[object.name] = object;\n        object.message = this;\n        object.onAdd(this);\n        return clearCache(this);\n    }\n    if (object instanceof OneOf) {\n        if (object.name.charAt(0) === \"$\")\n            throw Error(\"name '\" + object.name + \"' is reserved in \" + this);\n        if (object.name === \"__proto__\")\n            return this;\n        if (!this.oneofs)\n            this.oneofs = {};\n        this.oneofs[object.name] = object;\n        object.onAdd(this);\n        return clearCache(this);\n    }\n    return Namespace.prototype.add.call(this, object);\n};\n\n/**\n * Removes a nested object from this type.\n * @param {ReflectionObject} object Nested object to remove\n * @returns {Type} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If `object` is not a member of this type\n */\nType.prototype.remove = function remove(object) {\n    if (object instanceof Field && object.extend === undefined) {\n        // See Type#add for the reason why extension fields are excluded here.\n\n        /* istanbul ignore if */\n        if (!util.remove(this.fields, object, object.name))\n            throw Error(object + \" is not a member of \" + this);\n\n        object.parent = null;\n        object.onRemove(this);\n        return clearCache(this);\n    }\n    if (object instanceof OneOf) {\n\n        /* istanbul ignore if */\n        if (!util.remove(this.oneofs, object, object.name))\n            throw Error(object + \" is not a member of \" + this);\n\n        object.parent = null;\n        object.onRemove(this);\n        return clearCache(this);\n    }\n    return Namespace.prototype.remove.call(this, object);\n};\n\n/**\n * Tests if the specified id is reserved.\n * @param {number} id Id to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nType.prototype.isReservedId = function isReservedId(id) {\n    return Namespace.isReservedId(this.reserved, id);\n};\n\n/**\n * Tests if the specified name is reserved.\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nType.prototype.isReservedName = function isReservedName(name) {\n    return Namespace.isReservedName(this.reserved, name);\n};\n\n/**\n * Creates a new message of this type using the specified properties.\n * @param {Object.<string,*>} [properties] Properties to set\n * @returns {ReflectedMessage} Message instance\n */\nType.prototype.create = function create(properties) {\n    return new this.ctor(properties);\n};\n\n/**\n * Sets up {@link Type#encode|encode}, {@link Type#decode|decode} and {@link Type#verify|verify}.\n * @returns {Type} `this`\n */\nType.prototype.setup = function setup() {\n    // Sets up everything at once so that the prototype chain does not have to be re-evaluated\n    // multiple times (V8, soft-deopt prototype-check).\n\n    // Resolve feature defaults incl. field presence before generating codecs\n    var root = this.root;\n    if (root && root._needsRecursiveFeatureResolution) {\n        var edition = root._edition || this._edition;\n        if (edition)\n            root._resolveFeaturesRecursive(edition);\n    }\n\n    var fullName = this.fullName,\n        types    = [];\n    for (var i = 0; i < /* initializes */ this.fieldsArray.length; ++i)\n        types.push(this._fieldsArray[i].resolve().resolvedType);\n\n    // Replace setup methods with type-specific generated functions\n    this.encode = encoder(this)({\n        Writer : Writer,\n        types  : types,\n        util   : util\n    });\n    this.decode = decoder(this)({\n        Reader : Reader,\n        types  : types,\n        util   : util,\n        C      : this.ctor\n    });\n    this.verify = verifier(this)({\n        types : types,\n        util  : util\n    });\n    this.fromObject = converter.fromObject(this)({\n        types : types,\n        util  : util,\n        C     : this.ctor\n    });\n    this.toObject = converter.toObject(this)({\n        types : types,\n        util  : util\n    });\n\n    // Inject custom wrappers for common types\n    var wrapper = wrappers[fullName];\n    if (wrapper) {\n        var wrapperThis = Object.create(this);\n        // Reuse this type's runtime constructor in wrapper fromObject/toObject\n        wrapperThis._ctor = this.ctor;\n        wrapperThis.fromObject = this.fromObject;\n        this.fromObject = wrapper.fromObject.bind(wrapperThis);\n        wrapperThis.toObject = this.toObject;\n        this.toObject = wrapper.toObject.bind(wrapperThis);\n    }\n\n    return this;\n};\n\n/**\n * Encodes a message of this type. Does not implicitly {@link Type#verify|verify} messages.\n * @param {Message<{}>|Object.<string,*>} message Message instance or plain object\n * @param {Writer} [writer] Writer to encode to\n * @returns {Writer} writer\n */\nType.prototype.encode = function encode_setup(message, writer) { // eslint-disable-line no-unused-vars\n    return this.setup().encode.apply(this, arguments); // overrides this method\n};\n\n/**\n * Encodes a message of this type preceeded by its byte length as a varint. Does not implicitly {@link Type#verify|verify} messages.\n * @param {Message<{}>|Object.<string,*>} message Message instance or plain object\n * @param {Writer} [writer] Writer to encode to\n * @returns {Writer} writer\n */\nType.prototype.encodeDelimited = function encodeDelimited(message, writer) {\n    return this.encode(message, (writer || Writer.create()).fork()).ldelim();\n};\n\n/**\n * Decodes a message of this type.\n * @param {Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Length of the message, if known beforehand\n * @returns {ReflectedMessage} Decoded message\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {util.ProtocolError<{}>} If required fields are missing\n */\nType.prototype.decode = function decode_setup(reader, length) { // eslint-disable-line no-unused-vars\n    return this.setup().decode.apply(this, arguments); // overrides this method\n};\n\n/**\n * Decodes a message of this type preceeded by its byte length as a varint.\n * @param {Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {ReflectedMessage} Decoded message\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {util.ProtocolError} If required fields are missing\n */\nType.prototype.decodeDelimited = function decodeDelimited(reader) {\n    if (!(reader instanceof Reader))\n        reader = Reader.create(reader);\n    return this.decode(reader, reader.uint32());\n};\n\n/**\n * Verifies that field values are valid and that required fields are present.\n * @param {Object.<string,*>} message Plain object to verify\n * @returns {null|string} `null` if valid, otherwise the reason why it is not\n */\nType.prototype.verify = function verify_setup(message) { // eslint-disable-line no-unused-vars\n    return this.setup().verify.apply(this, arguments); // overrides this method\n};\n\n/**\n * Creates a new message of this type from a plain object. Also converts values to their respective internal types.\n * @param {Object.<string,*>} object Plain object to convert\n * @returns {ReflectedMessage} Message instance\n */\nType.prototype.fromObject = function fromObject(object) { // eslint-disable-line no-unused-vars\n    return this.setup().fromObject.apply(this, arguments);\n};\n\n/**\n * Conversion options as used by {@link Type#toObject} and {@link Message.toObject}.\n * @interface IConversionOptions\n * @property {Function} [longs] Long conversion type.\n * Valid values are `BigInt`, `String` and `Number` (the global types).\n * Defaults to copy the present value, which is a possibly unsafe number without and a {@link Long} with a long library.\n * @property {Function} [enums] Enum value conversion type.\n * Only valid value is `String` (the global type).\n * Defaults to copy the present value, which is the numeric id.\n * @property {Function} [bytes] Bytes value conversion type.\n * Valid values are `Array` and (a base64 encoded) `String` (the global types).\n * Defaults to copy the present value, which usually is a Buffer under node and an Uint8Array in the browser.\n * @property {boolean} [defaults=false] Also sets default values on the resulting object\n * @property {boolean} [arrays=false] Sets empty arrays for missing repeated fields even if `defaults=false`\n * @property {boolean} [objects=false] Sets empty objects for missing map fields even if `defaults=false`\n * @property {boolean} [oneofs=false] Includes virtual oneof properties set to the present field's name, if any\n * @property {boolean} [json=false] Performs additional JSON compatibility conversions, i.e. NaN and Infinity to strings\n */\n\n/**\n * Creates a plain object from a message of this type. Also converts values to other types if specified.\n * @param {Message<{}>} message Message instance\n * @param {IConversionOptions} [options] Conversion options\n * @returns {Object.<string,*>} Plain object\n */\nType.prototype.toObject = function toObject(message, options) { // eslint-disable-line no-unused-vars\n    return this.setup().toObject.apply(this, arguments);\n};\n\n/**\n * Gets the type url for this type.\n * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n * @returns {string} The type url\n */\nType.prototype.getTypeUrl = function getTypeUrl(prefix) {\n    if (prefix === undefined)\n        prefix = \"type.googleapis.com\";\n    var fullName = this.fullName;\n    return prefix + \"/\" + (fullName.charAt(0) === \".\" ? fullName.substring(1) : fullName);\n};\n\n/**\n * Decorator function as returned by {@link Type.d} (TypeScript).\n * @typedef TypeDecorator\n * @type {function}\n * @param {Constructor<T>} target Target constructor\n * @returns {undefined}\n * @template T extends Message<T>\n * @deprecated Legacy TypeScript decorator support. Will be removed in a future release.\n */\n\n/**\n * Type decorator (TypeScript).\n * @param {string} [typeName] Type name, defaults to the constructor's name\n * @returns {TypeDecorator<T>} Decorator function\n * @template T extends Message<T>\n * @deprecated Legacy TypeScript decorator support. Will be removed in a future release.\n */\nType.d = function decorateType(typeName) {\n    return function typeDecorator(target) {\n        util.decorateType(target, typeName);\n    };\n};\n","\"use strict\";\nmodule.exports = Root;\n\n// extends Namespace\nvar Namespace = require(\"./namespace\");\nRoot.prototype = Object.create(Namespace.prototype, {\n    constructor: {\n        value: Root,\n        writable: true,\n        enumerable: false,\n        configurable: true\n    }\n});\nRoot.className = \"Root\";\n\nvar Field   = require(\"./field\"),\n    Enum    = require(\"./enum\"),\n    OneOf   = require(\"./oneof\"),\n    util    = require(\"./util\");\n\nvar Type,   // cyclic\n    parse,  // might be excluded\n    common; // \"\n\n/**\n * Constructs a new root namespace instance.\n * @classdesc Root namespace wrapping all types, enums, services, sub-namespaces etc. that belong together.\n * @extends NamespaceBase\n * @constructor\n * @param {Object.<string,*>} [options] Top level options\n */\nfunction Root(options) {\n    Namespace.call(this, \"\", options);\n\n    /**\n     * Deferred extension fields.\n     * @type {Field[]}\n     */\n    this.deferred = [];\n\n    /**\n     * Resolved file names of loaded files.\n     * @type {string[]}\n     */\n    this.files = [];\n\n    /**\n     * Edition, defaults to proto2 if unspecified.\n     * @type {string}\n     * @private\n     */\n    this._edition = \"proto2\";\n\n    /**\n     * Global lookup cache of fully qualified names.\n     * @type {Object.<string,ReflectionObject>}\n     * @private\n     */\n    this._fullyQualifiedObjects = {};\n}\n\n/**\n * Loads a namespace descriptor into a root namespace.\n * @param {INamespace} json Namespace descriptor\n * @param {Root} [root] Root namespace, defaults to create a new one if omitted\n * @param {number} [depth] Current nesting depth, defaults to `0`\n * @returns {Root} Root namespace\n */\nRoot.fromJSON = function fromJSON(json, root, depth) {\n    if (depth === undefined)\n        depth = 0;\n    if (depth > util.recursionLimit)\n        throw Error(\"max depth exceeded\");\n    if (!root)\n        root = new Root();\n    if (json.options)\n        root.setOptions(json.options);\n    return root.addJSON(json.nested, depth).resolveAll();\n};\n\n/**\n * Resolves the path of an imported file, relative to the importing origin.\n * This method exists so you can override it with your own logic in case your imports are scattered over multiple directories.\n * @function\n * @param {string} origin The file name of the importing file\n * @param {string} target The file name being imported\n * @returns {string|null} Resolved path to `target` or `null` to skip the file\n */\nRoot.prototype.resolvePath = util.path.resolve;\n\n/**\n * Fetch content from file path or url\n * This method exists so you can override it with your own logic.\n * @function\n * @param {string} path File path or url\n * @param {FetchCallback} callback Callback function\n * @returns {undefined}\n */\nRoot.prototype.fetch = util.fetch;\n\n// A symbol-like function to safely signal synchronous loading\n/* istanbul ignore next */\nfunction SYNC() {} // eslint-disable-line no-empty-function\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into this root namespace and calls the callback.\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {IParseOptions} options Parse options\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n */\nRoot.prototype.load = function load(filename, options, callback) {\n    if (typeof options === \"function\") {\n        callback = options;\n        options = undefined;\n    }\n    var self = this;\n    if (!callback) {\n        return util.asPromise(load, self, filename, options);\n    }\n\n    var sync = callback === SYNC; // undocumented\n\n    // Finishes loading by calling the callback (exactly once)\n    function finish(err, root) {\n        /* istanbul ignore if */\n        if (!callback) {\n            return;\n        }\n        if (sync) {\n            throw err;\n        }\n        if (root) {\n            root.resolveAll();\n        }\n        var cb = callback;\n        callback = null;\n        cb(err, root);\n    }\n\n    // Bundled definition existence checking\n    function getBundledFileName(filename) {\n        var idx = filename.lastIndexOf(\"google/protobuf/\");\n        if (idx > -1) {\n            var altname = filename.substring(idx);\n            if (Object.prototype.hasOwnProperty.call(common, altname)) return altname;\n        }\n        if (Object.prototype.hasOwnProperty.call(common, filename)) return filename;\n        return null;\n    }\n\n    // Processes a single file\n    function process(filename, source, depth) {\n        if (depth === undefined)\n            depth = 0;\n        try {\n            if (depth > util.recursionLimit)\n                throw Error(\"max depth exceeded\");\n            if (util.isString(source) && source.charAt(0) === \"{\")\n                source = JSON.parse(source);\n            if (!util.isString(source))\n                self.setOptions(source.options).addJSON(source.nested);\n            else {\n                parse.filename = filename;\n                var parsed = parse(source, self, options),\n                    resolved,\n                    i = 0;\n                if (parsed.imports)\n                    for (; i < parsed.imports.length; ++i)\n                        if (resolved = getBundledFileName(parsed.imports[i]) || self.resolvePath(filename, parsed.imports[i]))\n                            fetch(resolved, false, depth + 1);\n                if (parsed.weakImports)\n                    for (i = 0; i < parsed.weakImports.length; ++i)\n                        if (resolved = getBundledFileName(parsed.weakImports[i]) || self.resolvePath(filename, parsed.weakImports[i]))\n                            fetch(resolved, true, depth + 1);\n            }\n        } catch (err) {\n            finish(err);\n        }\n        if (!sync && !queued) {\n            finish(null, self); // only once anyway\n        }\n    }\n\n    // Fetches a single file\n    function fetch(filename, weak, depth) {\n        if (depth === undefined)\n            depth = 0;\n        filename = getBundledFileName(filename) || filename;\n\n        // Skip if already loaded / attempted\n        if (self.files.indexOf(filename) > -1) {\n            return;\n        }\n        self.files.push(filename);\n\n        // Shortcut bundled definitions\n        if (Object.prototype.hasOwnProperty.call(common, filename)) {\n            if (sync) {\n                process(filename, common[filename], depth);\n            } else {\n                ++queued;\n                setTimeout(function() {\n                    --queued;\n                    process(filename, common[filename], depth);\n                });\n            }\n            return;\n        }\n\n        // Otherwise fetch from disk or network\n        if (sync) {\n            var source;\n            try {\n                source = util.fs.readFileSync(filename).toString(\"utf8\");\n            } catch (err) {\n                if (!weak)\n                    finish(err);\n                return;\n            }\n            process(filename, source, depth);\n        } else {\n            ++queued;\n            self.fetch(filename, function(err, source) {\n                --queued;\n                /* istanbul ignore if */\n                if (!callback) {\n                    return; // terminated meanwhile\n                }\n                if (err) {\n                    /* istanbul ignore else */\n                    if (!weak)\n                        finish(err);\n                    else if (!queued) // can't be covered reliably\n                        finish(null, self);\n                    return;\n                }\n                process(filename, source, depth);\n            });\n        }\n    }\n    var queued = 0;\n\n    // Assembling the root namespace doesn't require working type\n    // references anymore, so we can load everything in parallel\n    if (util.isString(filename)) {\n        filename = [ filename ];\n    }\n    for (var i = 0, resolved; i < filename.length; ++i)\n        if (resolved = self.resolvePath(\"\", filename[i]))\n            fetch(resolved);\n    if (sync) {\n        self.resolveAll();\n        return self;\n    }\n    if (!queued) {\n        finish(null, self);\n    }\n\n    return self;\n};\n// function load(filename:string, options:IParseOptions, callback:LoadCallback):undefined\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into this root namespace and calls the callback.\n * @function Root#load\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n * @variation 2\n */\n// function load(filename:string, callback:LoadCallback):undefined\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into this root namespace and returns a promise.\n * @function Root#load\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {IParseOptions} [options] Parse options. Defaults to {@link parse.defaults} when omitted.\n * @returns {Promise<Root>} Promise\n * @variation 3\n */\n// function load(filename:string, [options:IParseOptions]):Promise<Root>\n\n/**\n * Synchronously loads one or multiple .proto or preprocessed .json files into this root namespace (node only).\n * @function Root#loadSync\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {IParseOptions} [options] Parse options. Defaults to {@link parse.defaults} when omitted.\n * @returns {Root} Root namespace\n * @throws {Error} If synchronous fetching is not supported (i.e. in browsers) or if a file's syntax is invalid\n */\nRoot.prototype.loadSync = function loadSync(filename, options) {\n    if (!util.isNode)\n        throw Error(\"not supported\");\n    return this.load(filename, options, SYNC);\n};\n\n/**\n * @override\n */\nRoot.prototype.resolveAll = function resolveAll() {\n    if (!this._needsRecursiveResolve) return this;\n\n    if (this.deferred.length)\n        throw Error(\"unresolvable extensions: \" + this.deferred.map(function(field) {\n            return \"'extend \" + field.extend + \"' in \" + field.parent.fullName;\n        }).join(\", \"));\n    return Namespace.prototype.resolveAll.call(this);\n};\n\n// only uppercased (and thus conflict-free) children are exposed, see below\nvar exposeRe = /^[A-Z]/;\n\n/**\n * Handles a deferred declaring extension field by creating a sister field to represent it within its extended type.\n * @param {Root} root Root instance\n * @param {Field} field Declaring extension field witin the declaring type\n * @returns {boolean} `true` if successfully added to the extended type, `false` otherwise\n * @inner\n * @ignore\n */\nfunction tryHandleExtension(root, field) {\n    var extendedType = field.parent.lookup(field.extend);\n    if (extendedType) {\n        var sisterField = new Field(field.fullName, field.id, field.type, field.rule, undefined, field.options);\n        //do not allow to extend same field twice to prevent the error\n        if (extendedType.get(sisterField.name)) {\n            return true;\n        }\n        sisterField.declaringField = field;\n        field.extensionField = sisterField;\n        extendedType.add(sisterField);\n        return true;\n    }\n    return false;\n}\n\n/**\n * Called when any object is added to this root or its sub-namespaces.\n * @param {ReflectionObject} object Object added\n * @returns {undefined}\n * @private\n */\nRoot.prototype._handleAdd = function _handleAdd(object) {\n    if (object instanceof Field) {\n\n        if (/* an extension field (implies not part of a oneof) */ object.extend !== undefined && /* not already handled */ !object.extensionField)\n            if (!tryHandleExtension(this, object))\n                this.deferred.push(object);\n\n    } else if (object instanceof Enum) {\n\n        if (exposeRe.test(object.name))\n            object.parent[object.name] = object.values; // expose enum values as property of its parent\n\n    } else if (!(object instanceof OneOf)) /* everything else is a namespace */ {\n\n        if (object instanceof Type) // Try to handle any deferred extensions\n            for (var i = 0; i < this.deferred.length;)\n                if (tryHandleExtension(this, this.deferred[i]))\n                    this.deferred.splice(i, 1);\n                else\n                    ++i;\n        for (var j = 0; j < /* initializes */ object.nestedArray.length; ++j) // recurse into the namespace\n            this._handleAdd(object._nestedArray[j]);\n        if (exposeRe.test(object.name))\n            object.parent[object.name] = object; // expose namespace as property of its parent\n    }\n\n    if (object instanceof Type || object instanceof Enum || object instanceof Field) {\n        // Only store types and enums for quick lookup during resolve.\n        this._fullyQualifiedObjects[object.fullName] = object;\n    }\n\n    // The above also adds uppercased (and thus conflict-free) nested types, services and enums as\n    // properties of namespaces just like static code does. This allows using a .d.ts generated for\n    // a static module with reflection-based solutions where the condition is met.\n};\n\n/**\n * Called when any object is removed from this root or its sub-namespaces.\n * @param {ReflectionObject} object Object removed\n * @returns {undefined}\n * @private\n */\nRoot.prototype._handleRemove = function _handleRemove(object) {\n    if (object instanceof Field) {\n\n        if (/* an extension field */ object.extend !== undefined) {\n            if (/* already handled */ object.extensionField) { // remove its sister field\n                object.extensionField.parent.remove(object.extensionField);\n                object.extensionField = null;\n            } else { // cancel the extension\n                var index = this.deferred.indexOf(object);\n                /* istanbul ignore else */\n                if (index > -1)\n                    this.deferred.splice(index, 1);\n            }\n        }\n\n    } else if (object instanceof Enum) {\n\n        if (exposeRe.test(object.name))\n            delete object.parent[object.name]; // unexpose enum values\n\n    } else if (object instanceof Namespace) {\n\n        for (var i = 0; i < /* initializes */ object.nestedArray.length; ++i) // recurse into the namespace\n            this._handleRemove(object._nestedArray[i]);\n\n        if (exposeRe.test(object.name))\n            delete object.parent[object.name]; // unexpose namespaces\n\n    }\n\n    delete this._fullyQualifiedObjects[object.fullName];\n};\n\n// Sets up cyclic dependencies (called in index-light)\nRoot._configure = function(Type_, parse_, common_) {\n    Type   = Type_;\n    parse  = parse_;\n    common = common_;\n};\n","\"use strict\";\n\n/**\n * Various utility functions.\n * @namespace\n */\nvar util = module.exports = require(\"./util/minimal\");\n\nvar roots = require(\"./roots\");\n\nvar Type, // cyclic\n    Enum;\n\nutil.codegen  = require(\"./util/codegen\");\nutil.fetch    = require(\"./util/fetch\");\nutil.path     = require(\"./util/path\");\nutil.patterns = require(\"./util/patterns\");\n\nvar reservedRe = util.patterns.reservedRe;\n\n/**\n * Node's fs module if available.\n * @type {Object.<string,*>}\n */\nutil.fs = require(\"./util/fs\");\n\n/**\n * Converts an object's values to an array.\n * @param {Object.<string,*>} object Object to convert\n * @returns {Array.<*>} Converted array\n */\nutil.toArray = function toArray(object) {\n    if (object) {\n        var keys  = Object.keys(object),\n            array = new Array(keys.length),\n            index = 0;\n        while (index < keys.length)\n            array[index] = object[keys[index++]];\n        return array;\n    }\n    return [];\n};\n\n/**\n * Converts an array of keys immediately followed by their respective value to an object, omitting undefined values.\n * @param {Array.<*>} array Array to convert\n * @returns {Object.<string,*>} Converted object\n */\nutil.toObject = function toObject(array) {\n    var object = {},\n        index  = 0;\n    while (index < array.length) {\n        var key = array[index++],\n            val = array[index++];\n        if (val !== undefined)\n            object[key] = val;\n    }\n    return object;\n};\n\n/**\n * Removes the first matching value from an object.\n * @param {Object.<string,*>|undefined} object Object to remove from\n * @param {*} value Value to remove\n * @param {string} [key] Optional key for fast path removal\n * @returns {boolean} `true` if removed, otherwise `false`\n */\nutil.remove = function remove(object, value, key) {\n    if (!object)\n        return false;\n    if (key !== undefined && Object.prototype.hasOwnProperty.call(object, key) && object[key] === value) {\n        delete object[key];\n        return true;\n    }\n    for (var names = Object.keys(object), i = 0; i < names.length; ++i)\n        if (object[names[i]] === value) {\n            delete object[names[i]];\n            return true;\n        }\n    return false;\n};\n\n/**\n * Tests whether the specified name is a reserved word in JS.\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nutil.isReserved = function isReserved(name) {\n    return reservedRe.test(name);\n};\n\n/**\n * Returns a safe property accessor for the specified property name.\n * @param {string} prop Property name\n * @returns {string} Safe accessor\n */\nutil.safeProp = function safeProp(prop) {\n    if (!/^[$\\w_]+$/.test(prop) || reservedRe.test(prop))\n        return \"[\" + JSON.stringify(prop) + \"]\";\n    return \".\" + prop;\n};\n\n/**\n * Converts the first character of a string to upper case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.ucFirst = function ucFirst(str) {\n    return str.charAt(0).toUpperCase() + str.substring(1);\n};\n\nvar camelCaseRe = /_([a-z])/g;\n\n/**\n * Converts a string to camel case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n * @deprecated Use {@link util.jsonName} for protobuf field JSON names.\n */\nutil.camelCase = function camelCase(str) {\n    return str.substring(0, 1)\n         + str.substring(1)\n               .replace(camelCaseRe, function($0, $1) { return $1.toUpperCase(); });\n};\n\n/**\n * Converts a proto field name to its protoc-compatible JSON name.\n * @param {string} str Proto field name\n * @returns {string} JSON name\n */\nutil.jsonName = function jsonName(str) {\n    var result = \"\",\n        upperNext = false,\n        i = 0;\n    for (; i < str.length; ++i) {\n        var ch = str.charAt(i);\n        if (ch === \"_\")\n            upperNext = true;\n        else if (upperNext) {\n            result += ch.toUpperCase();\n            upperNext = false;\n        } else\n            result += ch;\n    }\n    return result;\n};\n\n/**\n * Compares reflected fields by id.\n * @param {Field} a First field\n * @param {Field} b Second field\n * @returns {number} Comparison value\n */\nutil.compareFieldsById = function compareFieldsById(a, b) {\n    return a.id - b.id;\n};\n\n/**\n * Decorator helper for types (TypeScript).\n * @param {Constructor<T>} ctor Constructor function\n * @param {string} [typeName] Type name, defaults to the constructor's name\n * @returns {Type} Reflected type\n * @template T extends Message<T>\n * @property {Root} root Decorators root\n * @deprecated Legacy TypeScript decorator support. Will be removed in a future release.\n */\nutil.decorateType = function decorateType(ctor, typeName) {\n\n    /* istanbul ignore if */\n    if (ctor.$type) {\n        if (typeName && ctor.$type.name !== typeName) {\n            util.decorateRoot.remove(ctor.$type);\n            ctor.$type.name = typeName;\n            util.decorateRoot.add(ctor.$type);\n        }\n        return ctor.$type;\n    }\n\n    /* istanbul ignore next */\n    if (!Type)\n        Type = require(\"./type\");\n\n    var type = new Type(typeName || ctor.name);\n    util.decorateRoot.add(type);\n    type.ctor = ctor; // sets up .encode, .decode etc.\n    Object.defineProperty(ctor, \"$type\", { value: type, enumerable: false });\n    Object.defineProperty(ctor.prototype, \"$type\", { value: type, enumerable: false });\n    return type;\n};\n\nvar decorateEnumIndex = 0;\n\n/**\n * Decorator helper for enums (TypeScript).\n * @param {Object} object Enum object\n * @returns {Enum} Reflected enum\n * @deprecated Legacy TypeScript decorator support. Will be removed in a future release.\n */\nutil.decorateEnum = function decorateEnum(object) {\n\n    /* istanbul ignore if */\n    if (object.$type)\n        return object.$type;\n\n    /* istanbul ignore next */\n    if (!Enum)\n        Enum = require(\"./enum\");\n\n    var enm = new Enum(\"Enum\" + decorateEnumIndex++, object);\n    util.decorateRoot.add(enm);\n    Object.defineProperty(object, \"$type\", { value: enm, enumerable: false });\n    return enm;\n};\n\n\n/**\n * Sets the value of a property by property path. If a value already exists, it is turned to an array\n * @param {Object.<string,*>} dst Destination object\n * @param {string} path dot '.' delimited path of the property to set\n * @param {Object} value the value to set\n * @param {boolean|undefined} [ifNotSet] Sets the option only if it isn't currently set\n * @returns {Object.<string,*>} Destination object\n */\nutil.setProperty = function setProperty(dst, path, value, ifNotSet) {\n    function setProp(dst, path, value) {\n        var part = path.shift();\n        if (util.isUnsafeProperty(part))\n            return dst;\n        if (path.length > 0) {\n            dst[part] = setProp(dst[part] || {}, path, value);\n        } else {\n            var prevValue = dst[part];\n            if (prevValue && ifNotSet)\n                return dst;\n            if (prevValue)\n                value = [].concat(prevValue).concat(value);\n            dst[part] = value;\n        }\n        return dst;\n    }\n\n    if (typeof dst !== \"object\")\n        throw TypeError(\"dst must be an object\");\n    if (!path)\n        throw TypeError(\"path must be specified\");\n\n    path = path.split(\".\");\n    if (path.length > util.recursionLimit)\n        throw Error(\"max depth exceeded\");\n    return setProp(dst, path, value);\n};\n\n/**\n * Decorator root (TypeScript).\n * @name util.decorateRoot\n * @type {Root}\n * @readonly\n * @deprecated Legacy TypeScript decorator support. Will be removed in a future release.\n */\nObject.defineProperty(util, \"decorateRoot\", {\n    get: function() {\n        return roots[\"decorated\"] || (roots[\"decorated\"] = new (require(\"./root\"))());\n    }\n});\n","\"use strict\";\n\n/**\n * Common type constants.\n * @namespace\n */\nvar types = exports;\n\nvar util = require(\"./util\");\n\nvar s = [\n    \"double\",   // 0\n    \"float\",    // 1\n    \"int32\",    // 2\n    \"uint32\",   // 3\n    \"sint32\",   // 4\n    \"fixed32\",  // 5\n    \"sfixed32\", // 6\n    \"int64\",    // 7\n    \"uint64\",   // 8\n    \"sint64\",   // 9\n    \"fixed64\",  // 10\n    \"sfixed64\", // 11\n    \"bool\",     // 12\n    \"string\",   // 13\n    \"bytes\"     // 14\n];\n\nfunction bake(values, offset) {\n    var i = 0, o = Object.create(null);\n    offset |= 0;\n    while (i < values.length) o[s[i + offset]] = values[i++];\n    return o;\n}\n\n/**\n * Basic type wire types.\n * @type {Object.<string,number>}\n * @const\n * @property {number} double=1 Fixed64 wire type\n * @property {number} float=5 Fixed32 wire type\n * @property {number} int32=0 Varint wire type\n * @property {number} uint32=0 Varint wire type\n * @property {number} sint32=0 Varint wire type\n * @property {number} fixed32=5 Fixed32 wire type\n * @property {number} sfixed32=5 Fixed32 wire type\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n * @property {number} bool=0 Varint wire type\n * @property {number} string=2 Ldelim wire type\n * @property {number} bytes=2 Ldelim wire type\n */\ntypes.basic = bake([\n    /* double   */ 1,\n    /* float    */ 5,\n    /* int32    */ 0,\n    /* uint32   */ 0,\n    /* sint32   */ 0,\n    /* fixed32  */ 5,\n    /* sfixed32 */ 5,\n    /* int64    */ 0,\n    /* uint64   */ 0,\n    /* sint64   */ 0,\n    /* fixed64  */ 1,\n    /* sfixed64 */ 1,\n    /* bool     */ 0,\n    /* string   */ 2,\n    /* bytes    */ 2\n]);\n\n/**\n * Basic type defaults.\n * @type {Object.<string,*>}\n * @const\n * @property {number} double=0 Double default\n * @property {number} float=0 Float default\n * @property {number} int32=0 Int32 default\n * @property {number} uint32=0 Uint32 default\n * @property {number} sint32=0 Sint32 default\n * @property {number} fixed32=0 Fixed32 default\n * @property {number} sfixed32=0 Sfixed32 default\n * @property {number} int64=0 Int64 default\n * @property {number} uint64=0 Uint64 default\n * @property {number} sint64=0 Sint32 default\n * @property {number} fixed64=0 Fixed64 default\n * @property {number} sfixed64=0 Sfixed64 default\n * @property {boolean} bool=false Bool default\n * @property {string} string=\"\" String default\n * @property {Array.<number>} bytes=Array(0) Bytes default\n * @property {null} message=null Message default\n */\ntypes.defaults = bake([\n    /* double   */ 0,\n    /* float    */ 0,\n    /* int32    */ 0,\n    /* uint32   */ 0,\n    /* sint32   */ 0,\n    /* fixed32  */ 0,\n    /* sfixed32 */ 0,\n    /* int64    */ 0,\n    /* uint64   */ 0,\n    /* sint64   */ 0,\n    /* fixed64  */ 0,\n    /* sfixed64 */ 0,\n    /* bool     */ false,\n    /* string   */ \"\",\n    /* bytes    */ util.emptyArray,\n    /* message  */ null\n]);\n\n/**\n * Basic long type wire types.\n * @type {Object.<string,number>}\n * @const\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n */\ntypes.long = bake([\n    /* int64    */ 0,\n    /* uint64   */ 0,\n    /* sint64   */ 0,\n    /* fixed64  */ 1,\n    /* sfixed64 */ 1\n], 7);\n\n/**\n * Allowed types for map keys with their associated wire type.\n * @type {Object.<string,number>}\n * @const\n * @property {number} int32=0 Varint wire type\n * @property {number} uint32=0 Varint wire type\n * @property {number} sint32=0 Varint wire type\n * @property {number} fixed32=5 Fixed32 wire type\n * @property {number} sfixed32=5 Fixed32 wire type\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n * @property {number} bool=0 Varint wire type\n * @property {number} string=2 Ldelim wire type\n */\ntypes.mapKey = bake([\n    /* int32    */ 0,\n    /* uint32   */ 0,\n    /* sint32   */ 0,\n    /* fixed32  */ 5,\n    /* sfixed32 */ 5,\n    /* int64    */ 0,\n    /* uint64   */ 0,\n    /* sint64   */ 0,\n    /* fixed64  */ 1,\n    /* sfixed64 */ 1,\n    /* bool     */ 0,\n    /* string   */ 2\n], 2);\n\n/**\n * Allowed types for packed repeated fields with their associated wire type.\n * @type {Object.<string,number>}\n * @const\n * @property {number} double=1 Fixed64 wire type\n * @property {number} float=5 Fixed32 wire type\n * @property {number} int32=0 Varint wire type\n * @property {number} uint32=0 Varint wire type\n * @property {number} sint32=0 Varint wire type\n * @property {number} fixed32=5 Fixed32 wire type\n * @property {number} sfixed32=5 Fixed32 wire type\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n * @property {number} bool=0 Varint wire type\n */\ntypes.packed = bake([\n    /* double   */ 1,\n    /* float    */ 5,\n    /* int32    */ 0,\n    /* uint32   */ 0,\n    /* sint32   */ 0,\n    /* fixed32  */ 5,\n    /* sfixed32 */ 5,\n    /* int64    */ 0,\n    /* uint64   */ 0,\n    /* sint64   */ 0,\n    /* fixed64  */ 1,\n    /* sfixed64 */ 1,\n    /* bool     */ 0\n]);\n","\"use strict\";\nmodule.exports = Field;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\nField.prototype = Object.create(ReflectionObject.prototype, {\n    constructor: {\n        value: Field,\n        writable: true,\n        enumerable: false,\n        configurable: true\n    }\n});\nField.className = \"Field\";\n\nvar Enum  = require(\"./enum\"),\n    types = require(\"./types\"),\n    util  = require(\"./util\");\n\nvar Type; // cyclic\n\nvar ruleRe = /^(?:required|optional|repeated)$/;\n\n/**\n * Constructs a new message field instance. Note that {@link MapField|map fields} have their own class.\n * @name Field\n * @classdesc Reflected message field.\n * @extends FieldBase\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {number} id Unique id within its namespace\n * @param {string} type Value type\n * @param {string|Object.<string,*>} [rule=\"optional\"] Field rule\n * @param {string|Object.<string,*>} [extend] Extended type if different from parent\n * @param {Object.<string,*>} [options] Declared options\n */\n\n/**\n * Constructs a field from a field descriptor.\n * @param {string} name Field name\n * @param {IField} json Field descriptor\n * @returns {Field} Created field\n * @throws {TypeError} If arguments are invalid\n */\nField.fromJSON = function fromJSON(name, json) {\n    var field = new Field(name, json.id, json.type, json.rule, json.extend, json.options, json.comment);\n    if (json.edition)\n        field._edition = json.edition;\n    if (json.protoName)\n        field.protoName = json.protoName;\n    if (json.jsonName !== undefined)\n        field.jsonName = json.jsonName;\n    else if (json.options && json.options.json_name !== undefined)\n        field.jsonName = json.options.json_name;\n    field._defaultEdition = \"proto3\";  // For backwards-compatibility.\n    return field;\n};\n\n/**\n * Not an actual constructor. Use {@link Field} instead.\n * @classdesc Base class of all reflected message fields. This is not an actual class but here for the sake of having consistent type definitions.\n * @exports FieldBase\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {number} id Unique id within its namespace\n * @param {string} type Value type\n * @param {string|Object.<string,*>} [rule=\"optional\"] Field rule\n * @param {string|Object.<string,*>} [extend] Extended type if different from parent\n * @param {Object.<string,*>} [options] Declared options\n * @param {string} [comment] Comment associated with this field\n */\nfunction Field(name, id, type, rule, extend, options, comment) {\n\n    if (util.isObject(rule)) {\n        comment = extend;\n        options = rule;\n        rule = extend = undefined;\n    } else if (util.isObject(extend)) {\n        comment = options;\n        options = extend;\n        extend = undefined;\n    }\n\n    ReflectionObject.call(this, name, options);\n\n    if (!util.isInteger(id) || id < 0)\n        throw TypeError(\"id must be a non-negative integer\");\n\n    if (!util.isString(type))\n        throw TypeError(\"type must be a string\");\n\n    if (rule !== undefined && !ruleRe.test(rule = rule.toString().toLowerCase()))\n        throw TypeError(\"rule must be a string rule\");\n\n    if (extend !== undefined && !util.isString(extend))\n        throw TypeError(\"extend must be a string\");\n\n    /**\n     * Field rule, if any.\n     * @type {string|undefined}\n     */\n    this.rule = rule && rule !== \"optional\" ? rule : undefined; // toJSON\n\n    /**\n     * Field type.\n     * @type {string}\n     */\n    this.type = type; // toJSON\n\n    /**\n     * Unique field id.\n     * @type {number}\n     */\n    this.id = id; // toJSON, marker\n\n    /**\n     * Extended type if different from parent.\n     * @type {string|undefined}\n     */\n    this.extend = extend || undefined; // toJSON\n\n    /**\n     * Whether this field is repeated.\n     * @type {boolean}\n     */\n    this.repeated = rule === \"repeated\";\n\n    /**\n     * Whether this field is a map or not.\n     * @type {boolean}\n     */\n    this.map = false;\n\n    /**\n     * Message this field belongs to.\n     * @type {Type|null}\n     */\n    this.message = null;\n\n    /**\n     * OneOf this field belongs to, if any,\n     * @type {OneOf|null}\n     */\n    this.partOf = null;\n\n    /**\n     * The field type's default value.\n     * @type {*}\n     */\n    this.typeDefault = null;\n\n    /**\n     * The field's default value on prototypes.\n     * @type {*}\n     */\n    this.defaultValue = null;\n\n    /**\n     * Whether this field's value should be treated as a long.\n     * @type {boolean}\n     */\n    this.long = util.Long ? types.long[type] !== undefined : /* istanbul ignore next */ false;\n\n    /**\n     * Whether this field's value is a buffer.\n     * @type {boolean}\n     */\n    this.bytes = type === \"bytes\";\n\n    /**\n     * Resolved type if not a basic type.\n     * @type {Type|Enum|null}\n     */\n    this.resolvedType = null;\n\n    /**\n     * Sister-field within the extended type if a declaring extension field.\n     * @type {Field|null}\n     */\n    this.extensionField = null;\n\n    /**\n     * Sister-field within the declaring namespace if an extended field.\n     * @type {Field|null}\n     */\n    this.declaringField = null;\n\n    /**\n     * Comment for this field.\n     * @type {string|null}\n     */\n    this.comment = comment;\n\n    /**\n     * Field name as declared in the .proto source, if different from `name`.\n     * @type {string|undefined}\n     */\n    this.protoName = undefined;\n\n    /**\n     * JSON name, if different from the derived default.\n     * @type {string|undefined}\n     */\n    this.jsonName = undefined;\n}\n\n/**\n * Determines whether this field is required.\n * @name Field#required\n * @type {boolean}\n * @readonly\n */\nObject.defineProperty(Field.prototype, \"required\", {\n    get: function() {\n        return this._features.field_presence === \"LEGACY_REQUIRED\";\n    }\n});\n\n/**\n * Determines whether this field is not required.\n * @name Field#optional\n * @type {boolean}\n * @readonly\n */\nObject.defineProperty(Field.prototype, \"optional\", {\n    get: function() {\n        return !this.required;\n    }\n});\n\n/**\n * Determines whether this field uses tag-delimited encoding.  In proto2 this\n * corresponded to group syntax.\n * @name Field#delimited\n * @type {boolean}\n * @readonly\n */\nObject.defineProperty(Field.prototype, \"delimited\", {\n    get: function() {\n        return this.resolvedType instanceof Type &&\n            this._features.message_encoding === \"DELIMITED\";\n    }\n});\n\n/**\n * Determines whether this field is packed. Only relevant when repeated.\n * @name Field#packed\n * @type {boolean}\n * @readonly\n */\nObject.defineProperty(Field.prototype, \"packed\", {\n    get: function() {\n        return this._features.repeated_field_encoding === \"PACKED\";\n    }\n});\n\n/**\n * Determines whether this field tracks presence.\n * @name Field#hasPresence\n * @type {boolean}\n * @readonly\n */\nObject.defineProperty(Field.prototype, \"hasPresence\", {\n    get: function() {\n        if (this.repeated || this.map) {\n            return false;\n        }\n        return this.partOf || // oneofs\n            this.declaringField || this.extensionField || // extensions\n            this._features.field_presence !== \"IMPLICIT\";\n    }\n});\n\n/**\n * The field name as declared in the .proto source (snake_case). Populated on resolve,\n * falling back to `name`. Mirrors `FieldDescriptorProto.name`.\n * @name Field#protoName\n * @type {string}\n * @readonly\n */\n\n/**\n * The JSON name of this field (lowerCamelCase per protoc's `ToJsonName`, or an\n * explicit `[json_name]`). Populated on resolve. This is the key used on ProtoJSON output.\n * @name Field#jsonName\n * @type {string}\n * @readonly\n */\n\n/**\n * @override\n */\nField.prototype.setOption = function setOption(name, value, ifNotSet) {\n    return ReflectionObject.prototype.setOption.call(this, name, value, ifNotSet);\n};\n\n/**\n * Field descriptor.\n * @interface IField\n * @property {string} [edition] Edition\n * @property {string} [rule=\"optional\"] Field rule\n * @property {string} type Field type\n * @property {number} id Field id\n * @property {Object.<string,*>} [options] Field options\n * @property {string|null} [comment] Field comment\n */\n\n/**\n * Extension field descriptor.\n * @interface IExtensionField\n * @extends IField\n * @property {string} extend Extended type\n */\n\n/**\n * Converts this field to a field descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IField} Field descriptor\n */\nField.prototype.toJSON = function toJSON(toJSONOptions) {\n    var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n    return util.toObject([\n        \"edition\"      , this._editionToJSON(),\n        \"rule\"         , this.rule !== \"optional\" && this.rule || undefined,\n        \"type\"         , this.type,\n        \"id\"           , this.id,\n        \"extend\"       , this.extend,\n        \"protoName\"    , this.protoName !== this.name ? this.protoName : undefined,\n        \"jsonName\"     , this.jsonName !== util.jsonName(this.protoName || this.name) ? this.jsonName : undefined,\n        \"options\"      , this.options,\n        \"comment\"      , keepComments ? this.comment : undefined\n    ]);\n};\n\n/**\n * Resolves this field's type references.\n * @returns {Field} `this`\n * @throws {Error} If any reference cannot be resolved\n */\nField.prototype.resolve = function resolve() {\n\n    if (this.resolved)\n        return this;\n\n    if ((this.typeDefault = types.defaults[this.type]) === undefined) { // if not a basic type, resolve it\n        this.resolvedType = (this.declaringField ? this.declaringField.parent : this.parent).lookupTypeOrEnum(this.type);\n        if (this.resolvedType instanceof Type)\n            this.typeDefault = null;\n        else // instanceof Enum\n            this.typeDefault = this.resolvedType.values[Object.keys(this.resolvedType.values)[0]]; // first defined\n    } else if (this.options && this.options.proto3_optional) {\n        // proto3 scalar value marked optional; should default to null\n        this.typeDefault = null;\n    }\n\n    // use explicitly set default value if present\n    if (this.options && this.options[\"default\"] != null) {\n        this.typeDefault = this.options[\"default\"];\n        if (this.resolvedType instanceof Enum && typeof this.typeDefault === \"string\")\n            this.typeDefault = this.resolvedType.values[this.typeDefault];\n    }\n\n    // remove unnecessary options\n    if (this.options) {\n        if (this.options.packed !== undefined && this.resolvedType && !(this.resolvedType instanceof Enum))\n            delete this.options.packed;\n        if (!Object.keys(this.options).length)\n            this.options = undefined;\n    }\n\n    // convert to internal data type if necesssary\n    if (this.long) {\n        var unsigned = this.type === \"uint64\" || this.type === \"fixed64\";\n        this.typeDefault = typeof this.typeDefault === \"string\"\n            ? util.Long.fromString(this.typeDefault, unsigned)\n            : util.Long.fromNumber(this.typeDefault, unsigned);\n\n        /* istanbul ignore else */\n        if (Object.freeze)\n            Object.freeze(this.typeDefault); // long instances are meant to be immutable anyway (i.e. use small int cache that even requires it)\n\n    } else if (types.long[this.type] !== undefined && typeof this.typeDefault === \"string\") {\n        this.typeDefault = parseInt(this.typeDefault, 10);\n    } else if (this.bytes && typeof this.typeDefault === \"string\") {\n        var buf;\n        if (util.base64.test(this.typeDefault))\n            util.base64.decode(this.typeDefault, buf = util.newBuffer(util.base64.length(this.typeDefault)), 0);\n        else\n            util.utf8.write(this.typeDefault, buf = util.newBuffer(util.utf8.length(this.typeDefault)), 0);\n        this.typeDefault = buf;\n    }\n\n    // take special care of maps and repeated fields\n    if (this.map)\n        this.defaultValue = util.emptyObject;\n    else if (this.repeated)\n        this.defaultValue = util.emptyArray;\n    else\n        this.defaultValue = this.typeDefault;\n\n    // ensure proper value on prototype\n    if (this.parent instanceof Type && this.parent._ctor)\n        this.parent._ctor.prototype[this.name] = this.defaultValue;\n\n    // derive the proto/JSON names\n    if (this.protoName === undefined)\n        this.protoName = this.name;\n    if (this.jsonName === undefined)\n        this.jsonName = util.jsonName(this.protoName);\n\n    return ReflectionObject.prototype.resolve.call(this);\n};\n\n/**\n * Infers field features from legacy syntax that may have been specified differently.\n * in older editions.\n * @param {string|undefined} edition The edition this proto is on, or undefined if pre-editions\n * @returns {object} The feature values to override\n */\nField.prototype._inferLegacyProtoFeatures = function _inferLegacyProtoFeatures(edition) {\n    if (edition !== \"proto2\" && edition !== \"proto3\") {\n        return {};\n    }\n\n    var features = {};\n\n    if (this.rule === \"required\") {\n        features.field_presence = \"LEGACY_REQUIRED\";\n    }\n    if (this.parent && types.defaults[this.type] === undefined) {\n        // We can't use resolvedType because types may not have been resolved yet.  However,\n        // legacy groups are always in the same scope as the field so we don't have to do a\n        // full scan of the tree.\n        var type = this.parent.get(this.type.split(\".\").pop());\n        if (type && type instanceof Type && type.group) {\n            features.message_encoding = \"DELIMITED\";\n        }\n    }\n    if (this.getOption(\"packed\") === true) {\n        features.repeated_field_encoding = \"PACKED\";\n    } else if (this.getOption(\"packed\") === false) {\n        features.repeated_field_encoding = \"EXPANDED\";\n    }\n    return features;\n};\n\n/**\n * @override\n */\nField.prototype._resolveFeatures = function _resolveFeatures(edition) {\n    return ReflectionObject.prototype._resolveFeatures.call(this, this._edition || edition);\n};\n\n/**\n * Decorator function as returned by {@link Field.d} and {@link MapField.d} (TypeScript).\n * @typedef FieldDecorator\n * @type {function}\n * @param {Object} prototype Target prototype\n * @param {string} fieldName Field name\n * @returns {undefined}\n * @deprecated Legacy TypeScript decorator support. Will be removed in a future release.\n */\n\n/**\n * Field decorator (TypeScript).\n * @name Field.d\n * @function\n * @param {number} fieldId Field id\n * @param {\"double\"|\"float\"|\"int32\"|\"uint32\"|\"sint32\"|\"fixed32\"|\"sfixed32\"|\"int64\"|\"uint64\"|\"sint64\"|\"fixed64\"|\"sfixed64\"|\"string\"|\"bool\"|\"bytes\"|Object} fieldType Field type\n * @param {\"optional\"|\"required\"|\"repeated\"} [fieldRule=\"optional\"] Field rule\n * @param {T} [defaultValue] Default value\n * @returns {FieldDecorator} Decorator function\n * @template T extends number | number[] | Long | Long[] | string | string[] | boolean | boolean[] | Uint8Array | Uint8Array[] | Buffer | Buffer[]\n * @deprecated Legacy TypeScript decorator support. Will be removed in a future release.\n */\nField.d = function decorateField(fieldId, fieldType, fieldRule, defaultValue) {\n\n    // submessage: decorate the submessage and use its name as the type\n    if (typeof fieldType === \"function\")\n        fieldType = util.decorateType(fieldType).name;\n\n    // enum reference: create a reflected copy of the enum and keep reuseing it\n    else if (fieldType && typeof fieldType === \"object\")\n        fieldType = util.decorateEnum(fieldType).name;\n\n    return function fieldDecorator(prototype, fieldName) {\n        util.decorateType(prototype.constructor)\n            .add(new Field(fieldName, fieldId, fieldType, fieldRule, { \"default\": defaultValue }));\n    };\n};\n\n// Sets up cyclic dependencies (called in index-light)\nField._configure = function configure(Type_) {\n    Type = Type_;\n};\n\n/**\n * Field decorator (TypeScript).\n * @name Field.d\n * @function\n * @param {number} fieldId Field id\n * @param {Constructor<T>|string} fieldType Field type\n * @param {\"optional\"|\"required\"|\"repeated\"} [fieldRule=\"optional\"] Field rule\n * @returns {FieldDecorator} Decorator function\n * @template T extends Message<T>\n * @variation 2\n * @deprecated Legacy TypeScript decorator support. Will be removed in a future release.\n */\n// like Field.d but without a default value\n","\"use strict\";\nmodule.exports = OneOf;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\nOneOf.prototype = Object.create(ReflectionObject.prototype, {\n    constructor: {\n        value: OneOf,\n        writable: true,\n        enumerable: false,\n        configurable: true\n    }\n});\nOneOf.className = \"OneOf\";\n\nvar Field = require(\"./field\"),\n    util  = require(\"./util\");\n\n/**\n * Constructs a new oneof instance.\n * @classdesc Reflected oneof.\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Oneof name\n * @param {string[]|Object.<string,*>} [fieldNames] Field names\n * @param {Object.<string,*>} [options] Declared options\n * @param {string} [comment] Comment associated with this field\n */\nfunction OneOf(name, fieldNames, options, comment) {\n    if (!Array.isArray(fieldNames)) {\n        options = fieldNames;\n        fieldNames = undefined;\n    }\n    ReflectionObject.call(this, name, options);\n\n    /* istanbul ignore if */\n    if (!(fieldNames === undefined || Array.isArray(fieldNames)))\n        throw TypeError(\"fieldNames must be an Array\");\n\n    /**\n     * Field names that belong to this oneof.\n     * @type {string[]}\n     */\n    this.oneof = fieldNames || []; // toJSON, marker\n\n    /**\n     * Fields that belong to this oneof as an array for iteration.\n     * @type {Field[]}\n     * @readonly\n     */\n    this.fieldsArray = []; // declared readonly for conformance, possibly not yet added to parent\n\n    /**\n     * Comment for this field.\n     * @type {string|null}\n     */\n    this.comment = comment;\n}\n\n/**\n * Oneof descriptor.\n * @interface IOneOf\n * @property {Array.<string>} oneof Oneof field names\n * @property {Object.<string,*>} [options] Oneof options\n * @property {string|null} [comment] Oneof comment\n */\n\n/**\n * Constructs a oneof from a oneof descriptor.\n * @param {string} name Oneof name\n * @param {IOneOf} json Oneof descriptor\n * @returns {OneOf} Created oneof\n * @throws {TypeError} If arguments are invalid\n */\nOneOf.fromJSON = function fromJSON(name, json) {\n    return new OneOf(name, json.oneof, json.options, json.comment);\n};\n\n/**\n * Converts this oneof to a oneof descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IOneOf} Oneof descriptor\n */\nOneOf.prototype.toJSON = function toJSON(toJSONOptions) {\n    var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n    return util.toObject([\n        \"options\" , this.options,\n        \"oneof\"   , this.oneof,\n        \"comment\" , keepComments ? this.comment : undefined\n    ]);\n};\n\n/**\n * Adds the fields of the specified oneof to the parent if not already done so.\n * @param {OneOf} oneof The oneof\n * @returns {undefined}\n * @inner\n * @ignore\n */\nfunction addFieldsToParent(oneof) {\n    if (oneof.parent)\n        for (var i = 0; i < oneof.fieldsArray.length; ++i)\n            if (!oneof.fieldsArray[i].parent)\n                oneof.parent.add(oneof.fieldsArray[i]);\n}\n\n/**\n * Adds a field to this oneof and removes it from its current parent, if any.\n * @param {Field} field Field to add\n * @returns {OneOf} `this`\n */\nOneOf.prototype.add = function add(field) {\n\n    /* istanbul ignore if */\n    if (!(field instanceof Field))\n        throw TypeError(\"field must be a Field\");\n\n    if (field.parent && field.parent !== this.parent)\n        field.parent.remove(field);\n    this.oneof.push(field.name);\n    this.fieldsArray.push(field);\n    field.partOf = this; // field.parent remains null\n    addFieldsToParent(this);\n    return this;\n};\n\n/**\n * Removes a field from this oneof and puts it back to the oneof's parent.\n * @param {Field} field Field to remove\n * @returns {OneOf} `this`\n */\nOneOf.prototype.remove = function remove(field) {\n\n    /* istanbul ignore if */\n    if (!(field instanceof Field))\n        throw TypeError(\"field must be a Field\");\n\n    var index = this.fieldsArray.indexOf(field);\n\n    /* istanbul ignore if */\n    if (index < 0)\n        throw Error(field + \" is not a member of \" + this);\n\n    this.fieldsArray.splice(index, 1);\n    index = this.oneof.indexOf(field.name);\n\n    /* istanbul ignore else */\n    if (index > -1) // theoretical\n        this.oneof.splice(index, 1);\n\n    field.partOf = null;\n    return this;\n};\n\n/**\n * @override\n */\nOneOf.prototype.onAdd = function onAdd(parent) {\n    ReflectionObject.prototype.onAdd.call(this, parent);\n    var self = this;\n    // Collect present fields\n    for (var i = 0; i < this.oneof.length; ++i) {\n        var field = parent.get(this.oneof[i]);\n        if (field && !field.partOf) {\n            field.partOf = self;\n            self.fieldsArray.push(field);\n        }\n    }\n    // Add not yet present fields\n    addFieldsToParent(this);\n};\n\n/**\n * @override\n */\nOneOf.prototype.onRemove = function onRemove(parent) {\n    for (var i = 0, field; i < this.fieldsArray.length; ++i)\n        if ((field = this.fieldsArray[i]).parent)\n            field.parent.remove(field);\n    ReflectionObject.prototype.onRemove.call(this, parent);\n};\n\n/**\n * Determines whether this field corresponds to a synthetic oneof created for\n * a proto3 optional field.  No behavioral logic should depend on this, but it\n * can be relevant for reflection.\n * @name OneOf#isProto3Optional\n * @type {boolean}\n * @readonly\n */\nObject.defineProperty(OneOf.prototype, \"isProto3Optional\", {\n    get: function() {\n        if (this.fieldsArray == null || this.fieldsArray.length !== 1) {\n            return false;\n        }\n\n        var field = this.fieldsArray[0];\n        return field.options != null && field.options[\"proto3_optional\"] === true;\n    }\n});\n\n/**\n * Decorator function as returned by {@link OneOf.d} (TypeScript).\n * @typedef OneOfDecorator\n * @type {function}\n * @param {Object} prototype Target prototype\n * @param {string} oneofName OneOf name\n * @returns {undefined}\n * @deprecated Legacy TypeScript decorator support. Will be removed in a future release.\n */\n\n/**\n * OneOf decorator (TypeScript).\n * @function\n * @param {...string} fieldNames Field names\n * @returns {OneOfDecorator} Decorator function\n * @template T extends string\n * @deprecated Legacy TypeScript decorator support. Will be removed in a future release.\n */\nOneOf.d = function decorateOneOf() {\n    var fieldNames = new Array(arguments.length),\n        index = 0;\n    while (index < arguments.length)\n        fieldNames[index] = arguments[index++];\n    return function oneOfDecorator(prototype, oneofName) {\n        util.decorateType(prototype.constructor)\n            .add(new OneOf(oneofName, fieldNames));\n        Object.defineProperty(prototype, oneofName, {\n            get: util.oneOfGetter(fieldNames),\n            set: util.oneOfSetter(fieldNames)\n        });\n    };\n};\n","\"use strict\";\nmodule.exports = ReflectionObject;\n\nReflectionObject.className = \"ReflectionObject\";\n\nconst OneOf = require(\"./oneof\");\nvar util = require(\"./util\");\n\nvar Root; // cyclic\n\n/* eslint-disable no-warning-comments */\n// TODO: Replace with embedded proto.\nvar editions2024Defaults = {enum_type: \"OPEN\", field_presence: \"EXPLICIT\", json_format: \"ALLOW\", message_encoding: \"LENGTH_PREFIXED\", repeated_field_encoding: \"PACKED\", utf8_validation: \"VERIFY\", enforce_naming_style: \"STYLE2024\", default_symbol_visibility: \"EXPORT_TOP_LEVEL\" };\nvar editions2023Defaults = {enum_type: \"OPEN\", field_presence: \"EXPLICIT\", json_format: \"ALLOW\", message_encoding: \"LENGTH_PREFIXED\", repeated_field_encoding: \"PACKED\", utf8_validation: \"VERIFY\", enforce_naming_style: \"STYLE_LEGACY\", default_symbol_visibility: \"EXPORT_ALL\" };\nvar proto2Defaults = {enum_type: \"CLOSED\", field_presence: \"EXPLICIT\", json_format: \"LEGACY_BEST_EFFORT\", message_encoding: \"LENGTH_PREFIXED\", repeated_field_encoding: \"EXPANDED\", utf8_validation: \"NONE\", enforce_naming_style: \"STYLE_LEGACY\", default_symbol_visibility: \"EXPORT_ALL\" };\nvar proto3Defaults = {enum_type: \"OPEN\", field_presence: \"IMPLICIT\", json_format: \"ALLOW\", message_encoding: \"LENGTH_PREFIXED\", repeated_field_encoding: \"PACKED\", utf8_validation: \"VERIFY\", enforce_naming_style: \"STYLE_LEGACY\", default_symbol_visibility: \"EXPORT_ALL\" };\n\n/**\n * Constructs a new reflection object instance.\n * @classdesc Base class of all reflection objects.\n * @constructor\n * @param {string} name Object name\n * @param {Object.<string,*>} [options] Declared options\n * @abstract\n */\nfunction ReflectionObject(name, options) {\n\n    if (!util.isString(name))\n        throw TypeError(\"name must be a string\");\n\n    if (options && !util.isObject(options))\n        throw TypeError(\"options must be an object\");\n\n    /**\n     * Options.\n     * @type {Object.<string,*>|undefined}\n     */\n    this.options = options; // toJSON\n\n    /**\n     * Parsed Options.\n     * @type {Array.<Object.<string,*>>|undefined}\n     */\n    this.parsedOptions = null;\n\n    /**\n     * Unique name within its namespace.\n     * @type {string}\n     */\n    this.name = name;\n\n    /**\n     * The edition specified for this object.  Only relevant for top-level objects.\n     * @type {string}\n     * @private\n     */\n    this._edition = null;\n\n    /**\n     * The default edition to use for this object if none is specified.  For legacy reasons,\n     * this is proto2 except in the JSON parsing case where it was proto3.\n     * @type {string}\n     * @private\n     */\n    this._defaultEdition = \"proto2\";\n\n    /**\n     * Resolved Features.\n     * @type {object}\n     * @private\n     */\n    this._features = {};\n\n    /**\n     * Whether or not features have been resolved.\n     * @type {boolean}\n     * @private\n     */\n    this._featuresResolved = false;\n\n    /**\n     * Parent namespace.\n     * @type {Namespace|null}\n     */\n    this.parent = null;\n\n    /**\n     * Whether already resolved or not.\n     * @type {boolean}\n     */\n    this.resolved = false;\n\n    /**\n     * Comment text, if any.\n     * @type {string|null}\n     */\n    this.comment = null;\n\n    /**\n     * Defining file name.\n     * @type {string|null}\n     */\n    this.filename = null;\n}\n\nObject.defineProperties(ReflectionObject.prototype, {\n\n    /**\n     * Reference to the root namespace.\n     * @name ReflectionObject#root\n     * @type {Root}\n     * @readonly\n     */\n    root: {\n        get: function() {\n            var ptr = this;\n            while (ptr.parent !== null)\n                ptr = ptr.parent;\n            return ptr;\n        }\n    },\n\n    /**\n     * Full name including leading dot.\n     * @name ReflectionObject#fullName\n     * @type {string}\n     * @readonly\n     */\n    fullName: {\n        get: function() {\n            var path = [ this.name ],\n                ptr = this.parent;\n            while (ptr) {\n                path.unshift(ptr.name);\n                ptr = ptr.parent;\n            }\n            return path.join(\".\");\n        }\n    }\n});\n\n/**\n * Converts this reflection object to its descriptor representation.\n * @returns {Object.<string,*>} Descriptor\n */\nReflectionObject.prototype.toJSON = /* istanbul ignore next */ function toJSON() {\n    throw Error(); // not implemented, shouldn't happen\n};\n\n/**\n * Called when this object is added to a parent.\n * @param {ReflectionObject} parent Parent added to\n * @returns {undefined}\n */\nReflectionObject.prototype.onAdd = function onAdd(parent) {\n    if (this.parent && this.parent !== parent)\n        this.parent.remove(this);\n    this.parent = parent;\n    this.resolved = false;\n    var root = parent.root;\n    if (root instanceof Root)\n        root._handleAdd(this);\n};\n\n/**\n * Called when this object is removed from a parent.\n * @param {ReflectionObject} parent Parent removed from\n * @returns {undefined}\n */\nReflectionObject.prototype.onRemove = function onRemove(parent) {\n    var root = parent.root;\n    if (root instanceof Root)\n        root._handleRemove(this);\n    this.parent = null;\n    this.resolved = false;\n};\n\n/**\n * Resolves this objects type references.\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.resolve = function resolve() {\n    if (this.resolved)\n        return this;\n    if (this.root instanceof Root)\n        this.resolved = true; // only if part of a root\n    return this;\n};\n\n/**\n * Resolves this objects editions features.\n * @param {string} edition The edition we're currently resolving for.\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype._resolveFeaturesRecursive = function _resolveFeaturesRecursive(edition) {\n    return this._resolveFeatures(this._edition || edition);\n};\n\n/**\n * Resolves child features from parent features\n * @param {string} edition The edition we're currently resolving for.\n * @returns {undefined}\n */\nReflectionObject.prototype._resolveFeatures = function _resolveFeatures(edition) {\n    if (this._featuresResolved) {\n        return;\n    }\n\n    var defaults = {};\n\n    /* istanbul ignore if */\n    if (!edition) {\n        throw new Error(\"Unknown edition for \" + this.fullName);\n    }\n\n    var protoFeatures = util.merge({}, this.options && this.options.features,\n        this._inferLegacyProtoFeatures(edition));\n\n    if (this._edition) {\n        // For a namespace marked with a specific edition, reset defaults.\n        /* istanbul ignore else */\n        if (edition === \"proto2\") {\n            defaults = Object.assign({}, proto2Defaults);\n        } else if (edition === \"proto3\") {\n            defaults = Object.assign({}, proto3Defaults);\n        } else if (edition === \"2023\") {\n            defaults = Object.assign({}, editions2023Defaults);\n        } else if (edition === \"2024\") {\n            defaults = Object.assign({}, editions2024Defaults);\n        } else {\n            throw new Error(\"Unknown edition: \" + edition);\n        }\n        this._features = util.merge(defaults, protoFeatures);\n    } else {\n        // fields in Oneofs aren't actually children of them, so we have to\n        // special-case it\n        /* istanbul ignore else */\n        if (this.partOf instanceof OneOf) {\n            var lexicalParentFeaturesCopy = util.merge({}, this.partOf._features);\n            this._features = util.merge(lexicalParentFeaturesCopy, protoFeatures);\n        } else if (this.declaringField) {\n            // Skip feature resolution of sister fields.\n        } else if (this.parent) {\n            var parentFeaturesCopy = util.merge({}, this.parent._features);\n            this._features = util.merge(parentFeaturesCopy, protoFeatures);\n        } else {\n            throw new Error(\"Unable to find a parent for \" + this.fullName);\n        }\n    }\n    if (this.extensionField) {\n        // Sister fields should have the same features as their extensions.\n        this.extensionField._features = this._features;\n    }\n    this._featuresResolved = true;\n};\n\n/**\n * Infers features from legacy syntax that may have been specified differently.\n * in older editions.\n * @param {string|undefined} edition The edition this proto is on, or undefined if pre-editions\n * @returns {object} The feature values to override\n */\nReflectionObject.prototype._inferLegacyProtoFeatures = function _inferLegacyProtoFeatures(/*edition*/) {\n    return {};\n};\n\n/**\n * Gets an option value.\n * @param {string} name Option name\n * @returns {*} Option value or `undefined` if not set\n */\nReflectionObject.prototype.getOption = function getOption(name) {\n    if (this.options && Object.prototype.hasOwnProperty.call(this.options, name))\n        return this.options[name];\n    return undefined;\n};\n\n/**\n * Sets an option.\n * @param {string} name Option name\n * @param {*} value Option value\n * @param {boolean|undefined} [ifNotSet] Sets the option only if it isn't currently set\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.setOption = function setOption(name, value, ifNotSet) {\n    if (name === \"__proto__\")\n        return this;\n    if (!this.options)\n        this.options = {};\n    if (/^features\\./.test(name)) {\n        util.setProperty(this.options, name, value, ifNotSet);\n    } else {\n        var prev = this.getOption(name);\n        if (!ifNotSet || prev === undefined) {\n            if (prev !== value) this.resolved = false;\n            this.options[name] = value;\n        }\n    }\n\n    return this;\n};\n\n/**\n * Sets a parsed option.\n * @param {string} name parsed Option name\n * @param {*} value Option value\n * @param {string} propName dot '.' delimited full path of property within the option to set. if undefined\\empty, will add a new option with that value\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.setParsedOption = function setParsedOption(name, value, propName) {\n    if (name === \"__proto__\")\n        return this;\n    if (!this.parsedOptions) {\n        this.parsedOptions = [];\n    }\n    var parsedOptions = this.parsedOptions;\n    if (propName) {\n        // If setting a sub property of an option then try to merge it\n        // with an existing option\n        var opt = parsedOptions.find(function (opt) {\n            return Object.prototype.hasOwnProperty.call(opt, name);\n        });\n        if (opt) {\n            // If we found an existing option - just merge the property value\n            // (If it's a feature, will just write over)\n            var newValue = opt[name];\n            util.setProperty(newValue, propName, value);\n        } else {\n            // otherwise, create a new option, set its property and add it to the list\n            opt = {};\n            opt[name] = util.setProperty({}, propName, value);\n            parsedOptions.push(opt);\n        }\n    } else {\n        // Always create a new option when setting the value of the option itself\n        var newOpt = {};\n        newOpt[name] = value;\n        parsedOptions.push(newOpt);\n    }\n\n    return this;\n};\n\n/**\n * Sets multiple options.\n * @param {Object.<string,*>} options Options to set\n * @param {boolean} [ifNotSet] Sets an option only if it isn't currently set\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.setOptions = function setOptions(options, ifNotSet) {\n    if (options)\n        for (var keys = Object.keys(options), i = 0; i < keys.length; ++i)\n            this.setOption(keys[i], options[keys[i]], ifNotSet);\n    return this;\n};\n\n/**\n * Converts this instance to its string representation.\n * @name ReflectionObject#toString\n * @function\n * @returns {string} Class name[, space, full name]\n */\nObject.defineProperty(ReflectionObject.prototype, \"toString\", {\n    value: function toString() {\n        var className = this.constructor.className,\n            fullName  = this.fullName;\n        if (fullName.length)\n            return className + \" \" + fullName;\n        return className;\n    },\n    writable: true,\n    enumerable: false,\n    configurable: true\n});\n\n/**\n * Converts the edition this object is pinned to for JSON format.\n * @returns {string|undefined} The edition string for JSON representation\n */\nReflectionObject.prototype._editionToJSON = function _editionToJSON() {\n    if (!this._edition || this._edition === \"proto3\") {\n        // Avoid emitting proto3 since we need to default to it for backwards\n        // compatibility anyway.\n        return undefined;\n    }\n    return this._edition;\n};\n\n// Sets up cyclic dependencies (called in index-light)\nReflectionObject._configure = function(Root_) {\n    Root = Root_;\n};\n","\"use strict\";\nmodule.exports = Enum;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\nEnum.prototype = Object.create(ReflectionObject.prototype, {\n    constructor: {\n        value: Enum,\n        writable: true,\n        enumerable: false,\n        configurable: true\n    }\n});\nEnum.className = \"Enum\";\n\nvar Namespace = require(\"./namespace\"),\n    util = require(\"./util\");\n\n/**\n * Constructs a new enum instance.\n * @classdesc Reflected enum.\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {Object.<string,number>} [values] Enum values as an object, by name\n * @param {Object.<string,*>} [options] Declared options\n * @param {string} [comment] The comment for this enum\n * @param {Object.<string,string|null>} [comments] The value comments for this enum\n * @param {Object.<string,Object<string,*>>|undefined} [valuesOptions] The value options for this enum\n */\nfunction Enum(name, values, options, comment, comments, valuesOptions) {\n    ReflectionObject.call(this, name, options);\n\n    if (values && typeof values !== \"object\")\n        throw TypeError(\"values must be an object\");\n\n    /**\n     * Enum values by id.\n     * @type {Object.<number,string>}\n     */\n    this.valuesById = Object.create(null);\n\n    /**\n     * Enum values by name.\n     * @type {Object.<string,number>}\n     */\n    this.values = Object.create(this.valuesById); // toJSON, marker\n\n    /**\n     * Enum comment text.\n     * @type {string|null}\n     */\n    this.comment = comment;\n\n    /**\n     * Value comment texts, if any.\n     * @type {Object.<string,string|null>}\n     */\n    this.comments = comments || {};\n\n    /**\n     * Values options, if any\n     * @type {Object<string, Object<string, *>>|undefined}\n     */\n    this.valuesOptions = valuesOptions;\n\n    /**\n     * Resolved values features, if any\n     * @type {Object<string, Object<string, *>>|undefined}\n     */\n    this._valuesFeatures = {};\n\n    /**\n     * Reserved ranges, if any.\n     * @type {Array.<number[]|string>}\n     */\n    this.reserved = undefined; // toJSON\n\n    // Note that values inherit valuesById on their prototype which makes them a TypeScript-\n    // compatible enum. This is used by pbts to write actual enum definitions that work for\n    // static and reflection code alike instead of emitting generic object definitions.\n\n    if (values)\n        for (var keys = Object.keys(values), i = 0; i < keys.length; ++i)\n            if (keys[i] !== \"__proto__\" && typeof values[keys[i]] === \"number\") { // use forward entries only\n                this.values[keys[i]] = values[keys[i]];\n                if (this.valuesById[values[keys[i]]] === undefined)\n                    this.valuesById[values[keys[i]]] = keys[i];\n            }\n}\n\n/**\n * @override\n */\nEnum.prototype._resolveFeatures = function _resolveFeatures(edition) {\n    edition = this._edition || edition;\n    ReflectionObject.prototype._resolveFeatures.call(this, edition);\n\n    Object.keys(this.values).forEach(key => {\n        var parentFeaturesCopy = util.merge({}, this._features);\n        this._valuesFeatures[key] = util.merge(parentFeaturesCopy, this.valuesOptions && this.valuesOptions[key] && this.valuesOptions[key].features || {});\n    });\n\n    return this;\n};\n\n/**\n * Enum descriptor.\n * @interface IEnum\n * @property {string} [edition] Edition\n * @property {Object.<string,number>} values Enum values\n * @property {Object.<string,*>} [options] Enum options\n * @property {Object.<string,Object.<string,*>>} [valuesOptions] Enum value options\n * @property {Array.<number[]|string>} [reserved] Reserved ranges\n * @property {string|null} [comment] Enum comment\n * @property {Object.<string,string|null>} [comments] Value comments\n */\n\n/**\n * Constructs an enum from an enum descriptor.\n * @param {string} name Enum name\n * @param {IEnum} json Enum descriptor\n * @returns {Enum} Created enum\n * @throws {TypeError} If arguments are invalid\n */\nEnum.fromJSON = function fromJSON(name, json) {\n    var enm = new Enum(name, json.values, json.options, json.comment, json.comments, json.valuesOptions);\n    enm.reserved = json.reserved;\n    if (json.edition)\n        enm._edition = json.edition;\n    enm._defaultEdition = \"proto3\";  // For backwards-compatibility.\n    return enm;\n};\n\n/**\n * Converts this enum to an enum descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IEnum} Enum descriptor\n */\nEnum.prototype.toJSON = function toJSON(toJSONOptions) {\n    var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n    return util.toObject([\n        \"edition\"       , this._editionToJSON(),\n        \"options\"       , this.options,\n        \"valuesOptions\" , this.valuesOptions,\n        \"values\"        , this.values,\n        \"reserved\"      , this.reserved && this.reserved.length ? this.reserved : undefined,\n        \"comment\"       , keepComments ? this.comment : undefined,\n        \"comments\"      , keepComments ? this.comments : undefined\n    ]);\n};\n\n/**\n * Adds a value to this enum.\n * @param {string} name Value name\n * @param {number} id Value id\n * @param {string} [comment] Comment, if any\n * @param {Object.<string, *>|undefined} [options] Options, if any\n * @returns {Enum} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If there is already a value with this name or id\n */\nEnum.prototype.add = function add(name, id, comment, options) {\n    // utilized by the parser but not by .fromJSON\n\n    if (!util.isString(name))\n        throw TypeError(\"name must be a string\");\n\n    if (!util.isInteger(id))\n        throw TypeError(\"id must be an integer\");\n\n    if (name === \"__proto__\")\n        return this;\n\n    if (this.values[name] !== undefined)\n        throw Error(\"duplicate name '\" + name + \"' in \" + this);\n\n    if (this.isReservedId(id))\n        throw Error(\"id \" + id + \" is reserved in \" + this);\n\n    if (this.isReservedName(name))\n        throw Error(\"name '\" + name + \"' is reserved in \" + this);\n\n    if (this.valuesById[id] !== undefined) {\n        if (!(this.options && this.options.allow_alias))\n            throw Error(\"duplicate id \" + id + \" in \" + this);\n        this.values[name] = id;\n    } else\n        this.valuesById[this.values[name] = id] = name;\n\n    if (options) {\n        if (this.valuesOptions === undefined)\n            this.valuesOptions = {};\n        this.valuesOptions[name] = options || null;\n    }\n\n    this.comments[name] = comment || null;\n    return this;\n};\n\n/**\n * Removes a value from this enum\n * @param {string} name Value name\n * @returns {Enum} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If `name` is not a name of this enum\n */\nEnum.prototype.remove = function remove(name) {\n\n    if (!util.isString(name))\n        throw TypeError(\"name must be a string\");\n\n    var val = this.values[name];\n    if (val == null)\n        throw Error(\"name '\" + name + \"' does not exist in \" + this);\n\n    delete this.valuesById[val];\n    delete this.values[name];\n    delete this.comments[name];\n    if (this.valuesOptions)\n        delete this.valuesOptions[name];\n\n    return this;\n};\n\n/**\n * Tests if the specified id is reserved.\n * @param {number} id Id to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nEnum.prototype.isReservedId = function isReservedId(id) {\n    return Namespace.isReservedId(this.reserved, id);\n};\n\n/**\n * Tests if the specified name is reserved.\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nEnum.prototype.isReservedName = function isReservedName(name) {\n    return Namespace.isReservedName(this.reserved, name);\n};\n","\"use strict\";\nmodule.exports = encoder;\n\nvar Enum     = require(\"./enum\"),\n    types    = require(\"./types\"),\n    util     = require(\"./util\");\n\n/**\n * Generates a partial message type encoder.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {number} fieldIndex Field index\n * @param {string} ref Variable reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genTypePartial(gen, field, fieldIndex, ref) {\n    return field.delimited\n        ? gen(\"types[%i].encode(%s,w.uint32(%i),q+1).uint32(%i)\", fieldIndex, ref, (field.id << 3 | 3) >>> 0, (field.id << 3 | 4) >>> 0)\n        : gen(\"types[%i].encode(%s,w.uint32(%i).fork(),q+1).ldelim()\", fieldIndex, ref, (field.id << 3 | 2) >>> 0);\n}\n\n/**\n * Generates an encoder specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nfunction encoder(mtype) {\n    /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n    var gen = util.codegen([\"m\", \"w\", \"q\"])\n    (\"if(!w)\")\n        (\"w=Writer.create()\")\n    (\"if(q===undefined)q=0\")\n    (\"if(q>util.recursionLimit)\")\n        (\"throw Error(\\\"max depth exceeded\\\")\");\n\n    var i, ref;\n\n    // \"when a message is serialized its known fields should be written sequentially by field number\"\n    var fields = /* initializes */ mtype.fieldsArray.slice().sort(util.compareFieldsById);\n\n    for (var i = 0; i < fields.length; ++i) {\n        var field    = fields[i].resolve(),\n            index    = mtype._fieldsArray.indexOf(field),\n            type     = field.resolvedType instanceof Enum ? \"int32\" : field.type,\n            wireType = types.basic[type];\n            ref      = \"m\" + util.safeProp(field.name);\n\n        // Map fields\n        if (field.map) {\n            gen\n    (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j)){\", ref, field.name) // !== undefined && !== null\n        (\"for(var ks=Object.keys(%s),i=0;i<ks.length;++i){\", ref);\n            if (field.keyType === \"bool\") gen\n            (\"w.uint32(%i).fork().uint32(%i).bool(util.boolFromKey(ks[i]))\", (field.id << 3 | 2) >>> 0, 8 | types.mapKey[field.keyType]);\n            else if (types.long[field.keyType] !== undefined) gen\n            (\"w.uint32(%i).fork().uint32(%i).%s(util.longFromKey(ks[i],%j))\", (field.id << 3 | 2) >>> 0, 8 | types.mapKey[field.keyType], field.keyType, field.keyType === \"uint64\" || field.keyType === \"fixed64\");\n            else gen\n            (\"w.uint32(%i).fork().uint32(%i).%s(ks[i])\", (field.id << 3 | 2) >>> 0, 8 | types.mapKey[field.keyType], field.keyType);\n            if (wireType === undefined) gen\n            (\"types[%i].encode(%s[ks[i]],w.uint32(18).fork(),q+1).ldelim().ldelim()\", index, ref); // can't be groups\n            else gen\n            (\".uint32(%i).%s(%s[ks[i]]).ldelim()\", 16 | wireType, type, ref);\n            gen\n        (\"}\")\n    (\"}\");\n\n            // Repeated fields\n        } else if (field.repeated) { gen\n    (\"if(%s!=null&&%s.length){\", ref, ref); // !== undefined && !== null\n\n            // Packed repeated\n            if (field.packed && types.packed[type] !== undefined) { gen\n\n        (\"w.uint32(%i).%ss(%s)\", (field.id << 3 | 2) >>> 0, type, ref);\n\n            // Non-packed\n            } else { gen\n\n        (\"for(var i=0;i<%s.length;++i)\", ref);\n                if (wireType === undefined)\n            genTypePartial(gen, field, index, ref + \"[i]\");\n                else gen\n            (\"w.uint32(%i).%s(%s[i])\", (field.id << 3 | wireType) >>> 0, type, ref);\n\n            } gen\n    (\"}\");\n\n        // Non-repeated\n        } else {\n            if (!field.required)\n                if (field.hasPresence || !(field.resolvedType instanceof Enum || types.basic[type] !== undefined)) gen\n    (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j))\", ref, field.name); // !== undefined && !== null\n                else if (field.resolvedType instanceof Enum) gen\n    (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j)&&%s!==%j)\", ref, field.name, ref, field.typeDefault);\n                else if (type === \"bool\") gen\n    (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j)&&%s!==false)\", ref, field.name, ref);\n                else if (type === \"string\") gen\n    (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j)&&%s!==\\\"\\\")\", ref, field.name, ref);\n                else if (type === \"bytes\") gen\n    (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j)&&%s.length)\", ref, field.name, ref);\n                else if (type === \"double\" || type === \"float\") gen\n    (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j)&&!Object.is(%s,0))\", ref, field.name, ref);\n                else if (types.long[type] !== undefined) gen\n    (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j)&&(typeof %s===\\\"object\\\"?%s.low||%s.high:%s!==0))\", ref, field.name, ref, ref, ref, ref);\n                else gen\n    (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j)&&%s!==0)\", ref, field.name, ref);\n\n            if (wireType === undefined)\n        genTypePartial(gen, field, index, ref);\n            else gen\n        (\"w.uint32(%i).%s(%s)\", (field.id << 3 | wireType) >>> 0, type, ref);\n\n        }\n    }\n\n    return gen\n    (\"if(m.$unknowns!=null&&Object.hasOwnProperty.call(m,\\\"$unknowns\\\"))\")\n        (\"for(var i=0;i<m.$unknowns.length;++i)\")\n            (\"w.raw(m.$unknowns[i])\")\n    (\"return w\");\n    /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n}\n","\"use strict\";\nexports = module.exports = require(\"./index-minimal\");\n\nexports.build = \"light\";\n\n/**\n * A node-style callback as used by {@link load} and {@link Root#load}.\n * @typedef LoadCallback\n * @type {function}\n * @param {Error|null} error Error, if any, otherwise `null`\n * @param {Root} [root] Root, if there hasn't been an error\n * @returns {undefined}\n */\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into a common root namespace and calls the callback.\n * @param {string|string[]} filename One or multiple files to load\n * @param {Root} root Root namespace, defaults to create a new one if omitted.\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n * @see {@link Root#load}\n */\nfunction load(filename, root, callback) {\n    if (typeof root === \"function\") {\n        callback = root;\n        root = new exports.Root();\n    } else if (!root)\n        root = new exports.Root();\n    return root.load(filename, callback);\n}\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into a common root namespace and calls the callback.\n * @name load\n * @function\n * @param {string|string[]} filename One or multiple files to load\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n * @see {@link Root#load}\n * @variation 2\n */\n// function load(filename:string, callback:LoadCallback):undefined\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into a common root namespace and returns a promise.\n * @name load\n * @function\n * @param {string|string[]} filename One or multiple files to load\n * @param {Root} [root] Root namespace, defaults to create a new one if omitted.\n * @returns {Promise<Root>} Promise\n * @see {@link Root#load}\n * @variation 3\n */\n// function load(filename:string, [root:Root]):Promise<Root>\n\nexports.load = load;\n\n/**\n * Synchronously loads one or multiple .proto or preprocessed .json files into a common root namespace (node only).\n * @param {string|string[]} filename One or multiple files to load\n * @param {Root} [root] Root namespace, defaults to create a new one if omitted.\n * @returns {Root} Root namespace\n * @throws {Error} If synchronous fetching is not supported (i.e. in browsers) or if a file's syntax is invalid\n * @see {@link Root#loadSync}\n */\nfunction loadSync(filename, root) {\n    if (!root)\n        root = new exports.Root();\n    return root.loadSync(filename);\n}\n\nexports.loadSync = loadSync;\n\n// Serialization\nexports.encoder          = require(\"./encoder\");\nexports.decoder          = require(\"./decoder\");\nexports.verifier         = require(\"./verifier\");\nexports.converter        = require(\"./converter\");\n\n// Reflection\nexports.ReflectionObject = require(\"./object\");\nexports.Namespace        = require(\"./namespace\");\nexports.Root             = require(\"./root\");\nexports.Enum             = require(\"./enum\");\nexports.Type             = require(\"./type\");\nexports.Field            = require(\"./field\");\nexports.OneOf            = require(\"./oneof\");\nexports.MapField         = require(\"./mapfield\");\nexports.Service          = require(\"./service\");\nexports.Method           = require(\"./method\");\n\n// Runtime\nexports.Message          = require(\"./message\");\nexports.wrappers         = require(\"./wrappers\");\n\n// Utility\nexports.types            = require(\"./types\");\nexports.util             = require(\"./util\");\n\n// Set up possibly cyclic reflection dependencies\nexports.ReflectionObject._configure(exports.Root);\nexports.Namespace._configure(exports.Type, exports.Service, exports.Enum);\nexports.Root._configure(exports.Type, undefined, {});\nexports.Field._configure(exports.Type);\n","// light library entry point.\n\n\"use strict\";\nmodule.exports = require(\"./src/index-light\");","/*eslint-disable block-scoped-var, id-length, no-control-regex, no-magic-numbers, no-mixed-operators, no-prototype-builtins, no-redeclare, no-shadow, no-var, sort-vars, default-case, jsdoc/require-param*/\n\"use strict\";\n\nvar $protobuf = require(\"protobufjs/light\");\n\nvar $root = ($protobuf.roots[\"__temporal\"] || ($protobuf.roots[\"__temporal\"] = new $protobuf.Root()))\n.addJSON({\n  \"coresdk\": {\n    \"options\": {\n      \"ruby_package\": \"Temporalio::Internal::Bridge::Api::CoreInterface\"\n    },\n    \"nested\": {\n      \"ActivityHeartbeat\": {\n        \"fields\": {\n          \"taskToken\": {\n            \"type\": \"bytes\",\n            \"id\": 1,\n            \"protoName\": \"task_token\"\n          },\n          \"details\": {\n            \"rule\": \"repeated\",\n            \"type\": \"temporal.api.common.v1.Payload\",\n            \"id\": 2\n          }\n        }\n      },\n      \"ActivityTaskCompletion\": {\n        \"fields\": {\n          \"taskToken\": {\n            \"type\": \"bytes\",\n            \"id\": 1,\n            \"protoName\": \"task_token\"\n          },\n          \"result\": {\n            \"type\": \"activity_result.ActivityExecutionResult\",\n            \"id\": 2\n          }\n        }\n      },\n      \"WorkflowSlotInfo\": {\n        \"fields\": {\n          \"workflowType\": {\n            \"type\": \"string\",\n            \"id\": 1,\n            \"protoName\": \"workflow_type\"\n          },\n          \"isSticky\": {\n            \"type\": \"bool\",\n            \"id\": 2,\n            \"protoName\": \"is_sticky\"\n          }\n        }\n      },\n      \"ActivitySlotInfo\": {\n        \"fields\": {\n          \"activityType\": {\n            \"type\": \"string\",\n            \"id\": 1,\n            \"protoName\": \"activity_type\"\n          }\n        }\n      },\n      \"LocalActivitySlotInfo\": {\n        \"fields\": {\n          \"activityType\": {\n            \"type\": \"string\",\n            \"id\": 1,\n            \"protoName\": \"activity_type\"\n          }\n        }\n      },\n      \"NexusSlotInfo\": {\n        \"fields\": {\n          \"service\": {\n            \"type\": \"string\",\n            \"id\": 1\n          },\n          \"operation\": {\n            \"type\": \"string\",\n            \"id\": 2\n          }\n        }\n      },\n      \"NamespaceInfo\": {\n        \"fields\": {\n          \"limits\": {\n            \"type\": \"Limits\",\n            \"id\": 1\n          }\n        },\n        \"nested\": {\n          \"Limits\": {\n            \"fields\": {\n              \"blobSizeLimitError\": {\n                \"type\": \"int64\",\n                \"id\": 1,\n                \"protoName\": \"blob_size_limit_error\"\n              },\n              \"memoSizeLimitError\": {\n                \"type\": \"int64\",\n                \"id\": 2,\n                \"protoName\": \"memo_size_limit_error\"\n              }\n            }\n          }\n        }\n      },\n      \"activity_result\": {\n        \"options\": {\n          \"ruby_package\": \"Temporalio::Internal::Bridge::Api::ActivityResult\"\n        },\n        \"nested\": {\n          \"ActivityExecutionResult\": {\n            \"oneofs\": {\n              \"status\": {\n                \"oneof\": [\n                  \"completed\",\n                  \"failed\",\n                  \"cancelled\",\n                  \"willCompleteAsync\"\n                ]\n              }\n            },\n            \"fields\": {\n              \"completed\": {\n                \"type\": \"Success\",\n                \"id\": 1\n              },\n              \"failed\": {\n                \"type\": \"Failure\",\n                \"id\": 2\n              },\n              \"cancelled\": {\n                \"type\": \"Cancellation\",\n                \"id\": 3\n              },\n              \"willCompleteAsync\": {\n                \"type\": \"WillCompleteAsync\",\n                \"id\": 4,\n                \"protoName\": \"will_complete_async\"\n              }\n            }\n          },\n          \"ActivityResolution\": {\n            \"oneofs\": {\n              \"status\": {\n                \"oneof\": [\n                  \"completed\",\n                  \"failed\",\n                  \"cancelled\",\n                  \"backoff\"\n                ]\n              }\n            },\n            \"fields\": {\n              \"completed\": {\n                \"type\": \"Success\",\n                \"id\": 1\n              },\n              \"failed\": {\n                \"type\": \"Failure\",\n                \"id\": 2\n              },\n              \"cancelled\": {\n                \"type\": \"Cancellation\",\n                \"id\": 3\n              },\n              \"backoff\": {\n                \"type\": \"DoBackoff\",\n                \"id\": 4\n              }\n            }\n          },\n          \"Success\": {\n            \"fields\": {\n              \"result\": {\n                \"type\": \"temporal.api.common.v1.Payload\",\n                \"id\": 1\n              }\n            }\n          },\n          \"Failure\": {\n            \"fields\": {\n              \"failure\": {\n                \"type\": \"temporal.api.failure.v1.Failure\",\n                \"id\": 1\n              },\n              \"cause\": {\n                \"type\": \"ActivityTaskFailedCause\",\n                \"id\": 2\n              }\n            }\n          },\n          \"ActivityTaskFailedCause\": {\n            \"values\": {\n              \"ACTIVITY_TASK_FAILED_CAUSE_UNSPECIFIED\": 0,\n              \"ACTIVITY_TASK_FAILED_CAUSE_PAYLOADS_TOO_LARGE\": 1,\n              \"ACTIVITY_TASK_FAILED_CAUSE_EXTERNAL_STORAGE_FAILURE\": 2,\n              \"ACTIVITY_TASK_FAILED_CAUSE_ACTIVITY_WORKER_UNHANDLED_FAILURE\": 3\n            }\n          },\n          \"Cancellation\": {\n            \"fields\": {\n              \"failure\": {\n                \"type\": \"temporal.api.failure.v1.Failure\",\n                \"id\": 1\n              }\n            }\n          },\n          \"WillCompleteAsync\": {\n            \"fields\": {}\n          },\n          \"DoBackoff\": {\n            \"fields\": {\n              \"attempt\": {\n                \"type\": \"uint32\",\n                \"id\": 1\n              },\n              \"backoffDuration\": {\n                \"type\": \"google.protobuf.Duration\",\n                \"id\": 2,\n                \"protoName\": \"backoff_duration\"\n              },\n              \"originalScheduleTime\": {\n                \"type\": \"google.protobuf.Timestamp\",\n                \"id\": 3,\n                \"protoName\": \"original_schedule_time\"\n              }\n            }\n          }\n        }\n      },\n      \"activity_task\": {\n        \"options\": {\n          \"ruby_package\": \"Temporalio::Internal::Bridge::Api::ActivityTask\"\n        },\n        \"nested\": {\n          \"ActivityTask\": {\n            \"oneofs\": {\n              \"variant\": {\n                \"oneof\": [\n                  \"start\",\n                  \"cancel\"\n                ]\n              }\n            },\n            \"fields\": {\n              \"taskToken\": {\n                \"type\": \"bytes\",\n                \"id\": 1,\n                \"protoName\": \"task_token\"\n              },\n              \"start\": {\n                \"type\": \"Start\",\n                \"id\": 3\n              },\n              \"cancel\": {\n                \"type\": \"Cancel\",\n                \"id\": 4\n              }\n            }\n          },\n          \"Start\": {\n            \"fields\": {\n              \"workflowNamespace\": {\n                \"type\": \"string\",\n                \"id\": 1,\n                \"protoName\": \"workflow_namespace\"\n              },\n              \"workflowType\": {\n                \"type\": \"string\",\n                \"id\": 2,\n                \"protoName\": \"workflow_type\"\n              },\n              \"workflowExecution\": {\n                \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                \"id\": 3,\n                \"protoName\": \"workflow_execution\"\n              },\n              \"activityId\": {\n                \"type\": \"string\",\n                \"id\": 4,\n                \"protoName\": \"activity_id\"\n              },\n              \"activityType\": {\n                \"type\": \"string\",\n                \"id\": 5,\n                \"protoName\": \"activity_type\"\n              },\n              \"headerFields\": {\n                \"keyType\": \"string\",\n                \"type\": \"temporal.api.common.v1.Payload\",\n                \"id\": 6,\n                \"protoName\": \"header_fields\"\n              },\n              \"input\": {\n                \"rule\": \"repeated\",\n                \"type\": \"temporal.api.common.v1.Payload\",\n                \"id\": 7\n              },\n              \"heartbeatDetails\": {\n                \"rule\": \"repeated\",\n                \"type\": \"temporal.api.common.v1.Payload\",\n                \"id\": 8,\n                \"protoName\": \"heartbeat_details\"\n              },\n              \"scheduledTime\": {\n                \"type\": \"google.protobuf.Timestamp\",\n                \"id\": 9,\n                \"protoName\": \"scheduled_time\"\n              },\n              \"currentAttemptScheduledTime\": {\n                \"type\": \"google.protobuf.Timestamp\",\n                \"id\": 10,\n                \"protoName\": \"current_attempt_scheduled_time\"\n              },\n              \"startedTime\": {\n                \"type\": \"google.protobuf.Timestamp\",\n                \"id\": 11,\n                \"protoName\": \"started_time\"\n              },\n              \"attempt\": {\n                \"type\": \"uint32\",\n                \"id\": 12\n              },\n              \"scheduleToCloseTimeout\": {\n                \"type\": \"google.protobuf.Duration\",\n                \"id\": 13,\n                \"protoName\": \"schedule_to_close_timeout\"\n              },\n              \"startToCloseTimeout\": {\n                \"type\": \"google.protobuf.Duration\",\n                \"id\": 14,\n                \"protoName\": \"start_to_close_timeout\"\n              },\n              \"heartbeatTimeout\": {\n                \"type\": \"google.protobuf.Duration\",\n                \"id\": 15,\n                \"protoName\": \"heartbeat_timeout\"\n              },\n              \"retryPolicy\": {\n                \"type\": \"temporal.api.common.v1.RetryPolicy\",\n                \"id\": 16,\n                \"protoName\": \"retry_policy\"\n              },\n              \"priority\": {\n                \"type\": \"temporal.api.common.v1.Priority\",\n                \"id\": 18\n              },\n              \"isLocal\": {\n                \"type\": \"bool\",\n                \"id\": 17,\n                \"protoName\": \"is_local\"\n              },\n              \"runId\": {\n                \"type\": \"string\",\n                \"id\": 19,\n                \"protoName\": \"run_id\"\n              }\n            }\n          },\n          \"Cancel\": {\n            \"fields\": {\n              \"reason\": {\n                \"type\": \"ActivityCancelReason\",\n                \"id\": 1\n              },\n              \"details\": {\n                \"type\": \"ActivityCancellationDetails\",\n                \"id\": 2\n              }\n            }\n          },\n          \"ActivityCancellationDetails\": {\n            \"fields\": {\n              \"isNotFound\": {\n                \"type\": \"bool\",\n                \"id\": 1,\n                \"protoName\": \"is_not_found\"\n              },\n              \"isCancelled\": {\n                \"type\": \"bool\",\n                \"id\": 2,\n                \"protoName\": \"is_cancelled\"\n              },\n              \"isPaused\": {\n                \"type\": \"bool\",\n                \"id\": 3,\n                \"protoName\": \"is_paused\"\n              },\n              \"isTimedOut\": {\n                \"type\": \"bool\",\n                \"id\": 4,\n                \"protoName\": \"is_timed_out\"\n              },\n              \"isWorkerShutdown\": {\n                \"type\": \"bool\",\n                \"id\": 5,\n                \"protoName\": \"is_worker_shutdown\"\n              },\n              \"isReset\": {\n                \"type\": \"bool\",\n                \"id\": 6,\n                \"protoName\": \"is_reset\"\n              }\n            }\n          },\n          \"ActivityCancelReason\": {\n            \"values\": {\n              \"NOT_FOUND\": 0,\n              \"CANCELLED\": 1,\n              \"TIMED_OUT\": 2,\n              \"WORKER_SHUTDOWN\": 3,\n              \"PAUSED\": 4,\n              \"RESET\": 5\n            }\n          }\n        }\n      },\n      \"common\": {\n        \"options\": {\n          \"ruby_package\": \"Temporalio::Internal::Bridge::Api::Common\"\n        },\n        \"nested\": {\n          \"NamespacedWorkflowExecution\": {\n            \"fields\": {\n              \"namespace\": {\n                \"type\": \"string\",\n                \"id\": 1\n              },\n              \"workflowId\": {\n                \"type\": \"string\",\n                \"id\": 2,\n                \"protoName\": \"workflow_id\"\n              },\n              \"runId\": {\n                \"type\": \"string\",\n                \"id\": 3,\n                \"protoName\": \"run_id\"\n              }\n            }\n          },\n          \"VersioningIntent\": {\n            \"values\": {\n              \"UNSPECIFIED\": 0,\n              \"COMPATIBLE\": 1,\n              \"DEFAULT\": 2\n            }\n          },\n          \"WorkerDeploymentVersion\": {\n            \"fields\": {\n              \"deploymentName\": {\n                \"type\": \"string\",\n                \"id\": 1,\n                \"protoName\": \"deployment_name\"\n              },\n              \"buildId\": {\n                \"type\": \"string\",\n                \"id\": 2,\n                \"protoName\": \"build_id\"\n              }\n            }\n          },\n          \"ExternalStorageMetrics\": {\n            \"fields\": {\n              \"payloadCount\": {\n                \"type\": \"uint64\",\n                \"id\": 1,\n                \"protoName\": \"payload_count\"\n              },\n              \"totalSizeBytes\": {\n                \"type\": \"uint64\",\n                \"id\": 2,\n                \"protoName\": \"total_size_bytes\"\n              },\n              \"totalDuration\": {\n                \"type\": \"google.protobuf.Duration\",\n                \"id\": 3,\n                \"protoName\": \"total_duration\"\n              },\n              \"driverNames\": {\n                \"rule\": \"repeated\",\n                \"type\": \"string\",\n                \"id\": 4,\n                \"protoName\": \"driver_names\"\n              }\n            }\n          }\n        }\n      },\n      \"external_data\": {\n        \"options\": {\n          \"ruby_package\": \"Temporalio::Internal::Bridge::Api::ExternalData\"\n        },\n        \"nested\": {\n          \"LocalActivityMarkerData\": {\n            \"fields\": {\n              \"seq\": {\n                \"type\": \"uint32\",\n                \"id\": 1\n              },\n              \"attempt\": {\n                \"type\": \"uint32\",\n                \"id\": 2\n              },\n              \"activityId\": {\n                \"type\": \"string\",\n                \"id\": 3,\n                \"protoName\": \"activity_id\"\n              },\n              \"activityType\": {\n                \"type\": \"string\",\n                \"id\": 4,\n                \"protoName\": \"activity_type\"\n              },\n              \"completeTime\": {\n                \"type\": \"google.protobuf.Timestamp\",\n                \"id\": 5,\n                \"protoName\": \"complete_time\"\n              },\n              \"backoff\": {\n                \"type\": \"google.protobuf.Duration\",\n                \"id\": 6\n              },\n              \"originalScheduleTime\": {\n                \"type\": \"google.protobuf.Timestamp\",\n                \"id\": 7,\n                \"protoName\": \"original_schedule_time\"\n              }\n            }\n          },\n          \"PatchedMarkerData\": {\n            \"fields\": {\n              \"id\": {\n                \"type\": \"string\",\n                \"id\": 1\n              },\n              \"deprecated\": {\n                \"type\": \"bool\",\n                \"id\": 2\n              }\n            }\n          }\n        }\n      },\n      \"workflow_activation\": {\n        \"options\": {\n          \"ruby_package\": \"Temporalio::Internal::Bridge::Api::WorkflowActivation\"\n        },\n        \"nested\": {\n          \"WorkflowActivation\": {\n            \"fields\": {\n              \"runId\": {\n                \"type\": \"string\",\n                \"id\": 1,\n                \"protoName\": \"run_id\"\n              },\n              \"timestamp\": {\n                \"type\": \"google.protobuf.Timestamp\",\n                \"id\": 2\n              },\n              \"isReplaying\": {\n                \"type\": \"bool\",\n                \"id\": 3,\n                \"protoName\": \"is_replaying\"\n              },\n              \"historyLength\": {\n                \"type\": \"uint32\",\n                \"id\": 4,\n                \"protoName\": \"history_length\"\n              },\n              \"jobs\": {\n                \"rule\": \"repeated\",\n                \"type\": \"WorkflowActivationJob\",\n                \"id\": 5\n              },\n              \"availableInternalFlags\": {\n                \"rule\": \"repeated\",\n                \"type\": \"uint32\",\n                \"id\": 6,\n                \"protoName\": \"available_internal_flags\"\n              },\n              \"historySizeBytes\": {\n                \"type\": \"uint64\",\n                \"id\": 7,\n                \"protoName\": \"history_size_bytes\"\n              },\n              \"continueAsNewSuggested\": {\n                \"type\": \"bool\",\n                \"id\": 8,\n                \"protoName\": \"continue_as_new_suggested\"\n              },\n              \"deploymentVersionForCurrentTask\": {\n                \"type\": \"common.WorkerDeploymentVersion\",\n                \"id\": 9,\n                \"protoName\": \"deployment_version_for_current_task\"\n              },\n              \"lastSdkVersion\": {\n                \"type\": \"string\",\n                \"id\": 10,\n                \"protoName\": \"last_sdk_version\"\n              },\n              \"suggestContinueAsNewReasons\": {\n                \"rule\": \"repeated\",\n                \"type\": \"temporal.api.enums.v1.SuggestContinueAsNewReason\",\n                \"id\": 11,\n                \"protoName\": \"suggest_continue_as_new_reasons\"\n              },\n              \"targetWorkerDeploymentVersionChanged\": {\n                \"type\": \"bool\",\n                \"id\": 12,\n                \"protoName\": \"target_worker_deployment_version_changed\"\n              }\n            }\n          },\n          \"WorkflowActivationJob\": {\n            \"oneofs\": {\n              \"variant\": {\n                \"oneof\": [\n                  \"initializeWorkflow\",\n                  \"fireTimer\",\n                  \"updateRandomSeed\",\n                  \"queryWorkflow\",\n                  \"cancelWorkflow\",\n                  \"signalWorkflow\",\n                  \"resolveActivity\",\n                  \"notifyHasPatch\",\n                  \"resolveChildWorkflowExecutionStart\",\n                  \"resolveChildWorkflowExecution\",\n                  \"resolveSignalExternalWorkflow\",\n                  \"resolveRequestCancelExternalWorkflow\",\n                  \"doUpdate\",\n                  \"resolveNexusOperationStart\",\n                  \"resolveNexusOperation\",\n                  \"removeFromCache\"\n                ]\n              }\n            },\n            \"fields\": {\n              \"initializeWorkflow\": {\n                \"type\": \"InitializeWorkflow\",\n                \"id\": 1,\n                \"protoName\": \"initialize_workflow\"\n              },\n              \"fireTimer\": {\n                \"type\": \"FireTimer\",\n                \"id\": 2,\n                \"protoName\": \"fire_timer\"\n              },\n              \"updateRandomSeed\": {\n                \"type\": \"UpdateRandomSeed\",\n                \"id\": 4,\n                \"protoName\": \"update_random_seed\"\n              },\n              \"queryWorkflow\": {\n                \"type\": \"QueryWorkflow\",\n                \"id\": 5,\n                \"protoName\": \"query_workflow\"\n              },\n              \"cancelWorkflow\": {\n                \"type\": \"CancelWorkflow\",\n                \"id\": 6,\n                \"protoName\": \"cancel_workflow\"\n              },\n              \"signalWorkflow\": {\n                \"type\": \"SignalWorkflow\",\n                \"id\": 7,\n                \"protoName\": \"signal_workflow\"\n              },\n              \"resolveActivity\": {\n                \"type\": \"ResolveActivity\",\n                \"id\": 8,\n                \"protoName\": \"resolve_activity\"\n              },\n              \"notifyHasPatch\": {\n                \"type\": \"NotifyHasPatch\",\n                \"id\": 9,\n                \"protoName\": \"notify_has_patch\"\n              },\n              \"resolveChildWorkflowExecutionStart\": {\n                \"type\": \"ResolveChildWorkflowExecutionStart\",\n                \"id\": 10,\n                \"protoName\": \"resolve_child_workflow_execution_start\"\n              },\n              \"resolveChildWorkflowExecution\": {\n                \"type\": \"ResolveChildWorkflowExecution\",\n                \"id\": 11,\n                \"protoName\": \"resolve_child_workflow_execution\"\n              },\n              \"resolveSignalExternalWorkflow\": {\n                \"type\": \"ResolveSignalExternalWorkflow\",\n                \"id\": 12,\n                \"protoName\": \"resolve_signal_external_workflow\"\n              },\n              \"resolveRequestCancelExternalWorkflow\": {\n                \"type\": \"ResolveRequestCancelExternalWorkflow\",\n                \"id\": 13,\n                \"protoName\": \"resolve_request_cancel_external_workflow\"\n              },\n              \"doUpdate\": {\n                \"type\": \"DoUpdate\",\n                \"id\": 14,\n                \"protoName\": \"do_update\"\n              },\n              \"resolveNexusOperationStart\": {\n                \"type\": \"ResolveNexusOperationStart\",\n                \"id\": 15,\n                \"protoName\": \"resolve_nexus_operation_start\"\n              },\n              \"resolveNexusOperation\": {\n                \"type\": \"ResolveNexusOperation\",\n                \"id\": 16,\n                \"protoName\": \"resolve_nexus_operation\"\n              },\n              \"removeFromCache\": {\n                \"type\": \"RemoveFromCache\",\n                \"id\": 50,\n                \"protoName\": \"remove_from_cache\"\n              }\n            }\n          },\n          \"InitializeWorkflow\": {\n            \"fields\": {\n              \"workflowType\": {\n                \"type\": \"string\",\n                \"id\": 1,\n                \"protoName\": \"workflow_type\"\n              },\n              \"workflowId\": {\n                \"type\": \"string\",\n                \"id\": 2,\n                \"protoName\": \"workflow_id\"\n              },\n              \"arguments\": {\n                \"rule\": \"repeated\",\n                \"type\": \"temporal.api.common.v1.Payload\",\n                \"id\": 3\n              },\n              \"randomnessSeed\": {\n                \"type\": \"uint64\",\n                \"id\": 4,\n                \"protoName\": \"randomness_seed\"\n              },\n              \"headers\": {\n                \"keyType\": \"string\",\n                \"type\": \"temporal.api.common.v1.Payload\",\n                \"id\": 5\n              },\n              \"identity\": {\n                \"type\": \"string\",\n                \"id\": 6\n              },\n              \"parentWorkflowInfo\": {\n                \"type\": \"common.NamespacedWorkflowExecution\",\n                \"id\": 7,\n                \"protoName\": \"parent_workflow_info\"\n              },\n              \"workflowExecutionTimeout\": {\n                \"type\": \"google.protobuf.Duration\",\n                \"id\": 8,\n                \"protoName\": \"workflow_execution_timeout\"\n              },\n              \"workflowRunTimeout\": {\n                \"type\": \"google.protobuf.Duration\",\n                \"id\": 9,\n                \"protoName\": \"workflow_run_timeout\"\n              },\n              \"workflowTaskTimeout\": {\n                \"type\": \"google.protobuf.Duration\",\n                \"id\": 10,\n                \"protoName\": \"workflow_task_timeout\"\n              },\n              \"continuedFromExecutionRunId\": {\n                \"type\": \"string\",\n                \"id\": 11,\n                \"protoName\": \"continued_from_execution_run_id\"\n              },\n              \"continuedInitiator\": {\n                \"type\": \"temporal.api.enums.v1.ContinueAsNewInitiator\",\n                \"id\": 12,\n                \"protoName\": \"continued_initiator\"\n              },\n              \"continuedFailure\": {\n                \"type\": \"temporal.api.failure.v1.Failure\",\n                \"id\": 13,\n                \"protoName\": \"continued_failure\"\n              },\n              \"lastCompletionResult\": {\n                \"type\": \"temporal.api.common.v1.Payloads\",\n                \"id\": 14,\n                \"protoName\": \"last_completion_result\"\n              },\n              \"firstExecutionRunId\": {\n                \"type\": \"string\",\n                \"id\": 15,\n                \"protoName\": \"first_execution_run_id\"\n              },\n              \"retryPolicy\": {\n                \"type\": \"temporal.api.common.v1.RetryPolicy\",\n                \"id\": 16,\n                \"protoName\": \"retry_policy\"\n              },\n              \"attempt\": {\n                \"type\": \"int32\",\n                \"id\": 17\n              },\n              \"cronSchedule\": {\n                \"type\": \"string\",\n                \"id\": 18,\n                \"protoName\": \"cron_schedule\"\n              },\n              \"workflowExecutionExpirationTime\": {\n                \"type\": \"google.protobuf.Timestamp\",\n                \"id\": 19,\n                \"protoName\": \"workflow_execution_expiration_time\"\n              },\n              \"cronScheduleToScheduleInterval\": {\n                \"type\": \"google.protobuf.Duration\",\n                \"id\": 20,\n                \"protoName\": \"cron_schedule_to_schedule_interval\"\n              },\n              \"memo\": {\n                \"type\": \"temporal.api.common.v1.Memo\",\n                \"id\": 21\n              },\n              \"searchAttributes\": {\n                \"type\": \"temporal.api.common.v1.SearchAttributes\",\n                \"id\": 22,\n                \"protoName\": \"search_attributes\"\n              },\n              \"startTime\": {\n                \"type\": \"google.protobuf.Timestamp\",\n                \"id\": 23,\n                \"protoName\": \"start_time\"\n              },\n              \"rootWorkflow\": {\n                \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                \"id\": 24,\n                \"protoName\": \"root_workflow\"\n              },\n              \"priority\": {\n                \"type\": \"temporal.api.common.v1.Priority\",\n                \"id\": 25\n              },\n              \"originalExecutionRunId\": {\n                \"type\": \"string\",\n                \"id\": 26,\n                \"protoName\": \"original_execution_run_id\"\n              }\n            }\n          },\n          \"FireTimer\": {\n            \"fields\": {\n              \"seq\": {\n                \"type\": \"uint32\",\n                \"id\": 1\n              }\n            }\n          },\n          \"ResolveActivity\": {\n            \"fields\": {\n              \"seq\": {\n                \"type\": \"uint32\",\n                \"id\": 1\n              },\n              \"result\": {\n                \"type\": \"activity_result.ActivityResolution\",\n                \"id\": 2\n              },\n              \"isLocal\": {\n                \"type\": \"bool\",\n                \"id\": 3,\n                \"protoName\": \"is_local\"\n              }\n            }\n          },\n          \"ResolveChildWorkflowExecutionStart\": {\n            \"oneofs\": {\n              \"status\": {\n                \"oneof\": [\n                  \"succeeded\",\n                  \"failed\",\n                  \"cancelled\"\n                ]\n              }\n            },\n            \"fields\": {\n              \"seq\": {\n                \"type\": \"uint32\",\n                \"id\": 1\n              },\n              \"succeeded\": {\n                \"type\": \"ResolveChildWorkflowExecutionStartSuccess\",\n                \"id\": 2\n              },\n              \"failed\": {\n                \"type\": \"ResolveChildWorkflowExecutionStartFailure\",\n                \"id\": 3\n              },\n              \"cancelled\": {\n                \"type\": \"ResolveChildWorkflowExecutionStartCancelled\",\n                \"id\": 4\n              }\n            }\n          },\n          \"ResolveChildWorkflowExecutionStartSuccess\": {\n            \"fields\": {\n              \"runId\": {\n                \"type\": \"string\",\n                \"id\": 1,\n                \"protoName\": \"run_id\"\n              }\n            }\n          },\n          \"ResolveChildWorkflowExecutionStartFailure\": {\n            \"fields\": {\n              \"workflowId\": {\n                \"type\": \"string\",\n                \"id\": 1,\n                \"protoName\": \"workflow_id\"\n              },\n              \"workflowType\": {\n                \"type\": \"string\",\n                \"id\": 2,\n                \"protoName\": \"workflow_type\"\n              },\n              \"cause\": {\n                \"type\": \"child_workflow.StartChildWorkflowExecutionFailedCause\",\n                \"id\": 3\n              }\n            }\n          },\n          \"ResolveChildWorkflowExecutionStartCancelled\": {\n            \"fields\": {\n              \"failure\": {\n                \"type\": \"temporal.api.failure.v1.Failure\",\n                \"id\": 1\n              }\n            }\n          },\n          \"ResolveChildWorkflowExecution\": {\n            \"fields\": {\n              \"seq\": {\n                \"type\": \"uint32\",\n                \"id\": 1\n              },\n              \"result\": {\n                \"type\": \"child_workflow.ChildWorkflowResult\",\n                \"id\": 2\n              }\n            }\n          },\n          \"UpdateRandomSeed\": {\n            \"fields\": {\n              \"randomnessSeed\": {\n                \"type\": \"uint64\",\n                \"id\": 1,\n                \"protoName\": \"randomness_seed\"\n              }\n            }\n          },\n          \"QueryWorkflow\": {\n            \"fields\": {\n              \"queryId\": {\n                \"type\": \"string\",\n                \"id\": 1,\n                \"protoName\": \"query_id\"\n              },\n              \"queryType\": {\n                \"type\": \"string\",\n                \"id\": 2,\n                \"protoName\": \"query_type\"\n              },\n              \"arguments\": {\n                \"rule\": \"repeated\",\n                \"type\": \"temporal.api.common.v1.Payload\",\n                \"id\": 3\n              },\n              \"headers\": {\n                \"keyType\": \"string\",\n                \"type\": \"temporal.api.common.v1.Payload\",\n                \"id\": 5\n              }\n            }\n          },\n          \"CancelWorkflow\": {\n            \"fields\": {\n              \"reason\": {\n                \"type\": \"string\",\n                \"id\": 1\n              }\n            }\n          },\n          \"SignalWorkflow\": {\n            \"fields\": {\n              \"signalName\": {\n                \"type\": \"string\",\n                \"id\": 1,\n                \"protoName\": \"signal_name\"\n              },\n              \"input\": {\n                \"rule\": \"repeated\",\n                \"type\": \"temporal.api.common.v1.Payload\",\n                \"id\": 2\n              },\n              \"identity\": {\n                \"type\": \"string\",\n                \"id\": 3\n              },\n              \"headers\": {\n                \"keyType\": \"string\",\n                \"type\": \"temporal.api.common.v1.Payload\",\n                \"id\": 5\n              },\n              \"originatingEventId\": {\n                \"type\": \"int64\",\n                \"id\": 6,\n                \"protoName\": \"originating_event_id\"\n              }\n            }\n          },\n          \"NotifyHasPatch\": {\n            \"fields\": {\n              \"patchId\": {\n                \"type\": \"string\",\n                \"id\": 1,\n                \"protoName\": \"patch_id\"\n              }\n            }\n          },\n          \"ResolveSignalExternalWorkflow\": {\n            \"fields\": {\n              \"seq\": {\n                \"type\": \"uint32\",\n                \"id\": 1\n              },\n              \"failure\": {\n                \"type\": \"temporal.api.failure.v1.Failure\",\n                \"id\": 2\n              }\n            }\n          },\n          \"ResolveRequestCancelExternalWorkflow\": {\n            \"fields\": {\n              \"seq\": {\n                \"type\": \"uint32\",\n                \"id\": 1\n              },\n              \"failure\": {\n                \"type\": \"temporal.api.failure.v1.Failure\",\n                \"id\": 2\n              }\n            }\n          },\n          \"DoUpdate\": {\n            \"fields\": {\n              \"id\": {\n                \"type\": \"string\",\n                \"id\": 1\n              },\n              \"protocolInstanceId\": {\n                \"type\": \"string\",\n                \"id\": 2,\n                \"protoName\": \"protocol_instance_id\"\n              },\n              \"name\": {\n                \"type\": \"string\",\n                \"id\": 3\n              },\n              \"input\": {\n                \"rule\": \"repeated\",\n                \"type\": \"temporal.api.common.v1.Payload\",\n                \"id\": 4\n              },\n              \"headers\": {\n                \"keyType\": \"string\",\n                \"type\": \"temporal.api.common.v1.Payload\",\n                \"id\": 5\n              },\n              \"meta\": {\n                \"type\": \"temporal.api.update.v1.Meta\",\n                \"id\": 6\n              },\n              \"runValidator\": {\n                \"type\": \"bool\",\n                \"id\": 7,\n                \"protoName\": \"run_validator\"\n              }\n            }\n          },\n          \"ResolveNexusOperationStart\": {\n            \"oneofs\": {\n              \"status\": {\n                \"oneof\": [\n                  \"operationToken\",\n                  \"startedSync\",\n                  \"failed\"\n                ]\n              }\n            },\n            \"fields\": {\n              \"seq\": {\n                \"type\": \"uint32\",\n                \"id\": 1\n              },\n              \"operationToken\": {\n                \"type\": \"string\",\n                \"id\": 2,\n                \"protoName\": \"operation_token\"\n              },\n              \"startedSync\": {\n                \"type\": \"bool\",\n                \"id\": 3,\n                \"protoName\": \"started_sync\"\n              },\n              \"failed\": {\n                \"type\": \"temporal.api.failure.v1.Failure\",\n                \"id\": 4\n              }\n            }\n          },\n          \"ResolveNexusOperation\": {\n            \"fields\": {\n              \"seq\": {\n                \"type\": \"uint32\",\n                \"id\": 1\n              },\n              \"result\": {\n                \"type\": \"nexus.NexusOperationResult\",\n                \"id\": 2\n              }\n            }\n          },\n          \"RemoveFromCache\": {\n            \"fields\": {\n              \"message\": {\n                \"type\": \"string\",\n                \"id\": 1\n              },\n              \"reason\": {\n                \"type\": \"EvictionReason\",\n                \"id\": 2\n              }\n            },\n            \"nested\": {\n              \"EvictionReason\": {\n                \"values\": {\n                  \"UNSPECIFIED\": 0,\n                  \"CACHE_FULL\": 1,\n                  \"CACHE_MISS\": 2,\n                  \"NONDETERMINISM\": 3,\n                  \"LANG_FAIL\": 4,\n                  \"LANG_REQUESTED\": 5,\n                  \"TASK_NOT_FOUND\": 6,\n                  \"UNHANDLED_COMMAND\": 7,\n                  \"FATAL\": 8,\n                  \"PAGINATION_OR_HISTORY_FETCH\": 9,\n                  \"WORKFLOW_EXECUTION_ENDING\": 10\n                }\n              }\n            }\n          }\n        }\n      },\n      \"child_workflow\": {\n        \"options\": {\n          \"ruby_package\": \"Temporalio::Internal::Bridge::Api::ChildWorkflow\"\n        },\n        \"nested\": {\n          \"ChildWorkflowResult\": {\n            \"oneofs\": {\n              \"status\": {\n                \"oneof\": [\n                  \"completed\",\n                  \"failed\",\n                  \"cancelled\"\n                ]\n              }\n            },\n            \"fields\": {\n              \"completed\": {\n                \"type\": \"Success\",\n                \"id\": 1\n              },\n              \"failed\": {\n                \"type\": \"Failure\",\n                \"id\": 2\n              },\n              \"cancelled\": {\n                \"type\": \"Cancellation\",\n                \"id\": 3\n              }\n            }\n          },\n          \"Success\": {\n            \"fields\": {\n              \"result\": {\n                \"type\": \"temporal.api.common.v1.Payload\",\n                \"id\": 1\n              }\n            }\n          },\n          \"Failure\": {\n            \"fields\": {\n              \"failure\": {\n                \"type\": \"temporal.api.failure.v1.Failure\",\n                \"id\": 1\n              }\n            }\n          },\n          \"Cancellation\": {\n            \"fields\": {\n              \"failure\": {\n                \"type\": \"temporal.api.failure.v1.Failure\",\n                \"id\": 1\n              }\n            }\n          },\n          \"ParentClosePolicy\": {\n            \"values\": {\n              \"PARENT_CLOSE_POLICY_UNSPECIFIED\": 0,\n              \"PARENT_CLOSE_POLICY_TERMINATE\": 1,\n              \"PARENT_CLOSE_POLICY_ABANDON\": 2,\n              \"PARENT_CLOSE_POLICY_REQUEST_CANCEL\": 3\n            }\n          },\n          \"StartChildWorkflowExecutionFailedCause\": {\n            \"values\": {\n              \"START_CHILD_WORKFLOW_EXECUTION_FAILED_CAUSE_UNSPECIFIED\": 0,\n              \"START_CHILD_WORKFLOW_EXECUTION_FAILED_CAUSE_WORKFLOW_ALREADY_EXISTS\": 1\n            }\n          },\n          \"ChildWorkflowCancellationType\": {\n            \"values\": {\n              \"ABANDON\": 0,\n              \"TRY_CANCEL\": 1,\n              \"WAIT_CANCELLATION_COMPLETED\": 2,\n              \"WAIT_CANCELLATION_REQUESTED\": 3\n            }\n          }\n        }\n      },\n      \"nexus\": {\n        \"options\": {\n          \"ruby_package\": \"Temporalio::Internal::Bridge::Api::Nexus\"\n        },\n        \"nested\": {\n          \"NexusOperationResult\": {\n            \"oneofs\": {\n              \"status\": {\n                \"oneof\": [\n                  \"completed\",\n                  \"failed\",\n                  \"cancelled\",\n                  \"timedOut\"\n                ]\n              }\n            },\n            \"fields\": {\n              \"completed\": {\n                \"type\": \"temporal.api.common.v1.Payload\",\n                \"id\": 1\n              },\n              \"failed\": {\n                \"type\": \"temporal.api.failure.v1.Failure\",\n                \"id\": 2\n              },\n              \"cancelled\": {\n                \"type\": \"temporal.api.failure.v1.Failure\",\n                \"id\": 3\n              },\n              \"timedOut\": {\n                \"type\": \"temporal.api.failure.v1.Failure\",\n                \"id\": 4,\n                \"protoName\": \"timed_out\"\n              }\n            }\n          },\n          \"NexusTaskCompletion\": {\n            \"oneofs\": {\n              \"status\": {\n                \"oneof\": [\n                  \"completed\",\n                  \"error\",\n                  \"ackCancel\",\n                  \"failure\"\n                ]\n              }\n            },\n            \"fields\": {\n              \"taskToken\": {\n                \"type\": \"bytes\",\n                \"id\": 1,\n                \"protoName\": \"task_token\"\n              },\n              \"completed\": {\n                \"type\": \"temporal.api.nexus.v1.Response\",\n                \"id\": 2\n              },\n              \"error\": {\n                \"type\": \"temporal.api.nexus.v1.HandlerError\",\n                \"id\": 3,\n                \"options\": {\n                  \"deprecated\": true\n                }\n              },\n              \"ackCancel\": {\n                \"type\": \"bool\",\n                \"id\": 4,\n                \"protoName\": \"ack_cancel\"\n              },\n              \"failure\": {\n                \"type\": \"temporal.api.failure.v1.Failure\",\n                \"id\": 5\n              }\n            }\n          },\n          \"NexusTask\": {\n            \"oneofs\": {\n              \"variant\": {\n                \"oneof\": [\n                  \"task\",\n                  \"cancelTask\"\n                ]\n              }\n            },\n            \"fields\": {\n              \"task\": {\n                \"type\": \"temporal.api.workflowservice.v1.PollNexusTaskQueueResponse\",\n                \"id\": 1\n              },\n              \"cancelTask\": {\n                \"type\": \"CancelNexusTask\",\n                \"id\": 2,\n                \"protoName\": \"cancel_task\"\n              },\n              \"requestDeadline\": {\n                \"type\": \"google.protobuf.Timestamp\",\n                \"id\": 3,\n                \"protoName\": \"request_deadline\"\n              },\n              \"endpoint\": {\n                \"type\": \"string\",\n                \"id\": 4\n              }\n            }\n          },\n          \"CancelNexusTask\": {\n            \"fields\": {\n              \"taskToken\": {\n                \"type\": \"bytes\",\n                \"id\": 1,\n                \"protoName\": \"task_token\"\n              },\n              \"reason\": {\n                \"type\": \"NexusTaskCancelReason\",\n                \"id\": 2\n              }\n            }\n          },\n          \"NexusTaskCancelReason\": {\n            \"values\": {\n              \"TIMED_OUT\": 0,\n              \"WORKER_SHUTDOWN\": 1\n            }\n          },\n          \"NexusOperationCancellationType\": {\n            \"values\": {\n              \"WAIT_CANCELLATION_COMPLETED\": 0,\n              \"ABANDON\": 1,\n              \"TRY_CANCEL\": 2,\n              \"WAIT_CANCELLATION_REQUESTED\": 3\n            }\n          }\n        }\n      },\n      \"workflow_commands\": {\n        \"options\": {\n          \"ruby_package\": \"Temporalio::Internal::Bridge::Api::WorkflowCommands\"\n        },\n        \"nested\": {\n          \"WorkflowCommand\": {\n            \"oneofs\": {\n              \"variant\": {\n                \"oneof\": [\n                  \"startTimer\",\n                  \"scheduleActivity\",\n                  \"respondToQuery\",\n                  \"requestCancelActivity\",\n                  \"cancelTimer\",\n                  \"completeWorkflowExecution\",\n                  \"failWorkflowExecution\",\n                  \"continueAsNewWorkflowExecution\",\n                  \"cancelWorkflowExecution\",\n                  \"setPatchMarker\",\n                  \"startChildWorkflowExecution\",\n                  \"cancelChildWorkflowExecution\",\n                  \"requestCancelExternalWorkflowExecution\",\n                  \"signalExternalWorkflowExecution\",\n                  \"cancelSignalWorkflow\",\n                  \"scheduleLocalActivity\",\n                  \"requestCancelLocalActivity\",\n                  \"upsertWorkflowSearchAttributes\",\n                  \"modifyWorkflowProperties\",\n                  \"updateResponse\",\n                  \"scheduleNexusOperation\",\n                  \"requestCancelNexusOperation\"\n                ]\n              }\n            },\n            \"fields\": {\n              \"userMetadata\": {\n                \"type\": \"temporal.api.sdk.v1.UserMetadata\",\n                \"id\": 100,\n                \"protoName\": \"user_metadata\"\n              },\n              \"eventGroupMarkers\": {\n                \"rule\": \"repeated\",\n                \"type\": \"temporal.api.sdk.v1.EventGroupMarker\",\n                \"id\": 101,\n                \"protoName\": \"event_group_markers\"\n              },\n              \"startTimer\": {\n                \"type\": \"StartTimer\",\n                \"id\": 1,\n                \"protoName\": \"start_timer\"\n              },\n              \"scheduleActivity\": {\n                \"type\": \"ScheduleActivity\",\n                \"id\": 2,\n                \"protoName\": \"schedule_activity\"\n              },\n              \"respondToQuery\": {\n                \"type\": \"QueryResult\",\n                \"id\": 3,\n                \"protoName\": \"respond_to_query\"\n              },\n              \"requestCancelActivity\": {\n                \"type\": \"RequestCancelActivity\",\n                \"id\": 4,\n                \"protoName\": \"request_cancel_activity\"\n              },\n              \"cancelTimer\": {\n                \"type\": \"CancelTimer\",\n                \"id\": 5,\n                \"protoName\": \"cancel_timer\"\n              },\n              \"completeWorkflowExecution\": {\n                \"type\": \"CompleteWorkflowExecution\",\n                \"id\": 6,\n                \"protoName\": \"complete_workflow_execution\"\n              },\n              \"failWorkflowExecution\": {\n                \"type\": \"FailWorkflowExecution\",\n                \"id\": 7,\n                \"protoName\": \"fail_workflow_execution\"\n              },\n              \"continueAsNewWorkflowExecution\": {\n                \"type\": \"ContinueAsNewWorkflowExecution\",\n                \"id\": 8,\n                \"protoName\": \"continue_as_new_workflow_execution\"\n              },\n              \"cancelWorkflowExecution\": {\n                \"type\": \"CancelWorkflowExecution\",\n                \"id\": 9,\n                \"protoName\": \"cancel_workflow_execution\"\n              },\n              \"setPatchMarker\": {\n                \"type\": \"SetPatchMarker\",\n                \"id\": 10,\n                \"protoName\": \"set_patch_marker\"\n              },\n              \"startChildWorkflowExecution\": {\n                \"type\": \"StartChildWorkflowExecution\",\n                \"id\": 11,\n                \"protoName\": \"start_child_workflow_execution\"\n              },\n              \"cancelChildWorkflowExecution\": {\n                \"type\": \"CancelChildWorkflowExecution\",\n                \"id\": 12,\n                \"protoName\": \"cancel_child_workflow_execution\"\n              },\n              \"requestCancelExternalWorkflowExecution\": {\n                \"type\": \"RequestCancelExternalWorkflowExecution\",\n                \"id\": 13,\n                \"protoName\": \"request_cancel_external_workflow_execution\"\n              },\n              \"signalExternalWorkflowExecution\": {\n                \"type\": \"SignalExternalWorkflowExecution\",\n                \"id\": 14,\n                \"protoName\": \"signal_external_workflow_execution\"\n              },\n              \"cancelSignalWorkflow\": {\n                \"type\": \"CancelSignalWorkflow\",\n                \"id\": 15,\n                \"protoName\": \"cancel_signal_workflow\"\n              },\n              \"scheduleLocalActivity\": {\n                \"type\": \"ScheduleLocalActivity\",\n                \"id\": 16,\n                \"protoName\": \"schedule_local_activity\"\n              },\n              \"requestCancelLocalActivity\": {\n                \"type\": \"RequestCancelLocalActivity\",\n                \"id\": 17,\n                \"protoName\": \"request_cancel_local_activity\"\n              },\n              \"upsertWorkflowSearchAttributes\": {\n                \"type\": \"UpsertWorkflowSearchAttributes\",\n                \"id\": 18,\n                \"protoName\": \"upsert_workflow_search_attributes\"\n              },\n              \"modifyWorkflowProperties\": {\n                \"type\": \"ModifyWorkflowProperties\",\n                \"id\": 19,\n                \"protoName\": \"modify_workflow_properties\"\n              },\n              \"updateResponse\": {\n                \"type\": \"UpdateResponse\",\n                \"id\": 20,\n                \"protoName\": \"update_response\"\n              },\n              \"scheduleNexusOperation\": {\n                \"type\": \"ScheduleNexusOperation\",\n                \"id\": 21,\n                \"protoName\": \"schedule_nexus_operation\"\n              },\n              \"requestCancelNexusOperation\": {\n                \"type\": \"RequestCancelNexusOperation\",\n                \"id\": 22,\n                \"protoName\": \"request_cancel_nexus_operation\"\n              }\n            }\n          },\n          \"StartTimer\": {\n            \"fields\": {\n              \"seq\": {\n                \"type\": \"uint32\",\n                \"id\": 1\n              },\n              \"startToFireTimeout\": {\n                \"type\": \"google.protobuf.Duration\",\n                \"id\": 2,\n                \"protoName\": \"start_to_fire_timeout\"\n              }\n            }\n          },\n          \"CancelTimer\": {\n            \"fields\": {\n              \"seq\": {\n                \"type\": \"uint32\",\n                \"id\": 1\n              }\n            }\n          },\n          \"ScheduleActivity\": {\n            \"fields\": {\n              \"seq\": {\n                \"type\": \"uint32\",\n                \"id\": 1\n              },\n              \"activityId\": {\n                \"type\": \"string\",\n                \"id\": 2,\n                \"protoName\": \"activity_id\"\n              },\n              \"activityType\": {\n                \"type\": \"string\",\n                \"id\": 3,\n                \"protoName\": \"activity_type\"\n              },\n              \"taskQueue\": {\n                \"type\": \"string\",\n                \"id\": 5,\n                \"protoName\": \"task_queue\"\n              },\n              \"headers\": {\n                \"keyType\": \"string\",\n                \"type\": \"temporal.api.common.v1.Payload\",\n                \"id\": 6\n              },\n              \"arguments\": {\n                \"rule\": \"repeated\",\n                \"type\": \"temporal.api.common.v1.Payload\",\n                \"id\": 7\n              },\n              \"scheduleToCloseTimeout\": {\n                \"type\": \"google.protobuf.Duration\",\n                \"id\": 8,\n                \"protoName\": \"schedule_to_close_timeout\"\n              },\n              \"scheduleToStartTimeout\": {\n                \"type\": \"google.protobuf.Duration\",\n                \"id\": 9,\n                \"protoName\": \"schedule_to_start_timeout\"\n              },\n              \"startToCloseTimeout\": {\n                \"type\": \"google.protobuf.Duration\",\n                \"id\": 10,\n                \"protoName\": \"start_to_close_timeout\"\n              },\n              \"heartbeatTimeout\": {\n                \"type\": \"google.protobuf.Duration\",\n                \"id\": 11,\n                \"protoName\": \"heartbeat_timeout\"\n              },\n              \"retryPolicy\": {\n                \"type\": \"temporal.api.common.v1.RetryPolicy\",\n                \"id\": 12,\n                \"protoName\": \"retry_policy\"\n              },\n              \"cancellationType\": {\n                \"type\": \"ActivityCancellationType\",\n                \"id\": 13,\n                \"protoName\": \"cancellation_type\"\n              },\n              \"doNotEagerlyExecute\": {\n                \"type\": \"bool\",\n                \"id\": 14,\n                \"protoName\": \"do_not_eagerly_execute\"\n              },\n              \"versioningIntent\": {\n                \"type\": \"coresdk.common.VersioningIntent\",\n                \"id\": 15,\n                \"protoName\": \"versioning_intent\"\n              },\n              \"priority\": {\n                \"type\": \"temporal.api.common.v1.Priority\",\n                \"id\": 16\n              }\n            }\n          },\n          \"ScheduleLocalActivity\": {\n            \"fields\": {\n              \"seq\": {\n                \"type\": \"uint32\",\n                \"id\": 1\n              },\n              \"activityId\": {\n                \"type\": \"string\",\n                \"id\": 2,\n                \"protoName\": \"activity_id\"\n              },\n              \"activityType\": {\n                \"type\": \"string\",\n                \"id\": 3,\n                \"protoName\": \"activity_type\"\n              },\n              \"attempt\": {\n                \"type\": \"uint32\",\n                \"id\": 4\n              },\n              \"originalScheduleTime\": {\n                \"type\": \"google.protobuf.Timestamp\",\n                \"id\": 5,\n                \"protoName\": \"original_schedule_time\"\n              },\n              \"headers\": {\n                \"keyType\": \"string\",\n                \"type\": \"temporal.api.common.v1.Payload\",\n                \"id\": 6\n              },\n              \"arguments\": {\n                \"rule\": \"repeated\",\n                \"type\": \"temporal.api.common.v1.Payload\",\n                \"id\": 7\n              },\n              \"scheduleToCloseTimeout\": {\n                \"type\": \"google.protobuf.Duration\",\n                \"id\": 8,\n                \"protoName\": \"schedule_to_close_timeout\"\n              },\n              \"scheduleToStartTimeout\": {\n                \"type\": \"google.protobuf.Duration\",\n                \"id\": 9,\n                \"protoName\": \"schedule_to_start_timeout\"\n              },\n              \"startToCloseTimeout\": {\n                \"type\": \"google.protobuf.Duration\",\n                \"id\": 10,\n                \"protoName\": \"start_to_close_timeout\"\n              },\n              \"retryPolicy\": {\n                \"type\": \"temporal.api.common.v1.RetryPolicy\",\n                \"id\": 11,\n                \"protoName\": \"retry_policy\"\n              },\n              \"localRetryThreshold\": {\n                \"type\": \"google.protobuf.Duration\",\n                \"id\": 12,\n                \"protoName\": \"local_retry_threshold\"\n              },\n              \"cancellationType\": {\n                \"type\": \"ActivityCancellationType\",\n                \"id\": 13,\n                \"protoName\": \"cancellation_type\"\n              }\n            }\n          },\n          \"ActivityCancellationType\": {\n            \"values\": {\n              \"TRY_CANCEL\": 0,\n              \"WAIT_CANCELLATION_COMPLETED\": 1,\n              \"ABANDON\": 2\n            }\n          },\n          \"RequestCancelActivity\": {\n            \"fields\": {\n              \"seq\": {\n                \"type\": \"uint32\",\n                \"id\": 1\n              }\n            }\n          },\n          \"RequestCancelLocalActivity\": {\n            \"fields\": {\n              \"seq\": {\n                \"type\": \"uint32\",\n                \"id\": 1\n              }\n            }\n          },\n          \"QueryResult\": {\n            \"oneofs\": {\n              \"variant\": {\n                \"oneof\": [\n                  \"succeeded\",\n                  \"failed\"\n                ]\n              }\n            },\n            \"fields\": {\n              \"queryId\": {\n                \"type\": \"string\",\n                \"id\": 1,\n                \"protoName\": \"query_id\"\n              },\n              \"succeeded\": {\n                \"type\": \"QuerySuccess\",\n                \"id\": 2\n              },\n              \"failed\": {\n                \"type\": \"temporal.api.failure.v1.Failure\",\n                \"id\": 3\n              }\n            }\n          },\n          \"QuerySuccess\": {\n            \"fields\": {\n              \"response\": {\n                \"type\": \"temporal.api.common.v1.Payload\",\n                \"id\": 1\n              }\n            }\n          },\n          \"CompleteWorkflowExecution\": {\n            \"fields\": {\n              \"result\": {\n                \"type\": \"temporal.api.common.v1.Payload\",\n                \"id\": 1\n              }\n            }\n          },\n          \"FailWorkflowExecution\": {\n            \"fields\": {\n              \"failure\": {\n                \"type\": \"temporal.api.failure.v1.Failure\",\n                \"id\": 1\n              }\n            }\n          },\n          \"ContinueAsNewWorkflowExecution\": {\n            \"fields\": {\n              \"workflowType\": {\n                \"type\": \"string\",\n                \"id\": 1,\n                \"protoName\": \"workflow_type\"\n              },\n              \"taskQueue\": {\n                \"type\": \"string\",\n                \"id\": 2,\n                \"protoName\": \"task_queue\"\n              },\n              \"arguments\": {\n                \"rule\": \"repeated\",\n                \"type\": \"temporal.api.common.v1.Payload\",\n                \"id\": 3\n              },\n              \"workflowRunTimeout\": {\n                \"type\": \"google.protobuf.Duration\",\n                \"id\": 4,\n                \"protoName\": \"workflow_run_timeout\"\n              },\n              \"workflowTaskTimeout\": {\n                \"type\": \"google.protobuf.Duration\",\n                \"id\": 5,\n                \"protoName\": \"workflow_task_timeout\"\n              },\n              \"memo\": {\n                \"keyType\": \"string\",\n                \"type\": \"temporal.api.common.v1.Payload\",\n                \"id\": 6\n              },\n              \"headers\": {\n                \"keyType\": \"string\",\n                \"type\": \"temporal.api.common.v1.Payload\",\n                \"id\": 7\n              },\n              \"searchAttributes\": {\n                \"type\": \"temporal.api.common.v1.SearchAttributes\",\n                \"id\": 8,\n                \"protoName\": \"search_attributes\"\n              },\n              \"retryPolicy\": {\n                \"type\": \"temporal.api.common.v1.RetryPolicy\",\n                \"id\": 9,\n                \"protoName\": \"retry_policy\"\n              },\n              \"versioningIntent\": {\n                \"type\": \"coresdk.common.VersioningIntent\",\n                \"id\": 10,\n                \"protoName\": \"versioning_intent\"\n              },\n              \"initialVersioningBehavior\": {\n                \"type\": \"temporal.api.enums.v1.ContinueAsNewVersioningBehavior\",\n                \"id\": 11,\n                \"protoName\": \"initial_versioning_behavior\"\n              },\n              \"backoffStartInterval\": {\n                \"type\": \"google.protobuf.Duration\",\n                \"id\": 12,\n                \"protoName\": \"backoff_start_interval\"\n              }\n            }\n          },\n          \"CancelWorkflowExecution\": {\n            \"fields\": {\n              \"details\": {\n                \"type\": \"temporal.api.common.v1.Payloads\",\n                \"id\": 1\n              }\n            }\n          },\n          \"SetPatchMarker\": {\n            \"fields\": {\n              \"patchId\": {\n                \"type\": \"string\",\n                \"id\": 1,\n                \"protoName\": \"patch_id\"\n              },\n              \"deprecated\": {\n                \"type\": \"bool\",\n                \"id\": 2\n              }\n            }\n          },\n          \"StartChildWorkflowExecution\": {\n            \"fields\": {\n              \"seq\": {\n                \"type\": \"uint32\",\n                \"id\": 1\n              },\n              \"namespace\": {\n                \"type\": \"string\",\n                \"id\": 2\n              },\n              \"workflowId\": {\n                \"type\": \"string\",\n                \"id\": 3,\n                \"protoName\": \"workflow_id\"\n              },\n              \"workflowType\": {\n                \"type\": \"string\",\n                \"id\": 4,\n                \"protoName\": \"workflow_type\"\n              },\n              \"taskQueue\": {\n                \"type\": \"string\",\n                \"id\": 5,\n                \"protoName\": \"task_queue\"\n              },\n              \"input\": {\n                \"rule\": \"repeated\",\n                \"type\": \"temporal.api.common.v1.Payload\",\n                \"id\": 6\n              },\n              \"workflowExecutionTimeout\": {\n                \"type\": \"google.protobuf.Duration\",\n                \"id\": 7,\n                \"protoName\": \"workflow_execution_timeout\"\n              },\n              \"workflowRunTimeout\": {\n                \"type\": \"google.protobuf.Duration\",\n                \"id\": 8,\n                \"protoName\": \"workflow_run_timeout\"\n              },\n              \"workflowTaskTimeout\": {\n                \"type\": \"google.protobuf.Duration\",\n                \"id\": 9,\n                \"protoName\": \"workflow_task_timeout\"\n              },\n              \"parentClosePolicy\": {\n                \"type\": \"child_workflow.ParentClosePolicy\",\n                \"id\": 10,\n                \"protoName\": \"parent_close_policy\"\n              },\n              \"workflowIdReusePolicy\": {\n                \"type\": \"temporal.api.enums.v1.WorkflowIdReusePolicy\",\n                \"id\": 12,\n                \"protoName\": \"workflow_id_reuse_policy\"\n              },\n              \"retryPolicy\": {\n                \"type\": \"temporal.api.common.v1.RetryPolicy\",\n                \"id\": 13,\n                \"protoName\": \"retry_policy\"\n              },\n              \"cronSchedule\": {\n                \"type\": \"string\",\n                \"id\": 14,\n                \"protoName\": \"cron_schedule\"\n              },\n              \"headers\": {\n                \"keyType\": \"string\",\n                \"type\": \"temporal.api.common.v1.Payload\",\n                \"id\": 15\n              },\n              \"memo\": {\n                \"keyType\": \"string\",\n                \"type\": \"temporal.api.common.v1.Payload\",\n                \"id\": 16\n              },\n              \"searchAttributes\": {\n                \"type\": \"temporal.api.common.v1.SearchAttributes\",\n                \"id\": 17,\n                \"protoName\": \"search_attributes\"\n              },\n              \"cancellationType\": {\n                \"type\": \"child_workflow.ChildWorkflowCancellationType\",\n                \"id\": 18,\n                \"protoName\": \"cancellation_type\"\n              },\n              \"versioningIntent\": {\n                \"type\": \"coresdk.common.VersioningIntent\",\n                \"id\": 19,\n                \"protoName\": \"versioning_intent\"\n              },\n              \"priority\": {\n                \"type\": \"temporal.api.common.v1.Priority\",\n                \"id\": 20\n              }\n            }\n          },\n          \"CancelChildWorkflowExecution\": {\n            \"fields\": {\n              \"childWorkflowSeq\": {\n                \"type\": \"uint32\",\n                \"id\": 1,\n                \"protoName\": \"child_workflow_seq\"\n              },\n              \"reason\": {\n                \"type\": \"string\",\n                \"id\": 2\n              }\n            }\n          },\n          \"RequestCancelExternalWorkflowExecution\": {\n            \"fields\": {\n              \"seq\": {\n                \"type\": \"uint32\",\n                \"id\": 1\n              },\n              \"workflowExecution\": {\n                \"type\": \"common.NamespacedWorkflowExecution\",\n                \"id\": 2,\n                \"protoName\": \"workflow_execution\"\n              },\n              \"reason\": {\n                \"type\": \"string\",\n                \"id\": 3\n              }\n            }\n          },\n          \"SignalExternalWorkflowExecution\": {\n            \"oneofs\": {\n              \"target\": {\n                \"oneof\": [\n                  \"workflowExecution\",\n                  \"childWorkflowId\"\n                ]\n              }\n            },\n            \"fields\": {\n              \"seq\": {\n                \"type\": \"uint32\",\n                \"id\": 1\n              },\n              \"workflowExecution\": {\n                \"type\": \"common.NamespacedWorkflowExecution\",\n                \"id\": 2,\n                \"protoName\": \"workflow_execution\"\n              },\n              \"childWorkflowId\": {\n                \"type\": \"string\",\n                \"id\": 3,\n                \"protoName\": \"child_workflow_id\"\n              },\n              \"signalName\": {\n                \"type\": \"string\",\n                \"id\": 4,\n                \"protoName\": \"signal_name\"\n              },\n              \"args\": {\n                \"rule\": \"repeated\",\n                \"type\": \"temporal.api.common.v1.Payload\",\n                \"id\": 5\n              },\n              \"headers\": {\n                \"keyType\": \"string\",\n                \"type\": \"temporal.api.common.v1.Payload\",\n                \"id\": 6\n              }\n            }\n          },\n          \"CancelSignalWorkflow\": {\n            \"fields\": {\n              \"seq\": {\n                \"type\": \"uint32\",\n                \"id\": 1\n              }\n            }\n          },\n          \"UpsertWorkflowSearchAttributes\": {\n            \"fields\": {\n              \"searchAttributes\": {\n                \"type\": \"temporal.api.common.v1.SearchAttributes\",\n                \"id\": 1,\n                \"protoName\": \"search_attributes\"\n              }\n            }\n          },\n          \"ModifyWorkflowProperties\": {\n            \"fields\": {\n              \"upsertedMemo\": {\n                \"type\": \"temporal.api.common.v1.Memo\",\n                \"id\": 1,\n                \"protoName\": \"upserted_memo\"\n              }\n            }\n          },\n          \"UpdateResponse\": {\n            \"oneofs\": {\n              \"response\": {\n                \"oneof\": [\n                  \"accepted\",\n                  \"rejected\",\n                  \"completed\"\n                ]\n              }\n            },\n            \"fields\": {\n              \"protocolInstanceId\": {\n                \"type\": \"string\",\n                \"id\": 1,\n                \"protoName\": \"protocol_instance_id\"\n              },\n              \"accepted\": {\n                \"type\": \"google.protobuf.Empty\",\n                \"id\": 2\n              },\n              \"rejected\": {\n                \"type\": \"temporal.api.failure.v1.Failure\",\n                \"id\": 3\n              },\n              \"completed\": {\n                \"type\": \"temporal.api.common.v1.Payload\",\n                \"id\": 4\n              }\n            }\n          },\n          \"ScheduleNexusOperation\": {\n            \"fields\": {\n              \"seq\": {\n                \"type\": \"uint32\",\n                \"id\": 1\n              },\n              \"endpoint\": {\n                \"type\": \"string\",\n                \"id\": 2\n              },\n              \"service\": {\n                \"type\": \"string\",\n                \"id\": 3\n              },\n              \"operation\": {\n                \"type\": \"string\",\n                \"id\": 4\n              },\n              \"input\": {\n                \"type\": \"temporal.api.common.v1.Payload\",\n                \"id\": 5\n              },\n              \"scheduleToCloseTimeout\": {\n                \"type\": \"google.protobuf.Duration\",\n                \"id\": 6,\n                \"protoName\": \"schedule_to_close_timeout\"\n              },\n              \"nexusHeader\": {\n                \"keyType\": \"string\",\n                \"type\": \"string\",\n                \"id\": 7,\n                \"protoName\": \"nexus_header\"\n              },\n              \"cancellationType\": {\n                \"type\": \"nexus.NexusOperationCancellationType\",\n                \"id\": 8,\n                \"protoName\": \"cancellation_type\"\n              },\n              \"scheduleToStartTimeout\": {\n                \"type\": \"google.protobuf.Duration\",\n                \"id\": 9,\n                \"protoName\": \"schedule_to_start_timeout\"\n              },\n              \"startToCloseTimeout\": {\n                \"type\": \"google.protobuf.Duration\",\n                \"id\": 10,\n                \"protoName\": \"start_to_close_timeout\"\n              }\n            }\n          },\n          \"RequestCancelNexusOperation\": {\n            \"fields\": {\n              \"seq\": {\n                \"type\": \"uint32\",\n                \"id\": 1\n              }\n            }\n          }\n        }\n      },\n      \"workflow_completion\": {\n        \"options\": {\n          \"ruby_package\": \"Temporalio::Internal::Bridge::Api::WorkflowCompletion\"\n        },\n        \"nested\": {\n          \"WorkflowActivationCompletion\": {\n            \"oneofs\": {\n              \"status\": {\n                \"oneof\": [\n                  \"successful\",\n                  \"failed\"\n                ]\n              }\n            },\n            \"fields\": {\n              \"runId\": {\n                \"type\": \"string\",\n                \"id\": 1,\n                \"protoName\": \"run_id\"\n              },\n              \"successful\": {\n                \"type\": \"Success\",\n                \"id\": 2\n              },\n              \"failed\": {\n                \"type\": \"Failure\",\n                \"id\": 3\n              },\n              \"payloadDownloadMetrics\": {\n                \"type\": \"common.ExternalStorageMetrics\",\n                \"id\": 4,\n                \"protoName\": \"payload_download_metrics\"\n              },\n              \"payloadUploadMetrics\": {\n                \"type\": \"common.ExternalStorageMetrics\",\n                \"id\": 5,\n                \"protoName\": \"payload_upload_metrics\"\n              }\n            }\n          },\n          \"Success\": {\n            \"fields\": {\n              \"commands\": {\n                \"rule\": \"repeated\",\n                \"type\": \"workflow_commands.WorkflowCommand\",\n                \"id\": 1\n              },\n              \"usedInternalFlags\": {\n                \"rule\": \"repeated\",\n                \"type\": \"uint32\",\n                \"id\": 6,\n                \"protoName\": \"used_internal_flags\"\n              },\n              \"versioningBehavior\": {\n                \"type\": \"temporal.api.enums.v1.VersioningBehavior\",\n                \"id\": 7,\n                \"protoName\": \"versioning_behavior\"\n              }\n            }\n          },\n          \"Failure\": {\n            \"fields\": {\n              \"failure\": {\n                \"type\": \"temporal.api.failure.v1.Failure\",\n                \"id\": 1\n              },\n              \"forceCause\": {\n                \"type\": \"temporal.api.enums.v1.WorkflowTaskFailedCause\",\n                \"id\": 2,\n                \"protoName\": \"force_cause\"\n              }\n            }\n          }\n        }\n      }\n    }\n  },\n  \"temporal\": {\n    \"nested\": {\n      \"api\": {\n        \"nested\": {\n          \"common\": {\n            \"nested\": {\n              \"v1\": {\n                \"options\": {\n                  \"go_package\": \"go.temporal.io/api/common/v1;common\",\n                  \"java_package\": \"io.temporal.api.common.v1\",\n                  \"java_multiple_files\": true,\n                  \"java_outer_classname\": \"MessageProto\",\n                  \"ruby_package\": \"Temporalio::Api::Common::V1\",\n                  \"csharp_namespace\": \"Temporalio.Api.Common.V1\"\n                },\n                \"nested\": {\n                  \"DataBlob\": {\n                    \"fields\": {\n                      \"encodingType\": {\n                        \"type\": \"temporal.api.enums.v1.EncodingType\",\n                        \"id\": 1,\n                        \"protoName\": \"encoding_type\"\n                      },\n                      \"data\": {\n                        \"type\": \"bytes\",\n                        \"id\": 2\n                      }\n                    }\n                  },\n                  \"Payloads\": {\n                    \"fields\": {\n                      \"payloads\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"Payload\",\n                        \"id\": 1\n                      }\n                    }\n                  },\n                  \"Payload\": {\n                    \"fields\": {\n                      \"metadata\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"bytes\",\n                        \"id\": 1\n                      },\n                      \"data\": {\n                        \"type\": \"bytes\",\n                        \"id\": 2\n                      },\n                      \"externalPayloads\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"ExternalPayloadDetails\",\n                        \"id\": 3,\n                        \"protoName\": \"external_payloads\"\n                      }\n                    },\n                    \"nested\": {\n                      \"ExternalPayloadDetails\": {\n                        \"fields\": {\n                          \"sizeBytes\": {\n                            \"type\": \"int64\",\n                            \"id\": 1,\n                            \"protoName\": \"size_bytes\"\n                          }\n                        }\n                      }\n                    }\n                  },\n                  \"SearchAttributes\": {\n                    \"fields\": {\n                      \"indexedFields\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"Payload\",\n                        \"id\": 1,\n                        \"protoName\": \"indexed_fields\"\n                      }\n                    }\n                  },\n                  \"Memo\": {\n                    \"fields\": {\n                      \"fields\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"Payload\",\n                        \"id\": 1\n                      }\n                    }\n                  },\n                  \"Header\": {\n                    \"fields\": {\n                      \"fields\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"Payload\",\n                        \"id\": 1\n                      }\n                    }\n                  },\n                  \"WorkflowExecution\": {\n                    \"fields\": {\n                      \"workflowId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"workflow_id\"\n                      },\n                      \"runId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"run_id\"\n                      }\n                    }\n                  },\n                  \"Execution\": {\n                    \"fields\": {\n                      \"type\": {\n                        \"type\": \"temporal.api.enums.v1.ExecutionType\",\n                        \"id\": 1\n                      },\n                      \"businessId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"business_id\"\n                      },\n                      \"runId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"run_id\"\n                      }\n                    }\n                  },\n                  \"WorkflowType\": {\n                    \"fields\": {\n                      \"name\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      }\n                    }\n                  },\n                  \"ActivityType\": {\n                    \"fields\": {\n                      \"name\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      }\n                    }\n                  },\n                  \"RetryPolicy\": {\n                    \"fields\": {\n                      \"initialInterval\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 1,\n                        \"protoName\": \"initial_interval\"\n                      },\n                      \"backoffCoefficient\": {\n                        \"type\": \"double\",\n                        \"id\": 2,\n                        \"protoName\": \"backoff_coefficient\"\n                      },\n                      \"maximumInterval\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 3,\n                        \"protoName\": \"maximum_interval\"\n                      },\n                      \"maximumAttempts\": {\n                        \"type\": \"int32\",\n                        \"id\": 4,\n                        \"protoName\": \"maximum_attempts\"\n                      },\n                      \"nonRetryableErrorTypes\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"string\",\n                        \"id\": 5,\n                        \"protoName\": \"non_retryable_error_types\"\n                      }\n                    }\n                  },\n                  \"MeteringMetadata\": {\n                    \"fields\": {\n                      \"nonfirstLocalActivityExecutionAttempts\": {\n                        \"type\": \"uint32\",\n                        \"id\": 13,\n                        \"protoName\": \"nonfirst_local_activity_execution_attempts\"\n                      }\n                    }\n                  },\n                  \"WorkerVersionStamp\": {\n                    \"fields\": {\n                      \"buildId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"build_id\"\n                      },\n                      \"useVersioning\": {\n                        \"type\": \"bool\",\n                        \"id\": 3,\n                        \"protoName\": \"use_versioning\"\n                      }\n                    }\n                  },\n                  \"WorkerVersionCapabilities\": {\n                    \"fields\": {\n                      \"buildId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"build_id\"\n                      },\n                      \"useVersioning\": {\n                        \"type\": \"bool\",\n                        \"id\": 2,\n                        \"protoName\": \"use_versioning\"\n                      },\n                      \"deploymentSeriesName\": {\n                        \"type\": \"string\",\n                        \"id\": 4,\n                        \"protoName\": \"deployment_series_name\"\n                      }\n                    }\n                  },\n                  \"ResetOptions\": {\n                    \"oneofs\": {\n                      \"target\": {\n                        \"oneof\": [\n                          \"firstWorkflowTask\",\n                          \"lastWorkflowTask\",\n                          \"workflowTaskId\",\n                          \"buildId\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"firstWorkflowTask\": {\n                        \"type\": \"google.protobuf.Empty\",\n                        \"id\": 1,\n                        \"protoName\": \"first_workflow_task\"\n                      },\n                      \"lastWorkflowTask\": {\n                        \"type\": \"google.protobuf.Empty\",\n                        \"id\": 2,\n                        \"protoName\": \"last_workflow_task\"\n                      },\n                      \"workflowTaskId\": {\n                        \"type\": \"int64\",\n                        \"id\": 3,\n                        \"protoName\": \"workflow_task_id\"\n                      },\n                      \"buildId\": {\n                        \"type\": \"string\",\n                        \"id\": 4,\n                        \"protoName\": \"build_id\"\n                      },\n                      \"resetReapplyType\": {\n                        \"type\": \"temporal.api.enums.v1.ResetReapplyType\",\n                        \"id\": 10,\n                        \"protoName\": \"reset_reapply_type\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"currentRunOnly\": {\n                        \"type\": \"bool\",\n                        \"id\": 11,\n                        \"protoName\": \"current_run_only\"\n                      },\n                      \"resetReapplyExcludeTypes\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.enums.v1.ResetReapplyExcludeType\",\n                        \"id\": 12,\n                        \"protoName\": \"reset_reapply_exclude_types\"\n                      }\n                    }\n                  },\n                  \"Callback\": {\n                    \"oneofs\": {\n                      \"variant\": {\n                        \"oneof\": [\n                          \"nexus\",\n                          \"internal\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"nexus\": {\n                        \"type\": \"Nexus\",\n                        \"id\": 2\n                      },\n                      \"internal\": {\n                        \"type\": \"Internal\",\n                        \"id\": 3\n                      },\n                      \"links\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"Link\",\n                        \"id\": 100\n                      }\n                    },\n                    \"reserved\": [\n                      [\n                        1,\n                        1\n                      ]\n                    ],\n                    \"nested\": {\n                      \"Nexus\": {\n                        \"fields\": {\n                          \"url\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"header\": {\n                            \"keyType\": \"string\",\n                            \"type\": \"string\",\n                            \"id\": 2\n                          }\n                        }\n                      },\n                      \"Internal\": {\n                        \"fields\": {\n                          \"data\": {\n                            \"type\": \"bytes\",\n                            \"id\": 1\n                          }\n                        }\n                      }\n                    }\n                  },\n                  \"Link\": {\n                    \"oneofs\": {\n                      \"variant\": {\n                        \"oneof\": [\n                          \"workflowEvent\",\n                          \"batchJob\",\n                          \"activity\",\n                          \"nexusOperation\",\n                          \"workflow\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"workflowEvent\": {\n                        \"type\": \"WorkflowEvent\",\n                        \"id\": 1,\n                        \"protoName\": \"workflow_event\"\n                      },\n                      \"batchJob\": {\n                        \"type\": \"BatchJob\",\n                        \"id\": 2,\n                        \"protoName\": \"batch_job\"\n                      },\n                      \"activity\": {\n                        \"type\": \"Activity\",\n                        \"id\": 3\n                      },\n                      \"nexusOperation\": {\n                        \"type\": \"NexusOperation\",\n                        \"id\": 4,\n                        \"protoName\": \"nexus_operation\"\n                      },\n                      \"workflow\": {\n                        \"type\": \"Workflow\",\n                        \"id\": 5\n                      }\n                    },\n                    \"nested\": {\n                      \"WorkflowEvent\": {\n                        \"oneofs\": {\n                          \"reference\": {\n                            \"oneof\": [\n                              \"eventRef\",\n                              \"requestIdRef\"\n                            ]\n                          }\n                        },\n                        \"fields\": {\n                          \"namespace\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"workflowId\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"workflow_id\"\n                          },\n                          \"runId\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"run_id\"\n                          },\n                          \"eventRef\": {\n                            \"type\": \"EventReference\",\n                            \"id\": 100,\n                            \"protoName\": \"event_ref\"\n                          },\n                          \"requestIdRef\": {\n                            \"type\": \"RequestIdReference\",\n                            \"id\": 101,\n                            \"protoName\": \"request_id_ref\"\n                          }\n                        },\n                        \"nested\": {\n                          \"EventReference\": {\n                            \"fields\": {\n                              \"eventId\": {\n                                \"type\": \"int64\",\n                                \"id\": 1,\n                                \"protoName\": \"event_id\"\n                              },\n                              \"eventType\": {\n                                \"type\": \"temporal.api.enums.v1.EventType\",\n                                \"id\": 2,\n                                \"protoName\": \"event_type\"\n                              }\n                            }\n                          },\n                          \"RequestIdReference\": {\n                            \"fields\": {\n                              \"requestId\": {\n                                \"type\": \"string\",\n                                \"id\": 1,\n                                \"protoName\": \"request_id\"\n                              },\n                              \"eventType\": {\n                                \"type\": \"temporal.api.enums.v1.EventType\",\n                                \"id\": 2,\n                                \"protoName\": \"event_type\"\n                              }\n                            }\n                          }\n                        }\n                      },\n                      \"BatchJob\": {\n                        \"fields\": {\n                          \"jobId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"job_id\"\n                          }\n                        }\n                      },\n                      \"Activity\": {\n                        \"fields\": {\n                          \"namespace\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"activityId\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"activity_id\"\n                          },\n                          \"runId\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"run_id\"\n                          }\n                        }\n                      },\n                      \"NexusOperation\": {\n                        \"fields\": {\n                          \"namespace\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"operationId\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"operation_id\"\n                          },\n                          \"runId\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"run_id\"\n                          }\n                        }\n                      },\n                      \"Workflow\": {\n                        \"fields\": {\n                          \"namespace\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"workflowId\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"workflow_id\"\n                          },\n                          \"runId\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"run_id\"\n                          },\n                          \"reason\": {\n                            \"type\": \"string\",\n                            \"id\": 4\n                          }\n                        }\n                      }\n                    }\n                  },\n                  \"Principal\": {\n                    \"fields\": {\n                      \"type\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"name\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      }\n                    }\n                  },\n                  \"Priority\": {\n                    \"fields\": {\n                      \"priorityKey\": {\n                        \"type\": \"int32\",\n                        \"id\": 1,\n                        \"protoName\": \"priority_key\"\n                      },\n                      \"fairnessKey\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"fairness_key\"\n                      },\n                      \"fairnessWeight\": {\n                        \"type\": \"float\",\n                        \"id\": 3,\n                        \"protoName\": \"fairness_weight\"\n                      }\n                    }\n                  },\n                  \"WorkerSelector\": {\n                    \"oneofs\": {\n                      \"selector\": {\n                        \"oneof\": [\n                          \"workerInstanceKey\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"workerInstanceKey\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"worker_instance_key\"\n                      }\n                    }\n                  },\n                  \"OnConflictOptions\": {\n                    \"fields\": {\n                      \"attachRequestId\": {\n                        \"type\": \"bool\",\n                        \"id\": 1,\n                        \"protoName\": \"attach_request_id\"\n                      },\n                      \"attachCompletionCallbacks\": {\n                        \"type\": \"bool\",\n                        \"id\": 2,\n                        \"protoName\": \"attach_completion_callbacks\"\n                      },\n                      \"attachLinks\": {\n                        \"type\": \"bool\",\n                        \"id\": 3,\n                        \"protoName\": \"attach_links\"\n                      }\n                    }\n                  },\n                  \"TimeSkippingConfig\": {\n                    \"fields\": {\n                      \"enabled\": {\n                        \"type\": \"bool\",\n                        \"id\": 1\n                      },\n                      \"fastForwardConfig\": {\n                        \"type\": \"FastForwardConfig\",\n                        \"id\": 2,\n                        \"protoName\": \"fast_forward_config\"\n                      },\n                      \"disablePropagation\": {\n                        \"type\": \"bool\",\n                        \"id\": 3,\n                        \"protoName\": \"disable_propagation\"\n                      },\n                      \"maxSessionSkipCount\": {\n                        \"type\": \"int32\",\n                        \"id\": 4,\n                        \"protoName\": \"max_session_skip_count\"\n                      }\n                    }\n                  },\n                  \"FastForwardConfig\": {\n                    \"fields\": {\n                      \"id\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"duration\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 2\n                      }\n                    }\n                  },\n                  \"TimeSkippingStatePropagation\": {\n                    \"fields\": {\n                      \"initialSkippedDuration\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 1,\n                        \"protoName\": \"initial_skipped_duration\"\n                      },\n                      \"fastForwardTargetTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 2,\n                        \"protoName\": \"fast_forward_target_time\"\n                      },\n                      \"initialSkipCount\": {\n                        \"type\": \"int32\",\n                        \"id\": 3,\n                        \"protoName\": \"initial_skip_count\"\n                      }\n                    }\n                  },\n                  \"TimeSkippingInfo\": {\n                    \"fields\": {\n                      \"currentTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 1,\n                        \"protoName\": \"current_time\"\n                      },\n                      \"effectiveConfig\": {\n                        \"type\": \"TimeSkippingConfig\",\n                        \"id\": 2,\n                        \"protoName\": \"effective_config\"\n                      },\n                      \"fastForwardInfo\": {\n                        \"type\": \"TimeSkippingFastForwardInfo\",\n                        \"id\": 4,\n                        \"protoName\": \"fast_forward_info\"\n                      },\n                      \"currentSessionSkipCount\": {\n                        \"type\": \"int32\",\n                        \"id\": 6,\n                        \"protoName\": \"current_session_skip_count\"\n                      }\n                    }\n                  },\n                  \"TimeSkippingFastForwardInfo\": {\n                    \"fields\": {\n                      \"fastForwardDuration\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 1,\n                        \"protoName\": \"fast_forward_duration\"\n                      },\n                      \"fastForwardId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"fast_forward_id\"\n                      },\n                      \"targetTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 3,\n                        \"protoName\": \"target_time\"\n                      },\n                      \"hasCompleted\": {\n                        \"type\": \"bool\",\n                        \"id\": 4,\n                        \"protoName\": \"has_completed\"\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          \"enums\": {\n            \"nested\": {\n              \"v1\": {\n                \"options\": {\n                  \"go_package\": \"go.temporal.io/api/enums/v1;enums\",\n                  \"java_package\": \"io.temporal.api.enums.v1\",\n                  \"java_multiple_files\": true,\n                  \"java_outer_classname\": \"ScheduleProto\",\n                  \"ruby_package\": \"Temporalio::Api::Enums::V1\",\n                  \"csharp_namespace\": \"Temporalio.Api.Enums.V1\"\n                },\n                \"nested\": {\n                  \"EncodingType\": {\n                    \"values\": {\n                      \"ENCODING_TYPE_UNSPECIFIED\": 0,\n                      \"ENCODING_TYPE_PROTO3\": 1,\n                      \"ENCODING_TYPE_JSON\": 2\n                    }\n                  },\n                  \"IndexedValueType\": {\n                    \"values\": {\n                      \"INDEXED_VALUE_TYPE_UNSPECIFIED\": 0,\n                      \"INDEXED_VALUE_TYPE_TEXT\": 1,\n                      \"INDEXED_VALUE_TYPE_KEYWORD\": 2,\n                      \"INDEXED_VALUE_TYPE_INT\": 3,\n                      \"INDEXED_VALUE_TYPE_DOUBLE\": 4,\n                      \"INDEXED_VALUE_TYPE_BOOL\": 5,\n                      \"INDEXED_VALUE_TYPE_DATETIME\": 6,\n                      \"INDEXED_VALUE_TYPE_KEYWORD_LIST\": 7\n                    }\n                  },\n                  \"Severity\": {\n                    \"values\": {\n                      \"SEVERITY_UNSPECIFIED\": 0,\n                      \"SEVERITY_HIGH\": 1,\n                      \"SEVERITY_MEDIUM\": 2,\n                      \"SEVERITY_LOW\": 3\n                    }\n                  },\n                  \"CallbackState\": {\n                    \"values\": {\n                      \"CALLBACK_STATE_UNSPECIFIED\": 0,\n                      \"CALLBACK_STATE_STANDBY\": 1,\n                      \"CALLBACK_STATE_SCHEDULED\": 2,\n                      \"CALLBACK_STATE_BACKING_OFF\": 3,\n                      \"CALLBACK_STATE_FAILED\": 4,\n                      \"CALLBACK_STATE_SUCCEEDED\": 5,\n                      \"CALLBACK_STATE_BLOCKED\": 6\n                    }\n                  },\n                  \"PendingNexusOperationState\": {\n                    \"values\": {\n                      \"PENDING_NEXUS_OPERATION_STATE_UNSPECIFIED\": 0,\n                      \"PENDING_NEXUS_OPERATION_STATE_SCHEDULED\": 1,\n                      \"PENDING_NEXUS_OPERATION_STATE_BACKING_OFF\": 2,\n                      \"PENDING_NEXUS_OPERATION_STATE_STARTED\": 3,\n                      \"PENDING_NEXUS_OPERATION_STATE_BLOCKED\": 4\n                    }\n                  },\n                  \"NexusOperationCancellationState\": {\n                    \"values\": {\n                      \"NEXUS_OPERATION_CANCELLATION_STATE_UNSPECIFIED\": 0,\n                      \"NEXUS_OPERATION_CANCELLATION_STATE_SCHEDULED\": 1,\n                      \"NEXUS_OPERATION_CANCELLATION_STATE_BACKING_OFF\": 2,\n                      \"NEXUS_OPERATION_CANCELLATION_STATE_SUCCEEDED\": 3,\n                      \"NEXUS_OPERATION_CANCELLATION_STATE_FAILED\": 4,\n                      \"NEXUS_OPERATION_CANCELLATION_STATE_TIMED_OUT\": 5,\n                      \"NEXUS_OPERATION_CANCELLATION_STATE_BLOCKED\": 6\n                    }\n                  },\n                  \"WorkflowRuleActionScope\": {\n                    \"values\": {\n                      \"WORKFLOW_RULE_ACTION_SCOPE_UNSPECIFIED\": 0,\n                      \"WORKFLOW_RULE_ACTION_SCOPE_WORKFLOW\": 1,\n                      \"WORKFLOW_RULE_ACTION_SCOPE_ACTIVITY\": 2\n                    }\n                  },\n                  \"ApplicationErrorCategory\": {\n                    \"values\": {\n                      \"APPLICATION_ERROR_CATEGORY_UNSPECIFIED\": 0,\n                      \"APPLICATION_ERROR_CATEGORY_BENIGN\": 1\n                    }\n                  },\n                  \"WorkerStatus\": {\n                    \"values\": {\n                      \"WORKER_STATUS_UNSPECIFIED\": 0,\n                      \"WORKER_STATUS_RUNNING\": 1,\n                      \"WORKER_STATUS_SHUTTING_DOWN\": 2,\n                      \"WORKER_STATUS_SHUTDOWN\": 3\n                    }\n                  },\n                  \"ExecutionType\": {\n                    \"values\": {\n                      \"EXECUTION_TYPE_UNSPECIFIED\": 0,\n                      \"EXECUTION_TYPE_WORKFLOW\": 1,\n                      \"EXECUTION_TYPE_ACTIVITY\": 2\n                    }\n                  },\n                  \"EventType\": {\n                    \"values\": {\n                      \"EVENT_TYPE_UNSPECIFIED\": 0,\n                      \"EVENT_TYPE_WORKFLOW_EXECUTION_STARTED\": 1,\n                      \"EVENT_TYPE_WORKFLOW_EXECUTION_COMPLETED\": 2,\n                      \"EVENT_TYPE_WORKFLOW_EXECUTION_FAILED\": 3,\n                      \"EVENT_TYPE_WORKFLOW_EXECUTION_TIMED_OUT\": 4,\n                      \"EVENT_TYPE_WORKFLOW_TASK_SCHEDULED\": 5,\n                      \"EVENT_TYPE_WORKFLOW_TASK_STARTED\": 6,\n                      \"EVENT_TYPE_WORKFLOW_TASK_COMPLETED\": 7,\n                      \"EVENT_TYPE_WORKFLOW_TASK_TIMED_OUT\": 8,\n                      \"EVENT_TYPE_WORKFLOW_TASK_FAILED\": 9,\n                      \"EVENT_TYPE_ACTIVITY_TASK_SCHEDULED\": 10,\n                      \"EVENT_TYPE_ACTIVITY_TASK_STARTED\": 11,\n                      \"EVENT_TYPE_ACTIVITY_TASK_COMPLETED\": 12,\n                      \"EVENT_TYPE_ACTIVITY_TASK_FAILED\": 13,\n                      \"EVENT_TYPE_ACTIVITY_TASK_TIMED_OUT\": 14,\n                      \"EVENT_TYPE_ACTIVITY_TASK_CANCEL_REQUESTED\": 15,\n                      \"EVENT_TYPE_ACTIVITY_TASK_CANCELED\": 16,\n                      \"EVENT_TYPE_TIMER_STARTED\": 17,\n                      \"EVENT_TYPE_TIMER_FIRED\": 18,\n                      \"EVENT_TYPE_TIMER_CANCELED\": 19,\n                      \"EVENT_TYPE_WORKFLOW_EXECUTION_CANCEL_REQUESTED\": 20,\n                      \"EVENT_TYPE_WORKFLOW_EXECUTION_CANCELED\": 21,\n                      \"EVENT_TYPE_REQUEST_CANCEL_EXTERNAL_WORKFLOW_EXECUTION_INITIATED\": 22,\n                      \"EVENT_TYPE_REQUEST_CANCEL_EXTERNAL_WORKFLOW_EXECUTION_FAILED\": 23,\n                      \"EVENT_TYPE_EXTERNAL_WORKFLOW_EXECUTION_CANCEL_REQUESTED\": 24,\n                      \"EVENT_TYPE_MARKER_RECORDED\": 25,\n                      \"EVENT_TYPE_WORKFLOW_EXECUTION_SIGNALED\": 26,\n                      \"EVENT_TYPE_WORKFLOW_EXECUTION_TERMINATED\": 27,\n                      \"EVENT_TYPE_WORKFLOW_EXECUTION_CONTINUED_AS_NEW\": 28,\n                      \"EVENT_TYPE_START_CHILD_WORKFLOW_EXECUTION_INITIATED\": 29,\n                      \"EVENT_TYPE_START_CHILD_WORKFLOW_EXECUTION_FAILED\": 30,\n                      \"EVENT_TYPE_CHILD_WORKFLOW_EXECUTION_STARTED\": 31,\n                      \"EVENT_TYPE_CHILD_WORKFLOW_EXECUTION_COMPLETED\": 32,\n                      \"EVENT_TYPE_CHILD_WORKFLOW_EXECUTION_FAILED\": 33,\n                      \"EVENT_TYPE_CHILD_WORKFLOW_EXECUTION_CANCELED\": 34,\n                      \"EVENT_TYPE_CHILD_WORKFLOW_EXECUTION_TIMED_OUT\": 35,\n                      \"EVENT_TYPE_CHILD_WORKFLOW_EXECUTION_TERMINATED\": 36,\n                      \"EVENT_TYPE_SIGNAL_EXTERNAL_WORKFLOW_EXECUTION_INITIATED\": 37,\n                      \"EVENT_TYPE_SIGNAL_EXTERNAL_WORKFLOW_EXECUTION_FAILED\": 38,\n                      \"EVENT_TYPE_EXTERNAL_WORKFLOW_EXECUTION_SIGNALED\": 39,\n                      \"EVENT_TYPE_UPSERT_WORKFLOW_SEARCH_ATTRIBUTES\": 40,\n                      \"EVENT_TYPE_WORKFLOW_EXECUTION_UPDATE_ADMITTED\": 47,\n                      \"EVENT_TYPE_WORKFLOW_EXECUTION_UPDATE_ACCEPTED\": 41,\n                      \"EVENT_TYPE_WORKFLOW_EXECUTION_UPDATE_REJECTED\": 42,\n                      \"EVENT_TYPE_WORKFLOW_EXECUTION_UPDATE_COMPLETED\": 43,\n                      \"EVENT_TYPE_WORKFLOW_PROPERTIES_MODIFIED_EXTERNALLY\": 44,\n                      \"EVENT_TYPE_ACTIVITY_PROPERTIES_MODIFIED_EXTERNALLY\": 45,\n                      \"EVENT_TYPE_WORKFLOW_PROPERTIES_MODIFIED\": 46,\n                      \"EVENT_TYPE_NEXUS_OPERATION_SCHEDULED\": 48,\n                      \"EVENT_TYPE_NEXUS_OPERATION_STARTED\": 49,\n                      \"EVENT_TYPE_NEXUS_OPERATION_COMPLETED\": 50,\n                      \"EVENT_TYPE_NEXUS_OPERATION_FAILED\": 51,\n                      \"EVENT_TYPE_NEXUS_OPERATION_CANCELED\": 52,\n                      \"EVENT_TYPE_NEXUS_OPERATION_TIMED_OUT\": 53,\n                      \"EVENT_TYPE_NEXUS_OPERATION_CANCEL_REQUESTED\": 54,\n                      \"EVENT_TYPE_WORKFLOW_EXECUTION_OPTIONS_UPDATED\": 55,\n                      \"EVENT_TYPE_NEXUS_OPERATION_CANCEL_REQUEST_COMPLETED\": 56,\n                      \"EVENT_TYPE_NEXUS_OPERATION_CANCEL_REQUEST_FAILED\": 57,\n                      \"EVENT_TYPE_WORKFLOW_EXECUTION_PAUSED\": 58,\n                      \"EVENT_TYPE_WORKFLOW_EXECUTION_UNPAUSED\": 59,\n                      \"EVENT_TYPE_WORKFLOW_EXECUTION_TIME_SKIPPING_TRANSITIONED\": 60\n                    }\n                  },\n                  \"ResetReapplyExcludeType\": {\n                    \"valuesOptions\": {\n                      \"RESET_REAPPLY_EXCLUDE_TYPE_CANCEL_REQUEST\": {\n                        \"deprecated\": true\n                      }\n                    },\n                    \"values\": {\n                      \"RESET_REAPPLY_EXCLUDE_TYPE_UNSPECIFIED\": 0,\n                      \"RESET_REAPPLY_EXCLUDE_TYPE_SIGNAL\": 1,\n                      \"RESET_REAPPLY_EXCLUDE_TYPE_UPDATE\": 2,\n                      \"RESET_REAPPLY_EXCLUDE_TYPE_NEXUS\": 3,\n                      \"RESET_REAPPLY_EXCLUDE_TYPE_CANCEL_REQUEST\": 4\n                    }\n                  },\n                  \"ResetReapplyType\": {\n                    \"values\": {\n                      \"RESET_REAPPLY_TYPE_UNSPECIFIED\": 0,\n                      \"RESET_REAPPLY_TYPE_SIGNAL\": 1,\n                      \"RESET_REAPPLY_TYPE_NONE\": 2,\n                      \"RESET_REAPPLY_TYPE_ALL_ELIGIBLE\": 3\n                    }\n                  },\n                  \"ResetType\": {\n                    \"values\": {\n                      \"RESET_TYPE_UNSPECIFIED\": 0,\n                      \"RESET_TYPE_FIRST_WORKFLOW_TASK\": 1,\n                      \"RESET_TYPE_LAST_WORKFLOW_TASK\": 2\n                    }\n                  },\n                  \"WorkflowIdReusePolicy\": {\n                    \"valuesOptions\": {\n                      \"WORKFLOW_ID_REUSE_POLICY_TERMINATE_IF_RUNNING\": {\n                        \"deprecated\": true\n                      }\n                    },\n                    \"values\": {\n                      \"WORKFLOW_ID_REUSE_POLICY_UNSPECIFIED\": 0,\n                      \"WORKFLOW_ID_REUSE_POLICY_ALLOW_DUPLICATE\": 1,\n                      \"WORKFLOW_ID_REUSE_POLICY_ALLOW_DUPLICATE_FAILED_ONLY\": 2,\n                      \"WORKFLOW_ID_REUSE_POLICY_REJECT_DUPLICATE\": 3,\n                      \"WORKFLOW_ID_REUSE_POLICY_TERMINATE_IF_RUNNING\": 4\n                    }\n                  },\n                  \"WorkflowIdConflictPolicy\": {\n                    \"values\": {\n                      \"WORKFLOW_ID_CONFLICT_POLICY_UNSPECIFIED\": 0,\n                      \"WORKFLOW_ID_CONFLICT_POLICY_FAIL\": 1,\n                      \"WORKFLOW_ID_CONFLICT_POLICY_USE_EXISTING\": 2,\n                      \"WORKFLOW_ID_CONFLICT_POLICY_TERMINATE_EXISTING\": 3\n                    }\n                  },\n                  \"ParentClosePolicy\": {\n                    \"values\": {\n                      \"PARENT_CLOSE_POLICY_UNSPECIFIED\": 0,\n                      \"PARENT_CLOSE_POLICY_TERMINATE\": 1,\n                      \"PARENT_CLOSE_POLICY_ABANDON\": 2,\n                      \"PARENT_CLOSE_POLICY_REQUEST_CANCEL\": 3\n                    }\n                  },\n                  \"ContinueAsNewInitiator\": {\n                    \"values\": {\n                      \"CONTINUE_AS_NEW_INITIATOR_UNSPECIFIED\": 0,\n                      \"CONTINUE_AS_NEW_INITIATOR_WORKFLOW\": 1,\n                      \"CONTINUE_AS_NEW_INITIATOR_RETRY\": 2,\n                      \"CONTINUE_AS_NEW_INITIATOR_CRON_SCHEDULE\": 3\n                    }\n                  },\n                  \"WorkflowExecutionStatus\": {\n                    \"values\": {\n                      \"WORKFLOW_EXECUTION_STATUS_UNSPECIFIED\": 0,\n                      \"WORKFLOW_EXECUTION_STATUS_RUNNING\": 1,\n                      \"WORKFLOW_EXECUTION_STATUS_COMPLETED\": 2,\n                      \"WORKFLOW_EXECUTION_STATUS_FAILED\": 3,\n                      \"WORKFLOW_EXECUTION_STATUS_CANCELED\": 4,\n                      \"WORKFLOW_EXECUTION_STATUS_TERMINATED\": 5,\n                      \"WORKFLOW_EXECUTION_STATUS_CONTINUED_AS_NEW\": 6,\n                      \"WORKFLOW_EXECUTION_STATUS_TIMED_OUT\": 7,\n                      \"WORKFLOW_EXECUTION_STATUS_PAUSED\": 8\n                    }\n                  },\n                  \"PendingActivityState\": {\n                    \"values\": {\n                      \"PENDING_ACTIVITY_STATE_UNSPECIFIED\": 0,\n                      \"PENDING_ACTIVITY_STATE_SCHEDULED\": 1,\n                      \"PENDING_ACTIVITY_STATE_STARTED\": 2,\n                      \"PENDING_ACTIVITY_STATE_CANCEL_REQUESTED\": 3,\n                      \"PENDING_ACTIVITY_STATE_PAUSED\": 4,\n                      \"PENDING_ACTIVITY_STATE_PAUSE_REQUESTED\": 5\n                    }\n                  },\n                  \"PendingWorkflowTaskState\": {\n                    \"values\": {\n                      \"PENDING_WORKFLOW_TASK_STATE_UNSPECIFIED\": 0,\n                      \"PENDING_WORKFLOW_TASK_STATE_SCHEDULED\": 1,\n                      \"PENDING_WORKFLOW_TASK_STATE_STARTED\": 2\n                    }\n                  },\n                  \"HistoryEventFilterType\": {\n                    \"values\": {\n                      \"HISTORY_EVENT_FILTER_TYPE_UNSPECIFIED\": 0,\n                      \"HISTORY_EVENT_FILTER_TYPE_ALL_EVENT\": 1,\n                      \"HISTORY_EVENT_FILTER_TYPE_CLOSE_EVENT\": 2\n                    }\n                  },\n                  \"RetryState\": {\n                    \"values\": {\n                      \"RETRY_STATE_UNSPECIFIED\": 0,\n                      \"RETRY_STATE_IN_PROGRESS\": 1,\n                      \"RETRY_STATE_NON_RETRYABLE_FAILURE\": 2,\n                      \"RETRY_STATE_TIMEOUT\": 3,\n                      \"RETRY_STATE_MAXIMUM_ATTEMPTS_REACHED\": 4,\n                      \"RETRY_STATE_RETRY_POLICY_NOT_SET\": 5,\n                      \"RETRY_STATE_INTERNAL_SERVER_ERROR\": 6,\n                      \"RETRY_STATE_CANCEL_REQUESTED\": 7\n                    }\n                  },\n                  \"TimeoutType\": {\n                    \"values\": {\n                      \"TIMEOUT_TYPE_UNSPECIFIED\": 0,\n                      \"TIMEOUT_TYPE_START_TO_CLOSE\": 1,\n                      \"TIMEOUT_TYPE_SCHEDULE_TO_START\": 2,\n                      \"TIMEOUT_TYPE_SCHEDULE_TO_CLOSE\": 3,\n                      \"TIMEOUT_TYPE_HEARTBEAT\": 4\n                    }\n                  },\n                  \"VersioningBehavior\": {\n                    \"values\": {\n                      \"VERSIONING_BEHAVIOR_UNSPECIFIED\": 0,\n                      \"VERSIONING_BEHAVIOR_PINNED\": 1,\n                      \"VERSIONING_BEHAVIOR_AUTO_UPGRADE\": 2\n                    }\n                  },\n                  \"ContinueAsNewVersioningBehavior\": {\n                    \"values\": {\n                      \"CONTINUE_AS_NEW_VERSIONING_BEHAVIOR_UNSPECIFIED\": 0,\n                      \"CONTINUE_AS_NEW_VERSIONING_BEHAVIOR_AUTO_UPGRADE\": 1,\n                      \"CONTINUE_AS_NEW_VERSIONING_BEHAVIOR_USE_RAMPING_VERSION\": 2\n                    }\n                  },\n                  \"SuggestContinueAsNewReason\": {\n                    \"values\": {\n                      \"SUGGEST_CONTINUE_AS_NEW_REASON_UNSPECIFIED\": 0,\n                      \"SUGGEST_CONTINUE_AS_NEW_REASON_HISTORY_SIZE_TOO_LARGE\": 1,\n                      \"SUGGEST_CONTINUE_AS_NEW_REASON_TOO_MANY_HISTORY_EVENTS\": 2,\n                      \"SUGGEST_CONTINUE_AS_NEW_REASON_TOO_MANY_UPDATES\": 3\n                    },\n                    \"reserved\": [\n                      [\n                        4,\n                        4\n                      ],\n                      \"SUGGEST_CONTINUE_AS_NEW_REASON_TARGET_WORKER_DEPLOYMENT_VERSION_CHANGED\"\n                    ]\n                  },\n                  \"NexusHandlerErrorRetryBehavior\": {\n                    \"values\": {\n                      \"NEXUS_HANDLER_ERROR_RETRY_BEHAVIOR_UNSPECIFIED\": 0,\n                      \"NEXUS_HANDLER_ERROR_RETRY_BEHAVIOR_RETRYABLE\": 1,\n                      \"NEXUS_HANDLER_ERROR_RETRY_BEHAVIOR_NON_RETRYABLE\": 2\n                    }\n                  },\n                  \"NexusOperationExecutionStatus\": {\n                    \"values\": {\n                      \"NEXUS_OPERATION_EXECUTION_STATUS_UNSPECIFIED\": 0,\n                      \"NEXUS_OPERATION_EXECUTION_STATUS_RUNNING\": 1,\n                      \"NEXUS_OPERATION_EXECUTION_STATUS_COMPLETED\": 2,\n                      \"NEXUS_OPERATION_EXECUTION_STATUS_FAILED\": 3,\n                      \"NEXUS_OPERATION_EXECUTION_STATUS_CANCELED\": 4,\n                      \"NEXUS_OPERATION_EXECUTION_STATUS_TERMINATED\": 5,\n                      \"NEXUS_OPERATION_EXECUTION_STATUS_TIMED_OUT\": 6\n                    }\n                  },\n                  \"NexusOperationWaitStage\": {\n                    \"values\": {\n                      \"NEXUS_OPERATION_WAIT_STAGE_UNSPECIFIED\": 0,\n                      \"NEXUS_OPERATION_WAIT_STAGE_STARTED\": 1,\n                      \"NEXUS_OPERATION_WAIT_STAGE_CLOSED\": 2\n                    }\n                  },\n                  \"NexusOperationIdReusePolicy\": {\n                    \"values\": {\n                      \"NEXUS_OPERATION_ID_REUSE_POLICY_UNSPECIFIED\": 0,\n                      \"NEXUS_OPERATION_ID_REUSE_POLICY_ALLOW_DUPLICATE\": 1,\n                      \"NEXUS_OPERATION_ID_REUSE_POLICY_ALLOW_DUPLICATE_FAILED_ONLY\": 2,\n                      \"NEXUS_OPERATION_ID_REUSE_POLICY_REJECT_DUPLICATE\": 3\n                    }\n                  },\n                  \"NexusOperationIdConflictPolicy\": {\n                    \"values\": {\n                      \"NEXUS_OPERATION_ID_CONFLICT_POLICY_UNSPECIFIED\": 0,\n                      \"NEXUS_OPERATION_ID_CONFLICT_POLICY_FAIL\": 1,\n                      \"NEXUS_OPERATION_ID_CONFLICT_POLICY_USE_EXISTING\": 2\n                    }\n                  },\n                  \"UpdateWorkflowExecutionLifecycleStage\": {\n                    \"values\": {\n                      \"UPDATE_WORKFLOW_EXECUTION_LIFECYCLE_STAGE_UNSPECIFIED\": 0,\n                      \"UPDATE_WORKFLOW_EXECUTION_LIFECYCLE_STAGE_ADMITTED\": 1,\n                      \"UPDATE_WORKFLOW_EXECUTION_LIFECYCLE_STAGE_ACCEPTED\": 2,\n                      \"UPDATE_WORKFLOW_EXECUTION_LIFECYCLE_STAGE_COMPLETED\": 3\n                    }\n                  },\n                  \"UpdateAdmittedEventOrigin\": {\n                    \"values\": {\n                      \"UPDATE_ADMITTED_EVENT_ORIGIN_UNSPECIFIED\": 0,\n                      \"UPDATE_ADMITTED_EVENT_ORIGIN_REAPPLY\": 1\n                    }\n                  },\n                  \"BatchOperationType\": {\n                    \"valuesOptions\": {\n                      \"BATCH_OPERATION_TYPE_TERMINATE\": {\n                        \"deprecated\": true\n                      },\n                      \"BATCH_OPERATION_TYPE_CANCEL\": {\n                        \"deprecated\": true\n                      },\n                      \"BATCH_OPERATION_TYPE_SIGNAL\": {\n                        \"deprecated\": true\n                      },\n                      \"BATCH_OPERATION_TYPE_DELETE\": {\n                        \"deprecated\": true\n                      },\n                      \"BATCH_OPERATION_TYPE_RESET\": {\n                        \"deprecated\": true\n                      },\n                      \"BATCH_OPERATION_TYPE_UPDATE_EXECUTION_OPTIONS\": {\n                        \"deprecated\": true\n                      }\n                    },\n                    \"values\": {\n                      \"BATCH_OPERATION_TYPE_UNSPECIFIED\": 0,\n                      \"BATCH_OPERATION_TYPE_TERMINATE\": 1,\n                      \"BATCH_OPERATION_TYPE_TERMINATE_WORKFLOW\": 13,\n                      \"BATCH_OPERATION_TYPE_CANCEL\": 2,\n                      \"BATCH_OPERATION_TYPE_CANCEL_WORKFLOW\": 14,\n                      \"BATCH_OPERATION_TYPE_SIGNAL\": 3,\n                      \"BATCH_OPERATION_TYPE_SIGNAL_WORKFLOW\": 15,\n                      \"BATCH_OPERATION_TYPE_DELETE\": 4,\n                      \"BATCH_OPERATION_TYPE_DELETE_WORKFLOW\": 16,\n                      \"BATCH_OPERATION_TYPE_RESET\": 5,\n                      \"BATCH_OPERATION_TYPE_RESET_WORKFLOW\": 17,\n                      \"BATCH_OPERATION_TYPE_UPDATE_EXECUTION_OPTIONS\": 6,\n                      \"BATCH_OPERATION_TYPE_UPDATE_WORKFLOW_EXECUTION_OPTIONS\": 18,\n                      \"BATCH_OPERATION_TYPE_UNPAUSE_ACTIVITY\": 7,\n                      \"BATCH_OPERATION_TYPE_UPDATE_ACTIVITY_OPTIONS\": 8,\n                      \"BATCH_OPERATION_TYPE_RESET_ACTIVITY\": 9,\n                      \"BATCH_OPERATION_TYPE_TERMINATE_ACTIVITY\": 10,\n                      \"BATCH_OPERATION_TYPE_CANCEL_ACTIVITY\": 11,\n                      \"BATCH_OPERATION_TYPE_DELETE_ACTIVITY\": 12\n                    }\n                  },\n                  \"BatchOperationState\": {\n                    \"values\": {\n                      \"BATCH_OPERATION_STATE_UNSPECIFIED\": 0,\n                      \"BATCH_OPERATION_STATE_RUNNING\": 1,\n                      \"BATCH_OPERATION_STATE_COMPLETED\": 2,\n                      \"BATCH_OPERATION_STATE_FAILED\": 3\n                    }\n                  },\n                  \"NamespaceState\": {\n                    \"values\": {\n                      \"NAMESPACE_STATE_UNSPECIFIED\": 0,\n                      \"NAMESPACE_STATE_REGISTERED\": 1,\n                      \"NAMESPACE_STATE_DEPRECATED\": 2,\n                      \"NAMESPACE_STATE_DELETED\": 3\n                    }\n                  },\n                  \"ArchivalState\": {\n                    \"values\": {\n                      \"ARCHIVAL_STATE_UNSPECIFIED\": 0,\n                      \"ARCHIVAL_STATE_DISABLED\": 1,\n                      \"ARCHIVAL_STATE_ENABLED\": 2\n                    }\n                  },\n                  \"ReplicationState\": {\n                    \"values\": {\n                      \"REPLICATION_STATE_UNSPECIFIED\": 0,\n                      \"REPLICATION_STATE_NORMAL\": 1,\n                      \"REPLICATION_STATE_HANDOVER\": 2\n                    }\n                  },\n                  \"WorkflowTaskFailedCause\": {\n                    \"values\": {\n                      \"WORKFLOW_TASK_FAILED_CAUSE_UNSPECIFIED\": 0,\n                      \"WORKFLOW_TASK_FAILED_CAUSE_UNHANDLED_COMMAND\": 1,\n                      \"WORKFLOW_TASK_FAILED_CAUSE_BAD_SCHEDULE_ACTIVITY_ATTRIBUTES\": 2,\n                      \"WORKFLOW_TASK_FAILED_CAUSE_BAD_REQUEST_CANCEL_ACTIVITY_ATTRIBUTES\": 3,\n                      \"WORKFLOW_TASK_FAILED_CAUSE_BAD_START_TIMER_ATTRIBUTES\": 4,\n                      \"WORKFLOW_TASK_FAILED_CAUSE_BAD_CANCEL_TIMER_ATTRIBUTES\": 5,\n                      \"WORKFLOW_TASK_FAILED_CAUSE_BAD_RECORD_MARKER_ATTRIBUTES\": 6,\n                      \"WORKFLOW_TASK_FAILED_CAUSE_BAD_COMPLETE_WORKFLOW_EXECUTION_ATTRIBUTES\": 7,\n                      \"WORKFLOW_TASK_FAILED_CAUSE_BAD_FAIL_WORKFLOW_EXECUTION_ATTRIBUTES\": 8,\n                      \"WORKFLOW_TASK_FAILED_CAUSE_BAD_CANCEL_WORKFLOW_EXECUTION_ATTRIBUTES\": 9,\n                      \"WORKFLOW_TASK_FAILED_CAUSE_BAD_REQUEST_CANCEL_EXTERNAL_WORKFLOW_EXECUTION_ATTRIBUTES\": 10,\n                      \"WORKFLOW_TASK_FAILED_CAUSE_BAD_CONTINUE_AS_NEW_ATTRIBUTES\": 11,\n                      \"WORKFLOW_TASK_FAILED_CAUSE_START_TIMER_DUPLICATE_ID\": 12,\n                      \"WORKFLOW_TASK_FAILED_CAUSE_RESET_STICKY_TASK_QUEUE\": 13,\n                      \"WORKFLOW_TASK_FAILED_CAUSE_WORKFLOW_WORKER_UNHANDLED_FAILURE\": 14,\n                      \"WORKFLOW_TASK_FAILED_CAUSE_BAD_SIGNAL_WORKFLOW_EXECUTION_ATTRIBUTES\": 15,\n                      \"WORKFLOW_TASK_FAILED_CAUSE_BAD_START_CHILD_EXECUTION_ATTRIBUTES\": 16,\n                      \"WORKFLOW_TASK_FAILED_CAUSE_FORCE_CLOSE_COMMAND\": 17,\n                      \"WORKFLOW_TASK_FAILED_CAUSE_FAILOVER_CLOSE_COMMAND\": 18,\n                      \"WORKFLOW_TASK_FAILED_CAUSE_BAD_SIGNAL_INPUT_SIZE\": 19,\n                      \"WORKFLOW_TASK_FAILED_CAUSE_RESET_WORKFLOW\": 20,\n                      \"WORKFLOW_TASK_FAILED_CAUSE_BAD_BINARY\": 21,\n                      \"WORKFLOW_TASK_FAILED_CAUSE_SCHEDULE_ACTIVITY_DUPLICATE_ID\": 22,\n                      \"WORKFLOW_TASK_FAILED_CAUSE_BAD_SEARCH_ATTRIBUTES\": 23,\n                      \"WORKFLOW_TASK_FAILED_CAUSE_NON_DETERMINISTIC_ERROR\": 24,\n                      \"WORKFLOW_TASK_FAILED_CAUSE_BAD_MODIFY_WORKFLOW_PROPERTIES_ATTRIBUTES\": 25,\n                      \"WORKFLOW_TASK_FAILED_CAUSE_PENDING_CHILD_WORKFLOWS_LIMIT_EXCEEDED\": 26,\n                      \"WORKFLOW_TASK_FAILED_CAUSE_PENDING_ACTIVITIES_LIMIT_EXCEEDED\": 27,\n                      \"WORKFLOW_TASK_FAILED_CAUSE_PENDING_SIGNALS_LIMIT_EXCEEDED\": 28,\n                      \"WORKFLOW_TASK_FAILED_CAUSE_PENDING_REQUEST_CANCEL_LIMIT_EXCEEDED\": 29,\n                      \"WORKFLOW_TASK_FAILED_CAUSE_BAD_UPDATE_WORKFLOW_EXECUTION_MESSAGE\": 30,\n                      \"WORKFLOW_TASK_FAILED_CAUSE_UNHANDLED_UPDATE\": 31,\n                      \"WORKFLOW_TASK_FAILED_CAUSE_BAD_SCHEDULE_NEXUS_OPERATION_ATTRIBUTES\": 32,\n                      \"WORKFLOW_TASK_FAILED_CAUSE_PENDING_NEXUS_OPERATIONS_LIMIT_EXCEEDED\": 33,\n                      \"WORKFLOW_TASK_FAILED_CAUSE_BAD_REQUEST_CANCEL_NEXUS_OPERATION_ATTRIBUTES\": 34,\n                      \"WORKFLOW_TASK_FAILED_CAUSE_FEATURE_DISABLED\": 35,\n                      \"WORKFLOW_TASK_FAILED_CAUSE_GRPC_MESSAGE_TOO_LARGE\": 36,\n                      \"WORKFLOW_TASK_FAILED_CAUSE_PAYLOADS_TOO_LARGE\": 37,\n                      \"WORKFLOW_TASK_FAILED_CAUSE_EXTERNAL_STORAGE_FAILURE\": 38,\n                      \"WORKFLOW_TASK_FAILED_CAUSE_WORKFLOW_PAUSE_REQUESTED_BEFORE_TASK_STARTED\": 39,\n                      \"WORKFLOW_TASK_FAILED_CAUSE_REQUEST_TOO_LARGE\": 40\n                    }\n                  },\n                  \"StartChildWorkflowExecutionFailedCause\": {\n                    \"values\": {\n                      \"START_CHILD_WORKFLOW_EXECUTION_FAILED_CAUSE_UNSPECIFIED\": 0,\n                      \"START_CHILD_WORKFLOW_EXECUTION_FAILED_CAUSE_WORKFLOW_ALREADY_EXISTS\": 1,\n                      \"START_CHILD_WORKFLOW_EXECUTION_FAILED_CAUSE_NAMESPACE_NOT_FOUND\": 2,\n                      \"START_CHILD_WORKFLOW_EXECUTION_FAILED_CAUSE_INVALID_VERSIONING_OVERRIDE\": 3\n                    }\n                  },\n                  \"CancelExternalWorkflowExecutionFailedCause\": {\n                    \"values\": {\n                      \"CANCEL_EXTERNAL_WORKFLOW_EXECUTION_FAILED_CAUSE_UNSPECIFIED\": 0,\n                      \"CANCEL_EXTERNAL_WORKFLOW_EXECUTION_FAILED_CAUSE_EXTERNAL_WORKFLOW_EXECUTION_NOT_FOUND\": 1,\n                      \"CANCEL_EXTERNAL_WORKFLOW_EXECUTION_FAILED_CAUSE_NAMESPACE_NOT_FOUND\": 2\n                    }\n                  },\n                  \"SignalExternalWorkflowExecutionFailedCause\": {\n                    \"values\": {\n                      \"SIGNAL_EXTERNAL_WORKFLOW_EXECUTION_FAILED_CAUSE_UNSPECIFIED\": 0,\n                      \"SIGNAL_EXTERNAL_WORKFLOW_EXECUTION_FAILED_CAUSE_EXTERNAL_WORKFLOW_EXECUTION_NOT_FOUND\": 1,\n                      \"SIGNAL_EXTERNAL_WORKFLOW_EXECUTION_FAILED_CAUSE_NAMESPACE_NOT_FOUND\": 2,\n                      \"SIGNAL_EXTERNAL_WORKFLOW_EXECUTION_FAILED_CAUSE_SIGNAL_COUNT_LIMIT_EXCEEDED\": 3\n                    }\n                  },\n                  \"ResourceExhaustedCause\": {\n                    \"values\": {\n                      \"RESOURCE_EXHAUSTED_CAUSE_UNSPECIFIED\": 0,\n                      \"RESOURCE_EXHAUSTED_CAUSE_RPS_LIMIT\": 1,\n                      \"RESOURCE_EXHAUSTED_CAUSE_CONCURRENT_LIMIT\": 2,\n                      \"RESOURCE_EXHAUSTED_CAUSE_SYSTEM_OVERLOADED\": 3,\n                      \"RESOURCE_EXHAUSTED_CAUSE_PERSISTENCE_LIMIT\": 4,\n                      \"RESOURCE_EXHAUSTED_CAUSE_BUSY_WORKFLOW\": 5,\n                      \"RESOURCE_EXHAUSTED_CAUSE_APS_LIMIT\": 6,\n                      \"RESOURCE_EXHAUSTED_CAUSE_PERSISTENCE_STORAGE_LIMIT\": 7,\n                      \"RESOURCE_EXHAUSTED_CAUSE_CIRCUIT_BREAKER_OPEN\": 8,\n                      \"RESOURCE_EXHAUSTED_CAUSE_OPS_LIMIT\": 9,\n                      \"RESOURCE_EXHAUSTED_CAUSE_WORKER_DEPLOYMENT_LIMITS\": 10\n                    }\n                  },\n                  \"ResourceExhaustedScope\": {\n                    \"values\": {\n                      \"RESOURCE_EXHAUSTED_SCOPE_UNSPECIFIED\": 0,\n                      \"RESOURCE_EXHAUSTED_SCOPE_NAMESPACE\": 1,\n                      \"RESOURCE_EXHAUSTED_SCOPE_SYSTEM\": 2\n                    }\n                  },\n                  \"QueryResultType\": {\n                    \"values\": {\n                      \"QUERY_RESULT_TYPE_UNSPECIFIED\": 0,\n                      \"QUERY_RESULT_TYPE_ANSWERED\": 1,\n                      \"QUERY_RESULT_TYPE_FAILED\": 2\n                    }\n                  },\n                  \"QueryRejectCondition\": {\n                    \"values\": {\n                      \"QUERY_REJECT_CONDITION_UNSPECIFIED\": 0,\n                      \"QUERY_REJECT_CONDITION_NONE\": 1,\n                      \"QUERY_REJECT_CONDITION_NOT_OPEN\": 2,\n                      \"QUERY_REJECT_CONDITION_NOT_COMPLETED_CLEANLY\": 3\n                    }\n                  },\n                  \"TaskQueueKind\": {\n                    \"values\": {\n                      \"TASK_QUEUE_KIND_UNSPECIFIED\": 0,\n                      \"TASK_QUEUE_KIND_NORMAL\": 1,\n                      \"TASK_QUEUE_KIND_STICKY\": 2,\n                      \"TASK_QUEUE_KIND_WORKER_COMMANDS\": 3\n                    }\n                  },\n                  \"TaskQueueType\": {\n                    \"values\": {\n                      \"TASK_QUEUE_TYPE_UNSPECIFIED\": 0,\n                      \"TASK_QUEUE_TYPE_WORKFLOW\": 1,\n                      \"TASK_QUEUE_TYPE_ACTIVITY\": 2,\n                      \"TASK_QUEUE_TYPE_NEXUS\": 3\n                    }\n                  },\n                  \"TaskReachability\": {\n                    \"values\": {\n                      \"TASK_REACHABILITY_UNSPECIFIED\": 0,\n                      \"TASK_REACHABILITY_NEW_WORKFLOWS\": 1,\n                      \"TASK_REACHABILITY_EXISTING_WORKFLOWS\": 2,\n                      \"TASK_REACHABILITY_OPEN_WORKFLOWS\": 3,\n                      \"TASK_REACHABILITY_CLOSED_WORKFLOWS\": 4\n                    }\n                  },\n                  \"BuildIdTaskReachability\": {\n                    \"values\": {\n                      \"BUILD_ID_TASK_REACHABILITY_UNSPECIFIED\": 0,\n                      \"BUILD_ID_TASK_REACHABILITY_REACHABLE\": 1,\n                      \"BUILD_ID_TASK_REACHABILITY_CLOSED_WORKFLOWS_ONLY\": 2,\n                      \"BUILD_ID_TASK_REACHABILITY_UNREACHABLE\": 3\n                    }\n                  },\n                  \"DescribeTaskQueueMode\": {\n                    \"values\": {\n                      \"DESCRIBE_TASK_QUEUE_MODE_UNSPECIFIED\": 0,\n                      \"DESCRIBE_TASK_QUEUE_MODE_ENHANCED\": 1\n                    }\n                  },\n                  \"RateLimitSource\": {\n                    \"values\": {\n                      \"RATE_LIMIT_SOURCE_UNSPECIFIED\": 0,\n                      \"RATE_LIMIT_SOURCE_API\": 1,\n                      \"RATE_LIMIT_SOURCE_WORKER\": 2,\n                      \"RATE_LIMIT_SOURCE_SYSTEM\": 3\n                    }\n                  },\n                  \"RoutingConfigUpdateState\": {\n                    \"values\": {\n                      \"ROUTING_CONFIG_UPDATE_STATE_UNSPECIFIED\": 0,\n                      \"ROUTING_CONFIG_UPDATE_STATE_IN_PROGRESS\": 1,\n                      \"ROUTING_CONFIG_UPDATE_STATE_COMPLETED\": 2\n                    }\n                  },\n                  \"DeploymentReachability\": {\n                    \"values\": {\n                      \"DEPLOYMENT_REACHABILITY_UNSPECIFIED\": 0,\n                      \"DEPLOYMENT_REACHABILITY_REACHABLE\": 1,\n                      \"DEPLOYMENT_REACHABILITY_CLOSED_WORKFLOWS_ONLY\": 2,\n                      \"DEPLOYMENT_REACHABILITY_UNREACHABLE\": 3\n                    }\n                  },\n                  \"VersionDrainageStatus\": {\n                    \"values\": {\n                      \"VERSION_DRAINAGE_STATUS_UNSPECIFIED\": 0,\n                      \"VERSION_DRAINAGE_STATUS_DRAINING\": 1,\n                      \"VERSION_DRAINAGE_STATUS_DRAINED\": 2\n                    }\n                  },\n                  \"WorkerVersioningMode\": {\n                    \"values\": {\n                      \"WORKER_VERSIONING_MODE_UNSPECIFIED\": 0,\n                      \"WORKER_VERSIONING_MODE_UNVERSIONED\": 1,\n                      \"WORKER_VERSIONING_MODE_VERSIONED\": 2\n                    }\n                  },\n                  \"WorkerDeploymentVersionStatus\": {\n                    \"values\": {\n                      \"WORKER_DEPLOYMENT_VERSION_STATUS_UNSPECIFIED\": 0,\n                      \"WORKER_DEPLOYMENT_VERSION_STATUS_INACTIVE\": 1,\n                      \"WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT\": 2,\n                      \"WORKER_DEPLOYMENT_VERSION_STATUS_RAMPING\": 3,\n                      \"WORKER_DEPLOYMENT_VERSION_STATUS_DRAINING\": 4,\n                      \"WORKER_DEPLOYMENT_VERSION_STATUS_DRAINED\": 5,\n                      \"WORKER_DEPLOYMENT_VERSION_STATUS_CREATED\": 6\n                    }\n                  },\n                  \"FastForwardPollingResult\": {\n                    \"values\": {\n                      \"FAST_FORWARD_POLLING_RESULT_UNSPECIFIED\": 0,\n                      \"FAST_FORWARD_POLLING_RESULT_POLL_TIMEOUT\": 1,\n                      \"FAST_FORWARD_POLLING_RESULT_FAST_FORWARD_COMPLETED\": 2,\n                      \"FAST_FORWARD_POLLING_RESULT_FAST_FORWARD_FAILED\": 3\n                    }\n                  },\n                  \"ActivityExecutionStatus\": {\n                    \"values\": {\n                      \"ACTIVITY_EXECUTION_STATUS_UNSPECIFIED\": 0,\n                      \"ACTIVITY_EXECUTION_STATUS_RUNNING\": 1,\n                      \"ACTIVITY_EXECUTION_STATUS_COMPLETED\": 2,\n                      \"ACTIVITY_EXECUTION_STATUS_FAILED\": 3,\n                      \"ACTIVITY_EXECUTION_STATUS_CANCELED\": 4,\n                      \"ACTIVITY_EXECUTION_STATUS_TERMINATED\": 5,\n                      \"ACTIVITY_EXECUTION_STATUS_TIMED_OUT\": 6,\n                      \"ACTIVITY_EXECUTION_STATUS_PAUSED\": 7\n                    }\n                  },\n                  \"ActivityIdReusePolicy\": {\n                    \"values\": {\n                      \"ACTIVITY_ID_REUSE_POLICY_UNSPECIFIED\": 0,\n                      \"ACTIVITY_ID_REUSE_POLICY_ALLOW_DUPLICATE\": 1,\n                      \"ACTIVITY_ID_REUSE_POLICY_ALLOW_DUPLICATE_FAILED_ONLY\": 2,\n                      \"ACTIVITY_ID_REUSE_POLICY_REJECT_DUPLICATE\": 3\n                    }\n                  },\n                  \"ActivityIdConflictPolicy\": {\n                    \"values\": {\n                      \"ACTIVITY_ID_CONFLICT_POLICY_UNSPECIFIED\": 0,\n                      \"ACTIVITY_ID_CONFLICT_POLICY_FAIL\": 1,\n                      \"ACTIVITY_ID_CONFLICT_POLICY_USE_EXISTING\": 2\n                    }\n                  },\n                  \"CommandType\": {\n                    \"values\": {\n                      \"COMMAND_TYPE_UNSPECIFIED\": 0,\n                      \"COMMAND_TYPE_SCHEDULE_ACTIVITY_TASK\": 1,\n                      \"COMMAND_TYPE_REQUEST_CANCEL_ACTIVITY_TASK\": 2,\n                      \"COMMAND_TYPE_START_TIMER\": 3,\n                      \"COMMAND_TYPE_COMPLETE_WORKFLOW_EXECUTION\": 4,\n                      \"COMMAND_TYPE_FAIL_WORKFLOW_EXECUTION\": 5,\n                      \"COMMAND_TYPE_CANCEL_TIMER\": 6,\n                      \"COMMAND_TYPE_CANCEL_WORKFLOW_EXECUTION\": 7,\n                      \"COMMAND_TYPE_REQUEST_CANCEL_EXTERNAL_WORKFLOW_EXECUTION\": 8,\n                      \"COMMAND_TYPE_RECORD_MARKER\": 9,\n                      \"COMMAND_TYPE_CONTINUE_AS_NEW_WORKFLOW_EXECUTION\": 10,\n                      \"COMMAND_TYPE_START_CHILD_WORKFLOW_EXECUTION\": 11,\n                      \"COMMAND_TYPE_SIGNAL_EXTERNAL_WORKFLOW_EXECUTION\": 12,\n                      \"COMMAND_TYPE_UPSERT_WORKFLOW_SEARCH_ATTRIBUTES\": 13,\n                      \"COMMAND_TYPE_PROTOCOL_MESSAGE\": 14,\n                      \"COMMAND_TYPE_MODIFY_WORKFLOW_PROPERTIES\": 16,\n                      \"COMMAND_TYPE_SCHEDULE_NEXUS_OPERATION\": 17,\n                      \"COMMAND_TYPE_REQUEST_CANCEL_NEXUS_OPERATION\": 18\n                    }\n                  },\n                  \"ScheduleOverlapPolicy\": {\n                    \"values\": {\n                      \"SCHEDULE_OVERLAP_POLICY_UNSPECIFIED\": 0,\n                      \"SCHEDULE_OVERLAP_POLICY_SKIP\": 1,\n                      \"SCHEDULE_OVERLAP_POLICY_BUFFER_ONE\": 2,\n                      \"SCHEDULE_OVERLAP_POLICY_BUFFER_ALL\": 3,\n                      \"SCHEDULE_OVERLAP_POLICY_CANCEL_OTHER\": 4,\n                      \"SCHEDULE_OVERLAP_POLICY_TERMINATE_OTHER\": 5,\n                      \"SCHEDULE_OVERLAP_POLICY_ALLOW_ALL\": 6\n                    }\n                  }\n                }\n              }\n            }\n          },\n          \"failure\": {\n            \"nested\": {\n              \"v1\": {\n                \"options\": {\n                  \"go_package\": \"go.temporal.io/api/failure/v1;failure\",\n                  \"java_package\": \"io.temporal.api.failure.v1\",\n                  \"java_multiple_files\": true,\n                  \"java_outer_classname\": \"MessageProto\",\n                  \"ruby_package\": \"Temporalio::Api::Failure::V1\",\n                  \"csharp_namespace\": \"Temporalio.Api.Failure.V1\"\n                },\n                \"nested\": {\n                  \"ApplicationFailureInfo\": {\n                    \"fields\": {\n                      \"type\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"nonRetryable\": {\n                        \"type\": \"bool\",\n                        \"id\": 2,\n                        \"protoName\": \"non_retryable\"\n                      },\n                      \"details\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 3\n                      },\n                      \"nextRetryDelay\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 4,\n                        \"protoName\": \"next_retry_delay\"\n                      },\n                      \"category\": {\n                        \"type\": \"temporal.api.enums.v1.ApplicationErrorCategory\",\n                        \"id\": 5\n                      }\n                    }\n                  },\n                  \"TimeoutFailureInfo\": {\n                    \"fields\": {\n                      \"timeoutType\": {\n                        \"type\": \"temporal.api.enums.v1.TimeoutType\",\n                        \"id\": 1,\n                        \"protoName\": \"timeout_type\"\n                      },\n                      \"lastHeartbeatDetails\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 2,\n                        \"protoName\": \"last_heartbeat_details\"\n                      }\n                    }\n                  },\n                  \"CanceledFailureInfo\": {\n                    \"fields\": {\n                      \"details\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 1\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      }\n                    }\n                  },\n                  \"TerminatedFailureInfo\": {\n                    \"fields\": {\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      }\n                    }\n                  },\n                  \"ServerFailureInfo\": {\n                    \"fields\": {\n                      \"nonRetryable\": {\n                        \"type\": \"bool\",\n                        \"id\": 1,\n                        \"protoName\": \"non_retryable\"\n                      }\n                    }\n                  },\n                  \"ResetWorkflowFailureInfo\": {\n                    \"fields\": {\n                      \"lastHeartbeatDetails\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 1,\n                        \"protoName\": \"last_heartbeat_details\"\n                      }\n                    }\n                  },\n                  \"ActivityFailureInfo\": {\n                    \"fields\": {\n                      \"scheduledEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 1,\n                        \"protoName\": \"scheduled_event_id\"\n                      },\n                      \"startedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 2,\n                        \"protoName\": \"started_event_id\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"activityType\": {\n                        \"type\": \"temporal.api.common.v1.ActivityType\",\n                        \"id\": 4,\n                        \"protoName\": \"activity_type\"\n                      },\n                      \"activityId\": {\n                        \"type\": \"string\",\n                        \"id\": 5,\n                        \"protoName\": \"activity_id\"\n                      },\n                      \"retryState\": {\n                        \"type\": \"temporal.api.enums.v1.RetryState\",\n                        \"id\": 6,\n                        \"protoName\": \"retry_state\"\n                      }\n                    }\n                  },\n                  \"ChildWorkflowExecutionFailureInfo\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"workflowExecution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_execution\"\n                      },\n                      \"workflowType\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowType\",\n                        \"id\": 3,\n                        \"protoName\": \"workflow_type\"\n                      },\n                      \"initiatedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 4,\n                        \"protoName\": \"initiated_event_id\"\n                      },\n                      \"startedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 5,\n                        \"protoName\": \"started_event_id\"\n                      },\n                      \"retryState\": {\n                        \"type\": \"temporal.api.enums.v1.RetryState\",\n                        \"id\": 6,\n                        \"protoName\": \"retry_state\"\n                      }\n                    }\n                  },\n                  \"NexusOperationFailureInfo\": {\n                    \"fields\": {\n                      \"scheduledEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 1,\n                        \"protoName\": \"scheduled_event_id\"\n                      },\n                      \"endpoint\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"service\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"operation\": {\n                        \"type\": \"string\",\n                        \"id\": 4\n                      },\n                      \"operationId\": {\n                        \"type\": \"string\",\n                        \"id\": 5,\n                        \"protoName\": \"operation_id\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"operationToken\": {\n                        \"type\": \"string\",\n                        \"id\": 6,\n                        \"protoName\": \"operation_token\"\n                      }\n                    }\n                  },\n                  \"NexusHandlerFailureInfo\": {\n                    \"fields\": {\n                      \"type\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"retryBehavior\": {\n                        \"type\": \"temporal.api.enums.v1.NexusHandlerErrorRetryBehavior\",\n                        \"id\": 2,\n                        \"protoName\": \"retry_behavior\"\n                      }\n                    }\n                  },\n                  \"Failure\": {\n                    \"oneofs\": {\n                      \"failureInfo\": {\n                        \"oneof\": [\n                          \"applicationFailureInfo\",\n                          \"timeoutFailureInfo\",\n                          \"canceledFailureInfo\",\n                          \"terminatedFailureInfo\",\n                          \"serverFailureInfo\",\n                          \"resetWorkflowFailureInfo\",\n                          \"activityFailureInfo\",\n                          \"childWorkflowExecutionFailureInfo\",\n                          \"nexusOperationExecutionFailureInfo\",\n                          \"nexusHandlerFailureInfo\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"message\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"source\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"stackTrace\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"stack_trace\"\n                      },\n                      \"encodedAttributes\": {\n                        \"type\": \"temporal.api.common.v1.Payload\",\n                        \"id\": 20,\n                        \"protoName\": \"encoded_attributes\"\n                      },\n                      \"cause\": {\n                        \"type\": \"Failure\",\n                        \"id\": 4\n                      },\n                      \"applicationFailureInfo\": {\n                        \"type\": \"ApplicationFailureInfo\",\n                        \"id\": 5,\n                        \"protoName\": \"application_failure_info\"\n                      },\n                      \"timeoutFailureInfo\": {\n                        \"type\": \"TimeoutFailureInfo\",\n                        \"id\": 6,\n                        \"protoName\": \"timeout_failure_info\"\n                      },\n                      \"canceledFailureInfo\": {\n                        \"type\": \"CanceledFailureInfo\",\n                        \"id\": 7,\n                        \"protoName\": \"canceled_failure_info\"\n                      },\n                      \"terminatedFailureInfo\": {\n                        \"type\": \"TerminatedFailureInfo\",\n                        \"id\": 8,\n                        \"protoName\": \"terminated_failure_info\"\n                      },\n                      \"serverFailureInfo\": {\n                        \"type\": \"ServerFailureInfo\",\n                        \"id\": 9,\n                        \"protoName\": \"server_failure_info\"\n                      },\n                      \"resetWorkflowFailureInfo\": {\n                        \"type\": \"ResetWorkflowFailureInfo\",\n                        \"id\": 10,\n                        \"protoName\": \"reset_workflow_failure_info\"\n                      },\n                      \"activityFailureInfo\": {\n                        \"type\": \"ActivityFailureInfo\",\n                        \"id\": 11,\n                        \"protoName\": \"activity_failure_info\"\n                      },\n                      \"childWorkflowExecutionFailureInfo\": {\n                        \"type\": \"ChildWorkflowExecutionFailureInfo\",\n                        \"id\": 12,\n                        \"protoName\": \"child_workflow_execution_failure_info\"\n                      },\n                      \"nexusOperationExecutionFailureInfo\": {\n                        \"type\": \"NexusOperationFailureInfo\",\n                        \"id\": 13,\n                        \"protoName\": \"nexus_operation_execution_failure_info\"\n                      },\n                      \"nexusHandlerFailureInfo\": {\n                        \"type\": \"NexusHandlerFailureInfo\",\n                        \"id\": 14,\n                        \"protoName\": \"nexus_handler_failure_info\"\n                      }\n                    }\n                  },\n                  \"MultiOperationExecutionAborted\": {\n                    \"fields\": {}\n                  }\n                }\n              }\n            }\n          },\n          \"update\": {\n            \"nested\": {\n              \"v1\": {\n                \"options\": {\n                  \"go_package\": \"go.temporal.io/api/update/v1;update\",\n                  \"java_package\": \"io.temporal.api.update.v1\",\n                  \"java_multiple_files\": true,\n                  \"java_outer_classname\": \"MessageProto\",\n                  \"ruby_package\": \"Temporalio::Api::Update::V1\",\n                  \"csharp_namespace\": \"Temporalio.Api.Update.V1\"\n                },\n                \"nested\": {\n                  \"WaitPolicy\": {\n                    \"fields\": {\n                      \"lifecycleStage\": {\n                        \"type\": \"temporal.api.enums.v1.UpdateWorkflowExecutionLifecycleStage\",\n                        \"id\": 1,\n                        \"protoName\": \"lifecycle_stage\"\n                      }\n                    }\n                  },\n                  \"UpdateRef\": {\n                    \"fields\": {\n                      \"workflowExecution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 1,\n                        \"protoName\": \"workflow_execution\"\n                      },\n                      \"updateId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"update_id\"\n                      }\n                    }\n                  },\n                  \"Outcome\": {\n                    \"oneofs\": {\n                      \"value\": {\n                        \"oneof\": [\n                          \"success\",\n                          \"failure\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"success\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 1\n                      },\n                      \"failure\": {\n                        \"type\": \"temporal.api.failure.v1.Failure\",\n                        \"id\": 2\n                      }\n                    }\n                  },\n                  \"Meta\": {\n                    \"fields\": {\n                      \"updateId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"update_id\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      }\n                    }\n                  },\n                  \"Input\": {\n                    \"fields\": {\n                      \"header\": {\n                        \"type\": \"temporal.api.common.v1.Header\",\n                        \"id\": 1\n                      },\n                      \"name\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"args\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 3\n                      }\n                    }\n                  },\n                  \"Request\": {\n                    \"fields\": {\n                      \"meta\": {\n                        \"type\": \"Meta\",\n                        \"id\": 1\n                      },\n                      \"input\": {\n                        \"type\": \"Input\",\n                        \"id\": 2\n                      },\n                      \"requestId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"request_id\"\n                      },\n                      \"completionCallbacks\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.common.v1.Callback\",\n                        \"id\": 4,\n                        \"protoName\": \"completion_callbacks\"\n                      },\n                      \"links\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.common.v1.Link\",\n                        \"id\": 5\n                      }\n                    }\n                  },\n                  \"Rejection\": {\n                    \"fields\": {\n                      \"rejectedRequestMessageId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"rejected_request_message_id\"\n                      },\n                      \"rejectedRequestSequencingEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 2,\n                        \"protoName\": \"rejected_request_sequencing_event_id\"\n                      },\n                      \"rejectedRequest\": {\n                        \"type\": \"Request\",\n                        \"id\": 3,\n                        \"protoName\": \"rejected_request\"\n                      },\n                      \"failure\": {\n                        \"type\": \"temporal.api.failure.v1.Failure\",\n                        \"id\": 4\n                      }\n                    }\n                  },\n                  \"Acceptance\": {\n                    \"fields\": {\n                      \"acceptedRequestMessageId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"accepted_request_message_id\"\n                      },\n                      \"acceptedRequestSequencingEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 2,\n                        \"protoName\": \"accepted_request_sequencing_event_id\"\n                      },\n                      \"acceptedRequest\": {\n                        \"type\": \"Request\",\n                        \"id\": 3,\n                        \"protoName\": \"accepted_request\"\n                      }\n                    }\n                  },\n                  \"Response\": {\n                    \"fields\": {\n                      \"meta\": {\n                        \"type\": \"Meta\",\n                        \"id\": 1\n                      },\n                      \"outcome\": {\n                        \"type\": \"Outcome\",\n                        \"id\": 2\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          \"nexus\": {\n            \"nested\": {\n              \"v1\": {\n                \"options\": {\n                  \"go_package\": \"go.temporal.io/api/nexus/v1;nexus\",\n                  \"java_package\": \"io.temporal.api.nexus.v1\",\n                  \"java_multiple_files\": true,\n                  \"java_outer_classname\": \"MessageProto\",\n                  \"ruby_package\": \"Temporalio::Api::Nexus::V1\",\n                  \"csharp_namespace\": \"Temporalio.Api.Nexus.V1\"\n                },\n                \"nested\": {\n                  \"Failure\": {\n                    \"fields\": {\n                      \"message\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"stackTrace\": {\n                        \"type\": \"string\",\n                        \"id\": 4,\n                        \"protoName\": \"stack_trace\"\n                      },\n                      \"metadata\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"details\": {\n                        \"type\": \"bytes\",\n                        \"id\": 3\n                      },\n                      \"cause\": {\n                        \"type\": \"Failure\",\n                        \"id\": 5\n                      }\n                    }\n                  },\n                  \"HandlerError\": {\n                    \"fields\": {\n                      \"errorType\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"error_type\"\n                      },\n                      \"failure\": {\n                        \"type\": \"Failure\",\n                        \"id\": 2\n                      },\n                      \"retryBehavior\": {\n                        \"type\": \"temporal.api.enums.v1.NexusHandlerErrorRetryBehavior\",\n                        \"id\": 3,\n                        \"protoName\": \"retry_behavior\"\n                      }\n                    }\n                  },\n                  \"UnsuccessfulOperationError\": {\n                    \"fields\": {\n                      \"operationState\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"operation_state\"\n                      },\n                      \"failure\": {\n                        \"type\": \"Failure\",\n                        \"id\": 2\n                      }\n                    }\n                  },\n                  \"Link\": {\n                    \"fields\": {\n                      \"url\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"type\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      }\n                    }\n                  },\n                  \"StartOperationRequest\": {\n                    \"fields\": {\n                      \"service\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"operation\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"requestId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"request_id\"\n                      },\n                      \"callback\": {\n                        \"type\": \"string\",\n                        \"id\": 4\n                      },\n                      \"payload\": {\n                        \"type\": \"temporal.api.common.v1.Payload\",\n                        \"id\": 5\n                      },\n                      \"callbackHeader\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"string\",\n                        \"id\": 6,\n                        \"protoName\": \"callback_header\"\n                      },\n                      \"links\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"Link\",\n                        \"id\": 7\n                      }\n                    }\n                  },\n                  \"CancelOperationRequest\": {\n                    \"fields\": {\n                      \"service\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"operation\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"operationId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"operation_id\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"operationToken\": {\n                        \"type\": \"string\",\n                        \"id\": 4,\n                        \"protoName\": \"operation_token\"\n                      }\n                    }\n                  },\n                  \"Request\": {\n                    \"oneofs\": {\n                      \"variant\": {\n                        \"oneof\": [\n                          \"startOperation\",\n                          \"cancelOperation\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"header\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"scheduledTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 2,\n                        \"protoName\": \"scheduled_time\"\n                      },\n                      \"capabilities\": {\n                        \"type\": \"Capabilities\",\n                        \"id\": 100\n                      },\n                      \"startOperation\": {\n                        \"type\": \"StartOperationRequest\",\n                        \"id\": 3,\n                        \"protoName\": \"start_operation\"\n                      },\n                      \"cancelOperation\": {\n                        \"type\": \"CancelOperationRequest\",\n                        \"id\": 4,\n                        \"protoName\": \"cancel_operation\"\n                      },\n                      \"endpoint\": {\n                        \"type\": \"string\",\n                        \"id\": 10\n                      }\n                    },\n                    \"nested\": {\n                      \"Capabilities\": {\n                        \"fields\": {\n                          \"temporalFailureResponses\": {\n                            \"type\": \"bool\",\n                            \"id\": 1,\n                            \"protoName\": \"temporal_failure_responses\"\n                          }\n                        }\n                      }\n                    }\n                  },\n                  \"StartOperationResponse\": {\n                    \"oneofs\": {\n                      \"variant\": {\n                        \"oneof\": [\n                          \"syncSuccess\",\n                          \"asyncSuccess\",\n                          \"operationError\",\n                          \"failure\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"syncSuccess\": {\n                        \"type\": \"Sync\",\n                        \"id\": 1,\n                        \"protoName\": \"sync_success\"\n                      },\n                      \"asyncSuccess\": {\n                        \"type\": \"Async\",\n                        \"id\": 2,\n                        \"protoName\": \"async_success\"\n                      },\n                      \"operationError\": {\n                        \"type\": \"UnsuccessfulOperationError\",\n                        \"id\": 3,\n                        \"protoName\": \"operation_error\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"failure\": {\n                        \"type\": \"temporal.api.failure.v1.Failure\",\n                        \"id\": 4\n                      }\n                    },\n                    \"nested\": {\n                      \"Sync\": {\n                        \"fields\": {\n                          \"payload\": {\n                            \"type\": \"temporal.api.common.v1.Payload\",\n                            \"id\": 1\n                          },\n                          \"links\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"Link\",\n                            \"id\": 2\n                          }\n                        }\n                      },\n                      \"Async\": {\n                        \"fields\": {\n                          \"operationId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"operation_id\",\n                            \"options\": {\n                              \"deprecated\": true\n                            }\n                          },\n                          \"links\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"Link\",\n                            \"id\": 2\n                          },\n                          \"operationToken\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"operation_token\"\n                          }\n                        }\n                      }\n                    }\n                  },\n                  \"CancelOperationResponse\": {\n                    \"fields\": {}\n                  },\n                  \"Response\": {\n                    \"oneofs\": {\n                      \"variant\": {\n                        \"oneof\": [\n                          \"startOperation\",\n                          \"cancelOperation\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"startOperation\": {\n                        \"type\": \"StartOperationResponse\",\n                        \"id\": 1,\n                        \"protoName\": \"start_operation\"\n                      },\n                      \"cancelOperation\": {\n                        \"type\": \"CancelOperationResponse\",\n                        \"id\": 2,\n                        \"protoName\": \"cancel_operation\"\n                      }\n                    }\n                  },\n                  \"Endpoint\": {\n                    \"fields\": {\n                      \"version\": {\n                        \"type\": \"int64\",\n                        \"id\": 1\n                      },\n                      \"id\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"spec\": {\n                        \"type\": \"EndpointSpec\",\n                        \"id\": 3\n                      },\n                      \"createdTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 4,\n                        \"protoName\": \"created_time\"\n                      },\n                      \"lastModifiedTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 5,\n                        \"protoName\": \"last_modified_time\"\n                      },\n                      \"urlPrefix\": {\n                        \"type\": \"string\",\n                        \"id\": 6,\n                        \"protoName\": \"url_prefix\"\n                      }\n                    }\n                  },\n                  \"EndpointSpec\": {\n                    \"fields\": {\n                      \"name\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"description\": {\n                        \"type\": \"temporal.api.common.v1.Payload\",\n                        \"id\": 2\n                      },\n                      \"target\": {\n                        \"type\": \"EndpointTarget\",\n                        \"id\": 3\n                      }\n                    }\n                  },\n                  \"EndpointTarget\": {\n                    \"oneofs\": {\n                      \"variant\": {\n                        \"oneof\": [\n                          \"worker\",\n                          \"external\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"worker\": {\n                        \"type\": \"Worker\",\n                        \"id\": 1\n                      },\n                      \"external\": {\n                        \"type\": \"External\",\n                        \"id\": 2\n                      }\n                    },\n                    \"nested\": {\n                      \"Worker\": {\n                        \"fields\": {\n                          \"namespace\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"taskQueue\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"task_queue\"\n                          }\n                        }\n                      },\n                      \"External\": {\n                        \"fields\": {\n                          \"url\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          }\n                        }\n                      }\n                    }\n                  },\n                  \"NexusOperationExecutionCancellationInfo\": {\n                    \"fields\": {\n                      \"requestedTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 1,\n                        \"protoName\": \"requested_time\"\n                      },\n                      \"state\": {\n                        \"type\": \"temporal.api.enums.v1.NexusOperationCancellationState\",\n                        \"id\": 2\n                      },\n                      \"attempt\": {\n                        \"type\": \"int32\",\n                        \"id\": 3\n                      },\n                      \"lastAttemptCompleteTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 4,\n                        \"protoName\": \"last_attempt_complete_time\"\n                      },\n                      \"lastAttemptFailure\": {\n                        \"type\": \"temporal.api.failure.v1.Failure\",\n                        \"id\": 5,\n                        \"protoName\": \"last_attempt_failure\"\n                      },\n                      \"nextAttemptScheduleTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 6,\n                        \"protoName\": \"next_attempt_schedule_time\"\n                      },\n                      \"blockedReason\": {\n                        \"type\": \"string\",\n                        \"id\": 7,\n                        \"protoName\": \"blocked_reason\"\n                      },\n                      \"reason\": {\n                        \"type\": \"string\",\n                        \"id\": 8\n                      }\n                    }\n                  },\n                  \"NexusOperationExecutionInfo\": {\n                    \"fields\": {\n                      \"operationId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"operation_id\"\n                      },\n                      \"runId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"run_id\"\n                      },\n                      \"endpoint\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"service\": {\n                        \"type\": \"string\",\n                        \"id\": 4\n                      },\n                      \"operation\": {\n                        \"type\": \"string\",\n                        \"id\": 5\n                      },\n                      \"status\": {\n                        \"type\": \"temporal.api.enums.v1.NexusOperationExecutionStatus\",\n                        \"id\": 6\n                      },\n                      \"state\": {\n                        \"type\": \"temporal.api.enums.v1.PendingNexusOperationState\",\n                        \"id\": 7\n                      },\n                      \"scheduleToCloseTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 8,\n                        \"protoName\": \"schedule_to_close_timeout\"\n                      },\n                      \"scheduleToStartTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 9,\n                        \"protoName\": \"schedule_to_start_timeout\"\n                      },\n                      \"startToCloseTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 10,\n                        \"protoName\": \"start_to_close_timeout\"\n                      },\n                      \"attempt\": {\n                        \"type\": \"int32\",\n                        \"id\": 11\n                      },\n                      \"scheduleTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 12,\n                        \"protoName\": \"schedule_time\"\n                      },\n                      \"expirationTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 13,\n                        \"protoName\": \"expiration_time\"\n                      },\n                      \"closeTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 14,\n                        \"protoName\": \"close_time\"\n                      },\n                      \"lastAttemptCompleteTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 15,\n                        \"protoName\": \"last_attempt_complete_time\"\n                      },\n                      \"lastAttemptFailure\": {\n                        \"type\": \"temporal.api.failure.v1.Failure\",\n                        \"id\": 16,\n                        \"protoName\": \"last_attempt_failure\"\n                      },\n                      \"nextAttemptScheduleTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 17,\n                        \"protoName\": \"next_attempt_schedule_time\"\n                      },\n                      \"executionDuration\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 18,\n                        \"protoName\": \"execution_duration\"\n                      },\n                      \"cancellationInfo\": {\n                        \"type\": \"NexusOperationExecutionCancellationInfo\",\n                        \"id\": 19,\n                        \"protoName\": \"cancellation_info\"\n                      },\n                      \"blockedReason\": {\n                        \"type\": \"string\",\n                        \"id\": 20,\n                        \"protoName\": \"blocked_reason\"\n                      },\n                      \"requestId\": {\n                        \"type\": \"string\",\n                        \"id\": 21,\n                        \"protoName\": \"request_id\"\n                      },\n                      \"operationToken\": {\n                        \"type\": \"string\",\n                        \"id\": 22,\n                        \"protoName\": \"operation_token\"\n                      },\n                      \"stateTransitionCount\": {\n                        \"type\": \"int64\",\n                        \"id\": 23,\n                        \"protoName\": \"state_transition_count\"\n                      },\n                      \"searchAttributes\": {\n                        \"type\": \"temporal.api.common.v1.SearchAttributes\",\n                        \"id\": 24,\n                        \"protoName\": \"search_attributes\"\n                      },\n                      \"nexusHeader\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"string\",\n                        \"id\": 25,\n                        \"protoName\": \"nexus_header\"\n                      },\n                      \"userMetadata\": {\n                        \"type\": \"temporal.api.sdk.v1.UserMetadata\",\n                        \"id\": 26,\n                        \"protoName\": \"user_metadata\"\n                      },\n                      \"links\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.common.v1.Link\",\n                        \"id\": 27\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 28\n                      },\n                      \"stateSizeBytes\": {\n                        \"type\": \"int64\",\n                        \"id\": 29,\n                        \"protoName\": \"state_size_bytes\"\n                      }\n                    }\n                  },\n                  \"NexusOperationExecutionListInfo\": {\n                    \"fields\": {\n                      \"operationId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"operation_id\"\n                      },\n                      \"runId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"run_id\"\n                      },\n                      \"endpoint\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"service\": {\n                        \"type\": \"string\",\n                        \"id\": 4\n                      },\n                      \"operation\": {\n                        \"type\": \"string\",\n                        \"id\": 5\n                      },\n                      \"scheduleTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 6,\n                        \"protoName\": \"schedule_time\"\n                      },\n                      \"closeTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 7,\n                        \"protoName\": \"close_time\"\n                      },\n                      \"status\": {\n                        \"type\": \"temporal.api.enums.v1.NexusOperationExecutionStatus\",\n                        \"id\": 8\n                      },\n                      \"searchAttributes\": {\n                        \"type\": \"temporal.api.common.v1.SearchAttributes\",\n                        \"id\": 9,\n                        \"protoName\": \"search_attributes\"\n                      },\n                      \"stateTransitionCount\": {\n                        \"type\": \"int64\",\n                        \"id\": 10,\n                        \"protoName\": \"state_transition_count\"\n                      },\n                      \"executionDuration\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 11,\n                        \"protoName\": \"execution_duration\"\n                      },\n                      \"stateSizeBytes\": {\n                        \"type\": \"int64\",\n                        \"id\": 12,\n                        \"protoName\": \"state_size_bytes\"\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          \"sdk\": {\n            \"nested\": {\n              \"v1\": {\n                \"options\": {\n                  \"go_package\": \"go.temporal.io/api/sdk/v1;sdk\",\n                  \"java_package\": \"io.temporal.api.sdk.v1\",\n                  \"java_multiple_files\": true,\n                  \"java_outer_classname\": \"ExternalStorageProto\",\n                  \"ruby_package\": \"Temporalio::Api::Sdk::V1\",\n                  \"csharp_namespace\": \"Temporalio.Api.Sdk.V1\"\n                },\n                \"nested\": {\n                  \"UserMetadata\": {\n                    \"fields\": {\n                      \"summary\": {\n                        \"type\": \"temporal.api.common.v1.Payload\",\n                        \"id\": 1\n                      },\n                      \"details\": {\n                        \"type\": \"temporal.api.common.v1.Payload\",\n                        \"id\": 2\n                      }\n                    }\n                  },\n                  \"WorkflowTaskCompletedMetadata\": {\n                    \"fields\": {\n                      \"coreUsedFlags\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"uint32\",\n                        \"id\": 1,\n                        \"protoName\": \"core_used_flags\"\n                      },\n                      \"langUsedFlags\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"uint32\",\n                        \"id\": 2,\n                        \"protoName\": \"lang_used_flags\"\n                      },\n                      \"sdkName\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"sdk_name\"\n                      },\n                      \"sdkVersion\": {\n                        \"type\": \"string\",\n                        \"id\": 4,\n                        \"protoName\": \"sdk_version\"\n                      }\n                    }\n                  },\n                  \"EventGroupMarker\": {\n                    \"oneofs\": {\n                      \"variant\": {\n                        \"oneof\": [\n                          \"label\",\n                          \"inboundEvent\",\n                          \"inboundUpdate\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"label\": {\n                        \"type\": \"Label\",\n                        \"id\": 1\n                      },\n                      \"inboundEvent\": {\n                        \"type\": \"InboundEvent\",\n                        \"id\": 2,\n                        \"protoName\": \"inbound_event\"\n                      },\n                      \"inboundUpdate\": {\n                        \"type\": \"InboundUpdate\",\n                        \"id\": 3,\n                        \"protoName\": \"inbound_update\"\n                      }\n                    },\n                    \"nested\": {\n                      \"Label\": {\n                        \"fields\": {\n                          \"id\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"label\": {\n                            \"type\": \"temporal.api.common.v1.Payload\",\n                            \"id\": 2\n                          }\n                        }\n                      },\n                      \"InboundEvent\": {\n                        \"fields\": {\n                          \"inboundEventId\": {\n                            \"type\": \"int64\",\n                            \"id\": 1,\n                            \"protoName\": \"inbound_event_id\"\n                          }\n                        }\n                      },\n                      \"InboundUpdate\": {\n                        \"fields\": {\n                          \"inboundUpdateId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"inbound_update_id\"\n                          }\n                        }\n                      }\n                    }\n                  },\n                  \"WorkerConfig\": {\n                    \"oneofs\": {\n                      \"pollerBehavior\": {\n                        \"oneof\": [\n                          \"simplePollerBehavior\",\n                          \"autoscalingPollerBehavior\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"workflowCacheSize\": {\n                        \"type\": \"int32\",\n                        \"id\": 1,\n                        \"protoName\": \"workflow_cache_size\"\n                      },\n                      \"simplePollerBehavior\": {\n                        \"type\": \"SimplePollerBehavior\",\n                        \"id\": 2,\n                        \"protoName\": \"simple_poller_behavior\"\n                      },\n                      \"autoscalingPollerBehavior\": {\n                        \"type\": \"AutoscalingPollerBehavior\",\n                        \"id\": 3,\n                        \"protoName\": \"autoscaling_poller_behavior\"\n                      }\n                    },\n                    \"nested\": {\n                      \"SimplePollerBehavior\": {\n                        \"fields\": {\n                          \"maxPollers\": {\n                            \"type\": \"int32\",\n                            \"id\": 1,\n                            \"protoName\": \"max_pollers\"\n                          }\n                        }\n                      },\n                      \"AutoscalingPollerBehavior\": {\n                        \"fields\": {\n                          \"minPollers\": {\n                            \"type\": \"int32\",\n                            \"id\": 1,\n                            \"protoName\": \"min_pollers\"\n                          },\n                          \"maxPollers\": {\n                            \"type\": \"int32\",\n                            \"id\": 2,\n                            \"protoName\": \"max_pollers\"\n                          },\n                          \"initialPollers\": {\n                            \"type\": \"int32\",\n                            \"id\": 3,\n                            \"protoName\": \"initial_pollers\"\n                          }\n                        }\n                      }\n                    }\n                  },\n                  \"WorkflowMetadata\": {\n                    \"fields\": {\n                      \"definition\": {\n                        \"type\": \"WorkflowDefinition\",\n                        \"id\": 1\n                      },\n                      \"currentDetails\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"current_details\"\n                      }\n                    }\n                  },\n                  \"WorkflowDefinition\": {\n                    \"fields\": {\n                      \"type\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"queryDefinitions\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"WorkflowInteractionDefinition\",\n                        \"id\": 2,\n                        \"protoName\": \"query_definitions\"\n                      },\n                      \"signalDefinitions\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"WorkflowInteractionDefinition\",\n                        \"id\": 3,\n                        \"protoName\": \"signal_definitions\"\n                      },\n                      \"updateDefinitions\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"WorkflowInteractionDefinition\",\n                        \"id\": 4,\n                        \"protoName\": \"update_definitions\"\n                      }\n                    }\n                  },\n                  \"WorkflowInteractionDefinition\": {\n                    \"fields\": {\n                      \"name\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"description\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      }\n                    }\n                  },\n                  \"ExternalStorageReference\": {\n                    \"fields\": {\n                      \"driverName\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"driver_name\"\n                      },\n                      \"claimData\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"claim_data\"\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          \"workflowservice\": {\n            \"nested\": {\n              \"v1\": {\n                \"options\": {\n                  \"go_package\": \"go.temporal.io/api/workflowservice/v1;workflowservice\",\n                  \"java_package\": \"io.temporal.api.workflowservice.v1\",\n                  \"java_multiple_files\": true,\n                  \"java_outer_classname\": \"ServiceProto\",\n                  \"ruby_package\": \"Temporalio::Api::WorkflowService::V1\",\n                  \"csharp_namespace\": \"Temporalio.Api.WorkflowService.V1\"\n                },\n                \"nested\": {\n                  \"RegisterNamespaceRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"description\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"ownerEmail\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"owner_email\"\n                      },\n                      \"workflowExecutionRetentionPeriod\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 4,\n                        \"protoName\": \"workflow_execution_retention_period\"\n                      },\n                      \"clusters\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.replication.v1.ClusterReplicationConfig\",\n                        \"id\": 5\n                      },\n                      \"activeClusterName\": {\n                        \"type\": \"string\",\n                        \"id\": 6,\n                        \"protoName\": \"active_cluster_name\"\n                      },\n                      \"data\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"string\",\n                        \"id\": 7\n                      },\n                      \"securityToken\": {\n                        \"type\": \"string\",\n                        \"id\": 8,\n                        \"protoName\": \"security_token\"\n                      },\n                      \"isGlobalNamespace\": {\n                        \"type\": \"bool\",\n                        \"id\": 9,\n                        \"protoName\": \"is_global_namespace\"\n                      },\n                      \"historyArchivalState\": {\n                        \"type\": \"temporal.api.enums.v1.ArchivalState\",\n                        \"id\": 10,\n                        \"protoName\": \"history_archival_state\"\n                      },\n                      \"historyArchivalUri\": {\n                        \"type\": \"string\",\n                        \"id\": 11,\n                        \"protoName\": \"history_archival_uri\"\n                      },\n                      \"visibilityArchivalState\": {\n                        \"type\": \"temporal.api.enums.v1.ArchivalState\",\n                        \"id\": 12,\n                        \"protoName\": \"visibility_archival_state\"\n                      },\n                      \"visibilityArchivalUri\": {\n                        \"type\": \"string\",\n                        \"id\": 13,\n                        \"protoName\": \"visibility_archival_uri\"\n                      }\n                    }\n                  },\n                  \"RegisterNamespaceResponse\": {\n                    \"fields\": {}\n                  },\n                  \"ListNamespacesRequest\": {\n                    \"fields\": {\n                      \"pageSize\": {\n                        \"type\": \"int32\",\n                        \"id\": 1,\n                        \"protoName\": \"page_size\"\n                      },\n                      \"nextPageToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 2,\n                        \"protoName\": \"next_page_token\"\n                      },\n                      \"namespaceFilter\": {\n                        \"type\": \"temporal.api.namespace.v1.NamespaceFilter\",\n                        \"id\": 3,\n                        \"protoName\": \"namespace_filter\"\n                      }\n                    }\n                  },\n                  \"ListNamespacesResponse\": {\n                    \"fields\": {\n                      \"namespaces\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"DescribeNamespaceResponse\",\n                        \"id\": 1\n                      },\n                      \"nextPageToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 2,\n                        \"protoName\": \"next_page_token\"\n                      }\n                    }\n                  },\n                  \"DescribeNamespaceRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"id\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"weakConsistency\": {\n                        \"type\": \"bool\",\n                        \"id\": 3,\n                        \"protoName\": \"weak_consistency\"\n                      }\n                    }\n                  },\n                  \"DescribeNamespaceResponse\": {\n                    \"fields\": {\n                      \"namespaceInfo\": {\n                        \"type\": \"temporal.api.namespace.v1.NamespaceInfo\",\n                        \"id\": 1,\n                        \"protoName\": \"namespace_info\"\n                      },\n                      \"config\": {\n                        \"type\": \"temporal.api.namespace.v1.NamespaceConfig\",\n                        \"id\": 2\n                      },\n                      \"replicationConfig\": {\n                        \"type\": \"temporal.api.replication.v1.NamespaceReplicationConfig\",\n                        \"id\": 3,\n                        \"protoName\": \"replication_config\"\n                      },\n                      \"failoverVersion\": {\n                        \"type\": \"int64\",\n                        \"id\": 4,\n                        \"protoName\": \"failover_version\"\n                      },\n                      \"isGlobalNamespace\": {\n                        \"type\": \"bool\",\n                        \"id\": 5,\n                        \"protoName\": \"is_global_namespace\"\n                      },\n                      \"failoverHistory\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.replication.v1.FailoverStatus\",\n                        \"id\": 6,\n                        \"protoName\": \"failover_history\"\n                      },\n                      \"pollerGroupInfos\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.taskqueue.v1.PollerGroupInfo\",\n                        \"id\": 7,\n                        \"protoName\": \"poller_group_infos\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"pollerGroupsInfo\": {\n                        \"type\": \"temporal.api.taskqueue.v1.PollerGroupsInfo\",\n                        \"id\": 8,\n                        \"protoName\": \"poller_groups_info\"\n                      }\n                    }\n                  },\n                  \"UpdateNamespaceRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"updateInfo\": {\n                        \"type\": \"temporal.api.namespace.v1.UpdateNamespaceInfo\",\n                        \"id\": 2,\n                        \"protoName\": \"update_info\"\n                      },\n                      \"config\": {\n                        \"type\": \"temporal.api.namespace.v1.NamespaceConfig\",\n                        \"id\": 3\n                      },\n                      \"replicationConfig\": {\n                        \"type\": \"temporal.api.replication.v1.NamespaceReplicationConfig\",\n                        \"id\": 4,\n                        \"protoName\": \"replication_config\"\n                      },\n                      \"securityToken\": {\n                        \"type\": \"string\",\n                        \"id\": 5,\n                        \"protoName\": \"security_token\"\n                      },\n                      \"deleteBadBinary\": {\n                        \"type\": \"string\",\n                        \"id\": 6,\n                        \"protoName\": \"delete_bad_binary\"\n                      },\n                      \"promoteNamespace\": {\n                        \"type\": \"bool\",\n                        \"id\": 7,\n                        \"protoName\": \"promote_namespace\"\n                      }\n                    }\n                  },\n                  \"UpdateNamespaceResponse\": {\n                    \"fields\": {\n                      \"namespaceInfo\": {\n                        \"type\": \"temporal.api.namespace.v1.NamespaceInfo\",\n                        \"id\": 1,\n                        \"protoName\": \"namespace_info\"\n                      },\n                      \"config\": {\n                        \"type\": \"temporal.api.namespace.v1.NamespaceConfig\",\n                        \"id\": 2\n                      },\n                      \"replicationConfig\": {\n                        \"type\": \"temporal.api.replication.v1.NamespaceReplicationConfig\",\n                        \"id\": 3,\n                        \"protoName\": \"replication_config\"\n                      },\n                      \"failoverVersion\": {\n                        \"type\": \"int64\",\n                        \"id\": 4,\n                        \"protoName\": \"failover_version\"\n                      },\n                      \"isGlobalNamespace\": {\n                        \"type\": \"bool\",\n                        \"id\": 5,\n                        \"protoName\": \"is_global_namespace\"\n                      }\n                    }\n                  },\n                  \"DeprecateNamespaceRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"securityToken\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"security_token\"\n                      }\n                    }\n                  },\n                  \"DeprecateNamespaceResponse\": {\n                    \"fields\": {}\n                  },\n                  \"StartWorkflowExecutionRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"workflowId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_id\"\n                      },\n                      \"workflowType\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowType\",\n                        \"id\": 3,\n                        \"protoName\": \"workflow_type\"\n                      },\n                      \"taskQueue\": {\n                        \"type\": \"temporal.api.taskqueue.v1.TaskQueue\",\n                        \"id\": 4,\n                        \"protoName\": \"task_queue\"\n                      },\n                      \"input\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 5\n                      },\n                      \"workflowExecutionTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 6,\n                        \"protoName\": \"workflow_execution_timeout\"\n                      },\n                      \"workflowRunTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 7,\n                        \"protoName\": \"workflow_run_timeout\"\n                      },\n                      \"workflowTaskTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 8,\n                        \"protoName\": \"workflow_task_timeout\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 9\n                      },\n                      \"requestId\": {\n                        \"type\": \"string\",\n                        \"id\": 10,\n                        \"protoName\": \"request_id\"\n                      },\n                      \"workflowIdReusePolicy\": {\n                        \"type\": \"temporal.api.enums.v1.WorkflowIdReusePolicy\",\n                        \"id\": 11,\n                        \"protoName\": \"workflow_id_reuse_policy\"\n                      },\n                      \"workflowIdConflictPolicy\": {\n                        \"type\": \"temporal.api.enums.v1.WorkflowIdConflictPolicy\",\n                        \"id\": 22,\n                        \"protoName\": \"workflow_id_conflict_policy\"\n                      },\n                      \"retryPolicy\": {\n                        \"type\": \"temporal.api.common.v1.RetryPolicy\",\n                        \"id\": 12,\n                        \"protoName\": \"retry_policy\"\n                      },\n                      \"cronSchedule\": {\n                        \"type\": \"string\",\n                        \"id\": 13,\n                        \"protoName\": \"cron_schedule\"\n                      },\n                      \"memo\": {\n                        \"type\": \"temporal.api.common.v1.Memo\",\n                        \"id\": 14\n                      },\n                      \"searchAttributes\": {\n                        \"type\": \"temporal.api.common.v1.SearchAttributes\",\n                        \"id\": 15,\n                        \"protoName\": \"search_attributes\"\n                      },\n                      \"header\": {\n                        \"type\": \"temporal.api.common.v1.Header\",\n                        \"id\": 16\n                      },\n                      \"requestEagerExecution\": {\n                        \"type\": \"bool\",\n                        \"id\": 17,\n                        \"protoName\": \"request_eager_execution\"\n                      },\n                      \"continuedFailure\": {\n                        \"type\": \"temporal.api.failure.v1.Failure\",\n                        \"id\": 18,\n                        \"protoName\": \"continued_failure\"\n                      },\n                      \"lastCompletionResult\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 19,\n                        \"protoName\": \"last_completion_result\"\n                      },\n                      \"workflowStartDelay\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 20,\n                        \"protoName\": \"workflow_start_delay\"\n                      },\n                      \"completionCallbacks\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.common.v1.Callback\",\n                        \"id\": 21,\n                        \"protoName\": \"completion_callbacks\"\n                      },\n                      \"userMetadata\": {\n                        \"type\": \"temporal.api.sdk.v1.UserMetadata\",\n                        \"id\": 23,\n                        \"protoName\": \"user_metadata\"\n                      },\n                      \"links\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.common.v1.Link\",\n                        \"id\": 24\n                      },\n                      \"versioningOverride\": {\n                        \"type\": \"temporal.api.workflow.v1.VersioningOverride\",\n                        \"id\": 25,\n                        \"protoName\": \"versioning_override\"\n                      },\n                      \"onConflictOptions\": {\n                        \"type\": \"temporal.api.workflow.v1.OnConflictOptions\",\n                        \"id\": 26,\n                        \"protoName\": \"on_conflict_options\"\n                      },\n                      \"priority\": {\n                        \"type\": \"temporal.api.common.v1.Priority\",\n                        \"id\": 27\n                      },\n                      \"eagerWorkerDeploymentOptions\": {\n                        \"type\": \"temporal.api.deployment.v1.WorkerDeploymentOptions\",\n                        \"id\": 28,\n                        \"protoName\": \"eager_worker_deployment_options\"\n                      },\n                      \"timeSkippingConfig\": {\n                        \"type\": \"temporal.api.common.v1.TimeSkippingConfig\",\n                        \"id\": 29,\n                        \"protoName\": \"time_skipping_config\"\n                      }\n                    }\n                  },\n                  \"StartWorkflowExecutionResponse\": {\n                    \"fields\": {\n                      \"runId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"run_id\"\n                      },\n                      \"firstExecutionRunId\": {\n                        \"type\": \"string\",\n                        \"id\": 6,\n                        \"protoName\": \"first_execution_run_id\"\n                      },\n                      \"started\": {\n                        \"type\": \"bool\",\n                        \"id\": 3\n                      },\n                      \"status\": {\n                        \"type\": \"temporal.api.enums.v1.WorkflowExecutionStatus\",\n                        \"id\": 5\n                      },\n                      \"eagerWorkflowTask\": {\n                        \"type\": \"PollWorkflowTaskQueueResponse\",\n                        \"id\": 2,\n                        \"protoName\": \"eager_workflow_task\"\n                      },\n                      \"link\": {\n                        \"type\": \"temporal.api.common.v1.Link\",\n                        \"id\": 4\n                      }\n                    }\n                  },\n                  \"GetWorkflowExecutionHistoryRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"execution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 2\n                      },\n                      \"maximumPageSize\": {\n                        \"type\": \"int32\",\n                        \"id\": 3,\n                        \"protoName\": \"maximum_page_size\"\n                      },\n                      \"nextPageToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 4,\n                        \"protoName\": \"next_page_token\"\n                      },\n                      \"waitNewEvent\": {\n                        \"type\": \"bool\",\n                        \"id\": 5,\n                        \"protoName\": \"wait_new_event\"\n                      },\n                      \"historyEventFilterType\": {\n                        \"type\": \"temporal.api.enums.v1.HistoryEventFilterType\",\n                        \"id\": 6,\n                        \"protoName\": \"history_event_filter_type\"\n                      },\n                      \"skipArchival\": {\n                        \"type\": \"bool\",\n                        \"id\": 7,\n                        \"protoName\": \"skip_archival\"\n                      }\n                    }\n                  },\n                  \"GetWorkflowExecutionHistoryResponse\": {\n                    \"fields\": {\n                      \"history\": {\n                        \"type\": \"temporal.api.history.v1.History\",\n                        \"id\": 1\n                      },\n                      \"rawHistory\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.common.v1.DataBlob\",\n                        \"id\": 2,\n                        \"protoName\": \"raw_history\"\n                      },\n                      \"nextPageToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 3,\n                        \"protoName\": \"next_page_token\"\n                      },\n                      \"archived\": {\n                        \"type\": \"bool\",\n                        \"id\": 4\n                      }\n                    }\n                  },\n                  \"GetWorkflowExecutionHistoryReverseRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"execution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 2\n                      },\n                      \"maximumPageSize\": {\n                        \"type\": \"int32\",\n                        \"id\": 3,\n                        \"protoName\": \"maximum_page_size\"\n                      },\n                      \"nextPageToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 4,\n                        \"protoName\": \"next_page_token\"\n                      }\n                    }\n                  },\n                  \"GetWorkflowExecutionHistoryReverseResponse\": {\n                    \"fields\": {\n                      \"history\": {\n                        \"type\": \"temporal.api.history.v1.History\",\n                        \"id\": 1\n                      },\n                      \"nextPageToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 3,\n                        \"protoName\": \"next_page_token\"\n                      }\n                    }\n                  },\n                  \"PollWorkflowTaskQueueRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"taskQueue\": {\n                        \"type\": \"temporal.api.taskqueue.v1.TaskQueue\",\n                        \"id\": 2,\n                        \"protoName\": \"task_queue\"\n                      },\n                      \"pollerGroupId\": {\n                        \"type\": \"string\",\n                        \"id\": 10,\n                        \"protoName\": \"poller_group_id\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"workerInstanceKey\": {\n                        \"type\": \"string\",\n                        \"id\": 8,\n                        \"protoName\": \"worker_instance_key\"\n                      },\n                      \"workerControlTaskQueue\": {\n                        \"type\": \"string\",\n                        \"id\": 9,\n                        \"protoName\": \"worker_control_task_queue\"\n                      },\n                      \"binaryChecksum\": {\n                        \"type\": \"string\",\n                        \"id\": 4,\n                        \"protoName\": \"binary_checksum\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"workerVersionCapabilities\": {\n                        \"type\": \"temporal.api.common.v1.WorkerVersionCapabilities\",\n                        \"id\": 5,\n                        \"protoName\": \"worker_version_capabilities\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"deploymentOptions\": {\n                        \"type\": \"temporal.api.deployment.v1.WorkerDeploymentOptions\",\n                        \"id\": 6,\n                        \"protoName\": \"deployment_options\"\n                      }\n                    },\n                    \"reserved\": [\n                      [\n                        7,\n                        7\n                      ],\n                      \"worker_heartbeat\"\n                    ]\n                  },\n                  \"PollWorkflowTaskQueueResponse\": {\n                    \"fields\": {\n                      \"taskToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 1,\n                        \"protoName\": \"task_token\"\n                      },\n                      \"workflowExecution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_execution\"\n                      },\n                      \"workflowType\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowType\",\n                        \"id\": 3,\n                        \"protoName\": \"workflow_type\"\n                      },\n                      \"previousStartedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 4,\n                        \"protoName\": \"previous_started_event_id\"\n                      },\n                      \"startedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 5,\n                        \"protoName\": \"started_event_id\"\n                      },\n                      \"attempt\": {\n                        \"type\": \"int32\",\n                        \"id\": 6\n                      },\n                      \"backlogCountHint\": {\n                        \"type\": \"int64\",\n                        \"id\": 7,\n                        \"protoName\": \"backlog_count_hint\"\n                      },\n                      \"history\": {\n                        \"type\": \"temporal.api.history.v1.History\",\n                        \"id\": 8\n                      },\n                      \"nextPageToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 9,\n                        \"protoName\": \"next_page_token\"\n                      },\n                      \"query\": {\n                        \"type\": \"temporal.api.query.v1.WorkflowQuery\",\n                        \"id\": 10\n                      },\n                      \"workflowExecutionTaskQueue\": {\n                        \"type\": \"temporal.api.taskqueue.v1.TaskQueue\",\n                        \"id\": 11,\n                        \"protoName\": \"workflow_execution_task_queue\"\n                      },\n                      \"scheduledTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 12,\n                        \"protoName\": \"scheduled_time\"\n                      },\n                      \"startedTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 13,\n                        \"protoName\": \"started_time\"\n                      },\n                      \"queries\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"temporal.api.query.v1.WorkflowQuery\",\n                        \"id\": 14\n                      },\n                      \"messages\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.protocol.v1.Message\",\n                        \"id\": 15\n                      },\n                      \"pollerScalingDecision\": {\n                        \"type\": \"temporal.api.taskqueue.v1.PollerScalingDecision\",\n                        \"id\": 16,\n                        \"protoName\": \"poller_scaling_decision\"\n                      },\n                      \"pollerGroupId\": {\n                        \"type\": \"string\",\n                        \"id\": 17,\n                        \"protoName\": \"poller_group_id\"\n                      },\n                      \"pollerGroupInfos\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.taskqueue.v1.PollerGroupInfo\",\n                        \"id\": 18,\n                        \"protoName\": \"poller_group_infos\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"pollerGroupsInfo\": {\n                        \"type\": \"temporal.api.taskqueue.v1.PollerGroupsInfo\",\n                        \"id\": 19,\n                        \"protoName\": \"poller_groups_info\"\n                      }\n                    }\n                  },\n                  \"RespondWorkflowTaskCompletedRequest\": {\n                    \"fields\": {\n                      \"taskToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 1,\n                        \"protoName\": \"task_token\"\n                      },\n                      \"commands\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.command.v1.Command\",\n                        \"id\": 2\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"stickyAttributes\": {\n                        \"type\": \"temporal.api.taskqueue.v1.StickyExecutionAttributes\",\n                        \"id\": 4,\n                        \"protoName\": \"sticky_attributes\"\n                      },\n                      \"returnNewWorkflowTask\": {\n                        \"type\": \"bool\",\n                        \"id\": 5,\n                        \"protoName\": \"return_new_workflow_task\"\n                      },\n                      \"forceCreateNewWorkflowTask\": {\n                        \"type\": \"bool\",\n                        \"id\": 6,\n                        \"protoName\": \"force_create_new_workflow_task\"\n                      },\n                      \"binaryChecksum\": {\n                        \"type\": \"string\",\n                        \"id\": 7,\n                        \"protoName\": \"binary_checksum\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"queryResults\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"temporal.api.query.v1.WorkflowQueryResult\",\n                        \"id\": 8,\n                        \"protoName\": \"query_results\"\n                      },\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 9\n                      },\n                      \"resourceId\": {\n                        \"type\": \"string\",\n                        \"id\": 18,\n                        \"protoName\": \"resource_id\"\n                      },\n                      \"workerVersionStamp\": {\n                        \"type\": \"temporal.api.common.v1.WorkerVersionStamp\",\n                        \"id\": 10,\n                        \"protoName\": \"worker_version_stamp\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"messages\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.protocol.v1.Message\",\n                        \"id\": 11\n                      },\n                      \"sdkMetadata\": {\n                        \"type\": \"temporal.api.sdk.v1.WorkflowTaskCompletedMetadata\",\n                        \"id\": 12,\n                        \"protoName\": \"sdk_metadata\"\n                      },\n                      \"meteringMetadata\": {\n                        \"type\": \"temporal.api.common.v1.MeteringMetadata\",\n                        \"id\": 13,\n                        \"protoName\": \"metering_metadata\"\n                      },\n                      \"capabilities\": {\n                        \"type\": \"Capabilities\",\n                        \"id\": 14\n                      },\n                      \"deployment\": {\n                        \"type\": \"temporal.api.deployment.v1.Deployment\",\n                        \"id\": 15,\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"versioningBehavior\": {\n                        \"type\": \"temporal.api.enums.v1.VersioningBehavior\",\n                        \"id\": 16,\n                        \"protoName\": \"versioning_behavior\"\n                      },\n                      \"deploymentOptions\": {\n                        \"type\": \"temporal.api.deployment.v1.WorkerDeploymentOptions\",\n                        \"id\": 17,\n                        \"protoName\": \"deployment_options\"\n                      },\n                      \"workerInstanceKey\": {\n                        \"type\": \"string\",\n                        \"id\": 19,\n                        \"protoName\": \"worker_instance_key\"\n                      },\n                      \"workerControlTaskQueue\": {\n                        \"type\": \"string\",\n                        \"id\": 20,\n                        \"protoName\": \"worker_control_task_queue\"\n                      },\n                      \"pageNumber\": {\n                        \"type\": \"int32\",\n                        \"id\": 21,\n                        \"protoName\": \"page_number\"\n                      },\n                      \"intermediatePage\": {\n                        \"type\": \"bool\",\n                        \"id\": 22,\n                        \"protoName\": \"intermediate_page\"\n                      }\n                    },\n                    \"nested\": {\n                      \"Capabilities\": {\n                        \"fields\": {\n                          \"discardSpeculativeWorkflowTaskWithEvents\": {\n                            \"type\": \"bool\",\n                            \"id\": 1,\n                            \"protoName\": \"discard_speculative_workflow_task_with_events\"\n                          }\n                        }\n                      }\n                    }\n                  },\n                  \"RespondWorkflowTaskCompletedResponse\": {\n                    \"fields\": {\n                      \"workflowTask\": {\n                        \"type\": \"PollWorkflowTaskQueueResponse\",\n                        \"id\": 1,\n                        \"protoName\": \"workflow_task\"\n                      },\n                      \"activityTasks\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"PollActivityTaskQueueResponse\",\n                        \"id\": 2,\n                        \"protoName\": \"activity_tasks\"\n                      },\n                      \"resetHistoryEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 3,\n                        \"protoName\": \"reset_history_event_id\"\n                      }\n                    }\n                  },\n                  \"RespondWorkflowTaskFailedRequest\": {\n                    \"fields\": {\n                      \"taskToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 1,\n                        \"protoName\": \"task_token\"\n                      },\n                      \"cause\": {\n                        \"type\": \"temporal.api.enums.v1.WorkflowTaskFailedCause\",\n                        \"id\": 2\n                      },\n                      \"failure\": {\n                        \"type\": \"temporal.api.failure.v1.Failure\",\n                        \"id\": 3\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 4\n                      },\n                      \"binaryChecksum\": {\n                        \"type\": \"string\",\n                        \"id\": 5,\n                        \"protoName\": \"binary_checksum\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 6\n                      },\n                      \"resourceId\": {\n                        \"type\": \"string\",\n                        \"id\": 11,\n                        \"protoName\": \"resource_id\"\n                      },\n                      \"messages\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.protocol.v1.Message\",\n                        \"id\": 7\n                      },\n                      \"workerVersion\": {\n                        \"type\": \"temporal.api.common.v1.WorkerVersionStamp\",\n                        \"id\": 8,\n                        \"protoName\": \"worker_version\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"deployment\": {\n                        \"type\": \"temporal.api.deployment.v1.Deployment\",\n                        \"id\": 9,\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"deploymentOptions\": {\n                        \"type\": \"temporal.api.deployment.v1.WorkerDeploymentOptions\",\n                        \"id\": 10,\n                        \"protoName\": \"deployment_options\"\n                      }\n                    }\n                  },\n                  \"RespondWorkflowTaskFailedResponse\": {\n                    \"fields\": {}\n                  },\n                  \"PollActivityTaskQueueRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"taskQueue\": {\n                        \"type\": \"temporal.api.taskqueue.v1.TaskQueue\",\n                        \"id\": 2,\n                        \"protoName\": \"task_queue\"\n                      },\n                      \"pollerGroupId\": {\n                        \"type\": \"string\",\n                        \"id\": 10,\n                        \"protoName\": \"poller_group_id\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"workerInstanceKey\": {\n                        \"type\": \"string\",\n                        \"id\": 8,\n                        \"protoName\": \"worker_instance_key\"\n                      },\n                      \"workerControlTaskQueue\": {\n                        \"type\": \"string\",\n                        \"id\": 9,\n                        \"protoName\": \"worker_control_task_queue\"\n                      },\n                      \"taskQueueMetadata\": {\n                        \"type\": \"temporal.api.taskqueue.v1.TaskQueueMetadata\",\n                        \"id\": 4,\n                        \"protoName\": \"task_queue_metadata\"\n                      },\n                      \"workerVersionCapabilities\": {\n                        \"type\": \"temporal.api.common.v1.WorkerVersionCapabilities\",\n                        \"id\": 5,\n                        \"protoName\": \"worker_version_capabilities\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"deploymentOptions\": {\n                        \"type\": \"temporal.api.deployment.v1.WorkerDeploymentOptions\",\n                        \"id\": 6,\n                        \"protoName\": \"deployment_options\"\n                      }\n                    },\n                    \"reserved\": [\n                      [\n                        7,\n                        7\n                      ],\n                      \"worker_heartbeat\"\n                    ]\n                  },\n                  \"PollActivityTaskQueueResponse\": {\n                    \"fields\": {\n                      \"taskToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 1,\n                        \"protoName\": \"task_token\"\n                      },\n                      \"workflowNamespace\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_namespace\"\n                      },\n                      \"workflowType\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowType\",\n                        \"id\": 3,\n                        \"protoName\": \"workflow_type\"\n                      },\n                      \"workflowExecution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 4,\n                        \"protoName\": \"workflow_execution\"\n                      },\n                      \"activityType\": {\n                        \"type\": \"temporal.api.common.v1.ActivityType\",\n                        \"id\": 5,\n                        \"protoName\": \"activity_type\"\n                      },\n                      \"activityId\": {\n                        \"type\": \"string\",\n                        \"id\": 6,\n                        \"protoName\": \"activity_id\"\n                      },\n                      \"header\": {\n                        \"type\": \"temporal.api.common.v1.Header\",\n                        \"id\": 7\n                      },\n                      \"input\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 8\n                      },\n                      \"heartbeatDetails\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 9,\n                        \"protoName\": \"heartbeat_details\"\n                      },\n                      \"scheduledTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 10,\n                        \"protoName\": \"scheduled_time\"\n                      },\n                      \"currentAttemptScheduledTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 11,\n                        \"protoName\": \"current_attempt_scheduled_time\"\n                      },\n                      \"startedTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 12,\n                        \"protoName\": \"started_time\"\n                      },\n                      \"attempt\": {\n                        \"type\": \"int32\",\n                        \"id\": 13\n                      },\n                      \"scheduleToCloseTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 14,\n                        \"protoName\": \"schedule_to_close_timeout\"\n                      },\n                      \"startToCloseTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 15,\n                        \"protoName\": \"start_to_close_timeout\"\n                      },\n                      \"heartbeatTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 16,\n                        \"protoName\": \"heartbeat_timeout\"\n                      },\n                      \"retryPolicy\": {\n                        \"type\": \"temporal.api.common.v1.RetryPolicy\",\n                        \"id\": 17,\n                        \"protoName\": \"retry_policy\"\n                      },\n                      \"pollerScalingDecision\": {\n                        \"type\": \"temporal.api.taskqueue.v1.PollerScalingDecision\",\n                        \"id\": 18,\n                        \"protoName\": \"poller_scaling_decision\"\n                      },\n                      \"priority\": {\n                        \"type\": \"temporal.api.common.v1.Priority\",\n                        \"id\": 19\n                      },\n                      \"activityRunId\": {\n                        \"type\": \"string\",\n                        \"id\": 20,\n                        \"protoName\": \"activity_run_id\"\n                      },\n                      \"pollerGroupInfos\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.taskqueue.v1.PollerGroupInfo\",\n                        \"id\": 21,\n                        \"protoName\": \"poller_group_infos\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"pollerGroupsInfo\": {\n                        \"type\": \"temporal.api.taskqueue.v1.PollerGroupsInfo\",\n                        \"id\": 22,\n                        \"protoName\": \"poller_groups_info\"\n                      }\n                    }\n                  },\n                  \"RecordActivityTaskHeartbeatRequest\": {\n                    \"fields\": {\n                      \"taskToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 1,\n                        \"protoName\": \"task_token\"\n                      },\n                      \"details\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 2\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 4\n                      },\n                      \"resourceId\": {\n                        \"type\": \"string\",\n                        \"id\": 5,\n                        \"protoName\": \"resource_id\"\n                      }\n                    }\n                  },\n                  \"RecordActivityTaskHeartbeatResponse\": {\n                    \"fields\": {\n                      \"cancelRequested\": {\n                        \"type\": \"bool\",\n                        \"id\": 1,\n                        \"protoName\": \"cancel_requested\"\n                      },\n                      \"activityPaused\": {\n                        \"type\": \"bool\",\n                        \"id\": 2,\n                        \"protoName\": \"activity_paused\"\n                      },\n                      \"activityReset\": {\n                        \"type\": \"bool\",\n                        \"id\": 3,\n                        \"protoName\": \"activity_reset\"\n                      }\n                    }\n                  },\n                  \"RecordActivityTaskHeartbeatByIdRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"workflowId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_id\"\n                      },\n                      \"runId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"run_id\"\n                      },\n                      \"activityId\": {\n                        \"type\": \"string\",\n                        \"id\": 4,\n                        \"protoName\": \"activity_id\"\n                      },\n                      \"details\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 5\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 6\n                      },\n                      \"resourceId\": {\n                        \"type\": \"string\",\n                        \"id\": 7,\n                        \"protoName\": \"resource_id\"\n                      }\n                    }\n                  },\n                  \"RecordActivityTaskHeartbeatByIdResponse\": {\n                    \"fields\": {\n                      \"cancelRequested\": {\n                        \"type\": \"bool\",\n                        \"id\": 1,\n                        \"protoName\": \"cancel_requested\"\n                      },\n                      \"activityPaused\": {\n                        \"type\": \"bool\",\n                        \"id\": 2,\n                        \"protoName\": \"activity_paused\"\n                      },\n                      \"activityReset\": {\n                        \"type\": \"bool\",\n                        \"id\": 3,\n                        \"protoName\": \"activity_reset\"\n                      }\n                    }\n                  },\n                  \"RespondActivityTaskCompletedRequest\": {\n                    \"fields\": {\n                      \"taskToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 1,\n                        \"protoName\": \"task_token\"\n                      },\n                      \"result\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 2\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 4\n                      },\n                      \"resourceId\": {\n                        \"type\": \"string\",\n                        \"id\": 8,\n                        \"protoName\": \"resource_id\"\n                      },\n                      \"workerVersion\": {\n                        \"type\": \"temporal.api.common.v1.WorkerVersionStamp\",\n                        \"id\": 5,\n                        \"protoName\": \"worker_version\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"deployment\": {\n                        \"type\": \"temporal.api.deployment.v1.Deployment\",\n                        \"id\": 6,\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"deploymentOptions\": {\n                        \"type\": \"temporal.api.deployment.v1.WorkerDeploymentOptions\",\n                        \"id\": 7,\n                        \"protoName\": \"deployment_options\"\n                      }\n                    }\n                  },\n                  \"RespondActivityTaskCompletedResponse\": {\n                    \"fields\": {}\n                  },\n                  \"RespondActivityTaskCompletedByIdRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"workflowId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_id\"\n                      },\n                      \"runId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"run_id\"\n                      },\n                      \"activityId\": {\n                        \"type\": \"string\",\n                        \"id\": 4,\n                        \"protoName\": \"activity_id\"\n                      },\n                      \"result\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 5\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 6\n                      },\n                      \"resourceId\": {\n                        \"type\": \"string\",\n                        \"id\": 7,\n                        \"protoName\": \"resource_id\"\n                      }\n                    }\n                  },\n                  \"RespondActivityTaskCompletedByIdResponse\": {\n                    \"fields\": {}\n                  },\n                  \"RespondActivityTaskFailedRequest\": {\n                    \"fields\": {\n                      \"taskToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 1,\n                        \"protoName\": \"task_token\"\n                      },\n                      \"failure\": {\n                        \"type\": \"temporal.api.failure.v1.Failure\",\n                        \"id\": 2\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 4\n                      },\n                      \"resourceId\": {\n                        \"type\": \"string\",\n                        \"id\": 9,\n                        \"protoName\": \"resource_id\"\n                      },\n                      \"lastHeartbeatDetails\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 5,\n                        \"protoName\": \"last_heartbeat_details\"\n                      },\n                      \"workerVersion\": {\n                        \"type\": \"temporal.api.common.v1.WorkerVersionStamp\",\n                        \"id\": 6,\n                        \"protoName\": \"worker_version\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"deployment\": {\n                        \"type\": \"temporal.api.deployment.v1.Deployment\",\n                        \"id\": 7,\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"deploymentOptions\": {\n                        \"type\": \"temporal.api.deployment.v1.WorkerDeploymentOptions\",\n                        \"id\": 8,\n                        \"protoName\": \"deployment_options\"\n                      }\n                    }\n                  },\n                  \"RespondActivityTaskFailedResponse\": {\n                    \"fields\": {\n                      \"failures\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.failure.v1.Failure\",\n                        \"id\": 1\n                      }\n                    }\n                  },\n                  \"RespondActivityTaskFailedByIdRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"workflowId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_id\"\n                      },\n                      \"runId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"run_id\"\n                      },\n                      \"activityId\": {\n                        \"type\": \"string\",\n                        \"id\": 4,\n                        \"protoName\": \"activity_id\"\n                      },\n                      \"failure\": {\n                        \"type\": \"temporal.api.failure.v1.Failure\",\n                        \"id\": 5\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 6\n                      },\n                      \"lastHeartbeatDetails\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 7,\n                        \"protoName\": \"last_heartbeat_details\"\n                      },\n                      \"resourceId\": {\n                        \"type\": \"string\",\n                        \"id\": 8,\n                        \"protoName\": \"resource_id\"\n                      }\n                    }\n                  },\n                  \"RespondActivityTaskFailedByIdResponse\": {\n                    \"fields\": {\n                      \"failures\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.failure.v1.Failure\",\n                        \"id\": 1\n                      }\n                    }\n                  },\n                  \"RespondActivityTaskCanceledRequest\": {\n                    \"fields\": {\n                      \"taskToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 1,\n                        \"protoName\": \"task_token\"\n                      },\n                      \"details\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 2\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 4\n                      },\n                      \"resourceId\": {\n                        \"type\": \"string\",\n                        \"id\": 8,\n                        \"protoName\": \"resource_id\"\n                      },\n                      \"workerVersion\": {\n                        \"type\": \"temporal.api.common.v1.WorkerVersionStamp\",\n                        \"id\": 5,\n                        \"protoName\": \"worker_version\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"deployment\": {\n                        \"type\": \"temporal.api.deployment.v1.Deployment\",\n                        \"id\": 6,\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"deploymentOptions\": {\n                        \"type\": \"temporal.api.deployment.v1.WorkerDeploymentOptions\",\n                        \"id\": 7,\n                        \"protoName\": \"deployment_options\"\n                      }\n                    }\n                  },\n                  \"RespondActivityTaskCanceledResponse\": {\n                    \"fields\": {}\n                  },\n                  \"RespondActivityTaskCanceledByIdRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"workflowId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_id\"\n                      },\n                      \"runId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"run_id\"\n                      },\n                      \"activityId\": {\n                        \"type\": \"string\",\n                        \"id\": 4,\n                        \"protoName\": \"activity_id\"\n                      },\n                      \"details\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 5\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 6\n                      },\n                      \"deploymentOptions\": {\n                        \"type\": \"temporal.api.deployment.v1.WorkerDeploymentOptions\",\n                        \"id\": 7,\n                        \"protoName\": \"deployment_options\"\n                      },\n                      \"resourceId\": {\n                        \"type\": \"string\",\n                        \"id\": 8,\n                        \"protoName\": \"resource_id\"\n                      }\n                    }\n                  },\n                  \"RespondActivityTaskCanceledByIdResponse\": {\n                    \"fields\": {}\n                  },\n                  \"RequestCancelWorkflowExecutionRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"workflowExecution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_execution\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"requestId\": {\n                        \"type\": \"string\",\n                        \"id\": 4,\n                        \"protoName\": \"request_id\"\n                      },\n                      \"firstExecutionRunId\": {\n                        \"type\": \"string\",\n                        \"id\": 5,\n                        \"protoName\": \"first_execution_run_id\"\n                      },\n                      \"reason\": {\n                        \"type\": \"string\",\n                        \"id\": 6\n                      },\n                      \"links\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.common.v1.Link\",\n                        \"id\": 7\n                      }\n                    }\n                  },\n                  \"RequestCancelWorkflowExecutionResponse\": {\n                    \"fields\": {}\n                  },\n                  \"SignalWorkflowExecutionRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"workflowExecution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_execution\"\n                      },\n                      \"signalName\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"signal_name\"\n                      },\n                      \"input\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 4\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 5\n                      },\n                      \"requestId\": {\n                        \"type\": \"string\",\n                        \"id\": 6,\n                        \"protoName\": \"request_id\"\n                      },\n                      \"control\": {\n                        \"type\": \"string\",\n                        \"id\": 7,\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"header\": {\n                        \"type\": \"temporal.api.common.v1.Header\",\n                        \"id\": 8\n                      },\n                      \"links\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.common.v1.Link\",\n                        \"id\": 10\n                      }\n                    },\n                    \"reserved\": [\n                      [\n                        9,\n                        9\n                      ]\n                    ]\n                  },\n                  \"SignalWorkflowExecutionResponse\": {\n                    \"fields\": {\n                      \"link\": {\n                        \"type\": \"temporal.api.common.v1.Link\",\n                        \"id\": 1\n                      }\n                    }\n                  },\n                  \"SignalWithStartWorkflowExecutionRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"workflowId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_id\"\n                      },\n                      \"workflowType\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowType\",\n                        \"id\": 3,\n                        \"protoName\": \"workflow_type\"\n                      },\n                      \"taskQueue\": {\n                        \"type\": \"temporal.api.taskqueue.v1.TaskQueue\",\n                        \"id\": 4,\n                        \"protoName\": \"task_queue\"\n                      },\n                      \"input\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 5\n                      },\n                      \"workflowExecutionTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 6,\n                        \"protoName\": \"workflow_execution_timeout\"\n                      },\n                      \"workflowRunTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 7,\n                        \"protoName\": \"workflow_run_timeout\"\n                      },\n                      \"workflowTaskTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 8,\n                        \"protoName\": \"workflow_task_timeout\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 9\n                      },\n                      \"requestId\": {\n                        \"type\": \"string\",\n                        \"id\": 10,\n                        \"protoName\": \"request_id\"\n                      },\n                      \"workflowIdReusePolicy\": {\n                        \"type\": \"temporal.api.enums.v1.WorkflowIdReusePolicy\",\n                        \"id\": 11,\n                        \"protoName\": \"workflow_id_reuse_policy\"\n                      },\n                      \"workflowIdConflictPolicy\": {\n                        \"type\": \"temporal.api.enums.v1.WorkflowIdConflictPolicy\",\n                        \"id\": 22,\n                        \"protoName\": \"workflow_id_conflict_policy\"\n                      },\n                      \"signalName\": {\n                        \"type\": \"string\",\n                        \"id\": 12,\n                        \"protoName\": \"signal_name\"\n                      },\n                      \"signalInput\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 13,\n                        \"protoName\": \"signal_input\"\n                      },\n                      \"control\": {\n                        \"type\": \"string\",\n                        \"id\": 14,\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"retryPolicy\": {\n                        \"type\": \"temporal.api.common.v1.RetryPolicy\",\n                        \"id\": 15,\n                        \"protoName\": \"retry_policy\"\n                      },\n                      \"cronSchedule\": {\n                        \"type\": \"string\",\n                        \"id\": 16,\n                        \"protoName\": \"cron_schedule\"\n                      },\n                      \"memo\": {\n                        \"type\": \"temporal.api.common.v1.Memo\",\n                        \"id\": 17\n                      },\n                      \"searchAttributes\": {\n                        \"type\": \"temporal.api.common.v1.SearchAttributes\",\n                        \"id\": 18,\n                        \"protoName\": \"search_attributes\"\n                      },\n                      \"header\": {\n                        \"type\": \"temporal.api.common.v1.Header\",\n                        \"id\": 19\n                      },\n                      \"workflowStartDelay\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 20,\n                        \"protoName\": \"workflow_start_delay\"\n                      },\n                      \"userMetadata\": {\n                        \"type\": \"temporal.api.sdk.v1.UserMetadata\",\n                        \"id\": 23,\n                        \"protoName\": \"user_metadata\"\n                      },\n                      \"links\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.common.v1.Link\",\n                        \"id\": 24\n                      },\n                      \"versioningOverride\": {\n                        \"type\": \"temporal.api.workflow.v1.VersioningOverride\",\n                        \"id\": 25,\n                        \"protoName\": \"versioning_override\"\n                      },\n                      \"priority\": {\n                        \"type\": \"temporal.api.common.v1.Priority\",\n                        \"id\": 26\n                      },\n                      \"timeSkippingConfig\": {\n                        \"type\": \"temporal.api.common.v1.TimeSkippingConfig\",\n                        \"id\": 27,\n                        \"protoName\": \"time_skipping_config\"\n                      }\n                    },\n                    \"reserved\": [\n                      [\n                        21,\n                        21\n                      ]\n                    ]\n                  },\n                  \"SignalWithStartWorkflowExecutionResponse\": {\n                    \"fields\": {\n                      \"runId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"run_id\"\n                      },\n                      \"firstExecutionRunId\": {\n                        \"type\": \"string\",\n                        \"id\": 4,\n                        \"protoName\": \"first_execution_run_id\"\n                      },\n                      \"started\": {\n                        \"type\": \"bool\",\n                        \"id\": 2\n                      },\n                      \"signalLink\": {\n                        \"type\": \"temporal.api.common.v1.Link\",\n                        \"id\": 3,\n                        \"protoName\": \"signal_link\"\n                      }\n                    }\n                  },\n                  \"ResetWorkflowExecutionRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"workflowExecution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_execution\"\n                      },\n                      \"reason\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"workflowTaskFinishEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 4,\n                        \"protoName\": \"workflow_task_finish_event_id\"\n                      },\n                      \"requestId\": {\n                        \"type\": \"string\",\n                        \"id\": 5,\n                        \"protoName\": \"request_id\"\n                      },\n                      \"resetReapplyType\": {\n                        \"type\": \"temporal.api.enums.v1.ResetReapplyType\",\n                        \"id\": 6,\n                        \"protoName\": \"reset_reapply_type\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"resetReapplyExcludeTypes\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.enums.v1.ResetReapplyExcludeType\",\n                        \"id\": 7,\n                        \"protoName\": \"reset_reapply_exclude_types\"\n                      },\n                      \"postResetOperations\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.workflow.v1.PostResetOperation\",\n                        \"id\": 8,\n                        \"protoName\": \"post_reset_operations\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 9\n                      }\n                    }\n                  },\n                  \"ResetWorkflowExecutionResponse\": {\n                    \"fields\": {\n                      \"runId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"run_id\"\n                      }\n                    }\n                  },\n                  \"TerminateWorkflowExecutionRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"workflowExecution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_execution\"\n                      },\n                      \"reason\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"details\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 4\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 5\n                      },\n                      \"firstExecutionRunId\": {\n                        \"type\": \"string\",\n                        \"id\": 6,\n                        \"protoName\": \"first_execution_run_id\"\n                      },\n                      \"links\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.common.v1.Link\",\n                        \"id\": 7\n                      }\n                    }\n                  },\n                  \"TerminateWorkflowExecutionResponse\": {\n                    \"fields\": {}\n                  },\n                  \"DeleteWorkflowExecutionRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"workflowExecution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_execution\"\n                      }\n                    }\n                  },\n                  \"DeleteWorkflowExecutionResponse\": {\n                    \"fields\": {}\n                  },\n                  \"ListOpenWorkflowExecutionsRequest\": {\n                    \"oneofs\": {\n                      \"filters\": {\n                        \"oneof\": [\n                          \"executionFilter\",\n                          \"typeFilter\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"maximumPageSize\": {\n                        \"type\": \"int32\",\n                        \"id\": 2,\n                        \"protoName\": \"maximum_page_size\"\n                      },\n                      \"nextPageToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 3,\n                        \"protoName\": \"next_page_token\"\n                      },\n                      \"startTimeFilter\": {\n                        \"type\": \"temporal.api.filter.v1.StartTimeFilter\",\n                        \"id\": 4,\n                        \"protoName\": \"start_time_filter\"\n                      },\n                      \"executionFilter\": {\n                        \"type\": \"temporal.api.filter.v1.WorkflowExecutionFilter\",\n                        \"id\": 5,\n                        \"protoName\": \"execution_filter\"\n                      },\n                      \"typeFilter\": {\n                        \"type\": \"temporal.api.filter.v1.WorkflowTypeFilter\",\n                        \"id\": 6,\n                        \"protoName\": \"type_filter\"\n                      }\n                    }\n                  },\n                  \"ListOpenWorkflowExecutionsResponse\": {\n                    \"fields\": {\n                      \"executions\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.workflow.v1.WorkflowExecutionInfo\",\n                        \"id\": 1\n                      },\n                      \"nextPageToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 2,\n                        \"protoName\": \"next_page_token\"\n                      }\n                    }\n                  },\n                  \"ListClosedWorkflowExecutionsRequest\": {\n                    \"oneofs\": {\n                      \"filters\": {\n                        \"oneof\": [\n                          \"executionFilter\",\n                          \"typeFilter\",\n                          \"statusFilter\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"maximumPageSize\": {\n                        \"type\": \"int32\",\n                        \"id\": 2,\n                        \"protoName\": \"maximum_page_size\"\n                      },\n                      \"nextPageToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 3,\n                        \"protoName\": \"next_page_token\"\n                      },\n                      \"startTimeFilter\": {\n                        \"type\": \"temporal.api.filter.v1.StartTimeFilter\",\n                        \"id\": 4,\n                        \"protoName\": \"start_time_filter\"\n                      },\n                      \"executionFilter\": {\n                        \"type\": \"temporal.api.filter.v1.WorkflowExecutionFilter\",\n                        \"id\": 5,\n                        \"protoName\": \"execution_filter\"\n                      },\n                      \"typeFilter\": {\n                        \"type\": \"temporal.api.filter.v1.WorkflowTypeFilter\",\n                        \"id\": 6,\n                        \"protoName\": \"type_filter\"\n                      },\n                      \"statusFilter\": {\n                        \"type\": \"temporal.api.filter.v1.StatusFilter\",\n                        \"id\": 7,\n                        \"protoName\": \"status_filter\"\n                      }\n                    }\n                  },\n                  \"ListClosedWorkflowExecutionsResponse\": {\n                    \"fields\": {\n                      \"executions\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.workflow.v1.WorkflowExecutionInfo\",\n                        \"id\": 1\n                      },\n                      \"nextPageToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 2,\n                        \"protoName\": \"next_page_token\"\n                      }\n                    }\n                  },\n                  \"ListWorkflowExecutionsRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"pageSize\": {\n                        \"type\": \"int32\",\n                        \"id\": 2,\n                        \"protoName\": \"page_size\"\n                      },\n                      \"nextPageToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 3,\n                        \"protoName\": \"next_page_token\"\n                      },\n                      \"query\": {\n                        \"type\": \"string\",\n                        \"id\": 4\n                      }\n                    }\n                  },\n                  \"ListWorkflowExecutionsResponse\": {\n                    \"fields\": {\n                      \"executions\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.workflow.v1.WorkflowExecutionInfo\",\n                        \"id\": 1\n                      },\n                      \"nextPageToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 2,\n                        \"protoName\": \"next_page_token\"\n                      }\n                    }\n                  },\n                  \"ListArchivedWorkflowExecutionsRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"pageSize\": {\n                        \"type\": \"int32\",\n                        \"id\": 2,\n                        \"protoName\": \"page_size\"\n                      },\n                      \"nextPageToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 3,\n                        \"protoName\": \"next_page_token\"\n                      },\n                      \"query\": {\n                        \"type\": \"string\",\n                        \"id\": 4\n                      }\n                    }\n                  },\n                  \"ListArchivedWorkflowExecutionsResponse\": {\n                    \"fields\": {\n                      \"executions\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.workflow.v1.WorkflowExecutionInfo\",\n                        \"id\": 1\n                      },\n                      \"nextPageToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 2,\n                        \"protoName\": \"next_page_token\"\n                      }\n                    }\n                  },\n                  \"ScanWorkflowExecutionsRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"pageSize\": {\n                        \"type\": \"int32\",\n                        \"id\": 2,\n                        \"protoName\": \"page_size\"\n                      },\n                      \"nextPageToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 3,\n                        \"protoName\": \"next_page_token\"\n                      },\n                      \"query\": {\n                        \"type\": \"string\",\n                        \"id\": 4\n                      }\n                    }\n                  },\n                  \"ScanWorkflowExecutionsResponse\": {\n                    \"fields\": {\n                      \"executions\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.workflow.v1.WorkflowExecutionInfo\",\n                        \"id\": 1\n                      },\n                      \"nextPageToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 2,\n                        \"protoName\": \"next_page_token\"\n                      }\n                    }\n                  },\n                  \"CountWorkflowExecutionsRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"query\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      }\n                    }\n                  },\n                  \"CountWorkflowExecutionsResponse\": {\n                    \"fields\": {\n                      \"count\": {\n                        \"type\": \"int64\",\n                        \"id\": 1\n                      },\n                      \"groups\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"AggregationGroup\",\n                        \"id\": 2\n                      }\n                    },\n                    \"nested\": {\n                      \"AggregationGroup\": {\n                        \"fields\": {\n                          \"groupValues\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"temporal.api.common.v1.Payload\",\n                            \"id\": 1,\n                            \"protoName\": \"group_values\"\n                          },\n                          \"count\": {\n                            \"type\": \"int64\",\n                            \"id\": 2\n                          }\n                        }\n                      }\n                    }\n                  },\n                  \"GetSearchAttributesRequest\": {\n                    \"fields\": {}\n                  },\n                  \"GetSearchAttributesResponse\": {\n                    \"fields\": {\n                      \"keys\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"temporal.api.enums.v1.IndexedValueType\",\n                        \"id\": 1\n                      }\n                    }\n                  },\n                  \"RespondQueryTaskCompletedRequest\": {\n                    \"fields\": {\n                      \"taskToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 1,\n                        \"protoName\": \"task_token\"\n                      },\n                      \"completedType\": {\n                        \"type\": \"temporal.api.enums.v1.QueryResultType\",\n                        \"id\": 2,\n                        \"protoName\": \"completed_type\"\n                      },\n                      \"queryResult\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 3,\n                        \"protoName\": \"query_result\"\n                      },\n                      \"errorMessage\": {\n                        \"type\": \"string\",\n                        \"id\": 4,\n                        \"protoName\": \"error_message\"\n                      },\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 6\n                      },\n                      \"failure\": {\n                        \"type\": \"temporal.api.failure.v1.Failure\",\n                        \"id\": 7\n                      },\n                      \"cause\": {\n                        \"type\": \"temporal.api.enums.v1.WorkflowTaskFailedCause\",\n                        \"id\": 8\n                      },\n                      \"pollerGroupId\": {\n                        \"type\": \"string\",\n                        \"id\": 9,\n                        \"protoName\": \"poller_group_id\"\n                      }\n                    },\n                    \"reserved\": [\n                      [\n                        5,\n                        5\n                      ]\n                    ]\n                  },\n                  \"RespondQueryTaskCompletedResponse\": {\n                    \"fields\": {}\n                  },\n                  \"ResetStickyTaskQueueRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"execution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 2\n                      }\n                    }\n                  },\n                  \"ResetStickyTaskQueueResponse\": {\n                    \"fields\": {}\n                  },\n                  \"ShutdownWorkerRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"stickyTaskQueue\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"sticky_task_queue\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"reason\": {\n                        \"type\": \"string\",\n                        \"id\": 4\n                      },\n                      \"workerHeartbeat\": {\n                        \"type\": \"temporal.api.worker.v1.WorkerHeartbeat\",\n                        \"id\": 5,\n                        \"protoName\": \"worker_heartbeat\"\n                      },\n                      \"workerInstanceKey\": {\n                        \"type\": \"string\",\n                        \"id\": 6,\n                        \"protoName\": \"worker_instance_key\"\n                      },\n                      \"taskQueue\": {\n                        \"type\": \"string\",\n                        \"id\": 7,\n                        \"protoName\": \"task_queue\"\n                      },\n                      \"taskQueueTypes\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.enums.v1.TaskQueueType\",\n                        \"id\": 8,\n                        \"protoName\": \"task_queue_types\"\n                      }\n                    }\n                  },\n                  \"ShutdownWorkerResponse\": {\n                    \"fields\": {}\n                  },\n                  \"QueryWorkflowRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"execution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 2\n                      },\n                      \"query\": {\n                        \"type\": \"temporal.api.query.v1.WorkflowQuery\",\n                        \"id\": 3\n                      },\n                      \"queryRejectCondition\": {\n                        \"type\": \"temporal.api.enums.v1.QueryRejectCondition\",\n                        \"id\": 4,\n                        \"protoName\": \"query_reject_condition\"\n                      }\n                    }\n                  },\n                  \"QueryWorkflowResponse\": {\n                    \"fields\": {\n                      \"queryResult\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 1,\n                        \"protoName\": \"query_result\"\n                      },\n                      \"queryRejected\": {\n                        \"type\": \"temporal.api.query.v1.QueryRejected\",\n                        \"id\": 2,\n                        \"protoName\": \"query_rejected\"\n                      },\n                      \"link\": {\n                        \"type\": \"temporal.api.common.v1.Link\",\n                        \"id\": 3\n                      }\n                    }\n                  },\n                  \"DescribeWorkflowExecutionRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"execution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 2\n                      }\n                    }\n                  },\n                  \"DescribeWorkflowExecutionResponse\": {\n                    \"fields\": {\n                      \"executionConfig\": {\n                        \"type\": \"temporal.api.workflow.v1.WorkflowExecutionConfig\",\n                        \"id\": 1,\n                        \"protoName\": \"execution_config\"\n                      },\n                      \"workflowExecutionInfo\": {\n                        \"type\": \"temporal.api.workflow.v1.WorkflowExecutionInfo\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_execution_info\"\n                      },\n                      \"pendingActivities\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.workflow.v1.PendingActivityInfo\",\n                        \"id\": 3,\n                        \"protoName\": \"pending_activities\"\n                      },\n                      \"pendingChildren\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.workflow.v1.PendingChildExecutionInfo\",\n                        \"id\": 4,\n                        \"protoName\": \"pending_children\"\n                      },\n                      \"pendingWorkflowTask\": {\n                        \"type\": \"temporal.api.workflow.v1.PendingWorkflowTaskInfo\",\n                        \"id\": 5,\n                        \"protoName\": \"pending_workflow_task\"\n                      },\n                      \"callbacks\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.workflow.v1.CallbackInfo\",\n                        \"id\": 6\n                      },\n                      \"pendingNexusOperations\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.workflow.v1.PendingNexusOperationInfo\",\n                        \"id\": 7,\n                        \"protoName\": \"pending_nexus_operations\"\n                      },\n                      \"workflowExtendedInfo\": {\n                        \"type\": \"temporal.api.workflow.v1.WorkflowExecutionExtendedInfo\",\n                        \"id\": 8,\n                        \"protoName\": \"workflow_extended_info\"\n                      }\n                    }\n                  },\n                  \"DescribeTaskQueueRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"taskQueue\": {\n                        \"type\": \"temporal.api.taskqueue.v1.TaskQueue\",\n                        \"id\": 2,\n                        \"protoName\": \"task_queue\"\n                      },\n                      \"taskQueueType\": {\n                        \"type\": \"temporal.api.enums.v1.TaskQueueType\",\n                        \"id\": 3,\n                        \"protoName\": \"task_queue_type\"\n                      },\n                      \"reportStats\": {\n                        \"type\": \"bool\",\n                        \"id\": 8,\n                        \"protoName\": \"report_stats\"\n                      },\n                      \"reportConfig\": {\n                        \"type\": \"bool\",\n                        \"id\": 11,\n                        \"protoName\": \"report_config\"\n                      },\n                      \"includeTaskQueueStatus\": {\n                        \"type\": \"bool\",\n                        \"id\": 4,\n                        \"protoName\": \"include_task_queue_status\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"apiMode\": {\n                        \"type\": \"temporal.api.enums.v1.DescribeTaskQueueMode\",\n                        \"id\": 5,\n                        \"protoName\": \"api_mode\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"versions\": {\n                        \"type\": \"temporal.api.taskqueue.v1.TaskQueueVersionSelection\",\n                        \"id\": 6,\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"taskQueueTypes\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.enums.v1.TaskQueueType\",\n                        \"id\": 7,\n                        \"protoName\": \"task_queue_types\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"reportPollers\": {\n                        \"type\": \"bool\",\n                        \"id\": 9,\n                        \"protoName\": \"report_pollers\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"reportTaskReachability\": {\n                        \"type\": \"bool\",\n                        \"id\": 10,\n                        \"protoName\": \"report_task_reachability\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      }\n                    }\n                  },\n                  \"DescribeTaskQueueResponse\": {\n                    \"fields\": {\n                      \"pollers\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.taskqueue.v1.PollerInfo\",\n                        \"id\": 1\n                      },\n                      \"stats\": {\n                        \"type\": \"temporal.api.taskqueue.v1.TaskQueueStats\",\n                        \"id\": 5\n                      },\n                      \"statsByPriorityKey\": {\n                        \"keyType\": \"int32\",\n                        \"type\": \"temporal.api.taskqueue.v1.TaskQueueStats\",\n                        \"id\": 8,\n                        \"protoName\": \"stats_by_priority_key\"\n                      },\n                      \"versioningInfo\": {\n                        \"type\": \"temporal.api.taskqueue.v1.TaskQueueVersioningInfo\",\n                        \"id\": 4,\n                        \"protoName\": \"versioning_info\"\n                      },\n                      \"config\": {\n                        \"type\": \"temporal.api.taskqueue.v1.TaskQueueConfig\",\n                        \"id\": 6\n                      },\n                      \"effectiveRateLimit\": {\n                        \"type\": \"EffectiveRateLimit\",\n                        \"id\": 7,\n                        \"protoName\": \"effective_rate_limit\"\n                      },\n                      \"taskQueueStatus\": {\n                        \"type\": \"temporal.api.taskqueue.v1.TaskQueueStatus\",\n                        \"id\": 2,\n                        \"protoName\": \"task_queue_status\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"versionsInfo\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"temporal.api.taskqueue.v1.TaskQueueVersionInfo\",\n                        \"id\": 3,\n                        \"protoName\": \"versions_info\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      }\n                    },\n                    \"nested\": {\n                      \"EffectiveRateLimit\": {\n                        \"fields\": {\n                          \"requestsPerSecond\": {\n                            \"type\": \"float\",\n                            \"id\": 1,\n                            \"protoName\": \"requests_per_second\"\n                          },\n                          \"rateLimitSource\": {\n                            \"type\": \"temporal.api.enums.v1.RateLimitSource\",\n                            \"id\": 2,\n                            \"protoName\": \"rate_limit_source\"\n                          }\n                        }\n                      }\n                    }\n                  },\n                  \"GetClusterInfoRequest\": {\n                    \"fields\": {}\n                  },\n                  \"GetClusterInfoResponse\": {\n                    \"fields\": {\n                      \"supportedClients\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"supported_clients\"\n                      },\n                      \"serverVersion\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"server_version\"\n                      },\n                      \"clusterId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"cluster_id\"\n                      },\n                      \"versionInfo\": {\n                        \"type\": \"temporal.api.version.v1.VersionInfo\",\n                        \"id\": 4,\n                        \"protoName\": \"version_info\"\n                      },\n                      \"clusterName\": {\n                        \"type\": \"string\",\n                        \"id\": 5,\n                        \"protoName\": \"cluster_name\"\n                      },\n                      \"historyShardCount\": {\n                        \"type\": \"int32\",\n                        \"id\": 6,\n                        \"protoName\": \"history_shard_count\"\n                      },\n                      \"persistenceStore\": {\n                        \"type\": \"string\",\n                        \"id\": 7,\n                        \"protoName\": \"persistence_store\"\n                      },\n                      \"visibilityStore\": {\n                        \"type\": \"string\",\n                        \"id\": 8,\n                        \"protoName\": \"visibility_store\"\n                      },\n                      \"initialFailoverVersion\": {\n                        \"type\": \"int64\",\n                        \"id\": 9,\n                        \"protoName\": \"initial_failover_version\"\n                      },\n                      \"failoverVersionIncrement\": {\n                        \"type\": \"int64\",\n                        \"id\": 10,\n                        \"protoName\": \"failover_version_increment\"\n                      }\n                    }\n                  },\n                  \"GetSystemInfoRequest\": {\n                    \"fields\": {}\n                  },\n                  \"GetSystemInfoResponse\": {\n                    \"fields\": {\n                      \"serverVersion\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"server_version\"\n                      },\n                      \"capabilities\": {\n                        \"type\": \"Capabilities\",\n                        \"id\": 2\n                      }\n                    },\n                    \"nested\": {\n                      \"Capabilities\": {\n                        \"fields\": {\n                          \"signalAndQueryHeader\": {\n                            \"type\": \"bool\",\n                            \"id\": 1,\n                            \"protoName\": \"signal_and_query_header\"\n                          },\n                          \"internalErrorDifferentiation\": {\n                            \"type\": \"bool\",\n                            \"id\": 2,\n                            \"protoName\": \"internal_error_differentiation\"\n                          },\n                          \"activityFailureIncludeHeartbeat\": {\n                            \"type\": \"bool\",\n                            \"id\": 3,\n                            \"protoName\": \"activity_failure_include_heartbeat\"\n                          },\n                          \"supportsSchedules\": {\n                            \"type\": \"bool\",\n                            \"id\": 4,\n                            \"protoName\": \"supports_schedules\"\n                          },\n                          \"encodedFailureAttributes\": {\n                            \"type\": \"bool\",\n                            \"id\": 5,\n                            \"protoName\": \"encoded_failure_attributes\"\n                          },\n                          \"buildIdBasedVersioning\": {\n                            \"type\": \"bool\",\n                            \"id\": 6,\n                            \"protoName\": \"build_id_based_versioning\"\n                          },\n                          \"upsertMemo\": {\n                            \"type\": \"bool\",\n                            \"id\": 7,\n                            \"protoName\": \"upsert_memo\"\n                          },\n                          \"eagerWorkflowStart\": {\n                            \"type\": \"bool\",\n                            \"id\": 8,\n                            \"protoName\": \"eager_workflow_start\"\n                          },\n                          \"sdkMetadata\": {\n                            \"type\": \"bool\",\n                            \"id\": 9,\n                            \"protoName\": \"sdk_metadata\"\n                          },\n                          \"countGroupByExecutionStatus\": {\n                            \"type\": \"bool\",\n                            \"id\": 10,\n                            \"protoName\": \"count_group_by_execution_status\"\n                          },\n                          \"nexus\": {\n                            \"type\": \"bool\",\n                            \"id\": 11\n                          },\n                          \"serverScaledDeployments\": {\n                            \"type\": \"bool\",\n                            \"id\": 12,\n                            \"protoName\": \"server_scaled_deployments\"\n                          },\n                          \"serverScaledProviderCloudRun\": {\n                            \"type\": \"bool\",\n                            \"id\": 13,\n                            \"protoName\": \"server_scaled_provider_cloud_run\"\n                          }\n                        }\n                      }\n                    }\n                  },\n                  \"ListTaskQueuePartitionsRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"taskQueue\": {\n                        \"type\": \"temporal.api.taskqueue.v1.TaskQueue\",\n                        \"id\": 2,\n                        \"protoName\": \"task_queue\"\n                      }\n                    }\n                  },\n                  \"ListTaskQueuePartitionsResponse\": {\n                    \"fields\": {\n                      \"activityTaskQueuePartitions\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.taskqueue.v1.TaskQueuePartitionMetadata\",\n                        \"id\": 1,\n                        \"protoName\": \"activity_task_queue_partitions\"\n                      },\n                      \"workflowTaskQueuePartitions\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.taskqueue.v1.TaskQueuePartitionMetadata\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_task_queue_partitions\"\n                      }\n                    }\n                  },\n                  \"CreateScheduleRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"scheduleId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"schedule_id\"\n                      },\n                      \"schedule\": {\n                        \"type\": \"temporal.api.schedule.v1.Schedule\",\n                        \"id\": 3\n                      },\n                      \"initialPatch\": {\n                        \"type\": \"temporal.api.schedule.v1.SchedulePatch\",\n                        \"id\": 4,\n                        \"protoName\": \"initial_patch\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 5\n                      },\n                      \"requestId\": {\n                        \"type\": \"string\",\n                        \"id\": 6,\n                        \"protoName\": \"request_id\"\n                      },\n                      \"memo\": {\n                        \"type\": \"temporal.api.common.v1.Memo\",\n                        \"id\": 7\n                      },\n                      \"searchAttributes\": {\n                        \"type\": \"temporal.api.common.v1.SearchAttributes\",\n                        \"id\": 8,\n                        \"protoName\": \"search_attributes\"\n                      }\n                    }\n                  },\n                  \"CreateScheduleResponse\": {\n                    \"fields\": {\n                      \"conflictToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 1,\n                        \"protoName\": \"conflict_token\"\n                      }\n                    }\n                  },\n                  \"DescribeScheduleRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"scheduleId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"schedule_id\"\n                      }\n                    }\n                  },\n                  \"DescribeScheduleResponse\": {\n                    \"fields\": {\n                      \"schedule\": {\n                        \"type\": \"temporal.api.schedule.v1.Schedule\",\n                        \"id\": 1\n                      },\n                      \"info\": {\n                        \"type\": \"temporal.api.schedule.v1.ScheduleInfo\",\n                        \"id\": 2\n                      },\n                      \"memo\": {\n                        \"type\": \"temporal.api.common.v1.Memo\",\n                        \"id\": 3\n                      },\n                      \"searchAttributes\": {\n                        \"type\": \"temporal.api.common.v1.SearchAttributes\",\n                        \"id\": 4,\n                        \"protoName\": \"search_attributes\"\n                      },\n                      \"conflictToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 5,\n                        \"protoName\": \"conflict_token\"\n                      }\n                    }\n                  },\n                  \"UpdateScheduleRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"scheduleId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"schedule_id\"\n                      },\n                      \"schedule\": {\n                        \"type\": \"temporal.api.schedule.v1.Schedule\",\n                        \"id\": 3\n                      },\n                      \"conflictToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 4,\n                        \"protoName\": \"conflict_token\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 5\n                      },\n                      \"requestId\": {\n                        \"type\": \"string\",\n                        \"id\": 6,\n                        \"protoName\": \"request_id\"\n                      },\n                      \"searchAttributes\": {\n                        \"type\": \"temporal.api.common.v1.SearchAttributes\",\n                        \"id\": 7,\n                        \"protoName\": \"search_attributes\"\n                      },\n                      \"memo\": {\n                        \"type\": \"temporal.api.common.v1.Memo\",\n                        \"id\": 8\n                      }\n                    }\n                  },\n                  \"UpdateScheduleResponse\": {\n                    \"fields\": {}\n                  },\n                  \"PatchScheduleRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"scheduleId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"schedule_id\"\n                      },\n                      \"patch\": {\n                        \"type\": \"temporal.api.schedule.v1.SchedulePatch\",\n                        \"id\": 3\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 4\n                      },\n                      \"requestId\": {\n                        \"type\": \"string\",\n                        \"id\": 5,\n                        \"protoName\": \"request_id\"\n                      }\n                    }\n                  },\n                  \"PatchScheduleResponse\": {\n                    \"fields\": {}\n                  },\n                  \"ListScheduleMatchingTimesRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"scheduleId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"schedule_id\"\n                      },\n                      \"startTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 3,\n                        \"protoName\": \"start_time\"\n                      },\n                      \"endTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 4,\n                        \"protoName\": \"end_time\"\n                      }\n                    }\n                  },\n                  \"ListScheduleMatchingTimesResponse\": {\n                    \"fields\": {\n                      \"startTime\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 1,\n                        \"protoName\": \"start_time\"\n                      }\n                    }\n                  },\n                  \"DeleteScheduleRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"scheduleId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"schedule_id\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      }\n                    }\n                  },\n                  \"DeleteScheduleResponse\": {\n                    \"fields\": {}\n                  },\n                  \"ListSchedulesRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"maximumPageSize\": {\n                        \"type\": \"int32\",\n                        \"id\": 2,\n                        \"protoName\": \"maximum_page_size\"\n                      },\n                      \"nextPageToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 3,\n                        \"protoName\": \"next_page_token\"\n                      },\n                      \"query\": {\n                        \"type\": \"string\",\n                        \"id\": 4\n                      }\n                    }\n                  },\n                  \"ListSchedulesResponse\": {\n                    \"fields\": {\n                      \"schedules\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.schedule.v1.ScheduleListEntry\",\n                        \"id\": 1\n                      },\n                      \"nextPageToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 2,\n                        \"protoName\": \"next_page_token\"\n                      }\n                    }\n                  },\n                  \"CountSchedulesRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"query\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      }\n                    }\n                  },\n                  \"CountSchedulesResponse\": {\n                    \"fields\": {\n                      \"count\": {\n                        \"type\": \"int64\",\n                        \"id\": 1\n                      },\n                      \"groups\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"AggregationGroup\",\n                        \"id\": 2\n                      }\n                    },\n                    \"nested\": {\n                      \"AggregationGroup\": {\n                        \"fields\": {\n                          \"groupValues\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"temporal.api.common.v1.Payload\",\n                            \"id\": 1,\n                            \"protoName\": \"group_values\"\n                          },\n                          \"count\": {\n                            \"type\": \"int64\",\n                            \"id\": 2\n                          }\n                        }\n                      }\n                    }\n                  },\n                  \"UpdateWorkerBuildIdCompatibilityRequest\": {\n                    \"oneofs\": {\n                      \"operation\": {\n                        \"oneof\": [\n                          \"addNewBuildIdInNewDefaultSet\",\n                          \"addNewCompatibleBuildId\",\n                          \"promoteSetByBuildId\",\n                          \"promoteBuildIdWithinSet\",\n                          \"mergeSets\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"taskQueue\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"task_queue\"\n                      },\n                      \"addNewBuildIdInNewDefaultSet\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"add_new_build_id_in_new_default_set\"\n                      },\n                      \"addNewCompatibleBuildId\": {\n                        \"type\": \"AddNewCompatibleVersion\",\n                        \"id\": 4,\n                        \"protoName\": \"add_new_compatible_build_id\"\n                      },\n                      \"promoteSetByBuildId\": {\n                        \"type\": \"string\",\n                        \"id\": 5,\n                        \"protoName\": \"promote_set_by_build_id\"\n                      },\n                      \"promoteBuildIdWithinSet\": {\n                        \"type\": \"string\",\n                        \"id\": 6,\n                        \"protoName\": \"promote_build_id_within_set\"\n                      },\n                      \"mergeSets\": {\n                        \"type\": \"MergeSets\",\n                        \"id\": 7,\n                        \"protoName\": \"merge_sets\"\n                      }\n                    },\n                    \"nested\": {\n                      \"AddNewCompatibleVersion\": {\n                        \"fields\": {\n                          \"newBuildId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"new_build_id\"\n                          },\n                          \"existingCompatibleBuildId\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"existing_compatible_build_id\"\n                          },\n                          \"makeSetDefault\": {\n                            \"type\": \"bool\",\n                            \"id\": 3,\n                            \"protoName\": \"make_set_default\"\n                          }\n                        }\n                      },\n                      \"MergeSets\": {\n                        \"fields\": {\n                          \"primarySetBuildId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"primary_set_build_id\"\n                          },\n                          \"secondarySetBuildId\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"secondary_set_build_id\"\n                          }\n                        }\n                      }\n                    }\n                  },\n                  \"UpdateWorkerBuildIdCompatibilityResponse\": {\n                    \"fields\": {},\n                    \"reserved\": [\n                      [\n                        1,\n                        1\n                      ],\n                      \"version_set_id\"\n                    ]\n                  },\n                  \"GetWorkerBuildIdCompatibilityRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"taskQueue\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"task_queue\"\n                      },\n                      \"maxSets\": {\n                        \"type\": \"int32\",\n                        \"id\": 3,\n                        \"protoName\": \"max_sets\"\n                      }\n                    }\n                  },\n                  \"GetWorkerBuildIdCompatibilityResponse\": {\n                    \"fields\": {\n                      \"majorVersionSets\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.taskqueue.v1.CompatibleVersionSet\",\n                        \"id\": 1,\n                        \"protoName\": \"major_version_sets\"\n                      }\n                    }\n                  },\n                  \"UpdateWorkerVersioningRulesRequest\": {\n                    \"oneofs\": {\n                      \"operation\": {\n                        \"oneof\": [\n                          \"insertAssignmentRule\",\n                          \"replaceAssignmentRule\",\n                          \"deleteAssignmentRule\",\n                          \"addCompatibleRedirectRule\",\n                          \"replaceCompatibleRedirectRule\",\n                          \"deleteCompatibleRedirectRule\",\n                          \"commitBuildId\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"taskQueue\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"task_queue\"\n                      },\n                      \"conflictToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 3,\n                        \"protoName\": \"conflict_token\"\n                      },\n                      \"insertAssignmentRule\": {\n                        \"type\": \"InsertBuildIdAssignmentRule\",\n                        \"id\": 4,\n                        \"protoName\": \"insert_assignment_rule\"\n                      },\n                      \"replaceAssignmentRule\": {\n                        \"type\": \"ReplaceBuildIdAssignmentRule\",\n                        \"id\": 5,\n                        \"protoName\": \"replace_assignment_rule\"\n                      },\n                      \"deleteAssignmentRule\": {\n                        \"type\": \"DeleteBuildIdAssignmentRule\",\n                        \"id\": 6,\n                        \"protoName\": \"delete_assignment_rule\"\n                      },\n                      \"addCompatibleRedirectRule\": {\n                        \"type\": \"AddCompatibleBuildIdRedirectRule\",\n                        \"id\": 7,\n                        \"protoName\": \"add_compatible_redirect_rule\"\n                      },\n                      \"replaceCompatibleRedirectRule\": {\n                        \"type\": \"ReplaceCompatibleBuildIdRedirectRule\",\n                        \"id\": 8,\n                        \"protoName\": \"replace_compatible_redirect_rule\"\n                      },\n                      \"deleteCompatibleRedirectRule\": {\n                        \"type\": \"DeleteCompatibleBuildIdRedirectRule\",\n                        \"id\": 9,\n                        \"protoName\": \"delete_compatible_redirect_rule\"\n                      },\n                      \"commitBuildId\": {\n                        \"type\": \"CommitBuildId\",\n                        \"id\": 10,\n                        \"protoName\": \"commit_build_id\"\n                      }\n                    },\n                    \"nested\": {\n                      \"InsertBuildIdAssignmentRule\": {\n                        \"fields\": {\n                          \"ruleIndex\": {\n                            \"type\": \"int32\",\n                            \"id\": 1,\n                            \"protoName\": \"rule_index\"\n                          },\n                          \"rule\": {\n                            \"type\": \"temporal.api.taskqueue.v1.BuildIdAssignmentRule\",\n                            \"id\": 2\n                          }\n                        }\n                      },\n                      \"ReplaceBuildIdAssignmentRule\": {\n                        \"fields\": {\n                          \"ruleIndex\": {\n                            \"type\": \"int32\",\n                            \"id\": 1,\n                            \"protoName\": \"rule_index\"\n                          },\n                          \"rule\": {\n                            \"type\": \"temporal.api.taskqueue.v1.BuildIdAssignmentRule\",\n                            \"id\": 2\n                          },\n                          \"force\": {\n                            \"type\": \"bool\",\n                            \"id\": 3\n                          }\n                        }\n                      },\n                      \"DeleteBuildIdAssignmentRule\": {\n                        \"fields\": {\n                          \"ruleIndex\": {\n                            \"type\": \"int32\",\n                            \"id\": 1,\n                            \"protoName\": \"rule_index\"\n                          },\n                          \"force\": {\n                            \"type\": \"bool\",\n                            \"id\": 2\n                          }\n                        }\n                      },\n                      \"AddCompatibleBuildIdRedirectRule\": {\n                        \"fields\": {\n                          \"rule\": {\n                            \"type\": \"temporal.api.taskqueue.v1.CompatibleBuildIdRedirectRule\",\n                            \"id\": 1\n                          }\n                        }\n                      },\n                      \"ReplaceCompatibleBuildIdRedirectRule\": {\n                        \"fields\": {\n                          \"rule\": {\n                            \"type\": \"temporal.api.taskqueue.v1.CompatibleBuildIdRedirectRule\",\n                            \"id\": 1\n                          }\n                        }\n                      },\n                      \"DeleteCompatibleBuildIdRedirectRule\": {\n                        \"fields\": {\n                          \"sourceBuildId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"source_build_id\"\n                          }\n                        }\n                      },\n                      \"CommitBuildId\": {\n                        \"fields\": {\n                          \"targetBuildId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"target_build_id\"\n                          },\n                          \"force\": {\n                            \"type\": \"bool\",\n                            \"id\": 2\n                          }\n                        }\n                      }\n                    }\n                  },\n                  \"UpdateWorkerVersioningRulesResponse\": {\n                    \"fields\": {\n                      \"assignmentRules\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.taskqueue.v1.TimestampedBuildIdAssignmentRule\",\n                        \"id\": 1,\n                        \"protoName\": \"assignment_rules\"\n                      },\n                      \"compatibleRedirectRules\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.taskqueue.v1.TimestampedCompatibleBuildIdRedirectRule\",\n                        \"id\": 2,\n                        \"protoName\": \"compatible_redirect_rules\"\n                      },\n                      \"conflictToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 3,\n                        \"protoName\": \"conflict_token\"\n                      }\n                    }\n                  },\n                  \"GetWorkerVersioningRulesRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"taskQueue\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"task_queue\"\n                      }\n                    }\n                  },\n                  \"GetWorkerVersioningRulesResponse\": {\n                    \"fields\": {\n                      \"assignmentRules\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.taskqueue.v1.TimestampedBuildIdAssignmentRule\",\n                        \"id\": 1,\n                        \"protoName\": \"assignment_rules\"\n                      },\n                      \"compatibleRedirectRules\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.taskqueue.v1.TimestampedCompatibleBuildIdRedirectRule\",\n                        \"id\": 2,\n                        \"protoName\": \"compatible_redirect_rules\"\n                      },\n                      \"conflictToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 3,\n                        \"protoName\": \"conflict_token\"\n                      }\n                    }\n                  },\n                  \"GetWorkerTaskReachabilityRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"buildIds\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"build_ids\"\n                      },\n                      \"taskQueues\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"task_queues\"\n                      },\n                      \"reachability\": {\n                        \"type\": \"temporal.api.enums.v1.TaskReachability\",\n                        \"id\": 4\n                      }\n                    }\n                  },\n                  \"GetWorkerTaskReachabilityResponse\": {\n                    \"fields\": {\n                      \"buildIdReachability\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.taskqueue.v1.BuildIdReachability\",\n                        \"id\": 1,\n                        \"protoName\": \"build_id_reachability\"\n                      }\n                    }\n                  },\n                  \"UpdateWorkflowExecutionRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"workflowExecution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_execution\"\n                      },\n                      \"firstExecutionRunId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"first_execution_run_id\"\n                      },\n                      \"waitPolicy\": {\n                        \"type\": \"temporal.api.update.v1.WaitPolicy\",\n                        \"id\": 4,\n                        \"protoName\": \"wait_policy\"\n                      },\n                      \"request\": {\n                        \"type\": \"temporal.api.update.v1.Request\",\n                        \"id\": 5\n                      }\n                    }\n                  },\n                  \"UpdateWorkflowExecutionResponse\": {\n                    \"fields\": {\n                      \"updateRef\": {\n                        \"type\": \"temporal.api.update.v1.UpdateRef\",\n                        \"id\": 1,\n                        \"protoName\": \"update_ref\"\n                      },\n                      \"outcome\": {\n                        \"type\": \"temporal.api.update.v1.Outcome\",\n                        \"id\": 2\n                      },\n                      \"stage\": {\n                        \"type\": \"temporal.api.enums.v1.UpdateWorkflowExecutionLifecycleStage\",\n                        \"id\": 3\n                      },\n                      \"link\": {\n                        \"type\": \"temporal.api.common.v1.Link\",\n                        \"id\": 4\n                      }\n                    }\n                  },\n                  \"StartBatchOperationRequest\": {\n                    \"oneofs\": {\n                      \"operation\": {\n                        \"oneof\": [\n                          \"terminationOperation\",\n                          \"signalOperation\",\n                          \"cancellationOperation\",\n                          \"deletionOperation\",\n                          \"resetOperation\",\n                          \"updateWorkflowOptionsOperation\",\n                          \"unpauseActivitiesOperation\",\n                          \"resetActivitiesOperation\",\n                          \"updateActivityOptionsOperation\",\n                          \"cancelActivitiesOperation\",\n                          \"terminateActivitiesOperation\",\n                          \"deleteActivitiesOperation\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"visibilityQuery\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"visibility_query\"\n                      },\n                      \"jobId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"job_id\"\n                      },\n                      \"reason\": {\n                        \"type\": \"string\",\n                        \"id\": 4\n                      },\n                      \"executions\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 5,\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"targetExecutions\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.common.v1.Execution\",\n                        \"id\": 22,\n                        \"protoName\": \"target_executions\"\n                      },\n                      \"maxOperationsPerSecond\": {\n                        \"type\": \"float\",\n                        \"id\": 6,\n                        \"protoName\": \"max_operations_per_second\"\n                      },\n                      \"terminationOperation\": {\n                        \"type\": \"temporal.api.batch.v1.BatchOperationTermination\",\n                        \"id\": 10,\n                        \"protoName\": \"termination_operation\"\n                      },\n                      \"signalOperation\": {\n                        \"type\": \"temporal.api.batch.v1.BatchOperationSignal\",\n                        \"id\": 11,\n                        \"protoName\": \"signal_operation\"\n                      },\n                      \"cancellationOperation\": {\n                        \"type\": \"temporal.api.batch.v1.BatchOperationCancellation\",\n                        \"id\": 12,\n                        \"protoName\": \"cancellation_operation\"\n                      },\n                      \"deletionOperation\": {\n                        \"type\": \"temporal.api.batch.v1.BatchOperationDeletion\",\n                        \"id\": 13,\n                        \"protoName\": \"deletion_operation\"\n                      },\n                      \"resetOperation\": {\n                        \"type\": \"temporal.api.batch.v1.BatchOperationReset\",\n                        \"id\": 14,\n                        \"protoName\": \"reset_operation\"\n                      },\n                      \"updateWorkflowOptionsOperation\": {\n                        \"type\": \"temporal.api.batch.v1.BatchOperationUpdateWorkflowExecutionOptions\",\n                        \"id\": 15,\n                        \"protoName\": \"update_workflow_options_operation\"\n                      },\n                      \"unpauseActivitiesOperation\": {\n                        \"type\": \"temporal.api.batch.v1.BatchOperationUnpauseActivities\",\n                        \"id\": 16,\n                        \"protoName\": \"unpause_activities_operation\"\n                      },\n                      \"resetActivitiesOperation\": {\n                        \"type\": \"temporal.api.batch.v1.BatchOperationResetActivities\",\n                        \"id\": 17,\n                        \"protoName\": \"reset_activities_operation\"\n                      },\n                      \"updateActivityOptionsOperation\": {\n                        \"type\": \"temporal.api.batch.v1.BatchOperationUpdateActivityOptions\",\n                        \"id\": 18,\n                        \"protoName\": \"update_activity_options_operation\"\n                      },\n                      \"cancelActivitiesOperation\": {\n                        \"type\": \"temporal.api.batch.v1.BatchOperationCancelActivities\",\n                        \"id\": 19,\n                        \"protoName\": \"cancel_activities_operation\"\n                      },\n                      \"terminateActivitiesOperation\": {\n                        \"type\": \"temporal.api.batch.v1.BatchOperationTerminateActivities\",\n                        \"id\": 20,\n                        \"protoName\": \"terminate_activities_operation\"\n                      },\n                      \"deleteActivitiesOperation\": {\n                        \"type\": \"temporal.api.batch.v1.BatchOperationDeleteActivities\",\n                        \"id\": 21,\n                        \"protoName\": \"delete_activities_operation\"\n                      }\n                    }\n                  },\n                  \"StartBatchOperationResponse\": {\n                    \"fields\": {}\n                  },\n                  \"StopBatchOperationRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"jobId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"job_id\"\n                      },\n                      \"reason\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 4\n                      }\n                    }\n                  },\n                  \"StopBatchOperationResponse\": {\n                    \"fields\": {}\n                  },\n                  \"DescribeBatchOperationRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"jobId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"job_id\"\n                      }\n                    }\n                  },\n                  \"DescribeBatchOperationResponse\": {\n                    \"fields\": {\n                      \"operationType\": {\n                        \"type\": \"temporal.api.enums.v1.BatchOperationType\",\n                        \"id\": 1,\n                        \"protoName\": \"operation_type\"\n                      },\n                      \"jobId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"job_id\"\n                      },\n                      \"state\": {\n                        \"type\": \"temporal.api.enums.v1.BatchOperationState\",\n                        \"id\": 3\n                      },\n                      \"startTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 4,\n                        \"protoName\": \"start_time\"\n                      },\n                      \"closeTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 5,\n                        \"protoName\": \"close_time\"\n                      },\n                      \"totalOperationCount\": {\n                        \"type\": \"int64\",\n                        \"id\": 6,\n                        \"protoName\": \"total_operation_count\"\n                      },\n                      \"completeOperationCount\": {\n                        \"type\": \"int64\",\n                        \"id\": 7,\n                        \"protoName\": \"complete_operation_count\"\n                      },\n                      \"failureOperationCount\": {\n                        \"type\": \"int64\",\n                        \"id\": 8,\n                        \"protoName\": \"failure_operation_count\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 9\n                      },\n                      \"reason\": {\n                        \"type\": \"string\",\n                        \"id\": 10\n                      },\n                      \"query\": {\n                        \"type\": \"string\",\n                        \"id\": 11\n                      },\n                      \"executions\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.common.v1.Execution\",\n                        \"id\": 12\n                      }\n                    }\n                  },\n                  \"ListBatchOperationsRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"pageSize\": {\n                        \"type\": \"int32\",\n                        \"id\": 2,\n                        \"protoName\": \"page_size\"\n                      },\n                      \"nextPageToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 3,\n                        \"protoName\": \"next_page_token\"\n                      }\n                    }\n                  },\n                  \"ListBatchOperationsResponse\": {\n                    \"fields\": {\n                      \"operationInfo\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.batch.v1.BatchOperationInfo\",\n                        \"id\": 1,\n                        \"protoName\": \"operation_info\"\n                      },\n                      \"nextPageToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 2,\n                        \"protoName\": \"next_page_token\"\n                      }\n                    }\n                  },\n                  \"PollWorkflowExecutionUpdateRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"updateRef\": {\n                        \"type\": \"temporal.api.update.v1.UpdateRef\",\n                        \"id\": 2,\n                        \"protoName\": \"update_ref\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"waitPolicy\": {\n                        \"type\": \"temporal.api.update.v1.WaitPolicy\",\n                        \"id\": 4,\n                        \"protoName\": \"wait_policy\"\n                      }\n                    }\n                  },\n                  \"PollWorkflowExecutionUpdateResponse\": {\n                    \"fields\": {\n                      \"outcome\": {\n                        \"type\": \"temporal.api.update.v1.Outcome\",\n                        \"id\": 1\n                      },\n                      \"stage\": {\n                        \"type\": \"temporal.api.enums.v1.UpdateWorkflowExecutionLifecycleStage\",\n                        \"id\": 2\n                      },\n                      \"updateRef\": {\n                        \"type\": \"temporal.api.update.v1.UpdateRef\",\n                        \"id\": 3,\n                        \"protoName\": \"update_ref\"\n                      }\n                    }\n                  },\n                  \"PollNexusTaskQueueRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"taskQueue\": {\n                        \"type\": \"temporal.api.taskqueue.v1.TaskQueue\",\n                        \"id\": 3,\n                        \"protoName\": \"task_queue\"\n                      },\n                      \"pollerGroupId\": {\n                        \"type\": \"string\",\n                        \"id\": 9,\n                        \"protoName\": \"poller_group_id\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"workerInstanceKey\": {\n                        \"type\": \"string\",\n                        \"id\": 8,\n                        \"protoName\": \"worker_instance_key\"\n                      },\n                      \"workerVersionCapabilities\": {\n                        \"type\": \"temporal.api.common.v1.WorkerVersionCapabilities\",\n                        \"id\": 4,\n                        \"protoName\": \"worker_version_capabilities\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"deploymentOptions\": {\n                        \"type\": \"temporal.api.deployment.v1.WorkerDeploymentOptions\",\n                        \"id\": 6,\n                        \"protoName\": \"deployment_options\"\n                      },\n                      \"workerHeartbeat\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.worker.v1.WorkerHeartbeat\",\n                        \"id\": 7,\n                        \"protoName\": \"worker_heartbeat\"\n                      }\n                    }\n                  },\n                  \"PollNexusTaskQueueResponse\": {\n                    \"fields\": {\n                      \"taskToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 1,\n                        \"protoName\": \"task_token\"\n                      },\n                      \"request\": {\n                        \"type\": \"temporal.api.nexus.v1.Request\",\n                        \"id\": 2\n                      },\n                      \"pollerScalingDecision\": {\n                        \"type\": \"temporal.api.taskqueue.v1.PollerScalingDecision\",\n                        \"id\": 3,\n                        \"protoName\": \"poller_scaling_decision\"\n                      },\n                      \"pollerGroupId\": {\n                        \"type\": \"string\",\n                        \"id\": 4,\n                        \"protoName\": \"poller_group_id\"\n                      },\n                      \"pollerGroupInfos\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.taskqueue.v1.PollerGroupInfo\",\n                        \"id\": 5,\n                        \"protoName\": \"poller_group_infos\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"pollerGroupsInfo\": {\n                        \"type\": \"temporal.api.taskqueue.v1.PollerGroupsInfo\",\n                        \"id\": 6,\n                        \"protoName\": \"poller_groups_info\"\n                      }\n                    }\n                  },\n                  \"RespondNexusTaskCompletedRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"taskToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 3,\n                        \"protoName\": \"task_token\"\n                      },\n                      \"response\": {\n                        \"type\": \"temporal.api.nexus.v1.Response\",\n                        \"id\": 4\n                      },\n                      \"pollerGroupId\": {\n                        \"type\": \"string\",\n                        \"id\": 5,\n                        \"protoName\": \"poller_group_id\"\n                      }\n                    }\n                  },\n                  \"RespondNexusTaskCompletedResponse\": {\n                    \"fields\": {}\n                  },\n                  \"RespondNexusTaskFailedRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"taskToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 3,\n                        \"protoName\": \"task_token\"\n                      },\n                      \"error\": {\n                        \"type\": \"temporal.api.nexus.v1.HandlerError\",\n                        \"id\": 4,\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"failure\": {\n                        \"type\": \"temporal.api.failure.v1.Failure\",\n                        \"id\": 5\n                      },\n                      \"pollerGroupId\": {\n                        \"type\": \"string\",\n                        \"id\": 6,\n                        \"protoName\": \"poller_group_id\"\n                      }\n                    }\n                  },\n                  \"RespondNexusTaskFailedResponse\": {\n                    \"fields\": {}\n                  },\n                  \"ExecuteMultiOperationRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"operations\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"Operation\",\n                        \"id\": 2\n                      },\n                      \"resourceId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"resource_id\"\n                      }\n                    },\n                    \"nested\": {\n                      \"Operation\": {\n                        \"oneofs\": {\n                          \"operation\": {\n                            \"oneof\": [\n                              \"startWorkflow\",\n                              \"updateWorkflow\"\n                            ]\n                          }\n                        },\n                        \"fields\": {\n                          \"startWorkflow\": {\n                            \"type\": \"StartWorkflowExecutionRequest\",\n                            \"id\": 1,\n                            \"protoName\": \"start_workflow\"\n                          },\n                          \"updateWorkflow\": {\n                            \"type\": \"UpdateWorkflowExecutionRequest\",\n                            \"id\": 2,\n                            \"protoName\": \"update_workflow\"\n                          }\n                        }\n                      }\n                    }\n                  },\n                  \"ExecuteMultiOperationResponse\": {\n                    \"fields\": {\n                      \"responses\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"Response\",\n                        \"id\": 1\n                      }\n                    },\n                    \"nested\": {\n                      \"Response\": {\n                        \"oneofs\": {\n                          \"response\": {\n                            \"oneof\": [\n                              \"startWorkflow\",\n                              \"updateWorkflow\"\n                            ]\n                          }\n                        },\n                        \"fields\": {\n                          \"startWorkflow\": {\n                            \"type\": \"StartWorkflowExecutionResponse\",\n                            \"id\": 1,\n                            \"protoName\": \"start_workflow\"\n                          },\n                          \"updateWorkflow\": {\n                            \"type\": \"UpdateWorkflowExecutionResponse\",\n                            \"id\": 2,\n                            \"protoName\": \"update_workflow\"\n                          }\n                        }\n                      }\n                    }\n                  },\n                  \"UpdateActivityOptionsRequest\": {\n                    \"oneofs\": {\n                      \"activity\": {\n                        \"oneof\": [\n                          \"id\",\n                          \"type\",\n                          \"matchAll\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"execution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 2\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"activityOptions\": {\n                        \"type\": \"temporal.api.activity.v1.ActivityOptions\",\n                        \"id\": 4,\n                        \"protoName\": \"activity_options\"\n                      },\n                      \"updateMask\": {\n                        \"type\": \"google.protobuf.FieldMask\",\n                        \"id\": 5,\n                        \"protoName\": \"update_mask\"\n                      },\n                      \"id\": {\n                        \"type\": \"string\",\n                        \"id\": 6\n                      },\n                      \"type\": {\n                        \"type\": \"string\",\n                        \"id\": 7\n                      },\n                      \"matchAll\": {\n                        \"type\": \"bool\",\n                        \"id\": 9,\n                        \"protoName\": \"match_all\"\n                      },\n                      \"restoreOriginal\": {\n                        \"type\": \"bool\",\n                        \"id\": 8,\n                        \"protoName\": \"restore_original\"\n                      }\n                    }\n                  },\n                  \"UpdateActivityExecutionOptionsRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"workflowId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_id\"\n                      },\n                      \"activityId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"activity_id\"\n                      },\n                      \"runId\": {\n                        \"type\": \"string\",\n                        \"id\": 4,\n                        \"protoName\": \"run_id\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 5\n                      },\n                      \"activityOptions\": {\n                        \"type\": \"temporal.api.activity.v1.ActivityOptions\",\n                        \"id\": 6,\n                        \"protoName\": \"activity_options\"\n                      },\n                      \"updateMask\": {\n                        \"type\": \"google.protobuf.FieldMask\",\n                        \"id\": 7,\n                        \"protoName\": \"update_mask\"\n                      },\n                      \"restoreOriginal\": {\n                        \"type\": \"bool\",\n                        \"id\": 8,\n                        \"protoName\": \"restore_original\"\n                      },\n                      \"resourceId\": {\n                        \"type\": \"string\",\n                        \"id\": 9,\n                        \"protoName\": \"resource_id\"\n                      },\n                      \"requestId\": {\n                        \"type\": \"string\",\n                        \"id\": 10,\n                        \"protoName\": \"request_id\"\n                      }\n                    }\n                  },\n                  \"UpdateActivityOptionsResponse\": {\n                    \"fields\": {\n                      \"activityOptions\": {\n                        \"type\": \"temporal.api.activity.v1.ActivityOptions\",\n                        \"id\": 1,\n                        \"protoName\": \"activity_options\"\n                      }\n                    }\n                  },\n                  \"UpdateActivityExecutionOptionsResponse\": {\n                    \"fields\": {\n                      \"activityOptions\": {\n                        \"type\": \"temporal.api.activity.v1.ActivityOptions\",\n                        \"id\": 1,\n                        \"protoName\": \"activity_options\"\n                      }\n                    }\n                  },\n                  \"PauseActivityRequest\": {\n                    \"oneofs\": {\n                      \"activity\": {\n                        \"oneof\": [\n                          \"id\",\n                          \"type\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"execution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 2\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"id\": {\n                        \"type\": \"string\",\n                        \"id\": 4\n                      },\n                      \"type\": {\n                        \"type\": \"string\",\n                        \"id\": 5\n                      },\n                      \"reason\": {\n                        \"type\": \"string\",\n                        \"id\": 6\n                      },\n                      \"requestId\": {\n                        \"type\": \"string\",\n                        \"id\": 7,\n                        \"protoName\": \"request_id\"\n                      }\n                    }\n                  },\n                  \"PauseActivityExecutionRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"workflowId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_id\"\n                      },\n                      \"activityId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"activity_id\"\n                      },\n                      \"runId\": {\n                        \"type\": \"string\",\n                        \"id\": 4,\n                        \"protoName\": \"run_id\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 5\n                      },\n                      \"reason\": {\n                        \"type\": \"string\",\n                        \"id\": 6\n                      },\n                      \"resourceId\": {\n                        \"type\": \"string\",\n                        \"id\": 7,\n                        \"protoName\": \"resource_id\"\n                      },\n                      \"requestId\": {\n                        \"type\": \"string\",\n                        \"id\": 8,\n                        \"protoName\": \"request_id\"\n                      }\n                    }\n                  },\n                  \"PauseActivityResponse\": {\n                    \"fields\": {}\n                  },\n                  \"PauseActivityExecutionResponse\": {\n                    \"fields\": {}\n                  },\n                  \"UnpauseActivityRequest\": {\n                    \"oneofs\": {\n                      \"activity\": {\n                        \"oneof\": [\n                          \"id\",\n                          \"type\",\n                          \"unpauseAll\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"execution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 2\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"id\": {\n                        \"type\": \"string\",\n                        \"id\": 4\n                      },\n                      \"type\": {\n                        \"type\": \"string\",\n                        \"id\": 5\n                      },\n                      \"unpauseAll\": {\n                        \"type\": \"bool\",\n                        \"id\": 6,\n                        \"protoName\": \"unpause_all\"\n                      },\n                      \"resetAttempts\": {\n                        \"type\": \"bool\",\n                        \"id\": 7,\n                        \"protoName\": \"reset_attempts\"\n                      },\n                      \"resetHeartbeat\": {\n                        \"type\": \"bool\",\n                        \"id\": 8,\n                        \"protoName\": \"reset_heartbeat\"\n                      },\n                      \"jitter\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 9\n                      }\n                    }\n                  },\n                  \"UnpauseActivityExecutionRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"workflowId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_id\"\n                      },\n                      \"activityId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"activity_id\"\n                      },\n                      \"runId\": {\n                        \"type\": \"string\",\n                        \"id\": 4,\n                        \"protoName\": \"run_id\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 5\n                      },\n                      \"reason\": {\n                        \"type\": \"string\",\n                        \"id\": 8\n                      },\n                      \"jitter\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 9\n                      },\n                      \"resourceId\": {\n                        \"type\": \"string\",\n                        \"id\": 10,\n                        \"protoName\": \"resource_id\"\n                      },\n                      \"requestId\": {\n                        \"type\": \"string\",\n                        \"id\": 11,\n                        \"protoName\": \"request_id\"\n                      }\n                    },\n                    \"reserved\": [\n                      [\n                        6,\n                        6\n                      ],\n                      [\n                        7,\n                        7\n                      ],\n                      \"reset_attempts\",\n                      \"reset_heartbeat\"\n                    ]\n                  },\n                  \"UnpauseActivityResponse\": {\n                    \"fields\": {}\n                  },\n                  \"UnpauseActivityExecutionResponse\": {\n                    \"fields\": {}\n                  },\n                  \"ResetActivityRequest\": {\n                    \"oneofs\": {\n                      \"activity\": {\n                        \"oneof\": [\n                          \"id\",\n                          \"type\",\n                          \"matchAll\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"execution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 2\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"id\": {\n                        \"type\": \"string\",\n                        \"id\": 4\n                      },\n                      \"type\": {\n                        \"type\": \"string\",\n                        \"id\": 5\n                      },\n                      \"matchAll\": {\n                        \"type\": \"bool\",\n                        \"id\": 10,\n                        \"protoName\": \"match_all\"\n                      },\n                      \"resetHeartbeat\": {\n                        \"type\": \"bool\",\n                        \"id\": 6,\n                        \"protoName\": \"reset_heartbeat\"\n                      },\n                      \"keepPaused\": {\n                        \"type\": \"bool\",\n                        \"id\": 7,\n                        \"protoName\": \"keep_paused\"\n                      },\n                      \"jitter\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 8\n                      },\n                      \"restoreOriginalOptions\": {\n                        \"type\": \"bool\",\n                        \"id\": 9,\n                        \"protoName\": \"restore_original_options\"\n                      }\n                    }\n                  },\n                  \"ResetActivityExecutionRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"workflowId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_id\"\n                      },\n                      \"activityId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"activity_id\"\n                      },\n                      \"runId\": {\n                        \"type\": \"string\",\n                        \"id\": 4,\n                        \"protoName\": \"run_id\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 5\n                      },\n                      \"keepPaused\": {\n                        \"type\": \"bool\",\n                        \"id\": 6,\n                        \"protoName\": \"keep_paused\"\n                      },\n                      \"jitter\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 7\n                      },\n                      \"restoreOriginalOptions\": {\n                        \"type\": \"bool\",\n                        \"id\": 8,\n                        \"protoName\": \"restore_original_options\"\n                      },\n                      \"resourceId\": {\n                        \"type\": \"string\",\n                        \"id\": 9,\n                        \"protoName\": \"resource_id\"\n                      },\n                      \"requestId\": {\n                        \"type\": \"string\",\n                        \"id\": 10,\n                        \"protoName\": \"request_id\"\n                      },\n                      \"resetHeartbeat\": {\n                        \"type\": \"bool\",\n                        \"id\": 11,\n                        \"protoName\": \"reset_heartbeat\"\n                      }\n                    }\n                  },\n                  \"ResetActivityResponse\": {\n                    \"fields\": {}\n                  },\n                  \"ResetActivityExecutionResponse\": {\n                    \"fields\": {}\n                  },\n                  \"UpdateWorkflowExecutionOptionsRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"workflowExecution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_execution\"\n                      },\n                      \"workflowExecutionOptions\": {\n                        \"type\": \"temporal.api.workflow.v1.WorkflowExecutionOptions\",\n                        \"id\": 3,\n                        \"protoName\": \"workflow_execution_options\"\n                      },\n                      \"updateMask\": {\n                        \"type\": \"google.protobuf.FieldMask\",\n                        \"id\": 4,\n                        \"protoName\": \"update_mask\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 5\n                      }\n                    }\n                  },\n                  \"UpdateWorkflowExecutionOptionsResponse\": {\n                    \"fields\": {\n                      \"workflowExecutionOptions\": {\n                        \"type\": \"temporal.api.workflow.v1.WorkflowExecutionOptions\",\n                        \"id\": 1,\n                        \"protoName\": \"workflow_execution_options\"\n                      },\n                      \"updateTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 2,\n                        \"protoName\": \"update_time\"\n                      }\n                    }\n                  },\n                  \"DescribeDeploymentRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"deployment\": {\n                        \"type\": \"deployment.v1.Deployment\",\n                        \"id\": 2\n                      }\n                    }\n                  },\n                  \"DescribeDeploymentResponse\": {\n                    \"fields\": {\n                      \"deploymentInfo\": {\n                        \"type\": \"deployment.v1.DeploymentInfo\",\n                        \"id\": 1,\n                        \"protoName\": \"deployment_info\"\n                      }\n                    }\n                  },\n                  \"DescribeWorkerDeploymentVersionRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"version\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"deploymentVersion\": {\n                        \"type\": \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        \"id\": 3,\n                        \"protoName\": \"deployment_version\"\n                      },\n                      \"reportTaskQueueStats\": {\n                        \"type\": \"bool\",\n                        \"id\": 4,\n                        \"protoName\": \"report_task_queue_stats\"\n                      }\n                    }\n                  },\n                  \"DescribeWorkerDeploymentVersionResponse\": {\n                    \"fields\": {\n                      \"workerDeploymentVersionInfo\": {\n                        \"type\": \"temporal.api.deployment.v1.WorkerDeploymentVersionInfo\",\n                        \"id\": 1,\n                        \"protoName\": \"worker_deployment_version_info\"\n                      },\n                      \"versionTaskQueues\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"VersionTaskQueue\",\n                        \"id\": 2,\n                        \"protoName\": \"version_task_queues\"\n                      }\n                    },\n                    \"nested\": {\n                      \"VersionTaskQueue\": {\n                        \"fields\": {\n                          \"name\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"type\": {\n                            \"type\": \"temporal.api.enums.v1.TaskQueueType\",\n                            \"id\": 2\n                          },\n                          \"stats\": {\n                            \"type\": \"temporal.api.taskqueue.v1.TaskQueueStats\",\n                            \"id\": 3\n                          },\n                          \"statsByPriorityKey\": {\n                            \"keyType\": \"int32\",\n                            \"type\": \"temporal.api.taskqueue.v1.TaskQueueStats\",\n                            \"id\": 4,\n                            \"protoName\": \"stats_by_priority_key\"\n                          }\n                        }\n                      }\n                    }\n                  },\n                  \"DescribeWorkerDeploymentRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"deploymentName\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"deployment_name\"\n                      }\n                    }\n                  },\n                  \"DescribeWorkerDeploymentResponse\": {\n                    \"fields\": {\n                      \"conflictToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 1,\n                        \"protoName\": \"conflict_token\"\n                      },\n                      \"workerDeploymentInfo\": {\n                        \"type\": \"temporal.api.deployment.v1.WorkerDeploymentInfo\",\n                        \"id\": 2,\n                        \"protoName\": \"worker_deployment_info\"\n                      }\n                    }\n                  },\n                  \"ListDeploymentsRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"pageSize\": {\n                        \"type\": \"int32\",\n                        \"id\": 2,\n                        \"protoName\": \"page_size\"\n                      },\n                      \"nextPageToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 3,\n                        \"protoName\": \"next_page_token\"\n                      },\n                      \"seriesName\": {\n                        \"type\": \"string\",\n                        \"id\": 4,\n                        \"protoName\": \"series_name\"\n                      }\n                    }\n                  },\n                  \"ListDeploymentsResponse\": {\n                    \"fields\": {\n                      \"nextPageToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 1,\n                        \"protoName\": \"next_page_token\"\n                      },\n                      \"deployments\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.deployment.v1.DeploymentListInfo\",\n                        \"id\": 2\n                      }\n                    }\n                  },\n                  \"SetCurrentDeploymentRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"deployment\": {\n                        \"type\": \"temporal.api.deployment.v1.Deployment\",\n                        \"id\": 2\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"updateMetadata\": {\n                        \"type\": \"temporal.api.deployment.v1.UpdateDeploymentMetadata\",\n                        \"id\": 4,\n                        \"protoName\": \"update_metadata\"\n                      }\n                    }\n                  },\n                  \"SetCurrentDeploymentResponse\": {\n                    \"fields\": {\n                      \"currentDeploymentInfo\": {\n                        \"type\": \"temporal.api.deployment.v1.DeploymentInfo\",\n                        \"id\": 1,\n                        \"protoName\": \"current_deployment_info\"\n                      },\n                      \"previousDeploymentInfo\": {\n                        \"type\": \"temporal.api.deployment.v1.DeploymentInfo\",\n                        \"id\": 2,\n                        \"protoName\": \"previous_deployment_info\"\n                      }\n                    }\n                  },\n                  \"SetWorkerDeploymentCurrentVersionRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"deploymentName\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"deployment_name\"\n                      },\n                      \"version\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"buildId\": {\n                        \"type\": \"string\",\n                        \"id\": 7,\n                        \"protoName\": \"build_id\"\n                      },\n                      \"conflictToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 4,\n                        \"protoName\": \"conflict_token\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 5\n                      },\n                      \"ignoreMissingTaskQueues\": {\n                        \"type\": \"bool\",\n                        \"id\": 6,\n                        \"protoName\": \"ignore_missing_task_queues\"\n                      },\n                      \"allowNoPollers\": {\n                        \"type\": \"bool\",\n                        \"id\": 9,\n                        \"protoName\": \"allow_no_pollers\"\n                      }\n                    }\n                  },\n                  \"SetWorkerDeploymentCurrentVersionResponse\": {\n                    \"fields\": {\n                      \"conflictToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 1,\n                        \"protoName\": \"conflict_token\"\n                      },\n                      \"previousVersion\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"previous_version\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"previousDeploymentVersion\": {\n                        \"type\": \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        \"id\": 3,\n                        \"protoName\": \"previous_deployment_version\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      }\n                    }\n                  },\n                  \"SetWorkerDeploymentRampingVersionRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"deploymentName\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"deployment_name\"\n                      },\n                      \"version\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"buildId\": {\n                        \"type\": \"string\",\n                        \"id\": 8,\n                        \"protoName\": \"build_id\"\n                      },\n                      \"percentage\": {\n                        \"type\": \"float\",\n                        \"id\": 4\n                      },\n                      \"conflictToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 5,\n                        \"protoName\": \"conflict_token\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 6\n                      },\n                      \"ignoreMissingTaskQueues\": {\n                        \"type\": \"bool\",\n                        \"id\": 7,\n                        \"protoName\": \"ignore_missing_task_queues\"\n                      },\n                      \"allowNoPollers\": {\n                        \"type\": \"bool\",\n                        \"id\": 10,\n                        \"protoName\": \"allow_no_pollers\"\n                      }\n                    }\n                  },\n                  \"SetWorkerDeploymentRampingVersionResponse\": {\n                    \"fields\": {\n                      \"conflictToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 1,\n                        \"protoName\": \"conflict_token\"\n                      },\n                      \"previousVersion\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"previous_version\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"previousDeploymentVersion\": {\n                        \"type\": \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        \"id\": 4,\n                        \"protoName\": \"previous_deployment_version\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"previousPercentage\": {\n                        \"type\": \"float\",\n                        \"id\": 3,\n                        \"protoName\": \"previous_percentage\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      }\n                    }\n                  },\n                  \"CreateWorkerDeploymentRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"deploymentName\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"deployment_name\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 4\n                      },\n                      \"requestId\": {\n                        \"type\": \"string\",\n                        \"id\": 5,\n                        \"protoName\": \"request_id\"\n                      }\n                    }\n                  },\n                  \"CreateWorkerDeploymentResponse\": {\n                    \"fields\": {\n                      \"conflictToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 1,\n                        \"protoName\": \"conflict_token\"\n                      }\n                    }\n                  },\n                  \"ListWorkerDeploymentsRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"pageSize\": {\n                        \"type\": \"int32\",\n                        \"id\": 2,\n                        \"protoName\": \"page_size\"\n                      },\n                      \"nextPageToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 3,\n                        \"protoName\": \"next_page_token\"\n                      }\n                    }\n                  },\n                  \"ListWorkerDeploymentsResponse\": {\n                    \"fields\": {\n                      \"nextPageToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 1,\n                        \"protoName\": \"next_page_token\"\n                      },\n                      \"workerDeployments\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"WorkerDeploymentSummary\",\n                        \"id\": 2,\n                        \"protoName\": \"worker_deployments\"\n                      }\n                    },\n                    \"nested\": {\n                      \"WorkerDeploymentSummary\": {\n                        \"fields\": {\n                          \"name\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"createTime\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 2,\n                            \"protoName\": \"create_time\"\n                          },\n                          \"routingConfig\": {\n                            \"type\": \"temporal.api.deployment.v1.RoutingConfig\",\n                            \"id\": 3,\n                            \"protoName\": \"routing_config\"\n                          },\n                          \"latestVersionSummary\": {\n                            \"type\": \"temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary\",\n                            \"id\": 4,\n                            \"protoName\": \"latest_version_summary\"\n                          },\n                          \"currentVersionSummary\": {\n                            \"type\": \"temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary\",\n                            \"id\": 5,\n                            \"protoName\": \"current_version_summary\"\n                          },\n                          \"rampingVersionSummary\": {\n                            \"type\": \"temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary\",\n                            \"id\": 6,\n                            \"protoName\": \"ramping_version_summary\"\n                          }\n                        }\n                      }\n                    }\n                  },\n                  \"CreateWorkerDeploymentVersionRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"deploymentVersion\": {\n                        \"type\": \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        \"id\": 2,\n                        \"protoName\": \"deployment_version\"\n                      },\n                      \"computeConfig\": {\n                        \"type\": \"temporal.api.compute.v1.ComputeConfig\",\n                        \"id\": 4,\n                        \"protoName\": \"compute_config\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"requestId\": {\n                        \"type\": \"string\",\n                        \"id\": 5,\n                        \"protoName\": \"request_id\"\n                      }\n                    }\n                  },\n                  \"CreateWorkerDeploymentVersionResponse\": {\n                    \"fields\": {}\n                  },\n                  \"DeleteWorkerDeploymentVersionRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"version\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"deploymentVersion\": {\n                        \"type\": \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        \"id\": 5,\n                        \"protoName\": \"deployment_version\"\n                      },\n                      \"skipDrainage\": {\n                        \"type\": \"bool\",\n                        \"id\": 3,\n                        \"protoName\": \"skip_drainage\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 4\n                      }\n                    }\n                  },\n                  \"DeleteWorkerDeploymentVersionResponse\": {\n                    \"fields\": {}\n                  },\n                  \"DeleteWorkerDeploymentRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"deploymentName\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"deployment_name\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      }\n                    }\n                  },\n                  \"DeleteWorkerDeploymentResponse\": {\n                    \"fields\": {}\n                  },\n                  \"UpdateWorkerDeploymentVersionComputeConfigRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"deploymentVersion\": {\n                        \"type\": \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        \"id\": 2,\n                        \"protoName\": \"deployment_version\"\n                      },\n                      \"computeConfigScalingGroups\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"temporal.api.compute.v1.ComputeConfigScalingGroupUpdate\",\n                        \"id\": 6,\n                        \"protoName\": \"compute_config_scaling_groups\"\n                      },\n                      \"removeComputeConfigScalingGroups\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"string\",\n                        \"id\": 7,\n                        \"protoName\": \"remove_compute_config_scaling_groups\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"requestId\": {\n                        \"type\": \"string\",\n                        \"id\": 4,\n                        \"protoName\": \"request_id\"\n                      }\n                    }\n                  },\n                  \"UpdateWorkerDeploymentVersionComputeConfigResponse\": {\n                    \"fields\": {}\n                  },\n                  \"ValidateWorkerDeploymentVersionComputeConfigRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"deploymentVersion\": {\n                        \"type\": \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        \"id\": 2,\n                        \"protoName\": \"deployment_version\"\n                      },\n                      \"computeConfigScalingGroups\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"temporal.api.compute.v1.ComputeConfigScalingGroupUpdate\",\n                        \"id\": 6,\n                        \"protoName\": \"compute_config_scaling_groups\"\n                      },\n                      \"removeComputeConfigScalingGroups\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"string\",\n                        \"id\": 7,\n                        \"protoName\": \"remove_compute_config_scaling_groups\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      }\n                    }\n                  },\n                  \"ValidateWorkerDeploymentVersionComputeConfigResponse\": {\n                    \"fields\": {}\n                  },\n                  \"UpdateWorkerDeploymentVersionMetadataRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"version\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"deploymentVersion\": {\n                        \"type\": \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        \"id\": 5,\n                        \"protoName\": \"deployment_version\"\n                      },\n                      \"upsertEntries\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"temporal.api.common.v1.Payload\",\n                        \"id\": 3,\n                        \"protoName\": \"upsert_entries\"\n                      },\n                      \"removeEntries\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"string\",\n                        \"id\": 4,\n                        \"protoName\": \"remove_entries\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 6\n                      }\n                    }\n                  },\n                  \"UpdateWorkerDeploymentVersionMetadataResponse\": {\n                    \"fields\": {\n                      \"metadata\": {\n                        \"type\": \"temporal.api.deployment.v1.VersionMetadata\",\n                        \"id\": 1\n                      }\n                    }\n                  },\n                  \"SetWorkerDeploymentManagerRequest\": {\n                    \"oneofs\": {\n                      \"newManagerIdentity\": {\n                        \"oneof\": [\n                          \"managerIdentity\",\n                          \"self\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"deploymentName\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"deployment_name\"\n                      },\n                      \"managerIdentity\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"manager_identity\"\n                      },\n                      \"self\": {\n                        \"type\": \"bool\",\n                        \"id\": 4\n                      },\n                      \"conflictToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 5,\n                        \"protoName\": \"conflict_token\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 6\n                      }\n                    }\n                  },\n                  \"SetWorkerDeploymentManagerResponse\": {\n                    \"fields\": {\n                      \"conflictToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 1,\n                        \"protoName\": \"conflict_token\"\n                      },\n                      \"previousManagerIdentity\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"previous_manager_identity\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      }\n                    }\n                  },\n                  \"GetCurrentDeploymentRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"seriesName\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"series_name\"\n                      }\n                    }\n                  },\n                  \"GetCurrentDeploymentResponse\": {\n                    \"fields\": {\n                      \"currentDeploymentInfo\": {\n                        \"type\": \"temporal.api.deployment.v1.DeploymentInfo\",\n                        \"id\": 1,\n                        \"protoName\": \"current_deployment_info\"\n                      }\n                    }\n                  },\n                  \"GetDeploymentReachabilityRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"deployment\": {\n                        \"type\": \"temporal.api.deployment.v1.Deployment\",\n                        \"id\": 2\n                      }\n                    }\n                  },\n                  \"GetDeploymentReachabilityResponse\": {\n                    \"fields\": {\n                      \"deploymentInfo\": {\n                        \"type\": \"temporal.api.deployment.v1.DeploymentInfo\",\n                        \"id\": 1,\n                        \"protoName\": \"deployment_info\"\n                      },\n                      \"reachability\": {\n                        \"type\": \"enums.v1.DeploymentReachability\",\n                        \"id\": 2\n                      },\n                      \"lastUpdateTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 3,\n                        \"protoName\": \"last_update_time\"\n                      }\n                    }\n                  },\n                  \"CreateWorkflowRuleRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"spec\": {\n                        \"type\": \"temporal.api.rules.v1.WorkflowRuleSpec\",\n                        \"id\": 2\n                      },\n                      \"forceScan\": {\n                        \"type\": \"bool\",\n                        \"id\": 3,\n                        \"protoName\": \"force_scan\"\n                      },\n                      \"requestId\": {\n                        \"type\": \"string\",\n                        \"id\": 4,\n                        \"protoName\": \"request_id\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 5\n                      },\n                      \"description\": {\n                        \"type\": \"string\",\n                        \"id\": 6\n                      }\n                    }\n                  },\n                  \"CreateWorkflowRuleResponse\": {\n                    \"fields\": {\n                      \"rule\": {\n                        \"type\": \"temporal.api.rules.v1.WorkflowRule\",\n                        \"id\": 1\n                      },\n                      \"jobId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"job_id\"\n                      }\n                    }\n                  },\n                  \"DescribeWorkflowRuleRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"ruleId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"rule_id\"\n                      }\n                    }\n                  },\n                  \"DescribeWorkflowRuleResponse\": {\n                    \"fields\": {\n                      \"rule\": {\n                        \"type\": \"temporal.api.rules.v1.WorkflowRule\",\n                        \"id\": 1\n                      }\n                    }\n                  },\n                  \"DeleteWorkflowRuleRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"ruleId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"rule_id\"\n                      }\n                    }\n                  },\n                  \"DeleteWorkflowRuleResponse\": {\n                    \"fields\": {}\n                  },\n                  \"ListWorkflowRulesRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"nextPageToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 2,\n                        \"protoName\": \"next_page_token\"\n                      }\n                    }\n                  },\n                  \"ListWorkflowRulesResponse\": {\n                    \"fields\": {\n                      \"rules\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.rules.v1.WorkflowRule\",\n                        \"id\": 1\n                      },\n                      \"nextPageToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 2,\n                        \"protoName\": \"next_page_token\"\n                      }\n                    }\n                  },\n                  \"TriggerWorkflowRuleRequest\": {\n                    \"oneofs\": {\n                      \"rule\": {\n                        \"oneof\": [\n                          \"id\",\n                          \"spec\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"execution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 2\n                      },\n                      \"id\": {\n                        \"type\": \"string\",\n                        \"id\": 4\n                      },\n                      \"spec\": {\n                        \"type\": \"temporal.api.rules.v1.WorkflowRuleSpec\",\n                        \"id\": 5\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      }\n                    }\n                  },\n                  \"TriggerWorkflowRuleResponse\": {\n                    \"fields\": {\n                      \"applied\": {\n                        \"type\": \"bool\",\n                        \"id\": 1\n                      }\n                    }\n                  },\n                  \"RecordWorkerHeartbeatRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"workerHeartbeat\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.worker.v1.WorkerHeartbeat\",\n                        \"id\": 3,\n                        \"protoName\": \"worker_heartbeat\"\n                      },\n                      \"resourceId\": {\n                        \"type\": \"string\",\n                        \"id\": 4,\n                        \"protoName\": \"resource_id\"\n                      }\n                    }\n                  },\n                  \"RecordWorkerHeartbeatResponse\": {\n                    \"fields\": {}\n                  },\n                  \"ListWorkersRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"pageSize\": {\n                        \"type\": \"int32\",\n                        \"id\": 2,\n                        \"protoName\": \"page_size\"\n                      },\n                      \"nextPageToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 3,\n                        \"protoName\": \"next_page_token\"\n                      },\n                      \"query\": {\n                        \"type\": \"string\",\n                        \"id\": 4\n                      },\n                      \"includeSystemWorkers\": {\n                        \"type\": \"bool\",\n                        \"id\": 5,\n                        \"protoName\": \"include_system_workers\"\n                      }\n                    }\n                  },\n                  \"ListWorkersResponse\": {\n                    \"fields\": {\n                      \"workersInfo\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.worker.v1.WorkerInfo\",\n                        \"id\": 1,\n                        \"protoName\": \"workers_info\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"workers\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.worker.v1.WorkerListInfo\",\n                        \"id\": 3\n                      },\n                      \"nextPageToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 2,\n                        \"protoName\": \"next_page_token\"\n                      }\n                    }\n                  },\n                  \"UpdateTaskQueueConfigRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"taskQueue\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"task_queue\"\n                      },\n                      \"taskQueueType\": {\n                        \"type\": \"temporal.api.enums.v1.TaskQueueType\",\n                        \"id\": 4,\n                        \"protoName\": \"task_queue_type\"\n                      },\n                      \"updateQueueRateLimit\": {\n                        \"type\": \"RateLimitUpdate\",\n                        \"id\": 5,\n                        \"protoName\": \"update_queue_rate_limit\"\n                      },\n                      \"updateFairnessKeyRateLimitDefault\": {\n                        \"type\": \"RateLimitUpdate\",\n                        \"id\": 6,\n                        \"protoName\": \"update_fairness_key_rate_limit_default\"\n                      },\n                      \"setFairnessWeightOverrides\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"float\",\n                        \"id\": 7,\n                        \"protoName\": \"set_fairness_weight_overrides\"\n                      },\n                      \"unsetFairnessWeightOverrides\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"string\",\n                        \"id\": 8,\n                        \"protoName\": \"unset_fairness_weight_overrides\"\n                      }\n                    },\n                    \"nested\": {\n                      \"RateLimitUpdate\": {\n                        \"fields\": {\n                          \"rateLimit\": {\n                            \"type\": \"temporal.api.taskqueue.v1.RateLimit\",\n                            \"id\": 1,\n                            \"protoName\": \"rate_limit\"\n                          },\n                          \"reason\": {\n                            \"type\": \"string\",\n                            \"id\": 2\n                          }\n                        }\n                      }\n                    }\n                  },\n                  \"UpdateTaskQueueConfigResponse\": {\n                    \"fields\": {\n                      \"config\": {\n                        \"type\": \"temporal.api.taskqueue.v1.TaskQueueConfig\",\n                        \"id\": 1\n                      }\n                    }\n                  },\n                  \"FetchWorkerConfigRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"reason\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"selector\": {\n                        \"type\": \"temporal.api.common.v1.WorkerSelector\",\n                        \"id\": 6\n                      },\n                      \"resourceId\": {\n                        \"type\": \"string\",\n                        \"id\": 7,\n                        \"protoName\": \"resource_id\"\n                      }\n                    }\n                  },\n                  \"FetchWorkerConfigResponse\": {\n                    \"fields\": {\n                      \"workerConfig\": {\n                        \"type\": \"temporal.api.sdk.v1.WorkerConfig\",\n                        \"id\": 1,\n                        \"protoName\": \"worker_config\"\n                      }\n                    }\n                  },\n                  \"UpdateWorkerConfigRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"reason\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"workerConfig\": {\n                        \"type\": \"temporal.api.sdk.v1.WorkerConfig\",\n                        \"id\": 4,\n                        \"protoName\": \"worker_config\"\n                      },\n                      \"updateMask\": {\n                        \"type\": \"google.protobuf.FieldMask\",\n                        \"id\": 5,\n                        \"protoName\": \"update_mask\"\n                      },\n                      \"selector\": {\n                        \"type\": \"temporal.api.common.v1.WorkerSelector\",\n                        \"id\": 6\n                      },\n                      \"resourceId\": {\n                        \"type\": \"string\",\n                        \"id\": 7,\n                        \"protoName\": \"resource_id\"\n                      }\n                    }\n                  },\n                  \"UpdateWorkerConfigResponse\": {\n                    \"oneofs\": {\n                      \"response\": {\n                        \"oneof\": [\n                          \"workerConfig\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"workerConfig\": {\n                        \"type\": \"temporal.api.sdk.v1.WorkerConfig\",\n                        \"id\": 1,\n                        \"protoName\": \"worker_config\"\n                      }\n                    }\n                  },\n                  \"DescribeWorkerRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"workerInstanceKey\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"worker_instance_key\"\n                      }\n                    }\n                  },\n                  \"DescribeWorkerResponse\": {\n                    \"fields\": {\n                      \"workerInfo\": {\n                        \"type\": \"temporal.api.worker.v1.WorkerInfo\",\n                        \"id\": 1,\n                        \"protoName\": \"worker_info\"\n                      }\n                    }\n                  },\n                  \"CountWorkersRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"query\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"includeSystemWorkers\": {\n                        \"type\": \"bool\",\n                        \"id\": 3,\n                        \"protoName\": \"include_system_workers\"\n                      }\n                    }\n                  },\n                  \"CountWorkersResponse\": {\n                    \"fields\": {\n                      \"count\": {\n                        \"type\": \"int64\",\n                        \"id\": 1\n                      }\n                    }\n                  },\n                  \"PauseWorkflowExecutionRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"workflowId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_id\"\n                      },\n                      \"runId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"run_id\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 4\n                      },\n                      \"reason\": {\n                        \"type\": \"string\",\n                        \"id\": 5\n                      },\n                      \"requestId\": {\n                        \"type\": \"string\",\n                        \"id\": 6,\n                        \"protoName\": \"request_id\"\n                      }\n                    }\n                  },\n                  \"PauseWorkflowExecutionResponse\": {\n                    \"fields\": {}\n                  },\n                  \"UnpauseWorkflowExecutionRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"workflowId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_id\"\n                      },\n                      \"runId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"run_id\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 4\n                      },\n                      \"reason\": {\n                        \"type\": \"string\",\n                        \"id\": 5\n                      },\n                      \"requestId\": {\n                        \"type\": \"string\",\n                        \"id\": 6,\n                        \"protoName\": \"request_id\"\n                      }\n                    }\n                  },\n                  \"UnpauseWorkflowExecutionResponse\": {\n                    \"fields\": {}\n                  },\n                  \"StartActivityExecutionRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"requestId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"request_id\"\n                      },\n                      \"activityId\": {\n                        \"type\": \"string\",\n                        \"id\": 4,\n                        \"protoName\": \"activity_id\"\n                      },\n                      \"activityType\": {\n                        \"type\": \"temporal.api.common.v1.ActivityType\",\n                        \"id\": 5,\n                        \"protoName\": \"activity_type\"\n                      },\n                      \"taskQueue\": {\n                        \"type\": \"temporal.api.taskqueue.v1.TaskQueue\",\n                        \"id\": 6,\n                        \"protoName\": \"task_queue\"\n                      },\n                      \"scheduleToCloseTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 7,\n                        \"protoName\": \"schedule_to_close_timeout\"\n                      },\n                      \"scheduleToStartTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 8,\n                        \"protoName\": \"schedule_to_start_timeout\"\n                      },\n                      \"startToCloseTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 9,\n                        \"protoName\": \"start_to_close_timeout\"\n                      },\n                      \"heartbeatTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 10,\n                        \"protoName\": \"heartbeat_timeout\"\n                      },\n                      \"retryPolicy\": {\n                        \"type\": \"temporal.api.common.v1.RetryPolicy\",\n                        \"id\": 11,\n                        \"protoName\": \"retry_policy\"\n                      },\n                      \"input\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 12\n                      },\n                      \"idReusePolicy\": {\n                        \"type\": \"temporal.api.enums.v1.ActivityIdReusePolicy\",\n                        \"id\": 13,\n                        \"protoName\": \"id_reuse_policy\"\n                      },\n                      \"idConflictPolicy\": {\n                        \"type\": \"temporal.api.enums.v1.ActivityIdConflictPolicy\",\n                        \"id\": 14,\n                        \"protoName\": \"id_conflict_policy\"\n                      },\n                      \"searchAttributes\": {\n                        \"type\": \"temporal.api.common.v1.SearchAttributes\",\n                        \"id\": 15,\n                        \"protoName\": \"search_attributes\"\n                      },\n                      \"header\": {\n                        \"type\": \"temporal.api.common.v1.Header\",\n                        \"id\": 16\n                      },\n                      \"userMetadata\": {\n                        \"type\": \"temporal.api.sdk.v1.UserMetadata\",\n                        \"id\": 17,\n                        \"protoName\": \"user_metadata\"\n                      },\n                      \"priority\": {\n                        \"type\": \"temporal.api.common.v1.Priority\",\n                        \"id\": 18\n                      },\n                      \"completionCallbacks\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.common.v1.Callback\",\n                        \"id\": 19,\n                        \"protoName\": \"completion_callbacks\"\n                      },\n                      \"links\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.common.v1.Link\",\n                        \"id\": 20\n                      },\n                      \"onConflictOptions\": {\n                        \"type\": \"temporal.api.common.v1.OnConflictOptions\",\n                        \"id\": 21,\n                        \"protoName\": \"on_conflict_options\"\n                      },\n                      \"startDelay\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 22,\n                        \"protoName\": \"start_delay\"\n                      }\n                    }\n                  },\n                  \"StartActivityExecutionResponse\": {\n                    \"fields\": {\n                      \"runId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"run_id\"\n                      },\n                      \"started\": {\n                        \"type\": \"bool\",\n                        \"id\": 2\n                      },\n                      \"link\": {\n                        \"type\": \"temporal.api.common.v1.Link\",\n                        \"id\": 3\n                      }\n                    }\n                  },\n                  \"DescribeActivityExecutionRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"activityId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"activity_id\"\n                      },\n                      \"runId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"run_id\"\n                      },\n                      \"includeInput\": {\n                        \"type\": \"bool\",\n                        \"id\": 4,\n                        \"protoName\": \"include_input\"\n                      },\n                      \"includeOutcome\": {\n                        \"type\": \"bool\",\n                        \"id\": 5,\n                        \"protoName\": \"include_outcome\"\n                      },\n                      \"longPollToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 6,\n                        \"protoName\": \"long_poll_token\"\n                      },\n                      \"includeHeartbeatDetails\": {\n                        \"type\": \"bool\",\n                        \"id\": 7,\n                        \"protoName\": \"include_heartbeat_details\"\n                      },\n                      \"includeLastFailure\": {\n                        \"type\": \"bool\",\n                        \"id\": 8,\n                        \"protoName\": \"include_last_failure\"\n                      }\n                    }\n                  },\n                  \"DescribeActivityExecutionResponse\": {\n                    \"fields\": {\n                      \"runId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"run_id\"\n                      },\n                      \"info\": {\n                        \"type\": \"temporal.api.activity.v1.ActivityExecutionInfo\",\n                        \"id\": 2\n                      },\n                      \"input\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 3\n                      },\n                      \"outcome\": {\n                        \"type\": \"temporal.api.activity.v1.ActivityExecutionOutcome\",\n                        \"id\": 4\n                      },\n                      \"longPollToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 5,\n                        \"protoName\": \"long_poll_token\"\n                      },\n                      \"callbacks\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.activity.v1.CallbackInfo\",\n                        \"id\": 6\n                      }\n                    }\n                  },\n                  \"PollActivityExecutionRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"activityId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"activity_id\"\n                      },\n                      \"runId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"run_id\"\n                      }\n                    }\n                  },\n                  \"PollActivityExecutionResponse\": {\n                    \"fields\": {\n                      \"runId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"run_id\"\n                      },\n                      \"outcome\": {\n                        \"type\": \"temporal.api.activity.v1.ActivityExecutionOutcome\",\n                        \"id\": 2\n                      }\n                    }\n                  },\n                  \"ListActivityExecutionsRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"pageSize\": {\n                        \"type\": \"int32\",\n                        \"id\": 2,\n                        \"protoName\": \"page_size\"\n                      },\n                      \"nextPageToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 3,\n                        \"protoName\": \"next_page_token\"\n                      },\n                      \"query\": {\n                        \"type\": \"string\",\n                        \"id\": 4\n                      }\n                    }\n                  },\n                  \"ListActivityExecutionsResponse\": {\n                    \"fields\": {\n                      \"executions\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.activity.v1.ActivityExecutionListInfo\",\n                        \"id\": 1\n                      },\n                      \"nextPageToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 2,\n                        \"protoName\": \"next_page_token\"\n                      }\n                    }\n                  },\n                  \"StartNexusOperationExecutionRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"requestId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"request_id\"\n                      },\n                      \"operationId\": {\n                        \"type\": \"string\",\n                        \"id\": 4,\n                        \"protoName\": \"operation_id\"\n                      },\n                      \"endpoint\": {\n                        \"type\": \"string\",\n                        \"id\": 5\n                      },\n                      \"service\": {\n                        \"type\": \"string\",\n                        \"id\": 6\n                      },\n                      \"operation\": {\n                        \"type\": \"string\",\n                        \"id\": 7\n                      },\n                      \"scheduleToCloseTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 8,\n                        \"protoName\": \"schedule_to_close_timeout\"\n                      },\n                      \"scheduleToStartTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 9,\n                        \"protoName\": \"schedule_to_start_timeout\"\n                      },\n                      \"startToCloseTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 10,\n                        \"protoName\": \"start_to_close_timeout\"\n                      },\n                      \"input\": {\n                        \"type\": \"temporal.api.common.v1.Payload\",\n                        \"id\": 11\n                      },\n                      \"idReusePolicy\": {\n                        \"type\": \"temporal.api.enums.v1.NexusOperationIdReusePolicy\",\n                        \"id\": 12,\n                        \"protoName\": \"id_reuse_policy\"\n                      },\n                      \"idConflictPolicy\": {\n                        \"type\": \"temporal.api.enums.v1.NexusOperationIdConflictPolicy\",\n                        \"id\": 13,\n                        \"protoName\": \"id_conflict_policy\"\n                      },\n                      \"searchAttributes\": {\n                        \"type\": \"temporal.api.common.v1.SearchAttributes\",\n                        \"id\": 14,\n                        \"protoName\": \"search_attributes\"\n                      },\n                      \"nexusHeader\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"string\",\n                        \"id\": 15,\n                        \"protoName\": \"nexus_header\"\n                      },\n                      \"userMetadata\": {\n                        \"type\": \"temporal.api.sdk.v1.UserMetadata\",\n                        \"id\": 16,\n                        \"protoName\": \"user_metadata\"\n                      }\n                    }\n                  },\n                  \"StartNexusOperationExecutionResponse\": {\n                    \"fields\": {\n                      \"runId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"run_id\"\n                      },\n                      \"started\": {\n                        \"type\": \"bool\",\n                        \"id\": 2\n                      }\n                    }\n                  },\n                  \"DescribeNexusOperationExecutionRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"operationId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"operation_id\"\n                      },\n                      \"runId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"run_id\"\n                      },\n                      \"includeInput\": {\n                        \"type\": \"bool\",\n                        \"id\": 4,\n                        \"protoName\": \"include_input\"\n                      },\n                      \"includeOutcome\": {\n                        \"type\": \"bool\",\n                        \"id\": 5,\n                        \"protoName\": \"include_outcome\"\n                      },\n                      \"longPollToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 6,\n                        \"protoName\": \"long_poll_token\"\n                      }\n                    }\n                  },\n                  \"DescribeNexusOperationExecutionResponse\": {\n                    \"oneofs\": {\n                      \"outcome\": {\n                        \"oneof\": [\n                          \"result\",\n                          \"failure\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"runId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"run_id\"\n                      },\n                      \"info\": {\n                        \"type\": \"temporal.api.nexus.v1.NexusOperationExecutionInfo\",\n                        \"id\": 2\n                      },\n                      \"input\": {\n                        \"type\": \"temporal.api.common.v1.Payload\",\n                        \"id\": 3\n                      },\n                      \"result\": {\n                        \"type\": \"temporal.api.common.v1.Payload\",\n                        \"id\": 4\n                      },\n                      \"failure\": {\n                        \"type\": \"temporal.api.failure.v1.Failure\",\n                        \"id\": 5\n                      },\n                      \"longPollToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 6,\n                        \"protoName\": \"long_poll_token\"\n                      }\n                    }\n                  },\n                  \"PollNexusOperationExecutionRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"operationId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"operation_id\"\n                      },\n                      \"runId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"run_id\"\n                      },\n                      \"waitStage\": {\n                        \"type\": \"temporal.api.enums.v1.NexusOperationWaitStage\",\n                        \"id\": 4,\n                        \"protoName\": \"wait_stage\"\n                      }\n                    }\n                  },\n                  \"PollNexusOperationExecutionResponse\": {\n                    \"oneofs\": {\n                      \"outcome\": {\n                        \"oneof\": [\n                          \"result\",\n                          \"failure\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"runId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"run_id\"\n                      },\n                      \"waitStage\": {\n                        \"type\": \"temporal.api.enums.v1.NexusOperationWaitStage\",\n                        \"id\": 2,\n                        \"protoName\": \"wait_stage\"\n                      },\n                      \"operationToken\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"operation_token\"\n                      },\n                      \"result\": {\n                        \"type\": \"temporal.api.common.v1.Payload\",\n                        \"id\": 4\n                      },\n                      \"failure\": {\n                        \"type\": \"temporal.api.failure.v1.Failure\",\n                        \"id\": 5\n                      }\n                    }\n                  },\n                  \"ListNexusOperationExecutionsRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"pageSize\": {\n                        \"type\": \"int32\",\n                        \"id\": 2,\n                        \"protoName\": \"page_size\"\n                      },\n                      \"nextPageToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 3,\n                        \"protoName\": \"next_page_token\"\n                      },\n                      \"query\": {\n                        \"type\": \"string\",\n                        \"id\": 4\n                      }\n                    }\n                  },\n                  \"ListNexusOperationExecutionsResponse\": {\n                    \"fields\": {\n                      \"operations\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.nexus.v1.NexusOperationExecutionListInfo\",\n                        \"id\": 1\n                      },\n                      \"nextPageToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 2,\n                        \"protoName\": \"next_page_token\"\n                      }\n                    }\n                  },\n                  \"CountActivityExecutionsRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"query\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      }\n                    }\n                  },\n                  \"CountActivityExecutionsResponse\": {\n                    \"fields\": {\n                      \"count\": {\n                        \"type\": \"int64\",\n                        \"id\": 1\n                      },\n                      \"groups\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"AggregationGroup\",\n                        \"id\": 2\n                      }\n                    },\n                    \"nested\": {\n                      \"AggregationGroup\": {\n                        \"fields\": {\n                          \"groupValues\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"temporal.api.common.v1.Payload\",\n                            \"id\": 1,\n                            \"protoName\": \"group_values\"\n                          },\n                          \"count\": {\n                            \"type\": \"int64\",\n                            \"id\": 2\n                          }\n                        }\n                      }\n                    }\n                  },\n                  \"CountNexusOperationExecutionsRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"query\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      }\n                    }\n                  },\n                  \"CountNexusOperationExecutionsResponse\": {\n                    \"fields\": {\n                      \"count\": {\n                        \"type\": \"int64\",\n                        \"id\": 1\n                      },\n                      \"groups\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"AggregationGroup\",\n                        \"id\": 2\n                      }\n                    },\n                    \"nested\": {\n                      \"AggregationGroup\": {\n                        \"fields\": {\n                          \"groupValues\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"temporal.api.common.v1.Payload\",\n                            \"id\": 1,\n                            \"protoName\": \"group_values\"\n                          },\n                          \"count\": {\n                            \"type\": \"int64\",\n                            \"id\": 2\n                          }\n                        }\n                      }\n                    }\n                  },\n                  \"RequestCancelActivityExecutionRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"activityId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"activity_id\"\n                      },\n                      \"runId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"run_id\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 4\n                      },\n                      \"requestId\": {\n                        \"type\": \"string\",\n                        \"id\": 5,\n                        \"protoName\": \"request_id\"\n                      },\n                      \"reason\": {\n                        \"type\": \"string\",\n                        \"id\": 6\n                      }\n                    }\n                  },\n                  \"RequestCancelActivityExecutionResponse\": {\n                    \"fields\": {}\n                  },\n                  \"TerminateActivityExecutionRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"activityId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"activity_id\"\n                      },\n                      \"runId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"run_id\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 4\n                      },\n                      \"requestId\": {\n                        \"type\": \"string\",\n                        \"id\": 5,\n                        \"protoName\": \"request_id\"\n                      },\n                      \"reason\": {\n                        \"type\": \"string\",\n                        \"id\": 6\n                      }\n                    }\n                  },\n                  \"TerminateActivityExecutionResponse\": {\n                    \"fields\": {}\n                  },\n                  \"DeleteActivityExecutionRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"activityId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"activity_id\"\n                      },\n                      \"runId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"run_id\"\n                      }\n                    }\n                  },\n                  \"DeleteActivityExecutionResponse\": {\n                    \"fields\": {}\n                  },\n                  \"RequestCancelNexusOperationExecutionRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"operationId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"operation_id\"\n                      },\n                      \"runId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"run_id\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 4\n                      },\n                      \"requestId\": {\n                        \"type\": \"string\",\n                        \"id\": 5,\n                        \"protoName\": \"request_id\"\n                      },\n                      \"reason\": {\n                        \"type\": \"string\",\n                        \"id\": 6\n                      }\n                    }\n                  },\n                  \"RequestCancelNexusOperationExecutionResponse\": {\n                    \"fields\": {}\n                  },\n                  \"TerminateNexusOperationExecutionRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"operationId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"operation_id\"\n                      },\n                      \"runId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"run_id\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 4\n                      },\n                      \"requestId\": {\n                        \"type\": \"string\",\n                        \"id\": 5,\n                        \"protoName\": \"request_id\"\n                      },\n                      \"reason\": {\n                        \"type\": \"string\",\n                        \"id\": 6\n                      }\n                    }\n                  },\n                  \"TerminateNexusOperationExecutionResponse\": {\n                    \"fields\": {}\n                  },\n                  \"DeleteNexusOperationExecutionRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"operationId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"operation_id\"\n                      },\n                      \"runId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"run_id\"\n                      }\n                    }\n                  },\n                  \"DeleteNexusOperationExecutionResponse\": {\n                    \"fields\": {}\n                  },\n                  \"PollWorkflowExecutionTimeSkippingRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"workflowExecution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_execution\"\n                      },\n                      \"fastForwardId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"fast_forward_id\"\n                      }\n                    }\n                  },\n                  \"PollWorkflowExecutionTimeSkippingResponse\": {\n                    \"fields\": {\n                      \"fastForwardPollingResult\": {\n                        \"type\": \"temporal.api.enums.v1.FastForwardPollingResult\",\n                        \"id\": 1,\n                        \"protoName\": \"fast_forward_polling_result\"\n                      },\n                      \"failedReason\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"failed_reason\"\n                      },\n                      \"fastForwardInfo\": {\n                        \"type\": \"temporal.api.common.v1.TimeSkippingFastForwardInfo\",\n                        \"id\": 3,\n                        \"protoName\": \"fast_forward_info\"\n                      }\n                    }\n                  },\n                  \"WorkflowService\": {\n                    \"methods\": {\n                      \"RegisterNamespace\": {\n                        \"requestType\": \"RegisterNamespaceRequest\",\n                        \"responseType\": \"RegisterNamespaceResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/cluster/namespaces\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces\",\n                          \"(google.api.http).additional_bindings.body\": \"*\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/cluster/namespaces\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"DescribeNamespace\": {\n                        \"requestType\": \"DescribeNamespaceRequest\",\n                        \"responseType\": \"DescribeNamespaceResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/cluster/namespaces/{namespace}\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/cluster/namespaces/{namespace}\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/namespaces/{namespace}\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"ListNamespaces\": {\n                        \"requestType\": \"ListNamespacesRequest\",\n                        \"responseType\": \"ListNamespacesResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/cluster/namespaces\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/cluster/namespaces\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/namespaces\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"UpdateNamespace\": {\n                        \"requestType\": \"UpdateNamespaceRequest\",\n                        \"responseType\": \"UpdateNamespaceResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/cluster/namespaces/{namespace}/update\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/update\",\n                          \"(google.api.http).additional_bindings.body\": \"*\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/cluster/namespaces/{namespace}/update\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/update\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"DeprecateNamespace\": {\n                        \"requestType\": \"DeprecateNamespaceRequest\",\n                        \"responseType\": \"DeprecateNamespaceResponse\"\n                      },\n                      \"StartWorkflowExecution\": {\n                        \"requestType\": \"StartWorkflowExecutionRequest\",\n                        \"responseType\": \"StartWorkflowExecutionResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/workflows/{workflow_id}\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_id}\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{workflow_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/workflows/{workflow_id}\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_id}\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"workflow:{workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"ExecuteMultiOperation\": {\n                        \"requestType\": \"ExecuteMultiOperationRequest\",\n                        \"responseType\": \"ExecuteMultiOperationResponse\",\n                        \"options\": {\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"{resource_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"{resource_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"GetWorkflowExecutionHistory\": {\n                        \"requestType\": \"GetWorkflowExecutionHistoryRequest\",\n                        \"responseType\": \"GetWorkflowExecutionHistoryResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/workflows/{execution.workflow_id}/history\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/workflows/{execution.workflow_id}/history\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{execution.workflow_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/namespaces/{namespace}/workflows/{execution.workflow_id}/history\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/namespaces/{namespace}/workflows/{execution.workflow_id}/history\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"workflow:{execution.workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"GetWorkflowExecutionHistoryReverse\": {\n                        \"requestType\": \"GetWorkflowExecutionHistoryReverseRequest\",\n                        \"responseType\": \"GetWorkflowExecutionHistoryReverseResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/workflows/{execution.workflow_id}/history-reverse\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/workflows/{execution.workflow_id}/history-reverse\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{execution.workflow_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/namespaces/{namespace}/workflows/{execution.workflow_id}/history-reverse\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/namespaces/{namespace}/workflows/{execution.workflow_id}/history-reverse\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"workflow:{execution.workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"PollWorkflowTaskQueue\": {\n                        \"requestType\": \"PollWorkflowTaskQueueRequest\",\n                        \"responseType\": \"PollWorkflowTaskQueueResponse\",\n                        \"options\": {\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"poller:{poller_group_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"poller:{poller_group_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"RespondWorkflowTaskCompleted\": {\n                        \"requestType\": \"RespondWorkflowTaskCompletedRequest\",\n                        \"responseType\": \"RespondWorkflowTaskCompletedResponse\",\n                        \"options\": {\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"{resource_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"{resource_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"RespondWorkflowTaskFailed\": {\n                        \"requestType\": \"RespondWorkflowTaskFailedRequest\",\n                        \"responseType\": \"RespondWorkflowTaskFailedResponse\",\n                        \"options\": {\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"{resource_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"{resource_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"PollActivityTaskQueue\": {\n                        \"requestType\": \"PollActivityTaskQueueRequest\",\n                        \"responseType\": \"PollActivityTaskQueueResponse\",\n                        \"options\": {\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"poller:{poller_group_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"poller:{poller_group_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"RecordActivityTaskHeartbeat\": {\n                        \"requestType\": \"RecordActivityTaskHeartbeatRequest\",\n                        \"responseType\": \"RecordActivityTaskHeartbeatResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/activity-heartbeat\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/activity-heartbeat\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"{resource_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/activity-heartbeat\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/activity-heartbeat\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"{resource_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"RecordActivityTaskHeartbeatById\": {\n                        \"requestType\": \"RecordActivityTaskHeartbeatByIdRequest\",\n                        \"responseType\": \"RecordActivityTaskHeartbeatByIdResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/activities/{activity_id}/heartbeat\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_id}/activities/{activity_id}/heartbeat\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"{resource_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/activities/{activity_id}/heartbeat\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": [\n                                {\n                                  \"post\": \"/api/v1/namespaces/{namespace}/activities/{activity_id}/heartbeat\",\n                                  \"body\": \"*\"\n                                },\n                                {\n                                  \"post\": \"/namespaces/{namespace}/workflows/{workflow_id}/activities/{activity_id}/heartbeat\",\n                                  \"body\": \"*\"\n                                },\n                                {\n                                  \"post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_id}/activities/{activity_id}/heartbeat\",\n                                  \"body\": \"*\"\n                                }\n                              ]\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"{resource_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"RespondActivityTaskCompleted\": {\n                        \"requestType\": \"RespondActivityTaskCompletedRequest\",\n                        \"responseType\": \"RespondActivityTaskCompletedResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/activity-complete\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/activity-complete\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"{resource_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/activity-complete\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/activity-complete\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"{resource_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"RespondActivityTaskCompletedById\": {\n                        \"requestType\": \"RespondActivityTaskCompletedByIdRequest\",\n                        \"responseType\": \"RespondActivityTaskCompletedByIdResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/activities/{activity_id}/complete\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_id}/activities/{activity_id}/complete\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"{resource_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/activities/{activity_id}/complete\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": [\n                                {\n                                  \"post\": \"/api/v1/namespaces/{namespace}/activities/{activity_id}/complete\",\n                                  \"body\": \"*\"\n                                },\n                                {\n                                  \"post\": \"/namespaces/{namespace}/workflows/{workflow_id}/activities/{activity_id}/complete\",\n                                  \"body\": \"*\"\n                                },\n                                {\n                                  \"post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_id}/activities/{activity_id}/complete\",\n                                  \"body\": \"*\"\n                                }\n                              ]\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"{resource_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"RespondActivityTaskFailed\": {\n                        \"requestType\": \"RespondActivityTaskFailedRequest\",\n                        \"responseType\": \"RespondActivityTaskFailedResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/activity-fail\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/activity-fail\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"{resource_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/activity-fail\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/activity-fail\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"{resource_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"RespondActivityTaskFailedById\": {\n                        \"requestType\": \"RespondActivityTaskFailedByIdRequest\",\n                        \"responseType\": \"RespondActivityTaskFailedByIdResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/activities/{activity_id}/fail\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_id}/activities/{activity_id}/fail\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"{resource_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/activities/{activity_id}/fail\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": [\n                                {\n                                  \"post\": \"/api/v1/namespaces/{namespace}/activities/{activity_id}/fail\",\n                                  \"body\": \"*\"\n                                },\n                                {\n                                  \"post\": \"/namespaces/{namespace}/workflows/{workflow_id}/activities/{activity_id}/fail\",\n                                  \"body\": \"*\"\n                                },\n                                {\n                                  \"post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_id}/activities/{activity_id}/fail\",\n                                  \"body\": \"*\"\n                                }\n                              ]\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"{resource_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"RespondActivityTaskCanceled\": {\n                        \"requestType\": \"RespondActivityTaskCanceledRequest\",\n                        \"responseType\": \"RespondActivityTaskCanceledResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/activity-resolve-as-canceled\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/activity-resolve-as-canceled\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"{resource_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/activity-resolve-as-canceled\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/activity-resolve-as-canceled\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"{resource_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"RespondActivityTaskCanceledById\": {\n                        \"requestType\": \"RespondActivityTaskCanceledByIdRequest\",\n                        \"responseType\": \"RespondActivityTaskCanceledByIdResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/activities/{activity_id}/resolve-as-canceled\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_id}/activities/{activity_id}/resolve-as-canceled\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"{resource_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/activities/{activity_id}/resolve-as-canceled\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": [\n                                {\n                                  \"post\": \"/api/v1/namespaces/{namespace}/activities/{activity_id}/resolve-as-canceled\",\n                                  \"body\": \"*\"\n                                },\n                                {\n                                  \"post\": \"/namespaces/{namespace}/workflows/{workflow_id}/activities/{activity_id}/resolve-as-canceled\",\n                                  \"body\": \"*\"\n                                },\n                                {\n                                  \"post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_id}/activities/{activity_id}/resolve-as-canceled\",\n                                  \"body\": \"*\"\n                                }\n                              ]\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"{resource_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"RequestCancelWorkflowExecution\": {\n                        \"requestType\": \"RequestCancelWorkflowExecutionRequest\",\n                        \"responseType\": \"RequestCancelWorkflowExecutionResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/cancel\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/cancel\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{workflow_execution.workflow_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/cancel\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/cancel\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"workflow:{workflow_execution.workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"SignalWorkflowExecution\": {\n                        \"requestType\": \"SignalWorkflowExecutionRequest\",\n                        \"responseType\": \"SignalWorkflowExecutionResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/signal/{signal_name}\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/signal/{signal_name}\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{workflow_execution.workflow_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/signal/{signal_name}\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/signal/{signal_name}\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"workflow:{workflow_execution.workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"SignalWithStartWorkflowExecution\": {\n                        \"requestType\": \"SignalWithStartWorkflowExecutionRequest\",\n                        \"responseType\": \"SignalWithStartWorkflowExecutionResponse\",\n                        \"options\": {\n                          \"(nexusannotations.v1.operation).tags\": \"exposed\",\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/workflows/{workflow_id}/signal-with-start/{signal_name}\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_id}/signal-with-start/{signal_name}\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{workflow_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(nexusannotations.v1.operation)\": {\n                              \"tags\": \"exposed\"\n                            }\n                          },\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/workflows/{workflow_id}/signal-with-start/{signal_name}\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_id}/signal-with-start/{signal_name}\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"workflow:{workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"ResetWorkflowExecution\": {\n                        \"requestType\": \"ResetWorkflowExecutionRequest\",\n                        \"responseType\": \"ResetWorkflowExecutionResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/reset\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/reset\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{workflow_execution.workflow_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/reset\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/reset\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"workflow:{workflow_execution.workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"TerminateWorkflowExecution\": {\n                        \"requestType\": \"TerminateWorkflowExecutionRequest\",\n                        \"responseType\": \"TerminateWorkflowExecutionResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/terminate\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/terminate\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{workflow_execution.workflow_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/terminate\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/terminate\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"workflow:{workflow_execution.workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"DeleteWorkflowExecution\": {\n                        \"requestType\": \"DeleteWorkflowExecutionRequest\",\n                        \"responseType\": \"DeleteWorkflowExecutionResponse\",\n                        \"options\": {\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{workflow_execution.workflow_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"workflow:{workflow_execution.workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"ListOpenWorkflowExecutions\": {\n                        \"requestType\": \"ListOpenWorkflowExecutionsRequest\",\n                        \"responseType\": \"ListOpenWorkflowExecutionsResponse\"\n                      },\n                      \"ListClosedWorkflowExecutions\": {\n                        \"requestType\": \"ListClosedWorkflowExecutionsRequest\",\n                        \"responseType\": \"ListClosedWorkflowExecutionsResponse\"\n                      },\n                      \"ListWorkflowExecutions\": {\n                        \"requestType\": \"ListWorkflowExecutionsRequest\",\n                        \"responseType\": \"ListWorkflowExecutionsResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/workflows\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/workflows\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/namespaces/{namespace}/workflows\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/namespaces/{namespace}/workflows\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"ListArchivedWorkflowExecutions\": {\n                        \"requestType\": \"ListArchivedWorkflowExecutionsRequest\",\n                        \"responseType\": \"ListArchivedWorkflowExecutionsResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/archived-workflows\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/archived-workflows\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/namespaces/{namespace}/archived-workflows\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/namespaces/{namespace}/archived-workflows\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"ScanWorkflowExecutions\": {\n                        \"requestType\": \"ScanWorkflowExecutionsRequest\",\n                        \"responseType\": \"ScanWorkflowExecutionsResponse\"\n                      },\n                      \"CountWorkflowExecutions\": {\n                        \"requestType\": \"CountWorkflowExecutionsRequest\",\n                        \"responseType\": \"CountWorkflowExecutionsResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/workflow-count\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/workflow-count\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/namespaces/{namespace}/workflow-count\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/namespaces/{namespace}/workflow-count\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"GetSearchAttributes\": {\n                        \"requestType\": \"GetSearchAttributesRequest\",\n                        \"responseType\": \"GetSearchAttributesResponse\"\n                      },\n                      \"RespondQueryTaskCompleted\": {\n                        \"requestType\": \"RespondQueryTaskCompletedRequest\",\n                        \"responseType\": \"RespondQueryTaskCompletedResponse\",\n                        \"options\": {\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"poller:{poller_group_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"poller:{poller_group_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"ResetStickyTaskQueue\": {\n                        \"requestType\": \"ResetStickyTaskQueueRequest\",\n                        \"responseType\": \"ResetStickyTaskQueueResponse\",\n                        \"options\": {\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{execution.workflow_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"workflow:{execution.workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"ShutdownWorker\": {\n                        \"requestType\": \"ShutdownWorkerRequest\",\n                        \"responseType\": \"ShutdownWorkerResponse\"\n                      },\n                      \"QueryWorkflow\": {\n                        \"requestType\": \"QueryWorkflowRequest\",\n                        \"responseType\": \"QueryWorkflowResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/workflows/{execution.workflow_id}/query/{query.query_type}\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workflows/{execution.workflow_id}/query/{query.query_type}\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{execution.workflow_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/workflows/{execution.workflow_id}/query/{query.query_type}\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/workflows/{execution.workflow_id}/query/{query.query_type}\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"workflow:{execution.workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"DescribeWorkflowExecution\": {\n                        \"requestType\": \"DescribeWorkflowExecutionRequest\",\n                        \"responseType\": \"DescribeWorkflowExecutionResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/workflows/{execution.workflow_id}\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/workflows/{execution.workflow_id}\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{execution.workflow_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/namespaces/{namespace}/workflows/{execution.workflow_id}\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/namespaces/{namespace}/workflows/{execution.workflow_id}\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"workflow:{execution.workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"DescribeTaskQueue\": {\n                        \"requestType\": \"DescribeTaskQueueRequest\",\n                        \"responseType\": \"DescribeTaskQueueResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/task-queues/{task_queue.name}\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/task-queues/{task_queue.name}\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"taskqueue:{task_queue.name}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/namespaces/{namespace}/task-queues/{task_queue.name}\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/namespaces/{namespace}/task-queues/{task_queue.name}\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"taskqueue:{task_queue.name}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"GetClusterInfo\": {\n                        \"requestType\": \"GetClusterInfoRequest\",\n                        \"responseType\": \"GetClusterInfoResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/cluster\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/cluster-info\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/cluster\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/cluster-info\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"GetSystemInfo\": {\n                        \"requestType\": \"GetSystemInfoRequest\",\n                        \"responseType\": \"GetSystemInfoResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/system-info\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/system-info\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/system-info\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/system-info\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"ListTaskQueuePartitions\": {\n                        \"requestType\": \"ListTaskQueuePartitionsRequest\",\n                        \"responseType\": \"ListTaskQueuePartitionsResponse\",\n                        \"options\": {\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"taskqueue:{task_queue.name}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"taskqueue:{task_queue.name}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"CreateSchedule\": {\n                        \"requestType\": \"CreateScheduleRequest\",\n                        \"responseType\": \"CreateScheduleResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/schedules/{schedule_id}\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/schedules/{schedule_id}\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"schedule:{schedule_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/schedules/{schedule_id}\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/schedules/{schedule_id}\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"schedule:{schedule_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"DescribeSchedule\": {\n                        \"requestType\": \"DescribeScheduleRequest\",\n                        \"responseType\": \"DescribeScheduleResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/schedules/{schedule_id}\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/schedules/{schedule_id}\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"schedule:{schedule_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/namespaces/{namespace}/schedules/{schedule_id}\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/namespaces/{namespace}/schedules/{schedule_id}\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"schedule:{schedule_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"UpdateSchedule\": {\n                        \"requestType\": \"UpdateScheduleRequest\",\n                        \"responseType\": \"UpdateScheduleResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/schedules/{schedule_id}/update\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/schedules/{schedule_id}/update\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"schedule:{schedule_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/schedules/{schedule_id}/update\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/schedules/{schedule_id}/update\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"schedule:{schedule_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"PatchSchedule\": {\n                        \"requestType\": \"PatchScheduleRequest\",\n                        \"responseType\": \"PatchScheduleResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/schedules/{schedule_id}/patch\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/schedules/{schedule_id}/patch\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"schedule:{schedule_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/schedules/{schedule_id}/patch\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/schedules/{schedule_id}/patch\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"schedule:{schedule_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"ListScheduleMatchingTimes\": {\n                        \"requestType\": \"ListScheduleMatchingTimesRequest\",\n                        \"responseType\": \"ListScheduleMatchingTimesResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/schedules/{schedule_id}/matching-times\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/schedules/{schedule_id}/matching-times\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"schedule:{schedule_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/namespaces/{namespace}/schedules/{schedule_id}/matching-times\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/namespaces/{namespace}/schedules/{schedule_id}/matching-times\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"schedule:{schedule_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"DeleteSchedule\": {\n                        \"requestType\": \"DeleteScheduleRequest\",\n                        \"responseType\": \"DeleteScheduleResponse\",\n                        \"options\": {\n                          \"(google.api.http).delete\": \"/namespaces/{namespace}/schedules/{schedule_id}\",\n                          \"(google.api.http).additional_bindings.delete\": \"/api/v1/namespaces/{namespace}/schedules/{schedule_id}\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"schedule:{schedule_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"delete\": \"/namespaces/{namespace}/schedules/{schedule_id}\",\n                              \"additional_bindings\": {\n                                \"delete\": \"/api/v1/namespaces/{namespace}/schedules/{schedule_id}\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"schedule:{schedule_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"ListSchedules\": {\n                        \"requestType\": \"ListSchedulesRequest\",\n                        \"responseType\": \"ListSchedulesResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/schedules\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/schedules\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/namespaces/{namespace}/schedules\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/namespaces/{namespace}/schedules\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"CountSchedules\": {\n                        \"requestType\": \"CountSchedulesRequest\",\n                        \"responseType\": \"CountSchedulesResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/schedule-count\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/schedule-count\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/namespaces/{namespace}/schedule-count\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/namespaces/{namespace}/schedule-count\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"UpdateWorkerBuildIdCompatibility\": {\n                        \"requestType\": \"UpdateWorkerBuildIdCompatibilityRequest\",\n                        \"responseType\": \"UpdateWorkerBuildIdCompatibilityResponse\"\n                      },\n                      \"GetWorkerBuildIdCompatibility\": {\n                        \"requestType\": \"GetWorkerBuildIdCompatibilityRequest\",\n                        \"responseType\": \"GetWorkerBuildIdCompatibilityResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/task-queues/{task_queue}/worker-build-id-compatibility\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/task-queues/{task_queue}/worker-build-id-compatibility\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/namespaces/{namespace}/task-queues/{task_queue}/worker-build-id-compatibility\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/namespaces/{namespace}/task-queues/{task_queue}/worker-build-id-compatibility\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"UpdateWorkerVersioningRules\": {\n                        \"requestType\": \"UpdateWorkerVersioningRulesRequest\",\n                        \"responseType\": \"UpdateWorkerVersioningRulesResponse\"\n                      },\n                      \"GetWorkerVersioningRules\": {\n                        \"requestType\": \"GetWorkerVersioningRulesRequest\",\n                        \"responseType\": \"GetWorkerVersioningRulesResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/task-queues/{task_queue}/worker-versioning-rules\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/task-queues/{task_queue}/worker-versioning-rules\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/namespaces/{namespace}/task-queues/{task_queue}/worker-versioning-rules\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/namespaces/{namespace}/task-queues/{task_queue}/worker-versioning-rules\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"GetWorkerTaskReachability\": {\n                        \"requestType\": \"GetWorkerTaskReachabilityRequest\",\n                        \"responseType\": \"GetWorkerTaskReachabilityResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/worker-task-reachability\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/worker-task-reachability\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/namespaces/{namespace}/worker-task-reachability\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/namespaces/{namespace}/worker-task-reachability\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"DescribeDeployment\": {\n                        \"requestType\": \"DescribeDeploymentRequest\",\n                        \"responseType\": \"DescribeDeploymentResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/deployments/{deployment.series_name}/{deployment.build_id}\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/deployments/{deployment.series_name}/{deployment.build_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/namespaces/{namespace}/deployments/{deployment.series_name}/{deployment.build_id}\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/namespaces/{namespace}/deployments/{deployment.series_name}/{deployment.build_id}\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"DescribeWorkerDeploymentVersion\": {\n                        \"requestType\": \"DescribeWorkerDeploymentVersionRequest\",\n                        \"responseType\": \"DescribeWorkerDeploymentVersionResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}/{deployment_version.build_id}\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}/{deployment_version.build_id}\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"deployment:{deployment_version.deployment_name}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}/{deployment_version.build_id}\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}/{deployment_version.build_id}\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"deployment:{deployment_version.deployment_name}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"ListDeployments\": {\n                        \"requestType\": \"ListDeploymentsRequest\",\n                        \"responseType\": \"ListDeploymentsResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/deployments\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/deployments\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/namespaces/{namespace}/deployments\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/namespaces/{namespace}/deployments\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"GetDeploymentReachability\": {\n                        \"requestType\": \"GetDeploymentReachabilityRequest\",\n                        \"responseType\": \"GetDeploymentReachabilityResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/deployments/{deployment.series_name}/{deployment.build_id}/reachability\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/deployments/{deployment.series_name}/{deployment.build_id}/reachability\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/namespaces/{namespace}/deployments/{deployment.series_name}/{deployment.build_id}/reachability\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/namespaces/{namespace}/deployments/{deployment.series_name}/{deployment.build_id}/reachability\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"GetCurrentDeployment\": {\n                        \"requestType\": \"GetCurrentDeploymentRequest\",\n                        \"responseType\": \"GetCurrentDeploymentResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/current-deployment/{series_name}\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/current-deployment/{series_name}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/namespaces/{namespace}/current-deployment/{series_name}\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/namespaces/{namespace}/current-deployment/{series_name}\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"SetCurrentDeployment\": {\n                        \"requestType\": \"SetCurrentDeploymentRequest\",\n                        \"responseType\": \"SetCurrentDeploymentResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/current-deployment/{deployment.series_name}\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/current-deployment/{deployment.series_name}\",\n                          \"(google.api.http).additional_bindings.body\": \"*\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/current-deployment/{deployment.series_name}\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/current-deployment/{deployment.series_name}\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"SetWorkerDeploymentCurrentVersion\": {\n                        \"requestType\": \"SetWorkerDeploymentCurrentVersionRequest\",\n                        \"responseType\": \"SetWorkerDeploymentCurrentVersionResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/worker-deployments/{deployment_name}/set-current-version\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/worker-deployments/{deployment_name}/set-current-version\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"deployment:{deployment_name}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/worker-deployments/{deployment_name}/set-current-version\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/worker-deployments/{deployment_name}/set-current-version\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"deployment:{deployment_name}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"DescribeWorkerDeployment\": {\n                        \"requestType\": \"DescribeWorkerDeploymentRequest\",\n                        \"responseType\": \"DescribeWorkerDeploymentResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/worker-deployments/{deployment_name}\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/worker-deployments/{deployment_name}\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"deployment:{deployment_name}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/namespaces/{namespace}/worker-deployments/{deployment_name}\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/namespaces/{namespace}/worker-deployments/{deployment_name}\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"deployment:{deployment_name}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"DeleteWorkerDeployment\": {\n                        \"requestType\": \"DeleteWorkerDeploymentRequest\",\n                        \"responseType\": \"DeleteWorkerDeploymentResponse\",\n                        \"options\": {\n                          \"(google.api.http).delete\": \"/namespaces/{namespace}/worker-deployments/{deployment_name}\",\n                          \"(google.api.http).additional_bindings.delete\": \"/api/v1/namespaces/{namespace}/worker-deployments/{deployment_name}\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"deployment:{deployment_name}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"delete\": \"/namespaces/{namespace}/worker-deployments/{deployment_name}\",\n                              \"additional_bindings\": {\n                                \"delete\": \"/api/v1/namespaces/{namespace}/worker-deployments/{deployment_name}\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"deployment:{deployment_name}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"DeleteWorkerDeploymentVersion\": {\n                        \"requestType\": \"DeleteWorkerDeploymentVersionRequest\",\n                        \"responseType\": \"DeleteWorkerDeploymentVersionResponse\",\n                        \"options\": {\n                          \"(google.api.http).delete\": \"/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}/{deployment_version.build_id}\",\n                          \"(google.api.http).additional_bindings.delete\": \"/api/v1/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}/{deployment_version.build_id}\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"deployment:{deployment_version.deployment_name}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"delete\": \"/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}/{deployment_version.build_id}\",\n                              \"additional_bindings\": {\n                                \"delete\": \"/api/v1/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}/{deployment_version.build_id}\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"deployment:{deployment_version.deployment_name}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"SetWorkerDeploymentRampingVersion\": {\n                        \"requestType\": \"SetWorkerDeploymentRampingVersionRequest\",\n                        \"responseType\": \"SetWorkerDeploymentRampingVersionResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/worker-deployments/{deployment_name}/set-ramping-version\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/worker-deployments/{deployment_name}/set-ramping-version\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"deployment:{deployment_name}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/worker-deployments/{deployment_name}/set-ramping-version\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/worker-deployments/{deployment_name}/set-ramping-version\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"deployment:{deployment_name}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"ListWorkerDeployments\": {\n                        \"requestType\": \"ListWorkerDeploymentsRequest\",\n                        \"responseType\": \"ListWorkerDeploymentsResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/worker-deployments\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/worker-deployments\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/namespaces/{namespace}/worker-deployments\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/namespaces/{namespace}/worker-deployments\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"CreateWorkerDeployment\": {\n                        \"requestType\": \"CreateWorkerDeploymentRequest\",\n                        \"responseType\": \"CreateWorkerDeploymentResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/worker-deployments/{deployment_name}\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/worker-deployments/{deployment_name}\",\n                          \"(google.api.http).additional_bindings.body\": \"*\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/worker-deployments/{deployment_name}\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/worker-deployments/{deployment_name}\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"CreateWorkerDeploymentVersion\": {\n                        \"requestType\": \"CreateWorkerDeploymentVersionRequest\",\n                        \"responseType\": \"CreateWorkerDeploymentVersionResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}\",\n                          \"(google.api.http).additional_bindings.body\": \"*\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"UpdateWorkerDeploymentVersionComputeConfig\": {\n                        \"requestType\": \"UpdateWorkerDeploymentVersionComputeConfigRequest\",\n                        \"responseType\": \"UpdateWorkerDeploymentVersionComputeConfigResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}/{deployment_version.build_id}/update-compute-config\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}/{deployment_version.build_id}/update-compute-config\",\n                          \"(google.api.http).additional_bindings.body\": \"*\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}/{deployment_version.build_id}/update-compute-config\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}/{deployment_version.build_id}/update-compute-config\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"ValidateWorkerDeploymentVersionComputeConfig\": {\n                        \"requestType\": \"ValidateWorkerDeploymentVersionComputeConfigRequest\",\n                        \"responseType\": \"ValidateWorkerDeploymentVersionComputeConfigResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}/{deployment_version.build_id}/validate-compute-config\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}/{deployment_version.build_id}/validate-compute-config\",\n                          \"(google.api.http).additional_bindings.body\": \"*\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}/{deployment_version.build_id}/validate-compute-config\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}/{deployment_version.build_id}/validate-compute-config\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"UpdateWorkerDeploymentVersionMetadata\": {\n                        \"requestType\": \"UpdateWorkerDeploymentVersionMetadataRequest\",\n                        \"responseType\": \"UpdateWorkerDeploymentVersionMetadataResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}/{deployment_version.build_id}/update-metadata\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}/{deployment_version.build_id}/update-metadata\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"deployment:{deployment_version.deployment_name}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}/{deployment_version.build_id}/update-metadata\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}/{deployment_version.build_id}/update-metadata\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"deployment:{deployment_version.deployment_name}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"SetWorkerDeploymentManager\": {\n                        \"requestType\": \"SetWorkerDeploymentManagerRequest\",\n                        \"responseType\": \"SetWorkerDeploymentManagerResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/worker-deployments/{deployment_name}/set-manager\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/worker-deployments/{deployment_name}/set-manager\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"deployment:{deployment_name}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/worker-deployments/{deployment_name}/set-manager\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/worker-deployments/{deployment_name}/set-manager\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"deployment:{deployment_name}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"UpdateWorkflowExecution\": {\n                        \"requestType\": \"UpdateWorkflowExecutionRequest\",\n                        \"responseType\": \"UpdateWorkflowExecutionResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/update/{request.input.name}\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/update/{request.input.name}\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{workflow_execution.workflow_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/update/{request.input.name}\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/update/{request.input.name}\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"workflow:{workflow_execution.workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"PollWorkflowExecutionUpdate\": {\n                        \"requestType\": \"PollWorkflowExecutionUpdateRequest\",\n                        \"responseType\": \"PollWorkflowExecutionUpdateResponse\",\n                        \"options\": {\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{update_ref.workflow_execution.workflow_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"workflow:{update_ref.workflow_execution.workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"StartBatchOperation\": {\n                        \"requestType\": \"StartBatchOperationRequest\",\n                        \"responseType\": \"StartBatchOperationResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/batch-operations/{job_id}\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/batch-operations/{job_id}\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"batch:{job_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/batch-operations/{job_id}\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/batch-operations/{job_id}\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"batch:{job_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"StopBatchOperation\": {\n                        \"requestType\": \"StopBatchOperationRequest\",\n                        \"responseType\": \"StopBatchOperationResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/batch-operations/{job_id}/stop\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/batch-operations/{job_id}/stop\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"batch:{job_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/batch-operations/{job_id}/stop\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/batch-operations/{job_id}/stop\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"batch:{job_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"DescribeBatchOperation\": {\n                        \"requestType\": \"DescribeBatchOperationRequest\",\n                        \"responseType\": \"DescribeBatchOperationResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/batch-operations/{job_id}\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/batch-operations/{job_id}\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"batch:{job_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/namespaces/{namespace}/batch-operations/{job_id}\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/namespaces/{namespace}/batch-operations/{job_id}\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"batch:{job_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"ListBatchOperations\": {\n                        \"requestType\": \"ListBatchOperationsRequest\",\n                        \"responseType\": \"ListBatchOperationsResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/batch-operations\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/batch-operations\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/namespaces/{namespace}/batch-operations\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/namespaces/{namespace}/batch-operations\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"PollNexusTaskQueue\": {\n                        \"requestType\": \"PollNexusTaskQueueRequest\",\n                        \"responseType\": \"PollNexusTaskQueueResponse\",\n                        \"options\": {\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"poller:{poller_group_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"poller:{poller_group_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"RespondNexusTaskCompleted\": {\n                        \"requestType\": \"RespondNexusTaskCompletedRequest\",\n                        \"responseType\": \"RespondNexusTaskCompletedResponse\",\n                        \"options\": {\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"poller:{poller_group_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"poller:{poller_group_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"RespondNexusTaskFailed\": {\n                        \"requestType\": \"RespondNexusTaskFailedRequest\",\n                        \"responseType\": \"RespondNexusTaskFailedResponse\",\n                        \"options\": {\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"poller:{poller_group_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"poller:{poller_group_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"UpdateActivityOptions\": {\n                        \"requestType\": \"UpdateActivityOptionsRequest\",\n                        \"responseType\": \"UpdateActivityOptionsResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/activities-deprecated/update-options\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/activities-deprecated/update-options\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{execution.workflow_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/activities-deprecated/update-options\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/activities-deprecated/update-options\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"workflow:{execution.workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"UpdateWorkflowExecutionOptions\": {\n                        \"requestType\": \"UpdateWorkflowExecutionOptionsRequest\",\n                        \"responseType\": \"UpdateWorkflowExecutionOptionsResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/update-options\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/update-options\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{workflow_execution.workflow_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/update-options\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/update-options\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"workflow:{workflow_execution.workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"PauseActivity\": {\n                        \"requestType\": \"PauseActivityRequest\",\n                        \"responseType\": \"PauseActivityResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/activities-deprecated/pause\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/activities-deprecated/pause\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{execution.workflow_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/activities-deprecated/pause\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/activities-deprecated/pause\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"workflow:{execution.workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"UnpauseActivity\": {\n                        \"requestType\": \"UnpauseActivityRequest\",\n                        \"responseType\": \"UnpauseActivityResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/activities-deprecated/unpause\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/activities-deprecated/unpause\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{execution.workflow_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/activities-deprecated/unpause\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/activities-deprecated/unpause\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"workflow:{execution.workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"ResetActivity\": {\n                        \"requestType\": \"ResetActivityRequest\",\n                        \"responseType\": \"ResetActivityResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/activities-deprecated/reset\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/activities-deprecated/reset\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{execution.workflow_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/activities-deprecated/reset\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/activities-deprecated/reset\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"workflow:{execution.workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"CreateWorkflowRule\": {\n                        \"requestType\": \"CreateWorkflowRuleRequest\",\n                        \"responseType\": \"CreateWorkflowRuleResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/workflow-rules\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workflow-rules\",\n                          \"(google.api.http).additional_bindings.body\": \"*\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/workflow-rules\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/workflow-rules\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"DescribeWorkflowRule\": {\n                        \"requestType\": \"DescribeWorkflowRuleRequest\",\n                        \"responseType\": \"DescribeWorkflowRuleResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/workflow-rules/{rule_id}\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/workflow-rules/{rule_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/namespaces/{namespace}/workflow-rules/{rule_id}\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/namespaces/{namespace}/workflow-rules/{rule_id}\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"DeleteWorkflowRule\": {\n                        \"requestType\": \"DeleteWorkflowRuleRequest\",\n                        \"responseType\": \"DeleteWorkflowRuleResponse\",\n                        \"options\": {\n                          \"(google.api.http).delete\": \"/namespaces/{namespace}/workflow-rules/{rule_id}\",\n                          \"(google.api.http).additional_bindings.delete\": \"/api/v1/namespaces/{namespace}/workflow-rules/{rule_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"delete\": \"/namespaces/{namespace}/workflow-rules/{rule_id}\",\n                              \"additional_bindings\": {\n                                \"delete\": \"/api/v1/namespaces/{namespace}/workflow-rules/{rule_id}\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"ListWorkflowRules\": {\n                        \"requestType\": \"ListWorkflowRulesRequest\",\n                        \"responseType\": \"ListWorkflowRulesResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/workflow-rules\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/workflow-rules\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/namespaces/{namespace}/workflow-rules\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/namespaces/{namespace}/workflow-rules\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"TriggerWorkflowRule\": {\n                        \"requestType\": \"TriggerWorkflowRuleRequest\",\n                        \"responseType\": \"TriggerWorkflowRuleResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/workflows/{execution.workflow_id}/trigger-rule\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workflows/{execution.workflow_id}/trigger-rule\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{execution.workflow_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/workflows/{execution.workflow_id}/trigger-rule\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/workflows/{execution.workflow_id}/trigger-rule\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"workflow:{execution.workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"RecordWorkerHeartbeat\": {\n                        \"requestType\": \"RecordWorkerHeartbeatRequest\",\n                        \"responseType\": \"RecordWorkerHeartbeatResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/workers/heartbeat\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workers/heartbeat\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"{resource_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/workers/heartbeat\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/workers/heartbeat\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"{resource_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"ListWorkers\": {\n                        \"requestType\": \"ListWorkersRequest\",\n                        \"responseType\": \"ListWorkersResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/workers\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/workers\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/namespaces/{namespace}/workers\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/namespaces/{namespace}/workers\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"CountWorkers\": {\n                        \"requestType\": \"CountWorkersRequest\",\n                        \"responseType\": \"CountWorkersResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/worker-count\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/worker-count\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/namespaces/{namespace}/worker-count\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/namespaces/{namespace}/worker-count\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"UpdateTaskQueueConfig\": {\n                        \"requestType\": \"UpdateTaskQueueConfigRequest\",\n                        \"responseType\": \"UpdateTaskQueueConfigResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/task-queues/{task_queue}/update-config\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/task-queues/{task_queue}/update-config\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"taskqueue:{task_queue}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/task-queues/{task_queue}/update-config\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/task-queues/{task_queue}/update-config\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"taskqueue:{task_queue}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"FetchWorkerConfig\": {\n                        \"requestType\": \"FetchWorkerConfigRequest\",\n                        \"responseType\": \"FetchWorkerConfigResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/workers/fetch-config\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workers/fetch-config\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"{resource_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/workers/fetch-config\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/workers/fetch-config\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"{resource_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"UpdateWorkerConfig\": {\n                        \"requestType\": \"UpdateWorkerConfigRequest\",\n                        \"responseType\": \"UpdateWorkerConfigResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/workers/update-config\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workers/update-config\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"{resource_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/workers/update-config\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/workers/update-config\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"{resource_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"DescribeWorker\": {\n                        \"requestType\": \"DescribeWorkerRequest\",\n                        \"responseType\": \"DescribeWorkerResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/workers/describe/{worker_instance_key}\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/workers/describe/{worker_instance_key}\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"worker:{worker_instance_key}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/namespaces/{namespace}/workers/describe/{worker_instance_key}\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/namespaces/{namespace}/workers/describe/{worker_instance_key}\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"worker:{worker_instance_key}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"PauseWorkflowExecution\": {\n                        \"requestType\": \"PauseWorkflowExecutionRequest\",\n                        \"responseType\": \"PauseWorkflowExecutionResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/workflows/{workflow_id}/pause\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_id}/pause\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{workflow_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/workflows/{workflow_id}/pause\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_id}/pause\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"workflow:{workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"UnpauseWorkflowExecution\": {\n                        \"requestType\": \"UnpauseWorkflowExecutionRequest\",\n                        \"responseType\": \"UnpauseWorkflowExecutionResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/workflows/{workflow_id}/unpause\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_id}/unpause\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{workflow_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/workflows/{workflow_id}/unpause\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_id}/unpause\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"workflow:{workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"StartActivityExecution\": {\n                        \"requestType\": \"StartActivityExecutionRequest\",\n                        \"responseType\": \"StartActivityExecutionResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/activities/{activity_id}\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/activities/{activity_id}\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"activity:{activity_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/activities/{activity_id}\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/activities/{activity_id}\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"activity:{activity_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"StartNexusOperationExecution\": {\n                        \"requestType\": \"StartNexusOperationExecutionRequest\",\n                        \"responseType\": \"StartNexusOperationExecutionResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/nexus-operations/{operation_id}\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/nexus-operations/{operation_id}\",\n                          \"(google.api.http).additional_bindings.body\": \"*\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/nexus-operations/{operation_id}\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/nexus-operations/{operation_id}\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"DescribeActivityExecution\": {\n                        \"requestType\": \"DescribeActivityExecutionRequest\",\n                        \"responseType\": \"DescribeActivityExecutionResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/activities/{activity_id}\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/activities/{activity_id}\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"activity:{activity_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/namespaces/{namespace}/activities/{activity_id}\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/namespaces/{namespace}/activities/{activity_id}\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"activity:{activity_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"DescribeNexusOperationExecution\": {\n                        \"requestType\": \"DescribeNexusOperationExecutionRequest\",\n                        \"responseType\": \"DescribeNexusOperationExecutionResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/nexus-operations/{operation_id}\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/nexus-operations/{operation_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/namespaces/{namespace}/nexus-operations/{operation_id}\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/namespaces/{namespace}/nexus-operations/{operation_id}\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"PollActivityExecution\": {\n                        \"requestType\": \"PollActivityExecutionRequest\",\n                        \"responseType\": \"PollActivityExecutionResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/activities/{activity_id}/outcome\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/activities/{activity_id}/outcome\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"activity:{activity_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/namespaces/{namespace}/activities/{activity_id}/outcome\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/namespaces/{namespace}/activities/{activity_id}/outcome\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"activity:{activity_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"PollNexusOperationExecution\": {\n                        \"requestType\": \"PollNexusOperationExecutionRequest\",\n                        \"responseType\": \"PollNexusOperationExecutionResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/nexus-operations/{operation_id}/poll\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/nexus-operations/{operation_id}/poll\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/namespaces/{namespace}/nexus-operations/{operation_id}/poll\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/namespaces/{namespace}/nexus-operations/{operation_id}/poll\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"ListActivityExecutions\": {\n                        \"requestType\": \"ListActivityExecutionsRequest\",\n                        \"responseType\": \"ListActivityExecutionsResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/activities\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/activities\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/namespaces/{namespace}/activities\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/namespaces/{namespace}/activities\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"ListNexusOperationExecutions\": {\n                        \"requestType\": \"ListNexusOperationExecutionsRequest\",\n                        \"responseType\": \"ListNexusOperationExecutionsResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/nexus-operations\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/nexus-operations\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/namespaces/{namespace}/nexus-operations\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/namespaces/{namespace}/nexus-operations\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"CountActivityExecutions\": {\n                        \"requestType\": \"CountActivityExecutionsRequest\",\n                        \"responseType\": \"CountActivityExecutionsResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/activity-count\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/activity-count\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/namespaces/{namespace}/activity-count\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/namespaces/{namespace}/activity-count\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"CountNexusOperationExecutions\": {\n                        \"requestType\": \"CountNexusOperationExecutionsRequest\",\n                        \"responseType\": \"CountNexusOperationExecutionsResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/nexus-operation-count\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/nexus-operation-count\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/namespaces/{namespace}/nexus-operation-count\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/namespaces/{namespace}/nexus-operation-count\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"RequestCancelActivityExecution\": {\n                        \"requestType\": \"RequestCancelActivityExecutionRequest\",\n                        \"responseType\": \"RequestCancelActivityExecutionResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/activities/{activity_id}/cancel\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/activities/{activity_id}/cancel\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"activity:{activity_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/activities/{activity_id}/cancel\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/activities/{activity_id}/cancel\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"activity:{activity_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"RequestCancelNexusOperationExecution\": {\n                        \"requestType\": \"RequestCancelNexusOperationExecutionRequest\",\n                        \"responseType\": \"RequestCancelNexusOperationExecutionResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/nexus-operations/{operation_id}/cancel\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/nexus-operations/{operation_id}/cancel\",\n                          \"(google.api.http).additional_bindings.body\": \"*\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/nexus-operations/{operation_id}/cancel\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/nexus-operations/{operation_id}/cancel\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"TerminateActivityExecution\": {\n                        \"requestType\": \"TerminateActivityExecutionRequest\",\n                        \"responseType\": \"TerminateActivityExecutionResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/activities/{activity_id}/terminate\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/activities/{activity_id}/terminate\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"activity:{activity_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/activities/{activity_id}/terminate\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/activities/{activity_id}/terminate\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"activity:{activity_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"DeleteActivityExecution\": {\n                        \"requestType\": \"DeleteActivityExecutionRequest\",\n                        \"responseType\": \"DeleteActivityExecutionResponse\"\n                      },\n                      \"PauseActivityExecution\": {\n                        \"requestType\": \"PauseActivityExecutionRequest\",\n                        \"responseType\": \"PauseActivityExecutionResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/activities/{activity_id}/pause\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_id}/activities/{activity_id}/pause\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"{resource_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/activities/{activity_id}/pause\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": [\n                                {\n                                  \"post\": \"/api/v1/namespaces/{namespace}/activities/{activity_id}/pause\",\n                                  \"body\": \"*\"\n                                },\n                                {\n                                  \"post\": \"/namespaces/{namespace}/workflows/{workflow_id}/activities/{activity_id}/pause\",\n                                  \"body\": \"*\"\n                                },\n                                {\n                                  \"post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_id}/activities/{activity_id}/pause\",\n                                  \"body\": \"*\"\n                                }\n                              ]\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"{resource_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"ResetActivityExecution\": {\n                        \"requestType\": \"ResetActivityExecutionRequest\",\n                        \"responseType\": \"ResetActivityExecutionResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/activities/{activity_id}/reset\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_id}/activities/{activity_id}/reset\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"{resource_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/activities/{activity_id}/reset\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": [\n                                {\n                                  \"post\": \"/api/v1/namespaces/{namespace}/activities/{activity_id}/reset\",\n                                  \"body\": \"*\"\n                                },\n                                {\n                                  \"post\": \"/namespaces/{namespace}/workflows/{workflow_id}/activities/{activity_id}/reset\",\n                                  \"body\": \"*\"\n                                },\n                                {\n                                  \"post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_id}/activities/{activity_id}/reset\",\n                                  \"body\": \"*\"\n                                }\n                              ]\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"{resource_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"UnpauseActivityExecution\": {\n                        \"requestType\": \"UnpauseActivityExecutionRequest\",\n                        \"responseType\": \"UnpauseActivityExecutionResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/activities/{activity_id}/unpause\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_id}/activities/{activity_id}/unpause\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"{resource_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/activities/{activity_id}/unpause\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": [\n                                {\n                                  \"post\": \"/api/v1/namespaces/{namespace}/activities/{activity_id}/unpause\",\n                                  \"body\": \"*\"\n                                },\n                                {\n                                  \"post\": \"/namespaces/{namespace}/workflows/{workflow_id}/activities/{activity_id}/unpause\",\n                                  \"body\": \"*\"\n                                },\n                                {\n                                  \"post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_id}/activities/{activity_id}/unpause\",\n                                  \"body\": \"*\"\n                                }\n                              ]\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"{resource_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"UpdateActivityExecutionOptions\": {\n                        \"requestType\": \"UpdateActivityExecutionOptionsRequest\",\n                        \"responseType\": \"UpdateActivityExecutionOptionsResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/activities/{activity_id}/update-options\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_id}/activities/{activity_id}/update-options\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"{resource_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/activities/{activity_id}/update-options\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": [\n                                {\n                                  \"post\": \"/api/v1/namespaces/{namespace}/activities/{activity_id}/update-options\",\n                                  \"body\": \"*\"\n                                },\n                                {\n                                  \"post\": \"/namespaces/{namespace}/workflows/{workflow_id}/activities/{activity_id}/update-options\",\n                                  \"body\": \"*\"\n                                },\n                                {\n                                  \"post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_id}/activities/{activity_id}/update-options\",\n                                  \"body\": \"*\"\n                                }\n                              ]\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"{resource_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      \"TerminateNexusOperationExecution\": {\n                        \"requestType\": \"TerminateNexusOperationExecutionRequest\",\n                        \"responseType\": \"TerminateNexusOperationExecutionResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/nexus-operations/{operation_id}/terminate\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/nexus-operations/{operation_id}/terminate\",\n                          \"(google.api.http).additional_bindings.body\": \"*\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/namespaces/{namespace}/nexus-operations/{operation_id}/terminate\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/namespaces/{namespace}/nexus-operations/{operation_id}/terminate\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"DeleteNexusOperationExecution\": {\n                        \"requestType\": \"DeleteNexusOperationExecutionRequest\",\n                        \"responseType\": \"DeleteNexusOperationExecutionResponse\"\n                      },\n                      \"PollWorkflowExecutionTimeSkipping\": {\n                        \"requestType\": \"PollWorkflowExecutionTimeSkippingRequest\",\n                        \"responseType\": \"PollWorkflowExecutionTimeSkippingResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/time-skipping/poll\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/time-skipping/poll\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{workflow_execution.workflow_id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/time-skipping/poll\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/time-skipping/poll\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              \"header\": \"temporal-resource-id\",\n                              \"value\": \"workflow:{workflow_execution.workflow_id}\"\n                            }\n                          }\n                        ]\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          \"activity\": {\n            \"nested\": {\n              \"v1\": {\n                \"options\": {\n                  \"go_package\": \"go.temporal.io/api/activity/v1;activity\",\n                  \"java_package\": \"io.temporal.api.activity.v1\",\n                  \"java_multiple_files\": true,\n                  \"java_outer_classname\": \"MessageProto\",\n                  \"ruby_package\": \"Temporalio::Api::Activity::V1\",\n                  \"csharp_namespace\": \"Temporalio.Api.Activity.V1\"\n                },\n                \"nested\": {\n                  \"ActivityExecutionOutcome\": {\n                    \"oneofs\": {\n                      \"value\": {\n                        \"oneof\": [\n                          \"result\",\n                          \"failure\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"result\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 1\n                      },\n                      \"failure\": {\n                        \"type\": \"temporal.api.failure.v1.Failure\",\n                        \"id\": 2\n                      },\n                      \"retryState\": {\n                        \"type\": \"temporal.api.enums.v1.RetryState\",\n                        \"id\": 3,\n                        \"protoName\": \"retry_state\"\n                      }\n                    }\n                  },\n                  \"ActivityOptions\": {\n                    \"fields\": {\n                      \"taskQueue\": {\n                        \"type\": \"temporal.api.taskqueue.v1.TaskQueue\",\n                        \"id\": 1,\n                        \"protoName\": \"task_queue\"\n                      },\n                      \"scheduleToCloseTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 2,\n                        \"protoName\": \"schedule_to_close_timeout\"\n                      },\n                      \"scheduleToStartTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 3,\n                        \"protoName\": \"schedule_to_start_timeout\"\n                      },\n                      \"startToCloseTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 4,\n                        \"protoName\": \"start_to_close_timeout\"\n                      },\n                      \"heartbeatTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 5,\n                        \"protoName\": \"heartbeat_timeout\"\n                      },\n                      \"retryPolicy\": {\n                        \"type\": \"temporal.api.common.v1.RetryPolicy\",\n                        \"id\": 6,\n                        \"protoName\": \"retry_policy\"\n                      },\n                      \"priority\": {\n                        \"type\": \"temporal.api.common.v1.Priority\",\n                        \"id\": 7\n                      },\n                      \"startDelay\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 8,\n                        \"protoName\": \"start_delay\"\n                      }\n                    }\n                  },\n                  \"ActivityExecutionInfo\": {\n                    \"fields\": {\n                      \"activityId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"activity_id\"\n                      },\n                      \"runId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"run_id\"\n                      },\n                      \"activityType\": {\n                        \"type\": \"temporal.api.common.v1.ActivityType\",\n                        \"id\": 3,\n                        \"protoName\": \"activity_type\"\n                      },\n                      \"status\": {\n                        \"type\": \"temporal.api.enums.v1.ActivityExecutionStatus\",\n                        \"id\": 4\n                      },\n                      \"runState\": {\n                        \"type\": \"temporal.api.enums.v1.PendingActivityState\",\n                        \"id\": 5,\n                        \"protoName\": \"run_state\"\n                      },\n                      \"taskQueue\": {\n                        \"type\": \"string\",\n                        \"id\": 6,\n                        \"protoName\": \"task_queue\"\n                      },\n                      \"scheduleToCloseTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 7,\n                        \"protoName\": \"schedule_to_close_timeout\"\n                      },\n                      \"scheduleToStartTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 8,\n                        \"protoName\": \"schedule_to_start_timeout\"\n                      },\n                      \"startToCloseTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 9,\n                        \"protoName\": \"start_to_close_timeout\"\n                      },\n                      \"heartbeatTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 10,\n                        \"protoName\": \"heartbeat_timeout\"\n                      },\n                      \"retryPolicy\": {\n                        \"type\": \"temporal.api.common.v1.RetryPolicy\",\n                        \"id\": 11,\n                        \"protoName\": \"retry_policy\"\n                      },\n                      \"heartbeatDetails\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 12,\n                        \"protoName\": \"heartbeat_details\"\n                      },\n                      \"lastHeartbeatTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 13,\n                        \"protoName\": \"last_heartbeat_time\"\n                      },\n                      \"lastStartedTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 14,\n                        \"protoName\": \"last_started_time\"\n                      },\n                      \"attempt\": {\n                        \"type\": \"int32\",\n                        \"id\": 15\n                      },\n                      \"executionDuration\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 16,\n                        \"protoName\": \"execution_duration\"\n                      },\n                      \"scheduleTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 17,\n                        \"protoName\": \"schedule_time\"\n                      },\n                      \"expirationTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 18,\n                        \"protoName\": \"expiration_time\"\n                      },\n                      \"closeTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 19,\n                        \"protoName\": \"close_time\"\n                      },\n                      \"lastFailure\": {\n                        \"type\": \"temporal.api.failure.v1.Failure\",\n                        \"id\": 20,\n                        \"protoName\": \"last_failure\"\n                      },\n                      \"lastWorkerIdentity\": {\n                        \"type\": \"string\",\n                        \"id\": 21,\n                        \"protoName\": \"last_worker_identity\"\n                      },\n                      \"currentRetryInterval\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 22,\n                        \"protoName\": \"current_retry_interval\"\n                      },\n                      \"lastAttemptCompleteTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 23,\n                        \"protoName\": \"last_attempt_complete_time\"\n                      },\n                      \"nextAttemptScheduleTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 24,\n                        \"protoName\": \"next_attempt_schedule_time\"\n                      },\n                      \"lastDeploymentVersion\": {\n                        \"type\": \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        \"id\": 25,\n                        \"protoName\": \"last_deployment_version\"\n                      },\n                      \"priority\": {\n                        \"type\": \"temporal.api.common.v1.Priority\",\n                        \"id\": 26\n                      },\n                      \"stateTransitionCount\": {\n                        \"type\": \"int64\",\n                        \"id\": 27,\n                        \"protoName\": \"state_transition_count\"\n                      },\n                      \"stateSizeBytes\": {\n                        \"type\": \"int64\",\n                        \"id\": 28,\n                        \"protoName\": \"state_size_bytes\"\n                      },\n                      \"searchAttributes\": {\n                        \"type\": \"temporal.api.common.v1.SearchAttributes\",\n                        \"id\": 29,\n                        \"protoName\": \"search_attributes\"\n                      },\n                      \"header\": {\n                        \"type\": \"temporal.api.common.v1.Header\",\n                        \"id\": 30\n                      },\n                      \"userMetadata\": {\n                        \"type\": \"temporal.api.sdk.v1.UserMetadata\",\n                        \"id\": 31,\n                        \"protoName\": \"user_metadata\"\n                      },\n                      \"canceledReason\": {\n                        \"type\": \"string\",\n                        \"id\": 32,\n                        \"protoName\": \"canceled_reason\"\n                      },\n                      \"links\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.common.v1.Link\",\n                        \"id\": 33\n                      },\n                      \"totalHeartbeatCount\": {\n                        \"type\": \"int64\",\n                        \"id\": 34,\n                        \"protoName\": \"total_heartbeat_count\"\n                      },\n                      \"sdkName\": {\n                        \"type\": \"string\",\n                        \"id\": 35,\n                        \"protoName\": \"sdk_name\"\n                      },\n                      \"sdkVersion\": {\n                        \"type\": \"string\",\n                        \"id\": 36,\n                        \"protoName\": \"sdk_version\"\n                      },\n                      \"startDelay\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 37,\n                        \"protoName\": \"start_delay\"\n                      },\n                      \"executionTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 38,\n                        \"protoName\": \"execution_time\"\n                      }\n                    }\n                  },\n                  \"ActivityExecutionListInfo\": {\n                    \"fields\": {\n                      \"activityId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"activity_id\"\n                      },\n                      \"runId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"run_id\"\n                      },\n                      \"activityType\": {\n                        \"type\": \"temporal.api.common.v1.ActivityType\",\n                        \"id\": 3,\n                        \"protoName\": \"activity_type\"\n                      },\n                      \"scheduleTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 4,\n                        \"protoName\": \"schedule_time\"\n                      },\n                      \"closeTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 5,\n                        \"protoName\": \"close_time\"\n                      },\n                      \"status\": {\n                        \"type\": \"temporal.api.enums.v1.ActivityExecutionStatus\",\n                        \"id\": 6\n                      },\n                      \"searchAttributes\": {\n                        \"type\": \"temporal.api.common.v1.SearchAttributes\",\n                        \"id\": 7,\n                        \"protoName\": \"search_attributes\"\n                      },\n                      \"taskQueue\": {\n                        \"type\": \"string\",\n                        \"id\": 8,\n                        \"protoName\": \"task_queue\"\n                      },\n                      \"stateTransitionCount\": {\n                        \"type\": \"int64\",\n                        \"id\": 9,\n                        \"protoName\": \"state_transition_count\"\n                      },\n                      \"stateSizeBytes\": {\n                        \"type\": \"int64\",\n                        \"id\": 10,\n                        \"protoName\": \"state_size_bytes\"\n                      },\n                      \"executionDuration\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 11,\n                        \"protoName\": \"execution_duration\"\n                      },\n                      \"executionTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 12,\n                        \"protoName\": \"execution_time\"\n                      }\n                    }\n                  },\n                  \"CallbackInfo\": {\n                    \"fields\": {\n                      \"trigger\": {\n                        \"type\": \"Trigger\",\n                        \"id\": 1\n                      },\n                      \"info\": {\n                        \"type\": \"temporal.api.callback.v1.CallbackInfo\",\n                        \"id\": 2\n                      }\n                    },\n                    \"nested\": {\n                      \"ActivityClosed\": {\n                        \"fields\": {}\n                      },\n                      \"Trigger\": {\n                        \"oneofs\": {\n                          \"variant\": {\n                            \"oneof\": [\n                              \"activityClosed\"\n                            ]\n                          }\n                        },\n                        \"fields\": {\n                          \"activityClosed\": {\n                            \"type\": \"ActivityClosed\",\n                            \"id\": 1,\n                            \"protoName\": \"activity_closed\"\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          \"deployment\": {\n            \"nested\": {\n              \"v1\": {\n                \"options\": {\n                  \"go_package\": \"go.temporal.io/api/deployment/v1;deployment\",\n                  \"java_package\": \"io.temporal.api.deployment.v1\",\n                  \"java_multiple_files\": true,\n                  \"java_outer_classname\": \"MessageProto\",\n                  \"ruby_package\": \"Temporalio::Api::Deployment::V1\",\n                  \"csharp_namespace\": \"Temporalio.Api.Deployment.V1\"\n                },\n                \"nested\": {\n                  \"WorkerDeploymentOptions\": {\n                    \"fields\": {\n                      \"deploymentName\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"deployment_name\"\n                      },\n                      \"buildId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"build_id\"\n                      },\n                      \"workerVersioningMode\": {\n                        \"type\": \"temporal.api.enums.v1.WorkerVersioningMode\",\n                        \"id\": 3,\n                        \"protoName\": \"worker_versioning_mode\"\n                      }\n                    }\n                  },\n                  \"Deployment\": {\n                    \"fields\": {\n                      \"seriesName\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"series_name\"\n                      },\n                      \"buildId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"build_id\"\n                      }\n                    }\n                  },\n                  \"DeploymentInfo\": {\n                    \"fields\": {\n                      \"deployment\": {\n                        \"type\": \"Deployment\",\n                        \"id\": 1\n                      },\n                      \"createTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 2,\n                        \"protoName\": \"create_time\"\n                      },\n                      \"taskQueueInfos\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"TaskQueueInfo\",\n                        \"id\": 3,\n                        \"protoName\": \"task_queue_infos\"\n                      },\n                      \"metadata\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"temporal.api.common.v1.Payload\",\n                        \"id\": 4\n                      },\n                      \"isCurrent\": {\n                        \"type\": \"bool\",\n                        \"id\": 5,\n                        \"protoName\": \"is_current\"\n                      }\n                    },\n                    \"nested\": {\n                      \"TaskQueueInfo\": {\n                        \"fields\": {\n                          \"name\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"type\": {\n                            \"type\": \"temporal.api.enums.v1.TaskQueueType\",\n                            \"id\": 2\n                          },\n                          \"firstPollerTime\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 3,\n                            \"protoName\": \"first_poller_time\"\n                          }\n                        }\n                      }\n                    }\n                  },\n                  \"UpdateDeploymentMetadata\": {\n                    \"fields\": {\n                      \"upsertEntries\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"temporal.api.common.v1.Payload\",\n                        \"id\": 1,\n                        \"protoName\": \"upsert_entries\"\n                      },\n                      \"removeEntries\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"remove_entries\"\n                      }\n                    }\n                  },\n                  \"DeploymentListInfo\": {\n                    \"fields\": {\n                      \"deployment\": {\n                        \"type\": \"deployment.v1.Deployment\",\n                        \"id\": 1\n                      },\n                      \"createTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 2,\n                        \"protoName\": \"create_time\"\n                      },\n                      \"isCurrent\": {\n                        \"type\": \"bool\",\n                        \"id\": 3,\n                        \"protoName\": \"is_current\"\n                      }\n                    }\n                  },\n                  \"WorkerDeploymentVersionInfo\": {\n                    \"fields\": {\n                      \"version\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"status\": {\n                        \"type\": \"temporal.api.enums.v1.WorkerDeploymentVersionStatus\",\n                        \"id\": 14\n                      },\n                      \"deploymentVersion\": {\n                        \"type\": \"WorkerDeploymentVersion\",\n                        \"id\": 11,\n                        \"protoName\": \"deployment_version\"\n                      },\n                      \"deploymentName\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"deployment_name\"\n                      },\n                      \"createTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 3,\n                        \"protoName\": \"create_time\"\n                      },\n                      \"routingChangedTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 4,\n                        \"protoName\": \"routing_changed_time\"\n                      },\n                      \"currentSinceTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 5,\n                        \"protoName\": \"current_since_time\"\n                      },\n                      \"rampingSinceTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 6,\n                        \"protoName\": \"ramping_since_time\"\n                      },\n                      \"firstActivationTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 12,\n                        \"protoName\": \"first_activation_time\"\n                      },\n                      \"lastCurrentTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 15,\n                        \"protoName\": \"last_current_time\"\n                      },\n                      \"lastDeactivationTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 13,\n                        \"protoName\": \"last_deactivation_time\"\n                      },\n                      \"rampPercentage\": {\n                        \"type\": \"float\",\n                        \"id\": 7,\n                        \"protoName\": \"ramp_percentage\"\n                      },\n                      \"taskQueueInfos\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"VersionTaskQueueInfo\",\n                        \"id\": 8,\n                        \"protoName\": \"task_queue_infos\"\n                      },\n                      \"drainageInfo\": {\n                        \"type\": \"VersionDrainageInfo\",\n                        \"id\": 9,\n                        \"protoName\": \"drainage_info\"\n                      },\n                      \"metadata\": {\n                        \"type\": \"VersionMetadata\",\n                        \"id\": 10\n                      },\n                      \"computeConfig\": {\n                        \"type\": \"temporal.api.compute.v1.ComputeConfig\",\n                        \"id\": 16,\n                        \"protoName\": \"compute_config\"\n                      },\n                      \"lastModifierIdentity\": {\n                        \"type\": \"string\",\n                        \"id\": 17,\n                        \"protoName\": \"last_modifier_identity\"\n                      }\n                    },\n                    \"nested\": {\n                      \"VersionTaskQueueInfo\": {\n                        \"fields\": {\n                          \"name\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"type\": {\n                            \"type\": \"temporal.api.enums.v1.TaskQueueType\",\n                            \"id\": 2\n                          }\n                        }\n                      }\n                    }\n                  },\n                  \"VersionDrainageInfo\": {\n                    \"fields\": {\n                      \"status\": {\n                        \"type\": \"enums.v1.VersionDrainageStatus\",\n                        \"id\": 1\n                      },\n                      \"lastChangedTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 2,\n                        \"protoName\": \"last_changed_time\"\n                      },\n                      \"lastCheckedTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 3,\n                        \"protoName\": \"last_checked_time\"\n                      }\n                    }\n                  },\n                  \"ComputeStatus\": {\n                    \"fields\": {\n                      \"providerValidation\": {\n                        \"type\": \"ProviderValidationStatus\",\n                        \"id\": 1,\n                        \"protoName\": \"provider_validation\"\n                      }\n                    },\n                    \"nested\": {\n                      \"ProviderValidationStatus\": {\n                        \"fields\": {\n                          \"errorMessage\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"error_message\"\n                          },\n                          \"lastCheckTime\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 2,\n                            \"protoName\": \"last_check_time\"\n                          }\n                        }\n                      }\n                    }\n                  },\n                  \"WorkerDeploymentInfo\": {\n                    \"fields\": {\n                      \"name\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"versionSummaries\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"WorkerDeploymentVersionSummary\",\n                        \"id\": 2,\n                        \"protoName\": \"version_summaries\"\n                      },\n                      \"createTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 3,\n                        \"protoName\": \"create_time\"\n                      },\n                      \"routingConfig\": {\n                        \"type\": \"RoutingConfig\",\n                        \"id\": 4,\n                        \"protoName\": \"routing_config\"\n                      },\n                      \"lastModifierIdentity\": {\n                        \"type\": \"string\",\n                        \"id\": 5,\n                        \"protoName\": \"last_modifier_identity\"\n                      },\n                      \"managerIdentity\": {\n                        \"type\": \"string\",\n                        \"id\": 6,\n                        \"protoName\": \"manager_identity\"\n                      },\n                      \"routingConfigUpdateState\": {\n                        \"type\": \"temporal.api.enums.v1.RoutingConfigUpdateState\",\n                        \"id\": 7,\n                        \"protoName\": \"routing_config_update_state\"\n                      }\n                    },\n                    \"nested\": {\n                      \"WorkerDeploymentVersionSummary\": {\n                        \"fields\": {\n                          \"version\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"options\": {\n                              \"deprecated\": true\n                            }\n                          },\n                          \"status\": {\n                            \"type\": \"temporal.api.enums.v1.WorkerDeploymentVersionStatus\",\n                            \"id\": 11\n                          },\n                          \"deploymentVersion\": {\n                            \"type\": \"WorkerDeploymentVersion\",\n                            \"id\": 4,\n                            \"protoName\": \"deployment_version\"\n                          },\n                          \"createTime\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 2,\n                            \"protoName\": \"create_time\"\n                          },\n                          \"drainageStatus\": {\n                            \"type\": \"enums.v1.VersionDrainageStatus\",\n                            \"id\": 3,\n                            \"protoName\": \"drainage_status\"\n                          },\n                          \"drainageInfo\": {\n                            \"type\": \"VersionDrainageInfo\",\n                            \"id\": 5,\n                            \"protoName\": \"drainage_info\"\n                          },\n                          \"currentSinceTime\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 6,\n                            \"protoName\": \"current_since_time\"\n                          },\n                          \"rampingSinceTime\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 7,\n                            \"protoName\": \"ramping_since_time\"\n                          },\n                          \"routingUpdateTime\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 8,\n                            \"protoName\": \"routing_update_time\"\n                          },\n                          \"firstActivationTime\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 9,\n                            \"protoName\": \"first_activation_time\"\n                          },\n                          \"lastCurrentTime\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 12,\n                            \"protoName\": \"last_current_time\"\n                          },\n                          \"lastDeactivationTime\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 10,\n                            \"protoName\": \"last_deactivation_time\"\n                          },\n                          \"computeConfig\": {\n                            \"type\": \"temporal.api.compute.v1.ComputeConfigSummary\",\n                            \"id\": 13,\n                            \"protoName\": \"compute_config\"\n                          },\n                          \"computeStatus\": {\n                            \"type\": \"ComputeStatus\",\n                            \"id\": 14,\n                            \"protoName\": \"compute_status\"\n                          }\n                        }\n                      }\n                    }\n                  },\n                  \"WorkerDeploymentVersion\": {\n                    \"fields\": {\n                      \"buildId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"build_id\"\n                      },\n                      \"deploymentName\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"deployment_name\"\n                      }\n                    }\n                  },\n                  \"VersionMetadata\": {\n                    \"fields\": {\n                      \"entries\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"temporal.api.common.v1.Payload\",\n                        \"id\": 1\n                      }\n                    }\n                  },\n                  \"RoutingConfig\": {\n                    \"fields\": {\n                      \"currentDeploymentVersion\": {\n                        \"type\": \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        \"id\": 7,\n                        \"protoName\": \"current_deployment_version\"\n                      },\n                      \"currentVersion\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"current_version\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"rampingDeploymentVersion\": {\n                        \"type\": \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        \"id\": 9,\n                        \"protoName\": \"ramping_deployment_version\"\n                      },\n                      \"rampingVersion\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"ramping_version\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"rampingVersionPercentage\": {\n                        \"type\": \"float\",\n                        \"id\": 3,\n                        \"protoName\": \"ramping_version_percentage\"\n                      },\n                      \"currentVersionChangedTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 4,\n                        \"protoName\": \"current_version_changed_time\"\n                      },\n                      \"rampingVersionChangedTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 5,\n                        \"protoName\": \"ramping_version_changed_time\"\n                      },\n                      \"rampingVersionPercentageChangedTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 6,\n                        \"protoName\": \"ramping_version_percentage_changed_time\"\n                      },\n                      \"revisionNumber\": {\n                        \"type\": \"int64\",\n                        \"id\": 10,\n                        \"protoName\": \"revision_number\"\n                      }\n                    }\n                  },\n                  \"InheritedAutoUpgradeInfo\": {\n                    \"fields\": {\n                      \"sourceDeploymentVersion\": {\n                        \"type\": \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        \"id\": 1,\n                        \"protoName\": \"source_deployment_version\"\n                      },\n                      \"sourceDeploymentRevisionNumber\": {\n                        \"type\": \"int64\",\n                        \"id\": 2,\n                        \"protoName\": \"source_deployment_revision_number\"\n                      },\n                      \"continueAsNewInitialVersioningBehavior\": {\n                        \"type\": \"temporal.api.enums.v1.ContinueAsNewVersioningBehavior\",\n                        \"id\": 3,\n                        \"protoName\": \"continue_as_new_initial_versioning_behavior\"\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          \"compute\": {\n            \"nested\": {\n              \"v1\": {\n                \"options\": {\n                  \"go_package\": \"go.temporal.io/api/compute/v1;compute\",\n                  \"java_package\": \"io.temporal.api.compute.v1\",\n                  \"java_multiple_files\": true,\n                  \"java_outer_classname\": \"ScalerProto\",\n                  \"ruby_package\": \"Temporalio::Api::Compute::V1\",\n                  \"csharp_namespace\": \"Temporalio.Api.Compute.V1\"\n                },\n                \"nested\": {\n                  \"ComputeConfigScalingGroup\": {\n                    \"fields\": {\n                      \"taskQueueTypes\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.enums.v1.TaskQueueType\",\n                        \"id\": 1,\n                        \"protoName\": \"task_queue_types\"\n                      },\n                      \"provider\": {\n                        \"type\": \"temporal.api.compute.v1.ComputeProvider\",\n                        \"id\": 3\n                      },\n                      \"scaler\": {\n                        \"type\": \"temporal.api.compute.v1.ComputeScaler\",\n                        \"id\": 4\n                      }\n                    }\n                  },\n                  \"ComputeConfig\": {\n                    \"fields\": {\n                      \"scalingGroups\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"ComputeConfigScalingGroup\",\n                        \"id\": 1,\n                        \"protoName\": \"scaling_groups\"\n                      }\n                    }\n                  },\n                  \"ComputeConfigScalingGroupUpdate\": {\n                    \"fields\": {\n                      \"scalingGroup\": {\n                        \"type\": \"ComputeConfigScalingGroup\",\n                        \"id\": 1,\n                        \"protoName\": \"scaling_group\"\n                      },\n                      \"updateMask\": {\n                        \"type\": \"google.protobuf.FieldMask\",\n                        \"id\": 2,\n                        \"protoName\": \"update_mask\"\n                      }\n                    }\n                  },\n                  \"ComputeConfigSummary\": {\n                    \"fields\": {\n                      \"scalingGroups\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"ComputeConfigScalingGroupSummary\",\n                        \"id\": 1,\n                        \"protoName\": \"scaling_groups\"\n                      }\n                    }\n                  },\n                  \"ComputeConfigScalingGroupSummary\": {\n                    \"fields\": {\n                      \"taskQueueTypes\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.enums.v1.TaskQueueType\",\n                        \"id\": 1,\n                        \"protoName\": \"task_queue_types\"\n                      },\n                      \"providerType\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"provider_type\"\n                      }\n                    }\n                  },\n                  \"ComputeProvider\": {\n                    \"fields\": {\n                      \"type\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"details\": {\n                        \"type\": \"temporal.api.common.v1.Payload\",\n                        \"id\": 2\n                      },\n                      \"nexusEndpoint\": {\n                        \"type\": \"string\",\n                        \"id\": 10,\n                        \"protoName\": \"nexus_endpoint\"\n                      }\n                    }\n                  },\n                  \"ComputeScaler\": {\n                    \"fields\": {\n                      \"type\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"details\": {\n                        \"type\": \"temporal.api.common.v1.Payload\",\n                        \"id\": 2\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          \"callback\": {\n            \"nested\": {\n              \"v1\": {\n                \"options\": {\n                  \"go_package\": \"go.temporal.io/api/callback/v1;callback\",\n                  \"java_package\": \"io.temporal.api.callback.v1\",\n                  \"java_multiple_files\": true,\n                  \"java_outer_classname\": \"MessageProto\",\n                  \"ruby_package\": \"Temporalio::Api::Callback::V1\",\n                  \"csharp_namespace\": \"Temporalio.Api.Callback.V1\"\n                },\n                \"nested\": {\n                  \"CallbackInfo\": {\n                    \"fields\": {\n                      \"callback\": {\n                        \"type\": \"temporal.api.common.v1.Callback\",\n                        \"id\": 1\n                      },\n                      \"registrationTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 2,\n                        \"protoName\": \"registration_time\"\n                      },\n                      \"state\": {\n                        \"type\": \"temporal.api.enums.v1.CallbackState\",\n                        \"id\": 3\n                      },\n                      \"attempt\": {\n                        \"type\": \"int32\",\n                        \"id\": 4\n                      },\n                      \"lastAttemptCompleteTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 5,\n                        \"protoName\": \"last_attempt_complete_time\"\n                      },\n                      \"lastAttemptFailure\": {\n                        \"type\": \"temporal.api.failure.v1.Failure\",\n                        \"id\": 6,\n                        \"protoName\": \"last_attempt_failure\"\n                      },\n                      \"nextAttemptScheduleTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 7,\n                        \"protoName\": \"next_attempt_schedule_time\"\n                      },\n                      \"blockedReason\": {\n                        \"type\": \"string\",\n                        \"id\": 8,\n                        \"protoName\": \"blocked_reason\"\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          \"taskqueue\": {\n            \"nested\": {\n              \"v1\": {\n                \"options\": {\n                  \"go_package\": \"go.temporal.io/api/taskqueue/v1;taskqueue\",\n                  \"java_package\": \"io.temporal.api.taskqueue.v1\",\n                  \"java_multiple_files\": true,\n                  \"java_outer_classname\": \"MessageProto\",\n                  \"ruby_package\": \"Temporalio::Api::TaskQueue::V1\",\n                  \"csharp_namespace\": \"Temporalio.Api.TaskQueue.V1\"\n                },\n                \"nested\": {\n                  \"TaskQueue\": {\n                    \"fields\": {\n                      \"name\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"kind\": {\n                        \"type\": \"temporal.api.enums.v1.TaskQueueKind\",\n                        \"id\": 2\n                      },\n                      \"normalName\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"normal_name\"\n                      }\n                    }\n                  },\n                  \"TaskQueueMetadata\": {\n                    \"fields\": {\n                      \"maxTasksPerSecond\": {\n                        \"type\": \"google.protobuf.DoubleValue\",\n                        \"id\": 1,\n                        \"protoName\": \"max_tasks_per_second\"\n                      }\n                    }\n                  },\n                  \"TaskQueueVersioningInfo\": {\n                    \"fields\": {\n                      \"currentDeploymentVersion\": {\n                        \"type\": \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        \"id\": 7,\n                        \"protoName\": \"current_deployment_version\"\n                      },\n                      \"currentVersion\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"current_version\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"rampingDeploymentVersion\": {\n                        \"type\": \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        \"id\": 9,\n                        \"protoName\": \"ramping_deployment_version\"\n                      },\n                      \"rampingVersion\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"ramping_version\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"rampingVersionPercentage\": {\n                        \"type\": \"float\",\n                        \"id\": 3,\n                        \"protoName\": \"ramping_version_percentage\"\n                      },\n                      \"updateTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 4,\n                        \"protoName\": \"update_time\"\n                      }\n                    }\n                  },\n                  \"TaskQueueVersionSelection\": {\n                    \"fields\": {\n                      \"buildIds\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"build_ids\"\n                      },\n                      \"unversioned\": {\n                        \"type\": \"bool\",\n                        \"id\": 2\n                      },\n                      \"allActive\": {\n                        \"type\": \"bool\",\n                        \"id\": 3,\n                        \"protoName\": \"all_active\"\n                      }\n                    }\n                  },\n                  \"TaskQueueVersionInfo\": {\n                    \"fields\": {\n                      \"typesInfo\": {\n                        \"keyType\": \"int32\",\n                        \"type\": \"TaskQueueTypeInfo\",\n                        \"id\": 1,\n                        \"protoName\": \"types_info\"\n                      },\n                      \"taskReachability\": {\n                        \"type\": \"temporal.api.enums.v1.BuildIdTaskReachability\",\n                        \"id\": 2,\n                        \"protoName\": \"task_reachability\"\n                      }\n                    }\n                  },\n                  \"TaskQueueTypeInfo\": {\n                    \"fields\": {\n                      \"pollers\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"PollerInfo\",\n                        \"id\": 1\n                      },\n                      \"stats\": {\n                        \"type\": \"TaskQueueStats\",\n                        \"id\": 2\n                      }\n                    }\n                  },\n                  \"TaskQueueStats\": {\n                    \"fields\": {\n                      \"approximateBacklogCount\": {\n                        \"type\": \"int64\",\n                        \"id\": 1,\n                        \"protoName\": \"approximate_backlog_count\"\n                      },\n                      \"approximateBacklogAge\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 2,\n                        \"protoName\": \"approximate_backlog_age\"\n                      },\n                      \"tasksAddRate\": {\n                        \"type\": \"float\",\n                        \"id\": 3,\n                        \"protoName\": \"tasks_add_rate\"\n                      },\n                      \"tasksDispatchRate\": {\n                        \"type\": \"float\",\n                        \"id\": 4,\n                        \"protoName\": \"tasks_dispatch_rate\"\n                      },\n                      \"rateLimitingActive\": {\n                        \"type\": \"bool\",\n                        \"id\": 5,\n                        \"protoName\": \"rate_limiting_active\"\n                      }\n                    }\n                  },\n                  \"TaskQueueStatus\": {\n                    \"fields\": {\n                      \"backlogCountHint\": {\n                        \"type\": \"int64\",\n                        \"id\": 1,\n                        \"protoName\": \"backlog_count_hint\"\n                      },\n                      \"readLevel\": {\n                        \"type\": \"int64\",\n                        \"id\": 2,\n                        \"protoName\": \"read_level\"\n                      },\n                      \"ackLevel\": {\n                        \"type\": \"int64\",\n                        \"id\": 3,\n                        \"protoName\": \"ack_level\"\n                      },\n                      \"ratePerSecond\": {\n                        \"type\": \"double\",\n                        \"id\": 4,\n                        \"protoName\": \"rate_per_second\"\n                      },\n                      \"taskIdBlock\": {\n                        \"type\": \"TaskIdBlock\",\n                        \"id\": 5,\n                        \"protoName\": \"task_id_block\"\n                      }\n                    }\n                  },\n                  \"TaskIdBlock\": {\n                    \"fields\": {\n                      \"startId\": {\n                        \"type\": \"int64\",\n                        \"id\": 1,\n                        \"protoName\": \"start_id\"\n                      },\n                      \"endId\": {\n                        \"type\": \"int64\",\n                        \"id\": 2,\n                        \"protoName\": \"end_id\"\n                      }\n                    }\n                  },\n                  \"TaskQueuePartitionMetadata\": {\n                    \"fields\": {\n                      \"key\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"ownerHostName\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"owner_host_name\"\n                      }\n                    }\n                  },\n                  \"PollerInfo\": {\n                    \"fields\": {\n                      \"lastAccessTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 1,\n                        \"protoName\": \"last_access_time\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"ratePerSecond\": {\n                        \"type\": \"double\",\n                        \"id\": 3,\n                        \"protoName\": \"rate_per_second\"\n                      },\n                      \"workerVersionCapabilities\": {\n                        \"type\": \"temporal.api.common.v1.WorkerVersionCapabilities\",\n                        \"id\": 4,\n                        \"protoName\": \"worker_version_capabilities\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"deploymentOptions\": {\n                        \"type\": \"temporal.api.deployment.v1.WorkerDeploymentOptions\",\n                        \"id\": 5,\n                        \"protoName\": \"deployment_options\"\n                      }\n                    }\n                  },\n                  \"StickyExecutionAttributes\": {\n                    \"fields\": {\n                      \"workerTaskQueue\": {\n                        \"type\": \"TaskQueue\",\n                        \"id\": 1,\n                        \"protoName\": \"worker_task_queue\"\n                      },\n                      \"scheduleToStartTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 2,\n                        \"protoName\": \"schedule_to_start_timeout\"\n                      }\n                    }\n                  },\n                  \"CompatibleVersionSet\": {\n                    \"fields\": {\n                      \"buildIds\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"build_ids\"\n                      }\n                    }\n                  },\n                  \"TaskQueueReachability\": {\n                    \"fields\": {\n                      \"taskQueue\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"task_queue\"\n                      },\n                      \"reachability\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.enums.v1.TaskReachability\",\n                        \"id\": 2\n                      }\n                    }\n                  },\n                  \"BuildIdReachability\": {\n                    \"fields\": {\n                      \"buildId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"build_id\"\n                      },\n                      \"taskQueueReachability\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"TaskQueueReachability\",\n                        \"id\": 2,\n                        \"protoName\": \"task_queue_reachability\"\n                      }\n                    }\n                  },\n                  \"RampByPercentage\": {\n                    \"fields\": {\n                      \"rampPercentage\": {\n                        \"type\": \"float\",\n                        \"id\": 1,\n                        \"protoName\": \"ramp_percentage\"\n                      }\n                    }\n                  },\n                  \"BuildIdAssignmentRule\": {\n                    \"oneofs\": {\n                      \"ramp\": {\n                        \"oneof\": [\n                          \"percentageRamp\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"targetBuildId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"target_build_id\"\n                      },\n                      \"percentageRamp\": {\n                        \"type\": \"RampByPercentage\",\n                        \"id\": 3,\n                        \"protoName\": \"percentage_ramp\"\n                      }\n                    }\n                  },\n                  \"CompatibleBuildIdRedirectRule\": {\n                    \"fields\": {\n                      \"sourceBuildId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"source_build_id\"\n                      },\n                      \"targetBuildId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"target_build_id\"\n                      }\n                    }\n                  },\n                  \"TimestampedBuildIdAssignmentRule\": {\n                    \"fields\": {\n                      \"rule\": {\n                        \"type\": \"BuildIdAssignmentRule\",\n                        \"id\": 1\n                      },\n                      \"createTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 2,\n                        \"protoName\": \"create_time\"\n                      }\n                    }\n                  },\n                  \"TimestampedCompatibleBuildIdRedirectRule\": {\n                    \"fields\": {\n                      \"rule\": {\n                        \"type\": \"CompatibleBuildIdRedirectRule\",\n                        \"id\": 1\n                      },\n                      \"createTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 2,\n                        \"protoName\": \"create_time\"\n                      }\n                    }\n                  },\n                  \"PollerGroupInfo\": {\n                    \"fields\": {\n                      \"id\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"weight\": {\n                        \"type\": \"float\",\n                        \"id\": 2\n                      }\n                    }\n                  },\n                  \"PollerGroupsInfo\": {\n                    \"fields\": {\n                      \"version\": {\n                        \"type\": \"int64\",\n                        \"id\": 1\n                      },\n                      \"pollerGroups\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"PollerGroupInfo\",\n                        \"id\": 2,\n                        \"protoName\": \"poller_groups\"\n                      }\n                    }\n                  },\n                  \"PollerScalingDecision\": {\n                    \"fields\": {\n                      \"pollRequestDeltaSuggestion\": {\n                        \"type\": \"int32\",\n                        \"id\": 1,\n                        \"protoName\": \"poll_request_delta_suggestion\"\n                      }\n                    }\n                  },\n                  \"RateLimit\": {\n                    \"fields\": {\n                      \"requestsPerSecond\": {\n                        \"type\": \"float\",\n                        \"id\": 1,\n                        \"protoName\": \"requests_per_second\"\n                      }\n                    }\n                  },\n                  \"ConfigMetadata\": {\n                    \"fields\": {\n                      \"reason\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"updateIdentity\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"update_identity\"\n                      },\n                      \"updateTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 3,\n                        \"protoName\": \"update_time\"\n                      }\n                    }\n                  },\n                  \"RateLimitConfig\": {\n                    \"fields\": {\n                      \"rateLimit\": {\n                        \"type\": \"RateLimit\",\n                        \"id\": 1,\n                        \"protoName\": \"rate_limit\"\n                      },\n                      \"metadata\": {\n                        \"type\": \"ConfigMetadata\",\n                        \"id\": 2\n                      }\n                    }\n                  },\n                  \"TaskQueueConfig\": {\n                    \"fields\": {\n                      \"queueRateLimit\": {\n                        \"type\": \"RateLimitConfig\",\n                        \"id\": 1,\n                        \"protoName\": \"queue_rate_limit\"\n                      },\n                      \"fairnessKeysRateLimitDefault\": {\n                        \"type\": \"RateLimitConfig\",\n                        \"id\": 2,\n                        \"protoName\": \"fairness_keys_rate_limit_default\"\n                      },\n                      \"fairnessWeightOverrides\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"float\",\n                        \"id\": 3,\n                        \"protoName\": \"fairness_weight_overrides\"\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          \"history\": {\n            \"nested\": {\n              \"v1\": {\n                \"options\": {\n                  \"go_package\": \"go.temporal.io/api/history/v1;history\",\n                  \"java_package\": \"io.temporal.api.history.v1\",\n                  \"java_multiple_files\": true,\n                  \"java_outer_classname\": \"MessageProto\",\n                  \"ruby_package\": \"Temporalio::Api::History::V1\",\n                  \"csharp_namespace\": \"Temporalio.Api.History.V1\"\n                },\n                \"nested\": {\n                  \"WorkflowExecutionStartedEventAttributes\": {\n                    \"fields\": {\n                      \"workflowType\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowType\",\n                        \"id\": 1,\n                        \"protoName\": \"workflow_type\"\n                      },\n                      \"parentWorkflowNamespace\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"parent_workflow_namespace\"\n                      },\n                      \"parentWorkflowNamespaceId\": {\n                        \"type\": \"string\",\n                        \"id\": 27,\n                        \"protoName\": \"parent_workflow_namespace_id\"\n                      },\n                      \"parentWorkflowExecution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 3,\n                        \"protoName\": \"parent_workflow_execution\"\n                      },\n                      \"parentInitiatedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 4,\n                        \"protoName\": \"parent_initiated_event_id\"\n                      },\n                      \"taskQueue\": {\n                        \"type\": \"temporal.api.taskqueue.v1.TaskQueue\",\n                        \"id\": 5,\n                        \"protoName\": \"task_queue\"\n                      },\n                      \"input\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 6\n                      },\n                      \"workflowExecutionTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 7,\n                        \"protoName\": \"workflow_execution_timeout\"\n                      },\n                      \"workflowRunTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 8,\n                        \"protoName\": \"workflow_run_timeout\"\n                      },\n                      \"workflowTaskTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 9,\n                        \"protoName\": \"workflow_task_timeout\"\n                      },\n                      \"continuedExecutionRunId\": {\n                        \"type\": \"string\",\n                        \"id\": 10,\n                        \"protoName\": \"continued_execution_run_id\"\n                      },\n                      \"initiator\": {\n                        \"type\": \"temporal.api.enums.v1.ContinueAsNewInitiator\",\n                        \"id\": 11\n                      },\n                      \"continuedFailure\": {\n                        \"type\": \"temporal.api.failure.v1.Failure\",\n                        \"id\": 12,\n                        \"protoName\": \"continued_failure\"\n                      },\n                      \"lastCompletionResult\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 13,\n                        \"protoName\": \"last_completion_result\"\n                      },\n                      \"originalExecutionRunId\": {\n                        \"type\": \"string\",\n                        \"id\": 14,\n                        \"protoName\": \"original_execution_run_id\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 15\n                      },\n                      \"firstExecutionRunId\": {\n                        \"type\": \"string\",\n                        \"id\": 16,\n                        \"protoName\": \"first_execution_run_id\"\n                      },\n                      \"retryPolicy\": {\n                        \"type\": \"temporal.api.common.v1.RetryPolicy\",\n                        \"id\": 17,\n                        \"protoName\": \"retry_policy\"\n                      },\n                      \"attempt\": {\n                        \"type\": \"int32\",\n                        \"id\": 18\n                      },\n                      \"workflowExecutionExpirationTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 19,\n                        \"protoName\": \"workflow_execution_expiration_time\"\n                      },\n                      \"cronSchedule\": {\n                        \"type\": \"string\",\n                        \"id\": 20,\n                        \"protoName\": \"cron_schedule\"\n                      },\n                      \"firstWorkflowTaskBackoff\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 21,\n                        \"protoName\": \"first_workflow_task_backoff\"\n                      },\n                      \"memo\": {\n                        \"type\": \"temporal.api.common.v1.Memo\",\n                        \"id\": 22\n                      },\n                      \"searchAttributes\": {\n                        \"type\": \"temporal.api.common.v1.SearchAttributes\",\n                        \"id\": 23,\n                        \"protoName\": \"search_attributes\"\n                      },\n                      \"prevAutoResetPoints\": {\n                        \"type\": \"temporal.api.workflow.v1.ResetPoints\",\n                        \"id\": 24,\n                        \"protoName\": \"prev_auto_reset_points\"\n                      },\n                      \"header\": {\n                        \"type\": \"temporal.api.common.v1.Header\",\n                        \"id\": 25\n                      },\n                      \"parentInitiatedEventVersion\": {\n                        \"type\": \"int64\",\n                        \"id\": 26,\n                        \"protoName\": \"parent_initiated_event_version\"\n                      },\n                      \"workflowId\": {\n                        \"type\": \"string\",\n                        \"id\": 28,\n                        \"protoName\": \"workflow_id\"\n                      },\n                      \"sourceVersionStamp\": {\n                        \"type\": \"temporal.api.common.v1.WorkerVersionStamp\",\n                        \"id\": 29,\n                        \"protoName\": \"source_version_stamp\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"completionCallbacks\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.common.v1.Callback\",\n                        \"id\": 30,\n                        \"protoName\": \"completion_callbacks\"\n                      },\n                      \"rootWorkflowExecution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 31,\n                        \"protoName\": \"root_workflow_execution\"\n                      },\n                      \"inheritedBuildId\": {\n                        \"type\": \"string\",\n                        \"id\": 32,\n                        \"protoName\": \"inherited_build_id\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"versioningOverride\": {\n                        \"type\": \"temporal.api.workflow.v1.VersioningOverride\",\n                        \"id\": 33,\n                        \"protoName\": \"versioning_override\"\n                      },\n                      \"parentPinnedWorkerDeploymentVersion\": {\n                        \"type\": \"string\",\n                        \"id\": 34,\n                        \"protoName\": \"parent_pinned_worker_deployment_version\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"priority\": {\n                        \"type\": \"temporal.api.common.v1.Priority\",\n                        \"id\": 35\n                      },\n                      \"inheritedPinnedVersion\": {\n                        \"type\": \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        \"id\": 37,\n                        \"protoName\": \"inherited_pinned_version\"\n                      },\n                      \"inheritedAutoUpgradeInfo\": {\n                        \"type\": \"temporal.api.deployment.v1.InheritedAutoUpgradeInfo\",\n                        \"id\": 39,\n                        \"protoName\": \"inherited_auto_upgrade_info\"\n                      },\n                      \"eagerExecutionAccepted\": {\n                        \"type\": \"bool\",\n                        \"id\": 38,\n                        \"protoName\": \"eager_execution_accepted\"\n                      },\n                      \"declinedTargetVersionUpgrade\": {\n                        \"type\": \"DeclinedTargetVersionUpgrade\",\n                        \"id\": 40,\n                        \"protoName\": \"declined_target_version_upgrade\"\n                      },\n                      \"timeSkippingConfig\": {\n                        \"type\": \"temporal.api.common.v1.TimeSkippingConfig\",\n                        \"id\": 41,\n                        \"protoName\": \"time_skipping_config\"\n                      },\n                      \"timeSkippingStatePropagation\": {\n                        \"type\": \"temporal.api.common.v1.TimeSkippingStatePropagation\",\n                        \"id\": 43,\n                        \"protoName\": \"time_skipping_state_propagation\"\n                      }\n                    },\n                    \"reserved\": [\n                      [\n                        36,\n                        36\n                      ],\n                      \"parent_pinned_deployment_version\",\n                      [\n                        42,\n                        42\n                      ],\n                      \"initial_skipped_duration\"\n                    ]\n                  },\n                  \"DeclinedTargetVersionUpgrade\": {\n                    \"fields\": {\n                      \"deploymentVersion\": {\n                        \"type\": \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        \"id\": 1,\n                        \"protoName\": \"deployment_version\"\n                      },\n                      \"revisionNumber\": {\n                        \"type\": \"int64\",\n                        \"id\": 2,\n                        \"protoName\": \"revision_number\"\n                      }\n                    }\n                  },\n                  \"WorkflowExecutionCompletedEventAttributes\": {\n                    \"fields\": {\n                      \"result\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 1\n                      },\n                      \"workflowTaskCompletedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_task_completed_event_id\"\n                      },\n                      \"newExecutionRunId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"new_execution_run_id\"\n                      }\n                    }\n                  },\n                  \"WorkflowExecutionFailedEventAttributes\": {\n                    \"fields\": {\n                      \"failure\": {\n                        \"type\": \"temporal.api.failure.v1.Failure\",\n                        \"id\": 1\n                      },\n                      \"retryState\": {\n                        \"type\": \"temporal.api.enums.v1.RetryState\",\n                        \"id\": 2,\n                        \"protoName\": \"retry_state\"\n                      },\n                      \"workflowTaskCompletedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 3,\n                        \"protoName\": \"workflow_task_completed_event_id\"\n                      },\n                      \"newExecutionRunId\": {\n                        \"type\": \"string\",\n                        \"id\": 4,\n                        \"protoName\": \"new_execution_run_id\"\n                      }\n                    }\n                  },\n                  \"WorkflowExecutionTimedOutEventAttributes\": {\n                    \"fields\": {\n                      \"retryState\": {\n                        \"type\": \"temporal.api.enums.v1.RetryState\",\n                        \"id\": 1,\n                        \"protoName\": \"retry_state\"\n                      },\n                      \"newExecutionRunId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"new_execution_run_id\"\n                      }\n                    }\n                  },\n                  \"WorkflowExecutionContinuedAsNewEventAttributes\": {\n                    \"fields\": {\n                      \"newExecutionRunId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"new_execution_run_id\"\n                      },\n                      \"workflowType\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowType\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_type\"\n                      },\n                      \"taskQueue\": {\n                        \"type\": \"temporal.api.taskqueue.v1.TaskQueue\",\n                        \"id\": 3,\n                        \"protoName\": \"task_queue\"\n                      },\n                      \"input\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 4\n                      },\n                      \"workflowRunTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 5,\n                        \"protoName\": \"workflow_run_timeout\"\n                      },\n                      \"workflowTaskTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 6,\n                        \"protoName\": \"workflow_task_timeout\"\n                      },\n                      \"workflowTaskCompletedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 7,\n                        \"protoName\": \"workflow_task_completed_event_id\"\n                      },\n                      \"backoffStartInterval\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 8,\n                        \"protoName\": \"backoff_start_interval\"\n                      },\n                      \"initiator\": {\n                        \"type\": \"temporal.api.enums.v1.ContinueAsNewInitiator\",\n                        \"id\": 9\n                      },\n                      \"failure\": {\n                        \"type\": \"temporal.api.failure.v1.Failure\",\n                        \"id\": 10,\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"lastCompletionResult\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 11,\n                        \"protoName\": \"last_completion_result\"\n                      },\n                      \"header\": {\n                        \"type\": \"temporal.api.common.v1.Header\",\n                        \"id\": 12\n                      },\n                      \"memo\": {\n                        \"type\": \"temporal.api.common.v1.Memo\",\n                        \"id\": 13\n                      },\n                      \"searchAttributes\": {\n                        \"type\": \"temporal.api.common.v1.SearchAttributes\",\n                        \"id\": 14,\n                        \"protoName\": \"search_attributes\"\n                      },\n                      \"inheritBuildId\": {\n                        \"type\": \"bool\",\n                        \"id\": 15,\n                        \"protoName\": \"inherit_build_id\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"initialVersioningBehavior\": {\n                        \"type\": \"temporal.api.enums.v1.ContinueAsNewVersioningBehavior\",\n                        \"id\": 16,\n                        \"protoName\": \"initial_versioning_behavior\"\n                      }\n                    }\n                  },\n                  \"WorkflowTaskScheduledEventAttributes\": {\n                    \"fields\": {\n                      \"taskQueue\": {\n                        \"type\": \"temporal.api.taskqueue.v1.TaskQueue\",\n                        \"id\": 1,\n                        \"protoName\": \"task_queue\"\n                      },\n                      \"startToCloseTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 2,\n                        \"protoName\": \"start_to_close_timeout\"\n                      },\n                      \"attempt\": {\n                        \"type\": \"int32\",\n                        \"id\": 3\n                      }\n                    }\n                  },\n                  \"WorkflowTaskStartedEventAttributes\": {\n                    \"fields\": {\n                      \"scheduledEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 1,\n                        \"protoName\": \"scheduled_event_id\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"requestId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"request_id\"\n                      },\n                      \"suggestContinueAsNew\": {\n                        \"type\": \"bool\",\n                        \"id\": 4,\n                        \"protoName\": \"suggest_continue_as_new\"\n                      },\n                      \"suggestContinueAsNewReasons\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.enums.v1.SuggestContinueAsNewReason\",\n                        \"id\": 8,\n                        \"protoName\": \"suggest_continue_as_new_reasons\"\n                      },\n                      \"targetWorkerDeploymentVersionChanged\": {\n                        \"type\": \"bool\",\n                        \"id\": 9,\n                        \"protoName\": \"target_worker_deployment_version_changed\"\n                      },\n                      \"historySizeBytes\": {\n                        \"type\": \"int64\",\n                        \"id\": 5,\n                        \"protoName\": \"history_size_bytes\"\n                      },\n                      \"workerVersion\": {\n                        \"type\": \"temporal.api.common.v1.WorkerVersionStamp\",\n                        \"id\": 6,\n                        \"protoName\": \"worker_version\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"buildIdRedirectCounter\": {\n                        \"type\": \"int64\",\n                        \"id\": 7,\n                        \"protoName\": \"build_id_redirect_counter\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      }\n                    }\n                  },\n                  \"WorkflowTaskCompletedEventAttributes\": {\n                    \"fields\": {\n                      \"scheduledEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 1,\n                        \"protoName\": \"scheduled_event_id\"\n                      },\n                      \"startedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 2,\n                        \"protoName\": \"started_event_id\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"binaryChecksum\": {\n                        \"type\": \"string\",\n                        \"id\": 4,\n                        \"protoName\": \"binary_checksum\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"workerVersion\": {\n                        \"type\": \"temporal.api.common.v1.WorkerVersionStamp\",\n                        \"id\": 5,\n                        \"protoName\": \"worker_version\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"sdkMetadata\": {\n                        \"type\": \"temporal.api.sdk.v1.WorkflowTaskCompletedMetadata\",\n                        \"id\": 6,\n                        \"protoName\": \"sdk_metadata\"\n                      },\n                      \"meteringMetadata\": {\n                        \"type\": \"temporal.api.common.v1.MeteringMetadata\",\n                        \"id\": 13,\n                        \"protoName\": \"metering_metadata\"\n                      },\n                      \"deployment\": {\n                        \"type\": \"temporal.api.deployment.v1.Deployment\",\n                        \"id\": 7,\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"versioningBehavior\": {\n                        \"type\": \"temporal.api.enums.v1.VersioningBehavior\",\n                        \"id\": 8,\n                        \"protoName\": \"versioning_behavior\"\n                      },\n                      \"workerDeploymentVersion\": {\n                        \"type\": \"string\",\n                        \"id\": 9,\n                        \"protoName\": \"worker_deployment_version\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"workerDeploymentName\": {\n                        \"type\": \"string\",\n                        \"id\": 10,\n                        \"protoName\": \"worker_deployment_name\"\n                      },\n                      \"deploymentVersion\": {\n                        \"type\": \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        \"id\": 11,\n                        \"protoName\": \"deployment_version\"\n                      }\n                    }\n                  },\n                  \"WorkflowTaskTimedOutEventAttributes\": {\n                    \"fields\": {\n                      \"scheduledEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 1,\n                        \"protoName\": \"scheduled_event_id\"\n                      },\n                      \"startedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 2,\n                        \"protoName\": \"started_event_id\"\n                      },\n                      \"timeoutType\": {\n                        \"type\": \"temporal.api.enums.v1.TimeoutType\",\n                        \"id\": 3,\n                        \"protoName\": \"timeout_type\"\n                      }\n                    }\n                  },\n                  \"WorkflowTaskFailedEventAttributes\": {\n                    \"fields\": {\n                      \"scheduledEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 1,\n                        \"protoName\": \"scheduled_event_id\"\n                      },\n                      \"startedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 2,\n                        \"protoName\": \"started_event_id\"\n                      },\n                      \"cause\": {\n                        \"type\": \"temporal.api.enums.v1.WorkflowTaskFailedCause\",\n                        \"id\": 3\n                      },\n                      \"failure\": {\n                        \"type\": \"temporal.api.failure.v1.Failure\",\n                        \"id\": 4\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 5\n                      },\n                      \"baseRunId\": {\n                        \"type\": \"string\",\n                        \"id\": 6,\n                        \"protoName\": \"base_run_id\"\n                      },\n                      \"newRunId\": {\n                        \"type\": \"string\",\n                        \"id\": 7,\n                        \"protoName\": \"new_run_id\"\n                      },\n                      \"forkEventVersion\": {\n                        \"type\": \"int64\",\n                        \"id\": 8,\n                        \"protoName\": \"fork_event_version\"\n                      },\n                      \"binaryChecksum\": {\n                        \"type\": \"string\",\n                        \"id\": 9,\n                        \"protoName\": \"binary_checksum\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"workerVersion\": {\n                        \"type\": \"temporal.api.common.v1.WorkerVersionStamp\",\n                        \"id\": 10,\n                        \"protoName\": \"worker_version\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      }\n                    }\n                  },\n                  \"ActivityTaskScheduledEventAttributes\": {\n                    \"fields\": {\n                      \"activityId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"activity_id\"\n                      },\n                      \"activityType\": {\n                        \"type\": \"temporal.api.common.v1.ActivityType\",\n                        \"id\": 2,\n                        \"protoName\": \"activity_type\"\n                      },\n                      \"taskQueue\": {\n                        \"type\": \"temporal.api.taskqueue.v1.TaskQueue\",\n                        \"id\": 4,\n                        \"protoName\": \"task_queue\"\n                      },\n                      \"header\": {\n                        \"type\": \"temporal.api.common.v1.Header\",\n                        \"id\": 5\n                      },\n                      \"input\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 6\n                      },\n                      \"scheduleToCloseTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 7,\n                        \"protoName\": \"schedule_to_close_timeout\"\n                      },\n                      \"scheduleToStartTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 8,\n                        \"protoName\": \"schedule_to_start_timeout\"\n                      },\n                      \"startToCloseTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 9,\n                        \"protoName\": \"start_to_close_timeout\"\n                      },\n                      \"heartbeatTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 10,\n                        \"protoName\": \"heartbeat_timeout\"\n                      },\n                      \"workflowTaskCompletedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 11,\n                        \"protoName\": \"workflow_task_completed_event_id\"\n                      },\n                      \"retryPolicy\": {\n                        \"type\": \"temporal.api.common.v1.RetryPolicy\",\n                        \"id\": 12,\n                        \"protoName\": \"retry_policy\"\n                      },\n                      \"useWorkflowBuildId\": {\n                        \"type\": \"bool\",\n                        \"id\": 13,\n                        \"protoName\": \"use_workflow_build_id\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"priority\": {\n                        \"type\": \"temporal.api.common.v1.Priority\",\n                        \"id\": 14\n                      }\n                    },\n                    \"reserved\": [\n                      [\n                        3,\n                        3\n                      ]\n                    ]\n                  },\n                  \"ActivityTaskStartedEventAttributes\": {\n                    \"fields\": {\n                      \"scheduledEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 1,\n                        \"protoName\": \"scheduled_event_id\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"requestId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"request_id\"\n                      },\n                      \"attempt\": {\n                        \"type\": \"int32\",\n                        \"id\": 4\n                      },\n                      \"lastFailure\": {\n                        \"type\": \"temporal.api.failure.v1.Failure\",\n                        \"id\": 5,\n                        \"protoName\": \"last_failure\"\n                      },\n                      \"workerVersion\": {\n                        \"type\": \"temporal.api.common.v1.WorkerVersionStamp\",\n                        \"id\": 6,\n                        \"protoName\": \"worker_version\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"buildIdRedirectCounter\": {\n                        \"type\": \"int64\",\n                        \"id\": 7,\n                        \"protoName\": \"build_id_redirect_counter\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      }\n                    }\n                  },\n                  \"ActivityTaskCompletedEventAttributes\": {\n                    \"fields\": {\n                      \"result\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 1\n                      },\n                      \"scheduledEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 2,\n                        \"protoName\": \"scheduled_event_id\"\n                      },\n                      \"startedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 3,\n                        \"protoName\": \"started_event_id\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 4\n                      },\n                      \"workerVersion\": {\n                        \"type\": \"temporal.api.common.v1.WorkerVersionStamp\",\n                        \"id\": 5,\n                        \"protoName\": \"worker_version\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      }\n                    }\n                  },\n                  \"ActivityTaskFailedEventAttributes\": {\n                    \"fields\": {\n                      \"failure\": {\n                        \"type\": \"temporal.api.failure.v1.Failure\",\n                        \"id\": 1\n                      },\n                      \"scheduledEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 2,\n                        \"protoName\": \"scheduled_event_id\"\n                      },\n                      \"startedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 3,\n                        \"protoName\": \"started_event_id\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 4\n                      },\n                      \"retryState\": {\n                        \"type\": \"temporal.api.enums.v1.RetryState\",\n                        \"id\": 5,\n                        \"protoName\": \"retry_state\"\n                      },\n                      \"workerVersion\": {\n                        \"type\": \"temporal.api.common.v1.WorkerVersionStamp\",\n                        \"id\": 6,\n                        \"protoName\": \"worker_version\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      }\n                    }\n                  },\n                  \"ActivityTaskTimedOutEventAttributes\": {\n                    \"fields\": {\n                      \"failure\": {\n                        \"type\": \"temporal.api.failure.v1.Failure\",\n                        \"id\": 1\n                      },\n                      \"scheduledEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 2,\n                        \"protoName\": \"scheduled_event_id\"\n                      },\n                      \"startedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 3,\n                        \"protoName\": \"started_event_id\"\n                      },\n                      \"retryState\": {\n                        \"type\": \"temporal.api.enums.v1.RetryState\",\n                        \"id\": 4,\n                        \"protoName\": \"retry_state\"\n                      }\n                    }\n                  },\n                  \"ActivityTaskCancelRequestedEventAttributes\": {\n                    \"fields\": {\n                      \"scheduledEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 1,\n                        \"protoName\": \"scheduled_event_id\"\n                      },\n                      \"workflowTaskCompletedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_task_completed_event_id\"\n                      }\n                    }\n                  },\n                  \"ActivityTaskCanceledEventAttributes\": {\n                    \"fields\": {\n                      \"details\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 1\n                      },\n                      \"latestCancelRequestedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 2,\n                        \"protoName\": \"latest_cancel_requested_event_id\"\n                      },\n                      \"scheduledEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 3,\n                        \"protoName\": \"scheduled_event_id\"\n                      },\n                      \"startedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 4,\n                        \"protoName\": \"started_event_id\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 5\n                      },\n                      \"workerVersion\": {\n                        \"type\": \"temporal.api.common.v1.WorkerVersionStamp\",\n                        \"id\": 6,\n                        \"protoName\": \"worker_version\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      }\n                    }\n                  },\n                  \"TimerStartedEventAttributes\": {\n                    \"fields\": {\n                      \"timerId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"timer_id\"\n                      },\n                      \"startToFireTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 2,\n                        \"protoName\": \"start_to_fire_timeout\"\n                      },\n                      \"workflowTaskCompletedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 3,\n                        \"protoName\": \"workflow_task_completed_event_id\"\n                      }\n                    }\n                  },\n                  \"TimerFiredEventAttributes\": {\n                    \"fields\": {\n                      \"timerId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"timer_id\"\n                      },\n                      \"startedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 2,\n                        \"protoName\": \"started_event_id\"\n                      }\n                    }\n                  },\n                  \"TimerCanceledEventAttributes\": {\n                    \"fields\": {\n                      \"timerId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"timer_id\"\n                      },\n                      \"startedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 2,\n                        \"protoName\": \"started_event_id\"\n                      },\n                      \"workflowTaskCompletedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 3,\n                        \"protoName\": \"workflow_task_completed_event_id\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 4\n                      }\n                    }\n                  },\n                  \"WorkflowExecutionCancelRequestedEventAttributes\": {\n                    \"fields\": {\n                      \"cause\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"externalInitiatedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 2,\n                        \"protoName\": \"external_initiated_event_id\"\n                      },\n                      \"externalWorkflowExecution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 3,\n                        \"protoName\": \"external_workflow_execution\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 4\n                      }\n                    }\n                  },\n                  \"WorkflowExecutionCanceledEventAttributes\": {\n                    \"fields\": {\n                      \"workflowTaskCompletedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 1,\n                        \"protoName\": \"workflow_task_completed_event_id\"\n                      },\n                      \"details\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 2\n                      }\n                    }\n                  },\n                  \"MarkerRecordedEventAttributes\": {\n                    \"fields\": {\n                      \"markerName\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"marker_name\"\n                      },\n                      \"details\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 2\n                      },\n                      \"workflowTaskCompletedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 3,\n                        \"protoName\": \"workflow_task_completed_event_id\"\n                      },\n                      \"header\": {\n                        \"type\": \"temporal.api.common.v1.Header\",\n                        \"id\": 4\n                      },\n                      \"failure\": {\n                        \"type\": \"temporal.api.failure.v1.Failure\",\n                        \"id\": 5\n                      }\n                    }\n                  },\n                  \"WorkflowExecutionSignaledEventAttributes\": {\n                    \"fields\": {\n                      \"signalName\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"signal_name\"\n                      },\n                      \"input\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 2\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"header\": {\n                        \"type\": \"temporal.api.common.v1.Header\",\n                        \"id\": 4\n                      },\n                      \"skipGenerateWorkflowTask\": {\n                        \"type\": \"bool\",\n                        \"id\": 5,\n                        \"protoName\": \"skip_generate_workflow_task\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"externalWorkflowExecution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 6,\n                        \"protoName\": \"external_workflow_execution\"\n                      },\n                      \"requestId\": {\n                        \"type\": \"string\",\n                        \"id\": 7,\n                        \"protoName\": \"request_id\"\n                      }\n                    }\n                  },\n                  \"WorkflowExecutionTerminatedEventAttributes\": {\n                    \"fields\": {\n                      \"reason\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"details\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 2\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      }\n                    }\n                  },\n                  \"RequestCancelExternalWorkflowExecutionInitiatedEventAttributes\": {\n                    \"fields\": {\n                      \"workflowTaskCompletedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 1,\n                        \"protoName\": \"workflow_task_completed_event_id\"\n                      },\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"namespaceId\": {\n                        \"type\": \"string\",\n                        \"id\": 7,\n                        \"protoName\": \"namespace_id\"\n                      },\n                      \"workflowExecution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 3,\n                        \"protoName\": \"workflow_execution\"\n                      },\n                      \"control\": {\n                        \"type\": \"string\",\n                        \"id\": 4,\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"childWorkflowOnly\": {\n                        \"type\": \"bool\",\n                        \"id\": 5,\n                        \"protoName\": \"child_workflow_only\"\n                      },\n                      \"reason\": {\n                        \"type\": \"string\",\n                        \"id\": 6\n                      }\n                    }\n                  },\n                  \"RequestCancelExternalWorkflowExecutionFailedEventAttributes\": {\n                    \"fields\": {\n                      \"cause\": {\n                        \"type\": \"temporal.api.enums.v1.CancelExternalWorkflowExecutionFailedCause\",\n                        \"id\": 1\n                      },\n                      \"workflowTaskCompletedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_task_completed_event_id\"\n                      },\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"namespaceId\": {\n                        \"type\": \"string\",\n                        \"id\": 7,\n                        \"protoName\": \"namespace_id\"\n                      },\n                      \"workflowExecution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 4,\n                        \"protoName\": \"workflow_execution\"\n                      },\n                      \"initiatedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 5,\n                        \"protoName\": \"initiated_event_id\"\n                      },\n                      \"control\": {\n                        \"type\": \"string\",\n                        \"id\": 6,\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      }\n                    }\n                  },\n                  \"ExternalWorkflowExecutionCancelRequestedEventAttributes\": {\n                    \"fields\": {\n                      \"initiatedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 1,\n                        \"protoName\": \"initiated_event_id\"\n                      },\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"namespaceId\": {\n                        \"type\": \"string\",\n                        \"id\": 4,\n                        \"protoName\": \"namespace_id\"\n                      },\n                      \"workflowExecution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 3,\n                        \"protoName\": \"workflow_execution\"\n                      }\n                    }\n                  },\n                  \"SignalExternalWorkflowExecutionInitiatedEventAttributes\": {\n                    \"fields\": {\n                      \"workflowTaskCompletedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 1,\n                        \"protoName\": \"workflow_task_completed_event_id\"\n                      },\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"namespaceId\": {\n                        \"type\": \"string\",\n                        \"id\": 9,\n                        \"protoName\": \"namespace_id\"\n                      },\n                      \"workflowExecution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 3,\n                        \"protoName\": \"workflow_execution\"\n                      },\n                      \"signalName\": {\n                        \"type\": \"string\",\n                        \"id\": 4,\n                        \"protoName\": \"signal_name\"\n                      },\n                      \"input\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 5\n                      },\n                      \"control\": {\n                        \"type\": \"string\",\n                        \"id\": 6,\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"childWorkflowOnly\": {\n                        \"type\": \"bool\",\n                        \"id\": 7,\n                        \"protoName\": \"child_workflow_only\"\n                      },\n                      \"header\": {\n                        \"type\": \"temporal.api.common.v1.Header\",\n                        \"id\": 8\n                      }\n                    }\n                  },\n                  \"SignalExternalWorkflowExecutionFailedEventAttributes\": {\n                    \"fields\": {\n                      \"cause\": {\n                        \"type\": \"temporal.api.enums.v1.SignalExternalWorkflowExecutionFailedCause\",\n                        \"id\": 1\n                      },\n                      \"workflowTaskCompletedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_task_completed_event_id\"\n                      },\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"namespaceId\": {\n                        \"type\": \"string\",\n                        \"id\": 7,\n                        \"protoName\": \"namespace_id\"\n                      },\n                      \"workflowExecution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 4,\n                        \"protoName\": \"workflow_execution\"\n                      },\n                      \"initiatedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 5,\n                        \"protoName\": \"initiated_event_id\"\n                      },\n                      \"control\": {\n                        \"type\": \"string\",\n                        \"id\": 6,\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      }\n                    }\n                  },\n                  \"ExternalWorkflowExecutionSignaledEventAttributes\": {\n                    \"fields\": {\n                      \"initiatedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 1,\n                        \"protoName\": \"initiated_event_id\"\n                      },\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"namespaceId\": {\n                        \"type\": \"string\",\n                        \"id\": 5,\n                        \"protoName\": \"namespace_id\"\n                      },\n                      \"workflowExecution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 3,\n                        \"protoName\": \"workflow_execution\"\n                      },\n                      \"control\": {\n                        \"type\": \"string\",\n                        \"id\": 4,\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      }\n                    }\n                  },\n                  \"UpsertWorkflowSearchAttributesEventAttributes\": {\n                    \"fields\": {\n                      \"workflowTaskCompletedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 1,\n                        \"protoName\": \"workflow_task_completed_event_id\"\n                      },\n                      \"searchAttributes\": {\n                        \"type\": \"temporal.api.common.v1.SearchAttributes\",\n                        \"id\": 2,\n                        \"protoName\": \"search_attributes\"\n                      }\n                    }\n                  },\n                  \"WorkflowPropertiesModifiedEventAttributes\": {\n                    \"fields\": {\n                      \"workflowTaskCompletedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 1,\n                        \"protoName\": \"workflow_task_completed_event_id\"\n                      },\n                      \"upsertedMemo\": {\n                        \"type\": \"temporal.api.common.v1.Memo\",\n                        \"id\": 2,\n                        \"protoName\": \"upserted_memo\"\n                      }\n                    }\n                  },\n                  \"StartChildWorkflowExecutionInitiatedEventAttributes\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"namespaceId\": {\n                        \"type\": \"string\",\n                        \"id\": 18,\n                        \"protoName\": \"namespace_id\"\n                      },\n                      \"workflowId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_id\"\n                      },\n                      \"workflowType\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowType\",\n                        \"id\": 3,\n                        \"protoName\": \"workflow_type\"\n                      },\n                      \"taskQueue\": {\n                        \"type\": \"temporal.api.taskqueue.v1.TaskQueue\",\n                        \"id\": 4,\n                        \"protoName\": \"task_queue\"\n                      },\n                      \"input\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 5\n                      },\n                      \"workflowExecutionTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 6,\n                        \"protoName\": \"workflow_execution_timeout\"\n                      },\n                      \"workflowRunTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 7,\n                        \"protoName\": \"workflow_run_timeout\"\n                      },\n                      \"workflowTaskTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 8,\n                        \"protoName\": \"workflow_task_timeout\"\n                      },\n                      \"parentClosePolicy\": {\n                        \"type\": \"temporal.api.enums.v1.ParentClosePolicy\",\n                        \"id\": 9,\n                        \"protoName\": \"parent_close_policy\"\n                      },\n                      \"control\": {\n                        \"type\": \"string\",\n                        \"id\": 10,\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"workflowTaskCompletedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 11,\n                        \"protoName\": \"workflow_task_completed_event_id\"\n                      },\n                      \"workflowIdReusePolicy\": {\n                        \"type\": \"temporal.api.enums.v1.WorkflowIdReusePolicy\",\n                        \"id\": 12,\n                        \"protoName\": \"workflow_id_reuse_policy\"\n                      },\n                      \"retryPolicy\": {\n                        \"type\": \"temporal.api.common.v1.RetryPolicy\",\n                        \"id\": 13,\n                        \"protoName\": \"retry_policy\"\n                      },\n                      \"cronSchedule\": {\n                        \"type\": \"string\",\n                        \"id\": 14,\n                        \"protoName\": \"cron_schedule\"\n                      },\n                      \"header\": {\n                        \"type\": \"temporal.api.common.v1.Header\",\n                        \"id\": 15\n                      },\n                      \"memo\": {\n                        \"type\": \"temporal.api.common.v1.Memo\",\n                        \"id\": 16\n                      },\n                      \"searchAttributes\": {\n                        \"type\": \"temporal.api.common.v1.SearchAttributes\",\n                        \"id\": 17,\n                        \"protoName\": \"search_attributes\"\n                      },\n                      \"inheritBuildId\": {\n                        \"type\": \"bool\",\n                        \"id\": 19,\n                        \"protoName\": \"inherit_build_id\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"priority\": {\n                        \"type\": \"temporal.api.common.v1.Priority\",\n                        \"id\": 20\n                      },\n                      \"timeSkippingConfig\": {\n                        \"type\": \"temporal.api.common.v1.TimeSkippingConfig\",\n                        \"id\": 21,\n                        \"protoName\": \"time_skipping_config\"\n                      },\n                      \"timeSkippingStatePropagation\": {\n                        \"type\": \"temporal.api.common.v1.TimeSkippingStatePropagation\",\n                        \"id\": 23,\n                        \"protoName\": \"time_skipping_state_propagation\"\n                      },\n                      \"versioningOverride\": {\n                        \"type\": \"temporal.api.workflow.v1.VersioningOverride\",\n                        \"id\": 24,\n                        \"protoName\": \"versioning_override\"\n                      }\n                    },\n                    \"reserved\": [\n                      [\n                        22,\n                        22\n                      ],\n                      \"initial_skipped_duration\"\n                    ]\n                  },\n                  \"StartChildWorkflowExecutionFailedEventAttributes\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"namespaceId\": {\n                        \"type\": \"string\",\n                        \"id\": 8,\n                        \"protoName\": \"namespace_id\"\n                      },\n                      \"workflowId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_id\"\n                      },\n                      \"workflowType\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowType\",\n                        \"id\": 3,\n                        \"protoName\": \"workflow_type\"\n                      },\n                      \"cause\": {\n                        \"type\": \"temporal.api.enums.v1.StartChildWorkflowExecutionFailedCause\",\n                        \"id\": 4\n                      },\n                      \"control\": {\n                        \"type\": \"string\",\n                        \"id\": 5,\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"initiatedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 6,\n                        \"protoName\": \"initiated_event_id\"\n                      },\n                      \"workflowTaskCompletedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 7,\n                        \"protoName\": \"workflow_task_completed_event_id\"\n                      }\n                    }\n                  },\n                  \"ChildWorkflowExecutionStartedEventAttributes\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"namespaceId\": {\n                        \"type\": \"string\",\n                        \"id\": 6,\n                        \"protoName\": \"namespace_id\"\n                      },\n                      \"initiatedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 2,\n                        \"protoName\": \"initiated_event_id\"\n                      },\n                      \"workflowExecution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 3,\n                        \"protoName\": \"workflow_execution\"\n                      },\n                      \"workflowType\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowType\",\n                        \"id\": 4,\n                        \"protoName\": \"workflow_type\"\n                      },\n                      \"header\": {\n                        \"type\": \"temporal.api.common.v1.Header\",\n                        \"id\": 5\n                      }\n                    }\n                  },\n                  \"ChildWorkflowExecutionCompletedEventAttributes\": {\n                    \"fields\": {\n                      \"result\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 1\n                      },\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"namespaceId\": {\n                        \"type\": \"string\",\n                        \"id\": 7,\n                        \"protoName\": \"namespace_id\"\n                      },\n                      \"workflowExecution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 3,\n                        \"protoName\": \"workflow_execution\"\n                      },\n                      \"workflowType\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowType\",\n                        \"id\": 4,\n                        \"protoName\": \"workflow_type\"\n                      },\n                      \"initiatedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 5,\n                        \"protoName\": \"initiated_event_id\"\n                      },\n                      \"startedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 6,\n                        \"protoName\": \"started_event_id\"\n                      }\n                    }\n                  },\n                  \"ChildWorkflowExecutionFailedEventAttributes\": {\n                    \"fields\": {\n                      \"failure\": {\n                        \"type\": \"temporal.api.failure.v1.Failure\",\n                        \"id\": 1\n                      },\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"namespaceId\": {\n                        \"type\": \"string\",\n                        \"id\": 8,\n                        \"protoName\": \"namespace_id\"\n                      },\n                      \"workflowExecution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 3,\n                        \"protoName\": \"workflow_execution\"\n                      },\n                      \"workflowType\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowType\",\n                        \"id\": 4,\n                        \"protoName\": \"workflow_type\"\n                      },\n                      \"initiatedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 5,\n                        \"protoName\": \"initiated_event_id\"\n                      },\n                      \"startedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 6,\n                        \"protoName\": \"started_event_id\"\n                      },\n                      \"retryState\": {\n                        \"type\": \"temporal.api.enums.v1.RetryState\",\n                        \"id\": 7,\n                        \"protoName\": \"retry_state\"\n                      }\n                    }\n                  },\n                  \"ChildWorkflowExecutionCanceledEventAttributes\": {\n                    \"fields\": {\n                      \"details\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 1\n                      },\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"namespaceId\": {\n                        \"type\": \"string\",\n                        \"id\": 7,\n                        \"protoName\": \"namespace_id\"\n                      },\n                      \"workflowExecution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 3,\n                        \"protoName\": \"workflow_execution\"\n                      },\n                      \"workflowType\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowType\",\n                        \"id\": 4,\n                        \"protoName\": \"workflow_type\"\n                      },\n                      \"initiatedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 5,\n                        \"protoName\": \"initiated_event_id\"\n                      },\n                      \"startedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 6,\n                        \"protoName\": \"started_event_id\"\n                      }\n                    }\n                  },\n                  \"ChildWorkflowExecutionTimedOutEventAttributes\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"namespaceId\": {\n                        \"type\": \"string\",\n                        \"id\": 7,\n                        \"protoName\": \"namespace_id\"\n                      },\n                      \"workflowExecution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_execution\"\n                      },\n                      \"workflowType\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowType\",\n                        \"id\": 3,\n                        \"protoName\": \"workflow_type\"\n                      },\n                      \"initiatedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 4,\n                        \"protoName\": \"initiated_event_id\"\n                      },\n                      \"startedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 5,\n                        \"protoName\": \"started_event_id\"\n                      },\n                      \"retryState\": {\n                        \"type\": \"temporal.api.enums.v1.RetryState\",\n                        \"id\": 6,\n                        \"protoName\": \"retry_state\"\n                      }\n                    }\n                  },\n                  \"ChildWorkflowExecutionTerminatedEventAttributes\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"namespaceId\": {\n                        \"type\": \"string\",\n                        \"id\": 6,\n                        \"protoName\": \"namespace_id\"\n                      },\n                      \"workflowExecution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_execution\"\n                      },\n                      \"workflowType\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowType\",\n                        \"id\": 3,\n                        \"protoName\": \"workflow_type\"\n                      },\n                      \"initiatedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 4,\n                        \"protoName\": \"initiated_event_id\"\n                      },\n                      \"startedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 5,\n                        \"protoName\": \"started_event_id\"\n                      }\n                    }\n                  },\n                  \"WorkflowExecutionOptionsUpdatedEventAttributes\": {\n                    \"fields\": {\n                      \"versioningOverride\": {\n                        \"type\": \"temporal.api.workflow.v1.VersioningOverride\",\n                        \"id\": 1,\n                        \"protoName\": \"versioning_override\"\n                      },\n                      \"unsetVersioningOverride\": {\n                        \"type\": \"bool\",\n                        \"id\": 2,\n                        \"protoName\": \"unset_versioning_override\"\n                      },\n                      \"attachedRequestId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"attached_request_id\"\n                      },\n                      \"attachedCompletionCallbacks\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.common.v1.Callback\",\n                        \"id\": 4,\n                        \"protoName\": \"attached_completion_callbacks\"\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 5\n                      },\n                      \"priority\": {\n                        \"type\": \"temporal.api.common.v1.Priority\",\n                        \"id\": 6\n                      },\n                      \"timeSkippingConfig\": {\n                        \"type\": \"temporal.api.common.v1.TimeSkippingConfig\",\n                        \"id\": 7,\n                        \"protoName\": \"time_skipping_config\"\n                      },\n                      \"timeSkippingConfigUpdated\": {\n                        \"type\": \"bool\",\n                        \"id\": 9,\n                        \"protoName\": \"time_skipping_config_updated\"\n                      },\n                      \"workflowUpdateOptions\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"WorkflowUpdateOptionsUpdate\",\n                        \"id\": 8,\n                        \"protoName\": \"workflow_update_options\"\n                      }\n                    },\n                    \"nested\": {\n                      \"WorkflowUpdateOptionsUpdate\": {\n                        \"fields\": {\n                          \"updateId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"update_id\"\n                          },\n                          \"attachedRequestId\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"attached_request_id\"\n                          },\n                          \"attachedCompletionCallbacks\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"temporal.api.common.v1.Callback\",\n                            \"id\": 3,\n                            \"protoName\": \"attached_completion_callbacks\"\n                          }\n                        }\n                      }\n                    }\n                  },\n                  \"WorkflowPropertiesModifiedExternallyEventAttributes\": {\n                    \"fields\": {\n                      \"newTaskQueue\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"new_task_queue\"\n                      },\n                      \"newWorkflowTaskTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 2,\n                        \"protoName\": \"new_workflow_task_timeout\"\n                      },\n                      \"newWorkflowRunTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 3,\n                        \"protoName\": \"new_workflow_run_timeout\"\n                      },\n                      \"newWorkflowExecutionTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 4,\n                        \"protoName\": \"new_workflow_execution_timeout\"\n                      },\n                      \"upsertedMemo\": {\n                        \"type\": \"temporal.api.common.v1.Memo\",\n                        \"id\": 5,\n                        \"protoName\": \"upserted_memo\"\n                      }\n                    }\n                  },\n                  \"ActivityPropertiesModifiedExternallyEventAttributes\": {\n                    \"fields\": {\n                      \"scheduledEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 1,\n                        \"protoName\": \"scheduled_event_id\"\n                      },\n                      \"newRetryPolicy\": {\n                        \"type\": \"temporal.api.common.v1.RetryPolicy\",\n                        \"id\": 2,\n                        \"protoName\": \"new_retry_policy\"\n                      }\n                    }\n                  },\n                  \"WorkflowExecutionUpdateAcceptedEventAttributes\": {\n                    \"fields\": {\n                      \"protocolInstanceId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"protocol_instance_id\"\n                      },\n                      \"acceptedRequestMessageId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"accepted_request_message_id\"\n                      },\n                      \"acceptedRequestSequencingEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 3,\n                        \"protoName\": \"accepted_request_sequencing_event_id\"\n                      },\n                      \"acceptedRequest\": {\n                        \"type\": \"temporal.api.update.v1.Request\",\n                        \"id\": 4,\n                        \"protoName\": \"accepted_request\"\n                      }\n                    }\n                  },\n                  \"WorkflowExecutionUpdateCompletedEventAttributes\": {\n                    \"fields\": {\n                      \"meta\": {\n                        \"type\": \"temporal.api.update.v1.Meta\",\n                        \"id\": 1\n                      },\n                      \"acceptedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 3,\n                        \"protoName\": \"accepted_event_id\"\n                      },\n                      \"outcome\": {\n                        \"type\": \"temporal.api.update.v1.Outcome\",\n                        \"id\": 2\n                      }\n                    }\n                  },\n                  \"WorkflowExecutionUpdateRejectedEventAttributes\": {\n                    \"fields\": {\n                      \"protocolInstanceId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"protocol_instance_id\"\n                      },\n                      \"rejectedRequestMessageId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"rejected_request_message_id\"\n                      },\n                      \"rejectedRequestSequencingEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 3,\n                        \"protoName\": \"rejected_request_sequencing_event_id\"\n                      },\n                      \"rejectedRequest\": {\n                        \"type\": \"temporal.api.update.v1.Request\",\n                        \"id\": 4,\n                        \"protoName\": \"rejected_request\"\n                      },\n                      \"failure\": {\n                        \"type\": \"temporal.api.failure.v1.Failure\",\n                        \"id\": 5\n                      }\n                    }\n                  },\n                  \"WorkflowExecutionUpdateAdmittedEventAttributes\": {\n                    \"fields\": {\n                      \"request\": {\n                        \"type\": \"temporal.api.update.v1.Request\",\n                        \"id\": 1\n                      },\n                      \"origin\": {\n                        \"type\": \"temporal.api.enums.v1.UpdateAdmittedEventOrigin\",\n                        \"id\": 2\n                      }\n                    }\n                  },\n                  \"WorkflowExecutionPausedEventAttributes\": {\n                    \"fields\": {\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"reason\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"requestId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"request_id\"\n                      }\n                    }\n                  },\n                  \"WorkflowExecutionUnpausedEventAttributes\": {\n                    \"fields\": {\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"reason\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"requestId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"request_id\"\n                      }\n                    }\n                  },\n                  \"WorkflowExecutionTimeSkippingTransitionedEventAttributes\": {\n                    \"fields\": {\n                      \"targetTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 1,\n                        \"protoName\": \"target_time\"\n                      },\n                      \"disabledAfterFastForward\": {\n                        \"type\": \"bool\",\n                        \"id\": 2,\n                        \"protoName\": \"disabled_after_fast_forward\"\n                      },\n                      \"wallClockTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 3,\n                        \"protoName\": \"wall_clock_time\"\n                      }\n                    }\n                  },\n                  \"NexusOperationScheduledEventAttributes\": {\n                    \"fields\": {\n                      \"endpoint\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"service\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"operation\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"input\": {\n                        \"type\": \"temporal.api.common.v1.Payload\",\n                        \"id\": 4\n                      },\n                      \"scheduleToCloseTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 5,\n                        \"protoName\": \"schedule_to_close_timeout\"\n                      },\n                      \"nexusHeader\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"string\",\n                        \"id\": 6,\n                        \"protoName\": \"nexus_header\"\n                      },\n                      \"workflowTaskCompletedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 7,\n                        \"protoName\": \"workflow_task_completed_event_id\"\n                      },\n                      \"requestId\": {\n                        \"type\": \"string\",\n                        \"id\": 8,\n                        \"protoName\": \"request_id\"\n                      },\n                      \"endpointId\": {\n                        \"type\": \"string\",\n                        \"id\": 9,\n                        \"protoName\": \"endpoint_id\"\n                      },\n                      \"scheduleToStartTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 10,\n                        \"protoName\": \"schedule_to_start_timeout\"\n                      },\n                      \"startToCloseTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 11,\n                        \"protoName\": \"start_to_close_timeout\"\n                      }\n                    }\n                  },\n                  \"NexusOperationStartedEventAttributes\": {\n                    \"fields\": {\n                      \"scheduledEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 1,\n                        \"protoName\": \"scheduled_event_id\"\n                      },\n                      \"operationId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"operation_id\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"requestId\": {\n                        \"type\": \"string\",\n                        \"id\": 4,\n                        \"protoName\": \"request_id\"\n                      },\n                      \"operationToken\": {\n                        \"type\": \"string\",\n                        \"id\": 5,\n                        \"protoName\": \"operation_token\"\n                      }\n                    }\n                  },\n                  \"NexusOperationCompletedEventAttributes\": {\n                    \"fields\": {\n                      \"scheduledEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 1,\n                        \"protoName\": \"scheduled_event_id\"\n                      },\n                      \"result\": {\n                        \"type\": \"temporal.api.common.v1.Payload\",\n                        \"id\": 2\n                      },\n                      \"requestId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"request_id\"\n                      }\n                    }\n                  },\n                  \"NexusOperationFailedEventAttributes\": {\n                    \"fields\": {\n                      \"scheduledEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 1,\n                        \"protoName\": \"scheduled_event_id\"\n                      },\n                      \"failure\": {\n                        \"type\": \"temporal.api.failure.v1.Failure\",\n                        \"id\": 2\n                      },\n                      \"requestId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"request_id\"\n                      }\n                    }\n                  },\n                  \"NexusOperationTimedOutEventAttributes\": {\n                    \"fields\": {\n                      \"scheduledEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 1,\n                        \"protoName\": \"scheduled_event_id\"\n                      },\n                      \"failure\": {\n                        \"type\": \"temporal.api.failure.v1.Failure\",\n                        \"id\": 2\n                      },\n                      \"requestId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"request_id\"\n                      }\n                    }\n                  },\n                  \"NexusOperationCanceledEventAttributes\": {\n                    \"fields\": {\n                      \"scheduledEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 1,\n                        \"protoName\": \"scheduled_event_id\"\n                      },\n                      \"failure\": {\n                        \"type\": \"temporal.api.failure.v1.Failure\",\n                        \"id\": 2\n                      },\n                      \"requestId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"request_id\"\n                      }\n                    }\n                  },\n                  \"NexusOperationCancelRequestedEventAttributes\": {\n                    \"fields\": {\n                      \"scheduledEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 1,\n                        \"protoName\": \"scheduled_event_id\"\n                      },\n                      \"workflowTaskCompletedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_task_completed_event_id\"\n                      }\n                    }\n                  },\n                  \"NexusOperationCancelRequestCompletedEventAttributes\": {\n                    \"fields\": {\n                      \"requestedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 1,\n                        \"protoName\": \"requested_event_id\"\n                      },\n                      \"workflowTaskCompletedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_task_completed_event_id\"\n                      },\n                      \"scheduledEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 3,\n                        \"protoName\": \"scheduled_event_id\"\n                      }\n                    }\n                  },\n                  \"NexusOperationCancelRequestFailedEventAttributes\": {\n                    \"fields\": {\n                      \"requestedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 1,\n                        \"protoName\": \"requested_event_id\"\n                      },\n                      \"workflowTaskCompletedEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_task_completed_event_id\"\n                      },\n                      \"failure\": {\n                        \"type\": \"temporal.api.failure.v1.Failure\",\n                        \"id\": 3\n                      },\n                      \"scheduledEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 4,\n                        \"protoName\": \"scheduled_event_id\"\n                      }\n                    }\n                  },\n                  \"HistoryEvent\": {\n                    \"oneofs\": {\n                      \"attributes\": {\n                        \"oneof\": [\n                          \"workflowExecutionStartedEventAttributes\",\n                          \"workflowExecutionCompletedEventAttributes\",\n                          \"workflowExecutionFailedEventAttributes\",\n                          \"workflowExecutionTimedOutEventAttributes\",\n                          \"workflowTaskScheduledEventAttributes\",\n                          \"workflowTaskStartedEventAttributes\",\n                          \"workflowTaskCompletedEventAttributes\",\n                          \"workflowTaskTimedOutEventAttributes\",\n                          \"workflowTaskFailedEventAttributes\",\n                          \"activityTaskScheduledEventAttributes\",\n                          \"activityTaskStartedEventAttributes\",\n                          \"activityTaskCompletedEventAttributes\",\n                          \"activityTaskFailedEventAttributes\",\n                          \"activityTaskTimedOutEventAttributes\",\n                          \"timerStartedEventAttributes\",\n                          \"timerFiredEventAttributes\",\n                          \"activityTaskCancelRequestedEventAttributes\",\n                          \"activityTaskCanceledEventAttributes\",\n                          \"timerCanceledEventAttributes\",\n                          \"markerRecordedEventAttributes\",\n                          \"workflowExecutionSignaledEventAttributes\",\n                          \"workflowExecutionTerminatedEventAttributes\",\n                          \"workflowExecutionCancelRequestedEventAttributes\",\n                          \"workflowExecutionCanceledEventAttributes\",\n                          \"requestCancelExternalWorkflowExecutionInitiatedEventAttributes\",\n                          \"requestCancelExternalWorkflowExecutionFailedEventAttributes\",\n                          \"externalWorkflowExecutionCancelRequestedEventAttributes\",\n                          \"workflowExecutionContinuedAsNewEventAttributes\",\n                          \"startChildWorkflowExecutionInitiatedEventAttributes\",\n                          \"startChildWorkflowExecutionFailedEventAttributes\",\n                          \"childWorkflowExecutionStartedEventAttributes\",\n                          \"childWorkflowExecutionCompletedEventAttributes\",\n                          \"childWorkflowExecutionFailedEventAttributes\",\n                          \"childWorkflowExecutionCanceledEventAttributes\",\n                          \"childWorkflowExecutionTimedOutEventAttributes\",\n                          \"childWorkflowExecutionTerminatedEventAttributes\",\n                          \"signalExternalWorkflowExecutionInitiatedEventAttributes\",\n                          \"signalExternalWorkflowExecutionFailedEventAttributes\",\n                          \"externalWorkflowExecutionSignaledEventAttributes\",\n                          \"upsertWorkflowSearchAttributesEventAttributes\",\n                          \"workflowExecutionUpdateAcceptedEventAttributes\",\n                          \"workflowExecutionUpdateRejectedEventAttributes\",\n                          \"workflowExecutionUpdateCompletedEventAttributes\",\n                          \"workflowPropertiesModifiedExternallyEventAttributes\",\n                          \"activityPropertiesModifiedExternallyEventAttributes\",\n                          \"workflowPropertiesModifiedEventAttributes\",\n                          \"workflowExecutionUpdateAdmittedEventAttributes\",\n                          \"nexusOperationScheduledEventAttributes\",\n                          \"nexusOperationStartedEventAttributes\",\n                          \"nexusOperationCompletedEventAttributes\",\n                          \"nexusOperationFailedEventAttributes\",\n                          \"nexusOperationCanceledEventAttributes\",\n                          \"nexusOperationTimedOutEventAttributes\",\n                          \"nexusOperationCancelRequestedEventAttributes\",\n                          \"workflowExecutionOptionsUpdatedEventAttributes\",\n                          \"nexusOperationCancelRequestCompletedEventAttributes\",\n                          \"nexusOperationCancelRequestFailedEventAttributes\",\n                          \"workflowExecutionPausedEventAttributes\",\n                          \"workflowExecutionUnpausedEventAttributes\",\n                          \"workflowExecutionTimeSkippingTransitionedEventAttributes\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"eventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 1,\n                        \"protoName\": \"event_id\"\n                      },\n                      \"eventTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 2,\n                        \"protoName\": \"event_time\"\n                      },\n                      \"eventType\": {\n                        \"type\": \"temporal.api.enums.v1.EventType\",\n                        \"id\": 3,\n                        \"protoName\": \"event_type\"\n                      },\n                      \"version\": {\n                        \"type\": \"int64\",\n                        \"id\": 4\n                      },\n                      \"taskId\": {\n                        \"type\": \"int64\",\n                        \"id\": 5,\n                        \"protoName\": \"task_id\"\n                      },\n                      \"workerMayIgnore\": {\n                        \"type\": \"bool\",\n                        \"id\": 300,\n                        \"protoName\": \"worker_may_ignore\"\n                      },\n                      \"userMetadata\": {\n                        \"type\": \"temporal.api.sdk.v1.UserMetadata\",\n                        \"id\": 301,\n                        \"protoName\": \"user_metadata\"\n                      },\n                      \"links\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.common.v1.Link\",\n                        \"id\": 302\n                      },\n                      \"principal\": {\n                        \"type\": \"temporal.api.common.v1.Principal\",\n                        \"id\": 303\n                      },\n                      \"eventGroupMarkers\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.sdk.v1.EventGroupMarker\",\n                        \"id\": 304,\n                        \"protoName\": \"event_group_markers\"\n                      },\n                      \"workflowExecutionStartedEventAttributes\": {\n                        \"type\": \"WorkflowExecutionStartedEventAttributes\",\n                        \"id\": 6,\n                        \"protoName\": \"workflow_execution_started_event_attributes\"\n                      },\n                      \"workflowExecutionCompletedEventAttributes\": {\n                        \"type\": \"WorkflowExecutionCompletedEventAttributes\",\n                        \"id\": 7,\n                        \"protoName\": \"workflow_execution_completed_event_attributes\"\n                      },\n                      \"workflowExecutionFailedEventAttributes\": {\n                        \"type\": \"WorkflowExecutionFailedEventAttributes\",\n                        \"id\": 8,\n                        \"protoName\": \"workflow_execution_failed_event_attributes\"\n                      },\n                      \"workflowExecutionTimedOutEventAttributes\": {\n                        \"type\": \"WorkflowExecutionTimedOutEventAttributes\",\n                        \"id\": 9,\n                        \"protoName\": \"workflow_execution_timed_out_event_attributes\"\n                      },\n                      \"workflowTaskScheduledEventAttributes\": {\n                        \"type\": \"WorkflowTaskScheduledEventAttributes\",\n                        \"id\": 10,\n                        \"protoName\": \"workflow_task_scheduled_event_attributes\"\n                      },\n                      \"workflowTaskStartedEventAttributes\": {\n                        \"type\": \"WorkflowTaskStartedEventAttributes\",\n                        \"id\": 11,\n                        \"protoName\": \"workflow_task_started_event_attributes\"\n                      },\n                      \"workflowTaskCompletedEventAttributes\": {\n                        \"type\": \"WorkflowTaskCompletedEventAttributes\",\n                        \"id\": 12,\n                        \"protoName\": \"workflow_task_completed_event_attributes\"\n                      },\n                      \"workflowTaskTimedOutEventAttributes\": {\n                        \"type\": \"WorkflowTaskTimedOutEventAttributes\",\n                        \"id\": 13,\n                        \"protoName\": \"workflow_task_timed_out_event_attributes\"\n                      },\n                      \"workflowTaskFailedEventAttributes\": {\n                        \"type\": \"WorkflowTaskFailedEventAttributes\",\n                        \"id\": 14,\n                        \"protoName\": \"workflow_task_failed_event_attributes\"\n                      },\n                      \"activityTaskScheduledEventAttributes\": {\n                        \"type\": \"ActivityTaskScheduledEventAttributes\",\n                        \"id\": 15,\n                        \"protoName\": \"activity_task_scheduled_event_attributes\"\n                      },\n                      \"activityTaskStartedEventAttributes\": {\n                        \"type\": \"ActivityTaskStartedEventAttributes\",\n                        \"id\": 16,\n                        \"protoName\": \"activity_task_started_event_attributes\"\n                      },\n                      \"activityTaskCompletedEventAttributes\": {\n                        \"type\": \"ActivityTaskCompletedEventAttributes\",\n                        \"id\": 17,\n                        \"protoName\": \"activity_task_completed_event_attributes\"\n                      },\n                      \"activityTaskFailedEventAttributes\": {\n                        \"type\": \"ActivityTaskFailedEventAttributes\",\n                        \"id\": 18,\n                        \"protoName\": \"activity_task_failed_event_attributes\"\n                      },\n                      \"activityTaskTimedOutEventAttributes\": {\n                        \"type\": \"ActivityTaskTimedOutEventAttributes\",\n                        \"id\": 19,\n                        \"protoName\": \"activity_task_timed_out_event_attributes\"\n                      },\n                      \"timerStartedEventAttributes\": {\n                        \"type\": \"TimerStartedEventAttributes\",\n                        \"id\": 20,\n                        \"protoName\": \"timer_started_event_attributes\"\n                      },\n                      \"timerFiredEventAttributes\": {\n                        \"type\": \"TimerFiredEventAttributes\",\n                        \"id\": 21,\n                        \"protoName\": \"timer_fired_event_attributes\"\n                      },\n                      \"activityTaskCancelRequestedEventAttributes\": {\n                        \"type\": \"ActivityTaskCancelRequestedEventAttributes\",\n                        \"id\": 22,\n                        \"protoName\": \"activity_task_cancel_requested_event_attributes\"\n                      },\n                      \"activityTaskCanceledEventAttributes\": {\n                        \"type\": \"ActivityTaskCanceledEventAttributes\",\n                        \"id\": 23,\n                        \"protoName\": \"activity_task_canceled_event_attributes\"\n                      },\n                      \"timerCanceledEventAttributes\": {\n                        \"type\": \"TimerCanceledEventAttributes\",\n                        \"id\": 24,\n                        \"protoName\": \"timer_canceled_event_attributes\"\n                      },\n                      \"markerRecordedEventAttributes\": {\n                        \"type\": \"MarkerRecordedEventAttributes\",\n                        \"id\": 25,\n                        \"protoName\": \"marker_recorded_event_attributes\"\n                      },\n                      \"workflowExecutionSignaledEventAttributes\": {\n                        \"type\": \"WorkflowExecutionSignaledEventAttributes\",\n                        \"id\": 26,\n                        \"protoName\": \"workflow_execution_signaled_event_attributes\"\n                      },\n                      \"workflowExecutionTerminatedEventAttributes\": {\n                        \"type\": \"WorkflowExecutionTerminatedEventAttributes\",\n                        \"id\": 27,\n                        \"protoName\": \"workflow_execution_terminated_event_attributes\"\n                      },\n                      \"workflowExecutionCancelRequestedEventAttributes\": {\n                        \"type\": \"WorkflowExecutionCancelRequestedEventAttributes\",\n                        \"id\": 28,\n                        \"protoName\": \"workflow_execution_cancel_requested_event_attributes\"\n                      },\n                      \"workflowExecutionCanceledEventAttributes\": {\n                        \"type\": \"WorkflowExecutionCanceledEventAttributes\",\n                        \"id\": 29,\n                        \"protoName\": \"workflow_execution_canceled_event_attributes\"\n                      },\n                      \"requestCancelExternalWorkflowExecutionInitiatedEventAttributes\": {\n                        \"type\": \"RequestCancelExternalWorkflowExecutionInitiatedEventAttributes\",\n                        \"id\": 30,\n                        \"protoName\": \"request_cancel_external_workflow_execution_initiated_event_attributes\"\n                      },\n                      \"requestCancelExternalWorkflowExecutionFailedEventAttributes\": {\n                        \"type\": \"RequestCancelExternalWorkflowExecutionFailedEventAttributes\",\n                        \"id\": 31,\n                        \"protoName\": \"request_cancel_external_workflow_execution_failed_event_attributes\"\n                      },\n                      \"externalWorkflowExecutionCancelRequestedEventAttributes\": {\n                        \"type\": \"ExternalWorkflowExecutionCancelRequestedEventAttributes\",\n                        \"id\": 32,\n                        \"protoName\": \"external_workflow_execution_cancel_requested_event_attributes\"\n                      },\n                      \"workflowExecutionContinuedAsNewEventAttributes\": {\n                        \"type\": \"WorkflowExecutionContinuedAsNewEventAttributes\",\n                        \"id\": 33,\n                        \"protoName\": \"workflow_execution_continued_as_new_event_attributes\"\n                      },\n                      \"startChildWorkflowExecutionInitiatedEventAttributes\": {\n                        \"type\": \"StartChildWorkflowExecutionInitiatedEventAttributes\",\n                        \"id\": 34,\n                        \"protoName\": \"start_child_workflow_execution_initiated_event_attributes\"\n                      },\n                      \"startChildWorkflowExecutionFailedEventAttributes\": {\n                        \"type\": \"StartChildWorkflowExecutionFailedEventAttributes\",\n                        \"id\": 35,\n                        \"protoName\": \"start_child_workflow_execution_failed_event_attributes\"\n                      },\n                      \"childWorkflowExecutionStartedEventAttributes\": {\n                        \"type\": \"ChildWorkflowExecutionStartedEventAttributes\",\n                        \"id\": 36,\n                        \"protoName\": \"child_workflow_execution_started_event_attributes\"\n                      },\n                      \"childWorkflowExecutionCompletedEventAttributes\": {\n                        \"type\": \"ChildWorkflowExecutionCompletedEventAttributes\",\n                        \"id\": 37,\n                        \"protoName\": \"child_workflow_execution_completed_event_attributes\"\n                      },\n                      \"childWorkflowExecutionFailedEventAttributes\": {\n                        \"type\": \"ChildWorkflowExecutionFailedEventAttributes\",\n                        \"id\": 38,\n                        \"protoName\": \"child_workflow_execution_failed_event_attributes\"\n                      },\n                      \"childWorkflowExecutionCanceledEventAttributes\": {\n                        \"type\": \"ChildWorkflowExecutionCanceledEventAttributes\",\n                        \"id\": 39,\n                        \"protoName\": \"child_workflow_execution_canceled_event_attributes\"\n                      },\n                      \"childWorkflowExecutionTimedOutEventAttributes\": {\n                        \"type\": \"ChildWorkflowExecutionTimedOutEventAttributes\",\n                        \"id\": 40,\n                        \"protoName\": \"child_workflow_execution_timed_out_event_attributes\"\n                      },\n                      \"childWorkflowExecutionTerminatedEventAttributes\": {\n                        \"type\": \"ChildWorkflowExecutionTerminatedEventAttributes\",\n                        \"id\": 41,\n                        \"protoName\": \"child_workflow_execution_terminated_event_attributes\"\n                      },\n                      \"signalExternalWorkflowExecutionInitiatedEventAttributes\": {\n                        \"type\": \"SignalExternalWorkflowExecutionInitiatedEventAttributes\",\n                        \"id\": 42,\n                        \"protoName\": \"signal_external_workflow_execution_initiated_event_attributes\"\n                      },\n                      \"signalExternalWorkflowExecutionFailedEventAttributes\": {\n                        \"type\": \"SignalExternalWorkflowExecutionFailedEventAttributes\",\n                        \"id\": 43,\n                        \"protoName\": \"signal_external_workflow_execution_failed_event_attributes\"\n                      },\n                      \"externalWorkflowExecutionSignaledEventAttributes\": {\n                        \"type\": \"ExternalWorkflowExecutionSignaledEventAttributes\",\n                        \"id\": 44,\n                        \"protoName\": \"external_workflow_execution_signaled_event_attributes\"\n                      },\n                      \"upsertWorkflowSearchAttributesEventAttributes\": {\n                        \"type\": \"UpsertWorkflowSearchAttributesEventAttributes\",\n                        \"id\": 45,\n                        \"protoName\": \"upsert_workflow_search_attributes_event_attributes\"\n                      },\n                      \"workflowExecutionUpdateAcceptedEventAttributes\": {\n                        \"type\": \"WorkflowExecutionUpdateAcceptedEventAttributes\",\n                        \"id\": 46,\n                        \"protoName\": \"workflow_execution_update_accepted_event_attributes\"\n                      },\n                      \"workflowExecutionUpdateRejectedEventAttributes\": {\n                        \"type\": \"WorkflowExecutionUpdateRejectedEventAttributes\",\n                        \"id\": 47,\n                        \"protoName\": \"workflow_execution_update_rejected_event_attributes\"\n                      },\n                      \"workflowExecutionUpdateCompletedEventAttributes\": {\n                        \"type\": \"WorkflowExecutionUpdateCompletedEventAttributes\",\n                        \"id\": 48,\n                        \"protoName\": \"workflow_execution_update_completed_event_attributes\"\n                      },\n                      \"workflowPropertiesModifiedExternallyEventAttributes\": {\n                        \"type\": \"WorkflowPropertiesModifiedExternallyEventAttributes\",\n                        \"id\": 49,\n                        \"protoName\": \"workflow_properties_modified_externally_event_attributes\"\n                      },\n                      \"activityPropertiesModifiedExternallyEventAttributes\": {\n                        \"type\": \"ActivityPropertiesModifiedExternallyEventAttributes\",\n                        \"id\": 50,\n                        \"protoName\": \"activity_properties_modified_externally_event_attributes\"\n                      },\n                      \"workflowPropertiesModifiedEventAttributes\": {\n                        \"type\": \"WorkflowPropertiesModifiedEventAttributes\",\n                        \"id\": 51,\n                        \"protoName\": \"workflow_properties_modified_event_attributes\"\n                      },\n                      \"workflowExecutionUpdateAdmittedEventAttributes\": {\n                        \"type\": \"WorkflowExecutionUpdateAdmittedEventAttributes\",\n                        \"id\": 52,\n                        \"protoName\": \"workflow_execution_update_admitted_event_attributes\"\n                      },\n                      \"nexusOperationScheduledEventAttributes\": {\n                        \"type\": \"NexusOperationScheduledEventAttributes\",\n                        \"id\": 53,\n                        \"protoName\": \"nexus_operation_scheduled_event_attributes\"\n                      },\n                      \"nexusOperationStartedEventAttributes\": {\n                        \"type\": \"NexusOperationStartedEventAttributes\",\n                        \"id\": 54,\n                        \"protoName\": \"nexus_operation_started_event_attributes\"\n                      },\n                      \"nexusOperationCompletedEventAttributes\": {\n                        \"type\": \"NexusOperationCompletedEventAttributes\",\n                        \"id\": 55,\n                        \"protoName\": \"nexus_operation_completed_event_attributes\"\n                      },\n                      \"nexusOperationFailedEventAttributes\": {\n                        \"type\": \"NexusOperationFailedEventAttributes\",\n                        \"id\": 56,\n                        \"protoName\": \"nexus_operation_failed_event_attributes\"\n                      },\n                      \"nexusOperationCanceledEventAttributes\": {\n                        \"type\": \"NexusOperationCanceledEventAttributes\",\n                        \"id\": 57,\n                        \"protoName\": \"nexus_operation_canceled_event_attributes\"\n                      },\n                      \"nexusOperationTimedOutEventAttributes\": {\n                        \"type\": \"NexusOperationTimedOutEventAttributes\",\n                        \"id\": 58,\n                        \"protoName\": \"nexus_operation_timed_out_event_attributes\"\n                      },\n                      \"nexusOperationCancelRequestedEventAttributes\": {\n                        \"type\": \"NexusOperationCancelRequestedEventAttributes\",\n                        \"id\": 59,\n                        \"protoName\": \"nexus_operation_cancel_requested_event_attributes\"\n                      },\n                      \"workflowExecutionOptionsUpdatedEventAttributes\": {\n                        \"type\": \"WorkflowExecutionOptionsUpdatedEventAttributes\",\n                        \"id\": 60,\n                        \"protoName\": \"workflow_execution_options_updated_event_attributes\"\n                      },\n                      \"nexusOperationCancelRequestCompletedEventAttributes\": {\n                        \"type\": \"NexusOperationCancelRequestCompletedEventAttributes\",\n                        \"id\": 61,\n                        \"protoName\": \"nexus_operation_cancel_request_completed_event_attributes\"\n                      },\n                      \"nexusOperationCancelRequestFailedEventAttributes\": {\n                        \"type\": \"NexusOperationCancelRequestFailedEventAttributes\",\n                        \"id\": 62,\n                        \"protoName\": \"nexus_operation_cancel_request_failed_event_attributes\"\n                      },\n                      \"workflowExecutionPausedEventAttributes\": {\n                        \"type\": \"WorkflowExecutionPausedEventAttributes\",\n                        \"id\": 63,\n                        \"protoName\": \"workflow_execution_paused_event_attributes\"\n                      },\n                      \"workflowExecutionUnpausedEventAttributes\": {\n                        \"type\": \"WorkflowExecutionUnpausedEventAttributes\",\n                        \"id\": 64,\n                        \"protoName\": \"workflow_execution_unpaused_event_attributes\"\n                      },\n                      \"workflowExecutionTimeSkippingTransitionedEventAttributes\": {\n                        \"type\": \"WorkflowExecutionTimeSkippingTransitionedEventAttributes\",\n                        \"id\": 65,\n                        \"protoName\": \"workflow_execution_time_skipping_transitioned_event_attributes\"\n                      }\n                    }\n                  },\n                  \"History\": {\n                    \"fields\": {\n                      \"events\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"HistoryEvent\",\n                        \"id\": 1\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          \"workflow\": {\n            \"nested\": {\n              \"v1\": {\n                \"options\": {\n                  \"go_package\": \"go.temporal.io/api/workflow/v1;workflow\",\n                  \"java_package\": \"io.temporal.api.workflow.v1\",\n                  \"java_multiple_files\": true,\n                  \"java_outer_classname\": \"MessageProto\",\n                  \"ruby_package\": \"Temporalio::Api::Workflow::V1\",\n                  \"csharp_namespace\": \"Temporalio.Api.Workflow.V1\"\n                },\n                \"nested\": {\n                  \"WorkflowExecutionInfo\": {\n                    \"fields\": {\n                      \"execution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 1\n                      },\n                      \"type\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowType\",\n                        \"id\": 2\n                      },\n                      \"startTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 3,\n                        \"protoName\": \"start_time\"\n                      },\n                      \"closeTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 4,\n                        \"protoName\": \"close_time\"\n                      },\n                      \"status\": {\n                        \"type\": \"temporal.api.enums.v1.WorkflowExecutionStatus\",\n                        \"id\": 5\n                      },\n                      \"historyLength\": {\n                        \"type\": \"int64\",\n                        \"id\": 6,\n                        \"protoName\": \"history_length\"\n                      },\n                      \"parentNamespaceId\": {\n                        \"type\": \"string\",\n                        \"id\": 7,\n                        \"protoName\": \"parent_namespace_id\"\n                      },\n                      \"parentExecution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 8,\n                        \"protoName\": \"parent_execution\"\n                      },\n                      \"executionTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 9,\n                        \"protoName\": \"execution_time\"\n                      },\n                      \"memo\": {\n                        \"type\": \"temporal.api.common.v1.Memo\",\n                        \"id\": 10\n                      },\n                      \"searchAttributes\": {\n                        \"type\": \"temporal.api.common.v1.SearchAttributes\",\n                        \"id\": 11,\n                        \"protoName\": \"search_attributes\"\n                      },\n                      \"autoResetPoints\": {\n                        \"type\": \"ResetPoints\",\n                        \"id\": 12,\n                        \"protoName\": \"auto_reset_points\"\n                      },\n                      \"taskQueue\": {\n                        \"type\": \"string\",\n                        \"id\": 13,\n                        \"protoName\": \"task_queue\"\n                      },\n                      \"stateTransitionCount\": {\n                        \"type\": \"int64\",\n                        \"id\": 14,\n                        \"protoName\": \"state_transition_count\"\n                      },\n                      \"historySizeBytes\": {\n                        \"type\": \"int64\",\n                        \"id\": 15,\n                        \"protoName\": \"history_size_bytes\"\n                      },\n                      \"mostRecentWorkerVersionStamp\": {\n                        \"type\": \"temporal.api.common.v1.WorkerVersionStamp\",\n                        \"id\": 16,\n                        \"protoName\": \"most_recent_worker_version_stamp\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"executionDuration\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 17,\n                        \"protoName\": \"execution_duration\"\n                      },\n                      \"rootExecution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 18,\n                        \"protoName\": \"root_execution\"\n                      },\n                      \"assignedBuildId\": {\n                        \"type\": \"string\",\n                        \"id\": 19,\n                        \"protoName\": \"assigned_build_id\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"inheritedBuildId\": {\n                        \"type\": \"string\",\n                        \"id\": 20,\n                        \"protoName\": \"inherited_build_id\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"firstRunId\": {\n                        \"type\": \"string\",\n                        \"id\": 21,\n                        \"protoName\": \"first_run_id\"\n                      },\n                      \"versioningInfo\": {\n                        \"type\": \"WorkflowExecutionVersioningInfo\",\n                        \"id\": 22,\n                        \"protoName\": \"versioning_info\"\n                      },\n                      \"workerDeploymentName\": {\n                        \"type\": \"string\",\n                        \"id\": 23,\n                        \"protoName\": \"worker_deployment_name\"\n                      },\n                      \"priority\": {\n                        \"type\": \"temporal.api.common.v1.Priority\",\n                        \"id\": 24\n                      },\n                      \"externalPayloadSizeBytes\": {\n                        \"type\": \"int64\",\n                        \"id\": 25,\n                        \"protoName\": \"external_payload_size_bytes\"\n                      },\n                      \"externalPayloadCount\": {\n                        \"type\": \"int64\",\n                        \"id\": 26,\n                        \"protoName\": \"external_payload_count\"\n                      }\n                    }\n                  },\n                  \"WorkflowExecutionExtendedInfo\": {\n                    \"fields\": {\n                      \"executionExpirationTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 1,\n                        \"protoName\": \"execution_expiration_time\"\n                      },\n                      \"runExpirationTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 2,\n                        \"protoName\": \"run_expiration_time\"\n                      },\n                      \"cancelRequested\": {\n                        \"type\": \"bool\",\n                        \"id\": 3,\n                        \"protoName\": \"cancel_requested\"\n                      },\n                      \"lastResetTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 4,\n                        \"protoName\": \"last_reset_time\"\n                      },\n                      \"originalStartTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 5,\n                        \"protoName\": \"original_start_time\"\n                      },\n                      \"resetRunId\": {\n                        \"type\": \"string\",\n                        \"id\": 6,\n                        \"protoName\": \"reset_run_id\"\n                      },\n                      \"requestIdInfos\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"RequestIdInfo\",\n                        \"id\": 7,\n                        \"protoName\": \"request_id_infos\"\n                      },\n                      \"pauseInfo\": {\n                        \"type\": \"WorkflowExecutionPauseInfo\",\n                        \"id\": 8,\n                        \"protoName\": \"pause_info\"\n                      },\n                      \"timeSkippingInfo\": {\n                        \"type\": \"temporal.api.common.v1.TimeSkippingInfo\",\n                        \"id\": 9,\n                        \"protoName\": \"time_skipping_info\"\n                      }\n                    }\n                  },\n                  \"WorkflowExecutionVersioningInfo\": {\n                    \"fields\": {\n                      \"behavior\": {\n                        \"type\": \"temporal.api.enums.v1.VersioningBehavior\",\n                        \"id\": 1\n                      },\n                      \"deployment\": {\n                        \"type\": \"temporal.api.deployment.v1.Deployment\",\n                        \"id\": 2,\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"version\": {\n                        \"type\": \"string\",\n                        \"id\": 5,\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"deploymentVersion\": {\n                        \"type\": \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        \"id\": 7,\n                        \"protoName\": \"deployment_version\"\n                      },\n                      \"versioningOverride\": {\n                        \"type\": \"VersioningOverride\",\n                        \"id\": 3,\n                        \"protoName\": \"versioning_override\"\n                      },\n                      \"deploymentTransition\": {\n                        \"type\": \"DeploymentTransition\",\n                        \"id\": 4,\n                        \"protoName\": \"deployment_transition\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"versionTransition\": {\n                        \"type\": \"DeploymentVersionTransition\",\n                        \"id\": 6,\n                        \"protoName\": \"version_transition\"\n                      },\n                      \"revisionNumber\": {\n                        \"type\": \"int64\",\n                        \"id\": 8,\n                        \"protoName\": \"revision_number\"\n                      },\n                      \"continueAsNewInitialVersioningBehavior\": {\n                        \"type\": \"temporal.api.enums.v1.ContinueAsNewVersioningBehavior\",\n                        \"id\": 9,\n                        \"protoName\": \"continue_as_new_initial_versioning_behavior\"\n                      }\n                    }\n                  },\n                  \"DeploymentTransition\": {\n                    \"fields\": {\n                      \"deployment\": {\n                        \"type\": \"temporal.api.deployment.v1.Deployment\",\n                        \"id\": 1\n                      }\n                    }\n                  },\n                  \"DeploymentVersionTransition\": {\n                    \"fields\": {\n                      \"version\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"deploymentVersion\": {\n                        \"type\": \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        \"id\": 2,\n                        \"protoName\": \"deployment_version\"\n                      }\n                    }\n                  },\n                  \"WorkflowExecutionConfig\": {\n                    \"fields\": {\n                      \"taskQueue\": {\n                        \"type\": \"temporal.api.taskqueue.v1.TaskQueue\",\n                        \"id\": 1,\n                        \"protoName\": \"task_queue\"\n                      },\n                      \"workflowExecutionTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_execution_timeout\"\n                      },\n                      \"workflowRunTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 3,\n                        \"protoName\": \"workflow_run_timeout\"\n                      },\n                      \"defaultWorkflowTaskTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 4,\n                        \"protoName\": \"default_workflow_task_timeout\"\n                      },\n                      \"userMetadata\": {\n                        \"type\": \"temporal.api.sdk.v1.UserMetadata\",\n                        \"id\": 5,\n                        \"protoName\": \"user_metadata\"\n                      }\n                    }\n                  },\n                  \"PendingActivityInfo\": {\n                    \"oneofs\": {\n                      \"assignedBuildId\": {\n                        \"oneof\": [\n                          \"useWorkflowBuildId\",\n                          \"lastIndependentlyAssignedBuildId\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"activityId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"activity_id\"\n                      },\n                      \"activityType\": {\n                        \"type\": \"temporal.api.common.v1.ActivityType\",\n                        \"id\": 2,\n                        \"protoName\": \"activity_type\"\n                      },\n                      \"state\": {\n                        \"type\": \"temporal.api.enums.v1.PendingActivityState\",\n                        \"id\": 3\n                      },\n                      \"heartbeatDetails\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 4,\n                        \"protoName\": \"heartbeat_details\"\n                      },\n                      \"lastHeartbeatTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 5,\n                        \"protoName\": \"last_heartbeat_time\"\n                      },\n                      \"lastStartedTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 6,\n                        \"protoName\": \"last_started_time\"\n                      },\n                      \"attempt\": {\n                        \"type\": \"int32\",\n                        \"id\": 7\n                      },\n                      \"maximumAttempts\": {\n                        \"type\": \"int32\",\n                        \"id\": 8,\n                        \"protoName\": \"maximum_attempts\"\n                      },\n                      \"scheduledTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 9,\n                        \"protoName\": \"scheduled_time\"\n                      },\n                      \"expirationTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 10,\n                        \"protoName\": \"expiration_time\"\n                      },\n                      \"lastFailure\": {\n                        \"type\": \"temporal.api.failure.v1.Failure\",\n                        \"id\": 11,\n                        \"protoName\": \"last_failure\"\n                      },\n                      \"lastWorkerIdentity\": {\n                        \"type\": \"string\",\n                        \"id\": 12,\n                        \"protoName\": \"last_worker_identity\"\n                      },\n                      \"useWorkflowBuildId\": {\n                        \"type\": \"google.protobuf.Empty\",\n                        \"id\": 13,\n                        \"protoName\": \"use_workflow_build_id\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"lastIndependentlyAssignedBuildId\": {\n                        \"type\": \"string\",\n                        \"id\": 14,\n                        \"protoName\": \"last_independently_assigned_build_id\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"lastWorkerVersionStamp\": {\n                        \"type\": \"temporal.api.common.v1.WorkerVersionStamp\",\n                        \"id\": 15,\n                        \"protoName\": \"last_worker_version_stamp\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"currentRetryInterval\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 16,\n                        \"protoName\": \"current_retry_interval\"\n                      },\n                      \"lastAttemptCompleteTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 17,\n                        \"protoName\": \"last_attempt_complete_time\"\n                      },\n                      \"nextAttemptScheduleTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 18,\n                        \"protoName\": \"next_attempt_schedule_time\"\n                      },\n                      \"paused\": {\n                        \"type\": \"bool\",\n                        \"id\": 19\n                      },\n                      \"lastDeployment\": {\n                        \"type\": \"temporal.api.deployment.v1.Deployment\",\n                        \"id\": 20,\n                        \"protoName\": \"last_deployment\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"lastWorkerDeploymentVersion\": {\n                        \"type\": \"string\",\n                        \"id\": 21,\n                        \"protoName\": \"last_worker_deployment_version\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"lastDeploymentVersion\": {\n                        \"type\": \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        \"id\": 25,\n                        \"protoName\": \"last_deployment_version\"\n                      },\n                      \"priority\": {\n                        \"type\": \"temporal.api.common.v1.Priority\",\n                        \"id\": 22\n                      },\n                      \"pauseInfo\": {\n                        \"type\": \"PauseInfo\",\n                        \"id\": 23,\n                        \"protoName\": \"pause_info\"\n                      },\n                      \"activityOptions\": {\n                        \"type\": \"temporal.api.activity.v1.ActivityOptions\",\n                        \"id\": 24,\n                        \"protoName\": \"activity_options\"\n                      }\n                    },\n                    \"nested\": {\n                      \"PauseInfo\": {\n                        \"oneofs\": {\n                          \"pausedBy\": {\n                            \"oneof\": [\n                              \"manual\",\n                              \"rule\"\n                            ]\n                          }\n                        },\n                        \"fields\": {\n                          \"pauseTime\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 1,\n                            \"protoName\": \"pause_time\"\n                          },\n                          \"manual\": {\n                            \"type\": \"Manual\",\n                            \"id\": 2\n                          },\n                          \"rule\": {\n                            \"type\": \"Rule\",\n                            \"id\": 4\n                          }\n                        },\n                        \"nested\": {\n                          \"Manual\": {\n                            \"fields\": {\n                              \"identity\": {\n                                \"type\": \"string\",\n                                \"id\": 1\n                              },\n                              \"reason\": {\n                                \"type\": \"string\",\n                                \"id\": 2\n                              }\n                            }\n                          },\n                          \"Rule\": {\n                            \"fields\": {\n                              \"ruleId\": {\n                                \"type\": \"string\",\n                                \"id\": 1,\n                                \"protoName\": \"rule_id\"\n                              },\n                              \"identity\": {\n                                \"type\": \"string\",\n                                \"id\": 2\n                              },\n                              \"reason\": {\n                                \"type\": \"string\",\n                                \"id\": 3\n                              }\n                            }\n                          }\n                        }\n                      }\n                    }\n                  },\n                  \"PendingChildExecutionInfo\": {\n                    \"fields\": {\n                      \"workflowId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"workflow_id\"\n                      },\n                      \"runId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"run_id\"\n                      },\n                      \"workflowTypeName\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"workflow_type_name\"\n                      },\n                      \"initiatedId\": {\n                        \"type\": \"int64\",\n                        \"id\": 4,\n                        \"protoName\": \"initiated_id\"\n                      },\n                      \"parentClosePolicy\": {\n                        \"type\": \"temporal.api.enums.v1.ParentClosePolicy\",\n                        \"id\": 5,\n                        \"protoName\": \"parent_close_policy\"\n                      }\n                    }\n                  },\n                  \"PendingWorkflowTaskInfo\": {\n                    \"fields\": {\n                      \"state\": {\n                        \"type\": \"temporal.api.enums.v1.PendingWorkflowTaskState\",\n                        \"id\": 1\n                      },\n                      \"scheduledTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 2,\n                        \"protoName\": \"scheduled_time\"\n                      },\n                      \"originalScheduledTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 3,\n                        \"protoName\": \"original_scheduled_time\"\n                      },\n                      \"startedTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 4,\n                        \"protoName\": \"started_time\"\n                      },\n                      \"attempt\": {\n                        \"type\": \"int32\",\n                        \"id\": 5\n                      }\n                    }\n                  },\n                  \"ResetPoints\": {\n                    \"fields\": {\n                      \"points\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"ResetPointInfo\",\n                        \"id\": 1\n                      }\n                    }\n                  },\n                  \"ResetPointInfo\": {\n                    \"fields\": {\n                      \"buildId\": {\n                        \"type\": \"string\",\n                        \"id\": 7,\n                        \"protoName\": \"build_id\"\n                      },\n                      \"binaryChecksum\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"binary_checksum\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"runId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"run_id\"\n                      },\n                      \"firstWorkflowTaskCompletedId\": {\n                        \"type\": \"int64\",\n                        \"id\": 3,\n                        \"protoName\": \"first_workflow_task_completed_id\"\n                      },\n                      \"createTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 4,\n                        \"protoName\": \"create_time\"\n                      },\n                      \"expireTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 5,\n                        \"protoName\": \"expire_time\"\n                      },\n                      \"resettable\": {\n                        \"type\": \"bool\",\n                        \"id\": 6\n                      }\n                    }\n                  },\n                  \"NewWorkflowExecutionInfo\": {\n                    \"fields\": {\n                      \"workflowId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"workflow_id\"\n                      },\n                      \"workflowType\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowType\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_type\"\n                      },\n                      \"taskQueue\": {\n                        \"type\": \"temporal.api.taskqueue.v1.TaskQueue\",\n                        \"id\": 3,\n                        \"protoName\": \"task_queue\"\n                      },\n                      \"input\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 4\n                      },\n                      \"workflowExecutionTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 5,\n                        \"protoName\": \"workflow_execution_timeout\"\n                      },\n                      \"workflowRunTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 6,\n                        \"protoName\": \"workflow_run_timeout\"\n                      },\n                      \"workflowTaskTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 7,\n                        \"protoName\": \"workflow_task_timeout\"\n                      },\n                      \"workflowIdReusePolicy\": {\n                        \"type\": \"temporal.api.enums.v1.WorkflowIdReusePolicy\",\n                        \"id\": 8,\n                        \"protoName\": \"workflow_id_reuse_policy\"\n                      },\n                      \"retryPolicy\": {\n                        \"type\": \"temporal.api.common.v1.RetryPolicy\",\n                        \"id\": 9,\n                        \"protoName\": \"retry_policy\"\n                      },\n                      \"cronSchedule\": {\n                        \"type\": \"string\",\n                        \"id\": 10,\n                        \"protoName\": \"cron_schedule\"\n                      },\n                      \"memo\": {\n                        \"type\": \"temporal.api.common.v1.Memo\",\n                        \"id\": 11\n                      },\n                      \"searchAttributes\": {\n                        \"type\": \"temporal.api.common.v1.SearchAttributes\",\n                        \"id\": 12,\n                        \"protoName\": \"search_attributes\"\n                      },\n                      \"header\": {\n                        \"type\": \"temporal.api.common.v1.Header\",\n                        \"id\": 13\n                      },\n                      \"userMetadata\": {\n                        \"type\": \"temporal.api.sdk.v1.UserMetadata\",\n                        \"id\": 14,\n                        \"protoName\": \"user_metadata\"\n                      },\n                      \"versioningOverride\": {\n                        \"type\": \"VersioningOverride\",\n                        \"id\": 15,\n                        \"protoName\": \"versioning_override\"\n                      },\n                      \"priority\": {\n                        \"type\": \"temporal.api.common.v1.Priority\",\n                        \"id\": 16\n                      }\n                    }\n                  },\n                  \"CallbackInfo\": {\n                    \"fields\": {\n                      \"callback\": {\n                        \"type\": \"temporal.api.common.v1.Callback\",\n                        \"id\": 1\n                      },\n                      \"trigger\": {\n                        \"type\": \"Trigger\",\n                        \"id\": 2\n                      },\n                      \"registrationTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 3,\n                        \"protoName\": \"registration_time\"\n                      },\n                      \"state\": {\n                        \"type\": \"temporal.api.enums.v1.CallbackState\",\n                        \"id\": 4\n                      },\n                      \"attempt\": {\n                        \"type\": \"int32\",\n                        \"id\": 5\n                      },\n                      \"lastAttemptCompleteTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 6,\n                        \"protoName\": \"last_attempt_complete_time\"\n                      },\n                      \"lastAttemptFailure\": {\n                        \"type\": \"temporal.api.failure.v1.Failure\",\n                        \"id\": 7,\n                        \"protoName\": \"last_attempt_failure\"\n                      },\n                      \"nextAttemptScheduleTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 8,\n                        \"protoName\": \"next_attempt_schedule_time\"\n                      },\n                      \"blockedReason\": {\n                        \"type\": \"string\",\n                        \"id\": 9,\n                        \"protoName\": \"blocked_reason\"\n                      }\n                    },\n                    \"nested\": {\n                      \"WorkflowClosed\": {\n                        \"fields\": {}\n                      },\n                      \"UpdateWorkflowExecutionCompleted\": {\n                        \"fields\": {\n                          \"updateId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"update_id\"\n                          }\n                        }\n                      },\n                      \"Trigger\": {\n                        \"oneofs\": {\n                          \"variant\": {\n                            \"oneof\": [\n                              \"workflowClosed\",\n                              \"updateWorkflowExecutionCompleted\"\n                            ]\n                          }\n                        },\n                        \"fields\": {\n                          \"workflowClosed\": {\n                            \"type\": \"WorkflowClosed\",\n                            \"id\": 1,\n                            \"protoName\": \"workflow_closed\"\n                          },\n                          \"updateWorkflowExecutionCompleted\": {\n                            \"type\": \"UpdateWorkflowExecutionCompleted\",\n                            \"id\": 2,\n                            \"protoName\": \"update_workflow_execution_completed\"\n                          }\n                        }\n                      }\n                    }\n                  },\n                  \"PendingNexusOperationInfo\": {\n                    \"fields\": {\n                      \"endpoint\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"service\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"operation\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"operationId\": {\n                        \"type\": \"string\",\n                        \"id\": 4,\n                        \"protoName\": \"operation_id\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"scheduleToCloseTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 5,\n                        \"protoName\": \"schedule_to_close_timeout\"\n                      },\n                      \"scheduledTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 6,\n                        \"protoName\": \"scheduled_time\"\n                      },\n                      \"state\": {\n                        \"type\": \"temporal.api.enums.v1.PendingNexusOperationState\",\n                        \"id\": 7\n                      },\n                      \"attempt\": {\n                        \"type\": \"int32\",\n                        \"id\": 8\n                      },\n                      \"lastAttemptCompleteTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 9,\n                        \"protoName\": \"last_attempt_complete_time\"\n                      },\n                      \"lastAttemptFailure\": {\n                        \"type\": \"temporal.api.failure.v1.Failure\",\n                        \"id\": 10,\n                        \"protoName\": \"last_attempt_failure\"\n                      },\n                      \"nextAttemptScheduleTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 11,\n                        \"protoName\": \"next_attempt_schedule_time\"\n                      },\n                      \"cancellationInfo\": {\n                        \"type\": \"NexusOperationCancellationInfo\",\n                        \"id\": 12,\n                        \"protoName\": \"cancellation_info\"\n                      },\n                      \"scheduledEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 13,\n                        \"protoName\": \"scheduled_event_id\"\n                      },\n                      \"blockedReason\": {\n                        \"type\": \"string\",\n                        \"id\": 14,\n                        \"protoName\": \"blocked_reason\"\n                      },\n                      \"operationToken\": {\n                        \"type\": \"string\",\n                        \"id\": 15,\n                        \"protoName\": \"operation_token\"\n                      },\n                      \"scheduleToStartTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 16,\n                        \"protoName\": \"schedule_to_start_timeout\"\n                      },\n                      \"startToCloseTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 17,\n                        \"protoName\": \"start_to_close_timeout\"\n                      }\n                    }\n                  },\n                  \"NexusOperationCancellationInfo\": {\n                    \"fields\": {\n                      \"requestedTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 1,\n                        \"protoName\": \"requested_time\"\n                      },\n                      \"state\": {\n                        \"type\": \"temporal.api.enums.v1.NexusOperationCancellationState\",\n                        \"id\": 2\n                      },\n                      \"attempt\": {\n                        \"type\": \"int32\",\n                        \"id\": 3\n                      },\n                      \"lastAttemptCompleteTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 4,\n                        \"protoName\": \"last_attempt_complete_time\"\n                      },\n                      \"lastAttemptFailure\": {\n                        \"type\": \"temporal.api.failure.v1.Failure\",\n                        \"id\": 5,\n                        \"protoName\": \"last_attempt_failure\"\n                      },\n                      \"nextAttemptScheduleTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 6,\n                        \"protoName\": \"next_attempt_schedule_time\"\n                      },\n                      \"blockedReason\": {\n                        \"type\": \"string\",\n                        \"id\": 7,\n                        \"protoName\": \"blocked_reason\"\n                      }\n                    }\n                  },\n                  \"WorkflowExecutionOptions\": {\n                    \"fields\": {\n                      \"versioningOverride\": {\n                        \"type\": \"VersioningOverride\",\n                        \"id\": 1,\n                        \"protoName\": \"versioning_override\"\n                      },\n                      \"priority\": {\n                        \"type\": \"temporal.api.common.v1.Priority\",\n                        \"id\": 2\n                      },\n                      \"timeSkippingConfig\": {\n                        \"type\": \"temporal.api.common.v1.TimeSkippingConfig\",\n                        \"id\": 3,\n                        \"protoName\": \"time_skipping_config\"\n                      }\n                    }\n                  },\n                  \"VersioningOverride\": {\n                    \"oneofs\": {\n                      \"override\": {\n                        \"oneof\": [\n                          \"pinned\",\n                          \"autoUpgrade\",\n                          \"oneTime\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"pinned\": {\n                        \"type\": \"PinnedOverride\",\n                        \"id\": 3\n                      },\n                      \"autoUpgrade\": {\n                        \"type\": \"bool\",\n                        \"id\": 4,\n                        \"protoName\": \"auto_upgrade\"\n                      },\n                      \"oneTime\": {\n                        \"type\": \"OneTimeOverride\",\n                        \"id\": 5,\n                        \"protoName\": \"one_time\"\n                      },\n                      \"behavior\": {\n                        \"type\": \"temporal.api.enums.v1.VersioningBehavior\",\n                        \"id\": 1,\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"deployment\": {\n                        \"type\": \"temporal.api.deployment.v1.Deployment\",\n                        \"id\": 2,\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"pinnedVersion\": {\n                        \"type\": \"string\",\n                        \"id\": 9,\n                        \"protoName\": \"pinned_version\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      }\n                    },\n                    \"nested\": {\n                      \"PinnedOverride\": {\n                        \"fields\": {\n                          \"behavior\": {\n                            \"type\": \"PinnedOverrideBehavior\",\n                            \"id\": 1\n                          },\n                          \"version\": {\n                            \"type\": \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                            \"id\": 2\n                          }\n                        }\n                      },\n                      \"OneTimeOverride\": {\n                        \"fields\": {\n                          \"targetDeploymentVersion\": {\n                            \"type\": \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                            \"id\": 1,\n                            \"protoName\": \"target_deployment_version\"\n                          }\n                        }\n                      },\n                      \"PinnedOverrideBehavior\": {\n                        \"values\": {\n                          \"PINNED_OVERRIDE_BEHAVIOR_UNSPECIFIED\": 0,\n                          \"PINNED_OVERRIDE_BEHAVIOR_PINNED\": 1\n                        }\n                      }\n                    }\n                  },\n                  \"OnConflictOptions\": {\n                    \"fields\": {\n                      \"attachRequestId\": {\n                        \"type\": \"bool\",\n                        \"id\": 1,\n                        \"protoName\": \"attach_request_id\"\n                      },\n                      \"attachCompletionCallbacks\": {\n                        \"type\": \"bool\",\n                        \"id\": 2,\n                        \"protoName\": \"attach_completion_callbacks\"\n                      },\n                      \"attachLinks\": {\n                        \"type\": \"bool\",\n                        \"id\": 3,\n                        \"protoName\": \"attach_links\"\n                      }\n                    }\n                  },\n                  \"RequestIdInfo\": {\n                    \"fields\": {\n                      \"eventType\": {\n                        \"type\": \"temporal.api.enums.v1.EventType\",\n                        \"id\": 1,\n                        \"protoName\": \"event_type\"\n                      },\n                      \"eventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 2,\n                        \"protoName\": \"event_id\"\n                      },\n                      \"buffered\": {\n                        \"type\": \"bool\",\n                        \"id\": 3\n                      }\n                    }\n                  },\n                  \"PostResetOperation\": {\n                    \"oneofs\": {\n                      \"variant\": {\n                        \"oneof\": [\n                          \"signalWorkflow\",\n                          \"updateWorkflowOptions\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"signalWorkflow\": {\n                        \"type\": \"SignalWorkflow\",\n                        \"id\": 1,\n                        \"protoName\": \"signal_workflow\"\n                      },\n                      \"updateWorkflowOptions\": {\n                        \"type\": \"UpdateWorkflowOptions\",\n                        \"id\": 2,\n                        \"protoName\": \"update_workflow_options\"\n                      }\n                    },\n                    \"nested\": {\n                      \"SignalWorkflow\": {\n                        \"fields\": {\n                          \"signalName\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"signal_name\"\n                          },\n                          \"input\": {\n                            \"type\": \"temporal.api.common.v1.Payloads\",\n                            \"id\": 2\n                          },\n                          \"header\": {\n                            \"type\": \"temporal.api.common.v1.Header\",\n                            \"id\": 3\n                          },\n                          \"links\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"temporal.api.common.v1.Link\",\n                            \"id\": 4\n                          }\n                        }\n                      },\n                      \"UpdateWorkflowOptions\": {\n                        \"fields\": {\n                          \"workflowExecutionOptions\": {\n                            \"type\": \"temporal.api.workflow.v1.WorkflowExecutionOptions\",\n                            \"id\": 1,\n                            \"protoName\": \"workflow_execution_options\"\n                          },\n                          \"updateMask\": {\n                            \"type\": \"google.protobuf.FieldMask\",\n                            \"id\": 2,\n                            \"protoName\": \"update_mask\"\n                          }\n                        }\n                      }\n                    }\n                  },\n                  \"WorkflowExecutionPauseInfo\": {\n                    \"fields\": {\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"pausedTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 2,\n                        \"protoName\": \"paused_time\"\n                      },\n                      \"reason\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          \"command\": {\n            \"nested\": {\n              \"v1\": {\n                \"options\": {\n                  \"go_package\": \"go.temporal.io/api/command/v1;command\",\n                  \"java_package\": \"io.temporal.api.command.v1\",\n                  \"java_multiple_files\": true,\n                  \"java_outer_classname\": \"MessageProto\",\n                  \"ruby_package\": \"Temporalio::Api::Command::V1\",\n                  \"csharp_namespace\": \"Temporalio.Api.Command.V1\"\n                },\n                \"nested\": {\n                  \"ScheduleActivityTaskCommandAttributes\": {\n                    \"fields\": {\n                      \"activityId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"activity_id\"\n                      },\n                      \"activityType\": {\n                        \"type\": \"temporal.api.common.v1.ActivityType\",\n                        \"id\": 2,\n                        \"protoName\": \"activity_type\"\n                      },\n                      \"taskQueue\": {\n                        \"type\": \"temporal.api.taskqueue.v1.TaskQueue\",\n                        \"id\": 4,\n                        \"protoName\": \"task_queue\"\n                      },\n                      \"header\": {\n                        \"type\": \"temporal.api.common.v1.Header\",\n                        \"id\": 5\n                      },\n                      \"input\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 6\n                      },\n                      \"scheduleToCloseTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 7,\n                        \"protoName\": \"schedule_to_close_timeout\"\n                      },\n                      \"scheduleToStartTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 8,\n                        \"protoName\": \"schedule_to_start_timeout\"\n                      },\n                      \"startToCloseTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 9,\n                        \"protoName\": \"start_to_close_timeout\"\n                      },\n                      \"heartbeatTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 10,\n                        \"protoName\": \"heartbeat_timeout\"\n                      },\n                      \"retryPolicy\": {\n                        \"type\": \"temporal.api.common.v1.RetryPolicy\",\n                        \"id\": 11,\n                        \"protoName\": \"retry_policy\"\n                      },\n                      \"requestEagerExecution\": {\n                        \"type\": \"bool\",\n                        \"id\": 12,\n                        \"protoName\": \"request_eager_execution\"\n                      },\n                      \"useWorkflowBuildId\": {\n                        \"type\": \"bool\",\n                        \"id\": 13,\n                        \"protoName\": \"use_workflow_build_id\"\n                      },\n                      \"priority\": {\n                        \"type\": \"temporal.api.common.v1.Priority\",\n                        \"id\": 14\n                      }\n                    },\n                    \"reserved\": [\n                      [\n                        3,\n                        3\n                      ]\n                    ]\n                  },\n                  \"RequestCancelActivityTaskCommandAttributes\": {\n                    \"fields\": {\n                      \"scheduledEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 1,\n                        \"protoName\": \"scheduled_event_id\"\n                      }\n                    }\n                  },\n                  \"StartTimerCommandAttributes\": {\n                    \"fields\": {\n                      \"timerId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"timer_id\"\n                      },\n                      \"startToFireTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 2,\n                        \"protoName\": \"start_to_fire_timeout\"\n                      }\n                    }\n                  },\n                  \"CompleteWorkflowExecutionCommandAttributes\": {\n                    \"fields\": {\n                      \"result\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 1\n                      }\n                    }\n                  },\n                  \"FailWorkflowExecutionCommandAttributes\": {\n                    \"fields\": {\n                      \"failure\": {\n                        \"type\": \"temporal.api.failure.v1.Failure\",\n                        \"id\": 1\n                      }\n                    }\n                  },\n                  \"CancelTimerCommandAttributes\": {\n                    \"fields\": {\n                      \"timerId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"timer_id\"\n                      }\n                    }\n                  },\n                  \"CancelWorkflowExecutionCommandAttributes\": {\n                    \"fields\": {\n                      \"details\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 1\n                      }\n                    }\n                  },\n                  \"RequestCancelExternalWorkflowExecutionCommandAttributes\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"workflowId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_id\"\n                      },\n                      \"runId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"run_id\"\n                      },\n                      \"control\": {\n                        \"type\": \"string\",\n                        \"id\": 4,\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"childWorkflowOnly\": {\n                        \"type\": \"bool\",\n                        \"id\": 5,\n                        \"protoName\": \"child_workflow_only\"\n                      },\n                      \"reason\": {\n                        \"type\": \"string\",\n                        \"id\": 6\n                      }\n                    }\n                  },\n                  \"SignalExternalWorkflowExecutionCommandAttributes\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"execution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 2\n                      },\n                      \"signalName\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"signal_name\"\n                      },\n                      \"input\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 4\n                      },\n                      \"control\": {\n                        \"type\": \"string\",\n                        \"id\": 5,\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"childWorkflowOnly\": {\n                        \"type\": \"bool\",\n                        \"id\": 6,\n                        \"protoName\": \"child_workflow_only\"\n                      },\n                      \"header\": {\n                        \"type\": \"temporal.api.common.v1.Header\",\n                        \"id\": 7\n                      }\n                    }\n                  },\n                  \"UpsertWorkflowSearchAttributesCommandAttributes\": {\n                    \"fields\": {\n                      \"searchAttributes\": {\n                        \"type\": \"temporal.api.common.v1.SearchAttributes\",\n                        \"id\": 1,\n                        \"protoName\": \"search_attributes\"\n                      }\n                    }\n                  },\n                  \"ModifyWorkflowPropertiesCommandAttributes\": {\n                    \"fields\": {\n                      \"upsertedMemo\": {\n                        \"type\": \"temporal.api.common.v1.Memo\",\n                        \"id\": 1,\n                        \"protoName\": \"upserted_memo\"\n                      }\n                    }\n                  },\n                  \"RecordMarkerCommandAttributes\": {\n                    \"fields\": {\n                      \"markerName\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"marker_name\"\n                      },\n                      \"details\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 2\n                      },\n                      \"header\": {\n                        \"type\": \"temporal.api.common.v1.Header\",\n                        \"id\": 3\n                      },\n                      \"failure\": {\n                        \"type\": \"temporal.api.failure.v1.Failure\",\n                        \"id\": 4\n                      }\n                    }\n                  },\n                  \"ContinueAsNewWorkflowExecutionCommandAttributes\": {\n                    \"fields\": {\n                      \"workflowType\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowType\",\n                        \"id\": 1,\n                        \"protoName\": \"workflow_type\"\n                      },\n                      \"taskQueue\": {\n                        \"type\": \"temporal.api.taskqueue.v1.TaskQueue\",\n                        \"id\": 2,\n                        \"protoName\": \"task_queue\"\n                      },\n                      \"input\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 3\n                      },\n                      \"workflowRunTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 4,\n                        \"protoName\": \"workflow_run_timeout\"\n                      },\n                      \"workflowTaskTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 5,\n                        \"protoName\": \"workflow_task_timeout\"\n                      },\n                      \"backoffStartInterval\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 6,\n                        \"protoName\": \"backoff_start_interval\"\n                      },\n                      \"retryPolicy\": {\n                        \"type\": \"temporal.api.common.v1.RetryPolicy\",\n                        \"id\": 7,\n                        \"protoName\": \"retry_policy\"\n                      },\n                      \"initiator\": {\n                        \"type\": \"temporal.api.enums.v1.ContinueAsNewInitiator\",\n                        \"id\": 8\n                      },\n                      \"failure\": {\n                        \"type\": \"temporal.api.failure.v1.Failure\",\n                        \"id\": 9\n                      },\n                      \"lastCompletionResult\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 10,\n                        \"protoName\": \"last_completion_result\"\n                      },\n                      \"cronSchedule\": {\n                        \"type\": \"string\",\n                        \"id\": 11,\n                        \"protoName\": \"cron_schedule\"\n                      },\n                      \"header\": {\n                        \"type\": \"temporal.api.common.v1.Header\",\n                        \"id\": 12\n                      },\n                      \"memo\": {\n                        \"type\": \"temporal.api.common.v1.Memo\",\n                        \"id\": 13\n                      },\n                      \"searchAttributes\": {\n                        \"type\": \"temporal.api.common.v1.SearchAttributes\",\n                        \"id\": 14,\n                        \"protoName\": \"search_attributes\"\n                      },\n                      \"inheritBuildId\": {\n                        \"type\": \"bool\",\n                        \"id\": 15,\n                        \"protoName\": \"inherit_build_id\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"initialVersioningBehavior\": {\n                        \"type\": \"temporal.api.enums.v1.ContinueAsNewVersioningBehavior\",\n                        \"id\": 16,\n                        \"protoName\": \"initial_versioning_behavior\"\n                      }\n                    }\n                  },\n                  \"StartChildWorkflowExecutionCommandAttributes\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"workflowId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_id\"\n                      },\n                      \"workflowType\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowType\",\n                        \"id\": 3,\n                        \"protoName\": \"workflow_type\"\n                      },\n                      \"taskQueue\": {\n                        \"type\": \"temporal.api.taskqueue.v1.TaskQueue\",\n                        \"id\": 4,\n                        \"protoName\": \"task_queue\"\n                      },\n                      \"input\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 5\n                      },\n                      \"workflowExecutionTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 6,\n                        \"protoName\": \"workflow_execution_timeout\"\n                      },\n                      \"workflowRunTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 7,\n                        \"protoName\": \"workflow_run_timeout\"\n                      },\n                      \"workflowTaskTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 8,\n                        \"protoName\": \"workflow_task_timeout\"\n                      },\n                      \"parentClosePolicy\": {\n                        \"type\": \"temporal.api.enums.v1.ParentClosePolicy\",\n                        \"id\": 9,\n                        \"protoName\": \"parent_close_policy\"\n                      },\n                      \"control\": {\n                        \"type\": \"string\",\n                        \"id\": 10\n                      },\n                      \"workflowIdReusePolicy\": {\n                        \"type\": \"temporal.api.enums.v1.WorkflowIdReusePolicy\",\n                        \"id\": 11,\n                        \"protoName\": \"workflow_id_reuse_policy\"\n                      },\n                      \"retryPolicy\": {\n                        \"type\": \"temporal.api.common.v1.RetryPolicy\",\n                        \"id\": 12,\n                        \"protoName\": \"retry_policy\"\n                      },\n                      \"cronSchedule\": {\n                        \"type\": \"string\",\n                        \"id\": 13,\n                        \"protoName\": \"cron_schedule\"\n                      },\n                      \"header\": {\n                        \"type\": \"temporal.api.common.v1.Header\",\n                        \"id\": 14\n                      },\n                      \"memo\": {\n                        \"type\": \"temporal.api.common.v1.Memo\",\n                        \"id\": 15\n                      },\n                      \"searchAttributes\": {\n                        \"type\": \"temporal.api.common.v1.SearchAttributes\",\n                        \"id\": 16,\n                        \"protoName\": \"search_attributes\"\n                      },\n                      \"inheritBuildId\": {\n                        \"type\": \"bool\",\n                        \"id\": 17,\n                        \"protoName\": \"inherit_build_id\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"priority\": {\n                        \"type\": \"temporal.api.common.v1.Priority\",\n                        \"id\": 18\n                      },\n                      \"versioningOverride\": {\n                        \"type\": \"temporal.api.workflow.v1.VersioningOverride\",\n                        \"id\": 19,\n                        \"protoName\": \"versioning_override\"\n                      }\n                    }\n                  },\n                  \"ProtocolMessageCommandAttributes\": {\n                    \"fields\": {\n                      \"messageId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"message_id\"\n                      }\n                    }\n                  },\n                  \"ScheduleNexusOperationCommandAttributes\": {\n                    \"fields\": {\n                      \"endpoint\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"service\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"operation\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"input\": {\n                        \"type\": \"temporal.api.common.v1.Payload\",\n                        \"id\": 4\n                      },\n                      \"scheduleToCloseTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 5,\n                        \"protoName\": \"schedule_to_close_timeout\"\n                      },\n                      \"nexusHeader\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"string\",\n                        \"id\": 6,\n                        \"protoName\": \"nexus_header\"\n                      },\n                      \"scheduleToStartTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 7,\n                        \"protoName\": \"schedule_to_start_timeout\"\n                      },\n                      \"startToCloseTimeout\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 8,\n                        \"protoName\": \"start_to_close_timeout\"\n                      }\n                    }\n                  },\n                  \"RequestCancelNexusOperationCommandAttributes\": {\n                    \"fields\": {\n                      \"scheduledEventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 1,\n                        \"protoName\": \"scheduled_event_id\"\n                      }\n                    }\n                  },\n                  \"Command\": {\n                    \"oneofs\": {\n                      \"attributes\": {\n                        \"oneof\": [\n                          \"scheduleActivityTaskCommandAttributes\",\n                          \"startTimerCommandAttributes\",\n                          \"completeWorkflowExecutionCommandAttributes\",\n                          \"failWorkflowExecutionCommandAttributes\",\n                          \"requestCancelActivityTaskCommandAttributes\",\n                          \"cancelTimerCommandAttributes\",\n                          \"cancelWorkflowExecutionCommandAttributes\",\n                          \"requestCancelExternalWorkflowExecutionCommandAttributes\",\n                          \"recordMarkerCommandAttributes\",\n                          \"continueAsNewWorkflowExecutionCommandAttributes\",\n                          \"startChildWorkflowExecutionCommandAttributes\",\n                          \"signalExternalWorkflowExecutionCommandAttributes\",\n                          \"upsertWorkflowSearchAttributesCommandAttributes\",\n                          \"protocolMessageCommandAttributes\",\n                          \"modifyWorkflowPropertiesCommandAttributes\",\n                          \"scheduleNexusOperationCommandAttributes\",\n                          \"requestCancelNexusOperationCommandAttributes\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"commandType\": {\n                        \"type\": \"temporal.api.enums.v1.CommandType\",\n                        \"id\": 1,\n                        \"protoName\": \"command_type\"\n                      },\n                      \"userMetadata\": {\n                        \"type\": \"temporal.api.sdk.v1.UserMetadata\",\n                        \"id\": 301,\n                        \"protoName\": \"user_metadata\"\n                      },\n                      \"eventGroupMarkers\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.sdk.v1.EventGroupMarker\",\n                        \"id\": 302,\n                        \"protoName\": \"event_group_markers\"\n                      },\n                      \"scheduleActivityTaskCommandAttributes\": {\n                        \"type\": \"ScheduleActivityTaskCommandAttributes\",\n                        \"id\": 2,\n                        \"protoName\": \"schedule_activity_task_command_attributes\"\n                      },\n                      \"startTimerCommandAttributes\": {\n                        \"type\": \"StartTimerCommandAttributes\",\n                        \"id\": 3,\n                        \"protoName\": \"start_timer_command_attributes\"\n                      },\n                      \"completeWorkflowExecutionCommandAttributes\": {\n                        \"type\": \"CompleteWorkflowExecutionCommandAttributes\",\n                        \"id\": 4,\n                        \"protoName\": \"complete_workflow_execution_command_attributes\"\n                      },\n                      \"failWorkflowExecutionCommandAttributes\": {\n                        \"type\": \"FailWorkflowExecutionCommandAttributes\",\n                        \"id\": 5,\n                        \"protoName\": \"fail_workflow_execution_command_attributes\"\n                      },\n                      \"requestCancelActivityTaskCommandAttributes\": {\n                        \"type\": \"RequestCancelActivityTaskCommandAttributes\",\n                        \"id\": 6,\n                        \"protoName\": \"request_cancel_activity_task_command_attributes\"\n                      },\n                      \"cancelTimerCommandAttributes\": {\n                        \"type\": \"CancelTimerCommandAttributes\",\n                        \"id\": 7,\n                        \"protoName\": \"cancel_timer_command_attributes\"\n                      },\n                      \"cancelWorkflowExecutionCommandAttributes\": {\n                        \"type\": \"CancelWorkflowExecutionCommandAttributes\",\n                        \"id\": 8,\n                        \"protoName\": \"cancel_workflow_execution_command_attributes\"\n                      },\n                      \"requestCancelExternalWorkflowExecutionCommandAttributes\": {\n                        \"type\": \"RequestCancelExternalWorkflowExecutionCommandAttributes\",\n                        \"id\": 9,\n                        \"protoName\": \"request_cancel_external_workflow_execution_command_attributes\"\n                      },\n                      \"recordMarkerCommandAttributes\": {\n                        \"type\": \"RecordMarkerCommandAttributes\",\n                        \"id\": 10,\n                        \"protoName\": \"record_marker_command_attributes\"\n                      },\n                      \"continueAsNewWorkflowExecutionCommandAttributes\": {\n                        \"type\": \"ContinueAsNewWorkflowExecutionCommandAttributes\",\n                        \"id\": 11,\n                        \"protoName\": \"continue_as_new_workflow_execution_command_attributes\"\n                      },\n                      \"startChildWorkflowExecutionCommandAttributes\": {\n                        \"type\": \"StartChildWorkflowExecutionCommandAttributes\",\n                        \"id\": 12,\n                        \"protoName\": \"start_child_workflow_execution_command_attributes\"\n                      },\n                      \"signalExternalWorkflowExecutionCommandAttributes\": {\n                        \"type\": \"SignalExternalWorkflowExecutionCommandAttributes\",\n                        \"id\": 13,\n                        \"protoName\": \"signal_external_workflow_execution_command_attributes\"\n                      },\n                      \"upsertWorkflowSearchAttributesCommandAttributes\": {\n                        \"type\": \"UpsertWorkflowSearchAttributesCommandAttributes\",\n                        \"id\": 14,\n                        \"protoName\": \"upsert_workflow_search_attributes_command_attributes\"\n                      },\n                      \"protocolMessageCommandAttributes\": {\n                        \"type\": \"ProtocolMessageCommandAttributes\",\n                        \"id\": 15,\n                        \"protoName\": \"protocol_message_command_attributes\"\n                      },\n                      \"modifyWorkflowPropertiesCommandAttributes\": {\n                        \"type\": \"ModifyWorkflowPropertiesCommandAttributes\",\n                        \"id\": 17,\n                        \"protoName\": \"modify_workflow_properties_command_attributes\"\n                      },\n                      \"scheduleNexusOperationCommandAttributes\": {\n                        \"type\": \"ScheduleNexusOperationCommandAttributes\",\n                        \"id\": 18,\n                        \"protoName\": \"schedule_nexus_operation_command_attributes\"\n                      },\n                      \"requestCancelNexusOperationCommandAttributes\": {\n                        \"type\": \"RequestCancelNexusOperationCommandAttributes\",\n                        \"id\": 19,\n                        \"protoName\": \"request_cancel_nexus_operation_command_attributes\"\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          \"filter\": {\n            \"nested\": {\n              \"v1\": {\n                \"options\": {\n                  \"go_package\": \"go.temporal.io/api/filter/v1;filter\",\n                  \"java_package\": \"io.temporal.api.filter.v1\",\n                  \"java_multiple_files\": true,\n                  \"java_outer_classname\": \"MessageProto\",\n                  \"ruby_package\": \"Temporalio::Api::Filter::V1\",\n                  \"csharp_namespace\": \"Temporalio.Api.Filter.V1\"\n                },\n                \"nested\": {\n                  \"WorkflowExecutionFilter\": {\n                    \"fields\": {\n                      \"workflowId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"workflow_id\"\n                      },\n                      \"runId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"run_id\"\n                      }\n                    }\n                  },\n                  \"WorkflowTypeFilter\": {\n                    \"fields\": {\n                      \"name\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      }\n                    }\n                  },\n                  \"StartTimeFilter\": {\n                    \"fields\": {\n                      \"earliestTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 1,\n                        \"protoName\": \"earliest_time\"\n                      },\n                      \"latestTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 2,\n                        \"protoName\": \"latest_time\"\n                      }\n                    }\n                  },\n                  \"StatusFilter\": {\n                    \"fields\": {\n                      \"status\": {\n                        \"type\": \"temporal.api.enums.v1.WorkflowExecutionStatus\",\n                        \"id\": 1\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          \"protocol\": {\n            \"nested\": {\n              \"v1\": {\n                \"options\": {\n                  \"go_package\": \"go.temporal.io/api/protocol/v1;protocol\",\n                  \"java_package\": \"io.temporal.api.protocol.v1\",\n                  \"java_multiple_files\": true,\n                  \"java_outer_classname\": \"MessageProto\",\n                  \"ruby_package\": \"Temporalio::Api::Protocol::V1\",\n                  \"csharp_namespace\": \"Temporalio.Api.Protocol.V1\"\n                },\n                \"nested\": {\n                  \"Message\": {\n                    \"oneofs\": {\n                      \"sequencingId\": {\n                        \"oneof\": [\n                          \"eventId\",\n                          \"commandIndex\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"id\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"protocolInstanceId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"protocol_instance_id\"\n                      },\n                      \"eventId\": {\n                        \"type\": \"int64\",\n                        \"id\": 3,\n                        \"protoName\": \"event_id\"\n                      },\n                      \"commandIndex\": {\n                        \"type\": \"int64\",\n                        \"id\": 4,\n                        \"protoName\": \"command_index\"\n                      },\n                      \"body\": {\n                        \"type\": \"google.protobuf.Any\",\n                        \"id\": 5\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          \"namespace\": {\n            \"nested\": {\n              \"v1\": {\n                \"options\": {\n                  \"go_package\": \"go.temporal.io/api/namespace/v1;namespace\",\n                  \"java_package\": \"io.temporal.api.namespace.v1\",\n                  \"java_multiple_files\": true,\n                  \"java_outer_classname\": \"MessageProto\",\n                  \"ruby_package\": \"Temporalio::Api::Namespace::V1\",\n                  \"csharp_namespace\": \"Temporalio.Api.Namespace.V1\"\n                },\n                \"nested\": {\n                  \"NamespaceInfo\": {\n                    \"fields\": {\n                      \"name\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"state\": {\n                        \"type\": \"temporal.api.enums.v1.NamespaceState\",\n                        \"id\": 2\n                      },\n                      \"description\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"ownerEmail\": {\n                        \"type\": \"string\",\n                        \"id\": 4,\n                        \"protoName\": \"owner_email\"\n                      },\n                      \"data\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"string\",\n                        \"id\": 5\n                      },\n                      \"id\": {\n                        \"type\": \"string\",\n                        \"id\": 6\n                      },\n                      \"capabilities\": {\n                        \"type\": \"Capabilities\",\n                        \"id\": 7\n                      },\n                      \"limits\": {\n                        \"type\": \"Limits\",\n                        \"id\": 8\n                      },\n                      \"supportsSchedules\": {\n                        \"type\": \"bool\",\n                        \"id\": 100,\n                        \"protoName\": \"supports_schedules\"\n                      }\n                    },\n                    \"nested\": {\n                      \"Capabilities\": {\n                        \"fields\": {\n                          \"eagerWorkflowStart\": {\n                            \"type\": \"bool\",\n                            \"id\": 1,\n                            \"protoName\": \"eager_workflow_start\"\n                          },\n                          \"syncUpdate\": {\n                            \"type\": \"bool\",\n                            \"id\": 2,\n                            \"protoName\": \"sync_update\"\n                          },\n                          \"asyncUpdate\": {\n                            \"type\": \"bool\",\n                            \"id\": 3,\n                            \"protoName\": \"async_update\"\n                          },\n                          \"workerHeartbeats\": {\n                            \"type\": \"bool\",\n                            \"id\": 4,\n                            \"protoName\": \"worker_heartbeats\"\n                          },\n                          \"reportedProblemsSearchAttribute\": {\n                            \"type\": \"bool\",\n                            \"id\": 5,\n                            \"protoName\": \"reported_problems_search_attribute\"\n                          },\n                          \"workflowPause\": {\n                            \"type\": \"bool\",\n                            \"id\": 6,\n                            \"protoName\": \"workflow_pause\"\n                          },\n                          \"standaloneActivities\": {\n                            \"type\": \"bool\",\n                            \"id\": 7,\n                            \"protoName\": \"standalone_activities\"\n                          },\n                          \"workerPollCompleteOnShutdown\": {\n                            \"type\": \"bool\",\n                            \"id\": 8,\n                            \"protoName\": \"worker_poll_complete_on_shutdown\"\n                          },\n                          \"pollerAutoscaling\": {\n                            \"type\": \"bool\",\n                            \"id\": 9,\n                            \"protoName\": \"poller_autoscaling\"\n                          },\n                          \"workerCommands\": {\n                            \"type\": \"bool\",\n                            \"id\": 10,\n                            \"protoName\": \"worker_commands\"\n                          },\n                          \"standaloneNexusOperation\": {\n                            \"type\": \"bool\",\n                            \"id\": 11,\n                            \"protoName\": \"standalone_nexus_operation\"\n                          },\n                          \"workflowUpdateCallbacks\": {\n                            \"type\": \"bool\",\n                            \"id\": 12,\n                            \"protoName\": \"workflow_update_callbacks\"\n                          },\n                          \"pollerAutoscalingAutoEnroll\": {\n                            \"type\": \"bool\",\n                            \"id\": 13,\n                            \"protoName\": \"poller_autoscaling_auto_enroll\"\n                          },\n                          \"workflowTaskCompletionPagination\": {\n                            \"type\": \"bool\",\n                            \"id\": 14,\n                            \"protoName\": \"workflow_task_completion_pagination\"\n                          },\n                          \"standaloneActivityStartDelay\": {\n                            \"type\": \"bool\",\n                            \"id\": 15,\n                            \"protoName\": \"standalone_activity_start_delay\"\n                          },\n                          \"standaloneActivityBatchOperations\": {\n                            \"type\": \"bool\",\n                            \"id\": 16,\n                            \"protoName\": \"standalone_activity_batch_operations\"\n                          },\n                          \"standaloneActivityOperatorCommands\": {\n                            \"type\": \"bool\",\n                            \"id\": 17,\n                            \"protoName\": \"standalone_activity_operator_commands\"\n                          }\n                        }\n                      },\n                      \"Limits\": {\n                        \"fields\": {\n                          \"blobSizeLimitError\": {\n                            \"type\": \"int64\",\n                            \"id\": 1,\n                            \"protoName\": \"blob_size_limit_error\"\n                          },\n                          \"memoSizeLimitError\": {\n                            \"type\": \"int64\",\n                            \"id\": 2,\n                            \"protoName\": \"memo_size_limit_error\"\n                          },\n                          \"workflowTaskCompletionSizeLimitError\": {\n                            \"type\": \"int64\",\n                            \"id\": 3,\n                            \"protoName\": \"workflow_task_completion_size_limit_error\"\n                          }\n                        }\n                      }\n                    }\n                  },\n                  \"NamespaceConfig\": {\n                    \"fields\": {\n                      \"workflowExecutionRetentionTtl\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 1,\n                        \"protoName\": \"workflow_execution_retention_ttl\"\n                      },\n                      \"badBinaries\": {\n                        \"type\": \"BadBinaries\",\n                        \"id\": 2,\n                        \"protoName\": \"bad_binaries\"\n                      },\n                      \"historyArchivalState\": {\n                        \"type\": \"temporal.api.enums.v1.ArchivalState\",\n                        \"id\": 3,\n                        \"protoName\": \"history_archival_state\"\n                      },\n                      \"historyArchivalUri\": {\n                        \"type\": \"string\",\n                        \"id\": 4,\n                        \"protoName\": \"history_archival_uri\"\n                      },\n                      \"visibilityArchivalState\": {\n                        \"type\": \"temporal.api.enums.v1.ArchivalState\",\n                        \"id\": 5,\n                        \"protoName\": \"visibility_archival_state\"\n                      },\n                      \"visibilityArchivalUri\": {\n                        \"type\": \"string\",\n                        \"id\": 6,\n                        \"protoName\": \"visibility_archival_uri\"\n                      },\n                      \"customSearchAttributeAliases\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"string\",\n                        \"id\": 7,\n                        \"protoName\": \"custom_search_attribute_aliases\"\n                      }\n                    }\n                  },\n                  \"BadBinaries\": {\n                    \"fields\": {\n                      \"binaries\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"BadBinaryInfo\",\n                        \"id\": 1\n                      }\n                    }\n                  },\n                  \"BadBinaryInfo\": {\n                    \"fields\": {\n                      \"reason\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"operator\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"createTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 3,\n                        \"protoName\": \"create_time\"\n                      }\n                    }\n                  },\n                  \"UpdateNamespaceInfo\": {\n                    \"fields\": {\n                      \"description\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"ownerEmail\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"owner_email\"\n                      },\n                      \"data\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"state\": {\n                        \"type\": \"temporal.api.enums.v1.NamespaceState\",\n                        \"id\": 4\n                      }\n                    }\n                  },\n                  \"NamespaceFilter\": {\n                    \"fields\": {\n                      \"includeDeleted\": {\n                        \"type\": \"bool\",\n                        \"id\": 1,\n                        \"protoName\": \"include_deleted\"\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          \"query\": {\n            \"nested\": {\n              \"v1\": {\n                \"options\": {\n                  \"go_package\": \"go.temporal.io/api/query/v1;query\",\n                  \"java_package\": \"io.temporal.api.query.v1\",\n                  \"java_multiple_files\": true,\n                  \"java_outer_classname\": \"MessageProto\",\n                  \"ruby_package\": \"Temporalio::Api::Query::V1\",\n                  \"csharp_namespace\": \"Temporalio.Api.Query.V1\"\n                },\n                \"nested\": {\n                  \"WorkflowQuery\": {\n                    \"fields\": {\n                      \"queryType\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"query_type\"\n                      },\n                      \"queryArgs\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 2,\n                        \"protoName\": \"query_args\"\n                      },\n                      \"header\": {\n                        \"type\": \"temporal.api.common.v1.Header\",\n                        \"id\": 3\n                      }\n                    }\n                  },\n                  \"WorkflowQueryResult\": {\n                    \"fields\": {\n                      \"resultType\": {\n                        \"type\": \"temporal.api.enums.v1.QueryResultType\",\n                        \"id\": 1,\n                        \"protoName\": \"result_type\"\n                      },\n                      \"answer\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 2\n                      },\n                      \"errorMessage\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"error_message\"\n                      },\n                      \"failure\": {\n                        \"type\": \"temporal.api.failure.v1.Failure\",\n                        \"id\": 4\n                      }\n                    }\n                  },\n                  \"QueryRejected\": {\n                    \"fields\": {\n                      \"status\": {\n                        \"type\": \"temporal.api.enums.v1.WorkflowExecutionStatus\",\n                        \"id\": 1\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          \"replication\": {\n            \"nested\": {\n              \"v1\": {\n                \"options\": {\n                  \"go_package\": \"go.temporal.io/api/replication/v1;replication\",\n                  \"java_package\": \"io.temporal.api.replication.v1\",\n                  \"java_multiple_files\": true,\n                  \"java_outer_classname\": \"MessageProto\",\n                  \"ruby_package\": \"Temporalio::Api::Replication::V1\",\n                  \"csharp_namespace\": \"Temporalio.Api.Replication.V1\"\n                },\n                \"nested\": {\n                  \"ClusterReplicationConfig\": {\n                    \"fields\": {\n                      \"clusterName\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"cluster_name\"\n                      }\n                    }\n                  },\n                  \"NamespaceReplicationConfig\": {\n                    \"fields\": {\n                      \"activeClusterName\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"active_cluster_name\"\n                      },\n                      \"clusters\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"ClusterReplicationConfig\",\n                        \"id\": 2\n                      },\n                      \"state\": {\n                        \"type\": \"temporal.api.enums.v1.ReplicationState\",\n                        \"id\": 3\n                      }\n                    }\n                  },\n                  \"FailoverStatus\": {\n                    \"fields\": {\n                      \"failoverTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 1,\n                        \"protoName\": \"failover_time\"\n                      },\n                      \"failoverVersion\": {\n                        \"type\": \"int64\",\n                        \"id\": 2,\n                        \"protoName\": \"failover_version\"\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          \"rules\": {\n            \"nested\": {\n              \"v1\": {\n                \"options\": {\n                  \"go_package\": \"go.temporal.io/api/rules/v1;rules\",\n                  \"java_package\": \"io.temporal.api.rules.v1\",\n                  \"java_multiple_files\": true,\n                  \"java_outer_classname\": \"MessageProto\",\n                  \"ruby_package\": \"Temporalio::Api::Rules::V1\",\n                  \"csharp_namespace\": \"Temporalio.Api.Rules.V1\"\n                },\n                \"nested\": {\n                  \"WorkflowRuleAction\": {\n                    \"oneofs\": {\n                      \"variant\": {\n                        \"oneof\": [\n                          \"activityPause\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"activityPause\": {\n                        \"type\": \"ActionActivityPause\",\n                        \"id\": 1,\n                        \"protoName\": \"activity_pause\"\n                      }\n                    },\n                    \"nested\": {\n                      \"ActionActivityPause\": {\n                        \"fields\": {}\n                      }\n                    }\n                  },\n                  \"WorkflowRuleSpec\": {\n                    \"oneofs\": {\n                      \"trigger\": {\n                        \"oneof\": [\n                          \"activityStart\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"id\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"activityStart\": {\n                        \"type\": \"ActivityStartingTrigger\",\n                        \"id\": 2,\n                        \"protoName\": \"activity_start\"\n                      },\n                      \"visibilityQuery\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"visibility_query\"\n                      },\n                      \"actions\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"WorkflowRuleAction\",\n                        \"id\": 4\n                      },\n                      \"expirationTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 5,\n                        \"protoName\": \"expiration_time\"\n                      }\n                    },\n                    \"nested\": {\n                      \"ActivityStartingTrigger\": {\n                        \"fields\": {\n                          \"predicate\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          }\n                        }\n                      }\n                    }\n                  },\n                  \"WorkflowRule\": {\n                    \"fields\": {\n                      \"createTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 1,\n                        \"protoName\": \"create_time\"\n                      },\n                      \"spec\": {\n                        \"type\": \"WorkflowRuleSpec\",\n                        \"id\": 2\n                      },\n                      \"createdByIdentity\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"created_by_identity\"\n                      },\n                      \"description\": {\n                        \"type\": \"string\",\n                        \"id\": 4\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          \"schedule\": {\n            \"nested\": {\n              \"v1\": {\n                \"options\": {\n                  \"go_package\": \"go.temporal.io/api/schedule/v1;schedule\",\n                  \"java_package\": \"io.temporal.api.schedule.v1\",\n                  \"java_multiple_files\": true,\n                  \"java_outer_classname\": \"MessageProto\",\n                  \"ruby_package\": \"Temporalio::Api::Schedule::V1\",\n                  \"csharp_namespace\": \"Temporalio.Api.Schedule.V1\"\n                },\n                \"nested\": {\n                  \"CalendarSpec\": {\n                    \"fields\": {\n                      \"second\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"minute\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"hour\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"dayOfMonth\": {\n                        \"type\": \"string\",\n                        \"id\": 4,\n                        \"protoName\": \"day_of_month\"\n                      },\n                      \"month\": {\n                        \"type\": \"string\",\n                        \"id\": 5\n                      },\n                      \"year\": {\n                        \"type\": \"string\",\n                        \"id\": 6\n                      },\n                      \"dayOfWeek\": {\n                        \"type\": \"string\",\n                        \"id\": 7,\n                        \"protoName\": \"day_of_week\"\n                      },\n                      \"comment\": {\n                        \"type\": \"string\",\n                        \"id\": 8\n                      }\n                    }\n                  },\n                  \"Range\": {\n                    \"fields\": {\n                      \"start\": {\n                        \"type\": \"int32\",\n                        \"id\": 1\n                      },\n                      \"end\": {\n                        \"type\": \"int32\",\n                        \"id\": 2\n                      },\n                      \"step\": {\n                        \"type\": \"int32\",\n                        \"id\": 3\n                      }\n                    }\n                  },\n                  \"StructuredCalendarSpec\": {\n                    \"fields\": {\n                      \"second\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"Range\",\n                        \"id\": 1\n                      },\n                      \"minute\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"Range\",\n                        \"id\": 2\n                      },\n                      \"hour\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"Range\",\n                        \"id\": 3\n                      },\n                      \"dayOfMonth\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"Range\",\n                        \"id\": 4,\n                        \"protoName\": \"day_of_month\"\n                      },\n                      \"month\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"Range\",\n                        \"id\": 5\n                      },\n                      \"year\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"Range\",\n                        \"id\": 6\n                      },\n                      \"dayOfWeek\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"Range\",\n                        \"id\": 7,\n                        \"protoName\": \"day_of_week\"\n                      },\n                      \"comment\": {\n                        \"type\": \"string\",\n                        \"id\": 8\n                      }\n                    }\n                  },\n                  \"IntervalSpec\": {\n                    \"fields\": {\n                      \"interval\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 1\n                      },\n                      \"phase\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 2\n                      }\n                    }\n                  },\n                  \"ScheduleSpec\": {\n                    \"fields\": {\n                      \"structuredCalendar\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"StructuredCalendarSpec\",\n                        \"id\": 7,\n                        \"protoName\": \"structured_calendar\"\n                      },\n                      \"cronString\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"string\",\n                        \"id\": 8,\n                        \"protoName\": \"cron_string\"\n                      },\n                      \"calendar\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"CalendarSpec\",\n                        \"id\": 1\n                      },\n                      \"interval\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"IntervalSpec\",\n                        \"id\": 2\n                      },\n                      \"excludeCalendar\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"CalendarSpec\",\n                        \"id\": 3,\n                        \"protoName\": \"exclude_calendar\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"excludeStructuredCalendar\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"StructuredCalendarSpec\",\n                        \"id\": 9,\n                        \"protoName\": \"exclude_structured_calendar\"\n                      },\n                      \"startTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 4,\n                        \"protoName\": \"start_time\"\n                      },\n                      \"endTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 5,\n                        \"protoName\": \"end_time\"\n                      },\n                      \"jitter\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 6\n                      },\n                      \"timezoneName\": {\n                        \"type\": \"string\",\n                        \"id\": 10,\n                        \"protoName\": \"timezone_name\"\n                      },\n                      \"timezoneData\": {\n                        \"type\": \"bytes\",\n                        \"id\": 11,\n                        \"protoName\": \"timezone_data\"\n                      }\n                    }\n                  },\n                  \"SchedulePolicies\": {\n                    \"fields\": {\n                      \"overlapPolicy\": {\n                        \"type\": \"temporal.api.enums.v1.ScheduleOverlapPolicy\",\n                        \"id\": 1,\n                        \"protoName\": \"overlap_policy\"\n                      },\n                      \"catchupWindow\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 2,\n                        \"protoName\": \"catchup_window\"\n                      },\n                      \"pauseOnFailure\": {\n                        \"type\": \"bool\",\n                        \"id\": 3,\n                        \"protoName\": \"pause_on_failure\"\n                      },\n                      \"keepOriginalWorkflowId\": {\n                        \"type\": \"bool\",\n                        \"id\": 4,\n                        \"protoName\": \"keep_original_workflow_id\"\n                      }\n                    }\n                  },\n                  \"ScheduleAction\": {\n                    \"oneofs\": {\n                      \"action\": {\n                        \"oneof\": [\n                          \"startWorkflow\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"startWorkflow\": {\n                        \"type\": \"temporal.api.workflow.v1.NewWorkflowExecutionInfo\",\n                        \"id\": 1,\n                        \"protoName\": \"start_workflow\"\n                      }\n                    }\n                  },\n                  \"ScheduleActionResult\": {\n                    \"fields\": {\n                      \"scheduleTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 1,\n                        \"protoName\": \"schedule_time\"\n                      },\n                      \"actualTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 2,\n                        \"protoName\": \"actual_time\"\n                      },\n                      \"startWorkflowResult\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 11,\n                        \"protoName\": \"start_workflow_result\"\n                      },\n                      \"startWorkflowStatus\": {\n                        \"type\": \"temporal.api.enums.v1.WorkflowExecutionStatus\",\n                        \"id\": 12,\n                        \"protoName\": \"start_workflow_status\"\n                      }\n                    }\n                  },\n                  \"ScheduleState\": {\n                    \"fields\": {\n                      \"notes\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"paused\": {\n                        \"type\": \"bool\",\n                        \"id\": 2\n                      },\n                      \"limitedActions\": {\n                        \"type\": \"bool\",\n                        \"id\": 3,\n                        \"protoName\": \"limited_actions\"\n                      },\n                      \"remainingActions\": {\n                        \"type\": \"int64\",\n                        \"id\": 4,\n                        \"protoName\": \"remaining_actions\"\n                      }\n                    }\n                  },\n                  \"TriggerImmediatelyRequest\": {\n                    \"fields\": {\n                      \"overlapPolicy\": {\n                        \"type\": \"temporal.api.enums.v1.ScheduleOverlapPolicy\",\n                        \"id\": 1,\n                        \"protoName\": \"overlap_policy\"\n                      },\n                      \"scheduledTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 2,\n                        \"protoName\": \"scheduled_time\"\n                      }\n                    }\n                  },\n                  \"BackfillRequest\": {\n                    \"fields\": {\n                      \"startTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 1,\n                        \"protoName\": \"start_time\"\n                      },\n                      \"endTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 2,\n                        \"protoName\": \"end_time\"\n                      },\n                      \"overlapPolicy\": {\n                        \"type\": \"temporal.api.enums.v1.ScheduleOverlapPolicy\",\n                        \"id\": 3,\n                        \"protoName\": \"overlap_policy\"\n                      }\n                    }\n                  },\n                  \"SchedulePatch\": {\n                    \"fields\": {\n                      \"triggerImmediately\": {\n                        \"type\": \"TriggerImmediatelyRequest\",\n                        \"id\": 1,\n                        \"protoName\": \"trigger_immediately\"\n                      },\n                      \"backfillRequest\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"BackfillRequest\",\n                        \"id\": 2,\n                        \"protoName\": \"backfill_request\"\n                      },\n                      \"pause\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"unpause\": {\n                        \"type\": \"string\",\n                        \"id\": 4\n                      }\n                    }\n                  },\n                  \"ScheduleInfo\": {\n                    \"fields\": {\n                      \"actionCount\": {\n                        \"type\": \"int64\",\n                        \"id\": 1,\n                        \"protoName\": \"action_count\"\n                      },\n                      \"missedCatchupWindow\": {\n                        \"type\": \"int64\",\n                        \"id\": 2,\n                        \"protoName\": \"missed_catchup_window\"\n                      },\n                      \"overlapSkipped\": {\n                        \"type\": \"int64\",\n                        \"id\": 3,\n                        \"protoName\": \"overlap_skipped\"\n                      },\n                      \"bufferDropped\": {\n                        \"type\": \"int64\",\n                        \"id\": 10,\n                        \"protoName\": \"buffer_dropped\"\n                      },\n                      \"bufferSize\": {\n                        \"type\": \"int64\",\n                        \"id\": 11,\n                        \"protoName\": \"buffer_size\"\n                      },\n                      \"runningWorkflows\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 9,\n                        \"protoName\": \"running_workflows\"\n                      },\n                      \"recentActions\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"ScheduleActionResult\",\n                        \"id\": 4,\n                        \"protoName\": \"recent_actions\"\n                      },\n                      \"futureActionTimes\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 5,\n                        \"protoName\": \"future_action_times\"\n                      },\n                      \"createTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 6,\n                        \"protoName\": \"create_time\"\n                      },\n                      \"updateTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 7,\n                        \"protoName\": \"update_time\"\n                      },\n                      \"invalidScheduleError\": {\n                        \"type\": \"string\",\n                        \"id\": 8,\n                        \"protoName\": \"invalid_schedule_error\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"stateSizeBytes\": {\n                        \"type\": \"int64\",\n                        \"id\": 12,\n                        \"protoName\": \"state_size_bytes\"\n                      }\n                    }\n                  },\n                  \"Schedule\": {\n                    \"fields\": {\n                      \"spec\": {\n                        \"type\": \"ScheduleSpec\",\n                        \"id\": 1\n                      },\n                      \"action\": {\n                        \"type\": \"ScheduleAction\",\n                        \"id\": 2\n                      },\n                      \"policies\": {\n                        \"type\": \"SchedulePolicies\",\n                        \"id\": 3\n                      },\n                      \"state\": {\n                        \"type\": \"ScheduleState\",\n                        \"id\": 4\n                      }\n                    }\n                  },\n                  \"ScheduleListInfo\": {\n                    \"fields\": {\n                      \"spec\": {\n                        \"type\": \"ScheduleSpec\",\n                        \"id\": 1\n                      },\n                      \"workflowType\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowType\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_type\"\n                      },\n                      \"notes\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"paused\": {\n                        \"type\": \"bool\",\n                        \"id\": 4\n                      },\n                      \"recentActions\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"ScheduleActionResult\",\n                        \"id\": 5,\n                        \"protoName\": \"recent_actions\"\n                      },\n                      \"futureActionTimes\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 6,\n                        \"protoName\": \"future_action_times\"\n                      },\n                      \"stateSizeBytes\": {\n                        \"type\": \"int64\",\n                        \"id\": 7,\n                        \"protoName\": \"state_size_bytes\"\n                      }\n                    }\n                  },\n                  \"ScheduleListEntry\": {\n                    \"fields\": {\n                      \"scheduleId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"schedule_id\"\n                      },\n                      \"memo\": {\n                        \"type\": \"temporal.api.common.v1.Memo\",\n                        \"id\": 2\n                      },\n                      \"searchAttributes\": {\n                        \"type\": \"temporal.api.common.v1.SearchAttributes\",\n                        \"id\": 3,\n                        \"protoName\": \"search_attributes\"\n                      },\n                      \"info\": {\n                        \"type\": \"ScheduleListInfo\",\n                        \"id\": 4\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          \"version\": {\n            \"nested\": {\n              \"v1\": {\n                \"options\": {\n                  \"go_package\": \"go.temporal.io/api/version/v1;version\",\n                  \"java_package\": \"io.temporal.api.version.v1\",\n                  \"java_multiple_files\": true,\n                  \"java_outer_classname\": \"MessageProto\",\n                  \"ruby_package\": \"Temporalio::Api::Version::V1\",\n                  \"csharp_namespace\": \"Temporalio.Api.Version.V1\"\n                },\n                \"nested\": {\n                  \"ReleaseInfo\": {\n                    \"fields\": {\n                      \"version\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"releaseTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 2,\n                        \"protoName\": \"release_time\"\n                      },\n                      \"notes\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      }\n                    }\n                  },\n                  \"Alert\": {\n                    \"fields\": {\n                      \"message\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"severity\": {\n                        \"type\": \"temporal.api.enums.v1.Severity\",\n                        \"id\": 2\n                      }\n                    }\n                  },\n                  \"VersionInfo\": {\n                    \"fields\": {\n                      \"current\": {\n                        \"type\": \"ReleaseInfo\",\n                        \"id\": 1\n                      },\n                      \"recommended\": {\n                        \"type\": \"ReleaseInfo\",\n                        \"id\": 2\n                      },\n                      \"instructions\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"alerts\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"Alert\",\n                        \"id\": 4\n                      },\n                      \"lastUpdateTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 5,\n                        \"protoName\": \"last_update_time\"\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          \"batch\": {\n            \"nested\": {\n              \"v1\": {\n                \"options\": {\n                  \"go_package\": \"go.temporal.io/api/batch/v1;batch\",\n                  \"java_package\": \"io.temporal.api.batch.v1\",\n                  \"java_multiple_files\": true,\n                  \"java_outer_classname\": \"MessageProto\",\n                  \"ruby_package\": \"Temporalio::Api::Batch::V1\",\n                  \"csharp_namespace\": \"Temporalio.Api.Batch.V1\"\n                },\n                \"nested\": {\n                  \"BatchOperationInfo\": {\n                    \"fields\": {\n                      \"jobId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"job_id\"\n                      },\n                      \"state\": {\n                        \"type\": \"temporal.api.enums.v1.BatchOperationState\",\n                        \"id\": 2\n                      },\n                      \"startTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 3,\n                        \"protoName\": \"start_time\"\n                      },\n                      \"closeTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 4,\n                        \"protoName\": \"close_time\"\n                      },\n                      \"operationType\": {\n                        \"type\": \"temporal.api.enums.v1.BatchOperationType\",\n                        \"id\": 5,\n                        \"protoName\": \"operation_type\"\n                      }\n                    }\n                  },\n                  \"BatchOperationTermination\": {\n                    \"fields\": {\n                      \"details\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 1\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      }\n                    }\n                  },\n                  \"BatchOperationTerminateActivities\": {\n                    \"fields\": {\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"reason\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      }\n                    }\n                  },\n                  \"BatchOperationSignal\": {\n                    \"fields\": {\n                      \"signal\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"input\": {\n                        \"type\": \"temporal.api.common.v1.Payloads\",\n                        \"id\": 2\n                      },\n                      \"header\": {\n                        \"type\": \"temporal.api.common.v1.Header\",\n                        \"id\": 3\n                      },\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 4\n                      }\n                    }\n                  },\n                  \"BatchOperationCancellation\": {\n                    \"fields\": {\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      }\n                    }\n                  },\n                  \"BatchOperationCancelActivities\": {\n                    \"fields\": {\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"reason\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      }\n                    }\n                  },\n                  \"BatchOperationDeletion\": {\n                    \"fields\": {\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      }\n                    }\n                  },\n                  \"BatchOperationDeleteActivities\": {\n                    \"fields\": {}\n                  },\n                  \"BatchOperationReset\": {\n                    \"fields\": {\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"options\": {\n                        \"type\": \"temporal.api.common.v1.ResetOptions\",\n                        \"id\": 4\n                      },\n                      \"resetType\": {\n                        \"type\": \"temporal.api.enums.v1.ResetType\",\n                        \"id\": 1,\n                        \"protoName\": \"reset_type\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"resetReapplyType\": {\n                        \"type\": \"temporal.api.enums.v1.ResetReapplyType\",\n                        \"id\": 2,\n                        \"protoName\": \"reset_reapply_type\",\n                        \"options\": {\n                          \"deprecated\": true\n                        }\n                      },\n                      \"postResetOperations\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.workflow.v1.PostResetOperation\",\n                        \"id\": 5,\n                        \"protoName\": \"post_reset_operations\"\n                      }\n                    }\n                  },\n                  \"BatchOperationUpdateWorkflowExecutionOptions\": {\n                    \"fields\": {\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"workflowExecutionOptions\": {\n                        \"type\": \"temporal.api.workflow.v1.WorkflowExecutionOptions\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_execution_options\"\n                      },\n                      \"updateMask\": {\n                        \"type\": \"google.protobuf.FieldMask\",\n                        \"id\": 3,\n                        \"protoName\": \"update_mask\"\n                      }\n                    }\n                  },\n                  \"BatchOperationUnpauseActivities\": {\n                    \"oneofs\": {\n                      \"activity\": {\n                        \"oneof\": [\n                          \"type\",\n                          \"matchAll\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"type\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"matchAll\": {\n                        \"type\": \"bool\",\n                        \"id\": 3,\n                        \"protoName\": \"match_all\"\n                      },\n                      \"resetAttempts\": {\n                        \"type\": \"bool\",\n                        \"id\": 4,\n                        \"protoName\": \"reset_attempts\"\n                      },\n                      \"resetHeartbeat\": {\n                        \"type\": \"bool\",\n                        \"id\": 5,\n                        \"protoName\": \"reset_heartbeat\"\n                      },\n                      \"jitter\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 6\n                      }\n                    }\n                  },\n                  \"BatchOperationTriggerWorkflowRule\": {\n                    \"oneofs\": {\n                      \"rule\": {\n                        \"oneof\": [\n                          \"id\",\n                          \"spec\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"id\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"spec\": {\n                        \"type\": \"temporal.api.rules.v1.WorkflowRuleSpec\",\n                        \"id\": 3\n                      }\n                    }\n                  },\n                  \"BatchOperationResetActivities\": {\n                    \"oneofs\": {\n                      \"activity\": {\n                        \"oneof\": [\n                          \"type\",\n                          \"matchAll\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"type\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"matchAll\": {\n                        \"type\": \"bool\",\n                        \"id\": 3,\n                        \"protoName\": \"match_all\"\n                      },\n                      \"resetAttempts\": {\n                        \"type\": \"bool\",\n                        \"id\": 4,\n                        \"protoName\": \"reset_attempts\"\n                      },\n                      \"resetHeartbeat\": {\n                        \"type\": \"bool\",\n                        \"id\": 5,\n                        \"protoName\": \"reset_heartbeat\"\n                      },\n                      \"keepPaused\": {\n                        \"type\": \"bool\",\n                        \"id\": 6,\n                        \"protoName\": \"keep_paused\"\n                      },\n                      \"jitter\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 7\n                      },\n                      \"restoreOriginalOptions\": {\n                        \"type\": \"bool\",\n                        \"id\": 8,\n                        \"protoName\": \"restore_original_options\"\n                      }\n                    }\n                  },\n                  \"BatchOperationUpdateActivityOptions\": {\n                    \"oneofs\": {\n                      \"activity\": {\n                        \"oneof\": [\n                          \"type\",\n                          \"matchAll\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"identity\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"type\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"matchAll\": {\n                        \"type\": \"bool\",\n                        \"id\": 3,\n                        \"protoName\": \"match_all\"\n                      },\n                      \"activityOptions\": {\n                        \"type\": \"temporal.api.activity.v1.ActivityOptions\",\n                        \"id\": 4,\n                        \"protoName\": \"activity_options\"\n                      },\n                      \"updateMask\": {\n                        \"type\": \"google.protobuf.FieldMask\",\n                        \"id\": 5,\n                        \"protoName\": \"update_mask\"\n                      },\n                      \"restoreOriginal\": {\n                        \"type\": \"bool\",\n                        \"id\": 6,\n                        \"protoName\": \"restore_original\"\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          \"worker\": {\n            \"nested\": {\n              \"v1\": {\n                \"options\": {\n                  \"go_package\": \"go.temporal.io/api/worker/v1;worker\",\n                  \"java_package\": \"io.temporal.api.worker.v1\",\n                  \"java_multiple_files\": true,\n                  \"java_outer_classname\": \"MessageProto\",\n                  \"ruby_package\": \"Temporalio::Api::Worker::V1\",\n                  \"csharp_namespace\": \"Temporalio.Api.Worker.V1\"\n                },\n                \"nested\": {\n                  \"WorkerPollerInfo\": {\n                    \"fields\": {\n                      \"currentPollers\": {\n                        \"type\": \"int32\",\n                        \"id\": 1,\n                        \"protoName\": \"current_pollers\"\n                      },\n                      \"lastSuccessfulPollTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 2,\n                        \"protoName\": \"last_successful_poll_time\"\n                      },\n                      \"isAutoscaling\": {\n                        \"type\": \"bool\",\n                        \"id\": 3,\n                        \"protoName\": \"is_autoscaling\"\n                      }\n                    }\n                  },\n                  \"WorkerSlotsInfo\": {\n                    \"fields\": {\n                      \"currentAvailableSlots\": {\n                        \"type\": \"int32\",\n                        \"id\": 1,\n                        \"protoName\": \"current_available_slots\"\n                      },\n                      \"currentUsedSlots\": {\n                        \"type\": \"int32\",\n                        \"id\": 2,\n                        \"protoName\": \"current_used_slots\"\n                      },\n                      \"slotSupplierKind\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"slot_supplier_kind\"\n                      },\n                      \"totalProcessedTasks\": {\n                        \"type\": \"int32\",\n                        \"id\": 4,\n                        \"protoName\": \"total_processed_tasks\"\n                      },\n                      \"totalFailedTasks\": {\n                        \"type\": \"int32\",\n                        \"id\": 5,\n                        \"protoName\": \"total_failed_tasks\"\n                      },\n                      \"lastIntervalProcessedTasks\": {\n                        \"type\": \"int32\",\n                        \"id\": 6,\n                        \"protoName\": \"last_interval_processed_tasks\"\n                      },\n                      \"lastIntervalFailureTasks\": {\n                        \"type\": \"int32\",\n                        \"id\": 7,\n                        \"protoName\": \"last_interval_failure_tasks\"\n                      }\n                    }\n                  },\n                  \"WorkerHostInfo\": {\n                    \"fields\": {\n                      \"hostName\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"host_name\"\n                      },\n                      \"workerGroupingKey\": {\n                        \"type\": \"string\",\n                        \"id\": 5,\n                        \"protoName\": \"worker_grouping_key\"\n                      },\n                      \"processId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"process_id\"\n                      },\n                      \"currentHostCpuUsage\": {\n                        \"type\": \"float\",\n                        \"id\": 3,\n                        \"protoName\": \"current_host_cpu_usage\"\n                      },\n                      \"currentHostMemUsage\": {\n                        \"type\": \"float\",\n                        \"id\": 4,\n                        \"protoName\": \"current_host_mem_usage\"\n                      }\n                    }\n                  },\n                  \"WorkerHeartbeat\": {\n                    \"fields\": {\n                      \"workerInstanceKey\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"worker_instance_key\"\n                      },\n                      \"workerIdentity\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"worker_identity\"\n                      },\n                      \"hostInfo\": {\n                        \"type\": \"WorkerHostInfo\",\n                        \"id\": 3,\n                        \"protoName\": \"host_info\"\n                      },\n                      \"taskQueue\": {\n                        \"type\": \"string\",\n                        \"id\": 4,\n                        \"protoName\": \"task_queue\"\n                      },\n                      \"deploymentVersion\": {\n                        \"type\": \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        \"id\": 5,\n                        \"protoName\": \"deployment_version\"\n                      },\n                      \"sdkName\": {\n                        \"type\": \"string\",\n                        \"id\": 6,\n                        \"protoName\": \"sdk_name\"\n                      },\n                      \"sdkVersion\": {\n                        \"type\": \"string\",\n                        \"id\": 7,\n                        \"protoName\": \"sdk_version\"\n                      },\n                      \"status\": {\n                        \"type\": \"temporal.api.enums.v1.WorkerStatus\",\n                        \"id\": 8\n                      },\n                      \"startTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 9,\n                        \"protoName\": \"start_time\"\n                      },\n                      \"heartbeatTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 10,\n                        \"protoName\": \"heartbeat_time\"\n                      },\n                      \"elapsedSinceLastHeartbeat\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 11,\n                        \"protoName\": \"elapsed_since_last_heartbeat\"\n                      },\n                      \"workflowTaskSlotsInfo\": {\n                        \"type\": \"WorkerSlotsInfo\",\n                        \"id\": 12,\n                        \"protoName\": \"workflow_task_slots_info\"\n                      },\n                      \"activityTaskSlotsInfo\": {\n                        \"type\": \"WorkerSlotsInfo\",\n                        \"id\": 13,\n                        \"protoName\": \"activity_task_slots_info\"\n                      },\n                      \"nexusTaskSlotsInfo\": {\n                        \"type\": \"WorkerSlotsInfo\",\n                        \"id\": 14,\n                        \"protoName\": \"nexus_task_slots_info\"\n                      },\n                      \"localActivitySlotsInfo\": {\n                        \"type\": \"WorkerSlotsInfo\",\n                        \"id\": 15,\n                        \"protoName\": \"local_activity_slots_info\"\n                      },\n                      \"workflowPollerInfo\": {\n                        \"type\": \"WorkerPollerInfo\",\n                        \"id\": 16,\n                        \"protoName\": \"workflow_poller_info\"\n                      },\n                      \"workflowStickyPollerInfo\": {\n                        \"type\": \"WorkerPollerInfo\",\n                        \"id\": 17,\n                        \"protoName\": \"workflow_sticky_poller_info\"\n                      },\n                      \"activityPollerInfo\": {\n                        \"type\": \"WorkerPollerInfo\",\n                        \"id\": 18,\n                        \"protoName\": \"activity_poller_info\"\n                      },\n                      \"nexusPollerInfo\": {\n                        \"type\": \"WorkerPollerInfo\",\n                        \"id\": 19,\n                        \"protoName\": \"nexus_poller_info\"\n                      },\n                      \"totalStickyCacheHit\": {\n                        \"type\": \"int32\",\n                        \"id\": 20,\n                        \"protoName\": \"total_sticky_cache_hit\"\n                      },\n                      \"totalStickyCacheMiss\": {\n                        \"type\": \"int32\",\n                        \"id\": 21,\n                        \"protoName\": \"total_sticky_cache_miss\"\n                      },\n                      \"currentStickyCacheSize\": {\n                        \"type\": \"int32\",\n                        \"id\": 22,\n                        \"protoName\": \"current_sticky_cache_size\"\n                      },\n                      \"plugins\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"PluginInfo\",\n                        \"id\": 23\n                      },\n                      \"drivers\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"StorageDriverInfo\",\n                        \"id\": 24\n                      },\n                      \"environment\": {\n                        \"type\": \"EnvironmentInfo\",\n                        \"id\": 25\n                      }\n                    }\n                  },\n                  \"WorkerInfo\": {\n                    \"fields\": {\n                      \"workerHeartbeat\": {\n                        \"type\": \"WorkerHeartbeat\",\n                        \"id\": 1,\n                        \"protoName\": \"worker_heartbeat\"\n                      }\n                    }\n                  },\n                  \"WorkerListInfo\": {\n                    \"fields\": {\n                      \"workerInstanceKey\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"worker_instance_key\"\n                      },\n                      \"workerIdentity\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"worker_identity\"\n                      },\n                      \"taskQueue\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"task_queue\"\n                      },\n                      \"deploymentVersion\": {\n                        \"type\": \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        \"id\": 4,\n                        \"protoName\": \"deployment_version\"\n                      },\n                      \"sdkName\": {\n                        \"type\": \"string\",\n                        \"id\": 5,\n                        \"protoName\": \"sdk_name\"\n                      },\n                      \"sdkVersion\": {\n                        \"type\": \"string\",\n                        \"id\": 6,\n                        \"protoName\": \"sdk_version\"\n                      },\n                      \"status\": {\n                        \"type\": \"temporal.api.enums.v1.WorkerStatus\",\n                        \"id\": 7\n                      },\n                      \"startTime\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 8,\n                        \"protoName\": \"start_time\"\n                      },\n                      \"hostName\": {\n                        \"type\": \"string\",\n                        \"id\": 9,\n                        \"protoName\": \"host_name\"\n                      },\n                      \"workerGroupingKey\": {\n                        \"type\": \"string\",\n                        \"id\": 10,\n                        \"protoName\": \"worker_grouping_key\"\n                      },\n                      \"processId\": {\n                        \"type\": \"string\",\n                        \"id\": 11,\n                        \"protoName\": \"process_id\"\n                      },\n                      \"plugins\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"PluginInfo\",\n                        \"id\": 12\n                      },\n                      \"drivers\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"StorageDriverInfo\",\n                        \"id\": 13\n                      }\n                    }\n                  },\n                  \"PluginInfo\": {\n                    \"fields\": {\n                      \"name\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"version\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      }\n                    }\n                  },\n                  \"StorageDriverInfo\": {\n                    \"fields\": {\n                      \"type\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      }\n                    }\n                  },\n                  \"EnvironmentInfo\": {\n                    \"fields\": {\n                      \"runtimes\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"Runtime\",\n                        \"id\": 1\n                      },\n                      \"hostingEnvironments\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"HostingEnvironment\",\n                        \"id\": 2,\n                        \"protoName\": \"hosting_environments\"\n                      },\n                      \"platform\": {\n                        \"type\": \"Platform\",\n                        \"id\": 3\n                      }\n                    },\n                    \"nested\": {\n                      \"Runtime\": {\n                        \"fields\": {\n                          \"type\": {\n                            \"type\": \"RuntimeType\",\n                            \"id\": 1\n                          },\n                          \"version\": {\n                            \"type\": \"string\",\n                            \"id\": 2\n                          }\n                        },\n                        \"nested\": {\n                          \"RuntimeType\": {\n                            \"values\": {\n                              \"RUNTIME_TYPE_UNSPECIFIED\": 0,\n                              \"RUNTIME_TYPE_JVM\": 1,\n                              \"RUNTIME_TYPE_CPYTHON\": 2,\n                              \"RUNTIME_TYPE_NODE\": 3,\n                              \"RUNTIME_TYPE_BUN\": 4,\n                              \"RUNTIME_TYPE_CRUBY\": 5,\n                              \"RUNTIME_TYPE_GO\": 6,\n                              \"RUNTIME_TYPE_DOTNET_FRAMEWORK\": 7,\n                              \"RUNTIME_TYPE_DOTNET_CORE\": 8,\n                              \"RUNTIME_TYPE_NATIVE\": 9,\n                              \"RUNTIME_TYPE_ROADRUNNER\": 10\n                            }\n                          }\n                        }\n                      },\n                      \"HostingEnvironment\": {\n                        \"fields\": {\n                          \"type\": {\n                            \"type\": \"HostingEnvironmentType\",\n                            \"id\": 1\n                          },\n                          \"version\": {\n                            \"type\": \"string\",\n                            \"id\": 2\n                          }\n                        },\n                        \"nested\": {\n                          \"HostingEnvironmentType\": {\n                            \"values\": {\n                              \"HOSTING_ENVIRONMENT_TYPE_UNSPECIFIED\": 0,\n                              \"HOSTING_ENVIRONMENT_TYPE_DOCKER\": 1,\n                              \"HOSTING_ENVIRONMENT_TYPE_K8S\": 2,\n                              \"HOSTING_ENVIRONMENT_TYPE_AWS_LAMBDA\": 3,\n                              \"HOSTING_ENVIRONMENT_TYPE_AWS_ECS\": 4,\n                              \"HOSTING_ENVIRONMENT_TYPE_GOOGLE_CLOUD_RUN\": 6,\n                              \"HOSTING_ENVIRONMENT_TYPE_GOOGLE_APP_ENGINE\": 7,\n                              \"HOSTING_ENVIRONMENT_TYPE_AZURE_APP_SERVICE\": 8,\n                              \"HOSTING_ENVIRONMENT_TYPE_AZURE_FUNCTIONS\": 9,\n                              \"HOSTING_ENVIRONMENT_TYPE_AZURE_CONTAINER_APPS\": 10\n                            }\n                          }\n                        }\n                      },\n                      \"Architecture\": {\n                        \"values\": {\n                          \"ARCHITECTURE_UNSPECIFIED\": 0,\n                          \"ARCHITECTURE_AMD64\": 1,\n                          \"ARCHITECTURE_ARM64\": 2\n                        }\n                      },\n                      \"Platform\": {\n                        \"oneofs\": {\n                          \"variant\": {\n                            \"oneof\": [\n                              \"linux\",\n                              \"macos\",\n                              \"windows\"\n                            ]\n                          }\n                        },\n                        \"fields\": {\n                          \"linux\": {\n                            \"type\": \"LinuxPlatform\",\n                            \"id\": 1\n                          },\n                          \"macos\": {\n                            \"type\": \"MacOSPlatform\",\n                            \"id\": 2\n                          },\n                          \"windows\": {\n                            \"type\": \"WindowsPlatform\",\n                            \"id\": 3\n                          }\n                        }\n                      },\n                      \"LinuxPlatform\": {\n                        \"fields\": {\n                          \"version\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"architecture\": {\n                            \"type\": \"Architecture\",\n                            \"id\": 2\n                          },\n                          \"libc\": {\n                            \"type\": \"Libc\",\n                            \"id\": 3\n                          }\n                        },\n                        \"nested\": {\n                          \"Libc\": {\n                            \"values\": {\n                              \"LIBC_UNSPECIFIED\": 0,\n                              \"LIBC_GLIBC\": 1,\n                              \"LIBC_MUSL\": 2\n                            }\n                          }\n                        }\n                      },\n                      \"MacOSPlatform\": {\n                        \"fields\": {\n                          \"version\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"architecture\": {\n                            \"type\": \"Architecture\",\n                            \"id\": 2\n                          }\n                        }\n                      },\n                      \"WindowsPlatform\": {\n                        \"fields\": {\n                          \"version\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"architecture\": {\n                            \"type\": \"Architecture\",\n                            \"id\": 2\n                          },\n                          \"crt\": {\n                            \"type\": \"Crt\",\n                            \"id\": 3\n                          }\n                        },\n                        \"nested\": {\n                          \"Crt\": {\n                            \"values\": {\n                              \"CRT_UNSPECIFIED\": 0,\n                              \"CRT_UCRT\": 1,\n                              \"CRT_MSVCRT\": 2,\n                              \"CRT_MINGW\": 3,\n                              \"CRT_CYGWIN\": 4\n                            }\n                          }\n                        }\n                      }\n                    }\n                  },\n                  \"WorkerCommand\": {\n                    \"oneofs\": {\n                      \"type\": {\n                        \"oneof\": [\n                          \"cancelActivity\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"cancelActivity\": {\n                        \"type\": \"CancelActivityCommand\",\n                        \"id\": 1,\n                        \"protoName\": \"cancel_activity\"\n                      }\n                    }\n                  },\n                  \"CancelActivityCommand\": {\n                    \"fields\": {\n                      \"taskToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 1,\n                        \"protoName\": \"task_token\"\n                      }\n                    }\n                  },\n                  \"WorkerCommandResult\": {\n                    \"oneofs\": {\n                      \"type\": {\n                        \"oneof\": [\n                          \"cancelActivity\"\n                        ]\n                      }\n                    },\n                    \"fields\": {\n                      \"cancelActivity\": {\n                        \"type\": \"CancelActivityResult\",\n                        \"id\": 1,\n                        \"protoName\": \"cancel_activity\"\n                      }\n                    }\n                  },\n                  \"CancelActivityResult\": {\n                    \"fields\": {}\n                  }\n                }\n              }\n            }\n          },\n          \"protometa\": {\n            \"nested\": {\n              \"v1\": {\n                \"options\": {\n                  \"go_package\": \"go.temporal.io/api/protometa/v1;protometa\",\n                  \"java_package\": \"io.temporal.api.protometa.v1\",\n                  \"java_multiple_files\": true,\n                  \"java_outer_classname\": \"AnnotationsProto\",\n                  \"ruby_package\": \"Temporalio::Api::Protometa::V1\",\n                  \"csharp_namespace\": \"Temporalio.Api.Protometa.V1\"\n                },\n                \"nested\": {\n                  \"RequestHeaderAnnotation\": {\n                    \"fields\": {\n                      \"header\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"value\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      }\n                    }\n                  },\n                  \"requestHeader\": {\n                    \"rule\": \"repeated\",\n                    \"type\": \"RequestHeaderAnnotation\",\n                    \"id\": 7234001,\n                    \"extend\": \"google.protobuf.MethodOptions\",\n                    \"protoName\": \"request_header\"\n                  }\n                }\n              }\n            }\n          },\n          \"operatorservice\": {\n            \"nested\": {\n              \"v1\": {\n                \"options\": {\n                  \"go_package\": \"go.temporal.io/api/operatorservice/v1;operatorservice\",\n                  \"java_package\": \"io.temporal.api.operatorservice.v1\",\n                  \"java_multiple_files\": true,\n                  \"java_outer_classname\": \"RequestResponseProto\",\n                  \"ruby_package\": \"Temporalio::Api::OperatorService::V1\",\n                  \"csharp_namespace\": \"Temporalio.Api.OperatorService.V1\"\n                },\n                \"nested\": {\n                  \"OperatorService\": {\n                    \"methods\": {\n                      \"AddSearchAttributes\": {\n                        \"requestType\": \"AddSearchAttributesRequest\",\n                        \"responseType\": \"AddSearchAttributesResponse\"\n                      },\n                      \"RemoveSearchAttributes\": {\n                        \"requestType\": \"RemoveSearchAttributesRequest\",\n                        \"responseType\": \"RemoveSearchAttributesResponse\"\n                      },\n                      \"ListSearchAttributes\": {\n                        \"requestType\": \"ListSearchAttributesRequest\",\n                        \"responseType\": \"ListSearchAttributesResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/cluster/namespaces/{namespace}/search-attributes\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/search-attributes\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/cluster/namespaces/{namespace}/search-attributes\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/namespaces/{namespace}/search-attributes\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"DeleteNamespace\": {\n                        \"requestType\": \"DeleteNamespaceRequest\",\n                        \"responseType\": \"DeleteNamespaceResponse\"\n                      },\n                      \"AddOrUpdateRemoteCluster\": {\n                        \"requestType\": \"AddOrUpdateRemoteClusterRequest\",\n                        \"responseType\": \"AddOrUpdateRemoteClusterResponse\"\n                      },\n                      \"RemoveRemoteCluster\": {\n                        \"requestType\": \"RemoveRemoteClusterRequest\",\n                        \"responseType\": \"RemoveRemoteClusterResponse\"\n                      },\n                      \"ListClusters\": {\n                        \"requestType\": \"ListClustersRequest\",\n                        \"responseType\": \"ListClustersResponse\"\n                      },\n                      \"GetNexusEndpoint\": {\n                        \"requestType\": \"GetNexusEndpointRequest\",\n                        \"responseType\": \"GetNexusEndpointResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/cluster/nexus/endpoints/{id}\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/nexus/endpoints/{id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/cluster/nexus/endpoints/{id}\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/nexus/endpoints/{id}\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"CreateNexusEndpoint\": {\n                        \"requestType\": \"CreateNexusEndpointRequest\",\n                        \"responseType\": \"CreateNexusEndpointResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/cluster/nexus/endpoints\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/nexus/endpoints\",\n                          \"(google.api.http).additional_bindings.body\": \"*\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/cluster/nexus/endpoints\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/nexus/endpoints\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"UpdateNexusEndpoint\": {\n                        \"requestType\": \"UpdateNexusEndpointRequest\",\n                        \"responseType\": \"UpdateNexusEndpointResponse\",\n                        \"options\": {\n                          \"(google.api.http).post\": \"/cluster/nexus/endpoints/{id}/update\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/nexus/endpoints/{id}/update\",\n                          \"(google.api.http).additional_bindings.body\": \"*\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"post\": \"/cluster/nexus/endpoints/{id}/update\",\n                              \"body\": \"*\",\n                              \"additional_bindings\": {\n                                \"post\": \"/api/v1/nexus/endpoints/{id}/update\",\n                                \"body\": \"*\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"DeleteNexusEndpoint\": {\n                        \"requestType\": \"DeleteNexusEndpointRequest\",\n                        \"responseType\": \"DeleteNexusEndpointResponse\",\n                        \"options\": {\n                          \"(google.api.http).delete\": \"/cluster/nexus/endpoints/{id}\",\n                          \"(google.api.http).additional_bindings.delete\": \"/api/v1/nexus/endpoints/{id}\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"delete\": \"/cluster/nexus/endpoints/{id}\",\n                              \"additional_bindings\": {\n                                \"delete\": \"/api/v1/nexus/endpoints/{id}\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"ListNexusEndpoints\": {\n                        \"requestType\": \"ListNexusEndpointsRequest\",\n                        \"responseType\": \"ListNexusEndpointsResponse\",\n                        \"options\": {\n                          \"(google.api.http).get\": \"/cluster/nexus/endpoints\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/nexus/endpoints\"\n                        },\n                        \"parsedOptions\": [\n                          {\n                            \"(google.api.http)\": {\n                              \"get\": \"/cluster/nexus/endpoints\",\n                              \"additional_bindings\": {\n                                \"get\": \"/api/v1/nexus/endpoints\"\n                              }\n                            }\n                          }\n                        ]\n                      }\n                    }\n                  },\n                  \"AddSearchAttributesRequest\": {\n                    \"fields\": {\n                      \"searchAttributes\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"temporal.api.enums.v1.IndexedValueType\",\n                        \"id\": 1,\n                        \"protoName\": \"search_attributes\"\n                      },\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      }\n                    }\n                  },\n                  \"AddSearchAttributesResponse\": {\n                    \"fields\": {}\n                  },\n                  \"RemoveSearchAttributesRequest\": {\n                    \"fields\": {\n                      \"searchAttributes\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"search_attributes\"\n                      },\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      }\n                    }\n                  },\n                  \"RemoveSearchAttributesResponse\": {\n                    \"fields\": {}\n                  },\n                  \"ListSearchAttributesRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      }\n                    }\n                  },\n                  \"ListSearchAttributesResponse\": {\n                    \"fields\": {\n                      \"customAttributes\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"temporal.api.enums.v1.IndexedValueType\",\n                        \"id\": 1,\n                        \"protoName\": \"custom_attributes\"\n                      },\n                      \"systemAttributes\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"temporal.api.enums.v1.IndexedValueType\",\n                        \"id\": 2,\n                        \"protoName\": \"system_attributes\"\n                      },\n                      \"storageSchema\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"storage_schema\"\n                      }\n                    }\n                  },\n                  \"DeleteNamespaceRequest\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"namespaceId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"namespace_id\"\n                      },\n                      \"namespaceDeleteDelay\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 3,\n                        \"protoName\": \"namespace_delete_delay\"\n                      }\n                    }\n                  },\n                  \"DeleteNamespaceResponse\": {\n                    \"fields\": {\n                      \"deletedNamespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"deleted_namespace\"\n                      }\n                    }\n                  },\n                  \"AddOrUpdateRemoteClusterRequest\": {\n                    \"fields\": {\n                      \"frontendAddress\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"frontend_address\"\n                      },\n                      \"enableRemoteClusterConnection\": {\n                        \"type\": \"bool\",\n                        \"id\": 2,\n                        \"protoName\": \"enable_remote_cluster_connection\"\n                      },\n                      \"frontendHttpAddress\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"frontend_http_address\"\n                      },\n                      \"enableReplication\": {\n                        \"type\": \"bool\",\n                        \"id\": 4,\n                        \"protoName\": \"enable_replication\"\n                      }\n                    }\n                  },\n                  \"AddOrUpdateRemoteClusterResponse\": {\n                    \"fields\": {}\n                  },\n                  \"RemoveRemoteClusterRequest\": {\n                    \"fields\": {\n                      \"clusterName\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"cluster_name\"\n                      }\n                    }\n                  },\n                  \"RemoveRemoteClusterResponse\": {\n                    \"fields\": {}\n                  },\n                  \"ListClustersRequest\": {\n                    \"fields\": {\n                      \"pageSize\": {\n                        \"type\": \"int32\",\n                        \"id\": 1,\n                        \"protoName\": \"page_size\"\n                      },\n                      \"nextPageToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 2,\n                        \"protoName\": \"next_page_token\"\n                      }\n                    }\n                  },\n                  \"ListClustersResponse\": {\n                    \"fields\": {\n                      \"clusters\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"ClusterMetadata\",\n                        \"id\": 1\n                      },\n                      \"nextPageToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 4,\n                        \"protoName\": \"next_page_token\"\n                      }\n                    }\n                  },\n                  \"ClusterMetadata\": {\n                    \"fields\": {\n                      \"clusterName\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"cluster_name\"\n                      },\n                      \"clusterId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"cluster_id\"\n                      },\n                      \"address\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"httpAddress\": {\n                        \"type\": \"string\",\n                        \"id\": 7,\n                        \"protoName\": \"http_address\"\n                      },\n                      \"initialFailoverVersion\": {\n                        \"type\": \"int64\",\n                        \"id\": 4,\n                        \"protoName\": \"initial_failover_version\"\n                      },\n                      \"historyShardCount\": {\n                        \"type\": \"int32\",\n                        \"id\": 5,\n                        \"protoName\": \"history_shard_count\"\n                      },\n                      \"isConnectionEnabled\": {\n                        \"type\": \"bool\",\n                        \"id\": 6,\n                        \"protoName\": \"is_connection_enabled\"\n                      },\n                      \"isReplicationEnabled\": {\n                        \"type\": \"bool\",\n                        \"id\": 8,\n                        \"protoName\": \"is_replication_enabled\"\n                      }\n                    }\n                  },\n                  \"GetNexusEndpointRequest\": {\n                    \"fields\": {\n                      \"id\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      }\n                    }\n                  },\n                  \"GetNexusEndpointResponse\": {\n                    \"fields\": {\n                      \"endpoint\": {\n                        \"type\": \"temporal.api.nexus.v1.Endpoint\",\n                        \"id\": 1\n                      }\n                    }\n                  },\n                  \"CreateNexusEndpointRequest\": {\n                    \"fields\": {\n                      \"spec\": {\n                        \"type\": \"temporal.api.nexus.v1.EndpointSpec\",\n                        \"id\": 1\n                      }\n                    }\n                  },\n                  \"CreateNexusEndpointResponse\": {\n                    \"fields\": {\n                      \"endpoint\": {\n                        \"type\": \"temporal.api.nexus.v1.Endpoint\",\n                        \"id\": 1\n                      }\n                    }\n                  },\n                  \"UpdateNexusEndpointRequest\": {\n                    \"fields\": {\n                      \"id\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"version\": {\n                        \"type\": \"int64\",\n                        \"id\": 2\n                      },\n                      \"spec\": {\n                        \"type\": \"temporal.api.nexus.v1.EndpointSpec\",\n                        \"id\": 3\n                      }\n                    }\n                  },\n                  \"UpdateNexusEndpointResponse\": {\n                    \"fields\": {\n                      \"endpoint\": {\n                        \"type\": \"temporal.api.nexus.v1.Endpoint\",\n                        \"id\": 1\n                      }\n                    }\n                  },\n                  \"DeleteNexusEndpointRequest\": {\n                    \"fields\": {\n                      \"id\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"version\": {\n                        \"type\": \"int64\",\n                        \"id\": 2\n                      }\n                    }\n                  },\n                  \"DeleteNexusEndpointResponse\": {\n                    \"fields\": {}\n                  },\n                  \"ListNexusEndpointsRequest\": {\n                    \"fields\": {\n                      \"pageSize\": {\n                        \"type\": \"int32\",\n                        \"id\": 1,\n                        \"protoName\": \"page_size\"\n                      },\n                      \"nextPageToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 2,\n                        \"protoName\": \"next_page_token\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      }\n                    }\n                  },\n                  \"ListNexusEndpointsResponse\": {\n                    \"fields\": {\n                      \"nextPageToken\": {\n                        \"type\": \"bytes\",\n                        \"id\": 1,\n                        \"protoName\": \"next_page_token\"\n                      },\n                      \"endpoints\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.nexus.v1.Endpoint\",\n                        \"id\": 2\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          \"cloud\": {\n            \"nested\": {\n              \"cloudservice\": {\n                \"nested\": {\n                  \"v1\": {\n                    \"options\": {\n                      \"go_package\": \"go.temporal.io/api/cloud/cloudservice/v1;cloudservice\",\n                      \"java_package\": \"io.temporal.api.cloud.cloudservice.v1\",\n                      \"java_multiple_files\": true,\n                      \"java_outer_classname\": \"RequestResponseProto\",\n                      \"ruby_package\": \"Temporalio::Api::Cloud::CloudService::V1\",\n                      \"csharp_namespace\": \"Temporalio.Api.Cloud.CloudService.V1\",\n                      \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger).info.title\": \"Temporal Cloud Ops API\",\n                      \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger).info.description\": \"Programmatic access to manage Temporal Cloud control plane resources including namespaces, users, service accounts, and more.\\n\\n## Authentication\\n\\nAll API requests require authentication using an API Key. Include your API key in the `Authorization` header using the Bearer scheme:\\n\\n```\\nAuthorization: Bearer YOUR_API_KEY\\n```\\n\\nAPI keys can be created and managed through the [API Keys endpoints](#tag/API-Keys) or via the Temporal Cloud UI. For more information, see [API Keys Documentation](https://docs.temporal.io/cloud/api-keys).\\n\\n## Authorization\\n\\nThe API uses Role-Based Access Control (RBAC) to manage permissions. Each operation requires specific role-based permissions in addition to a valid API key.\\n\\n### Account-Level Roles\\n\\n- **Account Owner** - Full account administration access\\n- **Account Admin** - Manage namespaces, users, and service accounts  \\n- **Account Developer** - Create namespaces and manage Nexus endpoints\\n- **Finance Admin** - View usage and billing information\\n- **Account Read** - Read-only access to account resources\\n\\n### Namespace-Level Roles\\n\\n- **Namespace Admin** - Full access to namespace configuration and data\\n- **Namespace Write** - Execute workflows and modify workflow data\\n- **Namespace Read** - Read-only access to namespace data\\n\\nNamespace-level permissions are scoped to specific namespaces. A user or service account may have different permission levels across different namespaces.\\n\\nFor detailed information about roles and permissions, see [Access Control Documentation](https://docs.temporal.io/cloud/users).\",\n                      \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger).info.version\": \"1.0\",\n                      \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger).info.extensions.key\": \"x-logo\",\n                      \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger).info.extensions.value.struct_value.fields.key\": \"url\",\n                      \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger).info.extensions.value.struct_value.fields.value.string_value\": \"https://images.ctfassets.net/0uuz8ydxyd9p/4YGUnEoCaH9SyoUDhlJkau/e1600205d17eeee3033d926ef06664a9/Temporal_LogoLockup_Horizontal_dark_1.svg\",\n                      \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger).external_docs.url\": \"https://docs.temporal.io/cloud\",\n                      \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger).external_docs.description\": \"Temporal Cloud Documentation\",\n                      \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger).tags.name\": \"Operations\",\n                      \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger).tags.description\": \"Query async operation status\"\n                    },\n                    \"nested\": {\n                      \"CloudService\": {\n                        \"methods\": {\n                          \"GetCurrentIdentity\": {\n                            \"requestType\": \"GetCurrentIdentityRequest\",\n                            \"responseType\": \"GetCurrentIdentityResponse\",\n                            \"options\": {\n                              \"(google.api.http).get\": \"/cloud/current-identity\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Get current identity\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns information about the currently authenticated user or service account principal\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"get\": \"/cloud/current-identity\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Account\"\n                                  ],\n                                  \"summary\": \"Get current identity\",\n                                  \"description\": \"Returns information about the currently authenticated user or service account principal\"\n                                }\n                              }\n                            ]\n                          },\n                          \"GetUsers\": {\n                            \"requestType\": \"GetUsersRequest\",\n                            \"responseType\": \"GetUsersResponse\",\n                            \"options\": {\n                              \"(google.api.http).get\": \"/cloud/users\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Users\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"List all users\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns a list of all users in the account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).operation_id\": \"listUsers\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/users\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"User management documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"get\": \"/cloud/users\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Users\"\n                                  ],\n                                  \"summary\": \"List all users\",\n                                  \"description\": \"Returns a list of all users in the account\",\n                                  \"operation_id\": \"listUsers\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/users\",\n                                    \"description\": \"User management documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"GetUser\": {\n                            \"requestType\": \"GetUserRequest\",\n                            \"responseType\": \"GetUserResponse\",\n                            \"options\": {\n                              \"(google.api.http).get\": \"/cloud/users/{user_id}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Users\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Get user by ID\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Takes a user ID, returns user details\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/users\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"User management documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"get\": \"/cloud/users/{user_id}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Users\"\n                                  ],\n                                  \"summary\": \"Get user by ID\",\n                                  \"description\": \"Takes a user ID, returns user details\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/users\",\n                                    \"description\": \"User management documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"CreateUser\": {\n                            \"requestType\": \"CreateUserRequest\",\n                            \"responseType\": \"CreateUserResponse\",\n                            \"options\": {\n                              \"(google.api.http).post\": \"/cloud/users\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Users\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Create a user\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Creates a new user in the account\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"post\": \"/cloud/users\",\n                                  \"body\": \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Users\"\n                                  ],\n                                  \"summary\": \"Create a user\",\n                                  \"description\": \"Creates a new user in the account\"\n                                }\n                              }\n                            ]\n                          },\n                          \"UpdateUser\": {\n                            \"requestType\": \"UpdateUserRequest\",\n                            \"responseType\": \"UpdateUserResponse\",\n                            \"options\": {\n                              \"(google.api.http).post\": \"/cloud/users/{user_id}\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Users\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Update a user\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Updates an existing user's details\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"post\": \"/cloud/users/{user_id}\",\n                                  \"body\": \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Users\"\n                                  ],\n                                  \"summary\": \"Update a user\",\n                                  \"description\": \"Updates an existing user's details\"\n                                }\n                              }\n                            ]\n                          },\n                          \"DeleteUser\": {\n                            \"requestType\": \"DeleteUserRequest\",\n                            \"responseType\": \"DeleteUserResponse\",\n                            \"options\": {\n                              \"(google.api.http).delete\": \"/cloud/users/{user_id}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Users\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Delete a user\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Removes a user from the account\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"delete\": \"/cloud/users/{user_id}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Users\"\n                                  ],\n                                  \"summary\": \"Delete a user\",\n                                  \"description\": \"Removes a user from the account\"\n                                }\n                              }\n                            ]\n                          },\n                          \"SetUserNamespaceAccess\": {\n                            \"requestType\": \"SetUserNamespaceAccessRequest\",\n                            \"responseType\": \"SetUserNamespaceAccessResponse\",\n                            \"options\": {\n                              \"(google.api.http).post\": \"/cloud/namespaces/{namespace}/users/{user_id}/access\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Users\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Set user namespace access\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Configures a user's permissions for a specific namespace\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/users-namespace-level-permissions\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Namespace permissions documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"post\": \"/cloud/namespaces/{namespace}/users/{user_id}/access\",\n                                  \"body\": \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Users\"\n                                  ],\n                                  \"summary\": \"Set user namespace access\",\n                                  \"description\": \"Configures a user's permissions for a specific namespace\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/users-namespace-level-permissions\",\n                                    \"description\": \"Namespace permissions documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"GetAsyncOperation\": {\n                            \"requestType\": \"GetAsyncOperationRequest\",\n                            \"responseType\": \"GetAsyncOperationResponse\",\n                            \"options\": {\n                              \"(google.api.http).get\": \"/cloud/operations/{async_operation_id}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Operations\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Get async operation status\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns the current status and details of an asynchronous operation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"get\": \"/cloud/operations/{async_operation_id}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Operations\"\n                                  ],\n                                  \"summary\": \"Get async operation status\",\n                                  \"description\": \"Returns the current status and details of an asynchronous operation\"\n                                }\n                              }\n                            ]\n                          },\n                          \"CreateNamespace\": {\n                            \"requestType\": \"CreateNamespaceRequest\",\n                            \"responseType\": \"CreateNamespaceResponse\",\n                            \"options\": {\n                              \"(google.api.http).post\": \"/cloud/namespaces\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Namespaces\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Create a namespace\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Creates a new namespace in the account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/namespaces\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Namespace management documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"post\": \"/cloud/namespaces\",\n                                  \"body\": \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Namespaces\"\n                                  ],\n                                  \"summary\": \"Create a namespace\",\n                                  \"description\": \"Creates a new namespace in the account\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/namespaces\",\n                                    \"description\": \"Namespace management documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"GetNamespaces\": {\n                            \"requestType\": \"GetNamespacesRequest\",\n                            \"responseType\": \"GetNamespacesResponse\",\n                            \"options\": {\n                              \"(google.api.http).get\": \"/cloud/namespaces\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Namespaces\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"List all namespaces\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns a list of all namespaces in the account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/namespaces\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Namespace management documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"get\": \"/cloud/namespaces\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Namespaces\"\n                                  ],\n                                  \"summary\": \"List all namespaces\",\n                                  \"description\": \"Returns a list of all namespaces in the account\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/namespaces\",\n                                    \"description\": \"Namespace management documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"GetNamespace\": {\n                            \"requestType\": \"GetNamespaceRequest\",\n                            \"responseType\": \"GetNamespaceResponse\",\n                            \"options\": {\n                              \"(google.api.http).get\": \"/cloud/namespaces/{namespace}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Namespaces\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Get namespace details\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns detailed information about a specific namespace\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/namespaces\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Namespace management documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"get\": \"/cloud/namespaces/{namespace}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Namespaces\"\n                                  ],\n                                  \"summary\": \"Get namespace details\",\n                                  \"description\": \"Returns detailed information about a specific namespace\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/namespaces\",\n                                    \"description\": \"Namespace management documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"UpdateNamespace\": {\n                            \"requestType\": \"UpdateNamespaceRequest\",\n                            \"responseType\": \"UpdateNamespaceResponse\",\n                            \"options\": {\n                              \"(google.api.http).post\": \"/cloud/namespaces/{namespace}\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Namespaces\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Update a namespace\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Updates configuration for an existing namespace\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/namespaces\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Namespace management documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"post\": \"/cloud/namespaces/{namespace}\",\n                                  \"body\": \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Namespaces\"\n                                  ],\n                                  \"summary\": \"Update a namespace\",\n                                  \"description\": \"Updates configuration for an existing namespace\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/namespaces\",\n                                    \"description\": \"Namespace management documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"RenameCustomSearchAttribute\": {\n                            \"requestType\": \"RenameCustomSearchAttributeRequest\",\n                            \"responseType\": \"RenameCustomSearchAttributeResponse\",\n                            \"options\": {\n                              \"(google.api.http).post\": \"/cloud/namespaces/{namespace}/rename-custom-search-attribute\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Namespaces\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Rename custom search attribute\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Renames a custom search attribute in a namespace\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/search-attribute#custom-search-attribute\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Custom Search Attributes documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"post\": \"/cloud/namespaces/{namespace}/rename-custom-search-attribute\",\n                                  \"body\": \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Namespaces\"\n                                  ],\n                                  \"summary\": \"Rename custom search attribute\",\n                                  \"description\": \"Renames a custom search attribute in a namespace\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/search-attribute#custom-search-attribute\",\n                                    \"description\": \"Custom Search Attributes documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"DeleteNamespace\": {\n                            \"requestType\": \"DeleteNamespaceRequest\",\n                            \"responseType\": \"DeleteNamespaceResponse\",\n                            \"options\": {\n                              \"(google.api.http).delete\": \"/cloud/namespaces/{namespace}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Namespaces\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Delete a namespace\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Permanently deletes a namespace and all its data\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/namespaces\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Namespace management documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"delete\": \"/cloud/namespaces/{namespace}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Namespaces\"\n                                  ],\n                                  \"summary\": \"Delete a namespace\",\n                                  \"description\": \"Permanently deletes a namespace and all its data\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/namespaces\",\n                                    \"description\": \"Namespace management documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"FailoverNamespaceRegion\": {\n                            \"requestType\": \"FailoverNamespaceRegionRequest\",\n                            \"responseType\": \"FailoverNamespaceRegionResponse\",\n                            \"options\": {\n                              \"(google.api.http).post\": \"/cloud/namespaces/{namespace}/failover-region\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"High Availability\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Failover namespace region\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Initiates a regional failover for a high availability namespace\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/high-availability\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"High availability namespace documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"post\": \"/cloud/namespaces/{namespace}/failover-region\",\n                                  \"body\": \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"High Availability\"\n                                  ],\n                                  \"summary\": \"Failover namespace region\",\n                                  \"description\": \"Initiates a regional failover for a high availability namespace\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/high-availability\",\n                                    \"description\": \"High availability namespace documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"AddNamespaceRegion\": {\n                            \"requestType\": \"AddNamespaceRegionRequest\",\n                            \"responseType\": \"AddNamespaceRegionResponse\",\n                            \"options\": {\n                              \"deprecated\": true,\n                              \"(google.api.http).post\": \"/cloud/namespaces/{namespace}/add-region\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"High Availability\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Add namespace replica\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Adds a new replica to an existing namespace\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/high-availability\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"High availability namespace documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"deprecated\": true\n                              },\n                              {\n                                \"(google.api.http)\": {\n                                  \"post\": \"/cloud/namespaces/{namespace}/add-region\",\n                                  \"body\": \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"High Availability\"\n                                  ],\n                                  \"summary\": \"Add namespace replica\",\n                                  \"description\": \"Adds a new replica to an existing namespace\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/high-availability\",\n                                    \"description\": \"High availability namespace documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"DeleteNamespaceRegion\": {\n                            \"requestType\": \"DeleteNamespaceRegionRequest\",\n                            \"responseType\": \"DeleteNamespaceRegionResponse\",\n                            \"options\": {\n                              \"deprecated\": true,\n                              \"(google.api.http).delete\": \"/cloud/namespaces/{namespace}/regions/{region}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"High Availability\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Remove namespace replica\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Removes a replica from a high availability namespace\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/high-availability\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"High availability namespace documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"deprecated\": true\n                              },\n                              {\n                                \"(google.api.http)\": {\n                                  \"delete\": \"/cloud/namespaces/{namespace}/regions/{region}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"High Availability\"\n                                  ],\n                                  \"summary\": \"Remove namespace replica\",\n                                  \"description\": \"Removes a replica from a high availability namespace\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/high-availability\",\n                                    \"description\": \"High availability namespace documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"GetRegions\": {\n                            \"requestType\": \"GetRegionsRequest\",\n                            \"responseType\": \"GetRegionsResponse\",\n                            \"options\": {\n                              \"(google.api.http).get\": \"/cloud/regions\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Regions\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"List all regions\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns a list of all available cloud regions\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/regions\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Regions documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"get\": \"/cloud/regions\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Regions\"\n                                  ],\n                                  \"summary\": \"List all regions\",\n                                  \"description\": \"Returns a list of all available cloud regions\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/regions\",\n                                    \"description\": \"Regions documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"GetRegion\": {\n                            \"requestType\": \"GetRegionRequest\",\n                            \"responseType\": \"GetRegionResponse\",\n                            \"options\": {\n                              \"(google.api.http).get\": \"/cloud/regions/{region}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Regions\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Get region details\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns detailed information about a specific region\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/regions\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Regions documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"get\": \"/cloud/regions/{region}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Regions\"\n                                  ],\n                                  \"summary\": \"Get region details\",\n                                  \"description\": \"Returns detailed information about a specific region\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/regions\",\n                                    \"description\": \"Regions documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"GetApiKeys\": {\n                            \"requestType\": \"GetApiKeysRequest\",\n                            \"responseType\": \"GetApiKeysResponse\",\n                            \"options\": {\n                              \"(google.api.http).get\": \"/cloud/api-keys\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"API Keys\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"List all API keys\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns a list of all API keys in the account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/api-keys\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"API Keys documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"get\": \"/cloud/api-keys\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"API Keys\"\n                                  ],\n                                  \"summary\": \"List all API keys\",\n                                  \"description\": \"Returns a list of all API keys in the account\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/api-keys\",\n                                    \"description\": \"API Keys documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"GetApiKey\": {\n                            \"requestType\": \"GetApiKeyRequest\",\n                            \"responseType\": \"GetApiKeyResponse\",\n                            \"options\": {\n                              \"(google.api.http).get\": \"/cloud/api-keys/{key_id}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"API Keys\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Get API key details\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns detailed information about a specific API key\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/api-keys\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"API Keys documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"get\": \"/cloud/api-keys/{key_id}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"API Keys\"\n                                  ],\n                                  \"summary\": \"Get API key details\",\n                                  \"description\": \"Returns detailed information about a specific API key\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/api-keys\",\n                                    \"description\": \"API Keys documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"CreateApiKey\": {\n                            \"requestType\": \"CreateApiKeyRequest\",\n                            \"responseType\": \"CreateApiKeyResponse\",\n                            \"options\": {\n                              \"(google.api.http).post\": \"/cloud/api-keys\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"API Keys\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Create an API key\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Creates a new API key for programmatic access\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/api-keys\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"API Keys documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"post\": \"/cloud/api-keys\",\n                                  \"body\": \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"API Keys\"\n                                  ],\n                                  \"summary\": \"Create an API key\",\n                                  \"description\": \"Creates a new API key for programmatic access\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/api-keys\",\n                                    \"description\": \"API Keys documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"UpdateApiKey\": {\n                            \"requestType\": \"UpdateApiKeyRequest\",\n                            \"responseType\": \"UpdateApiKeyResponse\",\n                            \"options\": {\n                              \"(google.api.http).post\": \"/cloud/api-keys/{key_id}\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"API Keys\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Update an API key\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Updates an existing API key's properties\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/api-keys\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"API Keys documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"post\": \"/cloud/api-keys/{key_id}\",\n                                  \"body\": \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"API Keys\"\n                                  ],\n                                  \"summary\": \"Update an API key\",\n                                  \"description\": \"Updates an existing API key's properties\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/api-keys\",\n                                    \"description\": \"API Keys documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"DeleteApiKey\": {\n                            \"requestType\": \"DeleteApiKeyRequest\",\n                            \"responseType\": \"DeleteApiKeyResponse\",\n                            \"options\": {\n                              \"(google.api.http).delete\": \"/cloud/api-keys/{key_id}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"API Keys\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Delete an API key\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Revokes and deletes an API key\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/api-keys\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"API Keys documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"delete\": \"/cloud/api-keys/{key_id}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"API Keys\"\n                                  ],\n                                  \"summary\": \"Delete an API key\",\n                                  \"description\": \"Revokes and deletes an API key\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/api-keys\",\n                                    \"description\": \"API Keys documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"GetNexusEndpoints\": {\n                            \"requestType\": \"GetNexusEndpointsRequest\",\n                            \"responseType\": \"GetNexusEndpointsResponse\",\n                            \"options\": {\n                              \"(google.api.http).get\": \"/cloud/nexus/endpoints\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Nexus\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"List all Nexus endpoints\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns a list of all Nexus endpoints in the account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/nexus\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Nexus documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"get\": \"/cloud/nexus/endpoints\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Nexus\"\n                                  ],\n                                  \"summary\": \"List all Nexus endpoints\",\n                                  \"description\": \"Returns a list of all Nexus endpoints in the account\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/nexus\",\n                                    \"description\": \"Nexus documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"GetNexusEndpoint\": {\n                            \"requestType\": \"GetNexusEndpointRequest\",\n                            \"responseType\": \"GetNexusEndpointResponse\",\n                            \"options\": {\n                              \"(google.api.http).get\": \"/cloud/nexus/endpoints/{endpoint_id}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Nexus\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Get Nexus endpoint details\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns detailed information about a specific Nexus endpoint\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/nexus\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Nexus documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"get\": \"/cloud/nexus/endpoints/{endpoint_id}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Nexus\"\n                                  ],\n                                  \"summary\": \"Get Nexus endpoint details\",\n                                  \"description\": \"Returns detailed information about a specific Nexus endpoint\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/nexus\",\n                                    \"description\": \"Nexus documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"CreateNexusEndpoint\": {\n                            \"requestType\": \"CreateNexusEndpointRequest\",\n                            \"responseType\": \"CreateNexusEndpointResponse\",\n                            \"options\": {\n                              \"(google.api.http).post\": \"/cloud/nexus/endpoints\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Nexus\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Create a Nexus endpoint\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Creates a new Nexus endpoint for cross-namespace communication\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/nexus\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Nexus documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"post\": \"/cloud/nexus/endpoints\",\n                                  \"body\": \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Nexus\"\n                                  ],\n                                  \"summary\": \"Create a Nexus endpoint\",\n                                  \"description\": \"Creates a new Nexus endpoint for cross-namespace communication\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/nexus\",\n                                    \"description\": \"Nexus documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"UpdateNexusEndpoint\": {\n                            \"requestType\": \"UpdateNexusEndpointRequest\",\n                            \"responseType\": \"UpdateNexusEndpointResponse\",\n                            \"options\": {\n                              \"(google.api.http).post\": \"/cloud/nexus/endpoints/{endpoint_id}\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Nexus\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Update a Nexus endpoint\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Updates an existing Nexus endpoint's configuration\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/nexus\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Nexus documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"post\": \"/cloud/nexus/endpoints/{endpoint_id}\",\n                                  \"body\": \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Nexus\"\n                                  ],\n                                  \"summary\": \"Update a Nexus endpoint\",\n                                  \"description\": \"Updates an existing Nexus endpoint's configuration\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/nexus\",\n                                    \"description\": \"Nexus documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"DeleteNexusEndpoint\": {\n                            \"requestType\": \"DeleteNexusEndpointRequest\",\n                            \"responseType\": \"DeleteNexusEndpointResponse\",\n                            \"options\": {\n                              \"(google.api.http).delete\": \"/cloud/nexus/endpoints/{endpoint_id}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Nexus\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Delete a Nexus endpoint\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Removes a Nexus endpoint from the account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/nexus\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Nexus documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"delete\": \"/cloud/nexus/endpoints/{endpoint_id}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Nexus\"\n                                  ],\n                                  \"summary\": \"Delete a Nexus endpoint\",\n                                  \"description\": \"Removes a Nexus endpoint from the account\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/nexus\",\n                                    \"description\": \"Nexus documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"GetUserGroups\": {\n                            \"requestType\": \"GetUserGroupsRequest\",\n                            \"responseType\": \"GetUserGroupsResponse\",\n                            \"options\": {\n                              \"(google.api.http).get\": \"/cloud/user-groups\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Groups\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"List all user groups\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns a list of all user groups in the account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/users-account-level-roles\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"User groups documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"get\": \"/cloud/user-groups\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Groups\"\n                                  ],\n                                  \"summary\": \"List all user groups\",\n                                  \"description\": \"Returns a list of all user groups in the account\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/users-account-level-roles\",\n                                    \"description\": \"User groups documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"GetUserGroup\": {\n                            \"requestType\": \"GetUserGroupRequest\",\n                            \"responseType\": \"GetUserGroupResponse\",\n                            \"options\": {\n                              \"(google.api.http).get\": \"/cloud/user-groups/{group_id}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Groups\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Get user group details\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns detailed information about a specific user group\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/user-groups\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"User groups documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"get\": \"/cloud/user-groups/{group_id}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Groups\"\n                                  ],\n                                  \"summary\": \"Get user group details\",\n                                  \"description\": \"Returns detailed information about a specific user group\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/user-groups\",\n                                    \"description\": \"User groups documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"CreateUserGroup\": {\n                            \"requestType\": \"CreateUserGroupRequest\",\n                            \"responseType\": \"CreateUserGroupResponse\",\n                            \"options\": {\n                              \"(google.api.http).post\": \"/cloud/user-groups\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Groups\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Create a user group\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Creates a new user group for managing permissions\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/user-groups\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"User groups documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"post\": \"/cloud/user-groups\",\n                                  \"body\": \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Groups\"\n                                  ],\n                                  \"summary\": \"Create a user group\",\n                                  \"description\": \"Creates a new user group for managing permissions\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/user-groups\",\n                                    \"description\": \"User groups documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"UpdateUserGroup\": {\n                            \"requestType\": \"UpdateUserGroupRequest\",\n                            \"responseType\": \"UpdateUserGroupResponse\",\n                            \"options\": {\n                              \"(google.api.http).post\": \"/cloud/user-groups/{group_id}\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Groups\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Update a user group\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Updates an existing user group's properties\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/user-groups\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"User groups documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"post\": \"/cloud/user-groups/{group_id}\",\n                                  \"body\": \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Groups\"\n                                  ],\n                                  \"summary\": \"Update a user group\",\n                                  \"description\": \"Updates an existing user group's properties\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/user-groups\",\n                                    \"description\": \"User groups documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"DeleteUserGroup\": {\n                            \"requestType\": \"DeleteUserGroupRequest\",\n                            \"responseType\": \"DeleteUserGroupResponse\",\n                            \"options\": {\n                              \"(google.api.http).delete\": \"/cloud/user-groups/{group_id}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Groups\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Delete a user group\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Removes a user group from the account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/user-groups\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"User groups documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"delete\": \"/cloud/user-groups/{group_id}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Groups\"\n                                  ],\n                                  \"summary\": \"Delete a user group\",\n                                  \"description\": \"Removes a user group from the account\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/user-groups\",\n                                    \"description\": \"User groups documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"SetUserGroupNamespaceAccess\": {\n                            \"requestType\": \"SetUserGroupNamespaceAccessRequest\",\n                            \"responseType\": \"SetUserGroupNamespaceAccessResponse\",\n                            \"options\": {\n                              \"(google.api.http).post\": \"/cloud/namespaces/{namespace}/user-groups/{group_id}/access\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Groups\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Set user group namespace access\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Configures a user group's permissions for a specific namespace\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/user-groups\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"User groups documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"post\": \"/cloud/namespaces/{namespace}/user-groups/{group_id}/access\",\n                                  \"body\": \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Groups\"\n                                  ],\n                                  \"summary\": \"Set user group namespace access\",\n                                  \"description\": \"Configures a user group's permissions for a specific namespace\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/user-groups\",\n                                    \"description\": \"User groups documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"AddUserGroupMember\": {\n                            \"requestType\": \"AddUserGroupMemberRequest\",\n                            \"responseType\": \"AddUserGroupMemberResponse\",\n                            \"options\": {\n                              \"(google.api.http).post\": \"/cloud/user-groups/{group_id}/members\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Groups\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Add user to group\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Adds a user to a user group (Cloud groups only)\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/user-groups\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"User groups documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"post\": \"/cloud/user-groups/{group_id}/members\",\n                                  \"body\": \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Groups\"\n                                  ],\n                                  \"summary\": \"Add user to group\",\n                                  \"description\": \"Adds a user to a user group (Cloud groups only)\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/user-groups\",\n                                    \"description\": \"User groups documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"RemoveUserGroupMember\": {\n                            \"requestType\": \"RemoveUserGroupMemberRequest\",\n                            \"responseType\": \"RemoveUserGroupMemberResponse\",\n                            \"options\": {\n                              \"(google.api.http).post\": \"/cloud/user-groups/{group_id}/remove-member\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Groups\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Remove user from group\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Removes a user from a user group (Cloud groups only)\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/user-groups\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"User groups documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"post\": \"/cloud/user-groups/{group_id}/remove-member\",\n                                  \"body\": \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Groups\"\n                                  ],\n                                  \"summary\": \"Remove user from group\",\n                                  \"description\": \"Removes a user from a user group (Cloud groups only)\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/user-groups\",\n                                    \"description\": \"User groups documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"GetUserGroupMembers\": {\n                            \"requestType\": \"GetUserGroupMembersRequest\",\n                            \"responseType\": \"GetUserGroupMembersResponse\",\n                            \"options\": {\n                              \"(google.api.http).get\": \"/cloud/user-groups/{group_id}/members\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Groups\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"List users in a group\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns a list of all users in a user group\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/user-groups\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"User groups documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"get\": \"/cloud/user-groups/{group_id}/members\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Groups\"\n                                  ],\n                                  \"summary\": \"List users in a group\",\n                                  \"description\": \"Returns a list of all users in a user group\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/user-groups\",\n                                    \"description\": \"User groups documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"CreateServiceAccount\": {\n                            \"requestType\": \"CreateServiceAccountRequest\",\n                            \"responseType\": \"CreateServiceAccountResponse\",\n                            \"options\": {\n                              \"(google.api.http).post\": \"/cloud/service-accounts\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Service Accounts\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Create a service account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Creates a new service account for automated access\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/service-accounts\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Service Accounts documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"post\": \"/cloud/service-accounts\",\n                                  \"body\": \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Service Accounts\"\n                                  ],\n                                  \"summary\": \"Create a service account\",\n                                  \"description\": \"Creates a new service account for automated access\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/service-accounts\",\n                                    \"description\": \"Service Accounts documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"GetServiceAccount\": {\n                            \"requestType\": \"GetServiceAccountRequest\",\n                            \"responseType\": \"GetServiceAccountResponse\",\n                            \"options\": {\n                              \"(google.api.http).get\": \"/cloud/service-accounts/{service_account_id}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Service Accounts\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Get service account details\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns detailed information about a specific service account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/service-accounts\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Service Accounts documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"get\": \"/cloud/service-accounts/{service_account_id}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Service Accounts\"\n                                  ],\n                                  \"summary\": \"Get service account details\",\n                                  \"description\": \"Returns detailed information about a specific service account\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/service-accounts\",\n                                    \"description\": \"Service Accounts documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"GetServiceAccounts\": {\n                            \"requestType\": \"GetServiceAccountsRequest\",\n                            \"responseType\": \"GetServiceAccountsResponse\",\n                            \"options\": {\n                              \"(google.api.http).get\": \"/cloud/service-accounts\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Service Accounts\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"List all service accounts\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns a list of all service accounts in the account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/service-accounts\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Service Accounts documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"get\": \"/cloud/service-accounts\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Service Accounts\"\n                                  ],\n                                  \"summary\": \"List all service accounts\",\n                                  \"description\": \"Returns a list of all service accounts in the account\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/service-accounts\",\n                                    \"description\": \"Service Accounts documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"UpdateServiceAccount\": {\n                            \"requestType\": \"UpdateServiceAccountRequest\",\n                            \"responseType\": \"UpdateServiceAccountResponse\",\n                            \"options\": {\n                              \"(google.api.http).post\": \"/cloud/service-accounts/{service_account_id}\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Service Accounts\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Update a service account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Updates an existing service account's properties\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/service-accounts\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Service Accounts documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"post\": \"/cloud/service-accounts/{service_account_id}\",\n                                  \"body\": \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Service Accounts\"\n                                  ],\n                                  \"summary\": \"Update a service account\",\n                                  \"description\": \"Updates an existing service account's properties\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/service-accounts\",\n                                    \"description\": \"Service Accounts documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"SetServiceAccountNamespaceAccess\": {\n                            \"requestType\": \"SetServiceAccountNamespaceAccessRequest\",\n                            \"responseType\": \"SetServiceAccountNamespaceAccessResponse\",\n                            \"options\": {\n                              \"(google.api.http).post\": \"/cloud/namespaces/{namespace}/service-accounts/{service_account_id}/access\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Service Accounts\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Set service account namespace access\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Configures a service account's permissions for a specific namespace\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/service-accounts\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Service Accounts documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"post\": \"/cloud/namespaces/{namespace}/service-accounts/{service_account_id}/access\",\n                                  \"body\": \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Service Accounts\"\n                                  ],\n                                  \"summary\": \"Set service account namespace access\",\n                                  \"description\": \"Configures a service account's permissions for a specific namespace\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/service-accounts\",\n                                    \"description\": \"Service Accounts documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"DeleteServiceAccount\": {\n                            \"requestType\": \"DeleteServiceAccountRequest\",\n                            \"responseType\": \"DeleteServiceAccountResponse\",\n                            \"options\": {\n                              \"(google.api.http).delete\": \"/cloud/service-accounts/{service_account_id}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Service Accounts\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Delete a service account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Removes a service account from the account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/service-accounts\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Service Accounts documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"delete\": \"/cloud/service-accounts/{service_account_id}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Service Accounts\"\n                                  ],\n                                  \"summary\": \"Delete a service account\",\n                                  \"description\": \"Removes a service account from the account\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/service-accounts\",\n                                    \"description\": \"Service Accounts documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"GetUsage\": {\n                            \"requestType\": \"GetUsageRequest\",\n                            \"responseType\": \"GetUsageResponse\",\n                            \"options\": {\n                              \"(google.api.http).get\": \"/cloud/usage\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Get usage data\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Get usage data across namespaces\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).deprecated\": true\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"get\": \"/cloud/usage\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Account\"\n                                  ],\n                                  \"summary\": \"Get usage data\",\n                                  \"description\": \"Get usage data across namespaces\",\n                                  \"deprecated\": true\n                                }\n                              }\n                            ]\n                          },\n                          \"GetAccount\": {\n                            \"requestType\": \"GetAccountRequest\",\n                            \"responseType\": \"GetAccountResponse\",\n                            \"options\": {\n                              \"(google.api.http).get\": \"/cloud/account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Get account details\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns detailed information about the account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/billing-and-cost\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Billing documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"get\": \"/cloud/account\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Account\"\n                                  ],\n                                  \"summary\": \"Get account details\",\n                                  \"description\": \"Returns detailed information about the account\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/billing-and-cost\",\n                                    \"description\": \"Billing documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"UpdateAccount\": {\n                            \"requestType\": \"UpdateAccountRequest\",\n                            \"responseType\": \"UpdateAccountResponse\",\n                            \"options\": {\n                              \"(google.api.http).post\": \"/cloud/account\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Update account details\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Updates account configuration and settings\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/billing-and-cost\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Billing documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"post\": \"/cloud/account\",\n                                  \"body\": \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Account\"\n                                  ],\n                                  \"summary\": \"Update account details\",\n                                  \"description\": \"Updates account configuration and settings\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/billing-and-cost\",\n                                    \"description\": \"Billing documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"CreateNamespaceExportSink\": {\n                            \"requestType\": \"CreateNamespaceExportSinkRequest\",\n                            \"responseType\": \"CreateNamespaceExportSinkResponse\",\n                            \"options\": {\n                              \"(google.api.http).post\": \"/cloud/namespaces/{namespace}/export-sinks\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Export\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Create history export sink\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Creates a new workflow history export sink\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/export\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Export documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"post\": \"/cloud/namespaces/{namespace}/export-sinks\",\n                                  \"body\": \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Export\"\n                                  ],\n                                  \"summary\": \"Create history export sink\",\n                                  \"description\": \"Creates a new workflow history export sink\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/export\",\n                                    \"description\": \"Export documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"GetNamespaceExportSink\": {\n                            \"requestType\": \"GetNamespaceExportSinkRequest\",\n                            \"responseType\": \"GetNamespaceExportSinkResponse\",\n                            \"options\": {\n                              \"(google.api.http).get\": \"/cloud/namespaces/{namespace}/export-sinks/{name}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Export\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Get history sink details\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns detailed information about a specific workflow history export sink\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/export\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Export documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"get\": \"/cloud/namespaces/{namespace}/export-sinks/{name}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Export\"\n                                  ],\n                                  \"summary\": \"Get history sink details\",\n                                  \"description\": \"Returns detailed information about a specific workflow history export sink\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/export\",\n                                    \"description\": \"Export documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"GetNamespaceExportSinks\": {\n                            \"requestType\": \"GetNamespaceExportSinksRequest\",\n                            \"responseType\": \"GetNamespaceExportSinksResponse\",\n                            \"options\": {\n                              \"(google.api.http).get\": \"/cloud/namespaces/{namespace}/export-sinks\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Export\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"List history export sinks\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns a list of all workflow history export sinks for a namespace\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/export\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Export documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"get\": \"/cloud/namespaces/{namespace}/export-sinks\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Export\"\n                                  ],\n                                  \"summary\": \"List history export sinks\",\n                                  \"description\": \"Returns a list of all workflow history export sinks for a namespace\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/export\",\n                                    \"description\": \"Export documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"UpdateNamespaceExportSink\": {\n                            \"requestType\": \"UpdateNamespaceExportSinkRequest\",\n                            \"responseType\": \"UpdateNamespaceExportSinkResponse\",\n                            \"options\": {\n                              \"(google.api.http).post\": \"/cloud/namespaces/{namespace}/export-sinks/{spec.name}\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Export\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Update history export sink\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Updates an existing workflow history export sink's configuration\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/export\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Export documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"post\": \"/cloud/namespaces/{namespace}/export-sinks/{spec.name}\",\n                                  \"body\": \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Export\"\n                                  ],\n                                  \"summary\": \"Update history export sink\",\n                                  \"description\": \"Updates an existing workflow history export sink's configuration\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/export\",\n                                    \"description\": \"Export documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"DeleteNamespaceExportSink\": {\n                            \"requestType\": \"DeleteNamespaceExportSinkRequest\",\n                            \"responseType\": \"DeleteNamespaceExportSinkResponse\",\n                            \"options\": {\n                              \"(google.api.http).delete\": \"/cloud/namespaces/{namespace}/export-sinks/{name}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Export\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Delete history export sink\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Removes a workflow history export sink from a namespace\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/export\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Export documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"delete\": \"/cloud/namespaces/{namespace}/export-sinks/{name}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Export\"\n                                  ],\n                                  \"summary\": \"Delete history export sink\",\n                                  \"description\": \"Removes a workflow history export sink from a namespace\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/export\",\n                                    \"description\": \"Export documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"ValidateNamespaceExportSink\": {\n                            \"requestType\": \"ValidateNamespaceExportSinkRequest\",\n                            \"responseType\": \"ValidateNamespaceExportSinkResponse\",\n                            \"options\": {\n                              \"(google.api.http).post\": \"/cloud/namespaces/{namespace}/export-sink-validate\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Export\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Validate history export sink configuration\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Tests workflow history export sink configuration by delivering a test file to verify accessibility\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/export\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Export documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"post\": \"/cloud/namespaces/{namespace}/export-sink-validate\",\n                                  \"body\": \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Export\"\n                                  ],\n                                  \"summary\": \"Validate history export sink configuration\",\n                                  \"description\": \"Tests workflow history export sink configuration by delivering a test file to verify accessibility\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/export\",\n                                    \"description\": \"Export documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"UpdateNamespaceTags\": {\n                            \"requestType\": \"UpdateNamespaceTagsRequest\",\n                            \"responseType\": \"UpdateNamespaceTagsResponse\",\n                            \"options\": {\n                              \"(google.api.http).post\": \"/cloud/namespaces/{namespace}/update-tags\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Namespaces\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Update namespace tags\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Updates the tags associated with a namespace\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/namespaces#tag-a-namespace\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Namespace tag documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"post\": \"/cloud/namespaces/{namespace}/update-tags\",\n                                  \"body\": \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Namespaces\"\n                                  ],\n                                  \"summary\": \"Update namespace tags\",\n                                  \"description\": \"Updates the tags associated with a namespace\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/namespaces#tag-a-namespace\",\n                                    \"description\": \"Namespace tag documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"CreateConnectivityRule\": {\n                            \"requestType\": \"CreateConnectivityRuleRequest\",\n                            \"responseType\": \"CreateConnectivityRuleResponse\",\n                            \"options\": {\n                              \"(google.api.http).post\": \"/cloud/connectivity-rules\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Connectivity Rules\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Create connectivity rule\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Creates a new connectivity rule for network access control\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/connectivity\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Connectivity documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"post\": \"/cloud/connectivity-rules\",\n                                  \"body\": \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Connectivity Rules\"\n                                  ],\n                                  \"summary\": \"Create connectivity rule\",\n                                  \"description\": \"Creates a new connectivity rule for network access control\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/connectivity\",\n                                    \"description\": \"Connectivity documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"GetConnectivityRule\": {\n                            \"requestType\": \"GetConnectivityRuleRequest\",\n                            \"responseType\": \"GetConnectivityRuleResponse\",\n                            \"options\": {\n                              \"(google.api.http).get\": \"/cloud/connectivity-rules/{connectivity_rule_id}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Connectivity Rules\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Get connectivity rule details\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns detailed information about a specific connectivity rule\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/connectivity\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Connectivity documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"get\": \"/cloud/connectivity-rules/{connectivity_rule_id}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Connectivity Rules\"\n                                  ],\n                                  \"summary\": \"Get connectivity rule details\",\n                                  \"description\": \"Returns detailed information about a specific connectivity rule\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/connectivity\",\n                                    \"description\": \"Connectivity documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"GetConnectivityRules\": {\n                            \"requestType\": \"GetConnectivityRulesRequest\",\n                            \"responseType\": \"GetConnectivityRulesResponse\",\n                            \"options\": {\n                              \"(google.api.http).get\": \"/cloud/connectivity-rules\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Connectivity Rules\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"List all connectivity rules\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns a list of all connectivity rules in the account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/connectivity\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Connectivity documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"get\": \"/cloud/connectivity-rules\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Connectivity Rules\"\n                                  ],\n                                  \"summary\": \"List all connectivity rules\",\n                                  \"description\": \"Returns a list of all connectivity rules in the account\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/connectivity\",\n                                    \"description\": \"Connectivity documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"DeleteConnectivityRule\": {\n                            \"requestType\": \"DeleteConnectivityRuleRequest\",\n                            \"responseType\": \"DeleteConnectivityRuleResponse\",\n                            \"options\": {\n                              \"(google.api.http).delete\": \"/cloud/connectivity-rules/{connectivity_rule_id}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Connectivity Rules\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Delete connectivity rule\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Removes a connectivity rule from the account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/connectivity\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Connectivity documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"delete\": \"/cloud/connectivity-rules/{connectivity_rule_id}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Connectivity Rules\"\n                                  ],\n                                  \"summary\": \"Delete connectivity rule\",\n                                  \"description\": \"Removes a connectivity rule from the account\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/connectivity\",\n                                    \"description\": \"Connectivity documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"GetAuditLogs\": {\n                            \"requestType\": \"GetAuditLogsRequest\",\n                            \"responseType\": \"GetAuditLogsResponse\",\n                            \"options\": {\n                              \"(google.api.http).get\": \"/cloud/audit-logs\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Get audit logs\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns a paginated list of audit logs for the account, optionally filtered by time range\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/audit-logging\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Audit logging documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"get\": \"/cloud/audit-logs\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Account\"\n                                  ],\n                                  \"summary\": \"Get audit logs\",\n                                  \"description\": \"Returns a paginated list of audit logs for the account, optionally filtered by time range\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/audit-logging\",\n                                    \"description\": \"Audit logging documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"ValidateAccountAuditLogSink\": {\n                            \"requestType\": \"ValidateAccountAuditLogSinkRequest\",\n                            \"responseType\": \"ValidateAccountAuditLogSinkResponse\",\n                            \"options\": {\n                              \"(google.api.http).post\": \"/cloud/audit-log-sink-validate\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Validate audit log sink\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Validate customer audit log sink is accessible from Temporal's workflow by delivering an empty file to the specified sink. The operation verifies that the sink is correctly configured, accessible and ready to receive audit logs.\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/audit-logging\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Audit logging documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"post\": \"/cloud/audit-log-sink-validate\",\n                                  \"body\": \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Account\"\n                                  ],\n                                  \"summary\": \"Validate audit log sink\",\n                                  \"description\": \"Validate customer audit log sink is accessible from Temporal's workflow by delivering an empty file to the specified sink. The operation verifies that the sink is correctly configured, accessible and ready to receive audit logs.\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/audit-logging\",\n                                    \"description\": \"Audit logging documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"CreateAccountAuditLogSink\": {\n                            \"requestType\": \"CreateAccountAuditLogSinkRequest\",\n                            \"responseType\": \"CreateAccountAuditLogSinkResponse\",\n                            \"options\": {\n                              \"(google.api.http).post\": \"/cloud/audit-log-sinks\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Create audit log sink\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Creates a new audit log sink for exporting audit logs\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/audit-logging\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Audit logging documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"post\": \"/cloud/audit-log-sinks\",\n                                  \"body\": \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Account\"\n                                  ],\n                                  \"summary\": \"Create audit log sink\",\n                                  \"description\": \"Creates a new audit log sink for exporting audit logs\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/audit-logging\",\n                                    \"description\": \"Audit logging documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"GetAccountAuditLogSink\": {\n                            \"requestType\": \"GetAccountAuditLogSinkRequest\",\n                            \"responseType\": \"GetAccountAuditLogSinkResponse\",\n                            \"options\": {\n                              \"(google.api.http).get\": \"/cloud/audit-log-sinks/{name}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Get audit log sink details\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns detailed information about a specific audit log sink\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/audit-logging\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Audit logging documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"get\": \"/cloud/audit-log-sinks/{name}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Account\"\n                                  ],\n                                  \"summary\": \"Get audit log sink details\",\n                                  \"description\": \"Returns detailed information about a specific audit log sink\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/audit-logging\",\n                                    \"description\": \"Audit logging documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"GetAccountAuditLogSinks\": {\n                            \"requestType\": \"GetAccountAuditLogSinksRequest\",\n                            \"responseType\": \"GetAccountAuditLogSinksResponse\",\n                            \"options\": {\n                              \"(google.api.http).get\": \"/cloud/audit-log-sinks\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"List audit log sinks\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns a list of all audit log sinks for the account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/audit-logging\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Audit logging documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"get\": \"/cloud/audit-log-sinks\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Account\"\n                                  ],\n                                  \"summary\": \"List audit log sinks\",\n                                  \"description\": \"Returns a list of all audit log sinks for the account\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/audit-logging\",\n                                    \"description\": \"Audit logging documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"UpdateAccountAuditLogSink\": {\n                            \"requestType\": \"UpdateAccountAuditLogSinkRequest\",\n                            \"responseType\": \"UpdateAccountAuditLogSinkResponse\",\n                            \"options\": {\n                              \"(google.api.http).post\": \"/cloud/audit-log-sinks/{spec.name}\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Update audit log sink\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Updates an existing audit log sink's configuration\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/audit-logging\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Audit logging documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"post\": \"/cloud/audit-log-sinks/{spec.name}\",\n                                  \"body\": \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Account\"\n                                  ],\n                                  \"summary\": \"Update audit log sink\",\n                                  \"description\": \"Updates an existing audit log sink's configuration\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/audit-logging\",\n                                    \"description\": \"Audit logging documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"DeleteAccountAuditLogSink\": {\n                            \"requestType\": \"DeleteAccountAuditLogSinkRequest\",\n                            \"responseType\": \"DeleteAccountAuditLogSinkResponse\",\n                            \"options\": {\n                              \"(google.api.http).delete\": \"/cloud/audit-log-sinks/{name}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Delete audit log sink\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Removes an audit log sink from the account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/audit-logging\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Audit logging documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"delete\": \"/cloud/audit-log-sinks/{name}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Account\"\n                                  ],\n                                  \"summary\": \"Delete audit log sink\",\n                                  \"description\": \"Removes an audit log sink from the account\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/audit-logging\",\n                                    \"description\": \"Audit logging documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"GetNamespaceCapacityInfo\": {\n                            \"requestType\": \"GetNamespaceCapacityInfoRequest\",\n                            \"responseType\": \"GetNamespaceCapacityInfoResponse\",\n                            \"options\": {\n                              \"(google.api.http).get\": \"/cloud/namespaces/{namespace}/capacity-info\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Namespaces\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Get namespace capacity information\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns capacity information for a namespace. This includes provisioned capacity options, on-demand limits, and 7 day historical APS statistics useful for capacity planning.\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/capacity-modes\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Capacity modes information documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"get\": \"/cloud/namespaces/{namespace}/capacity-info\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Namespaces\"\n                                  ],\n                                  \"summary\": \"Get namespace capacity information\",\n                                  \"description\": \"Returns capacity information for a namespace. This includes provisioned capacity options, on-demand limits, and 7 day historical APS statistics useful for capacity planning.\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/capacity-modes\",\n                                    \"description\": \"Capacity modes information documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"CreateBillingReport\": {\n                            \"requestType\": \"CreateBillingReportRequest\",\n                            \"responseType\": \"CreateBillingReportResponse\",\n                            \"options\": {\n                              \"(google.api.http).post\": \"/cloud/billing-reports\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Billing\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Create a billing report\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Creates a billing report for the account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/billing-reports\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Billing report documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"post\": \"/cloud/billing-reports\",\n                                  \"body\": \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Billing\"\n                                  ],\n                                  \"summary\": \"Create a billing report\",\n                                  \"description\": \"Creates a billing report for the account\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/billing-reports\",\n                                    \"description\": \"Billing report documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"GetBillingReport\": {\n                            \"requestType\": \"GetBillingReportRequest\",\n                            \"responseType\": \"GetBillingReportResponse\",\n                            \"options\": {\n                              \"(google.api.http).get\": \"/cloud/billing-reports/{billing_report_id}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Billing\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Get a billing report\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Gets an existing billing report for the account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/billing-reports\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Billing report documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"get\": \"/cloud/billing-reports/{billing_report_id}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Billing\"\n                                  ],\n                                  \"summary\": \"Get a billing report\",\n                                  \"description\": \"Gets an existing billing report for the account\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/billing-reports\",\n                                    \"description\": \"Billing report documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"GetCustomRoles\": {\n                            \"requestType\": \"GetCustomRolesRequest\",\n                            \"responseType\": \"GetCustomRolesResponse\",\n                            \"options\": {\n                              \"(google.api.http).get\": \"/cloud/custom-roles\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Custom Roles\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"List custom roles\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns a list of custom roles in the account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/custom-roles\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Custom roles documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"get\": \"/cloud/custom-roles\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Custom Roles\"\n                                  ],\n                                  \"summary\": \"List custom roles\",\n                                  \"description\": \"Returns a list of custom roles in the account\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/custom-roles\",\n                                    \"description\": \"Custom roles documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"GetCustomRole\": {\n                            \"requestType\": \"GetCustomRoleRequest\",\n                            \"responseType\": \"GetCustomRoleResponse\",\n                            \"options\": {\n                              \"(google.api.http).get\": \"/cloud/custom-roles/{role_id}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Custom Roles\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Get custom role by ID\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns details for a specific custom role\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/custom-roles\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Custom roles documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"get\": \"/cloud/custom-roles/{role_id}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Custom Roles\"\n                                  ],\n                                  \"summary\": \"Get custom role by ID\",\n                                  \"description\": \"Returns details for a specific custom role\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/custom-roles\",\n                                    \"description\": \"Custom roles documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"CreateCustomRole\": {\n                            \"requestType\": \"CreateCustomRoleRequest\",\n                            \"responseType\": \"CreateCustomRoleResponse\",\n                            \"options\": {\n                              \"(google.api.http).post\": \"/cloud/custom-roles\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Custom Roles\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Create a custom role\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Creates a new custom role in the account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/custom-roles\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Custom roles documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"post\": \"/cloud/custom-roles\",\n                                  \"body\": \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Custom Roles\"\n                                  ],\n                                  \"summary\": \"Create a custom role\",\n                                  \"description\": \"Creates a new custom role in the account\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/custom-roles\",\n                                    \"description\": \"Custom roles documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"UpdateCustomRole\": {\n                            \"requestType\": \"UpdateCustomRoleRequest\",\n                            \"responseType\": \"UpdateCustomRoleResponse\",\n                            \"options\": {\n                              \"(google.api.http).post\": \"/cloud/custom-roles/{role_id}\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Custom Roles\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Update a custom role\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Updates an existing custom role\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/custom-roles\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Custom roles documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"post\": \"/cloud/custom-roles/{role_id}\",\n                                  \"body\": \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Custom Roles\"\n                                  ],\n                                  \"summary\": \"Update a custom role\",\n                                  \"description\": \"Updates an existing custom role\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/custom-roles\",\n                                    \"description\": \"Custom roles documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"DeleteCustomRole\": {\n                            \"requestType\": \"DeleteCustomRoleRequest\",\n                            \"responseType\": \"DeleteCustomRoleResponse\",\n                            \"options\": {\n                              \"(google.api.http).delete\": \"/cloud/custom-roles/{role_id}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Custom Roles\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Delete a custom role\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Deletes a custom role from the account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/custom-roles\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Custom roles documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"delete\": \"/cloud/custom-roles/{role_id}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Custom Roles\"\n                                  ],\n                                  \"summary\": \"Delete a custom role\",\n                                  \"description\": \"Deletes a custom role from the account\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/custom-roles\",\n                                    \"description\": \"Custom roles documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"GetUserNamespaceAssignments\": {\n                            \"requestType\": \"GetUserNamespaceAssignmentsRequest\",\n                            \"responseType\": \"GetUserNamespaceAssignmentsResponse\",\n                            \"options\": {\n                              \"(google.api.http).get\": \"/cloud/namespaces/{namespace}/user-assignments\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Users\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Get users with access to a namespace\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns the users that have access to the namespace, including each user's namespace-level access.\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/users\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Users documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"get\": \"/cloud/namespaces/{namespace}/user-assignments\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Users\"\n                                  ],\n                                  \"summary\": \"Get users with access to a namespace\",\n                                  \"description\": \"Returns the users that have access to the namespace, including each user's namespace-level access.\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/users\",\n                                    \"description\": \"Users documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"GetServiceAccountNamespaceAssignments\": {\n                            \"requestType\": \"GetServiceAccountNamespaceAssignmentsRequest\",\n                            \"responseType\": \"GetServiceAccountNamespaceAssignmentsResponse\",\n                            \"options\": {\n                              \"(google.api.http).get\": \"/cloud/namespaces/{namespace}/service-account-assignments\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Service Accounts\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"List service accounts with access to a namespace\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns the service accounts that have access to the namespace, including each service account's namespace-level access.\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/service-accounts\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Service Accounts documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"get\": \"/cloud/namespaces/{namespace}/service-account-assignments\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Service Accounts\"\n                                  ],\n                                  \"summary\": \"List service accounts with access to a namespace\",\n                                  \"description\": \"Returns the service accounts that have access to the namespace, including each service account's namespace-level access.\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/service-accounts\",\n                                    \"description\": \"Service Accounts documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"GetUserGroupNamespaceAssignments\": {\n                            \"requestType\": \"GetUserGroupNamespaceAssignmentsRequest\",\n                            \"responseType\": \"GetUserGroupNamespaceAssignmentsResponse\",\n                            \"options\": {\n                              \"(google.api.http).get\": \"/cloud/namespaces/{namespace}/user-group-assignments\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Groups\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"List user groups with access to a namespace\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns the user groups that have access to the namespace, including each group's namespace-level access.\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/user-groups\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"User groups documentation\"\n                            },\n                            \"parsedOptions\": [\n                              {\n                                \"(google.api.http)\": {\n                                  \"get\": \"/cloud/namespaces/{namespace}/user-group-assignments\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  \"tags\": [\n                                    \"Groups\"\n                                  ],\n                                  \"summary\": \"List user groups with access to a namespace\",\n                                  \"description\": \"Returns the user groups that have access to the namespace, including each group's namespace-level access.\",\n                                  \"external_docs\": {\n                                    \"url\": \"https://docs.temporal.io/cloud/user-groups\",\n                                    \"description\": \"User groups documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          }\n                        }\n                      },\n                      \"GetCurrentIdentityRequest\": {\n                        \"fields\": {}\n                      },\n                      \"GetCurrentIdentityResponse\": {\n                        \"oneofs\": {\n                          \"principal\": {\n                            \"oneof\": [\n                              \"user\",\n                              \"serviceAccount\"\n                            ]\n                          }\n                        },\n                        \"fields\": {\n                          \"user\": {\n                            \"type\": \"temporal.api.cloud.identity.v1.User\",\n                            \"id\": 1\n                          },\n                          \"serviceAccount\": {\n                            \"type\": \"temporal.api.cloud.identity.v1.ServiceAccount\",\n                            \"id\": 2,\n                            \"protoName\": \"service_account\"\n                          },\n                          \"principalApiKey\": {\n                            \"type\": \"temporal.api.cloud.identity.v1.ApiKey\",\n                            \"id\": 3,\n                            \"protoName\": \"principal_api_key\"\n                          }\n                        }\n                      },\n                      \"GetUsersRequest\": {\n                        \"fields\": {\n                          \"pageSize\": {\n                            \"type\": \"int32\",\n                            \"id\": 1,\n                            \"protoName\": \"page_size\"\n                          },\n                          \"pageToken\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"page_token\"\n                          },\n                          \"email\": {\n                            \"type\": \"string\",\n                            \"id\": 3\n                          },\n                          \"namespace\": {\n                            \"type\": \"string\",\n                            \"id\": 4\n                          }\n                        }\n                      },\n                      \"GetUsersResponse\": {\n                        \"fields\": {\n                          \"users\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"temporal.api.cloud.identity.v1.User\",\n                            \"id\": 1\n                          },\n                          \"nextPageToken\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"next_page_token\"\n                          }\n                        }\n                      },\n                      \"GetUserRequest\": {\n                        \"fields\": {\n                          \"userId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"user_id\"\n                          }\n                        }\n                      },\n                      \"GetUserResponse\": {\n                        \"fields\": {\n                          \"user\": {\n                            \"type\": \"temporal.api.cloud.identity.v1.User\",\n                            \"id\": 1\n                          }\n                        }\n                      },\n                      \"CreateUserRequest\": {\n                        \"fields\": {\n                          \"spec\": {\n                            \"type\": \"temporal.api.cloud.identity.v1.UserSpec\",\n                            \"id\": 1\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        }\n                      },\n                      \"CreateUserResponse\": {\n                        \"fields\": {\n                          \"userId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"user_id\"\n                          },\n                          \"asyncOperation\": {\n                            \"type\": \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            \"id\": 2,\n                            \"protoName\": \"async_operation\"\n                          }\n                        }\n                      },\n                      \"UpdateUserRequest\": {\n                        \"fields\": {\n                          \"userId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"user_id\"\n                          },\n                          \"spec\": {\n                            \"type\": \"temporal.api.cloud.identity.v1.UserSpec\",\n                            \"id\": 2\n                          },\n                          \"resourceVersion\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"resource_version\"\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 4,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        }\n                      },\n                      \"UpdateUserResponse\": {\n                        \"fields\": {\n                          \"asyncOperation\": {\n                            \"type\": \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            \"id\": 1,\n                            \"protoName\": \"async_operation\"\n                          }\n                        }\n                      },\n                      \"DeleteUserRequest\": {\n                        \"fields\": {\n                          \"userId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"user_id\"\n                          },\n                          \"resourceVersion\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"resource_version\"\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        }\n                      },\n                      \"DeleteUserResponse\": {\n                        \"fields\": {\n                          \"asyncOperation\": {\n                            \"type\": \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            \"id\": 1,\n                            \"protoName\": \"async_operation\"\n                          }\n                        }\n                      },\n                      \"SetUserNamespaceAccessRequest\": {\n                        \"fields\": {\n                          \"namespace\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"userId\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"user_id\"\n                          },\n                          \"access\": {\n                            \"type\": \"temporal.api.cloud.identity.v1.NamespaceAccess\",\n                            \"id\": 3\n                          },\n                          \"resourceVersion\": {\n                            \"type\": \"string\",\n                            \"id\": 4,\n                            \"protoName\": \"resource_version\"\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 5,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        }\n                      },\n                      \"SetUserNamespaceAccessResponse\": {\n                        \"fields\": {\n                          \"asyncOperation\": {\n                            \"type\": \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            \"id\": 1,\n                            \"protoName\": \"async_operation\"\n                          }\n                        }\n                      },\n                      \"GetAsyncOperationRequest\": {\n                        \"fields\": {\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        }\n                      },\n                      \"GetAsyncOperationResponse\": {\n                        \"fields\": {\n                          \"asyncOperation\": {\n                            \"type\": \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            \"id\": 1,\n                            \"protoName\": \"async_operation\"\n                          }\n                        }\n                      },\n                      \"CreateNamespaceRequest\": {\n                        \"fields\": {\n                          \"spec\": {\n                            \"type\": \"temporal.api.cloud.namespace.v1.NamespaceSpec\",\n                            \"id\": 2\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"async_operation_id\"\n                          },\n                          \"tags\": {\n                            \"keyType\": \"string\",\n                            \"type\": \"string\",\n                            \"id\": 4\n                          }\n                        }\n                      },\n                      \"CreateNamespaceResponse\": {\n                        \"fields\": {\n                          \"namespace\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"asyncOperation\": {\n                            \"type\": \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            \"id\": 2,\n                            \"protoName\": \"async_operation\"\n                          }\n                        }\n                      },\n                      \"GetNamespacesRequest\": {\n                        \"fields\": {\n                          \"pageSize\": {\n                            \"type\": \"int32\",\n                            \"id\": 1,\n                            \"protoName\": \"page_size\"\n                          },\n                          \"pageToken\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"page_token\"\n                          },\n                          \"name\": {\n                            \"type\": \"string\",\n                            \"id\": 3\n                          }\n                        }\n                      },\n                      \"GetNamespacesResponse\": {\n                        \"fields\": {\n                          \"namespaces\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"temporal.api.cloud.namespace.v1.Namespace\",\n                            \"id\": 1\n                          },\n                          \"nextPageToken\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"next_page_token\"\n                          }\n                        }\n                      },\n                      \"GetNamespaceRequest\": {\n                        \"fields\": {\n                          \"namespace\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          }\n                        }\n                      },\n                      \"GetNamespaceResponse\": {\n                        \"fields\": {\n                          \"namespace\": {\n                            \"type\": \"temporal.api.cloud.namespace.v1.Namespace\",\n                            \"id\": 1\n                          }\n                        }\n                      },\n                      \"UpdateNamespaceRequest\": {\n                        \"fields\": {\n                          \"namespace\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"spec\": {\n                            \"type\": \"temporal.api.cloud.namespace.v1.NamespaceSpec\",\n                            \"id\": 2\n                          },\n                          \"resourceVersion\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"resource_version\"\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 4,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        }\n                      },\n                      \"UpdateNamespaceResponse\": {\n                        \"fields\": {\n                          \"asyncOperation\": {\n                            \"type\": \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            \"id\": 1,\n                            \"protoName\": \"async_operation\"\n                          }\n                        }\n                      },\n                      \"RenameCustomSearchAttributeRequest\": {\n                        \"fields\": {\n                          \"namespace\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"existingCustomSearchAttributeName\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"existing_custom_search_attribute_name\"\n                          },\n                          \"newCustomSearchAttributeName\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"new_custom_search_attribute_name\"\n                          },\n                          \"resourceVersion\": {\n                            \"type\": \"string\",\n                            \"id\": 4,\n                            \"protoName\": \"resource_version\"\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 5,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        }\n                      },\n                      \"RenameCustomSearchAttributeResponse\": {\n                        \"fields\": {\n                          \"asyncOperation\": {\n                            \"type\": \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            \"id\": 1,\n                            \"protoName\": \"async_operation\"\n                          }\n                        }\n                      },\n                      \"DeleteNamespaceRequest\": {\n                        \"fields\": {\n                          \"namespace\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"resourceVersion\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"resource_version\"\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        }\n                      },\n                      \"DeleteNamespaceResponse\": {\n                        \"fields\": {\n                          \"asyncOperation\": {\n                            \"type\": \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            \"id\": 1,\n                            \"protoName\": \"async_operation\"\n                          }\n                        }\n                      },\n                      \"FailoverNamespaceRegionRequest\": {\n                        \"fields\": {\n                          \"namespace\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"region\": {\n                            \"type\": \"string\",\n                            \"id\": 2\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        }\n                      },\n                      \"FailoverNamespaceRegionResponse\": {\n                        \"fields\": {\n                          \"asyncOperation\": {\n                            \"type\": \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            \"id\": 1,\n                            \"protoName\": \"async_operation\"\n                          }\n                        }\n                      },\n                      \"AddNamespaceRegionRequest\": {\n                        \"fields\": {\n                          \"namespace\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"region\": {\n                            \"type\": \"string\",\n                            \"id\": 2\n                          },\n                          \"resourceVersion\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"resource_version\"\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 4,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        }\n                      },\n                      \"AddNamespaceRegionResponse\": {\n                        \"fields\": {\n                          \"asyncOperation\": {\n                            \"type\": \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            \"id\": 1,\n                            \"protoName\": \"async_operation\"\n                          }\n                        }\n                      },\n                      \"DeleteNamespaceRegionRequest\": {\n                        \"fields\": {\n                          \"namespace\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"region\": {\n                            \"type\": \"string\",\n                            \"id\": 2\n                          },\n                          \"resourceVersion\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"resource_version\"\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 4,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        }\n                      },\n                      \"DeleteNamespaceRegionResponse\": {\n                        \"fields\": {\n                          \"asyncOperation\": {\n                            \"type\": \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            \"id\": 1,\n                            \"protoName\": \"async_operation\"\n                          }\n                        }\n                      },\n                      \"GetRegionsRequest\": {\n                        \"fields\": {}\n                      },\n                      \"GetRegionsResponse\": {\n                        \"fields\": {\n                          \"regions\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"temporal.api.cloud.region.v1.Region\",\n                            \"id\": 1\n                          }\n                        }\n                      },\n                      \"GetRegionRequest\": {\n                        \"fields\": {\n                          \"region\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          }\n                        }\n                      },\n                      \"GetRegionResponse\": {\n                        \"fields\": {\n                          \"region\": {\n                            \"type\": \"temporal.api.cloud.region.v1.Region\",\n                            \"id\": 1\n                          }\n                        }\n                      },\n                      \"GetApiKeysRequest\": {\n                        \"fields\": {\n                          \"pageSize\": {\n                            \"type\": \"int32\",\n                            \"id\": 1,\n                            \"protoName\": \"page_size\"\n                          },\n                          \"pageToken\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"page_token\"\n                          },\n                          \"ownerId\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"owner_id\"\n                          },\n                          \"ownerTypeDeprecated\": {\n                            \"type\": \"string\",\n                            \"id\": 4,\n                            \"protoName\": \"owner_type_deprecated\",\n                            \"options\": {\n                              \"deprecated\": true\n                            }\n                          },\n                          \"ownerType\": {\n                            \"type\": \"temporal.api.cloud.identity.v1.OwnerType\",\n                            \"id\": 5,\n                            \"protoName\": \"owner_type\"\n                          }\n                        }\n                      },\n                      \"GetApiKeysResponse\": {\n                        \"fields\": {\n                          \"apiKeys\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"temporal.api.cloud.identity.v1.ApiKey\",\n                            \"id\": 1,\n                            \"protoName\": \"api_keys\"\n                          },\n                          \"nextPageToken\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"next_page_token\"\n                          }\n                        }\n                      },\n                      \"GetApiKeyRequest\": {\n                        \"fields\": {\n                          \"keyId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"key_id\"\n                          }\n                        }\n                      },\n                      \"GetApiKeyResponse\": {\n                        \"fields\": {\n                          \"apiKey\": {\n                            \"type\": \"temporal.api.cloud.identity.v1.ApiKey\",\n                            \"id\": 1,\n                            \"protoName\": \"api_key\"\n                          }\n                        }\n                      },\n                      \"CreateApiKeyRequest\": {\n                        \"fields\": {\n                          \"spec\": {\n                            \"type\": \"temporal.api.cloud.identity.v1.ApiKeySpec\",\n                            \"id\": 1\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        }\n                      },\n                      \"CreateApiKeyResponse\": {\n                        \"fields\": {\n                          \"keyId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"key_id\"\n                          },\n                          \"token\": {\n                            \"type\": \"string\",\n                            \"id\": 2\n                          },\n                          \"asyncOperation\": {\n                            \"type\": \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            \"id\": 3,\n                            \"protoName\": \"async_operation\"\n                          }\n                        }\n                      },\n                      \"UpdateApiKeyRequest\": {\n                        \"fields\": {\n                          \"keyId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"key_id\"\n                          },\n                          \"spec\": {\n                            \"type\": \"temporal.api.cloud.identity.v1.ApiKeySpec\",\n                            \"id\": 2\n                          },\n                          \"resourceVersion\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"resource_version\"\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 4,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        }\n                      },\n                      \"UpdateApiKeyResponse\": {\n                        \"fields\": {\n                          \"asyncOperation\": {\n                            \"type\": \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            \"id\": 1,\n                            \"protoName\": \"async_operation\"\n                          }\n                        }\n                      },\n                      \"DeleteApiKeyRequest\": {\n                        \"fields\": {\n                          \"keyId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"key_id\"\n                          },\n                          \"resourceVersion\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"resource_version\"\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        }\n                      },\n                      \"DeleteApiKeyResponse\": {\n                        \"fields\": {\n                          \"asyncOperation\": {\n                            \"type\": \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            \"id\": 1,\n                            \"protoName\": \"async_operation\"\n                          }\n                        }\n                      },\n                      \"GetNexusEndpointsRequest\": {\n                        \"fields\": {\n                          \"pageSize\": {\n                            \"type\": \"int32\",\n                            \"id\": 1,\n                            \"protoName\": \"page_size\"\n                          },\n                          \"pageToken\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"page_token\"\n                          },\n                          \"targetNamespaceId\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"target_namespace_id\"\n                          },\n                          \"targetTaskQueue\": {\n                            \"type\": \"string\",\n                            \"id\": 4,\n                            \"protoName\": \"target_task_queue\"\n                          },\n                          \"name\": {\n                            \"type\": \"string\",\n                            \"id\": 5\n                          }\n                        }\n                      },\n                      \"GetNexusEndpointsResponse\": {\n                        \"fields\": {\n                          \"endpoints\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"temporal.api.cloud.nexus.v1.Endpoint\",\n                            \"id\": 1\n                          },\n                          \"nextPageToken\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"next_page_token\"\n                          }\n                        }\n                      },\n                      \"GetNexusEndpointRequest\": {\n                        \"fields\": {\n                          \"endpointId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"endpoint_id\"\n                          }\n                        }\n                      },\n                      \"GetNexusEndpointResponse\": {\n                        \"fields\": {\n                          \"endpoint\": {\n                            \"type\": \"temporal.api.cloud.nexus.v1.Endpoint\",\n                            \"id\": 1\n                          }\n                        }\n                      },\n                      \"CreateNexusEndpointRequest\": {\n                        \"fields\": {\n                          \"spec\": {\n                            \"type\": \"temporal.api.cloud.nexus.v1.EndpointSpec\",\n                            \"id\": 1\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        }\n                      },\n                      \"CreateNexusEndpointResponse\": {\n                        \"fields\": {\n                          \"endpointId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"endpoint_id\"\n                          },\n                          \"asyncOperation\": {\n                            \"type\": \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            \"id\": 2,\n                            \"protoName\": \"async_operation\"\n                          }\n                        }\n                      },\n                      \"UpdateNexusEndpointRequest\": {\n                        \"fields\": {\n                          \"endpointId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"endpoint_id\"\n                          },\n                          \"spec\": {\n                            \"type\": \"temporal.api.cloud.nexus.v1.EndpointSpec\",\n                            \"id\": 2\n                          },\n                          \"resourceVersion\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"resource_version\"\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 4,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        }\n                      },\n                      \"UpdateNexusEndpointResponse\": {\n                        \"fields\": {\n                          \"asyncOperation\": {\n                            \"type\": \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            \"id\": 1,\n                            \"protoName\": \"async_operation\"\n                          }\n                        }\n                      },\n                      \"DeleteNexusEndpointRequest\": {\n                        \"fields\": {\n                          \"endpointId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"endpoint_id\"\n                          },\n                          \"resourceVersion\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"resource_version\"\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        }\n                      },\n                      \"DeleteNexusEndpointResponse\": {\n                        \"fields\": {\n                          \"asyncOperation\": {\n                            \"type\": \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            \"id\": 1,\n                            \"protoName\": \"async_operation\"\n                          }\n                        }\n                      },\n                      \"GetUserGroupsRequest\": {\n                        \"fields\": {\n                          \"pageSize\": {\n                            \"type\": \"int32\",\n                            \"id\": 1,\n                            \"protoName\": \"page_size\"\n                          },\n                          \"pageToken\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"page_token\"\n                          },\n                          \"namespace\": {\n                            \"type\": \"string\",\n                            \"id\": 3\n                          },\n                          \"displayName\": {\n                            \"type\": \"string\",\n                            \"id\": 4,\n                            \"protoName\": \"display_name\"\n                          },\n                          \"googleGroup\": {\n                            \"type\": \"GoogleGroupFilter\",\n                            \"id\": 5,\n                            \"protoName\": \"google_group\"\n                          },\n                          \"scimGroup\": {\n                            \"type\": \"SCIMGroupFilter\",\n                            \"id\": 6,\n                            \"protoName\": \"scim_group\"\n                          }\n                        },\n                        \"nested\": {\n                          \"GoogleGroupFilter\": {\n                            \"fields\": {\n                              \"emailAddress\": {\n                                \"type\": \"string\",\n                                \"id\": 1,\n                                \"protoName\": \"email_address\"\n                              }\n                            }\n                          },\n                          \"SCIMGroupFilter\": {\n                            \"fields\": {\n                              \"idpId\": {\n                                \"type\": \"string\",\n                                \"id\": 1,\n                                \"protoName\": \"idp_id\"\n                              }\n                            }\n                          }\n                        }\n                      },\n                      \"GetUserGroupsResponse\": {\n                        \"fields\": {\n                          \"groups\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"temporal.api.cloud.identity.v1.UserGroup\",\n                            \"id\": 1\n                          },\n                          \"nextPageToken\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"next_page_token\"\n                          }\n                        }\n                      },\n                      \"GetUserGroupRequest\": {\n                        \"fields\": {\n                          \"groupId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"group_id\"\n                          }\n                        }\n                      },\n                      \"GetUserGroupResponse\": {\n                        \"fields\": {\n                          \"group\": {\n                            \"type\": \"temporal.api.cloud.identity.v1.UserGroup\",\n                            \"id\": 1\n                          }\n                        }\n                      },\n                      \"CreateUserGroupRequest\": {\n                        \"fields\": {\n                          \"spec\": {\n                            \"type\": \"temporal.api.cloud.identity.v1.UserGroupSpec\",\n                            \"id\": 1\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        }\n                      },\n                      \"CreateUserGroupResponse\": {\n                        \"fields\": {\n                          \"groupId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"group_id\"\n                          },\n                          \"asyncOperation\": {\n                            \"type\": \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            \"id\": 2,\n                            \"protoName\": \"async_operation\"\n                          }\n                        }\n                      },\n                      \"UpdateUserGroupRequest\": {\n                        \"fields\": {\n                          \"groupId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"group_id\"\n                          },\n                          \"spec\": {\n                            \"type\": \"temporal.api.cloud.identity.v1.UserGroupSpec\",\n                            \"id\": 2\n                          },\n                          \"resourceVersion\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"resource_version\"\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 4,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        }\n                      },\n                      \"UpdateUserGroupResponse\": {\n                        \"fields\": {\n                          \"asyncOperation\": {\n                            \"type\": \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            \"id\": 1,\n                            \"protoName\": \"async_operation\"\n                          }\n                        }\n                      },\n                      \"DeleteUserGroupRequest\": {\n                        \"fields\": {\n                          \"groupId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"group_id\"\n                          },\n                          \"resourceVersion\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"resource_version\"\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        }\n                      },\n                      \"DeleteUserGroupResponse\": {\n                        \"fields\": {\n                          \"asyncOperation\": {\n                            \"type\": \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            \"id\": 1,\n                            \"protoName\": \"async_operation\"\n                          }\n                        }\n                      },\n                      \"SetUserGroupNamespaceAccessRequest\": {\n                        \"fields\": {\n                          \"namespace\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"groupId\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"group_id\"\n                          },\n                          \"access\": {\n                            \"type\": \"temporal.api.cloud.identity.v1.NamespaceAccess\",\n                            \"id\": 3\n                          },\n                          \"resourceVersion\": {\n                            \"type\": \"string\",\n                            \"id\": 4,\n                            \"protoName\": \"resource_version\"\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 5,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        }\n                      },\n                      \"SetUserGroupNamespaceAccessResponse\": {\n                        \"fields\": {\n                          \"asyncOperation\": {\n                            \"type\": \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            \"id\": 1,\n                            \"protoName\": \"async_operation\"\n                          }\n                        }\n                      },\n                      \"AddUserGroupMemberRequest\": {\n                        \"fields\": {\n                          \"groupId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"group_id\"\n                          },\n                          \"memberId\": {\n                            \"type\": \"temporal.api.cloud.identity.v1.UserGroupMemberId\",\n                            \"id\": 2,\n                            \"protoName\": \"member_id\"\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        }\n                      },\n                      \"AddUserGroupMemberResponse\": {\n                        \"fields\": {\n                          \"asyncOperation\": {\n                            \"type\": \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            \"id\": 1,\n                            \"protoName\": \"async_operation\"\n                          }\n                        }\n                      },\n                      \"RemoveUserGroupMemberRequest\": {\n                        \"fields\": {\n                          \"groupId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"group_id\"\n                          },\n                          \"memberId\": {\n                            \"type\": \"temporal.api.cloud.identity.v1.UserGroupMemberId\",\n                            \"id\": 2,\n                            \"protoName\": \"member_id\"\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        }\n                      },\n                      \"RemoveUserGroupMemberResponse\": {\n                        \"fields\": {\n                          \"asyncOperation\": {\n                            \"type\": \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            \"id\": 1,\n                            \"protoName\": \"async_operation\"\n                          }\n                        }\n                      },\n                      \"GetUserGroupMembersRequest\": {\n                        \"fields\": {\n                          \"pageSize\": {\n                            \"type\": \"int32\",\n                            \"id\": 1,\n                            \"protoName\": \"page_size\"\n                          },\n                          \"pageToken\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"page_token\"\n                          },\n                          \"groupId\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"group_id\"\n                          }\n                        }\n                      },\n                      \"GetUserGroupMembersResponse\": {\n                        \"fields\": {\n                          \"members\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"temporal.api.cloud.identity.v1.UserGroupMember\",\n                            \"id\": 1\n                          },\n                          \"nextPageToken\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"next_page_token\"\n                          }\n                        }\n                      },\n                      \"CreateServiceAccountRequest\": {\n                        \"fields\": {\n                          \"spec\": {\n                            \"type\": \"temporal.api.cloud.identity.v1.ServiceAccountSpec\",\n                            \"id\": 1\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        }\n                      },\n                      \"CreateServiceAccountResponse\": {\n                        \"fields\": {\n                          \"serviceAccountId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"service_account_id\"\n                          },\n                          \"asyncOperation\": {\n                            \"type\": \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            \"id\": 2,\n                            \"protoName\": \"async_operation\"\n                          }\n                        }\n                      },\n                      \"GetServiceAccountRequest\": {\n                        \"fields\": {\n                          \"serviceAccountId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"service_account_id\"\n                          }\n                        }\n                      },\n                      \"GetServiceAccountResponse\": {\n                        \"fields\": {\n                          \"serviceAccount\": {\n                            \"type\": \"temporal.api.cloud.identity.v1.ServiceAccount\",\n                            \"id\": 1,\n                            \"protoName\": \"service_account\"\n                          }\n                        }\n                      },\n                      \"GetServiceAccountsRequest\": {\n                        \"fields\": {\n                          \"pageSize\": {\n                            \"type\": \"int32\",\n                            \"id\": 1,\n                            \"protoName\": \"page_size\"\n                          },\n                          \"pageToken\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"page_token\"\n                          }\n                        }\n                      },\n                      \"GetServiceAccountsResponse\": {\n                        \"fields\": {\n                          \"serviceAccount\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"temporal.api.cloud.identity.v1.ServiceAccount\",\n                            \"id\": 1,\n                            \"protoName\": \"service_account\"\n                          },\n                          \"nextPageToken\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"next_page_token\"\n                          }\n                        }\n                      },\n                      \"UpdateServiceAccountRequest\": {\n                        \"fields\": {\n                          \"serviceAccountId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"service_account_id\"\n                          },\n                          \"spec\": {\n                            \"type\": \"temporal.api.cloud.identity.v1.ServiceAccountSpec\",\n                            \"id\": 2\n                          },\n                          \"resourceVersion\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"resource_version\"\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 4,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        }\n                      },\n                      \"UpdateServiceAccountResponse\": {\n                        \"fields\": {\n                          \"asyncOperation\": {\n                            \"type\": \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            \"id\": 1,\n                            \"protoName\": \"async_operation\"\n                          }\n                        }\n                      },\n                      \"SetServiceAccountNamespaceAccessRequest\": {\n                        \"fields\": {\n                          \"serviceAccountId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"service_account_id\"\n                          },\n                          \"namespace\": {\n                            \"type\": \"string\",\n                            \"id\": 2\n                          },\n                          \"access\": {\n                            \"type\": \"temporal.api.cloud.identity.v1.NamespaceAccess\",\n                            \"id\": 3\n                          },\n                          \"resourceVersion\": {\n                            \"type\": \"string\",\n                            \"id\": 4,\n                            \"protoName\": \"resource_version\"\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 5,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        }\n                      },\n                      \"SetServiceAccountNamespaceAccessResponse\": {\n                        \"fields\": {\n                          \"asyncOperation\": {\n                            \"type\": \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            \"id\": 1,\n                            \"protoName\": \"async_operation\"\n                          }\n                        }\n                      },\n                      \"DeleteServiceAccountRequest\": {\n                        \"fields\": {\n                          \"serviceAccountId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"service_account_id\"\n                          },\n                          \"resourceVersion\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"resource_version\"\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        }\n                      },\n                      \"DeleteServiceAccountResponse\": {\n                        \"fields\": {\n                          \"asyncOperation\": {\n                            \"type\": \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            \"id\": 1,\n                            \"protoName\": \"async_operation\"\n                          }\n                        }\n                      },\n                      \"GetUsageRequest\": {\n                        \"fields\": {\n                          \"startTimeInclusive\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 1,\n                            \"protoName\": \"start_time_inclusive\"\n                          },\n                          \"endTimeExclusive\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 2,\n                            \"protoName\": \"end_time_exclusive\"\n                          },\n                          \"pageSize\": {\n                            \"type\": \"int32\",\n                            \"id\": 3,\n                            \"protoName\": \"page_size\"\n                          },\n                          \"pageToken\": {\n                            \"type\": \"string\",\n                            \"id\": 4,\n                            \"protoName\": \"page_token\"\n                          }\n                        }\n                      },\n                      \"GetUsageResponse\": {\n                        \"fields\": {\n                          \"summaries\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"temporal.api.cloud.usage.v1.Summary\",\n                            \"id\": 1\n                          },\n                          \"nextPageToken\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"next_page_token\"\n                          }\n                        }\n                      },\n                      \"GetAccountRequest\": {\n                        \"fields\": {}\n                      },\n                      \"GetAccountResponse\": {\n                        \"fields\": {\n                          \"account\": {\n                            \"type\": \"temporal.api.cloud.account.v1.Account\",\n                            \"id\": 1\n                          }\n                        }\n                      },\n                      \"UpdateAccountRequest\": {\n                        \"fields\": {\n                          \"spec\": {\n                            \"type\": \"temporal.api.cloud.account.v1.AccountSpec\",\n                            \"id\": 1\n                          },\n                          \"resourceVersion\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"resource_version\"\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        }\n                      },\n                      \"UpdateAccountResponse\": {\n                        \"fields\": {\n                          \"asyncOperation\": {\n                            \"type\": \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            \"id\": 1,\n                            \"protoName\": \"async_operation\"\n                          }\n                        }\n                      },\n                      \"CreateNamespaceExportSinkRequest\": {\n                        \"fields\": {\n                          \"namespace\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"spec\": {\n                            \"type\": \"temporal.api.cloud.namespace.v1.ExportSinkSpec\",\n                            \"id\": 2\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        }\n                      },\n                      \"CreateNamespaceExportSinkResponse\": {\n                        \"fields\": {\n                          \"asyncOperation\": {\n                            \"type\": \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            \"id\": 1,\n                            \"protoName\": \"async_operation\"\n                          }\n                        }\n                      },\n                      \"GetNamespaceExportSinkRequest\": {\n                        \"fields\": {\n                          \"namespace\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"name\": {\n                            \"type\": \"string\",\n                            \"id\": 2\n                          }\n                        }\n                      },\n                      \"GetNamespaceExportSinkResponse\": {\n                        \"fields\": {\n                          \"sink\": {\n                            \"type\": \"temporal.api.cloud.namespace.v1.ExportSink\",\n                            \"id\": 1\n                          }\n                        }\n                      },\n                      \"GetNamespaceExportSinksRequest\": {\n                        \"fields\": {\n                          \"namespace\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"pageSize\": {\n                            \"type\": \"int32\",\n                            \"id\": 2,\n                            \"protoName\": \"page_size\"\n                          },\n                          \"pageToken\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"page_token\"\n                          }\n                        }\n                      },\n                      \"GetNamespaceExportSinksResponse\": {\n                        \"fields\": {\n                          \"sinks\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"temporal.api.cloud.namespace.v1.ExportSink\",\n                            \"id\": 1\n                          },\n                          \"nextPageToken\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"next_page_token\"\n                          }\n                        }\n                      },\n                      \"UpdateNamespaceExportSinkRequest\": {\n                        \"fields\": {\n                          \"namespace\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"spec\": {\n                            \"type\": \"temporal.api.cloud.namespace.v1.ExportSinkSpec\",\n                            \"id\": 2\n                          },\n                          \"resourceVersion\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"resource_version\"\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 4,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        }\n                      },\n                      \"UpdateNamespaceExportSinkResponse\": {\n                        \"fields\": {\n                          \"asyncOperation\": {\n                            \"type\": \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            \"id\": 1,\n                            \"protoName\": \"async_operation\"\n                          }\n                        }\n                      },\n                      \"DeleteNamespaceExportSinkRequest\": {\n                        \"fields\": {\n                          \"namespace\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"name\": {\n                            \"type\": \"string\",\n                            \"id\": 2\n                          },\n                          \"resourceVersion\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"resource_version\"\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 4,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        }\n                      },\n                      \"DeleteNamespaceExportSinkResponse\": {\n                        \"fields\": {\n                          \"asyncOperation\": {\n                            \"type\": \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            \"id\": 1,\n                            \"protoName\": \"async_operation\"\n                          }\n                        }\n                      },\n                      \"ValidateNamespaceExportSinkRequest\": {\n                        \"fields\": {\n                          \"namespace\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"spec\": {\n                            \"type\": \"temporal.api.cloud.namespace.v1.ExportSinkSpec\",\n                            \"id\": 2\n                          }\n                        }\n                      },\n                      \"ValidateNamespaceExportSinkResponse\": {\n                        \"fields\": {}\n                      },\n                      \"UpdateNamespaceTagsRequest\": {\n                        \"fields\": {\n                          \"namespace\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"tagsToUpsert\": {\n                            \"keyType\": \"string\",\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"tags_to_upsert\"\n                          },\n                          \"tagsToRemove\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"tags_to_remove\"\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 4,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        }\n                      },\n                      \"UpdateNamespaceTagsResponse\": {\n                        \"fields\": {\n                          \"asyncOperation\": {\n                            \"type\": \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            \"id\": 1,\n                            \"protoName\": \"async_operation\"\n                          }\n                        }\n                      },\n                      \"CreateConnectivityRuleRequest\": {\n                        \"fields\": {\n                          \"spec\": {\n                            \"type\": \"temporal.api.cloud.connectivityrule.v1.ConnectivityRuleSpec\",\n                            \"id\": 1\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        }\n                      },\n                      \"CreateConnectivityRuleResponse\": {\n                        \"fields\": {\n                          \"connectivityRuleId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"connectivity_rule_id\"\n                          },\n                          \"asyncOperation\": {\n                            \"type\": \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            \"id\": 2,\n                            \"protoName\": \"async_operation\"\n                          }\n                        }\n                      },\n                      \"GetConnectivityRuleRequest\": {\n                        \"fields\": {\n                          \"connectivityRuleId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"connectivity_rule_id\"\n                          }\n                        }\n                      },\n                      \"GetConnectivityRuleResponse\": {\n                        \"fields\": {\n                          \"connectivityRule\": {\n                            \"type\": \"temporal.api.cloud.connectivityrule.v1.ConnectivityRule\",\n                            \"id\": 1,\n                            \"protoName\": \"connectivity_rule\"\n                          }\n                        }\n                      },\n                      \"GetConnectivityRulesRequest\": {\n                        \"fields\": {\n                          \"pageSize\": {\n                            \"type\": \"int32\",\n                            \"id\": 1,\n                            \"protoName\": \"page_size\"\n                          },\n                          \"pageToken\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"page_token\"\n                          },\n                          \"namespace\": {\n                            \"type\": \"string\",\n                            \"id\": 3\n                          }\n                        }\n                      },\n                      \"GetConnectivityRulesResponse\": {\n                        \"fields\": {\n                          \"connectivityRules\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"temporal.api.cloud.connectivityrule.v1.ConnectivityRule\",\n                            \"id\": 1,\n                            \"protoName\": \"connectivity_rules\"\n                          },\n                          \"nextPageToken\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"next_page_token\"\n                          }\n                        }\n                      },\n                      \"DeleteConnectivityRuleRequest\": {\n                        \"fields\": {\n                          \"connectivityRuleId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"connectivity_rule_id\"\n                          },\n                          \"resourceVersion\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"resource_version\"\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        }\n                      },\n                      \"DeleteConnectivityRuleResponse\": {\n                        \"fields\": {\n                          \"asyncOperation\": {\n                            \"type\": \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            \"id\": 1,\n                            \"protoName\": \"async_operation\"\n                          }\n                        }\n                      },\n                      \"GetAuditLogsRequest\": {\n                        \"fields\": {\n                          \"pageSize\": {\n                            \"type\": \"int32\",\n                            \"id\": 1,\n                            \"protoName\": \"page_size\"\n                          },\n                          \"pageToken\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"page_token\"\n                          },\n                          \"startTimeInclusive\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 3,\n                            \"protoName\": \"start_time_inclusive\"\n                          },\n                          \"endTimeExclusive\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 4,\n                            \"protoName\": \"end_time_exclusive\"\n                          }\n                        }\n                      },\n                      \"GetAuditLogsResponse\": {\n                        \"fields\": {\n                          \"logs\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"temporal.api.cloud.auditlog.v1.LogRecord\",\n                            \"id\": 1\n                          },\n                          \"nextPageToken\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"next_page_token\"\n                          }\n                        }\n                      },\n                      \"ValidateAccountAuditLogSinkRequest\": {\n                        \"fields\": {\n                          \"spec\": {\n                            \"type\": \"temporal.api.cloud.account.v1.AuditLogSinkSpec\",\n                            \"id\": 1\n                          }\n                        }\n                      },\n                      \"ValidateAccountAuditLogSinkResponse\": {\n                        \"fields\": {}\n                      },\n                      \"CreateAccountAuditLogSinkRequest\": {\n                        \"fields\": {\n                          \"spec\": {\n                            \"type\": \"temporal.api.cloud.account.v1.AuditLogSinkSpec\",\n                            \"id\": 1\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        }\n                      },\n                      \"CreateAccountAuditLogSinkResponse\": {\n                        \"fields\": {\n                          \"asyncOperation\": {\n                            \"type\": \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            \"id\": 1,\n                            \"protoName\": \"async_operation\"\n                          }\n                        }\n                      },\n                      \"GetAccountAuditLogSinkRequest\": {\n                        \"fields\": {\n                          \"name\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          }\n                        }\n                      },\n                      \"GetAccountAuditLogSinkResponse\": {\n                        \"fields\": {\n                          \"sink\": {\n                            \"type\": \"temporal.api.cloud.account.v1.AuditLogSink\",\n                            \"id\": 1\n                          }\n                        }\n                      },\n                      \"GetAccountAuditLogSinksRequest\": {\n                        \"fields\": {\n                          \"pageSize\": {\n                            \"type\": \"int32\",\n                            \"id\": 1,\n                            \"protoName\": \"page_size\"\n                          },\n                          \"pageToken\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"page_token\"\n                          }\n                        }\n                      },\n                      \"GetAccountAuditLogSinksResponse\": {\n                        \"fields\": {\n                          \"sinks\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"temporal.api.cloud.account.v1.AuditLogSink\",\n                            \"id\": 1\n                          },\n                          \"nextPageToken\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"next_page_token\"\n                          }\n                        }\n                      },\n                      \"UpdateAccountAuditLogSinkRequest\": {\n                        \"fields\": {\n                          \"spec\": {\n                            \"type\": \"temporal.api.cloud.account.v1.AuditLogSinkSpec\",\n                            \"id\": 1\n                          },\n                          \"resourceVersion\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"resource_version\"\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        }\n                      },\n                      \"UpdateAccountAuditLogSinkResponse\": {\n                        \"fields\": {\n                          \"asyncOperation\": {\n                            \"type\": \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            \"id\": 1,\n                            \"protoName\": \"async_operation\"\n                          }\n                        }\n                      },\n                      \"DeleteAccountAuditLogSinkRequest\": {\n                        \"fields\": {\n                          \"name\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"resourceVersion\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"resource_version\"\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        }\n                      },\n                      \"DeleteAccountAuditLogSinkResponse\": {\n                        \"fields\": {\n                          \"asyncOperation\": {\n                            \"type\": \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            \"id\": 1,\n                            \"protoName\": \"async_operation\"\n                          }\n                        }\n                      },\n                      \"GetNamespaceCapacityInfoRequest\": {\n                        \"fields\": {\n                          \"namespace\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          }\n                        }\n                      },\n                      \"GetNamespaceCapacityInfoResponse\": {\n                        \"fields\": {\n                          \"capacityInfo\": {\n                            \"type\": \"temporal.api.cloud.namespace.v1.NamespaceCapacityInfo\",\n                            \"id\": 1,\n                            \"protoName\": \"capacity_info\"\n                          }\n                        }\n                      },\n                      \"CreateBillingReportRequest\": {\n                        \"fields\": {\n                          \"spec\": {\n                            \"type\": \"temporal.api.cloud.billing.v1.BillingReportSpec\",\n                            \"id\": 1\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        }\n                      },\n                      \"CreateBillingReportResponse\": {\n                        \"fields\": {\n                          \"billingReportId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"billing_report_id\"\n                          },\n                          \"asyncOperation\": {\n                            \"type\": \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            \"id\": 2,\n                            \"protoName\": \"async_operation\"\n                          }\n                        }\n                      },\n                      \"GetBillingReportRequest\": {\n                        \"fields\": {\n                          \"billingReportId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"billing_report_id\"\n                          }\n                        }\n                      },\n                      \"GetBillingReportResponse\": {\n                        \"fields\": {\n                          \"billingReport\": {\n                            \"type\": \"temporal.api.cloud.billing.v1.BillingReport\",\n                            \"id\": 1,\n                            \"protoName\": \"billing_report\"\n                          }\n                        }\n                      },\n                      \"GetCustomRolesRequest\": {\n                        \"fields\": {\n                          \"pageSize\": {\n                            \"type\": \"int32\",\n                            \"id\": 1,\n                            \"protoName\": \"page_size\"\n                          },\n                          \"pageToken\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"page_token\"\n                          }\n                        }\n                      },\n                      \"GetCustomRolesResponse\": {\n                        \"fields\": {\n                          \"customRoles\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"temporal.api.cloud.identity.v1.CustomRole\",\n                            \"id\": 1,\n                            \"protoName\": \"custom_roles\"\n                          },\n                          \"nextPageToken\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"next_page_token\"\n                          }\n                        }\n                      },\n                      \"GetCustomRoleRequest\": {\n                        \"fields\": {\n                          \"roleId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"role_id\"\n                          }\n                        }\n                      },\n                      \"GetCustomRoleResponse\": {\n                        \"fields\": {\n                          \"customRole\": {\n                            \"type\": \"temporal.api.cloud.identity.v1.CustomRole\",\n                            \"id\": 1,\n                            \"protoName\": \"custom_role\"\n                          }\n                        }\n                      },\n                      \"CreateCustomRoleRequest\": {\n                        \"fields\": {\n                          \"spec\": {\n                            \"type\": \"temporal.api.cloud.identity.v1.CustomRoleSpec\",\n                            \"id\": 1\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        }\n                      },\n                      \"CreateCustomRoleResponse\": {\n                        \"fields\": {\n                          \"roleId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"role_id\"\n                          },\n                          \"asyncOperation\": {\n                            \"type\": \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            \"id\": 2,\n                            \"protoName\": \"async_operation\"\n                          }\n                        }\n                      },\n                      \"UpdateCustomRoleRequest\": {\n                        \"fields\": {\n                          \"roleId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"role_id\"\n                          },\n                          \"spec\": {\n                            \"type\": \"temporal.api.cloud.identity.v1.CustomRoleSpec\",\n                            \"id\": 2\n                          },\n                          \"resourceVersion\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"resource_version\"\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 4,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        }\n                      },\n                      \"UpdateCustomRoleResponse\": {\n                        \"fields\": {\n                          \"asyncOperation\": {\n                            \"type\": \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            \"id\": 1,\n                            \"protoName\": \"async_operation\"\n                          }\n                        }\n                      },\n                      \"DeleteCustomRoleRequest\": {\n                        \"fields\": {\n                          \"roleId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"role_id\"\n                          },\n                          \"resourceVersion\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"resource_version\"\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        }\n                      },\n                      \"DeleteCustomRoleResponse\": {\n                        \"fields\": {\n                          \"asyncOperation\": {\n                            \"type\": \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            \"id\": 1,\n                            \"protoName\": \"async_operation\"\n                          }\n                        }\n                      },\n                      \"GetUserNamespaceAssignmentsRequest\": {\n                        \"fields\": {\n                          \"namespace\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"pageSize\": {\n                            \"type\": \"int32\",\n                            \"id\": 2,\n                            \"protoName\": \"page_size\"\n                          },\n                          \"pageToken\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"page_token\"\n                          }\n                        }\n                      },\n                      \"GetUserNamespaceAssignmentsResponse\": {\n                        \"fields\": {\n                          \"users\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"temporal.api.cloud.identity.v1.UserNamespaceAssignment\",\n                            \"id\": 1\n                          },\n                          \"nextPageToken\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"next_page_token\"\n                          }\n                        }\n                      },\n                      \"GetServiceAccountNamespaceAssignmentsRequest\": {\n                        \"fields\": {\n                          \"namespace\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"pageSize\": {\n                            \"type\": \"int32\",\n                            \"id\": 2,\n                            \"protoName\": \"page_size\"\n                          },\n                          \"pageToken\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"page_token\"\n                          }\n                        }\n                      },\n                      \"GetServiceAccountNamespaceAssignmentsResponse\": {\n                        \"fields\": {\n                          \"serviceAccounts\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"temporal.api.cloud.identity.v1.ServiceAccountNamespaceAssignment\",\n                            \"id\": 1,\n                            \"protoName\": \"service_accounts\"\n                          },\n                          \"nextPageToken\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"next_page_token\"\n                          }\n                        }\n                      },\n                      \"GetUserGroupNamespaceAssignmentsRequest\": {\n                        \"fields\": {\n                          \"namespace\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"pageSize\": {\n                            \"type\": \"int32\",\n                            \"id\": 2,\n                            \"protoName\": \"page_size\"\n                          },\n                          \"pageToken\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"page_token\"\n                          }\n                        }\n                      },\n                      \"GetUserGroupNamespaceAssignmentsResponse\": {\n                        \"fields\": {\n                          \"groups\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"temporal.api.cloud.identity.v1.UserGroupNamespaceAssignment\",\n                            \"id\": 1\n                          },\n                          \"nextPageToken\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"next_page_token\"\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n              },\n              \"operation\": {\n                \"nested\": {\n                  \"v1\": {\n                    \"options\": {\n                      \"go_package\": \"go.temporal.io/api/cloud/operation/v1;operation\",\n                      \"java_package\": \"io.temporal.api.cloud.operation.v1\",\n                      \"java_multiple_files\": true,\n                      \"java_outer_classname\": \"MessageProto\",\n                      \"ruby_package\": \"Temporalio::Api::Cloud::Operation::V1\",\n                      \"csharp_namespace\": \"Temporalio.Api.Cloud.Operation.V1\"\n                    },\n                    \"nested\": {\n                      \"AsyncOperation\": {\n                        \"fields\": {\n                          \"id\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"stateDeprecated\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"state_deprecated\",\n                            \"options\": {\n                              \"deprecated\": true\n                            }\n                          },\n                          \"state\": {\n                            \"type\": \"State\",\n                            \"id\": 9\n                          },\n                          \"checkDuration\": {\n                            \"type\": \"google.protobuf.Duration\",\n                            \"id\": 3,\n                            \"protoName\": \"check_duration\"\n                          },\n                          \"operationType\": {\n                            \"type\": \"string\",\n                            \"id\": 4,\n                            \"protoName\": \"operation_type\"\n                          },\n                          \"operationInput\": {\n                            \"type\": \"google.protobuf.Any\",\n                            \"id\": 5,\n                            \"protoName\": \"operation_input\"\n                          },\n                          \"failureReason\": {\n                            \"type\": \"string\",\n                            \"id\": 6,\n                            \"protoName\": \"failure_reason\"\n                          },\n                          \"startedTime\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 7,\n                            \"protoName\": \"started_time\"\n                          },\n                          \"finishedTime\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 8,\n                            \"protoName\": \"finished_time\"\n                          }\n                        },\n                        \"nested\": {\n                          \"State\": {\n                            \"values\": {\n                              \"STATE_UNSPECIFIED\": 0,\n                              \"STATE_PENDING\": 1,\n                              \"STATE_IN_PROGRESS\": 2,\n                              \"STATE_FAILED\": 3,\n                              \"STATE_CANCELLED\": 4,\n                              \"STATE_FULFILLED\": 5,\n                              \"STATE_REJECTED\": 6\n                            }\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n              },\n              \"identity\": {\n                \"nested\": {\n                  \"v1\": {\n                    \"options\": {\n                      \"go_package\": \"go.temporal.io/api/cloud/identity/v1;identity\",\n                      \"java_package\": \"io.temporal.api.cloud.identity.v1\",\n                      \"java_multiple_files\": true,\n                      \"java_outer_classname\": \"MessageProto\",\n                      \"ruby_package\": \"Temporalio::Api::Cloud::Identity::V1\",\n                      \"csharp_namespace\": \"Temporalio.Api.Cloud.Identity.V1\"\n                    },\n                    \"nested\": {\n                      \"AccountAccess\": {\n                        \"fields\": {\n                          \"roleDeprecated\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"role_deprecated\",\n                            \"options\": {\n                              \"deprecated\": true\n                            }\n                          },\n                          \"role\": {\n                            \"type\": \"Role\",\n                            \"id\": 2\n                          },\n                          \"customRoles\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"custom_roles\"\n                          }\n                        },\n                        \"nested\": {\n                          \"Role\": {\n                            \"values\": {\n                              \"ROLE_UNSPECIFIED\": 0,\n                              \"ROLE_OWNER\": 1,\n                              \"ROLE_ADMIN\": 2,\n                              \"ROLE_DEVELOPER\": 3,\n                              \"ROLE_FINANCE_ADMIN\": 4,\n                              \"ROLE_READ\": 5,\n                              \"ROLE_METRICS_READ\": 6\n                            }\n                          }\n                        }\n                      },\n                      \"NamespaceAccess\": {\n                        \"fields\": {\n                          \"permissionDeprecated\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"permission_deprecated\",\n                            \"options\": {\n                              \"deprecated\": true\n                            }\n                          },\n                          \"permission\": {\n                            \"type\": \"Permission\",\n                            \"id\": 2\n                          }\n                        },\n                        \"nested\": {\n                          \"Permission\": {\n                            \"values\": {\n                              \"PERMISSION_UNSPECIFIED\": 0,\n                              \"PERMISSION_ADMIN\": 1,\n                              \"PERMISSION_WRITE\": 2,\n                              \"PERMISSION_READ\": 3\n                            }\n                          }\n                        }\n                      },\n                      \"OwnerType\": {\n                        \"values\": {\n                          \"OWNER_TYPE_UNSPECIFIED\": 0,\n                          \"OWNER_TYPE_USER\": 1,\n                          \"OWNER_TYPE_SERVICE_ACCOUNT\": 2\n                        }\n                      },\n                      \"Access\": {\n                        \"fields\": {\n                          \"accountAccess\": {\n                            \"type\": \"AccountAccess\",\n                            \"id\": 1,\n                            \"protoName\": \"account_access\"\n                          },\n                          \"namespaceAccesses\": {\n                            \"keyType\": \"string\",\n                            \"type\": \"NamespaceAccess\",\n                            \"id\": 2,\n                            \"protoName\": \"namespace_accesses\"\n                          },\n                          \"customRolesDeprecated\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"string\",\n                            \"id\": 4,\n                            \"protoName\": \"custom_roles_deprecated\",\n                            \"options\": {\n                              \"deprecated\": true\n                            }\n                          }\n                        }\n                      },\n                      \"NamespaceScopedAccess\": {\n                        \"fields\": {\n                          \"namespace\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"access\": {\n                            \"type\": \"NamespaceAccess\",\n                            \"id\": 2\n                          }\n                        }\n                      },\n                      \"UserSpec\": {\n                        \"fields\": {\n                          \"email\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"access\": {\n                            \"type\": \"Access\",\n                            \"id\": 2\n                          }\n                        }\n                      },\n                      \"Invitation\": {\n                        \"fields\": {\n                          \"createdTime\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 1,\n                            \"protoName\": \"created_time\"\n                          },\n                          \"expiredTime\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 2,\n                            \"protoName\": \"expired_time\"\n                          }\n                        }\n                      },\n                      \"User\": {\n                        \"fields\": {\n                          \"id\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"resourceVersion\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"resource_version\"\n                          },\n                          \"spec\": {\n                            \"type\": \"UserSpec\",\n                            \"id\": 3\n                          },\n                          \"stateDeprecated\": {\n                            \"type\": \"string\",\n                            \"id\": 4,\n                            \"protoName\": \"state_deprecated\",\n                            \"options\": {\n                              \"deprecated\": true\n                            }\n                          },\n                          \"state\": {\n                            \"type\": \"temporal.api.cloud.resource.v1.ResourceState\",\n                            \"id\": 9\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 5,\n                            \"protoName\": \"async_operation_id\"\n                          },\n                          \"invitation\": {\n                            \"type\": \"Invitation\",\n                            \"id\": 6\n                          },\n                          \"createdTime\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 7,\n                            \"protoName\": \"created_time\"\n                          },\n                          \"lastModifiedTime\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 8,\n                            \"protoName\": \"last_modified_time\"\n                          }\n                        }\n                      },\n                      \"GoogleGroupSpec\": {\n                        \"fields\": {\n                          \"emailAddress\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"email_address\"\n                          }\n                        }\n                      },\n                      \"SCIMGroupSpec\": {\n                        \"fields\": {\n                          \"idpId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"idp_id\"\n                          }\n                        }\n                      },\n                      \"CloudGroupSpec\": {\n                        \"fields\": {}\n                      },\n                      \"UserGroupSpec\": {\n                        \"oneofs\": {\n                          \"groupType\": {\n                            \"oneof\": [\n                              \"googleGroup\",\n                              \"scimGroup\",\n                              \"cloudGroup\"\n                            ]\n                          }\n                        },\n                        \"fields\": {\n                          \"displayName\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"display_name\"\n                          },\n                          \"access\": {\n                            \"type\": \"Access\",\n                            \"id\": 2\n                          },\n                          \"googleGroup\": {\n                            \"type\": \"GoogleGroupSpec\",\n                            \"id\": 3,\n                            \"protoName\": \"google_group\"\n                          },\n                          \"scimGroup\": {\n                            \"type\": \"SCIMGroupSpec\",\n                            \"id\": 4,\n                            \"protoName\": \"scim_group\"\n                          },\n                          \"cloudGroup\": {\n                            \"type\": \"CloudGroupSpec\",\n                            \"id\": 5,\n                            \"protoName\": \"cloud_group\"\n                          }\n                        }\n                      },\n                      \"UserGroup\": {\n                        \"fields\": {\n                          \"id\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"resourceVersion\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"resource_version\"\n                          },\n                          \"spec\": {\n                            \"type\": \"UserGroupSpec\",\n                            \"id\": 3\n                          },\n                          \"stateDeprecated\": {\n                            \"type\": \"string\",\n                            \"id\": 4,\n                            \"protoName\": \"state_deprecated\",\n                            \"options\": {\n                              \"deprecated\": true\n                            }\n                          },\n                          \"state\": {\n                            \"type\": \"temporal.api.cloud.resource.v1.ResourceState\",\n                            \"id\": 8\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 5,\n                            \"protoName\": \"async_operation_id\"\n                          },\n                          \"createdTime\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 6,\n                            \"protoName\": \"created_time\"\n                          },\n                          \"lastModifiedTime\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 7,\n                            \"protoName\": \"last_modified_time\"\n                          }\n                        }\n                      },\n                      \"UserGroupMemberId\": {\n                        \"oneofs\": {\n                          \"memberType\": {\n                            \"oneof\": [\n                              \"userId\"\n                            ]\n                          }\n                        },\n                        \"fields\": {\n                          \"userId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"user_id\"\n                          }\n                        }\n                      },\n                      \"UserGroupMember\": {\n                        \"fields\": {\n                          \"memberId\": {\n                            \"type\": \"UserGroupMemberId\",\n                            \"id\": 1,\n                            \"protoName\": \"member_id\"\n                          },\n                          \"createdTime\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 2,\n                            \"protoName\": \"created_time\"\n                          }\n                        }\n                      },\n                      \"ServiceAccount\": {\n                        \"fields\": {\n                          \"id\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"resourceVersion\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"resource_version\"\n                          },\n                          \"spec\": {\n                            \"type\": \"ServiceAccountSpec\",\n                            \"id\": 3\n                          },\n                          \"stateDeprecated\": {\n                            \"type\": \"string\",\n                            \"id\": 4,\n                            \"protoName\": \"state_deprecated\",\n                            \"options\": {\n                              \"deprecated\": true\n                            }\n                          },\n                          \"state\": {\n                            \"type\": \"temporal.api.cloud.resource.v1.ResourceState\",\n                            \"id\": 8\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 5,\n                            \"protoName\": \"async_operation_id\"\n                          },\n                          \"createdTime\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 6,\n                            \"protoName\": \"created_time\"\n                          },\n                          \"lastModifiedTime\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 7,\n                            \"protoName\": \"last_modified_time\"\n                          }\n                        }\n                      },\n                      \"ServiceAccountSpec\": {\n                        \"fields\": {\n                          \"name\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"access\": {\n                            \"type\": \"Access\",\n                            \"id\": 2\n                          },\n                          \"namespaceScopedAccess\": {\n                            \"type\": \"NamespaceScopedAccess\",\n                            \"id\": 4,\n                            \"protoName\": \"namespace_scoped_access\"\n                          },\n                          \"description\": {\n                            \"type\": \"string\",\n                            \"id\": 3\n                          }\n                        }\n                      },\n                      \"ApiKey\": {\n                        \"fields\": {\n                          \"id\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"resourceVersion\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"resource_version\"\n                          },\n                          \"spec\": {\n                            \"type\": \"ApiKeySpec\",\n                            \"id\": 3\n                          },\n                          \"stateDeprecated\": {\n                            \"type\": \"string\",\n                            \"id\": 4,\n                            \"protoName\": \"state_deprecated\",\n                            \"options\": {\n                              \"deprecated\": true\n                            }\n                          },\n                          \"state\": {\n                            \"type\": \"temporal.api.cloud.resource.v1.ResourceState\",\n                            \"id\": 8\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 5,\n                            \"protoName\": \"async_operation_id\"\n                          },\n                          \"createdTime\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 6,\n                            \"protoName\": \"created_time\"\n                          },\n                          \"lastModifiedTime\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 7,\n                            \"protoName\": \"last_modified_time\"\n                          }\n                        }\n                      },\n                      \"ApiKeySpec\": {\n                        \"fields\": {\n                          \"ownerId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"owner_id\"\n                          },\n                          \"ownerTypeDeprecated\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"owner_type_deprecated\",\n                            \"options\": {\n                              \"deprecated\": true\n                            }\n                          },\n                          \"ownerType\": {\n                            \"type\": \"OwnerType\",\n                            \"id\": 7,\n                            \"protoName\": \"owner_type\"\n                          },\n                          \"displayName\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"display_name\"\n                          },\n                          \"description\": {\n                            \"type\": \"string\",\n                            \"id\": 4\n                          },\n                          \"expiryTime\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 5,\n                            \"protoName\": \"expiry_time\"\n                          },\n                          \"disabled\": {\n                            \"type\": \"bool\",\n                            \"id\": 6\n                          }\n                        }\n                      },\n                      \"CustomRoleSpec\": {\n                        \"fields\": {\n                          \"name\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"description\": {\n                            \"type\": \"string\",\n                            \"id\": 2\n                          },\n                          \"permissions\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"Permission\",\n                            \"id\": 3\n                          }\n                        },\n                        \"nested\": {\n                          \"Resources\": {\n                            \"fields\": {\n                              \"resourceType\": {\n                                \"type\": \"string\",\n                                \"id\": 1,\n                                \"protoName\": \"resource_type\"\n                              },\n                              \"resourceIds\": {\n                                \"rule\": \"repeated\",\n                                \"type\": \"string\",\n                                \"id\": 2,\n                                \"protoName\": \"resource_ids\"\n                              },\n                              \"allowAll\": {\n                                \"type\": \"bool\",\n                                \"id\": 3,\n                                \"protoName\": \"allow_all\"\n                              }\n                            }\n                          },\n                          \"Permission\": {\n                            \"fields\": {\n                              \"resources\": {\n                                \"type\": \"Resources\",\n                                \"id\": 1\n                              },\n                              \"actions\": {\n                                \"rule\": \"repeated\",\n                                \"type\": \"string\",\n                                \"id\": 2\n                              }\n                            }\n                          }\n                        }\n                      },\n                      \"CustomRole\": {\n                        \"fields\": {\n                          \"id\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"resourceVersion\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"resource_version\"\n                          },\n                          \"spec\": {\n                            \"type\": \"CustomRoleSpec\",\n                            \"id\": 3\n                          },\n                          \"state\": {\n                            \"type\": \"temporal.api.cloud.resource.v1.ResourceState\",\n                            \"id\": 4\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 5,\n                            \"protoName\": \"async_operation_id\"\n                          },\n                          \"createdTime\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 6,\n                            \"protoName\": \"created_time\"\n                          },\n                          \"lastModifiedTime\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 7,\n                            \"protoName\": \"last_modified_time\"\n                          }\n                        }\n                      },\n                      \"UserNamespaceAssignment\": {\n                        \"fields\": {\n                          \"id\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"email\": {\n                            \"type\": \"string\",\n                            \"id\": 2\n                          },\n                          \"namespaceAccess\": {\n                            \"type\": \"NamespaceAccess\",\n                            \"id\": 3,\n                            \"protoName\": \"namespace_access\"\n                          },\n                          \"inheritedAccess\": {\n                            \"type\": \"bool\",\n                            \"id\": 4,\n                            \"protoName\": \"inherited_access\"\n                          },\n                          \"resourceVersion\": {\n                            \"type\": \"string\",\n                            \"id\": 5,\n                            \"protoName\": \"resource_version\"\n                          }\n                        }\n                      },\n                      \"ServiceAccountNamespaceAssignment\": {\n                        \"fields\": {\n                          \"id\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"name\": {\n                            \"type\": \"string\",\n                            \"id\": 2\n                          },\n                          \"namespaceAccess\": {\n                            \"type\": \"NamespaceAccess\",\n                            \"id\": 3,\n                            \"protoName\": \"namespace_access\"\n                          },\n                          \"inheritedAccess\": {\n                            \"type\": \"bool\",\n                            \"id\": 4,\n                            \"protoName\": \"inherited_access\"\n                          },\n                          \"resourceVersion\": {\n                            \"type\": \"string\",\n                            \"id\": 5,\n                            \"protoName\": \"resource_version\"\n                          }\n                        }\n                      },\n                      \"UserGroupNamespaceAssignment\": {\n                        \"fields\": {\n                          \"id\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"displayName\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"display_name\"\n                          },\n                          \"namespaceAccess\": {\n                            \"type\": \"NamespaceAccess\",\n                            \"id\": 3,\n                            \"protoName\": \"namespace_access\"\n                          },\n                          \"inheritedAccess\": {\n                            \"type\": \"bool\",\n                            \"id\": 4,\n                            \"protoName\": \"inherited_access\"\n                          },\n                          \"resourceVersion\": {\n                            \"type\": \"string\",\n                            \"id\": 5,\n                            \"protoName\": \"resource_version\"\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n              },\n              \"resource\": {\n                \"nested\": {\n                  \"v1\": {\n                    \"options\": {\n                      \"go_package\": \"go.temporal.io/api/cloud/resource/v1;resource\",\n                      \"java_package\": \"io.temporal.api.cloud.resource.v1\",\n                      \"java_multiple_files\": true,\n                      \"java_outer_classname\": \"MessageProto\",\n                      \"ruby_package\": \"Temporalio::Api::Cloud::Resource::V1\",\n                      \"csharp_namespace\": \"Temporalio.Api.Cloud.Resource.V1\"\n                    },\n                    \"nested\": {\n                      \"ResourceState\": {\n                        \"values\": {\n                          \"RESOURCE_STATE_UNSPECIFIED\": 0,\n                          \"RESOURCE_STATE_ACTIVATING\": 1,\n                          \"RESOURCE_STATE_ACTIVATION_FAILED\": 2,\n                          \"RESOURCE_STATE_ACTIVE\": 3,\n                          \"RESOURCE_STATE_UPDATING\": 4,\n                          \"RESOURCE_STATE_UPDATE_FAILED\": 5,\n                          \"RESOURCE_STATE_DELETING\": 6,\n                          \"RESOURCE_STATE_DELETE_FAILED\": 7,\n                          \"RESOURCE_STATE_DELETED\": 8,\n                          \"RESOURCE_STATE_SUSPENDED\": 9,\n                          \"RESOURCE_STATE_EXPIRED\": 10\n                        }\n                      }\n                    }\n                  }\n                }\n              },\n              \"namespace\": {\n                \"nested\": {\n                  \"v1\": {\n                    \"options\": {\n                      \"go_package\": \"go.temporal.io/api/cloud/namespace/v1;namespace\",\n                      \"java_package\": \"io.temporal.api.cloud.namespace.v1\",\n                      \"java_multiple_files\": true,\n                      \"java_outer_classname\": \"MessageProto\",\n                      \"ruby_package\": \"Temporalio::Api::Cloud::Namespace::V1\",\n                      \"csharp_namespace\": \"Temporalio.Api.Cloud.Namespace.V1\"\n                    },\n                    \"nested\": {\n                      \"CertificateFilterSpec\": {\n                        \"fields\": {\n                          \"commonName\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"common_name\"\n                          },\n                          \"organization\": {\n                            \"type\": \"string\",\n                            \"id\": 2\n                          },\n                          \"organizationalUnit\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"organizational_unit\"\n                          },\n                          \"subjectAlternativeName\": {\n                            \"type\": \"string\",\n                            \"id\": 4,\n                            \"protoName\": \"subject_alternative_name\"\n                          }\n                        }\n                      },\n                      \"MtlsAuthSpec\": {\n                        \"fields\": {\n                          \"acceptedClientCaDeprecated\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"accepted_client_ca_deprecated\",\n                            \"options\": {\n                              \"deprecated\": true\n                            }\n                          },\n                          \"acceptedClientCa\": {\n                            \"type\": \"bytes\",\n                            \"id\": 4,\n                            \"protoName\": \"accepted_client_ca\"\n                          },\n                          \"certificateFilters\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"CertificateFilterSpec\",\n                            \"id\": 2,\n                            \"protoName\": \"certificate_filters\"\n                          },\n                          \"enabled\": {\n                            \"type\": \"bool\",\n                            \"id\": 3\n                          }\n                        }\n                      },\n                      \"ApiKeyAuthSpec\": {\n                        \"fields\": {\n                          \"enabled\": {\n                            \"type\": \"bool\",\n                            \"id\": 1\n                          }\n                        }\n                      },\n                      \"LifecycleSpec\": {\n                        \"fields\": {\n                          \"enableDeleteProtection\": {\n                            \"type\": \"bool\",\n                            \"id\": 1,\n                            \"protoName\": \"enable_delete_protection\"\n                          }\n                        }\n                      },\n                      \"CodecServerSpec\": {\n                        \"fields\": {\n                          \"endpoint\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"passAccessToken\": {\n                            \"type\": \"bool\",\n                            \"id\": 2,\n                            \"protoName\": \"pass_access_token\"\n                          },\n                          \"includeCrossOriginCredentials\": {\n                            \"type\": \"bool\",\n                            \"id\": 3,\n                            \"protoName\": \"include_cross_origin_credentials\"\n                          },\n                          \"customErrorMessage\": {\n                            \"type\": \"CustomErrorMessage\",\n                            \"id\": 4,\n                            \"protoName\": \"custom_error_message\"\n                          }\n                        },\n                        \"nested\": {\n                          \"CustomErrorMessage\": {\n                            \"fields\": {\n                              \"default\": {\n                                \"type\": \"ErrorMessage\",\n                                \"id\": 1\n                              }\n                            },\n                            \"nested\": {\n                              \"ErrorMessage\": {\n                                \"fields\": {\n                                  \"message\": {\n                                    \"type\": \"string\",\n                                    \"id\": 1\n                                  },\n                                  \"link\": {\n                                    \"type\": \"string\",\n                                    \"id\": 2\n                                  }\n                                }\n                              }\n                            }\n                          }\n                        }\n                      },\n                      \"HighAvailabilitySpec\": {\n                        \"fields\": {\n                          \"disableManagedFailover\": {\n                            \"type\": \"bool\",\n                            \"id\": 1,\n                            \"protoName\": \"disable_managed_failover\"\n                          },\n                          \"disablePassivePollerForwarding\": {\n                            \"type\": \"bool\",\n                            \"id\": 2,\n                            \"protoName\": \"disable_passive_poller_forwarding\"\n                          }\n                        }\n                      },\n                      \"ReplicaSpec\": {\n                        \"fields\": {\n                          \"region\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          }\n                        }\n                      },\n                      \"Replica\": {\n                        \"fields\": {\n                          \"id\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"isPrimary\": {\n                            \"type\": \"bool\",\n                            \"id\": 2,\n                            \"protoName\": \"is_primary\"\n                          },\n                          \"state\": {\n                            \"type\": \"ReplicaState\",\n                            \"id\": 3\n                          },\n                          \"region\": {\n                            \"type\": \"string\",\n                            \"id\": 4\n                          }\n                        },\n                        \"nested\": {\n                          \"ReplicaState\": {\n                            \"values\": {\n                              \"REPLICA_STATE_UNSPECIFIED\": 0,\n                              \"REPLICA_STATE_ADDING\": 1,\n                              \"REPLICA_STATE_ACTIVE\": 2,\n                              \"REPLICA_STATE_REMOVING\": 3,\n                              \"REPLICA_STATE_FAILED\": 5\n                            }\n                          }\n                        }\n                      },\n                      \"CapacitySpec\": {\n                        \"oneofs\": {\n                          \"spec\": {\n                            \"oneof\": [\n                              \"onDemand\",\n                              \"provisioned\"\n                            ]\n                          }\n                        },\n                        \"fields\": {\n                          \"onDemand\": {\n                            \"type\": \"OnDemand\",\n                            \"id\": 1,\n                            \"protoName\": \"on_demand\"\n                          },\n                          \"provisioned\": {\n                            \"type\": \"Provisioned\",\n                            \"id\": 2\n                          }\n                        },\n                        \"nested\": {\n                          \"OnDemand\": {\n                            \"fields\": {}\n                          },\n                          \"Provisioned\": {\n                            \"fields\": {\n                              \"value\": {\n                                \"type\": \"double\",\n                                \"id\": 1\n                              }\n                            }\n                          }\n                        }\n                      },\n                      \"Capacity\": {\n                        \"oneofs\": {\n                          \"currentMode\": {\n                            \"oneof\": [\n                              \"onDemand\",\n                              \"provisioned\"\n                            ]\n                          }\n                        },\n                        \"fields\": {\n                          \"onDemand\": {\n                            \"type\": \"OnDemand\",\n                            \"id\": 1,\n                            \"protoName\": \"on_demand\"\n                          },\n                          \"provisioned\": {\n                            \"type\": \"Provisioned\",\n                            \"id\": 2\n                          },\n                          \"latestRequest\": {\n                            \"type\": \"Request\",\n                            \"id\": 3,\n                            \"protoName\": \"latest_request\"\n                          }\n                        },\n                        \"nested\": {\n                          \"OnDemand\": {\n                            \"fields\": {}\n                          },\n                          \"Provisioned\": {\n                            \"fields\": {\n                              \"currentValue\": {\n                                \"type\": \"double\",\n                                \"id\": 1,\n                                \"protoName\": \"current_value\"\n                              }\n                            }\n                          },\n                          \"Request\": {\n                            \"fields\": {\n                              \"state\": {\n                                \"type\": \"State\",\n                                \"id\": 1\n                              },\n                              \"startTime\": {\n                                \"type\": \"google.protobuf.Timestamp\",\n                                \"id\": 2,\n                                \"protoName\": \"start_time\"\n                              },\n                              \"endTime\": {\n                                \"type\": \"google.protobuf.Timestamp\",\n                                \"id\": 3,\n                                \"protoName\": \"end_time\"\n                              },\n                              \"asyncOperationId\": {\n                                \"type\": \"string\",\n                                \"id\": 4,\n                                \"protoName\": \"async_operation_id\"\n                              },\n                              \"spec\": {\n                                \"type\": \"CapacitySpec\",\n                                \"id\": 5\n                              }\n                            },\n                            \"nested\": {\n                              \"State\": {\n                                \"values\": {\n                                  \"STATE_CAPACITY_REQUEST_UNSPECIFIED\": 0,\n                                  \"STATE_CAPACITY_REQUEST_COMPLETED\": 1,\n                                  \"STATE_CAPACITY_REQUEST_IN_PROGRESS\": 2,\n                                  \"STATE_CAPACITY_REQUEST_FAILED\": 3\n                                }\n                              }\n                            }\n                          }\n                        }\n                      },\n                      \"FairnessSpec\": {\n                        \"fields\": {\n                          \"taskQueueFairnessEnabled\": {\n                            \"type\": \"bool\",\n                            \"id\": 1,\n                            \"protoName\": \"task_queue_fairness_enabled\"\n                          }\n                        }\n                      },\n                      \"NamespaceSpec\": {\n                        \"fields\": {\n                          \"name\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"regions\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"options\": {\n                              \"deprecated\": true\n                            }\n                          },\n                          \"retentionDays\": {\n                            \"type\": \"int32\",\n                            \"id\": 3,\n                            \"protoName\": \"retention_days\"\n                          },\n                          \"mtlsAuth\": {\n                            \"type\": \"MtlsAuthSpec\",\n                            \"id\": 4,\n                            \"protoName\": \"mtls_auth\"\n                          },\n                          \"apiKeyAuth\": {\n                            \"type\": \"ApiKeyAuthSpec\",\n                            \"id\": 7,\n                            \"protoName\": \"api_key_auth\"\n                          },\n                          \"customSearchAttributes\": {\n                            \"keyType\": \"string\",\n                            \"type\": \"string\",\n                            \"id\": 5,\n                            \"protoName\": \"custom_search_attributes\",\n                            \"options\": {\n                              \"deprecated\": true\n                            }\n                          },\n                          \"searchAttributes\": {\n                            \"keyType\": \"string\",\n                            \"type\": \"SearchAttributeType\",\n                            \"id\": 8,\n                            \"protoName\": \"search_attributes\"\n                          },\n                          \"codecServer\": {\n                            \"type\": \"CodecServerSpec\",\n                            \"id\": 6,\n                            \"protoName\": \"codec_server\"\n                          },\n                          \"lifecycle\": {\n                            \"type\": \"LifecycleSpec\",\n                            \"id\": 9\n                          },\n                          \"highAvailability\": {\n                            \"type\": \"HighAvailabilitySpec\",\n                            \"id\": 10,\n                            \"protoName\": \"high_availability\"\n                          },\n                          \"connectivityRuleIds\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"string\",\n                            \"id\": 11,\n                            \"protoName\": \"connectivity_rule_ids\"\n                          },\n                          \"capacitySpec\": {\n                            \"type\": \"CapacitySpec\",\n                            \"id\": 12,\n                            \"protoName\": \"capacity_spec\"\n                          },\n                          \"replicas\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"ReplicaSpec\",\n                            \"id\": 13\n                          },\n                          \"fairness\": {\n                            \"type\": \"FairnessSpec\",\n                            \"id\": 14\n                          }\n                        },\n                        \"nested\": {\n                          \"SearchAttributeType\": {\n                            \"values\": {\n                              \"SEARCH_ATTRIBUTE_TYPE_UNSPECIFIED\": 0,\n                              \"SEARCH_ATTRIBUTE_TYPE_TEXT\": 1,\n                              \"SEARCH_ATTRIBUTE_TYPE_KEYWORD\": 2,\n                              \"SEARCH_ATTRIBUTE_TYPE_INT\": 3,\n                              \"SEARCH_ATTRIBUTE_TYPE_DOUBLE\": 4,\n                              \"SEARCH_ATTRIBUTE_TYPE_BOOL\": 5,\n                              \"SEARCH_ATTRIBUTE_TYPE_DATETIME\": 6,\n                              \"SEARCH_ATTRIBUTE_TYPE_KEYWORD_LIST\": 7\n                            }\n                          }\n                        }\n                      },\n                      \"Endpoints\": {\n                        \"fields\": {\n                          \"webAddress\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"web_address\"\n                          },\n                          \"mtlsGrpcAddress\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"mtls_grpc_address\"\n                          },\n                          \"grpcAddress\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"grpc_address\"\n                          }\n                        }\n                      },\n                      \"Limits\": {\n                        \"fields\": {\n                          \"actionsPerSecondLimit\": {\n                            \"type\": \"int32\",\n                            \"id\": 1,\n                            \"protoName\": \"actions_per_second_limit\"\n                          }\n                        }\n                      },\n                      \"AWSPrivateLinkInfo\": {\n                        \"fields\": {\n                          \"allowedPrincipalArns\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"allowed_principal_arns\"\n                          },\n                          \"vpcEndpointServiceNames\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"vpc_endpoint_service_names\"\n                          }\n                        }\n                      },\n                      \"PrivateConnectivity\": {\n                        \"fields\": {\n                          \"region\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"awsPrivateLink\": {\n                            \"type\": \"AWSPrivateLinkInfo\",\n                            \"id\": 2,\n                            \"protoName\": \"aws_private_link\"\n                          }\n                        }\n                      },\n                      \"Namespace\": {\n                        \"fields\": {\n                          \"namespace\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"resourceVersion\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"resource_version\"\n                          },\n                          \"spec\": {\n                            \"type\": \"NamespaceSpec\",\n                            \"id\": 3\n                          },\n                          \"stateDeprecated\": {\n                            \"type\": \"string\",\n                            \"id\": 4,\n                            \"protoName\": \"state_deprecated\",\n                            \"options\": {\n                              \"deprecated\": true\n                            }\n                          },\n                          \"state\": {\n                            \"type\": \"temporal.api.cloud.resource.v1.ResourceState\",\n                            \"id\": 13\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 5,\n                            \"protoName\": \"async_operation_id\"\n                          },\n                          \"endpoints\": {\n                            \"type\": \"Endpoints\",\n                            \"id\": 6\n                          },\n                          \"activeRegion\": {\n                            \"type\": \"string\",\n                            \"id\": 7,\n                            \"protoName\": \"active_region\"\n                          },\n                          \"limits\": {\n                            \"type\": \"Limits\",\n                            \"id\": 8\n                          },\n                          \"privateConnectivities\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"PrivateConnectivity\",\n                            \"id\": 9,\n                            \"protoName\": \"private_connectivities\"\n                          },\n                          \"createdTime\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 10,\n                            \"protoName\": \"created_time\"\n                          },\n                          \"lastModifiedTime\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 11,\n                            \"protoName\": \"last_modified_time\"\n                          },\n                          \"regionStatus\": {\n                            \"keyType\": \"string\",\n                            \"type\": \"NamespaceRegionStatus\",\n                            \"id\": 12,\n                            \"protoName\": \"region_status\",\n                            \"options\": {\n                              \"deprecated\": true\n                            }\n                          },\n                          \"connectivityRules\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"temporal.api.cloud.connectivityrule.v1.ConnectivityRule\",\n                            \"id\": 14,\n                            \"protoName\": \"connectivity_rules\"\n                          },\n                          \"tags\": {\n                            \"keyType\": \"string\",\n                            \"type\": \"string\",\n                            \"id\": 15\n                          },\n                          \"capacity\": {\n                            \"type\": \"Capacity\",\n                            \"id\": 16\n                          },\n                          \"replicas\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"Replica\",\n                            \"id\": 18\n                          }\n                        }\n                      },\n                      \"NamespaceRegionStatus\": {\n                        \"fields\": {\n                          \"stateDeprecated\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"state_deprecated\",\n                            \"options\": {\n                              \"deprecated\": true\n                            }\n                          },\n                          \"state\": {\n                            \"type\": \"State\",\n                            \"id\": 3\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        },\n                        \"nested\": {\n                          \"State\": {\n                            \"values\": {\n                              \"STATE_UNSPECIFIED\": 0,\n                              \"STATE_ADDING\": 1,\n                              \"STATE_ACTIVE\": 2,\n                              \"STATE_PASSIVE\": 3,\n                              \"STATE_REMOVING\": 4,\n                              \"STATE_FAILED\": 5\n                            }\n                          }\n                        }\n                      },\n                      \"ExportSinkSpec\": {\n                        \"fields\": {\n                          \"name\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"enabled\": {\n                            \"type\": \"bool\",\n                            \"id\": 2\n                          },\n                          \"s3\": {\n                            \"type\": \"temporal.api.cloud.sink.v1.S3Spec\",\n                            \"id\": 3\n                          },\n                          \"gcs\": {\n                            \"type\": \"temporal.api.cloud.sink.v1.GCSSpec\",\n                            \"id\": 4\n                          }\n                        }\n                      },\n                      \"ExportSink\": {\n                        \"fields\": {\n                          \"name\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"resourceVersion\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"resource_version\"\n                          },\n                          \"state\": {\n                            \"type\": \"temporal.api.cloud.resource.v1.ResourceState\",\n                            \"id\": 3\n                          },\n                          \"spec\": {\n                            \"type\": \"ExportSinkSpec\",\n                            \"id\": 4\n                          },\n                          \"health\": {\n                            \"type\": \"Health\",\n                            \"id\": 5\n                          },\n                          \"errorMessage\": {\n                            \"type\": \"string\",\n                            \"id\": 6,\n                            \"protoName\": \"error_message\"\n                          },\n                          \"latestDataExportTime\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 7,\n                            \"protoName\": \"latest_data_export_time\"\n                          },\n                          \"lastHealthCheckTime\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 8,\n                            \"protoName\": \"last_health_check_time\"\n                          }\n                        },\n                        \"nested\": {\n                          \"Health\": {\n                            \"values\": {\n                              \"HEALTH_UNSPECIFIED\": 0,\n                              \"HEALTH_OK\": 1,\n                              \"HEALTH_ERROR_INTERNAL\": 2,\n                              \"HEALTH_ERROR_USER_CONFIGURATION\": 3\n                            }\n                          }\n                        }\n                      },\n                      \"NamespaceCapacityInfo\": {\n                        \"fields\": {\n                          \"namespace\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"hasLegacyLimits\": {\n                            \"type\": \"bool\",\n                            \"id\": 2,\n                            \"protoName\": \"has_legacy_limits\"\n                          },\n                          \"currentCapacity\": {\n                            \"type\": \"Capacity\",\n                            \"id\": 3,\n                            \"protoName\": \"current_capacity\"\n                          },\n                          \"modeOptions\": {\n                            \"type\": \"CapacityModeOptions\",\n                            \"id\": 4,\n                            \"protoName\": \"mode_options\"\n                          },\n                          \"stats\": {\n                            \"type\": \"Stats\",\n                            \"id\": 5\n                          }\n                        },\n                        \"nested\": {\n                          \"CapacityModeOptions\": {\n                            \"fields\": {\n                              \"provisioned\": {\n                                \"type\": \"Provisioned\",\n                                \"id\": 1\n                              },\n                              \"onDemand\": {\n                                \"type\": \"OnDemand\",\n                                \"id\": 2,\n                                \"protoName\": \"on_demand\"\n                              }\n                            },\n                            \"nested\": {\n                              \"Provisioned\": {\n                                \"fields\": {\n                                  \"validTruValues\": {\n                                    \"rule\": \"repeated\",\n                                    \"type\": \"double\",\n                                    \"id\": 1,\n                                    \"protoName\": \"valid_tru_values\"\n                                  },\n                                  \"maxAvailableTruValue\": {\n                                    \"type\": \"double\",\n                                    \"id\": 2,\n                                    \"protoName\": \"max_available_tru_value\"\n                                  }\n                                }\n                              },\n                              \"OnDemand\": {\n                                \"fields\": {\n                                  \"apsLimit\": {\n                                    \"type\": \"double\",\n                                    \"id\": 1,\n                                    \"protoName\": \"aps_limit\"\n                                  }\n                                }\n                              }\n                            }\n                          },\n                          \"Stats\": {\n                            \"fields\": {\n                              \"aps\": {\n                                \"type\": \"Summary\",\n                                \"id\": 1\n                              }\n                            },\n                            \"nested\": {\n                              \"Summary\": {\n                                \"fields\": {\n                                  \"mean\": {\n                                    \"type\": \"double\",\n                                    \"id\": 1\n                                  },\n                                  \"p90\": {\n                                    \"type\": \"double\",\n                                    \"id\": 2\n                                  },\n                                  \"p99\": {\n                                    \"type\": \"double\",\n                                    \"id\": 3\n                                  }\n                                }\n                              }\n                            }\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n              },\n              \"sink\": {\n                \"nested\": {\n                  \"v1\": {\n                    \"options\": {\n                      \"go_package\": \"go.temporal.io/api/cloud/sink/v1;sink\",\n                      \"java_package\": \"io.temporal.api.cloud.sink.v1\",\n                      \"java_multiple_files\": true,\n                      \"java_outer_classname\": \"MessageProto\",\n                      \"ruby_package\": \"Temporalio::Api::Cloud::Sink::V1\",\n                      \"csharp_namespace\": \"Temporalio.Api.Cloud.Sink.V1\"\n                    },\n                    \"nested\": {\n                      \"S3Spec\": {\n                        \"fields\": {\n                          \"roleName\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"role_name\"\n                          },\n                          \"bucketName\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"bucket_name\"\n                          },\n                          \"region\": {\n                            \"type\": \"string\",\n                            \"id\": 3\n                          },\n                          \"kmsArn\": {\n                            \"type\": \"string\",\n                            \"id\": 4,\n                            \"protoName\": \"kms_arn\"\n                          },\n                          \"awsAccountId\": {\n                            \"type\": \"string\",\n                            \"id\": 5,\n                            \"protoName\": \"aws_account_id\"\n                          }\n                        }\n                      },\n                      \"GCSSpec\": {\n                        \"fields\": {\n                          \"saId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"sa_id\"\n                          },\n                          \"bucketName\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"bucket_name\"\n                          },\n                          \"gcpProjectId\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"gcp_project_id\"\n                          },\n                          \"region\": {\n                            \"type\": \"string\",\n                            \"id\": 4\n                          }\n                        }\n                      },\n                      \"KinesisSpec\": {\n                        \"fields\": {\n                          \"roleName\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"role_name\"\n                          },\n                          \"destinationUri\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"destination_uri\"\n                          },\n                          \"region\": {\n                            \"type\": \"string\",\n                            \"id\": 3\n                          }\n                        }\n                      },\n                      \"PubSubSpec\": {\n                        \"fields\": {\n                          \"serviceAccountId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"service_account_id\"\n                          },\n                          \"topicName\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"topic_name\"\n                          },\n                          \"gcpProjectId\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"gcp_project_id\"\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n              },\n              \"connectivityrule\": {\n                \"nested\": {\n                  \"v1\": {\n                    \"options\": {\n                      \"go_package\": \"go.temporal.io/api/cloud/connectivityrule/v1;connectivityrule\",\n                      \"java_package\": \"io.temporal.api.cloud.connectivityrule.v1\",\n                      \"java_multiple_files\": true,\n                      \"java_outer_classname\": \"MessageProto\",\n                      \"ruby_package\": \"Temporalio::Api::Cloud::ConnectivityRule::V1\",\n                      \"csharp_namespace\": \"Temporalio.Api.Cloud.ConnectivityRule.V1\"\n                    },\n                    \"nested\": {\n                      \"ConnectivityRule\": {\n                        \"fields\": {\n                          \"id\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"spec\": {\n                            \"type\": \"ConnectivityRuleSpec\",\n                            \"id\": 2\n                          },\n                          \"resourceVersion\": {\n                            \"type\": \"string\",\n                            \"id\": 4,\n                            \"protoName\": \"resource_version\"\n                          },\n                          \"state\": {\n                            \"type\": \"temporal.api.cloud.resource.v1.ResourceState\",\n                            \"id\": 5\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 6,\n                            \"protoName\": \"async_operation_id\"\n                          },\n                          \"createdTime\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 7,\n                            \"protoName\": \"created_time\"\n                          }\n                        },\n                        \"reserved\": [\n                          [\n                            3,\n                            3\n                          ]\n                        ]\n                      },\n                      \"ConnectivityRuleSpec\": {\n                        \"oneofs\": {\n                          \"connectionType\": {\n                            \"oneof\": [\n                              \"publicRule\",\n                              \"privateRule\"\n                            ]\n                          }\n                        },\n                        \"fields\": {\n                          \"publicRule\": {\n                            \"type\": \"PublicConnectivityRule\",\n                            \"id\": 1,\n                            \"protoName\": \"public_rule\"\n                          },\n                          \"privateRule\": {\n                            \"type\": \"PrivateConnectivityRule\",\n                            \"id\": 2,\n                            \"protoName\": \"private_rule\"\n                          }\n                        }\n                      },\n                      \"PublicConnectivityRule\": {\n                        \"fields\": {\n                          \"enableStableIps\": {\n                            \"type\": \"bool\",\n                            \"id\": 1,\n                            \"protoName\": \"enable_stable_ips\"\n                          }\n                        }\n                      },\n                      \"PrivateConnectivityRule\": {\n                        \"fields\": {\n                          \"connectionId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"connection_id\"\n                          },\n                          \"gcpProjectId\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"gcp_project_id\"\n                          },\n                          \"region\": {\n                            \"type\": \"string\",\n                            \"id\": 3\n                          }\n                        },\n                        \"reserved\": [\n                          [\n                            4,\n                            4\n                          ]\n                        ]\n                      }\n                    }\n                  }\n                }\n              },\n              \"nexus\": {\n                \"nested\": {\n                  \"v1\": {\n                    \"options\": {\n                      \"go_package\": \"go.temporal.io/api/cloud/nexus/v1;nexus\",\n                      \"java_package\": \"io.temporal.api.cloud.nexus.v1\",\n                      \"java_multiple_files\": true,\n                      \"java_outer_classname\": \"MessageProto\",\n                      \"ruby_package\": \"Temporalio::Api::Cloud::Nexus::V1\",\n                      \"csharp_namespace\": \"Temporalio.Api.Cloud.Nexus.V1\"\n                    },\n                    \"nested\": {\n                      \"EndpointSpec\": {\n                        \"fields\": {\n                          \"name\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"targetSpec\": {\n                            \"type\": \"EndpointTargetSpec\",\n                            \"id\": 2,\n                            \"protoName\": \"target_spec\"\n                          },\n                          \"policySpecs\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"EndpointPolicySpec\",\n                            \"id\": 3,\n                            \"protoName\": \"policy_specs\"\n                          },\n                          \"descriptionDeprecated\": {\n                            \"type\": \"string\",\n                            \"id\": 4,\n                            \"protoName\": \"description_deprecated\",\n                            \"options\": {\n                              \"deprecated\": true\n                            }\n                          },\n                          \"description\": {\n                            \"type\": \"temporal.api.common.v1.Payload\",\n                            \"id\": 5\n                          }\n                        }\n                      },\n                      \"EndpointTargetSpec\": {\n                        \"oneofs\": {\n                          \"variant\": {\n                            \"oneof\": [\n                              \"workerTargetSpec\"\n                            ]\n                          }\n                        },\n                        \"fields\": {\n                          \"workerTargetSpec\": {\n                            \"type\": \"WorkerTargetSpec\",\n                            \"id\": 1,\n                            \"protoName\": \"worker_target_spec\"\n                          }\n                        }\n                      },\n                      \"WorkerTargetSpec\": {\n                        \"fields\": {\n                          \"namespaceId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"namespace_id\"\n                          },\n                          \"taskQueue\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"task_queue\"\n                          }\n                        }\n                      },\n                      \"EndpointPolicySpec\": {\n                        \"oneofs\": {\n                          \"variant\": {\n                            \"oneof\": [\n                              \"allowedCloudNamespacePolicySpec\"\n                            ]\n                          }\n                        },\n                        \"fields\": {\n                          \"allowedCloudNamespacePolicySpec\": {\n                            \"type\": \"AllowedCloudNamespacePolicySpec\",\n                            \"id\": 1,\n                            \"protoName\": \"allowed_cloud_namespace_policy_spec\"\n                          }\n                        }\n                      },\n                      \"AllowedCloudNamespacePolicySpec\": {\n                        \"fields\": {\n                          \"namespaceId\": {\n                            \"type\": \"string\",\n                            \"id\": 1,\n                            \"protoName\": \"namespace_id\"\n                          }\n                        }\n                      },\n                      \"Endpoint\": {\n                        \"fields\": {\n                          \"id\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"resourceVersion\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"resource_version\"\n                          },\n                          \"spec\": {\n                            \"type\": \"EndpointSpec\",\n                            \"id\": 3\n                          },\n                          \"state\": {\n                            \"type\": \"temporal.api.cloud.resource.v1.ResourceState\",\n                            \"id\": 4\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 5,\n                            \"protoName\": \"async_operation_id\"\n                          },\n                          \"createdTime\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 6,\n                            \"protoName\": \"created_time\"\n                          },\n                          \"lastModifiedTime\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 7,\n                            \"protoName\": \"last_modified_time\"\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n              },\n              \"region\": {\n                \"nested\": {\n                  \"v1\": {\n                    \"options\": {\n                      \"go_package\": \"go.temporal.io/api/cloud/region/v1;region\",\n                      \"java_package\": \"io.temporal.api.cloud.region.v1\",\n                      \"java_multiple_files\": true,\n                      \"java_outer_classname\": \"MessageProto\",\n                      \"ruby_package\": \"Temporalio::Api::Cloud::Region::V1\",\n                      \"csharp_namespace\": \"Temporalio.Api.Cloud.Region.V1\"\n                    },\n                    \"nested\": {\n                      \"Region\": {\n                        \"fields\": {\n                          \"id\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"cloudProviderDeprecated\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"cloud_provider_deprecated\",\n                            \"options\": {\n                              \"deprecated\": true\n                            }\n                          },\n                          \"cloudProvider\": {\n                            \"type\": \"CloudProvider\",\n                            \"id\": 5,\n                            \"protoName\": \"cloud_provider\"\n                          },\n                          \"cloudProviderRegion\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"cloud_provider_region\"\n                          },\n                          \"location\": {\n                            \"type\": \"string\",\n                            \"id\": 4\n                          }\n                        },\n                        \"nested\": {\n                          \"CloudProvider\": {\n                            \"values\": {\n                              \"CLOUD_PROVIDER_UNSPECIFIED\": 0,\n                              \"CLOUD_PROVIDER_AWS\": 1,\n                              \"CLOUD_PROVIDER_GCP\": 2\n                            }\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n              },\n              \"account\": {\n                \"nested\": {\n                  \"v1\": {\n                    \"options\": {\n                      \"go_package\": \"go.temporal.io/api/cloud/account/v1;account\",\n                      \"java_package\": \"io.temporal.api.cloud.account.v1\",\n                      \"java_multiple_files\": true,\n                      \"java_outer_classname\": \"MessageProto\",\n                      \"ruby_package\": \"Temporalio::Api::Cloud::Account::V1\",\n                      \"csharp_namespace\": \"Temporalio.Api.Cloud.Account.V1\"\n                    },\n                    \"nested\": {\n                      \"MetricsSpec\": {\n                        \"fields\": {\n                          \"acceptedClientCa\": {\n                            \"type\": \"bytes\",\n                            \"id\": 2,\n                            \"protoName\": \"accepted_client_ca\"\n                          }\n                        }\n                      },\n                      \"AccountSpec\": {\n                        \"fields\": {\n                          \"metrics\": {\n                            \"type\": \"MetricsSpec\",\n                            \"id\": 1\n                          }\n                        }\n                      },\n                      \"Metrics\": {\n                        \"fields\": {\n                          \"uri\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          }\n                        }\n                      },\n                      \"Account\": {\n                        \"fields\": {\n                          \"id\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"spec\": {\n                            \"type\": \"AccountSpec\",\n                            \"id\": 2\n                          },\n                          \"resourceVersion\": {\n                            \"type\": \"string\",\n                            \"id\": 3,\n                            \"protoName\": \"resource_version\"\n                          },\n                          \"state\": {\n                            \"type\": \"temporal.api.cloud.resource.v1.ResourceState\",\n                            \"id\": 4\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 5,\n                            \"protoName\": \"async_operation_id\"\n                          },\n                          \"metrics\": {\n                            \"type\": \"Metrics\",\n                            \"id\": 6\n                          }\n                        }\n                      },\n                      \"AuditLogSinkSpec\": {\n                        \"oneofs\": {\n                          \"sinkType\": {\n                            \"oneof\": [\n                              \"kinesisSink\",\n                              \"pubSubSink\"\n                            ]\n                          }\n                        },\n                        \"fields\": {\n                          \"name\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"kinesisSink\": {\n                            \"type\": \"api.cloud.sink.v1.KinesisSpec\",\n                            \"id\": 2,\n                            \"protoName\": \"kinesis_sink\"\n                          },\n                          \"pubSubSink\": {\n                            \"type\": \"api.cloud.sink.v1.PubSubSpec\",\n                            \"id\": 3,\n                            \"protoName\": \"pub_sub_sink\"\n                          },\n                          \"enabled\": {\n                            \"type\": \"bool\",\n                            \"id\": 4\n                          }\n                        }\n                      },\n                      \"AuditLogSink\": {\n                        \"fields\": {\n                          \"name\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"resourceVersion\": {\n                            \"type\": \"string\",\n                            \"id\": 2,\n                            \"protoName\": \"resource_version\"\n                          },\n                          \"state\": {\n                            \"type\": \"temporal.api.cloud.resource.v1.ResourceState\",\n                            \"id\": 3\n                          },\n                          \"spec\": {\n                            \"type\": \"AuditLogSinkSpec\",\n                            \"id\": 4\n                          },\n                          \"health\": {\n                            \"type\": \"Health\",\n                            \"id\": 5\n                          },\n                          \"errorMessage\": {\n                            \"type\": \"string\",\n                            \"id\": 6,\n                            \"protoName\": \"error_message\"\n                          },\n                          \"lastSucceededTime\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 7,\n                            \"protoName\": \"last_succeeded_time\"\n                          }\n                        },\n                        \"nested\": {\n                          \"Health\": {\n                            \"values\": {\n                              \"HEALTH_UNSPECIFIED\": 0,\n                              \"HEALTH_OK\": 1,\n                              \"HEALTH_ERROR_INTERNAL\": 2,\n                              \"HEALTH_ERROR_USER_CONFIGURATION\": 3\n                            }\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n              },\n              \"usage\": {\n                \"nested\": {\n                  \"v1\": {\n                    \"options\": {\n                      \"go_package\": \"go.temporal.io/api/cloud/usage/v1;usage\",\n                      \"java_package\": \"io.temporal.api.cloud.usage.v1\",\n                      \"java_multiple_files\": true,\n                      \"java_outer_classname\": \"MessageProto\",\n                      \"ruby_package\": \"Temporalio::Api::Cloud::Usage::V1\",\n                      \"csharp_namespace\": \"Temporalio.Api.Cloud.Usage.V1\"\n                    },\n                    \"nested\": {\n                      \"Summary\": {\n                        \"fields\": {\n                          \"startTime\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 1,\n                            \"protoName\": \"start_time\"\n                          },\n                          \"endTime\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 2,\n                            \"protoName\": \"end_time\"\n                          },\n                          \"recordGroups\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"RecordGroup\",\n                            \"id\": 3,\n                            \"protoName\": \"record_groups\"\n                          },\n                          \"incomplete\": {\n                            \"type\": \"bool\",\n                            \"id\": 4\n                          }\n                        }\n                      },\n                      \"RecordGroup\": {\n                        \"fields\": {\n                          \"groupBys\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"GroupBy\",\n                            \"id\": 1,\n                            \"protoName\": \"group_bys\"\n                          },\n                          \"records\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"Record\",\n                            \"id\": 2\n                          }\n                        }\n                      },\n                      \"GroupBy\": {\n                        \"fields\": {\n                          \"key\": {\n                            \"type\": \"GroupByKey\",\n                            \"id\": 1\n                          },\n                          \"value\": {\n                            \"type\": \"string\",\n                            \"id\": 2\n                          }\n                        }\n                      },\n                      \"Record\": {\n                        \"fields\": {\n                          \"type\": {\n                            \"type\": \"RecordType\",\n                            \"id\": 1\n                          },\n                          \"unit\": {\n                            \"type\": \"RecordUnit\",\n                            \"id\": 2\n                          },\n                          \"value\": {\n                            \"type\": \"double\",\n                            \"id\": 3\n                          }\n                        }\n                      },\n                      \"RecordType\": {\n                        \"values\": {\n                          \"RECORD_TYPE_UNSPECIFIED\": 0,\n                          \"RECORD_TYPE_ACTIONS\": 1,\n                          \"RECORD_TYPE_ACTIVE_STORAGE\": 2,\n                          \"RECORD_TYPE_RETAINED_STORAGE\": 3\n                        }\n                      },\n                      \"RecordUnit\": {\n                        \"values\": {\n                          \"RECORD_UNIT_UNSPECIFIED\": 0,\n                          \"RECORD_UNIT_NUMBER\": 1,\n                          \"RECORD_UNIT_BYTE_SECONDS\": 2\n                        }\n                      },\n                      \"GroupByKey\": {\n                        \"values\": {\n                          \"GROUP_BY_KEY_UNSPECIFIED\": 0,\n                          \"GROUP_BY_KEY_NAMESPACE\": 1\n                        }\n                      }\n                    }\n                  }\n                }\n              },\n              \"auditlog\": {\n                \"nested\": {\n                  \"v1\": {\n                    \"options\": {\n                      \"go_package\": \"go.temporal.io/api/cloud/auditlog/v1;auditlog\",\n                      \"java_package\": \"io.temporal.api.cloud.auditlog.v1\",\n                      \"java_multiple_files\": true,\n                      \"java_outer_classname\": \"MessageProto\",\n                      \"ruby_package\": \"Temporalio::Api::Cloud::AuditLog::V1\",\n                      \"csharp_namespace\": \"Temporalio.Api.Cloud.AuditLog.V1\"\n                    },\n                    \"nested\": {\n                      \"LogRecord\": {\n                        \"fields\": {\n                          \"emitTime\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 1,\n                            \"protoName\": \"emit_time\"\n                          },\n                          \"operation\": {\n                            \"type\": \"string\",\n                            \"id\": 5\n                          },\n                          \"status\": {\n                            \"type\": \"string\",\n                            \"id\": 7\n                          },\n                          \"version\": {\n                            \"type\": \"int32\",\n                            \"id\": 9\n                          },\n                          \"logId\": {\n                            \"type\": \"string\",\n                            \"id\": 10,\n                            \"protoName\": \"log_id\"\n                          },\n                          \"principal\": {\n                            \"type\": \"Principal\",\n                            \"id\": 12\n                          },\n                          \"rawDetails\": {\n                            \"type\": \"google.protobuf.Struct\",\n                            \"id\": 13,\n                            \"protoName\": \"raw_details\"\n                          },\n                          \"xForwardedFor\": {\n                            \"type\": \"string\",\n                            \"id\": 14,\n                            \"protoName\": \"x_forwarded_for\"\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 15,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        }\n                      },\n                      \"Principal\": {\n                        \"fields\": {\n                          \"type\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"id\": {\n                            \"type\": \"string\",\n                            \"id\": 2\n                          },\n                          \"name\": {\n                            \"type\": \"string\",\n                            \"id\": 3\n                          },\n                          \"apiKeyId\": {\n                            \"type\": \"string\",\n                            \"id\": 4,\n                            \"protoName\": \"api_key_id\"\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n              },\n              \"billing\": {\n                \"nested\": {\n                  \"v1\": {\n                    \"options\": {\n                      \"go_package\": \"go.temporal.io/api/cloud/billing/v1;billing\",\n                      \"java_package\": \"io.temporal.api.cloud.billing.v1\",\n                      \"java_multiple_files\": true,\n                      \"java_outer_classname\": \"MessageProto\",\n                      \"ruby_package\": \"Temporalio::Api::Cloud::Billing::V1\",\n                      \"csharp_namespace\": \"Temporalio.Api.Cloud.Billing.V1\"\n                    },\n                    \"nested\": {\n                      \"BillingReportSpec\": {\n                        \"fields\": {\n                          \"startTimeInclusive\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 1,\n                            \"protoName\": \"start_time_inclusive\"\n                          },\n                          \"endTimeExclusive\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 2,\n                            \"protoName\": \"end_time_exclusive\"\n                          },\n                          \"downloadUrlExpirationDuration\": {\n                            \"type\": \"google.protobuf.Duration\",\n                            \"id\": 3,\n                            \"protoName\": \"download_url_expiration_duration\"\n                          },\n                          \"description\": {\n                            \"type\": \"string\",\n                            \"id\": 4\n                          },\n                          \"granularity\": {\n                            \"type\": \"BillingReportGranularity\",\n                            \"id\": 5\n                          }\n                        },\n                        \"nested\": {\n                          \"BillingReportGranularity\": {\n                            \"values\": {\n                              \"BILLING_REPORT_GRANULARITY_UNSPECIFIED\": 0,\n                              \"BILLING_REPORT_GRANULARITY_HOURLY\": 1,\n                              \"BILLING_REPORT_GRANULARITY_DAILY\": 2,\n                              \"BILLING_REPORT_GRANULARITY_MONTHLY\": 3\n                            }\n                          }\n                        }\n                      },\n                      \"BillingReport\": {\n                        \"fields\": {\n                          \"id\": {\n                            \"type\": \"string\",\n                            \"id\": 1\n                          },\n                          \"state\": {\n                            \"type\": \"BillingReportState\",\n                            \"id\": 2\n                          },\n                          \"spec\": {\n                            \"type\": \"BillingReportSpec\",\n                            \"id\": 3\n                          },\n                          \"downloadInfo\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"Download\",\n                            \"id\": 4,\n                            \"protoName\": \"download_info\"\n                          },\n                          \"requestedTime\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 5,\n                            \"protoName\": \"requested_time\"\n                          },\n                          \"generatedTime\": {\n                            \"type\": \"google.protobuf.Timestamp\",\n                            \"id\": 6,\n                            \"protoName\": \"generated_time\"\n                          },\n                          \"asyncOperationId\": {\n                            \"type\": \"string\",\n                            \"id\": 7,\n                            \"protoName\": \"async_operation_id\"\n                          }\n                        },\n                        \"nested\": {\n                          \"Download\": {\n                            \"fields\": {\n                              \"url\": {\n                                \"type\": \"string\",\n                                \"id\": 1\n                              },\n                              \"urlExpirationTime\": {\n                                \"type\": \"google.protobuf.Timestamp\",\n                                \"id\": 2,\n                                \"protoName\": \"url_expiration_time\"\n                              },\n                              \"fileFormat\": {\n                                \"type\": \"FileFormat\",\n                                \"id\": 3,\n                                \"protoName\": \"file_format\"\n                              },\n                              \"fileSizeBytes\": {\n                                \"type\": \"int64\",\n                                \"id\": 4,\n                                \"protoName\": \"file_size_bytes\"\n                              }\n                            },\n                            \"nested\": {\n                              \"FileFormat\": {\n                                \"values\": {\n                                  \"FILE_FORMAT_UNSPECIFIED\": 0,\n                                  \"FILE_FORMAT_CSV\": 1\n                                }\n                              }\n                            }\n                          },\n                          \"BillingReportState\": {\n                            \"values\": {\n                              \"BILLING_REPORT_STATE_UNSPECIFIED\": 0,\n                              \"BILLING_REPORT_STATE_IN_PROGRESS\": 1,\n                              \"BILLING_REPORT_STATE_GENERATED\": 2,\n                              \"BILLING_REPORT_STATE_FAILED\": 3\n                            }\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          \"errordetails\": {\n            \"nested\": {\n              \"v1\": {\n                \"options\": {\n                  \"go_package\": \"go.temporal.io/api/errordetails/v1;errordetails\",\n                  \"java_package\": \"io.temporal.api.errordetails.v1\",\n                  \"java_multiple_files\": true,\n                  \"java_outer_classname\": \"MessageProto\",\n                  \"ruby_package\": \"Temporalio::Api::ErrorDetails::V1\",\n                  \"csharp_namespace\": \"Temporalio.Api.ErrorDetails.V1\"\n                },\n                \"nested\": {\n                  \"NotFoundFailure\": {\n                    \"fields\": {\n                      \"currentCluster\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"current_cluster\"\n                      },\n                      \"activeCluster\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"active_cluster\"\n                      }\n                    }\n                  },\n                  \"WorkflowExecutionAlreadyStartedFailure\": {\n                    \"fields\": {\n                      \"startRequestId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"start_request_id\"\n                      },\n                      \"runId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"run_id\"\n                      },\n                      \"firstExecutionRunId\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"first_execution_run_id\"\n                      }\n                    }\n                  },\n                  \"NamespaceNotActiveFailure\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"currentCluster\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"current_cluster\"\n                      },\n                      \"activeCluster\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"active_cluster\"\n                      }\n                    }\n                  },\n                  \"NamespaceUnavailableFailure\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      }\n                    }\n                  },\n                  \"NamespaceInvalidStateFailure\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"state\": {\n                        \"type\": \"temporal.api.enums.v1.NamespaceState\",\n                        \"id\": 2\n                      },\n                      \"allowedStates\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"temporal.api.enums.v1.NamespaceState\",\n                        \"id\": 3,\n                        \"protoName\": \"allowed_states\"\n                      }\n                    }\n                  },\n                  \"NamespaceNotFoundFailure\": {\n                    \"fields\": {\n                      \"namespace\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      }\n                    }\n                  },\n                  \"NamespaceAlreadyExistsFailure\": {\n                    \"fields\": {}\n                  },\n                  \"ClientVersionNotSupportedFailure\": {\n                    \"fields\": {\n                      \"clientVersion\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"client_version\"\n                      },\n                      \"clientName\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"client_name\"\n                      },\n                      \"supportedVersions\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"supported_versions\"\n                      }\n                    }\n                  },\n                  \"ServerVersionNotSupportedFailure\": {\n                    \"fields\": {\n                      \"serverVersion\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"server_version\"\n                      },\n                      \"clientSupportedServerVersions\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"client_supported_server_versions\"\n                      }\n                    }\n                  },\n                  \"CancellationAlreadyRequestedFailure\": {\n                    \"fields\": {}\n                  },\n                  \"QueryFailedFailure\": {\n                    \"fields\": {\n                      \"failure\": {\n                        \"type\": \"temporal.api.failure.v1.Failure\",\n                        \"id\": 1\n                      }\n                    }\n                  },\n                  \"PermissionDeniedFailure\": {\n                    \"fields\": {\n                      \"reason\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      }\n                    }\n                  },\n                  \"ResourceExhaustedFailure\": {\n                    \"fields\": {\n                      \"cause\": {\n                        \"type\": \"temporal.api.enums.v1.ResourceExhaustedCause\",\n                        \"id\": 1\n                      },\n                      \"scope\": {\n                        \"type\": \"temporal.api.enums.v1.ResourceExhaustedScope\",\n                        \"id\": 2\n                      }\n                    }\n                  },\n                  \"SystemWorkflowFailure\": {\n                    \"fields\": {\n                      \"workflowExecution\": {\n                        \"type\": \"temporal.api.common.v1.WorkflowExecution\",\n                        \"id\": 1,\n                        \"protoName\": \"workflow_execution\"\n                      },\n                      \"workflowError\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"workflow_error\"\n                      }\n                    }\n                  },\n                  \"WorkflowNotReadyFailure\": {\n                    \"fields\": {}\n                  },\n                  \"NewerBuildExistsFailure\": {\n                    \"fields\": {\n                      \"defaultBuildId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"default_build_id\"\n                      }\n                    }\n                  },\n                  \"MultiOperationExecutionFailure\": {\n                    \"fields\": {\n                      \"statuses\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"OperationStatus\",\n                        \"id\": 1\n                      }\n                    },\n                    \"nested\": {\n                      \"OperationStatus\": {\n                        \"fields\": {\n                          \"code\": {\n                            \"type\": \"int32\",\n                            \"id\": 1\n                          },\n                          \"message\": {\n                            \"type\": \"string\",\n                            \"id\": 2\n                          },\n                          \"details\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"google.protobuf.Any\",\n                            \"id\": 3\n                          }\n                        }\n                      }\n                    }\n                  },\n                  \"ActivityExecutionAlreadyStartedFailure\": {\n                    \"fields\": {\n                      \"startRequestId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"start_request_id\"\n                      },\n                      \"runId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"run_id\"\n                      }\n                    }\n                  },\n                  \"NexusOperationExecutionAlreadyStartedFailure\": {\n                    \"fields\": {\n                      \"startRequestId\": {\n                        \"type\": \"string\",\n                        \"id\": 1,\n                        \"protoName\": \"start_request_id\"\n                      },\n                      \"runId\": {\n                        \"type\": \"string\",\n                        \"id\": 2,\n                        \"protoName\": \"run_id\"\n                      }\n                    }\n                  },\n                  \"WorkflowTaskCompletionBufferLostFailure\": {\n                    \"fields\": {}\n                  }\n                }\n              }\n            }\n          },\n          \"testservice\": {\n            \"nested\": {\n              \"v1\": {\n                \"options\": {\n                  \"go_package\": \"go.temporal.io/api/testservice/v1;testservice\",\n                  \"java_package\": \"io.temporal.api.testservice.v1\",\n                  \"java_multiple_files\": true,\n                  \"java_outer_classname\": \"ServiceProto\",\n                  \"ruby_package\": \"Temporalio::Api::TestService::V1\",\n                  \"csharp_namespace\": \"Temporalio.Api.TestService.V1\"\n                },\n                \"nested\": {\n                  \"LockTimeSkippingRequest\": {\n                    \"fields\": {}\n                  },\n                  \"LockTimeSkippingResponse\": {\n                    \"fields\": {}\n                  },\n                  \"UnlockTimeSkippingRequest\": {\n                    \"fields\": {}\n                  },\n                  \"UnlockTimeSkippingResponse\": {\n                    \"fields\": {}\n                  },\n                  \"SleepUntilRequest\": {\n                    \"fields\": {\n                      \"timestamp\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 1\n                      }\n                    }\n                  },\n                  \"SleepRequest\": {\n                    \"fields\": {\n                      \"duration\": {\n                        \"type\": \"google.protobuf.Duration\",\n                        \"id\": 1\n                      }\n                    }\n                  },\n                  \"SleepResponse\": {\n                    \"fields\": {}\n                  },\n                  \"GetCurrentTimeResponse\": {\n                    \"fields\": {\n                      \"time\": {\n                        \"type\": \"google.protobuf.Timestamp\",\n                        \"id\": 1\n                      }\n                    }\n                  },\n                  \"TestService\": {\n                    \"methods\": {\n                      \"LockTimeSkipping\": {\n                        \"requestType\": \"LockTimeSkippingRequest\",\n                        \"responseType\": \"LockTimeSkippingResponse\"\n                      },\n                      \"UnlockTimeSkipping\": {\n                        \"requestType\": \"UnlockTimeSkippingRequest\",\n                        \"responseType\": \"UnlockTimeSkippingResponse\"\n                      },\n                      \"Sleep\": {\n                        \"requestType\": \"SleepRequest\",\n                        \"responseType\": \"SleepResponse\"\n                      },\n                      \"SleepUntil\": {\n                        \"requestType\": \"SleepUntilRequest\",\n                        \"responseType\": \"SleepResponse\"\n                      },\n                      \"UnlockTimeSkippingWithSleep\": {\n                        \"requestType\": \"SleepRequest\",\n                        \"responseType\": \"SleepResponse\"\n                      },\n                      \"GetCurrentTime\": {\n                        \"requestType\": \"google.protobuf.Empty\",\n                        \"responseType\": \"GetCurrentTimeResponse\"\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  },\n  \"nexusannotations\": {\n    \"nested\": {\n      \"v1\": {\n        \"options\": {\n          \"go_package\": \"github.com/nexus-rpc/nexus-proto-annotations/go/nexusannotations/v1\"\n        },\n        \"nested\": {\n          \"_service\": {\n            \"oneof\": [\n              \"service\"\n            ]\n          },\n          \"service\": {\n            \"type\": \"ServiceOptions\",\n            \"id\": 8233,\n            \"extend\": \"google.protobuf.ServiceOptions\",\n            \"options\": {\n              \"proto3_optional\": true\n            }\n          },\n          \"_operation\": {\n            \"oneof\": [\n              \"operation\"\n            ]\n          },\n          \"operation\": {\n            \"type\": \"OperationOptions\",\n            \"id\": 8234,\n            \"extend\": \"google.protobuf.MethodOptions\",\n            \"options\": {\n              \"proto3_optional\": true\n            }\n          },\n          \"OperationOptions\": {\n            \"fields\": {\n              \"name\": {\n                \"type\": \"string\",\n                \"id\": 1\n              },\n              \"tags\": {\n                \"rule\": \"repeated\",\n                \"type\": \"string\",\n                \"id\": 2\n              }\n            }\n          },\n          \"ServiceOptions\": {\n            \"fields\": {\n              \"name\": {\n                \"type\": \"string\",\n                \"id\": 1\n              },\n              \"tags\": {\n                \"rule\": \"repeated\",\n                \"type\": \"string\",\n                \"id\": 2\n              }\n            }\n          }\n        }\n      }\n    }\n  },\n  \"google\": {\n    \"nested\": {\n      \"protobuf\": {\n        \"options\": {\n          \"go_package\": \"google.golang.org/protobuf/types/descriptorpb\",\n          \"java_package\": \"com.google.protobuf\",\n          \"java_outer_classname\": \"DescriptorProtos\",\n          \"csharp_namespace\": \"Google.Protobuf.Reflection\",\n          \"objc_class_prefix\": \"GPB\",\n          \"cc_enable_arenas\": true,\n          \"optimize_for\": \"SPEED\"\n        },\n        \"nested\": {\n          \"Duration\": {\n            \"fields\": {\n              \"seconds\": {\n                \"type\": \"int64\",\n                \"id\": 1\n              },\n              \"nanos\": {\n                \"type\": \"int32\",\n                \"id\": 2\n              }\n            }\n          },\n          \"Empty\": {\n            \"fields\": {}\n          },\n          \"Timestamp\": {\n            \"fields\": {\n              \"seconds\": {\n                \"type\": \"int64\",\n                \"id\": 1\n              },\n              \"nanos\": {\n                \"type\": \"int32\",\n                \"id\": 2\n              }\n            }\n          },\n          \"FieldMask\": {\n            \"fields\": {\n              \"paths\": {\n                \"rule\": \"repeated\",\n                \"type\": \"string\",\n                \"id\": 1\n              }\n            }\n          },\n          \"DoubleValue\": {\n            \"fields\": {\n              \"value\": {\n                \"type\": \"double\",\n                \"id\": 1\n              }\n            }\n          },\n          \"FloatValue\": {\n            \"fields\": {\n              \"value\": {\n                \"type\": \"float\",\n                \"id\": 1\n              }\n            }\n          },\n          \"Int64Value\": {\n            \"fields\": {\n              \"value\": {\n                \"type\": \"int64\",\n                \"id\": 1\n              }\n            }\n          },\n          \"UInt64Value\": {\n            \"fields\": {\n              \"value\": {\n                \"type\": \"uint64\",\n                \"id\": 1\n              }\n            }\n          },\n          \"Int32Value\": {\n            \"fields\": {\n              \"value\": {\n                \"type\": \"int32\",\n                \"id\": 1\n              }\n            }\n          },\n          \"UInt32Value\": {\n            \"fields\": {\n              \"value\": {\n                \"type\": \"uint32\",\n                \"id\": 1\n              }\n            }\n          },\n          \"BoolValue\": {\n            \"fields\": {\n              \"value\": {\n                \"type\": \"bool\",\n                \"id\": 1\n              }\n            }\n          },\n          \"StringValue\": {\n            \"fields\": {\n              \"value\": {\n                \"type\": \"string\",\n                \"id\": 1\n              }\n            }\n          },\n          \"BytesValue\": {\n            \"fields\": {\n              \"value\": {\n                \"type\": \"bytes\",\n                \"id\": 1\n              }\n            }\n          },\n          \"Any\": {\n            \"fields\": {\n              \"type_url\": {\n                \"type\": \"string\",\n                \"id\": 1\n              },\n              \"value\": {\n                \"type\": \"bytes\",\n                \"id\": 2\n              }\n            }\n          },\n          \"FileDescriptorSet\": {\n            \"edition\": \"proto2\",\n            \"fields\": {\n              \"file\": {\n                \"rule\": \"repeated\",\n                \"type\": \"FileDescriptorProto\",\n                \"id\": 1\n              }\n            }\n          },\n          \"Edition\": {\n            \"edition\": \"proto2\",\n            \"values\": {\n              \"EDITION_UNKNOWN\": 0,\n              \"EDITION_PROTO2\": 998,\n              \"EDITION_PROTO3\": 999,\n              \"EDITION_2023\": 1000,\n              \"EDITION_1_TEST_ONLY\": 1,\n              \"EDITION_2_TEST_ONLY\": 2,\n              \"EDITION_99997_TEST_ONLY\": 99997,\n              \"EDITION_99998_TEST_ONLY\": 99998,\n              \"EDITION_99999_TEST_ONLY\": 99999\n            }\n          },\n          \"FileDescriptorProto\": {\n            \"edition\": \"proto2\",\n            \"fields\": {\n              \"name\": {\n                \"type\": \"string\",\n                \"id\": 1\n              },\n              \"package\": {\n                \"type\": \"string\",\n                \"id\": 2\n              },\n              \"dependency\": {\n                \"rule\": \"repeated\",\n                \"type\": \"string\",\n                \"id\": 3\n              },\n              \"publicDependency\": {\n                \"rule\": \"repeated\",\n                \"type\": \"int32\",\n                \"id\": 10,\n                \"protoName\": \"public_dependency\"\n              },\n              \"weakDependency\": {\n                \"rule\": \"repeated\",\n                \"type\": \"int32\",\n                \"id\": 11,\n                \"protoName\": \"weak_dependency\"\n              },\n              \"messageType\": {\n                \"rule\": \"repeated\",\n                \"type\": \"DescriptorProto\",\n                \"id\": 4,\n                \"protoName\": \"message_type\"\n              },\n              \"enumType\": {\n                \"rule\": \"repeated\",\n                \"type\": \"EnumDescriptorProto\",\n                \"id\": 5,\n                \"protoName\": \"enum_type\"\n              },\n              \"service\": {\n                \"rule\": \"repeated\",\n                \"type\": \"ServiceDescriptorProto\",\n                \"id\": 6\n              },\n              \"extension\": {\n                \"rule\": \"repeated\",\n                \"type\": \"FieldDescriptorProto\",\n                \"id\": 7\n              },\n              \"options\": {\n                \"type\": \"FileOptions\",\n                \"id\": 8\n              },\n              \"sourceCodeInfo\": {\n                \"type\": \"SourceCodeInfo\",\n                \"id\": 9,\n                \"protoName\": \"source_code_info\"\n              },\n              \"syntax\": {\n                \"type\": \"string\",\n                \"id\": 12\n              },\n              \"edition\": {\n                \"type\": \"Edition\",\n                \"id\": 14\n              }\n            }\n          },\n          \"DescriptorProto\": {\n            \"edition\": \"proto2\",\n            \"fields\": {\n              \"name\": {\n                \"type\": \"string\",\n                \"id\": 1\n              },\n              \"field\": {\n                \"rule\": \"repeated\",\n                \"type\": \"FieldDescriptorProto\",\n                \"id\": 2\n              },\n              \"extension\": {\n                \"rule\": \"repeated\",\n                \"type\": \"FieldDescriptorProto\",\n                \"id\": 6\n              },\n              \"nestedType\": {\n                \"rule\": \"repeated\",\n                \"type\": \"DescriptorProto\",\n                \"id\": 3,\n                \"protoName\": \"nested_type\"\n              },\n              \"enumType\": {\n                \"rule\": \"repeated\",\n                \"type\": \"EnumDescriptorProto\",\n                \"id\": 4,\n                \"protoName\": \"enum_type\"\n              },\n              \"extensionRange\": {\n                \"rule\": \"repeated\",\n                \"type\": \"ExtensionRange\",\n                \"id\": 5,\n                \"protoName\": \"extension_range\"\n              },\n              \"oneofDecl\": {\n                \"rule\": \"repeated\",\n                \"type\": \"OneofDescriptorProto\",\n                \"id\": 8,\n                \"protoName\": \"oneof_decl\"\n              },\n              \"options\": {\n                \"type\": \"MessageOptions\",\n                \"id\": 7\n              },\n              \"reservedRange\": {\n                \"rule\": \"repeated\",\n                \"type\": \"ReservedRange\",\n                \"id\": 9,\n                \"protoName\": \"reserved_range\"\n              },\n              \"reservedName\": {\n                \"rule\": \"repeated\",\n                \"type\": \"string\",\n                \"id\": 10,\n                \"protoName\": \"reserved_name\"\n              }\n            },\n            \"nested\": {\n              \"ExtensionRange\": {\n                \"fields\": {\n                  \"start\": {\n                    \"type\": \"int32\",\n                    \"id\": 1\n                  },\n                  \"end\": {\n                    \"type\": \"int32\",\n                    \"id\": 2\n                  },\n                  \"options\": {\n                    \"type\": \"ExtensionRangeOptions\",\n                    \"id\": 3\n                  }\n                }\n              },\n              \"ReservedRange\": {\n                \"fields\": {\n                  \"start\": {\n                    \"type\": \"int32\",\n                    \"id\": 1\n                  },\n                  \"end\": {\n                    \"type\": \"int32\",\n                    \"id\": 2\n                  }\n                }\n              }\n            }\n          },\n          \"ExtensionRangeOptions\": {\n            \"edition\": \"proto2\",\n            \"fields\": {\n              \"uninterpretedOption\": {\n                \"rule\": \"repeated\",\n                \"type\": \"UninterpretedOption\",\n                \"id\": 999,\n                \"protoName\": \"uninterpreted_option\"\n              },\n              \"declaration\": {\n                \"rule\": \"repeated\",\n                \"type\": \"Declaration\",\n                \"id\": 2,\n                \"options\": {\n                  \"retention\": \"RETENTION_SOURCE\"\n                }\n              },\n              \"features\": {\n                \"type\": \"FeatureSet\",\n                \"id\": 50\n              },\n              \"verification\": {\n                \"type\": \"VerificationState\",\n                \"id\": 3,\n                \"options\": {\n                  \"default\": \"UNVERIFIED\"\n                }\n              }\n            },\n            \"extensions\": [\n              [\n                1000,\n                536870911\n              ]\n            ],\n            \"nested\": {\n              \"Declaration\": {\n                \"fields\": {\n                  \"number\": {\n                    \"type\": \"int32\",\n                    \"id\": 1\n                  },\n                  \"fullName\": {\n                    \"type\": \"string\",\n                    \"id\": 2,\n                    \"protoName\": \"full_name\"\n                  },\n                  \"type\": {\n                    \"type\": \"string\",\n                    \"id\": 3\n                  },\n                  \"reserved\": {\n                    \"type\": \"bool\",\n                    \"id\": 5\n                  },\n                  \"repeated\": {\n                    \"type\": \"bool\",\n                    \"id\": 6\n                  }\n                },\n                \"reserved\": [\n                  [\n                    4,\n                    4\n                  ]\n                ]\n              },\n              \"VerificationState\": {\n                \"values\": {\n                  \"DECLARATION\": 0,\n                  \"UNVERIFIED\": 1\n                }\n              }\n            }\n          },\n          \"FieldDescriptorProto\": {\n            \"edition\": \"proto2\",\n            \"fields\": {\n              \"name\": {\n                \"type\": \"string\",\n                \"id\": 1\n              },\n              \"number\": {\n                \"type\": \"int32\",\n                \"id\": 3\n              },\n              \"label\": {\n                \"type\": \"Label\",\n                \"id\": 4\n              },\n              \"type\": {\n                \"type\": \"Type\",\n                \"id\": 5\n              },\n              \"typeName\": {\n                \"type\": \"string\",\n                \"id\": 6,\n                \"protoName\": \"type_name\"\n              },\n              \"extendee\": {\n                \"type\": \"string\",\n                \"id\": 2\n              },\n              \"defaultValue\": {\n                \"type\": \"string\",\n                \"id\": 7,\n                \"protoName\": \"default_value\"\n              },\n              \"oneofIndex\": {\n                \"type\": \"int32\",\n                \"id\": 9,\n                \"protoName\": \"oneof_index\"\n              },\n              \"jsonName\": {\n                \"type\": \"string\",\n                \"id\": 10,\n                \"protoName\": \"json_name\"\n              },\n              \"options\": {\n                \"type\": \"FieldOptions\",\n                \"id\": 8\n              },\n              \"proto3Optional\": {\n                \"type\": \"bool\",\n                \"id\": 17,\n                \"protoName\": \"proto3_optional\"\n              }\n            },\n            \"nested\": {\n              \"Type\": {\n                \"values\": {\n                  \"TYPE_DOUBLE\": 1,\n                  \"TYPE_FLOAT\": 2,\n                  \"TYPE_INT64\": 3,\n                  \"TYPE_UINT64\": 4,\n                  \"TYPE_INT32\": 5,\n                  \"TYPE_FIXED64\": 6,\n                  \"TYPE_FIXED32\": 7,\n                  \"TYPE_BOOL\": 8,\n                  \"TYPE_STRING\": 9,\n                  \"TYPE_GROUP\": 10,\n                  \"TYPE_MESSAGE\": 11,\n                  \"TYPE_BYTES\": 12,\n                  \"TYPE_UINT32\": 13,\n                  \"TYPE_ENUM\": 14,\n                  \"TYPE_SFIXED32\": 15,\n                  \"TYPE_SFIXED64\": 16,\n                  \"TYPE_SINT32\": 17,\n                  \"TYPE_SINT64\": 18\n                }\n              },\n              \"Label\": {\n                \"values\": {\n                  \"LABEL_OPTIONAL\": 1,\n                  \"LABEL_REQUIRED\": 2,\n                  \"LABEL_REPEATED\": 3\n                }\n              }\n            }\n          },\n          \"OneofDescriptorProto\": {\n            \"edition\": \"proto2\",\n            \"fields\": {\n              \"name\": {\n                \"type\": \"string\",\n                \"id\": 1\n              },\n              \"options\": {\n                \"type\": \"OneofOptions\",\n                \"id\": 2\n              }\n            }\n          },\n          \"EnumDescriptorProto\": {\n            \"edition\": \"proto2\",\n            \"fields\": {\n              \"name\": {\n                \"type\": \"string\",\n                \"id\": 1\n              },\n              \"value\": {\n                \"rule\": \"repeated\",\n                \"type\": \"EnumValueDescriptorProto\",\n                \"id\": 2\n              },\n              \"options\": {\n                \"type\": \"EnumOptions\",\n                \"id\": 3\n              },\n              \"reservedRange\": {\n                \"rule\": \"repeated\",\n                \"type\": \"EnumReservedRange\",\n                \"id\": 4,\n                \"protoName\": \"reserved_range\"\n              },\n              \"reservedName\": {\n                \"rule\": \"repeated\",\n                \"type\": \"string\",\n                \"id\": 5,\n                \"protoName\": \"reserved_name\"\n              }\n            },\n            \"nested\": {\n              \"EnumReservedRange\": {\n                \"fields\": {\n                  \"start\": {\n                    \"type\": \"int32\",\n                    \"id\": 1\n                  },\n                  \"end\": {\n                    \"type\": \"int32\",\n                    \"id\": 2\n                  }\n                }\n              }\n            }\n          },\n          \"EnumValueDescriptorProto\": {\n            \"edition\": \"proto2\",\n            \"fields\": {\n              \"name\": {\n                \"type\": \"string\",\n                \"id\": 1\n              },\n              \"number\": {\n                \"type\": \"int32\",\n                \"id\": 2\n              },\n              \"options\": {\n                \"type\": \"EnumValueOptions\",\n                \"id\": 3\n              }\n            }\n          },\n          \"ServiceDescriptorProto\": {\n            \"edition\": \"proto2\",\n            \"fields\": {\n              \"name\": {\n                \"type\": \"string\",\n                \"id\": 1\n              },\n              \"method\": {\n                \"rule\": \"repeated\",\n                \"type\": \"MethodDescriptorProto\",\n                \"id\": 2\n              },\n              \"options\": {\n                \"type\": \"ServiceOptions\",\n                \"id\": 3\n              }\n            }\n          },\n          \"MethodDescriptorProto\": {\n            \"edition\": \"proto2\",\n            \"fields\": {\n              \"name\": {\n                \"type\": \"string\",\n                \"id\": 1\n              },\n              \"inputType\": {\n                \"type\": \"string\",\n                \"id\": 2,\n                \"protoName\": \"input_type\"\n              },\n              \"outputType\": {\n                \"type\": \"string\",\n                \"id\": 3,\n                \"protoName\": \"output_type\"\n              },\n              \"options\": {\n                \"type\": \"MethodOptions\",\n                \"id\": 4\n              },\n              \"clientStreaming\": {\n                \"type\": \"bool\",\n                \"id\": 5,\n                \"protoName\": \"client_streaming\",\n                \"options\": {\n                  \"default\": false\n                }\n              },\n              \"serverStreaming\": {\n                \"type\": \"bool\",\n                \"id\": 6,\n                \"protoName\": \"server_streaming\",\n                \"options\": {\n                  \"default\": false\n                }\n              }\n            }\n          },\n          \"FileOptions\": {\n            \"edition\": \"proto2\",\n            \"fields\": {\n              \"javaPackage\": {\n                \"type\": \"string\",\n                \"id\": 1,\n                \"protoName\": \"java_package\"\n              },\n              \"javaOuterClassname\": {\n                \"type\": \"string\",\n                \"id\": 8,\n                \"protoName\": \"java_outer_classname\"\n              },\n              \"javaMultipleFiles\": {\n                \"type\": \"bool\",\n                \"id\": 10,\n                \"protoName\": \"java_multiple_files\",\n                \"options\": {\n                  \"default\": false\n                }\n              },\n              \"javaGenerateEqualsAndHash\": {\n                \"type\": \"bool\",\n                \"id\": 20,\n                \"protoName\": \"java_generate_equals_and_hash\",\n                \"options\": {\n                  \"deprecated\": true\n                }\n              },\n              \"javaStringCheckUtf8\": {\n                \"type\": \"bool\",\n                \"id\": 27,\n                \"protoName\": \"java_string_check_utf8\",\n                \"options\": {\n                  \"default\": false\n                }\n              },\n              \"optimizeFor\": {\n                \"type\": \"OptimizeMode\",\n                \"id\": 9,\n                \"protoName\": \"optimize_for\",\n                \"options\": {\n                  \"default\": \"SPEED\"\n                }\n              },\n              \"goPackage\": {\n                \"type\": \"string\",\n                \"id\": 11,\n                \"protoName\": \"go_package\"\n              },\n              \"ccGenericServices\": {\n                \"type\": \"bool\",\n                \"id\": 16,\n                \"protoName\": \"cc_generic_services\",\n                \"options\": {\n                  \"default\": false\n                }\n              },\n              \"javaGenericServices\": {\n                \"type\": \"bool\",\n                \"id\": 17,\n                \"protoName\": \"java_generic_services\",\n                \"options\": {\n                  \"default\": false\n                }\n              },\n              \"pyGenericServices\": {\n                \"type\": \"bool\",\n                \"id\": 18,\n                \"protoName\": \"py_generic_services\",\n                \"options\": {\n                  \"default\": false\n                }\n              },\n              \"phpGenericServices\": {\n                \"type\": \"bool\",\n                \"id\": 42,\n                \"protoName\": \"php_generic_services\",\n                \"options\": {\n                  \"default\": false\n                }\n              },\n              \"deprecated\": {\n                \"type\": \"bool\",\n                \"id\": 23,\n                \"options\": {\n                  \"default\": false\n                }\n              },\n              \"ccEnableArenas\": {\n                \"type\": \"bool\",\n                \"id\": 31,\n                \"protoName\": \"cc_enable_arenas\",\n                \"options\": {\n                  \"default\": true\n                }\n              },\n              \"objcClassPrefix\": {\n                \"type\": \"string\",\n                \"id\": 36,\n                \"protoName\": \"objc_class_prefix\"\n              },\n              \"csharpNamespace\": {\n                \"type\": \"string\",\n                \"id\": 37,\n                \"protoName\": \"csharp_namespace\"\n              },\n              \"swiftPrefix\": {\n                \"type\": \"string\",\n                \"id\": 39,\n                \"protoName\": \"swift_prefix\"\n              },\n              \"phpClassPrefix\": {\n                \"type\": \"string\",\n                \"id\": 40,\n                \"protoName\": \"php_class_prefix\"\n              },\n              \"phpNamespace\": {\n                \"type\": \"string\",\n                \"id\": 41,\n                \"protoName\": \"php_namespace\"\n              },\n              \"phpMetadataNamespace\": {\n                \"type\": \"string\",\n                \"id\": 44,\n                \"protoName\": \"php_metadata_namespace\"\n              },\n              \"rubyPackage\": {\n                \"type\": \"string\",\n                \"id\": 45,\n                \"protoName\": \"ruby_package\"\n              },\n              \"features\": {\n                \"type\": \"FeatureSet\",\n                \"id\": 50\n              },\n              \"uninterpretedOption\": {\n                \"rule\": \"repeated\",\n                \"type\": \"UninterpretedOption\",\n                \"id\": 999,\n                \"protoName\": \"uninterpreted_option\"\n              }\n            },\n            \"extensions\": [\n              [\n                1000,\n                536870911\n              ]\n            ],\n            \"reserved\": [\n              [\n                38,\n                38\n              ]\n            ],\n            \"nested\": {\n              \"OptimizeMode\": {\n                \"values\": {\n                  \"SPEED\": 1,\n                  \"CODE_SIZE\": 2,\n                  \"LITE_RUNTIME\": 3\n                }\n              }\n            }\n          },\n          \"MessageOptions\": {\n            \"edition\": \"proto2\",\n            \"fields\": {\n              \"messageSetWireFormat\": {\n                \"type\": \"bool\",\n                \"id\": 1,\n                \"protoName\": \"message_set_wire_format\",\n                \"options\": {\n                  \"default\": false\n                }\n              },\n              \"noStandardDescriptorAccessor\": {\n                \"type\": \"bool\",\n                \"id\": 2,\n                \"protoName\": \"no_standard_descriptor_accessor\",\n                \"options\": {\n                  \"default\": false\n                }\n              },\n              \"deprecated\": {\n                \"type\": \"bool\",\n                \"id\": 3,\n                \"options\": {\n                  \"default\": false\n                }\n              },\n              \"mapEntry\": {\n                \"type\": \"bool\",\n                \"id\": 7,\n                \"protoName\": \"map_entry\"\n              },\n              \"deprecatedLegacyJsonFieldConflicts\": {\n                \"type\": \"bool\",\n                \"id\": 11,\n                \"protoName\": \"deprecated_legacy_json_field_conflicts\",\n                \"options\": {\n                  \"deprecated\": true\n                }\n              },\n              \"features\": {\n                \"type\": \"FeatureSet\",\n                \"id\": 12\n              },\n              \"uninterpretedOption\": {\n                \"rule\": \"repeated\",\n                \"type\": \"UninterpretedOption\",\n                \"id\": 999,\n                \"protoName\": \"uninterpreted_option\"\n              }\n            },\n            \"extensions\": [\n              [\n                1000,\n                536870911\n              ]\n            ],\n            \"reserved\": [\n              [\n                4,\n                4\n              ],\n              [\n                5,\n                5\n              ],\n              [\n                6,\n                6\n              ],\n              [\n                8,\n                8\n              ],\n              [\n                9,\n                9\n              ]\n            ]\n          },\n          \"FieldOptions\": {\n            \"edition\": \"proto2\",\n            \"fields\": {\n              \"ctype\": {\n                \"type\": \"CType\",\n                \"id\": 1,\n                \"options\": {\n                  \"default\": \"STRING\"\n                }\n              },\n              \"packed\": {\n                \"type\": \"bool\",\n                \"id\": 2\n              },\n              \"jstype\": {\n                \"type\": \"JSType\",\n                \"id\": 6,\n                \"options\": {\n                  \"default\": \"JS_NORMAL\"\n                }\n              },\n              \"lazy\": {\n                \"type\": \"bool\",\n                \"id\": 5,\n                \"options\": {\n                  \"default\": false\n                }\n              },\n              \"unverifiedLazy\": {\n                \"type\": \"bool\",\n                \"id\": 15,\n                \"protoName\": \"unverified_lazy\",\n                \"options\": {\n                  \"default\": false\n                }\n              },\n              \"deprecated\": {\n                \"type\": \"bool\",\n                \"id\": 3,\n                \"options\": {\n                  \"default\": false\n                }\n              },\n              \"weak\": {\n                \"type\": \"bool\",\n                \"id\": 10,\n                \"options\": {\n                  \"default\": false\n                }\n              },\n              \"debugRedact\": {\n                \"type\": \"bool\",\n                \"id\": 16,\n                \"protoName\": \"debug_redact\",\n                \"options\": {\n                  \"default\": false\n                }\n              },\n              \"retention\": {\n                \"type\": \"OptionRetention\",\n                \"id\": 17\n              },\n              \"targets\": {\n                \"rule\": \"repeated\",\n                \"type\": \"OptionTargetType\",\n                \"id\": 19\n              },\n              \"editionDefaults\": {\n                \"rule\": \"repeated\",\n                \"type\": \"EditionDefault\",\n                \"id\": 20,\n                \"protoName\": \"edition_defaults\"\n              },\n              \"features\": {\n                \"type\": \"FeatureSet\",\n                \"id\": 21\n              },\n              \"uninterpretedOption\": {\n                \"rule\": \"repeated\",\n                \"type\": \"UninterpretedOption\",\n                \"id\": 999,\n                \"protoName\": \"uninterpreted_option\"\n              }\n            },\n            \"extensions\": [\n              [\n                1000,\n                536870911\n              ]\n            ],\n            \"reserved\": [\n              [\n                4,\n                4\n              ],\n              [\n                18,\n                18\n              ]\n            ],\n            \"nested\": {\n              \"CType\": {\n                \"values\": {\n                  \"STRING\": 0,\n                  \"CORD\": 1,\n                  \"STRING_PIECE\": 2\n                }\n              },\n              \"JSType\": {\n                \"values\": {\n                  \"JS_NORMAL\": 0,\n                  \"JS_STRING\": 1,\n                  \"JS_NUMBER\": 2\n                }\n              },\n              \"OptionRetention\": {\n                \"values\": {\n                  \"RETENTION_UNKNOWN\": 0,\n                  \"RETENTION_RUNTIME\": 1,\n                  \"RETENTION_SOURCE\": 2\n                }\n              },\n              \"OptionTargetType\": {\n                \"values\": {\n                  \"TARGET_TYPE_UNKNOWN\": 0,\n                  \"TARGET_TYPE_FILE\": 1,\n                  \"TARGET_TYPE_EXTENSION_RANGE\": 2,\n                  \"TARGET_TYPE_MESSAGE\": 3,\n                  \"TARGET_TYPE_FIELD\": 4,\n                  \"TARGET_TYPE_ONEOF\": 5,\n                  \"TARGET_TYPE_ENUM\": 6,\n                  \"TARGET_TYPE_ENUM_ENTRY\": 7,\n                  \"TARGET_TYPE_SERVICE\": 8,\n                  \"TARGET_TYPE_METHOD\": 9\n                }\n              },\n              \"EditionDefault\": {\n                \"fields\": {\n                  \"edition\": {\n                    \"type\": \"Edition\",\n                    \"id\": 3\n                  },\n                  \"value\": {\n                    \"type\": \"string\",\n                    \"id\": 2\n                  }\n                }\n              }\n            }\n          },\n          \"OneofOptions\": {\n            \"edition\": \"proto2\",\n            \"fields\": {\n              \"features\": {\n                \"type\": \"FeatureSet\",\n                \"id\": 1\n              },\n              \"uninterpretedOption\": {\n                \"rule\": \"repeated\",\n                \"type\": \"UninterpretedOption\",\n                \"id\": 999,\n                \"protoName\": \"uninterpreted_option\"\n              }\n            },\n            \"extensions\": [\n              [\n                1000,\n                536870911\n              ]\n            ]\n          },\n          \"EnumOptions\": {\n            \"edition\": \"proto2\",\n            \"fields\": {\n              \"allowAlias\": {\n                \"type\": \"bool\",\n                \"id\": 2,\n                \"protoName\": \"allow_alias\"\n              },\n              \"deprecated\": {\n                \"type\": \"bool\",\n                \"id\": 3,\n                \"options\": {\n                  \"default\": false\n                }\n              },\n              \"deprecatedLegacyJsonFieldConflicts\": {\n                \"type\": \"bool\",\n                \"id\": 6,\n                \"protoName\": \"deprecated_legacy_json_field_conflicts\",\n                \"options\": {\n                  \"deprecated\": true\n                }\n              },\n              \"features\": {\n                \"type\": \"FeatureSet\",\n                \"id\": 7\n              },\n              \"uninterpretedOption\": {\n                \"rule\": \"repeated\",\n                \"type\": \"UninterpretedOption\",\n                \"id\": 999,\n                \"protoName\": \"uninterpreted_option\"\n              }\n            },\n            \"extensions\": [\n              [\n                1000,\n                536870911\n              ]\n            ],\n            \"reserved\": [\n              [\n                5,\n                5\n              ]\n            ]\n          },\n          \"EnumValueOptions\": {\n            \"edition\": \"proto2\",\n            \"fields\": {\n              \"deprecated\": {\n                \"type\": \"bool\",\n                \"id\": 1,\n                \"options\": {\n                  \"default\": false\n                }\n              },\n              \"features\": {\n                \"type\": \"FeatureSet\",\n                \"id\": 2\n              },\n              \"debugRedact\": {\n                \"type\": \"bool\",\n                \"id\": 3,\n                \"protoName\": \"debug_redact\",\n                \"options\": {\n                  \"default\": false\n                }\n              },\n              \"uninterpretedOption\": {\n                \"rule\": \"repeated\",\n                \"type\": \"UninterpretedOption\",\n                \"id\": 999,\n                \"protoName\": \"uninterpreted_option\"\n              }\n            },\n            \"extensions\": [\n              [\n                1000,\n                536870911\n              ]\n            ]\n          },\n          \"ServiceOptions\": {\n            \"edition\": \"proto2\",\n            \"fields\": {\n              \"features\": {\n                \"type\": \"FeatureSet\",\n                \"id\": 34\n              },\n              \"deprecated\": {\n                \"type\": \"bool\",\n                \"id\": 33,\n                \"options\": {\n                  \"default\": false\n                }\n              },\n              \"uninterpretedOption\": {\n                \"rule\": \"repeated\",\n                \"type\": \"UninterpretedOption\",\n                \"id\": 999,\n                \"protoName\": \"uninterpreted_option\"\n              }\n            },\n            \"extensions\": [\n              [\n                1000,\n                536870911\n              ]\n            ]\n          },\n          \"MethodOptions\": {\n            \"edition\": \"proto2\",\n            \"fields\": {\n              \"deprecated\": {\n                \"type\": \"bool\",\n                \"id\": 33,\n                \"options\": {\n                  \"default\": false\n                }\n              },\n              \"idempotencyLevel\": {\n                \"type\": \"IdempotencyLevel\",\n                \"id\": 34,\n                \"protoName\": \"idempotency_level\",\n                \"options\": {\n                  \"default\": \"IDEMPOTENCY_UNKNOWN\"\n                }\n              },\n              \"features\": {\n                \"type\": \"FeatureSet\",\n                \"id\": 35\n              },\n              \"uninterpretedOption\": {\n                \"rule\": \"repeated\",\n                \"type\": \"UninterpretedOption\",\n                \"id\": 999,\n                \"protoName\": \"uninterpreted_option\"\n              }\n            },\n            \"extensions\": [\n              [\n                1000,\n                536870911\n              ]\n            ],\n            \"nested\": {\n              \"IdempotencyLevel\": {\n                \"values\": {\n                  \"IDEMPOTENCY_UNKNOWN\": 0,\n                  \"NO_SIDE_EFFECTS\": 1,\n                  \"IDEMPOTENT\": 2\n                }\n              }\n            }\n          },\n          \"UninterpretedOption\": {\n            \"edition\": \"proto2\",\n            \"fields\": {\n              \"name\": {\n                \"rule\": \"repeated\",\n                \"type\": \"NamePart\",\n                \"id\": 2\n              },\n              \"identifierValue\": {\n                \"type\": \"string\",\n                \"id\": 3,\n                \"protoName\": \"identifier_value\"\n              },\n              \"positiveIntValue\": {\n                \"type\": \"uint64\",\n                \"id\": 4,\n                \"protoName\": \"positive_int_value\"\n              },\n              \"negativeIntValue\": {\n                \"type\": \"int64\",\n                \"id\": 5,\n                \"protoName\": \"negative_int_value\"\n              },\n              \"doubleValue\": {\n                \"type\": \"double\",\n                \"id\": 6,\n                \"protoName\": \"double_value\"\n              },\n              \"stringValue\": {\n                \"type\": \"bytes\",\n                \"id\": 7,\n                \"protoName\": \"string_value\"\n              },\n              \"aggregateValue\": {\n                \"type\": \"string\",\n                \"id\": 8,\n                \"protoName\": \"aggregate_value\"\n              }\n            },\n            \"nested\": {\n              \"NamePart\": {\n                \"fields\": {\n                  \"namePart\": {\n                    \"rule\": \"required\",\n                    \"type\": \"string\",\n                    \"id\": 1,\n                    \"protoName\": \"name_part\"\n                  },\n                  \"isExtension\": {\n                    \"rule\": \"required\",\n                    \"type\": \"bool\",\n                    \"id\": 2,\n                    \"protoName\": \"is_extension\"\n                  }\n                }\n              }\n            }\n          },\n          \"FeatureSet\": {\n            \"edition\": \"proto2\",\n            \"fields\": {\n              \"fieldPresence\": {\n                \"type\": \"FieldPresence\",\n                \"id\": 1,\n                \"protoName\": \"field_presence\",\n                \"options\": {\n                  \"retention\": \"RETENTION_RUNTIME\",\n                  \"targets\": \"TARGET_TYPE_FILE\",\n                  \"edition_defaults.edition\": \"EDITION_2023\",\n                  \"edition_defaults.value\": \"EXPLICIT\"\n                }\n              },\n              \"enumType\": {\n                \"type\": \"EnumType\",\n                \"id\": 2,\n                \"protoName\": \"enum_type\",\n                \"options\": {\n                  \"retention\": \"RETENTION_RUNTIME\",\n                  \"targets\": \"TARGET_TYPE_FILE\",\n                  \"edition_defaults.edition\": \"EDITION_PROTO3\",\n                  \"edition_defaults.value\": \"OPEN\"\n                }\n              },\n              \"repeatedFieldEncoding\": {\n                \"type\": \"RepeatedFieldEncoding\",\n                \"id\": 3,\n                \"protoName\": \"repeated_field_encoding\",\n                \"options\": {\n                  \"retention\": \"RETENTION_RUNTIME\",\n                  \"targets\": \"TARGET_TYPE_FILE\",\n                  \"edition_defaults.edition\": \"EDITION_PROTO3\",\n                  \"edition_defaults.value\": \"PACKED\"\n                }\n              },\n              \"utf8Validation\": {\n                \"type\": \"Utf8Validation\",\n                \"id\": 4,\n                \"protoName\": \"utf8_validation\",\n                \"options\": {\n                  \"retention\": \"RETENTION_RUNTIME\",\n                  \"targets\": \"TARGET_TYPE_FILE\",\n                  \"edition_defaults.edition\": \"EDITION_PROTO3\",\n                  \"edition_defaults.value\": \"VERIFY\"\n                }\n              },\n              \"messageEncoding\": {\n                \"type\": \"MessageEncoding\",\n                \"id\": 5,\n                \"protoName\": \"message_encoding\",\n                \"options\": {\n                  \"retention\": \"RETENTION_RUNTIME\",\n                  \"targets\": \"TARGET_TYPE_FILE\",\n                  \"edition_defaults.edition\": \"EDITION_PROTO2\",\n                  \"edition_defaults.value\": \"LENGTH_PREFIXED\"\n                }\n              },\n              \"jsonFormat\": {\n                \"type\": \"JsonFormat\",\n                \"id\": 6,\n                \"protoName\": \"json_format\",\n                \"options\": {\n                  \"retention\": \"RETENTION_RUNTIME\",\n                  \"targets\": \"TARGET_TYPE_FILE\",\n                  \"edition_defaults.edition\": \"EDITION_PROTO3\",\n                  \"edition_defaults.value\": \"ALLOW\"\n                }\n              }\n            },\n            \"extensions\": [\n              [\n                1000,\n                1000\n              ],\n              [\n                1001,\n                1001\n              ],\n              [\n                9995,\n                9999\n              ]\n            ],\n            \"reserved\": [\n              [\n                999,\n                999\n              ]\n            ],\n            \"nested\": {\n              \"FieldPresence\": {\n                \"values\": {\n                  \"FIELD_PRESENCE_UNKNOWN\": 0,\n                  \"EXPLICIT\": 1,\n                  \"IMPLICIT\": 2,\n                  \"LEGACY_REQUIRED\": 3\n                }\n              },\n              \"EnumType\": {\n                \"values\": {\n                  \"ENUM_TYPE_UNKNOWN\": 0,\n                  \"OPEN\": 1,\n                  \"CLOSED\": 2\n                }\n              },\n              \"RepeatedFieldEncoding\": {\n                \"values\": {\n                  \"REPEATED_FIELD_ENCODING_UNKNOWN\": 0,\n                  \"PACKED\": 1,\n                  \"EXPANDED\": 2\n                }\n              },\n              \"Utf8Validation\": {\n                \"values\": {\n                  \"UTF8_VALIDATION_UNKNOWN\": 0,\n                  \"UNVERIFIED\": 1,\n                  \"VERIFY\": 2\n                }\n              },\n              \"MessageEncoding\": {\n                \"values\": {\n                  \"MESSAGE_ENCODING_UNKNOWN\": 0,\n                  \"LENGTH_PREFIXED\": 1,\n                  \"DELIMITED\": 2\n                }\n              },\n              \"JsonFormat\": {\n                \"values\": {\n                  \"JSON_FORMAT_UNKNOWN\": 0,\n                  \"ALLOW\": 1,\n                  \"LEGACY_BEST_EFFORT\": 2\n                }\n              }\n            }\n          },\n          \"FeatureSetDefaults\": {\n            \"edition\": \"proto2\",\n            \"fields\": {\n              \"defaults\": {\n                \"rule\": \"repeated\",\n                \"type\": \"FeatureSetEditionDefault\",\n                \"id\": 1\n              },\n              \"minimumEdition\": {\n                \"type\": \"Edition\",\n                \"id\": 4,\n                \"protoName\": \"minimum_edition\"\n              },\n              \"maximumEdition\": {\n                \"type\": \"Edition\",\n                \"id\": 5,\n                \"protoName\": \"maximum_edition\"\n              }\n            },\n            \"nested\": {\n              \"FeatureSetEditionDefault\": {\n                \"fields\": {\n                  \"edition\": {\n                    \"type\": \"Edition\",\n                    \"id\": 3\n                  },\n                  \"features\": {\n                    \"type\": \"FeatureSet\",\n                    \"id\": 2\n                  }\n                }\n              }\n            }\n          },\n          \"SourceCodeInfo\": {\n            \"edition\": \"proto2\",\n            \"fields\": {\n              \"location\": {\n                \"rule\": \"repeated\",\n                \"type\": \"Location\",\n                \"id\": 1\n              }\n            },\n            \"nested\": {\n              \"Location\": {\n                \"fields\": {\n                  \"path\": {\n                    \"rule\": \"repeated\",\n                    \"type\": \"int32\",\n                    \"id\": 1,\n                    \"options\": {\n                      \"packed\": true\n                    }\n                  },\n                  \"span\": {\n                    \"rule\": \"repeated\",\n                    \"type\": \"int32\",\n                    \"id\": 2,\n                    \"options\": {\n                      \"packed\": true\n                    }\n                  },\n                  \"leadingComments\": {\n                    \"type\": \"string\",\n                    \"id\": 3,\n                    \"protoName\": \"leading_comments\"\n                  },\n                  \"trailingComments\": {\n                    \"type\": \"string\",\n                    \"id\": 4,\n                    \"protoName\": \"trailing_comments\"\n                  },\n                  \"leadingDetachedComments\": {\n                    \"rule\": \"repeated\",\n                    \"type\": \"string\",\n                    \"id\": 6,\n                    \"protoName\": \"leading_detached_comments\"\n                  }\n                }\n              }\n            }\n          },\n          \"GeneratedCodeInfo\": {\n            \"edition\": \"proto2\",\n            \"fields\": {\n              \"annotation\": {\n                \"rule\": \"repeated\",\n                \"type\": \"Annotation\",\n                \"id\": 1\n              }\n            },\n            \"nested\": {\n              \"Annotation\": {\n                \"fields\": {\n                  \"path\": {\n                    \"rule\": \"repeated\",\n                    \"type\": \"int32\",\n                    \"id\": 1,\n                    \"options\": {\n                      \"packed\": true\n                    }\n                  },\n                  \"sourceFile\": {\n                    \"type\": \"string\",\n                    \"id\": 2,\n                    \"protoName\": \"source_file\"\n                  },\n                  \"begin\": {\n                    \"type\": \"int32\",\n                    \"id\": 3\n                  },\n                  \"end\": {\n                    \"type\": \"int32\",\n                    \"id\": 4\n                  },\n                  \"semantic\": {\n                    \"type\": \"Semantic\",\n                    \"id\": 5\n                  }\n                },\n                \"nested\": {\n                  \"Semantic\": {\n                    \"values\": {\n                      \"NONE\": 0,\n                      \"SET\": 1,\n                      \"ALIAS\": 2\n                    }\n                  }\n                }\n              }\n            }\n          },\n          \"Struct\": {\n            \"fields\": {\n              \"fields\": {\n                \"keyType\": \"string\",\n                \"type\": \"Value\",\n                \"id\": 1\n              }\n            }\n          },\n          \"Value\": {\n            \"oneofs\": {\n              \"kind\": {\n                \"oneof\": [\n                  \"nullValue\",\n                  \"numberValue\",\n                  \"stringValue\",\n                  \"boolValue\",\n                  \"structValue\",\n                  \"listValue\"\n                ]\n              }\n            },\n            \"fields\": {\n              \"nullValue\": {\n                \"type\": \"NullValue\",\n                \"id\": 1,\n                \"protoName\": \"null_value\"\n              },\n              \"numberValue\": {\n                \"type\": \"double\",\n                \"id\": 2,\n                \"protoName\": \"number_value\"\n              },\n              \"stringValue\": {\n                \"type\": \"string\",\n                \"id\": 3,\n                \"protoName\": \"string_value\"\n              },\n              \"boolValue\": {\n                \"type\": \"bool\",\n                \"id\": 4,\n                \"protoName\": \"bool_value\"\n              },\n              \"structValue\": {\n                \"type\": \"Struct\",\n                \"id\": 5,\n                \"protoName\": \"struct_value\"\n              },\n              \"listValue\": {\n                \"type\": \"ListValue\",\n                \"id\": 6,\n                \"protoName\": \"list_value\"\n              }\n            }\n          },\n          \"NullValue\": {\n            \"values\": {\n              \"NULL_VALUE\": 0\n            }\n          },\n          \"ListValue\": {\n            \"fields\": {\n              \"values\": {\n                \"rule\": \"repeated\",\n                \"type\": \"Value\",\n                \"id\": 1\n              }\n            }\n          }\n        }\n      },\n      \"api\": {\n        \"options\": {\n          \"go_package\": \"google.golang.org/genproto/googleapis/api/annotations;annotations\",\n          \"java_multiple_files\": true,\n          \"java_outer_classname\": \"HttpProto\",\n          \"java_package\": \"com.google.api\",\n          \"objc_class_prefix\": \"GAPI\",\n          \"cc_enable_arenas\": true\n        },\n        \"nested\": {\n          \"http\": {\n            \"type\": \"HttpRule\",\n            \"id\": 72295728,\n            \"extend\": \"google.protobuf.MethodOptions\"\n          },\n          \"Http\": {\n            \"fields\": {\n              \"rules\": {\n                \"rule\": \"repeated\",\n                \"type\": \"HttpRule\",\n                \"id\": 1\n              },\n              \"fullyDecodeReservedExpansion\": {\n                \"type\": \"bool\",\n                \"id\": 2,\n                \"protoName\": \"fully_decode_reserved_expansion\"\n              }\n            }\n          },\n          \"HttpRule\": {\n            \"oneofs\": {\n              \"pattern\": {\n                \"oneof\": [\n                  \"get\",\n                  \"put\",\n                  \"post\",\n                  \"delete\",\n                  \"patch\",\n                  \"custom\"\n                ]\n              }\n            },\n            \"fields\": {\n              \"selector\": {\n                \"type\": \"string\",\n                \"id\": 1\n              },\n              \"get\": {\n                \"type\": \"string\",\n                \"id\": 2\n              },\n              \"put\": {\n                \"type\": \"string\",\n                \"id\": 3\n              },\n              \"post\": {\n                \"type\": \"string\",\n                \"id\": 4\n              },\n              \"delete\": {\n                \"type\": \"string\",\n                \"id\": 5\n              },\n              \"patch\": {\n                \"type\": \"string\",\n                \"id\": 6\n              },\n              \"custom\": {\n                \"type\": \"CustomHttpPattern\",\n                \"id\": 8\n              },\n              \"body\": {\n                \"type\": \"string\",\n                \"id\": 7\n              },\n              \"responseBody\": {\n                \"type\": \"string\",\n                \"id\": 12,\n                \"protoName\": \"response_body\"\n              },\n              \"additionalBindings\": {\n                \"rule\": \"repeated\",\n                \"type\": \"HttpRule\",\n                \"id\": 11,\n                \"protoName\": \"additional_bindings\"\n              }\n            }\n          },\n          \"CustomHttpPattern\": {\n            \"fields\": {\n              \"kind\": {\n                \"type\": \"string\",\n                \"id\": 1\n              },\n              \"path\": {\n                \"type\": \"string\",\n                \"id\": 2\n              }\n            }\n          }\n        }\n      },\n      \"rpc\": {\n        \"options\": {\n          \"cc_enable_arenas\": true,\n          \"go_package\": \"google.golang.org/genproto/googleapis/rpc/status;status\",\n          \"java_multiple_files\": true,\n          \"java_outer_classname\": \"StatusProto\",\n          \"java_package\": \"com.google.rpc\",\n          \"objc_class_prefix\": \"RPC\"\n        },\n        \"nested\": {\n          \"Status\": {\n            \"fields\": {\n              \"code\": {\n                \"type\": \"int32\",\n                \"id\": 1\n              },\n              \"message\": {\n                \"type\": \"string\",\n                \"id\": 2\n              },\n              \"details\": {\n                \"rule\": \"repeated\",\n                \"type\": \"google.protobuf.Any\",\n                \"id\": 3\n              }\n            }\n          }\n        }\n      }\n    }\n  },\n  \"grpc\": {\n    \"nested\": {\n      \"gateway\": {\n        \"nested\": {\n          \"protoc_gen_openapiv2\": {\n            \"nested\": {\n              \"options\": {\n                \"options\": {\n                  \"go_package\": \"github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options\"\n                },\n                \"nested\": {\n                  \"openapiv2Swagger\": {\n                    \"type\": \"Swagger\",\n                    \"id\": 1042,\n                    \"extend\": \"google.protobuf.FileOptions\",\n                    \"protoName\": \"openapiv2_swagger\"\n                  },\n                  \"openapiv2Operation\": {\n                    \"type\": \"Operation\",\n                    \"id\": 1042,\n                    \"extend\": \"google.protobuf.MethodOptions\",\n                    \"protoName\": \"openapiv2_operation\"\n                  },\n                  \"openapiv2Schema\": {\n                    \"type\": \"Schema\",\n                    \"id\": 1042,\n                    \"extend\": \"google.protobuf.MessageOptions\",\n                    \"protoName\": \"openapiv2_schema\"\n                  },\n                  \"openapiv2Enum\": {\n                    \"type\": \"EnumSchema\",\n                    \"id\": 1042,\n                    \"extend\": \"google.protobuf.EnumOptions\",\n                    \"protoName\": \"openapiv2_enum\"\n                  },\n                  \"openapiv2Tag\": {\n                    \"type\": \"Tag\",\n                    \"id\": 1042,\n                    \"extend\": \"google.protobuf.ServiceOptions\",\n                    \"protoName\": \"openapiv2_tag\"\n                  },\n                  \"openapiv2Field\": {\n                    \"type\": \"JSONSchema\",\n                    \"id\": 1042,\n                    \"extend\": \"google.protobuf.FieldOptions\",\n                    \"protoName\": \"openapiv2_field\"\n                  },\n                  \"Scheme\": {\n                    \"values\": {\n                      \"UNKNOWN\": 0,\n                      \"HTTP\": 1,\n                      \"HTTPS\": 2,\n                      \"WS\": 3,\n                      \"WSS\": 4\n                    }\n                  },\n                  \"Swagger\": {\n                    \"fields\": {\n                      \"swagger\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"info\": {\n                        \"type\": \"Info\",\n                        \"id\": 2\n                      },\n                      \"host\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"basePath\": {\n                        \"type\": \"string\",\n                        \"id\": 4,\n                        \"protoName\": \"base_path\"\n                      },\n                      \"schemes\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"Scheme\",\n                        \"id\": 5\n                      },\n                      \"consumes\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"string\",\n                        \"id\": 6\n                      },\n                      \"produces\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"string\",\n                        \"id\": 7\n                      },\n                      \"responses\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"Response\",\n                        \"id\": 10\n                      },\n                      \"securityDefinitions\": {\n                        \"type\": \"SecurityDefinitions\",\n                        \"id\": 11,\n                        \"protoName\": \"security_definitions\"\n                      },\n                      \"security\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"SecurityRequirement\",\n                        \"id\": 12\n                      },\n                      \"tags\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"Tag\",\n                        \"id\": 13\n                      },\n                      \"externalDocs\": {\n                        \"type\": \"ExternalDocumentation\",\n                        \"id\": 14,\n                        \"protoName\": \"external_docs\"\n                      },\n                      \"extensions\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"google.protobuf.Value\",\n                        \"id\": 15\n                      }\n                    },\n                    \"reserved\": [\n                      [\n                        8,\n                        8\n                      ],\n                      [\n                        9,\n                        9\n                      ]\n                    ]\n                  },\n                  \"Operation\": {\n                    \"fields\": {\n                      \"tags\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"summary\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"description\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"externalDocs\": {\n                        \"type\": \"ExternalDocumentation\",\n                        \"id\": 4,\n                        \"protoName\": \"external_docs\"\n                      },\n                      \"operationId\": {\n                        \"type\": \"string\",\n                        \"id\": 5,\n                        \"protoName\": \"operation_id\"\n                      },\n                      \"consumes\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"string\",\n                        \"id\": 6\n                      },\n                      \"produces\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"string\",\n                        \"id\": 7\n                      },\n                      \"responses\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"Response\",\n                        \"id\": 9\n                      },\n                      \"schemes\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"Scheme\",\n                        \"id\": 10\n                      },\n                      \"deprecated\": {\n                        \"type\": \"bool\",\n                        \"id\": 11\n                      },\n                      \"security\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"SecurityRequirement\",\n                        \"id\": 12\n                      },\n                      \"extensions\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"google.protobuf.Value\",\n                        \"id\": 13\n                      },\n                      \"parameters\": {\n                        \"type\": \"Parameters\",\n                        \"id\": 14\n                      }\n                    },\n                    \"reserved\": [\n                      [\n                        8,\n                        8\n                      ]\n                    ]\n                  },\n                  \"Parameters\": {\n                    \"fields\": {\n                      \"headers\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"HeaderParameter\",\n                        \"id\": 1\n                      }\n                    }\n                  },\n                  \"HeaderParameter\": {\n                    \"fields\": {\n                      \"name\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"description\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"type\": {\n                        \"type\": \"Type\",\n                        \"id\": 3\n                      },\n                      \"format\": {\n                        \"type\": \"string\",\n                        \"id\": 4\n                      },\n                      \"required\": {\n                        \"type\": \"bool\",\n                        \"id\": 5\n                      }\n                    },\n                    \"reserved\": [\n                      [\n                        6,\n                        6\n                      ],\n                      [\n                        7,\n                        7\n                      ]\n                    ],\n                    \"nested\": {\n                      \"Type\": {\n                        \"values\": {\n                          \"UNKNOWN\": 0,\n                          \"STRING\": 1,\n                          \"NUMBER\": 2,\n                          \"INTEGER\": 3,\n                          \"BOOLEAN\": 4\n                        }\n                      }\n                    }\n                  },\n                  \"Header\": {\n                    \"fields\": {\n                      \"description\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"type\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"format\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"default\": {\n                        \"type\": \"string\",\n                        \"id\": 6\n                      },\n                      \"pattern\": {\n                        \"type\": \"string\",\n                        \"id\": 13\n                      }\n                    },\n                    \"reserved\": [\n                      [\n                        4,\n                        4\n                      ],\n                      [\n                        5,\n                        5\n                      ],\n                      [\n                        7,\n                        7\n                      ],\n                      [\n                        8,\n                        8\n                      ],\n                      [\n                        9,\n                        9\n                      ],\n                      [\n                        10,\n                        10\n                      ],\n                      [\n                        11,\n                        11\n                      ],\n                      [\n                        12,\n                        12\n                      ],\n                      [\n                        14,\n                        14\n                      ],\n                      [\n                        15,\n                        15\n                      ],\n                      [\n                        16,\n                        16\n                      ],\n                      [\n                        17,\n                        17\n                      ],\n                      [\n                        18,\n                        18\n                      ]\n                    ]\n                  },\n                  \"Response\": {\n                    \"fields\": {\n                      \"description\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"schema\": {\n                        \"type\": \"Schema\",\n                        \"id\": 2\n                      },\n                      \"headers\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"Header\",\n                        \"id\": 3\n                      },\n                      \"examples\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"string\",\n                        \"id\": 4\n                      },\n                      \"extensions\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"google.protobuf.Value\",\n                        \"id\": 5\n                      }\n                    }\n                  },\n                  \"Info\": {\n                    \"fields\": {\n                      \"title\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"description\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"termsOfService\": {\n                        \"type\": \"string\",\n                        \"id\": 3,\n                        \"protoName\": \"terms_of_service\"\n                      },\n                      \"contact\": {\n                        \"type\": \"Contact\",\n                        \"id\": 4\n                      },\n                      \"license\": {\n                        \"type\": \"License\",\n                        \"id\": 5\n                      },\n                      \"version\": {\n                        \"type\": \"string\",\n                        \"id\": 6\n                      },\n                      \"extensions\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"google.protobuf.Value\",\n                        \"id\": 7\n                      }\n                    }\n                  },\n                  \"Contact\": {\n                    \"fields\": {\n                      \"name\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"url\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"email\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      }\n                    }\n                  },\n                  \"License\": {\n                    \"fields\": {\n                      \"name\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"url\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      }\n                    }\n                  },\n                  \"ExternalDocumentation\": {\n                    \"fields\": {\n                      \"description\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"url\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      }\n                    }\n                  },\n                  \"Schema\": {\n                    \"fields\": {\n                      \"jsonSchema\": {\n                        \"type\": \"JSONSchema\",\n                        \"id\": 1,\n                        \"protoName\": \"json_schema\"\n                      },\n                      \"discriminator\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"readOnly\": {\n                        \"type\": \"bool\",\n                        \"id\": 3,\n                        \"protoName\": \"read_only\"\n                      },\n                      \"externalDocs\": {\n                        \"type\": \"ExternalDocumentation\",\n                        \"id\": 5,\n                        \"protoName\": \"external_docs\"\n                      },\n                      \"example\": {\n                        \"type\": \"string\",\n                        \"id\": 6\n                      }\n                    },\n                    \"reserved\": [\n                      [\n                        4,\n                        4\n                      ]\n                    ]\n                  },\n                  \"EnumSchema\": {\n                    \"fields\": {\n                      \"description\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"default\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"title\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"required\": {\n                        \"type\": \"bool\",\n                        \"id\": 4\n                      },\n                      \"readOnly\": {\n                        \"type\": \"bool\",\n                        \"id\": 5,\n                        \"protoName\": \"read_only\"\n                      },\n                      \"externalDocs\": {\n                        \"type\": \"ExternalDocumentation\",\n                        \"id\": 6,\n                        \"protoName\": \"external_docs\"\n                      },\n                      \"example\": {\n                        \"type\": \"string\",\n                        \"id\": 7\n                      },\n                      \"ref\": {\n                        \"type\": \"string\",\n                        \"id\": 8\n                      },\n                      \"extensions\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"google.protobuf.Value\",\n                        \"id\": 9\n                      }\n                    }\n                  },\n                  \"JSONSchema\": {\n                    \"fields\": {\n                      \"ref\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"title\": {\n                        \"type\": \"string\",\n                        \"id\": 5\n                      },\n                      \"description\": {\n                        \"type\": \"string\",\n                        \"id\": 6\n                      },\n                      \"default\": {\n                        \"type\": \"string\",\n                        \"id\": 7\n                      },\n                      \"readOnly\": {\n                        \"type\": \"bool\",\n                        \"id\": 8,\n                        \"protoName\": \"read_only\"\n                      },\n                      \"example\": {\n                        \"type\": \"string\",\n                        \"id\": 9\n                      },\n                      \"multipleOf\": {\n                        \"type\": \"double\",\n                        \"id\": 10,\n                        \"protoName\": \"multiple_of\"\n                      },\n                      \"maximum\": {\n                        \"type\": \"double\",\n                        \"id\": 11\n                      },\n                      \"exclusiveMaximum\": {\n                        \"type\": \"bool\",\n                        \"id\": 12,\n                        \"protoName\": \"exclusive_maximum\"\n                      },\n                      \"minimum\": {\n                        \"type\": \"double\",\n                        \"id\": 13\n                      },\n                      \"exclusiveMinimum\": {\n                        \"type\": \"bool\",\n                        \"id\": 14,\n                        \"protoName\": \"exclusive_minimum\"\n                      },\n                      \"maxLength\": {\n                        \"type\": \"uint64\",\n                        \"id\": 15,\n                        \"protoName\": \"max_length\"\n                      },\n                      \"minLength\": {\n                        \"type\": \"uint64\",\n                        \"id\": 16,\n                        \"protoName\": \"min_length\"\n                      },\n                      \"pattern\": {\n                        \"type\": \"string\",\n                        \"id\": 17\n                      },\n                      \"maxItems\": {\n                        \"type\": \"uint64\",\n                        \"id\": 20,\n                        \"protoName\": \"max_items\"\n                      },\n                      \"minItems\": {\n                        \"type\": \"uint64\",\n                        \"id\": 21,\n                        \"protoName\": \"min_items\"\n                      },\n                      \"uniqueItems\": {\n                        \"type\": \"bool\",\n                        \"id\": 22,\n                        \"protoName\": \"unique_items\"\n                      },\n                      \"maxProperties\": {\n                        \"type\": \"uint64\",\n                        \"id\": 24,\n                        \"protoName\": \"max_properties\"\n                      },\n                      \"minProperties\": {\n                        \"type\": \"uint64\",\n                        \"id\": 25,\n                        \"protoName\": \"min_properties\"\n                      },\n                      \"required\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"string\",\n                        \"id\": 26\n                      },\n                      \"array\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"string\",\n                        \"id\": 34\n                      },\n                      \"type\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"JSONSchemaSimpleTypes\",\n                        \"id\": 35\n                      },\n                      \"format\": {\n                        \"type\": \"string\",\n                        \"id\": 36\n                      },\n                      \"enum\": {\n                        \"rule\": \"repeated\",\n                        \"type\": \"string\",\n                        \"id\": 46\n                      },\n                      \"fieldConfiguration\": {\n                        \"type\": \"FieldConfiguration\",\n                        \"id\": 1001,\n                        \"protoName\": \"field_configuration\"\n                      },\n                      \"extensions\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"google.protobuf.Value\",\n                        \"id\": 48\n                      }\n                    },\n                    \"reserved\": [\n                      [\n                        1,\n                        1\n                      ],\n                      [\n                        2,\n                        2\n                      ],\n                      [\n                        4,\n                        4\n                      ],\n                      [\n                        18,\n                        18\n                      ],\n                      [\n                        19,\n                        19\n                      ],\n                      [\n                        23,\n                        23\n                      ],\n                      [\n                        27,\n                        27\n                      ],\n                      [\n                        28,\n                        28\n                      ],\n                      [\n                        29,\n                        29\n                      ],\n                      [\n                        30,\n                        33\n                      ],\n                      [\n                        37,\n                        41\n                      ],\n                      [\n                        42,\n                        42\n                      ],\n                      [\n                        43,\n                        45\n                      ]\n                    ],\n                    \"nested\": {\n                      \"JSONSchemaSimpleTypes\": {\n                        \"values\": {\n                          \"UNKNOWN\": 0,\n                          \"ARRAY\": 1,\n                          \"BOOLEAN\": 2,\n                          \"INTEGER\": 3,\n                          \"NULL\": 4,\n                          \"NUMBER\": 5,\n                          \"OBJECT\": 6,\n                          \"STRING\": 7\n                        }\n                      },\n                      \"FieldConfiguration\": {\n                        \"fields\": {\n                          \"pathParamName\": {\n                            \"type\": \"string\",\n                            \"id\": 47,\n                            \"protoName\": \"path_param_name\"\n                          }\n                        }\n                      }\n                    }\n                  },\n                  \"Tag\": {\n                    \"fields\": {\n                      \"name\": {\n                        \"type\": \"string\",\n                        \"id\": 1\n                      },\n                      \"description\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"externalDocs\": {\n                        \"type\": \"ExternalDocumentation\",\n                        \"id\": 3,\n                        \"protoName\": \"external_docs\"\n                      },\n                      \"extensions\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"google.protobuf.Value\",\n                        \"id\": 4\n                      }\n                    }\n                  },\n                  \"SecurityDefinitions\": {\n                    \"fields\": {\n                      \"security\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"SecurityScheme\",\n                        \"id\": 1\n                      }\n                    }\n                  },\n                  \"SecurityScheme\": {\n                    \"fields\": {\n                      \"type\": {\n                        \"type\": \"Type\",\n                        \"id\": 1\n                      },\n                      \"description\": {\n                        \"type\": \"string\",\n                        \"id\": 2\n                      },\n                      \"name\": {\n                        \"type\": \"string\",\n                        \"id\": 3\n                      },\n                      \"in\": {\n                        \"type\": \"In\",\n                        \"id\": 4\n                      },\n                      \"flow\": {\n                        \"type\": \"Flow\",\n                        \"id\": 5\n                      },\n                      \"authorizationUrl\": {\n                        \"type\": \"string\",\n                        \"id\": 6,\n                        \"protoName\": \"authorization_url\"\n                      },\n                      \"tokenUrl\": {\n                        \"type\": \"string\",\n                        \"id\": 7,\n                        \"protoName\": \"token_url\"\n                      },\n                      \"scopes\": {\n                        \"type\": \"Scopes\",\n                        \"id\": 8\n                      },\n                      \"extensions\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"google.protobuf.Value\",\n                        \"id\": 9\n                      }\n                    },\n                    \"nested\": {\n                      \"Type\": {\n                        \"values\": {\n                          \"TYPE_INVALID\": 0,\n                          \"TYPE_BASIC\": 1,\n                          \"TYPE_API_KEY\": 2,\n                          \"TYPE_OAUTH2\": 3\n                        }\n                      },\n                      \"In\": {\n                        \"values\": {\n                          \"IN_INVALID\": 0,\n                          \"IN_QUERY\": 1,\n                          \"IN_HEADER\": 2\n                        }\n                      },\n                      \"Flow\": {\n                        \"values\": {\n                          \"FLOW_INVALID\": 0,\n                          \"FLOW_IMPLICIT\": 1,\n                          \"FLOW_PASSWORD\": 2,\n                          \"FLOW_APPLICATION\": 3,\n                          \"FLOW_ACCESS_CODE\": 4\n                        }\n                      }\n                    }\n                  },\n                  \"SecurityRequirement\": {\n                    \"fields\": {\n                      \"securityRequirement\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"SecurityRequirementValue\",\n                        \"id\": 1,\n                        \"protoName\": \"security_requirement\"\n                      }\n                    },\n                    \"nested\": {\n                      \"SecurityRequirementValue\": {\n                        \"fields\": {\n                          \"scope\": {\n                            \"rule\": \"repeated\",\n                            \"type\": \"string\",\n                            \"id\": 1\n                          }\n                        }\n                      }\n                    }\n                  },\n                  \"Scopes\": {\n                    \"fields\": {\n                      \"scope\": {\n                        \"keyType\": \"string\",\n                        \"type\": \"string\",\n                        \"id\": 1\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"health\": {\n        \"nested\": {\n          \"v1\": {\n            \"options\": {\n              \"csharp_namespace\": \"Grpc.Health.V1\",\n              \"go_package\": \"google.golang.org/grpc/health/grpc_health_v1\",\n              \"java_multiple_files\": true,\n              \"java_outer_classname\": \"HealthProto\",\n              \"java_package\": \"io.grpc.health.v1\"\n            },\n            \"nested\": {\n              \"HealthCheckRequest\": {\n                \"fields\": {\n                  \"service\": {\n                    \"type\": \"string\",\n                    \"id\": 1\n                  }\n                }\n              },\n              \"HealthCheckResponse\": {\n                \"fields\": {\n                  \"status\": {\n                    \"type\": \"ServingStatus\",\n                    \"id\": 1\n                  }\n                },\n                \"nested\": {\n                  \"ServingStatus\": {\n                    \"values\": {\n                      \"UNKNOWN\": 0,\n                      \"SERVING\": 1,\n                      \"NOT_SERVING\": 2,\n                      \"SERVICE_UNKNOWN\": 3\n                    }\n                  }\n                }\n              },\n              \"Health\": {\n                \"methods\": {\n                  \"Check\": {\n                    \"requestType\": \"HealthCheckRequest\",\n                    \"responseType\": \"HealthCheckResponse\"\n                  },\n                  \"Watch\": {\n                    \"requestType\": \"HealthCheckRequest\",\n                    \"responseType\": \"HealthCheckResponse\",\n                    \"responseStream\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n});\n\n/**\n * Reflected root namespace.\n * @type {$protobuf.Root}\n */\nmodule.exports = $root;\n","const { patchProtobufRoot } = require('../lib/patch-protobuf-root');\nconst unpatchedRoot = require('./json-module');\nmodule.exports = patchProtobufRoot(unpatchedRoot);\n","module.exports = require('./root');\n","\"use strict\";\nmodule.exports = asPromise;\n\n/**\n * Callback as used by {@link util.asPromise}.\n * @typedef asPromiseCallback\n * @type {function}\n * @param {Error|null} error Error, if any\n * @param {...*} params Additional arguments\n * @returns {undefined}\n */\n\n/**\n * Returns a promise from a node-style callback function.\n * @memberof util\n * @param {asPromiseCallback} fn Function to call\n * @param {*} ctx Function context\n * @param {...*} params Function arguments\n * @returns {Promise<*>} Promisified function\n */\nfunction asPromise(fn, ctx/*, varargs */) {\n    var params  = new Array(arguments.length - 1),\n        offset  = 0,\n        index   = 2,\n        pending = true;\n    while (index < arguments.length)\n        params[offset++] = arguments[index++];\n    return new Promise(function executor(resolve, reject) {\n        params[offset] = function callback(err/*, varargs */) {\n            if (pending) {\n                pending = false;\n                if (err)\n                    reject(err);\n                else {\n                    var params = new Array(arguments.length - 1),\n                        offset = 0;\n                    while (offset < params.length)\n                        params[offset++] = arguments[offset];\n                    resolve.apply(null, params);\n                }\n            }\n        };\n        try {\n            fn.apply(ctx || null, params);\n        } catch (err) {\n            if (pending) {\n                pending = false;\n                reject(err);\n            }\n        }\n    });\n}\n","\"use strict\";\n\n/**\n * A minimal base64 implementation for number arrays.\n * @memberof util\n * @namespace\n */\nvar base64 = exports;\n\n/**\n * Calculates the byte length of a base64 encoded string.\n * @param {string} string Base64 encoded string\n * @returns {number} Byte length\n */\nbase64.length = function length(string) {\n    var p = string.length;\n    if (!p)\n        return 0;\n    while (p > 0 && string.charAt(p - 1) === \"=\")\n        --p;\n    return Math.floor(p * 3 / 4);\n};\n\n// Base64 encoding table\nvar b64 = new Array(64);\n\n// Base64 decoding table\nvar s64 = new Array(123);\n\n// 65..90, 97..122, 48..57, 43, 47\nfor (var i = 0; i < 64;)\n    s64[b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++;\n\ns64[45] = 62; // - -> +\ns64[95] = 63; // _ -> /\n\n/**\n * Encodes a buffer to a base64 encoded string.\n * @param {Uint8Array} buffer Source buffer\n * @param {number} start Source start\n * @param {number} end Source end\n * @returns {string} Base64 encoded string\n */\nbase64.encode = function encode(buffer, start, end) {\n    var parts = null,\n        chunk = [];\n    var i = 0, // output index\n        j = 0, // goto index\n        t;     // temporary\n    while (start < end) {\n        var b = buffer[start++];\n        switch (j) {\n            case 0:\n                chunk[i++] = b64[b >> 2];\n                t = (b & 3) << 4;\n                j = 1;\n                break;\n            case 1:\n                chunk[i++] = b64[t | b >> 4];\n                t = (b & 15) << 2;\n                j = 2;\n                break;\n            case 2:\n                chunk[i++] = b64[t | b >> 6];\n                chunk[i++] = b64[b & 63];\n                j = 0;\n                break;\n        }\n        if (i > 8191) {\n            (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\n            i = 0;\n        }\n    }\n    if (j) {\n        chunk[i++] = b64[t];\n        chunk[i++] = 61;\n        if (j === 1)\n            chunk[i++] = 61;\n    }\n    if (parts) {\n        if (i)\n            parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\n        return parts.join(\"\");\n    }\n    return String.fromCharCode.apply(String, chunk.slice(0, i));\n};\n\nvar invalidEncoding = \"invalid encoding\";\n\n/**\n * Decodes a base64 encoded string to a buffer.\n * @param {string} string Source string\n * @param {Uint8Array} buffer Destination buffer\n * @param {number} offset Destination offset\n * @returns {number} Number of bytes written\n * @throws {Error} If encoding is invalid\n */\nbase64.decode = function decode(string, buffer, offset) {\n    var start = offset;\n    var j = 0, // goto index\n        t;     // temporary\n    for (var i = 0; i < string.length;) {\n        var c = string.charCodeAt(i++);\n        if (c === 61 && j > 1)\n            break;\n        if ((c = s64[c]) === undefined)\n            throw Error(invalidEncoding);\n        switch (j) {\n            case 0:\n                t = c;\n                j = 1;\n                break;\n            case 1:\n                buffer[offset++] = t << 2 | (c & 48) >> 4;\n                t = c;\n                j = 2;\n                break;\n            case 2:\n                buffer[offset++] = (t & 15) << 4 | (c & 60) >> 2;\n                t = c;\n                j = 3;\n                break;\n            case 3:\n                buffer[offset++] = (t & 3) << 6 | c;\n                j = 0;\n                break;\n        }\n    }\n    if (j === 1)\n        throw Error(invalidEncoding);\n    return offset - start;\n};\n\nvar base64Re = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,\n    base64UrlRe = /[-_]/,\n    base64UrlNoPaddingRe = /^(?:[A-Za-z0-9_-]{4})*(?:[A-Za-z0-9_-]{2}(?:==)?|[A-Za-z0-9_-]{3}=?)?$/;\n\n/**\n * Tests if the specified string appears to be base64 encoded.\n * @param {string} string String to test\n * @returns {boolean} `true` if probably base64 encoded, otherwise false\n */\nbase64.test = function test(string) {\n    return base64Re.test(string)\n        || base64UrlRe.test(string) && base64UrlNoPaddingRe.test(string);\n};\n","\"use strict\";\nmodule.exports = EventEmitter;\n\n/**\n * Constructs a new event emitter instance.\n * @classdesc A minimal event emitter.\n * @memberof util\n * @constructor\n */\nfunction EventEmitter() {\n\n    /**\n     * Registered listeners.\n     * @type {Object.<string,*>}\n     * @private\n     */\n    this._listeners = Object.create(null);\n}\n\n/**\n * Event listener as used by {@link util.EventEmitter}.\n * @typedef EventEmitterListener\n * @type {function}\n * @param {...*} args Arguments\n * @returns {undefined}\n */\n\n/**\n * Registers an event listener.\n * @param {string} evt Event name\n * @param {EventEmitterListener} fn Listener\n * @param {*} [ctx] Listener context\n * @returns {this} `this`\n */\nEventEmitter.prototype.on = function on(evt, fn, ctx) {\n    (this._listeners[evt] || (this._listeners[evt] = [])).push({\n        fn  : fn,\n        ctx : ctx || this\n    });\n    return this;\n};\n\n/**\n * Removes an event listener or any matching listeners if arguments are omitted.\n * @param {string} [evt] Event name. Removes all listeners if omitted.\n * @param {EventEmitterListener} [fn] Listener to remove. Removes all listeners of `evt` if omitted.\n * @returns {this} `this`\n */\nEventEmitter.prototype.off = function off(evt, fn) {\n    if (evt === undefined)\n        this._listeners = Object.create(null);\n    else {\n        if (fn === undefined)\n            this._listeners[evt] = [];\n        else {\n            var listeners = this._listeners[evt];\n            if (!listeners)\n                return this;\n            for (var i = 0; i < listeners.length;)\n                if (listeners[i].fn === fn)\n                    listeners.splice(i, 1);\n                else\n                    ++i;\n        }\n    }\n    return this;\n};\n\n/**\n * Emits an event by calling its listeners with the specified arguments.\n * @param {string} evt Event name\n * @param {...*} args Arguments\n * @returns {this} `this`\n */\nEventEmitter.prototype.emit = function emit(evt) {\n    var listeners = this._listeners[evt];\n    if (listeners) {\n        var args = [],\n            i = 1;\n        for (; i < arguments.length;)\n            args.push(arguments[i++]);\n        for (i = 0; i < listeners.length;)\n            listeners[i].fn.apply(listeners[i++].ctx, args);\n    }\n    return this;\n};\n","\"use strict\";\n\nmodule.exports = factory(factory);\n\n/**\n * Reads / writes floats / doubles from / to buffers.\n * @name util.float\n * @namespace\n */\n\n/**\n * Writes a 32 bit float to a buffer using little endian byte order.\n * @name util.float.writeFloatLE\n * @function\n * @param {number} val Value to write\n * @param {Uint8Array} buf Target buffer\n * @param {number} pos Target buffer offset\n * @returns {undefined}\n */\n\n/**\n * Writes a 32 bit float to a buffer using big endian byte order.\n * @name util.float.writeFloatBE\n * @function\n * @param {number} val Value to write\n * @param {Uint8Array} buf Target buffer\n * @param {number} pos Target buffer offset\n * @returns {undefined}\n */\n\n/**\n * Reads a 32 bit float from a buffer using little endian byte order.\n * @name util.float.readFloatLE\n * @function\n * @param {Uint8Array} buf Source buffer\n * @param {number} pos Source buffer offset\n * @returns {number} Value read\n */\n\n/**\n * Reads a 32 bit float from a buffer using big endian byte order.\n * @name util.float.readFloatBE\n * @function\n * @param {Uint8Array} buf Source buffer\n * @param {number} pos Source buffer offset\n * @returns {number} Value read\n */\n\n/**\n * Writes a 64 bit double to a buffer using little endian byte order.\n * @name util.float.writeDoubleLE\n * @function\n * @param {number} val Value to write\n * @param {Uint8Array} buf Target buffer\n * @param {number} pos Target buffer offset\n * @returns {undefined}\n */\n\n/**\n * Writes a 64 bit double to a buffer using big endian byte order.\n * @name util.float.writeDoubleBE\n * @function\n * @param {number} val Value to write\n * @param {Uint8Array} buf Target buffer\n * @param {number} pos Target buffer offset\n * @returns {undefined}\n */\n\n/**\n * Reads a 64 bit double from a buffer using little endian byte order.\n * @name util.float.readDoubleLE\n * @function\n * @param {Uint8Array} buf Source buffer\n * @param {number} pos Source buffer offset\n * @returns {number} Value read\n */\n\n/**\n * Reads a 64 bit double from a buffer using big endian byte order.\n * @name util.float.readDoubleBE\n * @function\n * @param {Uint8Array} buf Source buffer\n * @param {number} pos Source buffer offset\n * @returns {number} Value read\n */\n\n// Factory function for the purpose of node-based testing in modified global environments\nfunction factory(exports) {\n\n    // float: typed array\n    if (typeof Float32Array !== \"undefined\") (function() {\n\n        var f32 = new Float32Array([ -0 ]),\n            f8b = new Uint8Array(f32.buffer),\n            le  = f8b[3] === 128;\n\n        function writeFloat_f32_cpy(val, buf, pos) {\n            f32[0] = val;\n            buf[pos    ] = f8b[0];\n            buf[pos + 1] = f8b[1];\n            buf[pos + 2] = f8b[2];\n            buf[pos + 3] = f8b[3];\n        }\n\n        function writeFloat_f32_rev(val, buf, pos) {\n            f32[0] = val;\n            buf[pos    ] = f8b[3];\n            buf[pos + 1] = f8b[2];\n            buf[pos + 2] = f8b[1];\n            buf[pos + 3] = f8b[0];\n        }\n\n        /* istanbul ignore next */\n        exports.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;\n        /* istanbul ignore next */\n        exports.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;\n\n        function readFloat_f32_cpy(buf, pos) {\n            f8b[0] = buf[pos    ];\n            f8b[1] = buf[pos + 1];\n            f8b[2] = buf[pos + 2];\n            f8b[3] = buf[pos + 3];\n            return f32[0];\n        }\n\n        function readFloat_f32_rev(buf, pos) {\n            f8b[3] = buf[pos    ];\n            f8b[2] = buf[pos + 1];\n            f8b[1] = buf[pos + 2];\n            f8b[0] = buf[pos + 3];\n            return f32[0];\n        }\n\n        /* istanbul ignore next */\n        exports.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;\n        /* istanbul ignore next */\n        exports.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;\n\n    // float: ieee754\n    })(); else (function() {\n\n        function writeFloat_ieee754(writeUint, val, buf, pos) {\n            var sign = val < 0 ? 1 : 0;\n            if (sign)\n                val = -val;\n            if (val === 0)\n                writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos);\n            else if (isNaN(val))\n                writeUint(2143289344, buf, pos);\n            else if (val > 3.4028234663852886e+38) // +-Infinity\n                writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);\n            else if (val < 1.1754943508222875e-38) // denormal\n                writeUint((sign << 31 | Math.round(val / 1.401298464324817e-45)) >>> 0, buf, pos);\n            else {\n                var exponent = Math.floor(Math.log(val) / Math.LN2),\n                    mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;\n                writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);\n            }\n        }\n\n        exports.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);\n        exports.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);\n\n        function readFloat_ieee754(readUint, buf, pos) {\n            var uint = readUint(buf, pos),\n                sign = (uint >> 31) * 2 + 1,\n                exponent = uint >>> 23 & 255,\n                mantissa = uint & 8388607;\n            return exponent === 255\n                ? mantissa\n                ? NaN\n                : sign * Infinity\n                : exponent === 0 // denormal\n                ? sign * 1.401298464324817e-45 * mantissa\n                : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);\n        }\n\n        exports.readFloatLE = readFloat_ieee754.bind(null, readUintLE);\n        exports.readFloatBE = readFloat_ieee754.bind(null, readUintBE);\n\n    })();\n\n    // double: typed array\n    if (typeof Float64Array !== \"undefined\") (function() {\n\n        var f64 = new Float64Array([-0]),\n            f8b = new Uint8Array(f64.buffer),\n            le  = f8b[7] === 128;\n\n        function writeDouble_f64_cpy(val, buf, pos) {\n            f64[0] = val;\n            buf[pos    ] = f8b[0];\n            buf[pos + 1] = f8b[1];\n            buf[pos + 2] = f8b[2];\n            buf[pos + 3] = f8b[3];\n            buf[pos + 4] = f8b[4];\n            buf[pos + 5] = f8b[5];\n            buf[pos + 6] = f8b[6];\n            buf[pos + 7] = f8b[7];\n        }\n\n        function writeDouble_f64_rev(val, buf, pos) {\n            f64[0] = val;\n            buf[pos    ] = f8b[7];\n            buf[pos + 1] = f8b[6];\n            buf[pos + 2] = f8b[5];\n            buf[pos + 3] = f8b[4];\n            buf[pos + 4] = f8b[3];\n            buf[pos + 5] = f8b[2];\n            buf[pos + 6] = f8b[1];\n            buf[pos + 7] = f8b[0];\n        }\n\n        /* istanbul ignore next */\n        exports.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;\n        /* istanbul ignore next */\n        exports.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;\n\n        function readDouble_f64_cpy(buf, pos) {\n            f8b[0] = buf[pos    ];\n            f8b[1] = buf[pos + 1];\n            f8b[2] = buf[pos + 2];\n            f8b[3] = buf[pos + 3];\n            f8b[4] = buf[pos + 4];\n            f8b[5] = buf[pos + 5];\n            f8b[6] = buf[pos + 6];\n            f8b[7] = buf[pos + 7];\n            return f64[0];\n        }\n\n        function readDouble_f64_rev(buf, pos) {\n            f8b[7] = buf[pos    ];\n            f8b[6] = buf[pos + 1];\n            f8b[5] = buf[pos + 2];\n            f8b[4] = buf[pos + 3];\n            f8b[3] = buf[pos + 4];\n            f8b[2] = buf[pos + 5];\n            f8b[1] = buf[pos + 6];\n            f8b[0] = buf[pos + 7];\n            return f64[0];\n        }\n\n        /* istanbul ignore next */\n        exports.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;\n        /* istanbul ignore next */\n        exports.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;\n\n    // double: ieee754\n    })(); else (function() {\n\n        function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {\n            var sign = val < 0 ? 1 : 0;\n            if (sign)\n                val = -val;\n            if (val === 0) {\n                writeUint(0, buf, pos + off0);\n                writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos + off1);\n            } else if (isNaN(val)) {\n                writeUint(0, buf, pos + off0);\n                writeUint(2146959360, buf, pos + off1);\n            } else if (val > 1.7976931348623157e+308) { // +-Infinity\n                writeUint(0, buf, pos + off0);\n                writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);\n            } else {\n                var mantissa;\n                if (val < 2.2250738585072014e-308) { // denormal\n                    mantissa = val / 5e-324;\n                    writeUint(mantissa >>> 0, buf, pos + off0);\n                    writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);\n                } else {\n                    var exponent = Math.floor(Math.log(val) / Math.LN2);\n                    if (exponent === 1024)\n                        exponent = 1023;\n                    mantissa = val * Math.pow(2, -exponent);\n                    writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);\n                    writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);\n                }\n            }\n        }\n\n        exports.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);\n        exports.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);\n\n        function readDouble_ieee754(readUint, off0, off1, buf, pos) {\n            var lo = readUint(buf, pos + off0),\n                hi = readUint(buf, pos + off1);\n            var sign = (hi >> 31) * 2 + 1,\n                exponent = hi >>> 20 & 2047,\n                mantissa = 4294967296 * (hi & 1048575) + lo;\n            return exponent === 2047\n                ? mantissa\n                ? NaN\n                : sign * Infinity\n                : exponent === 0 // denormal\n                ? sign * 5e-324 * mantissa\n                : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);\n        }\n\n        exports.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);\n        exports.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);\n\n    })();\n\n    return exports;\n}\n\n// uint helpers\n\nfunction writeUintLE(val, buf, pos) {\n    buf[pos    ] =  val        & 255;\n    buf[pos + 1] =  val >>> 8  & 255;\n    buf[pos + 2] =  val >>> 16 & 255;\n    buf[pos + 3] =  val >>> 24;\n}\n\nfunction writeUintBE(val, buf, pos) {\n    buf[pos    ] =  val >>> 24;\n    buf[pos + 1] =  val >>> 16 & 255;\n    buf[pos + 2] =  val >>> 8  & 255;\n    buf[pos + 3] =  val        & 255;\n}\n\nfunction readUintLE(buf, pos) {\n    return (buf[pos    ]\n          | buf[pos + 1] << 8\n          | buf[pos + 2] << 16\n          | buf[pos + 3] << 24) >>> 0;\n}\n\nfunction readUintBE(buf, pos) {\n    return (buf[pos    ] << 24\n          | buf[pos + 1] << 16\n          | buf[pos + 2] << 8\n          | buf[pos + 3]) >>> 0;\n}\n","\"use strict\";\n\n/**\n * A minimal UTF8 implementation.\n * @memberof util\n * @namespace\n */\nvar utf8 = exports,\n    looseDecoder = new TextDecoder(\"utf-8\", { ignoreBOM: true }),\n    strictDecoder;\nvar TEXT_DECODER_MIN_LENGTH = 64;\n\ntry {\n    strictDecoder = new TextDecoder(\"utf-8\", { fatal: true, ignoreBOM: true });\n} catch (err) {\n    // \"fatal\" option is not supported on Node.js compiled without ICU\n    strictDecoder = looseDecoder;\n}\n\n/**\n * Calculates the UTF8 byte length of a string.\n * @param {string} string String\n * @returns {number} Byte length\n */\nutf8.length = function utf8_length(string) {\n    var len = 0,\n        c = 0;\n    for (var i = 0; i < string.length; ++i) {\n        c = string.charCodeAt(i);\n        if (c < 128)\n            len += 1;\n        else if (c < 2048)\n            len += 2;\n        else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\n            ++i;\n            len += 4;\n        } else\n            len += 3;\n    }\n    return len;\n};\n\nfunction utf8_read_decoder(decoder, buffer, start, end) {\n    var source = start === 0 && end === buffer.length\n        ? buffer\n        : buffer.subarray(start, end);\n    return decoder.decode(source);\n}\n\n/**\n * Reads UTF8 bytes as a string.\n * @param {Uint8Array} buffer Source buffer\n * @param {number} start Source start\n * @param {number} end Source end\n * @returns {string} String read\n */\nutf8.read = function utf8_read_loose(buffer, start, end) {\n    if (end - start < 1)\n        return \"\";\n    if (end - start >= TEXT_DECODER_MIN_LENGTH)\n        return utf8_read_decoder(looseDecoder, buffer, start, end);\n\n    var str = \"\",\n        i = start,\n        c1, c2, c3, c4, c5, c6, c7, c8;\n\n    for (; i + 7 < end; i += 8) {\n        c1 = buffer[i];\n        c2 = buffer[i + 1];\n        c3 = buffer[i + 2];\n        c4 = buffer[i + 3];\n        c5 = buffer[i + 4];\n        c6 = buffer[i + 5];\n        c7 = buffer[i + 6];\n        c8 = buffer[i + 7];\n        if ((c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8) & 0x80)\n            return str + utf8_read_decoder(looseDecoder, buffer, i, end);\n        str += String.fromCharCode(c1, c2, c3, c4, c5, c6, c7, c8);\n    }\n\n    for (; i < end; ++i) {\n        c1 = buffer[i];\n        if (c1 & 0x80)\n            return str + utf8_read_decoder(looseDecoder, buffer, i, end);\n        str += String.fromCharCode(c1);\n    }\n\n    return str;\n};\n\n/**\n * Reads UTF8 bytes as a string, rejecting invalid UTF8.\n * @param {Uint8Array} buffer Source buffer\n * @param {number} start Source start\n * @param {number} end Source end\n * @returns {string} String read\n */\nutf8.readStrict = function utf8_read_strict(buffer, start, end) {\n    if (end - start < 1)\n        return \"\";\n    if (end - start >= TEXT_DECODER_MIN_LENGTH)\n        return utf8_read_decoder(strictDecoder, buffer, start, end);\n\n    var str = \"\",\n        i = start,\n        c1, c2, c3, c4, c5, c6, c7, c8;\n\n    for (; i + 7 < end; i += 8) {\n        c1 = buffer[i];\n        c2 = buffer[i + 1];\n        c3 = buffer[i + 2];\n        c4 = buffer[i + 3];\n        c5 = buffer[i + 4];\n        c6 = buffer[i + 5];\n        c7 = buffer[i + 6];\n        c8 = buffer[i + 7];\n        if ((c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8) & 0x80)\n            return str + utf8_read_decoder(strictDecoder, buffer, i, end);\n        str += String.fromCharCode(c1, c2, c3, c4, c5, c6, c7, c8);\n    }\n\n    for (; i < end; ++i) {\n        c1 = buffer[i];\n        if (c1 & 0x80)\n            return str + utf8_read_decoder(strictDecoder, buffer, i, end);\n        str += String.fromCharCode(c1);\n    }\n\n    return str;\n};\n\n/**\n * Writes a string as UTF8 bytes.\n * @param {string} string Source string\n * @param {Uint8Array} buffer Destination buffer\n * @param {number} offset Destination offset\n * @returns {number} Bytes written\n */\nutf8.write = function utf8_write(string, buffer, offset) {\n    var start = offset,\n        c1, // character 1\n        c2; // character 2\n    for (var i = 0; i < string.length; ++i) {\n        c1 = string.charCodeAt(i);\n        if (c1 < 128) {\n            buffer[offset++] = c1;\n        } else if (c1 < 2048) {\n            buffer[offset++] = c1 >> 6       | 192;\n            buffer[offset++] = c1       & 63 | 128;\n        } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\n            c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF);\n            ++i;\n            buffer[offset++] = c1 >> 18      | 240;\n            buffer[offset++] = c1 >> 12 & 63 | 128;\n            buffer[offset++] = c1 >> 6  & 63 | 128;\n            buffer[offset++] = c1       & 63 | 128;\n        } else {\n            buffer[offset++] = c1 >> 12      | 224;\n            buffer[offset++] = c1 >> 6  & 63 | 128;\n            buffer[offset++] = c1       & 63 | 128;\n        }\n    }\n    return offset - start;\n};\n","\"use strict\";\nmodule.exports = pool;\n\n/**\n * An allocator as used by {@link util.pool}.\n * @typedef PoolAllocator\n * @type {function}\n * @param {number} size Buffer size\n * @returns {Uint8Array} Buffer\n */\n\n/**\n * A slicer as used by {@link util.pool}.\n * @typedef PoolSlicer\n * @type {function}\n * @param {number} start Start offset\n * @param {number} end End offset\n * @returns {Uint8Array} Buffer slice\n * @this Uint8Array\n */\n\n/**\n * A general purpose buffer pool.\n * @memberof util\n * @function\n * @param {PoolAllocator} alloc Allocator\n * @param {PoolSlicer} slice Slicer\n * @param {number} [size=8192] Slab size\n * @returns {PoolAllocator} Pooled allocator\n */\nfunction pool(alloc, slice, size) {\n    var SIZE   = size || 8192;\n    var MAX    = SIZE >>> 1;\n    var slab   = null;\n    var offset = SIZE;\n    return function pool_alloc(size) {\n        if (size < 1 || size > MAX)\n            return alloc(size);\n        if (offset + size > SIZE) {\n            slab = alloc(SIZE);\n            offset = 0;\n        }\n        var buf = slice.call(slab, offset, offset += size);\n        if (offset & 7) // align to 32 bit\n            offset = (offset | 7) + 1;\n        return buf;\n    };\n}\n","\"use strict\";\nmodule.exports = LongBits;\n\nvar Long;\n\n/**\n * Constructs new long bits.\n * @classdesc Helper class for working with the low and high bits of a 64 bit value.\n * @memberof util\n * @constructor\n * @param {number} lo Low 32 bits, unsigned\n * @param {number} hi High 32 bits, unsigned\n */\nfunction LongBits(lo, hi) {\n\n    // note that the casts below are theoretically unnecessary as of today, but older statically\n    // generated converter code might still call the ctor with signed 32bits. kept for compat.\n\n    /**\n     * Low bits.\n     * @type {number}\n     */\n    this.lo = lo >>> 0;\n\n    /**\n     * High bits.\n     * @type {number}\n     */\n    this.hi = hi >>> 0;\n}\n\n/**\n * Zero bits.\n * @memberof util.LongBits\n * @type {util.LongBits}\n */\nvar zero = LongBits.zero = new LongBits(0, 0);\n\nzero.toNumber = function() { return 0; };\nzero.zzEncode = zero.zzDecode = function() { return this; };\nzero.length = function() { return 1; };\n\n/**\n * Zero hash.\n * @memberof util.LongBits\n * @type {string}\n */\nvar zeroHash = LongBits.zeroHash = \"\\0\\0\\0\\0\\0\\0\\0\\0\";\n\n/**\n * Constructs new long bits from the specified number.\n * @param {number} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.fromNumber = function fromNumber(value) {\n    if (value === 0)\n        return zero;\n    var sign = value < 0;\n    if (sign)\n        value = -value;\n    var lo = value >>> 0,\n        hi = (value - lo) / 4294967296 >>> 0;\n    if (sign) {\n        hi = ~hi >>> 0;\n        lo = ~lo >>> 0;\n        if (++lo > 4294967295) {\n            lo = 0;\n            if (++hi > 4294967295)\n                hi = 0;\n        }\n    }\n    return new LongBits(lo, hi);\n};\n\n/**\n * Constructs new long bits from a number, long or string.\n * @param {Long|number|string} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.from = function from(value) {\n    if (typeof value === \"number\")\n        return LongBits.fromNumber(value);\n    if (typeof value === \"string\" || value instanceof String) {\n        /* istanbul ignore else */\n        if (Long)\n            value = Long.fromString(value);\n        else\n            return LongBits.fromNumber(parseInt(value, 10));\n    }\n    return value.low || value.high ? new LongBits(value.low >>> 0, value.high >>> 0) : zero;\n};\n\n/**\n * Converts this long bits to a possibly unsafe JavaScript number.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {number} Possibly unsafe number\n */\nLongBits.prototype.toNumber = function toNumber(unsigned) {\n    if (!unsigned && this.hi >>> 31) {\n        var lo = ~this.lo + 1 >>> 0,\n            hi = ~this.hi     >>> 0;\n        if (!lo)\n            hi = hi + 1 >>> 0;\n        return -(lo + hi * 4294967296);\n    }\n    return this.lo + this.hi * 4294967296;\n};\n\n/**\n * Converts this long bits to a long.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long} Long\n */\nLongBits.prototype.toLong = function toLong(unsigned) {\n    return Long\n        ? new Long(this.lo | 0, this.hi | 0, Boolean(unsigned))\n        /* istanbul ignore next */\n        : { low: this.lo | 0, high: this.hi | 0, unsigned: Boolean(unsigned) };\n};\n\nvar charCodeAt = String.prototype.charCodeAt;\n\n/**\n * Constructs new long bits from the specified 8 characters long hash.\n * @param {string} hash Hash\n * @returns {util.LongBits} Bits\n */\nLongBits.fromHash = function fromHash(hash) {\n    if (hash === zeroHash)\n        return zero;\n    return new LongBits(\n        ( charCodeAt.call(hash, 0)\n        | charCodeAt.call(hash, 1) << 8\n        | charCodeAt.call(hash, 2) << 16\n        | charCodeAt.call(hash, 3) << 24) >>> 0\n    ,\n        ( charCodeAt.call(hash, 4)\n        | charCodeAt.call(hash, 5) << 8\n        | charCodeAt.call(hash, 6) << 16\n        | charCodeAt.call(hash, 7) << 24) >>> 0\n    );\n};\n\n/**\n * Converts this long bits to a 8 characters long hash.\n * @returns {string} Hash\n */\nLongBits.prototype.toHash = function toHash() {\n    return String.fromCharCode(\n        this.lo        & 255,\n        this.lo >>> 8  & 255,\n        this.lo >>> 16 & 255,\n        this.lo >>> 24      ,\n        this.hi        & 255,\n        this.hi >>> 8  & 255,\n        this.hi >>> 16 & 255,\n        this.hi >>> 24\n    );\n};\n\n/**\n * Zig-zag encodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzEncode = function zzEncode() {\n    var mask =   this.hi >> 31;\n    this.hi  = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0;\n    this.lo  = ( this.lo << 1                   ^ mask) >>> 0;\n    return this;\n};\n\n/**\n * Zig-zag decodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzDecode = function zzDecode() {\n    var mask = -(this.lo & 1);\n    this.lo  = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0;\n    this.hi  = ( this.hi >>> 1                  ^ mask) >>> 0;\n    return this;\n};\n\n/**\n * Calculates the length of this longbits when encoded as a varint.\n * @returns {number} Length\n */\nLongBits.prototype.length = function length() {\n    var part0 =  this.lo,\n        part1 = (this.lo >>> 28 | this.hi << 4) >>> 0,\n        part2 =  this.hi >>> 24;\n    return part2 === 0\n         ? part1 === 0\n           ? part0 < 16384\n             ? part0 < 128 ? 1 : 2\n             : part0 < 2097152 ? 3 : 4\n           : part1 < 16384\n             ? part1 < 128 ? 5 : 6\n             : part1 < 2097152 ? 7 : 8\n         : part2 < 128 ? 9 : 10;\n};\n\nLongBits._configure = function(Long_) {\n    Long = Long_;\n};\n","\"use strict\";\n/* global globalThis */\nvar util = exports;\n\n// used to return a Promise where callback is omitted\nutil.asPromise = require(\"./aspromise\");\n\n// converts to / from base64 encoded strings\nutil.base64 = require(\"./base64\");\n\n// base class of rpc.Service\nutil.EventEmitter = require(\"./eventemitter\");\n\n// float handling accross browsers\nutil.float = require(\"./float\");\n\n// converts to / from utf8 encoded strings\nutil.utf8 = require(\"./utf8\");\n\n// provides a node-like buffer pool in the browser\nutil.pool = require(\"./pool\");\n\n// utility to work with the low and high bits of a 64 bit value\nutil.LongBits = require(\"./longbits\");\n\n/**\n * Tests if the specified key can affect object prototypes.\n * @memberof util\n * @param {string} key Key to test\n * @returns {boolean} `true` if the key is unsafe\n */\nfunction isUnsafeProperty(key) {\n    return key === \"__proto__\" || key === \"prototype\" || key === \"constructor\";\n}\n\nutil.isUnsafeProperty = isUnsafeProperty;\n\n/**\n * Whether running within node or not.\n * @memberof util\n * @type {boolean}\n */\nutil.isNode = Boolean(typeof global !== \"undefined\"\n                   && global\n                   && global.process\n                   && global.process.versions\n                   && global.process.versions.node);\n\n/**\n * Global object reference.\n * @memberof util\n * @type {Object}\n */\nutil.global = util.isNode && global\n           || typeof window !== \"undefined\" && window\n           || typeof self   !== \"undefined\" && self\n           || typeof globalThis !== \"undefined\" && globalThis\n           || this; // eslint-disable-line no-invalid-this\n\n/**\n * An immuable empty array.\n * @memberof util\n * @type {Array.<*>}\n * @const\n */\nutil.emptyArray = Object.freeze ? Object.freeze([]) : /* istanbul ignore next */ []; // used on prototypes\n\n/**\n * An immutable empty object.\n * @type {Object}\n * @const\n */\nutil.emptyObject = Object.freeze ? Object.freeze({}) : /* istanbul ignore next */ {}; // used on prototypes\n\n/**\n * Tests if the specified value is an integer.\n * @function\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is an integer\n */\nutil.isInteger = Number.isInteger || /* istanbul ignore next */ function isInteger(value) {\n    return typeof value === \"number\" && isFinite(value) && Math.floor(value) === value;\n};\n\n/**\n * Tests if the specified value is a string.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a string\n */\nutil.isString = function isString(value) {\n    return typeof value === \"string\" || value instanceof String;\n};\n\n/**\n * Tests if the specified value is a non-null object.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a non-null object\n */\nutil.isObject = function isObject(value) {\n    return value && typeof value === \"object\";\n};\n\n/**\n * Checks if a property on a message is considered to be present.\n * This is an alias of {@link util.isSet}.\n * @function\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isset =\n\n/**\n * Checks if a property on a message is considered to be present.\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isSet = function isSet(obj, prop) {\n    var value = obj[prop];\n    if (value != null && Object.hasOwnProperty.call(obj, prop)) // eslint-disable-line eqeqeq\n        return typeof value !== \"object\" || (Array.isArray(value) ? value.length : Object.keys(value).length) > 0;\n    return false;\n};\n\n/**\n * Any compatible Buffer instance.\n * This is a minimal stand-alone definition of a Buffer instance. The actual type is that exported by node's typings.\n * @interface Buffer\n * @extends Uint8Array\n */\n\n/**\n * Node's Buffer class if available.\n * @type {Constructor<Buffer>}\n */\nutil.Buffer = (function() {\n    try {\n        var Buffer = util.global.Buffer;\n        // refuse to use non-node buffers if not explicitly assigned (perf reasons)\n        return Buffer.prototype.utf8Write || util.isNode ? Buffer : /* istanbul ignore next */ null;\n    } catch (e) {\n        /* istanbul ignore next */\n        return null;\n    }\n})();\n\n/**\n * Creates a new buffer of whatever type supported by the environment.\n * @param {number|number[]} [sizeOrArray=0] Buffer size or number array\n * @returns {Uint8Array|Buffer} Buffer\n */\nutil.newBuffer = function newBuffer(sizeOrArray) {\n    var Buffer = util.Buffer;\n    /* istanbul ignore next */\n    return typeof sizeOrArray === \"number\"\n        ? Buffer\n            ? Buffer.allocUnsafe(sizeOrArray)\n            : new Uint8Array(sizeOrArray)\n        : Buffer\n            ? Buffer.from(sizeOrArray)\n            : new Uint8Array(sizeOrArray);\n};\n\n/**\n * Prepends a raw field tag to raw field data.\n * @param {number} id Field id\n * @param {number} wireType Wire type\n * @param {Uint8Array} data Raw field data\n * @returns {Uint8Array|Buffer} Raw field bytes\n * @ignore\n */\nutil.rawField = function rawField(id, wireType, data) {\n    var out = [],\n        tag = id << 3 | wireType;\n    tag >>>= 0;\n    while (tag > 127) {\n        out.push(tag & 127 | 128);\n        tag >>>= 7;\n    }\n    out.push(tag);\n    for (var i = 0; i < data.length; ++i)\n        out.push(data[i]);\n    return util.newBuffer(out);\n};\n\n/**\n * Array implementation used in the browser.\n * @type {Constructor<Uint8Array>}\n * @deprecated Use `Uint8Array` instead.\n */\nutil.Array = Uint8Array;\n\n/**\n * Any compatible Long instance.\n * This is a minimal stand-alone definition of a Long instance. The actual type is that exported by long.js.\n * @interface Long\n * @property {number} low Low bits\n * @property {number} high High bits\n * @property {boolean} unsigned Whether unsigned or not\n */\n\n/**\n * Long.js's Long class if available.\n * @type {Constructor<Long>}\n */\nutil.Long = /* istanbul ignore next */ util.global.dcodeIO && /* istanbul ignore next */ util.global.dcodeIO.Long\n         || /* istanbul ignore next */ util.global.Long\n         || (function() {\n                try {\n                    var Long = require(\"long\");\n                    return Long && Long.isLong ? Long : null;\n                } catch (e) {\n                    /* istanbul ignore next */\n                    return null;\n                }\n            })();\n\n/**\n * Regular expression used to verify 2 bit (`bool`) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key2Re = /^(?:true|false|0|1)$/;\n\n/**\n * Regular expression used to verify 32 bit (`int32` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key32Re = /^-?(?:0|[1-9][0-9]*)$/;\n\n/**\n * Regular expression used to verify 64 bit (`int64` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key64Re = /^(?:[\\x00-\\xff]{8}|-?(?:0|[1-9][0-9]*))$/; // eslint-disable-line no-control-regex\n\n/**\n * Converts a number or long to an 8 characters long hash string.\n * @param {Long|number} value Value to convert\n * @returns {string} Hash\n */\nutil.longToHash = function longToHash(value) {\n    return value\n        ? util.LongBits.from(value).toHash()\n        : util.LongBits.zeroHash;\n};\n\n/**\n * Converts an 8 characters long hash string to a long or number.\n * @param {string} hash Hash\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long|number} Original value\n */\nutil.longFromHash = function longFromHash(hash, unsigned) {\n    var bits = util.LongBits.fromHash(hash);\n    if (util.Long)\n        return util.Long.fromBits(bits.lo, bits.hi, unsigned);\n    return bits.toNumber(Boolean(unsigned));\n};\n\n/**\n * Converts a 64 bit key to a long or number if it is an 8 characters long hash string.\n * @param {string} key Map key\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long|number|string} Original value\n */\nutil.longFromKey = function longFromKey(key, unsigned) {\n    return util.key64Re.test(key) && !util.key32Re.test(key)\n        ? util.longFromHash(key, unsigned)\n        : key;\n};\n\n/**\n * Converts a boolean key to a boolean value.\n * @param {string} key Map key\n * @returns {boolean} Boolean value\n */\nutil.boolFromKey = function boolFromKey(key) {\n    return key === \"true\" || key === \"1\";\n};\n\n/**\n * Merges the properties of the source object into the destination object.\n * @memberof util\n * @param {Object.<string,*>} dst Destination object\n * @param {...(Object.<string,*>|boolean)} src Source objects, optionally followed by an `ifNotSet` flag\n * @returns {Object.<string,*>} Destination object\n */\nfunction merge(dst) { // used by converters\n    var ifNotSet = typeof arguments[arguments.length - 1] === \"boolean\",\n        limit = ifNotSet ? arguments.length - 1 : arguments.length;\n    ifNotSet = ifNotSet && arguments[arguments.length - 1];\n    for (var a = 1; a < limit; ++a) {\n        var src = arguments[a];\n        if (!src)\n            continue;\n        for (var keys = Object.keys(src), i = 0; i < keys.length; ++i)\n            if (!isUnsafeProperty(keys[i]) && (!ifNotSet || !Object.prototype.hasOwnProperty.call(dst, keys[i]) || dst[keys[i]] === undefined))\n                dst[keys[i]] = src[keys[i]];\n    }\n    return dst;\n}\n\nutil.merge = merge;\n\n/**\n * Schema declaration nesting limit.\n * @memberof util\n * @type {number}\n */\nutil.nestingLimit = 32; // protoc: MaxMessageDeclarationNestingDepth\n\n/**\n * Recursion limit.\n * @memberof util\n * @type {number}\n */\nutil.recursionLimit = 100; // protoc: CodedInputStream::default_recursion_limit_\n\n/**\n * Makes a property safe for assignment as an own property.\n * @memberof util\n * @param {Object.<string,*>} obj Object\n * @param {string} key Property key\n * @param {boolean} [enumerable=true] Whether the property should be enumerable\n * @returns {undefined}\n */\nutil.makeProp = function makeProp(obj, key, enumerable) {\n    if (Object.prototype.hasOwnProperty.call(obj, key))\n        return;\n    Object.defineProperty(obj, key, {\n        enumerable: enumerable === undefined ? true : enumerable,\n        configurable: true,\n        writable: true\n    });\n};\n\n/**\n * Converts the first character of a string to lower case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.lcFirst = function lcFirst(str) {\n    return str.charAt(0).toLowerCase() + str.substring(1);\n};\n\n/**\n * Creates a custom error constructor.\n * @memberof util\n * @param {string} name Error name\n * @returns {Constructor<Error>} Custom error constructor\n */\nfunction newError(name) {\n\n    function CustomError(message, properties) {\n\n        if (!(this instanceof CustomError))\n            return new CustomError(message, properties);\n\n        // Error.call(this, message);\n        // ^ just returns a new error instance because the ctor can be called as a function\n\n        Object.defineProperty(this, \"message\", { get: function() { return message; } });\n\n        /* istanbul ignore next */\n        if (Error.captureStackTrace) // node\n            Error.captureStackTrace(this, CustomError);\n        else\n            Object.defineProperty(this, \"stack\", { value: new Error().stack || \"\" });\n\n        if (properties)\n            merge(this, properties);\n    }\n\n    CustomError.prototype = Object.create(Error.prototype, {\n        constructor: {\n            value: CustomError,\n            writable: true,\n            enumerable: false,\n            configurable: true,\n        },\n        name: {\n            get: function get() { return name; },\n            set: undefined,\n            enumerable: false,\n            // configurable: false would accurately preserve the behavior of\n            // the original, but I'm guessing that was not intentional.\n            // For an actual error subclass, this property would\n            // be configurable.\n            configurable: true,\n        },\n        toString: {\n            value: function value() { return this.name + \": \" + this.message; },\n            writable: true,\n            enumerable: false,\n            configurable: true,\n        },\n    });\n\n    return CustomError;\n}\n\nutil.newError = newError;\n\n/**\n * Constructs a new protocol error.\n * @classdesc Error subclass indicating a protocol specifc error.\n * @memberof util\n * @extends Error\n * @template T extends Message<T>\n * @constructor\n * @param {string} message Error message\n * @param {Object.<string,*>} [properties] Additional properties\n * @example\n * try {\n *     MyMessage.decode(someBuffer); // throws if required fields are missing\n * } catch (e) {\n *     if (e instanceof ProtocolError && e.instance)\n *         console.log(\"decoded so far: \" + JSON.stringify(e.instance));\n * }\n */\nutil.ProtocolError = newError(\"ProtocolError\");\n\n/**\n * So far decoded message instance.\n * @name util.ProtocolError#instance\n * @type {Message<T>}\n */\n\n/**\n * A OneOf getter as returned by {@link util.oneOfGetter}.\n * @typedef OneOfGetter\n * @type {function}\n * @returns {string|undefined} Set field name, if any\n */\n\n/**\n * Builds a getter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfGetter} Unbound getter\n */\nutil.oneOfGetter = function getOneOf(fieldNames) {\n    var fieldMap = {};\n    for (var i = 0; i < fieldNames.length; ++i)\n        fieldMap[fieldNames[i]] = 1;\n\n    /**\n     * @returns {string|undefined} Set field name, if any\n     * @this Object\n     * @ignore\n     */\n    return function() { // eslint-disable-line consistent-return\n        for (var keys = Object.keys(this), i = keys.length - 1; i > -1; --i)\n            if (fieldMap[keys[i]] === 1 && this[keys[i]] !== undefined && this[keys[i]] !== null)\n                return keys[i];\n    };\n};\n\n/**\n * A OneOf setter as returned by {@link util.oneOfSetter}.\n * @typedef OneOfSetter\n * @type {function}\n * @param {string|undefined} value Field name\n * @returns {undefined}\n */\n\n/**\n * Builds a setter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfSetter} Unbound setter\n */\nutil.oneOfSetter = function setOneOf(fieldNames) {\n\n    /**\n     * @param {string} name Field name\n     * @returns {undefined}\n     * @this Object\n     * @ignore\n     */\n    return function(name) {\n        for (var i = 0; i < fieldNames.length; ++i)\n            if (fieldNames[i] !== name)\n                delete this[fieldNames[i]];\n    };\n};\n\n/**\n * Default conversion options used for {@link Message#toJSON} implementations.\n *\n * These options are close to proto3's JSON mapping with the exception that internal types like Any are handled just like messages. More precisely:\n *\n * - Longs become strings\n * - Enums become string keys\n * - Bytes become base64 encoded strings\n * - (Sub-)Messages become plain objects\n * - Maps become plain objects with all string keys\n * - Repeated fields become arrays\n * - NaN and Infinity for float and double fields become strings\n *\n * @type {IConversionOptions}\n * @see https://developers.google.com/protocol-buffers/docs/proto3?hl=en#json\n */\nutil.toJSONOptions = {\n    longs: String,\n    enums: String,\n    bytes: String,\n    json: true\n};\n","\"use strict\";\nmodule.exports = Writer;\n\nvar util      = require(\"./util/minimal\");\n\nvar BufferWriter; // cyclic\n\nvar LongBits  = util.LongBits,\n    base64    = util.base64,\n    utf8      = util.utf8;\n\n/**\n * Constructs a new writer instance.\n * @classdesc Wire format writer using `Uint8Array`.\n * @constructor\n */\nfunction Writer() {\n\n    /**\n     * Write cursor into {@link Writer#buf}.\n     * @type {number}\n     */\n    this.pos = 0;\n\n    /**\n     * Backing buffer.\n     * @type {Uint8Array}\n     */\n    this.buf = this.constructor.alloc(Writer.initialBufferSize);\n\n    /**\n     * Cached DataView over {@link Writer#buf}.\n     * @type {DataView|null}\n     */\n    this.view = null;\n\n    /**\n     * Stack of forked length-prefix positions.\n     * @type {Array<number>|null}\n     */\n    this.states = null;\n}\n\n/**\n * Initial backing buffer size in bytes. Defaults to 128.\n * @type {number}\n */\nWriter.initialBufferSize = 128;\n\n/**\n * Current write position.\n * @name Writer#len\n * @type {number}\n * @deprecated Use {@link Writer#pos} instead.\n */\nObject.defineProperty(Writer.prototype, \"len\", {\n    configurable: true,\n    enumerable: true,\n    get: function get_len() {\n        return this.pos;\n    }\n});\n\nvar create = function create() {\n    return util.Buffer\n        ? function create_buffer_setup() {\n            return (Writer.create = function create_buffer() {\n                return new BufferWriter();\n            })();\n        }\n        /* istanbul ignore next */\n        : function create_array() {\n            return new Writer();\n        };\n};\n\n/**\n * Creates a new writer.\n * @function\n * @returns {BufferWriter|Writer} A {@link BufferWriter} when Buffers are supported, otherwise a {@link Writer}\n */\nWriter.create = create();\n\n/**\n * Allocates a buffer of the specified size.\n * @param {number} size Buffer size\n * @returns {Uint8Array} Buffer\n */\nWriter.alloc = function alloc(size) {\n    return new Uint8Array(size);\n};\n\n// Use Uint8Array buffer pool in the browser, just like node does with buffers\nWriter.alloc = util.pool(Writer.alloc, Uint8Array.prototype.subarray);\n\n/**\n * Calculates the number of bytes a value occupies as a varint.\n * @param {number} value Value to size (unsigned)\n * @returns {number} Byte length (1..5)\n * @ignore\n */\nfunction sizeVarint32(value) {\n    return value         < 128       ? 1\n         : value         < 16384     ? 2\n         : value         < 2097152   ? 3\n         : value         < 268435456 ? 4\n         :                             5;\n}\n\n/**\n * Ensures that at least `n` more bytes fit into the backing buffer, doubling it if not.\n * @param {number} n Number of additional bytes required\n * @returns {undefined}\n * @private\n */\nWriter.prototype._reserve = function _reserve(n) {\n    var need = this.pos + n;\n    if (need > this.buf.length) {\n        var size = this.buf.length << 1;\n        if (size < need)\n            size = need;\n        var buf = this.constructor.alloc(size);\n        buf.set(this.buf.subarray(0, this.pos), 0);\n        this.buf = buf;\n        this.view = null; // invalidate\n    }\n};\n\nfunction writeStringAscii(val, buf, pos) {\n    for (var i = 0; i < val.length;)\n        buf[pos++] = val.charCodeAt(i++);\n}\n\nfunction writeVarint32(val, buf, pos) {\n    while (val > 127) {\n        buf[pos++] = val & 127 | 128;\n        val >>>= 7;\n    }\n    buf[pos] = val;\n    return pos + 1;\n}\n\n/**\n * Writes an unsigned 32 bit value as a varint.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.uint32 = function write_uint32(value) {\n    value = value >>> 0;\n    this._reserve(5);\n    var pos = this.pos;\n    this.pos = writeVarint32(value, this.buf, pos);\n    return this;\n};\n\n/**\n * Writes a signed 32 bit value as a varint.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.int32 = function write_int32(value) {\n    if ((value |= 0) < 0) { // 10 bytes per spec\n        this._reserve(10);\n        writeVarint64(LongBits.fromNumber(value), this.buf, this.pos);\n        this.pos += 10;\n        return this;\n    }\n    return this.uint32(value);\n};\n\n/**\n * Writes a 32 bit value as a varint, zig-zag encoded.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sint32 = function write_sint32(value) {\n    return this.uint32((value << 1 ^ value >> 31) >>> 0);\n};\n\nfunction writeVarint64(val, buf, pos) {\n    var lo = val.lo,\n        hi = val.hi;\n    while (hi) {\n        buf[pos++] = lo & 127 | 128;\n        lo = (lo >>> 7 | hi << 25) >>> 0;\n        hi >>>= 7;\n    }\n    while (lo > 127) {\n        buf[pos++] = lo & 127 | 128;\n        lo = lo >>> 7;\n    }\n    buf[pos] = lo;\n    return pos + 1;\n}\n\n/**\n * Writes an unsigned 64 bit value as a varint.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.uint64 = function write_uint64(value) {\n    var bits = LongBits.from(value);\n    this._reserve(10);\n    var pos = this.pos;\n    this.pos = writeVarint64(bits, this.buf, pos);\n    return this;\n};\n\n/**\n * Writes a signed 64 bit value as a varint.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.int64 = Writer.prototype.uint64;\n\n/**\n * Writes a signed 64 bit value as a varint, zig-zag encoded.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sint64 = function write_sint64(value) {\n    var bits = LongBits.from(value).zzEncode();\n    this._reserve(10);\n    var pos = this.pos;\n    this.pos = writeVarint64(bits, this.buf, pos);\n    return this;\n};\n\n/**\n * Writes a boolish value as a varint.\n * @param {boolean} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bool = function write_bool(value) {\n    this._reserve(1);\n    this.buf[this.pos++] = value ? 1 : 0;\n    return this;\n};\n\nfunction writeFixed32(val, buf, pos) {\n    buf[pos    ] =  val         & 255;\n    buf[pos + 1] =  val >>> 8   & 255;\n    buf[pos + 2] =  val >>> 16  & 255;\n    buf[pos + 3] =  val >>> 24;\n}\n\n/**\n * Writes an unsigned 32 bit value as fixed 32 bits.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.fixed32 = function write_fixed32(value) {\n    this._reserve(4);\n    writeFixed32(value >>> 0, this.buf, this.pos);\n    this.pos += 4;\n    return this;\n};\n\n/**\n * Writes a signed 32 bit value as fixed 32 bits.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sfixed32 = Writer.prototype.fixed32;\n\n/**\n * Writes an unsigned 64 bit value as fixed 64 bits.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.fixed64 = function write_fixed64(value) {\n    var bits = LongBits.from(value);\n    this._reserve(8);\n    writeFixed32(bits.lo, this.buf, this.pos);\n    writeFixed32(bits.hi, this.buf, this.pos + 4);\n    this.pos += 8;\n    return this;\n};\n\n/**\n * Writes a signed 64 bit value as fixed 64 bits.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sfixed64 = Writer.prototype.fixed64;\n\n/**\n * Writes a float (32 bit).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.float = function write_float(value) {\n    this._reserve(4);\n    util.float.writeFloatLE(value, this.buf, this.pos);\n    this.pos += 4;\n    return this;\n};\n\n/**\n * Writes a double (64 bit float).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.double = function write_double(value) {\n    this._reserve(8);\n    util.float.writeDoubleLE(value, this.buf, this.pos);\n    this.pos += 8;\n    return this;\n};\n\n/**\n * Writes a sequence of bytes.\n * @param {Uint8Array|string} value Buffer or base64 encoded string to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bytes = function write_bytes(value) {\n    var len = value.length >>> 0;\n    if (!len) {\n        this._reserve(1);\n        this.buf[this.pos++] = 0;\n        return this;\n    }\n    if (util.isString(value)) {\n        var buf = Writer.alloc(len = base64.length(value));\n        base64.decode(value, buf, 0);\n        value = buf;\n    }\n    this.uint32(len);\n    this._reserve(len);\n    this.buf.set(value, this.pos);\n    this.pos += len;\n    return this;\n};\n\n/**\n * Writes raw bytes without a tag or length prefix.\n * @param {Uint8Array} value Raw bytes\n * @returns {Writer} `this`\n */\nWriter.prototype.raw = function write_raw(value) {\n    var len = value.length >>> 0;\n    if (!len)\n        return this;\n    this._reserve(len);\n    this.buf.set(value, this.pos);\n    this.pos += len;\n    return this;\n};\n\n/**\n * Backfills the length varint.\n * @param {number} pos Position of reserved length byte\n * @param {number} len Length of content after length varint\n * @returns {Writer} `this`\n * @private\n */\nWriter.prototype._delim = function _delim(pos, len) {\n    var n = sizeVarint32(len);\n    if (n > 1)\n        this.buf.copyWithin(pos + n, pos + 1, pos + 1 + len);\n    writeVarint32(len, this.buf, pos);\n    this.pos = pos + n + len;\n    return this;\n};\n\n/**\n * Writes a string.\n * @param {string} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.string = function write_string(value) {\n    var n = value.length;\n    if (!n) {\n        this._reserve(1);\n        this.buf[this.pos++] = 0;\n        return this;\n    }\n    if (n < 0x80) {\n        this._reserve(n * 3 + 5); // worst case\n        var lenPos = this.pos;\n        return this._delim(lenPos, utf8.write(value, this.buf, lenPos + 1));\n    }\n    var len = utf8.length(value);\n    this.uint32(len);\n    this._reserve(len);\n    if (len === value.length)\n        writeStringAscii(value, this.buf, this.pos);\n    else\n        utf8.write(value, this.buf, this.pos);\n    this.pos += len;\n    return this;\n};\n\n/**\n * Writes an array of unsigned 32 bit values as a packed repeated field.\n * @param {number[]} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.uint32s = function write_uint32s(value) {\n    var n = value.length;\n    this._reserve(n * 5 + 5); // worst case: 5 bytes per value + length varint\n    var buf = this.buf, lenPos = this.pos, p = lenPos + 1;\n    for (var i = 0; i < n; ++i)\n        p = writeVarint32(value[i] >>> 0, buf, p);\n    return this._delim(lenPos, p - lenPos - 1);\n};\n\n/**\n * Writes an array of signed 32 bit values as a packed repeated field.\n * @param {number[]} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.int32s = function write_int32s(value) {\n    var n = value.length;\n    this._reserve(n * 10 + 5); // worst case: 10 bytes per negative value + length varint\n    var buf = this.buf, lenPos = this.pos, pos = lenPos + 1, val;\n    for (var i = 0; i < n; ++i) {\n        if ((val = value[i] | 0) < 0) { // negatives are 10 bytes per spec\n            pos = writeVarint64(LongBits.fromNumber(val), buf, pos);\n        } else {\n            pos = writeVarint32(val, buf, pos);\n        }\n    }\n    return this._delim(lenPos, pos - lenPos - 1);\n};\n\n/**\n * Writes an array of 32 bit values as packed, zig-zag encoded varints.\n * @param {number[]} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sint32s = function write_sint32s(value) {\n    var n = value.length;\n    this._reserve(n * 5 + 5);\n    var buf = this.buf, lenPos = this.pos, pos = lenPos + 1;\n    for (var i = 0; i < n; ++i)\n        pos = writeVarint32((value[i] << 1 ^ value[i] >> 31) >>> 0, buf, pos);\n    return this._delim(lenPos, pos - lenPos - 1);\n};\n\n/**\n * Writes an array of unsigned 64 bit values as a packed repeated field.\n * @param {Array.<Long|number|string>} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.uint64s = function write_uint64s(value) {\n    var n = value.length;\n    this._reserve(n * 10 + 5);\n    var buf = this.buf, lenPos = this.pos, pos = lenPos + 1;\n    for (var i = 0; i < n; ++i) {\n        pos = writeVarint64(LongBits.from(value[i]), buf, pos);\n    }\n    return this._delim(lenPos, pos - lenPos - 1);\n};\n\n/**\n * Writes an array of signed 64 bit values as a packed repeated field.\n * @function\n * @param {Array.<Long|number|string>} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.int64s = Writer.prototype.uint64s;\n\n/**\n * Writes an array of 64 bit values as packed, zig-zag encoded varints.\n * @param {Array.<Long|number|string>} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sint64s = function write_sint64s(value) {\n    var n = value.length;\n    this._reserve(n * 10 + 5);\n    var buf = this.buf, lenPos = this.pos, pos = lenPos + 1;\n    for (var i = 0; i < n; ++i) {\n        pos = writeVarint64(LongBits.from(value[i]).zzEncode(), buf, pos);\n    }\n    return this._delim(lenPos, pos - lenPos - 1);\n};\n\n/**\n * Writes an array of boolish values as a packed repeated field.\n * @param {boolean[]} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bools = function write_bools(value) {\n    var n = value.length;\n    this.uint32(n); // one byte per value\n    this._reserve(n);\n    var buf = this.buf, p = this.pos;\n    for (var i = 0; i < n; ++i)\n        buf[p++] = value[i] ? 1 : 0;\n    this.pos += n;\n    return this;\n};\n\n// The view allocation only pays off when amortized over enough writes\nvar VIEW_THRESHOLD_FLOAT = 16,\n    VIEW_THRESHOLD_INT   = 128;\n\nfunction getLazyView(writer, count, threshold) {\n    var view = writer.view;\n    if (view || count < threshold)\n        return view;\n    var buf = writer.buf;\n    return writer.view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);\n}\n\n/**\n * Writes an array of unsigned 32 bit values as packed, fixed 32 bits.\n * @param {number[]} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.fixed32s = function write_fixed32s(value) {\n    var n = value.length, bytes = n * 4;\n    this.uint32(bytes); // length is known exactly\n    this._reserve(bytes);\n    var p = this.pos, i, dv = getLazyView(this, n, VIEW_THRESHOLD_INT);\n    if (dv)\n        for (i = 0; i < n; ++i) { dv.setUint32(p, value[i] >>> 0, true); p += 4; }\n    else {\n        var buf = this.buf;\n        for (i = 0; i < n; ++i) { writeFixed32(value[i] >>> 0, buf, p); p += 4; }\n    }\n    this.pos += bytes;\n    return this;\n};\n\n/**\n * Writes an array of signed 32 bit values as packed, fixed 32 bits.\n * @function\n * @param {number[]} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sfixed32s = Writer.prototype.fixed32s;\n\n/**\n * Writes an array of unsigned 64 bit values as packed, fixed 64 bits.\n * @param {Array.<Long|number|string>} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.fixed64s = function write_fixed64s(value) {\n    var n = value.length, bytes = n * 8;\n    this.uint32(bytes);\n    this._reserve(bytes);\n    var p = this.pos, i, bits, dv = getLazyView(this, n, VIEW_THRESHOLD_INT);\n    if (dv)\n        for (i = 0; i < n; ++i) { bits = LongBits.from(value[i]); dv.setUint32(p, bits.lo, true); dv.setUint32(p + 4, bits.hi, true); p += 8; }\n    else {\n        var buf = this.buf;\n        for (i = 0; i < n; ++i) { bits = LongBits.from(value[i]); writeFixed32(bits.lo, buf, p); writeFixed32(bits.hi, buf, p + 4); p += 8; }\n    }\n    this.pos += bytes;\n    return this;\n};\n\n/**\n * Writes an array of signed 64 bit values as packed, fixed 64 bits.\n * @function\n * @param {Array.<Long|number|string>} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sfixed64s = Writer.prototype.fixed64s;\n\n/**\n * Writes an array of floats (32 bit) as a packed repeated field.\n * @param {number[]} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.floats = function write_floats(value) {\n    var n = value.length, bytes = n * 4;\n    this.uint32(bytes);\n    this._reserve(bytes);\n    var p = this.pos, i, dv = getLazyView(this, n, VIEW_THRESHOLD_FLOAT);\n    if (dv)\n        for (i = 0; i < n; ++i) { dv.setFloat32(p, value[i], true); p += 4; }\n    else {\n        var buf = this.buf;\n        for (i = 0; i < n; ++i) { util.float.writeFloatLE(value[i], buf, p); p += 4; }\n    }\n    this.pos += bytes;\n    return this;\n};\n\n/**\n * Writes an array of doubles (64 bit float) as a packed repeated field.\n * @param {number[]} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.doubles = function write_doubles(value) {\n    var n = value.length, bytes = n * 8;\n    this.uint32(bytes);\n    this._reserve(bytes);\n    var p = this.pos, i, dv = getLazyView(this, n, VIEW_THRESHOLD_FLOAT);\n    if (dv)\n        for (i = 0; i < n; ++i) { dv.setFloat64(p, value[i], true); p += 8; }\n    else {\n        var buf = this.buf;\n        for (i = 0; i < n; ++i) { util.float.writeDoubleLE(value[i], buf, p); p += 8; }\n    }\n    this.pos += bytes;\n    return this;\n};\n\n/**\n * Forks this writer's state by pushing it to a stack.\n * @returns {Writer} `this`\n */\nWriter.prototype.fork = function fork() {\n    this._reserve(1);\n    (this.states || (this.states = [])).push(this.pos);\n    this.pos += 1;\n    return this;\n};\n\n/**\n * Resets this instance to the last state.\n * @returns {Writer} `this`\n */\nWriter.prototype.reset = function reset() {\n    var states = this.states;\n    if (states && states.length) {\n        this.pos = states.pop();\n    } else {\n        this.pos = 0;\n    }\n    return this;\n};\n\n/**\n * Resets to the last state and prepends the fork state's current write length as a varint.\n * @returns {Writer} `this`\n */\nWriter.prototype.ldelim = function ldelim() {\n    var states = this.states,\n        len,\n        vlen;\n    if (states && states.length) {\n        var lenPos = states.pop();\n        len = this.pos - lenPos - 1;\n        vlen = sizeVarint32(len);\n        if (vlen > 1) { // grow the reserved single byte and shift content forward\n            this._reserve(vlen - 1);\n            this.buf.copyWithin(lenPos + vlen, lenPos + 1, lenPos + 1 + len);\n            this.pos += vlen - 1;\n            writeVarint32(len, this.buf, lenPos);\n        } else {\n            this.buf[lenPos] = len;\n        }\n    } else { // not forked: prefix the entire buffer with its length\n        // TODO: Compatibility with older generated code.\n        // Remove this branch in the next major release.\n        len = this.pos;\n        vlen = sizeVarint32(len);\n        this._reserve(vlen);\n        this.buf.copyWithin(vlen, 0, len);\n        writeVarint32(len, this.buf, 0);\n        this.pos += vlen;\n    }\n    return this;\n};\n\n/**\n * Finishes the write operation.\n * Returns a buffer sized to the written data by default.\n * @param {boolean} [shared=false] Whether to return a shared view instead of a unique copy\n * @returns {Uint8Array} Finished buffer\n */\nWriter.prototype.finish = function finish(shared) {\n    if (shared)\n        return this.buf.subarray(0, this.pos);\n    var buf = this.constructor.alloc(this.pos);\n    buf.set(this.buf.subarray(0, this.pos), 0);\n    return buf;\n};\n\n/**\n * Finishes the write operation, writing into the provided buffer.\n * The caller must ensure that `buf` has enough space starting at `offset`\n * to hold {@link Writer#pos} bytes.\n * @param {T} buf Target buffer\n * @param {number} [offset=0] Offset to start writing at\n * @returns {T} The provided buffer\n * @template T extends Uint8Array\n */\nWriter.prototype.finishInto = function finishInto(buf, offset) {\n    if (offset === undefined)\n        offset = 0;\n    buf.set(this.buf.subarray(0, this.pos), offset);\n    return buf;\n};\n\nWriter._configure = function(BufferWriter_) {\n    BufferWriter = BufferWriter_;\n    Writer.create = create();\n    BufferWriter._configure();\n};\n","\"use strict\";\nmodule.exports = BufferWriter;\n\n// extends Writer\nvar Writer = require(\"./writer\");\nBufferWriter.prototype = Object.create(Writer.prototype, {\n    constructor: {\n        value: BufferWriter,\n        writable: true,\n        enumerable: false,\n        configurable: true\n    }\n});\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer writer instance.\n * @classdesc Wire format writer using node buffers.\n * @extends Writer\n * @constructor\n */\nfunction BufferWriter() {\n    Writer.call(this);\n}\n\nvar writeStringBuffer;\n\nBufferWriter._configure = function () {\n    /**\n     * Allocates a buffer of the specified size.\n     * @function\n     * @param {number} size Buffer size\n     * @returns {Buffer} Buffer\n     */\n    BufferWriter.alloc = util.Buffer && util.Buffer.allocUnsafe;\n\n    writeStringBuffer = util.Buffer && util.Buffer.prototype.utf8Write\n        ? function writeStringBuffer_utf8Write(val, buf, pos) {\n            return buf.utf8Write(val, pos);\n        }\n        : function writeStringBuffer_write(val, buf, pos) {\n            return buf.write(val, pos);\n        };\n};\n\n\n/**\n * @override\n */\nBufferWriter.prototype.bytes = function write_bytes_buffer(value) {\n    if (util.isString(value))\n        value = util.Buffer.from(value, \"base64\");\n    var len = value.length >>> 0;\n    this.uint32(len);\n    if (len) {\n        this._reserve(len);\n        this.buf.set(value, this.pos);\n        this.pos += len;\n    }\n    return this;\n};\n\n/**\n * @override\n */\nBufferWriter.prototype.string = function write_string_buffer(value) {\n    var n = value.length;\n    if (!n) {\n        this._reserve(1);\n        this.buf[this.pos++] = 0;\n        return this;\n    }\n    if (n < 0x80) {\n        this._reserve(n * 3 + 5); // worst case\n        var pos = this.pos,\n            buf = this.buf;\n        return this._delim(pos,\n            n < 40\n                ? util.utf8.write(value, buf, pos + 1)\n                : writeStringBuffer(value, buf, pos + 1)\n        );\n    }\n    var len = util.Buffer.byteLength(value);\n    this.uint32(len);\n    this._reserve(len);\n    writeStringBuffer(value, this.buf, this.pos);\n    this.pos += len;\n    return this;\n};\n\n\n/**\n * Finishes the write operation.\n * @name BufferWriter#finish\n * @function\n * @returns {Buffer} Finished buffer\n */\n\nBufferWriter._configure();\n","\"use strict\";\nmodule.exports = Reader;\n\nvar util      = require(\"./util/minimal\");\n\nvar BufferReader; // cyclic\n\nvar LongBits  = util.LongBits,\n    utf8      = util.utf8;\n\n/* istanbul ignore next */\nfunction indexOutOfRange(reader, writeLength) {\n    return RangeError(\"index out of range: \" + reader.pos + \" + \" + (writeLength || 1) + \" > \" + reader.len);\n}\n\n/**\n * Constructs a new reader instance using the specified buffer.\n * @classdesc Wire format reader using `Uint8Array`.\n * @constructor\n * @param {Uint8Array} buffer Buffer to read from\n */\nfunction Reader(buffer) {\n\n    /**\n     * Read buffer.\n     * @type {Uint8Array}\n     */\n    this.buf = buffer;\n\n    /**\n     * Read buffer position.\n     * @type {number}\n     */\n    this.pos = 0;\n\n    /**\n     * Read buffer length.\n     * @type {number}\n     */\n    this.len = buffer.length;\n\n    /**\n     * Cached DataView for packed reads.\n     * @type {DataView|null}\n     */\n    this.view = null;\n\n    /**\n     * Whether to discard unknown fields while decoding.\n     * @type {boolean}\n     */\n    this.discardUnknown = Reader.discardUnknown;\n}\n\nfunction create_array(buffer) {\n    // TODO: Remove plain array reader support in the next major release.\n    if (Array.isArray(buffer))\n        buffer = new Uint8Array(buffer);\n    if (buffer instanceof Uint8Array)\n        return new Reader(buffer);\n    throw Error(\"illegal buffer\");\n}\n\nvar create = function create() {\n    return util.Buffer\n        ? function create_buffer_setup(buffer) {\n            return (Reader.create = function create_buffer(buffer) {\n                return util.Buffer.isBuffer(buffer)\n                    ? new BufferReader(buffer)\n                    /* istanbul ignore next */\n                    : create_array(buffer);\n            })(buffer);\n        }\n        /* istanbul ignore next */\n        : create_array;\n};\n\n/**\n * Creates a new reader using the specified buffer.\n * @function\n * @param {Uint8Array|Buffer} buffer Buffer to read from\n * @returns {Reader|BufferReader} A {@link BufferReader} if `buffer` is a Buffer, otherwise a {@link Reader}\n * @throws {Error} If `buffer` is not a valid buffer\n */\nReader.create = create();\n\n/**\n * Returns raw bytes from the backing buffer without advancing the reader.\n * @param {number} start Start offset\n * @param {number} end End offset\n * @returns {Uint8Array} Raw bytes\n */\nReader.prototype.raw = function read_raw(start, end) {\n    return this.buf.subarray(start, end);\n};\n\n/**\n * Reads a varint as an unsigned 32 bit value.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.uint32 = function read_uint32() {\n    var buf = this.buf,\n        pos = this.pos,\n        value = (buf[pos] & 127) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n    value = (value | (buf[pos] & 127) << 7) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n    value = (value | (buf[pos] & 127) << 14) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n    value = (value | (buf[pos] & 127) << 21) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n    value = (value | (buf[pos] & 15) << 28) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n\n    for (var i = 0; i < 5; ++i) {\n        /* istanbul ignore if */\n        if (pos >= this.len) {\n            this.pos = pos;\n            throw indexOutOfRange(this);\n        }\n        if (buf[pos++] < 128) {\n            this.pos = pos;\n            return value;\n        }\n    }\n    /* istanbul ignore next */\n    this.pos = pos;\n    throw Error(\"invalid varint encoding\");\n};\n\n/**\n * Reads a field tag.\n * @function\n * @returns {number} Tag read\n */\nReader.prototype.tag = function read_tag() {\n    var buf = this.buf,\n        pos = this.pos,\n        value = (buf[pos] & 127) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n    value = (value | (buf[pos] & 127) << 7) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n    value = (value | (buf[pos] & 127) << 14) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n    value = (value | (buf[pos] & 127) << 21) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n    value = (value | (buf[pos] & 15) << 28) >>> 0;\n    if (buf[pos] < 128 && (buf[pos] & 112) === 0) {\n        this.pos = pos + 1;\n        return value;\n    }\n\n    this.pos = pos + 1;\n    throw Error(\"invalid tag encoding\");\n};\n\n/**\n * Reads a varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.int32 = function read_int32() {\n    return this.uint32() | 0;\n};\n\n/**\n * Reads a zig-zag encoded varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.sint32 = function read_sint32() {\n    var value = this.uint32();\n    return value >>> 1 ^ -(value & 1) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readLongVarint() {\n    // tends to deopt with local vars for octet etc.\n    var bits = new LongBits(0, 0);\n    var i = 0;\n    if (this.len - this.pos > 4) { // fast route (lo)\n        for (; i < 4; ++i) {\n            // 1st..4th\n            bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n            if (this.buf[this.pos++] < 128)\n                return bits;\n        }\n        // 5th\n        bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0;\n        bits.hi = (bits.hi | (this.buf[this.pos] & 127) >>  4) >>> 0;\n        if (this.buf[this.pos++] < 128)\n            return bits;\n        i = 0;\n    } else {\n        for (; i < 4; ++i) {\n            /* istanbul ignore if */\n            if (this.pos >= this.len)\n                throw indexOutOfRange(this);\n            // 1st..4th\n            bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n            if (this.buf[this.pos++] < 128)\n                return bits;\n        }\n        throw indexOutOfRange(this);\n    }\n    if (this.len - this.pos > 4) { // fast route (hi)\n        for (; i < 5; ++i) {\n            // 6th..10th\n            bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n            if (this.buf[this.pos++] < 128)\n                return bits;\n        }\n    } else {\n        for (; i < 5; ++i) {\n            /* istanbul ignore if */\n            if (this.pos >= this.len)\n                throw indexOutOfRange(this);\n            // 6th..10th\n            bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n            if (this.buf[this.pos++] < 128)\n                return bits;\n        }\n    }\n    /* istanbul ignore next */\n    throw Error(\"invalid varint encoding\");\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads a varint as a signed 64 bit value.\n * @name Reader#int64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as an unsigned 64 bit value.\n * @name Reader#uint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a zig-zag encoded varint as a signed 64 bit value.\n * @name Reader#sint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as a boolean.\n * @returns {boolean} Value read\n */\nReader.prototype.bool = function read_bool() {\n    var value = false,\n        b;\n    for (var i = 0; i < 10; ++i) {\n        /* istanbul ignore if */\n        if (this.pos >= this.len)\n            throw indexOutOfRange(this);\n        b = this.buf[this.pos++];\n        if (b & 127)\n            value = true;\n        if (b < 128)\n            return value;\n    }\n    /* istanbul ignore next */\n    throw Error(\"invalid varint encoding\");\n};\n\nfunction readFixed32_end(buf, end) { // note that this uses `end`, not `pos`\n    return (buf[end - 4]\n          | buf[end - 3] << 8\n          | buf[end - 2] << 16\n          | buf[end - 1] << 24) >>> 0;\n}\n\n/**\n * Reads fixed 32 bits as an unsigned 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.fixed32 = function read_fixed32() {\n\n    /* istanbul ignore if */\n    if (this.pos + 4 > this.len)\n        throw indexOutOfRange(this, 4);\n\n    return readFixed32_end(this.buf, this.pos += 4);\n};\n\n/**\n * Reads fixed 32 bits as a signed 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.sfixed32 = function read_sfixed32() {\n\n    /* istanbul ignore if */\n    if (this.pos + 4 > this.len)\n        throw indexOutOfRange(this, 4);\n\n    return readFixed32_end(this.buf, this.pos += 4) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readFixed64(/* this: Reader */) {\n\n    /* istanbul ignore if */\n    if (this.pos + 8 > this.len)\n        throw indexOutOfRange(this, 8);\n\n    return new LongBits(readFixed32_end(this.buf, this.pos += 4), readFixed32_end(this.buf, this.pos += 4));\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads fixed 64 bits.\n * @name Reader#fixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads zig-zag encoded fixed 64 bits.\n * @name Reader#sfixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a float (32 bit) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.float = function read_float() {\n\n    /* istanbul ignore if */\n    if (this.pos + 4 > this.len)\n        throw indexOutOfRange(this, 4);\n\n    var value = util.float.readFloatLE(this.buf, this.pos);\n    this.pos += 4;\n    return value;\n};\n\n/**\n * Reads a double (64 bit float) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.double = function read_double() {\n\n    /* istanbul ignore if */\n    if (this.pos + 8 > this.len)\n        throw indexOutOfRange(this, 4);\n\n    var value = util.float.readDoubleLE(this.buf, this.pos);\n    this.pos += 8;\n    return value;\n};\n\n/**\n * Reads a packed repeated field of unsigned 32 bit varints.\n * @param {number[]} [array] Array to read into; a new one is created if omitted\n * @returns {number[]} Array read into\n */\nReader.prototype.uint32s = function read_uint32s(array) {\n    if (array === undefined) array = [];\n    var end = this.uint32() + this.pos, buf = this.buf, pos = this.pos, value;\n    while (pos < end) {\n        value = buf[pos++];\n        if (value < 128)\n            array.push(value);\n        else {\n            this.pos = pos - 1;\n            array.push(this.uint32());\n            pos = this.pos;\n        }\n    }\n    this.pos = pos;\n    return array;\n};\n\n/**\n * Reads a packed repeated field of signed 32 bit varints.\n * @param {number[]} [array] Array to read into; a new one is created if omitted\n * @returns {number[]} Array read into\n */\nReader.prototype.int32s = function read_int32s(array) {\n    if (array === undefined) array = [];\n    var end = this.uint32() + this.pos, buf = this.buf, pos = this.pos, value;\n    while (pos < end) {\n        value = buf[pos++];\n        if (value < 128)\n            array.push(value);\n        else {\n            this.pos = pos - 1;\n            array.push(this.int32());\n            pos = this.pos;\n        }\n    }\n    this.pos = pos;\n    return array;\n};\n\n/**\n * Reads a packed repeated field of zig-zag encoded signed 32 bit varints.\n * @param {number[]} [array] Array to read into; a new one is created if omitted\n * @returns {number[]} Array read into\n */\nReader.prototype.sint32s = function read_sint32s(array) {\n    if (array === undefined) array = [];\n    var end = this.uint32() + this.pos;\n    while (this.pos < end)\n        array.push(this.sint32());\n    return array;\n};\n\n/**\n * Reads a packed repeated field of booleans.\n * @param {boolean[]} [array] Array to read into; a new one is created if omitted\n * @returns {boolean[]} Array read into\n */\nReader.prototype.bools = function read_bools(array) {\n    if (array === undefined) array = [];\n    var end = this.uint32() + this.pos, buf = this.buf, pos = this.pos, value;\n    while (pos < end) {\n        value = buf[pos++];\n        if (value < 128)\n            array.push(value !== 0);\n        else {\n            this.pos = pos - 1;\n            array.push(this.bool());\n            pos = this.pos;\n        }\n    }\n    this.pos = pos;\n    return array;\n};\n\n// The view allocation only pays off when amortized over enough reads\nvar VIEW_THRESHOLD_FLOAT = 8,\n    VIEW_THRESHOLD_INT   = 128;\n\nfunction getLazyView(reader, count, threshold) {\n    var view = reader.view;\n    if (view || count < threshold)\n        return view;\n    var buf = reader.buf;\n    return reader.view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);\n}\n\n/**\n * Reads a packed repeated field of unsigned 32 bit fixed values.\n * @param {number[]} [array] Array to read into; a new one is created if omitted\n * @returns {number[]} Array read into\n */\nReader.prototype.fixed32s = function read_fixed32s(array) {\n    if (array === undefined) array = [];\n    var len = this.uint32(), end = this.pos + len;\n    /* istanbul ignore if */\n    if (end > this.len) throw indexOutOfRange(this, len);\n    var count = len >>> 2, i = array.length, pos = this.pos;\n    array.length = i + count;\n    var dv = getLazyView(this, count, VIEW_THRESHOLD_INT);\n    if (dv)\n        for (var k = 0; k < count; ++k, pos += 4) array[i++] = dv.getUint32(pos, true);\n    else {\n        var buf = this.buf;\n        for (var j = 0; j < count; ++j, pos += 4) array[i++] = readFixed32_end(buf, pos + 4);\n    }\n    this.pos = pos;\n    if (pos !== end) throw indexOutOfRange(this, 4);\n    return array;\n};\n\n/**\n * Reads a packed repeated field of signed 32 bit fixed values.\n * @param {number[]} [array] Array to read into; a new one is created if omitted\n * @returns {number[]} Array read into\n */\nReader.prototype.sfixed32s = function read_sfixed32s(array) {\n    if (array === undefined) array = [];\n    var len = this.uint32(), end = this.pos + len;\n    /* istanbul ignore if */\n    if (end > this.len) throw indexOutOfRange(this, len);\n    var count = len >>> 2, i = array.length, pos = this.pos;\n    array.length = i + count;\n    var dv = getLazyView(this, count, VIEW_THRESHOLD_INT);\n    if (dv)\n        for (var k = 0; k < count; ++k, pos += 4) array[i++] = dv.getInt32(pos, true);\n    else {\n        var buf = this.buf;\n        for (var j = 0; j < count; ++j, pos += 4) array[i++] = readFixed32_end(buf, pos + 4) | 0;\n    }\n    this.pos = pos;\n    if (pos !== end) throw indexOutOfRange(this, 4);\n    return array;\n};\n\n/**\n * Reads a packed repeated field of floats (32 bit).\n * @param {number[]} [array] Array to read into; a new one is created if omitted\n * @returns {number[]} Array read into\n */\nReader.prototype.floats = function read_floats(array) {\n    if (array === undefined) array = [];\n    var len = this.uint32(), end = this.pos + len;\n    /* istanbul ignore if */\n    if (end > this.len) throw indexOutOfRange(this, len);\n    var count = len >>> 2, i = array.length, pos = this.pos;\n    array.length = i + count;\n    var dv = getLazyView(this, count, VIEW_THRESHOLD_FLOAT);\n    if (dv)\n        for (var k = 0; k < count; ++k, pos += 4) array[i++] = dv.getFloat32(pos, true);\n    else {\n        var buf = this.buf;\n        for (var j = 0; j < count; ++j, pos += 4) array[i++] = util.float.readFloatLE(buf, pos);\n    }\n    this.pos = pos;\n    if (pos !== end) throw indexOutOfRange(this, 4);\n    return array;\n};\n\n/**\n * Reads a packed repeated field of doubles (64 bit float).\n * @param {number[]} [array] Array to read into; a new one is created if omitted\n * @returns {number[]} Array read into\n */\nReader.prototype.doubles = function read_doubles(array) {\n    if (array === undefined) array = [];\n    var len = this.uint32(), end = this.pos + len;\n    /* istanbul ignore if */\n    if (end > this.len) throw indexOutOfRange(this, len);\n    var count = len >>> 3, i = array.length, pos = this.pos;\n    array.length = i + count;\n    var dv = getLazyView(this, count, VIEW_THRESHOLD_FLOAT);\n    if (dv)\n        for (var k = 0; k < count; ++k, pos += 8) array[i++] = dv.getFloat64(pos, true);\n    else {\n        var buf = this.buf;\n        for (var j = 0; j < count; ++j, pos += 8) array[i++] = util.float.readDoubleLE(buf, pos);\n    }\n    this.pos = pos;\n    if (pos !== end) throw indexOutOfRange(this, 8);\n    return array;\n};\n\n/**\n * Reads a packed repeated field of unsigned 64 bit varints.\n * @param {Array.<Long|number>} [array] Array to read into; a new one is created if omitted\n * @returns {Array.<Long|number>} Array read into\n */\nReader.prototype.uint64s = function read_uint64s(array) {\n    if (array === undefined) array = [];\n    var end = this.uint32() + this.pos;\n    while (this.pos < end)\n        array.push(this.uint64());\n    return array;\n};\n\n/**\n * Reads a packed repeated field of signed 64 bit varints.\n * @param {Array.<Long|number>} [array] Array to read into; a new one is created if omitted\n * @returns {Array.<Long|number>} Array read into\n */\nReader.prototype.int64s = function read_int64s(array) {\n    if (array === undefined) array = [];\n    var end = this.uint32() + this.pos;\n    while (this.pos < end)\n        array.push(this.int64());\n    return array;\n};\n\n/**\n * Reads a packed repeated field of zig-zag encoded signed 64 bit varints.\n * @param {Array.<Long|number>} [array] Array to read into; a new one is created if omitted\n * @returns {Array.<Long|number>} Array read into\n */\nReader.prototype.sint64s = function read_sint64s(array) {\n    if (array === undefined) array = [];\n    var end = this.uint32() + this.pos;\n    while (this.pos < end)\n        array.push(this.sint64());\n    return array;\n};\n\n/**\n * Reads a packed repeated field of unsigned 64 bit fixed values.\n * @param {Array.<Long|number>} [array] Array to read into; a new one is created if omitted\n * @returns {Array.<Long|number>} Array read into\n */\nReader.prototype.fixed64s = function read_fixed64s(array) {\n    if (array === undefined) array = [];\n    var len = this.uint32(), end = this.pos + len, i = array.length;\n    /* istanbul ignore if */\n    if (end > this.len) throw indexOutOfRange(this, len);\n    var count = len >>> 3;\n    array.length = i + count; // 8 bytes per value, count is known\n    for (var j = 0; j < count; ++j)\n        array[i++] = this.fixed64();\n    if (this.pos !== end) throw indexOutOfRange(this, 8);\n    return array;\n};\n\n/**\n * Reads a packed repeated field of signed 64 bit fixed values.\n * @param {Array.<Long|number>} [array] Array to read into; a new one is created if omitted\n * @returns {Array.<Long|number>} Array read into\n */\nReader.prototype.sfixed64s = function read_sfixed64s(array) {\n    if (array === undefined) array = [];\n    var len = this.uint32(), end = this.pos + len, i = array.length;\n    /* istanbul ignore if */\n    if (end > this.len) throw indexOutOfRange(this, len);\n    var count = len >>> 3;\n    array.length = i + count; // 8 bytes per value, count is known\n    for (var j = 0; j < count; ++j)\n        array[i++] = this.sfixed64();\n    if (this.pos !== end) throw indexOutOfRange(this, 8);\n    return array;\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @returns {Uint8Array} Value read\n */\nReader.prototype.bytes = function read_bytes() {\n    var length = this.uint32(),\n        start  = this.pos,\n        end    = this.pos + length;\n\n    /* istanbul ignore if */\n    if (end > this.len)\n        throw indexOutOfRange(this, length);\n\n    this.pos = end;\n    return this.raw(start, end);\n};\n\n/**\n * Reads a string preceeded by its byte length as a varint.\n * @returns {string} Value read\n */\nReader.prototype.string = function read_string() {\n    var length = this.uint32(),\n        start  = this.pos,\n        end    = this.pos + length;\n\n    /* istanbul ignore if */\n    if (end > this.len)\n        throw indexOutOfRange(this, length);\n\n    this.pos = end;\n    return utf8.read(this.buf, start, end);\n};\n\n/**\n * Reads a string preceeded by its byte length as a varint, rejecting invalid UTF8.\n * @returns {string} Value read\n */\nReader.prototype.stringVerify = function read_string_verify() {\n    var length = this.uint32(),\n        start  = this.pos,\n        end    = this.pos + length;\n\n    /* istanbul ignore if */\n    if (end > this.len)\n        throw indexOutOfRange(this, length);\n\n    this.pos = end;\n    return utf8.readStrict(this.buf, start, end);\n};\n\n/**\n * Skips the specified number of bytes if specified, otherwise skips a varint.\n * @param {number} [length] Length if known, otherwise a varint is assumed\n * @returns {Reader} `this`\n */\nReader.prototype.skip = function skip(length) {\n    if (typeof length === \"number\") {\n        /* istanbul ignore if */\n        if (this.pos + length > this.len)\n            throw indexOutOfRange(this, length);\n        this.pos += length;\n    } else {\n        do {\n            /* istanbul ignore if */\n            if (this.pos >= this.len)\n                throw indexOutOfRange(this);\n        } while (this.buf[this.pos++] & 128);\n    }\n    return this;\n};\n\n/**\n * Recursion limit.\n * @type {number}\n */\nReader.recursionLimit = util.recursionLimit;\n\n/**\n * Whether readers discard unknown fields while decoding.\n * @type {boolean}\n */\nReader.discardUnknown = true;\n\n/**\n * Skips the next element of the specified wire type.\n * @param {number} wireType Wire type received\n * @param {number} [depth] Depth of recursion to control nested calls; 0 if omitted\n * @param {number} [fieldNumber] Field number for validating group end tags\n * @returns {Reader} `this`\n */\nReader.prototype.skipType = function(wireType, depth, fieldNumber) {\n    if (depth === undefined) depth = 0;\n    if (depth > Reader.recursionLimit)\n        throw Error(\"max depth exceeded\");\n    if (fieldNumber === 0)\n        throw Error(\"illegal tag: field number 0\");\n    switch (wireType) {\n        case 0:\n            this.skip();\n            break;\n        case 1:\n            this.skip(8);\n            break;\n        case 2:\n            this.skip(this.uint32());\n            break;\n        case 3:\n            while (true) {\n                var tag = this.tag();\n                var nestedField = tag >>> 3;\n                wireType = tag & 7;\n                if (!nestedField)\n                    throw Error(\"illegal tag: field number 0\");\n                if (wireType === 4) {\n                    if (fieldNumber !== undefined && nestedField !== fieldNumber)\n                        throw Error(\"invalid end group tag\");\n                    break;\n                }\n                this.skipType(wireType, depth + 1, nestedField);\n            }\n            break;\n        case 5:\n            this.skip(4);\n            break;\n\n        /* istanbul ignore next */\n        default:\n            throw Error(\"invalid wire type \" + wireType + \" at offset \" + this.pos);\n    }\n    return this;\n};\n\nReader._configure = function(BufferReader_) {\n    BufferReader = BufferReader_;\n    Reader.create = create();\n    BufferReader._configure();\n\n    var fn = util.Long ? \"toLong\" : /* istanbul ignore next */ \"toNumber\";\n    util.merge(Reader.prototype, {\n\n        int64: function read_int64() {\n            return readLongVarint.call(this)[fn](false);\n        },\n\n        uint64: function read_uint64() {\n            return readLongVarint.call(this)[fn](true);\n        },\n\n        sint64: function read_sint64() {\n            return readLongVarint.call(this).zzDecode()[fn](false);\n        },\n\n        fixed64: function read_fixed64() {\n            return readFixed64.call(this)[fn](true);\n        },\n\n        sfixed64: function read_sfixed64() {\n            return readFixed64.call(this)[fn](false);\n        }\n\n    });\n};\n","\"use strict\";\nmodule.exports = BufferReader;\n\n// extends Reader\nvar Reader = require(\"./reader\");\nBufferReader.prototype = Object.create(Reader.prototype, {\n    constructor: {\n        value: BufferReader,\n        writable: true,\n        enumerable: false,\n        configurable: true\n    }\n});\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer reader instance.\n * @classdesc Wire format reader using node buffers.\n * @extends Reader\n * @constructor\n * @param {Buffer} buffer Buffer to read from\n */\nfunction BufferReader(buffer) {\n    Reader.call(this, buffer);\n\n    /**\n     * Read buffer.\n     * @name BufferReader#buf\n     * @type {Buffer}\n    */\n}\n\nBufferReader._configure = function () {\n    /* istanbul ignore else */\n    if (util.Buffer)\n        BufferReader.prototype._slice = util.Buffer.prototype.slice;\n};\n\n/**\n * Returns raw bytes from the backing buffer without advancing the reader.\n * @name BufferReader#raw\n * @function\n * @param {number} start Start offset\n * @param {number} end End offset\n * @returns {Buffer} Raw bytes\n */\nBufferReader.prototype.raw = function read_raw_buffer(start, end) {\n    return this._slice.call(this.buf, start, end);\n};\n\n/**\n * @override\n */\nBufferReader.prototype.string = function read_string_buffer() {\n    var len = this.uint32(), // modifies pos\n        start = this.pos,\n        end = this.pos + len;\n\n    /* istanbul ignore if */\n    if (end > this.len)\n        throw RangeError(\"index out of range: \" + this.pos + \" + \" + len + \" > \" + this.len);\n\n    this.pos = end;\n    return this.buf.utf8Slice\n        ? this.buf.utf8Slice(start, end)\n        : this.buf.toString(\"utf-8\", start, end);\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @name BufferReader#bytes\n * @function\n * @returns {Buffer} Value read\n */\n\nBufferReader._configure();\n","\"use strict\";\nmodule.exports = Service;\n\nvar util = require(\"../util/minimal\");\n\n// Extends EventEmitter\nService.prototype = Object.create(util.EventEmitter.prototype, {\n    constructor: {\n        value: Service,\n        writable: true,\n        enumerable: false,\n        configurable: true\n    }\n});\n\n/**\n * A service method callback as used by {@link rpc.ServiceMethod|ServiceMethod}.\n *\n * Differs from {@link RPCImplCallback} in that it is an actual callback of a service method which may not return `response = null`.\n * @typedef rpc.ServiceMethodCallback\n * @template TRes extends Message<TRes>\n * @type {function}\n * @param {Error|null} error Error, if any\n * @param {TRes} [response] Response message\n * @returns {undefined}\n */\n\n/**\n * A service method part of a {@link rpc.Service} as created by {@link Service.create}.\n * @typedef rpc.ServiceMethod\n * @template TReq extends Message<TReq>\n * @template TRes extends Message<TRes>\n * @type {{\n *   (request: TReq|Properties<TReq>, callback: rpc.ServiceMethodCallback<TRes>): void;\n *   (request: TReq|Properties<TReq>): Promise<TRes>;\n *   readonly name: string;\n *   readonly path: string;\n *   readonly requestType: string;\n *   readonly responseType: string;\n *   readonly requestStream: true|undefined;\n *   readonly responseStream: true|undefined;\n * }}\n */\n\n/**\n * Constructs a new RPC service instance.\n * @classdesc An RPC service as returned by {@link Service#create}.\n * @exports rpc.Service\n * @extends util.EventEmitter\n * @constructor\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n */\nfunction Service(rpcImpl, requestDelimited, responseDelimited) {\n\n    if (typeof rpcImpl !== \"function\")\n        throw TypeError(\"rpcImpl must be a function\");\n\n    util.EventEmitter.call(this);\n\n    /**\n     * RPC implementation. Becomes `null` once the service is ended.\n     * @type {RPCImpl|null}\n     */\n    this.rpcImpl = rpcImpl;\n\n    /**\n     * Whether requests are length-delimited.\n     * @type {boolean}\n     */\n    this.requestDelimited = Boolean(requestDelimited);\n\n    /**\n     * Whether responses are length-delimited.\n     * @type {boolean}\n     */\n    this.responseDelimited = Boolean(responseDelimited);\n}\n\n/**\n * Calls a service method through {@link rpc.Service#rpcImpl|rpcImpl}.\n * @param {Method|rpc.ServiceMethod<TReq,TRes>} method Reflected or static method\n * @param {Constructor<TReq>} requestCtor Request constructor\n * @param {Constructor<TRes>} responseCtor Response constructor\n * @param {TReq|Properties<TReq>} request Request message or plain object\n * @param {rpc.ServiceMethodCallback<TRes>} callback Service callback\n * @returns {undefined}\n * @template TReq extends Message<TReq>\n * @template TRes extends Message<TRes>\n */\nService.prototype.rpcCall = function rpcCall(method, requestCtor, responseCtor, request, callback) {\n\n    if (!request)\n        throw TypeError(\"request must be specified\");\n\n    var self = this;\n    if (!callback)\n        return util.asPromise(rpcCall, self, method, requestCtor, responseCtor, request);\n\n    if (!self.rpcImpl) {\n        setTimeout(function() { callback(Error(\"already ended\")); }, 0);\n        return undefined;\n    }\n\n    try {\n        return self.rpcImpl(\n            method,\n            requestCtor[self.requestDelimited ? \"encodeDelimited\" : \"encode\"](request).finish(),\n            function rpcCallback(err, response) {\n\n                if (err) {\n                    self.emit(\"error\", err, method);\n                    return callback(err);\n                }\n\n                if (response === null) {\n                    self.end(/* endedByRPC */ true);\n                    return undefined;\n                }\n\n                if (!(response instanceof responseCtor)) {\n                    try {\n                        response = responseCtor[self.responseDelimited ? \"decodeDelimited\" : \"decode\"](response);\n                    } catch (err) {\n                        self.emit(\"error\", err, method);\n                        return callback(err);\n                    }\n                }\n\n                self.emit(\"data\", response, method);\n                return callback(null, response);\n            }\n        );\n    } catch (err) {\n        self.emit(\"error\", err, method);\n        setTimeout(function() { callback(err); }, 0);\n        return undefined;\n    }\n};\n\n/**\n * Ends this service and emits the `end` event.\n * @param {boolean} [endedByRPC=false] Whether the service has been ended by the RPC implementation.\n * @returns {rpc.Service} `this`\n */\nService.prototype.end = function end(endedByRPC) {\n    if (this.rpcImpl) {\n        if (!endedByRPC) // signal end to rpcImpl\n            this.rpcImpl(null, null, null);\n        this.rpcImpl = null;\n        this.emit(\"end\").off();\n    }\n    return this;\n};\n","\"use strict\";\n\n/**\n * Streaming RPC helpers.\n * @namespace\n */\nvar rpc = exports;\n\n/**\n * RPC implementation passed to {@link Service#create} performing a service request on network level, i.e. by utilizing http requests or websockets.\n * @typedef RPCImpl\n * @type {function}\n * @param {Method|rpc.ServiceMethod<Message<{}>,Message<{}>>} method Reflected or static method being called\n * @param {Uint8Array} requestData Request data\n * @param {RPCImplCallback} callback Callback function\n * @returns {undefined}\n * @example\n * function rpcImpl(method, requestData, callback) {\n *     if (protobuf.util.lcFirst(method.name) !== \"myMethod\") // compatible with static code\n *         throw Error(\"no such method\");\n *     asynchronouslyObtainAResponse(requestData, function(err, responseData) {\n *         callback(err, responseData);\n *     });\n * }\n */\n\n/**\n * Node-style callback as used by {@link RPCImpl}.\n * @typedef RPCImplCallback\n * @type {function}\n * @param {Error|null} error Error, if any, otherwise `null`\n * @param {Uint8Array|null} [response] Response data or `null` to signal end of stream, if there hasn't been an error\n * @returns {undefined}\n */\n\nrpc.Service = require(\"./rpc/service\");\n","\"use strict\";\nmodule.exports = Object.create(null);\n\n/**\n * Named roots.\n * This is where pbjs stores generated structures (the option `-r, --root` specifies a name).\n * Can also be used manually to make roots available across modules.\n * @name roots\n * @type {Object.<string,Root>}\n * @example\n * // pbjs -r myroot -o compiled.js ...\n *\n * // in another module:\n * require(\"./compiled.js\");\n *\n * // in any subsequent module:\n * var root = protobuf.roots[\"myroot\"];\n */\n","\"use strict\";\n\n/**\n * Build type, one of `\"full\"`, `\"light\"` or `\"minimal\"`.\n * @name build\n * @type {string}\n * @const\n */\nexports.build = \"minimal\";\n\n// Serialization\nexports.Writer       = require(\"./writer\");\nexports.BufferWriter = require(\"./writer_buffer\");\nexports.Reader       = require(\"./reader\");\nexports.BufferReader = require(\"./reader_buffer\");\n\n// Utility\nexports.util         = require(\"./util/minimal\");\nexports.rpc          = require(\"./rpc\");\nexports.roots        = require(\"./roots\");\nexports.configure    = configure;\n\n/* istanbul ignore next */\n/**\n * Reconfigures the library according to the environment.\n * @returns {undefined}\n */\nfunction configure() {\n    exports.util.LongBits._configure(exports.util.Long);\n    exports.Writer._configure(exports.BufferWriter);\n    exports.Reader._configure(exports.BufferReader);\n}\n\n// Set up buffer utility according to the environment\nconfigure();\n","\"use strict\";\n\nvar patterns = exports;\n\npatterns.numberRe    = /^(?![eE])[0-9]*(?:\\.[0-9]*)?(?:[eE][+-]?[0-9]+)?$/;\npatterns.typeRefRe   = /^(?:\\.?[a-zA-Z_][a-zA-Z_0-9]*)(?:\\.[a-zA-Z_][a-zA-Z_0-9]*)*$/;\npatterns.reservedRe  = /^(?:do|if|in|for|let|new|try|var|case|else|enum|eval|false|null|this|true|void|with|break|catch|class|const|super|throw|while|yield|delete|export|import|public|return|static|switch|typeof|default|extends|finally|package|private|continue|debugger|function|arguments|interface|protected|implements|instanceof)$/;\n","\"use strict\";\nmodule.exports = codegen;\n\nvar patterns = require(\"./patterns\");\nvar reservedRe = patterns.reservedRe;\n\n/**\n * Begins generating a function.\n * @memberof util\n * @param {string[]} functionParams Function parameter names\n * @param {string} [functionName] Function name if not anonymous\n * @returns {Codegen} Appender that appends code to the function's body\n */\nfunction codegen(functionParams, functionName) {\n\n    /* istanbul ignore if */\n    if (typeof functionParams === \"string\") {\n        functionName = functionParams;\n        functionParams = undefined;\n    }\n\n    var body = [];\n\n    /**\n     * Appends code to the function's body or finishes generation.\n     * @typedef Codegen\n     * @type {function}\n     * @param {string|Object.<string,*>} [formatStringOrScope] Format string or, to finish the function, an object of additional scope variables, if any\n     * @param {...*} [formatParams] Format parameters\n     * @returns {Codegen|Function} Itself or the generated function if finished\n     * @throws {Error} If format parameter counts do not match\n     */\n\n    function Codegen(formatStringOrScope) {\n        // note that explicit array handling below makes this ~50% faster\n\n        // finish the function\n        if (typeof formatStringOrScope !== \"string\") {\n            var source = toString();\n            if (codegen.verbose)\n                console.log(\"codegen: \" + source); // eslint-disable-line no-console\n            source = \"return \" + source;\n            if (formatStringOrScope) {\n                var scopeKeys   = Object.keys(formatStringOrScope),\n                    scopeParams = new Array(scopeKeys.length + 1),\n                    scopeValues = new Array(scopeKeys.length),\n                    scopeOffset = 0;\n                while (scopeOffset < scopeKeys.length) {\n                    scopeParams[scopeOffset] = scopeKeys[scopeOffset];\n                    scopeValues[scopeOffset] = formatStringOrScope[scopeKeys[scopeOffset++]];\n                }\n                scopeParams[scopeOffset] = source;\n                return Function.apply(null, scopeParams).apply(null, scopeValues); // eslint-disable-line no-new-func\n            }\n            return Function(source)(); // eslint-disable-line no-new-func\n        }\n\n        // otherwise append to body\n        var formatParams = new Array(arguments.length - 1),\n            formatOffset = 0;\n        while (formatOffset < formatParams.length)\n            formatParams[formatOffset] = arguments[++formatOffset];\n        formatOffset = 0;\n        formatStringOrScope = formatStringOrScope.replace(/%([%dfijs])/g, function replace($0, $1) {\n            var value = formatParams[formatOffset++];\n            switch ($1) {\n                case \"d\": case \"f\":\n                    value = Number(value);\n                    return Object.is(value, -0) ? \"-0\" : String(value);\n                case \"i\": return String(Math.floor(value));\n                case \"j\": return JSON.stringify(value);\n                case \"s\": return String(value);\n            }\n            return \"%\";\n        });\n        if (formatOffset !== formatParams.length)\n            throw Error(\"parameter count mismatch\");\n        body.push(formatStringOrScope);\n        return Codegen;\n    }\n\n    function toString(functionNameOverride) {\n        return \"function \" + safeFunctionName(functionNameOverride || functionName) + \"(\" + (functionParams && functionParams.join(\",\") || \"\") + \"){\\n  \" + body.join(\"\\n  \") + \"\\n}\";\n    }\n\n    Object.defineProperty(Codegen, \"toString\", {\n        value: toString,\n        writable: true,\n        enumerable: true,\n        configurable: true\n    });\n    return Codegen;\n}\n\n/**\n * Begins generating a function.\n * @memberof util\n * @function codegen\n * @param {string} [functionName] Function name if not anonymous\n * @returns {Codegen} Appender that appends code to the function's body\n * @variation 2\n */\n\n/**\n * When set to `true`, codegen will log generated code to console. Useful for debugging.\n * @name util.codegen.verbose\n * @type {boolean}\n */\ncodegen.verbose = false;\n\nfunction safeFunctionName(name) {\n    if (!name)\n        return \"\";\n    name = String(name).replace(/[^\\w$]/g, \"\");\n    if (!name)\n        return \"\";\n    if (/^\\d/.test(name))\n        name = \"_\" + name;\n    return reservedRe.test(name) ? name + \"_\" : name;\n}\n","\"use strict\";\n\nvar fs = null;\ntry {\n    fs = require(/* webpackIgnore: true */ \"fs\");\n    if (!fs || !fs.readFile || !fs.readFileSync)\n        fs = null;\n} catch (e) {\n    // `fs` is unavailable in browsers and browser-like bundles.\n}\nmodule.exports = fs;\n","\"use strict\";\nmodule.exports = fetch;\n\nvar asPromise = require(\"./aspromise\"),\n    fs        = require(\"./fs\");\n\n/**\n * Node-style callback as used by {@link util.fetch}.\n * @typedef FetchCallback\n * @type {function}\n * @param {?Error} error Error, if any, otherwise `null`\n * @param {string} [contents] File contents, if there hasn't been an error\n * @returns {undefined}\n */\n\n/**\n * Options as used by {@link util.fetch}.\n * @interface IFetchOptions\n * @property {boolean} [binary=false] Whether expecting a binary response\n * @property {boolean} [xhr=false] If `true`, forces the use of XMLHttpRequest\n */\n\n/**\n * Fetches the contents of a file.\n * @memberof util\n * @param {string} filename File path or url\n * @param {IFetchOptions} options Fetch options\n * @param {FetchCallback} callback Callback function\n * @returns {undefined}\n */\nfunction fetch(filename, options, callback) {\n    if (typeof options === \"function\") {\n        callback = options;\n        options = {};\n    } else if (!options)\n        options = {};\n\n    if (!callback)\n        return asPromise(fetch, this, filename, options); // eslint-disable-line no-invalid-this\n\n    // if a node-like filesystem is present, try it first but fall back to XHR if nothing is found.\n    if (!options.xhr && fs && fs.readFile)\n        return fs.readFile(filename, function fetchReadFileCallback(err, contents) {\n            return err && typeof XMLHttpRequest !== \"undefined\"\n                ? fetch.xhr(filename, options, callback)\n                : err\n                ? callback(err)\n                : callback(null, options.binary ? contents : contents.toString(\"utf8\"));\n        });\n\n    // use the XHR version otherwise.\n    return fetch.xhr(filename, options, callback);\n}\n\n/**\n * Fetches the contents of a file.\n * @name util.fetch\n * @function\n * @param {string} path File path or url\n * @param {FetchCallback} callback Callback function\n * @returns {undefined}\n * @variation 2\n */\n\n/**\n * Fetches the contents of a file.\n * @name util.fetch\n * @function\n * @param {string} path File path or url\n * @param {IFetchOptions} [options] Fetch options\n * @returns {Promise<string|Uint8Array>} Promise\n * @variation 3\n */\n\n/**/\nfetch.xhr = function fetch_xhr(filename, options, callback) {\n    var xhr = new XMLHttpRequest();\n    xhr.onreadystatechange /* works everywhere */ = function fetchOnReadyStateChange() {\n\n        if (xhr.readyState !== 4)\n            return undefined;\n\n        // local cors security errors return status 0 / empty string, too. afaik this cannot be\n        // reliably distinguished from an actually empty file for security reasons. feel free\n        // to send a pull request if you are aware of a solution.\n        if (xhr.status !== 0 && xhr.status !== 200)\n            return callback(Error(\"status \" + xhr.status));\n\n        // if binary data is expected, make sure that some sort of array is returned, even if\n        // ArrayBuffers are not supported. the binary string fallback, however, is unsafe.\n        if (options.binary) {\n            var buffer = xhr.response;\n            if (!buffer) {\n                buffer = [];\n                for (var i = 0; i < xhr.responseText.length; ++i)\n                    buffer.push(xhr.responseText.charCodeAt(i) & 255);\n            }\n            return callback(null, typeof Uint8Array !== \"undefined\" ? new Uint8Array(buffer) : buffer);\n        }\n        return callback(null, xhr.responseText);\n    };\n\n    if (options.binary) {\n        // ref: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Sending_and_Receiving_Binary_Data#Receiving_binary_data_in_older_browsers\n        if (\"overrideMimeType\" in xhr)\n            xhr.overrideMimeType(\"text/plain; charset=x-user-defined\");\n        xhr.responseType = \"arraybuffer\";\n    }\n\n    xhr.open(\"GET\", filename);\n    xhr.send();\n};\n","\"use strict\";\n\n/**\n * A minimal path module to resolve Unix, Windows and URL paths alike.\n * @memberof util\n * @namespace\n */\nvar path = exports;\n\nvar urlRe = /^[a-zA-Z][a-zA-Z0-9+.-]+:\\/\\//;\n\nfunction normalizeUrl(path) {\n    if (typeof URL === \"undefined\" || !urlRe.test(path))\n        return null;\n    try {\n        return new URL(path).href;\n    } catch (e) {\n        return null;\n    }\n}\n\nfunction resolveUrl(originPath, includePath) {\n    if (typeof URL === \"undefined\" || !urlRe.test(originPath) || urlRe.test(includePath))\n        return null;\n    try {\n        return new URL(includePath, originPath).href;\n    } catch (e) {\n        return null;\n    }\n}\n\nvar isAbsolute =\n/**\n * Tests if the specified path is absolute.\n * @param {string} path Path to test\n * @returns {boolean} `true` if path is absolute\n */\npath.isAbsolute = function isAbsolute(path) {\n    return /^(?:\\/|\\w+:|\\\\\\\\\\w+)/.test(path);\n};\n\nvar normalize =\n/**\n * Normalizes the specified path.\n * @param {string} path Path to normalize\n * @returns {string} Normalized path\n */\npath.normalize = function normalize(path) {\n    var normalizedUrl = normalizeUrl(path);\n    if (normalizedUrl)\n        return normalizedUrl;\n    var firstTwoCharacters = path.substring(0,2);\n    var uncPrefix = \"\";\n    if (firstTwoCharacters === \"\\\\\\\\\") {\n        uncPrefix = firstTwoCharacters;\n        path = path.substring(2);\n    }\n\n    path = path.replace(/\\\\/g, \"/\")\n               .replace(/\\/{2,}/g, \"/\");\n    var parts    = path.split(\"/\"),\n        absolute = isAbsolute(path),\n        prefix   = \"\";\n    if (absolute)\n        prefix = parts.shift() + \"/\";\n    for (var i = 0; i < parts.length;) {\n        if (parts[i] === \"..\") {\n            if (i > 0 && parts[i - 1] !== \"..\")\n                parts.splice(--i, 2);\n            else if (absolute)\n                parts.splice(i, 1);\n            else\n                ++i;\n        } else if (parts[i] === \".\")\n            parts.splice(i, 1);\n        else\n            ++i;\n    }\n    return uncPrefix + prefix + parts.join(\"/\");\n};\n\n/**\n * Resolves the specified include path against the specified origin path.\n * @param {string} originPath Path to the origin file\n * @param {string} includePath Include path relative to origin path\n * @param {boolean} [alreadyNormalized=false] `true` if both paths are already known to be normalized\n * @returns {string} Path to the include file\n */\npath.resolve = function resolve(originPath, includePath, alreadyNormalized) {\n    var resolvedUrl = resolveUrl(originPath, includePath);\n    if (resolvedUrl)\n        return resolvedUrl;\n    if (!alreadyNormalized)\n        includePath = normalize(includePath); // path or absolute url\n    if (isAbsolute(includePath))\n        return includePath;\n    if (!alreadyNormalized)\n        originPath = normalize(originPath);\n    return (originPath = originPath.replace(/(?:\\/|^)[^/]+$/, \"\")).length ? normalize(originPath + \"/\" + includePath) : includePath;\n};\n","\"use strict\";\nmodule.exports = Namespace;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\nNamespace.prototype = Object.create(ReflectionObject.prototype, {\n    constructor: {\n        value: Namespace,\n        writable: true,\n        enumerable: false,\n        configurable: true\n    }\n});\nNamespace.className = \"Namespace\";\n\nvar Field    = require(\"./field\"),\n    util     = require(\"./util\"),\n    OneOf    = require(\"./oneof\");\n\nvar Type,    // cyclic\n    Service,\n    Enum;\n\n/**\n * Constructs a new namespace instance.\n * @name Namespace\n * @classdesc Reflected namespace.\n * @extends NamespaceBase\n * @constructor\n * @param {string} name Namespace name\n * @param {Object.<string,*>} [options] Declared options\n */\n\n/**\n * Constructs a namespace from JSON.\n * @memberof Namespace\n * @function\n * @param {string} name Namespace name\n * @param {Object.<string,*>} json JSON object\n * @param {number} [depth] Current nesting depth, defaults to `0`\n * @returns {Namespace} Created namespace\n * @throws {TypeError} If arguments are invalid\n */\nNamespace.fromJSON = function fromJSON(name, json, depth) {\n    if (depth === undefined)\n        depth = 0;\n    if (depth > util.recursionLimit)\n        throw Error(\"max depth exceeded\");\n    return new Namespace(name, json.options).addJSON(json.nested, depth);\n};\n\n/**\n * Converts an array of reflection objects to JSON.\n * @memberof Namespace\n * @param {ReflectionObject[]} array Object array\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {Object.<string,*>|undefined} JSON object or `undefined` when array is empty\n */\nfunction arrayToJSON(array, toJSONOptions) {\n    if (!(array && array.length))\n        return undefined;\n    var obj = {};\n    for (var i = 0; i < array.length; ++i)\n        obj[array[i].name] = array[i].toJSON(toJSONOptions);\n    return obj;\n}\n\nNamespace.arrayToJSON = arrayToJSON;\n\n/**\n * Tests if the specified id is reserved.\n * @param {Array.<number[]|string>|undefined} reserved Array of reserved ranges and names\n * @param {number} id Id to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nNamespace.isReservedId = function isReservedId(reserved, id) {\n    if (reserved)\n        for (var i = 0; i < reserved.length; ++i)\n            if (typeof reserved[i] !== \"string\" && reserved[i][0] <= id && reserved[i][1] >= id)\n                return true;\n    return false;\n};\n\n/**\n * Tests if the specified name is reserved.\n * @param {Array.<number[]|string>|undefined} reserved Array of reserved ranges and names\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nNamespace.isReservedName = function isReservedName(reserved, name) {\n    if (reserved)\n        for (var i = 0; i < reserved.length; ++i)\n            if (reserved[i] === name)\n                return true;\n    return false;\n};\n\n/**\n * Not an actual constructor. Use {@link Namespace} instead.\n * @classdesc Base class of all reflection objects containing nested objects. This is not an actual class but here for the sake of having consistent type definitions.\n * @exports NamespaceBase\n * @extends ReflectionObject\n * @abstract\n * @constructor\n * @param {string} name Namespace name\n * @param {Object.<string,*>} [options] Declared options\n * @see {@link Namespace}\n */\nfunction Namespace(name, options) {\n    ReflectionObject.call(this, name, options);\n\n    /**\n     * Nested objects by name.\n     * @type {Object.<string,ReflectionObject>|undefined}\n     */\n    this.nested = undefined; // toJSON\n\n    /**\n     * Cached nested objects as an array.\n     * @type {ReflectionObject[]|null}\n     * @private\n     */\n    this._nestedArray = null;\n\n    /**\n     * Cache lookup calls for any objects contains anywhere under this namespace.\n     * This drastically speeds up resolve for large cross-linked protos where the same\n     * types are looked up repeatedly.\n     * @type {Object.<string,ReflectionObject|null>}\n     * @private\n     */\n    this._lookupCache = Object.create(null);\n\n    /**\n     * Whether or not objects contained in this namespace need feature resolution.\n     * @type {boolean}\n     * @protected\n     */\n    this._needsRecursiveFeatureResolution = true;\n\n    /**\n     * Whether or not objects contained in this namespace need a resolve.\n     * @type {boolean}\n     * @protected\n     */\n    this._needsRecursiveResolve = true;\n}\n\nfunction clearCache(namespace) {\n    namespace._nestedArray = null;\n    namespace._lookupCache = Object.create(null);\n\n    // Also clear parent caches, since they include nested lookups.\n    var parent = namespace;\n    while(parent = parent.parent) {\n        parent._lookupCache = Object.create(null);\n    }\n    return namespace;\n}\n\n/**\n * Nested objects of this namespace as an array for iteration.\n * @name NamespaceBase#nestedArray\n * @type {ReflectionObject[]}\n * @readonly\n */\nObject.defineProperty(Namespace.prototype, \"nestedArray\", {\n    get: function() {\n        return this._nestedArray || (this._nestedArray = util.toArray(this.nested));\n    }\n});\n\n/**\n * Namespace descriptor.\n * @interface INamespace\n * @property {Object.<string,*>} [options] Namespace options\n * @property {Object.<string,AnyNestedObject>} [nested] Nested object descriptors\n */\n\n/**\n * Any extension field descriptor.\n * @typedef AnyExtensionField\n * @type {IExtensionField|IExtensionMapField}\n */\n\n/**\n * Any nested object descriptor.\n * @typedef AnyNestedObject\n * @type {IEnum|IType|IService|AnyExtensionField|INamespace|IOneOf}\n */\n\n/**\n * Converts this namespace to a namespace descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {INamespace} Namespace descriptor\n */\nNamespace.prototype.toJSON = function toJSON(toJSONOptions) {\n    return util.toObject([\n        \"options\" , this.options,\n        \"nested\"  , arrayToJSON(this.nestedArray, toJSONOptions)\n    ]);\n};\n\n/**\n * Adds nested objects to this namespace from nested object descriptors.\n * @param {Object.<string,AnyNestedObject>} nestedJson Any nested object descriptors\n * @param {number} [depth] Current nesting depth, defaults to `0`\n * @returns {Namespace} `this`\n */\nNamespace.prototype.addJSON = function addJSON(nestedJson, depth) {\n    if (depth === undefined)\n        depth = 0;\n    if (depth > util.recursionLimit)\n        throw Error(\"max depth exceeded\");\n    var ns = this;\n    /* istanbul ignore else */\n    if (nestedJson) {\n        for (var names = Object.keys(nestedJson), i = 0, nested; i < names.length; ++i) {\n            nested = nestedJson[names[i]];\n            ns.add( // most to least likely\n                ( nested.fields !== undefined\n                ? Type.fromJSON\n                : nested.values !== undefined\n                ? Enum.fromJSON\n                : nested.methods !== undefined\n                ? Service.fromJSON\n                : nested.id !== undefined\n                ? Field.fromJSON\n                : Namespace.fromJSON )(names[i], nested, depth + 1)\n            );\n        }\n    }\n    return this;\n};\n\n/**\n * Gets the nested object of the specified name.\n * @param {string} name Nested object name\n * @returns {ReflectionObject|null} The reflection object or `null` if it doesn't exist\n */\nNamespace.prototype.get = function get(name) {\n    return this.nested && Object.prototype.hasOwnProperty.call(this.nested, name)\n        ? this.nested[name]\n        : null;\n};\n\n/**\n * Gets the values of the nested {@link Enum|enum} of the specified name.\n * This methods differs from {@link Namespace#get|get} in that it returns an enum's values directly and throws instead of returning `null`.\n * @param {string} name Nested enum name\n * @returns {Object.<string,number>} Enum values\n * @throws {Error} If there is no such enum\n */\nNamespace.prototype.getEnum = function getEnum(name) {\n    if (this.nested && Object.prototype.hasOwnProperty.call(this.nested, name) && this.nested[name] instanceof Enum)\n        return this.nested[name].values;\n    throw Error(\"no such enum: \" + name);\n};\n\n/**\n * Adds a nested object to this namespace.\n * @param {ReflectionObject} object Nested object to add\n * @returns {Namespace} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If there is already a nested object with this name\n */\nNamespace.prototype.add = function add(object) {\n\n    if (!(object instanceof Field && object.extend !== undefined || object instanceof Type  || object instanceof OneOf || object instanceof Enum || object instanceof Service || object instanceof Namespace))\n        throw TypeError(\"object must be a valid nested object\");\n\n    if (object.name === \"__proto__\")\n        return this;\n\n    if (!this.nested)\n        this.nested = {};\n    else {\n        var prev = this.get(object.name);\n        if (prev) {\n            if (prev instanceof Namespace && object instanceof Namespace && !(prev instanceof Type || prev instanceof Service)) {\n                // replace plain namespace but keep existing nested elements and options\n                var nested = prev.nestedArray;\n                for (var i = 0; i < nested.length; ++i)\n                    object.add(nested[i]);\n                this.remove(prev);\n                if (!this.nested)\n                    this.nested = {};\n                object.setOptions(prev.options, true);\n\n            } else\n                throw Error(\"duplicate name '\" + object.name + \"' in \" + this);\n        }\n    }\n    this.nested[object.name] = object;\n\n    if (!(this instanceof Type || this instanceof Service || this instanceof Enum || this instanceof Field)) {\n        // This is a package or a root namespace.\n        if (!object._edition) {\n            // Make sure that some edition is set if it hasn't already been specified.\n            object._edition = object._defaultEdition;\n        }\n    }\n\n    this._needsRecursiveFeatureResolution = true;\n    this._needsRecursiveResolve = true;\n\n    // Also clear parent caches, since they need to recurse down.\n    var parent = this;\n    while(parent = parent.parent) {\n        parent._needsRecursiveFeatureResolution = true;\n        parent._needsRecursiveResolve = true;\n    }\n\n    object.onAdd(this);\n    return clearCache(this);\n};\n\n/**\n * Removes a nested object from this namespace.\n * @param {ReflectionObject} object Nested object to remove\n * @returns {Namespace} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If `object` is not a member of this namespace\n */\nNamespace.prototype.remove = function remove(object) {\n\n    if (!(object instanceof ReflectionObject))\n        throw TypeError(\"object must be a ReflectionObject\");\n    if (object.parent !== this)\n        throw Error(object + \" is not a member of \" + this);\n\n    if (!util.remove(this.nested, object, object.name))\n        throw Error(object + \" is not a member of \" + this);\n    if (!Object.keys(this.nested).length)\n        this.nested = undefined;\n\n    object.onRemove(this);\n    return clearCache(this);\n};\n\n/**\n * Defines additial namespaces within this one if not yet existing.\n * @param {string|string[]} path Path to create\n * @param {*} [json] Nested types to create from JSON\n * @returns {Namespace} Pointer to the last namespace created or `this` if path is empty\n */\nNamespace.prototype.define = function define(path, json) {\n\n    if (util.isString(path))\n        path = path.split(\".\");\n    else if (!Array.isArray(path))\n        throw TypeError(\"illegal path\");\n    if (path && path.length && path[0] === \"\")\n        throw Error(\"path must be relative\");\n    if (path.length > util.recursionLimit)\n        throw Error(\"max depth exceeded\");\n\n    var ptr = this;\n    while (path.length > 0) {\n        var part = path.shift();\n        if (ptr.nested && ptr.nested[part]) {\n            ptr = ptr.nested[part];\n            if (!(ptr instanceof Namespace))\n                throw Error(\"path conflicts with non-namespace objects\");\n        } else\n            ptr.add(ptr = new Namespace(part));\n    }\n    if (json)\n        ptr.addJSON(json);\n    return ptr;\n};\n\n/**\n * Resolves this namespace's and all its nested objects' type references. Useful to validate a reflection tree, but comes at a cost.\n * @returns {Namespace} `this`\n */\nNamespace.prototype.resolveAll = function resolveAll() {\n    if (!this._needsRecursiveResolve) return this;\n\n    if (this._needsRecursiveFeatureResolution)\n        this._resolveFeaturesRecursive(this._edition);\n\n    var nested = this.nestedArray, i = 0;\n    this.resolve();\n    while (i < nested.length)\n        if (nested[i] instanceof Namespace)\n            nested[i++].resolveAll();\n        else\n            nested[i++].resolve();\n    this._needsRecursiveResolve = false;\n    return this;\n};\n\n/**\n * @override\n */\nNamespace.prototype._resolveFeaturesRecursive = function _resolveFeaturesRecursive(edition) {\n    if (!this._needsRecursiveFeatureResolution) return this;\n    this._needsRecursiveFeatureResolution = false;\n\n    edition = this._edition || edition;\n\n    ReflectionObject.prototype._resolveFeaturesRecursive.call(this, edition);\n    this.nestedArray.forEach(nested => {\n        nested._resolveFeaturesRecursive(edition);\n    });\n    return this;\n};\n\n/**\n * Recursively looks up the reflection object matching the specified path in the scope of this namespace.\n * @param {string|string[]} path Path to look up\n * @param {*|Array.<*>} filterTypes Filter types, any combination of the constructors of `protobuf.Type`, `protobuf.Enum`, `protobuf.Service` etc.\n * @param {boolean} [parentAlreadyChecked=false] If known, whether the parent has already been checked\n * @returns {ReflectionObject|null} Looked up object or `null` if none could be found\n */\nNamespace.prototype.lookup = function lookup(path, filterTypes, parentAlreadyChecked) {\n    /* istanbul ignore next */\n    if (typeof filterTypes === \"boolean\") {\n        parentAlreadyChecked = filterTypes;\n        filterTypes = undefined;\n    } else if (filterTypes && !Array.isArray(filterTypes))\n        filterTypes = [ filterTypes ];\n\n    if (util.isString(path) && path.length) {\n        if (path === \".\")\n            return this.root;\n        path = path.split(\".\");\n    } else if (!path.length)\n        return this;\n\n    var flatPath = path.join(\".\");\n\n    // Start at root if path is absolute\n    if (path[0] === \"\")\n        return this.root.lookup(path.slice(1), filterTypes);\n\n    // Lookup at this namespace and below\n    var found = this._lookupImpl(path, flatPath);\n    if (found && (!filterTypes || filterTypes.indexOf(found.constructor) > -1)) {\n        return found;\n    }\n\n    // Fall back to respective absolute path once relative scope has been checked (non-standard)\n    found = this.root._fullyQualifiedObjects && this.root._fullyQualifiedObjects[\".\" + flatPath];\n    if (found && (!filterTypes || filterTypes.indexOf(found.constructor) > -1)) {\n        return found;\n    }\n\n    if (parentAlreadyChecked)\n        return null;\n\n    // If there hasn't been a match, walk up the tree and look more broadly\n    var current = this;\n    while (current.parent) {\n        found = current.parent._lookupImpl(path, flatPath);\n        if (found && (!filterTypes || filterTypes.indexOf(found.constructor) > -1)) {\n            return found;\n        }\n        current = current.parent;\n    }\n    return null;\n};\n\n/**\n * Internal helper for lookup that handles searching just at this namespace and below along with caching.\n * @param {string[]} path Path to look up\n * @param {string} flatPath Flattened version of the path to use as a cache key\n * @returns {ReflectionObject|null} Looked up object or `null` if none could be found\n * @private\n */\nNamespace.prototype._lookupImpl = function lookup(path, flatPath) {\n    if(Object.prototype.hasOwnProperty.call(this._lookupCache, flatPath)) {\n        return this._lookupCache[flatPath];\n    }\n\n    // Test if the first part matches any nested object, and if so, traverse if path contains more\n    var found = this.get(path[0]);\n    var exact = null;\n    if (found) {\n        if (path.length === 1) {\n            exact = found;\n        } else if (found instanceof Namespace) {\n            path = path.slice(1);\n            exact = found._lookupImpl(path, path.join(\".\"));\n        }\n\n    // Otherwise try each nested namespace\n    } else {\n        for (var i = 0; i < this.nestedArray.length; ++i)\n            if (this._nestedArray[i] instanceof Namespace && (found = this._nestedArray[i]._lookupImpl(path, flatPath))) {\n                exact = found;\n                break;\n            }\n    }\n\n    // Set this even when null, so that when we walk up the tree we can quickly bail on repeated checks back down.\n    this._lookupCache[flatPath] = exact;\n    return exact;\n};\n\n/**\n * Looks up the reflection object at the specified path, relative to this namespace.\n * @name NamespaceBase#lookup\n * @function\n * @param {string|string[]} path Path to look up\n * @param {boolean} [parentAlreadyChecked=false] Whether the parent has already been checked\n * @returns {ReflectionObject|null} Looked up object or `null` if none could be found\n * @variation 2\n */\n// lookup(path: string, [parentAlreadyChecked: boolean])\n\n/**\n * Looks up the {@link Type|type} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Type} Looked up type\n * @throws {Error} If `path` does not point to a type\n */\nNamespace.prototype.lookupType = function lookupType(path) {\n    var found = this.lookup(path, [ Type ]);\n    if (!found)\n        throw Error(\"no such type: \" + path);\n    return found;\n};\n\n/**\n * Looks up the values of the {@link Enum|enum} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Enum} Looked up enum\n * @throws {Error} If `path` does not point to an enum\n */\nNamespace.prototype.lookupEnum = function lookupEnum(path) {\n    var found = this.lookup(path, [ Enum ]);\n    if (!found)\n        throw Error(\"no such Enum '\" + path + \"' in \" + this);\n    return found;\n};\n\n/**\n * Looks up the {@link Type|type} or {@link Enum|enum} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Type} Looked up type or enum\n * @throws {Error} If `path` does not point to a type or enum\n */\nNamespace.prototype.lookupTypeOrEnum = function lookupTypeOrEnum(path) {\n    var found = this.lookup(path, [ Type, Enum ]);\n    if (!found)\n        throw Error(\"no such Type or Enum '\" + path + \"' in \" + this);\n    return found;\n};\n\n/**\n * Looks up the {@link Service|service} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Service} Looked up service\n * @throws {Error} If `path` does not point to a service\n */\nNamespace.prototype.lookupService = function lookupService(path) {\n    var found = this.lookup(path, [ Service ]);\n    if (!found)\n        throw Error(\"no such Service '\" + path + \"' in \" + this);\n    return found;\n};\n\n// Sets up cyclic dependencies (called in index-light)\nNamespace._configure = function(Type_, Service_, Enum_) {\n    Type    = Type_;\n    Service = Service_;\n    Enum    = Enum_;\n};\n","\"use strict\";\nmodule.exports = MapField;\n\n// extends Field\nvar Field = require(\"./field\");\nMapField.prototype = Object.create(Field.prototype, {\n    constructor: {\n        value: MapField,\n        writable: true,\n        enumerable: false,\n        configurable: true\n    }\n});\nMapField.className = \"MapField\";\n\nvar types   = require(\"./types\"),\n    util    = require(\"./util\");\n\n/**\n * Constructs a new map field instance.\n * @classdesc Reflected map field.\n * @extends FieldBase\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {number} id Unique id within its namespace\n * @param {string} keyType Key type\n * @param {string} type Value type\n * @param {Object.<string,*>} [options] Declared options\n * @param {string} [comment] Comment associated with this field\n */\nfunction MapField(name, id, keyType, type, options, comment) {\n    Field.call(this, name, id, type, undefined, undefined, options, comment);\n\n    /* istanbul ignore if */\n    if (!util.isString(keyType))\n        throw TypeError(\"keyType must be a string\");\n\n    /**\n     * Key type.\n     * @type {string}\n     */\n    this.keyType = keyType; // toJSON, marker\n\n    /**\n     * Resolved key type if not a basic type.\n     * @type {ReflectionObject|null}\n     */\n    this.resolvedKeyType = null;\n\n    // Overrides Field#map\n    this.map = true;\n}\n\n/**\n * Map field descriptor.\n * @interface IMapField\n * @extends {IField}\n * @property {string} keyType Key type\n */\n\n/**\n * Extension map field descriptor.\n * @interface IExtensionMapField\n * @extends IMapField\n * @property {string} extend Extended type\n */\n\n/**\n * Constructs a map field from a map field descriptor.\n * @param {string} name Field name\n * @param {IMapField} json Map field descriptor\n * @returns {MapField} Created map field\n * @throws {TypeError} If arguments are invalid\n */\nMapField.fromJSON = function fromJSON(name, json) {\n    var field = new MapField(name, json.id, json.keyType, json.type, json.options, json.comment);\n    if (json.protoName)\n        field.protoName = json.protoName;\n    if (json.jsonName !== undefined)\n        field.jsonName = json.jsonName;\n    else if (json.options && json.options.json_name !== undefined)\n        field.jsonName = json.options.json_name;\n    return field;\n};\n\n/**\n * Converts this map field to a map field descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IMapField} Map field descriptor\n */\nMapField.prototype.toJSON = function toJSON(toJSONOptions) {\n    var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n    return util.toObject([\n        \"keyType\"      , this.keyType,\n        \"type\"         , this.type,\n        \"id\"           , this.id,\n        \"extend\"       , this.extend,\n        \"protoName\"    , this.protoName !== this.name ? this.protoName : undefined,\n        \"jsonName\"     , this.jsonName !== util.jsonName(this.protoName || this.name) ? this.jsonName : undefined,\n        \"options\"      , this.options,\n        \"comment\"      , keepComments ? this.comment : undefined\n    ]);\n};\n\n/**\n * @override\n */\nMapField.prototype.resolve = function resolve() {\n    if (this.resolved)\n        return this;\n\n    // Besides a value type, map fields have a key type that may be \"any scalar type except for floating point types and bytes\"\n    if (types.mapKey[this.keyType] === undefined)\n        throw Error(\"invalid key type: \" + this.keyType);\n\n    return Field.prototype.resolve.call(this);\n};\n\n/**\n * Map field decorator (TypeScript).\n * @name MapField.d\n * @function\n * @param {number} fieldId Field id\n * @param {\"int32\"|\"uint32\"|\"sint32\"|\"fixed32\"|\"sfixed32\"|\"int64\"|\"uint64\"|\"sint64\"|\"fixed64\"|\"sfixed64\"|\"bool\"|\"string\"} fieldKeyType Field key type\n * @param {\"double\"|\"float\"|\"int32\"|\"uint32\"|\"sint32\"|\"fixed32\"|\"sfixed32\"|\"int64\"|\"uint64\"|\"sint64\"|\"fixed64\"|\"sfixed64\"|\"bool\"|\"string\"|\"bytes\"|Object|Constructor<{}>} fieldValueType Field value type\n * @returns {FieldDecorator} Decorator function\n * @template T extends { [key: string]: number | Long | string | boolean | Uint8Array | Buffer | number[] | Message<{}> }\n * @deprecated Legacy TypeScript decorator support. Will be removed in a future release.\n */\nMapField.d = function decorateMapField(fieldId, fieldKeyType, fieldValueType) {\n\n    // submessage value: decorate the submessage and use its name as the type\n    if (typeof fieldValueType === \"function\")\n        fieldValueType = util.decorateType(fieldValueType).name;\n\n    // enum reference value: create a reflected copy of the enum and keep reuseing it\n    else if (fieldValueType && typeof fieldValueType === \"object\")\n        fieldValueType = util.decorateEnum(fieldValueType).name;\n\n    return function mapFieldDecorator(prototype, fieldName) {\n        util.decorateType(prototype.constructor)\n            .add(new MapField(fieldName, fieldId, fieldKeyType, fieldValueType));\n    };\n};\n","\"use strict\";\nmodule.exports = Method;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\nMethod.prototype = Object.create(ReflectionObject.prototype, {\n    constructor: {\n        value: Method,\n        writable: true,\n        enumerable: false,\n        configurable: true\n    }\n});\nMethod.className = \"Method\";\n\nvar util = require(\"./util\");\n\n/**\n * Constructs a new service method instance.\n * @classdesc Reflected service method.\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Method name\n * @param {string|undefined} type Method type, usually `\"rpc\"`\n * @param {string} requestType Request message type\n * @param {string} responseType Response message type\n * @param {boolean|Object.<string,*>} [requestStream] Whether the request is streamed\n * @param {boolean|Object.<string,*>} [responseStream] Whether the response is streamed\n * @param {Object.<string,*>} [options] Declared options\n * @param {string} [comment] The comment for this method\n * @param {Array.<Object.<string,*>>} [parsedOptions] Declared options, properly parsed into objects\n */\nfunction Method(name, type, requestType, responseType, requestStream, responseStream, options, comment, parsedOptions) {\n\n    /* istanbul ignore next */\n    if (util.isObject(requestStream)) {\n        options = requestStream;\n        requestStream = responseStream = undefined;\n    } else if (util.isObject(responseStream)) {\n        options = responseStream;\n        responseStream = undefined;\n    }\n\n    /* istanbul ignore if */\n    if (!(type === undefined || util.isString(type)))\n        throw TypeError(\"type must be a string\");\n\n    /* istanbul ignore if */\n    if (!util.isString(requestType))\n        throw TypeError(\"requestType must be a string\");\n\n    /* istanbul ignore if */\n    if (!util.isString(responseType))\n        throw TypeError(\"responseType must be a string\");\n\n    ReflectionObject.call(this, name, options);\n\n    /**\n     * Method type.\n     * @type {string}\n     */\n    this.type = type || \"rpc\"; // toJSON\n\n    /**\n     * Request type.\n     * @type {string}\n     */\n    this.requestType = requestType; // toJSON, marker\n\n    /**\n     * Whether requests are streamed or not.\n     * @type {true|undefined}\n     */\n    this.requestStream = requestStream ? true : undefined; // toJSON\n\n    /**\n     * Response type.\n     * @type {string}\n     */\n    this.responseType = responseType; // toJSON\n\n    /**\n     * Whether responses are streamed or not.\n     * @type {true|undefined}\n     */\n    this.responseStream = responseStream ? true : undefined; // toJSON\n\n    /**\n     * gRPC-style method path.\n     * @type {string}\n     */\n    this.path = \"/\" + this.name;\n\n    /**\n     * Resolved request type.\n     * @type {Type|null}\n     */\n    this.resolvedRequestType = null;\n\n    /**\n     * Resolved response type.\n     * @type {Type|null}\n     */\n    this.resolvedResponseType = null;\n\n    /**\n     * Comment for this method\n     * @type {string|null}\n     */\n    this.comment = comment;\n\n    /**\n     * Options properly parsed into objects\n     * @type {Array.<Object.<string,*>>|undefined}\n     */\n    this.parsedOptions = parsedOptions;\n}\n\n/**\n * Method descriptor.\n * @interface IMethod\n * @property {string} [type=\"rpc\"] Method type\n * @property {string} requestType Request type\n * @property {string} responseType Response type\n * @property {boolean} [requestStream=false] Whether requests are streamed\n * @property {boolean} [responseStream=false] Whether responses are streamed\n * @property {Object.<string,*>} [options] Method options\n * @property {string|null} [comment] Method comment\n * @property {Array.<Object.<string,*>>} [parsedOptions] Method options properly parsed into objects\n */\n\n/**\n * Constructs a method from a method descriptor.\n * @param {string} name Method name\n * @param {IMethod} json Method descriptor\n * @returns {Method} Created method\n * @throws {TypeError} If arguments are invalid\n */\nMethod.fromJSON = function fromJSON(name, json) {\n    return new Method(name, json.type, json.requestType, json.responseType, json.requestStream, json.responseStream, json.options, json.comment, json.parsedOptions);\n};\n\n/**\n * Converts this method to a method descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IMethod} Method descriptor\n */\nMethod.prototype.toJSON = function toJSON(toJSONOptions) {\n    var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n    return util.toObject([\n        \"type\"           , this.type !== \"rpc\" && /* istanbul ignore next */ this.type || undefined,\n        \"requestType\"    , this.requestType,\n        \"requestStream\"  , this.requestStream,\n        \"responseType\"   , this.responseType,\n        \"responseStream\" , this.responseStream,\n        \"options\"        , this.options,\n        \"comment\"        , keepComments ? this.comment : undefined,\n        \"parsedOptions\"  , this.parsedOptions,\n    ]);\n};\n\n/**\n * @override\n */\nMethod.prototype.resolve = function resolve() {\n\n    /* istanbul ignore if */\n    if (this.resolved)\n        return this;\n\n    if (this.parent) {\n        var serviceName = this.parent.fullName;\n        if (serviceName.charAt(0) === \".\")\n            serviceName = serviceName.substring(1);\n        this.path = \"/\" + serviceName + \"/\" + this.name;\n    } else\n        this.path = \"/\" + this.name;\n\n    this.resolvedRequestType = this.parent.lookupType(this.requestType);\n    this.resolvedResponseType = this.parent.lookupType(this.responseType);\n\n    return ReflectionObject.prototype.resolve.call(this);\n};\n","\"use strict\";\nmodule.exports = Service;\n\n// extends Namespace\nvar Namespace = require(\"./namespace\");\nService.prototype = Object.create(Namespace.prototype, {\n    constructor: {\n        value: Service,\n        writable: true,\n        enumerable: false,\n        configurable: true\n    }\n});\nService.className = \"Service\";\n\nvar Method = require(\"./method\"),\n    util   = require(\"./util\"),\n    rpc    = require(\"./rpc\");\n\n/**\n * Constructs a new service instance.\n * @classdesc Reflected service.\n * @extends NamespaceBase\n * @constructor\n * @param {string} name Service name\n * @param {Object.<string,*>} [options] Service options\n * @throws {TypeError} If arguments are invalid\n */\nfunction Service(name, options) {\n    Namespace.call(this, name, options);\n\n    /**\n     * Service methods.\n     * @type {Object.<string,Method>}\n     */\n    this.methods = {}; // toJSON, marker\n\n    /**\n     * Cached methods as an array.\n     * @type {Method[]|null}\n     * @private\n     */\n    this._methodsArray = null;\n}\n\n/**\n * Service descriptor.\n * @interface IService\n * @extends INamespace\n * @property {string} [edition] Edition\n * @property {Object.<string,IMethod>} methods Method descriptors\n * @property {string|null} [comment] Service comment\n */\n\n/**\n * Constructs a service from a service descriptor.\n * @param {string} name Service name\n * @param {IService} json Service descriptor\n * @param {number} [depth] Current nesting depth, defaults to `0`\n * @returns {Service} Created service\n * @throws {TypeError} If arguments are invalid\n */\nService.fromJSON = function fromJSON(name, json, depth) {\n    if (depth === undefined)\n        depth = 0;\n    if (depth > util.recursionLimit)\n        throw Error(\"max depth exceeded\");\n    var service = new Service(name, json.options);\n    /* istanbul ignore else */\n    if (json.methods)\n        for (var names = Object.keys(json.methods), i = 0; i < names.length; ++i)\n            service.add(Method.fromJSON(names[i], json.methods[names[i]]));\n    if (json.nested)\n        service.addJSON(json.nested, depth);\n    if (json.edition)\n        service._edition = json.edition;\n    service.comment = json.comment;\n    service._defaultEdition = \"proto3\";  // For backwards-compatibility.\n    return service;\n};\n\n/**\n * Converts this service to a service descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IService} Service descriptor\n */\nService.prototype.toJSON = function toJSON(toJSONOptions) {\n    var inherited = Namespace.prototype.toJSON.call(this, toJSONOptions);\n    var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n    return util.toObject([\n        \"edition\" , this._editionToJSON(),\n        \"options\" , inherited && inherited.options || undefined,\n        \"methods\" , Namespace.arrayToJSON(this.methodsArray, toJSONOptions) || /* istanbul ignore next */ {},\n        \"nested\"  , inherited && inherited.nested || undefined,\n        \"comment\" , keepComments ? this.comment : undefined\n    ]);\n};\n\n/**\n * Methods of this service as an array for iteration.\n * @name Service#methodsArray\n * @type {Method[]}\n * @readonly\n */\nObject.defineProperty(Service.prototype, \"methodsArray\", {\n    get: function() {\n        return this._methodsArray || (this._methodsArray = util.toArray(this.methods));\n    }\n});\n\nfunction clearCache(service) {\n    service._methodsArray = null;\n    return service;\n}\n\n/**\n * @override\n */\nService.prototype.get = function get(name) {\n    return Object.prototype.hasOwnProperty.call(this.methods, name)\n        ? this.methods[name]\n        : Namespace.prototype.get.call(this, name);\n};\n\n/**\n * @override\n */\nService.prototype.resolveAll = function resolveAll() {\n    if (!this._needsRecursiveResolve) return this;\n\n    Namespace.prototype.resolve.call(this);\n    var methods = this.methodsArray;\n    for (var i = 0; i < methods.length; ++i)\n        methods[i].resolve();\n    return this;\n};\n\n/**\n * @override\n */\nService.prototype._resolveFeaturesRecursive = function _resolveFeaturesRecursive(edition) {\n    if (!this._needsRecursiveFeatureResolution) return this;\n\n    edition = this._edition || edition;\n\n    Namespace.prototype._resolveFeaturesRecursive.call(this, edition);\n    this.methodsArray.forEach(method => {\n        method._resolveFeaturesRecursive(edition);\n    });\n    return this;\n};\n\n/**\n * @override\n */\nService.prototype.add = function add(object) {\n    /* istanbul ignore if */\n    if (this.get(object.name))\n        throw Error(\"duplicate name '\" + object.name + \"' in \" + this);\n\n    if (object instanceof Method) {\n        if (object.name === \"__proto__\")\n            return this;\n        this.methods[object.name] = object;\n        object.parent = this;\n        return clearCache(this);\n    }\n    return Namespace.prototype.add.call(this, object);\n};\n\n/**\n * @override\n */\nService.prototype.remove = function remove(object) {\n    if (object instanceof Method) {\n\n        /* istanbul ignore if */\n        if (this.methods[object.name] !== object)\n            throw Error(object + \" is not a member of \" + this);\n\n        delete this.methods[object.name];\n        object.parent = null;\n        return clearCache(this);\n    }\n    return Namespace.prototype.remove.call(this, object);\n};\n\n/**\n * Creates a runtime service using the specified rpc implementation.\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n * @returns {rpc.Service} RPC service. Useful where requests and/or responses are streamed.\n */\nService.prototype.create = function create(rpcImpl, requestDelimited, responseDelimited) {\n    var rpcService = new rpc.Service(rpcImpl, requestDelimited, responseDelimited);\n    for (var i = 0, method; i < /* initializes */ this.methodsArray.length; ++i) {\n        var methodName = util.lcFirst((method = this._methodsArray[i]).resolve().name).replace(/[^$\\w_]/g, \"\");\n        rpcService[methodName] = (function(method, requestType, responseType) {\n            return function rpcMethod(request, callback) {\n                return rpc.Service.prototype.rpcCall.call(this, method, requestType, responseType, request, callback);\n            };\n        })(method, method.resolvedRequestType.ctor, method.resolvedResponseType.ctor);\n    }\n    return rpcService;\n};\n","\"use strict\";\nmodule.exports = Message;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new message instance.\n * @classdesc Abstract runtime message.\n * @constructor\n * @param {Properties<T>} [properties] Properties to set\n * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n * @template T extends object = object\n */\nfunction Message(properties) {\n    // not used internally\n    if (properties)\n        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n            if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                this[keys[i]] = properties[keys[i]];\n}\n\n/**\n * Reference to the reflected type.\n * @name Message.$type\n * @type {Type}\n * @readonly\n */\n\n/**\n * Reference to the reflected type.\n * @name Message#$type\n * @type {Type}\n * @readonly\n */\n\n/**\n * Creates a new message of this type using the specified properties.\n * @param {Object.<string,*>} [properties] Properties to set\n * @returns {T} Message instance\n * @template T extends Message<T>\n * @this Constructor<T>\n */\nMessage.create = function create(properties) {\n    return this.$type.create(properties);\n};\n\n/**\n * Encodes a message of this type.\n * @param {T|Object.<string,*>} message Message to encode\n * @param {Writer} [writer] Writer to use\n * @returns {Writer} Writer\n * @template T extends Message<T>\n * @this Constructor<T>\n */\nMessage.encode = function encode(message, writer) {\n    return this.$type.encode(message, writer);\n};\n\n/**\n * Encodes a message of this type preceeded by its length as a varint.\n * @param {T|Object.<string,*>} message Message to encode\n * @param {Writer} [writer] Writer to use\n * @returns {Writer} Writer\n * @template T extends Message<T>\n * @this Constructor<T>\n */\nMessage.encodeDelimited = function encodeDelimited(message, writer) {\n    return this.$type.encodeDelimited(message, writer);\n};\n\n/**\n * Decodes a message of this type.\n * @name Message.decode\n * @function\n * @param {Reader|Uint8Array} reader Reader or buffer to decode\n * @returns {T} Decoded message\n * @template T extends Message<T>\n * @this Constructor<T>\n */\nMessage.decode = function decode(reader) {\n    return this.$type.decode(reader);\n};\n\n/**\n * Decodes a message of this type preceeded by its length as a varint.\n * @name Message.decodeDelimited\n * @function\n * @param {Reader|Uint8Array} reader Reader or buffer to decode\n * @returns {T} Decoded message\n * @template T extends Message<T>\n * @this Constructor<T>\n */\nMessage.decodeDelimited = function decodeDelimited(reader) {\n    return this.$type.decodeDelimited(reader);\n};\n\n/**\n * Verifies a message of this type.\n * @name Message.verify\n * @function\n * @param {Object.<string,*>} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\nMessage.verify = function verify(message) {\n    return this.$type.verify(message);\n};\n\n/**\n * Creates a new message of this type from a plain object. Also converts values to their respective internal types.\n * @param {Object.<string,*>} object Plain object\n * @returns {T} Message instance\n * @template T extends Message<T>\n * @this Constructor<T>\n */\nMessage.fromObject = function fromObject(object) {\n    return this.$type.fromObject(object);\n};\n\n/**\n * Creates a plain object from a message of this type. Also converts values to other types if specified.\n * @param {T} message Message instance\n * @param {IConversionOptions} [options] Conversion options\n * @returns {Object.<string,*>} Plain object\n * @template T extends Message<T>\n * @this Constructor<T>\n */\nMessage.toObject = function toObject(message, options) {\n    return this.$type.toObject(message, options);\n};\n\n/**\n * Converts this message to JSON.\n * @returns {Object.<string,*>} JSON object\n */\nMessage.prototype.toJSON = function toJSON() {\n    return this.$type.toObject(this, util.toJSONOptions);\n};\n","\"use strict\";\nmodule.exports = decoder;\n\nvar Enum    = require(\"./enum\"),\n    types   = require(\"./types\"),\n    util    = require(\"./util\");\n\nfunction missing(field) {\n    return \"missing required '\" + field.name + \"'\";\n}\n\nfunction stringMethod(field) {\n    return field._features.utf8_validation === \"VERIFY\" ? \"stringVerify\" : \"string\";\n}\n\nfunction genPreserveUnknown(gen, ref) {\n    /* eslint-disable no-unexpected-multiline */\n    return gen\n        (\"if(!r.discardUnknown){\")\n            (\"util.makeProp(m,\\\"$unknowns\\\",false);\")\n            (\"(m.$unknowns||(m.$unknowns=[])).push(%s)\", ref)\n        (\"}\");\n    /* eslint-enable no-unexpected-multiline */\n}\n\n/**\n * Generates a decoder specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nfunction decoder(mtype) {\n    /* eslint-disable no-unexpected-multiline */\n    var hasMapField = false,\n        needsValueVar = false,\n        i = 0;\n    for (; i < mtype.fieldsArray.length; ++i) {\n        var pfield = mtype._fieldsArray[i];\n        if (pfield.map)\n            hasMapField = true;\n        if (pfield.resolvedType instanceof Enum || !pfield.repeated && !pfield.map && !pfield.hasPresence)\n            needsValueVar = true;\n    }\n    var gen = util.codegen([\"r\", \"l\", \"z\", \"q\", \"g\"])\n    (\"if(!(r instanceof Reader))\")\n        (\"r=Reader.create(r)\")\n    (\"if(q===undefined)q=0\")\n    (\"if(q>Reader.recursionLimit)\")\n        (\"throw Error(\\\"max depth exceeded\\\")\")\n    (\"var c=l===undefined?r.len:r.pos+l,m=g||new C\" + (hasMapField ? \",k,v\" : needsValueVar ? \",v\" : \"\"))\n    (\"while(r.pos<c){\")\n        (\"var s=r.pos\")\n        (\"var t=r.tag()\")\n        (\"if(t===z){\")\n            (\"z=undefined\")\n            (\"break\")\n        (\"}\");\n    if (mtype.fieldsArray.length) gen\n        (\"var u=t&7\")\n        (\"switch(t>>>=3){\");\n    for (i = 0; i < /* initializes */ mtype.fieldsArray.length; ++i) {\n        var field  = mtype._fieldsArray[i].resolve(),\n            type   = field.resolvedType instanceof Enum ? \"int32\" : field.type,\n            ref    = \"m\" + util.safeProp(field.name),\n            closed = field.resolvedType instanceof Enum && field.resolvedType._features.enum_type === \"CLOSED\";\n\n        // Map fields\n        if (field.map) {\n            gen\n            (\"case %i:{\", field.id)\n                (\"if(u!==2)\")\n                    (\"break\");\n            if (!closed) gen\n                (\"if(%s===util.emptyObject)\", ref)\n                    (\"%s={}\", ref);\n            gen\n                (\"var c2=r.uint32()+r.pos\");\n\n            if (types.defaults[field.keyType] !== undefined) gen\n                (\"k=%j\", types.defaults[field.keyType]);\n            else gen\n                (\"k=null\");\n\n            if (types.long[type] !== undefined) gen\n                (\"v=util.Long?util.Long.fromNumber(0,%j):0\", type === \"uint64\" || type === \"fixed64\");\n            else if (types.defaults[type] !== undefined) gen\n                (\"v=%j\", types.defaults[type]);\n            else gen\n                (\"v=null\");\n\n            gen\n                (\"while(r.pos<c2){\")\n                    (\"var t2=r.tag()\")\n                    (\"u=t2&7\")\n                    (\"switch(t2>>>=3){\")\n                        (\"case 1:\")\n                            (\"if(u!==%i)\", types.mapKey[field.keyType])\n                                (\"break\")\n                            (\"k=r.%s()\", field.keyType === \"string\" ? stringMethod(field) : field.keyType)\n                            (\"continue\")\n                        (\"case 2:\")\n                            (\"if(u!==%i)\", types.basic[type] === undefined ? 2 : types.basic[type])\n                                (\"break\");\n\n            if (types.basic[type] === undefined) gen\n                            (\"v=types[%i].decode(r,r.uint32(),undefined,q+1,v)\", i); // can't be groups\n            else gen\n                            (\"v=r.%s()\", type === \"string\" ? stringMethod(field) : type);\n\n            gen\n                            (\"continue\")\n                    (\"}\")\n                    (\"r.skipType(u,q,t2)\")\n                (\"}\");\n\n            if (closed) { gen\n                (\"if(types[%i].valuesById[v]===undefined){\", i);\n                    genPreserveUnknown(gen, \"r.raw(s,r.pos)\")\n                    (\"continue\")\n                (\"}\")\n                (\"if(%s===util.emptyObject)\", ref)\n                    (\"%s={}\", ref);\n            }\n\n            var val = types.basic[type] === undefined ? \"v||new types[\" + i + \"].ctor\" : \"v\";\n            if (types.long[field.keyType] !== undefined) gen\n                (\"%s[typeof k===\\\"object\\\"?util.longToHash(k):k]=%s\", ref, val);\n            else {\n                if (field.keyType === \"string\") gen\n                (\"if(k===\\\"__proto__\\\")\")\n                    (\"util.makeProp(%s,k)\", ref);\n                gen\n                (\"%s[k]=%s\", ref, val);\n            }\n\n        // Repeated fields\n        } else if (field.repeated) { gen\n            (\"case %i:\", field.id)\n            (\"{\");\n\n            // Packable (always check for forward and backward compatiblity)\n            if (types.packed[type] !== undefined) {\n                gen\n                (\"if(u===2){\");\n                if (closed) {\n                    gen\n                    (\"var c2=r.uint32()+r.pos\")\n                    (\"while(r.pos<c2){\")\n                        (\"s=r.pos\")\n                        (\"v=r.%s()\", type)\n                        (\"if(types[%i].valuesById[v]!==undefined){\", i)\n                            (\"if(!(%s&&%s.length))\", ref, ref)\n                                (\"%s=[]\", ref)\n                            (\"%s.push(v)\", ref)\n                        (\"}else\");\n                            genPreserveUnknown(gen, \"util.rawField(\" + field.id + \",0,r.raw(s,r.pos))\")\n                    (\"}\");\n                } else gen\n                    (\"if(!(%s&&%s.length))\", ref, ref)\n                        (\"%s=[]\", ref)\n                    (\"r.%ss(%s)\", type, ref);\n                gen\n                    (\"continue\")\n                (\"}\");\n            }\n\n            // Non-packed\n            gen\n                (\"if(u!==%i)\", types.basic[type] === undefined ? field.delimited ? 3 : 2 : types.basic[type])\n                    (\"break\");\n            if (!closed) gen\n                (\"if(!(%s&&%s.length))\", ref, ref)\n                    (\"%s=[]\", ref);\n            if (types.basic[type] === undefined) {\n                if (field.delimited) gen\n                    (\"%s.push(types[%i].decode(r,undefined,%i,q+1))\", ref, i, field.id * 8 + 4);\n                else gen\n                    (\"%s.push(types[%i].decode(r,r.uint32(),undefined,q+1))\", ref, i);\n            } else if (closed) { gen\n                    (\"v=r.%s()\", type)\n                    (\"if(types[%i].valuesById[v]!==undefined){\", i)\n                        (\"if(!(%s&&%s.length))\", ref, ref)\n                            (\"%s=[]\", ref)\n                        (\"%s.push(v)\", ref)\n                    (\"}else\");\n                        genPreserveUnknown(gen, \"r.raw(s,r.pos)\");\n            } else gen\n                    (\"%s.push(r.%s())\", ref, type === \"string\" ? stringMethod(field) : type);\n\n        // Non-repeated\n        } else if (types.basic[type] === undefined) {\n            gen\n            (\"case %i:{\", field.id)\n                (\"if(u!==%i)\", field.delimited ? 3 : 2)\n                    (\"break\");\n            if (field.delimited) gen\n                (\"%s=types[%i].decode(r,undefined,%i,q+1,%s)\", ref, i, field.id * 8 + 4, ref);\n            else gen\n                (\"%s=types[%i].decode(r,r.uint32(),undefined,q+1,%s)\", ref, i, ref);\n        }\n        else if (field.hasPresence) {\n            gen\n            (\"case %i:{\", field.id)\n                (\"if(u!==%i)\", types.basic[type])\n                    (\"break\");\n            if (closed) { gen\n                (\"v=r.%s()\", type)\n                (\"if(types[%i].valuesById[v]!==undefined){\", i)\n                    (\"%s=v\", ref);\n                if (field.partOf) gen\n                    (\"m%s=%j\", util.safeProp(field.partOf.name), field.name);\n                gen\n                (\"}else\");\n                    genPreserveUnknown(gen, \"r.raw(s,r.pos)\");\n            } else gen\n                (\"%s=r.%s()\", ref, type === \"string\" ? stringMethod(field) : type);\n        } else {\n            gen\n            (\"case %i:{\", field.id)\n                (\"if(u!==%i)\", types.basic[type])\n                    (\"break\");\n            if (closed) { gen\n                (\"v=r.%s()\", type)\n                (\"if(types[%i].valuesById[v]!==undefined){\", i)\n                    (\"if(v!==%j)\", field.typeDefault)\n                        (\"%s=v\", ref)\n                    (\"else\")\n                        (\"delete %s\", ref)\n                (\"}else{\");\n                    genPreserveUnknown(gen, \"r.raw(s,r.pos)\")\n                (\"}\");\n            } else {\n                if (field.resolvedType instanceof Enum && field.typeDefault !== 0) gen\n                    // TODO: Protoc rejects open enums whose first value is not zero.\n                    // We should do the same, but for v8 this would be a regression.\n                    (\"if((v=r.%s())!==%j)\", type, field.typeDefault);\n                else if (type === \"string\") gen\n                    (\"if((v=r.%s()).length)\", stringMethod(field));\n                else if (type === \"bytes\") gen\n                    (\"if((v=r.%s()).length)\", type);\n                else if (types.long[type] !== undefined) gen\n                    (\"if(typeof(v=r.%s())===\\\"object\\\"?v.low||v.high:v!==0)\", type);\n                else if (type === \"double\" || type === \"float\") gen\n                    (\"if(!Object.is(v=r.%s(),0))\", type);\n                else gen\n                    (\"if(v=r.%s())\", type);\n                gen\n                        (\"%s=v\", ref)\n                    (\"else\")\n                        (\"delete %s\", ref); // rare/odd case: later default clears earlier non-default\n            }\n        }\n        if (field.partOf && !closed) gen\n                (\"m%s=%j\", util.safeProp(field.partOf.name), field.name);\n        gen\n                (\"continue\")\n            (\"}\");\n    }\n    if (i) gen\n        (\"}\");\n    // Unknown fields\n    gen\n        (\"r.skipType(%s,q,t)\", i ? \"u\" : \"t&7\");\n    genPreserveUnknown(gen, \"r.raw(s,r.pos)\")\n    (\"}\")\n    (\"if(z!==undefined)\")\n        (\"throw Error(\\\"missing end group\\\")\");\n\n    // Field presence\n    for (i = 0; i < mtype._fieldsArray.length; ++i) {\n        var rfield = mtype._fieldsArray[i];\n        if (rfield.required) gen\n    (\"if(!Object.hasOwnProperty.call(m,%j))\", rfield.name)\n        (\"throw util.ProtocolError(%j,{instance:m})\", missing(rfield));\n    }\n\n    return gen\n    (\"return m\");\n    /* eslint-enable no-unexpected-multiline */\n}\n","\"use strict\";\nmodule.exports = verifier;\n\nvar Enum      = require(\"./enum\"),\n    util      = require(\"./util\");\n\nfunction invalid(field, expected) {\n    return field.name + \": \" + expected + (field.repeated && expected !== \"array\" ? \"[]\" : field.map && expected !== \"object\" ? \"{k:\"+field.keyType+\"}\" : \"\") + \" expected\";\n}\n\n/**\n * Generates a partial value verifier.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {number} fieldIndex Field index\n * @param {string} ref Variable reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genVerifyValue(gen, field, fieldIndex, ref) {\n    /* eslint-disable no-unexpected-multiline */\n    var resolvedType = field.resolvedType;\n    if (resolvedType) {\n        if (resolvedType instanceof Enum) {\n            if (resolvedType._features.enum_type === \"CLOSED\") { gen\n                (\"switch(%s){\", ref)\n                    (\"default:\")\n                        (\"return%j\", invalid(field, \"enum value\"));\n                for (var keys = Object.keys(resolvedType.values), j = 0; j < keys.length; ++j) gen\n                    (\"case %i:\", resolvedType.values[keys[j]]);\n                gen\n                        (\"break\")\n                (\"}\");\n            } else gen\n                (\"if(typeof %s!==\\\"number\\\"||(%s|0)!==%s)\", ref, ref, ref)\n                    (\"return%j\", invalid(field, \"enum value\"));\n        } else {\n            gen\n            (\"{\")\n                (\"var e=types[%i].verify(%s,q+1);\", fieldIndex, ref)\n                (\"if(e)\")\n                    (\"return%j+e\", field.name + \".\")\n            (\"}\");\n        }\n    } else {\n        switch (field.type) {\n            case \"int32\":\n            case \"uint32\":\n            case \"sint32\":\n            case \"fixed32\":\n            case \"sfixed32\": gen\n                (\"if(!util.isInteger(%s))\", ref)\n                    (\"return%j\", invalid(field, \"integer\"));\n                break;\n            case \"int64\":\n            case \"uint64\":\n            case \"sint64\":\n            case \"fixed64\":\n            case \"sfixed64\": gen\n                (\"if(!util.isInteger(%s)&&!(%s&&util.isInteger(%s.low)&&util.isInteger(%s.high)))\", ref, ref, ref, ref)\n                    (\"return%j\", invalid(field, \"integer|Long\"));\n                break;\n            case \"float\":\n            case \"double\": gen\n                (\"if(typeof %s!==\\\"number\\\")\", ref)\n                    (\"return%j\", invalid(field, \"number\"));\n                break;\n            case \"bool\": gen\n                (\"if(typeof %s!==\\\"boolean\\\")\", ref)\n                    (\"return%j\", invalid(field, \"boolean\"));\n                break;\n            case \"string\": gen\n                (\"if(!util.isString(%s))\", ref)\n                    (\"return%j\", invalid(field, \"string\"));\n                break;\n            case \"bytes\": gen\n                (\"if(!(%s&&typeof %s.length===\\\"number\\\"||util.isString(%s)))\", ref, ref, ref)\n                    (\"return%j\", invalid(field, \"buffer\"));\n                break;\n        }\n    }\n    return gen;\n    /* eslint-enable no-unexpected-multiline */\n}\n\n/**\n * Generates a partial key verifier.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {string} ref Variable reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genVerifyKey(gen, field, ref) {\n    /* eslint-disable no-unexpected-multiline */\n    switch (field.keyType) {\n        case \"int32\":\n        case \"uint32\":\n        case \"sint32\":\n        case \"fixed32\":\n        case \"sfixed32\": gen\n            (\"if(!util.key32Re.test(%s))\", ref)\n                (\"return%j\", invalid(field, \"integer key\"));\n            break;\n        case \"int64\":\n        case \"uint64\":\n        case \"sint64\":\n        case \"fixed64\":\n        case \"sfixed64\": gen\n            (\"if(!util.key64Re.test(%s))\", ref) // see comment above: x is ok, d is not\n                (\"return%j\", invalid(field, \"integer|Long key\"));\n            break;\n        case \"bool\": gen\n            (\"if(!util.key2Re.test(%s))\", ref)\n                (\"return%j\", invalid(field, \"boolean key\"));\n            break;\n    }\n    return gen;\n    /* eslint-enable no-unexpected-multiline */\n}\n\n/**\n * Generates a verifier specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nfunction verifier(mtype) {\n    /* eslint-disable no-unexpected-multiline */\n\n    var gen = util.codegen([\"m\", \"q\"])\n    (\"if(typeof m!==\\\"object\\\"||m===null)\")\n        (\"return%j\", \"object expected\")\n    (\"if(q===undefined)q=0\")\n    (\"if(q>util.recursionLimit)\")\n        (\"return%j\", \"max depth exceeded\");\n    var oneofs = mtype.oneofsArray,\n        seenFirstField = {};\n    if (oneofs.length) gen\n    (\"var p={}\");\n\n    for (var i = 0; i < /* initializes */ mtype.fieldsArray.length; ++i) {\n        var field = mtype._fieldsArray[i].resolve(),\n            ref   = \"m\" + util.safeProp(field.name);\n\n        if (field.optional) gen\n        (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j)){\", ref, field.name); // !== undefined && !== null\n\n        // map fields\n        if (field.map) { gen\n            (\"if(!util.isObject(%s))\", ref)\n                (\"return%j\", invalid(field, \"object\"))\n            (\"var k=Object.keys(%s)\", ref)\n            (\"for(var i=0;i<k.length;++i){\");\n                genVerifyKey(gen, field, \"k[i]\");\n                genVerifyValue(gen, field, i, ref + \"[k[i]]\")\n            (\"}\");\n\n        // repeated fields\n        } else if (field.repeated) { gen\n            (\"if(!Array.isArray(%s))\", ref)\n                (\"return%j\", invalid(field, \"array\"))\n            (\"for(var i=0;i<%s.length;++i){\", ref);\n                genVerifyValue(gen, field, i, ref + \"[i]\")\n            (\"}\");\n\n        // required or present fields\n        } else {\n            if (field.partOf) {\n                var oneofProp = util.safeProp(field.partOf.name);\n                if (seenFirstField[field.partOf.name] === 1) gen\n            (\"if(p%s===1)\", oneofProp)\n                (\"return%j\", field.partOf.name + \": multiple values\");\n                seenFirstField[field.partOf.name] = 1;\n                gen\n            (\"p%s=1\", oneofProp);\n            }\n            genVerifyValue(gen, field, i, ref);\n        }\n        if (field.optional) gen\n        (\"}\");\n    }\n    return gen\n    (\"return null\");\n    /* eslint-enable no-unexpected-multiline */\n}\n","\"use strict\";\n/**\n * Runtime message from/to plain object converters.\n * @namespace\n */\nvar converter = exports;\n\nvar Enum  = require(\"./enum\"),\n    types = require(\"./types\"),\n    util  = require(\"./util\");\n\n/**\n * Generates a partial value fromObject conveter.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {number} fieldIndex Field index\n * @param {string} prop Property reference\n * @param {string} [dstProp] Repeated destination property reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genValuePartial_fromObject(gen, field, fieldIndex, prop, dstProp) {\n    /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n    if (field.resolvedType) {\n        if (field.resolvedType instanceof Enum) {\n            var dst = dstProp\n                ? \"m\" + dstProp + \"[m\" + dstProp + \".length]\"\n                : \"m\" + prop;\n            gen\n            (\"switch(d%s){\", prop);\n            for (var values = field.resolvedType.values, keys = Object.keys(values), i = 0; i < keys.length; ++i) { gen\n                (\"case%j:\", keys[i])\n                (\"case %i:\", values[keys[i]])\n                    (\"%s=%j\", dst, values[keys[i]])\n                    (\"break\");\n            }\n            gen\n                (\"default:\");\n            if (field.resolvedType._features.enum_type !== \"CLOSED\") {\n                gen\n                    (\"if(typeof d%s===\\\"number\\\"&&(d%s|0)===d%s)\", prop, prop, prop)\n                        (\"%s=d%s\", dst, prop);\n            }\n            gen\n            (\"}\");\n        } else gen\n            (\"if(!util.isObject(d%s))\", prop)\n                (\"throw TypeError(%j)\", field.fullName + \": object expected\")\n            (\"m%s=types[%i].fromObject(d%s,q+1)\", prop, fieldIndex, prop);\n    } else {\n        var isUnsigned = false;\n        switch (field.type) {\n            case \"double\":\n            case \"float\": gen\n                (\"m%s=Number(d%s)\", prop, prop); // also catches \"NaN\", \"Infinity\"\n                break;\n            case \"uint32\":\n            case \"fixed32\": gen\n                (\"m%s=d%s>>>0\", prop, prop);\n                break;\n            case \"int32\":\n            case \"sint32\":\n            case \"sfixed32\": gen\n                (\"m%s=d%s|0\", prop, prop);\n                break;\n            case \"uint64\":\n            case \"fixed64\":\n                isUnsigned = true;\n                // eslint-disable-next-line no-fallthrough\n            case \"int64\":\n            case \"sint64\":\n            case \"sfixed64\": gen\n                (\"if(util.Long)\")\n                    (\"m%s=util.Long.fromValue(d%s,%j)\", prop, prop, isUnsigned)\n                (\"else if(typeof d%s===\\\"string\\\")\", prop)\n                    (\"m%s=parseInt(d%s,10)\", prop, prop)\n                (\"else if(typeof d%s===\\\"number\\\")\", prop)\n                    (\"m%s=d%s\", prop, prop)\n                (\"else if(typeof d%s===\\\"object\\\")\", prop)\n                    (\"m%s=new util.LongBits(d%s.low>>>0,d%s.high>>>0).toNumber(%s)\", prop, prop, prop, isUnsigned ? \"true\" : \"\");\n                break;\n            case \"bytes\": gen\n                (\"if(typeof d%s===\\\"string\\\")\", prop)\n                    (\"util.base64.decode(d%s,m%s=util.newBuffer(util.base64.length(d%s)),0)\", prop, prop, prop)\n                (\"else if(d%s.length>=0)\", prop)\n                    (\"m%s=d%s\", prop, prop);\n                break;\n            case \"string\": gen\n                (\"m%s=String(d%s)\", prop, prop);\n                break;\n            case \"bool\": gen\n                (\"m%s=Boolean(d%s)\", prop, prop);\n                break;\n            /* default: gen\n                (\"m%s=d%s\", prop, prop);\n                break; */\n        }\n    }\n    return gen;\n    /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n}\n\n/**\n * Generates a plain object to runtime message converter specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nconverter.fromObject = function fromObject(mtype) {\n    /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n    var fields = mtype.fieldsArray;\n    var gen = util.codegen([\"d\", \"q\"])\n    (\"if(d instanceof C)\")\n        (\"return d\")\n    (\"if(!util.isObject(d))\")\n        (\"throw TypeError(%j)\", mtype.fullName + \": object expected\")\n    (\"if(q===undefined)q=0\")\n    (\"if(q>util.recursionLimit)\")\n        (\"throw Error(\\\"max depth exceeded\\\")\");\n    if (!fields.length) return gen\n    (\"return new C\");\n    gen\n    (\"var m=new C\");\n    for (var i = 0; i < fields.length; ++i) {\n        var field  = fields[i].resolve(),\n            prop   = util.safeProp(field.name),\n            implicitPresence = !field.hasPresence && !field.repeated && !field.map\n                && (field.resolvedType instanceof Enum || types.basic[field.type] !== undefined);\n\n        // Map fields\n        if (field.map) { gen\n    (\"if(d%s){\", prop)\n        (\"if(!util.isObject(d%s))\", prop)\n            (\"throw TypeError(%j)\", field.fullName + \": object expected\")\n        (\"m%s={}\", prop)\n        (\"for(var ks=Object.keys(d%s),i=0;i<ks.length;++i){\", prop);\n            gen\n        (\"if(ks[i]===\\\"__proto__\\\")\")\n            (\"util.makeProp(m%s,ks[i])\", prop);\n            genValuePartial_fromObject(gen, field, /* not sorted */ i, prop + \"[ks[i]]\")\n        (\"}\")\n    (\"}\");\n\n        // Repeated fields\n        } else if (field.repeated) { gen\n    (\"if(d%s){\", prop)\n        (\"if(!Array.isArray(d%s))\", prop)\n            (\"throw TypeError(%j)\", field.fullName + \": array expected\");\n            if (field.resolvedType instanceof Enum) gen\n        (\"m%s=[]\", prop);\n            else gen\n        (\"m%s=Array(d%s.length)\", prop, prop);\n            gen\n        (\"for(var i=0;i<d%s.length;++i){\", prop);\n            genValuePartial_fromObject(gen, field, /* not sorted */ i, prop + \"[i]\", field.resolvedType instanceof Enum ? prop : undefined)\n        (\"}\")\n    (\"}\");\n\n        // Non-repeated fields\n        } else {\n            if (!(field.resolvedType instanceof Enum)) gen // no need to test for null/undefined if an enum (uses switch)\n    (\"if(d%s!=null){\", prop); // !== undefined && !== null\n            if (implicitPresence) {\n                if (field.resolvedType instanceof Enum) gen\n    (\"if(d%s!==%j&&(typeof d%s!==\\\"string\\\"||types[%i].values[d%s]!==%j)){\", prop, field.typeDefault, prop, i, prop, field.typeDefault);\n                else if (field.type === \"string\") gen\n    (\"if(typeof d%s!==\\\"string\\\"||d%s.length){\", prop, prop);\n                else if (field.type === \"bytes\") gen\n    (\"if(d%s.length){\", prop);\n                else if (field.type === \"bool\") gen\n    (\"if(d%s){\", prop);\n                else if (field.type === \"double\" || field.type === \"float\") gen\n    (\"if(!Object.is(Number(d%s),0)){\", prop);\n                else if (types.long[field.type] !== undefined) gen\n    (\"if(typeof d%s===\\\"object\\\"?d%s.low||d%s.high:Number(d%s)!==0){\", prop, prop, prop, prop);\n                else gen\n    (\"if(Number(d%s)!==0){\", prop);\n            }\n        genValuePartial_fromObject(gen, field, /* not sorted */ i, prop);\n            if (implicitPresence) gen\n    (\"}\");\n            if (!(field.resolvedType instanceof Enum)) gen\n    (\"}\");\n        }\n    } return gen\n    (\"return m\");\n    /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n};\n\n/**\n * Generates a partial value toObject converter.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {number} fieldIndex Field index\n * @param {string} dstProp Destination property reference\n * @param {string} [srcProp] Source property reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genValuePartial_toObject(gen, field, fieldIndex, dstProp, srcProp) {\n    /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n    if (!srcProp)\n        srcProp = dstProp;\n    if (field.resolvedType) {\n        if (field.resolvedType instanceof Enum) gen\n            (\"d%s=o.enums===String?(types[%i].values[m%s]===undefined?m%s:types[%i].values[m%s]):m%s\", dstProp, fieldIndex, srcProp, srcProp, fieldIndex, srcProp, srcProp);\n        else gen\n            (\"d%s=types[%i].toObject(m%s,o,q+1)\", dstProp, fieldIndex, srcProp);\n    } else {\n        var isUnsigned = false;\n        switch (field.type) {\n            case \"double\":\n            case \"float\": gen\n            (\"d%s=o.json&&!isFinite(m%s)?String(m%s):m%s\", dstProp, srcProp, srcProp, srcProp);\n                break;\n            case \"uint64\":\n            case \"fixed64\":\n                isUnsigned = true;\n                // eslint-disable-next-line no-fallthrough\n            case \"int64\":\n            case \"sint64\":\n            case \"sfixed64\": gen\n            (\"if(typeof BigInt!==\\\"undefined\\\"&&o.longs===BigInt)\")\n                (\"d%s=typeof m%s===\\\"number\\\"?BigInt(m%s):util.Long.fromBits(m%s.low>>>0,m%s.high>>>0,%j).toBigInt()\", dstProp, srcProp, srcProp, srcProp, srcProp, isUnsigned)\n            (\"else if(typeof m%s===\\\"number\\\")\", srcProp)\n                (\"d%s=o.longs===String?String(m%s):m%s\", dstProp, srcProp, srcProp)\n            (\"else\") // Long-like\n                (\"d%s=o.longs===String?util.Long.prototype.toString.call(m%s):o.longs===Number?new util.LongBits(m%s.low>>>0,m%s.high>>>0).toNumber(%s):m%s\", dstProp, srcProp, srcProp, srcProp, isUnsigned ? \"true\": \"\", srcProp);\n                break;\n            case \"bytes\": gen\n            (\"d%s=o.bytes===String?util.base64.encode(m%s,0,m%s.length):o.bytes===Array?Array.prototype.slice.call(m%s):m%s\", dstProp, srcProp, srcProp, srcProp, srcProp);\n                break;\n            default: gen\n            (\"d%s=m%s\", dstProp, srcProp);\n                break;\n        }\n    }\n    return gen;\n    /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n}\n\n/**\n * Generates a runtime message to plain object converter specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nconverter.toObject = function toObject(mtype) {\n    /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n    var fields = mtype.fieldsArray.slice().sort(util.compareFieldsById);\n    if (!fields.length)\n        return util.codegen()(\"return {}\");\n    var gen = util.codegen([\"m\", \"o\", \"q\"])\n    (\"if(!o)\")\n        (\"o={}\")\n    (\"if(q===undefined)q=0\")\n    (\"if(q>util.recursionLimit)\")\n        (\"throw Error(\\\"max depth exceeded\\\")\")\n    (\"var d={}\");\n\n    var repeatedFields = [],\n        mapFields = [],\n        normalFields = [],\n        i = 0;\n    for (; i < fields.length; ++i)\n        if (!fields[i].partOf)\n            ( fields[i].resolve().repeated ? repeatedFields\n            : fields[i].map ? mapFields\n            : normalFields).push(fields[i]);\n\n    if (repeatedFields.length) { gen\n    (\"if(o.arrays||o.defaults){\");\n        for (i = 0; i < repeatedFields.length; ++i) gen\n        (\"d%s=[]\", util.safeProp(repeatedFields[i].name));\n        gen\n    (\"}\");\n    }\n\n    if (mapFields.length) { gen\n    (\"if(o.objects||o.defaults){\");\n        for (i = 0; i < mapFields.length; ++i) gen\n        (\"d%s={}\", util.safeProp(mapFields[i].name));\n        gen\n    (\"}\");\n    }\n\n    if (normalFields.length) { gen\n    (\"if(o.defaults){\");\n        for (i = 0; i < normalFields.length; ++i) {\n            var field = normalFields[i],\n                prop  = util.safeProp(field.name);\n            if (field.resolvedType instanceof Enum) gen\n        (\"d%s=o.enums===String?%j:%j\", prop, field.resolvedType.valuesById[field.typeDefault], field.typeDefault);\n            else if (field.long) gen\n        (\"if(util.Long){\")\n            (\"var n=new util.Long(%i,%i,%j)\", field.typeDefault.low, field.typeDefault.high, field.typeDefault.unsigned)\n            (\"d%s=o.longs===String?n.toString():o.longs===Number?n.toNumber():typeof BigInt!==\\\"undefined\\\"&&o.longs===BigInt?n.toBigInt():n\", prop)\n        (\"}else\")\n            (\"d%s=o.longs===String?%j:typeof BigInt!==\\\"undefined\\\"&&o.longs===BigInt?BigInt(%j):%i\", prop, field.typeDefault.toString(), field.typeDefault.toString(), field.typeDefault.toNumber());\n            else if (field.bytes) {\n                var arrayDefault = Array.prototype.slice.call(field.typeDefault);\n                gen\n        (\"if(o.bytes===String)d%s=%j\", prop, util.base64.encode(field.typeDefault, 0, field.typeDefault.length))\n        (\"else{\")\n            (\"d%s=%j\", prop, arrayDefault)\n            (\"if(o.bytes!==Array)d%s=util.newBuffer(d%s)\", prop, prop)\n        (\"}\");\n            } else if ((field.type === \"double\" || field.type === \"float\") && typeof field.typeDefault === \"number\"\n                    && (!isFinite(field.typeDefault) || Object.is(field.typeDefault, -0))) gen\n        (\"d%s=%f\", prop, field.typeDefault)\n        (\"if(o.json&&!isFinite(d%s))d%s=String(d%s)\", prop, prop, prop);\n            else gen\n        (\"d%s=%j\", prop, field.typeDefault); // also messages (=null)\n        } gen\n    (\"}\");\n    }\n    var hasKs2 = false;\n    for (i = 0; i < fields.length; ++i) {\n        var field = fields[i],\n            index = mtype._fieldsArray.indexOf(field),\n            prop  = util.safeProp(field.name);\n        if (field.map) {\n            if (!hasKs2) { hasKs2 = true; gen\n    (\"var ks2\");\n            } gen\n    (\"if(m%s&&(ks2=Object.keys(m%s)).length){\", prop, prop)\n        (\"d%s={}\", prop);\n            var longKey = types.long[field.keyType] !== undefined,\n                srcProp = prop + \"[ks2[j]]\";\n            gen\n        (\"for(var j=0;j<ks2.length;++j){\");\n            if (longKey) gen\n            (\"var k2=util.longFromKey(ks2[j],%j).toString()\", field.keyType === \"uint64\" || field.keyType === \"fixed64\");\n            gen\n        (\"if(ks2[j]===\\\"__proto__\\\")\")\n            (\"util.makeProp(d%s,ks2[j])\", prop);\n            genValuePartial_toObject(gen, field, /* sorted */ index, longKey ? prop + \"[k2]\" : srcProp, srcProp)\n        (\"}\");\n        } else if (field.repeated) { gen\n    (\"if(m%s&&m%s.length){\", prop, prop)\n        (\"d%s=Array(m%s.length)\", prop, prop)\n        (\"for(var j=0;j<m%s.length;++j){\", prop);\n            genValuePartial_toObject(gen, field, /* sorted */ index, prop + \"[j]\")\n        (\"}\");\n        } else { gen\n    (\"if(m%s!=null&&Object.hasOwnProperty.call(m,%j)){\", prop, field.name); // !== undefined && !== null\n        genValuePartial_toObject(gen, field, /* sorted */ index, prop);\n        if (field.partOf && !field.partOf.isProto3Optional) gen\n        (\"if(o.oneofs)\")\n            (\"d%s=%j\", util.safeProp(field.partOf.name), field.name);\n        }\n        gen\n    (\"}\");\n    }\n    return gen\n    (\"return d\");\n    /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n};\n","\"use strict\";\n\n/**\n * Wrappers for common types.\n * @type {Object.<string,IWrapper>}\n * @const\n */\nvar wrappers = exports;\n\nvar Message = require(\"./message\"),\n    util    = require(\"./util/minimal\");\n\n/**\n * From object converter part of an {@link IWrapper}.\n * @typedef WrapperFromObjectConverter\n * @type {function}\n * @param {Object.<string,*>} object Plain object\n * @returns {Message<{}>} Message instance\n * @this Type\n */\n\n/**\n * To object converter part of an {@link IWrapper}.\n * @typedef WrapperToObjectConverter\n * @type {function}\n * @param {Message<{}>} message Message instance\n * @param {IConversionOptions} [options] Conversion options\n * @returns {Object.<string,*>} Plain object\n * @this Type\n */\n\n/**\n * Common type wrapper part of {@link wrappers}.\n * @interface IWrapper\n * @property {WrapperFromObjectConverter} [fromObject] From object converter\n * @property {WrapperToObjectConverter} [toObject] To object converter\n */\n\n// Custom wrapper for Any\nwrappers[\".google.protobuf.Any\"] = {\n\n    fromObject: function(object, depth) {\n\n        // unwrap value type if mapped\n        if (object && object[\"@type\"]) {\n             // Only use fully qualified type name after the last '/'\n            var name = object[\"@type\"].substring(object[\"@type\"].lastIndexOf(\"/\") + 1);\n            var type = this.lookup(name, [ this.constructor ]);\n            /* istanbul ignore else */\n            if (type) {\n                // type_url does not accept leading \".\"\n                var type_url = object[\"@type\"].charAt(0) === \".\" ?\n                    object[\"@type\"].slice(1) : object[\"@type\"];\n                // type_url prefix is optional, but path seperator is required\n                if (type_url.indexOf(\"/\") === -1) {\n                    type_url = \"/\" + type_url;\n                }\n                return this.create({\n                    type_url: type_url,\n                    value: type.encode(type.fromObject(object, depth === undefined ? 1 : depth + 1)).finish()\n                });\n            }\n        }\n\n        return this.fromObject(object, depth);\n    },\n\n    toObject: function(message, options, depth) {\n        if (depth === undefined)\n            depth = 0;\n        if (depth > util.recursionLimit)\n            throw Error(\"max depth exceeded\");\n\n        // Default prefix\n        var googleApi = \"type.googleapis.com/\";\n        var prefix = \"\";\n        var name = \"\";\n        // decode value if requested and unmapped\n        if (options && options.json && message.type_url && message.value) {\n            // Only use fully qualified type name after the last '/'\n            name = message.type_url.substring(message.type_url.lastIndexOf(\"/\") + 1);\n            // Separate the prefix used\n            prefix = message.type_url.substring(0, message.type_url.lastIndexOf(\"/\") + 1);\n            var type = this.lookup(name, [ this.constructor ]);\n            /* istanbul ignore else */\n            if (type)\n                message = type.decode(message.value, undefined, undefined, depth + 1);\n        }\n\n        // wrap value if unmapped\n        if (!(message instanceof this.ctor) && message instanceof Message) {\n            var object = message.$type.toObject(message, options, depth + 1);\n            var messageName = message.$type.fullName[0] === \".\" ?\n                message.$type.fullName.slice(1) : message.$type.fullName;\n            // Default to type.googleapis.com prefix if no prefix is used\n            if (prefix === \"\") {\n                prefix = googleApi;\n            }\n            name = prefix + messageName;\n            object[\"@type\"] = name;\n            return object;\n        }\n\n        return this.toObject(message, options, depth);\n    }\n};\n","\"use strict\";\nmodule.exports = Type;\n\n// extends Namespace\nvar Namespace = require(\"./namespace\");\nType.prototype = Object.create(Namespace.prototype, {\n    constructor: {\n        value: Type,\n        writable: true,\n        enumerable: false,\n        configurable: true\n    }\n});\nType.className = \"Type\";\n\nvar Enum      = require(\"./enum\"),\n    OneOf     = require(\"./oneof\"),\n    Field     = require(\"./field\"),\n    MapField  = require(\"./mapfield\"),\n    Service   = require(\"./service\"),\n    Message   = require(\"./message\"),\n    Reader    = require(\"./reader\"),\n    Writer    = require(\"./writer\"),\n    util      = require(\"./util\"),\n    encoder   = require(\"./encoder\"),\n    decoder   = require(\"./decoder\"),\n    verifier  = require(\"./verifier\"),\n    converter = require(\"./converter\"),\n    wrappers  = require(\"./wrappers\");\n\n/**\n * Constructs a new reflected message type instance.\n * @classdesc Reflected message type.\n * @extends NamespaceBase\n * @constructor\n * @param {string} name Message name\n * @param {Object.<string,*>} [options] Declared options\n */\nfunction Type(name, options) {\n    name = name.replace(/\\W/g, \"\");\n    Namespace.call(this, name, options);\n\n    /**\n     * Message fields.\n     * @type {Object.<string,Field>}\n     */\n    this.fields = {};  // toJSON, marker\n\n    /**\n     * Oneofs declared within this namespace, if any.\n     * @type {Object.<string,OneOf>}\n     */\n    this.oneofs = undefined; // toJSON\n\n    /**\n     * Extension ranges, if any.\n     * @type {number[][]}\n     */\n    this.extensions = undefined; // toJSON\n\n    /**\n     * Reserved ranges, if any.\n     * @type {Array.<number[]|string>}\n     */\n    this.reserved = undefined; // toJSON\n\n    /*?\n     * Whether this type is a legacy group.\n     * @type {boolean|undefined}\n     */\n    this.group = undefined; // toJSON\n\n    /**\n     * Cached fields by id.\n     * @type {Object.<number,Field>|null}\n     * @private\n     */\n    this._fieldsById = null;\n\n    /**\n     * Cached fields as an array.\n     * @type {Field[]|null}\n     * @private\n     */\n    this._fieldsArray = null;\n\n    /**\n     * Cached oneofs as an array.\n     * @type {OneOf[]|null}\n     * @private\n     */\n    this._oneofsArray = null;\n\n    /**\n     * Cached constructor.\n     * @type {Constructor<{}>}\n     * @private\n     */\n    this._ctor = null;\n\n    /**\n     * Cached fields by JSON name.\n     * @type {Object.<string,Field>|null}\n     * @private\n     */\n    this._fieldsByJsonName = null; // used by ext/protojson\n}\n\nObject.defineProperties(Type.prototype, {\n\n    /**\n     * Message fields by id.\n     * @name Type#fieldsById\n     * @type {Object.<number,Field>}\n     * @readonly\n     */\n    fieldsById: {\n        get: function() {\n\n            /* istanbul ignore if */\n            if (this._fieldsById)\n                return this._fieldsById;\n\n            this._fieldsById = {};\n            for (var names = Object.keys(this.fields), i = 0; i < names.length; ++i) {\n                var field = this.fields[names[i]],\n                    id = field.id;\n\n                /* istanbul ignore if */\n                if (this._fieldsById[id])\n                    throw Error(\"duplicate id \" + id + \" in \" + this);\n\n                this._fieldsById[id] = field;\n            }\n            return this._fieldsById;\n        }\n    },\n\n    /**\n     * Fields of this message as an array for iteration.\n     * @name Type#fieldsArray\n     * @type {Field[]}\n     * @readonly\n     */\n    fieldsArray: {\n        get: function() {\n            return this._fieldsArray || (this._fieldsArray = util.toArray(this.fields));\n        }\n    },\n\n    /**\n     * Oneofs of this message as an array for iteration.\n     * @name Type#oneofsArray\n     * @type {OneOf[]}\n     * @readonly\n     */\n    oneofsArray: {\n        get: function() {\n            return this._oneofsArray || (this._oneofsArray = util.toArray(this.oneofs));\n        }\n    },\n\n    /**\n     * The registered constructor, if any registered, otherwise a generic constructor.\n     * Assigning a function replaces the internal constructor. If the function does not extend {@link Message} yet, its prototype will be setup accordingly and static methods will be populated. If it already extends {@link Message}, it will just replace the internal constructor.\n     * When assigning manually, add the type to its parent namespace/root first if fields reference other reflected types, because constructor setup resolves field defaults.\n     * @name Type#ctor\n     * @type {Constructor<{}>}\n     */\n    ctor: {\n        get: function() {\n            return this._ctor || (this.ctor = Type.generateConstructor(this)());\n        },\n        set: function(ctor) {\n\n            // Ensure proper prototype\n            var prototype = ctor.prototype;\n            if (!(prototype instanceof Message)) {\n                ctor.prototype = new Message();\n                Object.defineProperty(ctor.prototype, \"constructor\", {\n                    value: ctor,\n                    writable: true,\n                    enumerable: false,\n                    configurable: true\n                });\n                util.merge(ctor.prototype, prototype);\n            }\n\n            // Classes and messages reference their reflected type\n            ctor.$type = ctor.prototype.$type = this;\n\n            // Mix in static methods\n            util.merge(ctor, Message, true);\n\n            this._ctor = ctor;\n            delete this.decode;\n            delete this.fromObject;\n\n            // Messages have non-enumerable default values on their prototype\n            var i = 0;\n            for (var field; i < /* initializes */ this.fieldsArray.length; ++i) {\n                field = this._fieldsArray[i].resolve(); // ensures a proper value\n                ctor.prototype[field.name] = field.defaultValue;\n            }\n\n            // Messages have non-enumerable getters and setters for each virtual oneof field\n            var ctorProperties = {};\n            for (i = 0; i < /* initializes */ this.oneofsArray.length; ++i)\n                ctorProperties[this._oneofsArray[i].resolve().name] = {\n                    get: util.oneOfGetter(this._oneofsArray[i].oneof),\n                    set: util.oneOfSetter(this._oneofsArray[i].oneof)\n                };\n            if (i)\n                Object.defineProperties(ctor.prototype, ctorProperties);\n        }\n    }\n});\n\n/**\n * Generates a constructor function for the specified type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nType.generateConstructor = function generateConstructor(mtype) {\n    /* eslint-disable no-unexpected-multiline */\n    var gen = util.codegen([\"p\"]);\n    // explicitly initialize mutable object/array fields so that these aren't just inherited from the prototype\n    for (var i = 0, field; i < mtype.fieldsArray.length; ++i)\n        if ((field = mtype._fieldsArray[i]).map) gen\n            (\"this%s={}\", util.safeProp(field.name));\n        else if (field.repeated) gen\n            (\"this%s=[]\", util.safeProp(field.name));\n    return gen\n    (\"if(p)for(var ks=Object.keys(p),i=0;i<ks.length;++i)if(p[ks[i]]!=null&&ks[i]!==\\\"__proto__\\\")\") // omit undefined or null\n        (\"this[ks[i]]=p[ks[i]]\");\n    /* eslint-enable no-unexpected-multiline */\n};\n\nfunction clearCache(type) {\n    type._fieldsById = type._fieldsArray = type._oneofsArray = type._fieldsByJsonName = null;\n    delete type.encode;\n    delete type.decode;\n    delete type.verify;\n    return type;\n}\n\n/**\n * Message type descriptor.\n * @interface IType\n * @extends INamespace\n * @property {string} [edition] Edition\n * @property {Object.<string,IOneOf>} [oneofs] Oneof descriptors\n * @property {Object.<string,IField>} fields Field descriptors\n * @property {number[][]} [extensions] Extension ranges\n * @property {Array.<number[]|string>} [reserved] Reserved ranges\n * @property {boolean} [group=false] Whether a legacy group or not\n * @property {string|null} [comment] Message type comment\n */\n\n/**\n * Creates a message type from a message type descriptor.\n * @param {string} name Message name\n * @param {IType} json Message type descriptor\n * @param {number} [depth] Current nesting depth, defaults to `0`\n * @returns {Type} Created message type\n */\nType.fromJSON = function fromJSON(name, json, depth) {\n    if (depth === undefined)\n        depth = 0;\n    if (depth > util.nestingLimit)\n        throw Error(\"max depth exceeded\");\n    var type = new Type(name, json.options);\n    type.extensions = json.extensions;\n    type.reserved = json.reserved;\n    var names = Object.keys(json.fields),\n        i = 0;\n    for (; i < names.length; ++i)\n        type.add(\n            ( typeof json.fields[names[i]].keyType !== \"undefined\"\n            ? MapField.fromJSON\n            : Field.fromJSON )(names[i], json.fields[names[i]])\n        );\n    if (json.oneofs)\n        for (names = Object.keys(json.oneofs), i = 0; i < names.length; ++i)\n            type.add(OneOf.fromJSON(names[i], json.oneofs[names[i]]));\n    if (json.nested)\n        for (names = Object.keys(json.nested), i = 0; i < names.length; ++i) {\n            var nested = json.nested[names[i]];\n            type.add( // most to least likely\n                ( nested.id !== undefined\n                ? Field.fromJSON\n                : nested.fields !== undefined\n                ? Type.fromJSON\n                : nested.values !== undefined\n                ? Enum.fromJSON\n                : nested.methods !== undefined\n                ? Service.fromJSON\n                : Namespace.fromJSON )(names[i], nested, depth + 1)\n            );\n        }\n    if (json.extensions && json.extensions.length)\n        type.extensions = json.extensions;\n    if (json.reserved && json.reserved.length)\n        type.reserved = json.reserved;\n    if (json.group)\n        type.group = true;\n    if (json.comment)\n        type.comment = json.comment;\n    if (json.edition)\n        type._edition = json.edition;\n    type._defaultEdition = \"proto3\";  // For backwards-compatibility.\n    return type;\n};\n\n/**\n * Converts this message type to a message type descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IType} Message type descriptor\n */\nType.prototype.toJSON = function toJSON(toJSONOptions) {\n    var inherited = Namespace.prototype.toJSON.call(this, toJSONOptions);\n    var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n    return util.toObject([\n        \"edition\"    , this._editionToJSON(),\n        \"options\"    , inherited && inherited.options || undefined,\n        \"oneofs\"     , Namespace.arrayToJSON(this.oneofsArray, toJSONOptions),\n        \"fields\"     , Namespace.arrayToJSON(this.fieldsArray.filter(function(obj) { return !obj.declaringField; }), toJSONOptions) || {},\n        \"extensions\" , this.extensions && this.extensions.length ? this.extensions : undefined,\n        \"reserved\"   , this.reserved && this.reserved.length ? this.reserved : undefined,\n        \"group\"      , this.group || undefined,\n        \"nested\"     , inherited && inherited.nested || undefined,\n        \"comment\"    , keepComments ? this.comment : undefined\n    ]);\n};\n\n/**\n * @override\n */\nType.prototype.resolveAll = function resolveAll() {\n    if (!this._needsRecursiveResolve) return this;\n\n    Namespace.prototype.resolveAll.call(this);\n    var oneofs = this.oneofsArray; i = 0;\n    while (i < oneofs.length)\n        oneofs[i++].resolve();\n    var fields = this.fieldsArray, i = 0;\n    while (i < fields.length)\n        fields[i++].resolve();\n    return this;\n};\n\n/**\n * @override\n */\nType.prototype._resolveFeaturesRecursive = function _resolveFeaturesRecursive(edition) {\n    if (!this._needsRecursiveFeatureResolution) return this;\n\n    edition = this._edition || edition;\n\n    Namespace.prototype._resolveFeaturesRecursive.call(this, edition);\n    this.oneofsArray.forEach(oneof => {\n        oneof._resolveFeatures(edition);\n    });\n    this.fieldsArray.forEach(field => {\n        field._resolveFeatures(edition);\n    });\n    return this;\n};\n\n/**\n * @override\n */\nType.prototype.get = function get(name) {\n    if (Object.prototype.hasOwnProperty.call(this.fields, name))\n        return this.fields[name];\n    if (this.oneofs && Object.prototype.hasOwnProperty.call(this.oneofs, name))\n        return this.oneofs[name];\n    if (this.nested && Object.prototype.hasOwnProperty.call(this.nested, name))\n        return this.nested[name];\n    return null;\n};\n\n/**\n * Adds a nested object to this type.\n * @param {ReflectionObject} object Nested object to add\n * @returns {Type} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If there is already a nested object with this name or, if a field, when there is already a field with this id\n */\nType.prototype.add = function add(object) {\n    if (this.get(object.name))\n        throw Error(\"duplicate name '\" + object.name + \"' in \" + this);\n\n    if (object instanceof Field && object.extend === undefined) {\n        // NOTE: Extension fields aren't actual fields on the declaring type, but nested objects.\n        // The root object takes care of adding distinct sister-fields to the respective extended\n        // type instead.\n\n        // avoids calling the getter if not absolutely necessary because it's called quite frequently\n        if (this._fieldsById ? /* istanbul ignore next */ this._fieldsById[object.id] : this.fieldsById[object.id])\n            throw Error(\"duplicate id \" + object.id + \" in \" + this);\n        if (this.isReservedId(object.id))\n            throw Error(\"id \" + object.id + \" is reserved in \" + this);\n        if (this.isReservedName(object.name) || object.name.charAt(0) === \"$\")\n            throw Error(\"name '\" + object.name + \"' is reserved in \" + this);\n        if (object.name === \"__proto__\")\n            return this;\n\n        if (object.parent)\n            object.parent.remove(object);\n        this.fields[object.name] = object;\n        object.message = this;\n        object.onAdd(this);\n        return clearCache(this);\n    }\n    if (object instanceof OneOf) {\n        if (object.name.charAt(0) === \"$\")\n            throw Error(\"name '\" + object.name + \"' is reserved in \" + this);\n        if (object.name === \"__proto__\")\n            return this;\n        if (!this.oneofs)\n            this.oneofs = {};\n        this.oneofs[object.name] = object;\n        object.onAdd(this);\n        return clearCache(this);\n    }\n    return Namespace.prototype.add.call(this, object);\n};\n\n/**\n * Removes a nested object from this type.\n * @param {ReflectionObject} object Nested object to remove\n * @returns {Type} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If `object` is not a member of this type\n */\nType.prototype.remove = function remove(object) {\n    if (object instanceof Field && object.extend === undefined) {\n        // See Type#add for the reason why extension fields are excluded here.\n\n        /* istanbul ignore if */\n        if (!util.remove(this.fields, object, object.name))\n            throw Error(object + \" is not a member of \" + this);\n\n        object.parent = null;\n        object.onRemove(this);\n        return clearCache(this);\n    }\n    if (object instanceof OneOf) {\n\n        /* istanbul ignore if */\n        if (!util.remove(this.oneofs, object, object.name))\n            throw Error(object + \" is not a member of \" + this);\n\n        object.parent = null;\n        object.onRemove(this);\n        return clearCache(this);\n    }\n    return Namespace.prototype.remove.call(this, object);\n};\n\n/**\n * Tests if the specified id is reserved.\n * @param {number} id Id to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nType.prototype.isReservedId = function isReservedId(id) {\n    return Namespace.isReservedId(this.reserved, id);\n};\n\n/**\n * Tests if the specified name is reserved.\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nType.prototype.isReservedName = function isReservedName(name) {\n    return Namespace.isReservedName(this.reserved, name);\n};\n\n/**\n * Creates a new message of this type using the specified properties.\n * @param {Object.<string,*>} [properties] Properties to set\n * @returns {ReflectedMessage} Message instance\n */\nType.prototype.create = function create(properties) {\n    return new this.ctor(properties);\n};\n\n/**\n * Sets up {@link Type#encode|encode}, {@link Type#decode|decode} and {@link Type#verify|verify}.\n * @returns {Type} `this`\n */\nType.prototype.setup = function setup() {\n    // Sets up everything at once so that the prototype chain does not have to be re-evaluated\n    // multiple times (V8, soft-deopt prototype-check).\n\n    // Resolve feature defaults incl. field presence before generating codecs\n    var root = this.root;\n    if (root && root._needsRecursiveFeatureResolution) {\n        var edition = root._edition || this._edition;\n        if (edition)\n            root._resolveFeaturesRecursive(edition);\n    }\n\n    var fullName = this.fullName,\n        types    = [];\n    for (var i = 0; i < /* initializes */ this.fieldsArray.length; ++i)\n        types.push(this._fieldsArray[i].resolve().resolvedType);\n\n    // Replace setup methods with type-specific generated functions\n    this.encode = encoder(this)({\n        Writer : Writer,\n        types  : types,\n        util   : util\n    });\n    this.decode = decoder(this)({\n        Reader : Reader,\n        types  : types,\n        util   : util,\n        C      : this.ctor\n    });\n    this.verify = verifier(this)({\n        types : types,\n        util  : util\n    });\n    this.fromObject = converter.fromObject(this)({\n        types : types,\n        util  : util,\n        C     : this.ctor\n    });\n    this.toObject = converter.toObject(this)({\n        types : types,\n        util  : util\n    });\n\n    // Inject custom wrappers for common types\n    var wrapper = wrappers[fullName];\n    if (wrapper) {\n        var wrapperThis = Object.create(this);\n        // Reuse this type's runtime constructor in wrapper fromObject/toObject\n        wrapperThis._ctor = this.ctor;\n        wrapperThis.fromObject = this.fromObject;\n        this.fromObject = wrapper.fromObject.bind(wrapperThis);\n        wrapperThis.toObject = this.toObject;\n        this.toObject = wrapper.toObject.bind(wrapperThis);\n    }\n\n    return this;\n};\n\n/**\n * Encodes a message of this type. Does not implicitly {@link Type#verify|verify} messages.\n * @param {Message<{}>|Object.<string,*>} message Message instance or plain object\n * @param {Writer} [writer] Writer to encode to\n * @returns {Writer} writer\n */\nType.prototype.encode = function encode_setup(message, writer) { // eslint-disable-line no-unused-vars\n    return this.setup().encode.apply(this, arguments); // overrides this method\n};\n\n/**\n * Encodes a message of this type preceeded by its byte length as a varint. Does not implicitly {@link Type#verify|verify} messages.\n * @param {Message<{}>|Object.<string,*>} message Message instance or plain object\n * @param {Writer} [writer] Writer to encode to\n * @returns {Writer} writer\n */\nType.prototype.encodeDelimited = function encodeDelimited(message, writer) {\n    return this.encode(message, (writer || Writer.create()).fork()).ldelim();\n};\n\n/**\n * Decodes a message of this type.\n * @param {Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Length of the message, if known beforehand\n * @returns {ReflectedMessage} Decoded message\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {util.ProtocolError<{}>} If required fields are missing\n */\nType.prototype.decode = function decode_setup(reader, length) { // eslint-disable-line no-unused-vars\n    return this.setup().decode.apply(this, arguments); // overrides this method\n};\n\n/**\n * Decodes a message of this type preceeded by its byte length as a varint.\n * @param {Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {ReflectedMessage} Decoded message\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {util.ProtocolError} If required fields are missing\n */\nType.prototype.decodeDelimited = function decodeDelimited(reader) {\n    if (!(reader instanceof Reader))\n        reader = Reader.create(reader);\n    return this.decode(reader, reader.uint32());\n};\n\n/**\n * Verifies that field values are valid and that required fields are present.\n * @param {Object.<string,*>} message Plain object to verify\n * @returns {null|string} `null` if valid, otherwise the reason why it is not\n */\nType.prototype.verify = function verify_setup(message) { // eslint-disable-line no-unused-vars\n    return this.setup().verify.apply(this, arguments); // overrides this method\n};\n\n/**\n * Creates a new message of this type from a plain object. Also converts values to their respective internal types.\n * @param {Object.<string,*>} object Plain object to convert\n * @returns {ReflectedMessage} Message instance\n */\nType.prototype.fromObject = function fromObject(object) { // eslint-disable-line no-unused-vars\n    return this.setup().fromObject.apply(this, arguments);\n};\n\n/**\n * Conversion options as used by {@link Type#toObject} and {@link Message.toObject}.\n * @interface IConversionOptions\n * @property {Function} [longs] Long conversion type.\n * Valid values are `BigInt`, `String` and `Number` (the global types).\n * Defaults to copy the present value, which is a possibly unsafe number without and a {@link Long} with a long library.\n * @property {Function} [enums] Enum value conversion type.\n * Only valid value is `String` (the global type).\n * Defaults to copy the present value, which is the numeric id.\n * @property {Function} [bytes] Bytes value conversion type.\n * Valid values are `Array` and (a base64 encoded) `String` (the global types).\n * Defaults to copy the present value, which usually is a Buffer under node and an Uint8Array in the browser.\n * @property {boolean} [defaults=false] Also sets default values on the resulting object\n * @property {boolean} [arrays=false] Sets empty arrays for missing repeated fields even if `defaults=false`\n * @property {boolean} [objects=false] Sets empty objects for missing map fields even if `defaults=false`\n * @property {boolean} [oneofs=false] Includes virtual oneof properties set to the present field's name, if any\n * @property {boolean} [json=false] Performs additional JSON compatibility conversions, i.e. NaN and Infinity to strings\n */\n\n/**\n * Creates a plain object from a message of this type. Also converts values to other types if specified.\n * @param {Message<{}>} message Message instance\n * @param {IConversionOptions} [options] Conversion options\n * @returns {Object.<string,*>} Plain object\n */\nType.prototype.toObject = function toObject(message, options) { // eslint-disable-line no-unused-vars\n    return this.setup().toObject.apply(this, arguments);\n};\n\n/**\n * Gets the type url for this type.\n * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n * @returns {string} The type url\n */\nType.prototype.getTypeUrl = function getTypeUrl(prefix) {\n    if (prefix === undefined)\n        prefix = \"type.googleapis.com\";\n    var fullName = this.fullName;\n    return prefix + \"/\" + (fullName.charAt(0) === \".\" ? fullName.substring(1) : fullName);\n};\n\n/**\n * Decorator function as returned by {@link Type.d} (TypeScript).\n * @typedef TypeDecorator\n * @type {function}\n * @param {Constructor<T>} target Target constructor\n * @returns {undefined}\n * @template T extends Message<T>\n * @deprecated Legacy TypeScript decorator support. Will be removed in a future release.\n */\n\n/**\n * Type decorator (TypeScript).\n * @param {string} [typeName] Type name, defaults to the constructor's name\n * @returns {TypeDecorator<T>} Decorator function\n * @template T extends Message<T>\n * @deprecated Legacy TypeScript decorator support. Will be removed in a future release.\n */\nType.d = function decorateType(typeName) {\n    return function typeDecorator(target) {\n        util.decorateType(target, typeName);\n    };\n};\n","\"use strict\";\nmodule.exports = Root;\n\n// extends Namespace\nvar Namespace = require(\"./namespace\");\nRoot.prototype = Object.create(Namespace.prototype, {\n    constructor: {\n        value: Root,\n        writable: true,\n        enumerable: false,\n        configurable: true\n    }\n});\nRoot.className = \"Root\";\n\nvar Field   = require(\"./field\"),\n    Enum    = require(\"./enum\"),\n    OneOf   = require(\"./oneof\"),\n    util    = require(\"./util\");\n\nvar Type,   // cyclic\n    parse,  // might be excluded\n    common; // \"\n\n/**\n * Constructs a new root namespace instance.\n * @classdesc Root namespace wrapping all types, enums, services, sub-namespaces etc. that belong together.\n * @extends NamespaceBase\n * @constructor\n * @param {Object.<string,*>} [options] Top level options\n */\nfunction Root(options) {\n    Namespace.call(this, \"\", options);\n\n    /**\n     * Deferred extension fields.\n     * @type {Field[]}\n     */\n    this.deferred = [];\n\n    /**\n     * Resolved file names of loaded files.\n     * @type {string[]}\n     */\n    this.files = [];\n\n    /**\n     * Edition, defaults to proto2 if unspecified.\n     * @type {string}\n     * @private\n     */\n    this._edition = \"proto2\";\n\n    /**\n     * Global lookup cache of fully qualified names.\n     * @type {Object.<string,ReflectionObject>}\n     * @private\n     */\n    this._fullyQualifiedObjects = {};\n}\n\n/**\n * Loads a namespace descriptor into a root namespace.\n * @param {INamespace} json Namespace descriptor\n * @param {Root} [root] Root namespace, defaults to create a new one if omitted\n * @param {number} [depth] Current nesting depth, defaults to `0`\n * @returns {Root} Root namespace\n */\nRoot.fromJSON = function fromJSON(json, root, depth) {\n    if (depth === undefined)\n        depth = 0;\n    if (depth > util.recursionLimit)\n        throw Error(\"max depth exceeded\");\n    if (!root)\n        root = new Root();\n    if (json.options)\n        root.setOptions(json.options);\n    return root.addJSON(json.nested, depth).resolveAll();\n};\n\n/**\n * Resolves the path of an imported file, relative to the importing origin.\n * This method exists so you can override it with your own logic in case your imports are scattered over multiple directories.\n * @function\n * @param {string} origin The file name of the importing file\n * @param {string} target The file name being imported\n * @returns {string|null} Resolved path to `target` or `null` to skip the file\n */\nRoot.prototype.resolvePath = util.path.resolve;\n\n/**\n * Fetch content from file path or url\n * This method exists so you can override it with your own logic.\n * @function\n * @param {string} path File path or url\n * @param {FetchCallback} callback Callback function\n * @returns {undefined}\n */\nRoot.prototype.fetch = util.fetch;\n\n// A symbol-like function to safely signal synchronous loading\n/* istanbul ignore next */\nfunction SYNC() {} // eslint-disable-line no-empty-function\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into this root namespace and calls the callback.\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {IParseOptions} options Parse options\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n */\nRoot.prototype.load = function load(filename, options, callback) {\n    if (typeof options === \"function\") {\n        callback = options;\n        options = undefined;\n    }\n    var self = this;\n    if (!callback) {\n        return util.asPromise(load, self, filename, options);\n    }\n\n    var sync = callback === SYNC; // undocumented\n\n    // Finishes loading by calling the callback (exactly once)\n    function finish(err, root) {\n        /* istanbul ignore if */\n        if (!callback) {\n            return;\n        }\n        if (sync) {\n            throw err;\n        }\n        if (root) {\n            root.resolveAll();\n        }\n        var cb = callback;\n        callback = null;\n        cb(err, root);\n    }\n\n    // Bundled definition existence checking\n    function getBundledFileName(filename) {\n        var idx = filename.lastIndexOf(\"google/protobuf/\");\n        if (idx > -1) {\n            var altname = filename.substring(idx);\n            if (Object.prototype.hasOwnProperty.call(common, altname)) return altname;\n        }\n        if (Object.prototype.hasOwnProperty.call(common, filename)) return filename;\n        return null;\n    }\n\n    // Processes a single file\n    function process(filename, source, depth) {\n        if (depth === undefined)\n            depth = 0;\n        try {\n            if (depth > util.recursionLimit)\n                throw Error(\"max depth exceeded\");\n            if (util.isString(source) && source.charAt(0) === \"{\")\n                source = JSON.parse(source);\n            if (!util.isString(source))\n                self.setOptions(source.options).addJSON(source.nested);\n            else {\n                parse.filename = filename;\n                var parsed = parse(source, self, options),\n                    resolved,\n                    i = 0;\n                if (parsed.imports)\n                    for (; i < parsed.imports.length; ++i)\n                        if (resolved = getBundledFileName(parsed.imports[i]) || self.resolvePath(filename, parsed.imports[i]))\n                            fetch(resolved, false, depth + 1);\n                if (parsed.weakImports)\n                    for (i = 0; i < parsed.weakImports.length; ++i)\n                        if (resolved = getBundledFileName(parsed.weakImports[i]) || self.resolvePath(filename, parsed.weakImports[i]))\n                            fetch(resolved, true, depth + 1);\n            }\n        } catch (err) {\n            finish(err);\n        }\n        if (!sync && !queued) {\n            finish(null, self); // only once anyway\n        }\n    }\n\n    // Fetches a single file\n    function fetch(filename, weak, depth) {\n        if (depth === undefined)\n            depth = 0;\n        filename = getBundledFileName(filename) || filename;\n\n        // Skip if already loaded / attempted\n        if (self.files.indexOf(filename) > -1) {\n            return;\n        }\n        self.files.push(filename);\n\n        // Shortcut bundled definitions\n        if (Object.prototype.hasOwnProperty.call(common, filename)) {\n            if (sync) {\n                process(filename, common[filename], depth);\n            } else {\n                ++queued;\n                setTimeout(function() {\n                    --queued;\n                    process(filename, common[filename], depth);\n                });\n            }\n            return;\n        }\n\n        // Otherwise fetch from disk or network\n        if (sync) {\n            var source;\n            try {\n                source = util.fs.readFileSync(filename).toString(\"utf8\");\n            } catch (err) {\n                if (!weak)\n                    finish(err);\n                return;\n            }\n            process(filename, source, depth);\n        } else {\n            ++queued;\n            self.fetch(filename, function(err, source) {\n                --queued;\n                /* istanbul ignore if */\n                if (!callback) {\n                    return; // terminated meanwhile\n                }\n                if (err) {\n                    /* istanbul ignore else */\n                    if (!weak)\n                        finish(err);\n                    else if (!queued) // can't be covered reliably\n                        finish(null, self);\n                    return;\n                }\n                process(filename, source, depth);\n            });\n        }\n    }\n    var queued = 0;\n\n    // Assembling the root namespace doesn't require working type\n    // references anymore, so we can load everything in parallel\n    if (util.isString(filename)) {\n        filename = [ filename ];\n    }\n    for (var i = 0, resolved; i < filename.length; ++i)\n        if (resolved = self.resolvePath(\"\", filename[i]))\n            fetch(resolved);\n    if (sync) {\n        self.resolveAll();\n        return self;\n    }\n    if (!queued) {\n        finish(null, self);\n    }\n\n    return self;\n};\n// function load(filename:string, options:IParseOptions, callback:LoadCallback):undefined\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into this root namespace and calls the callback.\n * @function Root#load\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n * @variation 2\n */\n// function load(filename:string, callback:LoadCallback):undefined\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into this root namespace and returns a promise.\n * @function Root#load\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {IParseOptions} [options] Parse options. Defaults to {@link parse.defaults} when omitted.\n * @returns {Promise<Root>} Promise\n * @variation 3\n */\n// function load(filename:string, [options:IParseOptions]):Promise<Root>\n\n/**\n * Synchronously loads one or multiple .proto or preprocessed .json files into this root namespace (node only).\n * @function Root#loadSync\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {IParseOptions} [options] Parse options. Defaults to {@link parse.defaults} when omitted.\n * @returns {Root} Root namespace\n * @throws {Error} If synchronous fetching is not supported (i.e. in browsers) or if a file's syntax is invalid\n */\nRoot.prototype.loadSync = function loadSync(filename, options) {\n    if (!util.isNode)\n        throw Error(\"not supported\");\n    return this.load(filename, options, SYNC);\n};\n\n/**\n * @override\n */\nRoot.prototype.resolveAll = function resolveAll() {\n    if (!this._needsRecursiveResolve) return this;\n\n    if (this.deferred.length)\n        throw Error(\"unresolvable extensions: \" + this.deferred.map(function(field) {\n            return \"'extend \" + field.extend + \"' in \" + field.parent.fullName;\n        }).join(\", \"));\n    return Namespace.prototype.resolveAll.call(this);\n};\n\n// only uppercased (and thus conflict-free) children are exposed, see below\nvar exposeRe = /^[A-Z]/;\n\n/**\n * Handles a deferred declaring extension field by creating a sister field to represent it within its extended type.\n * @param {Root} root Root instance\n * @param {Field} field Declaring extension field witin the declaring type\n * @returns {boolean} `true` if successfully added to the extended type, `false` otherwise\n * @inner\n * @ignore\n */\nfunction tryHandleExtension(root, field) {\n    var extendedType = field.parent.lookup(field.extend);\n    if (extendedType) {\n        var sisterField = new Field(field.fullName, field.id, field.type, field.rule, undefined, field.options);\n        //do not allow to extend same field twice to prevent the error\n        if (extendedType.get(sisterField.name)) {\n            return true;\n        }\n        sisterField.declaringField = field;\n        field.extensionField = sisterField;\n        extendedType.add(sisterField);\n        return true;\n    }\n    return false;\n}\n\n/**\n * Called when any object is added to this root or its sub-namespaces.\n * @param {ReflectionObject} object Object added\n * @returns {undefined}\n * @private\n */\nRoot.prototype._handleAdd = function _handleAdd(object) {\n    if (object instanceof Field) {\n\n        if (/* an extension field (implies not part of a oneof) */ object.extend !== undefined && /* not already handled */ !object.extensionField)\n            if (!tryHandleExtension(this, object))\n                this.deferred.push(object);\n\n    } else if (object instanceof Enum) {\n\n        if (exposeRe.test(object.name))\n            object.parent[object.name] = object.values; // expose enum values as property of its parent\n\n    } else if (!(object instanceof OneOf)) /* everything else is a namespace */ {\n\n        if (object instanceof Type) // Try to handle any deferred extensions\n            for (var i = 0; i < this.deferred.length;)\n                if (tryHandleExtension(this, this.deferred[i]))\n                    this.deferred.splice(i, 1);\n                else\n                    ++i;\n        for (var j = 0; j < /* initializes */ object.nestedArray.length; ++j) // recurse into the namespace\n            this._handleAdd(object._nestedArray[j]);\n        if (exposeRe.test(object.name))\n            object.parent[object.name] = object; // expose namespace as property of its parent\n    }\n\n    if (object instanceof Type || object instanceof Enum || object instanceof Field) {\n        // Only store types and enums for quick lookup during resolve.\n        this._fullyQualifiedObjects[object.fullName] = object;\n    }\n\n    // The above also adds uppercased (and thus conflict-free) nested types, services and enums as\n    // properties of namespaces just like static code does. This allows using a .d.ts generated for\n    // a static module with reflection-based solutions where the condition is met.\n};\n\n/**\n * Called when any object is removed from this root or its sub-namespaces.\n * @param {ReflectionObject} object Object removed\n * @returns {undefined}\n * @private\n */\nRoot.prototype._handleRemove = function _handleRemove(object) {\n    if (object instanceof Field) {\n\n        if (/* an extension field */ object.extend !== undefined) {\n            if (/* already handled */ object.extensionField) { // remove its sister field\n                object.extensionField.parent.remove(object.extensionField);\n                object.extensionField = null;\n            } else { // cancel the extension\n                var index = this.deferred.indexOf(object);\n                /* istanbul ignore else */\n                if (index > -1)\n                    this.deferred.splice(index, 1);\n            }\n        }\n\n    } else if (object instanceof Enum) {\n\n        if (exposeRe.test(object.name))\n            delete object.parent[object.name]; // unexpose enum values\n\n    } else if (object instanceof Namespace) {\n\n        for (var i = 0; i < /* initializes */ object.nestedArray.length; ++i) // recurse into the namespace\n            this._handleRemove(object._nestedArray[i]);\n\n        if (exposeRe.test(object.name))\n            delete object.parent[object.name]; // unexpose namespaces\n\n    }\n\n    delete this._fullyQualifiedObjects[object.fullName];\n};\n\n// Sets up cyclic dependencies (called in index-light)\nRoot._configure = function(Type_, parse_, common_) {\n    Type   = Type_;\n    parse  = parse_;\n    common = common_;\n};\n","\"use strict\";\n\n/**\n * Various utility functions.\n * @namespace\n */\nvar util = module.exports = require(\"./util/minimal\");\n\nvar roots = require(\"./roots\");\n\nvar Type, // cyclic\n    Enum;\n\nutil.codegen  = require(\"./util/codegen\");\nutil.fetch    = require(\"./util/fetch\");\nutil.path     = require(\"./util/path\");\nutil.patterns = require(\"./util/patterns\");\n\nvar reservedRe = util.patterns.reservedRe;\n\n/**\n * Node's fs module if available.\n * @type {Object.<string,*>}\n */\nutil.fs = require(\"./util/fs\");\n\n/**\n * Converts an object's values to an array.\n * @param {Object.<string,*>} object Object to convert\n * @returns {Array.<*>} Converted array\n */\nutil.toArray = function toArray(object) {\n    if (object) {\n        var keys  = Object.keys(object),\n            array = new Array(keys.length),\n            index = 0;\n        while (index < keys.length)\n            array[index] = object[keys[index++]];\n        return array;\n    }\n    return [];\n};\n\n/**\n * Converts an array of keys immediately followed by their respective value to an object, omitting undefined values.\n * @param {Array.<*>} array Array to convert\n * @returns {Object.<string,*>} Converted object\n */\nutil.toObject = function toObject(array) {\n    var object = {},\n        index  = 0;\n    while (index < array.length) {\n        var key = array[index++],\n            val = array[index++];\n        if (val !== undefined)\n            object[key] = val;\n    }\n    return object;\n};\n\n/**\n * Removes the first matching value from an object.\n * @param {Object.<string,*>|undefined} object Object to remove from\n * @param {*} value Value to remove\n * @param {string} [key] Optional key for fast path removal\n * @returns {boolean} `true` if removed, otherwise `false`\n */\nutil.remove = function remove(object, value, key) {\n    if (!object)\n        return false;\n    if (key !== undefined && Object.prototype.hasOwnProperty.call(object, key) && object[key] === value) {\n        delete object[key];\n        return true;\n    }\n    for (var names = Object.keys(object), i = 0; i < names.length; ++i)\n        if (object[names[i]] === value) {\n            delete object[names[i]];\n            return true;\n        }\n    return false;\n};\n\n/**\n * Tests whether the specified name is a reserved word in JS.\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nutil.isReserved = function isReserved(name) {\n    return reservedRe.test(name);\n};\n\n/**\n * Returns a safe property accessor for the specified property name.\n * @param {string} prop Property name\n * @returns {string} Safe accessor\n */\nutil.safeProp = function safeProp(prop) {\n    if (!/^[$\\w_]+$/.test(prop) || reservedRe.test(prop))\n        return \"[\" + JSON.stringify(prop) + \"]\";\n    return \".\" + prop;\n};\n\n/**\n * Converts the first character of a string to upper case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.ucFirst = function ucFirst(str) {\n    return str.charAt(0).toUpperCase() + str.substring(1);\n};\n\nvar camelCaseRe = /_([a-z])/g;\n\n/**\n * Converts a string to camel case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n * @deprecated Use {@link util.jsonName} for protobuf field JSON names.\n */\nutil.camelCase = function camelCase(str) {\n    return str.substring(0, 1)\n         + str.substring(1)\n               .replace(camelCaseRe, function($0, $1) { return $1.toUpperCase(); });\n};\n\n/**\n * Converts a proto field name to its protoc-compatible JSON name.\n * @param {string} str Proto field name\n * @returns {string} JSON name\n */\nutil.jsonName = function jsonName(str) {\n    var result = \"\",\n        upperNext = false,\n        i = 0;\n    for (; i < str.length; ++i) {\n        var ch = str.charAt(i);\n        if (ch === \"_\")\n            upperNext = true;\n        else if (upperNext) {\n            result += ch.toUpperCase();\n            upperNext = false;\n        } else\n            result += ch;\n    }\n    return result;\n};\n\n/**\n * Compares reflected fields by id.\n * @param {Field} a First field\n * @param {Field} b Second field\n * @returns {number} Comparison value\n */\nutil.compareFieldsById = function compareFieldsById(a, b) {\n    return a.id - b.id;\n};\n\n/**\n * Decorator helper for types (TypeScript).\n * @param {Constructor<T>} ctor Constructor function\n * @param {string} [typeName] Type name, defaults to the constructor's name\n * @returns {Type} Reflected type\n * @template T extends Message<T>\n * @property {Root} root Decorators root\n * @deprecated Legacy TypeScript decorator support. Will be removed in a future release.\n */\nutil.decorateType = function decorateType(ctor, typeName) {\n\n    /* istanbul ignore if */\n    if (ctor.$type) {\n        if (typeName && ctor.$type.name !== typeName) {\n            util.decorateRoot.remove(ctor.$type);\n            ctor.$type.name = typeName;\n            util.decorateRoot.add(ctor.$type);\n        }\n        return ctor.$type;\n    }\n\n    /* istanbul ignore next */\n    if (!Type)\n        Type = require(\"./type\");\n\n    var type = new Type(typeName || ctor.name);\n    util.decorateRoot.add(type);\n    type.ctor = ctor; // sets up .encode, .decode etc.\n    Object.defineProperty(ctor, \"$type\", { value: type, enumerable: false });\n    Object.defineProperty(ctor.prototype, \"$type\", { value: type, enumerable: false });\n    return type;\n};\n\nvar decorateEnumIndex = 0;\n\n/**\n * Decorator helper for enums (TypeScript).\n * @param {Object} object Enum object\n * @returns {Enum} Reflected enum\n * @deprecated Legacy TypeScript decorator support. Will be removed in a future release.\n */\nutil.decorateEnum = function decorateEnum(object) {\n\n    /* istanbul ignore if */\n    if (object.$type)\n        return object.$type;\n\n    /* istanbul ignore next */\n    if (!Enum)\n        Enum = require(\"./enum\");\n\n    var enm = new Enum(\"Enum\" + decorateEnumIndex++, object);\n    util.decorateRoot.add(enm);\n    Object.defineProperty(object, \"$type\", { value: enm, enumerable: false });\n    return enm;\n};\n\n\n/**\n * Sets the value of a property by property path. If a value already exists, it is turned to an array\n * @param {Object.<string,*>} dst Destination object\n * @param {string} path dot '.' delimited path of the property to set\n * @param {Object} value the value to set\n * @param {boolean|undefined} [ifNotSet] Sets the option only if it isn't currently set\n * @returns {Object.<string,*>} Destination object\n */\nutil.setProperty = function setProperty(dst, path, value, ifNotSet) {\n    function setProp(dst, path, value) {\n        var part = path.shift();\n        if (util.isUnsafeProperty(part))\n            return dst;\n        if (path.length > 0) {\n            dst[part] = setProp(dst[part] || {}, path, value);\n        } else {\n            var prevValue = dst[part];\n            if (prevValue && ifNotSet)\n                return dst;\n            if (prevValue)\n                value = [].concat(prevValue).concat(value);\n            dst[part] = value;\n        }\n        return dst;\n    }\n\n    if (typeof dst !== \"object\")\n        throw TypeError(\"dst must be an object\");\n    if (!path)\n        throw TypeError(\"path must be specified\");\n\n    path = path.split(\".\");\n    if (path.length > util.recursionLimit)\n        throw Error(\"max depth exceeded\");\n    return setProp(dst, path, value);\n};\n\n/**\n * Decorator root (TypeScript).\n * @name util.decorateRoot\n * @type {Root}\n * @readonly\n * @deprecated Legacy TypeScript decorator support. Will be removed in a future release.\n */\nObject.defineProperty(util, \"decorateRoot\", {\n    get: function() {\n        return roots[\"decorated\"] || (roots[\"decorated\"] = new (require(\"./root\"))());\n    }\n});\n","\"use strict\";\n\n/**\n * Common type constants.\n * @namespace\n */\nvar types = exports;\n\nvar util = require(\"./util\");\n\nvar s = [\n    \"double\",   // 0\n    \"float\",    // 1\n    \"int32\",    // 2\n    \"uint32\",   // 3\n    \"sint32\",   // 4\n    \"fixed32\",  // 5\n    \"sfixed32\", // 6\n    \"int64\",    // 7\n    \"uint64\",   // 8\n    \"sint64\",   // 9\n    \"fixed64\",  // 10\n    \"sfixed64\", // 11\n    \"bool\",     // 12\n    \"string\",   // 13\n    \"bytes\"     // 14\n];\n\nfunction bake(values, offset) {\n    var i = 0, o = Object.create(null);\n    offset |= 0;\n    while (i < values.length) o[s[i + offset]] = values[i++];\n    return o;\n}\n\n/**\n * Basic type wire types.\n * @type {Object.<string,number>}\n * @const\n * @property {number} double=1 Fixed64 wire type\n * @property {number} float=5 Fixed32 wire type\n * @property {number} int32=0 Varint wire type\n * @property {number} uint32=0 Varint wire type\n * @property {number} sint32=0 Varint wire type\n * @property {number} fixed32=5 Fixed32 wire type\n * @property {number} sfixed32=5 Fixed32 wire type\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n * @property {number} bool=0 Varint wire type\n * @property {number} string=2 Ldelim wire type\n * @property {number} bytes=2 Ldelim wire type\n */\ntypes.basic = bake([\n    /* double   */ 1,\n    /* float    */ 5,\n    /* int32    */ 0,\n    /* uint32   */ 0,\n    /* sint32   */ 0,\n    /* fixed32  */ 5,\n    /* sfixed32 */ 5,\n    /* int64    */ 0,\n    /* uint64   */ 0,\n    /* sint64   */ 0,\n    /* fixed64  */ 1,\n    /* sfixed64 */ 1,\n    /* bool     */ 0,\n    /* string   */ 2,\n    /* bytes    */ 2\n]);\n\n/**\n * Basic type defaults.\n * @type {Object.<string,*>}\n * @const\n * @property {number} double=0 Double default\n * @property {number} float=0 Float default\n * @property {number} int32=0 Int32 default\n * @property {number} uint32=0 Uint32 default\n * @property {number} sint32=0 Sint32 default\n * @property {number} fixed32=0 Fixed32 default\n * @property {number} sfixed32=0 Sfixed32 default\n * @property {number} int64=0 Int64 default\n * @property {number} uint64=0 Uint64 default\n * @property {number} sint64=0 Sint32 default\n * @property {number} fixed64=0 Fixed64 default\n * @property {number} sfixed64=0 Sfixed64 default\n * @property {boolean} bool=false Bool default\n * @property {string} string=\"\" String default\n * @property {Array.<number>} bytes=Array(0) Bytes default\n * @property {null} message=null Message default\n */\ntypes.defaults = bake([\n    /* double   */ 0,\n    /* float    */ 0,\n    /* int32    */ 0,\n    /* uint32   */ 0,\n    /* sint32   */ 0,\n    /* fixed32  */ 0,\n    /* sfixed32 */ 0,\n    /* int64    */ 0,\n    /* uint64   */ 0,\n    /* sint64   */ 0,\n    /* fixed64  */ 0,\n    /* sfixed64 */ 0,\n    /* bool     */ false,\n    /* string   */ \"\",\n    /* bytes    */ util.emptyArray,\n    /* message  */ null\n]);\n\n/**\n * Basic long type wire types.\n * @type {Object.<string,number>}\n * @const\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n */\ntypes.long = bake([\n    /* int64    */ 0,\n    /* uint64   */ 0,\n    /* sint64   */ 0,\n    /* fixed64  */ 1,\n    /* sfixed64 */ 1\n], 7);\n\n/**\n * Allowed types for map keys with their associated wire type.\n * @type {Object.<string,number>}\n * @const\n * @property {number} int32=0 Varint wire type\n * @property {number} uint32=0 Varint wire type\n * @property {number} sint32=0 Varint wire type\n * @property {number} fixed32=5 Fixed32 wire type\n * @property {number} sfixed32=5 Fixed32 wire type\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n * @property {number} bool=0 Varint wire type\n * @property {number} string=2 Ldelim wire type\n */\ntypes.mapKey = bake([\n    /* int32    */ 0,\n    /* uint32   */ 0,\n    /* sint32   */ 0,\n    /* fixed32  */ 5,\n    /* sfixed32 */ 5,\n    /* int64    */ 0,\n    /* uint64   */ 0,\n    /* sint64   */ 0,\n    /* fixed64  */ 1,\n    /* sfixed64 */ 1,\n    /* bool     */ 0,\n    /* string   */ 2\n], 2);\n\n/**\n * Allowed types for packed repeated fields with their associated wire type.\n * @type {Object.<string,number>}\n * @const\n * @property {number} double=1 Fixed64 wire type\n * @property {number} float=5 Fixed32 wire type\n * @property {number} int32=0 Varint wire type\n * @property {number} uint32=0 Varint wire type\n * @property {number} sint32=0 Varint wire type\n * @property {number} fixed32=5 Fixed32 wire type\n * @property {number} sfixed32=5 Fixed32 wire type\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n * @property {number} bool=0 Varint wire type\n */\ntypes.packed = bake([\n    /* double   */ 1,\n    /* float    */ 5,\n    /* int32    */ 0,\n    /* uint32   */ 0,\n    /* sint32   */ 0,\n    /* fixed32  */ 5,\n    /* sfixed32 */ 5,\n    /* int64    */ 0,\n    /* uint64   */ 0,\n    /* sint64   */ 0,\n    /* fixed64  */ 1,\n    /* sfixed64 */ 1,\n    /* bool     */ 0\n]);\n","\"use strict\";\nmodule.exports = Field;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\nField.prototype = Object.create(ReflectionObject.prototype, {\n    constructor: {\n        value: Field,\n        writable: true,\n        enumerable: false,\n        configurable: true\n    }\n});\nField.className = \"Field\";\n\nvar Enum  = require(\"./enum\"),\n    types = require(\"./types\"),\n    util  = require(\"./util\");\n\nvar Type; // cyclic\n\nvar ruleRe = /^(?:required|optional|repeated)$/;\n\n/**\n * Constructs a new message field instance. Note that {@link MapField|map fields} have their own class.\n * @name Field\n * @classdesc Reflected message field.\n * @extends FieldBase\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {number} id Unique id within its namespace\n * @param {string} type Value type\n * @param {string|Object.<string,*>} [rule=\"optional\"] Field rule\n * @param {string|Object.<string,*>} [extend] Extended type if different from parent\n * @param {Object.<string,*>} [options] Declared options\n */\n\n/**\n * Constructs a field from a field descriptor.\n * @param {string} name Field name\n * @param {IField} json Field descriptor\n * @returns {Field} Created field\n * @throws {TypeError} If arguments are invalid\n */\nField.fromJSON = function fromJSON(name, json) {\n    var field = new Field(name, json.id, json.type, json.rule, json.extend, json.options, json.comment);\n    if (json.edition)\n        field._edition = json.edition;\n    if (json.protoName)\n        field.protoName = json.protoName;\n    if (json.jsonName !== undefined)\n        field.jsonName = json.jsonName;\n    else if (json.options && json.options.json_name !== undefined)\n        field.jsonName = json.options.json_name;\n    field._defaultEdition = \"proto3\";  // For backwards-compatibility.\n    return field;\n};\n\n/**\n * Not an actual constructor. Use {@link Field} instead.\n * @classdesc Base class of all reflected message fields. This is not an actual class but here for the sake of having consistent type definitions.\n * @exports FieldBase\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {number} id Unique id within its namespace\n * @param {string} type Value type\n * @param {string|Object.<string,*>} [rule=\"optional\"] Field rule\n * @param {string|Object.<string,*>} [extend] Extended type if different from parent\n * @param {Object.<string,*>} [options] Declared options\n * @param {string} [comment] Comment associated with this field\n */\nfunction Field(name, id, type, rule, extend, options, comment) {\n\n    if (util.isObject(rule)) {\n        comment = extend;\n        options = rule;\n        rule = extend = undefined;\n    } else if (util.isObject(extend)) {\n        comment = options;\n        options = extend;\n        extend = undefined;\n    }\n\n    ReflectionObject.call(this, name, options);\n\n    if (!util.isInteger(id) || id < 0)\n        throw TypeError(\"id must be a non-negative integer\");\n\n    if (!util.isString(type))\n        throw TypeError(\"type must be a string\");\n\n    if (rule !== undefined && !ruleRe.test(rule = rule.toString().toLowerCase()))\n        throw TypeError(\"rule must be a string rule\");\n\n    if (extend !== undefined && !util.isString(extend))\n        throw TypeError(\"extend must be a string\");\n\n    /**\n     * Field rule, if any.\n     * @type {string|undefined}\n     */\n    this.rule = rule && rule !== \"optional\" ? rule : undefined; // toJSON\n\n    /**\n     * Field type.\n     * @type {string}\n     */\n    this.type = type; // toJSON\n\n    /**\n     * Unique field id.\n     * @type {number}\n     */\n    this.id = id; // toJSON, marker\n\n    /**\n     * Extended type if different from parent.\n     * @type {string|undefined}\n     */\n    this.extend = extend || undefined; // toJSON\n\n    /**\n     * Whether this field is repeated.\n     * @type {boolean}\n     */\n    this.repeated = rule === \"repeated\";\n\n    /**\n     * Whether this field is a map or not.\n     * @type {boolean}\n     */\n    this.map = false;\n\n    /**\n     * Message this field belongs to.\n     * @type {Type|null}\n     */\n    this.message = null;\n\n    /**\n     * OneOf this field belongs to, if any,\n     * @type {OneOf|null}\n     */\n    this.partOf = null;\n\n    /**\n     * The field type's default value.\n     * @type {*}\n     */\n    this.typeDefault = null;\n\n    /**\n     * The field's default value on prototypes.\n     * @type {*}\n     */\n    this.defaultValue = null;\n\n    /**\n     * Whether this field's value should be treated as a long.\n     * @type {boolean}\n     */\n    this.long = util.Long ? types.long[type] !== undefined : /* istanbul ignore next */ false;\n\n    /**\n     * Whether this field's value is a buffer.\n     * @type {boolean}\n     */\n    this.bytes = type === \"bytes\";\n\n    /**\n     * Resolved type if not a basic type.\n     * @type {Type|Enum|null}\n     */\n    this.resolvedType = null;\n\n    /**\n     * Sister-field within the extended type if a declaring extension field.\n     * @type {Field|null}\n     */\n    this.extensionField = null;\n\n    /**\n     * Sister-field within the declaring namespace if an extended field.\n     * @type {Field|null}\n     */\n    this.declaringField = null;\n\n    /**\n     * Comment for this field.\n     * @type {string|null}\n     */\n    this.comment = comment;\n\n    /**\n     * Field name as declared in the .proto source, if different from `name`.\n     * @type {string|undefined}\n     */\n    this.protoName = undefined;\n\n    /**\n     * JSON name, if different from the derived default.\n     * @type {string|undefined}\n     */\n    this.jsonName = undefined;\n}\n\n/**\n * Determines whether this field is required.\n * @name Field#required\n * @type {boolean}\n * @readonly\n */\nObject.defineProperty(Field.prototype, \"required\", {\n    get: function() {\n        return this._features.field_presence === \"LEGACY_REQUIRED\";\n    }\n});\n\n/**\n * Determines whether this field is not required.\n * @name Field#optional\n * @type {boolean}\n * @readonly\n */\nObject.defineProperty(Field.prototype, \"optional\", {\n    get: function() {\n        return !this.required;\n    }\n});\n\n/**\n * Determines whether this field uses tag-delimited encoding.  In proto2 this\n * corresponded to group syntax.\n * @name Field#delimited\n * @type {boolean}\n * @readonly\n */\nObject.defineProperty(Field.prototype, \"delimited\", {\n    get: function() {\n        return this.resolvedType instanceof Type &&\n            this._features.message_encoding === \"DELIMITED\";\n    }\n});\n\n/**\n * Determines whether this field is packed. Only relevant when repeated.\n * @name Field#packed\n * @type {boolean}\n * @readonly\n */\nObject.defineProperty(Field.prototype, \"packed\", {\n    get: function() {\n        return this._features.repeated_field_encoding === \"PACKED\";\n    }\n});\n\n/**\n * Determines whether this field tracks presence.\n * @name Field#hasPresence\n * @type {boolean}\n * @readonly\n */\nObject.defineProperty(Field.prototype, \"hasPresence\", {\n    get: function() {\n        if (this.repeated || this.map) {\n            return false;\n        }\n        return this.partOf || // oneofs\n            this.declaringField || this.extensionField || // extensions\n            this._features.field_presence !== \"IMPLICIT\";\n    }\n});\n\n/**\n * The field name as declared in the .proto source (snake_case). Populated on resolve,\n * falling back to `name`. Mirrors `FieldDescriptorProto.name`.\n * @name Field#protoName\n * @type {string}\n * @readonly\n */\n\n/**\n * The JSON name of this field (lowerCamelCase per protoc's `ToJsonName`, or an\n * explicit `[json_name]`). Populated on resolve. This is the key used on ProtoJSON output.\n * @name Field#jsonName\n * @type {string}\n * @readonly\n */\n\n/**\n * @override\n */\nField.prototype.setOption = function setOption(name, value, ifNotSet) {\n    return ReflectionObject.prototype.setOption.call(this, name, value, ifNotSet);\n};\n\n/**\n * Field descriptor.\n * @interface IField\n * @property {string} [edition] Edition\n * @property {string} [rule=\"optional\"] Field rule\n * @property {string} type Field type\n * @property {number} id Field id\n * @property {Object.<string,*>} [options] Field options\n * @property {string|null} [comment] Field comment\n */\n\n/**\n * Extension field descriptor.\n * @interface IExtensionField\n * @extends IField\n * @property {string} extend Extended type\n */\n\n/**\n * Converts this field to a field descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IField} Field descriptor\n */\nField.prototype.toJSON = function toJSON(toJSONOptions) {\n    var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n    return util.toObject([\n        \"edition\"      , this._editionToJSON(),\n        \"rule\"         , this.rule !== \"optional\" && this.rule || undefined,\n        \"type\"         , this.type,\n        \"id\"           , this.id,\n        \"extend\"       , this.extend,\n        \"protoName\"    , this.protoName !== this.name ? this.protoName : undefined,\n        \"jsonName\"     , this.jsonName !== util.jsonName(this.protoName || this.name) ? this.jsonName : undefined,\n        \"options\"      , this.options,\n        \"comment\"      , keepComments ? this.comment : undefined\n    ]);\n};\n\n/**\n * Resolves this field's type references.\n * @returns {Field} `this`\n * @throws {Error} If any reference cannot be resolved\n */\nField.prototype.resolve = function resolve() {\n\n    if (this.resolved)\n        return this;\n\n    if ((this.typeDefault = types.defaults[this.type]) === undefined) { // if not a basic type, resolve it\n        this.resolvedType = (this.declaringField ? this.declaringField.parent : this.parent).lookupTypeOrEnum(this.type);\n        if (this.resolvedType instanceof Type)\n            this.typeDefault = null;\n        else // instanceof Enum\n            this.typeDefault = this.resolvedType.values[Object.keys(this.resolvedType.values)[0]]; // first defined\n    } else if (this.options && this.options.proto3_optional) {\n        // proto3 scalar value marked optional; should default to null\n        this.typeDefault = null;\n    }\n\n    // use explicitly set default value if present\n    if (this.options && this.options[\"default\"] != null) {\n        this.typeDefault = this.options[\"default\"];\n        if (this.resolvedType instanceof Enum && typeof this.typeDefault === \"string\")\n            this.typeDefault = this.resolvedType.values[this.typeDefault];\n    }\n\n    // remove unnecessary options\n    if (this.options) {\n        if (this.options.packed !== undefined && this.resolvedType && !(this.resolvedType instanceof Enum))\n            delete this.options.packed;\n        if (!Object.keys(this.options).length)\n            this.options = undefined;\n    }\n\n    // convert to internal data type if necesssary\n    if (this.long) {\n        var unsigned = this.type === \"uint64\" || this.type === \"fixed64\";\n        this.typeDefault = typeof this.typeDefault === \"string\"\n            ? util.Long.fromString(this.typeDefault, unsigned)\n            : util.Long.fromNumber(this.typeDefault, unsigned);\n\n        /* istanbul ignore else */\n        if (Object.freeze)\n            Object.freeze(this.typeDefault); // long instances are meant to be immutable anyway (i.e. use small int cache that even requires it)\n\n    } else if (types.long[this.type] !== undefined && typeof this.typeDefault === \"string\") {\n        this.typeDefault = parseInt(this.typeDefault, 10);\n    } else if (this.bytes && typeof this.typeDefault === \"string\") {\n        var buf;\n        if (util.base64.test(this.typeDefault))\n            util.base64.decode(this.typeDefault, buf = util.newBuffer(util.base64.length(this.typeDefault)), 0);\n        else\n            util.utf8.write(this.typeDefault, buf = util.newBuffer(util.utf8.length(this.typeDefault)), 0);\n        this.typeDefault = buf;\n    }\n\n    // take special care of maps and repeated fields\n    if (this.map)\n        this.defaultValue = util.emptyObject;\n    else if (this.repeated)\n        this.defaultValue = util.emptyArray;\n    else\n        this.defaultValue = this.typeDefault;\n\n    // ensure proper value on prototype\n    if (this.parent instanceof Type && this.parent._ctor)\n        this.parent._ctor.prototype[this.name] = this.defaultValue;\n\n    // derive the proto/JSON names\n    if (this.protoName === undefined)\n        this.protoName = this.name;\n    if (this.jsonName === undefined)\n        this.jsonName = util.jsonName(this.protoName);\n\n    return ReflectionObject.prototype.resolve.call(this);\n};\n\n/**\n * Infers field features from legacy syntax that may have been specified differently.\n * in older editions.\n * @param {string|undefined} edition The edition this proto is on, or undefined if pre-editions\n * @returns {object} The feature values to override\n */\nField.prototype._inferLegacyProtoFeatures = function _inferLegacyProtoFeatures(edition) {\n    if (edition !== \"proto2\" && edition !== \"proto3\") {\n        return {};\n    }\n\n    var features = {};\n\n    if (this.rule === \"required\") {\n        features.field_presence = \"LEGACY_REQUIRED\";\n    }\n    if (this.parent && types.defaults[this.type] === undefined) {\n        // We can't use resolvedType because types may not have been resolved yet.  However,\n        // legacy groups are always in the same scope as the field so we don't have to do a\n        // full scan of the tree.\n        var type = this.parent.get(this.type.split(\".\").pop());\n        if (type && type instanceof Type && type.group) {\n            features.message_encoding = \"DELIMITED\";\n        }\n    }\n    if (this.getOption(\"packed\") === true) {\n        features.repeated_field_encoding = \"PACKED\";\n    } else if (this.getOption(\"packed\") === false) {\n        features.repeated_field_encoding = \"EXPANDED\";\n    }\n    return features;\n};\n\n/**\n * @override\n */\nField.prototype._resolveFeatures = function _resolveFeatures(edition) {\n    return ReflectionObject.prototype._resolveFeatures.call(this, this._edition || edition);\n};\n\n/**\n * Decorator function as returned by {@link Field.d} and {@link MapField.d} (TypeScript).\n * @typedef FieldDecorator\n * @type {function}\n * @param {Object} prototype Target prototype\n * @param {string} fieldName Field name\n * @returns {undefined}\n * @deprecated Legacy TypeScript decorator support. Will be removed in a future release.\n */\n\n/**\n * Field decorator (TypeScript).\n * @name Field.d\n * @function\n * @param {number} fieldId Field id\n * @param {\"double\"|\"float\"|\"int32\"|\"uint32\"|\"sint32\"|\"fixed32\"|\"sfixed32\"|\"int64\"|\"uint64\"|\"sint64\"|\"fixed64\"|\"sfixed64\"|\"string\"|\"bool\"|\"bytes\"|Object} fieldType Field type\n * @param {\"optional\"|\"required\"|\"repeated\"} [fieldRule=\"optional\"] Field rule\n * @param {T} [defaultValue] Default value\n * @returns {FieldDecorator} Decorator function\n * @template T extends number | number[] | Long | Long[] | string | string[] | boolean | boolean[] | Uint8Array | Uint8Array[] | Buffer | Buffer[]\n * @deprecated Legacy TypeScript decorator support. Will be removed in a future release.\n */\nField.d = function decorateField(fieldId, fieldType, fieldRule, defaultValue) {\n\n    // submessage: decorate the submessage and use its name as the type\n    if (typeof fieldType === \"function\")\n        fieldType = util.decorateType(fieldType).name;\n\n    // enum reference: create a reflected copy of the enum and keep reuseing it\n    else if (fieldType && typeof fieldType === \"object\")\n        fieldType = util.decorateEnum(fieldType).name;\n\n    return function fieldDecorator(prototype, fieldName) {\n        util.decorateType(prototype.constructor)\n            .add(new Field(fieldName, fieldId, fieldType, fieldRule, { \"default\": defaultValue }));\n    };\n};\n\n// Sets up cyclic dependencies (called in index-light)\nField._configure = function configure(Type_) {\n    Type = Type_;\n};\n\n/**\n * Field decorator (TypeScript).\n * @name Field.d\n * @function\n * @param {number} fieldId Field id\n * @param {Constructor<T>|string} fieldType Field type\n * @param {\"optional\"|\"required\"|\"repeated\"} [fieldRule=\"optional\"] Field rule\n * @returns {FieldDecorator} Decorator function\n * @template T extends Message<T>\n * @variation 2\n * @deprecated Legacy TypeScript decorator support. Will be removed in a future release.\n */\n// like Field.d but without a default value\n","\"use strict\";\nmodule.exports = OneOf;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\nOneOf.prototype = Object.create(ReflectionObject.prototype, {\n    constructor: {\n        value: OneOf,\n        writable: true,\n        enumerable: false,\n        configurable: true\n    }\n});\nOneOf.className = \"OneOf\";\n\nvar Field = require(\"./field\"),\n    util  = require(\"./util\");\n\n/**\n * Constructs a new oneof instance.\n * @classdesc Reflected oneof.\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Oneof name\n * @param {string[]|Object.<string,*>} [fieldNames] Field names\n * @param {Object.<string,*>} [options] Declared options\n * @param {string} [comment] Comment associated with this field\n */\nfunction OneOf(name, fieldNames, options, comment) {\n    if (!Array.isArray(fieldNames)) {\n        options = fieldNames;\n        fieldNames = undefined;\n    }\n    ReflectionObject.call(this, name, options);\n\n    /* istanbul ignore if */\n    if (!(fieldNames === undefined || Array.isArray(fieldNames)))\n        throw TypeError(\"fieldNames must be an Array\");\n\n    /**\n     * Field names that belong to this oneof.\n     * @type {string[]}\n     */\n    this.oneof = fieldNames || []; // toJSON, marker\n\n    /**\n     * Fields that belong to this oneof as an array for iteration.\n     * @type {Field[]}\n     * @readonly\n     */\n    this.fieldsArray = []; // declared readonly for conformance, possibly not yet added to parent\n\n    /**\n     * Comment for this field.\n     * @type {string|null}\n     */\n    this.comment = comment;\n}\n\n/**\n * Oneof descriptor.\n * @interface IOneOf\n * @property {Array.<string>} oneof Oneof field names\n * @property {Object.<string,*>} [options] Oneof options\n * @property {string|null} [comment] Oneof comment\n */\n\n/**\n * Constructs a oneof from a oneof descriptor.\n * @param {string} name Oneof name\n * @param {IOneOf} json Oneof descriptor\n * @returns {OneOf} Created oneof\n * @throws {TypeError} If arguments are invalid\n */\nOneOf.fromJSON = function fromJSON(name, json) {\n    return new OneOf(name, json.oneof, json.options, json.comment);\n};\n\n/**\n * Converts this oneof to a oneof descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IOneOf} Oneof descriptor\n */\nOneOf.prototype.toJSON = function toJSON(toJSONOptions) {\n    var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n    return util.toObject([\n        \"options\" , this.options,\n        \"oneof\"   , this.oneof,\n        \"comment\" , keepComments ? this.comment : undefined\n    ]);\n};\n\n/**\n * Adds the fields of the specified oneof to the parent if not already done so.\n * @param {OneOf} oneof The oneof\n * @returns {undefined}\n * @inner\n * @ignore\n */\nfunction addFieldsToParent(oneof) {\n    if (oneof.parent)\n        for (var i = 0; i < oneof.fieldsArray.length; ++i)\n            if (!oneof.fieldsArray[i].parent)\n                oneof.parent.add(oneof.fieldsArray[i]);\n}\n\n/**\n * Adds a field to this oneof and removes it from its current parent, if any.\n * @param {Field} field Field to add\n * @returns {OneOf} `this`\n */\nOneOf.prototype.add = function add(field) {\n\n    /* istanbul ignore if */\n    if (!(field instanceof Field))\n        throw TypeError(\"field must be a Field\");\n\n    if (field.parent && field.parent !== this.parent)\n        field.parent.remove(field);\n    this.oneof.push(field.name);\n    this.fieldsArray.push(field);\n    field.partOf = this; // field.parent remains null\n    addFieldsToParent(this);\n    return this;\n};\n\n/**\n * Removes a field from this oneof and puts it back to the oneof's parent.\n * @param {Field} field Field to remove\n * @returns {OneOf} `this`\n */\nOneOf.prototype.remove = function remove(field) {\n\n    /* istanbul ignore if */\n    if (!(field instanceof Field))\n        throw TypeError(\"field must be a Field\");\n\n    var index = this.fieldsArray.indexOf(field);\n\n    /* istanbul ignore if */\n    if (index < 0)\n        throw Error(field + \" is not a member of \" + this);\n\n    this.fieldsArray.splice(index, 1);\n    index = this.oneof.indexOf(field.name);\n\n    /* istanbul ignore else */\n    if (index > -1) // theoretical\n        this.oneof.splice(index, 1);\n\n    field.partOf = null;\n    return this;\n};\n\n/**\n * @override\n */\nOneOf.prototype.onAdd = function onAdd(parent) {\n    ReflectionObject.prototype.onAdd.call(this, parent);\n    var self = this;\n    // Collect present fields\n    for (var i = 0; i < this.oneof.length; ++i) {\n        var field = parent.get(this.oneof[i]);\n        if (field && !field.partOf) {\n            field.partOf = self;\n            self.fieldsArray.push(field);\n        }\n    }\n    // Add not yet present fields\n    addFieldsToParent(this);\n};\n\n/**\n * @override\n */\nOneOf.prototype.onRemove = function onRemove(parent) {\n    for (var i = 0, field; i < this.fieldsArray.length; ++i)\n        if ((field = this.fieldsArray[i]).parent)\n            field.parent.remove(field);\n    ReflectionObject.prototype.onRemove.call(this, parent);\n};\n\n/**\n * Determines whether this field corresponds to a synthetic oneof created for\n * a proto3 optional field.  No behavioral logic should depend on this, but it\n * can be relevant for reflection.\n * @name OneOf#isProto3Optional\n * @type {boolean}\n * @readonly\n */\nObject.defineProperty(OneOf.prototype, \"isProto3Optional\", {\n    get: function() {\n        if (this.fieldsArray == null || this.fieldsArray.length !== 1) {\n            return false;\n        }\n\n        var field = this.fieldsArray[0];\n        return field.options != null && field.options[\"proto3_optional\"] === true;\n    }\n});\n\n/**\n * Decorator function as returned by {@link OneOf.d} (TypeScript).\n * @typedef OneOfDecorator\n * @type {function}\n * @param {Object} prototype Target prototype\n * @param {string} oneofName OneOf name\n * @returns {undefined}\n * @deprecated Legacy TypeScript decorator support. Will be removed in a future release.\n */\n\n/**\n * OneOf decorator (TypeScript).\n * @function\n * @param {...string} fieldNames Field names\n * @returns {OneOfDecorator} Decorator function\n * @template T extends string\n * @deprecated Legacy TypeScript decorator support. Will be removed in a future release.\n */\nOneOf.d = function decorateOneOf() {\n    var fieldNames = new Array(arguments.length),\n        index = 0;\n    while (index < arguments.length)\n        fieldNames[index] = arguments[index++];\n    return function oneOfDecorator(prototype, oneofName) {\n        util.decorateType(prototype.constructor)\n            .add(new OneOf(oneofName, fieldNames));\n        Object.defineProperty(prototype, oneofName, {\n            get: util.oneOfGetter(fieldNames),\n            set: util.oneOfSetter(fieldNames)\n        });\n    };\n};\n","\"use strict\";\nmodule.exports = ReflectionObject;\n\nReflectionObject.className = \"ReflectionObject\";\n\nconst OneOf = require(\"./oneof\");\nvar util = require(\"./util\");\n\nvar Root; // cyclic\n\n/* eslint-disable no-warning-comments */\n// TODO: Replace with embedded proto.\nvar editions2024Defaults = {enum_type: \"OPEN\", field_presence: \"EXPLICIT\", json_format: \"ALLOW\", message_encoding: \"LENGTH_PREFIXED\", repeated_field_encoding: \"PACKED\", utf8_validation: \"VERIFY\", enforce_naming_style: \"STYLE2024\", default_symbol_visibility: \"EXPORT_TOP_LEVEL\" };\nvar editions2023Defaults = {enum_type: \"OPEN\", field_presence: \"EXPLICIT\", json_format: \"ALLOW\", message_encoding: \"LENGTH_PREFIXED\", repeated_field_encoding: \"PACKED\", utf8_validation: \"VERIFY\", enforce_naming_style: \"STYLE_LEGACY\", default_symbol_visibility: \"EXPORT_ALL\" };\nvar proto2Defaults = {enum_type: \"CLOSED\", field_presence: \"EXPLICIT\", json_format: \"LEGACY_BEST_EFFORT\", message_encoding: \"LENGTH_PREFIXED\", repeated_field_encoding: \"EXPANDED\", utf8_validation: \"NONE\", enforce_naming_style: \"STYLE_LEGACY\", default_symbol_visibility: \"EXPORT_ALL\" };\nvar proto3Defaults = {enum_type: \"OPEN\", field_presence: \"IMPLICIT\", json_format: \"ALLOW\", message_encoding: \"LENGTH_PREFIXED\", repeated_field_encoding: \"PACKED\", utf8_validation: \"VERIFY\", enforce_naming_style: \"STYLE_LEGACY\", default_symbol_visibility: \"EXPORT_ALL\" };\n\n/**\n * Constructs a new reflection object instance.\n * @classdesc Base class of all reflection objects.\n * @constructor\n * @param {string} name Object name\n * @param {Object.<string,*>} [options] Declared options\n * @abstract\n */\nfunction ReflectionObject(name, options) {\n\n    if (!util.isString(name))\n        throw TypeError(\"name must be a string\");\n\n    if (options && !util.isObject(options))\n        throw TypeError(\"options must be an object\");\n\n    /**\n     * Options.\n     * @type {Object.<string,*>|undefined}\n     */\n    this.options = options; // toJSON\n\n    /**\n     * Parsed Options.\n     * @type {Array.<Object.<string,*>>|undefined}\n     */\n    this.parsedOptions = null;\n\n    /**\n     * Unique name within its namespace.\n     * @type {string}\n     */\n    this.name = name;\n\n    /**\n     * The edition specified for this object.  Only relevant for top-level objects.\n     * @type {string}\n     * @private\n     */\n    this._edition = null;\n\n    /**\n     * The default edition to use for this object if none is specified.  For legacy reasons,\n     * this is proto2 except in the JSON parsing case where it was proto3.\n     * @type {string}\n     * @private\n     */\n    this._defaultEdition = \"proto2\";\n\n    /**\n     * Resolved Features.\n     * @type {object}\n     * @private\n     */\n    this._features = {};\n\n    /**\n     * Whether or not features have been resolved.\n     * @type {boolean}\n     * @private\n     */\n    this._featuresResolved = false;\n\n    /**\n     * Parent namespace.\n     * @type {Namespace|null}\n     */\n    this.parent = null;\n\n    /**\n     * Whether already resolved or not.\n     * @type {boolean}\n     */\n    this.resolved = false;\n\n    /**\n     * Comment text, if any.\n     * @type {string|null}\n     */\n    this.comment = null;\n\n    /**\n     * Defining file name.\n     * @type {string|null}\n     */\n    this.filename = null;\n}\n\nObject.defineProperties(ReflectionObject.prototype, {\n\n    /**\n     * Reference to the root namespace.\n     * @name ReflectionObject#root\n     * @type {Root}\n     * @readonly\n     */\n    root: {\n        get: function() {\n            var ptr = this;\n            while (ptr.parent !== null)\n                ptr = ptr.parent;\n            return ptr;\n        }\n    },\n\n    /**\n     * Full name including leading dot.\n     * @name ReflectionObject#fullName\n     * @type {string}\n     * @readonly\n     */\n    fullName: {\n        get: function() {\n            var path = [ this.name ],\n                ptr = this.parent;\n            while (ptr) {\n                path.unshift(ptr.name);\n                ptr = ptr.parent;\n            }\n            return path.join(\".\");\n        }\n    }\n});\n\n/**\n * Converts this reflection object to its descriptor representation.\n * @returns {Object.<string,*>} Descriptor\n */\nReflectionObject.prototype.toJSON = /* istanbul ignore next */ function toJSON() {\n    throw Error(); // not implemented, shouldn't happen\n};\n\n/**\n * Called when this object is added to a parent.\n * @param {ReflectionObject} parent Parent added to\n * @returns {undefined}\n */\nReflectionObject.prototype.onAdd = function onAdd(parent) {\n    if (this.parent && this.parent !== parent)\n        this.parent.remove(this);\n    this.parent = parent;\n    this.resolved = false;\n    var root = parent.root;\n    if (root instanceof Root)\n        root._handleAdd(this);\n};\n\n/**\n * Called when this object is removed from a parent.\n * @param {ReflectionObject} parent Parent removed from\n * @returns {undefined}\n */\nReflectionObject.prototype.onRemove = function onRemove(parent) {\n    var root = parent.root;\n    if (root instanceof Root)\n        root._handleRemove(this);\n    this.parent = null;\n    this.resolved = false;\n};\n\n/**\n * Resolves this objects type references.\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.resolve = function resolve() {\n    if (this.resolved)\n        return this;\n    if (this.root instanceof Root)\n        this.resolved = true; // only if part of a root\n    return this;\n};\n\n/**\n * Resolves this objects editions features.\n * @param {string} edition The edition we're currently resolving for.\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype._resolveFeaturesRecursive = function _resolveFeaturesRecursive(edition) {\n    return this._resolveFeatures(this._edition || edition);\n};\n\n/**\n * Resolves child features from parent features\n * @param {string} edition The edition we're currently resolving for.\n * @returns {undefined}\n */\nReflectionObject.prototype._resolveFeatures = function _resolveFeatures(edition) {\n    if (this._featuresResolved) {\n        return;\n    }\n\n    var defaults = {};\n\n    /* istanbul ignore if */\n    if (!edition) {\n        throw new Error(\"Unknown edition for \" + this.fullName);\n    }\n\n    var protoFeatures = util.merge({}, this.options && this.options.features,\n        this._inferLegacyProtoFeatures(edition));\n\n    if (this._edition) {\n        // For a namespace marked with a specific edition, reset defaults.\n        /* istanbul ignore else */\n        if (edition === \"proto2\") {\n            defaults = Object.assign({}, proto2Defaults);\n        } else if (edition === \"proto3\") {\n            defaults = Object.assign({}, proto3Defaults);\n        } else if (edition === \"2023\") {\n            defaults = Object.assign({}, editions2023Defaults);\n        } else if (edition === \"2024\") {\n            defaults = Object.assign({}, editions2024Defaults);\n        } else {\n            throw new Error(\"Unknown edition: \" + edition);\n        }\n        this._features = util.merge(defaults, protoFeatures);\n    } else {\n        // fields in Oneofs aren't actually children of them, so we have to\n        // special-case it\n        /* istanbul ignore else */\n        if (this.partOf instanceof OneOf) {\n            var lexicalParentFeaturesCopy = util.merge({}, this.partOf._features);\n            this._features = util.merge(lexicalParentFeaturesCopy, protoFeatures);\n        } else if (this.declaringField) {\n            // Skip feature resolution of sister fields.\n        } else if (this.parent) {\n            var parentFeaturesCopy = util.merge({}, this.parent._features);\n            this._features = util.merge(parentFeaturesCopy, protoFeatures);\n        } else {\n            throw new Error(\"Unable to find a parent for \" + this.fullName);\n        }\n    }\n    if (this.extensionField) {\n        // Sister fields should have the same features as their extensions.\n        this.extensionField._features = this._features;\n    }\n    this._featuresResolved = true;\n};\n\n/**\n * Infers features from legacy syntax that may have been specified differently.\n * in older editions.\n * @param {string|undefined} edition The edition this proto is on, or undefined if pre-editions\n * @returns {object} The feature values to override\n */\nReflectionObject.prototype._inferLegacyProtoFeatures = function _inferLegacyProtoFeatures(/*edition*/) {\n    return {};\n};\n\n/**\n * Gets an option value.\n * @param {string} name Option name\n * @returns {*} Option value or `undefined` if not set\n */\nReflectionObject.prototype.getOption = function getOption(name) {\n    if (this.options && Object.prototype.hasOwnProperty.call(this.options, name))\n        return this.options[name];\n    return undefined;\n};\n\n/**\n * Sets an option.\n * @param {string} name Option name\n * @param {*} value Option value\n * @param {boolean|undefined} [ifNotSet] Sets the option only if it isn't currently set\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.setOption = function setOption(name, value, ifNotSet) {\n    if (name === \"__proto__\")\n        return this;\n    if (!this.options)\n        this.options = {};\n    if (/^features\\./.test(name)) {\n        util.setProperty(this.options, name, value, ifNotSet);\n    } else {\n        var prev = this.getOption(name);\n        if (!ifNotSet || prev === undefined) {\n            if (prev !== value) this.resolved = false;\n            this.options[name] = value;\n        }\n    }\n\n    return this;\n};\n\n/**\n * Sets a parsed option.\n * @param {string} name parsed Option name\n * @param {*} value Option value\n * @param {string} propName dot '.' delimited full path of property within the option to set. if undefined\\empty, will add a new option with that value\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.setParsedOption = function setParsedOption(name, value, propName) {\n    if (name === \"__proto__\")\n        return this;\n    if (!this.parsedOptions) {\n        this.parsedOptions = [];\n    }\n    var parsedOptions = this.parsedOptions;\n    if (propName) {\n        // If setting a sub property of an option then try to merge it\n        // with an existing option\n        var opt = parsedOptions.find(function (opt) {\n            return Object.prototype.hasOwnProperty.call(opt, name);\n        });\n        if (opt) {\n            // If we found an existing option - just merge the property value\n            // (If it's a feature, will just write over)\n            var newValue = opt[name];\n            util.setProperty(newValue, propName, value);\n        } else {\n            // otherwise, create a new option, set its property and add it to the list\n            opt = {};\n            opt[name] = util.setProperty({}, propName, value);\n            parsedOptions.push(opt);\n        }\n    } else {\n        // Always create a new option when setting the value of the option itself\n        var newOpt = {};\n        newOpt[name] = value;\n        parsedOptions.push(newOpt);\n    }\n\n    return this;\n};\n\n/**\n * Sets multiple options.\n * @param {Object.<string,*>} options Options to set\n * @param {boolean} [ifNotSet] Sets an option only if it isn't currently set\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.setOptions = function setOptions(options, ifNotSet) {\n    if (options)\n        for (var keys = Object.keys(options), i = 0; i < keys.length; ++i)\n            this.setOption(keys[i], options[keys[i]], ifNotSet);\n    return this;\n};\n\n/**\n * Converts this instance to its string representation.\n * @name ReflectionObject#toString\n * @function\n * @returns {string} Class name[, space, full name]\n */\nObject.defineProperty(ReflectionObject.prototype, \"toString\", {\n    value: function toString() {\n        var className = this.constructor.className,\n            fullName  = this.fullName;\n        if (fullName.length)\n            return className + \" \" + fullName;\n        return className;\n    },\n    writable: true,\n    enumerable: false,\n    configurable: true\n});\n\n/**\n * Converts the edition this object is pinned to for JSON format.\n * @returns {string|undefined} The edition string for JSON representation\n */\nReflectionObject.prototype._editionToJSON = function _editionToJSON() {\n    if (!this._edition || this._edition === \"proto3\") {\n        // Avoid emitting proto3 since we need to default to it for backwards\n        // compatibility anyway.\n        return undefined;\n    }\n    return this._edition;\n};\n\n// Sets up cyclic dependencies (called in index-light)\nReflectionObject._configure = function(Root_) {\n    Root = Root_;\n};\n","\"use strict\";\nmodule.exports = Enum;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\nEnum.prototype = Object.create(ReflectionObject.prototype, {\n    constructor: {\n        value: Enum,\n        writable: true,\n        enumerable: false,\n        configurable: true\n    }\n});\nEnum.className = \"Enum\";\n\nvar Namespace = require(\"./namespace\"),\n    util = require(\"./util\");\n\n/**\n * Constructs a new enum instance.\n * @classdesc Reflected enum.\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {Object.<string,number>} [values] Enum values as an object, by name\n * @param {Object.<string,*>} [options] Declared options\n * @param {string} [comment] The comment for this enum\n * @param {Object.<string,string|null>} [comments] The value comments for this enum\n * @param {Object.<string,Object<string,*>>|undefined} [valuesOptions] The value options for this enum\n */\nfunction Enum(name, values, options, comment, comments, valuesOptions) {\n    ReflectionObject.call(this, name, options);\n\n    if (values && typeof values !== \"object\")\n        throw TypeError(\"values must be an object\");\n\n    /**\n     * Enum values by id.\n     * @type {Object.<number,string>}\n     */\n    this.valuesById = Object.create(null);\n\n    /**\n     * Enum values by name.\n     * @type {Object.<string,number>}\n     */\n    this.values = Object.create(this.valuesById); // toJSON, marker\n\n    /**\n     * Enum comment text.\n     * @type {string|null}\n     */\n    this.comment = comment;\n\n    /**\n     * Value comment texts, if any.\n     * @type {Object.<string,string|null>}\n     */\n    this.comments = comments || {};\n\n    /**\n     * Values options, if any\n     * @type {Object<string, Object<string, *>>|undefined}\n     */\n    this.valuesOptions = valuesOptions;\n\n    /**\n     * Resolved values features, if any\n     * @type {Object<string, Object<string, *>>|undefined}\n     */\n    this._valuesFeatures = {};\n\n    /**\n     * Reserved ranges, if any.\n     * @type {Array.<number[]|string>}\n     */\n    this.reserved = undefined; // toJSON\n\n    // Note that values inherit valuesById on their prototype which makes them a TypeScript-\n    // compatible enum. This is used by pbts to write actual enum definitions that work for\n    // static and reflection code alike instead of emitting generic object definitions.\n\n    if (values)\n        for (var keys = Object.keys(values), i = 0; i < keys.length; ++i)\n            if (keys[i] !== \"__proto__\" && typeof values[keys[i]] === \"number\") { // use forward entries only\n                this.values[keys[i]] = values[keys[i]];\n                if (this.valuesById[values[keys[i]]] === undefined)\n                    this.valuesById[values[keys[i]]] = keys[i];\n            }\n}\n\n/**\n * @override\n */\nEnum.prototype._resolveFeatures = function _resolveFeatures(edition) {\n    edition = this._edition || edition;\n    ReflectionObject.prototype._resolveFeatures.call(this, edition);\n\n    Object.keys(this.values).forEach(key => {\n        var parentFeaturesCopy = util.merge({}, this._features);\n        this._valuesFeatures[key] = util.merge(parentFeaturesCopy, this.valuesOptions && this.valuesOptions[key] && this.valuesOptions[key].features || {});\n    });\n\n    return this;\n};\n\n/**\n * Enum descriptor.\n * @interface IEnum\n * @property {string} [edition] Edition\n * @property {Object.<string,number>} values Enum values\n * @property {Object.<string,*>} [options] Enum options\n * @property {Object.<string,Object.<string,*>>} [valuesOptions] Enum value options\n * @property {Array.<number[]|string>} [reserved] Reserved ranges\n * @property {string|null} [comment] Enum comment\n * @property {Object.<string,string|null>} [comments] Value comments\n */\n\n/**\n * Constructs an enum from an enum descriptor.\n * @param {string} name Enum name\n * @param {IEnum} json Enum descriptor\n * @returns {Enum} Created enum\n * @throws {TypeError} If arguments are invalid\n */\nEnum.fromJSON = function fromJSON(name, json) {\n    var enm = new Enum(name, json.values, json.options, json.comment, json.comments, json.valuesOptions);\n    enm.reserved = json.reserved;\n    if (json.edition)\n        enm._edition = json.edition;\n    enm._defaultEdition = \"proto3\";  // For backwards-compatibility.\n    return enm;\n};\n\n/**\n * Converts this enum to an enum descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IEnum} Enum descriptor\n */\nEnum.prototype.toJSON = function toJSON(toJSONOptions) {\n    var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n    return util.toObject([\n        \"edition\"       , this._editionToJSON(),\n        \"options\"       , this.options,\n        \"valuesOptions\" , this.valuesOptions,\n        \"values\"        , this.values,\n        \"reserved\"      , this.reserved && this.reserved.length ? this.reserved : undefined,\n        \"comment\"       , keepComments ? this.comment : undefined,\n        \"comments\"      , keepComments ? this.comments : undefined\n    ]);\n};\n\n/**\n * Adds a value to this enum.\n * @param {string} name Value name\n * @param {number} id Value id\n * @param {string} [comment] Comment, if any\n * @param {Object.<string, *>|undefined} [options] Options, if any\n * @returns {Enum} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If there is already a value with this name or id\n */\nEnum.prototype.add = function add(name, id, comment, options) {\n    // utilized by the parser but not by .fromJSON\n\n    if (!util.isString(name))\n        throw TypeError(\"name must be a string\");\n\n    if (!util.isInteger(id))\n        throw TypeError(\"id must be an integer\");\n\n    if (name === \"__proto__\")\n        return this;\n\n    if (this.values[name] !== undefined)\n        throw Error(\"duplicate name '\" + name + \"' in \" + this);\n\n    if (this.isReservedId(id))\n        throw Error(\"id \" + id + \" is reserved in \" + this);\n\n    if (this.isReservedName(name))\n        throw Error(\"name '\" + name + \"' is reserved in \" + this);\n\n    if (this.valuesById[id] !== undefined) {\n        if (!(this.options && this.options.allow_alias))\n            throw Error(\"duplicate id \" + id + \" in \" + this);\n        this.values[name] = id;\n    } else\n        this.valuesById[this.values[name] = id] = name;\n\n    if (options) {\n        if (this.valuesOptions === undefined)\n            this.valuesOptions = {};\n        this.valuesOptions[name] = options || null;\n    }\n\n    this.comments[name] = comment || null;\n    return this;\n};\n\n/**\n * Removes a value from this enum\n * @param {string} name Value name\n * @returns {Enum} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If `name` is not a name of this enum\n */\nEnum.prototype.remove = function remove(name) {\n\n    if (!util.isString(name))\n        throw TypeError(\"name must be a string\");\n\n    var val = this.values[name];\n    if (val == null)\n        throw Error(\"name '\" + name + \"' does not exist in \" + this);\n\n    delete this.valuesById[val];\n    delete this.values[name];\n    delete this.comments[name];\n    if (this.valuesOptions)\n        delete this.valuesOptions[name];\n\n    return this;\n};\n\n/**\n * Tests if the specified id is reserved.\n * @param {number} id Id to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nEnum.prototype.isReservedId = function isReservedId(id) {\n    return Namespace.isReservedId(this.reserved, id);\n};\n\n/**\n * Tests if the specified name is reserved.\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nEnum.prototype.isReservedName = function isReservedName(name) {\n    return Namespace.isReservedName(this.reserved, name);\n};\n","\"use strict\";\nmodule.exports = encoder;\n\nvar Enum     = require(\"./enum\"),\n    types    = require(\"./types\"),\n    util     = require(\"./util\");\n\n/**\n * Generates a partial message type encoder.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {number} fieldIndex Field index\n * @param {string} ref Variable reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genTypePartial(gen, field, fieldIndex, ref) {\n    return field.delimited\n        ? gen(\"types[%i].encode(%s,w.uint32(%i),q+1).uint32(%i)\", fieldIndex, ref, (field.id << 3 | 3) >>> 0, (field.id << 3 | 4) >>> 0)\n        : gen(\"types[%i].encode(%s,w.uint32(%i).fork(),q+1).ldelim()\", fieldIndex, ref, (field.id << 3 | 2) >>> 0);\n}\n\n/**\n * Generates an encoder specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nfunction encoder(mtype) {\n    /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n    var gen = util.codegen([\"m\", \"w\", \"q\"])\n    (\"if(!w)\")\n        (\"w=Writer.create()\")\n    (\"if(q===undefined)q=0\")\n    (\"if(q>util.recursionLimit)\")\n        (\"throw Error(\\\"max depth exceeded\\\")\");\n\n    var i, ref;\n\n    // \"when a message is serialized its known fields should be written sequentially by field number\"\n    var fields = /* initializes */ mtype.fieldsArray.slice().sort(util.compareFieldsById);\n\n    for (var i = 0; i < fields.length; ++i) {\n        var field    = fields[i].resolve(),\n            index    = mtype._fieldsArray.indexOf(field),\n            type     = field.resolvedType instanceof Enum ? \"int32\" : field.type,\n            wireType = types.basic[type];\n            ref      = \"m\" + util.safeProp(field.name);\n\n        // Map fields\n        if (field.map) {\n            gen\n    (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j)){\", ref, field.name) // !== undefined && !== null\n        (\"for(var ks=Object.keys(%s),i=0;i<ks.length;++i){\", ref);\n            if (field.keyType === \"bool\") gen\n            (\"w.uint32(%i).fork().uint32(%i).bool(util.boolFromKey(ks[i]))\", (field.id << 3 | 2) >>> 0, 8 | types.mapKey[field.keyType]);\n            else if (types.long[field.keyType] !== undefined) gen\n            (\"w.uint32(%i).fork().uint32(%i).%s(util.longFromKey(ks[i],%j))\", (field.id << 3 | 2) >>> 0, 8 | types.mapKey[field.keyType], field.keyType, field.keyType === \"uint64\" || field.keyType === \"fixed64\");\n            else gen\n            (\"w.uint32(%i).fork().uint32(%i).%s(ks[i])\", (field.id << 3 | 2) >>> 0, 8 | types.mapKey[field.keyType], field.keyType);\n            if (wireType === undefined) gen\n            (\"types[%i].encode(%s[ks[i]],w.uint32(18).fork(),q+1).ldelim().ldelim()\", index, ref); // can't be groups\n            else gen\n            (\".uint32(%i).%s(%s[ks[i]]).ldelim()\", 16 | wireType, type, ref);\n            gen\n        (\"}\")\n    (\"}\");\n\n            // Repeated fields\n        } else if (field.repeated) { gen\n    (\"if(%s!=null&&%s.length){\", ref, ref); // !== undefined && !== null\n\n            // Packed repeated\n            if (field.packed && types.packed[type] !== undefined) { gen\n\n        (\"w.uint32(%i).%ss(%s)\", (field.id << 3 | 2) >>> 0, type, ref);\n\n            // Non-packed\n            } else { gen\n\n        (\"for(var i=0;i<%s.length;++i)\", ref);\n                if (wireType === undefined)\n            genTypePartial(gen, field, index, ref + \"[i]\");\n                else gen\n            (\"w.uint32(%i).%s(%s[i])\", (field.id << 3 | wireType) >>> 0, type, ref);\n\n            } gen\n    (\"}\");\n\n        // Non-repeated\n        } else {\n            if (!field.required)\n                if (field.hasPresence || !(field.resolvedType instanceof Enum || types.basic[type] !== undefined)) gen\n    (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j))\", ref, field.name); // !== undefined && !== null\n                else if (field.resolvedType instanceof Enum) gen\n    (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j)&&%s!==%j)\", ref, field.name, ref, field.typeDefault);\n                else if (type === \"bool\") gen\n    (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j)&&%s!==false)\", ref, field.name, ref);\n                else if (type === \"string\") gen\n    (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j)&&%s!==\\\"\\\")\", ref, field.name, ref);\n                else if (type === \"bytes\") gen\n    (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j)&&%s.length)\", ref, field.name, ref);\n                else if (type === \"double\" || type === \"float\") gen\n    (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j)&&!Object.is(%s,0))\", ref, field.name, ref);\n                else if (types.long[type] !== undefined) gen\n    (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j)&&(typeof %s===\\\"object\\\"?%s.low||%s.high:%s!==0))\", ref, field.name, ref, ref, ref, ref);\n                else gen\n    (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j)&&%s!==0)\", ref, field.name, ref);\n\n            if (wireType === undefined)\n        genTypePartial(gen, field, index, ref);\n            else gen\n        (\"w.uint32(%i).%s(%s)\", (field.id << 3 | wireType) >>> 0, type, ref);\n\n        }\n    }\n\n    return gen\n    (\"if(m.$unknowns!=null&&Object.hasOwnProperty.call(m,\\\"$unknowns\\\"))\")\n        (\"for(var i=0;i<m.$unknowns.length;++i)\")\n            (\"w.raw(m.$unknowns[i])\")\n    (\"return w\");\n    /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n}\n","\"use strict\";\nexports = module.exports = require(\"./index-minimal\");\n\nexports.build = \"light\";\n\n/**\n * A node-style callback as used by {@link load} and {@link Root#load}.\n * @typedef LoadCallback\n * @type {function}\n * @param {Error|null} error Error, if any, otherwise `null`\n * @param {Root} [root] Root, if there hasn't been an error\n * @returns {undefined}\n */\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into a common root namespace and calls the callback.\n * @param {string|string[]} filename One or multiple files to load\n * @param {Root} root Root namespace, defaults to create a new one if omitted.\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n * @see {@link Root#load}\n */\nfunction load(filename, root, callback) {\n    if (typeof root === \"function\") {\n        callback = root;\n        root = new exports.Root();\n    } else if (!root)\n        root = new exports.Root();\n    return root.load(filename, callback);\n}\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into a common root namespace and calls the callback.\n * @name load\n * @function\n * @param {string|string[]} filename One or multiple files to load\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n * @see {@link Root#load}\n * @variation 2\n */\n// function load(filename:string, callback:LoadCallback):undefined\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into a common root namespace and returns a promise.\n * @name load\n * @function\n * @param {string|string[]} filename One or multiple files to load\n * @param {Root} [root] Root namespace, defaults to create a new one if omitted.\n * @returns {Promise<Root>} Promise\n * @see {@link Root#load}\n * @variation 3\n */\n// function load(filename:string, [root:Root]):Promise<Root>\n\nexports.load = load;\n\n/**\n * Synchronously loads one or multiple .proto or preprocessed .json files into a common root namespace (node only).\n * @param {string|string[]} filename One or multiple files to load\n * @param {Root} [root] Root namespace, defaults to create a new one if omitted.\n * @returns {Root} Root namespace\n * @throws {Error} If synchronous fetching is not supported (i.e. in browsers) or if a file's syntax is invalid\n * @see {@link Root#loadSync}\n */\nfunction loadSync(filename, root) {\n    if (!root)\n        root = new exports.Root();\n    return root.loadSync(filename);\n}\n\nexports.loadSync = loadSync;\n\n// Serialization\nexports.encoder          = require(\"./encoder\");\nexports.decoder          = require(\"./decoder\");\nexports.verifier         = require(\"./verifier\");\nexports.converter        = require(\"./converter\");\n\n// Reflection\nexports.ReflectionObject = require(\"./object\");\nexports.Namespace        = require(\"./namespace\");\nexports.Root             = require(\"./root\");\nexports.Enum             = require(\"./enum\");\nexports.Type             = require(\"./type\");\nexports.Field            = require(\"./field\");\nexports.OneOf            = require(\"./oneof\");\nexports.MapField         = require(\"./mapfield\");\nexports.Service          = require(\"./service\");\nexports.Method           = require(\"./method\");\n\n// Runtime\nexports.Message          = require(\"./message\");\nexports.wrappers         = require(\"./wrappers\");\n\n// Utility\nexports.types            = require(\"./types\");\nexports.util             = require(\"./util\");\n\n// Set up possibly cyclic reflection dependencies\nexports.ReflectionObject._configure(exports.Root);\nexports.Namespace._configure(exports.Type, exports.Service, exports.Enum);\nexports.Root._configure(exports.Type, undefined, {});\nexports.Field._configure(exports.Type);\n","// light library entry point.\n\n\"use strict\";\nmodule.exports = require(\"./src/index-light\");","// Copyright 2021 Google LLC\n// Copyright 2026 The protobuf.js Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// Derived from proto3-json-serializer v3.0.4 and modified by The protobuf.js Authors.\n\n\"use strict\";\nvar protobuf = require(\"../light\");\n\n/* global BigInt */\n\nvar Type = protobuf.Type,\n    Enum = protobuf.Enum,\n    util = protobuf.util;\n\nvar protojson = protobuf.protojson = module.exports = {};\n\nfunction isExtension(field) {\n    return Boolean(field.declaringField) || field.name.charAt(0) === \".\";\n}\n\nfunction extensionName(field) {\n    var df = field.declaringField || field,\n        full = df.fullName.charAt(0) === \".\" ? df.fullName.slice(1) : df.fullName;\n    return \"[\" + (df.protoName ? full.replace(/[^.]+$/, df.protoName) : full) + \"]\";\n}\n\nfunction indexField(index, key, field, type) {\n    var existing = index[key];\n    if (existing !== undefined && existing !== field)\n        throw Error(type.fullName + \": duplicate ProtoJSON field name \" + JSON.stringify(key));\n    index[key] = field;\n}\n\nfunction fieldsByJsonName(type) {\n    if (type._fieldsByJsonName)\n        return type._fieldsByJsonName;\n    var index = Object.create(null),\n        fields = type.fieldsArray,\n        i = 0;\n    for (; i < fields.length; ++i) {\n        var field = fields[i].resolve();\n        if (isExtension(field))\n            indexField(index, extensionName(field), field, type);\n        else {\n            indexField(index, field.name, field, type);\n            indexField(index, field.jsonName, field, type);\n            indexField(index, field.protoName, field, type);\n        }\n    }\n    type._fieldsByJsonName = index;\n    return index;\n}\n\n// --- reading scalars ---\n\nvar INT_RANGE = {\n    int32:    [\"-2147483648\", \"2147483647\"],\n    sint32:   [\"-2147483648\", \"2147483647\"],\n    sfixed32: [\"-2147483648\", \"2147483647\"],\n    uint32:   [\"0\", \"4294967295\"],\n    fixed32:  [\"0\", \"4294967295\"],\n    int64:    [\"-9223372036854775808\", \"9223372036854775807\"],\n    sint64:   [\"-9223372036854775808\", \"9223372036854775807\"],\n    sfixed64: [\"-9223372036854775808\", \"9223372036854775807\"],\n    uint64:   [\"0\", \"18446744073709551615\"],\n    fixed64:  [\"0\", \"18446744073709551615\"]\n};\n\nvar LONG_TYPE = { int64: 1, uint64: 1, sint64: 1, fixed64: 1, sfixed64: 1 };\n\nvar MAX_FLOAT = 3.4028234663852886e38;\nvar hasBigInt = typeof BigInt !== \"undefined\";\n\nvar NUMERIC_RE = /^[+-]?(?:[0-9]*\\.[0-9]+|[0-9]+\\.?)(?:[eE][+-]?[0-9]+)?$/;\n\nvar SKIP = {};\n\nfunction invalid(name, value, what) {\n    return Error(name + \": \" + what + \": \" + JSON.stringify(value));\n}\n\nfunction parseIntegerString(value, type, name) {\n    var str;\n    if (typeof value === \"number\") {\n        if (!isFinite(value) || Math.floor(value) !== value)\n            throw invalid(name, value, \"not an integer\");\n        str = numberToIntString(value);\n    } else if (typeof value === \"string\") {\n        if (value.length === 0 || /^\\s|\\s$/.test(value))\n            throw invalid(name, value, \"invalid integer\");\n        if (/^[+-]?[0-9]+$/.test(value))\n            str = value;\n        else if (NUMERIC_RE.test(value)) {\n            var num = Number(value);\n            if (!isFinite(num) || Math.floor(num) !== num)\n                throw invalid(name, value, \"not an integer\");\n            str = numberToIntString(num);\n        } else\n            throw invalid(name, value, \"invalid integer\");\n    } else\n        throw invalid(name, value, \"expected integer (number or string)\");\n\n    var range = INT_RANGE[type];\n    if (LONG_TYPE[type]) {\n        if (hasBigInt) {\n            var big = BigInt(str);\n            if (big < BigInt(range[0]) || big > BigInt(range[1]))\n                throw invalid(name, value, \"out of range for \" + type);\n        }\n    } else if (Number(str) < Number(range[0]) || Number(str) > Number(range[1]))\n        throw invalid(name, value, \"out of range for \" + type);\n    return str;\n}\n\nfunction parseMapIntegerKey(key, type, name) {\n    var unsigned = type === \"uint32\" || type === \"fixed32\" || type === \"uint64\" || type === \"fixed64\";\n    if (!(unsigned ? /^[0-9]+$/ : /^-?[0-9]+$/).test(key))\n        throw invalid(name, key, \"invalid \" + type + \" map key\");\n    if (hasBigInt) {\n        var big = BigInt(key),\n            range = INT_RANGE[type];\n        if (big < BigInt(range[0]) || big > BigInt(range[1]))\n            throw invalid(name, key, \"out of range for \" + type + \" map key\");\n        return big.toString();\n    }\n    parseIntegerString(key, type, name);\n    if (LONG_TYPE[type]) {\n        var normalized = key.replace(/^-?0+(?=\\d)/, key.charAt(0) === \"-\" ? \"-\" : \"\");\n        return normalized === \"-0\" ? \"0\" : normalized;\n    }\n    return String(Number(key));\n}\n\nfunction numberToIntString(num) {\n    if (num >= -9007199254740991 && num <= 9007199254740991)\n        return String(num);\n    return num.toFixed(0);\n}\n\nfunction parseFloat32Or64(value, isFloat, name) {\n    var num;\n    if (typeof value === \"number\") {\n        if (!isFinite(value))\n            throw invalid(name, value, \"number out of range\");\n        num = value;\n    } else if (value === \"NaN\")\n        return NaN;\n    else if (value === \"Infinity\")\n        return Infinity;\n    else if (value === \"-Infinity\")\n        return -Infinity;\n    else if (typeof value === \"string\") {\n        if (value.length === 0 || /^\\s|\\s$/.test(value) || !NUMERIC_RE.test(value))\n            throw invalid(name, value, \"invalid number\");\n        num = Number(value);\n        if (!isFinite(num))\n            throw invalid(name, value, \"invalid number\");\n    } else\n        throw invalid(name, value, \"expected number\");\n    if (isFloat && Math.abs(num) > MAX_FLOAT)\n        throw invalid(name, value, \"out of range for float\");\n    return num;\n}\n\nfunction validateUtf16(value, name) {\n    for (var i = 0; i < value.length; ++i) {\n        var c = value.charCodeAt(i);\n        if (c >= 0xD800 && c <= 0xDBFF) {\n            var next = value.charCodeAt(i + 1);\n            if (!(next >= 0xDC00 && next <= 0xDFFF))\n                throw invalid(name, value, \"unpaired high surrogate\");\n            ++i;\n        } else if (c >= 0xDC00 && c <= 0xDFFF)\n            throw invalid(name, value, \"unpaired low surrogate\");\n    }\n}\n\nfunction parseBytes(value, name) {\n    if (typeof value !== \"string\")\n        throw invalid(name, value, \"expected base64 string\");\n    var s = value.replace(/-/g, \"+\").replace(/_/g, \"/\");\n    while (s.length % 4)\n        s += \"=\";\n    var buffer = util.newBuffer(util.base64.length(s));\n    util.base64.decode(s, buffer, 0);\n    return buffer;\n}\n\nfunction longFromString(str, unsigned) {\n    return util.Long ? util.Long.fromString(str, unsigned) : parseInt(str, 10);\n}\n\nfunction readScalar(type, value, name) {\n    switch (type) {\n        case \"int32\": case \"sint32\": case \"sfixed32\":\n        case \"uint32\": case \"fixed32\":\n            return Number(parseIntegerString(value, type, name));\n        case \"int64\": case \"sint64\": case \"sfixed64\":\n            return longFromString(parseIntegerString(value, type, name), false);\n        case \"uint64\": case \"fixed64\":\n            return longFromString(parseIntegerString(value, type, name), true);\n        case \"float\":\n            return parseFloat32Or64(value, true, name);\n        case \"double\":\n            return parseFloat32Or64(value, false, name);\n        case \"bool\":\n            if (typeof value !== \"boolean\")\n                throw invalid(name, value, \"expected boolean\");\n            return value;\n        case \"string\":\n            if (typeof value !== \"string\")\n                throw invalid(name, value, \"expected string\");\n            validateUtf16(value, name);\n            return value;\n        case \"bytes\":\n            return parseBytes(value, name);\n        default:\n            throw Error(name + \": unsupported scalar type \" + type);\n    }\n}\n\nfunction readEnum(enm, value, name, options) {\n    if (typeof value === \"string\") {\n        var num = enm.values[value];\n        if (num !== undefined)\n            return num;\n        if (options.ignoreUnknownFields)\n            return SKIP;\n        throw invalid(name, value, \"unknown enum value\");\n    }\n    if (typeof value === \"number\") {\n        if ((value | 0) !== value)\n            throw invalid(name, value, \"invalid enum number\");\n        if (enm._features.enum_type === \"CLOSED\" && enm.valuesById[value] === undefined)\n            throw invalid(name, value, \"unknown enum value\");\n        return value;\n    }\n    if (value === null && enm.fullName === \".google.protobuf.NullValue\")\n        return 0;\n    throw invalid(name, value, \"expected enum string or number\");\n}\n\nfunction readMapKey(field, key) {\n    switch (field.keyType) {\n        case \"bool\":\n            if (key !== \"true\" && key !== \"false\")\n                throw invalid(field.fullName, key, \"invalid bool map key\");\n            return key;\n        case \"string\":\n            validateUtf16(key, field.fullName);\n            return key;\n        case \"int32\": case \"sint32\": case \"sfixed32\":\n        case \"uint32\": case \"fixed32\":\n        case \"int64\": case \"sint64\": case \"sfixed64\":\n        case \"uint64\": case \"fixed64\":\n            return parseMapIntegerKey(key, field.keyType, field.fullName);\n        default:\n            throw Error(field.fullName + \": unsupported map key type \" + field.keyType);\n    }\n}\n\n// --- reading messages ---\n\nfunction readField(field, value, options, depth) {\n    if (field.map) {\n        if (value === null || typeof value !== \"object\" || Array.isArray(value))\n            throw invalid(field.fullName, value, \"expected object for map\");\n        var map = Object.create(null), k;\n        for (k in value)\n            if (hasOwn(value, k)) {\n                var mk = readMapKey(field, k),\n                    mv = readSingular(field, value[k], options, depth);\n                if (mv !== SKIP) {\n                    if (hasOwn(map, mk))\n                        throw invalid(field.fullName, k, \"duplicate map key\");\n                    map[mk] = mv;\n                }\n            }\n        return map;\n    }\n    if (field.repeated) {\n        if (!Array.isArray(value))\n            throw invalid(field.fullName, value, \"expected array\");\n        var arr = [], i = 0;\n        for (; i < value.length; ++i) {\n            if (value[i] === null && !isValueType(field.resolvedType) && !isNullValueType(field.resolvedType))\n                throw invalid(field.fullName, null, \"null element\");\n            var el = readSingular(field, value[i], options, depth);\n            if (el !== SKIP)\n                arr.push(el);\n        }\n        return arr;\n    }\n    return readSingular(field, value, options, depth);\n}\n\nfunction readSingular(field, value, options, depth) {\n    if (field.resolvedType instanceof Type)\n        return readMessage(field.resolvedType, value, options, depth + 1);\n    if (field.resolvedType instanceof Enum)\n        return readEnum(field.resolvedType, value, field.fullName, options);\n    return readScalar(field.type, value, field.fullName);\n}\n\nfunction isValueType(type) {\n    return type instanceof Type && type.fullName === \".google.protobuf.Value\";\n}\n\nfunction isNullValueType(type) {\n    return type instanceof Enum && type.fullName === \".google.protobuf.NullValue\";\n}\n\nfunction isImplicitDefault(field, value) {\n    if (field.hasPresence || field.repeated || field.map || field.resolvedType instanceof Type)\n        return false;\n    if (field.resolvedType instanceof Enum)\n        return value === 0;\n    switch (field.type) {\n        case \"bool\": return value === false;\n        case \"string\": return value === \"\";\n        case \"bytes\": return value == null || value.length === 0;\n        default: return longToNumber(value) === 0;\n    }\n}\n\nfunction readMessage(type, value, options, depth) {\n    if (depth > util.recursionLimit)\n        throw Error(\"max depth exceeded\");\n\n    var wkt = WKT_FROM[type.fullName];\n    if (wkt)\n        return wkt(type, value, options, depth);\n\n    if (value === null || typeof value !== \"object\" || Array.isArray(value))\n        throw invalid(type.fullName, value, \"expected object\");\n\n    var index = fieldsByJsonName(type),\n        out = {},\n        seenFields = Object.create(null),\n        seenOneofs = Object.create(null),\n        key;\n\n    for (key in value) {\n        if (!hasOwn(value, key))\n            continue;\n        var field = index[key];\n        if (field === undefined) {\n            if (options.ignoreUnknownFields)\n                continue;\n            throw invalid(type.fullName, key, \"unknown field\");\n        }\n        if (seenFields[field.name])\n            throw invalid(type.fullName, key, \"duplicate field\");\n        seenFields[field.name] = true;\n        var fv = value[key], fieldValue;\n        if (fv === null) {\n            if (isValueType(field.resolvedType))\n                fieldValue = { nullValue: 0 };\n            else if (field.resolvedType instanceof Enum && field.resolvedType.fullName === \".google.protobuf.NullValue\")\n                fieldValue = 0;\n            else\n                continue;\n        } else\n            fieldValue = readField(field, fv, options, depth);\n        if (fieldValue === SKIP)\n            continue;\n        if (field.partOf) {\n            if (seenOneofs[field.partOf.name])\n                throw Error(type.fullName + \": multiple values for oneof \" + field.partOf.name);\n            seenOneofs[field.partOf.name] = true;\n        }\n        if (!isImplicitDefault(field, fieldValue))\n            out[field.name] = fieldValue;\n    }\n    return out;\n}\n\n// --- writing messages ---\n\nfunction hasOwn(o, k) {\n    return o != null && Object.prototype.hasOwnProperty.call(o, k);\n}\n\nfunction setOwn(o, k, v) {\n    if (k === \"__proto__\")\n        util.makeProp(o, k);\n    o[k] = v;\n}\n\nfunction wktFieldName(type, name) {\n    var field = fieldsByJsonName(type)[name];\n    return field ? field.name : name;\n}\n\nfunction wktFieldValue(type, message, name) {\n    var field = fieldsByJsonName(type)[name];\n    if (!field)\n        return message && message[name];\n    if (hasOwn(message, field.name))\n        return message[field.name];\n    if (hasOwn(message, field.protoName))\n        return message[field.protoName];\n    if (hasOwn(message, field.jsonName))\n        return message[field.jsonName];\n    return undefined;\n}\n\nfunction writeScalar(type, value) {\n    switch (type) {\n        case \"int64\": case \"sint64\": case \"sfixed64\":\n        case \"uint64\": case \"fixed64\":\n            return value == null ? \"0\" : String(value);\n        case \"float\": case \"double\":\n            return typeof value === \"number\" && !isFinite(value) ? String(value) : value;\n        case \"bytes\":\n            return value == null ? \"\" : util.base64.encode(value, 0, value.length);\n        default:\n            return value;\n    }\n}\n\nfunction writeSingular(field, value, options, depth) {\n    if (field.resolvedType instanceof Type)\n        return toJsonValue(field.resolvedType, value, options, depth + 1);\n    if (field.resolvedType instanceof Enum) {\n        if (field.resolvedType.fullName === \".google.protobuf.NullValue\")\n            return null;\n        var name = field.resolvedType.valuesById[value];\n        return name === undefined ? value : name;\n    }\n    return writeScalar(field.type, value);\n}\n\nfunction toJsonValue(type, message, options, depth) {\n    if (depth > util.recursionLimit)\n        throw Error(\"max depth exceeded\");\n\n    var wkt = WKT_TO[type.fullName];\n    if (wkt)\n        return wkt(type, message, options, depth);\n\n    var out = {},\n        fields = type.fieldsArray,\n        i = 0;\n    for (; i < fields.length; ++i) {\n        var field = fields[i].resolve(),\n            value = message[field.name];\n        if (value == null)\n            continue;\n        var key = isExtension(field) ? extensionName(field) : field.jsonName;\n        if (field.map) {\n            var mk = Object.keys(value);\n            if (!mk.length)\n                continue;\n            var longKey = LONG_TYPE[field.keyType],\n                unsignedKey = field.keyType === \"uint64\" || field.keyType === \"fixed64\",\n                mo = {}, ki = 0;\n            for (; ki < mk.length; ++ki) {\n                var outKey = longKey ? util.longFromKey(mk[ki], unsignedKey).toString() : mk[ki];\n                setOwn(mo, outKey, writeSingular(field, value[mk[ki]], options, depth));\n            }\n            setOwn(out, key, mo);\n        } else if (field.repeated) {\n            if (!value.length)\n                continue;\n            var arr = new Array(value.length), j = 0;\n            for (; j < value.length; ++j)\n                arr[j] = writeSingular(field, value[j], options, depth);\n            setOwn(out, key, arr);\n        } else {\n            if (!hasOwn(message, field.name) || isImplicitDefault(field, value))\n                continue;\n            setOwn(out, key, writeSingular(field, value, options, depth));\n        }\n    }\n    return out;\n}\n\n// --- well-known types ---\n\nfunction longToNumber(value) {\n    if (value == null) return 0;\n    if (typeof value === \"number\") return value;\n    if (typeof value.toNumber === \"function\") return value.toNumber();\n    return Number(value) || 0;\n}\n\nfunction nanosToString(nanos) {\n    var str = String(nanos < 0 ? -nanos : nanos);\n    while (str.length < 9) str = \"0\" + str;\n    while (str.length > 3 && str.slice(str.length - 3) === \"000\") str = str.slice(0, str.length - 3);\n    return str;\n}\n\nfunction fracToNanos(frac) {\n    while (frac.length < 9) frac += \"0\";\n    return parseInt(frac.slice(0, 9), 10);\n}\n\nfunction daysInMonth(year, month) {\n    switch (month) {\n        case 2:\n            return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0) ? 29 : 28;\n        case 4:\n        case 6:\n        case 9:\n        case 11:\n            return 30;\n        default:\n            return 31;\n    }\n}\n\nfunction camelToSnake(path) {\n    return path.replace(/[A-Z]/g, function ($0) { return \"_\" + $0.toLowerCase(); });\n}\n\nvar WKT_FROM = {};\nvar WKT_TO = {};\n\nWKT_FROM[\".google.protobuf.Duration\"] = function (type, value) {\n    if (typeof value !== \"string\")\n        throw invalid(type.fullName, value, \"expected duration string\");\n    var match = /^(-)?([0-9]+)(?:\\.([0-9]{1,9}))?s$/.exec(value);\n    if (!match)\n        throw invalid(type.fullName, value, \"invalid duration\");\n    var sign = match[1] ? -1 : 1,\n        seconds = parseInt(match[2], 10) * sign || 0,\n        nanos = match[3] ? fracToNanos(match[3]) * sign || 0 : 0;\n    if (seconds > 315576000000 || seconds < -315576000000)\n        throw invalid(type.fullName, value, \"duration out of range\");\n    var message = {};\n    if (seconds !== 0)\n        message.seconds = seconds;\n    if (nanos !== 0)\n        message.nanos = nanos;\n    return message;\n};\nWKT_TO[\".google.protobuf.Duration\"] = function (type, message) {\n    var seconds = longToNumber(message.seconds),\n        nanos = message.nanos || 0;\n    if (seconds > 315576000000 || seconds < -315576000000)\n        throw Error(\"google.protobuf.Duration out of range\");\n    if (nanos > 999999999 || nanos < -999999999 || seconds && nanos && seconds < 0 !== nanos < 0)\n        throw Error(\"google.protobuf.Duration nanos invalid\");\n    var result = (seconds < 0 || nanos < 0 ? \"-\" : \"\") + Math.abs(seconds);\n    if (nanos)\n        result += \".\" + nanosToString(nanos);\n    return result + \"s\";\n};\n\nWKT_FROM[\".google.protobuf.Timestamp\"] = function (type, value) {\n    if (typeof value !== \"string\")\n        throw invalid(type.fullName, value, \"expected timestamp string\");\n    var match = /^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])T([01]\\d|2[0-3]):([0-5]\\d):([0-5]\\d)(?:\\.(\\d{1,9}))?(Z|[+-](?:[01]\\d|2[0-3]):[0-5]\\d)$/.exec(value);\n    if (!match)\n        throw invalid(type.fullName, value, \"invalid timestamp\");\n    var year = parseInt(match[1], 10),\n        month = parseInt(match[2], 10),\n        day = parseInt(match[3], 10);\n    if (day > daysInMonth(year, month))\n        throw invalid(type.fullName, value, \"invalid timestamp date\");\n    var millis = new Date(value).getTime();\n    if (isNaN(millis))\n        throw invalid(type.fullName, value, \"invalid timestamp\");\n    var seconds = Math.floor(millis / 1000),\n        nanos = match[7] ? fracToNanos(match[7]) : 0;\n    if (seconds < -62135596800 || seconds > 253402300799)\n        throw invalid(type.fullName, value, \"timestamp out of range\");\n    var message = {};\n    if (seconds !== 0)\n        message.seconds = seconds;\n    if (nanos !== 0)\n        message.nanos = nanos;\n    return message;\n};\nWKT_TO[\".google.protobuf.Timestamp\"] = function (type, message) {\n    var seconds = longToNumber(message.seconds),\n        nanos = message.nanos || 0;\n    if (seconds < -62135596800 || seconds > 253402300799)\n        throw Error(\"google.protobuf.Timestamp out of range\");\n    if (nanos < 0 || nanos > 999999999)\n        throw Error(\"google.protobuf.Timestamp nanos out of range\");\n    var iso = new Date(seconds * 1000).toISOString();\n    return nanos\n        ? iso.replace(/\\.\\d+Z$/, \".\" + nanosToString(nanos) + \"Z\")\n        : iso.replace(/\\.\\d+Z$/, \"Z\");\n};\n\nWKT_FROM[\".google.protobuf.FieldMask\"] = function (type, value) {\n    if (typeof value !== \"string\")\n        throw invalid(type.fullName, value, \"expected field mask string\");\n    if (value.indexOf(\"_\") !== -1)\n        throw invalid(type.fullName, value, \"field mask path must be lowerCamelCase\");\n    var paths = value.length ? value.split(\",\") : [],\n        i = 0;\n    for (; i < paths.length; ++i)\n        paths[i] = camelToSnake(paths[i]);\n    return { paths: paths };\n};\nWKT_TO[\".google.protobuf.FieldMask\"] = function (type, message) {\n    var paths = message.paths || [],\n        out = [],\n        i = 0;\n    for (; i < paths.length; ++i) {\n        var camel = util.jsonName(paths[i]);\n        if (camelToSnake(camel) !== paths[i])\n            throw Error(\"google.protobuf.FieldMask path does not round-trip: \" + paths[i]);\n        out.push(camel);\n    }\n    return out.join(\",\");\n};\n\n[\"DoubleValue\", \"FloatValue\", \"Int64Value\", \"UInt64Value\", \"Int32Value\",\n \"UInt32Value\", \"BoolValue\", \"StringValue\", \"BytesValue\"].forEach(function (name) {\n    var fullName = \".google.protobuf.\" + name;\n    WKT_FROM[fullName] = function (type, value, options, depth) {\n        var field = type.fields.value.resolve(),\n            fieldValue = readSingular(field, value, options, depth),\n            message = {};\n        if (!isImplicitDefault(field, fieldValue))\n            message.value = fieldValue;\n        return message;\n    };\n    WKT_TO[fullName] = function (type, message, options, depth) {\n        var field = type.fields.value.resolve(),\n            value = wktFieldValue(type, message, \"value\");\n        return writeSingular(field, value === undefined ? field.defaultValue : value, options, depth);\n    };\n});\n\nfunction valueFromJson(json, depth) {\n    if (depth > util.recursionLimit)\n        throw Error(\"max depth exceeded\");\n    if (json === null)\n        return { nullValue: 0 };\n    switch (typeof json) {\n        case \"number\":\n            if (!isFinite(json))\n                throw Error(\"google.protobuf.Value cannot hold a non-finite number\");\n            return { numberValue: json };\n        case \"string\":\n            validateUtf16(json, \"google.protobuf.Value.string_value\");\n            return { stringValue: json };\n        case \"boolean\":\n            return { boolValue: json };\n    }\n    if (Array.isArray(json)) {\n        var values = new Array(json.length), i = 0;\n        for (; i < json.length; ++i)\n            values[i] = valueFromJson(json[i], depth + 1);\n        return { listValue: { values: values } };\n    }\n    return { structValue: { fields: structFieldsFromJson(json, depth + 1) } };\n}\nfunction structFieldsFromJson(json, depth) {\n    var fields = Object.create(null), k;\n    for (k in json)\n        if (hasOwn(json, k)) {\n            validateUtf16(k, \"google.protobuf.Struct.fields\");\n            fields[k] = valueFromJson(json[k], depth);\n        }\n    return fields;\n}\nWKT_FROM[\".google.protobuf.Value\"] = function (type, value, options, depth) {\n    return valueFromJson(value, depth);\n};\nWKT_FROM[\".google.protobuf.Struct\"] = function (type, value, options, depth) {\n    if (value === null || typeof value !== \"object\" || Array.isArray(value))\n        throw invalid(type.fullName, value, \"google.protobuf.Struct must be an object\");\n    return { fields: structFieldsFromJson(value, depth + 1) };\n};\nWKT_FROM[\".google.protobuf.ListValue\"] = function (type, value, options, depth) {\n    if (!Array.isArray(value))\n        throw invalid(type.fullName, value, \"google.protobuf.ListValue must be an array\");\n    var values = new Array(value.length), i = 0;\n    for (; i < value.length; ++i)\n        values[i] = valueFromJson(value[i], depth + 1);\n    return { values: values };\n};\n\nfunction valueToJson(message, options, depth) {\n    if (depth > util.recursionLimit)\n        throw Error(\"max depth exceeded\");\n    if (message == null || hasOwn(message, \"nullValue\"))\n        return null;\n    if (hasOwn(message, \"numberValue\")) {\n        if (typeof message.numberValue === \"number\" && !isFinite(message.numberValue))\n            throw Error(\"google.protobuf.Value cannot hold a non-finite number\");\n        return message.numberValue;\n    }\n    if (hasOwn(message, \"stringValue\")) return message.stringValue;\n    if (hasOwn(message, \"boolValue\")) return message.boolValue;\n    if (hasOwn(message, \"structValue\")) return structToJson(message.structValue, options, depth + 1);\n    if (hasOwn(message, \"listValue\")) return listToJson(message.listValue, options, depth + 1);\n    return null;\n}\nfunction structToJson(message, options, depth) {\n    var out = {}, fields = message && message.fields, k;\n    if (fields)\n        for (k in fields)\n            if (hasOwn(fields, k))\n                setOwn(out, k, valueToJson(fields[k], options, depth));\n    return out;\n}\nfunction listToJson(message, options, depth) {\n    var values = message && message.values;\n    if (!values) return [];\n    var arr = new Array(values.length), i = 0;\n    for (; i < values.length; ++i)\n        arr[i] = valueToJson(values[i], options, depth);\n    return arr;\n}\nWKT_TO[\".google.protobuf.Value\"] = function (type, message, options, depth) {\n    return valueToJson(message, options, depth);\n};\nWKT_TO[\".google.protobuf.Struct\"] = function (type, message, options, depth) {\n    return structToJson(message, options, depth);\n};\nWKT_TO[\".google.protobuf.ListValue\"] = function (type, message, options, depth) {\n    return listToJson(message, options, depth);\n};\n\nWKT_FROM[\".google.protobuf.Any\"] = function (type, value, options, depth) {\n    if (value === null || typeof value !== \"object\" || Array.isArray(value))\n        throw invalid(type.fullName, value, \"google.protobuf.Any must be an object\");\n    var typeUrl = value[\"@type\"];\n    if (typeUrl === undefined)\n        return {};\n    if (typeof typeUrl !== \"string\")\n        throw Error(\"google.protobuf.Any @type must be a string\");\n    var name = typeUrl.substring(typeUrl.lastIndexOf(\"/\") + 1),\n        msgType = type.root.lookupType(name),\n        custom = WKT_FROM[msgType.fullName] !== undefined,\n        body;\n    if (custom)\n        body = value.value;\n    else {\n        body = {};\n        for (var k in value)\n            if (hasOwn(value, k) && k !== \"@type\")\n                setOwn(body, k, value[k]);\n    }\n    var inner = readMessage(msgType, body, options, depth + 1);\n    var url = typeUrl.charAt(0) === \".\" ? typeUrl.slice(1) : typeUrl,\n        out = {};\n    if (url.indexOf(\"/\") === -1)\n        url = \"/\" + url;\n    out[wktFieldName(type, \"type_url\")] = url;\n    var bytes = msgType.encode(inner).finish();\n    if (bytes.length)\n        out[wktFieldName(type, \"value\")] = bytes;\n    return out;\n};\nWKT_TO[\".google.protobuf.Any\"] = function (type, message, options, depth) {\n    var typeUrl = wktFieldValue(type, message, \"type_url\");\n    if (!typeUrl)\n        return {};\n    var name = typeUrl.substring(typeUrl.lastIndexOf(\"/\") + 1),\n        msgType = type.root.lookupType(name),\n        value = wktFieldValue(type, message, \"value\"),\n        decoded = msgType.decode(value || util.emptyArray),\n        body = toJsonValue(msgType, decoded, options, depth + 1),\n        result;\n    if (WKT_TO[msgType.fullName])\n        result = { \"@type\": typeUrl, \"value\": body };\n    else {\n        result = { \"@type\": typeUrl };\n        for (var k in body)\n            if (hasOwn(body, k))\n                setOwn(result, k, body[k]);\n    }\n    return result;\n};\n\n// --- duplicate keys ---\n\n// JSON.parse keeps the last duplicate key, but ProtoJSON rejects duplicates.\nfunction checkDuplicateKeys(str) {\n    var stack = [],\n        expectKey = false,\n        i = 0,\n        n = str.length;\n    while (i < n) {\n        var c = str.charAt(i);\n        if (c === \"{\") {\n            stack.push(Object.create(null));\n            expectKey = true;\n            ++i;\n        } else if (c === \"[\") {\n            stack.push(null);\n            expectKey = false;\n            ++i;\n        } else if (c === \"}\" || c === \"]\") {\n            stack.pop();\n            expectKey = false;\n            ++i;\n        } else if (c === \":\") {\n            expectKey = false;\n            ++i;\n        } else if (c === \",\") {\n            expectKey = stack.length > 0 && stack[stack.length - 1] !== null;\n            ++i;\n        } else if (c === \"\\\"\") {\n            var start = i++;\n            while (i < n) {\n                var ch = str.charAt(i++);\n                if (ch === \"\\\\\") ++i;\n                else if (ch === \"\\\"\") break;\n            }\n            if (expectKey) {\n                var seen = stack[stack.length - 1],\n                    name = JSON.parse(str.slice(start, i));\n                if (seen[name])\n                    throw Error(\"duplicate key in JSON object: \" + JSON.stringify(name));\n                seen[name] = true;\n                expectKey = false;\n            }\n        } else\n            ++i;\n    }\n}\n\n// --- public API ---\n\n/**\n * ProtoJSON conversion options.\n * @interface IProtoJsonOptions\n * @property {boolean} [ignoreUnknownFields=false] Ignores unknown object members and unrecognized enum names while parsing.\n */\n\n/**\n * Parses a message from an already-parsed ProtoJSON value using the specified reflected type.\n * @function fromJson\n * @name fromJson\n * @param {$protobuf.Type} type Reflected message type\n * @param {*} json Already-parsed ProtoJSON value\n * @param {IProtoJsonOptions} [options] Conversion options\n * @returns {$protobuf.Message<{}>} Message instance\n */\nprotojson.fromJson = function fromJson(type, json, options) {\n    if (!(type instanceof Type))\n        throw TypeError(\"type must be a Type\");\n    type.root.resolveAll();\n    return type.create(readMessage(type, json, options || {}, 0));\n};\n\n/**\n * Parses a message from ProtoJSON text using the specified reflected type.\n * @function fromJsonString\n * @name fromJsonString\n * @param {$protobuf.Type} type Reflected message type\n * @param {string} json ProtoJSON text\n * @param {IProtoJsonOptions} [options] Conversion options\n * @returns {$protobuf.Message<{}>} Message instance\n */\nprotojson.fromJsonString = function fromJsonString(type, json, options) {\n    if (typeof json !== \"string\")\n        throw TypeError(\"json must be a string\");\n    checkDuplicateKeys(json);\n    return protojson.fromJson(type, JSON.parse(json), options);\n};\n\n/**\n * Formats a message as ProtoJSON using the specified reflected type.\n * @function toJson\n * @name toJson\n * @param {$protobuf.Type} type Reflected message type\n * @param {$protobuf.Message<{}>|Object.<string,*>} message Message instance or plain object\n * @param {IProtoJsonOptions} [options] Conversion options\n * @returns {*} ProtoJSON value (object, array, string, number, boolean or null)\n */\nprotojson.toJson = function toJson(type, message, options) {\n    if (!(type instanceof Type))\n        throw TypeError(\"type must be a Type\");\n    type.root.resolveAll();\n    return toJsonValue(type, message, options || {}, 0);\n};\n\n/**\n * Formats a message as ProtoJSON text using the specified reflected type.\n * @function toJsonString\n * @name toJsonString\n * @param {$protobuf.Type} type Reflected message type\n * @param {$protobuf.Message<{}>|Object.<string,*>} message Message instance or plain object\n * @param {IProtoJsonOptions} [options] Conversion options\n * @returns {string} ProtoJSON text\n */\nprotojson.toJsonString = function toJsonString(type, message, options) {\n    return JSON.stringify(protojson.toJson(type, message, options));\n};\n\n/**\n * Installs reflected {@link Type} convenience methods.\n * @function install\n * @name install\n * @returns {undefined}\n */\nprotojson.install = function install() {\n    /**\n     * Parses a message of this type from an already-parsed ProtoJSON value. Convenience for {@link protojson.fromJson}.\n     * @param {*} json Already-parsed ProtoJSON value\n     * @param {IProtoJsonOptions} [options] Conversion options\n     * @returns {Message<{}>} Message instance\n     */\n    Type.prototype.fromJson = function fromJson(json, options) {\n        return protojson.fromJson(this, json, options);\n    };\n\n    /**\n     * Parses a message of this type from ProtoJSON text. Convenience for {@link protojson.fromJsonString}.\n     * @param {string} json ProtoJSON text\n     * @param {IProtoJsonOptions} [options] Conversion options\n     * @returns {Message<{}>} Message instance\n     */\n    Type.prototype.fromJsonString = function fromJsonString(json, options) {\n        return protojson.fromJsonString(this, json, options);\n    };\n\n    /**\n     * Formats a message of this type as ProtoJSON. Convenience for {@link protojson.toJson}.\n     * @param {Message<{}>|Object.<string,*>} message Message instance or plain object\n     * @param {IProtoJsonOptions} [options] Conversion options\n     * @returns {*} ProtoJSON value\n     */\n    Type.prototype.toJson = function toJson(message, options) {\n        return protojson.toJson(this, message, options);\n    };\n\n    /**\n     * Formats a message of this type as ProtoJSON text. Convenience for {@link protojson.toJsonString}.\n     * @param {Message<{}>|Object.<string,*>} message Message instance or plain object\n     * @param {IProtoJsonOptions} [options] Conversion options\n     * @returns {string} ProtoJSON text\n     */\n    Type.prototype.toJsonString = function toJsonString(message, options) {\n        return protojson.toJsonString(this, message, options);\n    };\n};\n","import * as protojson from 'protobufjs/ext/protojson';\nimport * as protobufjslight from 'protobufjs/light';\nimport type { Message, Root, Type } from 'protobufjs';\nimport { decode, encode } from '../encoding';\nimport { PayloadConverterError, ValueError } from '../errors';\nimport type { Payload } from '../interfaces';\nimport { errorMessage, hasOwnProperties, hasOwnProperty, isRecord } from '../type-helpers';\nimport type { PayloadConverterWithEncoding } from './payload-converter';\nimport {\n  BinaryPayloadConverter,\n  CompositePayloadConverter,\n  JsonPayloadConverter,\n  UndefinedPayloadConverter,\n} from './payload-converter';\n\nimport { encodingTypes, METADATA_ENCODING_KEY, METADATA_MESSAGE_TYPE_KEY } from './types';\n\n/**\n * `protobufjs` optimizes allocations of `bytes` fields using `Buffer.allocUnsafe()`\n * instead of `Uint8Array` if the global `Buffer` class exists. `Buffer.allocUnsafe()`\n * carves small allocations out of a shared pool slab (of 64KB as of Node 24); the\n * slab is retained as long as any one payload is reachable, which may effectively leak\n * memory if payloads are not garbage collected within a reasonable timeframe, and pose\n * other subtle issues (i.e. `Buffer` and `Uint8array` differ under `JSON.stringify`\n * and deep equality). For those reasons, we walk through objects decoded by `protobufjs`\n * and replace `Buffer`s with `Uint8Array`s.\n *\n * That fix adds unnecessary overhead in the very common case of decoding payloads\n * inside the Workflow sandbox, as Node's `Buffer` class is known to be not available\n * (protobufjs explicitly rejects `Buffer` polyfills).\n *\n * @hidden\n */\nconst PROTOBUFJS_MAY_ALLOCATE_BUFFERS = protobufjslight.util.Buffer != null;\n\nabstract class ProtobufPayloadConverter implements PayloadConverterWithEncoding {\n  protected readonly root: Root | undefined;\n  public abstract encodingType: string;\n\n  public abstract toPayload<T>(value: T): Payload | undefined;\n  public abstract fromPayload<T>(payload: Payload): T;\n\n  // Don't use type Root here because root.d.ts doesn't export Root, so users would have to type assert\n  constructor(root?: unknown) {\n    if (root) {\n      if (!isRoot(root)) {\n        throw new TypeError('root must be an instance of a protobufjs Root');\n      }\n\n      this.root = root;\n    }\n  }\n\n  protected validatePayload(content: Payload): { messageType: Type; data: Uint8Array } {\n    if (content.data === undefined || content.data === null) {\n      throw new ValueError('Got payload with no data');\n    }\n    if (!content.metadata || !(METADATA_MESSAGE_TYPE_KEY in content.metadata)) {\n      throw new ValueError(`Got protobuf payload without metadata.${METADATA_MESSAGE_TYPE_KEY}`);\n    }\n    if (!this.root) {\n      throw new PayloadConverterError('Unable to deserialize protobuf message without `root` being provided');\n    }\n\n    const messageTypeName = decode(content.metadata[METADATA_MESSAGE_TYPE_KEY]);\n    let messageType;\n    try {\n      messageType = this.root.lookupType(messageTypeName);\n    } catch (e) {\n      if (errorMessage(e)?.includes('no such type')) {\n        throw new PayloadConverterError(\n          `Got a \\`${messageTypeName}\\` protobuf message but cannot find corresponding message class in \\`root\\``\n        );\n      }\n\n      throw e;\n    }\n\n    return { messageType, data: content.data };\n  }\n\n  protected constructPayload({ messageTypeName, message }: { messageTypeName: string; message: Uint8Array }): Payload {\n    return {\n      metadata: {\n        [METADATA_ENCODING_KEY]: encode(this.encodingType),\n        [METADATA_MESSAGE_TYPE_KEY]: encode(messageTypeName),\n      },\n      data: message,\n    };\n  }\n}\n\n/**\n * Converts between protobufjs Message instances and serialized Protobuf Payload\n */\nexport class ProtobufBinaryPayloadConverter extends ProtobufPayloadConverter {\n  public encodingType = encodingTypes.METADATA_ENCODING_PROTOBUF;\n\n  /**\n   * @param root The value returned from {@link patchProtobufRoot}\n   */\n  constructor(root?: unknown) {\n    super(root);\n  }\n\n  public toPayload(value: unknown): Payload | undefined {\n    if (!isProtobufMessage(value)) {\n      return undefined;\n    }\n\n    return this.constructPayload({\n      messageTypeName: getNamespacedTypeName(value.$type),\n      message: value.$type.encode(value).finish(),\n    });\n  }\n\n  public fromPayload<T>(content: Payload): T {\n    const { messageType, data } = this.validatePayload(content);\n    // Wrap with Uint8Array from this context to ensure `instanceof` works\n    const localData = data ? new Uint8Array(data.buffer, data.byteOffset, data.length) : data;\n    return messageType.decode(localData) as unknown as T;\n  }\n}\n\n/**\n * Converts between protobufjs Message instances and serialized JSON Payload\n */\nexport class ProtobufJsonPayloadConverter extends ProtobufPayloadConverter {\n  public encodingType = encodingTypes.METADATA_ENCODING_PROTOBUF_JSON;\n\n  /**\n   * @param root The value returned from {@link patchProtobufRoot}\n   */\n  constructor(root?: unknown) {\n    super(root);\n  }\n\n  public toPayload(value: unknown): Payload | undefined {\n    if (!isProtobufMessage(value)) {\n      return undefined;\n    }\n\n    const jsonValue = protojson.toJson(value.$type, value);\n\n    return this.constructPayload({\n      messageTypeName: getNamespacedTypeName(value.$type),\n      message: encode(JSON.stringify(jsonValue)),\n    });\n  }\n\n  public fromPayload<T>(content: Payload): T {\n    const { messageType, data } = this.validatePayload(content);\n    const res = protojson.fromJson(messageType, JSON.parse(decode(data)), {\n      ignoreUnknownFields: true,\n    }) as unknown as T;\n    return replaceBuffers(res);\n  }\n}\n\n/**\n * Recursively replace the `Buffer`s that `protobufjs` may have allocated for\n * `bytes` fields with plain `Uint8Array`s; see {@link PROTOBUFJS_MAY_ALLOCATE_BUFFERS}.\n */\nfunction replaceBuffers<X>(value: X): X {\n  if (PROTOBUFJS_MAY_ALLOCATE_BUFFERS) {\n    if (isBuffer(value)) {\n      return new Uint8Array(value) as unknown as X;\n    }\n    replaceBuffersInChildren(value);\n  }\n  return value;\n}\n\nfunction replaceBuffersInChildren(obj: unknown): void {\n  // Bail on binary leaves; descending into one would visit it a byte at a time\n  if (obj == null || typeof obj !== 'object' || ArrayBuffer.isView(obj)) return;\n\n  // Indexing rather than Object.entries() is a performance optimization for large arrays\n  if (Array.isArray(obj)) {\n    for (let i = 0; i < obj.length; i++) {\n      const child = obj[i];\n      if (isBuffer(child)) obj[i] = new Uint8Array(child);\n      else replaceBuffersInChildren(child);\n    }\n  } else {\n    const record = obj as Record<string, unknown>;\n    for (const [key, child] of Object.entries(record)) {\n      if (isBuffer(child)) record[key] = new Uint8Array(child);\n      else replaceBuffersInChildren(child);\n    }\n  }\n}\n\nfunction isBuffer(value: unknown): value is Buffer {\n  // Can't use `Buffer` as a function here (i.e. `instanceof Buffer`)\n  // because that would fail in the Workflow sandbox.\n  if (!isRecord(value)) return false;\n\n  // Resolving `isBuffer` through the value's own `constructor` keeps this correct\n  // for `Buffer`s created in another realm, and avoids referencing the `Buffer`\n  // global, which is undefined in the Workflow sandbox.\n  const maybeBufferConstructor = value.constructor as BufferConstructor | undefined;\n  return (\n    maybeBufferConstructor?.name === 'Buffer' &&\n    typeof maybeBufferConstructor?.isBuffer === 'function' &&\n    maybeBufferConstructor?.isBuffer?.(value) === true\n  );\n}\n\nfunction isProtobufType(type: unknown): type is Type {\n  return (\n    isRecord(type) &&\n    // constructor.name may get mangled by minifiers; thanksfuly protobufjs also sets a className property\n    (type.constructor as any).className === 'Type' &&\n    hasOwnProperties(type, ['parent', 'name', 'create', 'encode', 'decode']) &&\n    typeof type.name === 'string' &&\n    typeof type.create === 'function' &&\n    typeof type.encode === 'function' &&\n    typeof type.decode === 'function'\n  );\n}\n\nfunction isProtobufMessage(value: unknown): value is Message {\n  return isRecord(value) && hasOwnProperty(value, '$type') && isProtobufType(value.$type);\n}\n\nfunction getNamespacedTypeName(type: Type): string {\n  // protobufjs qualifies names from the root down, e.g. `.temporal.api.common.v1.Payload`.\n  // The leading dot is not part of the name that goes on the wire.\n  const { fullName } = type;\n  return fullName.charAt(0) === '.' ? fullName.slice(1) : fullName;\n}\n\nfunction isRoot(root: unknown): root is Root {\n  // constructor.name may get mangled by minifiers; thanksfuly protobufjs also sets a className property\n  return isRecord(root) && (root.constructor as any).className === 'Root';\n}\n\nexport interface DefaultPayloadConverterWithProtobufsOptions {\n  /**\n   * The `root` provided to {@link ProtobufJsonPayloadConverter} and {@link ProtobufBinaryPayloadConverter}\n   */\n  protobufRoot: Record<string, unknown>;\n}\n\nexport class DefaultPayloadConverterWithProtobufs extends CompositePayloadConverter {\n  // Match the order used in other SDKs.\n  //\n  // Go SDK:\n  // https://github.com/temporalio/sdk-go/blob/5e5645f0c550dcf717c095ae32c76a7087d2e985/converter/default_data_converter.go#L28\n  constructor({ protobufRoot }: DefaultPayloadConverterWithProtobufsOptions) {\n    super(\n      new UndefinedPayloadConverter(),\n      new BinaryPayloadConverter(),\n      new ProtobufJsonPayloadConverter(protobufRoot),\n      new ProtobufBinaryPayloadConverter(protobufRoot),\n      new JsonPayloadConverter()\n    );\n  }\n}\n","import Long from 'long';\nimport * as proto from '@temporalio/proto';\nimport { decode } from '../encoding';\nimport { ValueError } from '../errors';\nimport type { Payload } from '../interfaces';\nimport { ProtobufJsonPayloadConverter } from '../converter/protobuf-payload-converters';\nimport { encodingTypes, METADATA_ENCODING_KEY, METADATA_MESSAGE_TYPE_KEY } from '../converter/types';\nimport type { StorageDriverClaim } from '../converter/extstore';\n\nconst ExternalStorageReferenceProto = proto.temporal.api.sdk.v1.ExternalStorageReference;\nconst PayloadProto = proto.temporal.api.common.v1.Payload;\nconst storageReferenceConverter = new ProtobufJsonPayloadConverter(proto);\n\nconst EXTSTORE_REFERENCE_MESSAGE_TYPE = 'temporal.api.sdk.v1.ExternalStorageReference';\nconst EXTSTORE_REFERENCE_ENCODING = encodingTypes.METADATA_ENCODING_PROTOBUF_JSON;\n\n/**\n * True if the payload is an External Storage reference:\n * `temporal.api.sdk.v1.ExternalStorageReference`.\n *\n * @internal\n * @experimental\n */\nexport function isReferencePayload(payload: Payload): boolean {\n  const encodingValue = readMetadataString(payload, METADATA_ENCODING_KEY);\n  if (encodingValue === EXTSTORE_REFERENCE_ENCODING) {\n    return readMetadataString(payload, METADATA_MESSAGE_TYPE_KEY) === EXTSTORE_REFERENCE_MESSAGE_TYPE;\n  }\n  return false;\n}\n\n/**\n * Parsed contents of a reference payload.\n *\n * @internal\n * @experimental\n */\nexport interface DecodedReferencePayload {\n  driverName: string;\n  claimData: Record<string, string>;\n  sizeBytes: number;\n}\n\n/**\n * Decode a reference payload from the wire format {@link ExternalStorageReference}.\n * Throws {@link ValueError} if the payload is not a reference or is malformed.\n * Callers should gate on {@link isReferencePayload} first.\n *\n * @internal\n * @experimental\n */\nexport function decodeReferencePayload(payload: Payload): DecodedReferencePayload {\n  const ref = storageReferenceConverter.fromPayload<proto.temporal.api.sdk.v1.IExternalStorageReference>(payload);\n  if (!ref.driverName) {\n    // TODO: use the new stable error codes here\n    throw new ValueError(\"Reference payload field 'driverName' must be a non-empty string\");\n  }\n  return {\n    driverName: ref.driverName,\n    claimData: { ...ref.claimData },\n    sizeBytes: readSizeBytes(payload),\n  };\n}\n\n/**\n * Encode a reference payload to wire format.\n *\n * @internal\n * @experimental\n */\nexport function encodeReferencePayload({\n  driverName,\n  claim,\n  sizeBytes,\n}: {\n  driverName: string;\n  claim: StorageDriverClaim;\n  sizeBytes: number;\n}): Payload {\n  const ref = ExternalStorageReferenceProto.create({ driverName, claimData: claim.claimData });\n  const payload = storageReferenceConverter.toPayload(ref);\n  if (payload === undefined) {\n    // TODO: use the new stable error codes here\n    throw new ValueError('Failed to serialize ExternalStorageReference');\n  }\n  return {\n    ...payload,\n    externalPayloads: [PayloadProto.ExternalPayloadDetails.create({ sizeBytes: Long.fromNumber(sizeBytes) })],\n  };\n}\n\nfunction readMetadataString(payload: Payload, key: string): string | undefined {\n  const raw = payload.metadata?.[key];\n  if (!raw) return undefined;\n  return decode(raw);\n}\n\nfunction readSizeBytes(payload: Payload): number {\n  const details = payload.externalPayloads?.[0];\n  if (!details?.sizeBytes) return 0;\n  return Long.isLong(details.sizeBytes) ? details.sizeBytes.toNumber() : Number(details.sizeBytes);\n}\n","/**\n * Engine that drives External Storage `store` and `retrieve` operations.\n *\n * @module\n */\nimport { temporal } from '@temporalio/proto';\n\nimport { StorageDriverClaim } from '../converter/extstore';\nimport type {\n  ExternalStorage,\n  StorageDriver,\n  StorageDriverRetrieveContext,\n  StorageDriverStoreContext,\n  StorageDriverTargetInfo,\n} from '../converter/extstore';\nimport { ValueError } from '../errors';\nimport type { Payload } from '../interfaces';\nimport { decodeReferencePayload, encodeReferencePayload, isReferencePayload } from './extstore-helpers';\n\nconst PayloadProto = temporal.api.common.v1.Payload;\n\n/** @internal @experimental */\nexport interface ExternalStoreOptions {\n  /** Identity of the workflow or activity that produced the payloads. */\n  target?: StorageDriverTargetInfo;\n  /** Aborts the in-flight store operation. */\n  abortSignal?: AbortSignal;\n}\n\n/** @internal @experimental */\nexport interface ExternalRetrieveOptions {\n  /** Aborts the in-flight retrieve operation. */\n  abortSignal?: AbortSignal;\n}\n\n/**\n * Drives External Storage operations against a configured {@link ExternalStorage}.\n *\n * @internal\n * @experimental\n */\nexport class ExternalStorageRunner {\n  constructor(private readonly externalStorage: ExternalStorage) {}\n\n  /**\n   * Replace each payload above the configured size threshold with a reference payload.\n   * Payloads below the threshold (or that the selector keeps inline) pass through\n   * unchanged. Order is preserved.\n   */\n  async store(payloads: Payload[], options: ExternalStoreOptions = {}): Promise<Payload[]> {\n    if (payloads.length === 0) return payloads;\n\n    const { driverSelector, payloadSizeThreshold } = this.externalStorage;\n    const { batchSignal, batchController } = makeBatchSignal(options.abortSignal);\n    const storeCtx: StorageDriverStoreContext = { abortSignal: batchSignal, target: options.target };\n\n    interface StoreItem {\n      index: number;\n      payload: Payload;\n      size: number;\n    }\n    const driverGroups = new Map<string, { driver: StorageDriver; items: StoreItem[] }>();\n\n    for (const [i, payload] of payloads.entries()) {\n      const size = payloadProtoSize(payload);\n      if (size < payloadSizeThreshold) continue;\n\n      const selected = driverSelector(storeCtx, payload);\n      if (selected === null) continue;\n      if (this.externalStorage.getDriver(selected.name) !== selected) {\n        throw new ValueError(\n          `Driver '${selected.name}' returned by driverSelector is not registered in ExternalStorage.drivers`\n        );\n      }\n\n      let group = driverGroups.get(selected.name);\n      if (group === undefined) {\n        group = { driver: selected, items: [] };\n        driverGroups.set(selected.name, group);\n      }\n      group.items.push({ index: i, payload, size });\n    }\n\n    if (driverGroups.size === 0) return payloads;\n\n    const result = payloads.slice();\n    await runWithAbortOnFirstError(batchController, [...driverGroups.values()], async (group) => {\n      const claims = await group.driver.store(\n        storeCtx,\n        group.items.map((it) => it.payload)\n      );\n      if (claims.length !== group.items.length) {\n        throw new ValueError(\n          `Driver '${group.driver.name}' returned ${claims.length} claims for ${group.items.length} payloads`\n        );\n      }\n      for (const [j, claim] of claims.entries()) {\n        const item = group.items[j]!;\n        result[item.index] = encodeReferencePayload({\n          driverName: group.driver.name,\n          claim,\n          sizeBytes: item.size,\n        });\n      }\n    });\n\n    return result;\n  }\n\n  /**\n   * Replace each reference payload in `payloads` with the payload bytes returned by the\n   * named driver. Non-reference payloads are passed through unchanged. Order is preserved.\n   */\n  async retrieve(payloads: Payload[], options: ExternalRetrieveOptions = {}): Promise<Payload[]> {\n    if (payloads.length === 0) return payloads;\n\n    const { batchSignal, batchController } = makeBatchSignal(options.abortSignal);\n    const retrieveCtx: StorageDriverRetrieveContext = { abortSignal: batchSignal };\n\n    interface RetrieveItem {\n      index: number;\n      claim: StorageDriverClaim;\n    }\n    const driverGroups = new Map<string, { driver: StorageDriver; items: RetrieveItem[] }>();\n\n    for (const [i, payload] of payloads.entries()) {\n      if (!isReferencePayload(payload)) continue;\n      const decoded = decodeReferencePayload(payload);\n      const driver = this.externalStorage.getDriver(decoded.driverName);\n      if (driver === null) {\n        throw new ValueError(`No driver registered with name '${decoded.driverName}'`);\n      }\n      let group = driverGroups.get(decoded.driverName);\n      if (group === undefined) {\n        group = { driver, items: [] };\n        driverGroups.set(decoded.driverName, group);\n      }\n      group.items.push({ index: i, claim: new StorageDriverClaim(decoded.claimData) });\n    }\n\n    if (driverGroups.size === 0) return payloads;\n\n    const result = payloads.slice();\n    await runWithAbortOnFirstError(batchController, [...driverGroups.values()], async (group) => {\n      const retrieved = await group.driver.retrieve(\n        retrieveCtx,\n        group.items.map((it) => it.claim)\n      );\n      if (retrieved.length !== group.items.length) {\n        throw new ValueError(\n          `Driver '${group.driver.name}' returned ${retrieved.length} payloads for ${group.items.length} claims`\n        );\n      }\n      for (const [j, retrievedPayload] of retrieved.entries()) {\n        const item = group.items[j]!;\n        result[item.index] = retrievedPayload;\n      }\n    });\n\n    return result;\n  }\n}\n\n// ============================================================================\n// Internal helpers\n// ============================================================================\n\nfunction payloadProtoSize(payload: Payload): number {\n  return PayloadProto.encode(payload).pos;\n}\n\n/**\n * Builds an internal controller composed with the caller's signal, so a failing\n * driver call can abort its siblings.\n */\nfunction makeBatchSignal(abortSignal?: AbortSignal): { batchSignal: AbortSignal; batchController: AbortController } {\n  const batchController = new AbortController();\n  const batchSignal = abortSignal ? AbortSignal.any([batchController.signal, abortSignal]) : batchController.signal;\n  return { batchSignal, batchController };\n}\n\n/**\n * Run `task(item)` for each item in parallel. As soon as any task rejects,\n * signal `controller.abort(reason)` so siblings can cancel mid-flight. Awaits\n * all tasks regardless of outcome and re-throws the first rejection.\n */\nasync function runWithAbortOnFirstError<T>(\n  controller: AbortController,\n  items: T[],\n  task: (item: T) => Promise<void>\n): Promise<void> {\n  const promises = items.map(task);\n  for (const p of promises) {\n    p.catch((reason: unknown) => {\n      if (!controller.signal.aborted) controller.abort(reason);\n    });\n  }\n  const settled = await Promise.allSettled(promises);\n  for (const outcome of settled) {\n    if (outcome.status === 'rejected') throw outcome.reason;\n  }\n}\n","/**\n * Visits payloads for External Storage and applies payload transformations via\n * {@link ExternalStorageRunner}.\n *\n * @module\n */\nimport type { ConcurrencyLimit } from '../concurrency/limit';\nimport type { ExternalStorage, StorageDriverTargetInfo } from '../converter/extstore';\nimport { ExternalStorageNotConfiguredError } from '../errors';\nimport type { Payload } from '../interfaces';\nimport { ExternalStorageRunner } from './external-storage-runner';\nimport { isReferencePayload } from './extstore-helpers';\nimport type { ContextDeriver, VisitOptions } from './payload-visitor';\n\n/**\n * The storage target in scope at a given payload site during a store walk. It starts at\n * {@link ExternalStorageStoreOptions.initialTarget} and {@link ExternalStorageStoreOptions.deriveContext}\n * may retarget it per message (e.g. a child-workflow command retargets its payloads at the child).\n */\ntype StoreTarget = StorageDriverTargetInfo | undefined;\n\n/** @internal @experimental */\nexport interface ExternalStorageStoreOptions {\n  /** Storage target before any message is entered (the initial enclosing workflow / activity). */\n  initialTarget?: StorageDriverTargetInfo;\n  /** Derives new storage target from the current message. */\n  deriveContext?: ContextDeriver<StoreTarget>;\n  /** Bounds concurrent transform calls across payload sites. Omit for sequential. */\n  limit?: ConcurrencyLimit;\n  /** Aborts the walk and every in-flight driver call. */\n  abortSignal?: AbortSignal;\n}\n\n/**\n * @internal\n * @experimental\n */\nexport function extstoreStoreOptions(\n  externalStorage: ExternalStorage,\n  { initialTarget, deriveContext, limit, abortSignal }: ExternalStorageStoreOptions = {}\n): VisitOptions<StoreTarget> {\n  const runner = new ExternalStorageRunner(externalStorage);\n  return {\n    transformPayloads: (payloads, target, signal) => runner.store(payloads, { target, abortSignal: signal }),\n    transformPayload: (payload, target, signal) =>\n      runner.store([payload], { target, abortSignal: signal }).then((stored) => stored[0]!),\n    deriveContext,\n    initialContext: initialTarget,\n    // Search attributes must keep their literal values so the server can index/search on them.\n    skipSearchAttributes: true,\n    limit,\n    abortSignal,\n  };\n}\n\nfunction extstoreRetrieveOptions(\n  externalStorage: ExternalStorage,\n  { limit, abortSignal }: { limit?: ConcurrencyLimit; abortSignal?: AbortSignal } = {}\n): VisitOptions<void> {\n  const runner = new ExternalStorageRunner(externalStorage);\n  return {\n    transformPayloads: (payloads, _context, signal) => runner.retrieve(payloads, { abortSignal: signal }),\n    transformPayload: (payload, _context, signal) =>\n      runner.retrieve([payload], { abortSignal: signal }).then((retrieved) => retrieved[0]!),\n    skipSearchAttributes: true,\n    limit,\n    abortSignal,\n  };\n}\n\n/**\n * Detection-only inbound walk used when no {@link ExternalStorage} is configured: leaves every\n * payload untouched but throws {@link ExternalStorageNotConfiguredError} on the first reference\n * payload.\n */\nfunction extstoreDetectReferencesOptions(): VisitOptions<void> {\n  const assertNoReference = (payloads: Payload[]): Payload[] => {\n    if (payloads.some(isReferencePayload)) {\n      throw new ExternalStorageNotConfiguredError();\n    }\n    return payloads;\n  };\n  return {\n    transformPayloads: (payloads) => Promise.resolve(assertNoReference(payloads)),\n    transformPayload: (payload) => Promise.resolve(assertNoReference([payload])[0]!),\n    skipSearchAttributes: true,\n  };\n}\n\n/**\n * The inbound External Storage pass for a worker/client boundary: resolve reference payloads when\n * {@link ExternalStorage} is configured, otherwise fail loudly (via {@link extstoreDetectReferencesOptions})\n * because nothing can resolve them.\n *\n * @internal\n * @experimental\n */\nexport function extstoreInboundOptions(externalStorage: ExternalStorage | undefined): VisitOptions<void> {\n  return externalStorage ? extstoreRetrieveOptions(externalStorage) : extstoreDetectReferencesOptions();\n}\n","/**\n * A simple counting semaphore. `release` hands a permit directly to the longest-waiting acquirer if\n * any, otherwise returns it to the pool.\n *\n * @internal\n */\nexport class Semaphore {\n  private permits: number;\n  private readonly waiters: Array<() => void> = [];\n\n  constructor(permits: number) {\n    this.permits = permits;\n  }\n\n  async acquire(): Promise<void> {\n    if (this.permits > 0) {\n      this.permits -= 1;\n      return;\n    }\n    return new Promise<void>((resolve) => {\n      this.waiters.push(resolve);\n    });\n  }\n\n  release(): void {\n    const waiter = this.waiters.shift();\n    if (waiter !== undefined) {\n      waiter();\n    } else {\n      this.permits += 1;\n    }\n  }\n}\n","import { Semaphore } from './semaphore';\n\n/**\n * Runs `fn` once a permit is available and releases the permit when it settles.\n * Following the shape of plimit's limit here.\n *\n * @internal\n */\nexport type ConcurrencyLimit = <T>(fn: () => Promise<T>) => Promise<T>;\n\n/**\n * Creates a {@link ConcurrencyLimit} allowing at most `concurrency` functions to run at once backed\n * by a {@link Semaphore}.\n *\n * @internal\n */\nexport function limit(concurrency: number): ConcurrencyLimit {\n  const semaphore = new Semaphore(Math.max(1, concurrency));\n  return async (fn) => {\n    await semaphore.acquire();\n    try {\n      return await fn();\n    } finally {\n      semaphore.release();\n    }\n  };\n}\n\n/**\n * Creates a {@link ConcurrencyLimit} that runs one function at a time.\n *\n * @internal\n */\nexport function sequential(): ConcurrencyLimit {\n  return limit(1);\n}\n","// Code generated by packages/proto/scripts/gen-payload-visitor.ts. DO NOT EDIT.\n\nimport type { coresdk, temporal } from '../protos/root';\n\ntype Payload = temporal.api.common.v1.IPayload;\n\nexport interface WalkEnv<Ctx> {\n  transformPayload(payload: Payload, context: Ctx): Promise<Payload>;\n  transformPayloads(payloads: Payload[], context: Ctx): Promise<Payload[]>;\n  deriveContext?(message: object, typeName: string, context: Ctx): Ctx;\n  skipHeaders: boolean;\n  skipSearchAttributes: boolean;\n}\n\nexport function walkActivityExecutionResult<Ctx>(\n  root: coresdk.activity_result.IActivityExecutionResult,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_activity_result_ActivityExecutionResult(root, env, context, pending);\n  return pending;\n}\n\nexport function walkActivityResolution<Ctx>(\n  root: coresdk.activity_result.IActivityResolution,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_activity_result_ActivityResolution(root, env, context, pending);\n  return pending;\n}\n\nexport function walkCoresdkActivityResultCancellation<Ctx>(\n  root: coresdk.activity_result.ICancellation,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_activity_result_Cancellation(root, env, context, pending);\n  return pending;\n}\n\nexport function walkCoresdkActivityResultFailure<Ctx>(\n  root: coresdk.activity_result.IFailure,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_activity_result_Failure(root, env, context, pending);\n  return pending;\n}\n\nexport function walkCoresdkActivityResultSuccess<Ctx>(\n  root: coresdk.activity_result.ISuccess,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_activity_result_Success(root, env, context, pending);\n  return pending;\n}\n\nexport function walkActivityTask<Ctx>(\n  root: coresdk.activity_task.IActivityTask,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_activity_task_ActivityTask(root, env, context, pending);\n  return pending;\n}\n\nexport function walkStart<Ctx>(\n  root: coresdk.activity_task.IStart,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_activity_task_Start(root, env, context, pending);\n  return pending;\n}\n\nexport function walkActivityHeartbeat<Ctx>(\n  root: coresdk.IActivityHeartbeat,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_ActivityHeartbeat(root, env, context, pending);\n  return pending;\n}\n\nexport function walkActivityTaskCompletion<Ctx>(\n  root: coresdk.IActivityTaskCompletion,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_ActivityTaskCompletion(root, env, context, pending);\n  return pending;\n}\n\nexport function walkCoresdkChildWorkflowCancellation<Ctx>(\n  root: coresdk.child_workflow.ICancellation,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_child_workflow_Cancellation(root, env, context, pending);\n  return pending;\n}\n\nexport function walkChildWorkflowResult<Ctx>(\n  root: coresdk.child_workflow.IChildWorkflowResult,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_child_workflow_ChildWorkflowResult(root, env, context, pending);\n  return pending;\n}\n\nexport function walkCoresdkChildWorkflowFailure<Ctx>(\n  root: coresdk.child_workflow.IFailure,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_child_workflow_Failure(root, env, context, pending);\n  return pending;\n}\n\nexport function walkCoresdkChildWorkflowSuccess<Ctx>(\n  root: coresdk.child_workflow.ISuccess,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_child_workflow_Success(root, env, context, pending);\n  return pending;\n}\n\nexport function walkNexusOperationResult<Ctx>(\n  root: coresdk.nexus.INexusOperationResult,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_nexus_NexusOperationResult(root, env, context, pending);\n  return pending;\n}\n\nexport function walkNexusTask<Ctx>(\n  root: coresdk.nexus.INexusTask,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_nexus_NexusTask(root, env, context, pending);\n  return pending;\n}\n\nexport function walkNexusTaskCompletion<Ctx>(\n  root: coresdk.nexus.INexusTaskCompletion,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_nexus_NexusTaskCompletion(root, env, context, pending);\n  return pending;\n}\n\nexport function walkDoUpdate<Ctx>(\n  root: coresdk.workflow_activation.IDoUpdate,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_workflow_activation_DoUpdate(root, env, context, pending);\n  return pending;\n}\n\nexport function walkInitializeWorkflow<Ctx>(\n  root: coresdk.workflow_activation.IInitializeWorkflow,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_workflow_activation_InitializeWorkflow(root, env, context, pending);\n  return pending;\n}\n\nexport function walkQueryWorkflow<Ctx>(\n  root: coresdk.workflow_activation.IQueryWorkflow,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_workflow_activation_QueryWorkflow(root, env, context, pending);\n  return pending;\n}\n\nexport function walkResolveActivity<Ctx>(\n  root: coresdk.workflow_activation.IResolveActivity,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_workflow_activation_ResolveActivity(root, env, context, pending);\n  return pending;\n}\n\nexport function walkResolveChildWorkflowExecution<Ctx>(\n  root: coresdk.workflow_activation.IResolveChildWorkflowExecution,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_workflow_activation_ResolveChildWorkflowExecution(root, env, context, pending);\n  return pending;\n}\n\nexport function walkResolveChildWorkflowExecutionStart<Ctx>(\n  root: coresdk.workflow_activation.IResolveChildWorkflowExecutionStart,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_workflow_activation_ResolveChildWorkflowExecutionStart(root, env, context, pending);\n  return pending;\n}\n\nexport function walkResolveChildWorkflowExecutionStartCancelled<Ctx>(\n  root: coresdk.workflow_activation.IResolveChildWorkflowExecutionStartCancelled,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_workflow_activation_ResolveChildWorkflowExecutionStartCancelled(root, env, context, pending);\n  return pending;\n}\n\nexport function walkResolveNexusOperation<Ctx>(\n  root: coresdk.workflow_activation.IResolveNexusOperation,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_workflow_activation_ResolveNexusOperation(root, env, context, pending);\n  return pending;\n}\n\nexport function walkResolveNexusOperationStart<Ctx>(\n  root: coresdk.workflow_activation.IResolveNexusOperationStart,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_workflow_activation_ResolveNexusOperationStart(root, env, context, pending);\n  return pending;\n}\n\nexport function walkResolveRequestCancelExternalWorkflow<Ctx>(\n  root: coresdk.workflow_activation.IResolveRequestCancelExternalWorkflow,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_workflow_activation_ResolveRequestCancelExternalWorkflow(root, env, context, pending);\n  return pending;\n}\n\nexport function walkResolveSignalExternalWorkflow<Ctx>(\n  root: coresdk.workflow_activation.IResolveSignalExternalWorkflow,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_workflow_activation_ResolveSignalExternalWorkflow(root, env, context, pending);\n  return pending;\n}\n\nexport function walkSignalWorkflow<Ctx>(\n  root: coresdk.workflow_activation.ISignalWorkflow,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_workflow_activation_SignalWorkflow(root, env, context, pending);\n  return pending;\n}\n\nexport function walkWorkflowActivation<Ctx>(\n  root: coresdk.workflow_activation.IWorkflowActivation,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_workflow_activation_WorkflowActivation(root, env, context, pending);\n  return pending;\n}\n\nexport function walkWorkflowActivationJob<Ctx>(\n  root: coresdk.workflow_activation.IWorkflowActivationJob,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_workflow_activation_WorkflowActivationJob(root, env, context, pending);\n  return pending;\n}\n\nexport function walkCancelWorkflowExecution<Ctx>(\n  root: coresdk.workflow_commands.ICancelWorkflowExecution,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_workflow_commands_CancelWorkflowExecution(root, env, context, pending);\n  return pending;\n}\n\nexport function walkCompleteWorkflowExecution<Ctx>(\n  root: coresdk.workflow_commands.ICompleteWorkflowExecution,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_workflow_commands_CompleteWorkflowExecution(root, env, context, pending);\n  return pending;\n}\n\nexport function walkContinueAsNewWorkflowExecution<Ctx>(\n  root: coresdk.workflow_commands.IContinueAsNewWorkflowExecution,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_workflow_commands_ContinueAsNewWorkflowExecution(root, env, context, pending);\n  return pending;\n}\n\nexport function walkFailWorkflowExecution<Ctx>(\n  root: coresdk.workflow_commands.IFailWorkflowExecution,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_workflow_commands_FailWorkflowExecution(root, env, context, pending);\n  return pending;\n}\n\nexport function walkModifyWorkflowProperties<Ctx>(\n  root: coresdk.workflow_commands.IModifyWorkflowProperties,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_workflow_commands_ModifyWorkflowProperties(root, env, context, pending);\n  return pending;\n}\n\nexport function walkQueryResult<Ctx>(\n  root: coresdk.workflow_commands.IQueryResult,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_workflow_commands_QueryResult(root, env, context, pending);\n  return pending;\n}\n\nexport function walkQuerySuccess<Ctx>(\n  root: coresdk.workflow_commands.IQuerySuccess,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_workflow_commands_QuerySuccess(root, env, context, pending);\n  return pending;\n}\n\nexport function walkScheduleActivity<Ctx>(\n  root: coresdk.workflow_commands.IScheduleActivity,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_workflow_commands_ScheduleActivity(root, env, context, pending);\n  return pending;\n}\n\nexport function walkScheduleLocalActivity<Ctx>(\n  root: coresdk.workflow_commands.IScheduleLocalActivity,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_workflow_commands_ScheduleLocalActivity(root, env, context, pending);\n  return pending;\n}\n\nexport function walkScheduleNexusOperation<Ctx>(\n  root: coresdk.workflow_commands.IScheduleNexusOperation,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_workflow_commands_ScheduleNexusOperation(root, env, context, pending);\n  return pending;\n}\n\nexport function walkSignalExternalWorkflowExecution<Ctx>(\n  root: coresdk.workflow_commands.ISignalExternalWorkflowExecution,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_workflow_commands_SignalExternalWorkflowExecution(root, env, context, pending);\n  return pending;\n}\n\nexport function walkStartChildWorkflowExecution<Ctx>(\n  root: coresdk.workflow_commands.IStartChildWorkflowExecution,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_workflow_commands_StartChildWorkflowExecution(root, env, context, pending);\n  return pending;\n}\n\nexport function walkUpdateResponse<Ctx>(\n  root: coresdk.workflow_commands.IUpdateResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_workflow_commands_UpdateResponse(root, env, context, pending);\n  return pending;\n}\n\nexport function walkUpsertWorkflowSearchAttributes<Ctx>(\n  root: coresdk.workflow_commands.IUpsertWorkflowSearchAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_workflow_commands_UpsertWorkflowSearchAttributes(root, env, context, pending);\n  return pending;\n}\n\nexport function walkWorkflowCommand<Ctx>(\n  root: coresdk.workflow_commands.IWorkflowCommand,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_workflow_commands_WorkflowCommand(root, env, context, pending);\n  return pending;\n}\n\nexport function walkCoresdkWorkflowCompletionFailure<Ctx>(\n  root: coresdk.workflow_completion.IFailure,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_workflow_completion_Failure(root, env, context, pending);\n  return pending;\n}\n\nexport function walkCoresdkWorkflowCompletionSuccess<Ctx>(\n  root: coresdk.workflow_completion.ISuccess,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_workflow_completion_Success(root, env, context, pending);\n  return pending;\n}\n\nexport function walkWorkflowActivationCompletion<Ctx>(\n  root: coresdk.workflow_completion.IWorkflowActivationCompletion,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_coresdk_workflow_completion_WorkflowActivationCompletion(root, env, context, pending);\n  return pending;\n}\n\nexport function walkCountActivityExecutionsResponse<Ctx>(\n  root: temporal.api.workflowservice.v1.ICountActivityExecutionsResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_CountActivityExecutionsResponse(root, env, context, pending);\n  return pending;\n}\n\nexport function walkTemporalApiWorkflowserviceV1CountActivityExecutionsResponseAggregationGroup<Ctx>(\n  root: temporal.api.workflowservice.v1.CountActivityExecutionsResponse.IAggregationGroup,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_CountActivityExecutionsResponse_AggregationGroup(root, env, context, pending);\n  return pending;\n}\n\nexport function walkCountNexusOperationExecutionsResponse<Ctx>(\n  root: temporal.api.workflowservice.v1.ICountNexusOperationExecutionsResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_CountNexusOperationExecutionsResponse(root, env, context, pending);\n  return pending;\n}\n\nexport function walkTemporalApiWorkflowserviceV1CountNexusOperationExecutionsResponseAggregationGroup<Ctx>(\n  root: temporal.api.workflowservice.v1.CountNexusOperationExecutionsResponse.IAggregationGroup,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_CountNexusOperationExecutionsResponse_AggregationGroup(\n    root,\n    env,\n    context,\n    pending\n  );\n  return pending;\n}\n\nexport function walkCountSchedulesResponse<Ctx>(\n  root: temporal.api.workflowservice.v1.ICountSchedulesResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_CountSchedulesResponse(root, env, context, pending);\n  return pending;\n}\n\nexport function walkTemporalApiWorkflowserviceV1CountSchedulesResponseAggregationGroup<Ctx>(\n  root: temporal.api.workflowservice.v1.CountSchedulesResponse.IAggregationGroup,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_CountSchedulesResponse_AggregationGroup(root, env, context, pending);\n  return pending;\n}\n\nexport function walkCountWorkflowExecutionsResponse<Ctx>(\n  root: temporal.api.workflowservice.v1.ICountWorkflowExecutionsResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_CountWorkflowExecutionsResponse(root, env, context, pending);\n  return pending;\n}\n\nexport function walkTemporalApiWorkflowserviceV1CountWorkflowExecutionsResponseAggregationGroup<Ctx>(\n  root: temporal.api.workflowservice.v1.CountWorkflowExecutionsResponse.IAggregationGroup,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_CountWorkflowExecutionsResponse_AggregationGroup(root, env, context, pending);\n  return pending;\n}\n\nexport function walkCreateScheduleRequest<Ctx>(\n  root: temporal.api.workflowservice.v1.ICreateScheduleRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_CreateScheduleRequest(root, env, context, pending);\n  return pending;\n}\n\nexport function walkCreateWorkerDeploymentVersionRequest<Ctx>(\n  root: temporal.api.workflowservice.v1.ICreateWorkerDeploymentVersionRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_CreateWorkerDeploymentVersionRequest(root, env, context, pending);\n  return pending;\n}\n\nexport function walkDescribeActivityExecutionResponse<Ctx>(\n  root: temporal.api.workflowservice.v1.IDescribeActivityExecutionResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_DescribeActivityExecutionResponse(root, env, context, pending);\n  return pending;\n}\n\nexport function walkDescribeDeploymentResponse<Ctx>(\n  root: temporal.api.workflowservice.v1.IDescribeDeploymentResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_DescribeDeploymentResponse(root, env, context, pending);\n  return pending;\n}\n\nexport function walkDescribeNexusOperationExecutionResponse<Ctx>(\n  root: temporal.api.workflowservice.v1.IDescribeNexusOperationExecutionResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_DescribeNexusOperationExecutionResponse(root, env, context, pending);\n  return pending;\n}\n\nexport function walkDescribeScheduleResponse<Ctx>(\n  root: temporal.api.workflowservice.v1.IDescribeScheduleResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_DescribeScheduleResponse(root, env, context, pending);\n  return pending;\n}\n\nexport function walkDescribeWorkerDeploymentVersionResponse<Ctx>(\n  root: temporal.api.workflowservice.v1.IDescribeWorkerDeploymentVersionResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_DescribeWorkerDeploymentVersionResponse(root, env, context, pending);\n  return pending;\n}\n\nexport function walkDescribeWorkflowExecutionResponse<Ctx>(\n  root: temporal.api.workflowservice.v1.IDescribeWorkflowExecutionResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_DescribeWorkflowExecutionResponse(root, env, context, pending);\n  return pending;\n}\n\nexport function walkExecuteMultiOperationRequest<Ctx>(\n  root: temporal.api.workflowservice.v1.IExecuteMultiOperationRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_ExecuteMultiOperationRequest(root, env, context, pending);\n  return pending;\n}\n\nexport function walkOperation<Ctx>(\n  root: temporal.api.workflowservice.v1.ExecuteMultiOperationRequest.IOperation,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_ExecuteMultiOperationRequest_Operation(root, env, context, pending);\n  return pending;\n}\n\nexport function walkExecuteMultiOperationResponse<Ctx>(\n  root: temporal.api.workflowservice.v1.IExecuteMultiOperationResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_ExecuteMultiOperationResponse(root, env, context, pending);\n  return pending;\n}\n\nexport function walkResponse<Ctx>(\n  root: temporal.api.workflowservice.v1.ExecuteMultiOperationResponse.IResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_ExecuteMultiOperationResponse_Response(root, env, context, pending);\n  return pending;\n}\n\nexport function walkGetCurrentDeploymentResponse<Ctx>(\n  root: temporal.api.workflowservice.v1.IGetCurrentDeploymentResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_GetCurrentDeploymentResponse(root, env, context, pending);\n  return pending;\n}\n\nexport function walkGetDeploymentReachabilityResponse<Ctx>(\n  root: temporal.api.workflowservice.v1.IGetDeploymentReachabilityResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_GetDeploymentReachabilityResponse(root, env, context, pending);\n  return pending;\n}\n\nexport function walkGetWorkflowExecutionHistoryResponse<Ctx>(\n  root: temporal.api.workflowservice.v1.IGetWorkflowExecutionHistoryResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_GetWorkflowExecutionHistoryResponse(root, env, context, pending);\n  return pending;\n}\n\nexport function walkGetWorkflowExecutionHistoryReverseResponse<Ctx>(\n  root: temporal.api.workflowservice.v1.IGetWorkflowExecutionHistoryReverseResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_GetWorkflowExecutionHistoryReverseResponse(root, env, context, pending);\n  return pending;\n}\n\nexport function walkListActivityExecutionsResponse<Ctx>(\n  root: temporal.api.workflowservice.v1.IListActivityExecutionsResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_ListActivityExecutionsResponse(root, env, context, pending);\n  return pending;\n}\n\nexport function walkListArchivedWorkflowExecutionsResponse<Ctx>(\n  root: temporal.api.workflowservice.v1.IListArchivedWorkflowExecutionsResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_ListArchivedWorkflowExecutionsResponse(root, env, context, pending);\n  return pending;\n}\n\nexport function walkListClosedWorkflowExecutionsResponse<Ctx>(\n  root: temporal.api.workflowservice.v1.IListClosedWorkflowExecutionsResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_ListClosedWorkflowExecutionsResponse(root, env, context, pending);\n  return pending;\n}\n\nexport function walkListNexusOperationExecutionsResponse<Ctx>(\n  root: temporal.api.workflowservice.v1.IListNexusOperationExecutionsResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_ListNexusOperationExecutionsResponse(root, env, context, pending);\n  return pending;\n}\n\nexport function walkListOpenWorkflowExecutionsResponse<Ctx>(\n  root: temporal.api.workflowservice.v1.IListOpenWorkflowExecutionsResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_ListOpenWorkflowExecutionsResponse(root, env, context, pending);\n  return pending;\n}\n\nexport function walkListSchedulesResponse<Ctx>(\n  root: temporal.api.workflowservice.v1.IListSchedulesResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_ListSchedulesResponse(root, env, context, pending);\n  return pending;\n}\n\nexport function walkListWorkflowExecutionsResponse<Ctx>(\n  root: temporal.api.workflowservice.v1.IListWorkflowExecutionsResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_ListWorkflowExecutionsResponse(root, env, context, pending);\n  return pending;\n}\n\nexport function walkPollActivityExecutionResponse<Ctx>(\n  root: temporal.api.workflowservice.v1.IPollActivityExecutionResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_PollActivityExecutionResponse(root, env, context, pending);\n  return pending;\n}\n\nexport function walkPollActivityTaskQueueResponse<Ctx>(\n  root: temporal.api.workflowservice.v1.IPollActivityTaskQueueResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_PollActivityTaskQueueResponse(root, env, context, pending);\n  return pending;\n}\n\nexport function walkPollNexusOperationExecutionResponse<Ctx>(\n  root: temporal.api.workflowservice.v1.IPollNexusOperationExecutionResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_PollNexusOperationExecutionResponse(root, env, context, pending);\n  return pending;\n}\n\nexport function walkPollNexusTaskQueueResponse<Ctx>(\n  root: temporal.api.workflowservice.v1.IPollNexusTaskQueueResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_PollNexusTaskQueueResponse(root, env, context, pending);\n  return pending;\n}\n\nexport function walkPollWorkflowExecutionUpdateResponse<Ctx>(\n  root: temporal.api.workflowservice.v1.IPollWorkflowExecutionUpdateResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_PollWorkflowExecutionUpdateResponse(root, env, context, pending);\n  return pending;\n}\n\nexport function walkPollWorkflowTaskQueueResponse<Ctx>(\n  root: temporal.api.workflowservice.v1.IPollWorkflowTaskQueueResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_PollWorkflowTaskQueueResponse(root, env, context, pending);\n  return pending;\n}\n\nexport function walkQueryWorkflowRequest<Ctx>(\n  root: temporal.api.workflowservice.v1.IQueryWorkflowRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_QueryWorkflowRequest(root, env, context, pending);\n  return pending;\n}\n\nexport function walkQueryWorkflowResponse<Ctx>(\n  root: temporal.api.workflowservice.v1.IQueryWorkflowResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_QueryWorkflowResponse(root, env, context, pending);\n  return pending;\n}\n\nexport function walkRecordActivityTaskHeartbeatByIdRequest<Ctx>(\n  root: temporal.api.workflowservice.v1.IRecordActivityTaskHeartbeatByIdRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_RecordActivityTaskHeartbeatByIdRequest(root, env, context, pending);\n  return pending;\n}\n\nexport function walkRecordActivityTaskHeartbeatRequest<Ctx>(\n  root: temporal.api.workflowservice.v1.IRecordActivityTaskHeartbeatRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_RecordActivityTaskHeartbeatRequest(root, env, context, pending);\n  return pending;\n}\n\nexport function walkResetWorkflowExecutionRequest<Ctx>(\n  root: temporal.api.workflowservice.v1.IResetWorkflowExecutionRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_ResetWorkflowExecutionRequest(root, env, context, pending);\n  return pending;\n}\n\nexport function walkRespondActivityTaskCanceledByIdRequest<Ctx>(\n  root: temporal.api.workflowservice.v1.IRespondActivityTaskCanceledByIdRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_RespondActivityTaskCanceledByIdRequest(root, env, context, pending);\n  return pending;\n}\n\nexport function walkRespondActivityTaskCanceledRequest<Ctx>(\n  root: temporal.api.workflowservice.v1.IRespondActivityTaskCanceledRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_RespondActivityTaskCanceledRequest(root, env, context, pending);\n  return pending;\n}\n\nexport function walkRespondActivityTaskCompletedByIdRequest<Ctx>(\n  root: temporal.api.workflowservice.v1.IRespondActivityTaskCompletedByIdRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_RespondActivityTaskCompletedByIdRequest(root, env, context, pending);\n  return pending;\n}\n\nexport function walkRespondActivityTaskCompletedRequest<Ctx>(\n  root: temporal.api.workflowservice.v1.IRespondActivityTaskCompletedRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_RespondActivityTaskCompletedRequest(root, env, context, pending);\n  return pending;\n}\n\nexport function walkRespondActivityTaskFailedByIdRequest<Ctx>(\n  root: temporal.api.workflowservice.v1.IRespondActivityTaskFailedByIdRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_RespondActivityTaskFailedByIdRequest(root, env, context, pending);\n  return pending;\n}\n\nexport function walkRespondActivityTaskFailedByIdResponse<Ctx>(\n  root: temporal.api.workflowservice.v1.IRespondActivityTaskFailedByIdResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_RespondActivityTaskFailedByIdResponse(root, env, context, pending);\n  return pending;\n}\n\nexport function walkRespondActivityTaskFailedRequest<Ctx>(\n  root: temporal.api.workflowservice.v1.IRespondActivityTaskFailedRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_RespondActivityTaskFailedRequest(root, env, context, pending);\n  return pending;\n}\n\nexport function walkRespondActivityTaskFailedResponse<Ctx>(\n  root: temporal.api.workflowservice.v1.IRespondActivityTaskFailedResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_RespondActivityTaskFailedResponse(root, env, context, pending);\n  return pending;\n}\n\nexport function walkRespondNexusTaskCompletedRequest<Ctx>(\n  root: temporal.api.workflowservice.v1.IRespondNexusTaskCompletedRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_RespondNexusTaskCompletedRequest(root, env, context, pending);\n  return pending;\n}\n\nexport function walkRespondNexusTaskFailedRequest<Ctx>(\n  root: temporal.api.workflowservice.v1.IRespondNexusTaskFailedRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_RespondNexusTaskFailedRequest(root, env, context, pending);\n  return pending;\n}\n\nexport function walkRespondQueryTaskCompletedRequest<Ctx>(\n  root: temporal.api.workflowservice.v1.IRespondQueryTaskCompletedRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_RespondQueryTaskCompletedRequest(root, env, context, pending);\n  return pending;\n}\n\nexport function walkRespondWorkflowTaskCompletedRequest<Ctx>(\n  root: temporal.api.workflowservice.v1.IRespondWorkflowTaskCompletedRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_RespondWorkflowTaskCompletedRequest(root, env, context, pending);\n  return pending;\n}\n\nexport function walkRespondWorkflowTaskCompletedResponse<Ctx>(\n  root: temporal.api.workflowservice.v1.IRespondWorkflowTaskCompletedResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_RespondWorkflowTaskCompletedResponse(root, env, context, pending);\n  return pending;\n}\n\nexport function walkRespondWorkflowTaskFailedRequest<Ctx>(\n  root: temporal.api.workflowservice.v1.IRespondWorkflowTaskFailedRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_RespondWorkflowTaskFailedRequest(root, env, context, pending);\n  return pending;\n}\n\nexport function walkScanWorkflowExecutionsResponse<Ctx>(\n  root: temporal.api.workflowservice.v1.IScanWorkflowExecutionsResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_ScanWorkflowExecutionsResponse(root, env, context, pending);\n  return pending;\n}\n\nexport function walkSetCurrentDeploymentRequest<Ctx>(\n  root: temporal.api.workflowservice.v1.ISetCurrentDeploymentRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_SetCurrentDeploymentRequest(root, env, context, pending);\n  return pending;\n}\n\nexport function walkSetCurrentDeploymentResponse<Ctx>(\n  root: temporal.api.workflowservice.v1.ISetCurrentDeploymentResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_SetCurrentDeploymentResponse(root, env, context, pending);\n  return pending;\n}\n\nexport function walkSignalWithStartWorkflowExecutionRequest<Ctx>(\n  root: temporal.api.workflowservice.v1.ISignalWithStartWorkflowExecutionRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_SignalWithStartWorkflowExecutionRequest(root, env, context, pending);\n  return pending;\n}\n\nexport function walkSignalWorkflowExecutionRequest<Ctx>(\n  root: temporal.api.workflowservice.v1.ISignalWorkflowExecutionRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_SignalWorkflowExecutionRequest(root, env, context, pending);\n  return pending;\n}\n\nexport function walkStartActivityExecutionRequest<Ctx>(\n  root: temporal.api.workflowservice.v1.IStartActivityExecutionRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_StartActivityExecutionRequest(root, env, context, pending);\n  return pending;\n}\n\nexport function walkStartBatchOperationRequest<Ctx>(\n  root: temporal.api.workflowservice.v1.IStartBatchOperationRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_StartBatchOperationRequest(root, env, context, pending);\n  return pending;\n}\n\nexport function walkStartNexusOperationExecutionRequest<Ctx>(\n  root: temporal.api.workflowservice.v1.IStartNexusOperationExecutionRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_StartNexusOperationExecutionRequest(root, env, context, pending);\n  return pending;\n}\n\nexport function walkStartWorkflowExecutionRequest<Ctx>(\n  root: temporal.api.workflowservice.v1.IStartWorkflowExecutionRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_StartWorkflowExecutionRequest(root, env, context, pending);\n  return pending;\n}\n\nexport function walkStartWorkflowExecutionResponse<Ctx>(\n  root: temporal.api.workflowservice.v1.IStartWorkflowExecutionResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_StartWorkflowExecutionResponse(root, env, context, pending);\n  return pending;\n}\n\nexport function walkTerminateWorkflowExecutionRequest<Ctx>(\n  root: temporal.api.workflowservice.v1.ITerminateWorkflowExecutionRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_TerminateWorkflowExecutionRequest(root, env, context, pending);\n  return pending;\n}\n\nexport function walkUpdateScheduleRequest<Ctx>(\n  root: temporal.api.workflowservice.v1.IUpdateScheduleRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_UpdateScheduleRequest(root, env, context, pending);\n  return pending;\n}\n\nexport function walkUpdateWorkerDeploymentVersionComputeConfigRequest<Ctx>(\n  root: temporal.api.workflowservice.v1.IUpdateWorkerDeploymentVersionComputeConfigRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_UpdateWorkerDeploymentVersionComputeConfigRequest(root, env, context, pending);\n  return pending;\n}\n\nexport function walkUpdateWorkerDeploymentVersionMetadataRequest<Ctx>(\n  root: temporal.api.workflowservice.v1.IUpdateWorkerDeploymentVersionMetadataRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_UpdateWorkerDeploymentVersionMetadataRequest(root, env, context, pending);\n  return pending;\n}\n\nexport function walkUpdateWorkerDeploymentVersionMetadataResponse<Ctx>(\n  root: temporal.api.workflowservice.v1.IUpdateWorkerDeploymentVersionMetadataResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_UpdateWorkerDeploymentVersionMetadataResponse(root, env, context, pending);\n  return pending;\n}\n\nexport function walkUpdateWorkflowExecutionRequest<Ctx>(\n  root: temporal.api.workflowservice.v1.IUpdateWorkflowExecutionRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_UpdateWorkflowExecutionRequest(root, env, context, pending);\n  return pending;\n}\n\nexport function walkUpdateWorkflowExecutionResponse<Ctx>(\n  root: temporal.api.workflowservice.v1.IUpdateWorkflowExecutionResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_UpdateWorkflowExecutionResponse(root, env, context, pending);\n  return pending;\n}\n\nexport function walkValidateWorkerDeploymentVersionComputeConfigRequest<Ctx>(\n  root: temporal.api.workflowservice.v1.IValidateWorkerDeploymentVersionComputeConfigRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx\n): Promise<unknown>[] {\n  const pending: Promise<unknown>[] = [];\n  walk_temporal_api_workflowservice_v1_ValidateWorkerDeploymentVersionComputeConfigRequest(root, env, context, pending);\n  return pending;\n}\n\nfunction walk_coresdk_activity_result_ActivityExecutionResult<Ctx>(\n  o: coresdk.activity_result.IActivityExecutionResult,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'coresdk.activity_result.ActivityExecutionResult', context)\n    : context;\n  {\n    const c = o.completed;\n    if (c != null) walk_coresdk_activity_result_Success(c, env, ctx, pending);\n  }\n  {\n    const c = o.failed;\n    if (c != null) walk_coresdk_activity_result_Failure(c, env, ctx, pending);\n  }\n  {\n    const c = o.cancelled;\n    if (c != null) walk_coresdk_activity_result_Cancellation(c, env, ctx, pending);\n  }\n}\n\nfunction walk_coresdk_activity_result_ActivityResolution<Ctx>(\n  o: coresdk.activity_result.IActivityResolution,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'coresdk.activity_result.ActivityResolution', context) : context;\n  {\n    const c = o.completed;\n    if (c != null) walk_coresdk_activity_result_Success(c, env, ctx, pending);\n  }\n  {\n    const c = o.failed;\n    if (c != null) walk_coresdk_activity_result_Failure(c, env, ctx, pending);\n  }\n  {\n    const c = o.cancelled;\n    if (c != null) walk_coresdk_activity_result_Cancellation(c, env, ctx, pending);\n  }\n}\n\nfunction walk_coresdk_activity_result_Cancellation<Ctx>(\n  o: coresdk.activity_result.ICancellation,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'coresdk.activity_result.Cancellation', context) : context;\n  {\n    const c = o.failure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n}\n\nfunction walk_coresdk_activity_result_Failure<Ctx>(\n  o: coresdk.activity_result.IFailure,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'coresdk.activity_result.Failure', context) : context;\n  {\n    const c = o.failure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n}\n\nfunction walk_coresdk_activity_result_Success<Ctx>(\n  o: coresdk.activity_result.ISuccess,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'coresdk.activity_result.Success', context) : context;\n  {\n    const p = o.result;\n    if (p != null)\n      pending.push(\n        env.transformPayload(p, ctx).then((r) => {\n          o.result = r;\n        })\n      );\n  }\n}\n\nfunction walk_coresdk_activity_task_ActivityTask<Ctx>(\n  o: coresdk.activity_task.IActivityTask,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'coresdk.activity_task.ActivityTask', context) : context;\n  {\n    const c = o.start;\n    if (c != null) walk_coresdk_activity_task_Start(c, env, ctx, pending);\n  }\n}\n\nfunction walk_coresdk_activity_task_Start<Ctx>(\n  o: coresdk.activity_task.IStart,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'coresdk.activity_task.Start', context) : context;\n  {\n    const m = o.headerFields;\n    if (m)\n      for (const [k, v] of Object.entries(m))\n        pending.push(\n          env.transformPayload(v, ctx).then((r) => {\n            m[k] = r;\n          })\n        );\n  }\n  {\n    const a = o.input;\n    if (a && a.length)\n      pending.push(\n        env.transformPayloads(a, ctx).then((r) => {\n          o.input = r;\n        })\n      );\n  }\n  {\n    const a = o.heartbeatDetails;\n    if (a && a.length)\n      pending.push(\n        env.transformPayloads(a, ctx).then((r) => {\n          o.heartbeatDetails = r;\n        })\n      );\n  }\n}\n\nfunction walk_coresdk_ActivityHeartbeat<Ctx>(\n  o: coresdk.IActivityHeartbeat,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'coresdk.ActivityHeartbeat', context) : context;\n  {\n    const a = o.details;\n    if (a && a.length)\n      pending.push(\n        env.transformPayloads(a, ctx).then((r) => {\n          o.details = r;\n        })\n      );\n  }\n}\n\nfunction walk_coresdk_ActivityTaskCompletion<Ctx>(\n  o: coresdk.IActivityTaskCompletion,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'coresdk.ActivityTaskCompletion', context) : context;\n  {\n    const c = o.result;\n    if (c != null) walk_coresdk_activity_result_ActivityExecutionResult(c, env, ctx, pending);\n  }\n}\n\nfunction walk_coresdk_child_workflow_Cancellation<Ctx>(\n  o: coresdk.child_workflow.ICancellation,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'coresdk.child_workflow.Cancellation', context) : context;\n  {\n    const c = o.failure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n}\n\nfunction walk_coresdk_child_workflow_ChildWorkflowResult<Ctx>(\n  o: coresdk.child_workflow.IChildWorkflowResult,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'coresdk.child_workflow.ChildWorkflowResult', context) : context;\n  {\n    const c = o.completed;\n    if (c != null) walk_coresdk_child_workflow_Success(c, env, ctx, pending);\n  }\n  {\n    const c = o.failed;\n    if (c != null) walk_coresdk_child_workflow_Failure(c, env, ctx, pending);\n  }\n  {\n    const c = o.cancelled;\n    if (c != null) walk_coresdk_child_workflow_Cancellation(c, env, ctx, pending);\n  }\n}\n\nfunction walk_coresdk_child_workflow_Failure<Ctx>(\n  o: coresdk.child_workflow.IFailure,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'coresdk.child_workflow.Failure', context) : context;\n  {\n    const c = o.failure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n}\n\nfunction walk_coresdk_child_workflow_Success<Ctx>(\n  o: coresdk.child_workflow.ISuccess,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'coresdk.child_workflow.Success', context) : context;\n  {\n    const p = o.result;\n    if (p != null)\n      pending.push(\n        env.transformPayload(p, ctx).then((r) => {\n          o.result = r;\n        })\n      );\n  }\n}\n\nfunction walk_coresdk_nexus_NexusOperationResult<Ctx>(\n  o: coresdk.nexus.INexusOperationResult,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'coresdk.nexus.NexusOperationResult', context) : context;\n  {\n    const p = o.completed;\n    if (p != null)\n      pending.push(\n        env.transformPayload(p, ctx).then((r) => {\n          o.completed = r;\n        })\n      );\n  }\n  {\n    const c = o.failed;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n  {\n    const c = o.cancelled;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n  {\n    const c = o.timedOut;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n}\n\nfunction walk_coresdk_nexus_NexusTask<Ctx>(\n  o: coresdk.nexus.INexusTask,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'coresdk.nexus.NexusTask', context) : context;\n  {\n    const c = o.task;\n    if (c != null) walk_temporal_api_workflowservice_v1_PollNexusTaskQueueResponse(c, env, ctx, pending);\n  }\n}\n\nfunction walk_coresdk_nexus_NexusTaskCompletion<Ctx>(\n  o: coresdk.nexus.INexusTaskCompletion,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'coresdk.nexus.NexusTaskCompletion', context) : context;\n  {\n    const c = o.completed;\n    if (c != null) walk_temporal_api_nexus_v1_Response(c, env, ctx, pending);\n  }\n  {\n    const c = o.failure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n}\n\nfunction walk_coresdk_workflow_activation_DoUpdate<Ctx>(\n  o: coresdk.workflow_activation.IDoUpdate,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'coresdk.workflow_activation.DoUpdate', context) : context;\n  {\n    const a = o.input;\n    if (a && a.length)\n      pending.push(\n        env.transformPayloads(a, ctx).then((r) => {\n          o.input = r;\n        })\n      );\n  }\n  {\n    if (!env.skipHeaders) {\n      const m = o.headers;\n      if (m)\n        for (const [k, v] of Object.entries(m))\n          pending.push(\n            env.transformPayload(v, ctx).then((r) => {\n              m[k] = r;\n            })\n          );\n    }\n  }\n}\n\nfunction walk_coresdk_workflow_activation_InitializeWorkflow<Ctx>(\n  o: coresdk.workflow_activation.IInitializeWorkflow,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'coresdk.workflow_activation.InitializeWorkflow', context)\n    : context;\n  {\n    const a = o.arguments;\n    if (a && a.length)\n      pending.push(\n        env.transformPayloads(a, ctx).then((r) => {\n          o.arguments = r;\n        })\n      );\n  }\n  {\n    if (!env.skipHeaders) {\n      const m = o.headers;\n      if (m)\n        for (const [k, v] of Object.entries(m))\n          pending.push(\n            env.transformPayload(v, ctx).then((r) => {\n              m[k] = r;\n            })\n          );\n    }\n  }\n  {\n    const c = o.continuedFailure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n  {\n    const c = o.lastCompletionResult;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n  {\n    const c = o.memo;\n    if (c != null) walk_temporal_api_common_v1_Memo(c, env, ctx, pending);\n  }\n  {\n    if (!env.skipSearchAttributes) {\n      const c = o.searchAttributes;\n      if (c != null) walk_temporal_api_common_v1_SearchAttributes(c, env, ctx, pending);\n    }\n  }\n}\n\nfunction walk_coresdk_workflow_activation_QueryWorkflow<Ctx>(\n  o: coresdk.workflow_activation.IQueryWorkflow,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'coresdk.workflow_activation.QueryWorkflow', context) : context;\n  {\n    const a = o.arguments;\n    if (a && a.length)\n      pending.push(\n        env.transformPayloads(a, ctx).then((r) => {\n          o.arguments = r;\n        })\n      );\n  }\n  {\n    if (!env.skipHeaders) {\n      const m = o.headers;\n      if (m)\n        for (const [k, v] of Object.entries(m))\n          pending.push(\n            env.transformPayload(v, ctx).then((r) => {\n              m[k] = r;\n            })\n          );\n    }\n  }\n}\n\nfunction walk_coresdk_workflow_activation_ResolveActivity<Ctx>(\n  o: coresdk.workflow_activation.IResolveActivity,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'coresdk.workflow_activation.ResolveActivity', context)\n    : context;\n  {\n    const c = o.result;\n    if (c != null) walk_coresdk_activity_result_ActivityResolution(c, env, ctx, pending);\n  }\n}\n\nfunction walk_coresdk_workflow_activation_ResolveChildWorkflowExecution<Ctx>(\n  o: coresdk.workflow_activation.IResolveChildWorkflowExecution,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'coresdk.workflow_activation.ResolveChildWorkflowExecution', context)\n    : context;\n  {\n    const c = o.result;\n    if (c != null) walk_coresdk_child_workflow_ChildWorkflowResult(c, env, ctx, pending);\n  }\n}\n\nfunction walk_coresdk_workflow_activation_ResolveChildWorkflowExecutionStart<Ctx>(\n  o: coresdk.workflow_activation.IResolveChildWorkflowExecutionStart,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'coresdk.workflow_activation.ResolveChildWorkflowExecutionStart', context)\n    : context;\n  {\n    const c = o.cancelled;\n    if (c != null) walk_coresdk_workflow_activation_ResolveChildWorkflowExecutionStartCancelled(c, env, ctx, pending);\n  }\n}\n\nfunction walk_coresdk_workflow_activation_ResolveChildWorkflowExecutionStartCancelled<Ctx>(\n  o: coresdk.workflow_activation.IResolveChildWorkflowExecutionStartCancelled,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'coresdk.workflow_activation.ResolveChildWorkflowExecutionStartCancelled', context)\n    : context;\n  {\n    const c = o.failure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n}\n\nfunction walk_coresdk_workflow_activation_ResolveNexusOperation<Ctx>(\n  o: coresdk.workflow_activation.IResolveNexusOperation,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'coresdk.workflow_activation.ResolveNexusOperation', context)\n    : context;\n  {\n    const c = o.result;\n    if (c != null) walk_coresdk_nexus_NexusOperationResult(c, env, ctx, pending);\n  }\n}\n\nfunction walk_coresdk_workflow_activation_ResolveNexusOperationStart<Ctx>(\n  o: coresdk.workflow_activation.IResolveNexusOperationStart,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'coresdk.workflow_activation.ResolveNexusOperationStart', context)\n    : context;\n  {\n    const c = o.failed;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n}\n\nfunction walk_coresdk_workflow_activation_ResolveRequestCancelExternalWorkflow<Ctx>(\n  o: coresdk.workflow_activation.IResolveRequestCancelExternalWorkflow,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'coresdk.workflow_activation.ResolveRequestCancelExternalWorkflow', context)\n    : context;\n  {\n    const c = o.failure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n}\n\nfunction walk_coresdk_workflow_activation_ResolveSignalExternalWorkflow<Ctx>(\n  o: coresdk.workflow_activation.IResolveSignalExternalWorkflow,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'coresdk.workflow_activation.ResolveSignalExternalWorkflow', context)\n    : context;\n  {\n    const c = o.failure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n}\n\nfunction walk_coresdk_workflow_activation_SignalWorkflow<Ctx>(\n  o: coresdk.workflow_activation.ISignalWorkflow,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'coresdk.workflow_activation.SignalWorkflow', context) : context;\n  {\n    const a = o.input;\n    if (a && a.length)\n      pending.push(\n        env.transformPayloads(a, ctx).then((r) => {\n          o.input = r;\n        })\n      );\n  }\n  {\n    if (!env.skipHeaders) {\n      const m = o.headers;\n      if (m)\n        for (const [k, v] of Object.entries(m))\n          pending.push(\n            env.transformPayload(v, ctx).then((r) => {\n              m[k] = r;\n            })\n          );\n    }\n  }\n}\n\nfunction walk_coresdk_workflow_activation_WorkflowActivation<Ctx>(\n  o: coresdk.workflow_activation.IWorkflowActivation,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'coresdk.workflow_activation.WorkflowActivation', context)\n    : context;\n  {\n    const a = o.jobs;\n    if (a) for (const v of a) walk_coresdk_workflow_activation_WorkflowActivationJob(v, env, ctx, pending);\n  }\n}\n\nfunction walk_coresdk_workflow_activation_WorkflowActivationJob<Ctx>(\n  o: coresdk.workflow_activation.IWorkflowActivationJob,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'coresdk.workflow_activation.WorkflowActivationJob', context)\n    : context;\n  {\n    const c = o.initializeWorkflow;\n    if (c != null) walk_coresdk_workflow_activation_InitializeWorkflow(c, env, ctx, pending);\n  }\n  {\n    const c = o.queryWorkflow;\n    if (c != null) walk_coresdk_workflow_activation_QueryWorkflow(c, env, ctx, pending);\n  }\n  {\n    const c = o.signalWorkflow;\n    if (c != null) walk_coresdk_workflow_activation_SignalWorkflow(c, env, ctx, pending);\n  }\n  {\n    const c = o.resolveActivity;\n    if (c != null) walk_coresdk_workflow_activation_ResolveActivity(c, env, ctx, pending);\n  }\n  {\n    const c = o.resolveChildWorkflowExecutionStart;\n    if (c != null) walk_coresdk_workflow_activation_ResolveChildWorkflowExecutionStart(c, env, ctx, pending);\n  }\n  {\n    const c = o.resolveChildWorkflowExecution;\n    if (c != null) walk_coresdk_workflow_activation_ResolveChildWorkflowExecution(c, env, ctx, pending);\n  }\n  {\n    const c = o.resolveSignalExternalWorkflow;\n    if (c != null) walk_coresdk_workflow_activation_ResolveSignalExternalWorkflow(c, env, ctx, pending);\n  }\n  {\n    const c = o.resolveRequestCancelExternalWorkflow;\n    if (c != null) walk_coresdk_workflow_activation_ResolveRequestCancelExternalWorkflow(c, env, ctx, pending);\n  }\n  {\n    const c = o.doUpdate;\n    if (c != null) walk_coresdk_workflow_activation_DoUpdate(c, env, ctx, pending);\n  }\n  {\n    const c = o.resolveNexusOperationStart;\n    if (c != null) walk_coresdk_workflow_activation_ResolveNexusOperationStart(c, env, ctx, pending);\n  }\n  {\n    const c = o.resolveNexusOperation;\n    if (c != null) walk_coresdk_workflow_activation_ResolveNexusOperation(c, env, ctx, pending);\n  }\n}\n\nfunction walk_coresdk_workflow_commands_CancelWorkflowExecution<Ctx>(\n  o: coresdk.workflow_commands.ICancelWorkflowExecution,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'coresdk.workflow_commands.CancelWorkflowExecution', context)\n    : context;\n  {\n    const c = o.details;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n}\n\nfunction walk_coresdk_workflow_commands_CompleteWorkflowExecution<Ctx>(\n  o: coresdk.workflow_commands.ICompleteWorkflowExecution,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'coresdk.workflow_commands.CompleteWorkflowExecution', context)\n    : context;\n  {\n    const p = o.result;\n    if (p != null)\n      pending.push(\n        env.transformPayload(p, ctx).then((r) => {\n          o.result = r;\n        })\n      );\n  }\n}\n\nfunction walk_coresdk_workflow_commands_ContinueAsNewWorkflowExecution<Ctx>(\n  o: coresdk.workflow_commands.IContinueAsNewWorkflowExecution,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'coresdk.workflow_commands.ContinueAsNewWorkflowExecution', context)\n    : context;\n  {\n    const a = o.arguments;\n    if (a && a.length)\n      pending.push(\n        env.transformPayloads(a, ctx).then((r) => {\n          o.arguments = r;\n        })\n      );\n  }\n  {\n    const m = o.memo;\n    if (m)\n      for (const [k, v] of Object.entries(m))\n        pending.push(\n          env.transformPayload(v, ctx).then((r) => {\n            m[k] = r;\n          })\n        );\n  }\n  {\n    if (!env.skipHeaders) {\n      const m = o.headers;\n      if (m)\n        for (const [k, v] of Object.entries(m))\n          pending.push(\n            env.transformPayload(v, ctx).then((r) => {\n              m[k] = r;\n            })\n          );\n    }\n  }\n  {\n    if (!env.skipSearchAttributes) {\n      const c = o.searchAttributes;\n      if (c != null) walk_temporal_api_common_v1_SearchAttributes(c, env, ctx, pending);\n    }\n  }\n}\n\nfunction walk_coresdk_workflow_commands_FailWorkflowExecution<Ctx>(\n  o: coresdk.workflow_commands.IFailWorkflowExecution,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'coresdk.workflow_commands.FailWorkflowExecution', context)\n    : context;\n  {\n    const c = o.failure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n}\n\nfunction walk_coresdk_workflow_commands_ModifyWorkflowProperties<Ctx>(\n  o: coresdk.workflow_commands.IModifyWorkflowProperties,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'coresdk.workflow_commands.ModifyWorkflowProperties', context)\n    : context;\n  {\n    const c = o.upsertedMemo;\n    if (c != null) walk_temporal_api_common_v1_Memo(c, env, ctx, pending);\n  }\n}\n\nfunction walk_coresdk_workflow_commands_QueryResult<Ctx>(\n  o: coresdk.workflow_commands.IQueryResult,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'coresdk.workflow_commands.QueryResult', context) : context;\n  {\n    const c = o.succeeded;\n    if (c != null) walk_coresdk_workflow_commands_QuerySuccess(c, env, ctx, pending);\n  }\n  {\n    const c = o.failed;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n}\n\nfunction walk_coresdk_workflow_commands_QuerySuccess<Ctx>(\n  o: coresdk.workflow_commands.IQuerySuccess,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'coresdk.workflow_commands.QuerySuccess', context) : context;\n  {\n    const p = o.response;\n    if (p != null)\n      pending.push(\n        env.transformPayload(p, ctx).then((r) => {\n          o.response = r;\n        })\n      );\n  }\n}\n\nfunction walk_coresdk_workflow_commands_ScheduleActivity<Ctx>(\n  o: coresdk.workflow_commands.IScheduleActivity,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'coresdk.workflow_commands.ScheduleActivity', context) : context;\n  {\n    if (!env.skipHeaders) {\n      const m = o.headers;\n      if (m)\n        for (const [k, v] of Object.entries(m))\n          pending.push(\n            env.transformPayload(v, ctx).then((r) => {\n              m[k] = r;\n            })\n          );\n    }\n  }\n  {\n    const a = o.arguments;\n    if (a && a.length)\n      pending.push(\n        env.transformPayloads(a, ctx).then((r) => {\n          o.arguments = r;\n        })\n      );\n  }\n}\n\nfunction walk_coresdk_workflow_commands_ScheduleLocalActivity<Ctx>(\n  o: coresdk.workflow_commands.IScheduleLocalActivity,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'coresdk.workflow_commands.ScheduleLocalActivity', context)\n    : context;\n  {\n    if (!env.skipHeaders) {\n      const m = o.headers;\n      if (m)\n        for (const [k, v] of Object.entries(m))\n          pending.push(\n            env.transformPayload(v, ctx).then((r) => {\n              m[k] = r;\n            })\n          );\n    }\n  }\n  {\n    const a = o.arguments;\n    if (a && a.length)\n      pending.push(\n        env.transformPayloads(a, ctx).then((r) => {\n          o.arguments = r;\n        })\n      );\n  }\n}\n\nfunction walk_coresdk_workflow_commands_ScheduleNexusOperation<Ctx>(\n  o: coresdk.workflow_commands.IScheduleNexusOperation,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'coresdk.workflow_commands.ScheduleNexusOperation', context)\n    : context;\n  {\n    const p = o.input;\n    if (p != null)\n      pending.push(\n        env.transformPayload(p, ctx).then((r) => {\n          o.input = r;\n        })\n      );\n  }\n}\n\nfunction walk_coresdk_workflow_commands_SignalExternalWorkflowExecution<Ctx>(\n  o: coresdk.workflow_commands.ISignalExternalWorkflowExecution,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'coresdk.workflow_commands.SignalExternalWorkflowExecution', context)\n    : context;\n  {\n    const a = o.args;\n    if (a && a.length)\n      pending.push(\n        env.transformPayloads(a, ctx).then((r) => {\n          o.args = r;\n        })\n      );\n  }\n  {\n    if (!env.skipHeaders) {\n      const m = o.headers;\n      if (m)\n        for (const [k, v] of Object.entries(m))\n          pending.push(\n            env.transformPayload(v, ctx).then((r) => {\n              m[k] = r;\n            })\n          );\n    }\n  }\n}\n\nfunction walk_coresdk_workflow_commands_StartChildWorkflowExecution<Ctx>(\n  o: coresdk.workflow_commands.IStartChildWorkflowExecution,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'coresdk.workflow_commands.StartChildWorkflowExecution', context)\n    : context;\n  {\n    const a = o.input;\n    if (a && a.length)\n      pending.push(\n        env.transformPayloads(a, ctx).then((r) => {\n          o.input = r;\n        })\n      );\n  }\n  {\n    if (!env.skipHeaders) {\n      const m = o.headers;\n      if (m)\n        for (const [k, v] of Object.entries(m))\n          pending.push(\n            env.transformPayload(v, ctx).then((r) => {\n              m[k] = r;\n            })\n          );\n    }\n  }\n  {\n    const m = o.memo;\n    if (m)\n      for (const [k, v] of Object.entries(m))\n        pending.push(\n          env.transformPayload(v, ctx).then((r) => {\n            m[k] = r;\n          })\n        );\n  }\n  {\n    if (!env.skipSearchAttributes) {\n      const c = o.searchAttributes;\n      if (c != null) walk_temporal_api_common_v1_SearchAttributes(c, env, ctx, pending);\n    }\n  }\n}\n\nfunction walk_coresdk_workflow_commands_UpdateResponse<Ctx>(\n  o: coresdk.workflow_commands.IUpdateResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'coresdk.workflow_commands.UpdateResponse', context) : context;\n  {\n    const c = o.rejected;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n  {\n    const p = o.completed;\n    if (p != null)\n      pending.push(\n        env.transformPayload(p, ctx).then((r) => {\n          o.completed = r;\n        })\n      );\n  }\n}\n\nfunction walk_coresdk_workflow_commands_UpsertWorkflowSearchAttributes<Ctx>(\n  o: coresdk.workflow_commands.IUpsertWorkflowSearchAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'coresdk.workflow_commands.UpsertWorkflowSearchAttributes', context)\n    : context;\n  {\n    if (!env.skipSearchAttributes) {\n      const c = o.searchAttributes;\n      if (c != null) walk_temporal_api_common_v1_SearchAttributes(c, env, ctx, pending);\n    }\n  }\n}\n\nfunction walk_coresdk_workflow_commands_WorkflowCommand<Ctx>(\n  o: coresdk.workflow_commands.IWorkflowCommand,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'coresdk.workflow_commands.WorkflowCommand', context) : context;\n  {\n    const c = o.userMetadata;\n    if (c != null) walk_temporal_api_sdk_v1_UserMetadata(c, env, ctx, pending);\n  }\n  {\n    const a = o.eventGroupMarkers;\n    if (a) for (const v of a) walk_temporal_api_sdk_v1_EventGroupMarker(v, env, ctx, pending);\n  }\n  {\n    const c = o.scheduleActivity;\n    if (c != null) walk_coresdk_workflow_commands_ScheduleActivity(c, env, ctx, pending);\n  }\n  {\n    const c = o.respondToQuery;\n    if (c != null) walk_coresdk_workflow_commands_QueryResult(c, env, ctx, pending);\n  }\n  {\n    const c = o.completeWorkflowExecution;\n    if (c != null) walk_coresdk_workflow_commands_CompleteWorkflowExecution(c, env, ctx, pending);\n  }\n  {\n    const c = o.failWorkflowExecution;\n    if (c != null) walk_coresdk_workflow_commands_FailWorkflowExecution(c, env, ctx, pending);\n  }\n  {\n    const c = o.continueAsNewWorkflowExecution;\n    if (c != null) walk_coresdk_workflow_commands_ContinueAsNewWorkflowExecution(c, env, ctx, pending);\n  }\n  {\n    const c = o.cancelWorkflowExecution;\n    if (c != null) walk_coresdk_workflow_commands_CancelWorkflowExecution(c, env, ctx, pending);\n  }\n  {\n    const c = o.startChildWorkflowExecution;\n    if (c != null) walk_coresdk_workflow_commands_StartChildWorkflowExecution(c, env, ctx, pending);\n  }\n  {\n    const c = o.signalExternalWorkflowExecution;\n    if (c != null) walk_coresdk_workflow_commands_SignalExternalWorkflowExecution(c, env, ctx, pending);\n  }\n  {\n    const c = o.scheduleLocalActivity;\n    if (c != null) walk_coresdk_workflow_commands_ScheduleLocalActivity(c, env, ctx, pending);\n  }\n  {\n    const c = o.upsertWorkflowSearchAttributes;\n    if (c != null) walk_coresdk_workflow_commands_UpsertWorkflowSearchAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.modifyWorkflowProperties;\n    if (c != null) walk_coresdk_workflow_commands_ModifyWorkflowProperties(c, env, ctx, pending);\n  }\n  {\n    const c = o.updateResponse;\n    if (c != null) walk_coresdk_workflow_commands_UpdateResponse(c, env, ctx, pending);\n  }\n  {\n    const c = o.scheduleNexusOperation;\n    if (c != null) walk_coresdk_workflow_commands_ScheduleNexusOperation(c, env, ctx, pending);\n  }\n}\n\nfunction walk_coresdk_workflow_completion_Failure<Ctx>(\n  o: coresdk.workflow_completion.IFailure,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'coresdk.workflow_completion.Failure', context) : context;\n  {\n    const c = o.failure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n}\n\nfunction walk_coresdk_workflow_completion_Success<Ctx>(\n  o: coresdk.workflow_completion.ISuccess,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'coresdk.workflow_completion.Success', context) : context;\n  {\n    const a = o.commands;\n    if (a) for (const v of a) walk_coresdk_workflow_commands_WorkflowCommand(v, env, ctx, pending);\n  }\n}\n\nfunction walk_coresdk_workflow_completion_WorkflowActivationCompletion<Ctx>(\n  o: coresdk.workflow_completion.IWorkflowActivationCompletion,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'coresdk.workflow_completion.WorkflowActivationCompletion', context)\n    : context;\n  {\n    const c = o.successful;\n    if (c != null) walk_coresdk_workflow_completion_Success(c, env, ctx, pending);\n  }\n  {\n    const c = o.failed;\n    if (c != null) walk_coresdk_workflow_completion_Failure(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_activity_v1_ActivityExecutionInfo<Ctx>(\n  o: temporal.api.activity.v1.IActivityExecutionInfo,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.activity.v1.ActivityExecutionInfo', context)\n    : context;\n  {\n    const c = o.heartbeatDetails;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n  {\n    const c = o.lastFailure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n  {\n    if (!env.skipSearchAttributes) {\n      const c = o.searchAttributes;\n      if (c != null) walk_temporal_api_common_v1_SearchAttributes(c, env, ctx, pending);\n    }\n  }\n  {\n    const c = o.header;\n    if (c != null) walk_temporal_api_common_v1_Header(c, env, ctx, pending);\n  }\n  {\n    const c = o.userMetadata;\n    if (c != null) walk_temporal_api_sdk_v1_UserMetadata(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_activity_v1_ActivityExecutionListInfo<Ctx>(\n  o: temporal.api.activity.v1.IActivityExecutionListInfo,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.activity.v1.ActivityExecutionListInfo', context)\n    : context;\n  {\n    if (!env.skipSearchAttributes) {\n      const c = o.searchAttributes;\n      if (c != null) walk_temporal_api_common_v1_SearchAttributes(c, env, ctx, pending);\n    }\n  }\n}\n\nfunction walk_temporal_api_activity_v1_ActivityExecutionOutcome<Ctx>(\n  o: temporal.api.activity.v1.IActivityExecutionOutcome,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.activity.v1.ActivityExecutionOutcome', context)\n    : context;\n  {\n    const c = o.result;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n  {\n    const c = o.failure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_activity_v1_CallbackInfo<Ctx>(\n  o: temporal.api.activity.v1.ICallbackInfo,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'temporal.api.activity.v1.CallbackInfo', context) : context;\n  {\n    const c = o.info;\n    if (c != null) walk_temporal_api_callback_v1_CallbackInfo(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_batch_v1_BatchOperationReset<Ctx>(\n  o: temporal.api.batch.v1.IBatchOperationReset,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'temporal.api.batch.v1.BatchOperationReset', context) : context;\n  {\n    const a = o.postResetOperations;\n    if (a) for (const v of a) walk_temporal_api_workflow_v1_PostResetOperation(v, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_batch_v1_BatchOperationSignal<Ctx>(\n  o: temporal.api.batch.v1.IBatchOperationSignal,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'temporal.api.batch.v1.BatchOperationSignal', context) : context;\n  {\n    const c = o.input;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n  {\n    const c = o.header;\n    if (c != null) walk_temporal_api_common_v1_Header(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_batch_v1_BatchOperationTermination<Ctx>(\n  o: temporal.api.batch.v1.IBatchOperationTermination,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.batch.v1.BatchOperationTermination', context)\n    : context;\n  {\n    const c = o.details;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_callback_v1_CallbackInfo<Ctx>(\n  o: temporal.api.callback.v1.ICallbackInfo,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'temporal.api.callback.v1.CallbackInfo', context) : context;\n  {\n    const c = o.lastAttemptFailure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_command_v1_CancelWorkflowExecutionCommandAttributes<Ctx>(\n  o: temporal.api.command.v1.ICancelWorkflowExecutionCommandAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.command.v1.CancelWorkflowExecutionCommandAttributes', context)\n    : context;\n  {\n    const c = o.details;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_command_v1_Command<Ctx>(\n  o: temporal.api.command.v1.ICommand,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'temporal.api.command.v1.Command', context) : context;\n  {\n    const c = o.userMetadata;\n    if (c != null) walk_temporal_api_sdk_v1_UserMetadata(c, env, ctx, pending);\n  }\n  {\n    const a = o.eventGroupMarkers;\n    if (a) for (const v of a) walk_temporal_api_sdk_v1_EventGroupMarker(v, env, ctx, pending);\n  }\n  {\n    const c = o.scheduleActivityTaskCommandAttributes;\n    if (c != null) walk_temporal_api_command_v1_ScheduleActivityTaskCommandAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.completeWorkflowExecutionCommandAttributes;\n    if (c != null) walk_temporal_api_command_v1_CompleteWorkflowExecutionCommandAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.failWorkflowExecutionCommandAttributes;\n    if (c != null) walk_temporal_api_command_v1_FailWorkflowExecutionCommandAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.cancelWorkflowExecutionCommandAttributes;\n    if (c != null) walk_temporal_api_command_v1_CancelWorkflowExecutionCommandAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.recordMarkerCommandAttributes;\n    if (c != null) walk_temporal_api_command_v1_RecordMarkerCommandAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.continueAsNewWorkflowExecutionCommandAttributes;\n    if (c != null) walk_temporal_api_command_v1_ContinueAsNewWorkflowExecutionCommandAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.startChildWorkflowExecutionCommandAttributes;\n    if (c != null) walk_temporal_api_command_v1_StartChildWorkflowExecutionCommandAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.signalExternalWorkflowExecutionCommandAttributes;\n    if (c != null) walk_temporal_api_command_v1_SignalExternalWorkflowExecutionCommandAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.upsertWorkflowSearchAttributesCommandAttributes;\n    if (c != null) walk_temporal_api_command_v1_UpsertWorkflowSearchAttributesCommandAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.modifyWorkflowPropertiesCommandAttributes;\n    if (c != null) walk_temporal_api_command_v1_ModifyWorkflowPropertiesCommandAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.scheduleNexusOperationCommandAttributes;\n    if (c != null) walk_temporal_api_command_v1_ScheduleNexusOperationCommandAttributes(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_command_v1_CompleteWorkflowExecutionCommandAttributes<Ctx>(\n  o: temporal.api.command.v1.ICompleteWorkflowExecutionCommandAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.command.v1.CompleteWorkflowExecutionCommandAttributes', context)\n    : context;\n  {\n    const c = o.result;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_command_v1_ContinueAsNewWorkflowExecutionCommandAttributes<Ctx>(\n  o: temporal.api.command.v1.IContinueAsNewWorkflowExecutionCommandAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.command.v1.ContinueAsNewWorkflowExecutionCommandAttributes', context)\n    : context;\n  {\n    const c = o.input;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n  {\n    const c = o.failure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n  {\n    const c = o.lastCompletionResult;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n  {\n    const c = o.header;\n    if (c != null) walk_temporal_api_common_v1_Header(c, env, ctx, pending);\n  }\n  {\n    const c = o.memo;\n    if (c != null) walk_temporal_api_common_v1_Memo(c, env, ctx, pending);\n  }\n  {\n    if (!env.skipSearchAttributes) {\n      const c = o.searchAttributes;\n      if (c != null) walk_temporal_api_common_v1_SearchAttributes(c, env, ctx, pending);\n    }\n  }\n}\n\nfunction walk_temporal_api_command_v1_FailWorkflowExecutionCommandAttributes<Ctx>(\n  o: temporal.api.command.v1.IFailWorkflowExecutionCommandAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.command.v1.FailWorkflowExecutionCommandAttributes', context)\n    : context;\n  {\n    const c = o.failure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_command_v1_ModifyWorkflowPropertiesCommandAttributes<Ctx>(\n  o: temporal.api.command.v1.IModifyWorkflowPropertiesCommandAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.command.v1.ModifyWorkflowPropertiesCommandAttributes', context)\n    : context;\n  {\n    const c = o.upsertedMemo;\n    if (c != null) walk_temporal_api_common_v1_Memo(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_command_v1_RecordMarkerCommandAttributes<Ctx>(\n  o: temporal.api.command.v1.IRecordMarkerCommandAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.command.v1.RecordMarkerCommandAttributes', context)\n    : context;\n  {\n    const m = o.details;\n    if (m) for (const v of Object.values(m)) walk_temporal_api_common_v1_Payloads(v, env, ctx, pending);\n  }\n  {\n    const c = o.header;\n    if (c != null) walk_temporal_api_common_v1_Header(c, env, ctx, pending);\n  }\n  {\n    const c = o.failure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_command_v1_ScheduleActivityTaskCommandAttributes<Ctx>(\n  o: temporal.api.command.v1.IScheduleActivityTaskCommandAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.command.v1.ScheduleActivityTaskCommandAttributes', context)\n    : context;\n  {\n    const c = o.header;\n    if (c != null) walk_temporal_api_common_v1_Header(c, env, ctx, pending);\n  }\n  {\n    const c = o.input;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_command_v1_ScheduleNexusOperationCommandAttributes<Ctx>(\n  o: temporal.api.command.v1.IScheduleNexusOperationCommandAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.command.v1.ScheduleNexusOperationCommandAttributes', context)\n    : context;\n  {\n    const p = o.input;\n    if (p != null)\n      pending.push(\n        env.transformPayload(p, ctx).then((r) => {\n          o.input = r;\n        })\n      );\n  }\n}\n\nfunction walk_temporal_api_command_v1_SignalExternalWorkflowExecutionCommandAttributes<Ctx>(\n  o: temporal.api.command.v1.ISignalExternalWorkflowExecutionCommandAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.command.v1.SignalExternalWorkflowExecutionCommandAttributes', context)\n    : context;\n  {\n    const c = o.input;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n  {\n    const c = o.header;\n    if (c != null) walk_temporal_api_common_v1_Header(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_command_v1_StartChildWorkflowExecutionCommandAttributes<Ctx>(\n  o: temporal.api.command.v1.IStartChildWorkflowExecutionCommandAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.command.v1.StartChildWorkflowExecutionCommandAttributes', context)\n    : context;\n  {\n    const c = o.input;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n  {\n    const c = o.header;\n    if (c != null) walk_temporal_api_common_v1_Header(c, env, ctx, pending);\n  }\n  {\n    const c = o.memo;\n    if (c != null) walk_temporal_api_common_v1_Memo(c, env, ctx, pending);\n  }\n  {\n    if (!env.skipSearchAttributes) {\n      const c = o.searchAttributes;\n      if (c != null) walk_temporal_api_common_v1_SearchAttributes(c, env, ctx, pending);\n    }\n  }\n}\n\nfunction walk_temporal_api_command_v1_UpsertWorkflowSearchAttributesCommandAttributes<Ctx>(\n  o: temporal.api.command.v1.IUpsertWorkflowSearchAttributesCommandAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.command.v1.UpsertWorkflowSearchAttributesCommandAttributes', context)\n    : context;\n  {\n    if (!env.skipSearchAttributes) {\n      const c = o.searchAttributes;\n      if (c != null) walk_temporal_api_common_v1_SearchAttributes(c, env, ctx, pending);\n    }\n  }\n}\n\nfunction walk_temporal_api_common_v1_Header<Ctx>(\n  o: temporal.api.common.v1.IHeader,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'temporal.api.common.v1.Header', context) : context;\n  {\n    const m = o.fields;\n    if (m)\n      for (const [k, v] of Object.entries(m))\n        pending.push(\n          env.transformPayload(v, ctx).then((r) => {\n            m[k] = r;\n          })\n        );\n  }\n}\n\nfunction walk_temporal_api_common_v1_Memo<Ctx>(\n  o: temporal.api.common.v1.IMemo,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'temporal.api.common.v1.Memo', context) : context;\n  {\n    const m = o.fields;\n    if (m)\n      for (const [k, v] of Object.entries(m))\n        pending.push(\n          env.transformPayload(v, ctx).then((r) => {\n            m[k] = r;\n          })\n        );\n  }\n}\n\nfunction walk_temporal_api_common_v1_Payloads<Ctx>(\n  o: temporal.api.common.v1.IPayloads,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'temporal.api.common.v1.Payloads', context) : context;\n  {\n    const a = o.payloads;\n    if (a && a.length)\n      pending.push(\n        env.transformPayloads(a, ctx).then((r) => {\n          o.payloads = r;\n        })\n      );\n  }\n}\n\nfunction walk_temporal_api_common_v1_SearchAttributes<Ctx>(\n  o: temporal.api.common.v1.ISearchAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'temporal.api.common.v1.SearchAttributes', context) : context;\n  {\n    const m = o.indexedFields;\n    if (m)\n      for (const [k, v] of Object.entries(m))\n        pending.push(\n          env.transformPayload(v, ctx).then((r) => {\n            m[k] = r;\n          })\n        );\n  }\n}\n\nfunction walk_temporal_api_compute_v1_ComputeConfig<Ctx>(\n  o: temporal.api.compute.v1.IComputeConfig,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'temporal.api.compute.v1.ComputeConfig', context) : context;\n  {\n    const m = o.scalingGroups;\n    if (m)\n      for (const v of Object.values(m)) walk_temporal_api_compute_v1_ComputeConfigScalingGroup(v, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_compute_v1_ComputeConfigScalingGroup<Ctx>(\n  o: temporal.api.compute.v1.IComputeConfigScalingGroup,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.compute.v1.ComputeConfigScalingGroup', context)\n    : context;\n  {\n    const c = o.provider;\n    if (c != null) walk_temporal_api_compute_v1_ComputeProvider(c, env, ctx, pending);\n  }\n  {\n    const c = o.scaler;\n    if (c != null) walk_temporal_api_compute_v1_ComputeScaler(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_compute_v1_ComputeConfigScalingGroupUpdate<Ctx>(\n  o: temporal.api.compute.v1.IComputeConfigScalingGroupUpdate,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.compute.v1.ComputeConfigScalingGroupUpdate', context)\n    : context;\n  {\n    const c = o.scalingGroup;\n    if (c != null) walk_temporal_api_compute_v1_ComputeConfigScalingGroup(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_compute_v1_ComputeProvider<Ctx>(\n  o: temporal.api.compute.v1.IComputeProvider,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'temporal.api.compute.v1.ComputeProvider', context) : context;\n  {\n    const p = o.details;\n    if (p != null)\n      pending.push(\n        env.transformPayload(p, ctx).then((r) => {\n          o.details = r;\n        })\n      );\n  }\n}\n\nfunction walk_temporal_api_compute_v1_ComputeScaler<Ctx>(\n  o: temporal.api.compute.v1.IComputeScaler,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'temporal.api.compute.v1.ComputeScaler', context) : context;\n  {\n    const p = o.details;\n    if (p != null)\n      pending.push(\n        env.transformPayload(p, ctx).then((r) => {\n          o.details = r;\n        })\n      );\n  }\n}\n\nfunction walk_temporal_api_deployment_v1_DeploymentInfo<Ctx>(\n  o: temporal.api.deployment.v1.IDeploymentInfo,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'temporal.api.deployment.v1.DeploymentInfo', context) : context;\n  {\n    const m = o.metadata;\n    if (m)\n      for (const [k, v] of Object.entries(m))\n        pending.push(\n          env.transformPayload(v, ctx).then((r) => {\n            m[k] = r;\n          })\n        );\n  }\n}\n\nfunction walk_temporal_api_deployment_v1_UpdateDeploymentMetadata<Ctx>(\n  o: temporal.api.deployment.v1.IUpdateDeploymentMetadata,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.deployment.v1.UpdateDeploymentMetadata', context)\n    : context;\n  {\n    const m = o.upsertEntries;\n    if (m)\n      for (const [k, v] of Object.entries(m))\n        pending.push(\n          env.transformPayload(v, ctx).then((r) => {\n            m[k] = r;\n          })\n        );\n  }\n}\n\nfunction walk_temporal_api_deployment_v1_VersionMetadata<Ctx>(\n  o: temporal.api.deployment.v1.IVersionMetadata,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'temporal.api.deployment.v1.VersionMetadata', context) : context;\n  {\n    const m = o.entries;\n    if (m)\n      for (const [k, v] of Object.entries(m))\n        pending.push(\n          env.transformPayload(v, ctx).then((r) => {\n            m[k] = r;\n          })\n        );\n  }\n}\n\nfunction walk_temporal_api_deployment_v1_WorkerDeploymentVersionInfo<Ctx>(\n  o: temporal.api.deployment.v1.IWorkerDeploymentVersionInfo,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.deployment.v1.WorkerDeploymentVersionInfo', context)\n    : context;\n  {\n    const c = o.metadata;\n    if (c != null) walk_temporal_api_deployment_v1_VersionMetadata(c, env, ctx, pending);\n  }\n  {\n    const c = o.computeConfig;\n    if (c != null) walk_temporal_api_compute_v1_ComputeConfig(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_failure_v1_ApplicationFailureInfo<Ctx>(\n  o: temporal.api.failure.v1.IApplicationFailureInfo,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.failure.v1.ApplicationFailureInfo', context)\n    : context;\n  {\n    const c = o.details;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_failure_v1_CanceledFailureInfo<Ctx>(\n  o: temporal.api.failure.v1.ICanceledFailureInfo,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.failure.v1.CanceledFailureInfo', context)\n    : context;\n  {\n    const c = o.details;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_failure_v1_Failure<Ctx>(\n  o: temporal.api.failure.v1.IFailure,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'temporal.api.failure.v1.Failure', context) : context;\n  {\n    const p = o.encodedAttributes;\n    if (p != null)\n      pending.push(\n        env.transformPayload(p, ctx).then((r) => {\n          o.encodedAttributes = r;\n        })\n      );\n  }\n  {\n    const c = o.cause;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n  {\n    const c = o.applicationFailureInfo;\n    if (c != null) walk_temporal_api_failure_v1_ApplicationFailureInfo(c, env, ctx, pending);\n  }\n  {\n    const c = o.timeoutFailureInfo;\n    if (c != null) walk_temporal_api_failure_v1_TimeoutFailureInfo(c, env, ctx, pending);\n  }\n  {\n    const c = o.canceledFailureInfo;\n    if (c != null) walk_temporal_api_failure_v1_CanceledFailureInfo(c, env, ctx, pending);\n  }\n  {\n    const c = o.resetWorkflowFailureInfo;\n    if (c != null) walk_temporal_api_failure_v1_ResetWorkflowFailureInfo(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_failure_v1_ResetWorkflowFailureInfo<Ctx>(\n  o: temporal.api.failure.v1.IResetWorkflowFailureInfo,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.failure.v1.ResetWorkflowFailureInfo', context)\n    : context;\n  {\n    const c = o.lastHeartbeatDetails;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_failure_v1_TimeoutFailureInfo<Ctx>(\n  o: temporal.api.failure.v1.ITimeoutFailureInfo,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'temporal.api.failure.v1.TimeoutFailureInfo', context) : context;\n  {\n    const c = o.lastHeartbeatDetails;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_history_v1_ActivityTaskCanceledEventAttributes<Ctx>(\n  o: temporal.api.history.v1.IActivityTaskCanceledEventAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.history.v1.ActivityTaskCanceledEventAttributes', context)\n    : context;\n  {\n    const c = o.details;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_history_v1_ActivityTaskCompletedEventAttributes<Ctx>(\n  o: temporal.api.history.v1.IActivityTaskCompletedEventAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.history.v1.ActivityTaskCompletedEventAttributes', context)\n    : context;\n  {\n    const c = o.result;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_history_v1_ActivityTaskFailedEventAttributes<Ctx>(\n  o: temporal.api.history.v1.IActivityTaskFailedEventAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.history.v1.ActivityTaskFailedEventAttributes', context)\n    : context;\n  {\n    const c = o.failure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_history_v1_ActivityTaskScheduledEventAttributes<Ctx>(\n  o: temporal.api.history.v1.IActivityTaskScheduledEventAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.history.v1.ActivityTaskScheduledEventAttributes', context)\n    : context;\n  {\n    const c = o.header;\n    if (c != null) walk_temporal_api_common_v1_Header(c, env, ctx, pending);\n  }\n  {\n    const c = o.input;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_history_v1_ActivityTaskStartedEventAttributes<Ctx>(\n  o: temporal.api.history.v1.IActivityTaskStartedEventAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.history.v1.ActivityTaskStartedEventAttributes', context)\n    : context;\n  {\n    const c = o.lastFailure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_history_v1_ActivityTaskTimedOutEventAttributes<Ctx>(\n  o: temporal.api.history.v1.IActivityTaskTimedOutEventAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.history.v1.ActivityTaskTimedOutEventAttributes', context)\n    : context;\n  {\n    const c = o.failure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_history_v1_ChildWorkflowExecutionCanceledEventAttributes<Ctx>(\n  o: temporal.api.history.v1.IChildWorkflowExecutionCanceledEventAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.history.v1.ChildWorkflowExecutionCanceledEventAttributes', context)\n    : context;\n  {\n    const c = o.details;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_history_v1_ChildWorkflowExecutionCompletedEventAttributes<Ctx>(\n  o: temporal.api.history.v1.IChildWorkflowExecutionCompletedEventAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.history.v1.ChildWorkflowExecutionCompletedEventAttributes', context)\n    : context;\n  {\n    const c = o.result;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_history_v1_ChildWorkflowExecutionFailedEventAttributes<Ctx>(\n  o: temporal.api.history.v1.IChildWorkflowExecutionFailedEventAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.history.v1.ChildWorkflowExecutionFailedEventAttributes', context)\n    : context;\n  {\n    const c = o.failure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_history_v1_ChildWorkflowExecutionStartedEventAttributes<Ctx>(\n  o: temporal.api.history.v1.IChildWorkflowExecutionStartedEventAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.history.v1.ChildWorkflowExecutionStartedEventAttributes', context)\n    : context;\n  {\n    const c = o.header;\n    if (c != null) walk_temporal_api_common_v1_Header(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_history_v1_History<Ctx>(\n  o: temporal.api.history.v1.IHistory,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'temporal.api.history.v1.History', context) : context;\n  {\n    const a = o.events;\n    if (a) for (const v of a) walk_temporal_api_history_v1_HistoryEvent(v, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_history_v1_HistoryEvent<Ctx>(\n  o: temporal.api.history.v1.IHistoryEvent,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'temporal.api.history.v1.HistoryEvent', context) : context;\n  {\n    const c = o.userMetadata;\n    if (c != null) walk_temporal_api_sdk_v1_UserMetadata(c, env, ctx, pending);\n  }\n  {\n    const a = o.eventGroupMarkers;\n    if (a) for (const v of a) walk_temporal_api_sdk_v1_EventGroupMarker(v, env, ctx, pending);\n  }\n  {\n    const c = o.workflowExecutionStartedEventAttributes;\n    if (c != null) walk_temporal_api_history_v1_WorkflowExecutionStartedEventAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.workflowExecutionCompletedEventAttributes;\n    if (c != null) walk_temporal_api_history_v1_WorkflowExecutionCompletedEventAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.workflowExecutionFailedEventAttributes;\n    if (c != null) walk_temporal_api_history_v1_WorkflowExecutionFailedEventAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.workflowTaskFailedEventAttributes;\n    if (c != null) walk_temporal_api_history_v1_WorkflowTaskFailedEventAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.activityTaskScheduledEventAttributes;\n    if (c != null) walk_temporal_api_history_v1_ActivityTaskScheduledEventAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.activityTaskStartedEventAttributes;\n    if (c != null) walk_temporal_api_history_v1_ActivityTaskStartedEventAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.activityTaskCompletedEventAttributes;\n    if (c != null) walk_temporal_api_history_v1_ActivityTaskCompletedEventAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.activityTaskFailedEventAttributes;\n    if (c != null) walk_temporal_api_history_v1_ActivityTaskFailedEventAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.activityTaskTimedOutEventAttributes;\n    if (c != null) walk_temporal_api_history_v1_ActivityTaskTimedOutEventAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.activityTaskCanceledEventAttributes;\n    if (c != null) walk_temporal_api_history_v1_ActivityTaskCanceledEventAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.markerRecordedEventAttributes;\n    if (c != null) walk_temporal_api_history_v1_MarkerRecordedEventAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.workflowExecutionSignaledEventAttributes;\n    if (c != null) walk_temporal_api_history_v1_WorkflowExecutionSignaledEventAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.workflowExecutionTerminatedEventAttributes;\n    if (c != null) walk_temporal_api_history_v1_WorkflowExecutionTerminatedEventAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.workflowExecutionCanceledEventAttributes;\n    if (c != null) walk_temporal_api_history_v1_WorkflowExecutionCanceledEventAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.workflowExecutionContinuedAsNewEventAttributes;\n    if (c != null) walk_temporal_api_history_v1_WorkflowExecutionContinuedAsNewEventAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.startChildWorkflowExecutionInitiatedEventAttributes;\n    if (c != null)\n      walk_temporal_api_history_v1_StartChildWorkflowExecutionInitiatedEventAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.childWorkflowExecutionStartedEventAttributes;\n    if (c != null) walk_temporal_api_history_v1_ChildWorkflowExecutionStartedEventAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.childWorkflowExecutionCompletedEventAttributes;\n    if (c != null) walk_temporal_api_history_v1_ChildWorkflowExecutionCompletedEventAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.childWorkflowExecutionFailedEventAttributes;\n    if (c != null) walk_temporal_api_history_v1_ChildWorkflowExecutionFailedEventAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.childWorkflowExecutionCanceledEventAttributes;\n    if (c != null) walk_temporal_api_history_v1_ChildWorkflowExecutionCanceledEventAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.signalExternalWorkflowExecutionInitiatedEventAttributes;\n    if (c != null)\n      walk_temporal_api_history_v1_SignalExternalWorkflowExecutionInitiatedEventAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.upsertWorkflowSearchAttributesEventAttributes;\n    if (c != null) walk_temporal_api_history_v1_UpsertWorkflowSearchAttributesEventAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.workflowExecutionUpdateAcceptedEventAttributes;\n    if (c != null) walk_temporal_api_history_v1_WorkflowExecutionUpdateAcceptedEventAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.workflowExecutionUpdateRejectedEventAttributes;\n    if (c != null) walk_temporal_api_history_v1_WorkflowExecutionUpdateRejectedEventAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.workflowExecutionUpdateCompletedEventAttributes;\n    if (c != null) walk_temporal_api_history_v1_WorkflowExecutionUpdateCompletedEventAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.workflowPropertiesModifiedExternallyEventAttributes;\n    if (c != null)\n      walk_temporal_api_history_v1_WorkflowPropertiesModifiedExternallyEventAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.workflowPropertiesModifiedEventAttributes;\n    if (c != null) walk_temporal_api_history_v1_WorkflowPropertiesModifiedEventAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.workflowExecutionUpdateAdmittedEventAttributes;\n    if (c != null) walk_temporal_api_history_v1_WorkflowExecutionUpdateAdmittedEventAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.nexusOperationScheduledEventAttributes;\n    if (c != null) walk_temporal_api_history_v1_NexusOperationScheduledEventAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.nexusOperationCompletedEventAttributes;\n    if (c != null) walk_temporal_api_history_v1_NexusOperationCompletedEventAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.nexusOperationFailedEventAttributes;\n    if (c != null) walk_temporal_api_history_v1_NexusOperationFailedEventAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.nexusOperationCanceledEventAttributes;\n    if (c != null) walk_temporal_api_history_v1_NexusOperationCanceledEventAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.nexusOperationTimedOutEventAttributes;\n    if (c != null) walk_temporal_api_history_v1_NexusOperationTimedOutEventAttributes(c, env, ctx, pending);\n  }\n  {\n    const c = o.nexusOperationCancelRequestFailedEventAttributes;\n    if (c != null) walk_temporal_api_history_v1_NexusOperationCancelRequestFailedEventAttributes(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_history_v1_MarkerRecordedEventAttributes<Ctx>(\n  o: temporal.api.history.v1.IMarkerRecordedEventAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.history.v1.MarkerRecordedEventAttributes', context)\n    : context;\n  {\n    const m = o.details;\n    if (m) for (const v of Object.values(m)) walk_temporal_api_common_v1_Payloads(v, env, ctx, pending);\n  }\n  {\n    const c = o.header;\n    if (c != null) walk_temporal_api_common_v1_Header(c, env, ctx, pending);\n  }\n  {\n    const c = o.failure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_history_v1_NexusOperationCanceledEventAttributes<Ctx>(\n  o: temporal.api.history.v1.INexusOperationCanceledEventAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.history.v1.NexusOperationCanceledEventAttributes', context)\n    : context;\n  {\n    const c = o.failure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_history_v1_NexusOperationCancelRequestFailedEventAttributes<Ctx>(\n  o: temporal.api.history.v1.INexusOperationCancelRequestFailedEventAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.history.v1.NexusOperationCancelRequestFailedEventAttributes', context)\n    : context;\n  {\n    const c = o.failure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_history_v1_NexusOperationCompletedEventAttributes<Ctx>(\n  o: temporal.api.history.v1.INexusOperationCompletedEventAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.history.v1.NexusOperationCompletedEventAttributes', context)\n    : context;\n  {\n    const p = o.result;\n    if (p != null)\n      pending.push(\n        env.transformPayload(p, ctx).then((r) => {\n          o.result = r;\n        })\n      );\n  }\n}\n\nfunction walk_temporal_api_history_v1_NexusOperationFailedEventAttributes<Ctx>(\n  o: temporal.api.history.v1.INexusOperationFailedEventAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.history.v1.NexusOperationFailedEventAttributes', context)\n    : context;\n  {\n    const c = o.failure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_history_v1_NexusOperationScheduledEventAttributes<Ctx>(\n  o: temporal.api.history.v1.INexusOperationScheduledEventAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.history.v1.NexusOperationScheduledEventAttributes', context)\n    : context;\n  {\n    const p = o.input;\n    if (p != null)\n      pending.push(\n        env.transformPayload(p, ctx).then((r) => {\n          o.input = r;\n        })\n      );\n  }\n}\n\nfunction walk_temporal_api_history_v1_NexusOperationTimedOutEventAttributes<Ctx>(\n  o: temporal.api.history.v1.INexusOperationTimedOutEventAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.history.v1.NexusOperationTimedOutEventAttributes', context)\n    : context;\n  {\n    const c = o.failure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_history_v1_SignalExternalWorkflowExecutionInitiatedEventAttributes<Ctx>(\n  o: temporal.api.history.v1.ISignalExternalWorkflowExecutionInitiatedEventAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.history.v1.SignalExternalWorkflowExecutionInitiatedEventAttributes', context)\n    : context;\n  {\n    const c = o.input;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n  {\n    const c = o.header;\n    if (c != null) walk_temporal_api_common_v1_Header(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_history_v1_StartChildWorkflowExecutionInitiatedEventAttributes<Ctx>(\n  o: temporal.api.history.v1.IStartChildWorkflowExecutionInitiatedEventAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.history.v1.StartChildWorkflowExecutionInitiatedEventAttributes', context)\n    : context;\n  {\n    const c = o.input;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n  {\n    const c = o.header;\n    if (c != null) walk_temporal_api_common_v1_Header(c, env, ctx, pending);\n  }\n  {\n    const c = o.memo;\n    if (c != null) walk_temporal_api_common_v1_Memo(c, env, ctx, pending);\n  }\n  {\n    if (!env.skipSearchAttributes) {\n      const c = o.searchAttributes;\n      if (c != null) walk_temporal_api_common_v1_SearchAttributes(c, env, ctx, pending);\n    }\n  }\n}\n\nfunction walk_temporal_api_history_v1_UpsertWorkflowSearchAttributesEventAttributes<Ctx>(\n  o: temporal.api.history.v1.IUpsertWorkflowSearchAttributesEventAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.history.v1.UpsertWorkflowSearchAttributesEventAttributes', context)\n    : context;\n  {\n    if (!env.skipSearchAttributes) {\n      const c = o.searchAttributes;\n      if (c != null) walk_temporal_api_common_v1_SearchAttributes(c, env, ctx, pending);\n    }\n  }\n}\n\nfunction walk_temporal_api_history_v1_WorkflowExecutionCanceledEventAttributes<Ctx>(\n  o: temporal.api.history.v1.IWorkflowExecutionCanceledEventAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.history.v1.WorkflowExecutionCanceledEventAttributes', context)\n    : context;\n  {\n    const c = o.details;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_history_v1_WorkflowExecutionCompletedEventAttributes<Ctx>(\n  o: temporal.api.history.v1.IWorkflowExecutionCompletedEventAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.history.v1.WorkflowExecutionCompletedEventAttributes', context)\n    : context;\n  {\n    const c = o.result;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_history_v1_WorkflowExecutionContinuedAsNewEventAttributes<Ctx>(\n  o: temporal.api.history.v1.IWorkflowExecutionContinuedAsNewEventAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.history.v1.WorkflowExecutionContinuedAsNewEventAttributes', context)\n    : context;\n  {\n    const c = o.input;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n  {\n    const c = o.failure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n  {\n    const c = o.lastCompletionResult;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n  {\n    const c = o.header;\n    if (c != null) walk_temporal_api_common_v1_Header(c, env, ctx, pending);\n  }\n  {\n    const c = o.memo;\n    if (c != null) walk_temporal_api_common_v1_Memo(c, env, ctx, pending);\n  }\n  {\n    if (!env.skipSearchAttributes) {\n      const c = o.searchAttributes;\n      if (c != null) walk_temporal_api_common_v1_SearchAttributes(c, env, ctx, pending);\n    }\n  }\n}\n\nfunction walk_temporal_api_history_v1_WorkflowExecutionFailedEventAttributes<Ctx>(\n  o: temporal.api.history.v1.IWorkflowExecutionFailedEventAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.history.v1.WorkflowExecutionFailedEventAttributes', context)\n    : context;\n  {\n    const c = o.failure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_history_v1_WorkflowExecutionSignaledEventAttributes<Ctx>(\n  o: temporal.api.history.v1.IWorkflowExecutionSignaledEventAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.history.v1.WorkflowExecutionSignaledEventAttributes', context)\n    : context;\n  {\n    const c = o.input;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n  {\n    const c = o.header;\n    if (c != null) walk_temporal_api_common_v1_Header(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_history_v1_WorkflowExecutionStartedEventAttributes<Ctx>(\n  o: temporal.api.history.v1.IWorkflowExecutionStartedEventAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.history.v1.WorkflowExecutionStartedEventAttributes', context)\n    : context;\n  {\n    const c = o.input;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n  {\n    const c = o.continuedFailure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n  {\n    const c = o.lastCompletionResult;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n  {\n    const c = o.memo;\n    if (c != null) walk_temporal_api_common_v1_Memo(c, env, ctx, pending);\n  }\n  {\n    if (!env.skipSearchAttributes) {\n      const c = o.searchAttributes;\n      if (c != null) walk_temporal_api_common_v1_SearchAttributes(c, env, ctx, pending);\n    }\n  }\n  {\n    const c = o.header;\n    if (c != null) walk_temporal_api_common_v1_Header(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_history_v1_WorkflowExecutionTerminatedEventAttributes<Ctx>(\n  o: temporal.api.history.v1.IWorkflowExecutionTerminatedEventAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.history.v1.WorkflowExecutionTerminatedEventAttributes', context)\n    : context;\n  {\n    const c = o.details;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_history_v1_WorkflowExecutionUpdateAcceptedEventAttributes<Ctx>(\n  o: temporal.api.history.v1.IWorkflowExecutionUpdateAcceptedEventAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.history.v1.WorkflowExecutionUpdateAcceptedEventAttributes', context)\n    : context;\n  {\n    const c = o.acceptedRequest;\n    if (c != null) walk_temporal_api_update_v1_Request(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_history_v1_WorkflowExecutionUpdateAdmittedEventAttributes<Ctx>(\n  o: temporal.api.history.v1.IWorkflowExecutionUpdateAdmittedEventAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.history.v1.WorkflowExecutionUpdateAdmittedEventAttributes', context)\n    : context;\n  {\n    const c = o.request;\n    if (c != null) walk_temporal_api_update_v1_Request(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_history_v1_WorkflowExecutionUpdateCompletedEventAttributes<Ctx>(\n  o: temporal.api.history.v1.IWorkflowExecutionUpdateCompletedEventAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.history.v1.WorkflowExecutionUpdateCompletedEventAttributes', context)\n    : context;\n  {\n    const c = o.outcome;\n    if (c != null) walk_temporal_api_update_v1_Outcome(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_history_v1_WorkflowExecutionUpdateRejectedEventAttributes<Ctx>(\n  o: temporal.api.history.v1.IWorkflowExecutionUpdateRejectedEventAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.history.v1.WorkflowExecutionUpdateRejectedEventAttributes', context)\n    : context;\n  {\n    const c = o.rejectedRequest;\n    if (c != null) walk_temporal_api_update_v1_Request(c, env, ctx, pending);\n  }\n  {\n    const c = o.failure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_history_v1_WorkflowPropertiesModifiedEventAttributes<Ctx>(\n  o: temporal.api.history.v1.IWorkflowPropertiesModifiedEventAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.history.v1.WorkflowPropertiesModifiedEventAttributes', context)\n    : context;\n  {\n    const c = o.upsertedMemo;\n    if (c != null) walk_temporal_api_common_v1_Memo(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_history_v1_WorkflowPropertiesModifiedExternallyEventAttributes<Ctx>(\n  o: temporal.api.history.v1.IWorkflowPropertiesModifiedExternallyEventAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.history.v1.WorkflowPropertiesModifiedExternallyEventAttributes', context)\n    : context;\n  {\n    const c = o.upsertedMemo;\n    if (c != null) walk_temporal_api_common_v1_Memo(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_history_v1_WorkflowTaskFailedEventAttributes<Ctx>(\n  o: temporal.api.history.v1.IWorkflowTaskFailedEventAttributes,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.history.v1.WorkflowTaskFailedEventAttributes', context)\n    : context;\n  {\n    const c = o.failure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_nexus_v1_NexusOperationExecutionCancellationInfo<Ctx>(\n  o: temporal.api.nexus.v1.INexusOperationExecutionCancellationInfo,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.nexus.v1.NexusOperationExecutionCancellationInfo', context)\n    : context;\n  {\n    const c = o.lastAttemptFailure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_nexus_v1_NexusOperationExecutionInfo<Ctx>(\n  o: temporal.api.nexus.v1.INexusOperationExecutionInfo,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.nexus.v1.NexusOperationExecutionInfo', context)\n    : context;\n  {\n    const c = o.lastAttemptFailure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n  {\n    const c = o.cancellationInfo;\n    if (c != null) walk_temporal_api_nexus_v1_NexusOperationExecutionCancellationInfo(c, env, ctx, pending);\n  }\n  {\n    if (!env.skipSearchAttributes) {\n      const c = o.searchAttributes;\n      if (c != null) walk_temporal_api_common_v1_SearchAttributes(c, env, ctx, pending);\n    }\n  }\n  {\n    const c = o.userMetadata;\n    if (c != null) walk_temporal_api_sdk_v1_UserMetadata(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_nexus_v1_NexusOperationExecutionListInfo<Ctx>(\n  o: temporal.api.nexus.v1.INexusOperationExecutionListInfo,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.nexus.v1.NexusOperationExecutionListInfo', context)\n    : context;\n  {\n    if (!env.skipSearchAttributes) {\n      const c = o.searchAttributes;\n      if (c != null) walk_temporal_api_common_v1_SearchAttributes(c, env, ctx, pending);\n    }\n  }\n}\n\nfunction walk_temporal_api_nexus_v1_Request<Ctx>(\n  o: temporal.api.nexus.v1.IRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'temporal.api.nexus.v1.Request', context) : context;\n  {\n    const c = o.startOperation;\n    if (c != null) walk_temporal_api_nexus_v1_StartOperationRequest(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_nexus_v1_Response<Ctx>(\n  o: temporal.api.nexus.v1.IResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'temporal.api.nexus.v1.Response', context) : context;\n  {\n    const c = o.startOperation;\n    if (c != null) walk_temporal_api_nexus_v1_StartOperationResponse(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_nexus_v1_StartOperationRequest<Ctx>(\n  o: temporal.api.nexus.v1.IStartOperationRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.nexus.v1.StartOperationRequest', context)\n    : context;\n  {\n    const p = o.payload;\n    if (p != null)\n      pending.push(\n        env.transformPayload(p, ctx).then((r) => {\n          o.payload = r;\n        })\n      );\n  }\n}\n\nfunction walk_temporal_api_nexus_v1_StartOperationResponse<Ctx>(\n  o: temporal.api.nexus.v1.IStartOperationResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.nexus.v1.StartOperationResponse', context)\n    : context;\n  {\n    const c = o.syncSuccess;\n    if (c != null) walk_temporal_api_nexus_v1_StartOperationResponse_Sync(c, env, ctx, pending);\n  }\n  {\n    const c = o.failure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_nexus_v1_StartOperationResponse_Sync<Ctx>(\n  o: temporal.api.nexus.v1.StartOperationResponse.ISync,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.nexus.v1.StartOperationResponse.Sync', context)\n    : context;\n  {\n    const p = o.payload;\n    if (p != null)\n      pending.push(\n        env.transformPayload(p, ctx).then((r) => {\n          o.payload = r;\n        })\n      );\n  }\n}\n\nfunction walk_temporal_api_query_v1_WorkflowQuery<Ctx>(\n  o: temporal.api.query.v1.IWorkflowQuery,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'temporal.api.query.v1.WorkflowQuery', context) : context;\n  {\n    const c = o.queryArgs;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n  {\n    const c = o.header;\n    if (c != null) walk_temporal_api_common_v1_Header(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_query_v1_WorkflowQueryResult<Ctx>(\n  o: temporal.api.query.v1.IWorkflowQueryResult,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'temporal.api.query.v1.WorkflowQueryResult', context) : context;\n  {\n    const c = o.answer;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n  {\n    const c = o.failure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_schedule_v1_Schedule<Ctx>(\n  o: temporal.api.schedule.v1.ISchedule,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'temporal.api.schedule.v1.Schedule', context) : context;\n  {\n    const c = o.action;\n    if (c != null) walk_temporal_api_schedule_v1_ScheduleAction(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_schedule_v1_ScheduleAction<Ctx>(\n  o: temporal.api.schedule.v1.IScheduleAction,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'temporal.api.schedule.v1.ScheduleAction', context) : context;\n  {\n    const c = o.startWorkflow;\n    if (c != null) walk_temporal_api_workflow_v1_NewWorkflowExecutionInfo(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_schedule_v1_ScheduleListEntry<Ctx>(\n  o: temporal.api.schedule.v1.IScheduleListEntry,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'temporal.api.schedule.v1.ScheduleListEntry', context) : context;\n  {\n    const c = o.memo;\n    if (c != null) walk_temporal_api_common_v1_Memo(c, env, ctx, pending);\n  }\n  {\n    if (!env.skipSearchAttributes) {\n      const c = o.searchAttributes;\n      if (c != null) walk_temporal_api_common_v1_SearchAttributes(c, env, ctx, pending);\n    }\n  }\n}\n\nfunction walk_temporal_api_sdk_v1_EventGroupMarker<Ctx>(\n  o: temporal.api.sdk.v1.IEventGroupMarker,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'temporal.api.sdk.v1.EventGroupMarker', context) : context;\n  {\n    const c = o.label;\n    if (c != null) walk_temporal_api_sdk_v1_EventGroupMarker_Label(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_sdk_v1_EventGroupMarker_Label<Ctx>(\n  o: temporal.api.sdk.v1.EventGroupMarker.ILabel,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'temporal.api.sdk.v1.EventGroupMarker.Label', context) : context;\n  {\n    const p = o.label;\n    if (p != null)\n      pending.push(\n        env.transformPayload(p, ctx).then((r) => {\n          o.label = r;\n        })\n      );\n  }\n}\n\nfunction walk_temporal_api_sdk_v1_UserMetadata<Ctx>(\n  o: temporal.api.sdk.v1.IUserMetadata,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'temporal.api.sdk.v1.UserMetadata', context) : context;\n  {\n    const p = o.summary;\n    if (p != null)\n      pending.push(\n        env.transformPayload(p, ctx).then((r) => {\n          o.summary = r;\n        })\n      );\n  }\n  {\n    const p = o.details;\n    if (p != null)\n      pending.push(\n        env.transformPayload(p, ctx).then((r) => {\n          o.details = r;\n        })\n      );\n  }\n}\n\nfunction walk_temporal_api_update_v1_Input<Ctx>(\n  o: temporal.api.update.v1.IInput,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'temporal.api.update.v1.Input', context) : context;\n  {\n    const c = o.header;\n    if (c != null) walk_temporal_api_common_v1_Header(c, env, ctx, pending);\n  }\n  {\n    const c = o.args;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_update_v1_Outcome<Ctx>(\n  o: temporal.api.update.v1.IOutcome,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'temporal.api.update.v1.Outcome', context) : context;\n  {\n    const c = o.success;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n  {\n    const c = o.failure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_update_v1_Request<Ctx>(\n  o: temporal.api.update.v1.IRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'temporal.api.update.v1.Request', context) : context;\n  {\n    const c = o.input;\n    if (c != null) walk_temporal_api_update_v1_Input(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflow_v1_CallbackInfo<Ctx>(\n  o: temporal.api.workflow.v1.ICallbackInfo,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext ? env.deriveContext(o, 'temporal.api.workflow.v1.CallbackInfo', context) : context;\n  {\n    const c = o.lastAttemptFailure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflow_v1_NewWorkflowExecutionInfo<Ctx>(\n  o: temporal.api.workflow.v1.INewWorkflowExecutionInfo,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflow.v1.NewWorkflowExecutionInfo', context)\n    : context;\n  {\n    const c = o.input;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n  {\n    const c = o.memo;\n    if (c != null) walk_temporal_api_common_v1_Memo(c, env, ctx, pending);\n  }\n  {\n    if (!env.skipSearchAttributes) {\n      const c = o.searchAttributes;\n      if (c != null) walk_temporal_api_common_v1_SearchAttributes(c, env, ctx, pending);\n    }\n  }\n  {\n    const c = o.header;\n    if (c != null) walk_temporal_api_common_v1_Header(c, env, ctx, pending);\n  }\n  {\n    const c = o.userMetadata;\n    if (c != null) walk_temporal_api_sdk_v1_UserMetadata(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflow_v1_NexusOperationCancellationInfo<Ctx>(\n  o: temporal.api.workflow.v1.INexusOperationCancellationInfo,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflow.v1.NexusOperationCancellationInfo', context)\n    : context;\n  {\n    const c = o.lastAttemptFailure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflow_v1_PendingActivityInfo<Ctx>(\n  o: temporal.api.workflow.v1.IPendingActivityInfo,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflow.v1.PendingActivityInfo', context)\n    : context;\n  {\n    const c = o.heartbeatDetails;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n  {\n    const c = o.lastFailure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflow_v1_PendingNexusOperationInfo<Ctx>(\n  o: temporal.api.workflow.v1.IPendingNexusOperationInfo,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflow.v1.PendingNexusOperationInfo', context)\n    : context;\n  {\n    const c = o.lastAttemptFailure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n  {\n    const c = o.cancellationInfo;\n    if (c != null) walk_temporal_api_workflow_v1_NexusOperationCancellationInfo(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflow_v1_PostResetOperation<Ctx>(\n  o: temporal.api.workflow.v1.IPostResetOperation,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflow.v1.PostResetOperation', context)\n    : context;\n  {\n    const c = o.signalWorkflow;\n    if (c != null) walk_temporal_api_workflow_v1_PostResetOperation_SignalWorkflow(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflow_v1_PostResetOperation_SignalWorkflow<Ctx>(\n  o: temporal.api.workflow.v1.PostResetOperation.ISignalWorkflow,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflow.v1.PostResetOperation.SignalWorkflow', context)\n    : context;\n  {\n    const c = o.input;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n  {\n    const c = o.header;\n    if (c != null) walk_temporal_api_common_v1_Header(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflow_v1_WorkflowExecutionConfig<Ctx>(\n  o: temporal.api.workflow.v1.IWorkflowExecutionConfig,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflow.v1.WorkflowExecutionConfig', context)\n    : context;\n  {\n    const c = o.userMetadata;\n    if (c != null) walk_temporal_api_sdk_v1_UserMetadata(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflow_v1_WorkflowExecutionInfo<Ctx>(\n  o: temporal.api.workflow.v1.IWorkflowExecutionInfo,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflow.v1.WorkflowExecutionInfo', context)\n    : context;\n  {\n    const c = o.memo;\n    if (c != null) walk_temporal_api_common_v1_Memo(c, env, ctx, pending);\n  }\n  {\n    if (!env.skipSearchAttributes) {\n      const c = o.searchAttributes;\n      if (c != null) walk_temporal_api_common_v1_SearchAttributes(c, env, ctx, pending);\n    }\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_CountActivityExecutionsResponse<Ctx>(\n  o: temporal.api.workflowservice.v1.ICountActivityExecutionsResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.CountActivityExecutionsResponse', context)\n    : context;\n  {\n    const a = o.groups;\n    if (a)\n      for (const v of a)\n        walk_temporal_api_workflowservice_v1_CountActivityExecutionsResponse_AggregationGroup(v, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_CountActivityExecutionsResponse_AggregationGroup<Ctx>(\n  o: temporal.api.workflowservice.v1.CountActivityExecutionsResponse.IAggregationGroup,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.CountActivityExecutionsResponse.AggregationGroup', context)\n    : context;\n  {\n    const a = o.groupValues;\n    if (a && a.length)\n      pending.push(\n        env.transformPayloads(a, ctx).then((r) => {\n          o.groupValues = r;\n        })\n      );\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_CountNexusOperationExecutionsResponse<Ctx>(\n  o: temporal.api.workflowservice.v1.ICountNexusOperationExecutionsResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.CountNexusOperationExecutionsResponse', context)\n    : context;\n  {\n    const a = o.groups;\n    if (a)\n      for (const v of a)\n        walk_temporal_api_workflowservice_v1_CountNexusOperationExecutionsResponse_AggregationGroup(\n          v,\n          env,\n          ctx,\n          pending\n        );\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_CountNexusOperationExecutionsResponse_AggregationGroup<Ctx>(\n  o: temporal.api.workflowservice.v1.CountNexusOperationExecutionsResponse.IAggregationGroup,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(\n        o,\n        'temporal.api.workflowservice.v1.CountNexusOperationExecutionsResponse.AggregationGroup',\n        context\n      )\n    : context;\n  {\n    const a = o.groupValues;\n    if (a && a.length)\n      pending.push(\n        env.transformPayloads(a, ctx).then((r) => {\n          o.groupValues = r;\n        })\n      );\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_CountSchedulesResponse<Ctx>(\n  o: temporal.api.workflowservice.v1.ICountSchedulesResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.CountSchedulesResponse', context)\n    : context;\n  {\n    const a = o.groups;\n    if (a)\n      for (const v of a)\n        walk_temporal_api_workflowservice_v1_CountSchedulesResponse_AggregationGroup(v, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_CountSchedulesResponse_AggregationGroup<Ctx>(\n  o: temporal.api.workflowservice.v1.CountSchedulesResponse.IAggregationGroup,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.CountSchedulesResponse.AggregationGroup', context)\n    : context;\n  {\n    const a = o.groupValues;\n    if (a && a.length)\n      pending.push(\n        env.transformPayloads(a, ctx).then((r) => {\n          o.groupValues = r;\n        })\n      );\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_CountWorkflowExecutionsResponse<Ctx>(\n  o: temporal.api.workflowservice.v1.ICountWorkflowExecutionsResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.CountWorkflowExecutionsResponse', context)\n    : context;\n  {\n    const a = o.groups;\n    if (a)\n      for (const v of a)\n        walk_temporal_api_workflowservice_v1_CountWorkflowExecutionsResponse_AggregationGroup(v, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_CountWorkflowExecutionsResponse_AggregationGroup<Ctx>(\n  o: temporal.api.workflowservice.v1.CountWorkflowExecutionsResponse.IAggregationGroup,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.CountWorkflowExecutionsResponse.AggregationGroup', context)\n    : context;\n  {\n    const a = o.groupValues;\n    if (a && a.length)\n      pending.push(\n        env.transformPayloads(a, ctx).then((r) => {\n          o.groupValues = r;\n        })\n      );\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_CreateScheduleRequest<Ctx>(\n  o: temporal.api.workflowservice.v1.ICreateScheduleRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.CreateScheduleRequest', context)\n    : context;\n  {\n    const c = o.schedule;\n    if (c != null) walk_temporal_api_schedule_v1_Schedule(c, env, ctx, pending);\n  }\n  {\n    const c = o.memo;\n    if (c != null) walk_temporal_api_common_v1_Memo(c, env, ctx, pending);\n  }\n  {\n    if (!env.skipSearchAttributes) {\n      const c = o.searchAttributes;\n      if (c != null) walk_temporal_api_common_v1_SearchAttributes(c, env, ctx, pending);\n    }\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_CreateWorkerDeploymentVersionRequest<Ctx>(\n  o: temporal.api.workflowservice.v1.ICreateWorkerDeploymentVersionRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.CreateWorkerDeploymentVersionRequest', context)\n    : context;\n  {\n    const c = o.computeConfig;\n    if (c != null) walk_temporal_api_compute_v1_ComputeConfig(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_DescribeActivityExecutionResponse<Ctx>(\n  o: temporal.api.workflowservice.v1.IDescribeActivityExecutionResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.DescribeActivityExecutionResponse', context)\n    : context;\n  {\n    const c = o.info;\n    if (c != null) walk_temporal_api_activity_v1_ActivityExecutionInfo(c, env, ctx, pending);\n  }\n  {\n    const c = o.input;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n  {\n    const c = o.outcome;\n    if (c != null) walk_temporal_api_activity_v1_ActivityExecutionOutcome(c, env, ctx, pending);\n  }\n  {\n    const a = o.callbacks;\n    if (a) for (const v of a) walk_temporal_api_activity_v1_CallbackInfo(v, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_DescribeDeploymentResponse<Ctx>(\n  o: temporal.api.workflowservice.v1.IDescribeDeploymentResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.DescribeDeploymentResponse', context)\n    : context;\n  {\n    const c = o.deploymentInfo;\n    if (c != null) walk_temporal_api_deployment_v1_DeploymentInfo(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_DescribeNexusOperationExecutionResponse<Ctx>(\n  o: temporal.api.workflowservice.v1.IDescribeNexusOperationExecutionResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.DescribeNexusOperationExecutionResponse', context)\n    : context;\n  {\n    const c = o.info;\n    if (c != null) walk_temporal_api_nexus_v1_NexusOperationExecutionInfo(c, env, ctx, pending);\n  }\n  {\n    const p = o.input;\n    if (p != null)\n      pending.push(\n        env.transformPayload(p, ctx).then((r) => {\n          o.input = r;\n        })\n      );\n  }\n  {\n    const p = o.result;\n    if (p != null)\n      pending.push(\n        env.transformPayload(p, ctx).then((r) => {\n          o.result = r;\n        })\n      );\n  }\n  {\n    const c = o.failure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_DescribeScheduleResponse<Ctx>(\n  o: temporal.api.workflowservice.v1.IDescribeScheduleResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.DescribeScheduleResponse', context)\n    : context;\n  {\n    const c = o.schedule;\n    if (c != null) walk_temporal_api_schedule_v1_Schedule(c, env, ctx, pending);\n  }\n  {\n    const c = o.memo;\n    if (c != null) walk_temporal_api_common_v1_Memo(c, env, ctx, pending);\n  }\n  {\n    if (!env.skipSearchAttributes) {\n      const c = o.searchAttributes;\n      if (c != null) walk_temporal_api_common_v1_SearchAttributes(c, env, ctx, pending);\n    }\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_DescribeWorkerDeploymentVersionResponse<Ctx>(\n  o: temporal.api.workflowservice.v1.IDescribeWorkerDeploymentVersionResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.DescribeWorkerDeploymentVersionResponse', context)\n    : context;\n  {\n    const c = o.workerDeploymentVersionInfo;\n    if (c != null) walk_temporal_api_deployment_v1_WorkerDeploymentVersionInfo(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_DescribeWorkflowExecutionResponse<Ctx>(\n  o: temporal.api.workflowservice.v1.IDescribeWorkflowExecutionResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.DescribeWorkflowExecutionResponse', context)\n    : context;\n  {\n    const c = o.executionConfig;\n    if (c != null) walk_temporal_api_workflow_v1_WorkflowExecutionConfig(c, env, ctx, pending);\n  }\n  {\n    const c = o.workflowExecutionInfo;\n    if (c != null) walk_temporal_api_workflow_v1_WorkflowExecutionInfo(c, env, ctx, pending);\n  }\n  {\n    const a = o.pendingActivities;\n    if (a) for (const v of a) walk_temporal_api_workflow_v1_PendingActivityInfo(v, env, ctx, pending);\n  }\n  {\n    const a = o.callbacks;\n    if (a) for (const v of a) walk_temporal_api_workflow_v1_CallbackInfo(v, env, ctx, pending);\n  }\n  {\n    const a = o.pendingNexusOperations;\n    if (a) for (const v of a) walk_temporal_api_workflow_v1_PendingNexusOperationInfo(v, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_ExecuteMultiOperationRequest<Ctx>(\n  o: temporal.api.workflowservice.v1.IExecuteMultiOperationRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.ExecuteMultiOperationRequest', context)\n    : context;\n  {\n    const a = o.operations;\n    if (a)\n      for (const v of a)\n        walk_temporal_api_workflowservice_v1_ExecuteMultiOperationRequest_Operation(v, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_ExecuteMultiOperationRequest_Operation<Ctx>(\n  o: temporal.api.workflowservice.v1.ExecuteMultiOperationRequest.IOperation,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.ExecuteMultiOperationRequest.Operation', context)\n    : context;\n  {\n    const c = o.startWorkflow;\n    if (c != null) walk_temporal_api_workflowservice_v1_StartWorkflowExecutionRequest(c, env, ctx, pending);\n  }\n  {\n    const c = o.updateWorkflow;\n    if (c != null) walk_temporal_api_workflowservice_v1_UpdateWorkflowExecutionRequest(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_ExecuteMultiOperationResponse<Ctx>(\n  o: temporal.api.workflowservice.v1.IExecuteMultiOperationResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.ExecuteMultiOperationResponse', context)\n    : context;\n  {\n    const a = o.responses;\n    if (a)\n      for (const v of a)\n        walk_temporal_api_workflowservice_v1_ExecuteMultiOperationResponse_Response(v, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_ExecuteMultiOperationResponse_Response<Ctx>(\n  o: temporal.api.workflowservice.v1.ExecuteMultiOperationResponse.IResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.ExecuteMultiOperationResponse.Response', context)\n    : context;\n  {\n    const c = o.startWorkflow;\n    if (c != null) walk_temporal_api_workflowservice_v1_StartWorkflowExecutionResponse(c, env, ctx, pending);\n  }\n  {\n    const c = o.updateWorkflow;\n    if (c != null) walk_temporal_api_workflowservice_v1_UpdateWorkflowExecutionResponse(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_GetCurrentDeploymentResponse<Ctx>(\n  o: temporal.api.workflowservice.v1.IGetCurrentDeploymentResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.GetCurrentDeploymentResponse', context)\n    : context;\n  {\n    const c = o.currentDeploymentInfo;\n    if (c != null) walk_temporal_api_deployment_v1_DeploymentInfo(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_GetDeploymentReachabilityResponse<Ctx>(\n  o: temporal.api.workflowservice.v1.IGetDeploymentReachabilityResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.GetDeploymentReachabilityResponse', context)\n    : context;\n  {\n    const c = o.deploymentInfo;\n    if (c != null) walk_temporal_api_deployment_v1_DeploymentInfo(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_GetWorkflowExecutionHistoryResponse<Ctx>(\n  o: temporal.api.workflowservice.v1.IGetWorkflowExecutionHistoryResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.GetWorkflowExecutionHistoryResponse', context)\n    : context;\n  {\n    const c = o.history;\n    if (c != null) walk_temporal_api_history_v1_History(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_GetWorkflowExecutionHistoryReverseResponse<Ctx>(\n  o: temporal.api.workflowservice.v1.IGetWorkflowExecutionHistoryReverseResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.GetWorkflowExecutionHistoryReverseResponse', context)\n    : context;\n  {\n    const c = o.history;\n    if (c != null) walk_temporal_api_history_v1_History(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_ListActivityExecutionsResponse<Ctx>(\n  o: temporal.api.workflowservice.v1.IListActivityExecutionsResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.ListActivityExecutionsResponse', context)\n    : context;\n  {\n    const a = o.executions;\n    if (a) for (const v of a) walk_temporal_api_activity_v1_ActivityExecutionListInfo(v, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_ListArchivedWorkflowExecutionsResponse<Ctx>(\n  o: temporal.api.workflowservice.v1.IListArchivedWorkflowExecutionsResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.ListArchivedWorkflowExecutionsResponse', context)\n    : context;\n  {\n    const a = o.executions;\n    if (a) for (const v of a) walk_temporal_api_workflow_v1_WorkflowExecutionInfo(v, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_ListClosedWorkflowExecutionsResponse<Ctx>(\n  o: temporal.api.workflowservice.v1.IListClosedWorkflowExecutionsResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.ListClosedWorkflowExecutionsResponse', context)\n    : context;\n  {\n    const a = o.executions;\n    if (a) for (const v of a) walk_temporal_api_workflow_v1_WorkflowExecutionInfo(v, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_ListNexusOperationExecutionsResponse<Ctx>(\n  o: temporal.api.workflowservice.v1.IListNexusOperationExecutionsResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.ListNexusOperationExecutionsResponse', context)\n    : context;\n  {\n    const a = o.operations;\n    if (a) for (const v of a) walk_temporal_api_nexus_v1_NexusOperationExecutionListInfo(v, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_ListOpenWorkflowExecutionsResponse<Ctx>(\n  o: temporal.api.workflowservice.v1.IListOpenWorkflowExecutionsResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.ListOpenWorkflowExecutionsResponse', context)\n    : context;\n  {\n    const a = o.executions;\n    if (a) for (const v of a) walk_temporal_api_workflow_v1_WorkflowExecutionInfo(v, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_ListSchedulesResponse<Ctx>(\n  o: temporal.api.workflowservice.v1.IListSchedulesResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.ListSchedulesResponse', context)\n    : context;\n  {\n    const a = o.schedules;\n    if (a) for (const v of a) walk_temporal_api_schedule_v1_ScheduleListEntry(v, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_ListWorkflowExecutionsResponse<Ctx>(\n  o: temporal.api.workflowservice.v1.IListWorkflowExecutionsResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.ListWorkflowExecutionsResponse', context)\n    : context;\n  {\n    const a = o.executions;\n    if (a) for (const v of a) walk_temporal_api_workflow_v1_WorkflowExecutionInfo(v, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_PollActivityExecutionResponse<Ctx>(\n  o: temporal.api.workflowservice.v1.IPollActivityExecutionResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.PollActivityExecutionResponse', context)\n    : context;\n  {\n    const c = o.outcome;\n    if (c != null) walk_temporal_api_activity_v1_ActivityExecutionOutcome(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_PollActivityTaskQueueResponse<Ctx>(\n  o: temporal.api.workflowservice.v1.IPollActivityTaskQueueResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.PollActivityTaskQueueResponse', context)\n    : context;\n  {\n    const c = o.header;\n    if (c != null) walk_temporal_api_common_v1_Header(c, env, ctx, pending);\n  }\n  {\n    const c = o.input;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n  {\n    const c = o.heartbeatDetails;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_PollNexusOperationExecutionResponse<Ctx>(\n  o: temporal.api.workflowservice.v1.IPollNexusOperationExecutionResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.PollNexusOperationExecutionResponse', context)\n    : context;\n  {\n    const p = o.result;\n    if (p != null)\n      pending.push(\n        env.transformPayload(p, ctx).then((r) => {\n          o.result = r;\n        })\n      );\n  }\n  {\n    const c = o.failure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_PollNexusTaskQueueResponse<Ctx>(\n  o: temporal.api.workflowservice.v1.IPollNexusTaskQueueResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.PollNexusTaskQueueResponse', context)\n    : context;\n  {\n    const c = o.request;\n    if (c != null) walk_temporal_api_nexus_v1_Request(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_PollWorkflowExecutionUpdateResponse<Ctx>(\n  o: temporal.api.workflowservice.v1.IPollWorkflowExecutionUpdateResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.PollWorkflowExecutionUpdateResponse', context)\n    : context;\n  {\n    const c = o.outcome;\n    if (c != null) walk_temporal_api_update_v1_Outcome(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_PollWorkflowTaskQueueResponse<Ctx>(\n  o: temporal.api.workflowservice.v1.IPollWorkflowTaskQueueResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.PollWorkflowTaskQueueResponse', context)\n    : context;\n  {\n    const c = o.history;\n    if (c != null) walk_temporal_api_history_v1_History(c, env, ctx, pending);\n  }\n  {\n    const c = o.query;\n    if (c != null) walk_temporal_api_query_v1_WorkflowQuery(c, env, ctx, pending);\n  }\n  {\n    const m = o.queries;\n    if (m) for (const v of Object.values(m)) walk_temporal_api_query_v1_WorkflowQuery(v, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_QueryWorkflowRequest<Ctx>(\n  o: temporal.api.workflowservice.v1.IQueryWorkflowRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.QueryWorkflowRequest', context)\n    : context;\n  {\n    const c = o.query;\n    if (c != null) walk_temporal_api_query_v1_WorkflowQuery(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_QueryWorkflowResponse<Ctx>(\n  o: temporal.api.workflowservice.v1.IQueryWorkflowResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.QueryWorkflowResponse', context)\n    : context;\n  {\n    const c = o.queryResult;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_RecordActivityTaskHeartbeatByIdRequest<Ctx>(\n  o: temporal.api.workflowservice.v1.IRecordActivityTaskHeartbeatByIdRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.RecordActivityTaskHeartbeatByIdRequest', context)\n    : context;\n  {\n    const c = o.details;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_RecordActivityTaskHeartbeatRequest<Ctx>(\n  o: temporal.api.workflowservice.v1.IRecordActivityTaskHeartbeatRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.RecordActivityTaskHeartbeatRequest', context)\n    : context;\n  {\n    const c = o.details;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_ResetWorkflowExecutionRequest<Ctx>(\n  o: temporal.api.workflowservice.v1.IResetWorkflowExecutionRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.ResetWorkflowExecutionRequest', context)\n    : context;\n  {\n    const a = o.postResetOperations;\n    if (a) for (const v of a) walk_temporal_api_workflow_v1_PostResetOperation(v, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_RespondActivityTaskCanceledByIdRequest<Ctx>(\n  o: temporal.api.workflowservice.v1.IRespondActivityTaskCanceledByIdRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.RespondActivityTaskCanceledByIdRequest', context)\n    : context;\n  {\n    const c = o.details;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_RespondActivityTaskCanceledRequest<Ctx>(\n  o: temporal.api.workflowservice.v1.IRespondActivityTaskCanceledRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.RespondActivityTaskCanceledRequest', context)\n    : context;\n  {\n    const c = o.details;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_RespondActivityTaskCompletedByIdRequest<Ctx>(\n  o: temporal.api.workflowservice.v1.IRespondActivityTaskCompletedByIdRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.RespondActivityTaskCompletedByIdRequest', context)\n    : context;\n  {\n    const c = o.result;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_RespondActivityTaskCompletedRequest<Ctx>(\n  o: temporal.api.workflowservice.v1.IRespondActivityTaskCompletedRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.RespondActivityTaskCompletedRequest', context)\n    : context;\n  {\n    const c = o.result;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_RespondActivityTaskFailedByIdRequest<Ctx>(\n  o: temporal.api.workflowservice.v1.IRespondActivityTaskFailedByIdRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.RespondActivityTaskFailedByIdRequest', context)\n    : context;\n  {\n    const c = o.failure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n  {\n    const c = o.lastHeartbeatDetails;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_RespondActivityTaskFailedByIdResponse<Ctx>(\n  o: temporal.api.workflowservice.v1.IRespondActivityTaskFailedByIdResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.RespondActivityTaskFailedByIdResponse', context)\n    : context;\n  {\n    const a = o.failures;\n    if (a) for (const v of a) walk_temporal_api_failure_v1_Failure(v, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_RespondActivityTaskFailedRequest<Ctx>(\n  o: temporal.api.workflowservice.v1.IRespondActivityTaskFailedRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.RespondActivityTaskFailedRequest', context)\n    : context;\n  {\n    const c = o.failure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n  {\n    const c = o.lastHeartbeatDetails;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_RespondActivityTaskFailedResponse<Ctx>(\n  o: temporal.api.workflowservice.v1.IRespondActivityTaskFailedResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.RespondActivityTaskFailedResponse', context)\n    : context;\n  {\n    const a = o.failures;\n    if (a) for (const v of a) walk_temporal_api_failure_v1_Failure(v, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_RespondNexusTaskCompletedRequest<Ctx>(\n  o: temporal.api.workflowservice.v1.IRespondNexusTaskCompletedRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.RespondNexusTaskCompletedRequest', context)\n    : context;\n  {\n    const c = o.response;\n    if (c != null) walk_temporal_api_nexus_v1_Response(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_RespondNexusTaskFailedRequest<Ctx>(\n  o: temporal.api.workflowservice.v1.IRespondNexusTaskFailedRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.RespondNexusTaskFailedRequest', context)\n    : context;\n  {\n    const c = o.failure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_RespondQueryTaskCompletedRequest<Ctx>(\n  o: temporal.api.workflowservice.v1.IRespondQueryTaskCompletedRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.RespondQueryTaskCompletedRequest', context)\n    : context;\n  {\n    const c = o.queryResult;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n  {\n    const c = o.failure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_RespondWorkflowTaskCompletedRequest<Ctx>(\n  o: temporal.api.workflowservice.v1.IRespondWorkflowTaskCompletedRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.RespondWorkflowTaskCompletedRequest', context)\n    : context;\n  {\n    const a = o.commands;\n    if (a) for (const v of a) walk_temporal_api_command_v1_Command(v, env, ctx, pending);\n  }\n  {\n    const m = o.queryResults;\n    if (m) for (const v of Object.values(m)) walk_temporal_api_query_v1_WorkflowQueryResult(v, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_RespondWorkflowTaskCompletedResponse<Ctx>(\n  o: temporal.api.workflowservice.v1.IRespondWorkflowTaskCompletedResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.RespondWorkflowTaskCompletedResponse', context)\n    : context;\n  {\n    const c = o.workflowTask;\n    if (c != null) walk_temporal_api_workflowservice_v1_PollWorkflowTaskQueueResponse(c, env, ctx, pending);\n  }\n  {\n    const a = o.activityTasks;\n    if (a) for (const v of a) walk_temporal_api_workflowservice_v1_PollActivityTaskQueueResponse(v, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_RespondWorkflowTaskFailedRequest<Ctx>(\n  o: temporal.api.workflowservice.v1.IRespondWorkflowTaskFailedRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.RespondWorkflowTaskFailedRequest', context)\n    : context;\n  {\n    const c = o.failure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_ScanWorkflowExecutionsResponse<Ctx>(\n  o: temporal.api.workflowservice.v1.IScanWorkflowExecutionsResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.ScanWorkflowExecutionsResponse', context)\n    : context;\n  {\n    const a = o.executions;\n    if (a) for (const v of a) walk_temporal_api_workflow_v1_WorkflowExecutionInfo(v, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_SetCurrentDeploymentRequest<Ctx>(\n  o: temporal.api.workflowservice.v1.ISetCurrentDeploymentRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.SetCurrentDeploymentRequest', context)\n    : context;\n  {\n    const c = o.updateMetadata;\n    if (c != null) walk_temporal_api_deployment_v1_UpdateDeploymentMetadata(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_SetCurrentDeploymentResponse<Ctx>(\n  o: temporal.api.workflowservice.v1.ISetCurrentDeploymentResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.SetCurrentDeploymentResponse', context)\n    : context;\n  {\n    const c = o.currentDeploymentInfo;\n    if (c != null) walk_temporal_api_deployment_v1_DeploymentInfo(c, env, ctx, pending);\n  }\n  {\n    const c = o.previousDeploymentInfo;\n    if (c != null) walk_temporal_api_deployment_v1_DeploymentInfo(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_SignalWithStartWorkflowExecutionRequest<Ctx>(\n  o: temporal.api.workflowservice.v1.ISignalWithStartWorkflowExecutionRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.SignalWithStartWorkflowExecutionRequest', context)\n    : context;\n  {\n    const c = o.input;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n  {\n    const c = o.signalInput;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n  {\n    const c = o.memo;\n    if (c != null) walk_temporal_api_common_v1_Memo(c, env, ctx, pending);\n  }\n  {\n    if (!env.skipSearchAttributes) {\n      const c = o.searchAttributes;\n      if (c != null) walk_temporal_api_common_v1_SearchAttributes(c, env, ctx, pending);\n    }\n  }\n  {\n    const c = o.header;\n    if (c != null) walk_temporal_api_common_v1_Header(c, env, ctx, pending);\n  }\n  {\n    const c = o.userMetadata;\n    if (c != null) walk_temporal_api_sdk_v1_UserMetadata(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_SignalWorkflowExecutionRequest<Ctx>(\n  o: temporal.api.workflowservice.v1.ISignalWorkflowExecutionRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.SignalWorkflowExecutionRequest', context)\n    : context;\n  {\n    const c = o.input;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n  {\n    const c = o.header;\n    if (c != null) walk_temporal_api_common_v1_Header(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_StartActivityExecutionRequest<Ctx>(\n  o: temporal.api.workflowservice.v1.IStartActivityExecutionRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.StartActivityExecutionRequest', context)\n    : context;\n  {\n    const c = o.input;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n  {\n    if (!env.skipSearchAttributes) {\n      const c = o.searchAttributes;\n      if (c != null) walk_temporal_api_common_v1_SearchAttributes(c, env, ctx, pending);\n    }\n  }\n  {\n    const c = o.header;\n    if (c != null) walk_temporal_api_common_v1_Header(c, env, ctx, pending);\n  }\n  {\n    const c = o.userMetadata;\n    if (c != null) walk_temporal_api_sdk_v1_UserMetadata(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_StartBatchOperationRequest<Ctx>(\n  o: temporal.api.workflowservice.v1.IStartBatchOperationRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.StartBatchOperationRequest', context)\n    : context;\n  {\n    const c = o.terminationOperation;\n    if (c != null) walk_temporal_api_batch_v1_BatchOperationTermination(c, env, ctx, pending);\n  }\n  {\n    const c = o.signalOperation;\n    if (c != null) walk_temporal_api_batch_v1_BatchOperationSignal(c, env, ctx, pending);\n  }\n  {\n    const c = o.resetOperation;\n    if (c != null) walk_temporal_api_batch_v1_BatchOperationReset(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_StartNexusOperationExecutionRequest<Ctx>(\n  o: temporal.api.workflowservice.v1.IStartNexusOperationExecutionRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.StartNexusOperationExecutionRequest', context)\n    : context;\n  {\n    const p = o.input;\n    if (p != null)\n      pending.push(\n        env.transformPayload(p, ctx).then((r) => {\n          o.input = r;\n        })\n      );\n  }\n  {\n    if (!env.skipSearchAttributes) {\n      const c = o.searchAttributes;\n      if (c != null) walk_temporal_api_common_v1_SearchAttributes(c, env, ctx, pending);\n    }\n  }\n  {\n    const c = o.userMetadata;\n    if (c != null) walk_temporal_api_sdk_v1_UserMetadata(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_StartWorkflowExecutionRequest<Ctx>(\n  o: temporal.api.workflowservice.v1.IStartWorkflowExecutionRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.StartWorkflowExecutionRequest', context)\n    : context;\n  {\n    const c = o.input;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n  {\n    const c = o.memo;\n    if (c != null) walk_temporal_api_common_v1_Memo(c, env, ctx, pending);\n  }\n  {\n    if (!env.skipSearchAttributes) {\n      const c = o.searchAttributes;\n      if (c != null) walk_temporal_api_common_v1_SearchAttributes(c, env, ctx, pending);\n    }\n  }\n  {\n    const c = o.header;\n    if (c != null) walk_temporal_api_common_v1_Header(c, env, ctx, pending);\n  }\n  {\n    const c = o.continuedFailure;\n    if (c != null) walk_temporal_api_failure_v1_Failure(c, env, ctx, pending);\n  }\n  {\n    const c = o.lastCompletionResult;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n  {\n    const c = o.userMetadata;\n    if (c != null) walk_temporal_api_sdk_v1_UserMetadata(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_StartWorkflowExecutionResponse<Ctx>(\n  o: temporal.api.workflowservice.v1.IStartWorkflowExecutionResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.StartWorkflowExecutionResponse', context)\n    : context;\n  {\n    const c = o.eagerWorkflowTask;\n    if (c != null) walk_temporal_api_workflowservice_v1_PollWorkflowTaskQueueResponse(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_TerminateWorkflowExecutionRequest<Ctx>(\n  o: temporal.api.workflowservice.v1.ITerminateWorkflowExecutionRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.TerminateWorkflowExecutionRequest', context)\n    : context;\n  {\n    const c = o.details;\n    if (c != null) walk_temporal_api_common_v1_Payloads(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_UpdateScheduleRequest<Ctx>(\n  o: temporal.api.workflowservice.v1.IUpdateScheduleRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.UpdateScheduleRequest', context)\n    : context;\n  {\n    const c = o.schedule;\n    if (c != null) walk_temporal_api_schedule_v1_Schedule(c, env, ctx, pending);\n  }\n  {\n    if (!env.skipSearchAttributes) {\n      const c = o.searchAttributes;\n      if (c != null) walk_temporal_api_common_v1_SearchAttributes(c, env, ctx, pending);\n    }\n  }\n  {\n    const c = o.memo;\n    if (c != null) walk_temporal_api_common_v1_Memo(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_UpdateWorkerDeploymentVersionComputeConfigRequest<Ctx>(\n  o: temporal.api.workflowservice.v1.IUpdateWorkerDeploymentVersionComputeConfigRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.UpdateWorkerDeploymentVersionComputeConfigRequest', context)\n    : context;\n  {\n    const m = o.computeConfigScalingGroups;\n    if (m)\n      for (const v of Object.values(m))\n        walk_temporal_api_compute_v1_ComputeConfigScalingGroupUpdate(v, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_UpdateWorkerDeploymentVersionMetadataRequest<Ctx>(\n  o: temporal.api.workflowservice.v1.IUpdateWorkerDeploymentVersionMetadataRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.UpdateWorkerDeploymentVersionMetadataRequest', context)\n    : context;\n  {\n    const m = o.upsertEntries;\n    if (m)\n      for (const [k, v] of Object.entries(m))\n        pending.push(\n          env.transformPayload(v, ctx).then((r) => {\n            m[k] = r;\n          })\n        );\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_UpdateWorkerDeploymentVersionMetadataResponse<Ctx>(\n  o: temporal.api.workflowservice.v1.IUpdateWorkerDeploymentVersionMetadataResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.UpdateWorkerDeploymentVersionMetadataResponse', context)\n    : context;\n  {\n    const c = o.metadata;\n    if (c != null) walk_temporal_api_deployment_v1_VersionMetadata(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_UpdateWorkflowExecutionRequest<Ctx>(\n  o: temporal.api.workflowservice.v1.IUpdateWorkflowExecutionRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.UpdateWorkflowExecutionRequest', context)\n    : context;\n  {\n    const c = o.request;\n    if (c != null) walk_temporal_api_update_v1_Request(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_UpdateWorkflowExecutionResponse<Ctx>(\n  o: temporal.api.workflowservice.v1.IUpdateWorkflowExecutionResponse,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(o, 'temporal.api.workflowservice.v1.UpdateWorkflowExecutionResponse', context)\n    : context;\n  {\n    const c = o.outcome;\n    if (c != null) walk_temporal_api_update_v1_Outcome(c, env, ctx, pending);\n  }\n}\n\nfunction walk_temporal_api_workflowservice_v1_ValidateWorkerDeploymentVersionComputeConfigRequest<Ctx>(\n  o: temporal.api.workflowservice.v1.IValidateWorkerDeploymentVersionComputeConfigRequest,\n  env: WalkEnv<Ctx>,\n  context: Ctx,\n  pending: Promise<unknown>[]\n): void {\n  const ctx = env.deriveContext\n    ? env.deriveContext(\n        o,\n        'temporal.api.workflowservice.v1.ValidateWorkerDeploymentVersionComputeConfigRequest',\n        context\n      )\n    : context;\n  {\n    const m = o.computeConfigScalingGroups;\n    if (m)\n      for (const v of Object.values(m))\n        walk_temporal_api_compute_v1_ComputeConfigScalingGroupUpdate(v, env, ctx, pending);\n  }\n}\n","import type { WalkEnv } from '@temporalio/proto/lib/payload-visitor.generated';\nimport { sequential, type ConcurrencyLimit } from '../concurrency/limit';\nimport type { Payload } from '../interfaces';\n\n/**\n * Called for each singular (or map-value) payload-bearing field. One payload in, one out.\n *\n * @internal\n * @experimental\n */\nexport type PayloadTransform<Ctx> = (payload: Payload, context: Ctx, abortSignal?: AbortSignal) => Promise<Payload>;\n\n/**\n * Called for each payload-bearing field that may contain multiple payloads (e.g. Payloads or repeated fields).\n * May return any number of payloads, including zero.\n *\n * @internal\n * @experimental\n */\nexport type PayloadsTransform<Ctx> = (\n  payloads: Payload[],\n  context: Ctx,\n  abortSignal?: AbortSignal\n) => Promise<Payload[]>;\n\n/**\n * Called on entering each message and returns the context for its children.\n *\n * @internal\n * @experimental\n */\nexport type ContextDeriver<Ctx> = (message: object, typeName: string, context: Ctx) => Ctx;\n\n/**\n * Two transform functions are required because some fields require a single (non-null) payload while others\n * are simply lists.\n *\n * @internal\n * @experimental\n */\nexport interface VisitOptions<Ctx> {\n  transformPayload: PayloadTransform<Ctx>;\n  transformPayloads: PayloadsTransform<Ctx>;\n  deriveContext?: ContextDeriver<Ctx>;\n  /** Context in scope before any message is entered. */\n  initialContext?: Ctx;\n  /**\n   * Optional concurrency limit applied to every transform call. Share one limit across visits for a\n   * global cap (e.g. a payload store's total budget), or nest limits to compose a per-visit cap under\n   * a global one. Omit to run transforms one at a time (sequential).\n   */\n  limit?: ConcurrencyLimit;\n  skipHeaders?: boolean;\n  skipSearchAttributes?: boolean;\n  /** Aborts the walk; composed with the internal cancel-on-error signal and handed to the transform. */\n  abortSignal?: AbortSignal;\n}\n\n/**\n * Awaits every promise a walk produced, then throws the first rejection in traversal order.\n * `allSettled` guarantees no in-flight transform is left running on the error path.\n */\nasync function drain(pending: Promise<unknown>[]): Promise<void> {\n  const results = await Promise.allSettled(pending);\n  for (const result of results) {\n    if (result.status === 'rejected') {\n      throw result.reason;\n    }\n  }\n}\n\n/**\n * Runs a recursive walk from the VisitOptions. Runs each transform through the concurrency limit,\n * then wraps them with the per-visit cancel-on-error signal and assigns them to {@link WalkEnv}.\n *\n * @internal\n * @experimental\n */\nasync function runVisit<Ctx>(\n  options: VisitOptions<Ctx>,\n  walk: (env: WalkEnv<Ctx>, context: Ctx) => Promise<unknown>[]\n): Promise<void> {\n  const {\n    transformPayload,\n    transformPayloads,\n    deriveContext,\n    initialContext,\n    limit = sequential(),\n    skipHeaders = false,\n    skipSearchAttributes = false,\n    abortSignal,\n  } = options;\n\n  const failure = new AbortController();\n  let removeListener: (() => void) | undefined;\n  if (abortSignal) {\n    if (abortSignal.aborted) {\n      failure.abort(abortSignal.reason);\n    } else {\n      const onAbort = () => failure.abort(abortSignal.reason);\n      abortSignal.addEventListener('abort', onAbort, { once: true });\n      removeListener = () => abortSignal.removeEventListener('abort', onAbort);\n    }\n  }\n\n  const runTransform = <T>(call: (signal: AbortSignal) => Promise<T>): Promise<T> => {\n    failure.signal.throwIfAborted();\n    return limit(async () => {\n      failure.signal.throwIfAborted();\n      try {\n        return await call(failure.signal);\n      } catch (reason) {\n        failure.abort(reason);\n        throw reason;\n      }\n    });\n  };\n\n  const env: WalkEnv<Ctx> = {\n    transformPayload: (payload, context) => runTransform((signal) => transformPayload(payload, context, signal)),\n    transformPayloads: (payloads, context) => runTransform((signal) => transformPayloads(payloads, context, signal)),\n    deriveContext,\n    skipHeaders,\n    skipSearchAttributes,\n  };\n  try {\n    await drain(walk(env, initialContext as Ctx));\n  } finally {\n    removeListener?.();\n  }\n}\n\n/**\n * Applies the payload transforms to every {@link Payload} in `root`, mutating it in place. Pass the\n * generated `walk*` function for the root's message type (all are re-exported below).\n *\n * @internal\n * @experimental\n */\nexport async function visit<Root, Ctx = void>(\n  root: Root,\n  walk: (root: Root, env: WalkEnv<Ctx>, context: Ctx) => Promise<unknown>[],\n  options: VisitOptions<Ctx>\n): Promise<void> {\n  return runVisit(options, (env, context) => walk(root, env, context));\n}\n\n// Re-export every generated walker so consumers pair any of them with `visit` without a deep import\n// into the generated file.\nexport * from '@temporalio/proto/lib/payload-visitor.generated';\n","/**\n * This file contain helper functions to parse specific subsets of URIs.\n *\n * The ECMAScript-compliant URL class don't properly handle some syntaxes that\n * we care about, such as not providing a protocol (e.g. '127.0.0.1:7233'), and\n * performs some normalizations that are not desirable for our use cases\n * (e.g. parsing 'http://127.0.0.1:7233' adds a '/' path). On the other side,\n * simply using `split(':')` breaks on IPv6 addresses. Hence these helpers.\n */\n\n/**\n * Scheme. Requires but doesn't capture the ':' or '://' separator that follows.\n * e.g. `http:` will be captured as 'http'.\n */\nconst scheme = '(?:(?<scheme>[a-z][a-z0-9]+):(?:\\\\/\\\\/)?)';\n\n/**\n * IPv4-style hostname. Not captured.\n * e.g.: `192.168.1.100`.\n */\nconst ipv4Hostname = '(?:\\\\d{1,3}(?:\\\\.\\\\d{1,3}){3})';\n\n/**\n * IPv6-style hostname; must be enclosed in square brackets. Not captured.\n * e.g.: `[::1]`, `[2001:db8::1]`, `[::FFFF:129.144.52.38]`, etc.\n */\nconst ipv6Hostname = '(?:\\\\[(?<ipv6>[0-9a-fA-F.:]+)\\\\])';\n\n// DNS-style hostname. Not captured.\n// e.g.: `test.com` or `localhost`.\nconst dnsHostname = '(?:[^:/]+)';\n\nconst hostname = `(?:${ipv4Hostname}|${ipv6Hostname}|${dnsHostname})`;\n\n// Port number. Requires but don't capture a preceeding ':' separator.\n// For example, `:7233` will be captured as `7233`.\nconst port = '(?::(?<port>\\\\d+))';\n\nconst protoHostPortRegex = new RegExp(`^${scheme}??(?<hostname>${hostname})${port}?$`);\n\nexport interface ProtoHostPort {\n  scheme?: string;\n  hostname: string;\n  port?: number;\n}\n\n/**\n * Split a URI composed only of a scheme, a hostname, and port.\n * The scheme and port are optional.\n *\n * Examples of valid URIs for HTTP CONNECT proxies:\n *\n * ```\n * http://test.com:8080 => { scheme: 'http', host: 'test.com', port: 8080 }\n * http://192.168.0.1:8080 => { scheme: 'http', host: '192.168.0.1', port: 8080 }\n * [::1]:8080 => { scheme: 'http', host: '::1', port: 8080 }\n * [::ffff:192.0.2.128]:8080 => { scheme: 'http', host: '::ffff:192.0.2.128', port: 8080 }\n * 192.168.0.1:8080 => { scheme: 'http', host: '192.168.0.1', port: 8080 }\n * ```\n */\nexport function splitProtoHostPort(uri: string): ProtoHostPort | undefined {\n  const match = protoHostPortRegex.exec(uri);\n  if (!match?.groups) return undefined;\n  return {\n    scheme: match.groups.scheme,\n    hostname: match.groups.ipv6 ?? match.groups.hostname!,\n    port: match.groups.port !== undefined ? Number(match.groups.port) : undefined,\n  };\n}\n\nexport function joinProtoHostPort(components: ProtoHostPort): string {\n  const { scheme, hostname, port } = components;\n  const schemeText = scheme ? `${scheme}:` : '';\n  const hostnameText = hostname.includes(':') ? `[${hostname}]` : hostname;\n  const portText = port !== undefined ? `:${port}` : '';\n  return `${schemeText}${hostnameText}${portText}`;\n}\n\n/**\n * Parse the address for the gRPC endpoint of a Temporal server.\n *\n * - The URI may only contain a hostname and a port.\n * - Port is optional; if not specified, set it to `defaultPort`.\n *\n * Examples of valid URIs (assuming `defaultPort` is 7233):\n *\n * ```\n * 127.0.0.1 => { host: '127.0.0.1', port: 7233 }\n * 192.168.0.1:7233 => { host: '192.168.0.1', port: 7233 }\n * my.temporal.service.com:7233 => { host: 'my.temporal.service.com', port: 7233 }\n * [::ffff:192.0.2.128]:8080 => { host: '[::ffff:192.0.2.128]', port: 8080 }\n * ```\n */\nexport function normalizeGrpcEndpointAddress(uri: string, defaultPort: number): string {\n  const splitted = splitProtoHostPort(uri);\n  if (!splitted || splitted.scheme !== undefined) {\n    throw new TypeError(\n      `Invalid address for Temporal gRPC endpoint: expected URI of the form 'hostname' or 'hostname:port'; got '${uri}'`\n    );\n  }\n  splitted.port ??= defaultPort;\n  return joinProtoHostPort(splitted);\n}\n","import type { ProtoHostPort } from './parse-host-uri';\nimport { splitProtoHostPort } from './parse-host-uri';\n\n/**\n * Configuration for HTTP CONNECT proxying.\n */\nexport interface HttpConnectProxyConfig {\n  type: 'http-connect';\n\n  /**\n   * Address of the HTTP CONNECT proxy server, in either `hostname:port` or `http://hostname:port` formats.\n   *\n   * Port is required, and only the `http` scheme is supported. Raw IPv6 addresses must be wrapped in square brackets\n   * (e.g. `[ipv6]:port`).\n   */\n  targetHost: string;\n\n  /**\n   * Basic auth for the HTTP CONNECT proxy, if any.\n   *\n   * Neither username nor password may contain `:` or `@`.\n   *\n   * Note that these credentials will be exposed through environment variables, and will be exchanged in non-encrypted\n   * form ovrer the network. The connection to the proxy server is not encrypted.\n   */\n  basicAuth?: {\n    username: string;\n    password: string;\n  };\n}\n\nexport type ProxyConfig = HttpConnectProxyConfig;\n\n/**\n * Parse the address of a HTTP CONNECT proxy endpoint.\n *\n * - The URI may only contain a scheme, a hostname, and a port;\n * - If specified, scheme must be 'http';\n * - Port is required.\n *\n * Examples of valid URIs:\n *\n * ```\n * 127.0.0.1:8080 => { scheme: 'http', host: '192.168.0.1', port: 8080 }\n * my.temporal.service.com:8888 => { scheme: 'http', host: 'my.temporal.service.com', port: 8888 }\n * [::ffff:192.0.2.128]:8080 => { scheme: 'http', host: '::ffff:192.0.2.128', port: 8080 }\n * ```\n */\nexport function parseHttpConnectProxyAddress(target: string): ProtoHostPort {\n  const match = splitProtoHostPort(target);\n  if (!match)\n    throw new TypeError(\n      `Invalid address for HTTP CONNECT proxy: expected 'hostname:port' or '[ipv6 address]:port'; got '${target}'`\n    );\n  const { scheme = 'http', hostname: host, port } = match;\n  if (scheme !== 'http')\n    throw new TypeError(`Invalid address for HTTP CONNECT proxy: scheme must be http'; got '${target}'`);\n  if (port === undefined)\n    throw new TypeError(`Invalid address for HTTP CONNECT proxy: port is required; got '${target}'`);\n  return { scheme, hostname: host, port };\n}\n","/** TLS configuration options. */\nexport interface TLSConfig {\n  /**\n   * Overrides the target name (SNI) used for TLS host name checking.\n   * If this attribute is not specified, the name used for TLS host name checking will be the host from {@link ServerOptions.url}.\n   * This can be useful when you have reverse proxy in front of temporal server, and you may want to override the SNI to\n   * direct traffic to the appropriate backend server based on custom routing rules. Oppositely, connections could be refused\n   * if the provided SNI does not match the expected host. Adding this override should be done with care.\n   */\n  serverNameOverride?: string;\n  /**\n   * Root CA certificate used by the server. If not set, and the server's\n   * cert is issued by someone the operating system trusts, verification will still work (ex: Cloud offering).\n   */\n  serverRootCACertificate?: Uint8Array;\n  /** Sets the client certificate and key for connecting with mTLS */\n  clientCertPair?: {\n    /** The certificate for this client */\n    crt: Uint8Array;\n    /** The private key for this client */\n    key: Uint8Array;\n  };\n}\n\n/**\n * TLS configuration.\n * Pass a falsy value to use a non-encrypted connection or `true` or `{}` to\n * connect with TLS without any customization.\n */\nexport type TLSConfigOption = TLSConfig | boolean | undefined | null;\n\n/**\n * Normalize {@link TLSConfigOption} by turning false and null to undefined and true to and empty object\n */\nexport function normalizeTlsConfig(\n  tls: TLSConfigOption,\n  apiKey?: string | (() => string) | undefined\n): TLSConfig | undefined {\n  tls = tls ?? (apiKey !== undefined ? true : undefined);\n  return typeof tls === 'object' ? (tls === null ? undefined : tls) : tls ? {} : undefined;\n}\n","/**\n * Internal SDK library: users should usually use other packages instead. Not included in Workflow bundle.\n *\n * @module\n */\nexport * from './codec-helpers';\nexport * from './codec-types';\nexport * from './data-converter-helpers';\nexport * from './extstore-helpers';\nexport * from './external-storage-runner';\nexport * from './external-storage-visitor';\nexport * from './payload-visitor';\nexport * from './parse-host-uri';\nexport * from './proxy-config';\nexport * from './tls-config';\n","import type { ServiceError as GrpcServiceError } from '@grpc/grpc-js';\nimport { status } from '@grpc/grpc-js';\nimport type { RetryState } from '@temporalio/common';\nimport { isError, isRecord, SymbolBasedInstanceOfError } from '@temporalio/common/lib/type-helpers';\n\n/**\n * Generic Error class for errors coming from the service\n */\n@SymbolBasedInstanceOfError('ServiceError')\nexport class ServiceError extends Error {\n  public readonly cause?: Error;\n\n  constructor(message: string, opts?: { cause: Error }) {\n    super(message);\n    this.cause = opts?.cause;\n  }\n}\n\n/**\n * Thrown by the client while waiting on Workflow execution result if execution\n * completes with failure.\n *\n * The failure type will be set in the `cause` attribute.\n *\n * For example if the workflow is cancelled, `cause` will be set to\n * {@link CancelledFailure}.\n */\n@SymbolBasedInstanceOfError('WorkflowFailedError')\nexport class WorkflowFailedError extends Error {\n  public constructor(\n    message: string,\n    public readonly cause: Error | undefined,\n    public readonly retryState: RetryState\n  ) {\n    super(message);\n  }\n}\n\n/**\n * Thrown by the client while waiting on Workflow Update result if Update\n * completes with failure.\n */\n@SymbolBasedInstanceOfError('WorkflowUpdateFailedError')\nexport class WorkflowUpdateFailedError extends Error {\n  public constructor(\n    message: string,\n    public readonly cause: Error | undefined\n  ) {\n    super(message);\n  }\n}\n\n/**\n * Thrown by the client if the Update call timed out or was cancelled.\n * This doesn't mean the update itself was timed out or cancelled.\n */\n@SymbolBasedInstanceOfError('WorkflowUpdateRPCTimeoutOrCancelledError')\nexport class WorkflowUpdateRPCTimeoutOrCancelledError extends Error {\n  public readonly cause?: Error;\n\n  public constructor(message: string, opts?: { cause: Error }) {\n    super(message);\n    this.cause = opts?.cause;\n  }\n}\n\n/**\n * Thrown the by client while waiting on Workflow execution result if Workflow\n * continues as new.\n *\n * Only thrown if asked not to follow the chain of execution (see {@link WorkflowOptions.followRuns}).\n */\n@SymbolBasedInstanceOfError('WorkflowExecutionContinuedAsNewError')\nexport class WorkflowContinuedAsNewError extends Error {\n  public constructor(\n    message: string,\n    public readonly newExecutionRunId: string\n  ) {\n    super(message);\n  }\n}\n\n/**\n * Thrown when the requested Activity could not be found.\n */\n@SymbolBasedInstanceOfError('ActivityNotFoundError')\nexport class ActivityNotFoundError extends Error {}\n\n/**\n * Thrown by {@link AsyncCompletionClient} when trying to complete or heartbeat\n * an Activity for any reason apart from {@link ActivityNotFoundError}.\n */\n@SymbolBasedInstanceOfError('ActivityCompletionError')\nexport class ActivityCompletionError extends Error {}\n\n/**\n * Thrown by {@link AsyncCompletionClient.heartbeat} when the Workflow has\n * requested to cancel the reporting Activity.\n */\n@SymbolBasedInstanceOfError('ActivityCancelledError')\nexport class ActivityCancelledError extends Error {}\n\n/**\n * Thrown by {@link AsyncCompletionClient.heartbeat} when the reporting Activity\n * has been paused.\n */\n@SymbolBasedInstanceOfError('ActivityPausedError')\nexport class ActivityPausedError extends Error {}\n\n/**\n * Thrown by {@link AsyncCompletionClient.heartbeat} when the reporting Activity\n * has been reset.\n */\n@SymbolBasedInstanceOfError('ActivityResetError')\nexport class ActivityResetError extends Error {}\n\n/**\n * Thrown by the {@link ActivityClient} while waiting on Activity execution result if execution completes with failure.\n * The failure is stored in the `cause` property.\n *\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\n@SymbolBasedInstanceOfError('ActivityExecutionFailedError')\nexport class ActivityExecutionFailedError extends Error {\n  constructor(\n    message: string,\n    public readonly cause: Error | undefined,\n    public readonly activityId: string,\n    public readonly runId?: string\n  ) {\n    super(message);\n  }\n}\n\n/**\n * Thrown when starting an Activity failed because another Activity with the same ID already exists and reusing the ID\n * is not allowed under chosen ID reuse policy and ID conflict policy. See {@link ActivityOptions.idReusePolicy} and\n * {@link ActivityOptions.idConflictPolicy}.\n *\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\n@SymbolBasedInstanceOfError('ActivityExecutionAlreadyStartedError')\nexport class ActivityExecutionAlreadyStartedError extends Error {\n  constructor(\n    message: string,\n    /**\n     * ID of the Activity that failed to start.\n     */\n    public readonly activityId: string,\n    /**\n     * Run ID of the existing Activity execution with the same Activity ID.\n     */\n    public readonly runId: string\n  ) {\n    super(message);\n  }\n}\n\n/**\n * Returns true if the provided error is a {@link GrpcServiceError}.\n */\nexport function isGrpcServiceError(err: unknown): err is GrpcServiceError {\n  return (\n    isError(err) &&\n    typeof (err as GrpcServiceError)?.details === 'string' &&\n    isRecord((err as GrpcServiceError).metadata)\n  );\n}\n\n/**\n * Returns true if the provided error or its cause is a {@link GrpcServiceError} with code DEADLINE_EXCEEDED.\n *\n * @see {@link Connection.withDeadline}\n */\nexport function isGrpcDeadlineError(err: unknown): err is Error {\n  while (isError(err)) {\n    if (isGrpcServiceError(err) && (err as GrpcServiceError).code === status.DEADLINE_EXCEEDED) {\n      return true;\n    }\n    err = (err as any).cause;\n  }\n  return false;\n}\n\n/**\n * Returns true if the provided error or its cause is a {@link GrpcServiceError} with code CANCELLED.\n *\n * @see {@link Connection.withAbortSignal}\n */\nexport function isGrpcCancelledError(err: unknown): err is Error {\n  while (isError(err)) {\n    if (isGrpcServiceError(err) && (err as GrpcServiceError).code === status.CANCELLED) {\n      return true;\n    }\n    err = (err as any).cause;\n  }\n  return false;\n}\n\n/**\n * @deprecated Use `isGrpcServiceError` instead\n */\nexport const isServerErrorResponse = isGrpcServiceError;\n","import type { Interceptor, StatusObject } from '@grpc/grpc-js';\nimport { InterceptingCall, ListenerBuilder, RequesterBuilder } from '@grpc/grpc-js';\nimport * as grpc from '@grpc/grpc-js';\n\nexport interface GrpcRetryOptions {\n  /**\n   * A function which accepts the current retry attempt (starts at 1) and returns the millisecond\n   * delay that should be applied before the next retry.\n   */\n  delayFunction: (attempt: number, status: StatusObject) => number;\n\n  /**\n   * A function which accepts a failed status object and returns true if the call should be retried\n   */\n  retryableDecider: (attempt: number, status: StatusObject) => boolean;\n}\n\n/**\n * Options for the backoff formula: `factor ^ attempt * initialIntervalMs(status) * jitter(maxJitter)`\n */\nexport interface BackoffOptions {\n  /**\n   * Exponential backoff factor\n   *\n   * @default 1.7\n   */\n  factor: number;\n\n  /**\n   * Maximum number of attempts\n   *\n   * @default 10\n   */\n  maxAttempts: number;\n  /**\n   * Maximum amount of jitter to apply\n   *\n   * @default 0.2\n   */\n  maxJitter: number;\n  /**\n   * Function that returns the \"initial\" backoff interval based on the returned status.\n   *\n   * The default is 1 second for RESOURCE_EXHAUSTED errors and 100 millis for other retryable errors.\n   */\n  initialIntervalMs(status: StatusObject): number;\n\n  /**\n   * Function that returns the \"maximum\" backoff interval based on the returned status.\n   *\n   * The default is 5 seconds regardless of the status.\n   */\n  maxIntervalMs(status: StatusObject): number;\n}\n\n/**\n * Add defaults as documented in {@link BackoffOptions}\n */\nfunction withDefaultBackoffOptions({\n  maxAttempts,\n  factor,\n  maxJitter,\n  initialIntervalMs,\n}: Partial<BackoffOptions>): BackoffOptions {\n  return {\n    maxAttempts: maxAttempts ?? 10,\n    factor: factor ?? 1.7,\n    maxJitter: maxJitter ?? 0.2,\n    initialIntervalMs: initialIntervalMs ?? defaultInitialIntervalMs,\n    maxIntervalMs() {\n      return 5_000;\n    },\n  };\n}\n\n/**\n * Generates the default retry behavior based on given backoff options\n */\nexport function defaultGrpcRetryOptions(options: Partial<BackoffOptions> = {}): GrpcRetryOptions {\n  const { maxAttempts, factor, maxJitter, initialIntervalMs, maxIntervalMs } = withDefaultBackoffOptions(options);\n  return {\n    delayFunction(attempt, status) {\n      return Math.min(maxIntervalMs(status), factor ** attempt * initialIntervalMs(status)) * jitter(maxJitter);\n    },\n    retryableDecider(attempt, status) {\n      return attempt < maxAttempts && isRetryableError(status);\n    },\n  };\n}\n\n/**\n * Set of retryable gRPC status codes\n */\nconst retryableCodes = new Set([\n  grpc.status.UNKNOWN,\n  grpc.status.RESOURCE_EXHAUSTED,\n  grpc.status.UNAVAILABLE,\n  grpc.status.ABORTED,\n  grpc.status.DATA_LOSS,\n  grpc.status.OUT_OF_RANGE,\n]);\n\nexport function isRetryableError(status: StatusObject): boolean {\n  // gRPC INTERNAL status is ambiguous and may be used in many unrelated situations, including:\n  // - TLS errors\n  // - Compression errors\n  // - Errors decoding protobuf messages (either client-side or server-side)\n  // - Transient HTTP/2 network errors\n  // - Failing some server-side request validation\n  // - etc.\n  //\n  // In most case, retrying is useless and would only be a waste of resource.\n  // However, in case of transient network errors, retrying is highly desirable.\n  // Unfortunately, the only way of differenciating between those various cases\n  // is pattern matching the error messages.\n  if (status.code === grpc.status.INTERNAL) {\n    // RST_STREAM code 0 means the HTTP2 request completed with HTTP status 200, but without\n    // the mandatory `grpc-status` header. That's generally due to some HTTP2 proxy or load balancer\n    // that doesn't know about gRPC-specifics. Retrying may help.\n    if (/RST_STREAM with code 0|Call ended without gRPC status/i.test(status.details)) return true;\n\n    // RST_STREAM code 2 is pretty generic and encompasses most HTTP2 protocol errors.\n    // That may for example happen if the client tries to reuse the connection at the\n    // same time as the server initiate graceful closing. Retrying may help.\n    if (/RST_STREAM with code 2/i.test(status.details)) {\n      // Some TLS errors surfaces with message:\n      // \"Received RST_STREAM with code 2 triggered by internal client error: […] SSL alert number XX\"\n      // At this time, no TLS error is worth retrying, so dismiss those.\n      if (/SSL alert number/i.test(status.details)) return false;\n\n      return true;\n    }\n\n    return false;\n  }\n\n  return retryableCodes.has(status.code);\n}\n\n/**\n * Calculates random amount of jitter between 0 and `max`\n */\nfunction jitter(max: number) {\n  return 1 - max + Math.random() * max * 2;\n}\n\n/**\n * Default implementation - backs off more on RESOURCE_EXHAUSTED errors\n */\nfunction defaultInitialIntervalMs({ code }: StatusObject) {\n  // Backoff more on RESOURCE_EXHAUSTED\n  if (code === grpc.status.RESOURCE_EXHAUSTED) {\n    return 1000;\n  }\n  return 100;\n}\n\n/**\n * Returns a GRPC interceptor that will perform automatic retries for some types of failed calls\n *\n * @param retryOptions Options for the retry interceptor\n */\nexport function makeGrpcRetryInterceptor(retryOptions: GrpcRetryOptions): Interceptor {\n  return (options, nextCall) => {\n    let savedSendMessage: any;\n    let savedReceiveMessage: any;\n    let savedMessageNext: (message: any) => void;\n\n    const requester = new RequesterBuilder()\n      .withStart(function (metadata, _listener, next) {\n        // First attempt\n        let attempt = 1;\n\n        const listener = new ListenerBuilder()\n          .withOnReceiveMessage((message, next) => {\n            savedReceiveMessage = message;\n            savedMessageNext = next;\n          })\n          .withOnReceiveStatus((status, next) => {\n            const retry = () => {\n              attempt++;\n              const call = nextCall(options);\n              call.start(metadata, {\n                onReceiveMessage(message) {\n                  savedReceiveMessage = message;\n                },\n                onReceiveStatus,\n              });\n              call.sendMessage(savedSendMessage);\n              call.halfClose();\n            };\n\n            const onReceiveStatus = (status: StatusObject) => {\n              if (retryOptions.retryableDecider(attempt, status)) {\n                setTimeout(retry, retryOptions.delayFunction(attempt, status));\n              } else {\n                savedMessageNext(savedReceiveMessage);\n                // TODO: For reasons that are completely unclear to me, if you pass a handcrafted\n                // status object here, node will magically just exit at the end of this line.\n                // No warning, no nothing. Here be dragons.\n                next(status);\n              }\n            };\n\n            onReceiveStatus(status);\n          })\n          .build();\n        next(metadata, listener);\n      })\n      .withSendMessage((message, next) => {\n        savedSendMessage = message;\n        next(message);\n      })\n      .build();\n    return new InterceptingCall(nextCall(options), requester);\n  };\n}\n","{\n  \"name\": \"@temporalio/client\",\n  \"version\": \"1.23.0\",\n  \"description\": \"Temporal.io SDK Client sub-package\",\n  \"main\": \"lib/index.js\",\n  \"types\": \"./lib/index.d.ts\",\n  \"keywords\": [\n    \"temporal\",\n    \"workflow\",\n    \"client\"\n  ],\n  \"author\": \"Temporal Technologies Inc. <sdk@temporal.io>\",\n  \"license\": \"MIT\",\n  \"dependencies\": {\n    \"@grpc/grpc-js\": \"^1.12.4\",\n    \"abort-controller\": \"^3.0.0\",\n    \"long\": \"^5.3.2\",\n    \"nexus-rpc\": \"^0.0.3\",\n    \"uuid\": \"^11.1.0\",\n    \"@temporalio/common\": \"1.23.0\",\n    \"@temporalio/proto\": \"1.23.0\"\n  },\n  \"devDependencies\": {\n    \"protobufjs\": \"^8.7.1\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/temporalio/sdk-typescript/issues\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/temporalio/sdk-typescript.git\",\n    \"directory\": \"packages/client\"\n  },\n  \"homepage\": \"https://github.com/temporalio/sdk-typescript/tree/main/packages/client\",\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"files\": [\n    \"src\",\n    \"lib\"\n  ],\n  \"engines\": {\n    \"node\": \">= 20.3.0\"\n  },\n  \"scripts\": {\n    \"build\": \"tsc --build\"\n  }\n}","// ../package.json is outside of the TS project rootDir which causes TS to complain about this import.\n// We do not want to change the rootDir because it messes up the output structure.\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport pkg from '../package.json';\n\nexport default pkg as { name: string; version: string };\n","import type * as grpc from '@grpc/grpc-js';\nimport type {\n  TypedSearchAttributes,\n  SearchAttributes,\n  SearchAttributeValue,\n  Priority,\n  RetryPolicy,\n  WorkerDeploymentVersion,\n} from '@temporalio/common';\nimport { makeProtoEnumConverters } from '@temporalio/common/lib/internal-workflow';\nimport * as proto from '@temporalio/proto';\nimport type { Replace } from '@temporalio/common/lib/type-helpers';\nimport type { ConnectionPlugin } from './connection';\n\nexport interface WorkflowExecution {\n  workflowId: string;\n  runId?: string;\n}\nexport type StartWorkflowExecutionRequest = proto.temporal.api.workflowservice.v1.IStartWorkflowExecutionRequest;\nexport type GetWorkflowExecutionHistoryRequest =\n  proto.temporal.api.workflowservice.v1.IGetWorkflowExecutionHistoryRequest;\nexport type DescribeWorkflowExecutionResponse =\n  proto.temporal.api.workflowservice.v1.IDescribeWorkflowExecutionResponse;\nexport type RawWorkflowExecutionInfo = proto.temporal.api.workflow.v1.IWorkflowExecutionInfo;\nexport type TerminateWorkflowExecutionResponse =\n  proto.temporal.api.workflowservice.v1.ITerminateWorkflowExecutionResponse;\nexport type RequestCancelWorkflowExecutionResponse =\n  proto.temporal.api.workflowservice.v1.IRequestCancelWorkflowExecutionResponse;\n\nexport type WorkflowExecutionStatusName =\n  | 'UNSPECIFIED'\n  | 'RUNNING'\n  | 'COMPLETED'\n  | 'FAILED'\n  | 'CANCELLED'\n  | 'TERMINATED'\n  | 'CONTINUED_AS_NEW'\n  | 'TIMED_OUT'\n  | 'PAUSED'\n  | 'UNKNOWN'; // UNKNOWN is reserved for future enum values\n\nexport interface WorkflowExecutionInfo {\n  type: string;\n  workflowId: string;\n  runId: string;\n  taskQueue: string;\n  status: { code: proto.temporal.api.enums.v1.WorkflowExecutionStatus; name: WorkflowExecutionStatusName };\n  historyLength: number;\n  /**\n￼   * Size of Workflow history in bytes.\n￼   *\n￼   * This value is only available in server versions >= 1.20\n￼   */\n  historySize?: number;\n  startTime: Date;\n  executionTime?: Date;\n  closeTime?: Date;\n  memo?: Record<string, unknown>;\n  /** @deprecated Use {@link typedSearchAttributes} instead. */\n  searchAttributes: SearchAttributes;\n  typedSearchAttributes: TypedSearchAttributes;\n  parentExecution?: Required<proto.temporal.api.common.v1.IWorkflowExecution>;\n  rootExecution?: Required<proto.temporal.api.common.v1.IWorkflowExecution>;\n  raw: RawWorkflowExecutionInfo;\n  priority?: Priority;\n}\n\nexport interface CountWorkflowExecution {\n  count: number;\n  groups: {\n    count: number;\n    groupValues: SearchAttributeValue[];\n  }[];\n}\n\nexport type WorkflowExecutionDescription = Replace<\n  WorkflowExecutionInfo,\n  {\n    raw: DescribeWorkflowExecutionResponse;\n  }\n> & {\n  /**\n   * General fixed details for this workflow execution that may appear in UI/CLI.\n   * This can be in Temporal markdown format and can span multiple lines.\n   */\n  staticDetails: () => Promise<string | undefined>;\n\n  /**\n   * A single-line fixed summary for this workflow execution that may appear in the UI/CLI.\n   * This can be in single-line Temporal markdown format.\n   */\n  staticSummary: () => Promise<string | undefined>;\n};\n\nexport type WorkflowService = proto.temporal.api.workflowservice.v1.WorkflowService;\nexport const { WorkflowService } = proto.temporal.api.workflowservice.v1;\nexport type OperatorService = proto.temporal.api.operatorservice.v1.OperatorService;\nexport const { OperatorService } = proto.temporal.api.operatorservice.v1;\nexport type TestService = proto.temporal.api.testservice.v1.TestService;\nexport const { TestService } = proto.temporal.api.testservice.v1;\nexport type HealthService = proto.grpc.health.v1.Health;\nexport const { Health: HealthService } = proto.grpc.health.v1;\n\n/**\n * Mapping of string to valid gRPC metadata value\n */\nexport type Metadata = Record<string, grpc.MetadataValue>;\n\n/**\n * User defined context for gRPC client calls\n */\nexport interface CallContext {\n  /**\n   * {@link Deadline | https://grpc.io/blog/deadlines/} for gRPC client calls\n   */\n  deadline?: number | Date;\n  /**\n   * Metadata to set on gRPC requests\n   */\n  metadata?: Metadata;\n\n  abortSignal?: AbortSignal;\n}\n\n/**\n * Connection interface used by high level SDK clients.\n */\nexport interface ConnectionLike {\n  workflowService: WorkflowService;\n  operatorService: OperatorService;\n  plugins: ConnectionPlugin[];\n  close(): Promise<void>;\n  ensureConnected(): Promise<void>;\n\n  /**\n   * Set a deadline for any service requests executed in `fn`'s scope.\n   *\n   * The deadline is a point in time after which any pending gRPC request will be considered as failed;\n   * this will locally result in the request call throwing a {@link grpc.ServiceError|ServiceError}\n   * with code {@link grpc.status.DEADLINE_EXCEEDED|DEADLINE_EXCEEDED}; see {@link isGrpcDeadlineError}.\n   *\n   * It is stronly recommended to explicitly set deadlines. If no deadline is set, then it is\n   * possible for the client to end up waiting forever for a response.\n   *\n   * This method is only a convenience wrapper around {@link Connection.withDeadline}.\n   *\n   * @param deadline a point in time after which the request will be considered as failed; either a\n   *                 Date object, or a number of milliseconds since the Unix epoch (UTC).\n   * @returns the value returned from `fn`\n   *\n   * @see https://grpc.io/docs/guides/deadlines/\n   */\n  withDeadline<R>(deadline: number | Date, fn: () => Promise<R>): Promise<R>;\n\n  /**\n   * Set metadata for any service requests executed in `fn`'s scope.\n   *\n   * @returns returned value of `fn`\n   */\n  withMetadata<R>(metadata: Metadata, fn: () => Promise<R>): Promise<R>;\n\n  /**\n   * Set an {@link AbortSignal} that, when aborted, cancels any ongoing service requests executed in\n   * `fn`'s scope. This will locally result in the request call throwing a {@link grpc.ServiceError|ServiceError}\n   * with code {@link grpc.status.CANCELLED|CANCELLED}; see {@link isGrpcCancelledError}.\n   *\n   * @returns value returned from `fn`\n   *\n   * @see https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal\n   */\n  withAbortSignal<R>(abortSignal: AbortSignal, fn: () => Promise<R>): Promise<R>;\n}\n\nexport const InternalConnectionLikeSymbol = Symbol('__temporal_internal_connection_like');\nexport type InternalConnectionLike = ConnectionLike & {\n  [InternalConnectionLikeSymbol]?: {\n    /**\n     * Capability flag that determines whether the connection supports eager workflow start.\n     * This will only be true if the underlying connection is a {@link NativeConnection}.\n     */\n    readonly supportsEagerStart?: boolean;\n  };\n};\n\nexport const QueryRejectCondition = {\n  NONE: 'NONE',\n  NOT_OPEN: 'NOT_OPEN',\n  NOT_COMPLETED_CLEANLY: 'NOT_COMPLETED_CLEANLY',\n\n  /** @deprecated Use {@link NONE} instead. */\n  QUERY_REJECT_CONDITION_NONE: 'NONE',\n\n  /** @deprecated Use {@link NOT_OPEN} instead. */\n  QUERY_REJECT_CONDITION_NOT_OPEN: 'NOT_OPEN',\n\n  /** @deprecated Use {@link NOT_COMPLETED_CLEANLY} instead. */\n  QUERY_REJECT_CONDITION_NOT_COMPLETED_CLEANLY: 'NOT_COMPLETED_CLEANLY',\n\n  /** @deprecated Use `undefined` instead. */\n  QUERY_REJECT_CONDITION_UNSPECIFIED: undefined,\n} as const;\nexport type QueryRejectCondition = (typeof QueryRejectCondition)[keyof typeof QueryRejectCondition];\n\nexport const [encodeQueryRejectCondition, decodeQueryRejectCondition] = makeProtoEnumConverters<\n  proto.temporal.api.enums.v1.QueryRejectCondition,\n  typeof proto.temporal.api.enums.v1.QueryRejectCondition,\n  keyof typeof proto.temporal.api.enums.v1.QueryRejectCondition,\n  typeof QueryRejectCondition,\n  'QUERY_REJECT_CONDITION_'\n>(\n  {\n    [QueryRejectCondition.NONE]: 1,\n    [QueryRejectCondition.NOT_OPEN]: 2,\n    [QueryRejectCondition.NOT_COMPLETED_CLEANLY]: 3,\n    UNSPECIFIED: 0,\n  } as const,\n  'QUERY_REJECT_CONDITION_'\n);\n\n/**\n * Return type of {@link ActivityClient.count}\n *\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport interface CountActivityExecutions {\n  readonly count: number;\n  readonly groups?: {\n    readonly count: number;\n    readonly groupValues?: any[];\n  }[];\n}\n\n/**\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport type RawActivityExecutionInfo = proto.temporal.api.activity.v1.IActivityExecutionInfo;\n\n/**\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport type RawActivityExecutionListInfo = proto.temporal.api.activity.v1.IActivityExecutionListInfo;\n\n/**\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport type RawActivityExecutionCallbacks = proto.temporal.api.activity.v1.ICallbackInfo[];\n\n/**\n * Type of elements returned by {@link ActivityClient.list}\n *\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport interface ActivityExecutionInfo {\n  rawListInfo?: RawActivityExecutionListInfo;\n  activityId: string;\n  activityRunId: string;\n  activityType: string;\n  scheduleTime?: Date;\n  closeTime?: Date;\n  status: ActivityExecutionStatus;\n  typedSearchAttributes: TypedSearchAttributes;\n  taskQueue: string;\n  executionDurationMs?: number;\n}\n\n/**\n * Return type of {@link ActivityClient.describe}\n *\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport interface ActivityExecutionDescription extends ActivityExecutionInfo {\n  rawCallbacks: RawActivityExecutionCallbacks;\n  rawInfo: RawActivityExecutionInfo;\n  runState?: PendingActivityState;\n  scheduleToCloseTimeoutMs?: number;\n  scheduleToStartTimeoutMs?: number;\n  startToCloseTimeoutMs?: number;\n  heartbeatTimeoutMs?: number;\n  retryPolicy: RetryPolicy;\n  lastHeartbeatTime?: Date;\n  lastStartedTime?: Date;\n  attempt: number;\n  expirationTime?: Date;\n  lastWorkerIdentity?: string;\n  currentRetryIntervalMs?: number;\n  lastAttemptCompleteTime?: Date;\n  nextAttemptScheduleTime?: Date;\n  lastDeploymentVersion?: WorkerDeploymentVersion;\n  priority: Priority;\n  canceledReason?: string;\n\n  getHeartbeatDetails<T = any>(): Promise<T | undefined>;\n  getLastFailure(): Promise<Error | undefined>;\n}\n\n/**\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport const ActivityIdReusePolicy = {\n  ALLOW_DUPLICATE: 'ALLOW_DUPLICATE',\n  ALLOW_DUPLICATE_FAILED_ONLY: 'ALLOW_DUPLICATE_FAILED_ONLY',\n  REJECT_DUPLICATE: 'REJECT_DUPLICATE',\n} as const;\n/**\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport type ActivityIdReusePolicy = (typeof ActivityIdReusePolicy)[keyof typeof ActivityIdReusePolicy];\n/**\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport const [encodeActivityIdReusePolicy, decodeActivityIdReusePolicy] = makeProtoEnumConverters<\n  proto.temporal.api.enums.v1.ActivityIdReusePolicy,\n  typeof proto.temporal.api.enums.v1.ActivityIdReusePolicy,\n  keyof typeof proto.temporal.api.enums.v1.ActivityIdReusePolicy,\n  typeof ActivityIdReusePolicy,\n  'ACTIVITY_ID_REUSE_POLICY_'\n>(\n  {\n    [ActivityIdReusePolicy.ALLOW_DUPLICATE]: 1,\n    [ActivityIdReusePolicy.ALLOW_DUPLICATE_FAILED_ONLY]: 2,\n    [ActivityIdReusePolicy.REJECT_DUPLICATE]: 3,\n    UNSPECIFIED: 0,\n  } as const,\n  'ACTIVITY_ID_REUSE_POLICY_'\n);\n\n/**\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport const ActivityIdConflictPolicy = {\n  FAIL: 'FAIL',\n  USE_EXISTING: 'USE_EXISTING',\n} as const;\n/**\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport type ActivityIdConflictPolicy = (typeof ActivityIdConflictPolicy)[keyof typeof ActivityIdConflictPolicy];\n/**\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport const [encodeActivityIdConflictPolicy, decodeActivityIdConflictPolicy] = makeProtoEnumConverters<\n  proto.temporal.api.enums.v1.ActivityIdConflictPolicy,\n  typeof proto.temporal.api.enums.v1.ActivityIdConflictPolicy,\n  keyof typeof proto.temporal.api.enums.v1.ActivityIdConflictPolicy,\n  typeof ActivityIdConflictPolicy,\n  'ACTIVITY_ID_CONFLICT_POLICY_'\n>(\n  {\n    [ActivityIdConflictPolicy.FAIL]: 1,\n    [ActivityIdConflictPolicy.USE_EXISTING]: 2,\n    UNSPECIFIED: 0,\n  } as const,\n  'ACTIVITY_ID_CONFLICT_POLICY_'\n);\n\n/**\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport const ActivityExecutionStatus = {\n  RUNNING: 'RUNNING',\n  COMPLETED: 'COMPLETED',\n  FAILED: 'FAILED',\n  CANCELED: 'CANCELED',\n  TERMINATED: 'TERMINATED',\n  TIMED_OUT: 'TIMED_OUT',\n  PAUSED: 'PAUSED',\n} as const;\n/**\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport type ActivityExecutionStatus = (typeof ActivityExecutionStatus)[keyof typeof ActivityExecutionStatus];\n/**\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport const [encodeActivityExecutionStatus, decodeActivityExecutionStatus] = makeProtoEnumConverters<\n  proto.temporal.api.enums.v1.ActivityExecutionStatus,\n  typeof proto.temporal.api.enums.v1.ActivityExecutionStatus,\n  keyof typeof proto.temporal.api.enums.v1.ActivityExecutionStatus,\n  typeof ActivityExecutionStatus,\n  'ACTIVITY_EXECUTION_STATUS_'\n>(\n  {\n    [ActivityExecutionStatus.RUNNING]: 1,\n    [ActivityExecutionStatus.COMPLETED]: 2,\n    [ActivityExecutionStatus.FAILED]: 3,\n    [ActivityExecutionStatus.CANCELED]: 4,\n    [ActivityExecutionStatus.TERMINATED]: 5,\n    [ActivityExecutionStatus.TIMED_OUT]: 6,\n    [ActivityExecutionStatus.PAUSED]: 7,\n    UNSPECIFIED: 0,\n  } as const,\n  'ACTIVITY_EXECUTION_STATUS_'\n);\n\n/**\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport const PendingActivityState = {\n  SCHEDULED: 'SCHEDULED',\n  STARTED: 'STARTED',\n  CANCEL_REQUESTED: 'CANCEL_REQUESTED',\n  PAUSED: 'PAUSED',\n  PAUSE_REQUESTED: 'PAUSE_REQUESTED',\n} as const;\n/**\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport type PendingActivityState = (typeof PendingActivityState)[keyof typeof PendingActivityState];\n/**\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport const [encodePendingActivityState, decodePendingActivityState] = makeProtoEnumConverters<\n  proto.temporal.api.enums.v1.PendingActivityState,\n  typeof proto.temporal.api.enums.v1.PendingActivityState,\n  keyof typeof proto.temporal.api.enums.v1.PendingActivityState,\n  typeof PendingActivityState,\n  'PENDING_ACTIVITY_STATE_'\n>(\n  {\n    [PendingActivityState.SCHEDULED]: 1,\n    [PendingActivityState.STARTED]: 2,\n    [PendingActivityState.CANCEL_REQUESTED]: 3,\n    [PendingActivityState.PAUSED]: 4,\n    [PendingActivityState.PAUSE_REQUESTED]: 5,\n    UNSPECIFIED: 0,\n  } as const,\n  'PENDING_ACTIVITY_STATE_'\n);\n","import { AsyncLocalStorage } from 'node:async_hooks';\nimport * as grpc from '@grpc/grpc-js';\nimport type * as proto from 'protobufjs';\nimport type { TLSConfig } from '@temporalio/common/lib/internal-non-workflow';\nimport { normalizeTlsConfig, normalizeGrpcEndpointAddress } from '@temporalio/common/lib/internal-non-workflow';\nimport { filterNullAndUndefined } from '@temporalio/common/lib/internal-workflow';\nimport type { Duration } from '@temporalio/common/lib/time';\nimport { msOptionalToNumber } from '@temporalio/common/lib/time';\nimport { type temporal } from '@temporalio/proto';\nimport { isGrpcServiceError, ServiceError } from './errors';\nimport { defaultGrpcRetryOptions, makeGrpcRetryInterceptor } from './grpc-retry';\nimport pkg from './pkg';\nimport type { CallContext, Metadata } from './types';\nimport { HealthService, OperatorService, TestService, WorkflowService } from './types';\n\n/**\n * The default Temporal Server's TCP port for public gRPC connections.\n */\nconst DEFAULT_TEMPORAL_GRPC_PORT = 7233;\n\n/**\n * gRPC and Temporal Server connection options\n */\nexport interface ConnectionOptions {\n  /**\n   * The address of the Temporal server to connect to, in `hostname:port` format.\n   *\n   * Port defaults to 7233. Raw IPv6 addresses must be wrapped in square brackets (e.g. `[ipv6]:port`).\n   *\n   * @default localhost:7233\n   */\n  address?: string;\n\n  /**\n   * TLS configuration. Pass a falsy value to use a non-encrypted connection,\n   * or `true` or `{}` to connect with TLS without any customization.\n   *\n   * For advanced scenario, a prebuilt {@link grpc.ChannelCredentials} object\n   * may instead be specified using the {@link credentials} property.\n   *\n   * Either {@link credentials} or this may be specified for configuring TLS\n   *\n   * @default TLS is disabled\n   */\n  tls?: TLSConfig | boolean | null;\n\n  /**\n   * gRPC channel credentials.\n   *\n   * `ChannelCredentials` are things like SSL credentials that can be used to secure a connection.\n   * There may be only one `ChannelCredentials`. They can be created using some of the factory\n   * methods defined {@link https://grpc.github.io/grpc/node/grpc.credentials.html | here}\n   *\n   * Specifying a prebuilt `ChannelCredentials` should only be required for advanced use cases.\n   * For simple TLS use cases, using the {@link tls} property is recommended. To register\n   * `CallCredentials` (eg. metadata-based authentication), use the {@link callCredentials} property.\n   *\n   * Either {@link tls} or this may be specified for configuring TLS\n   */\n  credentials?: grpc.ChannelCredentials;\n\n  /**\n   * gRPC call credentials.\n   *\n   * `CallCredentials` generaly modify metadata; they can be attached to a connection to affect all method\n   * calls made using that connection. They can be created using some of the factory methods defined\n   * {@link https://grpc.github.io/grpc/node/grpc.credentials.html | here}\n   *\n   * If `callCredentials` are specified, they will be composed with channel credentials\n   * (either the one created implicitely by using the {@link tls} option, or the one specified\n   * explicitly through {@link credentials}). Notice that gRPC doesn't allow registering\n   * `callCredentials` on insecure connections.\n   */\n  callCredentials?: grpc.CallCredentials[];\n\n  /**\n   * GRPC Channel arguments\n   *\n   * @see option descriptions {@link https://grpc.github.io/grpc/core/group__grpc__arg__keys.html | here}\n   *\n   * By default the SDK sets the following keepalive arguments:\n   *\n   * ```\n   * grpc.keepalive_permit_without_calls: 1\n   * grpc.keepalive_time_ms: 30_000\n   * grpc.keepalive_timeout_ms: 15_000\n   * ```\n   *\n   * To opt-out of keepalive, override these keys with `undefined`.\n   */\n  channelArgs?: grpc.ChannelOptions;\n\n  /**\n   * {@link https://grpc.github.io/grpc/node/module-src_client_interceptors.html | gRPC interceptors} which will be\n   * applied to every RPC call performed by this connection. By default, an interceptor will be included which\n   * automatically retries retryable errors. If you do not wish to perform automatic retries, set this to an empty list\n   * (or a list with your own interceptors). If you want to add your own interceptors while keeping the default retry\n   * behavior, add this to your list of interceptors: `makeGrpcRetryInterceptor(defaultGrpcRetryOptions())`. See:\n   *\n   * - {@link makeGrpcRetryInterceptor}\n   * - {@link defaultGrpcRetryOptions}\n   */\n  interceptors?: grpc.Interceptor[];\n\n  /**\n   * Optional mapping of gRPC metadata (HTTP headers) to send with each request to the server.\n   * Setting the `Authorization` header is mutually exclusive with the {@link apiKey} option.\n   *\n   * In order to dynamically set metadata, use {@link Connection.withMetadata}\n   */\n  metadata?: Metadata;\n\n  /**\n   * API key for Temporal. This becomes the \"Authorization\" HTTP header with \"Bearer \" prepended.\n   * This is mutually exclusive with the `Authorization` header in {@link ConnectionOptions.metadata}.\n   *\n   * You may provide a static string or a callback. Also see {@link Connection.withApiKey} or\n   * {@link Connection.setApiKey}\n   */\n  apiKey?: string | (() => string);\n\n  /**\n   * Milliseconds to wait until establishing a connection with the server.\n   *\n   * Used either when connecting eagerly with {@link Connection.connect} or\n   * calling {@link Connection.ensureConnected}.\n   *\n   * @format number of milliseconds or {@link https://www.npmjs.com/package/ms | ms-formatted string}\n   * @default 10 seconds\n   */\n  connectTimeout?: Duration;\n\n  /**\n   * List of plugins to register with the connection.\n   *\n   * Plugins allow you to configure the connection options.\n   * Any plugins provided will also be passed to any client built from this connection.\n   *\n   * @experimental Plugins is an experimental feature; APIs may change without notice.\n   */\n  plugins?: ConnectionPlugin[];\n}\n\nexport type ConnectionOptionsWithDefaults = Required<\n  Omit<ConnectionOptions, 'tls' | 'connectTimeout' | 'callCredentials' | 'apiKey'>\n> & {\n  connectTimeoutMs: number;\n};\n\n/**\n * A symbol used to attach extra, SDK-internal connection options.\n *\n * @internal\n * @hidden\n */\nexport const InternalConnectionOptionsSymbol = Symbol('__temporal_internal_connection_options');\nexport type InternalConnectionOptions = ConnectionOptions & {\n  [InternalConnectionOptionsSymbol]?: {\n    /**\n     * Indicate whether the `TestService` should be enabled on this connection. This is set to true\n     * on connections created internally by `TestWorkflowEnvironment.createTimeSkipping()`.\n     */\n    supportsTestService?: boolean;\n  };\n};\n\nexport const LOCAL_TARGET = 'localhost:7233';\n\nfunction addDefaults(options: ConnectionOptions): ConnectionOptionsWithDefaults {\n  const { channelArgs, interceptors, connectTimeout, ...rest } = options;\n  return {\n    address: LOCAL_TARGET,\n    credentials: grpc.credentials.createInsecure(),\n    channelArgs: {\n      'grpc.keepalive_permit_without_calls': 1,\n      'grpc.keepalive_time_ms': 30_000,\n      'grpc.keepalive_timeout_ms': 15_000,\n      max_receive_message_length: 128 * 1024 * 1024, // 128 MB\n      ...channelArgs,\n    },\n    interceptors: interceptors ?? [makeGrpcRetryInterceptor(defaultGrpcRetryOptions())],\n    metadata: {},\n    connectTimeoutMs: msOptionalToNumber(connectTimeout) ?? 10_000,\n    plugins: [],\n    ...filterNullAndUndefined(rest),\n  };\n}\n\n/**\n * - Convert {@link ConnectionOptions.tls} to {@link grpc.ChannelCredentials}\n * - Add the grpc.ssl_target_name_override GRPC {@link ConnectionOptions.channelArgs | channel arg}\n * - Add default port to address if port not specified\n * - Set `Authorization` header based on {@link ConnectionOptions.apiKey}\n */\nfunction normalizeGRPCConfig(options: ConnectionOptions): ConnectionOptions {\n  const { tls: tlsFromConfig, credentials, callCredentials, ...rest } = options;\n  if (rest.apiKey) {\n    if (rest.metadata?.['Authorization']) {\n      throw new TypeError(\n        'Both `apiKey` option and `Authorization` header were provided, but only one makes sense to use at a time.'\n      );\n    }\n    if (credentials !== undefined) {\n      throw new TypeError(\n        'Both `apiKey` and `credentials` ConnectionOptions were provided, but only one makes sense to use at a time'\n      );\n    }\n  }\n  if (rest.address) {\n    rest.address = normalizeGrpcEndpointAddress(rest.address, DEFAULT_TEMPORAL_GRPC_PORT);\n  }\n  const tls = normalizeTlsConfig(tlsFromConfig, options.apiKey);\n  if (tls) {\n    if (credentials) {\n      throw new TypeError('Both `tls` and `credentials` ConnectionOptions were provided');\n    }\n    const serverRootCert = tls.serverRootCACertificate && Buffer.from(tls.serverRootCACertificate);\n    const clientCertKey = tls.clientCertPair?.key && Buffer.from(tls.clientCertPair?.key);\n    const clientCertCrt = tls.clientCertPair?.crt && Buffer.from(tls.clientCertPair?.crt);\n    return {\n      ...rest,\n      credentials: grpc.credentials.combineChannelCredentials(\n        grpc.credentials.createSsl(serverRootCert, clientCertKey, clientCertCrt),\n        ...(callCredentials ?? [])\n      ),\n      channelArgs: {\n        ...rest.channelArgs,\n        ...(tls.serverNameOverride\n          ? {\n              'grpc.ssl_target_name_override': tls.serverNameOverride,\n              'grpc.default_authority': tls.serverNameOverride,\n            }\n          : undefined),\n      },\n    };\n  } else {\n    return {\n      ...rest,\n      credentials: grpc.credentials.combineChannelCredentials(\n        credentials ?? grpc.credentials.createInsecure(),\n        ...(callCredentials ?? [])\n      ),\n    };\n  }\n}\n\nexport interface RPCImplOptions {\n  serviceName: string;\n  client: grpc.Client;\n  callContextStorage: AsyncLocalStorage<CallContext>;\n  interceptors?: grpc.Interceptor[];\n  staticMetadata: Metadata;\n  apiKeyFnRef: { fn?: () => string };\n}\n\nexport interface ConnectionCtorOptions {\n  readonly options: ConnectionOptionsWithDefaults;\n  readonly client: grpc.Client;\n\n  /**\n   * Raw gRPC access to the Temporal service.\n   *\n   * **NOTE**: The namespace provided in {@link options} is **not** automatically set on requests made to the service.\n   */\n  readonly workflowService: WorkflowService;\n\n  /**\n   * Raw gRPC access to the Temporal {@link https://github.com/temporalio/api/blob/ddf07ab9933e8230309850e3c579e1ff34b03f53/temporal/api/operatorservice/v1/service.proto | operator service}.\n   */\n  readonly operatorService: OperatorService;\n\n  /**\n   * Raw gRPC access to the Temporal test service.\n   *\n   * Will be `undefined` if connected to a server that does not support the test service.\n   */\n  readonly testService: TestService | undefined;\n\n  /**\n   * Raw gRPC access to the standard gRPC {@link https://github.com/grpc/grpc/blob/92f58c18a8da2728f571138c37760a721c8915a2/doc/health-checking.md | health service}.\n   */\n  readonly healthService: HealthService;\n\n  readonly callContextStorage: AsyncLocalStorage<CallContext>;\n  readonly apiKeyFnRef: { fn?: () => string };\n}\n\n/**\n * Client connection to the Temporal Server\n *\n * ⚠️ Connections are expensive to construct and should be reused.\n * Make sure to {@link close} any unused connections to avoid leaking resources.\n */\nexport class Connection {\n  /**\n   * @internal\n   */\n  public static readonly Client = grpc.makeGenericClientConstructor({}, 'WorkflowService', {});\n\n  public readonly options: ConnectionOptionsWithDefaults;\n  protected readonly client: grpc.Client;\n\n  /**\n   * Used to ensure `ensureConnected` is called once.\n   */\n  protected connectPromise?: Promise<void>;\n\n  /**\n   * Raw gRPC access to Temporal Server's {@link\n   * https://github.com/temporalio/api/blob/main/temporal/api/workflowservice/v1/service.proto | Workflow service}\n   */\n  public readonly workflowService: WorkflowService;\n\n  /**\n   * Raw gRPC access to Temporal Server's\n   * {@link https://github.com/temporalio/api/blob/main/temporal/api/operatorservice/v1/service.proto | Operator service}\n   *\n   * The Operator Service API defines how Temporal SDKs and other clients interact with the Temporal\n   * server to perform administrative functions like registering a search attribute or a namespace.\n   *\n   * This Service API is NOT compatible with Temporal Cloud. Attempt to use it against a Temporal\n   * Cloud namespace will result in gRPC `unauthorized` error.\n   */\n  public readonly operatorService: OperatorService;\n\n  /**\n   * Raw gRPC access to the Temporal test service.\n   *\n   * Will be `undefined` if connected to a server that does not support the test service.\n   */\n  public readonly testService: TestService | undefined;\n\n  /**\n   * Raw gRPC access to the standard gRPC {@link https://github.com/grpc/grpc/blob/92f58c18a8da2728f571138c37760a721c8915a2/doc/health-checking.md | health service}.\n   */\n  public readonly healthService: HealthService;\n\n  public readonly plugins: ConnectionPlugin[];\n\n  readonly callContextStorage: AsyncLocalStorage<CallContext>;\n  private readonly apiKeyFnRef: { fn?: () => string };\n\n  protected static createCtorOptions(options: ConnectionOptions): ConnectionCtorOptions {\n    const normalizedOptions = normalizeGRPCConfig(options);\n    const apiKeyFnRef: { fn?: () => string } = {};\n    if (normalizedOptions.apiKey) {\n      if (typeof normalizedOptions.apiKey === 'string') {\n        const apiKey = normalizedOptions.apiKey;\n        apiKeyFnRef.fn = () => apiKey;\n      } else {\n        apiKeyFnRef.fn = normalizedOptions.apiKey;\n      }\n    }\n    const optionsWithDefaults = addDefaults(normalizedOptions);\n    // Allow overriding this\n    optionsWithDefaults.metadata['client-name'] ??= 'temporal-typescript';\n    optionsWithDefaults.metadata['client-version'] ??= pkg.version;\n\n    const client = new this.Client(\n      optionsWithDefaults.address,\n      optionsWithDefaults.credentials,\n      optionsWithDefaults.channelArgs\n    );\n    const callContextStorage = new AsyncLocalStorage<CallContext>();\n\n    const workflowRpcImpl = this.generateRPCImplementation({\n      serviceName: 'temporal.api.workflowservice.v1.WorkflowService',\n      client,\n      callContextStorage,\n      interceptors: optionsWithDefaults?.interceptors,\n      staticMetadata: optionsWithDefaults.metadata,\n      apiKeyFnRef,\n    });\n    const workflowService = WorkflowService.create(workflowRpcImpl, false, false);\n\n    const operatorRpcImpl = this.generateRPCImplementation({\n      serviceName: 'temporal.api.operatorservice.v1.OperatorService',\n      client,\n      callContextStorage,\n      interceptors: optionsWithDefaults?.interceptors,\n      staticMetadata: optionsWithDefaults.metadata,\n      apiKeyFnRef,\n    });\n    const operatorService = OperatorService.create(operatorRpcImpl, false, false);\n\n    let testService: TestService | undefined = undefined;\n    if ((options as InternalConnectionOptions)?.[InternalConnectionOptionsSymbol]?.supportsTestService) {\n      const testRpcImpl = this.generateRPCImplementation({\n        serviceName: 'temporal.api.testservice.v1.TestService',\n        client,\n        callContextStorage,\n        interceptors: optionsWithDefaults?.interceptors,\n        staticMetadata: optionsWithDefaults.metadata,\n        apiKeyFnRef,\n      });\n      testService = TestService.create(testRpcImpl, false, false);\n    }\n\n    const healthRpcImpl = this.generateRPCImplementation({\n      serviceName: 'grpc.health.v1.Health',\n      client,\n      callContextStorage,\n      interceptors: optionsWithDefaults?.interceptors,\n      staticMetadata: optionsWithDefaults.metadata,\n      apiKeyFnRef,\n    });\n    const healthService = HealthService.create(healthRpcImpl, false, false);\n\n    return {\n      client,\n      callContextStorage,\n      workflowService,\n      operatorService,\n      testService,\n      healthService,\n      options: optionsWithDefaults,\n      apiKeyFnRef,\n    };\n  }\n\n  /**\n   * Ensure connection can be established.\n   *\n   * Does not need to be called if you use {@link connect}.\n   *\n   * This method's result is memoized to ensure it runs only once.\n   *\n   * Calls {@link proto.temporal.api.workflowservice.v1.WorkflowService.getSystemInfo} internally.\n   */\n  async ensureConnected(): Promise<void> {\n    if (this.connectPromise == null) {\n      const deadline = Date.now() + this.options.connectTimeoutMs;\n      this.connectPromise = (async () => {\n        await this.untilReady(deadline);\n\n        try {\n          await this.withDeadline(deadline, () => this.workflowService.getSystemInfo({}));\n        } catch (err) {\n          if (isGrpcServiceError(err)) {\n            // Ignore old servers\n            if (err.code !== grpc.status.UNIMPLEMENTED) {\n              throw new ServiceError('Failed to connect to Temporal server', { cause: err });\n            }\n          } else {\n            throw err;\n          }\n        }\n      })();\n    }\n    return this.connectPromise;\n  }\n\n  /**\n   * Create a lazy `Connection` instance.\n   *\n   * This method does not verify connectivity with the server. We recommend using {@link connect} instead.\n   */\n  static lazy(options?: ConnectionOptions): Connection {\n    options = options ?? {};\n    for (const plugin of options.plugins ?? []) {\n      if (plugin.configureConnection !== undefined) {\n        options = plugin.configureConnection(options);\n      }\n    }\n    return new this(this.createCtorOptions(options));\n  }\n\n  /**\n   * Establish a connection with the server and return a `Connection` instance.\n   *\n   * This is the preferred method of creating connections as it verifies connectivity by calling\n   * {@link ensureConnected}.\n   */\n  static async connect(options?: ConnectionOptions): Promise<Connection> {\n    const conn = this.lazy(options);\n    await conn.ensureConnected();\n    return conn;\n  }\n\n  protected constructor({\n    options,\n    client,\n    workflowService,\n    operatorService,\n    testService,\n    healthService,\n    callContextStorage,\n    apiKeyFnRef,\n  }: ConnectionCtorOptions) {\n    this.options = options;\n    this.client = client;\n    this.workflowService = this.withNamespaceHeaderInjector(workflowService);\n    this.operatorService = operatorService;\n    this.testService = testService;\n    this.healthService = healthService;\n    this.callContextStorage = callContextStorage;\n    this.apiKeyFnRef = apiKeyFnRef;\n    this.plugins = options.plugins ?? [];\n  }\n\n  protected static generateRPCImplementation({\n    serviceName,\n    client,\n    callContextStorage,\n    interceptors,\n    staticMetadata,\n    apiKeyFnRef,\n  }: RPCImplOptions): proto.RPCImpl {\n    return (\n      method: proto.Method | proto.rpc.ServiceMethod<proto.Message<any>, proto.Message<any>>,\n      requestData: Uint8Array,\n      callback: grpc.requestCallback<any>\n    ) => {\n      const metadataContainer = new grpc.Metadata();\n      const { metadata, deadline, abortSignal } = callContextStorage.getStore() ?? {};\n      if (apiKeyFnRef.fn) {\n        const apiKey = apiKeyFnRef.fn();\n        if (apiKey) metadataContainer.set('Authorization', `Bearer ${apiKey}`);\n      }\n      for (const [k, v] of Object.entries(staticMetadata)) {\n        metadataContainer.set(k, v);\n      }\n      if (metadata != null) {\n        for (const [k, v] of Object.entries(metadata)) {\n          metadataContainer.set(k, v);\n        }\n      }\n\n      const call = client.makeUnaryRequest(\n        `/${serviceName}/${method.name}`,\n        (arg: any) => arg,\n        (arg: any) => arg,\n        requestData,\n        metadataContainer,\n        { interceptors, deadline },\n        callback\n      );\n\n      if (abortSignal != null) {\n        abortSignal.addEventListener('abort', () => call.cancel());\n      }\n\n      return call;\n    };\n  }\n\n  /**\n   * Set a deadline for any service requests executed in `fn`'s scope.\n   *\n   * The deadline is a point in time after which any pending gRPC request will be considered as failed;\n   * this will locally result in the request call throwing a {@link grpc.ServiceError|ServiceError}\n   * with code {@link grpc.status.DEADLINE_EXCEEDED|DEADLINE_EXCEEDED}; see {@link isGrpcDeadlineError}.\n   *\n   * It is strongly recommended to explicitly set deadlines. If no deadline is set, then it is\n   * possible for the client to end up waiting forever for a response.\n   *\n   * @param deadline a point in time after which the request will be considered as failed; either a\n   *                 Date object, or a number of milliseconds since the Unix epoch (UTC).\n   * @returns the value returned from `fn`\n   *\n   * @see https://grpc.io/docs/guides/deadlines/\n   */\n  async withDeadline<ReturnType>(deadline: number | Date, fn: () => Promise<ReturnType>): Promise<ReturnType> {\n    const cc = this.callContextStorage.getStore();\n    return await this.callContextStorage.run({ ...cc, deadline }, fn);\n  }\n\n  /**\n   * Set an {@link AbortSignal} that, when aborted, cancels any ongoing service requests executed in\n   * `fn`'s scope. This will locally result in the request call throwing a {@link grpc.ServiceError|ServiceError}\n   * with code {@link grpc.status.CANCELLED|CANCELLED}; see {@link isGrpcCancelledError}.\n   *\n   * This method is only a convenience wrapper around {@link Connection.withAbortSignal}.\n   *\n   * @example\n   *\n   * ```ts\n   * const ctrl = new AbortController();\n   * setTimeout(() => ctrl.abort(), 10_000);\n   * // 👇 throws if incomplete by the timeout.\n   * await conn.withAbortSignal(ctrl.signal, () => client.workflow.execute(myWorkflow, options));\n   * ```\n   *\n   * @returns value returned from `fn`\n   *\n   * @see https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal\n   */\n  // FIXME: `abortSignal` should be cumulative, i.e. if a signal is already set, it should be added\n  //        to the list of signals, and both the new and existing signal should abort the request.\n  async withAbortSignal<ReturnType>(abortSignal: AbortSignal, fn: () => Promise<ReturnType>): Promise<ReturnType> {\n    const cc = this.callContextStorage.getStore();\n    return await this.callContextStorage.run({ ...cc, abortSignal }, fn);\n  }\n\n  /**\n   * Set metadata for any service requests executed in `fn`'s scope.\n   *\n   * The provided metadata is merged on top of any existing metadata in current scope, including metadata provided in\n   * {@link ConnectionOptions.metadata}.\n   *\n   * @returns value returned from `fn`\n   *\n   * @example\n   *\n   * ```ts\n   * const workflowHandle = await conn.withMetadata({ apiKey: 'secret' }, () =>\n   *   conn.withMetadata({ otherKey: 'set' }, () => client.start(options)))\n   * );\n   * ```\n   */\n  async withMetadata<ReturnType>(metadata: Metadata, fn: () => Promise<ReturnType>): Promise<ReturnType> {\n    const cc = this.callContextStorage.getStore();\n    return await this.callContextStorage.run(\n      {\n        ...cc,\n        metadata: { ...cc?.metadata, ...metadata },\n      },\n      fn\n    );\n  }\n\n  /**\n   * Set the apiKey for any service requests executed in `fn`'s scope (thus changing the `Authorization` header).\n   *\n   * @returns value returned from `fn`\n   *\n   * @example\n   *\n   * ```ts\n   * const workflowHandle = await conn.withApiKey('secret', () =>\n   *   conn.withMetadata({ otherKey: 'set' }, () => client.start(options)))\n   * );\n   * ```\n   */\n  async withApiKey<ReturnType>(apiKey: string, fn: () => Promise<ReturnType>): Promise<ReturnType> {\n    const cc = this.callContextStorage.getStore();\n    return await this.callContextStorage.run(\n      {\n        ...cc,\n        metadata: { ...cc?.metadata, Authorization: `Bearer ${apiKey}` },\n      },\n      fn\n    );\n  }\n\n  /**\n   * Set the {@link ConnectionOptions.apiKey} for all subsequent requests. A static string or a\n   * callback function may be provided.\n   */\n  setApiKey(apiKey: string | (() => string)): void {\n    if (typeof apiKey === 'string') {\n      if (apiKey === '') {\n        throw new TypeError('`apiKey` must not be an empty string');\n      }\n      this.apiKeyFnRef.fn = () => apiKey;\n    } else {\n      this.apiKeyFnRef.fn = apiKey;\n    }\n  }\n\n  /**\n   * Wait for successful connection to the server.\n   *\n   * @see https://grpc.github.io/grpc/node/grpc.Client.html#waitForReady__anchor\n   */\n  protected async untilReady(deadline: number): Promise<void> {\n    return new Promise<void>((resolve, reject) => {\n      this.client.waitForReady(deadline, (err) => {\n        if (err) {\n          reject(err);\n        } else {\n          resolve();\n        }\n      });\n    });\n  }\n\n  // This method is async for uniformity with NativeConnection which could be used in the future to power clients\n  /**\n   * Close the underlying gRPC client.\n   *\n   * Make sure to call this method to ensure proper resource cleanup.\n   */\n  public async close(): Promise<void> {\n    this.client.close();\n    this.callContextStorage.disable();\n  }\n\n  private withNamespaceHeaderInjector(\n    workflowService: temporal.api.workflowservice.v1.WorkflowService\n  ): temporal.api.workflowservice.v1.WorkflowService {\n    const wrapper: any = {};\n\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n    for (const [methodName, methodImpl] of Object.entries(workflowService) as [string, Function][]) {\n      if (typeof methodImpl !== 'function') continue;\n\n      wrapper[methodName] = (...args: any[]) => {\n        const namespace = args[0]?.namespace;\n        if (namespace) {\n          return this.withMetadata({ 'temporal-namespace': namespace }, () => methodImpl.apply(workflowService, args));\n        } else {\n          return methodImpl.apply(workflowService, args);\n        }\n      };\n    }\n    return wrapper as WorkflowService;\n  }\n}\n\n/**\n * Plugin to control the configuration of a connection.\n *\n * @experimental Plugins is an experimental feature; APIs may change without notice.\n */\nexport interface ConnectionPlugin {\n  /**\n   * Gets the name of this plugin.\n   */\n  get name(): string;\n\n  /**\n   * Hook called when creating a connection to allow modification of configuration.\n   */\n  configureConnection?(options: ConnectionOptions): ConnectionOptions;\n}\n","import os from 'node:os';\nimport type * as _grpc from '@grpc/grpc-js'; // For JSDoc only\nimport type { DataConverter, LoadedDataConverter } from '@temporalio/common';\nimport { isLoadedDataConverter, loadDataConverter } from '@temporalio/common/lib/internal-non-workflow';\nimport { Connection } from './connection';\nimport type { ConnectionLike, Metadata } from './types';\n\nexport interface BaseClientOptions {\n  /**\n   * {@link DataConverter} to use for serializing and deserializing payloads\n   */\n  dataConverter?: DataConverter;\n\n  /**\n   * Identity to report to the server\n   *\n   * @default `${process.pid}@${os.hostname()}`\n   */\n  identity?: string;\n\n  /**\n   * Connection to use to communicate with the server.\n   *\n   * By default, connects to localhost.\n   *\n   * Connections are expensive to construct and should be reused.\n   */\n  connection?: ConnectionLike;\n\n  /**\n   * Server namespace\n   *\n   * @default default\n   */\n  namespace?: string;\n}\n\nexport type WithDefaults<Options extends BaseClientOptions> = //\n  Required<Omit<Options, 'connection'>> & Pick<Options, 'connection'>;\n\nexport type LoadedWithDefaults<Options extends BaseClientOptions> = //\n  WithDefaults<Options> & {\n    loadedDataConverter: LoadedDataConverter;\n  };\n\nexport function defaultBaseClientOptions(): WithDefaults<BaseClientOptions> {\n  return {\n    dataConverter: {},\n    identity: `${process.pid}@${os.hostname()}`,\n    namespace: 'default',\n  };\n}\n\nexport class BaseClient {\n  /**\n   * The underlying {@link Connection | connection} or {@link NativeConnection | native connection} used by this client.\n   *\n   * Clients are cheap to create, but connections are expensive. Where it makes sense,\n   * a single connection may and should be reused by multiple `Client`s.\n   */\n  public readonly connection: ConnectionLike;\n\n  private readonly loadedDataConverter: LoadedDataConverter;\n\n  protected constructor(options?: BaseClientOptions) {\n    this.connection = options?.connection ?? Connection.lazy();\n    const dataConverter = options?.dataConverter ?? {};\n    this.loadedDataConverter = isLoadedDataConverter(dataConverter) ? dataConverter : loadDataConverter(dataConverter);\n  }\n\n  /**\n   * Set a deadline for any service requests executed in `fn`'s scope.\n   *\n   * The deadline is a point in time after which any pending gRPC request will be considered as failed;\n   * this will locally result in the request call throwing a {@link _grpc.ServiceError|ServiceError}\n   * with code {@link _grpc.status.DEADLINE_EXCEEDED|DEADLINE_EXCEEDED}; see {@link isGrpcDeadlineError}.\n   *\n   * It is stronly recommended to explicitly set deadlines. If no deadline is set, then it is\n   * possible for the client to end up waiting forever for a response.\n   *\n   * This method is only a convenience wrapper around {@link Connection.withDeadline}.\n   *\n   * @param deadline a point in time after which the request will be considered as failed; either a\n   *                 Date object, or a number of milliseconds since the Unix epoch (UTC).\n   * @returns the value returned from `fn`\n   *\n   * @see https://grpc.io/docs/guides/deadlines/\n   */\n  public async withDeadline<R>(deadline: number | Date, fn: () => Promise<R>): Promise<R> {\n    return await this.connection.withDeadline(deadline, fn);\n  }\n\n  /**\n   * Set an {@link AbortSignal} that, when aborted, cancels any ongoing service requests executed in\n   * `fn`'s scope. This will locally result in the request call throwing a {@link _grpc.ServiceError|ServiceError}\n   * with code {@link _grpc.status.CANCELLED|CANCELLED}; see {@link isGrpcCancelledError}.\n   *\n   * This method is only a convenience wrapper around {@link Connection.withAbortSignal}.\n   *\n   * @returns value returned from `fn`\n   *\n   * @see https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal\n   */\n  async withAbortSignal<R>(abortSignal: AbortSignal, fn: () => Promise<R>): Promise<R> {\n    return await this.connection.withAbortSignal(abortSignal, fn);\n  }\n\n  /**\n   * Set metadata for any service requests executed in `fn`'s scope.\n   *\n   * This method is only a convenience wrapper around {@link Connection.withMetadata}.\n   *\n   * @returns returned value of `fn`\n   */\n  public async withMetadata<R>(metadata: Metadata, fn: () => Promise<R>): Promise<R> {\n    return await this.connection.withMetadata(metadata, fn);\n  }\n\n  protected get dataConverter(): LoadedDataConverter {\n    return this.loadedDataConverter;\n  }\n}\n","import { decode, encode } from '../encoding';\nimport { ValueError } from '../errors';\nimport type { Payload } from '../interfaces';\nimport type { SearchAttributes, SearchAttributePair, SearchAttributeUpdatePair } from '../search-attributes';\nimport {\n  TypedSearchAttributes,\n  SearchAttributeType,\n  isValidValueForType,\n  TypedSearchAttributeValue,\n  TypedSearchAttributeUpdateValue,\n} from '../search-attributes';\nimport type { PayloadConverter } from './payload-converter';\nimport { JsonPayloadConverter, mapFromPayloads, mapToPayloads } from './payload-converter';\n\n/**\n * Converts Search Attribute values using JsonPayloadConverter\n */\nexport class SearchAttributePayloadConverter implements PayloadConverter {\n  jsonConverter = new JsonPayloadConverter();\n  validNonDateTypes = ['string', 'number', 'boolean'];\n\n  public toPayload(values: unknown): Payload {\n    if (!Array.isArray(values)) {\n      throw new ValueError(`SearchAttribute value must be an array`);\n    }\n\n    if (values.length > 0) {\n      const firstValue = values[0];\n      const firstType = typeof firstValue;\n      if (firstType === 'object') {\n        for (const [idx, value] of values.entries()) {\n          if (!(value instanceof Date)) {\n            throw new ValueError(\n              `SearchAttribute values must arrays of strings, numbers, booleans, or Dates. The value ${value} at index ${idx} is of type ${typeof value}`\n            );\n          }\n        }\n      } else {\n        if (!this.validNonDateTypes.includes(firstType)) {\n          throw new ValueError(`SearchAttribute array values must be: string | number | boolean | Date`);\n        }\n\n        for (const [idx, value] of values.entries()) {\n          if (typeof value !== firstType) {\n            throw new ValueError(\n              `All SearchAttribute array values must be of the same type. The first value ${firstValue} of type ${firstType} doesn't match value ${value} of type ${typeof value} at index ${idx}`\n            );\n          }\n        }\n      }\n    }\n\n    // JSON.stringify takes care of converting Dates to ISO strings\n    const ret = this.jsonConverter.toPayload(values);\n    if (ret === undefined) {\n      throw new ValueError('Could not convert search attributes to payloads');\n    }\n    return ret;\n  }\n\n  /**\n   * Datetime Search Attribute values are converted to `Date`s\n   */\n  public fromPayload<T>(payload: Payload): T {\n    if (payload.metadata == null) {\n      throw new ValueError('Missing payload metadata');\n    }\n\n    const value = this.jsonConverter.fromPayload(payload);\n    let arrayWrappedValue = Array.isArray(value) ? value : [value];\n    const searchAttributeType = payload.metadata.type ? decode(payload.metadata.type) : undefined;\n    if (searchAttributeType === 'Datetime') {\n      arrayWrappedValue = arrayWrappedValue.map((dateString) => new Date(dateString));\n    }\n    return arrayWrappedValue as unknown as T;\n  }\n}\n\nexport const searchAttributePayloadConverter = new SearchAttributePayloadConverter();\n\nexport class TypedSearchAttributePayloadConverter implements PayloadConverter {\n  jsonConverter = new JsonPayloadConverter();\n\n  public toPayload<T>(attr: T): Payload {\n    if (!(attr instanceof TypedSearchAttributeValue || attr instanceof TypedSearchAttributeUpdateValue)) {\n      throw new ValueError(\n        `Expect input to be instance of TypedSearchAttributeValue or TypedSearchAttributeUpdateValue, got: ${JSON.stringify(\n          attr\n        )}`\n      );\n    }\n\n    // We check for deletion as well as regular typed search attributes.\n    if (attr.value !== null && !isValidValueForType(attr.type, attr.value)) {\n      throw new ValueError(`Invalid search attribute value ${attr.value} for given type ${attr.type}`);\n    }\n\n    // For server search attributes to work properly, we cannot set the metadata\n    // type when we set null\n    if (attr.value === null) {\n      const payload = this.jsonConverter.toPayload(attr.value);\n      if (payload === undefined) {\n        throw new ValueError('Could not convert typed search attribute to payload');\n      }\n      return payload;\n    }\n\n    // JSON.stringify takes care of converting Dates to ISO strings\n    const payload = this.jsonConverter.toPayload(attr.value);\n    if (payload === undefined) {\n      throw new ValueError('Could not convert typed search attribute to payload');\n    }\n\n    // Note: this shouldn't be the case but the compiler complains without this check.\n    if (payload.metadata == null) {\n      throw new ValueError('Missing payload metadata');\n    }\n    // Add encoded type of search attribute to metatdata\n    payload.metadata['type'] = encode(TypedSearchAttributes.toMetadataType(attr.type));\n    return payload;\n  }\n\n  // Note: type casting undefined values is not clear to caller.\n  // We can't change the typing of the method to return undefined, it's not allowed by the interface.\n  public fromPayload<T>(payload: Payload): T {\n    if (payload.metadata == null) {\n      throw new ValueError('Missing payload metadata');\n    }\n\n    // If no 'type' metadata field or no given value, we skip.\n    if (payload.metadata.type == null) {\n      return undefined as T;\n    }\n    const type = TypedSearchAttributes.toSearchAttributeType(decode(payload.metadata.type));\n    // Unrecognized metadata type (sanity check).\n    if (type === undefined) {\n      return undefined as T;\n    }\n\n    let value = this.jsonConverter.fromPayload(payload);\n\n    // Handle legacy values without KEYWORD_LIST type.\n    if (type !== SearchAttributeType.KEYWORD_LIST && Array.isArray(value)) {\n      // Cannot have an array with multiple values for non-KEYWORD_LIST type.\n      if (value.length > 1) {\n        return undefined as T;\n      }\n      // Unpack single value array.\n      value = value[0];\n    }\n    if (type === SearchAttributeType.DATETIME && value) {\n      value = new Date(value as string);\n    }\n    // Check if the value is a valid for the given type. If not, skip.\n    if (!isValidValueForType(type, value)) {\n      return undefined as T;\n    }\n    return new TypedSearchAttributeValue(type, value) as T;\n  }\n}\n\nexport const typedSearchAttributePayloadConverter = new TypedSearchAttributePayloadConverter();\n\n// If both params are provided, conflicting keys will be overwritten by typedSearchAttributes.\nexport function encodeUnifiedSearchAttributes(\n  searchAttributes?: SearchAttributes,\n  typedSearchAttributes?: TypedSearchAttributes | SearchAttributeUpdatePair[]\n): Record<string, Payload> {\n  return {\n    ...(searchAttributes ? mapToPayloads(searchAttributePayloadConverter, searchAttributes) : {}),\n    ...(typedSearchAttributes\n      ? mapToPayloads<string, TypedSearchAttributeUpdateValue<SearchAttributeType>>(\n          typedSearchAttributePayloadConverter,\n          Object.fromEntries(\n            (Array.isArray(typedSearchAttributes) ? typedSearchAttributes : typedSearchAttributes.getAll()).map(\n              (pair) => {\n                return [pair.key.name, new TypedSearchAttributeUpdateValue(pair.key.type, pair.value)];\n              }\n            )\n          )\n        )\n      : {}),\n  };\n}\n\nexport function decodeSearchAttributes(indexedFields: Record<string, Payload> | undefined | null): SearchAttributes {\n  if (!indexedFields) return {};\n  return Object.fromEntries(\n    Object.entries(mapFromPayloads(searchAttributePayloadConverter, indexedFields) as SearchAttributes).filter(\n      ([_, v]) => v && v.length > 0\n    ) // Filter out empty arrays returned by pre 1.18 servers\n  );\n}\n\nexport function decodeTypedSearchAttributes(\n  indexedFields: Record<string, Payload> | undefined | null\n): TypedSearchAttributes {\n  return new TypedSearchAttributes(\n    Object.entries(\n      mapFromPayloads<string, TypedSearchAttributeValue<SearchAttributeType> | undefined>(\n        typedSearchAttributePayloadConverter,\n        indexedFields\n      ) ?? {}\n    ).reduce<SearchAttributePair[]>((acc, [k, attr]) => {\n      // Filter out undefined values from converter.\n      if (!attr) {\n        return acc;\n      }\n      const key = { name: k, type: attr.type };\n      // Ensure is valid pair.\n      if (isValidValueForType(key.type, attr.value)) {\n        acc.push({ key, value: attr.value } as SearchAttributePair);\n      }\n      return acc;\n    }, [])\n  );\n}\n","import type { ServiceError as GrpcServiceError } from '@grpc/grpc-js';\nimport { status as grpcStatus } from '@grpc/grpc-js';\nimport type { LoadedDataConverter } from '@temporalio/common';\nimport { decodePriority, NamespaceNotFoundError } from '@temporalio/common';\nimport {\n  decodeSearchAttributes,\n  decodeTypedSearchAttributes,\n  searchAttributePayloadConverter,\n} from '@temporalio/common/lib/converter/payload-search-attributes';\nimport type { Replace } from '@temporalio/common/lib/type-helpers';\nimport { optionalTsToDate, requiredTsToDate } from '@temporalio/common/lib/time';\nimport { decodeMapFromPayloads } from '@temporalio/common/lib/internal-non-workflow/codec-helpers';\nimport { temporal, google } from '@temporalio/proto';\nimport type {\n  CountWorkflowExecution,\n  RawWorkflowExecutionInfo,\n  WorkflowExecutionInfo,\n  WorkflowExecutionStatusName,\n} from './types';\n\nfunction workflowStatusCodeToName(code: temporal.api.enums.v1.WorkflowExecutionStatus): WorkflowExecutionStatusName {\n  return workflowStatusCodeToNameInternal(code) ?? 'UNKNOWN';\n}\n\n/**\n * Intentionally leave out `default` branch to get compilation errors when new values are added\n */\nfunction workflowStatusCodeToNameInternal(\n  code: temporal.api.enums.v1.WorkflowExecutionStatus\n): WorkflowExecutionStatusName {\n  switch (code) {\n    case temporal.api.enums.v1.WorkflowExecutionStatus.WORKFLOW_EXECUTION_STATUS_UNSPECIFIED:\n      return 'UNSPECIFIED';\n    case temporal.api.enums.v1.WorkflowExecutionStatus.WORKFLOW_EXECUTION_STATUS_RUNNING:\n      return 'RUNNING';\n    case temporal.api.enums.v1.WorkflowExecutionStatus.WORKFLOW_EXECUTION_STATUS_FAILED:\n      return 'FAILED';\n    case temporal.api.enums.v1.WorkflowExecutionStatus.WORKFLOW_EXECUTION_STATUS_TIMED_OUT:\n      return 'TIMED_OUT';\n    case temporal.api.enums.v1.WorkflowExecutionStatus.WORKFLOW_EXECUTION_STATUS_CANCELED:\n      return 'CANCELLED';\n    case temporal.api.enums.v1.WorkflowExecutionStatus.WORKFLOW_EXECUTION_STATUS_TERMINATED:\n      return 'TERMINATED';\n    case temporal.api.enums.v1.WorkflowExecutionStatus.WORKFLOW_EXECUTION_STATUS_COMPLETED:\n      return 'COMPLETED';\n    case temporal.api.enums.v1.WorkflowExecutionStatus.WORKFLOW_EXECUTION_STATUS_CONTINUED_AS_NEW:\n      return 'CONTINUED_AS_NEW';\n    case temporal.api.enums.v1.WorkflowExecutionStatus.WORKFLOW_EXECUTION_STATUS_PAUSED:\n      return 'PAUSED';\n  }\n}\n\nexport async function executionInfoFromRaw<T>(\n  raw: RawWorkflowExecutionInfo,\n  dataConverter: LoadedDataConverter,\n  rawDataToEmbed: T,\n  namespace: string\n): Promise<Replace<WorkflowExecutionInfo, { raw: T }>> {\n  const workflowId = raw.execution!.workflowId!;\n  return {\n    type: raw.type!.name!,\n    workflowId,\n    runId: raw.execution!.runId!,\n    taskQueue: raw.taskQueue!,\n    status: {\n      code: raw.status!,\n      name: workflowStatusCodeToName(raw.status!),\n    },\n    // Safe to convert to number, max history length is 50k, which is much less than Number.MAX_SAFE_INTEGER\n    historyLength: raw.historyLength!.toNumber(),\n    // Exact truncation for multi-petabyte histories\n    // historySize === 0 means WFT was generated by pre-1.20.0 server, and the history size is unknown\n    historySize: raw.historySizeBytes?.toNumber() || undefined,\n    startTime: requiredTsToDate(raw.startTime, 'startTime'),\n    executionTime: optionalTsToDate(raw.executionTime),\n    closeTime: optionalTsToDate(raw.closeTime),\n    memo: await decodeMapFromPayloads(dataConverter, raw.memo?.fields, {\n      type: 'workflow',\n      namespace,\n      workflowId,\n    }),\n    searchAttributes: decodeSearchAttributes(raw.searchAttributes?.indexedFields),\n    typedSearchAttributes: decodeTypedSearchAttributes(raw.searchAttributes?.indexedFields),\n    parentExecution: raw.parentExecution\n      ? {\n          workflowId: raw.parentExecution.workflowId!,\n          runId: raw.parentExecution.runId!,\n        }\n      : undefined,\n    rootExecution: raw.rootExecution\n      ? {\n          workflowId: raw.rootExecution.workflowId!,\n          runId: raw.rootExecution.runId!,\n        }\n      : undefined,\n    raw: rawDataToEmbed,\n    priority: decodePriority(raw.priority),\n  };\n}\n\nexport function decodeCountWorkflowExecutionsResponse(\n  raw: temporal.api.workflowservice.v1.ICountWorkflowExecutionsResponse\n): CountWorkflowExecution {\n  return {\n    // Note: lossy conversion of Long to number\n    count: raw.count!.toNumber(),\n    groups: raw.groups!.map((group) => {\n      return {\n        // Note: lossy conversion of Long to number\n        count: group.count!.toNumber(),\n        groupValues: group.groupValues!.map((value) => searchAttributePayloadConverter.fromPayload(value)),\n      };\n    }),\n  };\n}\n\nexport type ErrorDetailsName = `temporal.api.errordetails.v1.${keyof typeof temporal.api.errordetails.v1}`;\nexport type FailureName = `temporal.api.failure.v1.${keyof typeof temporal.api.failure.v1}`;\n\n/**\n * If the error type can be determined based on embedded grpc error details,\n * then rethrow the appropriate TypeScript error. Otherwise do nothing.\n *\n * This function should be used before falling back to generic error handling\n * based on grpc error code. Very few error types are currently supported, but\n * this function will be expanded over time as more server error types are added.\n */\nexport function rethrowKnownErrorTypes(err: GrpcServiceError): void {\n  // We really don't expect multiple error details, but this really is an array, so just in case...\n  for (const entry of getGrpcStatusDetails(err) ?? []) {\n    if (!entry.type_url || !entry.value) continue;\n    const type = trimGrpcTypeUrl(entry.type_url) as ErrorDetailsName;\n\n    switch (type) {\n      case 'temporal.api.errordetails.v1.NamespaceNotFoundFailure': {\n        const { namespace } = temporal.api.errordetails.v1.NamespaceNotFoundFailure.decode(entry.value);\n        throw new NamespaceNotFoundError(namespace);\n      }\n      case 'temporal.api.errordetails.v1.MultiOperationExecutionFailure': {\n        // MultiOperationExecutionFailure contains error statuses for multiple\n        // operations. A MultiOperationExecutionAborted error status means that\n        // the corresponding operation was aborted due to an error in one of the\n        // other operations. We rethrow the first operation error that is not\n        // MultiOperationExecutionAborted.\n        const { statuses } = temporal.api.errordetails.v1.MultiOperationExecutionFailure.decode(entry.value);\n        for (const status of statuses) {\n          const detail = status.details?.[0];\n          const statusType = trimGrpcTypeUrl(detail?.type_url) as FailureName | '';\n          if (\n            statusType === 'temporal.api.failure.v1.MultiOperationExecutionAborted' ||\n            status.code === grpcStatus.OK\n          ) {\n            continue;\n          }\n          err.message = status.message ?? err.message;\n          err.code = status.code || err.code;\n          err.details = detail?.value?.toString() || err.details;\n          throw err;\n        }\n      }\n    }\n  }\n}\n\nexport function getGrpcStatusDetails(err: GrpcServiceError): google.rpc.Status['details'] | undefined {\n  const statusBuffer = err.metadata.get('grpc-status-details-bin')?.[0];\n  if (!statusBuffer || typeof statusBuffer === 'string') {\n    return undefined;\n  }\n  return google.rpc.Status.decode(statusBuffer).details;\n}\n\n/**\n * Try to extract the runId field from a gRPC ALREADY_EXISTS error's details containing\n * NexusOperationExecutionAlreadyStartedFailure. Returns undefined if the error details\n * do not include this failure type or cannot be decoded.\n */\nexport function extractNexusOperationAlreadyStartedRunId(err: GrpcServiceError): string | undefined {\n  try {\n    for (const entry of getGrpcStatusDetails(err) ?? []) {\n      if (!entry.type_url || !entry.value) continue;\n      const type = entry.type_url.replace(/^type.googleapis.com\\//, '');\n      if (type !== 'temporal.api.errordetails.v1.NexusOperationExecutionAlreadyStartedFailure') continue;\n\n      const details = temporal.api.errordetails.v1.NexusOperationExecutionAlreadyStartedFailure.decode(entry.value);\n      return details.runId;\n    }\n  } catch {\n    // ignore\n  }\n  return undefined;\n}\n\nexport function trimGrpcTypeUrl(type_url: string | null | undefined): string {\n  return type_url?.replace(/^type.googleapis.com\\//, '') || '';\n}\n","import { status as grpcStatus } from '@grpc/grpc-js';\nimport type { ActivitySerializationContext, PayloadTypeInfo, StorageDriverTargetInfo } from '@temporalio/common';\nimport { ensureTemporalFailure } from '@temporalio/common';\nimport {\n  encodeErrorToFailure,\n  encodeToPayloadsWithContext,\n  extstoreStoreOptions,\n  visit,\n  walkRecordActivityTaskHeartbeatByIdRequest,\n  walkRecordActivityTaskHeartbeatRequest,\n  walkRespondActivityTaskCanceledByIdRequest,\n  walkRespondActivityTaskCanceledRequest,\n  walkRespondActivityTaskCompletedByIdRequest,\n  walkRespondActivityTaskCompletedRequest,\n  walkRespondActivityTaskFailedByIdRequest,\n  walkRespondActivityTaskFailedRequest,\n} from '@temporalio/common/lib/internal-non-workflow';\nimport { filterNullAndUndefined } from '@temporalio/common/lib/internal-workflow';\nimport type { temporal } from '@temporalio/proto';\nimport type { BaseClientOptions, LoadedWithDefaults, WithDefaults } from './base-client';\nimport { BaseClient, defaultBaseClientOptions } from './base-client';\nimport {\n  isGrpcServiceError,\n  ActivityNotFoundError,\n  ActivityCompletionError,\n  ActivityCancelledError,\n  ActivityResetError,\n  ActivityPausedError,\n} from './errors';\nimport type { WorkflowService } from './types';\nimport { rethrowKnownErrorTypes } from './helpers';\n\n/**\n * Options used to configure {@link AsyncCompletionClient}\n */\nexport type AsyncCompletionClientOptions = BaseClientOptions;\n\nexport type LoadedAsyncCompletionClientOptions = LoadedWithDefaults<AsyncCompletionClientOptions>;\n\nfunction defaultAsyncCompletionClientOptions(): WithDefaults<AsyncCompletionClientOptions> {\n  return defaultBaseClientOptions();\n}\n\n/**\n * Options for async Activity completion, failure, cancellation, and heartbeat operations.\n */\nexport interface AsyncCompletionOperationOptions {\n  /**\n   * Serialization context to use when converting payloads and failures for task-token operations.\n   *\n   * By-ID operations infer their Activity serialization context from the supplied IDs.\n   *\n   * @experimental Serialization context is an experimental feature and may change.\n   */\n  serializationContext?: ActivitySerializationContext;\n}\n\n/**\n * Options for successfully completing an Activity asynchronously.\n *\n * @experimental\n */\nexport interface AsyncCompletionCompleteOptions {\n  /**\n   * Type information used to encode the Activity result.\n   *\n   * @experimental\n   */\n  typeInfo?: Pick<PayloadTypeInfo, 'outputType'>;\n}\n\n/**\n * A mostly unique Activity identifier. If {@link workflowId} is set, it refers to a Workflow Activity.\n * If {@link workflowId} is unset, it refers to a Standalone Activity. In both cases, it can optionally contain\n * {@link runId}.\n *\n * Activity IDs may be reused in a single Workflow run as long as a previous Activity with the same ID has completed\n * already. Standalone Activity IDs may be reused if `idReusePolicy` is set in Activity options when starting a new\n * Activity, but a combination of Activity ID and Activity run ID is unique.\n */\nexport interface FullActivityId {\n  /**\n   * ID of the Workflow that started the Activity. Unset for Standalone Activities.\n   */\n  workflowId?: string;\n  /**\n   * If {@link workflowId} is set, this optionally specifies the Workflow run ID in order to differentiate between\n   * Workflow runs with the same Workflow ID. If {@link workflowId} is unset, this optionally specifies the\n   * Activity run ID in order to differentiate between Standalone Activity runs with the same Activity ID.\n   *\n   * If {@link runId} is unset, then the {@link FullActivityId} object refers to the latest run of the Workflow or\n   * the Standalone Activity with the specified ID.\n   */\n  runId?: string;\n  /**\n   * ID of the Activity.\n   */\n  activityId: string;\n}\n\nfunction activityContextFromFullActivityId(\n  namespace: string,\n  fullActivityId: FullActivityId\n): ActivitySerializationContext {\n  return {\n    type: 'activity',\n    namespace,\n    workflowId: fullActivityId.workflowId,\n    activityId: fullActivityId.activityId,\n    isLocal: false,\n  };\n}\n\n/**\n * A client for asynchronous completion and heartbeating of Activities.\n *\n * Typically this client should not be instantiated directly, instead create the high level {@link Client} and use\n * {@link Client.activity} to complete async activities.\n */\nexport class AsyncCompletionClient extends BaseClient {\n  public readonly options: LoadedAsyncCompletionClientOptions;\n\n  constructor(options?: AsyncCompletionClientOptions) {\n    super(options);\n    this.options = {\n      ...defaultAsyncCompletionClientOptions(),\n      ...filterNullAndUndefined(options ?? {}),\n      loadedDataConverter: this.dataConverter,\n    };\n  }\n\n  /**\n   * Raw gRPC access to the Temporal service.\n   *\n   * **NOTE**: The namespace provided in {@link options} is **not** automatically set on requests made via this service\n   * object.\n   */\n  get workflowService(): WorkflowService {\n    return this.connection.workflowService;\n  }\n\n  protected serializationContextFor(\n    taskTokenOrFullActivityId: Uint8Array | FullActivityId,\n    options?: AsyncCompletionOperationOptions\n  ): ActivitySerializationContext | undefined {\n    return taskTokenOrFullActivityId instanceof Uint8Array\n      ? options?.serializationContext\n      : activityContextFromFullActivityId(this.options.namespace, taskTokenOrFullActivityId);\n  }\n\n  /**\n   * Storage target for offloaded payloads. By-ID operations carry the Activity ID; by-token operations\n   * only know the namespace (the token is opaque), so the target is namespace-scoped and the driver falls\n   * back to content-addressed naming.\n   */\n  protected storageTargetFor(taskTokenOrFullActivityId: Uint8Array | FullActivityId): StorageDriverTargetInfo {\n    const namespace = this.options.namespace;\n    if (taskTokenOrFullActivityId instanceof Uint8Array) {\n      return { kind: 'workflow', namespace };\n    }\n    const { workflowId, runId, activityId } = taskTokenOrFullActivityId;\n    if (workflowId != null) {\n      return { kind: 'workflow', namespace, id: workflowId, ...(runId != null ? { runId } : {}) };\n    }\n    return { kind: 'activity', namespace, id: activityId, ...(runId != null ? { runId } : {}) };\n  }\n\n  /**\n   * Transforms grpc errors into well defined TS errors.\n   */\n  protected handleError(err: unknown): never {\n    if (isGrpcServiceError(err)) {\n      rethrowKnownErrorTypes(err);\n\n      if (err.code === grpcStatus.NOT_FOUND) {\n        throw new ActivityNotFoundError('Not found');\n      }\n\n      throw new ActivityCompletionError(err.details || err.message);\n    }\n    throw new ActivityCompletionError('Unexpected failure');\n  }\n\n  /**\n   * Complete an Activity by task token\n   */\n  async complete(\n    taskToken: Uint8Array,\n    result: unknown,\n    options?: AsyncCompletionCompleteOptions & AsyncCompletionOperationOptions\n  ): Promise<void>;\n  /**\n   * Complete an Activity by full ID\n   */\n  async complete(\n    fullActivityId: FullActivityId,\n    result: unknown,\n    options?: AsyncCompletionCompleteOptions\n  ): Promise<void>;\n\n  async complete(\n    taskTokenOrFullActivityId: Uint8Array | FullActivityId,\n    result: unknown,\n    options?: AsyncCompletionCompleteOptions & AsyncCompletionOperationOptions\n  ): Promise<void> {\n    const outputType = options?.typeInfo?.outputType;\n    const payloads = await encodeToPayloadsWithContext(\n      this.dataConverter,\n      this.serializationContextFor(taskTokenOrFullActivityId, options),\n      [result],\n      outputType === undefined ? undefined : [outputType]\n    );\n    const externalStorage = this.dataConverter.externalStorage;\n    try {\n      if (taskTokenOrFullActivityId instanceof Uint8Array) {\n        const req: temporal.api.workflowservice.v1.IRespondActivityTaskCompletedRequest = {\n          identity: this.options.identity,\n          namespace: this.options.namespace,\n          taskToken: taskTokenOrFullActivityId,\n          result: { payloads },\n        };\n        if (externalStorage) {\n          await visit(\n            req,\n            walkRespondActivityTaskCompletedRequest,\n            extstoreStoreOptions(externalStorage, { initialTarget: this.storageTargetFor(taskTokenOrFullActivityId) })\n          );\n        }\n        await this.workflowService.respondActivityTaskCompleted(req);\n      } else {\n        const req: temporal.api.workflowservice.v1.IRespondActivityTaskCompletedByIdRequest = {\n          identity: this.options.identity,\n          namespace: this.options.namespace,\n          ...taskTokenOrFullActivityId,\n          result: { payloads },\n        };\n        if (externalStorage) {\n          await visit(\n            req,\n            walkRespondActivityTaskCompletedByIdRequest,\n            extstoreStoreOptions(externalStorage, { initialTarget: this.storageTargetFor(taskTokenOrFullActivityId) })\n          );\n        }\n        await this.workflowService.respondActivityTaskCompletedById(req);\n      }\n    } catch (err) {\n      this.handleError(err);\n    }\n  }\n\n  /**\n   * Fail an Activity by task token\n   */\n  async fail(taskToken: Uint8Array, err: unknown, options?: AsyncCompletionOperationOptions): Promise<void>;\n  /**\n   * Fail an Activity by full ID\n   */\n  async fail(fullActivityId: FullActivityId, err: unknown): Promise<void>;\n\n  async fail(\n    taskTokenOrFullActivityId: Uint8Array | FullActivityId,\n    err: unknown,\n    options?: AsyncCompletionOperationOptions\n  ): Promise<void> {\n    const failure = await encodeErrorToFailure(\n      this.dataConverter,\n      ensureTemporalFailure(err),\n      this.serializationContextFor(taskTokenOrFullActivityId, options)\n    );\n    const externalStorage = this.dataConverter.externalStorage;\n    try {\n      if (taskTokenOrFullActivityId instanceof Uint8Array) {\n        const req: temporal.api.workflowservice.v1.IRespondActivityTaskFailedRequest = {\n          identity: this.options.identity,\n          namespace: this.options.namespace,\n          taskToken: taskTokenOrFullActivityId,\n          failure,\n        };\n        if (externalStorage) {\n          await visit(\n            req,\n            walkRespondActivityTaskFailedRequest,\n            extstoreStoreOptions(externalStorage, { initialTarget: this.storageTargetFor(taskTokenOrFullActivityId) })\n          );\n        }\n        await this.workflowService.respondActivityTaskFailed(req);\n      } else {\n        const req: temporal.api.workflowservice.v1.IRespondActivityTaskFailedByIdRequest = {\n          identity: this.options.identity,\n          namespace: this.options.namespace,\n          ...taskTokenOrFullActivityId,\n          failure,\n        };\n        if (externalStorage) {\n          await visit(\n            req,\n            walkRespondActivityTaskFailedByIdRequest,\n            extstoreStoreOptions(externalStorage, { initialTarget: this.storageTargetFor(taskTokenOrFullActivityId) })\n          );\n        }\n        await this.workflowService.respondActivityTaskFailedById(req);\n      }\n    } catch (err) {\n      this.handleError(err);\n    }\n  }\n\n  /**\n   * Report Activity cancellation by task token\n   */\n  reportCancellation(\n    taskToken: Uint8Array,\n    details?: unknown,\n    options?: AsyncCompletionOperationOptions\n  ): Promise<void>;\n  /**\n   * Report Activity cancellation by full ID\n   */\n  reportCancellation(fullActivityId: FullActivityId, details?: unknown): Promise<void>;\n\n  async reportCancellation(\n    taskTokenOrFullActivityId: Uint8Array | FullActivityId,\n    details?: unknown,\n    options?: AsyncCompletionOperationOptions\n  ): Promise<void> {\n    const payloads = await encodeToPayloadsWithContext(\n      this.dataConverter,\n      this.serializationContextFor(taskTokenOrFullActivityId, options),\n      [details]\n    );\n    const externalStorage = this.dataConverter.externalStorage;\n    try {\n      if (taskTokenOrFullActivityId instanceof Uint8Array) {\n        const req: temporal.api.workflowservice.v1.IRespondActivityTaskCanceledRequest = {\n          identity: this.options.identity,\n          namespace: this.options.namespace,\n          taskToken: taskTokenOrFullActivityId,\n          details: { payloads },\n        };\n        if (externalStorage) {\n          await visit(\n            req,\n            walkRespondActivityTaskCanceledRequest,\n            extstoreStoreOptions(externalStorage, { initialTarget: this.storageTargetFor(taskTokenOrFullActivityId) })\n          );\n        }\n        await this.workflowService.respondActivityTaskCanceled(req);\n      } else {\n        const req: temporal.api.workflowservice.v1.IRespondActivityTaskCanceledByIdRequest = {\n          identity: this.options.identity,\n          namespace: this.options.namespace,\n          ...taskTokenOrFullActivityId,\n          details: { payloads },\n        };\n        if (externalStorage) {\n          await visit(\n            req,\n            walkRespondActivityTaskCanceledByIdRequest,\n            extstoreStoreOptions(externalStorage, { initialTarget: this.storageTargetFor(taskTokenOrFullActivityId) })\n          );\n        }\n        await this.workflowService.respondActivityTaskCanceledById(req);\n      }\n    } catch (err) {\n      this.handleError(err);\n    }\n  }\n\n  /**\n   * Send Activity heartbeat by task token\n   */\n  heartbeat(taskToken: Uint8Array, details?: unknown, options?: AsyncCompletionOperationOptions): Promise<void>;\n  /**\n   * Send Activity heartbeat by full ID\n   */\n  heartbeat(fullActivityId: FullActivityId, details?: unknown): Promise<void>;\n\n  async heartbeat(\n    taskTokenOrFullActivityId: Uint8Array | FullActivityId,\n    details?: unknown,\n    options?: AsyncCompletionOperationOptions\n  ): Promise<void> {\n    const payloads = await encodeToPayloadsWithContext(\n      this.dataConverter,\n      this.serializationContextFor(taskTokenOrFullActivityId, options),\n      [details]\n    );\n    let cancelRequested = false;\n    let paused = false;\n    let reset = false;\n    const externalStorage = this.dataConverter.externalStorage;\n    try {\n      if (taskTokenOrFullActivityId instanceof Uint8Array) {\n        const req: temporal.api.workflowservice.v1.IRecordActivityTaskHeartbeatRequest = {\n          identity: this.options.identity,\n          namespace: this.options.namespace,\n          taskToken: taskTokenOrFullActivityId,\n          details: { payloads },\n        };\n        if (externalStorage) {\n          await visit(\n            req,\n            walkRecordActivityTaskHeartbeatRequest,\n            extstoreStoreOptions(externalStorage, { initialTarget: this.storageTargetFor(taskTokenOrFullActivityId) })\n          );\n        }\n        const response = await this.workflowService.recordActivityTaskHeartbeat(req);\n        cancelRequested = !!response.cancelRequested;\n        paused = !!response.activityPaused;\n        reset = !!response.activityReset;\n      } else {\n        const req: temporal.api.workflowservice.v1.IRecordActivityTaskHeartbeatByIdRequest = {\n          identity: this.options.identity,\n          namespace: this.options.namespace,\n          ...taskTokenOrFullActivityId,\n          details: { payloads },\n        };\n        if (externalStorage) {\n          await visit(\n            req,\n            walkRecordActivityTaskHeartbeatByIdRequest,\n            extstoreStoreOptions(externalStorage, { initialTarget: this.storageTargetFor(taskTokenOrFullActivityId) })\n          );\n        }\n        const response = await this.workflowService.recordActivityTaskHeartbeatById(req);\n        cancelRequested = !!response.cancelRequested;\n        paused = !!response.activityPaused;\n        reset = !!response.activityReset;\n      }\n    } catch (err) {\n      this.handleError(err);\n    }\n    // Note that it is possible for a heartbeat response to have multiple fields\n    // set as true (i.e. cancelled and pause).\n    if (cancelRequested) {\n      throw new ActivityCancelledError('cancelled');\n    } else if (reset) {\n      throw new ActivityResetError('reset');\n    } else if (paused) {\n      throw new ActivityPausedError('paused');\n    }\n  }\n}\n","import type { AnyFunc, OmitLastParam } from './type-helpers';\nimport type { Payload } from './interfaces';\n\n/**\n * Type of the next function for a given interceptor function\n *\n * Called from an interceptor to continue the interception chain\n */\nexport type Next<IF, FN extends keyof IF> = Required<IF>[FN] extends AnyFunc ? OmitLastParam<Required<IF>[FN]> : never;\n\n/** Headers are just a mapping of header name to Payload */\nexport type Headers = Record<string, Payload>;\n\ntype WrapNext = <F extends AnyFunc>(next: F) => F;\n\n/**\n * Shared implementation for interceptor chaining.\n *\n * The workflow package needs one small behavioral extension over the generic interceptor\n * semantics: every `next(...)` continuation it hands to workflow interceptors must first\n * restore the workflow random scope that was current when that continuation was created.\n *\n * We keep the chain-construction loop here as the single source of truth so ordering and\n * basic composition behavior cannot drift between the generic implementation used by client,\n * worker, activity, and nexus code and the workflow-specific implementation that decorates\n * `next(...)` at each boundary. The only behavior that varies between callers is the\n * `wrapNext` hook: most packages use the identity wrapper, while workflow code supplies a\n * wrapper that re-enters the captured workflow async-local random scope.\n */\nexport function composeInterceptorsWith<I, M extends keyof I>(\n  interceptors: I[],\n  method: M,\n  next: Next<I, M>,\n  wrapNext: WrapNext\n): Next<I, M> {\n  let composedNext: any = next;\n  for (let i = interceptors.length - 1; i >= 0; --i) {\n    const interceptor = interceptors[i];\n    if (interceptor?.[method] !== undefined) {\n      const prev = wrapNext(composedNext);\n      // We lose type safety here because Typescript can't deduce that interceptor[method] is a function that returns\n      // the same type as Next<I, M>\n      composedNext = ((input: any) => (interceptor[method] as any)(input, prev)) as any;\n    }\n  }\n  return composedNext;\n}\n\n/**\n * Compose all interceptor methods into a single function.\n *\n * Calling the composed function results in calling each of the provided interceptor, in order (from the first to\n * the last), followed by the original function provided as argument to `composeInterceptors()`.\n *\n * @param interceptors a list of interceptors\n * @param method the name of the interceptor method to compose\n * @param next the original function to be executed at the end of the interception chain\n */\n// ts-prune-ignore-next (imported via lib/interceptors)\nexport function composeInterceptors<I, M extends keyof I>(interceptors: I[], method: M, next: Next<I, M>): Next<I, M> {\n  return composeInterceptorsWith(interceptors, method, next, ((wrappedNext) => wrappedNext) as WrapNext);\n}\n","import type { temporal } from '@temporalio/proto';\nimport type { UpdateDefinition } from '@temporalio/common';\nimport type { WorkflowOptions, WorkflowUpdateOptions } from './workflow-options';\nimport type { ActivityOptions } from './activity-client';\nimport type { WorkflowHandle, WorkflowUpdateHandle } from './workflow-client';\nimport type { WorkflowUpdateStage } from './workflow-update-stage';\nimport type { WorkflowSignalInput } from './interceptors';\n\n/**\n * A symbol used to attach extra, SDK-internal options to the `WorkflowClient.start()` call.\n *\n * These are notably used by the Temporal Nexus helpers.\n *\n * @internal\n * @hidden\n */\nexport const InternalWorkflowStartOptionsSymbol = Symbol.for('__temporal_internal_client_workflow_start_options');\nexport interface InternalWorkflowStartOptions extends WorkflowOptions {\n  [InternalWorkflowStartOptionsSymbol]?: {\n    /**\n     * Request ID to be used for the workflow.\n     */\n    requestId?: string;\n\n    /**\n     * Callbacks to be called by the server when this workflow reaches a terminal state.\n     * If the workflow continues-as-new, these callbacks will be carried over to the new execution.\n     * Callback addresses must be whitelisted in the server's dynamic configuration.\n     */\n    completionCallbacks?: temporal.api.common.v1.ICallback[];\n\n    /**\n     * Links to be associated with the workflow.\n     */\n    links?: temporal.api.common.v1.ILink[];\n\n    /**\n     * Response link copied by the client from the start RPC's response: the `link` on a\n     * StartWorkflowExecutionResponse (populated by servers newer than 1.27), or the `signalLink` on a\n     * SignalWithStartWorkflowExecutionResponse (populated by servers that support CHASM signal\n     * response links, 1.31 and up). A given options object only ever flows through one of those RPCs,\n     * so at most one source can populate this; left unset otherwise.\n     */\n    responseLink?: temporal.api.common.v1.ILink;\n\n    /**\n     * Conflict options for when USE_EXISTING is specified.\n     *\n     * Used by the Nexus WorkflowRunOperations to attach to a callback to a running workflow.\n     */\n    onConflictOptions?: temporal.api.workflow.v1.IOnConflictOptions;\n  };\n}\n\n/**\n * A symbol used to attach extra, SDK-internal options to a `WorkflowHandle.startUpdate()` /\n * `executeUpdate()` call.\n *\n * Used by the Temporal Nexus helpers to attach a completion callback, request ID, and request links\n * onto the UpdateWorkflowExecution request, and to capture the response link the server returns.\n *\n * @internal\n * @hidden\n */\nexport const InternalWorkflowUpdateOptionsSymbol = Symbol.for('__temporal_internal_client_workflow_update_options');\nexport interface InternalWorkflowUpdateOptions {\n  [InternalWorkflowUpdateOptionsSymbol]?: {\n    /**\n     * Request ID used for server-side deduplication of the Update request.\n     */\n    requestId?: string;\n\n    /**\n     * Callbacks to be invoked by the server when the Update reaches a terminal state.\n     * Callback addresses must be whitelisted in the server's dynamic configuration.\n     */\n    completionCallbacks?: temporal.api.common.v1.ICallback[];\n\n    /**\n     * Links to be associated with the Update.\n     */\n    links?: temporal.api.common.v1.ILink[];\n\n    /**\n     * Response link copied by the client from the UpdateWorkflowExecutionResponse. On success it\n     * points at the Update Accepted event; on validation failure it may be a plain Workflow link.\n     * Only populated by servers that return an update response link; left unset otherwise.\n     */\n    responseLink?: temporal.api.common.v1.ILink;\n\n    /**\n     * Terminal outcome of the Update, copied by the client from the UpdateWorkflowExecutionResponse\n     * when the Update already reached a completed state (e.g. a retried request with the same update\n     * ID, or an Update that completes immediately). Left unset while the Update is only accepted.\n     */\n    outcome?: temporal.api.update.v1.IOutcome;\n  };\n}\n\n/**\n * A symbol used to attach extra, SDK-internal options to a `WorkflowHandle.signal()` call.\n *\n * Used by the Temporal Nexus helpers to forward request links onto the signal request\n * and to capture the response link returned on the SignalWorkflowExecutionResponse.\n *\n * @internal\n * @hidden\n */\nexport const InternalWorkflowSignalOptionsSymbol = Symbol.for('__temporal_internal_client_workflow_signal_options');\nexport interface InternalWorkflowSignalOptions {\n  [InternalWorkflowSignalOptionsSymbol]?: {\n    /**\n     * Links to be associated with the WorkflowExecutionSignaled event.\n     */\n    links?: temporal.api.common.v1.ILink[];\n\n    /**\n     * Response link copied by the client from the SignalWorkflowExecutionResponse.\n     * Only populated by servers that support CHASM signal response links (1.31 and up); left unset\n     * otherwise.\n     */\n    responseLink?: temporal.api.common.v1.ILink;\n  };\n}\n\n/**\n * The SDK-internal variant of {@link WorkflowSignalInput} that carries the\n * {@link InternalWorkflowSignalOptionsSymbol} payload used by the Temporal Nexus helpers to forward\n * request links and capture the response link. Kept off the public `WorkflowSignalInput` so the\n * symbol does not leak onto the interceptor surface.\n *\n * @internal\n * @hidden\n */\nexport type InternalWorkflowSignalInput = WorkflowSignalInput & InternalWorkflowSignalOptions;\n\n/**\n * The SDK-internal surface of a `WorkflowHandle` used by the Temporal Nexus helpers to send a Signal\n * while forwarding request links and capturing the response link the server returns.\n *\n * The Nexus helpers obtain a handle via `WorkflowClient.getHandle`, attach an\n * {@link InternalWorkflowSignalOptionsSymbol} payload carrying the request links, call\n * `handle.signal(...)`, and then read back the `responseLink` the signal handler wrote onto that\n * same payload. This keeps the link-forwarding plumbing off the public `WorkflowClient` surface.\n *\n * @internal\n * @hidden\n */\nexport type InternalWorkflowHandle = WorkflowHandle &\n  InternalWorkflowSignalOptions & {\n    /**\n     * A single, non-overloaded view of {@link WorkflowHandle.startUpdate} used by the Temporal Nexus\n     * helpers to start an Update-backed operation. The public `startUpdate` is overloaded to\n     * discriminate empty vs non-empty argument tuples, which a generic `Args extends any[]` satisfies\n     * neither of; this added call signature accepts the generic form and carries the\n     * {@link InternalWorkflowUpdateOptionsSymbol} payload (request ID, completion callbacks, links).\n     */\n    startUpdate<Ret, Args extends any[]>(\n      def: UpdateDefinition<Ret, Args> | string,\n      options: WorkflowUpdateOptions & {\n        args?: Args;\n        waitForStage: typeof WorkflowUpdateStage.ACCEPTED;\n      } & InternalWorkflowUpdateOptions\n    ): Promise<WorkflowUpdateHandle<Ret>>;\n  };\n\n/**\n * A symbol used to attach Nexus-specific options to an `ActivityClient.start()` call.\n *\n * @internal\n * @hidden\n */\nexport const InternalActivityStartOptionsSymbol = Symbol.for('__temporal_internal_client_activity_start_options');\nexport interface InternalActivityStartOptions extends ActivityOptions {\n  [InternalActivityStartOptionsSymbol]?: {\n    /**\n     * Request ID to be used for the activity.\n     */\n    requestId?: string;\n\n    /**\n     * Callbacks to be invoked by the server when the Activity reaches a terminal state.\n     * Callback addresses must be whitelisted in the server's dynamic configuration.\n     */\n    completionCallbacks?: temporal.api.common.v1.ICallback[];\n\n    /**\n     * Links to be associated with the Activity.\n     */\n    links?: temporal.api.common.v1.ILink[];\n\n    /**\n     * Response link copied by the client from the StartActivityExecutionResponse.\n     */\n    responseLink?: temporal.api.common.v1.ILink;\n\n    /**\n     * Conflict options for when USE_EXISTING is specified.\n     *\n     * Used by the Nexus TemporalOperations to attach to a callback to a running activity.\n     */\n    onConflictOptions?: temporal.api.workflow.v1.IOnConflictOptions;\n  };\n}\n","import { randomUUID } from 'node:crypto';\nimport { status as grpcStatus } from '@grpc/grpc-js';\nimport type {\n  ActivityFunction,\n  LoadedDataConverter,\n  Next,\n  PayloadTypeInfo,\n  Priority,\n  RetryPolicy,\n  SearchAttributePair,\n  TypedSearchAttributes,\n  TypeInfo,\n} from '@temporalio/common';\nimport {\n  compilePriority,\n  compileRetryPolicy,\n  convertDeploymentVersion,\n  decodePriority,\n  decompileRetryPolicy,\n} from '@temporalio/common';\nimport type { Duration } from '@temporalio/common/lib/time';\nimport { msOptionalToTs, msToNumber, optionalTsToDate, optionalTsToMs } from '@temporalio/common/lib/time';\nimport { composeInterceptors } from '@temporalio/common/lib/interceptors';\nimport {\n  decodeTypedSearchAttributes,\n  encodeUnifiedSearchAttributes,\n  searchAttributePayloadConverter,\n} from '@temporalio/common/lib/converter/payload-search-attributes';\nimport {\n  decodeFromPayloadsAtIndex,\n  decodeOptionalFailureToOptionalError,\n  encodeToPayloadsWithContext,\n  encodeUserMetadata,\n  extstoreInboundOptions,\n  extstoreStoreOptions,\n  visit,\n  walkDescribeActivityExecutionResponse,\n  walkListActivityExecutionsResponse,\n  walkPollActivityExecutionResponse,\n  walkStartActivityExecutionRequest,\n} from '@temporalio/common/lib/internal-non-workflow';\nimport { temporal } from '@temporalio/proto';\nimport type { Replace } from '@temporalio/common/lib/type-helpers';\nimport type {\n  ActivityCancelInput,\n  ActivityClientInterceptor,\n  ActivityCountInput,\n  ActivityDescribeInput,\n  ActivityGetResultInput,\n  ActivityListInput,\n  ActivityStartInput,\n  ActivityTerminateInput,\n} from './interceptors';\nimport type { AsyncCompletionClientOptions } from './async-completion-client';\nimport { AsyncCompletionClient } from './async-completion-client';\nimport type {\n  ActivityExecutionDescription,\n  ActivityExecutionInfo,\n  ActivityIdConflictPolicy,\n  ActivityIdReusePolicy,\n  CountActivityExecutions,\n} from './types';\nimport {\n  decodeActivityExecutionStatus,\n  decodePendingActivityState,\n  encodeActivityIdConflictPolicy,\n  encodeActivityIdReusePolicy,\n} from './types';\nimport type { ErrorDetailsName } from './helpers';\nimport { rethrowKnownErrorTypes, trimGrpcTypeUrl, getGrpcStatusDetails } from './helpers';\nimport {\n  isGrpcServiceError,\n  ServiceError,\n  ActivityNotFoundError,\n  ActivityExecutionFailedError,\n  ActivityExecutionAlreadyStartedError,\n} from './errors';\nimport { type InternalActivityStartOptions, InternalActivityStartOptionsSymbol } from './internal';\n\n/**\n * Options used to configure {@link ActivityClient}\n *\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport interface ActivityClientOptions extends AsyncCompletionClientOptions {\n  interceptors?: ActivityClientInterceptor[];\n}\n\n/**\n * Client for starting and managing Activities, and for asynchronous completion and heartbeating of Activities.\n * Includes all functionality of {@link AsyncCompletionClient}.\n *\n * Typically this client should not be instantiated directly, instead create the high level {@link Client} and use\n * {@link Client.activity} to interact with Activities.\n */\nexport class ActivityClient extends AsyncCompletionClient implements TypedActivityClient<any> {\n  private readonly interceptedHandlers: {\n    [K in keyof Required<ActivityClientInterceptor>]: Next<ActivityClientInterceptor, K>;\n  };\n\n  constructor(options?: ActivityClientOptions) {\n    super(options);\n\n    const interceptors = options?.interceptors ?? [];\n    this.interceptedHandlers = {\n      start: composeInterceptors(interceptors, 'start', this.startHandler.bind(this)),\n      getResult: composeInterceptors(interceptors, 'getResult', this.getResultHandler.bind(this)),\n      describe: composeInterceptors(interceptors, 'describe', this.describeHandler.bind(this)),\n      cancel: composeInterceptors(interceptors, 'cancel', this.cancelHandler.bind(this)),\n      terminate: composeInterceptors(interceptors, 'terminate', this.terminateHandler.bind(this)),\n      list: composeInterceptors(interceptors, 'list', this.listHandler.bind(this)),\n      count: composeInterceptors(interceptors, 'count', this.countHandler.bind(this)),\n    };\n  }\n\n  /**\n   * Returns this client as a {@link TypedActivityClient}. It enables strong type checking of Activity name, arguments\n   * and result based on the provided Activity interface. Note that no new client object is created - this method only\n   * affects type annotations.\n   * @template T Activity interface to use for type checking. The returned client can only start activities present in\n   * this interface.\n   *\n   * @experimental Standalone Activities are experimental. APIs may be subject to change.\n   */\n  typed<T>(): TypedActivityClient<T> {\n    return this;\n  }\n\n  /**\n   * Starts new Standalone Activity execution.\n   *\n   * @param activity Name of the activity to start.\n   * @param options Options controlling the start and execution of the activity.\n   * @returns Handle to the started activity. The handle's `runId` property will be set to the started run.\n   *\n   * @experimental Standalone Activities are experimental. APIs may be subject to change.\n   */\n  async start<R = any>(activity: string, options: ActivityOptions): Promise<ActivityHandle<R>> {\n    return this.interceptedHandlers.start({\n      activityType: activity,\n      options,\n      headers: {},\n    });\n  }\n\n  /**\n   * Executes a Standalone Activity until completion and returns the result.\n   * @param activity Name of the activity to start.\n   * @param options Options controlling the activity execution.\n   * @returns Result of the activity.\n   *\n   * @experimental Standalone Activities are experimental. APIs may be subject to change.\n   */\n  async execute<R = any>(activity: string, options: ActivityOptions): Promise<R> {\n    const handle = await this.start(activity, options);\n    return handle.result();\n  }\n\n  /**\n   * Creates an Activity handle from ID and optionally from run ID. If `runId` is not set, the handle will refer to the\n   * newest Activity run with the given Activity ID.\n   *\n   * Note 1: this function always succeeds. If the provided ID is invalid, an error will only be thrown when calling\n   * the handle's methods.\n   *\n   * Note 2: if `runID` is not set when calling `getHandle`, then `runId` property of the returned handle will always\n   * remain unset, even after method calls are performed. To get the run ID of the targeted activity execution, call\n   * {@link ActivityHandle.describe} and read the `activityRunId` field of the returned {@link ActivityExecutionDescription}.\n   *\n   * @param activityId ID of the Activity.\n   * @param runId Optional run ID of the specific Activity execution.\n   * @returns Handle to the specified activity execution.\n   *\n   * @experimental Standalone Activities are experimental. APIs may be subject to change.\n   */\n  getHandle<R = any>(activityId: string, runId?: string): ActivityHandle<R> {\n    return this.createHandle(activityId, runId);\n  }\n\n  /**\n   * Creates an Activity handle using options that may include result TypeInfo.\n   *\n   * @param activityId ID of the Activity.\n   * @param options Options identifying the Activity run and describing its result type.\n   * @returns Handle to the specified Activity execution.\n   *\n   * @experimental Standalone Activities are experimental. APIs may be subject to change.\n   */\n  getHandleWithOptions<R = any>(activityId: string, options: GetActivityHandleOptions): ActivityHandle<R> {\n    return this.createHandle(activityId, options.runId, options.typeInfo?.outputType);\n  }\n\n  /**\n   * Return a list of Activity executions matching the given `query`.\n   *\n   * Note that the list of Activity executions returned is approximate and eventually consistent.\n   *\n   * More info on the concept of \"visibility\" and the query syntax on the Temporal documentation site:\n   * https://docs.temporal.io/visibility\n   *\n   * @experimental Standalone Activities are experimental. APIs may be subject to change.\n   */\n  list(query: string): AsyncIterable<ActivityExecutionInfo> {\n    return this.interceptedHandlers.list({\n      query,\n      headers: {},\n    });\n  }\n\n  /**\n   * Return the number of Activity executions matching the given `query`.\n   *\n   * Note that the number of Activity executions returned is approximate and eventually consistent.\n   *\n   * More info on the concept of \"visibility\" and the query syntax on the Temporal documentation site:\n   * https://docs.temporal.io/visibility\n   *\n   * @experimental Standalone Activities are experimental. APIs may be subject to change.\n   */\n  async count(query: string): Promise<CountActivityExecutions> {\n    return await this.interceptedHandlers.count({\n      query,\n      headers: {},\n    });\n  }\n\n  protected createHandle<R>(activityId: string, runId?: string, outputType?: TypeInfo): ActivityHandle<R> {\n    if (!activityId) {\n      throw new TypeError('activityId is required');\n    }\n\n    const handle = {\n      client: this,\n      activityId,\n      runId,\n\n      async result(): Promise<R> {\n        return await this.client.interceptedHandlers.getResult({\n          activityId: this.activityId,\n          activityRunId: this.runId ?? '',\n          outputType,\n          headers: {},\n        });\n      },\n\n      async describe(): Promise<ActivityExecutionDescription> {\n        return await this.client.interceptedHandlers.describe({\n          activityId: this.activityId,\n          activityRunId: this.runId ?? '',\n          headers: {},\n        });\n      },\n\n      async cancel(reason: string): Promise<void> {\n        return await this.client.interceptedHandlers.cancel({\n          activityId: this.activityId,\n          activityRunId: this.runId ?? '',\n          reason,\n          headers: {},\n        });\n      },\n\n      async terminate(reason: string): Promise<void> {\n        return await this.client.interceptedHandlers.terminate({\n          activityId: this.activityId,\n          activityRunId: this.runId ?? '',\n          reason,\n          headers: {},\n        });\n      },\n    };\n\n    return handle;\n  }\n\n  protected async startHandler(input: ActivityStartInput): Promise<ActivityHandle> {\n    if (!input.activityType) {\n      throw new TypeError('activityType is required');\n    }\n    validateActivityOptions(input.options);\n\n    const internalOptions = (input.options as InternalActivityStartOptions)[InternalActivityStartOptionsSymbol];\n    const inputTypes = input.options.typeInfo?.inputTypes;\n    const invocationInputTypes = inputTypes === undefined ? undefined : [...inputTypes];\n    const outputType = input.options.typeInfo?.outputType;\n\n    try {\n      const req = await this.buildStartActivityExecutionRequest(input, invocationInputTypes);\n      const externalStorage = this.dataConverter.externalStorage;\n      if (externalStorage) {\n        await visit(\n          req,\n          walkStartActivityExecutionRequest,\n          extstoreStoreOptions(externalStorage, {\n            initialTarget: {\n              kind: 'activity',\n              namespace: this.options.namespace,\n              id: input.options.id,\n              type: input.activityType,\n            },\n          })\n        );\n      }\n      const resp = await this.workflowService.startActivityExecution(req);\n\n      if (internalOptions != null) {\n        internalOptions.responseLink = resp.link ?? undefined;\n      }\n      return this.createHandle(input.options.id, resp.runId, outputType);\n    } catch (err) {\n      if (isGrpcServiceError(err) && err.code === grpcStatus.ALREADY_EXISTS) {\n        for (const entry of getGrpcStatusDetails(err) ?? []) {\n          if (!entry.type_url || !entry.value) continue;\n          if (\n            (trimGrpcTypeUrl(entry.type_url) as ErrorDetailsName) ===\n            'temporal.api.errordetails.v1.ActivityExecutionAlreadyStartedFailure'\n          ) {\n            const details = temporal.api.errordetails.v1.ActivityExecutionAlreadyStartedFailure.decode(entry.value);\n            throw new ActivityExecutionAlreadyStartedError(\n              'Activity execution already started',\n              input.options.id,\n              details.runId\n            );\n          }\n        }\n      }\n\n      this.rethrowGrpcError(err, 'Failed to start activity');\n    }\n  }\n\n  protected async buildStartActivityExecutionRequest(\n    input: ActivityStartInput,\n    inputTypes: readonly TypeInfo[] | undefined\n  ): Promise<temporal.api.workflowservice.v1.IStartActivityExecutionRequest> {\n    const searchAttributes = input.options.typedSearchAttributes\n      ? { indexedFields: encodeUnifiedSearchAttributes(undefined, input.options.typedSearchAttributes) }\n      : undefined;\n\n    const internalOptions = (input.options as InternalActivityStartOptions)[InternalActivityStartOptionsSymbol];\n\n    return {\n      namespace: this.options.namespace,\n      identity: this.options.identity,\n      requestId: internalOptions?.requestId ?? randomUUID(),\n      activityId: input.options.id,\n      activityType: { name: input.activityType },\n      taskQueue: { name: input.options.taskQueue },\n      scheduleToCloseTimeout: msOptionalToTs(input.options.scheduleToCloseTimeout),\n      scheduleToStartTimeout: msOptionalToTs(input.options.scheduleToStartTimeout),\n      startToCloseTimeout: msOptionalToTs(input.options.startToCloseTimeout),\n      heartbeatTimeout: msOptionalToTs(input.options.heartbeatTimeout),\n      retryPolicy: input.options.retry ? compileRetryPolicy(input.options.retry) : undefined,\n      input: {\n        payloads: await encodeToPayloadsWithContext(\n          this.dataConverter,\n          undefined,\n          [...(input.options.args ?? [])],\n          inputTypes\n        ),\n      },\n      idReusePolicy: encodeActivityIdReusePolicy(input.options.idReusePolicy),\n      idConflictPolicy: encodeActivityIdConflictPolicy(input.options.idConflictPolicy),\n      searchAttributes,\n      header: { fields: input.headers },\n      userMetadata: await encodeUserMetadata(this.dataConverter, input.options.summary, undefined),\n      priority: input.options.priority ? compilePriority(input.options.priority) : undefined,\n      startDelay: msOptionalToTs(input.options.startDelay),\n      completionCallbacks: internalOptions?.completionCallbacks,\n      links: internalOptions?.links,\n      onConflictOptions: internalOptions?.onConflictOptions,\n    };\n  }\n\n  protected async getResultHandler(input: ActivityGetResultInput): Promise<any> {\n    if (!input.activityId) {\n      throw new TypeError('activityId is required');\n    }\n\n    const req: temporal.api.workflowservice.v1.IPollActivityExecutionRequest = {\n      namespace: this.options.namespace,\n      activityId: input.activityId,\n      runId: input.activityRunId || undefined,\n    };\n    for (;;) {\n      let failedErr;\n\n      try {\n        const resp = await this.workflowService.pollActivityExecution(req);\n        const externalStorage = this.dataConverter.externalStorage;\n        await visit(resp, walkPollActivityExecutionResponse, extstoreInboundOptions(externalStorage));\n        if (resp.outcome?.result) {\n          return await decodeFromPayloadsAtIndex(\n            this.dataConverter,\n            0,\n            resp.outcome.result.payloads,\n            undefined,\n            input.outputType\n          );\n        } else if (resp.outcome?.failure) {\n          // If error conversion throws an exception, we want it to be caught and handled by rethrowGrpcError().\n          // If it succeeds, we want to throw the ActivityExecutionFailedError directly, so outside of try/catch.\n          failedErr = new ActivityExecutionFailedError(\n            'Activity execution failed',\n            await decodeOptionalFailureToOptionalError(this.dataConverter, resp.outcome.failure),\n            input.activityId,\n            resp.runId || input.activityRunId || undefined\n          );\n        }\n      } catch (err) {\n        this.rethrowGrpcError(err, 'Failed to get activity result');\n      }\n\n      if (failedErr) {\n        throw failedErr;\n      }\n    }\n  }\n\n  protected async describeHandler(input: ActivityDescribeInput): Promise<ActivityExecutionDescription> {\n    if (!input.activityId) {\n      throw new TypeError('activityId is required');\n    }\n\n    try {\n      const resp = await this.workflowService.describeActivityExecution({\n        namespace: this.options.namespace,\n        activityId: input.activityId,\n        runId: input.activityRunId || undefined,\n      });\n      const externalStorage = this.dataConverter.externalStorage;\n      await visit(resp, walkDescribeActivityExecutionResponse, extstoreInboundOptions(externalStorage));\n      return buildActivityDescription(resp.info!, resp.callbacks, this.dataConverter);\n    } catch (err) {\n      this.rethrowGrpcError(err, 'Failed to describe activity');\n    }\n  }\n\n  protected async cancelHandler(input: ActivityCancelInput): Promise<void> {\n    if (!input.activityId) {\n      throw new TypeError('activityId is required');\n    }\n\n    try {\n      await this.workflowService.requestCancelActivityExecution({\n        namespace: this.options.namespace,\n        activityId: input.activityId,\n        runId: input.activityRunId || undefined,\n        identity: this.options.identity,\n        requestId: randomUUID(),\n        reason: input.reason || undefined,\n      });\n    } catch (err) {\n      this.rethrowGrpcError(err, 'Failed to request activity cancellation');\n    }\n  }\n\n  protected async terminateHandler(input: ActivityTerminateInput): Promise<void> {\n    if (!input.activityId) {\n      throw new TypeError('activityId is required');\n    }\n\n    try {\n      await this.workflowService.terminateActivityExecution({\n        namespace: this.options.namespace,\n        activityId: input.activityId,\n        runId: input.activityRunId || undefined,\n        identity: this.options.identity,\n        requestId: randomUUID(),\n        reason: input.reason || undefined,\n      });\n    } catch (err) {\n      this.rethrowGrpcError(err, 'Failed to terminate activity');\n    }\n  }\n\n  protected async *listHandler(input: ActivityListInput): AsyncIterable<ActivityExecutionInfo> {\n    let nextPageToken: Uint8Array | null | undefined = undefined;\n    do {\n      try {\n        const resp: temporal.api.workflowservice.v1.IListActivityExecutionsResponse =\n          await this.workflowService.listActivityExecutions({\n            namespace: this.options.namespace,\n            query: input.query,\n            nextPageToken,\n          });\n\n        const externalStorage = this.dataConverter.externalStorage;\n        await visit(resp, walkListActivityExecutionsResponse, extstoreInboundOptions(externalStorage));\n\n        for (const info of resp.executions ?? []) {\n          yield buildActivityExecutionInfo(info);\n        }\n        nextPageToken = resp.nextPageToken;\n      } catch (e) {\n        this.rethrowGrpcError(e, 'Failed to list activities');\n      }\n    } while (nextPageToken && nextPageToken.length > 0);\n  }\n\n  protected async countHandler(input: ActivityCountInput): Promise<CountActivityExecutions> {\n    try {\n      const resp = await this.workflowService.countActivityExecutions({\n        namespace: this.options.namespace,\n        query: input.query,\n      });\n\n      return {\n        count: resp.count?.toNumber() ?? 0,\n        groups: resp.groups?.map((g) => ({\n          count: g.count?.toNumber() ?? 0,\n          groupValues: g.groupValues?.map((v) => searchAttributePayloadConverter.fromPayload(v)),\n        })),\n      };\n    } catch (err) {\n      this.rethrowGrpcError(err, 'Failed to count activities');\n    }\n  }\n\n  protected rethrowGrpcError(err: unknown, fallbackMessage: string): never {\n    if (isGrpcServiceError(err)) {\n      rethrowKnownErrorTypes(err);\n      if (err.code === grpcStatus.NOT_FOUND) {\n        throw new ActivityNotFoundError(err.details ?? 'Activity not found');\n      }\n      throw new ServiceError(fallbackMessage, { cause: err });\n    }\n    throw new ServiceError('Unexpected error while making gRPC request');\n  }\n}\n\n/**\n * Handle that can be used to perform operations on the associated Activity.\n * Can be obtained by calling {@link ActivityClient.start} or {@link ActivityClient.getHandle}.\n * @template R Result type of the activity. Use {@link ActivityClient.typed} to start activities in a type-safe way.\n *\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport interface ActivityHandle<R = any> {\n  /**\n   * ID of the Activity this handle refers to.\n   */\n  readonly activityId: string;\n  /**\n   * Run ID of the specific Activity execution this handle refers to. If empty, this handle refers to the latest\n   * execution of the Activity with given ID.\n   */\n  readonly runId?: string;\n  /**\n   * Waits until the activity completes. If the activity is successful, returns the result of the activity.\n   * If the activity was not successful, throws {@link ActivityExecutionFailedError}. The activity failure is stored in\n   * the `cause` field.\n   */\n  result(): Promise<R>;\n  /**\n   * Returns information about the Activity execution.\n   */\n  describe(): Promise<ActivityExecutionDescription>;\n  /**\n   * Requests cancellation of the Activity execution. Note that cancellations are cooperative and not guaranteed to happen.\n   */\n  cancel(reason: string): Promise<void>;\n  /**\n   * Terminates the Activity execution. Note that the worker is not immediately notified of termination and may continue running the activity.\n   */\n  terminate(reason: string): Promise<void>;\n}\n\n/**\n * Options used by {@link ActivityClient.start}.\n *\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport interface ActivityOptions {\n  /**\n   * Activity ID of the started activity. It's recommended to use a meaningful business ID.\n   */\n  id: string;\n  /**\n   * Task queue to run this activity on.\n   */\n  taskQueue: string;\n  /**\n   * Input arguments to pass to the activity.\n   */\n  args?: any[] | Readonly<any[]>;\n  /**\n   * Type information used to encode Activity arguments and decode its result.\n   *\n   * @experimental\n   */\n  typeInfo?: PayloadTypeInfo;\n  /**\n   * If set, specifies maximum time between successful heartbeats.\n   */\n  heartbeatTimeout?: Duration;\n  /**\n   * Controls how Activity is retried. If not set, the server will assign default retry policy.\n   */\n  retry?: RetryPolicy;\n  /**\n   * Is set, specifies total time the activity is allowed to run, including retries.\n   *\n   * Note: it is required to set at least one of {@link startToCloseTimeout} and {@link scheduleToCloseTimeout}.\n   */\n  startToCloseTimeout?: Duration;\n  /**\n   * If set, specifies maximum time the activity can wait in the task queue before being picked up by a worker.\n   * This timeout is non-retryable.\n   */\n  scheduleToStartTimeout?: Duration;\n  /**\n   * If set, specifies maximum time for a single execution attempt. This timeout is retryable.\n   *\n   * Note: it is required to set at least one of {@link startToCloseTimeout} and {@link scheduleToCloseTimeout}.\n   */\n  scheduleToCloseTimeout?: Duration;\n  /**\n   * A single-line fixed summary for this activity execution that may appear in UI/CLI.\n   * This can be in single-line Temporal markdown format.\n   */\n  summary?: string;\n  /**\n   * Priority to use when starting this activity.\n   */\n  priority?: Priority;\n  /**\n   * Time to wait before dispatching the first activity task. This delay is not applied to retry attempts.\n   */\n  startDelay?: Duration;\n  /**\n   * Specifies behavior if there's a *closed* activity with the same ID.\n   */\n  idReusePolicy?: ActivityIdReusePolicy;\n  /**\n   * Specifies behavior if there's a *running* activity with the same ID. Note that there can only be one running\n   * Activity for each Activity ID.\n   */\n  idConflictPolicy?: ActivityIdConflictPolicy;\n  /**\n   * Search attributes for the activity.\n   */\n  typedSearchAttributes?: SearchAttributePair[] | TypedSearchAttributes;\n}\n\n/**\n * Options for {@link ActivityClient.getHandleWithOptions}.\n *\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport interface GetActivityHandleOptions {\n  /**\n   * If provided, targets this specific Activity run. If absent, the handle targets the latest run.\n   */\n  runId?: string;\n\n  /**\n   * Type information used to decode the Activity result.\n   *\n   * @experimental\n   */\n  typeInfo?: Pick<PayloadTypeInfo, 'outputType'>;\n}\n\nfunction validateActivityOptions(options: ActivityOptions): void {\n  if (!options.id) {\n    throw new TypeError('id is required');\n  }\n  if (!options.taskQueue) {\n    throw new TypeError('taskQueue is required');\n  }\n  if (!options.scheduleToCloseTimeout && !options.startToCloseTimeout) {\n    throw new TypeError('Either scheduleToCloseTimeout or startToCloseTimeout is required');\n  }\n  if (options.startDelay !== undefined && msToNumber(options.startDelay) < 0) {\n    throw new TypeError('startDelay must be non-negative');\n  }\n}\n\nfunction buildActivityExecutionInfoCommonPart(\n  info: temporal.api.activity.v1.IActivityExecutionListInfo | temporal.api.activity.v1.IActivityExecutionInfo\n): ActivityExecutionInfo {\n  return {\n    activityId: info.activityId!,\n    activityRunId: info.runId!,\n    activityType: info.activityType!.name!,\n    scheduleTime: optionalTsToDate(info.scheduleTime),\n    closeTime: optionalTsToDate(info.closeTime),\n    status: decodeActivityExecutionStatus(info.status)!,\n    typedSearchAttributes: decodeTypedSearchAttributes(info.searchAttributes?.indexedFields),\n    taskQueue: info.taskQueue!,\n    executionDurationMs: optionalTsToMs(info.executionDuration),\n  };\n}\n\nfunction buildActivityExecutionInfo(info: temporal.api.activity.v1.IActivityExecutionListInfo): ActivityExecutionInfo {\n  return {\n    ...buildActivityExecutionInfoCommonPart(info),\n    rawListInfo: info,\n  };\n}\n\nfunction buildActivityDescription(\n  info: temporal.api.activity.v1.IActivityExecutionInfo,\n  callbacks: temporal.api.activity.v1.ICallbackInfo[],\n  dataConverter: LoadedDataConverter\n): ActivityExecutionDescription {\n  const getHeartbeatDetails: <T>() => Promise<T | undefined> = async <T>() => {\n    const payloads = info.heartbeatDetails?.payloads;\n    if (payloads && payloads.length > 0) {\n      return await decodeFromPayloadsAtIndex<T>(dataConverter, 0, info.heartbeatDetails?.payloads);\n    } else {\n      return undefined;\n    }\n  };\n\n  const getLastFailure: () => Promise<Error | undefined> = async () => {\n    return await decodeOptionalFailureToOptionalError(dataConverter, info.lastFailure);\n  };\n\n  return {\n    ...buildActivityExecutionInfoCommonPart(info),\n    rawInfo: info,\n    rawCallbacks: callbacks,\n    runState: decodePendingActivityState(info.runState),\n    scheduleToCloseTimeoutMs: optionalTsToMs(info.scheduleToCloseTimeout),\n    scheduleToStartTimeoutMs: optionalTsToMs(info.scheduleToStartTimeout),\n    startToCloseTimeoutMs: optionalTsToMs(info.startToCloseTimeout),\n    heartbeatTimeoutMs: optionalTsToMs(info.heartbeatTimeout),\n    retryPolicy: decompileRetryPolicy(info.retryPolicy)!,\n    lastHeartbeatTime: optionalTsToDate(info.lastHeartbeatTime),\n    lastStartedTime: optionalTsToDate(info.lastStartedTime),\n    attempt: info.attempt!,\n    expirationTime: optionalTsToDate(info.expirationTime),\n    lastWorkerIdentity: info.lastWorkerIdentity || undefined,\n    currentRetryIntervalMs: optionalTsToMs(info.currentRetryInterval),\n    lastAttemptCompleteTime: optionalTsToDate(info.lastAttemptCompleteTime),\n    nextAttemptScheduleTime: optionalTsToDate(info.nextAttemptScheduleTime),\n    lastDeploymentVersion: convertDeploymentVersion(info.lastDeploymentVersion),\n    priority: decodePriority(info.priority),\n    canceledReason: info.canceledReason || undefined,\n\n    getHeartbeatDetails,\n    getLastFailure,\n  };\n}\n\n/**\n * Sub-interface of {@link ActivityClient} that provides a strongly-typed interface for executing Activities.\n * Argument types in the provided options must match the argument types of the specified Activity as defined in provided\n * interface\n * @template T Activity interface\n *\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport interface TypedActivityClient<T> {\n  start<N extends ActivityName<T>>(\n    activity: N,\n    options: ActivityOptionsFor<T, N>\n  ): Promise<ActivityHandle<ActivityResult<T, N>>>;\n\n  execute<N extends ActivityName<T>>(activity: N, options: ActivityOptionsFor<T, N>): Promise<ActivityResult<T, N>>;\n}\n\n/**\n * Utility type to support strong typing in {@link TypedActivityClient}.\n * Contains names of activities extracted from the specified activity interface.\n * @template T Activity interface\n *\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport type ActivityName<T> = {\n  [N in keyof T & string]: T[N] extends ActivityFunction<any, any> ? N : never;\n}[keyof T & string];\n\n/**\n * Utility type to support strong typing in {@link TypedActivityClient}.\n * Extracts argument types of an activity.\n * @template T Activity interface\n * @template N Activity name\n *\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport type ActivityArgs<T, N extends ActivityName<T>> = T[N] extends ActivityFunction<infer P, any> ? P : never;\n\n/**\n * Utility type to support strong typing in {@link TypedActivityClient}.\n * Extracts result type of an activity.\n * @template T Activity interface\n * @template N Activity name\n *\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport type ActivityResult<T, N extends ActivityName<T>> = T[N] extends ActivityFunction<any, infer R> ? R : never;\n\n/**\n * Utility type to support strong typing in {@link TypedActivityClient}.\n * Represents {@link ActivityOptions} with strongly typed arguments.\n * @template Args Types of activity arguments as an array type.\n *\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport type ActivityOptionsWithArgs<Args extends any[]> = Args extends [any, ...any]\n  ? Replace<\n      ActivityOptions,\n      {\n        /**\n         * Arguments to pass to the Activity\n         */\n        args: Args | Readonly<Args>;\n      }\n    >\n  : Replace<\n      ActivityOptions,\n      {\n        /**\n         * Arguments to pass to the Activity\n         */\n        args?: Args | Readonly<Args>;\n      }\n    >;\n\n/**\n * Utility type to support strong typing in {@link TypedActivityClient}.\n * Represents {@link ActivityOptions} with strongly typed arguments matching specified Activity in specified interface.\n * @template T Activity interface\n * @template N Activity name\n *\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport type ActivityOptionsFor<T, N extends ActivityName<T>> = ActivityOptionsWithArgs<ActivityArgs<T, N>>;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = 'ffffffff-ffff-ffff-ffff-ffffffffffff';\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = '00000000-0000-0000-0000-000000000000';\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst regex_js_1 = require(\"./regex.js\");\nfunction validate(uuid) {\n    return typeof uuid === 'string' && regex_js_1.default.test(uuid);\n}\nexports.default = validate;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst validate_js_1 = require(\"./validate.js\");\nfunction parse(uuid) {\n    if (!(0, validate_js_1.default)(uuid)) {\n        throw TypeError('Invalid UUID');\n    }\n    let v;\n    return Uint8Array.of((v = parseInt(uuid.slice(0, 8), 16)) >>> 24, (v >>> 16) & 0xff, (v >>> 8) & 0xff, v & 0xff, (v = parseInt(uuid.slice(9, 13), 16)) >>> 8, v & 0xff, (v = parseInt(uuid.slice(14, 18), 16)) >>> 8, v & 0xff, (v = parseInt(uuid.slice(19, 23), 16)) >>> 8, v & 0xff, ((v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000) & 0xff, (v / 0x100000000) & 0xff, (v >>> 24) & 0xff, (v >>> 16) & 0xff, (v >>> 8) & 0xff, v & 0xff);\n}\nexports.default = parse;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.unsafeStringify = void 0;\nconst validate_js_1 = require(\"./validate.js\");\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n    byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nfunction unsafeStringify(arr, offset = 0) {\n    return (byteToHex[arr[offset + 0]] +\n        byteToHex[arr[offset + 1]] +\n        byteToHex[arr[offset + 2]] +\n        byteToHex[arr[offset + 3]] +\n        '-' +\n        byteToHex[arr[offset + 4]] +\n        byteToHex[arr[offset + 5]] +\n        '-' +\n        byteToHex[arr[offset + 6]] +\n        byteToHex[arr[offset + 7]] +\n        '-' +\n        byteToHex[arr[offset + 8]] +\n        byteToHex[arr[offset + 9]] +\n        '-' +\n        byteToHex[arr[offset + 10]] +\n        byteToHex[arr[offset + 11]] +\n        byteToHex[arr[offset + 12]] +\n        byteToHex[arr[offset + 13]] +\n        byteToHex[arr[offset + 14]] +\n        byteToHex[arr[offset + 15]]).toLowerCase();\n}\nexports.unsafeStringify = unsafeStringify;\nfunction stringify(arr, offset = 0) {\n    const uuid = unsafeStringify(arr, offset);\n    if (!(0, validate_js_1.default)(uuid)) {\n        throw TypeError('Stringified UUID is invalid');\n    }\n    return uuid;\n}\nexports.default = stringify;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst crypto_1 = require(\"crypto\");\nconst rnds8Pool = new Uint8Array(256);\nlet poolPtr = rnds8Pool.length;\nfunction rng() {\n    if (poolPtr > rnds8Pool.length - 16) {\n        (0, crypto_1.randomFillSync)(rnds8Pool);\n        poolPtr = 0;\n    }\n    return rnds8Pool.slice(poolPtr, (poolPtr += 16));\n}\nexports.default = rng;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.updateV1State = void 0;\nconst rng_js_1 = require(\"./rng.js\");\nconst stringify_js_1 = require(\"./stringify.js\");\nconst _state = {};\nfunction v1(options, buf, offset) {\n    let bytes;\n    const isV6 = options?._v6 ?? false;\n    if (options) {\n        const optionsKeys = Object.keys(options);\n        if (optionsKeys.length === 1 && optionsKeys[0] === '_v6') {\n            options = undefined;\n        }\n    }\n    if (options) {\n        bytes = v1Bytes(options.random ?? options.rng?.() ?? (0, rng_js_1.default)(), options.msecs, options.nsecs, options.clockseq, options.node, buf, offset);\n    }\n    else {\n        const now = Date.now();\n        const rnds = (0, rng_js_1.default)();\n        updateV1State(_state, now, rnds);\n        bytes = v1Bytes(rnds, _state.msecs, _state.nsecs, isV6 ? undefined : _state.clockseq, isV6 ? undefined : _state.node, buf, offset);\n    }\n    return buf ?? (0, stringify_js_1.unsafeStringify)(bytes);\n}\nfunction updateV1State(state, now, rnds) {\n    state.msecs ??= -Infinity;\n    state.nsecs ??= 0;\n    if (now === state.msecs) {\n        state.nsecs++;\n        if (state.nsecs >= 10000) {\n            state.node = undefined;\n            state.nsecs = 0;\n        }\n    }\n    else if (now > state.msecs) {\n        state.nsecs = 0;\n    }\n    else if (now < state.msecs) {\n        state.node = undefined;\n    }\n    if (!state.node) {\n        state.node = rnds.slice(10, 16);\n        state.node[0] |= 0x01;\n        state.clockseq = ((rnds[8] << 8) | rnds[9]) & 0x3fff;\n    }\n    state.msecs = now;\n    return state;\n}\nexports.updateV1State = updateV1State;\nfunction v1Bytes(rnds, msecs, nsecs, clockseq, node, buf, offset = 0) {\n    if (rnds.length < 16) {\n        throw new Error('Random bytes length must be >= 16');\n    }\n    if (!buf) {\n        buf = new Uint8Array(16);\n        offset = 0;\n    }\n    else {\n        if (offset < 0 || offset + 16 > buf.length) {\n            throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n        }\n    }\n    msecs ??= Date.now();\n    nsecs ??= 0;\n    clockseq ??= ((rnds[8] << 8) | rnds[9]) & 0x3fff;\n    node ??= rnds.slice(10, 16);\n    msecs += 12219292800000;\n    const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n    buf[offset++] = (tl >>> 24) & 0xff;\n    buf[offset++] = (tl >>> 16) & 0xff;\n    buf[offset++] = (tl >>> 8) & 0xff;\n    buf[offset++] = tl & 0xff;\n    const tmh = ((msecs / 0x100000000) * 10000) & 0xfffffff;\n    buf[offset++] = (tmh >>> 8) & 0xff;\n    buf[offset++] = tmh & 0xff;\n    buf[offset++] = ((tmh >>> 24) & 0xf) | 0x10;\n    buf[offset++] = (tmh >>> 16) & 0xff;\n    buf[offset++] = (clockseq >>> 8) | 0x80;\n    buf[offset++] = clockseq & 0xff;\n    for (let n = 0; n < 6; ++n) {\n        buf[offset++] = node[n];\n    }\n    return buf;\n}\nexports.default = v1;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst parse_js_1 = require(\"./parse.js\");\nconst stringify_js_1 = require(\"./stringify.js\");\nfunction v1ToV6(uuid) {\n    const v1Bytes = typeof uuid === 'string' ? (0, parse_js_1.default)(uuid) : uuid;\n    const v6Bytes = _v1ToV6(v1Bytes);\n    return typeof uuid === 'string' ? (0, stringify_js_1.unsafeStringify)(v6Bytes) : v6Bytes;\n}\nexports.default = v1ToV6;\nfunction _v1ToV6(v1Bytes) {\n    return Uint8Array.of(((v1Bytes[6] & 0x0f) << 4) | ((v1Bytes[7] >> 4) & 0x0f), ((v1Bytes[7] & 0x0f) << 4) | ((v1Bytes[4] & 0xf0) >> 4), ((v1Bytes[4] & 0x0f) << 4) | ((v1Bytes[5] & 0xf0) >> 4), ((v1Bytes[5] & 0x0f) << 4) | ((v1Bytes[0] & 0xf0) >> 4), ((v1Bytes[0] & 0x0f) << 4) | ((v1Bytes[1] & 0xf0) >> 4), ((v1Bytes[1] & 0x0f) << 4) | ((v1Bytes[2] & 0xf0) >> 4), 0x60 | (v1Bytes[2] & 0x0f), v1Bytes[3], v1Bytes[8], v1Bytes[9], v1Bytes[10], v1Bytes[11], v1Bytes[12], v1Bytes[13], v1Bytes[14], v1Bytes[15]);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst crypto_1 = require(\"crypto\");\nfunction md5(bytes) {\n    if (Array.isArray(bytes)) {\n        bytes = Buffer.from(bytes);\n    }\n    else if (typeof bytes === 'string') {\n        bytes = Buffer.from(bytes, 'utf8');\n    }\n    return (0, crypto_1.createHash)('md5').update(bytes).digest();\n}\nexports.default = md5;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.URL = exports.DNS = exports.stringToBytes = void 0;\nconst parse_js_1 = require(\"./parse.js\");\nconst stringify_js_1 = require(\"./stringify.js\");\nfunction stringToBytes(str) {\n    str = unescape(encodeURIComponent(str));\n    const bytes = new Uint8Array(str.length);\n    for (let i = 0; i < str.length; ++i) {\n        bytes[i] = str.charCodeAt(i);\n    }\n    return bytes;\n}\nexports.stringToBytes = stringToBytes;\nexports.DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexports.URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nfunction v35(version, hash, value, namespace, buf, offset) {\n    const valueBytes = typeof value === 'string' ? stringToBytes(value) : value;\n    const namespaceBytes = typeof namespace === 'string' ? (0, parse_js_1.default)(namespace) : namespace;\n    if (typeof namespace === 'string') {\n        namespace = (0, parse_js_1.default)(namespace);\n    }\n    if (namespace?.length !== 16) {\n        throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n    }\n    let bytes = new Uint8Array(16 + valueBytes.length);\n    bytes.set(namespaceBytes);\n    bytes.set(valueBytes, namespaceBytes.length);\n    bytes = hash(bytes);\n    bytes[6] = (bytes[6] & 0x0f) | version;\n    bytes[8] = (bytes[8] & 0x3f) | 0x80;\n    if (buf) {\n        offset = offset || 0;\n        if (offset < 0 || offset + 16 > buf.length) {\n            throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n        }\n        for (let i = 0; i < 16; ++i) {\n            buf[offset + i] = bytes[i];\n        }\n        return buf;\n    }\n    return (0, stringify_js_1.unsafeStringify)(bytes);\n}\nexports.default = v35;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.URL = exports.DNS = void 0;\nconst md5_js_1 = require(\"./md5.js\");\nconst v35_js_1 = require(\"./v35.js\");\nvar v35_js_2 = require(\"./v35.js\");\nObject.defineProperty(exports, \"DNS\", { enumerable: true, get: function () { return v35_js_2.DNS; } });\nObject.defineProperty(exports, \"URL\", { enumerable: true, get: function () { return v35_js_2.URL; } });\nfunction v3(value, namespace, buf, offset) {\n    return (0, v35_js_1.default)(0x30, md5_js_1.default, value, namespace, buf, offset);\n}\nv3.DNS = v35_js_1.DNS;\nv3.URL = v35_js_1.URL;\nexports.default = v3;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst crypto_1 = require(\"crypto\");\nexports.default = { randomUUID: crypto_1.randomUUID };\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst native_js_1 = require(\"./native.js\");\nconst rng_js_1 = require(\"./rng.js\");\nconst stringify_js_1 = require(\"./stringify.js\");\nfunction v4(options, buf, offset) {\n    if (native_js_1.default.randomUUID && !buf && !options) {\n        return native_js_1.default.randomUUID();\n    }\n    options = options || {};\n    const rnds = options.random ?? options.rng?.() ?? (0, rng_js_1.default)();\n    if (rnds.length < 16) {\n        throw new Error('Random bytes length must be >= 16');\n    }\n    rnds[6] = (rnds[6] & 0x0f) | 0x40;\n    rnds[8] = (rnds[8] & 0x3f) | 0x80;\n    if (buf) {\n        offset = offset || 0;\n        if (offset < 0 || offset + 16 > buf.length) {\n            throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n        }\n        for (let i = 0; i < 16; ++i) {\n            buf[offset + i] = rnds[i];\n        }\n        return buf;\n    }\n    return (0, stringify_js_1.unsafeStringify)(rnds);\n}\nexports.default = v4;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst crypto_1 = require(\"crypto\");\nfunction sha1(bytes) {\n    if (Array.isArray(bytes)) {\n        bytes = Buffer.from(bytes);\n    }\n    else if (typeof bytes === 'string') {\n        bytes = Buffer.from(bytes, 'utf8');\n    }\n    return (0, crypto_1.createHash)('sha1').update(bytes).digest();\n}\nexports.default = sha1;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.URL = exports.DNS = void 0;\nconst sha1_js_1 = require(\"./sha1.js\");\nconst v35_js_1 = require(\"./v35.js\");\nvar v35_js_2 = require(\"./v35.js\");\nObject.defineProperty(exports, \"DNS\", { enumerable: true, get: function () { return v35_js_2.DNS; } });\nObject.defineProperty(exports, \"URL\", { enumerable: true, get: function () { return v35_js_2.URL; } });\nfunction v5(value, namespace, buf, offset) {\n    return (0, v35_js_1.default)(0x50, sha1_js_1.default, value, namespace, buf, offset);\n}\nv5.DNS = v35_js_1.DNS;\nv5.URL = v35_js_1.URL;\nexports.default = v5;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stringify_js_1 = require(\"./stringify.js\");\nconst v1_js_1 = require(\"./v1.js\");\nconst v1ToV6_js_1 = require(\"./v1ToV6.js\");\nfunction v6(options, buf, offset) {\n    options ??= {};\n    offset ??= 0;\n    let bytes = (0, v1_js_1.default)({ ...options, _v6: true }, new Uint8Array(16));\n    bytes = (0, v1ToV6_js_1.default)(bytes);\n    if (buf) {\n        if (offset < 0 || offset + 16 > buf.length) {\n            throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n        }\n        for (let i = 0; i < 16; i++) {\n            buf[offset + i] = bytes[i];\n        }\n        return buf;\n    }\n    return (0, stringify_js_1.unsafeStringify)(bytes);\n}\nexports.default = v6;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst parse_js_1 = require(\"./parse.js\");\nconst stringify_js_1 = require(\"./stringify.js\");\nfunction v6ToV1(uuid) {\n    const v6Bytes = typeof uuid === 'string' ? (0, parse_js_1.default)(uuid) : uuid;\n    const v1Bytes = _v6ToV1(v6Bytes);\n    return typeof uuid === 'string' ? (0, stringify_js_1.unsafeStringify)(v1Bytes) : v1Bytes;\n}\nexports.default = v6ToV1;\nfunction _v6ToV1(v6Bytes) {\n    return Uint8Array.of(((v6Bytes[3] & 0x0f) << 4) | ((v6Bytes[4] >> 4) & 0x0f), ((v6Bytes[4] & 0x0f) << 4) | ((v6Bytes[5] & 0xf0) >> 4), ((v6Bytes[5] & 0x0f) << 4) | (v6Bytes[6] & 0x0f), v6Bytes[7], ((v6Bytes[1] & 0x0f) << 4) | ((v6Bytes[2] & 0xf0) >> 4), ((v6Bytes[2] & 0x0f) << 4) | ((v6Bytes[3] & 0xf0) >> 4), 0x10 | ((v6Bytes[0] & 0xf0) >> 4), ((v6Bytes[0] & 0x0f) << 4) | ((v6Bytes[1] & 0xf0) >> 4), v6Bytes[8], v6Bytes[9], v6Bytes[10], v6Bytes[11], v6Bytes[12], v6Bytes[13], v6Bytes[14], v6Bytes[15]);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.updateV7State = void 0;\nconst rng_js_1 = require(\"./rng.js\");\nconst stringify_js_1 = require(\"./stringify.js\");\nconst _state = {};\nfunction v7(options, buf, offset) {\n    let bytes;\n    if (options) {\n        bytes = v7Bytes(options.random ?? options.rng?.() ?? (0, rng_js_1.default)(), options.msecs, options.seq, buf, offset);\n    }\n    else {\n        const now = Date.now();\n        const rnds = (0, rng_js_1.default)();\n        updateV7State(_state, now, rnds);\n        bytes = v7Bytes(rnds, _state.msecs, _state.seq, buf, offset);\n    }\n    return buf ?? (0, stringify_js_1.unsafeStringify)(bytes);\n}\nfunction updateV7State(state, now, rnds) {\n    state.msecs ??= -Infinity;\n    state.seq ??= 0;\n    if (now > state.msecs) {\n        state.seq = (rnds[6] << 23) | (rnds[7] << 16) | (rnds[8] << 8) | rnds[9];\n        state.msecs = now;\n    }\n    else {\n        state.seq = (state.seq + 1) | 0;\n        if (state.seq === 0) {\n            state.msecs++;\n        }\n    }\n    return state;\n}\nexports.updateV7State = updateV7State;\nfunction v7Bytes(rnds, msecs, seq, buf, offset = 0) {\n    if (rnds.length < 16) {\n        throw new Error('Random bytes length must be >= 16');\n    }\n    if (!buf) {\n        buf = new Uint8Array(16);\n        offset = 0;\n    }\n    else {\n        if (offset < 0 || offset + 16 > buf.length) {\n            throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n        }\n    }\n    msecs ??= Date.now();\n    seq ??= ((rnds[6] * 0x7f) << 24) | (rnds[7] << 16) | (rnds[8] << 8) | rnds[9];\n    buf[offset++] = (msecs / 0x10000000000) & 0xff;\n    buf[offset++] = (msecs / 0x100000000) & 0xff;\n    buf[offset++] = (msecs / 0x1000000) & 0xff;\n    buf[offset++] = (msecs / 0x10000) & 0xff;\n    buf[offset++] = (msecs / 0x100) & 0xff;\n    buf[offset++] = msecs & 0xff;\n    buf[offset++] = 0x70 | ((seq >>> 28) & 0x0f);\n    buf[offset++] = (seq >>> 20) & 0xff;\n    buf[offset++] = 0x80 | ((seq >>> 14) & 0x3f);\n    buf[offset++] = (seq >>> 6) & 0xff;\n    buf[offset++] = ((seq << 2) & 0xff) | (rnds[10] & 0x03);\n    buf[offset++] = rnds[11];\n    buf[offset++] = rnds[12];\n    buf[offset++] = rnds[13];\n    buf[offset++] = rnds[14];\n    buf[offset++] = rnds[15];\n    return buf;\n}\nexports.default = v7;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst validate_js_1 = require(\"./validate.js\");\nfunction version(uuid) {\n    if (!(0, validate_js_1.default)(uuid)) {\n        throw TypeError('Invalid UUID');\n    }\n    return parseInt(uuid.slice(14, 15), 16);\n}\nexports.default = version;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.version = exports.validate = exports.v7 = exports.v6ToV1 = exports.v6 = exports.v5 = exports.v4 = exports.v3 = exports.v1ToV6 = exports.v1 = exports.stringify = exports.parse = exports.NIL = exports.MAX = void 0;\nvar max_js_1 = require(\"./max.js\");\nObject.defineProperty(exports, \"MAX\", { enumerable: true, get: function () { return max_js_1.default; } });\nvar nil_js_1 = require(\"./nil.js\");\nObject.defineProperty(exports, \"NIL\", { enumerable: true, get: function () { return nil_js_1.default; } });\nvar parse_js_1 = require(\"./parse.js\");\nObject.defineProperty(exports, \"parse\", { enumerable: true, get: function () { return parse_js_1.default; } });\nvar stringify_js_1 = require(\"./stringify.js\");\nObject.defineProperty(exports, \"stringify\", { enumerable: true, get: function () { return stringify_js_1.default; } });\nvar v1_js_1 = require(\"./v1.js\");\nObject.defineProperty(exports, \"v1\", { enumerable: true, get: function () { return v1_js_1.default; } });\nvar v1ToV6_js_1 = require(\"./v1ToV6.js\");\nObject.defineProperty(exports, \"v1ToV6\", { enumerable: true, get: function () { return v1ToV6_js_1.default; } });\nvar v3_js_1 = require(\"./v3.js\");\nObject.defineProperty(exports, \"v3\", { enumerable: true, get: function () { return v3_js_1.default; } });\nvar v4_js_1 = require(\"./v4.js\");\nObject.defineProperty(exports, \"v4\", { enumerable: true, get: function () { return v4_js_1.default; } });\nvar v5_js_1 = require(\"./v5.js\");\nObject.defineProperty(exports, \"v5\", { enumerable: true, get: function () { return v5_js_1.default; } });\nvar v6_js_1 = require(\"./v6.js\");\nObject.defineProperty(exports, \"v6\", { enumerable: true, get: function () { return v6_js_1.default; } });\nvar v6ToV1_js_1 = require(\"./v6ToV1.js\");\nObject.defineProperty(exports, \"v6ToV1\", { enumerable: true, get: function () { return v6ToV1_js_1.default; } });\nvar v7_js_1 = require(\"./v7.js\");\nObject.defineProperty(exports, \"v7\", { enumerable: true, get: function () { return v7_js_1.default; } });\nvar validate_js_1 = require(\"./validate.js\");\nObject.defineProperty(exports, \"validate\", { enumerable: true, get: function () { return validate_js_1.default; } });\nvar version_js_1 = require(\"./version.js\");\nObject.defineProperty(exports, \"version\", { enumerable: true, get: function () { return version_js_1.default; } });\n","import type {\n  Duration,\n  PayloadTypeInfo,\n  SearchAttributePair,\n  SearchAttributeType,\n  TypedSearchAttributes,\n} from '@temporalio/common';\nimport type { TypedSearchAttributeValue } from '@temporalio/common/lib/search-attributes';\nimport { makeProtoEnumConverters } from '@temporalio/common/lib/internal-workflow';\nimport type { temporal } from '@temporalio/proto';\nimport type { Replace } from '@temporalio/common/lib/type-helpers';\n\n/**\n * Defines whether to allow re-using an operation ID from a previously *completed* Nexus operation.\n *\n * See {@link NexusOperationIdConflictPolicy} for handling ID duplication with a *running* operation.\n */\nexport const NexusOperationIdReusePolicy = {\n  ALLOW_DUPLICATE: 'ALLOW_DUPLICATE',\n  ALLOW_DUPLICATE_FAILED_ONLY: 'ALLOW_DUPLICATE_FAILED_ONLY',\n  REJECT_DUPLICATE: 'REJECT_DUPLICATE',\n} as const;\nexport type NexusOperationIdReusePolicy =\n  (typeof NexusOperationIdReusePolicy)[keyof typeof NexusOperationIdReusePolicy];\n\nexport const [encodeNexusOperationIdReusePolicy, decodeNexusOperationIdReusePolicy] = makeProtoEnumConverters<\n  temporal.api.enums.v1.NexusOperationIdReusePolicy,\n  typeof temporal.api.enums.v1.NexusOperationIdReusePolicy,\n  keyof typeof temporal.api.enums.v1.NexusOperationIdReusePolicy,\n  typeof NexusOperationIdReusePolicy,\n  'NEXUS_OPERATION_ID_REUSE_POLICY_'\n>(\n  {\n    [NexusOperationIdReusePolicy.ALLOW_DUPLICATE]: 1,\n    [NexusOperationIdReusePolicy.ALLOW_DUPLICATE_FAILED_ONLY]: 2,\n    [NexusOperationIdReusePolicy.REJECT_DUPLICATE]: 3,\n    UNSPECIFIED: 0,\n  } as const,\n  'NEXUS_OPERATION_ID_REUSE_POLICY_'\n);\n\n/**\n * Defines how to resolve an operation ID conflict with a *running* Nexus operation.\n *\n * See {@link NexusOperationIdReusePolicy} for handling operation ID duplication with a *closed* operation.\n */\nexport const NexusOperationIdConflictPolicy = {\n  FAIL: 'FAIL',\n  USE_EXISTING: 'USE_EXISTING',\n} as const;\nexport type NexusOperationIdConflictPolicy =\n  (typeof NexusOperationIdConflictPolicy)[keyof typeof NexusOperationIdConflictPolicy];\n\nexport const [encodeNexusOperationIdConflictPolicy, decodeNexusOperationIdConflictPolicy] = makeProtoEnumConverters<\n  temporal.api.enums.v1.NexusOperationIdConflictPolicy,\n  typeof temporal.api.enums.v1.NexusOperationIdConflictPolicy,\n  keyof typeof temporal.api.enums.v1.NexusOperationIdConflictPolicy,\n  typeof NexusOperationIdConflictPolicy,\n  'NEXUS_OPERATION_ID_CONFLICT_POLICY_'\n>(\n  {\n    [NexusOperationIdConflictPolicy.FAIL]: 1,\n    [NexusOperationIdConflictPolicy.USE_EXISTING]: 2,\n    UNSPECIFIED: 0,\n  } as const,\n  'NEXUS_OPERATION_ID_CONFLICT_POLICY_'\n);\n\n/**\n * A general status for a Nexus operation, indicating whether it is currently running or in a terminal state.\n */\nexport const NexusOperationExecutionStatus = {\n  RUNNING: 'RUNNING',\n  COMPLETED: 'COMPLETED',\n  FAILED: 'FAILED',\n  CANCELED: 'CANCELED',\n  TERMINATED: 'TERMINATED',\n  TIMED_OUT: 'TIMED_OUT',\n} as const;\nexport type NexusOperationExecutionStatus =\n  (typeof NexusOperationExecutionStatus)[keyof typeof NexusOperationExecutionStatus];\n\nexport const [encodeNexusOperationExecutionStatus, decodeNexusOperationExecutionStatus] = makeProtoEnumConverters<\n  temporal.api.enums.v1.NexusOperationExecutionStatus,\n  typeof temporal.api.enums.v1.NexusOperationExecutionStatus,\n  keyof typeof temporal.api.enums.v1.NexusOperationExecutionStatus,\n  typeof NexusOperationExecutionStatus,\n  'NEXUS_OPERATION_EXECUTION_STATUS_'\n>(\n  {\n    [NexusOperationExecutionStatus.RUNNING]: 1,\n    [NexusOperationExecutionStatus.COMPLETED]: 2,\n    [NexusOperationExecutionStatus.FAILED]: 3,\n    [NexusOperationExecutionStatus.CANCELED]: 4,\n    [NexusOperationExecutionStatus.TERMINATED]: 5,\n    [NexusOperationExecutionStatus.TIMED_OUT]: 6,\n    UNSPECIFIED: 0,\n  } as const,\n  'NEXUS_OPERATION_EXECUTION_STATUS_'\n);\n\n/**\n * A more detailed breakdown of {@link NexusOperationExecutionStatus.RUNNING}.\n */\nexport const PendingNexusOperationState = {\n  SCHEDULED: 'SCHEDULED',\n  BACKING_OFF: 'BACKING_OFF',\n  STARTED: 'STARTED',\n  BLOCKED: 'BLOCKED',\n} as const;\nexport type PendingNexusOperationState = (typeof PendingNexusOperationState)[keyof typeof PendingNexusOperationState];\n\nexport const [encodePendingNexusOperationState, decodePendingNexusOperationState] = makeProtoEnumConverters<\n  temporal.api.enums.v1.PendingNexusOperationState,\n  typeof temporal.api.enums.v1.PendingNexusOperationState,\n  keyof typeof temporal.api.enums.v1.PendingNexusOperationState,\n  typeof PendingNexusOperationState,\n  'PENDING_NEXUS_OPERATION_STATE_'\n>(\n  {\n    [PendingNexusOperationState.SCHEDULED]: 1,\n    [PendingNexusOperationState.BACKING_OFF]: 2,\n    [PendingNexusOperationState.STARTED]: 3,\n    [PendingNexusOperationState.BLOCKED]: 4,\n    UNSPECIFIED: 0,\n  } as const,\n  'PENDING_NEXUS_OPERATION_STATE_'\n);\n\n/**\n * State of a Nexus operation cancellation.\n */\nexport const NexusOperationCancellationState = {\n  SCHEDULED: 'SCHEDULED',\n  BACKING_OFF: 'BACKING_OFF',\n  SUCCEEDED: 'SUCCEEDED',\n  FAILED: 'FAILED',\n  TIMED_OUT: 'TIMED_OUT',\n  BLOCKED: 'BLOCKED',\n} as const;\nexport type NexusOperationCancellationState =\n  (typeof NexusOperationCancellationState)[keyof typeof NexusOperationCancellationState];\n\nexport const [encodeNexusOperationCancellationState, decodeNexusOperationCancellationState] = makeProtoEnumConverters<\n  temporal.api.enums.v1.NexusOperationCancellationState,\n  typeof temporal.api.enums.v1.NexusOperationCancellationState,\n  keyof typeof temporal.api.enums.v1.NexusOperationCancellationState,\n  typeof NexusOperationCancellationState,\n  'NEXUS_OPERATION_CANCELLATION_STATE_'\n>(\n  {\n    [NexusOperationCancellationState.SCHEDULED]: 1,\n    [NexusOperationCancellationState.BACKING_OFF]: 2,\n    [NexusOperationCancellationState.SUCCEEDED]: 3,\n    [NexusOperationCancellationState.FAILED]: 4,\n    [NexusOperationCancellationState.TIMED_OUT]: 5,\n    [NexusOperationCancellationState.BLOCKED]: 6,\n    UNSPECIFIED: 0,\n  } as const,\n  'NEXUS_OPERATION_CANCELLATION_STATE_'\n);\n\nexport type RawNexusOperationExecutionInfo = temporal.api.nexus.v1.INexusOperationExecutionInfo;\nexport type RawNexusOperationExecutionListInfo = temporal.api.nexus.v1.INexusOperationExecutionListInfo;\nexport type RawNexusOperationExecutionCancellationInfo = temporal.api.nexus.v1.INexusOperationExecutionCancellationInfo;\n\n/**\n * Cancellation state for a standalone Nexus operation.\n */\nexport interface NexusOperationExecutionCancellationInfo {\n  /**\n   * The time when cancellation was requested.\n   */\n  readonly requestedTime: Date | undefined;\n\n  /**\n   * The current state of the cancellation request.\n   */\n  readonly state: NexusOperationCancellationState | undefined;\n\n  /**\n   * The number of attempts made to deliver the cancel operation request.\n   */\n  readonly attempt: number;\n\n  /**\n   * The time when the last attempt completed.\n   */\n  readonly lastAttemptCompleteTime: Date | undefined;\n\n  /**\n   * The time when the next attempt is scheduled.\n   */\n  readonly nextAttemptScheduleTime: Date | undefined;\n\n  /**\n   * The last attempt's failure, if any.\n   */\n  readonly lastAttemptFailure: Error | undefined;\n\n  /**\n   * Blocked reason provides additional information if the cancellation state is {@link NexusOperationCancellationState.BLOCKED}.\n   */\n  readonly blockedReason: string | undefined;\n\n  /**\n   * The reason specified in the cancellation request.\n   */\n  readonly reason: string;\n\n  /**\n   * Underlying protobuf cancellation info.\n   */\n  readonly raw: RawNexusOperationExecutionCancellationInfo;\n}\n\n/**\n * Info for a standalone Nexus operation execution, from list response.\n */\nexport interface NexusOperationExecution {\n  /**\n   * Unique identifier of this operation.\n   */\n  readonly operationId: string;\n\n  /**\n   * The run ID of the standalone Nexus operation.\n   */\n  readonly runId: string;\n\n  /**\n   * Endpoint name.\n   */\n  readonly endpoint: string;\n\n  /**\n   * Service name.\n   */\n  readonly service: string;\n\n  /**\n   * Operation name.\n   */\n  readonly operation: string;\n\n  /**\n   * The time the operation was originally scheduled.\n   */\n  readonly scheduleTime: Date | undefined;\n\n  /**\n   * Time the operation reached a terminal status, if closed.\n   */\n  readonly closeTime: Date | undefined;\n\n  /**\n   * Current status of the operation.\n   */\n  readonly status: NexusOperationExecutionStatus | undefined;\n\n  /**\n   * Current set of search attributes if any.\n   */\n  readonly searchAttributes: TypedSearchAttributes;\n\n  /**\n   * Number of state transitions.\n   */\n  readonly stateTransitionCount: number;\n\n  /**\n   * Duration from scheduled to close time, only populated if closed.\n   */\n  readonly executionDuration: number | undefined;\n\n  /**\n   * Underlying protobuf info.\n   */\n  readonly raw: RawNexusOperationExecutionListInfo;\n}\n\n/**\n * Detailed information about a standalone Nexus operation execution.\n */\nexport type NexusOperationExecutionDescription = Replace<\n  NexusOperationExecution,\n  {\n    raw: temporal.api.nexus.v1.INexusOperationExecutionInfo;\n  }\n> & {\n  /**\n   * More detailed breakdown if status is {@link NexusOperationExecutionStatus.RUNNING}.\n   */\n  readonly state: PendingNexusOperationState | undefined;\n\n  /**\n   * Schedule-to-close timeout for this operation in milliseconds.\n   */\n  readonly scheduleToCloseTimeout: number | undefined;\n\n  /**\n   * Schedule-to-start timeout for this operation in milliseconds.\n   */\n  readonly scheduleToStartTimeout: number | undefined;\n\n  /**\n   * Start-to-close timeout for this operation in milliseconds.\n   */\n  readonly startToCloseTimeout: number | undefined;\n\n  /**\n   * Current attempt number.\n   */\n  readonly attempt: number;\n\n  /**\n   * Scheduled time plus schedule_to_close_timeout.\n   */\n  readonly expirationTime: Date | undefined;\n\n  /**\n   * Time when the last attempt completed.\n   */\n  readonly lastAttemptCompleteTime: Date | undefined;\n\n  /**\n   * Time when the next attempt will be scheduled.\n   */\n  readonly nextAttemptScheduleTime: Date | undefined;\n\n  /**\n   * Failure from the last failed attempt, if any.\n   */\n  readonly lastAttemptFailure: Error | undefined;\n\n  /**\n   * Reason the operation is blocked, if any.\n   */\n  readonly blockedReason: string | undefined;\n\n  /**\n   * Server-generated request ID used as an idempotency token.\n   */\n  readonly requestId: string;\n\n  /**\n   * operationToken is only set for asynchronous operations after a successful start_operation call.\n   */\n  readonly operationToken: string | undefined;\n\n  /**\n   * Identity of the client that started this operation.\n   */\n  readonly identity: string;\n\n  /**\n   * Cancellation info if cancellation was requested.\n   */\n  readonly cancellationInfo: NexusOperationExecutionCancellationInfo | undefined;\n\n  staticSummary: () => Promise<string | undefined>;\n  staticDetails: () => Promise<string | undefined>;\n};\n\n/**\n * Count of standalone Nexus operation executions, optionally grouped by a search attribute.\n */\nexport interface NexusOperationExecutionCount {\n  readonly count: number;\n  readonly groups: readonly NexusOperationExecutionCountGroup[];\n}\n\n/**\n * A group within a count aggregation.\n */\nexport interface NexusOperationExecutionCountGroup {\n  readonly count: number;\n  readonly groupValues: readonly TypedSearchAttributeValue<SearchAttributeType>[];\n}\n\n/**\n * Options for starting a standalone Nexus operation via\n * {@link NexusServiceClient.startOperation} or {@link NexusServiceClient.executeOperation}.\n */\nexport interface StartNexusOperationOptions {\n  /**\n   * Caller-side identifier for this operation. Must be unique among operations in the\n   * same namespace, subject to {@link idReusePolicy} and {@link idConflictPolicy}.\n   */\n  id: string;\n\n  /**\n   * Schedule-to-close timeout for this operation.\n   */\n  scheduleToCloseTimeout?: Duration;\n\n  /**\n   * Schedule-to-start timeout for this operation.\n   */\n  scheduleToStartTimeout?: Duration;\n\n  /**\n   * Start-to-close timeout for this operation.\n   */\n  startToCloseTimeout?: Duration;\n\n  /**\n   * Single-line Temporal-markdown summary used by user interfaces to display operation metadata.\n   */\n  summary?: string;\n\n  /**\n   * How to handle an operation ID that was used by a previously closed operation.\n   * @default {@link NexusOperationIdReusePolicy.ALLOW_DUPLICATE}\n   */\n  idReusePolicy?: NexusOperationIdReusePolicy;\n\n  /**\n   * How to handle an operation ID that is in use by a currently running operation.\n   * @default {@link NexusOperationIdConflictPolicy.FAIL}\n   */\n  idConflictPolicy?: NexusOperationIdConflictPolicy;\n\n  /**\n   * Search attributes for indexing.\n   */\n  searchAttributes?: SearchAttributePair[] | TypedSearchAttributes;\n\n  /**\n   * Headers to attach to the Nexus request. Transmitted to the handler as-is.\n   * Useful for propagating tracing information.\n   */\n  headers?: Record<string, string>;\n}\n\n/**\n * Options for {@link NexusClient.list}.\n */\nexport interface ListNexusOperationsOptions {\n  /**\n   * Visibility list filter query. See https://docs.temporal.io/list-filter for syntax.\n   */\n  query?: string;\n\n  /**\n   * Maximum number of operations to return per page.\n   */\n  pageSize?: number;\n}\n\n/**\n * Options for {@link NexusClient.getHandle}.\n */\nexport interface GetNexusOperationHandleOptions {\n  /**\n   * If provided, targets this specific run of the operation. If absent, targets the latest run.\n   */\n  runId?: string;\n\n  /**\n   * Type information for decoding the operation result.\n   */\n  typeInfo?: Pick<PayloadTypeInfo, 'outputType'>;\n}\n\n/**\n * Options for {@link NexusOperationHandle.describe}\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface DescribeNexusOperationOptions {}\n","import { status as grpcStatus } from '@grpc/grpc-js';\nimport type * as nexus from 'nexus-rpc';\nimport { v4 as uuid4 } from 'uuid';\nimport { composeInterceptors } from '@temporalio/common/lib/interceptors';\nimport { SymbolBasedInstanceOfError } from '@temporalio/common/lib/type-helpers';\nimport {\n  decodeTypedSearchAttributes,\n  encodeUnifiedSearchAttributes,\n  typedSearchAttributePayloadConverter,\n} from '@temporalio/common/lib/converter/payload-search-attributes';\nimport {\n  decodeFromPayloadsAtIndex,\n  decodeOptionalFailureToOptionalError,\n  decodeOptionalSinglePayload,\n  encodeToPayload,\n  extstoreInboundOptions,\n  extstoreStoreOptions,\n  visit,\n  walkDescribeNexusOperationExecutionResponse,\n  walkListNexusOperationExecutionsResponse,\n  walkPollNexusOperationExecutionResponse,\n  walkStartNexusOperationExecutionRequest,\n} from '@temporalio/common/lib/internal-non-workflow';\nimport { filterNullAndUndefined } from '@temporalio/common/lib/internal-workflow';\nimport { msOptionalToTs, optionalTsToDate, optionalTsToMs } from '@temporalio/common/lib/time';\nimport { temporal } from '@temporalio/proto';\nimport type { LoadedDataConverter, TypeInfo } from '@temporalio/common';\nimport type { SearchAttributeType, TypedSearchAttributeValue } from '@temporalio/common/lib/search-attributes';\nimport { decode } from '@temporalio/common/lib/encoding';\nimport type { BaseClientOptions, LoadedWithDefaults, WithDefaults } from './base-client';\nimport { BaseClient, defaultBaseClientOptions } from './base-client';\nimport { isGrpcServiceError, ServiceError } from './errors';\nimport { rethrowKnownErrorTypes, extractNexusOperationAlreadyStartedRunId } from './helpers';\nimport type {\n  CancelNexusOperationInput,\n  CountNexusOperationsInput,\n  DescribeNexusOperationInput,\n  GetNexusOperationResultInput,\n  ListNexusOperationsInput,\n  NexusClientInterceptor,\n  StartNexusOperationInput,\n  TerminateNexusOperationInput,\n} from './interceptors';\nimport {\n  decodeNexusOperationCancellationState,\n  decodeNexusOperationExecutionStatus,\n  decodePendingNexusOperationState,\n  encodeNexusOperationIdConflictPolicy,\n  encodeNexusOperationIdReusePolicy,\n} from './nexus-types';\nimport type {\n  DescribeNexusOperationOptions,\n  GetNexusOperationHandleOptions,\n  ListNexusOperationsOptions,\n  NexusOperationExecutionCancellationInfo,\n  NexusOperationExecutionCount,\n  NexusOperationExecutionDescription,\n  NexusOperationExecution,\n  RawNexusOperationExecutionCancellationInfo,\n  RawNexusOperationExecutionInfo,\n  RawNexusOperationExecutionListInfo,\n  StartNexusOperationOptions,\n} from './nexus-types';\n\nexport interface NexusClientOptions extends BaseClientOptions {\n  /**\n   * Used to override and extend default client behavior.\n   */\n  interceptors?: NexusClientInterceptor[];\n}\n\nexport type LoadedNexusClientOptions = LoadedWithDefaults<NexusClientOptions>;\n\nfunction defaultNexusClientOptions(): WithDefaults<NexusClientOptions> {\n  return {\n    ...defaultBaseClientOptions(),\n    interceptors: [],\n  };\n}\n\n/**\n * Handle to a standalone Nexus operation execution.\n *\n * Use this to poll for results, describe, cancel, or terminate the operation.\n *\n * @experimental Nexus Standalone Operations are experimental.\n */\nexport interface NexusOperationHandle<O = unknown> {\n  readonly operationId: string;\n  readonly runId?: string;\n  readonly client: NexusClient;\n\n  /**\n   * Wait for the operation to complete and return its result.\n   *\n   * @throws {@link NexusOperationFailureError} if the operation completes with a failure outcome.\n   *\n   * @experimental Nexus Standalone Operations are experimental.\n   */\n  result(): Promise<O>;\n\n  /**\n   * Describe the Nexus operation execution.\n   *\n   * @experimental Nexus Standalone Operations are experimental.\n   */\n  describe(options?: DescribeNexusOperationOptions): Promise<NexusOperationExecutionDescription>;\n\n  /**\n   * Request cancellation of the operation.\n   *\n   * @param reason optional reason for the cancellation.\n   *\n   * @experimental Nexus Standalone Operations are experimental.\n   */\n  cancel(reason?: string): Promise<void>;\n\n  /**\n   * Terminate the Nexus operation execution immediately.\n   *\n   * @experimental Nexus Standalone Operations are experimental.\n   */\n  terminate(reason?: string): Promise<void>;\n}\n\n/**\n * Resolves the result type carried by a Nexus operation handle type hint.\n *\n * A NexusOperationHandle cannot infer a result type from an operation ID alone,\n * so callers may provide either the expected result type directly or a\n * Nexus operation definition type when acquiring a handle.\n * Operation definitions are unwrapped to their output type, all other types are\n * treated as the result type itself.\n */\ntype NexusOperationHandleResult<T> = T extends nexus.OperationDefinition<any, infer O> ? O : T;\n\n/**\n * Typed service client for a specific Nexus service + endpoint pair.\n *\n * Created via {@link NexusClient.createServiceClient}. Provides type-safe\n * {@link startOperation} and {@link executeOperation} based on the service definition's operation types.\n *\n * @experimental Nexus Standalone Operations are experimental.\n */\nexport interface NexusServiceClient<T extends nexus.ServiceDefinition> {\n  readonly endpoint: string;\n  readonly service: T;\n\n  /**\n   * Start a Nexus operation and return a handle.\n   *\n   * @experimental Nexus Standalone Operations are experimental.\n   */\n  startOperation<Op extends T['operations'][keyof T['operations']]>(\n    operation: Op,\n    input: nexus.OperationInput<Op>,\n    options: StartNexusOperationOptions\n  ): Promise<NexusOperationHandle<nexus.OperationOutput<Op>>>;\n  startOperation<K extends nexus.OperationKey<T['operations']>>(\n    op: K,\n    input: nexus.OperationInput<T['operations'][K]>,\n    options: StartNexusOperationOptions\n  ): Promise<NexusOperationHandle<nexus.OperationOutput<T['operations'][K]>>>;\n\n  /**\n   * Start a Nexus operation and wait for its result.\n   *\n   * Convenience for {@link startOperation} followed by {@link NexusOperationHandle.result}.\n   *\n   * @experimental Nexus Standalone Operations are experimental.\n   */\n  executeOperation<Op extends T['operations'][keyof T['operations']]>(\n    operation: Op,\n    input: nexus.OperationInput<Op>,\n    options: StartNexusOperationOptions\n  ): Promise<nexus.OperationOutput<Op>>;\n\n  executeOperation<K extends nexus.OperationKey<T['operations']>>(\n    op: K,\n    input: nexus.OperationInput<T['operations'][K]>,\n    options: StartNexusOperationOptions\n  ): Promise<nexus.OperationOutput<T['operations'][K]>>;\n}\n\n/**\n * Client for standalone Nexus operations. Access via {@link Client.nexus}.\n *\n * Use {@link createServiceClient} to get a typed service client, or call the namespace-wide\n * {@link list}, {@link count}, and {@link getHandle} methods directly.\n *\n * @see {@link Client}\n *\n * @experimental Nexus Standalone Operations are experimental.\n */\nexport class NexusClient extends BaseClient {\n  public readonly options: LoadedNexusClientOptions;\n  protected readonly interceptors: NexusClientInterceptor[];\n\n  constructor(options?: NexusClientOptions) {\n    super(options);\n    this.options = {\n      ...defaultNexusClientOptions(),\n      ...filterNullAndUndefined(options ?? {}),\n      loadedDataConverter: this.dataConverter,\n    };\n    this.interceptors = this.options.interceptors;\n  }\n\n  /**\n   * Create a typed service client for starting and executing Nexus operations on a specific endpoint + service.\n   *\n   * @experimental Nexus Standalone Operations are experimental.\n   */\n  public createServiceClient<T extends nexus.ServiceDefinition>(options: {\n    endpoint: string;\n    service: T;\n  }): NexusServiceClient<T> {\n    const { endpoint, service } = options;\n\n    type OperationReference<T extends nexus.ServiceDefinition> =\n      | nexus.OperationKey<T['operations']>\n      | T['operations'][nexus.OperationKey<T['operations']>];\n\n    type OperationInput<\n      T extends nexus.ServiceDefinition,\n      Op extends OperationReference<T>,\n    > = Op extends nexus.OperationKey<T['operations']>\n      ? nexus.OperationInput<T['operations'][Op]>\n      : nexus.OperationInput<Op>;\n\n    type OperationOutput<\n      T extends nexus.ServiceDefinition,\n      Op extends OperationReference<T>,\n    > = Op extends nexus.OperationKey<T['operations']>\n      ? nexus.OperationOutput<T['operations'][Op]>\n      : nexus.OperationOutput<Op>;\n\n    const startOperation = async <Op extends OperationReference<T>>(\n      operation: Op,\n      input: OperationInput<T, Op>,\n      options: StartNexusOperationOptions\n    ): Promise<NexusOperationHandle<OperationOutput<T, Op>>> => {\n      let operationName: string;\n      let inputType: TypeInfo | undefined;\n      let outputType: TypeInfo | undefined;\n      if (typeof operation === 'string') {\n        const definition = service.operations[operation];\n        if (definition == null) {\n          // The OperationReference<T> type guarantees that if operation is\n          // a string then it is a key of service.operations. This runtime\n          // check is for extra safety.\n          throw new TypeError(\n            `Unable to resolve Nexus operation name from key ${operation} for service ${service.name}`\n          );\n        }\n        operationName = definition.name;\n        inputType = definition.inputType;\n        outputType = definition.outputType;\n      } else {\n        operationName = operation.name;\n        inputType = operation.inputType;\n        outputType = operation.outputType;\n      }\n\n      const handle = await this.startNexusOperation({\n        endpoint,\n        service: service.name,\n        operation: operationName,\n        arg: input,\n        id: options.id,\n        scheduleToCloseTimeout: options.scheduleToCloseTimeout,\n        scheduleToStartTimeout: options.scheduleToStartTimeout,\n        startToCloseTimeout: options.startToCloseTimeout,\n        summary: options.summary,\n        idReusePolicy: options.idReusePolicy,\n        idConflictPolicy: options.idConflictPolicy,\n        searchAttributes: options.searchAttributes,\n        headers: options.headers,\n        inputType,\n        outputType,\n      });\n\n      // NexusClientInterceptor is not generic in the operation definition, so its handle result type is unknown.\n      // Rebind that result to the output type promised by this typed service-client call.\n      return handle as NexusOperationHandle<OperationOutput<T, Op>>;\n    };\n\n    const executeOperation = async <Op extends OperationReference<T>>(\n      operation: Op,\n      input: OperationInput<T, Op>,\n      options: StartNexusOperationOptions\n    ): Promise<OperationOutput<T, Op>> => {\n      const handle = await startOperation(operation, input, options);\n      return await handle.result();\n    };\n\n    return {\n      endpoint,\n      service,\n      startOperation,\n      executeOperation,\n    };\n  }\n\n  /**\n   * Get a handle to an existing standalone Nexus operation.\n   *\n   * If {@link GetNexusOperationHandleOptions.runId} is not provided, operations on the handle\n   * (like {@link NexusOperationHandle.result}) will target the latest run.\n   *\n   * @experimental Nexus Standalone Operations are experimental.\n   */\n  public getHandle<T>(\n    operationId: string,\n    options?: GetNexusOperationHandleOptions\n  ): NexusOperationHandle<NexusOperationHandleResult<T>>;\n  public getHandle(operationId: string, options?: GetNexusOperationHandleOptions): NexusOperationHandle {\n    return this.createNexusOperationHandle({\n      operationId,\n      runId: options?.runId,\n      outputType: options?.typeInfo?.outputType,\n    });\n  }\n\n  /**\n   * List standalone Nexus operations matching a visibility query.\n   *\n   * @experimental Nexus Standalone Operations are experimental.\n   */\n  public list(options?: ListNexusOperationsOptions): AsyncIterable<NexusOperationExecution> {\n    const input: ListNexusOperationsInput = {\n      query: options?.query,\n      pageSize: options?.pageSize,\n    };\n    const next = this.listHandler.bind(this);\n    const list = composeInterceptors(this.interceptors, 'list', next);\n    return list(input);\n  }\n\n  /**\n   * Count standalone Nexus operations matching a visibility query.\n   *\n   * @experimental Nexus Standalone Operations are experimental.\n   */\n  public async count(query?: string): Promise<NexusOperationExecutionCount> {\n    const input: CountNexusOperationsInput = { query };\n    const next = this.countHandler.bind(this);\n    const count = composeInterceptors(this.interceptors, 'count', next);\n    return await count(input);\n  }\n\n  protected async startNexusOperation(input: StartNexusOperationInput): Promise<NexusOperationHandle> {\n    const next = this.startNexusOperationHandler.bind(this);\n    const start = composeInterceptors(this.interceptors, 'startOperation', next);\n    return await start(input);\n  }\n\n  protected async getNexusOperationResult(input: GetNexusOperationResultInput): Promise<unknown> {\n    const next = this.getResultHandler.bind(this);\n    const get = composeInterceptors(this.interceptors, 'getResult', next);\n    return await get(input);\n  }\n\n  protected async describeNexusOperation(\n    input: DescribeNexusOperationInput\n  ): Promise<NexusOperationExecutionDescription> {\n    const next = this.describeHandler.bind(this);\n    const describe = composeInterceptors(this.interceptors, 'describe', next);\n    return await describe(input);\n  }\n\n  protected async cancelNexusOperation(input: CancelNexusOperationInput): Promise<void> {\n    const next = this.cancelHandler.bind(this);\n    const cancel = composeInterceptors(this.interceptors, 'cancel', next);\n    await cancel(input);\n  }\n\n  protected async terminateNexusOperation(input: TerminateNexusOperationInput): Promise<void> {\n    const next = this.terminateHandler.bind(this);\n    const terminate = composeInterceptors(this.interceptors, 'terminate', next);\n    await terminate(input);\n  }\n\n  protected async startNexusOperationHandler(input: StartNexusOperationInput): Promise<NexusOperationHandle> {\n    const inputPayload = await encodeToPayload(this.dataConverter, input.arg, undefined, input.inputType);\n    const searchAttributes =\n      input.searchAttributes != null\n        ? { indexedFields: encodeUnifiedSearchAttributes(undefined, input.searchAttributes) }\n        : undefined;\n    const userMetadata =\n      input.summary != null\n        ? {\n            summary: await encodeToPayload(this.dataConverter, input.summary),\n          }\n        : undefined;\n    const req: temporal.api.workflowservice.v1.IStartNexusOperationExecutionRequest = {\n      namespace: this.options.namespace,\n      identity: this.options.identity,\n      requestId: uuid4(),\n      operationId: input.id,\n      endpoint: input.endpoint,\n      service: input.service,\n      operation: input.operation,\n      scheduleToCloseTimeout: msOptionalToTs(input.scheduleToCloseTimeout),\n      scheduleToStartTimeout: msOptionalToTs(input.scheduleToStartTimeout),\n      startToCloseTimeout: msOptionalToTs(input.startToCloseTimeout),\n      input: inputPayload,\n      idReusePolicy: input.idReusePolicy != null ? encodeNexusOperationIdReusePolicy(input.idReusePolicy) : undefined,\n      idConflictPolicy:\n        input.idConflictPolicy != null ? encodeNexusOperationIdConflictPolicy(input.idConflictPolicy) : undefined,\n      searchAttributes,\n      nexusHeader: input.headers ?? {},\n      userMetadata,\n    };\n    const externalStorage = this.dataConverter.externalStorage;\n    if (externalStorage) {\n      await visit(req, walkStartNexusOperationExecutionRequest, extstoreStoreOptions(externalStorage));\n    }\n    let res: temporal.api.workflowservice.v1.IStartNexusOperationExecutionResponse;\n    try {\n      res = await this.connection.workflowService.startNexusOperationExecution(req);\n    } catch (err: unknown) {\n      this.rethrowGrpcError(err, 'Failed to start Nexus operation', input.id);\n    }\n    return this.createNexusOperationHandle({\n      operationId: input.id,\n      runId: res.runId ?? undefined,\n      outputType: input.outputType,\n    });\n  }\n\n  protected createNexusOperationHandle<O>(opts: {\n    operationId: string;\n    runId?: string;\n    outputType?: TypeInfo;\n  }): NexusOperationHandle<O> {\n    let cachedResult:\n      | { state: 'not-requested' }\n      | { state: 'success'; value: O }\n      | { state: 'failed'; failure: NexusOperationFailureError } = { state: 'not-requested' };\n    return {\n      operationId: opts.operationId,\n      runId: opts.runId,\n      client: this,\n      async result(): Promise<O> {\n        if (cachedResult.state === 'not-requested') {\n          try {\n            const result = (await this.client.getNexusOperationResult({\n              operationId: this.operationId,\n              runId: this.runId,\n              outputType: opts.outputType,\n            })) as O;\n            cachedResult = { state: 'success', value: result };\n            return result;\n          } catch (err) {\n            if (err instanceof NexusOperationFailureError) {\n              cachedResult = { state: 'failed', failure: err };\n            }\n            throw err;\n          }\n        } else if (cachedResult.state === 'success') {\n          return cachedResult.value;\n        } else {\n          throw cachedResult.failure;\n        }\n      },\n      async describe(_options?: DescribeNexusOperationOptions): Promise<NexusOperationExecutionDescription> {\n        return await this.client.describeNexusOperation({\n          operationId: this.operationId,\n          runId: this.runId,\n        });\n      },\n      async cancel(reason?: string): Promise<void> {\n        return await this.client.cancelNexusOperation({\n          operationId: this.operationId,\n          runId: this.runId,\n          reason,\n        });\n      },\n      async terminate(reason?: string): Promise<void> {\n        return await this.client.terminateNexusOperation({\n          operationId: this.operationId,\n          runId: this.runId,\n          reason,\n        });\n      },\n    };\n  }\n\n  protected async getResultHandler(input: GetNexusOperationResultInput): Promise<unknown> {\n    const req: temporal.api.workflowservice.v1.IPollNexusOperationExecutionRequest = {\n      namespace: this.options.namespace,\n      operationId: input.operationId,\n      runId: input.runId ?? '',\n      waitStage: temporal.api.enums.v1.NexusOperationWaitStage.NEXUS_OPERATION_WAIT_STAGE_CLOSED,\n    };\n    for (;;) {\n      let res: temporal.api.workflowservice.v1.IPollNexusOperationExecutionResponse;\n      try {\n        res = await this.connection.workflowService.pollNexusOperationExecution(req);\n      } catch (err: unknown) {\n        this.rethrowGrpcError(err, 'Failed to poll Nexus operation result', input.operationId);\n      }\n\n      const externalStorage = this.dataConverter.externalStorage;\n      await visit(res, walkPollNexusOperationExecutionResponse, extstoreInboundOptions(externalStorage));\n\n      // The operation is closed if we have a result or failure\n      if (res.result) {\n        return await decodeFromPayloadsAtIndex(this.dataConverter, 0, [res.result], undefined, input.outputType);\n      }\n      if (res.failure) {\n        const cause = await decodeOptionalFailureToOptionalError(this.dataConverter, res.failure);\n        throw new NexusOperationFailureError(\n          `Nexus operation failed: ${res.failure.message ?? 'unknown failure'}`,\n          cause ?? new Error(res.failure.message ?? 'unknown failure')\n        );\n      }\n    }\n  }\n\n  protected async describeHandler(input: DescribeNexusOperationInput): Promise<NexusOperationExecutionDescription> {\n    const req: temporal.api.workflowservice.v1.IDescribeNexusOperationExecutionRequest = {\n      namespace: this.options.namespace,\n      operationId: input.operationId,\n      runId: input.runId ?? '',\n    };\n    let res: temporal.api.workflowservice.v1.IDescribeNexusOperationExecutionResponse;\n    try {\n      res = await this.connection.workflowService.describeNexusOperationExecution(req);\n    } catch (err: unknown) {\n      this.rethrowGrpcError(err, 'Failed to describe Nexus operation', input.operationId);\n    }\n    const externalStorage = this.dataConverter.externalStorage;\n    await visit(res, walkDescribeNexusOperationExecutionResponse, extstoreInboundOptions(externalStorage));\n    if (!res.info) {\n      throw new ServiceError('Received invalid Nexus operation description from server: missing info');\n    }\n    return await nexusOperationExecutionDescriptionFromProto(res.info, this.dataConverter);\n  }\n\n  protected async cancelHandler(input: CancelNexusOperationInput): Promise<void> {\n    const req: temporal.api.workflowservice.v1.IRequestCancelNexusOperationExecutionRequest = {\n      namespace: this.options.namespace,\n      operationId: input.operationId,\n      runId: input.runId ?? '',\n      identity: this.options.identity,\n      requestId: uuid4(),\n      reason: input.reason,\n    };\n    try {\n      await this.connection.workflowService.requestCancelNexusOperationExecution(req);\n    } catch (err: unknown) {\n      this.rethrowGrpcError(err, 'Failed to cancel Nexus operation', input.operationId);\n    }\n  }\n\n  protected async terminateHandler(input: TerminateNexusOperationInput): Promise<void> {\n    const req: temporal.api.workflowservice.v1.ITerminateNexusOperationExecutionRequest = {\n      namespace: this.options.namespace,\n      operationId: input.operationId,\n      runId: input.runId ?? '',\n      identity: this.options.identity,\n      requestId: uuid4(),\n      reason: input.reason,\n    };\n    try {\n      await this.connection.workflowService.terminateNexusOperationExecution(req);\n    } catch (err: unknown) {\n      this.rethrowGrpcError(err, 'Failed to terminate Nexus operation', input.operationId);\n    }\n  }\n\n  protected async *listHandler(input: ListNexusOperationsInput): AsyncIterable<NexusOperationExecution> {\n    let nextPageToken: Uint8Array | undefined = undefined;\n    for (;;) {\n      let response: temporal.api.workflowservice.v1.IListNexusOperationExecutionsResponse;\n      try {\n        response = await this.connection.workflowService.listNexusOperationExecutions({\n          namespace: this.options.namespace,\n          query: input.query,\n          pageSize: input.pageSize,\n          nextPageToken,\n        });\n      } catch (err: unknown) {\n        this.rethrowGrpcError(err, 'Failed to list Nexus operations', undefined);\n      }\n      const externalStorage = this.dataConverter.externalStorage;\n      await visit(response, walkListNexusOperationExecutionsResponse, extstoreInboundOptions(externalStorage));\n      for (const raw of response.operations ?? []) {\n        yield nexusOperationListInfoFromProto(raw);\n      }\n      if (response.nextPageToken == null || response.nextPageToken.length === 0) break;\n      nextPageToken = response.nextPageToken;\n    }\n  }\n\n  protected async countHandler(input: CountNexusOperationsInput): Promise<NexusOperationExecutionCount> {\n    try {\n      const res = await this.connection.workflowService.countNexusOperationExecutions({\n        namespace: this.options.namespace,\n        query: input.query,\n      });\n      return nexusCountFromProto(res);\n    } catch (err: unknown) {\n      this.rethrowGrpcError(err, 'Failed to count Nexus operations', undefined);\n    }\n  }\n\n  protected rethrowGrpcError(err: unknown, fallbackMessage: string, operationId?: string, runId?: string): never {\n    if (isGrpcServiceError(err)) {\n      rethrowKnownErrorTypes(err);\n\n      if (err.code === grpcStatus.ALREADY_EXISTS && operationId != null) {\n        throw new NexusOperationAlreadyStartedError(operationId, extractNexusOperationAlreadyStartedRunId(err));\n      }\n\n      if (err.code === grpcStatus.NOT_FOUND && operationId != null) {\n        throw new NexusOperationNotFoundError(operationId, runId);\n      }\n\n      throw new ServiceError(fallbackMessage, { cause: err });\n    }\n\n    throw new ServiceError('Unexpected error while making gRPC request', { cause: err as Error });\n  }\n}\n\nasync function cancellationInfoFromProto(\n  raw: RawNexusOperationExecutionCancellationInfo,\n  dataConverter: LoadedDataConverter\n): Promise<NexusOperationExecutionCancellationInfo> {\n  return {\n    requestedTime: optionalTsToDate(raw.requestedTime),\n    state: decodeNexusOperationCancellationState(raw.state),\n    attempt: raw.attempt ?? 0,\n    lastAttemptCompleteTime: optionalTsToDate(raw.lastAttemptCompleteTime),\n    nextAttemptScheduleTime: optionalTsToDate(raw.nextAttemptScheduleTime),\n    lastAttemptFailure: await decodeOptionalFailureToOptionalError(dataConverter, raw.lastAttemptFailure),\n    blockedReason: raw.blockedReason ?? undefined,\n    reason: raw.reason ?? '',\n    raw,\n  };\n}\n\nasync function nexusOperationExecutionDescriptionFromProto(\n  raw: RawNexusOperationExecutionInfo,\n  dataConverter: LoadedDataConverter\n): Promise<NexusOperationExecutionDescription> {\n  let decodedMetadata:\n    | { state: 'pending' }\n    | { state: 'requested'; value: Promise<{ summary: string | undefined; details: string | undefined }> } = {\n    state: 'pending',\n  };\n  const decodeMetadata = async () => {\n    if (decodedMetadata.state === 'pending') {\n      const metadataPromise = Promise.all([\n        decodeOptionalSinglePayload<string>(dataConverter, raw.userMetadata?.summary),\n        decodeOptionalSinglePayload<string>(dataConverter, raw.userMetadata?.details),\n      ]).then(([summary, details]) => {\n        return {\n          summary: summary ?? undefined,\n          details: details ?? undefined,\n        };\n      });\n      decodedMetadata = {\n        state: 'requested',\n        value: metadataPromise,\n      };\n    }\n    return await decodedMetadata.value;\n  };\n  return {\n    operationId: raw.operationId ?? '',\n    runId: raw.runId ?? '',\n    endpoint: raw.endpoint ?? '',\n    service: raw.service ?? '',\n    operation: raw.operation ?? '',\n    status: decodeNexusOperationExecutionStatus(raw.status),\n    state: decodePendingNexusOperationState(raw.state),\n    scheduleToCloseTimeout: optionalTsToMs(raw.scheduleToCloseTimeout),\n    scheduleToStartTimeout: optionalTsToMs(raw.scheduleToStartTimeout),\n    startToCloseTimeout: optionalTsToMs(raw.startToCloseTimeout),\n    attempt: raw.attempt ?? 0,\n    scheduleTime: optionalTsToDate(raw.scheduleTime),\n    expirationTime: optionalTsToDate(raw.expirationTime),\n    closeTime: optionalTsToDate(raw.closeTime),\n    lastAttemptCompleteTime: optionalTsToDate(raw.lastAttemptCompleteTime),\n    lastAttemptFailure: await decodeOptionalFailureToOptionalError(dataConverter, raw.lastAttemptFailure),\n    nextAttemptScheduleTime: optionalTsToDate(raw.nextAttemptScheduleTime),\n    executionDuration: optionalTsToMs(raw.executionDuration),\n    cancellationInfo: raw.cancellationInfo\n      ? await cancellationInfoFromProto(raw.cancellationInfo, dataConverter)\n      : undefined,\n    blockedReason: raw.blockedReason ?? undefined,\n    requestId: raw.requestId ?? '',\n    operationToken: raw.operationToken ?? undefined,\n    stateTransitionCount: raw.stateTransitionCount?.toNumber() ?? 0,\n    searchAttributes: decodeTypedSearchAttributes(raw.searchAttributes?.indexedFields),\n    identity: raw.identity ?? '',\n    raw,\n    staticDetails: async () => (await decodeMetadata()).details,\n    staticSummary: async () => (await decodeMetadata()).summary,\n  };\n}\n\nfunction nexusOperationListInfoFromProto(raw: RawNexusOperationExecutionListInfo): NexusOperationExecution {\n  return {\n    operationId: raw.operationId ?? '',\n    runId: raw.runId ?? '',\n    endpoint: raw.endpoint ?? '',\n    service: raw.service ?? '',\n    operation: raw.operation ?? '',\n    scheduleTime: optionalTsToDate(raw.scheduleTime),\n    closeTime: optionalTsToDate(raw.closeTime),\n    status: decodeNexusOperationExecutionStatus(raw.status),\n    searchAttributes: decodeTypedSearchAttributes(raw.searchAttributes?.indexedFields),\n    stateTransitionCount: raw.stateTransitionCount?.toNumber() ?? 0,\n    executionDuration: optionalTsToMs(raw.executionDuration),\n    raw,\n  };\n}\n\nfunction nexusCountFromProto(\n  raw: temporal.api.workflowservice.v1.ICountNexusOperationExecutionsResponse\n): NexusOperationExecutionCount {\n  return {\n    count: raw.count?.toNumber() ?? 0,\n    groups: (raw.groups ?? []).map((group) => ({\n      count: group.count?.toNumber() ?? 0,\n      groupValues: (group.groupValues ?? []).map(decodeCountGroupValue),\n    })),\n  };\n}\n\nfunction decodeCountGroupValue(value: temporal.api.common.v1.IPayload): TypedSearchAttributeValue<SearchAttributeType> {\n  const decoded = typedSearchAttributePayloadConverter.fromPayload<\n    TypedSearchAttributeValue<SearchAttributeType> | undefined\n  >(value);\n  if (decoded === undefined) {\n    throw new ServiceError(\n      'Received invalid Nexus operation count group value from server: ' +\n        `metadata.type=${decodePayloadMetadata(value.metadata?.type) ?? '<missing>'}, ` +\n        `metadata.encoding=${decodePayloadMetadata(value.metadata?.encoding) ?? '<missing>'}`\n    );\n  }\n  return decoded;\n}\n\nfunction decodePayloadMetadata(value: Uint8Array | null | undefined): string | undefined {\n  return value == null ? undefined : decode(value);\n}\n\n/**\n * Thrown by {@link NexusOperationHandle.result} when the operation completes with a failure outcome.\n * The original failure is available on `cause`.\n */\n@SymbolBasedInstanceOfError('NexusOperationFailureError')\nexport class NexusOperationFailureError extends Error {\n  public constructor(\n    message: string,\n    public readonly cause: Error\n  ) {\n    super(message, { cause });\n  }\n}\n\n/**\n * Thrown by {@link NexusServiceClient.startOperation} when the server returns ALREADY_EXISTS\n * because an operation with the given ID already exists and the reuse/conflict policies disallow reuse.\n */\n@SymbolBasedInstanceOfError('NexusOperationAlreadyStartedError')\nexport class NexusOperationAlreadyStartedError extends Error {\n  public constructor(\n    public readonly operationId: string,\n    public readonly runId?: string\n  ) {\n    super(`Nexus operation already started: operationId=${operationId}${runId ? ` runId=${runId}` : ''}`);\n  }\n}\n\n/**\n * Thrown when a Nexus Operation with the given operationId and runId is not known by the Temporal Server.\n */\n@SymbolBasedInstanceOfError('NexusOperationNotFoundError')\nexport class NexusOperationNotFoundError extends Error {\n  public constructor(\n    public readonly operationId: string,\n    public readonly runId?: string\n  ) {\n    super(`Nexus operation not found: operationId=${operationId}${runId ? ` runId=${runId}` : ''}`);\n  }\n}\n","import type { Replace } from '@temporalio/common/lib/type-helpers';\nimport { checkExtends } from '@temporalio/common/lib/type-helpers';\nimport type {\n  Duration,\n  SearchAttributes,\n  Workflow,\n  TypedSearchAttributes,\n  SearchAttributePair,\n} from '@temporalio/common';\nimport { makeProtoEnumConverters } from '@temporalio/common/lib/internal-workflow';\nimport type { temporal } from '@temporalio/proto';\nimport type { WorkflowStartOptions } from './workflow-options';\n\n/**\n * The specification of a Schedule to be created, as expected by {@link ScheduleClient.create}.\n */\nexport interface ScheduleOptions<A extends ScheduleOptionsAction = ScheduleOptionsAction> {\n  /**\n   * Schedule Id\n   *\n   * We recommend using a meaningful business identifier.\n   */\n  scheduleId: string;\n\n  /**\n   * When Actions should be taken\n   */\n  spec: ScheduleSpec;\n\n  /**\n   * Which Action to take\n   */\n  action: A;\n\n  policies?: {\n    /**\n     * Controls what happens when an Action would be started by a Schedule at the same time that an older Action is still\n     * running. This can be changed after a Schedule has taken some Actions, and some changes might produce\n     * unintuitive results. In general, the later policy overrides the earlier policy.\n     *\n     * @default ScheduleOverlapPolicy.SKIP\n     */\n    overlap?: ScheduleOverlapPolicy;\n\n    /**\n     * The Temporal Server might be down or unavailable at the time when a Schedule should take an Action. When the Server\n     * comes back up, `catchupWindow` controls which missed Actions should be taken at that point. The default is one\n     * minute, which means that the Schedule attempts to take any Actions that wouldn't be more than one minute late. It\n     * takes those Actions according to the {@link ScheduleOverlapPolicy}. An outage that lasts longer than the Catchup\n     * Window could lead to missed Actions. (But you can always {@link ScheduleHandle.backfill}.)\n     *\n     * @default 1 year\n     * @format number of milliseconds or {@link https://www.npmjs.com/package/ms | ms-formatted string}\n     */\n    catchupWindow?: Duration;\n\n    /**\n     * When an Action times out or reaches the end of its Retry Policy, {@link pause}.\n     *\n     * With {@link ScheduleOverlapPolicy.ALLOW_ALL}, this pause might not apply to the next Action, because the next Action\n     * might have already started previous to the failed one finishing. Pausing applies only to Actions that are scheduled\n     * to start after the failed one finishes.\n     *\n     * @default false\n     */\n    pauseOnFailure?: boolean;\n  };\n\n  /**\n   * Additional non-indexed information attached to the Schedule. The values can be anything that is\n   * serializable by the {@link DataConverter}.\n   */\n  memo?: Record<string, unknown>;\n\n  /**\n   * Additional indexed information attached to the Schedule. More info:\n   * https://docs.temporal.io/docs/typescript/search-attributes\n   *\n   * Values are always converted using {@link JsonPayloadConverter}, even when a custom Data Converter is provided.\n   *\n   * @deprecated Use {@link typedSearchAttributes} instead.\n   */\n  searchAttributes?: SearchAttributes;\n\n  /**\n   * Additional indexed information attached to the Schedule. More info:\n   * https://docs.temporal.io/docs/typescript/search-attributes\n   *\n   * Values are always converted using {@link JsonPayloadConverter}, even when a custom Data Converter is provided.\n   *\n   * If both {@link searchAttributes} and {@link typedSearchAttributes} are provided, conflicting keys will be overwritten\n   * by {@link typedSearchAttributes}.\n   */\n  typedSearchAttributes?: SearchAttributePair[] | TypedSearchAttributes;\n\n  /**\n   * The initial state of the schedule, right after creation or update.\n   */\n  state?: {\n    /**\n     * Start in paused state.\n     *\n     * @default false\n     */\n    paused?: boolean;\n\n    /**\n     * Informative human-readable message with contextual notes, e.g. the reason\n     * a Schedule is paused. The system may overwrite this message on certain\n     * conditions, e.g. when pause-on-failure happens.\n     */\n    note?: string;\n\n    /**\n     * Limit the number of Actions to take.\n     *\n     * This number is decremented after each Action is taken, and Actions are not\n     * taken when the number is `0` (unless {@link ScheduleHandle.trigger} is called).\n     *\n     * If `undefined`, then no such limit applies.\n     *\n     * @default undefined, which allows for unlimited exections\n     */\n    remainingActions?: number;\n\n    /**\n     * Trigger one Action immediately on create.\n     *\n     * @default false\n     */\n    triggerImmediately?: boolean;\n\n    /**\n     * Runs though the specified time periods and takes Actions as if that time passed by right now, all at once. The\n     * overlap policy can be overridden for the scope of the backfill.\n     */\n    backfill?: Backfill[];\n  };\n}\n\nexport type CompiledScheduleOptions = Replace<\n  ScheduleOptions,\n  {\n    action: CompiledScheduleAction;\n  }\n>;\n\n/**\n * The specification of an updated Schedule, as expected by {@link ScheduleHandle.update}.\n */\nexport type ScheduleUpdateOptions<A extends ScheduleOptionsAction = ScheduleOptionsAction> = Replace<\n  Omit<ScheduleOptions, 'scheduleId' | 'memo'>,\n  {\n    action: A;\n    state: Omit<ScheduleOptions['state'], 'triggerImmediately' | 'backfill'>;\n  }\n>;\n\nexport type CompiledScheduleUpdateOptions = Replace<\n  ScheduleUpdateOptions,\n  {\n    action: CompiledScheduleAction;\n  }\n>;\n\n/**\n * A summary description of an existing Schedule, as returned by {@link ScheduleClient.list}.\n *\n * Note that schedule listing is eventual consistent; some returned properties may therefore\n * be undefined or incorrect for some time after creating or modifying a schedule.\n */\nexport interface ScheduleSummary {\n  /**\n   * The Schedule Id. We recommend using a meaningful business identifier.\n   */\n  scheduleId: string;\n\n  /**\n   * When will Actions be taken.\n   */\n  spec?: ScheduleSpecDescription;\n\n  /**\n   * The Action that will be taken.\n   */\n  action?: ScheduleSummaryAction;\n\n  /**\n   * Additional non-indexed information attached to the Schedule.\n   * The values can be anything that is serializable by the {@link DataConverter}.\n   */\n  memo?: Record<string, unknown>;\n\n  /**\n   * Additional indexed information attached to the Schedule. More info:\n   * https://docs.temporal.io/docs/typescript/search-attributes\n   *\n   * Values are always converted using {@link JsonPayloadConverter}, even when a custom Data Converter is provided.\n   *\n   * @deprecated Use {@link typedSearchAttributes} instead.\n   */\n  searchAttributes?: SearchAttributes;\n\n  /**\n   * Additional indexed information attached to the Schedule. More info:\n   * https://docs.temporal.io/docs/typescript/search-attributes\n   *\n   * Values are always converted using {@link JsonPayloadConverter}, even when a custom Data Converter is provided.\n   */\n  typedSearchAttributes?: TypedSearchAttributes;\n\n  state: {\n    /**\n     * Whether Schedule is currently paused.\n     */\n    paused: boolean;\n\n    /**\n     * Informative human-readable message with contextual notes, e.g. the reason a Schedule is paused.\n     * The system may overwrite this message on certain conditions, e.g. when pause-on-failure happens.\n     */\n    note?: string;\n  };\n\n  info: {\n    /**\n     * Most recent actions started (including manual triggers), sorted from older start time to newer.\n     */\n    recentActions: ScheduleExecutionResult[];\n\n    /**\n     * Next upcoming scheduled times of this Schedule\n     */\n    nextActionTimes: Date[];\n  };\n}\n\nexport interface ScheduleExecutionResult {\n  /** Time that the Action was scheduled for, including jitter */\n  scheduledAt: Date;\n\n  /** Time that the Action was actually taken */\n  takenAt: Date;\n\n  /** The Action that was taken */\n  action: ScheduleExecutionActionResult;\n}\n\nexport type ScheduleExecutionActionResult = ScheduleExecutionStartWorkflowActionResult;\n\nexport interface ScheduleExecutionStartWorkflowActionResult {\n  type: 'startWorkflow';\n  workflow: {\n    workflowId: string;\n\n    /**\n     * The Run Id of the original execution that was started by the Schedule. If the Workflow retried, did\n     * Continue-As-New, or was Reset, the following runs would have different Run Ids.\n     */\n    firstExecutionRunId: string;\n  };\n}\n\n/**\n * A detailed description of an exisiting Schedule, as returned by {@link ScheduleHandle.describe}.\n */\nexport type ScheduleDescription = {\n  /**\n   * The Schedule Id. We recommend using a meaningful business identifier.\n   */\n  scheduleId: string;\n\n  /**\n   * When will Actions be taken.\n   */\n  spec: ScheduleSpecDescription;\n\n  /**\n   * The Action that will be taken.\n   */\n  action: ScheduleDescriptionAction;\n\n  policies: {\n    /**\n     * Controls what happens when an Action would be started by a Schedule at the same time that an older Action is still\n     * running.\n     */\n    overlap: ScheduleOverlapPolicy;\n\n    /**\n     * The Temporal Server might be down or unavailable at the time when a Schedule should take an Action.\n     * When the Server comes back up, `catchupWindow` controls which missed Actions should be taken at that point.\n     * It takes those Actions according to the {@link ScheduleOverlapPolicy}. An outage that lasts longer than the\n     * Catchup Window could lead to missed Actions. (But you can always {@link ScheduleHandle.backfill}.)\n     *\n     * Unit is miliseconds.\n     */\n    catchupWindow: number;\n\n    /**\n     * When an Action times out or reaches the end of its Retry Policy, {@link pause}.\n     *\n     * With {@link ScheduleOverlapPolicy.ALLOW_ALL}, this pause might not apply to the next Action, because the next Action\n     * might have already started previous to the failed one finishing. Pausing applies only to Actions that are scheduled\n     * to start after the failed one finishes.\n     */\n    pauseOnFailure: boolean;\n  };\n\n  /**\n   * Additional non-indexed information attached to the Schedule.\n   * The values can be anything that is serializable by the {@link DataConverter}.\n   */\n  memo?: Record<string, unknown>;\n\n  /**\n   * Additional indexed information attached to the Schedule. More info:\n   * https://docs.temporal.io/docs/typescript/search-attributes\n   *\n   * Values are always converted using {@link JsonPayloadConverter}, even when a custom Data Converter is provided.\n   *\n   * @deprecated Use {@link typedSearchAttributes} instead.\n   */\n  searchAttributes: SearchAttributes;\n\n  /**\n   * Additional indexed information attached to the Schedule. More info:\n   * https://docs.temporal.io/docs/typescript/search-attributes\n   *\n   * Values are always converted using {@link JsonPayloadConverter}, even when a custom Data Converter is provided.\n   */\n  typedSearchAttributes: TypedSearchAttributes;\n\n  state: {\n    /**\n     * Whether Schedule is currently paused.\n     */\n    paused: boolean;\n\n    /**\n     * Informative human-readable message with contextual notes, e.g. the reason a Schedule is paused.\n     * The system may overwrite this message on certain conditions, e.g. when pause-on-failure happens.\n     */\n    note?: string;\n\n    /**\n     * The Actions remaining in this Schedule.\n     * Once this number hits `0`, no further Actions are taken (unless {@link ScheduleHandle.trigger} is called).\n     *\n     * If `undefined`, then no such limit applies.\n     */\n    remainingActions?: number;\n  };\n\n  info: {\n    /**\n     * Most recent actions started (including manual triggers), sorted from older start time to newer.\n     */\n    recentActions: ScheduleExecutionResult[];\n\n    /**\n     * Next upcoming scheduled times of this Schedule\n     */\n    nextActionTimes: Date[];\n\n    /**\n     * Number of Actions taken so far.\n     */\n    numActionsTaken: number;\n\n    /**\n     * Number of times a scheduled Action was skipped due to missing the catchup window.\n     */\n    numActionsMissedCatchupWindow: number;\n\n    /**\n     * Number of Actions skipped due to overlap.\n     */\n    numActionsSkippedOverlap: number;\n\n    createdAt: Date;\n    lastUpdatedAt: Date | undefined;\n\n    /**\n     * Currently-running workflows started by this schedule. (There might be\n     * more than one if the overlap policy allows overlaps.)\n     */\n    runningActions: ScheduleExecutionActionResult[];\n  };\n\n  /** @internal */\n  raw: temporal.api.workflowservice.v1.IDescribeScheduleResponse;\n};\n\n// Invariant: ScheduleDescription contains at least the same fields as ScheduleSummary\ncheckExtends<ScheduleSummary, ScheduleDescription>();\n\n// Invariant: An existing ScheduleDescription can be used as template to create a new Schedule\ncheckExtends<ScheduleOptions, ScheduleDescription>();\n\n// Invariant: An existing ScheduleDescription can be used as template to update that Schedule\ncheckExtends<ScheduleUpdateOptions, ScheduleDescription>();\n\n/**\n * A complete description of a set of absolute times (possibly infinite) that an Action should occur at.\n * The times are the union of `calendars`, `intervals`, and `cronExpressions`, minus the `skip` times. These times\n * never change, except that the definition of a time zone can change over time (most commonly, when daylight saving\n * time policy changes for an area). To create a totally self-contained `ScheduleSpec`, use UTC.\n */\nexport interface ScheduleSpec {\n  /** Calendar-based specifications of times. */\n  calendars?: CalendarSpec[];\n\n  /** Interval-based specifications of times. */\n  intervals?: IntervalSpec[];\n\n  /**\n   * [Cron expressions](https://crontab.guru/). This is provided for easy migration from legacy Cron Workflows. For new\n   * use cases, we recommend using {@link calendars} or {@link intervals} for readability and maintainability.\n   *\n   * For example, `0 12 * * MON-WED,FRI` is every M/Tu/W/F at noon, and is equivalent to this {@link CalendarSpec}:\n   *\n   * ```ts\n   * {\n   *   hour: 12,\n   *   dayOfWeek: [{\n   *     start: 'MONDAY'\n   *     end: 'WEDNESDAY'\n   *   }, 'FRIDAY']\n   * }\n   * ```\n   *\n   * The string can have 5, 6, or 7 fields, separated by spaces, and they are interpreted in the\n   * same way as a {@link CalendarSpec}.\n   *\n   * - 5 fields:         minute, hour, day_of_month, month, day_of_week\n   * - 6 fields:         minute, hour, day_of_month, month, day_of_week, year\n   * - 7 fields: second, minute, hour, day_of_month, month, day_of_week, year\n   *\n   * Notes:\n   *\n   * - If year is not given, it defaults to *.\n   * - If second is not given, it defaults to 0.\n   * - Shorthands `@yearly`, `@monthly`, `@weekly`, `@daily`, and `@hourly` are also\n   * accepted instead of the 5-7 time fields.\n   * - `@every interval[/<phase>]` is accepted and gets compiled into an\n   * IntervalSpec instead. `<interval>` and `<phase>` should be a decimal integer\n   * with a unit suffix s, m, h, or d.\n   * - Optionally, the string can be preceded by `CRON_TZ=<timezone name>` or\n   * `TZ=<timezone name>`, which will get copied to {@link timezone}.\n   * (In which case the {@link timezone} field should be left empty.)\n   * - Optionally, \"#\" followed by a comment can appear at the end of the string.\n   * - Note that the special case that some cron implementations have for\n   * treating day_of_month and day_of_week as \"or\" instead of \"and\" when both\n   * are set is not implemented.\n   */\n  cronExpressions?: string[];\n\n  /**\n   * Any matching times will be skipped.\n   *\n   * All aspects of the CalendarSpec—including seconds—must match a time for the time to be skipped.\n   */\n  skip?: CalendarSpec[];\n  // TODO see if users want to be able to skip an IntervalSpec\n  // https://github.com/temporalio/api/pull/230/files#r956434347\n\n  /**\n   * Any times before `startAt` will be skipped. Together, `startAt` and `endAt` make an inclusive interval.\n   *\n   * @default The beginning of time\n   */\n  startAt?: Date;\n\n  /**\n   * Any times after `endAt` will be skipped.\n   *\n   * @default The end of time\n   */\n  endAt?: Date;\n\n  /**\n   * All times will be incremented by a random value from 0 to this amount of jitter.\n   *\n   * @default 0\n   * @format number of milliseconds or {@link https://www.npmjs.com/package/ms | ms-formatted string}\n   */\n  jitter?: Duration;\n\n  /**\n   * IANA timezone name, for example `US/Pacific`.\n   *\n   * https://en.wikipedia.org/wiki/List_of_tz_database_time_zones\n   *\n   * The definition will be loaded by Temporal Server from the environment it runs in.\n   *\n   * Calendar spec matching is based on literal matching of the clock time\n   * with no special handling of DST: if you write a calendar spec that fires\n   * at 2:30am and specify a time zone that follows DST, that action will not\n   * be triggered on the day that has no 2:30am. Similarly, an action that\n   * fires at 1:30am will be triggered twice on the day that has two 1:30s.\n   *\n   * Also note that no actions are taken on leap-seconds (e.g. 23:59:60 UTC).\n   *\n   * @default UTC\n   */\n  timezone?: string;\n}\n\n/**\n * The version of {@link ScheduleSpec} that you get back from {@link ScheduleHandle.describe} and {@link ScheduleClient.list}\n */\nexport type ScheduleSpecDescription = Omit<\n  ScheduleSpec,\n  'calendars' | 'intervals' | 'cronExpressions' | 'skip' | 'jitter'\n> & {\n  /** Calendar-based specifications of times. */\n  calendars?: CalendarSpecDescription[];\n\n  /** Interval-based specifications of times. */\n  intervals?: IntervalSpecDescription[];\n\n  /** Any matching times will be skipped. */\n  skip?: CalendarSpecDescription[];\n\n  /**\n   * All times will be incremented by a random value from 0 to this amount of jitter.\n   *\n   * @default 1 second\n   * @format number of milliseconds\n   */\n  jitter?: number;\n};\n\n// Invariant: An existing ScheduleSpec can be used as is to create or update a Schedule\ncheckExtends<ScheduleSpec, ScheduleSpecDescription>();\n\n/**\n * An event specification relative to the calendar, similar to a traditional cron specification.\n *\n * A second in time matches if all fields match. This includes `dayOfMonth` and `dayOfWeek`.\n */\nexport interface CalendarSpec {\n  /**\n   * Valid values: 0–59\n   *\n   * @default 0\n   */\n  second?: LooseRange<number> | LooseRange<number>[] | '*';\n\n  /**\n   * Valid values: 0–59\n   *\n   * @default 0\n   */\n  minute?: LooseRange<number> | LooseRange<number>[] | '*';\n\n  /**\n   * Valid values: 0–23\n   *\n   * @default 0\n   */\n  hour?: LooseRange<number> | LooseRange<number>[] | '*';\n\n  /**\n   * Valid values: 1–31\n   *\n   * @default '*'\n   */\n  dayOfMonth?: LooseRange<number> | LooseRange<number>[] | '*';\n\n  /**\n   * @default '*'\n   */\n  month?: LooseRange<Month> | LooseRange<Month>[] | '*';\n\n  /**\n   * Use full years, like `2030`\n   *\n   * @default '*'\n   */\n  year?: LooseRange<number> | LooseRange<number>[] | '*';\n\n  /**\n   * @default '*'\n   */\n  dayOfWeek?: LooseRange<DayOfWeek> | LooseRange<DayOfWeek>[] | '*';\n\n  /**\n   * Description of the intention of this spec.\n   */\n  comment?: string;\n}\n\n/**\n * An event specification relative to the calendar, similar to a traditional cron specification.\n *\n * A second in time matches if all fields match. This includes `dayOfMonth` and `dayOfWeek`.\n */\nexport interface CalendarSpecDescription {\n  /**\n   * Valid values: 0–59\n   *\n   * @default Match only when second is 0 (ie. `[{ start: 0, end: 0, step: 0 }]`)\n   */\n  second: Range<number>[];\n\n  /**\n   * Valid values: 0–59\n   *\n   * @default Match only when minute is 0 (ie. `[{ start: 0, end: 0, step: 0 }]`)\n   */\n  minute: Range<number>[];\n\n  /**\n   * Valid values: 0–23\n   *\n   * @default Match only when hour is 0 (ie. `[{ start: 0, end: 0, step: 0 }]`)\n   */\n  hour: Range<number>[];\n\n  /**\n   * Valid values: 1–31\n   *\n   * @default Match on any day (ie. `[{ start: 1, end: 31, step: 1 }]`)\n   */\n  dayOfMonth: Range<number>[];\n\n  /**\n   * Valid values are 'JANUARY' to 'DECEMBER'.\n   *\n   * @default Match on any month (ie. `[{ start: 'JANUARY', end: 'DECEMBER', step: 1 }]`)\n   */\n  month: Range<Month>[];\n\n  /**\n   * Use full years, like `2030`\n   *\n   * @default Match on any year\n   */\n  year: Range<number>[];\n\n  /**\n   * Valid values are 'SUNDAY' to 'SATURDAY'.\n   *\n   * @default Match on any day of the week (ie. `[{ start: 'SUNDAY', end: 'SATURDAY', step: 1 }]`)\n   */\n  dayOfWeek: Range<DayOfWeek>[];\n\n  /**\n   * Description of the intention of this spec.\n   */\n  comment?: string;\n}\n\n/**\n * IntervalSpec matches times that can be expressed as:\n *\n * `Epoch + (n * every) + offset`\n *\n * where `n` is all integers ≥ 0.\n *\n * For example, an `every` of 1 hour with `offset` of zero would match every hour, on the hour. The same `every` but an `offset`\n * of 19 minutes would match every `xx:19:00`. An `every` of 28 days with `offset` zero would match `2022-02-17T00:00:00Z`\n * (among other times). The same `every` with `offset` of 3 days, 5 hours, and 23 minutes would match `2022-02-20T05:23:00Z`\n * instead.\n */\nexport interface IntervalSpec {\n  /**\n   * Value is rounded to the nearest second.\n   *\n   * @format number of milliseconds or {@link https://www.npmjs.com/package/ms | ms-formatted string}\n   */\n  every: Duration;\n\n  /**\n   * Value is rounded to the nearest second.\n   *\n   * @default 0\n   * @format number of milliseconds or {@link https://www.npmjs.com/package/ms | ms-formatted string}\n   */\n  offset?: Duration;\n}\n\n/**\n * IntervalSpec matches times that can be expressed as:\n *\n * `Epoch + (n * every) + offset`\n *\n * where `n` is all integers ≥ 0.\n *\n * For example, an `every` of 1 hour with `offset` of zero would match every hour, on the hour. The same `every` but an `offset`\n * of 19 minutes would match every `xx:19:00`. An `every` of 28 days with `offset` zero would match `2022-02-17T00:00:00Z`\n * (among other times). The same `every` with `offset` of 3 days, 5 hours, and 23 minutes would match `2022-02-20T05:23:00Z`\n * instead.\n *\n * This is the version of {@link IntervalSpec} that you get back from {@link ScheduleHandle.describe} and {@link ScheduleClient.list}\n */\nexport interface IntervalSpecDescription {\n  /**\n   * Value is rounded to the nearest second.\n   *\n   * @format number of milliseconds\n   */\n  every: number;\n\n  /**\n   * Value is rounded to the nearest second.\n   *\n   * @format number of milliseconds\n   */\n  offset: number;\n}\n\n/**\n * Range represents a set of values, used to match fields of a calendar. If end < start, then end is\n * interpreted as equal to start. Similarly, if step is less than 1, then step is interpreted as 1.\n */\nexport interface Range<Unit> {\n  /**\n   * Start of range (inclusive)\n   */\n  start: Unit;\n\n  /**\n   * End of range (inclusive)\n   *\n   * @default `start`\n   */\n  end: Unit;\n\n  /**\n   * The step to take between each value.\n   *\n   * @default 1\n   */\n  step: number;\n}\n\n/**\n * A {@link Range} definition, with support for loose syntax.\n *\n * For example:\n * ```\n * 3 ➡️ 3\n * { start: 2 } ➡️ 2\n * { start: 2, end: 4 } ➡️ 2, 3, 4\n * { start: 2, end: 10, step: 3 } ➡️ 2, 5, 8\n * ```\n */\nexport type LooseRange<Unit> =\n  | Range<Unit>\n  | { start: Range<Unit>['start']; end?: Range<Unit>['end']; step?: never }\n  | Unit;\n\nexport const MONTHS = [\n  'JANUARY',\n  'FEBRUARY',\n  'MARCH',\n  'APRIL',\n  'MAY',\n  'JUNE',\n  'JULY',\n  'AUGUST',\n  'SEPTEMBER',\n  'OCTOBER',\n  'NOVEMBER',\n  'DECEMBER',\n] as const;\n\nexport type Month = (typeof MONTHS)[number];\n\nexport const DAYS_OF_WEEK = ['SUNDAY', 'MONDAY', 'TUESDAY', 'WEDNESDAY', 'THURSDAY', 'FRIDAY', 'SATURDAY'] as const;\n\nexport type DayOfWeek = (typeof DAYS_OF_WEEK)[number];\n\nexport type ScheduleOptionsAction = ScheduleOptionsStartWorkflowAction<Workflow>;\n\nexport type ScheduleOptionsStartWorkflowAction<W extends Workflow> = {\n  type: 'startWorkflow';\n  workflowType: string | W;\n} & Pick<\n  WorkflowStartOptions<W>,\n  | 'taskQueue'\n  | 'args'\n  | 'memo'\n  | 'searchAttributes'\n  | 'typedSearchAttributes'\n  | 'retry'\n  | 'workflowExecutionTimeout'\n  | 'workflowRunTimeout'\n  | 'workflowTaskTimeout'\n  | 'staticDetails'\n  | 'staticSummary'\n> & {\n    /**\n     * Workflow id to use when starting. Assign a meaningful business id.\n     * This ID can be used to ensure starting Workflows is idempotent.\n     *\n     * @default `${scheduleId}-workflow`\n     */\n    workflowId?: string;\n  };\n\nexport type ScheduleSummaryAction = ScheduleSummaryStartWorkflowAction;\n\nexport interface ScheduleSummaryStartWorkflowAction {\n  type: 'startWorkflow';\n  workflowType: string;\n}\n\nexport type ScheduleDescriptionAction = ScheduleDescriptionStartWorkflowAction;\n\nexport type ScheduleDescriptionStartWorkflowAction = ScheduleSummaryStartWorkflowAction &\n  Pick<\n    WorkflowStartOptions<Workflow>,\n    | 'taskQueue'\n    | 'workflowId'\n    | 'args'\n    | 'memo'\n    | 'searchAttributes'\n    | 'typedSearchAttributes'\n    | 'retry'\n    | 'workflowExecutionTimeout'\n    | 'workflowRunTimeout'\n    | 'workflowTaskTimeout'\n    | 'staticSummary'\n    | 'staticDetails'\n    | 'priority'\n  >;\n\n// Invariant: an existing ScheduleDescriptionAction can be used as is to create or update a schedule\ncheckExtends<ScheduleOptionsAction, ScheduleDescriptionAction>();\n\nexport type CompiledScheduleAction = Replace<\n  ScheduleDescriptionAction,\n  {\n    workflowType: string;\n    args: unknown[];\n  }\n>;\n\n/**\n * Policy for overlapping Actions.\n */\nexport const ScheduleOverlapPolicy = {\n  /**\n   * Don't start a new Action.\n   * @default\n   */\n  SKIP: 'SKIP',\n\n  /**\n   * Start another Action as soon as the current Action completes, but only buffer one Action in this way. If another\n   * Action is supposed to start, but one Action is running and one is already buffered, then only the buffered one will\n   * be started after the running Action finishes.\n   */\n  BUFFER_ONE: 'BUFFER_ONE',\n\n  /**\n   * Allows an unlimited number of Actions to buffer. They are started sequentially.\n   */\n  BUFFER_ALL: 'BUFFER_ALL',\n\n  /**\n   * Cancels the running Action, and then starts the new Action once the cancelled one completes.\n   */\n  CANCEL_OTHER: 'CANCEL_OTHER',\n\n  /**\n   * Terminate the running Action and start the new Action immediately.\n   */\n  TERMINATE_OTHER: 'TERMINATE_OTHER',\n\n  /**\n   * Allow any number of Actions to start immediately.\n   *\n   * This is the only policy under which multiple Actions can run concurrently.\n   */\n  ALLOW_ALL: 'ALLOW_ALL',\n\n  /**\n   * Use server default (currently SKIP).\n   *\n   * @deprecated Either leave property `undefined`, or use {@link SKIP} instead.\n   */\n  UNSPECIFIED: undefined,\n} as const;\nexport type ScheduleOverlapPolicy = (typeof ScheduleOverlapPolicy)[keyof typeof ScheduleOverlapPolicy];\n\nexport const [encodeScheduleOverlapPolicy, decodeScheduleOverlapPolicy] = makeProtoEnumConverters<\n  temporal.api.enums.v1.ScheduleOverlapPolicy,\n  typeof temporal.api.enums.v1.ScheduleOverlapPolicy,\n  keyof typeof temporal.api.enums.v1.ScheduleOverlapPolicy,\n  typeof ScheduleOverlapPolicy,\n  'SCHEDULE_OVERLAP_POLICY_'\n>(\n  {\n    [ScheduleOverlapPolicy.SKIP]: 1,\n    [ScheduleOverlapPolicy.BUFFER_ONE]: 2,\n    [ScheduleOverlapPolicy.BUFFER_ALL]: 3,\n    [ScheduleOverlapPolicy.CANCEL_OTHER]: 4,\n    [ScheduleOverlapPolicy.TERMINATE_OTHER]: 5,\n    [ScheduleOverlapPolicy.ALLOW_ALL]: 6,\n    UNSPECIFIED: 0,\n  } as const,\n  'SCHEDULE_OVERLAP_POLICY_'\n);\n\nexport interface Backfill {\n  /**\n   * Start of the time range to evaluate Schedule in.\n   */\n  start: Date;\n\n  /**\n   * End of the time range to evaluate Schedule in.\n   */\n  end: Date;\n\n  /**\n   * Override the Overlap Policy for this request.\n   *\n   * @default SKIP\n   */\n  overlap?: ScheduleOverlapPolicy;\n}\n","import Long from 'long';\nimport type { LoadedDataConverter, WorkflowSerializationContext } from '@temporalio/common';\nimport {\n  compilePriority,\n  compileRetryPolicy,\n  decodePriority,\n  decompileRetryPolicy,\n  extractWorkflowType,\n} from '@temporalio/common';\nimport { encodeUserMetadata, decodeUserMetadata } from '@temporalio/common/lib/internal-non-workflow/codec-helpers';\nimport {\n  encodeUnifiedSearchAttributes,\n  decodeSearchAttributes,\n  decodeTypedSearchAttributes,\n} from '@temporalio/common/lib/converter/payload-search-attributes';\nimport type { Headers } from '@temporalio/common/lib/interceptors';\nimport {\n  decodeArrayFromPayloads,\n  decodeMapFromPayloads,\n  encodeMapToPayloads,\n  encodeToPayloadsWithContext,\n} from '@temporalio/common/lib/internal-non-workflow';\nimport { temporal } from '@temporalio/proto';\nimport {\n  msOptionalToTs,\n  msToTs,\n  optionalDateToTs,\n  optionalTsToDate,\n  optionalTsToMs,\n  requiredTsToDate,\n} from '@temporalio/common/lib/time';\nimport type {\n  CalendarSpec,\n  CalendarSpecDescription,\n  CompiledScheduleOptions,\n  CompiledScheduleUpdateOptions,\n  Range,\n  ScheduleOptions,\n  ScheduleUpdateOptions,\n  DayOfWeek,\n  Month,\n  LooseRange,\n  ScheduleSpec,\n  CompiledScheduleAction,\n  ScheduleSpecDescription,\n  IntervalSpecDescription,\n  ScheduleDescriptionAction,\n  ScheduleExecutionActionResult,\n  ScheduleExecutionResult,\n  ScheduleExecutionStartWorkflowActionResult,\n} from './schedule-types';\nimport { DAYS_OF_WEEK, MONTHS, encodeScheduleOverlapPolicy } from './schedule-types';\n\nconst [encodeSecond, decodeSecond] = makeCalendarSpecFieldCoders(\n  'second',\n  (x: number) => (typeof x === 'number' && x >= 0 && x <= 59 ? x : undefined),\n  (x: number) => x,\n  [{ start: 0, end: 0, step: 0 }], // default to 0\n  [{ start: 0, end: 59, step: 1 }]\n);\n\nconst [encodeMinute, decodeMinue] = makeCalendarSpecFieldCoders(\n  'minute',\n  (x: number) => (typeof x === 'number' && x >= 0 && x <= 59 ? x : undefined),\n  (x: number) => x,\n  [{ start: 0, end: 0, step: 0 }], // default to 0\n  [{ start: 0, end: 59, step: 1 }]\n);\n\nconst [encodeHour, decodeHour] = makeCalendarSpecFieldCoders(\n  'hour',\n  (x: number) => (typeof x === 'number' && x >= 0 && x <= 23 ? x : undefined),\n  (x: number) => x,\n  [{ start: 0, end: 0, step: 0 }], // default to 0\n  [{ start: 0, end: 23, step: 1 }]\n);\n\nconst [encodeDayOfMonth, decodeDayOfMonth] = makeCalendarSpecFieldCoders(\n  'dayOfMonth',\n  (x: number) => (typeof x === 'number' && x >= 0 && x <= 31 ? x : undefined),\n  (x: number) => x,\n  [{ start: 1, end: 31, step: 1 }], // default to *\n  [{ start: 1, end: 31, step: 1 }]\n);\n\nconst [encodeMonth, decodeMonth] = makeCalendarSpecFieldCoders(\n  'month',\n  function monthNameToNumber(month: Month): number | undefined {\n    const index = MONTHS.indexOf(month);\n    return index >= 0 ? index + 1 : undefined;\n  },\n  (month: number) => MONTHS[month - 1],\n  [{ start: 1, end: 12, step: 1 }], // default to *\n  [{ start: 1, end: 12, step: 1 }]\n);\n\nconst [encodeYear, decodeYear] = makeCalendarSpecFieldCoders(\n  'year',\n  (x: number) => (typeof x === 'number' ? x : undefined),\n  (x: number) => x,\n  [], // default to *\n  [] // special case: * for years is encoded as no range at all\n);\n\nconst [encodeDayOfWeek, decodeDayOfWeek] = makeCalendarSpecFieldCoders(\n  'dayOfWeek',\n  function dayOfWeekNameToNumber(day: DayOfWeek): number | undefined {\n    const index = DAYS_OF_WEEK.indexOf(day);\n    return index >= 0 ? index : undefined;\n  },\n  (day: number) => DAYS_OF_WEEK[day],\n  [{ start: 0, end: 6, step: 1 }], // default to *\n  [{ start: 0, end: 6, step: 1 }]\n);\n\nfunction makeCalendarSpecFieldCoders<Unit>(\n  fieldName: string,\n  encodeValueFn: (x: Unit) => number | undefined,\n  decodeValueFn: (x: number) => Unit | undefined,\n  defaultValue: temporal.api.schedule.v1.IRange[],\n  matchAllValue: temporal.api.schedule.v1.IRange[]\n) {\n  function encoder(\n    input: LooseRange<Unit> | LooseRange<Unit>[] | '*' | undefined\n  ): temporal.api.schedule.v1.IRange[] | undefined {\n    if (input === undefined) return defaultValue;\n    if (input === '*') return matchAllValue;\n\n    return (Array.isArray(input) ? input : [input]).map((item) => {\n      if (typeof item === 'object' && (item as Range<Unit>).start !== undefined) {\n        const range = item as Range<Unit>;\n        const start = encodeValueFn(range.start);\n        if (start !== undefined) {\n          return {\n            start,\n            end: range.end !== undefined ? encodeValueFn(range.end) ?? start : 1,\n            step: typeof range.step === 'number' && range.step > 0 ? range.step : 1,\n          };\n        }\n      }\n      if (item !== undefined) {\n        const value = encodeValueFn(item as Unit);\n        if (value !== undefined) return { start: value, end: value, step: 1 };\n      }\n      throw new TypeError(`Invalid CalendarSpec component for field ${fieldName}: '${item}' of type '${typeof item}'`);\n    });\n  }\n\n  function decoder(input: temporal.api.schedule.v1.IRange[] | undefined | null): Range<Unit>[] {\n    if (!input) return [];\n    return (input as temporal.api.schedule.v1.Range[]).map((pb): Range<Unit> => {\n      const start = decodeValueFn(pb.start);\n      if (start === undefined) {\n        throw new RangeError(`Invalid CalendarSpec component for field ${fieldName}: ${pb.start} is out of bounds`);\n      }\n      const end = pb.end > pb.start ? decodeValueFn(pb.end) ?? start : start;\n      const step = pb.step > 0 ? pb.step : 1;\n      return { start, end, step };\n    });\n  }\n\n  return [encoder, decoder] as const;\n}\n\nexport function encodeOptionalStructuredCalendarSpecs(\n  input: CalendarSpec[] | null | undefined\n): temporal.api.schedule.v1.IStructuredCalendarSpec[] | undefined {\n  if (!input) return undefined;\n  return input.map((spec) => ({\n    second: encodeSecond(spec.second),\n    minute: encodeMinute(spec.minute),\n    hour: encodeHour(spec.hour),\n    dayOfMonth: encodeDayOfMonth(spec.dayOfMonth),\n    month: encodeMonth(spec.month),\n    year: encodeYear(spec.year),\n    dayOfWeek: encodeDayOfWeek(spec.dayOfWeek),\n    comment: spec.comment,\n  }));\n}\n\nexport function decodeOptionalStructuredCalendarSpecs(\n  input: temporal.api.schedule.v1.IStructuredCalendarSpec[] | null | undefined\n): CalendarSpecDescription[] {\n  if (!input) return [];\n\n  return (input as temporal.api.schedule.v1.StructuredCalendarSpec[]).map(\n    (pb): CalendarSpecDescription => ({\n      second: decodeSecond(pb.second),\n      minute: decodeMinue(pb.minute),\n      hour: decodeHour(pb.hour),\n      dayOfMonth: decodeDayOfMonth(pb.dayOfMonth),\n      month: decodeMonth(pb.month),\n      year: decodeYear(pb.year),\n      dayOfWeek: decodeDayOfWeek(pb.dayOfWeek),\n      comment: pb.comment,\n    })\n  );\n}\n\nexport function compileScheduleOptions(options: ScheduleOptions): CompiledScheduleOptions {\n  const workflowType = extractWorkflowType(options.action.workflowType);\n  return {\n    ...options,\n    action: {\n      ...options.action,\n      workflowId: options.action.workflowId ?? `${options.scheduleId}-workflow`,\n      workflowType,\n      args: (options.action.args ?? []) as unknown[],\n    },\n  };\n}\n\nexport function compileUpdatedScheduleOptions(\n  scheduleId: string,\n  options: ScheduleUpdateOptions\n): CompiledScheduleUpdateOptions {\n  const workflowTypeOrFunc = options.action.workflowType;\n  const workflowType = extractWorkflowType(workflowTypeOrFunc);\n  return {\n    ...options,\n    action: {\n      ...options.action,\n      workflowId: options.action.workflowId ?? `${scheduleId}-workflow`,\n      workflowType,\n      args: (options.action.args ?? []) as unknown[],\n    },\n  };\n}\n\nexport function encodeScheduleSpec(spec: ScheduleSpec): temporal.api.schedule.v1.IScheduleSpec {\n  return {\n    structuredCalendar: encodeOptionalStructuredCalendarSpecs(spec.calendars),\n    interval: spec.intervals?.map((interval) => ({\n      interval: msToTs(interval.every),\n      phase: msOptionalToTs(interval.offset),\n    })),\n    cronString: spec.cronExpressions,\n    excludeStructuredCalendar: encodeOptionalStructuredCalendarSpecs(spec.skip),\n    startTime: optionalDateToTs(spec.startAt),\n    endTime: optionalDateToTs(spec.endAt),\n    jitter: msOptionalToTs(spec.jitter),\n    timezoneName: spec.timezone,\n  };\n}\n\nfunction workflowSerializationContext(namespace: string, workflowId: string): WorkflowSerializationContext {\n  return {\n    type: 'workflow',\n    namespace,\n    workflowId,\n  };\n}\n\nexport async function encodeScheduleAction(\n  dataConverter: LoadedDataConverter,\n  namespace: string,\n  action: CompiledScheduleAction,\n  headers: Headers\n): Promise<temporal.api.schedule.v1.IScheduleAction> {\n  const context = workflowSerializationContext(namespace, action.workflowId);\n  return {\n    startWorkflow: {\n      workflowId: action.workflowId,\n      workflowType: {\n        name: action.workflowType,\n      },\n      input: { payloads: await encodeToPayloadsWithContext(dataConverter, context, action.args) },\n      taskQueue: {\n        kind: temporal.api.enums.v1.TaskQueueKind.TASK_QUEUE_KIND_NORMAL,\n        name: action.taskQueue,\n      },\n      workflowExecutionTimeout: msOptionalToTs(action.workflowExecutionTimeout),\n      workflowRunTimeout: msOptionalToTs(action.workflowRunTimeout),\n      workflowTaskTimeout: msOptionalToTs(action.workflowTaskTimeout),\n      retryPolicy: action.retry ? compileRetryPolicy(action.retry) : undefined,\n      memo: action.memo ? { fields: await encodeMapToPayloads(dataConverter, action.memo, context) } : undefined,\n      searchAttributes:\n        action.searchAttributes || action.typedSearchAttributes\n          ? {\n              indexedFields: encodeUnifiedSearchAttributes(action.searchAttributes, action.typedSearchAttributes),\n            }\n          : undefined,\n      header: { fields: headers },\n      userMetadata: await encodeUserMetadata(dataConverter, action.staticSummary, action.staticDetails, context),\n      priority: action.priority ? compilePriority(action.priority) : undefined,\n    },\n  };\n}\n\nexport function encodeSchedulePolicies(\n  policies?: ScheduleOptions['policies']\n): temporal.api.schedule.v1.ISchedulePolicies {\n  return {\n    catchupWindow: msOptionalToTs(policies?.catchupWindow),\n    overlapPolicy: policies?.overlap ? encodeScheduleOverlapPolicy(policies.overlap) : undefined,\n    pauseOnFailure: policies?.pauseOnFailure,\n  };\n}\n\nexport function encodeScheduleState(state?: ScheduleOptions['state']): temporal.api.schedule.v1.IScheduleState {\n  return {\n    paused: state?.paused,\n    notes: state?.note,\n    limitedActions: state?.remainingActions !== undefined,\n    remainingActions: state?.remainingActions ? Long.fromNumber(state?.remainingActions) : undefined,\n  };\n}\n\nexport function decodeScheduleSpec(pb: temporal.api.schedule.v1.IScheduleSpec): ScheduleSpecDescription {\n  // Note: the server will have compiled calendar and cron_string fields into\n  // structured_calendar (and maybe interval and timezone_name), so at this\n  // point, we'll see only structured_calendar, interval, etc.\n  return {\n    calendars: decodeOptionalStructuredCalendarSpecs(pb.structuredCalendar),\n    intervals: (pb.interval ?? []).map(\n      (x) =>\n        <IntervalSpecDescription>{\n          every: optionalTsToMs(x.interval),\n          offset: optionalTsToMs(x.phase),\n        }\n    ),\n    skip: decodeOptionalStructuredCalendarSpecs(pb.excludeStructuredCalendar),\n    startAt: optionalTsToDate(pb.startTime),\n    endAt: optionalTsToDate(pb.endTime),\n    jitter: optionalTsToMs(pb.jitter),\n    timezone: pb.timezoneName ?? undefined,\n  };\n}\n\nexport async function decodeScheduleAction(\n  dataConverter: LoadedDataConverter,\n  namespace: string,\n  pb: temporal.api.schedule.v1.IScheduleAction\n): Promise<ScheduleDescriptionAction> {\n  if (pb.startWorkflow) {\n    const context = workflowSerializationContext(namespace, pb.startWorkflow.workflowId!);\n    const { staticSummary, staticDetails } = await decodeUserMetadata(\n      dataConverter,\n      pb.startWorkflow?.userMetadata,\n      context\n    );\n    return {\n      type: 'startWorkflow',\n\n      workflowId: pb.startWorkflow.workflowId!,\n\n      workflowType: pb.startWorkflow.workflowType!.name!,\n\n      taskQueue: pb.startWorkflow.taskQueue!.name!,\n      args: await decodeArrayFromPayloads(dataConverter, pb.startWorkflow.input?.payloads, context),\n      memo: await decodeMapFromPayloads(dataConverter, pb.startWorkflow.memo?.fields, context),\n      retry: decompileRetryPolicy(pb.startWorkflow.retryPolicy),\n      searchAttributes: decodeSearchAttributes(pb.startWorkflow.searchAttributes?.indexedFields),\n      typedSearchAttributes: decodeTypedSearchAttributes(pb.startWorkflow.searchAttributes?.indexedFields),\n      workflowExecutionTimeout: optionalTsToMs(pb.startWorkflow.workflowExecutionTimeout),\n      workflowRunTimeout: optionalTsToMs(pb.startWorkflow.workflowRunTimeout),\n      workflowTaskTimeout: optionalTsToMs(pb.startWorkflow.workflowTaskTimeout),\n      staticSummary,\n      staticDetails,\n      priority: decodePriority(pb.startWorkflow.priority),\n    };\n  }\n  throw new TypeError('Unsupported schedule action');\n}\n\nexport function decodeScheduleRunningActions(\n  pb?: temporal.api.common.v1.IWorkflowExecution[] | null\n): ScheduleExecutionStartWorkflowActionResult[] {\n  if (!pb) return [];\n  return pb.map(\n    (x): ScheduleExecutionStartWorkflowActionResult => ({\n      type: 'startWorkflow',\n      workflow: {\n        workflowId: x.workflowId!,\n\n        firstExecutionRunId: x.runId!,\n      },\n    })\n  );\n}\n\nexport function decodeScheduleRecentActions(\n  pb?: temporal.api.schedule.v1.IScheduleActionResult[] | null\n): ScheduleExecutionResult[] {\n  if (!pb) return [];\n  return (pb as Required<temporal.api.schedule.v1.IScheduleActionResult>[]).map(\n    (executionResult): ScheduleExecutionResult => {\n      let action: ScheduleExecutionActionResult | undefined;\n      if (executionResult.startWorkflowResult) {\n        action = {\n          type: 'startWorkflow',\n          workflow: {\n            workflowId: executionResult.startWorkflowResult!.workflowId!,\n\n            firstExecutionRunId: executionResult.startWorkflowResult!.runId!,\n          },\n        };\n      } else throw new TypeError('Unsupported schedule action');\n\n      return {\n        scheduledAt: requiredTsToDate(executionResult.scheduleTime, 'scheduleTime'),\n        takenAt: requiredTsToDate(executionResult.actualTime, 'actualTime'),\n        action,\n      };\n    }\n  );\n}\n","import { randomUUID } from 'node:crypto';\nimport { status as grpcStatus } from '@grpc/grpc-js';\nimport type { Workflow } from '@temporalio/common';\nimport {\n  decodeSearchAttributes,\n  decodeTypedSearchAttributes,\n  encodeUnifiedSearchAttributes,\n} from '@temporalio/common/lib/converter/payload-search-attributes';\nimport type { Headers } from '@temporalio/common/lib/interceptors';\nimport { composeInterceptors } from '@temporalio/common/lib/interceptors';\nimport {\n  encodeMapToPayloads,\n  decodeMapFromPayloads,\n  extstoreInboundOptions,\n  extstoreStoreOptions,\n  visit,\n  walkCreateScheduleRequest,\n  walkDescribeScheduleResponse,\n  walkListSchedulesResponse,\n  walkUpdateScheduleRequest,\n} from '@temporalio/common/lib/internal-non-workflow';\nimport { filterNullAndUndefined } from '@temporalio/common/lib/internal-workflow';\nimport { temporal } from '@temporalio/proto';\nimport {\n  optionalDateToTs,\n  optionalTsToDate,\n  optionalTsToMs,\n  requiredTsToDate,\n  tsToDate,\n} from '@temporalio/common/lib/time';\nimport { SymbolBasedInstanceOfError } from '@temporalio/common/lib/type-helpers';\nimport type { CreateScheduleInput, CreateScheduleOutput, ScheduleClientInterceptor } from './interceptors';\nimport type { WorkflowService } from './types';\nimport { isGrpcServiceError, ServiceError } from './errors';\nimport type {\n  Backfill,\n  CompiledScheduleUpdateOptions,\n  ScheduleSummary,\n  ScheduleDescription,\n  ScheduleOptions,\n  ScheduleUpdateOptions,\n  ScheduleOptionsAction,\n  ScheduleOptionsStartWorkflowAction,\n} from './schedule-types';\nimport { ScheduleOverlapPolicy, encodeScheduleOverlapPolicy, decodeScheduleOverlapPolicy } from './schedule-types';\nimport {\n  compileScheduleOptions,\n  compileUpdatedScheduleOptions,\n  decodeScheduleAction,\n  decodeScheduleRecentActions,\n  decodeScheduleRunningActions,\n  decodeScheduleSpec,\n  encodeScheduleAction,\n  encodeSchedulePolicies,\n  encodeScheduleSpec,\n  encodeScheduleState,\n} from './schedule-helpers';\nimport type { BaseClientOptions, LoadedWithDefaults, WithDefaults } from './base-client';\nimport { BaseClient, defaultBaseClientOptions } from './base-client';\nimport { rethrowKnownErrorTypes } from './helpers';\n\n/**\n * Handle to a single Schedule\n */\nexport interface ScheduleHandle {\n  /**\n   * This Schedule's identifier\n   */\n  readonly scheduleId: string;\n\n  /**\n   * Fetch the Schedule's description from the Server\n   */\n  describe(): Promise<ScheduleDescription>;\n\n  /**\n   * Update the Schedule\n   *\n   * This function calls `.describe()`, provides the `Schedule` to the provided `updateFn`, and\n   * sends the returned `UpdatedSchedule` to the Server to update the Schedule definition. Note that,\n   * in the future, `updateFn` might be invoked multiple time, with identical or different input.\n   */\n  update<W extends Workflow = Workflow>(\n    updateFn: (previous: ScheduleDescription) => ScheduleUpdateOptions<ScheduleOptionsStartWorkflowAction<W>>\n  ): Promise<void>;\n\n  /**\n   * Delete the Schedule\n   */\n  delete(): Promise<void>;\n\n  /**\n   * Trigger an Action to be taken immediately\n   *\n   * @param overlap Override the Overlap Policy for this one trigger. Defaults to {@link ScheduleOverlapPolicy.ALLOW_ALL}.\n   */\n  trigger(overlap?: ScheduleOverlapPolicy): Promise<void>;\n\n  /**\n   * Run though the specified time period(s) and take Actions as if that time passed by right now, all at once.\n   * The Overlap Policy can be overridden for the scope of the Backfill.\n   */\n  backfill(options: Backfill | Backfill[]): Promise<void>;\n\n  /**\n   * Pause the Schedule\n   *\n   * @param note A new {@link ScheduleDescription.note}. Defaults to `\"Paused via TypeScript SDK\"`\n   */\n  pause(note?: string): Promise<void>;\n\n  /**\n   * Unpause the Schedule\n   *\n   * @param note A new {@link ScheduleDescription.note}. Defaults to `\"Unpaused via TypeScript SDK\"\n   */\n  unpause(note?: string): Promise<void>;\n\n  /**\n   * Readonly accessor to the underlying ScheduleClient\n   */\n  readonly client: ScheduleClient;\n}\n\nexport interface ScheduleClientOptions extends BaseClientOptions {\n  /**\n   * Used to override and extend default Connection functionality\n   *\n   * Useful for injecting auth headers and tracing Workflow executions\n   */\n  interceptors?: ScheduleClientInterceptor[];\n}\n\nexport type LoadedScheduleClientOptions = LoadedWithDefaults<ScheduleClientOptions>;\n\nfunction defaultScheduleClientOptions(): WithDefaults<ScheduleClientOptions> {\n  return {\n    ...defaultBaseClientOptions(),\n    interceptors: [],\n  };\n}\n\nfunction assertRequiredScheduleOptions(opts: ScheduleOptions, action: 'CREATE'): void;\nfunction assertRequiredScheduleOptions(opts: ScheduleUpdateOptions, action: 'UPDATE'): void;\nfunction assertRequiredScheduleOptions(\n  opts: ScheduleOptions | ScheduleUpdateOptions,\n  action: 'CREATE' | 'UPDATE'\n): void {\n  const structureName = action === 'CREATE' ? 'ScheduleOptions' : 'ScheduleUpdateOptions';\n  if (action === 'CREATE' && !(opts as ScheduleOptions).scheduleId) {\n    throw new TypeError(`Missing ${structureName}.scheduleId`);\n  }\n  switch (opts.action.type) {\n    case 'startWorkflow':\n      if (!opts.action.taskQueue) {\n        throw new TypeError(`Missing ${structureName}.action.taskQueue for 'startWorkflow' action`);\n      }\n      if (!opts.action.workflowType) {\n        throw new TypeError(`Missing ${structureName}.action.workflowType for 'startWorkflow' action`);\n      }\n  }\n}\n\nexport interface ListScheduleOptions {\n  /**\n   * How many results to fetch from the Server at a time.\n   * @default 1000\n   */\n  pageSize?: number;\n  /**\n   * Filter schedules by a query string.\n   */\n  query?: string;\n}\n\n/**\n * Client for starting Workflow executions and creating Workflow handles\n */\nexport class ScheduleClient extends BaseClient {\n  public readonly options: LoadedScheduleClientOptions;\n\n  constructor(options?: ScheduleClientOptions) {\n    super(options);\n    this.options = {\n      ...defaultScheduleClientOptions(),\n      ...filterNullAndUndefined(options ?? {}),\n      loadedDataConverter: this.dataConverter,\n    };\n  }\n\n  /**\n   * Raw gRPC access to the Temporal service. Schedule-related methods are included in {@link WorkflowService}.\n   *\n   * **NOTE**: The namespace provided in {@link options} is **not** automatically set on requests made to the service.\n   */\n  get workflowService(): WorkflowService {\n    return this.connection.workflowService;\n  }\n\n  /**\n   * Create a new Schedule.\n   *\n   * @throws {@link ScheduleAlreadyRunning} if there's a running (not deleted) Schedule with the given `id`\n   * @returns a ScheduleHandle to the created Schedule\n   */\n  public async create<W extends Workflow = Workflow>(\n    options: ScheduleOptions<ScheduleOptionsStartWorkflowAction<W>>\n  ): Promise<ScheduleHandle>;\n  public async create<A extends ScheduleOptionsAction>(options: ScheduleOptions<A>): Promise<ScheduleHandle> {\n    await this._createSchedule(options);\n    return this.getHandle(options.scheduleId);\n  }\n\n  /**\n   * Create a new Schedule.\n   */\n  protected async _createSchedule(options: ScheduleOptions): Promise<void> {\n    assertRequiredScheduleOptions(options, 'CREATE');\n    const compiledOptions = compileScheduleOptions(options);\n\n    const create = composeInterceptors(this.options.interceptors, 'create', this._createScheduleHandler.bind(this));\n    await create({\n      options: compiledOptions,\n      headers: {},\n    });\n  }\n\n  /**\n   * Create a new Schedule.\n   */\n  protected async _createScheduleHandler(input: CreateScheduleInput): Promise<CreateScheduleOutput> {\n    const { options: opts, headers } = input;\n    const { identity } = this.options;\n    const req: temporal.api.workflowservice.v1.ICreateScheduleRequest = {\n      namespace: this.options.namespace,\n      identity,\n      requestId: randomUUID(),\n      scheduleId: opts.scheduleId,\n      schedule: {\n        spec: encodeScheduleSpec(opts.spec),\n        action: await encodeScheduleAction(this.dataConverter, this.options.namespace, opts.action, headers),\n        policies: encodeSchedulePolicies(opts.policies),\n        state: encodeScheduleState(opts.state),\n      },\n      memo: opts.memo ? { fields: await encodeMapToPayloads(this.dataConverter, opts.memo) } : undefined,\n      searchAttributes:\n        opts.searchAttributes || opts.typedSearchAttributes\n          ? {\n              indexedFields: encodeUnifiedSearchAttributes(opts.searchAttributes, opts.typedSearchAttributes),\n            }\n          : undefined,\n      initialPatch: {\n        triggerImmediately: opts.state?.triggerImmediately\n          ? { overlapPolicy: temporal.api.enums.v1.ScheduleOverlapPolicy.SCHEDULE_OVERLAP_POLICY_ALLOW_ALL }\n          : undefined,\n        backfillRequest: opts.state?.backfill\n          ? opts.state.backfill.map((x) => ({\n              startTime: optionalDateToTs(x.start),\n              endTime: optionalDateToTs(x.end),\n              overlapPolicy: x.overlap ? encodeScheduleOverlapPolicy(x.overlap) : undefined,\n            }))\n          : undefined,\n      },\n    };\n    try {\n      const externalStorage = this.dataConverter.externalStorage;\n      if (externalStorage) {\n        const startWorkflow = req.schedule?.action?.startWorkflow;\n        await visit(\n          req,\n          walkCreateScheduleRequest,\n          extstoreStoreOptions(externalStorage, {\n            initialTarget: {\n              kind: 'workflow',\n              namespace: this.options.namespace,\n              id: startWorkflow?.workflowId ?? undefined,\n              type: startWorkflow?.workflowType?.name ?? undefined,\n            },\n          })\n        );\n      }\n      const res = await this.workflowService.createSchedule(req);\n      return { conflictToken: res.conflictToken };\n    } catch (err: any) {\n      if (err.code === grpcStatus.ALREADY_EXISTS) {\n        throw new ScheduleAlreadyRunning('Schedule already exists and is running', opts.scheduleId);\n      }\n      this.rethrowGrpcError(err, 'Failed to create schedule', opts.scheduleId);\n    }\n  }\n\n  /**\n   * Describe a Schedule.\n   */\n  protected async _describeSchedule(\n    scheduleId: string\n  ): Promise<temporal.api.workflowservice.v1.IDescribeScheduleResponse> {\n    try {\n      const response = await this.workflowService.describeSchedule({\n        namespace: this.options.namespace,\n        scheduleId,\n      });\n      const externalStorage = this.dataConverter.externalStorage;\n      await visit(response, walkDescribeScheduleResponse, extstoreInboundOptions(externalStorage));\n      return response;\n    } catch (err: any) {\n      this.rethrowGrpcError(err, 'Failed to describe schedule', scheduleId);\n    }\n  }\n\n  /**\n   * Update a Schedule.\n   */\n  protected async _updateSchedule(\n    scheduleId: string,\n    opts: CompiledScheduleUpdateOptions,\n    header: Headers\n  ): Promise<temporal.api.workflowservice.v1.IUpdateScheduleResponse> {\n    const req: temporal.api.workflowservice.v1.IUpdateScheduleRequest = {\n      namespace: this.options.namespace,\n      scheduleId,\n      schedule: {\n        spec: encodeScheduleSpec(opts.spec),\n        action: await encodeScheduleAction(this.dataConverter, this.options.namespace, opts.action, header),\n        policies: encodeSchedulePolicies(opts.policies),\n        state: encodeScheduleState(opts.state),\n      },\n      identity: this.options.identity,\n      requestId: randomUUID(),\n      searchAttributes:\n        opts.searchAttributes || opts.typedSearchAttributes\n          ? {\n              indexedFields: encodeUnifiedSearchAttributes(opts.searchAttributes, opts.typedSearchAttributes),\n            }\n          : undefined,\n    };\n    try {\n      const externalStorage = this.dataConverter.externalStorage;\n      if (externalStorage) {\n        const startWorkflow = req.schedule?.action?.startWorkflow;\n        await visit(\n          req,\n          walkUpdateScheduleRequest,\n          extstoreStoreOptions(externalStorage, {\n            initialTarget: {\n              kind: 'workflow',\n              namespace: this.options.namespace,\n              id: startWorkflow?.workflowId ?? undefined,\n              type: startWorkflow?.workflowType?.name ?? undefined,\n            },\n          })\n        );\n      }\n      return await this.workflowService.updateSchedule(req);\n    } catch (err: any) {\n      this.rethrowGrpcError(err, 'Failed to update schedule', scheduleId);\n    }\n  }\n\n  /**\n   * Patch a Schedule.\n   */\n  protected async _patchSchedule(\n    scheduleId: string,\n    patch: temporal.api.schedule.v1.ISchedulePatch\n  ): Promise<temporal.api.workflowservice.v1.IPatchScheduleResponse> {\n    try {\n      return await this.workflowService.patchSchedule({\n        namespace: this.options.namespace,\n        scheduleId,\n        identity: this.options.identity,\n        requestId: randomUUID(),\n        patch,\n      });\n    } catch (err: any) {\n      this.rethrowGrpcError(err, 'Failed to patch schedule', scheduleId);\n    }\n  }\n\n  /**\n   * Delete a Schedule.\n   */\n  protected async _deleteSchedule(\n    scheduleId: string\n  ): Promise<temporal.api.workflowservice.v1.IDeleteScheduleResponse> {\n    try {\n      return await this.workflowService.deleteSchedule({\n        namespace: this.options.namespace,\n        identity: this.options.identity,\n        scheduleId,\n      });\n    } catch (err: any) {\n      this.rethrowGrpcError(err, 'Failed to delete schedule', scheduleId);\n    }\n  }\n\n  /**\n   * List Schedules with an `AsyncIterator`:\n   *\n   * ```ts\n   * for await (const schedule: Schedule of client.list()) {\n   *   const { id, memo, searchAttributes } = schedule\n   *   // ...\n   * }\n   * ```\n   *\n   * To list one page at a time, instead use the raw gRPC method {@link WorkflowService.listSchedules}:\n   *\n   * ```ts\n   * await { schedules, nextPageToken } = client.scheduleService.listSchedules()\n   * ```\n   */\n  public async *list(options?: ListScheduleOptions): AsyncIterable<ScheduleSummary> {\n    let nextPageToken: Uint8Array | undefined = undefined;\n    for (;;) {\n      let response: temporal.api.workflowservice.v1.ListSchedulesResponse;\n      try {\n        response = await this.workflowService.listSchedules({\n          nextPageToken,\n          namespace: this.options.namespace,\n          maximumPageSize: options?.pageSize,\n          query: options?.query,\n        });\n      } catch (e) {\n        this.rethrowGrpcError(e, 'Failed to list schedules', undefined);\n      }\n\n      const externalStorage = this.dataConverter.externalStorage;\n      await visit(response, walkListSchedulesResponse, extstoreInboundOptions(externalStorage));\n\n      for (const raw of response.schedules ?? []) {\n        yield <ScheduleSummary>{\n          scheduleId: raw.scheduleId,\n\n          spec: decodeScheduleSpec(raw.info?.spec ?? {}),\n          action: raw.info?.workflowType && {\n            type: 'startWorkflow',\n            workflowType: raw.info.workflowType.name,\n          },\n          memo: await decodeMapFromPayloads(this.dataConverter, raw.memo?.fields),\n          searchAttributes: decodeSearchAttributes(raw.searchAttributes?.indexedFields),\n          typedSearchAttributes: decodeTypedSearchAttributes(raw.searchAttributes?.indexedFields),\n          state: {\n            paused: raw.info?.paused === true,\n            note: raw.info?.notes ?? undefined,\n          },\n          info: {\n            recentActions: decodeScheduleRecentActions(raw.info?.recentActions),\n            nextActionTimes: raw.info?.futureActionTimes?.map(tsToDate) ?? [],\n          },\n        };\n      }\n\n      if (response.nextPageToken == null || response.nextPageToken.length === 0) break;\n      nextPageToken = response.nextPageToken;\n    }\n  }\n\n  /**\n   * Get a handle to a Schedule\n   *\n   * This method does not validate `scheduleId`. If there is no Schedule with the given `scheduleId`, handle\n   * methods like `handle.describe()` will throw a {@link ScheduleNotFoundError} error.\n   */\n  public getHandle(scheduleId: string): ScheduleHandle {\n    return {\n      client: this,\n      scheduleId,\n\n      async describe(): Promise<ScheduleDescription> {\n        const raw = await this.client._describeSchedule(this.scheduleId);\n        if (!raw.schedule?.spec || !raw.schedule.action)\n          throw new Error('Received invalid Schedule description from server');\n        return {\n          scheduleId,\n          spec: decodeScheduleSpec(raw.schedule.spec),\n          action: await decodeScheduleAction(\n            this.client.dataConverter,\n            this.client.options.namespace,\n            raw.schedule.action\n          ),\n          memo: await decodeMapFromPayloads(this.client.dataConverter, raw.memo?.fields),\n          searchAttributes: decodeSearchAttributes(raw.searchAttributes?.indexedFields),\n          typedSearchAttributes: decodeTypedSearchAttributes(raw.searchAttributes?.indexedFields),\n          policies: {\n            // 'overlap' should never be missing on describe, as the server will replace UNSPECIFIED by an actual value\n            overlap: decodeScheduleOverlapPolicy(raw.schedule.policies?.overlapPolicy) ?? ScheduleOverlapPolicy.SKIP,\n            catchupWindow: optionalTsToMs(raw.schedule.policies?.catchupWindow) ?? 60_000,\n            pauseOnFailure: raw.schedule.policies?.pauseOnFailure === true,\n          },\n          state: {\n            paused: raw.schedule.state?.paused === true,\n            note: raw.schedule.state?.notes ?? undefined,\n            remainingActions: raw.schedule.state?.limitedActions\n              ? raw.schedule.state?.remainingActions?.toNumber() || 0\n              : undefined,\n          },\n          info: {\n            recentActions: decodeScheduleRecentActions(raw.info?.recentActions),\n            nextActionTimes: raw.info?.futureActionTimes?.map(tsToDate) ?? [],\n            createdAt: requiredTsToDate(raw.info?.createTime, 'createTime'),\n            lastUpdatedAt: optionalTsToDate(raw.info?.updateTime),\n            runningActions: decodeScheduleRunningActions(raw.info?.runningWorkflows),\n            numActionsMissedCatchupWindow: raw.info?.missedCatchupWindow?.toNumber() ?? 0,\n            numActionsSkippedOverlap: raw.info?.overlapSkipped?.toNumber() ?? 0,\n            numActionsTaken: raw.info?.actionCount?.toNumber() ?? 0,\n          },\n          raw,\n        };\n      },\n\n      async update(updateFn): Promise<void> {\n        const current = await this.describe();\n        // Keep existing headers\n        const currentHeader: Headers = current.raw.schedule?.action?.startWorkflow?.header?.fields ?? {};\n        const updated = updateFn(current);\n        assertRequiredScheduleOptions(updated, 'UPDATE');\n        await this.client._updateSchedule(\n          scheduleId,\n          compileUpdatedScheduleOptions(scheduleId, updated),\n          currentHeader\n        );\n      },\n\n      async delete(): Promise<void> {\n        await this.client._deleteSchedule(this.scheduleId);\n      },\n\n      async pause(note?: string): Promise<void> {\n        await this.client._patchSchedule(this.scheduleId, {\n          pause: note ?? 'Paused via TypeScript SDK\"',\n        });\n      },\n\n      async unpause(note?): Promise<void> {\n        await this.client._patchSchedule(this.scheduleId, {\n          unpause: note ?? 'Unpaused via TypeScript SDK\"',\n        });\n      },\n\n      async trigger(overlap?): Promise<void> {\n        await this.client._patchSchedule(this.scheduleId, {\n          triggerImmediately: {\n            overlapPolicy: overlap\n              ? encodeScheduleOverlapPolicy(overlap)\n              : temporal.api.enums.v1.ScheduleOverlapPolicy.SCHEDULE_OVERLAP_POLICY_ALLOW_ALL,\n          },\n        });\n      },\n\n      async backfill(options): Promise<void> {\n        const backfills = Array.isArray(options) ? options : [options];\n        await this.client._patchSchedule(this.scheduleId, {\n          backfillRequest: backfills.map((x) => ({\n            startTime: optionalDateToTs(x.start),\n            endTime: optionalDateToTs(x.end),\n            overlapPolicy: x.overlap ? encodeScheduleOverlapPolicy(x.overlap) : undefined,\n          })),\n        });\n      },\n    };\n  }\n\n  protected rethrowGrpcError(err: unknown, fallbackMessage: string, scheduleId?: string): never {\n    if (isGrpcServiceError(err)) {\n      rethrowKnownErrorTypes(err);\n\n      if (err.code === grpcStatus.NOT_FOUND) {\n        throw new ScheduleNotFoundError(err.details ?? 'Schedule not found', scheduleId ?? '');\n      }\n      if (\n        err.code === grpcStatus.INVALID_ARGUMENT &&\n        err.message.match(/^3 INVALID_ARGUMENT: Invalid schedule spec: /)\n      ) {\n        throw new TypeError(err.message.replace(/^3 INVALID_ARGUMENT: Invalid schedule spec: /, ''));\n      }\n\n      throw new ServiceError(fallbackMessage, { cause: err });\n    }\n    throw new ServiceError('Unexpected error while making gRPC request', { cause: err as Error });\n  }\n}\n\n/**\n * Thrown from {@link ScheduleClient.create} if there's a running (not deleted) Schedule with the given `id`.\n */\n@SymbolBasedInstanceOfError('ScheduleAlreadyRunning')\nexport class ScheduleAlreadyRunning extends Error {\n  constructor(\n    message: string,\n    public readonly scheduleId: string\n  ) {\n    super(message);\n  }\n}\n\n/**\n * Thrown when a Schedule with the given Id is not known to Temporal Server.\n * It could be because:\n * - Id passed is incorrect\n * - Schedule was deleted\n */\n@SymbolBasedInstanceOfError('ScheduleNotFoundError')\nexport class ScheduleNotFoundError extends Error {\n  constructor(\n    message: string,\n    public readonly scheduleId: string\n  ) {\n    super(message);\n  }\n}\n","import type {\n  CommonWorkflowOptions,\n  SignalDefinition,\n  SignalTypeInfo,\n  WithWorkflowArgs,\n  Workflow,\n  VersioningOverride,\n  PayloadTypeInfo,\n} from '@temporalio/common';\nimport { toCanonicalString } from '@temporalio/common';\nimport type { Duration } from '@temporalio/common/lib/time';\nimport { msOptionalToTs } from '@temporalio/common/lib/time';\nimport type { Replace } from '@temporalio/common/lib/type-helpers';\nimport type { google } from '@temporalio/proto';\nimport { temporal } from '@temporalio/proto';\n\nexport * from '@temporalio/common/lib/workflow-options';\n\nexport interface CompiledWorkflowOptions extends WithCompiledWorkflowOptions<WorkflowOptions> {\n  args: unknown[];\n}\n\nexport interface WorkflowOptions extends CommonWorkflowOptions {\n  /**\n   * Workflow id to use when starting.\n   *\n   * Assign a meaningful business id.\n   * This ID can be used to ensure starting Workflows is idempotent.\n   * Workflow IDs are unique: see {@link WorkflowOptions.workflowIdReusePolicy}\n   * and {@link WorkflowOptions.workflowIdConflictPolicy}.\n   */\n  workflowId: string;\n\n  /**\n   * Task queue to use for Workflow tasks. It should match a task queue specified when creating a\n   * `Worker` that hosts the Workflow code.\n   */\n  taskQueue: string;\n\n  /**\n   * If set to true, instructs the client to follow the chain of execution before returning a Workflow's result.\n   *\n   * Workflow execution is chained if the Workflow has a cron schedule or continues-as-new or configured to retry\n   * after failure or timeout.\n   *\n   * @default true\n   */\n  followRuns?: boolean;\n\n  /**\n   * Amount of time to wait before starting the workflow.\n   */\n  startDelay?: Duration;\n\n  /**\n   * Override the versioning behavior of the Workflow that is about to be started.\n   */\n  versioningOverride?: VersioningOverride;\n\n  /**\n   * Potentially reduce the latency to start this workflow by requesting that the server\n   * start it on a local worker running with this same client.\n   */\n  requestEagerStart?: boolean;\n\n  /**\n   * Type information used to encode and decode Workflow input and output.\n   *\n   * @experimental\n   */\n  typeInfo?: PayloadTypeInfo;\n}\n\nexport type WithCompiledWorkflowOptions<T extends WorkflowOptions> = Replace<\n  T,\n  {\n    workflowExecutionTimeout?: google.protobuf.IDuration;\n    workflowRunTimeout?: google.protobuf.IDuration;\n    workflowTaskTimeout?: google.protobuf.IDuration;\n    startDelay?: google.protobuf.IDuration;\n    versioningOverride?: temporal.api.workflow.v1.IVersioningOverride;\n  }\n>;\n\nexport function compileWorkflowOptions<T extends WorkflowOptions>(options: T): WithCompiledWorkflowOptions<T> {\n  const { workflowExecutionTimeout, workflowRunTimeout, workflowTaskTimeout, startDelay, versioningOverride, ...rest } =\n    options;\n\n  return {\n    ...rest,\n    workflowExecutionTimeout: msOptionalToTs(workflowExecutionTimeout),\n    workflowRunTimeout: msOptionalToTs(workflowRunTimeout),\n    workflowTaskTimeout: msOptionalToTs(workflowTaskTimeout),\n    startDelay: msOptionalToTs(startDelay),\n    versioningOverride: versioningOverrideToProto(versioningOverride),\n  };\n}\n\nexport interface WorkflowUpdateOptions {\n  /**\n   * The Update Id, which is a unique-per-Workflow-Execution identifier for this Update.\n   *\n   * We recommend setting it to a meaningful business ID or idempotency key (like a request ID) passed from upstream. If\n   * it is not provided, it will be set to a random string by the Client. If the Server receives two Updates with the\n   * same Update Id to a Workflow Execution with the same Run Id, the second Update will return a handle to the first\n   * Update.\n   */\n  readonly updateId?: string;\n\n  /**\n   * Type information used to convert Update arguments and results when the Update is referenced by name.\n   *\n   * @experimental\n   */\n  typeInfo?: PayloadTypeInfo;\n}\n\ntype WorkflowSignalWithStartOptionsBase<SignalArgs extends any[]> = SignalArgs extends [any, ...any[]]\n  ? WorkflowSignalWithStartOptionsWithArgs<SignalArgs>\n  : WorkflowSignalWithStartOptionsWithoutArgs<SignalArgs>;\n\ntype SignalWithStartTypeInfoOptions =\n  | { signalTypeInfo?: never }\n  | {\n      signal: string;\n\n      /**\n       * Type information used to convert Signal arguments.\n       *\n       * @experimental\n       */\n      signalTypeInfo?: SignalTypeInfo;\n    };\n\nexport type WorkflowSignalWithStartOptions<SignalArgs extends any[] = []> =\n  WorkflowSignalWithStartOptionsBase<SignalArgs> & SignalWithStartTypeInfoOptions;\n\nexport interface WorkflowSignalWithStartOptionsWithoutArgs<SignalArgs extends any[]>\n  extends Omit<WorkflowOptions, 'requestEagerStart'> {\n  /**\n   * SignalDefinition or name of signal\n   */\n  signal: SignalDefinition<SignalArgs> | string;\n\n  /**\n   * Arguments to invoke the signal handler with\n   */\n  signalArgs?: SignalArgs;\n}\n\nexport interface WorkflowSignalWithStartOptionsWithArgs<SignalArgs extends any[]>\n  extends Omit<WorkflowOptions, 'requestEagerStart'> {\n  /**\n   * SignalDefinition or name of signal\n   */\n  signal: SignalDefinition<SignalArgs> | string;\n\n  /**\n   * Arguments to invoke the signal handler with\n   */\n  signalArgs: SignalArgs;\n}\n\n/**\n * Options for starting a Workflow\n */\nexport type WorkflowStartOptions<T extends Workflow = Workflow> = WithWorkflowArgs<T, WorkflowOptions>;\n\nfunction versioningOverrideToProto(\n  vo: VersioningOverride | undefined\n): temporal.api.workflow.v1.IVersioningOverride | undefined {\n  if (!vo) return undefined;\n\n  // TODO: Remove deprecated field assignments when versioning is non-experimental\n  if (vo === 'AUTO_UPGRADE') {\n    return {\n      autoUpgrade: true,\n      behavior: temporal.api.enums.v1.VersioningBehavior.VERSIONING_BEHAVIOR_AUTO_UPGRADE,\n    };\n  }\n\n  return {\n    pinned: {\n      version: vo.pinnedTo,\n      behavior: temporal.api.workflow.v1.VersioningOverride.PinnedOverrideBehavior.PINNED_OVERRIDE_BEHAVIOR_PINNED,\n    },\n    behavior: temporal.api.enums.v1.VersioningBehavior.VERSIONING_BEHAVIOR_PINNED,\n    pinnedVersion: toCanonicalString(vo.pinnedTo),\n  };\n}\n","import { EventEmitter, on, once } from 'node:events';\nimport { isAbortError } from '@temporalio/common/lib/type-helpers';\n\nexport interface MapAsyncOptions {\n  /**\n   * How many items to map concurrently. If set to less than 2 (or not set), then items are not mapped concurrently.\n   *\n   * When items are mapped concurrently, mapped items are returned by the resulting iterator in the order they complete\n   * mapping, not the order in which the corresponding source items were obtained from the source iterator.\n   *\n   * @default 1 (ie. items are not mapped concurrently)\n   */\n  concurrency?: number;\n\n  /**\n   * Maximum number of mapped items to keep in buffer, ready for consumption.\n   *\n   * Ignored unless `concurrency > 1`. No limit applies if set to `undefined`.\n   *\n   * @default unlimited\n   */\n  bufferLimit?: number | undefined;\n}\n\nfunction toAsyncIterator<A>(iterable: AsyncIterable<A>): AsyncIterator<A> {\n  return iterable[Symbol.asyncIterator]();\n}\n\n/**\n * Return an async iterable that transforms items from a source iterable by mapping each item\n * through a mapping function.\n *\n * If `concurrency > 1`, then up to `concurrency` items may be mapped concurrently. In that case,\n * items are returned by the resulting iterator in the order they complete processing, not the order\n * in which the corresponding source items were obtained from the source iterator.\n *\n * @param source the source async iterable\n * @param mapFn a mapping function to apply on every item of the source iterable\n */\nexport async function* mapAsyncIterable<A, B>(\n  source: AsyncIterable<A>,\n  mapFn: (val: A) => Promise<B>,\n  options?: MapAsyncOptions\n): AsyncIterable<B> {\n  const { concurrency, bufferLimit } = options ?? {};\n\n  if (!concurrency || concurrency < 2) {\n    for await (const x of source) {\n      yield mapFn(x);\n    }\n    return;\n  }\n\n  const sourceIterator = toAsyncIterator(source);\n\n  const emitter = new EventEmitter();\n  const controller = new AbortController();\n  const emitterEventsIterable = on(emitter, 'result', { signal: controller.signal }) as AsyncIterable<[B]>;\n  const emitterError: Promise<unknown[]> = once(emitter, 'error');\n\n  const bufferLimitSemaphore =\n    typeof bufferLimit === 'number'\n      ? (() => {\n          const releaseEvents = toAsyncIterator(\n            on(emitter, 'released', { signal: controller.signal })\n          ) as AsyncIterator<void>;\n          let value = bufferLimit + concurrency;\n\n          return {\n            acquire: async () => {\n              while (value <= 0) {\n                await Promise.race([releaseEvents.next(), emitterError]);\n              }\n              value--;\n            },\n            release: () => {\n              value++;\n              emitter.emit('released');\n            },\n          };\n        })()\n      : undefined;\n\n  const mapper = async () => {\n    for (;;) {\n      await bufferLimitSemaphore?.acquire();\n      const val = await Promise.race([sourceIterator.next(), emitterError]);\n\n      if (Array.isArray(val)) return;\n      if ((val as IteratorResult<[B]>)?.done) return;\n\n      emitter.emit('result', await mapFn(val.value));\n    }\n  };\n\n  const mappers = Array(concurrency)\n    .fill(mapper)\n    .map((f: typeof mapper) => f());\n\n  Promise.all(mappers).then(\n    () => controller.abort(),\n    (err) => emitter.emit('error', err)\n  );\n\n  try {\n    for await (const [res] of emitterEventsIterable) {\n      bufferLimitSemaphore?.release();\n      yield res;\n    }\n  } catch (err: unknown) {\n    if (isAbortError(err)) {\n      return;\n    }\n    throw err;\n  }\n}\n","import type { temporal } from '@temporalio/proto';\nimport { makeProtoEnumConverters } from '@temporalio/common/lib/internal-workflow';\n\nexport const WorkflowUpdateStage = {\n  /** Admitted stage. This stage is reached when the server accepts the update request. It is not\n   * allowed to wait for this stage when using startUpdate, since the update request has not yet\n   * been durably persisted at this stage. */\n  ADMITTED: 'ADMITTED',\n\n  /** Accepted stage. This stage is reached when a workflow has received the update and either\n   * accepted it (i.e. it has passed validation, or there was no validator configured on the update\n   * handler) or rejected it. This is currently the only allowed value when using startUpdate. */\n  ACCEPTED: 'ACCEPTED',\n\n  /** Completed stage. This stage is reached when a workflow has completed processing the\n   * update with either a success or failure. */\n  COMPLETED: 'COMPLETED',\n\n  /**\n   * This is not an allowed value.\n   * @deprecated\n   */\n  UNSPECIFIED: undefined,\n} as const;\nexport type WorkflowUpdateStage = (typeof WorkflowUpdateStage)[keyof typeof WorkflowUpdateStage];\n\nexport const [encodeWorkflowUpdateStage] = makeProtoEnumConverters<\n  temporal.api.enums.v1.UpdateWorkflowExecutionLifecycleStage,\n  typeof temporal.api.enums.v1.UpdateWorkflowExecutionLifecycleStage,\n  keyof typeof temporal.api.enums.v1.UpdateWorkflowExecutionLifecycleStage,\n  typeof WorkflowUpdateStage,\n  'UPDATE_WORKFLOW_EXECUTION_LIFECYCLE_STAGE_'\n>(\n  {\n    [WorkflowUpdateStage.ADMITTED]: 1,\n    [WorkflowUpdateStage.ACCEPTED]: 2,\n    [WorkflowUpdateStage.COMPLETED]: 3,\n    UNSPECIFIED: 0,\n  } as const,\n  'UPDATE_WORKFLOW_EXECUTION_LIFECYCLE_STAGE_'\n);\n","import type { WorkflowClientInterceptor, WorkflowStartInput, WorkflowStartOutput } from './interceptors';\n\nexport function adaptWorkflowClientInterceptor(i: WorkflowClientInterceptor): WorkflowClientInterceptor {\n  return adaptLegacyStartInterceptor(i);\n}\n\n// Adapt legacy `start` interceptors to the new `startWithDetails` interceptor.\nfunction adaptLegacyStartInterceptor(i: WorkflowClientInterceptor): WorkflowClientInterceptor {\n  // If it already has the new method, or doesn't have the legacy one, no adaptation is needed.\n  // eslint-disable-next-line @typescript-eslint/no-deprecated\n  if (i.startWithDetails || !i.start) {\n    return i;\n  }\n\n  // This interceptor has a legacy `start` but not `startWithDetails`. We'll adapt it.\n  return {\n    ...i,\n    startWithDetails: async (input, next): Promise<WorkflowStartOutput> => {\n      let downstreamOut: WorkflowStartOutput | undefined;\n\n      // Patched `next` for legacy `start` interceptors.\n      // Captures the full `WorkflowStartOutput` while returning `runId` as a string.\n      const patchedNext = async (patchedInput: WorkflowStartInput): Promise<string> => {\n        downstreamOut = await next(patchedInput);\n        return downstreamOut.runId;\n      };\n\n      const runIdFromLegacyInterceptor = await i.start!(input, patchedNext); // eslint-disable-line @typescript-eslint/no-deprecated\n\n      // If the interceptor short-circuited (didn't call `next`), `downstreamOut` will be undefined.\n      // In that case, we can't have an eager start.\n      if (downstreamOut === undefined) {\n        return { runId: runIdFromLegacyInterceptor, eagerlyStarted: false };\n      }\n\n      // If `next` was called, honor the `runId` from the legacy interceptor but preserve\n      // the `eagerlyStarted` status from the actual downstream call.\n      return { ...downstreamOut, runId: runIdFromLegacyInterceptor };\n    },\n  };\n}\n","import { randomUUID } from 'node:crypto';\nimport { status as grpcStatus } from '@grpc/grpc-js';\nimport type {\n  BaseWorkflowHandle,\n  HistoryAndWorkflowId,\n  QueryDefinition,\n  SignalDefinition,\n  SignalTypeInfo,\n  UpdateDefinition,\n  WithWorkflowArgs,\n  Workflow,\n  WorkflowResultType,\n  WorkflowIdConflictPolicy,\n  WorkflowSerializationContext,\n  WorkflowTypeOptions,\n  PayloadTypeInfo,\n  TypeInfo,\n  WorkflowQueryOptions,\n  WorkflowSignalOptions,\n} from '@temporalio/common';\nimport {\n  CancelledFailure,\n  compileRetryPolicy,\n  RetryState,\n  TerminatedFailure,\n  TimeoutFailure,\n  TimeoutType,\n  WorkflowExecutionAlreadyStartedError,\n  WorkflowNotFoundError,\n  encodeWorkflowIdReusePolicy,\n  decodeRetryState,\n  encodeWorkflowIdConflictPolicy,\n  compilePriority,\n  extractWorkflowTypeAndConfig,\n} from '@temporalio/common';\nimport { encodeUserMetadata } from '@temporalio/common/lib/internal-non-workflow/codec-helpers';\nimport { encodeUnifiedSearchAttributes } from '@temporalio/common/lib/converter/payload-search-attributes';\nimport { composeInterceptors } from '@temporalio/common/lib/interceptors';\nimport type { History } from '@temporalio/common/lib/proto-utils';\nimport { SymbolBasedInstanceOfError } from '@temporalio/common/lib/type-helpers';\nimport {\n  decodeArrayFromPayloads,\n  decodeFromPayloadsAtIndex,\n  decodeOptionalFailureToOptionalError,\n  decodeOptionalSinglePayload,\n  encodeMapToPayloads,\n  encodeToPayloadsWithContext,\n  extstoreInboundOptions,\n  extstoreStoreOptions,\n  visit,\n  walkDescribeWorkflowExecutionResponse,\n  walkExecuteMultiOperationRequest,\n  walkExecuteMultiOperationResponse,\n  walkGetWorkflowExecutionHistoryResponse,\n  walkListWorkflowExecutionsResponse,\n  walkPollWorkflowExecutionUpdateResponse,\n  walkQueryWorkflowRequest,\n  walkQueryWorkflowResponse,\n  walkSignalWithStartWorkflowExecutionRequest,\n  walkSignalWorkflowExecutionRequest,\n  walkStartWorkflowExecutionRequest,\n  walkTerminateWorkflowExecutionRequest,\n  walkUpdateWorkflowExecutionRequest,\n  walkUpdateWorkflowExecutionResponse,\n} from '@temporalio/common/lib/internal-non-workflow';\nimport { filterNullAndUndefined } from '@temporalio/common/lib/internal-workflow';\nimport { temporal } from '@temporalio/proto';\nimport {\n  ServiceError,\n  WorkflowContinuedAsNewError,\n  WorkflowFailedError,\n  WorkflowUpdateFailedError,\n  WorkflowUpdateRPCTimeoutOrCancelledError,\n  isGrpcServiceError,\n} from './errors';\nimport type {\n  WorkflowCancelInput,\n  WorkflowClientInterceptor,\n  WorkflowClientInterceptors,\n  WorkflowDescribeInput,\n  WorkflowQueryInput,\n  WorkflowSignalInput,\n  WorkflowSignalWithStartInput,\n  WorkflowStartInput,\n  WorkflowTerminateInput,\n  WorkflowStartUpdateInput,\n  WorkflowStartUpdateOutput,\n  WorkflowStartUpdateWithStartInput,\n  WorkflowStartUpdateWithStartOutput,\n  WorkflowStartOutput,\n} from './interceptors';\nimport type {\n  CountWorkflowExecution,\n  DescribeWorkflowExecutionResponse,\n  GetWorkflowExecutionHistoryRequest,\n  InternalConnectionLike,\n  QueryRejectCondition,\n  RequestCancelWorkflowExecutionResponse,\n  StartWorkflowExecutionRequest,\n  TerminateWorkflowExecutionResponse,\n  WorkflowExecution,\n  WorkflowExecutionDescription,\n  WorkflowExecutionInfo,\n  WorkflowService,\n} from './types';\nimport { encodeQueryRejectCondition, InternalConnectionLikeSymbol } from './types';\nimport type {\n  WorkflowOptions,\n  WorkflowSignalWithStartOptions,\n  WorkflowStartOptions,\n  WorkflowUpdateOptions,\n} from './workflow-options';\nimport { compileWorkflowOptions } from './workflow-options';\nimport { decodeCountWorkflowExecutionsResponse, executionInfoFromRaw, rethrowKnownErrorTypes } from './helpers';\nimport type { BaseClientOptions, LoadedWithDefaults, WithDefaults } from './base-client';\nimport { BaseClient, defaultBaseClientOptions } from './base-client';\nimport { mapAsyncIterable } from './iterators-utils';\nimport { WorkflowUpdateStage, encodeWorkflowUpdateStage } from './workflow-update-stage';\nimport type { InternalWorkflowHandle, InternalWorkflowSignalInput, InternalWorkflowStartOptions } from './internal';\nimport {\n  InternalWorkflowSignalOptionsSymbol,\n  InternalWorkflowStartOptionsSymbol,\n  type InternalWorkflowUpdateOptions,\n  InternalWorkflowUpdateOptionsSymbol,\n} from './internal';\nimport { adaptWorkflowClientInterceptor } from './interceptor-adapters';\n\nconst UpdateWorkflowExecutionLifecycleStage = temporal.api.enums.v1.UpdateWorkflowExecutionLifecycleStage;\n\n/**\n * A client side handle to a single Workflow instance.\n * It can be used to start, signal, query, wait for completion, terminate and cancel a Workflow execution.\n *\n * Given the following Workflow definition:\n * ```ts\n * export const incrementSignal = defineSignal<[number]>('increment');\n * export const getValueQuery = defineQuery<number>('getValue');\n * export const incrementAndGetValueUpdate = defineUpdate<number, [number]>('incrementAndGetValue');\n * export async function counterWorkflow(initialValue: number): Promise<void>;\n * ```\n *\n * Create a handle for running and interacting with a single Workflow:\n * ```ts\n * const client = new WorkflowClient();\n * // Start the Workflow with initialValue of 2.\n * const handle = await client.start({\n *   workflowType: counterWorkflow,\n *   args: [2],\n *   taskQueue: 'tutorial',\n * });\n * await handle.signal(incrementSignal, 2);\n * const queryResult = await handle.query(getValueQuery); // 4\n * const firstUpdateResult = await handle.executeUpdate(incrementAndGetValueUpdate, { args: [2] }); // 6\n * const secondUpdateHandle = await handle.startUpdate(incrementAndGetValueUpdate, { args: [2] });\n * const secondUpdateResult = await secondUpdateHandle.result(); // 8\n * await handle.cancel();\n * await handle.result(); // throws a WorkflowFailedError with `cause` set to a CancelledFailure.\n * ```\n */\nexport interface WorkflowHandle<T extends Workflow = Workflow> extends BaseWorkflowHandle<T> {\n  /**\n   * Start an Update and wait for the result.\n   *\n   * @throws {@link WorkflowUpdateFailedError} if Update validation fails or if ApplicationFailure is thrown in the Update handler.\n   * @throws {@link WorkflowUpdateRPCTimeoutOrCancelledError} if this Update call timed out or was cancelled. This doesn't\n   *  mean the update itself was timed out or cancelled.\n   * @param def an Update definition as returned from {@link defineUpdate}\n   * @param options Update arguments\n   *\n   * @example\n   * ```ts\n   * const updateResult = await handle.executeUpdate(incrementAndGetValueUpdate, { args: [2] });\n   * ```\n   */\n  executeUpdate<Ret, Args extends [any, ...any[]], Name extends string = string>(\n    def: UpdateDefinition<Ret, Args, Name> | string,\n    options: WorkflowUpdateOptions & { args: Args }\n  ): Promise<Ret>;\n\n  executeUpdate<Ret, Args extends [], Name extends string = string>(\n    def: UpdateDefinition<Ret, Args, Name> | string,\n    options?: WorkflowUpdateOptions & { args?: Args }\n  ): Promise<Ret>;\n\n  /**\n   * Start an Update and receive a handle to the Update. The Update validator (if present) is run\n   * before the handle is returned.\n   *\n   * @throws {@link WorkflowUpdateFailedError} if Update validation fails.\n   * @throws {@link WorkflowUpdateRPCTimeoutOrCancelledError} if this Update call timed out or was cancelled. This doesn't\n   *  mean the update itself was timed out or cancelled.\n   *\n   * @param def an Update definition as returned from {@link defineUpdate}\n   * @param options update arguments, and update lifecycle stage to wait for\n   *\n   * Currently, startUpdate always waits until a worker is accepting tasks for the workflow and the\n   * update is accepted or rejected, and the options object must be at least\n   * ```ts\n   * {\n   *   waitForStage: WorkflowUpdateStage.ACCEPTED\n   * }\n   * ```\n   * If the update takes arguments, then the options object must additionally contain an `args`\n   * property with an array of argument values.\n   *\n   * @example\n   * ```ts\n   * const updateHandle = await handle.startUpdate(incrementAndGetValueUpdate, {\n   *   args: [2],\n   *   waitForStage: 'ACCEPTED',\n   * });\n   * const updateResult = await updateHandle.result();\n   * ```\n   */\n  startUpdate<Ret, Args extends [any, ...any[]], Name extends string = string>(\n    def: UpdateDefinition<Ret, Args, Name> | string,\n    options: WorkflowUpdateOptions & {\n      args: Args;\n      waitForStage: 'ACCEPTED';\n    }\n  ): Promise<WorkflowUpdateHandle<Ret>>;\n\n  startUpdate<Ret, Args extends [], Name extends string = string>(\n    def: UpdateDefinition<Ret, Args, Name> | string,\n    options: WorkflowUpdateOptions & {\n      args?: Args;\n      waitForStage: typeof WorkflowUpdateStage.ACCEPTED;\n    }\n  ): Promise<WorkflowUpdateHandle<Ret>>;\n\n  /**\n   * Get a handle to an Update of this Workflow.\n   */\n  getUpdateHandle<Ret>(updateId: string, options?: GetWorkflowUpdateHandleOptions): WorkflowUpdateHandle<Ret>;\n\n  /**\n   * Query a running or completed Workflow.\n   *\n   * @param def a query definition as returned from {@link defineQuery} or query name (string)\n   *\n   * @example\n   * ```ts\n   * await handle.query(getValueQuery);\n   * await handle.query<number, []>('getValue');\n   * ```\n   */\n  query<Ret, Args extends any[] = []>(def: QueryDefinition<Ret, Args> | string, ...args: Args): Promise<Ret>;\n\n  /**\n   * Query a running or completed Workflow by Query name with additional options, including call-site TypeInfo.\n   *\n   * @experimental\n   */\n  queryWithOptions<Ret, Args extends any[] = []>(queryName: string, options: WorkflowQueryOptions<Args>): Promise<Ret>;\n\n  /**\n   * Terminate a running Workflow\n   */\n  terminate(reason?: string): Promise<TerminateWorkflowExecutionResponse>;\n\n  /**\n   * Cancel a running Workflow.\n   *\n   * When a Workflow is cancelled, the root scope throws {@link CancelledFailure} with `message: 'Workflow canceled'`.\n   * That means that all cancellable scopes will throw `CancelledFailure`.\n   *\n   * Cancellation may be propagated to Activities depending on {@link ActivityOptions#cancellationType}, after which\n   * Activity calls may throw an {@link ActivityFailure}, and `isCancellation(error)` will be true (see {@link isCancellation}).\n   *\n   * Cancellation may be propagated to Child Workflows depending on {@link ChildWorkflowOptions#cancellationType}, after\n   * which calls to {@link executeChild} and {@link ChildWorkflowHandle#result} will throw, and `isCancellation(error)`\n   * will be true (see {@link isCancellation}).\n   */\n  cancel(): Promise<RequestCancelWorkflowExecutionResponse>;\n\n  /**\n   * Describe the current workflow execution\n   */\n  describe(): Promise<WorkflowExecutionDescription>;\n\n  /**\n   * Return a workflow execution's history\n   */\n  fetchHistory(): Promise<History>;\n\n  /**\n   * Readonly accessor to the underlying WorkflowClient\n   */\n  readonly client: WorkflowClient;\n}\n\n/**\n * This interface is exactly the same as {@link WorkflowHandle} except it\n * includes the `firstExecutionRunId` returned from {@link WorkflowClient.start}.\n */\nexport interface WorkflowHandleWithFirstExecutionRunId<T extends Workflow = Workflow> extends WorkflowHandle<T> {\n  /**\n   * Run Id of the first Execution in the Workflow Execution Chain.\n   */\n  readonly firstExecutionRunId: string;\n}\n\n/**\n * This interface is exactly the same as {@link WorkflowHandleWithFirstExecutionRunId} except it\n * includes the `eagerlyStarted` returned from {@link WorkflowClient.start}.\n */\nexport interface WorkflowHandleWithStartDetails<T extends Workflow = Workflow>\n  extends WorkflowHandleWithFirstExecutionRunId<T> {\n  readonly eagerlyStarted: boolean;\n}\n\n/**\n * This interface is exactly the same as {@link WorkflowHandle} except it\n * includes the `signaledRunId` returned from `signalWithStart`.\n */\nexport interface WorkflowHandleWithSignaledRunId<T extends Workflow = Workflow> extends WorkflowHandle<T> {\n  /**\n   * The Run Id of the bound Workflow at the time of {@link WorkflowClient.signalWithStart}.\n   *\n   * Since `signalWithStart` may have signaled an existing Workflow Chain, `signaledRunId` might not be the\n   * `firstExecutionRunId`.\n   */\n  readonly signaledRunId: string;\n}\n\nexport interface WorkflowClientOptions extends BaseClientOptions {\n  /**\n   * Used to override and extend default Connection functionality\n   *\n   * Useful for injecting auth headers and tracing Workflow executions\n   */\n  interceptors?: WorkflowClientInterceptors | WorkflowClientInterceptor[];\n\n  /**\n   * Should a query be rejected by closed and failed workflows\n   *\n   * @default `undefined` which means that closed and failed workflows are still queryable\n   */\n  queryRejectCondition?: QueryRejectCondition;\n}\n\nexport type LoadedWorkflowClientOptions = LoadedWithDefaults<WorkflowClientOptions>;\n\nfunction defaultWorkflowClientOptions(): WithDefaults<WorkflowClientOptions> {\n  return {\n    ...defaultBaseClientOptions(),\n    interceptors: [],\n    queryRejectCondition: 'NONE',\n  };\n}\n\nfunction assertRequiredWorkflowOptions(opts: WorkflowOptions): asserts opts is WorkflowOptions {\n  if (!opts.taskQueue) {\n    throw new TypeError('Missing WorkflowOptions.taskQueue');\n  }\n  if (!opts.workflowId) {\n    throw new TypeError('Missing WorkflowOptions.workflowId');\n  }\n}\n\nfunction ensureArgs<W extends Workflow, T extends WorkflowStartOptions<W>>(\n  opts: T\n): Omit<T, 'args'> & { args: unknown[] } {\n  const { args, ...rest } = opts;\n  return { args: (args as unknown[]) ?? [], ...rest };\n}\n\n/**\n * Options for getting a result of a Workflow execution.\n */\nexport interface WorkflowResultOptions {\n  /**\n   * If set to true, instructs the client to follow the chain of execution before returning a Workflow's result.\n   *\n   * Workflow execution is chained if the Workflow has a cron schedule or continues-as-new or configured to retry\n   * after failure or timeout.\n   *\n   * @default true\n   */\n  followRuns?: boolean;\n\n  /**\n   * Type information used to decode the Workflow result.\n   *\n   * This is only needed when getting a result from an existing Workflow handle or\n   * when the Workflow definition is not available to this client.\n   *\n   * @experimental\n   */\n  typeInfo?: PayloadTypeInfo;\n}\n\n/**\n * Options for {@link WorkflowClient.getHandle}\n */\nexport interface GetWorkflowHandleOptions extends WorkflowResultOptions {\n  /**\n   * ID of the first execution in the Workflow execution chain.\n   *\n   * When getting a handle with no `runId`, pass this option to ensure some\n   * {@link WorkflowHandle} methods (e.g. `terminate` and `cancel`) don't\n   * affect executions from another chain.\n   */\n  firstExecutionRunId?: string;\n}\n\ninterface WorkflowHandleOptions extends GetWorkflowHandleOptions {\n  workflowId: string;\n  runId?: string;\n  interceptors: WorkflowClientInterceptor[];\n  /**\n   * A runId to use for getting the workflow's result.\n   *\n   * - When creating a handle using `getHandle`, uses the provided runId or firstExecutionRunId\n   * - When creating a handle using `start`, uses the returned runId (first in the chain)\n   * - When creating a handle using `signalWithStart`, uses the the returned runId\n   */\n  runIdForResult?: string;\n}\n\n/**\n * An iterable list of WorkflowExecution, as returned by {@link WorkflowClient.list}.\n */\nexport interface AsyncWorkflowListIterable extends AsyncIterable<WorkflowExecutionInfo> {\n  /**\n   * Return an iterable of histories corresponding to this iterable's WorkflowExecutions.\n   * Workflow histories will be fetched concurrently.\n   *\n   * Useful in batch replaying\n   */\n  intoHistories: (intoHistoriesOptions?: IntoHistoriesOptions) => AsyncIterable<HistoryAndWorkflowId>;\n}\n\n/**\n * A client-side handle to an Update.\n */\nexport interface WorkflowUpdateHandle<Ret> {\n  /**\n   * The ID of this Update request.\n   */\n  updateId: string;\n\n  /**\n   * The ID of the Workflow being targeted by this Update request.\n   */\n  workflowId: string;\n\n  /**\n   * The ID of the Run of the Workflow being targeted by this Update request.\n   */\n  workflowRunId?: string;\n\n  /**\n   * Return the result of the Update.\n   * @throws {@link WorkflowUpdateFailedError} if ApplicationFailure is thrown in the Update handler.\n   */\n  result(): Promise<Ret>;\n}\n\n/**\n * Options for {@link WorkflowHandle.getUpdateHandle}\n */\nexport interface GetWorkflowUpdateHandleOptions {\n  /**\n   * The ID of the Run of the Workflow targeted by the Update.\n   */\n  workflowRunId?: string;\n\n  /**\n   * Type information used to decode the Update result.\n   *\n   * @experimental\n   */\n  typeInfo?: Pick<PayloadTypeInfo, 'outputType'>;\n}\n\n/**\n * Options for {@link WorkflowClient.list}\n */\nexport interface ListOptions {\n  /**\n   * Maximum number of results to fetch per page.\n   *\n   * @default depends on server config, typically 1000\n   */\n  pageSize?: number;\n  /**\n   * Query string for matching and ordering the results\n   */\n  query?: string;\n}\n\n/**\n * Options for {@link WorkflowClient.list().intoHistories()}\n */\nexport interface IntoHistoriesOptions {\n  /**\n   * Maximum number of workflow histories to download concurrently.\n   *\n   * @default 5\n   */\n  concurrency?: number;\n\n  /**\n   * Maximum number of workflow histories to buffer ahead, ready for consumption.\n   *\n   * It is recommended to set `bufferLimit` to a rasonnably low number if it is expected that the\n   * iterable may be stopped before reaching completion (for example, when implementing a fail fast\n   * bach replay test).\n   *\n   * Ignored unless `concurrency > 1`. No limit applies if set to `undefined`.\n   *\n   * @default unlimited\n   */\n  bufferLimit?: number;\n}\n\nconst withStartWorkflowOperationResolve: unique symbol = Symbol();\nconst withStartWorkflowOperationReject: unique symbol = Symbol();\nconst withStartWorkflowOperationUsed: unique symbol = Symbol();\n\n/**\n * Define how to start a workflow when using {@link WorkflowClient.startUpdateWithStart} and\n * {@link WorkflowClient.executeUpdateWithStart}. `workflowIdConflictPolicy` is required in the options.\n */\nexport class WithStartWorkflowOperation<T extends Workflow> {\n  private [withStartWorkflowOperationUsed]: boolean = false;\n  private [withStartWorkflowOperationResolve]: ((handle: WorkflowHandle<T>) => void) | undefined = undefined;\n  private [withStartWorkflowOperationReject]: ((error: any) => void) | undefined = undefined;\n  private workflowHandlePromise: Promise<WorkflowHandle<T>>;\n\n  constructor(\n    public workflowTypeOrFunc: string | T,\n    public options: WorkflowStartOptions<T> & { workflowIdConflictPolicy: WorkflowIdConflictPolicy }\n  ) {\n    this.workflowHandlePromise = new Promise<WorkflowHandle<T>>((resolve, reject) => {\n      this[withStartWorkflowOperationResolve] = resolve;\n      this[withStartWorkflowOperationReject] = reject;\n    });\n    // Suppress unhandled rejection: if executeUpdateWithStart fails before any\n    // response, we reject this promise AND re-throw to the caller. Without this\n    // no-op catch the rejected promise has no handler and Node 15+ terminates.\n    this.workflowHandlePromise.catch(() => undefined);\n  }\n\n  public async workflowHandle(): Promise<WorkflowHandle<T>> {\n    return await this.workflowHandlePromise;\n  }\n}\n\n/**\n * Client for starting Workflow executions and creating Workflow handles.\n *\n * Typically this client should not be instantiated directly, instead create the high level {@link Client} and use\n * {@link Client.workflow} to interact with Workflows.\n */\nexport class WorkflowClient extends BaseClient {\n  public readonly options: LoadedWorkflowClientOptions;\n\n  constructor(options?: WorkflowClientOptions) {\n    super(options);\n    this.options = {\n      ...defaultWorkflowClientOptions(),\n      ...filterNullAndUndefined(options ?? {}),\n      loadedDataConverter: this.dataConverter,\n    };\n  }\n\n  /**\n   * Raw gRPC access to the Temporal service.\n   *\n   * **NOTE**: The namespace provided in {@link options} is **not** automatically set on requests made via this service\n   * object.\n   */\n  get workflowService(): WorkflowService {\n    return this.connection.workflowService;\n  }\n\n  protected workflowSerializationContext(workflowId: string): WorkflowSerializationContext {\n    return {\n      type: 'workflow',\n      namespace: this.options.namespace,\n      workflowId,\n    };\n  }\n\n  protected async _start<T extends Workflow>(\n    workflowTypeOptions: WorkflowTypeOptions,\n    options: WorkflowStartOptions<T>,\n    interceptors: WorkflowClientInterceptor[]\n  ): Promise<WorkflowStartOutput> {\n    assertRequiredWorkflowOptions(options);\n    const workflowOptions = {\n      ...options,\n      typeInfo: workflowTypeOptions.typeInfo,\n    };\n    const compiledOptions = compileWorkflowOptions(ensureArgs(workflowOptions));\n    const adaptedInterceptors = interceptors.map((i) => adaptWorkflowClientInterceptor(i));\n\n    const startWithDetails = composeInterceptors(\n      adaptedInterceptors,\n      'startWithDetails',\n      this._startWorkflowHandler.bind(this)\n    );\n\n    return startWithDetails({\n      options: compiledOptions,\n      headers: {},\n      workflowType: workflowTypeOptions.type,\n    });\n  }\n\n  protected async _signalWithStart<T extends Workflow, SA extends any[]>(\n    workflowTypeOrFunc: string | T,\n    options: WithWorkflowArgs<T, WorkflowSignalWithStartOptions<SA>>,\n    interceptors: WorkflowClientInterceptor[]\n  ): Promise<string> {\n    const { signal, signalArgs, signalTypeInfo, ...rest } = options;\n    let signalName: string;\n    let resolvedSignalTypeInfo: SignalTypeInfo | undefined;\n    if (typeof signal === 'string') {\n      signalName = signal;\n      resolvedSignalTypeInfo = signalTypeInfo;\n    } else {\n      if (signalTypeInfo !== undefined) {\n        throw new TypeError(\n          'Cannot provide call-site Signal TypeInfo with a Signal definition. ' +\n            'Use defineSignal(..., { typeInfo }) on the Signal definition instead.'\n        );\n      }\n      signalName = signal.name;\n      resolvedSignalTypeInfo = signal.typeInfo;\n    }\n    const { type: workflowType, typeInfo } = extractWorkflowTypeAndConfig(workflowTypeOrFunc, rest.typeInfo);\n    assertRequiredWorkflowOptions(rest);\n    const workflowOptions = {\n      ...rest,\n      typeInfo,\n    };\n    const compiledOptions = compileWorkflowOptions(ensureArgs(workflowOptions));\n    const signalWithStart = composeInterceptors(\n      interceptors,\n      'signalWithStart',\n      this._signalWithStartWorkflowHandler.bind(this)\n    );\n\n    return signalWithStart({\n      options: compiledOptions,\n      headers: {},\n      workflowType,\n      signalName,\n      signalArgs: signalArgs ?? [],\n      signalTypeInfo: resolvedSignalTypeInfo,\n    });\n  }\n\n  /**\n   * Start a new Workflow execution.\n   *\n   * @returns a {@link WorkflowHandle} to the started Workflow\n   */\n  public async start<T extends Workflow>(\n    workflowTypeOrFunc: string | T,\n    options: WorkflowStartOptions<T>\n  ): Promise<WorkflowHandleWithStartDetails<T>> {\n    const { workflowId } = options;\n    const interceptors = this.getOrMakeInterceptors(workflowId);\n    const workflowTypeOptions = extractWorkflowTypeAndConfig(workflowTypeOrFunc, options.typeInfo);\n    const wfStartOutput = await this._start(workflowTypeOptions, { ...options, workflowId }, interceptors);\n    // runId is not used in handles created with `start*` calls because these\n    // handles should allow interacting with the workflow if it continues as new.\n    const baseHandle = this._createWorkflowHandle({\n      workflowId,\n      runId: undefined,\n      firstExecutionRunId: wfStartOutput.runId,\n      runIdForResult: wfStartOutput.runId,\n      interceptors,\n      followRuns: options.followRuns ?? true,\n      typeInfo: workflowTypeOptions.typeInfo,\n    });\n    return {\n      ...baseHandle,\n      firstExecutionRunId: wfStartOutput.runId,\n      eagerlyStarted: wfStartOutput.eagerlyStarted,\n    };\n  }\n\n  /**\n   * Start a new Workflow Execution and immediately send a Signal to that Workflow.\n   *\n   * The behavior of Signal-with-Start in the case where there is already a running Workflow with\n   * the given Workflow ID depends on the {@link WorkflowIDConflictPolicy}. That is, if the policy\n   * is `USE_EXISTING`, then the Signal is issued against the already existing Workflow Execution;\n   * however, if the policy is `FAIL`, then an error is thrown. If no policy is specified,\n   * Signal-with-Start defaults to `USE_EXISTING`.\n   *\n   * A Signal definition supplies its own TypeInfo. When signaling by name, provide call-site TypeInfo through\n   * {@link WorkflowSignalWithStartOptions.signalTypeInfo}.\n   *\n   * @returns a {@link WorkflowHandle} to the started Workflow\n   */\n  public async signalWithStart<WorkflowFn extends Workflow, SignalArgs extends any[] = []>(\n    workflowTypeOrFunc: string | WorkflowFn,\n    options: WithWorkflowArgs<WorkflowFn, WorkflowSignalWithStartOptions<SignalArgs>>\n  ): Promise<WorkflowHandleWithSignaledRunId<WorkflowFn>> {\n    const { workflowId } = options;\n    const interceptors = this.getOrMakeInterceptors(workflowId);\n    const workflowTypeOptions = extractWorkflowTypeAndConfig(workflowTypeOrFunc, options.typeInfo);\n    const runId = await this._signalWithStart(workflowTypeOrFunc, options, interceptors);\n    // runId is not used in handles created with `start*` calls because these\n    // handles should allow interacting with the workflow if it continues as new.\n    const handle = this._createWorkflowHandle({\n      workflowId,\n      runId: undefined,\n      firstExecutionRunId: undefined, // We don't know if this runId is first in the chain or not\n      runIdForResult: runId,\n      interceptors,\n      followRuns: options.followRuns ?? true,\n      typeInfo: workflowTypeOptions.typeInfo,\n    }) as WorkflowHandleWithSignaledRunId<WorkflowFn>; // Cast is safe because we know we add the signaledRunId below\n    (handle as any) /* readonly */.signaledRunId = runId;\n    return handle;\n  }\n\n  /**\n   * Start a new Workflow Execution and immediately send an Update to that Workflow,\n   * then await and return the Update's result.\n   *\n   * The `updateOptions` object must contain a {@link WithStartWorkflowOperation}, which defines\n   * the options for the Workflow execution to start (e.g. the Workflow's type, task queue, input\n   * arguments, etc.)\n   *\n   * The behavior of Update-with-Start in the case where there is already a running Workflow with\n   * the given Workflow ID depends on the specified {@link WorkflowIDConflictPolicy}. That is, if\n   * the policy is `USE_EXISTING`, then the Update is issued against the already existing Workflow\n   * Execution; however, if the policy is `FAIL`, then an error is thrown. Caller MUST specify\n   * the desired WorkflowIDConflictPolicy.\n   *\n   * This call will block until the Update has completed. The Workflow handle can be retrieved by\n   * awaiting on {@link WithStartWorkflowOperation.workflowHandle}, whether or not the Update\n   * succeeds.\n   *\n   * @returns the Update result\n   */\n  public async executeUpdateWithStart<T extends Workflow, Ret, Args extends any[]>(\n    updateDef: UpdateDefinition<Ret, Args> | string,\n    updateOptions: WorkflowUpdateOptions & { args?: Args; startWorkflowOperation: WithStartWorkflowOperation<T> }\n  ): Promise<Ret> {\n    const handle = await this._startUpdateWithStart(updateDef, {\n      ...updateOptions,\n      waitForStage: WorkflowUpdateStage.COMPLETED,\n    });\n    return await handle.result();\n  }\n\n  /**\n   * Start a new Workflow Execution and immediately send an Update to that Workflow,\n   * then return a {@link WorkflowUpdateHandle} for that Update.\n   *\n   * The `updateOptions` object must contain a {@link WithStartWorkflowOperation}, which defines\n   * the options for the Workflow execution to start (e.g. the Workflow's type, task queue, input\n   * arguments, etc.)\n   *\n   * The behavior of Update-with-Start in the case where there is already a running Workflow with\n   * the given Workflow ID depends on the specified {@link WorkflowIDConflictPolicy}. That is, if\n   * the policy is `USE_EXISTING`, then the Update is issued against the already existing Workflow\n   * Execution; however, if the policy is `FAIL`, then an error is thrown. Caller MUST specify\n   * the desired WorkflowIDConflictPolicy.\n   *\n   * This call will block until the Update has reached the specified {@link WorkflowUpdateStage}.\n   * Note that this means that the call will not return successfully until the Update has\n   * been delivered to a Worker. The Workflow handle can be retrieved by awaiting on\n   * {@link WithStartWorkflowOperation.workflowHandle}, whether or not the Update succeeds.\n   *\n   * @returns a {@link WorkflowUpdateHandle} to the started Update\n   */\n  public async startUpdateWithStart<T extends Workflow, Ret, Args extends any[]>(\n    updateDef: UpdateDefinition<Ret, Args> | string,\n    updateOptions: WorkflowUpdateOptions & {\n      args?: Args;\n      waitForStage: 'ACCEPTED';\n      startWorkflowOperation: WithStartWorkflowOperation<T>;\n    }\n  ): Promise<WorkflowUpdateHandle<Ret>> {\n    return this._startUpdateWithStart(updateDef, updateOptions);\n  }\n\n  protected async _startUpdateWithStart<T extends Workflow, Ret, Args extends any[]>(\n    updateDef: UpdateDefinition<Ret, Args> | string,\n    updateWithStartOptions: WorkflowUpdateOptions & {\n      args?: Args;\n      waitForStage: WorkflowUpdateStage;\n      startWorkflowOperation: WithStartWorkflowOperation<T>;\n    }\n  ): Promise<WorkflowUpdateHandle<Ret>> {\n    const {\n      waitForStage,\n      args,\n      startWorkflowOperation,\n      typeInfo: callSiteTypeInfo,\n      ...updateOptions\n    } = updateWithStartOptions;\n    let updateName: string;\n    let updateTypeInfo: PayloadTypeInfo | undefined;\n    if (typeof updateDef === 'string') {\n      updateName = updateDef;\n      updateTypeInfo = callSiteTypeInfo;\n    } else {\n      if (callSiteTypeInfo !== undefined) {\n        throw new TypeError(\n          'Cannot provide call-site Update TypeInfo with an Update definition. ' +\n            'Define TypeInfo when creating the Update definition instead.'\n        );\n      }\n      updateName = updateDef.name;\n      updateTypeInfo = updateDef.typeInfo;\n    }\n    const { workflowTypeOrFunc, options: workflowOptions } = startWorkflowOperation;\n    const { workflowId } = workflowOptions;\n\n    if (startWorkflowOperation[withStartWorkflowOperationUsed]) {\n      throw new Error('This WithStartWorkflowOperation instance has already been executed.');\n    }\n    startWorkflowOperation[withStartWorkflowOperationUsed] = true;\n    const { type: workflowType, typeInfo } = extractWorkflowTypeAndConfig(workflowTypeOrFunc, workflowOptions.typeInfo);\n    assertRequiredWorkflowOptions(workflowOptions);\n\n    const resolvedWorkflowOptions = {\n      ...workflowOptions,\n      typeInfo,\n    };\n    const startUpdateWithStartInput: WorkflowStartUpdateWithStartInput = {\n      workflowType,\n      workflowStartOptions: compileWorkflowOptions(ensureArgs(resolvedWorkflowOptions)),\n      workflowStartHeaders: {},\n      updateName,\n      updateArgs: args ?? [],\n      updateTypeInfo,\n      updateOptions,\n      updateHeaders: {},\n    };\n\n    const interceptors = this.getOrMakeInterceptors(workflowId);\n\n    const onStart = (startResponse: temporal.api.workflowservice.v1.IStartWorkflowExecutionResponse) =>\n      startWorkflowOperation[withStartWorkflowOperationResolve]!(\n        this._createWorkflowHandle({\n          workflowId,\n          firstExecutionRunId: startResponse.runId ?? undefined,\n          interceptors,\n          followRuns: workflowOptions.followRuns ?? true,\n          typeInfo,\n        })\n      );\n\n    const onStartError = (err: any) => {\n      startWorkflowOperation[withStartWorkflowOperationReject]!(err);\n    };\n\n    const fn = composeInterceptors(\n      interceptors,\n      'startUpdateWithStart',\n      this._updateWithStartHandler.bind(this, waitForStage, onStart, onStartError)\n    );\n    const updateOutput = await fn(startUpdateWithStartInput);\n\n    let outcome = updateOutput.updateOutcome;\n    if (!outcome && waitForStage === WorkflowUpdateStage.COMPLETED) {\n      outcome = await this._pollForUpdateOutcome(updateOutput.updateId, {\n        workflowId,\n        runId: updateOutput.workflowExecution.runId,\n      });\n    }\n\n    return this.createWorkflowUpdateHandle(\n      updateOutput.updateId,\n      workflowId,\n      updateOutput.workflowExecution.runId,\n      outcome,\n      updateOutput.updateOutputTypeInfo\n    );\n  }\n\n  /**\n   * Start a new Workflow execution, then await for its completion and return that Workflow's result.\n   *\n   * @returns the result of the Workflow execution\n   */\n  public async execute<T extends Workflow>(\n    workflowTypeOrFunc: string | T,\n    options: WorkflowStartOptions<T>\n  ): Promise<WorkflowResultType<T>> {\n    const { workflowId } = options;\n    const interceptors = this.getOrMakeInterceptors(workflowId);\n    const workflowTypeOptions = extractWorkflowTypeAndConfig(workflowTypeOrFunc, options.typeInfo);\n    await this._start(workflowTypeOptions, options, interceptors);\n    return await this.result(workflowId, undefined, {\n      ...options,\n      followRuns: options.followRuns ?? true,\n      typeInfo: workflowTypeOptions.typeInfo,\n    });\n  }\n\n  /**\n   * Get the result of a Workflow execution.\n   *\n   * Follow the chain of execution in case Workflow continues as new, or has a cron schedule or retry policy.\n   */\n  public async result<T extends Workflow>(\n    workflowId: string,\n    runId?: string,\n    opts?: WorkflowResultOptions\n  ): Promise<WorkflowResultType<T>> {\n    const dataConverter = this.dataConverter;\n    const context = this.workflowSerializationContext(workflowId);\n    const followRuns = opts?.followRuns ?? true;\n    const execution: temporal.api.common.v1.IWorkflowExecution = { workflowId, runId };\n    const req: GetWorkflowExecutionHistoryRequest = {\n      namespace: this.options.namespace,\n      execution,\n      skipArchival: true,\n      waitNewEvent: true,\n      historyEventFilterType: temporal.api.enums.v1.HistoryEventFilterType.HISTORY_EVENT_FILTER_TYPE_CLOSE_EVENT,\n    };\n    let ev: temporal.api.history.v1.IHistoryEvent;\n\n    for (;;) {\n      let res: temporal.api.workflowservice.v1.GetWorkflowExecutionHistoryResponse;\n      try {\n        res = await this.workflowService.getWorkflowExecutionHistory(req);\n      } catch (err) {\n        this.rethrowGrpcError(err, 'Failed to get Workflow execution history', { workflowId, runId });\n      }\n      const externalStorage = this.dataConverter.externalStorage;\n      await visit(res, walkGetWorkflowExecutionHistoryResponse, extstoreInboundOptions(externalStorage));\n      const events = res.history?.events;\n\n      if (events == null || events.length === 0) {\n        req.nextPageToken = res.nextPageToken;\n        continue;\n      }\n      if (events.length !== 1) {\n        throw new Error(`Expected at most 1 close event(s), got: ${events.length}`);\n      }\n      // getWorkflowExecutionHistory should never return an array of undefined events\n      ev = events[0]!;\n\n      if (ev.workflowExecutionCompletedEventAttributes) {\n        if (followRuns && ev.workflowExecutionCompletedEventAttributes.newExecutionRunId) {\n          execution.runId = ev.workflowExecutionCompletedEventAttributes.newExecutionRunId;\n          req.nextPageToken = undefined;\n          continue;\n        }\n        // Note that we can only return one value from our workflow function in JS.\n        // Ignore any other payloads in result\n        const result = await decodeFromPayloadsAtIndex<WorkflowResultType<T>, unknown>(\n          dataConverter,\n          0,\n          ev.workflowExecutionCompletedEventAttributes.result?.payloads,\n          context,\n          opts?.typeInfo?.outputType as TypeInfo<WorkflowResultType<T>, unknown> | undefined\n        );\n        return result;\n      } else if (ev.workflowExecutionFailedEventAttributes) {\n        if (followRuns && ev.workflowExecutionFailedEventAttributes.newExecutionRunId) {\n          execution.runId = ev.workflowExecutionFailedEventAttributes.newExecutionRunId;\n          req.nextPageToken = undefined;\n          continue;\n        }\n        const { failure, retryState } = ev.workflowExecutionFailedEventAttributes;\n        throw new WorkflowFailedError(\n          'Workflow execution failed',\n          await decodeOptionalFailureToOptionalError(dataConverter, failure, context),\n          decodeRetryState(retryState)\n        );\n      } else if (ev.workflowExecutionCanceledEventAttributes) {\n        const failure = new CancelledFailure(\n          'Workflow canceled',\n          await decodeArrayFromPayloads(\n            dataConverter,\n            ev.workflowExecutionCanceledEventAttributes.details?.payloads,\n            context\n          )\n        );\n        failure.stack = '';\n        throw new WorkflowFailedError('Workflow execution cancelled', failure, RetryState.NON_RETRYABLE_FAILURE);\n      } else if (ev.workflowExecutionTerminatedEventAttributes) {\n        const failure = new TerminatedFailure(\n          ev.workflowExecutionTerminatedEventAttributes.reason || 'Workflow execution terminated'\n        );\n        failure.stack = '';\n        throw new WorkflowFailedError(\n          ev.workflowExecutionTerminatedEventAttributes.reason || 'Workflow execution terminated',\n          failure,\n          RetryState.NON_RETRYABLE_FAILURE\n        );\n      } else if (ev.workflowExecutionTimedOutEventAttributes) {\n        if (followRuns && ev.workflowExecutionTimedOutEventAttributes.newExecutionRunId) {\n          execution.runId = ev.workflowExecutionTimedOutEventAttributes.newExecutionRunId;\n          req.nextPageToken = undefined;\n          continue;\n        }\n        const failure = new TimeoutFailure('Workflow execution timed out', undefined, TimeoutType.START_TO_CLOSE);\n        failure.stack = '';\n        throw new WorkflowFailedError(\n          'Workflow execution timed out',\n          failure,\n          decodeRetryState(ev.workflowExecutionTimedOutEventAttributes.retryState)\n        );\n      } else if (ev.workflowExecutionContinuedAsNewEventAttributes) {\n        const { newExecutionRunId } = ev.workflowExecutionContinuedAsNewEventAttributes;\n        if (!newExecutionRunId) {\n          throw new TypeError('Expected service to return newExecutionRunId for WorkflowExecutionContinuedAsNewEvent');\n        }\n        if (!followRuns) {\n          throw new WorkflowContinuedAsNewError('Workflow execution continued as new', newExecutionRunId);\n        }\n        execution.runId = newExecutionRunId;\n        req.nextPageToken = undefined;\n        continue;\n      }\n    }\n  }\n\n  protected rethrowUpdateGrpcError(\n    err: unknown,\n    fallbackMessage: string,\n    workflowExecution?: WorkflowExecution\n  ): never {\n    if (isGrpcServiceError(err)) {\n      if (err.code === grpcStatus.DEADLINE_EXCEEDED || err.code === grpcStatus.CANCELLED) {\n        throw new WorkflowUpdateRPCTimeoutOrCancelledError(err.details ?? 'Workflow update call timeout or cancelled', {\n          cause: err,\n        });\n      }\n    }\n\n    if (err instanceof CancelledFailure) {\n      throw new WorkflowUpdateRPCTimeoutOrCancelledError(err.message ?? 'Workflow update call timeout or cancelled', {\n        cause: err,\n      });\n    }\n\n    this.rethrowGrpcError(err, fallbackMessage, workflowExecution);\n  }\n\n  protected rethrowGrpcError(err: unknown, fallbackMessage: string, workflowExecution?: WorkflowExecution): never {\n    if (isGrpcServiceError(err)) {\n      rethrowKnownErrorTypes(err);\n\n      if (err.code === grpcStatus.NOT_FOUND) {\n        throw new WorkflowNotFoundError(\n          err.details ?? 'Workflow not found',\n          workflowExecution?.workflowId ?? '',\n          workflowExecution?.runId\n        );\n      }\n\n      throw new ServiceError(fallbackMessage, { cause: err });\n    }\n    throw new ServiceError('Unexpected error while making gRPC request', { cause: err as Error });\n  }\n\n  /**\n   * Use given input to make a queryWorkflow call to the service\n   *\n   * Used as the final function of the query interceptor chain\n   */\n  protected async _queryWorkflowHandler(input: WorkflowQueryInput): Promise<unknown> {\n    const dataConverter = this.dataConverter;\n    const context = this.workflowSerializationContext(input.workflowExecution.workflowId!);\n    const req: temporal.api.workflowservice.v1.IQueryWorkflowRequest = {\n      queryRejectCondition: input.queryRejectCondition,\n      namespace: this.options.namespace,\n      execution: input.workflowExecution,\n      query: {\n        queryType: input.queryType,\n        queryArgs: {\n          payloads: await encodeToPayloadsWithContext(dataConverter, context, input.args, input.typeInfo?.inputTypes),\n        },\n        header: { fields: input.headers },\n      },\n    };\n    const externalStorage = this.dataConverter.externalStorage;\n    if (externalStorage) {\n      await visit(\n        req,\n        walkQueryWorkflowRequest,\n        extstoreStoreOptions(externalStorage, {\n          initialTarget: {\n            kind: 'workflow',\n            namespace: this.options.namespace,\n            id: input.workflowExecution.workflowId ?? undefined,\n          },\n        })\n      );\n    }\n    let response: temporal.api.workflowservice.v1.QueryWorkflowResponse;\n    try {\n      response = await this.workflowService.queryWorkflow(req);\n    } catch (err) {\n      if (isGrpcServiceError(err)) {\n        rethrowKnownErrorTypes(err);\n        if (err.code === grpcStatus.INVALID_ARGUMENT) {\n          throw new QueryNotRegisteredError(err.message.replace(/^3 INVALID_ARGUMENT: /, ''), err.code);\n        }\n      }\n      this.rethrowGrpcError(err, 'Failed to query Workflow', input.workflowExecution);\n    }\n    await visit(response, walkQueryWorkflowResponse, extstoreInboundOptions(externalStorage));\n    if (response.queryRejected) {\n      if (response.queryRejected.status === undefined || response.queryRejected.status === null) {\n        throw new TypeError('Received queryRejected from server with no status');\n      }\n      throw new QueryRejectedError(response.queryRejected.status);\n    }\n    if (!response.queryResult) {\n      throw new TypeError('Invalid response from server');\n    }\n    // We ignore anything but the first result\n    return await decodeFromPayloadsAtIndex(\n      dataConverter,\n      0,\n      response.queryResult?.payloads,\n      context,\n      input.typeInfo?.outputType\n    );\n  }\n\n  protected async _createUpdateWorkflowRequest(\n    lifecycleStage: temporal.api.enums.v1.UpdateWorkflowExecutionLifecycleStage,\n    input: WorkflowStartUpdateInput\n  ): Promise<temporal.api.workflowservice.v1.IUpdateWorkflowExecutionRequest> {\n    const dataConverter = this.dataConverter;\n    const context = this.workflowSerializationContext(input.workflowExecution.workflowId!);\n    const updateId = input.options?.updateId ?? randomUUID();\n    const internalOptions = (input.options as InternalWorkflowUpdateOptions)[InternalWorkflowUpdateOptionsSymbol];\n    return {\n      namespace: this.options.namespace,\n      workflowExecution: input.workflowExecution,\n      firstExecutionRunId: input.firstExecutionRunId,\n      waitPolicy: {\n        lifecycleStage,\n      },\n      request: {\n        meta: {\n          updateId,\n          identity: this.options.identity,\n        },\n        input: {\n          header: { fields: input.headers },\n          name: input.updateName,\n          args: {\n            payloads: await encodeToPayloadsWithContext(dataConverter, context, input.args, input.typeInfo?.inputTypes),\n          },\n        },\n        requestId: internalOptions?.requestId,\n        completionCallbacks: internalOptions?.completionCallbacks,\n        links: internalOptions?.links,\n      },\n    };\n  }\n\n  /**\n   * Start the Update.\n   *\n   * Used as the final function of the interceptor chain during startUpdate and executeUpdate.\n   */\n  protected async _startUpdateHandler(\n    waitForStage: WorkflowUpdateStage,\n    input: WorkflowStartUpdateInput\n  ): Promise<WorkflowStartUpdateOutput> {\n    let waitForStageProto: temporal.api.enums.v1.UpdateWorkflowExecutionLifecycleStage =\n      encodeWorkflowUpdateStage(waitForStage) ??\n      UpdateWorkflowExecutionLifecycleStage.UPDATE_WORKFLOW_EXECUTION_LIFECYCLE_STAGE_ACCEPTED;\n\n    waitForStageProto =\n      waitForStageProto >= UpdateWorkflowExecutionLifecycleStage.UPDATE_WORKFLOW_EXECUTION_LIFECYCLE_STAGE_ACCEPTED\n        ? waitForStageProto\n        : UpdateWorkflowExecutionLifecycleStage.UPDATE_WORKFLOW_EXECUTION_LIFECYCLE_STAGE_ACCEPTED;\n\n    const request = await this._createUpdateWorkflowRequest(waitForStageProto, input);\n    const externalStorage = this.dataConverter.externalStorage;\n    if (externalStorage) {\n      await visit(\n        request,\n        walkUpdateWorkflowExecutionRequest,\n        extstoreStoreOptions(externalStorage, {\n          initialTarget: {\n            kind: 'workflow',\n            namespace: this.options.namespace,\n            id: input.workflowExecution.workflowId ?? undefined,\n          },\n        })\n      );\n    }\n\n    // Repeatedly send UpdateWorkflowExecution until update is durable (if the server receives a request with\n    // an update ID that already exists, it responds with information for the existing update). If the\n    // requested wait stage is COMPLETED, further polling is done before returning the UpdateHandle.\n    let response: temporal.api.workflowservice.v1.UpdateWorkflowExecutionResponse;\n    try {\n      do {\n        response = await this.workflowService.updateWorkflowExecution(request);\n      } while (\n        response.stage < UpdateWorkflowExecutionLifecycleStage.UPDATE_WORKFLOW_EXECUTION_LIFECYCLE_STAGE_ACCEPTED\n      );\n    } catch (err) {\n      this.rethrowUpdateGrpcError(err, 'Workflow Update failed', input.workflowExecution);\n    }\n    await visit(response, walkUpdateWorkflowExecutionResponse, extstoreInboundOptions(externalStorage));\n    const internalOptions = (input.options as InternalWorkflowUpdateOptions)[InternalWorkflowUpdateOptionsSymbol];\n    if (internalOptions != null) {\n      // Capture the link the server attached to the Update response so the Nexus helper can add it\n      // as a handler link. Older servers leave it unset.\n      internalOptions.responseLink = response.link ?? undefined;\n      // Capture the terminal outcome (if any) so the Nexus helper can distinguish an already-completed\n      // Update (return a synchronous result) from one that is merely accepted (return async).\n      internalOptions.outcome = response.outcome ?? undefined;\n    }\n    return {\n      updateId: request.request!.meta!.updateId!,\n\n      workflowRunId: response.updateRef!.workflowExecution!.runId!,\n      outcome: response.outcome ?? undefined,\n      outputTypeInfo: input.typeInfo?.outputType,\n    };\n  }\n\n  /**\n   * Send the Update-With-Start MultiOperation request.\n   *\n   * Used as the final function of the interceptor chain during\n   * startUpdateWithStart and executeUpdateWithStart.\n   */\n  protected async _updateWithStartHandler(\n    waitForStage: WorkflowUpdateStage,\n    onStart: (startResponse: temporal.api.workflowservice.v1.IStartWorkflowExecutionResponse) => void,\n    onStartError: (err: any) => void,\n    input: WorkflowStartUpdateWithStartInput\n  ): Promise<WorkflowStartUpdateWithStartOutput> {\n    const startInput: WorkflowStartInput = {\n      workflowType: input.workflowType,\n      options: input.workflowStartOptions,\n      headers: input.workflowStartHeaders,\n    };\n    const updateInput: WorkflowStartUpdateInput = {\n      updateName: input.updateName,\n      args: input.updateArgs,\n      typeInfo: input.updateTypeInfo,\n      workflowExecution: {\n        workflowId: input.workflowStartOptions.workflowId,\n      },\n      options: input.updateOptions,\n      headers: input.updateHeaders,\n    };\n    let seenStart = false;\n    try {\n      const startRequest = await this.createStartWorkflowRequest(startInput);\n      const waitForStageProto = encodeWorkflowUpdateStage(waitForStage)!;\n      const updateRequest = await this._createUpdateWorkflowRequest(waitForStageProto, updateInput);\n      const multiOpReq: temporal.api.workflowservice.v1.IExecuteMultiOperationRequest = {\n        namespace: this.options.namespace,\n        operations: [\n          {\n            startWorkflow: startRequest,\n          },\n          {\n            updateWorkflow: updateRequest,\n          },\n        ],\n      };\n\n      let multiOpResp: temporal.api.workflowservice.v1.IExecuteMultiOperationResponse;\n      let startResp: temporal.api.workflowservice.v1.IStartWorkflowExecutionResponse;\n      let updateResp: temporal.api.workflowservice.v1.IUpdateWorkflowExecutionResponse;\n      let reachedStage: temporal.api.enums.v1.UpdateWorkflowExecutionLifecycleStage;\n      // Repeatedly send ExecuteMultiOperation until update is durable (if the server receives a request with\n      // an update ID that already exists, it responds with information for the existing update). If the\n      // requested wait stage is COMPLETED, further polling is done before returning the UpdateHandle.\n      const externalStorage = this.dataConverter.externalStorage;\n      if (externalStorage) {\n        await visit(\n          multiOpReq,\n          walkExecuteMultiOperationRequest,\n          extstoreStoreOptions(externalStorage, {\n            initialTarget: {\n              kind: 'workflow',\n              namespace: this.options.namespace,\n              id: input.workflowStartOptions.workflowId,\n              type: input.workflowType,\n            },\n          })\n        );\n      }\n      do {\n        multiOpResp = await this.workflowService.executeMultiOperation(multiOpReq);\n        await visit(multiOpResp, walkExecuteMultiOperationResponse, extstoreInboundOptions(externalStorage));\n        startResp = multiOpResp.responses?.[0]\n          ?.startWorkflow as temporal.api.workflowservice.v1.IStartWorkflowExecutionResponse;\n        if (!seenStart) {\n          onStart(startResp);\n          seenStart = true;\n        }\n        updateResp = multiOpResp.responses?.[1]\n          ?.updateWorkflow as temporal.api.workflowservice.v1.IUpdateWorkflowExecutionResponse;\n        reachedStage =\n          updateResp.stage ??\n          UpdateWorkflowExecutionLifecycleStage.UPDATE_WORKFLOW_EXECUTION_LIFECYCLE_STAGE_UNSPECIFIED;\n      } while (reachedStage < UpdateWorkflowExecutionLifecycleStage.UPDATE_WORKFLOW_EXECUTION_LIFECYCLE_STAGE_ACCEPTED);\n      return {\n        workflowExecution: {\n          workflowId: updateResp.updateRef!.workflowExecution!.workflowId!,\n          runId: updateResp.updateRef!.workflowExecution!.runId!,\n        },\n        updateId: updateRequest.request!.meta!.updateId!,\n        updateOutcome: updateResp.outcome ?? undefined,\n        updateOutputTypeInfo: input.updateTypeInfo?.outputType,\n      };\n    } catch (thrownError) {\n      let err = thrownError;\n      if (isGrpcServiceError(err) && err.code === grpcStatus.ALREADY_EXISTS) {\n        err = new WorkflowExecutionAlreadyStartedError(\n          'Workflow execution already started',\n          input.workflowStartOptions.workflowId,\n          input.workflowType\n        );\n      }\n      if (!seenStart) {\n        onStartError(err);\n      }\n      if (isGrpcServiceError(err)) {\n        this.rethrowUpdateGrpcError(err, 'Update-With-Start failed', updateInput.workflowExecution);\n      }\n      throw err;\n    }\n  }\n\n  protected createWorkflowUpdateHandle<Ret>(\n    updateId: string,\n    workflowId: string,\n    workflowRunId?: string,\n    outcome?: temporal.api.update.v1.IOutcome,\n    outputTypeInfo?: TypeInfo\n  ): WorkflowUpdateHandle<Ret> {\n    const dataConverter = this.dataConverter;\n    const context = this.workflowSerializationContext(workflowId);\n    return {\n      updateId,\n      workflowId,\n      workflowRunId,\n      result: async () => {\n        const completedOutcome =\n          outcome ?? (await this._pollForUpdateOutcome(updateId, { workflowId, runId: workflowRunId }));\n        if (completedOutcome.failure) {\n          throw new WorkflowUpdateFailedError(\n            'Workflow Update failed',\n            await decodeOptionalFailureToOptionalError(dataConverter, completedOutcome.failure, context)\n          );\n        } else {\n          // PayloadTypeInfo stores output metadata without its application type, so TypeScript cannot know that this\n          // TypeInfo produces the Ret promised by the handle. Assert that relationship once, immediately before decoding.\n          return await decodeFromPayloadsAtIndex<Ret, unknown>(\n            dataConverter,\n            0,\n            completedOutcome.success?.payloads,\n            context,\n            outputTypeInfo as TypeInfo<Ret, unknown> | undefined\n          );\n        }\n      },\n    };\n  }\n\n  /**\n   * Poll Update until a response with an outcome is received; return that outcome.\n   * This is used directly; no interceptor is available.\n   */\n  protected async _pollForUpdateOutcome(\n    updateId: string,\n    workflowExecution: temporal.api.common.v1.IWorkflowExecution\n  ): Promise<temporal.api.update.v1.IOutcome> {\n    const req: temporal.api.workflowservice.v1.IPollWorkflowExecutionUpdateRequest = {\n      namespace: this.options.namespace,\n      updateRef: { workflowExecution, updateId },\n      identity: this.options.identity,\n      waitPolicy: {\n        lifecycleStage: encodeWorkflowUpdateStage(WorkflowUpdateStage.COMPLETED),\n      },\n    };\n    for (;;) {\n      try {\n        const response = await this.workflowService.pollWorkflowExecutionUpdate(req);\n        const externalStorage = this.dataConverter.externalStorage;\n        await visit(response, walkPollWorkflowExecutionUpdateResponse, extstoreInboundOptions(externalStorage));\n        if (response.outcome) {\n          return response.outcome;\n        }\n      } catch (err) {\n        const wE = typeof workflowExecution.workflowId === 'string' ? workflowExecution : undefined;\n        this.rethrowUpdateGrpcError(err, 'Workflow Update Poll failed', wE as WorkflowExecution);\n      }\n    }\n  }\n\n  /**\n   * Use given input to make a signalWorkflowExecution call to the service\n   *\n   * Used as the final function of the signal interceptor chain\n   */\n  protected async _signalWorkflowHandler(input: WorkflowSignalInput): Promise<void> {\n    const dataConverter = this.dataConverter;\n    const context = this.workflowSerializationContext(input.workflowExecution.workflowId!);\n    const internalOptions = (input as InternalWorkflowSignalInput)[InternalWorkflowSignalOptionsSymbol];\n    const req: temporal.api.workflowservice.v1.ISignalWorkflowExecutionRequest = {\n      identity: this.options.identity,\n      namespace: this.options.namespace,\n      workflowExecution: input.workflowExecution,\n      requestId: randomUUID(),\n      // control is unused,\n      signalName: input.signalName,\n      header: { fields: input.headers },\n      input: {\n        payloads: await encodeToPayloadsWithContext(dataConverter, context, input.args, input.typeInfo?.inputTypes),\n      },\n      links: internalOptions?.links,\n    };\n    try {\n      const externalStorage = this.dataConverter.externalStorage;\n      if (externalStorage) {\n        await visit(\n          req,\n          walkSignalWorkflowExecutionRequest,\n          extstoreStoreOptions(externalStorage, {\n            initialTarget: {\n              kind: 'workflow',\n              namespace: this.options.namespace,\n              id: input.workflowExecution.workflowId,\n            },\n          })\n        );\n      }\n      const response = await this.workflowService.signalWorkflowExecution(req);\n      if (internalOptions != null) {\n        // Servers that support CHASM signal response links (1.31 and up) return a response link\n        // pointing at the WorkflowExecutionSignaled event; older servers leave it unset.\n        internalOptions.responseLink = response.link ?? undefined;\n      }\n    } catch (err) {\n      this.rethrowGrpcError(err, 'Failed to signal Workflow', input.workflowExecution);\n    }\n  }\n\n  /**\n   * Use given input to make a signalWithStartWorkflowExecution call to the service\n   *\n   * Used as the final function of the signalWithStart interceptor chain\n   */\n  protected async _signalWithStartWorkflowHandler(input: WorkflowSignalWithStartInput): Promise<string> {\n    const { identity } = this.options;\n    const { options, workflowType, signalName, signalArgs, signalTypeInfo, headers } = input;\n    const dataConverter = this.dataConverter;\n    const context = this.workflowSerializationContext(options.workflowId);\n    const internalOptions = (options as InternalWorkflowStartOptions)[InternalWorkflowStartOptionsSymbol];\n    const req: temporal.api.workflowservice.v1.ISignalWithStartWorkflowExecutionRequest = {\n      namespace: this.options.namespace,\n      identity,\n      requestId: randomUUID(),\n      workflowId: options.workflowId,\n      workflowIdReusePolicy: encodeWorkflowIdReusePolicy(options.workflowIdReusePolicy),\n      workflowIdConflictPolicy: encodeWorkflowIdConflictPolicy(options.workflowIdConflictPolicy),\n      workflowType: { name: workflowType },\n      input: {\n        payloads: await encodeToPayloadsWithContext(dataConverter, context, options.args, options.typeInfo?.inputTypes),\n      },\n      signalName,\n      signalInput: {\n        payloads: await encodeToPayloadsWithContext(dataConverter, context, signalArgs, signalTypeInfo?.inputTypes),\n      },\n      taskQueue: {\n        kind: temporal.api.enums.v1.TaskQueueKind.TASK_QUEUE_KIND_NORMAL,\n        name: options.taskQueue,\n      },\n      workflowExecutionTimeout: options.workflowExecutionTimeout,\n      workflowRunTimeout: options.workflowRunTimeout,\n      workflowTaskTimeout: options.workflowTaskTimeout,\n      workflowStartDelay: options.startDelay,\n      retryPolicy: options.retry ? compileRetryPolicy(options.retry) : undefined,\n      memo: options.memo ? { fields: await encodeMapToPayloads(dataConverter, options.memo, context) } : undefined,\n      searchAttributes:\n        options.searchAttributes || options.typedSearchAttributes\n          ? {\n              indexedFields: encodeUnifiedSearchAttributes(options.searchAttributes, options.typedSearchAttributes),\n            }\n          : undefined,\n      cronSchedule: options.cronSchedule,\n      header: { fields: headers },\n      userMetadata: await encodeUserMetadata(dataConverter, options.staticSummary, options.staticDetails, context),\n      priority: options.priority ? compilePriority(options.priority) : undefined,\n      versioningOverride: options.versioningOverride ?? undefined,\n      links: internalOptions?.links,\n    };\n    try {\n      const externalStorage = this.dataConverter.externalStorage;\n      if (externalStorage) {\n        await visit(\n          req,\n          walkSignalWithStartWorkflowExecutionRequest,\n          extstoreStoreOptions(externalStorage, {\n            initialTarget: {\n              kind: 'workflow',\n              namespace: this.options.namespace,\n              id: req.workflowId ?? undefined,\n              type: workflowType,\n            },\n          })\n        );\n      }\n      const response = await this.workflowService.signalWithStartWorkflowExecution(req);\n      if (internalOptions != null) {\n        // Servers that support CHASM signal response links (1.31 and up) return a response link\n        // pointing at the WorkflowExecutionSignaled event; older servers leave it unset.\n        internalOptions.responseLink = response.signalLink ?? undefined;\n      }\n      return response.runId;\n    } catch (err: any) {\n      if (err.code === grpcStatus.ALREADY_EXISTS) {\n        throw new WorkflowExecutionAlreadyStartedError(\n          'Workflow execution already started',\n          options.workflowId,\n          workflowType\n        );\n      }\n      this.rethrowGrpcError(err, 'Failed to signalWithStart Workflow', { workflowId: options.workflowId });\n    }\n  }\n\n  /**\n   * Use given input to make startWorkflowExecution call to the service\n   *\n   * Used as the final function of the start interceptor chain\n   */\n  protected async _startWorkflowHandler(input: WorkflowStartInput): Promise<WorkflowStartOutput> {\n    const req = await this.createStartWorkflowRequest(input);\n    const { options: opts, workflowType } = input;\n    const internalOptions = (opts as InternalWorkflowStartOptions)[InternalWorkflowStartOptionsSymbol];\n    try {\n      const externalStorage = this.dataConverter.externalStorage;\n      if (externalStorage) {\n        await visit(\n          req,\n          walkStartWorkflowExecutionRequest,\n          extstoreStoreOptions(externalStorage, {\n            initialTarget: {\n              kind: 'workflow',\n              namespace: req.namespace ?? this.options.namespace,\n              id: req.workflowId ?? undefined,\n              type: workflowType,\n            },\n          })\n        );\n      }\n      const response = await this.workflowService.startWorkflowExecution(req);\n      if (internalOptions != null) {\n        internalOptions.responseLink = response.link ?? undefined;\n      }\n      return {\n        runId: response.runId,\n        eagerlyStarted: response.eagerWorkflowTask != null,\n      };\n    } catch (err: any) {\n      if (err.code === grpcStatus.ALREADY_EXISTS) {\n        throw new WorkflowExecutionAlreadyStartedError(\n          'Workflow execution already started',\n          opts.workflowId,\n          workflowType\n        );\n      }\n      this.rethrowGrpcError(err, 'Failed to start Workflow', { workflowId: opts.workflowId });\n    }\n  }\n\n  protected async createStartWorkflowRequest(input: WorkflowStartInput): Promise<StartWorkflowExecutionRequest> {\n    const { options: opts, workflowType, headers } = input;\n    const { identity, namespace } = this.options;\n    const dataConverter = this.dataConverter;\n    const context = this.workflowSerializationContext(opts.workflowId);\n    const internalOptions = (opts as InternalWorkflowStartOptions)[InternalWorkflowStartOptionsSymbol];\n    const supportsEagerStart = (this.connection as InternalConnectionLike)?.[InternalConnectionLikeSymbol]\n      ?.supportsEagerStart;\n\n    if (opts.requestEagerStart && !supportsEagerStart) {\n      throw new Error(\n        'Eager workflow start requires a NativeConnection shared between client and worker. ' +\n          'Pass a NativeConnection via ClientOptions.connection, or disable requestEagerStart.'\n      );\n    }\n\n    return {\n      namespace,\n      identity,\n      requestId: internalOptions?.requestId ?? randomUUID(),\n      workflowId: opts.workflowId,\n      workflowIdReusePolicy: encodeWorkflowIdReusePolicy(opts.workflowIdReusePolicy),\n      workflowIdConflictPolicy: encodeWorkflowIdConflictPolicy(opts.workflowIdConflictPolicy),\n      workflowType: { name: workflowType },\n      input: {\n        payloads: await encodeToPayloadsWithContext(dataConverter, context, opts.args, opts.typeInfo?.inputTypes),\n      },\n      taskQueue: {\n        kind: temporal.api.enums.v1.TaskQueueKind.TASK_QUEUE_KIND_NORMAL,\n        name: opts.taskQueue,\n      },\n      workflowExecutionTimeout: opts.workflowExecutionTimeout,\n      workflowRunTimeout: opts.workflowRunTimeout,\n      workflowTaskTimeout: opts.workflowTaskTimeout,\n      workflowStartDelay: opts.startDelay,\n      retryPolicy: opts.retry ? compileRetryPolicy(opts.retry) : undefined,\n      memo: opts.memo ? { fields: await encodeMapToPayloads(dataConverter, opts.memo, context) } : undefined,\n      searchAttributes:\n        opts.searchAttributes || opts.typedSearchAttributes\n          ? {\n              indexedFields: encodeUnifiedSearchAttributes(opts.searchAttributes, opts.typedSearchAttributes),\n            }\n          : undefined,\n      cronSchedule: opts.cronSchedule,\n      header: { fields: headers },\n      userMetadata: await encodeUserMetadata(dataConverter, opts.staticSummary, opts.staticDetails, context),\n      priority: opts.priority ? compilePriority(opts.priority) : undefined,\n      versioningOverride: opts.versioningOverride ?? undefined,\n      requestEagerExecution: opts.requestEagerStart,\n      ...filterNullAndUndefined(internalOptions ?? {}),\n    };\n  }\n\n  /**\n   * Use given input to make terminateWorkflowExecution call to the service\n   *\n   * Used as the final function of the terminate interceptor chain\n   */\n  protected async _terminateWorkflowHandler(\n    input: WorkflowTerminateInput\n  ): Promise<TerminateWorkflowExecutionResponse> {\n    const dataConverter = this.dataConverter;\n    const context = this.workflowSerializationContext(input.workflowExecution.workflowId!);\n    const req: temporal.api.workflowservice.v1.ITerminateWorkflowExecutionRequest = {\n      namespace: this.options.namespace,\n      identity: this.options.identity,\n      ...input,\n      details: {\n        payloads: input.details ? await encodeToPayloadsWithContext(dataConverter, context, input.details) : undefined,\n      },\n      firstExecutionRunId: input.firstExecutionRunId,\n    };\n    try {\n      const externalStorage = this.dataConverter.externalStorage;\n      if (externalStorage) {\n        await visit(\n          req,\n          walkTerminateWorkflowExecutionRequest,\n          extstoreStoreOptions(externalStorage, {\n            initialTarget: {\n              kind: 'workflow',\n              namespace: this.options.namespace,\n              id: input.workflowExecution.workflowId ?? undefined,\n            },\n          })\n        );\n      }\n      return await this.workflowService.terminateWorkflowExecution(req);\n    } catch (err) {\n      this.rethrowGrpcError(err, 'Failed to terminate Workflow', input.workflowExecution);\n    }\n  }\n\n  /**\n   * Uses given input to make requestCancelWorkflowExecution call to the service\n   *\n   * Used as the final function of the cancel interceptor chain\n   */\n  protected async _cancelWorkflowHandler(input: WorkflowCancelInput): Promise<RequestCancelWorkflowExecutionResponse> {\n    try {\n      return await this.workflowService.requestCancelWorkflowExecution({\n        namespace: this.options.namespace,\n        identity: this.options.identity,\n        requestId: randomUUID(),\n        workflowExecution: input.workflowExecution,\n        firstExecutionRunId: input.firstExecutionRunId,\n      });\n    } catch (err) {\n      this.rethrowGrpcError(err, 'Failed to cancel workflow', input.workflowExecution);\n    }\n  }\n\n  /**\n   * Uses given input to make describeWorkflowExecution call to the service\n   *\n   * Used as the final function of the describe interceptor chain\n   */\n  protected async _describeWorkflowHandler(input: WorkflowDescribeInput): Promise<DescribeWorkflowExecutionResponse> {\n    try {\n      const response = await this.workflowService.describeWorkflowExecution({\n        namespace: this.options.namespace,\n        execution: input.workflowExecution,\n      });\n      const externalStorage = this.dataConverter.externalStorage;\n      await visit(response, walkDescribeWorkflowExecutionResponse, extstoreInboundOptions(externalStorage));\n      return response;\n    } catch (err) {\n      this.rethrowGrpcError(err, 'Failed to describe workflow', input.workflowExecution);\n    }\n  }\n\n  /**\n   * Create a new workflow handle for new or existing Workflow execution\n   */\n  protected _createWorkflowHandle<T extends Workflow>({\n    workflowId,\n    runId,\n    firstExecutionRunId,\n    interceptors,\n    runIdForResult,\n    ...resultOptions\n  }: WorkflowHandleOptions): WorkflowHandle<T> {\n    const _startUpdate = async <Ret, Args extends unknown[]>(\n      def: UpdateDefinition<Ret, Args> | string,\n      waitForStage: WorkflowUpdateStage,\n      options?: WorkflowUpdateOptions & { args?: Args }\n    ): Promise<WorkflowUpdateHandle<Ret>> => {\n      const next = this._startUpdateHandler.bind(this, waitForStage);\n      const fn = composeInterceptors(interceptors, 'startUpdate', next);\n      const { args, typeInfo: callSiteTypeInfo, ...opts } = options ?? {};\n      let updateName: string;\n      let updateTypeInfo: PayloadTypeInfo | undefined;\n      if (typeof def === 'string') {\n        updateName = def;\n        updateTypeInfo = callSiteTypeInfo;\n      } else {\n        if (callSiteTypeInfo !== undefined) {\n          throw new TypeError(\n            'Cannot provide call-site Update TypeInfo with an Update definition. ' +\n              'Define TypeInfo when creating the Update definition instead.'\n          );\n        }\n        updateName = def.name;\n        updateTypeInfo = def.typeInfo;\n      }\n      const input = {\n        workflowExecution: { workflowId, runId },\n        firstExecutionRunId,\n        updateName,\n        args: args ?? [],\n        typeInfo: updateTypeInfo,\n        waitForStage,\n        headers: {},\n        options: opts,\n      };\n      const output = await fn(input);\n      const handle: WorkflowUpdateHandle<Ret> = this.createWorkflowUpdateHandle(\n        output.updateId,\n        input.workflowExecution.workflowId,\n        output.workflowRunId,\n        output.outcome,\n        output.outputTypeInfo\n      );\n      if (!output.outcome && waitForStage === WorkflowUpdateStage.COMPLETED) {\n        await this._pollForUpdateOutcome(handle.updateId, input.workflowExecution);\n      }\n      return handle;\n    };\n\n    const _signal = async (\n      sourceHandle: InternalWorkflowHandle,\n      signalName: string,\n      args: unknown[],\n      typeInfo?: SignalTypeInfo\n    ): Promise<void> => {\n      const next = this._signalWorkflowHandler.bind(this);\n      const fn = composeInterceptors(interceptors, 'signal', next);\n      const input: InternalWorkflowSignalInput = {\n        workflowExecution: { workflowId, runId },\n        signalName,\n        args,\n        typeInfo,\n        headers: {},\n        // Forward any SDK-internal signal options (e.g. Nexus request links) that were attached to\n        // this handle, and let the signal handler write the response link back onto the same payload.\n        [InternalWorkflowSignalOptionsSymbol]: sourceHandle[InternalWorkflowSignalOptionsSymbol],\n      };\n      await fn(input);\n    };\n\n    const _query = async <Ret>(queryType: string, args: unknown[], typeInfo?: PayloadTypeInfo): Promise<Ret> => {\n      const next = this._queryWorkflowHandler.bind(this);\n      const fn = composeInterceptors(interceptors, 'query', next);\n      return (await fn({\n        workflowExecution: { workflowId, runId },\n        queryRejectCondition: encodeQueryRejectCondition(this.options.queryRejectCondition),\n        queryType,\n        args,\n        typeInfo,\n        headers: {},\n      })) as Ret;\n    };\n\n    return {\n      client: this,\n      workflowId,\n      async result(): Promise<WorkflowResultType<T>> {\n        return this.client.result(workflowId, runIdForResult, resultOptions);\n      },\n      async terminate(reason?: string) {\n        const next = this.client._terminateWorkflowHandler.bind(this.client);\n        const fn = composeInterceptors(interceptors, 'terminate', next);\n        return await fn({\n          workflowExecution: { workflowId, runId },\n          reason,\n          firstExecutionRunId,\n        });\n      },\n      async cancel() {\n        const next = this.client._cancelWorkflowHandler.bind(this.client);\n        const fn = composeInterceptors(interceptors, 'cancel', next);\n        return await fn({\n          workflowExecution: { workflowId, runId },\n          firstExecutionRunId,\n        });\n      },\n      async describe() {\n        const next = this.client._describeWorkflowHandler.bind(this.client);\n        const fn = composeInterceptors(interceptors, 'describe', next);\n        const raw = await fn({\n          workflowExecution: { workflowId, runId },\n        });\n        const info = await executionInfoFromRaw(\n          raw.workflowExecutionInfo ?? {},\n          this.client.dataConverter,\n          raw,\n          this.client.options.namespace\n        );\n        const userMetadata = raw.executionConfig?.userMetadata;\n        const context = this.client.workflowSerializationContext(workflowId);\n        return {\n          ...info,\n          staticDetails: async () =>\n            (await decodeOptionalSinglePayload(this.client.dataConverter, userMetadata?.details, context)) ?? undefined,\n          staticSummary: async () =>\n            (await decodeOptionalSinglePayload(this.client.dataConverter, userMetadata?.summary, context)) ?? undefined,\n          raw,\n        };\n      },\n      async fetchHistory() {\n        let nextPageToken: Uint8Array | undefined = undefined;\n        const events = Array<temporal.api.history.v1.IHistoryEvent>();\n        for (;;) {\n          const response: temporal.api.workflowservice.v1.GetWorkflowExecutionHistoryResponse =\n            await this.client.workflowService.getWorkflowExecutionHistory({\n              nextPageToken,\n              namespace: this.client.options.namespace,\n              execution: { workflowId, runId },\n            });\n          events.push(...(response.history?.events ?? []));\n          nextPageToken = response.nextPageToken;\n          if (nextPageToken == null || nextPageToken.length === 0) break;\n        }\n        return temporal.api.history.v1.History.create({ events });\n      },\n      async startUpdate<Ret, Args extends any[]>(\n        def: UpdateDefinition<Ret, Args> | string,\n        options: WorkflowUpdateOptions & {\n          args?: Args;\n          waitForStage: typeof WorkflowUpdateStage.ACCEPTED;\n        }\n      ): Promise<WorkflowUpdateHandle<Ret>> {\n        return await _startUpdate(def, options.waitForStage, options);\n      },\n      async executeUpdate<Ret, Args extends any[]>(\n        def: UpdateDefinition<Ret, Args> | string,\n        options?: WorkflowUpdateOptions & { args?: Args }\n      ): Promise<Ret> {\n        const handle = await _startUpdate(def, WorkflowUpdateStage.COMPLETED, options);\n        return await handle.result();\n      },\n      getUpdateHandle<Ret>(updateId: string, options?: GetWorkflowUpdateHandleOptions): WorkflowUpdateHandle<Ret> {\n        return this.client.createWorkflowUpdateHandle(\n          updateId,\n          workflowId,\n          options?.workflowRunId ?? runId,\n          undefined,\n          options?.typeInfo?.outputType\n        );\n      },\n      async signal<Args extends any[]>(def: SignalDefinition<Args> | string, ...args: Args): Promise<void> {\n        if (typeof def === 'string') {\n          await _signal(this as InternalWorkflowHandle, def, args);\n        } else {\n          await _signal(this as InternalWorkflowHandle, def.name, args, def.typeInfo);\n        }\n      },\n      async signalWithOptions<Args extends any[]>(\n        signalName: string,\n        options: WorkflowSignalOptions<Args>\n      ): Promise<void> {\n        await _signal(this as InternalWorkflowHandle, signalName, options.args ?? [], options.typeInfo);\n      },\n      async query<Ret, Args extends any[]>(def: QueryDefinition<Ret, Args> | string, ...args: Args): Promise<Ret> {\n        if (typeof def === 'string') {\n          return await _query(def, args);\n        } else {\n          return await _query(def.name, args, def.typeInfo);\n        }\n      },\n      async queryWithOptions<Ret, Args extends any[]>(\n        queryName: string,\n        options: WorkflowQueryOptions<Args>\n      ): Promise<Ret> {\n        return await _query(queryName, options.args ?? [], options.typeInfo);\n      },\n    };\n  }\n\n  /**\n   * Create a handle to an existing Workflow.\n   *\n   * - If only `workflowId` is passed, and there are multiple Workflow Executions with that ID, the handle will refer to\n   *   the most recent one.\n   * - If `workflowId` and `runId` are passed, the handle will refer to the specific Workflow Execution with that Run\n   *   ID.\n   * - If `workflowId` and {@link GetWorkflowHandleOptions.firstExecutionRunId} are passed, the handle will refer to the\n   *   most recent Workflow Execution in the *Chain* that started with `firstExecutionRunId`.\n   *\n   * A *Chain* is a series of Workflow Executions that share the same Workflow ID and are connected by:\n   * - Being part of the same {@link https://docs.temporal.io/typescript/clients#scheduling-cron-workflows | Cron}\n   * - {@link https://docs.temporal.io/typescript/workflows#continueasnew | Continue As New}\n   * - {@link https://typescript.temporal.io/api/interfaces/client.workflowoptions/#retry | Retries}\n   *\n   * This method does not validate `workflowId`. If there is no Workflow Execution with the given `workflowId`, handle\n   * methods like `handle.describe()` will throw a {@link WorkflowNotFoundError} error.\n   */\n  public getHandle<T extends Workflow>(\n    workflowId: string,\n    runId?: string,\n    options?: GetWorkflowHandleOptions\n  ): WorkflowHandle<T> {\n    const interceptors = this.getOrMakeInterceptors(workflowId, runId);\n\n    return this._createWorkflowHandle({\n      workflowId,\n      runId,\n      firstExecutionRunId: options?.firstExecutionRunId,\n      runIdForResult: runId ?? options?.firstExecutionRunId,\n      interceptors,\n      followRuns: options?.followRuns ?? true,\n      typeInfo: options?.typeInfo,\n    });\n  }\n\n  protected async *_list(options?: ListOptions): AsyncIterable<WorkflowExecutionInfo> {\n    let nextPageToken: Uint8Array = Buffer.alloc(0);\n    for (;;) {\n      let response: temporal.api.workflowservice.v1.ListWorkflowExecutionsResponse;\n      try {\n        response = await this.workflowService.listWorkflowExecutions({\n          namespace: this.options.namespace,\n          query: options?.query,\n          nextPageToken,\n          pageSize: options?.pageSize,\n        });\n      } catch (e) {\n        this.rethrowGrpcError(e, 'Failed to list workflows', undefined);\n      }\n      const externalStorage = this.dataConverter.externalStorage;\n      await visit(response, walkListWorkflowExecutionsResponse, extstoreInboundOptions(externalStorage));\n      // Not decoding memo payloads concurrently even though we could have to keep the lazy nature of this iterator.\n      // Decoding is done for `memo` fields which tend to be small.\n      // We might decide to change that based on user feedback.\n      for (const raw of response.executions) {\n        yield await executionInfoFromRaw(raw, this.dataConverter, raw, this.options.namespace);\n      }\n      nextPageToken = response.nextPageToken;\n      if (nextPageToken == null || nextPageToken.length === 0) break;\n    }\n  }\n\n  /**\n   * Return a list of Workflow Executions matching the given `query`.\n   *\n   * Note that the list of Workflow Executions returned is approximate and eventually consistent.\n   *\n   * More info on the concept of \"visibility\" and the query syntax on the Temporal documentation site:\n   * https://docs.temporal.io/visibility\n   */\n  public list(options?: ListOptions): AsyncWorkflowListIterable {\n    return {\n      [Symbol.asyncIterator]: () => this._list(options)[Symbol.asyncIterator](),\n      intoHistories: (intoHistoriesOptions?: IntoHistoriesOptions) => {\n        return mapAsyncIterable(\n          this._list(options),\n          async ({ workflowId, runId }) => ({\n            workflowId,\n            history: await this.getHandle(workflowId, runId).fetchHistory(),\n          }),\n          { concurrency: intoHistoriesOptions?.concurrency ?? 5 }\n        );\n      },\n    };\n  }\n\n  /**\n   * Return the number of Workflow Executions matching the given `query`. If no `query` is provided, then return the\n   * total number of Workflow Executions for this namespace.\n   *\n   * Note that the number of Workflow Executions returned is approximate and eventually consistent.\n   *\n   * More info on the concept of \"visibility\" and the query syntax on the Temporal documentation site:\n   * https://docs.temporal.io/visibility\n   */\n  public async count(query?: string): Promise<CountWorkflowExecution> {\n    let response: temporal.api.workflowservice.v1.CountWorkflowExecutionsResponse;\n    try {\n      response = await this.workflowService.countWorkflowExecutions({\n        namespace: this.options.namespace,\n        query,\n      });\n    } catch (e) {\n      this.rethrowGrpcError(e, 'Failed to count workflows');\n    }\n\n    return decodeCountWorkflowExecutionsResponse(response);\n  }\n\n  protected getOrMakeInterceptors(workflowId: string, runId?: string): WorkflowClientInterceptor[] {\n    if (typeof this.options.interceptors === 'object' && 'calls' in this.options.interceptors) {\n      // eslint-disable-next-line @typescript-eslint/no-deprecated\n      const factories = (this.options.interceptors as WorkflowClientInterceptors).calls ?? [];\n      return factories.map((ctor) => ctor({ workflowId, runId }));\n    }\n    return Array.isArray(this.options.interceptors) ? (this.options.interceptors as WorkflowClientInterceptor[]) : [];\n  }\n}\n\n@SymbolBasedInstanceOfError('QueryRejectedError')\nexport class QueryRejectedError extends Error {\n  constructor(public readonly status: temporal.api.enums.v1.WorkflowExecutionStatus) {\n    super('Query rejected');\n  }\n}\n\n@SymbolBasedInstanceOfError('QueryNotRegisteredError')\nexport class QueryNotRegisteredError extends Error {\n  constructor(\n    message: string,\n    public readonly code: grpcStatus\n  ) {\n    super(message);\n  }\n}\n","import type { temporal } from '@temporalio/proto';\n\n/**\n * Operations that can be passed to {@link TaskQueueClient.updateBuildIdCompatibility}.\n *\n * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n */\nexport type BuildIdOperation =\n  | AddNewIdInNewDefaultSet\n  | AddNewCompatibleVersion\n  | PromoteSetByBuildId\n  | PromoteBuildIdWithinSet\n  | MergeSets;\n\n/**\n * Adds a new Build Id into a new set, which will be used as the default set for\n * the queue. This means all new workflows will start on this Build Id.\n *\n * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n */\nexport interface AddNewIdInNewDefaultSet {\n  operation: 'addNewIdInNewDefaultSet';\n  buildId: string;\n}\n\n/**\n * Adds a new Build Id into an existing compatible set. The newly added ID becomes\n * the default for that compatible set, and thus new workflow tasks for workflows which have been\n * executing on workers in that set will now start on this new Build Id.\n *\n * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n */\nexport interface AddNewCompatibleVersion {\n  operation: 'addNewCompatibleVersion';\n  // The Build Id to add to an existing compatible set.\n  buildId: string;\n  // A Build Id which must already be defined on the task queue, and is used to\n  // find the compatible set to add the new id to.\n  existingCompatibleBuildId: string;\n  // If set to true, the targeted set will also be promoted to become the\n  // overall default set for the queue.\n  promoteSet?: boolean;\n}\n\n/**\n * Promotes a set of compatible Build Ids to become the current\n * default set for the task queue. Any Build Id in the set may be used to\n * target it.\n *\n * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n */\nexport interface PromoteSetByBuildId {\n  operation: 'promoteSetByBuildId';\n  buildId: string;\n}\n\n/**\n * Promotes a Build Id within an existing set to become the default ID for that\n * set.\n *\n * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n */\nexport interface PromoteBuildIdWithinSet {\n  operation: 'promoteBuildIdWithinSet';\n  buildId: string;\n}\n\n/**\n * Merges two sets into one set, thus declaring all the Build Ids in both as\n * compatible with one another. The default of the primary set is maintained as\n * the merged set's overall default.\n *\n * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n */\nexport interface MergeSets {\n  operation: 'mergeSets';\n  // A Build Id which is used to find the primary set to be merged.\n  primaryBuildId: string;\n  // A Build Id which is used to find the secondary set to be merged.\n  secondaryBuildId: string;\n}\n\n/**\n * Represents the sets of compatible Build Id versions associated with some\n * Task Queue, as fetched by {@link TaskQueueClient.getBuildIdCompatability}.\n *\n * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n */\nexport interface WorkerBuildIdVersionSets {\n  /**\n   * All version sets that were fetched for this task queue.\n   */\n  readonly versionSets: BuildIdVersionSet[];\n\n  /**\n   * Returns the default set of compatible Build Ids for the task queue these sets are\n   * associated with.\n   */\n  defaultSet: BuildIdVersionSet;\n\n  /**\n   * Returns the overall default Build Id for the task queue these sets are\n   * associated with.\n   */\n  defaultBuildId: string;\n}\n\n/**\n * Represents one set of compatible Build Ids.\n *\n * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n */\nexport interface BuildIdVersionSet {\n  // All build IDs contained in the set.\n  readonly buildIds: string[];\n\n  // Returns the default Build Id for this set\n  readonly default: string;\n}\n\nexport function versionSetsFromProto(\n  resp: temporal.api.workflowservice.v1.GetWorkerBuildIdCompatibilityResponse\n): WorkerBuildIdVersionSets {\n  if (resp == null || resp.majorVersionSets == null || resp.majorVersionSets.length === 0) {\n    throw new Error('Must be constructed from a compatability response with at least one version set');\n  }\n  return {\n    versionSets: resp.majorVersionSets.map((set) => versionSetFromProto(set)),\n    get defaultSet(): BuildIdVersionSet {\n      // versionSets are read only so no need to worry about an undefined ending up in it\n      return this.versionSets[this.versionSets.length - 1]!;\n    },\n    get defaultBuildId(): string {\n      return this.defaultSet.default;\n    },\n  };\n}\n\nfunction versionSetFromProto(set: temporal.api.taskqueue.v1.ICompatibleVersionSet): BuildIdVersionSet {\n  if (set == null || set.buildIds == null || set.buildIds.length === 0) {\n    throw new Error('Compatible version sets must contain at least one Build Id');\n  }\n  const buildId = set.buildIds[set.buildIds.length - 1];\n  if (buildId === undefined) {\n    throw new Error('Compatible version sets must contain at least one Build Id');\n  }\n  return {\n    buildIds: set.buildIds,\n    default: buildId,\n  };\n}\n","import { status } from '@grpc/grpc-js';\nimport type { RequireAtLeastOne } from '@temporalio/common/lib/type-helpers';\nimport { assertNever, SymbolBasedInstanceOfError } from '@temporalio/common/lib/type-helpers';\nimport { filterNullAndUndefined, makeProtoEnumConverters } from '@temporalio/common/lib/internal-workflow';\nimport type { temporal } from '@temporalio/proto';\nimport type { BaseClientOptions, LoadedWithDefaults } from './base-client';\nimport { BaseClient, defaultBaseClientOptions } from './base-client';\nimport type { WorkflowService } from './types';\nimport type { BuildIdOperation, WorkerBuildIdVersionSets } from './build-id-types';\nimport { versionSetsFromProto } from './build-id-types';\nimport { isGrpcServiceError, ServiceError } from './errors';\nimport { rethrowKnownErrorTypes } from './helpers';\n\ntype IUpdateWorkerBuildIdCompatibilityRequest =\n  temporal.api.workflowservice.v1.IUpdateWorkerBuildIdCompatibilityRequest;\ntype GetWorkerTaskReachabilityResponse = temporal.api.workflowservice.v1.GetWorkerTaskReachabilityResponse;\n\n/**\n * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n */\nexport type TaskQueueClientOptions = BaseClientOptions;\n\n/**\n * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n */\nexport type LoadedTaskQueueClientOptions = LoadedWithDefaults<TaskQueueClientOptions>;\n\n/**\n * A stand-in for a Build Id for unversioned Workers\n *\n * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n */\nexport const UnversionedBuildId = Symbol.for('__temporal_unversionedBuildId');\nexport type UnversionedBuildIdType = typeof UnversionedBuildId;\n\n/**\n * Client for starting Workflow executions and creating Workflow handles\n *\n * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n */\nexport class TaskQueueClient extends BaseClient {\n  public readonly options: LoadedTaskQueueClientOptions;\n\n  constructor(options?: TaskQueueClientOptions) {\n    super(options);\n    this.options = {\n      ...defaultBaseClientOptions(),\n      ...filterNullAndUndefined(options ?? {}),\n      loadedDataConverter: this.dataConverter,\n    };\n  }\n\n  /**\n   * Raw gRPC access to the Temporal service.\n   *\n   * **NOTE**: The namespace provided in {@link options} is **not** automatically set on requests\n   * using this service attribute.\n   */\n  get workflowService(): WorkflowService {\n    return this.connection.workflowService;\n  }\n\n  /**\n   * Used to add new Build Ids or otherwise update the relative compatibility of Build Ids as\n   * defined on a specific task queue for the Worker Versioning feature. For more on this feature,\n   * see https://docs.temporal.io/workers#worker-versioning\n   *\n   * @param taskQueue The task queue to make changes to.\n   * @param operation The operation to be performed.\n   *\n   * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n   */\n  public async updateBuildIdCompatibility(taskQueue: string, operation: BuildIdOperation): Promise<void> {\n    const request: IUpdateWorkerBuildIdCompatibilityRequest = {\n      namespace: this.options.namespace,\n      taskQueue,\n    };\n    switch (operation.operation) {\n      case 'addNewIdInNewDefaultSet':\n        request.addNewBuildIdInNewDefaultSet = operation.buildId;\n        break;\n      case 'addNewCompatibleVersion':\n        request.addNewCompatibleBuildId = {\n          newBuildId: operation.buildId,\n          existingCompatibleBuildId: operation.existingCompatibleBuildId,\n        };\n        break;\n      case 'promoteSetByBuildId':\n        request.promoteSetByBuildId = operation.buildId;\n        break;\n      case 'promoteBuildIdWithinSet':\n        request.promoteBuildIdWithinSet = operation.buildId;\n        break;\n      case 'mergeSets':\n        request.mergeSets = {\n          primarySetBuildId: operation.primaryBuildId,\n          secondarySetBuildId: operation.secondaryBuildId,\n        };\n        break;\n      default:\n        assertNever('Unknown build id update operation', operation);\n    }\n    try {\n      await this.workflowService.updateWorkerBuildIdCompatibility(request);\n    } catch (e) {\n      this.rethrowGrpcError(e, 'Unexpected error updating Build Id compatibility');\n    }\n  }\n\n  /**\n   * Fetch the sets of compatible Build Ids for a given task queue.\n   *\n   * @param taskQueue The task queue to fetch the compatibility information for.\n   * @returns The sets of compatible Build Ids for the given task queue, or undefined if the queue\n   *          has no Build Ids defined on it.\n   *\n   * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n   */\n  public async getBuildIdCompatability(taskQueue: string): Promise<WorkerBuildIdVersionSets | undefined> {\n    let resp;\n    try {\n      resp = await this.workflowService.getWorkerBuildIdCompatibility({\n        taskQueue,\n        namespace: this.options.namespace,\n      });\n    } catch (e) {\n      this.rethrowGrpcError(e, 'Unexpected error fetching Build Id compatibility');\n    }\n    if (resp.majorVersionSets == null || resp.majorVersionSets.length === 0) {\n      return undefined;\n    }\n    return versionSetsFromProto(resp);\n  }\n\n  /**\n   * Fetches task reachability to determine whether a worker may be retired. The request may specify\n   * task queues to query for or let the server fetch all task queues mapped to the given build IDs.\n   *\n   * When requesting a large number of task queues or all task queues associated with the given\n   * build ids in a namespace, all task queues will be listed in the response but some of them may\n   * not contain reachability information due to a server enforced limit. When reaching the limit,\n   * task queues that reachability information could not be retrieved for will be marked with a\n   * `NotFetched` entry in {@link BuildIdReachability.taskQueueReachability}. The caller may issue\n   * another call to get the reachability for those task queues.\n   *\n   * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n   */\n  public async getReachability(options: ReachabilityOptions): Promise<ReachabilityResponse> {\n    let resp;\n    const buildIds = options.buildIds?.map((bid) => {\n      if (bid === UnversionedBuildId) {\n        return '';\n      }\n      return bid;\n    });\n    try {\n      resp = await this.workflowService.getWorkerTaskReachability({\n        namespace: this.options.namespace,\n        taskQueues: options.taskQueues,\n        buildIds,\n        reachability: encodeTaskReachability(options.reachability),\n      });\n    } catch (e) {\n      this.rethrowGrpcError(e, 'Unexpected error fetching Build Id reachability');\n    }\n    return reachabilityResponseFromProto(resp);\n  }\n\n  protected rethrowGrpcError(err: unknown, fallbackMessage: string): never {\n    if (isGrpcServiceError(err)) {\n      rethrowKnownErrorTypes(err);\n      if (err.code === status.NOT_FOUND) {\n        throw new BuildIdNotFoundError(err.details ?? 'Build Id not found');\n      }\n      throw new ServiceError(fallbackMessage, { cause: err });\n    }\n    throw new ServiceError('Unexpected error while making gRPC request');\n  }\n}\n\n/**\n * Options for {@link TaskQueueClient.getReachability}\n *\n * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n */\nexport type ReachabilityOptions = RequireAtLeastOne<BaseReachabilityOptions, 'buildIds' | 'taskQueues'>;\n\n/**\n * There are different types of reachability:\n *   - `NEW_WORKFLOWS`: The Build Id might be used by new workflows\n *   - `EXISTING_WORKFLOWS` The Build Id might be used by open workflows and/or closed workflows.\n *   - `OPEN_WORKFLOWS` The Build Id might be used by open workflows\n *   - `CLOSED_WORKFLOWS` The Build Id might be used by closed workflows\n *\n * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n */\nexport const ReachabilityType = {\n  /** The Build Id might be used by new workflows. */\n  NEW_WORKFLOWS: 'NEW_WORKFLOWS',\n\n  /** The Build Id might be used by open workflows and/or closed workflows. */\n  EXISTING_WORKFLOWS: 'EXISTING_WORKFLOWS',\n\n  /** The Build Id might be used by open workflows. */\n  OPEN_WORKFLOWS: 'OPEN_WORKFLOWS',\n\n  /** The Build Id might be used by closed workflows. */\n  CLOSED_WORKFLOWS: 'CLOSED_WORKFLOWS',\n} as const;\nexport type ReachabilityType = (typeof ReachabilityType)[keyof typeof ReachabilityType];\n\nexport const [encodeTaskReachability, decodeTaskReachability] = makeProtoEnumConverters<\n  temporal.api.enums.v1.TaskReachability,\n  typeof temporal.api.enums.v1.TaskReachability,\n  keyof typeof temporal.api.enums.v1.TaskReachability,\n  typeof ReachabilityType,\n  'TASK_REACHABILITY_'\n>(\n  {\n    [ReachabilityType.NEW_WORKFLOWS]: 1,\n    [ReachabilityType.EXISTING_WORKFLOWS]: 2,\n    [ReachabilityType.OPEN_WORKFLOWS]: 3,\n    [ReachabilityType.CLOSED_WORKFLOWS]: 4,\n    UNSPECIFIED: 0,\n  } as const,\n  'TASK_REACHABILITY_'\n);\n\n/**\n * See {@link ReachabilityOptions}\n *\n * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n */\nexport interface BaseReachabilityOptions {\n  /**\n   * A list of build ids to query the reachability of. Currently, at least one Build Id must be\n   * specified, but this restriction may be lifted in the future.\n   */\n  buildIds: (string | UnversionedBuildIdType)[];\n  /**\n   * A list of task queues with Build Ids defined on them that the request is\n   * concerned with.\n   */\n  taskQueues?: string[];\n  /** The kind of reachability this request is concerned with. */\n  reachability?: ReachabilityType;\n}\n\n/**\n * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n */\nexport interface ReachabilityResponse {\n  /** Maps Build Ids to their reachability information. */\n  buildIdReachability: Record<string | UnversionedBuildIdType, BuildIdReachability>;\n}\n\n/**\n * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n */\nexport type ReachabilityTypeResponse = ReachabilityType | 'NOT_FETCHED';\n\n/**\n * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n */\nexport interface BuildIdReachability {\n  /**\n   *  Maps Task Queue names to how the Build Id may be reachable from them. If they are not\n   *  reachable, the map value will be an empty array.\n   */\n  taskQueueReachability: Record<string, ReachabilityTypeResponse[]>;\n}\n\nexport function reachabilityResponseFromProto(resp: GetWorkerTaskReachabilityResponse): ReachabilityResponse {\n  return {\n    buildIdReachability: Object.fromEntries(\n      resp.buildIdReachability.map((bir) => {\n        const taskQueueReachability: Record<string, ReachabilityTypeResponse[]> = {};\n        if (bir.taskQueueReachability != null) {\n          for (const tqr of bir.taskQueueReachability) {\n            if (tqr.taskQueue == null) {\n              continue;\n            }\n            if (tqr.reachability == null) {\n              taskQueueReachability[tqr.taskQueue] = [];\n              continue;\n            }\n            taskQueueReachability[tqr.taskQueue] = tqr.reachability.map(\n              (x) => decodeTaskReachability(x) ?? 'NOT_FETCHED'\n            );\n          }\n        }\n        let bid: string | UnversionedBuildIdType;\n        if (bir.buildId) {\n          bid = bir.buildId;\n        } else {\n          bid = UnversionedBuildId;\n        }\n        return [bid, { taskQueueReachability }];\n      })\n    ) as Record<string | UnversionedBuildIdType, BuildIdReachability>,\n  };\n}\n\n/**\n * Thrown when one or more Build Ids are not found while using the {@link TaskQueueClient}.\n *\n * It could be because:\n * - Id passed is incorrect\n * - Build Id has been scavenged by the server.\n *\n * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n */\n@SymbolBasedInstanceOfError('BuildIdNotFoundError')\nexport class BuildIdNotFoundError extends Error {}\n","import { filterNullAndUndefined } from '@temporalio/common/lib/internal-workflow';\nimport type { BaseClientOptions, LoadedWithDefaults } from './base-client';\nimport { BaseClient, defaultBaseClientOptions } from './base-client';\nimport type { ClientInterceptors } from './interceptors';\nimport { NexusClient } from './nexus-client';\nimport { ScheduleClient } from './schedule-client';\nimport type { QueryRejectCondition, WorkflowService } from './types';\nimport { WorkflowClient } from './workflow-client';\nimport { TaskQueueClient } from './task-queue-client';\nimport { ActivityClient } from './activity-client';\n\nexport interface ClientOptions extends BaseClientOptions {\n  /**\n   * Used to override and extend default Connection functionality\n   *\n   * Useful for injecting auth headers and tracing Workflow executions\n   */\n  interceptors?: ClientInterceptors;\n\n  /**\n   * List of plugins to register with the client.\n   *\n   * Plugins allow you to extend and customize the behavior of Temporal clients.\n   * They can intercept and modify client creation.\n   *\n   * @experimental Plugins is an experimental feature; APIs may change without notice.\n   */\n  plugins?: ClientPlugin[];\n\n  workflow?: {\n    /**\n     * Should a query be rejected by closed and failed workflows\n     *\n     * @default `undefined`, which means that closed and failed workflows are still queryable\n     */\n    queryRejectCondition?: QueryRejectCondition;\n  };\n}\n\nexport type LoadedClientOptions = LoadedWithDefaults<ClientOptions>;\n\n/**\n * High level SDK client.\n */\nexport class Client extends BaseClient {\n  public readonly options: LoadedClientOptions;\n\n  /**\n   * Workflow sub-client - use to start and interact with Workflows\n   */\n  public readonly workflow: WorkflowClient;\n  /**\n   * Activity sub-client - use to start and interact with Activities and to perform asynchronous Activity completion\n   */\n  public readonly activity: ActivityClient;\n  /**\n   * Schedule sub-client - use to start and interact with Schedules\n   */\n  public readonly schedule: ScheduleClient;\n  /**\n   * Task Queue sub-client - use to perform operations on Task Queues\n   *\n   * @experimental The Worker Versioning API is still being designed. Major changes are expected.\n   */\n  public readonly taskQueue: TaskQueueClient;\n  /**\n   * Nexus sub-client - use to start and interact with standalone Nexus operations.\n   *\n   * @experimental Standalone Nexus operations are a new API and susceptible to change.\n   */\n  public readonly nexus: NexusClient;\n\n  constructor(options?: ClientOptions) {\n    options = options ?? {};\n\n    // Add client plugins from the connection\n    options.plugins = (options.plugins ?? []).concat(options.connection?.plugins ?? []);\n\n    // Process plugins first to allow them to modify connect configuration\n    for (const plugin of options.plugins) {\n      if (plugin.configureClient !== undefined) {\n        options = plugin.configureClient(options);\n      }\n    }\n\n    super(options);\n\n    const { interceptors, workflow, plugins, ...commonOptions } = options;\n\n    this.workflow = new WorkflowClient({\n      ...commonOptions,\n      ...(workflow ?? {}),\n      connection: this.connection,\n      dataConverter: this.dataConverter,\n      interceptors: interceptors?.workflow,\n      queryRejectCondition: workflow?.queryRejectCondition,\n    });\n\n    this.activity = new ActivityClient({\n      ...commonOptions,\n      connection: this.connection,\n      dataConverter: this.dataConverter,\n      interceptors: interceptors?.activity,\n    });\n\n    this.schedule = new ScheduleClient({\n      ...commonOptions,\n      connection: this.connection,\n      dataConverter: this.dataConverter,\n      interceptors: interceptors?.schedule,\n    });\n\n    this.taskQueue = new TaskQueueClient({\n      ...commonOptions,\n      connection: this.connection,\n      dataConverter: this.dataConverter,\n    });\n\n    this.nexus = new NexusClient({\n      ...commonOptions,\n      connection: this.connection,\n      dataConverter: this.dataConverter,\n      interceptors: interceptors?.nexus,\n    });\n\n    this.options = {\n      ...defaultBaseClientOptions(),\n      ...filterNullAndUndefined(commonOptions),\n      loadedDataConverter: this.dataConverter,\n      interceptors: {\n        workflow: this.workflow.options.interceptors,\n        schedule: this.schedule.options.interceptors,\n        nexus: this.nexus.options.interceptors,\n      },\n      workflow: {\n        queryRejectCondition: this.workflow.options.queryRejectCondition,\n      },\n      plugins: plugins ?? [],\n    };\n  }\n\n  /**\n   * Raw gRPC access to the Temporal service.\n   *\n   * **NOTE**: The namespace provided in {@link options} is **not** automatically set on requests made via this service\n   * object.\n   */\n  get workflowService(): WorkflowService {\n    return this.connection.workflowService;\n  }\n}\n\n/**\n * Plugin to control the configuration of a native connection.\n *\n * @experimental Plugins is an experimental feature; APIs may change without notice.\n */\nexport interface ClientPlugin {\n  /**\n   * Gets the name of this plugin.\n   */\n  get name(): string;\n\n  /**\n   * Hook called when creating a client to allow modification of configuration.\n   *\n   * This method is called during client creation and allows plugins to modify\n   * the client configuration before the client is fully initialized.\n   */\n  configureClient?(options: Omit<ClientOptions, 'plugins'>): Omit<ClientOptions, 'plugins'>;\n}\n","/**\n * Client for communicating with Temporal Server.\n *\n * Most functionality is available through {@link WorkflowClient}, but you can also call gRPC methods directly using {@link Connection.workflowService} and {@link Connection.operatorService}.\n *\n * ### Usage\n *\n * ```ts\n * import { Connection, Client } from '@temporalio/client';\n * import { loadClientConnectConfig } from '@temporalio/envconfig';\n * import { sleepForDays } from './workflows';\n * import { nanoid } from 'nanoid';\n *\n * async function run() {\n *   const config = loadClientConnectConfig();\n *   const connection = await Connection.connect(config.connectionOptions);\n *   const client = new Client({ connection });\n *\n *   const handle = await client.workflow.start(sleepForDays, {\n *     taskQueue: 'sleep-for-days',\n *     workflowId: 'workflow-' + nanoid(),\n *   });\n *   console.log(`Started workflow ${handle.workflowId}`);\n *\n *   // Wait for workflow completion (runs indefinitely until it receives a signal)\n *   console.log(await handle.result());\n * }\n *\n * run().catch((err) => {\n *   console.error(err);\n *   process.exit(1);\n * });\n * ```\n * @module\n */\n\nexport {\n  ActivityFailure,\n  ApplicationFailure,\n  CancelledFailure,\n  ChildWorkflowFailure,\n  DataConverter,\n  defaultPayloadConverter,\n  ProtoFailure,\n  RetryPolicy,\n  ServerFailure,\n  TemporalFailure,\n  TerminatedFailure,\n  TimeoutFailure,\n  WorkflowExecutionAlreadyStartedError,\n} from '@temporalio/common';\nexport { TLSConfig } from '@temporalio/common/lib/internal-non-workflow';\nexport * from '@temporalio/common/lib/errors';\nexport * from '@temporalio/common/lib/interfaces';\nexport * from '@temporalio/common/lib/workflow-handle';\nexport * from './async-completion-client';\nexport * from './activity-client';\nexport * from './client';\nexport {\n  Connection,\n  ConnectionOptions,\n  ConnectionOptionsWithDefaults,\n  ConnectionPlugin,\n  LOCAL_TARGET,\n} from './connection';\nexport * from './errors';\nexport * from './grpc-retry';\nexport * from './interceptors';\nexport * from './types';\nexport * from './workflow-client';\nexport * from './workflow-options';\nexport * from './schedule-types';\nexport * from './schedule-client';\nexport * from './task-queue-client';\nexport * from './nexus-types';\nexport * from './nexus-client';\nexport { WorkflowUpdateStage } from './workflow-update-stage';\nexport {\n  WorkerBuildIdVersionSets,\n  BuildIdVersionSet,\n  BuildIdOperation,\n  PromoteSetByBuildId,\n  PromoteBuildIdWithinSet,\n  MergeSets,\n  AddNewIdInNewDefaultSet,\n  AddNewCompatibleVersion,\n} from './build-id-types';\n","/**\n * Scoped device capabilities (C5).\n * See docs/architecture/2026-07-24-device-identity-and-capabilities.md.\n *\n * Authorization was all-or-nothing: authMiddleware asked one question — is this\n * token the API key — and answered 401 or full access. A device paired merely to\n * glance at session status held exactly the authority of the one driving the\n * agent, because there was only ever one credential and no principal to scope.\n */\n\nexport const CAPABILITIES = [\n  \"history:read\", // read conversations, search\n  \"session:control\", // start, resume, send input, interrupt\n  \"fs:browse\", // browse the project tree\n  \"fs:upload\", // upload files into a project\n  \"notifications\", // register for push\n  \"admin\", // rotate keys, manage devices\n] as const;\n\nexport type Capability = (typeof CAPABILITIES)[number];\n\nexport function isCapability(value: unknown): value is Capability {\n  return typeof value === \"string\" && (CAPABILITIES as readonly string[]).includes(value);\n}\n\n/**\n * Every capability, `admin` included. What a normal driving device gets.\n *\n * It withheld `admin` originally, on the reasoning that a device should run the\n * agent without being able to rotate credentials or revoke its siblings. That is\n * a sound rule for a server shared between people, and this one is not: the\n * phone IS the administration surface. Mobile's paired-devices screen\n * (`GET /api/devices`), backup and restore (`/api/backup/*`) and the model and\n * effort settings (`/api/config/claude-flags`) are all admin-gated, so a device\n * without `admin` loses four working screens the moment it starts presenting its\n * own token instead of the shared key.\n *\n * `read-only` is where the narrowing lives, and it still does.\n */\nexport const FULL_CAPABILITIES: Capability[] = [\n  \"history:read\",\n  \"session:control\",\n  \"fs:browse\",\n  \"fs:upload\",\n  \"notifications\",\n  \"admin\",\n];\n\n/**\n * Read-only monitoring. The mode that makes a \"just show me what's happening\"\n * device safe to pair, and the one C5 explicitly calls for.\n */\nexport const READ_ONLY_CAPABILITIES: Capability[] = [\"history:read\"];\n\nexport type CapabilityPreset = \"full\" | \"read-only\";\n\nexport function capabilitiesForPreset(preset: CapabilityPreset): Capability[] {\n  return preset === \"read-only\" ? [...READ_ONLY_CAPABILITIES] : [...FULL_CAPABILITIES];\n}\n\n/**\n * The principal behind a request.\n *\n * `legacy` is the shared API key: it predates device identity, so it carries the\n * full preset and no device id. Keeping it working is what lets this ship\n * without breaking every already-paired device.\n */\nexport interface Principal {\n  kind: \"device\" | \"legacy\";\n  deviceId?: string;\n  capabilities: Capability[];\n}\n\nexport function legacyPrincipal(): Principal {\n  // The shared API key is the OWNER's credential — it is what pairs new devices\n  // and rotates the key itself. It therefore holds `admin` in addition to the\n  // full preset. Devices are the things that get scoped; the key that mints\n  // them cannot be, or the owner could no longer administer their own server.\n  return { kind: \"legacy\", capabilities: [...FULL_CAPABILITIES] };\n}\n\nexport function hasCapability(principal: Principal, required: Capability): boolean {\n  return principal.capabilities.includes(required);\n}\n\n/**\n * Capability required to reach a route.\n *\n * Matching is longest-prefix so a specific rule beats a general one. Returning\n * `null` means \"no rule\".\n *\n * **The caller ALLOWS in that case — it does not deny.** `authMiddleware` calls\n * `next()` for an unclassified path so an unknown route still 404s, because a\n * 403 would tell an authenticated caller that a path it cannot name might\n * exist. This comment previously claimed the opposite, which mattered: a reader\n * trusting it would believe a route was guarded by omission when it is not.\n *\n * The fail-closed guarantee is therefore a BUILD-TIME one, enforced by\n * `__tests__/capabilities.test.ts` (\"every mounted route is classified\"), which\n * reads both the mount prefixes in `api/app.ts` and the path literals in\n * `api/routes/*.ts`. A new endpoint with no mapping fails that test rather than\n * being denied at runtime. If you change this function's contract, change that\n * test and this comment together — they are the whole guarantee.\n */\nconst ROUTE_CAPABILITIES: ReadonlyArray<[prefix: string, capability: Capability]> = [\n  // Most specific first for readability; matching sorts by length anyway.\n  [\"/api/sessions/\", \"session:control\"],\n  [\"/api/sessions\", \"history:read\"], // listing sessions is a read\n  [\"/api/conversations\", \"history:read\"],\n  [\"/api/projects\", \"history:read\"],\n  [\"/api/search\", \"history:read\"],\n  [\"/api/providers\", \"history:read\"],\n  [\"/api/browse\", \"fs:browse\"],\n  [\"/api/upload\", \"fs:upload\"],\n  [\"/api/push\", \"notifications\"],\n  [\"/api/devices\", \"admin\"],\n  [\"/api/config\", \"admin\"],\n  [\"/api/auth/rotate\", \"admin\"],\n  [\"/api/backup\", \"admin\"],\n  // Server identity and capability discovery. A read-only device must be able\n  // to see WHICH server it is talking to and what it supports, or it cannot\n  // render anything at all.\n  [\"/api/info\", \"history:read\"],\n  [\"/api/profiles\", \"history:read\"],\n  [\"/api/diagnostics\", \"history:read\"],\n  [\"/api/cache/alert\", \"history:read\"],\n  // Client log shipping: any authenticated client may report its own errors.\n  // Gating this behind a capability would silence diagnostics from exactly the\n  // devices most likely to be misbehaving.\n  [\"/api/__client-log\", \"history:read\"],\n  // Logs viewer is localhost-only and already bypasses this middleware; the\n  // mapping exists so a remote request is classified rather than denied as\n  // unclassified.\n  [\"/api/logs\", \"admin\"],\n  // Pairing routes other than the public exchange (e.g. minting a token).\n  [\"/api/pair\", \"admin\"],\n  // The transport handshake. `POST /api/e2ee/open` is public and bypasses this\n  // middleware entirely (`PUBLIC_POST_PATHS`) — the Noise handshake IS the\n  // authentication. The rule exists so a stray method on the same path is\n  // denied by rule rather than by omission, which is what the \"every mounted\n  // route is classified\" test enforces (NONCE-DESIGN §18).\n  [\"/api/e2ee\", \"admin\"],\n  // The live WebSocket. Subscribing is a read — terminal output, session\n  // updates, conversation events. Control still flows through the HTTP input\n  // routes, which carry their own capability check, so a read-only device can\n  // watch a session stream without being able to drive it.\n  [\"/ws\", \"history:read\"],\n  // Progress webhook (multi-agent). Authenticated by HMAC in the handler and\n  // already skipped by the middleware; classified so a stray request is denied\n  // by rule rather than as \"unclassified\".\n  [\"/internal/sessions\", \"admin\"],\n];\n\nexport function requiredCapability(path: string, method: string): Capability | null {\n  // A read of the session list is not the same authority as driving a session.\n  // GET /api/sessions/:id and its sub-resources are reads; writes to them are\n  // control. Without this split a read-only device could not see a session at\n  // all, which would make the mode useless.\n  if (path.startsWith(\"/api/sessions\") && (method === \"GET\" || method === \"HEAD\")) {\n    return \"history:read\";\n  }\n\n  let best: { len: number; cap: Capability } | null = null;\n  for (const [prefix, cap] of ROUTE_CAPABILITIES) {\n    if (path.startsWith(prefix) && (best === null || prefix.length > best.len)) {\n      best = { len: prefix.length, cap };\n    }\n  }\n  return best?.cap ?? null;\n}\n","import type Database from \"better-sqlite3\";\nimport { createHash, randomBytes, randomUUID, timingSafeEqual } from \"crypto\";\nimport {\n  type Capability,\n  type CapabilityPreset,\n  capabilitiesForPreset,\n  isCapability,\n} from \"../../services/security/capabilities\";\n\n/**\n * Paired-device registry (C5).\n * See docs/architecture/2026-07-24-device-identity-and-capabilities.md.\n *\n * Stores identity and authority for each paired device. Never stores a usable\n * credential: only the SHA-256 of a device token, so reading this table cannot\n * impersonate a device.\n */\n\nexport interface DeviceRow {\n  device_id: string;\n  public_key: string;\n  token_hash: string;\n  name: string | null;\n  capabilities: string;\n  created_at: number;\n  last_seen_at: number | null;\n  revoked_at: number | null;\n  /** Noise static public key, base64. Null on every row that predates E2EE. */\n  e2ee_static_pub: string | null;\n  /** The downgrade lock. 1 once this device has completed a handshake. */\n  e2ee_required: number;\n  e2ee_version: number | null;\n}\n\n/** A device as reported over the API. Deliberately carries no credential. */\nexport interface DeviceView {\n  deviceId: string;\n  name: string | null;\n  capabilities: Capability[];\n  createdAt: number;\n  lastSeenAt: number | null;\n  revokedAt: number | null;\n  /**\n   * Whether this device is pinned to encryption.\n   *\n   * A boolean, never the key and never a hash of it: `GET /api/devices` exists\n   * so a user can spot a device they did not pair, and answering \"is this one\n   * encrypted\" needs no key material to do it. Publishing the static key would\n   * hand an attacker who reached this endpoint the value that identifies a\n   * device.\n   */\n  e2ee: boolean;\n}\n\nexport interface RegisteredDevice {\n  deviceId: string;\n  /** Returned to the client exactly once, at pairing. Never persisted raw. */\n  deviceToken: string;\n  capabilities: Capability[];\n}\n\n/** Device tokens are opaque high-entropy strings; 32 bytes matches the API key. */\nexport function generateDeviceToken(): string {\n  return randomBytes(32).toString(\"base64url\");\n}\n\nexport function hashDeviceToken(token: string): string {\n  return createHash(\"sha256\").update(token).digest(\"hex\");\n}\n\n/**\n * Constant-time comparison of two token hashes, matching `validateApiKey`'s\n * discipline. Both inputs are fixed-length hex digests, so a length mismatch\n * means a malformed value rather than a secret-dependent branch.\n */\nexport function safeHashEquals(a: string, b: string): boolean {\n  if (a.length !== b.length) return false;\n  return timingSafeEqual(Buffer.from(a, \"utf8\"), Buffer.from(b, \"utf8\"));\n}\n\n/**\n * Parse the stored capability JSON, dropping anything this build does not\n * recognize. A downgrade must never silently grant a capability it cannot\n * enforce — unknown entries are discarded rather than trusted.\n */\nexport function parseCapabilities(raw: string): Capability[] {\n  try {\n    const parsed: unknown = JSON.parse(raw);\n    if (!Array.isArray(parsed)) return [];\n    return parsed.filter(isCapability);\n  } catch {\n    return [];\n  }\n}\n\nexport function toDeviceView(row: DeviceRow): DeviceView {\n  return {\n    deviceId: row.device_id,\n    name: row.name,\n    capabilities: parseCapabilities(row.capabilities),\n    createdAt: row.created_at,\n    lastSeenAt: row.last_seen_at,\n    revokedAt: row.revoked_at,\n    // Reported from `e2ee_required` rather than from the key's presence. The\n    // two agree today, but they answer different questions — the key is what a\n    // handshake is checked against, `e2ee_required` is whether plaintext is\n    // refused — and it is the second one a user is asking about.\n    e2ee: row.e2ee_required === 1,\n  };\n}\n\nexport class DevicesRepository {\n  private insertStmt: Database.Statement;\n  private byTokenHashStmt: Database.Statement;\n  private byIdStmt: Database.Statement;\n  private listStmt: Database.Statement;\n  private revokeStmt: Database.Statement;\n  private touchStmt: Database.Statement;\n  private deleteStmt: Database.Statement;\n  private deleteRevokedStmt: Database.Statement;\n  private byE2eeStaticPubStmt: Database.Statement;\n  private repairStmt: Database.Statement;\n\n  constructor(db: Database.Database) {\n    this.insertStmt = db.prepare(`\n      INSERT INTO devices (\n        device_id, public_key, token_hash, name, capabilities, created_at,\n        e2ee_static_pub, e2ee_required, e2ee_version\n      ) VALUES (\n        @device_id, @public_key, @token_hash, @name, @capabilities, @created_at,\n        @e2ee_static_pub, @e2ee_required, @e2ee_version\n      )\n    `);\n    this.byE2eeStaticPubStmt = db.prepare(\"SELECT * FROM devices WHERE e2ee_static_pub = ?\");\n    // A re-pair of a device we already know by its static key.\n    //\n    // `created_at` is deliberately NOT touched: it is what a user reads on the\n    // paired-devices screen to spot a device they did not pair, and refreshing\n    // it would erase the evidence that screen exists for.\n    //\n    // `revoked_at` IS cleared. The alternative — leaving it set — makes a\n    // pairing that visibly succeeds produce a device whose every request\n    // 401s, with nothing explaining why. Re-pairing requires a live pair\n    // token minted on that machine, so it is an authorized act by the same\n    // person who revoked it. Decided 2026-08-16; recorded in design.md §4.4.\n    this.repairStmt = db.prepare(`\n      UPDATE devices SET\n        public_key = @public_key,\n        token_hash = @token_hash,\n        name = @name,\n        capabilities = @capabilities,\n        e2ee_required = 1,\n        e2ee_version = @e2ee_version,\n        revoked_at = NULL\n      WHERE device_id = @device_id\n    `);\n    this.byTokenHashStmt = db.prepare(\"SELECT * FROM devices WHERE token_hash = ?\");\n    this.byIdStmt = db.prepare(\"SELECT * FROM devices WHERE device_id = ?\");\n    this.listStmt = db.prepare(\"SELECT * FROM devices ORDER BY created_at DESC\");\n    this.revokeStmt = db.prepare(\"UPDATE devices SET revoked_at = ? WHERE device_id = ?\");\n    this.touchStmt = db.prepare(\"UPDATE devices SET last_seen_at = ? WHERE device_id = ?\");\n    this.deleteStmt = db.prepare(\"DELETE FROM devices WHERE device_id = ?\");\n    this.deleteRevokedStmt = db.prepare(\"DELETE FROM devices WHERE revoked_at IS NOT NULL\");\n  }\n\n  /**\n   * Record a newly paired device and mint its token.\n   *\n   * The raw token is returned to the caller and never stored — this is the only\n   * moment it exists outside the client.\n   */\n  register(args: {\n    publicKey: string;\n    name?: string | null;\n    preset?: CapabilityPreset;\n    now?: number;\n    /**\n     * The device's Noise static public key, base64, when pairing completed a\n     * handshake. Absent on a plaintext pairing, which stays exactly as it is\n     * today: no key, no pin, no behaviour change.\n     */\n    e2eeStaticPub?: string;\n    e2eeVersion?: number;\n  }): RegisteredDevice {\n    const deviceToken = generateDeviceToken();\n    const capabilities = capabilitiesForPreset(args.preset ?? \"full\");\n    const now = args.now ?? Date.now();\n\n    // A re-pair from the same phone presents the same static key, and the\n    // unique index makes a second row impossible — so this updates rather than\n    // inserts. Doing it as look-up-then-write rather than an upsert because the\n    // existing device_id has to be returned, and because `ON CONFLICT` against\n    // a PARTIAL index needs its WHERE clause repeated, which is a thing to get\n    // wrong for no gain. Safe without a transaction: better-sqlite3 is\n    // synchronous and nothing yields between the two statements.\n    const existing = args.e2eeStaticPub\n      ? (this.byE2eeStaticPubStmt.get(args.e2eeStaticPub) as DeviceRow | undefined)\n      : undefined;\n\n    if (existing) {\n      this.repairStmt.run({\n        device_id: existing.device_id,\n        public_key: args.publicKey,\n        token_hash: hashDeviceToken(deviceToken),\n        name: args.name ?? null,\n        capabilities: JSON.stringify(capabilities),\n        e2ee_version: args.e2eeVersion ?? null,\n      });\n      return { deviceId: existing.device_id, deviceToken, capabilities };\n    }\n\n    const deviceId = randomUUID();\n    this.insertStmt.run({\n      device_id: deviceId,\n      public_key: args.publicKey,\n      token_hash: hashDeviceToken(deviceToken),\n      name: args.name ?? null,\n      capabilities: JSON.stringify(capabilities),\n      created_at: now,\n      e2ee_static_pub: args.e2eeStaticPub ?? null,\n      // The downgrade lock, set in the same write that records the key. Once\n      // set, nothing a client can send clears it (design.md §6.3) — which is\n      // what makes it a lock rather than a preference.\n      e2ee_required: args.e2eeStaticPub ? 1 : 0,\n      e2ee_version: args.e2eeVersion ?? null,\n    });\n\n    return { deviceId, deviceToken, capabilities };\n  }\n\n  /** The device that owns a Noise static key, or null. */\n  getByE2eeStaticPub(staticPub: string): DeviceRow | null {\n    return (this.byE2eeStaticPubStmt.get(staticPub) as DeviceRow | undefined) ?? null;\n  }\n\n  /**\n   * Resolve a presented token to a device, or null.\n   *\n   * Returns null for a revoked device, so revocation takes effect on the very\n   * next request with no cache to go stale.\n   */\n  authenticate(token: string): DeviceRow | null {\n    const hash = hashDeviceToken(token);\n    const row = this.byTokenHashStmt.get(hash) as DeviceRow | undefined;\n    if (!row) return null;\n    // The lookup is already an indexed equality match on a hash; the explicit\n    // constant-time compare guards the value we actually act on.\n    if (!safeHashEquals(row.token_hash, hash)) return null;\n    if (row.revoked_at != null) return null;\n    return row;\n  }\n\n  get(deviceId: string): DeviceRow | null {\n    return (this.byIdStmt.get(deviceId) as DeviceRow | undefined) ?? null;\n  }\n\n  /** All devices, including revoked ones — an audit surface needs the history. */\n  list(): DeviceView[] {\n    return (this.listStmt.all() as DeviceRow[]).map(toDeviceView);\n  }\n\n  /** Revoke one device. Others are untouched — no key rotation, no collateral. */\n  revoke(deviceId: string, now: number = Date.now()): boolean {\n    return this.revokeStmt.run(now, deviceId).changes > 0;\n  }\n\n  /**\n   * Erase one device's record outright.\n   *\n   * Deliberately separate from `revoke`, which is a soft delete that keeps the\n   * row so `list()` can show what happened. That audit trail is the right\n   * default — but it meant a `devices` row, including the user-supplied `name`\n   * (\"Ronen's iPhone\"), had no removal path at all once the registry moved to\n   * runtime.db, which no command deletes. This is that path.\n   *\n   * Erasure is NOT revocation: deleting a row frees its `token_hash`, so a\n   * device whose token is still on a phone somewhere stops being *known* rather\n   * than being *refused*. Revoke first, delete second, is the safe order, and\n   * `deleteRevoked()` exists so that is the easy thing to do.\n   */\n  delete(deviceId: string): boolean {\n    return this.deleteStmt.run(deviceId).changes > 0;\n  }\n\n  /**\n   * Erase every already-revoked device. The bulk companion to `delete`, and the\n   * one that is safe by construction: a revoked device is already refused, so\n   * removing its row cannot restore access to anything.\n   *\n   * Returns the number of rows removed.\n   */\n  deleteRevoked(): number {\n    return this.deleteRevokedStmt.run().changes;\n  }\n\n  touch(deviceId: string, now: number = Date.now()): void {\n    this.touchStmt.run(now, deviceId);\n  }\n}\n","export const CLAUDE_CODE_PROVIDER = \"claude-code\" as const;\nexport const CODEX_CLI_PROVIDER = \"codex-cli\" as const;\nexport const CURSOR_PROVIDER = \"cursor\" as const;\n/** Live PTY on main shipped this wire name; accept it and emit `cursor`. */\nexport const LEGACY_CURSOR_PROVIDER = \"cursor-cli\" as const;\n\nexport const PROVIDER_NAMES = [CLAUDE_CODE_PROVIDER, CODEX_CLI_PROVIDER, CURSOR_PROVIDER] as const;\n\nexport type ProviderName = (typeof PROVIDER_NAMES)[number];\n\nexport function canonicalizeProviderName(value: unknown): ProviderName | undefined {\n  if (value === LEGACY_CURSOR_PROVIDER) return CURSOR_PROVIDER;\n  if (typeof value === \"string\" && (PROVIDER_NAMES as readonly string[]).includes(value)) {\n    return value as ProviderName;\n  }\n  return undefined;\n}\n\nexport function isProviderName(value: unknown): value is ProviderName {\n  return canonicalizeProviderName(value) !== undefined;\n}\n\n/** The argv[0] we look for / tell the user to install. */\nexport function commandNameForProvider(provider: ProviderName): string {\n  switch (canonicalizeProviderName(provider) ?? provider) {\n    case CLAUDE_CODE_PROVIDER:\n      return \"claude\";\n    case CODEX_CLI_PROVIDER:\n      return \"codex\";\n    case CURSOR_PROVIDER:\n      return \"agent\";\n    default:\n      return \"claude\";\n  }\n}\n\n// Resolve a provider for a runner lookup. A `??` chain only defends against\n// null/undefined, so a present-but-unknown value (e.g. the legacy 'threadbase'\n// default from an old scanner-era cache) sails through and 501s at\n// assertSupportedProvider. Coerce anything that isn't a real runner to Claude Code.\nexport function coerceProviderForRunner(value: unknown): ProviderName {\n  return canonicalizeProviderName(value) ?? CLAUDE_CODE_PROVIDER;\n}\n\n// Codex resume is implemented and verified (Phase 0: `codex resume <id>\n// --cd <dir>` replays the prior transcript end-to-end) — codex-cli now\n// defers to the same availability check as claude-code (project path\n// present, etc.) instead of forcing resumable=false unconditionally.\n// `provider` is kept in the signature (unused) so call sites don't need to\n// change if resumability ever needs to differentiate by provider again.\nexport function isProviderResumable(\n  _provider: string | null | undefined,\n  availabilityResumable: boolean,\n): boolean {\n  return availabilityResumable;\n}\n","import { execFileSync } from \"child_process\";\nimport { accessSync, constants, existsSync, statSync } from \"fs\";\nimport { homedir, platform } from \"os\";\nimport { delimiter, join } from \"path\";\nimport { CODEX_CLI_PROVIDER, CURSOR_PROVIDER, type ProviderName } from \"./providers\";\n\nexport const isWindows = platform() === \"win32\";\n\n// where.exe matches any file literally named after the query, including\n// extension-less POSIX shim scripts that npm installs alongside <name>.cmd /\n// <name>.ps1 for git-bash/WSL. Windows CreateProcess can't execute those\n// (they have no PE header), so picking where.exe's first line unconditionally\n// risks handing node-pty a script instead of a binary — surfacing as\n// \"Cannot create process, error code: 193\". Restrict matches to extensions\n// CreateProcess can actually launch.\nconst WINDOWS_EXECUTABLE_EXTENSIONS = new Set([\".exe\", \".cmd\", \".bat\"]);\n\nfunction isWindowsExecutablePath(path: string): boolean {\n  const dot = path.lastIndexOf(\".\");\n  if (dot < 0) return false;\n  return WINDOWS_EXECUTABLE_EXTENSIONS.has(path.slice(dot).toLowerCase());\n}\n\n// ─── Claude executable resolution ─────────────────────────────────────────────\n// On Windows, Task Scheduler strips PATH to bare system directories, so\n// `claude` alone will not resolve. We try where.exe first, then fall back to\n// well-known install locations before giving up and returning the bare name.\n//\n// On macOS, launchd inherits PATH=/usr/bin:/bin:/usr/sbin:/sbin by default,\n// which excludes both Homebrew prefixes. Without an explicit fallback,\n// node-pty's execvp(\"claude\", …) fails with ENOENT and every session\n// dies in milliseconds — see docs/troubleshooting.md. The plist's\n// EnvironmentVariables block is the primary fix; this is defense in depth.\n\nlet _claudeExe: string | undefined;\n\n// Resolution is memoized for the process lifetime (see below), so a bad\n// resolution otherwise stays bad until restart. Call this after a spawn\n// using the cached path fails, so the next attempt re-resolves instead of\n// repeating the same broken path on every retry/resume.\nexport function clearClaudeExeCache(): void {\n  _claudeExe = undefined;\n}\n\nexport function resolveClaudeExe(): string {\n  if (_claudeExe !== undefined) return _claudeExe;\n\n  if (isWindows) {\n    try {\n      const found = execFileSync(\"where.exe\", [\"claude\"], {\n        encoding: \"utf-8\",\n        windowsHide: true,\n        timeout: 3000,\n      })\n        .trim()\n        .split(\"\\n\")\n        .map((line) => line.trim())\n        .find(isWindowsExecutablePath);\n      if (found) {\n        _claudeExe = found;\n        return _claudeExe;\n      }\n    } catch {}\n\n    const candidates = [\n      join(homedir(), \".local\", \"bin\", \"claude.exe\"),\n      join(\n        process.env.LOCALAPPDATA ?? join(homedir(), \"AppData\", \"Local\"),\n        \"Microsoft\",\n        \"WindowsApps\",\n        \"claude.exe\",\n      ),\n    ];\n    for (const p of candidates) {\n      if (existsSync(p)) {\n        _claudeExe = p;\n        return _claudeExe;\n      }\n    }\n  } else {\n    try {\n      const found = execFileSync(\"/usr/bin/which\", [\"claude\"], {\n        encoding: \"utf-8\",\n        timeout: 3000,\n      })\n        .trim()\n        .split(\"\\n\")[0]\n        .trim();\n      if (found && existsSync(found)) {\n        _claudeExe = found;\n        return _claudeExe;\n      }\n    } catch {}\n\n    const candidates = [\n      \"/opt/homebrew/bin/claude\",\n      \"/usr/local/bin/claude\",\n      join(homedir(), \".local\", \"bin\", \"claude\"),\n    ];\n    for (const p of candidates) {\n      if (existsSync(p)) {\n        _claudeExe = p;\n        return _claudeExe;\n      }\n    }\n  }\n\n  _claudeExe = \"claude\";\n  return _claudeExe;\n}\n\n// ─── Codex executable resolution ──────────────────────────────────────────────\n// Mirrors resolveClaudeExe() exactly, swapped for the `codex` binary. Same\n// rationale: launchd/Task Scheduler strip PATH down to system directories, so\n// an explicit which/where.exe + well-known-path fallback is needed.\n\nlet _codexExe: string | undefined;\n\n// Mirrors clearClaudeExeCache() above — same memoize-then-invalidate-on-\n// spawn-failure rationale, swapped for the `codex` binary.\nexport function clearCodexExeCache(): void {\n  _codexExe = undefined;\n}\n\nexport function resolveCodexExe(): string {\n  if (_codexExe !== undefined) return _codexExe;\n\n  if (isWindows) {\n    try {\n      const found = execFileSync(\"where.exe\", [\"codex\"], {\n        encoding: \"utf-8\",\n        windowsHide: true,\n        timeout: 3000,\n      })\n        .trim()\n        .split(\"\\n\")\n        .map((line) => line.trim())\n        .find(isWindowsExecutablePath);\n      if (found) {\n        _codexExe = found;\n        return _codexExe;\n      }\n    } catch {}\n\n    const candidates = [\n      join(homedir(), \".local\", \"bin\", \"codex.exe\"),\n      join(\n        process.env.LOCALAPPDATA ?? join(homedir(), \"AppData\", \"Local\"),\n        \"Microsoft\",\n        \"WindowsApps\",\n        \"codex.exe\",\n      ),\n    ];\n    for (const p of candidates) {\n      if (existsSync(p)) {\n        _codexExe = p;\n        return _codexExe;\n      }\n    }\n  } else {\n    try {\n      const found = execFileSync(\"/usr/bin/which\", [\"codex\"], {\n        encoding: \"utf-8\",\n        timeout: 3000,\n      })\n        .trim()\n        .split(\"\\n\")[0]\n        .trim();\n      if (found && existsSync(found)) {\n        _codexExe = found;\n        return _codexExe;\n      }\n    } catch {}\n\n    const candidates = [\n      \"/opt/homebrew/bin/codex\",\n      \"/usr/local/bin/codex\",\n      join(homedir(), \".local\", \"bin\", \"codex\"),\n    ];\n    for (const p of candidates) {\n      if (existsSync(p)) {\n        _codexExe = p;\n        return _codexExe;\n      }\n    }\n  }\n\n  _codexExe = \"codex\";\n  return _codexExe;\n}\n\n// ─── Cursor executable resolution ─────────────────────────────────────────────\n// Cursor CLI's published command is `agent` (cursor.com/install). Some\n// installs also ship `cursor-agent`. Same launchd/Task Scheduler PATH\n// problem as the other two resolvers.\n\nlet _cursorExe: string | undefined;\n\nexport function clearCursorExeCache(): void {\n  _cursorExe = undefined;\n}\n\nfunction resolveNamedAgentCommand(command: string): string | null {\n  if (isWindows) {\n    try {\n      const found = execFileSync(\"where.exe\", [command], {\n        encoding: \"utf-8\",\n        windowsHide: true,\n        timeout: 3000,\n      })\n        .trim()\n        .split(\"\\n\")\n        .map((line) => line.trim())\n        .find(isWindowsExecutablePath);\n      if (found) return found;\n    } catch {}\n\n    const candidates = [\n      join(homedir(), \".local\", \"bin\", `${command}.exe`),\n      join(\n        process.env.LOCALAPPDATA ?? join(homedir(), \"AppData\", \"Local\"),\n        \"Microsoft\",\n        \"WindowsApps\",\n        `${command}.exe`,\n      ),\n    ];\n    for (const p of candidates) {\n      if (existsSync(p)) return p;\n    }\n    return null;\n  }\n\n  try {\n    const found = execFileSync(\"/usr/bin/which\", [command], {\n      encoding: \"utf-8\",\n      timeout: 3000,\n    })\n      .trim()\n      .split(\"\\n\")[0]\n      .trim();\n    if (found && existsSync(found)) return found;\n  } catch {}\n\n  const candidates = [\n    `/opt/homebrew/bin/${command}`,\n    `/usr/local/bin/${command}`,\n    join(homedir(), \".local\", \"bin\", command),\n  ];\n  for (const p of candidates) {\n    if (existsSync(p)) return p;\n  }\n  return null;\n}\n\nexport function resolveCursorExe(): string {\n  if (_cursorExe !== undefined) return _cursorExe;\n\n  const found = resolveNamedAgentCommand(\"agent\") ?? resolveNamedAgentCommand(\"cursor-agent\");\n  _cursorExe = found ?? \"agent\";\n  return _cursorExe;\n}\n\n// ─── Is the provider actually installed? ──────────────────────────────────────\n// Neither resolver above can fail. Each exhausts its lookups and then returns\n// the bare command name, which is handed to execvp/CreateProcess to try its own\n// luck against PATH. That fallback is load-bearing — a box whose /usr/bin/which\n// is absent (slim containers) resolves nothing here yet spawns perfectly well —\n// so \"resolution returned a bare name\" is NOT evidence the CLI is missing, and\n// must not be used to answer \"is this provider installed?\".\n//\n// The consequence of having no answer at all: a missing CLI spawns \"fine\" on\n// POSIX (execvp fails inside the forked child), the session exits ~12ms later\n// with code 1 and no output, and every caller reports something other than the\n// one fact that matters. Both provider-availability endpoints were gated on a\n// throw that cannot happen, so they reported a CLI that is not on the machine\n// as installed.\n\nfunction isExecutableFile(path: string): boolean {\n  try {\n    if (!statSync(path).isFile()) return false;\n    accessSync(path, constants.X_OK);\n    return true;\n  } catch {\n    return false;\n  }\n}\n\n/**\n * Where `exe` — a resolver's output — actually lives, or null if nowhere.\n *\n * A value carrying a path separator is checked directly; a bare command name is\n * searched along PATH exactly the way execvp will search it. node-pty inherits\n * the streamer's own environment (`buildSpawnEnv`), so the PATH walked here is\n * the PATH the spawned child gets — which is what makes this predictive of the\n * spawn rather than merely correlated with it.\n */\nexport function locateExecutable(exe: string): string | null {\n  if (/[\\\\/]/.test(exe)) return isExecutableFile(exe) ? exe : null;\n\n  // Windows resolves a bare name through an extension list, and tries the name\n  // as written first — `node.exe` must not be searched for as `node.exe.exe`.\n  // The literal is only tried when it already carries an extension CreateProcess\n  // can launch, which is the same filter the where.exe lookup above applies:\n  // an extension-less shim sitting on PATH is not a launchable command, however\n  // executable its permissions look.\n  const names = isWindows\n    ? [\n        ...(isWindowsExecutablePath(exe) ? [exe] : []),\n        ...[...WINDOWS_EXECUTABLE_EXTENSIONS].map((ext) => `${exe}${ext}`),\n      ]\n    : [exe];\n  for (const dir of (process.env.PATH ?? \"\").split(delimiter)) {\n    if (!dir) continue;\n    for (const name of names) {\n      const candidate = join(dir, name);\n      if (isExecutableFile(candidate)) return candidate;\n    }\n  }\n  return null;\n}\n\n/** Where this provider's CLI lives on this machine, or null if it is absent. */\nexport function locateProviderExe(provider: ProviderName): string | null {\n  const resolved =\n    provider === CODEX_CLI_PROVIDER\n      ? resolveCodexExe()\n      : provider === CURSOR_PROVIDER\n        ? resolveCursorExe()\n        : resolveClaudeExe();\n  const found = locateExecutable(resolved);\n  if (found === null) {\n    // Resolution is memoized for the process lifetime, so a path that has since\n    // been uninstalled would otherwise keep answering \"missing\" until the next\n    // restart — including after the user reinstalls to fix exactly this.\n    if (provider === CODEX_CLI_PROVIDER) clearCodexExeCache();\n    else if (provider === CURSOR_PROVIDER) clearCursorExeCache();\n    else clearClaudeExeCache();\n  }\n  return found;\n}\n\n// ─── execHidden ────────────────────────────────────────────────────────────────\n// Thin wrapper around execFileSync that adds windowsHide: true on Windows so\n// spawned child processes (where.exe, tasklist, wmic, pgrep, git …) don't\n// flash a console window.\n\ntype SyncOptions = Parameters<typeof execFileSync>[2];\n\nexport function execHidden(\n  file: string,\n  args: string[],\n  opts?: SyncOptions & { encoding: \"utf-8\" },\n): string {\n  return execFileSync(file, args, {\n    windowsHide: isWindows,\n    ...opts,\n  }) as string;\n}\n","// The streamer's long-term X25519 identity key.\n//\n// It exists so a client can tell WHICH server answered its pair exchange. Today\n// the QR carries no server key material, so the phone opens the sealed box with\n// whatever `ephemeralPublicKey` came back (src/seal.ts) — a man in the middle\n// answers just as convincingly as the real server. Putting the public half in\n// the QR makes the printed code an out-of-band channel for the server's\n// identity, which is what the Noise `IK` handshake later builds on\n// (specs/end-to-end-encryption/design.md §2.2, §2.3).\n//\n// This module is only the identity half. Nothing here encrypts anything and no\n// handshake uses the key yet. That scoping is deliberate: publishing a public\n// key is additive and cannot break a released client.\n\nimport {\n  createHash,\n  createPrivateKey,\n  createPublicKey,\n  generateKeyPairSync,\n  type KeyObject,\n} from \"crypto\";\nimport { chmodSync, mkdirSync, readFileSync, renameSync, writeFileSync } from \"fs\";\nimport { homedir } from \"os\";\nimport { dirname, join } from \"path\";\nimport { getLogger } from \"./logger\";\n\n/**\n * On-disk format version.\n *\n * Rotation is out of scope, but the version is the difference between rotating\n * later and re-pairing every device: a future file holding a key *set* can be\n * told apart from this one holding a single key, without guessing from shape.\n */\nconst IDENTITY_FILE_VERSION = 1;\n\ninterface IdentityFile {\n  v: number;\n  createdAt: string;\n  key: JsonWebKey;\n}\n\nexport interface ServerIdentity {\n  /** Raw X25519 public key, base64url, 43 chars. Public: the QR, /api/info, logs. */\n  publicKey: string;\n  /** Never leaves the process — not a log line, not a response, not an error message. */\n  privateKey: KeyObject;\n}\n\n/**\n * `~/.threadbase/keys/server-identity.key`.\n *\n * Its own file, not a `server.yaml` key: that file is parsed by single-line\n * regex and users are invited to hand-edit it, which is no place for a private\n * key. The config dir is resolved per call, and inlined rather than imported\n * from auth.ts, matching runtime-store.ts / pty-host/socket.ts /\n * codexGateAnswers.ts — tests redirect it with THREADBASE_CONFIG_DIR.\n */\nexport function serverIdentityKeyPath(): string {\n  const dir = process.env.THREADBASE_CONFIG_DIR ?? join(homedir(), \".threadbase\");\n  return join(dir, \"keys\", \"server-identity.key\");\n}\n\n/**\n * The server identity, generated on first call and stable forever after —\n * across restarts and across API-key rotation.\n *\n * Stability is the whole point. The public half goes into a pair QR, so minting\n * a second key would silently invalidate every device that scanned the first.\n * A file that exists but cannot be read therefore **throws** rather than\n * regenerating: losing this key must be a deliberate act (delete the file), not\n * the recovery path for a bad read.\n */\nexport function loadOrCreateServerIdentity(): ServerIdentity {\n  const path = serverIdentityKeyPath();\n  let raw: string;\n  try {\n    raw = readFileSync(path, \"utf-8\");\n  } catch (err) {\n    if ((err as NodeJS.ErrnoException).code !== \"ENOENT\") throw err;\n    return generateIdentity(path);\n  }\n\n  let privateKey: KeyObject;\n  try {\n    privateKey = createPrivateKey({ key: (JSON.parse(raw) as IdentityFile).key, format: \"jwk\" });\n  } catch {\n    // The caught error is deliberately dropped rather than interpolated: a\n    // JSON.parse failure quotes the offending input, and this file's input is a\n    // private key. The path is enough to act on.\n    throw new Error(\n      `Server identity key at ${path} could not be read. Refusing to generate a new one — ` +\n        \"that would invalidate every paired device. Repair or delete the file deliberately.\",\n    );\n  }\n  return { publicKey: publicKeyOf(privateKey), privateKey };\n}\n\n/** The public half alone, for callers that must never hold the private key. */\nexport function serverIdentityPublicKey(): string {\n  return loadOrCreateServerIdentity().publicKey;\n}\n\n/**\n * The fingerprint a user compares out of band (design.md §2.2): SHA-256 over\n * the raw 32 public-key bytes, truncated to the first 16, printed as 8\n * space-separated groups of 4 lowercase hex characters.\n *\n * Pure function of the base64url string `serverIdentityPublicKey()` returns —\n * decode that, not the JWK or any other encoding, or this hashes different\n * bytes than the phone does and the two fingerprints never match.\n */\nexport function serverIdentityFingerprint(publicKeyBase64url: string): string {\n  const raw = Buffer.from(publicKeyBase64url, \"base64url\");\n  const hex = createHash(\"sha256\").update(raw).digest().subarray(0, 16).toString(\"hex\");\n  return hex.match(/.{4}/g)?.join(\" \") ?? hex;\n}\n\n/** Convenience over the real, on-disk identity key. */\nexport function currentServerIdentityFingerprint(): string {\n  return serverIdentityFingerprint(serverIdentityPublicKey());\n}\n\nfunction generateIdentity(path: string): ServerIdentity {\n  const { privateKey } = generateKeyPairSync(\"x25519\");\n  const file: IdentityFile = {\n    v: IDENTITY_FILE_VERSION,\n    createdAt: new Date().toISOString(),\n    key: privateKey.export({ format: \"jwk\" }),\n  };\n\n  // tmp-then-rename at 0600 — the discipline setConfigValue already uses for\n  // server.yaml (src/auth.ts). writeFileSync's mode only applies when it\n  // creates the file and is masked by the umask, so the chmod is what makes the\n  // permission unconditional.\n  mkdirSync(dirname(path), { recursive: true, mode: 0o700 });\n  const tmp = `${path}.tmp`;\n  writeFileSync(tmp, `${JSON.stringify(file)}\\n`, { encoding: \"utf-8\", mode: 0o600 });\n  chmodSync(tmp, 0o600);\n  renameSync(tmp, path);\n\n  const publicKey = publicKeyOf(privateKey);\n  // The public key is logged on purpose: it is printable by design, and a boot\n  // line is the out-of-band record a user can compare a QR against.\n  getLogger(\"identity\").info(`Generated server identity key ${publicKey}`, {\n    event: \"identity.key_generated\",\n    path,\n  });\n  return { publicKey, privateKey };\n}\n\n/**\n * Derived from the private key rather than read from the file's own `x`, so a\n * file whose public half was edited can never make the server advertise a key\n * it cannot prove possession of.\n */\nfunction publicKeyOf(privateKey: KeyObject): string {\n  const jwk = createPublicKey(privateKey).export({ format: \"jwk\" });\n  // Guards a file holding some other OKP curve (Ed25519 imports fine and its\n  // `x` is the same 43 characters), which would be published as an X25519 key\n  // and fail only later, inside a handshake.\n  if (jwk.crv !== \"X25519\" || typeof jwk.x !== \"string\") {\n    throw new Error(`Server identity key at ${serverIdentityKeyPath()} is not an X25519 key`);\n  }\n  return jwk.x; // JWK OKP `x` is already base64url of the raw 32 bytes\n}\n","import type Database from \"better-sqlite3\";\nimport type { NotificationPrefs } from \"../../schemas/notification-prefs.schema\";\n\n/**\n * Push registration and delivery state (C7).\n *\n * `POST /api/push/register` was a no-op returning `{ ok: true }`. Mobile\n * registered, received success, and nothing was stored — so no notification\n * could ever be delivered, no failure could be observed, and the client had no\n * way to discover that its successful registration meant nothing.\n *\n * This records tokens and what happened to them, which is the prerequisite for\n * every other C7 requirement: token health, last success/failure, retries,\n * revocation confirmation, and a test-notification endpoint all need somewhere\n * to read state from.\n */\n\n/**\n * Consecutive failures after which a token is treated as dead.\n *\n * A provider rejecting a token repeatedly means the app was uninstalled or the\n * token rotated. Retrying forever wastes work and, worse, makes the health\n * report read \"failing\" indefinitely instead of \"this device is gone\".\n */\nexport const FAILURE_STREAK_LIMIT = 5;\n\n/**\n * Token kinds. A device supplies three non-interchangeable types, and\n * conflating them fails only at send time with no signal at registration:\n *\n * - `expo` — Expo relay token, for ordinary push notifications.\n * - `liveactivity_start` — ActivityKit push-to-start token. App-wide, one per\n *   device, long-lived. Starts an activity when none exists.\n * - `liveactivity_update` — ActivityKit per-activity update token, issued by\n *   iOS after an activity starts, scoped to that one activity, short-lived.\n */\nexport const PUSH_TOKEN_KINDS = [\"expo\", \"liveactivity_start\", \"liveactivity_update\"] as const;\n\nexport type PushTokenKind = (typeof PUSH_TOKEN_KINDS)[number];\n\n/**\n * The kind assumed when a client does not send one.\n *\n * tb-mobile is released and cannot be force-updated, so an older client posting\n * `{ token, platform }` must keep working. Every such client is registering an\n * Expo relay token, because that is the only kind that existed then.\n */\nexport const DEFAULT_PUSH_TOKEN_KIND: PushTokenKind = \"expo\";\n\nexport function isPushTokenKind(value: unknown): value is PushTokenKind {\n  return typeof value === \"string\" && (PUSH_TOKEN_KINDS as readonly string[]).includes(value);\n}\n\nexport interface PushTokenRow {\n  token: string;\n  platform: string;\n  device_id: string | null;\n  registered_at: number;\n  last_success_at: number | null;\n  last_failure_at: number | null;\n  last_failure_code: string | null;\n  failure_streak: number;\n  revoked_at: number | null;\n  kind: PushTokenKind;\n  activity_id: string | null;\n  session_id: string | null;\n  expires_at: number | null;\n  stale_date: number | null;\n  started_at: number | null;\n  renewed_at: number | null;\n  /** The id the registering client files this server under; null for older clients. */\n  client_server_id: string | null;\n  /** The app's display language (BCP 47); null for older clients. */\n  locale: string | null;\n  /** JSON `NotificationPrefs`; null = the client never sent any, i.e. everything on. */\n  notification_prefs: string | null;\n}\n\n/**\n * Health as reported to a client. Deliberately omits the token itself — a push\n * token is a delivery credential, and a health endpoint has no reason to echo\n * one back.\n */\nexport interface PushTokenHealth {\n  platform: string;\n  deviceId: string | null;\n  registeredAt: number;\n  lastSuccessAt: number | null;\n  lastFailureAt: number | null;\n  lastFailureCode: string | null;\n  failureStreak: number;\n  revokedAt: number | null;\n  /**\n   * Never delivered vs delivering vs failing vs revoked vs expired. The\n   * distinction the user actually needs: \"not yet\" and \"broken\" look identical\n   * without it.\n   */\n  state: \"never-delivered\" | \"healthy\" | \"failing\" | \"dead\" | \"revoked\" | \"expired\";\n  kind: PushTokenKind;\n  /** Present only for per-activity Live Activity tokens. */\n  activityId: string | null;\n  sessionId: string | null;\n  expiresAt: number | null;\n}\n\nexport function tokenState(row: PushTokenRow, now: number = Date.now()): PushTokenHealth[\"state\"] {\n  if (row.revoked_at != null) return \"revoked\";\n  // Expiry before failure state: a per-activity token that lapsed is not\n  // \"broken\", and reporting it as failing would send the user chasing a\n  // delivery problem that does not exist.\n  if (row.expires_at != null && row.expires_at <= now) return \"expired\";\n  if (row.failure_streak >= FAILURE_STREAK_LIMIT) return \"dead\";\n  if (row.failure_streak > 0) return \"failing\";\n  if (row.last_success_at == null) return \"never-delivered\";\n  return \"healthy\";\n}\n\nexport function toHealth(row: PushTokenRow, now: number = Date.now()): PushTokenHealth {\n  return {\n    platform: row.platform,\n    deviceId: row.device_id,\n    registeredAt: row.registered_at,\n    lastSuccessAt: row.last_success_at,\n    lastFailureAt: row.last_failure_at,\n    lastFailureCode: row.last_failure_code,\n    failureStreak: row.failure_streak,\n    revokedAt: row.revoked_at,\n    state: tokenState(row, now),\n    kind: row.kind,\n    activityId: row.activity_id,\n    sessionId: row.session_id,\n    expiresAt: row.expires_at,\n  };\n}\n\nexport class PushRepository {\n  private upsertStmt: Database.Statement;\n  private getStmt: Database.Statement;\n  private listActiveStmt: Database.Statement;\n  private listAllStmt: Database.Statement;\n  private successStmt: Database.Statement;\n  private failureStmt: Database.Statement;\n  private revokeStmt: Database.Statement;\n  private deleteByTokenStmt: Database.Statement;\n  private deleteTokenForDeviceStmt: Database.Statement;\n  private setPrefsStmt: Database.Statement;\n  private setPrefsAnyDeviceStmt: Database.Statement;\n  private deleteByDeviceStmt: Database.Statement;\n  private claimEventStmt: Database.Statement;\n  private markDeliveredStmt: Database.Statement;\n  private listByKindSessionStmt: Database.Statement;\n  private listByKindStmt: Database.Statement;\n  private listRenewableStmt: Database.Statement;\n  private claimRenewalStmt: Database.Statement;\n  private expireStmt: Database.Statement;\n  private expireSessionActivitiesStmt: Database.Statement;\n\n  constructor(db: Database.Database) {\n    // Re-registering the same token updates rather than duplicating. Without\n    // this, one device accumulates rows and receives the same notification\n    // several times.\n    this.upsertStmt = db.prepare(`\n      INSERT INTO push_tokens (\n        token, platform, device_id, registered_at,\n        kind, activity_id, session_id, expires_at, stale_date, started_at,\n        client_server_id, locale, notification_prefs\n      )\n      VALUES (\n        @token, @platform, @device_id, @registered_at,\n        @kind, @activity_id, @session_id, @expires_at, @stale_date, @started_at,\n        @client_server_id, @locale, @notification_prefs\n      )\n      ON CONFLICT(token) DO UPDATE SET\n        platform = excluded.platform,\n        device_id = COALESCE(excluded.device_id, push_tokens.device_id),\n        -- Take a newer id (the client's id for a server changes when its URL is\n        -- edited), keep the stored one when this registration carries none.\n        client_server_id = COALESCE(excluded.client_server_id, push_tokens.client_server_id),\n        locale = COALESCE(excluded.locale, push_tokens.locale),\n        -- A registration that carries no preferences (an older build, or a\n        -- re-register after a token refresh) must not wipe the ones the user set.\n        notification_prefs = COALESCE(excluded.notification_prefs, push_tokens.notification_prefs),\n        registered_at = excluded.registered_at,\n        kind = excluded.kind,\n        activity_id = COALESCE(excluded.activity_id, push_tokens.activity_id),\n        session_id = COALESCE(excluded.session_id, push_tokens.session_id),\n        expires_at = excluded.expires_at,\n        stale_date = excluded.stale_date,\n        -- Preserve the ORIGINAL start across a re-registration. iOS renders its\n        -- own ticking timer from started_at, so overwriting it with a fresh\n        -- value visibly resets the user's elapsed time to zero.\n        started_at = COALESCE(push_tokens.started_at, excluded.started_at),\n        -- A fresh registration clears prior failure state and any revocation:\n        -- the client is telling us this token is live again. renewed_at clears\n        -- too — this is a new activity generation, so it is renewable again.\n        failure_streak = 0,\n        last_failure_at = NULL,\n        last_failure_code = NULL,\n        revoked_at = NULL,\n        renewed_at = NULL\n    `);\n    this.getStmt = db.prepare(\"SELECT * FROM push_tokens WHERE token = ?\");\n    // Expo relay tokens only. An ActivityKit token posted to Expo's relay is\n    // rejected, so the ordinary-notification fan-out must never see one — this\n    // is the query that keeps the three kinds from being conflated.\n    this.listActiveStmt = db.prepare(`\n      SELECT * FROM push_tokens\n       WHERE revoked_at IS NULL AND failure_streak < ${FAILURE_STREAK_LIMIT}\n         AND kind = 'expo'\n       ORDER BY registered_at ASC\n    `);\n    this.listAllStmt = db.prepare(\"SELECT * FROM push_tokens ORDER BY registered_at ASC\");\n    this.successStmt = db.prepare(`\n      UPDATE push_tokens\n         SET last_success_at = @at, failure_streak = 0,\n             last_failure_code = NULL\n       WHERE token = @token\n    `);\n    this.failureStmt = db.prepare(`\n      UPDATE push_tokens\n         SET last_failure_at = @at, last_failure_code = @code,\n             failure_streak = failure_streak + 1\n       WHERE token = @token\n    `);\n    this.revokeStmt = db.prepare(\"UPDATE push_tokens SET revoked_at = ? WHERE token = ?\");\n    this.deleteByTokenStmt = db.prepare(\"DELETE FROM push_tokens WHERE token = ?\");\n    // Ownership-scoped unregister. `device_id IS NULL` is not a widening:\n    // registrations written before the id was taken from the authenticated\n    // principal carry no device, and without this arm a phone could never\n    // retire the token it registered under the old handler.\n    this.deleteTokenForDeviceStmt = db.prepare(\n      \"DELETE FROM push_tokens WHERE token = @token AND (device_id = @device_id OR device_id IS NULL)\",\n    );\n    this.deleteByDeviceStmt = db.prepare(\"DELETE FROM push_tokens WHERE device_id = ?\");\n    // Same ownership term as the delete above. Deliberately its own statement\n    // rather than a re-register: the upsert clears failure_streak and\n    // revoked_at, so changing a toggle through it would wipe delivery health.\n    this.setPrefsStmt = db.prepare(\n      \"UPDATE push_tokens SET notification_prefs = @prefs WHERE token = @token AND (device_id = @device_id OR device_id IS NULL)\",\n    );\n    this.setPrefsAnyDeviceStmt = db.prepare(\n      \"UPDATE push_tokens SET notification_prefs = @prefs WHERE token = @token\",\n    );\n\n    // Live Activity sends are driven by a session status change, so they select\n    // by (kind, session) rather than scanning every token. Expired rows are\n    // excluded here rather than filtered by the caller: a lapsed per-activity\n    // token is not a delivery target, and APNs rejects it.\n    this.listByKindSessionStmt = db.prepare(`\n      SELECT * FROM push_tokens\n       WHERE kind = @kind AND session_id = @session_id\n         AND revoked_at IS NULL AND failure_streak < ${FAILURE_STREAK_LIMIT}\n         AND (expires_at IS NULL OR expires_at > @now)\n       ORDER BY registered_at ASC\n    `);\n    this.listByKindStmt = db.prepare(`\n      SELECT * FROM push_tokens\n       WHERE kind = @kind\n         AND revoked_at IS NULL AND failure_streak < ${FAILURE_STREAK_LIMIT}\n         AND (expires_at IS NULL OR expires_at > @now)\n       ORDER BY registered_at ASC\n    `);\n    // Renewal candidates. Bounded by the partial index on (stale_date) — only\n    // unrenewed rows with a deadline are ever candidates, so the boot-time\n    // re-arm scan stays proportional to pending renewals.\n    this.listRenewableStmt = db.prepare(`\n      SELECT * FROM push_tokens\n       WHERE kind = 'liveactivity_update'\n         AND stale_date IS NOT NULL AND renewed_at IS NULL\n         AND revoked_at IS NULL AND failure_streak < ${FAILURE_STREAK_LIMIT}\n       ORDER BY stale_date ASC\n    `);\n    // The idempotency gate for renewal. Conditional on renewed_at IS NULL so\n    // the first caller gets changes=1 and any concurrent or post-restart\n    // re-armed timer gets 0 and must not send — the same INSERT-OR-IGNORE\n    // reasoning as claimEvent, applied to an UPDATE.\n    this.claimRenewalStmt = db.prepare(`\n      UPDATE push_tokens SET renewed_at = @at\n       WHERE token = @token AND renewed_at IS NULL\n    `);\n    this.expireStmt = db.prepare(\"UPDATE push_tokens SET expires_at = ? WHERE token = ?\");\n    this.expireSessionActivitiesStmt = db.prepare(`\n      UPDATE push_tokens SET expires_at = @at\n       WHERE session_id = @session_id AND kind = 'liveactivity_update'\n         AND (expires_at IS NULL OR expires_at > @at)\n    `);\n\n    // INSERT OR IGNORE is the dedupe: the first caller for an event id inserts\n    // and gets changes=1, any concurrent or retried caller gets 0 and must not\n    // send. Doing this in SQL rather than a read-then-write avoids the race\n    // where two triggers both observe \"not yet sent\".\n    this.claimEventStmt = db.prepare(`\n      INSERT OR IGNORE INTO push_events (event_id, session_id, created_at)\n      VALUES (@event_id, @session_id, @created_at)\n    `);\n    this.markDeliveredStmt = db.prepare(\n      \"UPDATE push_events SET delivered_at = ? WHERE event_id = ?\",\n    );\n  }\n\n  /**\n   * Register or refresh a token.\n   *\n   * `kind` defaults to Expo so a released client posting `{ token, platform }`\n   * keeps working — tb-mobile cannot be force-updated, and every client\n   * predating Live Activities is registering an Expo relay token.\n   *\n   * Several rows per device is normal and intended: a device runs one activity\n   * per live session, each with its own update token. The token itself is the\n   * primary key, so distinct activities never collide.\n   */\n  register(args: {\n    token: string;\n    platform: string;\n    deviceId?: string | null;\n    kind?: PushTokenKind;\n    activityId?: string | null;\n    sessionId?: string | null;\n    expiresAt?: number | null;\n    staleDate?: number | null;\n    startedAt?: number | null;\n    clientServerId?: string | null;\n    locale?: string | null;\n    notificationPrefs?: NotificationPrefs | null;\n    now?: number;\n  }): void {\n    this.upsertStmt.run({\n      token: args.token,\n      platform: args.platform,\n      device_id: args.deviceId ?? null,\n      registered_at: args.now ?? Date.now(),\n      kind: args.kind ?? DEFAULT_PUSH_TOKEN_KIND,\n      activity_id: args.activityId ?? null,\n      session_id: args.sessionId ?? null,\n      expires_at: args.expiresAt ?? null,\n      stale_date: args.staleDate ?? null,\n      started_at: args.startedAt ?? null,\n      client_server_id: args.clientServerId ?? null,\n      locale: args.locale ?? null,\n      notification_prefs: args.notificationPrefs ? JSON.stringify(args.notificationPrefs) : null,\n    });\n  }\n\n  /**\n   * Store new notification preferences for one token, touching nothing else.\n   *\n   * `deviceId` scopes the write to this device's own tokens (or an unattributed\n   * one), so a `notifications`-holding device cannot mute another's. Pass\n   * `null` for the shared api key, which names no device and may set any token.\n   * Returns whether a row matched.\n   */\n  setPrefs(token: string, prefs: NotificationPrefs, deviceId: string | null): boolean {\n    const json = JSON.stringify(prefs);\n    if (deviceId === null)\n      return this.setPrefsAnyDeviceStmt.run({ token, prefs: json }).changes > 0;\n    return this.setPrefsStmt.run({ token, prefs: json, device_id: deviceId }).changes > 0;\n  }\n\n  get(token: string): PushTokenRow | null {\n    return (this.getStmt.get(token) as PushTokenRow | undefined) ?? null;\n  }\n\n  /**\n   * Expo tokens eligible for delivery — not revoked, not past the failure limit.\n   *\n   * Deliberately Expo-only. ActivityKit tokens go over direct APNs with a\n   * different topic and are rejected by Expo's relay, so the ordinary\n   * notification fan-out must not see them.\n   */\n  listDeliverable(): PushTokenRow[] {\n    return this.listActiveStmt.all() as PushTokenRow[];\n  }\n\n  /** Live-activity tokens for one session, eligible for delivery. */\n  listForSession(kind: PushTokenKind, sessionId: string, now: number = Date.now()): PushTokenRow[] {\n    return this.listByKindSessionStmt.all({\n      kind,\n      session_id: sessionId,\n      now,\n    }) as PushTokenRow[];\n  }\n\n  /**\n   * Every deliverable token of one kind.\n   *\n   * Used for push-to-start, which is app-wide rather than session-scoped: the\n   * activity does not exist yet, so there is no per-activity token to look up.\n   */\n  listByKind(kind: PushTokenKind, now: number = Date.now()): PushTokenRow[] {\n    return this.listByKindStmt.all({ kind, now }) as PushTokenRow[];\n  }\n\n  /** Unrenewed activities with a renewal deadline, soonest first. */\n  listRenewable(): PushTokenRow[] {\n    return this.listRenewableStmt.all() as PushTokenRow[];\n  }\n\n  /**\n   * Claim a row for renewal.\n   *\n   * Returns true exactly once per row. A restart re-arms timers from the\n   * persisted deadline, so the same renewal can be attempted twice; the loser\n   * gets false and must not send. Doing this as a conditional UPDATE rather\n   * than read-then-write avoids the race where both attempts observe\n   * \"not yet renewed\".\n   */\n  claimRenewal(token: string, now: number = Date.now()): boolean {\n    return this.claimRenewalStmt.run({ token, at: now }).changes > 0;\n  }\n\n  /** Mark one token expired, so it stops being a delivery target. */\n  expire(token: string, now: number = Date.now()): void {\n    this.expireStmt.run(now, token);\n  }\n\n  /**\n   * Expire every live activity for a session.\n   *\n   * Called when the session ends. Without this, a per-activity token outlives\n   * its session and a later renewal sweep would resurrect an activity for a\n   * session that is already gone.\n   */\n  expireSessionActivities(sessionId: string, now: number = Date.now()): void {\n    this.expireSessionActivitiesStmt.run({ session_id: sessionId, at: now });\n  }\n\n  /** Every token, including dead and revoked ones, for the health report. */\n  listHealth(now: number = Date.now()): PushTokenHealth[] {\n    return (this.listAllStmt.all() as PushTokenRow[]).map((r) => toHealth(r, now));\n  }\n\n  recordSuccess(token: string, now: number = Date.now()): void {\n    this.successStmt.run({ token, at: now });\n  }\n\n  recordFailure(token: string, code: string, now: number = Date.now()): void {\n    this.failureStmt.run({ token, at: now, code });\n  }\n\n  revoke(token: string, now: number = Date.now()): boolean {\n    return this.revokeStmt.run(now, token).changes > 0;\n  }\n\n  /**\n   * Erase one token.\n   *\n   * Delete, not revoke: a retained row is still a stored delivery credential,\n   * and a client unregistering is asking for the credential to be gone, not for\n   * it to be marked dead and kept for the health report.\n   */\n  deleteToken(token: string): boolean {\n    return this.deleteByTokenStmt.run(token).changes > 0;\n  }\n\n  /**\n   * Erase one token, but only if it belongs to this device (or to no device).\n   *\n   * What keeps a `notifications`-holding device from retiring another device's\n   * token: the token value is the only thing the route is given, so without the\n   * ownership term any caller that learns a token can delete it.\n   */\n  deleteTokenForDevice(token: string, deviceId: string): boolean {\n    return this.deleteTokenForDeviceStmt.run({ token, device_id: deviceId }).changes > 0;\n  }\n\n  /**\n   * Erase every token attributed to a device.\n   *\n   * Cross-database by necessity — devices live in runtime.db and tokens in\n   * cache.db — so this is called from the device routes and the CLI, never\n   * joined in SQL.\n   */\n  deleteForDevice(deviceId: string): number {\n    return this.deleteByDeviceStmt.run(deviceId).changes;\n  }\n\n  /**\n   * Claim an event id for delivery.\n   *\n   * Returns true exactly once per event id. A retry, a reconnect\n   * reconciliation, or two triggers firing for the same underlying event all\n   * get false and must not notify — the user should never be told twice about\n   * one thing.\n   */\n  claimEvent(eventId: string, sessionId: string | null, now: number = Date.now()): boolean {\n    return (\n      this.claimEventStmt.run({ event_id: eventId, session_id: sessionId, created_at: now })\n        .changes > 0\n    );\n  }\n\n  markDelivered(eventId: string, now: number = Date.now()): void {\n    this.markDeliveredStmt.run(now, eventId);\n  }\n}\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","'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          (typeof params.client_max_window_bits === 'number'\n            ? opts.clientMaxWindowBits > params.client_max_window_bits\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\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","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","/**!\r\n * FlexSearch.js v0.8.212 (Bundle/Module)\r\n * Author and Copyright: Thomas Wilkerling\r\n * Licence: Apache-2.0\r\n * Hosted by Nextapps GmbH\r\n * https://github.com/nextapps-de/flexsearch\r\n */\nvar w;function H(a,c,b){const e=typeof b,d=typeof a;if(e!==\"undefined\"){if(d!==\"undefined\"){if(b){if(d===\"function\"&&e===d)return function(k){return a(b(k))};c=a.constructor;if(c===b.constructor){if(c===Array)return b.concat(a);if(c===Map){var f=new Map(b);for(var g of a)f.set(g[0],g[1]);return f}if(c===Set){g=new Set(b);for(f of a.values())g.add(f);return g}}}return a}return b}return d===\"undefined\"?c:a}function aa(a,c){return typeof a===\"undefined\"?c:a}function I(){return Object.create(null)}\nfunction M(a){return typeof a===\"string\"}function ba(a){return typeof a===\"object\"}function ca(a,c){if(M(c))a=a[c];else for(let b=0;a&&b<c.length;b++)a=a[c[b]];return a};const ea=/[^\\p{L}\\p{N}]+/u,fa=/(\\d{3})/g,ha=/(\\D)(\\d{3})/g,ia=/(\\d{3})(\\D)/g,ja=/[\\u0300-\\u036f]/g;function ka(a={}){if(!this||this.constructor!==ka)return new ka(...arguments);if(arguments.length)for(a=0;a<arguments.length;a++)this.assign(arguments[a]);else this.assign(a)}w=ka.prototype;\nw.assign=function(a){this.normalize=H(a.normalize,!0,this.normalize);let c=a.include,b=c||a.exclude||a.split,e;if(b||b===\"\"){if(typeof b===\"object\"&&b.constructor!==RegExp){let d=\"\";e=!c;c||(d+=\"\\\\p{Z}\");b.letter&&(d+=\"\\\\p{L}\");b.number&&(d+=\"\\\\p{N}\",e=!!c);b.symbol&&(d+=\"\\\\p{S}\");b.punctuation&&(d+=\"\\\\p{P}\");b.control&&(d+=\"\\\\p{C}\");if(b=b.char)d+=typeof b===\"object\"?b.join(\"\"):b;try{this.split=new RegExp(\"[\"+(c?\"^\":\"\")+d+\"]+\",\"u\")}catch(f){this.split=/\\s+/}}else this.split=b,e=b===!1||\"a1a\".split(b).length<\n2;this.numeric=H(a.numeric,e)}else{try{this.split=H(this.split,ea)}catch(d){this.split=/\\s+/}this.numeric=H(a.numeric,H(this.numeric,!0))}this.prepare=H(a.prepare,null,this.prepare);this.finalize=H(a.finalize,null,this.finalize);b=a.filter;this.filter=typeof b===\"function\"?b:H(b&&new Set(b),null,this.filter);this.dedupe=H(a.dedupe,!0,this.dedupe);this.matcher=H((b=a.matcher)&&new Map(b),null,this.matcher);this.mapper=H((b=a.mapper)&&new Map(b),null,this.mapper);this.stemmer=H((b=a.stemmer)&&new Map(b),\nnull,this.stemmer);this.replacer=H(a.replacer,null,this.replacer);this.minlength=H(a.minlength,1,this.minlength);this.maxlength=H(a.maxlength,1024,this.maxlength);this.rtl=H(a.rtl,!1,this.rtl);if(this.cache=b=H(a.cache,!0,this.cache))this.F=null,this.L=typeof b===\"number\"?b:2E5,this.B=new Map,this.D=new Map,this.I=this.H=128;this.h=\"\";this.J=null;this.A=\"\";this.K=null;if(this.matcher)for(const d of this.matcher.keys())this.h+=(this.h?\"|\":\"\")+d;if(this.stemmer)for(const d of this.stemmer.keys())this.A+=\n(this.A?\"|\":\"\")+d;return this};w.addStemmer=function(a,c){this.stemmer||(this.stemmer=new Map);this.stemmer.set(a,c);this.A+=(this.A?\"|\":\"\")+a;this.K=null;this.cache&&Q(this);return this};w.addFilter=function(a){typeof a===\"function\"?this.filter=a:(this.filter||(this.filter=new Set),this.filter.add(a));this.cache&&Q(this);return this};\nw.addMapper=function(a,c){if(typeof a===\"object\")return this.addReplacer(a,c);if(a.length>1)return this.addMatcher(a,c);this.mapper||(this.mapper=new Map);this.mapper.set(a,c);this.cache&&Q(this);return this};w.addMatcher=function(a,c){if(typeof a===\"object\")return this.addReplacer(a,c);if(a.length<2&&(this.dedupe||this.mapper))return this.addMapper(a,c);this.matcher||(this.matcher=new Map);this.matcher.set(a,c);this.h+=(this.h?\"|\":\"\")+a;this.J=null;this.cache&&Q(this);return this};\nw.addReplacer=function(a,c){if(typeof a===\"string\")return this.addMatcher(a,c);this.replacer||(this.replacer=[]);this.replacer.push(a,c);this.cache&&Q(this);return this};\nw.encode=function(a,c){if(this.cache&&a.length<=this.H)if(this.F){if(this.B.has(a))return this.B.get(a)}else this.F=setTimeout(Q,50,this);this.normalize&&(typeof this.normalize===\"function\"?a=this.normalize(a):a=ja?a.normalize(\"NFKD\").replace(ja,\"\").toLowerCase():a.toLowerCase());this.prepare&&(a=this.prepare(a));this.numeric&&a.length>3&&(a=a.replace(ha,\"$1 $2\").replace(ia,\"$1 $2\").replace(fa,\"$1 \"));const b=!(this.dedupe||this.mapper||this.filter||this.matcher||this.stemmer||this.replacer);let e=\n[],d=I(),f,g,k=this.split||this.split===\"\"?a.split(this.split):[a];for(let l=0,m,p;l<k.length;l++)if((m=p=k[l])&&!(m.length<this.minlength||m.length>this.maxlength)){if(c){if(d[m])continue;d[m]=1}else{if(f===m)continue;f=m}if(b)e.push(m);else if(!this.filter||(typeof this.filter===\"function\"?this.filter(m):!this.filter.has(m))){if(this.cache&&m.length<=this.I)if(this.F){var h=this.D.get(m);if(h||h===\"\"){h&&e.push(h);continue}}else this.F=setTimeout(Q,50,this);if(this.stemmer){this.K||(this.K=new RegExp(\"(?!^)(\"+\nthis.A+\")$\"));let u;for(;u!==m&&m.length>2;)u=m,m=m.replace(this.K,r=>this.stemmer.get(r))}if(m&&(this.mapper||this.dedupe&&m.length>1)){h=\"\";for(let u=0,r=\"\",t,n;u<m.length;u++)t=m.charAt(u),t===r&&this.dedupe||((n=this.mapper&&this.mapper.get(t))||n===\"\"?n===r&&this.dedupe||!(r=n)||(h+=n):h+=r=t);m=h}this.matcher&&m.length>1&&(this.J||(this.J=new RegExp(\"(\"+this.h+\")\",\"g\")),m=m.replace(this.J,u=>this.matcher.get(u)));if(m&&this.replacer)for(h=0;m&&h<this.replacer.length;h+=2)m=m.replace(this.replacer[h],\nthis.replacer[h+1]);this.cache&&p.length<=this.I&&(this.D.set(p,m),this.D.size>this.L&&(this.D.clear(),this.I=this.I/1.1|0));if(m){if(m!==p)if(c){if(d[m])continue;d[m]=1}else{if(g===m)continue;g=m}e.push(m)}}}this.finalize&&(e=this.finalize(e)||e);this.cache&&a.length<=this.H&&(this.B.set(a,e),this.B.size>this.L&&(this.B.clear(),this.H=this.H/1.1|0));return e};function Q(a){a.F=null;a.B.clear();a.D.clear()};function la(a,c,b){b||(c||typeof a!==\"object\"?typeof c===\"object\"&&(b=c,c=0):b=a);b&&(a=b.query||a,c=b.limit||c);let e=\"\"+(c||0);b&&(e+=(b.offset||0)+!!b.context+!!b.suggest+(b.resolve!==!1)+(b.resolution||this.resolution)+(b.boost||0));a=(\"\"+a).toLowerCase();this.cache||(this.cache=new ma);let d=this.cache.get(a+e);if(!d){const f=b&&b.cache;f&&(b.cache=!1);d=this.search(a,c,b);f&&(b.cache=f);this.cache.set(a+e,d)}return d}function ma(a){this.limit=a&&a!==!0?a:1E3;this.cache=new Map;this.h=\"\"}\nma.prototype.set=function(a,c){this.cache.set(this.h=a,c);this.cache.size>this.limit&&this.cache.delete(this.cache.keys().next().value)};ma.prototype.get=function(a){const c=this.cache.get(a);c&&this.h!==a&&(this.cache.delete(a),this.cache.set(this.h=a,c));return c};ma.prototype.remove=function(a){for(const c of this.cache){const b=c[0];c[1].includes(a)&&this.cache.delete(b)}};ma.prototype.clear=function(){this.cache.clear();this.h=\"\"};const na={normalize:!1,numeric:!1,dedupe:!1};const oa={};const ra=new Map([[\"b\",\"p\"],[\"v\",\"f\"],[\"w\",\"f\"],[\"z\",\"s\"],[\"x\",\"s\"],[\"d\",\"t\"],[\"n\",\"m\"],[\"c\",\"k\"],[\"g\",\"k\"],[\"j\",\"k\"],[\"q\",\"k\"],[\"i\",\"e\"],[\"y\",\"e\"],[\"u\",\"o\"]]);const sa=new Map([[\"ae\",\"a\"],[\"oe\",\"o\"],[\"sh\",\"s\"],[\"kh\",\"k\"],[\"th\",\"t\"],[\"ph\",\"f\"],[\"pf\",\"f\"]]),ta=[/([^aeo])h(.)/g,\"$1$2\",/([aeo])h([^aeo]|$)/g,\"$1$2\",/(.)\\1+/g,\"$1\"];const ua={a:\"\",e:\"\",i:\"\",o:\"\",u:\"\",y:\"\",b:1,f:1,p:1,v:1,c:2,g:2,j:2,k:2,q:2,s:2,x:2,z:2,\"\\u00df\":2,d:3,t:3,l:4,m:5,n:5,r:6};var va={Exact:na,Default:oa,Normalize:oa,LatinBalance:{mapper:ra},LatinAdvanced:{mapper:ra,matcher:sa,replacer:ta},LatinExtra:{mapper:ra,replacer:ta.concat([/(?!^)[aeo]/g,\"\"]),matcher:sa},LatinSoundex:{dedupe:!1,include:{letter:!0},finalize:function(a){for(let b=0;b<a.length;b++){var c=a[b];let e=c.charAt(0),d=ua[e];for(let f=1,g;f<c.length&&(g=c.charAt(f),g===\"h\"||g===\"w\"||!(g=ua[g])||g===d||(e+=g,d=g,e.length!==4));f++);a[b]=e}}},CJK:{split:\"\"},LatinExact:na,LatinDefault:oa,LatinSimple:oa};function wa(a,c,b,e){let d=[];for(let f=0,g;f<a.index.length;f++)if(g=a.index[f],c>=g.length)c-=g.length;else{c=g[e?\"splice\":\"slice\"](c,b);const k=c.length;if(k&&(d=d.length?d.concat(c):c,b-=k,e&&(a.length-=k),!b))break;c=0}return d}\nfunction xa(a){if(!this||this.constructor!==xa)return new xa(a);this.index=a?[a]:[];this.length=a?a.length:0;const c=this;return new Proxy([],{get(b,e){if(e===\"length\")return c.length;if(e===\"push\")return function(d){c.index[c.index.length-1].push(d);c.length++};if(e===\"pop\")return function(){if(c.length)return c.length--,c.index[c.index.length-1].pop()};if(e===\"indexOf\")return function(d){let f=0;for(let g=0,k,h;g<c.index.length;g++){k=c.index[g];h=k.indexOf(d);if(h>=0)return f+h;f+=k.length}return-1};\nif(e===\"includes\")return function(d){for(let f=0;f<c.index.length;f++)if(c.index[f].includes(d))return!0;return!1};if(e===\"slice\")return function(d,f){return wa(c,d||0,f||c.length,!1)};if(e===\"splice\")return function(d,f){return wa(c,d||0,f||c.length,!0)};if(e===\"constructor\")return Array;if(typeof e!==\"symbol\")return(b=c.index[e/2**31|0])&&b[e]},set(b,e,d){b=e/2**31|0;(c.index[b]||(c.index[b]=[]))[e]=d;c.length++;return!0}})}xa.prototype.clear=function(){this.index.length=0};xa.prototype.push=function(){};\nfunction R(a=8){if(!this||this.constructor!==R)return new R(a);this.index=I();this.h=[];this.size=0;a>32?(this.B=Aa,this.A=BigInt(a)):(this.B=Ba,this.A=a)}R.prototype.get=function(a){const c=this.index[this.B(a)];return c&&c.get(a)};R.prototype.set=function(a,c){var b=this.B(a);let e=this.index[b];e?(b=e.size,e.set(a,c),(b-=e.size)&&this.size++):(this.index[b]=e=new Map([[a,c]]),this.h.push(e),this.size++)};\nfunction S(a=8){if(!this||this.constructor!==S)return new S(a);this.index=I();this.h=[];this.size=0;a>32?(this.B=Aa,this.A=BigInt(a)):(this.B=Ba,this.A=a)}S.prototype.add=function(a){var c=this.B(a);let b=this.index[c];b?(c=b.size,b.add(a),(c-=b.size)&&this.size++):(this.index[c]=b=new Set([a]),this.h.push(b),this.size++)};w=R.prototype;w.has=S.prototype.has=function(a){const c=this.index[this.B(a)];return c&&c.has(a)};\nw.delete=S.prototype.delete=function(a){const c=this.index[this.B(a)];c&&c.delete(a)&&this.size--};w.clear=S.prototype.clear=function(){this.index=I();this.h=[];this.size=0};w.values=S.prototype.values=function*(){for(let a=0;a<this.h.length;a++)for(let c of this.h[a].values())yield c};w.keys=S.prototype.keys=function*(){for(let a=0;a<this.h.length;a++)for(let c of this.h[a].keys())yield c};w.entries=S.prototype.entries=function*(){for(let a=0;a<this.h.length;a++)for(let c of this.h[a].entries())yield c};\nfunction Ba(a){let c=2**this.A-1;if(typeof a==\"number\")return a&c;let b=0,e=this.A+1;for(let d=0;d<a.length;d++)b=(b*e^a.charCodeAt(d))&c;return this.A===32?b+2**31:b}function Aa(a){let c=BigInt(2)**this.A-BigInt(1);var b=typeof a;if(b===\"bigint\")return a&c;if(b===\"number\")return BigInt(a)&c;b=BigInt(0);let e=this.A+BigInt(1);for(let d=0;d<a.length;d++)b=(b*e^BigInt(a.charCodeAt(d)))&c;return b};let Ca,Da;\nasync function Ea(a){a=a.data;var c=a.task;const b=a.id;let e=a.args;switch(c){case \"init\":Da=a.options||{};(c=a.factory)?(Function(\"return \"+c)()(self),Ca=new self.FlexSearch.Index(Da),delete self.FlexSearch):Ca=new T(Da);postMessage({id:b});break;default:let d;c===\"export\"&&(e[1]?(e[0]=Da.export,e[2]=0,e[3]=1):e=null);c===\"import\"?e[0]&&(a=await Da.import.call(Ca,e[0]),Ca.import(e[0],a)):((d=e&&Ca[c].apply(Ca,e))&&d.then&&(d=await d),d&&d.await&&(d=await d.await),c===\"search\"&&d.result&&(d=d.result));\npostMessage(c===\"search\"?{id:b,msg:d}:{id:b})}};function Fa(a){Ga.call(a,\"add\");Ga.call(a,\"append\");Ga.call(a,\"search\");Ga.call(a,\"update\");Ga.call(a,\"remove\");Ga.call(a,\"searchCache\")}let Ha,Ia,Ja;function Ka(){Ha=Ja=0}\nfunction Ga(a){this[a+\"Async\"]=function(){const c=arguments;var b=c[c.length-1];let e;typeof b===\"function\"&&(e=b,delete c[c.length-1]);Ha?Ja||(Ja=Date.now()-Ia>=this.priority*this.priority*3):(Ha=setTimeout(Ka,0),Ia=Date.now());if(Ja){const f=this;return new Promise(g=>{setTimeout(function(){g(f[a+\"Async\"].apply(f,c))},0)})}const d=this[a].apply(this,c);b=d.then?d:new Promise(f=>f(d));e&&b.then(e);return b}};let V=0;\nfunction La(a={},c){function b(k){function h(l){l=l.data||l;const m=l.id,p=m&&f.h[m];p&&(p(l.msg),delete f.h[m])}this.worker=k;this.h=I();if(this.worker){d?this.worker.on(\"message\",h):this.worker.onmessage=h;if(a.config)return new Promise(function(l){V>1E9&&(V=0);f.h[++V]=function(){l(f)};f.worker.postMessage({id:V,task:\"init\",factory:e,options:a})});this.priority=a.priority||4;this.encoder=c||null;this.worker.postMessage({task:\"init\",factory:e,options:a});return this}}if(!this||this.constructor!==La)return new La(a);\nlet e=typeof self!==\"undefined\"?self._factory:typeof window!==\"undefined\"?window._factory:null;e&&(e=e.toString());const d=typeof window===\"undefined\",f=this,g=Ma(e,d,a.worker);return g.then?g.then(function(k){return b.call(f,k)}):b.call(this,g)}W(\"add\");W(\"append\");W(\"search\");W(\"update\");W(\"remove\");W(\"clear\");W(\"export\");W(\"import\");La.prototype.searchCache=la;Fa(La.prototype);\nfunction W(a){La.prototype[a]=function(){const c=this,b=[].slice.call(arguments);var e=b[b.length-1];let d;typeof e===\"function\"&&(d=e,b.pop());e=new Promise(function(f){a===\"export\"&&typeof b[0]===\"function\"&&(b[0]=null);V>1E9&&(V=0);c.h[++V]=f;c.worker.postMessage({task:a,id:V,args:b})});return d?(e.then(d),this):e}}\nfunction Ma(a,c,b){return c?typeof module!==\"undefined\"?new(require(\"worker_threads\")[\"Worker\"])(__dirname+\"/worker/node.js\"):import(\"worker_threads\").then(function(worker){return new worker[\"Worker\"](import.meta.dirname+\"/node/node.mjs\")}):a?new window.Worker(URL.createObjectURL(new Blob([\"onmessage=\"+Ea.toString()],{type:\"text/javascript\"}))):new window.Worker(typeof b===\"string\"?b:import.meta.url.replace(\"/worker.js\",\"/worker/worker.js\").replace(\"flexsearch.bundle.module.min.js\",\n\"module/worker/worker.js\").replace(\"flexsearch.bundle.module.min.mjs\",\"module/worker/worker.js\"),{type:\"module\"})};Na.prototype.add=function(a,c,b){ba(a)&&(c=a,a=ca(c,this.key));if(c&&(a||a===0)){if(!b&&this.reg.has(a))return this.update(a,c);for(let k=0,h;k<this.field.length;k++){h=this.B[k];var e=this.index.get(this.field[k]);if(typeof h===\"function\"){var d=h(c);d&&e.add(a,d,b,!0)}else if(d=h.G,!d||d(c))h.constructor===String?h=[\"\"+h]:M(h)&&(h=[h]),Qa(c,h,this.D,0,e,a,h[0],b)}if(this.tag)for(e=0;e<this.A.length;e++){var f=this.A[e];d=this.tag.get(this.F[e]);let k=I();if(typeof f===\"function\"){if(f=f(c),!f)continue}else{var g=\nf.G;if(g&&!g(c))continue;f.constructor===String&&(f=\"\"+f);f=ca(c,f)}if(d&&f){M(f)&&(f=[f]);for(let h=0,l,m;h<f.length;h++)if(l=f[h],!k[l]&&(k[l]=1,(g=d.get(l))?m=g:d.set(l,m=[]),!b||!m.includes(a))){if(m.length===2**31-1){g=new xa(m);if(this.fastupdate)for(let p of this.reg.values())p.includes(m)&&(p[p.indexOf(m)]=g);d.set(l,m=g)}m.push(a);this.fastupdate&&((g=this.reg.get(a))?g.push(m):this.reg.set(a,[m]))}}}if(this.store&&(!b||!this.store.has(a))){let k;if(this.h){k=I();for(let h=0,l;h<this.h.length;h++){l=\nthis.h[h];if((b=l.G)&&!b(c))continue;let m;if(typeof l===\"function\"){m=l(c);if(!m)continue;l=[l.O]}else if(M(l)||l.constructor===String){k[l]=c[l];continue}Ra(c,k,l,0,l[0],m)}}this.store.set(a,k||c)}this.worker&&(this.fastupdate||this.reg.add(a))}return this};function Ra(a,c,b,e,d,f){a=a[d];if(e===b.length-1)c[d]=f||a;else if(a)if(a.constructor===Array)for(c=c[d]=Array(a.length),d=0;d<a.length;d++)Ra(a,c,b,e,d);else c=c[d]||(c[d]=I()),d=b[++e],Ra(a,c,b,e,d)}\nfunction Qa(a,c,b,e,d,f,g,k){if(a=a[g])if(e===c.length-1){if(a.constructor===Array){if(b[e]){for(c=0;c<a.length;c++)d.add(f,a[c],!0,!0);return}a=a.join(\" \")}d.add(f,a,k,!0)}else if(a.constructor===Array)for(g=0;g<a.length;g++)Qa(a,c,b,e,d,f,g,k);else g=c[++e],Qa(a,c,b,e,d,f,g,k)};function Sa(a,c,b,e){if(!a.length)return a;if(a.length===1)return a=a[0],a=b||a.length>c?a.slice(b,b+c):a,e?Ta.call(this,a):a;let d=[];for(let f=0,g,k;f<a.length;f++)if((g=a[f])&&(k=g.length)){if(b){if(b>=k){b-=k;continue}g=g.slice(b,b+c);k=g.length;b=0}k>c&&(g=g.slice(0,c),k=c);if(!d.length&&k>=c)return e?Ta.call(this,g):g;d.push(g);c-=k;if(!c)break}d=d.length>1?[].concat.apply([],d):d[0];return e?Ta.call(this,d):d};function Ua(a,c,b,e){var d=e[0];if(d[0]&&d[0].query)return a[c].apply(a,d);if(!(c!==\"and\"&&c!==\"not\"||a.result.length||a.await||d.suggest))return e.length>1&&(d=e[e.length-1]),(e=d.resolve)?a.await||a.result:a;let f=[],g=0,k=0,h,l,m,p,u;for(c=0;c<e.length;c++)if(d=e[c]){var r=void 0;if(d.constructor===X)r=d.await||d.result;else if(d.then||d.constructor===Array)r=d;else{g=d.limit||0;k=d.offset||0;m=d.suggest;l=d.resolve;h=((p=d.highlight||a.highlight)||d.enrich)&&l;r=d.queue;let t=d.async||r,n=d.index,\nq=d.query;n?a.index||(a.index=n):n=a.index;if(q||d.tag){const x=d.field||d.pluck;x&&(!q||a.query&&!p||(a.query=q,a.field=x,a.highlight=p),n=n.index.get(x));if(r&&(u||a.await)){u=1;let v;const A=a.C.length,D=new Promise(function(F){v=F});(function(F,E){D.h=function(){E.index=null;E.resolve=!1;let B=t?F.searchAsync(E):F.search(E);if(B.then)return B.then(function(z){a.C[A]=z=z.result||z;v(z);return z});B=B.result||B;v(B);return B}})(n,Object.assign({},d));a.C.push(D);f[c]=D;continue}else d.resolve=!1,\nd.index=null,r=t?n.searchAsync(d):n.search(d),d.resolve=l,d.index=n}else if(d.and)r=Va(d,\"and\",n);else if(d.or)r=Va(d,\"or\",n);else if(d.not)r=Va(d,\"not\",n);else if(d.xor)r=Va(d,\"xor\",n);else continue}r.await?(u=1,r=r.await):r.then?(u=1,r=r.then(function(t){return t.result||t})):r=r.result||r;f[c]=r}u&&!a.await&&(a.await=new Promise(function(t){a.return=t}));if(u){const t=Promise.all(f).then(function(n){for(let q=0;q<a.C.length;q++)if(a.C[q]===t){a.C[q]=function(){return b.call(a,n,g,k,h,l,m,p)};break}Wa(a)});\na.C.push(t)}else if(a.await)a.C.push(function(){return b.call(a,f,g,k,h,l,m,p)});else return b.call(a,f,g,k,h,l,m,p);return l?a.await||a.result:a}function Va(a,c,b){a=a[c];const e=a[0]||a;e.index||(e.index=b);b=new X(e);a.length>1&&(b=b[c].apply(b,a.slice(1)));return b};X.prototype.or=function(){return Ua(this,\"or\",Xa,arguments)};function Xa(a,c,b,e,d,f,g){a.length&&(this.result.length&&a.push(this.result),a.length<2?this.result=a[0]:(this.result=Ya(a,c,b,!1,this.h),b=0));d&&(this.await=null);return d?this.resolve(c,b,e,g):this};X.prototype.and=function(){return Ua(this,\"and\",Za,arguments)};function Za(a,c,b,e,d,f,g){if(!f&&!this.result.length)return d?this.result:this;let k;if(a.length)if(this.result.length&&a.unshift(this.result),a.length<2)this.result=a[0];else{let h=0;for(let l=0,m,p;l<a.length;l++)if((m=a[l])&&(p=m.length))h<p&&(h=p);else if(!f){h=0;break}h?(this.result=$a(a,h,c,b,f,this.h,d),k=!0):this.result=[]}else f||(this.result=a);d&&(this.await=null);return d?this.resolve(c,b,e,g,k):this};X.prototype.xor=function(){return Ua(this,\"xor\",ab,arguments)};\nfunction ab(a,c,b,e,d,f,g){if(a.length)if(this.result.length&&a.unshift(this.result),a.length<2)this.result=a[0];else{a:{f=b;var k=this.h;const h=[],l=I();let m=0;for(let p=0,u;p<a.length;p++)if(u=a[p]){m<u.length&&(m=u.length);for(let r=0,t;r<u.length;r++)if(t=u[r])for(let n=0,q;n<t.length;n++)q=t[n],l[q]=l[q]?2:1}for(let p=0,u,r=0;p<m;p++)for(let t=0,n;t<a.length;t++)if(n=a[t])if(u=n[p])for(let q=0,x;q<u.length;q++)if(x=u[q],l[x]===1)if(f)f--;else if(d){if(h.push(x),h.length===c){a=h;break a}}else{const v=\np+(t?k:0);h[v]||(h[v]=[]);h[v].push(x);if(++r===c){a=h;break a}}a=h}this.result=a;k=!0}else f||(this.result=a);d&&(this.await=null);return d?this.resolve(c,b,e,g,k):this};X.prototype.not=function(){return Ua(this,\"not\",bb,arguments)};\nfunction bb(a,c,b,e,d,f,g){if(!f&&!this.result.length)return d?this.result:this;if(a.length&&this.result.length){a:{f=b;var k=[];a=new Set(a.flat().flat());for(let h=0,l,m=0;h<this.result.length;h++)if(l=this.result[h])for(let p=0,u;p<l.length;p++)if(u=l[p],!a.has(u))if(f)f--;else if(d){if(k.push(u),k.length===c){a=k;break a}}else if(k[h]||(k[h]=[]),k[h].push(u),++m===c){a=k;break a}a=k}this.result=a;k=!0}d&&(this.await=null);return d?this.resolve(c,b,e,g,k):this};function cb(a,c,b,e,d){let f,g,k;typeof d===\"string\"?(f=d,d=\"\"):f=d.template;g=f.indexOf(\"$1\");k=f.substring(g+2);g=f.substring(0,g);let h=d&&d.boundary,l=!d||d.clip!==!1,m=d&&d.merge&&k&&g&&new RegExp(k+\" \"+g,\"g\");d=d&&d.ellipsis;var p=0;if(typeof d===\"object\"){var u=d.template;p=u.length-2;d=d.pattern}typeof d!==\"string\"&&(d=d===!1?\"\":\"...\");p&&(d=u.replace(\"$1\",d));u=d.length-p;let r,t;typeof h===\"object\"&&(r=h.before,r===0&&(r=-1),t=h.after,t===0&&(t=-1),h=h.total||9E5);p=new Map;for(let Oa=0,\nda,db,pa;Oa<c.length;Oa++){let qa;if(e)qa=c,pa=e;else{var n=c[Oa];pa=n.field;if(!pa)continue;qa=n.result}db=b.get(pa);da=db.encoder;n=p.get(da);typeof n!==\"string\"&&(n=da.encode(a),p.set(da,n));for(let ya=0;ya<qa.length;ya++){var q=qa[ya].doc;if(!q)continue;q=ca(q,pa);if(!q)continue;var x=q.trim().split(/\\s+/);if(!x.length)continue;q=\"\";var v=[];let za=[];var A=-1,D=-1,F=0;for(var E=0;E<x.length;E++){var B=x[E],z=da.encode(B);z=z.length>1?z.join(\" \"):z[0];let y;if(z&&B){var C=B.length,J=(da.split?\nB.replace(da.split,\"\"):B).length-z.length,G=\"\",N=0;for(var O=0;O<n.length;O++){var P=n[O];if(P){var L=P.length;L+=J<0?0:J;N&&L<=N||(P=z.indexOf(P),P>-1&&(G=(P?B.substring(0,P):\"\")+g+B.substring(P,P+L)+k+(P+L<C?B.substring(P+L):\"\"),N=L,y=!0))}}G&&(h&&(A<0&&(A=q.length+(q?1:0)),D=q.length+(q?1:0)+G.length,F+=C,za.push(v.length),v.push({match:G})),q+=(q?\" \":\"\")+G)}if(!y)B=x[E],q+=(q?\" \":\"\")+B,h&&v.push({text:B});else if(h&&F>=h)break}F=za.length*(f.length-2);if(r||t||h&&q.length-F>h)if(F=h+F-u*2,E=D-\nA,r>0&&(E+=r),t>0&&(E+=t),E<=F)x=r?A-(r>0?r:0):A-((F-E)/2|0),v=t?D+(t>0?t:0):x+F,l||(x>0&&q.charAt(x)!==\" \"&&q.charAt(x-1)!==\" \"&&(x=q.indexOf(\" \",x),x<0&&(x=0)),v<q.length&&q.charAt(v-1)!==\" \"&&q.charAt(v)!==\" \"&&(v=q.lastIndexOf(\" \",v),v<D?v=D:++v)),q=(x?d:\"\")+q.substring(x,v)+(v<q.length?d:\"\");else{D=[];A={};F={};E={};B={};z={};G=J=C=0;for(O=N=1;;){var U=void 0;for(let y=0,K;y<za.length;y++){K=za[y];if(G)if(J!==G){if(E[y+1])continue;K+=G;if(A[K]){C-=u;F[y+1]=1;E[y+1]=1;continue}if(K>=v.length-\n1){if(K>=v.length){E[y+1]=1;K>=x.length&&(F[y+1]=1);continue}C-=u}q=v[K].text;if(L=t&&z[y])if(L>0){if(q.length>L)if(E[y+1]=1,l)q=q.substring(0,L);else continue;(L-=q.length)||(L=-1);z[y]=L}else{E[y+1]=1;continue}if(C+q.length+1<=h)q=\" \"+q,D[y]+=q;else if(l)U=h-C-1,U>0&&(q=\" \"+q.substring(0,U),D[y]+=q),E[y+1]=1;else{E[y+1]=1;continue}}else{if(E[y])continue;K-=J;if(A[K]){C-=u;E[y]=1;F[y]=1;continue}if(K<=0){if(K<0){E[y]=1;F[y]=1;continue}C-=u}q=v[K].text;if(L=r&&B[y])if(L>0){if(q.length>L)if(E[y]=1,\nl)q=q.substring(q.length-L);else continue;(L-=q.length)||(L=-1);B[y]=L}else{E[y]=1;continue}if(C+q.length+1<=h)q+=\" \",D[y]=q+D[y];else if(l)U=q.length+1-(h-C),U>=0&&U<q.length&&(q=q.substring(U)+\" \",D[y]=q+D[y]),E[y]=1;else{E[y]=1;continue}}else{q=v[K].match;r&&(B[y]=r);t&&(z[y]=t);y&&C++;let Pa;K?!y&&u&&(C+=u):(F[y]=1,E[y]=1);K>=x.length-1?Pa=1:K<v.length-1&&v[K+1].match?Pa=1:u&&(C+=u);C-=f.length-2;if(!y||C+q.length<=h)D[y]=q;else{U=N=O=F[y]=0;break}Pa&&(F[y+1]=1,E[y+1]=1)}C+=q.length;U=A[K]=1}if(U)J===\nG?G++:J++;else{J===G?N=0:O=0;if(!N&&!O)break;N?(J++,G=J):G++}}q=\"\";for(let y=0,K;y<D.length;y++)K=(F[y]?y?\" \":\"\":(y&&!d?\" \":\"\")+d)+D[y],q+=K;d&&!F[D.length]&&(q+=d)}m&&(q=q.replace(m,\" \"));qa[ya].highlight=q}if(e)break}return c};function X(a,c){if(!this||this.constructor!==X)return new X(a,c);let b=0,e,d,f,g,k,h;if(a&&a.index){const l=a;c=l.index;b=l.boost||0;if(d=l.query){f=l.field||l.pluck;g=l.highlight;const m=l.resolve;a=l.async||l.queue;l.resolve=!1;l.index=null;a=a?c.searchAsync(l):c.search(l);l.resolve=m;l.index=c;a=a.result||a}else a=[]}if(a&&a.then){const l=this;a=a.then(function(m){l.C[0]=l.result=m.result||m;Wa(l)});e=[a];a=[];k=new Promise(function(m){h=m})}this.index=c||null;this.result=a||[];this.h=b;this.C=\ne||[];this.await=k||null;this.return=h||null;this.highlight=g||null;this.query=d||\"\";this.field=f||\"\"}w=X.prototype;w.limit=function(a){if(this.await){const c=this;this.C.push(function(){return c.limit(a).result})}else if(this.result.length){const c=[];for(let b=0,e;b<this.result.length;b++)if(e=this.result[b])if(e.length<=a){if(c[b]=e,a-=e.length,!a)break}else{c[b]=e.slice(0,a);break}this.result=c}return this};\nw.offset=function(a){if(this.await){const c=this;this.C.push(function(){return c.offset(a).result})}else if(this.result.length){const c=[];for(let b=0,e;b<this.result.length;b++)if(e=this.result[b])e.length<=a?a-=e.length:(c[b]=e.slice(a),a=0);this.result=c}return this};w.boost=function(a){if(this.await){const c=this;this.C.push(function(){return c.boost(a).result})}else this.h+=a;return this};\nfunction Wa(a,c){let b=a.result;var e=a.await;a.await=null;for(let d=0,f;d<a.C.length;d++)if(f=a.C[d])if(typeof f===\"function\")b=f(),a.C[d]=b=b.result||b,d--;else if(f.h)b=f.h(),a.C[d]=b=b.result||b,d--;else if(f.then)return a.await=e;e=a.return;a.C=[];a.return=null;c||e(b);return b}\nw.resolve=function(a,c,b,e,d){let f=this.await?Wa(this,!0):this.result;if(f.then){const g=this;return f.then(function(){return g.resolve(a,c,b,e,d)})}f.length&&(typeof a===\"object\"?(e=a.highlight||this.highlight,b=!!e||a.enrich,c=a.offset,a=a.limit):(e=e||this.highlight,b=!!e||b),f=d?b?Ta.call(this.index,f):f:Sa.call(this.index,f,a||100,c,b));return this.finalize(f,e)};\nw.finalize=function(a,c){if(a.then){const e=this;return a.then(function(d){return e.finalize(d,c)})}c&&a.length&&this.query&&(a=cb(this.query,a,this.index.index,this.field,c));const b=this.return;this.highlight=this.index=this.result=this.C=this.await=this.return=null;this.query=this.field=\"\";b&&b(a);return a};function $a(a,c,b,e,d,f,g){const k=a.length;let h=[],l,m;l=I();for(let p=0,u,r,t,n;p<c;p++)for(let q=0;q<k;q++)if(t=a[q],p<t.length&&(u=t[p]))for(let x=0;x<u.length;x++){r=u[x];(m=l[r])?l[r]++:(m=0,l[r]=1);n=h[m]||(h[m]=[]);if(!g){let v=p+(q||!d?0:f||0);n=n[v]||(n[v]=[])}n.push(r);if(g&&b&&m===k-1&&n.length-e===b)return e?n.slice(e):n}if(a=h.length)if(d)h=h.length>1?Ya(h,b,e,g,f):(h=h[0])&&b&&h.length>b||e?h.slice(e,b+e):h;else{if(a<k)return[];h=h[a-1];if(b||e)if(g){if(h.length>b||e)h=h.slice(e,b+\ne)}else{d=[];for(let p=0,u;p<h.length;p++)if(u=h[p])if(e&&u.length>e)e-=u.length;else{if(b&&u.length>b||e)u=u.slice(e,b+e),b-=u.length,e&&(e-=u.length);d.push(u);if(!b)break}h=d}}return h}\nfunction Ya(a,c,b,e,d){const f=[],g=I();let k;var h=a.length;let l;if(e)for(d=h-1;d>=0;d--){if(l=(e=a[d])&&e.length)for(h=0;h<l;h++)if(k=e[h],!g[k])if(g[k]=1,b)b--;else if(f.push(k),f.length===c)return f}else for(let m=h-1,p,u=0;m>=0;m--){p=a[m];for(let r=0;r<p.length;r++)if(l=(e=p[r])&&e.length)for(let t=0;t<l;t++)if(k=e[t],!g[k])if(g[k]=1,b)b--;else{let n=(r+(m<h-1?d||0:0))/(m+1)|0;(f[n]||(f[n]=[])).push(k);if(++u===c)return f}}return f}\nfunction eb(a,c,b,e,d){const f=I(),g=[];for(let k=0,h;k<c.length;k++){h=c[k];for(let l=0;l<h.length;l++)f[h[l]]=1}if(d)for(let k=0,h;k<a.length;k++){if(h=a[k],f[h])if(e)e--;else if(g.push(h),f[h]=0,b&&--b===0)break}else for(let k=0,h,l;k<a.result.length;k++)for(h=a.result[k],c=0;c<h.length;c++)l=h[c],f[l]&&((g[k]||(g[k]=[])).push(l),f[l]=0);return g};I();Na.prototype.search=function(a,c,b,e){b||(!c&&ba(a)?(b=a,a=\"\"):ba(c)&&(b=c,c=0));let d=[];var f=[];let g;let k,h,l,m,p;let u=0,r=!0,t;if(b){b.constructor===Array&&(b={index:b});a=b.query||a;g=b.pluck;k=b.merge;l=b.boost;p=g||b.field||(p=b.index)&&(p.index?null:p);var n=this.tag&&b.tag;h=b.suggest;r=b.resolve!==!1;m=b.cache;t=r&&this.store&&b.highlight;var q=!!t||r&&this.store&&b.enrich;c=b.limit||c;var x=b.offset||0;c||(c=r?100:0);if(n&&(!this.db||!e)){n.constructor!==Array&&(n=[n]);var v=[];for(let B=\n0,z;B<n.length;B++)if(z=n[B],z.field&&z.tag){var A=z.tag;if(A.constructor===Array)for(var D=0;D<A.length;D++)v.push(z.field,A[D]);else v.push(z.field,A)}else{A=Object.keys(z);for(let C=0,J,G;C<A.length;C++)if(J=A[C],G=z[J],G.constructor===Array)for(D=0;D<G.length;D++)v.push(J,G[D]);else v.push(J,G)}n=v;if(!a){f=[];if(v.length)for(n=0;n<v.length;n+=2){if(this.db){e=this.index.get(v[n]);if(!e)continue;f.push(e=e.db.tag(v[n+1],c,x,q))}else e=fb.call(this,v[n],v[n+1],c,x,q);d.push(r?{field:v[n],tag:v[n+\n1],result:e}:[e])}if(f.length){const B=this;return Promise.all(f).then(function(z){for(let C=0;C<z.length;C++)r?d[C].result=z[C]:d[C]=z[C];return r?d:new X(d.length>1?$a(d,1,0,0,h,l):d[0],B)})}return r?d:new X(d.length>1?$a(d,1,0,0,h,l):d[0],this)}}r||g||!(p=p||this.field)||(M(p)?g=p:(p.constructor===Array&&p.length===1&&(p=p[0]),g=p.field||p.index));p&&p.constructor!==Array&&(p=[p])}p||(p=this.field);let F;v=(this.worker||this.db)&&!e&&[];for(let B=0,z,C,J;B<p.length;B++){C=p[B];if(this.db&&this.tag&&\n!this.B[B])continue;let G;M(C)||(G=C,C=G.field,a=G.query||a,c=aa(G.limit,c),x=aa(G.offset,x),h=aa(G.suggest,h),t=r&&this.store&&aa(G.highlight,t),q=!!t||r&&this.store&&aa(G.enrich,q),m=aa(G.cache,m));if(e)z=e[B];else{A=G||b||{};D=A.enrich;var E=this.index.get(C);n&&(this.db&&(A.tag=n,A.field=p,F=E.db.support_tag_search),!F&&D&&(A.enrich=!1),F||(A.limit=0,A.offset=0));z=m?E.searchCache(a,n&&!F?0:c,A):E.search(a,n&&!F?0:c,A);n&&!F&&(A.limit=c,A.offset=x);D&&(A.enrich=D);if(v){v[B]=z;continue}}J=(z=\nz.result||z)&&z.length;if(n&&J){A=[];D=0;if(this.db&&e){if(!F)for(E=p.length;E<e.length;E++){let N=e[E];if(N&&N.length)D++,A.push(N);else if(!h)return r?d:new X(d,this)}}else for(let N=0,O,P;N<n.length;N+=2){O=this.tag.get(n[N]);if(!O)if(h)continue;else return r?d:new X(d,this);if(P=(O=O&&O.get(n[N+1]))&&O.length)D++,A.push(O);else if(!h)return r?d:new X(d,this)}if(D){z=eb(z,A,c,x,r);J=z.length;if(!J&&!h)return r?z:new X(z,this);D--}}if(J)f[u]=C,d.push(z),u++;else if(p.length===1)return r?d:new X(d,\nthis)}if(v){if(this.db&&n&&n.length&&!F)for(q=0;q<n.length;q+=2){f=this.index.get(n[q]);if(!f)if(h)continue;else return r?d:new X(d,this);v.push(f.db.tag(n[q+1],c,x,!1))}const B=this;return Promise.all(v).then(function(z){b&&(b.resolve=r);z.length&&(z=B.search(a,c,b,z));return z})}if(!u)return r?d:new X(d,this);if(g&&(!q||!this.store))return d=d[0],r?d:new X(d,this);v=[];for(x=0;x<f.length;x++){n=d[x];q&&n.length&&typeof n[0].doc===\"undefined\"&&(this.db?v.push(n=this.index.get(this.field[0]).db.enrich(n)):\nn=Ta.call(this,n));if(g)return r?t?cb(a,n,this.index,g,t):n:new X(n,this);d[x]={field:f[x],result:n}}if(q&&this.db&&v.length){const B=this;return Promise.all(v).then(function(z){for(let C=0;C<z.length;C++)d[C].result=z[C];t&&(d=cb(a,d,B.index,g,t));return k?gb(d):d})}t&&(d=cb(a,d,this.index,g,t));return k?gb(d):d};\nfunction gb(a){const c=[],b=I(),e=I();for(let d=0,f,g,k,h,l,m,p;d<a.length;d++){f=a[d];g=f.field;k=f.result;for(let u=0;u<k.length;u++)if(l=k[u],typeof l!==\"object\"?l={id:h=l}:h=l.id,(m=b[h])?m.push(g):(l.field=b[h]=[g],c.push(l)),p=l.highlight)m=e[h],m||(e[h]=m={},l.highlight=m),m[g]=p}return c}function fb(a,c,b,e,d){a=this.tag.get(a);if(!a)return[];a=a.get(c);if(!a)return[];c=a.length-e;if(c>0){if(b&&c>b||e)a=a.slice(e,e+b);d&&(a=Ta.call(this,a))}return a}\nfunction Ta(a){if(!this||!this.store)return a;if(this.db)return this.index.get(this.field[0]).db.enrich(a);const c=Array(a.length);for(let b=0,e;b<a.length;b++)e=a[b],c[b]={id:e,doc:this.store.get(e)};return c};function Na(a){if(!this||this.constructor!==Na)return new Na(a);const c=a.document||a.doc||a;let b,e;this.B=[];this.field=[];this.D=[];this.key=(b=c.key||c.id)&&hb(b,this.D)||\"id\";(e=a.keystore||0)&&(this.keystore=e);this.fastupdate=!!a.fastupdate;this.reg=!this.fastupdate||a.worker||a.db?e?new S(e):new Set:e?new R(e):new Map;this.h=(b=c.store||null)&&b&&b!==!0&&[];this.store=b?e?new R(e):new Map:null;this.cache=(b=a.cache||null)&&new ma(b);a.cache=!1;this.worker=a.worker||!1;this.priority=a.priority||\n4;this.index=ib.call(this,a,c);this.tag=null;if(b=c.tag)if(typeof b===\"string\"&&(b=[b]),b.length){this.tag=new Map;this.A=[];this.F=[];for(let d=0,f,g;d<b.length;d++){f=b[d];g=f.field||f;if(!g)throw Error(\"The tag field from the document descriptor is undefined.\");f.custom?this.A[d]=f.custom:(this.A[d]=hb(g,this.D),f.filter&&(typeof this.A[d]===\"string\"&&(this.A[d]=new String(this.A[d])),this.A[d].G=f.filter));this.F[d]=g;this.tag.set(g,new Map)}}if(this.worker){this.fastupdate=!1;a=[];for(const d of this.index.values())d.then&&\na.push(d);if(a.length){const d=this;return Promise.all(a).then(function(f){let g=0;for(const k of d.index.entries()){const h=k[0];let l=k[1];l.then&&(l=f[g],d.index.set(h,l),g++)}return d})}}else a.db&&(this.fastupdate=!1,this.mount(a.db))}w=Na.prototype;\nw.mount=function(a){let c=this.field;if(this.tag)for(let f=0,g;f<this.F.length;f++){g=this.F[f];var b=void 0;this.index.set(g,b=new T({},this.reg));c===this.field&&(c=c.slice(0));c.push(g);b.tag=this.tag.get(g)}b=[];const e={db:a.db,type:a.type,fastupdate:a.fastupdate};for(let f=0,g,k;f<c.length;f++){e.field=k=c[f];g=this.index.get(k);const h=new a.constructor(a.id,e);h.id=a.id;b[f]=h.mount(g);g.document=!0;f?g.bypass=!0:g.store=this.store}const d=this;return this.db=Promise.all(b).then(function(){d.db=\n!0})};w.commit=async function(){const a=[];for(const c of this.index.values())a.push(c.commit());await Promise.all(a);this.reg.clear()};w.destroy=function(){const a=[];for(const c of this.index.values())a.push(c.destroy());return Promise.all(a)};\nfunction ib(a,c){const b=new Map;let e=c.index||c.field||c;M(e)&&(e=[e]);for(let f=0,g,k;f<e.length;f++){g=e[f];M(g)||(k=g,g=g.field);k=ba(k)?Object.assign({},a,k):a;if(this.worker){var d=void 0;d=(d=k.encoder)&&d.encode?d:new ka(typeof d===\"string\"?va[d]:d||{});d=new La(k,d);b.set(g,d)}this.worker||b.set(g,new T(k,this.reg));k.custom?this.B[f]=k.custom:(this.B[f]=hb(g,this.D),k.filter&&(typeof this.B[f]===\"string\"&&(this.B[f]=new String(this.B[f])),this.B[f].G=k.filter));this.field[f]=g}if(this.h){a=\nc.store;M(a)&&(a=[a]);for(let f=0,g,k;f<a.length;f++)g=a[f],k=g.field||g,g.custom?(this.h[f]=g.custom,g.custom.O=k):(this.h[f]=hb(k,this.D),g.filter&&(typeof this.h[f]===\"string\"&&(this.h[f]=new String(this.h[f])),this.h[f].G=g.filter))}return b}function hb(a,c){const b=a.split(\":\");let e=0;for(let d=0;d<b.length;d++)a=b[d],a[a.length-1]===\"]\"&&(a=a.substring(0,a.length-2))&&(c[e]=!0),a&&(b[e++]=a);e<b.length&&(b.length=e);return e>1?b:b[0]}w.append=function(a,c){return this.add(a,c,!0)};\nw.update=function(a,c){return this.remove(a).add(a,c)};w.remove=function(a){ba(a)&&(a=ca(a,this.key));for(var c of this.index.values())c.remove(a,!0);if(this.reg.has(a)){if(this.tag&&!this.fastupdate)for(let b of this.tag.values())for(let e of b){c=e[0];const d=e[1],f=d.indexOf(a);f>-1&&(d.length>1?d.splice(f,1):b.delete(c))}this.store&&this.store.delete(a);this.reg.delete(a)}this.cache&&this.cache.remove(a);return this};\nw.clear=function(){const a=[];for(const c of this.index.values()){const b=c.clear();b.then&&a.push(b)}if(this.tag)for(const c of this.tag.values())c.clear();this.store&&this.store.clear();this.cache&&this.cache.clear();return a.length?Promise.all(a):this};w.contain=function(a){return this.db?this.index.get(this.field[0]).db.has(a):this.reg.has(a)};w.cleanup=function(){for(const a of this.index.values())a.cleanup();return this};\nw.get=function(a){return this.db?this.index.get(this.field[0]).db.enrich(a).then(function(c){return c[0]&&c[0].doc||null}):this.store.get(a)||null};w.set=function(a,c){typeof a===\"object\"&&(c=a,a=ca(c,this.key));this.store.set(a,c);return this};w.searchCache=la;w.export=jb;w.import=kb;Fa(Na.prototype);function lb(a,c=0){let b=[],e=[];c&&(c=25E4/c*5E3|0);for(const d of a.entries())e.push(d),e.length===c&&(b.push(e),e=[]);e.length&&b.push(e);return b}function mb(a,c){c||(c=new Map);for(let b=0,e;b<a.length;b++)e=a[b],c.set(e[0],e[1]);return c}function nb(a,c=0){let b=[],e=[];c&&(c=25E4/c*1E3|0);for(const d of a.entries())e.push([d[0],lb(d[1])[0]||[]]),e.length===c&&(b.push(e),e=[]);e.length&&b.push(e);return b}\nfunction ob(a,c){c||(c=new Map);for(let b=0,e,d;b<a.length;b++)e=a[b],d=c.get(e[0]),c.set(e[0],mb(e[1],d));return c}function pb(a){let c=[],b=[];for(const e of a.keys())b.push(e),b.length===25E4&&(c.push(b),b=[]);b.length&&c.push(b);return c}function qb(a,c){c||(c=new Set);for(let b=0;b<a.length;b++)c.add(a[b]);return c}\nfunction rb(a,c,b,e,d,f,g=0){const k=e&&e.constructor===Array;var h=k?e.shift():e;if(!h)return this.export(a,c,d,f+1);if((h=a((c?c+\".\":\"\")+(g+1)+\".\"+b,JSON.stringify(h)))&&h.then){const l=this;return h.then(function(){return rb.call(l,a,c,b,k?e:null,d,f,g+1)})}return rb.call(this,a,c,b,k?e:null,d,f,g+1)}\nfunction jb(a,c,b=0,e=0){if(b<this.field.length){const g=this.field[b];if((c=this.index.get(g).export(a,g,b,e=1))&&c.then){const k=this;return c.then(function(){return k.export(a,g,b+1)})}return this.export(a,g,b+1)}let d,f;switch(e){case 0:d=\"reg\";f=pb(this.reg);c=null;break;case 1:d=\"tag\";f=this.tag&&nb(this.tag,this.reg.size);c=null;break;case 2:d=\"doc\";f=this.store&&lb(this.store);c=null;break;default:return}return rb.call(this,a,c,d,f||null,b,e)}\nfunction kb(a,c){var b=a.split(\".\");b[b.length-1]===\"json\"&&b.pop();const e=b.length>2?b[0]:\"\";b=b.length>2?b[2]:b[1];if(this.worker&&e)return this.index.get(e).import(a);if(c){typeof c===\"string\"&&(c=JSON.parse(c));if(e)return this.index.get(e).import(b,c);switch(b){case \"reg\":this.fastupdate=!1;this.reg=qb(c,this.reg);for(let d=0,f;d<this.field.length;d++)f=this.index.get(this.field[d]),f.fastupdate=!1,f.reg=this.reg;if(this.worker){c=[];for(const d of this.index.values())c.push(d.import(a));return Promise.all(c)}break;\ncase \"tag\":this.tag=ob(c,this.tag);break;case \"doc\":this.store=mb(c,this.store)}}}function sb(a,c){let b=\"\";for(const e of a.entries()){a=e[0];const d=e[1];let f=\"\";for(let g=0,k;g<d.length;g++){k=d[g]||[\"\"];let h=\"\";for(let l=0;l<k.length;l++)h+=(h?\",\":\"\")+(c===\"string\"?'\"'+k[l]+'\"':k[l]);h=\"[\"+h+\"]\";f+=(f?\",\":\"\")+h}f='[\"'+a+'\",['+f+\"]]\";b+=(b?\",\":\"\")+f}return b};T.prototype.remove=function(a,c){const b=this.reg.size&&(this.fastupdate?this.reg.get(a):this.reg.has(a));if(b){if(this.fastupdate)for(let e=0,d,f;e<b.length;e++){if((d=b[e])&&(f=d.length))if(d[f-1]===a)d.pop();else{const g=d.indexOf(a);g>=0&&d.splice(g,1)}}else tb(this.map,a),this.depth&&tb(this.ctx,a);c||this.reg.delete(a)}this.db&&(this.commit_task.push({del:a}),this.M&&ub(this));this.cache&&this.cache.remove(a);return this};\nfunction tb(a,c){let b=0;var e=typeof c===\"undefined\";if(a.constructor===Array)for(let d=0,f,g,k;d<a.length;d++){if((f=a[d])&&f.length){if(e)return 1;g=f.indexOf(c);if(g>=0){if(f.length>1)return f.splice(g,1),1;delete a[d];if(b)return 1;k=1}else{if(k)return 1;b++}}}else for(let d of a.entries())e=d[0],tb(d[1],c)?b++:a.delete(e);return b};const vb={memory:{resolution:1},performance:{resolution:3,fastupdate:!0,context:{depth:1,resolution:1}},match:{tokenize:\"forward\"},score:{resolution:9,context:{depth:2,resolution:3}}};T.prototype.add=function(a,c,b,e){if(c&&(a||a===0)){if(!e&&!b&&this.reg.has(a))return this.update(a,c);e=this.depth;c=this.encoder.encode(c,!e);const l=c.length;if(l){const m=I(),p=I(),u=this.resolution;for(let r=0;r<l;r++){let t=c[this.rtl?l-1-r:r];var d=t.length;if(d&&(e||!p[t])){var f=this.score?this.score(c,t,r,null,0):wb(u,l,r),g=\"\";switch(this.tokenize){case \"tolerant\":Y(this,p,t,f,a,b);if(d>2){for(let n=1,q,x,v,A;n<d-1;n++)q=t.charAt(n),x=t.charAt(n+1),v=t.substring(0,n)+x,A=t.substring(n+\n2),g=v+q+A,Y(this,p,g,f,a,b),g=v+A,Y(this,p,g,f,a,b);Y(this,p,t.substring(0,t.length-1),f,a,b)}break;case \"full\":if(d>2){for(let n=0,q;n<d;n++)for(f=d;f>n;f--){g=t.substring(n,f);q=this.rtl?d-1-n:n;var k=this.score?this.score(c,t,r,g,q):wb(u,l,r,d,q);Y(this,p,g,k,a,b)}break}case \"bidirectional\":case \"reverse\":if(d>1){for(k=d-1;k>0;k--){g=t[this.rtl?d-1-k:k]+g;var h=this.score?this.score(c,t,r,g,k):wb(u,l,r,d,k);Y(this,p,g,h,a,b)}g=\"\"}case \"forward\":if(d>1){for(k=0;k<d;k++)g+=t[this.rtl?d-1-k:k],Y(this,\np,g,f,a,b);break}default:if(Y(this,p,t,f,a,b),e&&l>1&&r<l-1)for(d=this.N,g=t,f=Math.min(e+1,this.rtl?r+1:l-r),k=1;k<f;k++){t=c[this.rtl?l-1-r-k:r+k];h=this.bidirectional&&t>g;const n=this.score?this.score(c,g,r,t,k-1):wb(d+(l/2>d?0:1),l,r,f-1,k-1);Y(this,m,h?g:t,n,a,b,h?t:g)}}}}this.fastupdate||this.reg.add(a)}}this.db&&(this.commit_task.push(b?{ins:a}:{del:a}),this.M&&ub(this));return this};\nfunction Y(a,c,b,e,d,f,g){let k,h;if(!(k=c[b])||g&&!k[g]){g?(c=k||(c[b]=I()),c[g]=1,h=a.ctx,(k=h.get(g))?h=k:h.set(g,h=a.keystore?new R(a.keystore):new Map)):(h=a.map,c[b]=1);(k=h.get(b))?h=k:h.set(b,h=k=[]);if(f)for(let l=0,m;l<k.length;l++)if((m=k[l])&&m.includes(d)){if(l<=e)return;m.splice(m.indexOf(d),1);a.fastupdate&&(c=a.reg.get(d))&&c.splice(c.indexOf(m),1);break}h=h[e]||(h[e]=[]);h.push(d);if(h.length===2**31-1){c=new xa(h);if(a.fastupdate)for(let l of a.reg.values())l.includes(h)&&(l[l.indexOf(h)]=\nc);k[e]=h=c}a.fastupdate&&((e=a.reg.get(d))?e.push(h):a.reg.set(d,[h]))}}function wb(a,c,b,e,d){return b&&a>1?c+(e||0)<=a?b+(d||0):(a-1)/(c+(e||0))*(b+(d||0))+1|0:0};T.prototype.search=function(a,c,b){b||(c||typeof a!==\"object\"?typeof c===\"object\"&&(b=c,c=0):(b=a,a=\"\"));if(b&&b.cache)return b.cache=!1,a=this.searchCache(a,c,b),b.cache=!0,a;let e=[],d,f,g,k=0,h,l,m,p,u;b&&(a=b.query||a,c=b.limit||c,k=b.offset||0,f=b.context,g=b.suggest,u=(h=b.resolve)&&b.enrich,m=b.boost,p=b.resolution,l=this.db&&b.tag);typeof h===\"undefined\"&&(h=this.resolve);f=this.depth&&f!==!1;let r=this.encoder.encode(a,!f);d=r.length;c=c||(h?100:0);if(d===1)return xb.call(this,r[0],\"\",c,\nk,h,u,l);if(d===2&&f&&!g)return xb.call(this,r[1],r[0],c,k,h,u,l);let t=I(),n=0,q;f&&(q=r[0],n=1);p||p===0||(p=q?this.N:this.resolution);if(this.db){if(this.db.search&&(b=this.db.search(this,r,c,k,g,h,u,l),b!==!1))return b;const x=this;return async function(){for(let v,A;n<d;n++){if((A=r[n])&&!t[A]){t[A]=1;v=await yb(x,A,q,0,0,!1,!1);if(v=zb(v,e,g,p)){e=v;break}q&&(g&&v&&e.length||(q=A))}g&&q&&n===d-1&&!e.length&&(p=x.resolution,q=\"\",n=-1,t=I())}return Ab(e,p,c,k,g,m,h)}()}for(let x,v;n<d;n++){if((v=\nr[n])&&!t[v]){t[v]=1;x=yb(this,v,q,0,0,!1,!1);if(x=zb(x,e,g,p)){e=x;break}q&&(g&&x&&e.length||(q=v))}g&&q&&n===d-1&&!e.length&&(p=this.resolution,q=\"\",n=-1,t=I())}return Ab(e,p,c,k,g,m,h)};function Ab(a,c,b,e,d,f,g){let k=a.length,h=a;if(k>1)h=$a(a,c,b,e,d,f,g);else if(k===1)return g?Sa.call(null,a[0],b,e):new X(a[0],this);return g?h:new X(h,this)}\nfunction xb(a,c,b,e,d,f,g){a=yb(this,a,c,b,e,d,f,g);return this.db?a.then(function(k){return d?k||[]:new X(k,this)}):a&&a.length?d?Sa.call(this,a,b,e):new X(a,this):d?[]:new X([],this)}function zb(a,c,b,e){let d=[];if(a&&a.length){if(a.length<=e){c.push(a);return}for(let f=0,g;f<e;f++)if(g=a[f])d[f]=g;if(d.length){c.push(d);return}}if(!b)return d}\nfunction yb(a,c,b,e,d,f,g,k){let h;b&&(h=a.bidirectional&&c>b)&&(h=b,b=c,c=h);if(a.db)return a.db.get(c,b,e,d,f,g,k);a=b?(a=a.ctx.get(b))&&a.get(c):a.map.get(c);return a};function T(a,c){if(!this||this.constructor!==T)return new T(a);if(a){var b=M(a)?a:a.preset;b&&(a=Object.assign({},vb[b],a))}else a={};b=a.context;const e=b===!0?{depth:1}:b||{},d=M(a.encoder)?va[a.encoder]:a.encode||a.encoder||{};this.encoder=d.encode?d:typeof d===\"object\"?new ka(d):{encode:d};this.resolution=a.resolution||9;this.tokenize=b=(b=a.tokenize)&&b!==\"default\"&&b!==\"exact\"&&b||\"strict\";this.depth=b===\"strict\"&&e.depth||0;this.bidirectional=e.bidirectional!==!1;this.fastupdate=!!a.fastupdate;\nthis.score=a.score||null;(b=a.keystore||0)&&(this.keystore=b);this.map=b?new R(b):new Map;this.ctx=b?new R(b):new Map;this.reg=c||(this.fastupdate?b?new R(b):new Map:b?new S(b):new Set);this.N=e.resolution||3;this.rtl=d.rtl||a.rtl||!1;this.cache=(b=a.cache||null)&&new ma(b);this.resolve=a.resolve!==!1;if(b=a.db)this.db=this.mount(b);this.M=a.commit!==!1;this.commit_task=[];this.commit_timer=null;this.priority=a.priority||4}w=T.prototype;\nw.mount=function(a){this.commit_timer&&(clearTimeout(this.commit_timer),this.commit_timer=null);return a.mount(this)};w.commit=function(){this.commit_timer&&(clearTimeout(this.commit_timer),this.commit_timer=null);return this.db.commit(this)};w.destroy=function(){this.commit_timer&&(clearTimeout(this.commit_timer),this.commit_timer=null);return this.db.destroy()};function ub(a){a.commit_timer||(a.commit_timer=setTimeout(function(){a.commit_timer=null;a.db.commit(a)},1))}\nw.clear=function(){this.map.clear();this.ctx.clear();this.reg.clear();this.cache&&this.cache.clear();return this.db?(this.commit_timer&&clearTimeout(this.commit_timer),this.commit_timer=null,this.commit_task=[],this.db.clear()):this};w.append=function(a,c){return this.add(a,c,!0)};w.contain=function(a){return this.db?this.db.has(a):this.reg.has(a)};w.update=function(a,c){const b=this,e=this.remove(a);return e&&e.then?e.then(()=>b.add(a,c)):this.add(a,c)};\nw.cleanup=function(){if(!this.fastupdate)return this;tb(this.map);this.depth&&tb(this.ctx);return this};w.searchCache=la;w.export=function(a,c,b=0,e=0){let d,f;switch(e){case 0:d=\"reg\";f=pb(this.reg);break;case 1:d=\"cfg\";f=null;break;case 2:d=\"map\";f=lb(this.map,this.reg.size);break;case 3:d=\"ctx\";f=nb(this.ctx,this.reg.size);break;default:return}return rb.call(this,a,c,d,f,b,e)};\nw.import=function(a,c){if(c)switch(typeof c===\"string\"&&(c=JSON.parse(c)),a=a.split(\".\"),a[a.length-1]===\"json\"&&a.pop(),a.length===3&&a.shift(),a=a.length>1?a[1]:a[0],a){case \"reg\":this.fastupdate=!1;this.reg=qb(c,this.reg);break;case \"map\":this.map=mb(c,this.map);break;case \"ctx\":this.ctx=ob(c,this.ctx)}};\nw.serialize=function(a=!0){let c=\"\",b=\"\",e=\"\";if(this.reg.size){let f;for(var d of this.reg.keys())f||(f=typeof d),c+=(c?\",\":\"\")+(f===\"string\"?'\"'+d+'\"':d);c=\"index.reg=new Set([\"+c+\"]);\";b=sb(this.map,f);b=\"index.map=new Map([\"+b+\"]);\";for(const g of this.ctx.entries()){d=g[0];let k=sb(g[1],f);k=\"new Map([\"+k+\"])\";k='[\"'+d+'\",'+k+\"]\";e+=(e?\",\":\"\")+k}e=\"index.ctx=new Map([\"+e+\"]);\"}return a?\"function inject(index){\"+c+b+e+\"}\":c+b+e};Fa(T.prototype);const Bb=typeof window!==\"undefined\"&&(window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB),Cb=[\"map\",\"ctx\",\"tag\",\"reg\",\"cfg\"],Db=I();\nfunction Eb(a,c={}){if(!this||this.constructor!==Eb)return new Eb(a,c);typeof a===\"object\"&&(c=a,a=a.name);a||console.info(\"Default storage space was used, because a name was not passed.\");this.id=\"flexsearch\"+(a?\":\"+a.toLowerCase().replace(/[^a-z0-9_\\-]/g,\"\"):\"\");this.field=c.field?c.field.toLowerCase().replace(/[^a-z0-9_\\-]/g,\"\"):\"\";this.type=c.type;this.fastupdate=this.support_tag_search=!1;this.db=null;this.h={}}w=Eb.prototype;w.mount=function(a){if(a.index)return a.mount(this);a.db=this;return this.open()};\nw.open=function(){if(this.db)return this.db;let a=this;navigator.storage&&navigator.storage.persist&&navigator.storage.persist();Db[a.id]||(Db[a.id]=[]);Db[a.id].push(a.field);const c=Bb.open(a.id,1);c.onupgradeneeded=function(){const b=a.db=this.result;for(let e=0,d;e<Cb.length;e++){d=Cb[e];for(let f=0,g;f<Db[a.id].length;f++)g=Db[a.id][f],b.objectStoreNames.contains(d+(d!==\"reg\"?g?\":\"+g:\"\":\"\"))||b.createObjectStore(d+(d!==\"reg\"?g?\":\"+g:\"\":\"\"))}};return a.db=Z(c,function(b){a.db=b;a.db.onversionchange=\nfunction(){a.close()}})};w.close=function(){this.db&&this.db.close();this.db=null};w.destroy=function(){const a=Bb.deleteDatabase(this.id);return Z(a)};w.clear=function(){const a=[];for(let b=0,e;b<Cb.length;b++){e=Cb[b];for(let d=0,f;d<Db[this.id].length;d++)f=Db[this.id][d],a.push(e+(e!==\"reg\"?f?\":\"+f:\"\":\"\"))}const c=this.db.transaction(a,\"readwrite\");for(let b=0;b<a.length;b++)c.objectStore(a[b]).clear();return Z(c)};\nw.get=function(a,c,b=0,e=0,d=!0,f=!1){a=this.db.transaction((c?\"ctx\":\"map\")+(this.field?\":\"+this.field:\"\"),\"readonly\").objectStore((c?\"ctx\":\"map\")+(this.field?\":\"+this.field:\"\")).get(c?c+\":\"+a:a);const g=this;return Z(a).then(function(k){let h=[];if(!k||!k.length)return h;if(d){if(!b&&!e&&k.length===1)return k[0];for(let l=0,m;l<k.length;l++)if((m=k[l])&&m.length){if(e>=m.length){e-=m.length;continue}const p=b?e+Math.min(m.length-e,b):m.length;for(let u=e;u<p;u++)h.push(m[u]);e=0;if(h.length===b)break}return f?\ng.enrich(h):h}return k})};w.tag=function(a,c=0,b=0,e=!1){a=this.db.transaction(\"tag\"+(this.field?\":\"+this.field:\"\"),\"readonly\").objectStore(\"tag\"+(this.field?\":\"+this.field:\"\")).get(a);const d=this;return Z(a).then(function(f){if(!f||!f.length||b>=f.length)return[];if(!c&&!b)return f;f=f.slice(b,b+c);return e?d.enrich(f):f})};\nw.enrich=function(a){typeof a!==\"object\"&&(a=[a]);const c=this.db.transaction(\"reg\",\"readonly\").objectStore(\"reg\"),b=[];for(let e=0;e<a.length;e++)b[e]=Z(c.get(a[e]));return Promise.all(b).then(function(e){for(let d=0;d<e.length;d++)e[d]={id:a[d],doc:e[d]?JSON.parse(e[d]):null};return e})};w.has=function(a){a=this.db.transaction(\"reg\",\"readonly\").objectStore(\"reg\").getKey(a);return Z(a).then(function(c){return!!c})};w.search=null;w.info=function(){};\nw.transaction=function(a,c,b){a+=a!==\"reg\"?this.field?\":\"+this.field:\"\":\"\";let e=this.h[a+\":\"+c];if(e)return b.call(this,e);let d=this.db.transaction(a,c);this.h[a+\":\"+c]=e=d.objectStore(a);const f=b.call(this,e);this.h[a+\":\"+c]=null;return Z(d).finally(function(){return f})};\nw.commit=async function(a){let c=a.commit_task,b=[];a.commit_task=[];for(let e=0,d;e<c.length;e++)d=c[e],d.del&&b.push(d.del);b.length&&await this.remove(b);a.reg.size&&(await this.transaction(\"map\",\"readwrite\",function(e){for(const d of a.map){const f=d[0],g=d[1];g.length&&(e.get(f).onsuccess=function(){let k=this.result;var h;if(k&&k.length){const l=Math.max(k.length,g.length);for(let m=0,p,u;m<l;m++)if((u=g[m])&&u.length){if((p=k[m])&&p.length)for(h=0;h<u.length;h++)p.push(u[h]);else k[m]=u;h=\n1}}else k=g,h=1;h&&e.put(k,f)})}}),await this.transaction(\"ctx\",\"readwrite\",function(e){for(const d of a.ctx){const f=d[0],g=d[1];for(const k of g){const h=k[0],l=k[1];l.length&&(e.get(f+\":\"+h).onsuccess=function(){let m=this.result;var p;if(m&&m.length){const u=Math.max(m.length,l.length);for(let r=0,t,n;r<u;r++)if((n=l[r])&&n.length){if((t=m[r])&&t.length)for(p=0;p<n.length;p++)t.push(n[p]);else m[r]=n;p=1}}else m=l,p=1;p&&e.put(m,f+\":\"+h)})}}}),a.store?await this.transaction(\"reg\",\"readwrite\",\nfunction(e){for(const d of a.store){const f=d[0],g=d[1];e.put(typeof g===\"object\"?JSON.stringify(g):1,f)}}):a.bypass||await this.transaction(\"reg\",\"readwrite\",function(e){for(const d of a.reg.keys())e.put(1,d)}),a.tag&&await this.transaction(\"tag\",\"readwrite\",function(e){for(const d of a.tag){const f=d[0],g=d[1];g.length&&(e.get(f).onsuccess=function(){let k=this.result;k=k&&k.length?k.concat(g):g;e.put(k,f)})}}),a.map.clear(),a.ctx.clear(),a.tag&&a.tag.clear(),a.store&&a.store.clear(),a.document||\na.reg.clear())};function Fb(a,c,b){const e=a.value;let d,f=0;for(let g=0,k;g<e.length;g++){if(k=b?e:e[g]){for(let h=0,l,m;h<c.length;h++)if(m=c[h],l=k.indexOf(m),l>=0)if(d=1,k.length>1)k.splice(l,1);else{e[g]=[];break}f+=k.length}if(b)break}f?d&&a.update(e):a.delete();a.continue()}\nw.remove=function(a){typeof a!==\"object\"&&(a=[a]);return Promise.all([this.transaction(\"map\",\"readwrite\",function(c){c.openCursor().onsuccess=function(){const b=this.result;b&&Fb(b,a)}}),this.transaction(\"ctx\",\"readwrite\",function(c){c.openCursor().onsuccess=function(){const b=this.result;b&&Fb(b,a)}}),this.transaction(\"tag\",\"readwrite\",function(c){c.openCursor().onsuccess=function(){const b=this.result;b&&Fb(b,a,!0)}}),this.transaction(\"reg\",\"readwrite\",function(c){for(let b=0;b<a.length;b++)c.delete(a[b])})])};\nfunction Z(a,c){return new Promise((b,e)=>{a.onsuccess=a.oncomplete=function(){c&&c(this.result);c=null;b(this.result)};a.onerror=a.onblocked=e;a=null})};export default {Index:T,Charset:va,Encoder:ka,Document:Na,Worker:La,Resolver:X,IndexedDB:Eb,Language:{}};\nexport const Index=T;export const Charset=va;export const Encoder=ka;export const Document=Na;export const Worker=La;export const Resolver=X;export const IndexedDB=Eb;export const Language={};","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.splitWhen = exports.flatten = void 0;\nfunction flatten(items) {\n    return items.reduce((collection, item) => [].concat(collection, item), []);\n}\nexports.flatten = flatten;\nfunction splitWhen(items, predicate) {\n    const result = [[]];\n    let groupIndex = 0;\n    for (const item of items) {\n        if (predicate(item)) {\n            groupIndex++;\n            result[groupIndex] = [];\n        }\n        else {\n            result[groupIndex].push(item);\n        }\n    }\n    return result;\n}\nexports.splitWhen = splitWhen;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isEnoentCodeError = void 0;\nfunction isEnoentCodeError(error) {\n    return error.code === 'ENOENT';\n}\nexports.isEnoentCodeError = isEnoentCodeError;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createDirentFromStats = void 0;\nclass DirentFromStats {\n    constructor(name, stats) {\n        this.name = name;\n        this.isBlockDevice = stats.isBlockDevice.bind(stats);\n        this.isCharacterDevice = stats.isCharacterDevice.bind(stats);\n        this.isDirectory = stats.isDirectory.bind(stats);\n        this.isFIFO = stats.isFIFO.bind(stats);\n        this.isFile = stats.isFile.bind(stats);\n        this.isSocket = stats.isSocket.bind(stats);\n        this.isSymbolicLink = stats.isSymbolicLink.bind(stats);\n    }\n}\nfunction createDirentFromStats(name, stats) {\n    return new DirentFromStats(name, stats);\n}\nexports.createDirentFromStats = createDirentFromStats;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.convertPosixPathToPattern = exports.convertWindowsPathToPattern = exports.convertPathToPattern = exports.escapePosixPath = exports.escapeWindowsPath = exports.escape = exports.removeLeadingDotSegment = exports.makeAbsolute = exports.unixify = void 0;\nconst os = require(\"os\");\nconst path = require(\"path\");\nconst IS_WINDOWS_PLATFORM = os.platform() === 'win32';\nconst LEADING_DOT_SEGMENT_CHARACTERS_COUNT = 2; // ./ or .\\\\\n/**\n * All non-escaped special characters.\n * Posix: ()*?[]{|}, !+@ before (, ! at the beginning, \\\\ before non-special characters.\n * Windows: (){}[], !+@ before (, ! at the beginning.\n */\nconst POSIX_UNESCAPED_GLOB_SYMBOLS_RE = /(\\\\?)([()*?[\\]{|}]|^!|[!+@](?=\\()|\\\\(?![!()*+?@[\\]{|}]))/g;\nconst WINDOWS_UNESCAPED_GLOB_SYMBOLS_RE = /(\\\\?)([()[\\]{}]|^!|[!+@](?=\\())/g;\n/**\n * The device path (\\\\.\\ or \\\\?\\).\n * https://learn.microsoft.com/en-us/dotnet/standard/io/file-path-formats#dos-device-paths\n */\nconst DOS_DEVICE_PATH_RE = /^\\\\\\\\([.?])/;\n/**\n * All backslashes except those escaping special characters.\n * Windows: !()+@{}\n * https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file#naming-conventions\n */\nconst WINDOWS_BACKSLASHES_RE = /\\\\(?![!()+@[\\]{}])/g;\n/**\n * Designed to work only with simple paths: `dir\\\\file`.\n */\nfunction unixify(filepath) {\n    return filepath.replace(/\\\\/g, '/');\n}\nexports.unixify = unixify;\nfunction makeAbsolute(cwd, filepath) {\n    return path.resolve(cwd, filepath);\n}\nexports.makeAbsolute = makeAbsolute;\nfunction removeLeadingDotSegment(entry) {\n    // We do not use `startsWith` because this is 10x slower than current implementation for some cases.\n    // eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with\n    if (entry.charAt(0) === '.') {\n        const secondCharactery = entry.charAt(1);\n        if (secondCharactery === '/' || secondCharactery === '\\\\') {\n            return entry.slice(LEADING_DOT_SEGMENT_CHARACTERS_COUNT);\n        }\n    }\n    return entry;\n}\nexports.removeLeadingDotSegment = removeLeadingDotSegment;\nexports.escape = IS_WINDOWS_PLATFORM ? escapeWindowsPath : escapePosixPath;\nfunction escapeWindowsPath(pattern) {\n    return pattern.replace(WINDOWS_UNESCAPED_GLOB_SYMBOLS_RE, '\\\\$2');\n}\nexports.escapeWindowsPath = escapeWindowsPath;\nfunction escapePosixPath(pattern) {\n    return pattern.replace(POSIX_UNESCAPED_GLOB_SYMBOLS_RE, '\\\\$2');\n}\nexports.escapePosixPath = escapePosixPath;\nexports.convertPathToPattern = IS_WINDOWS_PLATFORM ? convertWindowsPathToPattern : convertPosixPathToPattern;\nfunction convertWindowsPathToPattern(filepath) {\n    return escapeWindowsPath(filepath)\n        .replace(DOS_DEVICE_PATH_RE, '//$1')\n        .replace(WINDOWS_BACKSLASHES_RE, '/');\n}\nexports.convertWindowsPathToPattern = convertWindowsPathToPattern;\nfunction convertPosixPathToPattern(filepath) {\n    return escapePosixPath(filepath);\n}\nexports.convertPosixPathToPattern = convertPosixPathToPattern;\n","/*!\n * is-extglob <https://github.com/jonschlinkert/is-extglob>\n *\n * Copyright (c) 2014-2016, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\nmodule.exports = function isExtglob(str) {\n  if (typeof str !== 'string' || str === '') {\n    return false;\n  }\n\n  var match;\n  while ((match = /(\\\\).|([@?!+*]\\(.*\\))/g.exec(str))) {\n    if (match[2]) return true;\n    str = str.slice(match.index + match[0].length);\n  }\n\n  return false;\n};\n","/*!\n * is-glob <https://github.com/jonschlinkert/is-glob>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nvar isExtglob = require('is-extglob');\nvar chars = { '{': '}', '(': ')', '[': ']'};\nvar strictCheck = function(str) {\n  if (str[0] === '!') {\n    return true;\n  }\n  var index = 0;\n  var pipeIndex = -2;\n  var closeSquareIndex = -2;\n  var closeCurlyIndex = -2;\n  var closeParenIndex = -2;\n  var backSlashIndex = -2;\n  while (index < str.length) {\n    if (str[index] === '*') {\n      return true;\n    }\n\n    if (str[index + 1] === '?' && /[\\].+)]/.test(str[index])) {\n      return true;\n    }\n\n    if (closeSquareIndex !== -1 && str[index] === '[' && str[index + 1] !== ']') {\n      if (closeSquareIndex < index) {\n        closeSquareIndex = str.indexOf(']', index);\n      }\n      if (closeSquareIndex > index) {\n        if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) {\n          return true;\n        }\n        backSlashIndex = str.indexOf('\\\\', index);\n        if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) {\n          return true;\n        }\n      }\n    }\n\n    if (closeCurlyIndex !== -1 && str[index] === '{' && str[index + 1] !== '}') {\n      closeCurlyIndex = str.indexOf('}', index);\n      if (closeCurlyIndex > index) {\n        backSlashIndex = str.indexOf('\\\\', index);\n        if (backSlashIndex === -1 || backSlashIndex > closeCurlyIndex) {\n          return true;\n        }\n      }\n    }\n\n    if (closeParenIndex !== -1 && str[index] === '(' && str[index + 1] === '?' && /[:!=]/.test(str[index + 2]) && str[index + 3] !== ')') {\n      closeParenIndex = str.indexOf(')', index);\n      if (closeParenIndex > index) {\n        backSlashIndex = str.indexOf('\\\\', index);\n        if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) {\n          return true;\n        }\n      }\n    }\n\n    if (pipeIndex !== -1 && str[index] === '(' && str[index + 1] !== '|') {\n      if (pipeIndex < index) {\n        pipeIndex = str.indexOf('|', index);\n      }\n      if (pipeIndex !== -1 && str[pipeIndex + 1] !== ')') {\n        closeParenIndex = str.indexOf(')', pipeIndex);\n        if (closeParenIndex > pipeIndex) {\n          backSlashIndex = str.indexOf('\\\\', pipeIndex);\n          if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) {\n            return true;\n          }\n        }\n      }\n    }\n\n    if (str[index] === '\\\\') {\n      var open = str[index + 1];\n      index += 2;\n      var close = chars[open];\n\n      if (close) {\n        var n = str.indexOf(close, index);\n        if (n !== -1) {\n          index = n + 1;\n        }\n      }\n\n      if (str[index] === '!') {\n        return true;\n      }\n    } else {\n      index++;\n    }\n  }\n  return false;\n};\n\nvar relaxedCheck = function(str) {\n  if (str[0] === '!') {\n    return true;\n  }\n  var index = 0;\n  while (index < str.length) {\n    if (/[*?{}()[\\]]/.test(str[index])) {\n      return true;\n    }\n\n    if (str[index] === '\\\\') {\n      var open = str[index + 1];\n      index += 2;\n      var close = chars[open];\n\n      if (close) {\n        var n = str.indexOf(close, index);\n        if (n !== -1) {\n          index = n + 1;\n        }\n      }\n\n      if (str[index] === '!') {\n        return true;\n      }\n    } else {\n      index++;\n    }\n  }\n  return false;\n};\n\nmodule.exports = function isGlob(str, options) {\n  if (typeof str !== 'string' || str === '') {\n    return false;\n  }\n\n  if (isExtglob(str)) {\n    return true;\n  }\n\n  var check = strictCheck;\n\n  // optionally relax check\n  if (options && options.strict === false) {\n    check = relaxedCheck;\n  }\n\n  return check(str);\n};\n","'use strict';\n\nvar isGlob = require('is-glob');\nvar pathPosixDirname = require('path').posix.dirname;\nvar isWin32 = require('os').platform() === 'win32';\n\nvar slash = '/';\nvar backslash = /\\\\/g;\nvar enclosure = /[\\{\\[].*[\\}\\]]$/;\nvar globby = /(^|[^\\\\])([\\{\\[]|\\([^\\)]+$)/;\nvar escaped = /\\\\([\\!\\*\\?\\|\\[\\]\\(\\)\\{\\}])/g;\n\n/**\n * @param {string} str\n * @param {Object} opts\n * @param {boolean} [opts.flipBackslashes=true]\n * @returns {string}\n */\nmodule.exports = function globParent(str, opts) {\n  var options = Object.assign({ flipBackslashes: true }, opts);\n\n  // flip windows path separators\n  if (options.flipBackslashes && isWin32 && str.indexOf(slash) < 0) {\n    str = str.replace(backslash, slash);\n  }\n\n  // special case for strings ending in enclosure containing path separator\n  if (enclosure.test(str)) {\n    str += slash;\n  }\n\n  // preserves full path in case of trailing path separator\n  str += 'a';\n\n  // remove path parts that are globby\n  do {\n    str = pathPosixDirname(str);\n  } while (isGlob(str) || globby.test(str));\n\n  // remove escape chars and return result\n  return str.replace(escaped, '$1');\n};\n","'use strict';\n\nexports.isInteger = num => {\n  if (typeof num === 'number') {\n    return Number.isInteger(num);\n  }\n  if (typeof num === 'string' && num.trim() !== '') {\n    return Number.isInteger(Number(num));\n  }\n  return false;\n};\n\n/**\n * Find a node of the given type\n */\n\nexports.find = (node, type) => node.nodes.find(node => node.type === type);\n\n/**\n * Find a node of the given type\n */\n\nexports.exceedsLimit = (min, max, step = 1, limit) => {\n  if (limit === false) return false;\n  if (!exports.isInteger(min) || !exports.isInteger(max)) return false;\n  return ((Number(max) - Number(min)) / Number(step)) >= limit;\n};\n\n/**\n * Escape the given node with '\\\\' before node.value\n */\n\nexports.escapeNode = (block, n = 0, type) => {\n  const node = block.nodes[n];\n  if (!node) return;\n\n  if ((type && node.type === type) || node.type === 'open' || node.type === 'close') {\n    if (node.escaped !== true) {\n      node.value = '\\\\' + node.value;\n      node.escaped = true;\n    }\n  }\n};\n\n/**\n * Returns true if the given brace node should be enclosed in literal braces\n */\n\nexports.encloseBrace = node => {\n  if (node.type !== 'brace') return false;\n  if ((node.commas >> 0 + node.ranges >> 0) === 0) {\n    node.invalid = true;\n    return true;\n  }\n  return false;\n};\n\n/**\n * Returns true if a brace node is invalid.\n */\n\nexports.isInvalidBrace = block => {\n  if (block.type !== 'brace') return false;\n  if (block.invalid === true || block.dollar) return true;\n  if ((block.commas >> 0 + block.ranges >> 0) === 0) {\n    block.invalid = true;\n    return true;\n  }\n  if (block.open !== true || block.close !== true) {\n    block.invalid = true;\n    return true;\n  }\n  return false;\n};\n\n/**\n * Returns true if a node is an open or close node\n */\n\nexports.isOpenOrClose = node => {\n  if (node.type === 'open' || node.type === 'close') {\n    return true;\n  }\n  return node.open === true || node.close === true;\n};\n\n/**\n * Reduce an array of text nodes.\n */\n\nexports.reduce = nodes => nodes.reduce((acc, node) => {\n  if (node.type === 'text') acc.push(node.value);\n  if (node.type === 'range') node.type = 'text';\n  return acc;\n}, []);\n\n/**\n * Flatten an array\n */\n\nexports.flatten = (...args) => {\n  const result = [];\n\n  const flat = arr => {\n    for (let i = 0; i < arr.length; i++) {\n      const ele = arr[i];\n\n      if (Array.isArray(ele)) {\n        flat(ele);\n        continue;\n      }\n\n      if (ele !== undefined) {\n        result.push(ele);\n      }\n    }\n    return result;\n  };\n\n  flat(args);\n  return result;\n};\n","'use strict';\n\nconst utils = require('./utils');\n\nmodule.exports = (ast, options = {}) => {\n  const stringify = (node, parent = {}) => {\n    const invalidBlock = options.escapeInvalid && utils.isInvalidBrace(parent);\n    const invalidNode = node.invalid === true && options.escapeInvalid === true;\n    let output = '';\n\n    if (node.value) {\n      if ((invalidBlock || invalidNode) && utils.isOpenOrClose(node)) {\n        return '\\\\' + node.value;\n      }\n      return node.value;\n    }\n\n    if (node.value) {\n      return node.value;\n    }\n\n    if (node.nodes) {\n      for (const child of node.nodes) {\n        output += stringify(child);\n      }\n    }\n    return output;\n  };\n\n  return stringify(ast);\n};\n\n","/*!\n * is-number <https://github.com/jonschlinkert/is-number>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nmodule.exports = function(num) {\n  if (typeof num === 'number') {\n    return num - num === 0;\n  }\n  if (typeof num === 'string' && num.trim() !== '') {\n    return Number.isFinite ? Number.isFinite(+num) : isFinite(+num);\n  }\n  return false;\n};\n","/*!\n * to-regex-range <https://github.com/micromatch/to-regex-range>\n *\n * Copyright (c) 2015-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nconst isNumber = require('is-number');\n\nconst toRegexRange = (min, max, options) => {\n  if (isNumber(min) === false) {\n    throw new TypeError('toRegexRange: expected the first argument to be a number');\n  }\n\n  if (max === void 0 || min === max) {\n    return String(min);\n  }\n\n  if (isNumber(max) === false) {\n    throw new TypeError('toRegexRange: expected the second argument to be a number.');\n  }\n\n  let opts = { relaxZeros: true, ...options };\n  if (typeof opts.strictZeros === 'boolean') {\n    opts.relaxZeros = opts.strictZeros === false;\n  }\n\n  let relax = String(opts.relaxZeros);\n  let shorthand = String(opts.shorthand);\n  let capture = String(opts.capture);\n  let wrap = String(opts.wrap);\n  let cacheKey = min + ':' + max + '=' + relax + shorthand + capture + wrap;\n\n  if (toRegexRange.cache.hasOwnProperty(cacheKey)) {\n    return toRegexRange.cache[cacheKey].result;\n  }\n\n  let a = Math.min(min, max);\n  let b = Math.max(min, max);\n\n  if (Math.abs(a - b) === 1) {\n    let result = min + '|' + max;\n    if (opts.capture) {\n      return `(${result})`;\n    }\n    if (opts.wrap === false) {\n      return result;\n    }\n    return `(?:${result})`;\n  }\n\n  let isPadded = hasPadding(min) || hasPadding(max);\n  let state = { min, max, a, b };\n  let positives = [];\n  let negatives = [];\n\n  if (isPadded) {\n    state.isPadded = isPadded;\n    state.maxLen = String(state.max).length;\n  }\n\n  if (a < 0) {\n    let newMin = b < 0 ? Math.abs(b) : 1;\n    negatives = splitToPatterns(newMin, Math.abs(a), state, opts);\n    a = state.a = 0;\n  }\n\n  if (b >= 0) {\n    positives = splitToPatterns(a, b, state, opts);\n  }\n\n  state.negatives = negatives;\n  state.positives = positives;\n  state.result = collatePatterns(negatives, positives, opts);\n\n  if (opts.capture === true) {\n    state.result = `(${state.result})`;\n  } else if (opts.wrap !== false && (positives.length + negatives.length) > 1) {\n    state.result = `(?:${state.result})`;\n  }\n\n  toRegexRange.cache[cacheKey] = state;\n  return state.result;\n};\n\nfunction collatePatterns(neg, pos, options) {\n  let onlyNegative = filterPatterns(neg, pos, '-', false, options) || [];\n  let onlyPositive = filterPatterns(pos, neg, '', false, options) || [];\n  let intersected = filterPatterns(neg, pos, '-?', true, options) || [];\n  let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive);\n  return subpatterns.join('|');\n}\n\nfunction splitToRanges(min, max) {\n  let nines = 1;\n  let zeros = 1;\n\n  let stop = countNines(min, nines);\n  let stops = new Set([max]);\n\n  while (min <= stop && stop <= max) {\n    stops.add(stop);\n    nines += 1;\n    stop = countNines(min, nines);\n  }\n\n  stop = countZeros(max + 1, zeros) - 1;\n\n  while (min < stop && stop <= max) {\n    stops.add(stop);\n    zeros += 1;\n    stop = countZeros(max + 1, zeros) - 1;\n  }\n\n  stops = [...stops];\n  stops.sort(compare);\n  return stops;\n}\n\n/**\n * Convert a range to a regex pattern\n * @param {Number} `start`\n * @param {Number} `stop`\n * @return {String}\n */\n\nfunction rangeToPattern(start, stop, options) {\n  if (start === stop) {\n    return { pattern: start, count: [], digits: 0 };\n  }\n\n  let zipped = zip(start, stop);\n  let digits = zipped.length;\n  let pattern = '';\n  let count = 0;\n\n  for (let i = 0; i < digits; i++) {\n    let [startDigit, stopDigit] = zipped[i];\n\n    if (startDigit === stopDigit) {\n      pattern += startDigit;\n\n    } else if (startDigit !== '0' || stopDigit !== '9') {\n      pattern += toCharacterClass(startDigit, stopDigit, options);\n\n    } else {\n      count++;\n    }\n  }\n\n  if (count) {\n    pattern += options.shorthand === true ? '\\\\d' : '[0-9]';\n  }\n\n  return { pattern, count: [count], digits };\n}\n\nfunction splitToPatterns(min, max, tok, options) {\n  let ranges = splitToRanges(min, max);\n  let tokens = [];\n  let start = min;\n  let prev;\n\n  for (let i = 0; i < ranges.length; i++) {\n    let max = ranges[i];\n    let obj = rangeToPattern(String(start), String(max), options);\n    let zeros = '';\n\n    if (!tok.isPadded && prev && prev.pattern === obj.pattern) {\n      if (prev.count.length > 1) {\n        prev.count.pop();\n      }\n\n      prev.count.push(obj.count[0]);\n      prev.string = prev.pattern + toQuantifier(prev.count);\n      start = max + 1;\n      continue;\n    }\n\n    if (tok.isPadded) {\n      zeros = padZeros(max, tok, options);\n    }\n\n    obj.string = zeros + obj.pattern + toQuantifier(obj.count);\n    tokens.push(obj);\n    start = max + 1;\n    prev = obj;\n  }\n\n  return tokens;\n}\n\nfunction filterPatterns(arr, comparison, prefix, intersection, options) {\n  let result = [];\n\n  for (let ele of arr) {\n    let { string } = ele;\n\n    // only push if _both_ are negative...\n    if (!intersection && !contains(comparison, 'string', string)) {\n      result.push(prefix + string);\n    }\n\n    // or _both_ are positive\n    if (intersection && contains(comparison, 'string', string)) {\n      result.push(prefix + string);\n    }\n  }\n  return result;\n}\n\n/**\n * Zip strings\n */\n\nfunction zip(a, b) {\n  let arr = [];\n  for (let i = 0; i < a.length; i++) arr.push([a[i], b[i]]);\n  return arr;\n}\n\nfunction compare(a, b) {\n  return a > b ? 1 : b > a ? -1 : 0;\n}\n\nfunction contains(arr, key, val) {\n  return arr.some(ele => ele[key] === val);\n}\n\nfunction countNines(min, len) {\n  return Number(String(min).slice(0, -len) + '9'.repeat(len));\n}\n\nfunction countZeros(integer, zeros) {\n  return integer - (integer % Math.pow(10, zeros));\n}\n\nfunction toQuantifier(digits) {\n  let [start = 0, stop = ''] = digits;\n  if (stop || start > 1) {\n    return `{${start + (stop ? ',' + stop : '')}}`;\n  }\n  return '';\n}\n\nfunction toCharacterClass(a, b, options) {\n  return `[${a}${(b - a === 1) ? '' : '-'}${b}]`;\n}\n\nfunction hasPadding(str) {\n  return /^-?(0+)\\d/.test(str);\n}\n\nfunction padZeros(value, tok, options) {\n  if (!tok.isPadded) {\n    return value;\n  }\n\n  let diff = Math.abs(tok.maxLen - String(value).length);\n  let relax = options.relaxZeros !== false;\n\n  switch (diff) {\n    case 0:\n      return '';\n    case 1:\n      return relax ? '0?' : '0';\n    case 2:\n      return relax ? '0{0,2}' : '00';\n    default: {\n      return relax ? `0{0,${diff}}` : `0{${diff}}`;\n    }\n  }\n}\n\n/**\n * Cache\n */\n\ntoRegexRange.cache = {};\ntoRegexRange.clearCache = () => (toRegexRange.cache = {});\n\n/**\n * Expose `toRegexRange`\n */\n\nmodule.exports = toRegexRange;\n","/*!\n * fill-range <https://github.com/jonschlinkert/fill-range>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\n'use strict';\n\nconst util = require('util');\nconst toRegexRange = require('to-regex-range');\n\nconst isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\n\nconst transform = toNumber => {\n  return value => toNumber === true ? Number(value) : String(value);\n};\n\nconst isValidValue = value => {\n  return typeof value === 'number' || (typeof value === 'string' && value !== '');\n};\n\nconst isNumber = num => Number.isInteger(+num);\n\nconst zeros = input => {\n  let value = `${input}`;\n  let index = -1;\n  if (value[0] === '-') value = value.slice(1);\n  if (value === '0') return false;\n  while (value[++index] === '0');\n  return index > 0;\n};\n\nconst stringify = (start, end, options) => {\n  if (typeof start === 'string' || typeof end === 'string') {\n    return true;\n  }\n  return options.stringify === true;\n};\n\nconst pad = (input, maxLength, toNumber) => {\n  if (maxLength > 0) {\n    let dash = input[0] === '-' ? '-' : '';\n    if (dash) input = input.slice(1);\n    input = (dash + input.padStart(dash ? maxLength - 1 : maxLength, '0'));\n  }\n  if (toNumber === false) {\n    return String(input);\n  }\n  return input;\n};\n\nconst toMaxLen = (input, maxLength) => {\n  let negative = input[0] === '-' ? '-' : '';\n  if (negative) {\n    input = input.slice(1);\n    maxLength--;\n  }\n  while (input.length < maxLength) input = '0' + input;\n  return negative ? ('-' + input) : input;\n};\n\nconst toSequence = (parts, options, maxLen) => {\n  parts.negatives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\n  parts.positives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\n\n  let prefix = options.capture ? '' : '?:';\n  let positives = '';\n  let negatives = '';\n  let result;\n\n  if (parts.positives.length) {\n    positives = parts.positives.map(v => toMaxLen(String(v), maxLen)).join('|');\n  }\n\n  if (parts.negatives.length) {\n    negatives = `-(${prefix}${parts.negatives.map(v => toMaxLen(String(v), maxLen)).join('|')})`;\n  }\n\n  if (positives && negatives) {\n    result = `${positives}|${negatives}`;\n  } else {\n    result = positives || negatives;\n  }\n\n  if (options.wrap) {\n    return `(${prefix}${result})`;\n  }\n\n  return result;\n};\n\nconst toRange = (a, b, isNumbers, options) => {\n  if (isNumbers) {\n    return toRegexRange(a, b, { wrap: false, ...options });\n  }\n\n  let start = String.fromCharCode(a);\n  if (a === b) return start;\n\n  let stop = String.fromCharCode(b);\n  return `[${start}-${stop}]`;\n};\n\nconst toRegex = (start, end, options) => {\n  if (Array.isArray(start)) {\n    let wrap = options.wrap === true;\n    let prefix = options.capture ? '' : '?:';\n    return wrap ? `(${prefix}${start.join('|')})` : start.join('|');\n  }\n  return toRegexRange(start, end, options);\n};\n\nconst rangeError = (...args) => {\n  return new RangeError('Invalid range arguments: ' + util.inspect(...args));\n};\n\nconst invalidRange = (start, end, options) => {\n  if (options.strictRanges === true) throw rangeError([start, end]);\n  return [];\n};\n\nconst invalidStep = (step, options) => {\n  if (options.strictRanges === true) {\n    throw new TypeError(`Expected step \"${step}\" to be a number`);\n  }\n  return [];\n};\n\nconst fillNumbers = (start, end, step = 1, options = {}) => {\n  let a = Number(start);\n  let b = Number(end);\n\n  if (!Number.isInteger(a) || !Number.isInteger(b)) {\n    if (options.strictRanges === true) throw rangeError([start, end]);\n    return [];\n  }\n\n  // fix negative zero\n  if (a === 0) a = 0;\n  if (b === 0) b = 0;\n\n  let descending = a > b;\n  let startString = String(start);\n  let endString = String(end);\n  let stepString = String(step);\n  step = Math.max(Math.abs(step), 1);\n\n  let padded = zeros(startString) || zeros(endString) || zeros(stepString);\n  let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0;\n  let toNumber = padded === false && stringify(start, end, options) === false;\n  let format = options.transform || transform(toNumber);\n\n  if (options.toRegex && step === 1) {\n    return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options);\n  }\n\n  let parts = { negatives: [], positives: [] };\n  let push = num => parts[num < 0 ? 'negatives' : 'positives'].push(Math.abs(num));\n  let range = [];\n  let index = 0;\n\n  while (descending ? a >= b : a <= b) {\n    if (options.toRegex === true && step > 1) {\n      push(a);\n    } else {\n      range.push(pad(format(a, index), maxLen, toNumber));\n    }\n    a = descending ? a - step : a + step;\n    index++;\n  }\n\n  if (options.toRegex === true) {\n    return step > 1\n      ? toSequence(parts, options, maxLen)\n      : toRegex(range, null, { wrap: false, ...options });\n  }\n\n  return range;\n};\n\nconst fillLetters = (start, end, step = 1, options = {}) => {\n  if ((!isNumber(start) && start.length > 1) || (!isNumber(end) && end.length > 1)) {\n    return invalidRange(start, end, options);\n  }\n\n  let format = options.transform || (val => String.fromCharCode(val));\n  let a = `${start}`.charCodeAt(0);\n  let b = `${end}`.charCodeAt(0);\n\n  let descending = a > b;\n  let min = Math.min(a, b);\n  let max = Math.max(a, b);\n\n  if (options.toRegex && step === 1) {\n    return toRange(min, max, false, options);\n  }\n\n  let range = [];\n  let index = 0;\n\n  while (descending ? a >= b : a <= b) {\n    range.push(format(a, index));\n    a = descending ? a - step : a + step;\n    index++;\n  }\n\n  if (options.toRegex === true) {\n    return toRegex(range, null, { wrap: false, options });\n  }\n\n  return range;\n};\n\nconst fill = (start, end, step, options = {}) => {\n  if (end == null && isValidValue(start)) {\n    return [start];\n  }\n\n  if (!isValidValue(start) || !isValidValue(end)) {\n    return invalidRange(start, end, options);\n  }\n\n  if (typeof step === 'function') {\n    return fill(start, end, 1, { transform: step });\n  }\n\n  if (isObject(step)) {\n    return fill(start, end, 0, step);\n  }\n\n  let opts = { ...options };\n  if (opts.capture === true) opts.wrap = true;\n  step = step || opts.step || 1;\n\n  if (!isNumber(step)) {\n    if (step != null && !isObject(step)) return invalidStep(step, opts);\n    return fill(start, end, 1, step);\n  }\n\n  if (isNumber(start) && isNumber(end)) {\n    return fillNumbers(start, end, step, opts);\n  }\n\n  return fillLetters(start, end, Math.max(Math.abs(step), 1), opts);\n};\n\nmodule.exports = fill;\n","'use strict';\n\nconst fill = require('fill-range');\nconst utils = require('./utils');\n\nconst compile = (ast, options = {}) => {\n  const walk = (node, parent = {}) => {\n    const invalidBlock = utils.isInvalidBrace(parent);\n    const invalidNode = node.invalid === true && options.escapeInvalid === true;\n    const invalid = invalidBlock === true || invalidNode === true;\n    const prefix = options.escapeInvalid === true ? '\\\\' : '';\n    let output = '';\n\n    if (node.isOpen === true) {\n      return prefix + node.value;\n    }\n\n    if (node.isClose === true) {\n      console.log('node.isClose', prefix, node.value);\n      return prefix + node.value;\n    }\n\n    if (node.type === 'open') {\n      return invalid ? prefix + node.value : '(';\n    }\n\n    if (node.type === 'close') {\n      return invalid ? prefix + node.value : ')';\n    }\n\n    if (node.type === 'comma') {\n      return node.prev.type === 'comma' ? '' : invalid ? node.value : '|';\n    }\n\n    if (node.value) {\n      return node.value;\n    }\n\n    if (node.nodes && node.ranges > 0) {\n      const args = utils.reduce(node.nodes);\n      const range = fill(...args, { ...options, wrap: false, toRegex: true, strictZeros: true });\n\n      if (range.length !== 0) {\n        return args.length > 1 && range.length > 1 ? `(${range})` : range;\n      }\n    }\n\n    if (node.nodes) {\n      for (const child of node.nodes) {\n        output += walk(child, node);\n      }\n    }\n\n    return output;\n  };\n\n  return walk(ast);\n};\n\nmodule.exports = compile;\n","'use strict';\n\nconst fill = require('fill-range');\nconst stringify = require('./stringify');\nconst utils = require('./utils');\n\nconst append = (queue = '', stash = '', enclose = false) => {\n  const result = [];\n\n  queue = [].concat(queue);\n  stash = [].concat(stash);\n\n  if (!stash.length) return queue;\n  if (!queue.length) {\n    return enclose ? utils.flatten(stash).map(ele => `{${ele}}`) : stash;\n  }\n\n  for (const item of queue) {\n    if (Array.isArray(item)) {\n      for (const value of item) {\n        result.push(append(value, stash, enclose));\n      }\n    } else {\n      for (let ele of stash) {\n        if (enclose === true && typeof ele === 'string') ele = `{${ele}}`;\n        result.push(Array.isArray(ele) ? append(item, ele, enclose) : item + ele);\n      }\n    }\n  }\n  return utils.flatten(result);\n};\n\nconst expand = (ast, options = {}) => {\n  const rangeLimit = options.rangeLimit === undefined ? 1000 : options.rangeLimit;\n\n  const walk = (node, parent = {}) => {\n    node.queue = [];\n\n    let p = parent;\n    let q = parent.queue;\n\n    while (p.type !== 'brace' && p.type !== 'root' && p.parent) {\n      p = p.parent;\n      q = p.queue;\n    }\n\n    if (node.invalid || node.dollar) {\n      q.push(append(q.pop(), stringify(node, options)));\n      return;\n    }\n\n    if (node.type === 'brace' && node.invalid !== true && node.nodes.length === 2) {\n      q.push(append(q.pop(), ['{}']));\n      return;\n    }\n\n    if (node.nodes && node.ranges > 0) {\n      const args = utils.reduce(node.nodes);\n\n      if (utils.exceedsLimit(...args, options.step, rangeLimit)) {\n        throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.');\n      }\n\n      let range = fill(...args, options);\n      if (range.length === 0) {\n        range = stringify(node, options);\n      }\n\n      q.push(append(q.pop(), range));\n      node.nodes = [];\n      return;\n    }\n\n    const enclose = utils.encloseBrace(node);\n    let queue = node.queue;\n    let block = node;\n\n    while (block.type !== 'brace' && block.type !== 'root' && block.parent) {\n      block = block.parent;\n      queue = block.queue;\n    }\n\n    for (let i = 0; i < node.nodes.length; i++) {\n      const child = node.nodes[i];\n\n      if (child.type === 'comma' && node.type === 'brace') {\n        if (i === 1) queue.push('');\n        queue.push('');\n        continue;\n      }\n\n      if (child.type === 'close') {\n        q.push(append(q.pop(), queue, enclose));\n        continue;\n      }\n\n      if (child.value && child.type !== 'open') {\n        queue.push(append(queue.pop(), child.value));\n        continue;\n      }\n\n      if (child.nodes) {\n        walk(child, node);\n      }\n    }\n\n    return queue;\n  };\n\n  return utils.flatten(walk(ast));\n};\n\nmodule.exports = expand;\n","'use strict';\n\nmodule.exports = {\n  MAX_LENGTH: 10000,\n\n  // Digits\n  CHAR_0: '0', /* 0 */\n  CHAR_9: '9', /* 9 */\n\n  // Alphabet chars.\n  CHAR_UPPERCASE_A: 'A', /* A */\n  CHAR_LOWERCASE_A: 'a', /* a */\n  CHAR_UPPERCASE_Z: 'Z', /* Z */\n  CHAR_LOWERCASE_Z: 'z', /* z */\n\n  CHAR_LEFT_PARENTHESES: '(', /* ( */\n  CHAR_RIGHT_PARENTHESES: ')', /* ) */\n\n  CHAR_ASTERISK: '*', /* * */\n\n  // Non-alphabetic chars.\n  CHAR_AMPERSAND: '&', /* & */\n  CHAR_AT: '@', /* @ */\n  CHAR_BACKSLASH: '\\\\', /* \\ */\n  CHAR_BACKTICK: '`', /* ` */\n  CHAR_CARRIAGE_RETURN: '\\r', /* \\r */\n  CHAR_CIRCUMFLEX_ACCENT: '^', /* ^ */\n  CHAR_COLON: ':', /* : */\n  CHAR_COMMA: ',', /* , */\n  CHAR_DOLLAR: '$', /* . */\n  CHAR_DOT: '.', /* . */\n  CHAR_DOUBLE_QUOTE: '\"', /* \" */\n  CHAR_EQUAL: '=', /* = */\n  CHAR_EXCLAMATION_MARK: '!', /* ! */\n  CHAR_FORM_FEED: '\\f', /* \\f */\n  CHAR_FORWARD_SLASH: '/', /* / */\n  CHAR_HASH: '#', /* # */\n  CHAR_HYPHEN_MINUS: '-', /* - */\n  CHAR_LEFT_ANGLE_BRACKET: '<', /* < */\n  CHAR_LEFT_CURLY_BRACE: '{', /* { */\n  CHAR_LEFT_SQUARE_BRACKET: '[', /* [ */\n  CHAR_LINE_FEED: '\\n', /* \\n */\n  CHAR_NO_BREAK_SPACE: '\\u00A0', /* \\u00A0 */\n  CHAR_PERCENT: '%', /* % */\n  CHAR_PLUS: '+', /* + */\n  CHAR_QUESTION_MARK: '?', /* ? */\n  CHAR_RIGHT_ANGLE_BRACKET: '>', /* > */\n  CHAR_RIGHT_CURLY_BRACE: '}', /* } */\n  CHAR_RIGHT_SQUARE_BRACKET: ']', /* ] */\n  CHAR_SEMICOLON: ';', /* ; */\n  CHAR_SINGLE_QUOTE: '\\'', /* ' */\n  CHAR_SPACE: ' ', /*   */\n  CHAR_TAB: '\\t', /* \\t */\n  CHAR_UNDERSCORE: '_', /* _ */\n  CHAR_VERTICAL_LINE: '|', /* | */\n  CHAR_ZERO_WIDTH_NOBREAK_SPACE: '\\uFEFF' /* \\uFEFF */\n};\n","'use strict';\n\nconst stringify = require('./stringify');\n\n/**\n * Constants\n */\n\nconst {\n  MAX_LENGTH,\n  CHAR_BACKSLASH, /* \\ */\n  CHAR_BACKTICK, /* ` */\n  CHAR_COMMA, /* , */\n  CHAR_DOT, /* . */\n  CHAR_LEFT_PARENTHESES, /* ( */\n  CHAR_RIGHT_PARENTHESES, /* ) */\n  CHAR_LEFT_CURLY_BRACE, /* { */\n  CHAR_RIGHT_CURLY_BRACE, /* } */\n  CHAR_LEFT_SQUARE_BRACKET, /* [ */\n  CHAR_RIGHT_SQUARE_BRACKET, /* ] */\n  CHAR_DOUBLE_QUOTE, /* \" */\n  CHAR_SINGLE_QUOTE, /* ' */\n  CHAR_NO_BREAK_SPACE,\n  CHAR_ZERO_WIDTH_NOBREAK_SPACE\n} = require('./constants');\n\n/**\n * parse\n */\n\nconst parse = (input, options = {}) => {\n  if (typeof input !== 'string') {\n    throw new TypeError('Expected a string');\n  }\n\n  const opts = options || {};\n  const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n  if (input.length > max) {\n    throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`);\n  }\n\n  const ast = { type: 'root', input, nodes: [] };\n  const stack = [ast];\n  let block = ast;\n  let prev = ast;\n  let brackets = 0;\n  const length = input.length;\n  let index = 0;\n  let depth = 0;\n  let value;\n\n  /**\n   * Helpers\n   */\n\n  const advance = () => input[index++];\n  const push = node => {\n    if (node.type === 'text' && prev.type === 'dot') {\n      prev.type = 'text';\n    }\n\n    if (prev && prev.type === 'text' && node.type === 'text') {\n      prev.value += node.value;\n      return;\n    }\n\n    block.nodes.push(node);\n    node.parent = block;\n    node.prev = prev;\n    prev = node;\n    return node;\n  };\n\n  push({ type: 'bos' });\n\n  while (index < length) {\n    block = stack[stack.length - 1];\n    value = advance();\n\n    /**\n     * Invalid chars\n     */\n\n    if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) {\n      continue;\n    }\n\n    /**\n     * Escaped chars\n     */\n\n    if (value === CHAR_BACKSLASH) {\n      push({ type: 'text', value: (options.keepEscaping ? value : '') + advance() });\n      continue;\n    }\n\n    /**\n     * Right square bracket (literal): ']'\n     */\n\n    if (value === CHAR_RIGHT_SQUARE_BRACKET) {\n      push({ type: 'text', value: '\\\\' + value });\n      continue;\n    }\n\n    /**\n     * Left square bracket: '['\n     */\n\n    if (value === CHAR_LEFT_SQUARE_BRACKET) {\n      brackets++;\n\n      let next;\n\n      while (index < length && (next = advance())) {\n        value += next;\n\n        if (next === CHAR_LEFT_SQUARE_BRACKET) {\n          brackets++;\n          continue;\n        }\n\n        if (next === CHAR_BACKSLASH) {\n          value += advance();\n          continue;\n        }\n\n        if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n          brackets--;\n\n          if (brackets === 0) {\n            break;\n          }\n        }\n      }\n\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Parentheses\n     */\n\n    if (value === CHAR_LEFT_PARENTHESES) {\n      block = push({ type: 'paren', nodes: [] });\n      stack.push(block);\n      push({ type: 'text', value });\n      continue;\n    }\n\n    if (value === CHAR_RIGHT_PARENTHESES) {\n      if (block.type !== 'paren') {\n        push({ type: 'text', value });\n        continue;\n      }\n      block = stack.pop();\n      push({ type: 'text', value });\n      block = stack[stack.length - 1];\n      continue;\n    }\n\n    /**\n     * Quotes: '|\"|`\n     */\n\n    if (value === CHAR_DOUBLE_QUOTE || value === CHAR_SINGLE_QUOTE || value === CHAR_BACKTICK) {\n      const open = value;\n      let next;\n\n      if (options.keepQuotes !== true) {\n        value = '';\n      }\n\n      while (index < length && (next = advance())) {\n        if (next === CHAR_BACKSLASH) {\n          value += next + advance();\n          continue;\n        }\n\n        if (next === open) {\n          if (options.keepQuotes === true) value += next;\n          break;\n        }\n\n        value += next;\n      }\n\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Left curly brace: '{'\n     */\n\n    if (value === CHAR_LEFT_CURLY_BRACE) {\n      depth++;\n\n      const dollar = prev.value && prev.value.slice(-1) === '$' || block.dollar === true;\n      const brace = {\n        type: 'brace',\n        open: true,\n        close: false,\n        dollar,\n        depth,\n        commas: 0,\n        ranges: 0,\n        nodes: []\n      };\n\n      block = push(brace);\n      stack.push(block);\n      push({ type: 'open', value });\n      continue;\n    }\n\n    /**\n     * Right curly brace: '}'\n     */\n\n    if (value === CHAR_RIGHT_CURLY_BRACE) {\n      if (block.type !== 'brace') {\n        push({ type: 'text', value });\n        continue;\n      }\n\n      const type = 'close';\n      block = stack.pop();\n      block.close = true;\n\n      push({ type, value });\n      depth--;\n\n      block = stack[stack.length - 1];\n      continue;\n    }\n\n    /**\n     * Comma: ','\n     */\n\n    if (value === CHAR_COMMA && depth > 0) {\n      if (block.ranges > 0) {\n        block.ranges = 0;\n        const open = block.nodes.shift();\n        block.nodes = [open, { type: 'text', value: stringify(block) }];\n      }\n\n      push({ type: 'comma', value });\n      block.commas++;\n      continue;\n    }\n\n    /**\n     * Dot: '.'\n     */\n\n    if (value === CHAR_DOT && depth > 0 && block.commas === 0) {\n      const siblings = block.nodes;\n\n      if (depth === 0 || siblings.length === 0) {\n        push({ type: 'text', value });\n        continue;\n      }\n\n      if (prev.type === 'dot') {\n        block.range = [];\n        prev.value += value;\n        prev.type = 'range';\n\n        if (block.nodes.length !== 3 && block.nodes.length !== 5) {\n          block.invalid = true;\n          block.ranges = 0;\n          prev.type = 'text';\n          continue;\n        }\n\n        block.ranges++;\n        block.args = [];\n        continue;\n      }\n\n      if (prev.type === 'range') {\n        siblings.pop();\n\n        const before = siblings[siblings.length - 1];\n        before.value += prev.value + value;\n        prev = before;\n        block.ranges--;\n        continue;\n      }\n\n      push({ type: 'dot', value });\n      continue;\n    }\n\n    /**\n     * Text\n     */\n\n    push({ type: 'text', value });\n  }\n\n  // Mark imbalanced braces and brackets as invalid\n  do {\n    block = stack.pop();\n\n    if (block.type !== 'root') {\n      block.nodes.forEach(node => {\n        if (!node.nodes) {\n          if (node.type === 'open') node.isOpen = true;\n          if (node.type === 'close') node.isClose = true;\n          if (!node.nodes) node.type = 'text';\n          node.invalid = true;\n        }\n      });\n\n      // get the location of the block on parent.nodes (block's siblings)\n      const parent = stack[stack.length - 1];\n      const index = parent.nodes.indexOf(block);\n      // replace the (invalid) block with it's nodes\n      parent.nodes.splice(index, 1, ...block.nodes);\n    }\n  } while (stack.length > 0);\n\n  push({ type: 'eos' });\n  return ast;\n};\n\nmodule.exports = parse;\n","'use strict';\n\nconst stringify = require('./lib/stringify');\nconst compile = require('./lib/compile');\nconst expand = require('./lib/expand');\nconst parse = require('./lib/parse');\n\n/**\n * Expand the given pattern or create a regex-compatible string.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces('{a,b,c}', { compile: true })); //=> ['(a|b|c)']\n * console.log(braces('{a,b,c}')); //=> ['a', 'b', 'c']\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {String}\n * @api public\n */\n\nconst braces = (input, options = {}) => {\n  let output = [];\n\n  if (Array.isArray(input)) {\n    for (const pattern of input) {\n      const result = braces.create(pattern, options);\n      if (Array.isArray(result)) {\n        output.push(...result);\n      } else {\n        output.push(result);\n      }\n    }\n  } else {\n    output = [].concat(braces.create(input, options));\n  }\n\n  if (options && options.expand === true && options.nodupes === true) {\n    output = [...new Set(output)];\n  }\n  return output;\n};\n\n/**\n * Parse the given `str` with the given `options`.\n *\n * ```js\n * // braces.parse(pattern, [, options]);\n * const ast = braces.parse('a/{b,c}/d');\n * console.log(ast);\n * ```\n * @param {String} pattern Brace pattern to parse\n * @param {Object} options\n * @return {Object} Returns an AST\n * @api public\n */\n\nbraces.parse = (input, options = {}) => parse(input, options);\n\n/**\n * Creates a braces string from an AST, or an AST node.\n *\n * ```js\n * const braces = require('braces');\n * let ast = braces.parse('foo/{a,b}/bar');\n * console.log(stringify(ast.nodes[2])); //=> '{a,b}'\n * ```\n * @param {String} `input` Brace pattern or AST.\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.stringify = (input, options = {}) => {\n  if (typeof input === 'string') {\n    return stringify(braces.parse(input, options), options);\n  }\n  return stringify(input, options);\n};\n\n/**\n * Compiles a brace pattern into a regex-compatible, optimized string.\n * This method is called by the main [braces](#braces) function by default.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.compile('a/{b,c}/d'));\n * //=> ['a/(b|c)/d']\n * ```\n * @param {String} `input` Brace pattern or AST.\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.compile = (input, options = {}) => {\n  if (typeof input === 'string') {\n    input = braces.parse(input, options);\n  }\n  return compile(input, options);\n};\n\n/**\n * Expands a brace pattern into an array. This method is called by the\n * main [braces](#braces) function when `options.expand` is true. Before\n * using this method it's recommended that you read the [performance notes](#performance))\n * and advantages of using [.compile](#compile) instead.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.expand('a/{b,c}/d'));\n * //=> ['a/b/d', 'a/c/d'];\n * ```\n * @param {String} `pattern` Brace pattern\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.expand = (input, options = {}) => {\n  if (typeof input === 'string') {\n    input = braces.parse(input, options);\n  }\n\n  let result = expand(input, options);\n\n  // filter out empty strings if specified\n  if (options.noempty === true) {\n    result = result.filter(Boolean);\n  }\n\n  // filter out duplicates if specified\n  if (options.nodupes === true) {\n    result = [...new Set(result)];\n  }\n\n  return result;\n};\n\n/**\n * Processes a brace pattern and returns either an expanded array\n * (if `options.expand` is true), a highly optimized regex-compatible string.\n * This method is called by the main [braces](#braces) function.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}'))\n * //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)'\n * ```\n * @param {String} `pattern` Brace pattern\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.create = (input, options = {}) => {\n  if (input === '' || input.length < 3) {\n    return [input];\n  }\n\n  return options.expand !== true\n    ? braces.compile(input, options)\n    : braces.expand(input, options);\n};\n\n/**\n * Expose \"braces\"\n */\n\nmodule.exports = braces;\n","'use strict';\n\nconst path = require('path');\nconst WIN_SLASH = '\\\\\\\\/';\nconst WIN_NO_SLASH = `[^${WIN_SLASH}]`;\n\nconst DEFAULT_MAX_EXTGLOB_RECURSION = 0;\n\n/**\n * Posix glob regex\n */\n\nconst DOT_LITERAL = '\\\\.';\nconst PLUS_LITERAL = '\\\\+';\nconst QMARK_LITERAL = '\\\\?';\nconst SLASH_LITERAL = '\\\\/';\nconst ONE_CHAR = '(?=.)';\nconst QMARK = '[^/]';\nconst END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;\nconst START_ANCHOR = `(?:^|${SLASH_LITERAL})`;\nconst DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;\nconst NO_DOT = `(?!${DOT_LITERAL})`;\nconst NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;\nconst NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;\nconst NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;\nconst QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;\nconst STAR = `${QMARK}*?`;\n\nconst POSIX_CHARS = {\n  DOT_LITERAL,\n  PLUS_LITERAL,\n  QMARK_LITERAL,\n  SLASH_LITERAL,\n  ONE_CHAR,\n  QMARK,\n  END_ANCHOR,\n  DOTS_SLASH,\n  NO_DOT,\n  NO_DOTS,\n  NO_DOT_SLASH,\n  NO_DOTS_SLASH,\n  QMARK_NO_DOT,\n  STAR,\n  START_ANCHOR\n};\n\n/**\n * Windows glob regex\n */\n\nconst WINDOWS_CHARS = {\n  ...POSIX_CHARS,\n\n  SLASH_LITERAL: `[${WIN_SLASH}]`,\n  QMARK: WIN_NO_SLASH,\n  STAR: `${WIN_NO_SLASH}*?`,\n  DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,\n  NO_DOT: `(?!${DOT_LITERAL})`,\n  NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n  NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,\n  NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n  QMARK_NO_DOT: `[^.${WIN_SLASH}]`,\n  START_ANCHOR: `(?:^|[${WIN_SLASH}])`,\n  END_ANCHOR: `(?:[${WIN_SLASH}]|$)`\n};\n\n/**\n * POSIX Bracket Regex\n */\n\nconst POSIX_REGEX_SOURCE = {\n  __proto__: null,\n  alnum: 'a-zA-Z0-9',\n  alpha: 'a-zA-Z',\n  ascii: '\\\\x00-\\\\x7F',\n  blank: ' \\\\t',\n  cntrl: '\\\\x00-\\\\x1F\\\\x7F',\n  digit: '0-9',\n  graph: '\\\\x21-\\\\x7E',\n  lower: 'a-z',\n  print: '\\\\x20-\\\\x7E ',\n  punct: '\\\\-!\"#$%&\\'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~',\n  space: ' \\\\t\\\\r\\\\n\\\\v\\\\f',\n  upper: 'A-Z',\n  word: 'A-Za-z0-9_',\n  xdigit: 'A-Fa-f0-9'\n};\n\nmodule.exports = {\n  DEFAULT_MAX_EXTGLOB_RECURSION,\n  MAX_LENGTH: 1024 * 64,\n  POSIX_REGEX_SOURCE,\n\n  // regular expressions\n  REGEX_BACKSLASH: /\\\\(?![*+?^${}(|)[\\]])/g,\n  REGEX_NON_SPECIAL_CHARS: /^[^@![\\].,$*+?^{}()|\\\\/]+/,\n  REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\\]]/,\n  REGEX_SPECIAL_CHARS_BACKREF: /(\\\\?)((\\W)(\\3*))/g,\n  REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\\]])/g,\n  REGEX_REMOVE_BACKSLASH: /(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,\n\n  // Replace globs with equivalent patterns to reduce parsing time.\n  REPLACEMENTS: {\n    __proto__: null,\n    '***': '*',\n    '**/**': '**',\n    '**/**/**': '**'\n  },\n\n  // Digits\n  CHAR_0: 48, /* 0 */\n  CHAR_9: 57, /* 9 */\n\n  // Alphabet chars.\n  CHAR_UPPERCASE_A: 65, /* A */\n  CHAR_LOWERCASE_A: 97, /* a */\n  CHAR_UPPERCASE_Z: 90, /* Z */\n  CHAR_LOWERCASE_Z: 122, /* z */\n\n  CHAR_LEFT_PARENTHESES: 40, /* ( */\n  CHAR_RIGHT_PARENTHESES: 41, /* ) */\n\n  CHAR_ASTERISK: 42, /* * */\n\n  // Non-alphabetic chars.\n  CHAR_AMPERSAND: 38, /* & */\n  CHAR_AT: 64, /* @ */\n  CHAR_BACKWARD_SLASH: 92, /* \\ */\n  CHAR_CARRIAGE_RETURN: 13, /* \\r */\n  CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */\n  CHAR_COLON: 58, /* : */\n  CHAR_COMMA: 44, /* , */\n  CHAR_DOT: 46, /* . */\n  CHAR_DOUBLE_QUOTE: 34, /* \" */\n  CHAR_EQUAL: 61, /* = */\n  CHAR_EXCLAMATION_MARK: 33, /* ! */\n  CHAR_FORM_FEED: 12, /* \\f */\n  CHAR_FORWARD_SLASH: 47, /* / */\n  CHAR_GRAVE_ACCENT: 96, /* ` */\n  CHAR_HASH: 35, /* # */\n  CHAR_HYPHEN_MINUS: 45, /* - */\n  CHAR_LEFT_ANGLE_BRACKET: 60, /* < */\n  CHAR_LEFT_CURLY_BRACE: 123, /* { */\n  CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */\n  CHAR_LINE_FEED: 10, /* \\n */\n  CHAR_NO_BREAK_SPACE: 160, /* \\u00A0 */\n  CHAR_PERCENT: 37, /* % */\n  CHAR_PLUS: 43, /* + */\n  CHAR_QUESTION_MARK: 63, /* ? */\n  CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */\n  CHAR_RIGHT_CURLY_BRACE: 125, /* } */\n  CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */\n  CHAR_SEMICOLON: 59, /* ; */\n  CHAR_SINGLE_QUOTE: 39, /* ' */\n  CHAR_SPACE: 32, /*   */\n  CHAR_TAB: 9, /* \\t */\n  CHAR_UNDERSCORE: 95, /* _ */\n  CHAR_VERTICAL_LINE: 124, /* | */\n  CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \\uFEFF */\n\n  SEP: path.sep,\n\n  /**\n   * Create EXTGLOB_CHARS\n   */\n\n  extglobChars(chars) {\n    return {\n      '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },\n      '?': { type: 'qmark', open: '(?:', close: ')?' },\n      '+': { type: 'plus', open: '(?:', close: ')+' },\n      '*': { type: 'star', open: '(?:', close: ')*' },\n      '@': { type: 'at', open: '(?:', close: ')' }\n    };\n  },\n\n  /**\n   * Create GLOB_CHARS\n   */\n\n  globChars(win32) {\n    return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;\n  }\n};\n","'use strict';\n\nconst path = require('path');\nconst win32 = process.platform === 'win32';\nconst {\n  REGEX_BACKSLASH,\n  REGEX_REMOVE_BACKSLASH,\n  REGEX_SPECIAL_CHARS,\n  REGEX_SPECIAL_CHARS_GLOBAL\n} = require('./constants');\n\nexports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\nexports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);\nexports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);\nexports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\\\$1');\nexports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');\n\nexports.removeBackslashes = str => {\n  return str.replace(REGEX_REMOVE_BACKSLASH, match => {\n    return match === '\\\\' ? '' : match;\n  });\n};\n\nexports.supportsLookbehinds = () => {\n  const segs = process.version.slice(1).split('.').map(Number);\n  if (segs.length === 3 && segs[0] >= 9 || (segs[0] === 8 && segs[1] >= 10)) {\n    return true;\n  }\n  return false;\n};\n\nexports.isWindows = options => {\n  if (options && typeof options.windows === 'boolean') {\n    return options.windows;\n  }\n  return win32 === true || path.sep === '\\\\';\n};\n\nexports.escapeLast = (input, char, lastIdx) => {\n  const idx = input.lastIndexOf(char, lastIdx);\n  if (idx === -1) return input;\n  if (input[idx - 1] === '\\\\') return exports.escapeLast(input, char, idx - 1);\n  return `${input.slice(0, idx)}\\\\${input.slice(idx)}`;\n};\n\nexports.removePrefix = (input, state = {}) => {\n  let output = input;\n  if (output.startsWith('./')) {\n    output = output.slice(2);\n    state.prefix = './';\n  }\n  return output;\n};\n\nexports.wrapOutput = (input, state = {}, options = {}) => {\n  const prepend = options.contains ? '' : '^';\n  const append = options.contains ? '' : '$';\n\n  let output = `${prepend}(?:${input})${append}`;\n  if (state.negated === true) {\n    output = `(?:^(?!${output}).*$)`;\n  }\n  return output;\n};\n","'use strict';\n\nconst utils = require('./utils');\nconst {\n  CHAR_ASTERISK,             /* * */\n  CHAR_AT,                   /* @ */\n  CHAR_BACKWARD_SLASH,       /* \\ */\n  CHAR_COMMA,                /* , */\n  CHAR_DOT,                  /* . */\n  CHAR_EXCLAMATION_MARK,     /* ! */\n  CHAR_FORWARD_SLASH,        /* / */\n  CHAR_LEFT_CURLY_BRACE,     /* { */\n  CHAR_LEFT_PARENTHESES,     /* ( */\n  CHAR_LEFT_SQUARE_BRACKET,  /* [ */\n  CHAR_PLUS,                 /* + */\n  CHAR_QUESTION_MARK,        /* ? */\n  CHAR_RIGHT_CURLY_BRACE,    /* } */\n  CHAR_RIGHT_PARENTHESES,    /* ) */\n  CHAR_RIGHT_SQUARE_BRACKET  /* ] */\n} = require('./constants');\n\nconst isPathSeparator = code => {\n  return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;\n};\n\nconst depth = token => {\n  if (token.isPrefix !== true) {\n    token.depth = token.isGlobstar ? Infinity : 1;\n  }\n};\n\n/**\n * Quickly scans a glob pattern and returns an object with a handful of\n * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),\n * `glob` (the actual pattern), `negated` (true if the path starts with `!` but not\n * with `!(`) and `negatedExtglob` (true if the path starts with `!(`).\n *\n * ```js\n * const pm = require('picomatch');\n * console.log(pm.scan('foo/bar/*.js'));\n * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {Object} Returns an object with tokens and regex source string.\n * @api public\n */\n\nconst scan = (input, options) => {\n  const opts = options || {};\n\n  const length = input.length - 1;\n  const scanToEnd = opts.parts === true || opts.scanToEnd === true;\n  const slashes = [];\n  const tokens = [];\n  const parts = [];\n\n  let str = input;\n  let index = -1;\n  let start = 0;\n  let lastIndex = 0;\n  let isBrace = false;\n  let isBracket = false;\n  let isGlob = false;\n  let isExtglob = false;\n  let isGlobstar = false;\n  let braceEscaped = false;\n  let backslashes = false;\n  let negated = false;\n  let negatedExtglob = false;\n  let finished = false;\n  let braces = 0;\n  let prev;\n  let code;\n  let token = { value: '', depth: 0, isGlob: false };\n\n  const eos = () => index >= length;\n  const peek = () => str.charCodeAt(index + 1);\n  const advance = () => {\n    prev = code;\n    return str.charCodeAt(++index);\n  };\n\n  while (index < length) {\n    code = advance();\n    let next;\n\n    if (code === CHAR_BACKWARD_SLASH) {\n      backslashes = token.backslashes = true;\n      code = advance();\n\n      if (code === CHAR_LEFT_CURLY_BRACE) {\n        braceEscaped = true;\n      }\n      continue;\n    }\n\n    if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {\n      braces++;\n\n      while (eos() !== true && (code = advance())) {\n        if (code === CHAR_BACKWARD_SLASH) {\n          backslashes = token.backslashes = true;\n          advance();\n          continue;\n        }\n\n        if (code === CHAR_LEFT_CURLY_BRACE) {\n          braces++;\n          continue;\n        }\n\n        if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) {\n          isBrace = token.isBrace = true;\n          isGlob = token.isGlob = true;\n          finished = true;\n\n          if (scanToEnd === true) {\n            continue;\n          }\n\n          break;\n        }\n\n        if (braceEscaped !== true && code === CHAR_COMMA) {\n          isBrace = token.isBrace = true;\n          isGlob = token.isGlob = true;\n          finished = true;\n\n          if (scanToEnd === true) {\n            continue;\n          }\n\n          break;\n        }\n\n        if (code === CHAR_RIGHT_CURLY_BRACE) {\n          braces--;\n\n          if (braces === 0) {\n            braceEscaped = false;\n            isBrace = token.isBrace = true;\n            finished = true;\n            break;\n          }\n        }\n      }\n\n      if (scanToEnd === true) {\n        continue;\n      }\n\n      break;\n    }\n\n    if (code === CHAR_FORWARD_SLASH) {\n      slashes.push(index);\n      tokens.push(token);\n      token = { value: '', depth: 0, isGlob: false };\n\n      if (finished === true) continue;\n      if (prev === CHAR_DOT && index === (start + 1)) {\n        start += 2;\n        continue;\n      }\n\n      lastIndex = index + 1;\n      continue;\n    }\n\n    if (opts.noext !== true) {\n      const isExtglobChar = code === CHAR_PLUS\n        || code === CHAR_AT\n        || code === CHAR_ASTERISK\n        || code === CHAR_QUESTION_MARK\n        || code === CHAR_EXCLAMATION_MARK;\n\n      if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) {\n        isGlob = token.isGlob = true;\n        isExtglob = token.isExtglob = true;\n        finished = true;\n        if (code === CHAR_EXCLAMATION_MARK && index === start) {\n          negatedExtglob = true;\n        }\n\n        if (scanToEnd === true) {\n          while (eos() !== true && (code = advance())) {\n            if (code === CHAR_BACKWARD_SLASH) {\n              backslashes = token.backslashes = true;\n              code = advance();\n              continue;\n            }\n\n            if (code === CHAR_RIGHT_PARENTHESES) {\n              isGlob = token.isGlob = true;\n              finished = true;\n              break;\n            }\n          }\n          continue;\n        }\n        break;\n      }\n    }\n\n    if (code === CHAR_ASTERISK) {\n      if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true;\n      isGlob = token.isGlob = true;\n      finished = true;\n\n      if (scanToEnd === true) {\n        continue;\n      }\n      break;\n    }\n\n    if (code === CHAR_QUESTION_MARK) {\n      isGlob = token.isGlob = true;\n      finished = true;\n\n      if (scanToEnd === true) {\n        continue;\n      }\n      break;\n    }\n\n    if (code === CHAR_LEFT_SQUARE_BRACKET) {\n      while (eos() !== true && (next = advance())) {\n        if (next === CHAR_BACKWARD_SLASH) {\n          backslashes = token.backslashes = true;\n          advance();\n          continue;\n        }\n\n        if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n          isBracket = token.isBracket = true;\n          isGlob = token.isGlob = true;\n          finished = true;\n          break;\n        }\n      }\n\n      if (scanToEnd === true) {\n        continue;\n      }\n\n      break;\n    }\n\n    if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {\n      negated = token.negated = true;\n      start++;\n      continue;\n    }\n\n    if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {\n      isGlob = token.isGlob = true;\n\n      if (scanToEnd === true) {\n        while (eos() !== true && (code = advance())) {\n          if (code === CHAR_LEFT_PARENTHESES) {\n            backslashes = token.backslashes = true;\n            code = advance();\n            continue;\n          }\n\n          if (code === CHAR_RIGHT_PARENTHESES) {\n            finished = true;\n            break;\n          }\n        }\n        continue;\n      }\n      break;\n    }\n\n    if (isGlob === true) {\n      finished = true;\n\n      if (scanToEnd === true) {\n        continue;\n      }\n\n      break;\n    }\n  }\n\n  if (opts.noext === true) {\n    isExtglob = false;\n    isGlob = false;\n  }\n\n  let base = str;\n  let prefix = '';\n  let glob = '';\n\n  if (start > 0) {\n    prefix = str.slice(0, start);\n    str = str.slice(start);\n    lastIndex -= start;\n  }\n\n  if (base && isGlob === true && lastIndex > 0) {\n    base = str.slice(0, lastIndex);\n    glob = str.slice(lastIndex);\n  } else if (isGlob === true) {\n    base = '';\n    glob = str;\n  } else {\n    base = str;\n  }\n\n  if (base && base !== '' && base !== '/' && base !== str) {\n    if (isPathSeparator(base.charCodeAt(base.length - 1))) {\n      base = base.slice(0, -1);\n    }\n  }\n\n  if (opts.unescape === true) {\n    if (glob) glob = utils.removeBackslashes(glob);\n\n    if (base && backslashes === true) {\n      base = utils.removeBackslashes(base);\n    }\n  }\n\n  const state = {\n    prefix,\n    input,\n    start,\n    base,\n    glob,\n    isBrace,\n    isBracket,\n    isGlob,\n    isExtglob,\n    isGlobstar,\n    negated,\n    negatedExtglob\n  };\n\n  if (opts.tokens === true) {\n    state.maxDepth = 0;\n    if (!isPathSeparator(code)) {\n      tokens.push(token);\n    }\n    state.tokens = tokens;\n  }\n\n  if (opts.parts === true || opts.tokens === true) {\n    let prevIndex;\n\n    for (let idx = 0; idx < slashes.length; idx++) {\n      const n = prevIndex ? prevIndex + 1 : start;\n      const i = slashes[idx];\n      const value = input.slice(n, i);\n      if (opts.tokens) {\n        if (idx === 0 && start !== 0) {\n          tokens[idx].isPrefix = true;\n          tokens[idx].value = prefix;\n        } else {\n          tokens[idx].value = value;\n        }\n        depth(tokens[idx]);\n        state.maxDepth += tokens[idx].depth;\n      }\n      if (idx !== 0 || value !== '') {\n        parts.push(value);\n      }\n      prevIndex = i;\n    }\n\n    if (prevIndex && prevIndex + 1 < input.length) {\n      const value = input.slice(prevIndex + 1);\n      parts.push(value);\n\n      if (opts.tokens) {\n        tokens[tokens.length - 1].value = value;\n        depth(tokens[tokens.length - 1]);\n        state.maxDepth += tokens[tokens.length - 1].depth;\n      }\n    }\n\n    state.slashes = slashes;\n    state.parts = parts;\n  }\n\n  return state;\n};\n\nmodule.exports = scan;\n","'use strict';\n\nconst constants = require('./constants');\nconst utils = require('./utils');\n\n/**\n * Constants\n */\n\nconst {\n  MAX_LENGTH,\n  POSIX_REGEX_SOURCE,\n  REGEX_NON_SPECIAL_CHARS,\n  REGEX_SPECIAL_CHARS_BACKREF,\n  REPLACEMENTS\n} = constants;\n\n/**\n * Helpers\n */\n\nconst expandRange = (args, options) => {\n  if (typeof options.expandRange === 'function') {\n    return options.expandRange(...args, options);\n  }\n\n  args.sort();\n  const value = `[${args.join('-')}]`;\n\n  try {\n    /* eslint-disable-next-line no-new */\n    new RegExp(value);\n  } catch (ex) {\n    return args.map(v => utils.escapeRegex(v)).join('..');\n  }\n\n  return value;\n};\n\n/**\n * Create the message for a syntax error\n */\n\nconst syntaxError = (type, char) => {\n  return `Missing ${type}: \"${char}\" - use \"\\\\\\\\${char}\" to match literal characters`;\n};\n\nconst splitTopLevel = input => {\n  const parts = [];\n  let bracket = 0;\n  let paren = 0;\n  let quote = 0;\n  let value = '';\n  let escaped = false;\n\n  for (const ch of input) {\n    if (escaped === true) {\n      value += ch;\n      escaped = false;\n      continue;\n    }\n\n    if (ch === '\\\\') {\n      value += ch;\n      escaped = true;\n      continue;\n    }\n\n    if (ch === '\"') {\n      quote = quote === 1 ? 0 : 1;\n      value += ch;\n      continue;\n    }\n\n    if (quote === 0) {\n      if (ch === '[') {\n        bracket++;\n      } else if (ch === ']' && bracket > 0) {\n        bracket--;\n      } else if (bracket === 0) {\n        if (ch === '(') {\n          paren++;\n        } else if (ch === ')' && paren > 0) {\n          paren--;\n        } else if (ch === '|' && paren === 0) {\n          parts.push(value);\n          value = '';\n          continue;\n        }\n      }\n    }\n\n    value += ch;\n  }\n\n  parts.push(value);\n  return parts;\n};\n\nconst isPlainBranch = branch => {\n  let escaped = false;\n\n  for (const ch of branch) {\n    if (escaped === true) {\n      escaped = false;\n      continue;\n    }\n\n    if (ch === '\\\\') {\n      escaped = true;\n      continue;\n    }\n\n    if (/[?*+@!()[\\]{}]/.test(ch)) {\n      return false;\n    }\n  }\n\n  return true;\n};\n\nconst normalizeSimpleBranch = branch => {\n  let value = branch.trim();\n  let changed = true;\n\n  while (changed === true) {\n    changed = false;\n\n    if (/^@\\([^\\\\()[\\]{}|]+\\)$/.test(value)) {\n      value = value.slice(2, -1);\n      changed = true;\n    }\n  }\n\n  if (!isPlainBranch(value)) {\n    return;\n  }\n\n  return value.replace(/\\\\(.)/g, '$1');\n};\n\nconst hasRepeatedCharPrefixOverlap = branches => {\n  const values = branches.map(normalizeSimpleBranch).filter(Boolean);\n\n  for (let i = 0; i < values.length; i++) {\n    for (let j = i + 1; j < values.length; j++) {\n      const a = values[i];\n      const b = values[j];\n      const char = a[0];\n\n      if (!char || a !== char.repeat(a.length) || b !== char.repeat(b.length)) {\n        continue;\n      }\n\n      if (a === b || a.startsWith(b) || b.startsWith(a)) {\n        return true;\n      }\n    }\n  }\n\n  return false;\n};\n\nconst parseRepeatedExtglob = (pattern, requireEnd = true) => {\n  if ((pattern[0] !== '+' && pattern[0] !== '*') || pattern[1] !== '(') {\n    return;\n  }\n\n  let bracket = 0;\n  let paren = 0;\n  let quote = 0;\n  let escaped = false;\n\n  for (let i = 1; i < pattern.length; i++) {\n    const ch = pattern[i];\n\n    if (escaped === true) {\n      escaped = false;\n      continue;\n    }\n\n    if (ch === '\\\\') {\n      escaped = true;\n      continue;\n    }\n\n    if (ch === '\"') {\n      quote = quote === 1 ? 0 : 1;\n      continue;\n    }\n\n    if (quote === 1) {\n      continue;\n    }\n\n    if (ch === '[') {\n      bracket++;\n      continue;\n    }\n\n    if (ch === ']' && bracket > 0) {\n      bracket--;\n      continue;\n    }\n\n    if (bracket > 0) {\n      continue;\n    }\n\n    if (ch === '(') {\n      paren++;\n      continue;\n    }\n\n    if (ch === ')') {\n      paren--;\n\n      if (paren === 0) {\n        if (requireEnd === true && i !== pattern.length - 1) {\n          return;\n        }\n\n        return {\n          type: pattern[0],\n          body: pattern.slice(2, i),\n          end: i\n        };\n      }\n    }\n  }\n};\n\nconst getStarExtglobSequenceOutput = pattern => {\n  let index = 0;\n  const chars = [];\n\n  while (index < pattern.length) {\n    const match = parseRepeatedExtglob(pattern.slice(index), false);\n\n    if (!match || match.type !== '*') {\n      return;\n    }\n\n    const branches = splitTopLevel(match.body).map(branch => branch.trim());\n    if (branches.length !== 1) {\n      return;\n    }\n\n    const branch = normalizeSimpleBranch(branches[0]);\n    if (!branch || branch.length !== 1) {\n      return;\n    }\n\n    chars.push(branch);\n    index += match.end + 1;\n  }\n\n  if (chars.length < 1) {\n    return;\n  }\n\n  const source = chars.length === 1\n    ? utils.escapeRegex(chars[0])\n    : `[${chars.map(ch => utils.escapeRegex(ch)).join('')}]`;\n\n  return `${source}*`;\n};\n\nconst repeatedExtglobRecursion = pattern => {\n  let depth = 0;\n  let value = pattern.trim();\n  let match = parseRepeatedExtglob(value);\n\n  while (match) {\n    depth++;\n    value = match.body.trim();\n    match = parseRepeatedExtglob(value);\n  }\n\n  return depth;\n};\n\nconst analyzeRepeatedExtglob = (body, options) => {\n  if (options.maxExtglobRecursion === false) {\n    return { risky: false };\n  }\n\n  const max =\n    typeof options.maxExtglobRecursion === 'number'\n      ? options.maxExtglobRecursion\n      : constants.DEFAULT_MAX_EXTGLOB_RECURSION;\n\n  const branches = splitTopLevel(body).map(branch => branch.trim());\n\n  if (branches.length > 1) {\n    if (\n      branches.some(branch => branch === '') ||\n      branches.some(branch => /^[*?]+$/.test(branch)) ||\n      hasRepeatedCharPrefixOverlap(branches)\n    ) {\n      return { risky: true };\n    }\n  }\n\n  for (const branch of branches) {\n    const safeOutput = getStarExtglobSequenceOutput(branch);\n    if (safeOutput) {\n      return { risky: true, safeOutput };\n    }\n\n    if (repeatedExtglobRecursion(branch) > max) {\n      return { risky: true };\n    }\n  }\n\n  return { risky: false };\n};\n\n/**\n * Parse the given input string.\n * @param {String} input\n * @param {Object} options\n * @return {Object}\n */\n\nconst parse = (input, options) => {\n  if (typeof input !== 'string') {\n    throw new TypeError('Expected a string');\n  }\n\n  input = REPLACEMENTS[input] || input;\n\n  const opts = { ...options };\n  const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n\n  let len = input.length;\n  if (len > max) {\n    throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n  }\n\n  const bos = { type: 'bos', value: '', output: opts.prepend || '' };\n  const tokens = [bos];\n\n  const capture = opts.capture ? '' : '?:';\n  const win32 = utils.isWindows(options);\n\n  // create constants based on platform, for windows or posix\n  const PLATFORM_CHARS = constants.globChars(win32);\n  const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);\n\n  const {\n    DOT_LITERAL,\n    PLUS_LITERAL,\n    SLASH_LITERAL,\n    ONE_CHAR,\n    DOTS_SLASH,\n    NO_DOT,\n    NO_DOT_SLASH,\n    NO_DOTS_SLASH,\n    QMARK,\n    QMARK_NO_DOT,\n    STAR,\n    START_ANCHOR\n  } = PLATFORM_CHARS;\n\n  const globstar = opts => {\n    return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n  };\n\n  const nodot = opts.dot ? '' : NO_DOT;\n  const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;\n  let star = opts.bash === true ? globstar(opts) : STAR;\n\n  if (opts.capture) {\n    star = `(${star})`;\n  }\n\n  // minimatch options support\n  if (typeof opts.noext === 'boolean') {\n    opts.noextglob = opts.noext;\n  }\n\n  const state = {\n    input,\n    index: -1,\n    start: 0,\n    dot: opts.dot === true,\n    consumed: '',\n    output: '',\n    prefix: '',\n    backtrack: false,\n    negated: false,\n    brackets: 0,\n    braces: 0,\n    parens: 0,\n    quotes: 0,\n    globstar: false,\n    tokens\n  };\n\n  input = utils.removePrefix(input, state);\n  len = input.length;\n\n  const extglobs = [];\n  const braces = [];\n  const stack = [];\n  let prev = bos;\n  let value;\n\n  /**\n   * Tokenizing helpers\n   */\n\n  const eos = () => state.index === len - 1;\n  const peek = state.peek = (n = 1) => input[state.index + n];\n  const advance = state.advance = () => input[++state.index] || '';\n  const remaining = () => input.slice(state.index + 1);\n  const consume = (value = '', num = 0) => {\n    state.consumed += value;\n    state.index += num;\n  };\n\n  const append = token => {\n    state.output += token.output != null ? token.output : token.value;\n    consume(token.value);\n  };\n\n  const negate = () => {\n    let count = 1;\n\n    while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) {\n      advance();\n      state.start++;\n      count++;\n    }\n\n    if (count % 2 === 0) {\n      return false;\n    }\n\n    state.negated = true;\n    state.start++;\n    return true;\n  };\n\n  const increment = type => {\n    state[type]++;\n    stack.push(type);\n  };\n\n  const decrement = type => {\n    state[type]--;\n    stack.pop();\n  };\n\n  /**\n   * Push tokens onto the tokens array. This helper speeds up\n   * tokenizing by 1) helping us avoid backtracking as much as possible,\n   * and 2) helping us avoid creating extra tokens when consecutive\n   * characters are plain text. This improves performance and simplifies\n   * lookbehinds.\n   */\n\n  const push = tok => {\n    if (prev.type === 'globstar') {\n      const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');\n      const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren'));\n\n      if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {\n        state.output = state.output.slice(0, -prev.output.length);\n        prev.type = 'star';\n        prev.value = '*';\n        prev.output = star;\n        state.output += prev.output;\n      }\n    }\n\n    if (extglobs.length && tok.type !== 'paren') {\n      extglobs[extglobs.length - 1].inner += tok.value;\n    }\n\n    if (tok.value || tok.output) append(tok);\n    if (prev && prev.type === 'text' && tok.type === 'text') {\n      prev.value += tok.value;\n      prev.output = (prev.output || '') + tok.value;\n      return;\n    }\n\n    tok.prev = prev;\n    tokens.push(tok);\n    prev = tok;\n  };\n\n  const extglobOpen = (type, value) => {\n    const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };\n\n    token.prev = prev;\n    token.parens = state.parens;\n    token.output = state.output;\n    token.startIndex = state.index;\n    token.tokensIndex = tokens.length;\n    const output = (opts.capture ? '(' : '') + token.open;\n\n    increment('parens');\n    push({ type, value, output: state.output ? '' : ONE_CHAR });\n    push({ type: 'paren', extglob: true, value: advance(), output });\n    extglobs.push(token);\n  };\n\n  const extglobClose = token => {\n    const literal = input.slice(token.startIndex, state.index + 1);\n    const body = input.slice(token.startIndex + 2, state.index);\n    const analysis = analyzeRepeatedExtglob(body, opts);\n\n    if ((token.type === 'plus' || token.type === 'star') && analysis.risky) {\n      const safeOutput = analysis.safeOutput\n        ? (token.output ? '' : ONE_CHAR) + (opts.capture ? `(${analysis.safeOutput})` : analysis.safeOutput)\n        : undefined;\n      const open = tokens[token.tokensIndex];\n\n      open.type = 'text';\n      open.value = literal;\n      open.output = safeOutput || utils.escapeRegex(literal);\n\n      for (let i = token.tokensIndex + 1; i < tokens.length; i++) {\n        tokens[i].value = '';\n        tokens[i].output = '';\n        delete tokens[i].suffix;\n      }\n\n      state.output = token.output + open.output;\n      state.backtrack = true;\n\n      push({ type: 'paren', extglob: true, value, output: '' });\n      decrement('parens');\n      return;\n    }\n\n    let output = token.close + (opts.capture ? ')' : '');\n    let rest;\n\n    if (token.type === 'negate') {\n      let extglobStar = star;\n\n      if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {\n        extglobStar = globstar(opts);\n      }\n\n      if (extglobStar !== star || eos() || /^\\)+$/.test(remaining())) {\n        output = token.close = `)$))${extglobStar}`;\n      }\n\n      if (token.inner.includes('*') && (rest = remaining()) && /^\\.[^\\\\/.]+$/.test(rest)) {\n        // Any non-magical string (`.ts`) or even nested expression (`.{ts,tsx}`) can follow after the closing parenthesis.\n        // In this case, we need to parse the string and use it in the output of the original pattern.\n        // Suitable patterns: `/!(*.d).ts`, `/!(*.d).{ts,tsx}`, `**/!(*-dbg).@(js)`.\n        //\n        // Disabling the `fastpaths` option due to a problem with parsing strings as `.ts` in the pattern like `**/!(*.d).ts`.\n        const expression = parse(rest, { ...options, fastpaths: false }).output;\n\n        output = token.close = `)${expression})${extglobStar})`;\n      }\n\n      if (token.prev.type === 'bos') {\n        state.negatedExtglob = true;\n      }\n    }\n\n    push({ type: 'paren', extglob: true, value, output });\n    decrement('parens');\n  };\n\n  /**\n   * Fast paths\n   */\n\n  if (opts.fastpaths !== false && !/(^[*!]|[/()[\\]{}\"])/.test(input)) {\n    let backslashes = false;\n\n    let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {\n      if (first === '\\\\') {\n        backslashes = true;\n        return m;\n      }\n\n      if (first === '?') {\n        if (esc) {\n          return esc + first + (rest ? QMARK.repeat(rest.length) : '');\n        }\n        if (index === 0) {\n          return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');\n        }\n        return QMARK.repeat(chars.length);\n      }\n\n      if (first === '.') {\n        return DOT_LITERAL.repeat(chars.length);\n      }\n\n      if (first === '*') {\n        if (esc) {\n          return esc + first + (rest ? star : '');\n        }\n        return star;\n      }\n      return esc ? m : `\\\\${m}`;\n    });\n\n    if (backslashes === true) {\n      if (opts.unescape === true) {\n        output = output.replace(/\\\\/g, '');\n      } else {\n        output = output.replace(/\\\\+/g, m => {\n          return m.length % 2 === 0 ? '\\\\\\\\' : (m ? '\\\\' : '');\n        });\n      }\n    }\n\n    if (output === input && opts.contains === true) {\n      state.output = input;\n      return state;\n    }\n\n    state.output = utils.wrapOutput(output, state, options);\n    return state;\n  }\n\n  /**\n   * Tokenize input until we reach end-of-string\n   */\n\n  while (!eos()) {\n    value = advance();\n\n    if (value === '\\u0000') {\n      continue;\n    }\n\n    /**\n     * Escaped characters\n     */\n\n    if (value === '\\\\') {\n      const next = peek();\n\n      if (next === '/' && opts.bash !== true) {\n        continue;\n      }\n\n      if (next === '.' || next === ';') {\n        continue;\n      }\n\n      if (!next) {\n        value += '\\\\';\n        push({ type: 'text', value });\n        continue;\n      }\n\n      // collapse slashes to reduce potential for exploits\n      const match = /^\\\\+/.exec(remaining());\n      let slashes = 0;\n\n      if (match && match[0].length > 2) {\n        slashes = match[0].length;\n        state.index += slashes;\n        if (slashes % 2 !== 0) {\n          value += '\\\\';\n        }\n      }\n\n      if (opts.unescape === true) {\n        value = advance();\n      } else {\n        value += advance();\n      }\n\n      if (state.brackets === 0) {\n        push({ type: 'text', value });\n        continue;\n      }\n    }\n\n    /**\n     * If we're inside a regex character class, continue\n     * until we reach the closing bracket.\n     */\n\n    if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {\n      if (opts.posix !== false && value === ':') {\n        const inner = prev.value.slice(1);\n        if (inner.includes('[')) {\n          prev.posix = true;\n\n          if (inner.includes(':')) {\n            const idx = prev.value.lastIndexOf('[');\n            const pre = prev.value.slice(0, idx);\n            const rest = prev.value.slice(idx + 2);\n            const posix = POSIX_REGEX_SOURCE[rest];\n            if (posix) {\n              prev.value = pre + posix;\n              state.backtrack = true;\n              advance();\n\n              if (!bos.output && tokens.indexOf(prev) === 1) {\n                bos.output = ONE_CHAR;\n              }\n              continue;\n            }\n          }\n        }\n      }\n\n      if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {\n        value = `\\\\${value}`;\n      }\n\n      if (value === ']' && (prev.value === '[' || prev.value === '[^')) {\n        value = `\\\\${value}`;\n      }\n\n      if (opts.posix === true && value === '!' && prev.value === '[') {\n        value = '^';\n      }\n\n      prev.value += value;\n      append({ value });\n      continue;\n    }\n\n    /**\n     * If we're inside a quoted string, continue\n     * until we reach the closing double quote.\n     */\n\n    if (state.quotes === 1 && value !== '\"') {\n      value = utils.escapeRegex(value);\n      prev.value += value;\n      append({ value });\n      continue;\n    }\n\n    /**\n     * Double quotes\n     */\n\n    if (value === '\"') {\n      state.quotes = state.quotes === 1 ? 0 : 1;\n      if (opts.keepQuotes === true) {\n        push({ type: 'text', value });\n      }\n      continue;\n    }\n\n    /**\n     * Parentheses\n     */\n\n    if (value === '(') {\n      increment('parens');\n      push({ type: 'paren', value });\n      continue;\n    }\n\n    if (value === ')') {\n      if (state.parens === 0 && opts.strictBrackets === true) {\n        throw new SyntaxError(syntaxError('opening', '('));\n      }\n\n      const extglob = extglobs[extglobs.length - 1];\n      if (extglob && state.parens === extglob.parens + 1) {\n        extglobClose(extglobs.pop());\n        continue;\n      }\n\n      push({ type: 'paren', value, output: state.parens ? ')' : '\\\\)' });\n      decrement('parens');\n      continue;\n    }\n\n    /**\n     * Square brackets\n     */\n\n    if (value === '[') {\n      if (opts.nobracket === true || !remaining().includes(']')) {\n        if (opts.nobracket !== true && opts.strictBrackets === true) {\n          throw new SyntaxError(syntaxError('closing', ']'));\n        }\n\n        value = `\\\\${value}`;\n      } else {\n        increment('brackets');\n      }\n\n      push({ type: 'bracket', value });\n      continue;\n    }\n\n    if (value === ']') {\n      if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {\n        push({ type: 'text', value, output: `\\\\${value}` });\n        continue;\n      }\n\n      if (state.brackets === 0) {\n        if (opts.strictBrackets === true) {\n          throw new SyntaxError(syntaxError('opening', '['));\n        }\n\n        push({ type: 'text', value, output: `\\\\${value}` });\n        continue;\n      }\n\n      decrement('brackets');\n\n      const prevValue = prev.value.slice(1);\n      if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {\n        value = `/${value}`;\n      }\n\n      prev.value += value;\n      append({ value });\n\n      // when literal brackets are explicitly disabled\n      // assume we should match with a regex character class\n      if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {\n        continue;\n      }\n\n      const escaped = utils.escapeRegex(prev.value);\n      state.output = state.output.slice(0, -prev.value.length);\n\n      // when literal brackets are explicitly enabled\n      // assume we should escape the brackets to match literal characters\n      if (opts.literalBrackets === true) {\n        state.output += escaped;\n        prev.value = escaped;\n        continue;\n      }\n\n      // when the user specifies nothing, try to match both\n      prev.value = `(${capture}${escaped}|${prev.value})`;\n      state.output += prev.value;\n      continue;\n    }\n\n    /**\n     * Braces\n     */\n\n    if (value === '{' && opts.nobrace !== true) {\n      increment('braces');\n\n      const open = {\n        type: 'brace',\n        value,\n        output: '(',\n        outputIndex: state.output.length,\n        tokensIndex: state.tokens.length\n      };\n\n      braces.push(open);\n      push(open);\n      continue;\n    }\n\n    if (value === '}') {\n      const brace = braces[braces.length - 1];\n\n      if (opts.nobrace === true || !brace) {\n        push({ type: 'text', value, output: value });\n        continue;\n      }\n\n      let output = ')';\n\n      if (brace.dots === true) {\n        const arr = tokens.slice();\n        const range = [];\n\n        for (let i = arr.length - 1; i >= 0; i--) {\n          tokens.pop();\n          if (arr[i].type === 'brace') {\n            break;\n          }\n          if (arr[i].type !== 'dots') {\n            range.unshift(arr[i].value);\n          }\n        }\n\n        output = expandRange(range, opts);\n        state.backtrack = true;\n      }\n\n      if (brace.comma !== true && brace.dots !== true) {\n        const out = state.output.slice(0, brace.outputIndex);\n        const toks = state.tokens.slice(brace.tokensIndex);\n        brace.value = brace.output = '\\\\{';\n        value = output = '\\\\}';\n        state.output = out;\n        for (const t of toks) {\n          state.output += (t.output || t.value);\n        }\n      }\n\n      push({ type: 'brace', value, output });\n      decrement('braces');\n      braces.pop();\n      continue;\n    }\n\n    /**\n     * Pipes\n     */\n\n    if (value === '|') {\n      if (extglobs.length > 0) {\n        extglobs[extglobs.length - 1].conditions++;\n      }\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Commas\n     */\n\n    if (value === ',') {\n      let output = value;\n\n      const brace = braces[braces.length - 1];\n      if (brace && stack[stack.length - 1] === 'braces') {\n        brace.comma = true;\n        output = '|';\n      }\n\n      push({ type: 'comma', value, output });\n      continue;\n    }\n\n    /**\n     * Slashes\n     */\n\n    if (value === '/') {\n      // if the beginning of the glob is \"./\", advance the start\n      // to the current index, and don't add the \"./\" characters\n      // to the state. This greatly simplifies lookbehinds when\n      // checking for BOS characters like \"!\" and \".\" (not \"./\")\n      if (prev.type === 'dot' && state.index === state.start + 1) {\n        state.start = state.index + 1;\n        state.consumed = '';\n        state.output = '';\n        tokens.pop();\n        prev = bos; // reset \"prev\" to the first token\n        continue;\n      }\n\n      push({ type: 'slash', value, output: SLASH_LITERAL });\n      continue;\n    }\n\n    /**\n     * Dots\n     */\n\n    if (value === '.') {\n      if (state.braces > 0 && prev.type === 'dot') {\n        if (prev.value === '.') prev.output = DOT_LITERAL;\n        const brace = braces[braces.length - 1];\n        prev.type = 'dots';\n        prev.output += value;\n        prev.value += value;\n        brace.dots = true;\n        continue;\n      }\n\n      if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') {\n        push({ type: 'text', value, output: DOT_LITERAL });\n        continue;\n      }\n\n      push({ type: 'dot', value, output: DOT_LITERAL });\n      continue;\n    }\n\n    /**\n     * Question marks\n     */\n\n    if (value === '?') {\n      const isGroup = prev && prev.value === '(';\n      if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n        extglobOpen('qmark', value);\n        continue;\n      }\n\n      if (prev && prev.type === 'paren') {\n        const next = peek();\n        let output = value;\n\n        if (next === '<' && !utils.supportsLookbehinds()) {\n          throw new Error('Node.js v10 or higher is required for regex lookbehinds');\n        }\n\n        if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\\w+>)/.test(remaining()))) {\n          output = `\\\\${value}`;\n        }\n\n        push({ type: 'text', value, output });\n        continue;\n      }\n\n      if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {\n        push({ type: 'qmark', value, output: QMARK_NO_DOT });\n        continue;\n      }\n\n      push({ type: 'qmark', value, output: QMARK });\n      continue;\n    }\n\n    /**\n     * Exclamation\n     */\n\n    if (value === '!') {\n      if (opts.noextglob !== true && peek() === '(') {\n        if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {\n          extglobOpen('negate', value);\n          continue;\n        }\n      }\n\n      if (opts.nonegate !== true && state.index === 0) {\n        negate();\n        continue;\n      }\n    }\n\n    /**\n     * Plus\n     */\n\n    if (value === '+') {\n      if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n        extglobOpen('plus', value);\n        continue;\n      }\n\n      if ((prev && prev.value === '(') || opts.regex === false) {\n        push({ type: 'plus', value, output: PLUS_LITERAL });\n        continue;\n      }\n\n      if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) {\n        push({ type: 'plus', value });\n        continue;\n      }\n\n      push({ type: 'plus', value: PLUS_LITERAL });\n      continue;\n    }\n\n    /**\n     * Plain text\n     */\n\n    if (value === '@') {\n      if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n        push({ type: 'at', extglob: true, value, output: '' });\n        continue;\n      }\n\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Plain text\n     */\n\n    if (value !== '*') {\n      if (value === '$' || value === '^') {\n        value = `\\\\${value}`;\n      }\n\n      const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());\n      if (match) {\n        value += match[0];\n        state.index += match[0].length;\n      }\n\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Stars\n     */\n\n    if (prev && (prev.type === 'globstar' || prev.star === true)) {\n      prev.type = 'star';\n      prev.star = true;\n      prev.value += value;\n      prev.output = star;\n      state.backtrack = true;\n      state.globstar = true;\n      consume(value);\n      continue;\n    }\n\n    let rest = remaining();\n    if (opts.noextglob !== true && /^\\([^?]/.test(rest)) {\n      extglobOpen('star', value);\n      continue;\n    }\n\n    if (prev.type === 'star') {\n      if (opts.noglobstar === true) {\n        consume(value);\n        continue;\n      }\n\n      const prior = prev.prev;\n      const before = prior.prev;\n      const isStart = prior.type === 'slash' || prior.type === 'bos';\n      const afterStar = before && (before.type === 'star' || before.type === 'globstar');\n\n      if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) {\n        push({ type: 'star', value, output: '' });\n        continue;\n      }\n\n      const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');\n      const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');\n      if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {\n        push({ type: 'star', value, output: '' });\n        continue;\n      }\n\n      // strip consecutive `/**/`\n      while (rest.slice(0, 3) === '/**') {\n        const after = input[state.index + 4];\n        if (after && after !== '/') {\n          break;\n        }\n        rest = rest.slice(3);\n        consume('/**', 3);\n      }\n\n      if (prior.type === 'bos' && eos()) {\n        prev.type = 'globstar';\n        prev.value += value;\n        prev.output = globstar(opts);\n        state.output = prev.output;\n        state.globstar = true;\n        consume(value);\n        continue;\n      }\n\n      if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {\n        state.output = state.output.slice(0, -(prior.output + prev.output).length);\n        prior.output = `(?:${prior.output}`;\n\n        prev.type = 'globstar';\n        prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)');\n        prev.value += value;\n        state.globstar = true;\n        state.output += prior.output + prev.output;\n        consume(value);\n        continue;\n      }\n\n      if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') {\n        const end = rest[1] !== void 0 ? '|$' : '';\n\n        state.output = state.output.slice(0, -(prior.output + prev.output).length);\n        prior.output = `(?:${prior.output}`;\n\n        prev.type = 'globstar';\n        prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;\n        prev.value += value;\n\n        state.output += prior.output + prev.output;\n        state.globstar = true;\n\n        consume(value + advance());\n\n        push({ type: 'slash', value: '/', output: '' });\n        continue;\n      }\n\n      if (prior.type === 'bos' && rest[0] === '/') {\n        prev.type = 'globstar';\n        prev.value += value;\n        prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;\n        state.output = prev.output;\n        state.globstar = true;\n        consume(value + advance());\n        push({ type: 'slash', value: '/', output: '' });\n        continue;\n      }\n\n      // remove single star from output\n      state.output = state.output.slice(0, -prev.output.length);\n\n      // reset previous token to globstar\n      prev.type = 'globstar';\n      prev.output = globstar(opts);\n      prev.value += value;\n\n      // reset output with globstar\n      state.output += prev.output;\n      state.globstar = true;\n      consume(value);\n      continue;\n    }\n\n    const token = { type: 'star', value, output: star };\n\n    if (opts.bash === true) {\n      token.output = '.*?';\n      if (prev.type === 'bos' || prev.type === 'slash') {\n        token.output = nodot + token.output;\n      }\n      push(token);\n      continue;\n    }\n\n    if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {\n      token.output = value;\n      push(token);\n      continue;\n    }\n\n    if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {\n      if (prev.type === 'dot') {\n        state.output += NO_DOT_SLASH;\n        prev.output += NO_DOT_SLASH;\n\n      } else if (opts.dot === true) {\n        state.output += NO_DOTS_SLASH;\n        prev.output += NO_DOTS_SLASH;\n\n      } else {\n        state.output += nodot;\n        prev.output += nodot;\n      }\n\n      if (peek() !== '*') {\n        state.output += ONE_CHAR;\n        prev.output += ONE_CHAR;\n      }\n    }\n\n    push(token);\n  }\n\n  while (state.brackets > 0) {\n    if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));\n    state.output = utils.escapeLast(state.output, '[');\n    decrement('brackets');\n  }\n\n  while (state.parens > 0) {\n    if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));\n    state.output = utils.escapeLast(state.output, '(');\n    decrement('parens');\n  }\n\n  while (state.braces > 0) {\n    if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));\n    state.output = utils.escapeLast(state.output, '{');\n    decrement('braces');\n  }\n\n  if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {\n    push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });\n  }\n\n  // rebuild the output if we had to backtrack at any point\n  if (state.backtrack === true) {\n    state.output = '';\n\n    for (const token of state.tokens) {\n      state.output += token.output != null ? token.output : token.value;\n\n      if (token.suffix) {\n        state.output += token.suffix;\n      }\n    }\n  }\n\n  return state;\n};\n\n/**\n * Fast paths for creating regular expressions for common glob patterns.\n * This can significantly speed up processing and has very little downside\n * impact when none of the fast paths match.\n */\n\nparse.fastpaths = (input, options) => {\n  const opts = { ...options };\n  const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n  const len = input.length;\n  if (len > max) {\n    throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n  }\n\n  input = REPLACEMENTS[input] || input;\n  const win32 = utils.isWindows(options);\n\n  // create constants based on platform, for windows or posix\n  const {\n    DOT_LITERAL,\n    SLASH_LITERAL,\n    ONE_CHAR,\n    DOTS_SLASH,\n    NO_DOT,\n    NO_DOTS,\n    NO_DOTS_SLASH,\n    STAR,\n    START_ANCHOR\n  } = constants.globChars(win32);\n\n  const nodot = opts.dot ? NO_DOTS : NO_DOT;\n  const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;\n  const capture = opts.capture ? '' : '?:';\n  const state = { negated: false, prefix: '' };\n  let star = opts.bash === true ? '.*?' : STAR;\n\n  if (opts.capture) {\n    star = `(${star})`;\n  }\n\n  const globstar = opts => {\n    if (opts.noglobstar === true) return star;\n    return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n  };\n\n  const create = str => {\n    switch (str) {\n      case '*':\n        return `${nodot}${ONE_CHAR}${star}`;\n\n      case '.*':\n        return `${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      case '*.*':\n        return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      case '*/*':\n        return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;\n\n      case '**':\n        return nodot + globstar(opts);\n\n      case '**/*':\n        return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;\n\n      case '**/*.*':\n        return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      case '**/.*':\n        return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      default: {\n        const match = /^(.*?)\\.(\\w+)$/.exec(str);\n        if (!match) return;\n\n        const source = create(match[1]);\n        if (!source) return;\n\n        return source + DOT_LITERAL + match[2];\n      }\n    }\n  };\n\n  const output = utils.removePrefix(input, state);\n  let source = create(output);\n\n  if (source && opts.strictSlashes !== true) {\n    source += `${SLASH_LITERAL}?`;\n  }\n\n  return source;\n};\n\nmodule.exports = parse;\n","'use strict';\n\nconst path = require('path');\nconst scan = require('./scan');\nconst parse = require('./parse');\nconst utils = require('./utils');\nconst constants = require('./constants');\nconst isObject = val => val && typeof val === 'object' && !Array.isArray(val);\n\n/**\n * Creates a matcher function from one or more glob patterns. The\n * returned function takes a string to match as its first argument,\n * and returns true if the string is a match. The returned matcher\n * function also takes a boolean as the second argument that, when true,\n * returns an object with additional information.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch(glob[, options]);\n *\n * const isMatch = picomatch('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @name picomatch\n * @param {String|Array} `globs` One or more glob patterns.\n * @param {Object=} `options`\n * @return {Function=} Returns a matcher function.\n * @api public\n */\n\nconst picomatch = (glob, options, returnState = false) => {\n  if (Array.isArray(glob)) {\n    const fns = glob.map(input => picomatch(input, options, returnState));\n    const arrayMatcher = str => {\n      for (const isMatch of fns) {\n        const state = isMatch(str);\n        if (state) return state;\n      }\n      return false;\n    };\n    return arrayMatcher;\n  }\n\n  const isState = isObject(glob) && glob.tokens && glob.input;\n\n  if (glob === '' || (typeof glob !== 'string' && !isState)) {\n    throw new TypeError('Expected pattern to be a non-empty string');\n  }\n\n  const opts = options || {};\n  const posix = utils.isWindows(options);\n  const regex = isState\n    ? picomatch.compileRe(glob, options)\n    : picomatch.makeRe(glob, options, false, true);\n\n  const state = regex.state;\n  delete regex.state;\n\n  let isIgnored = () => false;\n  if (opts.ignore) {\n    const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };\n    isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);\n  }\n\n  const matcher = (input, returnObject = false) => {\n    const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });\n    const result = { glob, state, regex, posix, input, output, match, isMatch };\n\n    if (typeof opts.onResult === 'function') {\n      opts.onResult(result);\n    }\n\n    if (isMatch === false) {\n      result.isMatch = false;\n      return returnObject ? result : false;\n    }\n\n    if (isIgnored(input)) {\n      if (typeof opts.onIgnore === 'function') {\n        opts.onIgnore(result);\n      }\n      result.isMatch = false;\n      return returnObject ? result : false;\n    }\n\n    if (typeof opts.onMatch === 'function') {\n      opts.onMatch(result);\n    }\n    return returnObject ? result : true;\n  };\n\n  if (returnState) {\n    matcher.state = state;\n  }\n\n  return matcher;\n};\n\n/**\n * Test `input` with the given `regex`. This is used by the main\n * `picomatch()` function to test the input string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.test(input, regex[, options]);\n *\n * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\\/([^/]*?))$/));\n * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp} `regex`\n * @return {Object} Returns an object with matching info.\n * @api public\n */\n\npicomatch.test = (input, regex, options, { glob, posix } = {}) => {\n  if (typeof input !== 'string') {\n    throw new TypeError('Expected input to be a string');\n  }\n\n  if (input === '') {\n    return { isMatch: false, output: '' };\n  }\n\n  const opts = options || {};\n  const format = opts.format || (posix ? utils.toPosixSlashes : null);\n  let match = input === glob;\n  let output = (match && format) ? format(input) : input;\n\n  if (match === false) {\n    output = format ? format(input) : input;\n    match = output === glob;\n  }\n\n  if (match === false || opts.capture === true) {\n    if (opts.matchBase === true || opts.basename === true) {\n      match = picomatch.matchBase(input, regex, options, posix);\n    } else {\n      match = regex.exec(output);\n    }\n  }\n\n  return { isMatch: Boolean(match), match, output };\n};\n\n/**\n * Match the basename of a filepath.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.matchBase(input, glob[, options]);\n * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).\n * @return {Boolean}\n * @api public\n */\n\npicomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) => {\n  const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);\n  return regex.test(path.basename(input));\n};\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.isMatch(string, patterns[, options]);\n *\n * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String|Array} str The string to test.\n * @param {String|Array} patterns One or more glob patterns to use for matching.\n * @param {Object} [options] See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\npicomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const result = picomatch.parse(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as a regex source string.\n * @api public\n */\n\npicomatch.parse = (pattern, options) => {\n  if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options));\n  return parse(pattern, { ...options, fastpaths: false });\n};\n\n/**\n * Scan a glob pattern to separate the pattern into segments.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.scan(input[, options]);\n *\n * const result = picomatch.scan('!./foo/*.js');\n * console.log(result);\n * { prefix: '!./',\n *   input: '!./foo/*.js',\n *   start: 3,\n *   base: 'foo',\n *   glob: '*.js',\n *   isBrace: false,\n *   isBracket: false,\n *   isGlob: true,\n *   isExtglob: false,\n *   isGlobstar: false,\n *   negated: true }\n * ```\n * @param {String} `input` Glob pattern to scan.\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\npicomatch.scan = (input, options) => scan(input, options);\n\n/**\n * Compile a regular expression from the `state` object returned by the\n * [parse()](#parse) method.\n *\n * @param {Object} `state`\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Intended for implementors, this argument allows you to return the raw output from the parser.\n * @param {Boolean} `returnState` Adds the state to a `state` property on the returned regex. Useful for implementors and debugging.\n * @return {RegExp}\n * @api public\n */\n\npicomatch.compileRe = (state, options, returnOutput = false, returnState = false) => {\n  if (returnOutput === true) {\n    return state.output;\n  }\n\n  const opts = options || {};\n  const prepend = opts.contains ? '' : '^';\n  const append = opts.contains ? '' : '$';\n\n  let source = `${prepend}(?:${state.output})${append}`;\n  if (state && state.negated === true) {\n    source = `^(?!${source}).*$`;\n  }\n\n  const regex = picomatch.toRegex(source, options);\n  if (returnState === true) {\n    regex.state = state;\n  }\n\n  return regex;\n};\n\n/**\n * Create a regular expression from a parsed glob pattern.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const state = picomatch.parse('*.js');\n * // picomatch.compileRe(state[, options]);\n *\n * console.log(picomatch.compileRe(state));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `state` The object returned from the `.parse` method.\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Implementors may use this argument to return the compiled output, instead of a regular expression. This is not exposed on the options to prevent end-users from mutating the result.\n * @param {Boolean} `returnState` Implementors may use this argument to return the state from the parsed glob with the returned regular expression.\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\npicomatch.makeRe = (input, options = {}, returnOutput = false, returnState = false) => {\n  if (!input || typeof input !== 'string') {\n    throw new TypeError('Expected a non-empty string');\n  }\n\n  let parsed = { negated: false, fastpaths: true };\n\n  if (options.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {\n    parsed.output = parse.fastpaths(input, options);\n  }\n\n  if (!parsed.output) {\n    parsed = parse(input, options);\n  }\n\n  return picomatch.compileRe(parsed, options, returnOutput, returnState);\n};\n\n/**\n * Create a regular expression from the given regex source string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.toRegex(source[, options]);\n *\n * const { output } = picomatch.parse('*.js');\n * console.log(picomatch.toRegex(output));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `source` Regular expression source string.\n * @param {Object} `options`\n * @return {RegExp}\n * @api public\n */\n\npicomatch.toRegex = (source, options) => {\n  try {\n    const opts = options || {};\n    return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));\n  } catch (err) {\n    if (options && options.debug === true) throw err;\n    return /$^/;\n  }\n};\n\n/**\n * Picomatch constants.\n * @return {Object}\n */\n\npicomatch.constants = constants;\n\n/**\n * Expose \"picomatch\"\n */\n\nmodule.exports = picomatch;\n","'use strict';\n\nmodule.exports = require('./lib/picomatch');\n","'use strict';\n\nconst util = require('util');\nconst braces = require('braces');\nconst picomatch = require('picomatch');\nconst utils = require('picomatch/lib/utils');\n\nconst isEmptyString = v => v === '' || v === './';\nconst hasBraces = v => {\n  const index = v.indexOf('{');\n  return index > -1 && v.indexOf('}', index) > -1;\n};\n\n/**\n * Returns an array of strings that match one or more glob patterns.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm(list, patterns[, options]);\n *\n * console.log(mm(['a.js', 'a.txt'], ['*.js']));\n * //=> [ 'a.js' ]\n * ```\n * @param {String|Array<string>} `list` List of strings to match.\n * @param {String|Array<string>} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options)\n * @return {Array} Returns an array of matches\n * @summary false\n * @api public\n */\n\nconst micromatch = (list, patterns, options) => {\n  patterns = [].concat(patterns);\n  list = [].concat(list);\n\n  let omit = new Set();\n  let keep = new Set();\n  let items = new Set();\n  let negatives = 0;\n\n  let onResult = state => {\n    items.add(state.output);\n    if (options && options.onResult) {\n      options.onResult(state);\n    }\n  };\n\n  for (let i = 0; i < patterns.length; i++) {\n    let isMatch = picomatch(String(patterns[i]), { ...options, onResult }, true);\n    let negated = isMatch.state.negated || isMatch.state.negatedExtglob;\n    if (negated) negatives++;\n\n    for (let item of list) {\n      let matched = isMatch(item, true);\n\n      let match = negated ? !matched.isMatch : matched.isMatch;\n      if (!match) continue;\n\n      if (negated) {\n        omit.add(matched.output);\n      } else {\n        omit.delete(matched.output);\n        keep.add(matched.output);\n      }\n    }\n  }\n\n  let result = negatives === patterns.length ? [...items] : [...keep];\n  let matches = result.filter(item => !omit.has(item));\n\n  if (options && matches.length === 0) {\n    if (options.failglob === true) {\n      throw new Error(`No matches found for \"${patterns.join(', ')}\"`);\n    }\n\n    if (options.nonull === true || options.nullglob === true) {\n      return options.unescape ? patterns.map(p => p.replace(/\\\\/g, '')) : patterns;\n    }\n  }\n\n  return matches;\n};\n\n/**\n * Backwards compatibility\n */\n\nmicromatch.match = micromatch;\n\n/**\n * Returns a matcher function from the given glob `pattern` and `options`.\n * The returned function takes a string to match as its only argument and returns\n * true if the string is a match.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.matcher(pattern[, options]);\n *\n * const isMatch = mm.matcher('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @param {String} `pattern` Glob pattern\n * @param {Object} `options`\n * @return {Function} Returns a matcher function.\n * @api public\n */\n\nmicromatch.matcher = (pattern, options) => picomatch(pattern, options);\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.isMatch(string, patterns[, options]);\n *\n * console.log(mm.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(mm.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String} `str` The string to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `[options]` See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\nmicromatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Backwards compatibility\n */\n\nmicromatch.any = micromatch.isMatch;\n\n/**\n * Returns a list of strings that _**do not match any**_ of the given `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.not(list, patterns[, options]);\n *\n * console.log(mm.not(['a.a', 'b.b', 'c.c'], '*.a'));\n * //=> ['b.b', 'c.c']\n * ```\n * @param {Array} `list` Array of strings to match.\n * @param {String|Array} `patterns` One or more glob pattern to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Array} Returns an array of strings that **do not match** the given patterns.\n * @api public\n */\n\nmicromatch.not = (list, patterns, options = {}) => {\n  patterns = [].concat(patterns).map(String);\n  let result = new Set();\n  let items = [];\n\n  let onResult = state => {\n    if (options.onResult) options.onResult(state);\n    items.push(state.output);\n  };\n\n  let matches = new Set(micromatch(list, patterns, { ...options, onResult }));\n\n  for (let item of items) {\n    if (!matches.has(item)) {\n      result.add(item);\n    }\n  }\n  return [...result];\n};\n\n/**\n * Returns true if the given `string` contains the given pattern. Similar\n * to [.isMatch](#isMatch) but the pattern can match any part of the string.\n *\n * ```js\n * var mm = require('micromatch');\n * // mm.contains(string, pattern[, options]);\n *\n * console.log(mm.contains('aa/bb/cc', '*b'));\n * //=> true\n * console.log(mm.contains('aa/bb/cc', '*d'));\n * //=> false\n * ```\n * @param {String} `str` The string to match.\n * @param {String|Array} `patterns` Glob pattern to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any of the patterns matches any part of `str`.\n * @api public\n */\n\nmicromatch.contains = (str, pattern, options) => {\n  if (typeof str !== 'string') {\n    throw new TypeError(`Expected a string: \"${util.inspect(str)}\"`);\n  }\n\n  if (Array.isArray(pattern)) {\n    return pattern.some(p => micromatch.contains(str, p, options));\n  }\n\n  if (typeof pattern === 'string') {\n    if (isEmptyString(str) || isEmptyString(pattern)) {\n      return false;\n    }\n\n    if (str.includes(pattern) || (str.startsWith('./') && str.slice(2).includes(pattern))) {\n      return true;\n    }\n  }\n\n  return micromatch.isMatch(str, pattern, { ...options, contains: true });\n};\n\n/**\n * Filter the keys of the given object with the given `glob` pattern\n * and `options`. Does not attempt to match nested keys. If you need this feature,\n * use [glob-object][] instead.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.matchKeys(object, patterns[, options]);\n *\n * const obj = { aa: 'a', ab: 'b', ac: 'c' };\n * console.log(mm.matchKeys(obj, '*b'));\n * //=> { ab: 'b' }\n * ```\n * @param {Object} `object` The object with keys to filter.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Object} Returns an object with only keys that match the given patterns.\n * @api public\n */\n\nmicromatch.matchKeys = (obj, patterns, options) => {\n  if (!utils.isObject(obj)) {\n    throw new TypeError('Expected the first argument to be an object');\n  }\n  let keys = micromatch(Object.keys(obj), patterns, options);\n  let res = {};\n  for (let key of keys) res[key] = obj[key];\n  return res;\n};\n\n/**\n * Returns true if some of the strings in the given `list` match any of the given glob `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.some(list, patterns[, options]);\n *\n * console.log(mm.some(['foo.js', 'bar.js'], ['*.js', '!foo.js']));\n * // true\n * console.log(mm.some(['foo.js'], ['*.js', '!foo.js']));\n * // false\n * ```\n * @param {String|Array} `list` The string or array of strings to test. Returns as soon as the first match is found.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any `patterns` matches any of the strings in `list`\n * @api public\n */\n\nmicromatch.some = (list, patterns, options) => {\n  let items = [].concat(list);\n\n  for (let pattern of [].concat(patterns)) {\n    let isMatch = picomatch(String(pattern), options);\n    if (items.some(item => isMatch(item))) {\n      return true;\n    }\n  }\n  return false;\n};\n\n/**\n * Returns true if every string in the given `list` matches\n * any of the given glob `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.every(list, patterns[, options]);\n *\n * console.log(mm.every('foo.js', ['foo.js']));\n * // true\n * console.log(mm.every(['foo.js', 'bar.js'], ['*.js']));\n * // true\n * console.log(mm.every(['foo.js', 'bar.js'], ['*.js', '!foo.js']));\n * // false\n * console.log(mm.every(['foo.js'], ['*.js', '!foo.js']));\n * // false\n * ```\n * @param {String|Array} `list` The string or array of strings to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if all `patterns` matches all of the strings in `list`\n * @api public\n */\n\nmicromatch.every = (list, patterns, options) => {\n  let items = [].concat(list);\n\n  for (let pattern of [].concat(patterns)) {\n    let isMatch = picomatch(String(pattern), options);\n    if (!items.every(item => isMatch(item))) {\n      return false;\n    }\n  }\n  return true;\n};\n\n/**\n * Returns true if **all** of the given `patterns` match\n * the specified string.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.all(string, patterns[, options]);\n *\n * console.log(mm.all('foo.js', ['foo.js']));\n * // true\n *\n * console.log(mm.all('foo.js', ['*.js', '!foo.js']));\n * // false\n *\n * console.log(mm.all('foo.js', ['*.js', 'foo.js']));\n * // true\n *\n * console.log(mm.all('foo.js', ['*.js', 'f*', '*o*', '*o.js']));\n * // true\n * ```\n * @param {String|Array} `str` The string to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\nmicromatch.all = (str, patterns, options) => {\n  if (typeof str !== 'string') {\n    throw new TypeError(`Expected a string: \"${util.inspect(str)}\"`);\n  }\n\n  return [].concat(patterns).every(p => picomatch(p, options)(str));\n};\n\n/**\n * Returns an array of matches captured by `pattern` in `string, or `null` if the pattern did not match.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.capture(pattern, string[, options]);\n *\n * console.log(mm.capture('test/*.js', 'test/foo.js'));\n * //=> ['foo']\n * console.log(mm.capture('test/*.js', 'foo/bar.css'));\n * //=> null\n * ```\n * @param {String} `glob` Glob pattern to use for matching.\n * @param {String} `input` String to match\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Array|null} Returns an array of captures if the input matches the glob pattern, otherwise `null`.\n * @api public\n */\n\nmicromatch.capture = (glob, input, options) => {\n  let posix = utils.isWindows(options);\n  let regex = picomatch.makeRe(String(glob), { ...options, capture: true });\n  let match = regex.exec(posix ? utils.toPosixSlashes(input) : input);\n\n  if (match) {\n    return match.slice(1).map(v => v === void 0 ? '' : v);\n  }\n};\n\n/**\n * Create a regular expression from the given glob `pattern`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.makeRe(pattern[, options]);\n *\n * console.log(mm.makeRe('*.js'));\n * //=> /^(?:(\\.[\\\\\\/])?(?!\\.)(?=.)[^\\/]*?\\.js)$/\n * ```\n * @param {String} `pattern` A glob pattern to convert to regex.\n * @param {Object} `options`\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\nmicromatch.makeRe = (...args) => picomatch.makeRe(...args);\n\n/**\n * Scan a glob pattern to separate the pattern into segments. Used\n * by the [split](#split) method.\n *\n * ```js\n * const mm = require('micromatch');\n * const state = mm.scan(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\nmicromatch.scan = (...args) => picomatch.scan(...args);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const mm = require('micromatch');\n * const state = mm.parse(pattern[, options]);\n * ```\n * @param {String} `glob`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as regex source string.\n * @api public\n */\n\nmicromatch.parse = (patterns, options) => {\n  let res = [];\n  for (let pattern of [].concat(patterns || [])) {\n    for (let str of braces(String(pattern), options)) {\n      res.push(picomatch.parse(str, options));\n    }\n  }\n  return res;\n};\n\n/**\n * Process the given brace `pattern`.\n *\n * ```js\n * const { braces } = require('micromatch');\n * console.log(braces('foo/{a,b,c}/bar'));\n * //=> [ 'foo/(a|b|c)/bar' ]\n *\n * console.log(braces('foo/{a,b,c}/bar', { expand: true }));\n * //=> [ 'foo/a/bar', 'foo/b/bar', 'foo/c/bar' ]\n * ```\n * @param {String} `pattern` String with brace pattern to process.\n * @param {Object} `options` Any [options](#options) to change how expansion is performed. See the [braces][] library for all available options.\n * @return {Array}\n * @api public\n */\n\nmicromatch.braces = (pattern, options) => {\n  if (typeof pattern !== 'string') throw new TypeError('Expected a string');\n  if ((options && options.nobrace === true) || !hasBraces(pattern)) {\n    return [pattern];\n  }\n  return braces(pattern, options);\n};\n\n/**\n * Expand braces\n */\n\nmicromatch.braceExpand = (pattern, options) => {\n  if (typeof pattern !== 'string') throw new TypeError('Expected a string');\n  return micromatch.braces(pattern, { ...options, expand: true });\n};\n\n/**\n * Expose micromatch\n */\n\n// exposed for tests\nmicromatch.hasBraces = hasBraces;\nmodule.exports = micromatch;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isAbsolute = exports.partitionAbsoluteAndRelative = exports.removeDuplicateSlashes = exports.matchAny = exports.convertPatternsToRe = exports.makeRe = exports.getPatternParts = exports.expandBraceExpansion = exports.expandPatternsWithBraceExpansion = exports.isAffectDepthOfReadingPattern = exports.endsWithSlashGlobStar = exports.hasGlobStar = exports.getBaseDirectory = exports.isPatternRelatedToParentDirectory = exports.getPatternsOutsideCurrentDirectory = exports.getPatternsInsideCurrentDirectory = exports.getPositivePatterns = exports.getNegativePatterns = exports.isPositivePattern = exports.isNegativePattern = exports.convertToNegativePattern = exports.convertToPositivePattern = exports.isDynamicPattern = exports.isStaticPattern = void 0;\nconst path = require(\"path\");\nconst globParent = require(\"glob-parent\");\nconst micromatch = require(\"micromatch\");\nconst GLOBSTAR = '**';\nconst ESCAPE_SYMBOL = '\\\\';\nconst COMMON_GLOB_SYMBOLS_RE = /[*?]|^!/;\nconst REGEX_CHARACTER_CLASS_SYMBOLS_RE = /\\[[^[]*]/;\nconst REGEX_GROUP_SYMBOLS_RE = /(?:^|[^!*+?@])\\([^(]*\\|[^|]*\\)/;\nconst GLOB_EXTENSION_SYMBOLS_RE = /[!*+?@]\\([^(]*\\)/;\nconst BRACE_EXPANSION_SEPARATORS_RE = /,|\\.\\./;\n/**\n * Matches a sequence of two or more consecutive slashes, excluding the first two slashes at the beginning of the string.\n * The latter is due to the presence of the device path at the beginning of the UNC path.\n */\nconst DOUBLE_SLASH_RE = /(?!^)\\/{2,}/g;\nfunction isStaticPattern(pattern, options = {}) {\n    return !isDynamicPattern(pattern, options);\n}\nexports.isStaticPattern = isStaticPattern;\nfunction isDynamicPattern(pattern, options = {}) {\n    /**\n     * A special case with an empty string is necessary for matching patterns that start with a forward slash.\n     * An empty string cannot be a dynamic pattern.\n     * For example, the pattern `/lib/*` will be spread into parts: '', 'lib', '*'.\n     */\n    if (pattern === '') {\n        return false;\n    }\n    /**\n     * When the `caseSensitiveMatch` option is disabled, all patterns must be marked as dynamic, because we cannot check\n     * filepath directly (without read directory).\n     */\n    if (options.caseSensitiveMatch === false || pattern.includes(ESCAPE_SYMBOL)) {\n        return true;\n    }\n    if (COMMON_GLOB_SYMBOLS_RE.test(pattern) || REGEX_CHARACTER_CLASS_SYMBOLS_RE.test(pattern) || REGEX_GROUP_SYMBOLS_RE.test(pattern)) {\n        return true;\n    }\n    if (options.extglob !== false && GLOB_EXTENSION_SYMBOLS_RE.test(pattern)) {\n        return true;\n    }\n    if (options.braceExpansion !== false && hasBraceExpansion(pattern)) {\n        return true;\n    }\n    return false;\n}\nexports.isDynamicPattern = isDynamicPattern;\nfunction hasBraceExpansion(pattern) {\n    const openingBraceIndex = pattern.indexOf('{');\n    if (openingBraceIndex === -1) {\n        return false;\n    }\n    const closingBraceIndex = pattern.indexOf('}', openingBraceIndex + 1);\n    if (closingBraceIndex === -1) {\n        return false;\n    }\n    const braceContent = pattern.slice(openingBraceIndex, closingBraceIndex);\n    return BRACE_EXPANSION_SEPARATORS_RE.test(braceContent);\n}\nfunction convertToPositivePattern(pattern) {\n    return isNegativePattern(pattern) ? pattern.slice(1) : pattern;\n}\nexports.convertToPositivePattern = convertToPositivePattern;\nfunction convertToNegativePattern(pattern) {\n    return '!' + pattern;\n}\nexports.convertToNegativePattern = convertToNegativePattern;\nfunction isNegativePattern(pattern) {\n    return pattern.startsWith('!') && pattern[1] !== '(';\n}\nexports.isNegativePattern = isNegativePattern;\nfunction isPositivePattern(pattern) {\n    return !isNegativePattern(pattern);\n}\nexports.isPositivePattern = isPositivePattern;\nfunction getNegativePatterns(patterns) {\n    return patterns.filter(isNegativePattern);\n}\nexports.getNegativePatterns = getNegativePatterns;\nfunction getPositivePatterns(patterns) {\n    return patterns.filter(isPositivePattern);\n}\nexports.getPositivePatterns = getPositivePatterns;\n/**\n * Returns patterns that can be applied inside the current directory.\n *\n * @example\n * // ['./*', '*', 'a/*']\n * getPatternsInsideCurrentDirectory(['./*', '*', 'a/*', '../*', './../*'])\n */\nfunction getPatternsInsideCurrentDirectory(patterns) {\n    return patterns.filter((pattern) => !isPatternRelatedToParentDirectory(pattern));\n}\nexports.getPatternsInsideCurrentDirectory = getPatternsInsideCurrentDirectory;\n/**\n * Returns patterns to be expanded relative to (outside) the current directory.\n *\n * @example\n * // ['../*', './../*']\n * getPatternsInsideCurrentDirectory(['./*', '*', 'a/*', '../*', './../*'])\n */\nfunction getPatternsOutsideCurrentDirectory(patterns) {\n    return patterns.filter(isPatternRelatedToParentDirectory);\n}\nexports.getPatternsOutsideCurrentDirectory = getPatternsOutsideCurrentDirectory;\nfunction isPatternRelatedToParentDirectory(pattern) {\n    return pattern.startsWith('..') || pattern.startsWith('./..');\n}\nexports.isPatternRelatedToParentDirectory = isPatternRelatedToParentDirectory;\nfunction getBaseDirectory(pattern) {\n    return globParent(pattern, { flipBackslashes: false });\n}\nexports.getBaseDirectory = getBaseDirectory;\nfunction hasGlobStar(pattern) {\n    return pattern.includes(GLOBSTAR);\n}\nexports.hasGlobStar = hasGlobStar;\nfunction endsWithSlashGlobStar(pattern) {\n    return pattern.endsWith('/' + GLOBSTAR);\n}\nexports.endsWithSlashGlobStar = endsWithSlashGlobStar;\nfunction isAffectDepthOfReadingPattern(pattern) {\n    const basename = path.basename(pattern);\n    return endsWithSlashGlobStar(pattern) || isStaticPattern(basename);\n}\nexports.isAffectDepthOfReadingPattern = isAffectDepthOfReadingPattern;\nfunction expandPatternsWithBraceExpansion(patterns) {\n    return patterns.reduce((collection, pattern) => {\n        return collection.concat(expandBraceExpansion(pattern));\n    }, []);\n}\nexports.expandPatternsWithBraceExpansion = expandPatternsWithBraceExpansion;\nfunction expandBraceExpansion(pattern) {\n    const patterns = micromatch.braces(pattern, { expand: true, nodupes: true, keepEscaping: true });\n    /**\n     * Sort the patterns by length so that the same depth patterns are processed side by side.\n     * `a/{b,}/{c,}/*` – `['a///*', 'a/b//*', 'a//c/*', 'a/b/c/*']`\n     */\n    patterns.sort((a, b) => a.length - b.length);\n    /**\n     * Micromatch can return an empty string in the case of patterns like `{a,}`.\n     */\n    return patterns.filter((pattern) => pattern !== '');\n}\nexports.expandBraceExpansion = expandBraceExpansion;\nfunction getPatternParts(pattern, options) {\n    let { parts } = micromatch.scan(pattern, Object.assign(Object.assign({}, options), { parts: true }));\n    /**\n     * The scan method returns an empty array in some cases.\n     * See micromatch/picomatch#58 for more details.\n     */\n    if (parts.length === 0) {\n        parts = [pattern];\n    }\n    /**\n     * The scan method does not return an empty part for the pattern with a forward slash.\n     * This is another part of micromatch/picomatch#58.\n     */\n    if (parts[0].startsWith('/')) {\n        parts[0] = parts[0].slice(1);\n        parts.unshift('');\n    }\n    return parts;\n}\nexports.getPatternParts = getPatternParts;\nfunction makeRe(pattern, options) {\n    return micromatch.makeRe(pattern, options);\n}\nexports.makeRe = makeRe;\nfunction convertPatternsToRe(patterns, options) {\n    return patterns.map((pattern) => makeRe(pattern, options));\n}\nexports.convertPatternsToRe = convertPatternsToRe;\nfunction matchAny(entry, patternsRe) {\n    return patternsRe.some((patternRe) => patternRe.test(entry));\n}\nexports.matchAny = matchAny;\n/**\n * This package only works with forward slashes as a path separator.\n * Because of this, we cannot use the standard `path.normalize` method, because on Windows platform it will use of backslashes.\n */\nfunction removeDuplicateSlashes(pattern) {\n    return pattern.replace(DOUBLE_SLASH_RE, '/');\n}\nexports.removeDuplicateSlashes = removeDuplicateSlashes;\nfunction partitionAbsoluteAndRelative(patterns) {\n    const absolute = [];\n    const relative = [];\n    for (const pattern of patterns) {\n        if (isAbsolute(pattern)) {\n            absolute.push(pattern);\n        }\n        else {\n            relative.push(pattern);\n        }\n    }\n    return [absolute, relative];\n}\nexports.partitionAbsoluteAndRelative = partitionAbsoluteAndRelative;\nfunction isAbsolute(pattern) {\n    return path.isAbsolute(pattern);\n}\nexports.isAbsolute = isAbsolute;\n","'use strict'\n/*\n * merge2\n * https://github.com/teambition/merge2\n *\n * Copyright (c) 2014-2020 Teambition\n * Licensed under the MIT license.\n */\nconst Stream = require('stream')\nconst PassThrough = Stream.PassThrough\nconst slice = Array.prototype.slice\n\nmodule.exports = merge2\n\nfunction merge2 () {\n  const streamsQueue = []\n  const args = slice.call(arguments)\n  let merging = false\n  let options = args[args.length - 1]\n\n  if (options && !Array.isArray(options) && options.pipe == null) {\n    args.pop()\n  } else {\n    options = {}\n  }\n\n  const doEnd = options.end !== false\n  const doPipeError = options.pipeError === true\n  if (options.objectMode == null) {\n    options.objectMode = true\n  }\n  if (options.highWaterMark == null) {\n    options.highWaterMark = 64 * 1024\n  }\n  const mergedStream = PassThrough(options)\n\n  function addStream () {\n    for (let i = 0, len = arguments.length; i < len; i++) {\n      streamsQueue.push(pauseStreams(arguments[i], options))\n    }\n    mergeStream()\n    return this\n  }\n\n  function mergeStream () {\n    if (merging) {\n      return\n    }\n    merging = true\n\n    let streams = streamsQueue.shift()\n    if (!streams) {\n      process.nextTick(endStream)\n      return\n    }\n    if (!Array.isArray(streams)) {\n      streams = [streams]\n    }\n\n    let pipesCount = streams.length + 1\n\n    function next () {\n      if (--pipesCount > 0) {\n        return\n      }\n      merging = false\n      mergeStream()\n    }\n\n    function pipe (stream) {\n      function onend () {\n        stream.removeListener('merge2UnpipeEnd', onend)\n        stream.removeListener('end', onend)\n        if (doPipeError) {\n          stream.removeListener('error', onerror)\n        }\n        next()\n      }\n      function onerror (err) {\n        mergedStream.emit('error', err)\n      }\n      // skip ended stream\n      if (stream._readableState.endEmitted) {\n        return next()\n      }\n\n      stream.on('merge2UnpipeEnd', onend)\n      stream.on('end', onend)\n\n      if (doPipeError) {\n        stream.on('error', onerror)\n      }\n\n      stream.pipe(mergedStream, { end: false })\n      // compatible for old stream\n      stream.resume()\n    }\n\n    for (let i = 0; i < streams.length; i++) {\n      pipe(streams[i])\n    }\n\n    next()\n  }\n\n  function endStream () {\n    merging = false\n    // emit 'queueDrain' when all streams merged.\n    mergedStream.emit('queueDrain')\n    if (doEnd) {\n      mergedStream.end()\n    }\n  }\n\n  mergedStream.setMaxListeners(0)\n  mergedStream.add = addStream\n  mergedStream.on('unpipe', function (stream) {\n    stream.emit('merge2UnpipeEnd')\n  })\n\n  if (args.length) {\n    addStream.apply(null, args)\n  }\n  return mergedStream\n}\n\n// check and pause streams for pipe.\nfunction pauseStreams (streams, options) {\n  if (!Array.isArray(streams)) {\n    // Backwards-compat with old-style streams\n    if (!streams._readableState && streams.pipe) {\n      streams = streams.pipe(PassThrough(options))\n    }\n    if (!streams._readableState || !streams.pause || !streams.pipe) {\n      throw new Error('Only readable stream can be merged.')\n    }\n    streams.pause()\n  } else {\n    for (let i = 0, len = streams.length; i < len; i++) {\n      streams[i] = pauseStreams(streams[i], options)\n    }\n  }\n  return streams\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.merge = void 0;\nconst merge2 = require(\"merge2\");\nfunction merge(streams) {\n    const mergedStream = merge2(streams);\n    streams.forEach((stream) => {\n        stream.once('error', (error) => mergedStream.emit('error', error));\n    });\n    mergedStream.once('close', () => propagateCloseEventToSources(streams));\n    mergedStream.once('end', () => propagateCloseEventToSources(streams));\n    return mergedStream;\n}\nexports.merge = merge;\nfunction propagateCloseEventToSources(streams) {\n    streams.forEach((stream) => stream.emit('close'));\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isEmpty = exports.isString = void 0;\nfunction isString(input) {\n    return typeof input === 'string';\n}\nexports.isString = isString;\nfunction isEmpty(input) {\n    return input === '';\n}\nexports.isEmpty = isEmpty;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.string = exports.stream = exports.pattern = exports.path = exports.fs = exports.errno = exports.array = void 0;\nconst array = require(\"./array\");\nexports.array = array;\nconst errno = require(\"./errno\");\nexports.errno = errno;\nconst fs = require(\"./fs\");\nexports.fs = fs;\nconst path = require(\"./path\");\nexports.path = path;\nconst pattern = require(\"./pattern\");\nexports.pattern = pattern;\nconst stream = require(\"./stream\");\nexports.stream = stream;\nconst string = require(\"./string\");\nexports.string = string;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.convertPatternGroupToTask = exports.convertPatternGroupsToTasks = exports.groupPatternsByBaseDirectory = exports.getNegativePatternsAsPositive = exports.getPositivePatterns = exports.convertPatternsToTasks = exports.generate = void 0;\nconst utils = require(\"../utils\");\nfunction generate(input, settings) {\n    const patterns = processPatterns(input, settings);\n    const ignore = processPatterns(settings.ignore, settings);\n    const positivePatterns = getPositivePatterns(patterns);\n    const negativePatterns = getNegativePatternsAsPositive(patterns, ignore);\n    const staticPatterns = positivePatterns.filter((pattern) => utils.pattern.isStaticPattern(pattern, settings));\n    const dynamicPatterns = positivePatterns.filter((pattern) => utils.pattern.isDynamicPattern(pattern, settings));\n    const staticTasks = convertPatternsToTasks(staticPatterns, negativePatterns, /* dynamic */ false);\n    const dynamicTasks = convertPatternsToTasks(dynamicPatterns, negativePatterns, /* dynamic */ true);\n    return staticTasks.concat(dynamicTasks);\n}\nexports.generate = generate;\nfunction processPatterns(input, settings) {\n    let patterns = input;\n    /**\n     * The original pattern like `{,*,**,a/*}` can lead to problems checking the depth when matching entry\n     * and some problems with the micromatch package (see fast-glob issues: #365, #394).\n     *\n     * To solve this problem, we expand all patterns containing brace expansion. This can lead to a slight slowdown\n     * in matching in the case of a large set of patterns after expansion.\n     */\n    if (settings.braceExpansion) {\n        patterns = utils.pattern.expandPatternsWithBraceExpansion(patterns);\n    }\n    /**\n     * If the `baseNameMatch` option is enabled, we must add globstar to patterns, so that they can be used\n     * at any nesting level.\n     *\n     * We do this here, because otherwise we have to complicate the filtering logic. For example, we need to change\n     * the pattern in the filter before creating a regular expression. There is no need to change the patterns\n     * in the application. Only on the input.\n     */\n    if (settings.baseNameMatch) {\n        patterns = patterns.map((pattern) => pattern.includes('/') ? pattern : `**/${pattern}`);\n    }\n    /**\n     * This method also removes duplicate slashes that may have been in the pattern or formed as a result of expansion.\n     */\n    return patterns.map((pattern) => utils.pattern.removeDuplicateSlashes(pattern));\n}\n/**\n * Returns tasks grouped by basic pattern directories.\n *\n * Patterns that can be found inside (`./`) and outside (`../`) the current directory are handled separately.\n * This is necessary because directory traversal starts at the base directory and goes deeper.\n */\nfunction convertPatternsToTasks(positive, negative, dynamic) {\n    const tasks = [];\n    const patternsOutsideCurrentDirectory = utils.pattern.getPatternsOutsideCurrentDirectory(positive);\n    const patternsInsideCurrentDirectory = utils.pattern.getPatternsInsideCurrentDirectory(positive);\n    const outsideCurrentDirectoryGroup = groupPatternsByBaseDirectory(patternsOutsideCurrentDirectory);\n    const insideCurrentDirectoryGroup = groupPatternsByBaseDirectory(patternsInsideCurrentDirectory);\n    tasks.push(...convertPatternGroupsToTasks(outsideCurrentDirectoryGroup, negative, dynamic));\n    /*\n     * For the sake of reducing future accesses to the file system, we merge all tasks within the current directory\n     * into a global task, if at least one pattern refers to the root (`.`). In this case, the global task covers the rest.\n     */\n    if ('.' in insideCurrentDirectoryGroup) {\n        tasks.push(convertPatternGroupToTask('.', patternsInsideCurrentDirectory, negative, dynamic));\n    }\n    else {\n        tasks.push(...convertPatternGroupsToTasks(insideCurrentDirectoryGroup, negative, dynamic));\n    }\n    return tasks;\n}\nexports.convertPatternsToTasks = convertPatternsToTasks;\nfunction getPositivePatterns(patterns) {\n    return utils.pattern.getPositivePatterns(patterns);\n}\nexports.getPositivePatterns = getPositivePatterns;\nfunction getNegativePatternsAsPositive(patterns, ignore) {\n    const negative = utils.pattern.getNegativePatterns(patterns).concat(ignore);\n    const positive = negative.map(utils.pattern.convertToPositivePattern);\n    return positive;\n}\nexports.getNegativePatternsAsPositive = getNegativePatternsAsPositive;\nfunction groupPatternsByBaseDirectory(patterns) {\n    const group = {};\n    return patterns.reduce((collection, pattern) => {\n        const base = utils.pattern.getBaseDirectory(pattern);\n        if (base in collection) {\n            collection[base].push(pattern);\n        }\n        else {\n            collection[base] = [pattern];\n        }\n        return collection;\n    }, group);\n}\nexports.groupPatternsByBaseDirectory = groupPatternsByBaseDirectory;\nfunction convertPatternGroupsToTasks(positive, negative, dynamic) {\n    return Object.keys(positive).map((base) => {\n        return convertPatternGroupToTask(base, positive[base], negative, dynamic);\n    });\n}\nexports.convertPatternGroupsToTasks = convertPatternGroupsToTasks;\nfunction convertPatternGroupToTask(base, positive, negative, dynamic) {\n    return {\n        dynamic,\n        positive,\n        negative,\n        base,\n        patterns: [].concat(positive, negative.map(utils.pattern.convertToNegativePattern))\n    };\n}\nexports.convertPatternGroupToTask = convertPatternGroupToTask;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.read = void 0;\nfunction read(path, settings, callback) {\n    settings.fs.lstat(path, (lstatError, lstat) => {\n        if (lstatError !== null) {\n            callFailureCallback(callback, lstatError);\n            return;\n        }\n        if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {\n            callSuccessCallback(callback, lstat);\n            return;\n        }\n        settings.fs.stat(path, (statError, stat) => {\n            if (statError !== null) {\n                if (settings.throwErrorOnBrokenSymbolicLink) {\n                    callFailureCallback(callback, statError);\n                    return;\n                }\n                callSuccessCallback(callback, lstat);\n                return;\n            }\n            if (settings.markSymbolicLink) {\n                stat.isSymbolicLink = () => true;\n            }\n            callSuccessCallback(callback, stat);\n        });\n    });\n}\nexports.read = read;\nfunction callFailureCallback(callback, error) {\n    callback(error);\n}\nfunction callSuccessCallback(callback, result) {\n    callback(null, result);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.read = void 0;\nfunction read(path, settings) {\n    const lstat = settings.fs.lstatSync(path);\n    if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {\n        return lstat;\n    }\n    try {\n        const stat = settings.fs.statSync(path);\n        if (settings.markSymbolicLink) {\n            stat.isSymbolicLink = () => true;\n        }\n        return stat;\n    }\n    catch (error) {\n        if (!settings.throwErrorOnBrokenSymbolicLink) {\n            return lstat;\n        }\n        throw error;\n    }\n}\nexports.read = read;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = void 0;\nconst fs = require(\"fs\");\nexports.FILE_SYSTEM_ADAPTER = {\n    lstat: fs.lstat,\n    stat: fs.stat,\n    lstatSync: fs.lstatSync,\n    statSync: fs.statSync\n};\nfunction createFileSystemAdapter(fsMethods) {\n    if (fsMethods === undefined) {\n        return exports.FILE_SYSTEM_ADAPTER;\n    }\n    return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);\n}\nexports.createFileSystemAdapter = createFileSystemAdapter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fs = require(\"./adapters/fs\");\nclass Settings {\n    constructor(_options = {}) {\n        this._options = _options;\n        this.followSymbolicLink = this._getValue(this._options.followSymbolicLink, true);\n        this.fs = fs.createFileSystemAdapter(this._options.fs);\n        this.markSymbolicLink = this._getValue(this._options.markSymbolicLink, false);\n        this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);\n    }\n    _getValue(option, value) {\n        return option !== null && option !== void 0 ? option : value;\n    }\n}\nexports.default = Settings;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.statSync = exports.stat = exports.Settings = void 0;\nconst async = require(\"./providers/async\");\nconst sync = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nexports.Settings = settings_1.default;\nfunction stat(path, optionsOrSettingsOrCallback, callback) {\n    if (typeof optionsOrSettingsOrCallback === 'function') {\n        async.read(path, getSettings(), optionsOrSettingsOrCallback);\n        return;\n    }\n    async.read(path, getSettings(optionsOrSettingsOrCallback), callback);\n}\nexports.stat = stat;\nfunction statSync(path, optionsOrSettings) {\n    const settings = getSettings(optionsOrSettings);\n    return sync.read(path, settings);\n}\nexports.statSync = statSync;\nfunction getSettings(settingsOrOptions = {}) {\n    if (settingsOrOptions instanceof settings_1.default) {\n        return settingsOrOptions;\n    }\n    return new settings_1.default(settingsOrOptions);\n}\n","/*! queue-microtask. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\nlet promise\n\nmodule.exports = typeof queueMicrotask === 'function'\n  ? queueMicrotask.bind(typeof window !== 'undefined' ? window : global)\n  // reuse resolved promise, and allocate it lazily\n  : cb => (promise || (promise = Promise.resolve()))\n    .then(cb)\n    .catch(err => setTimeout(() => { throw err }, 0))\n","/*! run-parallel. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\nmodule.exports = runParallel\n\nconst queueMicrotask = require('queue-microtask')\n\nfunction runParallel (tasks, cb) {\n  let results, pending, keys\n  let isSync = true\n\n  if (Array.isArray(tasks)) {\n    results = []\n    pending = tasks.length\n  } else {\n    keys = Object.keys(tasks)\n    results = {}\n    pending = keys.length\n  }\n\n  function done (err) {\n    function end () {\n      if (cb) cb(err, results)\n      cb = null\n    }\n    if (isSync) queueMicrotask(end)\n    else end()\n  }\n\n  function each (i, err, result) {\n    results[i] = result\n    if (--pending === 0 || err) {\n      done(err)\n    }\n  }\n\n  if (!pending) {\n    // empty\n    done(null)\n  } else if (keys) {\n    // object\n    keys.forEach(function (key) {\n      tasks[key](function (err, result) { each(key, err, result) })\n    })\n  } else {\n    // array\n    tasks.forEach(function (task, i) {\n      task(function (err, result) { each(i, err, result) })\n    })\n  }\n\n  isSync = false\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IS_SUPPORT_READDIR_WITH_FILE_TYPES = void 0;\nconst NODE_PROCESS_VERSION_PARTS = process.versions.node.split('.');\nif (NODE_PROCESS_VERSION_PARTS[0] === undefined || NODE_PROCESS_VERSION_PARTS[1] === undefined) {\n    throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);\n}\nconst MAJOR_VERSION = Number.parseInt(NODE_PROCESS_VERSION_PARTS[0], 10);\nconst MINOR_VERSION = Number.parseInt(NODE_PROCESS_VERSION_PARTS[1], 10);\nconst SUPPORTED_MAJOR_VERSION = 10;\nconst SUPPORTED_MINOR_VERSION = 10;\nconst IS_MATCHED_BY_MAJOR = MAJOR_VERSION > SUPPORTED_MAJOR_VERSION;\nconst IS_MATCHED_BY_MAJOR_AND_MINOR = MAJOR_VERSION === SUPPORTED_MAJOR_VERSION && MINOR_VERSION >= SUPPORTED_MINOR_VERSION;\n/**\n * IS `true` for Node.js 10.10 and greater.\n */\nexports.IS_SUPPORT_READDIR_WITH_FILE_TYPES = IS_MATCHED_BY_MAJOR || IS_MATCHED_BY_MAJOR_AND_MINOR;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createDirentFromStats = void 0;\nclass DirentFromStats {\n    constructor(name, stats) {\n        this.name = name;\n        this.isBlockDevice = stats.isBlockDevice.bind(stats);\n        this.isCharacterDevice = stats.isCharacterDevice.bind(stats);\n        this.isDirectory = stats.isDirectory.bind(stats);\n        this.isFIFO = stats.isFIFO.bind(stats);\n        this.isFile = stats.isFile.bind(stats);\n        this.isSocket = stats.isSocket.bind(stats);\n        this.isSymbolicLink = stats.isSymbolicLink.bind(stats);\n    }\n}\nfunction createDirentFromStats(name, stats) {\n    return new DirentFromStats(name, stats);\n}\nexports.createDirentFromStats = createDirentFromStats;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fs = void 0;\nconst fs = require(\"./fs\");\nexports.fs = fs;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.joinPathSegments = void 0;\nfunction joinPathSegments(a, b, separator) {\n    /**\n     * The correct handling of cases when the first segment is a root (`/`, `C:/`) or UNC path (`//?/C:/`).\n     */\n    if (a.endsWith(separator)) {\n        return a + b;\n    }\n    return a + separator + b;\n}\nexports.joinPathSegments = joinPathSegments;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.readdir = exports.readdirWithFileTypes = exports.read = void 0;\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst rpl = require(\"run-parallel\");\nconst constants_1 = require(\"../constants\");\nconst utils = require(\"../utils\");\nconst common = require(\"./common\");\nfunction read(directory, settings, callback) {\n    if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {\n        readdirWithFileTypes(directory, settings, callback);\n        return;\n    }\n    readdir(directory, settings, callback);\n}\nexports.read = read;\nfunction readdirWithFileTypes(directory, settings, callback) {\n    settings.fs.readdir(directory, { withFileTypes: true }, (readdirError, dirents) => {\n        if (readdirError !== null) {\n            callFailureCallback(callback, readdirError);\n            return;\n        }\n        const entries = dirents.map((dirent) => ({\n            dirent,\n            name: dirent.name,\n            path: common.joinPathSegments(directory, dirent.name, settings.pathSegmentSeparator)\n        }));\n        if (!settings.followSymbolicLinks) {\n            callSuccessCallback(callback, entries);\n            return;\n        }\n        const tasks = entries.map((entry) => makeRplTaskEntry(entry, settings));\n        rpl(tasks, (rplError, rplEntries) => {\n            if (rplError !== null) {\n                callFailureCallback(callback, rplError);\n                return;\n            }\n            callSuccessCallback(callback, rplEntries);\n        });\n    });\n}\nexports.readdirWithFileTypes = readdirWithFileTypes;\nfunction makeRplTaskEntry(entry, settings) {\n    return (done) => {\n        if (!entry.dirent.isSymbolicLink()) {\n            done(null, entry);\n            return;\n        }\n        settings.fs.stat(entry.path, (statError, stats) => {\n            if (statError !== null) {\n                if (settings.throwErrorOnBrokenSymbolicLink) {\n                    done(statError);\n                    return;\n                }\n                done(null, entry);\n                return;\n            }\n            entry.dirent = utils.fs.createDirentFromStats(entry.name, stats);\n            done(null, entry);\n        });\n    };\n}\nfunction readdir(directory, settings, callback) {\n    settings.fs.readdir(directory, (readdirError, names) => {\n        if (readdirError !== null) {\n            callFailureCallback(callback, readdirError);\n            return;\n        }\n        const tasks = names.map((name) => {\n            const path = common.joinPathSegments(directory, name, settings.pathSegmentSeparator);\n            return (done) => {\n                fsStat.stat(path, settings.fsStatSettings, (error, stats) => {\n                    if (error !== null) {\n                        done(error);\n                        return;\n                    }\n                    const entry = {\n                        name,\n                        path,\n                        dirent: utils.fs.createDirentFromStats(name, stats)\n                    };\n                    if (settings.stats) {\n                        entry.stats = stats;\n                    }\n                    done(null, entry);\n                });\n            };\n        });\n        rpl(tasks, (rplError, entries) => {\n            if (rplError !== null) {\n                callFailureCallback(callback, rplError);\n                return;\n            }\n            callSuccessCallback(callback, entries);\n        });\n    });\n}\nexports.readdir = readdir;\nfunction callFailureCallback(callback, error) {\n    callback(error);\n}\nfunction callSuccessCallback(callback, result) {\n    callback(null, result);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.readdir = exports.readdirWithFileTypes = exports.read = void 0;\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst constants_1 = require(\"../constants\");\nconst utils = require(\"../utils\");\nconst common = require(\"./common\");\nfunction read(directory, settings) {\n    if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {\n        return readdirWithFileTypes(directory, settings);\n    }\n    return readdir(directory, settings);\n}\nexports.read = read;\nfunction readdirWithFileTypes(directory, settings) {\n    const dirents = settings.fs.readdirSync(directory, { withFileTypes: true });\n    return dirents.map((dirent) => {\n        const entry = {\n            dirent,\n            name: dirent.name,\n            path: common.joinPathSegments(directory, dirent.name, settings.pathSegmentSeparator)\n        };\n        if (entry.dirent.isSymbolicLink() && settings.followSymbolicLinks) {\n            try {\n                const stats = settings.fs.statSync(entry.path);\n                entry.dirent = utils.fs.createDirentFromStats(entry.name, stats);\n            }\n            catch (error) {\n                if (settings.throwErrorOnBrokenSymbolicLink) {\n                    throw error;\n                }\n            }\n        }\n        return entry;\n    });\n}\nexports.readdirWithFileTypes = readdirWithFileTypes;\nfunction readdir(directory, settings) {\n    const names = settings.fs.readdirSync(directory);\n    return names.map((name) => {\n        const entryPath = common.joinPathSegments(directory, name, settings.pathSegmentSeparator);\n        const stats = fsStat.statSync(entryPath, settings.fsStatSettings);\n        const entry = {\n            name,\n            path: entryPath,\n            dirent: utils.fs.createDirentFromStats(name, stats)\n        };\n        if (settings.stats) {\n            entry.stats = stats;\n        }\n        return entry;\n    });\n}\nexports.readdir = readdir;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = void 0;\nconst fs = require(\"fs\");\nexports.FILE_SYSTEM_ADAPTER = {\n    lstat: fs.lstat,\n    stat: fs.stat,\n    lstatSync: fs.lstatSync,\n    statSync: fs.statSync,\n    readdir: fs.readdir,\n    readdirSync: fs.readdirSync\n};\nfunction createFileSystemAdapter(fsMethods) {\n    if (fsMethods === undefined) {\n        return exports.FILE_SYSTEM_ADAPTER;\n    }\n    return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);\n}\nexports.createFileSystemAdapter = createFileSystemAdapter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst fs = require(\"./adapters/fs\");\nclass Settings {\n    constructor(_options = {}) {\n        this._options = _options;\n        this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, false);\n        this.fs = fs.createFileSystemAdapter(this._options.fs);\n        this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep);\n        this.stats = this._getValue(this._options.stats, false);\n        this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);\n        this.fsStatSettings = new fsStat.Settings({\n            followSymbolicLink: this.followSymbolicLinks,\n            fs: this.fs,\n            throwErrorOnBrokenSymbolicLink: this.throwErrorOnBrokenSymbolicLink\n        });\n    }\n    _getValue(option, value) {\n        return option !== null && option !== void 0 ? option : value;\n    }\n}\nexports.default = Settings;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Settings = exports.scandirSync = exports.scandir = void 0;\nconst async = require(\"./providers/async\");\nconst sync = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nexports.Settings = settings_1.default;\nfunction scandir(path, optionsOrSettingsOrCallback, callback) {\n    if (typeof optionsOrSettingsOrCallback === 'function') {\n        async.read(path, getSettings(), optionsOrSettingsOrCallback);\n        return;\n    }\n    async.read(path, getSettings(optionsOrSettingsOrCallback), callback);\n}\nexports.scandir = scandir;\nfunction scandirSync(path, optionsOrSettings) {\n    const settings = getSettings(optionsOrSettings);\n    return sync.read(path, settings);\n}\nexports.scandirSync = scandirSync;\nfunction getSettings(settingsOrOptions = {}) {\n    if (settingsOrOptions instanceof settings_1.default) {\n        return settingsOrOptions;\n    }\n    return new settings_1.default(settingsOrOptions);\n}\n","'use strict'\n\nfunction reusify (Constructor) {\n  var head = new Constructor()\n  var tail = head\n\n  function get () {\n    var current = head\n\n    if (current.next) {\n      head = current.next\n    } else {\n      head = new Constructor()\n      tail = head\n    }\n\n    current.next = null\n\n    return current\n  }\n\n  function release (obj) {\n    tail.next = obj\n    tail = obj\n  }\n\n  return {\n    get: get,\n    release: release\n  }\n}\n\nmodule.exports = reusify\n","'use strict'\n\n/* eslint-disable no-var */\n\nvar reusify = require('reusify')\n\nfunction fastqueue (context, worker, _concurrency) {\n  if (typeof context === 'function') {\n    _concurrency = worker\n    worker = context\n    context = null\n  }\n\n  if (!(_concurrency >= 1)) {\n    throw new Error('fastqueue concurrency must be equal to or greater than 1')\n  }\n\n  var cache = reusify(Task)\n  var queueHead = null\n  var queueTail = null\n  var _running = 0\n  var errorHandler = null\n\n  var self = {\n    push: push,\n    drain: noop,\n    saturated: noop,\n    pause: pause,\n    paused: false,\n\n    get concurrency () {\n      return _concurrency\n    },\n    set concurrency (value) {\n      if (!(value >= 1)) {\n        throw new Error('fastqueue concurrency must be equal to or greater than 1')\n      }\n      _concurrency = value\n\n      if (self.paused) return\n      for (; queueHead && _running < _concurrency;) {\n        _running++\n        release()\n      }\n    },\n\n    running: running,\n    resume: resume,\n    idle: idle,\n    length: length,\n    getQueue: getQueue,\n    unshift: unshift,\n    empty: noop,\n    kill: kill,\n    killAndDrain: killAndDrain,\n    error: error,\n    abort: abort\n  }\n\n  return self\n\n  function running () {\n    return _running\n  }\n\n  function pause () {\n    self.paused = true\n  }\n\n  function length () {\n    var current = queueHead\n    var counter = 0\n\n    while (current) {\n      current = current.next\n      counter++\n    }\n\n    return counter\n  }\n\n  function getQueue () {\n    var current = queueHead\n    var tasks = []\n\n    while (current) {\n      tasks.push(current.value)\n      current = current.next\n    }\n\n    return tasks\n  }\n\n  function resume () {\n    if (!self.paused) return\n    self.paused = false\n    if (queueHead === null) {\n      _running++\n      release()\n      return\n    }\n    for (; queueHead && _running < _concurrency;) {\n      _running++\n      release()\n    }\n  }\n\n  function idle () {\n    return _running === 0 && self.length() === 0\n  }\n\n  function push (value, done) {\n    var current = cache.get()\n\n    current.context = context\n    current.release = release\n    current.value = value\n    current.callback = done || noop\n    current.errorHandler = errorHandler\n\n    if (_running >= _concurrency || self.paused) {\n      if (queueTail) {\n        queueTail.next = current\n        queueTail = current\n      } else {\n        queueHead = current\n        queueTail = current\n        self.saturated()\n      }\n    } else {\n      _running++\n      worker.call(context, current.value, current.worked)\n    }\n  }\n\n  function unshift (value, done) {\n    var current = cache.get()\n\n    current.context = context\n    current.release = release\n    current.value = value\n    current.callback = done || noop\n    current.errorHandler = errorHandler\n\n    if (_running >= _concurrency || self.paused) {\n      if (queueHead) {\n        current.next = queueHead\n        queueHead = current\n      } else {\n        queueHead = current\n        queueTail = current\n        self.saturated()\n      }\n    } else {\n      _running++\n      worker.call(context, current.value, current.worked)\n    }\n  }\n\n  function release (holder) {\n    if (holder) {\n      cache.release(holder)\n    }\n    var next = queueHead\n    if (next && _running <= _concurrency) {\n      if (!self.paused) {\n        if (queueTail === queueHead) {\n          queueTail = null\n        }\n        queueHead = next.next\n        next.next = null\n        worker.call(context, next.value, next.worked)\n        if (queueTail === null) {\n          self.empty()\n        }\n      } else {\n        _running--\n      }\n    } else if (--_running === 0) {\n      self.drain()\n    }\n  }\n\n  function kill () {\n    queueHead = null\n    queueTail = null\n    self.drain = noop\n  }\n\n  function killAndDrain () {\n    queueHead = null\n    queueTail = null\n    self.drain()\n    self.drain = noop\n  }\n\n  function abort () {\n    var current = queueHead\n    queueHead = null\n    queueTail = null\n\n    while (current) {\n      var next = current.next\n      var callback = current.callback\n      var errorHandler = current.errorHandler\n      var val = current.value\n      var context = current.context\n\n      // Reset the task state\n      current.value = null\n      current.callback = noop\n      current.errorHandler = null\n\n      // Call error handler if present\n      if (errorHandler) {\n        errorHandler(new Error('abort'), val)\n      }\n\n      // Call callback with error\n      callback.call(context, new Error('abort'))\n\n      // Release the task back to the pool\n      current.release(current)\n\n      current = next\n    }\n\n    self.drain = noop\n  }\n\n  function error (handler) {\n    errorHandler = handler\n  }\n}\n\nfunction noop () {}\n\nfunction Task () {\n  this.value = null\n  this.callback = noop\n  this.next = null\n  this.release = noop\n  this.context = null\n  this.errorHandler = null\n\n  var self = this\n\n  this.worked = function worked (err, result) {\n    var callback = self.callback\n    var errorHandler = self.errorHandler\n    var val = self.value\n    self.value = null\n    self.callback = noop\n    if (self.errorHandler) {\n      errorHandler(err, val)\n    }\n    callback.call(self.context, err, result)\n    self.release(self)\n  }\n}\n\nfunction queueAsPromised (context, worker, _concurrency) {\n  if (typeof context === 'function') {\n    _concurrency = worker\n    worker = context\n    context = null\n  }\n\n  function asyncWrapper (arg, cb) {\n    worker.call(this, arg)\n      .then(function (res) {\n        cb(null, res)\n      }, cb)\n  }\n\n  var queue = fastqueue(context, asyncWrapper, _concurrency)\n\n  var pushCb = queue.push\n  var unshiftCb = queue.unshift\n\n  queue.push = push\n  queue.unshift = unshift\n  queue.drained = drained\n\n  return queue\n\n  function push (value) {\n    var p = new Promise(function (resolve, reject) {\n      pushCb(value, function (err, result) {\n        if (err) {\n          reject(err)\n          return\n        }\n        resolve(result)\n      })\n    })\n\n    // Let's fork the promise chain to\n    // make the error bubble up to the user but\n    // not lead to a unhandledRejection\n    p.catch(noop)\n\n    return p\n  }\n\n  function unshift (value) {\n    var p = new Promise(function (resolve, reject) {\n      unshiftCb(value, function (err, result) {\n        if (err) {\n          reject(err)\n          return\n        }\n        resolve(result)\n      })\n    })\n\n    // Let's fork the promise chain to\n    // make the error bubble up to the user but\n    // not lead to a unhandledRejection\n    p.catch(noop)\n\n    return p\n  }\n\n  function drained () {\n    var p = new Promise(function (resolve) {\n      process.nextTick(function () {\n        if (queue.idle()) {\n          resolve()\n        } else {\n          var previousDrain = queue.drain\n          queue.drain = function () {\n            if (typeof previousDrain === 'function') previousDrain()\n            resolve()\n            queue.drain = previousDrain\n          }\n        }\n      })\n    })\n\n    return p\n  }\n}\n\nmodule.exports = fastqueue\nmodule.exports.promise = queueAsPromised\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.joinPathSegments = exports.replacePathSegmentSeparator = exports.isAppliedFilter = exports.isFatalError = void 0;\nfunction isFatalError(settings, error) {\n    if (settings.errorFilter === null) {\n        return true;\n    }\n    return !settings.errorFilter(error);\n}\nexports.isFatalError = isFatalError;\nfunction isAppliedFilter(filter, value) {\n    return filter === null || filter(value);\n}\nexports.isAppliedFilter = isAppliedFilter;\nfunction replacePathSegmentSeparator(filepath, separator) {\n    return filepath.split(/[/\\\\]/).join(separator);\n}\nexports.replacePathSegmentSeparator = replacePathSegmentSeparator;\nfunction joinPathSegments(a, b, separator) {\n    if (a === '') {\n        return b;\n    }\n    /**\n     * The correct handling of cases when the first segment is a root (`/`, `C:/`) or UNC path (`//?/C:/`).\n     */\n    if (a.endsWith(separator)) {\n        return a + b;\n    }\n    return a + separator + b;\n}\nexports.joinPathSegments = joinPathSegments;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst common = require(\"./common\");\nclass Reader {\n    constructor(_root, _settings) {\n        this._root = _root;\n        this._settings = _settings;\n        this._root = common.replacePathSegmentSeparator(_root, _settings.pathSegmentSeparator);\n    }\n}\nexports.default = Reader;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst events_1 = require(\"events\");\nconst fsScandir = require(\"@nodelib/fs.scandir\");\nconst fastq = require(\"fastq\");\nconst common = require(\"./common\");\nconst reader_1 = require(\"./reader\");\nclass AsyncReader extends reader_1.default {\n    constructor(_root, _settings) {\n        super(_root, _settings);\n        this._settings = _settings;\n        this._scandir = fsScandir.scandir;\n        this._emitter = new events_1.EventEmitter();\n        this._queue = fastq(this._worker.bind(this), this._settings.concurrency);\n        this._isFatalError = false;\n        this._isDestroyed = false;\n        this._queue.drain = () => {\n            if (!this._isFatalError) {\n                this._emitter.emit('end');\n            }\n        };\n    }\n    read() {\n        this._isFatalError = false;\n        this._isDestroyed = false;\n        setImmediate(() => {\n            this._pushToQueue(this._root, this._settings.basePath);\n        });\n        return this._emitter;\n    }\n    get isDestroyed() {\n        return this._isDestroyed;\n    }\n    destroy() {\n        if (this._isDestroyed) {\n            throw new Error('The reader is already destroyed');\n        }\n        this._isDestroyed = true;\n        this._queue.killAndDrain();\n    }\n    onEntry(callback) {\n        this._emitter.on('entry', callback);\n    }\n    onError(callback) {\n        this._emitter.once('error', callback);\n    }\n    onEnd(callback) {\n        this._emitter.once('end', callback);\n    }\n    _pushToQueue(directory, base) {\n        const queueItem = { directory, base };\n        this._queue.push(queueItem, (error) => {\n            if (error !== null) {\n                this._handleError(error);\n            }\n        });\n    }\n    _worker(item, done) {\n        this._scandir(item.directory, this._settings.fsScandirSettings, (error, entries) => {\n            if (error !== null) {\n                done(error, undefined);\n                return;\n            }\n            for (const entry of entries) {\n                this._handleEntry(entry, item.base);\n            }\n            done(null, undefined);\n        });\n    }\n    _handleError(error) {\n        if (this._isDestroyed || !common.isFatalError(this._settings, error)) {\n            return;\n        }\n        this._isFatalError = true;\n        this._isDestroyed = true;\n        this._emitter.emit('error', error);\n    }\n    _handleEntry(entry, base) {\n        if (this._isDestroyed || this._isFatalError) {\n            return;\n        }\n        const fullpath = entry.path;\n        if (base !== undefined) {\n            entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);\n        }\n        if (common.isAppliedFilter(this._settings.entryFilter, entry)) {\n            this._emitEntry(entry);\n        }\n        if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) {\n            this._pushToQueue(fullpath, base === undefined ? undefined : entry.path);\n        }\n    }\n    _emitEntry(entry) {\n        this._emitter.emit('entry', entry);\n    }\n}\nexports.default = AsyncReader;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst async_1 = require(\"../readers/async\");\nclass AsyncProvider {\n    constructor(_root, _settings) {\n        this._root = _root;\n        this._settings = _settings;\n        this._reader = new async_1.default(this._root, this._settings);\n        this._storage = [];\n    }\n    read(callback) {\n        this._reader.onError((error) => {\n            callFailureCallback(callback, error);\n        });\n        this._reader.onEntry((entry) => {\n            this._storage.push(entry);\n        });\n        this._reader.onEnd(() => {\n            callSuccessCallback(callback, this._storage);\n        });\n        this._reader.read();\n    }\n}\nexports.default = AsyncProvider;\nfunction callFailureCallback(callback, error) {\n    callback(error);\n}\nfunction callSuccessCallback(callback, entries) {\n    callback(null, entries);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stream_1 = require(\"stream\");\nconst async_1 = require(\"../readers/async\");\nclass StreamProvider {\n    constructor(_root, _settings) {\n        this._root = _root;\n        this._settings = _settings;\n        this._reader = new async_1.default(this._root, this._settings);\n        this._stream = new stream_1.Readable({\n            objectMode: true,\n            read: () => { },\n            destroy: () => {\n                if (!this._reader.isDestroyed) {\n                    this._reader.destroy();\n                }\n            }\n        });\n    }\n    read() {\n        this._reader.onError((error) => {\n            this._stream.emit('error', error);\n        });\n        this._reader.onEntry((entry) => {\n            this._stream.push(entry);\n        });\n        this._reader.onEnd(() => {\n            this._stream.push(null);\n        });\n        this._reader.read();\n        return this._stream;\n    }\n}\nexports.default = StreamProvider;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fsScandir = require(\"@nodelib/fs.scandir\");\nconst common = require(\"./common\");\nconst reader_1 = require(\"./reader\");\nclass SyncReader extends reader_1.default {\n    constructor() {\n        super(...arguments);\n        this._scandir = fsScandir.scandirSync;\n        this._storage = [];\n        this._queue = new Set();\n    }\n    read() {\n        this._pushToQueue(this._root, this._settings.basePath);\n        this._handleQueue();\n        return this._storage;\n    }\n    _pushToQueue(directory, base) {\n        this._queue.add({ directory, base });\n    }\n    _handleQueue() {\n        for (const item of this._queue.values()) {\n            this._handleDirectory(item.directory, item.base);\n        }\n    }\n    _handleDirectory(directory, base) {\n        try {\n            const entries = this._scandir(directory, this._settings.fsScandirSettings);\n            for (const entry of entries) {\n                this._handleEntry(entry, base);\n            }\n        }\n        catch (error) {\n            this._handleError(error);\n        }\n    }\n    _handleError(error) {\n        if (!common.isFatalError(this._settings, error)) {\n            return;\n        }\n        throw error;\n    }\n    _handleEntry(entry, base) {\n        const fullpath = entry.path;\n        if (base !== undefined) {\n            entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);\n        }\n        if (common.isAppliedFilter(this._settings.entryFilter, entry)) {\n            this._pushToStorage(entry);\n        }\n        if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) {\n            this._pushToQueue(fullpath, base === undefined ? undefined : entry.path);\n        }\n    }\n    _pushToStorage(entry) {\n        this._storage.push(entry);\n    }\n}\nexports.default = SyncReader;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst sync_1 = require(\"../readers/sync\");\nclass SyncProvider {\n    constructor(_root, _settings) {\n        this._root = _root;\n        this._settings = _settings;\n        this._reader = new sync_1.default(this._root, this._settings);\n    }\n    read() {\n        return this._reader.read();\n    }\n}\nexports.default = SyncProvider;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst fsScandir = require(\"@nodelib/fs.scandir\");\nclass Settings {\n    constructor(_options = {}) {\n        this._options = _options;\n        this.basePath = this._getValue(this._options.basePath, undefined);\n        this.concurrency = this._getValue(this._options.concurrency, Number.POSITIVE_INFINITY);\n        this.deepFilter = this._getValue(this._options.deepFilter, null);\n        this.entryFilter = this._getValue(this._options.entryFilter, null);\n        this.errorFilter = this._getValue(this._options.errorFilter, null);\n        this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep);\n        this.fsScandirSettings = new fsScandir.Settings({\n            followSymbolicLinks: this._options.followSymbolicLinks,\n            fs: this._options.fs,\n            pathSegmentSeparator: this._options.pathSegmentSeparator,\n            stats: this._options.stats,\n            throwErrorOnBrokenSymbolicLink: this._options.throwErrorOnBrokenSymbolicLink\n        });\n    }\n    _getValue(option, value) {\n        return option !== null && option !== void 0 ? option : value;\n    }\n}\nexports.default = Settings;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Settings = exports.walkStream = exports.walkSync = exports.walk = void 0;\nconst async_1 = require(\"./providers/async\");\nconst stream_1 = require(\"./providers/stream\");\nconst sync_1 = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nexports.Settings = settings_1.default;\nfunction walk(directory, optionsOrSettingsOrCallback, callback) {\n    if (typeof optionsOrSettingsOrCallback === 'function') {\n        new async_1.default(directory, getSettings()).read(optionsOrSettingsOrCallback);\n        return;\n    }\n    new async_1.default(directory, getSettings(optionsOrSettingsOrCallback)).read(callback);\n}\nexports.walk = walk;\nfunction walkSync(directory, optionsOrSettings) {\n    const settings = getSettings(optionsOrSettings);\n    const provider = new sync_1.default(directory, settings);\n    return provider.read();\n}\nexports.walkSync = walkSync;\nfunction walkStream(directory, optionsOrSettings) {\n    const settings = getSettings(optionsOrSettings);\n    const provider = new stream_1.default(directory, settings);\n    return provider.read();\n}\nexports.walkStream = walkStream;\nfunction getSettings(settingsOrOptions = {}) {\n    if (settingsOrOptions instanceof settings_1.default) {\n        return settingsOrOptions;\n    }\n    return new settings_1.default(settingsOrOptions);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst utils = require(\"../utils\");\nclass Reader {\n    constructor(_settings) {\n        this._settings = _settings;\n        this._fsStatSettings = new fsStat.Settings({\n            followSymbolicLink: this._settings.followSymbolicLinks,\n            fs: this._settings.fs,\n            throwErrorOnBrokenSymbolicLink: this._settings.followSymbolicLinks\n        });\n    }\n    _getFullEntryPath(filepath) {\n        return path.resolve(this._settings.cwd, filepath);\n    }\n    _makeEntry(stats, pattern) {\n        const entry = {\n            name: pattern,\n            path: pattern,\n            dirent: utils.fs.createDirentFromStats(pattern, stats)\n        };\n        if (this._settings.stats) {\n            entry.stats = stats;\n        }\n        return entry;\n    }\n    _isFatalError(error) {\n        return !utils.errno.isEnoentCodeError(error) && !this._settings.suppressErrors;\n    }\n}\nexports.default = Reader;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stream_1 = require(\"stream\");\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst fsWalk = require(\"@nodelib/fs.walk\");\nconst reader_1 = require(\"./reader\");\nclass ReaderStream extends reader_1.default {\n    constructor() {\n        super(...arguments);\n        this._walkStream = fsWalk.walkStream;\n        this._stat = fsStat.stat;\n    }\n    dynamic(root, options) {\n        return this._walkStream(root, options);\n    }\n    static(patterns, options) {\n        const filepaths = patterns.map(this._getFullEntryPath, this);\n        const stream = new stream_1.PassThrough({ objectMode: true });\n        stream._write = (index, _enc, done) => {\n            return this._getEntry(filepaths[index], patterns[index], options)\n                .then((entry) => {\n                if (entry !== null && options.entryFilter(entry)) {\n                    stream.push(entry);\n                }\n                if (index === filepaths.length - 1) {\n                    stream.end();\n                }\n                done();\n            })\n                .catch(done);\n        };\n        for (let i = 0; i < filepaths.length; i++) {\n            stream.write(i);\n        }\n        return stream;\n    }\n    _getEntry(filepath, pattern, options) {\n        return this._getStat(filepath)\n            .then((stats) => this._makeEntry(stats, pattern))\n            .catch((error) => {\n            if (options.errorFilter(error)) {\n                return null;\n            }\n            throw error;\n        });\n    }\n    _getStat(filepath) {\n        return new Promise((resolve, reject) => {\n            this._stat(filepath, this._fsStatSettings, (error, stats) => {\n                return error === null ? resolve(stats) : reject(error);\n            });\n        });\n    }\n}\nexports.default = ReaderStream;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fsWalk = require(\"@nodelib/fs.walk\");\nconst reader_1 = require(\"./reader\");\nconst stream_1 = require(\"./stream\");\nclass ReaderAsync extends reader_1.default {\n    constructor() {\n        super(...arguments);\n        this._walkAsync = fsWalk.walk;\n        this._readerStream = new stream_1.default(this._settings);\n    }\n    dynamic(root, options) {\n        return new Promise((resolve, reject) => {\n            this._walkAsync(root, options, (error, entries) => {\n                if (error === null) {\n                    resolve(entries);\n                }\n                else {\n                    reject(error);\n                }\n            });\n        });\n    }\n    async static(patterns, options) {\n        const entries = [];\n        const stream = this._readerStream.static(patterns, options);\n        // After #235, replace it with an asynchronous iterator.\n        return new Promise((resolve, reject) => {\n            stream.once('error', reject);\n            stream.on('data', (entry) => entries.push(entry));\n            stream.once('end', () => resolve(entries));\n        });\n    }\n}\nexports.default = ReaderAsync;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass Matcher {\n    constructor(_patterns, _settings, _micromatchOptions) {\n        this._patterns = _patterns;\n        this._settings = _settings;\n        this._micromatchOptions = _micromatchOptions;\n        this._storage = [];\n        this._fillStorage();\n    }\n    _fillStorage() {\n        for (const pattern of this._patterns) {\n            const segments = this._getPatternSegments(pattern);\n            const sections = this._splitSegmentsIntoSections(segments);\n            this._storage.push({\n                complete: sections.length <= 1,\n                pattern,\n                segments,\n                sections\n            });\n        }\n    }\n    _getPatternSegments(pattern) {\n        const parts = utils.pattern.getPatternParts(pattern, this._micromatchOptions);\n        return parts.map((part) => {\n            const dynamic = utils.pattern.isDynamicPattern(part, this._settings);\n            if (!dynamic) {\n                return {\n                    dynamic: false,\n                    pattern: part\n                };\n            }\n            return {\n                dynamic: true,\n                pattern: part,\n                patternRe: utils.pattern.makeRe(part, this._micromatchOptions)\n            };\n        });\n    }\n    _splitSegmentsIntoSections(segments) {\n        return utils.array.splitWhen(segments, (segment) => segment.dynamic && utils.pattern.hasGlobStar(segment.pattern));\n    }\n}\nexports.default = Matcher;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst matcher_1 = require(\"./matcher\");\nclass PartialMatcher extends matcher_1.default {\n    match(filepath) {\n        const parts = filepath.split('/');\n        const levels = parts.length;\n        const patterns = this._storage.filter((info) => !info.complete || info.segments.length > levels);\n        for (const pattern of patterns) {\n            const section = pattern.sections[0];\n            /**\n             * In this case, the pattern has a globstar and we must read all directories unconditionally,\n             * but only if the level has reached the end of the first group.\n             *\n             * fixtures/{a,b}/**\n             *  ^ true/false  ^ always true\n            */\n            if (!pattern.complete && levels > section.length) {\n                return true;\n            }\n            const match = parts.every((part, index) => {\n                const segment = pattern.segments[index];\n                if (segment.dynamic && segment.patternRe.test(part)) {\n                    return true;\n                }\n                if (!segment.dynamic && segment.pattern === part) {\n                    return true;\n                }\n                return false;\n            });\n            if (match) {\n                return true;\n            }\n        }\n        return false;\n    }\n}\nexports.default = PartialMatcher;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nconst partial_1 = require(\"../matchers/partial\");\nclass DeepFilter {\n    constructor(_settings, _micromatchOptions) {\n        this._settings = _settings;\n        this._micromatchOptions = _micromatchOptions;\n    }\n    getFilter(basePath, positive, negative) {\n        const matcher = this._getMatcher(positive);\n        const negativeRe = this._getNegativePatternsRe(negative);\n        return (entry) => this._filter(basePath, entry, matcher, negativeRe);\n    }\n    _getMatcher(patterns) {\n        return new partial_1.default(patterns, this._settings, this._micromatchOptions);\n    }\n    _getNegativePatternsRe(patterns) {\n        const affectDepthOfReadingPatterns = patterns.filter(utils.pattern.isAffectDepthOfReadingPattern);\n        return utils.pattern.convertPatternsToRe(affectDepthOfReadingPatterns, this._micromatchOptions);\n    }\n    _filter(basePath, entry, matcher, negativeRe) {\n        if (this._isSkippedByDeep(basePath, entry.path)) {\n            return false;\n        }\n        if (this._isSkippedSymbolicLink(entry)) {\n            return false;\n        }\n        const filepath = utils.path.removeLeadingDotSegment(entry.path);\n        if (this._isSkippedByPositivePatterns(filepath, matcher)) {\n            return false;\n        }\n        return this._isSkippedByNegativePatterns(filepath, negativeRe);\n    }\n    _isSkippedByDeep(basePath, entryPath) {\n        /**\n         * Avoid unnecessary depth calculations when it doesn't matter.\n         */\n        if (this._settings.deep === Infinity) {\n            return false;\n        }\n        return this._getEntryLevel(basePath, entryPath) >= this._settings.deep;\n    }\n    _getEntryLevel(basePath, entryPath) {\n        const entryPathDepth = entryPath.split('/').length;\n        if (basePath === '') {\n            return entryPathDepth;\n        }\n        const basePathDepth = basePath.split('/').length;\n        return entryPathDepth - basePathDepth;\n    }\n    _isSkippedSymbolicLink(entry) {\n        return !this._settings.followSymbolicLinks && entry.dirent.isSymbolicLink();\n    }\n    _isSkippedByPositivePatterns(entryPath, matcher) {\n        return !this._settings.baseNameMatch && !matcher.match(entryPath);\n    }\n    _isSkippedByNegativePatterns(entryPath, patternsRe) {\n        return !utils.pattern.matchAny(entryPath, patternsRe);\n    }\n}\nexports.default = DeepFilter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass EntryFilter {\n    constructor(_settings, _micromatchOptions) {\n        this._settings = _settings;\n        this._micromatchOptions = _micromatchOptions;\n        this.index = new Map();\n    }\n    getFilter(positive, negative) {\n        const [absoluteNegative, relativeNegative] = utils.pattern.partitionAbsoluteAndRelative(negative);\n        const patterns = {\n            positive: {\n                all: utils.pattern.convertPatternsToRe(positive, this._micromatchOptions)\n            },\n            negative: {\n                absolute: utils.pattern.convertPatternsToRe(absoluteNegative, Object.assign(Object.assign({}, this._micromatchOptions), { dot: true })),\n                relative: utils.pattern.convertPatternsToRe(relativeNegative, Object.assign(Object.assign({}, this._micromatchOptions), { dot: true }))\n            }\n        };\n        return (entry) => this._filter(entry, patterns);\n    }\n    _filter(entry, patterns) {\n        const filepath = utils.path.removeLeadingDotSegment(entry.path);\n        if (this._settings.unique && this._isDuplicateEntry(filepath)) {\n            return false;\n        }\n        if (this._onlyFileFilter(entry) || this._onlyDirectoryFilter(entry)) {\n            return false;\n        }\n        const isMatched = this._isMatchToPatternsSet(filepath, patterns, entry.dirent.isDirectory());\n        if (this._settings.unique && isMatched) {\n            this._createIndexRecord(filepath);\n        }\n        return isMatched;\n    }\n    _isDuplicateEntry(filepath) {\n        return this.index.has(filepath);\n    }\n    _createIndexRecord(filepath) {\n        this.index.set(filepath, undefined);\n    }\n    _onlyFileFilter(entry) {\n        return this._settings.onlyFiles && !entry.dirent.isFile();\n    }\n    _onlyDirectoryFilter(entry) {\n        return this._settings.onlyDirectories && !entry.dirent.isDirectory();\n    }\n    _isMatchToPatternsSet(filepath, patterns, isDirectory) {\n        const isMatched = this._isMatchToPatterns(filepath, patterns.positive.all, isDirectory);\n        if (!isMatched) {\n            return false;\n        }\n        const isMatchedByRelativeNegative = this._isMatchToPatterns(filepath, patterns.negative.relative, isDirectory);\n        if (isMatchedByRelativeNegative) {\n            return false;\n        }\n        const isMatchedByAbsoluteNegative = this._isMatchToAbsoluteNegative(filepath, patterns.negative.absolute, isDirectory);\n        if (isMatchedByAbsoluteNegative) {\n            return false;\n        }\n        return true;\n    }\n    _isMatchToAbsoluteNegative(filepath, patternsRe, isDirectory) {\n        if (patternsRe.length === 0) {\n            return false;\n        }\n        const fullpath = utils.path.makeAbsolute(this._settings.cwd, filepath);\n        return this._isMatchToPatterns(fullpath, patternsRe, isDirectory);\n    }\n    _isMatchToPatterns(filepath, patternsRe, isDirectory) {\n        if (patternsRe.length === 0) {\n            return false;\n        }\n        // Trying to match files and directories by patterns.\n        const isMatched = utils.pattern.matchAny(filepath, patternsRe);\n        // A pattern with a trailling slash can be used for directory matching.\n        // To apply such pattern, we need to add a tralling slash to the path.\n        if (!isMatched && isDirectory) {\n            return utils.pattern.matchAny(filepath + '/', patternsRe);\n        }\n        return isMatched;\n    }\n}\nexports.default = EntryFilter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass ErrorFilter {\n    constructor(_settings) {\n        this._settings = _settings;\n    }\n    getFilter() {\n        return (error) => this._isNonFatalError(error);\n    }\n    _isNonFatalError(error) {\n        return utils.errno.isEnoentCodeError(error) || this._settings.suppressErrors;\n    }\n}\nexports.default = ErrorFilter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass EntryTransformer {\n    constructor(_settings) {\n        this._settings = _settings;\n    }\n    getTransformer() {\n        return (entry) => this._transform(entry);\n    }\n    _transform(entry) {\n        let filepath = entry.path;\n        if (this._settings.absolute) {\n            filepath = utils.path.makeAbsolute(this._settings.cwd, filepath);\n            filepath = utils.path.unixify(filepath);\n        }\n        if (this._settings.markDirectories && entry.dirent.isDirectory()) {\n            filepath += '/';\n        }\n        if (!this._settings.objectMode) {\n            return filepath;\n        }\n        return Object.assign(Object.assign({}, entry), { path: filepath });\n    }\n}\nexports.default = EntryTransformer;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst deep_1 = require(\"./filters/deep\");\nconst entry_1 = require(\"./filters/entry\");\nconst error_1 = require(\"./filters/error\");\nconst entry_2 = require(\"./transformers/entry\");\nclass Provider {\n    constructor(_settings) {\n        this._settings = _settings;\n        this.errorFilter = new error_1.default(this._settings);\n        this.entryFilter = new entry_1.default(this._settings, this._getMicromatchOptions());\n        this.deepFilter = new deep_1.default(this._settings, this._getMicromatchOptions());\n        this.entryTransformer = new entry_2.default(this._settings);\n    }\n    _getRootDirectory(task) {\n        return path.resolve(this._settings.cwd, task.base);\n    }\n    _getReaderOptions(task) {\n        const basePath = task.base === '.' ? '' : task.base;\n        return {\n            basePath,\n            pathSegmentSeparator: '/',\n            concurrency: this._settings.concurrency,\n            deepFilter: this.deepFilter.getFilter(basePath, task.positive, task.negative),\n            entryFilter: this.entryFilter.getFilter(task.positive, task.negative),\n            errorFilter: this.errorFilter.getFilter(),\n            followSymbolicLinks: this._settings.followSymbolicLinks,\n            fs: this._settings.fs,\n            stats: this._settings.stats,\n            throwErrorOnBrokenSymbolicLink: this._settings.throwErrorOnBrokenSymbolicLink,\n            transform: this.entryTransformer.getTransformer()\n        };\n    }\n    _getMicromatchOptions() {\n        return {\n            dot: this._settings.dot,\n            matchBase: this._settings.baseNameMatch,\n            nobrace: !this._settings.braceExpansion,\n            nocase: !this._settings.caseSensitiveMatch,\n            noext: !this._settings.extglob,\n            noglobstar: !this._settings.globstar,\n            posix: true,\n            strictSlashes: false\n        };\n    }\n}\nexports.default = Provider;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst async_1 = require(\"../readers/async\");\nconst provider_1 = require(\"./provider\");\nclass ProviderAsync extends provider_1.default {\n    constructor() {\n        super(...arguments);\n        this._reader = new async_1.default(this._settings);\n    }\n    async read(task) {\n        const root = this._getRootDirectory(task);\n        const options = this._getReaderOptions(task);\n        const entries = await this.api(root, task, options);\n        return entries.map((entry) => options.transform(entry));\n    }\n    api(root, task, options) {\n        if (task.dynamic) {\n            return this._reader.dynamic(root, options);\n        }\n        return this._reader.static(task.patterns, options);\n    }\n}\nexports.default = ProviderAsync;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stream_1 = require(\"stream\");\nconst stream_2 = require(\"../readers/stream\");\nconst provider_1 = require(\"./provider\");\nclass ProviderStream extends provider_1.default {\n    constructor() {\n        super(...arguments);\n        this._reader = new stream_2.default(this._settings);\n    }\n    read(task) {\n        const root = this._getRootDirectory(task);\n        const options = this._getReaderOptions(task);\n        const source = this.api(root, task, options);\n        const destination = new stream_1.Readable({ objectMode: true, read: () => { } });\n        source\n            .once('error', (error) => destination.emit('error', error))\n            .on('data', (entry) => destination.emit('data', options.transform(entry)))\n            .once('end', () => destination.emit('end'));\n        destination\n            .once('close', () => source.destroy());\n        return destination;\n    }\n    api(root, task, options) {\n        if (task.dynamic) {\n            return this._reader.dynamic(root, options);\n        }\n        return this._reader.static(task.patterns, options);\n    }\n}\nexports.default = ProviderStream;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst fsWalk = require(\"@nodelib/fs.walk\");\nconst reader_1 = require(\"./reader\");\nclass ReaderSync extends reader_1.default {\n    constructor() {\n        super(...arguments);\n        this._walkSync = fsWalk.walkSync;\n        this._statSync = fsStat.statSync;\n    }\n    dynamic(root, options) {\n        return this._walkSync(root, options);\n    }\n    static(patterns, options) {\n        const entries = [];\n        for (const pattern of patterns) {\n            const filepath = this._getFullEntryPath(pattern);\n            const entry = this._getEntry(filepath, pattern, options);\n            if (entry === null || !options.entryFilter(entry)) {\n                continue;\n            }\n            entries.push(entry);\n        }\n        return entries;\n    }\n    _getEntry(filepath, pattern, options) {\n        try {\n            const stats = this._getStat(filepath);\n            return this._makeEntry(stats, pattern);\n        }\n        catch (error) {\n            if (options.errorFilter(error)) {\n                return null;\n            }\n            throw error;\n        }\n    }\n    _getStat(filepath) {\n        return this._statSync(filepath, this._fsStatSettings);\n    }\n}\nexports.default = ReaderSync;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst sync_1 = require(\"../readers/sync\");\nconst provider_1 = require(\"./provider\");\nclass ProviderSync extends provider_1.default {\n    constructor() {\n        super(...arguments);\n        this._reader = new sync_1.default(this._settings);\n    }\n    read(task) {\n        const root = this._getRootDirectory(task);\n        const options = this._getReaderOptions(task);\n        const entries = this.api(root, task, options);\n        return entries.map(options.transform);\n    }\n    api(root, task, options) {\n        if (task.dynamic) {\n            return this._reader.dynamic(root, options);\n        }\n        return this._reader.static(task.patterns, options);\n    }\n}\nexports.default = ProviderSync;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DEFAULT_FILE_SYSTEM_ADAPTER = void 0;\nconst fs = require(\"fs\");\nconst os = require(\"os\");\n/**\n * The `os.cpus` method can return zero. We expect the number of cores to be greater than zero.\n * https://github.com/nodejs/node/blob/7faeddf23a98c53896f8b574a6e66589e8fb1eb8/lib/os.js#L106-L107\n */\nconst CPU_COUNT = Math.max(os.cpus().length, 1);\nexports.DEFAULT_FILE_SYSTEM_ADAPTER = {\n    lstat: fs.lstat,\n    lstatSync: fs.lstatSync,\n    stat: fs.stat,\n    statSync: fs.statSync,\n    readdir: fs.readdir,\n    readdirSync: fs.readdirSync\n};\nclass Settings {\n    constructor(_options = {}) {\n        this._options = _options;\n        this.absolute = this._getValue(this._options.absolute, false);\n        this.baseNameMatch = this._getValue(this._options.baseNameMatch, false);\n        this.braceExpansion = this._getValue(this._options.braceExpansion, true);\n        this.caseSensitiveMatch = this._getValue(this._options.caseSensitiveMatch, true);\n        this.concurrency = this._getValue(this._options.concurrency, CPU_COUNT);\n        this.cwd = this._getValue(this._options.cwd, process.cwd());\n        this.deep = this._getValue(this._options.deep, Infinity);\n        this.dot = this._getValue(this._options.dot, false);\n        this.extglob = this._getValue(this._options.extglob, true);\n        this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, true);\n        this.fs = this._getFileSystemMethods(this._options.fs);\n        this.globstar = this._getValue(this._options.globstar, true);\n        this.ignore = this._getValue(this._options.ignore, []);\n        this.markDirectories = this._getValue(this._options.markDirectories, false);\n        this.objectMode = this._getValue(this._options.objectMode, false);\n        this.onlyDirectories = this._getValue(this._options.onlyDirectories, false);\n        this.onlyFiles = this._getValue(this._options.onlyFiles, true);\n        this.stats = this._getValue(this._options.stats, false);\n        this.suppressErrors = this._getValue(this._options.suppressErrors, false);\n        this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, false);\n        this.unique = this._getValue(this._options.unique, true);\n        if (this.onlyDirectories) {\n            this.onlyFiles = false;\n        }\n        if (this.stats) {\n            this.objectMode = true;\n        }\n        // Remove the cast to the array in the next major (#404).\n        this.ignore = [].concat(this.ignore);\n    }\n    _getValue(option, value) {\n        return option === undefined ? value : option;\n    }\n    _getFileSystemMethods(methods = {}) {\n        return Object.assign(Object.assign({}, exports.DEFAULT_FILE_SYSTEM_ADAPTER), methods);\n    }\n}\nexports.default = Settings;\n","\"use strict\";\nconst taskManager = require(\"./managers/tasks\");\nconst async_1 = require(\"./providers/async\");\nconst stream_1 = require(\"./providers/stream\");\nconst sync_1 = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nconst utils = require(\"./utils\");\nasync function FastGlob(source, options) {\n    assertPatternsInput(source);\n    const works = getWorks(source, async_1.default, options);\n    const result = await Promise.all(works);\n    return utils.array.flatten(result);\n}\n// https://github.com/typescript-eslint/typescript-eslint/issues/60\n// eslint-disable-next-line no-redeclare\n(function (FastGlob) {\n    FastGlob.glob = FastGlob;\n    FastGlob.globSync = sync;\n    FastGlob.globStream = stream;\n    FastGlob.async = FastGlob;\n    function sync(source, options) {\n        assertPatternsInput(source);\n        const works = getWorks(source, sync_1.default, options);\n        return utils.array.flatten(works);\n    }\n    FastGlob.sync = sync;\n    function stream(source, options) {\n        assertPatternsInput(source);\n        const works = getWorks(source, stream_1.default, options);\n        /**\n         * The stream returned by the provider cannot work with an asynchronous iterator.\n         * To support asynchronous iterators, regardless of the number of tasks, we always multiplex streams.\n         * This affects performance (+25%). I don't see best solution right now.\n         */\n        return utils.stream.merge(works);\n    }\n    FastGlob.stream = stream;\n    function generateTasks(source, options) {\n        assertPatternsInput(source);\n        const patterns = [].concat(source);\n        const settings = new settings_1.default(options);\n        return taskManager.generate(patterns, settings);\n    }\n    FastGlob.generateTasks = generateTasks;\n    function isDynamicPattern(source, options) {\n        assertPatternsInput(source);\n        const settings = new settings_1.default(options);\n        return utils.pattern.isDynamicPattern(source, settings);\n    }\n    FastGlob.isDynamicPattern = isDynamicPattern;\n    function escapePath(source) {\n        assertPatternsInput(source);\n        return utils.path.escape(source);\n    }\n    FastGlob.escapePath = escapePath;\n    function convertPathToPattern(source) {\n        assertPatternsInput(source);\n        return utils.path.convertPathToPattern(source);\n    }\n    FastGlob.convertPathToPattern = convertPathToPattern;\n    let posix;\n    (function (posix) {\n        function escapePath(source) {\n            assertPatternsInput(source);\n            return utils.path.escapePosixPath(source);\n        }\n        posix.escapePath = escapePath;\n        function convertPathToPattern(source) {\n            assertPatternsInput(source);\n            return utils.path.convertPosixPathToPattern(source);\n        }\n        posix.convertPathToPattern = convertPathToPattern;\n    })(posix = FastGlob.posix || (FastGlob.posix = {}));\n    let win32;\n    (function (win32) {\n        function escapePath(source) {\n            assertPatternsInput(source);\n            return utils.path.escapeWindowsPath(source);\n        }\n        win32.escapePath = escapePath;\n        function convertPathToPattern(source) {\n            assertPatternsInput(source);\n            return utils.path.convertWindowsPathToPattern(source);\n        }\n        win32.convertPathToPattern = convertPathToPattern;\n    })(win32 = FastGlob.win32 || (FastGlob.win32 = {}));\n})(FastGlob || (FastGlob = {}));\nfunction getWorks(source, _Provider, options) {\n    const patterns = [].concat(source);\n    const settings = new settings_1.default(options);\n    const tasks = taskManager.generate(patterns, settings);\n    const provider = new _Provider(settings);\n    return tasks.map(provider.read, provider);\n}\nfunction assertPatternsInput(input) {\n    const source = [].concat(input);\n    const isValidSource = source.every((item) => utils.string.isString(item) && !utils.string.isEmpty(item));\n    if (!isValidSource) {\n        throw new TypeError('Patterns must be a string (non empty) or an array of strings');\n    }\n}\nmodule.exports = FastGlob;\n","import { lstat, readdir, realpath, stat } from 'node:fs/promises';\nimport { join as pjoin, relative as prelative, resolve as presolve, sep as psep } from 'node:path';\nimport { Readable } from 'node:stream';\nexport const EntryTypes = {\n    FILE_TYPE: 'files',\n    DIR_TYPE: 'directories',\n    FILE_DIR_TYPE: 'files_directories',\n    EVERYTHING_TYPE: 'all',\n};\nconst defaultOptions = {\n    root: '.',\n    fileFilter: (_entryInfo) => true,\n    directoryFilter: (_entryInfo) => true,\n    type: EntryTypes.FILE_TYPE,\n    lstat: false,\n    depth: 2147483648,\n    alwaysStat: false,\n    highWaterMark: 4096,\n};\nObject.freeze(defaultOptions);\nconst RECURSIVE_ERROR_CODE = 'READDIRP_RECURSIVE_ERROR';\nconst NORMAL_FLOW_ERRORS = new Set(['ENOENT', 'EPERM', 'EACCES', 'ELOOP', RECURSIVE_ERROR_CODE]);\nconst ALL_TYPES = [\n    EntryTypes.DIR_TYPE,\n    EntryTypes.EVERYTHING_TYPE,\n    EntryTypes.FILE_DIR_TYPE,\n    EntryTypes.FILE_TYPE,\n];\nconst DIR_TYPES = new Set([\n    EntryTypes.DIR_TYPE,\n    EntryTypes.EVERYTHING_TYPE,\n    EntryTypes.FILE_DIR_TYPE,\n]);\nconst FILE_TYPES = new Set([\n    EntryTypes.EVERYTHING_TYPE,\n    EntryTypes.FILE_DIR_TYPE,\n    EntryTypes.FILE_TYPE,\n]);\nconst isNormalFlowError = (error) => NORMAL_FLOW_ERRORS.has(error.code);\nconst wantBigintFsStats = process.platform === 'win32';\nconst emptyFn = (_entryInfo) => true;\nconst normalizeFilter = (filter) => {\n    if (filter === undefined)\n        return emptyFn;\n    if (typeof filter === 'function')\n        return filter;\n    if (typeof filter === 'string') {\n        const fl = filter.trim();\n        return (entry) => entry.basename === fl;\n    }\n    if (Array.isArray(filter)) {\n        const trItems = filter.map((item) => item.trim());\n        return (entry) => trItems.some((f) => entry.basename === f);\n    }\n    return emptyFn;\n};\n/** Readable readdir stream, emitting new files as they're being listed. */\nexport class ReaddirpStream extends Readable {\n    parents;\n    reading;\n    parent;\n    _stat;\n    _maxDepth;\n    _wantsDir;\n    _wantsFile;\n    _wantsEverything;\n    _root;\n    _isDirent;\n    _statsProp;\n    _rdOptions;\n    _fileFilter;\n    _directoryFilter;\n    constructor(options = {}) {\n        super({\n            objectMode: true,\n            autoDestroy: true,\n            highWaterMark: options.highWaterMark,\n        });\n        const opts = { ...defaultOptions, ...options };\n        const { root, type } = opts;\n        this._fileFilter = normalizeFilter(opts.fileFilter);\n        this._directoryFilter = normalizeFilter(opts.directoryFilter);\n        const statMethod = opts.lstat ? lstat : stat;\n        // Use bigint stats if it's windows and stat() supports options (node 10+).\n        if (wantBigintFsStats) {\n            this._stat = (path) => statMethod(path, { bigint: true });\n        }\n        else {\n            this._stat = statMethod;\n        }\n        this._maxDepth =\n            opts.depth != null && Number.isSafeInteger(opts.depth) ? opts.depth : defaultOptions.depth;\n        this._wantsDir = type ? DIR_TYPES.has(type) : false;\n        this._wantsFile = type ? FILE_TYPES.has(type) : false;\n        this._wantsEverything = type === EntryTypes.EVERYTHING_TYPE;\n        this._root = presolve(root);\n        this._isDirent = !opts.alwaysStat;\n        this._statsProp = this._isDirent ? 'dirent' : 'stats';\n        this._rdOptions = { encoding: 'utf8', withFileTypes: this._isDirent };\n        // Launch stream with one parent, the root dir.\n        this.parents = [this._exploreDir(root, 1)];\n        this.reading = false;\n        this.parent = undefined;\n    }\n    async _read(batch) {\n        if (this.reading)\n            return;\n        this.reading = true;\n        try {\n            while (!this.destroyed && batch > 0) {\n                const par = this.parent;\n                const fil = par && par.files;\n                if (fil && fil.length > 0) {\n                    const { path, depth } = par;\n                    const slice = fil.splice(0, batch).map((dirent) => this._formatEntry(dirent, path));\n                    const awaited = await Promise.all(slice);\n                    for (const entry of awaited) {\n                        if (!entry)\n                            continue;\n                        if (this.destroyed)\n                            return;\n                        const entryType = await this._getEntryType(entry);\n                        if (entryType === 'directory' && this._directoryFilter(entry)) {\n                            if (depth <= this._maxDepth) {\n                                this.parents.push(this._exploreDir(entry.fullPath, depth + 1));\n                            }\n                            if (this._wantsDir) {\n                                this.push(entry);\n                                batch--;\n                            }\n                        }\n                        else if ((entryType === 'file' || this._includeAsFile(entry)) &&\n                            this._fileFilter(entry)) {\n                            if (this._wantsFile) {\n                                this.push(entry);\n                                batch--;\n                            }\n                        }\n                    }\n                }\n                else {\n                    const parent = this.parents.pop();\n                    if (!parent) {\n                        this.push(null);\n                        break;\n                    }\n                    this.parent = await parent;\n                    if (this.destroyed)\n                        return;\n                }\n            }\n        }\n        catch (error) {\n            this.destroy(error);\n        }\n        finally {\n            this.reading = false;\n        }\n    }\n    async _exploreDir(path, depth) {\n        let files;\n        try {\n            files = await readdir(path, this._rdOptions);\n        }\n        catch (error) {\n            this._onError(error);\n        }\n        return { files, depth, path };\n    }\n    async _formatEntry(dirent, path) {\n        let entry;\n        const basename = this._isDirent ? dirent.name : dirent;\n        try {\n            const fullPath = presolve(pjoin(path, basename));\n            entry = { path: prelative(this._root, fullPath), fullPath, basename };\n            entry[this._statsProp] = this._isDirent ? dirent : await this._stat(fullPath);\n        }\n        catch (err) {\n            this._onError(err);\n            return;\n        }\n        return entry;\n    }\n    _onError(err) {\n        if (isNormalFlowError(err) && !this.destroyed) {\n            this.emit('warn', err);\n        }\n        else {\n            this.destroy(err);\n        }\n    }\n    async _getEntryType(entry) {\n        // entry may be undefined, because a warning or an error were emitted\n        // and the statsProp is undefined\n        if (!entry && this._statsProp in entry) {\n            return '';\n        }\n        const stats = entry[this._statsProp];\n        if (stats.isFile())\n            return 'file';\n        if (stats.isDirectory())\n            return 'directory';\n        if (stats && stats.isSymbolicLink()) {\n            const full = entry.fullPath;\n            try {\n                const entryRealPath = await realpath(full);\n                const entryRealPathStats = await lstat(entryRealPath);\n                if (entryRealPathStats.isFile()) {\n                    return 'file';\n                }\n                if (entryRealPathStats.isDirectory()) {\n                    const len = entryRealPath.length;\n                    if (full.startsWith(entryRealPath) && full.substr(len, 1) === psep) {\n                        const recursiveError = new Error(`Circular symlink detected: \"${full}\" points to \"${entryRealPath}\"`);\n                        // @ts-ignore\n                        recursiveError.code = RECURSIVE_ERROR_CODE;\n                        return this._onError(recursiveError);\n                    }\n                    return 'directory';\n                }\n            }\n            catch (error) {\n                this._onError(error);\n                return '';\n            }\n        }\n    }\n    _includeAsFile(entry) {\n        const stats = entry && entry[this._statsProp];\n        return stats && this._wantsEverything && !stats.isDirectory();\n    }\n}\n/**\n * Streaming version: Reads all files and directories in given root recursively.\n * Consumes ~constant small amount of RAM.\n * @param root Root directory\n * @param options Options to specify root (start directory), filters and recursion depth\n */\nexport function readdirp(root, options = {}) {\n    // @ts-ignore\n    let type = options.entryType || options.type;\n    if (type === 'both')\n        type = EntryTypes.FILE_DIR_TYPE; // backwards-compatibility\n    if (type)\n        options.type = type;\n    if (!root) {\n        throw new Error('readdirp: root argument is required. Usage: readdirp(root, options)');\n    }\n    else if (typeof root !== 'string') {\n        throw new TypeError('readdirp: root argument must be a string. Usage: readdirp(root, options)');\n    }\n    else if (type && !ALL_TYPES.includes(type)) {\n        throw new Error(`readdirp: Invalid type passed. Use one of ${ALL_TYPES.join(', ')}`);\n    }\n    options.root = root;\n    return new ReaddirpStream(options);\n}\n/**\n * Promise version: Reads all files and directories in given root recursively.\n * Compared to streaming version, will consume a lot of RAM e.g. when 1 million files are listed.\n * @returns array of paths and their entry infos\n */\nexport function readdirpPromise(root, options = {}) {\n    return new Promise((resolve, reject) => {\n        const files = [];\n        readdirp(root, options)\n            .on('data', (entry) => files.push(entry))\n            .on('end', () => resolve(files))\n            .on('error', (error) => reject(error));\n    });\n}\nexport default readdirp;\n","import { watch as fs_watch, unwatchFile, watchFile } from 'node:fs';\nimport { realpath as fsrealpath, lstat, open, stat } from 'node:fs/promises';\nimport { type as osType } from 'node:os';\nimport * as sp from 'node:path';\nexport const STR_DATA = 'data';\nexport const STR_END = 'end';\nexport const STR_CLOSE = 'close';\nexport const EMPTY_FN = () => { };\nexport const IDENTITY_FN = (val) => val;\nconst pl = process.platform;\nexport const isWindows = pl === 'win32';\nexport const isMacos = pl === 'darwin';\nexport const isLinux = pl === 'linux';\nexport const isFreeBSD = pl === 'freebsd';\nexport const isIBMi = osType() === 'OS400';\nexport const EVENTS = {\n    ALL: 'all',\n    READY: 'ready',\n    ADD: 'add',\n    CHANGE: 'change',\n    ADD_DIR: 'addDir',\n    UNLINK: 'unlink',\n    UNLINK_DIR: 'unlinkDir',\n    RAW: 'raw',\n    ERROR: 'error',\n};\nconst EV = EVENTS;\nconst THROTTLE_MODE_WATCH = 'watch';\nconst statMethods = { lstat, stat };\nconst KEY_LISTENERS = 'listeners';\nconst KEY_ERR = 'errHandlers';\nconst KEY_RAW = 'rawEmitters';\nconst HANDLER_KEYS = [KEY_LISTENERS, KEY_ERR, KEY_RAW];\n// prettier-ignore\nconst binaryExtensions = new Set([\n    '3dm', '3ds', '3g2', '3gp', '7z', 'a', 'aac', 'adp', 'afdesign', 'afphoto', 'afpub', 'ai',\n    'aif', 'aiff', 'alz', 'ape', 'apk', 'appimage', 'ar', 'arj', 'asf', 'au', 'avi',\n    'bak', 'baml', 'bh', 'bin', 'bk', 'bmp', 'btif', 'bz2', 'bzip2',\n    'cab', 'caf', 'cgm', 'class', 'cmx', 'cpio', 'cr2', 'cur', 'dat', 'dcm', 'deb', 'dex', 'djvu',\n    'dll', 'dmg', 'dng', 'doc', 'docm', 'docx', 'dot', 'dotm', 'dra', 'DS_Store', 'dsk', 'dts',\n    'dtshd', 'dvb', 'dwg', 'dxf',\n    'ecelp4800', 'ecelp7470', 'ecelp9600', 'egg', 'eol', 'eot', 'epub', 'exe',\n    'f4v', 'fbs', 'fh', 'fla', 'flac', 'flatpak', 'fli', 'flv', 'fpx', 'fst', 'fvt',\n    'g3', 'gh', 'gif', 'graffle', 'gz', 'gzip',\n    'h261', 'h263', 'h264', 'icns', 'ico', 'ief', 'img', 'ipa', 'iso',\n    'jar', 'jpeg', 'jpg', 'jpgv', 'jpm', 'jxr', 'key', 'ktx',\n    'lha', 'lib', 'lvp', 'lz', 'lzh', 'lzma', 'lzo',\n    'm3u', 'm4a', 'm4v', 'mar', 'mdi', 'mht', 'mid', 'midi', 'mj2', 'mka', 'mkv', 'mmr', 'mng',\n    'mobi', 'mov', 'movie', 'mp3',\n    'mp4', 'mp4a', 'mpeg', 'mpg', 'mpga', 'mxu',\n    'nef', 'npx', 'numbers', 'nupkg',\n    'o', 'odp', 'ods', 'odt', 'oga', 'ogg', 'ogv', 'otf', 'ott',\n    'pages', 'pbm', 'pcx', 'pdb', 'pdf', 'pea', 'pgm', 'pic', 'png', 'pnm', 'pot', 'potm',\n    'potx', 'ppa', 'ppam',\n    'ppm', 'pps', 'ppsm', 'ppsx', 'ppt', 'pptm', 'pptx', 'psd', 'pya', 'pyc', 'pyo', 'pyv',\n    'qt',\n    'rar', 'ras', 'raw', 'resources', 'rgb', 'rip', 'rlc', 'rmf', 'rmvb', 'rpm', 'rtf', 'rz',\n    's3m', 's7z', 'scpt', 'sgi', 'shar', 'snap', 'sil', 'sketch', 'slk', 'smv', 'snk', 'so',\n    'stl', 'suo', 'sub', 'swf',\n    'tar', 'tbz', 'tbz2', 'tga', 'tgz', 'thmx', 'tif', 'tiff', 'tlz', 'ttc', 'ttf', 'txz',\n    'udf', 'uvh', 'uvi', 'uvm', 'uvp', 'uvs', 'uvu',\n    'viv', 'vob',\n    'war', 'wav', 'wax', 'wbmp', 'wdp', 'weba', 'webm', 'webp', 'whl', 'wim', 'wm', 'wma',\n    'wmv', 'wmx', 'woff', 'woff2', 'wrm', 'wvx',\n    'xbm', 'xif', 'xla', 'xlam', 'xls', 'xlsb', 'xlsm', 'xlsx', 'xlt', 'xltm', 'xltx', 'xm',\n    'xmind', 'xpi', 'xpm', 'xwd', 'xz',\n    'z', 'zip', 'zipx',\n]);\nconst isBinaryPath = (filePath) => binaryExtensions.has(sp.extname(filePath).slice(1).toLowerCase());\n// TODO: emit errors properly. Example: EMFILE on Macos.\nconst foreach = (val, fn) => {\n    if (val instanceof Set) {\n        val.forEach(fn);\n    }\n    else {\n        fn(val);\n    }\n};\nconst addAndConvert = (main, prop, item) => {\n    let container = main[prop];\n    if (!(container instanceof Set)) {\n        main[prop] = container = new Set([container]);\n    }\n    container.add(item);\n};\nconst clearItem = (cont) => (key) => {\n    const set = cont[key];\n    if (set instanceof Set) {\n        set.clear();\n    }\n    else {\n        delete cont[key];\n    }\n};\nconst delFromSet = (main, prop, item) => {\n    const container = main[prop];\n    if (container instanceof Set) {\n        container.delete(item);\n    }\n    else if (container === item) {\n        delete main[prop];\n    }\n};\nconst isEmptySet = (val) => (val instanceof Set ? val.size === 0 : !val);\nconst FsWatchInstances = new Map();\n/**\n * Instantiates the fs_watch interface\n * @param path to be watched\n * @param options to be passed to fs_watch\n * @param listener main event handler\n * @param errHandler emits info about errors\n * @param emitRaw emits raw event data\n * @returns {NativeFsWatcher}\n */\nfunction createFsWatchInstance(path, options, listener, errHandler, emitRaw) {\n    const handleEvent = (rawEvent, evPath) => {\n        listener(path);\n        emitRaw(rawEvent, evPath, { watchedPath: path });\n        // emit based on events occurring for files from a directory's watcher in\n        // case the file's watcher misses it (and rely on throttling to de-dupe)\n        if (evPath && path !== evPath) {\n            fsWatchBroadcast(sp.resolve(path, evPath), KEY_LISTENERS, sp.join(path, evPath));\n        }\n    };\n    try {\n        return fs_watch(path, {\n            persistent: options.persistent,\n        }, handleEvent);\n    }\n    catch (error) {\n        errHandler(error);\n        return undefined;\n    }\n}\n/**\n * Helper for passing fs_watch event data to a collection of listeners\n * @param fullPath absolute path bound to fs_watch instance\n */\nconst fsWatchBroadcast = (fullPath, listenerType, val1, val2, val3) => {\n    const cont = FsWatchInstances.get(fullPath);\n    if (!cont)\n        return;\n    foreach(cont[listenerType], (listener) => {\n        listener(val1, val2, val3);\n    });\n};\n/**\n * Instantiates the fs_watch interface or binds listeners\n * to an existing one covering the same file system entry\n * @param path\n * @param fullPath absolute path\n * @param options to be passed to fs_watch\n * @param handlers container for event listener functions\n */\nconst setFsWatchListener = (path, fullPath, options, handlers) => {\n    const { listener, errHandler, rawEmitter } = handlers;\n    let cont = FsWatchInstances.get(fullPath);\n    let watcher;\n    if (!options.persistent) {\n        watcher = createFsWatchInstance(path, options, listener, errHandler, rawEmitter);\n        if (!watcher)\n            return;\n        return watcher.close.bind(watcher);\n    }\n    if (cont) {\n        addAndConvert(cont, KEY_LISTENERS, listener);\n        addAndConvert(cont, KEY_ERR, errHandler);\n        addAndConvert(cont, KEY_RAW, rawEmitter);\n    }\n    else {\n        watcher = createFsWatchInstance(path, options, fsWatchBroadcast.bind(null, fullPath, KEY_LISTENERS), errHandler, // no need to use broadcast here\n        fsWatchBroadcast.bind(null, fullPath, KEY_RAW));\n        if (!watcher)\n            return;\n        watcher.on(EV.ERROR, async (error) => {\n            const broadcastErr = fsWatchBroadcast.bind(null, fullPath, KEY_ERR);\n            if (cont)\n                cont.watcherUnusable = true; // documented since Node 10.4.1\n            // Workaround for https://github.com/joyent/node/issues/4337\n            if (isWindows && error.code === 'EPERM') {\n                try {\n                    const fd = await open(path, 'r');\n                    await fd.close();\n                    broadcastErr(error);\n                }\n                catch (err) {\n                    // do nothing\n                }\n            }\n            else {\n                broadcastErr(error);\n            }\n        });\n        cont = {\n            listeners: listener,\n            errHandlers: errHandler,\n            rawEmitters: rawEmitter,\n            watcher,\n        };\n        FsWatchInstances.set(fullPath, cont);\n    }\n    // const index = cont.listeners.indexOf(listener);\n    // removes this instance's listeners and closes the underlying fs_watch\n    // instance if there are no more listeners left\n    return () => {\n        delFromSet(cont, KEY_LISTENERS, listener);\n        delFromSet(cont, KEY_ERR, errHandler);\n        delFromSet(cont, KEY_RAW, rawEmitter);\n        if (isEmptySet(cont.listeners)) {\n            // Check to protect against issue gh-730.\n            // if (cont.watcherUnusable) {\n            cont.watcher.close();\n            // }\n            FsWatchInstances.delete(fullPath);\n            HANDLER_KEYS.forEach(clearItem(cont));\n            // @ts-ignore\n            cont.watcher = undefined;\n            Object.freeze(cont);\n        }\n    };\n};\n// fs_watchFile helpers\n// object to hold per-process fs_watchFile instances\n// (may be shared across chokidar FSWatcher instances)\nconst FsWatchFileInstances = new Map();\n/**\n * Instantiates the fs_watchFile interface or binds listeners\n * to an existing one covering the same file system entry\n * @param path to be watched\n * @param fullPath absolute path\n * @param options options to be passed to fs_watchFile\n * @param handlers container for event listener functions\n * @returns closer\n */\nconst setFsWatchFileListener = (path, fullPath, options, handlers) => {\n    const { listener, rawEmitter } = handlers;\n    let cont = FsWatchFileInstances.get(fullPath);\n    // let listeners = new Set();\n    // let rawEmitters = new Set();\n    const copts = cont && cont.options;\n    if (copts && (copts.persistent < options.persistent || copts.interval > options.interval)) {\n        // \"Upgrade\" the watcher to persistence or a quicker interval.\n        // This creates some unlikely edge case issues if the user mixes\n        // settings in a very weird way, but solving for those cases\n        // doesn't seem worthwhile for the added complexity.\n        // listeners = cont.listeners;\n        // rawEmitters = cont.rawEmitters;\n        unwatchFile(fullPath);\n        cont = undefined;\n    }\n    if (cont) {\n        addAndConvert(cont, KEY_LISTENERS, listener);\n        addAndConvert(cont, KEY_RAW, rawEmitter);\n    }\n    else {\n        // TODO\n        // listeners.add(listener);\n        // rawEmitters.add(rawEmitter);\n        cont = {\n            listeners: listener,\n            rawEmitters: rawEmitter,\n            options,\n            watcher: watchFile(fullPath, options, (curr, prev) => {\n                foreach(cont.rawEmitters, (rawEmitter) => {\n                    rawEmitter(EV.CHANGE, fullPath, { curr, prev });\n                });\n                const currmtime = curr.mtimeMs;\n                if (curr.size !== prev.size || currmtime > prev.mtimeMs || currmtime === 0) {\n                    foreach(cont.listeners, (listener) => listener(path, curr));\n                }\n            }),\n        };\n        FsWatchFileInstances.set(fullPath, cont);\n    }\n    // const index = cont.listeners.indexOf(listener);\n    // Removes this instance's listeners and closes the underlying fs_watchFile\n    // instance if there are no more listeners left.\n    return () => {\n        delFromSet(cont, KEY_LISTENERS, listener);\n        delFromSet(cont, KEY_RAW, rawEmitter);\n        if (isEmptySet(cont.listeners)) {\n            FsWatchFileInstances.delete(fullPath);\n            unwatchFile(fullPath);\n            cont.options = cont.watcher = undefined;\n            Object.freeze(cont);\n        }\n    };\n};\n/**\n * @mixin\n */\nexport class NodeFsHandler {\n    fsw;\n    _boundHandleError;\n    constructor(fsW) {\n        this.fsw = fsW;\n        this._boundHandleError = (error) => fsW._handleError(error);\n    }\n    /**\n     * Watch file for changes with fs_watchFile or fs_watch.\n     * @param path to file or dir\n     * @param listener on fs change\n     * @returns closer for the watcher instance\n     */\n    _watchWithNodeFs(path, listener) {\n        const opts = this.fsw.options;\n        const directory = sp.dirname(path);\n        const basename = sp.basename(path);\n        const parent = this.fsw._getWatchedDir(directory);\n        parent.add(basename);\n        const absolutePath = sp.resolve(path);\n        const options = {\n            persistent: opts.persistent,\n        };\n        if (!listener)\n            listener = EMPTY_FN;\n        let closer;\n        if (opts.usePolling) {\n            const enableBin = opts.interval !== opts.binaryInterval;\n            options.interval = enableBin && isBinaryPath(basename) ? opts.binaryInterval : opts.interval;\n            closer = setFsWatchFileListener(path, absolutePath, options, {\n                listener,\n                rawEmitter: this.fsw._emitRaw,\n            });\n        }\n        else {\n            closer = setFsWatchListener(path, absolutePath, options, {\n                listener,\n                errHandler: this._boundHandleError,\n                rawEmitter: this.fsw._emitRaw,\n            });\n        }\n        return closer;\n    }\n    /**\n     * Watch a file and emit add event if warranted.\n     * @returns closer for the watcher instance\n     */\n    _handleFile(file, stats, initialAdd) {\n        if (this.fsw.closed) {\n            return;\n        }\n        const dirname = sp.dirname(file);\n        const basename = sp.basename(file);\n        const parent = this.fsw._getWatchedDir(dirname);\n        // stats is always present\n        let prevStats = stats;\n        // if the file is already being watched, do nothing\n        if (parent.has(basename))\n            return;\n        const listener = async (path, newStats) => {\n            if (!this.fsw._throttle(THROTTLE_MODE_WATCH, file, 5))\n                return;\n            if (!newStats || newStats.mtimeMs === 0) {\n                try {\n                    const newStats = await stat(file);\n                    if (this.fsw.closed)\n                        return;\n                    // Check that change event was not fired because of changed only accessTime.\n                    const at = newStats.atimeMs;\n                    const mt = newStats.mtimeMs;\n                    if (!at || at <= mt || mt !== prevStats.mtimeMs) {\n                        this.fsw._emit(EV.CHANGE, file, newStats);\n                    }\n                    if ((isMacos || isLinux || isFreeBSD) && prevStats.ino !== newStats.ino) {\n                        this.fsw._closeFile(path);\n                        prevStats = newStats;\n                        const closer = this._watchWithNodeFs(file, listener);\n                        if (closer)\n                            this.fsw._addPathCloser(path, closer);\n                    }\n                    else {\n                        prevStats = newStats;\n                    }\n                }\n                catch (error) {\n                    // Fix issues where mtime is null but file is still present\n                    this.fsw._remove(dirname, basename);\n                }\n                // add is about to be emitted if file not already tracked in parent\n            }\n            else if (parent.has(basename)) {\n                // Check that change event was not fired because of changed only accessTime.\n                const at = newStats.atimeMs;\n                const mt = newStats.mtimeMs;\n                if (!at || at <= mt || mt !== prevStats.mtimeMs) {\n                    this.fsw._emit(EV.CHANGE, file, newStats);\n                }\n                prevStats = newStats;\n            }\n        };\n        // kick off the watcher\n        const closer = this._watchWithNodeFs(file, listener);\n        // emit an add event if we're supposed to\n        if (!(initialAdd && this.fsw.options.ignoreInitial) && this.fsw._isntIgnored(file)) {\n            if (!this.fsw._throttle(EV.ADD, file, 0))\n                return;\n            this.fsw._emit(EV.ADD, file, stats);\n        }\n        return closer;\n    }\n    /**\n     * Handle symlinks encountered while reading a dir.\n     * @param entry returned by readdirp\n     * @param directory path of dir being read\n     * @param path of this item\n     * @param item basename of this item\n     * @returns true if no more processing is needed for this entry.\n     */\n    async _handleSymlink(entry, directory, path, item) {\n        if (this.fsw.closed) {\n            return;\n        }\n        const full = entry.fullPath;\n        const dir = this.fsw._getWatchedDir(directory);\n        if (!this.fsw.options.followSymlinks) {\n            // watch symlink directly (don't follow) and detect changes\n            this.fsw._incrReadyCount();\n            let linkPath;\n            try {\n                linkPath = await fsrealpath(path);\n            }\n            catch (e) {\n                this.fsw._emitReady();\n                return true;\n            }\n            if (this.fsw.closed)\n                return;\n            if (dir.has(item)) {\n                if (this.fsw._symlinkPaths.get(full) !== linkPath) {\n                    this.fsw._symlinkPaths.set(full, linkPath);\n                    this.fsw._emit(EV.CHANGE, path, entry.stats);\n                }\n            }\n            else {\n                dir.add(item);\n                this.fsw._symlinkPaths.set(full, linkPath);\n                this.fsw._emit(EV.ADD, path, entry.stats);\n            }\n            this.fsw._emitReady();\n            return true;\n        }\n        // don't follow the same symlink more than once\n        if (this.fsw._symlinkPaths.has(full)) {\n            return true;\n        }\n        this.fsw._symlinkPaths.set(full, true);\n    }\n    _handleRead(directory, initialAdd, wh, target, dir, depth, throttler) {\n        // Normalize the directory name on Windows\n        directory = sp.join(directory, '');\n        const throttleKey = target ? `${directory}:${target}` : directory;\n        throttler = this.fsw._throttle('readdir', throttleKey, 1000);\n        if (!throttler)\n            return;\n        const previous = this.fsw._getWatchedDir(wh.path);\n        const current = new Set();\n        let stream = this.fsw._readdirp(directory, {\n            fileFilter: (entry) => wh.filterPath(entry),\n            directoryFilter: (entry) => wh.filterDir(entry),\n        });\n        if (!stream)\n            return;\n        stream\n            .on(STR_DATA, async (entry) => {\n            if (this.fsw.closed) {\n                stream = undefined;\n                return;\n            }\n            const item = entry.path;\n            let path = sp.join(directory, item);\n            current.add(item);\n            if (entry.stats.isSymbolicLink() &&\n                (await this._handleSymlink(entry, directory, path, item))) {\n                return;\n            }\n            if (this.fsw.closed) {\n                stream = undefined;\n                return;\n            }\n            // Files that present in current directory snapshot\n            // but absent in previous are added to watch list and\n            // emit `add` event.\n            if (item === target || (!target && !previous.has(item))) {\n                this.fsw._incrReadyCount();\n                // ensure relativeness of path is preserved in case of watcher reuse\n                path = sp.join(dir, sp.relative(dir, path));\n                this._addToNodeFs(path, initialAdd, wh, depth + 1);\n            }\n        })\n            .on(EV.ERROR, this._boundHandleError);\n        return new Promise((resolve, reject) => {\n            if (!stream)\n                return reject();\n            stream.once(STR_END, () => {\n                if (this.fsw.closed) {\n                    stream = undefined;\n                    return;\n                }\n                const wasThrottled = throttler ? throttler.clear() : false;\n                resolve(undefined);\n                // Files that absent in current directory snapshot\n                // but present in previous emit `remove` event\n                // and are removed from @watched[directory].\n                previous\n                    .getChildren()\n                    .filter((item) => {\n                    return item !== directory && !current.has(item);\n                })\n                    .forEach((item) => {\n                    this.fsw._remove(directory, item);\n                });\n                stream = undefined;\n                // one more time for any missed in case changes came in extremely quickly\n                if (wasThrottled)\n                    this._handleRead(directory, false, wh, target, dir, depth, throttler);\n            });\n        });\n    }\n    /**\n     * Read directory to add / remove files from `@watched` list and re-read it on change.\n     * @param dir fs path\n     * @param stats\n     * @param initialAdd\n     * @param depth relative to user-supplied path\n     * @param target child path targeted for watch\n     * @param wh Common watch helpers for this path\n     * @param realpath\n     * @returns closer for the watcher instance.\n     */\n    async _handleDir(dir, stats, initialAdd, depth, target, wh, realpath) {\n        const parentDir = this.fsw._getWatchedDir(sp.dirname(dir));\n        const tracked = parentDir.has(sp.basename(dir));\n        if (!(initialAdd && this.fsw.options.ignoreInitial) && !target && !tracked) {\n            this.fsw._emit(EV.ADD_DIR, dir, stats);\n        }\n        // ensure dir is tracked (harmless if redundant)\n        parentDir.add(sp.basename(dir));\n        this.fsw._getWatchedDir(dir);\n        let throttler;\n        let closer;\n        const oDepth = this.fsw.options.depth;\n        if ((oDepth == null || depth <= oDepth) && !this.fsw._symlinkPaths.has(realpath)) {\n            if (!target) {\n                await this._handleRead(dir, initialAdd, wh, target, dir, depth, throttler);\n                if (this.fsw.closed)\n                    return;\n            }\n            closer = this._watchWithNodeFs(dir, (dirPath, stats) => {\n                // if current directory is removed, do nothing\n                if (stats && stats.mtimeMs === 0)\n                    return;\n                this._handleRead(dirPath, false, wh, target, dir, depth, throttler);\n            });\n        }\n        return closer;\n    }\n    /**\n     * Handle added file, directory, or glob pattern.\n     * Delegates call to _handleFile / _handleDir after checks.\n     * @param path to file or ir\n     * @param initialAdd was the file added at watch instantiation?\n     * @param priorWh depth relative to user-supplied path\n     * @param depth Child path actually targeted for watch\n     * @param target Child path actually targeted for watch\n     */\n    async _addToNodeFs(path, initialAdd, priorWh, depth, target) {\n        const ready = this.fsw._emitReady;\n        if (this.fsw._isIgnored(path) || this.fsw.closed) {\n            ready();\n            return false;\n        }\n        const wh = this.fsw._getWatchHelpers(path);\n        if (priorWh) {\n            wh.filterPath = (entry) => priorWh.filterPath(entry);\n            wh.filterDir = (entry) => priorWh.filterDir(entry);\n        }\n        // evaluate what is at the path we're being asked to watch\n        try {\n            const stats = await statMethods[wh.statMethod](wh.watchPath);\n            if (this.fsw.closed)\n                return;\n            if (this.fsw._isIgnored(wh.watchPath, stats)) {\n                ready();\n                return false;\n            }\n            const follow = this.fsw.options.followSymlinks;\n            let closer;\n            if (stats.isDirectory()) {\n                const absPath = sp.resolve(path);\n                const targetPath = follow ? await fsrealpath(path) : path;\n                if (this.fsw.closed)\n                    return;\n                closer = await this._handleDir(wh.watchPath, stats, initialAdd, depth, target, wh, targetPath);\n                if (this.fsw.closed)\n                    return;\n                // preserve this symlink's target path\n                if (absPath !== targetPath && targetPath !== undefined) {\n                    this.fsw._symlinkPaths.set(absPath, targetPath);\n                }\n            }\n            else if (stats.isSymbolicLink()) {\n                const targetPath = follow ? await fsrealpath(path) : path;\n                if (this.fsw.closed)\n                    return;\n                const parent = sp.dirname(wh.watchPath);\n                this.fsw._getWatchedDir(parent).add(wh.watchPath);\n                this.fsw._emit(EV.ADD, wh.watchPath, stats);\n                closer = await this._handleDir(parent, stats, initialAdd, depth, path, wh, targetPath);\n                if (this.fsw.closed)\n                    return;\n                // preserve this symlink's target path\n                if (targetPath !== undefined) {\n                    this.fsw._symlinkPaths.set(sp.resolve(path), targetPath);\n                }\n            }\n            else {\n                closer = this._handleFile(wh.watchPath, stats, initialAdd);\n            }\n            ready();\n            if (closer)\n                this.fsw._addPathCloser(path, closer);\n            return false;\n        }\n        catch (error) {\n            if (this.fsw._handleError(error)) {\n                ready();\n                return path;\n            }\n        }\n    }\n}\n","/*! chokidar - MIT License (c) 2012 Paul Miller (paulmillr.com) */\nimport { EventEmitter } from 'node:events';\nimport { stat as statcb, Stats } from 'node:fs';\nimport { readdir, stat } from 'node:fs/promises';\nimport * as sp from 'node:path';\nimport { readdirp, ReaddirpStream } from 'readdirp';\nimport { EMPTY_FN, EVENTS as EV, isIBMi, isWindows, NodeFsHandler, STR_CLOSE, STR_END, } from './handler.js';\nconst SLASH = '/';\nconst SLASH_SLASH = '//';\nconst ONE_DOT = '.';\nconst TWO_DOTS = '..';\nconst STRING_TYPE = 'string';\nconst BACK_SLASH_RE = /\\\\/g;\nconst DOUBLE_SLASH_RE = /\\/\\//g;\nconst DOT_RE = /\\..*\\.(sw[px])$|~$|\\.subl.*\\.tmp/;\nconst REPLACER_RE = /^\\.[/\\\\]/;\nfunction arrify(item) {\n    return Array.isArray(item) ? item : [item];\n}\nconst isMatcherObject = (matcher) => typeof matcher === 'object' && matcher !== null && !(matcher instanceof RegExp);\nfunction createPattern(matcher) {\n    if (typeof matcher === 'function')\n        return matcher;\n    if (typeof matcher === 'string')\n        return (string) => matcher === string;\n    if (matcher instanceof RegExp)\n        return (string) => matcher.test(string);\n    if (typeof matcher === 'object' && matcher !== null) {\n        return (string) => {\n            if (matcher.path === string)\n                return true;\n            if (matcher.recursive) {\n                const relative = sp.relative(matcher.path, string);\n                if (!relative) {\n                    return false;\n                }\n                return !relative.startsWith('..') && !sp.isAbsolute(relative);\n            }\n            return false;\n        };\n    }\n    return () => false;\n}\nfunction normalizePath(path) {\n    if (typeof path !== 'string')\n        throw new Error('string expected');\n    path = sp.normalize(path);\n    path = path.replace(/\\\\/g, '/');\n    let prepend = false;\n    if (path.startsWith('//'))\n        prepend = true;\n    path = path.replace(DOUBLE_SLASH_RE, '/');\n    if (prepend)\n        path = '/' + path;\n    return path;\n}\nfunction matchPatterns(patterns, testString, stats) {\n    const path = normalizePath(testString);\n    for (let index = 0; index < patterns.length; index++) {\n        const pattern = patterns[index];\n        if (pattern(path, stats)) {\n            return true;\n        }\n    }\n    return false;\n}\nfunction anymatch(matchers, testString) {\n    if (matchers == null) {\n        throw new TypeError('anymatch: specify first argument');\n    }\n    // Early cache for matchers.\n    const matchersArray = arrify(matchers);\n    const patterns = matchersArray.map((matcher) => createPattern(matcher));\n    if (testString == null) {\n        return (testString, stats) => {\n            return matchPatterns(patterns, testString, stats);\n        };\n    }\n    return matchPatterns(patterns, testString);\n}\nconst unifyPaths = (paths_) => {\n    const paths = arrify(paths_).flat();\n    if (!paths.every((p) => typeof p === STRING_TYPE)) {\n        throw new TypeError(`Non-string provided as watch path: ${paths}`);\n    }\n    return paths.map(normalizePathToUnix);\n};\n// If SLASH_SLASH occurs at the beginning of path, it is not replaced\n//     because \"//StoragePC/DrivePool/Movies\" is a valid network path\nconst toUnix = (string) => {\n    let str = string.replace(BACK_SLASH_RE, SLASH);\n    let prepend = false;\n    if (str.startsWith(SLASH_SLASH)) {\n        prepend = true;\n    }\n    str = str.replace(DOUBLE_SLASH_RE, SLASH);\n    if (prepend) {\n        str = SLASH + str;\n    }\n    return str;\n};\n// Our version of upath.normalize\n// TODO: this is not equal to path-normalize module - investigate why\nconst normalizePathToUnix = (path) => toUnix(sp.normalize(toUnix(path)));\n// TODO: refactor\nconst normalizeIgnored = (cwd = '') => (path) => {\n    if (typeof path === 'string') {\n        return normalizePathToUnix(sp.isAbsolute(path) ? path : sp.join(cwd, path));\n    }\n    else {\n        return path;\n    }\n};\nconst getAbsolutePath = (path, cwd) => {\n    if (sp.isAbsolute(path)) {\n        return path;\n    }\n    return sp.join(cwd, path);\n};\nconst EMPTY_SET = Object.freeze(new Set());\n/**\n * Directory entry.\n */\nclass DirEntry {\n    path;\n    _removeWatcher;\n    items;\n    constructor(dir, removeWatcher) {\n        this.path = dir;\n        this._removeWatcher = removeWatcher;\n        this.items = new Set();\n    }\n    add(item) {\n        const { items } = this;\n        if (!items)\n            return;\n        if (item !== ONE_DOT && item !== TWO_DOTS)\n            items.add(item);\n    }\n    async remove(item) {\n        const { items } = this;\n        if (!items)\n            return;\n        items.delete(item);\n        if (items.size > 0)\n            return;\n        const dir = this.path;\n        try {\n            await readdir(dir);\n        }\n        catch (err) {\n            if (this._removeWatcher) {\n                this._removeWatcher(sp.dirname(dir), sp.basename(dir));\n            }\n        }\n    }\n    has(item) {\n        const { items } = this;\n        if (!items)\n            return;\n        return items.has(item);\n    }\n    getChildren() {\n        const { items } = this;\n        if (!items)\n            return [];\n        return [...items.values()];\n    }\n    dispose() {\n        this.items.clear();\n        this.path = '';\n        this._removeWatcher = EMPTY_FN;\n        this.items = EMPTY_SET;\n        Object.freeze(this);\n    }\n}\nconst STAT_METHOD_F = 'stat';\nconst STAT_METHOD_L = 'lstat';\nexport class WatchHelper {\n    fsw;\n    path;\n    watchPath;\n    fullWatchPath;\n    dirParts;\n    followSymlinks;\n    statMethod;\n    constructor(path, follow, fsw) {\n        this.fsw = fsw;\n        const watchPath = path;\n        this.path = path = path.replace(REPLACER_RE, '');\n        this.watchPath = watchPath;\n        this.fullWatchPath = sp.resolve(watchPath);\n        this.dirParts = [];\n        this.dirParts.forEach((parts) => {\n            if (parts.length > 1)\n                parts.pop();\n        });\n        this.followSymlinks = follow;\n        this.statMethod = follow ? STAT_METHOD_F : STAT_METHOD_L;\n    }\n    entryPath(entry) {\n        return sp.join(this.watchPath, sp.relative(this.watchPath, entry.fullPath));\n    }\n    filterPath(entry) {\n        const { stats } = entry;\n        if (stats && stats.isSymbolicLink())\n            return this.filterDir(entry);\n        const resolvedPath = this.entryPath(entry);\n        // TODO: what if stats is undefined? remove !\n        return this.fsw._isntIgnored(resolvedPath, stats) && this.fsw._hasReadPermissions(stats);\n    }\n    filterDir(entry) {\n        return this.fsw._isntIgnored(this.entryPath(entry), entry.stats);\n    }\n}\n/**\n * Watches files & directories for changes. Emitted events:\n * `add`, `addDir`, `change`, `unlink`, `unlinkDir`, `all`, `error`\n *\n *     new FSWatcher()\n *       .add(directories)\n *       .on('add', path => log('File', path, 'was added'))\n */\nexport class FSWatcher extends EventEmitter {\n    closed;\n    options;\n    _closers;\n    _ignoredPaths;\n    _throttled;\n    _streams;\n    _symlinkPaths;\n    _watched;\n    _pendingWrites;\n    _pendingUnlinks;\n    _readyCount;\n    _emitReady;\n    _closePromise;\n    _userIgnored;\n    _readyEmitted;\n    _emitRaw;\n    _boundRemove;\n    _nodeFsHandler;\n    // Not indenting methods for history sake; for now.\n    constructor(_opts = {}) {\n        super();\n        this.closed = false;\n        this._closers = new Map();\n        this._ignoredPaths = new Set();\n        this._throttled = new Map();\n        this._streams = new Set();\n        this._symlinkPaths = new Map();\n        this._watched = new Map();\n        this._pendingWrites = new Map();\n        this._pendingUnlinks = new Map();\n        this._readyCount = 0;\n        this._readyEmitted = false;\n        const awf = _opts.awaitWriteFinish;\n        const DEF_AWF = { stabilityThreshold: 2000, pollInterval: 100 };\n        const opts = {\n            // Defaults\n            persistent: true,\n            ignoreInitial: false,\n            ignorePermissionErrors: false,\n            interval: 100,\n            binaryInterval: 300,\n            followSymlinks: true,\n            usePolling: false,\n            // useAsync: false,\n            atomic: true, // NOTE: overwritten later (depends on usePolling)\n            ..._opts,\n            // Change format\n            ignored: _opts.ignored ? arrify(_opts.ignored) : arrify([]),\n            awaitWriteFinish: awf === true ? DEF_AWF : typeof awf === 'object' ? { ...DEF_AWF, ...awf } : false,\n        };\n        // Always default to polling on IBM i because fs.watch() is not available on IBM i.\n        if (isIBMi)\n            opts.usePolling = true;\n        // Editor atomic write normalization enabled by default with fs.watch\n        if (opts.atomic === undefined)\n            opts.atomic = !opts.usePolling;\n        // opts.atomic = typeof _opts.atomic === 'number' ? _opts.atomic : 100;\n        // Global override. Useful for developers, who need to force polling for all\n        // instances of chokidar, regardless of usage / dependency depth\n        const envPoll = process.env.CHOKIDAR_USEPOLLING;\n        if (envPoll !== undefined) {\n            const envLower = envPoll.toLowerCase();\n            if (envLower === 'false' || envLower === '0')\n                opts.usePolling = false;\n            else if (envLower === 'true' || envLower === '1')\n                opts.usePolling = true;\n            else\n                opts.usePolling = !!envLower;\n        }\n        const envInterval = process.env.CHOKIDAR_INTERVAL;\n        if (envInterval)\n            opts.interval = Number.parseInt(envInterval, 10);\n        // This is done to emit ready only once, but each 'add' will increase that?\n        let readyCalls = 0;\n        this._emitReady = () => {\n            readyCalls++;\n            if (readyCalls >= this._readyCount) {\n                this._emitReady = EMPTY_FN;\n                this._readyEmitted = true;\n                // use process.nextTick to allow time for listener to be bound\n                process.nextTick(() => this.emit(EV.READY));\n            }\n        };\n        this._emitRaw = (...args) => this.emit(EV.RAW, ...args);\n        this._boundRemove = this._remove.bind(this);\n        this.options = opts;\n        this._nodeFsHandler = new NodeFsHandler(this);\n        // You’re frozen when your heart’s not open.\n        Object.freeze(opts);\n    }\n    _addIgnoredPath(matcher) {\n        if (isMatcherObject(matcher)) {\n            // return early if we already have a deeply equal matcher object\n            for (const ignored of this._ignoredPaths) {\n                if (isMatcherObject(ignored) &&\n                    ignored.path === matcher.path &&\n                    ignored.recursive === matcher.recursive) {\n                    return;\n                }\n            }\n        }\n        this._ignoredPaths.add(matcher);\n    }\n    _removeIgnoredPath(matcher) {\n        this._ignoredPaths.delete(matcher);\n        // now find any matcher objects with the matcher as path\n        if (typeof matcher === 'string') {\n            for (const ignored of this._ignoredPaths) {\n                // TODO (43081j): make this more efficient.\n                // probably just make a `this._ignoredDirectories` or some\n                // such thing.\n                if (isMatcherObject(ignored) && ignored.path === matcher) {\n                    this._ignoredPaths.delete(ignored);\n                }\n            }\n        }\n    }\n    // Public methods\n    /**\n     * Adds paths to be watched on an existing FSWatcher instance.\n     * @param paths_ file or file list. Other arguments are unused\n     */\n    add(paths_, _origAdd, _internal) {\n        const { cwd } = this.options;\n        this.closed = false;\n        this._closePromise = undefined;\n        let paths = unifyPaths(paths_);\n        if (cwd) {\n            paths = paths.map((path) => {\n                const absPath = getAbsolutePath(path, cwd);\n                // Check `path` instead of `absPath` because the cwd portion can't be a glob\n                return absPath;\n            });\n        }\n        paths.forEach((path) => {\n            this._removeIgnoredPath(path);\n        });\n        this._userIgnored = undefined;\n        if (!this._readyCount)\n            this._readyCount = 0;\n        this._readyCount += paths.length;\n        Promise.all(paths.map(async (path) => {\n            const res = await this._nodeFsHandler._addToNodeFs(path, !_internal, undefined, 0, _origAdd);\n            if (res)\n                this._emitReady();\n            return res;\n        })).then((results) => {\n            if (this.closed)\n                return;\n            results.forEach((item) => {\n                if (item)\n                    this.add(sp.dirname(item), sp.basename(_origAdd || item));\n            });\n        });\n        return this;\n    }\n    /**\n     * Close watchers or start ignoring events from specified paths.\n     */\n    unwatch(paths_) {\n        if (this.closed)\n            return this;\n        const paths = unifyPaths(paths_);\n        const { cwd } = this.options;\n        paths.forEach((path) => {\n            // convert to absolute path unless relative path already matches\n            if (!sp.isAbsolute(path) && !this._closers.has(path)) {\n                if (cwd)\n                    path = sp.join(cwd, path);\n                path = sp.resolve(path);\n            }\n            this._closePath(path);\n            this._addIgnoredPath(path);\n            if (this._watched.has(path)) {\n                this._addIgnoredPath({\n                    path,\n                    recursive: true,\n                });\n            }\n            // reset the cached userIgnored anymatch fn\n            // to make ignoredPaths changes effective\n            this._userIgnored = undefined;\n        });\n        return this;\n    }\n    /**\n     * Close watchers and remove all listeners from watched paths.\n     */\n    close() {\n        if (this._closePromise) {\n            return this._closePromise;\n        }\n        this.closed = true;\n        // Memory management.\n        this.removeAllListeners();\n        const closers = [];\n        this._closers.forEach((closerList) => closerList.forEach((closer) => {\n            const promise = closer();\n            if (promise instanceof Promise)\n                closers.push(promise);\n        }));\n        this._streams.forEach((stream) => stream.destroy());\n        this._userIgnored = undefined;\n        this._readyCount = 0;\n        this._readyEmitted = false;\n        this._watched.forEach((dirent) => dirent.dispose());\n        this._closers.clear();\n        this._watched.clear();\n        this._streams.clear();\n        this._symlinkPaths.clear();\n        this._throttled.clear();\n        this._closePromise = closers.length\n            ? Promise.all(closers).then(() => undefined)\n            : Promise.resolve();\n        return this._closePromise;\n    }\n    /**\n     * Expose list of watched paths\n     * @returns for chaining\n     */\n    getWatched() {\n        const watchList = {};\n        this._watched.forEach((entry, dir) => {\n            const key = this.options.cwd ? sp.relative(this.options.cwd, dir) : dir;\n            const index = key || ONE_DOT;\n            watchList[index] = entry.getChildren().sort();\n        });\n        return watchList;\n    }\n    emitWithAll(event, args) {\n        this.emit(event, ...args);\n        if (event !== EV.ERROR)\n            this.emit(EV.ALL, event, ...args);\n    }\n    // Common helpers\n    // --------------\n    /**\n     * Normalize and emit events.\n     * Calling _emit DOES NOT MEAN emit() would be called!\n     * @param event Type of event\n     * @param path File or directory path\n     * @param stats arguments to be passed with event\n     * @returns the error if defined, otherwise the value of the FSWatcher instance's `closed` flag\n     */\n    async _emit(event, path, stats) {\n        if (this.closed)\n            return;\n        const opts = this.options;\n        if (isWindows)\n            path = sp.normalize(path);\n        if (opts.cwd)\n            path = sp.relative(opts.cwd, path);\n        const args = [path];\n        if (stats != null)\n            args.push(stats);\n        const awf = opts.awaitWriteFinish;\n        let pw;\n        if (awf && (pw = this._pendingWrites.get(path))) {\n            pw.lastChange = new Date();\n            return this;\n        }\n        if (opts.atomic) {\n            if (event === EV.UNLINK) {\n                this._pendingUnlinks.set(path, [event, ...args]);\n                setTimeout(() => {\n                    this._pendingUnlinks.forEach((entry, path) => {\n                        this.emit(...entry);\n                        this.emit(EV.ALL, ...entry);\n                        this._pendingUnlinks.delete(path);\n                    });\n                }, typeof opts.atomic === 'number' ? opts.atomic : 100);\n                return this;\n            }\n            if (event === EV.ADD && this._pendingUnlinks.has(path)) {\n                event = EV.CHANGE;\n                this._pendingUnlinks.delete(path);\n            }\n        }\n        if (awf && (event === EV.ADD || event === EV.CHANGE) && this._readyEmitted) {\n            const awfEmit = (err, stats) => {\n                if (err) {\n                    event = EV.ERROR;\n                    args[0] = err;\n                    this.emitWithAll(event, args);\n                }\n                else if (stats) {\n                    // if stats doesn't exist the file must have been deleted\n                    if (args.length > 1) {\n                        args[1] = stats;\n                    }\n                    else {\n                        args.push(stats);\n                    }\n                    this.emitWithAll(event, args);\n                }\n            };\n            this._awaitWriteFinish(path, awf.stabilityThreshold, event, awfEmit);\n            return this;\n        }\n        if (event === EV.CHANGE) {\n            const isThrottled = !this._throttle(EV.CHANGE, path, 50);\n            if (isThrottled)\n                return this;\n        }\n        if (opts.alwaysStat &&\n            stats === undefined &&\n            (event === EV.ADD || event === EV.ADD_DIR || event === EV.CHANGE)) {\n            const fullPath = opts.cwd ? sp.join(opts.cwd, path) : path;\n            let stats;\n            try {\n                stats = await stat(fullPath);\n            }\n            catch (err) {\n                // do nothing\n            }\n            // Suppress event when fs_stat fails, to avoid sending undefined 'stat'\n            if (!stats || this.closed)\n                return;\n            args.push(stats);\n        }\n        this.emitWithAll(event, args);\n        return this;\n    }\n    /**\n     * Common handler for errors\n     * @returns The error if defined, otherwise the value of the FSWatcher instance's `closed` flag\n     */\n    _handleError(error) {\n        const code = error && error.code;\n        if (error &&\n            code !== 'ENOENT' &&\n            code !== 'ENOTDIR' &&\n            (!this.options.ignorePermissionErrors || (code !== 'EPERM' && code !== 'EACCES'))) {\n            this.emit(EV.ERROR, error);\n        }\n        return error || this.closed;\n    }\n    /**\n     * Helper utility for throttling\n     * @param actionType type being throttled\n     * @param path being acted upon\n     * @param timeout duration of time to suppress duplicate actions\n     * @returns tracking object or false if action should be suppressed\n     */\n    _throttle(actionType, path, timeout) {\n        if (!this._throttled.has(actionType)) {\n            this._throttled.set(actionType, new Map());\n        }\n        const action = this._throttled.get(actionType);\n        if (!action)\n            throw new Error('invalid throttle');\n        const actionPath = action.get(path);\n        if (actionPath) {\n            actionPath.count++;\n            return false;\n        }\n        // eslint-disable-next-line prefer-const\n        let timeoutObject;\n        const clear = () => {\n            const item = action.get(path);\n            const count = item ? item.count : 0;\n            action.delete(path);\n            clearTimeout(timeoutObject);\n            if (item)\n                clearTimeout(item.timeoutObject);\n            return count;\n        };\n        timeoutObject = setTimeout(clear, timeout);\n        const thr = { timeoutObject, clear, count: 0 };\n        action.set(path, thr);\n        return thr;\n    }\n    _incrReadyCount() {\n        return this._readyCount++;\n    }\n    /**\n     * Awaits write operation to finish.\n     * Polls a newly created file for size variations. When files size does not change for 'threshold' milliseconds calls callback.\n     * @param path being acted upon\n     * @param threshold Time in milliseconds a file size must be fixed before acknowledging write OP is finished\n     * @param event\n     * @param awfEmit Callback to be called when ready for event to be emitted.\n     */\n    _awaitWriteFinish(path, threshold, event, awfEmit) {\n        const awf = this.options.awaitWriteFinish;\n        if (typeof awf !== 'object')\n            return;\n        const pollInterval = awf.pollInterval;\n        let timeoutHandler;\n        let fullPath = path;\n        if (this.options.cwd && !sp.isAbsolute(path)) {\n            fullPath = sp.join(this.options.cwd, path);\n        }\n        const now = new Date();\n        const writes = this._pendingWrites;\n        function awaitWriteFinishFn(prevStat) {\n            statcb(fullPath, (err, curStat) => {\n                if (err || !writes.has(path)) {\n                    if (err && err.code !== 'ENOENT')\n                        awfEmit(err);\n                    return;\n                }\n                const now = Number(new Date());\n                if (prevStat && curStat.size !== prevStat.size) {\n                    writes.get(path).lastChange = now;\n                }\n                const pw = writes.get(path);\n                const df = now - pw.lastChange;\n                if (df >= threshold) {\n                    writes.delete(path);\n                    awfEmit(undefined, curStat);\n                }\n                else {\n                    timeoutHandler = setTimeout(awaitWriteFinishFn, pollInterval, curStat);\n                }\n            });\n        }\n        if (!writes.has(path)) {\n            writes.set(path, {\n                lastChange: now,\n                cancelWait: () => {\n                    writes.delete(path);\n                    clearTimeout(timeoutHandler);\n                    return event;\n                },\n            });\n            timeoutHandler = setTimeout(awaitWriteFinishFn, pollInterval);\n        }\n    }\n    /**\n     * Determines whether user has asked to ignore this path.\n     */\n    _isIgnored(path, stats) {\n        if (this.options.atomic && DOT_RE.test(path))\n            return true;\n        if (!this._userIgnored) {\n            const { cwd } = this.options;\n            const ign = this.options.ignored;\n            const ignored = (ign || []).map(normalizeIgnored(cwd));\n            const ignoredPaths = [...this._ignoredPaths];\n            const list = [...ignoredPaths.map(normalizeIgnored(cwd)), ...ignored];\n            this._userIgnored = anymatch(list, undefined);\n        }\n        return this._userIgnored(path, stats);\n    }\n    _isntIgnored(path, stat) {\n        return !this._isIgnored(path, stat);\n    }\n    /**\n     * Provides a set of common helpers and properties relating to symlink handling.\n     * @param path file or directory pattern being watched\n     */\n    _getWatchHelpers(path) {\n        return new WatchHelper(path, this.options.followSymlinks, this);\n    }\n    // Directory helpers\n    // -----------------\n    /**\n     * Provides directory tracking objects\n     * @param directory path of the directory\n     */\n    _getWatchedDir(directory) {\n        const dir = sp.resolve(directory);\n        if (!this._watched.has(dir))\n            this._watched.set(dir, new DirEntry(dir, this._boundRemove));\n        return this._watched.get(dir);\n    }\n    // File helpers\n    // ------------\n    /**\n     * Check for read permissions: https://stackoverflow.com/a/11781404/1358405\n     */\n    _hasReadPermissions(stats) {\n        if (this.options.ignorePermissionErrors)\n            return true;\n        return Boolean(Number(stats.mode) & 0o400);\n    }\n    /**\n     * Handles emitting unlink events for\n     * files and directories, and via recursion, for\n     * files and directories within directories that are unlinked\n     * @param directory within which the following item is located\n     * @param item      base path of item/directory\n     */\n    _remove(directory, item, isDirectory) {\n        // if what is being deleted is a directory, get that directory's paths\n        // for recursive deleting and cleaning of watched object\n        // if it is not a directory, nestedDirectoryChildren will be empty array\n        const path = sp.join(directory, item);\n        const fullPath = sp.resolve(path);\n        isDirectory =\n            isDirectory != null ? isDirectory : this._watched.has(path) || this._watched.has(fullPath);\n        // prevent duplicate handling in case of arriving here nearly simultaneously\n        // via multiple paths (such as _handleFile and _handleDir)\n        if (!this._throttle('remove', path, 100))\n            return;\n        // if the only watched file is removed, watch for its return\n        if (!isDirectory && this._watched.size === 1) {\n            this.add(directory, item, true);\n        }\n        // This will create a new entry in the watched object in either case\n        // so we got to do the directory check beforehand\n        const wp = this._getWatchedDir(path);\n        const nestedDirectoryChildren = wp.getChildren();\n        // Recursively remove children directories / files.\n        nestedDirectoryChildren.forEach((nested) => this._remove(path, nested));\n        // Check if item was on the watched list and remove it\n        const parent = this._getWatchedDir(directory);\n        const wasTracked = parent.has(item);\n        parent.remove(item);\n        // Fixes issue #1042 -> Relative paths were detected and added as symlinks\n        // (https://github.com/paulmillr/chokidar/blob/e1753ddbc9571bdc33b4a4af172d52cb6e611c10/lib/nodefs-handler.js#L612),\n        // but never removed from the map in case the path was deleted.\n        // This leads to an incorrect state if the path was recreated:\n        // https://github.com/paulmillr/chokidar/blob/e1753ddbc9571bdc33b4a4af172d52cb6e611c10/lib/nodefs-handler.js#L553\n        if (this._symlinkPaths.has(fullPath)) {\n            this._symlinkPaths.delete(fullPath);\n        }\n        // If we wait for this file to be fully written, cancel the wait.\n        let relPath = path;\n        if (this.options.cwd)\n            relPath = sp.relative(this.options.cwd, path);\n        if (this.options.awaitWriteFinish && this._pendingWrites.has(relPath)) {\n            const event = this._pendingWrites.get(relPath).cancelWait();\n            if (event === EV.ADD)\n                return;\n        }\n        // The Entry will either be a directory that just got removed\n        // or a bogus entry to a file, in either case we have to remove it\n        this._watched.delete(path);\n        this._watched.delete(fullPath);\n        const eventName = isDirectory ? EV.UNLINK_DIR : EV.UNLINK;\n        if (wasTracked && !this._isIgnored(path))\n            this._emit(eventName, path);\n        // Avoid conflicts if we later create another file with the same name\n        this._closePath(path);\n    }\n    /**\n     * Closes all watchers for a path\n     */\n    _closePath(path) {\n        this._closeFile(path);\n        const dir = sp.dirname(path);\n        this._getWatchedDir(dir).remove(sp.basename(path));\n    }\n    /**\n     * Closes only file-specific watchers\n     */\n    _closeFile(path) {\n        const closers = this._closers.get(path);\n        if (!closers)\n            return;\n        closers.forEach((closer) => closer());\n        this._closers.delete(path);\n    }\n    _addPathCloser(path, closer) {\n        if (!closer)\n            return;\n        let list = this._closers.get(path);\n        if (!list) {\n            list = [];\n            this._closers.set(path, list);\n        }\n        list.push(closer);\n    }\n    _readdirp(root, opts) {\n        if (this.closed)\n            return;\n        const options = { type: EV.ALL, alwaysStat: true, lstat: true, ...opts, depth: 0 };\n        let stream = readdirp(root, options);\n        this._streams.add(stream);\n        stream.once(STR_CLOSE, () => {\n            stream = undefined;\n        });\n        stream.once(STR_END, () => {\n            if (stream) {\n                this._streams.delete(stream);\n                stream = undefined;\n            }\n        });\n        return stream;\n    }\n}\n/**\n * Instantiates watcher with paths to be tracked.\n * @param paths file / directory paths\n * @param options opts, such as `atomic`, `awaitWriteFinish`, `ignored`, and others\n * @returns an instance of FSWatcher for chaining.\n * @example\n * const watcher = watch('.').on('all', (event, path) => { console.log(event, path); });\n * watch('.', { atomic: true, awaitWriteFinish: true, ignored: (f, stats) => stats?.isFile() && !f.endsWith('.js') })\n */\nexport function watch(paths, options = {}) {\n    const watcher = new FSWatcher(options);\n    watcher.add(paths);\n    return watcher;\n}\nexport default { watch: watch, FSWatcher: FSWatcher };\n","import type { ConversationMeta, Include, SortOrder } from \"./types\";\n\nexport function applySort(metas: ConversationMeta[], order: SortOrder): ConversationMeta[] {\n  const out = [...metas];\n  // Tie-break by id (the file path) so the order is fully deterministic and does\n  // not depend on input order. This matters because metas can arrive in\n  // different orders (filesystem discovery vs. an SQLite query), and a tie on\n  // the primary key would otherwise resolve differently between them.\n  const tie = (a: ConversationMeta, b: ConversationMeta) => a.id.localeCompare(b.id);\n  switch (order) {\n    case \"recent\":\n      out.sort((a, b) => b.timestamp.localeCompare(a.timestamp) || tie(a, b));\n      break;\n    case \"oldest\":\n      out.sort((a, b) => a.timestamp.localeCompare(b.timestamp) || tie(a, b));\n      break;\n    case \"messages-desc\":\n      out.sort((a, b) => b.messageCount - a.messageCount || tie(a, b));\n      break;\n    case \"messages-asc\":\n      out.sort((a, b) => a.messageCount - b.messageCount || tie(a, b));\n      break;\n    case \"alpha\":\n      out.sort((a, b) => {\n        const cmp = a.projectName.localeCompare(b.projectName);\n        if (cmp !== 0) return cmp;\n        return a.preview.localeCompare(b.preview) || tie(a, b);\n      });\n      break;\n  }\n  return out;\n}\n\nexport function applySinceFilter(metas: ConversationMeta[], since: string): ConversationMeta[] {\n  const cutoff = parseSinceCutoff(since);\n  return metas.filter((m) => new Date(m.timestamp).getTime() >= cutoff.getTime());\n}\n\nexport function applyIncludeFilter(\n  metas: ConversationMeta[],\n  include: Include,\n): ConversationMeta[] {\n  switch (include) {\n    case \"all\":\n      return metas;\n    case \"conversations\":\n      return metas.filter((m) => !m.isSubagent && !m.isTeammate);\n    case \"subagents\":\n      return metas.filter((m) => m.isSubagent);\n    case \"teammates\":\n      return metas.filter((m) => m.isTeammate);\n  }\n}\n\nexport function applyProjectFilter(metas: ConversationMeta[], project: string): ConversationMeta[] {\n  const lower = project.toLowerCase();\n  return metas.filter(\n    (m) =>\n      m.projectPath.toLowerCase().includes(lower) || m.projectName.toLowerCase().includes(lower),\n  );\n}\n\nexport function applyAccountFilter(metas: ConversationMeta[], account: string): ConversationMeta[] {\n  return metas.filter((m) => m.account === account);\n}\n\nexport function applyPagination<T>(\n  items: T[],\n  limit: number,\n  offset: number,\n): { items: T[]; total: number } {\n  return {\n    items: items.slice(offset, offset + limit),\n    total: items.length,\n  };\n}\n\nexport function parseSinceCutoff(value: string): Date {\n  const s = value.trim();\n  if (!s) throw new Error(\"Empty --since value\");\n\n  // Try ISO date\n  const isoMatch = s.match(/^\\d{4}-\\d{2}-\\d{2}$/);\n  if (isoMatch) {\n    const d = new Date(`${s}T00:00:00Z`);\n    if (!Number.isNaN(d.getTime())) return d;\n  }\n\n  // Try duration: digits + unit\n  const durationMatch = s.match(/^(\\d+)([hdw])$/);\n  if (!durationMatch) {\n    throw new Error(\n      `Invalid --since value \"${s}\": expected duration like \"7d\", \"24h\", \"2w\" or ISO date \"2006-01-02\"`,\n    );\n  }\n\n  const n = parseInt(durationMatch[1], 10);\n  const unit = durationMatch[2];\n  let ms: number;\n  switch (unit) {\n    case \"h\":\n      ms = n * 60 * 60 * 1000;\n      break;\n    case \"d\":\n      ms = n * 24 * 60 * 60 * 1000;\n      break;\n    case \"w\":\n      ms = n * 7 * 24 * 60 * 60 * 1000;\n      break;\n    default:\n      throw new Error(`Invalid unit \"${unit}\"`);\n  }\n\n  return new Date(Date.now() - ms);\n}\n","import { readFileSync } from \"fs\";\nimport { dirname, join } from \"path\";\nimport { getLogger } from \"./logger\";\n\nconst REF_PREFIX = \"ref: refs/heads/\";\nconst MAX_DEPTH = 6;\n\nexport function readGitBranch(projectPath: string): string | null {\n  if (!projectPath) return null;\n  const log = getLogger();\n\n  let dir = projectPath;\n  let depth = 0;\n\n  while (depth < MAX_DEPTH) {\n    const headPath = join(dir, \".git\", \"HEAD\");\n    try {\n      const content = readFileSync(headPath, \"utf-8\").trim();\n      if (content.startsWith(REF_PREFIX)) {\n        const branch = content.slice(REF_PREFIX.length);\n        log.trace({ projectPath, dir, branch }, \"git: branch resolved\");\n        return branch;\n      }\n      // Detached HEAD: raw commit SHA\n      if (content.length >= 7) {\n        log.trace({ projectPath, dir }, \"git: detached HEAD\");\n        return \"(detached)\";\n      }\n      return null;\n    } catch {\n      // .git/HEAD not found at this level\n    }\n\n    const parent = dirname(dir);\n    if (parent === dir) return null; // filesystem root\n    dir = parent;\n    depth++;\n  }\n\n  log.trace({ projectPath }, \"git: no .git found within depth\");\n  return null;\n}\n","import pino, { type Logger, type LoggerOptions } from \"pino\";\n\nlet currentLogger: Logger = pino({ level: \"silent\" });\n\nexport function createLogger(options?: LoggerOptions | Logger): Logger {\n  if (options && typeof (options as Logger).child === \"function\") {\n    return options as Logger;\n  }\n  return pino((options as LoggerOptions) ?? { level: \"silent\" });\n}\n\nexport function setLogger(logger: Logger): void {\n  currentLogger = logger;\n}\n\nexport function getLogger(): Logger {\n  return currentLogger;\n}\n\nexport type { Logger, LoggerOptions };\n","import FlexSearchModule from \"flexsearch\";\n\n// FlexSearch has inconsistent default export across ESM/CJS\nconst FlexSearch = (FlexSearchModule as any).default ?? FlexSearchModule;\n\nimport { getLogger } from \"./logger\";\nimport { buildContentMatch, generateMatches } from \"./search-matches\";\nimport type { ConversationMeta, SearchMatch, SearchResult } from \"./types\";\n\nexport class SearchIndexer {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  private index: any;\n  private documents = new Map<string, ConversationMeta>();\n  // The indexed body per conversation, kept so a hit can produce a real excerpt\n  // instead of falling back to an unrelated preview. Sized by the caller (the\n  // scanner tail-caps it to the content tier) — see the note on addDocument.\n  private searchContents = new Map<string, string>();\n\n  constructor() {\n    this.index = this.createIndex();\n  }\n\n  private createIndex() {\n    return new (FlexSearch as any).Document({\n      document: {\n        id: \"id\",\n        index: [\n          \"content\",\n          \"projectName\",\n          \"projectPath\",\n          \"sessionId\",\n          \"sessionName\",\n          \"account\",\n          \"model\",\n          \"gitBranch\",\n          \"toolNames\",\n        ],\n        store: [\"id\"],\n      },\n      tokenize: \"forward\",\n      resolution: 9,\n      cache: 100,\n    });\n  }\n\n  // `searchContent` is the combined search document (text + thinking + tools),\n  // NOT meta.contentSnippet.\n  //\n  // It arrives pre-capped. This index is `tokenize: \"forward\"` at resolution 9,\n  // which stores every prefix of every token, so it is a resident-memory\n  // structure whose cost is very different from the on-disk FTS index. Feeding\n  // it the full ~128 KB budget across a few hundred conversations would be a\n  // multi-hundred-MB-to-GB index. The scanner therefore caps this to the active\n  // tier's snippetMax and accepts that `persistent: false` has lower recall than\n  // SQLite — an honest, documented divergence rather than a silent one.\n  addDocument(meta: ConversationMeta, searchContent = \"\"): void {\n    this.documents.set(meta.id, meta);\n    this.searchContents.set(meta.id, searchContent);\n    this.index.add(toIndexDoc(meta, searchContent));\n  }\n\n  buildIndex(metas: ConversationMeta[], searchContents?: Map<string, string>): void {\n    this.clear();\n    for (const meta of metas) {\n      this.addDocument(meta, searchContents?.get(meta.id) ?? \"\");\n    }\n    getLogger().debug({ docCount: metas.length }, \"indexer: built\");\n  }\n\n  search(query: string, options?: { fields?: string[]; limit?: number }): SearchResult[] {\n    const limit = options?.limit ?? 50;\n\n    if (!query.trim()) {\n      return this.getRecent(limit);\n    }\n\n    const results = this.index.search(query, { limit: limit * 2, enrich: true });\n\n    const seen = new Set<string>();\n    const searchResults: SearchResult[] = [];\n\n    for (const fieldResult of results) {\n      if (!fieldResult.result) continue;\n      for (const item of fieldResult.result) {\n        const id = typeof item === \"object\" ? (item as { id: string }).id : String(item);\n        if (seen.has(id)) continue;\n        seen.add(id);\n\n        const meta = this.documents.get(id);\n        if (!meta) continue;\n\n        searchResults.push({\n          meta,\n          score: 1,\n          matches: this.matchesFor(meta, query),\n        });\n        if (searchResults.length >= limit) break;\n      }\n      if (searchResults.length >= limit) break;\n    }\n\n    return searchResults;\n  }\n\n  // Body context first (that is what explains why the result appeared), then any\n  // metadata matches. Only when neither hits does generateMatches' preview\n  // fallback stand in.\n  private matchesFor(meta: ConversationMeta, query: string): SearchMatch[] {\n    const contentMatch = buildContentMatch(this.searchContents.get(meta.id) ?? \"\", query);\n    const metaMatches = generateMatches(meta, query);\n    if (!contentMatch) return metaMatches;\n    return [contentMatch, ...metaMatches.filter((m) => m.field !== \"preview\")];\n  }\n\n  private getRecent(limit: number): SearchResult[] {\n    return Array.from(this.documents.values())\n      .sort((a, b) => b.timestamp.localeCompare(a.timestamp))\n      .slice(0, limit)\n      .map((meta) => ({\n        meta,\n        score: 1,\n        matches: [{ field: \"timestamp\", snippet: meta.preview }],\n      }));\n  }\n\n  getDocumentCount(): number {\n    return this.documents.size;\n  }\n\n  // Replace an already-indexed document in place. FlexSearch's `add` does not\n  // overwrite an existing id, so a single-file refresh must go through\n  // `update` to avoid stale matches lingering in the index.\n  updateDocument(meta: ConversationMeta, searchContent = \"\"): void {\n    this.documents.set(meta.id, meta);\n    this.searchContents.set(meta.id, searchContent);\n    this.index.update(toIndexDoc(meta, searchContent));\n  }\n\n  removeDocument(id: string): void {\n    this.documents.delete(id);\n    this.searchContents.delete(id);\n    this.index.remove(id);\n  }\n\n  clear(): void {\n    this.documents.clear();\n    this.searchContents.clear();\n    this.index = this.createIndex();\n    getLogger().trace(\"indexer: cleared\");\n  }\n}\n\nfunction toIndexDoc(meta: ConversationMeta, searchContent: string) {\n  return {\n    id: meta.id,\n    content: searchContent,\n    projectName: meta.projectName,\n    projectPath: meta.projectPath,\n    sessionId: meta.sessionId,\n    sessionName: meta.sessionName,\n    account: meta.account,\n    model: meta.model || \"\",\n    gitBranch: meta.gitBranch || \"\",\n    toolNames: meta.toolNames.join(\" \"),\n  };\n}\n","import type { ConversationMeta, SearchHighlight, SearchMatch } from \"./types\";\n\n// Delimiters handed to FTS5 snippet() to mark matched tokens, stripped again\n// before the excerpt reaches a caller. Control characters (STX/ETX) rather than\n// a textual sentinel like [[HIT]]: a transcript can legitimately contain wiki\n// link syntax, and a collision would silently shift every highlight offset.\nexport const FTS_HIT_OPEN = \"\\u0002\";\nexport const FTS_HIT_CLOSE = \"\\u0003\";\n\n// Tokens of context FTS5 puts around a hit. Clients decide final layout.\nexport const FTS_SNIPPET_TOKENS = 16;\n\nexport const FTS_ELLIPSIS = \"…\";\n\n// Field name used for any conversation-body hit, whichever body column matched.\n// Column identity (text/thinking/tools) is an indexing detail; consumers only\n// need to distinguish \"body\" from \"metadata\".\nexport const CONTENT_FIELD = \"content\";\n\n// Convert one raw FTS5 snippet() string into plain text plus highlight ranges.\n// Returns null when the column carried no marked hit — snippet() returns the\n// head of a column even when the match was in a different column, so marker\n// presence is the only reliable \"did THIS column match\" signal.\nexport function parseFtsSnippet(\n  raw: string | null | undefined,\n): { snippet: string; highlights: SearchHighlight[] } | null {\n  if (!raw?.includes(FTS_HIT_OPEN)) return null;\n\n  const highlights: SearchHighlight[] = [];\n  let snippet = \"\";\n  let openAt = -1;\n\n  for (const ch of raw) {\n    if (ch === FTS_HIT_OPEN) {\n      openAt = snippet.length;\n      continue;\n    }\n    if (ch === FTS_HIT_CLOSE) {\n      if (openAt >= 0 && snippet.length > openAt) {\n        highlights.push({ start: openAt, end: snippet.length });\n      }\n      openAt = -1;\n      continue;\n    }\n    snippet += ch;\n  }\n\n  return highlights.length > 0 ? { snippet, highlights } : null;\n}\n\n// Per-field match snippets for a METADATA hit. Body context no longer comes from\n// here: it comes from FTS5 snippet() (persistent) or buildContentMatch()\n// (in-memory), because meta.contentSnippet is a 5 KB head-biased preview, not\n// the search corpus.\n//\n// Field ids are camelCase, matching ConversationMeta — never the snake_case FTS\n// column names. Consumers switch on matches[].field, so the two vocabularies\n// must not mix. Order follows the documented precedence.\nexport function generateMatches(meta: ConversationMeta, query: string): SearchMatch[] {\n  const matches: SearchMatch[] = [];\n  const lowerQuery = query.toLowerCase();\n\n  const fields: [string, string][] = [\n    [\"sessionName\", meta.sessionName],\n    [\"projectName\", meta.projectName],\n    [\"gitBranch\", meta.gitBranch || \"\"],\n    [\"toolNames\", meta.toolNames.join(\" \")],\n    [\"model\", meta.model || \"\"],\n    [\"account\", meta.account],\n    [\"sessionId\", meta.sessionId],\n  ];\n\n  for (const [field, value] of fields) {\n    const idx = value.toLowerCase().indexOf(lowerQuery);\n    if (idx !== -1) {\n      const start = Math.max(0, idx - 80);\n      const end = Math.min(value.length, idx + query.length + 120);\n      let snippet = value.slice(start, end);\n      if (start > 0) snippet = `...${snippet}`;\n      if (end < value.length) snippet = `${snippet}...`;\n      matches.push({ field, snippet });\n    }\n  }\n\n  return matches.length > 0 ? matches : [{ field: \"preview\", snippet: meta.preview }];\n}\n\n// Body context for the in-memory path, which has no FTS5 snippet(). Locates the\n// query literally in the combined search document and returns the same\n// {field, snippet, highlights} shape the persistent path produces.\nexport function buildContentMatch(searchContent: string, query: string): SearchMatch | null {\n  if (!searchContent || !query.trim()) return null;\n  const idx = searchContent.toLowerCase().indexOf(query.toLowerCase());\n  if (idx === -1) return null;\n\n  const start = Math.max(0, idx - 80);\n  const end = Math.min(searchContent.length, idx + query.length + 120);\n  const body = searchContent.slice(start, end).replace(/\\s+/g, \" \").trim();\n\n  // Measure the hit AFTER the whitespace collapse, so the offsets describe the\n  // string actually being returned.\n  const hitAt = body.toLowerCase().indexOf(query.toLowerCase());\n  const prefix = start > 0 ? FTS_ELLIPSIS : \"\";\n  const suffix = end < searchContent.length ? FTS_ELLIPSIS : \"\";\n  const snippet = `${prefix}${body}${suffix}`;\n\n  const highlights: SearchHighlight[] =\n    hitAt === -1\n      ? []\n      : [{ start: hitAt + prefix.length, end: hitAt + prefix.length + query.length }];\n\n  return { field: CONTENT_FIELD, snippet, highlights };\n}\n","import { createReadStream } from \"fs\";\nimport { basename } from \"path\";\nimport { createInterface } from \"readline\";\nimport { getLogger } from \"./logger\";\nimport { applyTeamInfo, initialConvState, reduceConvLine } from \"./persistent/conversation-reducer\";\nimport {\n  deriveSessionNameFromFirstMessage,\n  finalizeMeta,\n  initialReducerState,\n  reduceLine,\n} from \"./persistent/metadata-reducer\";\nimport { cleanSystemTags } from \"./tags\";\nimport type {\n  ContentTier,\n  Conversation,\n  ConversationMessage,\n  ConversationMeta,\n  TeamInfo,\n  ToolResultBlock,\n  ToolUseBlock,\n  TurnDuration,\n} from \"./types\";\n\n// `onEntry` lets a caller fold a second accumulator (the search document) over\n// the same lines without re-reading the file.\nexport async function parseMeta(\n  filePath: string,\n  account: string,\n  tier: ContentTier,\n  onEntry?: (entry: Record<string, unknown>) => void,\n): Promise<ConversationMeta | null> {\n  const log = getLogger();\n  log.trace({ filePath, account, tier: tier.name }, \"parseMeta: start\");\n\n  // Stream the whole file through the same per-line fold the incremental\n  // indexer uses, so a full parse and an append-then-resume produce identical\n  // metadata by construction.\n  const state = initialReducerState();\n  const fileStream = createReadStream(filePath);\n  const rl = createInterface({ input: fileStream, crlfDelay: Infinity });\n\n  try {\n    for await (const line of rl) {\n      if (!line.trim()) continue;\n      let entry: Record<string, unknown>;\n      try {\n        entry = JSON.parse(line);\n      } catch {\n        state.badJsonLines++;\n        continue;\n      }\n      reduceLine(state, entry, tier);\n      onEntry?.(entry);\n    }\n  } catch (err) {\n    log.warn({ filePath, err }, \"parseMeta: read failed\");\n    return null;\n  }\n\n  if (state.badJsonLines > 0) {\n    log.warn(\n      { filePath, badJsonLines: state.badJsonLines },\n      \"parseMeta: skipped malformed JSON lines\",\n    );\n  }\n\n  const meta = finalizeMeta(state, filePath, account, tier);\n  if (!meta) log.trace({ filePath }, \"parseMeta: no messages\");\n  return meta;\n}\n\nexport async function parseConversation(\n  filePath: string,\n  account: string,\n): Promise<Conversation | null> {\n  const log = getLogger();\n  log.trace({ filePath, account }, \"parseConversation: start\");\n  const messages: ConversationMessage[] = [];\n  let badJsonLines = 0;\n  const textParts: string[] = [];\n  const turnDurations: TurnDuration[] = [];\n\n  // The message line→message reduction lives in reduceConvLine (shared with the\n  // bounded page reader). turn_duration collection is parseConversation-only\n  // (pages don't need it), so it stays inline here.\n  const state = initialConvState();\n\n  const fileStream = createReadStream(filePath);\n  const rl = createInterface({ input: fileStream, crlfDelay: Infinity });\n\n  try {\n    for await (const line of rl) {\n      if (!line.trim()) continue;\n\n      let entry: Record<string, unknown>;\n      try {\n        entry = JSON.parse(line);\n      } catch {\n        badJsonLines++;\n        continue;\n      }\n\n      if (\n        entry.type === \"system\" &&\n        entry.subtype === \"turn_duration\" &&\n        typeof entry.durationMs === \"number\"\n      ) {\n        turnDurations.push({\n          durationMs: entry.durationMs as number,\n          messageCount: (entry.messageCount as number) || 0,\n          uuid: entry.uuid as string | undefined,\n        });\n        continue;\n      }\n\n      const message = reduceConvLine(state, entry);\n      if (message) {\n        messages.push(message);\n        if (message.text) textParts.push(message.text);\n      }\n    }\n  } catch (err) {\n    log.warn({ filePath, err }, \"parseConversation: read failed\");\n    return null;\n  }\n\n  if (badJsonLines > 0) {\n    log.warn({ filePath, badJsonLines }, \"parseConversation: skipped malformed JSON lines\");\n  }\n\n  if (messages.length === 0) {\n    log.trace({ filePath }, \"parseConversation: no messages\");\n    return null;\n  }\n\n  log.debug({ filePath, messageCount: messages.length }, \"parseConversation: complete\");\n  applyTeamInfo(messages, state);\n\n  return {\n    id: filePath,\n    filePath,\n    projectPath: state.cwd,\n    projectName: getShortProjectName(state.cwd),\n    sessionId: state.sessionId || basename(filePath, \".jsonl\"),\n    sessionName:\n      state.sessionName ||\n      deriveSessionNameFromFirstMessage(messages.find((m) => m.role === \"user\" && m.text) ?? null),\n    messages,\n    fullText: textParts.join(\" \"),\n    timestamp: state.latestTimestamp || new Date().toISOString(),\n    messageCount: messages.length,\n    account,\n    turnDurations: turnDurations.length > 0 ? turnDurations : undefined,\n    lastPrompt: state.lastPrompt || undefined,\n  };\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────\n\nexport function extractTextContent(content: unknown): string {\n  if (!content) return \"\";\n  if (typeof content === \"string\") return cleanSystemTags(content);\n  if (Array.isArray(content)) {\n    return content\n      .map((item) => {\n        if (typeof item === \"string\") return item;\n        if (item?.type === \"text\" && item?.text) return item.text;\n        if (item?.type === \"tool_result\" && typeof item?.content === \"string\") return item.content;\n        return \"\";\n      })\n      .filter(Boolean)\n      .map(cleanSystemTags)\n      .join(\" \");\n  }\n  return \"\";\n}\n\nexport function extractToolUseNames(content: unknown): string[] {\n  if (!Array.isArray(content)) return [];\n  return content\n    .filter((item) => item?.type === \"tool_use\" && item?.name)\n    .map((item) => item.name as string);\n}\n\nexport function extractToolUseBlocks(content: unknown): ToolUseBlock[] {\n  if (!Array.isArray(content)) return [];\n  return content\n    .filter((item) => item?.type === \"tool_use\" && item?.name && item?.id)\n    .map((item) => ({\n      id: item.id as string,\n      name: item.name as string,\n      input: (item.input as Record<string, unknown>) || {},\n    }));\n}\n\nconst TOOL_NAME_TO_TYPE: Record<string, ToolResultBlock[\"type\"]> = {\n  Edit: \"edit\",\n  Write: \"write\",\n  Read: \"read\",\n  Bash: \"bash\",\n  Grep: \"grep\",\n  Glob: \"glob\",\n  Agent: \"taskAgent\",\n  TaskCreate: \"taskCreate\",\n  TaskUpdate: \"taskUpdate\",\n};\n\nexport function extractToolResultBlocks(\n  content: unknown,\n  pendingToolUses: Map<string, ToolUseBlock>,\n): ToolResultBlock[] {\n  if (!Array.isArray(content)) return [];\n  return content\n    .filter((item) => item?.type === \"tool_result\" && item?.tool_use_id)\n    .map((item) => {\n      const toolName = pendingToolUses.get(item.tool_use_id as string)?.name ?? \"\";\n      return {\n        toolUseId: item.tool_use_id as string,\n        type: TOOL_NAME_TO_TYPE[toolName] ?? \"generic\",\n        content:\n          typeof item.content === \"string\"\n            ? { text: item.content as string }\n            : ((item.content as Record<string, unknown>) ?? {}),\n        isError: typeof item.is_error === \"boolean\" ? item.is_error : undefined,\n      };\n    });\n}\n\nexport function collectToolNames(content: unknown, toolSet: Set<string>): void {\n  if (!Array.isArray(content)) return;\n  for (const item of content) {\n    if (item?.type === \"tool_use\" && item?.name) {\n      toolSet.add(item.name as string);\n    }\n  }\n}\n\nexport function isOnlyToolResultContent(content: unknown): boolean {\n  if (!Array.isArray(content)) return false;\n  return content.length > 0 && content.every((item) => item?.type === \"tool_result\");\n}\n\nexport function isTeammateContent(content: unknown): boolean {\n  const raw =\n    typeof content === \"string\"\n      ? content\n      : Array.isArray(content)\n        ? content\n            .map((item) =>\n              typeof item === \"string\" ? item : item?.type === \"text\" ? (item.text ?? \"\") : \"\",\n            )\n            .join(\"\")\n        : \"\";\n  return raw.includes(\"<teammate-message\");\n}\n\nexport function extractThinking(content: unknown): { content: string; signature: string } {\n  if (!Array.isArray(content)) return { content: \"\", signature: \"\" };\n  const blocks = content.filter((item) => item?.type === \"thinking\");\n  return {\n    content: blocks\n      .map((b) => b.thinking as string)\n      .filter(Boolean)\n      .join(\"\\n\\n\"),\n    signature: blocks\n      .map((b) => b.signature as string)\n      .filter(Boolean)\n      .join(\"\"),\n  };\n}\n\nexport function hasImageBlocks(content: unknown): boolean {\n  if (!Array.isArray(content)) return false;\n  return content.some(\n    (item) =>\n      item?.type === \"image\" &&\n      (item?.source?.type === \"base64\" || item?.file?.base64 !== undefined),\n  );\n}\n\nexport function parseTeammateMessageTag(content: string): TeamInfo | null {\n  const match = content.match(/<teammate-message\\s+([^>]*)>/);\n  if (!match) return null;\n  const attrs = match[1];\n  const id = attrs.match(/teammate_id=\"([^\"]*)\"/)?.[1];\n  if (!id) return null;\n  const summary = attrs.match(/summary=\"([^\"]*)\"/)?.[1];\n  const color = attrs.match(/color=\"([^\"]*)\"/)?.[1];\n  return { teammateId: id, summary, color };\n}\n\nexport function getShortProjectName(fullPath: string): string {\n  const parts = fullPath.split(\"/\").filter(Boolean);\n  return parts.slice(-3).join(\"/\");\n}\n","import { basename, dirname, join } from \"path\";\nimport {\n  collectToolNames,\n  extractTextContent,\n  extractThinking,\n  extractToolUseBlocks,\n  isOnlyToolResultContent,\n  isTeammateContent,\n} from \"../parser\";\nimport { CLAUDE_CODE_PROVIDER } from \"../providers/provider\";\nimport type { ContentTier, ConversationMeta, MessageSender, MessageSnapshot } from \"../types\";\n\n// Serializable fold state for incremental metadata indexing. parseMeta()'s\n// per-line loop is expressed as reduceLine(state, entry); finalizeMeta(state)\n// produces the ConversationMeta. Because the state is plain JSON, it can be\n// persisted in conversation_files.reducer_state and resumed when a file grows,\n// so an append only needs to fold the newly-read lines.\nexport interface ReducerState {\n  sessionId: string;\n  sessionName: string;\n  latestTimestamp: string;\n  cwd: string;\n  teamName: string;\n  model: string | null;\n  messageCount: number;\n  // Count of messages parseConversation() would produce — broader than\n  // messageCount (also counts tool_use-only and thinking-only lines). Used as\n  // the page total for bounded reads, since metadata messageCount differs.\n  pageMessageCount: number;\n  lastMessageSender: MessageSender;\n  // Provider-created child (\"sidechain\") identity, lifted from the explicit\n  // per-line JSONL fields. A sidechain line carries its PARENT's id in\n  // `sessionId`, so `agentId` is the only thing that distinguishes siblings.\n  agentId: string;\n  isSidechain: boolean;\n  isTeammate: boolean;\n  firstUserSeen: boolean;\n  firstMessage: MessageSnapshot | null;\n  lastMessage: MessageSnapshot | null;\n  lastPrompt: string;\n  toolNames: string[];\n  previewParts: string[];\n  snippetParts: string[];\n  previewLength: number;\n  snippetLength: number;\n  badJsonLines: number;\n}\n\nexport function initialReducerState(): ReducerState {\n  return {\n    sessionId: \"\",\n    sessionName: \"\",\n    latestTimestamp: \"\",\n    cwd: \"\",\n    teamName: \"\",\n    model: null,\n    messageCount: 0,\n    lastMessageSender: \"user\",\n    agentId: \"\",\n    isSidechain: false,\n    isTeammate: false,\n    firstUserSeen: false,\n    firstMessage: null,\n    lastMessage: null,\n    lastPrompt: \"\",\n    pageMessageCount: 0,\n    toolNames: [],\n    previewParts: [],\n    snippetParts: [],\n    previewLength: 0,\n    snippetLength: 0,\n    badJsonLines: 0,\n  };\n}\n\n// Fold one already-parsed JSONL entry into the state, mutating it in place.\n// Mirrors parseMeta()'s loop body exactly so a full reduce equals a streamed\n// parseMeta. `entry` is the JSON.parse() of one non-empty line.\nexport function reduceLine(\n  state: ReducerState,\n  entry: Record<string, unknown>,\n  tier: ContentTier,\n): void {\n  if (entry.cwd && !state.cwd) state.cwd = entry.cwd as string;\n  if (entry.sessionId && !state.sessionId) state.sessionId = entry.sessionId as string;\n  if (entry.slug && !state.sessionName) state.sessionName = entry.slug as string;\n  if (entry.teamName && !state.teamName) state.teamName = entry.teamName as string;\n  if (entry.agentId && !state.agentId) state.agentId = entry.agentId as string;\n  if (entry.isSidechain === true) state.isSidechain = true;\n  if (entry.timestamp) {\n    const ts = entry.timestamp as string;\n    if (!state.latestTimestamp || ts > state.latestTimestamp) state.latestTimestamp = ts;\n  }\n\n  const type = entry.type as string;\n\n  if (type === \"last-prompt\") {\n    if (entry.lastPrompt && !state.lastPrompt) state.lastPrompt = entry.lastPrompt as string;\n    return;\n  }\n\n  // file-history-snapshot and other non-message entries are excluded.\n  if (type !== \"user\" && type !== \"assistant\") return;\n  if (entry.isMeta) return;\n\n  const msg = entry.message as Record<string, unknown> | undefined;\n\n  if (state.model === null && msg?.model) state.model = msg.model as string;\n\n  if (type === \"user\" && !state.firstUserSeen) {\n    state.firstUserSeen = true;\n    if (isTeammateContent(msg?.content)) state.isTeammate = true;\n  }\n\n  const content = extractTextContent(msg?.content);\n  const hasToolUseResult = type === \"user\" && entry.toolUseResult != null;\n  const isOnlyToolResult = hasToolUseResult && isOnlyToolResultContent(msg?.content);\n\n  const toolSet = new Set(state.toolNames);\n  collectToolNames(msg?.content, toolSet);\n  state.toolNames = Array.from(toolSet);\n\n  // Count messages the same way parseConversation does, so bounded paging has a\n  // correct total. (Broader than messageCount: includes tool_use-only and\n  // thinking-only lines.)\n  const toolUseBlocks = extractToolUseBlocks(msg?.content);\n  const thinking = type === \"assistant\" ? extractThinking(msg?.content) : null;\n  const hasThinking = !!(thinking?.content || thinking?.signature);\n  if (content || isOnlyToolResult || toolUseBlocks.length > 0 || hasThinking) {\n    state.pageMessageCount++;\n  }\n\n  if (content || isOnlyToolResult) {\n    state.messageCount++;\n    state.lastMessageSender = type as MessageSender;\n\n    if (content) {\n      const ts = (entry.timestamp as string) || \"\";\n      if (!state.firstMessage) state.firstMessage = { text: content.slice(0, 200), timestamp: ts };\n      state.lastMessage = { text: content.slice(0, 200), timestamp: ts };\n\n      if (state.previewLength < tier.previewMax) {\n        state.previewParts.push(content);\n        state.previewLength += content.length;\n      }\n      if (state.snippetLength < tier.snippetMax) {\n        const remaining = tier.snippetMax - state.snippetLength;\n        const chunk = content.length > remaining ? content.slice(0, remaining) : content;\n        state.snippetParts.push(chunk);\n        state.snippetLength += chunk.length;\n      }\n    }\n  }\n}\n\n// Build the ConversationMeta from accumulated state, or null when no messages\n// were seen — matching parseMeta()'s final shape exactly.\nexport function finalizeMeta(\n  state: ReducerState,\n  filePath: string,\n  account: string,\n  tier: ContentTier,\n): ConversationMeta | null {\n  if (state.messageCount === 0) return null;\n\n  // The explicit JSONL fields are authoritative and platform-independent. The\n  // path shape is only a fallback for a transcript that carries neither.\n  const isSidechain = state.isSidechain && !!state.agentId;\n  const isSubagentPath = SUBAGENT_PATH_RE.test(filePath);\n  const isSubagent = isSidechain || isSubagentPath;\n\n  let parentSessionId: string | null = null;\n  if (isSubagentPath) {\n    const uuidDir = dirname(dirname(filePath));\n    parentSessionId = join(dirname(uuidDir), `${basename(uuidDir)}.jsonl`);\n  }\n\n  const projectPath = state.cwd;\n  return {\n    id: filePath,\n    filePath,\n    provider: CLAUDE_CODE_PROVIDER,\n    sessionId: state.sessionId || basename(filePath, \".jsonl\"),\n    sessionName: state.sessionName || deriveSessionNameFromFirstMessage(state.firstMessage),\n    projectPath,\n    projectName: getShortProjectName(projectPath),\n    account,\n    timestamp: state.latestTimestamp || new Date().toISOString(),\n    messageCount: state.messageCount,\n    lastMessageSender: state.lastMessageSender,\n    preview: state.previewParts.join(\" \").slice(0, tier.previewMax),\n    contentSnippet: state.snippetParts.join(\" \"),\n    gitBranch: null,\n    model: state.model,\n    isSubagent,\n    parentSessionId,\n    subagentId: isSidechain ? state.agentId : undefined,\n    // A sidechain line's `sessionId` IS the parent's id — that is exactly the\n    // conflation `subagentId` exists to undo, so it is the parent UUID here.\n    parentSessionUuid: isSidechain && state.sessionId ? state.sessionId : undefined,\n    isTeammate: state.isTeammate,\n    teamName: state.teamName || null,\n    toolNames: state.toolNames,\n    firstMessage: state.firstMessage,\n    lastMessage: state.lastMessage,\n    lastPrompt: state.lastPrompt || undefined,\n  };\n}\n\n// Both separators: the scanner is handed NATIVE paths, so a hardcoded \"/\" makes\n// this test silently false on Windows — a clean false negative that disables\n// path-based subagent detection there without any error.\nconst SUBAGENT_PATH_RE = /[\\\\/]subagents[\\\\/]/;\n\n// Fallback session name for interactive Claude Code conversations, which carry\n// no `slug` (only SDK/agent sessions do). The first user message is the only\n// human-readable name source in a normal JSONL, so use its first line, trimmed\n// to a title-sized length. Empty when there is no message text.\nexport function deriveSessionNameFromFirstMessage(firstMessage: { text: string } | null): string {\n  const firstLine = firstMessage?.text.split(\"\\n\", 1)[0]?.trim() ?? \"\";\n  return firstLine.slice(0, 80);\n}\n\nfunction getShortProjectName(fullPath: string): string {\n  const parts = fullPath.split(\"/\").filter(Boolean);\n  return parts.slice(-3).join(\"/\");\n}\n","import type { ContentTier, ConversationMeta } from \"../types\";\n\n// A scanner provider knows how to discover and parse one local conversation-log\n// format into the shared ConversationMeta model. The reducer triplet\n// (createEmptyAccumulator / reduceEntry / finalize) is the same fold used by a\n// full streamed parse and — by design — a future offset-resumed incremental\n// parse, since the accumulator is plain serializable state. See\n// metadata-reducer.ts for the Threadbase implementation this mirrors.\nexport interface ScannerProvider<Acc = unknown> {\n  name: ScannerProviderName;\n\n  // Discover candidate files for this provider under the given roots. Roots are\n  // already absolute. Returns one entry per file worth parsing.\n  discover(roots: string[]): Promise<DiscoveredConversationFile[]>;\n\n  // Cheap structural sniff: does this file look like this provider's format?\n  // `sample` is the first few lines (newline-joined). Used so a single roots\n  // list can be shared across providers without misclassifying files.\n  canParse(filePath: string, sample: string): boolean;\n\n  createEmptyAccumulator(): Acc;\n\n  // Fold one already-JSON.parsed line into the accumulator, in place. Must never\n  // throw on an unknown entry shape — ignore what it doesn't understand.\n  reduceEntry(acc: Acc, entry: Record<string, unknown>, tier: ContentTier): void;\n\n  // Build the ConversationMeta from the accumulator, or null if no messages.\n  finalize(acc: Acc, filePath: string, account: string, tier: ContentTier): ConversationMeta | null;\n}\n\nexport type ScannerProviderName = \"claude-code\" | \"codex-cli\" | \"cursor\";\n\nexport const CLAUDE_CODE_PROVIDER = \"claude-code\" as const;\nexport const CODEX_CLI_PROVIDER = \"codex-cli\" as const;\nexport const CURSOR_PROVIDER = \"cursor\" as const;\n/** Live PTY on main shipped this wire name; accept it and emit `cursor`. */\nexport const LEGACY_CURSOR_PROVIDER = \"cursor-cli\" as const;\n\nexport function canonicalizeProviderName(value: string): ScannerProviderName | undefined {\n  if (value === LEGACY_CURSOR_PROVIDER) return CURSOR_PROVIDER;\n  if (value === CLAUDE_CODE_PROVIDER || value === CODEX_CLI_PROVIDER || value === CURSOR_PROVIDER) {\n    return value;\n  }\n  return undefined;\n}\n\nexport function canonicalizeProviderList(\n  providers: readonly string[] | undefined,\n): ScannerProviderName[] {\n  const src = providers ?? [CLAUDE_CODE_PROVIDER];\n  const out: ScannerProviderName[] = [];\n  for (const p of src) {\n    const n = canonicalizeProviderName(p);\n    if (n && !out.includes(n)) out.push(n);\n  }\n  return out;\n}\n\nexport function providerMatches(stored: string | undefined, wanted: string): boolean {\n  const a = canonicalizeProviderName(stored ?? CLAUDE_CODE_PROVIDER) ?? stored;\n  const b = canonicalizeProviderName(wanted) ?? wanted;\n  return a === b;\n}\n\nexport interface DiscoveredConversationFile {\n  filePath: string;\n  account: string;\n}\n","const SYSTEM_TAGS = [\n  \"system-reminder\",\n  \"command-name\",\n  \"command-message\",\n  \"command-args\",\n  \"ide_selection\",\n  \"ide_opened_file\",\n  \"local-command-stdout\",\n  \"local-command-caveat\",\n  \"retrieval_status\",\n  \"task_id\",\n  \"task_type\",\n  \"task-id\",\n  \"task-notification\",\n  \"fast_mode_info\",\n  \"persisted-output\",\n  \"tool_use_error\",\n  \"user-prompt-submit-hook\",\n  \"thinking\",\n  \"ask_user\",\n  \"teammate-message\",\n];\n\nconst SYSTEM_TAG_RE = new RegExp(`<(${SYSTEM_TAGS.join(\"|\")})[^>]*>[\\\\s\\\\S]*?<\\\\/\\\\1>`, \"g\");\n\nexport function cleanSystemTags(text: string): string {\n  return text\n    .replace(SYSTEM_TAG_RE, \"\")\n    .replace(/[^\\S\\n]+/g, \" \")\n    .replace(/\\n{3,}/g, \"\\n\\n\")\n    .trim();\n}\n","import {\n  extractTextContent,\n  extractThinking,\n  extractToolResultBlocks,\n  extractToolUseBlocks,\n  extractToolUseNames,\n  hasImageBlocks,\n  isOnlyToolResultContent,\n  parseTeammateMessageTag,\n} from \"../parser\";\nimport type {\n  AttachmentSidecar,\n  ConversationMessage,\n  MessageMetadata,\n  MessageSender,\n  TeamInfo,\n  ToolUseBlock,\n} from \"../types\";\n\n// Resumable, serializable state for the conversation line→message reduction.\n// Mirrors parseConversation()'s loop so a full reduce equals a streamed parse,\n// and so a bounded page read can resume an *equivalent* parse from a checkpoint\n// by restoring the cross-line state (pending tool_use blocks + team info).\nexport interface ConvReducerState {\n  cwd: string;\n  sessionId: string;\n  sessionName: string;\n  latestTimestamp: string;\n  lastPrompt: string;\n  // id -> tool_use block, so a later tool_result line resolves its tool type.\n  pendingToolUses: Record<string, ToolUseBlock>;\n  // teamName -> info, collected as lines are read and applied to messages.\n  teamInfo: Record<string, TeamInfo>;\n}\n\nexport function initialConvState(): ConvReducerState {\n  return {\n    cwd: \"\",\n    sessionId: \"\",\n    sessionName: \"\",\n    latestTimestamp: \"\",\n    lastPrompt: \"\",\n    pendingToolUses: {},\n    teamInfo: {},\n  };\n}\n\n// Fold one JSONL entry. Returns the produced ConversationMessage (its message\n// index is the count of messages emitted so far), or null if the line produced\n// no message. Mutates `state` (header fields + cross-line maps).\nexport function reduceConvLine(\n  state: ConvReducerState,\n  entry: Record<string, unknown>,\n): ConversationMessage | null {\n  if (entry.cwd && !state.cwd) state.cwd = entry.cwd as string;\n  if (entry.sessionId && !state.sessionId) state.sessionId = entry.sessionId as string;\n  if (entry.slug && !state.sessionName) state.sessionName = entry.slug as string;\n  if (entry.timestamp) {\n    const ts = entry.timestamp as string;\n    if (!state.latestTimestamp || ts > state.latestTimestamp) state.latestTimestamp = ts;\n  }\n\n  const type = entry.type as string;\n\n  if (type === \"last-prompt\") {\n    if (entry.lastPrompt && !state.lastPrompt) state.lastPrompt = entry.lastPrompt as string;\n    return null;\n  }\n  // system (incl. turn_duration), file-history-snapshot, etc. produce no message.\n  if (type !== \"user\" && type !== \"assistant\") return null;\n  if (entry.isMeta) return null;\n\n  const msg = entry.message as Record<string, unknown> | undefined;\n\n  const toolUseBlocks = extractToolUseBlocks(msg?.content);\n  for (const block of toolUseBlocks) state.pendingToolUses[block.id] = block;\n\n  const hasToolUseResult = type === \"user\" && entry.toolUseResult != null;\n  const isToolResultOnly = hasToolUseResult && isOnlyToolResultContent(msg?.content);\n  const content = extractTextContent(msg?.content);\n  const thinking = type === \"assistant\" ? extractThinking(msg?.content) : null;\n  const hasThinking = !!(thinking?.content || thinking?.signature);\n\n  if (!(content || isToolResultOnly || toolUseBlocks.length > 0 || hasThinking)) return null;\n\n  const metadata: MessageMetadata = {};\n  if (msg?.model) metadata.model = msg.model as string;\n  if (msg?.stop_reason !== undefined) metadata.stopReason = msg.stop_reason as string | null;\n  if (entry.gitBranch) metadata.gitBranch = entry.gitBranch as string;\n  if (entry.version) metadata.version = entry.version as string;\n\n  const usage = msg?.usage as Record<string, number> | undefined;\n  if (usage) {\n    if (usage.input_tokens) metadata.inputTokens = usage.input_tokens;\n    if (usage.output_tokens) metadata.outputTokens = usage.output_tokens;\n    if (usage.cache_read_input_tokens) metadata.cacheReadTokens = usage.cache_read_input_tokens;\n    if (usage.cache_creation_input_tokens)\n      metadata.cacheCreationTokens = usage.cache_creation_input_tokens;\n  }\n\n  const toolUseNames = extractToolUseNames(msg?.content);\n  if (toolUseNames.length > 0) metadata.toolUses = toolUseNames;\n  if (toolUseBlocks.length > 0) metadata.toolUseBlocks = toolUseBlocks;\n\n  if (isToolResultOnly) {\n    const pending = new Map(Object.entries(state.pendingToolUses));\n    const toolResultBlocks = extractToolResultBlocks(msg?.content, pending);\n    if (toolResultBlocks.length > 0) {\n      metadata.toolResults = toolResultBlocks;\n      // A result consumes its tool_use: prune it so the cross-line map stays\n      // bounded by IN-FLIGHT tool calls instead of growing with the file.\n      // Unpruned, every checkpoint snapshot/serialization of this state costs\n      // O(file) — the structuredClone stall on large live conversations.\n      for (const block of toolResultBlocks) delete state.pendingToolUses[block.toolUseId];\n    }\n  }\n\n  if (entry.teamName) {\n    metadata.teamName = entry.teamName as string;\n    if (!state.teamInfo[metadata.teamName] && content) {\n      const info = parseTeammateMessageTag(content);\n      if (info) state.teamInfo[metadata.teamName] = info;\n    }\n  }\n\n  const thinkingContent = thinking?.content || undefined;\n  const thinkingSignature = thinking?.signature || undefined;\n  const hasMetadata = Object.keys(metadata).length > 0;\n\n  return {\n    role: type as MessageSender,\n    text: content || \"\",\n    timestamp: (entry.timestamp as string) || \"\",\n    uuid: (entry.uuid as string) || undefined,\n    metadata: hasMetadata ? metadata : undefined,\n    isToolResult: isToolResultOnly || undefined,\n    isThinking: thinkingContent || thinkingSignature ? true : undefined,\n    thinkingContent,\n    thinkingSignature,\n    parentUuid: entry.parentUuid !== undefined ? (entry.parentUuid as string | null) : undefined,\n    requestId: type === \"assistant\" ? (entry.requestId as string | undefined) : undefined,\n    promptId: type === \"user\" ? (entry.promptId as string | undefined) : undefined,\n    isSidechain: typeof entry.isSidechain === \"boolean\" ? entry.isSidechain : undefined,\n    permissionMode: type === \"user\" ? (entry.permissionMode as string | undefined) : undefined,\n    hasImages: hasImageBlocks(msg?.content) || undefined,\n    attachment:\n      entry.attachment !== undefined ? (entry.attachment as AttachmentSidecar) : undefined,\n  };\n}\n\n// Parse/classify one raw JSONL line — the exact line→message mapping the\n// scanner uses internally, exported for downstream indexers (e.g. a watcher\n// tailing appended lines) so their semantics cannot drift from the scanner's.\n// Returns the produced ConversationMessage, or null when the line yields none\n// (system/summary/sidecar records, blank or malformed lines). Whether a line\n// produces a message — and its core fields (role, uuid, timestamp) — is\n// state-independent, so calls without `state` classify correctly on their own;\n// pass one shared `state` across successive lines of a file to also resolve\n// cross-line references (tool_result → tool_use types, team info) identically\n// to a full parse.\nexport function parseJsonlLine(\n  line: string,\n  state: ConvReducerState = initialConvState(),\n): ConversationMessage | null {\n  const text = line.trimEnd();\n  if (text.trim().length === 0) return null;\n  let entry: Record<string, unknown>;\n  try {\n    entry = JSON.parse(text);\n  } catch {\n    return null;\n  }\n  return reduceConvLine(state, entry);\n}\n\n// Back-apply collected team info to a set of messages (the post-pass\n// parseConversation does). Safe to call on a window: teamInfo for a given name\n// is stable once first seen, so a window restored from a checkpoint that\n// carries earlier teamInfo gets the same result.\nexport function applyTeamInfo(messages: ConversationMessage[], state: ConvReducerState): void {\n  if (Object.keys(state.teamInfo).length === 0) return;\n  for (const m of messages) {\n    const name = m.metadata?.teamName;\n    if (name && state.teamInfo[name] && m.metadata) m.metadata.teamInfo = state.teamInfo[name];\n  }\n}\n","import { readFileSync, writeFileSync } from \"fs\";\nimport { getLogger } from \"../logger\";\nimport type { ConversationMeta } from \"../types\";\n\nexport const SIDECAR_VERSION = 1;\n\n// Portable, human-readable index summary written next to a JSONL file as\n// `<file>.idx.json`. Not the canonical index (SQLite is) — useful for\n// debugging, portability, and rebuilding the DB if it's lost. Off by default.\nexport interface Sidecar {\n  version: number;\n  sourcePath: string;\n  sizeBytes: number;\n  mtimeMs: number;\n  lastIndexedOffset: number;\n  lastIndexedLine: number;\n  messageCount: number;\n  projectPath: string;\n  projectName: string;\n  branch: string | null;\n  firstSentAt: string | null;\n  firstSentText: string | null;\n  lastSentAt: string | null;\n  lastSentText: string | null;\n  updatedAt: string;\n}\n\nexport function sidecarPath(jsonlPath: string): string {\n  return `${jsonlPath}.idx.json`;\n}\n\nexport function buildSidecar(\n  meta: ConversationMeta,\n  cursor: { sizeBytes: number; mtimeMs: number; offset: number; line: number },\n  updatedAt: string,\n): Sidecar {\n  return {\n    version: SIDECAR_VERSION,\n    sourcePath: meta.filePath,\n    sizeBytes: cursor.sizeBytes,\n    mtimeMs: cursor.mtimeMs,\n    lastIndexedOffset: cursor.offset,\n    lastIndexedLine: cursor.line,\n    messageCount: meta.messageCount,\n    projectPath: meta.projectPath,\n    projectName: meta.projectName,\n    branch: meta.gitBranch,\n    firstSentAt: meta.firstMessage?.timestamp ?? null,\n    firstSentText: meta.firstMessage?.text ?? null,\n    lastSentAt: meta.lastMessage?.timestamp ?? null,\n    lastSentText: meta.lastMessage?.text ?? null,\n    updatedAt,\n  };\n}\n\n// Write the sidecar; never throw into the indexing path — a sidecar is a\n// best-effort artifact, so a write failure (read-only dir, etc.) is logged and\n// swallowed.\nexport function writeSidecar(jsonlPath: string, sidecar: Sidecar): void {\n  try {\n    writeFileSync(sidecarPath(jsonlPath), JSON.stringify(sidecar, null, 2));\n  } catch (err) {\n    getLogger().warn({ jsonlPath, err }, \"sidecar: write failed\");\n  }\n}\n\nexport function readSidecar(jsonlPath: string): Sidecar | null {\n  try {\n    return JSON.parse(readFileSync(sidecarPath(jsonlPath), \"utf-8\")) as Sidecar;\n  } catch {\n    return null;\n  }\n}\n","import { mkdir, readFile, writeFile } from \"fs/promises\";\nimport { homedir } from \"os\";\nimport { join } from \"path\";\nimport { getLogger } from \"./logger\";\nimport type { Profile } from \"./types\";\n\nconst PROFILES_FILE = \"profiles.json\";\n\nexport function resolveConfigDir(configDir: string): string {\n  return configDir.replace(/^~/, homedir());\n}\n\nexport function getProjectsDir(profile: Profile): string {\n  return join(resolveConfigDir(profile.configDir), \"projects\");\n}\n\nexport async function detectDefaultProfile(): Promise<Profile> {\n  return {\n    id: \"default\",\n    label: \"Default\",\n    configDir: join(homedir(), \".claude\"),\n    enabled: true,\n    emoji: \"🤖\",\n  };\n}\n\nexport async function loadProfiles(configPath: string): Promise<Profile[]> {\n  const log = getLogger();\n  try {\n    const resolved = resolveConfigDir(configPath);\n    const data = await readFile(join(resolved, PROFILES_FILE), \"utf-8\");\n    const profiles = JSON.parse(data) as Profile[];\n    log.debug({ configPath, count: profiles.length }, \"profiles: loaded\");\n    return profiles;\n  } catch (err) {\n    log.debug({ configPath, err }, \"profiles: load failed, using default\");\n    const defaultProfile = await detectDefaultProfile();\n    return [defaultProfile];\n  }\n}\n\nexport async function saveProfiles(profiles: Profile[], configPath: string): Promise<void> {\n  const resolved = resolveConfigDir(configPath);\n  await mkdir(resolved, { recursive: true });\n  await writeFile(join(resolved, PROFILES_FILE), JSON.stringify(profiles, null, 2));\n  getLogger().debug({ configPath, count: profiles.length }, \"profiles: saved\");\n}\n","import fg from \"fast-glob\";\nimport { createReadStream } from \"fs\";\nimport { stat } from \"fs/promises\";\nimport { basename } from \"path\";\nimport { createInterface } from \"readline\";\nimport { canonicalPath } from \"../canonical-path\";\nimport { getLogger } from \"../logger\";\nimport { deriveSessionNameFromFirstMessage } from \"../persistent/metadata-reducer\";\nimport { cleanSystemTags } from \"../tags\";\nimport type {\n  ContentTier,\n  Conversation,\n  ConversationMessage,\n  ConversationMeta,\n  MessageSender,\n  MessageSnapshot,\n  ToolUseBlock,\n} from \"../types\";\nimport {\n  CODEX_CLI_PROVIDER,\n  type DiscoveredConversationFile,\n  type ScannerProvider,\n} from \"./provider\";\n\n// Serializable fold state for a Codex CLI rollout session. Plain JSON so a\n// future persistent engine can resume it from a byte offset (same contract as\n// the Threadbase ReducerState).\nexport interface CodexAccumulator {\n  sessionId: string;\n  cwd: string;\n  gitBranch: string | null;\n  model: string | null;\n  latestTimestamp: string;\n  messageCount: number;\n  lastMessageSender: MessageSender;\n  isSubagent: boolean;\n  parentSessionUuid: string | null;\n  firstUser: MessageSnapshot | null;\n  lastUser: MessageSnapshot | null;\n  lastAssistant: MessageSnapshot | null;\n  toolNames: string[];\n  previewParts: string[];\n  previewLength: number;\n  snippetParts: string[];\n  snippetLength: number;\n}\n\n// Codex CLI rollout sessions live as rollout-*.jsonl under a date-partitioned\n// tree. The Codex provider is opt-in: the scanner only discovers under roots the\n// caller passes explicitly (no default home scan).\nexport class CodexCliProvider implements ScannerProvider<CodexAccumulator> {\n  readonly name = CODEX_CLI_PROVIDER;\n\n  async discover(roots: string[]): Promise<DiscoveredConversationFile[]> {\n    const log = getLogger();\n    const results: DiscoveredConversationFile[] = [];\n    for (const root of roots) {\n      let paths: string[];\n      try {\n        paths = await fg([\"**/rollout-*.jsonl\", \"**/*.jsonl\"], {\n          cwd: root,\n          absolute: true,\n          dot: false,\n          unique: true,\n        });\n      } catch (err) {\n        log.warn({ root, err }, \"codex discovery: glob failed\");\n        continue;\n      }\n      for (const filePath of paths) {\n        try {\n          const s = await stat(filePath);\n          // Canonical form — fast-glob emits forward slashes even on Windows,\n          // but every by-path lookup keys off the canonical spelling.\n          if (s.size > 0) results.push({ filePath: canonicalPath(filePath), account: \"codex\" });\n        } catch (err) {\n          log.warn({ filePath, err }, \"codex discovery: stat failed\");\n        }\n      }\n    }\n    return results;\n  }\n\n  // Codex rollout lines carry distinctive top-level types.\n  canParse(_filePath: string, sample: string): boolean {\n    for (const line of sample.split(\"\\n\")) {\n      if (!line.trim()) continue;\n      try {\n        const e = JSON.parse(line) as Record<string, unknown>;\n        if (e.type === \"session_meta\" || e.type === \"response_item\" || e.type === \"event_msg\") {\n          return true;\n        }\n        if (e.type === \"user\" || e.type === \"assistant\") return false;\n      } catch {}\n    }\n    return false;\n  }\n\n  createEmptyAccumulator(): CodexAccumulator {\n    return {\n      sessionId: \"\",\n      cwd: \"\",\n      gitBranch: null,\n      model: null,\n      latestTimestamp: \"\",\n      messageCount: 0,\n      lastMessageSender: \"user\",\n      isSubagent: false,\n      parentSessionUuid: null,\n      firstUser: null,\n      lastUser: null,\n      lastAssistant: null,\n      toolNames: [],\n      previewParts: [],\n      previewLength: 0,\n      snippetParts: [],\n      snippetLength: 0,\n    };\n  }\n\n  reduceEntry(acc: CodexAccumulator, entry: Record<string, unknown>, tier: ContentTier): void {\n    reduceCodexEntry(acc, entry, tier);\n  }\n\n  finalize(\n    acc: CodexAccumulator,\n    filePath: string,\n    account: string,\n    tier: ContentTier,\n  ): ConversationMeta | null {\n    return finalizeCodexMeta(acc, filePath, account, tier);\n  }\n}\n\n// ─── Reducer (exported for tests / future incremental engine) ───────────\n\nconst asString = (v: unknown): string => (typeof v === \"string\" ? v : \"\");\n\n// Pull display text out of a Codex content array of {type,text} blocks.\nfunction extractCodexText(content: unknown): string {\n  if (typeof content === \"string\") return cleanSystemTags(content);\n  if (!Array.isArray(content)) return \"\";\n  return content\n    .map((item) => {\n      if (typeof item === \"string\") return item;\n      const t = item?.type;\n      if ((t === \"input_text\" || t === \"output_text\" || t === \"text\") && item?.text) {\n        return item.text as string;\n      }\n      return \"\";\n    })\n    .filter(Boolean)\n    .map(cleanSystemTags)\n    .join(\" \");\n}\n\n// Map one raw Codex rollout JSONL line to the message it renders as, or null\n// when it renders as nothing (session_meta, event_msg, encrypted reasoning,\n// developer/system roles, an empty-after-cleanSystemTags body, malformed JSON).\n// Stateless — a Codex line carries everything the decision needs — and tolerant\n// by construction: it never throws. parseCodexConversation() below delegates to\n// it so the \"which lines render as messages\" rule has exactly one definition.\nexport function parseCodexJsonlLine(line: string): ConversationMessage | null {\n  if (!line.trim()) return null;\n  let entry: Record<string, unknown>;\n  try {\n    entry = JSON.parse(line);\n  } catch {\n    return null;\n  }\n  return codexEntryToMessage(entry);\n}\n\n// Same decision, on an already-parsed entry — lets parseCodexConversation reuse\n// its single JSON.parse (it also needs session_meta and the timestamp).\n//\n// Tool calls, their outputs and reasoning summaries render too, in the shape the\n// Claude parser gives them (toolUseBlocks / toolResults / thinkingContent with\n// empty text), so a host renders every provider with one mapper. `uuid` is the\n// rollout item id, which is also what a host's live stream keys the line on.\nfunction codexEntryToMessage(entry: Record<string, unknown>): ConversationMessage | null {\n  const payload = entry.payload as Record<string, unknown> | undefined;\n  if (!payload || typeof payload !== \"object\") return null;\n  if (entry.type !== \"response_item\") return null;\n  const timestamp = asString(entry.timestamp);\n  const uuid = asString(payload.id) || undefined;\n  const base = { timestamp, ...(uuid ? { uuid } : {}) };\n\n  switch (payload.type) {\n    case \"message\": {\n      const role = payload.role;\n      if (role !== \"user\" && role !== \"assistant\") return null;\n      const text = extractCodexText(payload.content);\n      if (!text) return null;\n      return { role: role as MessageSender, text, ...base };\n    }\n    case \"function_call\":\n    case \"custom_tool_call\":\n    case \"web_search_call\": {\n      const block = codexToolUseBlock(payload);\n      if (!block) return null;\n      return {\n        role: \"assistant\",\n        text: \"\",\n        ...base,\n        metadata: { toolUses: [block.name], toolUseBlocks: [block] },\n      };\n    }\n    case \"function_call_output\":\n    case \"custom_tool_call_output\": {\n      const toolUseId = asString(payload.call_id);\n      if (!toolUseId) return null;\n      return {\n        role: \"user\",\n        text: \"\",\n        ...base,\n        isToolResult: true,\n        metadata: {\n          toolResults: [\n            {\n              toolUseId,\n              type: \"generic\",\n              content: { output: codexToolOutputText(payload.output) },\n            },\n          ],\n        },\n      };\n    }\n    case \"reasoning\": {\n      // Almost always encrypted_content with an empty summary; only a readable\n      // summary renders.\n      const summary = Array.isArray(payload.summary) ? payload.summary : [];\n      const thinkingContent = summary\n        .map((s) => asString((s as Record<string, unknown>)?.text))\n        .filter((t) => t.trim())\n        .join(\"\\n\\n\");\n      if (!thinkingContent) return null;\n      return { role: \"assistant\", text: \"\", ...base, isThinking: true, thinkingContent };\n    }\n    default:\n      return null;\n  }\n}\n\nfunction codexToolUseBlock(payload: Record<string, unknown>): ToolUseBlock | null {\n  if (payload.type === \"web_search_call\") {\n    const action = payload.action;\n    return {\n      id: asString(payload.id),\n      name: \"web_search\",\n      input: action && typeof action === \"object\" ? (action as Record<string, unknown>) : {},\n    };\n  }\n  const name = asString(payload.name);\n  if (!name) return null;\n  const id = asString(payload.call_id);\n  if (payload.type === \"custom_tool_call\") {\n    return { id, name, input: { input: asString(payload.input) } };\n  }\n  const args = asString(payload.arguments);\n  let input: Record<string, unknown> = { arguments: args };\n  try {\n    const parsed = JSON.parse(args);\n    if (parsed && typeof parsed === \"object\" && !Array.isArray(parsed)) input = parsed;\n  } catch {\n    // Not JSON — keep the raw string.\n  }\n  return { id, name, input };\n}\n\n// Tool output is a plain string or an array of {type: input_text, text} parts.\n// Not run through cleanSystemTags: it is program output, shown verbatim.\nfunction codexToolOutputText(output: unknown): string {\n  if (typeof output === \"string\") return output;\n  if (!Array.isArray(output)) return \"\";\n  return output\n    .map((item) => (typeof item === \"string\" ? item : asString(item?.text)))\n    .filter(Boolean)\n    .join(\"\\n\");\n}\n\n// Fold one Codex rollout line into the accumulator. Tolerant by construction:\n// any line it doesn't recognise is ignored, never thrown on.\nexport function reduceCodexEntry(\n  acc: CodexAccumulator,\n  entry: Record<string, unknown>,\n  tier: ContentTier,\n): void {\n  const ts = asString(entry.timestamp);\n  if (ts && (!acc.latestTimestamp || ts > acc.latestTimestamp)) acc.latestTimestamp = ts;\n\n  const payload = entry.payload as Record<string, unknown> | undefined;\n  if (!payload || typeof payload !== \"object\") return;\n\n  const type = entry.type as string;\n\n  if (type === \"session_meta\") {\n    if (!acc.sessionId) acc.sessionId = asString(payload.id);\n    if (!acc.cwd) acc.cwd = asString(payload.cwd);\n    const git = payload.git as Record<string, unknown> | undefined;\n    if (acc.gitBranch === null && git?.branch) acc.gitBranch = asString(git.branch) || null;\n    if (!acc.isSubagent && isSubagentSource(payload.source)) {\n      acc.isSubagent = true;\n      acc.parentSessionUuid = parentThreadId(payload.source);\n    }\n    return;\n  }\n\n  // Model lives on turn_context records (and occasionally elsewhere).\n  if (acc.model === null && payload.model) acc.model = asString(payload.model) || null;\n\n  if (type !== \"response_item\") return;\n\n  const ptype = payload.type as string;\n\n  // Tool calls — collect the tool name.\n  if (ptype === \"function_call\" || ptype === \"custom_tool_call\") {\n    const name = asString(payload.name);\n    if (name && !acc.toolNames.includes(name)) acc.toolNames.push(name);\n    return;\n  }\n\n  if (ptype !== \"message\") return;\n\n  const role = payload.role;\n  // developer/system/tool roles carry sandbox boilerplate — not user-visible turns.\n  if (role !== \"user\" && role !== \"assistant\") return;\n\n  const text = extractCodexText(payload.content);\n  if (!text) return;\n\n  // Codex prepends its AGENTS.md / sandbox preamble as the first `user` turn, so\n  // the role guard above cannot catch it: same category, wrong label. Counting it\n  // makes every conversation's preview and firstMessage that blob.\n  //\n  // Bounded to LEADING turns on purpose. A human pasting instruction text\n  // mid-conversation would otherwise go silently uncounted, and messageCount is a\n  // number people compare against what they can see. Codex only injects at the\n  // head, so the bound costs nothing real.\n  if (acc.messageCount === 0 && role === \"user\" && isCodexInjectedContext(text)) return;\n\n  const sender = role as MessageSender;\n  acc.messageCount++;\n  acc.lastMessageSender = sender;\n\n  const snapshot: MessageSnapshot = { text: text.slice(0, 200), timestamp: ts };\n  if (sender === \"user\") {\n    if (!acc.firstUser) acc.firstUser = snapshot;\n    acc.lastUser = snapshot;\n  } else {\n    acc.lastAssistant = snapshot;\n  }\n\n  if (acc.previewLength < tier.previewMax) {\n    acc.previewParts.push(text);\n    acc.previewLength += text.length;\n  }\n  if (acc.snippetLength < tier.snippetMax) {\n    const remaining = tier.snippetMax - acc.snippetLength;\n    const chunk = text.length > remaining ? text.slice(0, remaining) : text;\n    acc.snippetParts.push(chunk);\n    acc.snippetLength += chunk.length;\n  }\n}\n\nexport function finalizeCodexMeta(\n  acc: CodexAccumulator,\n  filePath: string,\n  account: string,\n  tier: ContentTier,\n): ConversationMeta | null {\n  if (acc.messageCount === 0) return null;\n\n  const sessionId = acc.sessionId || basename(filePath, \".jsonl\");\n  const projectPath = acc.cwd;\n  // Treat a session with tool calls but no plain back-and-forth as task-shaped.\n  const kind: \"conversation\" | \"task\" =\n    acc.lastAssistant === null && acc.toolNames.length > 0 ? \"task\" : \"conversation\";\n\n  return {\n    id: filePath,\n    filePath,\n    provider: CODEX_CLI_PROVIDER,\n    kind,\n    externalSessionId: acc.sessionId || undefined,\n    sessionId,\n    // Mirrors the Claude reducer: a rollout carries no slug, so the opening turn\n    // is the only human-readable name source. Only useful because the injected\n    // AGENTS.md turn is skipped above — otherwise every title would be that blob.\n    sessionName: deriveSessionNameFromFirstMessage(acc.firstUser),\n    projectPath,\n    projectName: getShortProjectName(projectPath),\n    account,\n    timestamp: acc.latestTimestamp || new Date().toISOString(),\n    messageCount: acc.messageCount,\n    lastMessageSender: acc.lastMessageSender,\n    preview: acc.previewParts.join(\" \").slice(0, tier.previewMax),\n    contentSnippet: acc.snippetParts.join(\" \"),\n    gitBranch: acc.gitBranch,\n    model: acc.model,\n    isSubagent: acc.isSubagent,\n    // Codex exposes no path-shaped parent, and no per-child id of its own.\n    parentSessionId: null,\n    parentSessionUuid: acc.parentSessionUuid ?? undefined,\n    isTeammate: false,\n    teamName: null,\n    toolNames: acc.toolNames,\n    firstMessage: acc.firstUser,\n    lastMessage: acc.lastAssistant ?? acc.lastUser,\n    lastPrompt: acc.lastUser?.text || undefined,\n  };\n}\n\n/**\n * Boilerplate Codex injects as a `user`-role turn. Codex-generic only — prompts a\n * host passes as argv (Codex has no --system-prompt flag) also land as role:user,\n * but recognising those is the host's business, not the scanner's.\n */\nexport function isCodexInjectedContext(text: string): boolean {\n  // AGENTS.md / instruction dumps prepended as the opening turn.\n  if (text.startsWith(\"# AGENTS.md\") || text.includes(\"<INSTRUCTIONS>\")) return true;\n  // Permissions / sandbox preamble, sometimes a giant user-role blob.\n  return (\n    text.startsWith(\"<permissions instructions>\") || text.includes(\"Filesystem sandboxing defines\")\n  );\n}\n\nfunction getShortProjectName(fullPath: string): string {\n  return fullPath.split(\"/\").filter(Boolean).slice(-3).join(\"/\");\n}\n\n// `session_meta.payload.source` is either a plain string for a top-level session\n// (\"cli\", \"vscode\", \"exec\", …) or an object naming how the child was spawned.\n// The `subagent` VALUE is not always a dict — {\"subagent\":\"review\"} is a real\n// shape on disk alongside {\"subagent\":{\"thread_spawn\":{…}}} and\n// {\"subagent\":{\"other\":\"guardian\"}} — so presence of the key is the test, not\n// its shape. Unknown string sources are treated as ordinary sessions rather\n// than failing, so a future Codex adds a source without breaking the scan.\nfunction isSubagentSource(source: unknown): boolean {\n  return typeof source === \"object\" && source !== null && \"subagent\" in source;\n}\n\n// Only thread_spawn names a parent. A subagent without a discoverable parent is\n// still a subagent — it just has no parent id to report.\nfunction parentThreadId(source: unknown): string | null {\n  if (!isSubagentSource(source)) return null;\n  const subagent = (source as { subagent: unknown }).subagent;\n  if (typeof subagent !== \"object\" || subagent === null) return null;\n  const spawn = (subagent as Record<string, unknown>).thread_spawn;\n  if (typeof spawn !== \"object\" || spawn === null) return null;\n  return asString((spawn as Record<string, unknown>).parent_thread_id) || null;\n}\n\n// Full conversation parse for a Codex rollout session — the Codex analogue of\n// parseConversation(). Streams the file, emitting one ConversationMessage per\n// user/assistant message item. Used by getConversation()/getConversationPage()\n// when the resolved meta is a codex-cli conversation.\nexport async function parseCodexConversation(\n  filePath: string,\n  account: string,\n): Promise<Conversation | null> {\n  const log = getLogger();\n  const messages: ConversationMessage[] = [];\n  const textParts: string[] = [];\n  let sessionId = \"\";\n  let cwd = \"\";\n  let latestTimestamp = \"\";\n  let lastUserText = \"\";\n\n  const rl = createInterface({ input: createReadStream(filePath), crlfDelay: Infinity });\n  try {\n    for await (const line of rl) {\n      if (!line.trim()) continue;\n      let entry: Record<string, unknown>;\n      try {\n        entry = JSON.parse(line);\n      } catch {\n        continue;\n      }\n      const ts = asString(entry.timestamp);\n      if (ts && (!latestTimestamp || ts > latestTimestamp)) latestTimestamp = ts;\n      const payload = entry.payload as Record<string, unknown> | undefined;\n      if (!payload || typeof payload !== \"object\") continue;\n\n      if (entry.type === \"session_meta\") {\n        if (!sessionId) sessionId = asString(payload.id);\n        if (!cwd) cwd = asString(payload.cwd);\n        continue;\n      }\n      const message = codexEntryToMessage(entry);\n      if (!message) continue;\n      messages.push(message);\n      // Tool and thinking messages carry no text; they must not blank lastPrompt.\n      if (!message.text) continue;\n      textParts.push(message.text);\n      if (message.role === \"user\") lastUserText = message.text;\n    }\n  } catch (err) {\n    log.warn({ filePath, err }, \"parseCodexConversation: read failed\");\n    return null;\n  }\n\n  if (messages.length === 0) return null;\n\n  return {\n    id: filePath,\n    filePath,\n    projectPath: cwd,\n    projectName: getShortProjectName(cwd),\n    sessionId: sessionId || basename(filePath, \".jsonl\"),\n    sessionName: \"\",\n    messages,\n    fullText: textParts.join(\" \"),\n    timestamp: latestTimestamp || new Date().toISOString(),\n    messageCount: messages.length,\n    account,\n    lastPrompt: lastUserText || undefined,\n  };\n}\n","import { sep } from \"path\";\n\n// Canonical absolute-path form used as the identity key for a conversation file\n// across the whole index (SQLite rows, the in-memory metadata cache, the\n// dir-mtime watermarks, and every by-path lookup).\n//\n// The problem this solves: fast-glob (discovery) emits forward-slash paths even\n// on Windows, while the file watcher (chokidar), path.join(), and every caller\n// that builds a path with the platform API emit native (back)slashes. The same\n// real file could therefore be stored/looked-up under two different string keys\n// on Windows, so by-path APIs miss rows depending on the caller's separator\n// style. Normalizing collapses both forms onto one key.\n//\n// The native separator is the canonical form, not fast-glob's forward slashes:\n// a path handed back to a caller (ConversationMeta.filePath/id, a change event,\n// a metadata-cache key) is compared against platform-built paths by every\n// consumer, so the native spelling is the one the public surface has to speak.\n// The cost is a one-time reindex for an index.db written before this change\n// (its forward-slash rows miss, get reinserted in native form, and the same\n// pass's deletion-reconcile retires the old ones) — bounded and self-healing,\n// unlike the recurrent duplicate-row churn this fixes.\n//\n// On POSIX this is a no-op: the separator is already \"/\", and a backslash is a\n// legal filename character there, so it must be left untouched.\nexport function canonicalPath(p: string): string {\n  return sep === \"\\\\\" ? p.replace(/\\//g, \"\\\\\") : p;\n}\n","import { createHash } from \"crypto\";\nimport fg from \"fast-glob\";\nimport { createReadStream, existsSync, statSync } from \"fs\";\nimport { stat } from \"fs/promises\";\nimport { basename, dirname, join, sep } from \"path\";\nimport { createInterface } from \"readline\";\nimport { canonicalPath } from \"../canonical-path\";\nimport { getLogger } from \"../logger\";\nimport { deriveSessionNameFromFirstMessage } from \"../persistent/metadata-reducer\";\nimport { cleanSystemTags } from \"../tags\";\nimport type {\n  ContentTier,\n  Conversation,\n  ConversationMessage,\n  ConversationMeta,\n  MessageSender,\n  MessageSnapshot,\n  ToolUseBlock,\n} from \"../types\";\nimport { parseCodexJsonlLine } from \"./codex-cli\";\nimport { CURSOR_PROVIDER, type DiscoveredConversationFile, type ScannerProvider } from \"./provider\";\n\n// Cursor agent-transcripts JSONL: `{ role, message: { content: [{ type, text }] } }`.\n// No envelope `type` of user/assistant (that's Claude), no session_meta (that's\n// Codex), and no per-line timestamp — user turns wrap the clock in <timestamp>.\nexport interface CursorAccumulator {\n  sessionId: string;\n  latestTimestamp: string;\n  messageCount: number;\n  lastMessageSender: MessageSender;\n  isSubagent: boolean;\n  parentSessionUuid: string | null;\n  subagentId: string | null;\n  firstUser: MessageSnapshot | null;\n  lastUser: MessageSnapshot | null;\n  lastAssistant: MessageSnapshot | null;\n  isImportedFromClaude: boolean;\n  isImportedFromCodex: boolean;\n  toolNames: string[];\n  previewParts: string[];\n  previewLength: number;\n  snippetParts: string[];\n  snippetLength: number;\n}\n\nconst TIMESTAMP_RE = /<timestamp>\\s*([\\s\\S]*?)\\s*<\\/timestamp>/;\nconst USER_QUERY_RE = /<user_query>\\s*([\\s\\S]*?)\\s*<\\/user_query>/;\nconst SUBAGENT_PATH_RE = /[\\\\/]subagents[\\\\/]/;\n\nexport class CursorProvider implements ScannerProvider<CursorAccumulator> {\n  readonly name = CURSOR_PROVIDER;\n\n  async discover(roots: string[]): Promise<DiscoveredConversationFile[]> {\n    const log = getLogger();\n    const results: DiscoveredConversationFile[] = [];\n    for (const root of roots) {\n      let paths: string[];\n      try {\n        // Composer chat lives in state.vscdb — not these files. Only the JSONL\n        // agent-transcripts tree is in scope (feasibility Phase 1, not Phase 3).\n        paths = await fg([\"**/agent-transcripts/**/*.jsonl\"], {\n          cwd: root,\n          absolute: true,\n          dot: false,\n          unique: true,\n        });\n      } catch (err) {\n        log.warn({ root, err }, \"cursor discovery: glob failed\");\n        continue;\n      }\n      for (const filePath of paths) {\n        try {\n          const s = await stat(filePath);\n          if (s.size > 0) results.push({ filePath: canonicalPath(filePath), account: \"cursor\" });\n        } catch (err) {\n          log.warn({ filePath, err }, \"cursor discovery: stat failed\");\n        }\n      }\n    }\n    return results;\n  }\n\n  canParse(filePath: string, sample: string): boolean {\n    const underTranscripts = /[\\\\/]agent-transcripts[\\\\/]/.test(filePath);\n    for (const line of sample.split(\"\\n\")) {\n      if (!line.trim()) continue;\n      try {\n        const e = JSON.parse(line) as Record<string, unknown>;\n        // Native Claude/Codex files stay with those providers. Copies that land\n        // under agent-transcripts are Cursor imports — claim them here so they\n        // are not skipped, and fold the envelopes in reduceEntry.\n        if (looksLikeImportedCodexEntry(e) || looksLikeImportedClaudeEntry(e)) {\n          return underTranscripts;\n        }\n        if (looksLikeCursorChatEntry(e)) return true;\n      } catch {}\n    }\n    return false;\n  }\n\n  createEmptyAccumulator(): CursorAccumulator {\n    return {\n      sessionId: \"\",\n      latestTimestamp: \"\",\n      messageCount: 0,\n      lastMessageSender: \"user\",\n      isSubagent: false,\n      parentSessionUuid: null,\n      subagentId: null,\n      firstUser: null,\n      lastUser: null,\n      lastAssistant: null,\n      isImportedFromClaude: false,\n      isImportedFromCodex: false,\n      toolNames: [],\n      previewParts: [],\n      previewLength: 0,\n      snippetParts: [],\n      snippetLength: 0,\n    };\n  }\n\n  reduceEntry(acc: CursorAccumulator, entry: Record<string, unknown>, tier: ContentTier): void {\n    reduceCursorEntry(acc, entry, tier);\n  }\n\n  finalize(\n    acc: CursorAccumulator,\n    filePath: string,\n    account: string,\n    tier: ContentTier,\n  ): ConversationMeta | null {\n    return finalizeCursorMeta(acc, filePath, account, tier);\n  }\n}\n\nexport function looksLikeCursorChatEntry(entry: Record<string, unknown>): boolean {\n  const role = entry.role;\n  if (role !== \"user\" && role !== \"assistant\") return false;\n  // Claude's envelope uses top-level type user/assistant. Cursor does not.\n  if (entry.type === \"user\" || entry.type === \"assistant\") return false;\n  return true;\n}\n\nfunction looksLikeImportedClaudeEntry(entry: Record<string, unknown>): boolean {\n  return entry.type === \"user\" || entry.type === \"assistant\";\n}\n\nfunction looksLikeImportedCodexEntry(entry: Record<string, unknown>): boolean {\n  return (\n    entry.type === \"session_meta\" || entry.type === \"response_item\" || entry.type === \"event_msg\"\n  );\n}\n\nfunction asString(value: unknown): string {\n  return typeof value === \"string\" ? value : \"\";\n}\n\nfunction provenanceToken(value: unknown): string {\n  if (typeof value === \"string\") return value.trim().toLowerCase();\n  if (value && typeof value === \"object\") {\n    const rec = value as Record<string, unknown>;\n    return provenanceToken(\n      rec.importedFrom ?? rec.imported_from ?? rec.sourceProvider ?? rec.source,\n    );\n  }\n  return \"\";\n}\n\nfunction importedFromClaudeToken(token: string): boolean {\n  return (\n    token === \"claude\" ||\n    token === \"claude-code\" ||\n    token === \"claude_code\" ||\n    token === \"anthropic\"\n  );\n}\n\nfunction importedFromCodexToken(token: string): boolean {\n  return (\n    token === \"codex\" || token === \"codex-cli\" || token === \"codex_cli\" || token === \"openai-codex\"\n  );\n}\n\nfunction noteImportProvenance(\n  acc: CursorAccumulator,\n  entry: Record<string, unknown>,\n  text: string,\n): void {\n  const token = provenanceToken(\n    entry.importedFrom ??\n      entry.imported_from ??\n      entry.sourceProvider ??\n      entry.source ??\n      (entry.message && typeof entry.message === \"object\"\n        ? ((entry.message as Record<string, unknown>).importedFrom ??\n          (entry.message as Record<string, unknown>).imported_from ??\n          (entry.message as Record<string, unknown>).sourceProvider)\n        : undefined),\n  );\n  if (importedFromClaudeToken(token) || looksLikeImportedClaudeEntry(entry)) {\n    acc.isImportedFromClaude = true;\n  }\n  if (importedFromCodexToken(token) || looksLikeImportedCodexEntry(entry)) {\n    acc.isImportedFromCodex = true;\n  }\n  if (/imported from claude/i.test(text) || /<imported_from_claude>/i.test(text)) {\n    acc.isImportedFromClaude = true;\n  }\n  if (/imported from codex/i.test(text) || /<imported_from_codex>/i.test(text)) {\n    acc.isImportedFromCodex = true;\n  }\n}\n\nexport function unwrapCursorUserText(text: string): string {\n  const query = text.match(USER_QUERY_RE);\n  const body = query ? query[1] : text.replace(TIMESTAMP_RE, \"\");\n  return cleanSystemTags(body);\n}\n\nexport function timestampFromCursorUserText(text: string): string {\n  const match = text.match(TIMESTAMP_RE);\n  if (!match) return \"\";\n  const parsed = Date.parse(match[1].trim());\n  return Number.isNaN(parsed) ? \"\" : new Date(parsed).toISOString();\n}\n\nfunction extractCursorText(content: unknown): string {\n  if (typeof content === \"string\") return unwrapCursorUserText(content);\n  if (!Array.isArray(content)) return \"\";\n  return content\n    .map((item) => {\n      if (typeof item === \"string\") return unwrapCursorUserText(item);\n      const block = item as { type?: string; text?: string };\n      if ((block?.type === \"text\" || block?.type === undefined) && typeof block.text === \"string\") {\n        return unwrapCursorUserText(block.text);\n      }\n      return \"\";\n    })\n    .filter(Boolean)\n    .join(\" \");\n}\n\nfunction collectCursorToolNames(content: unknown, into: string[]): void {\n  if (!Array.isArray(content)) return;\n  for (const item of content) {\n    const block = item as { type?: string; name?: string };\n    if (block?.type === \"tool_use\" && typeof block.name === \"string\" && block.name) {\n      if (!into.includes(block.name)) into.push(block.name);\n    }\n  }\n}\n\nfunction firstTimestampHint(content: unknown): string {\n  if (typeof content === \"string\") return timestampFromCursorUserText(content);\n  if (!Array.isArray(content)) return \"\";\n  for (const item of content) {\n    if (typeof item === \"string\") {\n      const ts = timestampFromCursorUserText(item);\n      if (ts) return ts;\n    } else if (typeof (item as { text?: string })?.text === \"string\") {\n      const ts = timestampFromCursorUserText((item as { text: string }).text);\n      if (ts) return ts;\n    }\n  }\n  return \"\";\n}\n\n// `index` is the line's message index in its file — the position a full parse\n// gives it, which is also a host's message_index. Pass it whenever it is known:\n// it goes into the uuid (see cursorMessageUuid).\nexport function parseCursorJsonlLine(line: string, index?: number): ConversationMessage | null {\n  const trimmed = line.trim();\n  if (!trimmed) return null;\n  let entry: Record<string, unknown>;\n  try {\n    entry = JSON.parse(trimmed);\n  } catch {\n    return null;\n  }\n  const message = cursorEntryToMessage(entry);\n  if (!message || message.uuid) return message;\n  return { ...message, uuid: cursorMessageUuid(trimmed, message.role, index) };\n}\n\n// Cursor lines carry no id, so derive one a host can match a live copy of the\n// message against its history copy with: the same line at the same position\n// always yields the same uuid. Content alone is not enough — ~1% of real\n// transcript lines repeat an earlier line byte-for-byte (a re-sent prompt, the\n// same Read twice), and a content-only id would merge them. The position makes\n// repeats distinct; the content hash keeps a mismatched position from matching\n// a different message.\nfunction cursorMessageUuid(line: string, role: MessageSender, index: number | undefined): string {\n  const hash = createHash(\"sha1\").update(line).digest(\"hex\").slice(0, 16);\n  return index === undefined ? `cursor-${role}-${hash}` : `cursor-${role}-${index}-${hash}`;\n}\n\nfunction cursorEntryToMessage(entry: Record<string, unknown>): ConversationMessage | null {\n  if (looksLikeCursorChatEntry(entry)) {\n    const role = entry.role as MessageSender;\n    const message = entry.message as { content?: unknown } | undefined;\n    const content = message?.content ?? entry.content;\n    return withToolUses(\n      { role, text: extractCursorText(content), timestamp: firstTimestampHint(content) },\n      content,\n    );\n  }\n  if (looksLikeImportedClaudeEntry(entry)) {\n    const message = entry.message as { content?: unknown; role?: string } | undefined;\n    const role = (\n      message?.role === \"assistant\" || entry.type === \"assistant\" ? \"assistant\" : \"user\"\n    ) as MessageSender;\n    const content = message?.content ?? entry.content;\n    return withToolUses(\n      { role, text: extractCursorText(content), timestamp: asString(entry.timestamp) },\n      content,\n    );\n  }\n  return parseCodexJsonlLine(JSON.stringify(entry));\n}\n\n// Attach the line's tool_use blocks, the same metadata the Claude parser fills.\n// A message renders when it has text or tool calls; neither → null.\nfunction withToolUses(message: ConversationMessage, content: unknown): ConversationMessage | null {\n  const blocks = extractCursorToolUseBlocks(content);\n  if (blocks.length === 0) return message.text ? message : null;\n  return {\n    ...message,\n    metadata: { toolUses: blocks.map((b) => b.name), toolUseBlocks: blocks },\n  };\n}\n\n// Cursor's tool_use blocks carry no id, and ToolUseBlock needs one, so derive a\n// stable one from the call itself: re-reading the same line yields the same id.\nfunction extractCursorToolUseBlocks(content: unknown): ToolUseBlock[] {\n  if (!Array.isArray(content)) return [];\n  const blocks: ToolUseBlock[] = [];\n  for (const item of content) {\n    const block = item as { type?: string; id?: string; name?: string; input?: unknown };\n    if (block?.type !== \"tool_use\" || typeof block.name !== \"string\" || !block.name) continue;\n    const input =\n      block.input && typeof block.input === \"object\" && !Array.isArray(block.input)\n        ? (block.input as Record<string, unknown>)\n        : {};\n    const id =\n      typeof block.id === \"string\" && block.id\n        ? block.id\n        : `cursor-tool-${createHash(\"sha1\")\n            .update(`${block.name}\\0${JSON.stringify(input)}`)\n            .digest(\"hex\")\n            .slice(0, 16)}`;\n    blocks.push({ id, name: block.name, input });\n  }\n  return blocks;\n}\n\nfunction foldCursorMessage(\n  acc: CursorAccumulator,\n  role: MessageSender,\n  text: string,\n  timestamp: string,\n  tier: ContentTier,\n): void {\n  if (timestamp && (!acc.latestTimestamp || timestamp > acc.latestTimestamp)) {\n    acc.latestTimestamp = timestamp;\n  }\n  acc.messageCount++;\n  acc.lastMessageSender = role;\n  const snapshot: MessageSnapshot = { text: text.slice(0, 200), timestamp };\n  if (role === \"user\") {\n    if (!acc.firstUser) acc.firstUser = snapshot;\n    acc.lastUser = snapshot;\n  } else {\n    acc.lastAssistant = snapshot;\n  }\n  if (acc.previewLength < tier.previewMax) {\n    acc.previewParts.push(text);\n    acc.previewLength += text.length;\n  }\n  if (acc.snippetLength < tier.snippetMax) {\n    const remaining = tier.snippetMax - acc.snippetLength;\n    const chunk = text.length > remaining ? text.slice(0, remaining) : text;\n    acc.snippetParts.push(chunk);\n    acc.snippetLength += chunk.length;\n  }\n}\n\nexport function reduceCursorEntry(\n  acc: CursorAccumulator,\n  entry: Record<string, unknown>,\n  tier: ContentTier,\n): void {\n  const message = entry.message as { content?: unknown } | undefined;\n  const content = message?.content ?? entry.content;\n  const textHint = extractCursorText(content);\n  noteImportProvenance(acc, entry, textHint);\n\n  if (looksLikeCursorChatEntry(entry)) {\n    collectCursorToolNames(content, acc.toolNames);\n    const text = textHint;\n    if (!text) return;\n    foldCursorMessage(acc, entry.role as MessageSender, text, firstTimestampHint(content), tier);\n    return;\n  }\n\n  if (looksLikeImportedClaudeEntry(entry)) {\n    collectCursorToolNames(content, acc.toolNames);\n    const msg = cursorEntryToMessage(entry);\n    if (!msg?.text) return;\n    foldCursorMessage(acc, msg.role, msg.text, msg.timestamp, tier);\n    return;\n  }\n\n  if (looksLikeImportedCodexEntry(entry)) {\n    const msg = parseCodexJsonlLine(JSON.stringify(entry));\n    if (!msg?.text) return;\n    foldCursorMessage(acc, msg.role, msg.text, msg.timestamp, tier);\n  }\n}\n\nexport function finalizeCursorMeta(\n  acc: CursorAccumulator,\n  filePath: string,\n  account: string,\n  tier: ContentTier,\n): ConversationMeta | null {\n  if (acc.messageCount === 0) return null;\n\n  const sessionId = basename(filePath, \".jsonl\");\n  const isSubagent = SUBAGENT_PATH_RE.test(filePath);\n  const parent = isSubagent ? parentFromSubagentPath(filePath) : null;\n  const { projectPath, projectName } = projectFromCursorPath(filePath);\n  const timestamp = acc.latestTimestamp || fileMtimeIso(filePath);\n  const kind: \"conversation\" | \"task\" =\n    acc.lastAssistant === null && acc.toolNames.length > 0 ? \"task\" : \"conversation\";\n\n  return {\n    id: filePath,\n    filePath,\n    provider: CURSOR_PROVIDER,\n    kind,\n    externalSessionId: sessionId,\n    sessionId,\n    sessionName: deriveSessionNameFromFirstMessage(acc.firstUser),\n    projectPath,\n    projectName,\n    account,\n    timestamp,\n    messageCount: acc.messageCount,\n    lastMessageSender: acc.lastMessageSender,\n    preview: acc.previewParts.join(\" \").slice(0, tier.previewMax),\n    contentSnippet: acc.snippetParts.join(\" \"),\n    gitBranch: null,\n    model: null,\n    isSubagent,\n    parentSessionId: parent?.parentFilePath ?? null,\n    subagentId: isSubagent ? sessionId : undefined,\n    parentSessionUuid: parent?.parentSessionUuid ?? undefined,\n    isTeammate: false,\n    teamName: null,\n    toolNames: acc.toolNames,\n    firstMessage: acc.firstUser,\n    lastMessage: acc.lastAssistant ?? acc.lastUser,\n    lastPrompt: acc.lastUser?.text || undefined,\n    ...(acc.isImportedFromClaude ? { isImportedFromClaude: true } : {}),\n    ...(acc.isImportedFromCodex ? { isImportedFromCodex: true } : {}),\n  };\n}\n\nfunction parentFromSubagentPath(\n  filePath: string,\n): { parentFilePath: string; parentSessionUuid: string } | null {\n  const subagentsDir = dirname(filePath);\n  const parentDir = dirname(subagentsDir);\n  const parentSessionUuid = basename(parentDir);\n  if (!parentSessionUuid) return null;\n  return {\n    parentSessionUuid,\n    parentFilePath: canonicalPath(join(parentDir, `${parentSessionUuid}.jsonl`)),\n  };\n}\n\n// Cursor encodes the workspace as ~/.cursor/projects/<slug>/agent-transcripts/…\n// The slug replaces path separators with '-'. That is lossy when a directory\n// name already contains hyphens, so we only promote a decoded path when it\n// exists on disk; otherwise the Cursor project directory is the identity.\nfunction projectFromCursorPath(filePath: string): { projectPath: string; projectName: string } {\n  const parts = filePath.split(/[/\\\\]/);\n  const idx = parts.lastIndexOf(\"agent-transcripts\");\n  const cursorProjectDir = idx > 0 ? parts.slice(0, idx).join(sep) : dirname(dirname(filePath));\n  const slug = basename(cursorProjectDir);\n  const decoded = decodeCursorProjectSlug(slug);\n  const projectPath = decoded ?? cursorProjectDir;\n  return { projectPath, projectName: getShortProjectName(projectPath) || slug };\n}\n\nexport function decodeCursorProjectSlug(slug: string): string | null {\n  if (!slug) return null;\n  const segments = slug.split(\"-\");\n  if (segments.length === 0) return null;\n  const rooted = slug.startsWith(\"Users-\") || slug.startsWith(\"home-\") || /^[A-Za-z]-/.test(slug);\n  let acc = rooted ? sep : \"\";\n  let i = 0;\n  if (rooted && segments[0] === \"Users\") {\n    const users = `${sep}Users`;\n    if (!existsSync(users)) return null;\n    acc = users;\n    i = 1;\n  }\n  while (i < segments.length) {\n    let found: string | null = null;\n    let next = i + 1;\n    for (let j = segments.length; j > i; j--) {\n      const candidate = join(acc, segments.slice(i, j).join(\"-\"));\n      try {\n        if (existsSync(candidate) && statSync(candidate).isDirectory()) {\n          found = candidate;\n          next = j;\n          break;\n        }\n      } catch {\n        // ignore\n      }\n    }\n    if (!found) return null;\n    acc = found;\n    i = next;\n  }\n  return acc;\n}\n\nfunction getShortProjectName(fullPath: string): string {\n  return fullPath.split(/[/\\\\]/).filter(Boolean).slice(-3).join(\"/\");\n}\n\nfunction fileMtimeIso(filePath: string): string {\n  try {\n    return new Date(statSync(filePath).mtimeMs).toISOString();\n  } catch {\n    return new Date().toISOString();\n  }\n}\n\nexport async function parseCursorConversation(\n  filePath: string,\n  account: string,\n): Promise<Conversation | null> {\n  const log = getLogger();\n  const messages: ConversationMessage[] = [];\n  const textParts: string[] = [];\n  let latestTimestamp = \"\";\n  let lastUserText = \"\";\n\n  const rl = createInterface({ input: createReadStream(filePath), crlfDelay: Infinity });\n  try {\n    for await (const line of rl) {\n      const message = parseCursorJsonlLine(line, messages.length);\n      if (!message) continue;\n      if (message.timestamp && (!latestTimestamp || message.timestamp > latestTimestamp)) {\n        latestTimestamp = message.timestamp;\n      }\n      messages.push(message);\n      // Tool-only messages carry no text; they must not blank lastPrompt.\n      if (!message.text) continue;\n      textParts.push(message.text);\n      if (message.role === \"user\") lastUserText = message.text;\n    }\n  } catch (err) {\n    log.warn({ filePath, err }, \"parseCursorConversation: read failed\");\n    return null;\n  }\n\n  if (messages.length === 0) return null;\n\n  const { projectPath, projectName } = projectFromCursorPath(filePath);\n  const sessionId = basename(filePath, \".jsonl\");\n  return {\n    id: filePath,\n    filePath,\n    projectPath,\n    projectName,\n    sessionId,\n    sessionName: \"\",\n    messages,\n    fullText: textParts.join(\" \"),\n    timestamp: latestTimestamp || fileMtimeIso(filePath),\n    messageCount: messages.length,\n    account,\n    lastPrompt: lastUserText || undefined,\n  };\n}\n","import fg from \"fast-glob\";\nimport { stat } from \"fs/promises\";\nimport { canonicalPath } from \"./canonical-path\";\nimport { getLogger } from \"./logger\";\n\nexport interface DiscoveredFile {\n  filePath: string;\n  account: string;\n}\n\nconst EXCLUDED_SEGMENTS = [\"/memory/\", \"/tool-results/\"];\n\n// stat() is cheap and IO-bound, so a large history scans much faster when the\n// calls run concurrently rather than one-at-a-time. Cap concurrency well under\n// typical fd limits.\nconst STAT_CONCURRENCY = 32;\n\nexport async function discoverJsonlFiles(\n  dirs: { projectsDir: string; account: string }[],\n  onProgress?: (found: number) => void,\n): Promise<DiscoveredFile[]> {\n  const log = getLogger();\n  const results: DiscoveredFile[] = [];\n\n  for (const { projectsDir, account } of dirs) {\n    let filePaths: string[];\n    try {\n      filePaths = await fg(\"**/*.jsonl\", {\n        cwd: projectsDir,\n        absolute: true,\n        dot: false,\n      });\n    } catch (err) {\n      log.warn({ projectsDir, account, err }, \"discovery: glob failed\");\n      continue;\n    }\n\n    // Filter out excluded directory segments\n    const filtered = filePaths.filter((fp) => !EXCLUDED_SEGMENTS.some((seg) => fp.includes(seg)));\n\n    // Filter out empty files. Stat concurrently in bounded chunks; chunk order\n    // is preserved and intra-chunk order follows the input, so discovery order\n    // is stable (downstream sorts anyway).\n    let kept = 0;\n    let skippedEmpty = 0;\n    let skippedInaccessible = 0;\n    for (let i = 0; i < filtered.length; i += STAT_CONCURRENCY) {\n      const chunk = filtered.slice(i, i + STAT_CONCURRENCY);\n      const statted = await Promise.all(\n        chunk.map(async (filePath) => {\n          try {\n            const s = await stat(filePath);\n            return { filePath, size: s.size };\n          } catch (err) {\n            log.warn({ filePath, err }, \"discovery: stat failed\");\n            return { filePath, size: -1 };\n          }\n        }),\n      );\n      for (const { filePath, size } of statted) {\n        if (size < 0) {\n          skippedInaccessible++;\n        } else if (size > 0) {\n          // fast-glob emits forward slashes even on Windows. Emit the canonical\n          // form instead, so a discovered path is the same string as the one a\n          // watcher/path.join caller produces for that file — discovery output\n          // keys the in-memory metadata cache and the has_nested comparison in\n          // dir-watermark, neither of which goes through a repository.\n          results.push({ filePath: canonicalPath(filePath), account });\n          kept++;\n        } else {\n          skippedEmpty++;\n        }\n      }\n    }\n\n    log.debug(\n      {\n        projectsDir,\n        account,\n        globMatches: filePaths.length,\n        afterExclusions: filtered.length,\n        kept,\n        skippedEmpty,\n        skippedInaccessible,\n      },\n      \"discovery: directory scanned\",\n    );\n\n    onProgress?.(results.length);\n  }\n\n  log.debug({ totalFiles: results.length, dirs: dirs.length }, \"discovery: complete\");\n  return results;\n}\n","import { discoverJsonlFiles } from \"../discovery\";\nimport {\n  finalizeMeta,\n  initialReducerState,\n  type ReducerState,\n  reduceLine,\n} from \"../persistent/metadata-reducer\";\nimport type { ContentTier, ConversationMeta } from \"../types\";\nimport {\n  CLAUDE_CODE_PROVIDER,\n  type DiscoveredConversationFile,\n  type ScannerProvider,\n} from \"./provider\";\n\n// The existing Claude/Threadbase format, expressed as a provider. All behavior\n// is the already-shared reducer (metadata-reducer.ts) — no logic is duplicated\n// here. Discovery is delegated to discoverJsonlFiles; the scanner passes the\n// profiles' projects dirs as roots paired with their account ids.\nexport class ThreadbaseProvider implements ScannerProvider<ReducerState> {\n  readonly name = CLAUDE_CODE_PROVIDER;\n\n  // Roots are passed as \"<projectsDir>\\0<account>\" so the scanner can carry the\n  // per-root account through the shared interface. The scanner builds these.\n  async discover(roots: string[]): Promise<DiscoveredConversationFile[]> {\n    const dirs = roots.map((r) => {\n      const [projectsDir, account = \"default\"] = r.split(\"\\0\");\n      return { projectsDir, account };\n    });\n    return discoverJsonlFiles(dirs);\n  }\n\n  // Threadbase JSONL has top-level type \"user\"/\"assistant\" with a cwd/sessionId.\n  canParse(_filePath: string, sample: string): boolean {\n    for (const line of sample.split(\"\\n\")) {\n      if (!line.trim()) continue;\n      try {\n        const e = JSON.parse(line) as Record<string, unknown>;\n        if (e.type === \"user\" || e.type === \"assistant\") return true;\n        // Codex's distinctive top-level types — definitively not us.\n        if (e.type === \"session_meta\" || e.type === \"response_item\") return false;\n      } catch {}\n    }\n    return false;\n  }\n\n  createEmptyAccumulator(): ReducerState {\n    return initialReducerState();\n  }\n\n  reduceEntry(acc: ReducerState, entry: Record<string, unknown>, tier: ContentTier): void {\n    reduceLine(acc, entry, tier);\n  }\n\n  finalize(\n    acc: ReducerState,\n    filePath: string,\n    account: string,\n    tier: ContentTier,\n  ): ConversationMeta | null {\n    // finalizeMeta already tags provider: \"claude-code\".\n    return finalizeMeta(acc, filePath, account, tier);\n  }\n}\n","import { EventEmitter } from \"events\";\nimport { closeSync, openSync, readSync, statSync } from \"fs\";\nimport { homedir } from \"os\";\nimport { join } from \"path\";\nimport { LRUCache } from \"./cache\";\nimport { canonicalPath } from \"./canonical-path\";\nimport { discoverJsonlFiles } from \"./discovery\";\nimport {\n  applyAccountFilter,\n  applyIncludeFilter,\n  applyPagination,\n  applyProjectFilter,\n  applySinceFilter,\n  applySort,\n  parseSinceCutoff,\n} from \"./filters\";\nimport { readGitBranch } from \"./git\";\nimport { SearchIndexer } from \"./indexer\";\nimport { getLogger } from \"./logger\";\nimport { parseConversation, parseMeta } from \"./parser\";\nimport {\n  type CachedConversation,\n  extendConversation,\n  parseConversationResumable,\n} from \"./persistent/conversation-stream\";\nimport { classify } from \"./persistent/cursor\";\nimport { PersistentEngine } from \"./persistent/index-engine\";\nimport { getProjectsDir, loadProfiles } from \"./profiles\";\nimport { CodexCliProvider, parseCodexConversation } from \"./providers/codex-cli\";\nimport { CursorProvider, parseCursorConversation } from \"./providers/cursor\";\nimport { parseMetaWithProvider } from \"./providers/parse\";\nimport {\n  CLAUDE_CODE_PROVIDER,\n  CODEX_CLI_PROVIDER,\n  CURSOR_PROVIDER,\n  canonicalizeProviderList,\n  providerMatches,\n  type ScannerProvider,\n} from \"./providers/provider\";\nimport { ThreadbaseProvider } from \"./providers/threadbase\";\nimport {\n  appendSearchDelta,\n  combineSearchContent,\n  emptySearchDocument,\n  extractSearchDelta,\n  type SearchDocument,\n} from \"./search-document\";\nimport { CONTENT_FIELD, generateMatches } from \"./search-matches\";\nimport { resolveTier } from \"./tiers\";\nimport type {\n  ContentTier,\n  Conversation,\n  ConversationMeta,\n  ConversationPage,\n  GetConversationOptions,\n  GetConversationPageOptions,\n  GroupedConversations,\n  Profile,\n  ScanOptions,\n  ScanResult,\n  SearchOptions,\n  SearchResult,\n  SingleFilePage,\n  TreeConversation,\n} from \"./types\";\nimport { FileWatcher } from \"./watcher/file-watcher\";\nimport { type IndexJob, IndexQueue } from \"./watcher/index-queue\";\n\nconst BATCH_SIZE = 12;\nconst DEFAULT_CONFIG_PATH = \"~/.config/threadbase-scanner\";\n\n// A test process that reaches the default path writes its fixtures into the\n// developer's real index. Measured on one live machine: 579 of 1,144 rows were\n// test fixtures, 357 of them from tb-streamer's suite, which constructs\n// scanners with no dbPath and has no TB_SCANNER_DB of its own. Those rows are\n// indistinguishable from real conversations in every coverage query, so they\n// silently corrupt any measurement taken of the index — including the\n// completeness metrics a durable archive would report.\n//\n// The env var already existed for this; it just failed open. Failing loudly is\n// what makes the omission visible at the moment it is introduced rather than a\n// year later, and it belongs here rather than in each consumer's setup because\n// the scanner is the thing that knows which path is the real one.\nfunction isTestProcess(): boolean {\n  return (\n    Boolean(process.env.VITEST) ||\n    Boolean(process.env.JEST_WORKER_ID) ||\n    process.env.NODE_ENV === \"test\"\n  );\n}\n\n// Default persistent-index location. Overridable via TB_SCANNER_DB (required\n// under a test runner, and handy for pointing at an alternate DB in ops).\nfunction defaultDbPath(): string {\n  const override = process.env.TB_SCANNER_DB;\n  if (override) return override;\n  if (isTestProcess()) {\n    throw new Error(\n      \"TB_SCANNER_DB must be set under a test runner. Refusing to open the default index at \" +\n        \"~/.config/threadbase-scanner/index.db, because test fixtures written there are \" +\n        \"indistinguishable from real conversations and corrupt every measurement of the index. \" +\n        \"Point it at a temp directory in your test setup, or pass persistent.dbPath explicitly.\",\n    );\n  }\n  return join(homedir(), \".config\", \"threadbase-scanner\", \"index.db\");\n}\n\n// Flatten a search document for the in-memory index, tail-capped to the content\n// tier. Tail rather than head for the same reason the buckets themselves are\n// tail-biased: people search for what they did recently.\n//\n// This is where `persistent: false` deliberately diverges from SQLite. The\n// FlexSearch index is `tokenize: \"forward\"` (every prefix of every token, held\n// in RAM), so handing it the full ~128 KB budget per conversation would cost\n// hundreds of MB to GB. Extraction RULES are shared with FTS5; indexed VOLUME\n// is not. Raise this only against a measurement, never on speculation.\nfunction capForMemory(doc: SearchDocument, max: number): string {\n  const combined = combineSearchContent(doc);\n  return combined.length > max ? combined.slice(-max) : combined;\n}\n\nexport interface PersistentConfig {\n  dbPath?: string;\n  // Write a portable <file>.idx.json sidecar next to each indexed JSONL for\n  // debugging/portability/recovery. Off by default. SQLite stays canonical.\n  sidecar?: boolean;\n}\n\nexport interface ConversationScannerOptions {\n  metadataCacheSize?: number;\n  conversationCacheSize?: number;\n  // SQLite-backed persistent index. Enabled by default (at DEFAULT_DB_PATH).\n  // Pass `false` for the legacy in-memory path (no native dependency, no DB\n  // file). Pass `{ dbPath }` to override the database location.\n  persistent?: false | PersistentConfig;\n}\n\nexport interface WatchOptions {\n  profiles?: Profile[];\n  // Watcher debounce window (ms). Default 400.\n  debounceMs?: number;\n  // Periodic full rescan as a correctness fallback for missed FS events.\n  // Default 60_000ms; set 0 to disable.\n  periodicMs?: number;\n}\n\n// Emitted after the index changes for one file. `meta` is the fresh metadata,\n// or null when the file was removed/emptied (deleted from the index).\nexport interface ScannerChangeEvent {\n  filePath: string;\n  account: string;\n  meta: ConversationMeta | null;\n  reason: IndexJob[\"reason\"];\n}\n\nexport class ConversationScanner {\n  private metadataCache: Map<string, ConversationMeta> = new Map();\n  // Parsed conversations plus (persistent claude-code entries only) the resume\n  // point that lets refreshFile extend them in place when the file grows.\n  private conversationLRU: LRUCache<string, CachedConversation>;\n  // session_id is NOT unique, so this maps a sessionId to every active meta that\n  // carries it. Resolution picks deterministically (newest timestamp, then path\n  // ascending) so dropping one file never hides another with the same id.\n  private sessionIdIndex: Map<string, ConversationMeta[]> = new Map();\n  private projects: Set<string> = new Set();\n  private indexer: SearchIndexer = new SearchIndexer();\n  // Search body per conversation for the in-memory path, already tail-capped to\n  // the content tier. Survives scan() so a statCache hit — which skips the parse\n  // entirely — can still index a body rather than an empty string.\n  private searchContents = new Map<string, string>();\n  // Tier the most recent scan() ran with, so refreshFile() re-parses a single\n  // file at the same content depth. Defaults to the standard tier.\n  private lastTier: ContentTier = resolveTier(\"standard\");\n\n  // null when persistent mode is disabled (legacy in-memory path). Lazily\n  // opened on first use so merely constructing a scanner never touches disk.\n  private readonly dbPath: string | null;\n  private readonly sidecarEnabled: boolean;\n  private engineInstance: PersistentEngine | null = null;\n  // The most recent scan()'s promise while it is still running, or null when\n  // idle. close() awaits it before closing the SQLite handle so a fire-and-\n  // forget scan can't have its DB shut mid-indexAll (\"database connection is\n  // not open\"). Tracks the latest scan only — concurrent scans on one instance\n  // aren't a supported pattern (a single writer DB), and the latest resolving\n  // implies earlier ones already settled in practice.\n  private inFlightScan: Promise<unknown> | null = null;\n\n  private emitter = new EventEmitter();\n  private watcher: FileWatcher | null = null;\n  private queue: IndexQueue | null = null;\n  private periodicTimer: ReturnType<typeof setInterval> | null = null;\n  // The in-flight periodicReconcile() job, if one is mid-run. unwatch() awaits\n  // it before dropping the queue/engine so its post-await engine.files access\n  // can't hit a closed DB (the watch-mode half of Bug #4).\n  private inFlightReconcile: Promise<void> | null = null;\n\n  constructor(options?: ConversationScannerOptions) {\n    this.conversationLRU = new LRUCache<string, CachedConversation>(\n      options?.conversationCacheSize ?? 5,\n    );\n    if (options?.persistent === false) {\n      this.dbPath = null;\n      this.sidecarEnabled = false;\n    } else {\n      this.dbPath = options?.persistent?.dbPath ?? defaultDbPath();\n      this.sidecarEnabled = options?.persistent?.sidecar ?? false;\n    }\n  }\n\n  private get persistent(): boolean {\n    return this.dbPath !== null;\n  }\n\n  private engine(): PersistentEngine {\n    if (!this.engineInstance) {\n      this.engineInstance = new PersistentEngine(this.dbPath as string, {\n        sidecar: this.sidecarEnabled,\n      });\n    }\n    return this.engineInstance;\n  }\n\n  // Release the SQLite connection. No-op in legacy mode. Safe to call\n  // repeatedly. Awaits watcher teardown AND any in-flight scan before closing\n  // the DB handle, so a fire-and-forget scan() can never have its connection\n  // shut mid-indexAll() (\"database connection is not open\"). This is why close()\n  // is async — callers should await it during shutdown. (Scanner review Bug #4.)\n  async close(): Promise<void> {\n    if (this.watcher || this.queue || this.periodicTimer) await this.unwatch();\n    // Let any running scan finish touching the DB first. Swallow its result/\n    // rejection here — the caller that started the scan owns its outcome; close()\n    // only needs it to stop using the handle before we close it.\n    if (this.inFlightScan) {\n      try {\n        await this.inFlightScan;\n      } catch {\n        // scan failed on its own; close() proceeds to release the handle\n      }\n    }\n    this.engineInstance?.close();\n    this.engineInstance = null;\n  }\n\n  async scan(options: ScanOptions = {}): Promise<ScanResult> {\n    // Track this scan so close() can await it before shutting the DB handle.\n    // Cleared on settle — but only if it's still the current one (a newer scan\n    // may have replaced it). Errors propagate to the caller unchanged.\n    const promise = this.runScan(options);\n    this.inFlightScan = promise;\n    try {\n      return await promise;\n    } finally {\n      if (this.inFlightScan === promise) this.inFlightScan = null;\n    }\n  }\n\n  private async runScan(options: ScanOptions): Promise<ScanResult> {\n    const profiles = await this.resolveProfiles(options.profiles);\n    const activeProfiles = profiles.filter((p) => p.enabled && p.scanHistory !== false);\n    this.lastTier = resolveTier(options.tier ?? \"standard\", options.tiers);\n\n    if (this.persistent) {\n      return this.scanPersistent(activeProfiles, options);\n    }\n    return this.scanInMemory(activeProfiles, options);\n  }\n\n  // SQLite-backed scan: (re)index changed files into the DB, then query all\n  // active metas and run the identical filter/sort/view/paginate pipeline as\n  // the in-memory path — guaranteeing an identical ScanResult shape.\n  private async scanPersistent(\n    activeProfiles: Profile[],\n    options: ScanOptions,\n  ): Promise<ScanResult> {\n    const log = getLogger();\n    const startedAt = Date.now();\n    const engine = this.engine();\n\n    const { scanned } = await engine.indexAll(activeProfiles, options);\n    const allMetas = engine.allActive();\n\n    const { conversations, total } = this.finalize(allMetas, options);\n    log.info(\n      { scanned, kept: allMetas.length, filteredTotal: total, elapsedMs: Date.now() - startedAt },\n      \"scan: complete (persistent)\",\n    );\n    return { conversations, total, scanned };\n  }\n\n  // Apply include/project/account/since filters, sort, view transform, and\n  // pagination. Shared by both backends so results never diverge.\n  private finalize(\n    allMetas: ConversationMeta[],\n    options: ScanOptions,\n  ): { conversations: ScanResult[\"conversations\"]; total: number } {\n    let filtered = allMetas;\n    if (options.include && options.include !== \"all\") {\n      filtered = applyIncludeFilter(filtered, options.include);\n    }\n    if (options.project) filtered = applyProjectFilter(filtered, options.project);\n    if (options.account) filtered = applyAccountFilter(filtered, options.account);\n    if (options.since) filtered = applySinceFilter(filtered, options.since);\n\n    filtered = applySort(filtered, options.sort ?? \"recent\");\n    const total = filtered.length;\n    const conversations = this.transformView(filtered, options);\n\n    if (Array.isArray(conversations)) {\n      const limit = options.limit ?? 50;\n      const offset = options.offset ?? 0;\n      return { conversations: applyPagination(conversations, limit, offset).items, total };\n    }\n    return { conversations, total };\n  }\n\n  private async scanInMemory(activeProfiles: Profile[], options: ScanOptions): Promise<ScanResult> {\n    const log = getLogger();\n    const startedAt = Date.now();\n    const tier = this.lastTier;\n\n    log.info(\n      {\n        activeProfiles: activeProfiles.length,\n        tier: tier.name,\n        sort: options.sort ?? \"recent\",\n        include: options.include ?? \"all\",\n        view: options.view ?? \"flat\",\n      },\n      \"scan: start\",\n    );\n\n    // Clear caches. searchContents is deliberately NOT cleared: it is keyed by\n    // file path and only ever replaced by a fresh parse, so keeping it lets a\n    // statCache hit (which skips parsing) still index a real body.\n    this.metadataCache.clear();\n    this.conversationLRU.clear();\n    this.sessionIdIndex.clear();\n    this.projects.clear();\n    this.indexer.clear();\n\n    const files = await this.discoverWithProviders(activeProfiles, options);\n    const totalFiles = files.length;\n    let scanned = 0;\n    let parseFailures = 0;\n\n    const allMetas: ConversationMeta[] = [];\n    // Memoize git-branch lookups per project path for the duration of this\n    // scan. readGitBranch walks the filesystem for .git/HEAD; without this it\n    // runs once per conversation (thousands of times) even though there are\n    // only a handful of distinct project roots. Scoped to one scan() call —\n    // branches can change between scans, so a longer-lived memo would go stale.\n    const gitBranchMemo = new Map<string, string | null>();\n    const resolveGitBranch = (projectPath: string): string | null => {\n      let branch = gitBranchMemo.get(projectPath);\n      if (branch === undefined) {\n        branch = readGitBranch(projectPath);\n        gitBranchMemo.set(projectPath, branch);\n      }\n      return branch;\n    };\n    const { statCache } = options;\n    for (let i = 0; i < files.length; i += BATCH_SIZE) {\n      const batch = files.slice(i, i + BATCH_SIZE);\n      const results = await Promise.all(\n        batch.map(async ({ filePath, account, provider }) => {\n          if (statCache) {\n            const cached = statCache.get(filePath);\n            if (cached) {\n              try {\n                const s = statSync(filePath);\n                if (s.mtimeMs === cached.stat.mtimeMs && s.size === cached.stat.size) {\n                  // Unchanged file: whatever body we extracted last time is\n                  // still accurate, so reuse it instead of indexing nothing.\n                  return {\n                    meta: cached.meta,\n                    searchContent: this.searchContents.get(cached.meta.id),\n                  };\n                }\n              } catch {\n                // file disappeared — fall through to parse which will return null\n              }\n            }\n          }\n          try {\n            // Fold the search document over the same lines as the metadata\n            // parse — one read of the file, not two.\n            let doc = emptySearchDocument();\n            const meta = await parseMetaWithProvider(provider, filePath, account, tier, (entry) => {\n              doc = appendSearchDelta(doc, extractSearchDelta(entry));\n            });\n            // The provider may already know its branch (Codex reads it from\n            // session_meta). Only walk the filesystem when it doesn't.\n            if (meta && meta.gitBranch === null && meta.projectPath) {\n              meta.gitBranch = resolveGitBranch(meta.projectPath);\n            }\n            return { meta, searchContent: capForMemory(doc, tier.snippetMax) };\n          } catch (err) {\n            parseFailures++;\n            log.warn({ filePath, account, provider: provider.name, err }, \"scan: parse threw\");\n            return { meta: null, searchContent: undefined };\n          }\n        }),\n      );\n\n      const batchMetas: ConversationMeta[] = [];\n      for (const { meta, searchContent } of results) {\n        if (meta && meta.messageCount > 0) {\n          this.metadataCache.set(meta.id, meta);\n          this.addToSessionIndex(meta);\n          this.projects.add(meta.projectPath);\n          allMetas.push(meta);\n          batchMetas.push(meta);\n          const content = searchContent ?? this.searchContents.get(meta.id) ?? \"\";\n          this.searchContents.set(meta.id, content);\n          this.indexer.addDocument(meta, content);\n        }\n      }\n\n      if (batchMetas.length > 0) {\n        options.onBatch?.(batchMetas);\n      }\n\n      scanned += batch.length;\n      log.debug({ scanned, totalFiles, batchKept: batchMetas.length }, \"scan: batch complete\");\n      options.onProgress?.(scanned, totalFiles);\n    }\n\n    const { conversations, total } = this.finalize(allMetas, options);\n\n    const elapsedMs = Date.now() - startedAt;\n    log.info(\n      {\n        totalFiles,\n        scanned,\n        kept: allMetas.length,\n        filteredTotal: total,\n        parseFailures,\n        elapsedMs,\n      },\n      \"scan: complete\",\n    );\n\n    return { conversations, total, scanned };\n  }\n\n  async search(query: string, options: SearchOptions = {}): Promise<SearchResult[]> {\n    const log = getLogger();\n    log.debug({ query, indexSize: this.indexer.getDocumentCount() }, \"search: start\");\n\n    let results: SearchResult[];\n    if (this.persistent) {\n      // SQLite FTS5 is the persistent search engine. Index once if the DB is\n      // empty (mirroring the in-memory \"scan on first search\" contract), then\n      // query FTS directly — no in-memory index to warm.\n      const engine = this.engine();\n      if (engine.conversations.count() === 0) {\n        log.debug(\"search: persistent index empty, triggering scan\");\n        const profiles = await this.resolveProfiles(options.profiles);\n        const activeProfiles = profiles.filter((p) => p.enabled && p.scanHistory !== false);\n        await engine.indexAll(activeProfiles, { ...options, limit: undefined, offset: undefined });\n      }\n      if (query.trim()) {\n        // Filters go down into SQL so they run BEFORE the LIMIT. Applying them\n        // to an already-truncated hit list would report \"no results\" whenever\n        // the surviving conversations sit outside the unfiltered top-N — much\n        // more likely now that the corpus is wide.\n        const want = (options.limit ?? 50) + (options.offset ?? 0);\n        results = engine\n          .searchHits(query, want, {\n            account: options.account,\n            provider: options.provider,\n            project: options.project,\n            since: options.since ? parseSinceCutoff(options.since) : undefined,\n            include: options.include,\n          })\n          .map(({ meta, body }) => ({\n            meta,\n            score: 1,\n            matches: body\n              ? [\n                  { field: CONTENT_FIELD, snippet: body.snippet, highlights: body.highlights },\n                  ...generateMatches(meta, query).filter((m) => m.field !== \"preview\"),\n                ]\n              : generateMatches(meta, query),\n          }));\n      } else {\n        results = engine.recentMetas((options.limit ?? 50) + (options.offset ?? 0)).map((meta) => ({\n          meta,\n          score: 1,\n          matches: [{ field: \"timestamp\", snippet: meta.preview }],\n        }));\n      }\n    } else {\n      if (this.indexer.getDocumentCount() === 0) {\n        log.debug(\"search: index empty, triggering scan\");\n        await this.scan({ ...options, limit: undefined, offset: undefined });\n      }\n      results = this.indexer.search(query, {\n        fields: options.fields,\n        limit: (options.limit ?? 50) * 2,\n      });\n    }\n\n    if (options.include && options.include !== \"all\") {\n      results = results.filter((r) => {\n        switch (options.include) {\n          case \"conversations\":\n            return !r.meta.isSubagent && !r.meta.isTeammate;\n          case \"subagents\":\n            return r.meta.isSubagent;\n          case \"teammates\":\n            return r.meta.isTeammate;\n          default:\n            return true;\n        }\n      });\n    }\n    if (options.project) {\n      const lower = options.project.toLowerCase();\n      results = results.filter(\n        (r) =>\n          r.meta.projectPath.toLowerCase().includes(lower) ||\n          r.meta.projectName.toLowerCase().includes(lower),\n      );\n    }\n    if (options.account) {\n      results = results.filter((r) => r.meta.account === options.account);\n    }\n    if (options.provider) {\n      results = results.filter((r) => providerMatches(r.meta.provider, options.provider as string));\n    }\n    if (options.since) {\n      const cutoff = parseSinceCutoff(options.since);\n      results = results.filter((r) => new Date(r.meta.timestamp).getTime() >= cutoff.getTime());\n    }\n\n    const limit = options.limit ?? 50;\n    const offset = options.offset ?? 0;\n    const sliced = results.slice(offset, offset + limit);\n    log.debug({ query, matched: results.length, returned: sliced.length }, \"search: complete\");\n    return sliced;\n  }\n\n  async getConversation(\n    id: string,\n    _options?: GetConversationOptions,\n  ): Promise<Conversation | null> {\n    const log = getLogger();\n    // Canonicalize the file-path form of the id so a native (join/watcher) and a\n    // forward-slash (fast-glob) spelling of the same file resolve to one entry.\n    // A sessionId (no separators) is unaffected.\n    const cid = canonicalPath(id);\n    const cached = this.conversationLRU.get(cid);\n    if (cached) {\n      log.debug({ id }, \"getConversation: cache hit\");\n      return cached.conversation;\n    }\n\n    const meta = this.persistent\n      ? this.engine().getByIdOrSession(cid)\n      : (this.metadataCache.get(cid) ?? this.resolveSessionId(cid));\n    if (!meta) {\n      log.debug({ id }, \"getConversation: not found in metadata\");\n      return null;\n    }\n\n    log.debug({ id, filePath: meta.filePath }, \"getConversation: cache miss, parsing\");\n    try {\n      // Persistent claude-code files parse through the resumable streaming fold\n      // so the cached entry carries its resume point — refreshFile can then\n      // extend it with only the appended bytes instead of evicting it. Codex\n      // and legacy-mode parses stay on their existing parsers (no resume state;\n      // a refresh evicts them as before).\n      if (\n        this.persistent &&\n        meta.provider !== CODEX_CLI_PROVIDER &&\n        meta.provider !== CURSOR_PROVIDER\n      ) {\n        const parsed = await parseConversationResumable(meta.filePath, meta.account);\n        if (parsed) this.conversationLRU.set(cid, parsed);\n        return parsed?.conversation ?? null;\n      }\n      const conversation =\n        meta.provider === CODEX_CLI_PROVIDER\n          ? await parseCodexConversation(meta.filePath, meta.account)\n          : meta.provider === CURSOR_PROVIDER\n            ? await parseCursorConversation(meta.filePath, meta.account)\n            : await parseConversation(meta.filePath, meta.account);\n      if (conversation) {\n        this.conversationLRU.set(cid, { conversation });\n      }\n      return conversation;\n    } catch (err) {\n      log.warn({ id, filePath: meta.filePath, err }, \"getConversation: parse failed\");\n      return null;\n    }\n  }\n\n  // Return one bounded window of a conversation's messages plus the total\n  // message count, so a caller can serve the last page and scroll back without\n  // holding the whole conversation itself.\n  //\n  // The window is `[max(0, beforeIndex - limit), beforeIndex)` in chronological\n  // order; `beforeIndex` defaults to `total` (the newest page). `fromIndex` is\n  // the window's start index, so the caller can derive `has_more_older`\n  // (fromIndex > 0). Returns null when the id can't be resolved/parsed — the\n  // same contract as getConversation.\n  //\n  // Persistent mode: a true bounded read — the engine seeks from the nearest\n  // checkpoint and parses only the requested window (checkpoints are built\n  // lazily for large conversations). Windowed message indices are proven\n  // identical to parseConversation().messages.slice(...) by the paged-reader\n  // equivalence test.\n  //\n  // Legacy mode: parse-once-then-slice via getConversation (cached in the LRU),\n  // which is identical by construction.\n  async getConversationPage(\n    id: string,\n    options: GetConversationPageOptions,\n  ): Promise<ConversationPage | null> {\n    if (this.persistent) {\n      return this.engine().getPage(canonicalPath(id), options);\n    }\n\n    const conversation = await this.getConversation(id);\n    if (!conversation) return null;\n\n    const { messages } = conversation;\n    const total = messages.length;\n    const { limit } = options;\n    const beforeIndex = options.beforeIndex ?? total;\n\n    const fromIndex = Math.max(0, beforeIndex - limit);\n    const window = messages.slice(fromIndex, beforeIndex);\n\n    return { messages: window, total, fromIndex };\n  }\n\n  // Parse one JSONL file directly and slice a page window — without any prior\n  // scan() or metadata index. This is the cold-start fast path: a single\n  // conversation can be served from one file parse (~ms) instead of waiting\n  // for a full filesystem scan. The window is the same\n  // `[max(0, beforeIndex - limit), beforeIndex)` slice as getConversationPage,\n  // and the parsed Conversation is returned alongside so the caller can build\n  // the response meta (projectPath, timestamp, messageCount, …) without a\n  // second parse. Returns null when the file can't be parsed. `account` only\n  // feeds the conversation's account field; \"default\" is the single-profile\n  // fallback, matching refreshFile.\n  async parseSingleFilePage(\n    filePath: string,\n    account: string | undefined,\n    options: GetConversationPageOptions,\n  ): Promise<SingleFilePage | null> {\n    // There is no index row on this path — it is the cold/fallback read — so\n    // sniff the file for its provider. Handing a Codex rollout to\n    // parseConversation() returns nothing, which reads to the caller as a\n    // conversation that does not exist.\n    const provider = await this.resolveProviderForFile(filePath, null);\n    const conversation =\n      provider?.name === CODEX_CLI_PROVIDER\n        ? await parseCodexConversation(filePath, account ?? \"default\")\n        : provider?.name === CURSOR_PROVIDER\n          ? await parseCursorConversation(filePath, account ?? \"default\")\n          : await parseConversation(filePath, account ?? \"default\");\n    if (!conversation) return null;\n\n    const { messages } = conversation;\n    const total = messages.length;\n    const { limit } = options;\n    const beforeIndex = options.beforeIndex ?? total;\n\n    const fromIndex = Math.max(0, beforeIndex - limit);\n    const window = messages.slice(fromIndex, beforeIndex);\n\n    return { messages: window, total, fromIndex, conversation };\n  }\n\n  // Re-parse a single JSONL file and update every in-memory index in place —\n  // metadata cache, sessionId index, project set, search index — and evict the\n  // file's parsed conversation from the LRU so the next getConversation()\n  // re-reads it. This lets a long-lived scanner stay current with a file that\n  // grew after the initial scan() without paying for a full rescan.\n  //\n  // `account` defaults to the account already recorded for this file (the id\n  // is the file path), falling back to \"default\" for a file the scanner has\n  // not seen before. Returns the fresh ConversationMeta, or null when the file\n  // no longer parses (missing/empty) — in which case any prior entry for it is\n  // dropped from all indexes.\n  //\n  // Single-flighted per path: concurrent callers (stacked client retries, a\n  // watcher tick racing a caller) await the one in-flight refresh instead of\n  // each re-reading the file.\n  private readonly refreshesInFlight = new Map<string, Promise<ConversationMeta | null>>();\n\n  refreshFile(filePath: string, account?: string): Promise<ConversationMeta | null> {\n    // Key every refresh off the canonical path so a fast-glob (forward slash)\n    // and a watcher/join (native) spelling of the same file share one in-flight\n    // refresh and hit the same stored row.\n    const cpath = canonicalPath(filePath);\n    const inFlight = this.refreshesInFlight.get(cpath);\n    if (inFlight) return inFlight;\n    const refresh = this.doRefreshFile(cpath, account).finally(() => {\n      if (this.refreshesInFlight.get(cpath) === refresh) {\n        this.refreshesInFlight.delete(cpath);\n      }\n    });\n    this.refreshesInFlight.set(cpath, refresh);\n    return refresh;\n  }\n\n  private async doRefreshFile(\n    filePath: string,\n    account?: string,\n  ): Promise<ConversationMeta | null> {\n    const log = getLogger();\n\n    if (this.persistent) {\n      const engine = this.engine();\n      const previous = engine.getByIdOrSession(filePath);\n      const resolvedAccount = account ?? previous?.account ?? \"default\";\n      // Resolve the provider so a Codex file refreshes through the Codex reducer\n      // rather than the Threadbase tail-read. Prefer stored metadata; fall back\n      // to a structural sniff for a file the index hasn't seen yet.\n      const provider = await this.resolveProviderForFile(filePath, previous);\n      // force=false: let classify() decide. It already distinguishes\n      // unchanged/appended/reindex/vanished correctly (including the\n      // replace-with-larger-file case, cursor.ts), so the watcher's live-append\n      // path resumes from the byte cursor instead of reparsing the whole file\n      // on every debounced tick.\n      const { meta, change } = await engine.indexFile(\n        filePath,\n        resolvedAccount,\n        this.lastTier.name,\n        undefined,\n        readGitBranch,\n        false,\n        provider,\n      );\n\n      // Cached parses are keyed by whatever id getConversation() was asked for\n      // — the file-path id or the sessionId — so collect every candidate key.\n      const cacheKeys = new Set<string>();\n      for (const m of [previous, meta]) {\n        if (m) {\n          cacheKeys.add(m.id);\n          cacheKeys.add(m.sessionId);\n        }\n      }\n      if (!meta || change === \"reindex\" || change === \"vanished\") {\n        // Truncated/replaced/gone: the cached parse no longer matches the\n        // bytes on disk — drop it so the next read re-parses.\n        for (const key of cacheKeys) this.conversationLRU.delete(key);\n      } else if (change === \"appended\") {\n        // The file only grew: advance any cached parse by folding just the\n        // appended bytes, leaving the LRU warm instead of evicting it.\n        await this.extendCachedConversations(cacheKeys, filePath, meta.account);\n      }\n      // unchanged → the cached parse is still valid; leave it warm.\n\n      log.debug({ filePath, change, kept: !!meta }, \"refreshFile: updated persistent index\");\n      return meta;\n    }\n\n    const previous = this.metadataCache.get(filePath);\n    const resolvedAccount = account ?? previous?.account ?? \"default\";\n\n    let meta: ConversationMeta | null = null;\n    let searchDoc = emptySearchDocument();\n    const onEntry = (entry: Record<string, unknown>) => {\n      searchDoc = appendSearchDelta(searchDoc, extractSearchDelta(entry));\n    };\n    // Same provider resolution the persistent branch above does: without it a\n    // Codex file is folded by the Threadbase reducer, yields no meta, and is\n    // dropped from the index by the eviction below.\n    const provider = await this.resolveProviderForFile(filePath, previous ?? null);\n    try {\n      meta = provider\n        ? await parseMetaWithProvider(provider, filePath, resolvedAccount, this.lastTier, onEntry)\n        : await parseMeta(filePath, resolvedAccount, this.lastTier, onEntry);\n    } catch (err) {\n      log.warn({ filePath, err }, \"refreshFile: parseMeta threw\");\n      meta = null;\n    }\n\n    // The LRU is keyed by the id used at getConversation() time, which can be\n    // either the file-path id or the sessionId — evict both for the prior and\n    // refreshed metas so no stale parse survives.\n    const evict = (m: ConversationMeta | undefined | null) => {\n      if (!m) return;\n      this.conversationLRU.delete(m.id);\n      this.conversationLRU.delete(m.sessionId);\n    };\n    evict(previous);\n    evict(meta);\n\n    if (!meta || meta.messageCount === 0) {\n      if (previous) {\n        this.metadataCache.delete(previous.id);\n        this.removeFromSessionIndex(previous);\n        this.indexer.removeDocument(previous.id);\n        this.searchContents.delete(previous.id);\n      }\n      log.debug({ filePath }, \"refreshFile: dropped (no parseable messages)\");\n      return null;\n    }\n\n    meta.gitBranch = readGitBranch(meta.projectPath);\n\n    // A re-parse can change the sessionId mapping; clear the old entry first so\n    // we don't leave this file listed under a stale sessionId.\n    if (previous) this.removeFromSessionIndex(previous);\n    this.metadataCache.set(meta.id, meta);\n    this.addToSessionIndex(meta);\n    this.projects.add(meta.projectPath);\n    const searchContent = capForMemory(searchDoc, this.lastTier.snippetMax);\n    this.searchContents.set(meta.id, searchContent);\n    if (previous) {\n      this.indexer.updateDocument(meta, searchContent);\n    } else {\n      this.indexer.addDocument(meta, searchContent);\n    }\n\n    log.debug(\n      { filePath, messageCount: meta.messageCount },\n      \"refreshFile: updated in-memory indexes\",\n    );\n    return meta;\n  }\n\n  // Advance every cached parse of an appended file by folding only the new\n  // bytes through the conversation reducer — the in-memory analogue of the\n  // persisted metadata fold. Entries without resume state (Codex) and entries\n  // whose extension fails are evicted so the next read re-parses from scratch.\n  private async extendCachedConversations(\n    cacheKeys: Set<string>,\n    filePath: string,\n    account: string,\n  ): Promise<void> {\n    // Multiple keys can point at the same wrapper (path id + sessionId) —\n    // group by wrapper so each cached parse is extended exactly once.\n    const wrappers = new Map<CachedConversation, string[]>();\n    for (const key of cacheKeys) {\n      const wrapper = this.conversationLRU.get(key);\n      if (!wrapper) continue;\n      const keys = wrappers.get(wrapper) ?? [];\n      keys.push(key);\n      wrappers.set(wrapper, keys);\n    }\n    for (const [wrapper, keys] of wrappers) {\n      if (!wrapper.resume) {\n        for (const key of keys) this.conversationLRU.delete(key);\n        continue;\n      }\n      try {\n        const extended = await extendConversation(\n          wrapper.conversation,\n          wrapper.resume,\n          filePath,\n          account,\n        );\n        // Mutate the wrapper in place so every key holding it sees the update.\n        wrapper.conversation = extended.conversation;\n        wrapper.resume = extended.resume;\n      } catch (err) {\n        getLogger().warn({ filePath, err }, \"refreshFile: cache extension failed, evicting\");\n        for (const key of keys) this.conversationLRU.delete(key);\n      }\n    }\n  }\n\n  getMetadataCache(): Map<string, ConversationMeta> {\n    if (this.persistent) {\n      const map = new Map<string, ConversationMeta>();\n      for (const meta of this.engine().allActive()) map.set(meta.id, meta);\n      return map;\n    }\n    return this.metadataCache;\n  }\n\n  // Collision-safe sessionId lookup. session_id is NOT unique (the parser falls\n  // back to the file basename, and resumed/subagent sessions repeat ids), so\n  // getConversation(sessionId) is a convenience that resolves to one match;\n  // this returns every active conversation sharing the id, newest first.\n  getConversationsBySessionId(sessionId: string): ConversationMeta[] {\n    if (this.persistent) {\n      return this.engine().getAllBySessionId(sessionId);\n    }\n    return this.sortBySessionPriority(this.sessionIdIndex.get(sessionId) ?? []);\n  }\n\n  getProjects(): string[] {\n    const source = this.persistent ? this.engine().getProjects() : this.projects;\n    const normalized = new Set<string>();\n    for (const p of source) {\n      normalized.add(p.replace(/\\/+$/, \"\"));\n    }\n    return Array.from(normalized).sort();\n  }\n\n  // ── File watching (persistent mode only) ────────────────────────────────\n\n  // Subscribe to index changes. Events: \"change\" → ScannerChangeEvent,\n  // \"error\" → Error. Returns this for chaining.\n  on(event: \"change\", listener: (e: ScannerChangeEvent) => void): this;\n  on(event: \"error\", listener: (err: Error) => void): this;\n  on(event: string, listener: (...args: any[]) => void): this {\n    this.emitter.on(event, listener);\n    return this;\n  }\n\n  off(event: string, listener: (...args: any[]) => void): this {\n    this.emitter.off(event, listener);\n    return this;\n  }\n\n  // Start watching the active profiles' project dirs. A filesystem watcher\n  // feeds debounced, path-deduplicated index jobs through a single-writer\n  // queue; a periodic full rescan backstops any events the watcher misses\n  // (sleep/wake, network FS, restarts). Emits \"change\" per indexed file.\n  // Persistent mode only — throws in legacy mode (no durable index to update).\n  async watch(options: WatchOptions = {}): Promise<void> {\n    if (!this.persistent) {\n      throw new Error(\"watch() requires persistent mode; construct with persistent enabled\");\n    }\n    if (this.watcher) return; // already watching\n\n    const profiles = await this.resolveProfiles(options.profiles);\n    const activeProfiles = profiles.filter((p) => p.enabled && p.scanHistory !== false);\n\n    this.queue = new IndexQueue(async (job) => {\n      try {\n        // Create/change and delete both route through refreshFile: a removed\n        // file stat-fails or parses empty, so refreshFile drops its row and\n        // returns null. The index stays correct either way.\n        const meta = await this.refreshFile(job.filePath, job.account);\n        this.emitter.emit(\"change\", {\n          filePath: job.filePath,\n          account: job.account,\n          meta,\n          reason: job.reason,\n        } satisfies ScannerChangeEvent);\n      } catch (err) {\n        this.emitter.emit(\"error\", err instanceof Error ? err : new Error(String(err)));\n      }\n    });\n\n    this.watcher = new FileWatcher(\n      activeProfiles,\n      (e) => {\n        this.queue?.enqueue({\n          filePath: e.filePath,\n          account: e.account,\n          reason: \"watcher\",\n        });\n      },\n      { debounceMs: options.debounceMs },\n    );\n    await this.watcher.start();\n\n    const periodicMs = options.periodicMs ?? 60_000;\n    if (periodicMs > 0) {\n      this.periodicTimer = setInterval(() => {\n        // Track the job so unwatch() can await it — otherwise its post-await\n        // engine.files access can land after the DB is closed.\n        const job = this.periodicReconcile(activeProfiles).finally(() => {\n          if (this.inFlightReconcile === job) this.inFlightReconcile = null;\n        });\n        this.inFlightReconcile = job;\n      }, periodicMs);\n      // Don't keep the process alive solely for the rescan timer.\n      this.periodicTimer.unref?.();\n    }\n\n    getLogger().info({ profiles: activeProfiles.length, periodicMs }, \"watch: started\");\n  }\n\n  // Periodic correctness backstop: re-discover all files and enqueue them\n  // through the same queue the watcher uses, so any add/change the watcher\n  // missed still gets indexed and emits a \"change\" event. Vanished files\n  // (active in the DB but no longer on disk) are enqueued too — refreshFile\n  // drops them. Routing through the queue (not a direct scan) keeps event\n  // emission and single-writer serialization unified.\n  private async periodicReconcile(activeProfiles: Profile[]): Promise<void> {\n    if (!this.queue) return;\n    try {\n      const engine = this.engine();\n      const configDirs = activeProfiles.map((p) => ({\n        projectsDir: getProjectsDir(p),\n        account: p.id,\n      }));\n      const discovered = await discoverJsonlFiles(configDirs);\n      const seen = new Set<string>();\n      for (const { filePath, account } of discovered) {\n        seen.add(filePath);\n        // Only enqueue genuinely-changed files so an idle tick stays silent\n        // (no spurious \"change\" events for thousands of unchanged files).\n        const { change } = classify(filePath, engine.files.getByPath(filePath));\n        if (change !== \"unchanged\") {\n          this.queue.enqueue({ filePath, account, reason: \"periodic\" });\n        }\n      }\n      // Files in the index but gone from disk → enqueue so refreshFile drops them.\n      for (const path of engine.files.allActivePaths()) {\n        if (!seen.has(path)) {\n          this.queue.enqueue({ filePath: path, account: \"default\", reason: \"periodic\" });\n        }\n      }\n    } catch (err) {\n      this.emitter.emit(\"error\", err instanceof Error ? err : new Error(String(err)));\n    }\n  }\n\n  // Stop watching and drain any in-flight index jobs.\n  async unwatch(): Promise<void> {\n    if (this.periodicTimer) {\n      clearInterval(this.periodicTimer);\n      this.periodicTimer = null;\n    }\n    // Let a reconcile that already started finish touching the DB before we\n    // drop the queue/engine below. Its own catch swallows errors; we only wait.\n    if (this.inFlightReconcile) {\n      await this.inFlightReconcile;\n    }\n    if (this.watcher) {\n      await this.watcher.stop();\n      this.watcher = null;\n    }\n    if (this.queue) {\n      await this.queue.onIdle();\n      this.queue = null;\n    }\n  }\n\n  // ── Provider plumbing (in-memory path) ──────────────────────────────────\n\n  // Build the flat parse worklist for the enabled providers. Threadbase\n  // discovers under the active profiles' project dirs; Codex discovers under\n  // the explicit codexRoots (opt-in — no default home scan).\n  private async discoverWithProviders(\n    activeProfiles: Profile[],\n    options: ScanOptions,\n  ): Promise<{ filePath: string; account: string; provider: ScannerProvider }[]> {\n    const enabled = canonicalizeProviderList(options.providers);\n    const work: { filePath: string; account: string; provider: ScannerProvider }[] = [];\n\n    if (enabled.includes(CLAUDE_CODE_PROVIDER)) {\n      const provider = new ThreadbaseProvider();\n      const roots = activeProfiles.map((p) => `${getProjectsDir(p)}\\0${p.id}`);\n      for (const f of await provider.discover(roots)) {\n        work.push({ ...f, provider });\n      }\n    }\n    if (enabled.includes(CODEX_CLI_PROVIDER) && (options.codexRoots?.length ?? 0) > 0) {\n      const provider = new CodexCliProvider();\n      for (const f of await provider.discover(options.codexRoots as string[])) {\n        work.push({ ...f, provider });\n      }\n    }\n    if (enabled.includes(CURSOR_PROVIDER) && (options.cursorRoots?.length ?? 0) > 0) {\n      const provider = new CursorProvider();\n      for (const f of await provider.discover(options.cursorRoots as string[])) {\n        work.push({ ...f, provider });\n      }\n    }\n    return work;\n  }\n\n  // Resolve which provider should (re)parse a file. Stored metadata wins; for a\n  // file the index has not seen, sniff the first lines with each non-Threadbase\n  // provider's canParse. Returns undefined for Threadbase (the engine's default\n  // tail-read path).\n  private async resolveProviderForFile(\n    filePath: string,\n    previous: ConversationMeta | null,\n  ): Promise<ScannerProvider | undefined> {\n    if (previous?.provider === CODEX_CLI_PROVIDER) return new CodexCliProvider();\n    if (providerMatches(previous?.provider, CURSOR_PROVIDER)) {\n      return new CursorProvider();\n    }\n    if (previous?.provider) return undefined; // known Threadbase\n    let sample = \"\";\n    try {\n      const fd = openSync(filePath, \"r\");\n      try {\n        const buf = Buffer.alloc(8192);\n        const n = readSync(fd, buf, 0, buf.length, 0);\n        sample = buf.subarray(0, n).toString(\"utf8\");\n      } finally {\n        closeSync(fd);\n      }\n    } catch {\n      return undefined;\n    }\n    const cursor = new CursorProvider();\n    if (cursor.canParse(filePath, sample)) return cursor;\n    const codex = new CodexCliProvider();\n    if (codex.canParse(filePath, sample)) return codex;\n    return undefined;\n  }\n\n  private addToSessionIndex(meta: ConversationMeta): void {\n    const list = this.sessionIdIndex.get(meta.sessionId);\n    if (list) {\n      // Replace any existing entry for the same file (re-index), else append.\n      const i = list.findIndex((m) => m.id === meta.id);\n      if (i >= 0) list[i] = meta;\n      else list.push(meta);\n    } else {\n      this.sessionIdIndex.set(meta.sessionId, [meta]);\n    }\n  }\n\n  private removeFromSessionIndex(meta: ConversationMeta): void {\n    const list = this.sessionIdIndex.get(meta.sessionId);\n    if (!list) return;\n    const next = list.filter((m) => m.id !== meta.id);\n    if (next.length > 0) this.sessionIdIndex.set(meta.sessionId, next);\n    else this.sessionIdIndex.delete(meta.sessionId);\n  }\n\n  // Deterministic single-result sessionId resolution: newest timestamp first,\n  // tie-broken by absolute path ascending.\n  private resolveSessionId(sessionId: string): ConversationMeta | undefined {\n    return this.sortBySessionPriority(this.sessionIdIndex.get(sessionId) ?? [])[0];\n  }\n\n  private sortBySessionPriority(metas: ConversationMeta[]): ConversationMeta[] {\n    return [...metas].sort((a, b) => {\n      if (a.timestamp !== b.timestamp) return a.timestamp < b.timestamp ? 1 : -1;\n      return a.filePath < b.filePath ? -1 : a.filePath > b.filePath ? 1 : 0;\n    });\n  }\n\n  private async resolveProfiles(profiles?: Profile[]): Promise<Profile[]> {\n    // An explicit array (including an empty one) means \"use exactly these\" —\n    // `[]` scans zero profiles. Only an absent argument falls back to defaults.\n    // Treating `[]` as \"load defaults\" silently scanned the real ~/.claude\n    // history, which looked like a hang for callers isolating from it.\n    if (profiles) return profiles;\n    return loadProfiles(DEFAULT_CONFIG_PATH);\n  }\n\n  private transformView(\n    metas: ConversationMeta[],\n    options: ScanOptions,\n  ): ConversationMeta[] | TreeConversation[] | GroupedConversations {\n    switch (options.view) {\n      case \"tree\":\n        return this.toTree(metas);\n      case \"grouped\":\n        return this.toGrouped(metas);\n      default:\n        return metas;\n    }\n  }\n\n  private toTree(metas: ConversationMeta[]): TreeConversation[] {\n    const parents: TreeConversation[] = [];\n    const subagents: ConversationMeta[] = [];\n\n    for (const meta of metas) {\n      if (meta.isSubagent) {\n        subagents.push(meta);\n      } else {\n        parents.push({ ...meta, subagents: [] });\n      }\n    }\n\n    const parentById = new Map(parents.map((p) => [p.id, p]));\n    for (const sub of subagents) {\n      const parent = sub.parentSessionId ? parentById.get(sub.parentSessionId) : undefined;\n      if (parent) {\n        parent.subagents.push(sub);\n      } else {\n        parents.push({ ...sub, subagents: [] });\n      }\n    }\n\n    return parents;\n  }\n\n  private toGrouped(metas: ConversationMeta[]): GroupedConversations {\n    const groups: GroupedConversations = {};\n    for (const meta of metas) {\n      const key = meta.teamName || \"_default\";\n      if (!groups[key]) groups[key] = [];\n      groups[key].push(meta);\n    }\n    return groups;\n  }\n}\n","export class LRUCache<K, V> {\n  private map = new Map<K, V>();\n  private readonly capacity: number;\n\n  constructor(capacity: number) {\n    this.capacity = capacity;\n  }\n\n  get(key: K): V | undefined {\n    const value = this.map.get(key);\n    if (value === undefined) return undefined;\n    // Move to end (most recently used)\n    this.map.delete(key);\n    this.map.set(key, value);\n    return value;\n  }\n\n  set(key: K, value: V): void {\n    this.map.delete(key);\n    this.map.set(key, value);\n    if (this.map.size > this.capacity) {\n      const oldest = this.map.keys().next();\n      if (!oldest.done) this.map.delete(oldest.value);\n    }\n  }\n\n  has(key: K): boolean {\n    return this.map.has(key);\n  }\n\n  delete(key: K): boolean {\n    return this.map.delete(key);\n  }\n\n  clear(): void {\n    this.map.clear();\n  }\n\n  get size(): number {\n    return this.map.size;\n  }\n}\n","import { basename } from \"path\";\nimport { getShortProjectName } from \"../parser\";\nimport type { Conversation, ConversationMessage, TurnDuration } from \"../types\";\nimport { applyTeamInfo, type ConvReducerState, initialConvState } from \"./conversation-reducer\";\nimport { deriveSessionNameFromFirstMessage } from \"./metadata-reducer\";\nimport { streamMessages } from \"./paged-reader\";\n\n// A parsed conversation held in the scanner's LRU together with the resume\n// point needed to extend it in place when its file grows: the conversation\n// reducer state at EOF plus the byte/line offset just past the last complete\n// line. `resume` is absent for providers without a resumable reducer (Codex)\n// — a refresh evicts those entries instead of extending them.\nexport interface ConversationResume {\n  state: ConvReducerState;\n  offset: number;\n  line: number;\n}\n\nexport interface CachedConversation {\n  conversation: Conversation;\n  resume?: ConversationResume;\n}\n\n// Fold [resume.offset, EOF) through the conversation reducer, collecting the\n// produced messages plus turn_duration entries. turn_duration lines are\n// consumed BEFORE the reducer — exactly as parseConversation does — so their\n// header fields (timestamps) never leak into the conversation state. Mutates\n// resume.state in place; on failure the caller must discard the cached entry.\nasync function foldTail(filePath: string, resume: ConversationResume) {\n  const messages: ConversationMessage[] = [];\n  const textParts: string[] = [];\n  const turnDurations: TurnDuration[] = [];\n  const end = await streamMessages(\n    filePath,\n    resume.offset,\n    resume.line,\n    resume.state,\n    (message) => {\n      messages.push(message);\n      if (message.text) textParts.push(message.text);\n      return false; // never stop early — fold to EOF\n    },\n    (entry) => {\n      if (\n        entry.type === \"system\" &&\n        entry.subtype === \"turn_duration\" &&\n        typeof entry.durationMs === \"number\"\n      ) {\n        turnDurations.push({\n          durationMs: entry.durationMs as number,\n          messageCount: (entry.messageCount as number) || 0,\n          uuid: entry.uuid as string | undefined,\n        });\n        return true;\n      }\n      return false;\n    },\n  );\n  return { messages, textParts, turnDurations, end };\n}\n\n// Assemble the Conversation shape exactly as parseConversation() does.\nfunction assemble(\n  filePath: string,\n  account: string,\n  messages: ConversationMessage[],\n  fullText: string,\n  turnDurations: TurnDuration[],\n  state: ConvReducerState,\n): Conversation {\n  return {\n    id: filePath,\n    filePath,\n    projectPath: state.cwd,\n    projectName: getShortProjectName(state.cwd),\n    sessionId: state.sessionId || basename(filePath, \".jsonl\"),\n    sessionName:\n      state.sessionName ||\n      deriveSessionNameFromFirstMessage(messages.find((m) => m.role === \"user\" && m.text) ?? null),\n    messages,\n    fullText,\n    timestamp: state.latestTimestamp || new Date().toISOString(),\n    messageCount: messages.length,\n    account,\n    turnDurations: turnDurations.length > 0 ? turnDurations : undefined,\n    lastPrompt: state.lastPrompt || undefined,\n  };\n}\n\n// Full parse that also captures the resume point, so a later append can extend\n// the result in place instead of re-parsing the file. Identical to\n// parseConversation() by construction (same reducer, same assembly); the one\n// deliberate difference is torn-write discipline: a final line with no\n// trailing newline is treated as in-flight (not parsed yet) rather than\n// parsed, matching the persistent index's byte-cursor semantics.\nexport async function parseConversationResumable(\n  filePath: string,\n  account: string,\n): Promise<CachedConversation | null> {\n  const resume: ConversationResume = { state: initialConvState(), offset: 0, line: 0 };\n  const { messages, textParts, turnDurations, end } = await foldTail(filePath, resume);\n  if (messages.length === 0) return null;\n  applyTeamInfo(messages, resume.state);\n  const conversation = assemble(\n    filePath,\n    account,\n    messages,\n    textParts.join(\" \"),\n    turnDurations,\n    resume.state,\n  );\n  return { conversation, resume: { state: resume.state, offset: end.offset, line: end.line } };\n}\n\n// Extend a cached conversation with only the bytes appended since its resume\n// point. Returns a NEW Conversation with a fresh messages array — the old\n// ARRAY is never mutated, but team info discovered in the delta enriches the\n// shared message objects in place (the same enrichment a full re-parse would\n// emit), so element-level immutability is not guaranteed.\nexport async function extendConversation(\n  previous: Conversation,\n  resume: ConversationResume,\n  filePath: string,\n  account: string,\n): Promise<CachedConversation> {\n  const { messages: fresh, textParts, turnDurations, end } = await foldTail(filePath, resume);\n  const messages = fresh.length > 0 ? previous.messages.concat(fresh) : previous.messages;\n  // Team info discovered in the delta back-applies to earlier messages, the\n  // same way a full parse applies it once at the end.\n  applyTeamInfo(messages, resume.state);\n  const fullText =\n    textParts.length === 0\n      ? previous.fullText\n      : previous.fullText\n        ? `${previous.fullText} ${textParts.join(\" \")}`\n        : textParts.join(\" \");\n  const allTurnDurations = (previous.turnDurations ?? []).concat(turnDurations);\n  const conversation = assemble(\n    filePath,\n    account,\n    messages,\n    fullText,\n    allTurnDurations,\n    resume.state,\n  );\n  return { conversation, resume: { state: resume.state, offset: end.offset, line: end.line } };\n}\n","import { createReadStream } from \"fs\";\nimport { setImmediate as yieldToEventLoop } from \"timers/promises\";\nimport type { ConversationMessage, ConversationPage } from \"../types\";\nimport {\n  applyTeamInfo,\n  type ConvReducerState,\n  initialConvState,\n  reduceConvLine,\n} from \"./conversation-reducer\";\nimport { YIELD_EVERY_LINES } from \"./jsonl-tail-reader\";\nimport type { Checkpoint } from \"./repositories/checkpoints.repo\";\n\n// Snapshot the parser state every CHECKPOINT_INTERVAL messages.\nexport const CHECKPOINT_INTERVAL = 500;\n\n// Stream a JSONL file from `startOffset`, folding each complete line through the\n// conversation reducer. `onMessage` receives every produced message plus the\n// byte offset of the line that FOLLOWS it (a safe resume point) and the current\n// state. `onEntry` (optional) sees every parsed entry first — return true to\n// consume it before it reaches the reducer (parseConversation's turn_duration\n// handling). Returns the offset/line just past the last COMPLETE line consumed\n// — a trailing torn line is never included, so the result is a safe resume\n// point for a later incremental fold.\nexport async function streamMessages(\n  filePath: string,\n  startOffset: number,\n  startLine: number,\n  state: ConvReducerState,\n  // Return true to stop streaming (window filled).\n  onMessage: (message: ConversationMessage, nextByteOffset: number, nextLine: number) => boolean,\n  onEntry?: (entry: Record<string, unknown>) => boolean,\n): Promise<{ offset: number; line: number }> {\n  const stream = createReadStream(filePath, { start: startOffset, encoding: \"utf8\" });\n  let buffer = \"\";\n  let offset = startOffset;\n  let line = startLine;\n  let sinceYield = 0;\n\n  for await (const chunk of stream) {\n    buffer += chunk;\n    let nl: number;\n    // biome-ignore lint/suspicious/noAssignInExpressions: idiomatic line scan\n    while ((nl = buffer.indexOf(\"\\n\")) >= 0) {\n      const lineWithNewline = buffer.slice(0, nl + 1);\n      const text = lineWithNewline.trimEnd();\n      buffer = buffer.slice(nl + 1);\n      offset += Buffer.byteLength(lineWithNewline, \"utf8\");\n      line += 1;\n\n      // Same cooperative yield as the tail reader: without it, buffered chunks\n      // drain through microtasks and a full-file walk blocks the event loop.\n      if (++sinceYield >= YIELD_EVERY_LINES) {\n        sinceYield = 0;\n        await yieldToEventLoop();\n      }\n\n      if (text.length === 0) continue;\n      let entry: Record<string, unknown>;\n      try {\n        entry = JSON.parse(text);\n      } catch {\n        continue;\n      }\n      if (onEntry?.(entry)) continue;\n      const message = reduceConvLine(state, entry);\n      if (message && onMessage(message, offset, line)) {\n        stream.destroy();\n        return { offset, line };\n      }\n    }\n  }\n  return { offset, line };\n}\n\n// Build checkpoints by streaming the file once. Each checkpoint captures the\n// byte offset + reducer state immediately AFTER message (k*interval - 1), i.e.\n// a clean resume point for message index k*interval. Pass `from` (the last\n// persisted checkpoint) to EXTEND an existing chain: the stream resumes from\n// its offset/state and only checkpoints past it are returned — an append costs\n// O(new bytes), never a re-walk of the immutable prefix.\nexport async function buildCheckpoints(\n  filePath: string,\n  interval = CHECKPOINT_INTERVAL,\n  from: Checkpoint | null = null,\n): Promise<Checkpoint[]> {\n  const checkpoints: Checkpoint[] = [];\n  const state = from ? from.state : initialConvState();\n  let index = from ? from.messageIndex : 0;\n\n  await streamMessages(\n    filePath,\n    from?.byteOffset ?? 0,\n    from?.lineNumber ?? 0,\n    state,\n    (_msg, nextOffset, nextLine) => {\n      index += 1;\n      // After consuming `index` messages, if the next message index is a multiple\n      // of the interval, snapshot a resume point for it.\n      if (index % interval === 0) {\n        checkpoints.push({\n          messageIndex: index,\n          byteOffset: nextOffset,\n          lineNumber: nextLine,\n          state: structuredClone(state),\n        });\n      }\n      return false; // never stop early — we want the whole file\n    },\n  );\n\n  return checkpoints;\n}\n\n// Read a bounded message window [fromIndex, beforeIndex) plus the total message\n// count, seeking from the nearest checkpoint <= fromIndex. `total` requires\n// knowing the message count; callers pass it (from the indexed summary) so we\n// never scan the whole file just to count.\nexport async function readPage(\n  filePath: string,\n  total: number,\n  options: { beforeIndex?: number; limit: number },\n  floor: Checkpoint | null,\n): Promise<ConversationPage> {\n  const beforeIndex = options.beforeIndex ?? total;\n  const fromIndex = Math.max(0, beforeIndex - options.limit);\n\n  const state = floor ? structuredClone(floor.state) : initialConvState();\n  const startOffset = floor ? floor.byteOffset : 0;\n  const startLine = floor ? floor.lineNumber : 0;\n  let index = floor ? floor.messageIndex : 0;\n\n  const window: ConversationMessage[] = [];\n  await streamMessages(filePath, startOffset, startLine, state, (message) => {\n    const current = index;\n    index += 1;\n    if (current >= fromIndex && current < beforeIndex) window.push(message);\n    return index >= beforeIndex; // stop once the window is filled\n  });\n\n  applyTeamInfo(window, state);\n  return { messages: window, total, fromIndex };\n}\n","import { createReadStream } from \"fs\";\nimport { setImmediate as yieldToEventLoop } from \"timers/promises\";\nimport type { ContentTier } from \"../types\";\nimport { type ReducerState, reduceLine } from \"./metadata-reducer\";\n\n// Cooperatively yield every N folded lines so a full parse of a large file\n// (cold index, truncation fallback) never blocks the event loop for its whole\n// duration — buffered stream chunks otherwise drain through microtasks without\n// ever reaching the macrotask queue.\nexport const YIELD_EVERY_LINES = 500;\n\nexport interface TailReadResult {\n  // Byte offset of the first un-consumed byte (start of the trailing partial\n  // line, or EOF). Safe to persist as the next cursor.\n  newOffset: number;\n  newLine: number;\n  parsedLines: number;\n  badJsonLines: number;\n}\n\n// Stream a JSONL file from `startOffset` to EOF, folding each COMPLETE line into\n// `state`. A trailing line with no newline (a writer mid-append) is left\n// un-consumed: the offset is not advanced past it, so the next pass re-reads it\n// once it's complete. Offsets are byte offsets (Buffer.byteLength), never string\n// .length, so multibyte content stays aligned. (Spec §7.2–7.4.)\n// `onEntry` rides the same line loop as the metadata fold, so search-document\n// extraction costs no extra file read — important when a cold index or a v5\n// migration re-reads the whole corpus.\nexport async function tailReduce(\n  filePath: string,\n  startOffset: number,\n  startLine: number,\n  state: ReducerState,\n  tier: ContentTier,\n  onEntry?: (entry: Record<string, unknown>) => void,\n): Promise<TailReadResult> {\n  const stream = createReadStream(filePath, { start: startOffset, encoding: \"utf8\" });\n\n  let buffer = \"\";\n  let offset = startOffset;\n  let line = startLine;\n  let parsedLines = 0;\n  let sinceYield = 0;\n\n  for await (const chunk of stream) {\n    buffer += chunk;\n    let nl: number;\n    // biome-ignore lint/suspicious/noAssignInExpressions: idiomatic line scan\n    while ((nl = buffer.indexOf(\"\\n\")) >= 0) {\n      const lineWithNewline = buffer.slice(0, nl + 1);\n      const text = lineWithNewline.trimEnd();\n      buffer = buffer.slice(nl + 1);\n\n      if (text.length > 0) {\n        try {\n          const entry = JSON.parse(text) as Record<string, unknown>;\n          reduceLine(state, entry, tier);\n          onEntry?.(entry);\n        } catch {\n          state.badJsonLines++;\n        }\n        parsedLines++;\n      }\n\n      offset += Buffer.byteLength(lineWithNewline, \"utf8\");\n      line++;\n      if (++sinceYield >= YIELD_EVERY_LINES) {\n        sinceYield = 0;\n        await yieldToEventLoop();\n      }\n    }\n  }\n\n  return { newOffset: offset, newLine: line, parsedLines, badJsonLines: state.badJsonLines };\n}\n","import { createHash } from \"crypto\";\nimport { closeSync, openSync, readSync, statSync } from \"fs\";\nimport type { FileRow } from \"./repositories/conversation-files.repo\";\n\nexport type FileChange = \"unchanged\" | \"appended\" | \"reindex\" | \"vanished\";\n\nexport interface FileStat {\n  size: number;\n  mtimeMs: number;\n}\n\n// Cheap content fingerprint: hash of the first + last 4KB plus the size. Lets\n// us detect a same-size in-place rewrite (e.g. a file replaced atomically)\n// without hashing an entire 200MB file. (Spec §9.4.)\nconst FP_BYTES = 4096;\n\nexport function fingerprint(filePath: string, size: number): string {\n  const hash = createHash(\"sha1\");\n  hash.update(String(size));\n  const fd = openSync(filePath, \"r\");\n  try {\n    const head = Buffer.alloc(Math.min(FP_BYTES, size));\n    if (head.length > 0) {\n      readSync(fd, head, 0, head.length, 0);\n      hash.update(head);\n    }\n    if (size > FP_BYTES) {\n      const tailLen = Math.min(FP_BYTES, size);\n      const tail = Buffer.alloc(tailLen);\n      readSync(fd, tail, 0, tailLen, size - tailLen);\n      hash.update(tail);\n    }\n  } finally {\n    closeSync(fd);\n  }\n  return hash.digest(\"hex\");\n}\n\n// Classify how a file changed relative to its persisted cursor row. Drives\n// whether the indexer skips, tail-reads from the cursor, or reindexes from 0.\n// (Spec §9.)\nexport function classify(\n  filePath: string,\n  existing: FileRow | undefined,\n): { change: FileChange; stat?: FileStat } {\n  let stat: FileStat;\n  try {\n    const s = statSync(filePath);\n    stat = { size: s.size, mtimeMs: s.mtimeMs };\n  } catch {\n    return { change: \"vanished\" };\n  }\n\n  if (!existing || existing.status !== \"active\" || existing.last_indexed_offset === 0) {\n    return { change: \"reindex\", stat };\n  }\n\n  // Smaller than where we left off → truncated/replaced. Reindex.\n  if (stat.size < existing.last_indexed_offset) {\n    return { change: \"reindex\", stat };\n  }\n\n  // Same size + same mtime → nothing to do.\n  if (stat.size === existing.size_bytes && stat.mtimeMs === existing.mtime_ms) {\n    return { change: \"unchanged\", stat };\n  }\n\n  // Same size but mtime moved → possible in-place rewrite. Fingerprint to be\n  // sure; a changed fingerprint means the bytes we already indexed are stale.\n  if (stat.size === existing.last_indexed_offset) {\n    const fp = fingerprint(filePath, stat.size);\n    if (existing.content_fingerprint && fp !== existing.content_fingerprint) {\n      return { change: \"reindex\", stat };\n    }\n    return { change: \"unchanged\", stat };\n  }\n\n  // Grew past the cursor. Usually a genuine append — but an atomic replace with\n  // a DIFFERENT, LONGER file also lands here (size > offset, mtime moved). If we\n  // trusted \"appended\" blindly we'd resume the OLD reducer state and fold only\n  // the new tail, blending two conversations. So re-check the region we already\n  // folded before taking the fast path.\n  //\n  // The stored content_fingerprint was computed as fingerprint(_, size_bytes)\n  // over the old file. It describes the same byte range as fingerprint(current,\n  // last_indexed_offset) ONLY when size_bytes === last_indexed_offset (no\n  // trailing partial line was pending at index time — the normal case). When\n  // that holds and the fingerprints match, we treat it as a real append and\n  // resume the cursor; a mismatch means the indexed region changed → reindex.\n  // When it doesn't hold (a partial line was pending), we can't reconstruct the\n  // stored window, so we reindex to be safe.\n  //\n  // ponytail: fingerprint() only covers the first 4KB + the 4KB ending at the\n  // offset — NOT the whole [0, offset) prefix. So this catches every real atomic\n  // replace (any rewrite changes line 1 → different head 4KB) but NOT a rewrite\n  // that keeps both 8KB windows byte-identical and differs only in the middle.\n  // That's the same bounded ceiling the existing same-size edge-fingerprint has,\n  // accepted by design. Upgrade to a full-prefix hash (or an offset-keyed head\n  // fingerprint column) only if a mid-file-preserving-envelope rewrite is ever\n  // observed in practice — and that same column would also let the pending-\n  // partial-then-grew case resume instead of reindexing.\n  if (\n    existing.content_fingerprint &&\n    existing.size_bytes === existing.last_indexed_offset &&\n    fingerprint(filePath, existing.last_indexed_offset) === existing.content_fingerprint\n  ) {\n    return { change: \"appended\", stat };\n  }\n  return { change: \"reindex\", stat };\n}\n","import { statSync } from \"fs\";\nimport { canonicalPath } from \"../canonical-path\";\nimport { readGitBranch } from \"../git\";\nimport { getLogger } from \"../logger\";\nimport { getProjectsDir } from \"../profiles\";\nimport { CodexCliProvider, parseCodexConversation } from \"../providers/codex-cli\";\nimport { CursorProvider, parseCursorConversation } from \"../providers/cursor\";\nimport { parseMetaWithProvider } from \"../providers/parse\";\nimport {\n  CLAUDE_CODE_PROVIDER,\n  CODEX_CLI_PROVIDER,\n  CURSOR_PROVIDER,\n  canonicalizeProviderList,\n  type ScannerProvider,\n} from \"../providers/provider\";\nimport { appendSearchDelta, emptySearchDocument, extractSearchDelta } from \"../search-document\";\nimport { resolveTier } from \"../tiers\";\nimport type {\n  ConversationMeta,\n  ConversationPage,\n  GetConversationPageOptions,\n  Profile,\n  ScanOptions,\n  SearchHighlight,\n} from \"../types\";\nimport { classify, type FileChange, fingerprint } from \"./cursor\";\nimport { type DB, openDatabase } from \"./db\";\nimport { discoverJsonlFilesGated, FULL_RECONCILE_EVERY_N_SCANS } from \"./dir-watermark\";\nimport { type TailReadResult, tailReduce } from \"./jsonl-tail-reader\";\nimport { finalizeMeta, initialReducerState, type ReducerState } from \"./metadata-reducer\";\nimport { buildCheckpoints, CHECKPOINT_INTERVAL, readPage } from \"./paged-reader\";\nimport { CheckpointsRepo } from \"./repositories/checkpoints.repo\";\nimport { ConversationFilesRepo } from \"./repositories/conversation-files.repo\";\nimport { ConversationsRepo } from \"./repositories/conversations.repo\";\nimport { FtsRepo, type FtsSearchFilters } from \"./repositories/fts.repo\";\nimport { ScannedDirsRepo } from \"./repositories/scanned-dirs.repo\";\nimport { buildSidecar, writeSidecar } from \"./sidecar\";\n\nconst BATCH_SIZE = 12;\n\nexport interface EngineSearchHit {\n  meta: ConversationMeta;\n  // Null when only metadata matched — the caller falls back to generateMatches.\n  body: { snippet: string; highlights: SearchHighlight[] } | null;\n}\n\n// Persistent indexing engine. Owns the SQLite connection and the discover ->\n// classify -> tail-read -> upsert pipeline. Query helpers return ConversationMeta\n// straight from the DB so the scanner facade can run the existing\n// filter/sort/view pipeline over them, guaranteeing parity with the in-memory\n// path.\n//\n// Indexing is incremental: an appended file resumes the persisted reducer fold\n// from its byte cursor and reads only the new bytes (cursor.ts + the tail\n// reader); a truncated/replaced file reindexes from offset 0.\nexport class PersistentEngine {\n  readonly db: DB;\n  readonly files: ConversationFilesRepo;\n  readonly conversations: ConversationsRepo;\n  readonly fts: FtsRepo;\n  readonly checkpoints: CheckpointsRepo;\n  readonly scannedDirs: ScannedDirsRepo;\n  // When true, write a portable <file>.idx.json sidecar next to each indexed\n  // JSONL. Off by default.\n  private readonly sidecar: boolean;\n  // Counts indexAll() passes so the dir-mtime gate's full-reconcile backstop\n  // (FULL_RECONCILE_EVERY_N_SCANS) can fire periodically. In-memory only: a\n  // restart just means the first few post-restart scans don't force an early\n  // backstop pass, which is harmless (watermarks themselves persist in the DB).\n  private scanCount = 0;\n  // In-flight checkpoint build/extension per file, so concurrent getPage\n  // callers share one stream instead of each walking the file.\n  private readonly checkpointBuilds = new Map<string, Promise<void>>();\n\n  constructor(dbPath: string, options: { sidecar?: boolean } = {}) {\n    this.db = openDatabase(dbPath);\n    this.files = new ConversationFilesRepo(this.db);\n    this.conversations = new ConversationsRepo(this.db);\n    this.fts = new FtsRepo(this.db);\n    this.checkpoints = new CheckpointsRepo(this.db);\n    this.scannedDirs = new ScannedDirsRepo(this.db);\n    this.sidecar = options.sidecar ?? false;\n  }\n\n  close(): void {\n    this.db.close();\n  }\n\n  // Discover all JSONL files under the active profiles, (re)parse files that\n  // changed since the last index, and upsert their metadata. Returns the number\n  // of files seen on disk this pass (the scan \"scanned\" count).\n  async indexAll(activeProfiles: Profile[], options: ScanOptions): Promise<{ scanned: number }> {\n    const log = getLogger();\n    const tier = resolveTier(options.tier ?? \"standard\", options.tiers);\n\n    const enabled = canonicalizeProviderList(options.providers);\n\n    // Each discovered file carries the provider that should parse it. claude-code\n    // files fold through the byte-offset-resumable tail reader; Codex files\n    // (opt-in, only under explicit codexRoots) reparse from offset 0.\n    const discovered: { filePath: string; account: string; provider?: ScannerProvider }[] = [];\n\n    if (enabled.includes(CLAUDE_CODE_PROVIDER)) {\n      const configDirs = activeProfiles.map((p) => ({\n        projectsDir: getProjectsDir(p),\n        account: p.id,\n      }));\n      // Escape hatch: an explicit fullRescan bypasses the dir-mtime gate\n      // entirely — an explicit refresh is precisely the \"don't trust the\n      // gate, check for real\" signal. Otherwise every FULL_RECONCILE_EVERY_N_SCANS\n      // passes also bypasses it, self-healing any add/remove a filesystem that\n      // doesn't honor directory mtimes might have hidden from the gate.\n      this.scanCount++;\n      const forceFullGlob =\n        options.fullRescan === true || this.scanCount % FULL_RECONCILE_EVERY_N_SCANS === 0;\n      const gated = await discoverJsonlFilesGated(configDirs, this.files, this.scannedDirs, {\n        fullRescan: forceFullGlob,\n      });\n      for (const f of gated) discovered.push(f);\n    }\n\n    const codex = new CodexCliProvider();\n    if (enabled.includes(CODEX_CLI_PROVIDER) && (options.codexRoots?.length ?? 0) > 0) {\n      for (const f of await codex.discover(options.codexRoots as string[])) {\n        discovered.push({ ...f, provider: codex });\n      }\n    }\n    const cursor = new CursorProvider();\n    if (enabled.includes(CURSOR_PROVIDER) && (options.cursorRoots?.length ?? 0) > 0) {\n      for (const f of await cursor.discover(options.cursorRoots as string[])) {\n        discovered.push({ ...f, provider: cursor });\n      }\n    }\n    let scanned = 0;\n\n    const gitBranchMemo = new Map<string, string | null>();\n    const resolveGitBranch = (projectPath: string): string | null => {\n      if (gitBranchMemo.has(projectPath)) {\n        return gitBranchMemo.get(projectPath) ?? null;\n      }\n      const branch = readGitBranch(projectPath);\n      gitBranchMemo.set(projectPath, branch);\n      return branch;\n    };\n\n    for (let i = 0; i < discovered.length; i += BATCH_SIZE) {\n      const batch = discovered.slice(i, i + BATCH_SIZE);\n      const results = await Promise.all(\n        batch.map(async ({ filePath, account, provider }) => {\n          const { meta } = await this.indexFile(\n            filePath,\n            account,\n            tier.name,\n            options.tiers,\n            resolveGitBranch,\n            false,\n            provider,\n          );\n          return meta;\n        }),\n      );\n      const kept = results.filter((m): m is ConversationMeta => m != null);\n      if (kept.length > 0) options.onBatch?.(kept);\n      scanned += batch.length;\n      options.onProgress?.(scanned, discovered.length);\n    }\n\n    // Reconcile deletions: any previously-active file that wasn't discovered\n    // this pass is gone from disk — mark it deleted. This is the correctness\n    // backstop for unlink events the watcher may have missed (spec §9.5).\n    //\n    // Scope the reconcile to the accounts THIS scan actually covered. The index\n    // is shared across profiles/accounts (one index.db), so a scan of account A\n    // must not mark account B's files deleted just because B's files weren't in\n    // A's discovered set — B is simply out of this scan's scope, not gone from\n    // disk. Covered = the claude-code profile ids scanned (when that provider is\n    // enabled) plus \"codex\" (when codex roots were scanned).\n    const coveredAccounts = new Set<string>();\n    if (enabled.includes(CLAUDE_CODE_PROVIDER)) {\n      for (const p of activeProfiles) coveredAccounts.add(p.id);\n    }\n    if (enabled.includes(CODEX_CLI_PROVIDER) && (options.codexRoots?.length ?? 0) > 0) {\n      coveredAccounts.add(\"codex\");\n    }\n    if (enabled.includes(CURSOR_PROVIDER) && (options.cursorRoots?.length ?? 0) > 0) {\n      coveredAccounts.add(\"cursor\");\n    }\n    // Canonical form on both sides: the stored paths are canonical, and a\n    // discovery source that emits native separators would otherwise leave every\n    // one of its files out of the seen-set and get them marked deleted.\n    const seen = new Set(discovered.map((d) => canonicalPath(d.filePath)));\n    for (const path of this.files.activePathsByAccounts([...coveredAccounts])) {\n      if (!seen.has(path)) this.markDeleted(path);\n    }\n\n    log.info({ scanned, indexed: this.conversations.count() }, \"persistent: indexAll complete\");\n    return { scanned };\n  }\n\n  // (Re)index a single file. Classifies the change vs. the persisted cursor:\n  // unchanged → return the stored summary; appended → resume the fold and read\n  // only new bytes; reindex/force → fold from offset 0. Writes the summary +\n  // cursor + reducer state in one transaction so a crash never leaves a\n  // half-written row or an over-advanced cursor. Returns the classification\n  // alongside the meta so callers (refreshFile) can keep, extend, or evict\n  // their own per-file caches without re-stat'ing the file (racy) themselves.\n  async indexFile(\n    rawFilePath: string,\n    account: string,\n    tierName: string,\n    customTiers: ScanOptions[\"tiers\"],\n    resolveGitBranch: (projectPath: string) => string | null,\n    force = false,\n    provider?: ScannerProvider,\n  ): Promise<{ meta: ConversationMeta | null; change: FileChange }> {\n    const log = getLogger();\n    const tier = resolveTier(tierName, customTiers);\n\n    // Canonicalize once, here: everything downstream (the cursor row, the\n    // conversation's source_path/id, the checkpoint + FTS keys, the sidecar, and\n    // the meta handed back to the caller) then keys off the one canonical\n    // spelling, whichever separator style the caller passed in.\n    const filePath = canonicalPath(rawFilePath);\n    const existing = this.files.getByPath(filePath);\n    const { change, stat } = classify(filePath, existing);\n\n    if (change === \"vanished\" || !stat) {\n      // File gone between discovery and indexing — treat as deleted.\n      this.markDeleted(filePath);\n      return { meta: null, change: \"vanished\" };\n    }\n    // Unchanged: serve the persisted summary without re-reading (unless a\n    // caller forces a re-parse, e.g. refreshFile after a same-size edit).\n    if (change === \"unchanged\" && !force) {\n      return { meta: this.conversations.getBySourcePath(filePath), change };\n    }\n\n    // ponytail: Codex reparses from offset 0 on every change rather than\n    // resuming a byte cursor like claude-code. Codex rollout sessions are small,\n    // so a full reparse is cheap; the resumable-fold path stays claude-code-only.\n    // Upgrade path if Codex files ever get large: give CodexAccumulator the same\n    // serialized-reducer-state treatment and route it through tailReduce.\n    if (provider && provider.name !== CLAUDE_CODE_PROVIDER) {\n      const meta = await this.indexFileWithProvider(\n        provider,\n        filePath,\n        account,\n        tier,\n        stat,\n        resolveGitBranch,\n      );\n      return { meta, change };\n    }\n\n    // appended → resume the persisted fold from the cursor; reindex/force →\n    // start fresh from offset 0. This is the incremental win: an append only\n    // reads the newly-written bytes.\n    const resume = change === \"appended\" && !force && existing?.reducer_state;\n    const state: ReducerState = resume\n      ? (JSON.parse(existing.reducer_state as string) as ReducerState)\n      : initialReducerState();\n    const startOffset = resume ? existing.last_indexed_offset : 0;\n    const startLine = resume ? existing.last_indexed_line : 0;\n\n    // Search extraction is a sibling fold over the same lines as the metadata\n    // reducer — no second read of the file, and an append only ever extracts\n    // from the newly-read region.\n    let searchDelta = emptySearchDocument();\n    const collectSearch = (entry: Record<string, unknown>) => {\n      searchDelta = appendSearchDelta(searchDelta, extractSearchDelta(entry));\n    };\n\n    let result: TailReadResult;\n    try {\n      result = await tailReduce(filePath, startOffset, startLine, state, tier, collectSearch);\n    } catch (err) {\n      log.warn({ filePath, err }, \"persistent: tail read failed\");\n      return { meta: null, change };\n    }\n\n    const meta = finalizeMeta(state, filePath, account, tier);\n    if (!meta) {\n      this.markDeleted(filePath);\n      return { meta: null, change };\n    }\n    meta.gitBranch = resolveGitBranch(meta.projectPath);\n\n    const fp = stat.size > 0 ? fingerprint(filePath, stat.size) : null;\n    const fileId = this.files.ensure(filePath, account);\n\n    // A resumed fold extends the buckets already in FTS; a from-0 fold replaces\n    // them. Tail-append means a full bucket still admits the new material and\n    // drops its oldest instead of freezing.\n    const base = resume\n      ? (this.fts.readDocument(fileId) ?? emptySearchDocument())\n      : emptySearchDocument();\n    const searchDoc = appendSearchDelta(base, searchDelta);\n\n    const upsert = this.db.transaction(() => {\n      this.conversations.upsert(fileId, meta, state.pageMessageCount);\n      // Re-tokenizing ~128 KB is the expensive part of an append; skip it when\n      // the row (body + metadata) would come out identical.\n      if (!this.fts.isCurrent(fileId, meta, searchDoc)) {\n        this.fts.upsert(fileId, meta, searchDoc);\n      }\n      // Checkpoints cover the file's immutable prefix, so an append (a resumed\n      // fold) leaves them valid — drop them only when the fold restarted from\n      // offset 0 (truncate/replace/new). They're rebuilt lazily on page access.\n      if (!resume) this.checkpoints.remove(filePath);\n      this.files.updateCursor(fileId, {\n        sizeBytes: stat.size,\n        mtimeMs: stat.mtimeMs,\n        // Advance only to the last fully-parsed line; a trailing partial line\n        // is left for the next pass.\n        offset: result.newOffset,\n        line: result.newLine,\n        reducerState: JSON.stringify(state),\n        fingerprint: fp,\n        status: \"active\",\n      });\n    });\n    upsert();\n\n    if (this.sidecar) {\n      writeSidecar(\n        filePath,\n        buildSidecar(\n          meta,\n          {\n            sizeBytes: stat.size,\n            mtimeMs: stat.mtimeMs,\n            offset: result.newOffset,\n            line: result.newLine,\n          },\n          new Date().toISOString(),\n        ),\n      );\n    }\n\n    log.debug(\n      { filePath, change, bytesRead: result.newOffset - startOffset, msgs: meta.messageCount },\n      \"persistent: indexed file\",\n    );\n    return { meta, change };\n  }\n\n  // Index a non-Threadbase provider file: full reparse from offset 0 through the\n  // provider's reducer/finalize, then the same upsert + FTS write + cursor bump\n  // the Threadbase path uses. The cursor records size/mtime (and offset = size)\n  // so the next pass classifies an unchanged file as \"unchanged\" and skips it;\n  // any change reparses from 0 again. No reducer_state is persisted.\n  private async indexFileWithProvider(\n    provider: ScannerProvider,\n    filePath: string,\n    account: string,\n    tier: ReturnType<typeof resolveTier>,\n    stat: { size: number; mtimeMs: number },\n    resolveGitBranch: (projectPath: string) => string | null,\n  ): Promise<ConversationMeta | null> {\n    const log = getLogger();\n\n    // Codex always reparses from byte 0, so the search document is rebuilt whole\n    // from the same pass rather than tail-extended.\n    let searchDoc = emptySearchDocument();\n    const meta = await parseMetaWithProvider(provider, filePath, account, tier, (entry) => {\n      searchDoc = appendSearchDelta(searchDoc, extractSearchDelta(entry));\n    });\n    if (!meta) {\n      this.markDeleted(filePath);\n      return null;\n    }\n    // The provider may already know its branch (Codex reads it from\n    // session_meta). Only walk the filesystem when it doesn't.\n    if (meta.gitBranch === null && meta.projectPath) {\n      meta.gitBranch = resolveGitBranch(meta.projectPath);\n    }\n\n    const fp = stat.size > 0 ? fingerprint(filePath, stat.size) : null;\n    const fileId = this.files.ensure(filePath, account);\n    const upsert = this.db.transaction(() => {\n      this.conversations.upsert(fileId, meta, meta.messageCount);\n      if (!this.fts.isCurrent(fileId, meta, searchDoc)) {\n        this.fts.upsert(fileId, meta, searchDoc);\n      }\n      this.checkpoints.remove(filePath);\n      this.files.updateCursor(fileId, {\n        sizeBytes: stat.size,\n        mtimeMs: stat.mtimeMs,\n        // offset = size marks the file fully consumed (non-zero so the next pass\n        // can classify it \"unchanged\"); no resumable reducer state is kept.\n        offset: stat.size,\n        line: 0,\n        reducerState: null,\n        fingerprint: fp,\n        status: \"active\",\n      });\n    });\n    upsert();\n\n    log.debug(\n      { filePath, provider: provider.name, msgs: meta.messageCount },\n      \"persistent: indexed provider file\",\n    );\n    return meta;\n  }\n\n  private markDeleted(filePath: string): void {\n    const existing = this.files.getByPath(filePath);\n    if (!existing) return;\n    const tx = this.db.transaction(() => {\n      this.conversations.deleteByFileId(existing.id);\n      this.fts.remove(existing.id);\n      this.checkpoints.remove(filePath);\n      this.files.setStatus(existing.id, \"deleted\");\n    });\n    tx();\n  }\n\n  // ── Query helpers (read straight from SQLite) ───────────────────────────\n\n  allActive(): ConversationMeta[] {\n    return this.conversations.allActive();\n  }\n\n  getByIdOrSession(id: string): ConversationMeta | null {\n    return this.conversations.getByIdOrSession(id);\n  }\n\n  getAllBySessionId(sessionId: string): ConversationMeta[] {\n    return this.conversations.getAllBySessionId(sessionId);\n  }\n\n  // Ranked hits matching the FTS query, best first, each already resolved to its\n  // active conversation row and carrying the body excerpt when the match was in\n  // the conversation body.\n  //\n  // Filters are passed down into SQL rather than applied to the result: with a\n  // wide corpus, filtering an already-LIMITed list drops conversations that\n  // would have matched.\n  searchHits(query: string, limit: number, filters: FtsSearchFilters = {}): EngineSearchHit[] {\n    const hits: EngineSearchHit[] = [];\n    for (const hit of this.fts.search(query, limit, filters)) {\n      const meta = this.conversations.getBySourcePath(hit.sourcePath);\n      if (meta) hits.push({ meta, body: hit.body });\n    }\n    return hits;\n  }\n\n  // Empty-query listing, mirroring the in-memory indexer's behavior.\n  recentMetas(limit: number): ConversationMeta[] {\n    return this.conversations.recent(limit);\n  }\n\n  getProjects(): string[] {\n    return this.conversations.distinctProjects();\n  }\n\n  // Bounded conversation page: read only the requested window from the file,\n  // seeking from the nearest checkpoint. Returns null if the id can't be\n  // resolved to an indexed conversation. For conversations large enough to span\n  // a checkpoint interval, checkpoints are built lazily on first access and\n  // reused thereafter. Smaller conversations read from the start (cheap).\n  async getPage(id: string, options: GetConversationPageOptions): Promise<ConversationPage | null> {\n    const meta = this.conversations.getByIdOrSession(id);\n    if (!meta) return null;\n    const filePath = meta.filePath;\n\n    // Codex files don't fold through the conversation-reducer the bounded reader\n    // (readPage) uses — that reducer only understands the claude-code line shape,\n    // so readPage would return an empty window for a Codex file. Codex rollout\n    // sessions are small (already reparsed from offset 0 on every change), so\n    // parse the whole conversation and slice the window — identical math to the\n    // claude-code path and to the legacy getConversationPage slice.\n    if (meta.provider === CODEX_CLI_PROVIDER || meta.provider === CURSOR_PROVIDER) {\n      const conversation =\n        meta.provider === CODEX_CLI_PROVIDER\n          ? await parseCodexConversation(filePath, meta.account)\n          : await parseCursorConversation(filePath, meta.account);\n      if (!conversation) return null;\n      const { messages } = conversation;\n      const total = messages.length;\n      const beforeIndex = options.beforeIndex ?? total;\n      const fromIndex = Math.max(0, beforeIndex - options.limit);\n      return { messages: messages.slice(fromIndex, beforeIndex), total, fromIndex };\n    }\n\n    // Bounded paging uses the parseConversation message total, which differs\n    // from meta.messageCount (the metadata count excludes tool_use-only and\n    // thinking-only lines).\n    const total = this.conversations.pageMessageCount(filePath);\n\n    await this.ensureCheckpoints(filePath, total);\n\n    const beforeIndex = options.beforeIndex ?? total;\n    const fromIndex = Math.max(0, beforeIndex - options.limit);\n    let floor = this.checkpoints.floor(filePath, fromIndex);\n    // A checkpoint past the current EOF is stale — the file was truncated or\n    // replaced on disk and no refresh has landed yet. Seeking there would read\n    // nothing (or garbage), so fall back to byte 0: correct, just slower, and\n    // the next refresh drops the stale chain. A failed stat is left to\n    // readPage, which surfaces the read error exactly as before.\n    if (floor) {\n      try {\n        if (floor.byteOffset > statSync(filePath).size) floor = null;\n      } catch {\n        // fall through to readPage's own error handling\n      }\n    }\n    return readPage(filePath, total, options, floor);\n  }\n\n  // Build or extend the checkpoint chain so it covers `total` messages. Cold\n  // file → full build; a file that grew → extend from the last persisted\n  // checkpoint (reads only past its offset, never the prefix). Single-flighted\n  // per path: concurrent getPage callers await the same build instead of\n  // streaming the file in parallel.\n  private ensureCheckpoints(filePath: string, total: number): Promise<void> {\n    if (total <= CHECKPOINT_INTERVAL) return Promise.resolve();\n    const inFlight = this.checkpointBuilds.get(filePath);\n    if (inFlight) return inFlight;\n\n    const build = (async () => {\n      const last = this.checkpoints.last(filePath);\n      // Chain already covers every checkpointable index — nothing to do.\n      if (last && total < last.messageIndex + CHECKPOINT_INTERVAL) return;\n      const fresh = await buildCheckpoints(filePath, CHECKPOINT_INTERVAL, last);\n      if (fresh.length === 0) return;\n      if (last) this.checkpoints.append(filePath, fresh);\n      else this.checkpoints.replaceAll(filePath, fresh);\n    })().finally(() => {\n      if (this.checkpointBuilds.get(filePath) === build) this.checkpointBuilds.delete(filePath);\n    });\n    this.checkpointBuilds.set(filePath, build);\n    return build;\n  }\n}\n","import { createReadStream } from \"fs\";\nimport { createInterface } from \"readline\";\nimport { getLogger } from \"../logger\";\nimport type { ContentTier, ConversationMeta } from \"../types\";\nimport type { ScannerProvider } from \"./provider\";\n\n// Stream a file through a provider's reducer triplet. This is the same fold a\n// future offset-resumed incremental parse would run (createEmptyAccumulator →\n// reduceEntry per line → finalize), just starting from offset 0. Bad JSON lines\n// and unknown entry shapes are skipped, never fatal.\n// `onEntry` lets a caller fold a second, independent accumulator (the search\n// document) over the same lines without re-reading the file. It never affects\n// the provider's own reduce.\nexport async function parseMetaWithProvider(\n  provider: ScannerProvider,\n  filePath: string,\n  account: string,\n  tier: ContentTier,\n  onEntry?: (entry: Record<string, unknown>) => void,\n): Promise<ConversationMeta | null> {\n  const log = getLogger();\n  const acc = provider.createEmptyAccumulator();\n  const rl = createInterface({\n    input: createReadStream(filePath),\n    crlfDelay: Infinity,\n  });\n\n  try {\n    for await (const line of rl) {\n      if (!line.trim()) continue;\n      let entry: Record<string, unknown>;\n      try {\n        entry = JSON.parse(line);\n      } catch {\n        continue;\n      }\n      try {\n        provider.reduceEntry(acc, entry, tier);\n        onEntry?.(entry);\n      } catch (err) {\n        // A provider reducer should never throw, but one bad line must not kill\n        // the whole file.\n        log.warn({ filePath, provider: provider.name, err }, \"provider reduce threw; line skipped\");\n      }\n    }\n  } catch (err) {\n    log.warn({ filePath, provider: provider.name, err }, \"provider parse: read failed\");\n    return null;\n  }\n\n  return provider.finalize(acc, filePath, account, tier);\n}\n","import { extractThinking } from \"./parser\";\nimport { looksLikeCursorChatEntry, unwrapCursorUserText } from \"./providers/cursor\";\nimport { cleanSystemTags } from \"./tags\";\n\n// The derived search corpus: one document per conversation, split into three\n// independently budgeted buckets so a later user message always lands in `text`\n// rather than after previously-indexed tool output. Assembled into FTS body\n// columns (persistent) or one combined string (FlexSearch).\n//\n// Budgets are JavaScript string lengths (UTF-16 code units), NOT bytes. ASCII\n// makes the two coincide; Hebrew/CJK/emoji cost 2-3 UTF-8 bytes per unit, so a\n// 64K `textMax` can hold ~128-192 KB on disk. Size index-growth estimates from\n// that, and don't describe these as byte caps.\nexport const SEARCH_BUDGET = {\n  textMax: 64 * 1024,\n  thinkingMax: 32 * 1024,\n  toolsMax: 32 * 1024,\n\n  toolPayloadMax: 4 * 1024,\n} as const;\n\nexport interface SearchDocument {\n  text: string;\n  thinking: string;\n  tools: string;\n}\n\n// Same shape as SearchDocument, but holding only the material extracted from\n// newly-read lines — what gets tail-appended onto the durable buckets.\nexport type SearchDocumentDelta = SearchDocument;\n\nconst SEP = \"\\n\\n\";\n\nexport function emptySearchDocument(): SearchDocument {\n  return { text: \"\", thinking: \"\", tools: \"\" };\n}\n\nexport function isEmptyDelta(delta: SearchDocumentDelta): boolean {\n  return !delta.text && !delta.thinking && !delta.tools;\n}\n\nexport function searchDocumentsEqual(a: SearchDocument, b: SearchDocument): boolean {\n  return a.text === b.text && a.thinking === b.thinking && a.tools === b.tools;\n}\n\n// Tail-biased append: each bucket is a sliding window over the NEWEST material.\n// Head-biased fill (stop once full) would freeze a conversation the moment it\n// crossed the budget — the same bug as the old 5 KB contentSnippet, just larger,\n// and it would miss exactly the actively-growing conversations search exists for.\nexport function appendSearchDelta(doc: SearchDocument, delta: SearchDocumentDelta): SearchDocument {\n  return {\n    text: tailAppend(doc.text, delta.text, SEARCH_BUDGET.textMax),\n    thinking: tailAppend(doc.thinking, delta.thinking, SEARCH_BUDGET.thinkingMax),\n    tools: tailAppend(doc.tools, delta.tools, SEARCH_BUDGET.toolsMax),\n  };\n}\n\n// ponytail: slice(-max) can cut mid-token; the truncated head token simply\n// doesn't match. Grapheme/token-aware windowing isn't worth it for v1.\nfunction tailAppend(current: string, incoming: string, max: number): string {\n  if (!incoming) return current;\n  const joined = current ? current + SEP + incoming : incoming;\n  return joined.length <= max ? joined : joined.slice(-max);\n}\n\n// Flatten to one string for the in-memory FlexSearch index, which has a single\n// body field. The persistent path keeps the buckets as separate FTS columns\n// instead (concatenating there would double-weight body hits).\nexport function combineSearchContent(doc: SearchDocument): string {\n  return [doc.text, doc.thinking, doc.tools].filter(Boolean).join(SEP);\n}\n\n// Truncate one tool payload before it joins the tools bucket, so a single huge\n// Read/Bash/compiler dump can't consume the whole window.\nexport function capToolPayload(value: unknown): string {\n  const raw = stringifyPayload(value);\n  if (!raw) return \"\";\n  return raw.length > SEARCH_BUDGET.toolPayloadMax\n    ? raw.slice(0, SEARCH_BUDGET.toolPayloadMax)\n    : raw;\n}\n\nfunction stringifyPayload(value: unknown): string {\n  if (value === null || value === undefined) return \"\";\n  if (typeof value === \"string\") return value;\n  try {\n    return JSON.stringify(value) ?? \"\";\n  } catch {\n    return \"\";\n  }\n}\n\n// Extract the search-document delta from one already-parsed JSONL entry.\n// Handles both Claude/Threadbase and Codex CLI line shapes so every indexing\n// path — persistent, in-memory, both providers — shares one corpus definition.\nexport function extractSearchDelta(entry: Record<string, unknown>): SearchDocumentDelta {\n  if (entry.type === \"response_item\" || entry.type === \"session_meta\") {\n    return extractCodexDelta(entry);\n  }\n  if (looksLikeCursorChatEntry(entry)) {\n    return extractCursorDelta(entry);\n  }\n  return extractClaudeDelta(entry);\n}\n\nfunction extractCursorDelta(entry: Record<string, unknown>): SearchDocumentDelta {\n  const msg = entry.message as Record<string, unknown> | undefined;\n  const content = msg?.content ?? entry.content;\n  return {\n    text: extractCursorSearchText(content),\n    thinking: \"\",\n    tools: extractClaudeToolContent(content),\n  };\n}\n\nfunction extractCursorSearchText(content: unknown): string {\n  if (typeof content === \"string\") return unwrapCursorUserText(content);\n  if (!Array.isArray(content)) return \"\";\n  const parts: string[] = [];\n  for (const item of content) {\n    if (typeof item === \"string\") {\n      const cleaned = unwrapCursorUserText(item);\n      if (cleaned) parts.push(cleaned);\n    } else if (\n      (item?.type === \"text\" || item?.type === undefined) &&\n      typeof item?.text === \"string\"\n    ) {\n      const cleaned = unwrapCursorUserText(item.text);\n      if (cleaned) parts.push(cleaned);\n    }\n  }\n  return parts.join(SEP);\n}\n\nfunction extractClaudeDelta(entry: Record<string, unknown>): SearchDocumentDelta {\n  const type = entry.type;\n  if (type !== \"user\" && type !== \"assistant\") return emptySearchDocument();\n  if (entry.isMeta) return emptySearchDocument();\n\n  const msg = entry.message as Record<string, unknown> | undefined;\n  const content = msg?.content;\n\n  const tools = [\n    extractClaudeToolContent(content),\n    // Claude stores the rich/structured tool result at the JSONL entry's top\n    // level, not inside message.content — indexing only message.content would\n    // miss most real tool output (file reads, command stdout).\n    capToolPayload(entry.toolUseResult),\n  ]\n    .filter(Boolean)\n    .join(SEP);\n\n  return {\n    text: extractClaudeText(content),\n    thinking: type === \"assistant\" ? extractThinking(content).content : \"\",\n    tools,\n  };\n}\n\n// Human/assistant prose only. Deliberately NOT parser.extractTextContent():\n// that helper folds `tool_result` strings into the same string as user text,\n// which would let a large tool result eat the high-priority text window.\n//\n// It DOES keep extractTextContent's cleanSystemTags step, and that is\n// mandatory: without it every user turn's <system-reminder> (CLAUDE.md dump,\n// skill listing, memory block) lands in `text`, exhausting the window in a\n// couple of turns and making every conversation on the machine a hit for tokens\n// that only ever appear in those wrappers.\nfunction extractClaudeText(content: unknown): string {\n  if (typeof content === \"string\") return cleanSystemTags(content);\n  if (!Array.isArray(content)) return \"\";\n  const parts: string[] = [];\n  for (const item of content) {\n    if (typeof item === \"string\") {\n      const cleaned = cleanSystemTags(item);\n      if (cleaned) parts.push(cleaned);\n    } else if (item?.type === \"text\" && typeof item.text === \"string\") {\n      const cleaned = cleanSystemTags(item.text);\n      if (cleaned) parts.push(cleaned);\n    }\n  }\n  return parts.join(SEP);\n}\n\n// Tool I/O is the payload, so it is NOT tag-cleaned — stripping it as if it\n// were a prompt wrapper would delete the content being indexed. The per-payload\n// cap is the safety valve instead.\nfunction extractClaudeToolContent(content: unknown): string {\n  if (!Array.isArray(content)) return \"\";\n  const parts: string[] = [];\n  for (const item of content) {\n    if (item?.type === \"tool_use\") {\n      const capped = capToolPayload(item.input);\n      if (capped) parts.push(capped);\n    } else if (item?.type === \"tool_result\") {\n      const capped = capToolPayload(item.content);\n      if (capped) parts.push(capped);\n    }\n  }\n  return parts.join(SEP);\n}\n\nfunction extractCodexDelta(entry: Record<string, unknown>): SearchDocumentDelta {\n  const payload = entry.payload as Record<string, unknown> | undefined;\n  if (!payload || typeof payload !== \"object\") return emptySearchDocument();\n\n  const ptype = payload.type as string;\n\n  if (ptype === \"function_call\" || ptype === \"custom_tool_call\") {\n    return { text: \"\", thinking: \"\", tools: capToolPayload(payload.arguments) };\n  }\n  if (ptype === \"function_call_output\" || ptype === \"custom_tool_call_output\") {\n    return { text: \"\", thinking: \"\", tools: capToolPayload(payload.output) };\n  }\n  if (ptype === \"reasoning\") {\n    return { text: \"\", thinking: extractCodexReasoning(payload), tools: \"\" };\n  }\n  if (ptype === \"message\") {\n    const role = payload.role;\n    if (role !== \"user\" && role !== \"assistant\") return emptySearchDocument();\n    return { text: extractCodexText(payload.content), thinking: \"\", tools: \"\" };\n  }\n  return emptySearchDocument();\n}\n\n// Codex reasoning carries its text under `summary` (and sometimes `content`),\n// each a list of {type, text} blocks. Never a signature — there isn't one here,\n// and on the Claude side the thinking signature is a base64 crypto blob that is\n// pure noise in a search index.\nfunction extractCodexReasoning(payload: Record<string, unknown>): string {\n  const parts: string[] = [];\n  for (const key of [\"summary\", \"content\"] as const) {\n    const blocks = payload[key];\n    if (!Array.isArray(blocks)) continue;\n    for (const block of blocks) {\n      if (typeof block === \"string\") parts.push(block);\n      else if (typeof block?.text === \"string\") parts.push(block.text);\n    }\n  }\n  return parts.filter(Boolean).join(SEP);\n}\n\nfunction extractCodexText(content: unknown): string {\n  if (typeof content === \"string\") return cleanSystemTags(content);\n  if (!Array.isArray(content)) return \"\";\n  const parts: string[] = [];\n  for (const item of content) {\n    if (typeof item === \"string\") {\n      const cleaned = cleanSystemTags(item);\n      if (cleaned) parts.push(cleaned);\n      continue;\n    }\n    const t = item?.type;\n    if (\n      (t === \"input_text\" || t === \"output_text\" || t === \"text\") &&\n      typeof item.text === \"string\"\n    ) {\n      const cleaned = cleanSystemTags(item.text);\n      if (cleaned) parts.push(cleaned);\n    }\n  }\n  return parts.join(SEP);\n}\n","import type { ContentTier } from \"./types\";\n\nexport const DEFAULT_TIERS: Record<string, ContentTier> = {\n  standard: { name: \"standard\", previewMax: 200, snippetMax: 5_000 },\n  full: { name: \"full\", previewMax: 1_200, snippetMax: 50_000 },\n};\n\nexport function resolveTier(\n  tierName: string,\n  customTiers?: Record<string, ContentTier>,\n): ContentTier {\n  const tier = customTiers?.[tierName] ?? DEFAULT_TIERS[tierName];\n  if (!tier) {\n    throw new Error(\n      `Unknown tier \"${tierName}\". Available: ${Object.keys({ ...DEFAULT_TIERS, ...customTiers }).join(\", \")}`,\n    );\n  }\n  return tier;\n}\n","import Database from \"better-sqlite3\";\nimport { mkdirSync } from \"fs\";\nimport { dirname } from \"path\";\nimport { getLogger } from \"../logger\";\nimport { runMigrations } from \"./migrations\";\n\nexport type DB = Database.Database;\n\n// Open (creating if needed) the SQLite index at dbPath, apply WAL pragmas, and\n// run migrations. \":memory:\" is supported for tests.\nexport function openDatabase(dbPath: string): DB {\n  if (dbPath !== \":memory:\") {\n    mkdirSync(dirname(dbPath), { recursive: true });\n  }\n\n  let db: DB;\n  try {\n    db = new Database(dbPath);\n  } catch (err) {\n    if (isNativeBindingFailure(err)) throw nativeBindingError(err, dbPath);\n    throw err;\n  }\n\n  db.pragma(\"journal_mode = WAL\");\n  db.pragma(\"synchronous = NORMAL\");\n  db.pragma(\"temp_store = MEMORY\");\n  db.pragma(\"foreign_keys = ON\");\n  // Let a reader briefly wait out a concurrent indexing write instead of failing\n  // immediately with SQLITE_BUSY. Operational resilience only — search recall is\n  // unaffected.\n  db.pragma(\"busy_timeout = 5000\");\n\n  runMigrations(db);\n\n  getLogger().debug({ dbPath }, \"db: opened\");\n  return db;\n}\n\n// better-sqlite3 is a native addon, and `require()` of it succeeds even when its\n// binary is absent — the JS entry point loads fine and the addon is only touched\n// when a Database is constructed. So a broken install stays invisible until this\n// exact line, then fails with an opaque list of candidate .node paths that reads\n// like an ABI mismatch and sends people chasing Node versions.\n//\n// It usually isn't an ABI mismatch: the path in the message is normally correct\n// for the running Node, and the file simply was never produced.\nfunction isNativeBindingFailure(err: unknown): boolean {\n  const message = err instanceof Error ? err.message : String(err);\n  return /could not locate the bindings file|NODE_MODULE_VERSION|was compiled against|\\.node['\"\\s]/i.test(\n    message,\n  );\n}\n\nfunction nativeBindingError(err: unknown, dbPath: string): Error {\n  const detail = err instanceof Error ? err.message : String(err);\n  return new Error(\n    [\n      `Could not load better-sqlite3's native binary, so the persistent index at ${dbPath} cannot be opened.`,\n      \"This usually means the binary was never built or downloaded — not that your Node version is wrong.\",\n      \"\",\n      \"Try, in order:\",\n      \"  1. npm rebuild better-sqlite3\",\n      \"  2. rm -rf node_modules && npm install\",\n      \"     (npm 12 blocks package install scripts by default; approve better-sqlite3 if asked)\",\n      \"  3. Run without SQLite entirely: new ConversationScanner({ persistent: false })\",\n      \"     or pass --no-persist on the CLI. Search falls back to the in-memory index.\",\n      \"\",\n      `Original error: ${detail}`,\n    ].join(\"\\n\"),\n  );\n}\n","// Persistent index schema for @threadbase-sh/scanner.\n//\n// Embedded as a string (not a sibling .sql file) so it survives tsup bundling\n// into dist/ without runtime file I/O.\n//\n// One JSONL file == one conversation, so conversation_files.id maps 1:1 to\n// conversations.file_id.\n//\n// NOTE: session_id is intentionally NOT unique. parseMeta() falls back to the\n// file's basename when a line carries no sessionId, and resumed/subagent\n// sessions can repeat a sessionId across files. The stable unique key is the\n// file's absolute_path (and conversations.file_id).\n\n// Bumped whenever DDL below changes; drives migrations.ts via PRAGMA user_version.\n// v4: added the scanned_dirs table (dir-mtime discovery gate). runMigrations()\n// early-returns when the stored user_version >= SCHEMA_VERSION, so a new table\n// in SCHEMA_SQL is only reached on an existing DB if this number is bumped —\n// otherwise every DB already at v3 skips the migration and never gets the table.\n// v5: FTS body split from one `content` column into text/thinking/tools, fed by\n// the tail-biased search document instead of meta.contentSnippet.\n// v6: subagent_id + parent_session_uuid — a subagent transcript's own identity,\n// which sessionId cannot carry (it holds the PARENT's id on a sidechain).\n// v7: reindex only — Codex previews/titles/counts no longer include the\n// AGENTS.md turn Codex prepends as the first `user` message.\n// v8: import-provenance flags on conversations (is_imported_from_*).\n// v9: rename stored provider `cursor-cli` → `cursor`.\nexport const SCHEMA_VERSION = 9;\n\nexport const SCHEMA_SQL = `\nCREATE TABLE IF NOT EXISTS conversation_files (\n  id INTEGER PRIMARY KEY AUTOINCREMENT,\n\n  absolute_path TEXT NOT NULL UNIQUE,\n  parent_dir TEXT NOT NULL,\n  file_name TEXT NOT NULL,\n\n  account TEXT NOT NULL DEFAULT 'default',\n\n  size_bytes INTEGER NOT NULL DEFAULT 0,\n  mtime_ms INTEGER NOT NULL DEFAULT 0,\n\n  last_indexed_offset INTEGER NOT NULL DEFAULT 0,\n  last_indexed_line INTEGER NOT NULL DEFAULT 0,\n\n  reducer_state TEXT,\n\n  content_fingerprint TEXT,\n\n  status TEXT NOT NULL DEFAULT 'active',\n\n  last_indexed_at TEXT,\n  created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,\n  updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,\n  deleted_at TEXT\n);\n\nCREATE INDEX IF NOT EXISTS idx_conversation_files_status ON conversation_files(status);\nCREATE INDEX IF NOT EXISTS idx_conversation_files_parent_dir ON conversation_files(parent_dir);\nCREATE INDEX IF NOT EXISTS idx_conversation_files_account ON conversation_files(account);\n\nCREATE TABLE IF NOT EXISTS conversations (\n  id INTEGER PRIMARY KEY AUTOINCREMENT,\n\n  file_id INTEGER NOT NULL UNIQUE,\n\n  source_path TEXT NOT NULL UNIQUE,\n  -- Which provider produced this row. Canonical identity is (provider,\n  -- source_path); session_id stays non-unique across providers too.\n  provider TEXT NOT NULL DEFAULT 'claude-code',\n  kind TEXT,\n  external_session_id TEXT,\n  session_id TEXT NOT NULL,\n  session_name TEXT,\n\n  project_path TEXT,\n  project_name TEXT,\n  account TEXT NOT NULL DEFAULT 'default',\n  branch TEXT,\n\n  preview TEXT,\n  content_snippet TEXT,\n\n  message_count INTEGER NOT NULL DEFAULT 0,\n  -- Count of messages parseConversation() produces (broader than message_count;\n  -- includes tool_use-only and thinking-only lines). The total for bounded paging.\n  page_message_count INTEGER NOT NULL DEFAULT 0,\n  last_message_sender TEXT NOT NULL DEFAULT 'user',\n  timestamp TEXT,\n\n  -- Monotonic write counter; the highest value is the most recently indexed\n  -- row. Drives last-writer-wins resolution for shared session_ids (matching\n  -- the in-memory sessionId map), at the sub-second precision updated_at lacks.\n  index_seq INTEGER NOT NULL DEFAULT 0,\n\n  first_sent_at TEXT,\n  first_sent_text TEXT,\n\n  last_sent_at TEXT,\n  last_sent_text TEXT,\n\n  model TEXT,\n  is_subagent INTEGER NOT NULL DEFAULT 0,\n  -- The parent's JSONL PATH (matched against source_path), not an id.\n  parent_session_id TEXT,\n  -- The subagent's own id (Claude agentId), and the parent's session UUID.\n  subagent_id TEXT,\n  parent_session_uuid TEXT,\n  is_teammate INTEGER NOT NULL DEFAULT 0,\n  team_name TEXT,\n  tool_names_json TEXT,\n  last_prompt TEXT,\n\n  is_imported_from_claude INTEGER NOT NULL DEFAULT 0,\n  is_imported_from_codex INTEGER NOT NULL DEFAULT 0,\n  is_imported_from_cursor INTEGER NOT NULL DEFAULT 0,\n\n  status TEXT NOT NULL DEFAULT 'active',\n\n  created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,\n  updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,\n\n  FOREIGN KEY (file_id) REFERENCES conversation_files(id)\n);\n\nCREATE INDEX IF NOT EXISTS idx_conversations_session_id ON conversations(session_id);\nCREATE INDEX IF NOT EXISTS idx_conversations_provider_session ON conversations(provider, session_id);\nCREATE INDEX IF NOT EXISTS idx_conversations_provider_recent ON conversations(provider, timestamp DESC);\nCREATE INDEX IF NOT EXISTS idx_conversations_provider_project_branch ON conversations(provider, project_path, branch);\nCREATE INDEX IF NOT EXISTS idx_conversations_recent ON conversations(timestamp DESC);\nCREATE INDEX IF NOT EXISTS idx_conversations_project_recent ON conversations(project_path, timestamp DESC);\nCREATE INDEX IF NOT EXISTS idx_conversations_project_branch_recent ON conversations(project_path, branch, timestamp DESC);\nCREATE INDEX IF NOT EXISTS idx_conversations_account_recent ON conversations(account, timestamp DESC);\nCREATE INDEX IF NOT EXISTS idx_conversations_subagent_recent ON conversations(is_subagent, timestamp DESC);\nCREATE INDEX IF NOT EXISTS idx_conversations_team_recent ON conversations(team_name, timestamp DESC);\n\n-- Full-text search index over conversation body + metadata. Kept separate from\n-- the metadata tables so list-screen queries stay small and fast. One FTS row\n-- per conversation, replaced on each upsert.\n--\n-- The row's rowid IS conversation_files.id. That is load-bearing, not cosmetic:\n-- FTS5's query planner only handles MATCH, rowid and rank, so any other\n-- constraint (including a source_path equality on an UNINDEXED column) has no\n-- index and linear-scans the whole table. At ~128 KB of body per row that would\n-- mean scanning the entire corpus on every append. Look rows up by rowid.\n-- source_path stays stored-but-UNINDEXED so a search hit can resolve back to a\n-- conversations row.\n--\n-- Body is three columns, not one: text > thinking > tools priority has to\n-- survive an append (a new user message belongs in the text column, not after\n-- the tool output already written). They are deliberately NOT concatenated into\n-- a fourth column - that would double-weight body hits and inflate bm25 length.\nCREATE VIRTUAL TABLE IF NOT EXISTS conversation_messages_fts USING fts5(\n  source_path UNINDEXED,\n  text,\n  thinking,\n  tools,\n  project_name,\n  session_id,\n  session_name,\n  account,\n  model,\n  branch,\n  tool_names,\n  tokenize = 'unicode61'\n);\n\n-- Seek index for large conversations: every N messages, record the byte offset\n-- where the next message's line begins plus the parser's cross-line state\n-- (pending tool_use blocks, team info) needed to resume an equivalent parse\n-- from that point. Lets getConversationPage() read a window near the end of a\n-- huge file without parsing from byte 0.\nCREATE TABLE IF NOT EXISTS message_checkpoints (\n  id INTEGER PRIMARY KEY AUTOINCREMENT,\n  source_path TEXT NOT NULL,\n  message_index INTEGER NOT NULL,\n  byte_offset INTEGER NOT NULL,\n  line_number INTEGER NOT NULL,\n  parser_state TEXT NOT NULL,\n  created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP\n);\n\nCREATE INDEX IF NOT EXISTS idx_message_checkpoints_lookup\n  ON message_checkpoints(source_path, message_index);\n\n-- Per-directory mtime watermark for the discovery dir-mtime gate (skips the\n-- glob for a directory whose file/subdir SET hasn't changed; never skips\n-- per-file classify()). One row for a profile's projectsDir itself (parent_root\n-- IS NULL) and one row per immediate project subdirectory discovered under it\n-- (parent_root = the projectsDir path). has_nested marks a project dir known to\n-- contain files below its own top level (e.g. subagents/) — those always\n-- re-glob regardless of mtime, since a project-dir-level watermark can't see a\n-- change two levels down.\nCREATE TABLE IF NOT EXISTS scanned_dirs (\n  path TEXT PRIMARY KEY,\n  parent_root TEXT,\n  mtime_ms INTEGER NOT NULL,\n  has_nested INTEGER NOT NULL DEFAULT 0,\n  updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP\n);\n\nCREATE INDEX IF NOT EXISTS idx_scanned_dirs_parent_root ON scanned_dirs(parent_root);\n`;\n","import type { Database } from \"better-sqlite3\";\nimport { getLogger } from \"../logger\";\nimport { SCHEMA_SQL, SCHEMA_VERSION } from \"./schema\";\n\n// Minimal migration runner gated by PRAGMA user_version. The whole schema uses\n// CREATE TABLE/INDEX IF NOT EXISTS, so a fresh DB and an up-to-date DB both\n// no-op safely. When SCHEMA_VERSION bumps in the future, add ALTER statements\n// keyed on the stored version before stamping the new version.\nexport function runMigrations(db: Database): void {\n  const current = db.pragma(\"user_version\", { simple: true }) as number;\n  if (current >= SCHEMA_VERSION) return;\n\n  const log = getLogger();\n  log.info({ from: current, to: SCHEMA_VERSION }, \"migrations: applying\");\n\n  // v1 → v2: add provider columns to a pre-existing conversations table BEFORE\n  // running SCHEMA_SQL, because SCHEMA_SQL now creates indexes on those columns.\n  // CREATE TABLE IF NOT EXISTS can't add columns, so ALTER the existing one.\n  // Non-destructive: existing rows keep their data and default to 'claude-code'.\n  // Guarded on table existence so a fresh DB (table created by SCHEMA_SQL below)\n  // skips this entirely.\n  if (current >= 1 && current < 2 && tableExists(db, \"conversations\")) {\n    for (const [col, ddl] of [\n      [\n        \"provider\",\n        // Keep the historical DEFAULT 'threadbase' — v2→v3 below updates these rows.\n        \"ALTER TABLE conversations ADD COLUMN provider TEXT NOT NULL DEFAULT 'threadbase'\",\n      ],\n      [\"kind\", \"ALTER TABLE conversations ADD COLUMN kind TEXT\"],\n      [\"external_session_id\", \"ALTER TABLE conversations ADD COLUMN external_session_id TEXT\"],\n    ] as const) {\n      if (!hasColumn(db, \"conversations\", col)) db.exec(ddl);\n    }\n  }\n\n  // v2 → v3: rename provider 'threadbase' → 'claude-code'.\n  if (current >= 1 && current < 3 && tableExists(db, \"conversations\")) {\n    db.exec(\"UPDATE conversations SET provider = 'claude-code' WHERE provider = 'threadbase'\");\n  }\n\n  // v4 → v5: the FTS body split from a single `content` column (fed by the 5 KB\n  // head-biased meta.contentSnippet) into text/thinking/tools columns fed by the\n  // tail-biased search document. CREATE VIRTUAL TABLE IF NOT EXISTS cannot\n  // reshape an existing table, so drop it and let SCHEMA_SQL recreate it.\n  //\n  // Then force every known file to reindex from byte 0. classify() already\n  // returns \"reindex\" whenever last_indexed_offset === 0, so resetting the\n  // cursor is the entire trigger. Without it an unchanged conversation would\n  // keep its old FTS row forever — nothing would ever append to it, so nothing\n  // would rebuild it.\n  //\n  // Deliberately cheap: no JSONL is read here. Opening the database must stay in\n  // milliseconds; the actual re-parse happens in the next indexAll (newest files\n  // first), not inside a pragma migration.\n  if (current >= 1 && current < 5) {\n    db.exec(\"DROP TABLE IF EXISTS conversation_messages_fts\");\n    // A database old enough to still be at v1 can predate some cursor columns,\n    // and CREATE TABLE IF NOT EXISTS below won't add them — so reset only what\n    // this database actually has.\n    if (tableExists(db, \"conversation_files\")) {\n      const assignments: string[] = [];\n      if (hasColumn(db, \"conversation_files\", \"last_indexed_offset\")) {\n        assignments.push(\"last_indexed_offset = 0\");\n      }\n      if (hasColumn(db, \"conversation_files\", \"last_indexed_line\")) {\n        assignments.push(\"last_indexed_line = 0\");\n      }\n      if (hasColumn(db, \"conversation_files\", \"reducer_state\")) {\n        assignments.push(\"reducer_state = NULL\");\n      }\n      if (assignments.length > 0) {\n        db.exec(`UPDATE conversation_files SET ${assignments.join(\", \")}`);\n      }\n    }\n  }\n\n  // v5 → v6: subagent identity columns. CREATE TABLE IF NOT EXISTS cannot add\n  // columns to the existing table, so ALTER first (before SCHEMA_SQL, matching\n  // the v1 → v2 block). Non-destructive: existing rows default to NULL.\n  //\n  // Then force a reindex, because these two fields are folded out of the JSONL\n  // — an already-indexed subagent would otherwise keep NULL forever, since\n  // nothing appends to a finished transcript and nothing would rebuild it.\n  // classify() returns \"reindex\" whenever last_indexed_offset === 0, so\n  // resetting the cursor is the whole trigger. No JSONL is read here: the\n  // re-parse happens in the next indexAll, not inside a pragma migration.\n  if (current >= 1 && current < 6 && tableExists(db, \"conversations\")) {\n    for (const [col, ddl] of [\n      [\"subagent_id\", \"ALTER TABLE conversations ADD COLUMN subagent_id TEXT\"],\n      [\"parent_session_uuid\", \"ALTER TABLE conversations ADD COLUMN parent_session_uuid TEXT\"],\n    ] as const) {\n      if (!hasColumn(db, \"conversations\", col)) db.exec(ddl);\n    }\n    if (tableExists(db, \"conversation_files\")) {\n      const assignments: string[] = [];\n      if (hasColumn(db, \"conversation_files\", \"last_indexed_offset\")) {\n        assignments.push(\"last_indexed_offset = 0\");\n      }\n      if (hasColumn(db, \"conversation_files\", \"last_indexed_line\")) {\n        assignments.push(\"last_indexed_line = 0\");\n      }\n      if (hasColumn(db, \"conversation_files\", \"reducer_state\")) {\n        assignments.push(\"reducer_state = NULL\");\n      }\n      if (assignments.length > 0) {\n        db.exec(`UPDATE conversation_files SET ${assignments.join(\", \")}`);\n      }\n    }\n  }\n\n  // v6 → v7: no schema change — a reindex only. Codex previews, titles and\n  // message counts previously included the AGENTS.md / sandbox preamble Codex\n  // prepends as the first `user` turn. All three are folded out of the JSONL\n  // into reducer_state, so an already-indexed rollout would keep its old\n  // \"# AGENTS.md instructions for …\" preview forever: nothing appends to a\n  // finished rollout, so nothing would rebuild the row. Resetting the cursor is\n  // the whole trigger (classify() returns \"reindex\" at offset 0); no JSONL is\n  // read here, the re-parse happens in the next indexAll.\n  if (current >= 1 && current < 7 && tableExists(db, \"conversation_files\")) {\n    const assignments: string[] = [];\n    if (hasColumn(db, \"conversation_files\", \"last_indexed_offset\")) {\n      assignments.push(\"last_indexed_offset = 0\");\n    }\n    if (hasColumn(db, \"conversation_files\", \"last_indexed_line\")) {\n      assignments.push(\"last_indexed_line = 0\");\n    }\n    if (hasColumn(db, \"conversation_files\", \"reducer_state\")) {\n      assignments.push(\"reducer_state = NULL\");\n    }\n    if (assignments.length > 0) {\n      db.exec(`UPDATE conversation_files SET ${assignments.join(\", \")}`);\n    }\n  }\n\n  // v7 → v8: import provenance columns. Cursor agent-transcripts can be copies\n  // of Claude or Codex sessions; the flags are folded out of the JSONL, so an\n  // already-indexed Cursor file would keep 0 forever without a reindex.\n  if (current >= 1 && current < 8 && tableExists(db, \"conversations\")) {\n    for (const [col, ddl] of [\n      [\n        \"is_imported_from_claude\",\n        \"ALTER TABLE conversations ADD COLUMN is_imported_from_claude INTEGER NOT NULL DEFAULT 0\",\n      ],\n      [\n        \"is_imported_from_codex\",\n        \"ALTER TABLE conversations ADD COLUMN is_imported_from_codex INTEGER NOT NULL DEFAULT 0\",\n      ],\n      [\n        \"is_imported_from_cursor\",\n        \"ALTER TABLE conversations ADD COLUMN is_imported_from_cursor INTEGER NOT NULL DEFAULT 0\",\n      ],\n    ] as const) {\n      if (!hasColumn(db, \"conversations\", col)) db.exec(ddl);\n    }\n    if (tableExists(db, \"conversation_files\")) {\n      const assignments: string[] = [];\n      if (hasColumn(db, \"conversation_files\", \"last_indexed_offset\")) {\n        assignments.push(\"last_indexed_offset = 0\");\n      }\n      if (hasColumn(db, \"conversation_files\", \"last_indexed_line\")) {\n        assignments.push(\"last_indexed_line = 0\");\n      }\n      if (hasColumn(db, \"conversation_files\", \"reducer_state\")) {\n        assignments.push(\"reducer_state = NULL\");\n      }\n      if (assignments.length > 0) {\n        db.exec(\n          `UPDATE conversation_files SET ${assignments.join(\", \")}\n           WHERE id IN (SELECT file_id FROM conversations WHERE provider IN ('cursor', 'cursor-cli'))`,\n        );\n      }\n    }\n  }\n\n  // v8 → v9: wire name `cursor-cli` → `cursor`. Live PTY shipped the old name.\n  if (current >= 1 && current < 9 && tableExists(db, \"conversations\")) {\n    db.exec(`UPDATE conversations SET provider = 'cursor' WHERE provider = 'cursor-cli'`);\n  }\n\n  // Fresh DB and re-runs both no-op safely (CREATE ... IF NOT EXISTS). Creates\n  // any missing tables/indexes, including the new provider indexes.\n  db.exec(SCHEMA_SQL);\n\n  db.pragma(`user_version = ${SCHEMA_VERSION}`);\n}\n\nfunction tableExists(db: Database, table: string): boolean {\n  return (\n    db.prepare(\"SELECT name FROM sqlite_master WHERE type = 'table' AND name = ?\").get(table) !==\n    undefined\n  );\n}\n\nfunction hasColumn(db: Database, table: string, column: string): boolean {\n  const cols = db.prepare(`PRAGMA table_info(${table})`).all() as { name: string }[];\n  return cols.some((c) => c.name === column);\n}\n","import { readdir, stat } from \"fs/promises\";\nimport { dirname, join } from \"path\";\nimport { canonicalPath } from \"../canonical-path\";\nimport { type DiscoveredFile, discoverJsonlFiles } from \"../discovery\";\nimport { getLogger } from \"../logger\";\nimport type { ConversationFilesRepo } from \"./repositories/conversation-files.repo\";\nimport type { ScannedDirsRepo } from \"./repositories/scanned-dirs.repo\";\n\n// ponytail: full-reconcile backstop runs every Nth gated pass, ignoring all\n// watermarks, so a filesystem that doesn't honor directory mtimes (some\n// NFS/SMB mounts, a few atomic-replace editors) can't permanently hide a\n// missed add/remove. Bump this if that self-heal interval feels too slow for\n// a given deployment; there's no config surface for it yet.\nexport const FULL_RECONCILE_EVERY_N_SCANS = 20;\n\n// Discover JSONL files under each profile's projectsDir, skipping the glob for\n// a directory whose file/subdirectory SET hasn't changed since the last pass.\n//\n// The core invariant (see SCAN-OPTIMIZATION-PROMPT.md Stage 4): the gate only\n// ever skips the GLOB (which exists to catch added/removed files — an event\n// that bumps the containing directory's mtime). It never skips classify() for\n// an already-known file (which exists to catch content changes, e.g. an\n// append — an event that does NOT bump the directory's mtime). Every active\n// file previously indexed under a project dir is always included in the\n// returned list, glob or no glob, so index-engine.ts's deletion-reconcile\n// never mistakes a skipped-but-still-known file for a vanished one.\n//\n// Two-level watermark, matching the real ~/.claude/projects/ shape (one\n// project subdirectory per conversation history, sometimes with nested\n// subagent/workflow trees below that):\n//   - projectsDir itself: catches added/removed PROJECT DIRECTORIES.\n//   - each immediate project subdirectory: catches added/removed FILES\n//     directly in it. A project dir known to contain nested files (subagents/\n//     etc) always re-globs regardless of mtime — a project-dir-level\n//     watermark can't see a change two levels down, so it isn't trusted to\n//     skip those dirs. This still skips the glob for the common case: most\n//     project dirs are flat (session-uuid.jsonl directly inside).\nexport async function discoverJsonlFilesGated(\n  dirs: { projectsDir: string; account: string }[],\n  files: ConversationFilesRepo,\n  scannedDirs: ScannedDirsRepo,\n  options: { fullRescan?: boolean } = {},\n): Promise<DiscoveredFile[]> {\n  const log = getLogger();\n  if (options.fullRescan) {\n    return discoverJsonlFiles(dirs);\n  }\n\n  const results: DiscoveredFile[] = [];\n\n  for (const rawDir of dirs) {\n    const { account } = rawDir;\n    // Canonicalize: the reuse branch below compares these dir keys against\n    // parent_dir/scanned_dirs.path, which the repositories store canonically.\n    // Without this the has_nested/parent_dir lookups silently miss on Windows\n    // when a caller's projectsDir came in with the other separator style, and\n    // the caller's seen-set then loses those files to the deletion-reconcile.\n    const projectsDir = canonicalPath(rawDir.projectsDir);\n\n    const resolved = await resolveProjectDirs(projectsDir, scannedDirs);\n    if (resolved === null) continue; // projectsDir unreadable/vanished\n\n    for (const projectDir of resolved.entries) {\n      let dirStat: { mtimeMs: number };\n      try {\n        dirStat = await stat(projectDir);\n      } catch {\n        // Project dir vanished between listing and stat — drop its watermark;\n        // its previously-known files simply won't appear in this pass's\n        // result, so index-engine.ts's deletion-reconcile marks them deleted.\n        scannedDirs.remove(projectDir);\n        continue;\n      }\n\n      const watermark = scannedDirs.get(projectDir);\n      const canReuse =\n        watermark !== undefined &&\n        watermark.mtime_ms === dirStat.mtimeMs &&\n        watermark.has_nested === 0;\n\n      if (canReuse) {\n        const known = files.activePathsByParentDir(projectDir);\n        // A watermarked, unchanged dir must have had ≥1 indexed file when it was\n        // globbed. Zero known files means the watermark is out of sync with\n        // conversation_files — most often a race: another connection sharing this\n        // index.db committed the scanned_dirs watermark (during its own discovery)\n        // before it finished writing that dir's file rows, and we read in that\n        // window. Trusting the empty reuse would drop the dir's conversations from\n        // `discovered`, so the caller's deletion-reconcile (or a stale allActive)\n        // never surfaces them → 404. Fall through to the glob, which reads the\n        // real on-disk truth and re-indexes what's actually there.\n        if (known.length > 0) {\n          for (const row of known) {\n            results.push({ filePath: row.absolute_path, account: row.account });\n          }\n          continue;\n        }\n      }\n\n      const found = await discoverJsonlFiles([{ projectsDir: projectDir, account }]);\n      const hasNested = found.some((f) => dirnameOf(f.filePath) !== projectDir);\n      scannedDirs.upsert(projectDir, projectsDir, dirStat.mtimeMs, hasNested);\n      results.push(...found);\n    }\n\n    // Commit the root watermark only after every project dir under it has been\n    // processed without throwing. Committing it earlier (e.g. right after the\n    // readdir) would let a crash mid-loop leave un-globbed project dirs with no\n    // scanned_dirs row — the next pass's root-reuse would then return only the\n    // dirs that DID get a row, silently dropping the crashed-out dirs' files\n    // from `seen` and mass-deleting their conversations.\n    if (resolved.commitRoot) {\n      scannedDirs.upsert(projectsDir, null, resolved.commitRoot.mtimeMs, false);\n      const seen = new Set(resolved.entries);\n      for (const known of scannedDirs.childrenOf(projectsDir)) {\n        if (!seen.has(known.path)) scannedDirs.remove(known.path);\n      }\n    }\n  }\n\n  log.debug(\n    { totalFiles: results.length, dirs: dirs.length },\n    \"dir-watermark: gated discovery complete\",\n  );\n  return results;\n}\n\ninterface ResolvedProjectDirs {\n  entries: string[];\n  // Present only when projectsDir was actually re-listed this pass (root\n  // watermark was stale/missing) — the caller commits it after the per-dir\n  // loop succeeds. Absent when the root watermark was reused as-is (nothing\n  // new to commit).\n  commitRoot?: { mtimeMs: number };\n}\n\n// The list of immediate project subdirectories under projectsDir, reusing the\n// stored list when projectsDir's own mtime hasn't moved (no dirs added or\n// removed), otherwise re-listing (but NOT yet persisting — see commitRoot).\n// Returns null if projectsDir itself can't be read (e.g. a profile pointing at\n// a not-yet-created config dir).\nasync function resolveProjectDirs(\n  projectsDir: string,\n  scannedDirs: ScannedDirsRepo,\n): Promise<ResolvedProjectDirs | null> {\n  let rootStat: { mtimeMs: number };\n  try {\n    rootStat = await stat(projectsDir);\n  } catch {\n    return null;\n  }\n\n  const rootWatermark = scannedDirs.get(projectsDir);\n  if (rootWatermark !== undefined && rootWatermark.mtime_ms === rootStat.mtimeMs) {\n    return { entries: scannedDirs.childrenOf(projectsDir).map((row) => row.path) };\n  }\n\n  let entries: string[];\n  try {\n    entries = (await readdir(projectsDir, { withFileTypes: true }))\n      .filter((e) => e.isDirectory())\n      .map((e) => joinPath(projectsDir, e.name));\n  } catch {\n    return null;\n  }\n\n  return { entries, commitRoot: { mtimeMs: rootStat.mtimeMs } };\n}\n\n// Platform-aware: the paths threaded through here are canonical (native\n// separator on Windows), so a hardcoded \"/\" split would read the whole path as\n// the dirname and mis-derive has_nested.\nfunction dirnameOf(filePath: string): string {\n  return dirname(filePath);\n}\n\nfunction joinPath(dir: string, name: string): string {\n  return join(dir, name);\n}\n","import type { Database } from \"better-sqlite3\";\nimport { canonicalPath } from \"../../canonical-path\";\nimport type { ConvReducerState } from \"../conversation-reducer\";\n\nexport interface Checkpoint {\n  messageIndex: number;\n  byteOffset: number;\n  lineNumber: number;\n  state: ConvReducerState;\n}\n\ninterface CheckpointRow {\n  message_index: number;\n  byte_offset: number;\n  line_number: number;\n  parser_state: string;\n}\n\n// Stores periodic seek points for a conversation so a page near the end of a\n// large file can be read without parsing from byte 0.\nexport class CheckpointsRepo {\n  constructor(private db: Database) {}\n\n  replaceAll(sourcePath: string, checkpoints: Checkpoint[]): void {\n    const path = canonicalPath(sourcePath);\n    const tx = this.db.transaction(() => {\n      this.db.prepare(\"DELETE FROM message_checkpoints WHERE source_path = ?\").run(path);\n      const insert = this.db.prepare(\n        `INSERT INTO message_checkpoints\n           (source_path, message_index, byte_offset, line_number, parser_state)\n         VALUES (?, ?, ?, ?, ?)`,\n      );\n      for (const c of checkpoints) {\n        insert.run(path, c.messageIndex, c.byteOffset, c.lineNumber, JSON.stringify(c.state));\n      }\n    });\n    tx();\n  }\n\n  // Insert checkpoints without touching existing rows. Appends never invalidate\n  // the chain covering the immutable prefix (Kafka sparse-index style); rows are\n  // only ever removed on truncation/replace or deletion.\n  append(sourcePath: string, checkpoints: Checkpoint[]): void {\n    const path = canonicalPath(sourcePath);\n    const tx = this.db.transaction(() => {\n      const insert = this.db.prepare(\n        `INSERT INTO message_checkpoints\n           (source_path, message_index, byte_offset, line_number, parser_state)\n         VALUES (?, ?, ?, ?, ?)`,\n      );\n      for (const c of checkpoints) {\n        insert.run(path, c.messageIndex, c.byteOffset, c.lineNumber, JSON.stringify(c.state));\n      }\n    });\n    tx();\n  }\n\n  // The latest checkpoint at or before `messageIndex`, or null if none (read\n  // from the file start). Lets a page seek to the nearest prior anchor.\n  floor(sourcePath: string, messageIndex: number): Checkpoint | null {\n    const row = this.db\n      .prepare(\n        `SELECT message_index, byte_offset, line_number, parser_state\n         FROM message_checkpoints\n         WHERE source_path = ? AND message_index <= ?\n         ORDER BY message_index DESC LIMIT 1`,\n      )\n      .get(canonicalPath(sourcePath), messageIndex) as CheckpointRow | undefined;\n    return row ? toCheckpoint(row) : null;\n  }\n\n  // The highest-index checkpoint for a file, or null if none. The resume point\n  // for extending the chain after an append.\n  last(sourcePath: string): Checkpoint | null {\n    const row = this.db\n      .prepare(\n        `SELECT message_index, byte_offset, line_number, parser_state\n         FROM message_checkpoints\n         WHERE source_path = ?\n         ORDER BY message_index DESC LIMIT 1`,\n      )\n      .get(canonicalPath(sourcePath)) as CheckpointRow | undefined;\n    return row ? toCheckpoint(row) : null;\n  }\n\n  count(sourcePath: string): number {\n    return (\n      this.db\n        .prepare(\"SELECT COUNT(*) AS n FROM message_checkpoints WHERE source_path = ?\")\n        .get(canonicalPath(sourcePath)) as { n: number }\n    ).n;\n  }\n\n  remove(sourcePath: string): void {\n    this.db\n      .prepare(\"DELETE FROM message_checkpoints WHERE source_path = ?\")\n      .run(canonicalPath(sourcePath));\n  }\n}\n\nfunction toCheckpoint(row: CheckpointRow): Checkpoint {\n  return {\n    messageIndex: row.message_index,\n    byteOffset: row.byte_offset,\n    lineNumber: row.line_number,\n    state: JSON.parse(row.parser_state) as ConvReducerState,\n  };\n}\n","import type { Database } from \"better-sqlite3\";\nimport { basename, dirname } from \"path\";\nimport { canonicalPath } from \"../../canonical-path\";\n\n// One tracked JSONL source file + its incremental indexing cursor.\nexport interface FileRow {\n  id: number;\n  absolute_path: string;\n  parent_dir: string;\n  file_name: string;\n  account: string;\n  size_bytes: number;\n  mtime_ms: number;\n  last_indexed_offset: number;\n  last_indexed_line: number;\n  reducer_state: string | null;\n  content_fingerprint: string | null;\n  status: string;\n  last_indexed_at: string | null;\n}\n\nexport class ConversationFilesRepo {\n  constructor(private db: Database) {}\n\n  getByPath(absolutePath: string): FileRow | undefined {\n    return this.db\n      .prepare(\"SELECT * FROM conversation_files WHERE absolute_path = ?\")\n      .get(canonicalPath(absolutePath)) as FileRow | undefined;\n  }\n\n  // Insert a freshly-discovered file at offset 0; returns its row id. Existing\n  // path is left untouched (returns the existing id) so a re-discovery is safe.\n  //\n  // absolute_path/parent_dir are stored canonicalized so a caller that built the\n  // path with the native separator (watcher, path.join) and one that got it from\n  // fast-glob (forward slashes, even on Windows) land on the same row instead of\n  // inserting a duplicate.\n  ensure(absolutePath: string, account: string): number {\n    const canonical = canonicalPath(absolutePath);\n    const existing = this.getByPath(canonical);\n    if (existing) return existing.id;\n\n    const info = this.db\n      .prepare(\n        `INSERT INTO conversation_files (absolute_path, parent_dir, file_name, account)\n         VALUES (?, ?, ?, ?)`,\n      )\n      .run(canonical, dirname(canonical), basename(canonical), account);\n    return Number(info.lastInsertRowid);\n  }\n\n  // Advance the cursor + persisted reducer state after a successful index pass.\n  updateCursor(\n    id: number,\n    fields: {\n      sizeBytes: number;\n      mtimeMs: number;\n      offset: number;\n      line: number;\n      reducerState: string | null;\n      fingerprint: string | null;\n      status?: string;\n    },\n  ): void {\n    this.db\n      .prepare(\n        `UPDATE conversation_files\n         SET size_bytes = ?, mtime_ms = ?, last_indexed_offset = ?, last_indexed_line = ?,\n             reducer_state = ?, content_fingerprint = ?, status = ?,\n             last_indexed_at = CURRENT_TIMESTAMP, updated_at = CURRENT_TIMESTAMP\n         WHERE id = ?`,\n      )\n      .run(\n        fields.sizeBytes,\n        fields.mtimeMs,\n        fields.offset,\n        fields.line,\n        fields.reducerState,\n        fields.fingerprint,\n        fields.status ?? \"active\",\n        id,\n      );\n  }\n\n  // Reset the cursor to 0 for a truncated/replaced file before a full reindex.\n  resetCursor(id: number): void {\n    this.db\n      .prepare(\n        `UPDATE conversation_files\n         SET last_indexed_offset = 0, last_indexed_line = 0, reducer_state = NULL,\n             status = 'needs_reindex', updated_at = CURRENT_TIMESTAMP\n         WHERE id = ?`,\n      )\n      .run(id);\n  }\n\n  setStatus(id: number, status: string): void {\n    const deletedAt = status === \"deleted\" ? \"CURRENT_TIMESTAMP\" : \"deleted_at\";\n    this.db\n      .prepare(\n        `UPDATE conversation_files\n         SET status = ?, deleted_at = ${deletedAt}, updated_at = CURRENT_TIMESTAMP\n         WHERE id = ?`,\n      )\n      .run(status, id);\n  }\n\n  allActivePaths(): string[] {\n    const rows = this.db\n      .prepare(\"SELECT absolute_path FROM conversation_files WHERE status != 'deleted'\")\n      .all() as { absolute_path: string }[];\n    return rows.map((r) => r.absolute_path);\n  }\n\n  // Active file paths belonging to any of the given accounts. Backs the\n  // deletion-reconcile so a scan that covered only some accounts can't mark\n  // another account's files deleted (they live in the same shared index.db but\n  // a different profile owns them). Returns [] for an empty account list.\n  activePathsByAccounts(accounts: string[]): string[] {\n    if (accounts.length === 0) return [];\n    const placeholders = accounts.map(() => \"?\").join(\", \");\n    const rows = this.db\n      .prepare(\n        `SELECT absolute_path FROM conversation_files\n         WHERE status != 'deleted' AND account IN (${placeholders})`,\n      )\n      .all(...accounts) as { absolute_path: string }[];\n    return rows.map((r) => r.absolute_path);\n  }\n\n  // Active files whose immediate parent is exactly parentDir (no nested\n  // subdirectories). Backs the dir-mtime gate's reuse path: a project dir with\n  // an unchanged mtime and no nested files can skip the glob entirely.\n  activePathsByParentDir(parentDir: string): { absolute_path: string; account: string }[] {\n    return this.db\n      .prepare(\n        \"SELECT absolute_path, account FROM conversation_files WHERE parent_dir = ? AND status != 'deleted'\",\n      )\n      .all(canonicalPath(parentDir)) as { absolute_path: string; account: string }[];\n  }\n}\n","import type { Database } from \"better-sqlite3\";\nimport { canonicalPath } from \"../../canonical-path\";\nimport { CLAUDE_CODE_PROVIDER } from \"../../providers/provider\";\nimport type { ConversationMeta, MessageSender, ProviderName } from \"../../types\";\n\nexport interface ConversationRow {\n  id: number;\n  file_id: number;\n  source_path: string;\n  provider: string;\n  kind: string | null;\n  external_session_id: string | null;\n  session_id: string;\n  session_name: string | null;\n  project_path: string | null;\n  project_name: string | null;\n  account: string;\n  branch: string | null;\n  preview: string | null;\n  content_snippet: string | null;\n  message_count: number;\n  page_message_count: number;\n  last_message_sender: string;\n  timestamp: string | null;\n  first_sent_at: string | null;\n  first_sent_text: string | null;\n  last_sent_at: string | null;\n  last_sent_text: string | null;\n  model: string | null;\n  is_subagent: number;\n  parent_session_id: string | null;\n  subagent_id: string | null;\n  parent_session_uuid: string | null;\n  is_teammate: number;\n  team_name: string | null;\n  tool_names_json: string | null;\n  last_prompt: string | null;\n  is_imported_from_claude: number;\n  is_imported_from_codex: number;\n  is_imported_from_cursor: number;\n  status: string;\n}\n\n// Row -> ConversationMeta. Must reproduce the exact in-memory shape so the\n// persistent and legacy paths return identical ScanResult/SearchResult objects.\nexport function rowToMeta(row: ConversationRow): ConversationMeta {\n  return {\n    id: row.source_path,\n    filePath: row.source_path,\n    provider: (row.provider as ProviderName) ?? CLAUDE_CODE_PROVIDER,\n    kind: (row.kind as ConversationMeta[\"kind\"]) ?? undefined,\n    externalSessionId: row.external_session_id ?? undefined,\n    sessionId: row.session_id,\n    sessionName: row.session_name ?? \"\",\n    projectPath: row.project_path ?? \"\",\n    projectName: row.project_name ?? \"\",\n    account: row.account,\n    timestamp: row.timestamp ?? \"\",\n    messageCount: row.message_count,\n    lastMessageSender: row.last_message_sender as MessageSender,\n    preview: row.preview ?? \"\",\n    contentSnippet: row.content_snippet ?? \"\",\n    gitBranch: row.branch,\n    model: row.model,\n    isSubagent: row.is_subagent === 1,\n    parentSessionId: row.parent_session_id,\n    subagentId: row.subagent_id ?? undefined,\n    parentSessionUuid: row.parent_session_uuid ?? undefined,\n    isTeammate: row.is_teammate === 1,\n    teamName: row.team_name,\n    toolNames: row.tool_names_json ? (JSON.parse(row.tool_names_json) as string[]) : [],\n    firstMessage: row.first_sent_text\n      ? { text: row.first_sent_text, timestamp: row.first_sent_at ?? \"\" }\n      : null,\n    lastMessage: row.last_sent_text\n      ? { text: row.last_sent_text, timestamp: row.last_sent_at ?? \"\" }\n      : null,\n    lastPrompt: row.last_prompt ?? undefined,\n    ...(row.is_imported_from_claude === 1 ? { isImportedFromClaude: true } : {}),\n    ...(row.is_imported_from_codex === 1 ? { isImportedFromCodex: true } : {}),\n    ...(row.is_imported_from_cursor === 1 ? { isImportedFromCursor: true } : {}),\n  };\n}\n\nexport class ConversationsRepo {\n  constructor(private db: Database) {}\n\n  // Upsert by file_id (1 file = 1 conversation). Keyed on the unique file_id so\n  // a re-index overwrites the prior summary in place.\n  upsert(fileId: number, meta: ConversationMeta, pageMessageCount = meta.messageCount): void {\n    this.db\n      .prepare(\n        `INSERT INTO conversations (\n           file_id, source_path, provider, kind, external_session_id,\n           session_id, session_name, project_path, project_name,\n           account, branch, preview, content_snippet, message_count, page_message_count,\n           last_message_sender,\n           timestamp, index_seq, first_sent_at, first_sent_text, last_sent_at, last_sent_text,\n           model, is_subagent, parent_session_id, subagent_id, parent_session_uuid,\n           is_teammate, team_name, tool_names_json,\n           last_prompt, is_imported_from_claude, is_imported_from_codex,\n           is_imported_from_cursor, status, updated_at\n         ) VALUES (\n           @file_id, @source_path, @provider, @kind, @external_session_id,\n           @session_id, @session_name, @project_path, @project_name,\n           @account, @branch, @preview, @content_snippet, @message_count, @page_message_count,\n           @last_message_sender,\n           @timestamp,\n           (SELECT COALESCE(MAX(index_seq), 0) + 1 FROM conversations),\n           @first_sent_at, @first_sent_text, @last_sent_at, @last_sent_text,\n           @model, @is_subagent, @parent_session_id, @subagent_id, @parent_session_uuid,\n           @is_teammate, @team_name, @tool_names_json,\n           @last_prompt, @is_imported_from_claude, @is_imported_from_codex,\n           @is_imported_from_cursor, 'active', CURRENT_TIMESTAMP\n         )\n         ON CONFLICT(file_id) DO UPDATE SET\n           source_path = excluded.source_path,\n           provider = excluded.provider,\n           kind = excluded.kind,\n           external_session_id = excluded.external_session_id,\n           session_id = excluded.session_id,\n           session_name = excluded.session_name,\n           project_path = excluded.project_path,\n           project_name = excluded.project_name,\n           account = excluded.account,\n           branch = excluded.branch,\n           preview = excluded.preview,\n           content_snippet = excluded.content_snippet,\n           message_count = excluded.message_count,\n           page_message_count = excluded.page_message_count,\n           last_message_sender = excluded.last_message_sender,\n           timestamp = excluded.timestamp,\n           first_sent_at = excluded.first_sent_at,\n           first_sent_text = excluded.first_sent_text,\n           last_sent_at = excluded.last_sent_at,\n           last_sent_text = excluded.last_sent_text,\n           model = excluded.model,\n           is_subagent = excluded.is_subagent,\n           parent_session_id = excluded.parent_session_id,\n           subagent_id = excluded.subagent_id,\n           parent_session_uuid = excluded.parent_session_uuid,\n           is_teammate = excluded.is_teammate,\n           team_name = excluded.team_name,\n           tool_names_json = excluded.tool_names_json,\n           last_prompt = excluded.last_prompt,\n           is_imported_from_claude = excluded.is_imported_from_claude,\n           is_imported_from_codex = excluded.is_imported_from_codex,\n           is_imported_from_cursor = excluded.is_imported_from_cursor,\n           status = 'active',\n           index_seq = (SELECT COALESCE(MAX(index_seq), 0) + 1 FROM conversations),\n           updated_at = CURRENT_TIMESTAMP`,\n      )\n      .run({\n        file_id: fileId,\n        // Canonical form, matching conversation_files.absolute_path — otherwise\n        // a native-separator caller writes a second spelling of the same file\n        // that every by-path lookup (and the deletion-reconcile) then misses.\n        source_path: canonicalPath(meta.id),\n        provider: meta.provider ?? CLAUDE_CODE_PROVIDER,\n        kind: meta.kind ?? null,\n        external_session_id: meta.externalSessionId ?? null,\n        session_id: meta.sessionId,\n        session_name: meta.sessionName || null,\n        project_path: meta.projectPath || null,\n        project_name: meta.projectName || null,\n        account: meta.account,\n        branch: meta.gitBranch,\n        preview: meta.preview || null,\n        content_snippet: meta.contentSnippet || null,\n        message_count: meta.messageCount,\n        page_message_count: pageMessageCount,\n        last_message_sender: meta.lastMessageSender,\n        timestamp: meta.timestamp || null,\n        first_sent_at: meta.firstMessage?.timestamp ?? null,\n        first_sent_text: meta.firstMessage?.text ?? null,\n        last_sent_at: meta.lastMessage?.timestamp ?? null,\n        last_sent_text: meta.lastMessage?.text ?? null,\n        model: meta.model,\n        is_subagent: meta.isSubagent ? 1 : 0,\n        parent_session_id: meta.parentSessionId,\n        subagent_id: meta.subagentId ?? null,\n        parent_session_uuid: meta.parentSessionUuid ?? null,\n        is_teammate: meta.isTeammate ? 1 : 0,\n        team_name: meta.teamName,\n        tool_names_json: JSON.stringify(meta.toolNames),\n        last_prompt: meta.lastPrompt ?? null,\n        is_imported_from_claude: meta.isImportedFromClaude ? 1 : 0,\n        is_imported_from_codex: meta.isImportedFromCodex ? 1 : 0,\n        is_imported_from_cursor: meta.isImportedFromCursor ? 1 : 0,\n      });\n  }\n\n  getBySourcePath(sourcePath: string): ConversationMeta | null {\n    const row = this.db\n      .prepare(\"SELECT * FROM conversations WHERE source_path = ? AND status = 'active'\")\n      .get(canonicalPath(sourcePath)) as ConversationRow | undefined;\n    return row ? rowToMeta(row) : null;\n  }\n\n  // Dual lookup matching scanner.getConversation: resolve by source_path (the\n  // canonical id) first, then by session_id.\n  //\n  // session_id is NOT unique (see schema header) — the sessionId form is a\n  // compatibility convenience. Resolution is deterministic and matches the\n  // in-memory scanner: among active rows sharing the session_id, newest\n  // timestamp wins, index_seq breaks sub-second ties (precision updated_at\n  // lacks), then source_path ascending. Collision-safe callers should use\n  // getAllBySessionId() instead.\n  getByIdOrSession(id: string): ConversationMeta | null {\n    const direct = this.getBySourcePath(id);\n    if (direct) return direct;\n    const row = this.db\n      .prepare(\n        `SELECT * FROM conversations WHERE session_id = ? AND status = 'active'\n         ORDER BY COALESCE(timestamp, '') DESC, index_seq DESC, source_path ASC LIMIT 1`,\n      )\n      .get(id) as ConversationRow | undefined;\n    return row ? rowToMeta(row) : null;\n  }\n\n  // All active conversations sharing a session_id, newest first (same ordering\n  // as getByIdOrSession). Collision-safe counterpart to the convenience\n  // getByIdOrSession() sessionId lookup.\n  getAllBySessionId(sessionId: string): ConversationMeta[] {\n    const rows = this.db\n      .prepare(\n        `SELECT * FROM conversations WHERE session_id = ? AND status = 'active'\n         ORDER BY COALESCE(timestamp, '') DESC, index_seq DESC, source_path ASC`,\n      )\n      .all(sessionId) as ConversationRow[];\n    return rows.map(rowToMeta);\n  }\n\n  // All active metas (unsorted/unfiltered) — callers apply the existing\n  // filters/view transforms. Used by scan() before SQL filtering is wired in.\n  allActive(): ConversationMeta[] {\n    const rows = this.db\n      .prepare(\"SELECT * FROM conversations WHERE status = 'active'\")\n      .all() as ConversationRow[];\n    return rows.map(rowToMeta);\n  }\n\n  // Most recent active conversations, newest first. Backs the empty-query\n  // search path (mirrors the in-memory indexer's getRecent).\n  recent(limit: number): ConversationMeta[] {\n    const rows = this.db\n      .prepare(\n        `SELECT * FROM conversations WHERE status = 'active'\n         ORDER BY COALESCE(timestamp, '') DESC, source_path ASC LIMIT ?`,\n      )\n      .all(limit) as ConversationRow[];\n    return rows.map(rowToMeta);\n  }\n\n  distinctProjects(): string[] {\n    const rows = this.db\n      .prepare(\n        `SELECT DISTINCT project_path FROM conversations\n         WHERE status = 'active' AND project_path IS NOT NULL AND project_path != ''\n         ORDER BY project_path ASC`,\n      )\n      .all() as { project_path: string }[];\n    return rows.map((r) => r.project_path);\n  }\n\n  deleteByFileId(fileId: number): void {\n    this.db\n      .prepare(\n        \"UPDATE conversations SET status = 'deleted', updated_at = CURRENT_TIMESTAMP WHERE file_id = ?\",\n      )\n      .run(fileId);\n  }\n\n  // The parseConversation message total for a file (for bounded paging), or 0\n  // if not indexed.\n  pageMessageCount(sourcePath: string): number {\n    const row = this.db\n      .prepare(\n        \"SELECT page_message_count AS n FROM conversations WHERE source_path = ? AND status = 'active'\",\n      )\n      .get(canonicalPath(sourcePath)) as { n: number } | undefined;\n    return row?.n ?? 0;\n  }\n\n  count(): number {\n    return (\n      this.db.prepare(\"SELECT COUNT(*) AS n FROM conversations WHERE status = 'active'\").get() as {\n        n: number;\n      }\n    ).n;\n  }\n}\n","import type { Database } from \"better-sqlite3\";\nimport { canonicalPath } from \"../../canonical-path\";\nimport {\n  CURSOR_PROVIDER,\n  canonicalizeProviderName,\n  LEGACY_CURSOR_PROVIDER,\n} from \"../../providers/provider\";\nimport type { SearchDocument } from \"../../search-document\";\nimport {\n  FTS_ELLIPSIS,\n  FTS_HIT_CLOSE,\n  FTS_HIT_OPEN,\n  FTS_SNIPPET_TOKENS,\n  parseFtsSnippet,\n} from \"../../search-matches\";\nimport type { ConversationMeta, SearchHighlight } from \"../../types\";\n\n// Body column positions in conversation_messages_fts, in snippet() priority\n// order. source_path is column 0.\nconst BODY_COLUMNS = [\n  { name: \"text\", index: 1 },\n  { name: \"thinking\", index: 2 },\n  { name: \"tools\", index: 3 },\n] as const;\n\nexport interface FtsSearchFilters {\n  account?: string;\n  provider?: string;\n  project?: string;\n  since?: Date;\n  include?: \"all\" | \"conversations\" | \"subagents\" | \"teammates\";\n}\n\nexport interface FtsHit {\n  sourcePath: string;\n  // Present when the match was in a body column. Null for a metadata-only hit,\n  // which the caller resolves through generateMatches() instead.\n  body: { snippet: string; highlights: SearchHighlight[] } | null;\n}\n\n// FTS5-backed search index over conversation body + metadata. One row per\n// conversation, addressed by rowid == conversation_files.id.\n//\n// Never look a row up by source_path: FTS5's planner handles only MATCH, rowid\n// and rank, so any other constraint linear-scans the table. That was tolerable\n// when a row held <=5 KB; with ~128 KB of body per row it would scan the whole\n// corpus on every append.\nexport class FtsRepo {\n  constructor(private db: Database) {}\n\n  upsert(rowId: number, meta: ConversationMeta, doc: SearchDocument): void {\n    // Canonical form, matching conversations.source_path — a search hit is\n    // resolved back through getBySourcePath(), so the two must agree.\n    const sourcePath = canonicalPath(meta.id);\n    const tx = this.db.transaction(() => {\n      this.db.prepare(\"DELETE FROM conversation_messages_fts WHERE rowid = ?\").run(rowId);\n      this.db\n        .prepare(\n          `INSERT INTO conversation_messages_fts\n             (rowid, source_path, text, thinking, tools,\n              project_name, session_id, session_name, account, model, branch, tool_names)\n           VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,\n        )\n        .run(\n          rowId,\n          sourcePath,\n          doc.text,\n          doc.thinking,\n          doc.tools,\n          meta.projectName ?? \"\",\n          meta.sessionId ?? \"\",\n          meta.sessionName ?? \"\",\n          meta.account ?? \"\",\n          meta.model ?? \"\",\n          meta.gitBranch ?? \"\",\n          meta.toolNames.join(\" \"),\n        );\n    });\n    tx();\n  }\n\n  // Current durable buckets for a conversation, so an append can tail-extend\n  // them without reparsing the file. Returns null when no row exists yet.\n  readDocument(rowId: number): SearchDocument | null {\n    const row = this.db\n      .prepare(\"SELECT text, thinking, tools FROM conversation_messages_fts WHERE rowid = ?\")\n      .get(rowId) as { text: string; thinking: string; tools: string } | undefined;\n    if (!row) return null;\n    return { text: row.text ?? \"\", thinking: row.thinking ?? \"\", tools: row.tools ?? \"\" };\n  }\n\n  // True when the stored row already equals what we would write, so an append\n  // can skip re-tokenizing ~128 KB of body for nothing.\n  //\n  // The check covers the metadata columns too, not just the buckets: a\n  // newly-seen tool name or a late-resolved session_name changes metadata while\n  // the body is byte-identical, and nothing else ever rewrites this row — so\n  // skipping on \"body unchanged\" alone would strand that stale value forever.\n  isCurrent(rowId: number, meta: ConversationMeta, doc: SearchDocument): boolean {\n    const row = this.db\n      .prepare(\n        `SELECT text, thinking, tools,\n                project_name, session_id, session_name, account, model, branch, tool_names\n         FROM conversation_messages_fts WHERE rowid = ?`,\n      )\n      .get(rowId) as Record<string, string> | undefined;\n    if (!row) return false;\n\n    return (\n      row.text === doc.text &&\n      row.thinking === doc.thinking &&\n      row.tools === doc.tools &&\n      row.project_name === (meta.projectName ?? \"\") &&\n      row.session_id === (meta.sessionId ?? \"\") &&\n      row.session_name === (meta.sessionName ?? \"\") &&\n      row.account === (meta.account ?? \"\") &&\n      row.model === (meta.model ?? \"\") &&\n      row.branch === (meta.gitBranch ?? \"\") &&\n      row.tool_names === meta.toolNames.join(\" \")\n    );\n  }\n\n  remove(rowId: number): void {\n    this.db.prepare(\"DELETE FROM conversation_messages_fts WHERE rowid = ?\").run(rowId);\n  }\n\n  // Ranked hits matching the query, best first. Filters run in SQL BEFORE LIMIT:\n  // with a wide corpus a popular term matches far more conversations than one\n  // page, so post-filtering an already-truncated list would report \"no results\"\n  // for queries that do have them.\n  search(query: string, limit: number, filters: FtsSearchFilters = {}): FtsHit[] {\n    const match = toMatchQuery(query);\n    if (!match) return [];\n\n    const snippetSelects = BODY_COLUMNS.map(\n      (c) => `snippet(conversation_messages_fts, ${c.index}, ?, ?, ?, ?) AS snippet_${c.name}`,\n    ).join(\", \");\n\n    const params: unknown[] = [];\n    for (const _col of BODY_COLUMNS) {\n      params.push(FTS_HIT_OPEN, FTS_HIT_CLOSE, FTS_ELLIPSIS, FTS_SNIPPET_TOKENS);\n    }\n    params.push(match);\n\n    const where: string[] = [\"conversation_messages_fts MATCH ?\", \"c.status = 'active'\"];\n\n    if (filters.account) {\n      where.push(\"c.account = ?\");\n      params.push(filters.account);\n    }\n    if (filters.provider) {\n      const provider = canonicalizeProviderName(filters.provider) ?? filters.provider;\n      if (provider === CURSOR_PROVIDER) {\n        where.push(\"(c.provider = ? OR c.provider = ?)\");\n        params.push(CURSOR_PROVIDER, LEGACY_CURSOR_PROVIDER);\n      } else {\n        where.push(\"c.provider = ?\");\n        params.push(provider);\n      }\n    }\n    if (filters.project) {\n      where.push(\"(lower(c.project_path) LIKE ? OR lower(c.project_name) LIKE ?)\");\n      const like = `%${filters.project.toLowerCase()}%`;\n      params.push(like, like);\n    }\n    if (filters.since) {\n      where.push(\"c.timestamp >= ?\");\n      params.push(filters.since.toISOString());\n    }\n    if (filters.include === \"conversations\") {\n      where.push(\"c.is_subagent = 0 AND c.is_teammate = 0\");\n    } else if (filters.include === \"subagents\") {\n      where.push(\"c.is_subagent = 1\");\n    } else if (filters.include === \"teammates\") {\n      where.push(\"c.is_teammate = 1\");\n    }\n\n    params.push(limit);\n\n    const rows = this.db\n      .prepare(\n        `SELECT conversation_messages_fts.source_path AS source_path, ${snippetSelects}\n         FROM conversation_messages_fts\n         JOIN conversations c ON c.source_path = conversation_messages_fts.source_path\n         WHERE ${where.join(\" AND \")}\n         ORDER BY rank\n         LIMIT ?`,\n      )\n      .all(...params) as Record<string, string>[];\n\n    return rows.map((row) => ({ sourcePath: row.source_path, body: pickBodySnippet(row) }));\n  }\n\n  count(): number {\n    return (\n      this.db.prepare(\"SELECT COUNT(*) AS n FROM conversation_messages_fts\").get() as { n: number }\n    ).n;\n  }\n}\n\n// snippet() returns a column's head even when the match was elsewhere, so the\n// hit markers are the only signal that THIS column matched. Take the first\n// marked column in priority order: text, then thinking, then tools.\nfunction pickBodySnippet(row: Record<string, string>) {\n  for (const col of BODY_COLUMNS) {\n    const parsed = parseFtsSnippet(row[`snippet_${col.name}`]);\n    if (parsed) return parsed;\n  }\n  return null;\n}\n\n// Turn free-text into a safe FTS5 prefix query. Each whitespace-separated term\n// is wrapped in double quotes (so FTS5 special chars are treated literally) and\n// suffixed with * for prefix matching, mirroring FlexSearch's forward tokenizer.\n// Terms are ANDed together. Returns \"\" when nothing usable remains.\nfunction toMatchQuery(query: string): string {\n  const terms = query\n    .trim()\n    .split(/\\s+/)\n    .map((t) => t.replace(/\"/g, \"\").trim())\n    .filter(Boolean);\n  if (terms.length === 0) return \"\";\n  return terms.map((t) => `\"${t}\"*`).join(\" AND \");\n}\n","import type { Database } from \"better-sqlite3\";\nimport { canonicalPath } from \"../../canonical-path\";\n\nexport interface ScannedDirRow {\n  path: string;\n  parent_root: string | null;\n  mtime_ms: number;\n  has_nested: number;\n}\n\n// Per-directory mtime watermarks backing the discovery dir-mtime gate. One row\n// for a profile's projectsDir (parent_root NULL), one row per immediate\n// project subdirectory (parent_root = the projectsDir path).\nexport class ScannedDirsRepo {\n  constructor(private db: Database) {}\n\n  get(path: string): ScannedDirRow | undefined {\n    return this.db.prepare(\"SELECT * FROM scanned_dirs WHERE path = ?\").get(canonicalPath(path)) as\n      | ScannedDirRow\n      | undefined;\n  }\n\n  // Known project subdirectories under a root, path ascending (stable order).\n  childrenOf(parentRoot: string): ScannedDirRow[] {\n    return this.db\n      .prepare(\"SELECT * FROM scanned_dirs WHERE parent_root = ? ORDER BY path ASC\")\n      .all(canonicalPath(parentRoot)) as ScannedDirRow[];\n  }\n\n  upsert(path: string, parentRoot: string | null, mtimeMs: number, hasNested: boolean): void {\n    this.db\n      .prepare(\n        `INSERT INTO scanned_dirs (path, parent_root, mtime_ms, has_nested, updated_at)\n         VALUES (?, ?, ?, ?, CURRENT_TIMESTAMP)\n         ON CONFLICT(path) DO UPDATE SET\n           parent_root = excluded.parent_root,\n           mtime_ms = excluded.mtime_ms,\n           has_nested = excluded.has_nested,\n           updated_at = CURRENT_TIMESTAMP`,\n      )\n      .run(\n        canonicalPath(path),\n        parentRoot === null ? null : canonicalPath(parentRoot),\n        mtimeMs,\n        hasNested ? 1 : 0,\n      );\n  }\n\n  // Drop a project subdirectory's watermark row (it vanished from disk).\n  remove(path: string): void {\n    this.db.prepare(\"DELETE FROM scanned_dirs WHERE path = ?\").run(canonicalPath(path));\n  }\n}\n","import type { FSWatcher } from \"chokidar\";\nimport chokidar from \"chokidar\";\nimport { getLogger } from \"../logger\";\nimport { getProjectsDir } from \"../profiles\";\nimport type { Profile } from \"../types\";\n\nconst EXCLUDED_SEGMENTS = [\"/memory/\", \"/tool-results/\"];\n\nexport interface WatchEvent {\n  filePath: string;\n  account: string;\n  type: \"add\" | \"change\" | \"unlink\";\n}\n\nexport interface FileWatcherOptions {\n  // Debounce window (ms) coalescing rapid events for one file. Spec §8.\n  debounceMs?: number;\n}\n\n// Watches each active profile's projects dir for *.jsonl changes and forwards\n// debounced add/change/unlink events. Thin wrapper over chokidar; the scanner\n// owns what to do with the events (enqueue index jobs, emit to host apps).\nexport class FileWatcher {\n  private watchers: FSWatcher[] = [];\n  private timers = new Map<string, ReturnType<typeof setTimeout>>();\n  private readonly debounceMs: number;\n\n  constructor(\n    private profiles: Profile[],\n    private onEvent: (event: WatchEvent) => void,\n    options: FileWatcherOptions = {},\n  ) {\n    this.debounceMs = options.debounceMs ?? 400;\n  }\n\n  // Resolves once every underlying chokidar watcher has finished its initial\n  // scan, so the caller knows subsequent FS changes will be observed.\n  async start(): Promise<void> {\n    const log = getLogger();\n    const ready: Promise<void>[] = [];\n    for (const profile of this.profiles) {\n      const dir = getProjectsDir(profile);\n      const watcher = chokidar.watch(dir, {\n        ignoreInitial: true,\n        ignored: (p: string) => EXCLUDED_SEGMENTS.some((seg) => p.includes(seg)),\n        awaitWriteFinish: { stabilityThreshold: this.debounceMs, pollInterval: 100 },\n      });\n      watcher\n        .on(\"add\", (p) => this.dispatch(p, profile.id, \"add\"))\n        .on(\"change\", (p) => this.dispatch(p, profile.id, \"change\"))\n        .on(\"unlink\", (p) => this.dispatch(p, profile.id, \"unlink\"));\n      ready.push(new Promise<void>((resolve) => watcher.once(\"ready\", () => resolve())));\n      this.watchers.push(watcher);\n      log.debug({ dir, account: profile.id }, \"watcher: watching\");\n    }\n    await Promise.all(ready);\n  }\n\n  async stop(): Promise<void> {\n    for (const t of this.timers.values()) clearTimeout(t);\n    this.timers.clear();\n    await Promise.all(this.watchers.map((w) => w.close()));\n    this.watchers = [];\n  }\n\n  private dispatch(filePath: string, account: string, type: WatchEvent[\"type\"]): void {\n    if (!filePath.endsWith(\".jsonl\")) return;\n    // Debounce per path: collapse a flurry of events into the latest one.\n    const existing = this.timers.get(filePath);\n    if (existing) clearTimeout(existing);\n    this.timers.set(\n      filePath,\n      setTimeout(() => {\n        this.timers.delete(filePath);\n        this.onEvent({ filePath, account, type });\n      }, this.debounceMs),\n    );\n  }\n}\n","import { getLogger } from \"../logger\";\n\nexport type JobReason = \"watcher\" | \"manual\" | \"periodic\";\n\nexport interface IndexJob {\n  filePath: string;\n  account: string;\n  reason: JobReason;\n}\n\n// In-process job queue for incremental indexing. Jobs are deduplicated by file\n// path (the latest job for a path wins) and processed one at a time, because\n// SQLite has a single writer. A burst of filesystem events for the same file\n// collapses to one index pass.\nexport class IndexQueue {\n  private pending = new Map<string, IndexJob>();\n  private running = false;\n  private idleResolvers: Array<() => void> = [];\n\n  constructor(private process: (job: IndexJob) => Promise<void>) {}\n\n  enqueue(job: IndexJob): void {\n    this.pending.set(job.filePath, job);\n    void this.drain();\n  }\n\n  // Resolves when the queue has fully drained — useful for tests and for a\n  // clean shutdown.\n  onIdle(): Promise<void> {\n    if (!this.running && this.pending.size === 0) return Promise.resolve();\n    return new Promise((resolve) => this.idleResolvers.push(resolve));\n  }\n\n  get size(): number {\n    return this.pending.size;\n  }\n\n  private async drain(): Promise<void> {\n    if (this.running) return;\n    this.running = true;\n    const log = getLogger();\n\n    while (this.pending.size > 0) {\n      const [path, job] = this.pending.entries().next().value as [string, IndexJob];\n      this.pending.delete(path);\n      try {\n        await this.process(job);\n      } catch (err) {\n        log.warn({ filePath: job.filePath, err }, \"index-queue: job failed\");\n      }\n    }\n\n    this.running = false;\n    const resolvers = this.idleResolvers;\n    this.idleResolvers = [];\n    for (const r of resolvers) r();\n  }\n}\n","// ─── Primitives ─────────────────────────────────────────────────────\n\nexport type MessageSender = \"user\" | \"assistant\";\nexport type Include = \"all\" | \"conversations\" | \"subagents\" | \"teammates\";\nexport type View = \"flat\" | \"tree\" | \"grouped\";\nexport type SortOrder = \"recent\" | \"oldest\" | \"messages-desc\" | \"messages-asc\" | \"alpha\";\n\nexport const VALID_SORT_ORDERS: SortOrder[] = [\n  \"recent\",\n  \"oldest\",\n  \"messages-desc\",\n  \"messages-asc\",\n  \"alpha\",\n];\n\n// ─── Profile ────────────────────────────────────────────────────────\n\nexport interface Profile {\n  id: string;\n  label: string;\n  configDir: string;\n  enabled: boolean;\n  emoji?: string;\n  scanHistory?: boolean;\n}\n\n// ─── Content Tiers ──────────────────────────────────────────────────\n\nexport interface ContentTier {\n  name: string;\n  previewMax: number;\n  snippetMax: number;\n}\n\n// ─── ConversationMeta (full superset) ───────────────────────────────\n\nexport interface MessageSnapshot {\n  text: string;\n  timestamp: string;\n}\n\nexport type ProviderName = \"claude-code\" | \"codex-cli\" | \"cursor\";\n\nexport interface ConversationMeta {\n  id: string;\n  filePath: string;\n  sessionId: string;\n  // Which provider produced this meta. Optional/additive: existing claude-code\n  // metas default to \"claude-code\" when unset.\n  provider?: ProviderName;\n  // Distinguishes plain chat conversations from task-oriented logs (Codex).\n  kind?: \"conversation\" | \"task\";\n  // Provider-native session id when it differs from the (non-unique) sessionId.\n  externalSessionId?: string;\n  sessionName: string;\n  projectPath: string;\n  projectName: string;\n  account: string;\n  timestamp: string;\n  messageCount: number;\n  lastMessageSender: MessageSender;\n  preview: string;\n  contentSnippet: string;\n  gitBranch: string | null;\n  model: string | null;\n  isSubagent: boolean;\n  // NOTE: despite the name, this holds the parent's JSONL FILE PATH, not an id\n  // — it is matched against `id` (also a file path) by the \"tree\" view. For the\n  // parent's actual session UUID use `parentSessionUuid` below.\n  parentSessionId: string | null;\n  // The subagent's OWN identity, distinct from `sessionId`: a Claude sidechain\n  // transcript carries its PARENT's id in the `sessionId` field, so `sessionId`\n  // alone collapses every sibling subagent (and the parent) onto one identity.\n  // Claude's `agentId`; undefined for Codex, which exposes no per-child id.\n  subagentId?: string;\n  // The parent conversation's session UUID (Claude: the sidechain line's\n  // `sessionId`; Codex: `thread_spawn.parent_thread_id`). Undefined on ordinary\n  // conversations and on subagents whose parent is not discoverable.\n  parentSessionUuid?: string;\n  isTeammate: boolean;\n  teamName: string | null;\n  toolNames: string[];\n  firstMessage: MessageSnapshot | null;\n  lastMessage: MessageSnapshot | null;\n  lastPrompt?: string;\n  // Set when a Cursor agent-transcripts file is a copy of another provider's\n  // session. isImportedFromCursor is reserved for Claude/Codex providers.\n  isImportedFromClaude?: boolean;\n  isImportedFromCodex?: boolean;\n  isImportedFromCursor?: boolean;\n}\n\n// ─── View Variants ──────────────────────────────────────────────────\n\nexport interface TreeConversation extends ConversationMeta {\n  subagents: ConversationMeta[];\n}\n\nexport interface GroupedConversations {\n  [groupKey: string]: ConversationMeta[];\n}\n\n// ─── Options ────────────────────────────────────────────────────────\n\nexport interface FileStatEntry {\n  mtimeMs: number;\n  size: number;\n}\n\nexport interface ScanOptions {\n  profiles?: Profile[];\n  // Providers to scan. Defaults to [\"claude-code\"]. Including \"codex-cli\"\n  // requires codexRoots; including \"cursor\" requires cursorRoots. Neither\n  // glob $HOME by default. The live-PTY alias \"cursor-cli\" is accepted and\n  // stored as \"cursor\".\n  providers?: Array<ProviderName | \"cursor-cli\">;\n  // Absolute roots to discover Codex CLI history under (e.g. ~/.codex/sessions).\n  codexRoots?: string[];\n  // Absolute roots to discover Cursor agent-transcripts under\n  // (e.g. ~/.cursor/projects). Composer state.vscdb is out of scope.\n  cursorRoots?: string[];\n  tier?: string;\n  tiers?: Record<string, ContentTier>;\n  include?: Include;\n  view?: View;\n  sort?: SortOrder;\n  since?: string;\n  project?: string;\n  account?: string;\n  limit?: number;\n  offset?: number;\n  onProgress?: (scanned: number, total: number) => void;\n  onBatch?: (metas: ConversationMeta[]) => void;\n  /** Known file stats from a previous scan. Files whose (mtimeMs, size) match\n   *  are skipped — the cached ConversationMeta is reused instead. */\n  statCache?: Map<string, { stat: FileStatEntry; meta: ConversationMeta }>;\n  /** Persistent mode only: bypass the dir-mtime discovery gate and force a\n   *  full glob of every profile's projectsDir, ignoring stored watermarks.\n   *  Use for an explicit user-triggered refresh that shouldn't trust the\n   *  gate's optimization. */\n  fullRescan?: boolean;\n}\n\nexport interface ScanResult {\n  conversations: ConversationMeta[] | TreeConversation[] | GroupedConversations;\n  total: number;\n  scanned: number;\n}\n\nexport interface SearchOptions extends ScanOptions {\n  fields?: string[];\n  // Restrict results to one provider. Accepts the live-PTY alias \"cursor-cli\".\n  provider?: string;\n}\n\n// Half-open [start, end) character range into a SearchMatch.snippet marking one\n// matched term, so a client can emphasise it without parsing markup. Ranges\n// follow FTS token boundaries, not the query string: a prefix search for\n// \"timeout\" highlights the whole token \"timeoutMs\".\nexport interface SearchHighlight {\n  start: number;\n  end: number;\n}\n\nexport interface SearchMatch {\n  field: string;\n  snippet: string;\n  // Present on body hits (field === \"content\"), where the excerpt comes from\n  // FTS5 snippet(). Absent on metadata hits from generateMatches().\n  highlights?: SearchHighlight[];\n}\n\nexport interface SearchResult {\n  meta: ConversationMeta;\n  score: number;\n  matches: SearchMatch[];\n}\n\nexport interface GetConversationOptions {\n  profiles?: Profile[];\n}\n\nexport interface GetConversationPageOptions {\n  beforeIndex?: number;\n  limit: number;\n}\n\nexport interface ConversationPage {\n  messages: ConversationMessage[];\n  total: number;\n  fromIndex: number;\n}\n\n// A page sliced directly from a single parsed JSONL file, carrying the parsed\n// Conversation alongside the window so a caller can build a full response\n// (meta + messages) from one parse, without a prior scan().\nexport interface SingleFilePage extends ConversationPage {\n  conversation: Conversation;\n}\n\n// ─── Full Conversation ──────────────────────────────────────────────\n\nexport interface TurnDuration {\n  durationMs: number;\n  messageCount: number;\n  uuid?: string;\n}\n\nexport interface DeferredToolsDeltaAttachment {\n  type: \"deferred_tools_delta\";\n  addedNames: string[];\n  addedLines: unknown[];\n  removedNames: string[];\n}\n\nexport type AttachmentSidecar =\n  | DeferredToolsDeltaAttachment\n  | { type: string; [key: string]: unknown };\n\nexport interface ToolUseBlock {\n  id: string;\n  name: string;\n  input: Record<string, unknown>;\n}\n\nexport interface ToolResultBlock {\n  toolUseId: string;\n  type:\n    | \"edit\"\n    | \"write\"\n    | \"read\"\n    | \"bash\"\n    | \"grep\"\n    | \"glob\"\n    | \"taskAgent\"\n    | \"taskCreate\"\n    | \"taskUpdate\"\n    | \"generic\";\n  content: Record<string, unknown>;\n  isError?: boolean;\n}\n\nexport interface TeamInfo {\n  teammateId: string;\n  summary?: string;\n  color?: string;\n}\n\nexport interface MessageMetadata {\n  model?: string;\n  stopReason?: string | null;\n  inputTokens?: number;\n  outputTokens?: number;\n  cacheReadTokens?: number;\n  cacheCreationTokens?: number;\n  gitBranch?: string;\n  version?: string;\n  toolUses?: string[];\n  toolUseBlocks?: ToolUseBlock[];\n  toolResults?: ToolResultBlock[];\n  teamName?: string;\n  teamInfo?: TeamInfo;\n}\n\nexport interface ConversationMessage {\n  role: MessageSender;\n  text: string;\n  timestamp: string;\n  uuid?: string;\n  metadata?: MessageMetadata;\n  isToolResult?: boolean;\n  isThinking?: boolean;\n  thinkingContent?: string;\n  thinkingSignature?: string;\n  parentUuid?: string | null;\n  requestId?: string;\n  promptId?: string;\n  isSidechain?: boolean;\n  permissionMode?: string;\n  hasImages?: boolean;\n  attachment?: AttachmentSidecar;\n}\n\nexport interface Conversation {\n  id: string;\n  filePath: string;\n  projectPath: string;\n  projectName: string;\n  sessionId: string;\n  sessionName: string;\n  messages: ConversationMessage[];\n  fullText: string;\n  timestamp: string;\n  messageCount: number;\n  account: string;\n  turnDurations?: TurnDuration[];\n  lastPrompt?: string;\n}\n","export {\n  applyAccountFilter,\n  applyIncludeFilter,\n  applyPagination,\n  applyProjectFilter,\n  applySinceFilter,\n  applySort,\n} from \"./filters\";\nexport { readGitBranch } from \"./git\";\nexport { SearchIndexer } from \"./indexer\";\nexport type { Logger, LoggerOptions } from \"./logger\";\nexport { createLogger, getLogger, setLogger } from \"./logger\";\nexport type { ConvReducerState as JsonlParseState } from \"./persistent/conversation-reducer\";\nexport {\n  initialConvState as createJsonlParseState,\n  parseJsonlLine,\n} from \"./persistent/conversation-reducer\";\nexport type { Sidecar } from \"./persistent/sidecar\";\nexport { readSidecar, sidecarPath } from \"./persistent/sidecar\";\nexport {\n  detectDefaultProfile,\n  getProjectsDir,\n  loadProfiles,\n  resolveConfigDir,\n  saveProfiles,\n} from \"./profiles\";\nexport {\n  CodexCliProvider,\n  isCodexInjectedContext,\n  parseCodexJsonlLine,\n} from \"./providers/codex-cli\";\nexport {\n  CursorProvider,\n  parseCursorJsonlLine,\n  unwrapCursorUserText,\n} from \"./providers/cursor\";\nexport type {\n  DiscoveredConversationFile,\n  ScannerProvider,\n  ScannerProviderName,\n} from \"./providers/provider\";\nexport {\n  CLAUDE_CODE_PROVIDER,\n  CODEX_CLI_PROVIDER,\n  CURSOR_PROVIDER,\n  canonicalizeProviderList,\n  canonicalizeProviderName,\n  LEGACY_CURSOR_PROVIDER,\n  providerMatches,\n} from \"./providers/provider\";\nexport { ThreadbaseProvider } from \"./providers/threadbase\";\nexport type {\n  ConversationScannerOptions,\n  PersistentConfig,\n  ScannerChangeEvent,\n  WatchOptions,\n} from \"./scanner\";\nexport { ConversationScanner } from \"./scanner\";\nexport { cleanSystemTags } from \"./tags\";\nexport { DEFAULT_TIERS, resolveTier } from \"./tiers\";\nexport * from \"./types\";\n\n// ─── Standalone Convenience Functions ───────────────────────────────\n\nimport { ConversationScanner } from \"./scanner\";\nimport type {\n  Conversation,\n  GetConversationOptions,\n  ScanOptions,\n  ScanResult,\n  SearchOptions,\n  SearchResult,\n} from \"./types\";\n\nlet defaultScanner: ConversationScanner | undefined;\n\nfunction getDefaultScanner(): ConversationScanner {\n  if (!defaultScanner) {\n    defaultScanner = new ConversationScanner();\n  }\n  return defaultScanner;\n}\n\nexport function resetDefaultScanner(): void {\n  defaultScanner = undefined;\n}\n\nexport async function scan(\n  options?: ScanOptions,\n  scanner?: ConversationScanner,\n): Promise<ScanResult> {\n  return (scanner ?? getDefaultScanner()).scan(options);\n}\n\nexport async function search(\n  query: string,\n  options?: SearchOptions,\n  scanner?: ConversationScanner,\n): Promise<SearchResult[]> {\n  return (scanner ?? getDefaultScanner()).search(query, options);\n}\n\nexport async function getConversation(\n  id: string,\n  options?: GetConversationOptions,\n  scanner?: ConversationScanner,\n): Promise<Conversation | null> {\n  return (scanner ?? getDefaultScanner()).getConversation(id, options);\n}\n","import type Database from \"better-sqlite3\";\nimport { getLogger } from \"../logger\";\n\nconst log = getLogger(\"db\");\n\n/**\n * Slow-query threshold, in milliseconds.\n *\n * Measured, not guessed. Against the live 22 MB `cache.db` on this machine\n * (583 conversations, 38 717 index rows, warm page cache), 3 600 read samples\n * across the twelve statements the hot paths actually run gave p50 0.03 ms,\n * p99 0.87 ms, p99.9 1.43 ms, max 1.83 ms; 1 200 write samples gave p99\n * 0.09 ms with rare WAL-checkpoint spikes to 4.37 ms. So *every* healthy query\n * on this machine finishes inside ~4.4 ms, and the checkpoint spikes are the\n * only thing anywhere near that.\n *\n * 35 ms sits two anchors above that: it is 8x the slowest healthy operation\n * ever observed, so checkpoint spikes can never page anyone, and it is more\n * than the 34 ms *end-to-end* time of the fastest complete conversation fetch\n * measured on this box. A query crossing it therefore cost more on its own\n * than an entire healthy request — which is the point at which a warn line is\n * worth the bytes it occupies in the log.\n *\n * Override with `THREADBASE_DB_SLOW_QUERY_MS`; <= 0 disables slow logging.\n */\nexport const DEFAULT_SLOW_QUERY_MS = 35;\n\n/**\n * Per-statement label, held in a box so `labelStatements` can replace the\n * SQL-derived fallback with the real name after the statements are assigned.\n * A symbol keeps it off `Object.keys`, so nothing that enumerates a statement\n * bag sees it.\n */\nconst LABEL = Symbol(\"tbQueryLabel\");\n\ninterface Labelled {\n  [LABEL]?: { label: string };\n}\n\n/**\n * `verb:table` — what a statement is called before anyone names it.\n *\n * Never the full SQL text (too verbose for a per-query line) and never the\n * bound parameters (they carry file paths and conversation ids).\n */\nfunction deriveLabel(sql: string): string {\n  const verb = /^\\s*(\\w+)/.exec(sql)?.[1]?.toLowerCase() ?? \"sql\";\n  const table = /(?:from|into|update)\\s+([A-Za-z_]\\w*)/i.exec(sql)?.[1] ?? \"?\";\n  return `${verb}:${table}`;\n}\n\nfunction resolveSlowMs(): number {\n  const raw = process.env.THREADBASE_DB_SLOW_QUERY_MS;\n  if (raw === undefined || raw === \"\") return DEFAULT_SLOW_QUERY_MS;\n  const parsed = Number(raw);\n  return Number.isFinite(parsed) ? parsed : DEFAULT_SLOW_QUERY_MS;\n}\n\nfunction record(label: string, ms: number, rows: number, slowMs: number): void {\n  // Structured only (\"pino\"), never `both`. The default dest writes the message\n  // a second time via console.*, and both streams land in the same prod log —\n  // a duplicate line per query is exactly the volume this instrumentation is\n  // supposed to stay under.\n  if (slowMs > 0 && ms >= slowMs) {\n    log.warn(\n      `[db] slow query ${label} ${ms.toFixed(1)}ms rows=${rows}`,\n      { event: \"db.slow_query\", stmt: label, ms: Math.round(ms * 100) / 100, rows },\n      \"pino\",\n    );\n    return;\n  }\n  // Everything else is off by default: a single conversation fetch runs dozens\n  // of statements, so this is only affordable when someone asked for it.\n  if (log.pino.isLevelEnabled(\"debug\")) {\n    log.debug(\n      `[db] ${label} ${ms.toFixed(2)}ms rows=${rows}`,\n      { event: \"db.query\", stmt: label, ms: Math.round(ms * 100) / 100, rows },\n      \"pino\",\n    );\n  }\n}\n\nfunction rowsOf(method: \"get\" | \"all\" | \"run\", result: unknown): number {\n  if (method === \"all\") return Array.isArray(result) ? result.length : 0;\n  if (method === \"run\") return (result as Database.RunResult | undefined)?.changes ?? 0;\n  return result === undefined ? 0 : 1;\n}\n\n/**\n * Time every `.get()` / `.all()` / `.run()` on every statement this connection\n * prepares.\n *\n * Wrapping `prepare` is what makes this one edit per database instead of one\n * per query: `better-sqlite3` is synchronous, so a call's wall time *is* its\n * cost, and every statement in the process — the 45 in ConversationCache, the\n * 4 in RuntimeStore, and the ~40 more inside the repositories that share these\n * handles — is created here. Measured overhead is +0.09 µs on an 8.9 µs call\n * (~1%), which is why it is always on rather than behind a flag.\n *\n * Only the three terminal methods are replaced, as own properties; `iterate`,\n * `pluck`, `raw`, `columns` and `bind` keep resolving to the prototype\n * untouched. A statement that throws is not recorded — the error surfaces on\n * its own path.\n */\nexport function instrumentDatabase(\n  db: Database.Database,\n  options: { slowMs?: number } = {},\n): Database.Database {\n  const slowMs = options.slowMs ?? resolveSlowMs();\n  const prepare = db.prepare.bind(db);\n\n  db.prepare = ((sql: string) => {\n    const stmt = prepare(sql);\n    const box = { label: deriveLabel(sql) };\n    Object.defineProperty(stmt, LABEL, { value: box, configurable: true });\n\n    for (const method of [\"get\", \"all\", \"run\"] as const) {\n      const original = stmt[method].bind(stmt) as (...args: unknown[]) => unknown;\n      Object.defineProperty(stmt, method, {\n        configurable: true,\n        writable: true,\n        value: (...args: unknown[]) => {\n          const started = performance.now();\n          const result = original(...args);\n          record(box.label, performance.now() - started, rowsOf(method, result), slowMs);\n          return result;\n        },\n      });\n    }\n    return stmt;\n  }) as typeof db.prepare;\n\n  return db;\n}\n\n/**\n * Name the statements in a `{ name: Statement }` bag after their keys, so a\n * slow-query line reads `getMessageIndexWindow` rather than\n * `select:conversation_message_index`.\n *\n * Separate from `instrumentDatabase` because `prepare` cannot know the key its\n * result is about to be assigned to. Statements from a connection that was\n * never instrumented are skipped.\n */\nexport function labelStatements(statements: object): void {\n  for (const [name, stmt] of Object.entries(statements)) {\n    const box = (stmt as Labelled | null)?.[LABEL];\n    if (box) box.label = name;\n  }\n}\n","import type Database from \"better-sqlite3\";\nimport { readdirSync, readFileSync } from \"fs\";\nimport { dirname, join } from \"path\";\nimport { fileURLToPath } from \"url\";\n\nfunction getMigrationsDir(): string {\n  if (typeof import.meta !== \"undefined\" && import.meta.url) {\n    return dirname(fileURLToPath(import.meta.url));\n  }\n  return __dirname;\n}\n\n/**\n * Resolve a migrations directory that sits next to this module in both the\n * source tree (`src/db/<name>`) and the bundle (`dist/<name>`, populated by the\n * build's copy step).\n */\nexport function resolveMigrationsDir(name = \"migrations\"): string {\n  return join(getMigrationsDir(), name);\n}\n\nconst SCHEMA_MIGRATIONS_SQL = `\nCREATE TABLE IF NOT EXISTS schema_migrations (\n  id TEXT PRIMARY KEY,\n  applied_at TEXT NOT NULL\n);\n`;\n\nexport interface SqliteMigrationRunResult {\n  applied: string[];\n  skipped: string[];\n}\n\nexport function runSqliteMigrations(\n  db: Database.Database,\n  migrationsDir?: string,\n): SqliteMigrationRunResult {\n  db.exec(SCHEMA_MIGRATIONS_SQL);\n\n  const dir = migrationsDir ?? resolveMigrationsDir();\n  const files = readdirSync(dir)\n    .filter((f) => f.endsWith(\".sql\"))\n    .sort();\n\n  const appliedRows = db.prepare(\"SELECT id FROM schema_migrations\").all() as Array<{ id: string }>;\n  const appliedSet = new Set(appliedRows.map((r) => r.id));\n\n  const recordApplied = db.prepare(\"INSERT INTO schema_migrations (id, applied_at) VALUES (?, ?)\");\n\n  const applied: string[] = [];\n  const skipped: string[] = [];\n\n  for (const file of files) {\n    if (appliedSet.has(file)) {\n      skipped.push(file);\n      continue;\n    }\n    const sql = readFileSync(join(dir, file), \"utf-8\");\n    const tx = db.transaction(() => {\n      db.exec(sql);\n      recordApplied.run(file, new Date().toISOString());\n    });\n    tx();\n    applied.push(file);\n  }\n\n  return { applied, skipped };\n}\n","import type { ConversationMessage } from \"@threadbase-sh/scanner\";\n\n/**\n * A scanner-parsed message → one Claude Code JSONL line, the only shape\n * mobile's live parser (`parseLineToMessage`) renders.\n *\n * Content comes from the same scanner parse that serves the message over REST,\n * so a live bubble and its reloaded copy carry the same blocks and ids:\n * thinking, text, tool_use (toolUseBlocks), tool_result (toolResults).\n */\nexport function toClaudeShapedLine(message: ConversationMessage, uuid: string): string {\n  const content: unknown[] = [];\n  if (message.isThinking && message.thinkingContent) {\n    content.push({ type: \"thinking\", thinking: message.thinkingContent });\n  }\n  if (message.text) content.push({ type: \"text\", text: message.text });\n  for (const b of message.metadata?.toolUseBlocks ?? []) {\n    content.push({ type: \"tool_use\", id: b.id, name: b.name, input: b.input });\n  }\n  for (const r of message.metadata?.toolResults ?? []) {\n    content.push({\n      type: \"tool_result\",\n      tool_use_id: r.toolUseId,\n      content: toolResultText(r.content),\n      is_error: r.isError ?? false,\n    });\n  }\n  return JSON.stringify({\n    type: message.role,\n    uuid,\n    timestamp: message.timestamp || new Date().toISOString(),\n    message: { role: message.role, content },\n  });\n}\n\n/**\n * A scanner tool result's content as the string a client renders. Codex results\n * carry their program output as `content.output`: send that verbatim, the way a\n * live Claude tool_result carries its text, not a JSON object whose newlines\n * arrive escaped. Every other result keeps its JSON form.\n */\nexport function toolResultText(content: Record<string, unknown> | undefined): string {\n  const output = content?.output;\n  return typeof output === \"string\" ? output : JSON.stringify(content);\n}\n","/**\n * Cursor CLI agent-transcripts JSONL → Claude-shaped conversation lines.\n *\n * Cursor writes `{ role, message: { content: [{ type, text } | { type:\n * \"tool_use\", name, input }] } }` (no `type` envelope field, no per-line CLI\n * version), plus `{ type: \"turn_ended\" }` markers. Mobile's parser only\n * understands Claude Code JSONL, so chat-bearing lines are rewritten to that\n * shape from the scanner's parse — the same one REST serves them from.\n */\n\nimport { parseCursorJsonlLine } from \"@threadbase-sh/scanner\";\nimport type { NormalizeResult } from \"../services/providers/capabilities\";\nimport { toClaudeShapedLine } from \"./claudeShapedLine\";\n\nconst KNOWN_ROLES = new Set([\"user\", \"assistant\", \"tool\", \"system\"]);\n// Envelope types Cursor writes that carry no chat content.\nconst KNOWN_MARKER_TYPES = new Set([\"turn_ended\"]);\n\ntype CursorEntry = {\n  role?: string;\n  type?: string;\n  message?: { content?: unknown; role?: string };\n};\n\nfunction parseEntry(line: string): CursorEntry | null {\n  try {\n    const entry = JSON.parse(line);\n    return entry && typeof entry === \"object\" ? entry : null;\n  } catch {\n    return null;\n  }\n}\n\n/** True when a line is Cursor agent-transcripts shaped (not Claude or Codex JSONL). */\nexport function isCursorTranscriptLine(line: string): boolean {\n  const entry = parseEntry(line);\n  if (!entry) return false;\n  if (typeof entry.type === \"string\") return KNOWN_MARKER_TYPES.has(entry.type);\n  return typeof entry.role === \"string\" && KNOWN_ROLES.has(entry.role);\n}\n\n/**\n * `index` is the line's message index in its file (the offset index's seq),\n * when the caller knows it. It goes into the message uuid, which is how a\n * client matches this live copy against the same message served over REST.\n */\nexport function classifyCursorLine(line: string, index?: number | null): NormalizeResult {\n  const entry = parseEntry(line);\n  if (!entry) return { kind: \"unknown\", raw: line, reason: \"line is not valid JSON\" };\n\n  if (typeof entry.type === \"string\" && KNOWN_MARKER_TYPES.has(entry.type)) {\n    return { kind: \"ignored\", reason: `${entry.type} carries no chat content` };\n  }\n\n  const role = entry.role ?? entry.message?.role;\n  if (typeof role !== \"string\" || !KNOWN_ROLES.has(role)) {\n    return {\n      kind: \"unknown\",\n      raw: line,\n      reason: `unrecognized cursor transcript role: ${String(role)}`,\n    };\n  }\n\n  if (role !== \"user\" && role !== \"assistant\") {\n    return { kind: \"ignored\", reason: `role ${role} is not rendered` };\n  }\n\n  const message = parseCursorJsonlLine(line, index ?? undefined);\n  if (!message) {\n    return { kind: \"ignored\", reason: \"message has no text or tool calls\" };\n  }\n\n  // The scanner derives the uuid (Cursor lines carry none) from the line and\n  // its index — the same call REST's parse makes, so the ids match.\n  return { kind: \"message\", line: toClaudeShapedLine(message, message.uuid ?? \"\") };\n}\n","/**\n * Codex rollout JSONL → Claude-shaped conversation lines for WS clients.\n *\n * Mobile's `parseLineToMessage` only understands Claude Code JSONL\n * (`type: \"user\"|\"assistant\"`, `message.role`, text blocks). Codex writes\n * `response_item` / `event_msg` / `session_meta` instead, so raw Codex lines\n * never become live bubbles. This helper normalizes chat-bearing Codex lines\n * into the Claude shape and drops everything else (including the duplicate\n * `event_msg` copies of each turn and `developer` role payloads).\n */\n\nimport {\n  isCodexInjectedContext as isCodexFormatPreamble,\n  parseCodexJsonlLine,\n} from \"@threadbase-sh/scanner\";\nimport type { NormalizeResult } from \"../services/providers/capabilities\";\nimport { toClaudeShapedLine } from \"./claudeShapedLine\";\nimport { classifyCursorLine, isCursorTranscriptLine } from \"./cursorConversationLine\";\n\ntype CodexContentBlock = {\n  type?: string;\n  text?: string;\n};\n\nfunction extractCodexText(content: unknown): string {\n  if (typeof content === \"string\") return content.trim();\n  if (!Array.isArray(content)) return \"\";\n  return content\n    .map((item) => {\n      if (typeof item === \"string\") return item;\n      const block = item as CodexContentBlock;\n      const t = block?.type;\n      if (\n        (t === \"input_text\" || t === \"output_text\" || t === \"text\") &&\n        typeof block.text === \"string\"\n      ) {\n        return block.text;\n      }\n      return \"\";\n    })\n    .filter(Boolean)\n    .join(\"\")\n    .trim();\n}\n\n// Rollout envelope types this adapter understands. Anything outside this set is\n// reported as `unknown` rather than dropped — a Codex release that renames or\n// adds an envelope must be visible, not silently render an empty conversation.\n// See docs/architecture/2026-07-24-provider-compatibility.md.\nconst KNOWN_CODEX_TYPES = new Set([\"response_item\", \"event_msg\", \"session_meta\", \"turn_context\"]);\n\n/**\n * Classify one Codex rollout line (C2).\n *\n * Distinguishes \"recognized, deliberately not rendered\" (`ignored`) from \"this\n * adapter has never seen this shape\" (`unknown`). Both were `null` before, which\n * is why provider schema drift used to surface as an empty screen with no error.\n *\n * `index` is the line's message_index in its FILE, which is what the leading-turn\n * bound needs. The default of 0 treats an unknown position as leading, so a\n * caller that cannot say keeps the injected-context filter rather than\n * rendering a fake AGENTS.md bubble.\n */\nexport function classifyCodexLine(line: string, index = 0): NormalizeResult {\n  let entry: {\n    type?: string;\n    timestamp?: string;\n    payload?: {\n      type?: string;\n      role?: string;\n      content?: unknown;\n      id?: string;\n    };\n  };\n  try {\n    entry = JSON.parse(line);\n  } catch {\n    return { kind: \"unknown\", raw: line, reason: \"line is not valid JSON\" };\n  }\n\n  if (typeof entry.type !== \"string\" || !KNOWN_CODEX_TYPES.has(entry.type)) {\n    return {\n      kind: \"unknown\",\n      raw: line,\n      reason: `unrecognized rollout envelope type: ${String(entry.type)}`,\n    };\n  }\n\n  // Recognized envelopes that legitimately carry no renderable chat.\n  // event_msg duplicates each turn; session_meta/turn_context are headers.\n  if (entry.type !== \"response_item\") {\n    return { kind: \"ignored\", reason: `${entry.type} carries no chat content` };\n  }\n\n  const payload = entry.payload;\n  if (payload?.type && CODEX_BLOCK_PAYLOADS.has(payload.type)) {\n    return classifyCodexBlockItem(line, entry, payload.type);\n  }\n  if (payload?.type !== \"message\") {\n    return { kind: \"ignored\", reason: `response_item payload is ${String(payload?.type)}` };\n  }\n\n  const role = payload.role;\n  if (role !== \"user\" && role !== \"assistant\") {\n    // `developer` and friends are known Codex roles we deliberately hide.\n    return { kind: \"ignored\", reason: `role ${String(role)} is not rendered` };\n  }\n\n  const text = extractCodexText(payload.content);\n  if (!text) {\n    return { kind: \"ignored\", reason: \"message has no extractable text\" };\n  }\n\n  // Synthetic Codex context dumps (AGENTS.md / permissions instructions) are\n  // written as `role: user` before any real user turn. Hide them from the live\n  // overlay so the chat doesn't open with fake user bubbles — but only at the\n  // head, the same bound REST applies, or a user's pasted text vanishes live.\n  if (isLeadingInjectedContext(index, role, text)) {\n    return { kind: \"ignored\", reason: \"synthetic injected context\" };\n  }\n\n  return { kind: \"message\", line: buildClaudeShapedLine(entry, payload, role, text) };\n}\n\n// Tool calls, their outputs and reasoning. The scanner owns how these render\n// (the same parse serves them over REST), so the live line is built from its\n// result rather than a second reading of the rollout format.\nconst CODEX_BLOCK_PAYLOADS = new Set([\n  \"function_call\",\n  \"custom_tool_call\",\n  \"web_search_call\",\n  \"function_call_output\",\n  \"custom_tool_call_output\",\n  \"reasoning\",\n]);\n\nfunction classifyCodexBlockItem(\n  line: string,\n  entry: { timestamp?: string; payload?: { id?: string; call_id?: string } },\n  payloadType: string,\n): NormalizeResult {\n  const message = parseCodexJsonlLine(line);\n  if (!message) {\n    return { kind: \"ignored\", reason: `${payloadType} has nothing renderable` };\n  }\n  const uuid =\n    message.uuid ??\n    `codex-${payloadType}-${entry.timestamp ?? \"\"}-${entry.payload?.call_id ?? hashPrefix(line)}`;\n  return { kind: \"message\", line: toClaudeShapedLine(message, uuid) };\n}\n\n/**\n * Returns a Claude-shaped JSONL line, or null when the input is not a\n * user/assistant chat message that clients should render.\n *\n * Thin wrapper over classifyCodexLine so existing callers keep their signature.\n * New code should prefer classifyCodexLine, which explains WHY a line produced\n * nothing.\n */\nexport function normalizeCodexLineToClaudeShape(line: string, index = 0): string | null {\n  const result = classifyCodexLine(line, index);\n  return result.kind === \"message\" ? result.line : null;\n}\n\nfunction buildClaudeShapedLine(\n  entry: { timestamp?: string },\n  payload: { id?: string },\n  role: \"user\" | \"assistant\",\n  text: string,\n): string {\n  const timestamp =\n    typeof entry.timestamp === \"string\" ? entry.timestamp : new Date().toISOString();\n  // Prefer payload.id when present; otherwise derive a stable-enough id from\n  // timestamp+role+text prefix so WS seenIds can dedupe without colliding\n  // across consecutive turns in the same second.\n  const uuid =\n    typeof payload.id === \"string\" && payload.id.length > 0\n      ? payload.id\n      : `codex-${role}-${timestamp}-${hashPrefix(text)}`;\n\n  return JSON.stringify({\n    type: role,\n    uuid,\n    timestamp,\n    message: {\n      role,\n      content: [{ type: \"text\", text }],\n    },\n  });\n}\n\n/** True when a Codex rollout line is Codex-shaped (not Claude JSONL). */\nexport function isCodexRolloutLine(line: string): boolean {\n  try {\n    const entry = JSON.parse(line) as { type?: string };\n    return (\n      entry.type === \"response_item\" ||\n      entry.type === \"event_msg\" ||\n      entry.type === \"session_meta\" ||\n      entry.type === \"turn_context\"\n    );\n  } catch {\n    return false;\n  }\n}\n\n/**\n * Map a batch of raw JSONL lines to client-facing lines. Codex and Cursor\n * batches are normalized (and filtered); Claude batches pass through unchanged.\n *\n * `seqs` are the offset index's message_index per line (extendMessageIndex),\n * and they are the only position this batch can be trusted with: a batch is one\n * watcher read, which may start anywhere in the file, so \"first in batch\" is not\n * \"first in conversation\". The index numbers from its persisted\n * last_message_index and declines a read that does not start where it left off,\n * so a seq is a file position, never a batch-relative guess. A line with no seq\n * (the index dropped it, cannot index this file, or declined the read) falls\n * back to leading, which keeps the injected-context filter.\n *\n * The returned `seqs` stay parallel to the returned `lines` — filtered with\n * them — or are null when the caller passed none that line up with `lines`.\n */\nexport function toClientConversationLines(\n  lines: string[],\n  seqs?: (number | null)[] | null,\n): { lines: string[]; seqs: (number | null)[] | null } {\n  const positions = seqs?.length === lines.length ? seqs : null;\n  // Heuristic: the first recognisable line decides the batch's provider (a\n  // mixed batch shouldn't happen — one file, one provider).\n  const classify = lines.some(isCodexRolloutLine)\n    ? (line: string, i: number) => classifyCodexLine(line, positions?.[i] ?? 0)\n    : lines.some(isCursorTranscriptLine)\n      ? (line: string, i: number) => classifyCursorLine(line, positions?.[i])\n      : null;\n  if (!classify) return { lines, seqs: positions };\n  const out: string[] = [];\n  const outSeqs: (number | null)[] = [];\n  for (const [i, line] of lines.entries()) {\n    const result = classify(line, i);\n    if (result.kind !== \"message\") continue;\n    out.push(result.line);\n    outSeqs.push(positions?.[i] ?? null);\n  }\n  return { lines: out, seqs: positions ? outSeqs : null };\n}\n\n/**\n * Prompts THIS server injects, passed as Codex CLI argv because there is no\n * --system-prompt flag. DEFAULT_SYSTEM_PROMPT + BROWSE_SYSTEM_PROMPT land in the\n * rollout as `role: user`.\n *\n * Deliberately NOT in the scanner: recognising our own output is not Codex\n * format knowledge, and a general rollout reader has no business knowing what\n * this server says.\n */\nfunction isStreamerInjectedPrompt(text: string): boolean {\n  if (text.includes(\"limit the options to at most 3\")) return true;\n  if (text.includes(\"You are working within the project boundary:\")) return true;\n  return text.includes(\n    \"Do not read, write, or execute commands that access files or directories outside this boundary\",\n  );\n}\n\n/**\n * Text that is machinery rather than a turn the user typed.\n *\n * Two concerns, one question. The Codex-format preambles (AGENTS.md dumps,\n * sandbox blobs) come from the scanner, which owns the rollout format and\n * applies the same predicate when it counts messages — importing it is what\n * keeps its index space and ours identical. The argv prompts above are ours.\n *\n * Callers MUST bound this to the leading turn (see isLeadingInjectedContext).\n */\nexport function isCodexInjectedContext(text: string): boolean {\n  return isCodexFormatPreamble(text) || isStreamerInjectedPrompt(text);\n}\n\n/**\n * The form every caller should actually use.\n *\n * Codex only injects at the head of a rollout, so the skip is bounded to the\n * leading turn — otherwise a human who pastes instruction text mid-conversation\n * has their message silently eaten, and message_count stops matching what they\n * can see. The scanner bounds it the same way (`acc.messageCount === 0`), and\n * the two must agree or the index counts in a different space than we serve.\n */\nexport function isLeadingInjectedContext(\n  index: number,\n  role: string,\n  text: string | undefined,\n): boolean {\n  return index === 0 && role === \"user\" && typeof text === \"string\" && isCodexInjectedContext(text);\n}\n\nfunction hashPrefix(text: string): string {\n  // Short non-crypto fingerprint for id uniqueness within a session.\n  let h = 0;\n  const sample = text.slice(0, 64);\n  for (let i = 0; i < sample.length; i++) {\n    h = (h * 31 + sample.charCodeAt(i)) | 0;\n  }\n  return Math.abs(h).toString(36);\n}\n","import {\n  createJsonlParseState,\n  parseCodexJsonlLine,\n  parseCursorJsonlLine,\n  parseJsonlLine,\n} from \"@threadbase-sh/scanner\";\nimport { closeSync, openSync, readSync } from \"fs\";\nimport { StringDecoder } from \"string_decoder\";\nimport { z } from \"zod\";\nimport {\n  CLAUDE_CODE_PROVIDER,\n  CODEX_CLI_PROVIDER,\n  CURSOR_PROVIDER,\n  type ProviderName,\n} from \"../../providers\";\nimport { isCodexInjectedContext } from \"../../utils/codexConversationLine\";\n\nconst identityRecord = z.object({\n  type: z.string().optional(),\n  role: z.string().optional(),\n  isSidechain: z.boolean().optional(),\n  agentId: z.string().optional(),\n  sessionId: z.string().optional(),\n  payload: z\n    .object({\n      id: z.string().optional(),\n      source: z.unknown().optional(),\n    })\n    .passthrough()\n    .optional(),\n});\nconst spawnSource = z.object({\n  subagent: z.object({\n    thread_spawn: z.object({ parent_thread_id: z.string().min(1) }),\n  }),\n});\n\nexport class ConversationClassifier {\n  readonly state = createJsonlParseState();\n  hasMessages = false;\n  isSubagent = false;\n  parentConversationId: string | null = null;\n  id: string;\n  provider: ProviderName;\n  private explicitClaudeIdentity = false;\n  private sawIdentity = false;\n  private readonly fileStem: string;\n\n  /**\n   * Nothing later in the file can change the answer: `hasMessages` only ever\n   * goes false→true, and identity settles at Codex's line-0 `session_meta` or\n   * the first Claude line carrying `isSidechain`. A file with no renderable\n   * message is never settled and is read in full — that is how `hasMessages`\n   * earns a definitive 0, and such files are small.\n   */\n  get settled(): boolean {\n    return this.hasMessages && this.sawIdentity;\n  }\n\n  constructor(filePath: string, provider: ProviderName = CLAUDE_CODE_PROVIDER) {\n    this.id =\n      filePath\n        .split(/[/\\\\]/)\n        .pop()\n        ?.replace(/\\.jsonl$/, \"\") ?? filePath;\n    this.fileStem = this.id;\n    this.provider = provider;\n    if (this.provider === CLAUDE_CODE_PROVIDER && /[/\\\\]agent-transcripts[/\\\\]/.test(filePath)) {\n      this.provider = CURSOR_PROVIDER;\n    }\n    this.isSubagent = /[/\\\\]subagents[/\\\\][^/\\\\]+\\.jsonl$/.test(filePath);\n    if (this.isSubagent) {\n      const parts = filePath.split(/[/\\\\]/);\n      const subIdx = parts.lastIndexOf(\"subagents\");\n      if (subIdx > 0) this.parentConversationId = parts[subIdx - 1] ?? null;\n    }\n  }\n\n  append(raw: string) {\n    let value: unknown;\n    try {\n      value = JSON.parse(raw);\n    } catch {\n      return null;\n    }\n    if (value === null || typeof value !== \"object\" || Array.isArray(value)) return null;\n    const parsed = identityRecord.safeParse(value);\n    if (parsed.success) {\n      const entry = parsed.data;\n      if (entry.type === \"session_meta\" && entry.payload) {\n        // Copies under agent-transcripts stay cursor; native Codex rollouts\n        // still flip here. Overwriting would store imported Cursor history as\n        // provider=codex-cli and drop isImportedFromCodex on the list row.\n        if (this.provider !== CURSOR_PROVIDER) {\n          this.provider = \"codex-cli\";\n        }\n        this.sawIdentity = true;\n        if (entry.payload.id) this.id = entry.payload.id;\n        // A `subagent` key is what makes it provider-created; the value varies\n        // (\"review\", {other:…}, {thread_spawn:…}) and only thread_spawn names a\n        // parent. Keying on the full thread_spawn shape classified the other\n        // values as ordinary top-level history and showed them to the user.\n        // A string source (\"cli\", \"vscode\", \"exec\", …) is never a subagent.\n        // Cursor path-based subagent identity wins over Codex source on imports.\n        if (this.provider !== CURSOR_PROVIDER) {\n          const source = entry.payload.source;\n          this.isSubagent = typeof source === \"object\" && source !== null && \"subagent\" in source;\n          const spawn = spawnSource.safeParse(source);\n          this.parentConversationId = spawn.success\n            ? spawn.data.subagent.thread_spawn.parent_thread_id\n            : null;\n        }\n      } else if (\n        (this.provider === CURSOR_PROVIDER && entry.role) ||\n        (this.provider === CLAUDE_CODE_PROVIDER &&\n          !entry.type &&\n          (entry.role === \"user\" || entry.role === \"assistant\"))\n      ) {\n        // Cursor agent-transcripts are `{ role, message }` with no envelope\n        // `type`. Claude lines always carry `type: user|assistant`. Sniffing\n        // here means a cache miss still classifies the file instead of running\n        // it through parseJsonlLine and concluding it has no messages.\n        this.provider = CURSOR_PROVIDER;\n        this.sawIdentity = true;\n      } else if (this.provider === CLAUDE_CODE_PROVIDER && entry.isSidechain !== undefined) {\n        this.sawIdentity = true;\n        if (entry.isSidechain === true && entry.agentId?.trim()) {\n          this.explicitClaudeIdentity = true;\n          this.id = this.fileStem;\n          this.isSubagent = true;\n          this.parentConversationId = entry.sessionId || null;\n        } else if (!this.explicitClaudeIdentity) {\n          this.isSubagent = false;\n        }\n      }\n    }\n    const message =\n      this.provider === CODEX_CLI_PROVIDER\n        ? parseCodexJsonlLine(raw)\n        : this.provider === CURSOR_PROVIDER\n          ? parseCursorJsonlLine(raw)\n          : parseJsonlLine(raw, this.state);\n    if (message?.role === \"user\" && isCodexInjectedContext(message.text ?? \"\")) return null;\n    if (message) this.hasMessages = true;\n    return message;\n  }\n}\n\n/** Bounded memory, using exactly the adapters used by conversation detail. */\nexport function classifyConversationFile(filePath: string, provider?: ProviderName) {\n  const classifier = new ConversationClassifier(filePath, provider ?? CLAUDE_CODE_PROVIDER);\n  const fd = openSync(filePath, \"r\");\n  try {\n    const buffer = Buffer.alloc(64 * 1024);\n    const decoder = new StringDecoder(\"utf8\");\n    let pending = \"\";\n    for (;;) {\n      const length = readSync(fd, buffer, 0, buffer.length, null);\n      if (length === 0) break;\n      pending += decoder.write(buffer.subarray(0, length));\n      let end = pending.indexOf(\"\\n\");\n      while (end >= 0) {\n        classifier.append(pending.slice(0, end));\n        pending = pending.slice(end + 1);\n        end = pending.indexOf(\"\\n\");\n      }\n      // Every scan reads every transcript on the box, so stopping at the first\n      // line that settles both facts is the difference between reading a few\n      // hundred bytes and reading the whole corpus.\n      if (classifier.settled) return classifier;\n    }\n    pending += decoder.end();\n    if (pending.trim()) classifier.append(pending);\n    return classifier;\n  } finally {\n    closeSync(fd);\n  }\n}\n","import { closeSync, openSync, readSync, statSync } from \"fs\";\n\n// Default agent entrypoints. Override via THREADBASE_AGENT_ENTRYPOINTS\n// (comma-separated). Interactive Claude Code emits entrypoint=\"cli\" and is\n// never in this set.\n//   - sdk-cli      → Claude Agent SDK (TypeScript), claude-mem, hook-spawned\n//                     automation\n//   - sdk-py       → Claude Agent SDK (Python), same automation, different\n//                     binding — observed on hook-spawned review agents\n//   - claude-vscode → VS Code extension when invoked headlessly (memory\n//                     summarizers, etc.). Real interactive VS Code sessions\n//                     also use this value, so toggling via env var lets users\n//                     keep them visible if they want.\nexport const DEFAULT_AGENT_ENTRYPOINTS: ReadonlySet<string> = new Set([\n  \"sdk-cli\",\n  \"sdk-py\",\n  \"claude-vscode\",\n]);\n\n// Chunked scan: read 64 KB at a time with early-exit. We look for the first\n// `\"entrypoint\":` occurrence in the file:\n//   - matches an agent marker → return true\n//   - matches some other entrypoint value (e.g. \"cli\") → return false\n//   - never appears → return false\n// The entrypoint is fixed per-conversation, so the first occurrence is\n// authoritative. This keeps both agent and human files fast (typical first\n// hit is within the first chunk), while still tolerating long housekeeping\n// prefixes (observed agent markers as deep as 2.3 MB in 4.5 MB observer files).\nconst CHUNK_BYTES = 64 * 1024;\nconst ENTRYPOINT_PROBE = `\"entrypoint\":`;\n// Overlap consecutive chunks so a marker that straddles the boundary is still\n// found. The longest entrypoint we look for is ~24 chars; 64 bytes overlap is\n// plenty.\nconst CHUNK_OVERLAP = 64;\n\n// Per-file decision cache, keyed by `${filePath}::${sortedEntrypointsKey}` so\n// changing the set invalidates entries. Filled lazily; cleared on restart.\nconst fileDecisionCache = new Map<string, boolean>();\n\nfunction markersFor(entrypoints: ReadonlySet<string>): string[] {\n  return [...entrypoints].map((e) => `\"entrypoint\":\"${e}\"`);\n}\n\nfunction cacheKey(filePath: string, entrypoints: ReadonlySet<string>): string {\n  return `${filePath}::${[...entrypoints].sort().join(\",\")}`;\n}\n\nexport function isAgentLine(\n  line: { entrypoint?: string },\n  entrypoints: ReadonlySet<string> = DEFAULT_AGENT_ENTRYPOINTS,\n): boolean {\n  return line.entrypoint !== undefined && entrypoints.has(line.entrypoint);\n}\n\nexport function isAgentFile(\n  filePath: string,\n  entrypoints: ReadonlySet<string> = DEFAULT_AGENT_ENTRYPOINTS,\n): boolean {\n  if (entrypoints.size === 0) return false;\n  const key = cacheKey(filePath, entrypoints);\n  const cached = fileDecisionCache.get(key);\n  if (cached !== undefined) return cached;\n\n  let fd: number;\n  try {\n    fd = openSync(filePath, \"r\");\n  } catch {\n    return false;\n  }\n\n  try {\n    const fileSize = statSync(filePath).size;\n    if (fileSize === 0) {\n      fileDecisionCache.set(key, false);\n      return false;\n    }\n\n    const markers = markersFor(entrypoints);\n    const buf = Buffer.allocUnsafe(CHUNK_BYTES);\n    let offset = 0;\n    let carry = \"\";\n\n    while (offset < fileSize) {\n      const toRead = Math.min(CHUNK_BYTES, fileSize - offset);\n      const got = readSync(fd, buf, 0, toRead, offset);\n      if (got <= 0) break;\n      const chunk = carry + buf.toString(\"utf8\", 0, got);\n\n      // Agent match wins.\n      for (const marker of markers) {\n        if (chunk.includes(marker)) {\n          fileDecisionCache.set(key, true);\n          return true;\n        }\n      }\n\n      // If we see ANY entrypoint field, it's per-conversation and stable —\n      // since none of the agent markers matched, this is a non-agent file.\n      // Stops 11 MB human JSONLs from being read in full.\n      if (chunk.includes(ENTRYPOINT_PROBE)) {\n        fileDecisionCache.set(key, false);\n        return false;\n      }\n\n      carry = chunk.slice(-CHUNK_OVERLAP);\n      offset += got;\n    }\n\n    fileDecisionCache.set(key, false);\n    return false;\n  } catch {\n    return false;\n  } finally {\n    closeSync(fd);\n  }\n}\n\n// Comma-separated parser. Empty string → empty set (agents shown in practice\n// even when includeAgents=false, since no entrypoint qualifies).\nexport function parseAgentEntrypointsEnv(raw: string | undefined): ReadonlySet<string> {\n  if (raw === undefined) return DEFAULT_AGENT_ENTRYPOINTS;\n  const parts = raw\n    .split(\",\")\n    .map((s) => s.trim())\n    .filter((s) => s.length > 0);\n  return new Set(parts);\n}\n\nexport function clearAgentFileCacheForTests(): void {\n  fileDecisionCache.clear();\n}\n","import { normalize } from \"path\";\n\n/**\n * File-path identity across the scanner/cache boundary.\n *\n * Two path forms exist in this process and they are NOT interchangeable on\n * Windows:\n *\n *   - **canonical** (forward slashes) — every cache key: conversation_meta\n *     .file_path, the fileIndex, watcher keys, externalTails.\n *   - **native** (the platform separator) — what the scanner emits in\n *     ConversationMeta.filePath, and what chokidar delivers.\n *\n * Both writers of conversation_meta.file_path (upsertFull, insertSkeleton)\n * store the canonical form, so the storage invariant is \"cache keys are always\n * canonical\". The scanner has no such rule: it emits native paths, verified by\n * measurement on win32.\n *\n * The rule when the two meet: **normalize for the comparison, emit in the\n * consumer's form.** Canonicalize both sides to join them, then key the result\n * with whichever form the code receiving it will look up by. Joining a\n * scanner-derived path against a cache-derived one without normalizing fails\n * silently — an empty map or a false, never an exception — and is invisible on\n * POSIX, where the two forms are identical.\n */\n\n/**\n * Canonicalize a path for use as a cache/DB/watcher key.\n *\n * Rules:\n *   - Trim surrounding whitespace\n *   - Convert backslashes to forward slashes\n *\n * Do NOT lowercase: even on case-insensitive Windows filesystems, lowercasing\n * would diverge the key from the scanner's case-preserved file_path. Only the\n * separator is normalized; case is preserved.\n */\nexport function canonicalizeFilePath(filePath: string): string {\n  return filePath.trim().replace(/\\\\/g, \"/\");\n}\n\n/**\n * Convert a canonical path back to the platform-native form.\n *\n * Use only when handing a path *back* to something that keys by native paths —\n * in practice the scanner's statCache, whose entries it looks up by its own\n * ConversationMeta.filePath. A no-op on POSIX; on win32 `normalize` rewrites\n * forward slashes to backslashes.\n */\nexport function toNativeFilePath(filePath: string): string {\n  return normalize(filePath.trim());\n}\n\n/**\n * Build the canonical live-path set that `reconcileDeletions` compares against\n * `conversation_meta.file_path`.\n *\n * Exists as a named function rather than an inline `.map()` so the conversion\n * has one place to be tested and one place to be got wrong: the scanner's\n * filePath is native, the rows it is checked against are canonical, and a\n * missed conversion here means every row falls through to the existsSync\n * backstop instead of being recognised as live.\n */\nexport function canonicalLivePathSet(metas: Iterable<{ filePath?: string | null }>): Set<string> {\n  const live = new Set<string>();\n  for (const meta of metas) {\n    if (meta.filePath) live.add(canonicalizeFilePath(meta.filePath));\n  }\n  return live;\n}\n\n/**\n * Join scanner metadata against canonically-keyed stat rows, producing the map\n * the scanner expects back as `statCache`.\n *\n * This is the boundary rule made concrete: the lookup is done in canonical\n * form (because that is how the rows are keyed) while the result is keyed by\n * the meta's own native path (because that is what the scanner looks up by).\n * Getting either half wrong yields an empty or unusable map and silently\n * disables the scanner's stat cache — no error, just a full re-parse of every\n * conversation on every rescan.\n */\nexport function joinStatCacheByNativePath<TStat, TMeta extends { filePath?: string | null }>(\n  metas: Iterable<TMeta>,\n  canonicalStats: Map<string, TStat>,\n): Map<string, { stat: TStat; meta: TMeta }> {\n  const joined = new Map<string, { stat: TStat; meta: TMeta }>();\n  for (const meta of metas) {\n    if (!meta.filePath) continue;\n    const stat = canonicalStats.get(canonicalizeFilePath(meta.filePath));\n    if (stat) joined.set(meta.filePath, { stat, meta });\n  }\n  return joined;\n}\n","import { createHash } from \"crypto\";\nimport type { Stats } from \"fs\";\n\n/**\n * Stable identity for a JSONL file, used to detect replacement (a new file at\n * the same path) vs. mere growth. Prefer the inode (dev:ino) — cheap and exact.\n * When the inode is unavailable (ino === 0, e.g. some network/virtual FS), fall\n * back to a fingerprint of the first bytes supplied by the caller.\n */\nexport function fileIdentity(stat: Pick<Stats, \"dev\" | \"ino\">, headBytes?: Buffer): string {\n  if (stat.ino && stat.ino > 0) return `inode:${stat.dev}:${stat.ino}`;\n  const head = headBytes ?? Buffer.alloc(0);\n  return `fp:${createHash(\"sha1\").update(head).digest(\"hex\")}`;\n}\n\nexport interface LineSpan {\n  /** Absolute byte offset of the line's first byte in the file. */\n  byteOffset: number;\n  /** Byte length of the line content, excluding the trailing \"\\n\". */\n  byteLength: number;\n  /** The decoded line text (no trailing \"\\n\"). */\n  text: string;\n}\n\nexport interface SplitResult {\n  spans: LineSpan[];\n  /**\n   * Bytes consumed = up to and including the last \"\\n\" in `buf`. A trailing\n   * partial line (no newline yet) is NOT consumed, so the caller's byte offset\n   * never advances past an incomplete line. Those bytes arrive again, whole, on\n   * the next read.\n   */\n  consumed: number;\n}\n\n/**\n * Split a buffer of appended bytes into complete-line spans with absolute byte\n * offsets. `baseOffset` is the file position of `buf`'s first byte.\n *\n * Only lines terminated by \"\\n\" produce a span; the remainder after the final\n * newline is left for the next read (torn-write safety, design §7.5 #4). Empty\n * lines (a bare \"\\n\") produce no span but are still consumed.\n */\nexport function splitCompleteLines(buf: Buffer, baseOffset: number): SplitResult {\n  const spans: LineSpan[] = [];\n  let lineStart = 0; // index within buf where the current line begins\n  let consumed = 0;\n\n  for (let i = 0; i < buf.length; i++) {\n    if (buf[i] !== 0x0a) continue; // \"\\n\"\n    const lineLen = i - lineStart; // excludes the newline\n    if (lineLen > 0) {\n      spans.push({\n        byteOffset: baseOffset + lineStart,\n        byteLength: lineLen,\n        text: buf.toString(\"utf-8\", lineStart, i),\n      });\n    }\n    lineStart = i + 1;\n    consumed = lineStart; // up to and including this \"\\n\"\n  }\n\n  return { spans, consumed };\n}\n","import {\n  type ConversationMessage,\n  type ConversationMeta,\n  createJsonlParseState,\n  type FileStatEntry,\n  type JsonlParseState,\n  parseCodexJsonlLine,\n  parseCursorJsonlLine,\n  parseJsonlLine,\n} from \"@threadbase-sh/scanner\";\nimport Database from \"better-sqlite3\";\nimport { closeSync, existsSync, mkdirSync, openSync, readSync, type Stats, statSync } from \"fs\";\nimport { open as openAsync } from \"fs/promises\";\nimport { dirname } from \"path\";\nimport { setImmediate as yieldToEventLoop } from \"timers/promises\";\nimport { instrumentDatabase, labelStatements } from \"./db/query-timing\";\nimport { runSqliteMigrations } from \"./db/sqlite-migrate\";\nimport { getLogger } from \"./logger\";\nimport {\n  CLAUDE_CODE_PROVIDER,\n  CODEX_CLI_PROVIDER,\n  CURSOR_PROVIDER,\n  canonicalizeProviderName,\n  LEGACY_CURSOR_PROVIDER,\n  type ProviderName,\n} from \"./providers\";\nimport {\n  ConversationClassifier,\n  classifyConversationFile,\n} from \"./services/conversations/classification\";\nimport {\n  DEFAULT_AGENT_ENTRYPOINTS,\n  isAgentFile,\n  isAgentLine,\n} from \"./services/conversations/isAgentConversation\";\nimport { canonicalizeFilePath } from \"./utils/canonicalizeFilePath\";\nimport { isLeadingInjectedContext } from \"./utils/codexConversationLine\";\nimport { fileIdentity, type LineSpan, splitCompleteLines } from \"./utils/fileIdentity\";\n\nexport interface ConversationCacheOptions {\n  includeSubagentSessions?: boolean;\n  // When true, drop conversations whose JSONL came from an agent entrypoint.\n  // Default false to preserve legacy behavior.\n  filterAgentConversations?: boolean;\n  // Set of `entrypoint` values to treat as agent traffic. Defaults to\n  // DEFAULT_AGENT_ENTRYPOINTS ({ sdk-cli, sdk-py, claude-vscode }).\n  agentEntrypoints?: ReadonlySet<string>;\n  // Fired the first time an agent JSONL is detected for a given file path\n  // (from updateFromLine). Lets the server unwatch the file.\n  onAgentFileDetected?: (filePath: string) => void;\n}\n\nexport interface ConversationListItem {\n  hasMessages?: boolean | null;\n  isSubagent?: boolean | null;\n  parentConversationId?: string | null;\n  id: string;\n  filePath: string;\n  projectId: string | null;\n  projectPath: string | null;\n  projectName: string | null;\n  title: string | null;\n  model: string | null;\n  account: string | null;\n  branch: string | null;\n  messageCount: number;\n  lastActivity: string;\n  firstMessage: string | null;\n  lastMessage: string | null;\n  preview: string | null;\n  source: string | null;\n  provider: ProviderName;\n  isImportedFromClaude: boolean;\n  isImportedFromCodex: boolean;\n  isImportedFromCursor: boolean;\n  /** ISO timestamp if soft-deleted from the cache, else null. The JSONL is untouched. */\n  deletedAt: string | null;\n}\n\nexport type ConversationInclude = \"all\" | \"conversations\" | \"subagents\";\n\nexport interface ConversationListFilters {\n  project?: string;\n  provider?: string;\n  include?: ConversationInclude;\n  isImportedFromClaude?: boolean;\n  isImportedFromCodex?: boolean;\n  isImportedFromCursor?: boolean;\n}\n\nexport interface CachedTailMessage {\n  role: string;\n  timestamp: string;\n  text: string;\n  content?: unknown[];\n}\n\nexport interface CachedTail {\n  conversationId: string;\n  messages: CachedTailMessage[];\n  tailSize: number;\n}\n\n/** A row of `conversation_file_state` — per-file offset-index resume state. */\nexport interface FileStateRow {\n  path: string;\n  identity: string;\n  size: number;\n  mtime_ms: number;\n  byte_offset: number;\n  last_message_index: number;\n}\n\n/** A row of `conversation_message_index` — one indexed message's byte span. */\nexport interface MessageIndexRow {\n  conversation_id: string;\n  message_index: number;\n  byte_offset: number;\n  byte_length: number;\n  uuid: string | null;\n  role: string | null;\n  ts: number | null;\n}\n\nexport interface ScannerMeta {\n  id: string;\n  sessionId?: string;\n  filePath: string;\n  projectPath?: string;\n  projectName?: string;\n  title?: string;\n  // The scanner emits the derived conversation name as `sessionName`; the cache\n  // stores it in the `title` column. Callers pass the scanner's ConversationMeta\n  // directly, so accept both here and prefer sessionName when title is absent.\n  sessionName?: string;\n  model?: string;\n  account?: string;\n  gitBranch?: string;\n  messageCount?: number;\n  timestamp?: string;\n  firstMessage?: unknown;\n  lastMessage?: unknown;\n  preview?: string;\n  provider?: ProviderName;\n  isImportedFromClaude?: boolean;\n  isImportedFromCodex?: boolean;\n  isImportedFromCursor?: boolean;\n}\n\ninterface MetaRow {\n  has_messages: number | null;\n  is_subagent: number | null;\n  parent_conversation_id: string | null;\n  id: string;\n  file_path: string;\n  project_id: string | null;\n  project_path: string | null;\n  project_name: string | null;\n  title: string | null;\n  model: string | null;\n  account: string | null;\n  branch: string | null;\n  message_count: number;\n  last_activity: number | null;\n  first_message: string | null;\n  last_message: string | null;\n  preview: string | null;\n  source: string | null;\n  provider: ProviderName;\n  updated_at: number;\n  scanner_meta_json: string | null;\n  is_imported_from_claude: number;\n  is_imported_from_codex: number;\n  is_imported_from_cursor: number;\n  deleted_at: number | null;\n}\n\ninterface TailRow {\n  conversation_id: string;\n  messages_json: string;\n  tail_size: number;\n  updated_at: number;\n}\n\ntype ContentBlock = { type: string; text?: string; [key: string]: unknown };\n\ninterface JsonlLine {\n  role?: string;\n  type?: string;\n  timestamp?: string;\n  // Set by Claude Code / Agent SDK on every real message line. \"cli\" = human\n  // interactive Claude Code; \"sdk-cli\"/\"sdk-py\" = Claude Agent SDK / claude-mem /\n  // hooks.\n  entrypoint?: string;\n  // Project context: the scanner sets `cwd` from any line that carries it\n  // (attachment, metadata, user, assistant). The live watcher must do the\n  // same — otherwise skeleton rows persist with NULL project_path.\n  cwd?: string;\n  slug?: string;\n  // Real Claude JSONL emits either an array of blocks or a raw string. Normalize\n  // via `normalizeContent` before consuming.\n  content?: ContentBlock[] | string;\n  message?: {\n    role?: string;\n    content?: ContentBlock[] | string;\n  };\n}\n\n// Last three path segments — mirrors @threadbase-sh/scanner's\n// `getShortProjectName`. Inlined here because the scanner does not export it.\nfunction shortProjectName(fullPath: string): string {\n  const parts = fullPath.split(/[/\\\\]/).filter(Boolean);\n  return parts.slice(-3).join(\"/\");\n}\n\nfunction normalizeContent(raw: ContentBlock[] | string | null | undefined): ContentBlock[] {\n  if (Array.isArray(raw)) return raw;\n  if (typeof raw === \"string\") return [{ type: \"text\", text: raw }];\n  return [];\n}\n\nconst SCHEMA = `\nCREATE TABLE IF NOT EXISTS conversation_meta (\n  id            TEXT PRIMARY KEY,\n  file_path     TEXT NOT NULL,\n  project_path  TEXT,\n  project_name  TEXT,\n  title         TEXT,\n  model         TEXT,\n  account       TEXT,\n  branch        TEXT,\n  message_count INTEGER DEFAULT 0,\n  last_activity INTEGER,\n  first_message TEXT,\n  last_message  TEXT,\n  preview       TEXT,\n  updated_at    INTEGER NOT NULL\n);\nCREATE INDEX IF NOT EXISTS idx_meta_last_activity ON conversation_meta(last_activity DESC);\nCREATE INDEX IF NOT EXISTS idx_meta_project ON conversation_meta(project_path);\nCREATE INDEX IF NOT EXISTS idx_meta_file_path ON conversation_meta(file_path);\n\nCREATE TABLE IF NOT EXISTS conversation_tail (\n  conversation_id TEXT PRIMARY KEY REFERENCES conversation_meta(id) ON DELETE CASCADE,\n  messages_json   TEXT NOT NULL,\n  tail_size       INTEGER NOT NULL,\n  updated_at      INTEGER NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS session_names (\n  session_id  TEXT PRIMARY KEY,\n  name        TEXT NOT NULL,\n  updated_at  INTEGER NOT NULL\n);\n`;\n\nconst cacheLog = getLogger(\"cache\");\n\n// Messages read before a window's start, solely to build parse state that is\n// then discarded. Tool_use -> tool_result distance measures p50 1 and max 4\n// across sampled Claude transcripts; 8 is slack, and each extra row is one\n// byte-range read out of an index we already consulted.\nconst PARSE_STATE_LOOKBACK = 8;\n\nexport class ConversationCache {\n  private classifiers = new Map<string, ConversationClassifier>();\n  readonly includeSubagentSessions: boolean;\n  private classifyFull: Database.Statement;\n  private classifyAppend: Database.Statement;\n  private fileAliases: Database.Statement;\n  private db: Database.Database;\n  private tailSize: number;\n  private fileIndex = new Map<string, string>();\n  private fileIndexLoaded = false;\n  // Per-file scanner parse state for the incremental offset-index writer. The\n  // reducer is stateful across lines (pending tool_uses, latest timestamp), so\n  // it must persist between watcher reads of the same file. Cleared on\n  // truncation/backfill.\n  private indexParseState = new Map<string, JsonlParseState>();\n  // Single-flight guard for backfillIndex — concurrent detail requests for the\n  // same cold file await one walk, not N. Entry dropped on settle.\n  private backfillInFlight = new Map<string, Promise<void>>();\n  // Monotonically increasing counter for tail updated_at — guarantees strict\n  // ordering even when multiple updateFromLine() calls land within the same ms.\n  private tailSeq = Date.now();\n  // Monotonically increasing counter for session_names updated_at.\n  private nameSeq = Date.now();\n\n  private stmts: {\n    getById: Database.Statement;\n    getFullById: Database.Statement;\n    updateMeta: Database.Statement;\n    updateMetaBatch: Database.Statement;\n    insertSkeleton: Database.Statement;\n    backfillSkeletonProject: Database.Statement;\n    upsertFull: Database.Statement;\n    getTail: Database.Statement;\n    hasTail: Database.Statement;\n    upsertTail: Database.Statement;\n    list: Database.Statement;\n    count: Database.Statement;\n    listByProject: Database.Statement;\n    countByProject: Database.Statement;\n    listByProvider: Database.Statement;\n    countByProvider: Database.Statement;\n    deleteById: Database.Statement;\n    softDeleteById: Database.Statement;\n    deleteTailById: Database.Statement;\n    deleteAll: Database.Statement;\n    deleteTailAll: Database.Statement;\n    getIdByFilePath: Database.Statement;\n    getProviderByFilePath: Database.Statement;\n    allFilePaths: Database.Statement;\n    allFilePathsWithTitle: Database.Statement;\n    countAllRows: Database.Statement;\n    allFileStats: Database.Statement;\n    allScannerStatCacheRows: Database.Statement;\n    updateScannerCache: Database.Statement;\n    getFileMetadata: Database.Statement;\n    upsertFileMetadata: Database.Statement;\n    upsertSessionName: Database.Statement;\n    getSessionName: Database.Statement;\n    listSessionNames: Database.Statement;\n    setConversationProjectId: Database.Statement;\n    markAsStreamer: Database.Statement;\n    getLatestConversation: Database.Statement;\n    listConversationsForProjectBackfill: Database.Statement;\n    hasOrphanProjectId: Database.Statement;\n    popularProjects: Database.Statement;\n    projectSummaries: Database.Statement;\n    projectSummaryCount: Database.Statement;\n    getFileState: Database.Statement;\n    upsertFileState: Database.Statement;\n    deleteFileState: Database.Statement;\n    deleteMessageIndex: Database.Statement;\n    insertMessageIndexRow: Database.Statement;\n    getMessageIndexWindow: Database.Statement;\n    getIndexedMessageCount: Database.Statement;\n  };\n\n  private migrationsDir?: string;\n\n  // When true, ingestion drops conversations whose JSONL `entrypoint` belongs\n  // to `agentEntrypoints`. See isAgentConversation.ts.\n  private filterAgentConversations = false;\n  private agentEntrypoints: ReadonlySet<string> = DEFAULT_AGENT_ENTRYPOINTS;\n  private onAgentFileDetected?: (filePath: string) => void;\n\n  private constructor(\n    db: Database.Database,\n    tailSize: number,\n    migrationsDir?: string,\n    options?: ConversationCacheOptions,\n  ) {\n    this.migrationsDir = migrationsDir;\n    this.db = db;\n    this.tailSize = tailSize;\n    this.includeSubagentSessions = options?.includeSubagentSessions ?? false;\n    this.filterAgentConversations = options?.filterAgentConversations ?? false;\n    this.agentEntrypoints = options?.agentEntrypoints ?? DEFAULT_AGENT_ENTRYPOINTS;\n    this.onAgentFileDetected = options?.onAgentFileDetected;\n    db.exec(SCHEMA);\n    runSqliteMigrations(db, this.migrationsDir);\n    this.fileAliases = db.prepare(\n      \"SELECT id FROM conversation_meta WHERE file_path = ? AND id != ?\",\n    );\n    this.classifyFull = db.prepare(\n      `UPDATE conversation_meta SET has_messages = ?, is_subagent = ?, parent_conversation_id = ? WHERE id = ?`,\n    );\n    this.classifyAppend = db.prepare(`UPDATE conversation_meta SET\n      has_messages = CASE WHEN ? = 1 THEN 1 ELSE has_messages END,\n      is_subagent = ?, parent_conversation_id = ?, provider = ? WHERE id = ?`);\n    // Exactly the columns listConversations' row mapper reads. `SELECT *` also\n    // pulled scanner_meta_json, which averages 5.7 KB per row — 3.5 MB of the\n    // 4.5 MB this table occupies — and is never read on this path: roughly\n    // 285 KB marshalled into V8 strings and discarded per 50-row page.\n    // Measured on a 22 MB cache: 0.38 ms with it, 0.03 ms without.\n    //\n    // getFullById deliberately keeps `SELECT *`: it is a single row by primary\n    // key and its callers want every column.\n    const LIST_COLUMNS =\n      \"id, file_path, project_id, project_path, project_name, title, model, account, branch, message_count, last_activity, first_message, last_message, preview, source, provider, has_messages, is_subagent, parent_conversation_id, is_imported_from_claude, is_imported_from_codex, is_imported_from_cursor\";\n    const visible = `has_messages IS NOT 0 AND deleted_at IS NULL${this.includeSubagentSessions ? \"\" : \" AND is_subagent IS NOT 1\"}`;\n    this.stmts = {\n      getById: db.prepare(\"SELECT id FROM conversation_meta WHERE id = ?\"),\n      getFullById: db.prepare(\"SELECT * FROM conversation_meta WHERE id = ?\"),\n      updateMeta: db.prepare(\n        \"UPDATE conversation_meta SET message_count = message_count + 1, last_activity = ?, last_message = ?, updated_at = ? WHERE id = ?\",\n      ),\n      // Batch equivalent of updateMeta: bumps message_count by N in one write\n      // (used by updateFromLines so a burst of appended lines is one UPDATE).\n      // last_activity/last_message only move FORWARD: a batch whose newest line\n      // predates the stored last_activity (interleaved writers appending an older\n      // line) must not drag the metadata backward. message_count and updated_at\n      // still advance — a real message was appended and the row did change.\n      updateMetaBatch: db.prepare(\n        `UPDATE conversation_meta SET\n           message_count = message_count + @inc,\n           last_activity = CASE WHEN @last_activity > IFNULL(last_activity, -1)\n                                THEN @last_activity ELSE last_activity END,\n           last_message  = CASE WHEN @last_activity > IFNULL(last_activity, -1)\n                                THEN @last_message ELSE last_message END,\n           updated_at    = @updated_at\n         WHERE id = @id`,\n      ),\n      insertSkeleton: db.prepare(\n        \"INSERT OR IGNORE INTO conversation_meta (id, file_path, message_count, updated_at) VALUES (?, ?, 1, ?)\",\n      ),\n      // Fills project_path / project_name / title on a row whose columns are\n      // still NULL. Never overwrites scanner-populated values — the scanner's\n      // upsertFromScannerMeta remains authoritative for those columns.\n      backfillSkeletonProject: db.prepare(\n        `UPDATE conversation_meta\n         SET project_path = COALESCE(project_path, @project_path),\n             project_name = COALESCE(project_name, @project_name),\n             title        = COALESCE(title,        @title)\n         WHERE id = @id\n           AND (project_path IS NULL OR project_name IS NULL OR title IS NULL)`,\n      ),\n      upsertFull: db.prepare(`\n        INSERT INTO conversation_meta\n          (id, file_path, project_path, project_name, title, model, account, branch,\n           message_count, last_activity, first_message, last_message, preview, updated_at,\n           mtime_ms, file_size, provider, scanner_meta_json,\n           is_imported_from_claude, is_imported_from_codex, is_imported_from_cursor)\n        VALUES\n          (@id, @file_path, @project_path, @project_name, @title, @model, @account, @branch,\n           @message_count, @last_activity, @first_message, @last_message, @preview, @updated_at,\n           @mtime_ms, @file_size, @provider, @scanner_meta_json,\n           @is_imported_from_claude, @is_imported_from_codex, @is_imported_from_cursor)\n        ON CONFLICT(id) DO UPDATE SET\n          file_path     = excluded.file_path,\n          project_path  = excluded.project_path,\n          project_name  = excluded.project_name,\n          title         = excluded.title,\n          model         = excluded.model,\n          account       = excluded.account,\n          branch        = excluded.branch,\n          -- message_count is incremented by live tailing but recounted from\n          -- scratch by a scanner rescan; a stale rescan must not carry a live\n          -- session's count backwards, so take the max instead of overwriting.\n          message_count = MAX(conversation_meta.message_count, excluded.message_count),\n          last_activity = excluded.last_activity,\n          first_message = excluded.first_message,\n          last_message  = excluded.last_message,\n          preview       = excluded.preview,\n          updated_at    = excluded.updated_at,\n          mtime_ms      = excluded.mtime_ms,\n          file_size     = excluded.file_size,\n          provider      = excluded.provider,\n          scanner_meta_json = excluded.scanner_meta_json,\n          is_imported_from_claude = excluded.is_imported_from_claude,\n          is_imported_from_codex = excluded.is_imported_from_codex,\n          is_imported_from_cursor = excluded.is_imported_from_cursor\n        WHERE conversation_meta.updated_at < excluded.updated_at\n      `),\n      getTail: db.prepare(\"SELECT * FROM conversation_tail WHERE conversation_id = ?\"),\n      hasTail: db.prepare(\"SELECT 1 FROM conversation_tail WHERE conversation_id = ? LIMIT 1\"),\n      upsertTail: db.prepare(`\n        INSERT INTO conversation_tail (conversation_id, messages_json, tail_size, updated_at)\n        VALUES (?, ?, ?, ?)\n        ON CONFLICT(conversation_id) DO UPDATE SET\n          messages_json = excluded.messages_json,\n          tail_size     = excluded.tail_size,\n          updated_at    = excluded.updated_at\n        WHERE conversation_tail.updated_at < excluded.updated_at\n      `),\n      list: db.prepare(\n        `SELECT ${LIST_COLUMNS} FROM conversation_meta WHERE ${visible} ORDER BY last_activity DESC LIMIT ? OFFSET ?`,\n      ),\n      count: db.prepare(`SELECT COUNT(*) as n FROM conversation_meta WHERE ${visible}`),\n      listByProject: db.prepare(\n        `SELECT ${LIST_COLUMNS} FROM conversation_meta WHERE ${visible} AND project_path = ? ORDER BY last_activity DESC LIMIT ? OFFSET ?`,\n      ),\n      countByProject: db.prepare(\n        `SELECT COUNT(*) as n FROM conversation_meta WHERE ${visible} AND project_path = ?`,\n      ),\n      listByProvider: db.prepare(\n        `SELECT ${LIST_COLUMNS} FROM conversation_meta WHERE ${visible} AND provider = ? ORDER BY last_activity DESC LIMIT ? OFFSET ?`,\n      ),\n      countByProvider: db.prepare(\n        `SELECT COUNT(*) as n FROM conversation_meta WHERE ${visible} AND provider = ?`,\n      ),\n      deleteById: db.prepare(\"DELETE FROM conversation_meta WHERE id = ?\"),\n      // Only sets it the first time — a repeat call is a no-op (`changes`\n      // reports 0), not a second, later timestamp.\n      softDeleteById: db.prepare(\n        \"UPDATE conversation_meta SET deleted_at = ? WHERE id = ? AND deleted_at IS NULL\",\n      ),\n      deleteTailById: db.prepare(\"DELETE FROM conversation_tail WHERE conversation_id = ?\"),\n      deleteAll: db.prepare(\"DELETE FROM conversation_meta\"),\n      deleteTailAll: db.prepare(\"DELETE FROM conversation_tail\"),\n      getIdByFilePath: db.prepare(\"SELECT id FROM conversation_meta WHERE file_path = ?\"),\n      getProviderByFilePath: db.prepare(\n        \"SELECT provider FROM conversation_meta WHERE file_path = ?\",\n      ),\n      allFilePaths: db.prepare(\"SELECT id, file_path FROM conversation_meta\"),\n      allFilePathsWithTitle: db.prepare(\"SELECT id, file_path, title FROM conversation_meta\"),\n      countAllRows: db.prepare(\"SELECT COUNT(*) AS n FROM conversation_meta\"),\n      allFileStats: db.prepare(\n        \"SELECT file_path, mtime_ms, file_size FROM conversation_meta WHERE mtime_ms IS NOT NULL AND file_size IS NOT NULL\",\n      ),\n      allScannerStatCacheRows: db.prepare(\n        \"SELECT file_path, mtime_ms, file_size, scanner_meta_json FROM conversation_meta WHERE mtime_ms IS NOT NULL AND file_size IS NOT NULL AND scanner_meta_json IS NOT NULL\",\n      ),\n      updateScannerCache: db.prepare(\n        \"UPDATE conversation_meta SET mtime_ms = ?, file_size = ?, scanner_meta_json = ? WHERE id = ?\",\n      ),\n      getFileMetadata: db.prepare(\n        \"SELECT mtime_ms, file_size, is_agent, agent_entrypoints_key FROM conversation_file_metadata WHERE file_path = ?\",\n      ),\n      upsertFileMetadata: db.prepare(`\n        INSERT INTO conversation_file_metadata\n          (file_path, mtime_ms, file_size, is_agent, agent_entrypoints_key, updated_at)\n        VALUES\n          (@file_path, @mtime_ms, @file_size, @is_agent, @agent_entrypoints_key, @updated_at)\n        ON CONFLICT(file_path) DO UPDATE SET\n          mtime_ms = excluded.mtime_ms,\n          file_size = excluded.file_size,\n          is_agent = excluded.is_agent,\n          agent_entrypoints_key = excluded.agent_entrypoints_key,\n          updated_at = excluded.updated_at\n      `),\n      upsertSessionName: db.prepare(`\n        INSERT INTO session_names (session_id, name, updated_at)\n        VALUES (?, ?, ?)\n        ON CONFLICT(session_id) DO UPDATE SET\n          name       = excluded.name,\n          updated_at = excluded.updated_at\n        WHERE session_names.updated_at < excluded.updated_at\n      `),\n      getSessionName: db.prepare(\"SELECT name FROM session_names WHERE session_id = ?\"),\n      listSessionNames: db.prepare(\"SELECT session_id, name FROM session_names\"),\n      setConversationProjectId: db.prepare(\n        \"UPDATE conversation_meta SET project_id = ? WHERE id = ?\",\n      ),\n      markAsStreamer: db.prepare(\"UPDATE conversation_meta SET source = 'streamer' WHERE id = ?\"),\n      getLatestConversation: db.prepare(\n        `SELECT id, last_activity FROM conversation_meta WHERE ${visible} AND last_activity IS NOT NULL ORDER BY last_activity DESC, id DESC LIMIT 1`,\n      ),\n      listConversationsForProjectBackfill: db.prepare(\n        \"SELECT id, project_path, project_id, last_activity FROM conversation_meta WHERE project_path IS NOT NULL\",\n      ),\n      hasOrphanProjectId: db.prepare(\n        \"SELECT 1 FROM conversation_meta WHERE project_id IS NULL AND project_path IS NOT NULL AND project_path != '' LIMIT 1\",\n      ),\n      popularProjects: db.prepare(\n        `SELECT project_path, project_name, COUNT(*) as cnt\n         FROM conversation_meta\n         WHERE ${visible} AND project_path IS NOT NULL\n         GROUP BY project_path\n         ORDER BY cnt DESC\n         LIMIT ?`,\n      ),\n      // Same table, same rows and same NULL filter /api/conversations lists\n      // from, so a group's count/last-activity can never disagree with the\n      // page it opens. Bare project_name is the one from the MAX(last_activity)\n      // row (SQLite's documented min/max-aggregate bare-column rule).\n      projectSummaries: db.prepare(\n        `SELECT project_path, project_name, COUNT(*) as cnt, MAX(last_activity) as latest\n         FROM conversation_meta\n         WHERE ${visible} AND project_path IS NOT NULL\n         GROUP BY project_path\n         ORDER BY latest DESC, project_path ASC\n         LIMIT ? OFFSET ?`,\n      ),\n      projectSummaryCount: db.prepare(\n        `SELECT COUNT(DISTINCT project_path) as n FROM conversation_meta WHERE ${visible} AND project_path IS NOT NULL`,\n      ),\n      getFileState: db.prepare(\"SELECT * FROM conversation_file_state WHERE path = ?\"),\n      upsertFileState: db.prepare(\n        `INSERT INTO conversation_file_state\n           (path, identity, size, mtime_ms, byte_offset, last_message_index)\n         VALUES (@path, @identity, @size, @mtime_ms, @byte_offset, @last_message_index)\n         ON CONFLICT(path) DO UPDATE SET\n           identity           = excluded.identity,\n           size               = excluded.size,\n           mtime_ms           = excluded.mtime_ms,\n           byte_offset        = excluded.byte_offset,\n           last_message_index = excluded.last_message_index`,\n      ),\n      deleteFileState: db.prepare(\"DELETE FROM conversation_file_state WHERE path = ?\"),\n      deleteMessageIndex: db.prepare(\n        \"DELETE FROM conversation_message_index WHERE conversation_id = ?\",\n      ),\n      insertMessageIndexRow: db.prepare(\n        `INSERT INTO conversation_message_index\n           (conversation_id, message_index, byte_offset, byte_length, uuid, role, ts)\n         VALUES (@conversation_id, @message_index, @byte_offset, @byte_length, @uuid, @role, @ts)\n         ON CONFLICT(conversation_id, message_index) DO UPDATE SET\n           byte_offset = excluded.byte_offset,\n           byte_length = excluded.byte_length,\n           uuid        = excluded.uuid,\n           role        = excluded.role,\n           ts          = excluded.ts`,\n      ),\n      getMessageIndexWindow: db.prepare(\n        `SELECT message_index, byte_offset, byte_length, uuid, role, ts\n         FROM conversation_message_index\n         WHERE conversation_id = ? AND message_index >= ? AND message_index < ?\n         ORDER BY message_index ASC`,\n      ),\n      getIndexedMessageCount: db.prepare(\n        \"SELECT COUNT(*) as cnt FROM conversation_message_index WHERE conversation_id = ?\",\n      ),\n    };\n    // Name every statement above after its key, so a slow-query line says\n    // `getMessageIndexWindow` and not `select:conversation_message_index`.\n    labelStatements(this.stmts);\n  }\n\n  /**\n   * Expose the underlying handle so projects/cache_metadata repositories can\n   * share the same connection. Internal API; not part of the public surface.\n   */\n  getDatabase(): Database.Database {\n    return this.db;\n  }\n\n  // ── Offset index (design 1b) ────────────────────────────────────────────\n  // conversation_file_state + conversation_message_index back the windowed\n  // detail read path (SQL window select + pread of byte ranges). All methods\n  // are thin wrappers over the prepared statements above.\n\n  getFileState(path: string): FileStateRow | null {\n    return (this.stmts.getFileState.get(path) as FileStateRow | undefined) ?? null;\n  }\n\n  upsertFileState(row: FileStateRow): void {\n    this.stmts.upsertFileState.run(row);\n  }\n\n  /** Drop a file's index rows + file_state (truncation / identity change). */\n  deleteFileIndex(path: string, conversationId: string): void {\n    const tx = this.db.transaction(() => {\n      this.stmts.deleteMessageIndex.run(conversationId);\n      this.stmts.deleteFileState.run(path);\n    });\n    tx();\n    this.indexParseState.delete(path);\n  }\n\n  /** Append/replace index rows in one transaction. */\n  appendMessageIndexRows(rows: MessageIndexRow[]): void {\n    const tx = this.db.transaction((batch: MessageIndexRow[]) => {\n      for (const r of batch) this.stmts.insertMessageIndexRow.run(r);\n    });\n    tx(rows);\n  }\n\n  /** Rows for message_index in [fromIndex, toIndex), ordered ascending. */\n  getMessageIndexWindow(\n    conversationId: string,\n    fromIndex: number,\n    toIndex: number,\n  ): MessageIndexRow[] {\n    return this.stmts.getMessageIndexWindow.all(\n      conversationId,\n      fromIndex,\n      toIndex,\n    ) as MessageIndexRow[];\n  }\n\n  getIndexedMessageCount(conversationId: string): number {\n    return (this.stmts.getIndexedMessageCount.get(conversationId) as { cnt: number }).cnt;\n  }\n\n  /**\n   * Conversation id for a JSONL path — the filename stem (matches the pseudo-id\n   * updateFromLine derives and the uuid the detail read path resolves). The\n   * offset index keys on this so the window select and the cursor agree.\n   */\n  static conversationIdForFile(filePath: string): string {\n    return (\n      filePath\n        .split(/[/\\\\]/)\n        .pop()\n        ?.replace(/\\.jsonl$/, \"\") ?? filePath\n    );\n  }\n\n  /**\n   * The line reducer for `filePath`, or null when the file must not be indexed.\n   *\n   * Returning the parser and the eligibility together is deliberate: indexing a\n   * file with the wrong provider's reducer does not fail, it indexes ZERO\n   * messages and then serves empty windows for a real conversation — the\n   * silent-wrong-data bug hotfixed after 1.28.0. Making the caller ask for a\n   * parser rather than a boolean removes the arrangement where those two facts\n   * can disagree.\n   *\n   * Claude's reducer is stateful (`extractToolResultBlocks` resolves a\n   * tool_result's type from `pendingToolUses`), so its parser closes over one\n   * `JsonlParseState` per call site. Codex's is stateless — every discriminator\n   * lives on the single line — so it needs none, and a Codex window needs no\n   * lookback to be correct.\n   *\n   * Resolve by file_path, NOT by conversationIdForFile: codex rollout files are\n   * named rollout-<ts>-<uuid>.jsonl, so the filename stem is not the meta row's\n   * id and an id lookup silently misses. A file with no meta row at all is NOT\n   * indexable — provider unknown means indexing is unsafe; a later request\n   * backfills once the meta row exists.\n   * file_path is stored canonicalized (forward slashes), so the lookup key must\n   * be canonicalized too. Passing a native Windows path here matches no row,\n   * which reads as \"not indexable\" and silently disables the offset index for\n   * every conversation.\n   */\n  private lineParserFor(\n    filePath: string,\n    resumeState?: JsonlParseState,\n  ): {\n    parse: (text: string, index: number) => ConversationMessage | null;\n    state: JsonlParseState | null;\n  } | null {\n    const row = this.stmts.getProviderByFilePath.get(canonicalizeFilePath(filePath)) as\n      | { provider: string | null }\n      | undefined;\n    if (!row) return null;\n    // A newly discovered Cursor transcript is first tailed before the\n    // classifier updates conversation_meta.provider. Match the classifier's\n    // path rule here so that the first append cannot consume Cursor lines with\n    // Claude's reducer and advance the offset past them.\n    const provider =\n      (row.provider == null || row.provider === CLAUDE_CODE_PROVIDER) &&\n      /[/\\\\]agent-transcripts[/\\\\]/.test(filePath)\n        ? CURSOR_PROVIDER\n        : (row.provider ?? CLAUDE_CODE_PROVIDER);\n    if (provider === CODEX_CLI_PROVIDER) {\n      // The scanner's line parser is deliberately unfiltered — it is stateless, so\n      // it cannot know whether a line is the LEADING turn, which is the bound its\n      // own message counter applies. The index numbers messages itself, so the\n      // bound belongs here. Without it the index counts Codex's AGENTS.md /\n      // sandbox preamble that the detail handler drops, and the two end up\n      // numbering the same file differently — which is what #824 had to gate\n      // around.\n      //\n      // `index` is the message_index this line would receive, passed by both\n      // writers from persisted state (runBackfill's counter, extendMessageIndex's\n      // last_message_index + 1), so it stays correct when an append resumes\n      // mid-file. A closure counter would reset on resume and silently unbound\n      // the filter.\n      return {\n        parse: (text, index) => {\n          const msg = parseCodexJsonlLine(text);\n          if (!msg) return null;\n          return isLeadingInjectedContext(index, msg.role, msg.text) ? null : msg;\n        },\n        state: null,\n      };\n    }\n    if (provider === CURSOR_PROVIDER) {\n      return {\n        parse: (text, index) => parseCursorJsonlLine(text, index),\n        state: null,\n      };\n    }\n    if (provider !== CLAUDE_CODE_PROVIDER) return null;\n    // `state` is returned so the incremental writer can persist it per file:\n    // a later append must continue this reducer, not restart it.\n    const state = resumeState ?? createJsonlParseState();\n    // Claude has no injected-context filter, so it ignores `index`: its raw and\n    // served spaces have always been the same one.\n    return { parse: (text) => parseJsonlLine(text, state), state };\n  }\n\n  /**\n   * Incremental offset-index writer: extend the index for a burst of appended\n   * lines (one watcher read) using their byte spans. Each line is classified\n   * with the scanner's parseJsonlLine (a running per-file reducer state), so the\n   * message ordering can never drift from the scanner's. Message lines get an\n   * index row at the next message_index; non-message lines (summary/sidecar)\n   * get no row but still advance byte_offset. file_state is updated to the end\n   * of the last consumed span.\n   *\n   * Requires an up-to-date `stat` (identity/size/mtime) for the file so the read\n   * path can detect truncation/replacement.\n   *\n   * `readFrom` is the absolute byte offset the watcher read started at, and\n   * `endOffset` is where it ended (readFrom + consumed, i.e. the watcher's new\n   * entry.offset). CONTIGUITY GUARD: the read must begin exactly where the index\n   * left off (`readFrom === existing.byte_offset`, or 0 with no state). If it\n   * doesn't — the watcher attached at EOF after the server was down, or an\n   * append raced an in-flight backfill — extending would assign wrong\n   * message_index values over a hole. In that case this writes nothing and\n   * returns null so the caller drops the index and backfills.\n   *\n   * On success returns the message_index assigned to each input span (null for a\n   * non-message line) so the caller can stamp WS `seq`. Empty array when spans\n   * is empty. `endOffset` is stored verbatim as byte_offset so the watcher's\n   * offset and file_state.byte_offset are the same number by construction.\n   */\n  extendMessageIndex(\n    filePath: string,\n    spans: LineSpan[],\n    stat: Stats,\n    readFrom: number,\n    endOffset: number,\n  ): (number | null)[] | null {\n    // Non-indexable provider: write nothing, but return all-null seqs (not\n    // null) — a null return means \"decline\" and would send the caller into an\n    // endless drop-and-backfill loop for a file that can never be indexed.\n    const parser = this.lineParserFor(filePath, this.indexParseState.get(filePath));\n    if (!parser) return spans.map(() => null);\n\n    const existing = this.getFileState(filePath);\n    const expectedStart = existing?.byte_offset ?? 0;\n    // Non-contiguous read → the index would develop a hole with wrong indices.\n    // Decline; the caller drops + backfills.\n    if (readFrom !== expectedStart) return null;\n\n    if (spans.length === 0) return [];\n    const convId = ConversationCache.conversationIdForFile(filePath);\n\n    // Persist only once this call is going to consume the spans: a decline\n    // above must not leave a fresh reducer behind for the next read to resume\n    // from. Claude's reducer carries across watcher reads; Codex has no state\n    // to carry, and stores none.\n    if (parser.state) this.indexParseState.set(filePath, parser.state);\n\n    let nextIndex = existing ? existing.last_message_index + 1 : 0;\n    const rows: MessageIndexRow[] = [];\n    const seqs: (number | null)[] = [];\n\n    for (const span of spans) {\n      const msg = parser.parse(span.text, nextIndex);\n      if (!msg) {\n        seqs.push(null); // summary/sidecar/malformed → no index row, no seq\n        continue;\n      }\n      rows.push({\n        conversation_id: convId,\n        message_index: nextIndex,\n        byte_offset: span.byteOffset,\n        byte_length: span.byteLength,\n        uuid: msg.uuid ?? null,\n        role: msg.role ?? null,\n        ts: msg.timestamp ? Date.parse(msg.timestamp) || null : null,\n      });\n      seqs.push(nextIndex);\n      nextIndex++;\n    }\n\n    const tx = this.db.transaction(() => {\n      for (const r of rows) this.stmts.insertMessageIndexRow.run(r);\n      this.stmts.upsertFileState.run({\n        path: filePath,\n        identity: fileIdentity(stat),\n        size: stat.size,\n        mtime_ms: Math.round(stat.mtimeMs),\n        // Store the watcher's end offset verbatim — same number as entry.offset,\n        // so the next read's contiguity check compares like-for-like (never\n        // false-positive on a read that ended in trailing empty lines).\n        byte_offset: endOffset,\n        last_message_index: nextIndex - 1,\n      });\n    });\n    tx();\n    return seqs;\n  }\n\n  clearIndexParseState(filePath: string): void {\n    this.indexParseState.delete(filePath);\n  }\n\n  /**\n   * On-demand full backfill of the offset index for a file with no/stale\n   * file_state (cold conversation, or after a truncation/replacement). Rebuilds\n   * from byte 0: drops any existing rows, walks the whole file in chunks with a\n   * running parse state, yields to the event loop every ~1000 lines so a large\n   * file never blocks, and writes index rows + file_state.\n   *\n   * Single-flighted per path: concurrent callers await the same walk. The\n   * triggering detail request is served by the scanner fallback while this runs.\n   */\n  backfillIndex(filePath: string): Promise<void> {\n    const inFlight = this.backfillInFlight.get(filePath);\n    if (inFlight) return inFlight;\n    const walk = this.runBackfill(filePath).finally(() => {\n      this.backfillInFlight.delete(filePath);\n    });\n    this.backfillInFlight.set(filePath, walk);\n    return walk;\n  }\n\n  private async runBackfill(filePath: string): Promise<void> {\n    const startedAt = performance.now();\n    const convId = ConversationCache.conversationIdForFile(filePath);\n    // Reset any partial/stale state before rebuilding from scratch. For a\n    // non-indexable (non-claude) file the purge IS the whole job — it also\n    // heals a poisoned row left by a pre-hotfix backfill — so return before\n    // walking the file.\n    this.deleteFileIndex(filePath, convId);\n    this.indexParseState.delete(filePath);\n    const parser = this.lineParserFor(filePath);\n    if (!parser) return;\n\n    const CHUNK = 256 * 1024;\n    const YIELD_EVERY = 1000;\n    const fh = await openAsync(filePath, \"r\");\n    let fileOffset = 0; // absolute byte offset of `carry`'s first byte\n    let carry = Buffer.alloc(0); // bytes after the last \"\\n\" of the previous chunk\n    let nextIndex = 0;\n    let linesSinceYield = 0;\n    let lastConsumedEnd = 0; // absolute byte offset just past the last full line\n    let stat: Stats;\n\n    try {\n      stat = await fh.stat();\n      const buf = Buffer.alloc(CHUNK);\n      for (;;) {\n        const { bytesRead } = await fh.read(buf, 0, CHUNK, null);\n        if (bytesRead === 0) break;\n        const combined =\n          carry.length > 0\n            ? Buffer.concat([carry, buf.subarray(0, bytesRead)])\n            : buf.subarray(0, bytesRead);\n        const { spans, consumed } = splitCompleteLines(combined, fileOffset);\n\n        const rows: MessageIndexRow[] = [];\n        for (const span of spans) {\n          const msg = parser.parse(span.text, nextIndex);\n          linesSinceYield++;\n          if (msg) {\n            rows.push({\n              conversation_id: convId,\n              message_index: nextIndex,\n              byte_offset: span.byteOffset,\n              byte_length: span.byteLength,\n              uuid: msg.uuid ?? null,\n              role: msg.role ?? null,\n              ts: msg.timestamp ? Date.parse(msg.timestamp) || null : null,\n            });\n            nextIndex++;\n          }\n          if (linesSinceYield >= YIELD_EVERY) {\n            linesSinceYield = 0;\n            await yieldToEventLoop();\n          }\n        }\n        if (rows.length > 0) this.appendMessageIndexRows(rows);\n\n        lastConsumedEnd = fileOffset + consumed;\n        // Keep the unconsumed remainder (a torn line at the chunk boundary).\n        // Copy it — `combined` may be a view into the reused read buffer, which\n        // the next fh.read overwrites.\n        carry = Buffer.from(combined.subarray(consumed));\n        fileOffset += consumed;\n      }\n    } finally {\n      await fh.close();\n    }\n\n    this.upsertFileState({\n      path: filePath,\n      identity: fileIdentity(stat),\n      size: stat.size,\n      mtime_ms: Math.round(stat.mtimeMs),\n      byte_offset: lastConsumedEnd,\n      last_message_index: nextIndex - 1,\n    });\n    // Seed the incremental writer's state so subsequent appends continue the\n    // same reducer instead of re-parsing from scratch. Codex carries no state.\n    if (parser.state) this.indexParseState.set(filePath, parser.state);\n    // The cold path's only success signal. Until now just `backfill_failed`\n    // was logged, so a full-file re-parse — the difference between a 20 ms\n    // detail fetch and a multi-second one — left no trace when it worked.\n    const ms = Math.round(performance.now() - startedAt);\n    cacheLog.info(\n      `[cache] offset-index backfilled ${convId} ${ms}ms`,\n      {\n        event: \"offset_index.backfill_ok\",\n        conversationId: convId,\n        ms,\n        rows: nextIndex,\n        bytes: stat.size,\n      },\n      \"pino\",\n    );\n  }\n\n  /**\n   * Windowed detail read straight from the offset index — the hot path.\n   * Returns the parsed messages for message_index in [fromIndex, toIndex) plus\n   * the total indexed count, or null when the index can't serve this file (no\n   * file_state, identity/size mismatch = truncation/replacement, or cold index)\n   * so the caller falls back to the scanner and enqueues a backfill.\n   *\n   * On a match it SQL-selects the window's byte ranges and preads exactly those\n   * ranges from the JSONL (never the whole file), parsing only the sliced lines.\n   * Returns messages in the same ConversationMessage shape parseJsonlLine\n   * produces during a scan, so the payload is identical to the scanner path.\n   */\n  readMessageWindow(\n    filePath: string,\n    fromIndex: number,\n    toIndex: number,\n  ): { messages: ConversationMessage[]; total: number; fromIndex: number } | null {\n    const fileState = this.getFileState(filePath);\n    if (!fileState) return null;\n\n    let stat: Stats;\n    try {\n      stat = statSync(filePath);\n    } catch {\n      return null;\n    }\n    // The index is authoritative only up to byte_offset. Decline unless it\n    // covers the whole file exactly:\n    //  - identity changed  → file replaced;\n    //  - size < byte_offset → truncated;\n    //  - size > byte_offset → the file grew past the index (untailed messages\n    //    at the tail, e.g. an append with no live watcher extending the index).\n    // Serving a slice in that last case silently drops the appended messages —\n    // the exact live-append bug this feature exists to fix. In every mismatch\n    // the caller drops the index + backfills and falls back to the scanner.\n    if (fileIdentity(stat) !== fileState.identity || stat.size !== fileState.byte_offset) {\n      return null;\n    }\n    // A file_state that covered the file but indexed no messages is a poisoned\n    // row (pre-hotfix backfill of a file the reducer could not read) — serving\n    // it would render a real conversation empty. Resolving the parser here is\n    // the same belt-and-braces the old `isIndexableFile` call was: a provider\n    // with no reducer declines outright, even if a poisoned row carries a\n    // nonzero count. The decline routes the caller to backfill, which purges\n    // the row.\n    const parser = this.lineParserFor(filePath);\n    if (fileState.last_message_index < 0 || !parser) {\n      return null;\n    }\n\n    const total = fileState.last_message_index + 1;\n    const from = Math.max(0, fromIndex);\n    const to = Math.min(toIndex, total);\n    if (to <= from) return { messages: [], total, fromIndex: from };\n\n    // Read a short prefix before the window purely to build parse state, then\n    // drop it. Claude's `parseJsonlLine` IS state-dependent:\n    // `extractToolResultBlocks` resolves a tool_result's type from\n    // `pendingToolUses`, so a window that\n    // opens between a tool_use and its tool_result serves the result as\n    // \"generic\" — a Bash card rendering with the default icon and label.\n    // Measured at 0.37% of tool_results at the default msg_limit of 80, which\n    // is (tool_result density)/W: short-range pairs still break whenever a\n    // boundary lands between the halves. Pair distance measures p50 1, max 4,\n    // so 8 is slack, and the extra reads are byte-ranges out of the same index.\n    // Codex's reducer is stateless — every discriminator is on the line — so a\n    // Codex window needs no lookback and pays for no extra reads.\n    const lookback = parser.state ? PARSE_STATE_LOOKBACK : 0;\n    const rows = this.getMessageIndexWindow(\n      ConversationCache.conversationIdForFile(filePath),\n      Math.max(0, from - lookback),\n      to,\n    );\n    if (rows.length === 0) return { messages: [], total, fromIndex: from };\n\n    const messages: ConversationMessage[] = [];\n    const fd = openSync(filePath, \"r\");\n    try {\n      // Parse the lookback prefix into `state` and discard its messages; only\n      // rows at or after `from` are served. This is what makes a windowed read\n      // match a full contiguous parse for tool types, rather than the claim\n      // that the per-line shape is state-independent — it is not.\n      //\n      // teamInfo remains the one field a window cannot reproduce: the scanner\n      // applies it in a post-pass from a conversation-wide teamName -> TeamInfo\n      // table, and `applyTeamInfo` is not exported to us at all. No lookback\n      // fixes that; it needs the table carried per conversation. Left as a\n      // known gap rather than papered over — see offset-index-read.test.ts.\n      for (const row of rows) {\n        const buf = Buffer.alloc(row.byte_length);\n        readSync(fd, buf, 0, row.byte_length, row.byte_offset);\n        // Rows already exclude anything the writer filtered, so this is the\n        // post-filter index and re-applying the rule is a no-op on a current\n        // index. It only bites on rows written before the filter existed —\n        // which the index version forces to rebuild anyway.\n        const msg = parser.parse(buf.toString(\"utf-8\"), row.message_index);\n        if (msg && row.message_index >= from) messages.push(msg);\n      }\n    } finally {\n      closeSync(fd);\n    }\n\n    return { messages, total, fromIndex: from };\n  }\n\n  private agentEntrypointsKey(): string {\n    return [...this.agentEntrypoints].sort().join(\",\");\n  }\n\n  private classifyAgentFile(filePath: string, mtimeMs: number, fileSize: number): boolean {\n    if (this.agentEntrypoints.size === 0) return false;\n\n    const entrypointsKey = this.agentEntrypointsKey();\n    const cached = this.stmts.getFileMetadata.get(filePath) as\n      | {\n          mtime_ms: number;\n          file_size: number;\n          is_agent: number;\n          agent_entrypoints_key: string;\n        }\n      | undefined;\n    if (\n      cached &&\n      cached.mtime_ms === mtimeMs &&\n      cached.file_size === fileSize &&\n      cached.agent_entrypoints_key === entrypointsKey\n    ) {\n      return cached.is_agent === 1;\n    }\n\n    const isAgent = isAgentFile(filePath, this.agentEntrypoints);\n    this.stmts.upsertFileMetadata.run({\n      file_path: filePath,\n      mtime_ms: mtimeMs,\n      file_size: fileSize,\n      is_agent: isAgent ? 1 : 0,\n      agent_entrypoints_key: entrypointsKey,\n      updated_at: Date.now(),\n    });\n    return isAgent;\n  }\n\n  isAgentFileCached(filePath: string): boolean {\n    let s: ReturnType<typeof statSync>;\n    try {\n      s = statSync(filePath);\n    } catch {\n      return false;\n    }\n    return this.classifyAgentFile(filePath, s.mtimeMs, s.size);\n  }\n\n  static open(\n    dbPath: string,\n    tailSize = 10,\n    migrationsDir?: string,\n    options?: ConversationCacheOptions,\n  ): ConversationCache {\n    mkdirSync(dirname(dbPath), { recursive: true });\n    const db = instrumentDatabase(new Database(dbPath));\n    db.pragma(\"journal_mode = WAL\");\n    db.pragma(\"foreign_keys = ON\");\n    return new ConversationCache(db, tailSize, migrationsDir, options);\n  }\n\n  close(): void {\n    this.db.close();\n  }\n\n  getPopularProjects(limit: number): Array<{ path: string; name: string; sessionCount: number }> {\n    const rows = this.stmts.popularProjects.all(limit) as Array<{\n      project_path: string;\n      project_name: string | null;\n      cnt: number;\n    }>;\n    return rows.map((r) => ({\n      path: r.project_path,\n      name: r.project_name ?? r.project_path.split(/[/\\\\]/).pop() ?? r.project_path,\n      sessionCount: r.cnt,\n    }));\n  }\n\n  /** Every project with at least one cached conversation, most recently active\n   *  first. Paths are the raw `project_path` values, which is what\n   *  /api/conversations?project= matches on exactly — so a summary row is\n   *  always joinable against the page it describes. */\n  listProjectSummaries(opts: { limit: number; offset: number }): {\n    projects: Array<{\n      path: string;\n      name: string;\n      conversationCount: number;\n      lastActivity: string;\n    }>;\n    total: number;\n  } {\n    const total = (this.stmts.projectSummaryCount.get() as { n: number }).n;\n    const rows =\n      opts.limit === 0\n        ? []\n        : (this.stmts.projectSummaries.all(opts.limit, opts.offset) as Array<{\n            project_path: string;\n            project_name: string | null;\n            cnt: number;\n            latest: number | null;\n          }>);\n    return {\n      total,\n      projects: rows.map((r) => ({\n        path: r.project_path,\n        name: r.project_name ?? r.project_path.split(/[/\\\\]/).pop() ?? r.project_path,\n        conversationCount: r.cnt,\n        lastActivity: new Date(r.latest ?? 0).toISOString(),\n      })),\n    };\n  }\n\n  private ensureFileIndex(): void {\n    if (this.fileIndexLoaded) return;\n    const rows = this.stmts.allFilePaths.all() as Array<{ id: string; file_path: string }>;\n    for (const row of rows) {\n      // Key by the canonical path so a native-separator lookup (chokidar) hits\n      // the same entry a forward-slash scanner row wrote (P1.a).\n      this.fileIndex.set(canonicalizeFilePath(row.file_path), row.id);\n    }\n    this.fileIndexLoaded = true;\n  }\n\n  /** NULL stays visible until a completed parse proves emptiness. */\n  isVisible(id: string): boolean {\n    const meta = this.getMetaById(id);\n    return (\n      meta?.hasMessages !== false && (this.includeSubagentSessions || meta?.isSubagent !== true)\n    );\n  }\n\n  /**\n   * Every row, ignoring the visibility predicate. Cache health is a property of\n   * the whole cache: `listMissingFiles` counts rows a list query never returns,\n   * so a filtered denominator would divide two different corpora.\n   */\n  countAllRows(): number {\n    return (this.stmts.countAllRows.get() as { n: number }).n;\n  }\n\n  isExcludedSubagent(id: string): boolean {\n    return !this.includeSubagentSessions && this.getMetaById(id)?.isSubagent === true;\n  }\n\n  reconcileClassification(filePath: string): ConversationClassifier | null {\n    try {\n      const id = this.getIdByFilePath(filePath);\n      const meta = id ? this.getMetaById(id) : null;\n      const classification = classifyConversationFile(filePath, meta?.provider);\n      if (meta) {\n        if (classification.isSubagent && classification.id !== meta.id) {\n          const row = this.stmts.getFullById.get(meta.id) as MetaRow;\n          const original = row.scanner_meta_json ? JSON.parse(row.scanner_meta_json) : {};\n          this.upsertFromScannerMeta([{ ...original, id: meta.id, sessionId: meta.id, filePath }]);\n        } else {\n          this.classifyFull.run(\n            Number(classification.hasMessages),\n            Number(classification.isSubagent),\n            classification.parentConversationId,\n            meta.id,\n          );\n          classification.id = meta.id;\n          this.classifiers.delete(canonicalizeFilePath(filePath));\n        }\n      }\n      return classification;\n    } catch {\n      return null;\n    }\n  }\n\n  private classifyAppendedLines(filePath: string, lines: string[]): void {\n    const key = canonicalizeFilePath(filePath);\n    let classifier = this.classifiers.get(key);\n    if (!classifier) {\n      const existingId = this.getIdByFilePath(key);\n      const meta = existingId ? this.getMetaById(existingId) : null;\n      classifier = new ConversationClassifier(key, meta?.provider);\n      if (meta) {\n        classifier.id = meta.id;\n        classifier.hasMessages = meta.hasMessages === true;\n        classifier.isSubagent = meta.isSubagent ?? classifier.isSubagent;\n        classifier.parentConversationId = meta.parentConversationId ?? null;\n      }\n      this.classifiers.set(key, classifier);\n    }\n    for (const line of lines) classifier.append(line);\n    if (\n      !this.getIdByFilePath(key) &&\n      !classifier.hasMessages &&\n      !classifier.isSubagent &&\n      !lines.some((raw) => {\n        try {\n          const line = JSON.parse(raw);\n          return (\n            line &&\n            (line.cwd ||\n              line.slug ||\n              line.type === \"session_meta\" ||\n              line.type === \"user\" ||\n              line.type === \"assistant\" ||\n              line.role === \"user\" ||\n              line.role === \"assistant\")\n          );\n        } catch {\n          return false;\n        }\n      })\n    )\n      return;\n    const current = classifier;\n    this.db.transaction(() => {\n      this.removeFileAliases(key, current.id);\n      this.stmts.insertSkeleton.run(current.id, key, 0);\n      this.classifyAppend.run(\n        Number(current.hasMessages),\n        Number(current.isSubagent),\n        current.parentConversationId,\n        current.provider,\n        current.id,\n      );\n      if (this.fileIndexLoaded) this.fileIndex.set(key, current.id);\n    })();\n  }\n\n  /** Repair both legacy parent-keyed rows and live-tail aliases for this file only. */\n  private removeFileAliases(filePath: string, id: string): void {\n    const aliases = this.fileAliases.all(filePath, id) as { id: string }[];\n    for (const alias of aliases) {\n      this.stmts.deleteTailById.run(alias.id);\n      this.stmts.deleteMessageIndex.run(alias.id);\n      this.stmts.deleteById.run(alias.id);\n    }\n    if (aliases.length) {\n      this.stmts.deleteFileState.run(filePath);\n      this.clearIndexParseState(filePath);\n      this.fileIndex.delete(filePath);\n    }\n  }\n\n  updateFromLine(filePath: string, rawLine: string): void {\n    this.classifyAppendedLines(filePath, [rawLine]);\n    let line: JsonlLine;\n    try {\n      line = JSON.parse(rawLine);\n    } catch {\n      return;\n    }\n\n    if (this.filterAgentConversations && isAgentLine(line, this.agentEntrypoints)) {\n      this.deleteByFilePath(filePath);\n      this.onAgentFileDetected?.(filePath);\n      return;\n    }\n\n    const role = line.role ?? line.type;\n    const isMessage = role === \"user\" || role === \"assistant\";\n\n    this.ensureFileIndex();\n\n    // Canonicalize so a native-separator path (chokidar) keys the same cache row\n    // as the scanner's forward-slash file_path (P1.a).\n    const key = canonicalizeFilePath(filePath);\n\n    // Skip lines that carry neither a message nor project context — there's\n    // nothing for us to record.\n    if (!isMessage && !line.cwd && !line.slug) return;\n\n    let convId = this.fileIndex.get(key);\n    if (!convId) {\n      const pseudoId =\n        key\n          .split(/[/\\\\]/)\n          .pop()\n          ?.replace(/\\.jsonl$/, \"\") ?? key;\n      this.stmts.insertSkeleton.run(pseudoId, key, 0);\n      this.fileIndex.set(key, pseudoId);\n      convId = pseudoId;\n    }\n\n    // Backfill project_path / project_name / title from cwd on any line that\n    // carries it. COALESCE inside the SQL ensures we never overwrite a\n    // scanner-populated value. Without this, the chokidar watcher leaves\n    // skeleton rows with NULL project context, which renders as blank cards\n    // on the mobile Recents tab.\n    if (line.cwd || line.slug) {\n      const projectPath = line.cwd ?? null;\n      const projectName = projectPath ? shortProjectName(projectPath) : null;\n      const title = line.slug ?? projectName ?? null;\n      this.stmts.backfillSkeletonProject.run({\n        id: convId,\n        project_path: projectPath,\n        project_name: projectName,\n        title,\n      });\n    }\n\n    if (!isMessage) return;\n\n    const timestamp = line.timestamp ?? new Date().toISOString();\n    const activityMs = new Date(timestamp).getTime();\n    if (Number.isNaN(activityMs)) return;\n\n    const contentBlocks = normalizeContent(line.message?.content ?? line.content);\n    const text = contentBlocks.find((b) => b.type === \"text\")?.text?.slice(0, 200) ?? \"\";\n    const lastMessage = JSON.stringify({ role, timestamp, text });\n    const seq = ++this.tailSeq;\n\n    const result = this.stmts.updateMeta.run(activityMs, lastMessage, seq, convId);\n    if (result.changes === 0) return;\n\n    const tailRow = this.stmts.getTail.get(convId) as TailRow | undefined;\n    const msgs: CachedTailMessage[] = tailRow\n      ? (JSON.parse(tailRow.messages_json) as CachedTailMessage[])\n      : [];\n\n    msgs.push({ role, timestamp, text, content: contentBlocks });\n    if (msgs.length > this.tailSize) msgs.splice(0, msgs.length - this.tailSize);\n\n    this.stmts.upsertTail.run(convId, JSON.stringify(msgs), msgs.length, seq);\n  }\n\n  /**\n   * Batched form of updateFromLine: applies a burst of newly-appended lines\n   * (one chokidar read) in a single transaction with one message_count bump,\n   * one meta write, and one tail read/write — instead of 2-4 synchronous\n   * writes per line. Semantics are identical to replaying each line through\n   * updateFromLine in order: the agent filter short-circuits the whole batch,\n   * project context is backfilled last-wins, message_count increases by the\n   * number of surviving message lines, and last_activity/last_message reflect\n   * the newest message line by timestamp (a monotonic guard keeps them from\n   * moving backward when an interleaved writer appends an older line — P0.3).\n   */\n  updateFromLines(filePath: string, rawLines: string[]): void {\n    this.classifyAppendedLines(filePath, rawLines);\n    // Classify all lines first (outside the transaction). A single watched\n    // file maps to one conversation, so we accumulate into scalars.\n    let sawProjectContext = false;\n    let backfillProjectPath: string | null = null;\n    let backfillProjectName: string | null = null;\n    let backfillTitle: string | null = null;\n    let msgCount = 0;\n    let lastActivityMs: number | null = null;\n    let lastMessage: string | null = null;\n    const newTail: CachedTailMessage[] = [];\n\n    for (const rawLine of rawLines) {\n      let line: JsonlLine;\n      try {\n        line = JSON.parse(rawLine);\n      } catch {\n        continue;\n      }\n\n      // The first agent line nukes the file and aborts the whole batch —\n      // matches updateFromLine's per-line return.\n      if (this.filterAgentConversations && isAgentLine(line, this.agentEntrypoints)) {\n        this.deleteByFilePath(filePath);\n        this.onAgentFileDetected?.(filePath);\n        return;\n      }\n\n      const role = line.role ?? line.type;\n      const isMessage = role === \"user\" || role === \"assistant\";\n\n      // Skip lines that carry neither a message nor project context.\n      if (!isMessage && !line.cwd && !line.slug) continue;\n\n      if (line.cwd || line.slug) {\n        sawProjectContext = true;\n        // First-wins per column, mirroring updateFromLine's per-line replay:\n        // backfillSkeletonProject COALESCEs each column independently, so the\n        // first non-null value seen for a column sticks and later lines can't\n        // override it. Accumulating last-wins here would diverge from per-line\n        // replay when a conversation's cwd/slug changes mid-batch.\n        const lineProjectPath = line.cwd ?? null;\n        const lineProjectName = lineProjectPath ? shortProjectName(lineProjectPath) : null;\n        const lineTitle = line.slug ?? lineProjectName ?? null;\n        backfillProjectPath ??= lineProjectPath;\n        backfillProjectName ??= lineProjectName;\n        backfillTitle ??= lineTitle;\n      }\n\n      if (!isMessage) continue;\n\n      const timestamp = line.timestamp ?? new Date().toISOString();\n      const activityMs = new Date(timestamp).getTime();\n      if (Number.isNaN(activityMs)) continue;\n\n      const contentBlocks = normalizeContent(line.message?.content ?? line.content);\n      const text = contentBlocks.find((b) => b.type === \"text\")?.text?.slice(0, 200) ?? \"\";\n      msgCount += 1;\n      // last_activity/last_message track the NEWEST message by timestamp, not the\n      // last line in byte order. Interleaved writers can append an older line\n      // after a newer one; taking byte-order-last would move last_activity\n      // backward and corrupt list ordering / staleness comparisons. The tail\n      // below stays in byte order (unsorted) by design.\n      if (lastActivityMs === null || activityMs > lastActivityMs) {\n        lastActivityMs = activityMs;\n        lastMessage = JSON.stringify({ role, timestamp, text });\n      }\n      newTail.push({ role, timestamp, text, content: contentBlocks });\n    }\n\n    // Nothing recordable in this batch.\n    if (!sawProjectContext && msgCount === 0) return;\n\n    this.ensureFileIndex();\n\n    // Canonicalize so a native-separator path (chokidar) keys the same cache row\n    // as the scanner's forward-slash file_path (P1.a).\n    const key = canonicalizeFilePath(filePath);\n\n    let convId = this.fileIndex.get(key);\n    if (!convId) {\n      const pseudoId =\n        key\n          .split(/[/\\\\]/)\n          .pop()\n          ?.replace(/\\.jsonl$/, \"\") ?? key;\n      this.stmts.insertSkeleton.run(pseudoId, key, 0);\n      this.fileIndex.set(key, pseudoId);\n      convId = pseudoId;\n    }\n    const id = convId;\n\n    const apply = this.db.transaction(() => {\n      if (sawProjectContext) {\n        this.stmts.backfillSkeletonProject.run({\n          id,\n          project_path: backfillProjectPath,\n          project_name: backfillProjectName,\n          title: backfillTitle,\n        });\n      }\n\n      if (msgCount === 0) return;\n\n      const seq = ++this.tailSeq;\n      const result = this.stmts.updateMetaBatch.run({\n        inc: msgCount,\n        last_activity: lastActivityMs,\n        last_message: lastMessage,\n        updated_at: seq,\n        id,\n      });\n      if (result.changes === 0) return;\n\n      const tailRow = this.stmts.getTail.get(id) as TailRow | undefined;\n      const msgs: CachedTailMessage[] = tailRow\n        ? (JSON.parse(tailRow.messages_json) as CachedTailMessage[])\n        : [];\n      msgs.push(...newTail);\n      if (msgs.length > this.tailSize) msgs.splice(0, msgs.length - this.tailSize);\n\n      this.stmts.upsertTail.run(id, JSON.stringify(msgs), msgs.length, seq);\n    });\n    apply();\n  }\n\n  // Returns the IDs of rows actually upserted (i.e. excluding any agent JSONLs\n  // skipped by the filter). The server's warm-up loop uses this to populate\n  // tails only for IDs that have a parent conversation_meta row — otherwise\n  // the conversation_tail FK fires and aborts the warm-up (regression covered\n  // in conversation-cache.test.ts).\n  upsertFromScannerMeta(metas: ScannerMeta[]): string[] {\n    const filter = this.filterAgentConversations;\n    const upsertedIds: string[] = [];\n    const run = this.db.transaction((items: ScannerMeta[]) => {\n      for (const m of items) {\n        let classification: ConversationClassifier | null = null;\n        try {\n          classification = classifyConversationFile(m.filePath, m.provider);\n        } catch {\n          // A missing or unreadable file is not evidence of an empty history.\n        }\n        const id =\n          classification?.isSubagent || classification?.provider === CODEX_CLI_PROVIDER\n            ? classification.id\n            : m.sessionId ||\n              m.id\n                .split(\"/\")\n                .pop()\n                ?.replace(/\\.jsonl$/, \"\") ||\n              m.id;\n        const lastActivityMs = m.timestamp ? new Date(m.timestamp).getTime() : null;\n        // Store the canonical (forward-slash) path so live-tail / directory-event\n        // lookups by native separators hit this row (P1.a). statSync keeps the\n        // original path — the stat is a file-identity read, not a key.\n        const canonicalPath = canonicalizeFilePath(m.filePath);\n        if (classification) this.removeFileAliases(canonicalPath, id);\n        let mtimeMs: number | null = null;\n        let fileSize: number | null = null;\n        try {\n          const s = statSync(m.filePath);\n          mtimeMs = s.mtimeMs;\n          fileSize = s.size;\n        } catch {\n          // file disappeared between scan and upsert — store without stat\n        }\n        const seq = ++this.tailSeq;\n        if (\n          filter &&\n          mtimeMs !== null &&\n          fileSize !== null &&\n          this.classifyAgentFile(m.filePath, mtimeMs, fileSize)\n        ) {\n          continue;\n        }\n        const scannerMetaJson = JSON.stringify(m);\n        // A JSONL with no `cwd` line yields \"\" from the scanner, not\n        // undefined — `?? null` doesn't catch that, so it used to persist as\n        // an empty string. project_id IS NULL AND project_path IS NOT NULL\n        // matches \"\", which becomes an orphan the backfill can never clear\n        // (it refuses to overwrite a falsy-but-non-null projectPath).\n        const projectPath = m.projectPath?.trim() || null;\n        this.stmts.upsertFull.run({\n          id,\n          file_path: canonicalPath,\n          project_path: projectPath,\n          project_name: m.projectName ?? null,\n          title: m.title ?? m.sessionName ?? m.projectName ?? null,\n          model: m.model ?? null,\n          account: m.account ?? null,\n          branch: m.gitBranch ?? null,\n          message_count: m.messageCount ?? 0,\n          last_activity: lastActivityMs,\n          first_message: m.firstMessage ? JSON.stringify(m.firstMessage) : null,\n          last_message: m.lastMessage ? JSON.stringify(m.lastMessage) : null,\n          preview: m.preview ?? null,\n          updated_at: seq,\n          mtime_ms: mtimeMs,\n          file_size: fileSize,\n          provider:\n            canonicalizeProviderName(classification?.provider ?? m.provider) ??\n            CLAUDE_CODE_PROVIDER,\n          scanner_meta_json: scannerMetaJson,\n          is_imported_from_claude: m.isImportedFromClaude ? 1 : 0,\n          is_imported_from_codex: m.isImportedFromCodex ? 1 : 0,\n          is_imported_from_cursor: m.isImportedFromCursor ? 1 : 0,\n        });\n        this.stmts.updateScannerCache.run(mtimeMs, fileSize, scannerMetaJson, id);\n        if (classification) {\n          this.classifyFull.run(\n            Number(classification.hasMessages),\n            Number(classification.isSubagent),\n            classification.parentConversationId,\n            id,\n          );\n          this.classifiers.delete(canonicalPath);\n        }\n        if (this.fileIndexLoaded) this.fileIndex.set(canonicalPath, id);\n        upsertedIds.push(id);\n      }\n    });\n    run(metas);\n    return upsertedIds;\n  }\n\n  // Returns true if a row was deleted. Used by the prune-on-startup step and\n  // by updateFromLine when a previously-cached file turns out to be an agent\n  // JSONL.\n  deleteByFilePath(filePath: string): boolean {\n    this.classifiers.delete(canonicalizeFilePath(filePath));\n    // Canonicalize so a native-separator path matches the forward-slash file_path\n    // and fileIndex key (P1.a).\n    const key = canonicalizeFilePath(filePath);\n    const row = this.stmts.getIdByFilePath.get(key) as { id: string } | undefined;\n    if (!row) return false;\n    this.stmts.deleteTailById.run(row.id);\n    const result = this.stmts.deleteById.run(row.id);\n    this.fileIndex.delete(key);\n    return result.changes > 0;\n  }\n\n  // Reads the last `tailSize` qualifying lines from a JSONL file and writes them\n  // to conversation_tail. Reads backward in 8 KB chunks so memory usage is\n  // bounded regardless of file size. Uses updated_at=0 so any live\n  // updateFromLine() call (which uses Date.now()) always wins the upsert.\n  // Returns false if the file cannot be read or the tail already exists.\n  populateTailFromFile(convId: string, filePath: string): boolean {\n    if (this.stmts.hasTail.get(convId)) return false;\n\n    let fileSize: number;\n    let fd: number;\n    try {\n      fileSize = statSync(filePath).size;\n      fd = openSync(filePath, \"r\");\n    } catch {\n      return false;\n    }\n\n    const CHUNK = 8192;\n    const buf = Buffer.allocUnsafe(CHUNK);\n    let pos = fileSize;\n    let partial = \"\";\n    const lines: string[] = [];\n\n    try {\n      while (pos > 0 && lines.length < this.tailSize * 4) {\n        const toRead = Math.min(CHUNK, pos);\n        pos -= toRead;\n        readSync(fd, buf, 0, toRead, pos);\n        const chunk = buf.subarray(0, toRead).toString(\"utf8\");\n        const combined = chunk + partial;\n        const parts = combined.split(\"\\n\");\n        // parts[0] may be a partial line — keep it for the next iteration\n        partial = parts[0];\n        for (let i = parts.length - 1; i >= 1; i--) {\n          lines.push(parts[i]);\n        }\n      }\n      if (partial) lines.push(partial);\n    } finally {\n      closeSync(fd);\n    }\n\n    const msgs: CachedTailMessage[] = [];\n    for (let i = 0; i < lines.length && msgs.length < this.tailSize; i++) {\n      const line = lines[i].trim();\n      if (!line) continue;\n      let parsed: JsonlLine;\n      try {\n        parsed = JSON.parse(line);\n      } catch {\n        continue;\n      }\n      const role = parsed.role ?? parsed.type;\n      if (!role) continue;\n      const timestamp = parsed.timestamp ?? \"\";\n      const contentBlocks = normalizeContent(parsed.message?.content ?? parsed.content);\n      const text = contentBlocks.find((b) => b.type === \"text\")?.text?.slice(0, 200) ?? \"\";\n      msgs.unshift({ role, timestamp, text, content: contentBlocks });\n    }\n    if (msgs.length === 0) return false;\n    this.stmts.upsertTail.run(convId, JSON.stringify(msgs), msgs.length, 0);\n    return true;\n  }\n\n  listConversations(opts: ConversationListFilters & { limit: number; offset: number }): {\n    conversations: ConversationListItem[];\n    total: number;\n  } {\n    const { limit, offset } = opts;\n    const { where, params } = this.conversationListWhere(opts);\n    const total = (\n      this.db\n        .prepare(`SELECT COUNT(*) as n FROM conversation_meta WHERE ${where}`)\n        .get(...params) as {\n        n: number;\n      }\n    ).n;\n    const rows =\n      limit === 0\n        ? []\n        : (this.db\n            .prepare(\n              `SELECT ${this.listColumns} FROM conversation_meta WHERE ${where} ORDER BY last_activity DESC LIMIT ? OFFSET ?`,\n            )\n            .all(...params, limit, offset) as MetaRow[]);\n\n    return {\n      total,\n      conversations: rows.map((r) => ({\n        hasMessages: r.has_messages === null ? null : r.has_messages === 1,\n        isSubagent: r.is_subagent === null ? null : r.is_subagent === 1,\n        parentConversationId: r.parent_conversation_id,\n        id: r.id,\n        filePath: r.file_path,\n        projectId: r.project_id,\n        projectPath: r.project_path,\n        projectName: r.project_name,\n        title: r.title,\n        model: r.model,\n        account: r.account,\n        branch: r.branch,\n        messageCount: r.message_count,\n        lastActivity: r.last_activity\n          ? new Date(r.last_activity).toISOString()\n          : new Date(0).toISOString(),\n        firstMessage: r.first_message,\n        lastMessage: r.last_message,\n        preview: r.preview,\n        source: r.source,\n        provider: canonicalizeProviderName(r.provider) ?? r.provider ?? CLAUDE_CODE_PROVIDER,\n        isImportedFromClaude: r.is_imported_from_claude === 1,\n        isImportedFromCodex: r.is_imported_from_codex === 1,\n        isImportedFromCursor: r.is_imported_from_cursor === 1,\n        // The WHERE clause below already excludes deleted rows.\n        deletedAt: null,\n      })),\n    };\n  }\n\n  private get listColumns(): string {\n    return \"id, file_path, project_id, project_path, project_name, title, model, account, branch, message_count, last_activity, first_message, last_message, preview, source, provider, has_messages, is_subagent, parent_conversation_id, is_imported_from_claude, is_imported_from_codex, is_imported_from_cursor\";\n  }\n\n  private conversationListWhere(opts: ConversationListFilters): {\n    where: string;\n    params: unknown[];\n  } {\n    const clauses = [\"has_messages IS NOT 0\", \"deleted_at IS NULL\"];\n    const params: unknown[] = [];\n    const include = opts.include ?? (this.includeSubagentSessions ? \"all\" : \"conversations\");\n    if (include === \"conversations\") clauses.push(\"is_subagent IS NOT 1\");\n    else if (include === \"subagents\") clauses.push(\"is_subagent = 1\");\n    if (opts.project) {\n      clauses.push(\"project_path = ?\");\n      params.push(opts.project);\n    }\n    if (opts.provider) {\n      const provider = canonicalizeProviderName(opts.provider) ?? opts.provider;\n      if (provider === CURSOR_PROVIDER) {\n        clauses.push(\"(provider = ? OR provider = ?)\");\n        params.push(CURSOR_PROVIDER, LEGACY_CURSOR_PROVIDER);\n      } else {\n        clauses.push(\"provider = ?\");\n        params.push(provider);\n      }\n    }\n    if (opts.isImportedFromClaude !== undefined) {\n      clauses.push(\"is_imported_from_claude = ?\");\n      params.push(opts.isImportedFromClaude ? 1 : 0);\n    }\n    if (opts.isImportedFromCodex !== undefined) {\n      clauses.push(\"is_imported_from_codex = ?\");\n      params.push(opts.isImportedFromCodex ? 1 : 0);\n    }\n    if (opts.isImportedFromCursor !== undefined) {\n      clauses.push(\"is_imported_from_cursor = ?\");\n      params.push(opts.isImportedFromCursor ? 1 : 0);\n    }\n    return { where: clauses.join(\" AND \"), params };\n  }\n\n  /** Returns a map of filePath → { mtimeMs, size } for all rows that have\n   *  stat data stored. Used by the server to build the statCache passed to\n   *  ConversationScanner.scan() so unchanged files are skipped. */\n  getFileStats(): Map<string, { mtimeMs: number; size: number }> {\n    const rows = this.stmts.allFileStats.all() as Array<{\n      file_path: string;\n      mtime_ms: number;\n      file_size: number;\n    }>;\n    const map = new Map<string, { mtimeMs: number; size: number }>();\n    for (const r of rows) {\n      map.set(r.file_path, { mtimeMs: r.mtime_ms, size: r.file_size });\n    }\n    return map;\n  }\n\n  getScannerStatCache(): Map<string, { stat: FileStatEntry; meta: ConversationMeta }> {\n    const rows = this.stmts.allScannerStatCacheRows.all() as Array<{\n      file_path: string;\n      mtime_ms: number;\n      file_size: number;\n      scanner_meta_json: string;\n    }>;\n    const map = new Map<string, { stat: FileStatEntry; meta: ConversationMeta }>();\n    for (const r of rows) {\n      try {\n        const meta = JSON.parse(r.scanner_meta_json) as ConversationMeta;\n        map.set(r.file_path, {\n          stat: { mtimeMs: r.mtime_ms, size: r.file_size },\n          meta,\n        });\n      } catch {\n        // Ignore malformed legacy/cache rows; the scanner will parse the file.\n      }\n    }\n    return map;\n  }\n\n  /**\n   * Conversation id for a JSONL path, or null when no row exists yet. Resolves\n   * by file_path (NOT conversationIdForFile) so codex rollout files — named\n   * rollout-<ts>-<uuid>.jsonl, whose stem is not the row id — resolve correctly.\n   */\n  getIdByFilePath(filePath: string): string | null {\n    const key = canonicalizeFilePath(filePath);\n    const row = this.stmts.getIdByFilePath.get(key) as { id: string } | undefined;\n    return row?.id ?? null;\n  }\n\n  getMetaById(id: string): ConversationListItem | null {\n    const row = this.stmts.getFullById.get(id) as MetaRow | undefined;\n    if (!row) return null;\n    return {\n      id: row.id,\n      filePath: row.file_path,\n      hasMessages: row.has_messages === null ? null : row.has_messages === 1,\n      isSubagent: row.is_subagent === null ? null : row.is_subagent === 1,\n      parentConversationId: row.parent_conversation_id,\n      projectId: row.project_id,\n      projectPath: row.project_path,\n      projectName: row.project_name,\n      title: row.title,\n      model: row.model,\n      account: row.account,\n      branch: row.branch,\n      messageCount: row.message_count,\n      lastActivity: row.last_activity\n        ? new Date(row.last_activity).toISOString()\n        : new Date(0).toISOString(),\n      firstMessage: row.first_message,\n      lastMessage: row.last_message,\n      preview: row.preview,\n      source: row.source,\n      provider: row.provider ?? CLAUDE_CODE_PROVIDER,\n      isImportedFromClaude: row.is_imported_from_claude === 1,\n      isImportedFromCodex: row.is_imported_from_codex === 1,\n      isImportedFromCursor: row.is_imported_from_cursor === 1,\n      deletedAt: row.deleted_at ? new Date(row.deleted_at).toISOString() : null,\n    };\n  }\n\n  setConversationProjectId(conversationId: string, projectId: string): void {\n    this.stmts.setConversationProjectId.run(projectId, conversationId);\n  }\n\n  markAsStreamer(id: string): void {\n    this.stmts.markAsStreamer.run(id);\n  }\n\n  getLatestConversation(): { id: string; lastActivity: string | null } | null {\n    const row = this.stmts.getLatestConversation.get() as\n      | { id: string; last_activity: number | null }\n      | undefined;\n    if (!row) return null;\n    return {\n      id: row.id,\n      lastActivity: row.last_activity ? new Date(row.last_activity).toISOString() : null,\n    };\n  }\n\n  hasOrphanProjectId(): boolean {\n    return this.stmts.hasOrphanProjectId.get() !== undefined;\n  }\n\n  listConversationsForProjectBackfill(): Array<{\n    id: string;\n    projectPath: string | null;\n    projectId: string | null;\n    lastActivity: string | null;\n  }> {\n    const rows = this.stmts.listConversationsForProjectBackfill.all() as Array<{\n      id: string;\n      project_path: string | null;\n      project_id: string | null;\n      last_activity: number | null;\n    }>;\n    return rows.map((r) => ({\n      id: r.id,\n      projectPath: r.project_path,\n      projectId: r.project_id,\n      lastActivity: r.last_activity ? new Date(r.last_activity).toISOString() : null,\n    }));\n  }\n\n  getConversationTail(id: string): CachedTail | null {\n    const row = this.stmts.getTail.get(id) as TailRow | undefined;\n    if (!row) return null;\n    return {\n      conversationId: id,\n      messages: JSON.parse(row.messages_json) as CachedTailMessage[],\n      tailSize: row.tail_size,\n    };\n  }\n\n  hasConversation(id: string): boolean {\n    return !!this.stmts.getById.get(id);\n  }\n\n  /**\n   * Hides a conversation from every list/get read path without touching its\n   * JSONL or the row itself — just a `deleted_at` flag, so an upsert from a\n   * later rescan (the file is still on disk) leaves it alone rather than\n   * resurrecting it. Returns true if this call is what set the flag.\n   *\n   * Not preserved across the cache-integrity monitor's `reset_rescan` action,\n   * which wipes and rebuilds `conversation_meta` from scratch — an explicit\n   * operator recovery step, not routine background rescanning.\n   */\n  softDeleteConversation(id: string): boolean {\n    return this.stmts.softDeleteById.run(Date.now(), id).changes > 0;\n  }\n\n  upsertSessionName(sessionId: string, name: string): void {\n    this.stmts.upsertSessionName.run(sessionId, name, ++this.nameSeq);\n  }\n\n  getSessionName(sessionId: string): string | null {\n    const row = this.stmts.getSessionName.get(sessionId) as { name: string } | undefined;\n    return row?.name ?? null;\n  }\n\n  listSessionNames(): Record<string, string> {\n    const rows = this.stmts.listSessionNames.all() as { session_id: string; name: string }[];\n    return Object.fromEntries(rows.map((r) => [r.session_id, r.name]));\n  }\n\n  invalidate(id?: string): void {\n    if (id) {\n      const meta = this.getMetaById(id);\n      if (meta) this.classifiers.delete(canonicalizeFilePath(meta.filePath));\n      this.stmts.deleteTailById.run(id);\n      this.stmts.deleteById.run(id);\n      if (this.fileIndexLoaded) {\n        for (const [fp, cid] of this.fileIndex) {\n          if (cid === id) {\n            this.fileIndex.delete(fp);\n            break;\n          }\n        }\n      }\n    } else {\n      this.classifiers.clear();\n      this.stmts.deleteTailAll.run();\n      this.stmts.deleteAll.run();\n      this.fileIndex.clear();\n    }\n  }\n\n  /**\n   * Drop the cached row for a file. Two callers with opposite intent:\n   *  - a directory-watch \"change\" event (the file was appended to) — pass\n   *    `skipIfTailed: true`, which NEVER deletes (upsert-or-leave). A change\n   *    event fires on every external append; deleting here flickers the\n   *    conversation out of /api/conversations — whether it's a live-tailed row\n   *    the updateFromLines/warm-up path just wrote (CRITICAL #2; both watchers\n   *    fire on the same append with no ordering guarantee) OR a refresh-created\n   *    untailed row (a ?refresh=1 upsert never populates a tail, so the old\n   *    \"delete when untailed\" behavior made it vanish on its next append with no\n   *    client action). The live-tail path owns the row's content and the\n   *    debounced rescan re-derives metadata, so leaving the row loses nothing.\n   *  - a genuine unlink (the file is gone) — leave `skipIfTailed` false so the\n   *    row is always removed, otherwise a deleted session ghosts in the cache.\n   */\n  invalidateByFilePath(filePath: string, opts?: { skipIfTailed?: boolean }): string | null {\n    // Canonicalize so a native-separator path (chokidar) matches the\n    // forward-slash file_path a scanner upsert wrote (P1.a).\n    const key = canonicalizeFilePath(filePath);\n    const row = this.stmts.getIdByFilePath.get(key) as { id: string } | undefined;\n    if (!row) return null;\n    // Change path: never delete (upsert-or-leave). Only the unlink path (no opts)\n    // removes the row.\n    if (opts?.skipIfTailed) return null;\n    this.invalidate(row.id);\n    return row.id;\n  }\n\n  /**\n   * Drop rows whose `file_path` no longer exists on disk AND which have no\n   * cached tail to fall back to. Rows with a tail are left alone so\n   * `handleGetConversation` can still serve the cached tail even when the\n   * JSONL has been deleted.\n   */\n  pruneGhostFiles(exists: (filePath: string) => boolean = existsSync): string[] {\n    const rows = this.stmts.allFilePaths.all() as { id: string; file_path: string }[];\n    const ghosts: string[] = [];\n    const prune = this.db.transaction((ids: string[]) => {\n      for (const id of ids) {\n        this.stmts.deleteTailById.run(id);\n        this.stmts.deleteById.run(id);\n      }\n    });\n    for (const row of rows) {\n      if (exists(row.file_path)) continue;\n      if (this.stmts.hasTail.get(row.id)) continue;\n      ghosts.push(row.id);\n    }\n    if (ghosts.length > 0) {\n      prune(ghosts);\n      if (this.fileIndexLoaded) {\n        for (const id of ghosts) {\n          for (const [fp, cid] of this.fileIndex) {\n            if (cid === id) {\n              this.fileIndex.delete(fp);\n              break;\n            }\n          }\n        }\n      }\n    }\n    return ghosts;\n  }\n\n  /**\n   * Reconcile the cache against the authoritative set of conversation file\n   * paths a fresh scan surfaced: drop any cached row whose `file_path` is not\n   * in `livePaths` (removed from disk, or now filtered out — e.g. became an\n   * agent JSONL). This is the \"removed conversations\" half of a ?refresh=1\n   * reconcile; the additions/updates half is upsertFromScannerMeta.\n   *\n   * Skip semantics depend on whether the file still exists on disk:\n   *  - File GONE from disk → always removed, tail or not. This matches the old\n   *    invalidate()+rebuild behavior (a deleted conversation must disappear on\n   *    refresh) and keeps refresh=1 truthful about removals. NOTE: this is an\n   *    INTENTIONAL divergence from pruneGhostFiles(), which KEEPS tailed ghosts\n   *    so their cached history stays viewable on a background prune. refresh=1\n   *    has the opposite contract (mobile relies on removals being reflected), so\n   *    do not \"unify\" the two — they serve different purposes.\n   *  - File STILL on disk but absent from `livePaths` → the CRITICAL #2 race:\n   *    the scan snapshot predates a just-created (and now live-tailed) file.\n   *    A tailed row here is actively maintained from real content, so it is\n   *    kept — dropping it would flicker the active conversation out of\n   *    /api/conversations. An untailed on-disk row not in the snapshot is a\n   *    transient scan/discovery gap; it is left alone (not removed) and the\n   *    next reconcile picks it up, rather than risk removing a real file the\n   *    scan simply hasn't surfaced yet.\n   * Returns the removed IDs.\n   */\n  reconcileDeletions(\n    livePaths: Set<string>,\n    opts?: { exists?: (filePath: string) => boolean },\n  ): string[] {\n    const exists = opts?.exists ?? existsSync;\n    const rows = this.stmts.allFilePaths.all() as { id: string; file_path: string }[];\n    const removed: string[] = [];\n    const drop = this.db.transaction((ids: string[]) => {\n      for (const id of ids) {\n        this.stmts.deleteTailById.run(id);\n        this.stmts.deleteById.run(id);\n      }\n    });\n    for (const row of rows) {\n      if (livePaths.has(row.file_path)) continue;\n      // Not in the scan snapshot. If the file is gone from disk, it's a genuine\n      // deletion — remove it. If it still exists, this is a scan/discovery gap\n      // (the CRITICAL #2 race for live files); leave it for the next reconcile.\n      if (exists(row.file_path)) {\n        this.reconcileClassification(row.file_path);\n        continue;\n      }\n      removed.push(row.id);\n    }\n    if (removed.length > 0) {\n      drop(removed);\n      if (this.fileIndexLoaded) {\n        for (const id of removed) {\n          for (const [fp, cid] of this.fileIndex) {\n            if (cid === id) {\n              this.fileIndex.delete(fp);\n              break;\n            }\n          }\n        }\n      }\n    }\n    return removed;\n  }\n\n  /**\n   * Read-only: list cached rows whose `file_path` no longer exists on disk.\n   * Unlike pruneGhostFiles/reconcileDeletions this mutates nothing — it just\n   * reports drift for the CacheIntegrityMonitor to classify. `tailed` flags\n   * rows that still have cached history (which pruneGhostFiles would keep).\n   */\n  listMissingFiles(\n    exists: (filePath: string) => boolean = existsSync,\n  ): { id: string; filePath: string; title: string | null; tailed: boolean }[] {\n    const rows = this.stmts.allFilePathsWithTitle.all() as {\n      id: string;\n      file_path: string;\n      title: string | null;\n    }[];\n    const missing: { id: string; filePath: string; title: string | null; tailed: boolean }[] = [];\n    for (const row of rows) {\n      if (exists(row.file_path)) continue;\n      missing.push({\n        id: row.id,\n        filePath: row.file_path,\n        title: row.title,\n        tailed: !!this.stmts.hasTail.get(row.id),\n      });\n    }\n    return missing;\n  }\n\n  /**\n   * Drop the given conversation ids outright — main row, tail, and message\n   * index — regardless of whether they have a tail. Used by the cache-integrity\n   * resolution actions (prune_all / prune_selected). Returns the count dropped.\n   */\n  dropRowsById(ids: string[]): number {\n    if (ids.length === 0) return 0;\n    const drop = this.db.transaction((toDrop: string[]) => {\n      let n = 0;\n      for (const id of toDrop) {\n        this.stmts.deleteTailById.run(id);\n        this.stmts.deleteMessageIndex.run(id);\n        n += this.stmts.deleteById.run(id).changes;\n      }\n      return n;\n    });\n    const dropped = drop(ids);\n    if (this.fileIndexLoaded) {\n      for (const id of ids) {\n        for (const [fp, cid] of this.fileIndex) {\n          if (cid === id) {\n            this.fileIndex.delete(fp);\n            break;\n          }\n        }\n      }\n    }\n    return dropped;\n  }\n\n  /**\n   * Wipe all cached conversation state — meta, tails, and message index — and\n   * reset the in-memory file index. Only called by the `reset_rescan`\n   * resolution action, which repopulates from a fresh disk scan afterward.\n   */\n  clearAll(): void {\n    this.classifiers.clear();\n    this.db.transaction(() => {\n      this.stmts.deleteTailAll.run();\n      this.stmts.deleteAll.run();\n      this.db.exec(\"DELETE FROM conversation_message_index\");\n    })();\n    this.fileIndex = new Map();\n  }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICircularList } from 'common/Types';\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport { Emitter } from 'vs/base/common/event';\n\nexport interface IInsertEvent {\n  index: number;\n  amount: number;\n}\n\nexport interface IDeleteEvent {\n  index: number;\n  amount: number;\n}\n\n/**\n * Represents a circular list; a list with a maximum size that wraps around when push is called,\n * overriding values at the start of the list.\n */\nexport class CircularList<T> extends Disposable implements ICircularList<T> {\n  protected _array: (T | undefined)[];\n  private _startIndex: number;\n  private _length: number;\n\n  public readonly onDeleteEmitter = this._register(new Emitter<IDeleteEvent>());\n  public readonly onDelete = this.onDeleteEmitter.event;\n  public readonly onInsertEmitter = this._register(new Emitter<IInsertEvent>());\n  public readonly onInsert = this.onInsertEmitter.event;\n  public readonly onTrimEmitter = this._register(new Emitter<number>());\n  public readonly onTrim = this.onTrimEmitter.event;\n\n  constructor(\n    private _maxLength: number\n  ) {\n    super();\n    this._array = new Array<T>(this._maxLength);\n    this._startIndex = 0;\n    this._length = 0;\n  }\n\n  public get maxLength(): number {\n    return this._maxLength;\n  }\n\n  public set maxLength(newMaxLength: number) {\n    // There was no change in maxLength, return early.\n    if (this._maxLength === newMaxLength) {\n      return;\n    }\n\n    // Reconstruct array, starting at index 0. Only transfer values from the\n    // indexes 0 to length.\n    const newArray = new Array<T | undefined>(newMaxLength);\n    for (let i = 0; i < Math.min(newMaxLength, this.length); i++) {\n      newArray[i] = this._array[this._getCyclicIndex(i)];\n    }\n    this._array = newArray;\n    this._maxLength = newMaxLength;\n    this._startIndex = 0;\n  }\n\n  public get length(): number {\n    return this._length;\n  }\n\n  public set length(newLength: number) {\n    if (newLength > this._length) {\n      for (let i = this._length; i < newLength; i++) {\n        this._array[i] = undefined;\n      }\n    }\n    this._length = newLength;\n  }\n\n  /**\n   * Gets the value at an index.\n   *\n   * Note that for performance reasons there is no bounds checking here, the index reference is\n   * circular so this should always return a value and never throw.\n   * @param index The index of the value to get.\n   * @returns The value corresponding to the index.\n   */\n  public get(index: number): T | undefined {\n    return this._array[this._getCyclicIndex(index)];\n  }\n\n  /**\n   * Sets the value at an index.\n   *\n   * Note that for performance reasons there is no bounds checking here, the index reference is\n   * circular so this should always return a value and never throw.\n   * @param index The index to set.\n   * @param value The value to set.\n   */\n  public set(index: number, value: T | undefined): void {\n    this._array[this._getCyclicIndex(index)] = value;\n  }\n\n  /**\n   * Pushes a new value onto the list, wrapping around to the start of the array, overriding index 0\n   * if the maximum length is reached.\n   * @param value The value to push onto the list.\n   */\n  public push(value: T): void {\n    this._array[this._getCyclicIndex(this._length)] = value;\n    if (this._length === this._maxLength) {\n      this._startIndex = ++this._startIndex % this._maxLength;\n      this.onTrimEmitter.fire(1);\n    } else {\n      this._length++;\n    }\n  }\n\n  /**\n   * Advance ringbuffer index and return current element for recycling.\n   * Note: The buffer must be full for this method to work.\n   * @throws When the buffer is not full.\n   */\n  public recycle(): T {\n    if (this._length !== this._maxLength) {\n      throw new Error('Can only recycle when the buffer is full');\n    }\n    this._startIndex = ++this._startIndex % this._maxLength;\n    this.onTrimEmitter.fire(1);\n    return this._array[this._getCyclicIndex(this._length - 1)]!;\n  }\n\n  /**\n   * Ringbuffer is at max length.\n   */\n  public get isFull(): boolean {\n    return this._length === this._maxLength;\n  }\n\n  /**\n   * Removes and returns the last value on the list.\n   * @returns The popped value.\n   */\n  public pop(): T | undefined {\n    return this._array[this._getCyclicIndex(this._length-- - 1)];\n  }\n\n  /**\n   * Deletes and/or inserts items at a particular index (in that order). Unlike\n   * Array.prototype.splice, this operation does not return the deleted items as a new array in\n   * order to save creating a new array. Note that this operation may shift all values in the list\n   * in the worst case.\n   * @param start The index to delete and/or insert.\n   * @param deleteCount The number of elements to delete.\n   * @param items The items to insert.\n   */\n  public splice(start: number, deleteCount: number, ...items: T[]): void {\n    // Delete items\n    if (deleteCount) {\n      for (let i = start; i < this._length - deleteCount; i++) {\n        this._array[this._getCyclicIndex(i)] = this._array[this._getCyclicIndex(i + deleteCount)];\n      }\n      this._length -= deleteCount;\n      this.onDeleteEmitter.fire({ index: start, amount: deleteCount });\n    }\n\n    // Add items\n    for (let i = this._length - 1; i >= start; i--) {\n      this._array[this._getCyclicIndex(i + items.length)] = this._array[this._getCyclicIndex(i)];\n    }\n    for (let i = 0; i < items.length; i++) {\n      this._array[this._getCyclicIndex(start + i)] = items[i];\n    }\n    if (items.length) {\n      this.onInsertEmitter.fire({ index: start, amount: items.length });\n    }\n\n    // Adjust length as needed\n    if (this._length + items.length > this._maxLength) {\n      const countToTrim = (this._length + items.length) - this._maxLength;\n      this._startIndex += countToTrim;\n      this._length = this._maxLength;\n      this.onTrimEmitter.fire(countToTrim);\n    } else {\n      this._length += items.length;\n    }\n  }\n\n  /**\n   * Trims a number of items from the start of the list.\n   * @param count The number of items to remove.\n   */\n  public trimStart(count: number): void {\n    if (count > this._length) {\n      count = this._length;\n    }\n    this._startIndex += count;\n    this._length -= count;\n    this.onTrimEmitter.fire(count);\n  }\n\n  public shiftElements(start: number, count: number, offset: number): void {\n    if (count <= 0) {\n      return;\n    }\n    if (start < 0 || start >= this._length) {\n      throw new Error('start argument out of range');\n    }\n    if (start + offset < 0) {\n      throw new Error('Cannot shift elements in list beyond index 0');\n    }\n\n    if (offset > 0) {\n      for (let i = count - 1; i >= 0; i--) {\n        this.set(start + i + offset, this.get(start + i));\n      }\n      const expandListBy = (start + count + offset) - this._length;\n      if (expandListBy > 0) {\n        this._length += expandListBy;\n        while (this._length > this._maxLength) {\n          this._length--;\n          this._startIndex++;\n          this.onTrimEmitter.fire(1);\n        }\n      }\n    } else {\n      for (let i = 0; i < count; i++) {\n        this.set(start + i + offset, this.get(start + i));\n      }\n    }\n  }\n\n  /**\n   * Gets the cyclic index for the specified regular index. The cyclic index can then be used on the\n   * backing array to get the element associated with the regular index.\n   * @param index The regular index.\n   * @returns The cyclic index.\n   */\n  private _getCyclicIndex(index: number): number {\n    return (this._startIndex + index) % this._maxLength;\n  }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/*\n * A simple utility for cloning values\n */\nexport function clone<T>(val: T, depth: number = 5): T {\n  if (typeof val !== 'object') {\n    return val;\n  }\n\n  // If we're cloning an array, use an array as the base, otherwise use an object\n  const clonedObject: any = Array.isArray(val) ? [] : {};\n\n  for (const key in val) {\n    // Recursively clone eack item unless we're at the maximum depth\n    clonedObject[key] = depth <= 1 ? val[key] : (val[key] && clone(val[key], depth - 1));\n  }\n\n  return clonedObject as T;\n}\n","/**\n * Copyright (c) 2014-2020 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n *\n * Originally forked from (with the author's permission):\n *   Fabrice Bellard's javascript vt100 for jslinux:\n *   http://bellard.org/jslinux/\n *   Copyright (c) 2011 Fabrice Bellard\n *   The original design remains. The terminal itself\n *   has been extended to include xterm CSI codes, among\n *   other features.\n *\n * Terminal Emulation References:\n *   http://vt100.net/\n *   http://invisible-island.net/xterm/ctlseqs/ctlseqs.txt\n *   http://invisible-island.net/xterm/ctlseqs/ctlseqs.html\n *   http://invisible-island.net/vttest/\n *   http://www.inwap.com/pdp10/ansicode.txt\n *   http://linux.die.net/man/4/console_codes\n *   http://linux.die.net/man/7/urxvt\n */\n\nimport { IInstantiationService, IOptionsService, IBufferService, ILogService, ICharsetService, ICoreService, ICoreMouseService, IUnicodeService, LogLevelEnum, ITerminalOptions, IOscLinkService } from 'common/services/Services';\nimport { InstantiationService } from 'common/services/InstantiationService';\nimport { LogService } from 'common/services/LogService';\nimport { BufferService, MINIMUM_COLS, MINIMUM_ROWS } from 'common/services/BufferService';\nimport { OptionsService } from 'common/services/OptionsService';\nimport { IDisposable, IAttributeData, ICoreTerminal, IScrollEvent } from 'common/Types';\nimport { CoreService } from 'common/services/CoreService';\nimport { CoreMouseService } from 'common/services/CoreMouseService';\nimport { UnicodeService } from 'common/services/UnicodeService';\nimport { CharsetService } from 'common/services/CharsetService';\nimport { updateWindowsModeWrappedState } from 'common/WindowsMode';\nimport { IFunctionIdentifier, IParams } from 'common/parser/Types';\nimport { IBufferSet } from 'common/buffer/Types';\nimport { InputHandler } from 'common/InputHandler';\nimport { WriteBuffer } from 'common/input/WriteBuffer';\nimport { OscLinkService } from 'common/services/OscLinkService';\nimport { Emitter, Event } from 'vs/base/common/event';\nimport { Disposable, MutableDisposable, toDisposable } from 'vs/base/common/lifecycle';\n\n// Only trigger this warning a single time per session\nlet hasWriteSyncWarnHappened = false;\n\nexport abstract class CoreTerminal extends Disposable implements ICoreTerminal {\n  protected readonly _instantiationService: IInstantiationService;\n  protected readonly _bufferService: IBufferService;\n  protected readonly _logService: ILogService;\n  protected readonly _charsetService: ICharsetService;\n  protected readonly _oscLinkService: IOscLinkService;\n\n  public readonly coreMouseService: ICoreMouseService;\n  public readonly coreService: ICoreService;\n  public readonly unicodeService: IUnicodeService;\n  public readonly optionsService: IOptionsService;\n\n  protected _inputHandler: InputHandler;\n  private _writeBuffer: WriteBuffer;\n  private _windowsWrappingHeuristics = this._register(new MutableDisposable());\n\n  private readonly _onBinary = this._register(new Emitter<string>());\n  public readonly onBinary = this._onBinary.event;\n  private readonly _onData = this._register(new Emitter<string>());\n  public readonly onData = this._onData.event;\n  protected _onLineFeed = this._register(new Emitter<void>());\n  public readonly onLineFeed = this._onLineFeed.event;\n  private readonly _onResize = this._register(new Emitter<{ cols: number, rows: number }>());\n  public readonly onResize = this._onResize.event;\n  protected readonly _onWriteParsed = this._register(new Emitter<void>());\n  public readonly onWriteParsed = this._onWriteParsed.event;\n\n  /**\n   * Internally we track the source of the scroll but this is meaningless outside the library so\n   * it's filtered out.\n   */\n  protected _onScrollApi?: Emitter<number>;\n  protected _onScroll = this._register(new Emitter<IScrollEvent>());\n  public get onScroll(): Event<number> {\n    if (!this._onScrollApi) {\n      this._onScrollApi = this._register(new Emitter<number>());\n      this._onScroll.event(ev => {\n        this._onScrollApi?.fire(ev.position);\n      });\n    }\n    return this._onScrollApi.event;\n  }\n\n  public get cols(): number { return this._bufferService.cols; }\n  public get rows(): number { return this._bufferService.rows; }\n  public get buffers(): IBufferSet { return this._bufferService.buffers; }\n  public get options(): Required<ITerminalOptions> { return this.optionsService.options; }\n  public set options(options: ITerminalOptions) {\n    for (const key in options) {\n      this.optionsService.options[key] = options[key];\n    }\n  }\n\n  constructor(\n    options: Partial<ITerminalOptions>\n  ) {\n    super();\n\n    // Setup and initialize services\n    this._instantiationService = new InstantiationService();\n    this.optionsService = this._register(new OptionsService(options));\n    this._instantiationService.setService(IOptionsService, this.optionsService);\n    this._bufferService = this._register(this._instantiationService.createInstance(BufferService));\n    this._instantiationService.setService(IBufferService, this._bufferService);\n    this._logService = this._register(this._instantiationService.createInstance(LogService));\n    this._instantiationService.setService(ILogService, this._logService);\n    this.coreService = this._register(this._instantiationService.createInstance(CoreService));\n    this._instantiationService.setService(ICoreService, this.coreService);\n    this.coreMouseService = this._register(this._instantiationService.createInstance(CoreMouseService));\n    this._instantiationService.setService(ICoreMouseService, this.coreMouseService);\n    this.unicodeService = this._register(this._instantiationService.createInstance(UnicodeService));\n    this._instantiationService.setService(IUnicodeService, this.unicodeService);\n    this._charsetService = this._instantiationService.createInstance(CharsetService);\n    this._instantiationService.setService(ICharsetService, this._charsetService);\n    this._oscLinkService = this._instantiationService.createInstance(OscLinkService);\n    this._instantiationService.setService(IOscLinkService, this._oscLinkService);\n\n\n    // Register input handler and handle/forward events\n    this._inputHandler = this._register(new InputHandler(this._bufferService, this._charsetService, this.coreService, this._logService, this.optionsService, this._oscLinkService, this.coreMouseService, this.unicodeService));\n    this._register(Event.forward(this._inputHandler.onLineFeed, this._onLineFeed));\n    this._register(this._inputHandler);\n\n    // Setup listeners\n    this._register(Event.forward(this._bufferService.onResize, this._onResize));\n    this._register(Event.forward(this.coreService.onData, this._onData));\n    this._register(Event.forward(this.coreService.onBinary, this._onBinary));\n    this._register(this.coreService.onRequestScrollToBottom(() => this.scrollToBottom(true)));\n    this._register(this.coreService.onUserInput(() =>  this._writeBuffer.handleUserInput()));\n    this._register(this.optionsService.onMultipleOptionChange(['windowsMode', 'windowsPty'], () => this._handleWindowsPtyOptionChange()));\n    this._register(this._bufferService.onScroll(() => {\n      this._onScroll.fire({ position: this._bufferService.buffer.ydisp });\n      this._inputHandler.markRangeDirty(this._bufferService.buffer.scrollTop, this._bufferService.buffer.scrollBottom);\n    }));\n    // Setup WriteBuffer\n    this._writeBuffer = this._register(new WriteBuffer((data, promiseResult) => this._inputHandler.parse(data, promiseResult)));\n    this._register(Event.forward(this._writeBuffer.onWriteParsed, this._onWriteParsed));\n  }\n\n  public write(data: string | Uint8Array, callback?: () => void): void {\n    this._writeBuffer.write(data, callback);\n  }\n\n  /**\n   * Write data to terminal synchonously.\n   *\n   * This method is unreliable with async parser handlers, thus should not\n   * be used anymore. If you need blocking semantics on data input consider\n   * `write` with a callback instead.\n   *\n   * @deprecated Unreliable, will be removed soon.\n   */\n  public writeSync(data: string | Uint8Array, maxSubsequentCalls?: number): void {\n    if (this._logService.logLevel <= LogLevelEnum.WARN && !hasWriteSyncWarnHappened) {\n      this._logService.warn('writeSync is unreliable and will be removed soon.');\n      hasWriteSyncWarnHappened = true;\n    }\n    this._writeBuffer.writeSync(data, maxSubsequentCalls);\n  }\n\n  public input(data: string, wasUserInput: boolean = true): void {\n    this.coreService.triggerDataEvent(data, wasUserInput);\n  }\n\n  public resize(x: number, y: number): void {\n    if (isNaN(x) || isNaN(y)) {\n      return;\n    }\n\n    x = Math.max(x, MINIMUM_COLS);\n    y = Math.max(y, MINIMUM_ROWS);\n\n    this._bufferService.resize(x, y);\n  }\n\n  /**\n   * Scroll the terminal down 1 row, creating a blank line.\n   * @param eraseAttr The attribute data to use the for blank line.\n   * @param isWrapped Whether the new line is wrapped from the previous line.\n   */\n  public scroll(eraseAttr: IAttributeData, isWrapped: boolean = false): void {\n    this._bufferService.scroll(eraseAttr, isWrapped);\n  }\n\n  /**\n   * Scroll the display of the terminal\n   * @param disp The number of lines to scroll down (negative scroll up).\n   * @param suppressScrollEvent Don't emit the scroll event as scrollLines. This is used to avoid\n   * unwanted events being handled by the viewport when the event was triggered from the viewport\n   * originally.\n   */\n  public scrollLines(disp: number, suppressScrollEvent?: boolean): void {\n    this._bufferService.scrollLines(disp, suppressScrollEvent);\n  }\n\n  public scrollPages(pageCount: number): void {\n    this.scrollLines(pageCount * (this.rows - 1));\n  }\n\n  public scrollToTop(): void {\n    this.scrollLines(-this._bufferService.buffer.ydisp);\n  }\n\n  public scrollToBottom(disableSmoothScroll?: boolean): void {\n    this.scrollLines(this._bufferService.buffer.ybase - this._bufferService.buffer.ydisp);\n  }\n\n  public scrollToLine(line: number): void {\n    const scrollAmount = line - this._bufferService.buffer.ydisp;\n    if (scrollAmount !== 0) {\n      this.scrollLines(scrollAmount);\n    }\n  }\n\n  /** Add handler for ESC escape sequence. See xterm.d.ts for details. */\n  public registerEscHandler(id: IFunctionIdentifier, callback: () => boolean | Promise<boolean>): IDisposable {\n    return this._inputHandler.registerEscHandler(id, callback);\n  }\n\n  /** Add handler for DCS escape sequence. See xterm.d.ts for details. */\n  public registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: IParams) => boolean | Promise<boolean>): IDisposable {\n    return this._inputHandler.registerDcsHandler(id, callback);\n  }\n\n  /** Add handler for CSI escape sequence. See xterm.d.ts for details. */\n  public registerCsiHandler(id: IFunctionIdentifier, callback: (params: IParams) => boolean | Promise<boolean>): IDisposable {\n    return this._inputHandler.registerCsiHandler(id, callback);\n  }\n\n  /** Add handler for OSC escape sequence. See xterm.d.ts for details. */\n  public registerOscHandler(ident: number, callback: (data: string) => boolean | Promise<boolean>): IDisposable {\n    return this._inputHandler.registerOscHandler(ident, callback);\n  }\n\n  protected _setup(): void {\n    this._handleWindowsPtyOptionChange();\n  }\n\n  public reset(): void {\n    this._inputHandler.reset();\n    this._bufferService.reset();\n    this._charsetService.reset();\n    this.coreService.reset();\n    this.coreMouseService.reset();\n  }\n\n\n  private _handleWindowsPtyOptionChange(): void {\n    let value = false;\n    const windowsPty = this.optionsService.rawOptions.windowsPty;\n    if (windowsPty && windowsPty.buildNumber !== undefined && windowsPty.buildNumber !== undefined) {\n      value = !!(windowsPty.backend === 'conpty' && windowsPty.buildNumber < 21376);\n    } else if (this.optionsService.rawOptions.windowsMode) {\n      value = true;\n    }\n    if (value) {\n      this._enableWindowsWrappingHeuristics();\n    } else {\n      this._windowsWrappingHeuristics.clear();\n    }\n  }\n\n  protected _enableWindowsWrappingHeuristics(): void {\n    if (!this._windowsWrappingHeuristics.value) {\n      const disposables: IDisposable[] = [];\n      disposables.push(this.onLineFeed(updateWindowsModeWrappedState.bind(null, this._bufferService)));\n      disposables.push(this.registerCsiHandler({ final: 'H' }, () => {\n        updateWindowsModeWrappedState(this._bufferService);\n        return false;\n      }));\n      this._windowsWrappingHeuristics.value = toDisposable(() => {\n        for (const d of disposables) {\n          d.dispose();\n        }\n      });\n    }\n  }\n}\n","/**\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n */\n\nimport { IInputHandler, IAttributeData, IDisposable, IWindowOptions, IColorEvent, IParseStack, ColorIndex, ColorRequestType, SpecialColorIndex } from 'common/Types';\nimport { C0, C1 } from 'common/data/EscapeSequences';\nimport { CHARSETS, DEFAULT_CHARSET } from 'common/data/Charsets';\nimport { EscapeSequenceParser } from 'common/parser/EscapeSequenceParser';\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport { StringToUtf32, stringFromCodePoint, Utf8ToUtf32 } from 'common/input/TextDecoder';\nimport { BufferLine, DEFAULT_ATTR_DATA } from 'common/buffer/BufferLine';\nimport { IParsingState, IEscapeSequenceParser, IParams, IFunctionIdentifier } from 'common/parser/Types';\nimport { NULL_CELL_CODE, NULL_CELL_WIDTH, Attributes, FgFlags, BgFlags, Content, UnderlineStyle } from 'common/buffer/Constants';\nimport { CellData } from 'common/buffer/CellData';\nimport { AttributeData } from 'common/buffer/AttributeData';\nimport { ICoreService, IBufferService, IOptionsService, ILogService, ICoreMouseService, ICharsetService, IUnicodeService, LogLevelEnum, IOscLinkService } from 'common/services/Services';\nimport { UnicodeService } from 'common/services/UnicodeService';\nimport { OscHandler } from 'common/parser/OscParser';\nimport { DcsHandler } from 'common/parser/DcsParser';\nimport { IBuffer } from 'common/buffer/Types';\nimport { parseColor } from 'common/input/XParseColor';\nimport { Emitter } from 'vs/base/common/event';\n\n/**\n * Map collect to glevel. Used in `selectCharset`.\n */\nconst GLEVEL: { [key: string]: number } = { '(': 0, ')': 1, '*': 2, '+': 3, '-': 1, '.': 2 };\n\n/**\n * VT commands done by the parser - FIXME: move this to the parser?\n */\n// @vt: #Y   ESC   CSI   \"Control Sequence Introducer\"   \"ESC [\"   \"Start of a CSI sequence.\"\n// @vt: #Y   ESC   OSC   \"Operating System Command\"      \"ESC ]\"   \"Start of an OSC sequence.\"\n// @vt: #Y   ESC   DCS   \"Device Control String\"         \"ESC P\"   \"Start of a DCS sequence.\"\n// @vt: #Y   ESC   ST    \"String Terminator\"             \"ESC \\\"   \"Terminator used for string type sequences.\"\n// @vt: #Y   ESC   PM    \"Privacy Message\"               \"ESC ^\"   \"Start of a privacy message.\"\n// @vt: #Y   ESC   APC   \"Application Program Command\"   \"ESC _\"   \"Start of an APC sequence.\"\n// @vt: #Y   C1    CSI   \"Control Sequence Introducer\"   \"\\x9B\"    \"Start of a CSI sequence.\"\n// @vt: #Y   C1    OSC   \"Operating System Command\"      \"\\x9D\"    \"Start of an OSC sequence.\"\n// @vt: #Y   C1    DCS   \"Device Control String\"         \"\\x90\"    \"Start of a DCS sequence.\"\n// @vt: #Y   C1    ST    \"String Terminator\"             \"\\x9C\"    \"Terminator used for string type sequences.\"\n// @vt: #Y   C1    PM    \"Privacy Message\"               \"\\x9E\"    \"Start of a privacy message.\"\n// @vt: #Y   C1    APC   \"Application Program Command\"   \"\\x9F\"    \"Start of an APC sequence.\"\n// @vt: #Y   C0    NUL   \"Null\"                          \"\\0, \\x00\"  \"NUL is ignored.\"\n// @vt: #Y   C0    ESC   \"Escape\"                        \"\\e, \\x1B\"  \"Start of a sequence. Cancels any other sequence.\"\n\n/**\n * Document xterm VT features here that are currently unsupported\n */\n// @vt: #E[Supported via @xterm/addon-image.]  DCS   SIXEL       \"SIXEL Graphics\"          \"DCS Ps ; Ps ; Ps ; q \tPt ST\"  \"Draw SIXEL image.\"\n// @vt: #N  DCS   DECUDK      \"User Defined Keys\"       \"DCS Ps ; Ps \\| Pt ST\"           \"Definitions for user-defined keys.\"\n// @vt: #N  DCS   XTGETTCAP   \"Request Terminfo String\" \"DCS + q Pt ST\"                 \"Request Terminfo String.\"\n// @vt: #N  DCS   XTSETTCAP   \"Set Terminfo Data\"       \"DCS + p Pt ST\"                 \"Set Terminfo Data.\"\n// @vt: #N  OSC   1           \"Set Icon Name\"           \"OSC 1 ; Pt BEL\"                \"Set icon name.\"\n\n/**\n * Max length of the UTF32 input buffer. Real memory consumption is 4 times higher.\n */\nconst MAX_PARSEBUFFER_LENGTH = 131072;\n\n/**\n * Limit length of title and icon name stacks.\n */\nconst STACK_LIMIT = 10;\n\n// map params to window option\nfunction paramToWindowOption(n: number, opts: IWindowOptions): boolean {\n  if (n > 24) {\n    return opts.setWinLines || false;\n  }\n  switch (n) {\n    case 1: return !!opts.restoreWin;\n    case 2: return !!opts.minimizeWin;\n    case 3: return !!opts.setWinPosition;\n    case 4: return !!opts.setWinSizePixels;\n    case 5: return !!opts.raiseWin;\n    case 6: return !!opts.lowerWin;\n    case 7: return !!opts.refreshWin;\n    case 8: return !!opts.setWinSizeChars;\n    case 9: return !!opts.maximizeWin;\n    case 10: return !!opts.fullscreenWin;\n    case 11: return !!opts.getWinState;\n    case 13: return !!opts.getWinPosition;\n    case 14: return !!opts.getWinSizePixels;\n    case 15: return !!opts.getScreenSizePixels;\n    case 16: return !!opts.getCellSizePixels;\n    case 18: return !!opts.getWinSizeChars;\n    case 19: return !!opts.getScreenSizeChars;\n    case 20: return !!opts.getIconTitle;\n    case 21: return !!opts.getWinTitle;\n    case 22: return !!opts.pushTitle;\n    case 23: return !!opts.popTitle;\n    case 24: return !!opts.setWinLines;\n  }\n  return false;\n}\n\nexport enum WindowsOptionsReportType {\n  GET_WIN_SIZE_PIXELS = 0,\n  GET_CELL_SIZE_PIXELS = 1\n}\n\n// create a warning log if an async handler takes longer than the limit (in ms)\nconst SLOW_ASYNC_LIMIT = 5000;\n\n// Work variables to avoid garbage collection\nlet $temp = 0;\n\n/**\n * The terminal's standard implementation of IInputHandler, this handles all\n * input from the Parser.\n *\n * Refer to http://invisible-island.net/xterm/ctlseqs/ctlseqs.html to understand\n * each function's header comment.\n */\nexport class InputHandler extends Disposable implements IInputHandler {\n  private _parseBuffer: Uint32Array = new Uint32Array(4096);\n  private _stringDecoder: StringToUtf32 = new StringToUtf32();\n  private _utf8Decoder: Utf8ToUtf32 = new Utf8ToUtf32();\n  private _windowTitle = '';\n  private _iconName = '';\n  private _dirtyRowTracker: IDirtyRowTracker;\n  protected _windowTitleStack: string[] = [];\n  protected _iconNameStack: string[] = [];\n\n  private _curAttrData: IAttributeData = DEFAULT_ATTR_DATA.clone();\n  public getAttrData(): IAttributeData { return this._curAttrData; }\n  private _eraseAttrDataInternal: IAttributeData = DEFAULT_ATTR_DATA.clone();\n\n  private _activeBuffer: IBuffer;\n\n  private readonly _onRequestBell = this._register(new Emitter<void>());\n  public readonly onRequestBell = this._onRequestBell.event;\n  private readonly _onRequestRefreshRows = this._register(new Emitter<{ start: number, end: number } | undefined>());\n  public readonly onRequestRefreshRows = this._onRequestRefreshRows.event;\n  private readonly _onRequestReset = this._register(new Emitter<void>());\n  public readonly onRequestReset = this._onRequestReset.event;\n  private readonly _onRequestSendFocus = this._register(new Emitter<void>());\n  public readonly onRequestSendFocus = this._onRequestSendFocus.event;\n  private readonly _onRequestSyncScrollBar = this._register(new Emitter<void>());\n  public readonly onRequestSyncScrollBar = this._onRequestSyncScrollBar.event;\n  private readonly _onRequestWindowsOptionsReport = this._register(new Emitter<WindowsOptionsReportType>());\n  public readonly onRequestWindowsOptionsReport = this._onRequestWindowsOptionsReport.event;\n\n  private readonly _onA11yChar = this._register(new Emitter<string>());\n  public readonly onA11yChar = this._onA11yChar.event;\n  private readonly _onA11yTab = this._register(new Emitter<number>());\n  public readonly onA11yTab = this._onA11yTab.event;\n  private readonly _onCursorMove = this._register(new Emitter<void>());\n  public readonly onCursorMove = this._onCursorMove.event;\n  private readonly _onLineFeed = this._register(new Emitter<void>());\n  public readonly onLineFeed = this._onLineFeed.event;\n  private readonly _onScroll = this._register(new Emitter<number>());\n  public readonly onScroll = this._onScroll.event;\n  private readonly _onTitleChange = this._register(new Emitter<string>());\n  public readonly onTitleChange = this._onTitleChange.event;\n  private readonly _onColor = this._register(new Emitter<IColorEvent>());\n  public readonly onColor = this._onColor.event;\n\n  private _parseStack: IParseStack = {\n    paused: false,\n    cursorStartX: 0,\n    cursorStartY: 0,\n    decodedLength: 0,\n    position: 0\n  };\n\n  constructor(\n    private readonly _bufferService: IBufferService,\n    private readonly _charsetService: ICharsetService,\n    private readonly _coreService: ICoreService,\n    private readonly _logService: ILogService,\n    private readonly _optionsService: IOptionsService,\n    private readonly _oscLinkService: IOscLinkService,\n    private readonly _coreMouseService: ICoreMouseService,\n    private readonly _unicodeService: IUnicodeService,\n    private readonly _parser: IEscapeSequenceParser = new EscapeSequenceParser()\n  ) {\n    super();\n    this._register(this._parser);\n    this._dirtyRowTracker = new DirtyRowTracker(this._bufferService);\n\n    // Track properties used in performance critical code manually to avoid using slow getters\n    this._activeBuffer = this._bufferService.buffer;\n    this._register(this._bufferService.buffers.onBufferActivate(e => this._activeBuffer = e.activeBuffer));\n\n    /**\n     * custom fallback handlers\n     */\n    this._parser.setCsiHandlerFallback((ident, params) => {\n      this._logService.debug('Unknown CSI code: ', { identifier: this._parser.identToString(ident), params: params.toArray() });\n    });\n    this._parser.setEscHandlerFallback(ident => {\n      this._logService.debug('Unknown ESC code: ', { identifier: this._parser.identToString(ident) });\n    });\n    this._parser.setExecuteHandlerFallback(code => {\n      this._logService.debug('Unknown EXECUTE code: ', { code });\n    });\n    this._parser.setOscHandlerFallback((identifier, action, data) => {\n      this._logService.debug('Unknown OSC code: ', { identifier, action, data });\n    });\n    this._parser.setDcsHandlerFallback((ident, action, payload) => {\n      if (action === 'HOOK') {\n        payload = payload.toArray();\n      }\n      this._logService.debug('Unknown DCS code: ', { identifier: this._parser.identToString(ident), action, payload });\n    });\n\n    /**\n     * print handler\n     */\n    this._parser.setPrintHandler((data, start, end) => this.print(data, start, end));\n\n    /**\n     * CSI handler\n     */\n    this._parser.registerCsiHandler({ final: '@' }, params => this.insertChars(params));\n    this._parser.registerCsiHandler({ intermediates: ' ', final: '@' }, params => this.scrollLeft(params));\n    this._parser.registerCsiHandler({ final: 'A' }, params => this.cursorUp(params));\n    this._parser.registerCsiHandler({ intermediates: ' ', final: 'A' }, params => this.scrollRight(params));\n    this._parser.registerCsiHandler({ final: 'B' }, params => this.cursorDown(params));\n    this._parser.registerCsiHandler({ final: 'C' }, params => this.cursorForward(params));\n    this._parser.registerCsiHandler({ final: 'D' }, params => this.cursorBackward(params));\n    this._parser.registerCsiHandler({ final: 'E' }, params => this.cursorNextLine(params));\n    this._parser.registerCsiHandler({ final: 'F' }, params => this.cursorPrecedingLine(params));\n    this._parser.registerCsiHandler({ final: 'G' }, params => this.cursorCharAbsolute(params));\n    this._parser.registerCsiHandler({ final: 'H' }, params => this.cursorPosition(params));\n    this._parser.registerCsiHandler({ final: 'I' }, params => this.cursorForwardTab(params));\n    this._parser.registerCsiHandler({ final: 'J' }, params => this.eraseInDisplay(params, false));\n    this._parser.registerCsiHandler({ prefix: '?', final: 'J' }, params => this.eraseInDisplay(params, true));\n    this._parser.registerCsiHandler({ final: 'K' }, params => this.eraseInLine(params, false));\n    this._parser.registerCsiHandler({ prefix: '?', final: 'K' }, params => this.eraseInLine(params, true));\n    this._parser.registerCsiHandler({ final: 'L' }, params => this.insertLines(params));\n    this._parser.registerCsiHandler({ final: 'M' }, params => this.deleteLines(params));\n    this._parser.registerCsiHandler({ final: 'P' }, params => this.deleteChars(params));\n    this._parser.registerCsiHandler({ final: 'S' }, params => this.scrollUp(params));\n    this._parser.registerCsiHandler({ final: 'T' }, params => this.scrollDown(params));\n    this._parser.registerCsiHandler({ final: 'X' }, params => this.eraseChars(params));\n    this._parser.registerCsiHandler({ final: 'Z' }, params => this.cursorBackwardTab(params));\n    this._parser.registerCsiHandler({ final: '`' }, params => this.charPosAbsolute(params));\n    this._parser.registerCsiHandler({ final: 'a' }, params => this.hPositionRelative(params));\n    this._parser.registerCsiHandler({ final: 'b' }, params => this.repeatPrecedingCharacter(params));\n    this._parser.registerCsiHandler({ final: 'c' }, params => this.sendDeviceAttributesPrimary(params));\n    this._parser.registerCsiHandler({ prefix: '>', final: 'c' }, params => this.sendDeviceAttributesSecondary(params));\n    this._parser.registerCsiHandler({ final: 'd' }, params => this.linePosAbsolute(params));\n    this._parser.registerCsiHandler({ final: 'e' }, params => this.vPositionRelative(params));\n    this._parser.registerCsiHandler({ final: 'f' }, params => this.hVPosition(params));\n    this._parser.registerCsiHandler({ final: 'g' }, params => this.tabClear(params));\n    this._parser.registerCsiHandler({ final: 'h' }, params => this.setMode(params));\n    this._parser.registerCsiHandler({ prefix: '?', final: 'h' }, params => this.setModePrivate(params));\n    this._parser.registerCsiHandler({ final: 'l' }, params => this.resetMode(params));\n    this._parser.registerCsiHandler({ prefix: '?', final: 'l' }, params => this.resetModePrivate(params));\n    this._parser.registerCsiHandler({ final: 'm' }, params => this.charAttributes(params));\n    this._parser.registerCsiHandler({ final: 'n' }, params => this.deviceStatus(params));\n    this._parser.registerCsiHandler({ prefix: '?', final: 'n' }, params => this.deviceStatusPrivate(params));\n    this._parser.registerCsiHandler({ intermediates: '!', final: 'p' }, params => this.softReset(params));\n    this._parser.registerCsiHandler({ intermediates: ' ', final: 'q' }, params => this.setCursorStyle(params));\n    this._parser.registerCsiHandler({ final: 'r' }, params => this.setScrollRegion(params));\n    this._parser.registerCsiHandler({ final: 's' }, params => this.saveCursor(params));\n    this._parser.registerCsiHandler({ final: 't' }, params => this.windowOptions(params));\n    this._parser.registerCsiHandler({ final: 'u' }, params => this.restoreCursor(params));\n    this._parser.registerCsiHandler({ intermediates: '\\'', final: '}' }, params => this.insertColumns(params));\n    this._parser.registerCsiHandler({ intermediates: '\\'', final: '~' }, params => this.deleteColumns(params));\n    this._parser.registerCsiHandler({ intermediates: '\"', final: 'q' }, params => this.selectProtected(params));\n    this._parser.registerCsiHandler({ intermediates: '$', final: 'p' }, params => this.requestMode(params, true));\n    this._parser.registerCsiHandler({ prefix: '?', intermediates: '$', final: 'p' }, params => this.requestMode(params, false));\n\n    /**\n     * execute handler\n     */\n    this._parser.setExecuteHandler(C0.BEL, () => this.bell());\n    this._parser.setExecuteHandler(C0.LF, () => this.lineFeed());\n    this._parser.setExecuteHandler(C0.VT, () => this.lineFeed());\n    this._parser.setExecuteHandler(C0.FF, () => this.lineFeed());\n    this._parser.setExecuteHandler(C0.CR, () => this.carriageReturn());\n    this._parser.setExecuteHandler(C0.BS, () => this.backspace());\n    this._parser.setExecuteHandler(C0.HT, () => this.tab());\n    this._parser.setExecuteHandler(C0.SO, () => this.shiftOut());\n    this._parser.setExecuteHandler(C0.SI, () => this.shiftIn());\n    // FIXME:   What do to with missing? Old code just added those to print.\n\n    this._parser.setExecuteHandler(C1.IND, () => this.index());\n    this._parser.setExecuteHandler(C1.NEL, () => this.nextLine());\n    this._parser.setExecuteHandler(C1.HTS, () => this.tabSet());\n\n    /**\n     * OSC handler\n     */\n    //   0 - icon name + title\n    this._parser.registerOscHandler(0, new OscHandler(data => { this.setTitle(data); this.setIconName(data); return true; }));\n    //   1 - icon name\n    this._parser.registerOscHandler(1, new OscHandler(data => this.setIconName(data)));\n    //   2 - title\n    this._parser.registerOscHandler(2, new OscHandler(data => this.setTitle(data)));\n    //   3 - set property X in the form \"prop=value\"\n    //   4 - Change Color Number\n    this._parser.registerOscHandler(4, new OscHandler(data => this.setOrReportIndexedColor(data)));\n    //   5 - Change Special Color Number\n    //   6 - Enable/disable Special Color Number c\n    //   7 - current directory? (not in xterm spec, see https://gitlab.com/gnachman/iterm2/issues/3939)\n    //   8 - create hyperlink (not in xterm spec, see https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda)\n    this._parser.registerOscHandler(8, new OscHandler(data => this.setHyperlink(data)));\n    //  10 - Change VT100 text foreground color to Pt.\n    this._parser.registerOscHandler(10, new OscHandler(data => this.setOrReportFgColor(data)));\n    //  11 - Change VT100 text background color to Pt.\n    this._parser.registerOscHandler(11, new OscHandler(data => this.setOrReportBgColor(data)));\n    //  12 - Change text cursor color to Pt.\n    this._parser.registerOscHandler(12, new OscHandler(data => this.setOrReportCursorColor(data)));\n    //  13 - Change mouse foreground color to Pt.\n    //  14 - Change mouse background color to Pt.\n    //  15 - Change Tektronix foreground color to Pt.\n    //  16 - Change Tektronix background color to Pt.\n    //  17 - Change highlight background color to Pt.\n    //  18 - Change Tektronix cursor color to Pt.\n    //  19 - Change highlight foreground color to Pt.\n    //  46 - Change Log File to Pt.\n    //  50 - Set Font to Pt.\n    //  51 - reserved for Emacs shell.\n    //  52 - Manipulate Selection Data.\n    // 104 ; c - Reset Color Number c.\n    this._parser.registerOscHandler(104, new OscHandler(data => this.restoreIndexedColor(data)));\n    // 105 ; c - Reset Special Color Number c.\n    // 106 ; c; f - Enable/disable Special Color Number c.\n    // 110 - Reset VT100 text foreground color.\n    this._parser.registerOscHandler(110, new OscHandler(data => this.restoreFgColor(data)));\n    // 111 - Reset VT100 text background color.\n    this._parser.registerOscHandler(111, new OscHandler(data => this.restoreBgColor(data)));\n    // 112 - Reset text cursor color.\n    this._parser.registerOscHandler(112, new OscHandler(data => this.restoreCursorColor(data)));\n    // 113 - Reset mouse foreground color.\n    // 114 - Reset mouse background color.\n    // 115 - Reset Tektronix foreground color.\n    // 116 - Reset Tektronix background color.\n    // 117 - Reset highlight color.\n    // 118 - Reset Tektronix cursor color.\n    // 119 - Reset highlight foreground color.\n\n    /**\n     * ESC handlers\n     */\n    this._parser.registerEscHandler({ final: '7' }, () => this.saveCursor());\n    this._parser.registerEscHandler({ final: '8' }, () => this.restoreCursor());\n    this._parser.registerEscHandler({ final: 'D' }, () => this.index());\n    this._parser.registerEscHandler({ final: 'E' }, () => this.nextLine());\n    this._parser.registerEscHandler({ final: 'H' }, () => this.tabSet());\n    this._parser.registerEscHandler({ final: 'M' }, () => this.reverseIndex());\n    this._parser.registerEscHandler({ final: '=' }, () => this.keypadApplicationMode());\n    this._parser.registerEscHandler({ final: '>' }, () => this.keypadNumericMode());\n    this._parser.registerEscHandler({ final: 'c' }, () => this.fullReset());\n    this._parser.registerEscHandler({ final: 'n' }, () => this.setgLevel(2));\n    this._parser.registerEscHandler({ final: 'o' }, () => this.setgLevel(3));\n    this._parser.registerEscHandler({ final: '|' }, () => this.setgLevel(3));\n    this._parser.registerEscHandler({ final: '}' }, () => this.setgLevel(2));\n    this._parser.registerEscHandler({ final: '~' }, () => this.setgLevel(1));\n    this._parser.registerEscHandler({ intermediates: '%', final: '@' }, () => this.selectDefaultCharset());\n    this._parser.registerEscHandler({ intermediates: '%', final: 'G' }, () => this.selectDefaultCharset());\n    for (const flag in CHARSETS) {\n      this._parser.registerEscHandler({ intermediates: '(', final: flag }, () => this.selectCharset('(' + flag));\n      this._parser.registerEscHandler({ intermediates: ')', final: flag }, () => this.selectCharset(')' + flag));\n      this._parser.registerEscHandler({ intermediates: '*', final: flag }, () => this.selectCharset('*' + flag));\n      this._parser.registerEscHandler({ intermediates: '+', final: flag }, () => this.selectCharset('+' + flag));\n      this._parser.registerEscHandler({ intermediates: '-', final: flag }, () => this.selectCharset('-' + flag));\n      this._parser.registerEscHandler({ intermediates: '.', final: flag }, () => this.selectCharset('.' + flag));\n      this._parser.registerEscHandler({ intermediates: '/', final: flag }, () => this.selectCharset('/' + flag)); // TODO: supported?\n    }\n    this._parser.registerEscHandler({ intermediates: '#', final: '8' }, () => this.screenAlignmentPattern());\n\n    /**\n     * error handler\n     */\n    this._parser.setErrorHandler((state: IParsingState) => {\n      this._logService.error('Parsing error: ', state);\n      return state;\n    });\n\n    /**\n     * DCS handler\n     */\n    this._parser.registerDcsHandler({ intermediates: '$', final: 'q' }, new DcsHandler((data, params) => this.requestStatusString(data, params)));\n  }\n\n  /**\n   * Async parse support.\n   */\n  private _preserveStack(cursorStartX: number, cursorStartY: number, decodedLength: number, position: number): void {\n    this._parseStack.paused = true;\n    this._parseStack.cursorStartX = cursorStartX;\n    this._parseStack.cursorStartY = cursorStartY;\n    this._parseStack.decodedLength = decodedLength;\n    this._parseStack.position = position;\n  }\n\n  private _logSlowResolvingAsync(p: Promise<boolean>): void {\n    // log a limited warning about an async handler taking too long\n    if (this._logService.logLevel <= LogLevelEnum.WARN) {\n      Promise.race([p, new Promise((res, rej) => setTimeout(() => rej('#SLOW_TIMEOUT'), SLOW_ASYNC_LIMIT))])\n        .catch(err => {\n          if (err !== '#SLOW_TIMEOUT') {\n            throw err;\n          }\n          console.warn(`async parser handler taking longer than ${SLOW_ASYNC_LIMIT} ms`);\n        });\n    }\n  }\n\n  private _getCurrentLinkId(): number {\n    return this._curAttrData.extended.urlId;\n  }\n\n  /**\n   * Parse call with async handler support.\n   *\n   * Whether the stack state got preserved for the next call, is indicated by the return value:\n   * - undefined (void):\n   *   all handlers were sync, no stack save, continue normally with next chunk\n   * - Promise\\<boolean\\>:\n   *   execution stopped at async handler, stack saved, continue with same chunk and the promise\n   *   resolve value as `promiseResult` until the method returns `undefined`\n   *\n   * Note: This method should only be called by `Terminal.write` to ensure correct execution order\n   * and proper continuation of async parser handlers.\n   */\n  public parse(data: string | Uint8Array, promiseResult?: boolean): void | Promise<boolean> {\n    let result: void | Promise<boolean>;\n    let cursorStartX = this._activeBuffer.x;\n    let cursorStartY = this._activeBuffer.y;\n    let start = 0;\n    const wasPaused = this._parseStack.paused;\n\n    if (wasPaused) {\n      // assumption: _parseBuffer never mutates between async calls\n      if (result = this._parser.parse(this._parseBuffer, this._parseStack.decodedLength, promiseResult)) {\n        this._logSlowResolvingAsync(result);\n        return result;\n      }\n      cursorStartX = this._parseStack.cursorStartX;\n      cursorStartY = this._parseStack.cursorStartY;\n      this._parseStack.paused = false;\n      if (data.length > MAX_PARSEBUFFER_LENGTH) {\n        start = this._parseStack.position + MAX_PARSEBUFFER_LENGTH;\n      }\n    }\n\n    // Log debug data, the log level gate is to prevent extra work in this hot path\n    if (this._logService.logLevel <= LogLevelEnum.DEBUG) {\n      this._logService.debug(`parsing data ${typeof data === 'string' ? ` \"${data}\"` : ` \"${Array.prototype.map.call(data, e => String.fromCharCode(e)).join('')}\"`}`);\n    }\n    if (this._logService.logLevel === LogLevelEnum.TRACE) {\n      this._logService.trace(`parsing data (codes)`, typeof data === 'string'\n        ? data.split('').map(e => e.charCodeAt(0))\n        : data\n      );\n    }\n\n    // resize input buffer if needed\n    if (this._parseBuffer.length < data.length) {\n      if (this._parseBuffer.length < MAX_PARSEBUFFER_LENGTH) {\n        this._parseBuffer = new Uint32Array(Math.min(data.length, MAX_PARSEBUFFER_LENGTH));\n      }\n    }\n\n    // Clear the dirty row service so we know which lines changed as a result of parsing\n    // Important: do not clear between async calls, otherwise we lost pending update information.\n    if (!wasPaused) {\n      this._dirtyRowTracker.clearRange();\n    }\n\n    // process big data in smaller chunks\n    if (data.length > MAX_PARSEBUFFER_LENGTH) {\n      for (let i = start; i < data.length; i += MAX_PARSEBUFFER_LENGTH) {\n        const end = i + MAX_PARSEBUFFER_LENGTH < data.length ? i + MAX_PARSEBUFFER_LENGTH : data.length;\n        const len = (typeof data === 'string')\n          ? this._stringDecoder.decode(data.substring(i, end), this._parseBuffer)\n          : this._utf8Decoder.decode(data.subarray(i, end), this._parseBuffer);\n        if (result = this._parser.parse(this._parseBuffer, len)) {\n          this._preserveStack(cursorStartX, cursorStartY, len, i);\n          this._logSlowResolvingAsync(result);\n          return result;\n        }\n      }\n    } else {\n      if (!wasPaused) {\n        const len = (typeof data === 'string')\n          ? this._stringDecoder.decode(data, this._parseBuffer)\n          : this._utf8Decoder.decode(data, this._parseBuffer);\n        if (result = this._parser.parse(this._parseBuffer, len)) {\n          this._preserveStack(cursorStartX, cursorStartY, len, 0);\n          this._logSlowResolvingAsync(result);\n          return result;\n        }\n      }\n    }\n\n    if (this._activeBuffer.x !== cursorStartX || this._activeBuffer.y !== cursorStartY) {\n      this._onCursorMove.fire();\n    }\n\n    // Refresh any dirty rows accumulated as part of parsing, fire only for rows within the\n    // _viewport_ which is relative to ydisp, not relative to ybase.\n    const viewportEnd = this._dirtyRowTracker.end + (this._bufferService.buffer.ybase - this._bufferService.buffer.ydisp);\n    const viewportStart = this._dirtyRowTracker.start + (this._bufferService.buffer.ybase - this._bufferService.buffer.ydisp);\n    if (viewportStart < this._bufferService.rows) {\n      this._onRequestRefreshRows.fire({\n        start: Math.min(viewportStart, this._bufferService.rows - 1),\n        end: Math.min(viewportEnd, this._bufferService.rows - 1)\n      });\n    }\n  }\n\n  public print(data: Uint32Array, start: number, end: number): void {\n    let code: number;\n    let chWidth: number;\n    const charset = this._charsetService.charset;\n    const screenReaderMode = this._optionsService.rawOptions.screenReaderMode;\n    const cols = this._bufferService.cols;\n    const wraparoundMode = this._coreService.decPrivateModes.wraparound;\n    const insertMode = this._coreService.modes.insertMode;\n    const curAttr = this._curAttrData;\n    let bufferRow = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!;\n\n    this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n\n    // handle wide chars: reset start_cell-1 if we would overwrite the second cell of a wide char\n    if (this._activeBuffer.x && end - start > 0 && bufferRow.getWidth(this._activeBuffer.x - 1) === 2) {\n      bufferRow.setCellFromCodepoint(this._activeBuffer.x - 1, 0, 1, curAttr);\n    }\n\n    let precedingJoinState = this._parser.precedingJoinState;\n    for (let pos = start; pos < end; ++pos) {\n      code = data[pos];\n\n      // get charset replacement character\n      // charset is only defined for ASCII, therefore we only\n      // search for an replacement char if code < 127\n      if (code < 127 && charset) {\n        const ch = charset[String.fromCharCode(code)];\n        if (ch) {\n          code = ch.charCodeAt(0);\n        }\n      }\n\n      const currentInfo = this._unicodeService.charProperties(code, precedingJoinState);\n      chWidth = UnicodeService.extractWidth(currentInfo);\n      const shouldJoin = UnicodeService.extractShouldJoin(currentInfo);\n      const oldWidth = shouldJoin ? UnicodeService.extractWidth(precedingJoinState) : 0;\n      precedingJoinState = currentInfo;\n\n      if (screenReaderMode) {\n        this._onA11yChar.fire(stringFromCodePoint(code));\n      }\n      if (this._getCurrentLinkId()) {\n        this._oscLinkService.addLineToLink(this._getCurrentLinkId(), this._activeBuffer.ybase + this._activeBuffer.y);\n      }\n\n      // goto next line if ch would overflow\n      // NOTE: To avoid costly width checks here,\n      // the terminal does not allow a cols < 2.\n      if (this._activeBuffer.x + chWidth - oldWidth > cols) {\n        // autowrap - DECAWM\n        // automatically wraps to the beginning of the next line\n        if (wraparoundMode) {\n          const oldRow = bufferRow;\n          let oldCol = this._activeBuffer.x - oldWidth;\n          this._activeBuffer.x = oldWidth;\n          this._activeBuffer.y++;\n          if (this._activeBuffer.y === this._activeBuffer.scrollBottom + 1) {\n            this._activeBuffer.y--;\n            this._bufferService.scroll(this._eraseAttrData(), true);\n          } else {\n            if (this._activeBuffer.y >= this._bufferService.rows) {\n              this._activeBuffer.y = this._bufferService.rows - 1;\n            }\n            // The line already exists (eg. the initial viewport), mark it as a\n            // wrapped line\n            this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!.isWrapped = true;\n          }\n          // row changed, get it again\n          bufferRow = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!;\n          if (oldWidth > 0 && bufferRow instanceof BufferLine) {\n            // Combining character widens 1 column to 2.\n            // Move old character to next line.\n            bufferRow.copyCellsFrom(oldRow as BufferLine,\n              oldCol, 0, oldWidth, false);\n          }\n          // clear left over cells to the right\n          while (oldCol < cols) {\n            oldRow.setCellFromCodepoint(oldCol++, 0, 1, curAttr);\n          }\n        } else {\n          this._activeBuffer.x = cols - 1;\n          if (chWidth === 2) {\n            // FIXME: check for xterm behavior\n            // What to do here? We got a wide char that does not fit into last cell\n            continue;\n          }\n        }\n      }\n\n      // insert combining char at last cursor position\n      // this._activeBuffer.x should never be 0 for a combining char\n      // since they always follow a cell consuming char\n      // therefore we can test for this._activeBuffer.x to avoid overflow left\n      if (shouldJoin && this._activeBuffer.x) {\n        const offset = bufferRow.getWidth(this._activeBuffer.x - 1) ? 1 : 2;\n        // if empty cell after fullwidth, need to go 2 cells back\n        // it is save to step 2 cells back here\n        // since an empty cell is only set by fullwidth chars\n        bufferRow.addCodepointToCell(this._activeBuffer.x - offset,\n          code, chWidth);\n        for (let delta = chWidth - oldWidth; --delta >= 0;) {\n          bufferRow.setCellFromCodepoint(this._activeBuffer.x++, 0, 0, curAttr);\n        }\n        continue;\n      }\n\n      // insert mode: move characters to right\n      if (insertMode) {\n        // right shift cells according to the width\n        bufferRow.insertCells(this._activeBuffer.x, chWidth - oldWidth, this._activeBuffer.getNullCell(curAttr));\n        // test last cell - since the last cell has only room for\n        // a halfwidth char any fullwidth shifted there is lost\n        // and will be set to empty cell\n        if (bufferRow.getWidth(cols - 1) === 2) {\n          bufferRow.setCellFromCodepoint(cols - 1, NULL_CELL_CODE, NULL_CELL_WIDTH, curAttr);\n        }\n      }\n\n      // write current char to buffer and advance cursor\n      bufferRow.setCellFromCodepoint(this._activeBuffer.x++, code, chWidth, curAttr);\n\n      // fullwidth char - also set next cell to placeholder stub and advance cursor\n      // for graphemes bigger than fullwidth we can simply loop to zero\n      // we already made sure above, that this._activeBuffer.x + chWidth will not overflow right\n      if (chWidth > 0) {\n        while (--chWidth) {\n          // other than a regular empty cell a cell following a wide char has no width\n          bufferRow.setCellFromCodepoint(this._activeBuffer.x++, 0, 0, curAttr);\n        }\n      }\n    }\n\n    this._parser.precedingJoinState = precedingJoinState;\n\n    // handle wide chars: reset cell to the right if it is second cell of a wide char\n    if (this._activeBuffer.x < cols && end - start > 0 && bufferRow.getWidth(this._activeBuffer.x) === 0 && !bufferRow.hasContent(this._activeBuffer.x)) {\n      bufferRow.setCellFromCodepoint(this._activeBuffer.x, 0, 1, curAttr);\n    }\n\n    this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n  }\n\n  /**\n   * Forward registerCsiHandler from parser.\n   */\n  public registerCsiHandler(id: IFunctionIdentifier, callback: (params: IParams) => boolean | Promise<boolean>): IDisposable {\n    if (id.final === 't' && !id.prefix && !id.intermediates) {\n      // security: always check whether window option is allowed\n      return this._parser.registerCsiHandler(id, params => {\n        if (!paramToWindowOption(params.params[0], this._optionsService.rawOptions.windowOptions)) {\n          return true;\n        }\n        return callback(params);\n      });\n    }\n    return this._parser.registerCsiHandler(id, callback);\n  }\n\n  /**\n   * Forward registerDcsHandler from parser.\n   */\n  public registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: IParams) => boolean | Promise<boolean>): IDisposable {\n    return this._parser.registerDcsHandler(id, new DcsHandler(callback));\n  }\n\n  /**\n   * Forward registerEscHandler from parser.\n   */\n  public registerEscHandler(id: IFunctionIdentifier, callback: () => boolean | Promise<boolean>): IDisposable {\n    return this._parser.registerEscHandler(id, callback);\n  }\n\n  /**\n   * Forward registerOscHandler from parser.\n   */\n  public registerOscHandler(ident: number, callback: (data: string) => boolean | Promise<boolean>): IDisposable {\n    return this._parser.registerOscHandler(ident, new OscHandler(callback));\n  }\n\n  /**\n   * BEL\n   * Bell (Ctrl-G).\n   *\n   * @vt: #Y   C0    BEL   \"Bell\"  \"\\a, \\x07\"  \"Ring the bell.\"\n   * The behavior of the bell is further customizable with `ITerminalOptions.bellStyle`\n   * and `ITerminalOptions.bellSound`.\n   */\n  public bell(): boolean {\n    this._onRequestBell.fire();\n    return true;\n  }\n\n  /**\n   * LF\n   * Line Feed or New Line (NL).  (LF  is Ctrl-J).\n   *\n   * @vt: #Y   C0    LF   \"Line Feed\"            \"\\n, \\x0A\"  \"Move the cursor one row down, scrolling if needed.\"\n   * Scrolling is restricted to scroll margins and will only happen on the bottom line.\n   *\n   * @vt: #Y   C0    VT   \"Vertical Tabulation\"  \"\\v, \\x0B\"  \"Treated as LF.\"\n   * @vt: #Y   C0    FF   \"Form Feed\"            \"\\f, \\x0C\"  \"Treated as LF.\"\n   */\n  public lineFeed(): boolean {\n    this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n    if (this._optionsService.rawOptions.convertEol) {\n      this._activeBuffer.x = 0;\n    }\n    this._activeBuffer.y++;\n    if (this._activeBuffer.y === this._activeBuffer.scrollBottom + 1) {\n      this._activeBuffer.y--;\n      this._bufferService.scroll(this._eraseAttrData());\n    } else if (this._activeBuffer.y >= this._bufferService.rows) {\n      this._activeBuffer.y = this._bufferService.rows - 1;\n    } else {\n      // There was an explicit line feed (not just a carriage return), so clear the wrapped state of\n      // the line. This is particularly important on conpty/Windows where revisiting lines to\n      // reprint is common, especially on resize. Note that the windowsMode wrapped line heuristics\n      // can mess with this so windowsMode should be disabled, which is recommended on Windows build\n      // 21376 and above.\n      this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!.isWrapped = false;\n    }\n    // If the end of the line is hit, prevent this action from wrapping around to the next line.\n    if (this._activeBuffer.x >= this._bufferService.cols) {\n      this._activeBuffer.x--;\n    }\n    this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n\n    this._onLineFeed.fire();\n    return true;\n  }\n\n  /**\n   * CR\n   * Carriage Return (Ctrl-M).\n   *\n   * @vt: #Y   C0    CR   \"Carriage Return\"  \"\\r, \\x0D\"  \"Move the cursor to the beginning of the row.\"\n   */\n  public carriageReturn(): boolean {\n    this._activeBuffer.x = 0;\n    return true;\n  }\n\n  /**\n   * BS\n   * Backspace (Ctrl-H).\n   *\n   * @vt: #Y   C0    BS   \"Backspace\"  \"\\b, \\x08\"  \"Move the cursor one position to the left.\"\n   * By default it is not possible to move the cursor past the leftmost position.\n   * If `reverse wrap-around` (`CSI ? 45 h`) is set, a previous soft line wrap (DECAWM)\n   * can be undone with BS within the scroll margins. In that case the cursor will wrap back\n   * to the end of the previous row. Note that it is not possible to peek back into the scrollbuffer\n   * with the cursor, thus at the home position (top-leftmost cell) this has no effect.\n   */\n  public backspace(): boolean {\n    // reverse wrap-around is disabled\n    if (!this._coreService.decPrivateModes.reverseWraparound) {\n      this._restrictCursor();\n      if (this._activeBuffer.x > 0) {\n        this._activeBuffer.x--;\n      }\n      return true;\n    }\n\n    // reverse wrap-around is enabled\n    // other than for normal operation mode, reverse wrap-around allows the cursor\n    // to be at x=cols to be able to address the last cell of a row by BS\n    this._restrictCursor(this._bufferService.cols);\n\n    if (this._activeBuffer.x > 0) {\n      this._activeBuffer.x--;\n    } else {\n      /**\n       * reverse wrap-around handling:\n       * Our implementation deviates from xterm on purpose. Details:\n       * - only previous soft NLs can be reversed (isWrapped=true)\n       * - only works within scrollborders (top/bottom, left/right not yet supported)\n       * - cannot peek into scrollbuffer\n       * - any cursor movement sequence keeps working as expected\n       */\n      if (this._activeBuffer.x === 0\n        && this._activeBuffer.y > this._activeBuffer.scrollTop\n        && this._activeBuffer.y <= this._activeBuffer.scrollBottom\n        && this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)?.isWrapped) {\n        this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!.isWrapped = false;\n        this._activeBuffer.y--;\n        this._activeBuffer.x = this._bufferService.cols - 1;\n        // find last taken cell - last cell can have 3 different states:\n        // - hasContent(true) + hasWidth(1): narrow char - we are done\n        // - hasWidth(0): second part of wide char - we are done\n        // - hasContent(false) + hasWidth(1): empty cell due to early wrapping wide char, go one\n        //   cell further back\n        const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!;\n        if (line.hasWidth(this._activeBuffer.x) && !line.hasContent(this._activeBuffer.x)) {\n          this._activeBuffer.x--;\n          // We do this only once, since width=1 + hasContent=false currently happens only once\n          // before early wrapping of a wide char.\n          // This needs to be fixed once we support graphemes taking more than 2 cells.\n        }\n      }\n    }\n    this._restrictCursor();\n    return true;\n  }\n\n  /**\n   * TAB\n   * Horizontal Tab (HT) (Ctrl-I).\n   *\n   * @vt: #Y   C0    HT   \"Horizontal Tabulation\"  \"\\t, \\x09\"  \"Move the cursor to the next character tab stop.\"\n   */\n  public tab(): boolean {\n    if (this._activeBuffer.x >= this._bufferService.cols) {\n      return true;\n    }\n    const originalX = this._activeBuffer.x;\n    this._activeBuffer.x = this._activeBuffer.nextStop();\n    if (this._optionsService.rawOptions.screenReaderMode) {\n      this._onA11yTab.fire(this._activeBuffer.x - originalX);\n    }\n    return true;\n  }\n\n  /**\n   * SO\n   * Shift Out (Ctrl-N) -> Switch to Alternate Character Set.  This invokes the\n   * G1 character set.\n   *\n   * @vt: #P[Only limited ISO-2022 charset support.]  C0    SO   \"Shift Out\"  \"\\x0E\"  \"Switch to an alternative character set.\"\n   */\n  public shiftOut(): boolean {\n    this._charsetService.setgLevel(1);\n    return true;\n  }\n\n  /**\n   * SI\n   * Shift In (Ctrl-O) -> Switch to Standard Character Set.  This invokes the G0\n   * character set (the default).\n   *\n   * @vt: #Y   C0    SI   \"Shift In\"   \"\\x0F\"  \"Return to regular character set after Shift Out.\"\n   */\n  public shiftIn(): boolean {\n    this._charsetService.setgLevel(0);\n    return true;\n  }\n\n  /**\n   * Restrict cursor to viewport size / scroll margin (origin mode).\n   */\n  private _restrictCursor(maxCol: number = this._bufferService.cols - 1): void {\n    this._activeBuffer.x = Math.min(maxCol, Math.max(0, this._activeBuffer.x));\n    this._activeBuffer.y = this._coreService.decPrivateModes.origin\n      ? Math.min(this._activeBuffer.scrollBottom, Math.max(this._activeBuffer.scrollTop, this._activeBuffer.y))\n      : Math.min(this._bufferService.rows - 1, Math.max(0, this._activeBuffer.y));\n    this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n  }\n\n  /**\n   * Set absolute cursor position.\n   */\n  private _setCursor(x: number, y: number): void {\n    this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n    if (this._coreService.decPrivateModes.origin) {\n      this._activeBuffer.x = x;\n      this._activeBuffer.y = this._activeBuffer.scrollTop + y;\n    } else {\n      this._activeBuffer.x = x;\n      this._activeBuffer.y = y;\n    }\n    this._restrictCursor();\n    this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n  }\n\n  /**\n   * Set relative cursor position.\n   */\n  private _moveCursor(x: number, y: number): void {\n    // for relative changes we have to make sure we are within 0 .. cols/rows - 1\n    // before calculating the new position\n    this._restrictCursor();\n    this._setCursor(this._activeBuffer.x + x, this._activeBuffer.y + y);\n  }\n\n  /**\n   * CSI Ps A\n   * Cursor Up Ps Times (default = 1) (CUU).\n   *\n   * @vt: #Y CSI CUU   \"Cursor Up\"   \"CSI Ps A\"  \"Move cursor `Ps` times up (default=1).\"\n   * If the cursor would pass the top scroll margin, it will stop there.\n   */\n  public cursorUp(params: IParams): boolean {\n    // stop at scrollTop\n    const diffToTop = this._activeBuffer.y - this._activeBuffer.scrollTop;\n    if (diffToTop >= 0) {\n      this._moveCursor(0, -Math.min(diffToTop, params.params[0] || 1));\n    } else {\n      this._moveCursor(0, -(params.params[0] || 1));\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps B\n   * Cursor Down Ps Times (default = 1) (CUD).\n   *\n   * @vt: #Y CSI CUD   \"Cursor Down\"   \"CSI Ps B\"  \"Move cursor `Ps` times down (default=1).\"\n   * If the cursor would pass the bottom scroll margin, it will stop there.\n   */\n  public cursorDown(params: IParams): boolean {\n    // stop at scrollBottom\n    const diffToBottom = this._activeBuffer.scrollBottom - this._activeBuffer.y;\n    if (diffToBottom >= 0) {\n      this._moveCursor(0, Math.min(diffToBottom, params.params[0] || 1));\n    } else {\n      this._moveCursor(0, params.params[0] || 1);\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps C\n   * Cursor Forward Ps Times (default = 1) (CUF).\n   *\n   * @vt: #Y CSI CUF   \"Cursor Forward\"    \"CSI Ps C\"  \"Move cursor `Ps` times forward (default=1).\"\n   */\n  public cursorForward(params: IParams): boolean {\n    this._moveCursor(params.params[0] || 1, 0);\n    return true;\n  }\n\n  /**\n   * CSI Ps D\n   * Cursor Backward Ps Times (default = 1) (CUB).\n   *\n   * @vt: #Y CSI CUB   \"Cursor Backward\"   \"CSI Ps D\"  \"Move cursor `Ps` times backward (default=1).\"\n   */\n  public cursorBackward(params: IParams): boolean {\n    this._moveCursor(-(params.params[0] || 1), 0);\n    return true;\n  }\n\n  /**\n   * CSI Ps E\n   * Cursor Next Line Ps Times (default = 1) (CNL).\n   * Other than cursorDown (CUD) also set the cursor to first column.\n   *\n   * @vt: #Y CSI CNL   \"Cursor Next Line\"  \"CSI Ps E\"  \"Move cursor `Ps` times down (default=1) and to the first column.\"\n   * Same as CUD, additionally places the cursor at the first column.\n   */\n  public cursorNextLine(params: IParams): boolean {\n    this.cursorDown(params);\n    this._activeBuffer.x = 0;\n    return true;\n  }\n\n  /**\n   * CSI Ps F\n   * Cursor Previous Line Ps Times (default = 1) (CPL).\n   * Other than cursorUp (CUU) also set the cursor to first column.\n   *\n   * @vt: #Y CSI CPL   \"Cursor Backward\"   \"CSI Ps F\"  \"Move cursor `Ps` times up (default=1) and to the first column.\"\n   * Same as CUU, additionally places the cursor at the first column.\n   */\n  public cursorPrecedingLine(params: IParams): boolean {\n    this.cursorUp(params);\n    this._activeBuffer.x = 0;\n    return true;\n  }\n\n  /**\n   * CSI Ps G\n   * Cursor Character Absolute  [column] (default = [row,1]) (CHA).\n   *\n   * @vt: #Y CSI CHA   \"Cursor Horizontal Absolute\" \"CSI Ps G\" \"Move cursor to `Ps`-th column of the active row (default=1).\"\n   */\n  public cursorCharAbsolute(params: IParams): boolean {\n    this._setCursor((params.params[0] || 1) - 1, this._activeBuffer.y);\n    return true;\n  }\n\n  /**\n   * CSI Ps ; Ps H\n   * Cursor Position [row;column] (default = [1,1]) (CUP).\n   *\n   * @vt: #Y CSI CUP   \"Cursor Position\"   \"CSI Ps ; Ps H\"  \"Set cursor to position [`Ps`, `Ps`] (default = [1, 1]).\"\n   * If ORIGIN mode is set, places the cursor to the absolute position within the scroll margins.\n   * If ORIGIN mode is not set, places the cursor to the absolute position within the viewport.\n   * Note that the coordinates are 1-based, thus the top left position starts at `1 ; 1`.\n   */\n  public cursorPosition(params: IParams): boolean {\n    this._setCursor(\n      // col\n      (params.length >= 2) ? (params.params[1] || 1) - 1 : 0,\n      // row\n      (params.params[0] || 1) - 1\n    );\n    return true;\n  }\n\n  /**\n   * CSI Pm `  Character Position Absolute\n   *   [column] (default = [row,1]) (HPA).\n   * Currently same functionality as CHA.\n   *\n   * @vt: #Y CSI HPA   \"Horizontal Position Absolute\"  \"CSI Ps ` \" \"Same as CHA.\"\n   */\n  public charPosAbsolute(params: IParams): boolean {\n    this._setCursor((params.params[0] || 1) - 1, this._activeBuffer.y);\n    return true;\n  }\n\n  /**\n   * CSI Pm a  Character Position Relative\n   *   [columns] (default = [row,col+1]) (HPR)\n   *\n   * @vt: #Y CSI HPR   \"Horizontal Position Relative\"  \"CSI Ps a\"  \"Same as CUF.\"\n   */\n  public hPositionRelative(params: IParams): boolean {\n    this._moveCursor(params.params[0] || 1, 0);\n    return true;\n  }\n\n  /**\n   * CSI Pm d  Vertical Position Absolute (VPA)\n   *   [row] (default = [1,column])\n   *\n   * @vt: #Y CSI VPA   \"Vertical Position Absolute\"    \"CSI Ps d\"  \"Move cursor to `Ps`-th row (default=1).\"\n   */\n  public linePosAbsolute(params: IParams): boolean {\n    this._setCursor(this._activeBuffer.x, (params.params[0] || 1) - 1);\n    return true;\n  }\n\n  /**\n   * CSI Pm e  Vertical Position Relative (VPR)\n   *   [rows] (default = [row+1,column])\n   * reuse CSI Ps B ?\n   *\n   * @vt: #Y CSI VPR   \"Vertical Position Relative\"    \"CSI Ps e\"  \"Move cursor `Ps` times down (default=1).\"\n   */\n  public vPositionRelative(params: IParams): boolean {\n    this._moveCursor(0, params.params[0] || 1);\n    return true;\n  }\n\n  /**\n   * CSI Ps ; Ps f\n   *   Horizontal and Vertical Position [row;column] (default =\n   *   [1,1]) (HVP).\n   *   Same as CUP.\n   *\n   * @vt: #Y CSI HVP   \"Horizontal and Vertical Position\" \"CSI Ps ; Ps f\"  \"Same as CUP.\"\n   */\n  public hVPosition(params: IParams): boolean {\n    this.cursorPosition(params);\n    return true;\n  }\n\n  /**\n   * CSI Ps g  Tab Clear (TBC).\n   *     Ps = 0  -> Clear Current Column (default).\n   *     Ps = 3  -> Clear All.\n   * Potentially:\n   *   Ps = 2  -> Clear Stops on Line.\n   *   http://vt100.net/annarbor/aaa-ug/section6.html\n   *\n   * @vt: #Y CSI TBC   \"Tab Clear\" \"CSI Ps g\"  \"Clear tab stops at current position (0) or all (3) (default=0).\"\n   * Clearing tabstops off the active row (Ps = 2, VT100) is currently not supported.\n   */\n  public tabClear(params: IParams): boolean {\n    const param = params.params[0];\n    if (param === 0) {\n      delete this._activeBuffer.tabs[this._activeBuffer.x];\n    } else if (param === 3) {\n      this._activeBuffer.tabs = {};\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps I\n   *   Cursor Forward Tabulation Ps tab stops (default = 1) (CHT).\n   *\n   * @vt: #Y CSI CHT   \"Cursor Horizontal Tabulation\" \"CSI Ps I\" \"Move cursor `Ps` times tabs forward (default=1).\"\n   */\n  public cursorForwardTab(params: IParams): boolean {\n    if (this._activeBuffer.x >= this._bufferService.cols) {\n      return true;\n    }\n    let param = params.params[0] || 1;\n    while (param--) {\n      this._activeBuffer.x = this._activeBuffer.nextStop();\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps Z  Cursor Backward Tabulation Ps tab stops (default = 1) (CBT).\n   *\n   * @vt: #Y CSI CBT   \"Cursor Backward Tabulation\"  \"CSI Ps Z\"  \"Move cursor `Ps` tabs backward (default=1).\"\n   */\n  public cursorBackwardTab(params: IParams): boolean {\n    if (this._activeBuffer.x >= this._bufferService.cols) {\n      return true;\n    }\n    let param = params.params[0] || 1;\n\n    while (param--) {\n      this._activeBuffer.x = this._activeBuffer.prevStop();\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps \" q  Select Character Protection Attribute (DECSCA).\n   *\n   * @vt: #Y CSI DECSCA   \"Select Character Protection Attribute\"  \"CSI Ps \" q\"  \"Whether DECSED and DECSEL can erase (0=default, 2) or not (1).\"\n   */\n  public selectProtected(params: IParams): boolean {\n    const p = params.params[0];\n    if (p === 1) this._curAttrData.bg |= BgFlags.PROTECTED;\n    if (p === 2 || p === 0) this._curAttrData.bg &= ~BgFlags.PROTECTED;\n    return true;\n  }\n\n\n  /**\n   * Helper method to erase cells in a terminal row.\n   * The cell gets replaced with the eraseChar of the terminal.\n   * @param y The row index relative to the viewport.\n   * @param start The start x index of the range to be erased.\n   * @param end The end x index of the range to be erased (exclusive).\n   * @param clearWrap clear the isWrapped flag\n   * @param respectProtect Whether to respect the protection attribute (DECSCA).\n   */\n  private _eraseInBufferLine(y: number, start: number, end: number, clearWrap: boolean = false, respectProtect: boolean = false): void {\n    const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n    line.replaceCells(\n      start,\n      end,\n      this._activeBuffer.getNullCell(this._eraseAttrData()),\n      respectProtect\n    );\n    if (clearWrap) {\n      line.isWrapped = false;\n    }\n  }\n\n  /**\n   * Helper method to reset cells in a terminal row. The cell gets replaced with the eraseChar of\n   * the terminal and the isWrapped property is set to false.\n   * @param y row index\n   */\n  private _resetBufferLine(y: number, respectProtect: boolean = false): void {\n    const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y);\n    if (line) {\n      line.fill(this._activeBuffer.getNullCell(this._eraseAttrData()), respectProtect);\n      this._bufferService.buffer.clearMarkers(this._activeBuffer.ybase + y);\n      line.isWrapped = false;\n    }\n  }\n\n  /**\n   * CSI Ps J  Erase in Display (ED).\n   *     Ps = 0  -> Erase Below (default).\n   *     Ps = 1  -> Erase Above.\n   *     Ps = 2  -> Erase All.\n   *     Ps = 3  -> Erase Saved Lines (xterm).\n   * CSI ? Ps J\n   *   Erase in Display (DECSED).\n   *     Ps = 0  -> Selective Erase Below (default).\n   *     Ps = 1  -> Selective Erase Above.\n   *     Ps = 2  -> Selective Erase All.\n   *\n   * @vt: #Y CSI ED  \"Erase In Display\"  \"CSI Ps J\"  \"Erase various parts of the viewport.\"\n   * Supported param values:\n   *\n   * | Ps | Effect                                                       |\n   * | -- | ------------------------------------------------------------ |\n   * | 0  | Erase from the cursor through the end of the viewport.       |\n   * | 1  | Erase from the beginning of the viewport through the cursor. |\n   * | 2  | Erase complete viewport.                                     |\n   * | 3  | Erase scrollback.                                            |\n   *\n   * @vt: #Y CSI DECSED   \"Selective Erase In Display\"  \"CSI ? Ps J\"  \"Same as ED with respecting protection flag.\"\n   */\n  public eraseInDisplay(params: IParams, respectProtect: boolean = false): boolean {\n    this._restrictCursor(this._bufferService.cols);\n    let j;\n    switch (params.params[0]) {\n      case 0:\n        j = this._activeBuffer.y;\n        this._dirtyRowTracker.markDirty(j);\n        this._eraseInBufferLine(j++, this._activeBuffer.x, this._bufferService.cols, this._activeBuffer.x === 0, respectProtect);\n        for (; j < this._bufferService.rows; j++) {\n          this._resetBufferLine(j, respectProtect);\n        }\n        this._dirtyRowTracker.markDirty(j);\n        break;\n      case 1:\n        j = this._activeBuffer.y;\n        this._dirtyRowTracker.markDirty(j);\n        // Deleted front part of line and everything before. This line will no longer be wrapped.\n        this._eraseInBufferLine(j, 0, this._activeBuffer.x + 1, true, respectProtect);\n        if (this._activeBuffer.x + 1 >= this._bufferService.cols) {\n          // Deleted entire previous line. This next line can no longer be wrapped.\n          this._activeBuffer.lines.get(j + 1)!.isWrapped = false;\n        }\n        while (j--) {\n          this._resetBufferLine(j, respectProtect);\n        }\n        this._dirtyRowTracker.markDirty(0);\n        break;\n      case 2:\n        if (this._optionsService.rawOptions.scrollOnEraseInDisplay) {\n          j = this._bufferService.rows;\n          this._dirtyRowTracker.markRangeDirty(0, j - 1);\n          while (j--) {\n            const currentLine = this._activeBuffer.lines.get(this._activeBuffer.ybase + j);\n            if (currentLine?.getTrimmedLength()) {\n              break;\n            }\n          }\n          for (; j >= 0; j--) {\n            this._bufferService.scroll(this._eraseAttrData());\n          }\n        }\n        else {\n          j = this._bufferService.rows;\n          this._dirtyRowTracker.markDirty(j - 1);\n          while (j--) {\n            this._resetBufferLine(j, respectProtect);\n          }\n          this._dirtyRowTracker.markDirty(0);\n        }\n        break;\n      case 3:\n        // Clear scrollback (everything not in viewport)\n        const scrollBackSize = this._activeBuffer.lines.length - this._bufferService.rows;\n        if (scrollBackSize > 0) {\n          this._activeBuffer.lines.trimStart(scrollBackSize);\n          this._activeBuffer.ybase = Math.max(this._activeBuffer.ybase - scrollBackSize, 0);\n          this._activeBuffer.ydisp = Math.max(this._activeBuffer.ydisp - scrollBackSize, 0);\n          // Force a scroll event to refresh viewport\n          this._onScroll.fire(0);\n        }\n        break;\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps K  Erase in Line (EL).\n   *     Ps = 0  -> Erase to Right (default).\n   *     Ps = 1  -> Erase to Left.\n   *     Ps = 2  -> Erase All.\n   * CSI ? Ps K\n   *   Erase in Line (DECSEL).\n   *     Ps = 0  -> Selective Erase to Right (default).\n   *     Ps = 1  -> Selective Erase to Left.\n   *     Ps = 2  -> Selective Erase All.\n   *\n   * @vt: #Y CSI EL    \"Erase In Line\"  \"CSI Ps K\"  \"Erase various parts of the active row.\"\n   * Supported param values:\n   *\n   * | Ps | Effect                                                   |\n   * | -- | -------------------------------------------------------- |\n   * | 0  | Erase from the cursor through the end of the row.        |\n   * | 1  | Erase from the beginning of the line through the cursor. |\n   * | 2  | Erase complete line.                                     |\n   *\n   * @vt: #Y CSI DECSEL   \"Selective Erase In Line\"  \"CSI ? Ps K\"  \"Same as EL with respecting protecting flag.\"\n   */\n  public eraseInLine(params: IParams, respectProtect: boolean = false): boolean {\n    this._restrictCursor(this._bufferService.cols);\n    switch (params.params[0]) {\n      case 0:\n        this._eraseInBufferLine(this._activeBuffer.y, this._activeBuffer.x, this._bufferService.cols, this._activeBuffer.x === 0, respectProtect);\n        break;\n      case 1:\n        this._eraseInBufferLine(this._activeBuffer.y, 0, this._activeBuffer.x + 1, false, respectProtect);\n        break;\n      case 2:\n        this._eraseInBufferLine(this._activeBuffer.y, 0, this._bufferService.cols, true, respectProtect);\n        break;\n    }\n    this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n    return true;\n  }\n\n  /**\n   * CSI Ps L\n   * Insert Ps Line(s) (default = 1) (IL).\n   *\n   * @vt: #Y CSI IL  \"Insert Line\"   \"CSI Ps L\"  \"Insert `Ps` blank lines at active row (default=1).\"\n   * For every inserted line at the scroll top one line at the scroll bottom gets removed.\n   * The cursor is set to the first column.\n   * IL has no effect if the cursor is outside the scroll margins.\n   */\n  public insertLines(params: IParams): boolean {\n    this._restrictCursor();\n    let param = params.params[0] || 1;\n\n    if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n      return true;\n    }\n\n    const row: number = this._activeBuffer.ybase + this._activeBuffer.y;\n\n    const scrollBottomRowsOffset = this._bufferService.rows - 1 - this._activeBuffer.scrollBottom;\n    const scrollBottomAbsolute = this._bufferService.rows - 1 + this._activeBuffer.ybase - scrollBottomRowsOffset + 1;\n    while (param--) {\n      // test: echo -e '\\e[44m\\e[1L\\e[0m'\n      // blankLine(true) - xterm/linux behavior\n      this._activeBuffer.lines.splice(scrollBottomAbsolute - 1, 1);\n      this._activeBuffer.lines.splice(row, 0, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n    }\n\n    this._dirtyRowTracker.markRangeDirty(this._activeBuffer.y, this._activeBuffer.scrollBottom);\n    this._activeBuffer.x = 0; // see https://vt100.net/docs/vt220-rm/chapter4.html - vt220 only?\n    return true;\n  }\n\n  /**\n   * CSI Ps M\n   * Delete Ps Line(s) (default = 1) (DL).\n   *\n   * @vt: #Y CSI DL  \"Delete Line\"   \"CSI Ps M\"  \"Delete `Ps` lines at active row (default=1).\"\n   * For every deleted line at the scroll top one blank line at the scroll bottom gets appended.\n   * The cursor is set to the first column.\n   * DL has no effect if the cursor is outside the scroll margins.\n   */\n  public deleteLines(params: IParams): boolean {\n    this._restrictCursor();\n    let param = params.params[0] || 1;\n\n    if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n      return true;\n    }\n\n    const row: number = this._activeBuffer.ybase + this._activeBuffer.y;\n\n    let j: number;\n    j = this._bufferService.rows - 1 - this._activeBuffer.scrollBottom;\n    j = this._bufferService.rows - 1 + this._activeBuffer.ybase - j;\n    while (param--) {\n      // test: echo -e '\\e[44m\\e[1M\\e[0m'\n      // blankLine(true) - xterm/linux behavior\n      this._activeBuffer.lines.splice(row, 1);\n      this._activeBuffer.lines.splice(j, 0, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n    }\n\n    this._dirtyRowTracker.markRangeDirty(this._activeBuffer.y, this._activeBuffer.scrollBottom);\n    this._activeBuffer.x = 0; // see https://vt100.net/docs/vt220-rm/chapter4.html - vt220 only?\n    return true;\n  }\n\n  /**\n   * CSI Ps @\n   * Insert Ps (Blank) Character(s) (default = 1) (ICH).\n   *\n   * @vt: #Y CSI ICH  \"Insert Characters\"   \"CSI Ps @\"  \"Insert `Ps` (blank) characters (default = 1).\"\n   * The ICH sequence inserts `Ps` blank characters. The cursor remains at the beginning of the\n   * blank characters. Text between the cursor and right margin moves to the right. Characters moved\n   * past the right margin are lost.\n   *\n   *\n   * FIXME: check against xterm - should not work outside of scroll margins (see VT520 manual)\n   */\n  public insertChars(params: IParams): boolean {\n    this._restrictCursor();\n    const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n    if (line) {\n      line.insertCells(\n        this._activeBuffer.x,\n        params.params[0] || 1,\n        this._activeBuffer.getNullCell(this._eraseAttrData())\n      );\n      this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps P\n   * Delete Ps Character(s) (default = 1) (DCH).\n   *\n   * @vt: #Y CSI DCH   \"Delete Character\"  \"CSI Ps P\"  \"Delete `Ps` characters (default=1).\"\n   * As characters are deleted, the remaining characters between the cursor and right margin move to\n   * the left. Character attributes move with the characters. The terminal adds blank characters at\n   * the right margin.\n   *\n   *\n   * FIXME: check against xterm - should not work outside of scroll margins (see VT520 manual)\n   */\n  public deleteChars(params: IParams): boolean {\n    this._restrictCursor();\n    const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n    if (line) {\n      line.deleteCells(\n        this._activeBuffer.x,\n        params.params[0] || 1,\n        this._activeBuffer.getNullCell(this._eraseAttrData())\n      );\n      this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps S  Scroll up Ps lines (default = 1) (SU).\n   *\n   * @vt: #Y CSI SU  \"Scroll Up\"   \"CSI Ps S\"  \"Scroll `Ps` lines up (default=1).\"\n   *\n   *\n   * FIXME: scrolled out lines at top = 1 should add to scrollback (xterm)\n   */\n  public scrollUp(params: IParams): boolean {\n    let param = params.params[0] || 1;\n\n    while (param--) {\n      this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollTop, 1);\n      this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollBottom, 0, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n    }\n    this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n    return true;\n  }\n\n  /**\n   * CSI Ps T  Scroll down Ps lines (default = 1) (SD).\n   *\n   * @vt: #Y CSI SD  \"Scroll Down\"   \"CSI Ps T\"  \"Scroll `Ps` lines down (default=1).\"\n   */\n  public scrollDown(params: IParams): boolean {\n    let param = params.params[0] || 1;\n\n    while (param--) {\n      this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollBottom, 1);\n      this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollTop, 0, this._activeBuffer.getBlankLine(DEFAULT_ATTR_DATA));\n    }\n    this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n    return true;\n  }\n\n  /**\n   * CSI Ps SP @  Scroll left Ps columns (default = 1) (SL) ECMA-48\n   *\n   * Notation: (Pn)\n   * Representation: CSI Pn 02/00 04/00\n   * Parameter default value: Pn = 1\n   * SL causes the data in the presentation component to be moved by n character positions\n   * if the line orientation is horizontal, or by n line positions if the line orientation\n   * is vertical, such that the data appear to move to the left; where n equals the value of Pn.\n   * The active presentation position is not affected by this control function.\n   *\n   * Supported:\n   *   - always left shift (no line orientation setting respected)\n   *\n   * @vt: #Y CSI SL  \"Scroll Left\" \"CSI Ps SP @\" \"Scroll viewport `Ps` times to the left.\"\n   * SL moves the content of all lines within the scroll margins `Ps` times to the left.\n   * SL has no effect outside of the scroll margins.\n   */\n  public scrollLeft(params: IParams): boolean {\n    if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n      return true;\n    }\n    const param = params.params[0] || 1;\n    for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n      const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n      line.deleteCells(0, param, this._activeBuffer.getNullCell(this._eraseAttrData()));\n      line.isWrapped = false;\n    }\n    this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n    return true;\n  }\n\n  /**\n   * CSI Ps SP A  Scroll right Ps columns (default = 1) (SR) ECMA-48\n   *\n   * Notation: (Pn)\n   * Representation: CSI Pn 02/00 04/01\n   * Parameter default value: Pn = 1\n   * SR causes the data in the presentation component to be moved by n character positions\n   * if the line orientation is horizontal, or by n line positions if the line orientation\n   * is vertical, such that the data appear to move to the right; where n equals the value of Pn.\n   * The active presentation position is not affected by this control function.\n   *\n   * Supported:\n   *   - always right shift (no line orientation setting respected)\n   *\n   * @vt: #Y CSI SR  \"Scroll Right\"  \"CSI Ps SP A\"   \"Scroll viewport `Ps` times to the right.\"\n   * SL moves the content of all lines within the scroll margins `Ps` times to the right.\n   * Content at the right margin is lost.\n   * SL has no effect outside of the scroll margins.\n   */\n  public scrollRight(params: IParams): boolean {\n    if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n      return true;\n    }\n    const param = params.params[0] || 1;\n    for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n      const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n      line.insertCells(0, param, this._activeBuffer.getNullCell(this._eraseAttrData()));\n      line.isWrapped = false;\n    }\n    this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n    return true;\n  }\n\n  /**\n   * CSI Pm ' }\n   * Insert Ps Column(s) (default = 1) (DECIC), VT420 and up.\n   *\n   * @vt: #Y CSI DECIC \"Insert Columns\"  \"CSI Ps ' }\"  \"Insert `Ps` columns at cursor position.\"\n   * DECIC inserts `Ps` times blank columns at the cursor position for all lines with the scroll\n   * margins, moving content to the right. Content at the right margin is lost. DECIC has no effect\n   * outside the scrolling margins.\n   */\n  public insertColumns(params: IParams): boolean {\n    if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n      return true;\n    }\n    const param = params.params[0] || 1;\n    for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n      const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n      line.insertCells(this._activeBuffer.x, param, this._activeBuffer.getNullCell(this._eraseAttrData()));\n      line.isWrapped = false;\n    }\n    this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n    return true;\n  }\n\n  /**\n   * CSI Pm ' ~\n   * Delete Ps Column(s) (default = 1) (DECDC), VT420 and up.\n   *\n   * @vt: #Y CSI DECDC \"Delete Columns\"  \"CSI Ps ' ~\"  \"Delete `Ps` columns at cursor position.\"\n   * DECDC deletes `Ps` times columns at the cursor position for all lines with the scroll margins,\n   * moving content to the left. Blank columns are added at the right margin.\n   * DECDC has no effect outside the scrolling margins.\n   */\n  public deleteColumns(params: IParams): boolean {\n    if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n      return true;\n    }\n    const param = params.params[0] || 1;\n    for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n      const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n      line.deleteCells(this._activeBuffer.x, param, this._activeBuffer.getNullCell(this._eraseAttrData()));\n      line.isWrapped = false;\n    }\n    this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n    return true;\n  }\n\n  /**\n   * CSI Ps X\n   * Erase Ps Character(s) (default = 1) (ECH).\n   *\n   * @vt: #Y CSI ECH   \"Erase Character\"   \"CSI Ps X\"  \"Erase `Ps` characters from current cursor position to the right (default=1).\"\n   * ED erases `Ps` characters from current cursor position to the right.\n   * ED works inside or outside the scrolling margins.\n   */\n  public eraseChars(params: IParams): boolean {\n    this._restrictCursor();\n    const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n    if (line) {\n      line.replaceCells(\n        this._activeBuffer.x,\n        this._activeBuffer.x + (params.params[0] || 1),\n        this._activeBuffer.getNullCell(this._eraseAttrData())\n      );\n      this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps b  Repeat the preceding graphic character Ps times (REP).\n   * From ECMA 48 (@see http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf)\n   *    Notation: (Pn)\n   *    Representation: CSI Pn 06/02\n   *    Parameter default value: Pn = 1\n   *    REP is used to indicate that the preceding character in the data stream,\n   *    if it is a graphic character (represented by one or more bit combinations) including SPACE,\n   *    is to be repeated n times, where n equals the value of Pn.\n   *    If the character preceding REP is a control function or part of a control function,\n   *    the effect of REP is not defined by this Standard.\n   *\n   * We extend xterm's behavior to allow repeating entire grapheme clusters.\n   * This isn't 100% xterm-compatible, but it seems saner and more useful.\n   *    - text attrs are applied normally\n   *    - wrap around is respected\n   *    - any valid sequence resets the carried forward char\n   *\n   * Note: To get reset on a valid sequence working correctly without much runtime penalty, the\n   * preceding codepoint is stored on the parser in `this.print` and reset during `parser.parse`.\n   *\n   * @vt: #Y CSI REP   \"Repeat Preceding Character\"    \"CSI Ps b\"  \"Repeat preceding character `Ps` times (default=1).\"\n   * REP repeats the previous character `Ps` times advancing the cursor, also wrapping if DECAWM is\n   * set. REP has no effect if the sequence does not follow a printable ASCII character\n   * (NOOP for any other sequence in between or NON ASCII characters).\n   */\n  public repeatPrecedingCharacter(params: IParams): boolean {\n    const joinState = this._parser.precedingJoinState;\n    if (!joinState) {\n      return true;\n    }\n    // call print to insert the chars and handle correct wrapping\n    const length = params.params[0] || 1;\n    const chWidth = UnicodeService.extractWidth(joinState);\n    const x = this._activeBuffer.x - chWidth;\n    const bufferRow = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!;\n    const text = bufferRow.getString(x);\n    const data = new Uint32Array(text.length * length);\n    let idata = 0;\n    for (let itext = 0; itext < text.length;) {\n      const ch = text.codePointAt(itext) || 0;\n      data[idata++] = ch;\n      itext += ch > 0xffff ? 2 : 1;\n    }\n    let tlength = idata;\n    for (let i = 1; i < length; ++i) {\n      data.copyWithin(tlength, 0, idata);\n      tlength += idata;\n    }\n    this.print(data, 0, tlength);\n    return true;\n  }\n\n  /**\n   * CSI Ps c  Send Device Attributes (Primary DA).\n   *     Ps = 0  or omitted -> request attributes from terminal.  The\n   *     response depends on the decTerminalID resource setting.\n   *     -> CSI ? 1 ; 2 c  (``VT100 with Advanced Video Option'')\n   *     -> CSI ? 1 ; 0 c  (``VT101 with No Options'')\n   *     -> CSI ? 6 c  (``VT102'')\n   *     -> CSI ? 6 0 ; 1 ; 2 ; 6 ; 8 ; 9 ; 1 5 ; c  (``VT220'')\n   *   The VT100-style response parameters do not mean anything by\n   *   themselves.  VT220 parameters do, telling the host what fea-\n   *   tures the terminal supports:\n   *     Ps = 1  -> 132-columns.\n   *     Ps = 2  -> Printer.\n   *     Ps = 6  -> Selective erase.\n   *     Ps = 8  -> User-defined keys.\n   *     Ps = 9  -> National replacement character sets.\n   *     Ps = 1 5  -> Technical characters.\n   *     Ps = 2 2  -> ANSI color, e.g., VT525.\n   *     Ps = 2 9  -> ANSI text locator (i.e., DEC Locator mode).\n   *\n   * @vt: #Y CSI DA1   \"Primary Device Attributes\"     \"CSI c\"  \"Send primary device attributes.\"\n   *\n   *\n   * TODO: fix and cleanup response\n   */\n  public sendDeviceAttributesPrimary(params: IParams): boolean {\n    if (params.params[0] > 0) {\n      return true;\n    }\n    if (this._is('xterm') || this._is('rxvt-unicode') || this._is('screen')) {\n      this._coreService.triggerDataEvent(C0.ESC + '[?1;2c');\n    } else if (this._is('linux')) {\n      this._coreService.triggerDataEvent(C0.ESC + '[?6c');\n    }\n    return true;\n  }\n\n  /**\n   * CSI > Ps c\n   *   Send Device Attributes (Secondary DA).\n   *     Ps = 0  or omitted -> request the terminal's identification\n   *     code.  The response depends on the decTerminalID resource set-\n   *     ting.  It should apply only to VT220 and up, but xterm extends\n   *     this to VT100.\n   *     -> CSI  > Pp ; Pv ; Pc c\n   *   where Pp denotes the terminal type\n   *     Pp = 0  -> ``VT100''.\n   *     Pp = 1  -> ``VT220''.\n   *   and Pv is the firmware version (for xterm, this was originally\n   *   the XFree86 patch number, starting with 95).  In a DEC termi-\n   *   nal, Pc indicates the ROM cartridge registration number and is\n   *   always zero.\n   * More information:\n   *   xterm/charproc.c - line 2012, for more information.\n   *   vim responds with ^[[?0c or ^[[?1c after the terminal's response (?)\n   *\n   * @vt: #Y CSI DA2   \"Secondary Device Attributes\"   \"CSI > c\" \"Send primary device attributes.\"\n   *\n   *\n   * TODO: fix and cleanup response\n   */\n  public sendDeviceAttributesSecondary(params: IParams): boolean {\n    if (params.params[0] > 0) {\n      return true;\n    }\n    // xterm and urxvt\n    // seem to spit this\n    // out around ~370 times (?).\n    if (this._is('xterm')) {\n      this._coreService.triggerDataEvent(C0.ESC + '[>0;276;0c');\n    } else if (this._is('rxvt-unicode')) {\n      this._coreService.triggerDataEvent(C0.ESC + '[>85;95;0c');\n    } else if (this._is('linux')) {\n      // not supported by linux console.\n      // linux console echoes parameters.\n      this._coreService.triggerDataEvent(params.params[0] + 'c');\n    } else if (this._is('screen')) {\n      this._coreService.triggerDataEvent(C0.ESC + '[>83;40003;0c');\n    }\n    return true;\n  }\n\n  /**\n   * Evaluate if the current terminal is the given argument.\n   * @param term The terminal name to evaluate\n   */\n  private _is(term: string): boolean {\n    return (this._optionsService.rawOptions.termName + '').indexOf(term) === 0;\n  }\n\n  /**\n   * CSI Pm h  Set Mode (SM).\n   *     Ps = 2  -> Keyboard Action Mode (AM).\n   *     Ps = 4  -> Insert Mode (IRM).\n   *     Ps = 1 2  -> Send/receive (SRM).\n   *     Ps = 2 0  -> Automatic Newline (LNM).\n   *\n   * @vt: #P[Only IRM is supported.]    CSI SM    \"Set Mode\"  \"CSI Pm h\"  \"Set various terminal modes.\"\n   * Supported param values by SM:\n   *\n   * | Param | Action                                 | Support |\n   * | ----- | -------------------------------------- | ------- |\n   * | 2     | Keyboard Action Mode (KAM). Always on. | #N      |\n   * | 4     | Insert Mode (IRM).                     | #Y      |\n   * | 12    | Send/receive (SRM). Always off.        | #N      |\n   * | 20    | Automatic Newline (LNM).               | #Y      |\n   */\n  public setMode(params: IParams): boolean {\n    for (let i = 0; i < params.length; i++) {\n      switch (params.params[i]) {\n        case 4:\n          this._coreService.modes.insertMode = true;\n          break;\n        case 20:\n          this._optionsService.options.convertEol = true;\n          break;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * CSI ? Pm h\n   *   DEC Private Mode Set (DECSET).\n   *     Ps = 1  -> Application Cursor Keys (DECCKM).\n   *     Ps = 2  -> Designate USASCII for character sets G0-G3\n   *     (DECANM), and set VT100 mode.\n   *     Ps = 3  -> 132 Column Mode (DECCOLM).\n   *     Ps = 4  -> Smooth (Slow) Scroll (DECSCLM).\n   *     Ps = 5  -> Reverse Video (DECSCNM).\n   *     Ps = 6  -> Origin Mode (DECOM).\n   *     Ps = 7  -> Wraparound Mode (DECAWM).\n   *     Ps = 8  -> Auto-repeat Keys (DECARM).\n   *     Ps = 9  -> Send Mouse X & Y on button press.  See the sec-\n   *     tion Mouse Tracking.\n   *     Ps = 1 0  -> Show toolbar (rxvt).\n   *     Ps = 1 2  -> Start Blinking Cursor (att610).\n   *     Ps = 1 8  -> Print form feed (DECPFF).\n   *     Ps = 1 9  -> Set print extent to full screen (DECPEX).\n   *     Ps = 2 5  -> Show Cursor (DECTCEM).\n   *     Ps = 3 0  -> Show scrollbar (rxvt).\n   *     Ps = 3 5  -> Enable font-shifting functions (rxvt).\n   *     Ps = 3 8  -> Enter Tektronix Mode (DECTEK).\n   *     Ps = 4 0  -> Allow 80 -> 132 Mode.\n   *     Ps = 4 1  -> more(1) fix (see curses resource).\n   *     Ps = 4 2  -> Enable Nation Replacement Character sets (DECN-\n   *     RCM).\n   *     Ps = 4 4  -> Turn On Margin Bell.\n   *     Ps = 4 5  -> Reverse-wraparound Mode.\n   *     Ps = 4 6  -> Start Logging.  This is normally disabled by a\n   *     compile-time option.\n   *     Ps = 4 7  -> Use Alternate Screen Buffer.  (This may be dis-\n   *     abled by the titeInhibit resource).\n   *     Ps = 6 6  -> Application keypad (DECNKM).\n   *     Ps = 6 7  -> Backarrow key sends backspace (DECBKM).\n   *     Ps = 1 0 0 0  -> Send Mouse X & Y on button press and\n   *     release.  See the section Mouse Tracking.\n   *     Ps = 1 0 0 1  -> Use Hilite Mouse Tracking.\n   *     Ps = 1 0 0 2  -> Use Cell Motion Mouse Tracking.\n   *     Ps = 1 0 0 3  -> Use All Motion Mouse Tracking.\n   *     Ps = 1 0 0 4  -> Send FocusIn/FocusOut events.\n   *     Ps = 1 0 0 5  -> Enable Extended Mouse Mode.\n   *     Ps = 1 0 1 0  -> Scroll to bottom on tty output (rxvt).\n   *     Ps = 1 0 1 1  -> Scroll to bottom on key press (rxvt).\n   *     Ps = 1 0 3 4  -> Interpret \"meta\" key, sets eighth bit.\n   *     (enables the eightBitInput resource).\n   *     Ps = 1 0 3 5  -> Enable special modifiers for Alt and Num-\n   *     Lock keys.  (This enables the numLock resource).\n   *     Ps = 1 0 3 6  -> Send ESC   when Meta modifies a key.  (This\n   *     enables the metaSendsEscape resource).\n   *     Ps = 1 0 3 7  -> Send DEL from the editing-keypad Delete\n   *     key.\n   *     Ps = 1 0 3 9  -> Send ESC  when Alt modifies a key.  (This\n   *     enables the altSendsEscape resource).\n   *     Ps = 1 0 4 0  -> Keep selection even if not highlighted.\n   *     (This enables the keepSelection resource).\n   *     Ps = 1 0 4 1  -> Use the CLIPBOARD selection.  (This enables\n   *     the selectToClipboard resource).\n   *     Ps = 1 0 4 2  -> Enable Urgency window manager hint when\n   *     Control-G is received.  (This enables the bellIsUrgent\n   *     resource).\n   *     Ps = 1 0 4 3  -> Enable raising of the window when Control-G\n   *     is received.  (enables the popOnBell resource).\n   *     Ps = 1 0 4 7  -> Use Alternate Screen Buffer.  (This may be\n   *     disabled by the titeInhibit resource).\n   *     Ps = 1 0 4 8  -> Save cursor as in DECSC.  (This may be dis-\n   *     abled by the titeInhibit resource).\n   *     Ps = 1 0 4 9  -> Save cursor as in DECSC and use Alternate\n   *     Screen Buffer, clearing it first.  (This may be disabled by\n   *     the titeInhibit resource).  This combines the effects of the 1\n   *     0 4 7  and 1 0 4 8  modes.  Use this with terminfo-based\n   *     applications rather than the 4 7  mode.\n   *     Ps = 1 0 5 0  -> Set terminfo/termcap function-key mode.\n   *     Ps = 1 0 5 1  -> Set Sun function-key mode.\n   *     Ps = 1 0 5 2  -> Set HP function-key mode.\n   *     Ps = 1 0 5 3  -> Set SCO function-key mode.\n   *     Ps = 1 0 6 0  -> Set legacy keyboard emulation (X11R6).\n   *     Ps = 1 0 6 1  -> Set VT220 keyboard emulation.\n   *     Ps = 2 0 0 4  -> Set bracketed paste mode.\n   * Modes:\n   *   http: *vt100.net/docs/vt220-rm/chapter4.html\n   *\n   * @vt: #P[See below for supported modes.]    CSI DECSET  \"DEC Private Set Mode\" \"CSI ? Pm h\"  \"Set various terminal attributes.\"\n   * Supported param values by DECSET:\n   *\n   * | param | Action                                                  | Support |\n   * | ----- | ------------------------------------------------------- | --------|\n   * | 1     | Application Cursor Keys (DECCKM).                       | #Y      |\n   * | 2     | Designate US-ASCII for character sets G0-G3 (DECANM).   | #Y      |\n   * | 3     | 132 Column Mode (DECCOLM).                              | #Y      |\n   * | 6     | Origin Mode (DECOM).                                    | #Y      |\n   * | 7     | Auto-wrap Mode (DECAWM).                                | #Y      |\n   * | 8     | Auto-repeat Keys (DECARM). Always on.                   | #N      |\n   * | 9     | X10 xterm mouse protocol.                               | #Y      |\n   * | 12    | Start Blinking Cursor.                                  | #Y      |\n   * | 25    | Show Cursor (DECTCEM).                                  | #Y      |\n   * | 45    | Reverse wrap-around.                                    | #Y      |\n   * | 47    | Use Alternate Screen Buffer.                            | #Y      |\n   * | 66    | Application keypad (DECNKM).                            | #Y      |\n   * | 1000  | X11 xterm mouse protocol.                               | #Y      |\n   * | 1002  | Use Cell Motion Mouse Tracking.                         | #Y      |\n   * | 1003  | Use All Motion Mouse Tracking.                          | #Y      |\n   * | 1004  | Send FocusIn/FocusOut events                            | #Y      |\n   * | 1005  | Enable UTF-8 Mouse Mode.                                | #N      |\n   * | 1006  | Enable SGR Mouse Mode.                                  | #Y      |\n   * | 1015  | Enable urxvt Mouse Mode.                                | #N      |\n   * | 1016  | Enable SGR-Pixels Mouse Mode.                           | #Y      |\n   * | 1047  | Use Alternate Screen Buffer.                            | #Y      |\n   * | 1048  | Save cursor as in DECSC.                                | #Y      |\n   * | 1049  | Save cursor and switch to alternate buffer clearing it. | #P[Does not clear the alternate buffer.] |\n   * | 2004  | Set bracketed paste mode.                               | #Y      |\n   *\n   *\n   * FIXME: implement DECSCNM, 1049 should clear altbuffer\n   */\n  public setModePrivate(params: IParams): boolean {\n    for (let i = 0; i < params.length; i++) {\n      switch (params.params[i]) {\n        case 1:\n          this._coreService.decPrivateModes.applicationCursorKeys = true;\n          break;\n        case 2:\n          this._charsetService.setgCharset(0, DEFAULT_CHARSET);\n          this._charsetService.setgCharset(1, DEFAULT_CHARSET);\n          this._charsetService.setgCharset(2, DEFAULT_CHARSET);\n          this._charsetService.setgCharset(3, DEFAULT_CHARSET);\n          // set VT100 mode here\n          break;\n        case 3:\n          /**\n           * DECCOLM - 132 column mode.\n           * This is only active if 'SetWinLines' (24) is enabled\n           * through `options.windowsOptions`.\n           */\n          if (this._optionsService.rawOptions.windowOptions.setWinLines) {\n            this._bufferService.resize(132, this._bufferService.rows);\n            this._onRequestReset.fire();\n          }\n          break;\n        case 6:\n          this._coreService.decPrivateModes.origin = true;\n          this._setCursor(0, 0);\n          break;\n        case 7:\n          this._coreService.decPrivateModes.wraparound = true;\n          break;\n        case 12:\n          this._optionsService.options.cursorBlink = true;\n          break;\n        case 45:\n          this._coreService.decPrivateModes.reverseWraparound = true;\n          break;\n        case 66:\n          this._logService.debug('Serial port requested application keypad.');\n          this._coreService.decPrivateModes.applicationKeypad = true;\n          this._onRequestSyncScrollBar.fire();\n          break;\n        case 9: // X10 Mouse\n          // no release, no motion, no wheel, no modifiers.\n          this._coreMouseService.activeProtocol = 'X10';\n          break;\n        case 1000: // vt200 mouse\n          // no motion.\n          this._coreMouseService.activeProtocol = 'VT200';\n          break;\n        case 1002: // button event mouse\n          this._coreMouseService.activeProtocol = 'DRAG';\n          break;\n        case 1003: // any event mouse\n          // any event - sends motion events,\n          // even if there is no button held down.\n          this._coreMouseService.activeProtocol = 'ANY';\n          break;\n        case 1004: // send focusin/focusout events\n          // focusin: ^[[I\n          // focusout: ^[[O\n          this._coreService.decPrivateModes.sendFocus = true;\n          this._onRequestSendFocus.fire();\n          break;\n        case 1005: // utf8 ext mode mouse - removed in #2507\n          this._logService.debug('DECSET 1005 not supported (see #2507)');\n          break;\n        case 1006: // sgr ext mode mouse\n          this._coreMouseService.activeEncoding = 'SGR';\n          break;\n        case 1015: // urxvt ext mode mouse - removed in #2507\n          this._logService.debug('DECSET 1015 not supported (see #2507)');\n          break;\n        case 1016: // sgr pixels mode mouse\n          this._coreMouseService.activeEncoding = 'SGR_PIXELS';\n          break;\n        case 25: // show cursor\n          this._coreService.isCursorHidden = false;\n          break;\n        case 1048: // alt screen cursor\n          this.saveCursor();\n          break;\n        case 1049: // alt screen buffer cursor\n          this.saveCursor();\n        // FALL-THROUGH\n        case 47: // alt screen buffer\n        case 1047: // alt screen buffer\n          this._bufferService.buffers.activateAltBuffer(this._eraseAttrData());\n          this._coreService.isCursorInitialized = true;\n          this._onRequestRefreshRows.fire(undefined);\n          this._onRequestSyncScrollBar.fire();\n          break;\n        case 2004: // bracketed paste mode (https://cirw.in/blog/bracketed-paste)\n          this._coreService.decPrivateModes.bracketedPasteMode = true;\n          break;\n        case 2026: // synchronized output (https://github.com/contour-terminal/vt-extensions/blob/master/synchronized-output.md)\n          this._coreService.decPrivateModes.synchronizedOutput = true;\n          break;\n      }\n    }\n    return true;\n  }\n\n\n  /**\n   * CSI Pm l  Reset Mode (RM).\n   *     Ps = 2  -> Keyboard Action Mode (AM).\n   *     Ps = 4  -> Replace Mode (IRM).\n   *     Ps = 1 2  -> Send/receive (SRM).\n   *     Ps = 2 0  -> Normal Linefeed (LNM).\n   *\n   * @vt: #P[Only IRM is supported.]    CSI RM    \"Reset Mode\"  \"CSI Pm l\"  \"Set various terminal attributes.\"\n   * Supported param values by RM:\n   *\n   * | Param | Action                                 | Support |\n   * | ----- | -------------------------------------- | ------- |\n   * | 2     | Keyboard Action Mode (KAM). Always on. | #N      |\n   * | 4     | Replace Mode (IRM). (default)          | #Y      |\n   * | 12    | Send/receive (SRM). Always off.        | #N      |\n   * | 20    | Normal Linefeed (LNM).                 | #Y      |\n   *\n   *\n   * FIXME: why is LNM commented out?\n   */\n  public resetMode(params: IParams): boolean {\n    for (let i = 0; i < params.length; i++) {\n      switch (params.params[i]) {\n        case 4:\n          this._coreService.modes.insertMode = false;\n          break;\n        case 20:\n          this._optionsService.options.convertEol = false;\n          break;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * CSI ? Pm l\n   *   DEC Private Mode Reset (DECRST).\n   *     Ps = 1  -> Normal Cursor Keys (DECCKM).\n   *     Ps = 2  -> Designate VT52 mode (DECANM).\n   *     Ps = 3  -> 80 Column Mode (DECCOLM).\n   *     Ps = 4  -> Jump (Fast) Scroll (DECSCLM).\n   *     Ps = 5  -> Normal Video (DECSCNM).\n   *     Ps = 6  -> Normal Cursor Mode (DECOM).\n   *     Ps = 7  -> No Wraparound Mode (DECAWM).\n   *     Ps = 8  -> No Auto-repeat Keys (DECARM).\n   *     Ps = 9  -> Don't send Mouse X & Y on button press.\n   *     Ps = 1 0  -> Hide toolbar (rxvt).\n   *     Ps = 1 2  -> Stop Blinking Cursor (att610).\n   *     Ps = 1 8  -> Don't print form feed (DECPFF).\n   *     Ps = 1 9  -> Limit print to scrolling region (DECPEX).\n   *     Ps = 2 5  -> Hide Cursor (DECTCEM).\n   *     Ps = 3 0  -> Don't show scrollbar (rxvt).\n   *     Ps = 3 5  -> Disable font-shifting functions (rxvt).\n   *     Ps = 4 0  -> Disallow 80 -> 132 Mode.\n   *     Ps = 4 1  -> No more(1) fix (see curses resource).\n   *     Ps = 4 2  -> Disable Nation Replacement Character sets (DEC-\n   *     NRCM).\n   *     Ps = 4 4  -> Turn Off Margin Bell.\n   *     Ps = 4 5  -> No Reverse-wraparound Mode.\n   *     Ps = 4 6  -> Stop Logging.  (This is normally disabled by a\n   *     compile-time option).\n   *     Ps = 4 7  -> Use Normal Screen Buffer.\n   *     Ps = 6 6  -> Numeric keypad (DECNKM).\n   *     Ps = 6 7  -> Backarrow key sends delete (DECBKM).\n   *     Ps = 1 0 0 0  -> Don't send Mouse X & Y on button press and\n   *     release.  See the section Mouse Tracking.\n   *     Ps = 1 0 0 1  -> Don't use Hilite Mouse Tracking.\n   *     Ps = 1 0 0 2  -> Don't use Cell Motion Mouse Tracking.\n   *     Ps = 1 0 0 3  -> Don't use All Motion Mouse Tracking.\n   *     Ps = 1 0 0 4  -> Don't send FocusIn/FocusOut events.\n   *     Ps = 1 0 0 5  -> Disable Extended Mouse Mode.\n   *     Ps = 1 0 1 0  -> Don't scroll to bottom on tty output\n   *     (rxvt).\n   *     Ps = 1 0 1 1  -> Don't scroll to bottom on key press (rxvt).\n   *     Ps = 1 0 3 4  -> Don't interpret \"meta\" key.  (This disables\n   *     the eightBitInput resource).\n   *     Ps = 1 0 3 5  -> Disable special modifiers for Alt and Num-\n   *     Lock keys.  (This disables the numLock resource).\n   *     Ps = 1 0 3 6  -> Don't send ESC  when Meta modifies a key.\n   *     (This disables the metaSendsEscape resource).\n   *     Ps = 1 0 3 7  -> Send VT220 Remove from the editing-keypad\n   *     Delete key.\n   *     Ps = 1 0 3 9  -> Don't send ESC  when Alt modifies a key.\n   *     (This disables the altSendsEscape resource).\n   *     Ps = 1 0 4 0  -> Do not keep selection when not highlighted.\n   *     (This disables the keepSelection resource).\n   *     Ps = 1 0 4 1  -> Use the PRIMARY selection.  (This disables\n   *     the selectToClipboard resource).\n   *     Ps = 1 0 4 2  -> Disable Urgency window manager hint when\n   *     Control-G is received.  (This disables the bellIsUrgent\n   *     resource).\n   *     Ps = 1 0 4 3  -> Disable raising of the window when Control-\n   *     G is received.  (This disables the popOnBell resource).\n   *     Ps = 1 0 4 7  -> Use Normal Screen Buffer, clearing screen\n   *     first if in the Alternate Screen.  (This may be disabled by\n   *     the titeInhibit resource).\n   *     Ps = 1 0 4 8  -> Restore cursor as in DECRC.  (This may be\n   *     disabled by the titeInhibit resource).\n   *     Ps = 1 0 4 9  -> Use Normal Screen Buffer and restore cursor\n   *     as in DECRC.  (This may be disabled by the titeInhibit\n   *     resource).  This combines the effects of the 1 0 4 7  and 1 0\n   *     4 8  modes.  Use this with terminfo-based applications rather\n   *     than the 4 7  mode.\n   *     Ps = 1 0 5 0  -> Reset terminfo/termcap function-key mode.\n   *     Ps = 1 0 5 1  -> Reset Sun function-key mode.\n   *     Ps = 1 0 5 2  -> Reset HP function-key mode.\n   *     Ps = 1 0 5 3  -> Reset SCO function-key mode.\n   *     Ps = 1 0 6 0  -> Reset legacy keyboard emulation (X11R6).\n   *     Ps = 1 0 6 1  -> Reset keyboard emulation to Sun/PC style.\n   *     Ps = 2 0 0 4  -> Reset bracketed paste mode.\n   *\n   * @vt: #P[See below for supported modes.]    CSI DECRST  \"DEC Private Reset Mode\" \"CSI ? Pm l\"  \"Reset various terminal attributes.\"\n   * Supported param values by DECRST:\n   *\n   * | param | Action                                                  | Support |\n   * | ----- | ------------------------------------------------------- | ------- |\n   * | 1     | Normal Cursor Keys (DECCKM).                            | #Y      |\n   * | 2     | Designate VT52 mode (DECANM).                           | #N      |\n   * | 3     | 80 Column Mode (DECCOLM).                               | #B[Switches to old column width instead of 80.] |\n   * | 6     | Normal Cursor Mode (DECOM).                             | #Y      |\n   * | 7     | No Wraparound Mode (DECAWM).                            | #Y      |\n   * | 8     | No Auto-repeat Keys (DECARM).                           | #N      |\n   * | 9     | Don't send Mouse X & Y on button press.                 | #Y      |\n   * | 12    | Stop Blinking Cursor.                                   | #Y      |\n   * | 25    | Hide Cursor (DECTCEM).                                  | #Y      |\n   * | 45    | No reverse wrap-around.                                 | #Y      |\n   * | 47    | Use Normal Screen Buffer.                               | #Y      |\n   * | 66    | Numeric keypad (DECNKM).                                | #Y      |\n   * | 1000  | Don't send Mouse reports.                               | #Y      |\n   * | 1002  | Don't use Cell Motion Mouse Tracking.                   | #Y      |\n   * | 1003  | Don't use All Motion Mouse Tracking.                    | #Y      |\n   * | 1004  | Don't send FocusIn/FocusOut events.                     | #Y      |\n   * | 1005  | Disable UTF-8 Mouse Mode.                               | #N      |\n   * | 1006  | Disable SGR Mouse Mode.                                 | #Y      |\n   * | 1015  | Disable urxvt Mouse Mode.                               | #N      |\n   * | 1016  | Disable SGR-Pixels Mouse Mode.                          | #Y      |\n   * | 1047  | Use Normal Screen Buffer (clearing screen if in alt).   | #Y      |\n   * | 1048  | Restore cursor as in DECRC.                             | #Y      |\n   * | 1049  | Use Normal Screen Buffer and restore cursor.            | #Y      |\n   * | 2004  | Reset bracketed paste mode.                             | #Y      |\n   *\n   *\n   * FIXME: DECCOLM is currently broken (already fixed in window options PR)\n   */\n  public resetModePrivate(params: IParams): boolean {\n    for (let i = 0; i < params.length; i++) {\n      switch (params.params[i]) {\n        case 1:\n          this._coreService.decPrivateModes.applicationCursorKeys = false;\n          break;\n        case 3:\n          /**\n           * DECCOLM - 80 column mode.\n           * This is only active if 'SetWinLines' (24) is enabled\n           * through `options.windowsOptions`.\n           */\n          if (this._optionsService.rawOptions.windowOptions.setWinLines) {\n            this._bufferService.resize(80, this._bufferService.rows);\n            this._onRequestReset.fire();\n          }\n          break;\n        case 6:\n          this._coreService.decPrivateModes.origin = false;\n          this._setCursor(0, 0);\n          break;\n        case 7:\n          this._coreService.decPrivateModes.wraparound = false;\n          break;\n        case 12:\n          this._optionsService.options.cursorBlink = false;\n          break;\n        case 45:\n          this._coreService.decPrivateModes.reverseWraparound = false;\n          break;\n        case 66:\n          this._logService.debug('Switching back to normal keypad.');\n          this._coreService.decPrivateModes.applicationKeypad = false;\n          this._onRequestSyncScrollBar.fire();\n          break;\n        case 9: // X10 Mouse\n        case 1000: // vt200 mouse\n        case 1002: // button event mouse\n        case 1003: // any event mouse\n          this._coreMouseService.activeProtocol = 'NONE';\n          break;\n        case 1004: // send focusin/focusout events\n          this._coreService.decPrivateModes.sendFocus = false;\n          break;\n        case 1005: // utf8 ext mode mouse - removed in #2507\n          this._logService.debug('DECRST 1005 not supported (see #2507)');\n          break;\n        case 1006: // sgr ext mode mouse\n          this._coreMouseService.activeEncoding = 'DEFAULT';\n          break;\n        case 1015: // urxvt ext mode mouse - removed in #2507\n          this._logService.debug('DECRST 1015 not supported (see #2507)');\n          break;\n        case 1016: // sgr pixels mode mouse\n          this._coreMouseService.activeEncoding = 'DEFAULT';\n          break;\n        case 25: // hide cursor\n          this._coreService.isCursorHidden = true;\n          break;\n        case 1048: // alt screen cursor\n          this.restoreCursor();\n          break;\n        case 1049: // alt screen buffer cursor\n        // FALL-THROUGH\n        case 47: // normal screen buffer\n        case 1047: // normal screen buffer - clearing it first\n          // Ensure the selection manager has the correct buffer\n          this._bufferService.buffers.activateNormalBuffer();\n          if (params.params[i] === 1049) {\n            this.restoreCursor();\n          }\n          this._coreService.isCursorInitialized = true;\n          this._onRequestRefreshRows.fire(undefined);\n          this._onRequestSyncScrollBar.fire();\n          break;\n        case 2004: // bracketed paste mode (https://cirw.in/blog/bracketed-paste)\n          this._coreService.decPrivateModes.bracketedPasteMode = false;\n          break;\n        case 2026: // synchronized output (https://github.com/contour-terminal/vt-extensions/blob/master/synchronized-output.md)\n          this._coreService.decPrivateModes.synchronizedOutput = false;\n          this._onRequestRefreshRows.fire(undefined);\n          break;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps $ p Request ANSI Mode (DECRQM).\n   *\n   * Reports CSI Ps; Pm $ y (DECRPM), where Ps is the mode number as in SM/RM,\n   * and Pm is the mode value:\n   *    0 - not recognized\n   *    1 - set\n   *    2 - reset\n   *    3 - permanently set\n   *    4 - permanently reset\n   *\n   * @vt: #Y  CSI   DECRQM  \"Request Mode\"  \"CSI Ps $p\"  \"Request mode state.\"\n   * Returns a report as `CSI Ps; Pm $ y` (DECRPM), where `Ps` is the mode number as in SM/RM\n   * or DECSET/DECRST, and `Pm` is the mode value:\n   * - 0: not recognized\n   * - 1: set\n   * - 2: reset\n   * - 3: permanently set\n   * - 4: permanently reset\n   *\n   * For modes not understood xterm.js always returns `notRecognized`. In general this means,\n   * that a certain operation mode is not implemented and cannot be used.\n   *\n   * Modes changing the active terminal buffer (47, 1047, 1049) are not subqueried\n   * and only report, whether the alternate buffer is set.\n   *\n   * Mouse encodings and mouse protocols are handled mutual exclusive,\n   * thus only one of each of those can be set at a given time.\n   *\n   * There is a chance, that some mode reports are not fully in line with xterm.js' behavior,\n   * e.g. if the default implementation already exposes a certain behavior. If you find\n   * discrepancies in the mode reports, please file a bug.\n   */\n  public requestMode(params: IParams, ansi: boolean): boolean {\n    // return value as in DECRPM\n    const enum V {\n      NOT_RECOGNIZED = 0,\n      SET = 1,\n      RESET = 2,\n      PERMANENTLY_SET = 3,\n      PERMANENTLY_RESET = 4\n    }\n\n    // access helpers\n    const dm = this._coreService.decPrivateModes;\n    const { activeProtocol: mouseProtocol, activeEncoding: mouseEncoding } = this._coreMouseService;\n    const cs = this._coreService;\n    const { buffers, cols } = this._bufferService;\n    const { active, alt } = buffers;\n    const opts = this._optionsService.rawOptions;\n\n    const f = (m: number, v: V): boolean => {\n      cs.triggerDataEvent(`${C0.ESC}[${ansi ? '' : '?'}${m};${v}$y`);\n      return true;\n    };\n    const b2v = (value: boolean): V => value ? V.SET : V.RESET;\n\n    const p = params.params[0];\n\n    if (ansi) {\n      if (p === 2) return f(p, V.PERMANENTLY_RESET);\n      if (p === 4) return f(p, b2v(cs.modes.insertMode));\n      if (p === 12) return f(p, V.PERMANENTLY_SET);\n      if (p === 20) return f(p, b2v(opts.convertEol));\n      return f(p, V.NOT_RECOGNIZED);\n    }\n\n    if (p === 1) return f(p, b2v(dm.applicationCursorKeys));\n    if (p === 3) return f(p, opts.windowOptions.setWinLines ? (cols === 80 ? V.RESET : cols === 132 ? V.SET : V.NOT_RECOGNIZED) : V.NOT_RECOGNIZED);\n    if (p === 6) return f(p, b2v(dm.origin));\n    if (p === 7) return f(p, b2v(dm.wraparound));\n    if (p === 8) return f(p, V.PERMANENTLY_SET);\n    if (p === 9) return f(p, b2v(mouseProtocol === 'X10'));\n    if (p === 12) return f(p, b2v(opts.cursorBlink));\n    if (p === 25) return f(p, b2v(!cs.isCursorHidden));\n    if (p === 45) return f(p, b2v(dm.reverseWraparound));\n    if (p === 66) return f(p, b2v(dm.applicationKeypad));\n    if (p === 67) return f(p, V.PERMANENTLY_RESET);\n    if (p === 1000) return f(p, b2v(mouseProtocol === 'VT200'));\n    if (p === 1002) return f(p, b2v(mouseProtocol === 'DRAG'));\n    if (p === 1003) return f(p, b2v(mouseProtocol === 'ANY'));\n    if (p === 1004) return f(p, b2v(dm.sendFocus));\n    if (p === 1005) return f(p, V.PERMANENTLY_RESET);\n    if (p === 1006) return f(p, b2v(mouseEncoding === 'SGR'));\n    if (p === 1015) return f(p, V.PERMANENTLY_RESET);\n    if (p === 1016) return f(p, b2v(mouseEncoding === 'SGR_PIXELS'));\n    if (p === 1048) return f(p, V.SET); // xterm always returns SET here\n    if (p === 47 || p === 1047 || p === 1049) return f(p, b2v(active === alt));\n    if (p === 2004) return f(p, b2v(dm.bracketedPasteMode));\n    if (p === 2026) return f(p, b2v(dm.synchronizedOutput));\n    return f(p, V.NOT_RECOGNIZED);\n  }\n\n  /**\n   * Helper to write color information packed with color mode.\n   */\n  private _updateAttrColor(color: number, mode: number, c1: number, c2: number, c3: number): number {\n    if (mode === 2) {\n      color |= Attributes.CM_RGB;\n      color &= ~Attributes.RGB_MASK;\n      color |= AttributeData.fromColorRGB([c1, c2, c3]);\n    } else if (mode === 5) {\n      color &= ~(Attributes.CM_MASK | Attributes.PCOLOR_MASK);\n      color |= Attributes.CM_P256 | (c1 & 0xff);\n    }\n    return color;\n  }\n\n  /**\n   * Helper to extract and apply color params/subparams.\n   * Returns advance for params index.\n   */\n  private _extractColor(params: IParams, pos: number, attr: IAttributeData): number {\n    // normalize params\n    // meaning: [target, CM, ign, val, val, val]\n    // RGB    : [ 38/48,  2, ign,   r,   g,   b]\n    // P256   : [ 38/48,  5, ign,   v, ign, ign]\n    const accu = [0, 0, -1, 0, 0, 0];\n\n    // alignment placeholder for non color space sequences\n    let cSpace = 0;\n\n    // return advance we took in params\n    let advance = 0;\n\n    do {\n      accu[advance + cSpace] = params.params[pos + advance];\n      if (params.hasSubParams(pos + advance)) {\n        const subparams = params.getSubParams(pos + advance)!;\n        let i = 0;\n        do {\n          if (accu[1] === 5) {\n            cSpace = 1;\n          }\n          accu[advance + i + 1 + cSpace] = subparams[i];\n        } while (++i < subparams.length && i + advance + 1 + cSpace < accu.length);\n        break;\n      }\n      // exit early if can decide color mode with semicolons\n      if ((accu[1] === 5 && advance + cSpace >= 2)\n        || (accu[1] === 2 && advance + cSpace >= 5)) {\n        break;\n      }\n      // offset colorSpace slot for semicolon mode\n      if (accu[1]) {\n        cSpace = 1;\n      }\n    } while (++advance + pos < params.length && advance + cSpace < accu.length);\n\n    // set default values to 0\n    for (let i = 2; i < accu.length; ++i) {\n      if (accu[i] === -1) {\n        accu[i] = 0;\n      }\n    }\n\n    // apply colors\n    switch (accu[0]) {\n      case 38:\n        attr.fg = this._updateAttrColor(attr.fg, accu[1], accu[3], accu[4], accu[5]);\n        break;\n      case 48:\n        attr.bg = this._updateAttrColor(attr.bg, accu[1], accu[3], accu[4], accu[5]);\n        break;\n      case 58:\n        attr.extended = attr.extended.clone();\n        attr.extended.underlineColor = this._updateAttrColor(attr.extended.underlineColor, accu[1], accu[3], accu[4], accu[5]);\n    }\n\n    return advance;\n  }\n\n  /**\n   * SGR 4 subparams:\n   *    4:0   -   equal to SGR 24 (turn off all underline)\n   *    4:1   -   equal to SGR 4 (single underline)\n   *    4:2   -   equal to SGR 21 (double underline)\n   *    4:3   -   curly underline\n   *    4:4   -   dotted underline\n   *    4:5   -   dashed underline\n   */\n  private _processUnderline(style: number, attr: IAttributeData): void {\n    // treat extended attrs as immutable, thus always clone from old one\n    // this is needed since the buffer only holds references to it\n    attr.extended = attr.extended.clone();\n\n    // default to 1 == single underline\n    if (!~style || style > 5) {\n      style = 1;\n    }\n    attr.extended.underlineStyle = style;\n    attr.fg |= FgFlags.UNDERLINE;\n\n    // 0 deactivates underline\n    if (style === 0) {\n      attr.fg &= ~FgFlags.UNDERLINE;\n    }\n\n    // update HAS_EXTENDED in BG\n    attr.updateExtended();\n  }\n\n  private _processSGR0(attr: IAttributeData): void {\n    attr.fg = DEFAULT_ATTR_DATA.fg;\n    attr.bg = DEFAULT_ATTR_DATA.bg;\n    attr.extended = attr.extended.clone();\n    // Reset underline style and color. Note that we don't want to reset other\n    // fields such as the url id.\n    attr.extended.underlineStyle = UnderlineStyle.NONE;\n    attr.extended.underlineColor &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n    attr.updateExtended();\n  }\n\n  /**\n   * CSI Pm m  Character Attributes (SGR).\n   *\n   * @vt: #P[See below for supported attributes.]    CSI SGR   \"Select Graphic Rendition\"  \"CSI Pm m\"  \"Set/Reset various text attributes.\"\n   * SGR selects one or more character attributes at the same time. Multiple params (up to 32)\n   * are applied in order from left to right. The changed attributes are applied to all new\n   * characters received. If you move characters in the viewport by scrolling or any other means,\n   * then the attributes move with the characters.\n   *\n   * Supported param values by SGR:\n   *\n   * | Param     | Meaning                                                  | Support |\n   * | --------- | -------------------------------------------------------- | ------- |\n   * | 0         | Normal (default). Resets any other preceding SGR.        | #Y      |\n   * | 1         | Bold. (also see `options.drawBoldTextInBrightColors`)    | #Y      |\n   * | 2         | Faint, decreased intensity.                              | #Y      |\n   * | 3         | Italic.                                                  | #Y      |\n   * | 4         | Underlined (see below for style support).                | #Y      |\n   * | 5         | Slowly blinking.                                         | #N      |\n   * | 6         | Rapidly blinking.                                        | #N      |\n   * | 7         | Inverse. Flips foreground and background color.          | #Y      |\n   * | 8         | Invisible (hidden).                                      | #Y      |\n   * | 9         | Crossed-out characters (strikethrough).                  | #Y      |\n   * | 21        | Doubly underlined.                                       | #Y      |\n   * | 22        | Normal (neither bold nor faint).                         | #Y      |\n   * | 23        | No italic.                                               | #Y      |\n   * | 24        | Not underlined.                                          | #Y      |\n   * | 25        | Steady (not blinking).                                   | #Y      |\n   * | 27        | Positive (not inverse).                                  | #Y      |\n   * | 28        | Visible (not hidden).                                    | #Y      |\n   * | 29        | Not Crossed-out (strikethrough).                         | #Y      |\n   * | 30        | Foreground color: Black.                                 | #Y      |\n   * | 31        | Foreground color: Red.                                   | #Y      |\n   * | 32        | Foreground color: Green.                                 | #Y      |\n   * | 33        | Foreground color: Yellow.                                | #Y      |\n   * | 34        | Foreground color: Blue.                                  | #Y      |\n   * | 35        | Foreground color: Magenta.                               | #Y      |\n   * | 36        | Foreground color: Cyan.                                  | #Y      |\n   * | 37        | Foreground color: White.                                 | #Y      |\n   * | 38        | Foreground color: Extended color.                        | #P[Support for RGB and indexed colors, see below.] |\n   * | 39        | Foreground color: Default (original).                    | #Y      |\n   * | 40        | Background color: Black.                                 | #Y      |\n   * | 41        | Background color: Red.                                   | #Y      |\n   * | 42        | Background color: Green.                                 | #Y      |\n   * | 43        | Background color: Yellow.                                | #Y      |\n   * | 44        | Background color: Blue.                                  | #Y      |\n   * | 45        | Background color: Magenta.                               | #Y      |\n   * | 46        | Background color: Cyan.                                  | #Y      |\n   * | 47        | Background color: White.                                 | #Y      |\n   * | 48        | Background color: Extended color.                        | #P[Support for RGB and indexed colors, see below.] |\n   * | 49        | Background color: Default (original).                    | #Y      |\n   * | 53        | Overlined.                                               | #Y      |\n   * | 55        | Not Overlined.                                           | #Y      |\n   * | 58        | Underline color: Extended color.                         | #P[Support for RGB and indexed colors, see below.] |\n   * | 90 - 97   | Bright foreground color (analogous to 30 - 37).          | #Y      |\n   * | 100 - 107 | Bright background color (analogous to 40 - 47).          | #Y      |\n   *\n   * Underline supports subparams to denote the style in the form `4 : x`:\n   *\n   * | x      | Meaning                                                       | Support |\n   * | ------ | ------------------------------------------------------------- | ------- |\n   * | 0      | No underline. Same as `SGR 24 m`.                             | #Y      |\n   * | 1      | Single underline. Same as `SGR 4 m`.                          | #Y      |\n   * | 2      | Double underline.                                             | #Y      |\n   * | 3      | Curly underline.                                              | #Y      |\n   * | 4      | Dotted underline.                                             | #Y      |\n   * | 5      | Dashed underline.                                             | #Y      |\n   * | other  | Single underline. Same as `SGR 4 m`.                          | #Y      |\n   *\n   * Extended colors are supported for foreground (Ps=38), background (Ps=48) and underline (Ps=58)\n   * as follows:\n   *\n   * | Ps + 1 | Meaning                                                       | Support |\n   * | ------ | ------------------------------------------------------------- | ------- |\n   * | 0      | Implementation defined.                                       | #N      |\n   * | 1      | Transparent.                                                  | #N      |\n   * | 2      | RGB color as `Ps ; 2 ; R ; G ; B` or `Ps : 2 : : R : G : B`.  | #Y      |\n   * | 3      | CMY color.                                                    | #N      |\n   * | 4      | CMYK color.                                                   | #N      |\n   * | 5      | Indexed (256 colors) as `Ps ; 5 ; INDEX` or `Ps : 5 : INDEX`. | #Y      |\n   *\n   *\n   * FIXME: blinking is implemented in attrs, but not working in renderers?\n   * FIXME: remove dead branch for p=100\n   */\n  public charAttributes(params: IParams): boolean {\n    // Optimize a single SGR0.\n    if (params.length === 1 && params.params[0] === 0) {\n      this._processSGR0(this._curAttrData);\n      return true;\n    }\n\n    const l = params.length;\n    let p;\n    const attr = this._curAttrData;\n\n    for (let i = 0; i < l; i++) {\n      p = params.params[i];\n      if (p >= 30 && p <= 37) {\n        // fg color 8\n        attr.fg &= ~(Attributes.CM_MASK | Attributes.PCOLOR_MASK);\n        attr.fg |= Attributes.CM_P16 | (p - 30);\n      } else if (p >= 40 && p <= 47) {\n        // bg color 8\n        attr.bg &= ~(Attributes.CM_MASK | Attributes.PCOLOR_MASK);\n        attr.bg |= Attributes.CM_P16 | (p - 40);\n      } else if (p >= 90 && p <= 97) {\n        // fg color 16\n        attr.fg &= ~(Attributes.CM_MASK | Attributes.PCOLOR_MASK);\n        attr.fg |= Attributes.CM_P16 | (p - 90) | 8;\n      } else if (p >= 100 && p <= 107) {\n        // bg color 16\n        attr.bg &= ~(Attributes.CM_MASK | Attributes.PCOLOR_MASK);\n        attr.bg |= Attributes.CM_P16 | (p - 100) | 8;\n      } else if (p === 0) {\n        // default\n        this._processSGR0(attr);\n      } else if (p === 1) {\n        // bold text\n        attr.fg |= FgFlags.BOLD;\n      } else if (p === 3) {\n        // italic text\n        attr.bg |= BgFlags.ITALIC;\n      } else if (p === 4) {\n        // underlined text\n        attr.fg |= FgFlags.UNDERLINE;\n        this._processUnderline(params.hasSubParams(i) ? params.getSubParams(i)![0] : UnderlineStyle.SINGLE, attr);\n      } else if (p === 5) {\n        // blink\n        attr.fg |= FgFlags.BLINK;\n      } else if (p === 7) {\n        // inverse and positive\n        // test with: echo -e '\\e[31m\\e[42mhello\\e[7mworld\\e[27mhi\\e[m'\n        attr.fg |= FgFlags.INVERSE;\n      } else if (p === 8) {\n        // invisible\n        attr.fg |= FgFlags.INVISIBLE;\n      } else if (p === 9) {\n        // strikethrough\n        attr.fg |= FgFlags.STRIKETHROUGH;\n      } else if (p === 2) {\n        // dimmed text\n        attr.bg |= BgFlags.DIM;\n      } else if (p === 21) {\n        // double underline\n        this._processUnderline(UnderlineStyle.DOUBLE, attr);\n      } else if (p === 22) {\n        // not bold nor faint\n        attr.fg &= ~FgFlags.BOLD;\n        attr.bg &= ~BgFlags.DIM;\n      } else if (p === 23) {\n        // not italic\n        attr.bg &= ~BgFlags.ITALIC;\n      } else if (p === 24) {\n        // not underlined\n        attr.fg &= ~FgFlags.UNDERLINE;\n        this._processUnderline(UnderlineStyle.NONE, attr);\n      } else if (p === 25) {\n        // not blink\n        attr.fg &= ~FgFlags.BLINK;\n      } else if (p === 27) {\n        // not inverse\n        attr.fg &= ~FgFlags.INVERSE;\n      } else if (p === 28) {\n        // not invisible\n        attr.fg &= ~FgFlags.INVISIBLE;\n      } else if (p === 29) {\n        // not strikethrough\n        attr.fg &= ~FgFlags.STRIKETHROUGH;\n      } else if (p === 39) {\n        // reset fg\n        attr.fg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n        attr.fg |= DEFAULT_ATTR_DATA.fg & (Attributes.PCOLOR_MASK | Attributes.RGB_MASK);\n      } else if (p === 49) {\n        // reset bg\n        attr.bg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n        attr.bg |= DEFAULT_ATTR_DATA.bg & (Attributes.PCOLOR_MASK | Attributes.RGB_MASK);\n      } else if (p === 38 || p === 48 || p === 58) {\n        // fg color 256 and RGB\n        i += this._extractColor(params, i, attr);\n      } else if (p === 53) {\n        // overline\n        attr.bg |= BgFlags.OVERLINE;\n      } else if (p === 55) {\n        // not overline\n        attr.bg &= ~BgFlags.OVERLINE;\n      } else if (p === 59) {\n        attr.extended = attr.extended.clone();\n        attr.extended.underlineColor = -1;\n        attr.updateExtended();\n      } else if (p === 100) { // FIXME: dead branch, p=100 already handled above!\n        // reset fg/bg\n        attr.fg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n        attr.fg |= DEFAULT_ATTR_DATA.fg & (Attributes.PCOLOR_MASK | Attributes.RGB_MASK);\n        attr.bg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n        attr.bg |= DEFAULT_ATTR_DATA.bg & (Attributes.PCOLOR_MASK | Attributes.RGB_MASK);\n      } else {\n        this._logService.debug('Unknown SGR attribute: %d.', p);\n      }\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps n  Device Status Report (DSR).\n   *     Ps = 5  -> Status Report.  Result (``OK'') is\n   *   CSI 0 n\n   *     Ps = 6  -> Report Cursor Position (CPR) [row;column].\n   *   Result is\n   *   CSI r ; c R\n   * CSI ? Ps n\n   *   Device Status Report (DSR, DEC-specific).\n   *     Ps = 6  -> Report Cursor Position (CPR) [row;column] as CSI\n   *     ? r ; c R (assumes page is zero).\n   *     Ps = 1 5  -> Report Printer status as CSI ? 1 0  n  (ready).\n   *     or CSI ? 1 1  n  (not ready).\n   *     Ps = 2 5  -> Report UDK status as CSI ? 2 0  n  (unlocked)\n   *     or CSI ? 2 1  n  (locked).\n   *     Ps = 2 6  -> Report Keyboard status as\n   *   CSI ? 2 7  ;  1  ;  0  ;  0  n  (North American).\n   *   The last two parameters apply to VT400 & up, and denote key-\n   *   board ready and LK01 respectively.\n   *     Ps = 5 3  -> Report Locator status as\n   *   CSI ? 5 3  n  Locator available, if compiled-in, or\n   *   CSI ? 5 0  n  No Locator, if not.\n   *\n   * @vt: #Y CSI DSR   \"Device Status Report\"  \"CSI Ps n\"  \"Request cursor position (CPR) with `Ps` = 6.\"\n   */\n  public deviceStatus(params: IParams): boolean {\n    switch (params.params[0]) {\n      case 5:\n        // status report\n        this._coreService.triggerDataEvent(`${C0.ESC}[0n`);\n        break;\n      case 6:\n        // cursor position\n        const y = this._activeBuffer.y + 1;\n        const x = this._activeBuffer.x + 1;\n        this._coreService.triggerDataEvent(`${C0.ESC}[${y};${x}R`);\n        break;\n    }\n    return true;\n  }\n\n  // @vt: #P[Only CPR is supported.]  CSI DECDSR  \"DEC Device Status Report\"  \"CSI ? Ps n\"  \"Only CPR is supported (same as DSR).\"\n  public deviceStatusPrivate(params: IParams): boolean {\n    // modern xterm doesnt seem to\n    // respond to any of these except ?6, 6, and 5\n    switch (params.params[0]) {\n      case 6:\n        // cursor position\n        const y = this._activeBuffer.y + 1;\n        const x = this._activeBuffer.x + 1;\n        this._coreService.triggerDataEvent(`${C0.ESC}[?${y};${x}R`);\n        break;\n      case 15:\n        // no printer\n        // this.handler(C0.ESC + '[?11n');\n        break;\n      case 25:\n        // dont support user defined keys\n        // this.handler(C0.ESC + '[?21n');\n        break;\n      case 26:\n        // north american keyboard\n        // this.handler(C0.ESC + '[?27;1;0;0n');\n        break;\n      case 53:\n        // no dec locator/mouse\n        // this.handler(C0.ESC + '[?50n');\n        break;\n    }\n    return true;\n  }\n\n  /**\n   * CSI ! p   Soft terminal reset (DECSTR).\n   * http://vt100.net/docs/vt220-rm/table4-10.html\n   *\n   * @vt: #Y CSI DECSTR  \"Soft Terminal Reset\"   \"CSI ! p\"   \"Reset several terminal attributes to initial state.\"\n   * There are two terminal reset sequences - RIS and DECSTR. While RIS performs almost a full\n   * terminal bootstrap, DECSTR only resets certain attributes. For most needs DECSTR should be\n   * sufficient.\n   *\n   * The following terminal attributes are reset to default values:\n   * - IRM is reset (dafault = false)\n   * - scroll margins are reset (default = viewport size)\n   * - erase attributes are reset to default\n   * - charsets are reset\n   * - DECSC data is reset to initial values\n   * - DECOM is reset to absolute mode\n   *\n   *\n   * FIXME: there are several more attributes missing (see VT520 manual)\n   */\n  public softReset(params: IParams): boolean {\n    this._coreService.isCursorHidden = false;\n    this._onRequestSyncScrollBar.fire();\n    this._activeBuffer.scrollTop = 0;\n    this._activeBuffer.scrollBottom = this._bufferService.rows - 1;\n    this._curAttrData = DEFAULT_ATTR_DATA.clone();\n    this._coreService.reset();\n    this._charsetService.reset();\n\n    // reset DECSC data\n    this._activeBuffer.savedX = 0;\n    this._activeBuffer.savedY = this._activeBuffer.ybase;\n    this._activeBuffer.savedCurAttrData.fg = this._curAttrData.fg;\n    this._activeBuffer.savedCurAttrData.bg = this._curAttrData.bg;\n    this._activeBuffer.savedCharset = this._charsetService.charset;\n\n    // reset DECOM\n    this._coreService.decPrivateModes.origin = false;\n    return true;\n  }\n\n  /**\n   * CSI Ps SP q  Set cursor style (DECSCUSR, VT520).\n   *   Ps = 0  -> reset to option.\n   *   Ps = 1  -> blinking block (default).\n   *   Ps = 2  -> steady block.\n   *   Ps = 3  -> blinking underline.\n   *   Ps = 4  -> steady underline.\n   *   Ps = 5  -> blinking bar (xterm).\n   *   Ps = 6  -> steady bar (xterm).\n   *\n   * @vt: #Y CSI DECSCUSR  \"Set Cursor Style\"  \"CSI Ps SP q\"   \"Set cursor style.\"\n   * Supported cursor styles:\n   *  - 0: reset to option\n   *  - empty, 1: blinking block\n   *  - 2: steady block\n   *  - 3: blinking underline\n   *  - 4: steady underline\n   *  - 5: blinking bar\n   *  - 6: steady bar\n   */\n  public setCursorStyle(params: IParams): boolean {\n    const param = params.length === 0 ? 1 : params.params[0];\n    if (param === 0) {\n      this._coreService.decPrivateModes.cursorStyle = undefined;\n      this._coreService.decPrivateModes.cursorBlink = undefined;\n    } else {\n      switch (param) {\n        case 1:\n        case 2:\n          this._coreService.decPrivateModes.cursorStyle = 'block';\n          break;\n        case 3:\n        case 4:\n          this._coreService.decPrivateModes.cursorStyle = 'underline';\n          break;\n        case 5:\n        case 6:\n          this._coreService.decPrivateModes.cursorStyle = 'bar';\n          break;\n      }\n      const isBlinking = param % 2 === 1;\n      this._coreService.decPrivateModes.cursorBlink = isBlinking;\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps ; Ps r\n   *   Set Scrolling Region [top;bottom] (default = full size of win-\n   *   dow) (DECSTBM).\n   *\n   * @vt: #Y CSI DECSTBM \"Set Top and Bottom Margin\" \"CSI Ps ; Ps r\" \"Set top and bottom margins of the viewport [top;bottom] (default = viewport size).\"\n   */\n  public setScrollRegion(params: IParams): boolean {\n    const top = params.params[0] || 1;\n    let bottom: number;\n\n    if (params.length < 2 || (bottom = params.params[1]) > this._bufferService.rows || bottom === 0) {\n      bottom = this._bufferService.rows;\n    }\n\n    if (bottom > top) {\n      this._activeBuffer.scrollTop = top - 1;\n      this._activeBuffer.scrollBottom = bottom - 1;\n      this._setCursor(0, 0);\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps ; Ps ; Ps t - Various window manipulations and reports (xterm)\n   *\n   * Note: Only those listed below are supported. All others are left to integrators and\n   * need special treatment based on the embedding environment.\n   *\n   *    Ps = 1 4                                                          supported\n   *      Report xterm text area size in pixels.\n   *      Result is CSI 4 ; height ; width t\n   *    Ps = 14 ; 2                                                       not implemented\n   *    Ps = 16                                                           supported\n   *      Report xterm character cell size in pixels.\n   *      Result is CSI 6 ; height ; width t\n   *    Ps = 18                                                           supported\n   *      Report the size of the text area in characters.\n   *      Result is CSI 8 ; height ; width t\n   *    Ps = 20                                                           supported\n   *      Report xterm window's icon label.\n   *      Result is OSC L label ST\n   *    Ps = 21                                                           supported\n   *      Report xterm window's title.\n   *      Result is OSC l label ST\n   *    Ps = 22 ; 0  -> Save xterm icon and window title on stack.        supported\n   *    Ps = 22 ; 1  -> Save xterm icon title on stack.                   supported\n   *    Ps = 22 ; 2  -> Save xterm window title on stack.                 supported\n   *    Ps = 23 ; 0  -> Restore xterm icon and window title from stack.   supported\n   *    Ps = 23 ; 1  -> Restore xterm icon title from stack.              supported\n   *    Ps = 23 ; 2  -> Restore xterm window title from stack.            supported\n   *    Ps >= 24                                                          not implemented\n   */\n  public windowOptions(params: IParams): boolean {\n    if (!paramToWindowOption(params.params[0], this._optionsService.rawOptions.windowOptions)) {\n      return true;\n    }\n    const second = (params.length > 1) ? params.params[1] : 0;\n    switch (params.params[0]) {\n      case 14:  // GetWinSizePixels, returns CSI 4 ; height ; width t\n        if (second !== 2) {\n          this._onRequestWindowsOptionsReport.fire(WindowsOptionsReportType.GET_WIN_SIZE_PIXELS);\n        }\n        break;\n      case 16:  // GetCellSizePixels, returns CSI 6 ; height ; width t\n        this._onRequestWindowsOptionsReport.fire(WindowsOptionsReportType.GET_CELL_SIZE_PIXELS);\n        break;\n      case 18:  // GetWinSizeChars, returns CSI 8 ; height ; width t\n        if (this._bufferService) {\n          this._coreService.triggerDataEvent(`${C0.ESC}[8;${this._bufferService.rows};${this._bufferService.cols}t`);\n        }\n        break;\n      case 22:  // PushTitle\n        if (second === 0 || second === 2) {\n          this._windowTitleStack.push(this._windowTitle);\n          if (this._windowTitleStack.length > STACK_LIMIT) {\n            this._windowTitleStack.shift();\n          }\n        }\n        if (second === 0 || second === 1) {\n          this._iconNameStack.push(this._iconName);\n          if (this._iconNameStack.length > STACK_LIMIT) {\n            this._iconNameStack.shift();\n          }\n        }\n        break;\n      case 23:  // PopTitle\n        if (second === 0 || second === 2) {\n          if (this._windowTitleStack.length) {\n            this.setTitle(this._windowTitleStack.pop()!);\n          }\n        }\n        if (second === 0 || second === 1) {\n          if (this._iconNameStack.length) {\n            this.setIconName(this._iconNameStack.pop()!);\n          }\n        }\n        break;\n    }\n    return true;\n  }\n\n\n  /**\n   * CSI s\n   * ESC 7\n   *   Save cursor (ANSI.SYS).\n   *\n   * @vt: #P[TODO...]  CSI SCOSC   \"Save Cursor\"   \"CSI s\"   \"Save cursor position, charmap and text attributes.\"\n   * @vt: #Y ESC  SC   \"Save Cursor\"   \"ESC 7\"   \"Save cursor position, charmap and text attributes.\"\n   */\n  public saveCursor(params?: IParams): boolean {\n    this._activeBuffer.savedX = this._activeBuffer.x;\n    this._activeBuffer.savedY = this._activeBuffer.ybase + this._activeBuffer.y;\n    this._activeBuffer.savedCurAttrData.fg = this._curAttrData.fg;\n    this._activeBuffer.savedCurAttrData.bg = this._curAttrData.bg;\n    this._activeBuffer.savedCharset = this._charsetService.charset;\n    return true;\n  }\n\n\n  /**\n   * CSI u\n   * ESC 8\n   *   Restore cursor (ANSI.SYS).\n   *\n   * @vt: #P[TODO...]  CSI SCORC \"Restore Cursor\"  \"CSI u\"   \"Restore cursor position, charmap and text attributes.\"\n   * @vt: #Y ESC  RC \"Restore Cursor\"  \"ESC 8\"   \"Restore cursor position, charmap and text attributes.\"\n   */\n  public restoreCursor(params?: IParams): boolean {\n    this._activeBuffer.x = this._activeBuffer.savedX || 0;\n    this._activeBuffer.y = Math.max(this._activeBuffer.savedY - this._activeBuffer.ybase, 0);\n    this._curAttrData.fg = this._activeBuffer.savedCurAttrData.fg;\n    this._curAttrData.bg = this._activeBuffer.savedCurAttrData.bg;\n    this._charsetService.charset = (this as any)._savedCharset;\n    if (this._activeBuffer.savedCharset) {\n      this._charsetService.charset = this._activeBuffer.savedCharset;\n    }\n    this._restrictCursor();\n    return true;\n  }\n\n\n  /**\n   * OSC 2; <data> ST (set window title)\n   *   Proxy to set window title.\n   *\n   * @vt: #P[Icon name is not exposed.]   OSC    0   \"Set Windows Title and Icon Name\"  \"OSC 0 ; Pt BEL\"  \"Set window title and icon name.\"\n   * Icon name is not supported. For Window Title see below.\n   *\n   * @vt: #Y     OSC    2   \"Set Windows Title\"  \"OSC 2 ; Pt BEL\"  \"Set window title.\"\n   * xterm.js does not manipulate the title directly, instead exposes changes via the event\n   * `Terminal.onTitleChange`.\n   */\n  public setTitle(data: string): boolean {\n    this._windowTitle = data;\n    this._onTitleChange.fire(data);\n    return true;\n  }\n\n  /**\n   * OSC 1; <data> ST\n   * Note: Icon name is not exposed.\n   */\n  public setIconName(data: string): boolean {\n    this._iconName = data;\n    return true;\n  }\n\n  /**\n   * OSC 4; <num> ; <text> ST (set ANSI color <num> to <text>)\n   *\n   * @vt: #Y    OSC    4    \"Set ANSI color\"   \"OSC 4 ; c ; spec BEL\" \"Change color number `c` to the color specified by `spec`.\"\n   * `c` is the color index between 0 and 255. The color format of `spec` is derived from\n   * `XParseColor` (see OSC 10 for supported formats). There may be multipe `c ; spec` pairs present\n   * in the same instruction. If `spec` contains `?` the terminal returns a sequence with the\n   * currently set color.\n   */\n  public setOrReportIndexedColor(data: string): boolean {\n    const event: IColorEvent = [];\n    const slots = data.split(';');\n    while (slots.length > 1) {\n      const idx = slots.shift() as string;\n      const spec = slots.shift() as string;\n      if (/^\\d+$/.exec(idx)) {\n        const index = parseInt(idx);\n        if (isValidColorIndex(index)) {\n          if (spec === '?') {\n            event.push({ type: ColorRequestType.REPORT, index });\n          } else {\n            const color = parseColor(spec);\n            if (color) {\n              event.push({ type: ColorRequestType.SET, index, color });\n            }\n          }\n        }\n      }\n    }\n    if (event.length) {\n      this._onColor.fire(event);\n    }\n    return true;\n  }\n\n  /**\n   * OSC 8 ; <params> ; <uri> ST - create hyperlink\n   * OSC 8 ; ; ST - finish hyperlink\n   *\n   * Test case:\n   *\n   * ```sh\n   * printf '\\e]8;;http://example.com\\e\\\\This is a link\\e]8;;\\e\\\\\\n'\n   * ```\n   *\n   * @vt: #Y    OSC    8    \"Create hyperlink\"   \"OSC 8 ; params ; uri BEL\" \"Create a hyperlink to `uri` using `params`.\"\n   * `uri` is a hyperlink starting with `http://`, `https://`, `ftp://`, `file://` or `mailto://`. `params` is an\n   * optional list of key=value assignments, separated by the : character.\n   * Example: `id=xyz123:foo=bar:baz=quux`.\n   * Currently only the id key is defined. Cells that share the same ID and URI share hover\n   * feedback. Use `OSC 8 ; ; BEL` to finish the current hyperlink.\n   */\n  public setHyperlink(data: string): boolean {\n    // Arg parsing is special cases to support unencoded semi-colons in the URIs (#4944)\n    const idx = data.indexOf(';');\n    if (idx === -1) {\n      // malformed sequence, just return as handled\n      return true;\n    }\n    const id = data.slice(0, idx).trim();\n    const uri = data.slice(idx + 1);\n    if (uri) {\n      return this._createHyperlink(id, uri);\n    }\n    if (id.trim()) {\n      return false;\n    }\n    return this._finishHyperlink();\n  }\n\n  private _createHyperlink(params: string, uri: string): boolean {\n    // It's legal to open a new hyperlink without explicitly finishing the previous one\n    if (this._getCurrentLinkId()) {\n      this._finishHyperlink();\n    }\n    const parsedParams = params.split(':');\n    let id: string | undefined;\n    const idParamIndex = parsedParams.findIndex(e => e.startsWith('id='));\n    if (idParamIndex !== -1) {\n      id = parsedParams[idParamIndex].slice(3) || undefined;\n    }\n    this._curAttrData.extended = this._curAttrData.extended.clone();\n    this._curAttrData.extended.urlId = this._oscLinkService.registerLink({ id, uri });\n    this._curAttrData.updateExtended();\n    return true;\n  }\n\n  private _finishHyperlink(): boolean {\n    this._curAttrData.extended = this._curAttrData.extended.clone();\n    this._curAttrData.extended.urlId = 0;\n    this._curAttrData.updateExtended();\n    return true;\n  }\n\n  // special colors - OSC 10 | 11 | 12\n  private _specialColors = [SpecialColorIndex.FOREGROUND, SpecialColorIndex.BACKGROUND, SpecialColorIndex.CURSOR];\n\n  /**\n   * Apply colors requests for special colors in OSC 10 | 11 | 12.\n   * Since these commands are stacking from multiple parameters,\n   * we handle them in a loop with an entry offset to `_specialColors`.\n   */\n  private _setOrReportSpecialColor(data: string, offset: number): boolean {\n    const slots = data.split(';');\n    for (let i = 0; i < slots.length; ++i, ++offset) {\n      if (offset >= this._specialColors.length) break;\n      if (slots[i] === '?') {\n        this._onColor.fire([{ type: ColorRequestType.REPORT, index: this._specialColors[offset] }]);\n      } else {\n        const color = parseColor(slots[i]);\n        if (color) {\n          this._onColor.fire([{ type: ColorRequestType.SET, index: this._specialColors[offset], color }]);\n        }\n      }\n    }\n    return true;\n  }\n\n  /**\n   * OSC 10 ; <xcolor name>|<?> ST - set or query default foreground color\n   *\n   * @vt: #Y  OSC   10    \"Set or query default foreground color\"   \"OSC 10 ; Pt BEL\"  \"Set or query default foreground color.\"\n   * To set the color, the following color specification formats are supported:\n   * - `rgb:<red>/<green>/<blue>` for  `<red>, <green>, <blue>` in `h | hh | hhh | hhhh`, where\n   *   `h` is a single hexadecimal digit (case insignificant). The different widths scale\n   *   from 4 bit (`h`) to 16 bit (`hhhh`) and get converted to 8 bit (`hh`).\n   * - `#RGB` - 4 bits per channel, expanded to `#R0G0B0`\n   * - `#RRGGBB` - 8 bits per channel\n   * - `#RRRGGGBBB` - 12 bits per channel, truncated to `#RRGGBB`\n   * - `#RRRRGGGGBBBB` - 16 bits per channel, truncated to `#RRGGBB`\n   *\n   * **Note:** X11 named colors are currently unsupported.\n   *\n   * If `Pt` contains `?` instead of a color specification, the terminal\n   * returns a sequence with the current default foreground color\n   * (use that sequence to restore the color after changes).\n   *\n   * **Note:** Other than xterm, xterm.js does not support OSC 12 - 19.\n   * Therefore stacking multiple `Pt` separated by `;` only works for the first two entries.\n   */\n  public setOrReportFgColor(data: string): boolean {\n    return this._setOrReportSpecialColor(data, 0);\n  }\n\n  /**\n   * OSC 11 ; <xcolor name>|<?> ST - set or query default background color\n   *\n   * @vt: #Y  OSC   11    \"Set or query default background color\"   \"OSC 11 ; Pt BEL\"  \"Same as OSC 10, but for default background.\"\n   */\n  public setOrReportBgColor(data: string): boolean {\n    return this._setOrReportSpecialColor(data, 1);\n  }\n\n  /**\n   * OSC 12 ; <xcolor name>|<?> ST - set or query default cursor color\n   *\n   * @vt: #Y  OSC   12    \"Set or query default cursor color\"   \"OSC 12 ; Pt BEL\"  \"Same as OSC 10, but for default cursor color.\"\n   */\n  public setOrReportCursorColor(data: string): boolean {\n    return this._setOrReportSpecialColor(data, 2);\n  }\n\n  /**\n   * OSC 104 ; <num> ST - restore ANSI color <num>\n   *\n   * @vt: #Y  OSC   104    \"Reset ANSI color\"   \"OSC 104 ; c BEL\" \"Reset color number `c` to themed color.\"\n   * `c` is the color index between 0 and 255. This function restores the default color for `c` as\n   * specified by the loaded theme. Any number of `c` parameters may be given.\n   * If no parameters are given, the entire indexed color table will be reset.\n   */\n  public restoreIndexedColor(data: string): boolean {\n    if (!data) {\n      this._onColor.fire([{ type: ColorRequestType.RESTORE }]);\n      return true;\n    }\n    const event: IColorEvent = [];\n    const slots = data.split(';');\n    for (let i = 0; i < slots.length; ++i) {\n      if (/^\\d+$/.exec(slots[i])) {\n        const index = parseInt(slots[i]);\n        if (isValidColorIndex(index)) {\n          event.push({ type: ColorRequestType.RESTORE, index });\n        }\n      }\n    }\n    if (event.length) {\n      this._onColor.fire(event);\n    }\n    return true;\n  }\n\n  /**\n   * OSC 110 ST - restore default foreground color\n   *\n   * @vt: #Y  OSC   110    \"Restore default foreground color\"   \"OSC 110 BEL\"  \"Restore default foreground to themed color.\"\n   */\n  public restoreFgColor(data: string): boolean {\n    this._onColor.fire([{ type: ColorRequestType.RESTORE, index: SpecialColorIndex.FOREGROUND }]);\n    return true;\n  }\n\n  /**\n   * OSC 111 ST - restore default background color\n   *\n   * @vt: #Y  OSC   111    \"Restore default background color\"   \"OSC 111 BEL\"  \"Restore default background to themed color.\"\n   */\n  public restoreBgColor(data: string): boolean {\n    this._onColor.fire([{ type: ColorRequestType.RESTORE, index: SpecialColorIndex.BACKGROUND }]);\n    return true;\n  }\n\n  /**\n   * OSC 112 ST - restore default cursor color\n   *\n   * @vt: #Y  OSC   112    \"Restore default cursor color\"   \"OSC 112 BEL\"  \"Restore default cursor to themed color.\"\n   */\n  public restoreCursorColor(data: string): boolean {\n    this._onColor.fire([{ type: ColorRequestType.RESTORE, index: SpecialColorIndex.CURSOR }]);\n    return true;\n  }\n\n  /**\n   * ESC E\n   * C1.NEL\n   *   DEC mnemonic: NEL (https://vt100.net/docs/vt510-rm/NEL)\n   *   Moves cursor to first position on next line.\n   *\n   * @vt: #Y   C1    NEL   \"Next Line\"   \"\\x85\"    \"Move the cursor to the beginning of the next row.\"\n   * @vt: #Y   ESC   NEL   \"Next Line\"   \"ESC E\"   \"Move the cursor to the beginning of the next row.\"\n   */\n  public nextLine(): boolean {\n    this._activeBuffer.x = 0;\n    this.index();\n    return true;\n  }\n\n  /**\n   * ESC =\n   *   DEC mnemonic: DECKPAM (https://vt100.net/docs/vt510-rm/DECKPAM.html)\n   *   Enables the numeric keypad to send application sequences to the host.\n   */\n  public keypadApplicationMode(): boolean {\n    this._logService.debug('Serial port requested application keypad.');\n    this._coreService.decPrivateModes.applicationKeypad = true;\n    this._onRequestSyncScrollBar.fire();\n    return true;\n  }\n\n  /**\n   * ESC >\n   *   DEC mnemonic: DECKPNM (https://vt100.net/docs/vt510-rm/DECKPNM.html)\n   *   Enables the keypad to send numeric characters to the host.\n   */\n  public keypadNumericMode(): boolean {\n    this._logService.debug('Switching back to normal keypad.');\n    this._coreService.decPrivateModes.applicationKeypad = false;\n    this._onRequestSyncScrollBar.fire();\n    return true;\n  }\n\n  /**\n   * ESC % @\n   * ESC % G\n   *   Select default character set. UTF-8 is not supported (string are unicode anyways)\n   *   therefore ESC % G does the same.\n   */\n  public selectDefaultCharset(): boolean {\n    this._charsetService.setgLevel(0);\n    this._charsetService.setgCharset(0, DEFAULT_CHARSET); // US (default)\n    return true;\n  }\n\n  /**\n   * ESC ( C\n   *   Designate G0 Character Set, VT100, ISO 2022.\n   * ESC ) C\n   *   Designate G1 Character Set (ISO 2022, VT100).\n   * ESC * C\n   *   Designate G2 Character Set (ISO 2022, VT220).\n   * ESC + C\n   *   Designate G3 Character Set (ISO 2022, VT220).\n   * ESC - C\n   *   Designate G1 Character Set (VT300).\n   * ESC . C\n   *   Designate G2 Character Set (VT300).\n   * ESC / C\n   *   Designate G3 Character Set (VT300). C = A  -> ISO Latin-1 Supplemental. - Supported?\n   */\n  public selectCharset(collectAndFlag: string): boolean {\n    if (collectAndFlag.length !== 2) {\n      this.selectDefaultCharset();\n      return true;\n    }\n    if (collectAndFlag[0] === '/') {\n      return true;  // TODO: Is this supported?\n    }\n    this._charsetService.setgCharset(GLEVEL[collectAndFlag[0]], CHARSETS[collectAndFlag[1]] || DEFAULT_CHARSET);\n    return true;\n  }\n\n  /**\n   * ESC D\n   * C1.IND\n   *   DEC mnemonic: IND (https://vt100.net/docs/vt510-rm/IND.html)\n   *   Moves the cursor down one line in the same column.\n   *\n   * @vt: #Y   C1    IND   \"Index\"   \"\\x84\"    \"Move the cursor one line down scrolling if needed.\"\n   * @vt: #Y   ESC   IND   \"Index\"   \"ESC D\"   \"Move the cursor one line down scrolling if needed.\"\n   */\n  public index(): boolean {\n    this._restrictCursor();\n    this._activeBuffer.y++;\n    if (this._activeBuffer.y === this._activeBuffer.scrollBottom + 1) {\n      this._activeBuffer.y--;\n      this._bufferService.scroll(this._eraseAttrData());\n    } else if (this._activeBuffer.y >= this._bufferService.rows) {\n      this._activeBuffer.y = this._bufferService.rows - 1;\n    }\n    this._restrictCursor();\n    return true;\n  }\n\n  /**\n   * ESC H\n   * C1.HTS\n   *   DEC mnemonic: HTS (https://vt100.net/docs/vt510-rm/HTS.html)\n   *   Sets a horizontal tab stop at the column position indicated by\n   *   the value of the active column when the terminal receives an HTS.\n   *\n   * @vt: #Y   C1    HTS   \"Horizontal Tabulation Set\" \"\\x88\"    \"Places a tab stop at the current cursor position.\"\n   * @vt: #Y   ESC   HTS   \"Horizontal Tabulation Set\" \"ESC H\"   \"Places a tab stop at the current cursor position.\"\n   */\n  public tabSet(): boolean {\n    this._activeBuffer.tabs[this._activeBuffer.x] = true;\n    return true;\n  }\n\n  /**\n   * ESC M\n   * C1.RI\n   *   DEC mnemonic: HTS\n   *   Moves the cursor up one line in the same column. If the cursor is at the top margin,\n   *   the page scrolls down.\n   *\n   * @vt: #Y ESC  IR \"Reverse Index\" \"ESC M\"  \"Move the cursor one line up scrolling if needed.\"\n   */\n  public reverseIndex(): boolean {\n    this._restrictCursor();\n    if (this._activeBuffer.y === this._activeBuffer.scrollTop) {\n      // possibly move the code below to term.reverseScroll();\n      // test: echo -ne '\\e[1;1H\\e[44m\\eM\\e[0m'\n      // blankLine(true) is xterm/linux behavior\n      const scrollRegionHeight = this._activeBuffer.scrollBottom - this._activeBuffer.scrollTop;\n      this._activeBuffer.lines.shiftElements(this._activeBuffer.ybase + this._activeBuffer.y, scrollRegionHeight, 1);\n      this._activeBuffer.lines.set(this._activeBuffer.ybase + this._activeBuffer.y, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n      this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n    } else {\n      this._activeBuffer.y--;\n      this._restrictCursor(); // quickfix to not run out of bounds\n    }\n    return true;\n  }\n\n  /**\n   * ESC c\n   *   DEC mnemonic: RIS (https://vt100.net/docs/vt510-rm/RIS.html)\n   *   Reset to initial state.\n   */\n  public fullReset(): boolean {\n    this._parser.reset();\n    this._onRequestReset.fire();\n    return true;\n  }\n\n  public reset(): void {\n    this._curAttrData = DEFAULT_ATTR_DATA.clone();\n    this._eraseAttrDataInternal = DEFAULT_ATTR_DATA.clone();\n  }\n\n  /**\n   * back_color_erase feature for xterm.\n   */\n  private _eraseAttrData(): IAttributeData {\n    this._eraseAttrDataInternal.bg &= ~(Attributes.CM_MASK | 0xFFFFFF);\n    this._eraseAttrDataInternal.bg |= this._curAttrData.bg & ~0xFC000000;\n    return this._eraseAttrDataInternal;\n  }\n\n  /**\n   * ESC n\n   * ESC o\n   * ESC |\n   * ESC }\n   * ESC ~\n   *   DEC mnemonic: LS (https://vt100.net/docs/vt510-rm/LS.html)\n   *   When you use a locking shift, the character set remains in GL or GR until\n   *   you use another locking shift. (partly supported)\n   */\n  public setgLevel(level: number): boolean {\n    this._charsetService.setgLevel(level);\n    return true;\n  }\n\n  /**\n   * ESC # 8\n   *   DEC mnemonic: DECALN (https://vt100.net/docs/vt510-rm/DECALN.html)\n   *   This control function fills the complete screen area with\n   *   a test pattern (E) used for adjusting screen alignment.\n   *\n   * @vt: #Y   ESC   DECALN   \"Screen Alignment Pattern\"  \"ESC # 8\"  \"Fill viewport with a test pattern (E).\"\n   */\n  public screenAlignmentPattern(): boolean {\n    // prepare cell data\n    const cell = new CellData();\n    cell.content = 1 << Content.WIDTH_SHIFT | 'E'.charCodeAt(0);\n    cell.fg = this._curAttrData.fg;\n    cell.bg = this._curAttrData.bg;\n\n\n    this._setCursor(0, 0);\n    for (let yOffset = 0; yOffset < this._bufferService.rows; ++yOffset) {\n      const row = this._activeBuffer.ybase + this._activeBuffer.y + yOffset;\n      const line = this._activeBuffer.lines.get(row);\n      if (line) {\n        line.fill(cell);\n        line.isWrapped = false;\n      }\n    }\n    this._dirtyRowTracker.markAllDirty();\n    this._setCursor(0, 0);\n    return true;\n  }\n\n\n  /**\n   * DCS $ q Pt ST\n   *   DECRQSS (https://vt100.net/docs/vt510-rm/DECRQSS.html)\n   *   Request Status String (DECRQSS), VT420 and up.\n   *   Response: DECRPSS (https://vt100.net/docs/vt510-rm/DECRPSS.html)\n   *\n   * @vt: #P[Limited support, see below.]  DCS   DECRQSS   \"Request Selection or Setting\"  \"DCS $ q Pt ST\"   \"Request several terminal settings.\"\n   * Response is in the form `ESC P 1 $ r Pt ST` for valid requests, where `Pt` contains the\n   * corresponding CSI string, `ESC P 0 ST` for invalid requests.\n   *\n   * Supported requests and responses:\n   *\n   * | Type                             | Request           | Response (`Pt`)                                       |\n   * | -------------------------------- | ----------------- | ----------------------------------------------------- |\n   * | Graphic Rendition (SGR)          | `DCS $ q m ST`    | always reporting `0m` (currently broken)              |\n   * | Top and Bottom Margins (DECSTBM) | `DCS $ q r ST`    | `Ps ; Ps r`                                           |\n   * | Cursor Style (DECSCUSR)          | `DCS $ q SP q ST` | `Ps SP q`                                             |\n   * | Protection Attribute (DECSCA)    | `DCS $ q \" q ST`  | `Ps \" q` (DECSCA 2 is reported as Ps = 0)             |\n   * | Conformance Level (DECSCL)       | `DCS $ q \" p ST`  | always reporting `61 ; 1 \" p` (DECSCL is unsupported) |\n   *\n   *\n   * TODO:\n   * - fix SGR report\n   * - either check which conformance is better suited or remove the report completely\n   *   --> we are currently a mixture of all up to VT400 but dont follow anyone strictly\n   */\n  public requestStatusString(data: string, params: IParams): boolean {\n    const f = (s: string): boolean => {\n      this._coreService.triggerDataEvent(`${C0.ESC}${s}${C0.ESC}\\\\`);\n      return true;\n    };\n\n    // access helpers\n    const b = this._bufferService.buffer;\n    const opts = this._optionsService.rawOptions;\n    const STYLES: { [key: string]: number } = { 'block': 2, 'underline': 4, 'bar': 6 };\n\n    if (data === '\"q') return f(`P1$r${this._curAttrData.isProtected() ? 1 : 0}\"q`);\n    if (data === '\"p') return f(`P1$r61;1\"p`);\n    if (data === 'r') return f(`P1$r${b.scrollTop + 1};${b.scrollBottom + 1}r`);\n    // FIXME: report real SGR settings instead of 0m\n    if (data === 'm') return f(`P1$r0m`);\n    if (data === ' q') return f(`P1$r${STYLES[opts.cursorStyle] - (opts.cursorBlink ? 1 : 0)} q`);\n    return f(`P0$r`);\n  }\n\n  public markRangeDirty(y1: number, y2: number): void {\n    this._dirtyRowTracker.markRangeDirty(y1, y2);\n  }\n}\n\nexport interface IDirtyRowTracker {\n  readonly start: number;\n  readonly end: number;\n\n  clearRange(): void;\n  markDirty(y: number): void;\n  markRangeDirty(y1: number, y2: number): void;\n  markAllDirty(): void;\n}\n\nclass DirtyRowTracker implements IDirtyRowTracker {\n  public start!: number;\n  public end!: number;\n\n  constructor(\n    @IBufferService private readonly _bufferService: IBufferService\n  ) {\n    this.clearRange();\n  }\n\n  public clearRange(): void {\n    this.start = this._bufferService.buffer.y;\n    this.end = this._bufferService.buffer.y;\n  }\n\n  public markDirty(y: number): void {\n    if (y < this.start) {\n      this.start = y;\n    } else if (y > this.end) {\n      this.end = y;\n    }\n  }\n\n  public markRangeDirty(y1: number, y2: number): void {\n    if (y1 > y2) {\n      $temp = y1;\n      y1 = y2;\n      y2 = $temp;\n    }\n    if (y1 < this.start) {\n      this.start = y1;\n    }\n    if (y2 > this.end) {\n      this.end = y2;\n    }\n  }\n\n  public markAllDirty(): void {\n    this.markRangeDirty(0, this._bufferService.rows - 1);\n  }\n}\n\nexport function isValidColorIndex(value: number): value is ColorIndex {\n  return 0 <= value && value < 256;\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\ninterface INavigator {\n  userAgent: string;\n  language: string;\n  platform: string;\n}\n\n// We're declaring a navigator global here as we expect it in all runtimes (node and browser), but\n// we want this module to live in common.\ndeclare const navigator: INavigator;\ndeclare const process: unknown;\n\nexport const isNode = (typeof process !== 'undefined' && 'title' in (process as any)) ? true : false;\nconst userAgent = (isNode) ? 'node' : navigator.userAgent;\nconst platform = (isNode) ? 'node' : navigator.platform;\n\nexport const isFirefox = userAgent.includes('Firefox');\nexport const isLegacyEdge = userAgent.includes('Edge');\nexport const isSafari = /^((?!chrome|android).)*safari/i.test(userAgent);\nexport function getSafariVersion(): number {\n  if (!isSafari) {\n    return 0;\n  }\n  const majorVersion = userAgent.match(/Version\\/(\\d+)/);\n  if (majorVersion === null || majorVersion.length < 2) {\n    return 0;\n  }\n  return parseInt(majorVersion[1]);\n}\n\n// Find the users platform. We use this to interpret the meta key\n// and ISO third level shifts.\n// http://stackoverflow.com/q/19877924/577598\nexport const isMac = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'].includes(platform);\nexport const isIpad = platform === 'iPad';\nexport const isIphone = platform === 'iPhone';\nexport const isWindows = ['Windows', 'Win16', 'Win32', 'WinCE'].includes(platform);\nexport const isLinux = platform.indexOf('Linux') >= 0;\n// Note that when this is true, isLinux will also be true.\nexport const isChromeOS = /\\bCrOS\\b/.test(userAgent);\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { isNode } from 'common/Platform';\n\ninterface ITaskQueue {\n  /**\n   * Adds a task to the queue which will run in a future idle callback.\n   * To avoid perceivable stalls on the mainthread, tasks with heavy workload\n   * should split their work into smaller pieces and return `true` to get\n   * called again until the work is done (on falsy return value).\n   */\n  enqueue(task: () => boolean | void): void;\n\n  /**\n   * Flushes the queue, running all remaining tasks synchronously.\n   */\n  flush(): void;\n\n  /**\n   * Clears any remaining tasks from the queue, these will not be run.\n   */\n  clear(): void;\n}\n\ninterface ITaskDeadline {\n  timeRemaining(): number;\n}\ntype CallbackWithDeadline = (deadline: ITaskDeadline) => void;\n\nabstract class TaskQueue implements ITaskQueue {\n  private _tasks: (() => boolean | void)[] = [];\n  private _idleCallback?: number;\n  private _i = 0;\n\n  protected abstract _requestCallback(callback: CallbackWithDeadline): number;\n  protected abstract _cancelCallback(identifier: number): void;\n\n  public enqueue(task: () => boolean | void): void {\n    this._tasks.push(task);\n    this._start();\n  }\n\n  public flush(): void {\n    while (this._i < this._tasks.length) {\n      if (!this._tasks[this._i]()) {\n        this._i++;\n      }\n    }\n    this.clear();\n  }\n\n  public clear(): void {\n    if (this._idleCallback) {\n      this._cancelCallback(this._idleCallback);\n      this._idleCallback = undefined;\n    }\n    this._i = 0;\n    this._tasks.length = 0;\n  }\n\n  private _start(): void {\n    if (!this._idleCallback) {\n      this._idleCallback = this._requestCallback(this._process.bind(this));\n    }\n  }\n\n  private _process(deadline: ITaskDeadline): void {\n    this._idleCallback = undefined;\n    let taskDuration = 0;\n    let longestTask = 0;\n    let lastDeadlineRemaining = deadline.timeRemaining();\n    let deadlineRemaining = 0;\n    while (this._i < this._tasks.length) {\n      taskDuration = performance.now();\n      if (!this._tasks[this._i]()) {\n        this._i++;\n      }\n      // other than performance.now, performance.now might not be stable (changes on wall clock\n      // changes), this is not an issue here as a clock change during a short running task is very\n      // unlikely in case it still happened and leads to negative duration, simply assume 1 msec\n      taskDuration = Math.max(1, performance.now() - taskDuration);\n      longestTask = Math.max(taskDuration, longestTask);\n      // Guess the following task will take a similar time to the longest task in this batch, allow\n      // additional room to try avoid exceeding the deadline\n      deadlineRemaining = deadline.timeRemaining();\n      if (longestTask * 1.5 > deadlineRemaining) {\n        // Warn when the time exceeding the deadline is over 20ms, if this happens in practice the\n        // task should be split into sub-tasks to ensure the UI remains responsive.\n        if (lastDeadlineRemaining - taskDuration < -20) {\n          console.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(lastDeadlineRemaining - taskDuration))}ms`);\n        }\n        this._start();\n        return;\n      }\n      lastDeadlineRemaining = deadlineRemaining;\n    }\n    this.clear();\n  }\n}\n\n/**\n * A queue of that runs tasks over several tasks via setTimeout, trying to maintain above 60 frames\n * per second. The tasks will run in the order they are enqueued, but they will run some time later,\n * and care should be taken to ensure they're non-urgent and will not introduce race conditions.\n */\nexport class PriorityTaskQueue extends TaskQueue {\n  protected _requestCallback(callback: CallbackWithDeadline): number {\n    return setTimeout(() => callback(this._createDeadline(16)));\n  }\n\n  protected _cancelCallback(identifier: number): void {\n    clearTimeout(identifier);\n  }\n\n  private _createDeadline(duration: number): ITaskDeadline {\n    const end = performance.now() + duration;\n    return {\n      timeRemaining: () => Math.max(0, end - performance.now())\n    };\n  }\n}\n\nclass IdleTaskQueueInternal extends TaskQueue {\n  protected _requestCallback(callback: IdleRequestCallback): number {\n    return requestIdleCallback(callback);\n  }\n\n  protected _cancelCallback(identifier: number): void {\n    cancelIdleCallback(identifier);\n  }\n}\n\n/**\n * A queue of that runs tasks over several idle callbacks, trying to respect the idle callback's\n * deadline given by the environment. The tasks will run in the order they are enqueued, but they\n * will run some time later, and care should be taken to ensure they're non-urgent and will not\n * introduce race conditions.\n *\n * This reverts to a {@link PriorityTaskQueue} if the environment does not support idle callbacks.\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const IdleTaskQueue = (!isNode && 'requestIdleCallback' in window) ? IdleTaskQueueInternal : PriorityTaskQueue;\n\n/**\n * An object that tracks a single debounced task that will run on the next idle frame. When called\n * multiple times, only the last set task will run.\n */\nexport class DebouncedIdleTask {\n  private _queue: ITaskQueue;\n\n  constructor() {\n    this._queue = new IdleTaskQueue();\n  }\n\n  public set(task: () => boolean | void): void {\n    this._queue.clear();\n    this._queue.enqueue(task);\n  }\n\n  public flush(): void {\n    this._queue.flush();\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CHAR_DATA_CODE_INDEX, NULL_CELL_CODE, WHITESPACE_CELL_CODE } from 'common/buffer/Constants';\nimport { IBufferService } from 'common/services/Services';\n\nexport function updateWindowsModeWrappedState(bufferService: IBufferService): void {\n  // Winpty does not support wraparound mode which means that lines will never\n  // be marked as wrapped. This causes issues for things like copying a line\n  // retaining the wrapped new line characters or if consumers are listening\n  // in on the data stream.\n  //\n  // The workaround for this is to listen to every incoming line feed and mark\n  // the line as wrapped if the last character in the previous line is not a\n  // space. This is certainly not without its problems, but generally on\n  // Windows when text reaches the end of the terminal it's likely going to be\n  // wrapped.\n  const line = bufferService.buffer.lines.get(bufferService.buffer.ybase + bufferService.buffer.y - 1);\n  const lastChar = line?.get(bufferService.cols - 1);\n\n  const nextLine = bufferService.buffer.lines.get(bufferService.buffer.ybase + bufferService.buffer.y);\n  if (nextLine && lastChar) {\n    nextLine.isWrapped = (lastChar[CHAR_DATA_CODE_INDEX] !== NULL_CELL_CODE && lastChar[CHAR_DATA_CODE_INDEX] !== WHITESPACE_CELL_CODE);\n  }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IAttributeData, IColorRGB, IExtendedAttrs } from 'common/Types';\nimport { Attributes, FgFlags, BgFlags, UnderlineStyle, ExtFlags } from 'common/buffer/Constants';\n\nexport class AttributeData implements IAttributeData {\n  public static toColorRGB(value: number): IColorRGB {\n    return [\n      value >>> Attributes.RED_SHIFT & 255,\n      value >>> Attributes.GREEN_SHIFT & 255,\n      value & 255\n    ];\n  }\n\n  public static fromColorRGB(value: IColorRGB): number {\n    return (value[0] & 255) << Attributes.RED_SHIFT | (value[1] & 255) << Attributes.GREEN_SHIFT | value[2] & 255;\n  }\n\n  public clone(): IAttributeData {\n    const newObj = new AttributeData();\n    newObj.fg = this.fg;\n    newObj.bg = this.bg;\n    newObj.extended = this.extended.clone();\n    return newObj;\n  }\n\n  // data\n  public fg = 0;\n  public bg = 0;\n  public extended: IExtendedAttrs = new ExtendedAttrs();\n\n  // flags\n  public isInverse(): number       { return this.fg & FgFlags.INVERSE; }\n  public isBold(): number          { return this.fg & FgFlags.BOLD; }\n  public isUnderline(): number     {\n    if (this.hasExtendedAttrs() && this.extended.underlineStyle !== UnderlineStyle.NONE) {\n      return 1;\n    }\n    return this.fg & FgFlags.UNDERLINE;\n  }\n  public isBlink(): number         { return this.fg & FgFlags.BLINK; }\n  public isInvisible(): number     { return this.fg & FgFlags.INVISIBLE; }\n  public isItalic(): number        { return this.bg & BgFlags.ITALIC; }\n  public isDim(): number           { return this.bg & BgFlags.DIM; }\n  public isStrikethrough(): number { return this.fg & FgFlags.STRIKETHROUGH; }\n  public isProtected(): number     { return this.bg & BgFlags.PROTECTED; }\n  public isOverline(): number      { return this.bg & BgFlags.OVERLINE; }\n\n  // color modes\n  public getFgColorMode(): number { return this.fg & Attributes.CM_MASK; }\n  public getBgColorMode(): number { return this.bg & Attributes.CM_MASK; }\n  public isFgRGB(): boolean       { return (this.fg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n  public isBgRGB(): boolean       { return (this.bg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n  public isFgPalette(): boolean   { return (this.fg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.fg & Attributes.CM_MASK) === Attributes.CM_P256; }\n  public isBgPalette(): boolean   { return (this.bg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.bg & Attributes.CM_MASK) === Attributes.CM_P256; }\n  public isFgDefault(): boolean   { return (this.fg & Attributes.CM_MASK) === 0; }\n  public isBgDefault(): boolean   { return (this.bg & Attributes.CM_MASK) === 0; }\n  public isAttributeDefault(): boolean { return this.fg === 0 && this.bg === 0; }\n\n  // colors\n  public getFgColor(): number {\n    switch (this.fg & Attributes.CM_MASK) {\n      case Attributes.CM_P16:\n      case Attributes.CM_P256:  return this.fg & Attributes.PCOLOR_MASK;\n      case Attributes.CM_RGB:   return this.fg & Attributes.RGB_MASK;\n      default:                  return -1;  // CM_DEFAULT defaults to -1\n    }\n  }\n  public getBgColor(): number {\n    switch (this.bg & Attributes.CM_MASK) {\n      case Attributes.CM_P16:\n      case Attributes.CM_P256:  return this.bg & Attributes.PCOLOR_MASK;\n      case Attributes.CM_RGB:   return this.bg & Attributes.RGB_MASK;\n      default:                  return -1;  // CM_DEFAULT defaults to -1\n    }\n  }\n\n  // extended attrs\n  public hasExtendedAttrs(): number {\n    return this.bg & BgFlags.HAS_EXTENDED;\n  }\n  public updateExtended(): void {\n    if (this.extended.isEmpty()) {\n      this.bg &= ~BgFlags.HAS_EXTENDED;\n    } else {\n      this.bg |= BgFlags.HAS_EXTENDED;\n    }\n  }\n  public getUnderlineColor(): number {\n    if ((this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor) {\n      switch (this.extended.underlineColor & Attributes.CM_MASK) {\n        case Attributes.CM_P16:\n        case Attributes.CM_P256:  return this.extended.underlineColor & Attributes.PCOLOR_MASK;\n        case Attributes.CM_RGB:   return this.extended.underlineColor & Attributes.RGB_MASK;\n        default:                  return this.getFgColor();\n      }\n    }\n    return this.getFgColor();\n  }\n  public getUnderlineColorMode(): number {\n    return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n      ? this.extended.underlineColor & Attributes.CM_MASK\n      : this.getFgColorMode();\n  }\n  public isUnderlineColorRGB(): boolean {\n    return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n      ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_RGB\n      : this.isFgRGB();\n  }\n  public isUnderlineColorPalette(): boolean {\n    return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n      ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P16\n          || (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P256\n      : this.isFgPalette();\n  }\n  public isUnderlineColorDefault(): boolean {\n    return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n      ? (this.extended.underlineColor & Attributes.CM_MASK) === 0\n      : this.isFgDefault();\n  }\n  public getUnderlineStyle(): UnderlineStyle {\n    return this.fg & FgFlags.UNDERLINE\n      ? (this.bg & BgFlags.HAS_EXTENDED ? this.extended.underlineStyle : UnderlineStyle.SINGLE)\n      : UnderlineStyle.NONE;\n  }\n  public getUnderlineVariantOffset(): number {\n    return this.extended.underlineVariantOffset;\n  }\n}\n\n\n/**\n * Extended attributes for a cell.\n * Holds information about different underline styles and color.\n */\nexport class ExtendedAttrs implements IExtendedAttrs {\n  private _ext: number = 0;\n  public get ext(): number {\n    if (this._urlId) {\n      return (\n        (this._ext & ~ExtFlags.UNDERLINE_STYLE) |\n        (this.underlineStyle << 26)\n      );\n    }\n    return this._ext;\n  }\n  public set ext(value: number) { this._ext = value; }\n\n  public get underlineStyle(): UnderlineStyle {\n    // Always return the URL style if it has one\n    if (this._urlId) {\n      return UnderlineStyle.DASHED;\n    }\n    return (this._ext & ExtFlags.UNDERLINE_STYLE) >> 26;\n  }\n  public set underlineStyle(value: UnderlineStyle) {\n    this._ext &= ~ExtFlags.UNDERLINE_STYLE;\n    this._ext |= (value << 26) & ExtFlags.UNDERLINE_STYLE;\n  }\n\n  public get underlineColor(): number {\n    return this._ext & (Attributes.CM_MASK | Attributes.RGB_MASK);\n  }\n  public set underlineColor(value: number) {\n    this._ext &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n    this._ext |= value & (Attributes.CM_MASK | Attributes.RGB_MASK);\n  }\n\n  private _urlId: number = 0;\n  public get urlId(): number {\n    return this._urlId;\n  }\n  public set urlId(value: number) {\n    this._urlId = value;\n  }\n\n  public get underlineVariantOffset(): number {\n    const val = (this._ext & ExtFlags.VARIANT_OFFSET) >> 29;\n    if (val < 0) {\n      return val ^ 0xFFFFFFF8;\n    }\n    return val;\n  }\n  public set underlineVariantOffset(value: number) {\n    this._ext &= ~ExtFlags.VARIANT_OFFSET;\n    this._ext |= (value << 29) & ExtFlags.VARIANT_OFFSET;\n  }\n\n  constructor(\n    ext: number = 0,\n    urlId: number = 0\n  ) {\n    this._ext = ext;\n    this._urlId = urlId;\n  }\n\n  public clone(): IExtendedAttrs {\n    return new ExtendedAttrs(this._ext, this._urlId);\n  }\n\n  /**\n   * Convenient method to indicate whether the object holds no additional information,\n   * that needs to be persistant in the buffer.\n   */\n  public isEmpty(): boolean {\n    return this.underlineStyle === UnderlineStyle.NONE && this._urlId === 0;\n  }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CircularList, IInsertEvent } from 'common/CircularList';\nimport { IdleTaskQueue } from 'common/TaskQueue';\nimport { IAttributeData, IBufferLine, ICellData, ICharset } from 'common/Types';\nimport { ExtendedAttrs } from 'common/buffer/AttributeData';\nimport { BufferLine, DEFAULT_ATTR_DATA } from 'common/buffer/BufferLine';\nimport { getWrappedLineTrimmedLength, reflowLargerApplyNewLayout, reflowLargerCreateNewLayout, reflowLargerGetLinesToRemove, reflowSmallerGetNewLineLengths } from 'common/buffer/BufferReflow';\nimport { CellData } from 'common/buffer/CellData';\nimport { NULL_CELL_CHAR, NULL_CELL_CODE, NULL_CELL_WIDTH, WHITESPACE_CELL_CHAR, WHITESPACE_CELL_CODE, WHITESPACE_CELL_WIDTH } from 'common/buffer/Constants';\nimport { Marker } from 'common/buffer/Marker';\nimport { IBuffer } from 'common/buffer/Types';\nimport { DEFAULT_CHARSET } from 'common/data/Charsets';\nimport { IBufferService, IOptionsService } from 'common/services/Services';\n\nexport const MAX_BUFFER_SIZE = 4294967295; // 2^32 - 1\n\n/**\n * This class represents a terminal buffer (an internal state of the terminal), where the\n * following information is stored (in high-level):\n *   - text content of this particular buffer\n *   - cursor position\n *   - scroll position\n */\nexport class Buffer implements IBuffer {\n  public lines: CircularList<IBufferLine>;\n  public ydisp: number = 0;\n  public ybase: number = 0;\n  public y: number = 0;\n  public x: number = 0;\n  public scrollBottom: number;\n  public scrollTop: number;\n  public tabs: { [column: number]: boolean | undefined } = {};\n  public savedY: number = 0;\n  public savedX: number = 0;\n  public savedCurAttrData = DEFAULT_ATTR_DATA.clone();\n  public savedCharset: ICharset | undefined = DEFAULT_CHARSET;\n  public markers: Marker[] = [];\n  private _nullCell: ICellData = CellData.fromCharData([0, NULL_CELL_CHAR, NULL_CELL_WIDTH, NULL_CELL_CODE]);\n  private _whitespaceCell: ICellData = CellData.fromCharData([0, WHITESPACE_CELL_CHAR, WHITESPACE_CELL_WIDTH, WHITESPACE_CELL_CODE]);\n  private _cols: number;\n  private _rows: number;\n  private _isClearing: boolean = false;\n\n  constructor(\n    private _hasScrollback: boolean,\n    private _optionsService: IOptionsService,\n    private _bufferService: IBufferService\n  ) {\n    this._cols = this._bufferService.cols;\n    this._rows = this._bufferService.rows;\n    this.lines = new CircularList<IBufferLine>(this._getCorrectBufferLength(this._rows));\n    this.scrollTop = 0;\n    this.scrollBottom = this._rows - 1;\n    this.setupTabStops();\n  }\n\n  public getNullCell(attr?: IAttributeData): ICellData {\n    if (attr) {\n      this._nullCell.fg = attr.fg;\n      this._nullCell.bg = attr.bg;\n      this._nullCell.extended = attr.extended;\n    } else {\n      this._nullCell.fg = 0;\n      this._nullCell.bg = 0;\n      this._nullCell.extended = new ExtendedAttrs();\n    }\n    return this._nullCell;\n  }\n\n  public getWhitespaceCell(attr?: IAttributeData): ICellData {\n    if (attr) {\n      this._whitespaceCell.fg = attr.fg;\n      this._whitespaceCell.bg = attr.bg;\n      this._whitespaceCell.extended = attr.extended;\n    } else {\n      this._whitespaceCell.fg = 0;\n      this._whitespaceCell.bg = 0;\n      this._whitespaceCell.extended = new ExtendedAttrs();\n    }\n    return this._whitespaceCell;\n  }\n\n  public getBlankLine(attr: IAttributeData, isWrapped?: boolean): IBufferLine {\n    return new BufferLine(this._bufferService.cols, this.getNullCell(attr), isWrapped);\n  }\n\n  public get hasScrollback(): boolean {\n    return this._hasScrollback && this.lines.maxLength > this._rows;\n  }\n\n  public get isCursorInViewport(): boolean {\n    const absoluteY = this.ybase + this.y;\n    const relativeY = absoluteY - this.ydisp;\n    return (relativeY >= 0 && relativeY < this._rows);\n  }\n\n  /**\n   * Gets the correct buffer length based on the rows provided, the terminal's\n   * scrollback and whether this buffer is flagged to have scrollback or not.\n   * @param rows The terminal rows to use in the calculation.\n   */\n  private _getCorrectBufferLength(rows: number): number {\n    if (!this._hasScrollback) {\n      return rows;\n    }\n\n    const correctBufferLength = rows + this._optionsService.rawOptions.scrollback;\n\n    return correctBufferLength > MAX_BUFFER_SIZE ? MAX_BUFFER_SIZE : correctBufferLength;\n  }\n\n  /**\n   * Fills the buffer's viewport with blank lines.\n   */\n  public fillViewportRows(fillAttr?: IAttributeData): void {\n    if (this.lines.length === 0) {\n      if (fillAttr === undefined) {\n        fillAttr = DEFAULT_ATTR_DATA;\n      }\n      let i = this._rows;\n      while (i--) {\n        this.lines.push(this.getBlankLine(fillAttr));\n      }\n    }\n  }\n\n  /**\n   * Clears the buffer to it's initial state, discarding all previous data.\n   */\n  public clear(): void {\n    this.ydisp = 0;\n    this.ybase = 0;\n    this.y = 0;\n    this.x = 0;\n    this.lines = new CircularList<IBufferLine>(this._getCorrectBufferLength(this._rows));\n    this.scrollTop = 0;\n    this.scrollBottom = this._rows - 1;\n    this.setupTabStops();\n  }\n\n  /**\n   * Resizes the buffer, adjusting its data accordingly.\n   * @param newCols The new number of columns.\n   * @param newRows The new number of rows.\n   */\n  public resize(newCols: number, newRows: number): void {\n    // store reference to null cell with default attrs\n    const nullCell = this.getNullCell(DEFAULT_ATTR_DATA);\n\n    // count bufferlines with overly big memory to be cleaned afterwards\n    let dirtyMemoryLines = 0;\n\n    // Increase max length if needed before adjustments to allow space to fill\n    // as required.\n    const newMaxLength = this._getCorrectBufferLength(newRows);\n    if (newMaxLength > this.lines.maxLength) {\n      this.lines.maxLength = newMaxLength;\n    }\n\n    // if (this._cols > newCols) {\n    //   console.log('increase!');\n    // }\n\n    // The following adjustments should only happen if the buffer has been\n    // initialized/filled.\n    if (this.lines.length > 0) {\n      // Deal with columns increasing (reducing needs to happen after reflow)\n      if (this._cols < newCols) {\n        for (let i = 0; i < this.lines.length; i++) {\n          // +boolean for fast 0 or 1 conversion\n          dirtyMemoryLines += +this.lines.get(i)!.resize(newCols, nullCell);\n        }\n      }\n\n      // Resize rows in both directions as needed\n      let addToY = 0;\n      if (this._rows < newRows) {\n        for (let y = this._rows; y < newRows; y++) {\n          if (this.lines.length < newRows + this.ybase) {\n            if (this._optionsService.rawOptions.windowsMode || this._optionsService.rawOptions.windowsPty.backend !== undefined || this._optionsService.rawOptions.windowsPty.buildNumber !== undefined) {\n              // Just add the new missing rows on Windows as conpty reprints the screen with it's\n              // view of the world. Once a line enters scrollback for conpty it remains there\n              this.lines.push(new BufferLine(newCols, nullCell));\n            } else {\n              if (this.ybase > 0 && this.lines.length <= this.ybase + this.y + addToY + 1) {\n                // There is room above the buffer and there are no empty elements below the line,\n                // scroll up\n                this.ybase--;\n                addToY++;\n                if (this.ydisp > 0) {\n                  // Viewport is at the top of the buffer, must increase downwards\n                  this.ydisp--;\n                }\n              } else {\n                // Add a blank line if there is no buffer left at the top to scroll to, or if there\n                // are blank lines after the cursor\n                this.lines.push(new BufferLine(newCols, nullCell));\n              }\n            }\n          }\n        }\n      } else { // (this._rows >= newRows)\n        for (let y = this._rows; y > newRows; y--) {\n          if (this.lines.length > newRows + this.ybase) {\n            if (this.lines.length > this.ybase + this.y + 1) {\n              // The line is a blank line below the cursor, remove it\n              this.lines.pop();\n            } else {\n              // The line is the cursor, scroll down\n              this.ybase++;\n              this.ydisp++;\n            }\n          }\n        }\n      }\n\n      // Reduce max length if needed after adjustments, this is done after as it\n      // would otherwise cut data from the bottom of the buffer.\n      if (newMaxLength < this.lines.maxLength) {\n        // Trim from the top of the buffer and adjust ybase and ydisp.\n        const amountToTrim = this.lines.length - newMaxLength;\n        if (amountToTrim > 0) {\n          this.lines.trimStart(amountToTrim);\n          this.ybase = Math.max(this.ybase - amountToTrim, 0);\n          this.ydisp = Math.max(this.ydisp - amountToTrim, 0);\n          this.savedY = Math.max(this.savedY - amountToTrim, 0);\n        }\n        this.lines.maxLength = newMaxLength;\n      }\n\n      // Make sure that the cursor stays on screen\n      this.x = Math.min(this.x, newCols - 1);\n      this.y = Math.min(this.y, newRows - 1);\n      if (addToY) {\n        this.y += addToY;\n      }\n      this.savedX = Math.min(this.savedX, newCols - 1);\n\n      this.scrollTop = 0;\n    }\n\n    this.scrollBottom = newRows - 1;\n\n    if (this._isReflowEnabled) {\n      this._reflow(newCols, newRows);\n\n      // Trim the end of the line off if cols shrunk\n      if (this._cols > newCols) {\n        for (let i = 0; i < this.lines.length; i++) {\n          // +boolean for fast 0 or 1 conversion\n          dirtyMemoryLines += +this.lines.get(i)!.resize(newCols, nullCell);\n        }\n      }\n    }\n\n    this._cols = newCols;\n    this._rows = newRows;\n\n    this._memoryCleanupQueue.clear();\n    // schedule memory cleanup only, if more than 10% of the lines are affected\n    if (dirtyMemoryLines > 0.1 * this.lines.length) {\n      this._memoryCleanupPosition = 0;\n      this._memoryCleanupQueue.enqueue(() => this._batchedMemoryCleanup());\n    }\n  }\n\n  private _memoryCleanupQueue = new IdleTaskQueue();\n  private _memoryCleanupPosition = 0;\n\n  private _batchedMemoryCleanup(): boolean {\n    let normalRun = true;\n    if (this._memoryCleanupPosition >= this.lines.length) {\n      // cleanup made it once through all lines, thus rescan in loop below to also catch shifted\n      // lines, which should finish rather quick if there are no more cleanups pending\n      this._memoryCleanupPosition = 0;\n      normalRun = false;\n    }\n    let counted = 0;\n    while (this._memoryCleanupPosition < this.lines.length) {\n      counted += this.lines.get(this._memoryCleanupPosition++)!.cleanupMemory();\n      // cleanup max 100 lines per batch\n      if (counted > 100) {\n        return true;\n      }\n    }\n    // normal runs always need another rescan afterwards\n    // if we made it here with normalRun=false, we are in a final run\n    // and can end the cleanup task for sure\n    return normalRun;\n  }\n\n  private get _isReflowEnabled(): boolean {\n    const windowsPty = this._optionsService.rawOptions.windowsPty;\n    if (windowsPty && windowsPty.buildNumber) {\n      return this._hasScrollback && windowsPty.backend === 'conpty' && windowsPty.buildNumber >= 21376;\n    }\n    return this._hasScrollback && !this._optionsService.rawOptions.windowsMode;\n  }\n\n  private _reflow(newCols: number, newRows: number): void {\n    if (this._cols === newCols) {\n      return;\n    }\n\n    // Iterate through rows, ignore the last one as it cannot be wrapped\n    if (newCols > this._cols) {\n      this._reflowLarger(newCols, newRows);\n    } else {\n      this._reflowSmaller(newCols, newRows);\n    }\n  }\n\n  private _reflowLarger(newCols: number, newRows: number): void {\n    const reflowCursorLine = this._optionsService.rawOptions.reflowCursorLine;\n    const toRemove: number[] = reflowLargerGetLinesToRemove(this.lines, this._cols, newCols, this.ybase + this.y, this.getNullCell(DEFAULT_ATTR_DATA), reflowCursorLine);\n    if (toRemove.length > 0) {\n      const newLayoutResult = reflowLargerCreateNewLayout(this.lines, toRemove);\n      reflowLargerApplyNewLayout(this.lines, newLayoutResult.layout);\n      this._reflowLargerAdjustViewport(newCols, newRows, newLayoutResult.countRemoved);\n    }\n  }\n\n  private _reflowLargerAdjustViewport(newCols: number, newRows: number, countRemoved: number): void {\n    const nullCell = this.getNullCell(DEFAULT_ATTR_DATA);\n    // Adjust viewport based on number of items removed\n    let viewportAdjustments = countRemoved;\n    while (viewportAdjustments-- > 0) {\n      if (this.ybase === 0) {\n        if (this.y > 0) {\n          this.y--;\n        }\n        if (this.lines.length < newRows) {\n          // Add an extra row at the bottom of the viewport\n          this.lines.push(new BufferLine(newCols, nullCell));\n        }\n      } else {\n        if (this.ydisp === this.ybase) {\n          this.ydisp--;\n        }\n        this.ybase--;\n      }\n    }\n    this.savedY = Math.max(this.savedY - countRemoved, 0);\n  }\n\n  private _reflowSmaller(newCols: number, newRows: number): void {\n    const reflowCursorLine = this._optionsService.rawOptions.reflowCursorLine;\n    const nullCell = this.getNullCell(DEFAULT_ATTR_DATA);\n    // Gather all BufferLines that need to be inserted into the Buffer here so that they can be\n    // batched up and only committed once\n    const toInsert = [];\n    let countToInsert = 0;\n    // Go backwards as many lines may be trimmed and this will avoid considering them\n    for (let y = this.lines.length - 1; y >= 0; y--) {\n      // Check whether this line is a problem\n      let nextLine = this.lines.get(y) as BufferLine;\n      if (!nextLine || !nextLine.isWrapped && nextLine.getTrimmedLength() <= newCols) {\n        continue;\n      }\n\n      // Gather wrapped lines and adjust y to be the starting line\n      const wrappedLines: BufferLine[] = [nextLine];\n      while (nextLine.isWrapped && y > 0) {\n        nextLine = this.lines.get(--y) as BufferLine;\n        wrappedLines.unshift(nextLine);\n      }\n\n      if (!reflowCursorLine) {\n        // If these lines contain the cursor don't touch them, the program will handle fixing up\n        // wrapped lines with the cursor\n        const absoluteY = this.ybase + this.y;\n        if (absoluteY >= y && absoluteY < y + wrappedLines.length) {\n          continue;\n        }\n      }\n\n      const lastLineLength = wrappedLines[wrappedLines.length - 1].getTrimmedLength();\n      const destLineLengths = reflowSmallerGetNewLineLengths(wrappedLines, this._cols, newCols);\n      const linesToAdd = destLineLengths.length - wrappedLines.length;\n      let trimmedLines: number;\n      if (this.ybase === 0 && this.y !== this.lines.length - 1) {\n        // If the top section of the buffer is not yet filled\n        trimmedLines = Math.max(0, this.y - this.lines.maxLength + linesToAdd);\n      } else {\n        trimmedLines = Math.max(0, this.lines.length - this.lines.maxLength + linesToAdd);\n      }\n\n      // Add the new lines\n      const newLines: BufferLine[] = [];\n      for (let i = 0; i < linesToAdd; i++) {\n        const newLine = this.getBlankLine(DEFAULT_ATTR_DATA, true) as BufferLine;\n        newLines.push(newLine);\n      }\n      if (newLines.length > 0) {\n        toInsert.push({\n          // countToInsert here gets the actual index, taking into account other inserted items.\n          // using this we can iterate through the list forwards\n          start: y + wrappedLines.length + countToInsert,\n          newLines\n        });\n        countToInsert += newLines.length;\n      }\n      wrappedLines.push(...newLines);\n\n      // Copy buffer data to new locations, this needs to happen backwards to do in-place\n      let destLineIndex = destLineLengths.length - 1; // Math.floor(cellsNeeded / newCols);\n      let destCol = destLineLengths[destLineIndex]; // cellsNeeded % newCols;\n      if (destCol === 0) {\n        destLineIndex--;\n        destCol = destLineLengths[destLineIndex];\n      }\n      let srcLineIndex = wrappedLines.length - linesToAdd - 1;\n      let srcCol = lastLineLength;\n      while (srcLineIndex >= 0) {\n        const cellsToCopy = Math.min(srcCol, destCol);\n        if (wrappedLines[destLineIndex] === undefined) {\n          // Sanity check that the line exists, this has been known to fail for an unknown reason\n          // which would stop the reflow from happening if an exception would throw.\n          break;\n        }\n        wrappedLines[destLineIndex].copyCellsFrom(wrappedLines[srcLineIndex], srcCol - cellsToCopy, destCol - cellsToCopy, cellsToCopy, true);\n        destCol -= cellsToCopy;\n        if (destCol === 0) {\n          destLineIndex--;\n          destCol = destLineLengths[destLineIndex];\n        }\n        srcCol -= cellsToCopy;\n        if (srcCol === 0) {\n          srcLineIndex--;\n          const wrappedLinesIndex = Math.max(srcLineIndex, 0);\n          srcCol = getWrappedLineTrimmedLength(wrappedLines, wrappedLinesIndex, this._cols);\n        }\n      }\n\n      // Null out the end of the line ends if a wide character wrapped to the following line\n      for (let i = 0; i < wrappedLines.length; i++) {\n        if (destLineLengths[i] < newCols) {\n          wrappedLines[i].setCell(destLineLengths[i], nullCell);\n        }\n      }\n\n      // Adjust viewport as needed\n      let viewportAdjustments = linesToAdd - trimmedLines;\n      while (viewportAdjustments-- > 0) {\n        if (this.ybase === 0) {\n          if (this.y < newRows - 1) {\n            this.y++;\n            this.lines.pop();\n          } else {\n            this.ybase++;\n            this.ydisp++;\n          }\n        } else {\n          // Ensure ybase does not exceed its maximum value\n          if (this.ybase < Math.min(this.lines.maxLength, this.lines.length + countToInsert) - newRows) {\n            if (this.ybase === this.ydisp) {\n              this.ydisp++;\n            }\n            this.ybase++;\n          }\n        }\n      }\n      this.savedY = Math.min(this.savedY + linesToAdd, this.ybase + newRows - 1);\n    }\n\n    // Rearrange lines in the buffer if there are any insertions, this is done at the end rather\n    // than earlier so that it's a single O(n) pass through the buffer, instead of O(n^2) from many\n    // costly calls to CircularList.splice.\n    if (toInsert.length > 0) {\n      // Record buffer insert events and then play them back backwards so that the indexes are\n      // correct\n      const insertEvents: IInsertEvent[] = [];\n\n      // Record original lines so they don't get overridden when we rearrange the list\n      const originalLines: BufferLine[] = [];\n      for (let i = 0; i < this.lines.length; i++) {\n        originalLines.push(this.lines.get(i) as BufferLine);\n      }\n      const originalLinesLength = this.lines.length;\n\n      let originalLineIndex = originalLinesLength - 1;\n      let nextToInsertIndex = 0;\n      let nextToInsert = toInsert[nextToInsertIndex];\n      this.lines.length = Math.min(this.lines.maxLength, this.lines.length + countToInsert);\n      let countInsertedSoFar = 0;\n      for (let i = Math.min(this.lines.maxLength - 1, originalLinesLength + countToInsert - 1); i >= 0; i--) {\n        if (nextToInsert && nextToInsert.start > originalLineIndex + countInsertedSoFar) {\n          // Insert extra lines here, adjusting i as needed\n          for (let nextI = nextToInsert.newLines.length - 1; nextI >= 0; nextI--) {\n            this.lines.set(i--, nextToInsert.newLines[nextI]);\n          }\n          i++;\n\n          // Create insert events for later\n          insertEvents.push({\n            index: originalLineIndex + 1,\n            amount: nextToInsert.newLines.length\n          });\n\n          countInsertedSoFar += nextToInsert.newLines.length;\n          nextToInsert = toInsert[++nextToInsertIndex];\n        } else {\n          this.lines.set(i, originalLines[originalLineIndex--]);\n        }\n      }\n\n      // Update markers\n      let insertCountEmitted = 0;\n      for (let i = insertEvents.length - 1; i >= 0; i--) {\n        insertEvents[i].index += insertCountEmitted;\n        this.lines.onInsertEmitter.fire(insertEvents[i]);\n        insertCountEmitted += insertEvents[i].amount;\n      }\n      const amountToTrim = Math.max(0, originalLinesLength + countToInsert - this.lines.maxLength);\n      if (amountToTrim > 0) {\n        this.lines.onTrimEmitter.fire(amountToTrim);\n      }\n    }\n  }\n\n  /**\n   * Translates a buffer line to a string, with optional start and end columns.\n   * Wide characters will count as two columns in the resulting string. This\n   * function is useful for getting the actual text underneath the raw selection\n   * position.\n   * @param lineIndex The absolute index of the line being translated.\n   * @param trimRight Whether to trim whitespace to the right.\n   * @param startCol The column to start at.\n   * @param endCol The column to end at.\n   */\n  public translateBufferLineToString(lineIndex: number, trimRight: boolean, startCol: number = 0, endCol?: number): string {\n    const line = this.lines.get(lineIndex);\n    if (!line) {\n      return '';\n    }\n    return line.translateToString(trimRight, startCol, endCol);\n  }\n\n  public getWrappedRangeForLine(y: number): { first: number, last: number } {\n    let first = y;\n    let last = y;\n    // Scan upwards for wrapped lines\n    while (first > 0 && this.lines.get(first)!.isWrapped) {\n      first--;\n    }\n    // Scan downwards for wrapped lines\n    while (last + 1 < this.lines.length && this.lines.get(last + 1)!.isWrapped) {\n      last++;\n    }\n    return { first, last };\n  }\n\n  /**\n   * Setup the tab stops.\n   * @param i The index to start setting up tab stops from.\n   */\n  public setupTabStops(i?: number): void {\n    if (i !== null && i !== undefined) {\n      if (!this.tabs[i]) {\n        i = this.prevStop(i);\n      }\n    } else {\n      this.tabs = {};\n      i = 0;\n    }\n\n    for (; i < this._cols; i += this._optionsService.rawOptions.tabStopWidth) {\n      this.tabs[i] = true;\n    }\n  }\n\n  /**\n   * Move the cursor to the previous tab stop from the given position (default is current).\n   * @param x The position to move the cursor to the previous tab stop.\n   */\n  public prevStop(x?: number): number {\n    if (x === null || x === undefined) {\n      x = this.x;\n    }\n    while (!this.tabs[--x] && x > 0);\n    return x >= this._cols ? this._cols - 1 : x < 0 ? 0 : x;\n  }\n\n  /**\n   * Move the cursor one tab stop forward from the given position (default is current).\n   * @param x The position to move the cursor one tab stop forward.\n   */\n  public nextStop(x?: number): number {\n    if (x === null || x === undefined) {\n      x = this.x;\n    }\n    while (!this.tabs[++x] && x < this._cols);\n    return x >= this._cols ? this._cols - 1 : x < 0 ? 0 : x;\n  }\n\n  /**\n   * Clears markers on single line.\n   * @param y The line to clear.\n   */\n  public clearMarkers(y: number): void {\n    this._isClearing = true;\n    for (let i = 0; i < this.markers.length; i++) {\n      if (this.markers[i].line === y) {\n        this.markers[i].dispose();\n        this.markers.splice(i--, 1);\n      }\n    }\n    this._isClearing = false;\n  }\n\n  /**\n   * Clears markers on all lines\n   */\n  public clearAllMarkers(): void {\n    this._isClearing = true;\n    for (let i = 0; i < this.markers.length; i++) {\n      this.markers[i].dispose();\n    }\n    this.markers.length = 0;\n    this._isClearing = false;\n  }\n\n  public addMarker(y: number): Marker {\n    const marker = new Marker(y);\n    this.markers.push(marker);\n    marker.register(this.lines.onTrim(amount => {\n      marker.line -= amount;\n      // The marker should be disposed when the line is trimmed from the buffer\n      if (marker.line < 0) {\n        marker.dispose();\n      }\n    }));\n    marker.register(this.lines.onInsert(event => {\n      if (marker.line >= event.index) {\n        marker.line += event.amount;\n      }\n    }));\n    marker.register(this.lines.onDelete(event => {\n      // Delete the marker if it's within the range\n      if (marker.line >= event.index && marker.line < event.index + event.amount) {\n        marker.dispose();\n      }\n\n      // Shift the marker if it's after the deleted range\n      if (marker.line > event.index) {\n        marker.line -= event.amount;\n      }\n    }));\n    marker.register(marker.onDispose(() => this._removeMarker(marker)));\n    return marker;\n  }\n\n  private _removeMarker(marker: Marker): void {\n    if (!this._isClearing) {\n      this.markers.splice(this.markers.indexOf(marker), 1);\n    }\n  }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, IAttributeData, IBufferLine, ICellData, IExtendedAttrs } from 'common/Types';\nimport { AttributeData } from 'common/buffer/AttributeData';\nimport { CellData } from 'common/buffer/CellData';\nimport { Attributes, BgFlags, CHAR_DATA_ATTR_INDEX, CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX, Content, NULL_CELL_CHAR, NULL_CELL_CODE, NULL_CELL_WIDTH, WHITESPACE_CELL_CHAR } from 'common/buffer/Constants';\nimport { stringFromCodePoint } from 'common/input/TextDecoder';\n\n/**\n * buffer memory layout:\n *\n *   |             uint32_t             |        uint32_t         |        uint32_t         |\n *   |             `content`            |          `FG`           |          `BG`           |\n *   | wcwidth(2) comb(1) codepoint(21) | flags(8) R(8) G(8) B(8) | flags(8) R(8) G(8) B(8) |\n */\n\n\n/** typed array slots taken by one cell */\nconst CELL_SIZE = 3;\n\n/**\n * Cell member indices.\n *\n * Direct access:\n *    `content = data[column * CELL_SIZE + Cell.CONTENT];`\n *    `fg = data[column * CELL_SIZE + Cell.FG];`\n *    `bg = data[column * CELL_SIZE + Cell.BG];`\n */\nconst enum Cell {\n  CONTENT = 0,\n  FG = 1, // currently simply holds all known attrs\n  BG = 2  // currently unused\n}\n\nexport const DEFAULT_ATTR_DATA = Object.freeze(new AttributeData());\n\n// Work variables to avoid garbage collection\nlet $startIndex = 0;\n\n/** Factor when to cleanup underlying array buffer after shrinking. */\nconst CLEANUP_THRESHOLD = 2;\n\n/**\n * Typed array based bufferline implementation.\n *\n * There are 2 ways to insert data into the cell buffer:\n * - `setCellFromCodepoint` + `addCodepointToCell`\n *   Use these for data that is already UTF32.\n *   Used during normal input in `InputHandler` for faster buffer access.\n * - `setCell`\n *   This method takes a CellData object and stores the data in the buffer.\n *   Use `CellData.fromCharData` to create the CellData object (e.g. from JS string).\n *\n * To retrieve data from the buffer use either one of the primitive methods\n * (if only one particular value is needed) or `loadCell`. For `loadCell` in a loop\n * memory allocs / GC pressure can be greatly reduced by reusing the CellData object.\n */\nexport class BufferLine implements IBufferLine {\n  protected _data: Uint32Array;\n  protected _combined: {[index: number]: string} = {};\n  protected _extendedAttrs: {[index: number]: IExtendedAttrs | undefined} = {};\n  public length: number;\n\n  constructor(cols: number, fillCellData?: ICellData, public isWrapped: boolean = false) {\n    this._data = new Uint32Array(cols * CELL_SIZE);\n    const cell = fillCellData || CellData.fromCharData([0, NULL_CELL_CHAR, NULL_CELL_WIDTH, NULL_CELL_CODE]);\n    for (let i = 0; i < cols; ++i) {\n      this.setCell(i, cell);\n    }\n    this.length = cols;\n  }\n\n  /**\n   * Get cell data CharData.\n   * @deprecated\n   */\n  public get(index: number): CharData {\n    const content = this._data[index * CELL_SIZE + Cell.CONTENT];\n    const cp = content & Content.CODEPOINT_MASK;\n    return [\n      this._data[index * CELL_SIZE + Cell.FG],\n      (content & Content.IS_COMBINED_MASK)\n        ? this._combined[index]\n        : (cp) ? stringFromCodePoint(cp) : '',\n      content >> Content.WIDTH_SHIFT,\n      (content & Content.IS_COMBINED_MASK)\n        ? this._combined[index].charCodeAt(this._combined[index].length - 1)\n        : cp\n    ];\n  }\n\n  /**\n   * Set cell data from CharData.\n   * @deprecated\n   */\n  public set(index: number, value: CharData): void {\n    this._data[index * CELL_SIZE + Cell.FG] = value[CHAR_DATA_ATTR_INDEX];\n    if (value[CHAR_DATA_CHAR_INDEX].length > 1) {\n      this._combined[index] = value[1];\n      this._data[index * CELL_SIZE + Cell.CONTENT] = index | Content.IS_COMBINED_MASK | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n    } else {\n      this._data[index * CELL_SIZE + Cell.CONTENT] = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n    }\n  }\n\n  /**\n   * primitive getters\n   * use these when only one value is needed, otherwise use `loadCell`\n   */\n  public getWidth(index: number): number {\n    return this._data[index * CELL_SIZE + Cell.CONTENT] >> Content.WIDTH_SHIFT;\n  }\n\n  /** Test whether content has width. */\n  public hasWidth(index: number): number {\n    return this._data[index * CELL_SIZE + Cell.CONTENT] & Content.WIDTH_MASK;\n  }\n\n  /** Get FG cell component. */\n  public getFg(index: number): number {\n    return this._data[index * CELL_SIZE + Cell.FG];\n  }\n\n  /** Get BG cell component. */\n  public getBg(index: number): number {\n    return this._data[index * CELL_SIZE + Cell.BG];\n  }\n\n  /**\n   * Test whether contains any chars.\n   * Basically an empty has no content, but other cells might differ in FG/BG\n   * from real empty cells.\n   */\n  public hasContent(index: number): number {\n    return this._data[index * CELL_SIZE + Cell.CONTENT] & Content.HAS_CONTENT_MASK;\n  }\n\n  /**\n   * Get codepoint of the cell.\n   * To be in line with `code` in CharData this either returns\n   * a single UTF32 codepoint or the last codepoint of a combined string.\n   */\n  public getCodePoint(index: number): number {\n    const content = this._data[index * CELL_SIZE + Cell.CONTENT];\n    if (content & Content.IS_COMBINED_MASK) {\n      return this._combined[index].charCodeAt(this._combined[index].length - 1);\n    }\n    return content & Content.CODEPOINT_MASK;\n  }\n\n  /** Test whether the cell contains a combined string. */\n  public isCombined(index: number): number {\n    return this._data[index * CELL_SIZE + Cell.CONTENT] & Content.IS_COMBINED_MASK;\n  }\n\n  /** Returns the string content of the cell. */\n  public getString(index: number): string {\n    const content = this._data[index * CELL_SIZE + Cell.CONTENT];\n    if (content & Content.IS_COMBINED_MASK) {\n      return this._combined[index];\n    }\n    if (content & Content.CODEPOINT_MASK) {\n      return stringFromCodePoint(content & Content.CODEPOINT_MASK);\n    }\n    // return empty string for empty cells\n    return '';\n  }\n\n  /** Get state of protected flag. */\n  public isProtected(index: number): number {\n    return this._data[index * CELL_SIZE + Cell.BG] & BgFlags.PROTECTED;\n  }\n\n  /**\n   * Load data at `index` into `cell`. This is used to access cells in a way that's more friendly\n   * to GC as it significantly reduced the amount of new objects/references needed.\n   */\n  public loadCell(index: number, cell: ICellData): ICellData {\n    $startIndex = index * CELL_SIZE;\n    cell.content = this._data[$startIndex + Cell.CONTENT];\n    cell.fg = this._data[$startIndex + Cell.FG];\n    cell.bg = this._data[$startIndex + Cell.BG];\n    if (cell.content & Content.IS_COMBINED_MASK) {\n      cell.combinedData = this._combined[index];\n    }\n    if (cell.bg & BgFlags.HAS_EXTENDED) {\n      cell.extended = this._extendedAttrs[index]!;\n    }\n    return cell;\n  }\n\n  /**\n   * Set data at `index` to `cell`.\n   */\n  public setCell(index: number, cell: ICellData): void {\n    if (cell.content & Content.IS_COMBINED_MASK) {\n      this._combined[index] = cell.combinedData;\n    }\n    if (cell.bg & BgFlags.HAS_EXTENDED) {\n      this._extendedAttrs[index] = cell.extended;\n    }\n    this._data[index * CELL_SIZE + Cell.CONTENT] = cell.content;\n    this._data[index * CELL_SIZE + Cell.FG] = cell.fg;\n    this._data[index * CELL_SIZE + Cell.BG] = cell.bg;\n  }\n\n  /**\n   * Set cell data from input handler.\n   * Since the input handler see the incoming chars as UTF32 codepoints,\n   * it gets an optimized access method.\n   */\n  public setCellFromCodepoint(index: number, codePoint: number, width: number, attrs: IAttributeData): void {\n    if (attrs.bg & BgFlags.HAS_EXTENDED) {\n      this._extendedAttrs[index] = attrs.extended;\n    }\n    this._data[index * CELL_SIZE + Cell.CONTENT] = codePoint | (width << Content.WIDTH_SHIFT);\n    this._data[index * CELL_SIZE + Cell.FG] = attrs.fg;\n    this._data[index * CELL_SIZE + Cell.BG] = attrs.bg;\n  }\n\n  /**\n   * Add a codepoint to a cell from input handler.\n   * During input stage combining chars with a width of 0 follow and stack\n   * onto a leading char. Since we already set the attrs\n   * by the previous `setDataFromCodePoint` call, we can omit it here.\n   */\n  public addCodepointToCell(index: number, codePoint: number, width: number): void {\n    let content = this._data[index * CELL_SIZE + Cell.CONTENT];\n    if (content & Content.IS_COMBINED_MASK) {\n      // we already have a combined string, simply add\n      this._combined[index] += stringFromCodePoint(codePoint);\n    } else {\n      if (content & Content.CODEPOINT_MASK) {\n        // normal case for combining chars:\n        //  - move current leading char + new one into combined string\n        //  - set combined flag\n        this._combined[index] = stringFromCodePoint(content & Content.CODEPOINT_MASK) + stringFromCodePoint(codePoint);\n        content &= ~Content.CODEPOINT_MASK; // set codepoint in buffer to 0\n        content |= Content.IS_COMBINED_MASK;\n      } else {\n        // should not happen - we actually have no data in the cell yet\n        // simply set the data in the cell buffer with a width of 1\n        content = codePoint | (1 << Content.WIDTH_SHIFT);\n      }\n    }\n    if (width) {\n      content &= ~Content.WIDTH_MASK;\n      content |= width << Content.WIDTH_SHIFT;\n    }\n    this._data[index * CELL_SIZE + Cell.CONTENT] = content;\n  }\n\n  public insertCells(pos: number, n: number, fillCellData: ICellData): void {\n    pos %= this.length;\n\n    // handle fullwidth at pos: reset cell one to the left if pos is second cell of a wide char\n    if (pos && this.getWidth(pos - 1) === 2) {\n      this.setCellFromCodepoint(pos - 1, 0, 1, fillCellData);\n    }\n\n    if (n < this.length - pos) {\n      const cell = new CellData();\n      for (let i = this.length - pos - n - 1; i >= 0; --i) {\n        this.setCell(pos + n + i, this.loadCell(pos + i, cell));\n      }\n      for (let i = 0; i < n; ++i) {\n        this.setCell(pos + i, fillCellData);\n      }\n    } else {\n      for (let i = pos; i < this.length; ++i) {\n        this.setCell(i, fillCellData);\n      }\n    }\n\n    // handle fullwidth at line end: reset last cell if it is first cell of a wide char\n    if (this.getWidth(this.length - 1) === 2) {\n      this.setCellFromCodepoint(this.length - 1, 0, 1, fillCellData);\n    }\n  }\n\n  public deleteCells(pos: number, n: number, fillCellData: ICellData): void {\n    pos %= this.length;\n    if (n < this.length - pos) {\n      const cell = new CellData();\n      for (let i = 0; i < this.length - pos - n; ++i) {\n        this.setCell(pos + i, this.loadCell(pos + n + i, cell));\n      }\n      for (let i = this.length - n; i < this.length; ++i) {\n        this.setCell(i, fillCellData);\n      }\n    } else {\n      for (let i = pos; i < this.length; ++i) {\n        this.setCell(i, fillCellData);\n      }\n    }\n\n    // handle fullwidth at pos:\n    // - reset pos-1 if wide char\n    // - reset pos if width==0 (previous second cell of a wide char)\n    if (pos && this.getWidth(pos - 1) === 2) {\n      this.setCellFromCodepoint(pos - 1, 0, 1, fillCellData);\n    }\n    if (this.getWidth(pos) === 0 && !this.hasContent(pos)) {\n      this.setCellFromCodepoint(pos, 0, 1, fillCellData);\n    }\n  }\n\n  public replaceCells(start: number, end: number, fillCellData: ICellData, respectProtect: boolean = false): void {\n    // full branching on respectProtect==true, hopefully getting fast JIT for standard case\n    if (respectProtect) {\n      if (start && this.getWidth(start - 1) === 2 && !this.isProtected(start - 1)) {\n        this.setCellFromCodepoint(start - 1, 0, 1, fillCellData);\n      }\n      if (end < this.length && this.getWidth(end - 1) === 2 && !this.isProtected(end)) {\n        this.setCellFromCodepoint(end, 0, 1, fillCellData);\n      }\n      while (start < end  && start < this.length) {\n        if (!this.isProtected(start)) {\n          this.setCell(start, fillCellData);\n        }\n        start++;\n      }\n      return;\n    }\n\n    // handle fullwidth at start: reset cell one to the left if start is second cell of a wide char\n    if (start && this.getWidth(start - 1) === 2) {\n      this.setCellFromCodepoint(start - 1, 0, 1, fillCellData);\n    }\n    // handle fullwidth at last cell + 1: reset to empty cell if it is second part of a wide char\n    if (end < this.length && this.getWidth(end - 1) === 2) {\n      this.setCellFromCodepoint(end, 0, 1, fillCellData);\n    }\n\n    while (start < end  && start < this.length) {\n      this.setCell(start++, fillCellData);\n    }\n  }\n\n  /**\n   * Resize BufferLine to `cols` filling excess cells with `fillCellData`.\n   * The underlying array buffer will not change if there is still enough space\n   * to hold the new buffer line data.\n   * Returns a boolean indicating, whether a `cleanupMemory` call would free\n   * excess memory (true after shrinking > CLEANUP_THRESHOLD).\n   */\n  public resize(cols: number, fillCellData: ICellData): boolean {\n    if (cols === this.length) {\n      return this._data.length * 4 * CLEANUP_THRESHOLD < this._data.buffer.byteLength;\n    }\n    const uint32Cells = cols * CELL_SIZE;\n    if (cols > this.length) {\n      if (this._data.buffer.byteLength >= uint32Cells * 4) {\n        // optimization: avoid alloc and data copy if buffer has enough room\n        this._data = new Uint32Array(this._data.buffer, 0, uint32Cells);\n      } else {\n        // slow path: new alloc and full data copy\n        const data = new Uint32Array(uint32Cells);\n        data.set(this._data);\n        this._data = data;\n      }\n      for (let i = this.length; i < cols; ++i) {\n        this.setCell(i, fillCellData);\n      }\n    } else {\n      // optimization: just shrink the view on existing buffer\n      this._data = this._data.subarray(0, uint32Cells);\n      // Remove any cut off combined data\n      const keys = Object.keys(this._combined);\n      for (let i = 0; i < keys.length; i++) {\n        const key = parseInt(keys[i], 10);\n        if (key >= cols) {\n          delete this._combined[key];\n        }\n      }\n      // remove any cut off extended attributes\n      const extKeys = Object.keys(this._extendedAttrs);\n      for (let i = 0; i < extKeys.length; i++) {\n        const key = parseInt(extKeys[i], 10);\n        if (key >= cols) {\n          delete this._extendedAttrs[key];\n        }\n      }\n    }\n    this.length = cols;\n    return uint32Cells * 4 * CLEANUP_THRESHOLD < this._data.buffer.byteLength;\n  }\n\n  /**\n   * Cleanup underlying array buffer.\n   * A cleanup will be triggered if the array buffer exceeds the actual used\n   * memory by a factor of CLEANUP_THRESHOLD.\n   * Returns 0 or 1 indicating whether a cleanup happened.\n   */\n  public cleanupMemory(): number {\n    if (this._data.length * 4 * CLEANUP_THRESHOLD < this._data.buffer.byteLength) {\n      const data = new Uint32Array(this._data.length);\n      data.set(this._data);\n      this._data = data;\n      return 1;\n    }\n    return 0;\n  }\n\n  /** fill a line with fillCharData */\n  public fill(fillCellData: ICellData, respectProtect: boolean = false): void {\n    // full branching on respectProtect==true, hopefully getting fast JIT for standard case\n    if (respectProtect) {\n      for (let i = 0; i < this.length; ++i) {\n        if (!this.isProtected(i)) {\n          this.setCell(i, fillCellData);\n        }\n      }\n      return;\n    }\n    this._combined = {};\n    this._extendedAttrs = {};\n    for (let i = 0; i < this.length; ++i) {\n      this.setCell(i, fillCellData);\n    }\n  }\n\n  /** alter to a full copy of line  */\n  public copyFrom(line: BufferLine): void {\n    if (this.length !== line.length) {\n      this._data = new Uint32Array(line._data);\n    } else {\n      // use high speed copy if lengths are equal\n      this._data.set(line._data);\n    }\n    this.length = line.length;\n    this._combined = {};\n    for (const el in line._combined) {\n      this._combined[el] = line._combined[el];\n    }\n    this._extendedAttrs = {};\n    for (const el in line._extendedAttrs) {\n      this._extendedAttrs[el] = line._extendedAttrs[el];\n    }\n    this.isWrapped = line.isWrapped;\n  }\n\n  /** create a new clone */\n  public clone(): IBufferLine {\n    const newLine = new BufferLine(0);\n    newLine._data = new Uint32Array(this._data);\n    newLine.length = this.length;\n    for (const el in this._combined) {\n      newLine._combined[el] = this._combined[el];\n    }\n    for (const el in this._extendedAttrs) {\n      newLine._extendedAttrs[el] = this._extendedAttrs[el];\n    }\n    newLine.isWrapped = this.isWrapped;\n    return newLine;\n  }\n\n  public getTrimmedLength(): number {\n    for (let i = this.length - 1; i >= 0; --i) {\n      if ((this._data[i * CELL_SIZE + Cell.CONTENT] & Content.HAS_CONTENT_MASK)) {\n        return i + (this._data[i * CELL_SIZE + Cell.CONTENT] >> Content.WIDTH_SHIFT);\n      }\n    }\n    return 0;\n  }\n\n  public getNoBgTrimmedLength(): number {\n    for (let i = this.length - 1; i >= 0; --i) {\n      if ((this._data[i * CELL_SIZE + Cell.CONTENT] & Content.HAS_CONTENT_MASK) || (this._data[i * CELL_SIZE + Cell.BG] & Attributes.CM_MASK)) {\n        return i + (this._data[i * CELL_SIZE + Cell.CONTENT] >> Content.WIDTH_SHIFT);\n      }\n    }\n    return 0;\n  }\n\n  public copyCellsFrom(src: BufferLine, srcCol: number, destCol: number, length: number, applyInReverse: boolean): void {\n    const srcData = src._data;\n    if (applyInReverse) {\n      for (let cell = length - 1; cell >= 0; cell--) {\n        for (let i = 0; i < CELL_SIZE; i++) {\n          this._data[(destCol + cell) * CELL_SIZE + i] = srcData[(srcCol + cell) * CELL_SIZE + i];\n        }\n        if (srcData[(srcCol + cell) * CELL_SIZE + Cell.BG] & BgFlags.HAS_EXTENDED) {\n          this._extendedAttrs[destCol + cell] = src._extendedAttrs[srcCol + cell];\n        }\n      }\n    } else {\n      for (let cell = 0; cell < length; cell++) {\n        for (let i = 0; i < CELL_SIZE; i++) {\n          this._data[(destCol + cell) * CELL_SIZE + i] = srcData[(srcCol + cell) * CELL_SIZE + i];\n        }\n        if (srcData[(srcCol + cell) * CELL_SIZE + Cell.BG] & BgFlags.HAS_EXTENDED) {\n          this._extendedAttrs[destCol + cell] = src._extendedAttrs[srcCol + cell];\n        }\n      }\n    }\n\n    // Move any combined data over as needed, FIXME: repeat for extended attrs\n    const srcCombinedKeys = Object.keys(src._combined);\n    for (let i = 0; i < srcCombinedKeys.length; i++) {\n      const key = parseInt(srcCombinedKeys[i], 10);\n      if (key >= srcCol) {\n        this._combined[key - srcCol + destCol] = src._combined[key];\n      }\n    }\n  }\n\n  /**\n   * Translates the buffer line to a string.\n   *\n   * @param trimRight Whether to trim any empty cells on the right.\n   * @param startCol The column to start the string (0-based inclusive).\n   * @param endCol The column to end the string (0-based exclusive).\n   * @param outColumns if specified, this array will be filled with column numbers such that\n   * `returnedString[i]` is displayed at `outColumns[i]` column. `outColumns[returnedString.length]`\n   * is where the character following `returnedString` will be displayed.\n   *\n   * When a single cell is translated to multiple UTF-16 code units (e.g. surrogate pair) in the\n   * returned string, the corresponding entries in `outColumns` will have the same column number.\n   */\n  public translateToString(trimRight?: boolean, startCol?: number, endCol?: number, outColumns?: number[]): string {\n    startCol = startCol ?? 0;\n    endCol = endCol ?? this.length;\n    if (trimRight) {\n      endCol = Math.min(endCol, this.getTrimmedLength());\n    }\n    if (outColumns) {\n      outColumns.length = 0;\n    }\n    let result = '';\n    while (startCol < endCol) {\n      const content = this._data[startCol * CELL_SIZE + Cell.CONTENT];\n      const cp = content & Content.CODEPOINT_MASK;\n      const chars = (content & Content.IS_COMBINED_MASK) ? this._combined[startCol] : (cp) ? stringFromCodePoint(cp) : WHITESPACE_CELL_CHAR;\n      result += chars;\n      if (outColumns) {\n        for (let i = 0; i < chars.length; ++i) {\n          outColumns.push(startCol);\n        }\n      }\n      startCol += (content >> Content.WIDTH_SHIFT) || 1; // always advance by at least 1\n    }\n    if (outColumns) {\n      outColumns.push(startCol);\n    }\n    return result;\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { BufferLine } from 'common/buffer/BufferLine';\nimport { CircularList } from 'common/CircularList';\nimport { IBufferLine, ICellData } from 'common/Types';\n\nexport interface INewLayoutResult {\n  layout: number[];\n  countRemoved: number;\n}\n\n/**\n * Evaluates and returns indexes to be removed after a reflow larger occurs. Lines will be removed\n * when a wrapped line unwraps.\n * @param lines The buffer lines.\n * @param oldCols The columns before resize\n * @param newCols The columns after resize.\n * @param bufferAbsoluteY The absolute y position of the cursor (baseY + cursorY).\n * @param nullCell The cell data to use when filling in empty cells.\n * @param reflowCursorLine Whether to reflow the line containing the cursor.\n */\nexport function reflowLargerGetLinesToRemove(lines: CircularList<IBufferLine>, oldCols: number, newCols: number, bufferAbsoluteY: number, nullCell: ICellData, reflowCursorLine: boolean): number[] {\n  // Gather all BufferLines that need to be removed from the Buffer here so that they can be\n  // batched up and only committed once\n  const toRemove: number[] = [];\n\n  for (let y = 0; y < lines.length - 1; y++) {\n    // Check if this row is wrapped\n    let i = y;\n    let nextLine = lines.get(++i) as BufferLine;\n    if (!nextLine.isWrapped) {\n      continue;\n    }\n\n    // Check how many lines it's wrapped for\n    const wrappedLines: BufferLine[] = [lines.get(y) as BufferLine];\n    while (i < lines.length && nextLine.isWrapped) {\n      wrappedLines.push(nextLine);\n      nextLine = lines.get(++i) as BufferLine;\n    }\n\n    if (!reflowCursorLine) {\n      // If these lines contain the cursor don't touch them, the program will handle fixing up\n      // wrapped lines with the cursor\n      if (bufferAbsoluteY >= y && bufferAbsoluteY < i) {\n        y += wrappedLines.length - 1;\n        continue;\n      }\n    }\n\n    // Copy buffer data to new locations\n    let destLineIndex = 0;\n    let destCol = getWrappedLineTrimmedLength(wrappedLines, destLineIndex, oldCols);\n    let srcLineIndex = 1;\n    let srcCol = 0;\n    while (srcLineIndex < wrappedLines.length) {\n      const srcTrimmedTineLength = getWrappedLineTrimmedLength(wrappedLines, srcLineIndex, oldCols);\n      const srcRemainingCells = srcTrimmedTineLength - srcCol;\n      const destRemainingCells = newCols - destCol;\n      const cellsToCopy = Math.min(srcRemainingCells, destRemainingCells);\n\n      wrappedLines[destLineIndex].copyCellsFrom(wrappedLines[srcLineIndex], srcCol, destCol, cellsToCopy, false);\n\n      destCol += cellsToCopy;\n      if (destCol === newCols) {\n        destLineIndex++;\n        destCol = 0;\n      }\n      srcCol += cellsToCopy;\n      if (srcCol === srcTrimmedTineLength) {\n        srcLineIndex++;\n        srcCol = 0;\n      }\n\n      // Make sure the last cell isn't wide, if it is copy it to the current dest\n      if (destCol === 0 && destLineIndex !== 0) {\n        if (wrappedLines[destLineIndex - 1].getWidth(newCols - 1) === 2) {\n          wrappedLines[destLineIndex].copyCellsFrom(wrappedLines[destLineIndex - 1], newCols - 1, destCol++, 1, false);\n          // Null out the end of the last row\n          wrappedLines[destLineIndex - 1].setCell(newCols - 1, nullCell);\n        }\n      }\n    }\n\n    // Clear out remaining cells or fragments could remain;\n    wrappedLines[destLineIndex].replaceCells(destCol, newCols, nullCell);\n\n    // Work backwards and remove any rows at the end that only contain null cells\n    let countToRemove = 0;\n    for (let i = wrappedLines.length - 1; i > 0; i--) {\n      if (i > destLineIndex || wrappedLines[i].getTrimmedLength() === 0) {\n        countToRemove++;\n      } else {\n        break;\n      }\n    }\n\n    if (countToRemove > 0) {\n      toRemove.push(y + wrappedLines.length - countToRemove); // index\n      toRemove.push(countToRemove);\n    }\n\n    y += wrappedLines.length - 1;\n  }\n  return toRemove;\n}\n\n/**\n * Creates and return the new layout for lines given an array of indexes to be removed.\n * @param lines The buffer lines.\n * @param toRemove The indexes to remove.\n */\nexport function reflowLargerCreateNewLayout(lines: CircularList<IBufferLine>, toRemove: number[]): INewLayoutResult {\n  const layout: number[] = [];\n  // First iterate through the list and get the actual indexes to use for rows\n  let nextToRemoveIndex = 0;\n  let nextToRemoveStart = toRemove[nextToRemoveIndex];\n  let countRemovedSoFar = 0;\n  for (let i = 0; i < lines.length; i++) {\n    if (nextToRemoveStart === i) {\n      const countToRemove = toRemove[++nextToRemoveIndex];\n\n      // Tell markers that there was a deletion\n      lines.onDeleteEmitter.fire({\n        index: i - countRemovedSoFar,\n        amount: countToRemove\n      });\n\n      i += countToRemove - 1;\n      countRemovedSoFar += countToRemove;\n      nextToRemoveStart = toRemove[++nextToRemoveIndex];\n    } else {\n      layout.push(i);\n    }\n  }\n  return {\n    layout,\n    countRemoved: countRemovedSoFar\n  };\n}\n\n/**\n * Applies a new layout to the buffer. This essentially does the same as many splice calls but it's\n * done all at once in a single iteration through the list since splice is very expensive.\n * @param lines The buffer lines.\n * @param newLayout The new layout to apply.\n */\nexport function reflowLargerApplyNewLayout(lines: CircularList<IBufferLine>, newLayout: number[]): void {\n  // Record original lines so they don't get overridden when we rearrange the list\n  const newLayoutLines: BufferLine[] = [];\n  for (let i = 0; i < newLayout.length; i++) {\n    newLayoutLines.push(lines.get(newLayout[i]) as BufferLine);\n  }\n\n  // Rearrange the list\n  for (let i = 0; i < newLayoutLines.length; i++) {\n    lines.set(i, newLayoutLines[i]);\n  }\n  lines.length = newLayout.length;\n}\n\n/**\n * Gets the new line lengths for a given wrapped line. The purpose of this function it to pre-\n * compute the wrapping points since wide characters may need to be wrapped onto the following line.\n * This function will return an array of numbers of where each line wraps to, the resulting array\n * will only contain the values `newCols` (when the line does not end with a wide character) and\n * `newCols - 1` (when the line does end with a wide character), except for the last value which\n * will contain the remaining items to fill the line.\n *\n * Calling this with a `newCols` value of `1` will lock up.\n *\n * @param wrappedLines The wrapped lines to evaluate.\n * @param oldCols The columns before resize.\n * @param newCols The columns after resize.\n */\nexport function reflowSmallerGetNewLineLengths(wrappedLines: BufferLine[], oldCols: number, newCols: number): number[] {\n  const newLineLengths: number[] = [];\n  const cellsNeeded = wrappedLines.map((l, i) => getWrappedLineTrimmedLength(wrappedLines, i, oldCols)).reduce((p, c) => p + c);\n\n  // Use srcCol and srcLine to find the new wrapping point, use that to get the cellsAvailable and\n  // linesNeeded\n  let srcCol = 0;\n  let srcLine = 0;\n  let cellsAvailable = 0;\n  while (cellsAvailable < cellsNeeded) {\n    if (cellsNeeded - cellsAvailable < newCols) {\n      // Add the final line and exit the loop\n      newLineLengths.push(cellsNeeded - cellsAvailable);\n      break;\n    }\n    srcCol += newCols;\n    const oldTrimmedLength = getWrappedLineTrimmedLength(wrappedLines, srcLine, oldCols);\n    if (srcCol > oldTrimmedLength) {\n      srcCol -= oldTrimmedLength;\n      srcLine++;\n    }\n    const endsWithWide = wrappedLines[srcLine].getWidth(srcCol - 1) === 2;\n    if (endsWithWide) {\n      srcCol--;\n    }\n    const lineLength = endsWithWide ? newCols - 1 : newCols;\n    newLineLengths.push(lineLength);\n    cellsAvailable += lineLength;\n  }\n\n  return newLineLengths;\n}\n\nexport function getWrappedLineTrimmedLength(lines: BufferLine[], i: number, cols: number): number {\n  // If this is the last row in the wrapped line, get the actual trimmed length\n  if (i === lines.length - 1) {\n    return lines[i].getTrimmedLength();\n  }\n  // Detect whether the following line starts with a wide character and the end of the current line\n  // is null, if so then we can be pretty sure the null character should be excluded from the line\n  // length]\n  const endsInNull = !(lines[i].hasContent(cols - 1)) && lines[i].getWidth(cols - 1) === 1;\n  const followingLineStartsWithWide = lines[i + 1].getWidth(0) === 2;\n  if (endsInNull && followingLineStartsWithWide) {\n    return cols - 1;\n  }\n  return cols;\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport { IAttributeData } from 'common/Types';\nimport { Buffer } from 'common/buffer/Buffer';\nimport { IBuffer, IBufferSet } from 'common/buffer/Types';\nimport { IBufferService, IOptionsService } from 'common/services/Services';\nimport { Emitter } from 'vs/base/common/event';\n\n/**\n * The BufferSet represents the set of two buffers used by xterm terminals (normal and alt) and\n * provides also utilities for working with them.\n */\nexport class BufferSet extends Disposable implements IBufferSet {\n  private _normal!: Buffer;\n  private _alt!: Buffer;\n  private _activeBuffer!: Buffer;\n\n  private readonly _onBufferActivate = this._register(new Emitter<{ activeBuffer: IBuffer, inactiveBuffer: IBuffer }>());\n  public readonly onBufferActivate = this._onBufferActivate.event;\n\n  /**\n   * Create a new BufferSet for the given terminal.\n   */\n  constructor(\n    private readonly _optionsService: IOptionsService,\n    private readonly _bufferService: IBufferService\n  ) {\n    super();\n    this.reset();\n    this._register(this._optionsService.onSpecificOptionChange('scrollback', () => this.resize(this._bufferService.cols, this._bufferService.rows)));\n    this._register(this._optionsService.onSpecificOptionChange('tabStopWidth', () => this.setupTabStops()));\n  }\n\n  public reset(): void {\n    this._normal = new Buffer(true, this._optionsService, this._bufferService);\n    this._normal.fillViewportRows();\n\n    // The alt buffer should never have scrollback.\n    // See http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-The-Alternate-Screen-Buffer\n    this._alt = new Buffer(false, this._optionsService, this._bufferService);\n    this._activeBuffer = this._normal;\n    this._onBufferActivate.fire({\n      activeBuffer: this._normal,\n      inactiveBuffer: this._alt\n    });\n\n    this.setupTabStops();\n  }\n\n  /**\n   * Returns the alt Buffer of the BufferSet\n   */\n  public get alt(): Buffer {\n    return this._alt;\n  }\n\n  /**\n   * Returns the currently active Buffer of the BufferSet\n   */\n  public get active(): Buffer {\n    return this._activeBuffer;\n  }\n\n  /**\n   * Returns the normal Buffer of the BufferSet\n   */\n  public get normal(): Buffer {\n    return this._normal;\n  }\n\n  /**\n   * Sets the normal Buffer of the BufferSet as its currently active Buffer\n   */\n  public activateNormalBuffer(): void {\n    if (this._activeBuffer === this._normal) {\n      return;\n    }\n    this._normal.x = this._alt.x;\n    this._normal.y = this._alt.y;\n    // The alt buffer should always be cleared when we switch to the normal\n    // buffer. This frees up memory since the alt buffer should always be new\n    // when activated.\n    this._alt.clearAllMarkers();\n    this._alt.clear();\n    this._activeBuffer = this._normal;\n    this._onBufferActivate.fire({\n      activeBuffer: this._normal,\n      inactiveBuffer: this._alt\n    });\n  }\n\n  /**\n   * Sets the alt Buffer of the BufferSet as its currently active Buffer\n   */\n  public activateAltBuffer(fillAttr?: IAttributeData): void {\n    if (this._activeBuffer === this._alt) {\n      return;\n    }\n    // Since the alt buffer is always cleared when the normal buffer is\n    // activated, we want to fill it when switching to it.\n    this._alt.fillViewportRows(fillAttr);\n    this._alt.x = this._normal.x;\n    this._alt.y = this._normal.y;\n    this._activeBuffer = this._alt;\n    this._onBufferActivate.fire({\n      activeBuffer: this._alt,\n      inactiveBuffer: this._normal\n    });\n  }\n\n  /**\n   * Resizes both normal and alt buffers, adjusting their data accordingly.\n   * @param newCols The new number of columns.\n   * @param newRows The new number of rows.\n   */\n  public resize(newCols: number, newRows: number): void {\n    this._normal.resize(newCols, newRows);\n    this._alt.resize(newCols, newRows);\n    this.setupTabStops(newCols);\n  }\n\n  /**\n   * Setup the tab stops.\n   * @param i The index to start setting up tab stops from.\n   */\n  public setupTabStops(i?: number): void {\n    this._normal.setupTabStops(i);\n    this._alt.setupTabStops(i);\n  }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, ICellData, IExtendedAttrs } from 'common/Types';\nimport { stringFromCodePoint } from 'common/input/TextDecoder';\nimport { CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX, CHAR_DATA_ATTR_INDEX, Content } from 'common/buffer/Constants';\nimport { AttributeData, ExtendedAttrs } from 'common/buffer/AttributeData';\n\n/**\n * CellData - represents a single Cell in the terminal buffer.\n */\nexport class CellData extends AttributeData implements ICellData {\n  /** Helper to create CellData from CharData. */\n  public static fromCharData(value: CharData): CellData {\n    const obj = new CellData();\n    obj.setFromCharData(value);\n    return obj;\n  }\n  /** Primitives from terminal buffer. */\n  public content = 0;\n  public fg = 0;\n  public bg = 0;\n  public extended: IExtendedAttrs = new ExtendedAttrs();\n  public combinedData = '';\n  /** Whether cell contains a combined string. */\n  public isCombined(): number {\n    return this.content & Content.IS_COMBINED_MASK;\n  }\n  /** Width of the cell. */\n  public getWidth(): number {\n    return this.content >> Content.WIDTH_SHIFT;\n  }\n  /** JS string of the content. */\n  public getChars(): string {\n    if (this.content & Content.IS_COMBINED_MASK) {\n      return this.combinedData;\n    }\n    if (this.content & Content.CODEPOINT_MASK) {\n      return stringFromCodePoint(this.content & Content.CODEPOINT_MASK);\n    }\n    return '';\n  }\n  /**\n   * Codepoint of cell\n   * Note this returns the UTF32 codepoint of single chars,\n   * if content is a combined string it returns the codepoint\n   * of the last char in string to be in line with code in CharData.\n   */\n  public getCode(): number {\n    return (this.isCombined())\n      ? this.combinedData.charCodeAt(this.combinedData.length - 1)\n      : this.content & Content.CODEPOINT_MASK;\n  }\n  /** Set data from CharData */\n  public setFromCharData(value: CharData): void {\n    this.fg = value[CHAR_DATA_ATTR_INDEX];\n    this.bg = 0;\n    let combined = false;\n    // surrogates and combined strings need special treatment\n    if (value[CHAR_DATA_CHAR_INDEX].length > 2) {\n      combined = true;\n    }\n    else if (value[CHAR_DATA_CHAR_INDEX].length === 2) {\n      const code = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0);\n      // if the 2-char string is a surrogate create single codepoint\n      // everything else is combined\n      if (0xD800 <= code && code <= 0xDBFF) {\n        const second = value[CHAR_DATA_CHAR_INDEX].charCodeAt(1);\n        if (0xDC00 <= second && second <= 0xDFFF) {\n          this.content = ((code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n        }\n        else {\n          combined = true;\n        }\n      }\n      else {\n        combined = true;\n      }\n    }\n    else {\n      this.content = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n    }\n    if (combined) {\n      this.combinedData = value[CHAR_DATA_CHAR_INDEX];\n      this.content = Content.IS_COMBINED_MASK | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n    }\n  }\n  /** Get data as CharData. */\n  public getAsCharData(): CharData {\n    return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport const DEFAULT_COLOR = 0;\nexport const DEFAULT_ATTR = (0 << 18) | (DEFAULT_COLOR << 9) | (256 << 0);\nexport const DEFAULT_EXT = 0;\n\nexport const CHAR_DATA_ATTR_INDEX = 0;\nexport const CHAR_DATA_CHAR_INDEX = 1;\nexport const CHAR_DATA_WIDTH_INDEX = 2;\nexport const CHAR_DATA_CODE_INDEX = 3;\n\n/**\n * Null cell - a real empty cell (containing nothing).\n * Note that code should always be 0 for a null cell as\n * several test condition of the buffer line rely on this.\n */\nexport const NULL_CELL_CHAR = '';\nexport const NULL_CELL_WIDTH = 1;\nexport const NULL_CELL_CODE = 0;\n\n/**\n * Whitespace cell.\n * This is meant as a replacement for empty cells when needed\n * during rendering lines to preserve correct aligment.\n */\nexport const WHITESPACE_CELL_CHAR = ' ';\nexport const WHITESPACE_CELL_WIDTH = 1;\nexport const WHITESPACE_CELL_CODE = 32;\n\n/**\n * Bitmasks for accessing data in `content`.\n */\nexport const enum Content {\n  /**\n   * bit 1..21    codepoint, max allowed in UTF32 is 0x10FFFF (21 bits taken)\n   *              read:   `codepoint = content & Content.codepointMask;`\n   *              write:  `content |= codepoint & Content.codepointMask;`\n   *                      shortcut if precondition `codepoint <= 0x10FFFF` is met:\n   *                      `content |= codepoint;`\n   */\n  CODEPOINT_MASK = 0x1FFFFF,\n\n  /**\n   * bit 22       flag indication whether a cell contains combined content\n   *              read:   `isCombined = content & Content.isCombined;`\n   *              set:    `content |= Content.isCombined;`\n   *              clear:  `content &= ~Content.isCombined;`\n   */\n  IS_COMBINED_MASK = 0x200000,  // 1 << 21\n\n  /**\n   * bit 1..22    mask to check whether a cell contains any string data\n   *              we need to check for codepoint and isCombined bits to see\n   *              whether a cell contains anything\n   *              read:   `isEmpty = !(content & Content.hasContent)`\n   */\n  HAS_CONTENT_MASK = 0x3FFFFF,\n\n  /**\n   * bit 23..24   wcwidth value of cell, takes 2 bits (ranges from 0..2)\n   *              read:   `width = (content & Content.widthMask) >> Content.widthShift;`\n   *                      `hasWidth = content & Content.widthMask;`\n   *                      as long as wcwidth is highest value in `content`:\n   *                      `width = content >> Content.widthShift;`\n   *              write:  `content |= (width << Content.widthShift) & Content.widthMask;`\n   *                      shortcut if precondition `0 <= width <= 3` is met:\n   *                      `content |= width << Content.widthShift;`\n   */\n  WIDTH_MASK = 0xC00000,   // 3 << 22\n  WIDTH_SHIFT = 22\n}\n\nexport const enum Attributes {\n  /**\n   * bit 1..8     blue in RGB, color in P256 and P16\n   */\n  BLUE_MASK = 0xFF,\n  BLUE_SHIFT = 0,\n  PCOLOR_MASK = 0xFF,\n  PCOLOR_SHIFT = 0,\n\n  /**\n   * bit 9..16    green in RGB\n   */\n  GREEN_MASK = 0xFF00,\n  GREEN_SHIFT = 8,\n\n  /**\n   * bit 17..24   red in RGB\n   */\n  RED_MASK = 0xFF0000,\n  RED_SHIFT = 16,\n\n  /**\n   * bit 25..26   color mode: DEFAULT (0) | P16 (1) | P256 (2) | RGB (3)\n   */\n  CM_MASK = 0x3000000,\n  CM_DEFAULT = 0,\n  CM_P16 = 0x1000000,\n  CM_P256 = 0x2000000,\n  CM_RGB = 0x3000000,\n\n  /**\n   * bit 1..24  RGB room\n   */\n  RGB_MASK = 0xFFFFFF\n}\n\nexport const enum FgFlags {\n  /**\n   * bit 27..32\n   */\n  INVERSE = 0x4000000,\n  BOLD = 0x8000000,\n  UNDERLINE = 0x10000000,\n  BLINK = 0x20000000,\n  INVISIBLE = 0x40000000,\n  STRIKETHROUGH = 0x80000000,\n}\n\nexport const enum BgFlags {\n  /**\n   * bit 27..32 (upper 2 unused)\n   */\n  ITALIC = 0x4000000,\n  DIM = 0x8000000,\n  HAS_EXTENDED = 0x10000000,\n  PROTECTED = 0x20000000,\n  OVERLINE = 0x40000000\n}\n\nexport const enum ExtFlags {\n  /**\n   * bit 27..29\n   */\n  UNDERLINE_STYLE = 0x1C000000,\n\n  /**\n   * bit 30..32\n   *\n   * An optional variant for the glyph, this can be used for example to offset underlines by a\n   * number of pixels to create a perfect pattern.\n   */\n  VARIANT_OFFSET = 0xE0000000\n}\n\nexport const enum UnderlineStyle {\n  NONE = 0,\n  SINGLE = 1,\n  DOUBLE = 2,\n  CURLY = 3,\n  DOTTED = 4,\n  DASHED = 5\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable, IMarker } from 'common/Types';\nimport { Emitter } from 'vs/base/common/event';\nimport { dispose } from 'vs/base/common/lifecycle';\n\nexport class Marker implements IMarker {\n  private static _nextId = 1;\n\n  public isDisposed: boolean = false;\n  private readonly _disposables: IDisposable[] = [];\n\n  private readonly _id: number = Marker._nextId++;\n  public get id(): number { return this._id; }\n\n  private readonly _onDispose = this.register(new Emitter<void>());\n  public readonly onDispose = this._onDispose.event;\n\n  constructor(\n    public line: number\n  ) {\n  }\n\n  public dispose(): void {\n    if (this.isDisposed) {\n      return;\n    }\n    this.isDisposed = true;\n    this.line = -1;\n    // Emit before super.dispose such that dispose listeners get a change to react\n    this._onDispose.fire();\n    dispose(this._disposables);\n    this._disposables.length = 0;\n  }\n\n  public register<T extends IDisposable>(disposable: T): T {\n    this._disposables.push(disposable);\n    return disposable;\n  }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICharset } from 'common/Types';\n\n/**\n * The character sets supported by the terminal. These enable several languages\n * to be represented within the terminal with only 8-bit encoding. See ISO 2022\n * for a discussion on character sets. Only VT100 character sets are supported.\n */\nexport const CHARSETS: { [key: string]: ICharset | undefined } = {};\n\n/**\n * The default character set, US.\n */\nexport const DEFAULT_CHARSET: ICharset | undefined = CHARSETS['B'];\n\n/**\n * DEC Special Character and Line Drawing Set.\n * Reference: http://vt100.net/docs/vt102-ug/table5-13.html\n * A lot of curses apps use this if they see TERM=xterm.\n * testing: echo -e '\\e(0a\\e(B'\n * The xterm output sometimes seems to conflict with the\n * reference above. xterm seems in line with the reference\n * when running vttest however.\n * The table below now uses xterm's output from vttest.\n */\nCHARSETS['0'] = {\n  '`': '\\u25c6', // '◆'\n  'a': '\\u2592', // '▒'\n  'b': '\\u2409', // '␉' (HT)\n  'c': '\\u240c', // '␌' (FF)\n  'd': '\\u240d', // '␍' (CR)\n  'e': '\\u240a', // '␊' (LF)\n  'f': '\\u00b0', // '°'\n  'g': '\\u00b1', // '±'\n  'h': '\\u2424', // '␤' (NL)\n  'i': '\\u240b', // '␋' (VT)\n  'j': '\\u2518', // '┘'\n  'k': '\\u2510', // '┐'\n  'l': '\\u250c', // '┌'\n  'm': '\\u2514', // '└'\n  'n': '\\u253c', // '┼'\n  'o': '\\u23ba', // '⎺'\n  'p': '\\u23bb', // '⎻'\n  'q': '\\u2500', // '─'\n  'r': '\\u23bc', // '⎼'\n  's': '\\u23bd', // '⎽'\n  't': '\\u251c', // '├'\n  'u': '\\u2524', // '┤'\n  'v': '\\u2534', // '┴'\n  'w': '\\u252c', // '┬'\n  'x': '\\u2502', // '│'\n  'y': '\\u2264', // '≤'\n  'z': '\\u2265', // '≥'\n  '{': '\\u03c0', // 'π'\n  '|': '\\u2260', // '≠'\n  '}': '\\u00a3', // '£'\n  '~': '\\u00b7'  // '·'\n};\n\n/**\n * British character set\n * ESC (A\n * Reference: http://vt100.net/docs/vt220-rm/table2-5.html\n */\nCHARSETS['A'] = {\n  '#': '£'\n};\n\n/**\n * United States character set\n * ESC (B\n */\nCHARSETS['B'] = undefined;\n\n/**\n * Dutch character set\n * ESC (4\n * Reference: http://vt100.net/docs/vt220-rm/table2-6.html\n */\nCHARSETS['4'] = {\n  '#': '£',\n  '@': '¾',\n  '[': 'ij',\n  '\\\\': '½',\n  ']': '|',\n  '{': '¨',\n  '|': 'f',\n  '}': '¼',\n  '~': '´'\n};\n\n/**\n * Finnish character set\n * ESC (C or ESC (5\n * Reference: http://vt100.net/docs/vt220-rm/table2-7.html\n */\nCHARSETS['C'] =\nCHARSETS['5'] = {\n  '[': 'Ä',\n  '\\\\': 'Ö',\n  ']': 'Å',\n  '^': 'Ü',\n  '`': 'é',\n  '{': 'ä',\n  '|': 'ö',\n  '}': 'å',\n  '~': 'ü'\n};\n\n/**\n * French character set\n * ESC (R\n * Reference: http://vt100.net/docs/vt220-rm/table2-8.html\n */\nCHARSETS['R'] = {\n  '#': '£',\n  '@': 'à',\n  '[': '°',\n  '\\\\': 'ç',\n  ']': '§',\n  '{': 'é',\n  '|': 'ù',\n  '}': 'è',\n  '~': '¨'\n};\n\n/**\n * French Canadian character set\n * ESC (Q\n * Reference: http://vt100.net/docs/vt220-rm/table2-9.html\n */\nCHARSETS['Q'] = {\n  '@': 'à',\n  '[': 'â',\n  '\\\\': 'ç',\n  ']': 'ê',\n  '^': 'î',\n  '`': 'ô',\n  '{': 'é',\n  '|': 'ù',\n  '}': 'è',\n  '~': 'û'\n};\n\n/**\n * German character set\n * ESC (K\n * Reference: http://vt100.net/docs/vt220-rm/table2-10.html\n */\nCHARSETS['K'] = {\n  '@': '§',\n  '[': 'Ä',\n  '\\\\': 'Ö',\n  ']': 'Ü',\n  '{': 'ä',\n  '|': 'ö',\n  '}': 'ü',\n  '~': 'ß'\n};\n\n/**\n * Italian character set\n * ESC (Y\n * Reference: http://vt100.net/docs/vt220-rm/table2-11.html\n */\nCHARSETS['Y'] = {\n  '#': '£',\n  '@': '§',\n  '[': '°',\n  '\\\\': 'ç',\n  ']': 'é',\n  '`': 'ù',\n  '{': 'à',\n  '|': 'ò',\n  '}': 'è',\n  '~': 'ì'\n};\n\n/**\n * Norwegian/Danish character set\n * ESC (E or ESC (6\n * Reference: http://vt100.net/docs/vt220-rm/table2-12.html\n */\nCHARSETS['E'] =\nCHARSETS['6'] = {\n  '@': 'Ä',\n  '[': 'Æ',\n  '\\\\': 'Ø',\n  ']': 'Å',\n  '^': 'Ü',\n  '`': 'ä',\n  '{': 'æ',\n  '|': 'ø',\n  '}': 'å',\n  '~': 'ü'\n};\n\n/**\n * Spanish character set\n * ESC (Z\n * Reference: http://vt100.net/docs/vt220-rm/table2-13.html\n */\nCHARSETS['Z'] = {\n  '#': '£',\n  '@': '§',\n  '[': '¡',\n  '\\\\': 'Ñ',\n  ']': '¿',\n  '{': '°',\n  '|': 'ñ',\n  '}': 'ç'\n};\n\n/**\n * Swedish character set\n * ESC (H or ESC (7\n * Reference: http://vt100.net/docs/vt220-rm/table2-14.html\n */\nCHARSETS['H'] =\nCHARSETS['7'] = {\n  '@': 'É',\n  '[': 'Ä',\n  '\\\\': 'Ö',\n  ']': 'Å',\n  '^': 'Ü',\n  '`': 'é',\n  '{': 'ä',\n  '|': 'ö',\n  '}': 'å',\n  '~': 'ü'\n};\n\n/**\n * Swiss character set\n * ESC (=\n * Reference: http://vt100.net/docs/vt220-rm/table2-15.html\n */\nCHARSETS['='] = {\n  '#': 'ù',\n  '@': 'à',\n  '[': 'é',\n  '\\\\': 'ç',\n  ']': 'ê',\n  '^': 'î',\n  // eslint-disable-next-line @typescript-eslint/naming-convention\n  '_': 'è',\n  '`': 'ô',\n  '{': 'ä',\n  '|': 'ö',\n  '}': 'ü',\n  '~': 'û'\n};\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * C0 control codes\n * See = https://en.wikipedia.org/wiki/C0_and_C1_control_codes\n */\nexport namespace C0 {\n  /** Null (Caret = ^@, C = \\0) */\n  export const NUL = '\\x00';\n  /** Start of Heading (Caret = ^A) */\n  export const SOH = '\\x01';\n  /** Start of Text (Caret = ^B) */\n  export const STX = '\\x02';\n  /** End of Text (Caret = ^C) */\n  export const ETX = '\\x03';\n  /** End of Transmission (Caret = ^D) */\n  export const EOT = '\\x04';\n  /** Enquiry (Caret = ^E) */\n  export const ENQ = '\\x05';\n  /** Acknowledge (Caret = ^F) */\n  export const ACK = '\\x06';\n  /** Bell (Caret = ^G, C = \\a) */\n  export const BEL = '\\x07';\n  /** Backspace (Caret = ^H, C = \\b) */\n  export const BS  = '\\x08';\n  /** Character Tabulation, Horizontal Tabulation (Caret = ^I, C = \\t) */\n  export const HT  = '\\x09';\n  /** Line Feed (Caret = ^J, C = \\n) */\n  export const LF  = '\\x0a';\n  /** Line Tabulation, Vertical Tabulation (Caret = ^K, C = \\v) */\n  export const VT  = '\\x0b';\n  /** Form Feed (Caret = ^L, C = \\f) */\n  export const FF  = '\\x0c';\n  /** Carriage Return (Caret = ^M, C = \\r) */\n  export const CR  = '\\x0d';\n  /** Shift Out (Caret = ^N) */\n  export const SO  = '\\x0e';\n  /** Shift In (Caret = ^O) */\n  export const SI  = '\\x0f';\n  /** Data Link Escape (Caret = ^P) */\n  export const DLE = '\\x10';\n  /** Device Control One (XON) (Caret = ^Q) */\n  export const DC1 = '\\x11';\n  /** Device Control Two (Caret = ^R) */\n  export const DC2 = '\\x12';\n  /** Device Control Three (XOFF) (Caret = ^S) */\n  export const DC3 = '\\x13';\n  /** Device Control Four (Caret = ^T) */\n  export const DC4 = '\\x14';\n  /** Negative Acknowledge (Caret = ^U) */\n  export const NAK = '\\x15';\n  /** Synchronous Idle (Caret = ^V) */\n  export const SYN = '\\x16';\n  /** End of Transmission Block (Caret = ^W) */\n  export const ETB = '\\x17';\n  /** Cancel (Caret = ^X) */\n  export const CAN = '\\x18';\n  /** End of Medium (Caret = ^Y) */\n  export const EM  = '\\x19';\n  /** Substitute (Caret = ^Z) */\n  export const SUB = '\\x1a';\n  /** Escape (Caret = ^[, C = \\e) */\n  export const ESC = '\\x1b';\n  /** File Separator (Caret = ^\\) */\n  export const FS  = '\\x1c';\n  /** Group Separator (Caret = ^]) */\n  export const GS  = '\\x1d';\n  /** Record Separator (Caret = ^^) */\n  export const RS  = '\\x1e';\n  /** Unit Separator (Caret = ^_) */\n  export const US  = '\\x1f';\n  /** Space */\n  export const SP  = '\\x20';\n  /** Delete (Caret = ^?) */\n  export const DEL = '\\x7f';\n}\n\n/**\n * C1 control codes\n * See = https://en.wikipedia.org/wiki/C0_and_C1_control_codes\n */\nexport namespace C1 {\n  /** padding character */\n  export const PAD = '\\x80';\n  /** High Octet Preset */\n  export const HOP = '\\x81';\n  /** Break Permitted Here */\n  export const BPH = '\\x82';\n  /** No Break Here */\n  export const NBH = '\\x83';\n  /** Index */\n  export const IND = '\\x84';\n  /** Next Line */\n  export const NEL = '\\x85';\n  /** Start of Selected Area */\n  export const SSA = '\\x86';\n  /** End of Selected Area */\n  export const ESA = '\\x87';\n  /** Horizontal Tabulation Set */\n  export const HTS = '\\x88';\n  /** Horizontal Tabulation With Justification */\n  export const HTJ = '\\x89';\n  /** Vertical Tabulation Set */\n  export const VTS = '\\x8a';\n  /** Partial Line Down */\n  export const PLD = '\\x8b';\n  /** Partial Line Up */\n  export const PLU = '\\x8c';\n  /** Reverse Index */\n  export const RI = '\\x8d';\n  /** Single-Shift 2 */\n  export const SS2 = '\\x8e';\n  /** Single-Shift 3 */\n  export const SS3 = '\\x8f';\n  /** Device Control String */\n  export const DCS = '\\x90';\n  /** Private Use 1 */\n  export const PU1 = '\\x91';\n  /** Private Use 2 */\n  export const PU2 = '\\x92';\n  /** Set Transmit State */\n  export const STS = '\\x93';\n  /** Destructive backspace, intended to eliminate ambiguity about meaning of BS. */\n  export const CCH = '\\x94';\n  /** Message Waiting */\n  export const MW = '\\x95';\n  /** Start of Protected Area */\n  export const SPA = '\\x96';\n  /** End of Protected Area */\n  export const EPA = '\\x97';\n  /** Start of String */\n  export const SOS = '\\x98';\n  /** Single Graphic Character Introducer */\n  export const SGCI = '\\x99';\n  /** Single Character Introducer */\n  export const SCI = '\\x9a';\n  /** Control Sequence Introducer */\n  export const CSI = '\\x9b';\n  /** String Terminator */\n  export const ST = '\\x9c';\n  /** Operating System Command */\n  export const OSC = '\\x9d';\n  /** Privacy Message */\n  export const PM = '\\x9e';\n  /** Application Program Command */\n  export const APC = '\\x9f';\n}\nexport namespace C1_ESCAPED {\n  export const ST = `${C0.ESC}\\\\`;\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * Polyfill - Convert UTF32 codepoint into JS string.\n * Note: The built-in String.fromCodePoint happens to be much slower\n *       due to additional sanity checks. We can avoid them since\n *       we always operate on legal UTF32 (granted by the input decoders)\n *       and use this faster version instead.\n */\nexport function stringFromCodePoint(codePoint: number): string {\n  if (codePoint > 0xFFFF) {\n    codePoint -= 0x10000;\n    return String.fromCharCode((codePoint >> 10) + 0xD800) + String.fromCharCode((codePoint % 0x400) + 0xDC00);\n  }\n  return String.fromCharCode(codePoint);\n}\n\n/**\n * Convert UTF32 char codes into JS string.\n * Basically the same as `stringFromCodePoint` but for multiple codepoints\n * in a loop (which is a lot faster).\n */\nexport function utf32ToString(data: Uint32Array, start: number = 0, end: number = data.length): string {\n  let result = '';\n  for (let i = start; i < end; ++i) {\n    let codepoint = data[i];\n    if (codepoint > 0xFFFF) {\n      // JS strings are encoded as UTF16, thus a non BMP codepoint gets converted into a surrogate\n      // pair conversion rules:\n      //  - subtract 0x10000 from code point, leaving a 20 bit number\n      //  - add high 10 bits to 0xD800  --> first surrogate\n      //  - add low 10 bits to 0xDC00   --> second surrogate\n      codepoint -= 0x10000;\n      result += String.fromCharCode((codepoint >> 10) + 0xD800) + String.fromCharCode((codepoint % 0x400) + 0xDC00);\n    } else {\n      result += String.fromCharCode(codepoint);\n    }\n  }\n  return result;\n}\n\n/**\n * StringToUtf32 - decodes UTF16 sequences into UTF32 codepoints.\n * To keep the decoder in line with JS strings it handles single surrogates as UCS2.\n */\nexport class StringToUtf32 {\n  private _interim: number = 0;\n\n  /**\n   * Clears interim and resets decoder to clean state.\n   */\n  public clear(): void {\n    this._interim = 0;\n  }\n\n  /**\n   * Decode JS string to UTF32 codepoints.\n   * The methods assumes stream input and will store partly transmitted\n   * surrogate pairs and decode them with the next data chunk.\n   * Note: The method does no bound checks for target, therefore make sure\n   * the provided input data does not exceed the size of `target`.\n   * Returns the number of written codepoints in `target`.\n   */\n  public decode(input: string, target: Uint32Array): number {\n    const length = input.length;\n\n    if (!length) {\n      return 0;\n    }\n\n    let size = 0;\n    let startPos = 0;\n\n    // handle leftover surrogate high\n    if (this._interim) {\n      const second = input.charCodeAt(startPos++);\n      if (0xDC00 <= second && second <= 0xDFFF) {\n        target[size++] = (this._interim - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n      } else {\n        // illegal codepoint (USC2 handling)\n        target[size++] = this._interim;\n        target[size++] = second;\n      }\n      this._interim = 0;\n    }\n\n    for (let i = startPos; i < length; ++i) {\n      const code = input.charCodeAt(i);\n      // surrogate pair first\n      if (0xD800 <= code && code <= 0xDBFF) {\n        if (++i >= length) {\n          this._interim = code;\n          return size;\n        }\n        const second = input.charCodeAt(i);\n        if (0xDC00 <= second && second <= 0xDFFF) {\n          target[size++] = (code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n        } else {\n          // illegal codepoint (USC2 handling)\n          target[size++] = code;\n          target[size++] = second;\n        }\n        continue;\n      }\n      if (code === 0xFEFF) {\n        // BOM\n        continue;\n      }\n      target[size++] = code;\n    }\n    return size;\n  }\n}\n\n/**\n * Utf8Decoder - decodes UTF8 byte sequences into UTF32 codepoints.\n */\nexport class Utf8ToUtf32 {\n  public interim: Uint8Array = new Uint8Array(3);\n\n  /**\n   * Clears interim bytes and resets decoder to clean state.\n   */\n  public clear(): void {\n    this.interim.fill(0);\n  }\n\n  /**\n   * Decodes UTF8 byte sequences in `input` to UTF32 codepoints in `target`.\n   * The methods assumes stream input and will store partly transmitted bytes\n   * and decode them with the next data chunk.\n   * Note: The method does no bound checks for target, therefore make sure\n   * the provided data chunk does not exceed the size of `target`.\n   * Returns the number of written codepoints in `target`.\n   */\n  public decode(input: Uint8Array, target: Uint32Array): number {\n    const length = input.length;\n\n    if (!length) {\n      return 0;\n    }\n\n    let size = 0;\n    let byte1: number;\n    let byte2: number;\n    let byte3: number;\n    let byte4: number;\n    let codepoint = 0;\n    let startPos = 0;\n\n    // handle leftover bytes\n    if (this.interim[0]) {\n      let discardInterim = false;\n      let cp = this.interim[0];\n      cp &= ((((cp & 0xE0) === 0xC0)) ? 0x1F : (((cp & 0xF0) === 0xE0)) ? 0x0F : 0x07);\n      let pos = 0;\n      let tmp: number;\n      while ((tmp = this.interim[++pos] & 0x3F) && pos < 4) {\n        cp <<= 6;\n        cp |= tmp;\n      }\n      // missing bytes - read ahead from input\n      const type = (((this.interim[0] & 0xE0) === 0xC0)) ? 2 : (((this.interim[0] & 0xF0) === 0xE0)) ? 3 : 4;\n      const missing = type - pos;\n      while (startPos < missing) {\n        if (startPos >= length) {\n          return 0;\n        }\n        tmp = input[startPos++];\n        if ((tmp & 0xC0) !== 0x80) {\n          // wrong continuation, discard interim bytes completely\n          startPos--;\n          discardInterim = true;\n          break;\n        } else {\n          // need to save so we can continue short inputs in next call\n          this.interim[pos++] = tmp;\n          cp <<= 6;\n          cp |= tmp & 0x3F;\n        }\n      }\n      if (!discardInterim) {\n        // final test is type dependent\n        if (type === 2) {\n          if (cp < 0x80) {\n            // wrong starter byte\n            startPos--;\n          } else {\n            target[size++] = cp;\n          }\n        } else if (type === 3) {\n          if (cp < 0x0800 || (cp >= 0xD800 && cp <= 0xDFFF) || cp === 0xFEFF) {\n            // illegal codepoint or BOM\n          } else {\n            target[size++] = cp;\n          }\n        } else {\n          if (cp < 0x010000 || cp > 0x10FFFF) {\n            // illegal codepoint\n          } else {\n            target[size++] = cp;\n          }\n        }\n      }\n      this.interim.fill(0);\n    }\n\n    // loop through input\n    const fourStop = length - 4;\n    let i = startPos;\n    while (i < length) {\n      /**\n       * ASCII shortcut with loop unrolled to 4 consecutive ASCII chars.\n       * This is a compromise between speed gain for ASCII\n       * and penalty for non ASCII:\n       * For best ASCII performance the char should be stored directly into target,\n       * but even a single attempt to write to target and compare afterwards\n       * penalizes non ASCII really bad (-50%), thus we load the char into byteX first,\n       * which reduces ASCII performance by ~15%.\n       * This trial for ASCII reduces non ASCII performance by ~10% which seems acceptible\n       * compared to the gains.\n       * Note that this optimization only takes place for 4 consecutive ASCII chars,\n       * for any shorter it bails out. Worst case - all 4 bytes being read but\n       * thrown away due to the last being a non ASCII char (-10% performance).\n       */\n      while (i < fourStop\n        && !((byte1 = input[i]) & 0x80)\n        && !((byte2 = input[i + 1]) & 0x80)\n        && !((byte3 = input[i + 2]) & 0x80)\n        && !((byte4 = input[i + 3]) & 0x80))\n      {\n        target[size++] = byte1;\n        target[size++] = byte2;\n        target[size++] = byte3;\n        target[size++] = byte4;\n        i += 4;\n      }\n\n      // reread byte1\n      byte1 = input[i++];\n\n      // 1 byte\n      if (byte1 < 0x80) {\n        target[size++] = byte1;\n\n        // 2 bytes\n      } else if ((byte1 & 0xE0) === 0xC0) {\n        if (i >= length) {\n          this.interim[0] = byte1;\n          return size;\n        }\n        byte2 = input[i++];\n        if ((byte2 & 0xC0) !== 0x80) {\n          // wrong continuation\n          i--;\n          continue;\n        }\n        codepoint = (byte1 & 0x1F) << 6 | (byte2 & 0x3F);\n        if (codepoint < 0x80) {\n          // wrong starter byte\n          i--;\n          continue;\n        }\n        target[size++] = codepoint;\n\n        // 3 bytes\n      } else if ((byte1 & 0xF0) === 0xE0) {\n        if (i >= length) {\n          this.interim[0] = byte1;\n          return size;\n        }\n        byte2 = input[i++];\n        if ((byte2 & 0xC0) !== 0x80) {\n          // wrong continuation\n          i--;\n          continue;\n        }\n        if (i >= length) {\n          this.interim[0] = byte1;\n          this.interim[1] = byte2;\n          return size;\n        }\n        byte3 = input[i++];\n        if ((byte3 & 0xC0) !== 0x80) {\n          // wrong continuation\n          i--;\n          continue;\n        }\n        codepoint = (byte1 & 0x0F) << 12 | (byte2 & 0x3F) << 6 | (byte3 & 0x3F);\n        if (codepoint < 0x0800 || (codepoint >= 0xD800 && codepoint <= 0xDFFF) || codepoint === 0xFEFF) {\n          // illegal codepoint or BOM, no i-- here\n          continue;\n        }\n        target[size++] = codepoint;\n\n        // 4 bytes\n      } else if ((byte1 & 0xF8) === 0xF0) {\n        if (i >= length) {\n          this.interim[0] = byte1;\n          return size;\n        }\n        byte2 = input[i++];\n        if ((byte2 & 0xC0) !== 0x80) {\n          // wrong continuation\n          i--;\n          continue;\n        }\n        if (i >= length) {\n          this.interim[0] = byte1;\n          this.interim[1] = byte2;\n          return size;\n        }\n        byte3 = input[i++];\n        if ((byte3 & 0xC0) !== 0x80) {\n          // wrong continuation\n          i--;\n          continue;\n        }\n        if (i >= length) {\n          this.interim[0] = byte1;\n          this.interim[1] = byte2;\n          this.interim[2] = byte3;\n          return size;\n        }\n        byte4 = input[i++];\n        if ((byte4 & 0xC0) !== 0x80) {\n          // wrong continuation\n          i--;\n          continue;\n        }\n        codepoint = (byte1 & 0x07) << 18 | (byte2 & 0x3F) << 12 | (byte3 & 0x3F) << 6 | (byte4 & 0x3F);\n        if (codepoint < 0x010000 || codepoint > 0x10FFFF) {\n          // illegal codepoint, no i-- here\n          continue;\n        }\n        target[size++] = codepoint;\n      } else {\n        // illegal byte, just skip\n      }\n    }\n    return size;\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IUnicodeVersionProvider, UnicodeCharProperties, UnicodeCharWidth } from 'common/services/Services';\nimport { UnicodeService } from 'common/services/UnicodeService';\n\nconst BMP_COMBINING = [\n  [0x0300, 0x036F], [0x0483, 0x0486], [0x0488, 0x0489],\n  [0x0591, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2],\n  [0x05C4, 0x05C5], [0x05C7, 0x05C7], [0x0600, 0x0603],\n  [0x0610, 0x0615], [0x064B, 0x065E], [0x0670, 0x0670],\n  [0x06D6, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED],\n  [0x070F, 0x070F], [0x0711, 0x0711], [0x0730, 0x074A],\n  [0x07A6, 0x07B0], [0x07EB, 0x07F3], [0x0901, 0x0902],\n  [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D],\n  [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981],\n  [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD],\n  [0x09E2, 0x09E3], [0x0A01, 0x0A02], [0x0A3C, 0x0A3C],\n  [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D],\n  [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC],\n  [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD],\n  [0x0AE2, 0x0AE3], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C],\n  [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D],\n  [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0],\n  [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48],\n  [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBC, 0x0CBC],\n  [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD],\n  [0x0CE2, 0x0CE3], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D],\n  [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6],\n  [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E],\n  [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC],\n  [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35],\n  [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E],\n  [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97],\n  [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030],\n  [0x1032, 0x1032], [0x1036, 0x1037], [0x1039, 0x1039],\n  [0x1058, 0x1059], [0x1160, 0x11FF], [0x135F, 0x135F],\n  [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753],\n  [0x1772, 0x1773], [0x17B4, 0x17B5], [0x17B7, 0x17BD],\n  [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x17DD, 0x17DD],\n  [0x180B, 0x180D], [0x18A9, 0x18A9], [0x1920, 0x1922],\n  [0x1927, 0x1928], [0x1932, 0x1932], [0x1939, 0x193B],\n  [0x1A17, 0x1A18], [0x1B00, 0x1B03], [0x1B34, 0x1B34],\n  [0x1B36, 0x1B3A], [0x1B3C, 0x1B3C], [0x1B42, 0x1B42],\n  [0x1B6B, 0x1B73], [0x1DC0, 0x1DCA], [0x1DFE, 0x1DFF],\n  [0x200B, 0x200F], [0x202A, 0x202E], [0x2060, 0x2063],\n  [0x206A, 0x206F], [0x20D0, 0x20EF], [0x302A, 0x302F],\n  [0x3099, 0x309A], [0xA806, 0xA806], [0xA80B, 0xA80B],\n  [0xA825, 0xA826], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F],\n  [0xFE20, 0xFE23], [0xFEFF, 0xFEFF], [0xFFF9, 0xFFFB]\n];\nconst HIGH_COMBINING = [\n  [0x10A01, 0x10A03], [0x10A05, 0x10A06], [0x10A0C, 0x10A0F],\n  [0x10A38, 0x10A3A], [0x10A3F, 0x10A3F], [0x1D167, 0x1D169],\n  [0x1D173, 0x1D182], [0x1D185, 0x1D18B], [0x1D1AA, 0x1D1AD],\n  [0x1D242, 0x1D244], [0xE0001, 0xE0001], [0xE0020, 0xE007F],\n  [0xE0100, 0xE01EF]\n];\n\n// BMP lookup table, lazy initialized during first addon loading\nlet table: Uint8Array;\n\nfunction bisearch(ucs: number, data: number[][]): boolean {\n  let min = 0;\n  let max = data.length - 1;\n  let mid;\n  if (ucs < data[0][0] || ucs > data[max][1]) {\n    return false;\n  }\n  while (max >= min) {\n    mid = (min + max) >> 1;\n    if (ucs > data[mid][1]) {\n      min = mid + 1;\n    } else if (ucs < data[mid][0]) {\n      max = mid - 1;\n    } else {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport class UnicodeV6 implements IUnicodeVersionProvider {\n  public readonly version = '6';\n\n  constructor() {\n    // init lookup table once\n    if (!table) {\n      table = new Uint8Array(65536);\n      table.fill(1);\n      table[0] = 0;\n      // control chars\n      table.fill(0, 1, 32);\n      table.fill(0, 0x7f, 0xa0);\n\n      // apply wide char rules first\n      // wide chars\n      table.fill(2, 0x1100, 0x1160);\n      table[0x2329] = 2;\n      table[0x232a] = 2;\n      table.fill(2, 0x2e80, 0xa4d0);\n      table[0x303f] = 1;  // wrongly in last line\n\n      table.fill(2, 0xac00, 0xd7a4);\n      table.fill(2, 0xf900, 0xfb00);\n      table.fill(2, 0xfe10, 0xfe1a);\n      table.fill(2, 0xfe30, 0xfe70);\n      table.fill(2, 0xff00, 0xff61);\n      table.fill(2, 0xffe0, 0xffe7);\n\n      // apply combining last to ensure we overwrite\n      // wrongly wide set chars:\n      //    the original algo evals combining first and falls\n      //    through to wide check so we simply do here the opposite\n      // combining 0\n      for (let r = 0; r < BMP_COMBINING.length; ++r) {\n        table.fill(0, BMP_COMBINING[r][0], BMP_COMBINING[r][1] + 1);\n      }\n    }\n  }\n\n  public wcwidth(num: number): UnicodeCharWidth {\n    if (num < 32) return 0;\n    if (num < 127) return 1;\n    if (num < 65536) return table[num] as UnicodeCharWidth;\n    if (bisearch(num, HIGH_COMBINING)) return 0;\n    if ((num >= 0x20000 && num <= 0x2fffd) || (num >= 0x30000 && num <= 0x3fffd)) return 2;\n    return 1;\n  }\n\n  public charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties {\n    let width = this.wcwidth(codepoint);\n    let shouldJoin = width === 0 && preceding !== 0;\n    if (shouldJoin) {\n      const oldWidth = UnicodeService.extractWidth(preceding);\n      if (oldWidth === 0) {\n        shouldJoin = false;\n      } else if (oldWidth > width) {\n        width = oldWidth;\n      }\n    }\n    return UnicodeService.createPropertyValue(0, width, shouldJoin);\n  }\n}\n","\n/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport { Emitter } from 'vs/base/common/event';\n\ndeclare const setTimeout: (handler: () => void, timeout?: number) => void;\n\n/**\n * Safety watermark to avoid memory exhaustion and browser engine crash on fast data input.\n * Enable flow control to avoid this limit and make sure that your backend correctly\n * propagates this to the underlying pty. (see docs for further instructions)\n * Since this limit is meant as a safety parachute to prevent browser crashs,\n * it is set to a very high number. Typically xterm.js gets unresponsive with\n * a 100 times lower number (>500 kB).\n */\nconst DISCARD_WATERMARK = 50000000; // ~50 MB\n\n/**\n * The max number of ms to spend on writes before allowing the renderer to\n * catch up with a 0ms setTimeout. A value of < 33 to keep us close to\n * 30fps, and a value of < 16 to try to run at 60fps. Of course, the real FPS\n * depends on the time it takes for the renderer to draw the frame.\n */\nconst WRITE_TIMEOUT_MS = 12;\n\n/**\n * Threshold of max held chunks in the write buffer, that were already processed.\n * This is a tradeoff between extensive write buffer shifts (bad runtime) and high\n * memory consumption by data thats not used anymore.\n */\nconst WRITE_BUFFER_LENGTH_THRESHOLD = 50;\n\nexport class WriteBuffer extends Disposable {\n  private _writeBuffer: (string | Uint8Array)[] = [];\n  private _callbacks: ((() => void) | undefined)[] = [];\n  private _pendingData = 0;\n  private _bufferOffset = 0;\n  private _isSyncWriting = false;\n  private _syncCalls = 0;\n  private _didUserInput = false;\n\n  private readonly _onWriteParsed = this._register(new Emitter<void>());\n  public readonly onWriteParsed = this._onWriteParsed.event;\n\n  constructor(private _action: (data: string | Uint8Array, promiseResult?: boolean) => void | Promise<boolean>) {\n    super();\n  }\n\n  public handleUserInput(): void {\n    this._didUserInput = true;\n  }\n\n  /**\n   * @deprecated Unreliable, to be removed soon.\n   */\n  public writeSync(data: string | Uint8Array, maxSubsequentCalls?: number): void {\n    // stop writeSync recursions with maxSubsequentCalls argument\n    // This is dangerous to use as it will lose the current data chunk\n    // and return immediately.\n    if (maxSubsequentCalls !== undefined && this._syncCalls > maxSubsequentCalls) {\n      // comment next line if a whole loop block should only contain x `writeSync` calls\n      // (total flat vs. deep nested limit)\n      this._syncCalls = 0;\n      return;\n    }\n    // append chunk to buffer\n    this._pendingData += data.length;\n    this._writeBuffer.push(data);\n    this._callbacks.push(undefined);\n\n    // increase recursion counter\n    this._syncCalls++;\n    // exit early if another writeSync loop is active\n    if (this._isSyncWriting) {\n      return;\n    }\n    this._isSyncWriting = true;\n\n    // force sync processing on pending data chunks to avoid in-band data scrambling\n    // does the same as innerWrite but without event loop\n    // we have to do it here as single loop steps to not corrupt loop subject\n    // by another writeSync call triggered from _action\n    let chunk: string | Uint8Array | undefined;\n    while (chunk = this._writeBuffer.shift()) {\n      this._action(chunk);\n      const cb = this._callbacks.shift();\n      if (cb) cb();\n    }\n    // reset to avoid reprocessing of chunks with scheduled innerWrite call\n    // stopping scheduled innerWrite by offset > length condition\n    this._pendingData = 0;\n    this._bufferOffset = 0x7FFFFFFF;\n\n    // allow another writeSync to loop\n    this._isSyncWriting = false;\n    this._syncCalls = 0;\n  }\n\n  public write(data: string | Uint8Array, callback?: () => void): void {\n    if (this._pendingData > DISCARD_WATERMARK) {\n      throw new Error('write data discarded, use flow control to avoid losing data');\n    }\n\n    // schedule chunk processing for next event loop run\n    if (!this._writeBuffer.length) {\n      this._bufferOffset = 0;\n\n      // If this is the first write call after the user has done some input,\n      // parse it immediately to minimize input latency,\n      // otherwise schedule for the next event\n      if (this._didUserInput) {\n        this._didUserInput = false;\n        this._pendingData += data.length;\n        this._writeBuffer.push(data);\n        this._callbacks.push(callback);\n        this._innerWrite();\n        return;\n      }\n\n      setTimeout(() => this._innerWrite());\n    }\n\n    this._pendingData += data.length;\n    this._writeBuffer.push(data);\n    this._callbacks.push(callback);\n  }\n\n  /**\n   * Inner write call, that enters the sliced chunk processing by timing.\n   *\n   * `lastTime` indicates, when the last _innerWrite call had started.\n   * It is used to aggregate async handler execution under a timeout constraint\n   * effectively lowering the redrawing needs, schematically:\n   *\n   *   macroTask _innerWrite:\n   *     if (performance.now() - (lastTime | 0) < WRITE_TIMEOUT_MS):\n   *        schedule microTask _innerWrite(lastTime)\n   *     else:\n   *        schedule macroTask _innerWrite(0)\n   *\n   *   overall execution order on task queues:\n   *\n   *   macrotasks:  [...]  -->  _innerWrite(0)  -->  [...]  -->  screenUpdate  -->  [...]\n   *         m  t:                    |\n   *         i  a:                  [...]\n   *         c  s:                    |\n   *         r  k:              while < timeout:\n   *         o  s:                _innerWrite(timeout)\n   *\n   * `promiseResult` depicts the promise resolve value of an async handler.\n   * This value gets carried forward through all saved stack states of the\n   * paused parser for proper continuation.\n   *\n   * Note, for pure sync code `lastTime` and `promiseResult` have no meaning.\n   */\n  protected _innerWrite(lastTime: number = 0, promiseResult: boolean = true): void {\n    const startTime = lastTime || performance.now();\n    while (this._writeBuffer.length > this._bufferOffset) {\n      const data = this._writeBuffer[this._bufferOffset];\n      const result = this._action(data, promiseResult);\n      if (result) {\n        /**\n         * If we get a promise as return value, we re-schedule the continuation\n         * as thenable on the promise and exit right away.\n         *\n         * The exit here means, that we block input processing at the current active chunk,\n         * the exact execution position within the chunk is preserved by the saved\n         * stack content in InputHandler and EscapeSequenceParser.\n         *\n         * Resuming happens automatically from that saved stack state.\n         * Also the resolved promise value is passed along the callstack to\n         * `EscapeSequenceParser.parse` to correctly resume the stopped handler loop.\n         *\n         * Exceptions on async handlers will be logged to console async, but do not interrupt\n         * the input processing (continues with next handler at the current input position).\n         */\n\n        /**\n         * If a promise takes long to resolve, we should schedule continuation behind setTimeout.\n         * This might already be too late, if our .then enters really late (executor + prev thens\n         * took very long). This cannot be solved here for the handler itself (it is the handlers\n         * responsibility to slice hard work), but we can at least schedule a screen update as we\n         * gain control.\n         */\n        const continuation: (r: boolean) => void = (r: boolean) => performance.now() - startTime >= WRITE_TIMEOUT_MS\n          ? setTimeout(() => this._innerWrite(0, r))\n          : this._innerWrite(startTime, r);\n\n        /**\n         * Optimization considerations:\n         * The continuation above favors FPS over throughput by eval'ing `startTime` on resolve.\n         * This might schedule too many screen updates with bad throughput drops (in case a slow\n         * resolving handler sliced its work properly behind setTimeout calls). We cannot spot\n         * this condition here, also the renderer has no way to spot nonsense updates either.\n         * FIXME: A proper fix for this would track the FPS at the renderer entry level separately.\n         *\n         * If favoring of FPS shows bad throughtput impact, use the following instead. It favors\n         * throughput by eval'ing `startTime` upfront pulling at least one more chunk into the\n         * current microtask queue (executed before setTimeout).\n         */\n        // const continuation: (r: boolean) => void = performance.now() - startTime >=\n        //     WRITE_TIMEOUT_MS\n        //   ? r => setTimeout(() => this._innerWrite(0, r))\n        //   : r => this._innerWrite(startTime, r);\n\n        // Handle exceptions synchronously to current band position, idea:\n        // 1. spawn a single microtask which we allow to throw hard\n        // 2. spawn a promise immediately resolving to `true`\n        // (executed on the same queue, thus properly aligned before continuation happens)\n        result.catch(err => {\n          queueMicrotask(() => {throw err;});\n          return Promise.resolve(false);\n        }).then(continuation);\n        return;\n      }\n\n      const cb = this._callbacks[this._bufferOffset];\n      if (cb) cb();\n      this._bufferOffset++;\n      this._pendingData -= data.length;\n\n      if (performance.now() - startTime >= WRITE_TIMEOUT_MS) {\n        break;\n      }\n    }\n    if (this._writeBuffer.length > this._bufferOffset) {\n      // Allow renderer to catch up before processing the next batch\n      // trim already processed chunks if we are above threshold\n      if (this._bufferOffset > WRITE_BUFFER_LENGTH_THRESHOLD) {\n        this._writeBuffer = this._writeBuffer.slice(this._bufferOffset);\n        this._callbacks = this._callbacks.slice(this._bufferOffset);\n        this._bufferOffset = 0;\n      }\n      setTimeout(() => this._innerWrite());\n    } else {\n      this._writeBuffer.length = 0;\n      this._callbacks.length = 0;\n      this._pendingData = 0;\n      this._bufferOffset = 0;\n    }\n    this._onWriteParsed.fire();\n  }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n\n// 'rgb:' rule - matching: r/g/b | rr/gg/bb | rrr/ggg/bbb | rrrr/gggg/bbbb (hex digits)\nconst RGB_REX = /^([\\da-f])\\/([\\da-f])\\/([\\da-f])$|^([\\da-f]{2})\\/([\\da-f]{2})\\/([\\da-f]{2})$|^([\\da-f]{3})\\/([\\da-f]{3})\\/([\\da-f]{3})$|^([\\da-f]{4})\\/([\\da-f]{4})\\/([\\da-f]{4})$/;\n// '#...' rule - matching any hex digits\nconst HASH_REX = /^[\\da-f]+$/;\n\n/**\n * Parse color spec to RGB values (8 bit per channel).\n * See `man xparsecolor` for details about certain format specifications.\n *\n * Supported formats:\n * - rgb:<red>/<green>/<blue> with <red>, <green>, <blue> in h | hh | hhh | hhhh\n * - #RGB, #RRGGBB, #RRRGGGBBB, #RRRRGGGGBBBB\n *\n * All other formats like rgbi: or device-independent string specifications\n * with float numbering are not supported.\n */\nexport function parseColor(data: string): [number, number, number] | undefined {\n  if (!data) return;\n  // also handle uppercases\n  let low = data.toLowerCase();\n  if (low.indexOf('rgb:') === 0) {\n    // 'rgb:' specifier\n    low = low.slice(4);\n    const m = RGB_REX.exec(low);\n    if (m) {\n      const base = m[1] ? 15 : m[4] ? 255 : m[7] ? 4095 : 65535;\n      return [\n        Math.round(parseInt(m[1] || m[4] || m[7] || m[10], 16) / base * 255),\n        Math.round(parseInt(m[2] || m[5] || m[8] || m[11], 16) / base * 255),\n        Math.round(parseInt(m[3] || m[6] || m[9] || m[12], 16) / base * 255)\n      ];\n    }\n  } else if (low.indexOf('#') === 0) {\n    // '#' specifier\n    low = low.slice(1);\n    if (HASH_REX.exec(low) && [3, 6, 9, 12].includes(low.length)) {\n      const adv = low.length / 3;\n      const result: [number, number, number] = [0, 0, 0];\n      for (let i = 0; i < 3; ++i) {\n        const c = parseInt(low.slice(adv * i, adv * i + adv), 16);\n        result[i] = adv === 1 ? c << 4 : adv === 2 ? c : adv === 3 ? c >> 4 : c >> 8;\n      }\n      return result;\n    }\n  }\n\n  // Named colors are currently not supported due to the large addition to the xterm.js bundle size\n  // they would add. In order to support named colors, we would need some way of optionally loading\n  // additional payloads so startup/download time is not bloated (see #3530).\n}\n\n// pad hex output to requested bit width\nfunction pad(n: number, bits: number): string {\n  const s = n.toString(16);\n  const s2 = s.length < 2 ? '0' + s : s;\n  switch (bits) {\n    case 4:\n      return s[0];\n    case 8:\n      return s2;\n    case 12:\n      return (s2 + s2).slice(0, 3);\n    default:\n      return s2 + s2;\n  }\n}\n\n/**\n * Convert a given color to rgb:../../.. string of `bits` depth.\n */\nexport function toRgbString(color: [number, number, number], bits: number = 16): string {\n  const [r, g, b] = color;\n  return `rgb:${pad(r, bits)}/${pad(g, bits)}/${pad(b, bits)}`;\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * Internal states of EscapeSequenceParser.\n */\nexport const enum ParserState {\n  GROUND = 0,\n  ESCAPE = 1,\n  ESCAPE_INTERMEDIATE = 2,\n  CSI_ENTRY = 3,\n  CSI_PARAM = 4,\n  CSI_INTERMEDIATE = 5,\n  CSI_IGNORE = 6,\n  SOS_PM_APC_STRING = 7,\n  OSC_STRING = 8,\n  DCS_ENTRY = 9,\n  DCS_PARAM = 10,\n  DCS_IGNORE = 11,\n  DCS_INTERMEDIATE = 12,\n  DCS_PASSTHROUGH = 13\n}\n\n/**\n * Internal actions of EscapeSequenceParser.\n */\nexport const enum ParserAction {\n  IGNORE = 0,\n  ERROR = 1,\n  PRINT = 2,\n  EXECUTE = 3,\n  OSC_START = 4,\n  OSC_PUT = 5,\n  OSC_END = 6,\n  CSI_DISPATCH = 7,\n  PARAM = 8,\n  COLLECT = 9,\n  ESC_DISPATCH = 10,\n  CLEAR = 11,\n  DCS_HOOK = 12,\n  DCS_PUT = 13,\n  DCS_UNHOOK = 14\n}\n\n/**\n * Internal states of OscParser.\n */\nexport const enum OscState {\n  START = 0,\n  ID = 1,\n  PAYLOAD = 2,\n  ABORT = 3\n}\n\n// payload limit for OSC and DCS\nexport const PAYLOAD_LIMIT = 10000000;\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from 'common/Types';\nimport { IDcsHandler, IParams, IHandlerCollection, IDcsParser, DcsFallbackHandlerType, ISubParserStackState } from 'common/parser/Types';\nimport { utf32ToString } from 'common/input/TextDecoder';\nimport { Params } from 'common/parser/Params';\nimport { PAYLOAD_LIMIT } from 'common/parser/Constants';\n\nconst EMPTY_HANDLERS: IDcsHandler[] = [];\n\nexport class DcsParser implements IDcsParser {\n  private _handlers: IHandlerCollection<IDcsHandler> = Object.create(null);\n  private _active: IDcsHandler[] = EMPTY_HANDLERS;\n  private _ident: number = 0;\n  private _handlerFb: DcsFallbackHandlerType = () => { };\n  private _stack: ISubParserStackState = {\n    paused: false,\n    loopPosition: 0,\n    fallThrough: false\n  };\n\n  public dispose(): void {\n    this._handlers = Object.create(null);\n    this._handlerFb = () => { };\n    this._active = EMPTY_HANDLERS;\n  }\n\n  public registerHandler(ident: number, handler: IDcsHandler): IDisposable {\n    if (this._handlers[ident] === undefined) {\n      this._handlers[ident] = [];\n    }\n    const handlerList = this._handlers[ident];\n    handlerList.push(handler);\n    return {\n      dispose: () => {\n        const handlerIndex = handlerList.indexOf(handler);\n        if (handlerIndex !== -1) {\n          handlerList.splice(handlerIndex, 1);\n        }\n      }\n    };\n  }\n\n  public clearHandler(ident: number): void {\n    if (this._handlers[ident]) delete this._handlers[ident];\n  }\n\n  public setHandlerFallback(handler: DcsFallbackHandlerType): void {\n    this._handlerFb = handler;\n  }\n\n  public reset(): void {\n    // force cleanup leftover handlers\n    if (this._active.length) {\n      for (let j = this._stack.paused ? this._stack.loopPosition - 1 : this._active.length - 1; j >= 0; --j) {\n        this._active[j].unhook(false);\n      }\n    }\n    this._stack.paused = false;\n    this._active = EMPTY_HANDLERS;\n    this._ident = 0;\n  }\n\n  public hook(ident: number, params: IParams): void {\n    // always reset leftover handlers\n    this.reset();\n    this._ident = ident;\n    this._active = this._handlers[ident] || EMPTY_HANDLERS;\n    if (!this._active.length) {\n      this._handlerFb(this._ident, 'HOOK', params);\n    } else {\n      for (let j = this._active.length - 1; j >= 0; j--) {\n        this._active[j].hook(params);\n      }\n    }\n  }\n\n  public put(data: Uint32Array, start: number, end: number): void {\n    if (!this._active.length) {\n      this._handlerFb(this._ident, 'PUT', utf32ToString(data, start, end));\n    } else {\n      for (let j = this._active.length - 1; j >= 0; j--) {\n        this._active[j].put(data, start, end);\n      }\n    }\n  }\n\n  public unhook(success: boolean, promiseResult: boolean = true): void | Promise<boolean> {\n    if (!this._active.length) {\n      this._handlerFb(this._ident, 'UNHOOK', success);\n    } else {\n      let handlerResult: boolean | Promise<boolean> = false;\n      let j = this._active.length - 1;\n      let fallThrough = false;\n      if (this._stack.paused) {\n        j = this._stack.loopPosition - 1;\n        handlerResult = promiseResult;\n        fallThrough = this._stack.fallThrough;\n        this._stack.paused = false;\n      }\n      if (!fallThrough && handlerResult === false) {\n        for (; j >= 0; j--) {\n          handlerResult = this._active[j].unhook(success);\n          if (handlerResult === true) {\n            break;\n          } else if (handlerResult instanceof Promise) {\n            this._stack.paused = true;\n            this._stack.loopPosition = j;\n            this._stack.fallThrough = false;\n            return handlerResult;\n          }\n        }\n        j--;\n      }\n      // cleanup left over handlers (fallThrough for async)\n      for (; j >= 0; j--) {\n        handlerResult = this._active[j].unhook(false);\n        if (handlerResult instanceof Promise) {\n          this._stack.paused = true;\n          this._stack.loopPosition = j;\n          this._stack.fallThrough = true;\n          return handlerResult;\n        }\n      }\n    }\n    this._active = EMPTY_HANDLERS;\n    this._ident = 0;\n  }\n}\n\n// predefine empty params as [0] (ZDM)\nconst EMPTY_PARAMS = new Params();\nEMPTY_PARAMS.addParam(0);\n\n/**\n * Convenient class to create a DCS handler from a single callback function.\n * Note: The payload is currently limited to 50 MB (hardcoded).\n */\nexport class DcsHandler implements IDcsHandler {\n  private _data = '';\n  private _params: IParams = EMPTY_PARAMS;\n  private _hitLimit: boolean = false;\n\n  constructor(private _handler: (data: string, params: IParams) => boolean | Promise<boolean>) { }\n\n  public hook(params: IParams): void {\n    // since we need to preserve params until `unhook`, we have to clone it\n    // (only borrowed from parser and spans multiple parser states)\n    // perf optimization:\n    // clone only, if we have non empty params, otherwise stick with default\n    this._params = (params.length > 1 || params.params[0]) ? params.clone() : EMPTY_PARAMS;\n    this._data = '';\n    this._hitLimit = false;\n  }\n\n  public put(data: Uint32Array, start: number, end: number): void {\n    if (this._hitLimit) {\n      return;\n    }\n    this._data += utf32ToString(data, start, end);\n    if (this._data.length > PAYLOAD_LIMIT) {\n      this._data = '';\n      this._hitLimit = true;\n    }\n  }\n\n  public unhook(success: boolean): boolean | Promise<boolean> {\n    let ret: boolean | Promise<boolean> = false;\n    if (this._hitLimit) {\n      ret = false;\n    } else if (success) {\n      ret = this._handler(this._data, this._params);\n      if (ret instanceof Promise) {\n        // need to hold data and params until `ret` got resolved\n        // dont care for errors, data will be freed anyway on next start\n        return ret.then(res => {\n          this._params = EMPTY_PARAMS;\n          this._data = '';\n          this._hitLimit = false;\n          return res;\n        });\n      }\n    }\n    this._params = EMPTY_PARAMS;\n    this._data = '';\n    this._hitLimit = false;\n    return ret;\n  }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IParsingState, IDcsHandler, IEscapeSequenceParser, IParams, IOscHandler, IHandlerCollection, CsiHandlerType, OscFallbackHandlerType, IOscParser, EscHandlerType, IDcsParser, DcsFallbackHandlerType, IFunctionIdentifier, ExecuteFallbackHandlerType, CsiFallbackHandlerType, EscFallbackHandlerType, PrintHandlerType, PrintFallbackHandlerType, ExecuteHandlerType, IParserStackState, ParserStackType, ResumableHandlersType } from 'common/parser/Types';\nimport { ParserState, ParserAction } from 'common/parser/Constants';\nimport { Disposable, toDisposable } from 'vs/base/common/lifecycle';\nimport { IDisposable } from 'common/Types';\nimport { Params } from 'common/parser/Params';\nimport { OscParser } from 'common/parser/OscParser';\nimport { DcsParser } from 'common/parser/DcsParser';\n\n/**\n * Table values are generated like this:\n *    index:  currentState << TableValue.INDEX_STATE_SHIFT | charCode\n *    value:  action << TableValue.TRANSITION_ACTION_SHIFT | nextState\n */\nconst enum TableAccess {\n  TRANSITION_ACTION_SHIFT = 4,\n  TRANSITION_STATE_MASK = 15,\n  INDEX_STATE_SHIFT = 8\n}\n\n/**\n * Transition table for EscapeSequenceParser.\n */\nexport class TransitionTable {\n  public table: Uint8Array;\n\n  constructor(length: number) {\n    this.table = new Uint8Array(length);\n  }\n\n  /**\n   * Set default transition.\n   * @param action default action\n   * @param next default next state\n   */\n  public setDefault(action: ParserAction, next: ParserState): void {\n    this.table.fill(action << TableAccess.TRANSITION_ACTION_SHIFT | next);\n  }\n\n  /**\n   * Add a transition to the transition table.\n   * @param code input character code\n   * @param state current parser state\n   * @param action parser action to be done\n   * @param next next parser state\n   */\n  public add(code: number, state: ParserState, action: ParserAction, next: ParserState): void {\n    this.table[state << TableAccess.INDEX_STATE_SHIFT | code] = action << TableAccess.TRANSITION_ACTION_SHIFT | next;\n  }\n\n  /**\n   * Add transitions for multiple input character codes.\n   * @param codes input character code array\n   * @param state current parser state\n   * @param action parser action to be done\n   * @param next next parser state\n   */\n  public addMany(codes: number[], state: ParserState, action: ParserAction, next: ParserState): void {\n    for (let i = 0; i < codes.length; i++) {\n      this.table[state << TableAccess.INDEX_STATE_SHIFT | codes[i]] = action << TableAccess.TRANSITION_ACTION_SHIFT | next;\n    }\n  }\n}\n\n\n// Pseudo-character placeholder for printable non-ascii characters (unicode).\nconst NON_ASCII_PRINTABLE = 0xA0;\n\n\n/**\n * VT500 compatible transition table.\n * Taken from https://vt100.net/emu/dec_ansi_parser.\n */\nexport const VT500_TRANSITION_TABLE = (function (): TransitionTable {\n  const table: TransitionTable = new TransitionTable(4095);\n\n  // range macro for byte\n  const BYTE_VALUES = 256;\n  const blueprint = Array.apply(null, Array(BYTE_VALUES)).map((unused: any, i: number) => i);\n  const r = (start: number, end: number): number[] => blueprint.slice(start, end);\n\n  // Default definitions.\n  const PRINTABLES = r(0x20, 0x7f); // 0x20 (SP) included, 0x7F (DEL) excluded\n  const EXECUTABLES = r(0x00, 0x18);\n  EXECUTABLES.push(0x19);\n  EXECUTABLES.push.apply(EXECUTABLES, r(0x1c, 0x20));\n\n  const states: number[] = r(ParserState.GROUND, ParserState.DCS_PASSTHROUGH + 1);\n  let state: any;\n\n  // set default transition\n  table.setDefault(ParserAction.ERROR, ParserState.GROUND);\n  // printables\n  table.addMany(PRINTABLES, ParserState.GROUND, ParserAction.PRINT, ParserState.GROUND);\n  // global anywhere rules\n  for (state in states) {\n    table.addMany([0x18, 0x1a, 0x99, 0x9a], state, ParserAction.EXECUTE, ParserState.GROUND);\n    table.addMany(r(0x80, 0x90), state, ParserAction.EXECUTE, ParserState.GROUND);\n    table.addMany(r(0x90, 0x98), state, ParserAction.EXECUTE, ParserState.GROUND);\n    table.add(0x9c, state, ParserAction.IGNORE, ParserState.GROUND); // ST as terminator\n    table.add(0x1b, state, ParserAction.CLEAR, ParserState.ESCAPE);  // ESC\n    table.add(0x9d, state, ParserAction.OSC_START, ParserState.OSC_STRING);  // OSC\n    table.addMany([0x98, 0x9e, 0x9f], state, ParserAction.IGNORE, ParserState.SOS_PM_APC_STRING);\n    table.add(0x9b, state, ParserAction.CLEAR, ParserState.CSI_ENTRY);  // CSI\n    table.add(0x90, state, ParserAction.CLEAR, ParserState.DCS_ENTRY);  // DCS\n  }\n  // rules for executables and 7f\n  table.addMany(EXECUTABLES, ParserState.GROUND, ParserAction.EXECUTE, ParserState.GROUND);\n  table.addMany(EXECUTABLES, ParserState.ESCAPE, ParserAction.EXECUTE, ParserState.ESCAPE);\n  table.add(0x7f, ParserState.ESCAPE, ParserAction.IGNORE, ParserState.ESCAPE);\n  table.addMany(EXECUTABLES, ParserState.OSC_STRING, ParserAction.IGNORE, ParserState.OSC_STRING);\n  table.addMany(EXECUTABLES, ParserState.CSI_ENTRY, ParserAction.EXECUTE, ParserState.CSI_ENTRY);\n  table.add(0x7f, ParserState.CSI_ENTRY, ParserAction.IGNORE, ParserState.CSI_ENTRY);\n  table.addMany(EXECUTABLES, ParserState.CSI_PARAM, ParserAction.EXECUTE, ParserState.CSI_PARAM);\n  table.add(0x7f, ParserState.CSI_PARAM, ParserAction.IGNORE, ParserState.CSI_PARAM);\n  table.addMany(EXECUTABLES, ParserState.CSI_IGNORE, ParserAction.EXECUTE, ParserState.CSI_IGNORE);\n  table.addMany(EXECUTABLES, ParserState.CSI_INTERMEDIATE, ParserAction.EXECUTE, ParserState.CSI_INTERMEDIATE);\n  table.add(0x7f, ParserState.CSI_INTERMEDIATE, ParserAction.IGNORE, ParserState.CSI_INTERMEDIATE);\n  table.addMany(EXECUTABLES, ParserState.ESCAPE_INTERMEDIATE, ParserAction.EXECUTE, ParserState.ESCAPE_INTERMEDIATE);\n  table.add(0x7f, ParserState.ESCAPE_INTERMEDIATE, ParserAction.IGNORE, ParserState.ESCAPE_INTERMEDIATE);\n  // osc\n  table.add(0x5d, ParserState.ESCAPE, ParserAction.OSC_START, ParserState.OSC_STRING);\n  table.addMany(PRINTABLES, ParserState.OSC_STRING, ParserAction.OSC_PUT, ParserState.OSC_STRING);\n  table.add(0x7f, ParserState.OSC_STRING, ParserAction.OSC_PUT, ParserState.OSC_STRING);\n  table.addMany([0x9c, 0x1b, 0x18, 0x1a, 0x07], ParserState.OSC_STRING, ParserAction.OSC_END, ParserState.GROUND);\n  table.addMany(r(0x1c, 0x20), ParserState.OSC_STRING, ParserAction.IGNORE, ParserState.OSC_STRING);\n  // sos/pm/apc does nothing\n  table.addMany([0x58, 0x5e, 0x5f], ParserState.ESCAPE, ParserAction.IGNORE, ParserState.SOS_PM_APC_STRING);\n  table.addMany(PRINTABLES, ParserState.SOS_PM_APC_STRING, ParserAction.IGNORE, ParserState.SOS_PM_APC_STRING);\n  table.addMany(EXECUTABLES, ParserState.SOS_PM_APC_STRING, ParserAction.IGNORE, ParserState.SOS_PM_APC_STRING);\n  table.add(0x9c, ParserState.SOS_PM_APC_STRING, ParserAction.IGNORE, ParserState.GROUND);\n  table.add(0x7f, ParserState.SOS_PM_APC_STRING, ParserAction.IGNORE, ParserState.SOS_PM_APC_STRING);\n  // csi entries\n  table.add(0x5b, ParserState.ESCAPE, ParserAction.CLEAR, ParserState.CSI_ENTRY);\n  table.addMany(r(0x40, 0x7f), ParserState.CSI_ENTRY, ParserAction.CSI_DISPATCH, ParserState.GROUND);\n  table.addMany(r(0x30, 0x3c), ParserState.CSI_ENTRY, ParserAction.PARAM, ParserState.CSI_PARAM);\n  table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.CSI_ENTRY, ParserAction.COLLECT, ParserState.CSI_PARAM);\n  table.addMany(r(0x30, 0x3c), ParserState.CSI_PARAM, ParserAction.PARAM, ParserState.CSI_PARAM);\n  table.addMany(r(0x40, 0x7f), ParserState.CSI_PARAM, ParserAction.CSI_DISPATCH, ParserState.GROUND);\n  table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.CSI_PARAM, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n  table.addMany(r(0x20, 0x40), ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n  table.add(0x7f, ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n  table.addMany(r(0x40, 0x7f), ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.GROUND);\n  table.addMany(r(0x20, 0x30), ParserState.CSI_ENTRY, ParserAction.COLLECT, ParserState.CSI_INTERMEDIATE);\n  table.addMany(r(0x20, 0x30), ParserState.CSI_INTERMEDIATE, ParserAction.COLLECT, ParserState.CSI_INTERMEDIATE);\n  table.addMany(r(0x30, 0x40), ParserState.CSI_INTERMEDIATE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n  table.addMany(r(0x40, 0x7f), ParserState.CSI_INTERMEDIATE, ParserAction.CSI_DISPATCH, ParserState.GROUND);\n  table.addMany(r(0x20, 0x30), ParserState.CSI_PARAM, ParserAction.COLLECT, ParserState.CSI_INTERMEDIATE);\n  // esc_intermediate\n  table.addMany(r(0x20, 0x30), ParserState.ESCAPE, ParserAction.COLLECT, ParserState.ESCAPE_INTERMEDIATE);\n  table.addMany(r(0x20, 0x30), ParserState.ESCAPE_INTERMEDIATE, ParserAction.COLLECT, ParserState.ESCAPE_INTERMEDIATE);\n  table.addMany(r(0x30, 0x7f), ParserState.ESCAPE_INTERMEDIATE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n  table.addMany(r(0x30, 0x50), ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n  table.addMany(r(0x51, 0x58), ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n  table.addMany([0x59, 0x5a, 0x5c], ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n  table.addMany(r(0x60, 0x7f), ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n  // dcs entry\n  table.add(0x50, ParserState.ESCAPE, ParserAction.CLEAR, ParserState.DCS_ENTRY);\n  table.addMany(EXECUTABLES, ParserState.DCS_ENTRY, ParserAction.IGNORE, ParserState.DCS_ENTRY);\n  table.add(0x7f, ParserState.DCS_ENTRY, ParserAction.IGNORE, ParserState.DCS_ENTRY);\n  table.addMany(r(0x1c, 0x20), ParserState.DCS_ENTRY, ParserAction.IGNORE, ParserState.DCS_ENTRY);\n  table.addMany(r(0x20, 0x30), ParserState.DCS_ENTRY, ParserAction.COLLECT, ParserState.DCS_INTERMEDIATE);\n  table.addMany(r(0x30, 0x3c), ParserState.DCS_ENTRY, ParserAction.PARAM, ParserState.DCS_PARAM);\n  table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.DCS_ENTRY, ParserAction.COLLECT, ParserState.DCS_PARAM);\n  table.addMany(EXECUTABLES, ParserState.DCS_IGNORE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n  table.addMany(r(0x20, 0x80), ParserState.DCS_IGNORE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n  table.addMany(r(0x1c, 0x20), ParserState.DCS_IGNORE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n  table.addMany(EXECUTABLES, ParserState.DCS_PARAM, ParserAction.IGNORE, ParserState.DCS_PARAM);\n  table.add(0x7f, ParserState.DCS_PARAM, ParserAction.IGNORE, ParserState.DCS_PARAM);\n  table.addMany(r(0x1c, 0x20), ParserState.DCS_PARAM, ParserAction.IGNORE, ParserState.DCS_PARAM);\n  table.addMany(r(0x30, 0x3c), ParserState.DCS_PARAM, ParserAction.PARAM, ParserState.DCS_PARAM);\n  table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.DCS_PARAM, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n  table.addMany(r(0x20, 0x30), ParserState.DCS_PARAM, ParserAction.COLLECT, ParserState.DCS_INTERMEDIATE);\n  table.addMany(EXECUTABLES, ParserState.DCS_INTERMEDIATE, ParserAction.IGNORE, ParserState.DCS_INTERMEDIATE);\n  table.add(0x7f, ParserState.DCS_INTERMEDIATE, ParserAction.IGNORE, ParserState.DCS_INTERMEDIATE);\n  table.addMany(r(0x1c, 0x20), ParserState.DCS_INTERMEDIATE, ParserAction.IGNORE, ParserState.DCS_INTERMEDIATE);\n  table.addMany(r(0x20, 0x30), ParserState.DCS_INTERMEDIATE, ParserAction.COLLECT, ParserState.DCS_INTERMEDIATE);\n  table.addMany(r(0x30, 0x40), ParserState.DCS_INTERMEDIATE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n  table.addMany(r(0x40, 0x7f), ParserState.DCS_INTERMEDIATE, ParserAction.DCS_HOOK, ParserState.DCS_PASSTHROUGH);\n  table.addMany(r(0x40, 0x7f), ParserState.DCS_PARAM, ParserAction.DCS_HOOK, ParserState.DCS_PASSTHROUGH);\n  table.addMany(r(0x40, 0x7f), ParserState.DCS_ENTRY, ParserAction.DCS_HOOK, ParserState.DCS_PASSTHROUGH);\n  table.addMany(EXECUTABLES, ParserState.DCS_PASSTHROUGH, ParserAction.DCS_PUT, ParserState.DCS_PASSTHROUGH);\n  table.addMany(PRINTABLES, ParserState.DCS_PASSTHROUGH, ParserAction.DCS_PUT, ParserState.DCS_PASSTHROUGH);\n  table.add(0x7f, ParserState.DCS_PASSTHROUGH, ParserAction.IGNORE, ParserState.DCS_PASSTHROUGH);\n  table.addMany([0x1b, 0x9c, 0x18, 0x1a], ParserState.DCS_PASSTHROUGH, ParserAction.DCS_UNHOOK, ParserState.GROUND);\n  // special handling of unicode chars\n  table.add(NON_ASCII_PRINTABLE, ParserState.GROUND, ParserAction.PRINT, ParserState.GROUND);\n  table.add(NON_ASCII_PRINTABLE, ParserState.OSC_STRING, ParserAction.OSC_PUT, ParserState.OSC_STRING);\n  table.add(NON_ASCII_PRINTABLE, ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n  table.add(NON_ASCII_PRINTABLE, ParserState.DCS_IGNORE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n  table.add(NON_ASCII_PRINTABLE, ParserState.DCS_PASSTHROUGH, ParserAction.DCS_PUT, ParserState.DCS_PASSTHROUGH);\n  return table;\n})();\n\n\n/**\n * EscapeSequenceParser.\n * This class implements the ANSI/DEC compatible parser described by\n * Paul Williams (https://vt100.net/emu/dec_ansi_parser).\n *\n * To implement custom ANSI compliant escape sequences it is not needed to\n * alter this parser, instead consider registering a custom handler.\n * For non ANSI compliant sequences change the transition table with\n * the optional `transitions` constructor argument and\n * reimplement the `parse` method.\n *\n * This parser is currently hardcoded to operate in ZDM (Zero Default Mode)\n * as suggested by the original parser, thus empty parameters are set to 0.\n * This this is not in line with the latest ECMA-48 specification\n * (ZDM was part of the early specs and got completely removed later on).\n *\n * Other than the original parser from vt100.net this parser supports\n * sub parameters in digital parameters separated by colons. Empty sub parameters\n * are set to -1 (no ZDM for sub parameters).\n *\n * About prefix and intermediate bytes:\n * This parser follows the assumptions of the vt100.net parser with these restrictions:\n * - only one prefix byte is allowed as first parameter byte, byte range 0x3c .. 0x3f\n * - max. two intermediates are respected, byte range 0x20 .. 0x2f\n * Note that this is not in line with ECMA-48 which does not limit either of those.\n * Furthermore ECMA-48 allows the prefix byte range at any param byte position. Currently\n * there are no known sequences that follow the broader definition of the specification.\n *\n * TODO: implement error recovery hook via error handler return values\n */\nexport class EscapeSequenceParser extends Disposable implements IEscapeSequenceParser {\n  public initialState: number;\n  public currentState: number;\n  public precedingJoinState: number; // UnicodeJoinProperties\n\n  // buffers over several parse calls\n  protected _params: Params;\n  protected _collect: number;\n\n  // handler lookup containers\n  protected _printHandler: PrintHandlerType;\n  protected _executeHandlers: { [flag: number]: ExecuteHandlerType };\n  protected _csiHandlers: IHandlerCollection<CsiHandlerType>;\n  protected _escHandlers: IHandlerCollection<EscHandlerType>;\n  protected readonly _oscParser: IOscParser;\n  protected readonly _dcsParser: IDcsParser;\n  protected _errorHandler: (state: IParsingState) => IParsingState;\n\n  // fallback handlers\n  protected _printHandlerFb: PrintFallbackHandlerType;\n  protected _executeHandlerFb: ExecuteFallbackHandlerType;\n  protected _csiHandlerFb: CsiFallbackHandlerType;\n  protected _escHandlerFb: EscFallbackHandlerType;\n  protected _errorHandlerFb: (state: IParsingState) => IParsingState;\n\n  // parser stack save for async handler support\n  protected _parseStack: IParserStackState = {\n    state: ParserStackType.NONE,\n    handlers: [],\n    handlerPos: 0,\n    transition: 0,\n    chunkPos: 0\n  };\n\n  constructor(\n    protected readonly _transitions: TransitionTable = VT500_TRANSITION_TABLE\n  ) {\n    super();\n\n    this.initialState = ParserState.GROUND;\n    this.currentState = this.initialState;\n    this._params = new Params(); // defaults to 32 storable params/subparams\n    this._params.addParam(0);    // ZDM\n    this._collect = 0;\n    this.precedingJoinState = 0;\n\n    // set default fallback handlers and handler lookup containers\n    this._printHandlerFb = (data, start, end): void => { };\n    this._executeHandlerFb = (code: number): void => { };\n    this._csiHandlerFb = (ident: number, params: IParams): void => { };\n    this._escHandlerFb = (ident: number): void => { };\n    this._errorHandlerFb = (state: IParsingState): IParsingState => state;\n    this._printHandler = this._printHandlerFb;\n    this._executeHandlers = Object.create(null);\n    this._csiHandlers = Object.create(null);\n    this._escHandlers = Object.create(null);\n    this._register(toDisposable(() => {\n      this._csiHandlers = Object.create(null);\n      this._executeHandlers = Object.create(null);\n      this._escHandlers = Object.create(null);\n    }));\n    this._oscParser = this._register(new OscParser());\n    this._dcsParser = this._register(new DcsParser());\n    this._errorHandler = this._errorHandlerFb;\n\n    // swallow 7bit ST (ESC+\\)\n    this.registerEscHandler({ final: '\\\\' }, () => true);\n  }\n\n  protected _identifier(id: IFunctionIdentifier, finalRange: number[] = [0x40, 0x7e]): number {\n    let res = 0;\n    if (id.prefix) {\n      if (id.prefix.length > 1) {\n        throw new Error('only one byte as prefix supported');\n      }\n      res = id.prefix.charCodeAt(0);\n      if (res && 0x3c > res || res > 0x3f) {\n        throw new Error('prefix must be in range 0x3c .. 0x3f');\n      }\n    }\n    if (id.intermediates) {\n      if (id.intermediates.length > 2) {\n        throw new Error('only two bytes as intermediates are supported');\n      }\n      for (let i = 0; i < id.intermediates.length; ++i) {\n        const intermediate = id.intermediates.charCodeAt(i);\n        if (0x20 > intermediate || intermediate > 0x2f) {\n          throw new Error('intermediate must be in range 0x20 .. 0x2f');\n        }\n        res <<= 8;\n        res |= intermediate;\n      }\n    }\n    if (id.final.length !== 1) {\n      throw new Error('final must be a single byte');\n    }\n    const finalCode = id.final.charCodeAt(0);\n    if (finalRange[0] > finalCode || finalCode > finalRange[1]) {\n      throw new Error(`final must be in range ${finalRange[0]} .. ${finalRange[1]}`);\n    }\n    res <<= 8;\n    res |= finalCode;\n\n    return res;\n  }\n\n  public identToString(ident: number): string {\n    const res: string[] = [];\n    while (ident) {\n      res.push(String.fromCharCode(ident & 0xFF));\n      ident >>= 8;\n    }\n    return res.reverse().join('');\n  }\n\n  public setPrintHandler(handler: PrintHandlerType): void {\n    this._printHandler = handler;\n  }\n  public clearPrintHandler(): void {\n    this._printHandler = this._printHandlerFb;\n  }\n\n  public registerEscHandler(id: IFunctionIdentifier, handler: EscHandlerType): IDisposable {\n    const ident = this._identifier(id, [0x30, 0x7e]);\n    if (this._escHandlers[ident] === undefined) {\n      this._escHandlers[ident] = [];\n    }\n    const handlerList = this._escHandlers[ident];\n    handlerList.push(handler);\n    return {\n      dispose: () => {\n        const handlerIndex = handlerList.indexOf(handler);\n        if (handlerIndex !== -1) {\n          handlerList.splice(handlerIndex, 1);\n        }\n      }\n    };\n  }\n  public clearEscHandler(id: IFunctionIdentifier): void {\n    if (this._escHandlers[this._identifier(id, [0x30, 0x7e])]) delete this._escHandlers[this._identifier(id, [0x30, 0x7e])];\n  }\n  public setEscHandlerFallback(handler: EscFallbackHandlerType): void {\n    this._escHandlerFb = handler;\n  }\n\n  public setExecuteHandler(flag: string, handler: ExecuteHandlerType): void {\n    this._executeHandlers[flag.charCodeAt(0)] = handler;\n  }\n  public clearExecuteHandler(flag: string): void {\n    if (this._executeHandlers[flag.charCodeAt(0)]) delete this._executeHandlers[flag.charCodeAt(0)];\n  }\n  public setExecuteHandlerFallback(handler: ExecuteFallbackHandlerType): void {\n    this._executeHandlerFb = handler;\n  }\n\n  public registerCsiHandler(id: IFunctionIdentifier, handler: CsiHandlerType): IDisposable {\n    const ident = this._identifier(id);\n    if (this._csiHandlers[ident] === undefined) {\n      this._csiHandlers[ident] = [];\n    }\n    const handlerList = this._csiHandlers[ident];\n    handlerList.push(handler);\n    return {\n      dispose: () => {\n        const handlerIndex = handlerList.indexOf(handler);\n        if (handlerIndex !== -1) {\n          handlerList.splice(handlerIndex, 1);\n        }\n      }\n    };\n  }\n  public clearCsiHandler(id: IFunctionIdentifier): void {\n    if (this._csiHandlers[this._identifier(id)]) delete this._csiHandlers[this._identifier(id)];\n  }\n  public setCsiHandlerFallback(callback: (ident: number, params: IParams) => void): void {\n    this._csiHandlerFb = callback;\n  }\n\n  public registerDcsHandler(id: IFunctionIdentifier, handler: IDcsHandler): IDisposable {\n    return this._dcsParser.registerHandler(this._identifier(id), handler);\n  }\n  public clearDcsHandler(id: IFunctionIdentifier): void {\n    this._dcsParser.clearHandler(this._identifier(id));\n  }\n  public setDcsHandlerFallback(handler: DcsFallbackHandlerType): void {\n    this._dcsParser.setHandlerFallback(handler);\n  }\n\n  public registerOscHandler(ident: number, handler: IOscHandler): IDisposable {\n    return this._oscParser.registerHandler(ident, handler);\n  }\n  public clearOscHandler(ident: number): void {\n    this._oscParser.clearHandler(ident);\n  }\n  public setOscHandlerFallback(handler: OscFallbackHandlerType): void {\n    this._oscParser.setHandlerFallback(handler);\n  }\n\n  public setErrorHandler(callback: (state: IParsingState) => IParsingState): void {\n    this._errorHandler = callback;\n  }\n  public clearErrorHandler(): void {\n    this._errorHandler = this._errorHandlerFb;\n  }\n\n  /**\n   * Reset parser to initial values.\n   *\n   * This can also be used to lift the improper continuation error condition\n   * when dealing with async handlers. Use this only as a last resort to silence\n   * that error when the terminal has no pending data to be processed. Note that\n   * the interrupted async handler might continue its work in the future messing\n   * up the terminal state even further.\n   */\n  public reset(): void {\n    this.currentState = this.initialState;\n    this._oscParser.reset();\n    this._dcsParser.reset();\n    this._params.reset();\n    this._params.addParam(0); // ZDM\n    this._collect = 0;\n    this.precedingJoinState = 0;\n    // abort pending continuation from async handler\n    // Here the RESET type indicates, that the next parse call will\n    // ignore any saved stack, instead continues sync with next codepoint from GROUND\n    if (this._parseStack.state !== ParserStackType.NONE) {\n      this._parseStack.state = ParserStackType.RESET;\n      this._parseStack.handlers = []; // also release handlers ref\n    }\n  }\n\n  /**\n   * Async parse support.\n   */\n  protected _preserveStack(\n    state: ParserStackType,\n    handlers: ResumableHandlersType,\n    handlerPos: number,\n    transition: number,\n    chunkPos: number\n  ): void {\n    this._parseStack.state = state;\n    this._parseStack.handlers = handlers;\n    this._parseStack.handlerPos = handlerPos;\n    this._parseStack.transition = transition;\n    this._parseStack.chunkPos = chunkPos;\n  }\n\n  /**\n   * Parse UTF32 codepoints in `data` up to `length`.\n   *\n   * Note: For several actions with high data load the parsing is optimized\n   * by using local read ahead loops with hardcoded conditions to\n   * avoid costly table lookups. Make sure that any change of table values\n   * will be reflected in the loop conditions as well and vice versa.\n   * Affected states/actions:\n   * - GROUND:PRINT\n   * - CSI_PARAM:PARAM\n   * - DCS_PARAM:PARAM\n   * - OSC_STRING:OSC_PUT\n   * - DCS_PASSTHROUGH:DCS_PUT\n   *\n   * Note on asynchronous handler support:\n   * Any handler returning a promise will be treated as asynchronous.\n   * To keep the in-band blocking working for async handlers, `parse` pauses execution,\n   * creates a stack save and returns the promise to the caller.\n   * For proper continuation of the paused state it is important\n   * to await the promise resolving. On resolve the parse must be repeated\n   * with the same chunk of data and the resolved value in `promiseResult`\n   * until no promise is returned.\n   *\n   * Important: With only sync handlers defined, parsing is completely synchronous as well.\n   * As soon as an async handler is involved, synchronous parsing is not possible anymore.\n   *\n   * Boilerplate for proper parsing of multiple chunks with async handlers:\n   *\n   * ```typescript\n   * async function parseMultipleChunks(chunks: Uint32Array[]): Promise<void> {\n   *   for (const chunk of chunks) {\n   *     let result: void | Promise<boolean>;\n   *     let prev: boolean | undefined;\n   *     while (result = parser.parse(chunk, chunk.length, prev)) {\n   *       prev = await result;\n   *     }\n   *   }\n   *   // finished parsing all chunks...\n   * }\n   * ```\n   */\n  public parse(data: Uint32Array, length: number, promiseResult?: boolean): void | Promise<boolean> {\n    let code = 0;\n    let transition = 0;\n    let start = 0;\n    let handlerResult: void | boolean | Promise<boolean>;\n\n    // resume from async handler\n    if (this._parseStack.state) {\n      // allow sync parser reset even in continuation mode\n      // Note: can be used to recover parser from improper continuation error below\n      if (this._parseStack.state === ParserStackType.RESET) {\n        this._parseStack.state = ParserStackType.NONE;\n        start = this._parseStack.chunkPos + 1; // continue with next codepoint in GROUND\n      } else {\n        if (promiseResult === undefined || this._parseStack.state === ParserStackType.FAIL) {\n          /**\n           * Reject further parsing on improper continuation after pausing. This is a really bad\n           * condition with screwed up execution order and prolly messed up terminal state,\n           * therefore we exit hard with an exception and reject any further parsing.\n           *\n           * Note: With `Terminal.write` usage this exception should never occur, as the top level\n           * calls are guaranteed to handle async conditions properly. If you ever encounter this\n           * exception in your terminal integration it indicates, that you injected data chunks to\n           * `InputHandler.parse` or `EscapeSequenceParser.parse` synchronously without waiting for\n           * continuation of a running async handler.\n           *\n           * It is possible to get rid of this error by calling `reset`. But dont rely on that, as\n           * the pending async handler still might mess up the terminal later. Instead fix the\n           * faulty async handling, so this error will not be thrown anymore.\n           */\n          this._parseStack.state = ParserStackType.FAIL;\n          throw new Error('improper continuation due to previous async handler, giving up parsing');\n        }\n\n        // we have to resume the old handler loop if:\n        // - return value of the promise was `false`\n        // - handlers are not exhausted yet\n        const handlers = this._parseStack.handlers;\n        let handlerPos = this._parseStack.handlerPos - 1;\n        switch (this._parseStack.state) {\n          case ParserStackType.CSI:\n            if (promiseResult === false && handlerPos > -1) {\n              for (; handlerPos >= 0; handlerPos--) {\n                handlerResult = (handlers as CsiHandlerType[])[handlerPos](this._params);\n                if (handlerResult === true) {\n                  break;\n                } else if (handlerResult instanceof Promise) {\n                  this._parseStack.handlerPos = handlerPos;\n                  return handlerResult;\n                }\n              }\n            }\n            this._parseStack.handlers = [];\n            break;\n          case ParserStackType.ESC:\n            if (promiseResult === false && handlerPos > -1) {\n              for (; handlerPos >= 0; handlerPos--) {\n                handlerResult = (handlers as EscHandlerType[])[handlerPos]();\n                if (handlerResult === true) {\n                  break;\n                } else if (handlerResult instanceof Promise) {\n                  this._parseStack.handlerPos = handlerPos;\n                  return handlerResult;\n                }\n              }\n            }\n            this._parseStack.handlers = [];\n            break;\n          case ParserStackType.DCS:\n            code = data[this._parseStack.chunkPos];\n            handlerResult = this._dcsParser.unhook(code !== 0x18 && code !== 0x1a, promiseResult);\n            if (handlerResult) {\n              return handlerResult;\n            }\n            if (code === 0x1b) this._parseStack.transition |= ParserState.ESCAPE;\n            this._params.reset();\n            this._params.addParam(0); // ZDM\n            this._collect = 0;\n            break;\n          case ParserStackType.OSC:\n            code = data[this._parseStack.chunkPos];\n            handlerResult = this._oscParser.end(code !== 0x18 && code !== 0x1a, promiseResult);\n            if (handlerResult) {\n              return handlerResult;\n            }\n            if (code === 0x1b) this._parseStack.transition |= ParserState.ESCAPE;\n            this._params.reset();\n            this._params.addParam(0); // ZDM\n            this._collect = 0;\n            break;\n        }\n        // cleanup before continuing with the main sync loop\n        this._parseStack.state = ParserStackType.NONE;\n        start = this._parseStack.chunkPos + 1;\n        this.precedingJoinState = 0;\n        this.currentState = this._parseStack.transition & TableAccess.TRANSITION_STATE_MASK;\n      }\n    }\n\n    // continue with main sync loop\n\n    // process input string\n    for (let i = start; i < length; ++i) {\n      code = data[i];\n\n      // normal transition & action lookup\n      transition = this._transitions.table[this.currentState << TableAccess.INDEX_STATE_SHIFT | (code < 0xa0 ? code : NON_ASCII_PRINTABLE)];\n      switch (transition >> TableAccess.TRANSITION_ACTION_SHIFT) {\n        case ParserAction.PRINT:\n          // read ahead with loop unrolling\n          // Note: 0x20 (SP) is included, 0x7F (DEL) is excluded\n          for (let j = i + 1; ; ++j) {\n            if (j >= length || (code = data[j]) < 0x20 || (code > 0x7e && code < NON_ASCII_PRINTABLE)) {\n              this._printHandler(data, i, j);\n              i = j - 1;\n              break;\n            }\n            if (++j >= length || (code = data[j]) < 0x20 || (code > 0x7e && code < NON_ASCII_PRINTABLE)) {\n              this._printHandler(data, i, j);\n              i = j - 1;\n              break;\n            }\n            if (++j >= length || (code = data[j]) < 0x20 || (code > 0x7e && code < NON_ASCII_PRINTABLE)) {\n              this._printHandler(data, i, j);\n              i = j - 1;\n              break;\n            }\n            if (++j >= length || (code = data[j]) < 0x20 || (code > 0x7e && code < NON_ASCII_PRINTABLE)) {\n              this._printHandler(data, i, j);\n              i = j - 1;\n              break;\n            }\n          }\n          break;\n        case ParserAction.EXECUTE:\n          if (this._executeHandlers[code]) this._executeHandlers[code]();\n          else this._executeHandlerFb(code);\n          this.precedingJoinState = 0;\n          break;\n        case ParserAction.IGNORE:\n          break;\n        case ParserAction.ERROR:\n          const inject: IParsingState = this._errorHandler(\n            {\n              position: i,\n              code,\n              currentState: this.currentState,\n              collect: this._collect,\n              params: this._params,\n              abort: false\n            });\n          if (inject.abort) return;\n          // inject values: currently not implemented\n          break;\n        case ParserAction.CSI_DISPATCH:\n          // Trigger CSI Handler\n          const handlers = this._csiHandlers[this._collect << 8 | code];\n          let j = handlers ? handlers.length - 1 : -1;\n          for (; j >= 0; j--) {\n            // true means success and to stop bubbling\n            // a promise indicates an async handler that needs to finish before progressing\n            handlerResult = handlers[j](this._params);\n            if (handlerResult === true) {\n              break;\n            } else if (handlerResult instanceof Promise) {\n              this._preserveStack(ParserStackType.CSI, handlers, j, transition, i);\n              return handlerResult;\n            }\n          }\n          if (j < 0) {\n            this._csiHandlerFb(this._collect << 8 | code, this._params);\n          }\n          this.precedingJoinState = 0;\n          break;\n        case ParserAction.PARAM:\n          // inner loop: digits (0x30 - 0x39) and ; (0x3b) and : (0x3a)\n          do {\n            switch (code) {\n              case 0x3b:\n                this._params.addParam(0);  // ZDM\n                break;\n              case 0x3a:\n                this._params.addSubParam(-1);\n                break;\n              default:  // 0x30 - 0x39\n                this._params.addDigit(code - 48);\n            }\n          } while (++i < length && (code = data[i]) > 0x2f && code < 0x3c);\n          i--;\n          break;\n        case ParserAction.COLLECT:\n          this._collect <<= 8;\n          this._collect |= code;\n          break;\n        case ParserAction.ESC_DISPATCH:\n          const handlersEsc = this._escHandlers[this._collect << 8 | code];\n          let jj = handlersEsc ? handlersEsc.length - 1 : -1;\n          for (; jj >= 0; jj--) {\n            // true means success and to stop bubbling\n            // a promise indicates an async handler that needs to finish before progressing\n            handlerResult = handlersEsc[jj]();\n            if (handlerResult === true) {\n              break;\n            } else if (handlerResult instanceof Promise) {\n              this._preserveStack(ParserStackType.ESC, handlersEsc, jj, transition, i);\n              return handlerResult;\n            }\n          }\n          if (jj < 0) {\n            this._escHandlerFb(this._collect << 8 | code);\n          }\n          this.precedingJoinState = 0;\n          break;\n        case ParserAction.CLEAR:\n          this._params.reset();\n          this._params.addParam(0); // ZDM\n          this._collect = 0;\n          break;\n        case ParserAction.DCS_HOOK:\n          this._dcsParser.hook(this._collect << 8 | code, this._params);\n          break;\n        case ParserAction.DCS_PUT:\n          // inner loop - exit DCS_PUT: 0x18, 0x1a, 0x1b, 0x7f, 0x80 - 0x9f\n          // unhook triggered by: 0x1b, 0x9c (success) and 0x18, 0x1a (abort)\n          for (let j = i + 1; ; ++j) {\n            if (j >= length || (code = data[j]) === 0x18 || code === 0x1a || code === 0x1b || (code > 0x7f && code < NON_ASCII_PRINTABLE)) {\n              this._dcsParser.put(data, i, j);\n              i = j - 1;\n              break;\n            }\n          }\n          break;\n        case ParserAction.DCS_UNHOOK:\n          handlerResult = this._dcsParser.unhook(code !== 0x18 && code !== 0x1a);\n          if (handlerResult) {\n            this._preserveStack(ParserStackType.DCS, [], 0, transition, i);\n            return handlerResult;\n          }\n          if (code === 0x1b) transition |= ParserState.ESCAPE;\n          this._params.reset();\n          this._params.addParam(0); // ZDM\n          this._collect = 0;\n          this.precedingJoinState = 0;\n          break;\n        case ParserAction.OSC_START:\n          this._oscParser.start();\n          break;\n        case ParserAction.OSC_PUT:\n          // inner loop: 0x20 (SP) included, 0x7F (DEL) included\n          for (let j = i + 1; ; j++) {\n            if (j >= length || (code = data[j]) < 0x20 || (code > 0x7f && code < NON_ASCII_PRINTABLE)) {\n              this._oscParser.put(data, i, j);\n              i = j - 1;\n              break;\n            }\n          }\n          break;\n        case ParserAction.OSC_END:\n          handlerResult = this._oscParser.end(code !== 0x18 && code !== 0x1a);\n          if (handlerResult) {\n            this._preserveStack(ParserStackType.OSC, [], 0, transition, i);\n            return handlerResult;\n          }\n          if (code === 0x1b) transition |= ParserState.ESCAPE;\n          this._params.reset();\n          this._params.addParam(0); // ZDM\n          this._collect = 0;\n          this.precedingJoinState = 0;\n          break;\n      }\n      this.currentState = transition & TableAccess.TRANSITION_STATE_MASK;\n    }\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IOscHandler, IHandlerCollection, OscFallbackHandlerType, IOscParser, ISubParserStackState } from 'common/parser/Types';\nimport { OscState, PAYLOAD_LIMIT } from 'common/parser/Constants';\nimport { utf32ToString } from 'common/input/TextDecoder';\nimport { IDisposable } from 'common/Types';\n\nconst EMPTY_HANDLERS: IOscHandler[] = [];\n\nexport class OscParser implements IOscParser {\n  private _state = OscState.START;\n  private _active = EMPTY_HANDLERS;\n  private _id = -1;\n  private _handlers: IHandlerCollection<IOscHandler> = Object.create(null);\n  private _handlerFb: OscFallbackHandlerType = () => { };\n  private _stack: ISubParserStackState = {\n    paused: false,\n    loopPosition: 0,\n    fallThrough: false\n  };\n\n  public registerHandler(ident: number, handler: IOscHandler): IDisposable {\n    if (this._handlers[ident] === undefined) {\n      this._handlers[ident] = [];\n    }\n    const handlerList = this._handlers[ident];\n    handlerList.push(handler);\n    return {\n      dispose: () => {\n        const handlerIndex = handlerList.indexOf(handler);\n        if (handlerIndex !== -1) {\n          handlerList.splice(handlerIndex, 1);\n        }\n      }\n    };\n  }\n  public clearHandler(ident: number): void {\n    if (this._handlers[ident]) delete this._handlers[ident];\n  }\n  public setHandlerFallback(handler: OscFallbackHandlerType): void {\n    this._handlerFb = handler;\n  }\n\n  public dispose(): void {\n    this._handlers = Object.create(null);\n    this._handlerFb = () => { };\n    this._active = EMPTY_HANDLERS;\n  }\n\n  public reset(): void {\n    // force cleanup handlers if payload was already sent\n    if (this._state === OscState.PAYLOAD) {\n      for (let j = this._stack.paused ? this._stack.loopPosition - 1 : this._active.length - 1; j >= 0; --j) {\n        this._active[j].end(false);\n      }\n    }\n    this._stack.paused = false;\n    this._active = EMPTY_HANDLERS;\n    this._id = -1;\n    this._state = OscState.START;\n  }\n\n  private _start(): void {\n    this._active = this._handlers[this._id] || EMPTY_HANDLERS;\n    if (!this._active.length) {\n      this._handlerFb(this._id, 'START');\n    } else {\n      for (let j = this._active.length - 1; j >= 0; j--) {\n        this._active[j].start();\n      }\n    }\n  }\n\n  private _put(data: Uint32Array, start: number, end: number): void {\n    if (!this._active.length) {\n      this._handlerFb(this._id, 'PUT', utf32ToString(data, start, end));\n    } else {\n      for (let j = this._active.length - 1; j >= 0; j--) {\n        this._active[j].put(data, start, end);\n      }\n    }\n  }\n\n  public start(): void {\n    // always reset leftover handlers\n    this.reset();\n    this._state = OscState.ID;\n  }\n\n  /**\n   * Put data to current OSC command.\n   * Expects the identifier of the OSC command in the form\n   * OSC id ; payload ST/BEL\n   * Payload chunks are not further processed and get\n   * directly passed to the handlers.\n   */\n  public put(data: Uint32Array, start: number, end: number): void {\n    if (this._state === OscState.ABORT) {\n      return;\n    }\n    if (this._state === OscState.ID) {\n      while (start < end) {\n        const code = data[start++];\n        if (code === 0x3b) {\n          this._state = OscState.PAYLOAD;\n          this._start();\n          break;\n        }\n        if (code < 0x30 || 0x39 < code) {\n          this._state = OscState.ABORT;\n          return;\n        }\n        if (this._id === -1) {\n          this._id = 0;\n        }\n        this._id = this._id * 10 + code - 48;\n      }\n    }\n    if (this._state === OscState.PAYLOAD && end - start > 0) {\n      this._put(data, start, end);\n    }\n  }\n\n  /**\n   * Indicates end of an OSC command.\n   * Whether the OSC got aborted or finished normally\n   * is indicated by `success`.\n   */\n  public end(success: boolean, promiseResult: boolean = true): void | Promise<boolean> {\n    if (this._state === OscState.START) {\n      return;\n    }\n    // do nothing if command was faulty\n    if (this._state !== OscState.ABORT) {\n      // if we are still in ID state and get an early end\n      // means that the command has no payload thus we still have\n      // to announce START and send END right after\n      if (this._state === OscState.ID) {\n        this._start();\n      }\n\n      if (!this._active.length) {\n        this._handlerFb(this._id, 'END', success);\n      } else {\n        let handlerResult: boolean | Promise<boolean> = false;\n        let j = this._active.length - 1;\n        let fallThrough = false;\n        if (this._stack.paused) {\n          j = this._stack.loopPosition - 1;\n          handlerResult = promiseResult;\n          fallThrough = this._stack.fallThrough;\n          this._stack.paused = false;\n        }\n        if (!fallThrough && handlerResult === false) {\n          for (; j >= 0; j--) {\n            handlerResult = this._active[j].end(success);\n            if (handlerResult === true) {\n              break;\n            } else if (handlerResult instanceof Promise) {\n              this._stack.paused = true;\n              this._stack.loopPosition = j;\n              this._stack.fallThrough = false;\n              return handlerResult;\n            }\n          }\n          j--;\n        }\n        // cleanup left over handlers\n        // we always have to call .end for proper cleanup,\n        // here we use `success` to indicate whether a handler should execute\n        for (; j >= 0; j--) {\n          handlerResult = this._active[j].end(false);\n          if (handlerResult instanceof Promise) {\n            this._stack.paused = true;\n            this._stack.loopPosition = j;\n            this._stack.fallThrough = true;\n            return handlerResult;\n          }\n        }\n      }\n\n    }\n    this._active = EMPTY_HANDLERS;\n    this._id = -1;\n    this._state = OscState.START;\n  }\n}\n\n/**\n * Convenient class to allow attaching string based handler functions\n * as OSC handlers.\n */\nexport class OscHandler implements IOscHandler {\n  private _data = '';\n  private _hitLimit: boolean = false;\n\n  constructor(private _handler: (data: string) => boolean | Promise<boolean>) { }\n\n  public start(): void {\n    this._data = '';\n    this._hitLimit = false;\n  }\n\n  public put(data: Uint32Array, start: number, end: number): void {\n    if (this._hitLimit) {\n      return;\n    }\n    this._data += utf32ToString(data, start, end);\n    if (this._data.length > PAYLOAD_LIMIT) {\n      this._data = '';\n      this._hitLimit = true;\n    }\n  }\n\n  public end(success: boolean): boolean | Promise<boolean> {\n    let ret: boolean | Promise<boolean> = false;\n    if (this._hitLimit) {\n      ret = false;\n    } else if (success) {\n      ret = this._handler(this._data);\n      if (ret instanceof Promise) {\n        // need to hold data until `ret` got resolved\n        // dont care for errors, data will be freed anyway on next start\n        return ret.then(res => {\n          this._data = '';\n          this._hitLimit = false;\n          return res;\n        });\n      }\n    }\n    this._data = '';\n    this._hitLimit = false;\n    return ret;\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IParams, ParamsArray } from 'common/parser/Types';\n\n// max value supported for a single param/subparam (clamped to positive int32 range)\nconst MAX_VALUE = 0x7FFFFFFF;\n// max allowed subparams for a single sequence (hardcoded limitation)\nconst MAX_SUBPARAMS = 256;\n\n/**\n * Params storage class.\n * This type is used by the parser to accumulate sequence parameters and sub parameters\n * and transmit them to the input handler actions.\n *\n * NOTES:\n *  - params object for action handlers is borrowed, use `.toArray` or `.clone` to get a copy\n *  - never read beyond `params.length - 1` (likely to contain arbitrary data)\n *  - `.getSubParams` returns a borrowed typed array, use `.getSubParamsAll` for cloned sub params\n *  - hardcoded limitations:\n *    - max. value for a single (sub) param is 2^31 - 1 (greater values are clamped to that)\n *    - max. 256 sub params possible\n *    - negative values are not allowed beside -1 (placeholder for default value)\n *\n * About ZDM (Zero Default Mode):\n * ZDM is not orchestrated by this class. If the parser is in ZDM,\n * it should add 0 for empty params, otherwise -1. This does not apply\n * to subparams, empty subparams should always be added with -1.\n */\nexport class Params implements IParams {\n  // params store and length\n  public params: Int32Array;\n  public length: number;\n\n  // sub params store and length\n  protected _subParams: Int32Array;\n  protected _subParamsLength: number;\n\n  // sub params offsets from param: param idx --> [start, end] offset\n  private _subParamsIdx: Uint16Array;\n  private _rejectDigits: boolean;\n  private _rejectSubDigits: boolean;\n  private _digitIsSub: boolean;\n\n  /**\n   * Create a `Params` type from JS array representation.\n   */\n  public static fromArray(values: ParamsArray): Params {\n    const params = new Params();\n    if (!values.length) {\n      return params;\n    }\n    // skip leading sub params\n    for (let i = (Array.isArray(values[0])) ? 1 : 0; i < values.length; ++i) {\n      const value = values[i];\n      if (Array.isArray(value)) {\n        for (let k = 0; k < value.length; ++k) {\n          params.addSubParam(value[k]);\n        }\n      } else {\n        params.addParam(value);\n      }\n    }\n    return params;\n  }\n\n  /**\n   * @param maxLength max length of storable parameters\n   * @param maxSubParamsLength max length of storable sub parameters\n   */\n  constructor(public maxLength: number = 32, public maxSubParamsLength: number = 32) {\n    if (maxSubParamsLength > MAX_SUBPARAMS) {\n      throw new Error('maxSubParamsLength must not be greater than 256');\n    }\n    this.params = new Int32Array(maxLength);\n    this.length = 0;\n    this._subParams = new Int32Array(maxSubParamsLength);\n    this._subParamsLength = 0;\n    this._subParamsIdx = new Uint16Array(maxLength);\n    this._rejectDigits = false;\n    this._rejectSubDigits = false;\n    this._digitIsSub = false;\n  }\n\n  /**\n   * Clone object.\n   */\n  public clone(): Params {\n    const newParams = new Params(this.maxLength, this.maxSubParamsLength);\n    newParams.params.set(this.params);\n    newParams.length = this.length;\n    newParams._subParams.set(this._subParams);\n    newParams._subParamsLength = this._subParamsLength;\n    newParams._subParamsIdx.set(this._subParamsIdx);\n    newParams._rejectDigits = this._rejectDigits;\n    newParams._rejectSubDigits = this._rejectSubDigits;\n    newParams._digitIsSub = this._digitIsSub;\n    return newParams;\n  }\n\n  /**\n   * Get a JS array representation of the current parameters and sub parameters.\n   * The array is structured as follows:\n   *    sequence: \"1;2:3:4;5::6\"\n   *    array   : [1, 2, [3, 4], 5, [-1, 6]]\n   */\n  public toArray(): ParamsArray {\n    const res: ParamsArray = [];\n    for (let i = 0; i < this.length; ++i) {\n      res.push(this.params[i]);\n      const start = this._subParamsIdx[i] >> 8;\n      const end = this._subParamsIdx[i] & 0xFF;\n      if (end - start > 0) {\n        res.push(Array.prototype.slice.call(this._subParams, start, end));\n      }\n    }\n    return res;\n  }\n\n  /**\n   * Reset to initial empty state.\n   */\n  public reset(): void {\n    this.length = 0;\n    this._subParamsLength = 0;\n    this._rejectDigits = false;\n    this._rejectSubDigits = false;\n    this._digitIsSub = false;\n  }\n\n  /**\n   * Add a parameter value.\n   * `Params` only stores up to `maxLength` parameters, any later\n   * parameter will be ignored.\n   * Note: VT devices only stored up to 16 values, xterm seems to\n   * store up to 30.\n   */\n  public addParam(value: number): void {\n    this._digitIsSub = false;\n    if (this.length >= this.maxLength) {\n      this._rejectDigits = true;\n      return;\n    }\n    if (value < -1) {\n      throw new Error('values lesser than -1 are not allowed');\n    }\n    this._subParamsIdx[this.length] = this._subParamsLength << 8 | this._subParamsLength;\n    this.params[this.length++] = value > MAX_VALUE ? MAX_VALUE : value;\n  }\n\n  /**\n   * Add a sub parameter value.\n   * The sub parameter is automatically associated with the last parameter value.\n   * Thus it is not possible to add a subparameter without any parameter added yet.\n   * `Params` only stores up to `subParamsLength` sub parameters, any later\n   * sub parameter will be ignored.\n   */\n  public addSubParam(value: number): void {\n    this._digitIsSub = true;\n    if (!this.length) {\n      return;\n    }\n    if (this._rejectDigits || this._subParamsLength >= this.maxSubParamsLength) {\n      this._rejectSubDigits = true;\n      return;\n    }\n    if (value < -1) {\n      throw new Error('values lesser than -1 are not allowed');\n    }\n    this._subParams[this._subParamsLength++] = value > MAX_VALUE ? MAX_VALUE : value;\n    this._subParamsIdx[this.length - 1]++;\n  }\n\n  /**\n   * Whether parameter at index `idx` has sub parameters.\n   */\n  public hasSubParams(idx: number): boolean {\n    return ((this._subParamsIdx[idx] & 0xFF) - (this._subParamsIdx[idx] >> 8) > 0);\n  }\n\n  /**\n   * Return sub parameters for parameter at index `idx`.\n   * Note: The values are borrowed, thus you need to copy\n   * the values if you need to hold them in nonlocal scope.\n   */\n  public getSubParams(idx: number): Int32Array | null {\n    const start = this._subParamsIdx[idx] >> 8;\n    const end = this._subParamsIdx[idx] & 0xFF;\n    if (end - start > 0) {\n      return this._subParams.subarray(start, end);\n    }\n    return null;\n  }\n\n  /**\n   * Return all sub parameters as {idx: subparams} mapping.\n   * Note: The values are not borrowed.\n   */\n  public getSubParamsAll(): {[idx: number]: Int32Array} {\n    const result: {[idx: number]: Int32Array} = {};\n    for (let i = 0; i < this.length; ++i) {\n      const start = this._subParamsIdx[i] >> 8;\n      const end = this._subParamsIdx[i] & 0xFF;\n      if (end - start > 0) {\n        result[i] = this._subParams.slice(start, end);\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Add a single digit value to current parameter.\n   * This is used by the parser to account digits on a char by char basis.\n   */\n  public addDigit(value: number): void {\n    let length;\n    if (this._rejectDigits\n      || !(length = this._digitIsSub ? this._subParamsLength : this.length)\n      || (this._digitIsSub && this._rejectSubDigits)\n    ) {\n      return;\n    }\n\n    const store = this._digitIsSub ? this._subParams : this.params;\n    const cur = store[length - 1];\n    store[length - 1] = ~cur ? Math.min(cur * 10 + value, MAX_VALUE) : value;\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminalAddon, IDisposable, Terminal } from '@xterm/xterm';\n\nexport interface ILoadedAddon {\n  instance: ITerminalAddon;\n  dispose: () => void;\n  isDisposed: boolean;\n}\n\nexport class AddonManager implements IDisposable {\n  protected _addons: ILoadedAddon[] = [];\n\n  public dispose(): void {\n    for (let i = this._addons.length - 1; i >= 0; i--) {\n      this._addons[i].instance.dispose();\n    }\n  }\n\n  public loadAddon(terminal: Terminal, instance: ITerminalAddon): void {\n    const loadedAddon: ILoadedAddon = {\n      instance,\n      dispose: instance.dispose,\n      isDisposed: false\n    };\n    this._addons.push(loadedAddon);\n    instance.dispose = () => this._wrappedAddonDispose(loadedAddon);\n    instance.activate(terminal as any);\n  }\n\n  private _wrappedAddonDispose(loadedAddon: ILoadedAddon): void {\n    if (loadedAddon.isDisposed) {\n      // Do nothing if already disposed\n      return;\n    }\n    let index = -1;\n    for (let i = 0; i < this._addons.length; i++) {\n      if (this._addons[i] === loadedAddon) {\n        index = i;\n        break;\n      }\n    }\n    if (index === -1) {\n      throw new Error('Could not dispose an addon that has not been loaded');\n    }\n    loadedAddon.isDisposed = true;\n    loadedAddon.dispose.apply(loadedAddon.instance);\n    this._addons.splice(index, 1);\n  }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBuffer as IBufferApi, IBufferLine as IBufferLineApi, IBufferCell as IBufferCellApi } from '@xterm/xterm';\nimport { IBuffer } from 'common/buffer/Types';\nimport { BufferLineApiView } from 'common/public/BufferLineApiView';\nimport { CellData } from 'common/buffer/CellData';\n\nexport class BufferApiView implements IBufferApi {\n  constructor(\n    private _buffer: IBuffer,\n    public readonly type: 'normal' | 'alternate'\n  ) { }\n\n  public init(buffer: IBuffer): BufferApiView {\n    this._buffer = buffer;\n    return this;\n  }\n\n  public get cursorY(): number { return this._buffer.y; }\n  public get cursorX(): number { return this._buffer.x; }\n  public get viewportY(): number { return this._buffer.ydisp; }\n  public get baseY(): number { return this._buffer.ybase; }\n  public get length(): number { return this._buffer.lines.length; }\n  public getLine(y: number): IBufferLineApi | undefined {\n    const line = this._buffer.lines.get(y);\n    if (!line) {\n      return undefined;\n    }\n    return new BufferLineApiView(line);\n  }\n  public getNullCell(): IBufferCellApi { return new CellData(); }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CellData } from 'common/buffer/CellData';\nimport { IBufferLine, ICellData } from 'common/Types';\nimport { IBufferCell as IBufferCellApi, IBufferLine as IBufferLineApi } from '@xterm/xterm';\n\nexport class BufferLineApiView implements IBufferLineApi {\n  constructor(private _line: IBufferLine) { }\n\n  public get isWrapped(): boolean { return this._line.isWrapped; }\n  public get length(): number { return this._line.length; }\n  public getCell(x: number, cell?: IBufferCellApi): IBufferCellApi | undefined {\n    if (x < 0 || x >= this._line.length) {\n      return undefined;\n    }\n\n    if (cell) {\n      this._line.loadCell(x, cell as ICellData);\n      return cell;\n    }\n    return this._line.loadCell(x, new CellData());\n  }\n  public translateToString(trimRight?: boolean, startColumn?: number, endColumn?: number): string {\n    return this._line.translateToString(trimRight, startColumn, endColumn);\n  }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBuffer as IBufferApi, IBufferNamespace as IBufferNamespaceApi } from '@xterm/xterm';\nimport { BufferApiView } from 'common/public/BufferApiView';\nimport { ICoreTerminal } from 'common/Types';\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport { Emitter } from 'vs/base/common/event';\n\nexport class BufferNamespaceApi extends Disposable implements IBufferNamespaceApi {\n  private _normal: BufferApiView;\n  private _alternate: BufferApiView;\n\n  private readonly _onBufferChange = this._register(new Emitter<IBufferApi>());\n  public readonly onBufferChange = this._onBufferChange.event;\n\n  constructor(private _core: ICoreTerminal) {\n    super();\n    this._normal = new BufferApiView(this._core.buffers.normal, 'normal');\n    this._alternate = new BufferApiView(this._core.buffers.alt, 'alternate');\n    this._core.buffers.onBufferActivate(() => this._onBufferChange.fire(this.active));\n  }\n  public get active(): IBufferApi {\n    if (this._core.buffers.active === this._core.buffers.normal) { return this.normal; }\n    if (this._core.buffers.active === this._core.buffers.alt) { return this.alternate; }\n    throw new Error('Active buffer is neither normal nor alternate');\n  }\n  public get normal(): IBufferApi {\n    return this._normal.init(this._core.buffers.normal);\n  }\n  public get alternate(): IBufferApi {\n    return this._alternate.init(this._core.buffers.alt);\n  }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IParams } from 'common/parser/Types';\nimport { IDisposable, IFunctionIdentifier, IParser } from '@xterm/xterm';\nimport { ICoreTerminal } from 'common/Types';\n\nexport class ParserApi implements IParser {\n  constructor(private _core: ICoreTerminal) { }\n\n  public registerCsiHandler(id: IFunctionIdentifier, callback: (params: (number | number[])[]) => boolean | Promise<boolean>): IDisposable {\n    return this._core.registerCsiHandler(id, (params: IParams) => callback(params.toArray()));\n  }\n  public addCsiHandler(id: IFunctionIdentifier, callback: (params: (number | number[])[]) => boolean | Promise<boolean>): IDisposable {\n    return this.registerCsiHandler(id, callback);\n  }\n  public registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: (number | number[])[]) => boolean | Promise<boolean>): IDisposable {\n    return this._core.registerDcsHandler(id, (data: string, params: IParams) => callback(data, params.toArray()));\n  }\n  public addDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: (number | number[])[]) => boolean | Promise<boolean>): IDisposable {\n    return this.registerDcsHandler(id, callback);\n  }\n  public registerEscHandler(id: IFunctionIdentifier, handler: () => boolean | Promise<boolean>): IDisposable {\n    return this._core.registerEscHandler(id, handler);\n  }\n  public addEscHandler(id: IFunctionIdentifier, handler: () => boolean | Promise<boolean>): IDisposable {\n    return this.registerEscHandler(id, handler);\n  }\n  public registerOscHandler(ident: number, callback: (data: string) => boolean | Promise<boolean>): IDisposable {\n    return this._core.registerOscHandler(ident, callback);\n  }\n  public addOscHandler(ident: number, callback: (data: string) => boolean | Promise<boolean>): IDisposable {\n    return this.registerOscHandler(ident, callback);\n  }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreTerminal } from 'common/Types';\nimport { IUnicodeHandling, IUnicodeVersionProvider } from '@xterm/xterm';\n\nexport class UnicodeApi implements IUnicodeHandling {\n  constructor(private _core: ICoreTerminal) { }\n\n  public register(provider: IUnicodeVersionProvider): void {\n    this._core.unicodeService.register(provider);\n  }\n\n  public get versions(): string[] {\n    return this._core.unicodeService.versions;\n  }\n\n  public get activeVersion(): string {\n    return this._core.unicodeService.activeVersion;\n  }\n\n  public set activeVersion(version: string) {\n    this._core.unicodeService.activeVersion = version;\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport { IAttributeData, IBufferLine } from 'common/Types';\nimport { BufferSet } from 'common/buffer/BufferSet';\nimport { IBuffer, IBufferSet } from 'common/buffer/Types';\nimport { IBufferService, IOptionsService, type IBufferResizeEvent } from 'common/services/Services';\nimport { Emitter } from 'vs/base/common/event';\n\nexport const MINIMUM_COLS = 2; // Less than 2 can mess with wide chars\nexport const MINIMUM_ROWS = 1;\n\nexport class BufferService extends Disposable implements IBufferService {\n  public serviceBrand: any;\n\n  public cols: number;\n  public rows: number;\n  public buffers: IBufferSet;\n  /** Whether the user is scrolling (locks the scroll position) */\n  public isUserScrolling: boolean = false;\n\n  private readonly _onResize = this._register(new Emitter<IBufferResizeEvent>());\n  public readonly onResize = this._onResize.event;\n  private readonly _onScroll = this._register(new Emitter<number>());\n  public readonly onScroll = this._onScroll.event;\n\n  public get buffer(): IBuffer { return this.buffers.active; }\n\n  /** An IBufferline to clone/copy from for new blank lines */\n  private _cachedBlankLine: IBufferLine | undefined;\n\n  constructor(@IOptionsService optionsService: IOptionsService) {\n    super();\n    this.cols = Math.max(optionsService.rawOptions.cols || 0, MINIMUM_COLS);\n    this.rows = Math.max(optionsService.rawOptions.rows || 0, MINIMUM_ROWS);\n    this.buffers = this._register(new BufferSet(optionsService, this));\n    this._register(this.buffers.onBufferActivate(e => {\n      this._onScroll.fire(e.activeBuffer.ydisp);\n    }));\n  }\n\n  public resize(cols: number, rows: number): void {\n    const colsChanged = this.cols !== cols;\n    const rowsChanged = this.rows !== rows;\n    this.cols = cols;\n    this.rows = rows;\n    this.buffers.resize(cols, rows);\n    this._onResize.fire({ cols, rows, colsChanged, rowsChanged });\n  }\n\n  public reset(): void {\n    this.buffers.reset();\n    this.isUserScrolling = false;\n  }\n\n  /**\n   * Scroll the terminal down 1 row, creating a blank line.\n   * @param eraseAttr The attribute data to use the for blank line.\n   * @param isWrapped Whether the new line is wrapped from the previous line.\n   */\n  public scroll(eraseAttr: IAttributeData, isWrapped: boolean = false): void {\n    const buffer = this.buffer;\n\n    let newLine: IBufferLine | undefined;\n    newLine = this._cachedBlankLine;\n    if (!newLine || newLine.length !== this.cols || newLine.getFg(0) !== eraseAttr.fg || newLine.getBg(0) !== eraseAttr.bg) {\n      newLine = buffer.getBlankLine(eraseAttr, isWrapped);\n      this._cachedBlankLine = newLine;\n    }\n    newLine.isWrapped = isWrapped;\n\n    const topRow = buffer.ybase + buffer.scrollTop;\n    const bottomRow = buffer.ybase + buffer.scrollBottom;\n\n    if (buffer.scrollTop === 0) {\n      // Determine whether the buffer is going to be trimmed after insertion.\n      const willBufferBeTrimmed = buffer.lines.isFull;\n\n      // Insert the line using the fastest method\n      if (bottomRow === buffer.lines.length - 1) {\n        if (willBufferBeTrimmed) {\n          buffer.lines.recycle().copyFrom(newLine);\n        } else {\n          buffer.lines.push(newLine.clone());\n        }\n      } else {\n        buffer.lines.splice(bottomRow + 1, 0, newLine.clone());\n      }\n\n      // Only adjust ybase and ydisp when the buffer is not trimmed\n      if (!willBufferBeTrimmed) {\n        buffer.ybase++;\n        // Only scroll the ydisp with ybase if the user has not scrolled up\n        if (!this.isUserScrolling) {\n          buffer.ydisp++;\n        }\n      } else {\n        // When the buffer is full and the user has scrolled up, keep the text\n        // stable unless ydisp is right at the top\n        if (this.isUserScrolling) {\n          buffer.ydisp = Math.max(buffer.ydisp - 1, 0);\n        }\n      }\n    } else {\n      // scrollTop is non-zero which means no line will be going to the\n      // scrollback, instead we can just shift them in-place.\n      const scrollRegionHeight = bottomRow - topRow + 1 /* as it's zero-based */;\n      buffer.lines.shiftElements(topRow + 1, scrollRegionHeight - 1, -1);\n      buffer.lines.set(bottomRow, newLine.clone());\n    }\n\n    // Move the viewport to the bottom of the buffer unless the user is\n    // scrolling.\n    if (!this.isUserScrolling) {\n      buffer.ydisp = buffer.ybase;\n    }\n\n    this._onScroll.fire(buffer.ydisp);\n  }\n\n  /**\n   * Scroll the display of the terminal\n   * @param disp The number of lines to scroll down (negative scroll up).\n   * @param suppressScrollEvent Don't emit the scroll event as scrollLines. This is used\n   * to avoid unwanted events being handled by the viewport when the event was triggered from the\n   * viewport originally.\n   */\n  public scrollLines(disp: number, suppressScrollEvent?: boolean): void {\n    const buffer = this.buffer;\n    if (disp < 0) {\n      if (buffer.ydisp === 0) {\n        return;\n      }\n      this.isUserScrolling = true;\n    } else if (disp + buffer.ydisp >= buffer.ybase) {\n      this.isUserScrolling = false;\n    }\n\n    const oldYdisp = buffer.ydisp;\n    buffer.ydisp = Math.max(Math.min(buffer.ydisp + disp, buffer.ybase), 0);\n\n    // No change occurred, don't trigger scroll/refresh\n    if (oldYdisp === buffer.ydisp) {\n      return;\n    }\n\n    if (!suppressScrollEvent) {\n      this._onScroll.fire(buffer.ydisp);\n    }\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICharsetService } from 'common/services/Services';\nimport { ICharset } from 'common/Types';\n\nexport class CharsetService implements ICharsetService {\n  public serviceBrand: any;\n\n  public charset: ICharset | undefined;\n  public glevel: number = 0;\n\n  private _charsets: (ICharset | undefined)[] = [];\n\n  public reset(): void {\n    this.charset = undefined;\n    this._charsets = [];\n    this.glevel = 0;\n  }\n\n  public setgLevel(g: number): void {\n    this.glevel = g;\n    this.charset = this._charsets[g];\n  }\n\n  public setgCharset(g: number, charset: ICharset | undefined): void {\n    this._charsets[g] = charset;\n    if (this.glevel === g) {\n      this.charset = charset;\n    }\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IBufferService, ICoreService, ICoreMouseService, IOptionsService } from 'common/services/Services';\nimport { ICoreMouseProtocol, ICoreMouseEvent, CoreMouseEncoding, CoreMouseEventType, CoreMouseButton, CoreMouseAction } from 'common/Types';\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport { Emitter } from 'vs/base/common/event';\n\n/**\n * Supported default protocols.\n */\nconst DEFAULT_PROTOCOLS: { [key: string]: ICoreMouseProtocol } = {\n  /**\n   * NONE\n   * Events: none\n   * Modifiers: none\n   */\n  NONE: {\n    events: CoreMouseEventType.NONE,\n    restrict: () => false\n  },\n  /**\n   * X10\n   * Events: mousedown\n   * Modifiers: none\n   */\n  X10: {\n    events: CoreMouseEventType.DOWN,\n    restrict: (e: ICoreMouseEvent) => {\n      // no wheel, no move, no up\n      if (e.button === CoreMouseButton.WHEEL || e.action !== CoreMouseAction.DOWN) {\n        return false;\n      }\n      // no modifiers\n      e.ctrl = false;\n      e.alt = false;\n      e.shift = false;\n      return true;\n    }\n  },\n  /**\n   * VT200\n   * Events: mousedown / mouseup / wheel\n   * Modifiers: all\n   */\n  VT200: {\n    events: CoreMouseEventType.DOWN | CoreMouseEventType.UP | CoreMouseEventType.WHEEL,\n    restrict: (e: ICoreMouseEvent) => {\n      // no move\n      if (e.action === CoreMouseAction.MOVE) {\n        return false;\n      }\n      return true;\n    }\n  },\n  /**\n   * DRAG\n   * Events: mousedown / mouseup / wheel / mousedrag\n   * Modifiers: all\n   */\n  DRAG: {\n    events: CoreMouseEventType.DOWN | CoreMouseEventType.UP | CoreMouseEventType.WHEEL | CoreMouseEventType.DRAG,\n    restrict: (e: ICoreMouseEvent) => {\n      // no move without button\n      if (e.action === CoreMouseAction.MOVE && e.button === CoreMouseButton.NONE) {\n        return false;\n      }\n      return true;\n    }\n  },\n  /**\n   * ANY\n   * Events: all mouse related events\n   * Modifiers: all\n   */\n  ANY: {\n    events:\n      CoreMouseEventType.DOWN | CoreMouseEventType.UP | CoreMouseEventType.WHEEL\n      | CoreMouseEventType.DRAG | CoreMouseEventType.MOVE,\n    restrict: (e: ICoreMouseEvent) => true\n  }\n};\n\nconst enum Modifiers {\n  SHIFT = 4,\n  ALT = 8,\n  CTRL = 16\n}\n\n// helper for default encoders to generate the event code.\nfunction eventCode(e: ICoreMouseEvent, isSGR: boolean): number {\n  let code = (e.ctrl ? Modifiers.CTRL : 0) | (e.shift ? Modifiers.SHIFT : 0) | (e.alt ? Modifiers.ALT : 0);\n  if (e.button === CoreMouseButton.WHEEL) {\n    code |= 64;\n    code |= e.action;\n  } else {\n    code |= e.button & 3;\n    if (e.button & 4) {\n      code |= 64;\n    }\n    if (e.button & 8) {\n      code |= 128;\n    }\n    if (e.action === CoreMouseAction.MOVE) {\n      code |= CoreMouseAction.MOVE;\n    } else if (e.action === CoreMouseAction.UP && !isSGR) {\n      // special case - only SGR can report button on release\n      // all others have to go with NONE\n      code |= CoreMouseButton.NONE;\n    }\n  }\n  return code;\n}\n\nconst S = String.fromCharCode;\n\n/**\n * Supported default encodings.\n */\nconst DEFAULT_ENCODINGS: { [key: string]: CoreMouseEncoding } = {\n  /**\n   * DEFAULT - CSI M Pb Px Py\n   * Single byte encoding for coords and event code.\n   * Can encode values up to 223 (1-based).\n   */\n  DEFAULT: (e: ICoreMouseEvent) => {\n    const params = [eventCode(e, false) + 32, e.col + 32, e.row + 32];\n    // supress mouse report if we exceed addressible range\n    // Note this is handled differently by emulators\n    // - xterm:         sends 0;0 coords instead\n    // - vte, konsole:  no report\n    if (params[0] > 255 || params[1] > 255 || params[2] > 255) {\n      return '';\n    }\n    return `\\x1b[M${S(params[0])}${S(params[1])}${S(params[2])}`;\n  },\n  /**\n   * SGR - CSI < Pb ; Px ; Py M|m\n   * No encoding limitation.\n   * Can report button on release and works with a well formed sequence.\n   */\n  SGR: (e: ICoreMouseEvent) => {\n    const final = (e.action === CoreMouseAction.UP && e.button !== CoreMouseButton.WHEEL) ? 'm' : 'M';\n    return `\\x1b[<${eventCode(e, true)};${e.col};${e.row}${final}`;\n  },\n  SGR_PIXELS: (e: ICoreMouseEvent) => {\n    const final = (e.action === CoreMouseAction.UP && e.button !== CoreMouseButton.WHEEL) ? 'm' : 'M';\n    return `\\x1b[<${eventCode(e, true)};${e.x};${e.y}${final}`;\n  }\n};\n\n/**\n * CoreMouseService\n *\n * Provides mouse tracking reports with different protocols and encodings.\n *  - protocols: NONE (default), X10, VT200, DRAG, ANY\n *  - encodings: DEFAULT, SGR (UTF8, URXVT removed in #2507)\n *\n * Custom protocols/encodings can be added by `addProtocol` / `addEncoding`.\n * To activate a protocol/encoding, set `activeProtocol` / `activeEncoding`.\n * Switching a protocol will send a notification event `onProtocolChange`\n * with a list of needed events to track.\n *\n * The service handles the mouse tracking state and decides whether to send\n * a tracking report to the backend based on protocol and encoding limitations.\n * To send a mouse event call `triggerMouseEvent`.\n */\nexport class CoreMouseService extends Disposable implements ICoreMouseService {\n  public serviceBrand: any;\n\n  private _protocols: { [name: string]: ICoreMouseProtocol } = {};\n  private _encodings: { [name: string]: CoreMouseEncoding } = {};\n  private _activeProtocol: string = '';\n  private _activeEncoding: string = '';\n  private _lastEvent: ICoreMouseEvent | null = null;\n  private _wheelPartialScroll: number = 0;\n\n  private readonly _onProtocolChange = this._register(new Emitter<CoreMouseEventType>());\n  public readonly onProtocolChange = this._onProtocolChange.event;\n\n  constructor(\n    @IBufferService private readonly _bufferService: IBufferService,\n    @ICoreService private readonly _coreService: ICoreService,\n    @IOptionsService private readonly _optionsService: IOptionsService\n  ) {\n    super();\n    // register default protocols and encodings\n    for (const name of Object.keys(DEFAULT_PROTOCOLS)) this.addProtocol(name, DEFAULT_PROTOCOLS[name]);\n    for (const name of Object.keys(DEFAULT_ENCODINGS)) this.addEncoding(name, DEFAULT_ENCODINGS[name]);\n    // call reset to set defaults\n    this.reset();\n  }\n\n  public addProtocol(name: string, protocol: ICoreMouseProtocol): void {\n    this._protocols[name] = protocol;\n  }\n\n  public addEncoding(name: string, encoding: CoreMouseEncoding): void {\n    this._encodings[name] = encoding;\n  }\n\n  public get activeProtocol(): string {\n    return this._activeProtocol;\n  }\n\n  public get areMouseEventsActive(): boolean {\n    return this._protocols[this._activeProtocol].events !== 0;\n  }\n\n  public set activeProtocol(name: string) {\n    if (!this._protocols[name]) {\n      throw new Error(`unknown protocol \"${name}\"`);\n    }\n    this._activeProtocol = name;\n    this._onProtocolChange.fire(this._protocols[name].events);\n  }\n\n  public get activeEncoding(): string {\n    return this._activeEncoding;\n  }\n\n  public set activeEncoding(name: string) {\n    if (!this._encodings[name]) {\n      throw new Error(`unknown encoding \"${name}\"`);\n    }\n    this._activeEncoding = name;\n  }\n\n  public reset(): void {\n    this.activeProtocol = 'NONE';\n    this.activeEncoding = 'DEFAULT';\n    this._lastEvent = null;\n    this._wheelPartialScroll = 0;\n  }\n\n  /**\n   * Processes a wheel event, accounting for partial scrolls for trackpad, mouse scrolls.\n   * This prevents hyper-sensitive scrolling in alt buffer.\n   */\n  public consumeWheelEvent(ev: WheelEvent, cellHeight?: number, dpr?: number): number {\n    // Do nothing if it's not a vertical scroll event\n    if (ev.deltaY === 0 || ev.shiftKey) {\n      return 0;\n    }\n\n    if (cellHeight === undefined || dpr === undefined) {\n      return 0;\n    }\n\n    const targetWheelEventPixels = cellHeight / dpr;\n    let amount = this._applyScrollModifier(ev.deltaY, ev);\n\n    if (ev.deltaMode === WheelEvent.DOM_DELTA_PIXEL) {\n      amount /= (targetWheelEventPixels + 0.0); // Prevent integer division\n\n      const isLikelyTrackpad = Math.abs(ev.deltaY) < 50;\n      if (isLikelyTrackpad) {\n        amount *= 0.3;\n      }\n\n      this._wheelPartialScroll += amount;\n      amount = Math.floor(Math.abs(this._wheelPartialScroll)) * (this._wheelPartialScroll > 0 ? 1 : -1);\n      this._wheelPartialScroll %= 1;\n    } else if (ev.deltaMode === WheelEvent.DOM_DELTA_PAGE) {\n      amount *= this._bufferService.rows;\n    }\n    return amount;\n  }\n\n  private _applyScrollModifier(amount: number, ev: WheelEvent): number {\n    // Multiply the scroll speed when the modifier key is pressed\n    if (ev.altKey || ev.ctrlKey || ev.shiftKey) {\n      return amount * this._optionsService.rawOptions.fastScrollSensitivity * this._optionsService.rawOptions.scrollSensitivity;\n    }\n    return amount * this._optionsService.rawOptions.scrollSensitivity;\n  }\n\n  /**\n   * Triggers a mouse event to be sent.\n   *\n   * Returns true if the event passed all protocol restrictions and a report\n   * was sent, otherwise false. The return value may be used to decide whether\n   * the default event action in the bowser component should be omitted.\n   *\n   * Note: The method will change values of the given event object\n   * to fullfill protocol and encoding restrictions.\n   */\n  public triggerMouseEvent(e: ICoreMouseEvent): boolean {\n    // range check for col/row\n    if (e.col < 0 || e.col >= this._bufferService.cols\n      || e.row < 0 || e.row >= this._bufferService.rows) {\n      return false;\n    }\n\n    // filter nonsense combinations of button + action\n    if (e.button === CoreMouseButton.WHEEL && e.action === CoreMouseAction.MOVE) {\n      return false;\n    }\n    if (e.button === CoreMouseButton.NONE && e.action !== CoreMouseAction.MOVE) {\n      return false;\n    }\n    if (e.button !== CoreMouseButton.WHEEL && (e.action === CoreMouseAction.LEFT || e.action === CoreMouseAction.RIGHT)) {\n      return false;\n    }\n\n    // report 1-based coords\n    e.col++;\n    e.row++;\n\n    // debounce move events at grid or pixel level\n    if (e.action === CoreMouseAction.MOVE\n      && this._lastEvent\n      && this._equalEvents(this._lastEvent, e, this._activeEncoding === 'SGR_PIXELS')\n    ) {\n      return false;\n    }\n\n    // apply protocol restrictions\n    if (!this._protocols[this._activeProtocol].restrict(e)) {\n      return false;\n    }\n\n    // encode report and send\n    const report = this._encodings[this._activeEncoding](e);\n    if (report) {\n      // always send DEFAULT as binary data\n      if (this._activeEncoding === 'DEFAULT') {\n        this._coreService.triggerBinaryEvent(report);\n      } else {\n        this._coreService.triggerDataEvent(report, true);\n      }\n    }\n\n    this._lastEvent = e;\n\n    return true;\n  }\n\n  public explainEvents(events: CoreMouseEventType): { [event: string]: boolean } {\n    return {\n      down: !!(events & CoreMouseEventType.DOWN),\n      up: !!(events & CoreMouseEventType.UP),\n      drag: !!(events & CoreMouseEventType.DRAG),\n      move: !!(events & CoreMouseEventType.MOVE),\n      wheel: !!(events & CoreMouseEventType.WHEEL)\n    };\n  }\n\n  private _equalEvents(e1: ICoreMouseEvent, e2: ICoreMouseEvent, pixels: boolean): boolean {\n    if (pixels) {\n      if (e1.x !== e2.x) return false;\n      if (e1.y !== e2.y) return false;\n    } else {\n      if (e1.col !== e2.col) return false;\n      if (e1.row !== e2.row) return false;\n    }\n    if (e1.button !== e2.button) return false;\n    if (e1.action !== e2.action) return false;\n    if (e1.ctrl !== e2.ctrl) return false;\n    if (e1.alt !== e2.alt) return false;\n    if (e1.shift !== e2.shift) return false;\n    return true;\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { clone } from 'common/Clone';\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport { IDecPrivateModes, IModes } from 'common/Types';\nimport { IBufferService, ICoreService, ILogService, IOptionsService } from 'common/services/Services';\nimport { Emitter } from 'vs/base/common/event';\n\nconst DEFAULT_MODES: IModes = Object.freeze({\n  insertMode: false\n});\n\nconst DEFAULT_DEC_PRIVATE_MODES: IDecPrivateModes = Object.freeze({\n  applicationCursorKeys: false,\n  applicationKeypad: false,\n  bracketedPasteMode: false,\n  cursorBlink: undefined,\n  cursorStyle: undefined,\n  origin: false,\n  reverseWraparound: false,\n  sendFocus: false,\n  synchronizedOutput: false,\n  wraparound: true // defaults: xterm - true, vt100 - false\n});\n\nexport class CoreService extends Disposable implements ICoreService {\n  public serviceBrand: any;\n\n  public isCursorInitialized: boolean = false;\n  public isCursorHidden: boolean = false;\n  public modes: IModes;\n  public decPrivateModes: IDecPrivateModes;\n\n  private readonly _onData = this._register(new Emitter<string>());\n  public readonly onData = this._onData.event;\n  private readonly _onUserInput = this._register(new Emitter<void>());\n  public readonly onUserInput = this._onUserInput.event;\n  private readonly _onBinary = this._register(new Emitter<string>());\n  public readonly onBinary = this._onBinary.event;\n  private readonly _onRequestScrollToBottom = this._register(new Emitter<void>());\n  public readonly onRequestScrollToBottom = this._onRequestScrollToBottom.event;\n\n  constructor(\n    @IBufferService private readonly _bufferService: IBufferService,\n    @ILogService private readonly _logService: ILogService,\n    @IOptionsService private readonly _optionsService: IOptionsService\n  ) {\n    super();\n    this.modes = clone(DEFAULT_MODES);\n    this.decPrivateModes = clone(DEFAULT_DEC_PRIVATE_MODES);\n  }\n\n  public reset(): void {\n    this.modes = clone(DEFAULT_MODES);\n    this.decPrivateModes = clone(DEFAULT_DEC_PRIVATE_MODES);\n  }\n\n  public triggerDataEvent(data: string, wasUserInput: boolean = false): void {\n    // Prevents all events to pty process if stdin is disabled\n    if (this._optionsService.rawOptions.disableStdin) {\n      return;\n    }\n\n    // Input is being sent to the terminal, the terminal should focus the prompt.\n    const buffer = this._bufferService.buffer;\n    if (wasUserInput && this._optionsService.rawOptions.scrollOnUserInput && buffer.ybase !== buffer.ydisp) {\n      this._onRequestScrollToBottom.fire();\n    }\n\n    // Fire onUserInput so listeners can react as well (eg. clear selection)\n    if (wasUserInput) {\n      this._onUserInput.fire();\n    }\n\n    // Fire onData API\n    this._logService.debug(`sending data \"${data}\"`);\n    this._logService.trace(`sending data (codes)`, () => data.split('').map(e => e.charCodeAt(0)));\n    this._onData.fire(data);\n  }\n\n  public triggerBinaryEvent(data: string): void {\n    if (this._optionsService.rawOptions.disableStdin) {\n      return;\n    }\n    this._logService.debug(`sending binary \"${data}\"`);\n    this._logService.trace(`sending binary (codes)`, () => data.split('').map(e => e.charCodeAt(0)));\n    this._onBinary.fire(data);\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * This was heavily inspired from microsoft/vscode's dependency injection system (MIT).\n */\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { IInstantiationService, IServiceIdentifier } from 'common/services/Services';\nimport { getServiceDependencies } from 'common/services/ServiceRegistry';\n\nexport class ServiceCollection {\n\n  private _entries = new Map<IServiceIdentifier<any>, any>();\n\n  constructor(...entries: [IServiceIdentifier<any>, any][]) {\n    for (const [id, service] of entries) {\n      this.set(id, service);\n    }\n  }\n\n  public set<T>(id: IServiceIdentifier<T>, instance: T): T {\n    const result = this._entries.get(id);\n    this._entries.set(id, instance);\n    return result;\n  }\n\n  public forEach(callback: (id: IServiceIdentifier<any>, instance: any) => any): void {\n    for (const [key, value] of this._entries.entries()) {\n      callback(key, value);\n    }\n  }\n\n  public has(id: IServiceIdentifier<any>): boolean {\n    return this._entries.has(id);\n  }\n\n  public get<T>(id: IServiceIdentifier<T>): T | undefined {\n    return this._entries.get(id);\n  }\n}\n\nexport class InstantiationService implements IInstantiationService {\n  public serviceBrand: undefined;\n\n  private readonly _services: ServiceCollection = new ServiceCollection();\n\n  constructor() {\n    this._services.set(IInstantiationService, this);\n  }\n\n  public setService<T>(id: IServiceIdentifier<T>, instance: T): void {\n    this._services.set(id, instance);\n  }\n\n  public getService<T>(id: IServiceIdentifier<T>): T | undefined {\n    return this._services.get(id);\n  }\n\n  public createInstance<T>(ctor: any, ...args: any[]): T {\n    const serviceDependencies = getServiceDependencies(ctor).sort((a, b) => a.index - b.index);\n\n    const serviceArgs: any[] = [];\n    for (const dependency of serviceDependencies) {\n      const service = this._services.get(dependency.id);\n      if (!service) {\n        throw new Error(`[createInstance] ${ctor.name} depends on UNKNOWN service ${dependency.id._id}.`);\n      }\n      serviceArgs.push(service);\n    }\n\n    const firstServiceArgPos = serviceDependencies.length > 0 ? serviceDependencies[0].index : args.length;\n\n    // check for argument mismatches, adjust static args if needed\n    if (args.length !== firstServiceArgPos) {\n      throw new Error(`[createInstance] First service dependency of ${ctor.name} at position ${firstServiceArgPos + 1} conflicts with ${args.length} static arguments`);\n    }\n\n    // now create the instance\n    return new ctor(...[...args, ...serviceArgs]);\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport { ILogService, IOptionsService, LogLevelEnum } from 'common/services/Services';\n\ntype LogType = (message?: any, ...optionalParams: any[]) => void;\n\ninterface IConsole {\n  log: LogType;\n  error: LogType;\n  info: LogType;\n  trace: LogType;\n  warn: LogType;\n}\n\n// console is available on both node.js and browser contexts but the common\n// module doesn't depend on them so we need to explicitly declare it.\ndeclare const console: IConsole;\n\nconst optionsKeyToLogLevel: { [key: string]: LogLevelEnum } = {\n  trace: LogLevelEnum.TRACE,\n  debug: LogLevelEnum.DEBUG,\n  info: LogLevelEnum.INFO,\n  warn: LogLevelEnum.WARN,\n  error: LogLevelEnum.ERROR,\n  off: LogLevelEnum.OFF\n};\n\nconst LOG_PREFIX = 'xterm.js: ';\n\nexport class LogService extends Disposable implements ILogService {\n  public serviceBrand: any;\n\n  private _logLevel: LogLevelEnum = LogLevelEnum.OFF;\n  public get logLevel(): LogLevelEnum { return this._logLevel; }\n\n  constructor(\n    @IOptionsService private readonly _optionsService: IOptionsService\n  ) {\n    super();\n    this._updateLogLevel();\n    this._register(this._optionsService.onSpecificOptionChange('logLevel', () => this._updateLogLevel()));\n\n    // For trace logging, assume the latest created log service is valid\n    traceLogger = this;\n  }\n\n  private _updateLogLevel(): void {\n    this._logLevel = optionsKeyToLogLevel[this._optionsService.rawOptions.logLevel];\n  }\n\n  private _evalLazyOptionalParams(optionalParams: any[]): void {\n    for (let i = 0; i < optionalParams.length; i++) {\n      if (typeof optionalParams[i] === 'function') {\n        optionalParams[i] = optionalParams[i]();\n      }\n    }\n  }\n\n  private _log(type: LogType, message: string, optionalParams: any[]): void {\n    this._evalLazyOptionalParams(optionalParams);\n    type.call(console, (this._optionsService.options.logger ? '' : LOG_PREFIX) + message, ...optionalParams);\n  }\n\n  public trace(message: string, ...optionalParams: any[]): void {\n    if (this._logLevel <= LogLevelEnum.TRACE) {\n      this._log(this._optionsService.options.logger?.trace.bind(this._optionsService.options.logger) ?? console.log, message, optionalParams);\n    }\n  }\n\n  public debug(message: string, ...optionalParams: any[]): void {\n    if (this._logLevel <= LogLevelEnum.DEBUG) {\n      this._log(this._optionsService.options.logger?.debug.bind(this._optionsService.options.logger) ?? console.log, message, optionalParams);\n    }\n  }\n\n  public info(message: string, ...optionalParams: any[]): void {\n    if (this._logLevel <= LogLevelEnum.INFO) {\n      this._log(this._optionsService.options.logger?.info.bind(this._optionsService.options.logger) ?? console.info, message, optionalParams);\n    }\n  }\n\n  public warn(message: string, ...optionalParams: any[]): void {\n    if (this._logLevel <= LogLevelEnum.WARN) {\n      this._log(this._optionsService.options.logger?.warn.bind(this._optionsService.options.logger) ?? console.warn, message, optionalParams);\n    }\n  }\n\n  public error(message: string, ...optionalParams: any[]): void {\n    if (this._logLevel <= LogLevelEnum.ERROR) {\n      this._log(this._optionsService.options.logger?.error.bind(this._optionsService.options.logger) ?? console.error, message, optionalParams);\n    }\n  }\n}\n\nlet traceLogger: ILogService;\nexport function setTraceLogger(logger: ILogService): void {\n  traceLogger = logger;\n}\n\n/**\n * A decorator that can be used to automatically log trace calls to the decorated function.\n */\nexport function traceCall(_target: any, key: string, descriptor: any): any {\n  if (typeof descriptor.value !== 'function') {\n    throw new Error('not supported');\n  }\n  const fnKey = 'value';\n  const fn = descriptor.value;\n  descriptor[fnKey] = function (...args: any[]) {\n    // Early exit\n    if (traceLogger.logLevel !== LogLevelEnum.TRACE) {\n      return fn.apply(this, args);\n    }\n\n    traceLogger.trace(`GlyphRenderer#${fn.name}(${args.map(e => JSON.stringify(e)).join(', ')})`);\n    const result = fn.apply(this, args);\n    traceLogger.trace(`GlyphRenderer#${fn.name} return`, result);\n    return result;\n  };\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable, toDisposable } from 'vs/base/common/lifecycle';\nimport { isMac } from 'common/Platform';\nimport { CursorStyle, IDisposable } from 'common/Types';\nimport { FontWeight, IOptionsService, ITerminalOptions } from 'common/services/Services';\nimport { Emitter } from 'vs/base/common/event';\n\nexport const DEFAULT_OPTIONS: Readonly<Required<ITerminalOptions>> = {\n  cols: 80,\n  rows: 24,\n  cursorBlink: false,\n  cursorStyle: 'block',\n  cursorWidth: 1,\n  cursorInactiveStyle: 'outline',\n  customGlyphs: true,\n  drawBoldTextInBrightColors: true,\n  documentOverride: null,\n  fastScrollModifier: 'alt',\n  fastScrollSensitivity: 5,\n  fontFamily: 'monospace',\n  fontSize: 15,\n  fontWeight: 'normal',\n  fontWeightBold: 'bold',\n  ignoreBracketedPasteMode: false,\n  lineHeight: 1.0,\n  letterSpacing: 0,\n  linkHandler: null,\n  logLevel: 'info',\n  logger: null,\n  scrollback: 1000,\n  scrollOnEraseInDisplay: false,\n  scrollOnUserInput: true,\n  scrollSensitivity: 1,\n  screenReaderMode: false,\n  smoothScrollDuration: 0,\n  macOptionIsMeta: false,\n  macOptionClickForcesSelection: false,\n  minimumContrastRatio: 1,\n  disableStdin: false,\n  allowProposedApi: false,\n  allowTransparency: false,\n  tabStopWidth: 8,\n  theme: {},\n  reflowCursorLine: false,\n  rescaleOverlappingGlyphs: false,\n  rightClickSelectsWord: isMac,\n  windowOptions: {},\n  windowsMode: false,\n  windowsPty: {},\n  wordSeparator: ' ()[]{}\\',\"`',\n  altClickMovesCursor: true,\n  convertEol: false,\n  termName: 'xterm',\n  cancelEvents: false,\n  overviewRuler: {}\n};\n\nconst FONT_WEIGHT_OPTIONS: Extract<FontWeight, string>[] = ['normal', 'bold', '100', '200', '300', '400', '500', '600', '700', '800', '900'];\n\nexport class OptionsService extends Disposable implements IOptionsService {\n  public serviceBrand: any;\n\n  public readonly rawOptions: Required<ITerminalOptions>;\n  public options: Required<ITerminalOptions>;\n\n  private readonly _onOptionChange = this._register(new Emitter<keyof ITerminalOptions>());\n  public readonly onOptionChange = this._onOptionChange.event;\n\n  constructor(options: Partial<ITerminalOptions>) {\n    super();\n    // set the default value of each option\n    const defaultOptions = { ...DEFAULT_OPTIONS };\n    for (const key in options) {\n      if (key in defaultOptions) {\n        try {\n          const newValue = options[key];\n          defaultOptions[key] = this._sanitizeAndValidateOption(key, newValue);\n        } catch (e) {\n          console.error(e);\n        }\n      }\n    }\n\n    // set up getters and setters for each option\n    this.rawOptions = defaultOptions;\n    this.options = { ... defaultOptions };\n    this._setupOptions();\n\n    // Clear out options that could link outside xterm.js as they could easily cause an embedder\n    // memory leak\n    this._register(toDisposable(() => {\n      this.rawOptions.linkHandler = null;\n      this.rawOptions.documentOverride = null;\n    }));\n  }\n\n  // eslint-disable-next-line @typescript-eslint/naming-convention\n  public onSpecificOptionChange<T extends keyof ITerminalOptions>(key: T, listener: (value: ITerminalOptions[T]) => any): IDisposable {\n    return this.onOptionChange(eventKey => {\n      if (eventKey === key) {\n        listener(this.rawOptions[key]);\n      }\n    });\n  }\n\n  // eslint-disable-next-line @typescript-eslint/naming-convention\n  public onMultipleOptionChange(keys: (keyof ITerminalOptions)[], listener: () => any): IDisposable {\n    return this.onOptionChange(eventKey => {\n      if (keys.indexOf(eventKey) !== -1) {\n        listener();\n      }\n    });\n  }\n\n  private _setupOptions(): void {\n    const getter = (propName: string): any => {\n      if (!(propName in DEFAULT_OPTIONS)) {\n        throw new Error(`No option with key \"${propName}\"`);\n      }\n      return this.rawOptions[propName];\n    };\n\n    const setter = (propName: string, value: any): void => {\n      if (!(propName in DEFAULT_OPTIONS)) {\n        throw new Error(`No option with key \"${propName}\"`);\n      }\n\n      value = this._sanitizeAndValidateOption(propName, value);\n      // Don't fire an option change event if they didn't change\n      if (this.rawOptions[propName] !== value) {\n        this.rawOptions[propName] = value;\n        this._onOptionChange.fire(propName);\n      }\n    };\n\n    for (const propName in this.rawOptions) {\n      const desc = {\n        get: getter.bind(this, propName),\n        set: setter.bind(this, propName)\n      };\n      Object.defineProperty(this.options, propName, desc);\n    }\n  }\n\n  private _sanitizeAndValidateOption(key: string, value: any): any {\n    switch (key) {\n      case 'cursorStyle':\n        if (!value) {\n          value = DEFAULT_OPTIONS[key];\n        }\n        if (!isCursorStyle(value)) {\n          throw new Error(`\"${value}\" is not a valid value for ${key}`);\n        }\n        break;\n      case 'wordSeparator':\n        if (!value) {\n          value = DEFAULT_OPTIONS[key];\n        }\n        break;\n      case 'fontWeight':\n      case 'fontWeightBold':\n        if (typeof value === 'number' && 1 <= value && value <= 1000) {\n          // already valid numeric value\n          break;\n        }\n        value = FONT_WEIGHT_OPTIONS.includes(value) ? value : DEFAULT_OPTIONS[key];\n        break;\n      case 'cursorWidth':\n        value = Math.floor(value);\n        // Fall through for bounds check\n      case 'lineHeight':\n      case 'tabStopWidth':\n        if (value < 1) {\n          throw new Error(`${key} cannot be less than 1, value: ${value}`);\n        }\n        break;\n      case 'minimumContrastRatio':\n        value = Math.max(1, Math.min(21, Math.round(value * 10) / 10));\n        break;\n      case 'scrollback':\n        value = Math.min(value, 4294967295);\n        if (value < 0) {\n          throw new Error(`${key} cannot be less than 0, value: ${value}`);\n        }\n        break;\n      case 'fastScrollSensitivity':\n      case 'scrollSensitivity':\n        if (value <= 0) {\n          throw new Error(`${key} cannot be less than or equal to 0, value: ${value}`);\n        }\n        break;\n      case 'rows':\n      case 'cols':\n        if (!value && value !== 0) {\n          throw new Error(`${key} must be numeric, value: ${value}`);\n        }\n        break;\n      case 'windowsPty':\n        value = value ?? {};\n        break;\n    }\n    return value;\n  }\n}\n\nfunction isCursorStyle(value: unknown): value is CursorStyle {\n  return value === 'block' || value === 'underline' || value === 'bar';\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IBufferService, IOscLinkService } from 'common/services/Services';\nimport { IMarker, IOscLinkData } from 'common/Types';\n\nexport class OscLinkService implements IOscLinkService {\n  public serviceBrand: any;\n\n  private _nextId = 1;\n\n  /**\n   * A map of the link key to link entry. This is used to add additional lines to links with ids.\n   */\n  private _entriesWithId: Map<string, IOscLinkEntryWithId> = new Map();\n\n  /**\n   * A map of the link id to the link entry. The \"link id\" (number) which is the numberic\n   * representation of a unique link should not be confused with \"id\" (string) which comes in with\n   * `id=` in the OSC link's properties.\n   */\n  private _dataByLinkId: Map<number, IOscLinkEntryNoId | IOscLinkEntryWithId> = new Map();\n\n  constructor(\n    @IBufferService private readonly _bufferService: IBufferService\n  ) {\n  }\n\n  public registerLink(data: IOscLinkData): number {\n    const buffer = this._bufferService.buffer;\n\n    // Links with no id will only ever be registered a single time\n    if (data.id === undefined) {\n      const marker = buffer.addMarker(buffer.ybase + buffer.y);\n      const entry: IOscLinkEntryNoId = {\n        data,\n        id: this._nextId++,\n        lines: [marker]\n      };\n      marker.onDispose(() => this._removeMarkerFromLink(entry, marker));\n      this._dataByLinkId.set(entry.id, entry);\n      return entry.id;\n    }\n\n    // Add the line to the link if it already exists\n    const castData = data as Required<IOscLinkData>;\n    const key = this._getEntryIdKey(castData);\n    const match = this._entriesWithId.get(key);\n    if (match) {\n      this.addLineToLink(match.id, buffer.ybase + buffer.y);\n      return match.id;\n    }\n\n    // Create the link\n    const marker = buffer.addMarker(buffer.ybase + buffer.y);\n    const entry: IOscLinkEntryWithId = {\n      id: this._nextId++,\n      key: this._getEntryIdKey(castData),\n      data: castData,\n      lines: [marker]\n    };\n    marker.onDispose(() => this._removeMarkerFromLink(entry, marker));\n    this._entriesWithId.set(entry.key, entry);\n    this._dataByLinkId.set(entry.id, entry);\n    return entry.id;\n  }\n\n  public addLineToLink(linkId: number, y: number): void {\n    const entry = this._dataByLinkId.get(linkId);\n    if (!entry) {\n      return;\n    }\n    if (entry.lines.every(e => e.line !== y)) {\n      const marker = this._bufferService.buffer.addMarker(y);\n      entry.lines.push(marker);\n      marker.onDispose(() => this._removeMarkerFromLink(entry, marker));\n    }\n  }\n\n  public getLinkData(linkId: number): IOscLinkData | undefined {\n    return this._dataByLinkId.get(linkId)?.data;\n  }\n\n  private _getEntryIdKey(linkData: Required<IOscLinkData>): string {\n    return `${linkData.id};;${linkData.uri}`;\n  }\n\n  private _removeMarkerFromLink(entry: IOscLinkEntryNoId | IOscLinkEntryWithId, marker: IMarker): void {\n    const index = entry.lines.indexOf(marker);\n    if (index === -1) {\n      return;\n    }\n    entry.lines.splice(index, 1);\n    if (entry.lines.length === 0) {\n      if (entry.data.id !== undefined) {\n        this._entriesWithId.delete((entry as IOscLinkEntryWithId).key);\n      }\n      this._dataByLinkId.delete(entry.id);\n    }\n  }\n}\n\ninterface IOscLinkEntry<T extends IOscLinkData> {\n  data: T;\n  id: number;\n  lines: IMarker[];\n}\n\ninterface IOscLinkEntryNoId extends IOscLinkEntry<IOscLinkData> {\n}\n\ninterface IOscLinkEntryWithId extends IOscLinkEntry<Required<IOscLinkData>> {\n  key: string;\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * This was heavily inspired from microsoft/vscode's dependency injection system (MIT).\n */\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { IServiceIdentifier } from 'common/services/Services';\n\nconst DI_TARGET = 'di$target';\nconst DI_DEPENDENCIES = 'di$dependencies';\n\nexport const serviceRegistry: Map<string, IServiceIdentifier<any>> = new Map();\n\nexport function getServiceDependencies(ctor: any): { id: IServiceIdentifier<any>, index: number, optional: boolean }[] {\n  return ctor[DI_DEPENDENCIES] || [];\n}\n\nexport function createDecorator<T>(id: string): IServiceIdentifier<T> {\n  if (serviceRegistry.has(id)) {\n    return serviceRegistry.get(id)!;\n  }\n\n  const decorator: any = function (target: Function, key: string, index: number): any {\n    if (arguments.length !== 3) {\n      throw new Error('@IServiceName-decorator can only be used to decorate a parameter');\n    }\n\n    storeServiceDependency(decorator, target, index);\n  };\n\n  decorator._id = id;\n\n  serviceRegistry.set(id, decorator);\n  return decorator;\n}\n\nfunction storeServiceDependency(id: Function, target: Function, index: number): void {\n  if ((target as any)[DI_TARGET] === target) {\n    (target as any)[DI_DEPENDENCIES].push({ id, index });\n  } else {\n    (target as any)[DI_DEPENDENCIES] = [{ id, index }];\n    (target as any)[DI_TARGET] = target;\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDecoration, IDecorationOptions, ILinkHandler, ILogger, IWindowsPty, type IOverviewRulerOptions } from '@xterm/xterm';\nimport { CoreMouseEncoding, CoreMouseEventType, CursorInactiveStyle, CursorStyle, IAttributeData, ICharset, IColor, ICoreMouseEvent, ICoreMouseProtocol, IDecPrivateModes, IDisposable, IModes, IOscLinkData, IWindowOptions } from 'common/Types';\nimport { IBuffer, IBufferSet } from 'common/buffer/Types';\nimport { createDecorator } from 'common/services/ServiceRegistry';\nimport type { Emitter, Event } from 'vs/base/common/event';\n\nexport const IBufferService = createDecorator<IBufferService>('BufferService');\nexport interface IBufferService {\n  serviceBrand: undefined;\n\n  readonly cols: number;\n  readonly rows: number;\n  readonly buffer: IBuffer;\n  readonly buffers: IBufferSet;\n  isUserScrolling: boolean;\n  onResize: Event<IBufferResizeEvent>;\n  onScroll: Event<number>;\n  scroll(eraseAttr: IAttributeData, isWrapped?: boolean): void;\n  scrollLines(disp: number, suppressScrollEvent?: boolean): void;\n  resize(cols: number, rows: number): void;\n  reset(): void;\n}\n\nexport interface IBufferResizeEvent {\n  cols: number;\n  rows: number;\n  colsChanged: boolean;\n  rowsChanged: boolean;\n}\n\nexport const ICoreMouseService = createDecorator<ICoreMouseService>('CoreMouseService');\nexport interface ICoreMouseService {\n  serviceBrand: undefined;\n\n  activeProtocol: string;\n  activeEncoding: string;\n  areMouseEventsActive: boolean;\n  addProtocol(name: string, protocol: ICoreMouseProtocol): void;\n  addEncoding(name: string, encoding: CoreMouseEncoding): void;\n  reset(): void;\n\n  /**\n   * Triggers a mouse event to be sent.\n   *\n   * Returns true if the event passed all protocol restrictions and a report\n   * was sent, otherwise false. The return value may be used to decide whether\n   * the default event action in the bowser component should be omitted.\n   *\n   * Note: The method will change values of the given event object\n   * to fullfill protocol and encoding restrictions.\n   */\n  triggerMouseEvent(event: ICoreMouseEvent): boolean;\n\n  /**\n   * Event to announce changes in mouse tracking.\n   */\n  onProtocolChange: Event<CoreMouseEventType>;\n\n  /**\n   * Human readable version of mouse events.\n   */\n  explainEvents(events: CoreMouseEventType): { [event: string]: boolean };\n\n  /**\n   * Process wheel event taking partial scroll into account.\n   */\n  consumeWheelEvent(ev: WheelEvent, cellHeight?: number, dpr?: number): number;\n}\n\nexport const ICoreService = createDecorator<ICoreService>('CoreService');\nexport interface ICoreService {\n  serviceBrand: undefined;\n\n  /**\n   * Initially the cursor will not be visible until the first time the terminal\n   * is focused.\n   */\n  isCursorInitialized: boolean;\n  isCursorHidden: boolean;\n\n  readonly modes: IModes;\n  readonly decPrivateModes: IDecPrivateModes;\n\n  readonly onData: Event<string>;\n  readonly onUserInput: Event<void>;\n  readonly onBinary: Event<string>;\n  readonly onRequestScrollToBottom: Event<void>;\n\n  reset(): void;\n\n  /**\n   * Triggers the onData event in the public API.\n   * @param data The data that is being emitted.\n   * @param wasUserInput Whether the data originated from the user (as opposed to\n   * resulting from parsing incoming data). When true this will also:\n   * - Scroll to the bottom of the buffer if option scrollOnUserInput is true.\n   * - Fire the `onUserInput` event (so selection can be cleared).\n   */\n  triggerDataEvent(data: string, wasUserInput?: boolean): void;\n\n  /**\n   * Triggers the onBinary event in the public API.\n   * @param data The data that is being emitted.\n   */\n  triggerBinaryEvent(data: string): void;\n}\n\nexport const ICharsetService = createDecorator<ICharsetService>('CharsetService');\nexport interface ICharsetService {\n  serviceBrand: undefined;\n\n  charset: ICharset | undefined;\n  readonly glevel: number;\n\n  reset(): void;\n\n  /**\n   * Set the G level of the terminal.\n   * @param g\n   */\n  setgLevel(g: number): void;\n\n  /**\n   * Set the charset for the given G level of the terminal.\n   * @param g\n   * @param charset\n   */\n  setgCharset(g: number, charset: ICharset | undefined): void;\n}\n\nexport interface IServiceIdentifier<T> {\n  (...args: any[]): void;\n  type: T;\n  _id: string;\n}\n\nexport interface IBrandedService {\n  serviceBrand: undefined;\n}\n\ntype GetLeadingNonServiceArgs<TArgs extends any[]> = TArgs extends [] ? []\n  : TArgs extends [...infer TFirst, infer TLast] ? TLast extends IBrandedService ? GetLeadingNonServiceArgs<TFirst> : TArgs\n    : never;\n\nexport const IInstantiationService = createDecorator<IInstantiationService>('InstantiationService');\nexport interface IInstantiationService {\n  serviceBrand: undefined;\n\n  setService<T>(id: IServiceIdentifier<T>, instance: T): void;\n  getService<T>(id: IServiceIdentifier<T>): T | undefined;\n  createInstance<Ctor extends new (...args: any[]) => any, R extends InstanceType<Ctor>>(t: Ctor, ...args: GetLeadingNonServiceArgs<ConstructorParameters<Ctor>>): R;\n}\n\nexport enum LogLevelEnum {\n  TRACE = 0,\n  DEBUG = 1,\n  INFO = 2,\n  WARN = 3,\n  ERROR = 4,\n  OFF = 5\n}\n\nexport const ILogService = createDecorator<ILogService>('LogService');\nexport interface ILogService {\n  serviceBrand: undefined;\n\n  readonly logLevel: LogLevelEnum;\n\n  trace(message: any, ...optionalParams: any[]): void;\n  debug(message: any, ...optionalParams: any[]): void;\n  info(message: any, ...optionalParams: any[]): void;\n  warn(message: any, ...optionalParams: any[]): void;\n  error(message: any, ...optionalParams: any[]): void;\n}\n\nexport const IOptionsService = createDecorator<IOptionsService>('OptionsService');\nexport interface IOptionsService {\n  serviceBrand: undefined;\n\n  /**\n   * Read only access to the raw options object, this is an internal-only fast path for accessing\n   * single options without any validation as we trust TypeScript to enforce correct usage\n   * internally.\n   */\n  readonly rawOptions: Required<ITerminalOptions>;\n\n  /**\n   * Options as exposed through the public API, this property uses getters and setters with\n   * validation which makes it safer but slower. {@link rawOptions} should be used for pretty much\n   * all internal usage for performance reasons.\n   */\n  readonly options: Required<ITerminalOptions>;\n\n  /**\n   * Adds an event listener for when any option changes.\n   */\n  readonly onOptionChange: Event<keyof ITerminalOptions>;\n\n  /**\n   * Adds an event listener for when a specific option changes, this is a convenience method that is\n   * preferred over {@link onOptionChange} when only a single option is being listened to.\n   */\n  // eslint-disable-next-line @typescript-eslint/naming-convention\n  onSpecificOptionChange<T extends keyof ITerminalOptions>(key: T, listener: (arg1: Required<ITerminalOptions>[T]) => any): IDisposable;\n\n  /**\n   * Adds an event listener for when a set of specific options change, this is a convenience method\n   * that is preferred over {@link onOptionChange} when multiple options are being listened to and\n   * handled the same way.\n   */\n  // eslint-disable-next-line @typescript-eslint/naming-convention\n  onMultipleOptionChange(keys: (keyof ITerminalOptions)[], listener: () => any): IDisposable;\n}\n\nexport type FontWeight = 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | number;\nexport type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'off';\n\nexport interface ITerminalOptions {\n  allowProposedApi?: boolean;\n  allowTransparency?: boolean;\n  altClickMovesCursor?: boolean;\n  cols?: number;\n  convertEol?: boolean;\n  cursorBlink?: boolean;\n  cursorStyle?: CursorStyle;\n  cursorWidth?: number;\n  cursorInactiveStyle?: CursorInactiveStyle;\n  customGlyphs?: boolean;\n  disableStdin?: boolean;\n  documentOverride?: any | null;\n  drawBoldTextInBrightColors?: boolean;\n  /** @deprecated No longer supported */\n  fastScrollModifier?: 'none' | 'alt' | 'ctrl' | 'shift';\n  fastScrollSensitivity?: number;\n  fontSize?: number;\n  fontFamily?: string;\n  fontWeight?: FontWeight;\n  fontWeightBold?: FontWeight;\n  ignoreBracketedPasteMode?: boolean;\n  letterSpacing?: number;\n  lineHeight?: number;\n  linkHandler?: ILinkHandler | null;\n  logLevel?: LogLevel;\n  logger?: ILogger | null;\n  macOptionIsMeta?: boolean;\n  macOptionClickForcesSelection?: boolean;\n  minimumContrastRatio?: number;\n  reflowCursorLine?: boolean;\n  rescaleOverlappingGlyphs?: boolean;\n  rightClickSelectsWord?: boolean;\n  rows?: number;\n  screenReaderMode?: boolean;\n  scrollback?: number;\n  scrollOnUserInput?: boolean;\n  scrollSensitivity?: number;\n  smoothScrollDuration?: number;\n  tabStopWidth?: number;\n  theme?: ITheme;\n  windowsMode?: boolean;\n  windowsPty?: IWindowsPty;\n  windowOptions?: IWindowOptions;\n  wordSeparator?: string;\n  overviewRuler?: IOverviewRulerOptions;\n  scrollOnEraseInDisplay?: boolean;\n\n  [key: string]: any;\n  cancelEvents: boolean;\n  termName: string;\n}\n\nexport interface ITheme {\n  foreground?: string;\n  background?: string;\n  cursor?: string;\n  cursorAccent?: string;\n  selectionForeground?: string;\n  selectionBackground?: string;\n  selectionInactiveBackground?: string;\n  scrollbarSliderBackground?: string;\n  scrollbarSliderHoverBackground?: string;\n  scrollbarSliderActiveBackground?: string;\n  overviewRulerBorder?: string;\n  black?: string;\n  red?: string;\n  green?: string;\n  yellow?: string;\n  blue?: string;\n  magenta?: string;\n  cyan?: string;\n  white?: string;\n  brightBlack?: string;\n  brightRed?: string;\n  brightGreen?: string;\n  brightYellow?: string;\n  brightBlue?: string;\n  brightMagenta?: string;\n  brightCyan?: string;\n  brightWhite?: string;\n  extendedAnsi?: string[];\n}\n\nexport const IOscLinkService = createDecorator<IOscLinkService>('OscLinkService');\nexport interface IOscLinkService {\n  serviceBrand: undefined;\n  /**\n   * Registers a link to the service, returning the link ID. The link data is managed by this\n   * service and will be freed when this current cursor position is trimmed off the buffer.\n   */\n  registerLink(linkData: IOscLinkData): number;\n  /**\n   * Adds a line to a link if needed.\n   */\n  addLineToLink(linkId: number, y: number): void;\n  /** Get the link data associated with a link ID. */\n  getLinkData(linkId: number): IOscLinkData | undefined;\n}\n\n/*\n * Width and Grapheme_Cluster_Break properties of a character as a bit mask.\n *\n * bit 0: shouldJoin - should combine with preceding character.\n * bit 1..2: wcwidth - see UnicodeCharWidth.\n * bit 3..31: class of character (currently only 4 bits are used).\n *   This is used to determined grapheme clustering - i.e. which codepoints\n *   are to be combined into a single compound character.\n *\n * Use the UnicodeService static function createPropertyValue to create a\n * UnicodeCharProperties; use extractShouldJoin, extractWidth, and\n * extractCharKind to extract the components.\n */\nexport type UnicodeCharProperties = number;\n\n/**\n * Width in columns of a character.\n * In a CJK context, \"half-width\" characters (such as Latin) are width 1,\n * while \"full-width\" characters (such as Kanji) are 2 columns wide.\n * Combining characters (such as accents) are width 0.\n */\nexport type UnicodeCharWidth = 0 | 1 | 2;\n\nexport const IUnicodeService = createDecorator<IUnicodeService>('UnicodeService');\nexport interface IUnicodeService {\n  serviceBrand: undefined;\n  /** Register an Unicode version provider. */\n  register(provider: IUnicodeVersionProvider): void;\n  /** Registered Unicode versions. */\n  readonly versions: string[];\n  /** Currently active version. */\n  activeVersion: string;\n  /** Event triggered, when activate version changed. */\n  readonly onChange: Event<string>;\n\n  /**\n   * Unicode version dependent\n   */\n  wcwidth(codepoint: number): UnicodeCharWidth;\n  getStringCellWidth(s: string): number;\n  /**\n   * Return character width and type for grapheme clustering.\n   * If preceding != 0, it is the return code from the previous character;\n   * in that case the result specifies if the characters should be joined.\n   */\n  charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties;\n}\n\nexport interface IUnicodeVersionProvider {\n  readonly version: string;\n  wcwidth(ucs: number): UnicodeCharWidth;\n  charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties;\n}\n\nexport const IDecorationService = createDecorator<IDecorationService>('DecorationService');\nexport interface IDecorationService extends IDisposable {\n  serviceBrand: undefined;\n  readonly decorations: IterableIterator<IInternalDecoration>;\n  readonly onDecorationRegistered: Event<IInternalDecoration>;\n  readonly onDecorationRemoved: Event<IInternalDecoration>;\n  registerDecoration(decorationOptions: IDecorationOptions): IDecoration | undefined;\n  reset(): void;\n  /**\n   * Trigger a callback over the decoration at a cell (in no particular order). This uses a callback\n   * instead of an iterator as it's typically used in hot code paths.\n   */\n  forEachDecorationAtCell(x: number, line: number, layer: 'bottom' | 'top' | undefined, callback: (decoration: IInternalDecoration) => void): void;\n}\nexport interface IInternalDecoration extends IDecoration {\n  readonly options: IDecorationOptions;\n  readonly backgroundColorRGB: IColor | undefined;\n  readonly foregroundColorRGB: IColor | undefined;\n  readonly onRenderEmitter: Emitter<HTMLElement>;\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { UnicodeV6 } from 'common/input/UnicodeV6';\nimport { IUnicodeService, IUnicodeVersionProvider, UnicodeCharProperties, UnicodeCharWidth } from 'common/services/Services';\nimport { Emitter } from 'vs/base/common/event';\n\nexport class UnicodeService implements IUnicodeService {\n  public serviceBrand: any;\n\n  private _providers: {[key: string]: IUnicodeVersionProvider} = Object.create(null);\n  private _active: string = '';\n  private _activeProvider: IUnicodeVersionProvider;\n\n  private readonly _onChange = new Emitter<string>();\n  public readonly onChange = this._onChange.event;\n\n  public static extractShouldJoin(value: UnicodeCharProperties): boolean {\n    return (value & 1) !== 0;\n  }\n  public static extractWidth(value: UnicodeCharProperties): UnicodeCharWidth {\n    return ((value >> 1) & 0x3) as UnicodeCharWidth;\n  }\n  public static extractCharKind(value: UnicodeCharProperties): number {\n    return value >> 3;\n  }\n  public static createPropertyValue(state: number, width: number, shouldJoin: boolean = false): UnicodeCharProperties {\n    return ((state & 0xffffff) << 3) | ((width & 3) << 1) | (shouldJoin?1:0);\n  }\n\n  constructor() {\n    const defaultProvider = new UnicodeV6();\n    this.register(defaultProvider);\n    this._active = defaultProvider.version;\n    this._activeProvider = defaultProvider;\n  }\n\n  public dispose(): void {\n    this._onChange.dispose();\n  }\n\n  public get versions(): string[] {\n    return Object.keys(this._providers);\n  }\n\n  public get activeVersion(): string {\n    return this._active;\n  }\n\n  public set activeVersion(version: string) {\n    if (!this._providers[version]) {\n      throw new Error(`unknown Unicode version \"${version}\"`);\n    }\n    this._active = version;\n    this._activeProvider = this._providers[version];\n    this._onChange.fire(version);\n  }\n\n  public register(provider: IUnicodeVersionProvider): void {\n    this._providers[provider.version] = provider;\n  }\n\n  /**\n   * Unicode version dependent interface.\n   */\n  public wcwidth(num: number): UnicodeCharWidth {\n    return this._activeProvider.wcwidth(num);\n  }\n\n  public getStringCellWidth(s: string): number {\n    let result = 0;\n    let precedingInfo = 0;\n    const length = s.length;\n    for (let i = 0; i < length; ++i) {\n      let code = s.charCodeAt(i);\n      // surrogate pair first\n      if (0xD800 <= code && code <= 0xDBFF) {\n        if (++i >= length) {\n          // this should not happen with strings retrieved from\n          // Buffer.translateToString as it converts from UTF-32\n          // and therefore always should contain the second part\n          // for any other string we still have to handle it somehow:\n          // simply treat the lonely surrogate first as a single char (UCS-2 behavior)\n          return result + this.wcwidth(code);\n        }\n        const second = s.charCodeAt(i);\n        // convert surrogate pair to high codepoint only for valid second part (UTF-16)\n        // otherwise treat them independently (UCS-2 behavior)\n        if (0xDC00 <= second && second <= 0xDFFF) {\n          code = (code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n        } else {\n          result += this.wcwidth(second);\n        }\n      }\n      const currentInfo = this.charProperties(code, precedingInfo);\n      let chWidth = UnicodeService.extractWidth(currentInfo);\n      if (UnicodeService.extractShouldJoin(currentInfo)) {\n        chWidth -= UnicodeService.extractWidth(precedingInfo);\n      }\n      result += chWidth;\n      precedingInfo = currentInfo;\n    }\n    return result;\n  }\n\n  public charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties {\n    return this._activeProvider.charProperties(codepoint, preceding);\n  }\n}\n","/**\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n *\n * Originally forked from (with the author's permission):\n *   Fabrice Bellard's javascript vt100 for jslinux:\n *   http://bellard.org/jslinux/\n *   Copyright (c) 2011 Fabrice Bellard\n *   The original design remains. The terminal itself\n *   has been extended to include xterm CSI codes, among\n *   other features.\n *\n * Terminal Emulation References:\n *   http://vt100.net/\n *   http://invisible-island.net/xterm/ctlseqs/ctlseqs.txt\n *   http://invisible-island.net/xterm/ctlseqs/ctlseqs.html\n *   http://invisible-island.net/vttest/\n *   http://www.inwap.com/pdp10/ansicode.txt\n *   http://linux.die.net/man/4/console_codes\n *   http://linux.die.net/man/7/urxvt\n */\n\nimport { DEFAULT_ATTR_DATA } from 'common/buffer/BufferLine';\nimport { IBuffer } from 'common/buffer/Types';\nimport { CoreTerminal } from 'common/CoreTerminal';\nimport { IMarker, ITerminalOptions } from 'common/Types';\nimport { Emitter, Event } from 'vs/base/common/event';\n\nexport class Terminal extends CoreTerminal {\n  private readonly _onBell = this._register(new Emitter<void>());\n  public readonly onBell = this._onBell.event;\n  private readonly _onCursorMove = this._register(new Emitter<void>());\n  public readonly onCursorMove = this._onCursorMove.event;\n  private readonly _onTitleChange = this._register(new Emitter<string>());\n  public readonly onTitleChange = this._onTitleChange.event;\n  private readonly _onA11yCharEmitter = this._register(new Emitter<string>());\n  public readonly onA11yChar = this._onA11yCharEmitter.event;\n  private readonly _onA11yTabEmitter = this._register(new Emitter<number>());\n  public readonly onA11yTab = this._onA11yTabEmitter.event;\n\n  constructor(\n    options: ITerminalOptions = {}\n  ) {\n    super(options);\n\n    this._setup();\n\n    // Setup InputHandler listeners\n    this._register(this._inputHandler.onRequestBell(() => this.bell()));\n    this._register(this._inputHandler.onRequestReset(() => this.reset()));\n    this._register(Event.forward(this._inputHandler.onCursorMove, this._onCursorMove));\n    this._register(Event.forward(this._inputHandler.onTitleChange, this._onTitleChange));\n    this._register(Event.forward(this._inputHandler.onA11yChar, this._onA11yCharEmitter));\n    this._register(Event.forward(this._inputHandler.onA11yTab, this._onA11yTabEmitter));\n  }\n\n  /**\n   * Convenience property to active buffer.\n   */\n  public get buffer(): IBuffer {\n    return this.buffers.active;\n  }\n\n  // TODO: Support paste here?\n\n  public get markers(): IMarker[] {\n    return this.buffer.markers;\n  }\n\n  public addMarker(cursorYOffset: number): IMarker | undefined {\n    // Disallow markers on the alt buffer\n    if (this.buffer !== this.buffers.normal) {\n      return;\n    }\n\n    return this.buffer.addMarker(this.buffer.ybase + this.buffer.y + cursorYOffset);\n  }\n\n  public bell(): void {\n    this._onBell.fire();\n  }\n\n  public input(data: string, wasUserInput: boolean = true): void {\n    this.coreService.triggerDataEvent(data, wasUserInput);\n  }\n\n  /**\n   * Resizes the terminal.\n   *\n   * @param x The number of columns to resize to.\n   * @param y The number of rows to resize to.\n   */\n  public resize(x: number, y: number): void {\n    if (x === this.cols && y === this.rows) {\n      return;\n    }\n\n    super.resize(x, y);\n  }\n\n  /**\n   * Clear the entire buffer, making the prompt line the new first line.\n   */\n  public clear(): void {\n    if (this.buffer.ybase === 0 && this.buffer.y === 0) {\n      // Don't clear if it's already clear\n      return;\n    }\n    this.buffer.lines.set(0, this.buffer.lines.get(this.buffer.ybase + this.buffer.y)!);\n    this.buffer.lines.length = 1;\n    this.buffer.ydisp = 0;\n    this.buffer.ybase = 0;\n    this.buffer.y = 0;\n    for (let i = 1; i < this.rows; i++) {\n      this.buffer.lines.push(this.buffer.getBlankLine(DEFAULT_ATTR_DATA));\n    }\n    this._onScroll.fire({ position: this.buffer.ydisp });\n  }\n\n  /**\n   * Reset terminal.\n   * Note: Calling this directly from JS is synchronous but does not clear\n   * input buffers and does not reset the parser, thus the terminal will\n   * continue to apply pending input data.\n   * If you need in band reset (synchronous with input data) consider\n   * using DECSTR (soft reset, CSI ! p) or RIS instead (hard reset, ESC c).\n   */\n  public reset(): void {\n    /**\n     * Since _setup handles a full terminal creation, we have to carry forward\n     * a few things that should not reset.\n     */\n    this.options.rows = this.rows;\n    this.options.cols = this.cols;\n\n    this._setup();\n    super.reset();\n  }\n}\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Permutation = exports.CallbackIterable = exports.ArrayQueue = exports.booleanComparator = exports.numberComparator = exports.CompareResult = void 0;\nexports.tail = tail;\nexports.tail2 = tail2;\nexports.equals = equals;\nexports.removeFastWithoutKeepingOrder = removeFastWithoutKeepingOrder;\nexports.binarySearch = binarySearch;\nexports.binarySearch2 = binarySearch2;\nexports.quickSelect = quickSelect;\nexports.groupBy = groupBy;\nexports.groupAdjacentBy = groupAdjacentBy;\nexports.forEachAdjacent = forEachAdjacent;\nexports.forEachWithNeighbors = forEachWithNeighbors;\nexports.sortedDiff = sortedDiff;\nexports.delta = delta;\nexports.top = top;\nexports.topAsync = topAsync;\nexports.coalesce = coalesce;\nexports.coalesceInPlace = coalesceInPlace;\nexports.move = move;\nexports.isFalsyOrEmpty = isFalsyOrEmpty;\nexports.isNonEmptyArray = isNonEmptyArray;\nexports.distinct = distinct;\nexports.uniqueFilter = uniqueFilter;\nexports.firstOrDefault = firstOrDefault;\nexports.lastOrDefault = lastOrDefault;\nexports.commonPrefixLength = commonPrefixLength;\nexports.range = range;\nexports.index = index;\nexports.insert = insert;\nexports.remove = remove;\nexports.arrayInsert = arrayInsert;\nexports.shuffle = shuffle;\nexports.pushToStart = pushToStart;\nexports.pushToEnd = pushToEnd;\nexports.pushMany = pushMany;\nexports.mapArrayOrNot = mapArrayOrNot;\nexports.asArray = asArray;\nexports.getRandomElement = getRandomElement;\nexports.insertInto = insertInto;\nexports.splice = splice;\nexports.compareBy = compareBy;\nexports.tieBreakComparators = tieBreakComparators;\nexports.reverseOrder = reverseOrder;\nconst errors_1 = require(\"vs/base/common/errors\");\nconst arraysFind_1 = require(\"./arraysFind\");\n/**\n * Returns the last element of an array.\n * @param array The array.\n * @param n Which element from the end (default is zero).\n */\nfunction tail(array, n = 0) {\n    return array[array.length - (1 + n)];\n}\nfunction tail2(arr) {\n    if (arr.length === 0) {\n        throw new Error('Invalid tail call');\n    }\n    return [arr.slice(0, arr.length - 1), arr[arr.length - 1]];\n}\nfunction equals(one, other, itemEquals = (a, b) => a === b) {\n    if (one === other) {\n        return true;\n    }\n    if (!one || !other) {\n        return false;\n    }\n    if (one.length !== other.length) {\n        return false;\n    }\n    for (let i = 0, len = one.length; i < len; i++) {\n        if (!itemEquals(one[i], other[i])) {\n            return false;\n        }\n    }\n    return true;\n}\n/**\n * Remove the element at `index` by replacing it with the last element. This is faster than `splice`\n * but changes the order of the array\n */\nfunction removeFastWithoutKeepingOrder(array, index) {\n    const last = array.length - 1;\n    if (index < last) {\n        array[index] = array[last];\n    }\n    array.pop();\n}\n/**\n * Performs a binary search algorithm over a sorted array.\n *\n * @param array The array being searched.\n * @param key The value we search for.\n * @param comparator A function that takes two array elements and returns zero\n *   if they are equal, a negative number if the first element precedes the\n *   second one in the sorting order, or a positive number if the second element\n *   precedes the first one.\n * @return See {@link binarySearch2}\n */\nfunction binarySearch(array, key, comparator) {\n    return binarySearch2(array.length, i => comparator(array[i], key));\n}\n/**\n * Performs a binary search algorithm over a sorted collection. Useful for cases\n * when we need to perform a binary search over something that isn't actually an\n * array, and converting data to an array would defeat the use of binary search\n * in the first place.\n *\n * @param length The collection length.\n * @param compareToKey A function that takes an index of an element in the\n *   collection and returns zero if the value at this index is equal to the\n *   search key, a negative number if the value precedes the search key in the\n *   sorting order, or a positive number if the search key precedes the value.\n * @return A non-negative index of an element, if found. If not found, the\n *   result is -(n+1) (or ~n, using bitwise notation), where n is the index\n *   where the key should be inserted to maintain the sorting order.\n */\nfunction binarySearch2(length, compareToKey) {\n    let low = 0, high = length - 1;\n    while (low <= high) {\n        const mid = ((low + high) / 2) | 0;\n        const comp = compareToKey(mid);\n        if (comp < 0) {\n            low = mid + 1;\n        }\n        else if (comp > 0) {\n            high = mid - 1;\n        }\n        else {\n            return mid;\n        }\n    }\n    return -(low + 1);\n}\nfunction quickSelect(nth, data, compare) {\n    nth = nth | 0;\n    if (nth >= data.length) {\n        throw new TypeError('invalid index');\n    }\n    const pivotValue = data[Math.floor(data.length * Math.random())];\n    const lower = [];\n    const higher = [];\n    const pivots = [];\n    for (const value of data) {\n        const val = compare(value, pivotValue);\n        if (val < 0) {\n            lower.push(value);\n        }\n        else if (val > 0) {\n            higher.push(value);\n        }\n        else {\n            pivots.push(value);\n        }\n    }\n    if (nth < lower.length) {\n        return quickSelect(nth, lower, compare);\n    }\n    else if (nth < lower.length + pivots.length) {\n        return pivots[0];\n    }\n    else {\n        return quickSelect(nth - (lower.length + pivots.length), higher, compare);\n    }\n}\nfunction groupBy(data, compare) {\n    const result = [];\n    let currentGroup = undefined;\n    for (const element of data.slice(0).sort(compare)) {\n        if (!currentGroup || compare(currentGroup[0], element) !== 0) {\n            currentGroup = [element];\n            result.push(currentGroup);\n        }\n        else {\n            currentGroup.push(element);\n        }\n    }\n    return result;\n}\n/**\n * Splits the given items into a list of (non-empty) groups.\n * `shouldBeGrouped` is used to decide if two consecutive items should be in the same group.\n * The order of the items is preserved.\n */\nfunction* groupAdjacentBy(items, shouldBeGrouped) {\n    let currentGroup;\n    let last;\n    for (const item of items) {\n        if (last !== undefined && shouldBeGrouped(last, item)) {\n            currentGroup.push(item);\n        }\n        else {\n            if (currentGroup) {\n                yield currentGroup;\n            }\n            currentGroup = [item];\n        }\n        last = item;\n    }\n    if (currentGroup) {\n        yield currentGroup;\n    }\n}\nfunction forEachAdjacent(arr, f) {\n    for (let i = 0; i <= arr.length; i++) {\n        f(i === 0 ? undefined : arr[i - 1], i === arr.length ? undefined : arr[i]);\n    }\n}\nfunction forEachWithNeighbors(arr, f) {\n    for (let i = 0; i < arr.length; i++) {\n        f(i === 0 ? undefined : arr[i - 1], arr[i], i + 1 === arr.length ? undefined : arr[i + 1]);\n    }\n}\n/**\n * Diffs two *sorted* arrays and computes the splices which apply the diff.\n */\nfunction sortedDiff(before, after, compare) {\n    const result = [];\n    function pushSplice(start, deleteCount, toInsert) {\n        if (deleteCount === 0 && toInsert.length === 0) {\n            return;\n        }\n        const latest = result[result.length - 1];\n        if (latest && latest.start + latest.deleteCount === start) {\n            latest.deleteCount += deleteCount;\n            latest.toInsert.push(...toInsert);\n        }\n        else {\n            result.push({ start, deleteCount, toInsert });\n        }\n    }\n    let beforeIdx = 0;\n    let afterIdx = 0;\n    while (true) {\n        if (beforeIdx === before.length) {\n            pushSplice(beforeIdx, 0, after.slice(afterIdx));\n            break;\n        }\n        if (afterIdx === after.length) {\n            pushSplice(beforeIdx, before.length - beforeIdx, []);\n            break;\n        }\n        const beforeElement = before[beforeIdx];\n        const afterElement = after[afterIdx];\n        const n = compare(beforeElement, afterElement);\n        if (n === 0) {\n            // equal\n            beforeIdx += 1;\n            afterIdx += 1;\n        }\n        else if (n < 0) {\n            // beforeElement is smaller -> before element removed\n            pushSplice(beforeIdx, 1, []);\n            beforeIdx += 1;\n        }\n        else if (n > 0) {\n            // beforeElement is greater -> after element added\n            pushSplice(beforeIdx, 0, [afterElement]);\n            afterIdx += 1;\n        }\n    }\n    return result;\n}\n/**\n * Takes two *sorted* arrays and computes their delta (removed, added elements).\n * Finishes in `Math.min(before.length, after.length)` steps.\n */\nfunction delta(before, after, compare) {\n    const splices = sortedDiff(before, after, compare);\n    const removed = [];\n    const added = [];\n    for (const splice of splices) {\n        removed.push(...before.slice(splice.start, splice.start + splice.deleteCount));\n        added.push(...splice.toInsert);\n    }\n    return { removed, added };\n}\n/**\n * Returns the top N elements from the array.\n *\n * Faster than sorting the entire array when the array is a lot larger than N.\n *\n * @param array The unsorted array.\n * @param compare A sort function for the elements.\n * @param n The number of elements to return.\n * @return The first n elements from array when sorted with compare.\n */\nfunction top(array, compare, n) {\n    if (n === 0) {\n        return [];\n    }\n    const result = array.slice(0, n).sort(compare);\n    topStep(array, compare, result, n, array.length);\n    return result;\n}\n/**\n * Asynchronous variant of `top()` allowing for splitting up work in batches between which the event loop can run.\n *\n * Returns the top N elements from the array.\n *\n * Faster than sorting the entire array when the array is a lot larger than N.\n *\n * @param array The unsorted array.\n * @param compare A sort function for the elements.\n * @param n The number of elements to return.\n * @param batch The number of elements to examine before yielding to the event loop.\n * @return The first n elements from array when sorted with compare.\n */\nfunction topAsync(array, compare, n, batch, token) {\n    if (n === 0) {\n        return Promise.resolve([]);\n    }\n    return new Promise((resolve, reject) => {\n        (async () => {\n            const o = array.length;\n            const result = array.slice(0, n).sort(compare);\n            for (let i = n, m = Math.min(n + batch, o); i < o; i = m, m = Math.min(m + batch, o)) {\n                if (i > n) {\n                    await new Promise(resolve => setTimeout(resolve)); // any other delay function would starve I/O\n                }\n                if (token && token.isCancellationRequested) {\n                    throw new errors_1.CancellationError();\n                }\n                topStep(array, compare, result, i, m);\n            }\n            return result;\n        })()\n            .then(resolve, reject);\n    });\n}\nfunction topStep(array, compare, result, i, m) {\n    for (const n = result.length; i < m; i++) {\n        const element = array[i];\n        if (compare(element, result[n - 1]) < 0) {\n            result.pop();\n            const j = (0, arraysFind_1.findFirstIdxMonotonousOrArrLen)(result, e => compare(element, e) < 0);\n            result.splice(j, 0, element);\n        }\n    }\n}\n/**\n * @returns New array with all falsy values removed. The original array IS NOT modified.\n */\nfunction coalesce(array) {\n    return array.filter((e) => !!e);\n}\n/**\n * Remove all falsy values from `array`. The original array IS modified.\n */\nfunction coalesceInPlace(array) {\n    let to = 0;\n    for (let i = 0; i < array.length; i++) {\n        if (!!array[i]) {\n            array[to] = array[i];\n            to += 1;\n        }\n    }\n    array.length = to;\n}\n/**\n * @deprecated Use `Array.copyWithin` instead\n */\nfunction move(array, from, to) {\n    array.splice(to, 0, array.splice(from, 1)[0]);\n}\n/**\n * @returns false if the provided object is an array and not empty.\n */\nfunction isFalsyOrEmpty(obj) {\n    return !Array.isArray(obj) || obj.length === 0;\n}\nfunction isNonEmptyArray(obj) {\n    return Array.isArray(obj) && obj.length > 0;\n}\n/**\n * Removes duplicates from the given array. The optional keyFn allows to specify\n * how elements are checked for equality by returning an alternate value for each.\n */\nfunction distinct(array, keyFn = value => value) {\n    const seen = new Set();\n    return array.filter(element => {\n        const key = keyFn(element);\n        if (seen.has(key)) {\n            return false;\n        }\n        seen.add(key);\n        return true;\n    });\n}\nfunction uniqueFilter(keyFn) {\n    const seen = new Set();\n    return element => {\n        const key = keyFn(element);\n        if (seen.has(key)) {\n            return false;\n        }\n        seen.add(key);\n        return true;\n    };\n}\nfunction firstOrDefault(array, notFoundValue) {\n    return array.length > 0 ? array[0] : notFoundValue;\n}\nfunction lastOrDefault(array, notFoundValue) {\n    return array.length > 0 ? array[array.length - 1] : notFoundValue;\n}\nfunction commonPrefixLength(one, other, equals = (a, b) => a === b) {\n    let result = 0;\n    for (let i = 0, len = Math.min(one.length, other.length); i < len && equals(one[i], other[i]); i++) {\n        result++;\n    }\n    return result;\n}\nfunction range(arg, to) {\n    let from = typeof to === 'number' ? arg : 0;\n    if (typeof to === 'number') {\n        from = arg;\n    }\n    else {\n        from = 0;\n        to = arg;\n    }\n    const result = [];\n    if (from <= to) {\n        for (let i = from; i < to; i++) {\n            result.push(i);\n        }\n    }\n    else {\n        for (let i = from; i > to; i--) {\n            result.push(i);\n        }\n    }\n    return result;\n}\nfunction index(array, indexer, mapper) {\n    return array.reduce((r, t) => {\n        r[indexer(t)] = mapper ? mapper(t) : t;\n        return r;\n    }, Object.create(null));\n}\n/**\n * Inserts an element into an array. Returns a function which, when\n * called, will remove that element from the array.\n *\n * @deprecated In almost all cases, use a `Set<T>` instead.\n */\nfunction insert(array, element) {\n    array.push(element);\n    return () => remove(array, element);\n}\n/**\n * Removes an element from an array if it can be found.\n *\n * @deprecated In almost all cases, use a `Set<T>` instead.\n */\nfunction remove(array, element) {\n    const index = array.indexOf(element);\n    if (index > -1) {\n        array.splice(index, 1);\n        return element;\n    }\n    return undefined;\n}\n/**\n * Insert `insertArr` inside `target` at `insertIndex`.\n * Please don't touch unless you understand https://jsperf.com/inserting-an-array-within-an-array\n */\nfunction arrayInsert(target, insertIndex, insertArr) {\n    const before = target.slice(0, insertIndex);\n    const after = target.slice(insertIndex);\n    return before.concat(insertArr, after);\n}\n/**\n * Uses Fisher-Yates shuffle to shuffle the given array\n */\nfunction shuffle(array, _seed) {\n    let rand;\n    if (typeof _seed === 'number') {\n        let seed = _seed;\n        // Seeded random number generator in JS. Modified from:\n        // https://stackoverflow.com/questions/521295/seeding-the-random-number-generator-in-javascript\n        rand = () => {\n            const x = Math.sin(seed++) * 179426549; // throw away most significant digits and reduce any potential bias\n            return x - Math.floor(x);\n        };\n    }\n    else {\n        rand = Math.random;\n    }\n    for (let i = array.length - 1; i > 0; i -= 1) {\n        const j = Math.floor(rand() * (i + 1));\n        const temp = array[i];\n        array[i] = array[j];\n        array[j] = temp;\n    }\n}\n/**\n * Pushes an element to the start of the array, if found.\n */\nfunction pushToStart(arr, value) {\n    const index = arr.indexOf(value);\n    if (index > -1) {\n        arr.splice(index, 1);\n        arr.unshift(value);\n    }\n}\n/**\n * Pushes an element to the end of the array, if found.\n */\nfunction pushToEnd(arr, value) {\n    const index = arr.indexOf(value);\n    if (index > -1) {\n        arr.splice(index, 1);\n        arr.push(value);\n    }\n}\nfunction pushMany(arr, items) {\n    for (const item of items) {\n        arr.push(item);\n    }\n}\nfunction mapArrayOrNot(items, fn) {\n    return Array.isArray(items) ?\n        items.map(fn) :\n        fn(items);\n}\nfunction asArray(x) {\n    return Array.isArray(x) ? x : [x];\n}\nfunction getRandomElement(arr) {\n    return arr[Math.floor(Math.random() * arr.length)];\n}\n/**\n * Insert the new items in the array.\n * @param array The original array.\n * @param start The zero-based location in the array from which to start inserting elements.\n * @param newItems The items to be inserted\n */\nfunction insertInto(array, start, newItems) {\n    const startIdx = getActualStartIndex(array, start);\n    const originalLength = array.length;\n    const newItemsLength = newItems.length;\n    array.length = originalLength + newItemsLength;\n    // Move the items after the start index, start from the end so that we don't overwrite any value.\n    for (let i = originalLength - 1; i >= startIdx; i--) {\n        array[i + newItemsLength] = array[i];\n    }\n    for (let i = 0; i < newItemsLength; i++) {\n        array[i + startIdx] = newItems[i];\n    }\n}\n/**\n * Removes elements from an array and inserts new elements in their place, returning the deleted elements. Alternative to the native Array.splice method, it\n * can only support limited number of items due to the maximum call stack size limit.\n * @param array The original array.\n * @param start The zero-based location in the array from which to start removing elements.\n * @param deleteCount The number of elements to remove.\n * @returns An array containing the elements that were deleted.\n */\nfunction splice(array, start, deleteCount, newItems) {\n    const index = getActualStartIndex(array, start);\n    let result = array.splice(index, deleteCount);\n    if (result === undefined) {\n        // see https://bugs.webkit.org/show_bug.cgi?id=261140\n        result = [];\n    }\n    insertInto(array, index, newItems);\n    return result;\n}\n/**\n * Determine the actual start index (same logic as the native splice() or slice())\n * If greater than the length of the array, start will be set to the length of the array. In this case, no element will be deleted but the method will behave as an adding function, adding as many element as item[n*] provided.\n * If negative, it will begin that many elements from the end of the array. (In this case, the origin -1, meaning -n is the index of the nth last element, and is therefore equivalent to the index of array.length - n.) If array.length + start is less than 0, it will begin from index 0.\n * @param array The target array.\n * @param start The operation index.\n */\nfunction getActualStartIndex(array, start) {\n    return start < 0 ? Math.max(start + array.length, 0) : Math.min(start, array.length);\n}\nvar CompareResult;\n(function (CompareResult) {\n    function isLessThan(result) {\n        return result < 0;\n    }\n    CompareResult.isLessThan = isLessThan;\n    function isLessThanOrEqual(result) {\n        return result <= 0;\n    }\n    CompareResult.isLessThanOrEqual = isLessThanOrEqual;\n    function isGreaterThan(result) {\n        return result > 0;\n    }\n    CompareResult.isGreaterThan = isGreaterThan;\n    function isNeitherLessOrGreaterThan(result) {\n        return result === 0;\n    }\n    CompareResult.isNeitherLessOrGreaterThan = isNeitherLessOrGreaterThan;\n    CompareResult.greaterThan = 1;\n    CompareResult.lessThan = -1;\n    CompareResult.neitherLessOrGreaterThan = 0;\n})(CompareResult || (exports.CompareResult = CompareResult = {}));\nfunction compareBy(selector, comparator) {\n    return (a, b) => comparator(selector(a), selector(b));\n}\nfunction tieBreakComparators(...comparators) {\n    return (item1, item2) => {\n        for (const comparator of comparators) {\n            const result = comparator(item1, item2);\n            if (!CompareResult.isNeitherLessOrGreaterThan(result)) {\n                return result;\n            }\n        }\n        return CompareResult.neitherLessOrGreaterThan;\n    };\n}\n/**\n * The natural order on numbers.\n*/\nconst numberComparator = (a, b) => a - b;\nexports.numberComparator = numberComparator;\nconst booleanComparator = (a, b) => (0, exports.numberComparator)(a ? 1 : 0, b ? 1 : 0);\nexports.booleanComparator = booleanComparator;\nfunction reverseOrder(comparator) {\n    return (a, b) => -comparator(a, b);\n}\nclass ArrayQueue {\n    /**\n     * Constructs a queue that is backed by the given array. Runtime is O(1).\n    */\n    constructor(items) {\n        this.items = items;\n        this.firstIdx = 0;\n        this.lastIdx = this.items.length - 1;\n    }\n    get length() {\n        return this.lastIdx - this.firstIdx + 1;\n    }\n    /**\n     * Consumes elements from the beginning of the queue as long as the predicate returns true.\n     * If no elements were consumed, `null` is returned. Has a runtime of O(result.length).\n    */\n    takeWhile(predicate) {\n        // P(k) := k <= this.lastIdx && predicate(this.items[k])\n        // Find s := min { k | k >= this.firstIdx && !P(k) } and return this.data[this.firstIdx...s)\n        let startIdx = this.firstIdx;\n        while (startIdx < this.items.length && predicate(this.items[startIdx])) {\n            startIdx++;\n        }\n        const result = startIdx === this.firstIdx ? null : this.items.slice(this.firstIdx, startIdx);\n        this.firstIdx = startIdx;\n        return result;\n    }\n    /**\n     * Consumes elements from the end of the queue as long as the predicate returns true.\n     * If no elements were consumed, `null` is returned.\n     * The result has the same order as the underlying array!\n    */\n    takeFromEndWhile(predicate) {\n        // P(k) := this.firstIdx >= k && predicate(this.items[k])\n        // Find s := max { k | k <= this.lastIdx && !P(k) } and return this.data(s...this.lastIdx]\n        let endIdx = this.lastIdx;\n        while (endIdx >= 0 && predicate(this.items[endIdx])) {\n            endIdx--;\n        }\n        const result = endIdx === this.lastIdx ? null : this.items.slice(endIdx + 1, this.lastIdx + 1);\n        this.lastIdx = endIdx;\n        return result;\n    }\n    peek() {\n        if (this.length === 0) {\n            return undefined;\n        }\n        return this.items[this.firstIdx];\n    }\n    peekLast() {\n        if (this.length === 0) {\n            return undefined;\n        }\n        return this.items[this.lastIdx];\n    }\n    dequeue() {\n        const result = this.items[this.firstIdx];\n        this.firstIdx++;\n        return result;\n    }\n    removeLast() {\n        const result = this.items[this.lastIdx];\n        this.lastIdx--;\n        return result;\n    }\n    takeCount(count) {\n        const result = this.items.slice(this.firstIdx, this.firstIdx + count);\n        this.firstIdx += count;\n        return result;\n    }\n}\nexports.ArrayQueue = ArrayQueue;\n/**\n * This class is faster than an iterator and array for lazy computed data.\n*/\nclass CallbackIterable {\n    static { this.empty = new CallbackIterable(_callback => { }); }\n    constructor(\n    /**\n     * Calls the callback for every item.\n     * Stops when the callback returns false.\n    */\n    iterate) {\n        this.iterate = iterate;\n    }\n    forEach(handler) {\n        this.iterate(item => { handler(item); return true; });\n    }\n    toArray() {\n        const result = [];\n        this.iterate(item => { result.push(item); return true; });\n        return result;\n    }\n    filter(predicate) {\n        return new CallbackIterable(cb => this.iterate(item => predicate(item) ? cb(item) : true));\n    }\n    map(mapFn) {\n        return new CallbackIterable(cb => this.iterate(item => cb(mapFn(item))));\n    }\n    some(predicate) {\n        let result = false;\n        this.iterate(item => { result = predicate(item); return !result; });\n        return result;\n    }\n    findFirst(predicate) {\n        let result;\n        this.iterate(item => {\n            if (predicate(item)) {\n                result = item;\n                return false;\n            }\n            return true;\n        });\n        return result;\n    }\n    findLast(predicate) {\n        let result;\n        this.iterate(item => {\n            if (predicate(item)) {\n                result = item;\n            }\n            return true;\n        });\n        return result;\n    }\n    findLastMaxBy(comparator) {\n        let result;\n        let first = true;\n        this.iterate(item => {\n            if (first || CompareResult.isGreaterThan(comparator(item, result))) {\n                first = false;\n                result = item;\n            }\n            return true;\n        });\n        return result;\n    }\n}\nexports.CallbackIterable = CallbackIterable;\n/**\n * Represents a re-arrangement of items in an array.\n */\nclass Permutation {\n    constructor(_indexMap) {\n        this._indexMap = _indexMap;\n    }\n    /**\n     * Returns a permutation that sorts the given array according to the given compare function.\n     */\n    static createSortPermutation(arr, compareFn) {\n        const sortIndices = Array.from(arr.keys()).sort((index1, index2) => compareFn(arr[index1], arr[index2]));\n        return new Permutation(sortIndices);\n    }\n    /**\n     * Returns a new array with the elements of the given array re-arranged according to this permutation.\n     */\n    apply(arr) {\n        return arr.map((_, index) => arr[this._indexMap[index]]);\n    }\n    /**\n     * Returns a new permutation that undoes the re-arrangement of this permutation.\n    */\n    inverse() {\n        const inverseIndexMap = this._indexMap.slice();\n        for (let i = 0; i < this._indexMap.length; i++) {\n            inverseIndexMap[this._indexMap[i]] = i;\n        }\n        return new Permutation(inverseIndexMap);\n    }\n}\nexports.Permutation = Permutation;\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MonotonousArray = void 0;\nexports.findLast = findLast;\nexports.findLastIdx = findLastIdx;\nexports.findLastMonotonous = findLastMonotonous;\nexports.findLastIdxMonotonous = findLastIdxMonotonous;\nexports.findFirstMonotonous = findFirstMonotonous;\nexports.findFirstIdxMonotonousOrArrLen = findFirstIdxMonotonousOrArrLen;\nexports.findFirstIdxMonotonous = findFirstIdxMonotonous;\nexports.findFirstMax = findFirstMax;\nexports.findLastMax = findLastMax;\nexports.findFirstMin = findFirstMin;\nexports.findMaxIdx = findMaxIdx;\nexports.mapFindFirst = mapFindFirst;\nfunction findLast(array, predicate) {\n    const idx = findLastIdx(array, predicate);\n    if (idx === -1) {\n        return undefined;\n    }\n    return array[idx];\n}\nfunction findLastIdx(array, predicate, fromIndex = array.length - 1) {\n    for (let i = fromIndex; i >= 0; i--) {\n        const element = array[i];\n        if (predicate(element)) {\n            return i;\n        }\n    }\n    return -1;\n}\n/**\n * Finds the last item where predicate is true using binary search.\n * `predicate` must be monotonous, i.e. `arr.map(predicate)` must be like `[true, ..., true, false, ..., false]`!\n *\n * @returns `undefined` if no item matches, otherwise the last item that matches the predicate.\n */\nfunction findLastMonotonous(array, predicate) {\n    const idx = findLastIdxMonotonous(array, predicate);\n    return idx === -1 ? undefined : array[idx];\n}\n/**\n * Finds the last item where predicate is true using binary search.\n * `predicate` must be monotonous, i.e. `arr.map(predicate)` must be like `[true, ..., true, false, ..., false]`!\n *\n * @returns `startIdx - 1` if predicate is false for all items, otherwise the index of the last item that matches the predicate.\n */\nfunction findLastIdxMonotonous(array, predicate, startIdx = 0, endIdxEx = array.length) {\n    let i = startIdx;\n    let j = endIdxEx;\n    while (i < j) {\n        const k = Math.floor((i + j) / 2);\n        if (predicate(array[k])) {\n            i = k + 1;\n        }\n        else {\n            j = k;\n        }\n    }\n    return i - 1;\n}\n/**\n * Finds the first item where predicate is true using binary search.\n * `predicate` must be monotonous, i.e. `arr.map(predicate)` must be like `[false, ..., false, true, ..., true]`!\n *\n * @returns `undefined` if no item matches, otherwise the first item that matches the predicate.\n */\nfunction findFirstMonotonous(array, predicate) {\n    const idx = findFirstIdxMonotonousOrArrLen(array, predicate);\n    return idx === array.length ? undefined : array[idx];\n}\n/**\n * Finds the first item where predicate is true using binary search.\n * `predicate` must be monotonous, i.e. `arr.map(predicate)` must be like `[false, ..., false, true, ..., true]`!\n *\n * @returns `endIdxEx` if predicate is false for all items, otherwise the index of the first item that matches the predicate.\n */\nfunction findFirstIdxMonotonousOrArrLen(array, predicate, startIdx = 0, endIdxEx = array.length) {\n    let i = startIdx;\n    let j = endIdxEx;\n    while (i < j) {\n        const k = Math.floor((i + j) / 2);\n        if (predicate(array[k])) {\n            j = k;\n        }\n        else {\n            i = k + 1;\n        }\n    }\n    return i;\n}\nfunction findFirstIdxMonotonous(array, predicate, startIdx = 0, endIdxEx = array.length) {\n    const idx = findFirstIdxMonotonousOrArrLen(array, predicate, startIdx, endIdxEx);\n    return idx === array.length ? -1 : idx;\n}\n/**\n * Use this when\n * * You have a sorted array\n * * You query this array with a monotonous predicate to find the last item that has a certain property.\n * * You query this array multiple times with monotonous predicates that get weaker and weaker.\n */\nclass MonotonousArray {\n    static { this.assertInvariants = false; }\n    constructor(_array) {\n        this._array = _array;\n        this._findLastMonotonousLastIdx = 0;\n    }\n    /**\n     * The predicate must be monotonous, i.e. `arr.map(predicate)` must be like `[true, ..., true, false, ..., false]`!\n     * For subsequent calls, current predicate must be weaker than (or equal to) the previous predicate, i.e. more entries must be `true`.\n     */\n    findLastMonotonous(predicate) {\n        if (MonotonousArray.assertInvariants) {\n            if (this._prevFindLastPredicate) {\n                for (const item of this._array) {\n                    if (this._prevFindLastPredicate(item) && !predicate(item)) {\n                        throw new Error('MonotonousArray: current predicate must be weaker than (or equal to) the previous predicate.');\n                    }\n                }\n            }\n            this._prevFindLastPredicate = predicate;\n        }\n        const idx = findLastIdxMonotonous(this._array, predicate, this._findLastMonotonousLastIdx);\n        this._findLastMonotonousLastIdx = idx + 1;\n        return idx === -1 ? undefined : this._array[idx];\n    }\n}\nexports.MonotonousArray = MonotonousArray;\n/**\n * Returns the first item that is equal to or greater than every other item.\n*/\nfunction findFirstMax(array, comparator) {\n    if (array.length === 0) {\n        return undefined;\n    }\n    let max = array[0];\n    for (let i = 1; i < array.length; i++) {\n        const item = array[i];\n        if (comparator(item, max) > 0) {\n            max = item;\n        }\n    }\n    return max;\n}\n/**\n * Returns the last item that is equal to or greater than every other item.\n*/\nfunction findLastMax(array, comparator) {\n    if (array.length === 0) {\n        return undefined;\n    }\n    let max = array[0];\n    for (let i = 1; i < array.length; i++) {\n        const item = array[i];\n        if (comparator(item, max) >= 0) {\n            max = item;\n        }\n    }\n    return max;\n}\n/**\n * Returns the first item that is equal to or less than every other item.\n*/\nfunction findFirstMin(array, comparator) {\n    return findFirstMax(array, (a, b) => -comparator(a, b));\n}\nfunction findMaxIdx(array, comparator) {\n    if (array.length === 0) {\n        return -1;\n    }\n    let maxIdx = 0;\n    for (let i = 1; i < array.length; i++) {\n        const item = array[i];\n        if (comparator(item, array[maxIdx]) > 0) {\n            maxIdx = i;\n        }\n    }\n    return maxIdx;\n}\n/**\n * Returns the first mapped value of the array which is not undefined.\n */\nfunction mapFindFirst(items, mapFn) {\n    for (const value of items) {\n        const mapped = mapFn(value);\n        if (mapped !== undefined) {\n            return mapped;\n        }\n    }\n    return undefined;\n}\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar _a;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SetWithKey = void 0;\nexports.groupBy = groupBy;\nexports.diffSets = diffSets;\nexports.diffMaps = diffMaps;\nexports.intersection = intersection;\n/**\n * Groups the collection into a dictionary based on the provided\n * group function.\n */\nfunction groupBy(data, groupFn) {\n    const result = Object.create(null);\n    for (const element of data) {\n        const key = groupFn(element);\n        let target = result[key];\n        if (!target) {\n            target = result[key] = [];\n        }\n        target.push(element);\n    }\n    return result;\n}\nfunction diffSets(before, after) {\n    const removed = [];\n    const added = [];\n    for (const element of before) {\n        if (!after.has(element)) {\n            removed.push(element);\n        }\n    }\n    for (const element of after) {\n        if (!before.has(element)) {\n            added.push(element);\n        }\n    }\n    return { removed, added };\n}\nfunction diffMaps(before, after) {\n    const removed = [];\n    const added = [];\n    for (const [index, value] of before) {\n        if (!after.has(index)) {\n            removed.push(value);\n        }\n    }\n    for (const [index, value] of after) {\n        if (!before.has(index)) {\n            added.push(value);\n        }\n    }\n    return { removed, added };\n}\n/**\n * Computes the intersection of two sets.\n *\n * @param setA - The first set.\n * @param setB - The second iterable.\n * @returns A new set containing the elements that are in both `setA` and `setB`.\n */\nfunction intersection(setA, setB) {\n    const result = new Set();\n    for (const elem of setB) {\n        if (setA.has(elem)) {\n            result.add(elem);\n        }\n    }\n    return result;\n}\nclass SetWithKey {\n    static { _a = Symbol.toStringTag; }\n    constructor(values, toKey) {\n        this.toKey = toKey;\n        this._map = new Map();\n        this[_a] = 'SetWithKey';\n        for (const value of values) {\n            this.add(value);\n        }\n    }\n    get size() {\n        return this._map.size;\n    }\n    add(value) {\n        const key = this.toKey(value);\n        this._map.set(key, value);\n        return this;\n    }\n    delete(value) {\n        return this._map.delete(this.toKey(value));\n    }\n    has(value) {\n        return this._map.has(this.toKey(value));\n    }\n    *entries() {\n        for (const entry of this._map.values()) {\n            yield [entry, entry];\n        }\n    }\n    keys() {\n        return this.values();\n    }\n    *values() {\n        for (const entry of this._map.values()) {\n            yield entry;\n        }\n    }\n    clear() {\n        this._map.clear();\n    }\n    forEach(callbackfn, thisArg) {\n        this._map.forEach(entry => callbackfn.call(thisArg, entry, entry, this));\n    }\n    [Symbol.iterator]() {\n        return this.values();\n    }\n}\nexports.SetWithKey = SetWithKey;\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BugIndicatingError = exports.ErrorNoTelemetry = exports.ExpectedError = exports.NotSupportedError = exports.NotImplementedError = exports.ReadonlyError = exports.CancellationError = exports.errorHandler = exports.ErrorHandler = void 0;\nexports.setUnexpectedErrorHandler = setUnexpectedErrorHandler;\nexports.isSigPipeError = isSigPipeError;\nexports.onUnexpectedError = onUnexpectedError;\nexports.onUnexpectedExternalError = onUnexpectedExternalError;\nexports.transformErrorForSerialization = transformErrorForSerialization;\nexports.transformErrorFromSerialization = transformErrorFromSerialization;\nexports.isCancellationError = isCancellationError;\nexports.canceled = canceled;\nexports.illegalArgument = illegalArgument;\nexports.illegalState = illegalState;\nexports.getErrorMessage = getErrorMessage;\n// Avoid circular dependency on EventEmitter by implementing a subset of the interface.\nclass ErrorHandler {\n    constructor() {\n        this.listeners = [];\n        this.unexpectedErrorHandler = function (e) {\n            setTimeout(() => {\n                if (e.stack) {\n                    if (ErrorNoTelemetry.isErrorNoTelemetry(e)) {\n                        throw new ErrorNoTelemetry(e.message + '\\n\\n' + e.stack);\n                    }\n                    throw new Error(e.message + '\\n\\n' + e.stack);\n                }\n                throw e;\n            }, 0);\n        };\n    }\n    addListener(listener) {\n        this.listeners.push(listener);\n        return () => {\n            this._removeListener(listener);\n        };\n    }\n    emit(e) {\n        this.listeners.forEach((listener) => {\n            listener(e);\n        });\n    }\n    _removeListener(listener) {\n        this.listeners.splice(this.listeners.indexOf(listener), 1);\n    }\n    setUnexpectedErrorHandler(newUnexpectedErrorHandler) {\n        this.unexpectedErrorHandler = newUnexpectedErrorHandler;\n    }\n    getUnexpectedErrorHandler() {\n        return this.unexpectedErrorHandler;\n    }\n    onUnexpectedError(e) {\n        this.unexpectedErrorHandler(e);\n        this.emit(e);\n    }\n    // For external errors, we don't want the listeners to be called\n    onUnexpectedExternalError(e) {\n        this.unexpectedErrorHandler(e);\n    }\n}\nexports.ErrorHandler = ErrorHandler;\nexports.errorHandler = new ErrorHandler();\n/** @skipMangle */\nfunction setUnexpectedErrorHandler(newUnexpectedErrorHandler) {\n    exports.errorHandler.setUnexpectedErrorHandler(newUnexpectedErrorHandler);\n}\n/**\n * Returns if the error is a SIGPIPE error. SIGPIPE errors should generally be\n * logged at most once, to avoid a loop.\n *\n * @see https://github.com/microsoft/vscode-remote-release/issues/6481\n */\nfunction isSigPipeError(e) {\n    if (!e || typeof e !== 'object') {\n        return false;\n    }\n    const cast = e;\n    return cast.code === 'EPIPE' && cast.syscall?.toUpperCase() === 'WRITE';\n}\nfunction onUnexpectedError(e) {\n    // ignore errors from cancelled promises\n    if (!isCancellationError(e)) {\n        exports.errorHandler.onUnexpectedError(e);\n    }\n    return undefined;\n}\nfunction onUnexpectedExternalError(e) {\n    // ignore errors from cancelled promises\n    if (!isCancellationError(e)) {\n        exports.errorHandler.onUnexpectedExternalError(e);\n    }\n    return undefined;\n}\nfunction transformErrorForSerialization(error) {\n    if (error instanceof Error) {\n        const { name, message } = error;\n        const stack = error.stacktrace || error.stack;\n        return {\n            $isError: true,\n            name,\n            message,\n            stack,\n            noTelemetry: ErrorNoTelemetry.isErrorNoTelemetry(error)\n        };\n    }\n    // return as is\n    return error;\n}\nfunction transformErrorFromSerialization(data) {\n    let error;\n    if (data.noTelemetry) {\n        error = new ErrorNoTelemetry();\n    }\n    else {\n        error = new Error();\n        error.name = data.name;\n    }\n    error.message = data.message;\n    error.stack = data.stack;\n    return error;\n}\nconst canceledName = 'Canceled';\n/**\n * Checks if the given error is a promise in canceled state\n */\nfunction isCancellationError(error) {\n    if (error instanceof CancellationError) {\n        return true;\n    }\n    return error instanceof Error && error.name === canceledName && error.message === canceledName;\n}\n// !!!IMPORTANT!!!\n// Do NOT change this class because it is also used as an API-type.\nclass CancellationError extends Error {\n    constructor() {\n        super(canceledName);\n        this.name = this.message;\n    }\n}\nexports.CancellationError = CancellationError;\n/**\n * @deprecated use {@link CancellationError `new CancellationError()`} instead\n */\nfunction canceled() {\n    const error = new Error(canceledName);\n    error.name = error.message;\n    return error;\n}\nfunction illegalArgument(name) {\n    if (name) {\n        return new Error(`Illegal argument: ${name}`);\n    }\n    else {\n        return new Error('Illegal argument');\n    }\n}\nfunction illegalState(name) {\n    if (name) {\n        return new Error(`Illegal state: ${name}`);\n    }\n    else {\n        return new Error('Illegal state');\n    }\n}\nclass ReadonlyError extends TypeError {\n    constructor(name) {\n        super(name ? `${name} is read-only and cannot be changed` : 'Cannot change read-only property');\n    }\n}\nexports.ReadonlyError = ReadonlyError;\nfunction getErrorMessage(err) {\n    if (!err) {\n        return 'Error';\n    }\n    if (err.message) {\n        return err.message;\n    }\n    if (err.stack) {\n        return err.stack.split('\\n')[0];\n    }\n    return String(err);\n}\nclass NotImplementedError extends Error {\n    constructor(message) {\n        super('NotImplemented');\n        if (message) {\n            this.message = message;\n        }\n    }\n}\nexports.NotImplementedError = NotImplementedError;\nclass NotSupportedError extends Error {\n    constructor(message) {\n        super('NotSupported');\n        if (message) {\n            this.message = message;\n        }\n    }\n}\nexports.NotSupportedError = NotSupportedError;\nclass ExpectedError extends Error {\n    constructor() {\n        super(...arguments);\n        this.isExpected = true;\n    }\n}\nexports.ExpectedError = ExpectedError;\n/**\n * Error that when thrown won't be logged in telemetry as an unhandled error.\n */\nclass ErrorNoTelemetry extends Error {\n    constructor(msg) {\n        super(msg);\n        this.name = 'CodeExpectedError';\n    }\n    static fromError(err) {\n        if (err instanceof ErrorNoTelemetry) {\n            return err;\n        }\n        const result = new ErrorNoTelemetry();\n        result.message = err.message;\n        result.stack = err.stack;\n        return result;\n    }\n    static isErrorNoTelemetry(err) {\n        return err.name === 'CodeExpectedError';\n    }\n}\nexports.ErrorNoTelemetry = ErrorNoTelemetry;\n/**\n * This error indicates a bug.\n * Do not throw this for invalid user input.\n * Only catch this error to recover gracefully from bugs.\n */\nclass BugIndicatingError extends Error {\n    constructor(message) {\n        super(message || 'An unexpected bug occurred.');\n        Object.setPrototypeOf(this, BugIndicatingError.prototype);\n        // Because we know for sure only buggy code throws this,\n        // we definitely want to break here and fix the bug.\n        // eslint-disable-next-line no-debugger\n        // debugger;\n    }\n}\nexports.BugIndicatingError = BugIndicatingError;\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ValueWithChangeEvent = exports.Relay = exports.EventBufferer = exports.DynamicListEventMultiplexer = exports.EventMultiplexer = exports.MicrotaskEmitter = exports.DebounceEmitter = exports.PauseableEmitter = exports.AsyncEmitter = exports.createEventDeliveryQueue = exports.Emitter = exports.ListenerRefusalError = exports.ListenerLeakError = exports.EventProfiling = exports.Event = void 0;\nexports.setGlobalLeakWarningThreshold = setGlobalLeakWarningThreshold;\nconst errors_1 = require(\"vs/base/common/errors\");\nconst functional_1 = require(\"vs/base/common/functional\");\nconst lifecycle_1 = require(\"vs/base/common/lifecycle\");\nconst linkedList_1 = require(\"vs/base/common/linkedList\");\nconst stopwatch_1 = require(\"vs/base/common/stopwatch\");\n// -----------------------------------------------------------------------------------------------------------------------\n// Uncomment the next line to print warnings whenever a listener is GC'ed without having been disposed. This is a LEAK.\n// -----------------------------------------------------------------------------------------------------------------------\nconst _enableListenerGCedWarning = false;\n// -----------------------------------------------------------------------------------------------------------------------\n// Uncomment the next line to print warnings whenever an emitter with listeners is disposed. That is a sign of code smell.\n// -----------------------------------------------------------------------------------------------------------------------\nconst _enableDisposeWithListenerWarning = false;\n// -----------------------------------------------------------------------------------------------------------------------\n// Uncomment the next line to print warnings whenever a snapshotted event is used repeatedly without cleanup.\n// See https://github.com/microsoft/vscode/issues/142851\n// -----------------------------------------------------------------------------------------------------------------------\nconst _enableSnapshotPotentialLeakWarning = false;\nvar Event;\n(function (Event) {\n    Event.None = () => lifecycle_1.Disposable.None;\n    function _addLeakageTraceLogic(options) {\n        if (_enableSnapshotPotentialLeakWarning) {\n            const { onDidAddListener: origListenerDidAdd } = options;\n            const stack = Stacktrace.create();\n            let count = 0;\n            options.onDidAddListener = () => {\n                if (++count === 2) {\n                    console.warn('snapshotted emitter LIKELY used public and SHOULD HAVE BEEN created with DisposableStore. snapshotted here');\n                    stack.print();\n                }\n                origListenerDidAdd?.();\n            };\n        }\n    }\n    /**\n     * Given an event, returns another event which debounces calls and defers the listeners to a later task via a shared\n     * `setTimeout`. The event is converted into a signal (`Event<void>`) to avoid additional object creation as a\n     * result of merging events and to try prevent race conditions that could arise when using related deferred and\n     * non-deferred events.\n     *\n     * This is useful for deferring non-critical work (eg. general UI updates) to ensure it does not block critical work\n     * (eg. latency of keypress to text rendered).\n     *\n     * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned\n     * event is accessible to \"third parties\", e.g the event is a public property. Otherwise a leaked listener on the\n     * returned event causes this utility to leak a listener on the original event.\n     *\n     * @param event The event source for the new event.\n     * @param disposable A disposable store to add the new EventEmitter to.\n     */\n    function defer(event, disposable) {\n        return debounce(event, () => void 0, 0, undefined, true, undefined, disposable);\n    }\n    Event.defer = defer;\n    /**\n     * Given an event, returns another event which only fires once.\n     *\n     * @param event The event source for the new event.\n     */\n    function once(event) {\n        return (listener, thisArgs = null, disposables) => {\n            // we need this, in case the event fires during the listener call\n            let didFire = false;\n            let result = undefined;\n            result = event(e => {\n                if (didFire) {\n                    return;\n                }\n                else if (result) {\n                    result.dispose();\n                }\n                else {\n                    didFire = true;\n                }\n                return listener.call(thisArgs, e);\n            }, null, disposables);\n            if (didFire) {\n                result.dispose();\n            }\n            return result;\n        };\n    }\n    Event.once = once;\n    /**\n     * Maps an event of one type into an event of another type using a mapping function, similar to how\n     * `Array.prototype.map` works.\n     *\n     * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned\n     * event is accessible to \"third parties\", e.g the event is a public property. Otherwise a leaked listener on the\n     * returned event causes this utility to leak a listener on the original event.\n     *\n     * @param event The event source for the new event.\n     * @param map The mapping function.\n     * @param disposable A disposable store to add the new EventEmitter to.\n     */\n    function map(event, map, disposable) {\n        return snapshot((listener, thisArgs = null, disposables) => event(i => listener.call(thisArgs, map(i)), null, disposables), disposable);\n    }\n    Event.map = map;\n    /**\n     * Wraps an event in another event that performs some function on the event object before firing.\n     *\n     * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned\n     * event is accessible to \"third parties\", e.g the event is a public property. Otherwise a leaked listener on the\n     * returned event causes this utility to leak a listener on the original event.\n     *\n     * @param event The event source for the new event.\n     * @param each The function to perform on the event object.\n     * @param disposable A disposable store to add the new EventEmitter to.\n     */\n    function forEach(event, each, disposable) {\n        return snapshot((listener, thisArgs = null, disposables) => event(i => { each(i); listener.call(thisArgs, i); }, null, disposables), disposable);\n    }\n    Event.forEach = forEach;\n    function filter(event, filter, disposable) {\n        return snapshot((listener, thisArgs = null, disposables) => event(e => filter(e) && listener.call(thisArgs, e), null, disposables), disposable);\n    }\n    Event.filter = filter;\n    /**\n     * Given an event, returns the same event but typed as `Event<void>`.\n     */\n    function signal(event) {\n        return event;\n    }\n    Event.signal = signal;\n    function any(...events) {\n        return (listener, thisArgs = null, disposables) => {\n            const disposable = (0, lifecycle_1.combinedDisposable)(...events.map(event => event(e => listener.call(thisArgs, e))));\n            return addAndReturnDisposable(disposable, disposables);\n        };\n    }\n    Event.any = any;\n    /**\n     * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned\n     * event is accessible to \"third parties\", e.g the event is a public property. Otherwise a leaked listener on the\n     * returned event causes this utility to leak a listener on the original event.\n     */\n    function reduce(event, merge, initial, disposable) {\n        let output = initial;\n        return map(event, e => {\n            output = merge(output, e);\n            return output;\n        }, disposable);\n    }\n    Event.reduce = reduce;\n    function snapshot(event, disposable) {\n        let listener;\n        const options = {\n            onWillAddFirstListener() {\n                listener = event(emitter.fire, emitter);\n            },\n            onDidRemoveLastListener() {\n                listener?.dispose();\n            }\n        };\n        if (!disposable) {\n            _addLeakageTraceLogic(options);\n        }\n        const emitter = new Emitter(options);\n        disposable?.add(emitter);\n        return emitter.event;\n    }\n    /**\n     * Adds the IDisposable to the store if it's set, and returns it. Useful to\n     * Event function implementation.\n     */\n    function addAndReturnDisposable(d, store) {\n        if (store instanceof Array) {\n            store.push(d);\n        }\n        else if (store) {\n            store.add(d);\n        }\n        return d;\n    }\n    function debounce(event, merge, delay = 100, leading = false, flushOnListenerRemove = false, leakWarningThreshold, disposable) {\n        let subscription;\n        let output = undefined;\n        let handle = undefined;\n        let numDebouncedCalls = 0;\n        let doFire;\n        const options = {\n            leakWarningThreshold,\n            onWillAddFirstListener() {\n                subscription = event(cur => {\n                    numDebouncedCalls++;\n                    output = merge(output, cur);\n                    if (leading && !handle) {\n                        emitter.fire(output);\n                        output = undefined;\n                    }\n                    doFire = () => {\n                        const _output = output;\n                        output = undefined;\n                        handle = undefined;\n                        if (!leading || numDebouncedCalls > 1) {\n                            emitter.fire(_output);\n                        }\n                        numDebouncedCalls = 0;\n                    };\n                    if (typeof delay === 'number') {\n                        clearTimeout(handle);\n                        handle = setTimeout(doFire, delay);\n                    }\n                    else {\n                        if (handle === undefined) {\n                            handle = 0;\n                            queueMicrotask(doFire);\n                        }\n                    }\n                });\n            },\n            onWillRemoveListener() {\n                if (flushOnListenerRemove && numDebouncedCalls > 0) {\n                    doFire?.();\n                }\n            },\n            onDidRemoveLastListener() {\n                doFire = undefined;\n                subscription.dispose();\n            }\n        };\n        if (!disposable) {\n            _addLeakageTraceLogic(options);\n        }\n        const emitter = new Emitter(options);\n        disposable?.add(emitter);\n        return emitter.event;\n    }\n    Event.debounce = debounce;\n    /**\n     * Debounces an event, firing after some delay (default=0) with an array of all event original objects.\n     *\n     * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned\n     * event is accessible to \"third parties\", e.g the event is a public property. Otherwise a leaked listener on the\n     * returned event causes this utility to leak a listener on the original event.\n     */\n    function accumulate(event, delay = 0, disposable) {\n        return Event.debounce(event, (last, e) => {\n            if (!last) {\n                return [e];\n            }\n            last.push(e);\n            return last;\n        }, delay, undefined, true, undefined, disposable);\n    }\n    Event.accumulate = accumulate;\n    /**\n     * Filters an event such that some condition is _not_ met more than once in a row, effectively ensuring duplicate\n     * event objects from different sources do not fire the same event object.\n     *\n     * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned\n     * event is accessible to \"third parties\", e.g the event is a public property. Otherwise a leaked listener on the\n     * returned event causes this utility to leak a listener on the original event.\n     *\n     * @param event The event source for the new event.\n     * @param equals The equality condition.\n     * @param disposable A disposable store to add the new EventEmitter to.\n     *\n     * @example\n     * ```\n     * // Fire only one time when a single window is opened or focused\n     * Event.latch(Event.any(onDidOpenWindow, onDidFocusWindow))\n     * ```\n     */\n    function latch(event, equals = (a, b) => a === b, disposable) {\n        let firstCall = true;\n        let cache;\n        return filter(event, value => {\n            const shouldEmit = firstCall || !equals(value, cache);\n            firstCall = false;\n            cache = value;\n            return shouldEmit;\n        }, disposable);\n    }\n    Event.latch = latch;\n    /**\n     * Splits an event whose parameter is a union type into 2 separate events for each type in the union.\n     *\n     * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned\n     * event is accessible to \"third parties\", e.g the event is a public property. Otherwise a leaked listener on the\n     * returned event causes this utility to leak a listener on the original event.\n     *\n     * @example\n     * ```\n     * const event = new EventEmitter<number | undefined>().event;\n     * const [numberEvent, undefinedEvent] = Event.split(event, isUndefined);\n     * ```\n     *\n     * @param event The event source for the new event.\n     * @param isT A function that determines what event is of the first type.\n     * @param disposable A disposable store to add the new EventEmitter to.\n     */\n    function split(event, isT, disposable) {\n        return [\n            Event.filter(event, isT, disposable),\n            Event.filter(event, e => !isT(e), disposable),\n        ];\n    }\n    Event.split = split;\n    /**\n     * Buffers an event until it has a listener attached.\n     *\n     * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned\n     * event is accessible to \"third parties\", e.g the event is a public property. Otherwise a leaked listener on the\n     * returned event causes this utility to leak a listener on the original event.\n     *\n     * @param event The event source for the new event.\n     * @param flushAfterTimeout Determines whether to flush the buffer after a timeout immediately or after a\n     * `setTimeout` when the first event listener is added.\n     * @param _buffer Internal: A source event array used for tests.\n     *\n     * @example\n     * ```\n     * // Start accumulating events, when the first listener is attached, flush\n     * // the event after a timeout such that multiple listeners attached before\n     * // the timeout would receive the event\n     * this.onInstallExtension = Event.buffer(service.onInstallExtension, true);\n     * ```\n     */\n    function buffer(event, flushAfterTimeout = false, _buffer = [], disposable) {\n        let buffer = _buffer.slice();\n        let listener = event(e => {\n            if (buffer) {\n                buffer.push(e);\n            }\n            else {\n                emitter.fire(e);\n            }\n        });\n        if (disposable) {\n            disposable.add(listener);\n        }\n        const flush = () => {\n            buffer?.forEach(e => emitter.fire(e));\n            buffer = null;\n        };\n        const emitter = new Emitter({\n            onWillAddFirstListener() {\n                if (!listener) {\n                    listener = event(e => emitter.fire(e));\n                    if (disposable) {\n                        disposable.add(listener);\n                    }\n                }\n            },\n            onDidAddFirstListener() {\n                if (buffer) {\n                    if (flushAfterTimeout) {\n                        setTimeout(flush);\n                    }\n                    else {\n                        flush();\n                    }\n                }\n            },\n            onDidRemoveLastListener() {\n                if (listener) {\n                    listener.dispose();\n                }\n                listener = null;\n            }\n        });\n        if (disposable) {\n            disposable.add(emitter);\n        }\n        return emitter.event;\n    }\n    Event.buffer = buffer;\n    /**\n     * Wraps the event in an {@link IChainableEvent}, allowing a more functional programming style.\n     *\n     * @example\n     * ```\n     * // Normal\n     * const onEnterPressNormal = Event.filter(\n     *   Event.map(onKeyPress.event, e => new StandardKeyboardEvent(e)),\n     *   e.keyCode === KeyCode.Enter\n     * ).event;\n     *\n     * // Using chain\n     * const onEnterPressChain = Event.chain(onKeyPress.event, $ => $\n     *   .map(e => new StandardKeyboardEvent(e))\n     *   .filter(e => e.keyCode === KeyCode.Enter)\n     * );\n     * ```\n     */\n    function chain(event, sythensize) {\n        const fn = (listener, thisArgs, disposables) => {\n            const cs = sythensize(new ChainableSynthesis());\n            return event(function (value) {\n                const result = cs.evaluate(value);\n                if (result !== HaltChainable) {\n                    listener.call(thisArgs, result);\n                }\n            }, undefined, disposables);\n        };\n        return fn;\n    }\n    Event.chain = chain;\n    const HaltChainable = Symbol('HaltChainable');\n    class ChainableSynthesis {\n        constructor() {\n            this.steps = [];\n        }\n        map(fn) {\n            this.steps.push(fn);\n            return this;\n        }\n        forEach(fn) {\n            this.steps.push(v => {\n                fn(v);\n                return v;\n            });\n            return this;\n        }\n        filter(fn) {\n            this.steps.push(v => fn(v) ? v : HaltChainable);\n            return this;\n        }\n        reduce(merge, initial) {\n            let last = initial;\n            this.steps.push(v => {\n                last = merge(last, v);\n                return last;\n            });\n            return this;\n        }\n        latch(equals = (a, b) => a === b) {\n            let firstCall = true;\n            let cache;\n            this.steps.push(value => {\n                const shouldEmit = firstCall || !equals(value, cache);\n                firstCall = false;\n                cache = value;\n                return shouldEmit ? value : HaltChainable;\n            });\n            return this;\n        }\n        evaluate(value) {\n            for (const step of this.steps) {\n                value = step(value);\n                if (value === HaltChainable) {\n                    break;\n                }\n            }\n            return value;\n        }\n    }\n    /**\n     * Creates an {@link Event} from a node event emitter.\n     */\n    function fromNodeEventEmitter(emitter, eventName, map = id => id) {\n        const fn = (...args) => result.fire(map(...args));\n        const onFirstListenerAdd = () => emitter.on(eventName, fn);\n        const onLastListenerRemove = () => emitter.removeListener(eventName, fn);\n        const result = new Emitter({ onWillAddFirstListener: onFirstListenerAdd, onDidRemoveLastListener: onLastListenerRemove });\n        return result.event;\n    }\n    Event.fromNodeEventEmitter = fromNodeEventEmitter;\n    /**\n     * Creates an {@link Event} from a DOM event emitter.\n     */\n    function fromDOMEventEmitter(emitter, eventName, map = id => id) {\n        const fn = (...args) => result.fire(map(...args));\n        const onFirstListenerAdd = () => emitter.addEventListener(eventName, fn);\n        const onLastListenerRemove = () => emitter.removeEventListener(eventName, fn);\n        const result = new Emitter({ onWillAddFirstListener: onFirstListenerAdd, onDidRemoveLastListener: onLastListenerRemove });\n        return result.event;\n    }\n    Event.fromDOMEventEmitter = fromDOMEventEmitter;\n    /**\n     * Creates a promise out of an event, using the {@link Event.once} helper.\n     */\n    function toPromise(event) {\n        return new Promise(resolve => once(event)(resolve));\n    }\n    Event.toPromise = toPromise;\n    /**\n     * Creates an event out of a promise that fires once when the promise is\n     * resolved with the result of the promise or `undefined`.\n     */\n    function fromPromise(promise) {\n        const result = new Emitter();\n        promise.then(res => {\n            result.fire(res);\n        }, () => {\n            result.fire(undefined);\n        }).finally(() => {\n            result.dispose();\n        });\n        return result.event;\n    }\n    Event.fromPromise = fromPromise;\n    /**\n     * A convenience function for forwarding an event to another emitter which\n     * improves readability.allows Event.forward(event, emitter) instead of `event(e => emitter.fire(e))`.\n     * @param from The event to forward.\n     * @param to The emitter to forward the event to.\n     * @example\n     * Event.forward(event, emitter);\n     * // equivalent to\n     * event(e => emitter.fire(e));\n     * // equivalent to\n     * event(emitter.fire, emitter);\n     */\n    function forward(from, to) {\n        return from(e => to.fire(e));\n    }\n    Event.forward = forward;\n    function runAndSubscribe(event, handler, initial) {\n        handler(initial);\n        return event(e => handler(e));\n    }\n    Event.runAndSubscribe = runAndSubscribe;\n    class EmitterObserver {\n        constructor(_observable, store) {\n            this._observable = _observable;\n            this._counter = 0;\n            this._hasChanged = false;\n            const options = {\n                onWillAddFirstListener: () => {\n                    _observable.addObserver(this);\n                },\n                onDidRemoveLastListener: () => {\n                    _observable.removeObserver(this);\n                }\n            };\n            if (!store) {\n                _addLeakageTraceLogic(options);\n            }\n            this.emitter = new Emitter(options);\n            if (store) {\n                store.add(this.emitter);\n            }\n        }\n        beginUpdate(_observable) {\n            // assert(_observable === this.obs);\n            this._counter++;\n        }\n        handlePossibleChange(_observable) {\n            // assert(_observable === this.obs);\n        }\n        handleChange(_observable, _change) {\n            // assert(_observable === this.obs);\n            this._hasChanged = true;\n        }\n        endUpdate(_observable) {\n            // assert(_observable === this.obs);\n            this._counter--;\n            if (this._counter === 0) {\n                this._observable.reportChanges();\n                if (this._hasChanged) {\n                    this._hasChanged = false;\n                    this.emitter.fire(this._observable.get());\n                }\n            }\n        }\n    }\n    /**\n     * Creates an event emitter that is fired when the observable changes.\n     * Each listeners subscribes to the emitter.\n     */\n    function fromObservable(obs, store) {\n        const observer = new EmitterObserver(obs, store);\n        return observer.emitter.event;\n    }\n    Event.fromObservable = fromObservable;\n    /**\n     * Each listener is attached to the observable directly.\n     */\n    function fromObservableLight(observable) {\n        return (listener, thisArgs, disposables) => {\n            let count = 0;\n            let didChange = false;\n            const observer = {\n                beginUpdate() {\n                    count++;\n                },\n                endUpdate() {\n                    count--;\n                    if (count === 0) {\n                        observable.reportChanges();\n                        if (didChange) {\n                            didChange = false;\n                            listener.call(thisArgs);\n                        }\n                    }\n                },\n                handlePossibleChange() {\n                    // noop\n                },\n                handleChange() {\n                    didChange = true;\n                }\n            };\n            observable.addObserver(observer);\n            observable.reportChanges();\n            const disposable = {\n                dispose() {\n                    observable.removeObserver(observer);\n                }\n            };\n            if (disposables instanceof lifecycle_1.DisposableStore) {\n                disposables.add(disposable);\n            }\n            else if (Array.isArray(disposables)) {\n                disposables.push(disposable);\n            }\n            return disposable;\n        };\n    }\n    Event.fromObservableLight = fromObservableLight;\n})(Event || (exports.Event = Event = {}));\nclass EventProfiling {\n    static { this.all = new Set(); }\n    static { this._idPool = 0; }\n    constructor(name) {\n        this.listenerCount = 0;\n        this.invocationCount = 0;\n        this.elapsedOverall = 0;\n        this.durations = [];\n        this.name = `${name}_${EventProfiling._idPool++}`;\n        EventProfiling.all.add(this);\n    }\n    start(listenerCount) {\n        this._stopWatch = new stopwatch_1.StopWatch();\n        this.listenerCount = listenerCount;\n    }\n    stop() {\n        if (this._stopWatch) {\n            const elapsed = this._stopWatch.elapsed();\n            this.durations.push(elapsed);\n            this.elapsedOverall += elapsed;\n            this.invocationCount += 1;\n            this._stopWatch = undefined;\n        }\n    }\n}\nexports.EventProfiling = EventProfiling;\nlet _globalLeakWarningThreshold = -1;\nfunction setGlobalLeakWarningThreshold(n) {\n    const oldValue = _globalLeakWarningThreshold;\n    _globalLeakWarningThreshold = n;\n    return {\n        dispose() {\n            _globalLeakWarningThreshold = oldValue;\n        }\n    };\n}\nclass LeakageMonitor {\n    static { this._idPool = 1; }\n    constructor(_errorHandler, threshold, name = (LeakageMonitor._idPool++).toString(16).padStart(3, '0')) {\n        this._errorHandler = _errorHandler;\n        this.threshold = threshold;\n        this.name = name;\n        this._warnCountdown = 0;\n    }\n    dispose() {\n        this._stacks?.clear();\n    }\n    check(stack, listenerCount) {\n        const threshold = this.threshold;\n        if (threshold <= 0 || listenerCount < threshold) {\n            return undefined;\n        }\n        if (!this._stacks) {\n            this._stacks = new Map();\n        }\n        const count = (this._stacks.get(stack.value) || 0);\n        this._stacks.set(stack.value, count + 1);\n        this._warnCountdown -= 1;\n        if (this._warnCountdown <= 0) {\n            // only warn on first exceed and then every time the limit\n            // is exceeded by 50% again\n            this._warnCountdown = threshold * 0.5;\n            const [topStack, topCount] = this.getMostFrequentStack();\n            const message = `[${this.name}] potential listener LEAK detected, having ${listenerCount} listeners already. MOST frequent listener (${topCount}):`;\n            console.warn(message);\n            console.warn(topStack);\n            const error = new ListenerLeakError(message, topStack);\n            this._errorHandler(error);\n        }\n        return () => {\n            const count = (this._stacks.get(stack.value) || 0);\n            this._stacks.set(stack.value, count - 1);\n        };\n    }\n    getMostFrequentStack() {\n        if (!this._stacks) {\n            return undefined;\n        }\n        let topStack;\n        let topCount = 0;\n        for (const [stack, count] of this._stacks) {\n            if (!topStack || topCount < count) {\n                topStack = [stack, count];\n                topCount = count;\n            }\n        }\n        return topStack;\n    }\n}\nclass Stacktrace {\n    static create() {\n        const err = new Error();\n        return new Stacktrace(err.stack ?? '');\n    }\n    constructor(value) {\n        this.value = value;\n    }\n    print() {\n        console.warn(this.value.split('\\n').slice(2).join('\\n'));\n    }\n}\n// error that is logged when going over the configured listener threshold\nclass ListenerLeakError extends Error {\n    constructor(message, stack) {\n        super(message);\n        this.name = 'ListenerLeakError';\n        this.stack = stack;\n    }\n}\nexports.ListenerLeakError = ListenerLeakError;\n// SEVERE error that is logged when having gone way over the configured listener\n// threshold so that the emitter refuses to accept more listeners\nclass ListenerRefusalError extends Error {\n    constructor(message, stack) {\n        super(message);\n        this.name = 'ListenerRefusalError';\n        this.stack = stack;\n    }\n}\nexports.ListenerRefusalError = ListenerRefusalError;\nlet id = 0;\nclass UniqueContainer {\n    constructor(value) {\n        this.value = value;\n        this.id = id++;\n    }\n}\nconst compactionThreshold = 2;\nconst forEachListener = (listeners, fn) => {\n    if (listeners instanceof UniqueContainer) {\n        fn(listeners);\n    }\n    else {\n        for (let i = 0; i < listeners.length; i++) {\n            const l = listeners[i];\n            if (l) {\n                fn(l);\n            }\n        }\n    }\n};\nlet _listenerFinalizers;\nif (_enableListenerGCedWarning) {\n    const leaks = [];\n    setInterval(() => {\n        if (leaks.length === 0) {\n            return;\n        }\n        console.warn('[LEAKING LISTENERS] GC\\'ed these listeners that were NOT yet disposed:');\n        console.warn(leaks.join('\\n'));\n        leaks.length = 0;\n    }, 3000);\n    _listenerFinalizers = new FinalizationRegistry(heldValue => {\n        if (typeof heldValue === 'string') {\n            leaks.push(heldValue);\n        }\n    });\n}\n/**\n * The Emitter can be used to expose an Event to the public\n * to fire it from the insides.\n * Sample:\n    class Document {\n\n        private readonly _onDidChange = new Emitter<(value:string)=>any>();\n\n        public onDidChange = this._onDidChange.event;\n\n        // getter-style\n        // get onDidChange(): Event<(value:string)=>any> {\n        // \treturn this._onDidChange.event;\n        // }\n\n        private _doIt() {\n            //...\n            this._onDidChange.fire(value);\n        }\n    }\n */\nclass Emitter {\n    constructor(options) {\n        this._size = 0;\n        this._options = options;\n        this._leakageMon = (_globalLeakWarningThreshold > 0 || this._options?.leakWarningThreshold)\n            ? new LeakageMonitor(options?.onListenerError ?? errors_1.onUnexpectedError, this._options?.leakWarningThreshold ?? _globalLeakWarningThreshold) :\n            undefined;\n        this._perfMon = this._options?._profName ? new EventProfiling(this._options._profName) : undefined;\n        this._deliveryQueue = this._options?.deliveryQueue;\n    }\n    dispose() {\n        if (!this._disposed) {\n            this._disposed = true;\n            // It is bad to have listeners at the time of disposing an emitter, it is worst to have listeners keep the emitter\n            // alive via the reference that's embedded in their disposables. Therefore we loop over all remaining listeners and\n            // unset their subscriptions/disposables. Looping and blaming remaining listeners is done on next tick because the\n            // the following programming pattern is very popular:\n            //\n            // const someModel = this._disposables.add(new ModelObject()); // (1) create and register model\n            // this._disposables.add(someModel.onDidChange(() => { ... }); // (2) subscribe and register model-event listener\n            // ...later...\n            // this._disposables.dispose(); disposes (1) then (2): don't warn after (1) but after the \"overall dispose\" is done\n            if (this._deliveryQueue?.current === this) {\n                this._deliveryQueue.reset();\n            }\n            if (this._listeners) {\n                if (_enableDisposeWithListenerWarning) {\n                    const listeners = this._listeners;\n                    queueMicrotask(() => {\n                        forEachListener(listeners, l => l.stack?.print());\n                    });\n                }\n                this._listeners = undefined;\n                this._size = 0;\n            }\n            this._options?.onDidRemoveLastListener?.();\n            this._leakageMon?.dispose();\n        }\n    }\n    /**\n     * For the public to allow to subscribe\n     * to events from this Emitter\n     */\n    get event() {\n        this._event ??= (callback, thisArgs, disposables) => {\n            if (this._leakageMon && this._size > this._leakageMon.threshold ** 2) {\n                const message = `[${this._leakageMon.name}] REFUSES to accept new listeners because it exceeded its threshold by far (${this._size} vs ${this._leakageMon.threshold})`;\n                console.warn(message);\n                const tuple = this._leakageMon.getMostFrequentStack() ?? ['UNKNOWN stack', -1];\n                const error = new ListenerRefusalError(`${message}. HINT: Stack shows most frequent listener (${tuple[1]}-times)`, tuple[0]);\n                const errorHandler = this._options?.onListenerError || errors_1.onUnexpectedError;\n                errorHandler(error);\n                return lifecycle_1.Disposable.None;\n            }\n            if (this._disposed) {\n                // todo: should we warn if a listener is added to a disposed emitter? This happens often\n                return lifecycle_1.Disposable.None;\n            }\n            if (thisArgs) {\n                callback = callback.bind(thisArgs);\n            }\n            const contained = new UniqueContainer(callback);\n            let removeMonitor;\n            let stack;\n            if (this._leakageMon && this._size >= Math.ceil(this._leakageMon.threshold * 0.2)) {\n                // check and record this emitter for potential leakage\n                contained.stack = Stacktrace.create();\n                removeMonitor = this._leakageMon.check(contained.stack, this._size + 1);\n            }\n            if (_enableDisposeWithListenerWarning) {\n                contained.stack = stack ?? Stacktrace.create();\n            }\n            if (!this._listeners) {\n                this._options?.onWillAddFirstListener?.(this);\n                this._listeners = contained;\n                this._options?.onDidAddFirstListener?.(this);\n            }\n            else if (this._listeners instanceof UniqueContainer) {\n                this._deliveryQueue ??= new EventDeliveryQueuePrivate();\n                this._listeners = [this._listeners, contained];\n            }\n            else {\n                this._listeners.push(contained);\n            }\n            this._size++;\n            const result = (0, lifecycle_1.toDisposable)(() => {\n                _listenerFinalizers?.unregister(result);\n                removeMonitor?.();\n                this._removeListener(contained);\n            });\n            if (disposables instanceof lifecycle_1.DisposableStore) {\n                disposables.add(result);\n            }\n            else if (Array.isArray(disposables)) {\n                disposables.push(result);\n            }\n            if (_listenerFinalizers) {\n                const stack = new Error().stack.split('\\n').slice(2, 3).join('\\n').trim();\n                const match = /(file:|vscode-file:\\/\\/vscode-app)?(\\/[^:]*:\\d+:\\d+)/.exec(stack);\n                _listenerFinalizers.register(result, match?.[2] ?? stack, result);\n            }\n            return result;\n        };\n        return this._event;\n    }\n    _removeListener(listener) {\n        this._options?.onWillRemoveListener?.(this);\n        if (!this._listeners) {\n            return; // expected if a listener gets disposed\n        }\n        if (this._size === 1) {\n            this._listeners = undefined;\n            this._options?.onDidRemoveLastListener?.(this);\n            this._size = 0;\n            return;\n        }\n        // size > 1 which requires that listeners be a list:\n        const listeners = this._listeners;\n        const index = listeners.indexOf(listener);\n        if (index === -1) {\n            console.log('disposed?', this._disposed);\n            console.log('size?', this._size);\n            console.log('arr?', JSON.stringify(this._listeners));\n            throw new Error('Attempted to dispose unknown listener');\n        }\n        this._size--;\n        listeners[index] = undefined;\n        const adjustDeliveryQueue = this._deliveryQueue.current === this;\n        if (this._size * compactionThreshold <= listeners.length) {\n            let n = 0;\n            for (let i = 0; i < listeners.length; i++) {\n                if (listeners[i]) {\n                    listeners[n++] = listeners[i];\n                }\n                else if (adjustDeliveryQueue) {\n                    this._deliveryQueue.end--;\n                    if (n < this._deliveryQueue.i) {\n                        this._deliveryQueue.i--;\n                    }\n                }\n            }\n            listeners.length = n;\n        }\n    }\n    _deliver(listener, value) {\n        if (!listener) {\n            return;\n        }\n        const errorHandler = this._options?.onListenerError || errors_1.onUnexpectedError;\n        if (!errorHandler) {\n            listener.value(value);\n            return;\n        }\n        try {\n            listener.value(value);\n        }\n        catch (e) {\n            errorHandler(e);\n        }\n    }\n    /** Delivers items in the queue. Assumes the queue is ready to go. */\n    _deliverQueue(dq) {\n        const listeners = dq.current._listeners;\n        while (dq.i < dq.end) {\n            // important: dq.i is incremented before calling deliver() because it might reenter deliverQueue()\n            this._deliver(listeners[dq.i++], dq.value);\n        }\n        dq.reset();\n    }\n    /**\n     * To be kept private to fire an event to\n     * subscribers\n     */\n    fire(event) {\n        if (this._deliveryQueue?.current) {\n            this._deliverQueue(this._deliveryQueue);\n            this._perfMon?.stop(); // last fire() will have starting perfmon, stop it before starting the next dispatch\n        }\n        this._perfMon?.start(this._size);\n        if (!this._listeners) {\n            // no-op\n        }\n        else if (this._listeners instanceof UniqueContainer) {\n            this._deliver(this._listeners, event);\n        }\n        else {\n            const dq = this._deliveryQueue;\n            dq.enqueue(this, event, this._listeners.length);\n            this._deliverQueue(dq);\n        }\n        this._perfMon?.stop();\n    }\n    hasListeners() {\n        return this._size > 0;\n    }\n}\nexports.Emitter = Emitter;\nconst createEventDeliveryQueue = () => new EventDeliveryQueuePrivate();\nexports.createEventDeliveryQueue = createEventDeliveryQueue;\nclass EventDeliveryQueuePrivate {\n    constructor() {\n        /**\n         * Index in current's listener list.\n         */\n        this.i = -1;\n        /**\n         * The last index in the listener's list to deliver.\n         */\n        this.end = 0;\n    }\n    enqueue(emitter, value, end) {\n        this.i = 0;\n        this.end = end;\n        this.current = emitter;\n        this.value = value;\n    }\n    reset() {\n        this.i = this.end; // force any current emission loop to stop, mainly for during dispose\n        this.current = undefined;\n        this.value = undefined;\n    }\n}\nclass AsyncEmitter extends Emitter {\n    async fireAsync(data, token, promiseJoin) {\n        if (!this._listeners) {\n            return;\n        }\n        if (!this._asyncDeliveryQueue) {\n            this._asyncDeliveryQueue = new linkedList_1.LinkedList();\n        }\n        forEachListener(this._listeners, listener => this._asyncDeliveryQueue.push([listener.value, data]));\n        while (this._asyncDeliveryQueue.size > 0 && !token.isCancellationRequested) {\n            const [listener, data] = this._asyncDeliveryQueue.shift();\n            const thenables = [];\n            const event = {\n                ...data,\n                token,\n                waitUntil: (p) => {\n                    if (Object.isFrozen(thenables)) {\n                        throw new Error('waitUntil can NOT be called asynchronous');\n                    }\n                    if (promiseJoin) {\n                        p = promiseJoin(p, listener);\n                    }\n                    thenables.push(p);\n                }\n            };\n            try {\n                listener(event);\n            }\n            catch (e) {\n                (0, errors_1.onUnexpectedError)(e);\n                continue;\n            }\n            // freeze thenables-collection to enforce sync-calls to\n            // wait until and then wait for all thenables to resolve\n            Object.freeze(thenables);\n            await Promise.allSettled(thenables).then(values => {\n                for (const value of values) {\n                    if (value.status === 'rejected') {\n                        (0, errors_1.onUnexpectedError)(value.reason);\n                    }\n                }\n            });\n        }\n    }\n}\nexports.AsyncEmitter = AsyncEmitter;\nclass PauseableEmitter extends Emitter {\n    get isPaused() {\n        return this._isPaused !== 0;\n    }\n    constructor(options) {\n        super(options);\n        this._isPaused = 0;\n        this._eventQueue = new linkedList_1.LinkedList();\n        this._mergeFn = options?.merge;\n    }\n    pause() {\n        this._isPaused++;\n    }\n    resume() {\n        if (this._isPaused !== 0 && --this._isPaused === 0) {\n            if (this._mergeFn) {\n                // use the merge function to create a single composite\n                // event. make a copy in case firing pauses this emitter\n                if (this._eventQueue.size > 0) {\n                    const events = Array.from(this._eventQueue);\n                    this._eventQueue.clear();\n                    super.fire(this._mergeFn(events));\n                }\n            }\n            else {\n                // no merging, fire each event individually and test\n                // that this emitter isn't paused halfway through\n                while (!this._isPaused && this._eventQueue.size !== 0) {\n                    super.fire(this._eventQueue.shift());\n                }\n            }\n        }\n    }\n    fire(event) {\n        if (this._size) {\n            if (this._isPaused !== 0) {\n                this._eventQueue.push(event);\n            }\n            else {\n                super.fire(event);\n            }\n        }\n    }\n}\nexports.PauseableEmitter = PauseableEmitter;\nclass DebounceEmitter extends PauseableEmitter {\n    constructor(options) {\n        super(options);\n        this._delay = options.delay ?? 100;\n    }\n    fire(event) {\n        if (!this._handle) {\n            this.pause();\n            this._handle = setTimeout(() => {\n                this._handle = undefined;\n                this.resume();\n            }, this._delay);\n        }\n        super.fire(event);\n    }\n}\nexports.DebounceEmitter = DebounceEmitter;\n/**\n * An emitter which queue all events and then process them at the\n * end of the event loop.\n */\nclass MicrotaskEmitter extends Emitter {\n    constructor(options) {\n        super(options);\n        this._queuedEvents = [];\n        this._mergeFn = options?.merge;\n    }\n    fire(event) {\n        if (!this.hasListeners()) {\n            return;\n        }\n        this._queuedEvents.push(event);\n        if (this._queuedEvents.length === 1) {\n            queueMicrotask(() => {\n                if (this._mergeFn) {\n                    super.fire(this._mergeFn(this._queuedEvents));\n                }\n                else {\n                    this._queuedEvents.forEach(e => super.fire(e));\n                }\n                this._queuedEvents = [];\n            });\n        }\n    }\n}\nexports.MicrotaskEmitter = MicrotaskEmitter;\n/**\n * An event emitter that multiplexes many events into a single event.\n *\n * @example Listen to the `onData` event of all `Thing`s, dynamically adding and removing `Thing`s\n * to the multiplexer as needed.\n *\n * ```typescript\n * const anythingDataMultiplexer = new EventMultiplexer<{ data: string }>();\n *\n * const thingListeners = DisposableMap<Thing, IDisposable>();\n *\n * thingService.onDidAddThing(thing => {\n *   thingListeners.set(thing, anythingDataMultiplexer.add(thing.onData);\n * });\n * thingService.onDidRemoveThing(thing => {\n *   thingListeners.deleteAndDispose(thing);\n * });\n *\n * anythingDataMultiplexer.event(e => {\n *   console.log('Something fired data ' + e.data)\n * });\n * ```\n */\nclass EventMultiplexer {\n    constructor() {\n        this.hasListeners = false;\n        this.events = [];\n        this.emitter = new Emitter({\n            onWillAddFirstListener: () => this.onFirstListenerAdd(),\n            onDidRemoveLastListener: () => this.onLastListenerRemove()\n        });\n    }\n    get event() {\n        return this.emitter.event;\n    }\n    add(event) {\n        const e = { event: event, listener: null };\n        this.events.push(e);\n        if (this.hasListeners) {\n            this.hook(e);\n        }\n        const dispose = () => {\n            if (this.hasListeners) {\n                this.unhook(e);\n            }\n            const idx = this.events.indexOf(e);\n            this.events.splice(idx, 1);\n        };\n        return (0, lifecycle_1.toDisposable)((0, functional_1.createSingleCallFunction)(dispose));\n    }\n    onFirstListenerAdd() {\n        this.hasListeners = true;\n        this.events.forEach(e => this.hook(e));\n    }\n    onLastListenerRemove() {\n        this.hasListeners = false;\n        this.events.forEach(e => this.unhook(e));\n    }\n    hook(e) {\n        e.listener = e.event(r => this.emitter.fire(r));\n    }\n    unhook(e) {\n        e.listener?.dispose();\n        e.listener = null;\n    }\n    dispose() {\n        this.emitter.dispose();\n        for (const e of this.events) {\n            e.listener?.dispose();\n        }\n        this.events = [];\n    }\n}\nexports.EventMultiplexer = EventMultiplexer;\nclass DynamicListEventMultiplexer {\n    constructor(items, onAddItem, onRemoveItem, getEvent) {\n        this._store = new lifecycle_1.DisposableStore();\n        const multiplexer = this._store.add(new EventMultiplexer());\n        const itemListeners = this._store.add(new lifecycle_1.DisposableMap());\n        function addItem(instance) {\n            itemListeners.set(instance, multiplexer.add(getEvent(instance)));\n        }\n        // Existing items\n        for (const instance of items) {\n            addItem(instance);\n        }\n        // Added items\n        this._store.add(onAddItem(instance => {\n            addItem(instance);\n        }));\n        // Removed items\n        this._store.add(onRemoveItem(instance => {\n            itemListeners.deleteAndDispose(instance);\n        }));\n        this.event = multiplexer.event;\n    }\n    dispose() {\n        this._store.dispose();\n    }\n}\nexports.DynamicListEventMultiplexer = DynamicListEventMultiplexer;\n/**\n * The EventBufferer is useful in situations in which you want\n * to delay firing your events during some code.\n * You can wrap that code and be sure that the event will not\n * be fired during that wrap.\n *\n * ```\n * const emitter: Emitter;\n * const delayer = new EventDelayer();\n * const delayedEvent = delayer.wrapEvent(emitter.event);\n *\n * delayedEvent(console.log);\n *\n * delayer.bufferEvents(() => {\n *   emitter.fire(); // event will not be fired yet\n * });\n *\n * // event will only be fired at this point\n * ```\n */\nclass EventBufferer {\n    constructor() {\n        this.data = [];\n    }\n    wrapEvent(event, reduce, initial) {\n        return (listener, thisArgs, disposables) => {\n            return event(i => {\n                const data = this.data[this.data.length - 1];\n                // Non-reduce scenario\n                if (!reduce) {\n                    // Buffering case\n                    if (data) {\n                        data.buffers.push(() => listener.call(thisArgs, i));\n                    }\n                    else {\n                        // Not buffering case\n                        listener.call(thisArgs, i);\n                    }\n                    return;\n                }\n                // Reduce scenario\n                const reduceData = data;\n                // Not buffering case\n                if (!reduceData) {\n                    // TODO: Is there a way to cache this reduce call for all listeners?\n                    listener.call(thisArgs, reduce(initial, i));\n                    return;\n                }\n                // Buffering case\n                reduceData.items ??= [];\n                reduceData.items.push(i);\n                if (reduceData.buffers.length === 0) {\n                    // Include a single buffered function that will reduce all events when we're done buffering events\n                    data.buffers.push(() => {\n                        // cache the reduced result so that the value can be shared across all listeners\n                        reduceData.reducedResult ??= initial\n                            ? reduceData.items.reduce(reduce, initial)\n                            : reduceData.items.reduce(reduce);\n                        listener.call(thisArgs, reduceData.reducedResult);\n                    });\n                }\n            }, undefined, disposables);\n        };\n    }\n    bufferEvents(fn) {\n        const data = { buffers: new Array() };\n        this.data.push(data);\n        const r = fn();\n        this.data.pop();\n        data.buffers.forEach(flush => flush());\n        return r;\n    }\n}\nexports.EventBufferer = EventBufferer;\n/**\n * A Relay is an event forwarder which functions as a replugabble event pipe.\n * Once created, you can connect an input event to it and it will simply forward\n * events from that input event through its own `event` property. The `input`\n * can be changed at any point in time.\n */\nclass Relay {\n    constructor() {\n        this.listening = false;\n        this.inputEvent = Event.None;\n        this.inputEventListener = lifecycle_1.Disposable.None;\n        this.emitter = new Emitter({\n            onDidAddFirstListener: () => {\n                this.listening = true;\n                this.inputEventListener = this.inputEvent(this.emitter.fire, this.emitter);\n            },\n            onDidRemoveLastListener: () => {\n                this.listening = false;\n                this.inputEventListener.dispose();\n            }\n        });\n        this.event = this.emitter.event;\n    }\n    set input(event) {\n        this.inputEvent = event;\n        if (this.listening) {\n            this.inputEventListener.dispose();\n            this.inputEventListener = event(this.emitter.fire, this.emitter);\n        }\n    }\n    dispose() {\n        this.inputEventListener.dispose();\n        this.emitter.dispose();\n    }\n}\nexports.Relay = Relay;\nclass ValueWithChangeEvent {\n    static const(value) {\n        return new ConstValueWithChangeEvent(value);\n    }\n    constructor(_value) {\n        this._value = _value;\n        this._onDidChange = new Emitter();\n        this.onDidChange = this._onDidChange.event;\n    }\n    get value() {\n        return this._value;\n    }\n    set value(value) {\n        if (value !== this._value) {\n            this._value = value;\n            this._onDidChange.fire(undefined);\n        }\n    }\n}\nexports.ValueWithChangeEvent = ValueWithChangeEvent;\nclass ConstValueWithChangeEvent {\n    constructor(value) {\n        this.value = value;\n        this.onDidChange = Event.None;\n    }\n}\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createSingleCallFunction = createSingleCallFunction;\n/**\n * Given a function, returns a function that is only calling that function once.\n */\nfunction createSingleCallFunction(fn, fnDidRunCallback) {\n    const _this = this;\n    let didCall = false;\n    let result;\n    return function () {\n        if (didCall) {\n            return result;\n        }\n        didCall = true;\n        if (fnDidRunCallback) {\n            try {\n                result = fn.apply(_this, arguments);\n            }\n            finally {\n                fnDidRunCallback();\n            }\n        }\n        else {\n            result = fn.apply(_this, arguments);\n        }\n        return result;\n    };\n}\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Iterable = void 0;\nvar Iterable;\n(function (Iterable) {\n    function is(thing) {\n        return thing && typeof thing === 'object' && typeof thing[Symbol.iterator] === 'function';\n    }\n    Iterable.is = is;\n    const _empty = Object.freeze([]);\n    function empty() {\n        return _empty;\n    }\n    Iterable.empty = empty;\n    function* single(element) {\n        yield element;\n    }\n    Iterable.single = single;\n    function wrap(iterableOrElement) {\n        if (is(iterableOrElement)) {\n            return iterableOrElement;\n        }\n        else {\n            return single(iterableOrElement);\n        }\n    }\n    Iterable.wrap = wrap;\n    function from(iterable) {\n        return iterable || _empty;\n    }\n    Iterable.from = from;\n    function* reverse(array) {\n        for (let i = array.length - 1; i >= 0; i--) {\n            yield array[i];\n        }\n    }\n    Iterable.reverse = reverse;\n    function isEmpty(iterable) {\n        return !iterable || iterable[Symbol.iterator]().next().done === true;\n    }\n    Iterable.isEmpty = isEmpty;\n    function first(iterable) {\n        return iterable[Symbol.iterator]().next().value;\n    }\n    Iterable.first = first;\n    function some(iterable, predicate) {\n        let i = 0;\n        for (const element of iterable) {\n            if (predicate(element, i++)) {\n                return true;\n            }\n        }\n        return false;\n    }\n    Iterable.some = some;\n    function find(iterable, predicate) {\n        for (const element of iterable) {\n            if (predicate(element)) {\n                return element;\n            }\n        }\n        return undefined;\n    }\n    Iterable.find = find;\n    function* filter(iterable, predicate) {\n        for (const element of iterable) {\n            if (predicate(element)) {\n                yield element;\n            }\n        }\n    }\n    Iterable.filter = filter;\n    function* map(iterable, fn) {\n        let index = 0;\n        for (const element of iterable) {\n            yield fn(element, index++);\n        }\n    }\n    Iterable.map = map;\n    function* flatMap(iterable, fn) {\n        let index = 0;\n        for (const element of iterable) {\n            yield* fn(element, index++);\n        }\n    }\n    Iterable.flatMap = flatMap;\n    function* concat(...iterables) {\n        for (const iterable of iterables) {\n            yield* iterable;\n        }\n    }\n    Iterable.concat = concat;\n    function reduce(iterable, reducer, initialValue) {\n        let value = initialValue;\n        for (const element of iterable) {\n            value = reducer(value, element);\n        }\n        return value;\n    }\n    Iterable.reduce = reduce;\n    /**\n     * Returns an iterable slice of the array, with the same semantics as `array.slice()`.\n     */\n    function* slice(arr, from, to = arr.length) {\n        if (from < 0) {\n            from += arr.length;\n        }\n        if (to < 0) {\n            to += arr.length;\n        }\n        else if (to > arr.length) {\n            to = arr.length;\n        }\n        for (; from < to; from++) {\n            yield arr[from];\n        }\n    }\n    Iterable.slice = slice;\n    /**\n     * Consumes `atMost` elements from iterable and returns the consumed elements,\n     * and an iterable for the rest of the elements.\n     */\n    function consume(iterable, atMost = Number.POSITIVE_INFINITY) {\n        const consumed = [];\n        if (atMost === 0) {\n            return [consumed, iterable];\n        }\n        const iterator = iterable[Symbol.iterator]();\n        for (let i = 0; i < atMost; i++) {\n            const next = iterator.next();\n            if (next.done) {\n                return [consumed, Iterable.empty()];\n            }\n            consumed.push(next.value);\n        }\n        return [consumed, { [Symbol.iterator]() { return iterator; } }];\n    }\n    Iterable.consume = consume;\n    async function asyncToArray(iterable) {\n        const result = [];\n        for await (const item of iterable) {\n            result.push(item);\n        }\n        return Promise.resolve(result);\n    }\n    Iterable.asyncToArray = asyncToArray;\n})(Iterable || (exports.Iterable = Iterable = {}));\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DisposableMap = exports.ImmortalReference = exports.AsyncReferenceCollection = exports.ReferenceCollection = exports.SafeDisposable = exports.RefCountedDisposable = exports.MandatoryMutableDisposable = exports.MutableDisposable = exports.Disposable = exports.DisposableStore = exports.DisposableTracker = void 0;\nexports.setDisposableTracker = setDisposableTracker;\nexports.trackDisposable = trackDisposable;\nexports.markAsDisposed = markAsDisposed;\nexports.markAsSingleton = markAsSingleton;\nexports.isDisposable = isDisposable;\nexports.dispose = dispose;\nexports.disposeIfDisposable = disposeIfDisposable;\nexports.combinedDisposable = combinedDisposable;\nexports.toDisposable = toDisposable;\nexports.disposeOnReturn = disposeOnReturn;\nconst arrays_1 = require(\"vs/base/common/arrays\");\nconst collections_1 = require(\"vs/base/common/collections\");\nconst map_1 = require(\"./map\");\nconst functional_1 = require(\"vs/base/common/functional\");\nconst iterator_1 = require(\"vs/base/common/iterator\");\n// #region Disposable Tracking\n/**\n * Enables logging of potentially leaked disposables.\n *\n * A disposable is considered leaked if it is not disposed or not registered as the child of\n * another disposable. This tracking is very simple an only works for classes that either\n * extend Disposable or use a DisposableStore. This means there are a lot of false positives.\n */\nconst TRACK_DISPOSABLES = false;\nlet disposableTracker = null;\nclass DisposableTracker {\n    constructor() {\n        this.livingDisposables = new Map();\n    }\n    static { this.idx = 0; }\n    getDisposableData(d) {\n        let val = this.livingDisposables.get(d);\n        if (!val) {\n            val = { parent: null, source: null, isSingleton: false, value: d, idx: DisposableTracker.idx++ };\n            this.livingDisposables.set(d, val);\n        }\n        return val;\n    }\n    trackDisposable(d) {\n        const data = this.getDisposableData(d);\n        if (!data.source) {\n            data.source =\n                new Error().stack;\n        }\n    }\n    setParent(child, parent) {\n        const data = this.getDisposableData(child);\n        data.parent = parent;\n    }\n    markAsDisposed(x) {\n        this.livingDisposables.delete(x);\n    }\n    markAsSingleton(disposable) {\n        this.getDisposableData(disposable).isSingleton = true;\n    }\n    getRootParent(data, cache) {\n        const cacheValue = cache.get(data);\n        if (cacheValue) {\n            return cacheValue;\n        }\n        const result = data.parent ? this.getRootParent(this.getDisposableData(data.parent), cache) : data;\n        cache.set(data, result);\n        return result;\n    }\n    getTrackedDisposables() {\n        const rootParentCache = new Map();\n        const leaking = [...this.livingDisposables.entries()]\n            .filter(([, v]) => v.source !== null && !this.getRootParent(v, rootParentCache).isSingleton)\n            .flatMap(([k]) => k);\n        return leaking;\n    }\n    computeLeakingDisposables(maxReported = 10, preComputedLeaks) {\n        let uncoveredLeakingObjs;\n        if (preComputedLeaks) {\n            uncoveredLeakingObjs = preComputedLeaks;\n        }\n        else {\n            const rootParentCache = new Map();\n            const leakingObjects = [...this.livingDisposables.values()]\n                .filter((info) => info.source !== null && !this.getRootParent(info, rootParentCache).isSingleton);\n            if (leakingObjects.length === 0) {\n                return;\n            }\n            const leakingObjsSet = new Set(leakingObjects.map(o => o.value));\n            // Remove all objects that are a child of other leaking objects. Assumes there are no cycles.\n            uncoveredLeakingObjs = leakingObjects.filter(l => {\n                return !(l.parent && leakingObjsSet.has(l.parent));\n            });\n            if (uncoveredLeakingObjs.length === 0) {\n                throw new Error('There are cyclic diposable chains!');\n            }\n        }\n        if (!uncoveredLeakingObjs) {\n            return undefined;\n        }\n        function getStackTracePath(leaking) {\n            function removePrefix(array, linesToRemove) {\n                while (array.length > 0 && linesToRemove.some(regexp => typeof regexp === 'string' ? regexp === array[0] : array[0].match(regexp))) {\n                    array.shift();\n                }\n            }\n            const lines = leaking.source.split('\\n').map(p => p.trim().replace('at ', '')).filter(l => l !== '');\n            removePrefix(lines, ['Error', /^trackDisposable \\(.*\\)$/, /^DisposableTracker.trackDisposable \\(.*\\)$/]);\n            return lines.reverse();\n        }\n        const stackTraceStarts = new map_1.SetMap();\n        for (const leaking of uncoveredLeakingObjs) {\n            const stackTracePath = getStackTracePath(leaking);\n            for (let i = 0; i <= stackTracePath.length; i++) {\n                stackTraceStarts.add(stackTracePath.slice(0, i).join('\\n'), leaking);\n            }\n        }\n        // Put earlier leaks first\n        uncoveredLeakingObjs.sort((0, arrays_1.compareBy)(l => l.idx, arrays_1.numberComparator));\n        let message = '';\n        let i = 0;\n        for (const leaking of uncoveredLeakingObjs.slice(0, maxReported)) {\n            i++;\n            const stackTracePath = getStackTracePath(leaking);\n            const stackTraceFormattedLines = [];\n            for (let i = 0; i < stackTracePath.length; i++) {\n                let line = stackTracePath[i];\n                const starts = stackTraceStarts.get(stackTracePath.slice(0, i + 1).join('\\n'));\n                line = `(shared with ${starts.size}/${uncoveredLeakingObjs.length} leaks) at ${line}`;\n                const prevStarts = stackTraceStarts.get(stackTracePath.slice(0, i).join('\\n'));\n                const continuations = (0, collections_1.groupBy)([...prevStarts].map(d => getStackTracePath(d)[i]), v => v);\n                delete continuations[stackTracePath[i]];\n                for (const [cont, set] of Object.entries(continuations)) {\n                    stackTraceFormattedLines.unshift(`    - stacktraces of ${set.length} other leaks continue with ${cont}`);\n                }\n                stackTraceFormattedLines.unshift(line);\n            }\n            message += `\\n\\n\\n==================== Leaking disposable ${i}/${uncoveredLeakingObjs.length}: ${leaking.value.constructor.name} ====================\\n${stackTraceFormattedLines.join('\\n')}\\n============================================================\\n\\n`;\n        }\n        if (uncoveredLeakingObjs.length > maxReported) {\n            message += `\\n\\n\\n... and ${uncoveredLeakingObjs.length - maxReported} more leaking disposables\\n\\n`;\n        }\n        return { leaks: uncoveredLeakingObjs, details: message };\n    }\n}\nexports.DisposableTracker = DisposableTracker;\nfunction setDisposableTracker(tracker) {\n    disposableTracker = tracker;\n}\nif (TRACK_DISPOSABLES) {\n    const __is_disposable_tracked__ = '__is_disposable_tracked__';\n    setDisposableTracker(new class {\n        trackDisposable(x) {\n            const stack = new Error('Potentially leaked disposable').stack;\n            setTimeout(() => {\n                if (!x[__is_disposable_tracked__]) {\n                    console.log(stack);\n                }\n            }, 3000);\n        }\n        setParent(child, parent) {\n            if (child && child !== Disposable.None) {\n                try {\n                    child[__is_disposable_tracked__] = true;\n                }\n                catch {\n                    // noop\n                }\n            }\n        }\n        markAsDisposed(disposable) {\n            if (disposable && disposable !== Disposable.None) {\n                try {\n                    disposable[__is_disposable_tracked__] = true;\n                }\n                catch {\n                    // noop\n                }\n            }\n        }\n        markAsSingleton(disposable) { }\n    });\n}\nfunction trackDisposable(x) {\n    disposableTracker?.trackDisposable(x);\n    return x;\n}\nfunction markAsDisposed(disposable) {\n    disposableTracker?.markAsDisposed(disposable);\n}\nfunction setParentOfDisposable(child, parent) {\n    disposableTracker?.setParent(child, parent);\n}\nfunction setParentOfDisposables(children, parent) {\n    if (!disposableTracker) {\n        return;\n    }\n    for (const child of children) {\n        disposableTracker.setParent(child, parent);\n    }\n}\n/**\n * Indicates that the given object is a singleton which does not need to be disposed.\n*/\nfunction markAsSingleton(singleton) {\n    disposableTracker?.markAsSingleton(singleton);\n    return singleton;\n}\n/**\n * Check if `thing` is {@link IDisposable disposable}.\n */\nfunction isDisposable(thing) {\n    return typeof thing === 'object' && thing !== null && typeof thing.dispose === 'function' && thing.dispose.length === 0;\n}\nfunction dispose(arg) {\n    if (iterator_1.Iterable.is(arg)) {\n        const errors = [];\n        for (const d of arg) {\n            if (d) {\n                try {\n                    d.dispose();\n                }\n                catch (e) {\n                    errors.push(e);\n                }\n            }\n        }\n        if (errors.length === 1) {\n            throw errors[0];\n        }\n        else if (errors.length > 1) {\n            throw new AggregateError(errors, 'Encountered errors while disposing of store');\n        }\n        return Array.isArray(arg) ? [] : arg;\n    }\n    else if (arg) {\n        arg.dispose();\n        return arg;\n    }\n}\nfunction disposeIfDisposable(disposables) {\n    for (const d of disposables) {\n        if (isDisposable(d)) {\n            d.dispose();\n        }\n    }\n    return [];\n}\n/**\n * Combine multiple disposable values into a single {@link IDisposable}.\n */\nfunction combinedDisposable(...disposables) {\n    const parent = toDisposable(() => dispose(disposables));\n    setParentOfDisposables(disposables, parent);\n    return parent;\n}\n/**\n * Turn a function that implements dispose into an {@link IDisposable}.\n *\n * @param fn Clean up function, guaranteed to be called only **once**.\n */\nfunction toDisposable(fn) {\n    const self = trackDisposable({\n        dispose: (0, functional_1.createSingleCallFunction)(() => {\n            markAsDisposed(self);\n            fn();\n        })\n    });\n    return self;\n}\n/**\n * Manages a collection of disposable values.\n *\n * This is the preferred way to manage multiple disposables. A `DisposableStore` is safer to work with than an\n * `IDisposable[]` as it considers edge cases, such as registering the same value multiple times or adding an item to a\n * store that has already been disposed of.\n */\nclass DisposableStore {\n    static { this.DISABLE_DISPOSED_WARNING = false; }\n    constructor() {\n        this._toDispose = new Set();\n        this._isDisposed = false;\n        trackDisposable(this);\n    }\n    /**\n     * Dispose of all registered disposables and mark this object as disposed.\n     *\n     * Any future disposables added to this object will be disposed of on `add`.\n     */\n    dispose() {\n        if (this._isDisposed) {\n            return;\n        }\n        markAsDisposed(this);\n        this._isDisposed = true;\n        this.clear();\n    }\n    /**\n     * @return `true` if this object has been disposed of.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Dispose of all registered disposables but do not mark this object as disposed.\n     */\n    clear() {\n        if (this._toDispose.size === 0) {\n            return;\n        }\n        try {\n            dispose(this._toDispose);\n        }\n        finally {\n            this._toDispose.clear();\n        }\n    }\n    /**\n     * Add a new {@link IDisposable disposable} to the collection.\n     */\n    add(o) {\n        if (!o) {\n            return o;\n        }\n        if (o === this) {\n            throw new Error('Cannot register a disposable on itself!');\n        }\n        setParentOfDisposable(o, this);\n        if (this._isDisposed) {\n            if (!DisposableStore.DISABLE_DISPOSED_WARNING) {\n                console.warn(new Error('Trying to add a disposable to a DisposableStore that has already been disposed of. The added object will be leaked!').stack);\n            }\n        }\n        else {\n            this._toDispose.add(o);\n        }\n        return o;\n    }\n    /**\n     * Deletes a disposable from store and disposes of it. This will not throw or warn and proceed to dispose the\n     * disposable even when the disposable is not part in the store.\n     */\n    delete(o) {\n        if (!o) {\n            return;\n        }\n        if (o === this) {\n            throw new Error('Cannot dispose a disposable on itself!');\n        }\n        this._toDispose.delete(o);\n        o.dispose();\n    }\n    /**\n     * Deletes the value from the store, but does not dispose it.\n     */\n    deleteAndLeak(o) {\n        if (!o) {\n            return;\n        }\n        if (this._toDispose.has(o)) {\n            this._toDispose.delete(o);\n            setParentOfDisposable(o, null);\n        }\n    }\n}\nexports.DisposableStore = DisposableStore;\n/**\n * Abstract base class for a {@link IDisposable disposable} object.\n *\n * Subclasses can {@linkcode _register} disposables that will be automatically cleaned up when this object is disposed of.\n */\nclass Disposable {\n    /**\n     * A disposable that does nothing when it is disposed of.\n     *\n     * TODO: This should not be a static property.\n     */\n    static { this.None = Object.freeze({ dispose() { } }); }\n    constructor() {\n        this._store = new DisposableStore();\n        trackDisposable(this);\n        setParentOfDisposable(this._store, this);\n    }\n    dispose() {\n        markAsDisposed(this);\n        this._store.dispose();\n    }\n    /**\n     * Adds `o` to the collection of disposables managed by this object.\n     */\n    _register(o) {\n        if (o === this) {\n            throw new Error('Cannot register a disposable on itself!');\n        }\n        return this._store.add(o);\n    }\n}\nexports.Disposable = Disposable;\n/**\n * Manages the lifecycle of a disposable value that may be changed.\n *\n * This ensures that when the disposable value is changed, the previously held disposable is disposed of. You can\n * also register a `MutableDisposable` on a `Disposable` to ensure it is automatically cleaned up.\n */\nclass MutableDisposable {\n    constructor() {\n        this._isDisposed = false;\n        trackDisposable(this);\n    }\n    get value() {\n        return this._isDisposed ? undefined : this._value;\n    }\n    set value(value) {\n        if (this._isDisposed || value === this._value) {\n            return;\n        }\n        this._value?.dispose();\n        if (value) {\n            setParentOfDisposable(value, this);\n        }\n        this._value = value;\n    }\n    /**\n     * Resets the stored value and disposed of the previously stored value.\n     */\n    clear() {\n        this.value = undefined;\n    }\n    dispose() {\n        this._isDisposed = true;\n        markAsDisposed(this);\n        this._value?.dispose();\n        this._value = undefined;\n    }\n    /**\n     * Clears the value, but does not dispose it.\n     * The old value is returned.\n    */\n    clearAndLeak() {\n        const oldValue = this._value;\n        this._value = undefined;\n        if (oldValue) {\n            setParentOfDisposable(oldValue, null);\n        }\n        return oldValue;\n    }\n}\nexports.MutableDisposable = MutableDisposable;\n/**\n * Manages the lifecycle of a disposable value that may be changed like {@link MutableDisposable}, but the value must\n * exist and cannot be undefined.\n */\nclass MandatoryMutableDisposable {\n    constructor(initialValue) {\n        this._disposable = new MutableDisposable();\n        this._isDisposed = false;\n        this._disposable.value = initialValue;\n    }\n    get value() {\n        return this._disposable.value;\n    }\n    set value(value) {\n        if (this._isDisposed || value === this._disposable.value) {\n            return;\n        }\n        this._disposable.value = value;\n    }\n    dispose() {\n        this._isDisposed = true;\n        this._disposable.dispose();\n    }\n}\nexports.MandatoryMutableDisposable = MandatoryMutableDisposable;\nclass RefCountedDisposable {\n    constructor(_disposable) {\n        this._disposable = _disposable;\n        this._counter = 1;\n    }\n    acquire() {\n        this._counter++;\n        return this;\n    }\n    release() {\n        if (--this._counter === 0) {\n            this._disposable.dispose();\n        }\n        return this;\n    }\n}\nexports.RefCountedDisposable = RefCountedDisposable;\n/**\n * A safe disposable can be `unset` so that a leaked reference (listener)\n * can be cut-off.\n */\nclass SafeDisposable {\n    constructor() {\n        this.dispose = () => { };\n        this.unset = () => { };\n        this.isset = () => false;\n        trackDisposable(this);\n    }\n    set(fn) {\n        let callback = fn;\n        this.unset = () => callback = undefined;\n        this.isset = () => callback !== undefined;\n        this.dispose = () => {\n            if (callback) {\n                callback();\n                callback = undefined;\n                markAsDisposed(this);\n            }\n        };\n        return this;\n    }\n}\nexports.SafeDisposable = SafeDisposable;\nclass ReferenceCollection {\n    constructor() {\n        this.references = new Map();\n    }\n    acquire(key, ...args) {\n        let reference = this.references.get(key);\n        if (!reference) {\n            reference = { counter: 0, object: this.createReferencedObject(key, ...args) };\n            this.references.set(key, reference);\n        }\n        const { object } = reference;\n        const dispose = (0, functional_1.createSingleCallFunction)(() => {\n            if (--reference.counter === 0) {\n                this.destroyReferencedObject(key, reference.object);\n                this.references.delete(key);\n            }\n        });\n        reference.counter++;\n        return { object, dispose };\n    }\n}\nexports.ReferenceCollection = ReferenceCollection;\n/**\n * Unwraps a reference collection of promised values. Makes sure\n * references are disposed whenever promises get rejected.\n */\nclass AsyncReferenceCollection {\n    constructor(referenceCollection) {\n        this.referenceCollection = referenceCollection;\n    }\n    async acquire(key, ...args) {\n        const ref = this.referenceCollection.acquire(key, ...args);\n        try {\n            const object = await ref.object;\n            return {\n                object,\n                dispose: () => ref.dispose()\n            };\n        }\n        catch (error) {\n            ref.dispose();\n            throw error;\n        }\n    }\n}\nexports.AsyncReferenceCollection = AsyncReferenceCollection;\nclass ImmortalReference {\n    constructor(object) {\n        this.object = object;\n    }\n    dispose() { }\n}\nexports.ImmortalReference = ImmortalReference;\nfunction disposeOnReturn(fn) {\n    const store = new DisposableStore();\n    try {\n        fn(store);\n    }\n    finally {\n        store.dispose();\n    }\n}\n/**\n * A map the manages the lifecycle of the values that it stores.\n */\nclass DisposableMap {\n    constructor() {\n        this._store = new Map();\n        this._isDisposed = false;\n        trackDisposable(this);\n    }\n    /**\n     * Disposes of all stored values and mark this object as disposed.\n     *\n     * Trying to use this object after it has been disposed of is an error.\n     */\n    dispose() {\n        markAsDisposed(this);\n        this._isDisposed = true;\n        this.clearAndDisposeAll();\n    }\n    /**\n     * Disposes of all stored values and clear the map, but DO NOT mark this object as disposed.\n     */\n    clearAndDisposeAll() {\n        if (!this._store.size) {\n            return;\n        }\n        try {\n            dispose(this._store.values());\n        }\n        finally {\n            this._store.clear();\n        }\n    }\n    has(key) {\n        return this._store.has(key);\n    }\n    get size() {\n        return this._store.size;\n    }\n    get(key) {\n        return this._store.get(key);\n    }\n    set(key, value, skipDisposeOnOverwrite = false) {\n        if (this._isDisposed) {\n            console.warn(new Error('Trying to add a disposable to a DisposableMap that has already been disposed of. The added object will be leaked!').stack);\n        }\n        if (!skipDisposeOnOverwrite) {\n            this._store.get(key)?.dispose();\n        }\n        this._store.set(key, value);\n    }\n    /**\n     * Delete the value stored for `key` from this map and also dispose of it.\n     */\n    deleteAndDispose(key) {\n        this._store.get(key)?.dispose();\n        this._store.delete(key);\n    }\n    /**\n     * Delete the value stored for `key` from this map but return it. The caller is\n     * responsible for disposing of the value.\n     */\n    deleteAndLeak(key) {\n        const value = this._store.get(key);\n        this._store.delete(key);\n        return value;\n    }\n    keys() {\n        return this._store.keys();\n    }\n    values() {\n        return this._store.values();\n    }\n    [Symbol.iterator]() {\n        return this._store[Symbol.iterator]();\n    }\n}\nexports.DisposableMap = DisposableMap;\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LinkedList = void 0;\nclass Node {\n    static { this.Undefined = new Node(undefined); }\n    constructor(element) {\n        this.element = element;\n        this.next = Node.Undefined;\n        this.prev = Node.Undefined;\n    }\n}\nclass LinkedList {\n    constructor() {\n        this._first = Node.Undefined;\n        this._last = Node.Undefined;\n        this._size = 0;\n    }\n    get size() {\n        return this._size;\n    }\n    isEmpty() {\n        return this._first === Node.Undefined;\n    }\n    clear() {\n        let node = this._first;\n        while (node !== Node.Undefined) {\n            const next = node.next;\n            node.prev = Node.Undefined;\n            node.next = Node.Undefined;\n            node = next;\n        }\n        this._first = Node.Undefined;\n        this._last = Node.Undefined;\n        this._size = 0;\n    }\n    unshift(element) {\n        return this._insert(element, false);\n    }\n    push(element) {\n        return this._insert(element, true);\n    }\n    _insert(element, atTheEnd) {\n        const newNode = new Node(element);\n        if (this._first === Node.Undefined) {\n            this._first = newNode;\n            this._last = newNode;\n        }\n        else if (atTheEnd) {\n            // push\n            const oldLast = this._last;\n            this._last = newNode;\n            newNode.prev = oldLast;\n            oldLast.next = newNode;\n        }\n        else {\n            // unshift\n            const oldFirst = this._first;\n            this._first = newNode;\n            newNode.next = oldFirst;\n            oldFirst.prev = newNode;\n        }\n        this._size += 1;\n        let didRemove = false;\n        return () => {\n            if (!didRemove) {\n                didRemove = true;\n                this._remove(newNode);\n            }\n        };\n    }\n    shift() {\n        if (this._first === Node.Undefined) {\n            return undefined;\n        }\n        else {\n            const res = this._first.element;\n            this._remove(this._first);\n            return res;\n        }\n    }\n    pop() {\n        if (this._last === Node.Undefined) {\n            return undefined;\n        }\n        else {\n            const res = this._last.element;\n            this._remove(this._last);\n            return res;\n        }\n    }\n    _remove(node) {\n        if (node.prev !== Node.Undefined && node.next !== Node.Undefined) {\n            // middle\n            const anchor = node.prev;\n            anchor.next = node.next;\n            node.next.prev = anchor;\n        }\n        else if (node.prev === Node.Undefined && node.next === Node.Undefined) {\n            // only node\n            this._first = Node.Undefined;\n            this._last = Node.Undefined;\n        }\n        else if (node.next === Node.Undefined) {\n            // last\n            this._last = this._last.prev;\n            this._last.next = Node.Undefined;\n        }\n        else if (node.prev === Node.Undefined) {\n            // first\n            this._first = this._first.next;\n            this._first.prev = Node.Undefined;\n        }\n        // done\n        this._size -= 1;\n    }\n    *[Symbol.iterator]() {\n        let node = this._first;\n        while (node !== Node.Undefined) {\n            yield node.element;\n            node = node.next;\n        }\n    }\n}\nexports.LinkedList = LinkedList;\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SetMap = exports.BidirectionalMap = exports.CounterSet = exports.Touch = void 0;\nexports.getOrSet = getOrSet;\nexports.mapToString = mapToString;\nexports.setToString = setToString;\nexports.mapsStrictEqualIgnoreOrder = mapsStrictEqualIgnoreOrder;\nfunction getOrSet(map, key, value) {\n    let result = map.get(key);\n    if (result === undefined) {\n        result = value;\n        map.set(key, result);\n    }\n    return result;\n}\nfunction mapToString(map) {\n    const entries = [];\n    map.forEach((value, key) => {\n        entries.push(`${key} => ${value}`);\n    });\n    return `Map(${map.size}) {${entries.join(', ')}}`;\n}\nfunction setToString(set) {\n    const entries = [];\n    set.forEach(value => {\n        entries.push(value);\n    });\n    return `Set(${set.size}) {${entries.join(', ')}}`;\n}\nvar Touch;\n(function (Touch) {\n    Touch[Touch[\"None\"] = 0] = \"None\";\n    Touch[Touch[\"AsOld\"] = 1] = \"AsOld\";\n    Touch[Touch[\"AsNew\"] = 2] = \"AsNew\";\n})(Touch || (exports.Touch = Touch = {}));\nclass CounterSet {\n    constructor() {\n        this.map = new Map();\n    }\n    add(value) {\n        this.map.set(value, (this.map.get(value) || 0) + 1);\n        return this;\n    }\n    delete(value) {\n        let counter = this.map.get(value) || 0;\n        if (counter === 0) {\n            return false;\n        }\n        counter--;\n        if (counter === 0) {\n            this.map.delete(value);\n        }\n        else {\n            this.map.set(value, counter);\n        }\n        return true;\n    }\n    has(value) {\n        return this.map.has(value);\n    }\n}\nexports.CounterSet = CounterSet;\n/**\n * A map that allows access both by keys and values.\n * **NOTE**: values need to be unique.\n */\nclass BidirectionalMap {\n    constructor(entries) {\n        this._m1 = new Map();\n        this._m2 = new Map();\n        if (entries) {\n            for (const [key, value] of entries) {\n                this.set(key, value);\n            }\n        }\n    }\n    clear() {\n        this._m1.clear();\n        this._m2.clear();\n    }\n    set(key, value) {\n        this._m1.set(key, value);\n        this._m2.set(value, key);\n    }\n    get(key) {\n        return this._m1.get(key);\n    }\n    getKey(value) {\n        return this._m2.get(value);\n    }\n    delete(key) {\n        const value = this._m1.get(key);\n        if (value === undefined) {\n            return false;\n        }\n        this._m1.delete(key);\n        this._m2.delete(value);\n        return true;\n    }\n    forEach(callbackfn, thisArg) {\n        this._m1.forEach((value, key) => {\n            callbackfn.call(thisArg, value, key, this);\n        });\n    }\n    keys() {\n        return this._m1.keys();\n    }\n    values() {\n        return this._m1.values();\n    }\n}\nexports.BidirectionalMap = BidirectionalMap;\nclass SetMap {\n    constructor() {\n        this.map = new Map();\n    }\n    add(key, value) {\n        let values = this.map.get(key);\n        if (!values) {\n            values = new Set();\n            this.map.set(key, values);\n        }\n        values.add(value);\n    }\n    delete(key, value) {\n        const values = this.map.get(key);\n        if (!values) {\n            return;\n        }\n        values.delete(value);\n        if (values.size === 0) {\n            this.map.delete(key);\n        }\n    }\n    forEach(key, fn) {\n        const values = this.map.get(key);\n        if (!values) {\n            return;\n        }\n        values.forEach(fn);\n    }\n    get(key) {\n        const values = this.map.get(key);\n        if (!values) {\n            return new Set();\n        }\n        return values;\n    }\n}\nexports.SetMap = SetMap;\nfunction mapsStrictEqualIgnoreOrder(a, b) {\n    if (a === b) {\n        return true;\n    }\n    if (a.size !== b.size) {\n        return false;\n    }\n    for (const [key, value] of a) {\n        if (!b.has(key) || b.get(key) !== value) {\n            return false;\n        }\n    }\n    for (const [key] of b) {\n        if (!a.has(key)) {\n            return false;\n        }\n    }\n    return true;\n}\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.StopWatch = void 0;\nconst hasPerformanceNow = (globalThis.performance && typeof globalThis.performance.now === 'function');\nclass StopWatch {\n    static create(highResolution) {\n        return new StopWatch(highResolution);\n    }\n    constructor(highResolution) {\n        this._now = hasPerformanceNow && highResolution === false ? Date.now : globalThis.performance.now.bind(globalThis.performance);\n        this._startTime = this._now();\n        this._stopTime = -1;\n    }\n    stop() {\n        this._stopTime = this._now();\n    }\n    reset() {\n        this._startTime = this._now();\n        this._stopTime = -1;\n    }\n    elapsed() {\n        if (this._stopTime !== -1) {\n            return this._stopTime - this._startTime;\n        }\n        return this._now() - this._startTime;\n    }\n}\nexports.StopWatch = StopWatch;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { BufferNamespaceApi } from 'common/public/BufferNamespaceApi';\nimport { ParserApi } from 'common/public/ParserApi';\nimport { UnicodeApi } from 'common/public/UnicodeApi';\nimport { IBufferNamespace as IBufferNamespaceApi, IMarker, IModes, IParser, ITerminalAddon, ITerminalInitOnlyOptions, IUnicodeHandling, Terminal as ITerminalApi } from '@xterm/headless';\nimport { Terminal as TerminalCore } from 'headless/Terminal';\nimport { AddonManager } from 'common/public/AddonManager';\nimport { ITerminalOptions } from 'common/Types';\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport type { Event } from 'vs/base/common/event';\n/**\n * The set of options that only have an effect when set in the Terminal constructor.\n */\nconst CONSTRUCTOR_ONLY_OPTIONS = ['cols', 'rows'];\n\nexport class Terminal extends Disposable implements ITerminalApi {\n  private _core: TerminalCore;\n  private _addonManager: AddonManager;\n  private _parser: IParser | undefined;\n  private _buffer: BufferNamespaceApi | undefined;\n  private _publicOptions: Required<ITerminalOptions>;\n\n  constructor(options?: ITerminalOptions & ITerminalInitOnlyOptions) {\n    super();\n\n    this._core = this._register(new TerminalCore(options));\n    this._addonManager = this._register(new AddonManager());\n\n    this._publicOptions = { ... this._core.options };\n    const getter = (propName: string): any => {\n      return this._core.options[propName];\n    };\n    const setter = (propName: string, value: any): void => {\n      this._checkReadonlyOptions(propName);\n      this._core.options[propName] = value;\n    };\n\n    for (const propName in this._core.options) {\n      Object.defineProperty(this._publicOptions, propName, {\n        get: () => {\n          return this._core.options[propName];\n        },\n        set: (value: any) => {\n          this._checkReadonlyOptions(propName);\n          this._core.options[propName] = value;\n        }\n      });\n      const desc = {\n        get: getter.bind(this, propName),\n        set: setter.bind(this, propName)\n      };\n      Object.defineProperty(this._publicOptions, propName, desc);\n    }\n  }\n\n  private _checkReadonlyOptions(propName: string): void {\n    // Throw an error if any constructor only option is modified\n    // from terminal.options\n    // Modifications from anywhere else are allowed\n    if (CONSTRUCTOR_ONLY_OPTIONS.includes(propName)) {\n      throw new Error(`Option \"${propName}\" can only be set in the constructor`);\n    }\n  }\n\n  private _checkProposedApi(): void {\n    if (!this._core.optionsService.options.allowProposedApi) {\n      throw new Error('You must set the allowProposedApi option to true to use proposed API');\n    }\n  }\n\n  public get onBell(): Event<void> { return this._core.onBell; }\n  public get onBinary(): Event<string> { return this._core.onBinary; }\n  public get onCursorMove(): Event<void> { return this._core.onCursorMove; }\n  public get onData(): Event<string> { return this._core.onData; }\n  public get onLineFeed(): Event<void> { return this._core.onLineFeed; }\n  public get onResize(): Event<{ cols: number, rows: number }> { return this._core.onResize; }\n  public get onScroll(): Event<number> { return this._core.onScroll; }\n  public get onTitleChange(): Event<string> { return this._core.onTitleChange; }\n  public get onWriteParsed(): Event<void> { return this._core.onWriteParsed; }\n\n  public get parser(): IParser {\n    this._checkProposedApi();\n    if (!this._parser) {\n      this._parser = new ParserApi(this._core);\n    }\n    return this._parser;\n  }\n  public get unicode(): IUnicodeHandling {\n    this._checkProposedApi();\n    return new UnicodeApi(this._core);\n  }\n  public get rows(): number { return this._core.rows; }\n  public get cols(): number { return this._core.cols; }\n  public get buffer(): IBufferNamespaceApi {\n    this._checkProposedApi();\n    if (!this._buffer) {\n      this._buffer = this._register(new BufferNamespaceApi(this._core));\n    }\n    return this._buffer;\n  }\n  public get markers(): ReadonlyArray<IMarker> {\n    this._checkProposedApi();\n    return this._core.markers;\n  }\n  public get modes(): IModes {\n    const m = this._core.coreService.decPrivateModes;\n    let mouseTrackingMode: 'none' | 'x10' | 'vt200' | 'drag' | 'any' = 'none';\n    switch (this._core.coreMouseService.activeProtocol) {\n      case 'X10': mouseTrackingMode = 'x10'; break;\n      case 'VT200': mouseTrackingMode = 'vt200'; break;\n      case 'DRAG': mouseTrackingMode = 'drag'; break;\n      case 'ANY': mouseTrackingMode = 'any'; break;\n    }\n    return {\n      applicationCursorKeysMode: m.applicationCursorKeys,\n      applicationKeypadMode: m.applicationKeypad,\n      bracketedPasteMode: m.bracketedPasteMode,\n      insertMode: this._core.coreService.modes.insertMode,\n      mouseTrackingMode: mouseTrackingMode,\n      originMode: m.origin,\n      reverseWraparoundMode: m.reverseWraparound,\n      sendFocusMode: m.sendFocus,\n      synchronizedOutputMode: m.synchronizedOutput,\n      wraparoundMode: m.wraparound\n    };\n  }\n  public get options(): Required<ITerminalOptions> {\n    return this._publicOptions;\n  }\n  public set options(options: ITerminalOptions) {\n    for (const propName in options) {\n      this._publicOptions[propName] = options[propName];\n    }\n  }\n  public input(data: string, wasUserInput: boolean = true): void {\n    this._core.input(data, wasUserInput);\n  }\n  public resize(columns: number, rows: number): void {\n    this._verifyIntegers(columns, rows);\n    this._core.resize(columns, rows);\n  }\n  public registerMarker(cursorYOffset: number = 0): IMarker | undefined {\n    this._checkProposedApi();\n    this._verifyIntegers(cursorYOffset);\n    return this._core.addMarker(cursorYOffset);\n  }\n  public addMarker(cursorYOffset: number): IMarker | undefined {\n    return this.registerMarker(cursorYOffset);\n  }\n  public dispose(): void {\n    super.dispose();\n  }\n  public scrollLines(amount: number): void {\n    this._verifyIntegers(amount);\n    this._core.scrollLines(amount);\n  }\n  public scrollPages(pageCount: number): void {\n    this._verifyIntegers(pageCount);\n    this._core.scrollPages(pageCount);\n  }\n  public scrollToTop(): void {\n    this._core.scrollToTop();\n  }\n  public scrollToBottom(): void {\n    this._core.scrollToBottom();\n  }\n  public scrollToLine(line: number): void {\n    this._verifyIntegers(line);\n    this._core.scrollToLine(line);\n  }\n  public clear(): void {\n    this._core.clear();\n  }\n  public write(data: string | Uint8Array, callback?: () => void): void {\n    this._core.write(data, callback);\n  }\n  public writeln(data: string | Uint8Array, callback?: () => void): void {\n    this._core.write(data);\n    this._core.write('\\r\\n', callback);\n  }\n  public reset(): void {\n    this._core.reset();\n  }\n  public loadAddon(addon: ITerminalAddon): void {\n    // TODO: This could cause issues if the addon calls renderer apis\n    this._addonManager.loadAddon(this as any, addon);\n  }\n\n  private _verifyIntegers(...values: number[]): void {\n    for (const value of values) {\n      if (value === Infinity || isNaN(value) || value % 1 !== 0) {\n        throw new Error('This API only accepts integers');\n      }\n    }\n  }\n}\n","import { Terminal } from \"@xterm/headless\";\nimport type { ManagedSession, UserMessage } from \"./types\";\n\n/**\n * Plumbing shared by the two PTY runners (`pty-manager.ts` for Claude,\n * `codex-pty-runner.ts` for Codex). These were duplicated byte-for-byte in both\n * files; the copies drifted only in their comments.\n *\n * Deliberately plumbing only. The two runners' *detection* logic stays\n * provider-specific and is not shared: Claude signals readiness with OSC 777\n * plus prompt markers, Codex with rendered status-bar predicates and no OSC at\n * all. Merging those would couple two independent provider contracts.\n */\n\n// PTY geometry. The headless render terminal (session.screen) MUST match these\n// so a provider's absolute cursor moves (ESC[<row>;<col>H) resolve to the same\n// screen coordinates the real TUI is painting against.\nexport const PTY_COLS = 120;\nexport const PTY_ROWS = 40;\n// Scrollback depth for the render terminal.\nexport const SCREEN_SCROLLBACK = 1000;\n// Everything the render terminal can hold: its scrollback plus the viewport.\n// This is what `subscribe_session` replays — \"as much scrollback as the session\n// still has\", not a number picked independently of it. The client keeps its own\n// retention cap (tb-mobile's VirtualTerminal, 10 000 rows), which is larger, so\n// this terminal is the binding limit on both ends and neither side has to know\n// the other's number.\nexport const REPLAY_MAX_LINES = SCREEN_SCROLLBACK + PTY_ROWS;\n\n// node-pty is a native addon — import dynamically to allow graceful failure\nlet pty: typeof import(\"node-pty\") | null = null;\n\nexport async function loadPty(): Promise<typeof import(\"node-pty\")> {\n  if (pty) return pty;\n  try {\n    pty = await import(\"node-pty\");\n    return pty;\n  } catch (err) {\n    throw new Error(\n      \"node-pty is required for PTY management but failed to load. \" +\n        \"Ensure it is installed: npm install node-pty\\n\" +\n        `Original error: ${err}`,\n    );\n  }\n}\n\nexport interface InternalSession extends ManagedSession {\n  process: any; // node-pty IPty\n  outputBuffer: Buffer;\n  // Headless terminal that renders the raw PTY stream into a real screen grid.\n  // getOutputLines() reads its rendered buffer so replay reflects true screen\n  // order rather than raw byte order (which both providers' absolute-cursor\n  // repaints scramble — see getOutputLines for the desync this fixes).\n  screen: Terminal;\n  // Ground-truth user messages submitted to this PTY, oldest-first, capped at\n  // INPUT_HISTORY_MAX. Recorded in writeSubmit(); replayed via getInputHistory().\n  inputHistory: UserMessage[];\n}\n\nexport function createScreen(): Terminal {\n  return new Terminal({\n    cols: PTY_COLS,\n    rows: PTY_ROWS,\n    scrollback: SCREEN_SCROLLBACK,\n    allowProposedApi: true,\n  });\n}\n\n// Strip ANSI escape sequences for clean text preview\nexport function stripAnsi(str: string): string {\n  // biome-ignore lint/suspicious/noControlCharactersInRegex: intentional ANSI stripping\n  return str.replace(/\\x1b\\[[0-9;]*[a-zA-Z]/g, \"\").replace(/\\x1b\\][^\\x07]*\\x07/g, \"\");\n}\n","import type { PermissionOption } from \"../../types\";\nimport type { CodexGateType } from \"./codexGateAnswers\";\n\n/**\n * Codex's rendered-screen regexes and predicates: readiness, busy/boot state,\n * blocking prompts (trust gate, hooks review, usage limits) and the cards built\n * from them. Pure functions of the rendered lines — no PTY, no session state.\n *\n * Lives here rather than in codex-pty-runner.ts for symmetry with the Claude\n * side, whose equivalents are already in this directory (detectPermissionGate,\n * detectQuestionFromScreen, detectShellPrompt, parseStatusLine).\n */\n\n// Phase 0 findings (live PTY probe, not spec): Codex's status bar renders\n// \"Ready\" (case-sensitive) once the session is actually usable, e.g.\n// \"gpt-5.5 medium · /path · gpt-5.5 · medium · Ready · Wo…\". Two other\n// observed states — \"Starting\" (MCP servers loading; the compose box `›`\n// prefix is ALREADY visible here, so `›` alone is not a valid readiness\n// signal) and \"Working\" (mid-turn) — must NOT be treated as ready.\nexport const CODEX_PROMPT_READY_TEXT = \"Ready\";\n\n// Status-bar words that mean the composer is not accepting submits. `\\b`\n// matches at a `/`, so these alone do NOT stop a cwd like `.../Working/repo`\n// from false-hitting — test them against codexStatusBarWords(), not the raw bar.\nexport const CODEX_BUSY_STATUS_RE = /\\b(?:Starting|Working)\\b/;\n\n// The busy half that actually means \"a turn is in flight\". \"Starting\" is MCP\n// boot, not a turn, so the two must not be conflated wherever the distinction\n// matters (agent phase); for composer gating they are the same and\n// CODEX_BUSY_STATUS_RE covers both.\nexport const CODEX_WORKING_STATUS_RE = /\\bWorking\\b/;\n\n// Boot progress lines that appear *above* the status bar while MCP servers\n// are still loading. The status bar may already omit \"Starting\" (or truncate\n// \"Ready\") during this window — treating quiet as ready here is what stranded\n// keystrokes in the compose box as newlines (session 61928fac).\n//\n// Do NOT match post-boot warnings (\"MCP startup incomplete\", \"not logged in\",\n// \"timed out after\"): those stay on screen after Codex is usable. Matching\n// them blocked Ready forever (session fbb5eb36) and left mobile stuck in\n// `running` with a spinning send affordance.\nexport const CODEX_MCP_BOOT_RE = /Booting MCP|Starting MCP servers/i;\n\n// Phase 0: a brand-new `--cd <dir>` shows a blocking directory-trust gate on\n// first-ever launch — a rendered screen containing this text, with options\n// \"1. Yes, continue\" / \"2. No, quit\" and a \"Press enter to continue\" footer.\n// Does not appear on `codex resume` or on later launches in an\n// already-trusted directory (Codex persists trust in ~/.codex/config.toml).\nexport const CODEX_TRUST_GATE_REGEX = /trust the contents/i;\n\n// Codex's hooks-review gate: shown pre-boot (fresh start AND resume) whenever\n// a configured hook is new/changed vs the trusted hashes in\n// ~/.codex/config.toml [hooks.state]. Options \"1. Review hooks\" (highlighted\n// default) / \"2. Trust all and continue\" / \"3. Continue without trusting\",\n// with a \"Press enter to confirm or esc to go back\" footer. Live-probe\n// verified: a digit keypress selects AND confirms instantly (no Enter).\nexport const CODEX_HOOKS_GATE_REGEX = /hooks need review/i;\n\n// Codex's single-writer lock: `codex resume` (or `codex fork`) refuses to\n// attach to a rollout another process already holds open, printing\n// \"already has an active writer (code -32600)\" and going no further. Codex\n// itself is the authority here — no pre-flight can be, because the owner may\n// be a TUI, VS Code, or the desktop app, and it can attach between our probe\n// and our spawn.\n//\n// Both spellings are accepted: the message is rendered into a 120-col TUI and\n// can wrap or truncate, so the JSON-RPC code is the more durable half. Matching\n// runs against the RENDERED screen, so a message split across PTY chunks (or\n// reordered by absolute-cursor repaints) still matches.\nexport const CODEX_ACTIVE_WRITER_RE = /already has an active writer|-32600/;\n\n/** `failureCode` set on a session killed by the writer-lock detection above. */\nexport const CODEX_ACTIVE_WRITER_CODE = \"codex_active_writer\";\n\n// Hard usage-limit error Codex prints when the account quota is exhausted.\nexport const CODEX_USAGE_LIMIT_RE = /you(?:'ve| have) hit your usage limit/i;\n\n// Soft tip Codex paints when a reset is available — often the only quota\n// signal on screen when a turn never starts (hard-limit text never appears).\nexport const CODEX_USAGE_RESET_TIP_RE = /usage limit reset available/i;\n\n// Interactive model-switch menu shown when a turn would exceed rate limits.\nexport const CODEX_RATE_LIMIT_MENU_RE = /approaching rate limits/i;\n\nexport interface CodexBlockingPrompt {\n  prompt: string;\n  detail?: string;\n  options: PermissionOption[];\n  /** Tip-only (not a hard limit / rate-limit menu). Surfaced after a failed turn. */\n  soft?: boolean;\n}\n\n// Codex command approvals are rendered as an EXEC card. Unlike the startup\n// gates above, selecting approval is a literal `y` and rejecting is Escape;\n// the numbered rows are presentation only. Require all of the card's stable\n// chrome so a command or approval word left in transcript scrollback cannot\n// become a permission card.\nconst CODEX_COMMAND_APPROVAL_HEADING_RE = /^\\s*E\\s*X\\s*E\\s*C\\s*$/i;\nconst CODEX_COMMAND_APPROVAL_ENV_RE = /^\\s*Environment:\\s*.+/i;\nconst CODEX_COMMAND_APPROVAL_REASON_RE = /^\\s*Reason:\\s*.+/i;\nconst CODEX_COMMAND_APPROVAL_CONFIRM_RE =\n  /(?:enter|return) to (?:confirm|approve)|press (?:enter|return) to (?:confirm|approve)/i;\nconst CODEX_COMMAND_APPROVAL_YES_RE = /^\\s*›?\\s*\\d+\\.\\s*yes\\b/i;\nconst CODEX_COMMAND_APPROVAL_NO_RE = /^\\s*›?\\s*\\d+\\.\\s*no\\b/i;\n\n/**\n * Detect Codex's rendered command-approval card. This deliberately does not\n * reuse parseCodexNumberedOptions: the visible 1/2 rows do not answer this\n * dialog, while `y` and Escape do.\n */\nexport function detectCodexCommandApproval(lines: string[]): CodexBlockingPrompt | null {\n  // The newest dialog is the last EXEC heading in the rendered buffer; an\n  // earlier one may be stale transcript content above a repaint.\n  let heading = -1;\n  for (let i = 0; i < lines.length; i++) {\n    if (CODEX_COMMAND_APPROVAL_HEADING_RE.test(lines[i])) heading = i;\n  }\n  if (heading < 0) return null;\n  if (\n    lines.some((line) => CODEX_USAGE_LIMIT_RE.test(line) || CODEX_RATE_LIMIT_MENU_RE.test(line))\n  ) {\n    return null;\n  }\n\n  const card = lines.slice(heading);\n  if (\n    !card.some((line) => CODEX_COMMAND_APPROVAL_ENV_RE.test(line)) ||\n    !card.some((line) => CODEX_COMMAND_APPROVAL_REASON_RE.test(line)) ||\n    !card.some((line) => CODEX_COMMAND_APPROVAL_YES_RE.test(line)) ||\n    !card.some((line) => CODEX_COMMAND_APPROVAL_NO_RE.test(line)) ||\n    !card.some((line) => CODEX_COMMAND_APPROVAL_CONFIRM_RE.test(line))\n  ) {\n    return null;\n  }\n\n  const detail = card\n    .filter((line) => {\n      const trimmed = line.trim();\n      return (\n        trimmed.length > 0 &&\n        !CODEX_COMMAND_APPROVAL_HEADING_RE.test(line) &&\n        !CODEX_COMMAND_APPROVAL_YES_RE.test(line) &&\n        !CODEX_COMMAND_APPROVAL_NO_RE.test(line) &&\n        !CODEX_COMMAND_APPROVAL_CONFIRM_RE.test(line)\n      );\n    })\n    .join(\"\\n\");\n\n  return {\n    prompt: \"Codex requests command approval\",\n    ...(detail ? { detail } : {}),\n    options: [\n      { index: 1, label: \"Yes\", answerKeys: \"y\" },\n      { index: 2, label: \"No\", answerKeys: \"\\x1b\" },\n    ],\n  };\n}\n\n// A Codex picker row: an optional selection cursor (Codex paints \">\", the\n// compose prefix is \"›\"), the number, and the label.\nconst CODEX_PICKER_ROW_RE = /^\\s*([>›❯])?\\s*(\\d+)\\.\\s+(.+?)\\s*$/;\n// Codex's compose prefix. A picker owns the screen instead of the composer, so\n// a compose line below a numbered block means the block is transcript output.\nconst CODEX_COMPOSE_LINE_RE = /^\\s*›/;\n// Lines between two option rows: Codex prints one indented description line\n// and one blank. More than that is prose, not a menu.\nconst MAX_PICKER_ROW_GAP = 2;\n\n/**\n * Claim Codex's own numbered picker — the sign-in screen shown before login\n * (\"1. Sign in with ChatGPT / 2. Sign in with Device Code / 3. Provide your own\n * API key\"), and any menu of that shape (#868). Codex's other dialogs have\n * their own detectors and are checked before this one.\n *\n * Rows may be separated by one indented description line each, which is what\n * defeats the Claude-side readers: scrapePermissionGate stops at the first\n * non-option line, and detectShellPrompt's bare-confirmation branch turns the\n * trailing \"Press enter to continue\" into a single Continue option whose Enter\n * silently picks the highlighted row — signing the user in on one tap.\n *\n * Answer keys are the bare digit: verified live on codex-cli 0.154.0, a digit\n * selects AND confirms, the same as Codex's trust and hooks gates.\n */\nexport function detectCodexPicker(lines: string[]): CodexBlockingPrompt | null {\n  const screenText = lines.join(\"\\n\");\n  if (CODEX_TRUST_GATE_REGEX.test(screenText) || CODEX_HOOKS_GATE_REGEX.test(screenText)) {\n    return null;\n  }\n  if (codexScreenShowsReady(lines)) return null;\n\n  const rows: { line: number; index: number; label: string; cursor: boolean }[] = [];\n  for (let i = 0; i < lines.length; i++) {\n    const m = CODEX_PICKER_ROW_RE.exec(lines[i]);\n    if (m) rows.push({ line: i, index: Number(m[2]), label: m[3], cursor: Boolean(m[1]) });\n  }\n  if (rows.length < 2) return null;\n\n  // The LAST contiguous 1..N run: an earlier menu may sit in the scrollback.\n  let start = rows.length - 1;\n  while (start > 0 && rows[start - 1].index === rows[start].index - 1) start--;\n  const block = rows.slice(start);\n  if (block.length < 2 || block[0].index !== 1) return null;\n  if (block.filter((r) => r.cursor).length !== 1) return null;\n  for (let i = 1; i < block.length; i++) {\n    // Codex separates its rows with a description line AND a blank line, so a\n    // blank inside the block is normal — rejecting it is what made the first\n    // version of this detector inert against the real screen (#868).\n    if (block[i].line - block[i - 1].line - 1 > MAX_PICKER_ROW_GAP) return null;\n  }\n  // A compose line below the block means this is transcript output, not a live\n  // picker; the composer and a picker never share the screen.\n  for (let i = block[block.length - 1].line + 1; i < lines.length; i++) {\n    if (CODEX_COMPOSE_LINE_RE.test(lines[i])) return null;\n  }\n\n  // The intro sits above the block, separated from it by the same blank rows\n  // Codex puts between the options — skip those before collecting it, or the\n  // card carries a placeholder instead of Codex's own words.\n  let above = block[0].line - 1;\n  while (above >= 0 && lines[above].trim() === \"\") above--;\n  const intro: string[] = [];\n  for (let i = above; i >= 0 && intro.length < 3; i--) {\n    const t = lines[i].trim();\n    if (t === \"\") break;\n    intro.unshift(t);\n  }\n  const prompt = intro.length > 0 ? intro[intro.length - 1] : \"Codex is asking you to choose\";\n  const detail = intro.slice(0, -1).join(\"\\n\");\n  return {\n    prompt,\n    ...(detail ? { detail } : {}),\n    options: block.map((r) => ({ index: r.index, label: r.label, answerKeys: `${r.index}` })),\n  };\n}\n\n/** Parse Codex's numbered TUI menus (`1. …`, `› 2. …`). */\nexport function parseCodexNumberedOptions(lines: string[]): PermissionOption[] {\n  const options: PermissionOption[] = [];\n  for (const line of lines) {\n    const m = /^\\s*[>›❯]?\\s*(\\d+)\\.\\s+(.+?)\\s*$/.exec(line.trimEnd());\n    if (!m) continue;\n    const label = m[2].replace(/\\s*\\(selected\\)\\s*$/i, \"\").trim();\n    options.push({ index: Number(m[1]), label, answerKeys: `${m[1]}\\r` });\n  }\n  return options;\n}\n\n/**\n * Usage-limit errors, the soft \"reset available\" tip, and the \"Approaching\n * rate limits\" model-picker menu. Surfaced over the permission transport so\n * mobile shows a card instead of spinning forever in `running`.\n */\nexport function detectCodexBlockingPrompt(lines: string[]): CodexBlockingPrompt | null {\n  const screenText = lines.join(\"\\n\");\n  const usageLine = lines.find((l) => CODEX_USAGE_LIMIT_RE.test(l))?.trim();\n  const tipLine = lines.find((l) => CODEX_USAGE_RESET_TIP_RE.test(l))?.trim();\n  const rateMenu = CODEX_RATE_LIMIT_MENU_RE.test(screenText);\n  if (!usageLine && !rateMenu && !tipLine) return null;\n\n  const soft = !usageLine && !rateMenu && Boolean(tipLine);\n  const prompt =\n    usageLine ??\n    lines.find((l) => CODEX_RATE_LIMIT_MENU_RE.test(l))?.trim() ??\n    tipLine ??\n    \"Codex usage limit reached\";\n  const detail = lines.find((l) => /try again at/i.test(l))?.trim();\n  const options = parseCodexNumberedOptions(lines);\n  if (options.length === 0) {\n    options.push({ index: 1, label: soft ? \"Dismiss\" : \"OK\", answerKeys: \"\\x1b\" });\n  }\n  return { prompt, ...(detail ? { detail } : {}), options, ...(soft ? { soft: true } : {}) };\n}\n\n/** Last non-blank rendered line — Codex paints the status bar there. */\nexport function codexStatusBarLine(lines: string[]): string {\n  return [...lines].reverse().find((l) => l.trim() !== \"\") ?? \"\";\n}\n\n/**\n * The status bar with its path-shaped `·` fields (containing `/` or `\\`, or\n * starting with `~`) dropped, for every status-word test. The bar carries\n * the cwd at no fixed position — the field count varies — so filtering by shape\n * is the only position-independent way to keep a project path out of the match.\n */\nexport function codexStatusBarWords(lines: string[]): string {\n  return codexStatusBarLine(lines)\n    .split(\"·\")\n    .filter((f) => !/[/\\\\]/.test(f) && !f.trim().startsWith(\"~\"))\n    .join(\"·\");\n}\n\n/**\n * True while the screen shows something that precedes a turn rather than being\n * one: a blocking gate dialog, or MCP boot progress. Both keep the composer\n * shut, but neither is the agent doing work — the status-bar half of\n * codexScreenBlocksComposer cannot tell them apart on its own, and reading\n * only that half is how the agent phase reported \"working\" during boot.\n */\nexport function codexScreenPreTurn(lines: string[]): boolean {\n  const screenText = lines.join(\"\\n\");\n  if (CODEX_HOOKS_GATE_REGEX.test(screenText) || CODEX_TRUST_GATE_REGEX.test(screenText)) {\n    return true;\n  }\n  return CODEX_MCP_BOOT_RE.test(screenText);\n}\n\n/**\n * True while Codex must not receive composer keystrokes: gate dialogs, MCP\n * boot progress, or a Starting/Working status bar. Shared by boot detection,\n * the flat fallback, and mid-session idle re-detect.\n */\nexport function codexScreenBlocksComposer(lines: string[]): boolean {\n  if (codexScreenPreTurn(lines)) return true;\n  return CODEX_BUSY_STATUS_RE.test(codexStatusBarWords(lines));\n}\n\n/** Authoritative Ready: status-bar word present and screen not otherwise busy. */\nexport function codexScreenShowsReady(lines: string[]): boolean {\n  if (codexScreenBlocksComposer(lines)) return false;\n  return codexStatusBarWords(lines).includes(CODEX_PROMPT_READY_TEXT);\n}\n\n/**\n * Soft idle for a truncated Ready bar: compose `›` / `>` is up and nothing\n * busy is on screen. Not used as a sole boot-ready signal on quiet — `›`\n * appears during Starting — but the flat fallback requires it (or Ready)\n * before settling so a model-only status line is not mistaken for usable.\n */\nexport function codexScreenLooksIdle(lines: string[]): boolean {\n  if (codexScreenBlocksComposer(lines)) return false;\n  if (codexScreenShowsReady(lines)) return true;\n  // Compose prefix: `›` (Codex default) or `>` (some Windows/ConPTY paints).\n  // Require start-of-line so URLs like `https://…` do not false-hit.\n  return lines.some((l) => /^\\s*[›>]\\s/.test(l) || l.includes(\"›\"));\n}\n\n// Build the question card for a gate, broadcast over the existing `permission`\n// WS transport (mobile already renders these as tappable cards). Real options\n// keep their literal on-screen digits; the synthetic \"remember\" variants\n// continue the numbering and are intercepted in sendKeys() — they never reach\n// the PTY as-is. answerKeys mirrors `${index}\\r` so old clients (index\n// fallback) and new clients (answerKeys) send identical bytes.\n// \"1. Review hooks\" is deliberately omitted: a per-hook review screen is a\n// desktop affordance with no workable mobile rendering.\nexport function gateCard(\n  gate: CodexGateType,\n  lines: string[],\n): { prompt: string; options: PermissionOption[] } {\n  if (gate === \"hooks\") {\n    const countLine = lines.find((l) => /new or changed/i.test(l))?.trim();\n    return {\n      prompt: [\n        \"Hooks need review\",\n        countLine,\n        \"Hooks can run outside the sandbox after you trust them.\",\n      ]\n        .filter(Boolean)\n        .join(\" — \"),\n      options: [\n        { index: 2, label: \"Trust all and continue\", answerKeys: \"2\\r\" },\n        { index: 3, label: \"Continue without trusting (hooks won't run)\", answerKeys: \"3\\r\" },\n        {\n          index: 4,\n          label: \"Trust all and continue (remember for all projects)\",\n          answerKeys: \"4\\r\",\n        },\n        {\n          index: 5,\n          label: \"Continue without trusting (remember for all projects)\",\n          answerKeys: \"5\\r\",\n        },\n      ],\n    };\n  }\n  return {\n    prompt:\n      lines.find((l) => CODEX_TRUST_GATE_REGEX.test(l))?.trim() ??\n      \"Do you trust the contents of this directory?\",\n    options: [\n      { index: 1, label: \"Yes, continue\", answerKeys: \"1\\r\" },\n      { index: 2, label: \"No, quit\", answerKeys: \"2\\r\" },\n      { index: 3, label: \"Yes, continue (remember for all projects)\", answerKeys: \"3\\r\" },\n    ],\n  };\n}\n","// Permission-gate detection. Three independent signals:\n//\n//   1. Rendered gate signature — the PRIMARY, paint-time trigger\n//      (detectGateScreen): gate footer + numbered Yes/No options in the\n//      rendered screen. Fires within one scrape throttle tick of the paint.\n//\n//   2. OSC 777 escape — the deterministic FALLBACK trigger. The PTY emits\n//      `\\x1b]777;notify;Claude Code;Claude needs your permission\\x07`\n//      (often tmux-wrapped: `\\x1bPtmux;\\x1b\\x1b]777;notify;…\\x1b\\`) — but\n//      ~6s AFTER the gate paints (measured 2026-08-08, see\n//      docs/superpowers/specs/2026-08-08-paint-time-gate-detection-design.md).\n//      Still load-bearing: it covers a gate whose options never painted, and\n//      its \"waiting for your input\" body is the authoritative close signal.\n//\n//   3. Rendered option scrape — the payload builder. The gate's numbered\n//      options are painted via absolute-cursor moves, so they live in the\n//      rendered headless buffer (getOutputLines), not the raw byte stream. We\n//      read the ACTUAL leading numbers and the `❯` cursor — the numbers are\n//      NOT a stable 1-based index (a gate can show \"2. Yes / 3. No\"), which\n//      is exactly the \"2 didn't take\" bug this avoids. The scrape takes the\n//      LAST option block scanning bottom-up, since a numbered list in Claude's\n//      prose above the gate can match the same option shape and must not be\n//      swept in.\n\nexport interface PermissionOption {\n  /** The real leading number shown on screen (NOT a 1-based array index). */\n  index: number;\n  label: string;\n  /**\n   * Literal keystroke bytes that answer this option, when the number alone\n   * isn't the answer (e.g. a y/N shell prompt answers \"y\\r\"/\"n\\r\", not \"1\\r\").\n   * Additive: OSC-777 gates omit it and the client answers via `index`; the\n   * unstructured shell-prompt path (detectShellPrompt) populates it.\n   */\n  answerKeys?: string;\n}\n\nexport interface PermissionGate {\n  /** Prompt text above the options, e.g. \"Claude needs your permission to use Bash\". */\n  prompt?: string;\n  /**\n   * The descriptive block above the prompt — the tool title, the command, and any\n   * action description Claude paints inside the gate box (newline-joined). Lets the\n   * client show WHAT is being permitted, not just \"Do you want to proceed?\".\n   */\n  detail?: string;\n  options: PermissionOption[];\n  /** Index value (the on-screen number) of the `❯`-highlighted option, if any. */\n  cursor?: number;\n}\n\n/**\n * Stable content key for de-duping repeated broadcasts of the same gate across\n * PTY repaint ticks. Includes cursor — moving the on-screen selection is a\n * real update the client needs, so it must produce a new key.\n */\nexport function permissionContentKey(gate: {\n  prompt?: string;\n  detail?: string;\n  options: PermissionOption[];\n  cursor?: number;\n}): string {\n  return `${gate.prompt ?? \"\"}::${gate.detail ?? \"\"}::${gate.options\n    .map((o) => `${o.index}.${o.label}`)\n    .join(\",\")}::${gate.cursor ?? \"\"}`;\n}\n\n/**\n * The gate's IDENTITY key: the content key with the cursor stripped.\n *\n * Cursor belongs in the broadcast dedupe key (moving the highlight is a real\n * update) but never in identity — the same gate with a different highlight is\n * the same gate. `closedGateKey` in pty-manager.ts already draws exactly this\n * line; this names it so the answer route and the client agree on one spelling.\n *\n * Content-derived, not instance-derived: it distinguishes gates with different\n * prompt/detail/options, NOT two consecutive gates whose content is identical.\n */\nexport function permissionGateKey(gate: {\n  prompt?: string;\n  detail?: string;\n  options: PermissionOption[];\n}): string {\n  return permissionContentKey({ ...gate, cursor: undefined });\n}\n\n// OSC 777 with the notify command from Claude Code. We match the stable core\n// (`]777;notify;Claude Code`) rather than the whole tmux-passthrough wrapper so\n// detection survives both the wrapped and unwrapped forms.\n//\n// The BODY is load-bearing: Claude Code emits OSC 777 for two different events,\n// and only one of them is a gate.\n//\n//   \"Claude needs your permission\"      → a real gate; options paint later.\n//   \"Claude is waiting for your input\"  → the turn ENDED; there is no gate.\n//\n// Matching the prefix alone conflated the two, so an end-of-turn notify opened a\n// permission card that could never populate or close: scrapePermissionGate finds\n// no options (correctly — there are none), the caller broadcasts `{options: []}`,\n// and the recovery path needs a prompt marker from a LATER chunk that never\n// arrives because the turn is over. Result: a stuck \"Claude needs your\n// permission\" card with only Cancel. Anchor on the permission body instead.\n// biome-ignore lint/suspicious/noControlCharactersInRegex: matching the literal OSC 777 escape\nconst OSC_777_PERMISSION_RE = /\\x1b\\]777;notify;Claude Code;[^\\x07\\x1b]*needs your permission/;\n\n// biome-ignore lint/suspicious/noControlCharactersInRegex: matching the literal OSC 777 escape\nconst OSC_777_WAITING_RE = /\\x1b\\]777;notify;Claude Code;[^\\x07\\x1b]*waiting for your input/;\n\n/** True if a raw PTY chunk contains the Claude Code OSC 777 permission notify. */\nexport function hasPermissionOsc(rawData: string): boolean {\n  return OSC_777_PERMISSION_RE.test(rawData);\n}\n\n/**\n * True if a raw PTY chunk contains the OSC 777 \"waiting for your input\" notify —\n * Claude finished its turn. Not a gate: it is the positive signal that any gate\n * we were tracking is over, which is what lets a stuck card close without\n * waiting for a prompt marker that will never come.\n */\nexport function hasWaitingForInputOsc(rawData: string): boolean {\n  return OSC_777_WAITING_RE.test(rawData);\n}\n\n// A rendered option row: optional cursor, then \"N. label\". Leading spaces\n// from the box/indent are tolerated (the box gutter is stripped first). We\n// capture N and the label separately.\n//\n// The cursor may be `❯`, `›` or ASCII `>`. Claude Code paints it as a plain `>`\n// (U+003E) on Windows — measured from a real gate's PTY bytes, which render the\n// highlighted row as \" > 1. Yes\" against \"   2. No\" for the rest. Accepting only\n// `❯` dropped that row from the options entirely, and the prompt search below\n// then picked it up as the question — so the plain \"Yes\" never reached the\n// client and \"switch to auto mode\" was left as the only way to approve.\n// PROMPT_ARROW_RE below and codexScreen.ts already accept all three.\nconst OPTION_RE = /^\\s*([❯›>])?\\s*(\\d+)\\.\\s+(.+?)\\s*$/;\n\n// Chrome lines that are never the prompt: footers, box-drawing, prompt arrows.\nconst FOOTER_RE = /Enter to select|Esc to cancel|↑|↓|to navigate|to cancel/i;\nconst BOX_ONLY_RE = /^[\\s│─┌┐└┘├┤┬┴┼╭╮╰╯╱╲=_-]+$/;\nconst PROMPT_ARROW_RE = /^[\\s]*[❯›>]\\s*$/;\n\n// Strip leading and trailing box-drawing gutters (\"│ … │\") so a boxed gate\n// frame parses the same as an unboxed one.\nfunction stripGutter(line: string): string {\n  return line.replace(/^\\s*[│|]\\s?/, \"\").replace(/\\s*[│|]\\s*$/, \"\");\n}\n\n/**\n * Scrape the permission gate's options + prompt from rendered screen lines.\n * Scrapes the LAST option block on screen, scanning bottom-up: a stale\n * numbered list sitting in scrollback above the real gate (e.g. Claude's own\n * prose) matches the same option shape and must not be vacuumed in with it.\n * Returns null when no numbered options are present (not a gate, or not painted\n * yet). Pure — no I/O.\n */\nexport function scrapePermissionGate(lines: string[]): PermissionGate | null {\n  const options: PermissionOption[] = [];\n  let cursor: number | undefined;\n  let cursorRows = 0;\n  let firstOptionLine = -1;\n\n  for (let i = lines.length - 1; i >= 0; i--) {\n    const stripped = stripGutter(lines[i]);\n    const m = OPTION_RE.exec(stripped);\n    if (m) {\n      const index = Number.parseInt(m[2], 10);\n      if (!Number.isFinite(index)) continue;\n      firstOptionLine = i; // overwritten as we walk up — ends up topmost\n      if (m[1]) {\n        cursor = index; // the glyph marks the highlighted option\n        cursorRows++;\n      }\n      options.unshift({ index, label: m[3] }); // keep top-to-bottom screen order\n      continue;\n    }\n    if (options.length === 0) continue; // still below the block: footer, box bottom, blanks\n    // Inside the block: a blank line or the box edge marks its top boundary.\n    if (stripped.trim().length === 0 || BOX_ONLY_RE.test(lines[i].trim())) break;\n    // otherwise: a wrapped option label or the prompt line — keep walking\n  }\n\n  if (options.length === 0) return null;\n\n  // A selection cursor marks exactly ONE row; a line PREFIX marks every row.\n  // Markdown blockquotes are the case that matters — `> 1. Rebase` / `> 2. Squash`\n  // in Claude's prose is option-shaped and carries a `>` on both rows — but the\n  // rule is about the shape, not the glyph, so a quoted `❯` list is caught too.\n  // Reporting a highlight here would be wrong data on its own, and it is what\n  // let detectPickerScreen claim such a block whenever no composer rule\n  // happened to sit below it. The two guards are complementary: this one\n  // rejects quoted prose (every row marked), the composer-rule test rejects\n  // typed or pasted text (one row marked, by the composer's own `❯` prompt).\n  if (cursorRows > 1) cursor = undefined;\n\n  // Prompt = nearest non-empty, non-chrome line above the first option row.\n  let prompt: string | undefined;\n  let promptLine = -1;\n  for (let i = firstOptionLine - 1; i >= 0; i--) {\n    const t = stripGutter(lines[i]).trim();\n    if (t.length === 0) continue;\n    if (BOX_ONLY_RE.test(lines[i].trim()) || FOOTER_RE.test(t) || PROMPT_ARROW_RE.test(t)) continue;\n    prompt = t || undefined;\n    promptLine = i;\n    break;\n  }\n\n  // Detail = the descriptive block ABOVE the prompt (tool title + command +\n  // action description), newline-joined. The box top, 2+ consecutive blanks (the\n  // gap to prior scrollback), or a ~6-line cap ends the block — so a\n  // partial-window scrape can't vacuum unrelated terminal output.\n  const detail = promptLine > 0 ? scrapeDetail(lines, promptLine) : undefined;\n\n  return {\n    ...(prompt ? { prompt } : {}),\n    ...(detail ? { detail } : {}),\n    options,\n    ...(cursor !== undefined ? { cursor } : {}),\n  };\n}\n\nconst MAX_DETAIL_LINES = 6;\n\nfunction scrapeDetail(lines: string[], promptLine: number): string | undefined {\n  const collected: string[] = []; // bottom-up, content lines only\n  let blankRun = 0;\n  for (let i = promptLine - 1; i >= 0; i--) {\n    // Strip the gutter first: a bare \"│\" is an INTERNAL blank line, not a frame\n    // edge — only the true border rows (\"╭──╮\" / \"╰──╯\") are box-only once the\n    // gutter is removed.\n    const t = stripGutter(lines[i]).trim();\n    if (BOX_ONLY_RE.test(t)) break; // box top / frame edge\n    if (t.length === 0) {\n      blankRun++;\n      if (blankRun >= 2) break; // gap to prior scrollback\n      continue; // single blank: skip (join already separates lines)\n    }\n    blankRun = 0;\n    if (FOOTER_RE.test(t) || PROMPT_ARROW_RE.test(t)) continue; // skip chrome, keep walking\n    collected.push(t);\n    if (collected.length >= MAX_DETAIL_LINES) break;\n  }\n\n  return collected.length > 0 ? collected.reverse().join(\"\\n\") : undefined;\n}\n\n// ── Paint-time gate signature ──────────────────────────────────────\n// The OSC 777 notify is debounced ~6s by Claude Code (measured 2026-08-08,\n// see docs/superpowers/specs/2026-08-08-paint-time-gate-detection-design.md),\n// so waiting for it makes the mobile card lag a fully painted gate. This\n// classifier claims a gate from the RENDERED screen alone. All three anchors\n// must hold — the Yes/No label test is what keeps a numbered list in Claude's\n// prose from opening a card.\n\n// Gate footer (\"Esc to cancel · Tab to amend · ctrl+e to explain\"); \"esc to\n// cancel\" is the stable core across versions.\nconst GATE_FOOTER_RE = /esc to cancel/i;\n// AskUserQuestion footer — that path has priority (its footer also contains\n// \"Esc to cancel\", so this must be tested first).\nconst ASK_MENU_FOOTER_RE = /Enter to select/i;\n// Same family test detectQuestionFromScreen uses in reverse to REJECT gates.\nconst YES_NO_LABEL_RE = /^(yes|no)\\b/i;\n\n/**\n * Claim a permission gate from rendered screen lines without an OSC 777.\n * Returns the scraped gate when the full gate signature is present:\n * ≥2 numbered options, the gate footer, no Ask-menu footer, and at least one\n * Yes/No-family option label. Pure — no I/O.\n */\nexport function detectGateScreen(lines: string[]): PermissionGate | null {\n  if (lines.some((l) => ASK_MENU_FOOTER_RE.test(l))) return null;\n  if (!lines.some((l) => GATE_FOOTER_RE.test(l))) return null;\n  const gate = scrapePermissionGate(lines);\n  if (!gate || gate.options.length < 2) return null;\n  if (!gate.options.some((o) => YES_NO_LABEL_RE.test(o.label))) return null;\n  return gate;\n}\n\n// Claude Code's composer draws its \"❯\" prompt between two full-width ─ rules.\n// A live picker replaces the composer, so a rule below a numbered block means\n// the block is not a picker the user is being asked to answer.\nconst COMPOSER_RULE_RE = /^\\s*─{8,}\\s*$/;\n\n/**\n * Claim an unboxed numbered picker from rendered screen lines — one that prints\n * no gate footer, so detectGateScreen never sees it (Claude Code's first-run\n * theme picker, which follows its options with a preview and a \"Syntax theme\"\n * line; #863). The ❯ selection cursor is what separates a live picker from a\n * numbered list in prose (#821). It is not enough on its own: ❯ is also the\n * composer's prompt glyph, so typed or pasted \"1. …\" text renders as a\n * cursor-marked numbered block between the composer's rules, and an answered\n * menu stays painted above a live composer (#724). Both leave a composer rule\n * below the cursor row; a live picker does not. Boxed blocks stay\n * detectGateScreen's. Pure — no I/O.\n */\nexport function detectPickerScreen(lines: string[]): PermissionGate | null {\n  if (lines.some((l) => ASK_MENU_FOOTER_RE.test(l))) return null;\n  const gate = scrapePermissionGate(lines);\n  if (!gate || gate.cursor === undefined || gate.options.length < 2) return null;\n  let cursorRow = -1;\n  for (let i = lines.length - 1; i >= 0; i--) {\n    const m = OPTION_RE.exec(stripGutter(lines[i]));\n    if (m?.[1] && Number.parseInt(m[2], 10) === gate.cursor) {\n      cursorRow = i;\n      break;\n    }\n  }\n  if (cursorRow < 0 || /^\\s*│/.test(lines[cursorRow])) return null;\n  for (let i = cursorRow + 1; i < lines.length; i++) {\n    if (COMPOSER_RULE_RE.test(lines[i])) return null;\n  }\n  return gate;\n}\n","import type { AskOption, AskQuestion } from \"../../types\";\n\n// Detect a structured AskUserQuestion menu from the RENDERED screen lines\n// (getOutputLines), not JSONL. The JSONL path (detectAskUserQuestion) is\n// structurally late — the question is painted in the TUI before the tool_use\n// block flushes to disk, and a backgrounded sub-agent may write to a different\n// JSONL than the watched session. Scraping the rendered screen fires the moment\n// the menu is on screen.\n//\n// The on-screen AskUserQuestion menu looks like:\n//\n//     Which area are you focused on?\n//     ❯ 1. macOS / Chrome\n//       2. iOS / Safari\n//       …\n//       6. Chat about this\n//     Enter to select · Tab/Arrow keys to navigate · Esc to cancel\n//\n// Differences from the JSONL form: no header/description/preview (the screen\n// only shows labels), and the leading number is the on-screen index. We map it\n// to the AskQuestion shape (header/description default to \"\") so the existing\n// `question` WS event and QuestionCard render path are reused unchanged.\n\n// The footer that terminates an AskUserQuestion menu — its presence is the\n// positive signal that this block IS a structured picker (vs a permission gate,\n// which uses a different footer and y/n phrasing).\nconst ASK_FOOTER_RE = /Enter to select/i;\nconst ESC_FOOTER_RE = /Esc to cancel|to navigate/i;\n\n// An option row: optional `❯` cursor + \"N. label\". Tolerates the box indent.\nconst OPTION_RE = /^\\s*(?:❯)?\\s*(\\d+)\\.\\s+(.+?)\\s*$/;\n\n// A question header ends with \"?\" (AskUserQuestion questions are interrogative).\nconst QUESTION_RE = /\\?\\s*$/;\n\nconst BOX_ONLY_RE = /^[\\s│─┌┐└┘├┤┬┴┼╭╮╰╯╱╲=_-]+$/;\n\n// Reject permission-gate option labels so a gate (caught separately via OSC 777)\n// never doubles as a structured question.\nconst PERMISSION_LABEL_RE = /^(Yes|No)\\b/i;\n\n// The checkbox a multi-select picker paints beside each selectable option\n// (\"[ ] Python\" before a toggle, \"[✔] Python\" after). Its presence is the ONLY\n// on-screen evidence that a picker is multi-select: the TUI draws a\n// multi-select form and a single-select menu with the same footer, the same\n// \"N.\" numbering and the same ❯ cursor, so nothing else here distinguishes\n// them. `Chat about this` — the escape hatch — carries no checkbox, so ANY\n// marked option means multi-select; requiring all of them would miss every\n// real form.\nconst KNOWN_STATE_MARKER_RE = /^(?:\\[(?:[ xX*]|✓|✔)\\]|[☐☑☒])\\s*/;\n\n// A short bracketed token we do NOT recognise, treated as a state marker we\n// cannot read rather than as label text. This is what makes the classifier fail\n// towards unanswerable: without it, an unfamiliar marker (a future TUI painting\n// \"( )\" radios, say) would fall through to single-select and the answer route\n// would write a keystroke for a shape it never understood. The ≤3-character\n// bound is deliberate — real markers are one or two glyphs, while a longer\n// bracketed token (\"[draft] …\") is far more likely to be genuine label text.\nconst UNKNOWN_STATE_MARKER_RE = /^(?:\\[[^\\]]{0,3}\\]|\\([^)]{0,3}\\))\\s*/;\n\n// Split a rendered option label into its state marker (if any) and the label\n// proper. A recognised marker is stripped — it is presentation, and leaving it\n// in the payload both ships \"[ ]\" to clients as if it were part of the option\n// text and makes questionContentKey unstable, so merely ticking a box on screen\n// reads as a different question and mints a new prompt.\nfunction stripStateMarker(label: string): { label: string; marked: boolean } {\n  if (KNOWN_STATE_MARKER_RE.test(label)) {\n    return { label: label.replace(KNOWN_STATE_MARKER_RE, \"\"), marked: true };\n  }\n  // Unrecognised: flag it, but leave the text alone — we do not know that the\n  // token is a marker, only that we cannot rule it out.\n  if (UNKNOWN_STATE_MARKER_RE.test(label)) return { label, marked: true };\n  return { label, marked: false };\n}\n\n// The final confirmation screen of a multi-question AskUserQuestion TUI:\n//   Ready to submit your answers?\n//   ❯ 1. Submit answers\n//     2. Cancel\n//   Enter to select · …\n// The user already answered each question via cards, so this internal step is\n// auto-confirmed by the PTY layer and must never render as its own card.\nconst SUBMIT_QUESTION_RE = /ready to submit your answers\\?/i;\nconst SUBMIT_OPTION_RE = /^submit answers?$/i;\n\n// Strip leading AND trailing box-drawing gutters (\"│ … │\") so a menu drawn\n// inside a box parses the same as an unboxed one (the trailing gutter matters\n// for the \"?\"-suffix question test).\nfunction stripBoxGutter(line: string): string {\n  return line.replace(/^\\s*[│|]\\s?/, \"\").replace(/\\s*[│|]\\s*$/, \"\");\n}\n\n/**\n * Detect an AskUserQuestion menu in rendered screen lines. Returns the question\n * set (single-question; the TUI shows one picker at a time) or null.\n * Pure — no I/O.\n */\nexport function detectQuestionFromScreen(lines: string[]): { questions: AskQuestion[] } | null {\n  // Find the footer that closes the menu; scan upward from it.\n  let footerIdx = -1;\n  for (let i = lines.length - 1; i >= 0; i--) {\n    if (ASK_FOOTER_RE.test(lines[i])) {\n      footerIdx = i;\n      break;\n    }\n  }\n  if (footerIdx === -1) return null;\n\n  // Collect option rows above the footer. Real menus interleave each \"N. label\"\n  // row with wrapped DESCRIPTION lines and may insert a box border between\n  // options, so a non-option line is NOT a hard stop — it's skipped as long as\n  // we haven't reached the question line yet. We stop at: the question line (ends\n  // with \"?\"), a blank gap once options have started, or the top of the window.\n  const options: AskOption[] = [];\n  let firstOptionIdx = -1;\n  let sawStateMarker = false;\n  for (let i = footerIdx - 1; i >= 0; i--) {\n    const line = lines[i];\n    const inner = stripBoxGutter(line);\n    const trimmed = inner.trim();\n    if (trimmed.length === 0) {\n      if (options.length === 0) continue; // gap between footer and options\n      break; // blank line above the option block ends it\n    }\n    if (BOX_ONLY_RE.test(line.trim())) continue; // box border between/around options\n    if (ESC_FOOTER_RE.test(line) && options.length === 0) continue;\n    // The question line terminates the option block (it's the row right above\n    // the first option, after any descriptions). Stop before consuming it.\n    if (options.length > 0 && QUESTION_RE.test(trimmed) && !OPTION_RE.test(inner)) break;\n    const m = OPTION_RE.exec(inner);\n    if (m) {\n      const rendered = m[2].trim();\n      if (PERMISSION_LABEL_RE.test(rendered)) return null; // it's a permission gate\n      const { label, marked } = stripStateMarker(rendered);\n      if (marked) sawStateMarker = true;\n      options.unshift({ label, description: \"\" });\n      firstOptionIdx = i;\n    }\n    // else: a wrapped description / continuation line for the option below it —\n    // skip it and keep scanning upward for more options.\n  }\n\n  if (options.length < 2 || firstOptionIdx === -1) return null;\n\n  // Question = nearest non-empty, non-box line above the first option row that\n  // ends with \"?\".\n  let question: string | undefined;\n  for (let i = firstOptionIdx - 1; i >= 0; i--) {\n    const raw = stripBoxGutter(lines[i]);\n    const trimmed = raw.trim();\n    if (trimmed.length === 0) continue;\n    if (BOX_ONLY_RE.test(lines[i].trim())) continue;\n    if (QUESTION_RE.test(trimmed)) {\n      question = trimmed;\n    }\n    break;\n  }\n\n  if (!question) return null;\n\n  // The multi-question \"Ready to submit your answers?\" confirmation IS surfaced\n  // as a real card (Submit answers / Cancel) so the user can tap to confirm —\n  // the multi-question carousel doesn't reliably auto-submit. (Roadmap: robust\n  // auto-submit.) So we no longer reject it here.\n\n  // multiSelect carries two cases that must land in the same place: a picker we\n  // positively recognised as multi-select, and one whose option markers we could\n  // not read. Both are unanswerable by the keystroke path — answersToKeystrokes\n  // throws UnsupportedPromptShapeError before building a keystroke, and the\n  // contract publishes inputMode \"multi\", which released clients already fail\n  // closed on. The contract has no third value for \"shape unknown\", and this is\n  // the bucket that writes zero bytes.\n  return {\n    questions: [{ question, header: \"\", multiSelect: sawStateMarker, options }],\n  };\n}\n\n/**\n * True when the rendered screen is the AskUserQuestion \"Ready to submit your\n * answers?\" confirmation (a question line + a \"Submit answers\" option under the\n * Ask footer). Pure — no I/O. Retained as a classifier (e.g. for analytics);\n * the submit screen now renders as a normal card.\n */\nexport function isSubmitConfirmationScreen(lines: string[]): boolean {\n  let hasFooter = false;\n  let hasSubmitQuestion = false;\n  let hasSubmitOption = false;\n  for (const line of lines) {\n    const inner = stripBoxGutter(line).trim();\n    if (ASK_FOOTER_RE.test(line)) hasFooter = true;\n    if (SUBMIT_QUESTION_RE.test(inner)) hasSubmitQuestion = true;\n    const m = OPTION_RE.exec(inner);\n    if (m && SUBMIT_OPTION_RE.test(m[2].trim())) hasSubmitOption = true;\n  }\n  return hasFooter && hasSubmitQuestion && hasSubmitOption;\n}\n\n/**\n * True when an AskUserQuestion menu is still painted on the rendered screen.\n * Cheaper and far more forgiving than detectQuestionFromScreen: it asks only\n * \"is the picker up?\", so a menu whose options wrap oddly still reads as\n * present. Used to reject an answer for a menu that already closed. Pure.\n */\nexport function isQuestionMenuOnScreen(lines: string[]): boolean {\n  return lines.some((line) => ASK_FOOTER_RE.test(line));\n}\n\n/**\n * Stable content key for de-duping a screen-scraped question against the JSONL\n * detection of the same question (they share no toolUseId). Keyed on the\n * question text + option labels.\n */\nexport function questionContentKey(questions: AskQuestion[]): string {\n  return questions\n    .map((q) => `${q.question} ${q.options.map((o) => o.label).join(\",\")}`)\n    .join(\"::\");\n}\n","// Detect UNSTRUCTURED blocking prompts in the rendered tail — the ones that are\n// neither an AskUserQuestion menu (detectQuestionFromScreen) nor an OSC-777\n// permission gate (scrapePermissionGate): a shell `read -p \"… [y/N]\"`, a CLI\n// picker's `(y/n)`, a numbered menu printed by a plain script, etc.\n//\n// Scraped into the SAME structured shape the permission gate emits, so mobile\n// renders it as an ordinary QuestionCard with tappable options. Each option\n// carries the LITERAL keystroke that answers it (`answerKeys`) so the client\n// stays dumb — it just sends those bytes. This is the ONE net-new detector;\n// everything downstream (event shape, mobile rendering, answer-by-keystroke) is\n// reused.\n//\n// Philosophy mirrors the existing detectors: conservative but false-positive\n// tolerant. A spurious card is mostly recoverable (the user ignores it), though\n// tapping one sends real keystrokes — a numbered card scraped out of prose types\n// its digit in as a prompt; a MISSED prompt strands a blocked PTY. We only fire on a\n// tight set of patterns anchored to the LAST non-blank rendered line.\n\nconst ENTER = \"\\r\";\n\nexport interface ShellPromptOption {\n  /** Positional fallback number (1-based). Authoritative answer is `answerKeys`. */\n  index: number;\n  label: string;\n  /** The exact bytes to send to answer this option, e.g. \"y\\r\" or \"2\\r\". */\n  answerKeys: string;\n}\n\nexport interface ShellPrompt {\n  prompt: string;\n  options: ShellPromptOption[];\n}\n\n// A y/N family prompt: the last line ends in a bracketed/parenthesised yes-no\n// hint. Capture which letter is the default (upper-case) only to keep the label\n// order natural — both options are always offered.\n//   \"Continue? [y/N]\"  \"Overwrite (y/n)?\"  \"Proceed [Y/n] \"\nconst YN_RE = /[[(]\\s*y\\s*\\/\\s*n\\s*[\\])]/i;\n\n// A bare confirmation with no explicit options — Enter is the only sensible\n// answer. \"Press enter to continue\", \"Press any key…\", a trailing \"Continue?\".\nconst PRESS_ENTER_RE = /press\\s+(enter|return|any key)/i;\nconst CONTINUE_RE = /\\bcontinue\\b\\s*\\??\\s*$/i;\n\n// A numbered menu row: optional cursor, \"N. label\" or \"N) label\". Same grammar\n// scrapePermissionGate uses, but here the menu is a plain script's output with\n// no OSC-777 and no Claude box.\nconst NUMBERED_RE = /^\\s*(?:❯|>)?\\s*(\\d+)[.)]\\s+(.+?)\\s*$/;\n\n// Lines that are never a prompt: Claude's own box-drawing / menu chrome. If any\n// of these appear in the tail we defer to the structured detectors and bail —\n// this detector is strictly the fallback for plain shell output.\nconst CLAUDE_CHROME_RE = /Enter to select|Esc to cancel|╭|╰|│.*│/;\nconst BOX_ONLY_RE = /^[\\s│─┌┐└┘├┤┬┴┼╭╮╰╯╱╲=_-]+$/;\n\nfunction lastNonBlank(lines: string[]): { text: string; idx: number } | null {\n  for (let i = lines.length - 1; i >= 0; i--) {\n    const t = lines[i].trim();\n    if (t.length > 0) return { text: t, idx: i };\n  }\n  return null;\n}\n\n/**\n * Scrape an unstructured shell prompt from rendered screen lines. Returns null\n * when the tail isn't a recognised prompt (prose, Claude's own UI, empty).\n * Pure — no I/O.\n */\nexport function detectShellPrompt(lines: string[]): ShellPrompt | null {\n  // Defer to the structured detectors if Claude's TUI is on screen. Those paths\n  // own AskUserQuestion / permission gates; this is plain-shell only.\n  if (lines.some((l) => CLAUDE_CHROME_RE.test(l))) return null;\n\n  const last = lastNonBlank(lines);\n  if (!last) return null;\n\n  // ── y/N family ───────────────────────────────────────────────────\n  if (YN_RE.test(last.text)) {\n    return {\n      prompt: last.text,\n      options: [\n        { index: 1, label: \"Yes\", answerKeys: `y${ENTER}` },\n        { index: 2, label: \"No\", answerKeys: `n${ENTER}` },\n      ],\n    };\n  }\n\n  // ── numbered menu ────────────────────────────────────────────────\n  // Fire when the last line is itself a numbered row (menu just finished\n  // printing) OR when a bare \"Press enter to confirm\"-style footer trails a\n  // numbered block (Codex's \"Hooks need review\" trust dialog paints its options\n  // above a \"Press enter to confirm or esc to go back\" line). The block must be\n  // CONTIGUOUS — a real menu has no prose between rows, unlike a numbered list\n  // in ordinary prose (e.g. an explanation with \"1. ...\" / \"2. ...\" points\n  // separated by paragraphs) — and must reach the true tail of the screen, not\n  // a numbered block buried under trailing prose.\n  const lastNumberedIdx = (() => {\n    let i = last.idx;\n    if (!NUMBERED_RE.test(lines[i])) {\n      // Allow exactly one trailing non-numbered footer line (the bare\n      // \"Press enter to confirm\" case) between the tail and the block.\n      if (i > 0 && (PRESS_ENTER_RE.test(lines[i].trim()) || CONTINUE_RE.test(lines[i].trim()))) {\n        i--;\n      } else {\n        return -1;\n      }\n    }\n    while (i >= 0 && !NUMBERED_RE.test(lines[i]) && lines[i].trim().length === 0) i--;\n    return i >= 0 && NUMBERED_RE.test(lines[i]) ? i : -1;\n  })();\n  if (lastNumberedIdx >= 0) {\n    const options: ShellPromptOption[] = [];\n    let firstRow = lastNumberedIdx;\n    for (let i = lastNumberedIdx; i >= 0; i--) {\n      const m = NUMBERED_RE.exec(lines[i]);\n      if (!m) break; // contiguous block ends at the first non-numbered line\n      const num = Number.parseInt(m[1], 10);\n      if (!Number.isFinite(num)) break;\n      options.unshift({ index: num, label: m[2].trim(), answerKeys: `${num}${ENTER}` });\n      firstRow = i;\n    }\n    // A real menu enumerates 1..n. A numbered block scraped out of the middle\n    // of prose does not: an assistant message listing open questions 1-8 wraps\n    // item 5 onto a continuation line, which ends the contiguous run above\n    // item 6 — so the \"menu\" starts at 6, and answering it types \"6\\r\" into\n    // the session as a prompt. Trade-off: this also rejects a real menu whose\n    // first rows scrolled off screen; widen only if that is ever observed.\n    if (options.length >= 2 && options.every((o, i) => o.index === i + 1)) {\n      // Prompt = nearest non-chrome line above the first numbered row.\n      let prompt = \"\";\n      for (let i = firstRow - 1; i >= 0; i--) {\n        const t = lines[i].trim();\n        if (t.length === 0 || BOX_ONLY_RE.test(t)) continue;\n        prompt = t;\n        break;\n      }\n      return { prompt: prompt || \"Select an option\", options };\n    }\n  }\n\n  // ── bare confirmation (Enter only) ───────────────────────────────\n  if (PRESS_ENTER_RE.test(last.text) || CONTINUE_RE.test(last.text)) {\n    return {\n      prompt: last.text,\n      options: [{ index: 1, label: \"Continue\", answerKeys: ENTER }],\n    };\n  }\n\n  return null;\n}\n","import type { PermissionGate, PermissionOption } from \"./detectPermissionGate\";\n\n// Claude Code's blocking startup choices — the workspace-trust gate above all —\n// are a vertical list with NO leading numbers:\n//\n//   Accessing workspace:\n//   C:\\Users\\PC\\Desktop\\dev\\autokitteh\n//   Quick safety check: Is this a project you created or one you trust? …\n//   Security guide\n//   ❯ No, exit\n//     Yes, I trust this folder\n//   Enter to confirm · Esc to cancel\n//\n// `scrapePermissionGate` requires `N.` on every row, so it returns null here and\n// every detector built on it refuses the screen. Nothing broadcasts a card, the\n// raw text falls through to the transcript, and the only way to answer from a\n// phone is raw keys — on a prompt that grants read, edit and execute rights over\n// a directory. Codex already raises its equivalent as a card\n// (`codexGateAnswers.ts`); this is the Claude side of that.\n//\n// Measured against Claude Code v2.1.278 by clearing `hasTrustDialogAccepted` for\n// a scratch project: the cursor starts on the FIRST option, `\\x1b[B` moves it\n// down one row and `\\x1b[A` moves it back up, and `\\r` confirms whatever the\n// cursor is on. A digit does nothing — which is why these options carry explicit\n// `answerKeys` rather than relying on the index.\n\n/** Footer unique to this family. \"Enter to select\" is an AskUserQuestion menu. */\nconst CONFIRM_FOOTER_RE = /enter to confirm/i;\nconst ASK_MENU_FOOTER_RE = /Enter to select/i;\n\n/** A row carrying the selection cursor, in either the Unicode or ASCII form. */\nconst CURSOR_ROW_RE = /^(\\s*)([❯›>])(\\s+)(\\S.*?)\\s*$/;\n/** Any numbered row — those belong to `detectGateScreen`, not here. */\nconst NUMBERED_RE = /^\\s*(?:[❯›>]\\s*)?\\d+\\.\\s+\\S/;\n\nconst DOWN = \"\\x1b[B\";\nconst UP = \"\\x1b[A\";\n\n/**\n * Keystrokes that move the selection from `cursor` to `target` and confirm.\n * Pure arithmetic on row offsets — the list is vertical and wraps nowhere that\n * matters, so the shortest path is a straight run of arrows.\n */\nexport function startupChoiceAnswerKeys(cursor: number, target: number): string {\n  const delta = target - cursor;\n  const step = delta > 0 ? DOWN : UP;\n  return step.repeat(Math.abs(delta)) + \"\\r\";\n}\n\n/**\n * Claim an unnumbered startup choice from rendered screen lines.\n *\n * The block is anchored on the cursor row: options are the contiguous rows whose\n * text begins at exactly the cursor row's text column. That column test is what\n * separates the options from the prose above them — \"Security guide\" sits one\n * column to the left of \"No, exit\", because the cursor glyph and its trailing\n * space are what indent the labels. Returns null unless the confirm footer is\n * present and at least two options share that column. Pure — no I/O.\n */\nexport function detectStartupChoiceGate(lines: string[]): PermissionGate | null {\n  if (lines.some((l) => ASK_MENU_FOOTER_RE.test(l))) return null;\n\n  const footer = lines.findIndex((l) => CONFIRM_FOOTER_RE.test(l));\n  if (footer < 0) return null;\n\n  // Exactly one cursor row, and it must be above the footer.\n  const cursorRows = lines\n    .map((l, i) => (i < footer && CURSOR_ROW_RE.test(l) ? i : -1))\n    .filter((i) => i >= 0);\n  if (cursorRows.length !== 1) return null;\n  const cursorRow = cursorRows[0];\n\n  const m = CURSOR_ROW_RE.exec(lines[cursorRow]);\n  if (!m) return null;\n  // Numbered blocks are detectGateScreen's; never claim one here.\n  if (NUMBERED_RE.test(lines[cursorRow])) return null;\n\n  const labelColumn = m[1].length + m[2].length + m[3].length;\n  const rowLabel = (line: string): string | null => {\n    if (NUMBERED_RE.test(line)) return null;\n    const indent = line.length - line.trimStart().length;\n    if (indent !== labelColumn) return null;\n    const label = line.trim();\n    return label.length > 0 ? label : null;\n  };\n\n  // Walk out from the cursor row while rows keep starting at the label column.\n  const rows: { row: number; label: string }[] = [{ row: cursorRow, label: m[4] }];\n  for (let i = cursorRow - 1; i >= 0; i--) {\n    const label = rowLabel(lines[i]);\n    if (label === null) break;\n    rows.unshift({ row: i, label });\n  }\n  for (let i = cursorRow + 1; i < footer; i++) {\n    const label = rowLabel(lines[i]);\n    if (label === null) break;\n    rows.push({ row: i, label });\n  }\n  if (rows.length < 2) return null;\n\n  const cursorIndex = rows.findIndex((r) => r.row === cursorRow) + 1;\n  const options: PermissionOption[] = rows.map((r, i) => ({\n    index: i + 1,\n    label: r.label,\n    answerKeys: startupChoiceAnswerKeys(cursorIndex, i + 1),\n  }));\n\n  // Prompt = nearest non-empty line above the block that is not the frame.\n  let prompt: string | undefined;\n  for (let i = rows[0].row - 1; i >= 0; i--) {\n    const t = lines[i].trim();\n    if (t.length === 0) continue;\n    if (/^[\\s─━-]+$/.test(t)) continue;\n    prompt = t;\n    break;\n  }\n\n  return {\n    ...(prompt ? { prompt } : {}),\n    options,\n    cursor: cursorIndex,\n  };\n}\n","// Build the keystrokes that answer a permission gate by its ON-SCREEN number.\n//\n// Permission gates show options like \"2. Yes / 3. No\" — the visible number is\n// NOT a stable 1-based index, so we send the actual number + Enter, never a\n// down-arrow count (that's the AskUserQuestion path, answersToKeystrokes).\n// Sent via the existing `/api/sessions/:id/input` { keys } route → sendKeys\n// (raw bytes), NOT bracketed-paste `/input` text (no blanket \\n).\n//\n// Mobile already does this directly (`POST /input { keys: \\`${index}\\r\\` }`),\n// so this helper exists for the server-side contract + tests.\n\nconst ENTER = \"\\r\";\n\nexport function permissionAnswerKeys(index: number): string {\n  if (!Number.isInteger(index) || index < 0) {\n    throw new Error(`Invalid permission option index: ${index}`);\n  }\n  return `${index}${ENTER}`;\n}\n\n// The inverse: do these raw keystroke bytes answer THIS gate?\n//\n// Used to close a gate the moment its answer is written to the PTY, instead of\n// waiting for the detector to notice the box is gone — after an approved tool\n// starts running there is no end-of-turn OSC and no ╭/❯ prompt marker, so the\n// detector's close condition can't fire until the whole turn ends.\n//\n// Deliberately strict, exact-match only. A false positive retires a LIVE gate\n// on every connected client, which is worse than the lateness this fixes, so\n// anything ambiguous stays for the detector to resolve: arrow keys (cursor\n// moves, answers nothing), a bare Enter (accepts the highlight, but we don't\n// track which option Claude has highlighted), a number this gate doesn't\n// offer, and a gate whose options haven't painted yet (`options: []`) all\n// return false.\nexport function isPermissionAnswer(\n  gate: { options: { index: number; answerKeys?: string }[] },\n  keys: string,\n): boolean {\n  return gate.options.some((o) => keys === (o.answerKeys ?? permissionAnswerKeys(o.index)));\n}\n","var libheif=(()=>{var xe=Object.create;var wA=Object.defineProperty;var Le=Object.getOwnPropertyDescriptor;var ye=Object.getOwnPropertyNames;var Oe=Object.getPrototypeOf,Je=Object.prototype.hasOwnProperty;var be=(f=>typeof require!=\"undefined\"?require:typeof Proxy!=\"undefined\"?new Proxy(f,{get:(N,y)=>(typeof require!=\"undefined\"?require:N)[y]}):f)(function(f){if(typeof require!=\"undefined\")return require.apply(this,arguments);throw Error('Dynamic require of \"'+f+'\" is not supported')});var Ej=(f,N)=>()=>(N||f((N={exports:{}}).exports,N),N.exports),De=(f,N)=>{for(var y in N)wA(f,y,{get:N[y],enumerable:!0})},Zj=(f,N,y,K)=>{if(N&&typeof N==\"object\"||typeof N==\"function\")for(let r of ye(N))!Je.call(f,r)&&r!==y&&wA(f,r,{get:()=>N[r],enumerable:!(K=Le(N,r))||K.enumerable});return f};var we=(f,N,y)=>(y=f!=null?xe(Oe(f)):{},Zj(N||!f||!f.__esModule?wA(y,\"default\",{value:f,enumerable:!0}):y,f)),Ce=f=>Zj(wA({},\"__esModule\",{value:!0}),f);var Qj=(()=>{for(var f=new Uint8Array(128),N=0;N<64;N++)f[N<26?N+65:N<52?N+71:N<62?N-4:N*4-205]=N;return y=>{for(var K=y.length,r=new Uint8Array((K-(y[K-1]==\"=\")-(y[K-2]==\"=\"))*3/4|0),z=0,AA=0;z<K;){var sj=f[y.charCodeAt(z++)],qA=f[y.charCodeAt(z++)],jA=f[y.charCodeAt(z++)],_A=f[y.charCodeAt(z++)];r[AA++]=sj<<2|qA>>4,r[AA++]=qA<<4|jA>>2,r[AA++]=jA<<6|_A}return r}})();var j6=Ej((v_,A6)=>{A6.exports={}});var e6=Ej((F_,t6)=>{t6.exports={}});var l6=Ej((k6,nj)=>{var r6=(()=>{var f,N=typeof document!=\"undefined\"?(f=document.currentScript)==null?void 0:f.src:void 0;return typeof __filename!=\"undefined\"&&(N||(N=__filename)),function(y={}){var K,r=y,z,AA,sj=new Promise((A,j)=>{z=A,AA=j}),qA=typeof window==\"object\",jA=typeof importScripts==\"function\",_A=typeof process==\"object\"&&typeof process.versions==\"object\"&&typeof process.versions.node==\"string\",Gj=Object.assign({},r),dj=[],CA=\"./this.program\",$j=(A,j)=>{throw j},M=\"\";function a6(A){return r.locateFile?r.locateFile(A,M):M+A}var aA,SA,hA;if(_A){var PA=j6(),uj=e6();M=__dirname+\"/\",aA=(A,j)=>(A=RA(A)?new URL(A):uj.normalize(A),PA.readFileSync(A,j?void 0:\"utf8\")),hA=A=>{var j=aA(A,!0);return j.buffer||(j=new Uint8Array(j)),j},SA=(A,j,t,e=!0)=>{A=RA(A)?new URL(A):uj.normalize(A),PA.readFile(A,e?void 0:\"utf8\",(l,_)=>{l?t(l):j(e?_.buffer:_)})},!r.thisProgram&&process.argv.length>1&&(CA=process.argv[1].replace(/\\\\/g,\"/\")),dj=process.argv.slice(2),$j=(A,j)=>{throw process.exitCode=A,j}}else(qA||jA)&&(jA?M=self.location.href:typeof document!=\"undefined\"&&document.currentScript&&(M=document.currentScript.src),N&&(M=N),M.startsWith(\"blob:\")?M=\"\":M=M.substr(0,M.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1),aA=A=>{var j=new XMLHttpRequest;return j.open(\"GET\",A,!1),j.send(null),j.responseText},jA&&(hA=A=>{var j=new XMLHttpRequest;return j.open(\"GET\",A,!1),j.responseType=\"arraybuffer\",j.send(null),new Uint8Array(j.response)}),SA=(A,j,t)=>{if(RA(A)){var e=new XMLHttpRequest;e.open(\"GET\",A,!0),e.responseType=\"arraybuffer\",e.onload=()=>{if(e.status==200||e.status==0&&e.response){j(e.response);return}t()},e.onerror=t,e.send(null);return}fetch(A,{credentials:\"same-origin\"}).then(l=>l.ok?l.arrayBuffer():Promise.reject(new Error(l.status+\" : \"+l.url))).then(j,t)});var MA=r.print||console.log.bind(console),oA=r.printErr||console.error.bind(console);Object.assign(r,Gj),Gj=null,r.arguments&&(dj=r.arguments),r.thisProgram&&(CA=r.thisProgram),r.quit&&($j=r.quit);var KA;r.wasmBinary&&(KA=r.wasmBinary);var mA,pj=!1,o6,J,D,R,iA,H,m,Hj,cj;function qj(){var A=mA.buffer;r.HEAP8=J=new Int8Array(A),r.HEAP16=R=new Int16Array(A),r.HEAPU8=D=new Uint8Array(A),r.HEAPU16=iA=new Uint16Array(A),r.HEAP32=H=new Int32Array(A),r.HEAPU32=m=new Uint32Array(A),r.HEAPF32=Hj=new Float32Array(A),r.HEAPF64=cj=new Float64Array(A)}var hj=[],mj=[],Nj=[],i6=!1;function E6(){if(r.preRun)for(typeof r.preRun==\"function\"&&(r.preRun=[r.preRun]);r.preRun.length;)G6(r.preRun.shift());VA(hj)}function n6(){i6=!0,!r.noFSInit&&!k.init.initialized&&k.init(),k.ignorePermissions=!1,W.init(),VA(mj)}function s6(){if(r.postRun)for(typeof r.postRun==\"function\"&&(r.postRun=[r.postRun]);r.postRun.length;)$6(r.postRun.shift());VA(Nj)}function G6(A){hj.unshift(A)}function d6(A){mj.unshift(A)}function $6(A){Nj.unshift(A)}var tA=0,TA=null,EA=null;function Ke(A){return A}function XA(A){var j;tA++,(j=r.monitorRunDependencies)==null||j.call(r,tA)}function NA(A){var j;if(tA--,(j=r.monitorRunDependencies)==null||j.call(r,tA),tA==0&&(TA!==null&&(clearInterval(TA),TA=null),EA)){var t=EA;EA=null,t()}}function nA(A){var j;(j=r.onAbort)==null||j.call(r,A),A=\"Aborted(\"+A+\")\",oA(A),pj=!0,o6=1,A+=\". Build with -sASSERTIONS for more info.\";var t=new WebAssembly.RuntimeError(A);throw AA(t),t}var u6=\"data:application/octet-stream;base64,\",p6=A=>A.startsWith(u6),RA=A=>A.startsWith(\"file://\");function H6(){var A=\"libheif.wasm\";return p6(A)?A:a6(A)}var fA;function c6(A){if(A==fA&&KA)return new Uint8Array(KA);if(hA)return hA(A);throw'sync fetching of the wasm failed: you can preload it to Module[\"wasmBinary\"] manually, or emcc.py will do that for you when generating HTML (but not JS)'}function q6(A,j){var t,e=c6(A);t=new WebAssembly.Module(e);var l=new WebAssembly.Instance(t,j);return[l,t]}function h6(){return{a:fe}}function m6(){var A=h6();function j(e,l){return B=e.exports,mA=B.Q,qj(),Dj=B.T,d6(B.R),NA(\"wasm-instantiate\"),B}if(XA(\"wasm-instantiate\"),r.instantiateWasm)try{return r.instantiateWasm(A,j)}catch(e){oA(`Module.instantiateWasm callback failed with error: ${e}`),AA(e)}fA||(fA=H6());var t=q6(fA,A);return j(t[0])}var h,b,VA=A=>{for(;A.length>0;)A.shift()(r)},Te=r.noExitRuntime||!0,fj=typeof TextDecoder!=\"undefined\"?new TextDecoder(\"utf8\"):void 0,kA=(A,j,t)=>{for(var e=j+t,l=j;A[l]&&!(l>=e);)++l;if(l-j>16&&A.buffer&&fj)return fj.decode(A.subarray(j,l));for(var _=\"\";j<l;){var a=A[j++];if(!(a&128)){_+=String.fromCharCode(a);continue}var o=A[j++]&63;if((a&224)==192){_+=String.fromCharCode((a&31)<<6|o);continue}var i=A[j++]&63;if((a&240)==224?a=(a&15)<<12|o<<6|i:a=(a&7)<<18|o<<12|i<<6|A[j++]&63,a<65536)_+=String.fromCharCode(a);else{var n=a-65536;_+=String.fromCharCode(55296|n>>10,56320|n&1023)}}return _},eA=(A,j)=>A?kA(D,A,j):\"\",N6=(A,j,t,e)=>{nA(`Assertion failed: ${eA(A)}, at: `+[j?eA(j):\"unknown filename\",t,e?eA(e):\"unknown function\"])};class f6{constructor(j){this.excPtr=j,this.ptr=j-24}set_type(j){m[this.ptr+4>>2]=j}get_type(){return m[this.ptr+4>>2]}set_destructor(j){m[this.ptr+8>>2]=j}get_destructor(){return m[this.ptr+8>>2]}set_caught(j){j=j?1:0,J[this.ptr+12]=j}get_caught(){return J[this.ptr+12]!=0}set_rethrown(j){j=j?1:0,J[this.ptr+13]=j}get_rethrown(){return J[this.ptr+13]!=0}init(j,t){this.set_adjusted_ptr(0),this.set_type(j),this.set_destructor(t)}set_adjusted_ptr(j){m[this.ptr+16>>2]=j}get_adjusted_ptr(){return m[this.ptr+16>>2]}get_exception_ptr(){var j=Fe(this.get_type());if(j)return m[this.excPtr>>2];var t=this.get_adjusted_ptr();return t!==0?t:this.excPtr}}var vj=0,v6=0,F6=(A,j,t)=>{var e=new f6(A);throw e.init(j,t),vj=A,v6++,vj};function vA(){var A=H[+w.varargs>>2];return w.varargs+=4,A}var lA=vA,I={isAbs:A=>A.charAt(0)===\"/\",splitPath:A=>{var j=/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;return j.exec(A).slice(1)},normalizeArray:(A,j)=>{for(var t=0,e=A.length-1;e>=0;e--){var l=A[e];l===\".\"?A.splice(e,1):l===\"..\"?(A.splice(e,1),t++):t&&(A.splice(e,1),t--)}if(j)for(;t;t--)A.unshift(\"..\");return A},normalize:A=>{var j=I.isAbs(A),t=A.substr(-1)===\"/\";return A=I.normalizeArray(A.split(\"/\").filter(e=>!!e),!j).join(\"/\"),!A&&!j&&(A=\".\"),A&&t&&(A+=\"/\"),(j?\"/\":\"\")+A},dirname:A=>{var j=I.splitPath(A),t=j[0],e=j[1];return!t&&!e?\".\":(e&&(e=e.substr(0,e.length-1)),t+e)},basename:A=>{if(A===\"/\")return\"/\";A=I.normalize(A),A=A.replace(/\\/$/,\"\");var j=A.lastIndexOf(\"/\");return j===-1?A:A.substr(j+1)},join:(...A)=>I.normalize(A.join(\"/\")),join2:(A,j)=>I.normalize(A+\"/\"+j)},I6=()=>{if(typeof crypto==\"object\"&&typeof crypto.getRandomValues==\"function\")return e=>crypto.getRandomValues(e);if(_A)try{var A=be(\"crypto\"),j=A.randomFillSync;if(j)return e=>A.randomFillSync(e);var t=A.randomBytes;return e=>(e.set(t(e.byteLength)),e)}catch{}nA(\"initRandomDevice\")},Fj=A=>(Fj=I6())(A),V={resolve:(...A)=>{for(var j=\"\",t=!1,e=A.length-1;e>=-1&&!t;e--){var l=e>=0?A[e]:k.cwd();if(typeof l!=\"string\")throw new TypeError(\"Arguments to path.resolve must be strings\");if(!l)return\"\";j=l+\"/\"+j,t=I.isAbs(l)}return j=I.normalizeArray(j.split(\"/\").filter(_=>!!_),!t).join(\"/\"),(t?\"/\":\"\")+j||\".\"},relative:(A,j)=>{A=V.resolve(A).substr(1),j=V.resolve(j).substr(1);function t(n){for(var s=0;s<n.length&&n[s]===\"\";s++);for(var u=n.length-1;u>=0&&n[u]===\"\";u--);return s>u?[]:n.slice(s,u-s+1)}for(var e=t(A.split(\"/\")),l=t(j.split(\"/\")),_=Math.min(e.length,l.length),a=_,o=0;o<_;o++)if(e[o]!==l[o]){a=o;break}for(var i=[],o=a;o<e.length;o++)i.push(\"..\");return i=i.concat(l.slice(a)),i.join(\"/\")}},UA=[],YA=A=>{for(var j=0,t=0;t<A.length;++t){var e=A.charCodeAt(t);e<=127?j++:e<=2047?j+=2:e>=55296&&e<=57343?(j+=4,++t):j+=3}return j},zA=(A,j,t,e)=>{if(!(e>0))return 0;for(var l=t,_=t+e-1,a=0;a<A.length;++a){var o=A.charCodeAt(a);if(o>=55296&&o<=57343){var i=A.charCodeAt(++a);o=65536+((o&1023)<<10)|i&1023}if(o<=127){if(t>=_)break;j[t++]=o}else if(o<=2047){if(t+1>=_)break;j[t++]=192|o>>6,j[t++]=128|o&63}else if(o<=65535){if(t+2>=_)break;j[t++]=224|o>>12,j[t++]=128|o>>6&63,j[t++]=128|o&63}else{if(t+3>=_)break;j[t++]=240|o>>18,j[t++]=128|o>>12&63,j[t++]=128|o>>6&63,j[t++]=128|o&63}}return j[t]=0,t-l};function FA(A,j,t){var e=t>0?t:YA(A)+1,l=new Array(e),_=zA(A,l,0,l.length);return j&&(l.length=_),l}var g6=()=>{if(!UA.length){var A=null;if(_A){var j=256,t=Buffer.alloc(j),e=0,l=process.stdin.fd;try{e=PA.readSync(l,t,0,j)}catch(_){if(_.toString().includes(\"EOF\"))e=0;else throw _}e>0&&(A=t.slice(0,e).toString(\"utf-8\"))}else typeof window!=\"undefined\"&&typeof window.prompt==\"function\"&&(A=window.prompt(\"Input: \"),A!==null&&(A+=`\n`));if(!A)return null;UA=FA(A,!0)}return UA.shift()},W={ttys:[],init(){},shutdown(){},register(A,j){W.ttys[A]={input:[],output:[],ops:j},k.registerDevice(A,W.stream_ops)},stream_ops:{open(A){var j=W.ttys[A.node.rdev];if(!j)throw new k.ErrnoError(43);A.tty=j,A.seekable=!1},close(A){A.tty.ops.fsync(A.tty)},fsync(A){A.tty.ops.fsync(A.tty)},read(A,j,t,e,l){if(!A.tty||!A.tty.ops.get_char)throw new k.ErrnoError(60);for(var _=0,a=0;a<e;a++){var o;try{o=A.tty.ops.get_char(A.tty)}catch{throw new k.ErrnoError(29)}if(o===void 0&&_===0)throw new k.ErrnoError(6);if(o==null)break;_++,j[t+a]=o}return _&&(A.node.timestamp=Date.now()),_},write(A,j,t,e,l){if(!A.tty||!A.tty.ops.put_char)throw new k.ErrnoError(60);try{for(var _=0;_<e;_++)A.tty.ops.put_char(A.tty,j[t+_])}catch{throw new k.ErrnoError(29)}return e&&(A.node.timestamp=Date.now()),_}},default_tty_ops:{get_char(A){return g6()},put_char(A,j){j===null||j===10?(MA(kA(A.output,0)),A.output=[]):j!=0&&A.output.push(j)},fsync(A){A.output&&A.output.length>0&&(MA(kA(A.output,0)),A.output=[])},ioctl_tcgets(A){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(A,j,t){return 0},ioctl_tiocgwinsz(A){return[24,80]}},default_tty1_ops:{put_char(A,j){j===null||j===10?(oA(kA(A.output,0)),A.output=[]):j!=0&&A.output.push(j)},fsync(A){A.output&&A.output.length>0&&(oA(kA(A.output,0)),A.output=[])}}},Ij=A=>{nA()},q={ops_table:null,mount(A){return q.createNode(null,\"/\",16895,0)},createNode(A,j,t,e){if(k.isBlkdev(t)||k.isFIFO(t))throw new k.ErrnoError(63);q.ops_table||(q.ops_table={dir:{node:{getattr:q.node_ops.getattr,setattr:q.node_ops.setattr,lookup:q.node_ops.lookup,mknod:q.node_ops.mknod,rename:q.node_ops.rename,unlink:q.node_ops.unlink,rmdir:q.node_ops.rmdir,readdir:q.node_ops.readdir,symlink:q.node_ops.symlink},stream:{llseek:q.stream_ops.llseek}},file:{node:{getattr:q.node_ops.getattr,setattr:q.node_ops.setattr},stream:{llseek:q.stream_ops.llseek,read:q.stream_ops.read,write:q.stream_ops.write,allocate:q.stream_ops.allocate,mmap:q.stream_ops.mmap,msync:q.stream_ops.msync}},link:{node:{getattr:q.node_ops.getattr,setattr:q.node_ops.setattr,readlink:q.node_ops.readlink},stream:{}},chrdev:{node:{getattr:q.node_ops.getattr,setattr:q.node_ops.setattr},stream:k.chrdev_stream_ops}});var l=k.createNode(A,j,t,e);return k.isDir(l.mode)?(l.node_ops=q.ops_table.dir.node,l.stream_ops=q.ops_table.dir.stream,l.contents={}):k.isFile(l.mode)?(l.node_ops=q.ops_table.file.node,l.stream_ops=q.ops_table.file.stream,l.usedBytes=0,l.contents=null):k.isLink(l.mode)?(l.node_ops=q.ops_table.link.node,l.stream_ops=q.ops_table.link.stream):k.isChrdev(l.mode)&&(l.node_ops=q.ops_table.chrdev.node,l.stream_ops=q.ops_table.chrdev.stream),l.timestamp=Date.now(),A&&(A.contents[j]=l,A.timestamp=l.timestamp),l},getFileDataAsTypedArray(A){return A.contents?A.contents.subarray?A.contents.subarray(0,A.usedBytes):new Uint8Array(A.contents):new Uint8Array(0)},expandFileStorage(A,j){var t=A.contents?A.contents.length:0;if(!(t>=j)){var e=1048576;j=Math.max(j,t*(t<e?2:1.125)>>>0),t!=0&&(j=Math.max(j,256));var l=A.contents;A.contents=new Uint8Array(j),A.usedBytes>0&&A.contents.set(l.subarray(0,A.usedBytes),0)}},resizeFileStorage(A,j){if(A.usedBytes!=j)if(j==0)A.contents=null,A.usedBytes=0;else{var t=A.contents;A.contents=new Uint8Array(j),t&&A.contents.set(t.subarray(0,Math.min(j,A.usedBytes))),A.usedBytes=j}},node_ops:{getattr(A){var j={};return j.dev=k.isChrdev(A.mode)?A.id:1,j.ino=A.id,j.mode=A.mode,j.nlink=1,j.uid=0,j.gid=0,j.rdev=A.rdev,k.isDir(A.mode)?j.size=4096:k.isFile(A.mode)?j.size=A.usedBytes:k.isLink(A.mode)?j.size=A.link.length:j.size=0,j.atime=new Date(A.timestamp),j.mtime=new Date(A.timestamp),j.ctime=new Date(A.timestamp),j.blksize=4096,j.blocks=Math.ceil(j.size/j.blksize),j},setattr(A,j){j.mode!==void 0&&(A.mode=j.mode),j.timestamp!==void 0&&(A.timestamp=j.timestamp),j.size!==void 0&&q.resizeFileStorage(A,j.size)},lookup(A,j){throw k.genericErrors[44]},mknod(A,j,t,e){return q.createNode(A,j,t,e)},rename(A,j,t){if(k.isDir(A.mode)){var e;try{e=k.lookupNode(j,t)}catch{}if(e)for(var l in e.contents)throw new k.ErrnoError(55)}delete A.parent.contents[A.name],A.parent.timestamp=Date.now(),A.name=t,j.contents[t]=A,j.timestamp=A.parent.timestamp},unlink(A,j){delete A.contents[j],A.timestamp=Date.now()},rmdir(A,j){var t=k.lookupNode(A,j);for(var e in t.contents)throw new k.ErrnoError(55);delete A.contents[j],A.timestamp=Date.now()},readdir(A){var j=[\".\",\"..\"];for(var t of Object.keys(A.contents))j.push(t);return j},symlink(A,j,t){var e=q.createNode(A,j,41471,0);return e.link=t,e},readlink(A){if(!k.isLink(A.mode))throw new k.ErrnoError(28);return A.link}},stream_ops:{read(A,j,t,e,l){var _=A.node.contents;if(l>=A.node.usedBytes)return 0;var a=Math.min(A.node.usedBytes-l,e);if(a>8&&_.subarray)j.set(_.subarray(l,l+a),t);else for(var o=0;o<a;o++)j[t+o]=_[l+o];return a},write(A,j,t,e,l,_){if(j.buffer===J.buffer&&(_=!1),!e)return 0;var a=A.node;if(a.timestamp=Date.now(),j.subarray&&(!a.contents||a.contents.subarray)){if(_)return a.contents=j.subarray(t,t+e),a.usedBytes=e,e;if(a.usedBytes===0&&l===0)return a.contents=j.slice(t,t+e),a.usedBytes=e,e;if(l+e<=a.usedBytes)return a.contents.set(j.subarray(t,t+e),l),e}if(q.expandFileStorage(a,l+e),a.contents.subarray&&j.subarray)a.contents.set(j.subarray(t,t+e),l);else for(var o=0;o<e;o++)a.contents[l+o]=j[t+o];return a.usedBytes=Math.max(a.usedBytes,l+e),e},llseek(A,j,t){var e=j;if(t===1?e+=A.position:t===2&&k.isFile(A.node.mode)&&(e+=A.node.usedBytes),e<0)throw new k.ErrnoError(28);return e},allocate(A,j,t){q.expandFileStorage(A.node,j+t),A.node.usedBytes=Math.max(A.node.usedBytes,j+t)},mmap(A,j,t,e,l){if(!k.isFile(A.node.mode))throw new k.ErrnoError(43);var _,a,o=A.node.contents;if(!(l&2)&&o.buffer===J.buffer)a=!1,_=o.byteOffset;else{if((t>0||t+j<o.length)&&(o.subarray?o=o.subarray(t,t+j):o=Array.prototype.slice.call(o,t,t+j)),a=!0,_=Ij(j),!_)throw new k.ErrnoError(48);J.set(o,_)}return{ptr:_,allocated:a}},msync(A,j,t,e,l){return q.stream_ops.write(A,j,0,e,t,!1),0}}},x6=(A,j,t,e)=>{var l=e?\"\":`al ${A}`;SA(A,_=>{j(new Uint8Array(_)),l&&NA(l)},_=>{if(t)t();else throw`Loading data file \"${A}\" failed.`}),l&&XA(l)},L6=(A,j,t,e,l,_)=>{k.createDataFile(A,j,t,e,l,_)},y6=r.preloadPlugins||[],O6=(A,j,t,e)=>{typeof Browser!=\"undefined\"&&Browser.init();var l=!1;return y6.forEach(_=>{l||_.canHandle(j)&&(_.handle(A,j,t,e),l=!0)}),l},J6=(A,j,t,e,l,_,a,o,i,n)=>{var s=j?V.resolve(I.join2(A,j)):A,u=`cp ${s}`;function d(G){function p(g){n==null||n(),o||L6(A,j,g,e,l,i),_==null||_(),NA(u)}O6(G,s,p,()=>{a==null||a(),NA(u)})||p(G)}XA(u),typeof t==\"string\"?x6(t,d,a):d(t)},b6=A=>{var j={r:0,\"r+\":2,w:577,\"w+\":578,a:1089,\"a+\":1090},t=j[A];if(typeof t==\"undefined\")throw new Error(`Unknown file open mode: ${A}`);return t},WA=(A,j)=>{var t=0;return A&&(t|=365),j&&(t|=146),t},k={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:\"/\",initialized:!1,ignorePermissions:!0,ErrnoError:class{constructor(A){this.name=\"ErrnoError\",this.errno=A}},genericErrors:{},filesystems:null,syncFSRequests:0,FSStream:class{constructor(){this.shared={}}get object(){return this.node}set object(A){this.node=A}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(A){this.shared.flags=A}get position(){return this.shared.position}set position(A){this.shared.position=A}},FSNode:class{constructor(A,j,t,e){A||(A=this),this.parent=A,this.mount=A.mount,this.mounted=null,this.id=k.nextInode++,this.name=j,this.mode=t,this.node_ops={},this.stream_ops={},this.rdev=e,this.readMode=365,this.writeMode=146}get read(){return(this.mode&this.readMode)===this.readMode}set read(A){A?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(A){A?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return k.isDir(this.mode)}get isDevice(){return k.isChrdev(this.mode)}},lookupPath(A,j={}){if(A=V.resolve(A),!A)return{path:\"\",node:null};var t={follow_mount:!0,recurse_count:0};if(j=Object.assign(t,j),j.recurse_count>8)throw new k.ErrnoError(32);for(var e=A.split(\"/\").filter(u=>!!u),l=k.root,_=\"/\",a=0;a<e.length;a++){var o=a===e.length-1;if(o&&j.parent)break;if(l=k.lookupNode(l,e[a]),_=I.join2(_,e[a]),k.isMountpoint(l)&&(!o||o&&j.follow_mount)&&(l=l.mounted.root),!o||j.follow)for(var i=0;k.isLink(l.mode);){var n=k.readlink(_);_=V.resolve(I.dirname(_),n);var s=k.lookupPath(_,{recurse_count:j.recurse_count+1});if(l=s.node,i++>40)throw new k.ErrnoError(32)}}return{path:_,node:l}},getPath(A){for(var j;;){if(k.isRoot(A)){var t=A.mount.mountpoint;return j?t[t.length-1]!==\"/\"?`${t}/${j}`:t+j:t}j=j?`${A.name}/${j}`:A.name,A=A.parent}},hashName(A,j){for(var t=0,e=0;e<j.length;e++)t=(t<<5)-t+j.charCodeAt(e)|0;return(A+t>>>0)%k.nameTable.length},hashAddNode(A){var j=k.hashName(A.parent.id,A.name);A.name_next=k.nameTable[j],k.nameTable[j]=A},hashRemoveNode(A){var j=k.hashName(A.parent.id,A.name);if(k.nameTable[j]===A)k.nameTable[j]=A.name_next;else for(var t=k.nameTable[j];t;){if(t.name_next===A){t.name_next=A.name_next;break}t=t.name_next}},lookupNode(A,j){var t=k.mayLookup(A);if(t)throw new k.ErrnoError(t);for(var e=k.hashName(A.id,j),l=k.nameTable[e];l;l=l.name_next){var _=l.name;if(l.parent.id===A.id&&_===j)return l}return k.lookup(A,j)},createNode(A,j,t,e){var l=new k.FSNode(A,j,t,e);return k.hashAddNode(l),l},destroyNode(A){k.hashRemoveNode(A)},isRoot(A){return A===A.parent},isMountpoint(A){return!!A.mounted},isFile(A){return(A&61440)===32768},isDir(A){return(A&61440)===16384},isLink(A){return(A&61440)===40960},isChrdev(A){return(A&61440)===8192},isBlkdev(A){return(A&61440)===24576},isFIFO(A){return(A&61440)===4096},isSocket(A){return(A&49152)===49152},flagsToPermissionString(A){var j=[\"r\",\"w\",\"rw\"][A&3];return A&512&&(j+=\"w\"),j},nodePermissions(A,j){return k.ignorePermissions?0:j.includes(\"r\")&&!(A.mode&292)||j.includes(\"w\")&&!(A.mode&146)||j.includes(\"x\")&&!(A.mode&73)?2:0},mayLookup(A){if(!k.isDir(A.mode))return 54;var j=k.nodePermissions(A,\"x\");return j||(A.node_ops.lookup?0:2)},mayCreate(A,j){try{var t=k.lookupNode(A,j);return 20}catch{}return k.nodePermissions(A,\"wx\")},mayDelete(A,j,t){var e;try{e=k.lookupNode(A,j)}catch(_){return _.errno}var l=k.nodePermissions(A,\"wx\");if(l)return l;if(t){if(!k.isDir(e.mode))return 54;if(k.isRoot(e)||k.getPath(e)===k.cwd())return 10}else if(k.isDir(e.mode))return 31;return 0},mayOpen(A,j){return A?k.isLink(A.mode)?32:k.isDir(A.mode)&&(k.flagsToPermissionString(j)!==\"r\"||j&512)?31:k.nodePermissions(A,k.flagsToPermissionString(j)):44},MAX_OPEN_FDS:4096,nextfd(){for(var A=0;A<=k.MAX_OPEN_FDS;A++)if(!k.streams[A])return A;throw new k.ErrnoError(33)},getStreamChecked(A){var j=k.getStream(A);if(!j)throw new k.ErrnoError(8);return j},getStream:A=>k.streams[A],createStream(A,j=-1){return A=Object.assign(new k.FSStream,A),j==-1&&(j=k.nextfd()),A.fd=j,k.streams[j]=A,A},closeStream(A){k.streams[A]=null},dupStream(A,j=-1){var t,e,l=k.createStream(A,j);return(e=(t=l.stream_ops)==null?void 0:t.dup)==null||e.call(t,l),l},chrdev_stream_ops:{open(A){var j,t,e=k.getDevice(A.node.rdev);A.stream_ops=e.stream_ops,(t=(j=A.stream_ops).open)==null||t.call(j,A)},llseek(){throw new k.ErrnoError(70)}},major:A=>A>>8,minor:A=>A&255,makedev:(A,j)=>A<<8|j,registerDevice(A,j){k.devices[A]={stream_ops:j}},getDevice:A=>k.devices[A],getMounts(A){for(var j=[],t=[A];t.length;){var e=t.pop();j.push(e),t.push(...e.mounts)}return j},syncfs(A,j){typeof A==\"function\"&&(j=A,A=!1),k.syncFSRequests++,k.syncFSRequests>1&&oA(`warning: ${k.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var t=k.getMounts(k.root.mount),e=0;function l(a){return k.syncFSRequests--,j(a)}function _(a){if(a)return _.errored?void 0:(_.errored=!0,l(a));++e>=t.length&&l(null)}t.forEach(a=>{if(!a.type.syncfs)return _(null);a.type.syncfs(a,A,_)})},mount(A,j,t){var e=t===\"/\",l=!t,_;if(e&&k.root)throw new k.ErrnoError(10);if(!e&&!l){var a=k.lookupPath(t,{follow_mount:!1});if(t=a.path,_=a.node,k.isMountpoint(_))throw new k.ErrnoError(10);if(!k.isDir(_.mode))throw new k.ErrnoError(54)}var o={type:A,opts:j,mountpoint:t,mounts:[]},i=A.mount(o);return i.mount=o,o.root=i,e?k.root=i:_&&(_.mounted=o,_.mount&&_.mount.mounts.push(o)),i},unmount(A){var j=k.lookupPath(A,{follow_mount:!1});if(!k.isMountpoint(j.node))throw new k.ErrnoError(28);var t=j.node,e=t.mounted,l=k.getMounts(e);Object.keys(k.nameTable).forEach(a=>{for(var o=k.nameTable[a];o;){var i=o.name_next;l.includes(o.mount)&&k.destroyNode(o),o=i}}),t.mounted=null;var _=t.mount.mounts.indexOf(e);t.mount.mounts.splice(_,1)},lookup(A,j){return A.node_ops.lookup(A,j)},mknod(A,j,t){var e=k.lookupPath(A,{parent:!0}),l=e.node,_=I.basename(A);if(!_||_===\".\"||_===\"..\")throw new k.ErrnoError(28);var a=k.mayCreate(l,_);if(a)throw new k.ErrnoError(a);if(!l.node_ops.mknod)throw new k.ErrnoError(63);return l.node_ops.mknod(l,_,j,t)},create(A,j){return j=j!==void 0?j:438,j&=4095,j|=32768,k.mknod(A,j,0)},mkdir(A,j){return j=j!==void 0?j:511,j&=1023,j|=16384,k.mknod(A,j,0)},mkdirTree(A,j){for(var t=A.split(\"/\"),e=\"\",l=0;l<t.length;++l)if(t[l]){e+=\"/\"+t[l];try{k.mkdir(e,j)}catch(_){if(_.errno!=20)throw _}}},mkdev(A,j,t){return typeof t==\"undefined\"&&(t=j,j=438),j|=8192,k.mknod(A,j,t)},symlink(A,j){if(!V.resolve(A))throw new k.ErrnoError(44);var t=k.lookupPath(j,{parent:!0}),e=t.node;if(!e)throw new k.ErrnoError(44);var l=I.basename(j),_=k.mayCreate(e,l);if(_)throw new k.ErrnoError(_);if(!e.node_ops.symlink)throw new k.ErrnoError(63);return e.node_ops.symlink(e,l,A)},rename(A,j){var t=I.dirname(A),e=I.dirname(j),l=I.basename(A),_=I.basename(j),a,o,i;if(a=k.lookupPath(A,{parent:!0}),o=a.node,a=k.lookupPath(j,{parent:!0}),i=a.node,!o||!i)throw new k.ErrnoError(44);if(o.mount!==i.mount)throw new k.ErrnoError(75);var n=k.lookupNode(o,l),s=V.relative(A,e);if(s.charAt(0)!==\".\")throw new k.ErrnoError(28);if(s=V.relative(j,t),s.charAt(0)!==\".\")throw new k.ErrnoError(55);var u;try{u=k.lookupNode(i,_)}catch{}if(n!==u){var d=k.isDir(n.mode),G=k.mayDelete(o,l,d);if(G)throw new k.ErrnoError(G);if(G=u?k.mayDelete(i,_,d):k.mayCreate(i,_),G)throw new k.ErrnoError(G);if(!o.node_ops.rename)throw new k.ErrnoError(63);if(k.isMountpoint(n)||u&&k.isMountpoint(u))throw new k.ErrnoError(10);if(i!==o&&(G=k.nodePermissions(o,\"w\"),G))throw new k.ErrnoError(G);k.hashRemoveNode(n);try{o.node_ops.rename(n,i,_),n.parent=i}catch(p){throw p}finally{k.hashAddNode(n)}}},rmdir(A){var j=k.lookupPath(A,{parent:!0}),t=j.node,e=I.basename(A),l=k.lookupNode(t,e),_=k.mayDelete(t,e,!0);if(_)throw new k.ErrnoError(_);if(!t.node_ops.rmdir)throw new k.ErrnoError(63);if(k.isMountpoint(l))throw new k.ErrnoError(10);t.node_ops.rmdir(t,e),k.destroyNode(l)},readdir(A){var j=k.lookupPath(A,{follow:!0}),t=j.node;if(!t.node_ops.readdir)throw new k.ErrnoError(54);return t.node_ops.readdir(t)},unlink(A){var j=k.lookupPath(A,{parent:!0}),t=j.node;if(!t)throw new k.ErrnoError(44);var e=I.basename(A),l=k.lookupNode(t,e),_=k.mayDelete(t,e,!1);if(_)throw new k.ErrnoError(_);if(!t.node_ops.unlink)throw new k.ErrnoError(63);if(k.isMountpoint(l))throw new k.ErrnoError(10);t.node_ops.unlink(t,e),k.destroyNode(l)},readlink(A){var j=k.lookupPath(A),t=j.node;if(!t)throw new k.ErrnoError(44);if(!t.node_ops.readlink)throw new k.ErrnoError(28);return V.resolve(k.getPath(t.parent),t.node_ops.readlink(t))},stat(A,j){var t=k.lookupPath(A,{follow:!j}),e=t.node;if(!e)throw new k.ErrnoError(44);if(!e.node_ops.getattr)throw new k.ErrnoError(63);return e.node_ops.getattr(e)},lstat(A){return k.stat(A,!0)},chmod(A,j,t){var e;if(typeof A==\"string\"){var l=k.lookupPath(A,{follow:!t});e=l.node}else e=A;if(!e.node_ops.setattr)throw new k.ErrnoError(63);e.node_ops.setattr(e,{mode:j&4095|e.mode&-4096,timestamp:Date.now()})},lchmod(A,j){k.chmod(A,j,!0)},fchmod(A,j){var t=k.getStreamChecked(A);k.chmod(t.node,j)},chown(A,j,t,e){var l;if(typeof A==\"string\"){var _=k.lookupPath(A,{follow:!e});l=_.node}else l=A;if(!l.node_ops.setattr)throw new k.ErrnoError(63);l.node_ops.setattr(l,{timestamp:Date.now()})},lchown(A,j,t){k.chown(A,j,t,!0)},fchown(A,j,t){var e=k.getStreamChecked(A);k.chown(e.node,j,t)},truncate(A,j){if(j<0)throw new k.ErrnoError(28);var t;if(typeof A==\"string\"){var e=k.lookupPath(A,{follow:!0});t=e.node}else t=A;if(!t.node_ops.setattr)throw new k.ErrnoError(63);if(k.isDir(t.mode))throw new k.ErrnoError(31);if(!k.isFile(t.mode))throw new k.ErrnoError(28);var l=k.nodePermissions(t,\"w\");if(l)throw new k.ErrnoError(l);t.node_ops.setattr(t,{size:j,timestamp:Date.now()})},ftruncate(A,j){var t=k.getStreamChecked(A);if(!(t.flags&2097155))throw new k.ErrnoError(28);k.truncate(t.node,j)},utime(A,j,t){var e=k.lookupPath(A,{follow:!0}),l=e.node;l.node_ops.setattr(l,{timestamp:Math.max(j,t)})},open(A,j,t){if(A===\"\")throw new k.ErrnoError(44);j=typeof j==\"string\"?b6(j):j,j&64?(t=typeof t==\"undefined\"?438:t,t=t&4095|32768):t=0;var e;if(typeof A==\"object\")e=A;else{A=I.normalize(A);try{var l=k.lookupPath(A,{follow:!(j&131072)});e=l.node}catch{}}var _=!1;if(j&64)if(e){if(j&128)throw new k.ErrnoError(20)}else e=k.mknod(A,t,0),_=!0;if(!e)throw new k.ErrnoError(44);if(k.isChrdev(e.mode)&&(j&=-513),j&65536&&!k.isDir(e.mode))throw new k.ErrnoError(54);if(!_){var a=k.mayOpen(e,j);if(a)throw new k.ErrnoError(a)}j&512&&!_&&k.truncate(e,0),j&=-131713;var o=k.createStream({node:e,path:k.getPath(e),flags:j,seekable:!0,position:0,stream_ops:e.stream_ops,ungotten:[],error:!1});return o.stream_ops.open&&o.stream_ops.open(o),r.logReadFiles&&!(j&1)&&(k.readFiles||(k.readFiles={}),A in k.readFiles||(k.readFiles[A]=1)),o},close(A){if(k.isClosed(A))throw new k.ErrnoError(8);A.getdents&&(A.getdents=null);try{A.stream_ops.close&&A.stream_ops.close(A)}catch(j){throw j}finally{k.closeStream(A.fd)}A.fd=null},isClosed(A){return A.fd===null},llseek(A,j,t){if(k.isClosed(A))throw new k.ErrnoError(8);if(!A.seekable||!A.stream_ops.llseek)throw new k.ErrnoError(70);if(t!=0&&t!=1&&t!=2)throw new k.ErrnoError(28);return A.position=A.stream_ops.llseek(A,j,t),A.ungotten=[],A.position},read(A,j,t,e,l){if(e<0||l<0)throw new k.ErrnoError(28);if(k.isClosed(A))throw new k.ErrnoError(8);if((A.flags&2097155)===1)throw new k.ErrnoError(8);if(k.isDir(A.node.mode))throw new k.ErrnoError(31);if(!A.stream_ops.read)throw new k.ErrnoError(28);var _=typeof l!=\"undefined\";if(!_)l=A.position;else if(!A.seekable)throw new k.ErrnoError(70);var a=A.stream_ops.read(A,j,t,e,l);return _||(A.position+=a),a},write(A,j,t,e,l,_){if(e<0||l<0)throw new k.ErrnoError(28);if(k.isClosed(A))throw new k.ErrnoError(8);if(!(A.flags&2097155))throw new k.ErrnoError(8);if(k.isDir(A.node.mode))throw new k.ErrnoError(31);if(!A.stream_ops.write)throw new k.ErrnoError(28);A.seekable&&A.flags&1024&&k.llseek(A,0,2);var a=typeof l!=\"undefined\";if(!a)l=A.position;else if(!A.seekable)throw new k.ErrnoError(70);var o=A.stream_ops.write(A,j,t,e,l,_);return a||(A.position+=o),o},allocate(A,j,t){if(k.isClosed(A))throw new k.ErrnoError(8);if(j<0||t<=0)throw new k.ErrnoError(28);if(!(A.flags&2097155))throw new k.ErrnoError(8);if(!k.isFile(A.node.mode)&&!k.isDir(A.node.mode))throw new k.ErrnoError(43);if(!A.stream_ops.allocate)throw new k.ErrnoError(138);A.stream_ops.allocate(A,j,t)},mmap(A,j,t,e,l){if(e&2&&!(l&2)&&(A.flags&2097155)!==2)throw new k.ErrnoError(2);if((A.flags&2097155)===1)throw new k.ErrnoError(2);if(!A.stream_ops.mmap)throw new k.ErrnoError(43);return A.stream_ops.mmap(A,j,t,e,l)},msync(A,j,t,e,l){return A.stream_ops.msync?A.stream_ops.msync(A,j,t,e,l):0},ioctl(A,j,t){if(!A.stream_ops.ioctl)throw new k.ErrnoError(59);return A.stream_ops.ioctl(A,j,t)},readFile(A,j={}){if(j.flags=j.flags||0,j.encoding=j.encoding||\"binary\",j.encoding!==\"utf8\"&&j.encoding!==\"binary\")throw new Error(`Invalid encoding type \"${j.encoding}\"`);var t,e=k.open(A,j.flags),l=k.stat(A),_=l.size,a=new Uint8Array(_);return k.read(e,a,0,_,0),j.encoding===\"utf8\"?t=kA(a,0):j.encoding===\"binary\"&&(t=a),k.close(e),t},writeFile(A,j,t={}){t.flags=t.flags||577;var e=k.open(A,t.flags,t.mode);if(typeof j==\"string\"){var l=new Uint8Array(YA(j)+1),_=zA(j,l,0,l.length);k.write(e,l,0,_,void 0,t.canOwn)}else if(ArrayBuffer.isView(j))k.write(e,j,0,j.byteLength,void 0,t.canOwn);else throw new Error(\"Unsupported data type\");k.close(e)},cwd:()=>k.currentPath,chdir(A){var j=k.lookupPath(A,{follow:!0});if(j.node===null)throw new k.ErrnoError(44);if(!k.isDir(j.node.mode))throw new k.ErrnoError(54);var t=k.nodePermissions(j.node,\"x\");if(t)throw new k.ErrnoError(t);k.currentPath=j.path},createDefaultDirectories(){k.mkdir(\"/tmp\"),k.mkdir(\"/home\"),k.mkdir(\"/home/web_user\")},createDefaultDevices(){k.mkdir(\"/dev\"),k.registerDevice(k.makedev(1,3),{read:()=>0,write:(e,l,_,a,o)=>a}),k.mkdev(\"/dev/null\",k.makedev(1,3)),W.register(k.makedev(5,0),W.default_tty_ops),W.register(k.makedev(6,0),W.default_tty1_ops),k.mkdev(\"/dev/tty\",k.makedev(5,0)),k.mkdev(\"/dev/tty1\",k.makedev(6,0));var A=new Uint8Array(1024),j=0,t=()=>(j===0&&(j=Fj(A).byteLength),A[--j]);k.createDevice(\"/dev\",\"random\",t),k.createDevice(\"/dev\",\"urandom\",t),k.mkdir(\"/dev/shm\"),k.mkdir(\"/dev/shm/tmp\")},createSpecialDirectories(){k.mkdir(\"/proc\");var A=k.mkdir(\"/proc/self\");k.mkdir(\"/proc/self/fd\"),k.mount({mount(){var j=k.createNode(A,\"fd\",16895,73);return j.node_ops={lookup(t,e){var l=+e,_=k.getStreamChecked(l),a={parent:null,mount:{mountpoint:\"fake\"},node_ops:{readlink:()=>_.path}};return a.parent=a,a}},j}},{},\"/proc/self/fd\")},createStandardStreams(){r.stdin?k.createDevice(\"/dev\",\"stdin\",r.stdin):k.symlink(\"/dev/tty\",\"/dev/stdin\"),r.stdout?k.createDevice(\"/dev\",\"stdout\",null,r.stdout):k.symlink(\"/dev/tty\",\"/dev/stdout\"),r.stderr?k.createDevice(\"/dev\",\"stderr\",null,r.stderr):k.symlink(\"/dev/tty1\",\"/dev/stderr\");var A=k.open(\"/dev/stdin\",0),j=k.open(\"/dev/stdout\",1),t=k.open(\"/dev/stderr\",1)},staticInit(){[44].forEach(A=>{k.genericErrors[A]=new k.ErrnoError(A),k.genericErrors[A].stack=\"<generic error, no stack>\"}),k.nameTable=new Array(4096),k.mount(q,{},\"/\"),k.createDefaultDirectories(),k.createDefaultDevices(),k.createSpecialDirectories(),k.filesystems={MEMFS:q}},init(A,j,t){k.init.initialized=!0,r.stdin=A||r.stdin,r.stdout=j||r.stdout,r.stderr=t||r.stderr,k.createStandardStreams()},quit(){k.init.initialized=!1;for(var A=0;A<k.streams.length;A++){var j=k.streams[A];j&&k.close(j)}},findObject(A,j){var t=k.analyzePath(A,j);return t.exists?t.object:null},analyzePath(A,j){try{var t=k.lookupPath(A,{follow:!j});A=t.path}catch{}var e={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var t=k.lookupPath(A,{parent:!0});e.parentExists=!0,e.parentPath=t.path,e.parentObject=t.node,e.name=I.basename(A),t=k.lookupPath(A,{follow:!j}),e.exists=!0,e.path=t.path,e.object=t.node,e.name=t.node.name,e.isRoot=t.path===\"/\"}catch(l){e.error=l.errno}return e},createPath(A,j,t,e){A=typeof A==\"string\"?A:k.getPath(A);for(var l=j.split(\"/\").reverse();l.length;){var _=l.pop();if(_){var a=I.join2(A,_);try{k.mkdir(a)}catch{}A=a}}return a},createFile(A,j,t,e,l){var _=I.join2(typeof A==\"string\"?A:k.getPath(A),j),a=WA(e,l);return k.create(_,a)},createDataFile(A,j,t,e,l,_){var a=j;A&&(A=typeof A==\"string\"?A:k.getPath(A),a=j?I.join2(A,j):A);var o=WA(e,l),i=k.create(a,o);if(t){if(typeof t==\"string\"){for(var n=new Array(t.length),s=0,u=t.length;s<u;++s)n[s]=t.charCodeAt(s);t=n}k.chmod(i,o|146);var d=k.open(i,577);k.write(d,t,0,t.length,0,_),k.close(d),k.chmod(i,o)}},createDevice(A,j,t,e){var l=I.join2(typeof A==\"string\"?A:k.getPath(A),j),_=WA(!!t,!!e);k.createDevice.major||(k.createDevice.major=64);var a=k.makedev(k.createDevice.major++,0);return k.registerDevice(a,{open(o){o.seekable=!1},close(o){var i;(i=e==null?void 0:e.buffer)!=null&&i.length&&e(10)},read(o,i,n,s,u){for(var d=0,G=0;G<s;G++){var p;try{p=t()}catch{throw new k.ErrnoError(29)}if(p===void 0&&d===0)throw new k.ErrnoError(6);if(p==null)break;d++,i[n+G]=p}return d&&(o.node.timestamp=Date.now()),d},write(o,i,n,s,u){for(var d=0;d<s;d++)try{e(i[n+d])}catch{throw new k.ErrnoError(29)}return s&&(o.node.timestamp=Date.now()),d}}),k.mkdev(l,_,a)},forceLoadFile(A){if(A.isDevice||A.isFolder||A.link||A.contents)return!0;if(typeof XMLHttpRequest!=\"undefined\")throw new Error(\"Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.\");if(aA)try{A.contents=FA(aA(A.url),!0),A.usedBytes=A.contents.length}catch{throw new k.ErrnoError(29)}else throw new Error(\"Cannot load without read() or XMLHttpRequest.\")},createLazyFile(A,j,t,e,l){class _{constructor(){this.lengthKnown=!1,this.chunks=[]}get(G){if(!(G>this.length-1||G<0)){var p=G%this.chunkSize,g=G/this.chunkSize|0;return this.getter(g)[p]}}setDataGetter(G){this.getter=G}cacheLength(){var G=new XMLHttpRequest;if(G.open(\"HEAD\",t,!1),G.send(null),!(G.status>=200&&G.status<300||G.status===304))throw new Error(\"Couldn't load \"+t+\". Status: \"+G.status);var p=Number(G.getResponseHeader(\"Content-length\")),g,O=(g=G.getResponseHeader(\"Accept-Ranges\"))&&g===\"bytes\",F=(g=G.getResponseHeader(\"Content-Encoding\"))&&g===\"gzip\",E=1024*1024;O||(E=p);var $=(c,S)=>{if(c>S)throw new Error(\"invalid range (\"+c+\", \"+S+\") or no bytes requested!\");if(S>p-1)throw new Error(\"only \"+p+\" bytes available! programmer error!\");var L=new XMLHttpRequest;if(L.open(\"GET\",t,!1),p!==E&&L.setRequestHeader(\"Range\",\"bytes=\"+c+\"-\"+S),L.responseType=\"arraybuffer\",L.overrideMimeType&&L.overrideMimeType(\"text/plain; charset=x-user-defined\"),L.send(null),!(L.status>=200&&L.status<300||L.status===304))throw new Error(\"Couldn't load \"+t+\". Status: \"+L.status);return L.response!==void 0?new Uint8Array(L.response||[]):FA(L.responseText||\"\",!0)},x=this;x.setDataGetter(c=>{var S=c*E,L=(c+1)*E-1;if(L=Math.min(L,p-1),typeof x.chunks[c]==\"undefined\"&&(x.chunks[c]=$(S,L)),typeof x.chunks[c]==\"undefined\")throw new Error(\"doXHR failed!\");return x.chunks[c]}),(F||!p)&&(E=p=1,p=this.getter(0).length,E=p,MA(\"LazyFiles on gzip forces download of the whole file when length is accessed\")),this._length=p,this._chunkSize=E,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(typeof XMLHttpRequest!=\"undefined\"){if(!jA)throw\"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc\";var a=new _,o={isDevice:!1,contents:a}}else var o={isDevice:!1,url:t};var i=k.createFile(A,j,o,e,l);o.contents?i.contents=o.contents:o.url&&(i.contents=null,i.url=o.url),Object.defineProperties(i,{usedBytes:{get:function(){return this.contents.length}}});var n={},s=Object.keys(i.stream_ops);s.forEach(d=>{var G=i.stream_ops[d];n[d]=(...p)=>(k.forceLoadFile(i),G(...p))});function u(d,G,p,g,O){var F=d.node.contents;if(O>=F.length)return 0;var E=Math.min(F.length-O,g);if(F.slice)for(var $=0;$<E;$++)G[p+$]=F[O+$];else for(var $=0;$<E;$++)G[p+$]=F.get(O+$);return E}return n.read=(d,G,p,g,O)=>(k.forceLoadFile(i),u(d,G,p,g,O)),n.mmap=(d,G,p,g,O)=>{k.forceLoadFile(i);var F=Ij(G);if(!F)throw new k.ErrnoError(48);return u(d,J,F,G,p),{ptr:F,allocated:!0}},i.stream_ops=n,i}},w={DEFAULT_POLLMASK:5,calculateAt(A,j,t){if(I.isAbs(j))return j;var e;if(A===-100)e=k.cwd();else{var l=w.getStreamFromFD(A);e=l.path}if(j.length==0){if(!t)throw new k.ErrnoError(44);return e}return I.join2(e,j)},doStat(A,j,t){var e=A(j);H[t>>2]=e.dev,H[t+4>>2]=e.mode,m[t+8>>2]=e.nlink,H[t+12>>2]=e.uid,H[t+16>>2]=e.gid,H[t+20>>2]=e.rdev,b=[e.size>>>0,(h=e.size,+Math.abs(h)>=1?h>0?+Math.floor(h/4294967296)>>>0:~~+Math.ceil((h-+(~~h>>>0))/4294967296)>>>0:0)],H[t+24>>2]=b[0],H[t+28>>2]=b[1],H[t+32>>2]=4096,H[t+36>>2]=e.blocks;var l=e.atime.getTime(),_=e.mtime.getTime(),a=e.ctime.getTime();return b=[Math.floor(l/1e3)>>>0,(h=Math.floor(l/1e3),+Math.abs(h)>=1?h>0?+Math.floor(h/4294967296)>>>0:~~+Math.ceil((h-+(~~h>>>0))/4294967296)>>>0:0)],H[t+40>>2]=b[0],H[t+44>>2]=b[1],m[t+48>>2]=l%1e3*1e3,b=[Math.floor(_/1e3)>>>0,(h=Math.floor(_/1e3),+Math.abs(h)>=1?h>0?+Math.floor(h/4294967296)>>>0:~~+Math.ceil((h-+(~~h>>>0))/4294967296)>>>0:0)],H[t+56>>2]=b[0],H[t+60>>2]=b[1],m[t+64>>2]=_%1e3*1e3,b=[Math.floor(a/1e3)>>>0,(h=Math.floor(a/1e3),+Math.abs(h)>=1?h>0?+Math.floor(h/4294967296)>>>0:~~+Math.ceil((h-+(~~h>>>0))/4294967296)>>>0:0)],H[t+72>>2]=b[0],H[t+76>>2]=b[1],m[t+80>>2]=a%1e3*1e3,b=[e.ino>>>0,(h=e.ino,+Math.abs(h)>=1?h>0?+Math.floor(h/4294967296)>>>0:~~+Math.ceil((h-+(~~h>>>0))/4294967296)>>>0:0)],H[t+88>>2]=b[0],H[t+92>>2]=b[1],0},doMsync(A,j,t,e,l){if(!k.isFile(j.node.mode))throw new k.ErrnoError(43);if(e&2)return 0;var _=D.slice(A,A+t);k.msync(j,_,l,t,e)},getStreamFromFD(A){var j=k.getStreamChecked(A);return j},varargs:void 0,getStr(A){var j=eA(A);return j}};function D6(A,j,t){w.varargs=t;try{var e=w.getStreamFromFD(A);switch(j){case 0:{var l=vA();if(l<0)return-28;for(;k.streams[l];)l++;var _;return _=k.dupStream(e,l),_.fd}case 1:case 2:return 0;case 3:return e.flags;case 4:{var l=vA();return e.flags|=l,0}case 12:{var l=lA(),a=0;return R[l+a>>1]=2,0}case 13:case 14:return 0}return-28}catch(o){if(typeof k==\"undefined\"||o.name!==\"ErrnoError\")throw o;return-o.errno}}function w6(A,j,t){w.varargs=t;try{var e=w.getStreamFromFD(A);switch(j){case 21509:return e.tty?0:-59;case 21505:{if(!e.tty)return-59;if(e.tty.ops.ioctl_tcgets){var l=e.tty.ops.ioctl_tcgets(e),_=lA();H[_>>2]=l.c_iflag||0,H[_+4>>2]=l.c_oflag||0,H[_+8>>2]=l.c_cflag||0,H[_+12>>2]=l.c_lflag||0;for(var a=0;a<32;a++)J[_+a+17]=l.c_cc[a]||0;return 0}return 0}case 21510:case 21511:case 21512:return e.tty?0:-59;case 21506:case 21507:case 21508:{if(!e.tty)return-59;if(e.tty.ops.ioctl_tcsets){for(var _=lA(),o=H[_>>2],i=H[_+4>>2],n=H[_+8>>2],s=H[_+12>>2],u=[],a=0;a<32;a++)u.push(J[_+a+17]);return e.tty.ops.ioctl_tcsets(e.tty,j,{c_iflag:o,c_oflag:i,c_cflag:n,c_lflag:s,c_cc:u})}return 0}case 21519:{if(!e.tty)return-59;var _=lA();return H[_>>2]=0,0}case 21520:return e.tty?-28:-59;case 21531:{var _=lA();return k.ioctl(e,j,_)}case 21523:{if(!e.tty)return-59;if(e.tty.ops.ioctl_tiocgwinsz){var d=e.tty.ops.ioctl_tiocgwinsz(e.tty),_=lA();R[_>>1]=d[0],R[_+2>>1]=d[1]}return 0}case 21524:return e.tty?0:-59;case 21515:return e.tty?0:-59;default:return-28}}catch(G){if(typeof k==\"undefined\"||G.name!==\"ErrnoError\")throw G;return-G.errno}}function C6(A,j,t,e){w.varargs=e;try{j=w.getStr(j),j=w.calculateAt(A,j);var l=e?vA():0;return k.open(j,t,l).fd}catch(_){if(typeof k==\"undefined\"||_.name!==\"ErrnoError\")throw _;return-_.errno}}function S6(A,j,t){try{return j=w.getStr(j),j=w.calculateAt(A,j),t===0?k.unlink(j):t===512?k.rmdir(j):nA(\"Invalid flags passed to unlinkat\"),0}catch(e){if(typeof k==\"undefined\"||e.name!==\"ErrnoError\")throw e;return-e.errno}}var P6=()=>{nA(\"\")},IA={},ZA=A=>{for(;A.length;){var j=A.pop(),t=A.pop();t(j)}};function sA(A){return this.fromWireType(m[A>>2])}var BA={},rA={},gA={},gj,xA=A=>{throw new gj(A)},QA=(A,j,t)=>{A.forEach(function(o){gA[o]=j});function e(o){var i=t(o);i.length!==A.length&&xA(\"Mismatched type converter count\");for(var n=0;n<A.length;++n)T(A[n],i[n])}var l=new Array(j.length),_=[],a=0;j.forEach((o,i)=>{rA.hasOwnProperty(o)?l[i]=rA[o]:(_.push(o),BA.hasOwnProperty(o)||(BA[o]=[]),BA[o].push(()=>{l[i]=rA[o],++a,a===_.length&&e(l)}))}),_.length===0&&e(l)},M6=A=>{var j=IA[A];delete IA[A];var t=j.rawConstructor,e=j.rawDestructor,l=j.fields,_=l.map(a=>a.getterReturnType).concat(l.map(a=>a.setterArgumentType));QA([A],_,a=>{var o={};return l.forEach((i,n)=>{var s=i.fieldName,u=a[n],d=i.getter,G=i.getterContext,p=a[n+l.length],g=i.setter,O=i.setterContext;o[s]={read:F=>u.fromWireType(d(G,F)),write:(F,E)=>{var $=[];g(O,F,p.toWireType($,E)),ZA($)}}}),[{name:j.name,fromWireType:i=>{var n={};for(var s in o)n[s]=o[s].read(i);return e(i),n},toWireType:(i,n)=>{for(var s in o)if(!(s in n))throw new TypeError(`Missing field: \"${s}\"`);var u=t();for(s in o)o[s].write(u,n[s]);return i!==null&&i.push(e,u),u},argPackAdvance:X,readValueFromPointer:sA,destructorFunction:e}]})},K6=(A,j,t,e,l)=>{},T6=()=>{for(var A=new Array(256),j=0;j<256;++j)A[j]=String.fromCharCode(j);xj=A},xj,C=A=>{for(var j=\"\",t=A;D[t];)j+=xj[D[t++]];return j},GA,v=A=>{throw new GA(A)};function X6(A,j,t={}){var e=j.name;if(A||v(`type \"${e}\" must have a positive integer typeid pointer`),rA.hasOwnProperty(A)){if(t.ignoreDuplicateRegistrations)return;v(`Cannot register type '${e}' twice`)}if(rA[A]=j,delete gA[A],BA.hasOwnProperty(A)){var l=BA[A];delete BA[A],l.forEach(_=>_())}}function T(A,j,t={}){if(!(\"argPackAdvance\"in j))throw new TypeError(\"registerType registeredInstance requires argPackAdvance\");return X6(A,j,t)}var X=8,R6=(A,j,t,e)=>{j=C(j),T(A,{name:j,fromWireType:function(l){return!!l},toWireType:function(l,_){return _?t:e},argPackAdvance:X,readValueFromPointer:function(l){return this.fromWireType(D[l])},destructorFunction:null})},V6=A=>({count:A.count,deleteScheduled:A.deleteScheduled,preservePointerOnDelete:A.preservePointerOnDelete,ptr:A.ptr,ptrType:A.ptrType,smartPtr:A.smartPtr,smartPtrType:A.smartPtrType}),Aj=A=>{function j(t){return t.$$.ptrType.registeredClass.name}v(j(A)+\" instance already deleted\")},jj=!1,Lj=A=>{},U6=A=>{A.smartPtr?A.smartPtrType.rawDestructor(A.smartPtr):A.ptrType.registeredClass.rawDestructor(A.ptr)},yj=A=>{A.count.value-=1;var j=A.count.value===0;j&&U6(A)},Oj=(A,j,t)=>{if(j===t)return A;if(t.baseClass===void 0)return null;var e=Oj(A,j,t.baseClass);return e===null?null:t.downcast(e)},Jj={},Y6=()=>Object.keys(uA).length,z6=()=>{var A=[];for(var j in uA)uA.hasOwnProperty(j)&&A.push(uA[j]);return A},dA=[],tj=()=>{for(;dA.length;){var A=dA.pop();A.$$.deleteScheduled=!1,A.delete()}},$A,W6=A=>{$A=A,dA.length&&$A&&$A(tj)},Z6=()=>{r.getInheritedInstanceCount=Y6,r.getLiveInheritedInstances=z6,r.flushPendingDeletes=tj,r.setDelayFunction=W6},uA={},Q6=(A,j)=>{for(j===void 0&&v(\"ptr should not be undefined\");A.baseClass;)j=A.upcast(j),A=A.baseClass;return j},At=(A,j)=>(j=Q6(A,j),uA[j]),LA=(A,j)=>{(!j.ptrType||!j.ptr)&&xA(\"makeClassHandle requires ptr and ptrType\");var t=!!j.smartPtrType,e=!!j.smartPtr;return t!==e&&xA(\"Both smartPtrType and smartPtr must be specified\"),j.count={value:1},pA(Object.create(A,{$$:{value:j,writable:!0}}))};function jt(A){var j=this.getPointee(A);if(!j)return this.destructor(A),null;var t=At(this.registeredClass,j);if(t!==void 0){if(t.$$.count.value===0)return t.$$.ptr=j,t.$$.smartPtr=A,t.clone();var e=t.clone();return this.destructor(A),e}function l(){return this.isSmartPointer?LA(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:j,smartPtrType:this,smartPtr:A}):LA(this.registeredClass.instancePrototype,{ptrType:this,ptr:A})}var _=this.registeredClass.getActualType(j),a=Jj[_];if(!a)return l.call(this);var o;this.isConst?o=a.constPointerType:o=a.pointerType;var i=Oj(j,this.registeredClass,o.registeredClass);return i===null?l.call(this):this.isSmartPointer?LA(o.registeredClass.instancePrototype,{ptrType:o,ptr:i,smartPtrType:this,smartPtr:A}):LA(o.registeredClass.instancePrototype,{ptrType:o,ptr:i})}var pA=A=>typeof FinalizationRegistry==\"undefined\"?(pA=j=>j,A):(jj=new FinalizationRegistry(j=>{yj(j.$$)}),pA=j=>{var t=j.$$,e=!!t.smartPtr;if(e){var l={$$:t};jj.register(j,l,j)}return j},Lj=j=>jj.unregister(j),pA(A)),tt=()=>{Object.assign(yA.prototype,{isAliasOf(A){if(!(this instanceof yA)||!(A instanceof yA))return!1;var j=this.$$.ptrType.registeredClass,t=this.$$.ptr;A.$$=A.$$;for(var e=A.$$.ptrType.registeredClass,l=A.$$.ptr;j.baseClass;)t=j.upcast(t),j=j.baseClass;for(;e.baseClass;)l=e.upcast(l),e=e.baseClass;return j===e&&t===l},clone(){if(this.$$.ptr||Aj(this),this.$$.preservePointerOnDelete)return this.$$.count.value+=1,this;var A=pA(Object.create(Object.getPrototypeOf(this),{$$:{value:V6(this.$$)}}));return A.$$.count.value+=1,A.$$.deleteScheduled=!1,A},delete(){this.$$.ptr||Aj(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&v(\"Object already scheduled for deletion\"),Lj(this),yj(this.$$),this.$$.preservePointerOnDelete||(this.$$.smartPtr=void 0,this.$$.ptr=void 0)},isDeleted(){return!this.$$.ptr},deleteLater(){return this.$$.ptr||Aj(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&v(\"Object already scheduled for deletion\"),dA.push(this),dA.length===1&&$A&&$A(tj),this.$$.deleteScheduled=!0,this}})};function yA(){}var HA=(A,j)=>Object.defineProperty(j,\"name\",{value:A}),et=(A,j,t)=>{if(A[j].overloadTable===void 0){var e=A[j];A[j]=function(...l){return A[j].overloadTable.hasOwnProperty(l.length)||v(`Function '${t}' called with an invalid number of arguments (${l.length}) - expects one of (${A[j].overloadTable})!`),A[j].overloadTable[l.length].apply(this,l)},A[j].overloadTable=[],A[j].overloadTable[e.argCount]=e}},ej=(A,j,t)=>{r.hasOwnProperty(A)?((t===void 0||r[A].overloadTable!==void 0&&r[A].overloadTable[t]!==void 0)&&v(`Cannot register public name '${A}' twice`),et(r,A,A),r.hasOwnProperty(t)&&v(`Cannot register multiple overloads of a function with the same number of arguments (${t})!`),r[A].overloadTable[t]=j):(r[A]=j,t!==void 0&&(r[A].numArguments=t))},rt=48,kt=57,lt=A=>{if(A===void 0)return\"_unknown\";A=A.replace(/[^a-zA-Z0-9_]/g,\"$\");var j=A.charCodeAt(0);return j>=rt&&j<=kt?`_${A}`:A};function Bt(A,j,t,e,l,_,a,o){this.name=A,this.constructor=j,this.instancePrototype=t,this.rawDestructor=e,this.baseClass=l,this.getActualType=_,this.upcast=a,this.downcast=o,this.pureVirtualFunctions=[]}var rj=(A,j,t)=>{for(;j!==t;)j.upcast||v(`Expected null or instance of ${t.name}, got an instance of ${j.name}`),A=j.upcast(A),j=j.baseClass;return A};function _t(A,j){if(j===null)return this.isReference&&v(`null is not a valid ${this.name}`),0;j.$$||v(`Cannot pass \"${_j(j)}\" as a ${this.name}`),j.$$.ptr||v(`Cannot pass deleted object as a pointer of type ${this.name}`);var t=j.$$.ptrType.registeredClass,e=rj(j.$$.ptr,t,this.registeredClass);return e}function at(A,j){var t;if(j===null)return this.isReference&&v(`null is not a valid ${this.name}`),this.isSmartPointer?(t=this.rawConstructor(),A!==null&&A.push(this.rawDestructor,t),t):0;(!j||!j.$$)&&v(`Cannot pass \"${_j(j)}\" as a ${this.name}`),j.$$.ptr||v(`Cannot pass deleted object as a pointer of type ${this.name}`),!this.isConst&&j.$$.ptrType.isConst&&v(`Cannot convert argument of type ${j.$$.smartPtrType?j.$$.smartPtrType.name:j.$$.ptrType.name} to parameter type ${this.name}`);var e=j.$$.ptrType.registeredClass;if(t=rj(j.$$.ptr,e,this.registeredClass),this.isSmartPointer)switch(j.$$.smartPtr===void 0&&v(\"Passing raw pointer to smart pointer is illegal\"),this.sharingPolicy){case 0:j.$$.smartPtrType===this?t=j.$$.smartPtr:v(`Cannot convert argument of type ${j.$$.smartPtrType?j.$$.smartPtrType.name:j.$$.ptrType.name} to parameter type ${this.name}`);break;case 1:t=j.$$.smartPtr;break;case 2:if(j.$$.smartPtrType===this)t=j.$$.smartPtr;else{var l=j.clone();t=this.rawShare(t,P.toHandle(()=>l.delete())),A!==null&&A.push(this.rawDestructor,t)}break;default:v(\"Unsupporting sharing policy\")}return t}function ot(A,j){if(j===null)return this.isReference&&v(`null is not a valid ${this.name}`),0;j.$$||v(`Cannot pass \"${_j(j)}\" as a ${this.name}`),j.$$.ptr||v(`Cannot pass deleted object as a pointer of type ${this.name}`),j.$$.ptrType.isConst&&v(`Cannot convert argument of type ${j.$$.ptrType.name} to parameter type ${this.name}`);var t=j.$$.ptrType.registeredClass,e=rj(j.$$.ptr,t,this.registeredClass);return e}var it=()=>{Object.assign(OA.prototype,{getPointee(A){return this.rawGetPointee&&(A=this.rawGetPointee(A)),A},destructor(A){var j;(j=this.rawDestructor)==null||j.call(this,A)},argPackAdvance:X,readValueFromPointer:sA,fromWireType:jt})};function OA(A,j,t,e,l,_,a,o,i,n,s){this.name=A,this.registeredClass=j,this.isReference=t,this.isConst=e,this.isSmartPointer=l,this.pointeeType=_,this.sharingPolicy=a,this.rawGetPointee=o,this.rawConstructor=i,this.rawShare=n,this.rawDestructor=s,!l&&j.baseClass===void 0?e?(this.toWireType=_t,this.destructorFunction=null):(this.toWireType=ot,this.destructorFunction=null):this.toWireType=at}var bj=(A,j,t)=>{r.hasOwnProperty(A)||xA(\"Replacing nonexistent public symbol\"),r[A].overloadTable!==void 0&&t!==void 0?r[A].overloadTable[t]=j:(r[A]=j,r[A].argCount=t)},Et=(A,j,t)=>{A=A.replace(/p/g,\"i\");var e=r[\"dynCall_\"+A];return e(j,...t)},JA=[],Dj,wj=A=>{var j=JA[A];return j||(A>=JA.length&&(JA.length=A+1),JA[A]=j=Dj.get(A)),j},nt=(A,j,t=[])=>{if(A.includes(\"j\"))return Et(A,j,t);var e=wj(j)(...t);return e},st=(A,j)=>(...t)=>nt(A,j,t),U=(A,j)=>{A=C(A);function t(){return A.includes(\"j\")?st(A,j):wj(j)}var e=t();return typeof e!=\"function\"&&v(`unknown function pointer with signature ${A}: ${j}`),e},Gt=(A,j)=>{var t=HA(j,function(e){this.name=j,this.message=e;var l=new Error(e).stack;l!==void 0&&(this.stack=this.toString()+`\n`+l.replace(/^Error(:[^\\n]*)?\\n/,\"\"))});return t.prototype=Object.create(A.prototype),t.prototype.constructor=t,t.prototype.toString=function(){return this.message===void 0?this.name:`${this.name}: ${this.message}`},t},Cj,Sj=A=>{var j=ve(A),t=C(j);return Z(j),t},Pj=(A,j)=>{var t=[],e={};function l(_){if(!e[_]&&!rA[_]){if(gA[_]){gA[_].forEach(l);return}t.push(_),e[_]=!0}}throw j.forEach(l),new Cj(`${A}: `+t.map(Sj).join([\", \"]))},dt=(A,j,t,e,l,_,a,o,i,n,s,u,d)=>{s=C(s),_=U(l,_),o&&(o=U(a,o)),n&&(n=U(i,n)),d=U(u,d);var G=lt(s);ej(G,function(){Pj(`Cannot construct ${s} due to unbound types`,[e])}),QA([A,j,t],e?[e]:[],p=>{var g,O;p=p[0];var F,E;e?(F=p.registeredClass,E=F.instancePrototype):E=yA.prototype;var $=HA(s,function(...ij){if(Object.getPrototypeOf(this)!==x)throw new GA(\"Use 'new' to construct \"+s);if(c.constructor_body===void 0)throw new GA(s+\" has no accessible constructor\");var Wj=c.constructor_body[ij.length];if(Wj===void 0)throw new GA(`Tried to invoke ctor of ${s} with invalid number of parameters (${ij.length}) - expected (${Object.keys(c.constructor_body).toString()}) parameters instead!`);return Wj.apply(this,ij)}),x=Object.create(E,{constructor:{value:$}});$.prototype=x;var c=new Bt(s,$,x,d,F,_,o,n);c.baseClass&&((O=(g=c.baseClass).__derivedClasses)!=null||(g.__derivedClasses=[]),c.baseClass.__derivedClasses.push(c));var S=new OA(s,c,!0,!1,!1),L=new OA(s+\"*\",c,!1,!1,!1),zj=new OA(s+\" const*\",c,!1,!0,!1);return Jj[A]={pointerType:L,constPointerType:zj},bj(G,$),[S,L,zj]})},kj=[],Y=[],lj=A=>{A>9&&--Y[A+1]===0&&(Y[A]=void 0,kj.push(A))},$t=()=>Y.length/2-5-kj.length,ut=()=>{Y.push(0,1,void 0,1,null,1,!0,1,!1,1),r.count_emval_handles=$t},P={toValue:A=>(A||v(\"Cannot use deleted val. handle = \"+A),Y[A]),toHandle:A=>{switch(A){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:{let j=kj.pop()||Y.length;return Y[j]=A,Y[j+1]=1,j}}}},pt={name:\"emscripten::val\",fromWireType:A=>{var j=P.toValue(A);return lj(A),j},toWireType:(A,j)=>P.toHandle(j),argPackAdvance:X,readValueFromPointer:sA,destructorFunction:null},Ht=A=>T(A,pt),ct=(A,j,t)=>{switch(j){case 1:return t?function(e){return this.fromWireType(J[e])}:function(e){return this.fromWireType(D[e])};case 2:return t?function(e){return this.fromWireType(R[e>>1])}:function(e){return this.fromWireType(iA[e>>1])};case 4:return t?function(e){return this.fromWireType(H[e>>2])}:function(e){return this.fromWireType(m[e>>2])};default:throw new TypeError(`invalid integer width (${j}): ${A}`)}},qt=(A,j,t,e)=>{j=C(j);function l(){}l.values={},T(A,{name:j,constructor:l,fromWireType:function(_){return this.constructor.values[_]},toWireType:(_,a)=>a.value,argPackAdvance:X,readValueFromPointer:ct(j,t,e),destructorFunction:null}),ej(j,l)},Bj=(A,j)=>{var t=rA[A];return t===void 0&&v(`${j} has unknown type ${Sj(A)}`),t},ht=(A,j,t)=>{var e=Bj(A,\"enum\");j=C(j);var l=e.constructor,_=Object.create(e.constructor.prototype,{value:{value:t},constructor:{value:HA(`${e.name}_${j}`,function(){})}});l.values[t]=_,l[j]=_},_j=A=>{if(A===null)return\"null\";var j=typeof A;return j===\"object\"||j===\"array\"||j===\"function\"?A.toString():\"\"+A},mt=(A,j)=>{switch(j){case 4:return function(t){return this.fromWireType(Hj[t>>2])};case 8:return function(t){return this.fromWireType(cj[t>>3])};default:throw new TypeError(`invalid float width (${j}): ${A}`)}},Nt=(A,j,t)=>{j=C(j),T(A,{name:j,fromWireType:e=>e,toWireType:(e,l)=>l,argPackAdvance:X,readValueFromPointer:mt(j,t),destructorFunction:null})};function ft(A){for(var j=1;j<A.length;++j)if(A[j]!==null&&A[j].destructorFunction===void 0)return!0;return!1}function vt(A,j,t,e,l,_){var a=j.length;a<2&&v(\"argTypes array size mismatch! Must at least get return value and 'this' types!\");var o=j[1]!==null&&t!==null,i=ft(j),n=j[0].name!==\"void\",s=a-2,u=new Array(s),d=[],G=[],p=function(...g){g.length!==s&&v(`function ${A} called with ${g.length} arguments, expected ${s}`),G.length=0;var O;d.length=o?2:1,d[0]=l,o&&(O=j[1].toWireType(G,this),d[1]=O);for(var F=0;F<s;++F)u[F]=j[F+2].toWireType(G,g[F]),d.push(u[F]);var E=e(...d);function $(x){if(i)ZA(G);else for(var c=o?1:2;c<j.length;c++){var S=c===1?O:u[c-2];j[c].destructorFunction!==null&&j[c].destructorFunction(S)}if(n)return j[0].fromWireType(x)}return $(E)};return HA(A,p)}var Ft=(A,j)=>{for(var t=[],e=0;e<A;e++)t.push(m[j+e*4>>2]);return t},It=A=>{A=A.trim();let j=A.indexOf(\"(\");return j!==-1?A.substr(0,j):A},gt=(A,j,t,e,l,_,a)=>{var o=Ft(j,t);A=C(A),A=It(A),l=U(e,l),ej(A,function(){Pj(`Cannot call ${A} due to unbound types`,o)},j-1),QA([],o,i=>{var n=[i[0],null].concat(i.slice(1));return bj(A,vt(A,n,null,l,_,a),j-1),[]})},xt=(A,j,t)=>{switch(j){case 1:return t?e=>J[e]:e=>D[e];case 2:return t?e=>R[e>>1]:e=>iA[e>>1];case 4:return t?e=>H[e>>2]:e=>m[e>>2];default:throw new TypeError(`invalid integer width (${j}): ${A}`)}},Lt=(A,j,t,e,l)=>{j=C(j),l===-1&&(l=4294967295);var _=s=>s;if(e===0){var a=32-8*t;_=s=>s<<a>>>a}var o=j.includes(\"unsigned\"),i=(s,u)=>{},n;o?n=function(s,u){return i(u,this.name),u>>>0}:n=function(s,u){return i(u,this.name),u},T(A,{name:j,fromWireType:_,toWireType:n,argPackAdvance:X,readValueFromPointer:xt(j,t,e!==0),destructorFunction:null})},yt=(A,j,t)=>{var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],l=e[j];function _(a){var o=m[a>>2],i=m[a+4>>2];return new l(J.buffer,i,o)}t=C(t),T(A,{name:t,fromWireType:_,argPackAdvance:X,readValueFromPointer:_},{ignoreDuplicateRegistrations:!0})},Ot=(A,j,t)=>zA(A,D,j,t),Jt=(A,j)=>{j=C(j);var t=j===\"std::string\";T(A,{name:j,fromWireType(e){var l=m[e>>2],_=e+4,a;if(t)for(var o=_,i=0;i<=l;++i){var n=_+i;if(i==l||D[n]==0){var s=n-o,u=eA(o,s);a===void 0?a=u:(a+=\"\\0\",a+=u),o=n+1}}else{for(var d=new Array(l),i=0;i<l;++i)d[i]=String.fromCharCode(D[_+i]);a=d.join(\"\")}return Z(e),a},toWireType(e,l){l instanceof ArrayBuffer&&(l=new Uint8Array(l));var _,a=typeof l==\"string\";a||l instanceof Uint8Array||l instanceof Uint8ClampedArray||l instanceof Int8Array||v(\"Cannot pass non-string to std::string\"),t&&a?_=YA(l):_=l.length;var o=Rj(4+_+1),i=o+4;if(m[o>>2]=_,t&&a)Ot(l,i,_+1);else if(a)for(var n=0;n<_;++n){var s=l.charCodeAt(n);s>255&&(Z(i),v(\"String has UTF-16 code units that do not fit in 8 bits\")),D[i+n]=s}else for(var n=0;n<_;++n)D[i+n]=l[n];return e!==null&&e.push(Z,o),o},argPackAdvance:X,readValueFromPointer:sA,destructorFunction(e){Z(e)}})},Mj=typeof TextDecoder!=\"undefined\"?new TextDecoder(\"utf-16le\"):void 0,bt=(A,j)=>{for(var t=A,e=t>>1,l=e+j/2;!(e>=l)&&iA[e];)++e;if(t=e<<1,t-A>32&&Mj)return Mj.decode(D.subarray(A,t));for(var _=\"\",a=0;!(a>=j/2);++a){var o=R[A+a*2>>1];if(o==0)break;_+=String.fromCharCode(o)}return _},Dt=(A,j,t)=>{if(t!=null||(t=2147483647),t<2)return 0;t-=2;for(var e=j,l=t<A.length*2?t/2:A.length,_=0;_<l;++_){var a=A.charCodeAt(_);R[j>>1]=a,j+=2}return R[j>>1]=0,j-e},wt=A=>A.length*2,Ct=(A,j)=>{for(var t=0,e=\"\";!(t>=j/4);){var l=H[A+t*4>>2];if(l==0)break;if(++t,l>=65536){var _=l-65536;e+=String.fromCharCode(55296|_>>10,56320|_&1023)}else e+=String.fromCharCode(l)}return e},St=(A,j,t)=>{if(t!=null||(t=2147483647),t<4)return 0;for(var e=j,l=e+t-4,_=0;_<A.length;++_){var a=A.charCodeAt(_);if(a>=55296&&a<=57343){var o=A.charCodeAt(++_);a=65536+((a&1023)<<10)|o&1023}if(H[j>>2]=a,j+=4,j+4>l)break}return H[j>>2]=0,j-e},Pt=A=>{for(var j=0,t=0;t<A.length;++t){var e=A.charCodeAt(t);e>=55296&&e<=57343&&++t,j+=4}return j},Mt=(A,j,t)=>{t=C(t);var e,l,_,a;j===2?(e=bt,l=Dt,a=wt,_=o=>iA[o>>1]):j===4&&(e=Ct,l=St,a=Pt,_=o=>m[o>>2]),T(A,{name:t,fromWireType:o=>{for(var i=m[o>>2],n,s=o+4,u=0;u<=i;++u){var d=o+4+u*j;if(u==i||_(d)==0){var G=d-s,p=e(s,G);n===void 0?n=p:(n+=\"\\0\",n+=p),s=d+j}}return Z(o),n},toWireType:(o,i)=>{typeof i!=\"string\"&&v(`Cannot pass non-string to C++ string type ${t}`);var n=a(i),s=Rj(4+n+j);return m[s>>2]=n/j,l(i,s+4,n+j),o!==null&&o.push(Z,s),s},argPackAdvance:X,readValueFromPointer:sA,destructorFunction(o){Z(o)}})},Kt=(A,j,t,e,l,_)=>{IA[A]={name:C(j),rawConstructor:U(t,e),rawDestructor:U(l,_),fields:[]}},Tt=(A,j,t,e,l,_,a,o,i,n)=>{IA[A].fields.push({fieldName:C(j),getterReturnType:t,getter:U(e,l),getterContext:_,setterArgumentType:a,setter:U(o,i),setterContext:n})},Xt=(A,j)=>{j=C(j),T(A,{isVoid:!0,name:j,argPackAdvance:0,fromWireType:()=>{},toWireType:(t,e)=>{}})},Rt=(A,j,t)=>D.copyWithin(A,j,j+t),Vt={},Kj=A=>{var j=Vt[A];return j===void 0?C(A):j},aj=[],Ut=(A,j,t,e,l)=>(A=aj[A],j=P.toValue(j),t=Kj(t),A(j,j[t],e,l)),Yt=A=>{var j=aj.length;return aj.push(A),j},zt=(A,j)=>{for(var t=new Array(A),e=0;e<A;++e)t[e]=Bj(m[j+e*4>>2],\"parameter \"+e);return t},Wt=Reflect.construct,Zt=(A,j,t)=>{var e=[],l=A.toWireType(e,t);return e.length&&(m[j>>2]=P.toHandle(e)),l},Qt=(A,j,t)=>{var e=zt(A,j),l=e.shift();A--;var _=new Array(A),a=(i,n,s,u)=>{for(var d=0,G=0;G<A;++G)_[G]=e[G].readValueFromPointer(u+d),d+=e[G].argPackAdvance;var p=t===1?Wt(n,_):n.apply(i,_);return Zt(l,s,p)},o=`methodCaller<(${e.map(i=>i.name).join(\", \")}) => ${l.name}>`;return Yt(HA(o,a))},Ae=A=>{A>9&&(Y[A+1]+=1)},je=()=>P.toHandle([]),te=A=>P.toHandle(Kj(A)),ee=()=>P.toHandle({}),re=A=>{var j=P.toValue(A);ZA(j),lj(A)},ke=(A,j,t)=>{A=P.toValue(A),j=P.toValue(j),t=P.toValue(t),A[j]=t},le=(A,j)=>{A=Bj(A,\"_emval_take_value\");var t=A.readValueFromPointer(j);return P.toHandle(t)},Be=()=>2147483648,_e=A=>{var j=mA.buffer,t=(A-j.byteLength+65535)/65536;try{return mA.grow(t),qj(),1}catch{}},ae=A=>{var j=D.length;A>>>=0;var t=Be();if(A>t)return!1;for(var e=(i,n)=>i+(n-i%n)%n,l=1;l<=4;l*=2){var _=j*(1+.2/l);_=Math.min(_,A+100663296);var a=Math.min(t,e(Math.max(A,_),65536)),o=_e(a);if(o)return!0}return!1},oj={},oe=()=>CA||\"./this.program\",cA=()=>{if(!cA.strings){var A=(typeof navigator==\"object\"&&navigator.languages&&navigator.languages[0]||\"C\").replace(\"-\",\"_\")+\".UTF-8\",j={USER:\"web_user\",LOGNAME:\"web_user\",PATH:\"/\",PWD:\"/\",HOME:\"/home/web_user\",LANG:A,_:oe()};for(var t in oj)oj[t]===void 0?delete j[t]:j[t]=oj[t];var e=[];for(var t in j)e.push(`${t}=${j[t]}`);cA.strings=e}return cA.strings},ie=(A,j)=>{for(var t=0;t<A.length;++t)J[j++]=A.charCodeAt(t);J[j]=0},Ee=(A,j)=>{var t=0;return cA().forEach((e,l)=>{var _=j+t;m[A+l*4>>2]=_,ie(e,_),t+=e.length+1}),0},ne=(A,j)=>{var t=cA();m[A>>2]=t.length;var e=0;return t.forEach(l=>e+=l.length+1),m[j>>2]=e,0};function se(A){try{var j=w.getStreamFromFD(A);return k.close(j),0}catch(t){if(typeof k==\"undefined\"||t.name!==\"ErrnoError\")throw t;return t.errno}}var Ge=(A,j,t,e)=>{for(var l=0,_=0;_<t;_++){var a=m[j>>2],o=m[j+4>>2];j+=8;var i=k.read(A,J,a,o,e);if(i<0)return-1;if(l+=i,i<o)break;typeof e!=\"undefined\"&&(e+=i)}return l};function de(A,j,t,e){try{var l=w.getStreamFromFD(A),_=Ge(l,j,t);return m[e>>2]=_,0}catch(a){if(typeof k==\"undefined\"||a.name!==\"ErrnoError\")throw a;return a.errno}}var $e=(A,j)=>j+2097152>>>0<4194305-!!A?(A>>>0)+j*4294967296:NaN;function ue(A,j,t,e,l){var _=$e(j,t);try{if(isNaN(_))return 61;var a=w.getStreamFromFD(A);return k.llseek(a,_,e),b=[a.position>>>0,(h=a.position,+Math.abs(h)>=1?h>0?+Math.floor(h/4294967296)>>>0:~~+Math.ceil((h-+(~~h>>>0))/4294967296)>>>0:0)],H[l>>2]=b[0],H[l+4>>2]=b[1],a.getdents&&_===0&&e===0&&(a.getdents=null),0}catch(o){if(typeof k==\"undefined\"||o.name!==\"ErrnoError\")throw o;return o.errno}}var pe=(A,j,t,e)=>{for(var l=0,_=0;_<t;_++){var a=m[j>>2],o=m[j+4>>2];j+=8;var i=k.write(A,J,a,o,e);if(i<0)return-1;l+=i,typeof e!=\"undefined\"&&(e+=i)}return l};function He(A,j,t,e){try{var l=w.getStreamFromFD(A),_=pe(l,j,t);return m[e>>2]=_,0}catch(a){if(typeof k==\"undefined\"||a.name!==\"ErrnoError\")throw a;return a.errno}}var bA=A=>A%4===0&&(A%100!==0||A%400===0),ce=(A,j)=>{for(var t=0,e=0;e<=j;t+=A[e++]);return t},Tj=[31,29,31,30,31,30,31,31,30,31,30,31],Xj=[31,28,31,30,31,30,31,31,30,31,30,31],qe=(A,j)=>{for(var t=new Date(A.getTime());j>0;){var e=bA(t.getFullYear()),l=t.getMonth(),_=(e?Tj:Xj)[l];if(j>_-t.getDate())j-=_-t.getDate()+1,t.setDate(1),l<11?t.setMonth(l+1):(t.setMonth(0),t.setFullYear(t.getFullYear()+1));else return t.setDate(t.getDate()+j),t}return t},he=(A,j)=>{J.set(A,j)},me=(A,j,t,e)=>{var l=m[e+40>>2],_={tm_sec:H[e>>2],tm_min:H[e+4>>2],tm_hour:H[e+8>>2],tm_mday:H[e+12>>2],tm_mon:H[e+16>>2],tm_year:H[e+20>>2],tm_wday:H[e+24>>2],tm_yday:H[e+28>>2],tm_isdst:H[e+32>>2],tm_gmtoff:H[e+36>>2],tm_zone:l?eA(l):\"\"},a=eA(t),o={\"%c\":\"%a %b %d %H:%M:%S %Y\",\"%D\":\"%m/%d/%y\",\"%F\":\"%Y-%m-%d\",\"%h\":\"%b\",\"%r\":\"%I:%M:%S %p\",\"%R\":\"%H:%M\",\"%T\":\"%H:%M:%S\",\"%x\":\"%m/%d/%y\",\"%X\":\"%H:%M:%S\",\"%Ec\":\"%c\",\"%EC\":\"%C\",\"%Ex\":\"%m/%d/%y\",\"%EX\":\"%H:%M:%S\",\"%Ey\":\"%y\",\"%EY\":\"%Y\",\"%Od\":\"%d\",\"%Oe\":\"%e\",\"%OH\":\"%H\",\"%OI\":\"%I\",\"%Om\":\"%m\",\"%OM\":\"%M\",\"%OS\":\"%S\",\"%Ou\":\"%u\",\"%OU\":\"%U\",\"%OV\":\"%V\",\"%Ow\":\"%w\",\"%OW\":\"%W\",\"%Oy\":\"%y\"};for(var i in o)a=a.replace(new RegExp(i,\"g\"),o[i]);var n=[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],s=[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"];function u(E,$,x){for(var c=typeof E==\"number\"?E.toString():E||\"\";c.length<$;)c=x[0]+c;return c}function d(E,$){return u(E,$,\"0\")}function G(E,$){function x(S){return S<0?-1:S>0?1:0}var c;return(c=x(E.getFullYear()-$.getFullYear()))===0&&(c=x(E.getMonth()-$.getMonth()))===0&&(c=x(E.getDate()-$.getDate())),c}function p(E){switch(E.getDay()){case 0:return new Date(E.getFullYear()-1,11,29);case 1:return E;case 2:return new Date(E.getFullYear(),0,3);case 3:return new Date(E.getFullYear(),0,2);case 4:return new Date(E.getFullYear(),0,1);case 5:return new Date(E.getFullYear()-1,11,31);case 6:return new Date(E.getFullYear()-1,11,30)}}function g(E){var $=qe(new Date(E.tm_year+1900,0,1),E.tm_yday),x=new Date($.getFullYear(),0,4),c=new Date($.getFullYear()+1,0,4),S=p(x),L=p(c);return G(S,$)<=0?G(L,$)<=0?$.getFullYear()+1:$.getFullYear():$.getFullYear()-1}var O={\"%a\":E=>n[E.tm_wday].substring(0,3),\"%A\":E=>n[E.tm_wday],\"%b\":E=>s[E.tm_mon].substring(0,3),\"%B\":E=>s[E.tm_mon],\"%C\":E=>{var $=E.tm_year+1900;return d($/100|0,2)},\"%d\":E=>d(E.tm_mday,2),\"%e\":E=>u(E.tm_mday,2,\" \"),\"%g\":E=>g(E).toString().substring(2),\"%G\":g,\"%H\":E=>d(E.tm_hour,2),\"%I\":E=>{var $=E.tm_hour;return $==0?$=12:$>12&&($-=12),d($,2)},\"%j\":E=>d(E.tm_mday+ce(bA(E.tm_year+1900)?Tj:Xj,E.tm_mon-1),3),\"%m\":E=>d(E.tm_mon+1,2),\"%M\":E=>d(E.tm_min,2),\"%n\":()=>`\n`,\"%p\":E=>E.tm_hour>=0&&E.tm_hour<12?\"AM\":\"PM\",\"%S\":E=>d(E.tm_sec,2),\"%t\":()=>\"\t\",\"%u\":E=>E.tm_wday||7,\"%U\":E=>{var $=E.tm_yday+7-E.tm_wday;return d(Math.floor($/7),2)},\"%V\":E=>{var $=Math.floor((E.tm_yday+7-(E.tm_wday+6)%7)/7);if((E.tm_wday+371-E.tm_yday-2)%7<=2&&$++,$){if($==53){var x=(E.tm_wday+371-E.tm_yday)%7;x!=4&&(x!=3||!bA(E.tm_year))&&($=1)}}else{$=52;var c=(E.tm_wday+7-E.tm_yday-1)%7;(c==4||c==5&&bA(E.tm_year%400-1))&&$++}return d($,2)},\"%w\":E=>E.tm_wday,\"%W\":E=>{var $=E.tm_yday+7-(E.tm_wday+6)%7;return d(Math.floor($/7),2)},\"%y\":E=>(E.tm_year+1900).toString().substring(2),\"%Y\":E=>E.tm_year+1900,\"%z\":E=>{var $=E.tm_gmtoff,x=$>=0;return $=Math.abs($)/60,$=$/60*100+$%60,(x?\"+\":\"-\")+(\"0000\"+$).slice(-4)},\"%Z\":E=>E.tm_zone,\"%%\":()=>\"%\"};a=a.replace(/%%/g,\"\\0\\0\");for(var i in O)a.includes(i)&&(a=a.replace(new RegExp(i,\"g\"),O[i](_)));a=a.replace(/\\0\\0/g,\"%\");var F=FA(a,!1);return F.length>j?0:(he(F,A),F.length-1)},Ne=(A,j,t,e,l)=>me(A,j,t,e);k.createPreloadedFile=J6,k.staticInit(),gj=r.InternalError=class extends Error{constructor(A){super(A),this.name=\"InternalError\"}},T6(),GA=r.BindingError=class extends Error{constructor(A){super(A),this.name=\"BindingError\"}},tt(),Z6(),it(),Cj=r.UnboundTypeError=Gt(Error,\"UnboundTypeError\"),ut();var fe={b:N6,p:F6,r:D6,B:w6,F:C6,E:S6,C:P6,w:M6,z:K6,K:R6,m:dt,J:Ht,j:qt,a:ht,v:Nt,f:gt,i:Lt,e:yt,u:Jt,o:Mt,x:Kt,l:Tt,L:Xt,I:Rt,N:Ut,c:lj,O:Qt,P:Ae,q:je,h:te,k:ee,M:re,g:ke,d:le,D:ae,G:Ee,H:ne,s:se,t:de,y:ue,n:He,A:Ne},B=m6(),Xe=B.R,Re=r._memcpy=B.S,Ve=r._heif_color_conversion_options_set_defaults=B.U,Rj=r._malloc=B.V,Ue=r._heif_nclx_color_profile_set_color_primaries=B.W,Z=r._free=B.X,Ye=r._heif_nclx_color_profile_set_transfer_characteristics=B.Y,ze=r._heif_nclx_color_profile_set_matrix_coefficients=B.Z,We=r._heif_init=B._,Ze=r._heif_deinit=B.$,Qe=r._heif_load_plugin=B.aa,Ar=r._heif_unload_plugin=B.ba,jr=r._heif_load_plugins=B.ca,tr=r._heif_get_plugin_directories=B.da,er=r._heif_free_plugin_directories=B.ea,rr=r._heif_get_version=B.fa,kr=r._heif_get_version_number=B.ga,lr=r._heif_get_version_number_major=B.ha,Br=r._heif_get_version_number_minor=B.ia,_r=r._heif_get_version_number_maintenance=B.ja,ar=r._heif_check_filetype=B.ka,or=r._heif_read_main_brand=B.la,ir=r._heif_has_compatible_filetype=B.ma,Er=r._heif_list_compatible_brands=B.na,nr=r._heif_free_list_of_compatible_brands=B.oa,sr=r._heif_check_jpeg_filetype=B.pa,Gr=r._heif_main_brand=B.qa,dr=r._heif_fourcc_to_brand=B.ra,$r=r._heif_read_minor_version_brand=B.sa,ur=r._heif_brand_to_fourcc=B.ta,pr=r._heif_has_compatible_brand=B.ua,Hr=r._heif_get_global_security_limits=B.va,cr=r._heif_get_file_mime_type=B.wa,qr=r._heif_get_disabled_security_limits=B.xa,hr=r._heif_context_get_security_limits=B.ya,mr=r._heif_context_set_security_limits=B.za,Nr=r._heif_context_alloc=B.Aa,fr=r._heif_context_free=B.Ba,vr=r._heif_context_read_from_file=B.Ca,Fr=r._heif_context_read_from_memory=B.Da,Ir=r._heif_context_read_from_memory_without_copy=B.Ea,gr=r._heif_context_read_from_reader=B.Fa,xr=r._heif_context_debug_dump_boxes_to_file=B.Ga,Lr=r._heif_context_get_primary_image_handle=B.Ha,yr=r._heif_context_get_primary_image_ID=B.Ia,Or=r._heif_context_is_top_level_image_ID=B.Ja,Jr=r._heif_context_get_number_of_top_level_images=B.Ka,br=r._heif_context_get_list_of_top_level_image_IDs=B.La,Dr=r._heif_context_get_image_handle=B.Ma,wr=r._heif_image_handle_is_primary_image=B.Na,Cr=r._heif_image_handle_get_item_id=B.Oa,Sr=r._heif_image_handle_get_number_of_thumbnails=B.Pa,Pr=r._heif_image_handle_get_list_of_thumbnail_IDs=B.Qa,Mr=r._heif_image_handle_get_thumbnail=B.Ra,Kr=r._heif_image_handle_get_number_of_auxiliary_images=B.Sa,Tr=r._heif_image_handle_get_list_of_auxiliary_image_IDs=B.Ta,Xr=r._heif_image_handle_get_auxiliary_type=B.Ua,Rr=r._heif_image_handle_release_auxiliary_type=B.Va,Vr=r._heif_image_handle_free_auxiliary_types=B.Wa,Ur=r._heif_image_handle_get_auxiliary_image_handle=B.Xa,Yr=r._heif_image_handle_get_width=B.Ya,zr=r._heif_image_handle_get_height=B.Za,Wr=r._heif_image_handle_get_ispe_width=B._a,Zr=r._heif_image_handle_get_ispe_height=B.$a,Qr=r._heif_image_handle_get_context=B.ab,Ak=r._heif_image_handle_get_image_tiling=B.bb,jk=r._heif_image_handle_get_grid_image_tile_id=B.cb,tk=r._heif_context_get_entity_groups=B.db,ek=r._heif_entity_groups_release=B.eb,rk=r._heif_image_handle_get_preferred_decoding_colorspace=B.fb,kk=r._heif_image_handle_has_alpha_channel=B.gb,lk=r._heif_image_handle_is_premultiplied_alpha=B.hb,Bk=r._heif_image_handle_get_luma_bits_per_pixel=B.ib,_k=r._heif_image_handle_get_chroma_bits_per_pixel=B.jb,ak=r._heif_image_handle_has_depth_image=B.kb,ok=r._heif_depth_representation_info_free=B.lb,ik=r._heif_image_handle_get_depth_image_representation_info=B.mb,Ek=r._heif_image_handle_get_number_of_depth_images=B.nb,nk=r._heif_image_handle_get_list_of_depth_image_IDs=B.ob,sk=r._heif_image_handle_get_depth_image_handle=B.pb,Gk=r._heif_decoding_options_alloc=B.qb,dk=r._heif_decoding_options_free=B.rb,$k=r._heif_decode_image=B.sb,uk=r._heif_image_handle_decode_image_tile=B.tb,pk=r._heif_image_create=B.ub,Hk=r._heif_image_get_decoding_warnings=B.vb,ck=r._heif_image_add_decoding_warning=B.wb,qk=r._heif_image_has_content_light_level=B.xb,hk=r._heif_image_get_content_light_level=B.yb,mk=r._heif_image_handle_get_content_light_level=B.zb,Nk=r._heif_image_set_content_light_level=B.Ab,fk=r._heif_image_has_mastering_display_colour_volume=B.Bb,vk=r._heif_image_get_mastering_display_colour_volume=B.Cb,Fk=r._heif_image_handle_get_mastering_display_colour_volume=B.Db,Ik=r._heif_image_set_mastering_display_colour_volume=B.Eb,gk=r._heif_mastering_display_colour_volume_decode=B.Fb,xk=r._heif_image_get_pixel_aspect_ratio=B.Gb,Lk=r._heif_image_handle_get_pixel_aspect_ratio=B.Hb,yk=r._heif_image_set_pixel_aspect_ratio=B.Ib,Ok=r._heif_image_release=B.Jb,Jk=r._heif_image_handle_release=B.Kb,bk=r._heif_image_get_colorspace=B.Lb,Dk=r._heif_image_get_chroma_format=B.Mb,wk=r._heif_image_get_width=B.Nb,Ck=r._heif_image_get_height=B.Ob,Sk=r._heif_image_get_primary_width=B.Pb,Pk=r._heif_image_get_primary_height=B.Qb,Mk=r._heif_image_crop=B.Rb,Kk=r._heif_image_get_bits_per_pixel=B.Sb,Tk=r._heif_image_get_bits_per_pixel_range=B.Tb,Xk=r._heif_image_has_channel=B.Ub,Rk=r._heif_image_add_plane=B.Vb,Vk=r._heif_image_get_plane_readonly=B.Wb,Uk=r._heif_image_get_plane=B.Xb,Yk=r._heif_image_set_premultiplied_alpha=B.Yb,zk=r._heif_image_is_premultiplied_alpha=B.Zb,Wk=r._heif_image_extend_padding_to_size=B._b,Zk=r._heif_image_scale_image=B.$b,Qk=r._heif_image_extend_to_size_fill_with_zero=B.ac,A7=r._heif_image_set_raw_color_profile=B.bc,j7=r._heif_image_set_nclx_color_profile=B.cc,t7=r._heif_image_handle_get_number_of_metadata_blocks=B.dc,e7=r._heif_image_handle_get_list_of_metadata_block_IDs=B.ec,r7=r._heif_image_handle_get_metadata_type=B.fc,k7=r._heif_image_handle_get_metadata_content_type=B.gc,l7=r._heif_image_handle_get_metadata_item_uri_type=B.hc,B7=r._heif_image_handle_get_metadata_size=B.ic,_7=r._heif_image_handle_get_metadata=B.jc,a7=r._heif_image_handle_get_color_profile_type=B.kc,o7=r._heif_image_handle_get_raw_color_profile_size=B.lc,i7=r._heif_image_handle_get_nclx_color_profile=B.mc,E7=r._heif_image_handle_get_raw_color_profile=B.nc,n7=r._heif_image_get_color_profile_type=B.oc,s7=r._heif_image_get_raw_color_profile_size=B.pc,G7=r._heif_image_get_raw_color_profile=B.qc,d7=r._heif_image_get_nclx_color_profile=B.rc,$7=r._heif_nclx_color_profile_alloc=B.sc,u7=r._heif_nclx_color_profile_free=B.tc,p7=r._heif_image_handle_has_camera_intrinsic_matrix=B.uc,H7=r._heif_image_handle_get_camera_intrinsic_matrix=B.vc,c7=r._heif_image_handle_has_camera_extrinsic_matrix=B.wc,q7=r._heif_image_handle_get_camera_extrinsic_matrix=B.xc,h7=r._heif_camera_extrinsic_matrix_release=B.yc,m7=r._heif_camera_extrinsic_matrix_get_rotation_matrix=B.zc,N7=r._heif_register_decoder=B.Ac,f7=r._heif_register_decoder_plugin=B.Bc,v7=r._heif_register_encoder_plugin=B.Cc,F7=r._heif_context_write_to_file=B.Dc,I7=r._heif_context_write=B.Ec,g7=r._heif_context_add_compatible_brand=B.Fc,x7=r._heif_context_get_encoder_descriptors=B.Gc,L7=r._heif_get_encoder_descriptors=B.Hc,y7=r._heif_encoder_descriptor_get_name=B.Ic,O7=r._heif_encoder_descriptor_get_id_name=B.Jc,J7=r._heif_get_decoder_descriptors=B.Kc,b7=r._heif_decoder_descriptor_get_name=B.Lc,D7=r._heif_decoder_descriptor_get_id_name=B.Mc,w7=r._heif_encoder_descriptor_get_compression_format=B.Nc,C7=r._heif_encoder_descriptor_supports_lossy_compression=B.Oc,S7=r._heif_encoder_descriptor_supports_lossless_compression=B.Pc,P7=r._heif_encoder_descriptor_supportes_lossy_compression=B.Qc,M7=r._heif_encoder_descriptor_supportes_lossless_compression=B.Rc,K7=r._heif_encoder_get_name=B.Sc,T7=r._heif_context_get_encoder=B.Tc,X7=r._heif_have_decoder_for_format=B.Uc,R7=r._heif_have_encoder_for_format=B.Vc,V7=r._heif_context_get_encoder_for_format=B.Wc,U7=r._heif_encoder_release=B.Xc,Y7=r._heif_encoder_set_lossy_quality=B.Yc,z7=r._heif_encoder_set_lossless=B.Zc,W7=r._heif_encoder_set_logging_level=B._c,Z7=r._heif_encoder_list_parameters=B.$c,Q7=r._heif_encoder_parameter_get_name=B.ad,Al=r._heif_encoder_parameter_get_type=B.bd,jl=r._heif_encoder_set_parameter_integer=B.cd,tl=r._heif_encoder_parameter_get_valid_integer_values=B.dd,el=r._heif_encoder_get_parameter_integer=B.ed,rl=r._heif_encoder_parameter_get_valid_integer_range=B.fd,kl=r._heif_encoder_parameter_get_valid_string_values=B.gd,ll=r._heif_encoder_parameter_integer_valid_range=B.hd,Bl=r._heif_encoder_set_parameter_boolean=B.id,_l=r._heif_encoder_get_parameter_boolean=B.jd,al=r._heif_encoder_set_parameter_string=B.kd,ol=r._heif_encoder_get_parameter_string=B.ld,il=r._heif_encoder_parameter_string_valid_values=B.md,El=r._heif_encoder_parameter_integer_valid_values=B.nd,nl=r._heif_encoder_set_parameter=B.od,sl=r._heif_encoder_get_parameter=B.pd,Gl=r._heif_encoder_has_default=B.qd,dl=r._heif_encoding_options_alloc=B.rd,$l=r._heif_encoding_options_free=B.sd,ul=r._heif_context_encode_image=B.td,pl=r._heif_context_encode_grid=B.ud,Hl=r._heif_context_add_grid_image=B.vd,cl=r._heif_context_add_overlay_image=B.wd,ql=r._heif_context_add_image_tile=B.xd,hl=r._heif_context_assign_thumbnail=B.yd,ml=r._heif_context_encode_thumbnail=B.zd,Nl=r._heif_context_set_primary_image=B.Ad,fl=r._heif_context_add_exif_metadata=B.Bd,vl=r._heif_context_add_XMP_metadata=B.Cd,Fl=r._heif_context_add_XMP_metadata2=B.Dd,Il=r._heif_context_add_generic_metadata=B.Ed,gl=r._heif_context_add_generic_uri_metadata=B.Fd,xl=r._heif_context_set_maximum_image_size_limit=B.Gd,Ll=r._heif_context_set_max_decoding_threads=B.Hd,yl=r._heif_image_handle_get_number_of_region_items=B.Id,Ol=r._heif_image_handle_get_list_of_region_item_ids=B.Jd,Jl=r._heif_context_get_region_item=B.Kd,bl=r._heif_region_item_get_id=B.Ld,Dl=r._heif_region_item_release=B.Md,wl=r._heif_region_item_get_reference_size=B.Nd,Cl=r._heif_region_item_get_number_of_regions=B.Od,Sl=r._heif_region_item_get_list_of_regions=B.Pd,Pl=r._heif_image_handle_add_region_item=B.Qd,Ml=r._heif_region_item_add_region_point=B.Rd,Kl=r._heif_region_item_add_region_rectangle=B.Sd,Tl=r._heif_region_item_add_region_ellipse=B.Td,Xl=r._heif_region_item_add_region_polygon=B.Ud,Rl=r._heif_region_item_add_region_polyline=B.Vd,Vl=r._heif_region_item_add_region_referenced_mask=B.Wd,Ul=r._heif_region_item_add_region_inline_mask_data=B.Xd,Yl=r._heif_region_item_add_region_inline_mask=B.Yd,zl=r._heif_region_release=B.Zd,Wl=r._heif_region_release_many=B._d,Zl=r._heif_region_get_type=B.$d,Ql=r._heif_region_get_point=B.ae,AB=r._heif_region_get_point_transformed=B.be,jB=r._heif_region_get_rectangle=B.ce,tB=r._heif_region_get_rectangle_transformed=B.de,eB=r._heif_region_get_ellipse=B.ee,rB=r._heif_region_get_ellipse_transformed=B.fe,kB=r._heif_region_get_polygon_num_points=B.ge,lB=r._heif_region_get_polyline_num_points=B.he,BB=r._heif_region_get_polygon_points=B.ie,_B=r._heif_region_get_polyline_points=B.je,aB=r._heif_region_get_polygon_points_transformed=B.ke,oB=r._heif_region_get_polyline_points_transformed=B.le,iB=r._heif_region_get_referenced_mask_ID=B.me,EB=r._heif_region_get_inline_mask_data_len=B.ne,nB=r._heif_region_get_inline_mask_data=B.oe,sB=r._heif_region_get_mask_image=B.pe,GB=r._heif_item_get_properties_of_type=B.qe,dB=r._heif_item_get_transformation_properties=B.re,$B=r._heif_item_get_property_type=B.se,uB=r._heif_item_get_property_user_description=B.te,pB=r._heif_item_add_property_user_description=B.ue,HB=r._heif_item_get_property_transform_mirror=B.ve,cB=r._heif_item_get_property_transform_rotation_ccw=B.we,qB=r._heif_item_get_property_transform_crop_borders=B.xe,hB=r._heif_property_user_description_release=B.ye,mB=r._heif_item_add_raw_property=B.ze,NB=r._heif_item_get_property_raw_size=B.Ae,fB=r._heif_item_get_property_raw_data=B.Be,vB=r._heif_item_get_property_uuid_type=B.Ce,FB=r._heif_context_get_number_of_items=B.De,IB=r._heif_context_get_list_of_item_IDs=B.Ee,gB=r._heif_item_get_item_type=B.Fe,xB=r._heif_item_is_item_hidden=B.Ge,LB=r._heif_item_get_mime_item_content_type=B.He,yB=r._heif_item_get_mime_item_content_encoding=B.Ie,OB=r._heif_item_get_uri_item_uri_type=B.Je,JB=r._heif_item_get_item_name=B.Ke,bB=r._heif_item_get_item_data=B.Le,DB=r._heif_release_item_data=B.Me,wB=r._heif_context_get_item_references=B.Ne,CB=r._heif_release_item_references=B.Oe,SB=r._heif_context_add_item=B.Pe,PB=r._heif_context_add_mime_item=B.Qe,MB=r._heif_context_add_precompressed_mime_item=B.Re,KB=r._heif_context_add_uri_item=B.Se,TB=r._heif_context_add_item_reference=B.Te,XB=r._heif_context_add_item_references=B.Ue,RB=r._heif_item_set_item_name=B.Ve,VB=r._de265_get_version=B.We,UB=r._de265_init=B.Xe,YB=r._de265_free=B.Ye,zB=r._de265_new_decoder=B.Ze,WB=r._de265_set_parameter_bool=B._e,ZB=r._de265_free_decoder=B.$e,QB=r._de265_push_NAL=B.af,A_=r._de265_flush_data=B.bf,j_=r._de265_decode=B.cf,t_=r._de265_get_next_picture=B.df,e_=r._de265_get_chroma_format=B.ef,r_=r._de265_get_image_width=B.ff,k_=r._de265_get_image_height=B.gf,l_=r._de265_get_bits_per_pixel=B.hf,B_=r._de265_get_image_plane=B.jf,__=r._de265_get_image_colour_primaries=B.kf,a_=r._de265_get_image_transfer_characteristics=B.lf,o_=r._de265_get_image_matrix_coefficients=B.mf,i_=r._de265_get_image_full_range_flag=B.nf,E_=r._de265_release_next_picture=B.of,ve=B.pf,Fe=B.qf,n_=r.dynCall_ji=B.rf,s_=r.dynCall_iij=B.sf,G_=r.dynCall_jijj=B.tf,d_=r.dynCall_vijj=B.uf,$_=r.dynCall_jiji=B.vf,u_=r.dynCall_viijii=B.wf,p_=r.dynCall_iiiiij=B.xf,H_=r.dynCall_iiiiijj=B.yf,c_=r.dynCall_iiiiiijj=B.zf,q_=r._heif_error_ok=80028,h_=r._heif_error_success=79460,m_=r._heif_error_invalid_parameter_value=80052,N_=r._heif_error_unsupported_parameter=80040,DA;EA=function A(){DA||Vj(),DA||(EA=A)};function Vj(){if(tA>0||(E6(),tA>0))return;function A(){DA||(DA=!0,r.calledRun=!0,!pj&&(n6(),z(r),r.onRuntimeInitialized&&r.onRuntimeInitialized(),s6()))}r.setStatus?(r.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){r.setStatus(\"\")},1),A()},1)):A()}if(r.preInit)for(typeof r.preInit==\"function\"&&(r.preInit=[r.preInit]);r.preInit.length>0;)r.preInit.pop()();Vj();function Uj(A){for(var j=new ArrayBuffer(A.length),t=new Uint8Array(j),e=0,l=A.length;e<l;e++)t[e]=A.charCodeAt(e);return j}var Q=function(A){this.handle=A,this.img=null};Q.prototype.free=function(){this.handle&&(r.heif_image_handle_release(this.handle),this.handle=null)},Q.prototype._ensureImage=function(){if(!this.img){var A=r.heif_js_decode_image(this.handle,r.heif_colorspace.heif_colorspace_YCbCr,r.heif_chroma.heif_chroma_420);if(!A||A.code){console.log(\"Decoding image failed\",this.handle,A);return}this.data=new Uint8Array(Uj(A.data)),delete A.data,this.img=A,A.alpha!==void 0&&(this.alpha=new Uint8Array(Uj(A.alpha)),delete A.alpha)}},Q.prototype.get_width=function(){return r.heif_image_handle_get_width(this.handle)},Q.prototype.get_height=function(){return r.heif_image_handle_get_height(this.handle)},Q.prototype.is_primary=function(){return!!heif_image_handle_is_primary_image(this.handle)},Q.prototype.display=function(A,j){var t=this.get_width(),e=this.get_height();setTimeout(function(){if(!this.img){var l=r.heif_js_decode_image2(this.handle,r.heif_colorspace.heif_colorspace_RGB,r.heif_chroma.heif_chroma_interleaved_RGBA);if(!l||l.code){console.log(\"Decoding image failed\",this.handle,l),j(null);return}for(let _ of l.channels)if(_.id==r.heif_channel.heif_channel_interleaved)if(_.stride==_.width*4)A.data.set(_.data);else for(let a=0;a<_.height;a++){let o=_.data.slice(a*_.stride,a*_.stride+_.width*4),i=a*_.width*4;A.data.set(o,i)}r.heif_image_release(l.image)}j(A)}.bind(this),0)};var Yj=function(){this.decoder=null};Yj.prototype.decode=function(A){if(this.decoder&&r.heif_context_free(this.decoder),this.decoder=r.heif_context_alloc(),!this.decoder)return console.log(\"Could not create HEIF context\"),[];var j=r.heif_context_read_from_memory(this.decoder,A);if(j.code!==r.heif_error_code.heif_error_Ok)return console.log(\"Could not parse HEIF file\",j.message),[];var t=r.heif_js_context_get_list_of_top_level_image_IDs(this.decoder);if(!t||t.code)return console.log(\"Error loading image ids\",t),[];if(!t.length)return console.log(\"No images found\"),[];for(var e=[],l=0;l<t.length;l++){var _=r.heif_js_context_get_image_handle(this.decoder,t[l]);if(!_||_.code){console.log(\"Could not get image data for id\",t[l],_);continue}e.push(new Q(_))}return e};var Ie=function(A){return A.charCodeAt(0)<<24|A.charCodeAt(1)<<16|A.charCodeAt(2)<<8|A.charCodeAt(3)};r.HeifImage=Q,r.HeifDecoder=Yj,r.fourcc=Ie;let ge=[\"heif_error_code\",\"heif_suberror_code\",\"heif_compression_format\",\"heif_chroma\",\"heif_colorspace\",\"heif_channel\"];for(let A of ge)for(let j in r[A])!r[A].hasOwnProperty(j)||j===\"values\"||(r[j]=r[A][j]);for(let A in r)A.indexOf(\"_heif_\")!==0||r[A.slice(1)]!==void 0||(r[A.slice(1)]=r[A]);return K=r,K}})();typeof k6==\"object\"&&typeof nj==\"object\"?nj.exports=r6:typeof define==\"function\"&&define.amd&&define([],()=>r6)});var Me={};De(Me,{default:()=>Pe});var _6=we(l6());var B6=Qj(\"AGFzbQEAAAAB8ARJYAF/AGABfwF/YAJ/fwBgA39/fwBgA39/fwF/YAJ/fwF/YAR/f39/AGAFf39/f38AYAd/f39/f39/AGAGf39/f39/AGAEf39/fwF/YAZ/f39/f38Bf2AFf39/f38Bf2AIf39/f39/f38AYAAAYAABf2ACf34Bf2AKf39/f39/f39/fwBgAX8BfmAIf39/f39/f38Bf2AJf39/f39/f39/AGAHf39/f39/fwF/YAN/fn4BfmADf35/AX5gBX9/fn9/AGAFf35+fn4AYAV/f39/fgF/YA1/f39/f39/f39/f39/AGAEf35+fwBgA39+fgBgBX9/f398AX9gC39/f39/f39/f39/AX9gCn9/f39/f39/f38Bf2ACfn8Bf2APf39/f39/f39/f39/f39/AGAMf39/f39/f39/f39/AGAHf39/f39+fgF/YAZ/f39/fn4Bf2ADf39+AGACfH8BfGAGf39/f35+AGADf35/AX9gDH9/f39/f39/f39/fwF/YAF8AXxgDn9/f39/f39/f39/f39/AGACf38BfmAEf39/fwF+YAZ/fH9/f38Bf2ADfn5/AGAFf39/f38BfGACf3wBf2ACf34AYAJ/fABgAX0Bf2AEfn5+fgF/YAR/f39+AX5gA3x8fwF8YAJ8fAF8YAl/f39/f39+fn8AYAt/f39/f39/f39/fwBgA39+fwBgAn5+AXxgBH9/fn4AYAN/f38BfGADf39/AX1gAn5+AX1gBH9+fn4AYAN+fn4Bf2ACfH8Bf2AKf39/f39/f35/fwF/YAZ/f39+f38Bf2AFf39/fn8Bf2AJf39/f39/f39/AX8C/QEqAWEBYQADAWEBYgAGAWEBYwAAAWEBZAAFAWEBZQADAWEBZgAIAWEBZwADAWEBaAABAWEBaQAHAWEBagAGAWEBawAPAWEBbAARAWEBbQAbAWEBbgAKAWEBbwADAWEBcAADAWEBcQAPAWEBcgAEAWEBcwABAWEBdAAKAWEBdQACAWEBdgADAWEBdwAAAWEBeAAJAWEBeQAMAWEBegAIAWEBQQAMAWEBQgAEAWEBQwAOAWEBRAABAWEBRQAEAWEBRgAKAWEBRwAFAWEBSAAFAWEBSQADAWEBSgAAAWEBSwAGAWEBTAACAWEBTQAAAWEBTgAxAWEBTwAEAWEBUAAAA+0P6w8AAAEE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QCABIAggAyABKAIAKAIwEQQAIANHDQELIAZBADYCDCABIQILIAVBEGokACACDAELEDgACw0AIAAgACgCAEEMaygCAGoiASABKAIQQQVyEHoLIAsQciAHQRBqJAAgAAvaAQECfyMAQRBrIgQkAAJAAkAgAkELSQRAIAAiAyAALQALQYABcSACQf8AcXI6AAsgACAALQALQf8AcToACwwBCyACQff///8HSw0BIARBCGogAkELTwR/IAJBCGpBeHEiAyADQQFrIgMgA0ELRhsFQQoLQQFqEPIBIAQoAgwaIAAgBCgCCCIDNgIAIAAgACgCCEGAgICAeHEgBCgCDEH/////B3FyNgIIIAAgACgCCEGAgICAeHI2AgggACACNgIECyABIAJBAWogAxCxASAEQRBqJAAPCxCKAQALSQAgACACNgIEIAAgATYCACAAQQhqIQEgAywAC0EATgRAIAEgAykCADcCACABIAMoAgg2AgggAA8LIAEgAygCACADKAIEEC4gAAtYAQN/IwBBEGsiAyQAQZSvAygCACEEIAEtAABBKkYiBUUEQEGEwwFBBkEBIAQQeBoLIAMgAjYCDCAAIAEgBWogAkGPCkGQChDbAhogBBDPARogA0EQaiQAC7YBAgN/An4CQCAAKAIQIgIgAU4NACACQThKDQBBwAAgAmutIQUgACgCBCECA0ACQCAFpyEEIAJFBEAgBCEDDAELIAAgACgCACIDQQFqNgIAIAMxAAAhBiAAIAJBAWsiAjYCBCAAIAApAwggBiAEQQhrIgOthoQ3AwggBUIIfSEFIARBD0oNAQsLQcAAIANrIQILIAAgAiABazYCECAAIAApAwgiBSABrYY3AwggBUHAACABa62IpwuABAEDfyACQYAETwRAIAAgASACECIgAA8LIAAgAmohAwJAIAAgAXNBA3FFBEACQCAAQQNxRQRAIAAhAgwBCyACRQRAIAAhAgwBCyAAIQIDQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAkEDcUUNASACIANJDQALCwJAIANBfHEiBEHAAEkNACACIARBQGoiBUsNAANAIAIgASgCADYCACACIAEoAgQ2AgQgAiABKAIINgIIIAIgASgCDDYCDCACIAEoAhA2AhAgAiABKAIUNgIUIAIgASgCGDYCGCACIAEoAhw2AhwgAiABKAIgNgIg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AiwgA0IANwIUIANBADYCECADIAI2AgwgAyAFNgIEIANBADYCPCADQoGAgICAgICAATcCNCADIAA2AgggBSADQQRqIAYgBkEBQQAgBSgCACgCFBEJACAAQQAgAygCHBshBwsgA0FAayQAIAciAw0AIwBBQGoiAyQAIANBADYCECADIAE2AgwgAyAANgIIIAMgAjYCBEEAIQAgA0EUakEAQScQNBogA0EANgI8IANBAToAOyAFIANBBGogBkEBQQAgBSgCACgCGBEHAAJAAkACQCADKAIoDgIAAQILIAMoAhhBACADKAIkQQFGG0EAIAMoAiBBAUYbQQAgAygCLEEBRhshAAwBCyADKAIcQQFHBEAgAygCLA0BIAMoAiBBAUcNASADKAIkQQFHDQELIAMoAhQhAAsgA0FAayQAIAAhAwsgBEEQaiQAIAML9wQBAX8jAEFAaiIHJAAgB0IANwMoIAdCADcDMCAHQQA2AjggB0IANwMgIAdBgAI7ARwgB0EBNgIYIAcgB0EYaiADIARBAUEIQQggBSABKAIkIgNBCkYbIAUgBUEYRhsiBCAEQSBGGyAEIANBC0YbAn9BASEEAkACQAJAAkAgAw5kAwMDAwICAgICAgABAAEAAQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwILQQMMAwtBBAwCC0EAIQQLIAQLIAYQuQICQCAHKAIABEAgACAHKQMANwIAIAAgBygCEDYCECAAIAcpAwg3AgggB0EANgIQIAdCADcDCAwBCwJAAkAgASgCQCIDRQRAIAFBQGsiBiEFDAELA0AgAiADIgUoAhAiA0gEQCAFIgYoAgAiAw0BDAILIAIgA0wNAiAFKAIEIgMNAAsgBUEEaiEGC0E4ECwiAyACNgIQIAMgBykDGDcCFCADIAcpAyA3AhwgAyAHKQMoNwIkIAMgBykDMDcCLCADIAcoAjg2AjQgAyAFNgIIIANCADcCACAGIAM2AgAgASgCPCgCACICBEAgASACNgI8IAYoAgAhAwsgASgCQCADEI4BIAEgASgCREEBajYCRAsgAEGQpQUpAgA3AgAgAEEIaiEAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABB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dDYCDCAAIAQgAmsgA3Q2AhAgASABLQAAIgJBAXZB8PwCai0AAEEBdCACQQFxIgRFIgEgBCACQQJJG3I6AAAgACADIAAvARRqIgI7ARQgAsEiAkEASA0AIAAoAgQiAyAAKAIISQRAIAAgA0EBajYCBCAAIAAoAhAgAy0AACACdHI2AhALIAAgAkEIazsBFAsgAQttAQR/IAAoAgwiAkECaiIEIAAoAgQgACgCACIDayIFSwRAIAAgBCAFaxBlIAAoAgAhAyAAKAIMIQILIAAgAkEBajYCDCACIANqIAFBCHY6AAAgACAAKAIMIgJBAWo2AgwgAiAAKAIAaiABOgAAC6UBAQN/IwBBEGsiAyQAAkAgAEECEIsBRQ0AIAAoAgAhAiAAKAIEIgEEQCABIAEoAgRBAWo2AgQLAn8gAiADQQ5qQQIgAigCACgCEBEEAEUEQCAAEKIBQQAMAQsgAy8ADiIAQQh0IABBCHZyCyECIAFFDQAgASABKAIEIgBBAWs2AgQgAA0AIAEgASgCACgCCBEAACABECsLIANBEGokACACQf//A3ELLwEBf0EEEKADIgBBgLoENgIAIABB2LkENgIAIABB7LkENgIAIABB3LoEQSAQDwALgwIBA38CQAJ/IAAtAAtBB3YEQCAAKAIEDAELIAAtAAtB/wBxCyICIAFJBEAjAEEQayIEJAAgASACayICBEAgAiAALQALQQd2BH8gACgCCEH/////B3FBAWsFQQoLIgMCfyAALQALQQd2BEAgACgCBAwBCyAALQALQf8AcQsiAWtLBEAgACADIAIgA2sgAWogASABEKkDCyABAn8gAC0AC0EHdgRAIAAoAgAMAQsgAAsiA2ogAkEAENYEIAAgASACaiIAENgBIARBADoADyAAIANqIAQtAA86AAALIARBEGokAAwBCyAAAn8gAC0AC0EHdgRAIAAoAgAMAQsgAAsgARDgBAsLlAEBAn8CQAJAIAJFDQAgACgCpAEiA0EASgRAIABB1ABqIQRBACECA0AgBCACQQJ0aigCACABRg0DIAJBAWoiAiADRw0ACyADQRNKDQELIAAgA0EBajYCpAEgACADQQJ0aiABNgJUCyAAKAJQIgJBFEYEQCAAQekHNgJMDwsgACACQQFqNgJQIAAgAkECdGogATYCAAsLlQEBA38jAEEQayIDJAACQCAAQQEQiwFFDQAgACgCACECIAAoAgQiAQRAIAEgASgCBEEBajYCBAsCfyACIANBD2pBASACKAIAKAIQEQQARQRAIAAQogFBAAwBCyADLQAPCyECIAFFDQAgASABKAIEIgBBAWs2AgQgAA0AIAEgASgCACgCCBEAACABECsLIANBEGokACACC/ECAQZ/AkAgACgCBCIEIAAoAgAiB2tBA3UiBkEBaiICQYCAgIACSQRAQf////8BIAAoAgggB2siA0ECdSIFIAIgAiAFSRsgA0H4////B08bIgMEfyADQYCAgIACTw0CIANBA3QQLAVBAAsiBSAGQQN0aiICIAEoAgA2AgAgAiABKAIENgIEIAFCADcCACAFIANBA3RqIQUgAkEIaiEGAkAgBCAHRgRAIAIhAQwBCwNAIAJBCGsiASAEQQhrIgMoAgA2AgAgAkEEayAEQQRrKAIANgIAIANCADcCACABIQIgAyIEIAdHDQALCyAAKAIAIQIgACABNgIAIAAoAgQhASAAIAY2AgQgACgCCBogACAFNgIIIAEgAkcEQANAAkAgAUEEaygCACIARQ0AIAAgACgCBCIEQQFrNgIEIAQNACAAIAAoAgAoAggRAAAgABArCyABQQhrIgEgAkcNAAsLIAIEQCACECoLIAYPCxA2AAsQTwALtwECBX8DfgJAIAAoAhgiAiABTg0AIAJBOEoNAEHAACACa60hByAAKQMQIQggACgCCCECIAAoAgAhAwNAAkAgB6chBCACRQRAIAQhBQwBCyAAIANBAWoiBjYCACADMQAAIQkgACACQQFrIgI2AgggACAJIARBCGsiBa2GIAiEIgg3AxAgB0IIfSEHIAYhAyAEQQ9KDQELC0HAACAFayECCyAAIAIgAWs2AhggACAAKQMQIAGthjcDEAvUKAEMfyMAQRBrIgokAAJAAkACQAJAAkACQAJAAkACQAJAIABB9AFNBEBBqLgGKAIAIgRBECAAQQtqQfgDcSAAQQtJGyIGQQN2IgB2IgFBA3EEQAJAIAFBf3NBAXEgAGoiAkEDdCIBQdC4BmoiACABQdi4BmooAgAiASgCCCIFRgRAQai4BiAEQX4gAndxNgIADAELIAUgADYCDCAAIAU2AggLIAFBCGohACABIAJBA3QiAkEDcjYCBCABIAJqIgEgASgCBEEBcjYCBAwLCyAGQbC4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B2ohCCABIAYgB2oiAkEAIAEQNCIDaiEJAkAgBCAFRgRAIAMhBwwBCwJAIAZBA3EiBkUEQCAEIQEMAQtBACEDIAQhAQNAIAJBAWsiAiABQQFrIgEtAAA6AAAgA0EBaiIDIAZHDQALCyAFIARrQXxNBEADQCACQQFrIAFBAWstAAA6AAAgAkECayABQQJrLQAAOgAAIAJBA2sgAUEDay0AADoAACACQQRrIgIgAUEEayIBLQAAOgAAIAEgBUcNAAsLIAAoAggaIAAoAgAhBQsgACAINgIIIAAgCTYCBCAAIAc2AgAgBQRAIAUQKgsPCxA2AAvJCgIFfxF+IwBB4ABrIgUkACAEQv///////z+DIQwgAiAEhUKAgICAgICAgIB/gyEKIAJC////////P4MiDUIgiCEOIARCMIinQf//AXEhBwJAAkAgAkIwiKdB//8BcSIJQf//AWtBgoB+TwRAIAdB//8Ba0GBgH5LDQELIAFQIAJC////////////AIMiC0KAgICAgIDA//8AVCALQoCAgICAgMD//wBRG0UEQCACQoCAgICAgCCEIQoMAgsgA1AgBEL///////////8AgyICQoCAgICAgMD//wBUIAJCgICAgICAwP//AFEbRQRAIARCgICAgICAIIQhCiADIQEMAgsgASALQoCAgICAgMD//wCFhFAEQCACIAOEUARAQoCAgICAgOD//wAhCkIAIQEMAwsgCkKAgICAgIDA//8AhCEKQgAhAQwCCyADIAJCgICAgICAwP//AIWEUARAIAEgC4QhGUIAIQEgGVAEQEKAgICAgIDg//8AIQoMAwsgCkKAgICAgIDA//8AhCEKDAILIAEgC4RQBEBCACEBDAILIAIgA4RQBEBCACEBDAILIAtC////////P1gEQCAFQdAAaiABIA0gASANIA1QIgYbeSAGQQZ0rXynIgZBD2sQhgFBECAGayEGIAUpA1giDUIgiCEOIAUpA1AhAQsgAkL///////8/Vg0AIAVBQGsgAyAMIAMgDCAMUCIIG3kgCEEGdK18pyIIQQ9rEIYBIAYgCGtBEGohBiAFKQNIIQwgBSkDQCEDCyADQg+GIgtCgID+/w+DIgIgAUIgiCIEfiIQIAtCIIgiEyABQv////8PgyIBfnwiD0IghiIRIAEgAn58IgsgEVStIAIgDUL/////D4Mi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DQAgASABKAIEIgRBAWs2AgQgBA0AIAEgASgCACgCCBEAACABECsLIANBCGsiAyACRw0ACyAAKAK0ASEBCyAAIAI2ArgBIAAoArwBGiABECoLIAAoAqgBIgIEQCAAKAKsASIDIAIiAUcEQANAAkAgA0EEaygCACIBRQ0AIAEgASgCBCIEQQFrNgIEIAQNACABIAEoAgAoAggRAAAgARArCyADQQhrIgMgAkcNAAsgACgCqAEhAQsgACACNgKsASAAKAKwARogARAqCyAALACnAUEASARAIAAoAqQBGiAAKAKcARAqCwJAIAAoAlQiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsCQCAAKAJIIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLIAAoAjQiAgRAIAAoAjgiAyACIgFHBEADQAJAIANBBGsoAgAiAUUNACABIAEoAgQiBEEBazYCBCAEDQAgASABKAIAKAIIEQAAIAEQKwsgA0EIayIDIAJHDQALIAAoAjQhAQsgACACNgI4IAAoAjwaIAEQKgsgACgCGCICBEAgACgCHCIDIAIiAUcEQANAAkAgA0EEaygCACIBRQ0AIAEgASgCBCIEQQFrNgIEIAQNACABIAEoAgAoAggRAAAgARArCyADQQhrIgMgAkcNAAsgACgCGCEBCyAAIAI2AhwgACgCIBogARAqCyAALAAPQQBIBEAgACgCDBogACgCBBAqCyAACy0AIAJFBEAgACgCBCABKAIERg8LIAAgAUYEQEEBDwsgACgCBCABKAIEEIgBRQsNACAAKAIAEMYFGiAACw0AIAAoAgAQzQUaIAALQgEBfyABIAJsIQQgBAJ/IAMoAkxBAEgEQCAAIAQgAxDfAgwBCyAAIAQgAxDfAgsiAEYEQCACQQAgARsPCyAAIAFuC70DAgd/BH4gACkDECEJIAAoAgAhBiAAKAIYIQIgACgCCCIHIQMCQANAIAACfyACQQBKBEAgCSEKIAIMAQtBwAAgAmshAgJ+IANFBEBBACEDIAIhBCAJDAELIAKtIQsCQANAIAAgBkEBaiIINgIAIAYxAAAhCiAAIANBAWsiAzYCCCAAIAogAkEIayIErYYgCYQiCTcDECACQQ9MDQEgC0IIfSILpyECIAghBiADDQALIAMhB0EAIQMgAiEEIAkMAQsgAyEHIAghBiAJCyEKQcAAIARrCyIEQQFrIgI2AhggACAKQgGGIgk3AxAgCkIAWQRAIAVBAWoiBUEVRw0BDAILCyABIAUEfwJAIAQgBUoNACAEQTlKDQBBwQAgBGutIQsDQAJAIAunIQIgB0UEQCACIQQMAQsgACAGQQFqIgM2AgAgBjEAACEMIAAgB0EBayIHNgIIIAAgDCACQQhrIgSthiAJhCIJNwMQIAtCCH0hCyADIQYgAkEPSg0BCwtBwAAgBGshAgsgACACIAVrNgIYIAAgCSAFrYY3AxAgCUHAACAFa62Ip0F/IAV0QX9zagVBAAs2AgALIApCP4inCyAAIAAgACgCGEUgAXIiATYCECAAKAIUIAFxBEAQbAALC8wBAQJ/IwBBEGsiAyQAIAEgAhBJIgRB////B3E2AmQgASAEQRh2OgBhIAEgASgCIEEEajYCIAJAIAItABRBAUYEQCADQQA6AAQgA0EAOgAPIABBAkHkACADQQRqEC8aIAMsAA9BAE4NASADKAIMGiADKAIEECoMAQsgAEGQpQUpAgA3AgAgAEEIaiEAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAELIABBmKUFKAIAQZylBSgCABAuCyADQRBqJAALdQEBfiAAIAEgBH4gAiADfnwgA0IgiCICIAFCIIgiBH58IANC/////w+DIgMgAUL/////D4MiAX4iBUIgiCADIAR+fCIDQiCIfCABIAJ+IANC/////w+DfCIBQiCIfDcDCCAAIAVC/////w+DIAFCIIaENwMACxgAIAAtAABBIHFFBEAgASACIAAQ3wIaCwuoAQACQCABQYAITgRAIABEAAAAAAAA4H+iIQAgAUH/D0kEQCABQf8HayEBDAILIABEAAAAAAAA4H+iIQBB/RcgASABQf0XTxtB/g9rIQEMAQsgAUGBeEoNACAARAAAAAAAAGADoiEAIAFBuHBLBEAgAUHJB2ohAQwBCyAARAAAAAAAAGADoiEAQfBoIAEgAUHwaE0bQZIPaiEBCyAAIAFB/wdqrUI0hr+iC30BA38gACAAKAIQQQF0IgI2AhAgACAALwEUQQFqIgE7ARQCQCABwUEASA0AIABB+P8DOwEUIAAoAgQiASAAKAIITw0AIAAgAUEBajYCBCAAIAIgAS0AAHIiAjYCEAsgACgCDEEHdCIBIAJNBH8gACACIAFrNgIQQQEFQQALC3cBA38gARBYIgJB+P///wdJBEACQAJAIAJBC08EQCACQQdyQQFqIgQQLCEDIAAgBEGAgICAeHI2AgggACADNgIAIAAgAjYCBAwBCyAAIAI6AAsgACEDIAJFDQELIAMgASACEDcaCyACIANqQQA6AAAgAA8LEDgAC4MBAQN/AkACQCABKAKAASIDRQ0AIAFBgAFqIgQhAQNAIAEgAyADKAIQIAJJIgUbIQEgAyAFQQJ0aigCACIDDQALIAEgBEYNACABKAIQIAJNDQELIABCADcCAA8LIAAgASgCFDYCACAAIAEoAhgiADYCBCAABEAgACAAKAIEQQFqNgIECwttAQJ/IwBBEGsiBSQAIAUgAjYCDCAFIAQ2AgggBUEEaiAFQQxqEKcBIQYgACABIAMgBSgCCBDaAiEBIAYoAgAiAARAQeivBigCABogAARAQeivBkHwrgYgACAAQX9GGzYCAAsLIAVBEGokACABC+0BAQJ/An8gAC0AC0EHdgRAIAAoAgQMAQsgAC0AC0H/AHELIQQCQCACIAFrQQVIDQAgBEUNACABIAIQxQIgAkEEayEEAn8gAC0AC0EHdgRAIAAoAgQMAQsgAC0AC0H/AHELAn8gAC0AC0EHdgRAIAAoAgAMAQsgAAsiAmohBQJAA0ACQCACLAAAIQAgASAETw0AAkAgAEEATA0AIABB/wBODQAgACABKAIARw0DCyABQQRqIQEgAiAFIAJrQQFKaiECDAELCyAAQQBMDQEgAEH/AE4NASACLAAAIAQoAgBBAWtLDQELIANBBDYCAAsLugEBAn8jAEEQayICJAAgAC0AC0EHdgRAIAAoAggaIAAoAgBBARC/AQsCfyABLQALQQd2BEAgASgCBAwBCyABLQALCxogAS0AC0EHdiEDIAAgASgCCDYCCCAAIAEpAgA3AgAgASABLQALQYABcToACyABIAEtAAtB/wBxOgALIAJBADoADyABIAItAA86AAACQCAAIAFGIgENACADDQALIAAtAAtBB3YhAAJAIAENACAADQALIAJBEGokAAvWAQEFfyMAQRBrIgIkACACQQhqIAAQcxoCQCACLQAIRQ0AIAJBBGoiBCAAIAAoAgBBDGsoAgBqKAIc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IAMgAigCCCIANgIIIAAgACgCACACR0ECdGogAzYCACADIAI2AgQgAiADNgIIDwsCQCADRQ0AIAMtAAxBAUYNACADQQxqIQMMAQsCQCABIAQoAgAiA0cEQCAEIQMMAQsgBCADKAIEIgA2AgAgAARAIAAgBDYCCCAEKAIIIQILIAMgAjYCCCACIAIoAgAgBEdBAnRqIAM2AgAgAyAENgIEIAQgAzYCCCADKAIIIQILIANBAToADCACQQA6AAwgAiACKAIEIgEoAgAiADYCBCAABEAgACACNgIICyABIAIoAggiADYCCCAAIAAoAgAgAkdBAnRqIAE2AgAgASACNgIAIAIgATYCCAwCCyAEQQE6AAwgAiAAIAJGOgAMIANBAToAACACIgEgAEcNAAsLC9MJAgR/BX4jAEHwAGsiBiQAIARC////////////AIMhCQJAAkAgAVAiBSACQv///////////wCDIgpCgICAgICAwP//AH1CgICAgICAwICAf1QgClAbRQRAIANCAFIgCUKAgICAgIDA//8AfSILQoCAgICAgMCAgH9WIAtCgICAgICAwICAf1EbDQELIAUgCkKAgICAgIDA//8AVCAKQoCAgICAgMD//wBRG0UEQCACQoCAgICAgCCEIQQgASEDDAILIANQIAlCgICAgICAwP//AFQgCUKAgICAgIDA//8AURtFBEAgBEKAgICAgIAghCEEDAILIAEgCkKAgICAgIDA//8AhYRQBEBCgICAgICA4P//ACACIAEgA4UgAiAEhUKAgICAgICAgIB/hYRQIgUbIQRCACABIAUbIQMMAgsgAyAJQoCAgICAgMD//wCFhFANASABIAqEUARAIAMgCYRCAFINAiABIAODIQMgAiAEgyEEDAILIAMgCYRCAFINACABIQMgAiEEDAELIAMgASABIANUIAkgClYgCSAKURsiCBshCiAEIAIgCBsiDEL///////8/gyEJIAIgBCAIGyILQjCIp0H//wFxIQcgDEIwiKdB//8BcSIFRQRAIAZB4ABqIAogCSAKIAkgCVAiBRt5IAVBBnStfKciBUEPaxCGASAGKQNoIQkgBikDYCEKQRAgBWshBQsgASADIAgbIQMgC0L///////8/gyEBIAcEfiABBSAGQdAAaiADIAEgAyABIAFQIgcbeSAHQQZ0rXynIgdBD2sQhgFBECAHayEHIAYpA1AhAyAGKQNYC0IDhiADQj2IhEKAgICAgICABIQhASAJQgOGIApCPYiEIQ0gAiAEhSEEAn4gA0IDhiICIAUgB0YNABogBSAHayIHQf8ASwRAQgAhAUIBDAELIAZBQGsgAiABQYABIAdrEIYBIAZBMGogAiABIAcQ3QEgBikDOCEBIAYpAzAgBikDQCAGKQNIhEIAUq2ECyEJIA1CgICAgICAgASEIQsgCkIDhiEKAkAgBEIAUwRAQgAhA0IAIQQgCSAKhSABIAuFhFANAiAKIAl9IQIgCyABfSAJIApWrX0iBEL/////////A1YNASAGQSBqIAIgBCACIAQgBFAiBxt5IAdBBnStfKdBDGsiBxCGASAFIAdrIQUgBikDKCEEIAYpAyAhAgwBCyAJIAp8IgIgCVStIAEgC3x8IgRCgICAgICAgAiDUA0AIAlCAYMgBEI/hiACQgGIhIQhAiAFQQFqIQUgBEIBiCEECyAMQoCAgICAgICAgH+DIQMgBUH//wFOBEAgA0KAgICAgIDA//8AhCEEQgAhAwwBC0EAIQcCQCAFQQBKBEAgBSEHDAELIAZBEGogAiAEIAVB/wBqEIYBIAYgAiAEQQEgBWsQ3QEgBikDACAGKQMQIAYpAxiEQgBSrYQhAiAGKQMIIQQLIARCPYYgAkIDiIQhASAEQgOIQv///////z+DIAetQjCGhCADhCEEAkACQCACp0EHcSIFQQRHBEAgBCABIAEgBUEES618IgNWrXwhBAwBCyAEIAEgASABQgGDfCIDVq18IQQMAQsgBUUNAQsLIAAgAzcDACAAIAQ3AwggBkHwAGokAAuQAgEGfwJAIAEEQCAAKAIsIgIgACgCKCIFayIEQQJ1IgNBD00EQCAAKAIwIgYgAksEQCACIAE2AgAgACACQQRqNgIsDwtB/////wMgBiAFayIGQQF1IgcgA0EBaiIDIAMgB0kbIAZB/P///wdPGyIDQYCAgIAETw0CIANBAnQiAxAsIgYgBGoiBCABNgIAIARBBGohASACIAVHBEADQCAEQQRrIgQgAkEEayICKAIANgIAIAIgBUcNAAsLIAAgAyAGajYCMCAAIAE2AiwgACAENgIoIAUEQCAFECoLIAAgATYCLA8LIAEoAhQQKiABKAIgIgAEQCABIAA2AiQgASgCKBogABAqCyABECoLDwsQTwALiQUBBX8jAEGgAWsiAyQAIANBoNMDNgIYIANBtNMDNgJQIANBxNMDKAIAIgQ2AhAgA0EQaiIFIARBDGsoAgBqQcjTAygCADYCACADQQA2AhQgBSADKAIQQQxrKAIAaiIEIANBHGoiBhA+IARCgICAgHA3AkggA0HM0wMoAgAiBDYCGCADQRhqIgcgBEEMaygCAGpB0NMDKAIANgIAIANBwNMDKAIAIgQ2AhAgBSAEQQxrKAIAakHU0wMoAgA2AgAgA0G00wM2AlAgA0GM0wM2AhAgA0Gg0wM2AhggBhA/IgRB8MsDNgIAIANCADcCRCADQgA3AjwgA0EYNgJMIAcgAiACEFgQLUGeqgFBEhAtIAEtAGEQQkHfHEEXEC0aAkACfyADKAJMIgFBEHEEQCADKAJIIgEgAygCNCICSQRAIAMgAjYCSCACIQELIANBMGoMAQsgAUEIcUUEQEEAIQEgA0EAOgAPIANBBGohAgwCCyADKAIsIQEgA0EkagshAgJAIAEgAigCACIFayIBQfj///8HSQRAIAFBC08EQCABQQdyQQFqIgYQLCECIAMgBkGAgICAeHI2AgwgAyACNgIEIAMgATYCCAwCCyADIAE6AA8gA0EEaiECIAENAUEAIQEMAgsQOAALIAIgBSABEDcaCyABIAJqQQA6AAAgAEEEQboXIANBBGoQLxogAywAD0EASARAIAMoAgwaIAMoAgQQKgsgA0G80wMoAgAiADYCECAAQQxrKAIAIANBEGpqQdzTAygCADYCACADQeDTAygCADYCGCAEQfDLAzYCACADLABHQQBIBEAgAygCRBogAygCPBAqCyAEED0aIANB0ABqEDsaIANBoAFqJAALoAIBB38CQAJAIAAoAmwiAiABIAAoAnAiAyACa0ECdRDLAyICIAMgAhsiBiAAKAJwIgJGBEACQCAAKAJ0IgQgBksEQCACIAE2AgAgAkEEaiEBDAELIAYgACgCbCIDa0ECdSIIQQFqIgVBgICAgARPDQJB/////wMgBCADayIEQQF1IgcgBSAFIAdJGyAEQfz///8HTxsiBAR/IARBgICAgARPDQQgBEECdBAsBUEACyIHIAhBAnRqIgUgATYCACAFQQRqIQEgAyAGRwRAA0AgBUEEayIFIAJBBGsiAigCADYCACACIANHDQALCyAAIAcgBEECdGo2AnQgACABNgJwIAAgBTYCbCADRQ0AIAMQKgsgACABNgJwCw8LEDYACxBPAAs+AQJ/IAAEQAJAIAAoAgQiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsgABAqCwt4AQZ/IAEoAgQgASgCACIDayICIAAoAgwiBGoiBiAAKAIEIAAoAgAiBWsiB0sEQCAAIAYgB2sQZSAAKAIMIQQgACgCACEFIAEoAgQgASgCACIDayECCyAEIAVqIAMgAhAyGiAAIAAoAgwgASgCBCABKAIAa2o2AgwLBABBAgu4AgEEfyMAQSBrIgIkACACQQA2AhggAkIANwMQAkAgASgCEARAA0AgAUEBEIsBRQRAIABCADcCACAAQQA2AggMAwsgASgCACEEIAEoAgQiAwRAIAMgAygCBEEBajYCBAsCfyAEIAJBD2pBASAEKAIAKAIQEQQARQRAIAEQogEgAEEANgIIIABCADcCAEEBDAELQQIgAiwADyIERQ0AGiACQRBqIAQQhgJBAAshBAJAIANFDQAgAyADKAIEIgVBAWs2AgQgBQ0AIAMgAygCACgCCBEAACADECsLIARFDQALIARBAkcNASAAIAIpAxA3AgAgACACKAIYNgIIIAJBADYCGCACQgA3AxAMAQsgAEIANwIAIABBADYCCAsgAiwAG0EASARAIAIoAhgaIAIoAhAQKgsgAkEgaiQAC4EBAQN/IwBBEGsiAyQAIAAtAAsiBUH/AHEhBAJAIAJBCk0EQCAAIAVBgAFxIAJB/wBxcjoACyAAIAAtAAtB/wBxOgALIAEgAiAAELEBIANBADoADyAAIAJqIAMtAA86AAAMAQsgAEEKIAJBCmsgBEEAIAQgAiABEMICCyADQRBqJAALZAAgAigCBEGwAXEiAkEgRgRAIAEPCwJAIAJBEEcNAAJAAkAgAC0AACICQStrDgMAAQABCyAAQQFqDwsgASAAa0ECSA0AIAJBMEcNACAALQABQSByQfgARw0AIABBAmohAAsgAAs9AQJ/An8gAC0AC0EHdgRAIAAoAgAMAQsgAAshASMAQRBrIgAkACAAIAE2AgwgACgCDCECIABBEGokACACC38CAn8BfiMAQRBrIgMkACAAAn4gAUUEQEIADAELIAMgASABQR91IgJzIAJrIgKtQgAgAmciAkHRAGoQhgEgAykDCEKAgICAgIDAAIVBnoABIAJrrUIwhnwgAUGAgICAeHGtQiCGhCEEIAMpAwALNwMAIAAgBDcDCCADQRBqJAALOgAgAiADNgIMIAAgASACIAIoAgQgAigCACADamtBACABKAIAKAIwEQcAIAIgAigCBCACKAIAazYCDAunAQECfyMAQRBrIgQkAAJAIAEoAjQiBUUEQCAEQQA6AAQgBEEAOgAPIABBAkHsACAEQQRqEC8aIAQsAA9BAE4NASAEKAIMGiAEKAIEECoMAQsgASgCPEUEQCAEQQA6AAQgBEEAOgAPIABBAkHtACAEQQRqEC8aIAQsAA9BAE4NASAEKAIMGiAEKAIEECoMAQsgACAFIAIgAUE8aiADEN0FCyAEQRBqJAALewEDfyMAQRBrIgQkACAAKAIEIQMCQCAAKAIIQf////8HcSIFIAJLBEAgACgCACEDIAAgAjYCBCABIAIgAxCxASAEQQA6AA8gAiADaiAELQAPOgAADAELIAAgBUEBayACIAVrQQFqIANBACADIAIgARDCAgsgBEEQaiQAC9YBAQV/IwBBEGsiAiQAIAJBCGogABBzGgJAIAItAAhFDQAgAkEEaiIEIAAgACgCAEEMaygCAGooAhwiAzYCACADQezOBkcEQCADIAMoAgRBAWo2AgQLIARB5M0GEEMhAyAEEEcgAiAAIAAoAgBBDGsoAgBqKAIYNgIAIAAgACgCAEEMaygCAGoiBRCUAiEGIAIgAyACKAIAIAUgBiABIAMoAgAoAiARHgA2AgQgBCgCAA0AIAAgACgCAEEMaygCAGpBBRCjAQsgAkEIahByIAJBEGokACAAC/QFAQZ/IwBBEGsiCCQAIAAoAlQiBUUEQEGIARAsIgZCADcCBCAGQejXBDYCACAGQRBqIgVCADcDCCAFQgA3AxAgBUIANwMYIAVBADYCICAFQdS9BDYCACAGQgA3AjwgBkIANwI0IAZCfzcDSCAGQn83A1AgBkEANgJ0IAZCADcDWCAGQgA3A2AgBkIANwNoIAZBADsBcCAFQcTJBDYCACAGQQA2AoABIAZCADcCeCAGQebKycsGNgIgIAAgBTYCVCAAKAJYIQQgACAGNgJYAn8CQAJAAkACQCAERQRAIAAoAiwhByAIIAY2AgwgCCAFNgIIDAELIAQgBCgCBCIFQQFrNgIEIAVFBEAgBCAEKAIAKAIIEQAAIAQQKwsgACgCLCEHIAAoAlQhBSAIIAAoAlgiBjYCDCAIIAU2AgggBkUNAQsgBiAGKAIEQQFqNgIEIAdBKGohBCAHKAIoIgkgBygCLE8NAiAJIAY2AgQgCSAFNgIAIAYgBigCBEEBajYCBAwBCyAHQShqIQQgBygCKCIJIAcoAixPDQEgCUEANgIEIAkgBTYCAAsgCUEIagwBCyAHQSRqIAhBCGoQYQshBSAEIAU2AgACQCAIKAIMIgRFDQAgBCAEKAIEIgVBAWs2AgQgBQ0AIAQgBCgCACgCCBEAACAEECsLIAAoAlQhBQsjAEFAaiIEJAAgBEIANwMYIARCADcDICAEQQA2AiggBCACNgIYIARCADcDECAEQQA2AjwgBEIANwI0IAQgATYCMCAEQdS9BDYCCCADIARBNGoiAEcEQCAAIAMoAgAiASADKAIEIgAgACABa0ECdRDXAQsgBQJ/IAUoAmwiACAFKAJwSQRAIAAgBEEIahCJAiAAQThqDAELIAVB6ABqIARBCGoQqwMLNgJsIAQoAjQiAARAIAQgADYCOCAEKAI8GiAAECoLIARB1L0ENgIIIAQoAhwiAARAIAQgADYCICAEKAIkGiAAECoLIARBQGskACAIQRBqJAALywEBBX8gACgCDCABKAIEIgMgASwACyICIAJBAEgbakEBaiIFIAAoAgQgACgCAGsiBksEQCAAIAUgBmsQZSABKAIEIQMgAS0ACyECCyADIAIgAsBBAEgiAhsEQANAIAEoAgAgASACGyAEai0AACECIAAgACgCDCIDQQFqNgIMIAMgACgCAGogAjoAACABLAALIgNBH3YhAiAEQQFqIgQgASgCBCADIANBAEgbSQ0ACwsgACAAKAIMIgFBAWo2AgwgASAAKAIAakEAOgAACyAAIwBBEGsiASQAIABCADcCACAAQQA2AgggAUEQaiQACyEBAX8gAEEANgIQIAAoAggiAQRAIAEQogELIABBAToAFAsOACAAIAAoAhAgAXIQegs1ACAAQQA6AAQgAEEEOgALIAAgAToAAyAAIAFBCHY6AAIgACABQRB2OgABIAAgAUEYdjoAAAtXAQR/AkAgACgCQCICRQ0AIABBQGsiBCEAA0AgACACIAIoAhAgAUgiBRshACACIAVBAnRqKAIAIgINAAsgACAERg0AIAAoAhAgAUoNACAAKAIgIQMLIAMLVwEEfwJAIAAoAkAiAkUNACAAQUBrIgQhAANAIAAgAiACKAIQIAFIIgUbIQAgAiAFQQJ0aigCACICDQALIAAgBEYNACAAKAIQIAFKDQAgACgCHCEDCyADCz0BAX9B6K8GKAIAIQIgASgCACIBBEBB6K8GQfCuBiABIAFBf0YbNgIACyAAQX8gAiACQfCuBkYbNgIAIAALRwECfyAAIAE3A3AgACAAKAIsIAAoAgQiA2usNwN4IAAoAgghAgJAIAFQDQAgAiADa6wgAVcNACADIAGnaiECCyAAIAI2AmgLmQIBA38gAyAAKAIIIgQgACgCACIFa00EQCADIAAoAgQiBCAFayIGSwRAIAQgBUcEQCAFIAEgBhA3GiAAKAIEIQQLIAIgASAGaiIBayEDIAEgAkcEQCAEIAEgAxA3GgsgACADIARqNgIEDwsgAiABayEDIAEgAkcEQCAFIAEgAxA3GgsgACADIAVqNgIEDwsgBQRAIAAgBTYCBCAFECogAEEANgIIIABCADcCAEEAIQQLIANBAE4EQCAAQf////8HIARBAXQiBSADIAMgBUkbIARB/////wNPGyIEECwiAzYCBCAAIAM2AgAgACADIARqNgIIIAIgAWshBCABIAJHBEAgAyABIAQQMhoLIAAgAyAEajYCBA8LEDYAC4MCAQd/IAEgACgCCCICIAAoAgQiA2tBAnVNBEAgACABBH8gA0EAIAFBAnQiABA0IABqBSADCzYCBA8LAkAgAyAAKAIAIgVrQQJ1IgcgAWoiBEGAgICABEkEQEH/////AyACIAVrIgJBAXUiCCAEIAQgCEkbIAJB/P///wdPGyIEBEAgBEGAgICABE8NAiAEQQJ0ECwhBgsgB0ECdCAGaiICQQAgAUECdCIBEDQgAWohASADIAVHBEADQCACQQRrIgIgA0EEayIDKAIANgIAIAMgBUcNAAsLIAAgBiAEQQJ0ajYCCCAAIAE2AgQgACACNgIAIAUEQCAFECoLDwsQNgALEE8AC7oBAQJ/IwBBEGsiAiQAIAAtAAtBB3YEQCAAKAIIGiAAKAIAQQQQvwELAn8gAS0AC0EHdgRAIAEoAgQMAQsgAS0ACwsaIAEtAAtBB3YhAyAAIAEoAgg2AgggACABKQIANwIAIAEgAS0AC0GAAXE6AAsgASABLQALQf8AcToACyACQQA2AgwgASACKAIMNgIAAkAgACABRiIBDQAgAw0ACyAALQALQQd2IQACQCABDQAgAA0ACyACQRBqJAALsgIBBH8jAEEQayIHJAAgByABNgIMQQAhAUEGIQUCQAJAIAAgB0EMahBdDQBBBCEFIANBwAACfyAAKAIAIgYoAgwiCCAGKAIQRgRAIAYgBigCACgCJBEBAAwBCyAIKAIACyIGIAMoAgAoAgwRBABFDQAgAyAGQQAgAygCACgCNBEEACEBA0ACQCAAEHYaIAFBMGshASAAIAdBDGoQXQ0AIARBAkgNACADQcAAAn8gACgCACIFKAIMIgYgBSgCEEYEQCAFIAUoAgAoAiQRAQAMAQsgBigCAAsiBSADKAIAKAIMEQQARQ0DIARBAWshBCADIAVBACADKAIAKAI0EQQAIAFBCmxqIQEMAQsLQQIhBSAAIAdBDGoQXUUNAQsgAiACKAIAIAVyNgIACyAHQRBqJAAgAQvQAgEEfyMAQRBrIgckACAHIAE2AgxBACEBQQYhBQJAAkAgACAHQQxqEF4NAEEEIQUCfyAAKAIAIgYoAgwiCCAGKAIQRgRAIAYgBigCACgCJBEBAAwBCyAILQAAC8AiBkEATgR/IAMoAgggBkECdGooAgBBwABxQQBHBUEAC0UNACADIAZBACADKAIAKAIkEQQAIQEDQAJAIAAQdxogAUEwayEBIAAgB0EMahBeDQAgBEECSA0AAn8gACgCACIFKAIMIgYgBSgCEEYEQCAFIAUoAgAoAiQRAQAMAQsgBi0AAAvAIgVBAE4EfyADKAIIIAVBAnRqKAIAQcAAcUEARwVBAAtFDQMgBEEBayEEIAMgBUEAIAMoAgAoAiQRBAAgAUEKbGohAQwBCwtBAiEFIAAgB0EMahBeRQ0BCyACIAIoAgAgBXI2AgALIAdBEGokACABC8ABAQR/IwBBEGsiBCQAIAQgATYCDCAEIAM2AgggBEEEaiAEQQxqEKcBIQcgBCgCCCEDIwBBEGsiASQAIAEgAzYCDCABIAM2AghBfyEFAkBBAEEAIAIgAxDaAiIDQQBIDQAgACADQQFqIgMQVSIANgIAIABFDQAgACADIAIgASgCDBDaAiEFCyABQRBqJAAgBygCACIABEBB6K8GKAIAGiAABEBB6K8GQfCuBiAAIABBf0YbNgIACwsgBEEQaiQAIAULLgACQCAAKAIEQcoAcSIABEAgAEHAAEYEQEEIDwsgAEEIRw0BQRAPC0EADwtBCgvkAQIEfgJ/IwBBEGsiBiQAIAG9IgVC/////////weDIQIgAAJ+IAVCNIhC/w+DIgNCAFIEQCADQv8PUgRAIAJCBIghBCADQoD4AHwhAyACQjyGDAILIAJCBIghBEL//wEhAyACQjyGDAELIAJQBEBCACEDQgAMAQsgBiACQgAgBadnQSBqIAJCIIinZyACQoCAgIAQVBsiB0ExahCGAUGM+AAgB2utIQMgBikDCEKAgICAgIDAAIUhBCAGKQMACzcDACAAIAVCgICAgICAgICAf4MgA0IwhoQgBIQ3AwggBkEQaiQAC4EBAQJ/IwBBEGsiBCQAIwBBIGsiAyQAIANBGGogACAAIAFqEM0CIANBEGogAygCGCADKAIcIAIQvgUgAyAAIAMoAhAgAGtqNgIMIAMgAiADKAIUIAJrajYCCCAEIAMoAgw2AgggBCADKAIINgIMIANBIGokACAEKAIMGiAEQRBqJAALJgEBfyMAQRBrIgIkACACIAE2AgxByKIFIAAgARDeBSACQRBqJAAL0QkBB38CQAJAAkACQAJAAkAgAg4EBAABAgMLQQAhAkHYiwMoAgAoAgwhAwNAIAAgAyACQQF0aiIFLQABQQN0aiAFLQAAaiABIAJqLQAAOgAAIAAgAyACQQFyIgVBAXRqIgYtAAFBA3RqIAYtAABqIAEgBWotAAA6AAAgAkECaiICQcAARw0ACwwECyAAQQFqIQVB2IsDKAIAKAIMIQYDQCAAIAYgA0EBdGoiAi0AAEEBdGogAi0AAUEFdGogASADaiIHLQAAIgg6AAAgBSACLQAAQQF0aiACLQABQQV0aiAIOgAAIAAgAi0AAEEBdGogAi0AAUEFdGogBy0AACIHOgAQIAUgAi0AAEEBdGogAi0AAUEFdGogBzoAECADQQFqIgNBwABHDQALDAMLIABBA2ohBSAAQQJqIQYgAEEBaiEHQdiLAygCACgCDCEJA0AgACAJIAhBAXRqIgItAABBAnRqIAItAAFBB3RqIAEgCGoiAy0AACIEOgAAIAcgAi0AAEECdGogAi0AAUEHdGogBDoAACAGIAItAABBAnRqIAItAAFBB3RqIAMtAAAiBDoAACAFIAItAABBAnRqIAItAAFBB3RqIAQ6AAAgACACLQAAQQJ0aiACLQABQQd0aiADLQAAIgQ6ACAgByACLQAAQQJ0aiACLQABQQd0aiAEOgAgIAYgAi0AAEECdGogAi0AAUEHdGogAy0AACIEOgAgIAUgAi0AAEECdGogAi0AAUEHdGogBDoAICAAIAItAABBAnRqIAItAAFBB3RqIAMtAAAiBDoAQCAHIAItAABBAnRqIAItAAFBB3RqIAQ6AEAgBiACLQAAQQJ0aiACLQABQQd0aiADLQAAIgQ6AEAgBSACLQAAQQJ0aiACLQABQQd0aiAEOgBAIAAgAi0AAEECdGogAi0AAUEHdGogAy0AACIEOgBgIAcgAi0AAEECdGogAi0AAUEHdGogBDoAYCAGIAItAABBAnRqIAItAAFBB3RqIAMtAAAiAzoAYCAFIAItAABBAnRqIAItAAFBB3RqIAM6AGAgCEEBaiIIQcAARw0ACwwCC0GdkAFB3fQAQeEGQacpEAEACyAAQdiLAygCACgCCCICLQABQQJ0aiACLQAAaiABLQAAOgAAIAItAAIgACACLQADQQJ0amogAS0AAToAACACLQAEIAAgAi0ABUECdGpqIAEtAAI6AAAgAi0ABiAAIAItAAdBAnRqaiABLQADOgAAIAItAAggACACLQAJQQJ0amogAS0ABDoAACACLQAKIAAgAi0AC0ECdGpqIAEtAAU6AAAgAi0ADCAAIAItAA1BAnRqaiABLQAGOgAAIAItAA4gACACLQAPQQJ0amogAS0ABzoAACACLQAQIAAgAi0AEUECdGpqIAEtAAg6AAAgAi0AEiAAIAItABNBAnRqaiABLQAJOgAAIAItABQgACACLQAVQQJ0amogAS0ACjoAACACLQAWIAAgAi0AF0ECdGpqIAEtAAs6AAAgAi0AGCAAIAItABlBAnRqaiABLQAMOgAAIAItABogACACLQAbQQJ0amogAS0ADToAACACLQAcIAAgAi0AHUECdGpqIAEtAA46AAAgAi0AHiAAIAItAB9BAnRqaiABLQAPOgAACwvqAwEBfwJAAkACQAJAAkACQCABIAlKDQAgASADaiAJTA0AIAIgCkoNACACIANqIApKDQELQQAhAyAJIApyQQBIDQIgACgCfCIBKALkAyAJTA0CIAEoAugDIApM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DC8BQEEBdGsiByAHQR91IgdzIAdrSg0BCyAJQYABaiEHDAELIAlBgAFqIQcgDyAMQYABay8BACINIAtqIAxBQGovAQBBAXRrIg4gDkEfdSIOcyAOa00NACAJIAo7AYACIAkgDTsBACAJIAs7AYABIAogC2shDyANIAtrIQ5BASEKA0AgByAKQQF0Ig1rIAsgCiAObEEgakEGdmo7AQAgByANaiALIAogD2xBIGpBBnZqOwEAIApBAWoiDUHAAEcEQCAHIApBf3NBAXRqIAsgDSAObEEgakEGdmo7AQAgByANQQF0aiALIA0gD2xBIGpBBnZqOwEAIApBAmohCgwBCwtBACADQQF0ayEODAELIAlBgAFqIgsgA0ECdCIKayAMIAprLwEAOwEAIAogC2ogCiAMai8BADsBAEEAIANBAXQiDWshDkEBIA1rIgogDU4NACALIApBAXQiEGogDEECayISIBBqLwEAIAxBAiANayIKQQF0ai8BACIPIAwgEGovAQBBAXRqakECakECdjsBAANAIAsgCkEBdCIQaiAQIBJqLwEAIAwgEEECaiIYai8BACIVIA9BAXRqakECakECdjsBACALIBhqIAwgEGovAQAgDCAKQQJqIgpBAXRqLwEAIg8gFUEBdGpqQQJqQQJ2OwEAIAogDUcNAAsLIAwgDkEBdCIKaiAHIApqIANBA3RBAnIQMhoLIAlBkAJqJAALAkACQAJAAkAgEQ4CAAECC0EBIQsgA0ECTgRAQQAhByADIQgDQCAHIgpBAWohByAIQQNLISIgCEEBdiEIICINAAsgCkECaiELCyADQQBMDQIgA0H+////B3EhGCADQQFxIRUgA0EBayEKIAwgA0F/c0EBdGovAQAhFiAMIANBAXRqLwECIQlBACEIA0AgCiAIayERIAhBAWoiByAWbCENIBMgCCAUbEEBdGohDyAMIAhBf3NBAXRqLwEAIQ5BACEIQQAhECADQQFHBEADQCAPIAhBAXRqIAogCGsgDmwgA2ogCEEBciISIAlsaiARIAwgEkEBdCIXai8BAGxqIA1qIAt1OwEAIA8gF2ogCiASayAObCADaiAIQQJqIgggCWxqIBEgDCAIQQF0ai8BAGxqIA1qIAt1OwEAIBBBAmoiECAYRw0ACwsgFQRAIA8gCEEBdGogCiAIayAObCADaiAIQQFqIggg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QQAhAiAFQQNLBEADQCAJIAovAQA7AQAgCSABQQF0IgdqIgkgCi8BAjsBACAHIAlqIgkgCi8BBDsBACAHIAlqIgkgCi8BBjsBACAHIAlqIQkgCkEIaiEKIAJBBGoiAiALRw0ACwtBACECIAhFDQADQCAJIAovAQA7AQAgCkECaiEKIAkgAUEBdGohCSACQQFqIgIgCEcNAAsLIANBAWoiAyAERw0ACwsLsgwBC38gCEECdCIJQaCJA2ooAgAgBWoiDCAJQZCJA2ooAgAiCWohDiAHQQJ0QZCJA2ooAgAhCgJAAkACQAJAAkAgBw4EAAECAwQLIAxBACAJayINTA0DIARBAEwNAyAGIAlBAXRqIRAgAiAKayERIARB/P///wdxIRIgBEEDcSEPIARBBEkhEwNAIBAgDUEBdGohCiARIAMgDWxqIQlBACELIBNFBEADQCAKIAktAAA7AQAgCiAOQQF0IgJqIgogCS0AATsBACACIApqIgogCS0AAjsBACACIApqIgogCS0AAzsBACACIApqIQogCUEEaiEJIAtBBGoiCyASRw0ACwtBACECIA8EQANAIAogCS0AADsBACAJQQFqIQkgCiAOQQF0aiEKIAJBAWoiAiAPRw0ACwsgDUEBaiINIAxHDQALDAMLIAxBACAJayILTA0CIARBAEwNAiAGIAlBAXRqIQ0gAiAKayEPA0AgDSALQQF0aiEKIA8gAyALbGohCUEAIQIDQCAKIAktAAYgCS0AAUECdCAJLQAAayAJLQACQXZsaiAJLQADQTpsaiAJLQAEQRFsaiAJLQAFQXtsamo7AQAgCUEBaiEJIAogDkEBdGohCiACQQFqIgIgBEcNAAsgC0EBaiILIAxHDQALDAILIAxBACAJayILTA0BIARBAEwNASAGIAlBAXRqIQ0gAiAKayEPA0AgDSALQQF0aiEKIA8gAyALbGohCUEAIQIDQCAKIAktAAFBAnQgCS0AAGsgCS0ABCAJLQADakEobGogCS0ABkECdGogCS0AB2sgCS0ABSAJLQACakF1bGo7AQAgCUEBaiEJIAogDkEBdGohCiACQQFqIgIgBEcNAAsgC0EBaiILIAxHDQALDAELIAxBACAJayILTA0AIARBAEwNACAGIAlBAXRqIQ0gAiAKayEPA0AgDSALQQF0aiEKIA8gAyALbGohCUEAIQID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BiAJbGogAxAyGgsgAEGQpQUpAgA3AgAgAEEIaiEAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAELIABBmKUFKAIAQZylBSgCABAuCyAKLAAbQQBIBEAgCigCGBogCigCEBAqCyAKQSBqJAALPwEBfyMAQSBrIgQkACAEQQxqIAAoAkQgASACIAMQ4AMgBCwAH0EASARAIAQoAhwaIAQoAhQQKgsgBEEgaiQACwwAIABBgoaAIDYAAAsfACABBEAgACABKAIAEMoBIAAgASgCBBDKASABECoLC18BAn8CfyAALQALQQd2BEAgACgCAAwBCyAACwJ/IAAtAAtBB3YEQCAAKAIEDAELIAAtAAtB/wBxC0ECdGohASMAQRBrIgAkACAAIAE2AgwgACgCDCECIABBEGokACACC6wBAQF/AkAgA0GAEHFFDQAgA0HKAHEiBEEIRg0AIARBwABGDQAgAkUNACAAQSs6AAAgAEEBaiEACyADQYAEcQRAIABBIzoAACAAQQFqIQALA0AgAS0AACIEBEAgACAEOgAAIABBAWohACABQQFqIQEMAQsLIAACf0HvACADQcoAcSIBQcAARg0AGkHYAEH4ACADQYCAAXEbIAFBCEYNABpB5ABB9QAgAhsLOgAAC1wBAn8CfyAALQALQQd2BEAgACgCAAwBCyAACwJ/IAAtAAtBB3YEQCAAKAIEDAELIAAtAAtB/wBxC2ohASMAQRBrIgAkACAAIAE2AgwgACgCDCECIABBEGokACACC5oBAgF9An8gALwiAkEXdkH/AXEiA0GVAU0EQCADQf0ATQR9IABDAAAAAJQFAn0gAIsiAEMAAABLkkMAAADLkiAAkyIBQwAAAD9eBEAgACABkkMAAIC/kgwBCyAAIAGSIgAgAUMAAAC/X0UNABogAEMAAIA/kgsiAIwgACACQQBIGwshAAsgAItDAAAAT10EQCAAqA8LQYCAgIB4C+kBAQN/IABFBEBB2KMFKAIAIgAEQCAAEM8BIQELQcCiBSgCACIABEAgABDPASABciEBC0HMrgYoAgAiAARAA0AgACgCTBogACgCFCAAKAIcRwRAIAAQzwEgAXIhAQsgACgCOCIADQALCyABDwsgACgCTEEASCECAkACQCAAKAIUIAAoAhxGDQAgAEEAQQAgACgCJBEEABogACgCFA0AQX8hAQwBCyAAKAIEIgEgACgCCCIDRwRAIAAgASADa6xBASAAKAIoERcAGgtBACEBIABBADYCHCAAQgA3AxAgAEIANwIEIAINAAsgAQujAwAgAEIANwIEIABBADoAmAEgACABNgIUIABCADcDGCAAQgA3AjQgAEIANwJEIABCADcDUCAAQgA3ApwBIABBADYCDCAAQa4gNgIQIABCADcDICAAQgA3AyggAEEAOwEwIABCADcBOiAAQQA6AEwgAEEAOgBYIABBADYCzAEgAEIANwLEASAAQgA3ArwBIABCADcCtAEgAEIANwKsASAAQgA3AqQBIABBlIQFNgIAIABBADYCoAIgAEIANwOYAiAAQQE6ANABIABCADcC1AEgAEIANwDZASAAQgA3A+gBIABCADcD8AEgAEIANwP4ASAAQgA3A4ACIABCADcDiAIgAEEAOgCQAiAAQQE7AaQCIABCADcDqAIgAEIANwOwAiAAQgA3A7gCIABBADYC8AIgAEIANwPoAiAAQoCAgICAgID4PzcDwAIgAEIANwOQASAAQgA3A4gBIABCADcDgAEgAEIANwN4IABCADcDcCAAQgA3A2ggAEIANwNgIABBADYC4AIgAEIANwPYAiAAQgA3A9ACIABCADcDyAIgACACNgIkIAALKgEBfyAAKAJsIgIgASAAKAJwIgEgAmtBAnUQywMiAiABIAIbIAAoAnBHC40BAgJ/AX4gASkCACEFIAFCADcCACAAKAIEIQMgACAFNwIAAkAgA0UNACADIAMoAgQiBEEBazYCBCAEDQAgAyADKAIAKAIIEQAAIAMQKwsgAEEBOgAIIAAgAjYCGAJAIAEoAgQiAEUNACAAIAAoAgQiAUEBazYCBCABDQAgACAAKAIAKAIIEQAAIAAQKwsLTAEBfiABKQIAIQIgAUIANwIAIAAoAgQhASAAIAI3AgACQCABRQ0AIAEgASgCBCIAQQFrNgIEIAANACABIAEoAgAoAggRAAAgARArCwsEAEEEC8YKAQR/IwBBoAFrIgQkAAJAAkACQCABKAIwIAIQ5wEiBUHk0sm7BkYNACAFQezsvcsGRg0AIAVB7sqRywZHDQELIAEoAjAiBSgCVCEGIAUoAlgiBQRAIAUgBSgCBEEBajYCBAsCQCAGRQRAIARBOBAsIgE2AgQgBEK2gICAgIeAgIB/NwIIIAFB5iEpAAA3AAAgAUEAOgA2IAFBlCIpAAA3AC4gAUGOIikAADcAKCABQYYiKQAANwAgIAFB/iEpAAA3ABggAUH2ISkAADcAECABQe4hKQAANwAIIABBAkH1ACAEQQRqEC8aIAQsAA9BAE4NASAEKAIMGiAEKAIEECoMAQsgBEEEaiAGIAJB59qlowYQugECQAJAIAQoAgQiBiAEKAIIRwRAIAIgBigCACIGRw0BCyAEQTgQLCIBNgKUASAEQraAgICAh4CAgH83ApgBIAFB5iEpAAA3AAAgAUEAOgA2IAFBlCIpAAA3AC4gAUGOIikAADcAKCABQYYiKQAANwAgIAFB/iEpAAA3ABggAUH2ISkAADcAECABQe4hKQAANwAIIABBAkH1ACAEQZQBahAvGiAELACfAUEATg0BIAQoApwBGiAEKAKUARAqDAELIAAgASAGIAMQ1QELIAQoAgQiAEUNACAEIAA2AgggBCgCDBogABAqCyAFRQ0BIAUgBSgCBCIAQQFrNgIEIAANASAFIAUoAgAoAggRAAAgBRArDAELAkACQAJAAkACQCABKAIUIgVFDQAgAUEUaiIGIQEDQCABIAUgBSgCECACSSIHGyEBIAUgB0ECdGooAgAiBQ0ACyABIAZGDQAgASgCECACSw0AIAMgAjYCACAAQZClBSkCADcCACAAQQhqIQBBo6UFLAAAQQBIDQEgAEGYpQUpAgA3AgAgAEGgpQUoAgA2AggMBQsgBEGg0wM2AgwgBEG00wM2AkQgBEHE0wMoAgAiATYCBCAEQQRqIgMgAUEMaygCAGpByNMDKAIANgIAIARBADYCCCADIAQoAgRBDGsoAgBqIgEgBEEQaiIFED4gAUKAgICAcDcCSCAEQczTAygCACIBNgIMIARBDGoiBiABQQxrKAIAakHQ0wMoAgA2AgAgBEHA0wMoAgAiATYCBCADIAFBDGsoAgBqQdTTAygCADYCACAEQbTTAzYCRCAEQYzTAzYCBCAEQaDTAzYCDCAFED8iA0HwywM2AgAgBEIANwI4IARCADcCMCAEQRg2AkAgBkHRqwFBCxAtIAIQPEH0xAFBIxAtGgJ/IAQoAkAiAUEQcQRAIAQoAjwiBSAEKAIoIgFJBEAgBCABNgI8IAEhBQsgBEEkagwBCyABQQhxRQRAQQAhBSAEQQA6AJ8BIARBlAFqIQEMBQsgBCgCICEFIARBGGoLIQEgBSABKAIAIgJrIgVB+P///wdPDQEgBUELTwRAIAVBB3JBAWoiBhAsIQEgBCAGQYCAgIB4cjYCnAEgBCABNgKUASAEIAU2ApgBDAMLIAQgBToAnwEgBEGUAWohASAFDQJBACEFDAMLIABBmKUFKAIAQZylBSgCABAuDAMLEDgACyABIAIgBRA3GgsgASAFakEAOgAAIABBAkHQDyAEQZQBahAvGiAELACfAUEASARAIAQoApwBGiAEKAKUARAqCyAEQbzTAygCACIANgIEIABBDGsoAgAgBEEEampB3NMDKAIANgIAIARB4NMDKAIANgIMIANB8MsDNgIAIAQsADtBAEgEQCAEKAI4GiAEKAIwECoLIAMQPRogBEHEAGoQOxoLIARBoAFqJAALQgEDfyMAQRBrIgEkACABIAA2AgwgASgCDCECIwBBEGsiACQAIAAgAjYCDCAAKAIMIQMgAEEQaiQAIAFBEGokACADC7UCAQN/IAMgACgCCCIEIAAoAgAiBWtBAnVNBEAgAyAAKAIEIgQgBWsiBkECdUsEQCAEIAVHBEAgBSABIAYQNxogACgCBCEECyACIAEgBmoiAWshAyABIAJHBEAgBCABIAMQNxoLIAAgAyAEajYCBA8LIAIgAWshAyABIAJHBEAgBSABIAMQNxoLIAAgAyAFajYCBA8LIAUEQCAAIAU2AgQgBRAqIABBADYCCCAAQgA3AgBBACEECwJAIANBgICAgARPDQBB/////wMgBEEBdSIFIAMgAyAFSRsgBEH8////B08bIgNBgICAgARPDQAgACADQQJ0IgQQLCIDNgIEIAAgAzYCACAAIAMgBGo2AgggAiABayEEIAEgAkcEQCADIAEgBBAyGgsgACADIARqNgIEDwsQNgALOAAgAC0AC0EHdgRAIAAgATYCBA8LIAAgAC0AC0GAAXEgAUH/AHFyOgALIAAgAC0AC0H/AHE6AAsLdgEBfyMAQRBrIgIkACACIAA2AgwCQCAAIAFGDQADQCACIAFBAWsiATYCCCAAIAFPDQEgAigCDCIALQAAIQEgACACKAIIIgAtAAA6AAAgACABOgAAIAIgAigCDEEBaiIANgIMIAIoAgghAQwACwALIAJBEGokAAsoACAAQRh0IABBgP4DcUEIdHIgAEEI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BEAgAygCSCICIAMoAjQiAUkEQCADIAE2AkggASECCyADQTBqDAELIAFBCHFFBEBBACECIABBADoACwwCCyADKAIsIQIgA0EkagshAQJAIAIgASgCACIEayICQfj///8HSQRAIAJBC08EQCACQQdyQQFqIgUQLCEBIAAgBUGAgICAeHI2AgggACABNgIAIAAgAjYCBCABIQAMAgsgACACOgALIAINAUEAIQIMAgsQOAALIAAgBCACEDcaCyAAIAJqQQA6AAAgA0Hs1QMoAgAiADYCGCAAQQxrKAIAIANBGGpqQfjVAygCADYCACAGQfDLAzYCACADLABHQQBIBEAgAygCRBogAygCPBAqCyAGED0aIANB0ABqEDsaIANBoAFqJAALwgMBCH8CQAJAIAAoAgQiAiAAKAIAIgRrQQxtIgdBAWoiA0HWqtWqAUkEQEHVqtWqASAAKAIIIARrQQxtIgVBAXQiBiADIAMgBkkbIAVBqtWq1QBPGyIFBEAgBUHWqtWqAU8NAiAFQQxsECwhCAsgCCAHQQxsaiIDQQA2AgggA0IANwIAIAEoAgQiBiABKAIAIgdHBEAgBiAHayIBQQBIDQMgAyABECwiBjYCACADIAEgBmoiCTYCCCAGIAcgARAyGiADIAk2AgQLIAggBUEMbGohByADQQxqIQgCQCACIARGBEAgAyEBDAELA0AgA0EEayIGQQA2AgAgA0EMayIBIAJBDGsiBSgCADYCACADQQhrIAJBCGsoAgA2AgAgBiACQQRrIgIoAgA2AgAgAkEANgIAIAVCADcCACABIQMgBSICIARHDQALIAAoAggaIAAoAgQhAiAAKAIAIQQLIAAgBzYCCCAAIAg2AgQgACABNgIAIAIgBEcEQANAIAJBDGsiACgCACIBBEAgAkEIayABNgIAIAJBBGsoAgAaIAEQKgsgACICIARHDQALCyAEBEAgBBAqCyAIDwsQNgALEE8ACxA2AAvOAQEBfyABKAL0AiECAkAgASgC+AIiAUUEQCAAQQA2AgQgACACNgIADAELIAEgASgCBEEBajYCBCAAIAE2AgQgACACNgIAIAEgASgCBEEBajYCBAsgAEGQpQUpAgA3AgggAEEQaiEAAkBBo6UFLAAAQQBOBEAgAEGYpQUpAgA3AgAgAEGgpQUoAgA2AggMAQsgAEGYpQUoAgBBnKUF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ARogBigCoAEQKgsgBigCsAEiAEUNACAAIAAoAgQiAUEBazYCBCABDQAgACAAKAIAKAIIEQAAIAAQKwsgBiwAzwFBAEgEQCAGKALMARogBigCxAEQKgsCQCAGKAK4ASIARQ0AIAAgACgCBCIBQQFrNgIEIAENACAAIAAoAgAoAggRAAAgABArCwJAIAYoAvwBIgBFDQAgACAAKAIEIgFBAWs2AgQgAQ0AIAAgACgCACgCCBEAACAAECsLIAZBgAJqJAAPCxA2AAtSAQF/IAEEQCAAIAEoAgAQhAIgACABKAIEEIQCAkAgASgCGCIARQ0AIAAgACgCBCICQQFrNgIEIAINACAAIAAoAgAoAggRAAAgABArCyABECoLC8wDAgJ+An8gAEEANgIYIABCADcDECAAIAI2AgggACACNgIEIAAgATYCAEFAIQYCQCACRQ0AIAAgAUEBajYCACABMQAAIQMgACACQQFrIgU2AgggACADQjiGIgM3AxAgBUUNACAAIAFBAmo2AgAgATEAASEEIAAgAkECayIFNgIIIAAgBEIwhiADhCIDNwMQIAVFDQAgACABQQNqNgIAIAExAAIhBCAAIAJBA2siBTYCCCAAIARCKIYgA4QiAzcDECAFRQ0AIAAgAUEEajYCACABMQADIQQgACACQQRrIgU2AgggACAEQiCGIAOEIgM3AxAgBUUNACAAIAFBBWo2AgAgATEABCEEIAAgAkEFayIFNgIIIAAgBEIYhiADhCIDNwMQIAVFDQAgACABQQZqNgIAIAExAAUhBCAAIAJBBmsiBTYCCCAAIARCEIYgA4QiAzcDECAFRQ0AIAAgAUEHajYCACABMQAGIQQgACACQQdrIgU2AgggACAEQgiGIAOEIgM3AxAgBUUNACAAIAFBCGo2AgAgATEAByEEIAAgAkEIazYCCCAAIAMgBIQ3AxBBSCEGCyAAIAZBByACIAJBB08bQQN0akFAazYCGCAAC/wBAQN/IwBBEGsiAiQAIAIgAToADwJAAkACfyAALQALIgNBB3YiBEUEQEEKIQEgA0H/AHEMAQsgACgCCEH/////B3FBAWshASAAKAIECyIDIAFGBEAgACABQQEgASABEKkDAn8gAC0AC0EHdgRAIAAoAgAMAQtBAAsaDAELAn8gAC0AC0EHdgRAIAAoAgAMAQtBAAsaIAQNACAA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IgogCSgCRCIBSQRAIAkgATYCWCABIQoLIAlBQGsMAQsgAUEIcUUEQEEAIQogCUEAOgAfIAlBFGohAgwMCyAJKAI8IQogCUE0agshASAKIAEoAgAiAWsiCkH4////B08NECAKQQtPBEAgCkEHckEBaiIEECwhAiAJIARBgICAgHhyNgIcIAkgAjYCFCAJIAo2AhgMCgsgCSAKOgAfIAlBFGohAiAKDQlBACEKDAoLIAMoAgAiASAKKQMIIAIpAwggEnx8IgYgBiARfCABKAIAKAIYERYAIRcgAygCACEBIBdQBEAgACABKQIENwIAIABBCGohACABLAAXQQBOBEAgACABKQIMNwIAIAAgASgCFDYCCAwQCyAAIAEoAgwgASgCEBAuDA8LIAEgBiABKAIAKAIUERAARQRAIABBAkEAIAlBIGpB1jMQgAEiABAvGiAALAALQQBODQ8gACgCCBogACgCABAqDA8LAkAgCyARpyINaiIBIAUoAgQgBSgCACIOayIMSwRAIAUgASAMaxBlDAELIAEgDEkEQCAFIAEgDmo2AgQLCyADKAIAIgEgBSgCACALaiANIAEoAgAoAhARBAANAiAAQQJBACAJQSBqQYzUABCAASIAEC8aIAAsAAtBAE4NDiAAKAIIGiAAKAIAECoMDgsgBCgCACIBRQRAIAlBOBAsIgE2AiAgCUK2gICAgIeAgIB/NwIkIAFBpdQAKQAANwAAIAFBADoANiABQdPUACkAADcALiABQc3UACkAADcAKCABQcXUACkAADcAICABQb3UACkAADcAGCABQbXUACkAADcAECABQa3UACkAADcACCAAQQJB5wAgCUEgahAvGiAJLAArQQBODQ4gCSgCKBogCSgCIBAqDA4LIAopAwggAikDCHwhEiACKQMQIREjAEGgAWsiCyQAIAUoAgQgBSgCAGshDAJAAkACQAJAAkAgCCkDKCITUA0AIBMgDK0iFX0gEVoNACALQaDTAzYCGCALQbTTAzYCUCALQcTTAygCACIMNgIQIAtBEGoiASAMQQxrKAIAakHI0wMoAgA2AgAgC0EANgIUIAEgCygCEEEMaygCAGoiDCALQRxqIg0QPiAMQoCAgIBwNwJIIAtBzNMDKAIAIgw2AhggC0EYaiIOIAxBDGsoAgBqQdDTAygCADYCACALQcDTAygCACIMNgIQ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EC4LIAMsABtBAEgEQCADKAIYGiADKAIQECoLIAYNAQsgBCAFNgIAIARBkKUFKQIANwIEIARBDGohAUGjpQUsAABBAE4EQCABQZilBSkCADcCACABQaClBSgCADYCCAwBCyABQZilBSgCAEGcpQUoAgAQLgsgA0EgaiQAAkAgAigCEARAIABBADYCCCAAQgA3AgAgACACKQIQNwIMIABBFGohACACLAAjQQBOBEAgACACKQIYNwIAIAAgAigCIDYCCAwCCyAAIAIoAhggAigCHBAuDAELIAJBJGogAigCKCACKAIMIgEoAgAiAyABKAIEIgEgASADaxDFASAAQQA2AgggAEIANwIAIAIoAigiASACKAIkIgRHBEAgASAEayIBQQBIDQQgACABECwiAzYCBCAAIAM2AgAgACABIANqIgU2AgggAyAEIAEQMhogACAFNgIECyAAQZClBSkCADcCDCAAQRRqIQBBo6UFLAAAQQBOBEAgAEGYpQUpAgA3AgAgAEGgpQUoAgA2AggMAQsgAEGYpQUoAgBBnKUFKAIAEC4LIAIsACNBAEgEQCACKAIgGiACKAIYECoLIAIoAiQiAEUNACACIAA2AiggAigCLBogABAqCyACLABPQQBIBEAgAigCTBogAigCRBAqCyACKAIwIgAEQCACIAA2AjQgAigCOBogABAqCyACQdAAaiQADwsQNgALEDYAC8kCAgF+An8gAigCBCEFAkAgASgCBCIGIAAoAgRMBEAgBSAGTA0BIAEpAgAhBCABIAIpAgA3AgAgAiAENwIAIAEoAgQgACgCBEwEQCAEQiCIpyEFDAILIAApAgAhBCAAIAEpAgA3AgAgASAENwIAIAIoAgQhBQwBCyAAKQIAIQQgBSAGSgRAIAAgAikCADcCACACIAQ3AgAgBEIgiKchBQwBCyAAIAEpAgA3AgAgASAENwIAIAIoAgQiBSAEQiCIpyIGTA0AIAEgAikCADcCACACIAQ3AgAgBiEFCwJAIAMoAgQgBUwNACACKQIAIQQgAiADKQIANwIAIAMgBDcCACACKAIEIAEoAgRMDQAgASkCACEEIAEgAikCADcCACACIAQ3AgAgASgCBCAAKAIETA0AIAApAgAhBCAAIAEpAgA3AgAgASAENwIACwv2BQEFfyMAQaABayIDJAAgA0Hk1QM2AkQgA0Hw1QMoAgAiBjYCDCADQQxqIgQgBkEMaygCAGpB9NUDKAIANgIAIAQgAygCDEEMaygCAGoiBiADQRBqIgUQPiAGQoCAgIBwNwJIIANB5NUDNgJEIANB0NUDNgIMIAUQPyIGQfDLAzYCACADQgA3AjggA0IANwIwIANBEDYCQCADQZQBaiIFIAIQNSAEIAMoApQBIAUgAywAnwEiBEEASCIFGyADKAKYASAEIAUbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBDGpBvLEBQQUQLSEHIANBlAFqIgUgARD+ASAHIAMoApQBIAUgAywAnwEiBEEASCIFGyADKAKYASAEIAUbEC1Byo4CQQcQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgA0GUAWoiBCACEDUgA0EMaiADKAKUASAEIAMsAJ8BIgJBAEgiBBsgAygCmAEgAiAEGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyADQQxqQfW8AUEGEC0gASkDCBCFAUG9vAFBERAtIAEoAiAQPEHOkAJBAhAtGgJAAn8gAygCQCIBQRBxBEAgAygCPCIBIAMoAigiAkkEQCADIAI2AjwgAiEBCyADQSRqDAELIAFBCHFFBEBBACEBIABBADoACwwCCyADKAIgIQEgA0EYagshAgJAIAEgAigCACIEayIBQfj///8HSQRAIAFBC08EQCABQQdyQQFqIgUQLCECIAAgBUGAgICAeHI2AgggACACNgIAIAAgATYCBCACIQAMAgsgACABOgALIAENAUEAIQEMAgsQOAALIAAgBCABEDcaCyAAIAFqQQA6AAAgA0Hs1QMoAgAiADYCDCAAQQxrKAIAIANBDGpqQfjVAygCADYCACAGQfDLAzYCACADLAA7QQBIBEAgAygCOBogAygCMBAqCyAGED0aIANBxABqEDsaIANBoAFqJAAL1wsCBX8BfiMAQaABayIDJAAgAigCACIEIAQoAgAoAggREgAhCAJAIAIoAgAiBCAIQgh8IAQoAgAoAgwREAAEQCADQQA6ABAgA0EAOgAbIABBAkHkACADQRBqEC8aIAMsABtBAE4NASADKAIYGiADKAIQECoMAQsgASACEEmtNwMIIAIQSSEEIAFBCDYCICABIAQ2AhACQAJAAkAgASkDCEIBUQR/IAIoAgAiBCAEKAIAKAIIERIAIQggAigCACIEIAhCCHwgBCgCACgCDBEQAARAIANBADoAECADQQA6ABsgAEECQeQAIANBEGoQLxogAywAG0EATg0FIAMoAhgaIAMoAhAQKgwFCyABIAIQSa1CIIYgAhBJrYQ3AwggASABKAIgQQhqNgIgIANBoNMDNgIYIANBtNMDNgJQIANBxNMDKAIAIgQ2AhAgA0EQaiIFIARBDGsoAgBqQcjTAygCADYCACADQQA2AhQgBSADKAIQQQxrKAIAaiIEIANBHGoiBhA+IARCgICAgHA3AkggA0HM0wMoAgAiBDYCGCADQRhqIgcgBEEMaygCAGpB0NMDKAIANgIAIANBwNMDKAIAIgQ2AhAgBSAEQQxrKAIAakHU0wMoAgA2AgAgA0G00wM2AlAgA0GM0wM2AhAgA0Gg0wM2AhggBhA/IgRB8MsDNgIAIANCADcCRCADQgA3AjwgA0EYNgJMIAdBxq0BQQkQLSABKQMIEIUBQdOUAUEYEC0aIANB0ABqIQUgASkDCEKAgICAgICAgBBaBEACfyADKAJMIgFBEHEEQCADKAJIIgIgAygCNCIBSQRAIAMgATYCSCABIQILIANBMGoMAQsgAUEIcUUEQEEAIQIgA0EAOgAPIANBBGohAQwGCyADKAIsIQIgA0EkagshASACIAEoAgAiBmsiAkH4////B08NAiACQQtPBEAgAkEHckEBaiIHECwhASADIAdBgICAgHhyNgIMIAMgATYCBCADIAI2AggMBAsgAyACOgAPIANBBGohASACDQNBACECDAQLIANBvNMDKAIAIgY2AhAgBkEMaygCACADQRBqakHc0wMoAgA2AgAgA0Hg0wMoAgA2AhggBEHwywM2AgAgAywAR0EASARAIAMoAkQaIAMoAjwQKgsgBBA9GiAFEDsaIAEoAhAFIAQLQeTS1asHRgRAIAIoAgAiBCAEKAIAKAIIERIAIQggAigCACIEIAhCEHwgBCgCACgCDBEQAARAIANBADoAECADQQA6ABsgAEECQeQAIANBEGoQLxogAywAG0EATg0FIAMoAhgaIAMoAhAQKgwFCwJAIAJBEBCLAUUNACABQRRqIQYCQCABKAIYIAEoAhQiBWsiBEEPTQRAIAZBECAEaxBlDAELIARBEEYNACABIAVBEGo2AhgLIAIoAgAhBSAC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IGsiBSQAIABBADYCCCAAQgA3AgACQCABKAIgIgQgASgCHCIBRwRAIAQgAWsiA0EASA0BIAAgAxAsIgI2AgQgACACNgIAIAAgAiADajYCCANAIAIgASgCADYCACACIAEoAgQiAzYCBCADBEAgAyADKAIEQQFqNgIECyACQQhqIQIgAUEIaiIBIARHDQALIAAgAjYCBAsgBUEgaiQADwsQNgALSQECfyAAKAIEIgVBCHUhBiAAKAIAIgAgASAFQQFxBH8gBiACKAIAaigCAAUgBgsgAmogA0ECIAVBAnEbIAQgACgCACgCGBEHAAuDAwEFfyMAQRBrIggkACACIAFBf3NB9////wdqTQRAAn8gAC0AC0EHdgRAIAAoAgAMAQsgAAshCiAIQQRqIgkgAUHz////A0kEfyAIIAFBAXQ2AgwgCCABIAJqNgIEIwBBEGsiAiQAIAkoAgAgCEEMaiILKAIASSEMIAJBEGokACALIAkgDBsoAgAiAkELTwR/IAJBCGpBeHEiAiACQQFrIgIgAkELRhsFQQoLQQFqBUH3////BwsQ8gEgCCgCBCECIAgoAggaIAQEQCAKIAQgAhCxAQsgBgRAIAcgBiACIARqELEBCyADIAQgBWoiCWshByADIAlHBEAgBCAKaiAFaiAHIAIgBGogBmoQsQELIAFBCkcEQCAKQQEQvwELIAAgAjYCACAAIAAoAghBgICAgHhxIAgoAghB/////wdxcjYCCCAAIAAoAghBgICAgHhyNgIIIAAgBCAGaiAHaiIANgIEIAhBADoADCAAIAJqIAgtAAw6AAAgCEEQaiQADwsQigEACwgAQf////8HCwUAQf8AC3YBAX8jAEEQayICJAAgAiAANgIMAkAgACABRg0AA0AgAiABQQRrIgE2AgggACABTw0BIAIoAgwiACgCACEBIAAgAigCCCIAKAIANgIAIAAgATYCACACIAIoAgxBBGoiADYCDCACKAIIIQEMAAsACyACQRBqJAAL/QQBCH8jAEEQayILJAAgBkGc0AYQQyEJIAtBBGoiByAGQeTQBhBDIgggCCgCACgCFBECAAJAAn8gBy0AC0EHdgRAIAcoAgQMAQsgBy0AC0H/AHELRQRAIAkgACACIAMgCSgCACgCMBEKABogBSADIAIgAGtBAnRqIgY2AgAMAQsgBSADNgIAAkACQCAAIgotAAAiBkEraw4DAAEAAQsgCSAGwCAJKAIAKAIsEQUAIQcgBSAFKAIAIgZBBGo2AgAgBiAHNgIAIABBAWohCgsCQCACIAprQQJIDQAgCi0AAEEwRw0AIAotAAFBIHJB+ABHDQAgCUEwIAkoAgAoAiwRBQAhByAFIAUoAgAiBkEEajYCACAGIAc2AgAgCSAKLAABIAkoAgAoAiwRBQAhByAFIAUoAgAiBkEEajYCACAGIAc2AgAgCkECaiEKCyAKIAIQ2QEgCCAIKAIAKAIQEQEAIQ5BACEHIAohBgN/IAIgBk0EfyADIAogAGtBAnRqIAUoAgAQxQIgBSgCAAUCQAJ/IAtBBGoiCC0AC0EHdgRAIAgoAgAMAQsgCAsgB2otAABFDQAgDAJ/IAgtAAtBB3YEQCAIKAIADAELIAgLIAdqLAAARw0AIAUgBSgCACINQQRqNgIAIA0gDjYCACAHIAcCfyAILQALQQd2BEAgCCgCBAwBCyAILQALQf8AcQtBAWtJaiEHQQAhDAsgCSAGLAAAIAkoAgAoAiwRBQAhDSAFIAUoAgAiCEEEajYCACAIIA02AgAgBkEBaiEGIAxBAWohDAwBCwshBgsgBCAGIAMgASAAa0ECdGogASACRhs2AgAgC0EEahBGGiALQRBqJAAL0AEBAn8gAkGAEHEEQCAAQSs6AAAgAEEBaiEACyACQYAIcQRAIABBIzoAACAAQQFqIQALIAJBhAJxIgNBhAJHBEAgAEGu1AA7AAAgAEECaiEACyACQYCAAXEhAgNAIAEtAAAiBARAIAAgBDoAACAAQQFqIQAgAUEBaiEBDAELCyAAAn8CQCADQYACRwRAIANBBEcNAUHGAEHmACACGwwCC0HFAEHlACACGwwBC0HBAEHhACACGyADQYQCRg0AGkHHAEHnACACGws6AAAgA0GEAkcL9AQBCH8jAEEQayILJAAgBkGk0AYQQyEJIAtBBGoiByAGQdzQBhBDIgggCCgCACgCFBECAAJAAn8gBy0AC0EHdgRAIAcoAgQMAQsgBy0AC0H/AHELRQRAIAkgACACIAMgCSgCACgCIBEKABogBSADIAIgAGtqIgY2AgAMAQsgBSADNgIAAkACQCAAIgotAAAiBkEraw4DAAEAAQsgCSAGwCAJKAIAKAIcEQUAIQcgBSAFKAIAIgZBAWo2AgAgBiAHOgAAIABBAWohCgsCQCACIAprQQJIDQAgCi0AAEEwRw0AIAotAAFBIHJB+ABHDQAgCUEwIAkoAgAoAhwRBQAhByAFIAUoAgAiBkEBajYCACAGIAc6AAAgCSAKLAABIAkoAgAoAhwRBQAhByAFIAUoAgAiBkEBajYCACAGIAc6AAAgCkECaiEKCyAKIAIQ2QEgCCAIKAIAKAIQEQEAIQ5BACEHIAohBgN/IAIgBk0EfyADIAogAGtqIAUoAgAQ2QEgBSgCAAUCQAJ/IAtBBGoiCC0AC0EHdgRAIAgoAgAMAQsgCAsgB2otAABFDQAgDAJ/IAgtAAtBB3YEQCAIKAIADAELIAgLIAdqLAAARw0AIAUgBSgCACINQQFqNgIAIA0gDjoAACAHIAcCfyAILQALQQd2BEAgCCgCBAwBCyAILQALQf8AcQtBAWtJaiEHQQAhDAsgCSAGLAAAIAkoAgAoAhwRBQAhDSAFIAUoAgAiCEEBajYCACAIIA06AAAgBkEBaiEGIAxBAWohDAwBCwshBgsgBCAGIAMgASAAa2ogASACRhs2AgAgC0EEahBGGiALQRBqJAAL4AUBC38jAEGAAWsiCiQAIAogATYCfCAKQYULNgIQIApBCGpBACAKQRBqIggQayELAkACQAJAIAMgAmtBDG0iCUHlAE8EQCAJEFUiCEUNASALKAIAIQEgCyAINgIAIAEEQCABIAsoAgQRAAALCyAIIQcgAiEBA0AgASADRgRAA0AgACAKQfwAaiIBEF1BASAJGwRAIAAgARBdBEAgBSAFKAIAQQJyNgIACwNAIAIgA0YNBiAILQAAQQJGDQcgCEEBaiEIIAJBDGohAgwACwALAn8gACgCACIHKAIMIgEgBygCEEYEQCAHIAcoAgAoAiQRAQAMAQsgASgCAAshDiAGRQRAIAQgDiAEKAIAKAIcEQUAIQ4LIA9BAWohDUEAIRAgCCEHIAIhAQNAIAEgA0YEQCANIQ8gEEUNAiAAEHYaIAghByACIQEgCSAMakECSQ0CA0AgASADRgRADAQFAkAgBy0AAEECRw0AAn8gAS0AC0EHdgRAIAEoAgQMAQsgAS0AC0H/AHELIA9GDQAgB0EAOgAAIAxBAWshDAsgB0EBaiEHIAFBDGohAQwBCwALAAUCQCAHLQAAQQFHDQACfyABLQALQQd2BEAgASgCAAwBCyABCyAPQQJ0aigCACERAkAgBgR/IBEFIAQgESAEKAIAKAIcEQUACyAORgRAQQEhEAJ/IAEtAAtBB3YEQCABKAIEDAELIAEtAAtB/wBxCyANRw0CIAdBAjoAACAMQQFqIQwMAQsgB0EAOgAACyAJQQFrIQkLIAdBAWohByABQQxqIQEMAQsACwALAAUgB0ECQQECfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQtFIg0bOgAAIAdBAWohByABQQxqIQEgDCANaiEMIAkgDWshCQwBCwALAAsQbAALIAUgBSgCAEEEcjYCAAsgCygCACEAIAtBADYCACAABEAgACALKAIEEQAACyAKQYABaiQAIAIL3gUBC38jAEGAAWsiCiQAIAogATYCfCAKQYULNgIQIApBCGpBACAKQRBqIggQayELAkACQAJAIAMgAmtBDG0iCUHlAE8EQCAJEFUiCEUNASALKAIAIQEgCyAINgIAIAEEQCABIAsoAgQRAAALCyAIIQcgAiEBA0AgASADRgRAA0AgACAKQfwAaiIBEF5BASAJGwRAIAAgARBeBEAgBSAFKAIAQQJyNgIACwNAIAIgA0YNBiAILQAAQQJGDQcgCEEBaiEIIAJBDGohAgwACwALAn8gACgCACIHKAIMIgEgBygCEEYEQCAHIAcoAgAoAiQRAQAMAQsgAS0AAAvAIQ4gBkUEQCAEIA4gBCgCACgCDBEFACEOCyAPQQFqIQ1BACEQIAghByACIQEDQCABIANGBEAgDSEPIBBFDQIgABB3GiAIIQcgAiEBIAkgDGpBAkkNAgNAIAEgA0YEQAwEBQJAIActAABBAkcNAAJ/IAEtAAtBB3YEQCABKAIEDAELIAEtAAtB/wBxCyAPRg0AIAdBADoAACAMQQFrIQwLIAdBAWohByABQQxqIQEMAQsACwAFAkAgBy0AAEEBRw0AAn8gAS0AC0EHdgRAIAEoAgAMAQsgAQsgD2osAAAhEQJAIAYEfyARBSAEIBEgBCgCACgCDBEFAAsgDkYEQEEBIRACfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQsgDUcNAiAHQQI6AAAgDEEBaiEMDAELIAdBADoAAAsgCUEBayEJCyAHQQFqIQcgAUEMaiEBDAELAAsACwAFIAdBAkEBAn8gAS0AC0EHdgRAIAEoAgQMAQsgAS0AC0H/AHELRSINGzoAACAHQQFqIQcgAUEMaiEBIAwgDWohDCAJIA1rIQkMAQsACwALEGwACyAFIAUoAgBBBHI2AgALIAsoAgAhACALQQA2AgAgAARAIAAgCygCBBEAAAsgCkGAAWokACACCxYAIAAgARA+IABBADYCSCAAQX82AkwLQQECfyMAQRBrIgEkAEF/IQICQCAAEJYCDQAgACABQQ9qQQEgACgCIBEEAEEBRw0AIAEtAA8hAgsgAUEQaiQAIAILNgEBfyMAQRBrIgMkACADIAE2AgwgAyACNgIIIAAgAygCDDYCACAAIAMoAgg2AgQgA0EQaiQACwsAIAEgAiAAENwBCwwAIABBDGoQOxogAAvWAQEFfyMAQRBrIgIkACACQQhqIAAQcxoCQCACLQAIRQ0AIAJBBGoiBCAAIAAoAgBBDGsoAgBqKAIcIgM2AgAgA0HszgZHBEAgAyADKAIEQQFqNgIECyAEQeTNBhBDIQMgBBBHIAIgACAAKAIAQQxrKAIAaigCGDYCACAAIAAoAgBBDGsoAgBqIgUQlAIhBiACIAMgAigCACAFIAYgASADKAIAKAIMEQwANgIEIAQoAgANACAAIAAoAgBBDGsoAgBqQQUQowELIAJBCGoQciACQRBqJAAgAAsMACAAQQRqEDsaIAALDAAgAEEIahA7GiAACwQAQX8LIAAgACgCTEEASARAIAAgASACENcFDwsgACABIAIQ1wULnAsBBn8gACABaiEFAkACQCAAKAIEIgJBAXENACACQQJxRQ0BIAAoAgAiAiABaiEBAkACQAJAIAAgAmsiAEG8uAYoAgBHBEAgACgCDCEDIAJB/wFNBEAgAyAAKAIIIgRHDQJBqLgGQai4BigCAEF+IAJBA3Z3cTYCAAwFCyAAKAIYIQYgACADRwRAIAAoAggiAiADNgIMIAMgAjYCCAwECyAAKAIUIgQEfyAAQRRqBSAAKAIQIgRFDQMgAEEQagshAgNAIAIhByAEIgNBFGohAiADKAIUIgQNACADQRBqIQIgAygCECIEDQALIAdBADYCAAwDCyAFKAIEIgJBA3FBA0cNA0GwuAYgATYCACAFIAJBfnE2AgQgACABQQFyNgIEIAUgATYCAA8LIAQgAzYCDCADIAQ2AggMAgtBACEDCyAGRQ0AAkAgACgCHCICQQJ0Qdi6BmoiBCgCACAARgRAIAQgAzYCACADDQFBrLgGQay4BigCAEF+IAJ3cTYCAAwCCyAGQRBBFCAGKAIQIABGG2ogAzYCACADRQ0BCyADIAY2AhggACgCECICBEAgAyACNgIQIAIgAzYCGAsgACgCFCICRQ0AIAMgAjYCFCACIAM2AhgLAkACQAJAAkAgBSgCBCICQQJxRQRAQcC4BigCACAFRgRAQcC4BiAANgIAQbS4BkG0uAYoAgAgAWoiATYCACAAIAFBAXI2AgQgAEG8uAYoAgBHDQZBsLgGQQA2AgBBvLgGQQA2AgAPC0G8uAYoAgAgBUYEQEG8uAYgADYCAEGwuAZBsLgGKAIAIAFqIgE2AgAgACABQQFyNgIEIAAgAWogATYCAA8LIAJBeHEgAWohASAFKAIMIQMgAkH/AU0EQCAFKAIIIgQgA0YEQEGouAZBqLgGKAIAQX4gAkEDdndxNgIADAULIAQgAzYCDCADIAQ2AggMBAsgBSgCGCEGIAMgBUcEQCAFKAIIIgIgAzYCDCADIAI2AggMAwsgBSgCFCIEBH8gBUEUagUgBSgCECIERQ0CIAVBEGoLIQIDQCACIQcgBCIDQRRqIQIgAygCFCIEDQAgA0EQaiECIAMoAhAiBA0ACyAHQQA2AgAMAgsgBSACQX5xNgIEIAAgAUEBcjYCBCAAIAFqIAE2AgAMAwtBACEDCyAGRQ0AAkAgBSgCHCICQQJ0Qdi6BmoiBCgCACAFRgRAIAQgAzYCACADDQFBrLgGQay4BigCAEF+IAJ3cTYCAAwCCyAGQRBBFCAGKAIQIAVGG2ogAzYCACADRQ0BCyADIAY2AhggBSgCECICBEAgAyACNgIQIAIgAzYCGAsgBSgCFCICRQ0AIAMgAjYCFCACIAM2AhgLIAAgAUEBcjYCBCAAIAFqIAE2AgAgAEG8uAYoAgBHDQBBsLgGIAE2AgAPCyABQf8BTQRAIAFBeHFB0LgGaiECAn9BqLgGKAIAIgNBASABQQN2dCIBcUUEQEGouAYgASADcjYCACACDAELIAIoAggLIQEgAiAANgIIIAEgADYCDCAAIAI2AgwgACABNgIIDwtBHyEDIAFB////B00EQCABQSYgAUEIdmciAmt2QQFxIAJBAXRrQT5qIQMLIAAgAzYCHCAAQgA3AhAgA0ECdEHYugZqIQICQAJAQay4BigCACIEQQEgA3QiB3FFBEBBrLgGIAQgB3I2AgAgAiAANgIAIAAgAjYCGAwBCyABQRkgA0EBdmtBACADQR9HG3QhAyACKAIAIQIDQCACIgQoAgRBeHEgAUYNAiADQR12IQIgA0EBdCEDIAQgAkEEcWoiB0EQaigCACICDQALIAcgADYCECAAIAQ2AhgLIAAgADYCDCAAIAA2AggPCyAEKAIIIgEgADYCDCAEIAA2AgggAEEANgIYIAAgBDYCDCAAIAE2AggLC4UEAQV/AkACfyABQQhGBEAgAhBVDAELQRwhBCABQQRJDQEgAUEDcQ0BIAFBAnYiAyADQQFrcQ0BQTAhBEFAIAFrIAJJDQECf0EQIQMCQEEQQRAgASABQRBNGyIBIAFBEE0bIgQgBEEBa3FFBEAgBCEBDAELA0AgAyIBQQF0IQMgASAESQ0ACwsgAkFAIAFrTwRAQcCuBkEwNgIAQQAMAQtBAEEQIAJBC2pBeHEgAkELSRsiBCABakEMahBVIgNFDQAaIANBCGshAgJAIAFBAWsgA3FFBEAgAiEBDAELIANBBGsiBigCACIHQXhxIAEgA2pBAWtBACABa3FBCGsiAyABQQAgAyACa0EPTRtqIgEgAmsiA2shBSAHQQNxRQRAIAIoAgAhAiABIAU2AgQgASACIANqNgIADAELIAEgBSABKAIEQQFxckECcjYCBCABIAVqIgUgBSgCBEEBcjYCBCAGIAMgBigCAEEBcXJBAnI2AgAgAiADaiIFIAUoAgRBAXI2AgQgAiADENUCCwJAIAEoAgQiAkEDcUUNACACQXhxIgMgBEEQak0NACABIAQgAkEBcXJBAnI2AgQgASAEaiICIAMgBGsiBEEDcjYCBCABIANqIgMgAygCBEEBcjYCBCACIAQQ1QILIAFBCGoLCyIBRQRAQTAPCyAAIAE2AgBBACEECyAEC4IIAQt/IABFBEAgARBVDwsgAUFATwRAQcCuBkEwNgIAQQAPCwJ/QRAgAUELakF4cSABQQtJGyEFIABBCGsiBCgCBCIJQXhxIQgCQCAJQQNxRQRAIAVBgAJJDQEgBUEEaiAITQRAIAQhAiAIIAVrQYi8BigCAEEBdE0NAgtBAAwCCyAEIAhqIQYCQCAFIAhNBEAgCCAFayIDQRBJDQEgBCAJQQFxIAVyQQJyNgIEIAQgBWoiAiADQQNyNgIEIAYgBigCBEEBcjYCBCACIAMQ1QIMAQtBwLgGKAIAIAZGBEBBtLgGKAIAIAhqIgggBU0NAiAEIAlBAXEgBXJBAnI2AgQgBCAFaiIDIAggBWsiAkEBcjYCBEG0uAYgAjYCAEHAuAYgAzYCAAwBC0G8uAYoAgAgBkYEQEGwuAYoAgAgCGoiAyAFSQ0CAkAgAyAFayICQRBPBEAgBCAJQQFxIAVyQQJyNgIEIAQgBWoiCCACQQFyNgIEIAMgBGoiAyACNgIAIAMgAygCBEF+cTYCBAwBCyAEIAlBAXEgA3JBAnI2AgQgAyAEaiICIAIoAgRBAXI2AgRBACECQQAhCAtBvLgGIAg2AgBBsLgGIAI2AgAMAQsgBigCBCIDQQJxDQEgA0F4cSAIaiIKIAVJDQEgCiAFayEMIAYoAgwhBwJAIANB/wFNBEAgBigCCCICIAdGBEBBqLgGQai4BigCAEF+IANBA3Z3cTYCAAwCCyACIAc2AgwgByACNgIIDAELIAYoAhghCwJAIAYgB0cEQCAGKAIIIgIgBzYCDCAHIAI2AggMAQsCQCAGKAIUIgIEfyAGQRRqBSAGKAIQIgJFDQEgBkEQagshCANAIAghAyACIgdBFGohCCACKAIUIgINACAHQRBqIQggBygCECICDQALIANBADYCAAwBC0EAIQcLIAtFDQACQCAGKAIcIgNBAnRB2LoGaiICKAIAIAZGBEAgAiAHNgIAIAcNAUGsuAZBrLgGKAIAQX4gA3dxNgIADAILIAtBEEEUIAsoAhAgBkYbaiAHNgIAIAdFDQELIAcgCzYCGCAGKAIQIgIEQCAHIAI2AhAgAiAHNgIYCyAGKAIUIgJFDQAgByACNgIUIAIgBzYCGAsgDEEPTQRAIAQgCUEBcSAKckECcjYCBCAEIApqIgIgAigCBEEBcjYCBAwBCyAEIAlBAXEgBXJBAnI2AgQgBCAFaiIDIAxBA3I2AgQgBCAKaiICIAIoAgRBAXI2AgQgAyAMENUCCyAEIQILIAILIgIEQCACQQhqDwsgARBVIgRFBEBBAA8LIAQgAEF8QXggAEEEaygCACICQQNxGyACQXhxaiICIAEgASACSxsQMhogABAqIAQLEgAgAEUEQEEADwsgACABENkCC4kCAAJAIAAEfyABQf8ATQ0BAkBB6K8GKAIAKAIARQRAIAFBgH9xQYC/A0YNAwwBCyABQf8PTQRAIAAgAUE/cUGAAXI6AAEgACABQQZ2QcABcjoAAEECDwsgAUGAQHFBgMADRyABQYCwA09xRQRAIAAgAUE/cUGAAXI6AAIgACABQQx2QeABcjoAACAAIAFBBnZBP3FBgAFyOgABQQMPCyABQYCABGtB//8/TQRAIAAgAUE/cUGAAXI6AAMgACABQRJ2QfABcjoAACAAIAFBBnZBP3FBgAFyOgACIAAgAUEMdkE/cUGAAXI6AAFBBA8LC0HArgZBGTYCAEF/BUEBCw8LIAAgAToAAEEBC40BAQN/IwBBoAFrIgQkACAEIAAgBEGeAWogARsiBTYClAEgBCABQQFrIgBBACAAIAFNGzYCmAEgBEEAQZABEDQiAEF/NgJMIABBkQo2AiQgAEF/NgJQIAAgAEGfAWo2AiwgACAAQZQBajYCVCAFQQA6AAAgACACIANBjwpBkAoQ2wIhBiAAQaABaiQAIAYLxgIBBX8jAEHQAWsiBSQAIAUgAjYCzAEgBUGgAWoiAkEAQSgQNBogBSAFKALMATYCyAECQEEAIAEgBUHIAWogBUHQAGogAiADIAQQ4QVBAEgEQEF/IQQMAQsgACgCTEEASCEJIAAgACgCACIIQV9xNgIAAn8CQAJAIAAoAjBFBEAgAEHQADYCMCAAQQA2AhwgAEIANwMQIAAoAiwhBiAAIAU2AiwMAQsgACgCEA0BC0F/IAAQzgMNARoLIAAgASAFQcgBaiAFQdAAaiAFQaABaiADIAQQ4QULIQIgBgRAIABBAEEAIAAoAiQRBAAaIABBADYCMCAAIAY2AiwgAEEANgIcIAAoAhQhASAAQgA3AxAgAkF/IAEbIQILIAAgACgCACIAIAhBIHFyNgIAQX8gAiAAQSBxGyEEIAkNAAsgBUHQAWokACAEC6MBAQR/IwBBEGsiBSQAIAUgAjYCDCMAQaABayIDJAAgA0EIaiIGQcDEA0GQARAyGiADIAA2AjQgAyAANgIcIANB/////wdBfiAAayIEIARB/////wdLGyIENgI4IAMgACAEaiIENgIkIAMgBDYCGCAGIAEgAhDeBSAAQX5HBEAgAygCHCIAIAAgAygCGEZrQQA6AAALIANBoAFqJAAgBUEQaiQACyoBAn8jAEEQayIEJAAgBCADNgIMIAAgASACIAMQ2gIhBSAEQRBqJAAgBQvbAQEIfyAAIABBPRDjBSIBRgRAQQAPCwJAIAAgASAAayIFai0AAA0AQcSuBigCACICRQ0AIAIoAgAiAUUNAANAAkACfyAAIQRBACAFIgZFDQAaIAAtAAAiAwR/AkADQCADIAEtAAAiB0cNASAHRQ0BIAZBAWsiBkUNASABQQFqIQEgBC0AASEDIARBAWohBCADDQALQQAhAwsgAwVBAAsgAS0AAGsLRQRAIAIoAgAgBWoiAS0AAEE9Rg0BCyACKAIEIQEgAkEEaiECIAENAQwCCwsgAUEBaiEICyAIC8MBAQN/AkAgASACKAIQIgMEfyADBSACEM4DDQEgAigCEAsgAigCFCIEa0sEQCACIAAgASACKAIkEQQADwsCQAJAIAIoAlBBAEgNACABRQ0AIAEhAwNAIAAgA2oiBUEBay0AAEEKRwRAIANBAWsiAw0BDAILCyACIAAgAyACKAIkEQQAIgQgA0kNAiABIANrIQEgAigCFCEEDAELIAAhBUEAIQMLIAQgBSABEDIaIAIgAigCFCABajYCFCABIANqIQQLIAQLzwsBA38jAEGQBWsiAyQAQYHBAEHgLSABGyEBIAAtAAAEQCADIAAsAAE2AoQFIAMgATYCgAUgAkGg7gEgA0GABWoQMCADIAAsAAI2AvQEIAMgATYC8AQgAkHy9wEgA0HwBGoQMEGvngEhBCADIAAoAgRBAWsiBUEDTQR/IAVBAnRB6JEDaigCAAVBr54BCzYC5AQgAyABNgLgBCACQcvGASADQeAEahAwIAMgATYC0AQgAkGetQEgA0HQBGoQMCADIAAsAAg2AsAEIAJBzfIAIANBwARqEDAgAkGdnQFBABAwIAMgACwACTYCsAQgAkHN8gAgA0GwBGoQMCACQZ2dAUEAEDAgAyAALAAKNgKgBCACQc3yACADQaAEahAwIAJBnZ0BQQAQMCADIAAsAAs2ApAEIAJBzfIAIANBkARqEDAgAkGdnQFBABAwIAMgACwADDYCgAQgAkHN8gAgA0GABGoQMCACQZ2dAUEAEDAgAyAALAANNgLwAyACQc3yACADQfADahAwIAJBnZ0BQQAQMCADIAAsAA42AuADIAJBzfIAIANB4ANqEDAgAkGdnQFBABAwIAMgACwADzYC0AMgAkHN8gAgA0HQA2oQMCACQZ2dAUEAEDAgAyAALAAQNgLAAyACQc3yACADQcADahAwIAJBnZ0BQQAQMCADIAAsABE2ArADIAJBzfIAIANBsANqEDAgAkGdnQFBABAwIAMgACwAEjYCoAMgAkHN8gAgA0GgA2oQMCACQZ2dAUEAEDAgAyAALAATNgKQAyACQc3yACADQZADahAwIAJBnZ0BQQAQMCADIAAsABQ2AoADIAJBzfIAIANBgANqEDAgAkGdnQFBABAwIAMgACwAFTYC8AIgAkHN8gAgA0HwAmoQMCACQZ2dAUEAEDAgAyAALAAWNgLgAiACQc3yACADQeACahAwIAJBnZ0BQQAQMCADIAAsABc2AtACIAJBzfIAIANB0AJqEDAgAkGdnQFBABAwIAMgACwAGDYCwAIgAkHN8gAgA0HAAmoQMCACQZ2dAUEAEDAgAyAALAAZNgKwAiACQc3yACADQbACahAwIAJBnZ0BQQAQMCADIAAsABo2AqACIAJBzfIAIANBoAJqEDAgAkGdnQFBABAwIAMgACwAGzYCkAIgAkHN8gAgA0GQAmoQMCACQZ2dAUEAEDAgAyAALAAcNgKAAiACQc3yACADQYACahAwIAJBnZ0BQQAQMCADIAAsAB02AvABIAJBzfIAIANB8AFqEDAgAkGdnQFBABAwIAMgACwAHjYC4AEgAkHN8gAgA0HgAWoQMCACQZ2dAUEAEDAgAyAALAAfNgLQASACQc3yACADQdABahAwIAJBnZ0BQQAQMCADIAAsACA2AsABIAJBzfIAIANBwAFqEDAgAkGdnQFBABAwIAMgACwAITYCsAEgAkHN8gAgA0GwAWoQMCACQZ2dAUEAEDAgAyAALAAiNgKgASACQc3yACADQaABahAwIAJBnZ0BQQAQMCADIAAsACM2ApABIAJBzfIAIANBkAFqEDAgAkGdnQFBABAwIAMgACwAJDYCgAEgAkHN8gAgA0GAAWoQMCACQZ2dAUEAEDAgAyAALAAlNgJwIAJBzfIAIANB8ABqEDAgAkGdnQFBABAwIAMgACwAJjYCYCACQc3yACADQeAAahAwIAJBnZ0BQQAQMCADIAAsACc2AlAgAkHN8gAgA0HQAGoQMCACQeSOAkEAEDAgAyAALAAoNgJEIAMgATYCQCACQcPbASADQUBrEDAgAyAALAApNgI0IAMgATYCMCACQejbASADQTBqEDAgAyAALAAqNgIkIAMgATYCICACQf/UASADQSBqEDAgAyAALAArNgIUIAMgATYCECACQdfUASADQRBqEDALIAAtACwEQCADIAAoAjAiADYCBCADIAE2AgAgAyAAskMAAPBBlbs5AwggAkHLjwIgAxAwCyADQZAFaiQAC7sTASd/IAAoApyRASIDKAKEASENIAMoAnwiFigC/IMBIRcCQAJAAkACQCACDQAgDS0ALUUNACAAKAIMIgJBAEwNACAAKAIIDQBBAiETIBdBAk4EQCACQQFrIgIgACgCpJEBIgQoAtgDIAQoAtQDa0EDdU8NAiADIAAoAqyRAUEBIAJBARC1ASAAQYyRAWogACgCpJEBKALUAyAAKAIMQQN0akEIaxD4ASAAKAKkkQEoAtQDIAAoAgxBA3RqQQhrEJUGDAELIAMgACgCrJEBQQAgAkEBa0EBELUBIAAoAqCRASICKAKkBiIDQQNPDQIgAEGMkQFqIAMgAigCoAYQowIgAEEANgCUkQELIABB9JABaiEYIABBjJEBaiEeIBdBAWshIyAAKAIMIQsgACgCCCECQQIhEwNAIAsgF2wgAmoiJCANKAKEQiANKAKAQmtBAnVPDQEgAiAWKAL8gwFODQEgCyAWKAKEhAFODQECQCALQQBMDQAgAUUNACACICNODQAgACgCnJEBIAAoAqyRASACQQFqIAtBAWtBARC1AQsgACgCkJEBRQ0BQQAhGUEAIR8gACgCACIDIAMgACgCnJEBIgMoAnwiICgC/IMBIgRtIgkgBGxrIg4gICgC7IMBIgd0ISEgACgCoJEBIQQCQCADKAKYASIIIA5MDQAgAygCnAEgCUwNACADKAKMASAIIAlsQRhsaiAOQRhsaiAEKAKoBjsBAAsCQAJAAkAgISADKAKUASIGdSIFQQBIDQAgBSAITg0AIAkgB3QiJSAGdSIGQQBIDQEgBiADKAKcAU4NASADKAKMASAFQRhsaiAGIAhsQRhsaiAEKAIAOwECAkAgBC0AzQJFBEAgBC0AzgJFDQELQQAhBCMAQSBrIgckACAAKAKgkQEhFCAAKAKckQEiCCgChAEhGiAIKAJ8IQUgB0EAOgAYIAdCADcDECAHQgA3AwgCf0EAIA5BAEwNABpBACAAKAIAIBQoAqgGTA0AGkEAIA5BAnQiAyAaKAKkQiIGIAUoAvyDASAJbEECdCIPamooAgAgAyAGaiAPakEEaygCAEcNABogAEH0kAFqIAAoAoyRARBMCyEbAkAgCUEATA0AIBtB/wFxDQAgFCgCqAYgACgCACAFKAL8gwEiA2tKDQAgDkECdCIGIBooAqRCIg8gAyAJbEECdGpqKAIAIA8gAyAJQQFrbEECdGogBmooAgBHDQAgAEH0kAFqIAAoAoyRARBMIRkLIBkgG3JB/wFxRQRAIABB9JABaiEDIAdBCGoiBkECciEmIAZBBXIhJyAFKALQgwEhKCAHLQAJISIgBy0ACCEcQQAhDwNAAkACQAJAAn8CQAJAIARFBEAgFC0AzQINAQsgBEUNBSAULQDOAkUNBSAEQQFHDQMgAyAAKAKMkQFBAWoQTA0BQQAMAgsgAyAAKAKMkQFBAWoQTAR/QQJBASADEH8bBUEACyIcIg8hBQwDC0ECQQEgAxB/GwshBSAFQQJ0IAVBBHRyIA9yIhwhDwwBCyAPQf8BcSAEQQF0dkEDcSEFCyAFRQ0AICcgBEECdGoiBiADQX9BCkHIgwFBwIMBIAQbIgogCCgCfGooAgAiDCAMQQpOG0EFa3RBf3MQnwIiDDoAACAGIANBf0EKIAgoAnwgCmooAgAiESARQQpOG0EFa3RBf3MQnwIiEToAASAGIANBf0EKIAgoAnwgCmooAgAiEiASQQpOG0EFa3RBf3MQnwIiEjoAAiAGIANBf0EKIAgoAnwgCmooAgAiCiAKQQpOG0EFa3RBf3MQnwIiHToAAwJAIAVBAUYEQEEAIQVBACEQIAxB/wFxBEBBf0EBIAMQfxshEAsgEUH/AXEEQEF/QQEgAxB/GyEFC0EAIQpBACEVIBJB/wFxBEBBf0EBIAMQfxshFQsgHUH/AXEEQEF/QQEgAxB/GyEKCyAEICZqIANBBRC2AToAACAGLQADIR0gBi0AAiESIAYtAAEhESAGLQAAIQwMAQsCQAJ/IARFBEBBASEFQX8hCiADQQIQtgEMAQtBASEFQX8hCiAEQQFHDQEgA0ECELYBIhBBAnQgEEEEdHIgH3ILIiIhHwtBfyEVQQEhEAsgBiAMIBpByMAAQcfAACAEG2otAAAiDHQgEGw6AAAgBiARIAx0IAVsOgABIAYgEiAMdCAVbDoAAiAGIB0gDHQgCmw6AAMLICgEQCAEQQJJISkgBEEBaiEEICkNAQsLIAcgIjoACSAHIBw6AAggCCgCjAEgCCgCmAEgCWxBGGxqIA5BGGxqIgMgBy0AGDoAFCADIAcpAxA3AAwgAyAHKQMINwAECyAbQf8BcQRAIAgoAowBIAgoApgBIAlsQRhsaiAOQRhsaiIDIANBGGsiBC0AFDoAFCADIAQpAAw3AAwgAyAEKQAENwAECyAZQf8BcQRAIA5BGGwiBCAIKAKMASIFIAgoApgBIgggCWxBGGxqaiIDIAUgCCAJQQFrbEEYbGogBGoiBC0AFDoAFCADIAQpAAw3AAwgAyAEKQAENwAECyAHQSBqJAAgICgC7IMBIQcLIAAgISAlIAdBABDiAgwCC0GJIEG0xgBBgAFBkx0QAQALQeMfQbTGAEGBAUGTHRABAAsCQCACQQFHDQAgDS0ALUUNACALIBYoAoSEAUEBa04NACAAKAKkkQEiAigC2AMgAigC1AMiAmtBA3UgC00NAiACIAtBA3QiA2ogHhD4ASAAKAKkkQEoAtQDIANqEJQGCwJAIBgQ2AMiA0UNACANLQAORQ0AIAAoAqCRAUG8CmogHhD4ASAAKAKgkQFBvApqEJQGIAAoAqCRAUEBOgDECgsgACgCnJEBKALAAiAkQcwAbGoiAigCAEEATARAIAJBATYCAAsgACAAKAIEIglBAWoiBDYCBCAAKAKckQEiCCgCfCIHKAKMhAEiAiAETARAIAcoAvyDASEBIAAgAjYCACAAIAIgAW0iBDYCDCAAIAIgASAEbGs2AghBACETIAMNAiAAKAKYkQFBBGpB7AdBABBRDAQLIAAoAgwhBSAHKAL8gwEhAiAAIARBAnQiByAIKAKEASgCjEJqKAIAIgQ2AgAgACAEIAJtIgs2AgwgACAEIAIgC2xrIgI2AgggAwRAQQAPCyANLQAuBH8gByANKAKYQiIDaigCACADIAlBAnRqKAIARwVBAAtFBEAgDS0ALUEARyAFIAtHcUUNAQsLIBgQ2ANFBEAgACgCmJEBQQRqQfkHQQAQUQwDCyAYEKACQQEhEwsgEw8LQfSMAUHK9QBB8AtBpiIQAQALIAAoApyRAUEDOgC4AkECC8I3ARt/IABB9JABaiEMAkACQAJAAkACQANAIAAoApyRASIJKAKEASEFAn8CQCAJKAJ8IgsoAuQDIgZBASADdCIIIAFqSARAIAsoAuiDASEHDAELIAsoAuiDASEHIAsoAugDIgogAiAIakgNACADIAdMDQBBASEHAn9BASABQQFrIgggAnJBAEgNABpBASABIAZKDQAaQQEgAiAKTg0AGkEBIAkoAowBIg4gC0H8gwFqKAIAIAIgC0HsgwFqKAIAIg11bCIQIAEgDXVqIg9BGGxqLwEAIA4gECAIIA11aiINQRhsai8BAEcNABogBSgCpEIiDiAPQQJ0aigCACAOIA1BAnRqKAIARwshHQJAIAJBAWsiDSABckEASA0AIAEgBk4NACACIApKDQAgCSgCjAEiCiALQfyDAWooAgAiECACIAtB7IMBaigCACIGdWwgASAGdSIPaiISQRhsai8BACAKIA0gBnUgEGwgD2oiBkEYbGovAQBHDQAgBSgCpEIiByASQQJ0aigCACAHIAZBAnRqKAIARyEHC0EAIQYgHUUEQCAIIAkoAqgBIgp1IgZBAEgNByAGIAkoAqwBIghODQcgAiAKdSIKQQBIDQggCiAJKAKwAU4NCCAEIAkoAqABIAZBA2xqIAggCmxBA2xqLwAAQQZ2QQNxSCEGCwJAIAwgBwR/QQAFIAEgCSgCqAEiCnUiB0EASA0IIAcgCSgCrAEiCE4NCCANIAp1IgpBAEgNASAKIAkoArABTg0BIAQgCSgCoAEgB0EDbGogCCAKbEEDbGovAABBBnZBA3FICyAAKAKMkQEgBmpqQQJqEExFDAILDAcLIAMgB0wLIR4CQCAFLQAaRQ0AIAUoAsxAIANKDQAgAEIANwLEkAELAkAgACgCoJEBLQD4BUUNACAFKALQQCADSg0AIABBADYCzJABCyAeRQRAIAAgASACIANBAWsiAyAEQQFqIgQQ4gJBASADdCIGIAJqIQUgASAGaiIGIAsoAuQDSARAIAAgBiACIAMgBBDiAgsgCygC6AMiByAFSgRAIAAgASAFIAMgBBDiAiALKALoAyEHCyAGIAsoAuQDTg0CIAYhASAFIgIgB0gNAQwCCwsgAyAJKAKoASIFayIGQR9HBEBBASAGdCILIAIgBXUiB2ohCiALIAEgBXUiBmohCyAEQQZ0QcABcSEIA0AgBiEFA0AgCSgCoAEgBUEDbGogCSgCrAEgB2xBA2xqIg0gDS8AAEG//gNxIAhyOwAAIAVBAWoiBSALSA0ACyAHQQFqIgcgCkgNAAsLIwBB0ABrIg0kACAAIgcoAqCRASEOIAAoApyRASIFKAKEASEKIAUoAnwhECABIQYgAiEJIAMiCyAFKAKoASIAayIBQR9HBEBBASABdCIIIAIgAHUiAmohDCAIIAYgAHUiAWohCANAIAEhAANAIAUoAqABIABBA2xqIAUoAqwBIAJsQQNsaiIPIA8vAABB+P8DcTsAACAAQQFqIgAgCEgNAAsgAkEBaiICIAxIDQALCwJAIAYgBSgCqAEiAXUiAEEASA0CIAAgBSgCrAEiAk4NAiAJIAF1IgFBAEgNAyABIAUoArABTg0DIAUoAqABIABBA2xqIAEgAmxBA2xqIgAgAC8AAEH4/wNxIANBB3FyOwAADAALIAsgBSgC+AEiAWsiAEEfRwRAQQEgAHQiAyAJIAF1IgBqIQggAyAGIAF1IgJqIQMDQCACIQEDQCAFKALwASABaiAFKAL8ASAAbGpBADoAACABQQFqIgEgA0gNAAsgAEEBaiIAIAhIDQALCyAHIAYgCRDpBQJAIAotACwEQCAHIAdB9JABaiAHKAKMkQFBoQFqEEwiADoAICAARQ0BIAsgBSgCqAEiAGsiAUEfRwRAQQEgAXQiAyAJIAB1IgJqIQogAyAGIAB1IgFqIQMDQCABIQADQCAFKAKgASAAQQNsaiAFKAKsASACbEEDbGoiCCAILwAAQf/vA3FBgBByOwAAIABBAWoiACADSA0ACyACQQFqIgIgCkgNAAsLAkAgBiAFKAKUASIBdSIAQQBIDQQgACAFKAKYASICTg0EIAkgAXUiAUEASA0FIAEgBSgCnAFODQUgBSgCjAEgAEEYbGogASACbEEYbGpBAToAFgwACwwBCyAHQQA6ACALQQEgC3QhCAJAAkACf0EAIA4oAhxBAkYNABogBygCnJEBIQBBASEKAn9BASAGQQFrIgMgCXJBAEgNABpBASAAKAJ8IgEoAuQDIAZIDQAaQQEgASgC6AMgCUwNABpBASAAKAKMASICIAFB/IMBaigCACAJIAFB7IMBaigCACIBdWwiDCAGIAF1aiIPQRhsai8BACACIAwgAyABdWoiAUEYbGovAQBHDQAaIAAoAoQBKAKkQiICIA9BAnRqKAIAIAIgAUECdGooAgBHCyEfAkAgCUEBayIPIAZyQQBIDQAgACgCfCIBKALkAyAGTA0AIAEoAugDIAlIDQAgACgCjAEiAiABQfyDAWooAgAiDCAJIAFB7IMBaigCACIBdWwgBiABdSITaiIVQRhsai8BACACIA8gAXUgDGwgE2oiAUEYbGovAQBHDQAgACgChAEoAqRCIgIgFUECdGooAgAgAiABQQJ0aigCAEchCgtBACEMQQAhAiAfRQRAIAMgACgCqAEiAnUiAUEASA0HIAEgACgCrAEiA04NByAJIAJ1IgJBAEgNCCACIAAoArABTg0IIAAoAqABIAFBA2xqIAIgA2xBA2xqLwAAQYAGcUGABEYhAgsgCkUEQCAGIAAoAqgBIgN1IgFBAEgNByABIAAoAqwBIgpODQcgDyADdSIDQQBIDQggAyAAKAKwAU4NCCAAKAKgASABQQNsaiADIApsQQNsai8AAEGABnFBgARGIQwLIAdB9JABaiIAIAcoAoyRASACaiAMakEFahBMQf8BcQRAQRAhAQJAIAcoAqCRASgCrAZBAkgNACAAIAcoAoyRAUGUAWoQTEUNAEEwIQEgBygCoJEBKAKsBkEDSA0AQQEhAQNAIAAQfwRAIAFBAWoiASAHKAKgkQEoAqwGQQFrSA0BCwsgAUEFdEEQciEBCyAHIAEgBy0AGkEPcXI6ABogBiAFKAKoASIBdSIAQQBIDQUgACAFKAKsASICTg0FIAkgAXUiAUEASA0GIAEgBSgCsAFODQYgBSgCoAEgAEEDbGogASACbEEDbGoiACAALwAAQcf/A3E7AAAgCyAFKAKoASIAayIBQR9HBEBBASABdCIBIAkgAHUiAmohAyABIAYgAHUiAGohBANAIAAhAQNAIAUoAqABIAFBA2xqIAUoAqwBIAJsQQNsaiILIAsvAABB//kDcUGABHI7AAAgAUEBaiIBIARIDQALIAJBAWoiAiADSA0ACwsgBygCmJEBIAcoAqCRASAHKAKckQEgB0EQaiAGIAlBAEEAIAggCCAIQQAQ8AUMAgtBACAOKAIcQQJGDQAaIAAgBygCjJEBQZUBahBMRQshAyALIAUoAqgBIgBrIgFBH0cEQEEBIAF0IgEgCSAAdSICaiEKIANBCHQhDCABIAYgAHUiAGohDgNAIAAhAQNAIAUoAqABIAFBA2xqIAUoAqwBIAJsQQNsaiIPIA8vAABB//kDcSAMcjsAACABQQFqIgEgDkgNAAsgAkEBaiICIApIDQALCwJ/IANFAn8gAwRAAn9BACEAIAcoApyRASgCfCEKAkAgB0H0kAFqIgIgBygCjJEBQQhqEEwNACACIAcoAoyRAUEJahBMIQECQCALIAooAuiDAUoEQEEBQQIgARsiACAKLQDeREUNAxogACACIAcoAoyRAUELahBMDQMaIAIQfyECIAEEQEEFIQAgAg0DCyABBEBBBCEAIAJFDQMLIAEgAnINAUEGDAMLQQEhACABDQFBAiEAIAtBA0YNAUEDIAIgBygCjJEBQQpqEExrIQAMAQsgAUUEQEEHIQAgAg0BC0HczgBByvUAQe4NQe7fABABAAsgAAsMAQtBACEBQQAgECgC6IMBIAtHDQEaQQBBAyAHQfSQAWogBygCjJEBQQhqEEwbCyIBQQNGcQshFSAGIAUoAqgBIgJ1IgBBAEgNAyAAIAUoAqwBIgpODQMgCSACdSICQQBIDQQgAiAFKAKwAU4NBCAFKAKgASAAQQNsaiACIApsQQNsaiIAIAAvAABBx/8DcSABQQN0QThxcjsAAAJAIANFBEACQCABDQAgEC0A4ERFDQAgECgCvIQBIAtKDQAgECgCwIQBIAtIDQAgB0H0kAFqIg8Q2ANFDQAgCyAFKAKoASIAayIBQR9HBEBBASABdCIDIAkgAHUiAmohBCADIAYgAHUiAWohAwNAIAEhAANAIAUoAqABIABBA2xqIAUoAqwBIAJsQQNsaiIKIAovAABB//cDcUGACHI7AAAgAEEBaiIAIANIDQALIAJBAWoiAiAESA0ACwsCQCAGIAUoApQBIgF1IgBBAEgNByAAIAUoApgBIgJODQcgCSABdSIBQQBIDQggASAFKAKcAU4NCCAFKAKMASAAQRhsaiABIAJsQRhsakEBOgAWDAALIA0gBygC+JABIgA2AjAgBygC/JABIQFBACEMIA1BADYCQCANQgA3AzggDSABIABrNgI0IAcoApyRASIAKAIoIgEgCWwhAiAAKAIEIQMgACgCfCIELADhRCEAAkAgBCgCwIMBIgRBCU4EQCALQR9GDQEgBCAAayIEQQAgBEEAShshBSADIAIgBmpBAXRqIQIDQCACIAEgDGxBAXRqIQNBACEEA0AgAyAEQQF0aiANQTBqIAAQMSAFdDsBACAEQQFqIgQgCEcNAAsgDEEBaiIMIAhHDQALDAELIAtBH0YNACAEIABrIgRBACAEQQBKGyEFIAIgA2ogBmohAgNAIAIgASAMbGohA0EAIQQDQCADIARqIA1BMGogABAxIAV0OgAAIARBAWoiBCAIRw0ACyAMQQFqIgwgCEcNAAsLAkAgBygCnJEBIgwoAnwiACgC0IMBRQ0AIAYgACgC1IMBIgFtIQsgCCAAKALYgwEiAm0hCiAIIAFtIQQgDCgCLCIDIAkgAm1sIQ4gDCgCCCEQIAAsAOJEIQEgACgCyIMBIgBBCU4EQEEAIQUgACABayIAQQAgAEEAShshAiALIA5qQQF0IQACQCAEQQBMDQAgCkEATA0AIAAgEGohCwNAIAsgAyAFbEEBdGohDEEAIQADQCAMIABBAXRqIA1BMGogARAxIAJ0OwEAIABBAWoiACAERw0ACyAFQQFqIgUgCkcNAAsgBygCnJEBIgwoAnwiACgCyIMBIAAsAOJEIgFrIgJBACACQQBKGyECIAwoAiwiAyAJIAAoAtiDASIEbWwgBiAAKALUgwEiBW1qQQF0IQAgCCAEbSEKIAggBW0hBAsgCkEATA0BIARBAEwNASAMKAIMIABqIQZBACEFA0AgBiADIAVsQQF0aiEJQQAhAANAIAkgAEEBdGogDUEwaiABEDEgAnQ7AQAgAEEBaiIAIARHDQALIAVBAWoiBSAKRw0ACwwBC0EAIQUgACABayIAQQAgAEEAShshAgJAIARBAEwNACAKQQBMDQAgDiAQaiALaiELA0AgCyADIAVsaiEMQQAhAANAIAAgDGogDUEwaiABEDEgAnQ6AAAgAEEBaiIAIARHDQALIAVBAWoiBSAKRw0ACyAHKAKckQEiDCgCfCIAKALIgwEgACwA4kQiAWsiAkEAIAJBAEobIQIgBiAAKALUgwEiA20hCyAIIAAoAtiDASIAbSEKIAggA20hBCAMKAIsIgMgCSAAbWwhDgsgCkEATA0AIARBAEwNACAMKAIMIA5qIAtqIQZBACEFA0AgBiADIAVsaiEJQQAhAANAIAAgCWogDUEwaiABEDEgAnQ6AAAgAEEBaiIAIARHDQALIAVBAWoiBSAKRw0ACwsgDUEwahCTBiAHIA0oAjA2AviQASAPEKACDAMLIAhBAm0gCCABQQNGIgIbIQ8gC0EfRwRAIAdB9JABaiEDQQAhAUEAIQwDQEEAIQADQCANQTBqIAFBAnRqIAMgBygCjJEBQQxqEEw2AgAgAUEBaiEBIAAgD2oiACAISA0ACyAMIA9qIgwgCEgNAAsLAn9BACAGQQFrIgEgCXJBAEgNABpBACAFKAJ8IgAoAuQDIAZIDQAaQQAgACgC6AMgCUwNABpBACAFKAKMASIDIABB/IMBaigCACAJIABB7IMBaigCACIAdWwiBCAGIAB1aiIKQRhsai8BACADIAQgASAAdWoiAEEYbGovAQBHDQAaIAUoAoQBKAKkQiIBIApBAnRqKAIAIAEgAEECdGooAgBGCyEaAkAgCUEBayIBIAZyQQBIDQAgBSgCfCIAKALkAyAGTA0AIAAoAugDIAlIDQAgBSgCjAEiAyAAQfyDAWooAgAiBCAJIABB7IMBaigCACIAdWwgBiAAdSIKaiIMQRhsai8BACADIAEgAHUgBGwgCmoiAEEYbGovAQBHDQAgBSgChAEoAqRCIgEgDEECdGooAgAgASAAQQJ0aigCAEYhGwsgCyACayESIAtBH0cEQCAHQfSQAWohGUEAIRMDQCAJIBNqIQQgGyATQQBKciEKQQAhDgNAAn8gF0ECdCIUIA1BMGpqKAIAIhwEQCAZQQIQnwIhDCANQSBqDAELIBlBBRC2ASEMIA1BEGoLIBRqIAw2AgAgBiAOaiIAIQIgECgCtIQBIAQgECgCsIQBIgF1bCAAIAF1aiIMIQMgBSgCfCEWQQEhAQJAAn9BASAaIA5BAEpyRQ0AGiACQQFrIAUoAqgBIhF1IgBBAEgNDCAAIAUoAqwBIhhODQwgBCARdSIRQQBIDQ0gESAFKAKwAU4NDUEBIAUoAqABIABBA2xqIBEgGGxBA2xqLQABQQdxDQAaIAUoAsgBIANqQQFrLQAACyEAAkAgCkUNACACIAUoAqgBIhF1IgJBAEgNDCACIAUoAqwBIhhODQwgBEEBayARdSIRQQBIDQ0gESAFKAKwAU4NDSAFKAKgASACQQNsaiARIBhsQQNsai0AAUEHcQ0AQX8gFigC7IMBdCAEcSAETg0AIAUoAsgBIAMgFigCtIQBa2otAAAhAQsgACABRgRAIABBAU0EQCANQRo2AgwgDUKAgICAEDcCBAwCCyANIAA2AgQgDSAAQQFrQR9xQQJqNgIMIA0gAEEdakEfcUECajYCCAwBCyANIAE2AgggDSAANgIEAkAgAEUNACABRQ0AIA1BADYCDAwBCwJAIABBAUYNACABQQFGDQAgDUEBNgIMDAELIA1BGjYCDAwACwJ/IBxBAUcEQCANKAIEIgAgDSgCCCICIAAgAkobIQECQCAAIAIgACACSBsiACANKAIMIgJMBEAgACEDIAIhAAwBCyANIAA2AgwgDSACNgIEIAIhAwsCQCAAIAFOBEAgACECIAEhAAwBCyANIAA2AgggASECCyANQRBqIBRqKAIAIgEgASADTmoiASAAIAFMaiIAIAAgAk5qDAELIA1BBGogDUEgaiAUaigCAEECdGooAgALIQMgEiAFKALQASIUayIAQR9HBEBBASAAdCIWQf7///8HcSERQQAhAANAQQAhAUEAIQIgEiAURwRAA0AgBSgCyAEgAWogDGogBSgC1AEgAGxqIAM6AAAgBSgCyAEgAWogDGogBSgC1AEgAGxqIAM6AAEgAUECaiEBIAJBAmoiAiARRw0ACwsgEiAURgRAIAUoAsgBIAFqIAxqIAUoAtQBIABsaiADOgAACyAAQQFqIgAgFkcNAAsLIBdBAWohFyAOIA9qIg4gCEgNAAsgDyATaiITIAhIDQALCwJAAkAgECgC0IMBDgQDAQEAAQsgC0EfRg0CIAdB9JABaiEAQQAhDgJAA0AgCSAOaiECQQAhAQJAA0AgACAHKAKMkQFBDWoQTAR/IABBAhC2AQVBBAshAyABIAZqIgwgBSgC0AEiCnUiBEEASA0BIAQgBSgC1AEiE04NASACIAp1IgpBAEgNAyAKIAUoAtgBTg0DIAUoAsgBIARqIAogE2xqLQAAIgRBACAEQSJNGyEEIAUgDCACIBIgA0EERiIKBH8gBAVBIiADQQJ0QbCPA2ooAgAiAyADIARGGwsgChDsBSABIA9qIgEgCEgNAAsgDiAPaiIOIAhIDQEMBQsLDAkLDAkLIAdB9JABaiIAIAcoAoyRAUENahBMBH8gAEECELYBBUEECyEAIAYgBSgC0AEiAnUiAUEASA0HIAEgBSgC1AEiA04NByAJIAJ1IgJBAEgNCCACIAUoAtgBTg0IIAUoAsgBIAFqIAIgA2xqLQAAIgFBACABQSJNGyEBIABBBEcEQEEiIABBAnRBsI8DaigCACICIAEgAkYbIQELIAUgBiAJIAsgECgC0IMBQQJGBH8gAUHAjwNqLQAABSABCyAAQQRGEOwFDAELAkACQAJAAkACQAJAAkACQAJAAkACQCABDggIAAEGAgMEBQcLIAcgBiAJQQBBACAIIAhBAm0iACAEIAhBABCJASAHIAYgCUEAIAAgCCAAIAQgCEEBEIkBDAgLIAcgBiAJQQBBACAIQQJtIgAgCCAEIAhBABCJASAHIAYgCSAAQQAgACAIIAQgCEEBEIkBDAcLIAcgBiAJQQBBACAIIAhBBG0iACAEIAhBABCJASAHIAYgCUEAIAAgCEEDIAt0QQRtIAQgCEEBEIkBDAYLIAcgBiAJQQBBACAIQQMgC3RBBG0iACAEIAhBABCJASAHIAYgCUEAIAAgCCAIQQRtIAQgCEEBEIkBDAULIAcgBiAJQQBBACAIQQRtIgAgCCAEIAhBABCJASAHIAYgCSAAQQBBAyALdEEEbSAIIAQgCEEBEIkBDAQLIAcgBiAJQQBBAEEDIAt0QQRtIgAgCCAEIAhBABCJASAHIAYgCSAAQQAgCEEEbSAIIAQgCEEBEIkBDAMLIAcgBiAJQQBBACAIQQJtIgAgACAEIAhBABCJASAHIAYgCSAAQQAgACAAIAQgCEEBEIkBIAcgBiAJQQAgACAAIAAgBCAIQQIQiQEgByAGIAkgACAAIAAgACAEIAhBAxCJAQwCC0GdkAFByvUAQcAjQYMbEAEACyAHIAYgCUEAQQAgCCAIIAQgCEEAEIkBIActABpBEHENAQsgB0H0kAFqIAcoAoyRAUGZAWoQTEUNAgsgByAGIAkgBiAJIAYgCSALQQBBACAQKAL0BCAVQQEgECgC0IMBQQBHIgAgABCaAgwBCyAHIAYgCSAGIAkgBiAJIAtBAEEAIBAoAvgEIBVqIBVBACAQKALQgwFBAEciACAAEJoCCyANQdAAaiQADAALCw8LQYkgQbTGAEGAAUGTHRABAAtB4x9BtMYAQYEBQZMdEAEAC0GJIEG0xgBB9gBBkx0QAQALQeMfQbTGAEH3AEGTHRABAAufAgEEfyACLQDMAkUEQCAJQQA2AQAgCkEAOgAADwsgASgCfCgC7IMBIQsgAAJ/AkAgAigCHA0AIAItAPwCDQBB3AcMAQtBnAcLIAJqIAIoAoADQQJ0aigCACIMIAAoAgAoAgwRBQBFBEAgCUEANgEAIApBADoAACAAQQRqQfQHQQAQUQ8LAkACQAJAAkAgBCALdSAEIAZqIg0gC3VHDQAgAyAFaiILIAEoAnwiDigC5ANODQAgDSAOKALoA0gNAQsgCUEANgEAIApBADoAAAwBCyAAIAEgAiAMIAtBcHEgDUFwcSAHIAggCSAKEPIFIAotAAANAQsgACABIAIgDCAFQQF1IANqQXBxIAZBAXUgBGpBcHEgByAIIAkgChDyBQsLDAAgAEEAQeQAEDQaC/MQARh/IAAoAhQhCCAAKAIQIQcgACgCDCEDIAAoAgghCQNAIAAgASgAACIKNgJYIAAgASgABCILNgJcIAAgASgACCIMNgJgIAAgASgADCINNgJkIAAgASgAECIONgJoIAAgASgAFCIPNgJsIAAgASgAGCIQNgJwIAAgASgAHCIRNgJ0IAAgASgAICISNgJ4IAAgASgAJCITNgJ8IAAgASgAKCIUNgKAASAAIAEoACwiFTYChAEgACABKAAwIhY2AogBIAAgASgANCIXNgKMASAAIAEoADgiGDYCkAEgACABKAA8Ihk2ApQBIAMgDCAQIBQgGCAZIA0gESAVIBEgDSAZIBUgGCAUIBAgByAMaiAIIAtqIAogCSADIAcgCHNxIAhzampBiLfVxAJrQQd3IANqIgQgAyAHc3EgB3NqQaqR4bkBa0EMdyAEaiIFIAMgBHNxIANzakHb4YGhAmpBEXcgBWoiBmogBSAPaiAEIA5qIAMgDWogBiAEIAVzcSAEc2pBkuKI8gNrQRZ3IAZqIgMgBSAGc3EgBXNqQdHgj9QAa0EHdyADaiIEIAMgBnNxIAZzakGqjJ+8BGpBDHcgBGoiBSADIARzcSADc2pB7fO+vgVrQRF3IAVqIgZqIAUgE2ogBCASaiADIBFqIAYgBCAFc3EgBHNqQf/V5RVrQRZ3IAZqIgMgBSAGc3EgBXNqQdixgswGakEHdyADaiIEIAMgBnNxIAZzakHRkOylB2tBDHcgBGoiBSADIARzcSADc2pBz8gCa0ERdyAFaiIGaiAFIBdqIAQgFmogAyAVaiAGIAQgBXNxIARzakHC0Iy1B2tBFncgBmoiAyAFIAZzcSAFc2pBoqLA3AZqQQd3IANqIgQgAyAGc3EgBnNqQe2cnhNrQQx3IARqIgYgAyAEc3EgA3NqQfL4mswFa0ERdyAGaiIFaiAGIBBqIAQgC2ogAyAZaiAFIAQgBnNxIARzakGhkNDNBGpBFncgBWoiAyAFcyAGcSAFc2pBnrWHzwBrQQV3IANqIgQgA3MgBXEgA3NqQcCZ/f0Da0EJdyAEaiIFIARzIANxIARzakHRtPmyAmpBDncgBWoiBmogBSAUaiAEIA9qIAMgCmogBSAGcyAEcSAFc2pB1vCksgFrQRR3IAZqIgMgBnMgBXEgBnNqQaPfw84Ca0EFdyADaiIEIANzIAZxIANzakHTqJASakEJdyAEaiIFIARzIANxIARzakH/svi6AmtBDncgBWoiBmogBSAYaiAEIBNqIAMgDmogBSAGcyAEcSAFc2pBuIiwwQFrQRR3IAZqIgMgBnMgBXEgBnNqQeabh48CakEFdyADaiIEIANzIAZxIANzakGq8KPmA2tBCXcgBGoiBSAEcyADcSAEc2pB+eSr2QBrQQ53IAVqIgZqIAUgDGogBCAXaiADIBJqIAUgBnMgBHEgBXNqQe2p6KoEakEUdyAGaiIDIAZzIAVxIAZzakH7rfCwBWtBBXcgA2oiBCADcyAGcSADc2pBiLjBGGtBCXcgBGoiBSAEcyADcSAEc2pB2YW8uwZqQQ53IAVqIgZqIAQgD2ogBSAGcyIaIAMgFmogBCAacSAFc2pB9ubWlgdrQRR3IAZqIgNzakG+jRdrQQR3IANqIgQgA3MgBSASaiADIAZzIARzakH/krjEB2tBC3cgBGoiBXNqQaLC9ewGakEQdyAFaiIGaiAEIAtqIAMgGGogBCAFcyAGc2pB9I/rEGtBF3cgBmoiAyAFIAZzc2pBvKuE2gVrQQR3IANqIgQgA3MgBSAOaiADIAZzIARzakGpn/veBGpBC3cgBGoiBXNqQaDpksoAa0EQdyAFaiIGaiAEIBdqIAMgFGogBCAFcyAGc2pBkIeBigRrQRd3IAZqIgMgBSAGc3NqQcb97cQCakEEdyADaiIEIANzIAUgCmogAyAGcyAEc2pBhrD7qgFrQQt3IARqIgVzakH7nsPYAmtBEHcgBWoiBmogBCATaiADIBBqIAQgBXMgBnNqQYW6oCRqQRd3IAZqIgMgBSAGc3NqQcffrLECa0EEdyADaiIEIANzIAUgFmogAyAGcyAEc2pBm8yRyQFrQQt3IARqIgVzakH4+Yn9AWpBEHcgBWoiBmogBSARaiAEIApqIAMgDGogBCAFcyAGc2pBm9PO2gNrQRd3IAZqIgMgBUF/c3IgBnNqQby7294Aa0EGdyADaiIEIAZBf3NyIANzakGX/6uZBGpBCncgBGoiBSADQX9zciAEc2pB2bivowVrQQ93IAVqIgZqIAUgDWogBCAWaiADIA9qIAYgBEF/c3IgBXNqQce/sRtrQRV3IAZqIgMgBUF/c3IgBnNqQcOz7aoGakEGdyADaiIEIAZBf3NyIANzakHu5syHB2tBCncgBGoiBSADQX9zciAEc2pBg5fAAGtBD3cgBWoiBmogBSAZaiAEIBJqIAMgC2ogBiAEQX9zciAFc2pBr8Tu0wdrQRV3IAZqIgMgBUF/c3IgBnNqQc/8of0GakEGdyADaiIEIAZBf3NyIANzakGgsswOa0EKdyAEaiIFIANBf3NyIARzakHs+frnBWtBD3cgBWoiBmogBSAVaiAEIA5qIAMgF2ogBiAEQX9zciAFc2pBoaOg8ARqQRV3IAZqIgMgBUF/c3IgBnNqQf6CssUAa0EGdyADaiIEIAZBf3NyIANzakHLm5SWBGtBCncgBGoiBSADQX9zciAEc2pBu6Xf1gJqQQ93IAVqIgZqIAMgE2ogBiAEQX9zciAFc2pB79jkowFrQRV3aiEDIAYgB2ohByAFIAhqIQggBCAJaiEJIAFBQGshASACQUBqIgINAAsgACAINgIUIAAgBzYCECAAIAM2AgwgACAJNgIIIAELJAAgACgC0AIgACgC1AJHBEADQCAAKALQAiAAKALUAkcNAAsLC0UBAX8gACAAKALIAiIBQQFrNgLIAiAAIAAoAtACQQFqNgLQAiABQQBKBEAgACgC1AIaDwtBz48BQcH1AEGlBUGSJRABAAunCwEJfyMAQSBrIgYkAAJAAkAgACgCECICQYAITwRAIAAgAkGACGs2AhAgACgCBCICKAIAIQggACACQQRqIgE2AgQCQCAAKAIIIgMgACgCDEcNACAAKAIAIgIgAUkEQCADIAFrIQQgASABIAJrQQJ1QQFqQX5tQQJ0IgVqIQIgASADRwRAIAIgASAEEDcaIAAoAgQhAQsgACACIARqIgM2AgggACABIAVqNgIEDAELQQEgAyACa0EBdSACIANGGyIEQYCAgIAETw0DIARBAnQiBRAsIgcgBWohCSAHIARBfHFqIgQhBSABIANHBEAgBCADIAFraiEDA0AgBSABKAIANgIAIAFBBGohASAFQQRqIgUgA0cNAAsLIAAgCTYCDCAAIAU2AgggACAENgIEIAAgBzYCACACECogACgCCCEDCyADIAg2AgAgACAAKAIIQQRqNgIIDAELIAAoAggiASAAKAIEIgVrIgQgACgCDCICIAAoAgAiA2siB0kEQCABIAJHBEAgBkGAIBAsNgIMAkACQAJAIAAoAggiBCAAKAIMRwRAIAQhAgwBCyAAKAIEIgEgACgCACIDSwRAIAQgAWshAiABIAEgA2tBAnVBAWpBfm1BAnQiBWohAyABIARHBEAgAyABIAIQNxogACgCBCEBCyAAIAIgA2oiAjYCCCAAIAEgBWo2AgQMAQtBASAEIANrQQF1IAMgBEYbIgJBgICAgARPDQEgAkECdCIHECwiBSAHaiEIIAUgAkF8cWoiByECIAEgBEcEQCAHIAQgAWtqIQQDQCACIAEoAgA2AgAgAUEEaiEBIAJBBGoiAiAERw0ACwsgACAINgIMIAAgAjYCCCAAIAc2AgQgACAFNgIAIANFDQAgAxAqIAAoAgghAgsgAiAGKAIMNgIAIAAgACgCCEEEajYCCAwBCxBPAAsMAgsgBkGAIBAsNgIMIAAgBkEMahCBBiAAKAIEIgIoAgAhCCAAIAJBBGoiATYCBAJAIAAoAggiAyAAKAIMRw0AIAAoAgAiAiABSQRAIAMgAWshBCABIAEgAmtBAnVBAWpBfm1BAnQiBWohAiABIANHBEAgAiABIAQQNxogACgCBCEBCyAAIAIgBGoiAzYCCCAAIAEgBWo2AgQMAQtBASADIAJrQQF1IAIgA0YbIgRBgICAgARPDQMgBEECdCIFECwiByAFaiEJIAcgBEF8cWoiBCEFIAEgA0cEQCAEIAMgAWtqIQMDQCAFIAEoAgA2AgAgAUEEaiEBIAVBBGoiBSADRw0ACwsgACAJNgIMIAAgBTYCCCAAIAQ2AgQgACAHNgIAIAIQKiAAKAIIIQMLIAMgCDYCACAAIAAoAghBBGo2AggMAQsgBiAAQQxqNgIcQQEgB0EBdSACIANGGyICQYCAgIAETw0BIAYgAkECdCIIECwiAjYCDCAGIAIgCGoiBzYCGCAGIAIgBGoiAzYCEEGAIBAsIQkCQCAEIAhHDQAgBEEASgRAIAYgAyAEQQF2QQJqQXxxayIDNgIQDAELQQEgBEEBdSABIAVGGyIBQYCAgIAETw0CIAYgAUECdCIDECwiBDYCDCAGIAMgBGoiBzYCGCAGIAQgAUF8cWoiAzYCECACECogACgCBCEFIAAoAgghASAEIQILIAMgCTYCACAGIANBBGoiCDYCFCABIAVHBEADQCAGQQxqIAFBBGsiARCBBiABIAAoAgQiBUcNAAsgACgCCCEBIAYoAhghByAGKAIUIQggBigCECEDIAYoAgwhAgsgACgCACEEIAAgAjYCACAGIAQ2AgwgACADNgIEIAYgBTYCECAAIAg2AgggBiABNgIUIAAoAgwhAiAAIAc2AgwgBiACNgIYIAEgBUcEQCAGIAEgBSABa0EDakF8cWo2AhQLIARFDQAgBBAqCyAGQSBqJAAPCxBPAAvGBQEUfyMAQYAQayIKJAACfyABQQJIBEBBfyEJQQYhEEF+IQhBICERQQUMAQsgASEEA0AgBSIJQQFqIQUgBEEDSyEVIARBAXYhBCAVDQALQQAhBSABIQQDQCAFIgdBAWohBSAEQQNLIRYgBEEBdiEEIBYNAAsgCUEBayEIQQAhBSABIQQDQCAFIgZBAWohBSAEQQNLIRcgBEEBdiEEIBcNAAtBwAAgB3QhESAHQQdqIRBBBCAGawshDQJAIAFBAEwNAEEBIAh0IQsgAUH+////B3EhEyABQQFxIRQgAUEBayESQQAhBgNAIAIgBkEBdGohDEEAIQgDQCAIIA10IQ5BACEEQQAhBUEAIQcgEgRAA0AgDCAEQQFyIg8gA2xBAXRqLgEAIA8gDkEFdEGQgQNqIg9qLAAAbCAMIAMgBGxBAXRqLgEAIAQgD2osAABsIAVqaiEFIARBAmohBCAHQQJqIgcgE0cNAAsLIAogASAIbCAGakEBdGogFAR/IAwgAyAEbEEBdGouAQAgDkEFdCAEakGQgQNqLAAAbCAFagUgBQsgC2ogCXU7AQAgCEEBaiIIIAFHDQALIAZBAWoiBiABRw0ACyABQQBMDQAgAUH+////B3EhCCABQQFxIQxBACEJA0AgACABIAlsIgNBAXRqIQ5BACECA0AgAiANdCEGQQAhBEEAIQVBACEHIBIEQANAIAogBEEBciILIANqQQF0ai4BACALIAZBBXRBkIEDaiILaiwAAGwgCiADIARqQQF0ai4BACAEIAtqLAAAbCAFamohBSAEQQJqIQQgB0ECaiIHIAhHDQALCyAOIAJBAXRqIAwEfyAKIAMgBGpBAXRqLgEAIAZBBXQgBGpBkIEDaiwAAGwgBWoFIAULIBFqIBB1OwEAIAJBAWoiAiABRw0ACyAJQQFqIgkgAUcNAAsLIApBgBBqJAALpAkBE38jAEGAEGsiCiQAQQUhCyACQQJOBEBBACELIAIhBQNAIAsiBkEBaiELIAVBA0shFyAFQQF2IQUgFw0AC0EEIAZrIQsLAkAgAkEATA0AIAJB/P///wdxIREgAkEDcSEPIAJBAWshEANAIAMgCEEBdGohDUEAIQUgAiEGAkADQCAFIQwgBiIJQQBMBEBBACEGQQAhBUEAIQcgEEEDTwRAA0AgCiACIAVsIAhqQQF0akEAOwEAIAogBUEBciACbCAIakEBdGpBADsBACAKIAVBAnIgAmwgCGpBAXRqQQA7AQAgCiAFQQNyIAJsIAhqQQF0akEAOwEAIAVBBGohBSAHQQRqIgcgEUcNAAsLIA9FDQIDQCAKIAIgBWwgCGpBAXRqQQA7AQAgBUEBaiEFIAZBAWoiBiAPRw0ACwwCCyAMQQFqIQUgDSAJQQFrIgYgAmxBAXRqLwEARQ0ACyAJQf7///8HcSESIAlBAXEhCUEAIQYDQEEAIQVBACEHQQAhDiAMIBBHBEADQCANIAIgBWxBAXRqLgEAIAUgC3RBBXQgBmpBkIEDaiwAAGwgB2ogDSAFQQFyIgcgAmxBAXRqLgEAIAcgC3RBBXQgBmpBkIEDaiwAAGxqIQcgBUECaiEFIA5BAmoiDiASRw0ACwsgCiACIAZsIAhqQQF0akGAgH5B//8BIAkEfyANIAIgBWxBAXRqLgEAIAUgC3RBBXQgBmpBkIEDaiwAAGwgB2oFIAcLQUBrQQd1IgUgBUH//wFOGyIFIAVBgIB+TBs7AQAgBkEBaiIGIAJHDQALCyAIQQFqIgggAkcNAAsgAkEATA0AIAJB/v///wdxIQ8gAkEBcSERQQFBEyAEa3QiEkEUIARrIhN1IQ1BfyAEdEF/cyEMQQAhBANAIAIgBGwhCEEAIQUgAiEGAkACQANAIAUhCSAGIgNBAEwNASAFQQFqIQUgCiAGQQFrIgYgCGpBAXRqLwEARQ0ACyADQf7///8HcSEUIANBAXEhFSAAIAEgBGxBAXRqIRZBACEGA0BBACEFQQAhB0EAIQ4gCSAQRwRAA0AgCiAFIAhqQQF0ai4BACAFIAt0QQV0IAZqQZCBA2osAABsIAdqIAogBUEBciIDIAhqQQF0ai4BACADIAt0QQV0IAZqQZCBA2osAABsaiEHIAVBAmohBSAOQQJqIg4gFEcNAAsLIBYgBkEBdGoiAyADLwEAIBUEfyAKIAUgCGpBAXRqLgEAIAUgC3RBBXQgBmpBkIEDaiwAAGwgB2oFIAcLIBJqIBN1aiIDIAwgAyAMSBtBACADQQBOGzsBACAGQQFqIgYgAkcNAAsMAQsgACABIARsQQF0aiEGQQAhBUEAIQkgEARAA0AgBiAFQQF0aiIDIA0gAy8BAGoiByAMIAcgDEgbQQAgB0EAThs7AQAgAyANIAMvAQJqIgMgDCADIAxIG0EAIANBAE4bOwECIAVBAmohBSAJQQJqIgkgD0cNAAsLIBFFDQAgBiAFQQF0aiIDIA0gAy8BAGoiAyAMIAMgDEgbQQAgA0EAThs7AQALIARBAWoiBCACRw0ACwsgCkGAEGokAAvfCAEQfyMAQYAQayIJJABBBSEKIAJBAk4EQEEAIQogAiEEA0AgCiIFQQFqIQogBEEDSyETIARBAXYhBCATDQALQQQgBWshCgsCQCACQQBMDQAgAkH8////B3EhECACQQNxIQ4gAkEBayEPA0AgAyAHQQF0aiEMQQAhBCACIQUCQANAIAQhCyAFIghBAEwEQEEAIQVBACEEQQAhBiAPQQNPBEADQCAJIAIgBGwgB2pBAXRqQQA7AQAgCSAEQQFyIAJsIAdqQQF0akEAOwEAIAkgBEECciACbCAHakEBdGpBADsBACAJIARBA3IgAmwgB2pBAXRqQQA7AQAgBEEEaiEEIAZBBGoiBiAQRw0ACwsgDkUNAgNAIAkgAiAEbCAHakEBdGpBADsBACAEQQFqIQQgBUEBaiIFIA5HDQALDAILIAtBAWohBCAMIAhBAWsiBSACbEEBdGovAQBFDQALIAhB/v///wdxIREgCEEBcSEIQQAhBQNAQQAhBEEAIQZBACENIAsgD0cEQANAIAwgAiAEbEEBdGouAQAgBCAKdEEFdCAFakGQgQNqLAAAbCAGaiAMIARBAXIiBiACbEEBdGouAQAgBiAKdEEFdCAFakGQgQNqLAAAbGohBiAEQQJqIQQgDUECaiINIBFHDQALCyAJIAIgBWwgB2pBAXRqQYCAfkH//wEgCAR/IAwgAiAEbEEBdGouAQAgBCAKdEEFdCAFakGQgQNqLAAAbCAGagUgBgtBQGtBB3UiBCAEQf//AU4bIgQgBEGAgH5MGzsBACAFQQFqIgUgAkcNAAsLIAdBAWoiByACRw0ACyACQQBMDQAgAkH+////B3EhDCACQQFxIQ5BACELA0AgAiALbCEHQQAhBCACIQUCQAJAA0AgBCEIIAUiA0EATA0BIARBAWohBCAJIAVBAWsiBSAHakEBdGovAQBFDQALIANB/v///wdxIRAgA0EBcSERIAAgASALbGohEkEAIQUDQEEAIQRBACEGQQAhDSAIIA9HBEADQCAJIAQgB2pBAXRqLgEAIAQgCnRBBXQgBWpBkIEDaiwAAGwgBmogCSAEQQFyIgMgB2pBAXRqLgEAIAMgCnRBBXQgBWpBkIEDaiwAAGxqIQYgBEECaiEEIA1BAmoiDSAQRw0ACwsgBSASaiIDQf8BIAMtAAAgEQR/IAkgBCAHakEBdGouAQAgBCAKdEEFdCAFakGQgQNqLAAAbCAGagUgBgtBgBBqQQx1aiIDIANB/wFOG0EAIANBAE4bOgAAIAVBAWoiBSACRw0ACwwBCyAAIAEgC2xqIQVBACEEQQAhCCAPBEADQCAEIAVqIgNB/wEgAy0AACIGIAZB/wFPGzoAACADQf8BIAMtAAEiAyADQf8BTxs6AAEgBEECaiEEIAhBAmoiCCAMRw0ACwsgDkUNACAEIAVqIgNB/wEgAy0AACIDIANB/wFPGzoAAAsgC0EBaiILIAJHDQALCyAJQYAQaiQAC/0IARF/IwBBgBBrIgkkAEEFIQogAUECTgRAQQAhCiABIQUDQCAKIgtBAWohCiAFQQNLIRUgBUEBdiEFIBUNAAtBBCALayEKCwJAIAFBAEwNAEEAQQEgBHQiDmshDyAOQf//A2ohEiABQfz///8HcSETIAFBA3EhECABQQFrIREDQCACIAdBAXRqIQxBACEFIAEhBAJAA0AgBSEIIAQiC0EATARAQQAhBEEAIQVBACEGIBFBA08EQANAIAkgASAFbCAHakEBdGpBADsBACAJIAVBAXIgAWwgB2pBAXRqQQA7AQAgCSAFQQJyIAFsIAdqQQF0akEAOwEAIAkgBUEDciABbCAHakEBdGpBADsBACAFQQRqIQUgBkEEaiIGIBNHDQALCyAQRQ0CA0AgCSABIAVsIAdqQQF0akEAOwEAIAVBAWohBSAEQQFqIgQgEEcNAAsMAgsgCEEBaiEFIAwgC0EBayIEIAFsQQF0ai8BAEUNAAsgC0H+////B3EhFCALQQFxIQtBACEEA0BBACEFQQAhBkEAIQ0gCCARRwRAA0AgDCABIAVsQQF0ai4BACAFIAp0QQV0IARqQZCBA2osAABsIAZqIAwgBUEBciIGIAFsQQF0ai4BACAGIAp0QQV0IARqQZCBA2osAABsaiEGIAVBAmohBSANQQJqIg0gFEcNAAsLIAkgASAEbCAHakEBdGogDyALBH8gDCABIAVsQQF0ai4BACAFIAp0QQV0IARqQZCBA2osAABsIAZqBSAGC0FAa0EHdSIFIBIgBSAOSBsgBSAPSBs7AQAgBEEBaiIEIAFHDQALCyAHQQFqIgcgAUcNAAsgAUEATA0AIAFB+P///wdxIQ8gAUEHcSEOQQEgA0EBa3QiECADdSEIQQAhDANAIAEgDGwhB0EAIQUgASEEAkACQANAIAUhCyAEIgJBAEwNASAFQQFqIQUgCSAEQQFrIgQgB2pBAXRqLwEARQ0ACyACQf7///8HcSESIAJBAXEhAiAAIAdBAnRqIRNBACEEA0BBACEFQQAhBkEAIQ0gCyARRwRAA0AgCSAFIAdqQQF0ai4BACAFIAp0QQV0IARqQZCBA2osAABsIAZqIAkgBUEBciIGIAdqQQF0ai4BACAGIAp0QQV0IARqQZCBA2osAABsaiEGIAVBAmohBSANQQJqIg0gEkcNAAsLIBMgBEECdGogAgR/IAkgBSAHakEBdGouAQAgBSAKdEEFdCAEakGQgQNqLAAAbCAGagUgBgsgEGogA3U2AgAgBEEBaiIEIAFHDQALDAELIAAgB0ECdGohBUEAIQZBACEEQQAhDSARQQdPBEADQCAFIARBAnRqIgIgCDYCACACIAg2AgQgAiAINgIIIAIgCDYCDCACIAg2AhAgAiAINgIUIAIgCDYCGCACIAg2AhwgBEEIaiEEIA1BCGoiDSAPRw0ACwsgDkUNAANAIAUgBEECdGogCDYCACAEQQFqIQQgBkEBaiIGIA5HDQALCyAMQQFqIgwgAUcNAAsLIAlBgBBqJAAL5wIBBn8gASAAKAIIIgUgACgCBCIGa00EQCAAIAEEfyAGIAItAAAgARA0IAFqBSAGCzYCBA8LIAYgACgCACIEayIHIAFqIgNBAE4EQEH/////ByAFIARrIgVBAXQiCCADIAMgCEkbIAVB/////wNPGyIDBH8gAxAsBUEACyIFIANqIQggBSAHaiIDIAItAAAgARA0IAFqIQUgBCAGRwRAAkAgB0EDcSIHRQRAIAYhAQwBC0EAIQIgBiEBA0AgA0EBayIDIAFBAWsiAS0AADoAACACQQFqIgIgB0cNAAsLIAQgBmtBfE0EQANAIANBAWsgAUEBay0AADoAACADQQJrIAFBAmstAAA6AAAgA0EDayABQQNrLQAAOgAAIANBBGsiAyABQQRrIgEtAAA6AAAgASAERw0ACwsgACgCCBogACgCACEECyAAIAg2AgggACAFNgIEIAAgAzYCACAEBEAgBBAqCw8LEDYAC+8DAQV/IwBBEGsiBiQAIABB3BBqIgdBARCIBgRAIAAgACgC6AosAA1BA3RqIggoAtgFIQQCQCAIKALcBSIFRQRAIAZBADYCDAwBCyAFIAUoAgRBAWo2AgQgBiAFNgIMIAUgBSgCBEEBajYCBAsgBiAENgIIIAYgBikCCDcDAEEAIQQgByAGIABCAEEAQQAQgwYiB0EATgRAIAcgACgC6BAgACgC5BAiAGtBAnVJBEAgACAHQQJ0aigCACEEC0EBIAEoAsiDAUEBa3QhAEEBIAEoAsCDAUEBa3QiCEEATgRAIAQoAgQgCCAEKAIcIAQoAihsEDQaCyAAQQBOBEAgBCgCCCAAIAQoAiQgBCgCLGwQNBoLIABBAE4EQCAEKAIMIAAgBCgCJCAEKAIsbBA0GgsgBCgCpAFBAEoEQEEAIQADQCAEKAKgASAAQQNsaiIIIAgvAABB//kDcTsAACAAQQFqIgAgBCgCpAFIDQALCyAEIAI2AmAgASgC5IMBIQAgBEEAOgBoIARBAToAuAIgBEECQQEgAxs2AmQgBCAAQQFrIAJxNgJcCwJAIAVFDQAgBSAFKAIEIgBBAWs2AgQgAA0AIAUgBSgCACgCCBEAACAFECsLIAZBEGokACAHDwtBwJ4BQbz0AEGRC0G0zwAQAQALSgAgACABKAIANgIAIAEoAgQhASAAQQA6ABQgACACNgIQIABBADYCDCAAIAM2AgggACABNgIEIAMEQCAAIAMoAgxBAWo2AgwLIAALBABBfwu5BgEFfyMAQTBrIgMkACADQQA2AiwgA0IANwIkIAEoAhQiAigCMCEFIAIoAjQiAgRAIAIgAigCBEEBajYCBAsgBSgCNCEGIAUoAjgiBQRAIAUgBSgCBEEBajYCBAsCQCACRQ0AIAIgAigCBCIEQQFrNgIEIAQNACACIAIoAgAoAggRAAAgAhArCyABKAIUIgIoAjAhBCACKAI0IgIEQCACIAIoAgRBAWo2AgQLIAMgBCgCPDYCHCADIAQoAkAiBDYCICAEBEAgBCAEKAIEQQFqNgIECwJAIAJFDQAgAiACKAIEIgRBAWs2AgQgBA0AIAIgAigCACgCCBEAACACECsLIANBCGogBiABKAIkIANBHGogA0EkahDdBSADKAIIIQEgAEEANgIIIABCADcCAAJAAkAgAQRAIAAgAykDCDcCDCAAQRRqIQAgAywAG0EATgRAIAAgAykCEDcCACAAIAMoAhg2AggMAgsgACADKAIQIAMoAhQQLgwBCyADKAIoIgYgAygCJCIBRwRAIAYgAWsiBEEASA0CIAAgBBAsIgI2AgQgACACNgIAIAAgAiAEajYCCANAIAIgASgCADYCACACIAEoAgQiBDYCBCAEBEAgBCAEKAIEQQFqNgIECyACQQhqIQIgAUEIaiIBIAZHDQALIAAgAjYCBAsgAEGQpQUpAgA3AgwgAEEUaiEAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAELIABBmKUFKAIAQZylBSgCABAuCyADLAAbQQBIBEAgAygCGBogAygCEBAqCwJAIAMoAiAiAEUNACAAIAAoAgQiAUEBazYCBCABDQAgACAAKAIAKAIIEQAAIAAQKwsCQCAFRQ0AIAUgBSgCBCIAQQFrNgIEIAANACAFIAUoAgAoAggRAAAgBRArCyADKAIkIgAEQCADKAIoIgIgACIBRwRAA0ACQCACQQRrKAIAIgFFDQAgASABKAIEIgVBAWs2AgQgBQ0AIAEgASgCACgCCBEAACABECsLIAJBCGsiAiAARw0ACyADKAIkIQELIAMgADYCKCADKAIsGiABECoLIANBMGokAA8LEDYACxgAIABBDGogACgCECABIAEgAmogAhDFAQvoAgEIfyAAKAJsIgQgACgCcCIFSQRAIAQgAToAACAAIARBAWo2AmwPCyAEIAAoAmgiBmsiAkEBaiIDQQBOBEAgAkH/////ByAFIAZrIgVBAXQiByADIAMgB0kbIAVB/////wNPGyIHBH8gBxAsBUEACyIFaiIDIAE6AAAgBSAHaiEIIANBAWohBwJAIAQgBkYEQCADIQUMAQsCQCACQQNxIglFBEAgBCECDAELQQAhASAEIQIDQCADQQFrIgMgAkEBayICLQAAOgAAIAFBAWoiASAJRw0ACwsgBiAEa0F8TQRAA0AgA0EBayACQQFrLQAAOgAAIANBAmsgAkECay0AADoAACADQQNrIAJBA2stAAA6AAAgA0EEayIDIAJBBGsiAi0AADoAACACIAZHDQALCyAAKAJwGiAAKAJoIQYLIAAgCDYCcCAAIAc2AmwgACAFNgJoIAYEQCAGECoLIAAgBzYCbA8LEDYAC8EVAQJ/AkACQAJAAkACQAJAAkAgAkEBaw4KAQYAAgMGBAYFBAYLQZADECwiA0IANwIUIANCADcCBCADQQA6AKgBIAMgATYCJCADQa4gNgIgIANCADcDKCADQgA3AkQgA0IANwJUIANCADcDYCADQgA3AqwBIANBkIUFNgIAIANBADYCHCADQgA3AzAgA0IANwM4IANBQGtBADsBACADQgA3AUogA0EAOgBcIANBADoAaCADQgA3ArQBIANCADcCvAEgA0IANwLEASADQgA3AswBIANCADcC1AEgA0EANgLcASADQQA2ArACIANCADcDqAIgA0EBOgDgASADQgA3AuQBIANCADcA6QEgA0IANwP4ASADQgA3A4ACIANCADcDiAIgA0IANwOQAiADQgA3A5gCIANBADoAoAIgA0EBOwG0AiADQgA3A7gCIANCADcDwAIgA0IANwPIAiADQQA2AoADIANCADcC+AIgA0KAgICAgICA+D83A9ACIANCADcDoAEgA0IANwOYASADQgA3A5ABIANCADcDiAEgA0IANwOAASADQgA3A3ggA0IANwNwIANBADYC8AIgA0IANwPoAiADQgA3A+ACIANCADcD2AIgA0IANwKEAyADQfj4BDYCECADQRBqIQQMBQtBkAMQLCIDQgA3AhQgA0IANwIEIANBADoAqAEgAyABNgIkIANBriA2AiAgA0IANwMoIANCADcCRCADQgA3AlQgA0IANwNgIANCADcCrAEgA0G4hQU2AgAgA0EANgIcIANCADcDMCADQgA3AzggA0FAa0EAOwEAIANCADcBSiADQQA6AFwgA0EAOgBoIANCADcCtAEgA0IANwK8ASADQgA3AsQBIANCADcCzAEgA0IANwLUASADQQA2AtwBIANBADYCsAIgA0IANwOoAiADQQE6AOABIANCADcC5AEgA0IANwDpASADQgA3A/gBIANCADcDgAIgA0IANwOIAiADQgA3A5ACIANCADcDmAIgA0EAOgCgAiADQQE7AbQCIANCADcDuAIgA0IANwPAAiADQgA3A8gCIANBADYCgAMgA0IANwL4AiADQoCAgICAgID4PzcD0AIgA0IANwOgASADQgA3A5gBIANCADcDkAEgA0IANwOIASADQgA3A4ABIANCADcDeCADQgA3A3AgA0EANgLwAiADQgA3A+gCIANCADcD4AIgA0IANwPYAiADQgA3AoQDIANB6PMENgIQIANBEGohBAwEC0GQAxAsIgNCADcCFCADQgA3AgQgA0EAOgCoASADIAE2AiQgA0GuIDYCICADQgA3AyggA0IANwJEIANCADcCVCADQgA3A2AgA0IANwKsASADQeCFBTYCACADQQA2AhwgA0IANwMwIANCADcDOCADQUBrQQA7AQAgA0IANwFKIANBADoAXCADQQA6AGggA0IANwK0ASADQgA3ArwBIANCADcCxAEgA0IANwLMASADQgA3AtQBIANBADYC3AEgA0EANgKwAiADQgA3A6gCIANBAToA4AEgA0IANwLkASADQgA3AOkBIANCADcD+AEgA0IANwOAAiADQgA3A4gCIANCADcDkAIgA0IANwOYAiADQQA6AKACIANBATsBtAIgA0IANwO4AiADQgA3A8ACIANCADcDyAIgA0EANgKAAyADQgA3AvgCIANCgICAgICAgPg/NwPQAiADQgA3A6ABIANCADcDmAEgA0IANwOQASADQgA3A4gBIANCADcDgAEgA0IANwN4IANCADcDcCADQQA2AvACIANCADcD6AIgA0IANwPgAiADQgA3A9gCIANCADcChAMgA0GE9gQ2AhAgA0EQaiEEDAMLQZADECwiA0IANwIUIANCADcCBCADQQA6AKgBIAMgATYCJCADQa4gNgIgIANCADcDKCADQgA3AkQgA0IANwJUIANCADcDYCADQgA3AqwBIANBiIYFNgIAIANBADYCHCADQgA3AzAgA0IANwM4IANBQGtBADsBACADQgA3AUogA0EAOgBcIANBADoAaCADQgA3ArQBIANCADcCvAEgA0IANwLEASADQgA3AswBIANCADcC1AEgA0EANgLcASADQQA2ArACIANCADcDqAIgA0EBOgDgASADQgA3AuQBIANCADcA6QEgA0IANwP4ASADQgA3A4ACIANCADcDiAIgA0IANwOQAiADQgA3A5gCIANBADoAoAIgA0EBOwG0AiADQgA3A7gCIANCADcDwAIgA0IANwPIAiADQQA2AoADIANCADcC+AIgA0KAgICAgICA+D83A9ACIANCADcDoAEgA0IANwOYASADQgA3A5ABIANCADcDiAEgA0IANwOAASADQgA3A3ggA0IANwNwIANBADYC8AIgA0IANwPoAiADQgA3A+ACIANCADcD2AIgA0IANwKEAyADQeD+BDYCECADQRBqIQQMAgtBkAMQLCIDQgA3AhQgA0IANwIEIANBADoAqAEgAyABNgIkIANBriA2AiAgA0IANwMoIANCADcCRCADQgA3AlQgA0IANwNgIANCADcCrAEgA0HchwU2AgAgA0EANgIcIANCADcDMCADQgA3AzggA0FAa0EAOwEAIANCADcBSiADQQA6AFwgA0EAOgBoIANCADcCtAEgA0IANwK8ASADQgA3AsQBIANCADcCzAEgA0IANwLUASADQQA2AtwBIANBADYCsAIgA0IANwOoAiADQQE6AOABIANCADcC5AEgA0IANwDpASADQgA3A/gBIANCADcDgAIgA0IANwOIAiADQgA3A5ACIANCADcDmAIgA0EAOgCgAiADQQE7AbQCIANCADcDuAIgA0IANwPAAiADQgA3A8gCIANBADYCgAMgA0IANwL4AiADQoCAgICAgID4PzcD0AIgA0IANwOgASADQgA3A5gBIANCADcDkAEgA0IANwOIASADQgA3A4ABIANCADcDeCADQgA3A3AgA0EANgLwAiADQgA3A+gCIANCADcD4AIgA0IANwPYAiADQgA3AoQDIANB3PoENgIQIANBEGohBAwBC0GIAxAsIgNCADcCFCADQgA3AgQgA0EAOgCoASADIAE2AiQgA0GuIDYCICADQgA3AyggA0IANwJEIANCADcCVCADQgA3A2AgA0IANwKsASADQYSIBTYCACADQQA2AhwgA0IANwMwIANCADcDOCADQUBrQQA7AQAgA0IANwFKIANBADoAXCADQQA6AGggA0IANwK0ASADQgA3ArwBIANCADcCxAEgA0IANwLMASADQgA3AtQBIANBADYC3AEgA0EANgKwAiADQgA3A6gCIANBAToA4AEgA0IANwLkASADQgA3AOkBIANCADcD+AEgA0IANwOAAiADQgA3A4gCIANCADcDkAIgA0IANwOYAiADQQA6AKACIANBATsBtAIgA0IANwO4AiADQgA3A8ACIANCADcDyAIgA0EANgKAAyADQgA3AvgCIANCgICAgICAgPg/NwPQAiADQgA3A6ABIANCADcDmAEgA0IANwOQASADQgA3A4gBIANCADcDgAEgA0IANwN4IANCADcDcCADQQA2AvACIANCADcD6AIgA0IANwPgAiADQgA3A9gCIANBrIMFNgIQIANBEGohBAsgACADNgIEIAAgBDYCAAsIACAAEHQQKgsPACAAIAAoAgAoAgwRAQALwQEBBH8CQAJAIAMEQCADQdaq1aoBTw0BIAAgA0EMbCIEECwiAzYCBCAAIAM2AgAgACADIARqNgIIIAEgAkcEQANAIANBADYCCCADQgA3AgAgASgCBCIEIAEoAgAiBkcEQCAEIAZrIgRBAEgNBSADIAQQLCIFNgIEIAMgBTYCACADIAQgBWoiBzYCCCAFIAYgBBAyGiADIAc2AgQLIANBDGohAyABQQxqIgEgAkcNAAsLIAAgAzYCBAsPCxA2AAsQNgALnQMBB38CQCAAKAIEIAAoAgAiAmtBDG0iBUEBaiIGQdaq1aoBSQRAQdWq1aoBIAAoAgggAmtBDG0iA0EBdCICIAYgAiAGSxsgA0Gq1arVAE8bIgIEQCACQdaq1aoBTw0CIAJBDGwQLCEHCyAHIAVBDGxqIgMgASgCADYCACADIAEoAgQ2AgQgAyABKAIINgIIIAFBADYCCCABQgA3AgAgByACQQxsaiEGIANBDGohCAJAIAAoAgQiASAAKAIAIgRGBEAgAyECDAELA0AgA0EEayIHQQA2AgAgA0EMayICIAFBDGsiBSgCADYCACADQQhrIAFBCGsoAgA2AgAgByABQQRrIgEoAgA2AgAgAUEANgIAIAVCADcCACACIQMgBSIBIARHDQALIAAoAgQhASAAKAIAIQQLIAAgCDYCBCAAIAI2AgAgACgCCBogACAGNgIIIAEgBEcEQANAIAFBDGsiACgCACIC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IBJCIHwiEyAHKQMwIhFWBEAgByACKAIAIgUgEiATIAUoAgAoAhgRFgAiETcDMAsgESATVARAIANBGBAsIgI2AmAgA0KXgICAgIOAgIB/NwJkIAJBiPkAKQAANwAAIAJBADoAFyACQZf5ACkAADcADyACQZD5ACkAADcACCAJQQJBACADQeAAahAvGiADLABrQQBODQIgAygCaBogAygCYBAqDAILIAMgBygCODYCiAEgAyAHKAI8IgU2AowBIAUEQCAFIAUoAgRBAWo2AgQgBykDMCERCyADIAMpAogBNwMIIANBkAFqIANBCGogEqciCCARpxDVAyEGIANB4ABqIgVCADcDCCAFQgA3AxAgBUIANwMYIAVBADYCICAFQdS9BDYCACADQcgAaiAFIAYQrQIgAyADKQNIIhE3A9ABIAMsAOMBQQBOBH8gEacFIAMoAuABGiADKALYARAqIAMoAtABCyEGIAMgAykDUDcD2AEgAyADKAJYNgLgAQJAIAYEQCAJIAMpA9ABNwIAIAkgAygC4AE2AhAgCSADKQLYATcCCCADQgA3A9gBIANBADYC4AFBASEGDAELIAMpA2ghESADKAJwQeHolesGRgRAIBFQBEAgA0EwECwiBjYCSCADQqqAgICAhoCAgH83AkwgBkHWywApAAA3AAAgBkEAOgAqIAZB/ssALwAAOwAoIAZB9ssAKQAANwAgIAZB7ssAKQAANwAYIAZB5ssAKQAANwAQIAZB3ssAKQAANwAIIAlBAkHoACADQcgAahAvGiADLABTQQBIBEAgAygCUBogAygCSBAqC0EBIQYMAgsgBykDMCITIBEgEnwiEVQEQCAHIAcoAjgiBiASIBEgBigCACgCGBEWACITNwMwCyARIBNWBEAgA0EgECwiBjYCSCADQpmAgICAhICAgH83AkwgBkHSESkAADcAACAGQQA6ABkgBkHqES0AADoAGCAGQeIRKQAANwAQIAZB2hEpAAA3AAggCUECQegAIANByABqEC8aIAMsAFNBAEgEQCADKAJQGiADKAJIECoLQQEhBgwCCyADIAcoAjg2AkAgAyAHKAI8IgY2AkQgBgRAIAYgBigCBEEBajYCBAsgAyADKQJANwMAIANByABqIAMgCCARpxDVAyEGIANCADcCOCADQSBqIAYgA0E4aiAKEPsBIAMgAykDICIR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ADcCtAEgAkIANwKsASACQQA2ArACIAJCADcDqAIgAkEBOgDgASACQgA3AuQBIAJCADcA6QEgAkIANwP4ASACQgA3A4ACIAJCADcDiAIgAkIANwOQAiACQgA3A5gCIAJBADoAoAIgAkEBOwG0AiACQgA3A7gCIAJCADcDwAIgAkIANwPIAiACQQA2AoADIAJCADcC+AIgAkKAgICAgICA+D83A9ACIAJCADcDoAEgAkIANwOYASACQgA3A5ABIAJCADcDiAEgAkIANwOAASACQgA3A3ggAkIANwNwIAJBADYC8AIgAkIANwPoAiACQgA3A+ACIAJCADcD2AIgAkIANwKEAyACIAU2AjQgAkHc+gQ2AhAgA0EkaiIFIAI2AgQgBSACQRBqNgIAIAQgAygCJDYChAIgBCADKAIoNgKIAiADQgA3AiQgBRBtDAkLIAJB6NbN6wZMBEAgAkHnysHTBkcEQCACQbHsoeMGRg0GIAJB5dql6wZHDQkgBSgChAEgBSwAiwEiAiACQQBIIgIbQQpHDQkgBSgCgAEgBUGAAWogAhtBr8gAQQoQXw0JC0GQAxAsIgJCADcCFCACQgA3AgQgAkEAOgCoASACIAE2AiQgAkGuIDYCICACQgA3AyggAkIANwJEIAJCADcCVCACQgA3A2AgAkIANwKsASACQZCFBTYCACACQQA2AhwgAkIANwMwIAJCADcDOCACQUBrQQA7AQAgAkIANwFKIAJBADoAXCACQQA6AGggAkIANwK0ASACQgA3ArwBIAJCADcCxAEgAkIANwLMASACQgA3AtQBIAJBADYC3AEgAkEANgKwAiACQgA3A6gCIAJBAToA4AEgAkIANwLkASACQgA3AOkBIAJCADcD+AEgAkIANwOAAiACQgA3A4gCIAJCADcDkAIgAkIANwOYAiACQQA6AKACIAJBATsBtAIgAkIANwO4AiACQgA3A8ACIAJCADcDyAIgAkEANgKAAyACQgA3AvgCIAJCgICAgICAgPg/NwPQAiACQgA3A6ABIAJCADcDmAEgAkIANwOQASACQgA3A4gBIAJCADcDgAEgAkIANwN4IAJCADcDcCACQQA2AvACIAJCADcD6AIgAkIANwPgAiACQgA3A9gCIAJCADcChAMgAiAGNgI0IAJB+PgENgIQIAQgAjYCiAIgBCACQRBqNgKEAgwJCyACQejGuasHTARAIAJB6dbN6wZGDQYgAkHp2KWjB0cNCEH4AxAsIgVCADcCBCAFQaSJBTYCACAFQRBqIAMoArwBIAMoArQBENABIgJCADcCtAMgAkIANwPYAyACQQA6ANQDIAJBgIAENgLQAyACQgA3A8gDIAJBhIwFNgIAIAJCADcCvAMgAkIANwPgAyADQSRqIgYgBTYCBCAGIAI2AgAgBCADKAIkNgKEAiAEIAMoAig2AogCIANCADcCJCAGEG0MCQsgAkHpxrmrB0YNAyACQbHG2bMHRw0HQZADECwiAkIANwIUIAJCADcCBCACQQA6AKgBIAIgATYCJCACQa4gNgIgIAJCADcDKCACQgA3AkQgAkIANwJUIAJCADcDYCACQgA3AqwBIAJBiIYFNgIAIAJBADYCHCACQgA3AzAgAkIANwM4IAJBQGtBADsBACACQgA3AUogAkEAOgBcIAJBADoAaCACQgA3ArQBIAJCADcCvAEgAkIANwLEASACQgA3AswBIAJCADcC1AEgAkEANgLcASACQQA2ArACIAJCADcDqAIgAkEBOgDgASACQgA3AuQBIAJCADcA6QEgAkIANwP4ASACQgA3A4ACIAJCADcDiAIgAkIANwOQAiACQgA3A5gCIAJBADoAoAIgAkEBOwG0AiACQgA3A7gCIAJCADcDwAIgAkIANwPIAiACQQA2AoADIAJCADcC+AIgAkKAgICAgICA+D83A9ACIAJCADcDoAEgAkIANwOYASACQgA3A5ABIAJCADcDiAEgAkIANwOAASACQgA3A3ggAkIANwNwIAJBADYC8AIgAkIANwPoAiACQgA3A+ACIAJCADcD2AIgAkIANwKEAyACIAY2AjQgAkHg/gQ2AhAgBCACNgKIAiAEIAJBEGo2AoQCDAgLQZADECwiAkIANwIUIAJCADcCBCACQQA6AKgBIAIgATYCJCACQa4gNgIgIAJCADcDKCACQgA3AkQgAkIANwJUIAJCADcDYCACQgA3AqwBIAJBuIUFNgIAIAJBADYCHCACQgA3AzAgAkIANwM4IAJBQGtBADsBACACQgA3AUogAkEAOgBcIAJBADoAaCACQgA3ArQBIAJCADcCvAEgAkIANwLEASACQgA3AswBIAJCADcC1AEgAkEANgLcASACQQA2ArACIAJCADcDqAIgAkEBOgDgASACQgA3AuQBIAJCADcA6QEgAkIANwP4ASACQgA3A4ACIAJCADcDiAIgAkIANwOQAiACQgA3A5gCIAJBADoAoAIgAkEBOwG0AiACQgA3A7gCIAJCADcDwAIgAkIANwPIAiACQQA2AoADIAJCADcC+AIgAkKAgICAgICA+D83A9ACIAJCADcDoAEgAkIANwOYASACQgA3A5ABIAJCADcDiAEgAkIANwOAASACQgA3A3ggAkIANwNwIAJBADYC8AIgAkIANwPoAiACQgA3A+ACIAJCADcD2AIgAkIANwKEAyACIAY2AjQgAkHo8wQ2AhAgBCACNgKIAiAEIAJBEGo2AoQCDAcLQZADECwiAkIANwIUIAJCADcCBCACQQA6AKgBIAIgATYCJCACQa4gNgIgIAJCADcDKCACQgA3AkQgAkIANwJUIAJCADcDYCACQgA3AqwBIAJB4IUFNgIAIAJBADYCHCACQgA3AzAgAkIANwM4IAJBQGtBADsBACACQgA3AUogAkEAOgBcIAJBADoAaCACQgA3ArQBIAJCADcCvAEgAkIANwLEASACQgA3AswBIAJCADcC1AEgAkEANgLcASACQQA2ArACIAJCADcDqAIgAkEBOgDgASACQgA3AuQBIAJCADcA6QEgAkIANwP4ASACQgA3A4ACIAJCADcDiAIgAkIANwOQAiACQgA3A5gCIAJBADoAoAIgAkEBOwG0AiACQgA3A7gCIAJCADcDwAIgAkIANwPIAiACQQA2AoADIAJCADcC+AIgAkKAgICAgICA+D83A9ACIAJCADcDoAEgAkIANwOYASACQgA3A5ABIAJCADcDiAEgAkIANwOAASACQgA3A3ggAkIANwNwIAJBADYC8AIgAkIANwPoAiACQgA3A+ACIAJCADcD2AIgAkIANwKEAyACIAY2AjQgAkGE9gQ2AhAgBCACNgKIAiAEIAJBEGo2AoQCDAYLQZADECwiAkIANwIUIAJCADcCBCACQQA6AKgBIAIgATYCJCACQa4gNgIgIAJCADcDKCACQgA3AkQgAkIANwJUIAJCADcDYCACQgA3AqwBIAJBsIYFNgIAIAJBADYCHCACQgA3AzAgAkIANwM4IAJBQGtBADsBACACQgA3AUogAkEAOgBcIAJBADoAaCACQgA3ArQBIAJCADcCvAEgAkIANwLEASACQgA3AswBIAJCADcC1AEgAkEANgLcASACQQA2ArACIAJCADcDqAIgAkEBOgDgASACQgA3AuQBIAJCADcA6QEgAkIANwP4ASACQgA3A4ACIAJCADcDiAIgAkIANwOQAiACQgA3A5gCIAJBADoAoAIgAkEBOwG0AiACQgA3A7gCIAJCADcDwAIgAkIANwPIAiACQQA2AoADIAJCADcC+AIgAkKAgICAgICA+D83A9ACIAJCADcDoAEgAkIANwOYASACQgA3A5ABIAJCADcDiAEgAkIANwOAASACQgA3A3ggAkIANwNwIAJBADYC8AIgAkIANwPoAiACQgA3A+ACIAJCADcD2AIgAkIANwKEAyACIAY2AjQgAkGAgQU2AhAgBCACNgKIAiAEIAJBEGo2AoQCDAULIANBJGoQvwQiC0EIakHKpQFBFBAtISsgA0EQaiIFIAMoArgBEKQBICsgAygCECAFIAMsABsiAkEASCIFGyADKAIUIAIgBRsQLUHCmwFBExAtGiADLAAbQQBIBEAgAygCGBogAygCEBAqCyADQQRqIgIgCxC+BCADQRBqQQRBuRcgAhAvIQYgAywAD0EASARAIAMoAgwaIAMoAgQQKgsgA0EEaiEKQaADECwiEUIANwIEIBFB2IYFNgIAIBFBEGohAiMAQSBrIgUkACADKAK0ASEQIAMoArgBIQ8gBSAGKQIAIjs3AwggBUEQaiEIAkAgBiwAE0EATgRAIAggBikCCDcCACAIIAYoAhA2AggMAQsgCCAGKAIIIAYoAgwQLiAFKQMIITsLIAJCADcCBCACQQA6AJgBIAJCADcCNCACQgA3AkQgAkIANwNQIAJCADcCnAEgAkEANgIMIAJBriA2AhAgAkIANwE6IAJBADoATCACQQA6AFggAkIANwKkASACQgA3AqwBIAJCADcCtAEgAkIANwK8ASACQgA3AsQBIAJBADYCzAEgAkIANwEqIAJCADcCJCACQgA3AhwgAkIANwIUIAJBADYCoAIgAkIANwOYAiACQQE6ANABIAJCADcC1AEgAkIANwDZASACQgA3A+gBIAJCADcD8AEgAkIANwP4ASACQgA3A4ACIAJCADcDiAIgAkEAOgCQAiACQQE7AaQCIAJCADcDqAIgAkIANwOwAiACQgA3A7gCIAJBADYC8AIgAkIANwLoAiACQoCAgICAgID4PzcDwAIgAkIANwOQASACQgA3A4gBIAJCADcDgAEgAkIANwN4IAJCADcDcCACQgA3A2ggAkIANwNgIAJBADYC4AIgAkIANwPYAiACQgA3A9ACIAJCADcDyAIgAiA7NwL4AiACIBA2AiQgAiAPNgL0AiACQYCHBTYCACACQYADaiEQAkAgBSwAG0EATgRAIBAgCCkDADcDACAQIAgoAgg2AggMAQsgECAFKAIQIAUoAhQQLiAFLAAbQQBODQAgBSgCGBogBSgCEBAqCyAFQSBqJAAgCiARNgIEIAogAjYCACAEIAMoAgQ2AoQCIAQgAygCCDYCiAIgA0IANwIEIAoQbSAGLAATQQBIBEAgBigCEBogBigCCBAqCyALEOkBGgwECyADQSRqQQRBuRcgA0EQakGuHBCAASIGEC8hBSAEAn9BoAMQLCICQgA3AgQgAkHYhgU2AgAgBSgCDCEKIAUoAgghCCADKAK4ASEQIAMoArQBIQsgBUIANwIIIAUoAhAhESAFQQA2AhAgBSkCACE7IAJBADYCHCACQgA3AhQgAkEAOgCoASACQa4gNgIgIAJCADcCRCACQgA3AUogAkIANwJUIAJBADoAXCACQgA3A2AgAkEAOgBoIAJCADcCrAEgAkIANwK0ASACQgA3ArwBIAJCADcCxAEgAkIANwLMASACQgA3AtQBIAJBADYC3AEgAkIANwE6IAJCADcCNCACQgA3AiwgAkIANwIkIAJBADYCsAIgAkIANwOoAiACQQE6AOABIAJCADcC5AEgAkIANwDpASACQgA3A/gBIAJCADcDgAIgAkIANwOIAiACQgA3A5ACIAJCADcDmAIgAkEAOgCgAiACQQE7AbQCIAJCADcDuAIgAkIANwPAAiACQgA3A8gCIAJBADYCgAMgAkIANwP4AiACQoCAgICAgID4PzcD0AIgAkIANwOgASACQgA3A5gBIAJCADcDkAEgAkIANwOIASACQgA3A4ABIAJCADcDeCACQgA3A3AgAkEANgLwAiACQgA3A+gCIAJCADcD4AIgAkIANwPYAiACIDs3A4gDIAIgCzYCNCACIBA2AoQDIAJBgIcFNgIQIBFBAE4EQCACIBE2ApgDIAIgCjYClAMgAiAINgKQAyACDAELIAJBkANqIAggChAuIAgQKiACCyICNgKIAiAEIAJBEGo2AoQCIANCADcCBCADQQRqEG0gBSwAE0EASARAIAUoAhAaIAUoAggQKgsgBiwAC0EATg0DIAYoAggaIAYoAgAQKgwDC0GIAxAsIgJCADcCBCACQYSIBTYCACADKAK0ASEFIAMoArwBIQYgAkEANgIcIAJCADcCFCACQQA6AKgBIAIgBjYCJCACQa4gNgIgIAJCADcDKCACQgA3AzAgAkIANwM4IAJBQGtBADsBACACQgA3AkQgAkIANwFKIAJCADcCVCACQQA6AFwgAkIANwNgIAJBADoAaCACQQA2AtwBIAJCADcC1AEgAkIANwLMASACQgA3AsQBIAJCADcCvAEgAkIANwK0ASACQgA3AqwBIAJBADYCsAIgAkIANwOoAiACQQE6AOABIAJCADcC5AEgAkIANwDpASACQgA3A/gBIAJCADcDgAIgAkIANwOIAiACQgA3A5ACIAJCADcDmAIgAkEAOgCgAiACQQE7AbQCIAJCADcDuAIgAkIANwPAAiACQgA3A8gCIAJBADYCgAMgAkIANwL4AiACQoCAgICAgID4PzcD0AIgAkIANwOgASACQgA3A5gBIAJCADcDkAEgAkIANwOIASACQgA3A4ABIAJCADcDeCACQgA3A3AgAkEANgLwAiACQgA3A+gCIAJCADcD4AIgAkIANwPYAiACIAU2AjQgAkGsgwU2AhAgA0EkaiIFIAI2AgQgBSACQRBqNgIAIAQgAygCJDYChAIgBCADKAIoNgKIAiADQgA3AiQgBRBtDAILQbADECwiBUIANwIEIAVB1IgFNgIAIAVBEGogAygCvAEgAygCtAEQ0AEiAkIANwL0AiACQgA3A4ADIAJBtIoFNgIAIAJBADsB/AIgAkIANwOIAyACQgA3A5ADIAJCADcDmAMgA0EkaiIGIAU2AgQgBiACNgIAIAQgAygCJDYChAIgBCADKAIoNgKIAiADQgA3AiQgBhBtDAELIARCADcChAILIANBwAFqJAACQCAEKAKEAiIIRQRAQQMhCgwBCyAEKAKIAiIFBEAgBSAFKAIEQQFqNgIECwJAAkACQCANIgYiAygCACICRQ0AA0AgAiIDKAIQIgIgCUsEQCADIQYgAygCACICDQEMAgsgAiAJTw0CIAMoAgQiAg0ACyADQQRqIQYLQRwQLCICIAU2AhggAiAINgIUIAIgCTYCECACIAM2Aggg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IRgDQCAEQagCaiAUIAIoAhQoAiQQpgMCQCAEKAKoAiIKIAQoAqwCIidGBEBBEiEHDAELIAJBFGohDwJ/AkACQANAAkAgCigCECIDQezw1YsGRwRAIANB4tqhowdHDQEgBEEANgJoIARCADcCYAJ/AkAgCigCMCIDIAooAiwiBUYiBw0AIAMgBWsiA0EASA0PIAQgAxAsIgg2AmAgBCADIAhqIgY2AmggCCAFIAMQMhogBCAGNgJkIAcNAANAIAgoAgAhByAPKAIAIglBAToAMQJAAkAgDSIFKAIAIgNFDQADQCAFIAMgAygCECAHSSILGyEFIAMgC0ECdGooAgAiAw0ACyAFIA1GDQAgByAFKAIQTw0BCyAEQTAQLCIDNgLwASAEQqmAgICAhoCAgH83AvQBIANBq9wAKQAANwAAIANBADoAKSADQdPcAC0AADoAKCADQcvcACkAADcAICADQcPcACkAADcAGCADQbvcACkAADcAECADQbPcACkAADcACCAAQQJB0A8gBEHwAWoQLxogBCwA+wFBAEgEQCAEKAL4ARogBCgC8AEQKgtBAAwDCyAFKAIUIgMtADFBAUYEQCAEQSgQLCIDNgLwASAEQqaAgICAhYCAgH83AvQBIANB9z4pAAA3AAAgA0EAOgAmIANBlT8pAAA3AB4gA0GPPykAADcAGCADQYc/KQAANwAQIANB/z4pAAA3AAggAEECQdAPIARB8AFqEC8aIAQsAPsBQQBIBEAgBCgC+AEaIAQoAvABECoLQQAMAwsgAyAJRgRAIARBKBAsIgM2AvABIARCooCAgICFgICAfzcC9AEgA0GL6QApAAA3AAAgA0EAOgAiIANBq+kALwAAOwAgIANBo+kAKQAANwAYIANBm+kAKQAANwAQIANBk+kAKQAANwAIIABBAkHQDyAEQfABahAvGiAELAD7AUEASARAIAQoAvgBGiAEKALwARAqC0EADAMLIAMCfyADKAI4IgUgAygCPEkEQCAFIAk2AgAgBSACKAIYIgM2AgQgAwRAIAMgAygCBEEBajYCBAsgBUEIagwBCyADQTRqIA8QYQs2AjggCEEEaiIIIAZHDQALCyABIA8QmANBAQshMiAEKAJgIgMEQCAEIAM2AmQgBCgCaBogAxAqCyAyDQFBAQwFCwJAAkACQAJAAkACQAJAAkACQCAPKAIAIgUoAhgiAyAFKAIcIgVHBEADQAJAIAMoAgAiBkUNACAGQaC/BEHYxwQQOSIMRQ0AIAMoAgQiEgRAIBIgEigCBEEBajYCBAtBACELIARBADYCaCAEQgA3AmBBACEJIAooAjAiAyAKKAIsIgVHBEAgAyAFayIDQQBIDRkgBCADECwiCTYCYCAEIAMgCWoiCzYCaCAJIAUgAxAyGiAEIAs2AmQLIAxB6ABqIQ4gDCgCbCIFIAwsAHMiAyADQQBIIgYbIgdBGWsOEwMEBwcHBwcHBwcHBwcHBwcHBwUHCyADQQhqIgMgBUcNAAsLIAQgITYCYCAEQaDTAzYCaCAEQbTTAzYCoAEgBEHgAGoiAyAiKAIAaiAWNgIAIARBADYCZCADIAQoAmBBDGsoAgBqIgUgGRA+IAVCgICAgHA3AkggBCAfNgJoIBogICgCAGogJjYCACAEIB02AmAgAyAeKAIAaiAlNgIAIARBtNMDNgKgASAEQYzTAzYCYCAEQaDTAzYCaCAZED8iB0HwywM2AgAgBEIANwKUASAEQgA3AowBIARBGDYCnAEgGkGxrgFBGxAtIA8oAgAoAiQQPBoCQCAEKAKcASIDQRBxBEAgECEDIAQoApgBIgYgBCgChAEiBU8NASAEIAU2ApgBIAUhBgwBCyADQQhxRQRAQQAhAyAEQQA6APsBIARB8AFqIQYMDgsgBCgCfCEGIBEhAwsgBiADKAIAIgVrIgNB+P///wdPDQUgA0ELTwRAIANBB3JBAWoiCRAsIQYgBCAJQYCAgIB4cjYC+AEgBCAGNgLwASAEIAM2AvQBDAwLIAQgAzoA+wEgBEHwAWohBiADDQtBACEDDAwLIA4oAgAgDiAGG0H0jQFBGRBfDQMgCSALRw0CDAMLIA4oAgAgDiAGG0HZjQEgBxBfDQIgCSALRw0BDAILIA4oAgAgDiAGG0Gp+gAgBxBfDQEgCSALRg0BCwNAIAkoAgAhBgJAAkACQCANIgUoAgAiA0UNAANAIAUgAyADKAIQIAZJIgcbIQUgAyAHQQJ0aigCACIDDQALIAUgDUYNACAGIAUoAhBPDQELIAEoAjAgBhC7Ag0BIARBKBAsIgM2AvABIARCo4CAgICFgICAfzcC9AEgA0G48QApAAA3AAAgA0EAOgAjIANB1/EAKAAANgAfIANB0PEAKQAANwAYIANByPEAKQAANwAQIANBwPEAKQAANwAIIABBAkHQDyAEQfABahAvGiAELAD7AUEASARAIAQoAvgBGiAEKALwARAqC0EBIQMMBgsgBSgCFCEHIAUoAhgiBQRAIAUgBSgCBEEBajYCBAsCQCAHIA8oAgAiCEYEQCAEQSAQLCIDNgLwASAEQp6AgICAhICAgH83AvQBIANBzekAKQAANwAAIANBADoAHiADQePpACkAADcAFiADQd3pACkAADcAECADQdXpACkAADcACCAAQQJB0A8gBEHwAWoQLxogBCwA+wFBAEgEQCAEKAL4ARogBCgC8AEQKgtBASEDDAELIAhBAToAQCACKAIYIgMEQCADIAMoAgRBAWo2AgQLIAcgCDYCRCAHKAJIIQYgByADNgJIQQAhAyAGRQ0AIAYgBigCBCITQQFrNgIEIBMNACAGIAYoAgAoAggRAAAgBhArCwJAIAVFDQAgBSAFKAIEIgZBAWs2AgQgBg0AIAUgBSgCACgCCBEAACAFECsLIAcgCEYNBQsgCUEEaiIJIAtHDQALIAwtAHMhAyAMKAJsIQULAkACQAJAIAUgAyADwEEASCIDG0Eaaw4SAAQEBAQEBAQEBAQEBAQEBAQBBAsgDigCACAOIAMbQeqLAUEaEF9FDQEMAwsgDigCACAOIAMbQfbEAEErEF8NAgsgDygCAEEBOgBMIAQoAmAiCSAEKAJkIihGDQEDQAJAIAkoAgAhBgJAAkACQCANIgUoAgAiA0UNAANAIAUgAyADKAIQIAZJIgcbIQUgAyAHQQJ0aigCACIDDQALIAUgDUYNACAGIAUoAhBPDQELIAEoAjAgBhC7Ag0BIARBKBAsIgM2AvABIARCo4CAgICFgICAfzcC9AEgA0Hy8AApAAA3AAAgA0EAOgAjIANBkfEAKAAANgAfIANBivEAKQAANwAYIANBgvEAKQAANwAQIANB+vAAKQAANwAIIABBAkHQDyAEQfABahAvGiAELAD7AUEASARAIAQoAvgBGiAEKALwARAqC0EBIQMMBgsgDygCACIDIAUoAhQiBUYEQCAEQSAQLCIDNgLwASAEQp6AgICAhICAgH83AvQBIANBrukAKQAANwAAIANBADoAHiADQcTpACkAADcAFiADQb7pACkAADcAECADQbbpACkAADcACCAAQQJB0A8gBEHwAWoQLxogBCwA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BEAgBCgCsAIaIAQoAqgCECoLIAJBI0dBACACGw0CIAdBBGoiByARRw0ACwJAIAQoApwCIhEgBCgCoAIiEEYNACAURQ0AA0AgBEHgAGogFCARKAIAIgZB7crJgwcQugECQCAEKAJgIgggBCgCZCIJRgRAQQEhAwwBCyAIIQcCQCANKAIAIgVFDQADQCANIQIgBSEDA0AgAiADIAMoAhAgBkkiChshAiADIApBAnRqKAIAIgMNAAsgAiANRg0BIAYgAigCEEkNAUEBIQMgAigCFEEBOgBBIAdBBGoiByAJRw0ACwwBCyAEQTAQLCIDNgKoAiAEQqqAgICAhoCAgH83AqwCIANB2NsAKQAANwAAIANBADoAKiADQYDcAC8AADsAKCADQfjbACkAADcAICADQfDbACkAADcAGCADQejbACkAADcAECADQeDbACkAADcACCAAQQJB0A8gBEGoAmoQLxogBCwAswJBAEgEQCAEKAKwAhogBCgCqAIQKgtBACEDIAQoAmAhCAsgCARAIAQgCDYCZCAEKAJoGiAIECoLIANFDQMgEUEEaiIRIBBHDQALIAQoAqACIRAgBCgCnAIhEQsgECARRg0AIAFBgAFqIQ4DQAJAIAEoAjAgESgCACILEOcBQe7CnZMHRw0AQSQQLCIDQgA3AhAgA0IANwIEIANBpOQENgIAIANCADcCGCADQQA2AiAgBCADNgIcIAQgA0EMajYCGCADIAs2AgwgBEEANgL4ASAEQgA3AvABIARBqAJqIAEoAjAgCyAEQfABahCBAgJAIAQoAqgCBEAgACAEKQOoAjcCACAAIAQoArgCNgIQIAAgBCkCsAI3AgggBEIANwOwAiAEQQA2ArgCQQEhBgwBCyAEQQRqIQkgBCgCGCEIIwBBEGsiAyQAAkAgBEHwAWoiCigCBCAKKAIAIgJrIgVBB00EQCADQSAQLCICNgIEIANCmYCAgICEgICAfzcCCCACQcr5ACkAADcAACACQQA6ABkgAkHi+QAtAAA6ABggAkHa+QApAAA3ABAgAkHS+QApAAA3AAggCUECQYgBIANBBGoQLxogAywAD0EATg0BIAMoAgwaIAMoAgQQKgwBCwJ/IAItAAFBAXEiDARAIAVBC00EQCADQRgQLCICNgIEIANCloCAgICDgICAfzcCCCACQYTOACkAADcAACACQQA6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BEGg0wM2AiAgBRA/IgVB8MsDNgIAIARCADcCTCAEQgA3AkQgBEEYNgJUIAdB8KYBQRoQLSAGEDxBhqkBQSwQLSADKAI4EDxB3pYBQQoQLRoCfyAEKAJUIgFBEHEEQCAEKAJQIgEgBCgCPCICSQRAIAQgAjYCUCACIQELIARBOGoMAQsgAUEIcUUEQEEAIQEgBEEAOgAXIARBDGohAgwGCyAEKAI0IQEgBEEsagshAiABIAIoAgAiA2siAUH4////B08NAiABQQtPBEAgAUEHckEBaiIGECwhAiAEIAZBgICAgHhyNgIUIAQgAjYCDCAEIAE2AhAMBAsgBCABOgAXIARBDGohAiABDQNBACEBDAQLIAFB7ABqIQMCQAJAIAEoAnAgASgCbCIHa0ECdSIFIAZJBEAgAyAGIAVrEKoBDAELIAUgBksEQCABIAcgBkECdGo2AnALIAZFDQELQQAhAQNAIAIQSSEFIAMoAgAgAUECdGogBTYCACABQQFqIgEgBkcNAAsLIABBkKUFKQIANwIAIABBCGohAEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwHCyAAQZilBSgCAEGcpQUoAgAQLgwGCxA4AAsQOAALIAIgAyABEDcaCyABIAJqQQA6AAAgAEECQegHIARBDGoQLxogBCwAF0EASARAIAQoAhQaIAQoAgwQKgsgBEG80wMoAgAiADYCGCAAQQxrKAIAIARBGGpqQdzTAygCADYCACAEQeDTAygCADYCICAFQfDLAzYCACAELABPQQBIBEAgBCgCTBogBCgCRBAqCyAFED0aIARB2ABqEDsaDAILIAIgBiABEDcaCyABIAJqQQA6AAAgAEECQeQAIARBDGoQLxogBCwAF0EASARAIAQoAhQaIAQoAgwQKgsgBEG80wMoAgAiADYCGCAAQQxrKAIAIARBGGpqQdzTAygCADYCACAEQeDTAygCADYCICADQfDLAzYCACAELABPQQBIBEAgBCgCTBogBCgCRBAqCyADED0aIARB2ABqEDsaCyAELAC7AUEASARAIAQoArgBGiAEKAKwARAqCyAEQcABaiQAC18BAn8jAEEQayIDJAAgAyACNgIMIANBCGogA0EMahCnASEEIAAgARDZAiEBIAQoAgAiAARAQeivBigCABogAARAQeivBkHw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IAAoAgBBDGsoAgBqKAIQRQRAIAAgACgCAEEMaygCAGooAkgiAgRAIAIQvwMLIAFBAToACAsCQCABLQAIRQ0AIAAgACgCAEEMaygCAGooAhgiAiACKAIAKAIYEQEAQX9HDQAgACAAKAIAQQxrKAIAakEBEKMBCyABQQhqEHILIAFBEGokAAsUACAAQdDKAzYCACAAQQRqEEcgAAsJACAAEM8CECoLJAEBfwJAIAAoAgAiAkUNACACIAEQzAVBf0cNACAAQQA2AgALCwkAIAAQ0QIQKgukAQEEfyMAQTBrIgMkACAAIAAoAgBBDGsoAgBqIgQgBCgCEEF9cSIEEHogA0EvaiAAEMYDIAMtAC8EQCADQRhqIgUgACAAKAIAQQxrKAIAaigCGCIGIAEgAkEIIAYoAgAoAhARGAAgA0EIaiICQn83AwggAkIANwMAIAAgACgCAEEMaygCAGogBEEEciAEIAUpAwggAikDCFEbEKMBCyADQTBqJAALCQAgACABEKMBC2cBAn8jAEEQayIDJAAgAEEAOgAAIAEgASgCAEEMaygCAGohAgJAIAIoAhBFBEAgAigCSARAIAIoAkgQlQILIAAgASABKAIAQQxrKAIAaigCEEU6AAAMAQsgAkEEEKMBCyADQRBqJAALCQAgABDSAhAqCwsAIAEgAiAAELEBC3MBBn8gACgCTBogABDPASEGIAAgACgCDBEBACEFIAAtAABBAXFFBEAgACgCOCEBIAAoAjQiAgRAIAIgATYCOAsgAQRAIAEgAjYCNAsgAEHMrgYoAgBGBEBBzK4GIAE2AgALIAAoAmAQKiAAECoLIAYgBXIL6wMCA34FfyMAQSBrIgYkACABQv///////z+DIQICfiABQjCIQv//AYMiA6ciBUGB+ABrQf0PTQRAIAJCBIYgAEI8iIQhAiAFQYD4AGutIQMCQCAAQv//////////D4MiAEKBgICAgICAgAhaBEAgAkIBfCECDAELIABCgICAgICAgIAIUg0AIAJCAYMgAnwhAgtCACACIAJC/////////wdWIgUbIQQgBa0gA3wMAQsCQCAAIAKEUA0AIANC//8BUg0AIAJCBIYgAEI8iIRCgICAgICAgASEIQRC/w8MAQsgBUH+hwFLBEBC/w8MAQtCAEGA+ABBgfgAIANQIggbIgkgBWsiB0HwAEoNABog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LQAAOgAAIAlBAWoiCSACRw0ACwsgCCAAa0F8TQRAA0AgA0EBayAFQQFrLQAAOgAAIANBAmsgBUECay0AADoAACADQQNrIAVBA2stAAA6AAAgA0EEayIDIAVBBGsiBS0AADoAACAFIAhHDQALCyAGKAKAARogBigCeCEICyAGIA02AoABIAYgBDYCfCAGIAE2AnggCEUNACAIECoLIAYgBDYCfCAPKAIAQQEQQCEEAkAgBigCfCIAIAYoAoABIgFJBEAgACAEOgAAIABBAWohBAwBCyAAIAYoAngiCGsiBUEBaiIDQQBIDQQgBUH/////ByABIAhrIgJBAXQiASADIAEgA0sbIAJB/////wNPGyICBH8gAhAsBUEACyIBaiIDIAQ6AAAgASACaiENIANBAWohBAJAIAAgCEYEQCADIQEMAQsCQCAFQQNxIgJFBEAgACEFDAELQQAhCSAAIQUDQCADQQFrIgMgBUEBayIFLQAAOgAAIAlBAWoiCSACRw0ACwsgCCAAa0F8TQRAA0AgA0EBayAFQQFrLQAAOgAAIANBAmsgBUECay0AADoAACADQQNrIAVBA2stAAA6AAAgA0EEayIDIAVBBGsiBS0AADoAACAFIAhHDQALCyAGKAKAARogBigCeCEICyAGIA02AoABIAYgBDYCfCAGIAE2AnggCEUNACAIECoLIAYgBDYCfCAPKAIAQQIQQCEEIAYoAnwiACAGKAKAASIBSQRAIAAgBDoAACAGIABBAWo2AnwMAgsgACAGKAJ4IghrIgVBAWoiA0EASA0DIAVB/////wcgASAIayICQQF0IgEgAyABIANLGyACQf////8DTxsiAgR/IAIQLAVBAAsiAWoiAyAEOgAAIAEgAmohBCADQQFqIQ0CQCAAIAhGBEAgAyEBDAELAkAgBUEDcSICRQRAIAAhBQwBC0EAIQkgACEFA0AgA0EBayIDIAVBAWsiBS0AADoAACAJQQFqIgkgAkcNAAsLIAggAGtBfE0EQANAIANBAWsgBUEBay0AADoAACADQQJrIAVBAmstAAA6AAAgA0EDayAFQQNrLQAAOgAAIANBBGsiAyAFQQRrIgUtAAA6AAAgBSAIRw0ACwsgBigCgAEaIAYoAnghCAsgBiAENgKAASAGIA02AnwgBiABNgJ4IAgEQCAIECoLIAYgDTYCfAwBCyAB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AlA2AXIgCyACNgIEIAsgADYCACACIAIoAgRBAWo2AgQCQCAKKAIEIgEgCigCCEkEQCABIAI2AgQgASAANgIAIAogAUEIajYCBAwBCyAKIAsQUyEAIAsoAgQhASAKIAA2AgQgAUUNACABIAEoAgQiAEEBazYCBCAADQAgASABKAIAKAIIEQAAIAEQKwsgAiACKAIEIgBBAWs2AgQgAA0AIAIgAigCACgCCBEAACACECsLAkAgDygCAC0AbEEBRw0AQZABECwiAkIANwIEIAJB4N0ENgIAIAJBEGoiAUIANwMQIAFCADcDCCABQn83AzggAUIANwNIIAFCADcCZCABQQA2AjAgAUIANwMoIAFCADcDICABQgA3AxggAUFAa0J/NwMAIAFCADcDUCABQgA3A1ggAUEAOgBgIAFCADcCbCABQgA3AnQgAUH2xpHrBjYCECABQai+BDYCACAPKAIAIgApAlwhECAAKQJUIREgAiAAKQJkNwKEASACIBA3AnwgAiARNwJ0IAsgAjYCBCALIAE2AgAgAiACKAIEQQFqNgIEAkAgCigCBCIAIAooAghJBEAgACACNgIEIAAgATYCACAKIABBCGo2AgQMAQsgCiALEFMhACALKAIEIQEgCiAANgIEIAFFDQAgASABKAIEIgBBAWs2AgQgAA0AIAEgASgCACgCCBEAACABECsLIAIgAigCBCIAQQFrNgIEIAANACACIAIoAgAoAggRAAAgAhArCyAGIAYoAgQiAEEBazYCBCAARQRAIAYgBigCACgCCBEAACAGECsLIAwgDCgCBCIAQQFrNgIEIAANACAMIAwoAgAoAggRAAAgDBArCyALQRBqJAAPCxA2AAuNAQACfwJAAkACQAJAIABB5srB0wZMBEAgAEGx4NiLBkYNAiAAQbHG2cMGRg0BIABBsdbJ0QZHDQRBBw8LIABB6Ma5qwdMBEBBAyAAQefKwdMGRg0FGiAAQenWzesGRw0EQQkPCyAAQenGuasHRg0CIABBscbZswdHDQNBBQ8LQQEPC0EEDwtBCA8LQQALC3oBA38CfwJAAkAgACgCQCIDRQ0AIABBQGsiBCEAA0AgACADIAMoAhAgAUgiBRshACADIAVBAnRqKAIAIgMNAAsgACAERg0AIAAoAhAgAUwNAQtBACACRQ0BGiACQQA2AgBBAA8LIAIEQCACIAAoAjQ2AgALIAAoAiwLC8QCAQR/IABB6IEFNgIAIAAoAowBIgMEQCAAKAKQASICIAMiAUcEQANAIAJBDGsiASgCACIEBEAgAkEIayAENgIAIAJBBGsoAgAaIAQQKgsgASICIANHDQALIAAoAowBIQELIAAgAzYCkAEgACgClAEaIAEQKgsgACgCgAEiAwRAIAAoAoQBIgIgAyIBRwRAA0AgAkEMayIBKAIAIgQEQCACQQhrIAQ2AgAgAkEEaygCABogBBAqCyABIgIgA0cNAAsgACgCgAEhAQsgACADNgKEASAAKAKIARogARAqCyAAKAJ0IgMEQCAAKAJ4IgIgAyIBRwRAA0AgAkEMayIBKAIAIgQEQCACQQhrIAQ2AgAgAkEEaygCABogBBAqCyABIgIgA0cNAAsgACgCdCEBCyAAIAM2AnggACgCfBogARAqCyAAEFYLTQAgAEIANwIAIABBADYCMCAAQgA3AiggAEEgaiIBQgA3AgAgAEIANwIYIABCADcCECAAQgA3AgggAUIANwIAIAFBADYCECABQgA3AggLtAIBCH8gAEGYgAU2AgAgACgCsAEiBARAIAAoArQBIgIgBCIBRwRAA0AgAkEMayIHKAIAIgUEQCACQQhrIggoAgAiASAFIgNHBEADQCABQQxrIgMoAgAiBgRAIAFBCGsgBjYCACABQQRrKAIAGiAGECoLIAMiASAFRw0ACyAHKAIAIQMLIAggBTYCACACQQRrKAIAGiADECoLIAJBEGsiAiAERw0ACyAAKAKwASEBCyAAIAQ2ArQBIAAoArgBGiABECoLIAAoApwBIgEEQCAAIAE2AqABIAAoAqQBGiABECoLIAAoApABIgEEQCAAIAE2ApQBIAAoApgBGiABECoLIAAoAoQBIgEEQCAAKAKMARogARAqCyAAKAJ4IgEEQCAAIAE2AnwgACgCgAEaIAEQKgsgABBWC84OAQ9/IAAoArABIg0gACgCtAEiDkcEQANAAkAgDSgCBCILIA0oAggiD0YNAANAAkAgCygCACEMIAsoAgQhEAJAIAEoAgQiBCABKAIIIgBJBEAgBEEAOgAAIARBAWohBQwBCyAEIAEoAgAiA2siB0EBaiICQQBIDQEgB0H/////ByAAIANrIgZBAXQiACACIAAgAksbIAZB/////wNPGyIABH8gABAsBUEACyIGaiICQQA6AAAgACAGaiEJIAJBAWohBQJAIAMgBEYEQCACIQYMAQtBACEIIAQhACAHQQNxIgcEQANAIAJBAWsiAiAAQQFrIgAtAAA6AAAgCEEBaiIIIAdHDQALCyADIARrQXxNBEADQCACQQFrIABBAWstAAA6AAAgAkECayAAQQJrLQAAOgAAIAJBA2sgAEEDay0AADoAACACQQRrIgIgAEEEayIALQAAOgAAIAAgA0cNAAsLIAEoAggaIAEoAgAhAwsgASAJNgIIIAEgBTYCBCABIAY2AgAgA0UNACADECoLIAEgBTYCBAJAIAEoAggiACAFSwRAIAVBADoAACAFQQFqIQQMAQsgBSABKAIAIgNrIgdBAWoiAkEASA0BIAdB/////wcgACADayIGQQF0IgAgAiAAIAJLGyAGQf////8DTxsiAAR/IAAQLAVBAAsiBmoiAkEAOgAAIAAgBmohCSACQQFqIQQCQCADIAVGBEAgAiEGDAELQQAhCCAFIQAgB0EDcSIHBEADQCACQQFrIgIgAEEBayIALQAAOgAAIAhBAWoiCCAHRw0ACwsgAyAFa0F8TQRAA0AgAkEBayAAQQFrLQAAOgAAIAJBAmsgAEECay0AADoAACACQQNrIABBA2stAAA6AAAgAkEEayICIABBBGsiAC0AADoAACAAIANHDQALCyABKAIIGiABKAIAIQMLIAEgCTYCCCABIAQ2AgQgASAGNgIAIANFDQAgAxAqCyABIAQ2AgQgECAMayIKQQh2IQUCQCABKAIIIgAgBEsEQCAEIAU6AAAgBEEBaiEFDAELIAQgASgCACIDayIHQQFqIgJBAEgNASAHQf////8HIAAgA2siBkEBdCIAIAIgACACSxsgBkH/////A08bIgAEfyAAECwFQQALIgZqIgIgBToAACAAIAZqIQkgAkEBaiEFAkAgAyAERgRAIAIhBgwBC0EAIQggBCEAIAdBA3EiBwRAA0AgAkEBayICIABBAWsiAC0AADoAACAIQQFqIgggB0cNAAsLIAMgBGtBfE0EQANAIAJBAWsgAEEBay0AADoAACACQQJrIABBAmstAAA6AAAgAkEDayAAQQNrLQAAOgAAIAJBBGsiAiAAQQRrIgAtAAA6AAAgACADRw0ACwsgASgCCBogASgCACEDCyABIAk2AgggASAFNgIEIAEgBjYCACADRQ0AIAMQKgsgASAFNgIEAkAgASgCCCIAIAVLBEAgBSAKOgAAIAVBAWohBAwBCyAFIAEoAgAiA2siB0EBaiICQQBIDQEgB0H/////ByAAIANrIgZBAXQiACACIAAgAksbIAZB/////wNPGyIABH8gABAsBUEACyIGaiICIAo6AAAgACAGaiEJIAJBAWohBAJAIAMgBUYEQCACIQYMAQtBACEIIAUhACAHQQNxIgcEQANAIAJBAWsiAiAAQQFrIgAtAAA6AAAgCEEBaiIIIAdHDQALCyADIAVrQXxNBEADQCACQQFrIABBAWstAAA6AAAgAkECayAAQQJrLQAAOgAAIAJBA2sgAEEDay0AADoAACACQQRrIgIgAEEEayIALQAAOgAAIAAgA0cNAAsLIAEoAggaIAEoAgAhAwsgASAJNgIIIAEgBDYCBCABIAY2AgAgA0UNACADECoLIAEgBDYCBAJAIAsoAgQiBiALKAIAIglrIghBAEwNACAIIAEoAggiACAEa0wEQCAGIAlHBEAgBCAJIAgQNxoLIAEgBCAIajYCBAwBCyAEIAEoAgAiA2siCiAIaiICQQBIDQFBACEMQQAhBUH/////ByAAIANrIgZBAXQiACACIAAgAksbIAZB/////wNPGyIABEAgABAsIQULIAAgBWohByAFIApqIgIgCSAIEDIiACAIaiEJAkAgAyAERgRAIAAhBQwBC0EAIQggBCEAIApBA3EiBgRAA0AgAkEBayICIABBAWsiAC0AADoAACAIQQFqIgggBkcNAAsLIAMgBGtBfE0EQANAIAJBAWsgAEEBay0AADoAACACQQJrIABBAmstAAA6AAAgAkEDayAAQQNrLQAAOgAAIAJBBGsiAiAAQQRrIgAtAAA6AAAgACADRw0ACwsgASgCBCIAIARrIQwgACAERg0AIAkgBCAMEDcaCyABIAkgDGo2AgQgASgCACEAIAEgBTYCACABKAIIGiABIAc2AgggAEUNACAAECoLIA8gC0EMaiILRw0BDAILCxA2AAsgDUEQaiINIA5HDQALC0EBC6IGAQt/IwBBEGsiBCQAAkACQCAAKAIEIgIgAUkEQAJAAkAgACgCCCIFQQV0IgMgASACayIGSQ0AIAIgAyAGa0sNACAAIAE2AgQgAkEfcSEDIAAoAgAgAkEDdkH8////AXFq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dSIEQQFqIgNBgICAgAFJBEBB/////wAgACgCCCACayICQQN1IgYgAyADIAZJGyACQfD///8HTxsiAgRAIAJBgICAgAFPDQIgAkEEdBAsIQULIAEvAQAhBiAFIARBBHRqIgNBADYCDCADQgA3AgQgAyAGOwEAIANBBGogASgCBCIEIAEoAggiASABIARrQQxtEPcCIAUgAkEEdGohCCADQRBqIQYCQCAAKAIEIgIgACgCACIERgRAIAMhBQwBCwNAIAJBEGsiAS8BACEHIANBBGsiCUEANgIAIANBDGsiCkIANwIAIANBEGsiBSAHOwEAIAogAkEMayIHKAIANgIAIANBCGsgAkEIaygCADYCACAJIAJBBGsiAygCADYCACADQQA2AgAgB0IANwIAIAUhAyABIgIgBEcNAAsgACgCBCECIAAoAgAhBAsgACAGNgIEIAAgBTYCACAAKAIIGiAAIAg2AgggAiAERwRAA0AgAkEMayIIKAIAIgAEQCACQQhrIgcoAgAiAyAAIgFHBEADQCADQQxrIgEoAgAiBQRAIANBCGsgBTYCACADQQRrKAIAGiAFECoLIAEiAyAARw0ACyAIKAIAIQELIAcgADYCACACQQRrKAIAGiABECoLIAJBEGsiAiAERw0ACwsgBARAIAQQKgsgBg8LEDYACxBPAAuHBAEIfwJAIAAoAgQgACgCACICa0EEdSIFQQFqIgNBgICAgAFJBEBB/////wAgACgCCCACayICQQN1IgcgAyADIAdJGyACQfD///8HTxsiAgRAIAJBgICAgAFPDQIgAkEEdBAsIQQLIAQgBUEEdGoiAyABLwEAOwEAIAMgASgCBDYCBCADIAEoAgg2AgggAyABKAIMNgIMIAFBADYCDCABQgA3AgQgBCACQQR0aiEIIANBEGohBwJAIAAoAgQiAiAAKAIAIgVGBEAgAyEEDAELA0AgAkEQayIBLwEAIQYgA0EEayIJQQA2AgAgA0EQayIEIAY7AQAgA0EMayACQQxrIgYoAgA2AgAgA0EIayACQQhrKAIANgIAIAkgAkEEayIDKAIANgIAIANBADYCACAGQgA3AgAgBCEDIAEiAiAFRw0ACyAAKAIEIQIgACgCACEFCyAAIAc2AgQgACAENgIAIAAoAggaIAAgCDYCCCACIAVHBEADQCACQQxrIggoAgAiAARA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ACADECsLCwsAIAAoAgAgARBkCx8BAX8CQCAARQ0AIAAoAgAiAEUNACAAKAIsIQELIAELHwEBfwJAIABFDQAgACgCACIARQ0AIAAoAighAQsgAQsfAAJAIAFFDQAgASgCACIARQ0AIAAQKiABQQA2AgALC/0EAQN/AkACQCACRQRAIABBADYCCCAAQgA3AgAgASgCrAEiBCABKAKoASIBRg0BIAQgAWsiAkEASA0CIAAgAhAsIgM2AgQgACADNgIAIAAgAiADajYCCANAIAMgASgCADYCACADIAEoAgQiAjYCBCACBEAgAiACKAIEQQFqNgIECyADQQhqIQMgAUEIaiIBIARHDQALIAAgAzYCBA8LIABBADYCCCAAQgA3AgAgASgCqAEiAyABKAKsASIERg0AIAJBBHEhBSACQQJxRQRAQQAhASAFRQRAA0AgAAJ/IAAoAgggAU0EQCAAIAMQYQwBCyABIAMoAgA2AgAgASADKAIEIgI2AgQgAgRAIAIgAigCBEEBajYCBAsgAUEIagsiATYCBCADQQhqIgMgBEcNAAwDCwALA0AgAygCACICLQBMRQRAIAACfyAAKAIIIAFNBEAgACADEGEMAQsgASACNgIAIAEgAygCBCICNgIEIAIEQCACIAIoAgRBAWo2AgQLIAFBCGoLIgE2AgQLIANBCGoiAyAERw0ACwwBC0EAIQEgBUUEQANAIAMoAgAiAi0AQEUEQCAAAn8gACgCCCABTQRAIAAgAxBhDAELIAEgAjYCACABIAMoAgQiAjYCBCACBEAgAiACKAIEQQFqNgIECyABQQhqCyIBNgIECyADQQhqIgMgBEcNAAwCCwALA0ACQCADKAIAIgItAEANACACLQBMDQAgAAJ/IAAoAgggAUsEQCABIAI2AgAgASADKAIEIgI2AgQgAgRAIAIgAigCBEEBajYCBAsgAUEIagwBCyAAIAMQYQsiATYCBAsgA0EIaiIDIARHDQALCw8LEDYACwoAIAAoAgAoAiQLCgAgACgCAC0AMAt1AQJ/IAJBgYAEa0H//3dJBEADQCABQQJtIQEgAkECbSICQYGABGtB//93SQ0ACwsCQCACQQFMDQADQCABQYGABGtB/v93Sw0BIAFBAm0hASACQQNLIQQgAkEBdiECIAQNAAsLIAAgAa0gAq1CIIaENwIAIAALogMBCH8jAEEQayIDJAACQCAARQ0AIAFFDQAgAkUNACADQQRqIAAoAgAQwAICQCADKAIIIgYgAygCBCIAa0EDdSIEIAIgAiAEShsiBEEASgRAQQAhAiAEQQRPBEAgBEH8////B3EhBwNAIAEgAkECdGogACACQQN0aigCACgCJDYCACABIAJBAXIiBUECdGogACAFQQN0aigCACgCJDYCACABIAJBAnIiBUECdGogACAFQQN0aigCACgCJDYCACABIAJBA3IiBUECdGogACAFQQN0aigCACgCJDYCACACQQRqIQIgCEEEaiIIIAdHDQALCyAEQQNxIgdFDQEDQCABIAJBAnRqIAAgAkEDdGooAgAoAiQ2AgAgAkEBaiECIAlBAWoiCSAHRw0ACwwBCyAARQ0BCyAAIAZGBH8gAAUDQAJAIAZBBGsoAgAiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsgBkEIayIGIABHDQALIAMoAgQLIQogAyAANgIIIAMoAgwaIAoQKgsgA0EQaiQAIAQLowEBBX8jAEEQayIBJAAgAUEEaiAAKAIAEMACIAEoAgghBCABKAIEIgMEQCADIgAgBEcEQCAEIQADQAJAIABBBGsoAgAiAkUNACACIAIoAgQiBUEBazYCBCAFDQAgAiACKAIAKAIIEQAAIAIQKwsgAEEIayIAIANHDQALIAEoAgQhAAsgASADNgIIIAEoAgwaIAAQKgsgAUEQaiQAIAQgA2tBA3UL1QQBA38jAEEwayIDJAACQCACRQRAIANBADoAECADQQA6ABsgA0EcakEFQdEPIANBEGoQLyECIAMsABtBAEgEQCADKAIYGiADKAIQECoLIAAgAiABKAIAEEEgAiwAE0EATg0BIAIoAhAaIAIoAggQKgwBCyADQQhqIAEoAgAQxgQCQCADKAIIIgVFBEAgA0EAOgAQIANBADoAGyADQRxqQQJB/AAgA0EQahAvIQIgAywAG0EASARAIAMoAhgaIAMoAhAQKgsgACACIAEoAgAQQSACLAATQQBODQEgAigCEBogAigCCBAqDAELIAVB8IQFQdDwBBA5IgQEQCADKAIMIgIEQCACIAIoAgRBAWo2AgQLIANBHGoiBSAEIAQoAgAoAhQRAgAgACAFIAEoAgAQQSADLAAvQQBIBEAgAygCLBogAygCJBAqCyACRQ0BIAIgAigCBCIAQQFrNgIEIAANASACIAIoAgAoAggRAAAgAhArDAELQRAQLCIEQgA3AgggAiAENgIAIAMoAgwhAiADQgA3AgggBCACNgIEIAQgBTYCACABKAIAIQICQCABKAIEIgVFBEAgBCAFNgIMIAQgAjYCCAwBCyAFIAUoAgRBAWo2AgQgBCACNgIIIAQoAgwhAiAEIAU2AgwgAkUNACACIAIoAgQiBEEBazYCBCAEDQAgAiACKAIAKAIIEQAAIAIQKwsgAEGQpQUgASgCABBBCyADKAIMIgBFDQAgACAAKAIEIgFBAWs2AgQgAQ0AIAAgACgCACgCCBEAACAAECsLIANBMGokAAuKAwEEfxC0AkEIECwhAUGgARAsIgJBiPAENgIAIAJCADcCBAJ/IAJBEGoiAEIANwMAIABCADcCFCAAQgA3AhwgAEEANgKIASAAQgA3A4ABIABBADYCCCAAQa4gNgIMIAAgAEEUajYCECAAQgA3AiQgAEIANwIsIABCgICAgMAANwI0AkBBiPwAEN4CIgNFDQAgA0GRyQAQiAEEQCADQfn+ABCIAQ0BCyAAQaDoBCkDADcDQCAAQdjoBCkDADcDeCAAQdDoBCkDADcDcCAAQcjoBCkDADcDaCAAQcDoBCkDADcDYCAAQbjoBCkDADcDWCAAQbDoBCkDADcDUCAAQajoBCkDADcDSCAAEMkEIAAMAQsgAEHg5wQpAwA3A0AgAEGY6AQpAwA3A3ggAEGQ6AQpAwA3A3AgAEGI6AQpAwA3A2ggAEGA6AQpAwA3A2AgAEH45wQpAwA3A1ggAEHw5wQpAwA3A1AgAEHo5wQpAwA3A0ggABDJBCAACyEAIAEgAjYCBCABIAA2AgAgAQuzAwEFfyMAQRBrIgEkAAJAIABFDQAgAC0AACIDRQ0AIAAtAAEiBEUNACAALQACIgVFDQAgAC0AAyIARQ0AIAFBADoADyABIAA6AA4gASAFOgANIAEgBDoADCABIAM6AAsgAUELakHd8wBBBRBfRQRAQQEhAgwBCyABQQtqQZAVQQUQX0UEQEECIQIMAQsgAUELakHR8gBBBRBfRQRAQQMhAgwBCyABQQtqQe4MQQUQX0UEQEEEIQIMAQtBBSECIAFBC2oiAEHCO0EFEF9FDQAgAEHDIkEFEF9FBEBBBiECDAELIAFBC2pBqDtBBRBfRQRAQQchAgwBCyABQQtqQbMeQQUQX0UEQEEIIQIMAQsgAUELakGYjQFBBRBfRQRAQQkhAgwBCyABQQtqQZONAUEFEF9FBEBBCiECDAELIAFBC2pBgckAQQUQX0UEQEELIQIMAQsgAUELakG+IkEFEF9FBEBBDCECDAELIAFBC2pB0vMAQQUQX0UEQEENIQIMAQsgAUELakGPxABBBRBfRQRAQREhAgwBC0EAQRIgAUELakHOIkEFEF8bIQILIAFBEGokACACC6oHAQl/IwBB0ABrIgUkAAJAAkACQCABRQ0AIANFDQAgBA0BCyAAQoWAgICQ+gE3AgAgAEGvGjYCCAwBCyACQQBMBEAgAEKFgICA4PoBNwIAIABBgcwANgIIDAELQcgAECwiB0IANwIEIAdB/OUENgIAIAdBEGogASACQQAQiAMhASAFIAc2AjQgBSABNgIwIAcgBygCBEEBajYCBCAFIAUpAjA3AwAgBUE4aiAFIAJBABDvAiEMIAVCADcCKCAFQRRqIAwgBUEoakHg5wQQ+wECQCAFKAIUIgIEQCAFKAIYIQEgACACNgIAIAFB5ABGBEAgAEHkADYCBCAAQfD4ADYCCAwCCyAAIAE2AgQgAEGSETYCCAwBCwJAAkAgBSgCKCIBRQ0AIAFBoL8EQczBBBA5IgZFDQAgBSgCLCIIBEAgCCAIKAIEQQFqNgIEC0EAIQEgBUEANgIQIAVCADcCCEEAIQIgBigCcCIJIAYoAmwiBkcEQCAJIAZrIgFBAEgNAiABECwiAiAGIAEQMiABaiEBCyADIAEgAmsiBhBVIgM2AgAgBCAGQQJ1IgY2AgACQAJAIAEgAkcEQEEBIAYgBkEBTRsiCkEDcSEJQQAhBEEAIQEgBkEETwRAIApBfHEhDUEAIQoDQCADIAFBAnQiBmogAiAGaigCADYCACADIAZBBHIiC2ogAiALaigCADYCACADIAZBCHIiC2ogAiALaigCADYCACADIAZBDHIiBmogAiAGaigCADYCACABQQRqIQEgCkEEaiIKIA1HDQALCyAJBEADQCADIAFBAnQiBmogAiAGaigCADYCACABQQFqIQEgBEEBaiIEIAlHDQALCyAAQeTsBCkCADcCACAAQezsBCgCADYCCAwBCyAAQeTsBCkCADcCACAAQezsBCgCADYCCCACRQ0BCyACECoLIAhFDQIgCCAIKAIEIgBBAWs2AgQgAA0CIAggCCgCACgCCBEAACAIECsMAgsgAEKCgICA4Aw3AgAgAEGpETYCCAwBCxA2AAsgBSwAJ0EASARAIAUoAiQaIAUoAhwQKgsCQCAFKAIsIgBFDQAgACAAKAIEIgFBAWs2AgQgAQ0AIAAgACgCACgCCBEAACAAECsLAkAgDCgCBCIARQ0AIAAgACgCBCIBQQFrNgIEIAENACAAIAAoAgAoAggRAAAgABArCyAHIAcoAgQiAEEBazYCBCAADQAgByAHKAIAKAIIEQAAIAcQKwsgBUHQAGokAAsHAEGAkMwICzoBAnwgACACKwMAIgMgASsDAKIgAisDCCIEIAErAwiioDkDACAAIAMgASsDEKIgBCABKwMYoqA5AwgLRwEBf0EBIQECQCAAKAIEQYCAAmtBgIB8SQ0AIAAoAghBgIACa0GAgHxJDQAgACgCDEH//wNLDQAgACgCEEH//wNLIQELIAELUQEBfyABQQFrQQFLBEAgAA8LQQAhASACQQNNBEAgAkECdEGouAJqKAIAIQQLAkACQAJAIAMOAwEAAQILIAAgBGpBAWshAAsgACAEbiEBCyABC1EBAX8gAUEBa0EBSwRAIAAPC0EAIQEgAkEDTQRAIAJBAnRBmLgCaigCACEECwJAAkACQCADDgMBAAECCyAAIARqQQFrIQALIAAgBG4hAQsgAQuKCAEIfyMAQaABayIFJAAgBUGg0wM2AhQgBUG00wM2AkwgBUHE0wMoAgAiBzYCDCAFQQxqIgYgB0EMaygCAGpByNMDKAIANgIAIAVBADYCECAGIAUoAgxBDGsoAgBqIgcgBUEYaiIKED4gB0KAgICAcDcCSCAFQczTAygCACIINgIUIAVBFGoiByAIQQxrKAIAakHQ0wMoAgA2AgAgBUHA0wMoAgAiCDYCDCAGIAhBDGsoAgBqQdTTAygCADYCACAFQbTTAzYCTCAFQYzTAzYCDCAFQaDTAzYCFCAKED8iCkHwywM2AgAgBUFAa0IANwIAIAVCADcCOCAFQRg2AkggByAFKAIUQQxrIgYoAgBqIgggCCgCBEG1f3FBCHI2AgQgByAGKAIAaiIIKAJMQX9GBEAgBUGcAWoiCSAIKAIcIgY2AgAgBkHszgZHBEAgBiAGKAIEQQFqNgIECyAJQaTQBhBDIgZBICAGKAIAKAIcEQUAGiAJEEcLIAhBMDYCTCAFQSBqIQYCQCACRQ0AIAcgAygCACADIAMsAAsiCEEASCIJGyADKAIEIAggCRsQLRogBiAFKAIUQQxrKAIAakEENgIAIAdBABA8QbTEAUECEC0aIAYgBSgCFEEMaygCAGpBAjYCACAHIAEtAAAQQhoCQCACQQFrIggEQEEBIQMMAQsgB0HPkAJBARAtGgwBCwNAAkACQAJAAkAgA0EPcSIJDgkAAgICAgICAgECCyAHIAQoAgAgBCAELAALIgtBAEgiDBsgBCgCBCALIAwbEC0aIAYgBSgCFEEMaygCAGpBBDYCACAHIAMQPEG0xAFBAhAtGgwCCyAHQejEAUECEC0aDAELIAdB6cQBQQEQLRoLIAYgBSgCFEEMaygCAGpBAjYCACAHIAEgA2otAAAQQhogAyAIRyAJQQ9HcUUEQCAHQc+QAkEBEC0aCyADQQFqIgMgAkcNAAsLAkACQAJ/IAUoAkgiAUEQcQRAIAVBLGohBiAFKAJEIgIgBSgCMCIBSQR/IAUgATYCRCABBSACCwwBCyABQQhxRQRAQQAhAyAAQQA6AAsMAwsgBSgCKAsgBigCACICayIDQfj///8HSQRAIANBC08EQCADQQdyQQFqIgQQLCEBIAAgBEGAgICAeHI2AgggACABNgIAIAAgAzYCBCABIQAMAgsgACADOgALIAMNAUEAIQMMAgsQOAALIAAgAiADEDcaCyAAIANqQQA6AAAgBUG80wMoAgAiADYCDCAAQQxrKAIAIAVBDGpqQdzTAygCADYCACAFQeDTAygCADYCFCAKQfDLAzYCACAFLABDQQBIBEAgBSgCQBogBSgCOBAqCyAKED0aIAVBzABqEDsaIAVBoAFqJAALOAAgAC8BCEECRgRAIABBBjsBCAsgAC8BBEECRgRAIABBATsBBAsgAC8BBkECRgRAIABBDTsBBgsLMgAgAQRAIAAgASgCBDsBBCAAIAEoAgg7AQYgACABKAIMOwEIIAAgAS0AEEEARzoACgsLnAUCBH8IfSMAQRBrIgMkACACQQA2AgACQEE0EFUiBEUEQCADQQA6AAQgA0EAOgAPIABBBkEAIANBBGoQLxogAywAD0EATg0BIAMoAgwaIAMoAgQQKgwBCyAEQQE6ABAgBEEGNgIMIARCgYCAgNABNwIEIARBAToAACADQQRqIgUgBCABLwEEEP8CIAMoAgQiBgRAIAMoAgghASAEECogA0EAOgAEIANBADoADyAAIAYgASAFEC8aIAMsAA9BAE4NASADKAIMGiADKAIEECoMAQsgA0EEaiIFIAQgAS8BBhD+AiADKAIEIgYEQCADKAIIIQEgBBAqIANBADoABCADQQA6AA8gACAGIAEgBRAvGiADLAAPQQBODQEgAygCDBogAygCBBAqDAELIANBBGoiBSAEIAEvAQgQ/QIgAygCBCIGBEAgAygCCCEBIAQQKiADQQA6AAQgA0EAOgAPIAAgBiABIAUQLxogAywAD0EATg0BIAMoAgwaIAMoAgQQKgwBCyAEIAEtAAo6ABAgBC8BBEEBayIBQf//A3FBFU0EQCABQQJ0Qfz/D3EiAUHAtwJqKgIAIQggAUG4tQJqKgIAIQkgAUHgtAJqKgIAIQogAUGItAJqKgIAIQsgAUGwswJqKgIAIQwgAUHYsgJqKgIAIQ0gAUHotgJqKgIAIQ4gAUGQtgJqKgIAIQcLIAQgCDgCMCAEIA44AiwgBCAKOAIoIAQgCzgCJCAEIAw4AiAgBCANOAIcIAQgBzgCGCAEIAk4AhQgAiAENgIAIABBkKUFKQIANwIAIABBCGohAEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLgsgA0EQaiQAC9UDAQ99IABCADcCAAJAIAACfSABQf7/A3FBDEYEQCACQQFrQf//A3EiAUEVTQRAIAFBAnQiAUHAtwJqKgIAIQkgAUHotgJqKgIAIQogAUGQtgJqKgIAIQYgAUG4tQJqKgIAIQggAUHgtAJqKgIAIQUgAUGItAJqKgIAIQcgAUHYsgJqKgIAIQMgAUGwswJqKgIAIQQLIAkgByAGQwAAgD8gAyAEkpMiC5RDAACAPyAIIAaSkyIMIASUkyIPlCAIIARDAACAPyAHIAWSkyINlCALIAWUkyIQlCADIAUgDJQgDSAGlJOUkpKUIg5DAAAAAFsNAiAAIAZDAACAPyAKIAmSkyIRIAMgBZQgBCAHlJOUIAogEJQgCSAHIAuUIA0gA5STlJKSlCAOlTgCACAFIBEgCCAElCAGIAOUk5QgCiAPlCAJIAMgDJQgCyAIlJOUkpKUIA6VDAELAkACQAJAAkACQCABQQFrDgoABgYBAgIDBgQEBgsgAEHQ5+byAzYCAEOY3ZM9DAQLIABBmrPm9AM2AgBDrkfhPQwDCyAAQYet5PQDNgIAQ9V46T0MAgsgAEGHreTyAzYCAEMOLbI9DAELIABBnYGa9AM2AgBDj+RyPQs4AgQLC5MCAQd/ELQCQbilBSgCACICQbylBUYEQEEADwsCQCABRQRAA0AgACACKAIQIgUoAhARAQAiByADSiEBAkAgAigCBCIGBEADQCAGIgIoAgAiBg0ADAILAAsDQCACIAIoAggiAigCAEcNAAsLIAcgAyABGyEDIAUgBCABGyEEIAJBvKUFRw0ACwwBCwNAAkAgACACKAIQIgUoAhARAQAiB0EATA0AIAUoAgBBA0gNACABIAUoAigQiAENACAFDwsgAyAHSCEIAkAgAigCBCIGBEADQCAGIgIoAgAiBg0ADAILAAsDQCACIAIoAggiAigCAEcNAAsLIAcgAyAIGyEDIAUgBCAIGyEEIAJBvKUFRw0ACwsgBAvCAQEDfyAAKAIIIgIEQCACEQ4ACwJAAkBBvKUFKAIAIgFFBEBBvKUFIgMhAgwBCwNAIAAgASICKAIQIgFJBEAgAiIDKAIAIgENAQwCCyAAIAFNDQIgAigCBCIBDQALIAJBBGohAwtBFBAsIgEgAjYCCCABQgA3AgAgASAANgIQIAMgATYCAEG4pQUoAgAoAgAiAARAQbilBSAANgIAIAMoAgAhAQtBvKUFKAIAIAEQjgFBwKUFQcClBSgCAEEBajYCAAsL0AEBBH8gACgCHCIBBEAgAREOAAtBBBAsIgEgADYCAEEUECwiAiABNgIQAkBByKUFKAIAIgNFBEBByKUFIgAhAQwBCyAAKAIMIQQDQCADIgAoAhAoAgAoAgwgBEgEQCAAIQEgACgCACIDDQEMAgsgACgCBCIDDQALIABBBGohAQsgAiAANgIIIAJCADcCACABIAI2AgBBxKUFKAIAKAIAIgAEQEHEpQUgADYCACABKAIAIQILQcilBSgCACACEI4BQcylBUHMpQUoAgBBAWo2AgALtyICFH8BfiMAQcABayIFJAACQAJAAkACQAJAAkAgASgCJEEBaw4CAQADCyACQQFHDQIgAS0AGEEBcQ0BDAILIAEtABhBAXENACABLQAcQQFxRQ0BCyAFQgA3AxggBUIANwMQIAVBAToAHCAFQoKAgIAgNwIUIAVBAToAECAFIAEoAgA2AgQgASgCBCIERQ0CIAUgBBCHAiIENgIIIARFDQIgBUIANwK4AUH/ASEGAkAgASgCQCIHRQ0AIAFBQGsiASEEA0AgBCAHIAcoAhAiDEEASBshBCAHIAxBHXZBBHFqKAIAIgcNAAsgASAERg0AIAQoAhBBAEoNACAELQAYIQYLIAVBKGogBUEEakEAQQMgBUG4AWogBiAFQRBqIAMQ+QECQCAFKAK8ASIBRQ0AIAEgASgCBCIEQQFrNgIEIAQNACABIAEoAgAoAggRAAAgARArCwJAIAUoAggiAUUNACABIAEoAgQiBEEBazYCBCAEDQAgASABKAIAKAIIEQAAIAEQKwsCQCAFKAIwBEAgAEIANwIAIAAgBSkCMDcCCCAAQRBqIQAgBSwAQ0EATgRAIAAgBSkCODcCACAAIAUoAkA2AggMAgsgACAFKAI4IAUoAjwQLgwBCyAAIAUoAiggAiADELQECyAFLABDQQBIBEAgBSgCQBogBSgCOBAqCyAFKAIsIgBFDQEgACAAKAIEIgFBAWs2AgQgAQ0BIAAgACgCACgCCBEAACAAECsMAQsgASgCPCIHIAFBQGsiFUcEQCACQQFGIRMDQAJAIActABgiAkEITQRAIAcoAiwhCSAHKAIgIQggBygCHCEDIBNFBEAgCEECSQ0CIANFDQIgCEEBdiEOIANBfnEhECADQQFxIQtBACECA0AgCCACQX9zaiEGQQAhBEEAIQwgA0EBRwRAA0AgCSAHKAI0Ig0gAmxqIARqIg8tAAAhESAPIAkgBiANbGogBGoiDS0AADoAACANIBE6AAAgBEEBciINIAkgBygCNCIPIAJsamoiES0AACEKIBEgCSAGIA9saiANaiINLQAAOgAAIA0gCjoAACAEQQJqIQQgDEECaiIMIBBHDQALCyALBEAgCSAHKAI0IgwgAmxqIARqIg0tAAAhDyANIAkgBiAMbGogBGoiBC0AADoAACAEIA86AAALIAJBAWoiAiAORw0ACwwCCyAIRQ0BIANBAkkNASADQQJxIQwgA0EBdiIOQf7///8HcSEQQQAhAgNAQQAhBEEAIQYgDkEBRwRAA0AgCSAHKAI0IAJsaiILIARqIg0tAAAhDyANIAMgC2ogBEF/c2oiCy0AADoAACALIA86AAAgCSAHKAI0IAJsaiILIARqIg0tAAEhDyANIAMgC2ogBEF+c2oiCy0AADoAASALIA86AAAgBEECaiEEIAZBAmoiBiAQRw0ACwsgDARAIAkgBygCNCACbGoiBiAEaiILLQAAIQ0gCyADIAZqIARBf3NqIgQtAAA6AAAgBCANOgAACyACQQFqIgIgCEcNAAsMAQsgAkEQTQRAIAcoAiwhDiAHKAIgIQkgBygCHCEGIBNFBEAgCUECSQ0CIAZFDQIgCUEBdiENIAcoAjQhECAGQXxxIQ8gBkEDcSELQQAhDCAGQQRJIREDQCAOIAwgEGxBfnFqIQIgDiAJIAxBf3NqIBBsQX5xaiEIQQAhBEEAIQYgEUUEQANAIAIgBEEBdCIDaiIKLwEAIRIgCiADIAhqIgovAQA7AQAgCiASOwEAIAIgA0ECciIKaiISLwEAIRQgEiAIIApqIgovAQA7AQAgCiAUOwEAIAIgA0EEciIKaiISLwEAIRQgEiAIIApqIgovAQA7AQAgCiAUOwEAIAIgA0EGciIDaiIKLwEAIRIgCiADIAhqIgMvAQA7AQAgAyASOwEAIARBBGohBCAGQQRqIgYgD0cNAAsLQQAhAyALBEADQCACIARBAXQiBmoiCi8BACESIAogBiAIaiIGLwEAOwEAIAYgEjsBACAEQQFqIQQgA0EBaiIDIAtHDQALCyAMQQFqIgwgDUcNAAsMAgsgCUUNASAGQQJJDQEgBygCNCELIAZBAnEhDSAGQQF2Ig9B/v///wdxIRFBACECA0AgDiACIAtsQX5xaiIQIAZBAXRqIQxBACEEQQAhAyAPQQFHBEADQCAQIARBAXRqIggvAQAhCiAIIAwgBEF/c0EBdGoiEi8BADsBACASIAo7AQAgCC8BAiEKIAggDCAEQf7///8Hc0EBdGoiCC8BADsBAiAIIAo7AQAgBEECaiEEIANBAmoiAyARRw0ACwsgDQRAIBAgBEEBdGoiAy8BACEIIAMgDCAEQX9zQQF0aiIDLwEAOwEAIAMgCDsBAAsgAkEBaiICIAlHDQALDAELIAJBIE0EQCAHKAIsIQQgBygCICEIIAcoAhwhCSATRQRAIAhBAkkNAiAJRQ0CIAhBAXYhECAJQX5xIQsgCUEBcSENQQAhAwNAIAggA0F/c2ohAkEAIQZBACEMIAlBAUcEQANAIAZBAnQiDiAEIAcoAjQiDyADbEF8cWpqIhEoAgAhCiARIAQgAiAPbEF8cWogDmoiDygCADYCACAPIAo2AgAgDkEEciIOIAQgBygCNCIPIANsQXxxamoiESgCACEKIBEgBCACIA9sQXxxaiAOaiIOKAIANgIAIA4gCjYCACAGQQJqIQYgDEECaiIMIAtHDQALCyANBEAgBkECdCIGIAQgBygCNCIMIANsQXxxamoiDigCACEPIA4gBCACIAxsQXxxaiAGaiICKAIANgIAIAIgDzYCAAsgA0EBaiIDIBBHDQALDAILIAhFDQEgCUECSQ0BIAlBAnEhDCAJQQF2Ig5B/v///wdxIRBBACECA0BBACEGQQAhAyAOQQFHBEADQCAEIAcoAjQgAmxBfHFqIgsgBkECdCINaiIPKAIAIREgDyALIAlBAnQiD2ogBkF/c0ECdGoiCygCADYCACALIBE2AgAgBCAHKAI0IAJsQXxxaiILIA1qIg0oAgQhESANIAsgD2ogBkH+////A3NBAnRqIgsoAgA2AgQgCyARNgIAIAZBAmohBiADQQJqIgMgEEcNAAsLIAwEQCAEIAcoAjQgAmxBfHFqIgMgBkECdGoiCygCACENIAsgAyAJQQJ0aiAGQX9zQQJ0aiIDKAIANgIAIAMgDTYCAAsgAkEBaiICIAhHDQALDAELIAJBwABNBEAgBygCLCEQIAcoAiAhDCAHKAIcIQIgE0UEQCAMQQJJDQIgAkUNAiAMQQF2IQ8gBygCNCELIAJBfHEhESACQQNxIQ1BACEOA0AgECALIA5sQXhxaiEJIBAgDCAOQX9zaiALbEF4cWohCEEAIQRBACEGIAJBBE8EQANAIAkgBEEDdCIDaiIKKQMAIRggCiADIAhqIgopAwA3AwAgCiAYNwMAIAkgA0EIciIKaiISKQMAIRggEiAIIApqIgopAwA3AwAgCiAYNwMAIAkgA0EQciIKaiISKQMAIRggEiAIIApqIgopAwA3AwAgCiAYNwMAIAkgA0EYciIDaiIKKQMAIRggCiADIAhqIgMpAwA3AwAgAyAYNwMAIARBBGohBCAGQQRqIgYgEUcNAAsLQQAhAyANBEADQCAJIARBA3QiBmoiCikDACEYIAogBiAIaiIGKQMANwMAIAYgGDcDACAEQQFqIQQgA0EBaiIDIA1HDQALCyAOQQFqIg4gD0cNAAsMAgsgDEUNASACQQJJDQEgBygCNCELIAJBAnEhDSACQQF2Ig9B/v///wdxIRFBACEGA0AgECAGIAtsQXhxaiIOIAJBA3RqIQlBACEEQQAhAyAPQQFHBEADQCAOIARBA3RqIggpAwAhGCAIIAkgBEF/c0EDdGoiCikDADcDACAKIBg3AwAgCCkDCCEYIAggCSAEQf7///8Bc0EDdGoiCCkDADcDCCAIIBg3AwAgBEECaiEEIANBAmoiAyARRw0ACwsgDQRAIA4gBEEDdGoiAykDACEYIAMgCSAEQX9zQQN0aiIDKQMANwMAIAMgGDcDAAsgBkEBaiIGIAxHDQALDAELIAJBgAFNBEAgBygCLCEMIAcoAiAhAyAHKAIcIQYgE0UEQCADQQJJDQIgBkUNAiADQQF2IQ5BACECA0AgAyACQX9zaiEQQQAhBANAIAUgBEEEdCIIIAwgBygCNCILIAJsQXBxamoiCSkDCDcDMCAFIAkpAwA3AyggCSAMIAsgEGxBcHFqIAhqIggpAwg3AwggCSAIKQMANwMAIAggBSkDMDcDCCAIIAUpAyg3AwAgBEEBaiIEIAZHDQALIAJBAWoiAiAORw0ACwwCCyADRQ0BIAZBAkkNASAGQQF2IQ5BACECA0BBACEEA0AgBSAMIAcoAjQgAmxBcHFqIgggBEEEdGoiCSkDCDcDMCAFIAkpAwA3AyggCSAIIAZBBHRqIARBf3NBBHRqIggpAwg3AwggCSAIKQMANwMAIAggBSkDMDcDCCAIIAUpAyg3AwAgBEEBaiIEIA5HDQALIAMgAkEBaiICRw0ACwwBCyAFQaDTAzYCMCAFQbTTAzYCaCAFQcTTAygCACIBNgIoIAVBKGoiAiABQQxrKAIAakHI0wMoAgA2AgAgBUEANgIsIAIgBSgCKEEMaygCAGoiASAFQTRqIgMQPiABQoCAgIBwNwJIIAVBzNMDKAIAIgE2AjAgBUEwaiIEIAFBDGsoAgBqQdDTAygCADYCACAFQcDTAygCACIBNgIoIAIgAUEMaygCAGpB1NMDKAIANgIAIAVBtNMDNgJoIAVBjNMDNgIoIAVBoNMDNgIwIAMQPyICQfDLAzYCACAFQgA3AlwgBUIANwJUIAVBGDYCZCAEQd2rAUEaEC0hFiAFIActABg6ABAgFiAFQRBqQQEQLUGHwABBDxAtGgJAAkACfyAFKAJkIgFBEHEEQCAFQcgAaiEGIAUoAmAiAyAFKAJMIgFJBH8gBSABNgJgIAEFIAMLDAELIAFBCHFFBEBBACEHIAVBADoADyAFQQRqIQYMAwsgBUE8aiEGIAUoAkQLIAYoAgAiAWsiB0H4////B0kEQCAHQQtPBEAgB0EHckEBaiIDECwhBiAFIANBgICAgHhyNgIMIAUgBjYCBCAFIAc2AggMAgsgBSAHOgAPIAVBBGohBiAHDQFBACEHDAILEDgACyAGIAEgBxA3GgsgBiAHakEAOgAAIAVBEGpBBEEAIAVBBGoQLyEBIABCADcCACAAIAEpAwA3AgggAEEQaiEAAkAgASwAE0EATgRAIAAgASkCCDcCACAAIAEoAhA2AggMAQsgACABKAIIIAEoAgwQLiABLAATQQBODQAgASgCEBogASgCCBAqCyAFLAAPQQBIBEAgBSgCDBogBSgCBBAqCyAFQbzTAygCACIANgIoIABBDGsoAgAgBUEoampB3NMDKAIANgIAIAVB4NMDKAIANgIwIAJB8MsDNgIAIAUsAF9BAEgEQCAFKAJcGiAFKAJUECoLIAIQPRogBUHoAGoQOxoMAwsCQCAHKAIEIgYEQANAIAYiBCgCACIGDQAMAgsACwNAIAcoAggiBCgCACAHRyEXIAQhByAXDQALCyAVIAQiB0cNAAsLIAEoAgQiAkUNASABKAIAIQMgAhCHAiIBRQ0BIAAgATYCBCAAIAM2AgAgASABKAIEQQFqNgIEIABBkKUFKQIANwIIIABBEGohAAJAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAELIABBmKUFKAIAQZylBSgCABAuCyABIAEoAgQiAEEBazYCBCAADQAgASABKAIAKAIIEQAAIAEQKwsgBUHAAWokAA8LEI4DAAuIMgIafwF+IwBBQGoiECQAAkACQAJAAkACQAJAAkACQAJAIAEoAiRBAWsOAgEAAwsgAkGzAUwEQCACRQ0EIAJB2gBGDQIMBgsgAkGOAkYNASACQbQBRw0FIAEoAhwiBUEBcQ0BIAEoAhghDAwGCyACQbMBTARAIAJFDQMgAkHaAEcNBSABKAIYIgVBAXENASABKAIcIQwMBgsgAkG0AUcEQCACQY4CRw0FIAEoAhwiDEEBcQ0BIAEoAhghBQwGCyABKAIYIgxBAXENACABKAIcIgVBAXFFDQULIBBCADcDOCAQQgA3AzAgEEEBOgA8IBBCgoCAgCA3AjQgEEEBOgAwIBAgASgCADYCCCABKAIEIgRFDQIgECAEEIcCIgQ2AgwgBEUNAiAQQgA3AgBB/wEhBAJAIAEoAkAiDEUNACABQUBrIgEhBQNAIAUgDCAMKAIQIhZBAEgbIQUgDCAWQR12QQRxaigCACIMDQALIAEgBUYNACAFKAIQQQBKDQAgBS0AGCEECyAQQRBqIBBBCGpBAEEDIBAgBCAQQTBqIAMQ+QECQCAQKAIEIgFFDQAgASABKAIEIgRBAWs2AgQgBA0AIAEgASgCACgCCBEAACABECsLAkAgECgCDCIBRQ0AIAEgASgCBCIEQQFrNgIEIAQNACABIAEoAgAoAggRAAAgARArCwJAIBAoAhgEQCAAQgA3AgAgACAQKQIYNwIIIABBEGohACAQLAArQQBOBEAgACAQKQIgNwIAIAAgECgCKDYCCAwCCyAAIBAoAiAgECgCJBAuDAELIAAgECgCECACIAMQtQQLIBAsACtBAEgEQCAQKAIoGiAQKAIgECoLIBAoAhQiAEUNBSAAIAAoAgQiAUEBazYCBCABDQUgACAAKAIAKAIIEQAAIAAQKwwFCyACDQILIAEoAgQiAkUNACABKAIAIQMgAhCHAiIBRQ0AIAAgATYCBCAAIAM2AgAgASABKAIEQQFqNgIEIABBkKUFKQIANwIIIABBEGohAAJAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAELIABBmKUFKAIAQZylBSgCABAuCyABIAEoAgQiAEEBazYCBCAADQMgASABKAIAKAIIEQAAIAEQKwwDCxCOAwALIAEoAhwhDCABKAIYIQQCQCACQY4CRg0AIAJB2gBGDQAgDCEFIAQhDAwBCyAEIQULQYgBECwiDUIANwIEIA1BrOMENgIAIA1BFGpBAEHoABA0GiANIA0oAgQiBEEBaiIHNgIEIA1CADcCOCANQuOAgICwDDcCLCANQa4gNgIgIA1BQGtCADcCACANQQA2AoQBIA1CADcCfCANQoGAgIAQNwJUIA0gDUHMAGoiFjYCSCANQgA3AlwgDUIANwJkIA1CADcCbCANQgA3AHEgDSANQQxqIhg2AgwgDSANKAIIQQFqNgIIIA0gBDYCBCANIA02AhAgB0UEQCANIA0oAgAoAggRAAAgDRArCyABKQIgIR4gDSAFNgIoIA0gHjcCLCANIAw2AiQCQCABKAI8IgwgAUFAayIZRwRAIABBEGohFyACQY4CRiEaIAJB2gBHIRsDQCAMKAIgIQcgDCgCHCEFAkACQCAaDQAgG0UNACAFIQQgByEFDAELIAchBAsgEEEQaiAYIAwoAhAiByAEIAUgDCgCFCAMLQAYIAMQjwMCQCAQKAIQIhwEQCAAQgA3AgAgACAQKQMQNwIIIBAsACNBAE4EQCAXIBApAhg3AgAgFyAQKAIgNgIIDAULIBcgECgCGCAQKAIcEC4MAQsCQAJAIBYiBCgCACIFRQ0AA0AgBCAFIAUoAhAgB0giCRshBCAFIAlBAnRqKAIAIgUNAAsgBCAWRg0AIAcgBCgCEE4NAQsgFiEECyAMLQAYIgVBCE0EQEEAIQcgBCgCLCEUIAQoAjQhCSAMKAIsIREgDCgCNCELIAwoAiAhCiAMKAIcIQQCQCACQY4CRwRAIAJBtAFHBEAgAkHaAEcNAiAKRQ0CIARFDQIgBCARaiEPIARBfHEhEiAEQQNxIREgBEEESSETA0AgByAUaiEGIA8gByALbGohCEEAIQRBACEFIBNFBEADQCAGIAQgCWxqIAggBEF/c2otAAA6AAAgBiAEQQFyIAlsaiAIIARBfnNqLQAAOgAAIAYgBEECciAJbGogCCAEQX1zai0AADoAACAGIARBA3IgCWxqIAggBEF8c2otAAA6AAAgBEEEaiEEIAVBBGoiBSASRw0ACwtBACEFIBEEQANAIAYgBCAJbGogCCAEQX9zai0AADoAACAEQQFqIQQgBUEBaiIFIBFHDQALCyAHQQFqIgcgCkcNAAsMAgsgCkUNASAERQ0BIAQgEWohEiAEQXxxIRMgBEEDcSERIARBBEkhDgNAIBQgByAJbGohDyASIAogB0F/c2ogC2xqIQZBACEEQQAhBSAORQRAA0AgBCAPaiIIIAYgBEF/c2otAAA6AAAgCCAGIARBfnNqLQAAOgABIAggBiAEQX1zai0AADoAAiAIIAYgBEF8c2otAAA6AAMgBEEEaiEEIAVBBGoiBSATRw0ACwtBACEFIBEEQANAIAQgD2ogBiAEQX9zai0AADoAACAEQQFqIQQgBUEBaiIFIBFHDQALCyAHQQFqIgcgCkcNAAsMAQsgCkUNACAERQ0AIARBfHEhEiAEQQNxIQ8gBEEBa0EDSSETA0AgByAUaiEGIBEgCiAHQX9zaiALbGohCEEAIQRBACEFIBNFBEADQCAGIAQgCWxqIAQgCGotAAA6AAAgBiAEQQFyIg4gCWxqIAggDmotAAA6AAAgBiAEQQJyIg4gCWxqIAggDmotAAA6AAAgBiAEQQNyIg4gCWxqIAggDmotAAA6AAAgBEEEaiEEIAVBBGoiBSASRw0ACwtBACEFIA8EQANAIAYgBCAJbGogBCAIai0AADoAACAEQQFqIQQgBUEBaiIFIA9HDQALCyAHQQFqIgcgCkcNAAsLDAELIAVBEE0EQEEAIQcgBCgCNEEBdiEJIAwoAjRBAXYhFCAEKAIsIREgDCgCLCELIAwoAiAhCiAMKAIcIQQCQCACQY4CRwRAIAJBtAFHBEAgAkHaAEcNAiAKRQ0CIARFDQIgCyAEQQF0aiEPIARBfHEhEiAEQQNxIQsgBEEESSETA0AgESAHQQF0aiEGIA8gByAUbEEBdGohCEEAIQRBACEFIBNFBEADQCAGIAQgCWxBAXRqIAggBEF/c0EBdGovAQA7AQAgBiAEQQFyIAlsQQF0aiAIIARB/v///wdzQQF0ai8BADsBACAGIARBAnIgCWxBAXRqIAggBEH9////B3NBAXRqLwEAOwEAIAYgBEEDciAJbEEBdGogCCAEQfz///8Hc0EBdGovAQA7AQAgBEEEaiEEIAVBBGoiBSASRw0ACwtBACEFIAsEQANAIAYgBCAJbEEBdGogCCAEQX9zQQF0ai8BADsBACAEQQFqIQQgBUEBaiIFIAtHDQALCyAHQQFqIgcgCkcNAAsMAgsgCkUNASAERQ0BIAsgBEEBdGohEiAEQXxxIRMgBEEDcSELIARBBEkhDgNAIBEgByAJbEEBdGohDyASIAogB0F/c2ogFGxBAXRqIQZBACEEQQAhBSAORQRAA0AgDyAEQQF0aiIIIAYgBEF/c0EBdGovAQA7AQAgCCAGIARB/v///wdzQQF0ai8BADsBAiAIIAYgBEH9////B3NBAXRqLwEAOwEEIAggBiAEQfz///8Hc0EBdGovAQA7AQYgBEEEaiEEIAVBBGoiBSATRw0ACwtBACEFIAsEQANAIA8gBEEBdGogBiAEQX9zQQF0ai8BADsBACAEQQFqIQQgBUEBaiIFIAtHDQALCyAHQQFqIgcgCkcNAAsMAQsgCkUNACAERQ0AIARBfHEhEiAEQQNxIQ8gBEEBa0EDSSETA0AgESAHQQF0aiEGIAsgCiAHQX9zaiAUbEEBdGohCEEAIQRBACEFIBNFBEADQCAGIAQgCWxBAXRqIAggBEEBdGovAQA7AQAgBiAEQQFyIg4gCWxBAXRqIAggDkEBdGovAQA7AQAgBiAEQQJyIg4gCWxBAXRqIAggDkEBdGovAQA7AQAgBiAEQQNyIg4gCWxBAXRqIAggDkEBdGovAQA7AQAgBEEEaiEEIAVBBGoiBSASRw0ACwtBACEFIA8EQANAIAYgBCAJbEEBdGogCCAEQQF0ai8BADsBACAEQQFqIQQgBUEBaiIFIA9HDQALCyAHQQFqIgcgCkcNAAsLDAELIAVBIE0EQEEAIQcgBCgCNEECdiEJIAwoAjRBAnYhFCAEKAIsIREgDCgCLCELIAwoAiAhCiAMKAIcIQQCQCACQY4CRwRAIAJBtAFHBEAgAkHaAEcNAiAKRQ0CIARFDQIgCyAEQQJ0aiEPIARBfHEhEiAEQQNxIQsgBEEESSETA0AgESAHQQJ0aiEGIA8gByAUbEECdGohCEEAIQRBACEFIBNFBEADQCAGIAQgCWxBAnRqIAggBEF/c0ECdGooAgA2AgAgBiAEQQFyIAlsQQJ0aiAIIARB/v///wNzQQJ0aigCADYCACAGIARBAnIgCWxBAnRqIAggBEH9////A3NBAnRqKAIANgIAIAYgBEEDciAJbEECdGogCCAEQfz///8Dc0ECdGooAgA2AgAgBEEEaiEEIAVBBGoiBSASRw0ACwtBACEFIAsEQANAIAYgBCAJbEECdGogCCAEQX9zQQJ0aigCADYCACAEQQFqIQQgBUEBaiIFIAtHDQALCyAHQQFqIgcgCkcNAAsMAgsgCkUNASAERQ0BIAsgBEECdGohEiAEQXxxIRMgBEEDcSELIARBBEkhDgNAIBEgByAJbEECdGohDyASIAogB0F/c2ogFGxBAnRqIQZBACEEQQAhBSAORQRAA0AgDyAEQQJ0aiIIIAYgBEF/c0ECdGooAgA2AgAgCCAGIARB/v///wNzQQJ0aigCADYCBCAIIAYgBEH9////A3NBAnRqKAIANgIIIAggBiAEQfz///8Dc0ECdGooAgA2AgwgBEEEaiEEIAVBBGoiBSATRw0ACwtBACEFIAsEQANAIA8gBEECdGogBiAEQX9zQQJ0aigCADYCACAEQQFqIQQgBUEBaiIFIAtHDQALCyAHQQFqIgcgCkcNAAsMAQsgCkUNACAERQ0AIARBfHEhEiAEQQNxIQ8gBEEBa0EDSSETA0AgESAHQQJ0aiEGIAsgCiAHQX9zaiAUbEECdGohCEEAIQRBACEFIBNFBEADQCAGIAQgCWxBAnRqIAggBEECdGooAgA2AgAgBiAEQQFyIg4gCWxBAnRqIAggDkECdGooAgA2AgAgBiAEQQJyIg4gCWxBAnRqIAggDkECdGooAgA2AgAgBiAEQQNyIg4gCWxBAnRqIAggDkECdGooAgA2AgAgBEEEaiEEIAVBBGoiBSASRw0ACwtBACEFIA8EQANAIAYgBCAJbEECdGogCCAEQQJ0aigCADYCACAEQQFqIQQgBUEBaiIFIA9HDQALCyAHQQFqIgcgCkcNAAsLDAELIAVBwABNBEBBACEHIAQoAjRBA3YhCSAMKAI0QQN2IRQgBCgCLCERIAwoAiwhCyAMKAIgIQogDCgCHCEEAkAgAkGOAkcEQCACQbQBRwRAIAJB2gBHDQIgCkUNAiAERQ0CIAsgBEEDdGohDyAEQXxxIRIgBEEDcSELIARBBEkhEwNAIBEgB0EDdGohBiAPIAcgFGxBA3RqIQhBACEEQQAhBSATRQRAA0AgBiAEIAlsQQN0aiAIIARBf3NBA3RqKQMANwMAIAYgBEEBciAJbEEDdGogCCAEQf7///8Bc0EDdGopAwA3AwAgBiAEQQJyIAlsQQN0aiAIIARB/f///wFzQQN0aikDADcDACAGIARBA3IgCWxBA3RqIAggBEH8////AXNBA3RqKQMANwMAIARBBGohBCAFQQRqIgUgEkcNAAsLQQAhBSALBEADQCAGIAQgCWxBA3RqIAggBEF/c0EDdGopAwA3AwAgBEEBaiEEIAVBAWoiBSALRw0ACwsgB0EBaiIHIApHDQALDAILIApFDQEgBEUNASALIARBA3RqIRIgBEF8cSETIARBA3EhCyAEQQRJIQ4DQCARIAcgCWxBA3RqIQ8gEiAKIAdBf3NqIBRsQQN0aiEGQQAhBEEAIQUgDkUEQANAIA8gBEEDdGoiCCAGIARBf3NBA3RqKQMANwMAIAggBiAEQf7///8Bc0EDdGopAwA3AwggCCAGIARB/f///wFzQQN0aikDADcDECAIIAYgBEH8////AXNBA3RqKQMANwMYIARBBGohBCAFQQRqIgUgE0cNAAsLQQAhBSALBEADQCAPIARBA3RqIAYgBEF/c0EDdGopAwA3AwAgBEEBaiEEIAVBAWoiBSALRw0ACwsgB0EBaiIHIApHDQALDAELIApFDQAgBEUNACAEQXxxIRIgBEEDcSEPIARBAWtBA0khEwNAIBEgB0EDdGohBiALIAogB0F/c2ogFGxBA3RqIQhBACEEQQAhBSATRQRAA0AgBiAEIAlsQQN0aiAIIARBA3RqKQMANwMAIAYgBEEBciIOIAlsQQN0aiAIIA5BA3RqKQMANwMAIAYgBEECciIOIAlsQQN0aiAIIA5BA3RqKQMANwMAIAYgBEEDciIOIAlsQQN0aiAIIA5BA3RqKQMANwMAIARBBGohBCAFQQRqIgUgEkcNAAsLQQAhBSAPBEADQCAGIAQgCWxBA3RqIAggBEEDdGopAwA3AwAgBEEBaiEEIAVBAWoiBSAPRw0ACwsgB0EBaiIHIApHDQALCwwBCyAFQYABSw0AIAQoAjRBBHYhBiAMKAI0QQR2IQggBCgCLCEUIAwoAiwhESAMKAIgIQkgDCgCHCEFAkAgAkGOAkcEQCACQbQBRwRAIAJB2gBHDQIgCUUNAiAFRQ0CIBEgBUEEdGohDyAFQX5xIRIgBUEBcSETQQAhBwNAIBQgB0EEdGohESAPIAcgCGxBBHRqIQtBACEEQQAhCiAFQQFHBEADQCARIAQgBmxBBHRqIg4gCyAEQX9zQQR0aiIVKQMANwMAIA4gFSkDCDcDCCARIARBAXIgBmxBBHRqIg4gCyAEQf7///8Ac0EEdGoiFSkDCDcDCCAOIBUpAwA3AwAgBEECaiEEIApBAmoiCiASRw0ACwsgEwRAIBEgBCAGbEEEdGoiCiALIARBf3NBBHRqIgQpAwA3AwAgCiAEKQMINwMICyAHQQFqIgcgCUcNAAsMAgsgCUUNASAFRQ0BIBEgBUEEdGohEiAFQX5xIRMgBUEBcSEOQQAhBwNAIBQgBiAHbEEEdGohDyASIAkgB0F/c2ogCGxBBHRqIRFBACEEQQAhCiAFQQFHBEADQCAPIARBBHRqIgsgESAEQX9zQQR0aiIVKQMANwMAIAsgFSkDCDcDCCALIBEgBEH+////AHNBBHRqIhUpAwA3AxAgCyAVKQMINwMYIARBAmohBCAKQQJqIgogE0cNAAsLIA4EQCAPIARBBHRqIgogESAEQX9zQQR0aiIEKQMANwMAIAogBCkDCDcDCAsgB0EBaiIHIAlHDQALDAELIAlFDQAgBUUNACAFQX5xIRIgBUEBcSETQQAhBwNAIBQgB0EEdGohCyARIAkgB0F/c2ogCGxBBHRqIQ9BACEEQQAhCiAFQQFHBEADQCALIAQgBmxBBHRqIg4gDyAEQQR0aiIVKQMANwMAIA4gFSkDCDcDCCALIARBAXIiDiAGbEEEdGoiFSAPIA5BBHRqIg4pAwg3AwggFSAOKQMANwMAIARBAmohBCAKQQJqIgogEkcNAAsLIBMEQCALIAQgBmxBBHRqIgogDyAEQQR0aiIEKQMANwMAIAogBCkDCDcDCAsgB0EBaiIHIAlHDQALCwsgECwAI0EASARAIBAoAiAaIBAoAhgQKgsgHA0CAkAgDCIEKAIEIgUEQANAIAUiDCgCACIFDQAMAgsACwNAIAQoAggiDCgCACAERyEdIAwhBCAdDQALCyAMIBlHDQALCyABKAIsIQIgASgCMCIDBEAgAyADKAIEQQFqNgIECyANIAI2AjggDSgCPCECIA0gAzYCPAJAIAJFDQAgAiACKAIEIgNBAWs2AgQgAw0AIAIgAigCACgCCBEAACACECsLIAEoAjQhAyABKAI4IgIEQCACIAIoAgRBAWo2AgQLIA0gAzYCQCANKAJEIQEgDSACNgJEAkAgAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsgACANNgIEIAAgGDYCACANIA0oAgRBAWo2AgQgAEGQpQUpAgA3AgggAEEQaiEAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAELIABBmKUFKAIAQZylBSgCABAuCyANIA0oAgQiAEEBazYCBCAADQAgDSANKAIAKAIIEQAAIA0QKwsgEEFAayQAC1IBAX8gACgCBCICIAAoAghJBEAgAiABKAIANgIAIAIgASgCBCIBNgIEIAEEQCABIAEoAgRBAWo2AgQLIAAgAkEIajYCBA8LIAAgACABEGE2AgQLzAMBBX8jAEEwayIFJAAgAEEANgIAIABCADcCBCAAQQA2AhQgAEIANwIMIAVBKGogAUGg0smrBxC4ASAFKAIoIggiBkEBOgCkASAGIAYoAmRBfnFBAXI2AmQgAhBYIgZB+P///wdJBEACQAJAIAZBC08EQCAGQQdyQQFqIgkQLCEHIAUgCUGAgICAeHI2AiQgBSAHNgIcIAUgBjYCIAwBCyAFIAY6ACcgBUEcaiEHIAZFDQELIAcgAiAGEDIaCyAGIAdqQQA6AAACQCAIQZgBaiICIAVBHGpGDQAgBSwAJyEGIAgsAKMBQQBOBEAgBkEATgRAIAIgBSkCHDcCACACIAUoAiQ2AggMAgsgAiAFKAIcIAUoAiAQlwEMAQsgAiAFKAIcIAVBHGogBkEASCICGyAFKAIgIAYgAhsQnQELIAUsACdBAEgEQCAFKAIkGiAFKAIcECoLIAAgBSgCKCgCaDYCACAFQQhqIAEgBUEoaiADIARBABCRAyAFLAAbQQBIBEAgBSgCGBogBSgCEBAqCwJAIAUoAiwiAEUNACAAIAAoAgQiAUEBazYCBCABDQAgACAAKAIAKAIIEQAAIAAQKwsgBUEwaiQADwsQOAALzAMBBX8jAEEwayIGJAAgAEEANgIAIABCADcCBCAAQQA2AhQgAEIANwIMIAZBKGogAUHl2qXrBhC4ASAGKAIoIgkiB0EBOgCkASAHIAcoAmRBfnFBAXI2AmQgAhBYIgdB+P///wdJBEACQAJAIAdBC08EQCAHQQdyQQFqIgoQLCEIIAYgCkGAgICAeHI2AiQgBiAINgIcIAYgBzYCIAwBCyAGIAc6ACcgBkEcaiEIIAdFDQELIAggAiAHEDIaCyAHIAhqQQA6AAACQCAJQYABaiICIAZBHGpGDQAgBiwAJyEHIAksAIsBQQBOBEAgB0EATgRAIAIgBikCHDcCACACIAYoAiQ2AggMAgsgAiAGKAIcIAYoAiAQlwEMAQsgAiAGKAIcIAZBHGogB0EASCICGyAGKAIgIAcgAhsQnQELIAYsACdBAEgEQCAGKAIkGiAGKAIcECoLIAAgBigCKCgCaDYCACAGQQhqIAEgBkEoaiAEIAUgAxCRAyAGLAAbQQBIBEAgBigCGBogBigCEBAqCwJAIAYoAiwiAEUNACAAIAAoAgQiAUEBazYCBCABDQAgACAAKAIAKAIIEQAAIAAQKwsgBkEwaiQADwsQOAAL/gUBCn8jAEEgayIEJABBtAEhBUEBIQYCQAJAAkACfwJAAkACQAJAAkAgAkECaw4HBwYAAQIDBAgLQQAhBgwGC0GOAiEFQQEhBwwEC0GOAgwCC0GOAiEFQQAhBkEBIQcMAgtB2gALIQULQfgAECwiAkIANwIEIAJB8NYENgIAIAJBEGoiA0IANwMIIANCADcDECADQgA3AxggA0EANgIgIANB1L0ENgIAIAJCADcCPCACQgA3AjQgAkJ/NwNIIAJCfzcDUCACQgA3A1ggAkIANwNgIAJCADcDaCACQQA6AHAgA0HsxwQ2AgAgAiAFNgJ0IAJB9N7JywY2AiAgACgCNCEJIAQgAjYCHCAEIAM2AhggAiACKAIEQQFqNgIEIAkgBEEYahDeASEFAkAgBCgCHCIDRQ0AIAMgAygCBCIIQQFrNgIEIAgNACADIAMoAgAoAggRAAAgAxArCyAAKAI8IQogBEEBOgAUIAQgBUEBajsBFiAEIAQoARQ2AgwgCiABIARBDGoQ8wEgAiACKAIEIgNBAWs2AgQgA0UEQCACIAIoAgAoAggRAAAgAhArCyAHRQ0BC0H4ABAsIgJCADcCBCACQZjXBDYCACACQRBqIgNCADcDCCADQgA3AxAgA0IANwMYIANBADYCICADQdS9BDYCACACQgA3AjwgAkIANwI0IAJCfzcDSCACQn83A1AgAkIANwNYIAJCADcDYCACQgA3A2ggAkEAOgBwIANBtMgENgIAIAIgBjYCdCACQfLStcsGNgIgIAAoAjQhCyAEIAI2AhwgBCADNgIYIAIgAigCBEEBajYCBCALIARBGGoQ3gEhBQJAIAQoAhwiA0UNACADIAMoAgQiBkEBazYCBCAGDQAgAyADKAIAKAIIEQAAIAMQKwsgACgCPCEMIARBAToAECAEIAVBAWo7ARIgBCAEKAEQNgIIIAwgASAEQQhqEPMBIAIgAigCBCIAQQFrNgIEIAANACACIAIoAgAoAggRAAAgAhArCyAEQSBqJAAL8AgCBX8BfiMAQeAAayIFJAAgBUIANwJIIAVBADYCWCAFQgA3AlACQAJAAkAgASgCgAEiBkUNACABQYABaiIJIQcDQCAHIAYgBigCECACSSIIGyEHIAYgCEECdGooAgAiBg0AC0EAIQggByAJRg0AIAcoAhAgAksNACAHKAIUIQYgBygCGCIIBEAgCCAIKAIEQQFqNgIECyAGDQELIAVBADoACCAFQQA6ABMgAEEFQdAPIAVBCGoQLxogBSwAE0EATg0BIAUoAhAaIAUoAggQKgwBCyAGKAJwIQcCQCAGLACLAUEATgRAIAVBQGsgBigCiAE2AgAgBSAGKQKAATcDOAwBCyAFQThqIAYoAoABIAYoAoQBEC4LAkAgB0Hl2qXrBkcEQCAEBEAgBEEANgIACyAAIAEoAkQgAiABQQhqIAFBzABqIANCAEJ/IAEoAogBEKYCDAELAkAgBiwAlwFBAE4EQCAFIAYoApQBNgIwIAUgBikCjAE3AygMAQsgBUEoaiAGKAKMASAGKAKQARAuC0ECIQcCQAJAAkACQAJAAkAgBSgCLCAFLAAzIgYgBkEASCIGGyIJDg4ABAMEBAQEAgQEBAQEAQQLIAQEQCAEQQA2AgALIAAgASgCRCACIAFBCGogAUHMAGogA0IAQn8gASgCiAEQpgIMBAtBAkEEIAUoAiggBUEoaiAGG0H89QBBDRBfGyEHDAILQQJBAyAFKAIoIAVBKGogBhtB1M4AIAkQXxshBwwBC0ECQQUgBSgCKCAFQShqIAYbQeAxIAkQXxshBwsgBUEANgIkIAVCADcCHCAFQQhqIAEoAkQgAiABQQhqIAFBzABqIAVBHGpCAEJ/IAEoAogBEKYCIAUgBSkDCCIKNwNIIAUsAFtBAE4EfyAKpwUgBSgCWBogBSgCUBAqIAUoAkgLIQEgBSAFKQMQNwNQIAUgBSgCGDYCWAJAIAEEQCAAIAUpA0g3AgAgACAFKAJYNgIQIAAgBSkCUDcCCCAFQgA3A1AgBUEANgJYDAELIAQEQCAEIAc2AgAgAygCACIBBEAgAyABNgIEIAMoAggaIAEQKgsgAyAFKAIcNgIAIAMgBSgCIDYCBCADIAUoAiQ2AgggBUIANwIcIAVBADYCJCAAQZClBSkCADcCACAAQQhqIQBBo6UFLAAAQQBOBEAgAEGYpQUpAgA3AgAgAEGgpQUoAgA2AggMAgsgAEGYpQUoAgBBnKUFKAIAEC4MAQsgBUEAOgAIIAVBADoAEyAAQQNBvRcgBUEIahAvGiAFLAATQQBODQAgBSgCEBogBSgCCBAqCyAFKAIcIgBFDQAgBSAANgIgIAUoAiQaIAAQKgsgBSwAM0EATg0AIAUoAjAaIAUoAigQKgsgBSwAQ0EATg0AIAUoAkAaIAUoAjgQKgsCQCAIRQ0AIAggCCgCBCIAQQFrNgIEIAANACAIIAgoAgAoAggRAAAgCBArCyAFLABbQQBIBEAgBSgCWBogBSgCUBAqCyAFQeAAaiQAC5kUAgl/An0jAEEQayIJJAAgCSACNgIMAkACQCAEKAIEIgZFDQAgBCgCAAJ/IAZBAWsgAnEgBmkiCEEBTQ0AGiACIAIgBkkNABogAiAGcAsiB0ECdGooAgAiBUUNACAFKAIAIgVFDQACQCAIQQFNBEAgBkEBayEGA0ACQCACIAUoAgQiCEcEQCAGIAhxIAdGDQEMBQsgBSgCCCACRg0DCyAFKAIAIgUNAAsMAgsDQAJAIAIgBSgCBCIIRwRAIAYgCE0EfyAIIAZwBSAICyAHRg0BDAQLIAUoAgggAkYNAgsgBSgCACIFDQALDAELIAlBGBAsIgE2AgAgCUKVgICAgIOAgIB/NwIEIAFBttYAKQAANwAAIAFBADoAFSABQcPWACkAADcADSABQb7WACkAADcACCAAQQJB2A8gCRAvGiAJLAALQQBODQEgCSgCCBogCSgCABAqDAELQQAhAiAJKAIMIQggCQJ/AkAgBCgCBCIGRQ0AIAQoAgACfyAGQQFrIAhxIAZpIgVBAU0NABogCCAGIAhLDQAaIAggBnALIgJBAnRqKAIAIgdFDQAgBygCACIKRQ0AIAVBAU0EQCAGQQFrIQUDQAJAIAggCigCBCIHRwRAIAUgB3EgAkcNBAwBCyAKKAIIIAhHDQBBAAwECyAKKAIAIgoNAAsMAQsDQAJAIAggCigCBCIFRwRAIAUgBk8EfyAFIAZwBSAFCyACRw0DDAELIAooAgggCEcNAEEADAMLIAooAgAiCg0ACwtBDBAsIgogCDYCBCAKQQA2AgAgCiAJKAIMNgIIIAQqAhAhDiAEKAIMQQFqsyEPAkAgBgRAIA4gBrOUIA9dRQ0BC0ECIQICQCAGIAZBAWtxQQBHIAZBA0lyIAZBAXRyIgUCfyAPIA6VjSIOQwAAgE9dIA5DAAAAAGBxBEAgDqkMAQtBAAsiByAFIAdLGyIFQQFGDQAgBSAFQQFrcUUEQCAFIQIMAQsgBRDaBSECIAQoAgQhBgsCQCACIAZNBEAgAiAGTw0BIAZBA0khBwJ/IAQoAgyzIAQqAhCVjSIOQwAAgE9dIA5DAAAAAGBxBEAgDqkMAQtBAAshBSACAn8CQCAHDQAgBmlBAUsNACAFQQFBICAFQQFrZ2t0IAVBAkkbDAELIAUQ2gULIgUgAiAFSxsiAiAGTw0BC0EAIQYCQAJAAkACQCACIgcEQCACQYCAgIAETw0BIAJBAnQQLCEFIAQoAgAhAiAEIAU2AgAgAgRAIAQoAgQaIAIQKgsgBCAHNgIEQQAhBSAHQQRPBEAgB0H8////A3EhDANAIAVBAnQiAiAEKAIAakEANgIAIAQoAgAgAmpBADYCBCAEKAIAIAJqQQA2AgggBCgCACACakEANgIMIAVBBGohBSALQQRqIgsgDEcNAAsLIAdBA3EiAgRAA0AgBCgCACAFQQJ0akEANgIAIAVBAWohBSAGQQFqIgYgAkcNAAsLIAQoAggiAkUNBCAEQQhqIQUgAigCBCEGIAdpIgtBAkkNAiAGIAdPBEAgBiAHcCEGCyAEKAIAIAZBAnRqIAU2AgAgAigCACIFRQ0EIAtBAU0NAwNAIAcgBSgCBCILTQRAIAsgB3AhCwsCQCAGIAtGBEAgBSECDAELIAtBAnQiDCAEKAIAaiINKAIARQRAIA0gAjYCACAFIQIgCyEGDAELIAIgBSgCADYCACAFIAQoAgAgDGooAgAoAgA2AgAgBCgCACAMaigCACAFNgIACyACKAIAIgUNAAsMBAsgBCgCACECIARBADYCACACBEAgBCgCBBogAhAqCyAEQQA2AgQMAwsQTwALIAQoAgAgBiAHQQFrcSIGQQJ0aiAFNgIAIAIoAgAiBUUNAQsgB0EBayEMA0ACQCAGIAUoAgQgDHEiB0YEQCAFIQIMAQsgB0ECdCILIAQoAgBqIg0oAgAEQCACIAUoAgA2AgAgBSAEKAIAIAtqKAIAKAIANgIAIAQoAgAgC2ooAgAgBTYCAAwBCyANIAI2AgAgBSECIAchBgsgAigCACIFDQALCwsgBCgCBCIGIAZBAWsiAnFFBEAgAiAIcSECDAELIAYgCEsEQCAIIQIMAQsgCCAGcCECCwJAAkAgBCgCACACQQJ0aiIFKAIAIgJFBEAgCiAEQQhqIgIoAgA2AgAgBCAKNgIIIAUgAjYCACAKKAIAIgJFDQIgAigCBCECAkAgBiAGQQFrIgVxRQRAIAIgBXEhAgwBCyACIAZJDQAgAiAGcCECCyAEKAIAIAJBAnRqIQIMAQsgCiACKAIANgIACyACIAo2AgALIAQgBCgCDEEBajYCDEEBCzoABCAJIAo2AgAgCSADKAIAIAkoAgxB59qlowYQugECQCAJKAIAIgUgCSgCBCICRwRAA0AgACABIAUoAgAgAyAEELsEIAAoAgANAiAALAATQQBIBEAgACgCEBogACgCCBAqCyAFQQRqIgUgAkcNAAsLIwBBEGsiCCQAAkAgBCgCBCICRQ0AIAQoAgACfyAJKAIMIgMgAkEBa3EgAmkiBUEBTQ0AGiADIAIgA0sNABogAyACcAsiBkECdGooAgAiAUUNACABKAIAIgFFDQACQCAFQQFNBEAgAkEBayECA0ACQCADIAEoAgQiBUcEQCACIAVxIAZGDQEMBQsgASgCCCADRg0DCyABKAIAIgENAAsMAgsDQAJAIAMgASgCBCIFRwRAIAIgBU0EfyAFIAJwBSAFCyAGRg0BDAQLIAEoAgggA0YNAgsgASgCACIBDQALDAELIAEoAgQhBQJAIAQoAgQiBmkiB0EBTQRAIAZBAWsgBXEhBQwBCyAFIAZJDQAgBSAGcCEFCyAEKAIAIAVBAnRqIgsoAgAhAwNAIAMiAigCACIDIAFHDQALAkAgBEEIaiIKIAJHBEAgAigCBCEDAkAgB0EBTQRAIAMgBkEBa3EhAwwBCyADIAZJDQAgAyAGcCEDCyADIAVGDQELIAEoAgAiAwRAIAMoAgQhAwJAIAdBAU0EQCADIAZBAWtxIQMMAQsgAyAGSQ0AIAMgBnAhAwsgAyAFRg0BCyALQQA2AgALIAICf0EAIAEoAgAiC0UNABogCygCBCEDAkAgB0EBTQRAIAMgBkEBa3EhAwwBCyADIAZJDQAgAyAGcCEDCyALIAMgBUYNABogBCgCACADQQJ0aiACNgIAIAEoAgALNgIAIAFBADYCACAEIAQoAgxBAWs2AgwgCEEBOgAMIAggCjYCCCAIIAE2AgQgCCgCBCEBIAhBADYCBCABBEAgARAqCwsgCEEQaiQAIABBkKUFKQIANwIAIABBCGohAEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLgsgCSgCACIARQ0AIAkgADYCBCAJKAIIGiAAECoLIAlBEGokAAt4AQR/IAAoAgAiAgRAIAAoAgQiAyACIgFHBEADQAJAIANBBGsoAgAiAUUNACABIAEoAgQiBEEBazYCBCAEDQAgASABKAIAKAIIEQAAIAEQKwsgA0EIayIDIAJHDQALIAAoAgAhAQsgACACNgIEIAAoAggaIAEQKgsLYwEBfyABKAIAIQIgASgCBCIBBEAgASABKAIEQQFqNgIECyAAIAI2AgAgACgCBCECIAAgATYCBAJAIAJFDQAgAiACKAIEIgBBAWs2AgQgAA0AIAIgAigCACgCCBEAACACECsLC9cBAQN/AkACfyABKAI8IgJBEHEEQCABKAI4IgMgASgCJCICSQRAIAEgAjYCOCACIQMLIAFBIGoMAQsgAkEIcUUEQEEAIQEgAEEAOgALDAILIAEoAhwhAyABQRRqCyECAkAgAyACKAIAIgRrIgFB+P///wdJBEAgAUELTwRAIAFBB3JBAWoiAxAsIQIgACADQYCAgIB4cjYCCCAAIAI2AgAgACABNgIEIAIhAAwCCyAAIAE6AAsgAQ0BQQAhAQwCCxA4AAsgACAEIAEQNxoLIAAgAWpBADoAAAvqAQECfyAAQaDTAzYCCCAAQbTTAzYCQCAAQcTTAygCACIBNgIAIAAgAUEMaygCAGpByNMDKAIANgIAIABBADYCBCAAIAAoAgBBDGsoAgBqIgEgAEEMaiICED4gAUKAgICAcDcCSCAAQczTAygCACIBNgIIIAFBDGsoAgAgAEEIampB0NMDKAIANgIAIABBwNMDKAIAIgE2AgAgACABQQxrKAIAakHU0wMoAgA2AgAgAEG00wM2AkAgAEGM0wM2AgAgAEGg0wM2AgggAhA/QfDLAzYCACAAQgA3AjQgAEIANwIsIABBGDYCPCAAC0cBAX8gACgCMCABIAIgAxC6AiEEAkAgAigCBCIARQ0AIAAgACgCBCICQQFrNgIEIAINACAAIAAoAgAoAggRAAAgABArCyAEC9ABAQV/IwBBEGsiBCQAIAEoAjAhCCADKAIAKAIkIQcgAigCACgCJCECIARBBBAsIgE2AgQgBCABQQRqIgY2AgwgASACNgIAIAQgBjYCCCAIIAdB4tqhowcgBEEEahCfASAEKAIEIgEEQCAEIAE2AgggBCgCDBogARAqCyAAQZClBSkCADcCACAAQQhqIQACQEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLgsgBEEQaiQAC7kTAQd/IwBB0ABrIgkkAAJAAkACQCABKAIUIg1FDQAgAUEUaiIKIQwgDSELA0AgDCALIAsoAhAgAkkiDhshDCALIA5BAnRqKAIAIgsNAAtBACELIAogDEYNACAMKAIQIAJLDQAgCiELA0AgCyANIA0oAhAgAkkiDBshCyANIAxBAnRqKAIAIg0NAAsCQCAKIAtHBEAgCygCECACTQ0BCyAKIQsLIAsoAhQhDCALKAIYIgsEQCALIAsoAgRBAWo2AgQLIAwNAQsgCUEAOgAMIAlBADoAFyAJQTBqQQJB0A8gCUEMahAvIQEgAEIANwIAIAAgASkDADcCCCAAQRBqIQACQCABLAATQQBOBEAgACABKQIINwIAIAAgASgCEDYCCAwBCyAAIAEoAgggASgCDBAuIAEsABNBAE4NACABKAIQGiABKAIIECoLIAksABdBAE4NASAJKAIUGiAJKAIMECoMAQsgCUEwaiAMIAUgBiAHIAgQpwICQCAJKAI4BEAgAEIANwIAIAAgCSkCODcCCCAAQRBqIQAgCSwAS0EATgRAIAAgCUFAayIBKQIANwIAIAAgASgCCDYCCAwCCyAAIAkoAkAgCSgCRBAuDAELIAkgCSgCMCICNgIoIAkgCSgCNCIGNgIsIAYEQCAGIAYoAgRBAWo2AgQLIANB4wBGBEAgAigCICEDCyACKAIgIgYhDyACKAIkIQ5BACEKAkACQAJAAkAgBg4DAQIAAwtB/wEhCiACKAJAIgZFDQIgAkFAayIHIQIDQCACIAYgBigCECIIQQBIGyECIAYgCEEddkEEcWooAgAiBg0ACyACIAdGDQIgAigCEEEASg0CIAItABghCgwCC0H/ASEKQf8BIQ1B/wEhCAJAIAIoAkAiBkUNACACQUBrIgchCCAGIQIDQCAIIAIgAigCECIKQQBIGyEIIAIgCkEddkEEcWooAgAiAg0ACwJAIAcgCEYNACAIKAIQQQBKDQAgCC0AGCENCyAHIQggBiECA0AgCCACIAIoAhBBAEwiChshCCACIApBAnRqKAIAIgINAAtB/wEhCgJAIAcgCEYNACAIKAIQQQFKDQAgCC0AGCEKCyAHIQIDQCACIAYgBigCEEECSCIIGyECIAYgCEECdGooAgAiBg0AC0H/ASEIIAIgB0YNACACKAIQQQJKDQAgAi0AGCEICyANIApB/wFxIgIgCEH/AXEiBiACIAZLGyICIAIgDUkbIQoMAQtB/wEhCkH/ASENQf8BIQgCQCACKAJAIgZFDQAgAkFAayIHIQggBiECA0AgCCACIAIoAhBBA0giChshCCACIApBAnRqKAIAIgINAAsCQCAHIAhGDQAgCCgCEEEDSg0AIAgtABghDQsgByEIIAYhAgNAIAggAiACKAIQQQRIIgobIQggAiAKQQJ0aigCACICDQALQf8BIQoCQCAHIAhGDQAgCCgCEEEESg0AIAgtABghCgsgByECA0AgAiAGIAYoAhBBBUgiCBshAiAGIAhBAnRqKAIAIgYNAAtB/wEhCCACIAdGDQAgAigCEEEFSg0AIAItABghCAsgDSAKQf8BcSICIAhB/wFxIgYgAiAGSxsiAiACIA1JGyEKCyAFLQAUQQBHIApB/wFxQQhLcSECAkACQAJAIA4gDiAEIARB4wBGGyIERw0AIAMgD0cNACACRQ0BCyAJQgA3AgQgCUEMaiAJQShqIAMgBCAJQQRqQQhBACACGyAFQRxqIAFBQGsQ+QECQCAJKAIIIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLAkAgCSgCFCIDBEAgAEIANwIAIAAgCSkCFDcCCCAAQRBqIQEgCSwAJ0EATgRAIAEgCSkCHDcCACABIAkoAiQ2AggMAgsgASAJKAIcIAkoAiAQLgwBCyAJKAIMIQEgCSgCECICBEAgAiACKAIEQQFqNgIECyAJIAE2AiggCSgCLCEBIAkgAjYCLCABRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCyAJLAAnQQBIBEAgCSgCJBogCSgCHBAqCwJAIAkoAhAiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsgAw0BCyAJKAIoIQUgACAMKALoAiIBIAwoAuwCIgpHBH8gBSgCdCEMA0AgBQJ/IAUoAnggDEsEQCAMIAEpAgA3AgAgDEEIaiECIAEsABNBAE4EQCACIAEpAgg3AgAgAiABKAIQNgIIIAxBFGoMAgsgAiABKAIIIAEoAgwQLiAMQRRqDAELAn9BACEDAkAgBSgCdCIGIAUoAnAiB2tBFG0iCEEBaiICQc2Zs+YASQRAQcyZs+YAIAUoAnggB2tBFG0iBEEBdCINIAIgAiANSRsgBEHmzJkzTxsiBARAIARBzZmz5gBPDQIgBEEUbBAsIQMLIAMgCEEUbGoiAiABKQIANwIAIARBFGwhCCACQQhqIQQCQCABLAATQQBOBEAgBCABKQIINwIAIAQgASgCEDYCCAwBCyAEIAEoAgggASgCDBAuIAUoAnAhByAFKAJ0IQYLIAMgCGohDSACQRRqIQgCQCAGIAdGBEAgAiEDDAELA0AgAkEUayIDIAZBFGsiBCkCADcCACACQQxrIgwgBkEMayICKAIINgIIIAwgAikCADcCACACQgA3AgAgAkEANgIIIAMhAiAEIgYgB0cNAAsgBSgCdCEGIAUoAnAhBwsgBSAINgJ0IAUgAzYCcCAFKAJ4GiAFIA02AnggBiAHRwRAA0AgBkEBaywAAEEASARAIAZBBGsoAgAaIAZBDGsoAgAQKgsgBkEUayIGIAdHDQALCyAHBEAgBxAqCyAIDAILEDYACxBPAAsLIgw2AnQgAUEUaiIBIApHDQALIAkoAigFIAULNgIAIAAgCSgCLCIBNgIEIAEEQCABIAEoAgRBAWo2AgQLIABBkKUFKQIANwIIIABBEGohAEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLgsgCSgCLCIARQ0AIAAgACgCBCIBQQFrNgIEIAENACAAIAAoAgAoAggRAAAgABArCyAJLABLQQBIBEAgCSgCSBogCSgCQBAqCyAJKAI0IgBFDQAgACAAKAIEIgFBAWs2AgQgAQ0AIAAgACgCACgCCBEAACAAECsLAkAgC0UNACALIAsoAgQiAEEBazYCBCAADQAgCyALKAIAKAIIEQAAIAsQKwsgCUHQAGokAAtmAQN/IABBADYCCCAAQgA3AgACQCABKAIEIgIEQCACQYCAgIAETw0BIAAgAkECdCIDECwiAjYCBCAAIAI2AgAgACACIANqIgQ2AgggAiABKAIAIAMQNxogACAENgIECyAADwsQNgALbQEEfyMAQRBrIgMkACAAKAIwIQYgA0EEECwiADYCBCADIABBBGoiBTYCDCAAIAI2AgAgAyAFNgIIIAYgAUHr5oXrBiADQQRqEJ8BIAMoAgQiAARAIAMgADYCCCADKAIMGiAAECoLIANBEGokAAtcAQN/IABBFGohAwJAAkAgACgCFCIARQ0AIAMhAgNAIAIgACAAKAIQIAFJIgQbIQIgACAEQQJ0aigCACIADQALIAIgA0YNACACKAIQIAFNDQELIAMhAgsgAiADRws8AQF/IwBBIGsiAiQAIAAgASgCKDYCACAAIAEoAiwiADYCBCAABEAgACAAKAIEQQFqNgIECyACQSBqJAAL/QEBBn8gACgC2AEiAiAAKALcASIDSQRAIAIgATYCACAAIAJBBGo2AtgBDwsCQCACIAAoAtQBIgVrQQJ1IgdBAWoiBEGAgICABEkEQEH/////AyADIAVrIgNBAXUiBiAEIAQgBkkbIANB/P///wdPGyIDBH8gA0GAgICABE8NAiADQQJ0ECwFQQALIgYgB0ECdGoiBCABNgIAIARBBGohASACIAVHBEADQCAEQQRrIgQgAkEEayICKAIANgIAIAIgBUcNAAsLIAAgBiADQQJ0ajYC3AEgACABNgLYASAAIAQ2AtQBIAUEQCAFECoLIAAgATYC2AEPCxA2AAsQTwALswIBBH8gACgCOCIBIAAoAjQiA0cEQANAAkAgAUEEaygCACICRQ0AIAIgAigCBCIEQQFrNgIEIAQNACACIAIoAgAoAggRAAAgAhArCyABQQhrIgEgA0cNAAsLIAAgAzYCOCAAKAJIIQEgAEIANwJEAkAgAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsgACgCVCEBIABCADcDUAJAIAFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLIAAoAqwBIgEgACgCqAEiA0cEQANAAkAgAUEEaygCACICRQ0AIAIgAigCBCIEQQFrNgIEIAQNACACIAIoAgAoAggRAAAgAhArCyABQQhrIgEgA0cNAAsLIAAgAzYCrAEL/B8BB39BmAEQLCIEQgA3AgQgBEH84wQ2AgAgACAEQQxqEL0CNgIwIAAoAjQhAyAAIAQ2AjQCQCADRQ0AIAMgAygCBCIEQQFrNgIEIAQNACADIAMoAgAoAggRAAAgAxArCyAAKAIwIgMgAEFAazYCiAEjAEEQayIEJAAgAygCFCIBIAMoAhAiBUcEQANAAkAgAUEEaygCACICRQ0AIAIgAigCBCIGQQFrNgIEIAYNACACIAIoAgAoAggRAAAgAhArCyABQQhrIgEgBUcNAAsLIAMgBTYCFEGIARAsIgFBkNMENgIAIAFCADcCBCABQRBqIgJCADcDCCACQgA3AxAgAkIANwMYIAJBADYCICACQdS9BDYCACABQgA3AjwgAUIANwI0IAFCfzcDSCABQn83A1AgAUIANwNYIAFCADcDYCABQgA3A2ggAUEAOgBwIAJBmMEENgIAIAFBADYChAEgAUIANwJ8IAFCADcCdCABQfDy0bMGNgIgIAMgAjYCHCADKAIgIQIgAyABNgIgAkAgAkUNACACIAIoAgQiAUEBazYCBCABDQAgAiACKAIAKAIIEQAAIAIQKwtBmAEQLCIBQgA3AgQgAUHg0wQ2AgAgAUEQaiICQgA3AwggAkIANwMQIAJCADcDGCACQQA2AiAgAkHUvQQ2AgAgAUIANwI8IAFCADcCNCABQn83A0ggAUJ/NwNQIAFBADYCdCABQgA3A1ggAUIANwNgIAFCADcDaCABQQA7AXAgAkHwwgQ2AgAgAUIANwOAASABQoCAgIDA7ti08AA3A3ggAUIANwOIASABQgA3A5ABIAFB8tiRwwY2AiAgAyACNgIkIAMoAighAiADIAE2AigCQCACRQ0AIAIgAigCBCIBQQFrNgIEIAENACACIAIoAgAoAggRAAAgAhArC0H4ABAsIgFCADcCBCABQejSBDYCACABQRBqIgJCADcDCCACQgA3AxAgAkIANwMYIAJBADYCICACQdS9BDYCACABQgA3AjwgAUIANwI0IAFCfzcDSCABQn83A1AgAUEANgJ0IAFCADcDWCABQgA3A2AgAUIANwNoIAFBADsBcCACQajCBDYCACABQeHolesGNgIgIAMgAjYCLCADKAIwIQIgAyABNgIwAkAgAkUNACACIAIoAgQiAUEBazYCBCABDQAgAiACKAIAKAIIEQAAIAIQKwtB+AAQLCIBQgA3AgQgAUHQ1QQ2AgAgAUEQaiICQgA3AwggAkIANwMQIAJCADcDGCACQQA2AiAgAkHUvQQ2AgAgAUIANwI8IAFCADcCNCABQn83A0ggAUJ/NwNQIAFCADcDWCABQgA3A2AgAUIANwNoIAFBADoAcCACQdjFBDYCACABQe/GwcsGNgIgIAMgAjYCNCADKAI4IQIgAyABNgI4AkAgAkUNACACIAIoAgQiAUEBazYCBCABDQAgAiACKAIAKAIIEQAAIAIQKwtBiAEQLCIBQgA3AgQgAUH41QQ2AgAgAUEQaiICQgA3AwggAkIANwMQIAJCADcDGCACQQA2AiAgAkHUvQQ2AgAgAUIANwI8IAFCADcCNCABQn83A0ggAUJ/NwNQIAFBADYCdCABQgA3A1ggAUIANwNgIAFCADcDaCABQQA7AXAgAkHcxgQ2AgAgAUEANgKAASABQgA3AnggAUHh2sHLBjYCICADIAI2AjwgAygCQCECIAMgATYCQAJAIAJFDQAgAiACKAIEIgFBAWs2AgQgAQ0AIAIgAigCACgCCBEAACACECsLQbABECwiAkIANwIEIAJBsNQENgIAIAJBEGoiAUIANwMIIAFCfzcDOCABQgA3A0ggAUEANgJkIAFBADYCiAEgAUEANgKAASABQgA3A2ggAUEANgIwIAFCADcDKCABQgA3AyAgAUIANwMYIAFCADcDECABQUBrQn83AwAgAUIANwNQIAFCADcDWCABQQA7AWAgAUIANwNwIAFCADcAdSABQey9BDYCACABQQA6AIQBIAFB496xywY2AhAgAyABNgJEIAMoAkghASADIAI2AkgCQCABRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArC0H4ABAsIgFCADcCBCABQdjUBDYCACABQRBqIgJCADcDCCACQgA3AxAgAkIANwMYIAJBADYCICACQdS9BDYCACABQgA3AjwgAUIANwI0IAFCfzcDSCABQn83A1AgAUEANgJ0IAFCADcDWCABQgA3A2AgAUIANwNoIAFBADsBcCACQcjEBDYCACABQebcpcsGNgIgIAMgAjYCZCADKAJoIQIgAyABNgJoAkAgAkUNACACIAIoAgQiAUEBazYCBCABDQAgAiACKAIAKAIIEQAAIAIQKwtB+AAQLCIBQgA3AgQgAUGo1QQ2AgAgAUEQaiICQgA3AwggAkIANwMQIAJCADcDGCACQQA2AiAgAkHUvQQ2AgAgAUIANwI8IAFCADcCNCABQn83A0ggAUJ/NwNQIAFCADcDWCABQgA3A2AgAUIANwNoIAFBADoAcCACQZDFBDYCACABQfDkwcsGNgIgIAMgAjYCdCADKAJ4IQIgAyABNgJ4AkAgAkUNACACIAIoAgQiAUEBazYCBCABDQAgAiACKAIAKAIIEQAAIAIQKwtBgAEQLCIBQgA3AgQgAUGI1AQ2AgAgAUEQaiICQgA3AwggAkIANwMQIAJCADcDGCACQQA2AiAgAkHUvQQ2AgAgAUIANwI8IAFCADcCNCABQn83A0ggAUJ/NwNQIAFBADYCdCABQgA3A1ggAUIANwNgIAFCADcDaCABQQA7AXAgAkG4wwQ2AgAgAUHt6KWDBzYCICABQQA2AnggAyACNgJcIAMoAmAhAiADIAE2AmACQCACRQ0AIAIgAigCBCIBQQFrNgIEIAENACACIAIoAgAoAggRAAAgAhArCyADKAIsIQEgBCADKAIkIgU2AgggBCADKAIoIgI2AgwgAgRAIAIgAigCBEEBajYCBAsgAQJ/IAEoAigiAiABKAIsSQRAIAIgBTYCACACIAQoAgwiATYCBCABBEAgASABKAIEQQFqNgIECyACQQhqDAELIAFBJGogBEEIahBhCzYCKAJAIAQoAgwiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsgAygCLCEBIAQgAygCXCIFNgIIIAQgAygCYCICNgIMIAIEQCACIAIoAgRBAWo2AgQLIAECfyABKAIoIgIgASgCLEkEQCACIAU2AgAgAiAEKAIMIgE2AgQgAQRAIAEgASgCBEEBajYCBAsgAkEIagwBCyABQSRqIARBCGoQYQs2AigCQCAEKAIMIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLIAMoAiwhASAEIAMoAkQiBTYCCCAEIAMoAkgiAjYCDCACBEAgAiACKAIEQQFqNgIECyABAn8gASgCKCICIAEoAixJBEAgAiAFNgIAIAIgBCgCDCIBNgIEIAEEQCABIAEoAgRBAWo2AgQLIAJBCGoMAQsgAUEkaiAEQQhqEGELNgIoAkAgBCgCDCIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCyADKAIsIQEgBCADKAJkIgU2AgggBCADKAJoIgI2AgwgAgRAIAIgAigCBEEBajYCBAsgAQJ/IAEoAigiAiABKAIsSQRAIAIgBTYCACACIAQoAgwiATYCBCABBEAgASABKAIEQQFqNgIECyACQQhqDAELIAFBJGogBEEIahBhCzYCKAJAIAQoAgwiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsgAygCLCEBIAQgAygCdCIFNgIIIAQgAygCeCICNgIMIAIEQCACIAIoAgRBAWo2AgQLIAECfyABKAIoIgIgASgCLEkEQCACIAU2AgAgAiAEKAIMIgE2AgQgAQRAIAEgASgCBEEBajYCBAsgAkEIagwBCyABQSRqIARBCGoQYQs2AigCQCAEKAIMIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLIAMoAnQhBiAEIAMoAjQiBzYCCCAEIAMoAjgiATYCDAJAAkACQCABRQRAIAZBKGohBSAGKAIoIgIgBigCLE8NAiACIAE2AgQgAiAHNgIADAELIAEgASgCBEEBajYCBCAGQShqIQUgBigCKCICIAYoAixPDQEgAiABNgIEIAIgBzYCACABIAEoAgRBAWo2AgQLIAJBCGohAgwBCyAGQSRqIARBCGoQYSECIAQoAgwhAQsgBSACNgIAAkAgAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsgAygCdCEGIAQgAygCPCIHNgIIIAQgAygCQCIBNgIMAkACQAJAIAFFBEAgBkEoaiEFIAYoAigiAiAGKAIsTw0CIAIgATYCBCACIAc2AgAMAQsgASABKAIEQQFqNgIEIAZBKGohBSAGKAIoIgIgBigCLE8NASACIAE2AgQgAiAHNgIAIAEgASgCBEEBajYCBAsgAkEIaiECDAELIAZBJGogBEEIahBhIQIgBCgCDCEBCyAFIAI2AgACQCABRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCyADQfwAaiADKAKAARC8AiADIANBgAFqNgJ8IANCADcCgAEgBCADKAIcIgY2AgggBCADKAIgIgE2AgwgAQRAIAEgASgCBEEBajYCBAsgA0EQaiEFAkAgAygCFCICIAMoAhhJBEAgAiABNgIEIAIgBjYCACADIAJBCGo2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AyACEN4ENgIIIAAgAygCDDYCACAAIAMoAgg2AgQgA0EQaiQACwcAIAAQ1gELTwEBfyMAQRBrIgMkACADIAE2AgggAyAANgIMIAMgAjYCBEEAIQEgA0EEaiIAKAIAIAMoAgxPBEAgACgCACADKAIISSEBCyADQRBqJAAgAQtKAQF/IwBBEGsiAyQAAn8gAC0AC0EHdgRAIAAoAgQMAQsgAC0ACwsaIAAgAhDYASADQQA6AA8gASACaiADLQAPOgAAIANBEGokAAsbACAAQf////8DSwRAEGwACyAAQQJ0QQQQugULzgYBBH8jAEGgAWsiAyQAIANB5NUDNgJEIANB8NUDKAIAIgY2AgwgA0EMaiIEIAZBDGsoAgBqQfTVAygCADYCACAEIAMoAgxBDGsoAgBqIgYgA0EQaiIFED4gBkKAgICAcDcCSCADQeTVAzYCRCADQdDVAzYCDCAFED8iBkHwywM2AgAgA0IANwI4IANCADcCMCADQRA2AkAgA0GUAWoiBSABIAIQWSAEIAMoApQBIAUgAywAnwEiBEEASCIFGyADKAKYASAEIAUbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBlAFqIgQgAhA1IANBDGogAygClAEgBCADLACfASIEQQBIIgUbIAMoApgBIAQgBRsQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgA0EMakHwwAFBChAtIAEoAmgQPEHPkAJBARAtIQQgA0GUAWoiBSACEDUgBCADKAKUASAFIAMsAJ8BIgJBAEgiBRsgAygCmAEgAiAFGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyAEQbm3AUEMEC0aAkAgASgCbCICIAEoAnAiBEYNACADQQxqIAIoAgAQPBogAkEEaiIBIARGDQADQCABKAIAIQIgA0EgOgCUASADQQxqIgUgA0GUAWpBARAtGiAFIAIQPBogAUEEaiIBIARHDQALCyADQQxqQc+QAkEBEC0aAkACfyADKAJAIgFBEHEEQCADKAI8IgEgAygCKCICSQRAIAMgAjYCPCACIQELIANBJGoMAQsgAUEIcUUEQEEAIQEgAEEAOgALDAILIAMoAiAhASADQRhqCyECAkAgASACKAIAIgRrIgFB+P///wdJBEAgAUELTwRAIAFBB3JBAWoi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BCAHRwRAAkAgDyARRwRAIA8hEAwBCyACIAIoAgAiEEEEajYCACAQIAo2AgBBACEQAn8gCy0AC0EHdgRAIAsoAgQMAQsgCy0AC0H/AHELIBJBAWoiEk0EQCAPIREMAQsCfyALLQALQQd2BEAgCygCAAwBCyALCyASai0AAEH/AEYEQEF/IREMAQsCfyALLQALQQd2BEAgCygCAAwBCyALCyASaiwAACERCyAHQQRrIgcoAgAhDyACIAIoAgAiGEEEajYCACAYIA82AgAgEEEBaiEPDAELCyACKAIAIQcLIBogBxDFAgsgFEEBaiEUDAELCwvvAwEBfyMAQRBrIgokACAJAn8gAARAIAJBrM4GEEMhAAJAIAEEQCAKQQRqIgEgACAAKAIAKAIsEQIAIAMgCigCBDYAACABIAAgACgCACgCIBECAAwBCyAKQQRqIgEgACAAKAIAKAIoEQIAIAMgCigCBDYAACABIAAgACgCACgCHBECAAsgCCABEKsBIAEQahogBCAAIAAoAgAoAgwRAQA2AgAgBSAAIAAoAgAoAhARAQA2AgAgCkEEaiIBIAAgACgCACgCFBECACAGIAEQhAEgARBGGiABIAAgACgCACgCGBECACAHIAEQqwEgARBqGiAAIAAoAgAoAiQRAQAMAQsgAkGkzgYQQyEAAkAgAQRAIApBBGoiASAAIAAoAgAoAiwRAgAgAyAKKAIENgAAIAEgACAAKAIAKAIgEQIADAELIApBBGoiASAAIAAoAgAoAigRAgAgAyAKKAIENgAAIAEgACAAKAIAKAIcEQIACyAIIAEQqwEgARBqGiAEIAAgACgCACgCDBEBADYCACAFIAAgACgCACgCEBEBADYCACAKQQRqIgEgACAAKAIAKAIUEQIAIAYgARCEASABEEYaIAEgACAAKAIAKAIYEQIAIAcgARCrASABEGoaIAAgACgCACgCJBEBAAs2AgAgCkEQaiQAC9gBAQh/IwBBEGsiBSQAIwBBIGsiAyQAIANBGGogACABEN0EIANBEGogAygCGCADKAIcIAIQvgUgAygCECEEIwBBEGsiASQAIAEgADYCDCABQQxqIgAhCiAEIQcgACgCACEEIwBBEGsiACQAIAAgBDYCDCAKIAchCSAAKAIMIQYgAEEQaiQAIAkgBmsQqAMhACABQRBqJAAgAyAANgIMIAMgAiADKAIUIAJrajYCCCAFIAMoAgw2AgggBSADKAIINgIMIANBIGokACAFKAIMIQggBUEQaiQAIAgL3AcBDH8jAEEQayITJAAgAiAANgIAIANBgARxIRYDQCAUQQRGBEACfyANLQALQQd2BEAgDSgCBAwBCyANLQALQf8AcQtBAUsEQCATIA0QmQE2AgwgAiATQQxqQQEQqAMgDRDNASACKAIAEPoENgIACyADQbABcSIDQRBHBEAgASADQSBGBH8gAigCAAUgAAs2AgALIBNBEGokAAUCQAJAAkACQAJAAkAgCCAUai0AAA4FAAEDAgQFCyABIAIoAgA2AgAMBAsgASACKAIANgIAIAZBICAGKAIAKAIcEQUAIQ8gAiACKAIAIhBBAWo2AgAgECAPOgAADAMLAn8gDS0AC0EHdgRAIA0oAgQMAQsgDS0AC0H/AHELRQ0CAn8gDS0AC0EHdgRAIA0oAgAMAQsgDQstAAAhDyACIAIoAgAiEEEBajYCACAQIA86AAAMAgsCfyAMLQALQQd2BEAgDCgCBAwBCyAMLQALQf8AcQtFIRkgFkUNASAZDQEgAiAMEJkBIAwQzQEgAigCABD6BDYCAAwBCyACKAIAIRogBCAHaiIEIREDQAJAIAUgEU0NACARLAAAIg9BAE4EfyAGKAIIIA9BAnRqKAIAQcAAcUEARwVBAAtFDQAgEUEBaiERDAELCyAOIg9BAEoEQANAAkAgBCARTw0AIA9FDQAgD0EBayEPIBFBAWsiES0AACEQIAIgAigCACISQQFqNgIAIBIgEDoAAAwBCwsgDwR/IAZBMCAGKAIAKAIcEQUABUEACyESA0AgAiACKAIAIhBBAWo2AgAgD0EASgRAIBAgEjoAACAPQQFrIQ8MAQsLIBAgCToAAAsCQCAEIBFGBEAgBkEwIAYoAgAoAhwRBQAhDyACIAIoAgAiEEEBajYCACAQIA86AAAMAQsCfyALLQALQQd2BEAgCygCBAwBCyALLQALQf8AcQsEfwJ/IAstAAtBB3YEQCALKAIADAELIAsLLAAABUF/CyESQQAhD0EAIRADQCAEIBFGDQECQCAPIBJHBEAgDyEVDAELIAIgAigCACISQQFqNgIAIBIgCjoAAEEAIRUCfyALLQALQQd2BEAgCygCBAwBCyALLQALQf8AcQsgEEEBaiIQTQRAIA8hEgwBCwJ/IAstAAtBB3YEQCALKAIADAELIAsLIBBqLQAAQf8ARgRAQX8hEgwBCwJ/IAstAAtBB3YEQCALKAIADAELIAsLIBBqLAAAIRILIBFBAWsiES0AACEPIAIgAigCACIYQQFqNgIAIBggDzoAACAVQQFqIQ8MAAsACyAaIAIoAgAQ2QELIBRBAWohFAwBCwsL7wMBAX8jAEEQayIKJAAgCQJ/IAAEQCACQZzOBhBDIQACQCABBEAgCkEEaiIBIAAgACgCACgCLBECACADIAooAgQ2AAAgASAAIAAoAgAoAiARAgAMAQsgCkEEaiIBIAAgACgCACgCKBECACADIAooAgQ2AAAgASAAIAAoAgAoAhwRAgALIAggARCEASABEEYaIAQgACAAKAIAKAIMEQEAOgAAIAUgACAAKAIAKAIQEQEAOgAAIApBBGoiASAAIAAoAgAoAhQRAgAgBiABEIQBIAEQRhogASAAIAAoAgAoAhgRAgAgByABEIQBIAEQRhogACAAKAIAKAIkEQEADAELIAJBlM4GEEMhAAJAIAEEQCAKQQRqIgEgACAAKAIAKAIsEQIAIAMgCigCBDYAACABIAAgACgCACgCIBECAAwBCyAKQQRqIgEgACAAKAIAKAIoEQIAIAMgCigCBDYAACABIAAgACgCACgCHBECAAsgCCABEIQBIAEQRhogBCAAIAAoAgAoAgwRAQA6AAAgBSAAIAAoAgAoAhARAQA6AAAgCkEEaiIBIAAgACgCACgCFBECACAGIAEQhAEgARBGGiABIAAgACgCACgCGBECACAHIAEQhAEgARBGGiAAIAAoAgAoAiQRAQALNgIAIApBEGokAAvNAgEFfyMAQRBrIgUkAAJAIAJB9////wMgAWtNBEACfyAALQALQQd2BEAgACgCAAwBCyAACyEHIAVBBGoiBiABQfP///8BSQR/IAUgAUEBdDYCDCAFIAEgAmo2AgQjAEEQayICJAAgBigCACAFQQxqIggoAgBJIQkgAkEQaiQAIAggBiAJGygCACICQQJPBH8gAkECakF+cSICIAJBAWsiAiACQQJGGwVBAQtBAWoFQff///8DCxDrASAFKAIEIQIgBSgCCBogBARAIAIgByAEEM4CCyADIARHBEAgBEECdCIGIAJqIAYgB2ogAyAEaxDOAgsgAUEBRwRAIAdBBBC/AQsgACACNgIAIAAgACgCCEGAgICAeHEgBSgCCEH/////B3FyNgIIIAAgACgCCEGAgICAeHI2AgggBUEQaiQADAELEIoBAAsgACADNgIECx8BAX8gASgCABDGBSECIAAgASgCADYCBCAAIAI2AgALmBgBC38jAEGQBGsiCyQAIAsgCjYCiAQgCyABNgKMBAJAIAAgC0GMBGoQXQRAIAUgBSgCAEEEcjYCAEEAIQAMAQsgC0GGCzYCSCALIAtB6ABqIAtB8ABqIAtByABqIg8QayIRKAIAIgE2AmQgCyABQZADajYCYCMAQRBrIgEkACAPQgA3AgAgD0EANgIIIAFBEGokACMAQRBrIgEkACALQTxqIg5CADcCACAOQQA2AgggAUEQaiQAIwBBEGsiASQAIAtBMGoiDUIANwIAIA1BADYCCCABQRBqJAAjAEEQayIBJAAgC0EkaiIMQgA3AgAgDEEANgIIIAFBEGokACMAQRBrIgEkACALQRhqIhBCADcCACAQQQA2AgggAUEQaiQAIwBBEGsiCiQAIAsCfyACBEAgCkEEaiICIANBrM4GEEMiASABKAIAKAIsEQIAIAsgCigCBDYAXCACIAEgASgCACgCIBECACAMIAIQqwEgAhBqGiACIAEgASgCACgCHBECACANIAIQqwEgAhBqGiALIAEgASgCACgCDBEBADYCWCALIAEgASgCACgCEBEBADYCVCACIAEgASgCACgCFBECACAPIAIQhAEgAhBGGiACIAEgASgCACgCGBECACAOIAIQqwEgAhBqGiABIAEoAgAoAiQRAQAMAQsgCkEEaiICIANBpM4GEEMiASABKAIAKAIsEQIAIAsgCigCBDYAXCACIAEgASgCACgCIBECACAMIAIQqwEgAhBqGiACIAEgASgCACgCHBECACANIAIQqwEgAhBqGiALIAEgASgCACgCDBEBADYCWCALIAEgASgCACgCEBEBADYCVCACIAEgASgCACgCFBECACAPIAIQhAEgAhBGGiACIAEgASgCACgCGBECACAOIAIQqwEgAhBqGiABIAEoAgAoAiQRAQALNgIUIApBEGokACAJIAgoAgA2AgAgBEGABHEhEkEAIQNBACEBA0AgASECAkACQAJAAkAgA0EERg0AIAAgC0GMBGoQXQ0AQQAhCgJAAkACQAJAAkACQCALQdwA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B0H//wNxC8IBAgF+An8jAEEQayIFJAACQAJAIAAgAUcEQEHArgYoAgAhBkHArgZBADYCABBgGiAAIAVBDGogA0KAgICAgICAgIB/EI8CIQQCQEHArgYoAgAiAARAIAUoAgwgAUcNASAAQcQARg0DDAQLQcCuBiAGNgIAIAUoAgwgAUYNAwsLIAJBBDYCAEIAIQQMAQsgAkEENgIAIARCAFUEQEL///////////8AIQQMAQtCgICAgICAgICAfyEECyAFQRBqJAAgBAvQAQIDfwF+IwBBEGsiBCQAAn8CQAJAIAAgAUcEQEHArgYoAgAhBUHArgZBADYCABBgGiAAIARBDGogA0KAgICAgICAgIB/EI8CIQcCQEHArgYoAgAiAARAIAQoAgwgAUcNASAAQcQARg0EDAMLQcCuBiAFNgIAIAQoAgwgAUYNAgsLIAJBBDYCAEEADAILIAdCgICAgHhTDQAgB0L/////B1UNACAHpwwBCyACQQQ2AgBB/////wcgB0IAVQ0AGkGAgICAeAshBiAEQRBqJAAgBguQAgEDfwJAIwBBEGsiBCQAIAIgAWtBAnUiBUH3////A00EQAJAIAVBAkkEQCAAIAAtAAtBgAFxIAVB/wBxcjoACyAAIAAtAAtB/wBxOgALIAAhAwwBCyAEQQhqIAVBAk8EfyAFQQJqQX5xIgMgA0EBayIDIANBAkYbBUEBC0EBahDrASAEKAIMGiAAIAQoAggiAzYCACAAIAAoAghBgICAgHhxIAQoAgxB/////wdxcjYCCCAAIAAoAghBgICAgHhyNgIIIAAgBTYCBAsDQCABIAJHBEAgAyABKAIANgIAIANBBGohAyABQQRqIQEMAQsLIARBADYCBCADIAQoAgQ2AgAgBEEQaiQADAELEIoBAAsLtggBBX8gASgCACEEAkACQAJAAkACQAJAAkACfwJAAkACQAJAIANFDQAgAygCACIGRQ0AIABFBEAgAiEDDAMLIANBADYCACACIQMMAQsCQEHorwYoAgAoAgBFBEAgAEUNASACRQ0MIAIhBgNAIAQsAAAiAwRAIAAgA0H/vwNxNgIAIABBBGohACAEQQFqIQQgBkEBayIGDQEMDgsLIABBADYCACABQQA2AgAgAiAGaw8LIAIhAyAARQ0DDAULIAQQWA8LQQEhBQwDC0EADAELQQELIQUD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qAMhGCAEKQOgAyEZAkAgFEECayAHQf////8HcU4NACAEIBhC////////////AIM3A5gDIAQgGTcDkAMgBEGAA2ogGSAYQgBCgICAgICAgP8/EGYgBCkDkAMgBCkDmANCgICAgICAgLjAABCrBSEDIAQpA4gDIBggA0EATiICGyEYIAQpA4ADIBkgAhshGSAXIBpCAEIAENsBIQEgFCACIA5qIg5B7gBqTgRAIAggBiAJRyADQQBIcnEgAUEAR3FFDQELQcCuBkHEADYCAAsgBEHwAmogGSAYIA4QqQUgBCkD+AIhFyAEKQPwAgshGCAMIBc3AyggDCAYNwMgIARBkMYAaiQAIAwpAyghFyAMKQMgIRgMAQtCACEXCyAAIBg3AwAgACAXNwMIIAxBMGokAAvHBgIEfwR+IwBBgAFrIgUkAAJAAkACQCADIARCAEIAENsBRQ0AAn8gBEL///////8/gyEKAn8gBEIwiKdB//8BcSIHQf//AUcEQEEEIAcNARpBAkEDIAMgCoRQGwwCCyADIAqEUAsLRQ0AIAJCMIinIghB//8BcSIGQf//AUcNAQsgBUEQaiABIAIgAyAEEGYgBSAFKQMQIgIgBSkDGCIBIAIgARCoBSAFKQMIIQIgBSkDACEEDAELIAEgAkL///////////8AgyIKIAMgBEL///////////8AgyIJENsBQQBMBEAgASAKIAMgCRDbAQRAIAEhBAwCCyAFQfAAaiABIAJCAEIAEGYgBSkDeCECIAUpA3AhBAwBCyAEQjCIp0H//wFxIQcgBgR+IAEFIAVB4ABqIAEgCkIAQoCAgICAgMC7wAAQZiAFKQNoIgpCMIinQfgAayEGIAUpA2ALIQQgB0UEQCAFQdAAaiADIAlCAEKAgICAgIDAu8AAEGYgBSkDWCIJQjCIp0H4AGshByAFKQNQIQMLIAlC////////P4NCgICAgICAwACEIQsgCkL///////8/g0KAgICAgIDAAIQhCiAGIAdKBEADQAJ+IAogC30gAyAEVq19IglCAFkEQCAJIAQgA30iBIRQBEAgBUEgaiABIAJCAEIAEGYgBSkDKCECIAUpAyAhBAwFCyAJQgGGIARCP4iEDAELIApCAYYgBEI/iIQLIQogBEIBhiEEIAZBAWsiBiAHSg0ACyAHIQYLAkAgCiALfSADIARWrX0iCUIAUwRAIAohCQwBCyAJIAQgA30iBIRCAFINACAFQTBqIAEgAkIAQgAQZiAFKQM4IQIgBSkDMCEEDAELIAlC////////P1gEQANAIARCP4ghDCAGQQFrIQYgBEIBhiEEIAwgCUIBhoQiCUKAgICAgIDAAFQNAAsLIAhBgIACcSEHIAZBAEwEQCAFQUBrIAQgCUL///////8/gyAGQfgAaiAHcq1CMIaEQgBCgICAgICAwMM/EGYgBSkDSCECIAUpA0AhBAwBCyAJQv///////z+DIAYgB3KtQjCGhCECCyAAIAQ3AwAgACACNwMIIAVBgAFqJAALrQ8CBX8PfiMAQdACayIFJAAgBEL///////8/gyEKIAJC////////P4MhCyACIASFQoCAgICAgICAgH+DIQwgBEIwiKdB//8BcSEIAkACQCACQjCIp0H//wFxIglB//8Ba0GCgH5PBEAgCEH//wFrQYGAfksNAQsgAVAgAkL///////////8AgyINQoCAgICAgMD//wBUIA1CgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhDAwCCyADUCAEQv///////////wCDIgJCgICAgICAwP//AFQgAkKAgICAgIDA//8AURtFBEAgBEKAgICAgIAghCEMIAMhAQwCCyABIA1CgICAgICAwP//AIWEUARAIAMgAkKAgICAgIDA//8AhYRQBEBCACEBQoCAgICAgOD//wAhDAwDCyAMQoCAgICAgMD//wCEIQxCACEBDAILIAMgAkKAgICAgIDA//8AhYRQBEBCACEBDAILIAEgDYRQBEBCgICAgICA4P//ACAMIAIgA4RQGyEMQgAhAQwCCyACIAOEUARAIAxCgICAgICAwP//AIQhDEIAIQEMAgsgDUL///////8/WARAIAVBwAJqIAEgCyABIAsgC1AiBht5IAZBBnStfKciBkEPaxCGAUEQIAZrIQYgBSkDyAIhCyAFKQPAAiEBCyACQv///////z9WDQAgBUGwAmogAyAKIAMgCiAKUCIHG3kgB0EGdK18pyIHQQ9rEIYBIAYgB2pBEGshBiAFKQO4AiEKIAUpA7ACIQMLIAVBoAJqIApCgICAgICAwACEIhJCD4YgA0IxiIQiAkIAQoCAgICw5ryC9QAgAn0iBEIAEHwgBUGQAmpCACAFKQOoAn1CACAEQgAQfCAFQYACaiAFKQOYAkIBhiAFKQOQAkI/iIQiBEIAIAJCABB8IAVB8AFqIARCAEIAIAUpA4gCfUIAEHwgBUHgAWogBSkD+AFCAYYgBSkD8AFCP4iEIgRCACACQgAQfCAFQdABaiAEQgBCACAFKQPoAX1CABB8IAVBwAFqIAUpA9gBQgGGIAUpA9ABQj+IhCIEQgAgAkIAEHwgBUGwAWogBEIAQgAgBSkDyAF9QgAQfCAFQaABaiACQgAgBSkDuAFCAYYgBSkDsAFCP4iEQgF9IgJCABB8IAVBkAFqIANCD4ZCACACQgAQfCAFQfAAaiACQgBCACAFKQOoASAFKQOgASINIAUpA5gBfCIEIA1UrXwgBEIBVq18fUIAEHwgBUGAAWpCASAEfUIAIAJCABB8IAYgCSAIa2ohBgJ/IAUpA3AiE0IBhiIOIAUpA4gBIg9CAYYgBSkDgAFCP4iEfCIQQufsAH0iFEIgiCICIAtCgICAgICAwACEIhVCAYYiFkIgiCIEfiIRIAFCAYYiDUIgiCIKIBAgFFatIA4gEFatIAUpA3hCAYYgE0I/iIQgD0I/iHx8fEIBfSITQiCIIhB+fCIOIBFUrSAOIA4gE0L/////D4MiEyABQj+IIhcgC0IBhoRC/////w+DIgt+fCIOVq18IAQgEH58IAQgE34iESALIBB+fCIPIBFUrUIghiAPQiCIhHwgDiAOIA9CIIZ8Ig5WrXwgDiAOIBRC/////w+DIhQgC34iESACIAp+fCIPIBFUrSAPIA8gEyANQv7///8PgyIRfnwiD1atfHwiDlatfCAOIAQgFH4iGCAQIBF+fCIEIAIgC358IgsgCiATfnwiEEIgiCALIBBWrSAEIBhUrSAEIAtWrXx8QiCGhHwiBCAOVK18IAQgDyACIBF+IgIgCiAUfnwiCkIgiCACIApWrUIghoR8IgIgD1StIAIgEEIghnwgAlStfHwiAiAEVK18IgRC/////////wBYBEAgFiAXhCEVIAVB0ABqIAIgBCADIBIQfCABQjGGIAUpA1h9IAUpA1AiAUIAUq19IQpCACABfSELIAZB/v8AagwBCyAFQeAAaiAEQj+GIAJCAYiEIgIgBEIBiCIEIAMgEhB8IAFCMIYgBSkDaH0gBSkDYCINQgBSrX0hCkIAIA19IQsgASENIAZB//8AagsiBkH//wFOBEAgDEKAgICAgIDA//8AhCEMQgAhAQwBCwJ+IAZBAEoEQCAKQgGGIAtCP4iEIQEgBEL///////8/gyAGrUIwhoQhCiALQgGGDAELIAZBj39MBEBCACEBDAILIAVBQGsgAiAEQQEgBmsQ3QEgBUEwaiANIBUgBkHwAGoQhgEgBUEgaiADIBIgBSkDQCICIAUpA0giChB8IAUpAzggBSkDKEIBhiAFKQMgIgFCP4iEfSAFKQMwIgQgAUIBhiINVK19IQEgBCANfQshBCAFQRBqIAMgEkIDQgAQfCAFIAMgEkIFQgAQfCAKIAIgAiADIAQgAkIBgyIEfCIDVCABIAMgBFStfCIBIBJWIAEgElEbrXwiAlatfCIEIAIgAiAEQoCAgICAgMD//wBUIAMgBSkDEFYgASAFKQMYIgRWIAEgBFEbca18IgJWrXwiBCACIARCgICAgICAwP//AFQgAyAFKQMAViABIAUpAwgiA1YgASADURtxrXwiASACVK18IAyEIQwLIAAgATcDACAAIAw3AwggBUHQAmokAAu/AgEBfyMAQdAAayIEJAACQCADQYCAAU4EQCAEQSBqIAEgAkIAQoCAgICAgID//wAQZiAEKQMoIQIgBCkDICEBIANB//8BSQRAIANB//8AayEDDAILIARBEGogASACQgBCgICAgICAgP//ABBmQf3/AiADIANB/f8CTxtB/v8BayEDIAQpAxghAiAEKQMQIQEMAQsgA0GBgH9KDQAgBEFAayABIAJCAEKAgICAgICAORBmIAQpA0ghAiAEKQNAIQEgA0H0gH5LBEAgA0GN/wBqIQMMAQsgBEEwaiABIAJCAEKAgICAgICAORBmQeiBfSADIANB6IF9TRtBmv4BaiEDIAQpAzghAiAEKQMwIQELIAQgASACQgAgA0H//wBqrUIwhhBmIAAgBCkDCDcDCCAAIAQpAwA3AwAgBEHQAGokAAs8ACAAIAE3AwAgACACQv///////z+DIAJCgICAgICAwP//AINCMIinIANCMIinQYCAAnFyrUIwhoQ3AwgLwAECAX8CfkF/IQMCQCAAQgBSIAFC////////////AIMiBEKAgICAgIDA//8AViAEQoCAgICAgMD//wBRGw0AIAJC////////////AIMiBUKAgICAgIDA//8AViAFQoCAgICAgMD//wBS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AClFBEAgAQRAAkAgGkEITARAICogIyAEQYCAAmogCCAJIAogCygCsAERCQAMAQsgKiAjIARBgIACaiAIIAkgCiAaIAsoAsABEQgACyACKAIURQ0EIAogMW0hACAJIDNtIQEgGUEITARAICcgDiAEIAggASAAIAsoArABEQkAICYgDiArIAggASAAIAsoArABEQkADAULICcgDiAEIAggASAAIBkgCygCwAERCAAgJiAOICsgCCABIAAgGSALKALAAREIAAwECyA0QfMHQQAQUSACQQM6ALgCDAMLIAEEQCARIAUtAIQDaiEBIAUgOCwAACIHaiwAhgQgBnQhBiAFIAdBAXRqIg8sAKcFIUcgBSAHQQJ0aiIRLgGoBCEHIA8sAKYFIUYgES4BpgQhESAPLgHGAyEPIAUtAIUDIUUCQCAaQQhMBEAgKiAjIARBgIACaiAIIAkgCiAPIAYgASALKAK0AREUAAwBCyAqICMgBEGAgAJqIAggCSAKIA8gBiABIBogCygCxAEREQALIAIoAhRFDQMgCiAxbSEBIAkgM20hBSBFIBVqIQYgRiAAdCEPIEcgAHQhACAZQQhMBEAgJyAOIAQgCCAFIAEgESAPIAYgCygCtAERFAAgJiAOICsgCCAFIAEgByAAIAYgCygCtAERFAAMBAsgJyAOIAQgCCAFIAEgESAPIAYgGSALKALEARERACAmIA4gKyAIIAUgASAHIAAgBiAZIAsoAsQBEREADAMLIDRB8wdBABBRIAJBAzoAuAIMAgtB6IEBQYL1AEGQBEGAJBABAAsCQCAHQQFHDQAgD0EBRw0AIDctACpFBEAgBEGAwAJqIQACQCAaQQhMBEAgKiAjIARBgIACaiAAIAggCSAKIAsoAqwBEQgADAELICogIyAEQYCAAmogACAIIAkgCiAaIAsoArwBEQ0ACyACKAIURQ0CIAogMW0hACAJIDNtIQEgBEGAQGshBSAEQYDAAWohBiAZQQhMBEAgJyAOIAQgBSAIIAEgACALKAKsAREIACAmIA4gKyAGIAggASAAIAsoAqwBEQgADAMLICcgDiAEIAUgCCABIAAgGSALKAK8ARENACAmIA4gKyAGIAggASAAIBkgCygCvAERDQAMAgsgBSADLAADIgFBAXRqIgcsAMcFIQ0gBSABQQJ0aiIPLgHoBCEMIAcsAMYFIRAg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IAE6AAAgAEHX2AVqQQs6AAAgAEHW2AVqIAE6AAAgAEHZ2AVqQQw6AAAgAEHY2AVqIAE6AAAgAEHb2AVqQQ06AAAgAEHa2AVqIAE6AAAgAEHd2AVqQQ46AAAgAEHc2AVqIAE6AAAgAEHf2AVqQQ86AAAgAEHe2AVqIAE6AAAgAkEQaiECIAFBAWoiAUEQRw0AC0EAIQMDQEEAIQIgA0EASAR/QQAFAkAgA0UEQEEAIQEgAyEADAELIANBAWpBfnEhBkEAIQEgAyEAQQAhBQNAAkAgAEEPSg0AIAFBD0sNACAEQQF0IgdB4a0FaiAAOgAAIAdB4K0FaiABOgAAIARBAWohBAsCQCAAQRBKDQAgAUEBciIHQQ9LDQAgBEEBdCIJQeGtBWogAEEBazoAACAJQeCtBWogBzoAACAEQQFqIQQLIAFBAmohASAAQQJrIQAgBUECaiIFIAZHDQALCwJAIANBAXENACAAQQ9KDQAgAUEPSw0AIARBAXQiBUHhrQVqIAA6AAAgBUHgrQVqIAE6AAAgBEEBaiEECyADQQFqCyEDIARBgAJIDQALQQAhBANAIARBAXQiAEGRxwVqIAI6AABBACEBIABBkMcFakEAOgAAIABBk8cFaiACOgAAIABBkscFakEBOgAAIABBlccFaiACOgAAIABBlMcFakECOgAAIABBl8cFaiACOgAAIABBlscFakEDOgAAIABBmccFaiACOgAAIABBmMcFakEEOgAAIABBm8cFaiACOgAAIABBmscFakEFOgAAIABBnccFaiACOgAAIABBnMcFakEGOgAAIABBn8cFaiACOgAAIABBnscFakEHOgAAIABBoccFaiACOgAAIABBoMcFakEIOgAAIABBo8cFaiACOgAAIABBoscFakEJOgAAIABBpccFaiACOgAAIABBpMcFakEKOgAAIABBp8cFaiACOgAAIABBpscFakELOgAAIABBqccFaiACOgAAIABBqMcFakEMOgAAIABBq8cFaiACOgAAIABBqscFakENOgAAIABBrccFaiACOgAAIABBrMcFakEOOgAAIABBr8cFaiACOgAAIABBrscFakEPOgAAIABBsccFaiACOgAAIABBsMcFakEQOgAAIABBs8cFaiACOgAAIABBsscFakEROgAAIABBtccFaiACOgAAIABBtMcFakESOgAAIABBt8cFaiACOgAAIABBtscFakETOgAAIABBuccFaiACOgAAIABBuMcFakEUOgAAIABBu8cFaiACOgAAIABBuscFakEVOgAAIABBvccFaiACOgAAIABBvMcFakEWOgAAIABBv8cFaiACOgAAIABBvscFakEXOgAAIABBwccFaiACOgAAIABBwMcFakEYOgAAIABBw8cFaiACOgAAIABBwscFakEZOgAAIABBxccFaiACOgAAIABBxMcFakEaOgAAIABBx8cFaiACOgAAIABBxscFakEbOgAAIABByccFaiACOgAAIABByMcFakEcOgAAIABBy8cFaiACOgAAIABByscFakEdOgAAIABBzccFaiACOgAAIABBzMcFakEeOgAAIABBz8cFaiACOgAAIABBzscFakEfOgAAIARBIGohBCACQQFqIgJBIEcNAAtBACECA0BBACEEIAJBAXQiAEHB3AVqQQA6AAAgAEHA3AVqIAE6AAAgAEHD3AVqQQE6AAAgAEHC3AVqIAE6AAAgAEHF3AVqQQI6AAAgAEHE3AVqIAE6AAAgAEHH3AVqQQM6AAAgAEHG3AVqIAE6AAAgAEHJ3AVqQQQ6AAAgAEHI3AVqIAE6AAAgAEHL3AVqQQU6AAAgAEHK3AVqIAE6AAAgAEHN3AVqQQY6AAAgAEHM3AVqIAE6AAAgAEHP3AVqQQc6AAAgAEHO3AVqIAE6AAAgAEHR3AVqQQg6AAAgAEHQ3AVqIAE6AAAgAEHT3AVqQQk6AAAgAEHS3AVqIAE6AAAgAEHV3AVqQQo6AAAgAEHU3AVqIAE6AAAgAEHX3AVqQQs6AAAgAEHW3AVqIAE6AAAgAEHZ3AVqQQw6AAAgAEHY3AVqIAE6AAAgAEHb3AVqQQ06AAAgAEHa3AVqIAE6AAAgAEHd3AVqQQ46AAAgAEHc3AVqIAE6AAAgAEHf3AVqQQ86AAAgAEHe3AVqIAE6AAAgAEHh3AVqQRA6AAAgAEHg3AVqIAE6AAAgAEHj3AVqQRE6AAAgAEHi3AVqIAE6AAAgAEHl3AVqQRI6AAAgAEHk3AVqIAE6AAAgAEHn3AVqQRM6AAAgAEHm3AVqIAE6AAAgAEHp3AVqQRQ6AAAgAEHo3AVqIAE6AAAgAEHr3AVqQRU6AAAgAEHq3AVqIAE6AAAgAEHt3AVqQRY6AAAgAEHs3AVqIAE6AAAgAEHv3AVqQRc6AAAgAEHu3AVqIAE6AAAgAEHx3AVqQRg6AAAgAEHw3AVqIAE6AAAgAEHz3AVqQRk6AAAgAEHy3AVqIAE6AAAgAEH13AVqQRo6AAAgAEH03AVqIAE6AAAgAEH33AVqQRs6AAAgAEH23AVqIAE6AAAgAEH53AVqQRw6AAAgAEH43AVqIAE6AAAgAEH73AVqQR06AAAgAEH63AVqIAE6AAAgAEH93AVqQR46AAAgAEH83AVqIAE6AAAgAEH/3AVqQR86AAAgAEH+3AVqIAE6AAAgAkEgaiECIAFBAWoiAUEgRw0AC0EAIQMDQCADQQBIBH9BAAUCQCADRQRAQQAhASADIQAMAQsgA0EBakF+cSEFQQAhASADIQBBACECA0ACQCAAQR9KDQAgAUEfSw0AIARBAXQiBkHhsQVqIAA6AAAgBkHgsQVqIAE6AAAgBEEBaiEECwJAIABBIEoNACABQQFyIgZBH0sNACAEQQF0IgdB4bEFaiAAQQFrOgAAIAdB4LEFaiAGOgAAIARBAWohBAsgAUECaiEBIABBAmshACACQQJqIgIgBUcNAAsLAkAgA0EBcQ0AIABBH0oNACABQR9LDQAgBEEBdCICQeGxBWogADoAACACQeCxBWogAToAACAEQQFqIQQLIANBAWoLIQMgBEGACEgNAAtBAiEFA0BBASAFQQJrIgF0IAF0QQFrIQRBASAFdCEGIAVBAnQiB0GQiwNqKAIAIQogAUECdCIJQbCKA2ooAgAhC0EAIQMDQCAKIAMgBXRBAXRqIQxBACECA0AgDCACQQF0aiEIQRAhACAEIQEDQCALIAEgAEVrIgFBAXRqIg0tAAFBAnQgAEEBa0EPIAAbIgBBAXQiDkHBrAVqLQAAaiEPIA5BwKwFai0AACANLQAAQQJ0aiACRw0AIAMgD0cNAAsgCCAAOgABIAggAToAACACQQFqIgIgBkcNAAsgA0EBaiIDIAZHDQALIAlB0IoDaigCACEKIAdBqIsDaigCACELQQAhAwNAIAsgAyAFdEEBdGohDEEAIQIDQCAMIAJBAXRqIQhBECEAIAQhAQNAIAogASAARWsiAUEBdGoiDS0AAUECdCAAQQFrQQ8gABsiAEEBdCIOQfHBBWotAABqIQ8gDkHwwQVqLQAAIA0tAABBAnRqIAJHDQAgAyAPRw0ACyAIIAA6AAEgCCABOgAAIAJBAWoiAiAGRw0ACyADQQFqIgMgBkcNAAsgCUHwigNqKAIAIQkgB0HAiwNqKAIAIQhBACEDA0AgCCADIAV0QQF0aiEKQQAhAgNAIAogAkEBdGohB0EQIQAgBCEBA0AgCSABIABFayIBQQF0aiILLQABQQJ0IABBAWtBDyAAGyIAQQF0IgxBodcFai0AAGohDSAMQaDXBWotAAAgCy0AAEECdGogAkcNACADIA1HDQALIAcgADoAASAHIAE6AAAgAkEBaiICIAZHDQALIANBAWoiAyAGRw0ACyAFQQFqIgVBBkcNAAsLqQEBA38CQCAALQAuBEBBASEEIAAoAjAiBUEATA0BIAEgACgCqEFHBEAgAEGowQBqIQQDQCADQQFqIgMgBUYNAyAEIANBAnRqKAIAIAFHDQALIAMgBUghBAtBACEDIAAoAjQiAUEASgR/IABB1MEAaiEFA0AgBSADQQJ0aigCACACRiIARQRAIANBAWoiAyABRw0BCwsgAAVBAAsgBHEPCyABIAJyRQ8LQQALsgMBBX8gACgCCCIBRQRADwsgACgCBCICQQZGBEACQCABKAIYIgIgASgCHEgEQCABKAIUIQMMAQsgAkEBaiIFEFUiA0UEQA8LIAEoAhQiBARAIAMgBCACEDIaIAQQKiABKAIYIQILIAEgBTYCHCABIAM2AhQLIAIgA2pBADoAACABIAEoAhhBAWo2AhggACgCBCECCyACQQdGBH8CQCABKAIYIgNBAmoiBCABKAIcTARAIAEoAhQhAgwBCyAEEFUiAkUEQA8LIAEoAhQiBQRAIAIgBSADEDIaIAUQKiABKAIYIQMLIAEgBDYCHCABIAI2AhQLIAIgA2pBADsAACABIAEoAhhBAmo2AhggACgCBAUgAgtBBU4EQCAAKAIgIgQgACgCHGoiAyAAKAIUIgUgACgCECICa0EIdEEBa0EAIAIgBUcbRgRAIABBDGoQ6AIgACgCICIEIAAoAhxqIQMgACgCECECCyACIANBCHZB/P//B3FqKAIAIANB/wdxQQJ0aiABNgIAIAAgBEEBajYCICABKAIYIQEgAEEANgIIIAAgASAAKAIkajYCJAsgAEEANgIEC4kCAQZ/AkAgAyAEckEASA0AIAAoAnwiBSgC5AMgA0wNACAFKALoAyAETA0AIAAoAoQBIgkoArBCIgcgAyAFKAKohAEiBnZBAnRqIAUoApyEASIKIAQgBnZsQQJ0aigCACAHIAEgBnVBAnRqIAIgBnUgCmxBAnRqKAIASg0AIAAoAowBIgYgACgCmAEiByACIAUoAuyDASIAdSICbEEYbGogASAAdSIBQRhsai8BACAGIAcgBCAAdiIEbEEYbGogAyAAdiIAQRhsai8BAEcNACAJKAKkQiIDIAFBAnRqIAUoAvyDASIBIAJsQQJ0aigCACADIABBAnRqIAEgBGxBAnRqKAIARiEICyAIC+URARB/IwBBMGsiCiQAIAQoAgAhCwJAAkAgBQRAIAsNAUH6IEHB9QBB8gFB2NkAEAEACyALRQ0BCyAEKAIEIgwEQCAMIAwoAgRBAWo2AgQLIAAgCzYCfCAAKAKAASELIAAgDDYCgAEgC0UNACALIAsoAgQiDEEBazYCBCAMDQAgCyALKAIAKAIIEQAAIAsQKwsgABDUA0EBIQtBsKwFQbCsBSgCACIMQQFqNgIAIAAgBjYCcCAAQf////8HNgJsIAAgDDYCACAAIAg2AqACIAAgAjYCJCAAIAE2AiAgACACNgIcIAAgATYCGCAAIAM2AhQgACAHNwOYAgJ/AkACQAJ/AkACfwJ/AkACQAJAAkAgAw4EBgECAwALQZ2QAUHB9QBBlgJB2NkAEAEAC0ECIQsgCkECNgIIIAAgAkEBakECbSIRNgIkIAAgAUEBakECbSINNgIgQQIhCEECDAMLIApBAzYCCEEBIQhBAiELIAAgAUEBakECbSINNgIgIAIMAQsgCkEENgIIQQEhCCABIQ0gAgshEUEBCyEDIAAgCDoAMyAAIAs6ADIgBCgCACIIRQRAIApBEDYCFCAKIAI2AhAgCiABNgIMQQEhD0EADAILIAgoAtSDASALRw0CIAMgCCgC2IMBRgRAIApBEDYCFCAKIAI2AhAgCiABNgIMDAQLQa6AAUHB9QBBvgJB2NkAEAEAC0EBIQ8gCkEBNgIIIABBgQI7ATIgAEIANwMgIAQoAgAhCCAKQRA2AhQgCiACNgIQIAogATYCDCAIBEBBASEDDAMLQQEhA0EACyEIQQAMAgtBzIABQcH1AEG9AkHY2QAQAQALIAgoAvwDIRIgCCgC+AMhECAIKAL0AyETQQAhDyAIKALwAwshDkEIIQwCQCABIA4gE2oiFCALbCIVTA0AIAIgECASaiIWIANsIhdMDQAgACARIBZrNgJYIAAgDSAUazYCVCAAIAIgF2siAjYCUCAAIAEgFWsiATYCTCAKIAI2AiwgCiABNgIoIAogAyASbDYCJCAKIAMgEGwiAzYCICAKIAsgE2w2AhwgCiALIA5sIg02AhhBCCEBQQghAiAPRQRAIAgoAsiDASECIAgoAsCDASEBCyAAIAI6ADEgACABOgAwIAAgAkH/AXFBCEsiAjoAEiAAIAI6ABEgACABQf8BcUEISzoAEEEAIQEgAAJ+AkAgBkUNACAGKAKgBCEBIAlFDQAgBikCmAQMAQtBmKAFKQMACyIHNwOwAgJAIAenIgJFDQAgBiAKQQhqIAAgASACEQoAIRggACAAKAIEIA1qIAAoAiggA2xqNgJAAn8gACgCFEUEQEEAIQtBAAwBCyAAKAIsIBBsIgIgACgCDCAOamohCyAAKAIIIA5qIAJqCyECIAAgCzYCSCAAIAI2AkQgGA0AQQchDAwBCwJAIAVFDQAgACgCyAEhASAIKAKwhAEhAwJ/IAgoAriEASIFIAgoArSEASIGbCICIAAoAswBRwRAIAEQKiAAIAIQVSIBNgLIASABRQRAIABBADYCzAFBAAwCCyAAIAI2AswBCyAAIAU2AtgBIAAgBjYC1AEgACADNgLQASABQQBHCyEDIAAoAtwBIQEgCCgCsIQBIQUCfyAIKAK4hAEiBiAIKAK0hAEiCWwiAiAAKALgAUcEQCABECogACACEFUiATYC3AEgAUUEQCAAQQA2AuABQQAMAgsgACACNgLgAQsgACAGNgLsASAAIAk2AugBIAAgBTYC5AEgAUEARwsgA3EhAyAAKAKgASEBIAgoAuiDASEFAn8gCCgCgIQBIgYgCCgC+IMBIglsIgIgACgCpAFHBEAgARAqIAAgAkEDbBBVIgE2AqABIAFFBEAgAEEANgKkAUEADAILIAAgAjYCpAELIAAgBjYCsAEgACAJNgKsASAAIAU2AqgBIAFBAEcLIANxIQMgACgCtAEhAQJ/IAgoAoCEASAIKALogwFBAmsiAnQiBSAIKAL4gwEgAnQiBmwiAiAAKAK4AUcEQCABECogACACQQxsEFUiATYCtAEgAUUEQCAAQQA2ArgBQQAMAgsgACACNgK4AQsgACAFNgLEASAAIAY2AsABIABBAjYCvAEgAUEARwsgA3EhAyAAKALwASEBIAgoAqiEASEFAn8gCCgCoIQBIgYgCCgCnIQBIglsIgIgACgC9AFHBEAgARAqIAAgAhBVIgE2AvABIAFFBEAgAEEANgL0AUEADAILIAAgAjYC9AELIAAgBjYCgAIgACAJNgL8ASAAIAU2AvgBIAFBAEcLIANxIQMgACgChAIhAQJ/IAgoAugDQQNqQQRtIgUgCCgC5ANBA2pBBG0iBmwiAiAAKAKIAkcEQCABECogACACEFUiATYChAIgAUUEQCAAQQA2AogCQQAMAgsgACACNgKIAgsgACAFNgKUAiAAIAY2ApACIABBAjYCjAIgAUEARwsgA3EhAwJAIAQoAgAiCCgC/IMBIgIgACgCmAFGBEAgACgCnAEgCCgChIQBRg0BCyAAKALAAiIBBEAgAUEEayICKAIAIgUEQCABIAVBzABsaiEIA0AgCEHMAGsiCCABRw0ACyAEKAIAIQgLIAIQKiAIKAL8gwEhAgsgACgCjAEhASAIKALsgwEhBQJ/IAgoAoSEASIGIAJsIgggACgCkAFHBEAgARAqIAAgCEEYbBBVIgE2AowBIAFFBEBBACEIIABBADYCkAFBAAwCCyAAIAg2ApABCyAAIAY2ApwBIAAgAjYCmAEgACAFNgKUASABQQBHCyEZQX9BfyAIrULMAH4iB6ciAUEEaiIFIAEgBUsbIAdCIIinGxAsIgEgCDYCACABQQRqIQEgCARAIAEgCEHMAGxqIQUgASEIA0AgCEEANgIAIAhBzABqIgggBUcNAAsLIAAgATYCwAJBByEMIBkgA3ENAQwCC0EHIQwgA0UNAQtBACEMCwJAIAQoAgQiAEUNACAAIAAoAgQiAUEBazYCBCABDQAgACAAKAIAKAIIEQAAIAAQKwsgCkEwaiQAIAwLtgEAIABBADoAvAIgAEEAOwG6AiAAQQA2AjwgAEIANwI0IABB9ABqQQBBpAEQNBogAEIANwJsIABBfzYCACAAQgA3AgQgAEEANgIMIABCADcDQCAAQQA2AkggAEEANgLAAiAAQgA3AxggAEIANwOYAiAAQgA3A6ACIABCADcDqAIgAEECOgC4AiAAQQA6AGggAEEANgJkIABCfzcCXCAAQQA2AtQCIABCADcCzAIgAEIANwLEAiAAC7kCAQh/AkACQCAAKAIEIgQgACgCACIHRwRAIAQhAgwBCyAAKAIIIgMgACgCDCICSQRAIAMgAiADa0ECdUEBakECbUECdCIFaiADIARrIgZrIQIgAyAERwRAIAIgBCAGEDcaIAAoAgghAwsgACACNgIEIAAgAyAFajYCCAwBC0EBIAIgBGtBAXUgAiAERhsiAkGAgICABE8NASACQQJ0IgUQLCIGIAVqIQggBiACQQNqQXxxaiICIQUgAyAERwRAIAIgAyAEa2ohCSAEIQMDQCAFIAMoAgA2AgAgA0EEaiEDIAVBBGoiBSAJRw0ACwsgACAINgIMIAAgBTYCCCAAIAI2AgQgACAGNgIAIARFDQAgBxAqIAAoAgQhAgsgAkEEayABKAIANgIAIAAgACgCBEEEazYCBA8LEE8AC04BAX8gACAAKAI0QQFrNgI0IAAgACgCMEEBaiIBNgIwIAFBgBBPBEAgACgCJCgCABAqIAAgACgCJEEEajYCJCAAIAAoAjBBgAhrNgIwCwvTBQEKfyMAQRBrIgwkACAAKAIMIgsgACgCCCIGa0ECdSEIAkAgBiALRwRAQQEgCCAIQQFNGyEKA0ACQCAGIAdBAnRqKAIAIgktAGgNACAJKAJkDQAgCRDUAyAAKAIMIgsgACgCCGtBAnUhCAwDCyAHQQFqIgcgCkcNAAsLQXchBwsCQCAIIAAoAgRNDQAgByAIQQFrRg0AIAtBBGsoAgAiBi0AaA0AIAYoAmQNACAGENMDECogACAAKAIMQQRrIgs2AgwLAkACQAJAIAdBd0YEQCAAKAIIIQ5BoAMQLBCABiEIAkAgACgCDCIHIAAoAhAiCkkEQCAHIAg2AgAgB0EEaiEIDAELIAcgACgCCCIJa0ECdSIPQQFqIgZBgICAgARPDQJB/////wMgCiAJayIKQQF1Ig0gBiAGIA1JGyAKQfz///8HTxsiCgR/IApBgICAgARPDQQgCkECdBAsBUEACyINIA9BAnRqIgYgCDYCACAGQQRqIQggByAJRwRAA0AgBkEEayIGIAdBBGsiBygCADYCACAHIAlHDQALIAAoAhAaIAAoAgghCQsgACANIApBAnRqNgIQIAAgCDYCDCAAIAY2AgggCUUNACAJECoLIAAgCDYCDCALIA5rQQJ1IQcLAkAgB0EASARAIAEoAgQhBgwBCyABKAIAIgYoAtwDIghBBE8NAyAAKAIIIAdBAnRqKAIAIQAgBigC6AMhCSAGKALkAyELIAwgBjYCCCAMIAEoAgQiBjYCDCAGBEAgBiAGKAIEQQFqNgIECyAMIAwpAgg3AwAgACALIAkgCCAMQQEgAiADIAQgBRD/BSIBBEBBACABayEHDAELIABBADoAuAILAkAgBkUNACAGIAYoAgQiAEEBazYCBCAADQAgBiAGKAIAKAIIEQAAIAYQKwsgDEEQaiQAIAcPCxA2AAsQTwALQZ2QAUHm9QBBhwJBs9kAEAEACyUAIAAoAhQgACgCGEcEQANAIAAQhQYgACgCFCAAKAIYRw0ACwsLmQMBCn8CQAJAIAAoAhQiBSAAKAIYIgFHBEAgASAFayIEQQJ1IgJBAkkNAkEBIQEgAkEBayIDQQFxIQYgBSgCACgCYCECIARBCEYEQEEAIQMMAgsgA0F+cSEJQQAhA0EAIQQDQCAFIAFBAWoiCkECdGooAgAoAmAiByAFIAFBAnRqKAIAKAJgIgggAiACIAhKIggbIgIgAiAHSiIHGyECIAogASADIAgbIAcbIQMgAUECaiEBIARBAmoiBCAJRw0ACwwBC0HeoAFB5vUAQZMBQeEvEAEACyAGRQ0AIAEgAyAFIAFBAnRqKAIAKAJgIAJIGyEDCyAAKAI0IgQgACgCMGoiAiAAKAIoIgYgACgCJCIBa0EIdEEBa0EAIAEgBkcbRgRAIABBIGoQ6AIgACgCNCIEIAAoAjBqIQIgACgCJCEBCyABIAJBCHZB/P//B3FqKAIAIAJB/wdxQQJ0aiAFIANBAnQiAWooAgA2AgAgACAEQQFqNgI0IAAoAhQgAWogACgCGEEEaygCADYCACAAIAAoAhhBBGs2AhgLVgECfyAAKAIMIgIgACgCCCIDRwRAQQEgAiADa0ECdSIAIABBAU0bIQJBACEAA0AgASADIABBAnRqKAIAKAIARgRAIAAPCyAAQQFqIgAgAkcNAAsLQX8LwwEBBX8gACgCDCIDIAAoAggiBGtBAnUhAAJAIAMgBEcEQEEBIAAgAEEBTRshBwNAAkAgBCAFQQJ0aigCACIGKAJcIAFHDQAgBigCbCACTA0AIAYoAmRBAkYNAwsgBUEBaiIFIAdHDQALC0F/IQUgAyAERg0AQQEgACAAQQFNGyEGQQAhAANAAkAgBCAAQQJ0aigCACIDKAJcIAFHDQAgAygCbCACTA0AIAMoAmRFDQAgAA8LIABBAWoiACAGRw0ACwsgBQt9AQN/QQEhAgJAIAENACAAKAIMIgMgACgCCCIEa0ECdSIBIAAoAgBJDQAgAyAERgRAQQAPC0EBIAEgAUEBTRshAkEAIQADQAJAIAQgAEECdGooAgAiAy0AaA0AIAMoAmQNAEEBDwsgAEEBaiIAIAJHDQALIAAgAUkhAgsgAgveDgEWfyMAQYARayIOJAACQCABQQBMDQAgAUEBdiEMAkAgAUEITwRAIAFBAnYhCSABQQJxIRUgDEH+////A3EhFiAOQUBrIQYgDiEEA0ACQCABQQFGDQAgAiADIBNsQQF0aiEKQQAhBUEAIQcgDEEBRwRAA0AgBiAFQQF0IghqIAogBSAMakEBdCILaiINLwEAIAggCmoiCC8BAGo7AQAgBiALaiAILwEAIA0vAQBrOwEAIAYgBUEBciIIQQF0IgtqIAogCCAMakEBdCIIaiINLwEAIAogC2oiCy8BAGo7AQAgBiAIaiALLwEAIA0vAQBrOwEAIAVBAmohBSAHQQJqIgcgFkcNAAsLIBVFDQAgBiAFQQF0IgdqIAogBSAMakEBdCIFaiIILwEAIAcgCmoiBy8BAGo7AQAgBSAGaiAHLwEAIAgvAQBrOwEACyAJIQcgDCEKA0ACQCAGIQUgBCEGIAdFDQAgB0H+////AXEhESAHQQFxIQ9BACEIA0BBACEEQQAhCyAHQQFHBEADQCAGIAQgCGoiDUEBdCIQaiAFIAcgDWpBAXQiFGovAQAiEiAFIBBqLwEAIhBqOwEAIAYgFGogECASazsBACAGIA1BAWoiDUEBdCIQaiAFIAcgDWpBAXQiDWovAQAiFCAFIBBqLwEAIhBqOwEAIAYgDWogECAUazsBACAEQQJqIQQgC0ECaiILIBFHDQALCyAPBEAgBiAEIAhqIgRBAXQiC2ogBSAEIAdqQQF0IgRqLwEAIg0gBSALai8BACILajsBACAEIAZqIAsgDWs7AQALIAggCmoiCCABSA0ACyAKQQF2IQogB0EDSyEYIAdBAXYhByAFIQQgGA0BCwsgASATbCEHQQAhBANAIA5BgAFqIhIgBCAHakEBdGogBiAEQQFyIgpBAXRqIggvAQAgBiAEQQF0aiILLwEAajsBACAHIApqQQF0IBJqIAsvAQAgCC8BAGs7AQAgBEECaiIEIAFIDQALIAUhBCATQQFqIhMgAUcNAAsMAQsgAUEBayIEQQJxIQogBEEBdkEBakF+cSEJIAxBAXQiCCAOQUBrIgRqIQsgBCAMQQJqQQF0IhNqIQ0gBCAMQQFqQQF0IhVqIRYgAUEDSSERA0ACQCABQQFGDQAgDiACIAMgB2xBAXRqIgQgCGovAQAiBSAELwEAIgZqOwFAIAsgBiAFazsBACABQQRJDQAgDiAEIBVqLwEAIgUgBC8BAiIGajsBQiAWIAYgBWs7AQAgDEECRg0AIA4gBCATai8BACIFIAQvAQQiBGo7AUQgDSAEIAVrOwEACyABIAdsIQVBACEGQQAhBCARRQRAA0AgDkGAAWoiFyAFIAZqQQF0aiAOQUBrIhIgBkEBciIPQQF0ai8BACIQIAZBAXQgEmovAQAiFGo7AQAgBSAPakEBdCAXaiAUIBBrOwEAIAZBAnIiDyAFakEBdCAXaiAGQQNyIhBBAXQgEmovAQAiFCAPQQF0IBJqLwEAIg9qOwEAIAUgEGpBAXQgF2ogDyAUazsBACAGQQRqIQYgBEECaiIEIAlHDQALCyAKRQRAIA5BgAFqIhcgBSAGakEBdGogDkFAayISIAZBAXIiBEEBdGovAQAiDyAGQQF0IBJqLwEAIgZqOwEAIAQgBWpBAXQgF2ogBiAPazsBAAsgB0EBaiIHIAFHDQALIA4iBUFAayEGCyABQQBMDQBBASABQQF2IgIgAkEBTRshEyABQQJ2IQNBACEMIAFBCEkhDQNAQQAhBAJAIAFBAUYEQCAFIQQMAQsDQCAGIARBAXRqIA5BgAFqIgkgAiAEaiIHIAFsIAxqQQF0ai8BACIKIAEgBGwgDGpBAXQgCWoiCS8BAGo7AQAgBiAHQQF0aiAJLwEAIAprOwEAIARBAWoiBCATRw0ACyADIQcgAiEKIAUhBCANDQADQCAGIQQgBSEGIAdFDQEgB0H+////AXEhFSAHQQFxIRZBACEIA0BBACEFQQAhCyAHQQFHBEADQCAGIAUgCGoiCUEBdCIRaiAEIAcgCWpBAXQiD2ovAQAiECAEIBFqLwEAIhFqOwEAIAYgD2ogESAQazsBACAGIAlBAWoiCUEBdCIRaiAEIAcgCWpBAXQiCWovAQAiDyAEIBFqLwEAIhFqOwEAIAYgCWogESAPazsBACAFQQJqIQUgC0ECaiILIBVHDQALCyAWBEAgBiAFIAhqIgVBAXQiCWogBCAFIAdqQQF0IgVqLwEAIgsgBCAJai8BACIJajsBACAFIAZqIAkgC2s7AQALIAggCmoiCCABSA0ACyAKQQF2IQogB0EDSyEZIAdBAXYhByAEIQUgGQ0ACwsgACAMQQF0aiEHQQAhBQNAIAcgASAFbEEBdGogBiAFQQFyIgpBAXRqIgkvAQAgBiAFQQF0aiIILwEAajsBACAHIAEgCmxBAXRqIAgvAQAgCS8BAGs7AQAgBUECaiIFIAFIDQALIAQhBSAMQQFqIgwgAUcNAAsLIA5BgBFqJAAL/8ICAix/An4jAEEQayIbJAACQAJAAkACQCAAKALEBCIEBEAgAEGlBGohAgwBCwJAIAAtAKQEIg1BAXFFBEAgAC0ApQRBAUcNAQsgACgCiBkgACgCjBlHDQAgAEHcEGoQhAYgAUUNAiABIAAoApARNgIADAILIABBpQRqIQIgDUEBcQ0AIAQNACAALQClBEEBcQ0AQQ0hAiABRQ0BIAFBATYCAAwBCyAAQdwQakEAEIgGRQRAQQkhAiABRQ0BIAFBATYCAAwBCyAbQQA6AA8gAQJ/An8gACgCxAQiBARAIAQEfyAAKAK0BCIFIAAoAsAEIgJBCHZB/P//B3FqKAIAIAJB/wdxQQJ0aigCACENIAAgBEEBazYCxAQgACACQQFqIgI2AsAEIAJBgBBPBEAgBSgCABAqIAAgACgCtARBBGo2ArQEIAAgACgCwARBgAhrNgLABAsgACAAKALIBCANKAIYazYCyAQgDQVBAAsiDUUNBCMAQSBrIhkkACANKAIUIQQgDSgCGCEFIBlBCGoiAkEANgIQIAJCADcDCCACIAU2AgQgAiAENgIAQUAhBwJAIAVFDQAgAiAEQQFqNgIAIAQxAAAhLiACIAVBAWsiAzYCBCACIC5COIYiLjcDCCADRQ0AIAIgBEECajYCACAEMQABIS8gAiAFQQJrIgM2AgQgAiAuIC9CMIaEIi43AwggA0UNACACIARBA2o2AgAgBDEAAiEvIAIgBUEDayIDNgIEIAIgLiAvQiiGhCIuNwMIIANFDQAgAiAEQQRqNgIAIAQxAAMhLyACIAVBBGsiAzYCBCACIC4gL0IghoQiLjcDCCADRQ0AIAIgBEEFajYCACAEMQAEIS8gAiAFQQVrIgM2AgQgAiAuIC9CGIaEIi43AwggA0UNACACIARBBmo2AgAgBDEABSEvIAIgBUEGayIDNgIEIAIgLiAvQhCGhCIuNwMIIANFDQAgAiAEQQdqNgIAIAQxAAYhLyACIAVBB2siAzYCBCACIC4gL0IIhoQiLjcDCCADRQ0AIAIgBEEIajYCACAEMQAHIS8gAiAFQQhrNgIEIAIgLiAvhDcDCEFIIQcLIAIgB0EHIAUgBUEHTxtBA3RqQUBrNgIQIBlBADoAByAZQQA7AAUgAkEBEOABIBkgAkEGEDE6AAUgGSACQQYQMToABiAZIAJBAxAxQQFrOgAHIAAgGS0ABSIEOgCEGSAAIARB+AFxQRBGOgCGGSAAIARBE2tB/wFxQQJJOgCFGQJAIBktAAYEQCAAQaQEaiANEJABDAELIAAoAvAOIBktAAdIBEAgAEGkBGogDRCQAQwBCyAEQR9NBEACfyAAIQQgGUEIaiEAIA0hBSMAQRBrIhAkAEHUChAsIgNBADYCmAYgA0IANwKQBiADQgA3AgQgA0G8CmoiFkIANwIAIANBADYC0AogA0IANwLICiADKAIIIQIgA0IANwIEAkAgAkUNACACIAIoAgQiBkEBazYCBCAGDQAgAiACKAIAKAIIEQAAIAIQKwsgA0EAOgAoIANBADYCJCADQQA6ABQgA0EANgIQIANBADsBDCADQQA2AgAgA0IANwIYIANBADsBICADQSpqEOQCIANCADcCiAYgA0GQAWpBAEHtARA0GiADQYADakEAQeYCEDQaIANBADYA9wUgA0IANwLwBSADQgA3AugFIANCADcC/AUgA0EAOgCEBiADQgA3ApwGIANCADcCpAYgA0IANwKsBiADIAMoApAGNgKUBiADQbQGahDkAiADQZgHakEAQaQDEDQaIANBADoAxAogAyADKALICjYCzAogEAJ/IAAhDSAQQQA6AA8gAygCCCEAIANCADcCBAJAIABFDQAgACAAKAIEIgJBAWs2AgQgAg0AIAAgACgCACgCCBEAACAAECsLIANBADoAKCADQQA2AiQgA0EAOgAUIANBADYCECADQQA7AQwgA0EANgIAIANCADcCGCADQQA7ASAgA0EqaiIHEOQCIANCADcCiAYgA0GQAWpBAEHtARA0IQogA0GAA2pBAEHmAhA0IQwgA0EANgD3BSADQgA3AvAFIANCADcC6AUgA0IANwL8BSADQQA6AIQGIANCADcCnAYgA0IANwKkBiADQgA3AqwGIAMgAygCkAY2ApQGIANBtAZqIgsQ5AIgA0GYB2pBAEGkAxA0GiADQQA6AMQKIANBADoAFCADIAMoAsgKNgLMCiADIA1BARAxOgAMIAQtAIYZBEAgAyANQQEQMToADQsgAyANEEQiADYCEAJAAkACQAJAIABB4fJ5RyAAQT9McUUNACAEIABBA3RqIgAoAtgGIgZFDQAgACgC3AYiAgRAIAIgAigCBEEBajYCBAsgAyAGNgIEIAMoAgghACADIAI2AggCQCAARQ0AIAAgACgCBCICQQFrNgIEIAINACAAIAAoAgAoAggRAAAgABArCyADKAIEIgIoAgQiBi0AAEUEQCAEQQRqQfIHQQAQUQwCCwJAAkACQAJAAkAgAy0ADEUEQEEAIQAgAyACLQAOBH8gDUEBEDEFQQALOgAUIAYoAoyEASEJA0AgACICQQFqIQBBASACdCAJSA0ACyANIAIQMSEJIAMtABQiDgRAIAlFBEAgEEEAOgAPIARBBGpB/QdBABBRQQAMDAtBECAEKAKsESIARQ0LGiADIAAoAgA2AgAgACgCBCECIAAoAggiCARAIAggCCgCBEEBajYCBAsgAyACNgIEIAMoAgghAiADIAg2AggCQCACRQ0AIAIgAigCBCIIQQFrNgIEIAgNACACIAIoAgAoAggRAAAgAhArCyADQQxqIABBDGpBhAYQMhoCQCAAIANHBEAgA0GQBmogACgCkAYiAiAAKAKUBiIIIAggAmtBAnUQ1wEgA0GcBmogAEGcBmpBoAQQMhogA0G8CmogAEG8CmoQ+AEgAyAALQDECjoAxAogA0HICmogACgCyAoiAiAAKALMCiIAIAAgAmtBAnUQ1wEMAQsgA0GcBmogAEGcBmpBoAQQMhogA0G8CmogAEG8CmoQ+AEgAyAALQDECjoAxAoLIANBAToAFCADQQA6AAwLIAMgCTYCGCAJQQBIDQUgCSAGKAKMhAFIDQEMBQsgA0EANgIYIANBADoAFCAGKAKMhAFBAEwNBCADKAIEIQIMAQsgAygCBCECIA4NAQtBACEAIAIsALBAQQBKBEADQCANQQEQ4AEgAEEBaiIAIAMoAgQsALBASA0ACwsgAyANEEQiADYCHCAAQeHyeUcgAEECTHFFBEAgBEEEakHvB0EAEFEMBQsgAyADKAIELQArBH8gDUEBEDEFQQELOgAgIAYtAOADQQFGBEAgAyANQQIQMToAIQtBACEIIANBADoAKCADQQA2AiQCQAJAAkACQAJAIAQtAIQZQRNrQf8BcUECTwRAIAMgDSAGKAKIBBAxNgIkIAMgDUEBEDEiADoAKAJAIABB/wFxRQRAIARBBGogBiANIAcgBigC9EQgBigC8ERrQeQAbSAGQfDEAGpBARD5BRogAyAGKAL0RCAGKALwRGtB5ABtNgKwBgwBCyAGKAL0RCAGKALwRCIHa0HkAG0hCEEAIQIDQCACIgBBAWohAkEBIAB0IAhIDQALAkAgAEUEQEEAIQAMAQsgDSAAEDEhACAGKAL0RCAGKALwRCIHa0HkAG0hCAsgCiAANgIAIAAgCE4NAyADIAA2ArAGIAcgAEHkAGxqIQcLIAsgB0HkABAyGgJAAkAgBi0A/EQEQAJAIAYoAoBFQQBKBEAgAyANEEQiADYClAFBCCEKIABB4fJ5Rw0BDAwLIANBADYClAELIAMgDRBEIgI2ApgBQQghCiACQeHyeUYNCiAGLAACQQJ0IAZqKAKMBCADLQCVByACIAMoApQBIgBqIgIgAy0AlAdqakgNBiACQQBMDQEgBEGwEmohCSADQYwCaiELIANB/AFqIREgBkGExgBqIQ8gBkGExQBqIRMgA0GcAWohFCAEQfARaiEVIARBsBFqIQ4gA0HsAWohFyADQawBaiESQQAhCEEAIQcDQAJAIAAgB0oEQCAGKAKARSEYQQAhAANAIAAiAkEBaiEAQQEgAnQgGEgNAAsgByAUaiIAIA0gAhAxIgI6AAAgAkH/AXEiAiAGKAKARUgEQCAOIAdBAnRqIBMgAkECdGooAgA2AgAgDyAALQAAaiEADAILIARBBGpB/wdBABBRDBALIBIgB0ECdCICaiIYIA0gBigCiAQQMTYCACAHIBdqIgAgDUEBEDE6AAAgAiAOaiAYKAIANgIACyAVIAdBAnQiAmogACwAACIYNgIAIAcgEWogDUEBEDEiADoAAAJAIABB/wFxBEAgAiALaiANEEQiADYCACAAQeHyeUcNAQwNC0EAIQAgAiALakEANgIACyAYQQBHIRgCQCAHRQ0AIAcgAygClAFGDQAgAiAJakEEaygCACAAaiEACyAIIBhqIQggAiAJaiAANgIAIAdBAWoiByADKAKUASIAIAMoApgBakgNAAsMAgsgA0IANwKUAQtBACEICyAGLQCkRgRAIAMgDUEBEDE6AMwCDAILIANBADoAzAIMAQsgA0IANwKUAQsCfyAGLQDfRARAIAMgDUEBEDE6AM0CQQAgBigC0IMBRQ0BGiANQQEQMQwBCyADQQA6AM0CQQALIQAgA0IANwLQAiADIAA6AM4CIAMoAhxBAUsNAyADIA1BARAxIgA6AM8CAkAgAEH/AXEEQCADIA0QRCIANgLQAiAAQeHyeUYNCyADIABBAWoiADYC0AIgAygCHARAIAMoAtQCIQIMAgsgAyANEEQiADYC1AIgAEHh8nlGDQsgAyAAQQFqIgI2AtQCIAMoAtACIQAMAQsgAyADKAIEIgIsABEiADYC0AIgAyACLAASIgI2AtQCC0EIIQogAEEQSg0FIAJBEEoNBSADIAggAy0AlwdqIgc2ApgHAkACQAJAIAMoAgQtAKlARQ0AIAdBAkgNAEEAIQIDQCACIgBBAWohAkEBIAB0IAdIDQALIAMgDUEBEDEiAjoA2AICQCACQf8BcUUNACADKALQAkEATA0AIANB2gJqIQdBACECA0AgAiAHaiANIAAQMToAACACQQFqIgIgAygC0AJIDQALCyADKAIcRQRAIAMgDUEBEDEiAjoA2QIgAkH/AXFFDQIgAygC1AJBAEwNAiADQeoCaiEHQQAhAgNAIAIgB2ogDSAAEDE6AAAgAkEBaiICIAMoAtQCSA0ACwwCCyADQQA6ANkCDAILIANBADsB2AILIAMoAhwNACADIA1BARAxOgD6AgsgAyADKAIELQAQBH8gDUEBEDEFQQALOgD7AiADLQDMAkUNAkEBIQAgAygCHEUEQCANQQEQMSEACyADIAA6APwCAkACQAJAIABB/wFxIgIEQCADKALQAkEBSg0BCyACDQEgAygC1AJBAkgNAQsgDCANEEQiAjYCACACQeHyeUcEQCADLQD8AiEADAILDAsLQQAhAiAMQQA2AgALAkAgAEH/AXEEQCACIAMoAtACTg0BDAQLIAIgAygC1AJIDQMLDAoLIARBBGpB9wdBABBRQQgMCgsgBEEEakH6B0EAEFEMBgsCQCADKAIEIgAtAClBACADKAIcIgJBAUYbRQRAIAAtACpFDQEgAg0BCwJ/AkAgBCADKAIQQQN0aigC2AYiAARAIAQgACwADUEDdGooAtgFIgJFDQEgAyANEEQiADoAhANBACEHAkAgAEEHSw0AIAIoAtwDBEAgDRBuIAMtAIQDaiIAQQdLDQEgAyAAOgCFAwsgA0GmBWohCSADQaYEaiEMIANBhgRqIRMgA0HGA2ohCyADQaYDaiEOIANBhgNqIRFBACEAAkAgAygC0AIiCkEATA0AA0AgACARaiANQQEQMToAACAAQQFqIgAgCkcNAAsCQCACKALcA0UNACAKQQBMDQBBACEAA0AgACAOaiANQQEQMToAACAAQQFqIgAgCkcNAAsLIApBAEwNAEEAIQADQAJAIAAgEWotAAAEQEEAIA0QbiIHQYABa0GAfkkNBxogCyAAQQF0akEBIAMtAIQDdCAHajsBAEEAIQcgDRBuIghBACACKALkhAEiD2tIDQQgCCAPSA0BDAQLIAsgAEEBdGpBASADLQCEA3Q7AQBBACEICyAAIBNqIAg6AAAgCSAAQQF0agJ/AkAgACAOai0AAARAIA0QbiIHQYABa0GAfk8NAUEADAgLIAwgAEECdGoiB0EBIAMtAIUDdCIIOwEAIAkgAEEBdGpBADoAACAHIAg7AQJBAAwBCyAMIABBAnRqIg9BASADLQCFA3QgB2o7AQBBACEHIA0QbiIUQQAgAigC6IQBIghBAnQiFWtIDQMgFCAVTg0DIAkgAEEBdGpBACAIayIVIAggFGogCCAPLgEAbCADLQCFA3VrIhQgCEEBayAIIBRKGyAUIBVIGzoAACANEG4iCEGAAWtBgH5JDQMgD0EBIAMtAIUDdCAIajsBAiANEG4iFEEAIAIoAuiEASIIQQJ0IhVrSA0DIBQgFU4NA0EAIAhrIhUgCCAUaiAIIA8uAQJsIAMtAIUDdWsiByAIQf8BaiAHIAhIGyAHIBVIGws6AAEgAEEBaiIAIApHDQALC0EBIQcgAygCHA0AIAMoAtQCIgpBAEwNAEEAIQADQCAAIBFqIA1BARAxOgAQIABBAWoiACAKRw0ACwJAIAIoAtwDRQ0AIApBAEwNAEEAIQADQCAAIA5qIA1BARAxOgAQIABBAWoiACAKRw0ACwsgCkEATA0AQQAhAANAAkAgACARai0AEARAQQAgDRBuIgdBgAFrQYB+SQ0GGiALIABBAXRqQQEgAy0AhAN0IAdqOwEgQQAhByANEG4iCEEAIAIoAuSEASIPa0gNAyAIIA9IDQEMAwsgCyAAQQF0akEBIAMtAIQDdDsBIEEAIQgLIAAgE2ogCDoAEAJ/IAAgDmotABAEQEEAIA0QbiIHQYABa0GAfkkNBhogDCAAQQJ0aiIPQUBrIhVBASADLQCFA3QgB2o7AQBBACEHIA0QbiIUQQAgAigC6IQBIghBAnQiF2tIDQMgFCAXTg0DIAkgAEEBdGpBACAIayIXIAggFGogCCAVLgEAbCADLQCFA3VrIhQgCEEBayAIIBRKGyAUIBdIGzoAICANEG4iCEGAAWtBgH5JDQMgD0EBIAMtAIUDdCAIajsBQiANEG4iFEEAIAIoAuiEASIIQQJ0IhVrSA0DIBQgFU4NA0EAIAhrIhUgCCAUaiAIIA8uAUJsIAMtAIUDdWsiByAIQf8BaiAHIAhIGyAHIBVIGwwBCyAMIABBAnRqIgdBQGtBASADLQCFA3QiCDsBACAJIABBAXRqQQA6ACAgByAIOwFCQQALIQhBASEHIAkgAEEBdGogCDoAISAAQQFqIgAgCkcNAAsLIAcMAgtB/iBByvUAQZgBQdPWABABAAtB+iBByvUAQZoBQdPWABABAAsNAAwICyADIA0QRCIANgLoBSAAQeHyeUYNBiADQQUgAGs2AqwGCyADIA0QbiIANgLsBSAAQeHyeUYNBQJAIAMoAgQiAC0AKARAIAMgDRBuIgA2AvAFIABB4fJ5Rg0HIAMgDRBuIgA2AvQFIABB4fJ5RwRAIAMoAgQhAAwCCwwHCyADQgA3AvAFCyAALQC4QEEBRgRAIAMgDUEBEDE6APgFIAMoAgQhAAsCQAJAIAAtADxFBEAgA0EAOgD5BSADIAAoAkA2AvwFIAMgACgCRDYCgAYMAQsgAyANQQEQMSICOgD5BSADIAMoAgQiACgCQDYC/AUgAyAAKAJENgKABiACQf8BcUUNACADIA1BARAxIgA6APoFIABB/wFxDQEgAyANEG4iADYC/AUgAEHh8nlGDQcgAyAAQQF0NgL8BSADIA0QbiIANgKABiAAQeHyeUYNByADIABBAXQ2AoAGDAELIAMgAC0APToA+gULAkAgAygCBCICLQA6IgBFDQACQCADLQDNAg0AIAMtAM4CDQAgAy0A+gUNAQsgAyANQQEQMToAhAYgAygCBCECDAELIAMgADoAhAYLAkACQCACLQAuRQRAIAItAC1FDQELIAMgDRBEIgA2AogGIABB4fJ5Rg0GAkAgAygCBCICLQAtRQ0AIAYoAoSEASADKAIYIAYoAvyDAW0gAGpKDQAMBwsCQCACLQAuRQ0AIAAgAigCNCACKAIwbEwNAAwHCwJAIANBkAZqIgIoAgQgAigCACIHa0ECdSIGIABJBEAgAiAAIAZrEKoBDAELIAAgBkkEQCACIAcgAEECdGo2AgQLCyADKAKIBkEATA0BIAMgDRBEIgA2AowGIABB4fJ5Rg0GIAMgAEEBaiICNgKMBkEIIQogAEEfSg0CIAMoAogGQQBMDQFBASEAIA0gAhAxIQIgAygCkAYgAkEBajYCACADKAKIBkECSA0BA0AgDSADKAKMBhAxIQIgAygCkAYgAEECdGoiBiACIAZBBGsoAgBqQQFqNgIAIABBAWoiACADKAKIBkgNAAsMAQsgA0EANgKIBgsCQCADKAIELQCxQEUNACADIA0QRCICNgKcBiACQeHyeUYNBSACQegHSg0FQQAhACACQQBMDQADQCANQQgQMRogAEEBaiIAIAMoApwGSA0ACwsgAyADKALsBSADKAIEKAIUajYCoAZBACEAAkACQAJAAkAgAygCHA4DAQACAwsgAywA+wJBAWohAAwBC0ECIAMsAPsCayEACyADIAA2AqQGCyADQQUgAygC6AVrNgKsBiAQQQE6AA9BACEKCyAKDAULIARBBGpB/AdBABBRQQgMBAsgBEEEakHxB0EAEFFBAAwDCyAQQQA6AA9BAAwCCyAEQQRqQe8HQQAQUUEIDAELIARBBGpBCEEAEFFBCAs2AggCQAJ/IBAtAA9FBEAgBCgCqBEiAARAIABBAjoAuAILIARBpARqIAUQkAEgAygCyAoiAARAIAMgADYCzAogAygC0AoaIAAQKgsgFhDEARogAygCkAYiAARAIAMgADYClAYgAygCmAYaIAAQKgsCQCADKAIIIgBFDQAgACAAKAIEIgJBAWs2AgQgAg0AIAAgACgCACgCCBEAACAAECsLIAMQKiAQKAIIDAELIAQoApAEIgZBAE4EQAJAIwBB4AZrIgAkAEGUrwMhAgJAAkACQAJAAkAgBkEBaw4CAQACC0GQrwMhAgsgAigCACICQfSNAkEAEDAgBCADKAIQQQN0aigC2AYiBkUEQCACQevJAUEAEDAMAQsgBi0AAEUNASAEIAYsAA1BA3RqKALYBSIJRQRAIAJB08kBQQAQMAwBCyAJLQAARQ0CIAAgAywADDYC0AYgAkHJ8gEgAEHQBmoQMCAELQCEGUH4AXFBEEYEQCAAIAMsAA02AsAGIAJBx/cBIABBwAZqEDALIAAgAygCEDYCsAYgAkGZ/QEgAEGwBmoQMCADLQAMRQRAIAAgAywAFDYCoAYgAkGc9wEgAEGgBmoQMCAAIAMoAhg2ApAGIAJBoYMCIABBkAZqEDALIABB0ABByQAgAygCHCIHQQFGG0HCACAHGzYCgAYgAkHliAIgAEGABmoQMCAGLQArBEAgACADLAAgNgLwBSACQeGGAiAAQfAFahAwCyAJLQDgA0EBRgRAIAAgAywAITYC4AUgAkGMhwIgAEHgBWoQMAsgACADKAIkNgLQBSACQZWBAiAAQdAFahAwAkAgBC0AhBlBE2tB/wFxQQJJDQAgACADLAAoNgLABSACQbDwASAAQcAFahAwIAkoAvREIAkoAvBEayEHAkACfyADLQAoRQRAIAAgB0HkAG02AqAFIAJB08IBIABBoAVqEDAgA0EqagwBCyAHQeUASA0BIAAgAygCkAE2ArAFIAJBjPsBIABBsAVqEDAgCSgC8EQgAygCkAFB5ABsagsgAhD4BQsgCS0A/EQEQCAJKAKARUEASgRAIAAgAygClAE2ApAFIAJBkogCIABBkAVqEDALIAAgAygCmAE2AoAFIAJBt4cCIABBgAVqEDALIAktAKRGRQ0AIAAgAywAzAI2AvAEIAJBwd0BIABB8ARqEDALIAktAN9EBEAgACADLADNAjYC4AQgAkGmgAIgAEHgBGoQMCAAIAMsAM4CNgLQBCACQfP8ASAAQdAEahAwCyADKAIcQQFNBEAgACADLADPAjYCwAQgAkGc2wEgAEHABGoQMCADLQDPAiEHIAAgAygC0AI2ArAEIABB0JACQYGfASAHGzYCtAQgAkGjxgEgAEGwBGoQMCADKAIcRQRAIAMtAM8CIQcgACADKALUAjYCoAQgAEHQkAJBgZ8BIAcbNgKkBCACQfvFASAAQaAEahAwCwJAIAYtAKlARQ0AIAMoApgHQQJIDQAgACADLADYAjYCkAQgAkGy4gEgAEGQBGoQMAJAIAMtANgCRQ0AIAMoAtACQQBMDQAgA0HaAmohCEEAIQcDQCAAIAcgCGotAAA2AoQEIAAgBzYCgAQgAkGj0wEgAEGABGoQMCAHQQFqIgcgAygC0AJIDQALCyAAIAMsANkCNgLwAyACQYriASAAQfADahAwIAMtANkCRQ0AIAMoAtQCQQBMDQAgA0HqAmohCEEAIQcDQCAAIAcgCGotAAA2AuQDIAAgBzYC4AMgAkGj0wEgAEHgA2oQMCAHQQFqIgcgAygC1AJIDQALCyADKAIcRQRAIAAgAywA+gI2AtADIAJB3oICIABB0ANqEDALIAAgAywA+wI2AsADIAJB7YMCIABBwANqEDAgAy0AzAIEQCAAIAMsAPwCNgKwAyACQej1ASAAQbADahAwIAAgAygCgAM2AqADIAJB3/4BIABBoANqEDALAkAgBi0AKUEAIAMoAhwiB0EBRhtFBEAgBi0AKkUNASAHDQELIAAgAy0AhAM2ApADIAJB9/YBIABBkANqEDAgCSgC3AMEQCAAIAMtAIUDNgKAAyACQb/5ASAAQYADahAwCyADQaYFaiEJIANBpgRqIQggA0GGBGohCiADQcYDaiEMIAMoAtACIgtBAEoEQEEAIQcDQCAAIAwgB0EBdCIOai4BADYC+AIgACAHNgL0AiAAQQA2AvACIAJBzIACIABB8AJqEDAgACAHIApqLAAANgLoAiAAIAc2AuQCIABBADYC4AIgAkG6/gEgAEHgAmoQMCAAIAggB0ECdGoiES4BADYC3AIgAEEANgLYAiAAIAc2AtQCIABBADYC0AIgAkGN9gEgAEHQAmoQMCAAIAkgDmoiDiwAADYCzAIgAEEANgLIAiAAIAc2AsQCIABBADYCwAIgAkGz9gEgAEHAAmoQMCAAIBEuAQI2ArwCIABBATYCuAIgACAHNgK0AiAAQQA2ArACIAJBjfYBIABBsAJqEDAgACAOLAABNgKsAiAAQQE2AqgCIAAgBzYCpAIgAEEANgKgAiACQbP2ASAAQaACahAwIAdBAWoiByALRw0ACwsgAygCHA0AIAMoAtQCIgtBAEwNAEEAIQcDQCAAIAwgB0EBdCIOai4BIDYCmAIgACAHNgKUAiAAQQE2ApACIAJBzIACIABBkAJqEDAgACAHIApqLAAQNgKIAiAAIAc2AoQCIABBATYCgAIgAkG6/gEgAEGAAmoQMCAAIAggB0ECdGoiEUFAay4BADYC/AEgAEEANgL4ASAAIAc2AvQBIABBATYC8AEgAkGN9gEgAEHwAWoQMCAAIAkgDmoiDiwAIDYC7AEgAEEANgLoASAAIAc2AuQBIABBATYC4AEgAkGz9gEgAEHgAWoQMCAAIBEuAUI2AtwBIABBATYC2AEgACAHNgLUASAAQQE2AtABIAJBjfYBIABB0AFqEDAgACAOLAAhNgLMASAAQQE2AsgBIAAgBzYCxAEgAEEBNgLAASACQbP2ASAAQcABahAwIAdBAWoiByALRw0ACwsgACADKALoBTYCsAEgAkGP5QEgAEGwAWoQMAsgACADKALsBTYCoAEgAkHb+AEgAEGgAWoQMCAGLQAoBEAgACADKALwBTYCkAEgAkGR7AEgAEGQAWoQMCAAIAMoAvQFNgKAASACQfTrASAAQYABahAwCyAGLQA8BEAgACADLAD5BTYCcCACQfbaASAAQfAAahAwCyADLQD5BSEHIAAgAywA+gU2AmAgAEHfngFB250BIAcbNgJkIAJBzMUBIABB4ABqEDACQCADLQD5BUUNACADLQD6BQ0AIAAgAygC/AU2AlAgAkHs4wEgAEHQAGoQMCAAIAMoAoAGNgJAIAJB0+gBIABBQGsQMAsCQCAGLQA6RQ0AAkAgAy0AzQINACADLQDOAg0AIAMtAPoFDQELIAAgAywAhAY2AjAgAkGO3QEgAEEwahAwCyAGLQAuRQRAIAYtAC1FDQELIAAgAygCiAY2AiAgAkGR6QEgAEEgahAwIAMoAogGQQBMDQAgACADKAKMBjYCECACQeKEAiAAQRBqEDAgAygCiAZBAEwNAEEAIQcDQCAAIAMoApAGIAdBAnRqKAIANgIEIAAgBzYCACACQczhASAAEDAgB0EBaiIHIAMoAogGSA0ACwsgAEHgBmokAAwCC0GO8gBByvUAQYcKQbAwEAEAC0GA8gBByvUAQY4KQbAwEAEACwsgBSkDCCEuIAUoAhAhDyMAQdAAayIMJAAgEEEANgIIIARBADoAlBkCfwJAAkACQCAEIAMoAhAiAkEDdGoiBigC2AYiAARAIAAtAAANAQsgDCACNgIAIwBBEGsiAiQAAkBBoK4GKAIAQfGxf0gNAEGlrgYtAAANAEGUrwMoAgAhAEGDygEtAABBKkYiBkUEQEH+wgFBBUEBIAAQeBoLIAIgDDYCDCAAIAZBg8oBaiAMQY8KQZAKENsCGiAAEM8BGgsgAkEQaiQAIAQoAqgRKAJwIgAoAlQiAkEURgRAIABB6Qc2AlAMAgsgACACQQFqNgJUIAAgAkECdGpB8Qc2AgQMAQsgBigC3AYiAgRAIAIgAigCBEEBajYCBAsgBCAANgLoCiAEKALsCiEAIAQgAjYC7AoCQCAARQ0AIAAgACgCBCICQQFrNgIEIAINACAAIAAoAgAoAggRAAAgABArCyAEIAQoAugKLAANQQN0aiIAKALYBSEGIAAoAtwFIgIEQCACIAIoAgRBAWo2AgQLIAQgBjYC4AogBCgC5AohACAEIAI2AuQKAkAgAEUNACAAIAAoAgQiAkEBazYCBCACDQAgACAAKAIAKAIIEQAAIAAQKwsgBCAEKALgCiwAAUEDdGoiACgC2AQhBiAAKALcBCICBEAgAiACKAIEQQFqNgIECyAEIAY2AtgKIAQoAtwKIQAgBCACNgLcCgJAIABFDQAgACAAKAIEIgJBAWs2AgQgAg0AIAAgACgCACgCCBEAACAAECsLAkACQAJAAkAgBCgC4AoiAEUEQCAEKALYCiIADQFBBiEAIAQtALwQQQZHDQMMBAsgACwAAiIHQQFrIgAgBCwAvBBHDQEMAwsgBCwAvBAgACgCCCIHQQFrRg0CIAdBAWshAAsgB0EATA0BCyAEQcAQaiETIARB9A5qIQogAEEBaiELA0ACQCAAQeQAbCICQeQAaiALbSIIIAIgC20iBkgEQCAAIQIMAQsgBCgC4A4hCQJ/IAYgCGpBAXEEQCAAIQIgBgwBCyAKIAZBAXRqIgJB5ABBACAAIAlKGzoAASACIAAgCSAAIAlIGyICOgAAIAZBAWoLIQcgBiAIRg0AIAggBmshDiACIQADQCAKIAdBAXRqIhEgACAJIAAgCUgbIgI6AAAgEUHkACAHIAZrQeQAbCAObSAAIAlKGzoAASAKIAdBAWoiEUEBdGoiACARIAZrQeQAbCAObToAASAAIAI6AAAgB0ECaiEHIAIhACAIIBFHDQALCyATIAJBAnRqIAg2AgAgAkEBayEAIAJBAEoNAAsLIAQgBCAEKALkDkEBdGoiAEH0DmosAAAiAjYC6A4gBCAAQfUOaiwAADYC7A4gBCACNgLwDiADLQAMBEAgBCADKAIkNgKUESAELQCVBCECIAQoAuAKIgAtAN9EIQYgDCAANgJIIAwgBCgC5AoiADYCTCAABEAgACAAKAIEQQFqNgIECyAMIAwpAkg3AyggBEHcEGogDEEoaiAEIC4gDyACIAZFckEBcRCDBiIAQQBIBEAgEEEAIABrNgIIQQAMBAtBACECIAAgBCgC6BAgBCgC5BAiBmtBAnVJBEAgBiAAQQJ0aigCACECCyAEIAI2AqgRIAIgGS0ABzoAvAIgAiAZLwAFOwC6AiAEKAKoESEAIAwgBCgC2Ao2AkAgDCAEKALcCiICNgJEIAIEQCACIAIoAgRBAWo2AgQLIAwgBCgC4Ao2AjggDCAEKALkCiICNgI8IAIEQCACIAIoAgRBAWo2AgQLIAwgBCgC6Ao2AjAgDCAEKALsCiICNgI0IAIEQCACIAIoAgRBAWo2AgQLIAwgDCkCQDcDICAMIAwpAjg3AxggDCAMKQIwNwMQIAwoAiAhAiAMKAIkIgYEQCAGIAYoAgRBAWo2AgQLIAAgAjYCdCAAKAJ4IQIgACAGNgJ4AkAgAkUNACACIAIoAgQiBkEBazYCBCAGDQAgAiACKAIAKAIIEQAAIAIQKwsgDCgCGCECIAwoAhwiBgRAIAYgBigCBEEBajYCBAsgACACNgJ8IAAoAoABIQIgACAGNgKAAQJAIAJFDQAgAiACKAIEIgZBAWs2AgQgBg0AIAIgAigCACgCCBEAACACECsLIAwoAhAhAiAMKAIUIgYEQCAGIAYoAgRBAWo2AgQLIAAgAjYChAEgACgCiAEhAiAAIAY2AogBAkAgAkUNACACIAIoAgQiAEEBazYCBCAADQAgAiACKAIAKAIIEQAAIAIQKwsCQCAMKAIUIgBFDQAgACAAKAIEIgJBAWs2AgQgAg0AIAAgACgCACgCCBEAACAAECsLAkAgDCgCHCIARQ0AIAAgACgCBCICQQFrNgIEIAINACAAIAAoAgAoAggRAAAgABArCwJAIAwoAiQiAEUNACAAIAAoAgQiAkEBazYCBCACDQAgACAAKAIAKAIIEQAAIAAQKwsgBCgCqBEiACAENgJwQQAhB0EAIQggACgCoAEiAgRAIAJBACAAKAKkAUEDbBA0GgsgACgCjAEiAgRAIAJBACAAKAKQAUEYbBA0GgsgACgChAIiAgRAIAJBACAAKAKIAhA0GgsCQCAAKAKQASIGQQBMDQAgACgCwAIhAkEAIQAgBkEITwRAIAZB+P///wdxIQkDQCACIABBzABsakEANgIAIAIgAEEBckHMAGxqQQA2AgAgAiAAQQJyQcwAbGpBADYCACACIABBA3JBzABsakEANgIAIAIgAEEEckHMAGxqQQA2AgAgAiAAQQVyQcwAbGpBADYCACACIABBBnJBzABsakEANgIAIAIgAEEHckHMAGxqQQA2AgAgAEEIaiEAIAhBCGoiCCAJRw0ACwsgBkEHcSIGRQ0AA0AgAiAAQcwAbGpBADYCACAAQQFqIQAgB0EBaiIHIAZHDQALCwJAIAQtAIQZIgBB+AFxQRBHDQACQAJAIABBE2tB/wFxQQJJDQAgAEESRiAAQf4BcUEQRnINACAELQCYEQ0AIAQtAJsRQQFHDQELIARBADoAmxEgBEEBOgCZEQwBCyAEQQA7AJkRCwJAAkAgBC0AhBlB/gFxQQhHDQAgBC0AmRFBAUcNACAEKAKoEUEAOgBoDAELIAQoAqgRIAMtACBBAEc6AGgLQQAhBgJAAkAgBC0AhBlB+AFxQRBHDQAgBC0AmRFBAUcNACAEQQE6AJQZIARBADYCnBEgAygCJCEADAELIAQoAuAKKALkgwEhAiAEAn8CQCADKAIkIgAgBCgCoBEiBk4NACAGIABrIAJBAm1IDQAgBCgCpBEgAmoMAQsCQCAAIAZMDQAgACAGayACQQJtTA0AIAQoAqQRIAJrDAELIAQoAqQRCyIGNgKcEQsgBCgCqBEiAiAANgJcIAIgACAGajYCYAJAIAItALwCDQAgBC0AhBkiAEHxAXFFDQAgAEH+AXEiAEEIRg0AIABBBkYNACAEIAMoAiQ2AqARIAQgBCgCnBE2AqQRCyADLQAMBEAgBCgCqBFBATYCZEEAIQZBACEHQQAhCkEAIQ4jAEEgayIJJAAgCUEANgIcIAlCADcCFCAEKAKoESIAKAIAIRECQAJAAkAgBC0AhBlB+AFxQRBHDQAgBC0AmRFBAUcNACAEKALoECILIAQoAuQQIghGDQAgACgCYCEUA0ACQCAIIApBAnRqKAIAIg8oAmRFDQAgDygCYCAUTg0AIA8oAgAiEyAPKAJsTw0AAkAgByAOSQRAIAcgEzYCACAHQQRqIQcMAQsgByAGa0ECdSICQQFqIgBBgICAgARPDQxB/////wMgDiAGayIOQQF1IhUgACAAIBVJGyAOQfz///8HTxsiAAR/IABBgICAgARPDRYgAEECdBAsBUEACyIOIAJBAnRqIgIgEzYCACAOIABBAnRqIQ4gAiEAIAYgB0cEQANAIABBBGsiACAHQQRrIgcoAgA2AgAgBiAHRw0ACwsgAkEEaiEHIAkgDjYCHCAJIAA2AhQgBgRAIAYQKiAEKALoECELIAQoAuQQIQgLIAAhBgsgCSAHNgIYIA8gDygCADYCbAsgCkEBaiIKIAsgCGtBAnVJDQALCwJAIAQtAIQZQRNrQf8BcUECSQRAIARCADcC8BMgBEGAFGpBADYCACAEQfgTakIANwIADAELQQAhCkEAIQdBACEGIAMtAJQHIggEQCADQbQGaiELIARBhBVqIQ4gBEGEFGohDyADQfQGaiETIAQoAqgRIRRBACEAA0AgDyAGQQJ0aiAOIAdBAnRqIAAgE2otAAAiAhsgFCgCYCALIABBAXRqLgEAajYCACAGIAJBAEdqIQYgByACRWohByAAQQFqIgAgCEcNAAsLIAQgBjYC8BMgAy0AlQciBgRAIARBhBVqIQggBEHEFGohCyADQdQGaiEOIANBhAdqIQ8gBCgCqBEhE0EAIQADQCALIApBAnRqIAggB0ECdGogACAPai0AACICGyATKAJgIA4gAEEBdGouAQBqNgIAIAogAkEAR2ohCiAHIAJFaiEHIABBAWoiACAGRw0ACwsgBCAHNgL4EyAEIAo2AvQTAkAgAygCmAEgAygClAFqQQBMBEBBACEGQQAhCAwBCyAEQbATaiELIARBhBZqIQ4gBEHwEmohDyAEQcQVaiETIARB8BFqIRQgBEGwEmohFSADQfwBaiEXIARBsBFqIRIgBCgC4AohGCAEKAKoESEcQQAhB0EAIQhBACEGA0AgEiAHQQJ0IgJqKAIAIQAgByAXaiIKLQAABEAgHCgCYCAAaiADKAIkIBgoAuSDASACIBVqKAIAbGprIQALAkAgAiAUaigCAARAIBMgCEECdCICaiAANgIAIAIgD2ogCiwAADYCACAIQQFqIQgMAQsgDiAGQQJ0IgJqIAA2AgAgAiALaiAKLAAANgIAIAZBAWohBgsgB0EBaiIHIAMoApgBIAMoApQBakgNAAsLIAQgBjYCgBQgBCAINgL8EwsgBCgC5BAhACAEKALoECECIAlBADYCECAJQgA3AgggACACRwRAIAIgAGtBAnUiAEEASA0JIAkgABAsIgI2AgggCSAAIAJqIgY2AhAgAkEAIAAQNBogCSAGNgIMCyAEQdwQaiEAAkAgBCgC/BMiBkEATA0AIARBhBhqIQsgBEHEFWohDiAEQfASaiEPQQAhCgNAIA4gCkECdCICaiIIKAIAIQYgAiALaiITAn8gAiAPaigCAEUEQCAAIAYgERCHBgwBCyAAIAYgEUEBEJ0CCyIHNgIAAkACfyAHQQBOBEAgCSgCCCAHagwBCyAEIAQoAuAKIAgoAgBBARDuAiIHQQBIDQEgBCgC5BAhAiAEKALoECEGIAlBADoABwJAIAYgAmtBAnUiAiAJKAIMIAkoAggiCGsiBksEQCAJQQhqIAIgBmsgCUEHahDtAiAJKAIIIQgMAQsgAiAGTw0AIAkgAiAIajYCDAsgEyAHNgIAIAcgCGoLQQE6AAAgBCgC5BAgB0ECdGooAgAtALgCBEAgBCgCqBFBBDoAuAILIApBAWoiCiAEKAL8EyIGSA0BDAILC0EAIAdrIQcMAgsgBCgCgBQiC0EASgRAIARBxBhqIQ4gBEGEFmohDyAEQbATaiETQQAhCgJAA0AgDyAKQQJ0IgJqIgcoAgAhBiACIA5qIgsCfyACIBNqKAIARQRAIAAgBiAREIcGDAELIAAgBiARQQEQnQILIgI2AgACQAJ/IAJBAE4EQCAJKAIIIAJqDAELIAQgBCgC4AogBygCAEEBEO4CIgJBAEgNASAEKALkECEGIAQoAugQIQcgCUEAOgAHAkAgByAGa0ECdSIGIAkoAgwgCSgCCCIIayIHSwRAIAlBCGogBiAHayAJQQdqEO0CIAkoAgghCAwBCyAGIAdPDQAgCSAGIAhqNgIMCyALIAI2AgAgAiAIagtBAToAACAKQQFqIgogBCgCgBQiC04NAgwBCwtBACACayEHDAMLIAQoAvwTIQYLAkAgBkEATA0AIARBhBhqIQ8gBCgC5BAhAkEAIQhBACEHIAZBBE8EQCAGQfz///8HcSETQQAhDgNAIAIgDyAHQQJ0aiIKKAIAQQJ0aigCAEECNgJkIAIgCigCBEECdGooAgBBAjYCZCACIAooAghBAnRqKAIAQQI2AmQgAiAKKAIMQQJ0aigCAEECNgJkIAdBBGohByAOQQRqIg4gE0cNAAsLIAZBA3EiBkUNAANAIAIgDyAHQQJ0aigCAEECdGooAgBBAjYCZCAHQQFqIQcgCEEBaiIIIAZHDQALCwJAIAtBAEwNACALQQNxIQogBEHEGGohDiAEKALkECECQQAhCEEAIQcgC0EETwRAIAtB/P///wdxIQ9BACELA0AgAiAOIAdBAnRqIgYoAgBBAnRqKAIAQQI2AmQgAiAGKAIEQQJ0aigCAEECNgJkIAIgBigCCEECdGooAgBBAjYCZCACIAYoAgxBAnRqKAIAQQI2AmQgB0EEaiEHIAtBBGoiCyAPRw0ACwsgCkUNAANAIAIgDiAHQQJ0aigCAEECdGooAgBBAjYCZCAHQQFqIQcgCEEBaiIIIApHDQALCwJAIAQoAvATQQBMDQAgBEHEFmohCyAEQYQUaiEOQQAhCgNAAkAgCyAKQQJ0IgJqIgYgACACIA5qIgIoAgAgEUEAEJ0CIgc2AgACfyAHQQBOBEAgCSgCCCAHagwBCyAEIAQoAuAKIAIoAgBBABDuAiIHQQBIDQEgBiAHNgIAIAQoAuQQIQIgBCgC6BAhBiAJQQA6AAcCQCAGIAJrQQJ1IgIgCSgCDCAJKAIIIgZrIghLBEAgCUEIaiACIAhrIAlBB2oQ7QIgCSgCCCEGDAELIAIgCE8NACAJIAIgBmo2AgwLIAYgB2oLQQE6AAAgBCgC5BAgB0ECdGooAgAtALgCBEAgBCgCqBFBBDoAuAILIApBAWoiCiAEKALwE0gNAQwCCwtBACAHayEHDAILAkAgBCgC9BNBAEwNACAEQYQXaiELIARBxBRqIQ5BACEKA0ACQCALIApBAnQiAmoiBiAAIAIgDmoiAigCACARQQAQnQIiBzYCAAJ/IAdBAE4EQCAJKAIIIAdqDAELIAQgBCgC4AogAigCAEEAEO4CIgdBAEgNASAGIAc2AgAgBCgC5BAhAiAEKALoECEGIAlBADoABwJAIAYgAmtBAnUiAiAJKAIMIAkoAggiBmsiCEsEQCAJQQhqIAIgCGsgCUEHahDtAiAJKAIIIQYMAQsgAiAITw0AIAkgAiAGajYCDAsgBiAHagtBAToAACAEKALkECAHQQJ0aigCAC0AuAIEQCAEKAKoEUEEOgC4AgsgCkEBaiIKIAQoAvQTSA0BDAILC0EAIAdrIQcMAgsgBCgC+BNBAEoEQCAEQcQXaiEGIARBhBVqIQhBACEHA0AgBiAHQQJ0IgJqIAAgAiAIaigCACARQQAQnQIiAjYCACACQQBOBEAgCSgCCCACakEBOgAACyAHQQFqIgcgBCgC+BNIDQALC0EAIQIgBCgC6BAiBiAEKALkECIKa0EATA0AA0ACQCAJKAIMIAkoAggiAGsgAksEQCAAIAJqLQAADQELIAogAkECdGooAgAiDiAEKAKoESIARg0AIA4oAmwgACgCAE0NACAOKAJkRQ0AIA4oAgAhCwJAIAkoAhgiByAJKAIcIhFJBEAgByALNgIAIAdBBGohCwwBCyAHIAkoAhQiCGtBAnUiD0EBaiIAQYCAgIAETw0LQf////8DIBEgCGsiEUEBdSITIAAgACATSRsgEUH8////B08bIhEEfyARQYCAgIAETw0VIBFBAnQQLAVBAAsiEyAPQQJ0aiIAIAs2AgAgAEEEaiELIAcgCEcEQANAIABBBGsiACAHQQRrIgcoAgA2AgAgByAIRw0ACwsgCSATIBFBAnRqNgIcIAkgCzYCGCAJIAA2AhQgCEUNACAIECogBCgC5BAhCiAEKALoECEGCyAJIAs2AhggDiAEKAKoESgCADYCbAsgAkEBaiICIAYgCmtBAnVIDQALDAALQQAhByADQcgKaiIAIAlBFGpGDQAgACAJKAIUIgAgCSgCGCICIAIgAGtBAnUQ1wELIAkoAggiAARAIAkgADYCDCAJKAIQGiAAECoLIAkoAhQiAARAIAkgADYCGCAJKAIcGiAAECoLIAlBIGokACAQIAc2AghBACAHDQQaCyAEKAKoESIAQQE2AmRBoK4GIAAoAmA2AgAgBEEAOgCYEQwCCyAEKAKoEQ0BC0EADAELIAMoAhxBAU0EQEEAAn9BACEAIwBB4ANrIgIkACADKALQAiEHIAMoApgHIQkgAkEAQeAAEDQhAiAEQYQYaiEKIARBhBdqIQsgBEHEFmohDiAHIAkgByAJShsiBkEBayEIIAQoAvwTIhRBAWshESAEKAL0EyIVQQFrIQ8gBCgC8BMiF0EBayETIBdBAEwhFwJAAkACQAJAA0AgACAGTg0BIBdFBEAgAkGgAmogAEECdGogDiAIIABrIhIgEyASIBNJGyISQQJ0QQRqEDIaIAAgEmpBAWohAAsCQCAVQQBMDQAgACAGTg0AIAJBoAJqIABBAnRqIAsgCCAAayISIA8gDyASSxsiEkECdEEEahAyGiAAIBJqQQFqIQALAkAgFEEATA0AIAAgBk4NACAAIAJqQQEgCCAAayISIBEgESASSxsiEkEBaiIYEDQaIAJBoAJqIABBAnRqIAogEkECdEEEahAyGiAAIBhqIQALIAANAAsgBCgCVCIAQRRGBEAgBEHpBzYCUEEAIQYMAgsgBCAAQQFqNgJUIAQgAEECdGpB+Ac2AgRBACEGDAELIAdBEEoNASAHQQBKBEAgA0GcCWohDyADQZwIaiETIANBnApqIRQgA0GcB2ohFSADQdoCaiEXQQAhACADLQDYAiESA0AgACEGIBIEQCAAIBdqLQAAIQYLIBUgAEECdCIIaiIRIAJBoAJqIAZBAnRqKAIANgIAIAAgFGogAiAGai0AADoAAEEAIQYgESgCACIRIAQoAugQIAQoAuQQIhhrQQJ1Tw0CIBggEUECdGooAgAiEUUNAiAIIBNqIBEoAmA2AgAgCCAPaiARKAJkNgIAIABBAWoiACAHRw0ACwtBASEGIAMoAhwNACAEKAL8EyIUQQFrIQggBCgC8BMiFUEBayERIAQoAvQTIhdBAWshDyADKALUAiIHIAkgByAJShsiBkEBayEJIAJBMGohE0EAIQAgF0EATCEXAkADQCAAIAZODQEgF0UEQCACQeAAaiAAQQJ0aiALIAkgAGsiEiAPIA8gEksbIhJBAnRBBGoQMhogACASakEBaiEACwJAIBVBAEwNACAAIAZODQAgAkHgAGogAEECdGogDiAJIABrIhIgESARIBJLGyISQQJ0QQRqEDIaIAAgEmpBAWohAAsCQCAUQQBMDQAgACAGTg0AIAAgE2pBASAJIABrIhIgCCAIIBJLGyISQQFqIhgQNBogAkHgAGogAEECdGogCiASQQJ0QQRqEDIaIAAgGGohAAsgAA0ACyAEKAJUIgBBFEYEQCAEQekHNgJQQQAhBgwCCyAEIABBAWo2AlQgBCAAQQJ0akH4BzYCBEEAIQYMAQsgB0EQSg0CQQEhBiAHQQBMDQAgA0HcCWohCiADQdwIaiELIANBrApqIQ4gA0HcB2ohESADQeoCaiEPQQAhACADLQDZAiEUA0AgACEGIBQEQCAAIA9qLQAAIQYLIBEgAEECdCIJaiIIIAJB4ABqIAZBAnRqKAIANgIAIAAgDmogBiATai0AADoAAEEAIQYgCCgCACIIIAQoAugQIAQoAuQQIhVrQQJ1Tw0BIBUgCEECdGooAgAiCEUNASAJIAtqIAgoAmA2AgAgCSAKaiAIKAJkNgIAQQEhBiAAQQFqIgAgB0cNAAsLIAJB4ANqJAAgBgwCC0GYiQFBvPQAQYcOQeUeEAEAC0H3iAFBvPQAQbwOQeUeEAEAC0UNARoLIAMgBCgCrBFBqAZqIANBGGogAy0AFBsoAgA2AqgGIAQgAzYCrBFBAQshISAMQdAAaiQAIAQoAqgRIQAgIUUEQCAABEAgAEECOgC4AgsgBEGkBGogBRCQASADKALICiIABEAgAyAANgLMCiADKALQChogABAqCyAWEMQBGiADKAKQBiIABEAgAyAANgKUBiADKAKYBhogABAqCwJAIAMoAggiAEUNACAAIAAoAgQiAkEBazYCBCACDQAgACAAKAIAKAIIEQAAIAAQKwsgAxAqIBAoAggMAQsgAyAAKAI4IgYgACgCNCICa0ECdSIHNgIAAkAgACgCPCIIIAZLBEAgBiADNgIAIAAgBkEEajYCOAwBCwJAIAdBAWoiCUGAgICABEkEQEH/////AyAIIAJrIghBAXUiCiAJIAkgCkkbIAhB/P///wdPGyIJBH8gCUGAgICABE8NAiAJQQJ0ECwFQQALIgogB0ECdGoiByADNgIAIAdBBGohCCACIAZHBEADQCAHQQRrIgcgBkEEayIGKAIANgIAIAIgBkcNAAsgACgCPBogACgCNCECCyAAIAogCUECdGo2AjwgACAINgI4IAAgBzYCNCACBEAgAhAqCyAAIAg2AjgMAgsMAwsMCwsgDUEBEOABIA0QkwYgAygCiAZBAEoEQCANKAIAIAUoAhRrIQkgAygCkAYhBkEAIQcDQAJ/IAYgB0ECdCIIaigCACEGIAUoAiQgBSgCICIKa0ECdSEAA0BBACAAIgJBAEwNARogCiAAQQFrIgBBAnRqKAIAIAlrIAZKDQALIAILIQAgAygCkAYiBiAIaiICIAIoAgAgAGs2AgAgB0EBaiIHIAMoAogGSA0ACwsCQCADLQAMRQRAIAQoAowZIQAMAQtB4AMQLCIAQQhqEIAGGiAAQgA3A9gDIABCADcD0AMgAEIANwPIAyAAQgA3A8ADIABCADcDuAMgAEIANwOwAyAAQgA3A6gDIAAgBCgCqBE2AgACQCAEKAKMGSIHIAQoApAZIglJBEAgByAANgIAIAdBBGohAAwBCyAHIARBiBlqKAIAIgJrQQJ1IghBAWoiBkGAgICABE8NA0H/////AyAJIAJrIglBAXUiCiAGIAYgCkkbIAlB/P///wdPGyIJBH8gCUGAgICABE8NDSAJQQJ0ECwFQQALIgogCEECdGoiBiAANgIAIAZBBGohACACIAdHBEADQCAGQQRrIgYgB0EEayIHKAIANgIAIAIgB0cNAAsgBCgCkBkaIAQoAogZIQILIAQgCiAJQQJ0ajYCkBkgBCAANgKMGSAEIAY2AogZIAJFDQAgAhAqCyAEIAA2AowZCyAAIAQoAogZRwRAQZABECwiAEEAOgAkIABBADYCICAAQgA3AwAgAEEANgIsIAAgBDYCjAEgAEL/////DzcDgAEgAEKAgICAcDcDeCAAQQA2AogBIABBADYCKCAAIAM2AgQgACAFNgIAIAAgDSkDADcDCCAAIA0pAwg3AxAgACANKQMQNwMYIAAgBC0AlBk6ACQCQCAEKAKMGUEEaygCACINKAKsAyIFIA0oArADIgNJBEAgBSAANgIAIAVBBGohBgwBCyAFIA0oAqgDIgJrQQJ1IgdBAWoiBkGAgICABE8NA0H/////AyADIAJrIgNBAXUiCSAGIAYgCUkbIANB/P///wdPGyIDBH8gA0GAgICABE8NDSADQQJ0ECwFQQALIgkgB0ECdGoiByAANgIAIAdBBGohBiACIAVHBEADQCAHQQRrIgcgBUEEayIFKAIANgIAIAIgBUcNAAsgDSgCsAMaIA0oAqgDIQILIA0gCSADQQJ0ajYCsAMgDSAGNgKsAyANIAc2AqgDIAJFDQAgAhAqCyANIAY2AqwDCyAEIBBBB2oQjAYaQQALISIgEEEQaiQAICIMAQsQNgALIQYMAQsCQAJAAkACQAJAAkAgBEEgaw4JAAECBQQFBQMDBQtBnAUQLCIIQcT+AjYCACAIQgA3AgQCQAJ/IAAiBEEEaiEkIAhBDGpBAEGQBRA0IgMgGUEIaiIHQQQQMSIANgIAQQghBgJAAkACQCAAQQ9KDQAgB0ECEOABIAMgB0EGEDEiAEEBajYCBCAAQT5KDQAgAyAHQQMQMSIAQQFqNgIIIABBBkoNACADIAdBARAxNgIMIAdBEBDgASADQRBqIAcgAygCCBDoBSADIAdBARAxIgA2AuQDAkBBACADKAIIIgVBAWsgABsiAiAFSAR/IANB6ANqIQkgAiEAA0AgCSAAQQxsaiIFIAcQRDYCACAFIAcQRDYCBCAFIAcQRCIKNgIIIAUoAgBB4fJ5Rg0DIApB4fJ5Rg0DIAUoAgRB4fJ5Rg0DIABBAWoiACADKAIISA0ACyADKALkAwUgAAsNACACQQdKDQIgAkEATA0AIANB6ANqIAJBDGxqIgUoAgAhACAFKAIEIQYgAyAFKAIIIgU2AvADIAMgBjYC7AMgAyAANgLoAyACQQFGDQAgAyAFNgL8AyADIAY2AvgDIAMgADYC9AMgAkECRg0AIAMgBTYCiAQgAyAGNgKEBCADIAA2AoAEIAJBA0YNACADIAU2ApQEIAMgBjYCkAQgAyAANgKMBCACQQRGDQAgAyAFNgKgBCADIAY2ApwEIAMgADYCmAQgAkEFRg0AIAMgBTYCrAQgAyAGNgKoBCADIAA2AqQEIAJBBkYNACADIAU2ArgEIAMgBjYCtAQgAyAANgKwBAsgAyAHQQYQMToAyAQgAyAHEEQiADYCzAQgAEH/B2tB/3dNDQIgAyAAQQFqIgY2AswEAkAgAygC1AQiACICIAMoAtAEIglrQQxtIgUgBkkEQEEAIQIgBiAFayIFIAMoAtgEIgogAGtBDG1NBEAgAyAFBH8gAEEAIAVBDGxBDGsiACAAQQxwa0EMaiIAEDQgAGoFIAALNgLUBAwCCwJAIAAgAygC0AQiCWtBDG0iCyAFaiIGQdaq1aoBSQRAQdWq1aoBIAogCWtBDG0iCkEBdCIQIAYgBiAQSRsgCkGq1arVAE8bIgoEQCAKQdaq1aoBTw0CIApBDGwQLCECCyALQQxsIAJqIgZBACAFQQxsQQxrIgUgBUEMcGtBDGoiCxA0IgUgC2ohCyACIApBDGxqIQoCQCAAIAlGBEAgBSECDAELA0AgBkEEayIQQQA2AgAgBkEMayICIABBDGsiBSgCADYCACAGQQhrIABBCGsoAgA2AgAgECAAQQRrIgAoAgA2AgAgAEEANgIAIAVCADcCACACIQYgBSIAIAlHDQALIAMoAtgEGiADKALUBCEAIAMoAtAEIQkLIAMgCjYC2AQgAyALNgLUBCADIAI2AtAEIAAgCUcEQANAIABBDGsiAigCACIGBEAgAEEIayAGNgIAIABBBGsoAgAaIAYQKgsgAiIAIAlHDQALCyAJBEAgCRAqCwwDCxA2AAsMEgsgBSAGTQ0AIAkgBkEMbGoiBiACRwRAA0AgAkEMayIAKAIAIgUEQCACQQhrIAU2AgAgAkEEaygCABogBRAqCyAAIgIgBkcNAAsLIAMgBjYC1AQLIAMoAswEQQJOBEAgAy0AyAQhBkEBIQADQCAGQQFqIQICQCAGIABBDGwiCiADKALQBGoiBSgCBCAFKAIAIgtrIglPBEAgBSACIAlrEGUMAQsgAiAJTw0AIAUgAiALajYCBAtBACECA0AgB0EBEDEhBiADKALQBCAKaigCACACaiAGOgAAIAIgAy0AyAQiBkkhIyACQQFqIQIgIw0ACyAAQQFqIgAgAygCzARIDQALCyADIAdBARAxIgA6ANwEAkACQCAAQf8BcUUNACADIAdBIBAxNgLgBCADIAdBIBAxNgLkBCADIAdBARAxIgA6AOgEIABB/wFxRQ0AIAMgBxBEQQFqNgLsBCADIAcQRCICNgLwBCACQYAITw0EQQAhBQJAIAMoAvgEIgAgAygC9AQiCWtBAXUiBiACSQRAIAIgBmsiBiADKAL8BCIKIABrQQF1TQRAIAMgBgR/IABBACAGQQF0IgAQNCAAagUgAAs2AvgEDAILAkAgACADKAL0BCICa0EBdSIMIAZqIglBAE4EQEH/////ByAKIAJrIgogCSAJIApJGyAKQf7///8HTxsiCgRAIApBAEgNAiAKQQF0ECwhBQsgBSAMQQF0aiIJQQAgBkEBdCIGEDQgBmohBiAAIAJHBEADQCAJQQJrIgkgAEECayIALwEAOwEAIAAgAkcNAAsLIAMgBSAKQQF0ajYC/AQgAyAGNgL4BCADIAk2AvQEIAIEQCACECoLDAMLEDYACwwUCyACIAZJBEAgAyAJIAJBAXRqNgL4BAsLAkAgAygC8AQiACADQYAFaiICKAIEIAIoAgAiBWsiBksEQCACIAAgBmsQZQwBCyAAIAZJBEAgAiAAIAVqNgIECwsgAygC8ARBAEwNACAHEEQhACADKAL0BCAAOwEADAELIAMgB0EBEDE6AIwFC0EAIQYLIAYMAgtBoPwAQdb0AEGQAUGX8gAQAQALICRBCEEAEFFBCAsiBw0AIAQoAogEIgZBAE4EQCMAQfACayICJABBlK8DIQACQAJAAkAgBkEBaw4CAQACC0GQrwMhAAsgACgCACIFQdCMAkEAEDAgAiADKAIANgLgAiAFQbaEAiACQeACahAwIAIgAygCBDYC0AIgBUHmhwIgAkHQAmoQMCACIAMoAgg2AsACIAVBg4UCIAJBwAJqEDAgAiADKAIMNgKwAiAFQZL6ASACQbACahAwIAMoAgghACADQRBqQQEgBRDgAiAAQQJOBEAgAEECayEGIANBxABqIQlBACEAA0AgAiAANgKgAiAFQZCJAiACQaACahAwIAkgAEE0bGpBACAFEOACIAAgBkchJSAAQQFqIQAgJQ0ACwsgAiADKALkAzYCkAIgBUHD1gEgAkGQAmoQMAJAIAMoAuQDBEAgAygCCEEATA0BIANB6ANqIQlBACEAA0AgAiAJIABBDGxqIgYoAgA2AoQCIAIgADYCgAIgBUGAywEgAkGAAmoQMCACIAYoAgQ2AvABIAVBo80BIAJB8AFqEDAgAiAGKAIINgLgASAFQdDNASACQeABahAwIABBAWoiACADKAIISA0ACwwBCyACIAMoAugDNgLQASAFQarLASACQdABahAwIAIgAygC7AM2AsABIAVBn80BIAJBwAFqEDAgAiADKALwAzYCsAEgBUHMzQEgAkGwAWoQMAsgAiADLQDIBDYCoAEgBUH5zQEgAkGgAWoQMCACIAMoAswENgKQASAFQcvKASACQZABahAwIAMoAswEQQJOBEBBASEGA0BBACEAIAZBDGwhCQNAIAIgAygC0AQgCWooAgAgAGosAAA2AogBIAIgADYChAEgAiAGNgKAASAFQfrMASACQYABahAwIAAgAy0AyARJISYgAEEBaiEAICYNAAsgBkEBaiIGIAMoAswESA0ACwsgAiADLADcBDYCcCAFQdfLASACQfAAahAwAkAgAy0A3ARFDQAgAiADKALgBDYCYCAFQeTKASACQeAAahAwIAIgAygC5AQ2AlAgBUGzzgEgAkHQAGoQMCACIAMsAOgENgJAIAVBk8wBIAJBQGsQMCADLQDoBEUNACACIAMoAuwENgIwIAVBvcwBIAJBMGoQMCACIAMoAvAENgIgIAVBks4BIAJBIGoQMCADKALwBEEATA0AIAIgAygC9AQvAQA2AhQgAkEANgIQIAVB3swBIAJBEGoQMAwBCyACIAMsAIwFNgIAIAVB+ssB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5gIgBSgCzAMiAyAFKALIAyIERwRAQQAhAgNAIAQgAkECdGooAgAiCQRAIAkgCSgCACgCBBEAACAFKALIAyEEIAUoAswDIQMLIAJBAWoiAiADIARrQQJ1SQ0ACwsgBSAENgLMAwwBC0GAkAFBvPQAQesHQZb9ABABAAsgBkECNgIoQQAhAyAFKAKsAyAFKAKoAyICa0ECdUEBayIERQ0BA0AgBiACIAhBAnRqIgkoAgBHBEAgCEEBaiIIIARHDQEMAwsLIAkoAgQiAkUNASAGKAIEKAIYIgggAigCBCgCGE4NAQNAIAggBSgCACIGKAKQAU4NAiAGKALAAiAIQcwAbGoiBigCAEEATARAIAZBATYCAAsgCEEBaiIIIAIoAgQoAhhIDQALDAELIARFDQECfyAFIgkoAgAiBygCzAJBACAHKALIAmtGBEAgAigChAENByAHKAKEASEMIAcoAnwoAvyDASEPQX8gAigCBCIQKAKIBiILQQFqIgStQrCRAX4iIadBBHIgIUIgiKcbECwiCiAENgIAIApBBGohAwJAIARFBEAgAiAENgKIASACIAM2AoQBDAELIAMgBEGwkQFsaiESIAMhBQNAIAVBjJEBakIANwIAIAVB1JABakEANgIAIAVBzJABakIANwIAIAVCADcCxJABIAVCADcCmJEBIAVBoJEBakIANwIAIAVBqJEBakEANgIAIAUgBUEmakFxcUEQaiINNgK4ECANQQBBgBAQNBogBUGwkQFqIgUgEkcNAAsgAiAENgKIASACIAM2AoQBIAtBAEgNACALQf////8HRg0JIBAoAhgiDUECdCIEIAwoAqRCaigCACEFIAogEDYCpJEBIAcoAnAhEiAKIAI2AqyRASAKIAk2AqiRASAKIAc2AqCRASAKIBI2ApyRASAKIAwoAoBCIARqKAIANgIIIAMQngIgAkEMaiISIQQgCwR/IBAoApAGBSAECygCACIOIBIoAgBKBEBBESEGDAELQQEhBCAOQQBMBEBBESEGDAELIApB+JABaiACKAIIIA4QoQIgByAHKALEAkEBajYCxAIgByAHKALUAkEBajYC1AIgAiACKAJ4QQFqNgJ4IAAgA0EBIA0gDSAPbSIDIA9sayADEI0GIAtFDQAgDEHUwQBqIRMgDEGowQBqIREDQCAFQQFqIgUgDCgCMCIDIAwoAjRs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IAMQkAYQKiAAKAKIGSECIAAoAowZBSABC0EEayIBNgKMGSABIAJHDQALCyACBEAgACACNgKMGSAAKAKQGRogAhAqC0EAIQIgAEHcEGoiASgCDCIDIAEoAggiBEcEQANAIAQgAkECdGooAgAiBQRAIAUQ0wMQKiABKAIIIQQgASgCDCEDCyACQQFqIgIgAyAEa0ECdUkNAAsLIAFBIGoQ1gMgASgCFCICBEAgASACNgIYIAEoAhwaIAIQKgsgASgCCCICBEAgASACNgIMIAEoAhAaIAIQKgsgAEH0CmoQ1gMCQCAAKALsCiIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCwJAIAAoAuQKIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLAkAgACgC3AoiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsgAEEEaiEDQdgKIQEDQAJAIAMgAUEIayIBaigCACICRQ0AIAIgAigCBCIEQQFrNgIEIAQNACACIAIoAgAoAggRAAAgAhArCyABQdgGRw0ACwJAIAAoAtQGIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLAkAgACgCzAYiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsCQCAAKALEBiIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCwJAIAAoArwGIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLAkAgACgCtAYiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsCQCAAKAKsBiIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCwJAIAAoAqQGIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLAkAgACgCnAYiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsCQCAAKAKUBiIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCwJAIAAoAowGIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLAkAgACgChAYiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsCQCAAKAL8BSIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCwJAIAAoAvQFIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLAkAgACgC7AUiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsCQCAAKALkBSIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCwJAIAAoAtwFIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLAkAgACgC1AUiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsCQCAAKALMBSIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCwJAIAAoAsQFIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLAkAgACgCvAUiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsCQCAAKAK0BSIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCwJAIAAoAqwFIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLAkAgACgCpAUiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsCQCAAKAKcBSIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCwJAIAAoApQFIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLAkAgACgCjAUiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsCQCAAKAKEBSIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCwJAIAAoAvwEIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLAkAgACgC9AQiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsCQCAAKALsBCIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCwJAIAAoAuQEIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLAkAgACgC3AQiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsgAEGkBGoiASgCICICBEADQCABKAIQIgUgASgCHCIDQQh2Qfz//wdxaigCACADQf8HcUECdGooAgAhBCABIAJBAWs2AiAgASADQQFqIgI2AhwgAkGAEE8EQCAFKAIAECogASABKAIQQQRqNgIQIAEgASgCHEGACGs2AhwLIAEgASgCJCAEKAIYazYCJCABIAQQkAEgASgCICICDQALCyABKAIIIgIEQCABIAIQkAELIAEoAiwiBSABKAIoIgJHBEBBACEDA0AgAiADQQJ0aigCACIEBEAgBCgCFBAqIAQoAiAiAgRAIAQgAjYCJCAEKAIoGiACECoLIAQQKiABKAIsIQUgASgCKCECCyADQQFqIgMgBSACa0ECdUkNAAsLIAIEQCABIAI2AiwgASgCMBogAhAqCyABQQxqENYDIAALsAMBBX8gACgCrAMiASAAKAKoAyICRwRAA0AgAiADQQJ0aigCACIEBEAgBCgCjAFBpARqIAQoAgAQkAEgBCgChAEiAQRAIAFBBGsiBSgCACICBEAgASACQbCRAWxqIQIDQCACQSRrEMQBGiACQbCRAWsiAiABRw0ACwsgBRAqCyAEECogACgCqAMhAiAAKAKsAyEBCyADQQFqIgMgASACa0ECdUkNAAsLIAAoAswDIgMgACgCyAMiAUcEQEEAIQIDQCABIAJBAnRqKAIAIgQEQCAEIAQoAgAoAgQRAAAgACgCzAMhAyAAKALIAyEBCyACQQFqIgIgAyABa0ECdUkNAAsLIAAoAtQDIgMEQCAAKALYAyICIAMiAUcEQANAIAJBCGsQxAEiAiADRw0ACyAAKALUAyEBCyAAIAM2AtgDIAAoAtwDGiAB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IANBH0YNAEEBIAIgAkEBTBshCiAEIAhqQQRtIQUgBCAGakEEbSEHQQAhAwNAIAMgCGpBBG0hCSAAKAKUAiEEAkAgByAAKAKQAiICTg0AIAQgCUwNACAAKAKEAiAHaiACIAlsaiICIAItAABBwAByOgAAIAAoApQCIQQgACgCkAIhAgsCQCADIAZqQQRtIgkgAk4NACAEIAVMDQAgACgChAIgCWogAiAFbGoiAiACLQAAQYABcjoAAAsgA0EBaiIDIApHDQALCwwACyAAKAJ8IQJBASEeCyABQQFqIgEgAigC+IMBSA0ACwsgDkEBaiIOIBZHDQALCyAeDwtBiSBBtMYAQfYAQZMdEAEAC0HjH0G0xgBB9wBBkx0QAQALOAEBfyAAQgA3AwggACgCECEBIABBADYCECAAIAAoAgAgAUEDdSIBazYCACAAIAAoAgQgAWo2AgQLnQEBA38jAEEQayIBJABBrawFLQAAQQFGBEAgASAAKAIENgIEIAEgADYCAEGsjwIgARCyAQsgACgCBCICBEAgAigCACIDQQJOBEAgAiADQQFrNgIAIAAoAgAhAiAAQawBECwiAzYCACAAQQQQLCIANgIEIABBATYCACADIAJBrAEQMhoLIAFBEGokAA8LQb0aQab1AEHfAEGs0wAQAQALfgEDfyMAQRBrIgEkAEGtrAUtAABBAUYEQCABIAAoAgQ2AgQgASAANgIAQZvHASABELIBCyAAKAIEIgIEQCACIAIoAgBBAWsiAzYCAAJAIAMNACAAKAIAIgMEQCADECogACgCBCICRQ0BCyACECoLIABCADcCAAsgAUEQaiQAC2QBA38gAUEDSQRAIAAgAUECdCIDakFAaygCACEFIAIEQCACIABBLEEoIAEbaigCACAAKAJ8IANB3OwCaigCAGooAgBBB2pBCG1sNgIACyAFDwtB2YwBQe31AEGfBUGf0gAQAQALQwEBfyAAKAKQEQRAIAAoAoARIAAoAowRIgFBCHZB/P//B3FqKAIAIAFB/wdxQQJ0aigCAEEAOgBoIABB3BBqEIIGCwtVAQJ/AkAgACgCkBFBAEwNACAAKAKAESAAKAKMESIBQQh2Qfz//wdxaigCACABQf8HcUECdGooAgAiAUUNACABQQA6AGggAEHcEGoQggYgASECCyACC54IAQh/An8CQCAAQaQEaiIH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IAFBIGokACACC5QJAQR/IwBBoAFrIgMkAAJAIAIoAgQgAigCACICayIEQQdNBEAgA0EgECwiATYCECADQpmAgICAhICAgH83AhQgAUHK+QApAAA3AAAgAUEAOgAZIAFB4vkALQAAOgAYIAFB2vkAKQAANwAQIAFB0vkAKQAANwAIIABBAkH2ACADQRBqEC8aIAMsABtBAE4NASADKAIYGiADKAIQECoMAQsCQAJAAkAgAi0AACIFBEAgA0Gg0wM2AhggA0G00wM2AlAgA0HE0wMoAgAiATYCECADQRBqIgIgAUEMaygCAGpByNMDKAIANgIAIANBADYCFCACIAMoAhBBDGsoAgBqIgEgA0EcaiIEED4gAUKAgICAcDcCSCADQczTAygCACIBNgIYIANBGGoiBiABQQxrKAIAakHQ0wMoAgA2AgAgA0HA0wMoAgAiATYCECACIAFBDGsoAgBqQdTTAygCADYCACADQbTTAzYCUCADQYzTAzYCECADQaDTAzYCGCAEED8iBEHwywM2AgAgA0IANwJEIANCADcCPCADQRg2AkwgBkGKqgFBExAtIAUQQkGo5gBBERAtGgJ/IAMoAkwiAUEQcQRAIANBMGohASADKAJIIgUgAygCNCICSQR/IAMgAjYCSCACBSAFCwwBCyABQQhxRQRAQQAhAiADQQA6AA8gA0EEaiEBDAULIANBJGohASADKAIsCyABKAIAIgVrIgJB+P///wdPDQEgAkELTwRAIAJBB3JBAWoiBhAsIQEgAyAGQYCAgIB4cjYCDCADIAE2AgQgAyACNgIIDAMLIAMgAjoADyADQQRqIQEgAg0CQQAhAgwDCyACLQABIQUgASACLQACQQFqOwEAIAEgAi0AA0EBajsBAgJ/IAVBAXEEQEELIQUgBEELTQRAIANBIBAsIgE2AhAgA0KagICAgISAgIB/NwIUIAFBuc4AKQAANwAAIAFBADoAGiABQdHOAC8AADsAGCABQcnOACkAADcAECABQcHOACkAADcACCAAQQJB9gAgA0EQahAvGiADLAAbQQBODQYgAygCGBogAygCEBAqDAYLIAEgAigABCIEQRh0IARBgP4DcUEIdHIgBEEIdkGA/gNxIARBGHZycjYCBCACLQAJQRB0IAItAAhBGHRyIAItAApBCHRyDAELIAEgAi0ABSACLQAEQQh0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C8cBAQJ/IwBBIGsiAyQAIAIgASACQQAgASgCACgCLBEEACIENgIMIANBDGogASACIAIoAgQgBCACKAIAamtBACABKAIAKAIwEQcAIAIgAigCBCACKAIAazYCDCADLAAfQQBIBEAgAygCHBogAygCFBAqCyAAQZClBSkCADcCACAAQQhqIQACQEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLgsgA0EgaiQAC5MBAQR/QX8hAwJAIAAoAhgiASAAKAIcIgBGDQADQAJAAkAgASgCACICRQ0AIAJBoL8EQZiDBRA5IgJFDQAgASgCBCIADQEgAi0AaA8LIAFBCGoiASAARw0BDAILCyAAIAAoAgQiAUEBaiIENgIEIAItAGghAyAAIAE2AgQgBA0AIAAgACgCACgCCBEAACAAECsLIAMLtwoBAn8jAEHQAGsiAyQAIANCADcDSCADQUBrQgA3AwAgA0IANwM4IANCADcDMAJAIAIoAgAiASgCIEECRwRAIANBKBAsIgE2AgwgA0KngICAgIWAgIB/NwIQIAFBqjgpAAA3AB8gAUGjOCkAADcAGCABQZs4KQAANwAQIAFBkzgpAAA3AAggAUGLOCkAADcAACABQQA6ACcgA0EYakEEQboXIANBDGoQLyEBIABCADcCGCAAQgA3AhAgAEIANwIIIABCADcCACAAIAEpAwA3AiAgAEEoaiEAAkAgASwAE0EATgRAIAAgASkCCDcCACAAIAEoAhA2AggMAQsgACABKAIIIAEoAgwQLiABLAATQQBODQAgASgCEBogASgCCBAqCyADLAAXQQBODQEgAygCFBogAygCDBAqDAELQQAhBSABQQAQQEEIRwRAIANBKBAsIgE2AgwgA0KlgICAgIWAgIB/NwIQIAFBgjgpAAA3AB0gAUH9NykAADcAGCABQfU3KQAANwAQIAFB7TcpAAA3AAggAUHlNykAADcAACABQQA6ACUgA0EYakEEQboXIANBDGoQLyEBIABCADcCGCAAQgA3AhAgAEIANwIIIABCADcCACAAIAEpAwA3AiAgAEEoaiEAAkAgASwAE0EATgRAIAAgASkCCDcCACAAIAEoAhA2AggMAQsgACABKAIIIAEoAgwQLiABLAATQQBODQAgASgCEBogASgCCBAqCyADLAAXQQBODQEgAygCFBogAygCDBAqDAELIANBADYCICADQgA3AhgCf0EAIAIoAgAiBigCQCIERQ0AGiAGQUBrIgUhAQNAIAEgBCAEKAIQIgdBAEgbIQEgBCAHQR12QQRxaigCACIEDQALIAEgBUYEQEEAIQVBAAwBC0EAIQVBACABKAIQQQBKDQAaIAEoAjQhBSABKAIsCyEBIAYoAhwiByAGKAIYIgZsIgQEQCADQRhqIAQQZQsCQCAFIAZHBEAgB0UNAUEAIQQDQCADQTBqIAEgBCAFbGogBhDyAiAEQQFqIgQgB0cNAAsMAQsgA0EwaiABIAQQ8gILQYABECwiAUIANwIEIAFBmOEENgIAIAFBEGoiBEIANwMIIAFCADcDICABQgA3AyggAUEANgIwIAFB1L0ENgIQIAFCADcCPCABQgA3AjQgAUJ/NwNIIAFCfzcDUCABQQA2AnQgAUIANwNYIAFCADcDYCABQgA3A2ggAUEAOwFwIAFB5IIFNgIQIAFBw9bN6wY2AiAgAUEAOgB4IAEgAigCAEEAEEA6AHggAyABNgIQIAMgBDYCDCABIAEoAgRBAWo2AgQCQCADKAI0IgIgAygCOEkEQCACIAE2AgQgAiAENgIAIAMgAkEIajYCNAwBCyADIANBMGogA0EMahBTNgI0IAMoAhAiAkUNACACIAIoAgQiBEEBazYCBCAEDQAgAiACKAIAKAIIEQAAIAIQKwsgACADQTBqEOQBIAEgASgCBCIAQQFrNgIEIABFBEAgASABKAIAKAIIEQAAIAEQKwsgAygCGCIABEAgAyAANgIcIAMoAiAaIAAQKgsgAygCPCIARQ0AIAMgADYCQCADKAJEGiAAECoLIAMoAjAiAARAIAMoAjQiBCAAIgFHBEADQAJAIARBBGsoAgAiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsgBEEIayIEIABHDQALIAMoAjAhAQsgAyAANgI0IAMoAjgaIAEQKgsgA0HQAGokAAvbEAEIfyMAQUBqIgIkACACQgA3AjggAkEANgI0IAJCADcCLCACIAEoAhQiAygCMDYCACACIAMoAjQiAzYCBCADBEAgAyADKAIEQQFqNgIECyACQRhqIAIoAgAgASgCJCACQSxqQgBCfxDmAQJAIAIoAgQiA0UNACADIAMoAgQiBEEBazYCBCAEDQAgAyADKAIAKAIIEQAAIAMQKwsCQCACKAIYBEAgAEIANwIAIAAgAikDGDcCCCAAQRBqIQAgAiwAK0EATgRAIAAgAikCIDcCACAAIAIoAig2AggMAgsgACACKAIgIAIoAiQQLgwBCyABKAIUIQogASgCJCEBQQAhBSMAQSBrIgQkACAEQQhqIgMgCiABQQAQjQEgBCgCDCELAkAgBCgCCCIHRQRAIARBADoACCAEQQA6ABMgAkECQdAPIAMQLxogBCwAE0EATg0BIAQoAhAaIAQoAggQKgwBCwJAAkACQCAHKAIYIgMgBygCHCIIRg0AIAMhAQJAA0ACQCABKAIAIgVFDQAgBUGgvwRBuL8EEDkiBkUNACABKAIEIglFBEBBACEJDAMLIAkgCSgCBEEBajYCBCAHKAIcIQggBygCGCEDDAILIAFBCGoiASAIRw0AC0EAIQYLAkAgAyAIRwRAA0ACQCADKAIAIgFFDQAgAUGgvwRBmIMFEDkiAUUNACADKAIEIgVFBEBBACEFDAQLIAUgBSgCBEEBajYCBAwDCyADQQhqIgMgCEcNAAsLQQAhBUEAIQELIAZFDQAgAiAKQUBrIgogBigCaCIHIAYoAmwiCBDlASACKAIADQIgAiwAE0EASARAIAIoAhAaIAIoAggQKgsgAQ0BCyAEQSgQLCIBNgIIIARCo4CAgICFgICAfzcCDCABQYL0ACkAADcAACABQQA6ACMgAUGh9AAoAAA2AB8gAUGa9AApAAA3ABggAUGS9AApAAA3ABAgAUGK9AApAAA3AAggAkEEQboXIARBCGoQLxogBCwAE0EATg0BIAQoAhAaIAQoAggQKgwBCwJAAkAgAS0AaEEIaw4JAQAAAAAAAAABAAsgBEEoECwiATYCCCAEQqOAgICAhYCAgH83AgwgAUGbPSkAADcAACABQQA6ACMgAUG6PSgAADYAHyABQbM9KQAANwAYIAFBqz0pAAA3ABAgAUGjPSkAADcACCACQQRBuhcgBEEIahAvGiAELAATQQBODQEgBCgCEBogBCgCCBAqDAELIAIoAjAgAigCLGsgByAIbEkEQCAEQSAQLCIBNgIIIARCnICAgICEgICAfzcCDCABQbEZKQAANwAAIAFBADoAHCABQckZKAAANgAYIAFBwRkpAAA3ABAgAUG5GSkAADcACCACQQJBACAEQQhqEC8aIAQsABNBAE4NASAEKAIQGiAEKAIIECoMAQtBiAEQLCIDQgA3AgQgA0Gs4wQ2AgAgA0EUakEAQegAEDQaIAMgAygCBCIGQQFqIgw2AgQgA0IANwI4IANC44CAgLAMNwIsIANBriA2AiAgA0FAa0IANwIAIANBADYChAEgA0IANwJ8IANCgYCAgBA3AlQgAyADQcwAajYCSCADQgA3AlwgA0IANwJkIANCADcCbCADQgA3AHEgAyADQQxqIg02AgwgAyADKAIIQQFqNgIIIAMgBjYCBCADIAM2AhAgDEUEQCADIAMoAgAoAggRAAAgAxArCyACIA02AjggAigCPCEGIAIgAzYCPAJAIAZFDQAgBiAGKAIEIgNBAWs2AgQgAw0AIAYgBigCACgCCBEAACAGECsLIAIoAjgiA0EANgIkIANBAjYCICADIAg2AhwgAyAHNgIYIARBCGogAigCOEEAIAcgCCABLQBoIAoQOiAEKAIIBEAgAiAEKQMINwIAIAIgBCkDEDcCCCACIAQoAhg2AhAMAQsgAigCOEEAIARBBGoQ6QMhAwJAIAcgBCgCBEcEQCAIRQ0BQQAhASAIQQFHBEAgCEF+cSEKQQAhBgNAIAMgBCgCBCABbGogAigCLCABIAdsaiAHEDIaIAMgAUEBciIMIAQoAgRsaiACKAIsIAcgDGxqIAcQMhogAUECaiEBIAZBAmoiBiAKRw0ACwsgCEEBcUUNASADIAQoAgQgAWxqIAIoAiwgASAHbGogBxAyGgwBCyADIAIoAiwiASACKAIwIAFrEDIaCyACEOgBIAQsABtBAE4NACAEKAIYGiAEKAIQECoLAkAgBUUNACAFIAUoAgQiAUEBazYCBCABDQAgBSAFKAIAKAIIEQAAIAUQKwsgCUUNACAJIAkoAgQiAUEBazYCBCABDQAgCSAJKAIAKAIIEQAAIAkQKwsCQCALRQ0AIAsgCygCBCIBQQFrNgIEIAENACALIAsoAgAoAggRAAAgCxArCyAEQSBqJAACQCACKAIABEAgAEIANwIAIAAgAikDADcCCCAAQRBqIQAgAiwAE0EATgRAIAAgAikCCDcCACAAIAIoAhA2AggMAgsgACACKAIIIAIoAgwQLgwBCyAAIAIoAjg2AgAgACACKAI8IgE2AgQgAQRAIAEgASgCBEEBajYCBAsgAEGQpQUpAgA3AgggAEEQaiEAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAELIABBmKUFKAIAQZylBSgCABAuCyACLAATQQBODQAgAigCEBogAigCCBAqCyACLAArQQBIBEAgAigCKBogAigCIBAqCyACKAIsIgAEQCACIAA2AjAgAigCNBogABAqCwJAIAIoAjwiAEUNACAAIAAoAgQiAUEBazYCBCABDQAgACAAKAIAKAIIEQAAIAAQKwsgAkFAayQAC6UBAQJ/IwBBIGsiAyQAIAEgAkEAIAEoAgAoAiwRBAAhBCACIAEtAGgQSCADQQxqIAEgAiAEEJsBIAMsAB9BAEgEQCADKAIcGiADKAIUECoLIABBkKUFKQIANwIAIABBCGohAAJAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAELIABBmKUFKAIAQZylBSgCABAuCyADQSBqJAALgwUBBH8jAEGgAWsiAyQAIANB5NUDNgJEIANB8NUDKAIAIgY2AgwgA0EMaiIEIAZBDGsoAgBqQfTVAygCADYCACAEIAMoAgxBDGsoAgBqIgYgA0EQaiIFED4gBkKAgICAcDcCSCADQeTVAzYCRCADQdDVAzYCDCAFED8iBkHwywM2AgAgA0IANwI4IANCADcCMCADQRA2AkAgA0GUAWoiBSABIAIQWSAEIAMoApQBIAUgAywAnwEiBEEASCIFGyADKAKYASAEIAUbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBlAFqIgQgAhA1IANBDGogAygClAEgBCADLACfASICQQBIIgQbIAMoApgBIAIgBBsQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgA0EMakHUuQFBEBAtIAEtAGgQQkHPkAJBARAtGgJAAn8gAygCQCIBQRBxBEAgAygCPCICIAMoAigiAUkEQCADIAE2AjwgASECCyADQSRqDAELIAFBCHFFBEBBACECIABBADoACwwCCyADKAIgIQIgA0EYagshAQJAIAIgASgCACIEayICQfj///8HSQRAIAJBC08EQCACQQdyQQFqIgUQLCEBIAAgBUGAgICAeHI2AgggACABNgIAIAAgAjYCBCABIQAMAgsgACACOgALIAINAUEAIQIMAgsQOAALIAAgBCACEDcaCyAAIAJqQQA6AAAgA0Hs1QMoAgAiADYCDCAAQQxrKAIAIANBDGpqQfjVAygCADYCACAGQfDLAzYCACADLAA7QQBIBEAgAygCOBogAygCMBAqCyAGED0aIANBxABqEDsaIANBoAFqJAALywEAIwBBIGsiAyQAIAMgASACEHsgAywAE0EASARAIAMoAhAaIAMoAggQKgsgASACEFI6AGgCQCACLQAUQQFGBEAgA0EAOgAUIANBADoAHyAAQQJB5AAgA0EUahAvGiADLAAfQQBODQEgAygCHBogAygCFBAqDAELIABBkKUFKQIANwIAIABBCGohAEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLgsgA0EgaiQAC5cBAQJ/IABBsIIFNgIAAkAgACgCJCIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCyAAQcjxBDYCACAAKAIQIgEEQCAAIAE2AhQgACgCGBogARAqCwJAIAAoAggiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsgABAqC5UBAQJ/IABBsIIFNgIAAkAgACgCJCIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCyAAQcjxBDYCACAAKAIQIgEEQCAAIAE2AhQgACgCGBogARAqCwJAIAAoAggiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsgAAtnACADIAEoAiAoAmwiATYCACACIAFFQQF0NgIAIABBkKUFKQIANwIAIABBCGohAEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCA8LIABBmKUFKAIAQZylBSgCABAuC/EBAQF/IwBBEGsiASQAIAIoAhAiAwRAIAIoAggiBARAIAQgAxCcAyACKAIQIQMLIAIoAgAiBCAEIAQoAgAoAggREgAgA618IAQoAgAoAhQREAAaIAJBADYCEAsCQCACLQAUQQFGBEAgAUEAOgAEIAFBADoADyAAQQJB5AAgAUEEahAvGiABLAAPQQBODQEgASgCDBogASgCBBAqDAELIABBkKUFKQIANwIAIABBCGohAEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLgsgAUEQaiQACwoAIAAoAiAtAHELCgAgACgCIC0AcAvGJAENfyMAQRBrIg4kACAOQQA2AgwgDkIANwIEIA5BBGohAwJAAkAgASgCICILKAJ0IgkgCygCeCINRwRAA0AgCSgCBCAJKAIAa0EYdiECAkAgAygCBCIEIAMoAggiBUkEQCAEIAI6AAAgBEEBaiEGDAELIAQgAygCACIHayIIQQFqIgFBAEgNAyAIQf////8HIAUgB2siBUEBdCIGIAEgASAGSRsgBUH/////A08bIgYEfyAGECwFQQALIgVqIgEgAjoAACAFIAZqIQwgAUEBaiEGAkAgBCAHRgRAIAEhBQwBC0EAIQogBCECIAhBA3EiCARAA0AgAUEBayIBIAJBAWsiAi0AADoAACAKQQFqIgogCEcNAAsLIAcgBGtBfE0EQANAIAFBAWsgAkEBay0AADoAACABQQJrIAJBAmstAAA6AAAgAUEDayACQQNrLQAAOgAAIAFBBGsiASACQQRrIgItAAA6AAAgAiAHRw0ACwsgAygCCBogAygCACEHCyADIAw2AgggAyAGNgIEIAMgBTYCACAHRQ0AIAcQKgsgAyAGNgIEIAkoAgQgCSgCAGtBEHYhAgJAIAMoAggiBSAGSwRAIAYgAjoAACAGQQFqIQQMAQsgBiADKAIAIgdrIghBAWoiAUEASA0DIAhB/////wcgBSAHayIFQQF0IgQgASABIARJGyAFQf////8DTxsiBAR/IAQQLAVBAAsiBWoiASACOgAAIAQgBWohDCABQQFqIQQCQCAGIAdGBEAgASEFDAELQQAhCiAGIQIgCEEDcSIIBEADQCABQQFrIgEgAkEBayICLQAAOgAAIApBAWoiCiAIRw0ACwsgByAGa0F8TQRAA0AgAUEBayACQQFrLQAAOgAAIAFBAmsgAkECay0AADoAACABQQNrIAJBA2stAAA6AAAgAUEEayIBIAJBBGsiAi0AADoAACACIAdHDQALCyADKAIIGiADKAIAIQcLIAMgDDYCCCADIAQ2AgQgAyAFNgIAIAdFDQAgBxAqCyADIAQ2AgQgCSgCBCAJKAIAa0EIdiECAkAgAygCCCIFIARLBEAgBCACOgAAIARBAWohBgwBCyAEIAMoAgAiB2siCEEBaiIBQQBIDQMgCEH/////ByAFIAdrIgVBAXQiBiABIAEgBkkbIAVB/////wNPGyIGBH8gBhAsBUEACyIFaiIBIAI6AAAgBSAGaiEMIAFBAWohBgJAIAQgB0YEQCABIQUMAQtBACEKIAQhAiAIQQNxIggEQANAIAFBAWsiASACQQFrIgItAAA6AAAgCkEBaiIKIAhHDQALCyAHIARrQXxNBEADQCABQQFrIAJBAWstAAA6AAAgAUECayACQQJrLQAAOgAAIAFBA2sgAkEDay0AADoAACABQQRrIgEgAkEEayICLQAAOgAAIAIgB0cNAAsLIAMoAggaIAMoAgAhBwsgAyAMNgIIIAMgBjYCBCADIAU2AgAgB0UNACAHECoLIAMgBjYCBCAJKAIEIAkoAgBrIQICQCADKAIIIgUgBksEQCAGIAI6AAAgBkEBaiEEDAELIAYgAygCACIHayIIQQFqIgFBAEgNAyAIQf////8HIAUgB2siBUEBdCIEIAEgASAESRsgBUH/////A08bIgQEfyAEECwFQQALIgVqIgEgAjoAACAEIAVqIQwgAUEBaiEEAkAgBiAHRgRAIAEhBQwBC0EAIQogBiECIAhBA3EiCARAA0AgAUEBayIBIAJBAWsiAi0AADoAACAKQQFqIgogCEcNAAsLIAcgBmtBfE0EQANAIAFBAWsgAkEBay0AADoAACABQQJrIAJBAmstAAA6AAAgAUEDayACQQNrLQAAOgAAIAFBBGsiASACQQRrIgItAAA6AAAgAiAHRw0ACwsgAygCCBogAygCACEHCyADIAw2AgggAyAENgIEIAMgBTYCACAHRQ0AIAcQKgsgAyAENgIEIAMgBCAJKAIAIgEgCSgCBCICIAIgAWsQxQEgCUEMaiIJIA1HDQALCyALKAKMASIJIAsoApABIg1HBEADQCAJKAIEIAkoAgBrQRh2IQICQCADKAIEIgQgAygCCCIFSQRAIAQgAjoAACAEQQFqIQYMAQsgBCADKAIAIgdrIghBAWoiAUEASA0DIAhB/////wcgBSAHayIFQQF0IgYgASABIAZJGyAFQf////8DTxsiBgR/IAYQLAVBAAsiBWoiASACOgAAIAUgBmohDCABQQFqIQYCQCAEIAdGBEAgASEFDAELQQAhCiAEIQIgCEEDcSIIBEADQCABQQFrIgEgAkEBayICLQAAOgAAIApBAWoiCiAIRw0ACwsgByAEa0F8TQRAA0AgAUEBayACQQFrLQAAOgAAIAFBAmsgAkECay0AADoAACABQQNrIAJBA2stAAA6AAAgAUEEayIBIAJBBGsiAi0AADoAACACIAdHDQALCyADKAIIGiADKAIAIQcLIAMgDDYCCCADIAY2AgQgAyAFNgIAIAdFDQAgBxAqCyADIAY2AgQgCSgCBCAJKAIAa0EQdiECAkAgAygCCCIFIAZLBEAgBiACOgAAIAZBAWohBAwBCyAGIAMoAgAiB2siCEEBaiIBQQBIDQMgCEH/////ByAFIAdrIgVBAXQiBCABIAEgBEkbIAVB/////wNPGyIEBH8gBBAsBUEACyIFaiIBIAI6AAAgBCAFaiEMIAFBAWohBAJAIAYgB0YEQCABIQUMAQtBACEKIAYhAiAIQQNxIggEQANAIAFBAWsiASACQQFrIgItAAA6AAAgCkEBaiIKIAhHDQALCyAHIAZrQXxNBEADQCABQQFrIAJBAWstAAA6AAAgAUECayACQQJrLQAAOgAAIAFBA2sgAkEDay0AADoAACABQQRrIgEgAkEEayICLQAAOgAAIAIgB0cNAAsLIAMoAggaIAMoAgAhBwsgAyAMNgIIIAMgBDYCBCADIAU2AgAgB0UNACAHECoLIAMgBDYCBCAJKAIEIAkoAgBrQQh2IQICQCADKAIIIgUgBEsEQCAEIAI6AAAgBEEBaiEGDAELIAQgAygCACIHayIIQQFqIgFBAEgNAyAIQf////8HIAUgB2siBUEBdCIGIAEgASAGSRsgBUH/////A08bIgYEfyAGECwFQQALIgVqIgEgAjoAACAFIAZqIQwgAUEBaiEGAkAgBCAHRgRAIAEhBQwBC0EAIQogBCECIAhBA3EiCARAA0AgAUEBayIBIAJBAWsiAi0AADoAACAKQQFqIgogCEcNAAsLIAcgBGtBfE0EQANAIAFBAWsgAkEBay0AADoAACABQQJrIAJBAmstAAA6AAAgAUEDayACQQNrLQAAOgAAIAFBBGsiASACQQRrIgItAAA6AAAgAiAHRw0ACwsgAygCCBogAygCACEHCyADIAw2AgggAyAGNgIEIAMgBTYCACAHRQ0AIAcQKgsgAyAGNgIEIAkoAgQgCSgCAGshAgJAIAMoAggiBSAGSwRAIAYgAjoAACAGQQFqIQQMAQsgBiADKAIAIgdrIghBAWoiAUEASA0DIAhB/////wcgBSAHayIFQQF0IgQgASABIARJGyAFQf////8DTxsiBAR/IAQQLAVBAAsiBWoiASACOgAAIAQgBWohDCABQQFqIQQCQCAGIAdGBEAgASEFDAELQQAhCiAGIQIgCEEDcSIIBEADQCABQQFrIgEgAkEBayICLQAAOgAAIApBAWoiCiAIRw0ACwsgByAGa0F8TQRAA0AgAUEBayACQQFrLQAAOgAAIAFBAmsgAkECay0AADoAACABQQNrIAJBA2stAAA6AAAgAUEEayIBIAJBBGsiAi0AADoAACACIAdHDQALCyADKAIIGiADKAIAIQcLIAMgDDYCCCADIAQ2AgQgAyAFNgIAIAdFDQAgBxAqCyADIAQ2AgQgAyAEIAkoAgAiASAJKAIEIgIgAiABaxDFASAJQQxqIgkgDUcNAAsLIAsoAoABIgkgCygChAEiCEcEQANAIAkoAgQgCSgCAGtBGHYhAgJAIAMoAgQiBCADKAIIIgVJBEAgBCACOgAAIARBAWohBgwBCyAEIAMoAgAiB2siC0EBaiIBQQBIDQMgC0H/////ByAFIAdrIgVBAXQiBiABIAEgBkkbIAVB/////wNPGyIGBH8gBhAsBUEACyIFaiIBIAI6AAAgBSAGaiENIAFBAWohBgJAIAQgB0YEQCABIQUMAQtBACEKIAQhAiALQQNxIgsEQANAIAFBAWsiASACQQFrIgItAAA6AAAgCkEBaiIKIAtHDQALCyAHIARrQXxNBEADQCABQQFrIAJBAWstAAA6AAAgAUECayACQQJrLQAAOgAAIAFBA2sgAkEDay0AADoAACABQQRrIgEgAkEEayICLQAAOgAAIAIgB0cNAAsLIAMoAggaIAMoAgAhBwsgAyANNgIIIAMgBjYCBCADIAU2AgAgB0UNACAHECoLIAMgBjYCBCAJKAIEIAkoAgBrQRB2IQICQCADKAIIIgUgBksEQCAGIAI6AAAgBkEBaiEEDAELIAYgAygCACIHayILQQFqIgFBAEgNAyALQf////8HIAUgB2siBUEBdCIEIAEgASAESRsgBUH/////A08bIgQEfyAEECwFQQALIgVqIgEgAjoAACAEIAVqIQ0gAUEBaiEEAkAgBiAHRgRAIAEhBQwBC0EAIQogBiECIAtBA3EiCwRAA0AgAUEBayIBIAJBAWsiAi0AADoAACAKQQFqIgogC0cNAAsLIAcgBmtBfE0EQANAIAFBAWsgAkEBay0AADoAACABQQJrIAJBAmstAAA6AAAgAUEDayACQQNrLQAAOgAAIAFBBGsiASACQQRrIgItAAA6AAAgAiAHRw0ACwsgAygCCBogAygCACEHCyADIA02AgggAyAENgIEIAMgBTYCACAHRQ0AIAcQKgsgAyAENgIEIAkoAgQgCSgCAGtBCHYhAgJAIAMoAggiBSAESwRAIAQgAjoAACAEQQFqIQYMAQsgBCADKAIAIgdrIgtBAWoiAUEASA0DIAtB/////wcgBSAHayIFQQF0IgYgASABIAZJGyAFQf////8DTxsiBgR/IAYQLAVBAAsiBWoiASACOgAAIAUgBmohDSABQQFqIQYCQCAEIAdGBEAgASEFDAELQQAhCiAEIQIgC0EDcSILBEADQCABQQFrIgEgAkEBayICLQAAOgAAIApBAWoiCiALRw0ACwsgByAEa0F8TQRAA0AgAUEBayACQQFrLQAAOgAAIAFBAmsgAkECay0AADoAACABQQNrIAJBA2stAAA6AAAgAUEEayIBIAJBBGsiAi0AADoAACACIAdHDQALCyADKAIIGiADKAIAIQcLIAMgDTYCCCADIAY2AgQgAyAFNgIAIAdFDQAgBxAqCyADIAY2AgQgCSgCBCAJKAIAayECAkAgAygCCCIFIAZLBEAgBiACOgAAIAZBAWohBAwBCyAGIAMoAgAiB2siC0EBaiIBQQBIDQMgC0H/////ByAFIAdrIgVBAXQiBCABIAEgBEkbIAVB/////wNPGyIEBH8gBBAsBUEACyIFaiIBIAI6AAAgBCAFaiENIAFBAWohBAJAIAYgB0YEQCABIQUMAQtBACEKIAYhAiALQQNxIgsEQANAIAFBAWsiASACQQFrIgItAAA6AAAgCkEBaiIKIAtHDQALCyAHIAZrQXxNBEADQCABQQFrIAJBAWstAAA6AAAgAUECayACQQJrLQAAOgAAIAFBA2sgAkEDay0AADoAACABQQRrIgEgAkEEayICLQAAOgAAIAIgB0cNAAsLIAMoAggaIAMoAgAhBwsgAyANNgIIIAMgBDYCBCADIAU2AgAgB0UNACAHECoLIAMgBDYCBCADIAQgCSgCACIBIAkoAgQiAiACIAFrEMUBIAlBDGoiCSAIRw0ACwsMAQsQNgALIABBADYCCCAAQgA3AgACQCAOKAIIIgIgDigCBCIBRwRAIAIgAWsiAkEASA0BIAAgAhAsIgU2AgAgACACIAVqIgY2AgggBSABIAIQMhogACAGNgIECyAAQZClBSkCADcCDCAAQRRqIQACQEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLiAOKAIEIQELIAEEQCAOIAE2AgggDigCDBogARAqCyAOQRBqJAAPCxA2AAsJACAAEOoDECoLySMBFH8jAEGgAWsiAyQAIANB5NUDNgJEIANB8NUDKAIAIgQ2AgwgA0EMaiIHIARBDGsoAgBqQfTVAygCADYCACAHIAMoAgxBDGsoAgBqIgUgA0EQaiIEED4gBUKAgICAcDcCSCADQeTVAzYCRCADQdDVAzYCDCAEED8iEEHwywM2AgAgA0IANwI4IANCADcCMCADQRA2AkAgA0GUAWoiBCABIAIQWSAHIAMoApQBIAQgAywAnwEiBUEASCIEGyADKAKYASAFIAQbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBlAFqIgQgAhA1IANBDGogAygClAEgBCADLACfASIFQQBIIgQbIAMoApgBIAUgBBsQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgA0EMakGeuQFBFxAtIAEtAGQQQkHPkAJBARAtIQcgA0GUAWoiBCACEDUgByADKAKUASAEIAMsAJ8BIgVBAEgiBBsgAygCmAEgBSAEGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyAHQYe5AUEWEC0gAS0AZRBCQZKkAUECEC0hEwJAAn8CQAJ/AkACQAJAAkACQAJAAkACQCABLQBlIgRBwgBrDjkJBwcHBwcHBwcHBwEHBwcHBwcHBwcHAgcHBwcHBwcHBwcHAwcHBwcHBwcHBwQHBwcHBwcHBwcHBwUACyAEQfQBRg0FIARBLEcNBiADQRAQLCIENgIAIANCi4CAgICCgICAfzcCBCAEQfKKASkAADcAACAEQfmKASgAADYAByAEQQtqDAkLIANBzcKl8wY2AgAgA0EEOgALQQQMBgsgA0LF8NGr5o3ZsuQANwMAIANBCDoAC0EIDAULIANBEBAsIgQ2AgAgA0KMgICAgIKAgIB/NwIEIARBzRopAAA3AAAgBEHVGigAADYACCAEQQxqDAYLIANBBzoACyADQaGPASgAADYCACADQaSPASgAADYAA0EHDAMLIANBjYwBLwAAOwEIIANBCjoACyADQYWMASkAADcDAEEKDAILIANB74oBLwAAOwEIIANBCjoACyADQeeKASkAADcDAEEKDAELIANBBzoACyADQbczKAAANgIAIANBujMoAAA2AANBBwsiCCADakEAOgAAIAMhBAwCCyADQRgQLCIENgIAIANClICAgICDgICAfzcCBCAEQYrSACkAADcAACAEQZrSACgAADYAECAEQZLSACkAADcACCAEQRRqC0EAOgAAIAMoAgQhCAsgEyAEIAgQLUHOkAJBAhAtIQcgA0GUAWoiBCACEDUgByADKAKUASAEIAMsAJ8BIgVBAEgiBBsgAygCmAEgBSAEGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyAHQdOwAUEXEC0gAS0AZhBCQc+QAkEBEC0hByADQZQBaiIEIAIQNSAHIAMoApQBIAQgAywAnwEiBUEASCIEGyADKAKYASAFIAQbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIAdB8rgBQRQQLSABLQBnEEJBz5ACQQEQLSEHIANBlAFqIgQgAhA1IAcgAygClAEgBCADLACfASIFQQBIIgQbIAMoApgBIAUgBBsQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgB0HgswFBDxAtGiADLAALQQBIBEAgAygCCBogAygCABAqCwJAAkACQAJAAkACQCABKAJsDgQAAQIDBAsgA0EMakHaigJBBhAtGgwECyADQQxqQdOKAkEGEC0aDAMLIANBDGpBzIoCQQYQLRoMAgsgA0EMakHFigJBBhAtGgwBCyADQQxqQcbJAUEMEC0aCyADQZQBaiIEIAIQNSADQQxqIAMoApQBIAQgAywAnwEiBUEASCIEGyADKAKYASAFIAQbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBDGpBnMIBQRAQLSABLQBwEEJBz5ACQQEQLSEHIANBlAFqIgQgAhA1IAcgAygClAEgBCADLACfASIFQQBIIgQbIAMoApgBIAUgBBsQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgB0HAwgFBEhAtIAEtAHEQQkHPkAJBARAtGgJAIAEoAnQiDSABKAJ4IglHBEAgA0EYaiERA0AgA0GUAWoiBCACEDUgA0EMaiADKAKUASAEIAMsAJ8BIgVBAEgiBBsgAygCmAEgBSAEGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyADQQxqQfLCAUEFEC0aAkAgDSgCACIEIA0oAgQiEkYNAANAIAQtAAAhByADKAIMIghBDGsoAgAgA0EMamoiBigCTEF/RgRAIANBlAFqIg4gBigCHCIFNgIAIAVB7M4GRwRAIAUgBSgCBEEBajYCBAsgDkGk0AYQQyIFQSAgBSgCACgCHBEFABogDhBHIAMoAgwhCAsgBkEwNgJMIBEgCEEMayIFKAIAakECNgIAIBAgBSgCAGoiBSAFKAIAQbV/cUEIcjYCAAJAAkAgAyADQQxqIAcQQiILEHMiDi0AAEEBRw0AIAsgCygCAEEMaygCAGoiCigCBCEHIAooAhghDCAKKAJMIghBf0YEQCADQZQBaiIGIAooAhwiBTYCACAFQezOBkcEQCAFIAUoAgRBAWo2AgQLIAZBpNAGEEMiBUEgIAUoAgAoAhwRBQAhCCAGEEcgCiAINgJMCwJAIAxFDQAgCigCDCEGQerEAUHpxAEgB0GwAXFBIEYbIgdB6cQBayIFQQBKBEAgDEHpxAEgBSAMKAIAKAIwEQQAIAVHDQELIAZBAWtBACAGQQFKGyIGQQBKBEAgBkH4////B08NAwJAIAZBC08EQCAGQQdyQQFqIgUQLCEPIAMgBUGAgICAeHI2ApwBIAMgDzYClAEgAyAGNgKYAQwBCyADIAY6AJ8BIANBlAFqIQ8LIA8gCCAGEDQgBmpBADoAACAMIAMoApQBIANBlAFqIAMsAJ8BQQBIGyAGIAwoAgAoAjARBAAhFCADLACfAUEASARAIAMoApwBGiADKAKUARAqCyAUIAZHDQELQerEASAHayIFQQBKBEAgDCAHIAUgDCgCACgCMBEEACAFRw0BCyAKQQA2AgwMAQsgCyALKAIAQQxrKAIAaiIFIAUoAhBBBXIQegsgDhByIARBAWoiBCASRg0CDAELCwwDCyADQQxqQc+QAkEBEC0aIBAgAygCDEEMaygCAGoiBCAEKAIAQbV/cUECcjYCACANQQxqIg0gCUcNAAsLIAEoAowBIg0gASgCkAEiCUcEQCADQRhqIREDQCADQZQBaiIEIAIQNSADQQxqIAMoApQBIAQgAywAnwEiBUEASCIEGyADKAKYASAFIAQbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBDGpB6MIBQQkQLRoCQCANKAIAIgQgDSgCBCISRg0AA0AgBC0AACEHIAMoAgwiCEEMaygCACADQQxqaiIGKAJMQX9GBEAgA0GUAWoiDiAGKAIcIgU2AgAgBUHszgZHBEAgBSAFKAIEQQFqNgIECyAOQaTQBhBDIgVBICAFKAIAKAIcEQUAGiAOEEcgAygCDCEICyAGQTA2AkwgESAIQQxrIgUoAgBqQQI2AgAgECAFKAIAaiIFIAUoAgBBtX9xQQhyNgIAAkACQCADIANBDGogBxBCIgsQcyIOLQAAQQFHDQAgCyALKAIAQQxrKAIAaiIKKAIEIQcgCigCGCEMIAooAkwiCEF/RgRAIANBlAFqIgYgCigCHCIFNgIAIAVB7M4GRwRAIAUgBSgCBEEBajYCBAsgBkGk0AYQQyIFQSAgBSgCACgCHBEFACEIIAYQRyAKIAg2AkwLAkAgDEUNACAKKAIMIQZB6sQBQenEASAHQbABcUEgRhsiB0HpxAFrIgVBAEoEQCAMQenEASAFIAwoAgAoAjARBAAgBUcNAQsgBkEBa0EAIAZBAUobIgZBAEoEQCAGQfj///8HTw0DAkAgBkELTwRAIAZBB3JBAWoiBRAsIQ8gAyAFQYCAgIB4cjYCnAEgAyAPNgKUASADIAY2ApgBDAELIAMgBjoAnwEgA0GUAWohDwsgDyAIIAYQNCAGakEAOgAAIAwgAygClAEgA0GUAWogAywAnwFBAEgbIAYgDCgCACgCMBEEACEVIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIBUgBkcNAQtB6sQBIAdrIgVBAEoEQCAMIAcgBSAMKAIAKAIwEQQAIAVHDQELIApBADYCDAwBCyALIAsoAgBBDGsoAgBqIgUgBSgCEEEFchB6CyAOEHIgBEEBaiIEIBJGDQIMAQsLDAMLIANBDGpBz5ACQQEQLRogECADKAIMQQxrKAIAaiIEIAQoAgBBtX9xQQJyNgIAIA1BDGoiDSAJRw0ACwsgASgCgAEiDSABKAKEASIRRwRAIANBGGohEgNAIANBlAFqIgEgAhA1IANBDGogAygClAEgASADLACfASIEQQBIIgEbIAMoApgBIAQgARsQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgA0EMakH4wgFBBRAtGgJAIA0oAgAiBCANKAIEIg5GDQADQCAELQAAIQUgAygCDCIIQQxrKAIAIANBDGpqIgkoAkxBf0YEQCADQZQBaiIHIAkoAhwiATYCACABQezOBkcEQCABIAEoAgRBAWo2AgQLIAdBpNAGEEMiAUEgIAEoAgAoAhwRBQAaIAcQRyADKAIMIQgLIAlBMDYCTCASIAhBDGsiASgCAGpBAjYCACAQIAEoAgBqIgEgASgCAEG1f3FBCHI2AgACQAJAIAMgA0EMaiAFEEIiBhBzIgctAABBAUcNACAGIAYoAgBBDGsoAgBqIgsoAgQhBSALKAIYIQogCygCTCIIQX9GBEAgA0GUAWoiCSALKAIcIgE2AgAgAUHszgZHBEAgASABKAIEQQFqNgIECyAJQaTQBhBDIgFBICABKAIAKAIcEQUAIQggCRBHIAsgCDYCTAsCQCAKRQ0AIAsoAgwhCUHqxAFB6cQBIAVBsAFxQSBGGyIFQenEAWsiAUEASgRAIApB6cQBIAEgCigCACgCMBEEACABRw0BCyAJQQFrQQAgCUEBShsiCUEASgRAIAlB+P///wdPDQMCQCAJQQtPBEAgCUEHckEBaiIBECwhDyADIAFBgICAgHhyNgKcASADIA82ApQBIAMgCTYCmAEMAQsgAyAJOgCfASADQZQBaiEPCyAPIAggCRA0IAlqQQA6AAAgCiADKAKUASADQZQBaiADLACfAUEASBsgCSAKKAIAKAIwEQQAIRYgAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgFiAJRw0BC0HqxAEgBWsiAUEASgRAIAogBSABIAooAgAoAjARBAAgAUcNAQsgC0EANgIMDAELIAYgBigCAEEMaygCAGoiASABKAIQQQVyEHoLIAcQciAEQQFqIgQgDkYNAgwBCwsMAwsgA0EMakHPkAJBARAtGiAQIAMoAgxBDGsoAgBqIgEgASgCAEG1f3FBAnI2AgAgDUEMaiINIBFHDQALCwJAAkACfyADKAJAIgFBEHEEQCADQSRqIQggAygCPCIBIAMoAigiAkkEfyADIAI2AjwgAgUgAQsMAQsgAUEIcUUEQEEAIQQgAEEAOgALDAMLIANBGGohCCADKAIgCyAIKAIAIgVrIgRB+P///wdJBEAgBEELTwRAIARBB3JBAWoiAhAsIQEgACACQYCAgIB4cjYCCCAAIAE2AgAgACAENgIEIAEhAAwCCyAAIAQ6AAsgBA0BQQAhBAwCCxA4AAsgACAFIAQQNxoLIAAgBGpBADoAACADQezVAygCACIANgIMIABBDGsoAgAgA0EMampB+NUDKAIANgIAIBBB8MsDNgIAIAMsADtBAEgEQCADKAI4GiADKAIwECoLIBAQPRogA0HEAGoQOxogA0GgAWokAA8LEDgAC5YLAQV/IwBBIGsiAyQAIAEgAkEAIAEoAgAoAiwRBAAhByACIAEtAGQQSCACIAEtAGUQSCACIAEtAGYQSCACIAEtAGcQSCACIAEtAGhBAWtB/AFyQf8BcRBIAkAgASgCeCABKAJ0a0EMbSIEQSBPBEAgA0EwECwiATYCFCADQqyAgICAhoCAgH83AhggAUG8kwEpAAA3AAAgAUEAOgAsIAFB5JMBKAAANgAoIAFB3JMBKQAANwAgIAFB1JMBKQAANwAYIAFBzJMBKQAANwAQIAFBxJMBKQAANwAIIABBCUEAIANBFGoQLxogAywAH0EATg0BIAMoAhwaIAMoAhQQKgwBCyACIARB4AFyQf8BcRBIIAEoAnQiBCABKAJ4IgVHBEADQCAEKAIEIAQoAgBrIgZBgIAETwRAIANBOBAsIgE2AhQgA0K3gICAgIeAgIB/NwIYIAFBnpIBKQAANwAAIAFBADoANyABQc2SASkAADcALyABQcaSASkAADcAKCABQb6SASkAADcAICABQbaSASkAADcAGCABQa6SASkAADcAECABQaaSASkAADcACCAAQQlBACADQRRqEC8aIAMsAB9BAE4NAyADKAIcGiADKAIUECoMAwsgAiAGQf//A3EQTSACIAQQlAEgBEEMaiIEIAVHDQALCyABKAKEASABKAKAAWtBDG0iBEGAAk8EQCADQTAQLCIBNgIUIANCrYCAgICGgICAfzcCGCABQY6TASkAADcAACABQQA6AC0gAUGzkwEpAAA3ACUgAUGukwEpAAA3ACAgAUGmkwEpAAA3ABggAUGekwEpAAA3ABAgAUGWkwEpAAA3AAggAEEJQQAgA0EUahAvGiADLAAfQQBODQEgAygCHBogAygCFBAqDAELIAIgBEH/AXEQSCABKAKAASIEIAEoAoQBIgVHBEADQCAEKAIEIAQoAgBrIgZBgIAETwRAIANBOBAsIgE2AhQgA0K3gICAgIeAgIB/NwIYIAFB1pIBKQAANwAAIAFBADoANyABQYWTASkAADcALyABQf6SASkAADcAKCABQfaSASkAADcAICABQe6SASkAADcAGCABQeaSASkAADcAECABQd6SASkAADcACCAAQQlBACADQRRqEC8aIAMsAB9BAE4NAyADKAIcGiADKAIUECoMAwsgAiAGQf//A3EQTSACIAQQlAEgBEEMaiIEIAVHDQALCwJAIAEtAGVBwgBrIgRBFk1BAEEBIAR0QYGQgAJxGw0AIAIgAS0AbBBIIAIgAS0AcEEIa0H/AXEQSCACIAEtAHFBCGtB/wFxEEggASgCkAEgASgCjAFrQQxtIgRBgAJPBEAgAEEJQQAgA0EUakGwkQEQgAEiABAvGiAALAALQQBODQIgACgCCBogACgCABAqDAILIAIgBEH/AXEQSCABKAKMASIEIAEoApABIgVGDQADQCAEKAIEIAQoAgBrIgZBgIAETwRAIANBwAAQLCIBNgIUIANCu4CAgICIgICAfzcCGCABQeKRASkAADcAACABQQA6ADsgAUGZkgEoAAA2ADcgAUGSkgEpAAA3ADAgAUGKkgEpAAA3ACggAUGCkgEpAAA3ACAgAUH6kQEpAAA3ABggAUHykQEpAAA3ABAgAUHqkQEpAAA3AAggAEEJQQAgA0EUahAvGiADLAAfQQBODQMgAygCHBogAygCFBAqDAMLIAIgBkH//wNxEE0gAiAEEJQBIARBDGoiBCAFRw0ACwsgAyABIAIgBxCbASADLAATQQBIBEAgAygCEBogAygCCBAqCyAAQZClBSkCADcCACAAQQhqIQBBo6UFLAAAQQBOBEAgAEGYpQUpAgA3AgAgAEGgpQUoAgA2AggMAQsgAEGYpQUoAgBBnKUFKAIAEC4LIANBIGokAAuGCQEI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ADoAECADQQA6ABsgAEECQYMBIANBEGoQLxogAywAG0EATg0CIAMoAhgaIAMoAhAQKgwCCyACQgA3AhAgAkIANwIcIAJBADYCMCACIAU2AiwgAkEAOgAYIAJCADcCJCACQbCCBTYCDAsgASAGNgL0AiABKAL4AiEFIAEgAjYC+AICQCAFRQ0AIAUgBSgCBCICQQFrNgIEIAINACAFIAUoAgAoAggRAAAgBRArCyADQQA6ABggA0IANwIkIANCADcDECADQgA3AhwgAyABKAIUIgIoAjA2AgggAyACKAI0IgI2AgwgAgRAIAIgAigCBEEBajYCBAsgASgCJCECIAMgAykCCDcDACADQRBqIAMgAhDSASABKAL0AiEBIAMoAhQhBSADQQA2AhQgAygCECECIANBADYCECADKAIkIQYgA0EANgIkIAMoAiAhByADQQA2AiAgAygCHCEIIANBADYCHCADLQAYIQkgAygCKCEKIAEgAjYCBCABKAIIIQIgASAFNgIIAkAgAkUNACACIAIoAgQiBUEBazYCBCAFDQAgAiACKAIAKAIIEQAAIAIQKwsgASAJOgAMIAEoAhAiAgRAIAEgAjYCFCABKAIYGiACECoLIAEgCjYCHCABIAY2AhggASAHNgIUIAEgCDYCECAAQZClBSkCADcCACAAQQhqIQACQEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLgsgAygCHCIABEAgAyAANgIgIAMoAiQaIAAQKgsCQCADKAIUIgBFDQAgACAAKAIEIgFBAWs2AgQgAQ0AIAAgACgCACgCCBEAACAAECsLIARFDQAgBCAEKAIEIgBBAWs2AgQgAA0AIAQgBCgCACgCCBEAACAEECsLIANBMGokAAsJACAAEOwDECoLmh8BEH8jAEHAAWsiAyQAIANB5NUDNgJcIANB8NUDKAIAIgU2AiQgA0EkaiILIAVBDGsoAgBqQfTVAygCADYCACALIAMoAiRBDGsoAgBqIgUgA0EoaiIEED4gBUKAgICAcDcCSCADQeTVAzYCXCADQdDVAzYCJCAEED8iDUHwywM2AgAgA0IANwJQIANCADcCSCADQRA2AlggA0G0AWoiCiEEIwBBoAFrIgYkACAGQeTVAzYCRCAGQfDVAygCACIF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ayICQfj///8HSQRAIAJBC08EQCACQQdyQQFqIgQQLCEBIAAgBEGAgICAeHI2AgggACABNgIAIAAgAjYCBCABIQAMAgsgACACOgALIAINAUEAIQIMAgsQOAALIAAgBSACEDcaCyAAIAJqQQA6AAAgA0Hs1QMoAgAiADYCJCAAQQxrKAIAIANBJGpqQfjVAygCADYCACANQfDLAzYCACADLABTQQBIBEAgAygCUBogAygCSBAqCyANED0aIANB3ABqEDsaIANBwAFqJAALswoBDH8jAEEgayIEJAAgASACQQAgASgCACgCLBEEACEKIAIgAS0AaSABLQBoQQF0QQZxckH4AXIQSCABLQBpQQFGBEAgAiABLQBuIAEtAGxBBHQgAS8BakEHdHIgAS0AbUECdHJyQf//A3EQTSACIAEtAG9BBXRBH3JB/wFxEEggAiABLQBwQT9xEEggAiABLQByIAEtAHFBAXRB/gFxchBIIAIgAS0AcxBIAkAgAS0AcEUNACACIAEoAngtAAAgAS0AdUEGdCABLQB0QQd0cnJB/wFxEEhBASEDIAEtAHBBAU0NAANAIAIgASgCeCADai0AABBIIANBAWoiAyABLQBwSQ0ACwsCQCABLQBsIgNBAU0NACADQQFrIgVBAXEhDSABKAKEASEHAkAgA0ECayIDRQRAQYABIQZBACEFDAELIAVBfnEhC0GAASEGQQAhBQNAQQAgByADQQFrIglBA3ZB/P///wFxaigCACAJdkEBcWsgBkH/AXEiCUEBdnFBACAHIANBA3ZB/P///wFxaigCACADdkEBcWsgBnEgBXJyIQUgA0ECayEDIAlBAnYhBiAMQQJqIgwgC0cNAAsLIA1FDQBBACAHIANBA3ZB/P///wFxaigCACADdkEBcWsgBnEgBXIhBQsgAiAFQf8BcRBIIAEtAGwiA0ECTwRAIANBAmshAwNAIAEoAoQBIANBA3ZB/P///wFxaigCACADdkEBcQRAIAIgASgCkAEgA2otAAAQSAsgA0EASiEOIANBAWshAyAODQALCyACIAEoAqABIAEoApwBa0ECdkH/AXEiBRBIIAUEQEEAIQMDQCACIAEoApwBIANBAnRqKAIAEEogA0EBaiIDIAVHDQALCyACIAEvAagBEE0gAiABLwGqARBNIAIgAS8BrAEQTQsCQCABKAK0ASAB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QgA3AiQgA0IANwMQIANCADcCHCADIAEoAhQiAigCMDYCCCADIAIoAjQiAjYCDCACBEAgAiACKAIEQQFqNgIECyABKAIkIQIgAyADKQIINwMAIANBEGogAyACENIBIAEoAvQCIQEgAygCFCEFIANBADYCFCADKAIQIQIgA0EANgIQIAMoAiQhBiADQQA2AiQgAygCICEHIANBADYCICADKAIcIQggA0EANgIcIAMtABghCSADKAIoIQogASACNgIEIAEoAgghAiABIAU2AggCQCACRQ0AIAIgAigCBCIFQQFrNgIEIAUNACACIAIoAgAoAggRAAAgAhArCyABIAk6AAwgASgCECICBEAgASACNgIUIAEoAhgaIAIQKgsgASAKNgIcIAEgBjYCGCABIAc2AhQgASAINgIQIABBkKUFKQIANwIAIABBCGohAAJAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAELIABBmKUFKAIAQZylBSgCABAuCyADKAIcIgAEQCADIAA2AiAgAygCJBogABAqCwJAIAMoAhQiAEUNACAAIAAoAgQiAUEBazYCBCABDQAgACAAKAIAKAIIEQAAIAAQKwsgBEUNACAEIAQoAgQiAEEBazYCBCAADQAgBCAEKAIAKAIIEQAAIAQQKwsgA0EwaiQAC8EFAQV/IwBBMGsiAiQAAkACQAJAAkACQAJAIAEoAhgiAyABKAIcIgFHBEADQAJAIAMoAgAiBEUNACAEQaC/BEHMgAUQOSIERQ0AIAMoAgQiAwRAIAMgAygCBEEBajYCBAsgAkEANgIUIAJCADcCDCAEIAJBDGoQ7QMNBSACQQA6AAAgAkEAOgALIAJBGGpBAkH1ACACEC8hASAAQQA2AgggAEIANwIAIAAgASkDADcCDCAAQRRqIQAgASwAE0EASA0DIAAgASkCCDcCACAAIAEoAhA2AggMBAsgA0EIaiIDIAFHDQALCyACQQA6AAwgAkEAOgAXIAJBGGpBAkGNASACQQxqEC8hASAAQQA2AgggAEIANwIAIAAgASkDADcCDCAAQRRqIQACQCABLAATQQBOBEAgACABKQIINwIAIAAgASgCEDYCCAwBCyAAIAEoAgggASgCDBAuIAEsABNBAE4NACABKAIQGiABKAIIECoLIAIsABdBAE4NBCACKAIUGiACKAIMECoMBAsgACABKAIIIAEoAgwQLiABLAATQQBODQAgASgCEBogASgCCBAqCyACLAALQQBODQEgAigCCBogAigCABAqDAELIABBADYCCCAAQgA3AgAgAigCECIBIAIoAgwiBUcEQCABIAVrIgFBAEgNAyAAIAEQLCIENgIEIAAgBDYCACAAIAEgBGoiBjYCCCAEIAUgARAyGiAAIAY2AgQLIABBkKUFKQIANwIMIABBFGohAEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLgsgAigCDCIABEAgAiAANgIQIAIoAhQaIAAQKgsgA0UNACADIAMoAgQiAEEBazYCBCAADQAgAyADKAIAKAIIEQAAIAMQKwsgAkEwaiQADwsQNgAL7wkBBn8jAEGgAWsiAyQAIANB5NUDNgJEIANB8NUDKAIAIgY2AgwgA0EMaiIFIAZBDGsoAgBqQfTVAygCADYCACAFIAMoAgxBDGsoAgBqIgYgA0EQaiIEED4gBkKAgICAcDcCSCADQeTVAzYCRCADQdDVAzYCDCAEED8iBkHwywM2AgAgA0IANwI4IANCADcCMCADQRA2AkAgA0GUAWoiBCABIAIQrAIgBSADKAKUASAEIAMsAJ8BIgVBAEgiBBsgAygCmAEgBSAEGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyADQZQBaiIFIAIQNSADQQxqIAMoApQBIAUgAywAnwEiBUEASCIEGyADKAKYASAFIAQbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBDGpB18ABQQ0QLSEIIAMgASgCZBCkASAIIAMoAgAgAyADLAALIgVBAEgiBBsgAygCBCAFIAQbEC1Bz5ACQQEQLSEFIANBlAFqIgQgAhA1IAUgAygClAEgBCADLACfASIEQQBIIgcbIAMoApgBIAQgBxsQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgBUG2uQFBDxAtGiADLAALQQBIBEAgAygCCBogAygCABAqCwJAIAEoAmgiBUH///+HBE0EQCADQQxqIAUQPBoMAQsgA0GUAWoiBCAFEKQBIANBDGogAygClAEgBCADLACfASIFQQBIIgQbIAMoApgBIAUgBBsQLRogAywAnwFBAE4NACADKAKcARogAygClAEQKgsgA0EMakHPkAJBARAtIQUgA0GUAWoiBCACEDUgBSADKAKUASAEIAMsAJ8BIgJBAEgiBBsgAygCmAEgAiAEGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyAFQYq3AUETEC0aAkAgASgCbCICIAEoAnAiBUYNACADQZQBaiIBIAIoAgAQpAEgA0EMaiADKAKUASABIAMsAJ8BIgFBAEgiBBsgAygCmAEgASAEGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyACQQRqIgEgBUYNAANAIAEoAgAhBCADQSw6AJQBIANBDGoiByADQZQBaiICQQEQLRogAiAEEKQBIAcgAygClAEgAiADLACfASICQQBIIgQbIAMoApgBIAIgBBsQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgAUEEaiIBIAVHDQALCyADQQxqQc+QAkEBEC0aAkACfyADKAJAIgFBEHEEQCADKAI8IgEgAygCKCICSQRAIAMgAjYCPCACIQELIANBJGoMAQsgAUEIcUUEQEEAIQEgAEEAOgALDAILIAMoAiAhASADQRhqCyECAkAgASACKAIAIgVrIgFB+P///wdJBEAgAUELTwRAIAFBB3JBAWoiBBAsIQIgACAEQYCAgIB4cjYCCCAAIAI2AgAgACABNgIEIAIhAAwCCyAAIAE6AAsgAQ0BQQAhAQwCCxA4AAsgACAFIAEQNxoLIAAgAWpBADoAACADQezVAygCACIANgIMIABBDGsoAgAgA0EMampB+NUDKAIANgIAIAZB8MsDNgIAIAMsADtBAEgEQCADKAI4GiADKAIwECoLIAYQPRogA0HEAGoQOxogA0GgAWokAAv+JQESfyMAQbABayIBJAAgAUIANwOoASABQgA3A6ABIAFCADcDmAEgAUIANwOQAUHQARAsIgtB4NgENgIAIAtCADcCBCALQRBqIgxCADcDCCAMQgA3AxAgDEIANwMYIAxBADYCICAMQdS9BDYCACALQgA3AjwgC0IANwI0IAtCfzcDSCALQn83A1AgC0EANgJ0IAtCADcDWCALQgA3A2AgC0IANwNoIAtBADsBcCAMQZiABTYCACALQgA3A4gBIAtBgwI7AXggC0IANwOQASALQgA3A5gBIAtCADcDoAEgC0IANwOoASALQgA3A7ABIAtBADYCyAEgC0IANwLAASALQcPG2bMHNgIgIAEgCzYCHCABIAw2AhggCyALKAIEQQFqNgIEIAEgAUGQAWogAUEYahBTNgKUAQJAIAEoAhwiBEUNACAEIAQoAgQiBkEBazYCBCAGDQAgBCAEKAIAKAIIEQAAIAQQKwsgAUEANgKMASACKAIAIQYCQCACKAIEIgRFBEAgAUEANgKMASABIAY2AogBDAELIAQgBCgCBEEBajYCBCABIAY2AogBIAEoAowBIQIgASAENgKMASACRQ0AIAIgAigCBCIEQQFrNgIEIAQNACACIAIoAgAoAggRAAAgAhArCyABQfwAaiADKAIEIAFBiAFqIAUgAygCACgCZBEGAAJAAkAgASgCfCIEBEAgASgCgAEhBSABKAKEASIGEFgiAkH4////B08NAgJAAkAgAkELTwRAIAJBB3JBAWoiCBAsIQMgASAIQYCAgIB4cjYCeCABIAM2AnAgASACNgJ0DAELIAEgAjoAeyABQfAAaiEDIAJFDQELIAMgBiACEDcaCyACIANqQQA6AAAgAUEYaiAEIAUgAUHwAGoQLyECIABCADcCGCAAQgA3AhAgAEIANwIIIABCADcCACAAIAIpAwA3AiAgAEEoaiEAAkAgAiwAE0EATgRAIAAgAikCCDcCACAAIAIoAhA2AggMAQsgACACKAIIIAIoAgwQLiACLAATQQBODQAgAigCEBogAigCCBAqCyABLAB7QQBODQEgASgCeBogASgCcBAqDAELIAFBADYCcCABQQA2AmwgAUEYaiADKAIEIAFB6ABqIAFB5ABqQQAgAygCACgCaBEHACABKAJoIgIEQANAAkACQCABKAJkIgVBAkgNAAJAAkAgAi0AAUEDdkEOaw4DAQABAgsgAUGDAjsBGCABQgA3AlAgAUIANwJIIAFCADcCQCABQgA3AjggAUIANwIwIAFCADcCKCABQQRqIRIgAiEQIAFBGGohCUEAIQZBACEEQQAhCEEAIQcjAEHQAGsiCiQAIApBADYCTCAKQgA3AkQCQAJAAkACQAJAAkACQCAFIhMEQANAAkACQCAHQQJqIgIgE08NACAHIBBqIgUtAAANACAFLQABDQAgAiAQai0AAEEDRw0AAkAgBiAISwRAIAhBADoAACAI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aiEFAkAgB0EIEEUiBCAJKAI4IAkoAjQiBmtBAnUiAksEQCAFIAQgAmsQqgEMAQsgAiAETQ0AIAkgBiAEQQJ0ajYCOAtBACECIARBAEwNAANAIAdBIBBFIQYgBSgCACACQQJ0aiAGNgIAIAJBAWoiAiAERw0ACwsgB0EBEFQgB0EBEEUEQCAHQQEQVAsgByAKQRxqEHkaIAcgCkEYahB5GiABIAooAhwiAjYCcCABIAooAhgiBDYCbAJAIARBgIAESCACQf//A0xxRQRAIApBOBAsIgI2AgwgCkK3gICAgIeAgIB/NwIQIAJBuJ8BKQAANwAAIAJBADoANyACQeefASkAADcALyACQeCfASkAADcAKCACQdifASkAADcAICACQdCfASkAADcAGCACQcifASkAADcAECACQcCfASkAADcACCASQQlB1g8gCkEMahAvGiAKLAAXQQBODQEgCigCFBogCigCDBAqDAELIAkgBDsBQiAJIAI7AUAgB0EBEEUEQCAHIApBDGoQeRogByAKQQhqEHkaIAcgCkEEahB5GiAHIAoQeRoLIAdBARBFGiAHIApBCGoQeRogCigCCCICQfgBTgRAIApBIBAsIgI2AgwgCkKbgICAgISAgIB/NwIQIAJBz5kBKQAANwAAIAJBADoAGyACQeaZASgAADYAFyACQd+ZASkAADcAECACQdeZASkAADcACCASQQlBACAKQQxqEC8aIAosABdBAE4NASAKKAIUGiAKKAIMECoMAQsgCUEBOgAFIAkgAjoAByASQZClBSkCADcCACASQQhqIQJBo6UFLAAAQQBOBEAgAkGYpQUpAgA3AgAgAkGgpQUoAgA2AggMAQsgAkGYpQUoAgBBnKUFKAIAEC4LIAooAkQiAgRAIAogAjYCSCAKKAJMGiACECoLIApB0ABqJAAMAgsgCiAINgJICyAKIAQ2AkQgCiAGNgJMEDYACyABLAAXQQBIBEAgASgCFBogASgCDBAqCyAMIAFBGGoiAikCADcDaCAMIAIoAgg2AnAgDCACLwEMOwF0AkAgAiAMQegAakYEQCAMQYQBaiACQRxqEO8DDAELIAxB+ABqIAIoAhAiBCACKAIUIgUgBSAEaxCpASAMQYQBaiACQRxqEO8DIAxBkAFqIAIoAigiBCACKAIsIgUgBSAEaxCpASAMQZwBaiACKAI0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AUKAgICAcDcCSCADQczTAygCACIBNgIIIANBCGoiBiABQQxrKAIAakHQ0wMoAgA2AgAgA0HA0wMoAgAiATYCACADIAFBDGsoAgBqQdTTAygCADYCACADQbTTAzYCQCADQYzTAzYCACADQaDTAzYCCCAEED8iAUHwywM2AgAgA0IANwI0IANCADcCLCADQRg2AjwgBkGXrgFBGRAtIAUQPEGWpgFBLBAtIAIoAhBBBW4QPEG6JEEPEC0aAn8gAygCPCICQRBxBEAgA0EgaiEEIAMoAjgiBSADKAIkIgJJBH8gAyACNgI4IAIFIAULDAELIAJBCHFFBEBBACECIANBADoAnwEgA0GUAWohBAwGCyADQRRqIQQgAygCHAsgBCgCACIFayICQfj///8HTw0BIAJBC08EQCACQQdyQQFqIgYQLCEEIAMgBkGAgICAeHI2ApwBIAMgBDYClAEgAyACNgKYAQwECyADIAI6AJ8BIANBlAFqIQQgAg0DQQAhAgwECyABQegAaiEGAkAgASgCbCABKAJoIgdrQQZtIgQgBUkEQCAGIAUgBGsQ8QMMAQsgBCAFTQ0AIAEgByAFQQZsajYCbAsgBUUNAUEAIQQDQCACLQAUDQIgAigCEEUNAiACEE4hCCACEFIhCSACEE4hCiAGKAIAIARBBmxqIgcgCjsBBCAHIAk6AAIgByAIOwEAIARBAWoiBCAFRw0ACwwBCxA4AAsCQCACLQAUQQFGBEAgA0EAOgCUASADQQA6AJ8BIANBAkHkACADQZQBahAvGiADLACfAUEATg0BIAMoApwBGiADKAKUARAqDAELIANBkKUFKQIANwMAIANBCGohBEGjpQUsAABBAE4EQCAEQZilBSkCADcCACAEQaClBSgCADYCCAwBCyAEQZilBSgCAEGcpQUoAgAQLgsgAygCACELIAMsABNBAEgEQCADKAIQGiADKAIIECoLIAsEQCABIAEoAmg2AmwLIAItABRBAUYEQCADQQA6AAAgA0EAOgALIABBAkHkACADEC8aIAMsAAtBAE4NAyADKAIIGiADKAIAECoMAwsgAEGQpQUpAgA3AgAgAEEIaiEAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAMLIABBmKUFKAIAQZylBSgCABAuDAILIAQgBSACEDcaCyACIARqQQA6AAAgAEECQeQAIANBlAFqEC8aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBvNMDKAIAIgA2AgAgAyAAQQxrKAIAakHc0wMoAgA2AgAgA0Hg0wMoAgA2AgggAUHwywM2AgAgAywAN0EASARAIAMoAjQaIAMoAiwQKgsgARA9GiADQUBrEDsaCyADQaABaiQAC5cEAQh/IwBBIGsiBCQAAkACQAJAIAEoAmggASgCZGtB/wFxRQRAIABBkKUFKQIANwIAIABBCGohAEGjpQUsAABBAEgNASAAQZilBSkCADcCACAAQaClBSgCADYCCAwDCyABIAJBACABKAIAKAIsEQQAIQggAiABKAJ0IAEoAnBrQQxtQf8BcRBNIAIgASgCaCABKAJka0H/AXEQSCABKAJkIgMgASgCaCIFRwRAA0AgAiADLQAAEEggA0EBaiIDIAVHDQALCyABKAJwIgUgASgCdCIJRg0BA0AgBEEANgIcIARCADcCFCAFKAIEIgMgBSgCACIGRiIHRQRAAkAgAyAGayIDQQBOBEAgAxAsIAYgAxAyIQYgBw0BQQEgA0EBdiIDIANBAU0bIQpBACEDA0AgBiADQQF0ai8BACEHAkAgASgCZCADai0AAEEITQRAIAIgB0H/AXEQSAwBCyACIAcQTQsgA0EBaiIDIApHDQALDAELEDYACyAGECoLIAVBDGoiBSAJRw0ACwwBCyAAQZilBSgCAEGcpQUoAgAQLgwBCyAEIAEgAiAIEJsBIAQsABNBAEgEQCAEKAIQGiAEKAIIECoLIABBkKUFKQIANwIAIABBCGohAEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLgsgBEEgaiQAC/EFAQR/IwBBoAFrIgMkACADQeTVAzYCRCADQfDVAygCACIGNgIMIANBDGoiBCAGQQxrKAIAakH01QMoAgA2AgAgBCADKAIMQQxrKAIAaiIGIANBEGoiBRA+IAZCgICAgHA3AkggA0Hk1QM2AkQgA0HQ1QM2AgwgBRA/IgZB8MsDNgIAIANCADcCOCADQgA3AjAgA0EQNgJAIANBlAFqIgUgASACEFkgBCADKAKUASAFIAMsAJ8BIgRBAEgiBRsgAygCmAEgBCAFGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyADQZQBaiIEIAIQNSADQQxqIAMoApQBIAQgAywAnwEiAkEASCIEGyADKAKYASACIAQbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBDGoiAkGLwwFBBBAtIAEoAnQgASgCcGtBDG0QPBogAkHhwwFBBxAtIAEoAmggASgCZGtB/wFxEEIaIAJB6cMBQQUQLRogASgCZCICIAEoAmgiAUcEQANAIANBDGogAi0AABBCQbjEAUECEC0aIAJBAWoiAiABRw0ACwsgA0EMakHPkAJBARAtGgJAAn8gAygCQCIBQRBxBEAgAygCPCICIAMoAigiAUkEQCADIAE2AjwgASECCyADQSRqDAELIAFBCHFFBEBBACECIABBADoACwwCCyADKAIgIQIgA0EYagshAQJAIAIgASgCACIEayICQfj///8HSQRAIAJBC08EQCACQQdyQQFqIgUQLCEBIAAgBUGAgICAeHI2AgggACABNgIAIAAgAjYCBCABIQAMAgsgACACOgALIAINAUEAIQIMAgsQOAALIAAgBCACEDcaCyAAIAJqQQA6AAAgA0Hs1QMoAgAiADYCDCAAQQxrKAIAIANBDGpqQfjVAygCADYCACAGQfDLAzYCACADLAA7QQBIBEAgAygCOBogAygCMBAqCyAGED0aIANBxABqEDsaIANBoAFqJAALvAgBDH8jAEEQayIEJAAgAhBOIQsCQAJAIAIQUiINRQ0AA0AgAhBSIgXAQQBIBEAgBEEoECwiATYCBCAEQqaAgICAhYCAgH83AgggAUGT5gApAAA3AAAgAUEAOgAmIAFBseYAKQAANwAeIAFBq+YAKQAANwAYIAFBo+YAKQAANwAQIAFBm+YAKQAANwAIIABBBEG6FyAEQQRqEC8aIAQsAA9BAE4NAyAEKAIMGiAEKAIEECoMAwsgBUERTwRAIARBOBAsIgE2AgQgBEKzgICAgIeAgIB/NwIIIAFB3+UAKQAANwAAIAFBADoAMyABQY7mACgAADYALyABQYfmACkAADcAKCABQf/lACkAADcAICABQfflACkAADcAGCABQe/lACkAADcAECABQeflACkAADcACCAAQQRBuhcgBEEEahAvGiAELAAPQQBODQMgBCgCDBogBCgCBBAqDAMLAkACQCABKAJo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BSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLgsgA0EQaiQACwgAQbHWydEGC0UBAn8gAEHc+gQ2AgACQCAAKAL4AiIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCyAAEHQQKgtDAQJ/IABB3PoENgIAAkAgACgC+AIiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsgABB0C9kHAQl/IwBBMGsiAyQAAkACQAJAIAEoAhgiAiABKAIcIgRHBEADQAJAIAIoAgAiBUUNACAFQaC/BEHM/gQQOSIFRQ0AIAIoAgQiBARAIAQgBCgCBEEBajYCBAtBNBAsIgJCADcCBCACQfDyBDYCACACQQxqIQYgBEUNAyAEIAQoAgRBAWo2AgQgAkEAOgAYIAJCADcCECACQgA3AhwgAkIANwIkIAIgBDYCMCACIAU2AiwgAkHE+wQ2AgwgBCgCBEF/Rw0EIAQgBCgCACgCCBEAACAEECsMBAsgAkEIaiICIARHDQALCyADQRgQLCIBNgIQIANCkoCAgICDgICAfzcCFCABQd2aASkAADcAACABQQA6ABIgAUHtmgEvAAA7ABAgAUHlmgEpAAA3AAggAEECQQAgA0EQahAvGiADLAAbQQBODQIgAygCGBogAygCEBAqDAILIAJCADcCECACQgA3AhwgAkEANgIwIAIgBTYCLCACQQA6ABggAkIANwIkIAJBxPsENgIMCyABIAY2AvQCIAEoAvgCIQUgASACNgL4AgJAIAVFDQAgBSAFKAIEIgJBAWs2AgQgAg0AIAUgBSgCACgCCBEAACAFECsLIANBADoAGCADQgA3AiQgA0IANwMQIANCADcCHCADIAEoAhQiAigCMDYCCCADIAIoAjQiAjYCDCACBEAgAiACKAIEQQFqNgIECyABKAIkIQIgAyADKQIINwMAIANBEGogAyACENIBIAEoAvQCIQEgAygCFCEFIANBADYCFCADKAIQIQIgA0EANgIQIAMoAiQhBiADQQA2AiQgAygCICEHIANBADYCICADKAIcIQggA0EANgIcIAMtABghCSADKAIoIQogASACNgIEIAEoAgghAiABIAU2AggCQCACRQ0AIAIgAigCBCIFQQFrNgIEIAUNACAC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LSABKAJoIAEoAmRrEDxBz5ACQQEQLRoCQAJ/IAMoAkAiAUEQcQRAIAMoAjwiASADKAIoIgJJBEAgAyACNgI8IAIhAQsgA0EkagwBCyABQQhxRQRAQQAhASAAQQA6AAsMAgsgAygCICEBIANBGGoLIQICQCABIAIoAgAiBGsiAUH4////B0kEQCABQQtPBEAgAUEHckEBaiIFECwhAiAAIAVBgICAgHhyNgIIIAAgAjYCACAAIAE2AgQgAiEADAILIAAgAToACyABDQFBACEBDAILEDgACyAAIAQgARA3GgsgACABakEAOgAAIANB7NUDKAIAIgA2AgwgAEEMaygCACADQQxqakH41QMoAgA2AgAgBkHwywM2AgAgAywAO0EASARAIAMoAjgaIAMoAjAQKgsgBhA9GiADQcQAahA7GiADQaABaiQACwgAQefKwdMGC9EGAQV/IwBBoAFrIgMkACADQeTVAzYCRCADQfDVAygCACIGNgIMIANBDGoiBCAGQQxrKAIAakH01QMoAgA2AgAgBCADKAIMQQxrKAIAaiIGIANBEGoiBRA+IAZCgICAgHA3AkggA0Hk1QM2AkQgA0HQ1QM2AgwgBRA/IgZB8MsDNgIAIANCADcCOCADQgA3AjAgA0EQNgJAIANBlAFqIgUgAhA1IAQgAygClAEgBSADLACfASIEQQBIIgUbIAMoApgBIAQgBRsQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgA0EnOgCUASADQQxqIANBlAFqIgRBARAtIQcgBCABKAJkEKQBIAcgAygClAEgBCADLACfASIEQQBIIgUbIAMoApgBIAQgBRsQLUHjtwFBDxAtIAEoAnAgAUHwAGogASwAeyIEQQBIIgUbIAEoAnQgBCAFGxAtQc+QAkEBEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBlAFqIgQgAhA1IANBDGogAygClAEgBCADLACfASICQQBIIgQbIAMoApgBIAIgBBsQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgA0EMakHrsAFBChAtGgJAAkACQAJAIAEoAnwOAwABAgMLIANBDGpB38cBQQYQLRoMAgsgA0EMakGayQFBChAtGgwBCyADQQxqQebHAUEJEC0aCwJAAn8gAygCQCIBQRBxBEAgAygCPCIBIAMoAigiAkkEQCADIAI2AjwgAiEBCyADQSRqDAELIAFBCHFFBEBBACEBIABBADoACwwCCyADKAIgIQEgA0EYagshAgJAIAEgAigCACIEayIBQfj///8HSQRAIAFBC08EQCABQQdyQQFqIgUQLCECIAAgBUGAgICAeHI2AgggACACNgIAIAAgATYCBCACIQAMAgsgACABOgALIAENAUEAIQEMAgsQOAALIAAgBCABEDcaCyAAIAFqQQA6AAAgA0Hs1QMoAgAiADYCDCAAQQxrKAIAIANBDGpqQfjVAygCADYCACAGQfDLAzYCACADLAA7QQBIBEAgAygCOBogAygCMBAqCyAGED0aIANBxABqEDsaIANBoAFqJAALQAEEfiAAKQMoIgMgAq0iBHwiBSAAKQMgIgZYBEAgASAAKAIYIAOnaiACEDIaIAAgACkDKCAEfDcDKAsgBSAGWAtFAQJ/IABB+PgENgIAAkAgACgC+AIiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsgABB0ECoLQwECfyAAQfj4BDYCAAJAIAAoAvgCIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLIAAQdAusBwEJfyMAQTBrIgMkAAJAAkAgASgCGCICIAEoAhwiBEcEQANAAkAgAigCACIFRQ0AIAVBoL8EQZT6BBA5IgVFDQAgAigCBCIERQ0DIAQgBCgCBEEBajYCBAwECyACQQhqIgIgBEcNAAsLQQAhBQtBACEEC0HIABAsIgJCADcCBCACQcDzBDYCACACQQxqIQYCQCAEBEAgBCAEKAIEQQFqNgIEIAJBADoAGCACQgA3AhAgAkIANwIcIAJCADcCJCACIAQ2AjAgAiAFNgIsIAJBqPoENgIMIAQgBCgCBEEBajYCBCACQQA6AEQgAkEAOgA0IAQgBCgCBCIFQQFrNgIEIAUNASAEIAQoAgAoAggRAAAgBBArDAELIAJCADcCECACQgA3AhwgAkEAOgBEIAJBADoANCACQQA2AjAgAiAFNgIsIAJBADoAGCACQgA3AiQgAkGo+gQ2AgwLIAEgBjYC9AIgASgC+AIhBSABIAI2AvgCAkAgBUUNACAFIAUoAgQiAkEBazYCBCACDQAgBSAFKAIAKAIIEQAAIAUQKwsgA0EAOgAYIANCADcCJCADQgA3AxAgA0IANwIcIAMgASgCFCICKAIwNgIIIAMgAigCNCICNgIMIAIEQCACIAIoAgRBAWo2AgQLIAEoAiQhAiADIAMpAgg3AwAgA0EQaiADIAIQ0gEgASgC9AIhASADKAIUIQUgA0EANgIUIAMoAhAhAiADQQA2AhAgAygCJCEGIANBADYCJCADKAIgIQcgA0EANgIgIAMoAhwhCCADQQA2AhwgAy0AGCEJIAMoAighCiABIAI2AgQgASgCCCECIAEgBTYCCAJAIAJFDQAgAiACKAIEIgVBAWs2AgQgBQ0AIAIgAigCACgCCBEAACACECsLIAEgCToADCABKAIQIgIEQCABIAI2AhQgASgCGBogAhAqCyABIAo2AhwgASAGNgIYIAEgBzYCFCABIAg2AhAgAEGQpQUpAgA3AgAgAEEIaiEAAkBBo6UFLAAAQQBOBEAgAEGYpQUpAgA3AgAgAEGgpQUoAgA2AggMAQsgAEGYpQUoAgBBnKUFKAIAEC4LIAMoAhwiAARAIAMgADYCICADKAIkGiAAECoLAkAgAygCFCIARQ0AIAAgACgCBCIBQQFrNgIEIAENACAAIAAoAgAoAggRAAAgABArCwJAIARFDQAgBCAEKAIEIgBBAWs2AgQgAA0AIAQgBCgCACgCCBEAACAEECsLIANBMGokAAvzBgECfyMAQeAAayIBJAAgAUIANwNYIAFCADcDUCABQgA3A0ggAUIANwNAIAIoAgAhBCACKAIEIgIEQCACIAIoAgRBAWo2AgQLIAEgAjYCPCABIAQ2AjggAUEsaiADKAIEIAFBOGogBSADKAIAKAJkEQYAAkACQCABKAIsIgQEQCABKAIwIQMgASgCNCIGEFgiAkH4////B08NAgJAAkAgAkELTwRAIAJBB3JBAWoiBxAsIQUgASAHQYCAgIB4cjYCFCABIAU2AgwgASACNgIQDAELIAEgAjoAFyABQQxqIQUgAkUNAQsgBSAGIAIQNxoLIAIgBWpBADoAACABQRhqIAQgAyABQQxqEC8hAiAAQgA3AhggAEIANwIQIABCADcCCCAAQgA3AgAgACACKQMANwIgIABBKGohAAJAIAIsABNBAE4EQCAAIAIpAgg3AgAgACACKAIQNgIIDAELIAAgAigCCCACKAIMEC4gAiwAE0EATg0AIAIoAhAaIAIoAggQKgsgASwAF0EATg0BIAEoAhQaIAEoAgwQKgwBCyABQQA2AiAgAUIANwIYIAFBDGogAygCBCABQQhqIAFBBGpBACADKAIAKAJoEQcAA0AgASgCCCIGBEACQCABKAIcIAEoAhgiAmsiBCAEIAEoAgQiBWoiB0kEQCABQRhqIAUQZSABKAIEIQUgASgCCCEGIAEoAhghAgwBCyAEIAdNDQAgASACIAdqNgIcCyACIARqIAYgBRAyGiABQQxqIAMoAgQgAUEIaiABQQRqQQAgAygCACgCaBEHAAwBCwsgASgCICECIAFBADYCICABIAI2AlQgASABKQIYNwJMIAFCADcCGCAAIAFBQGsQ5AEgASgCGCIARQ0AIAEgADYCHCABKAIgGiAAECoLAkAgASgCPCIARQ0AIAAgACgCBCICQQFrNgIEIAINACAAIAAoAgAoAggRAAAgABArCyABKAJMIgAEQCABIAA2AlAgASgCVBogABAqCyABKAJAIgAEQCABKAJEIgIgACIFRwRAA0ACQCACQQRrKAIAIgNFDQAgAyADKAIEIgRBAWs2AgQgBA0AIAMgAygCACgCCBEAACADECsLIAJBCGsiAiAARw0ACyABKAJAIQULIAEgADYCRCABKAJIGiAFECoLIAFB4ABqJAAPCxA4AAsvAEGYpgVBBjYCAEGMpgVBAToAAEGcpgVBAToAAEGQpgVChoCAgOAANwIAQYymBQsuAQF/IABBoPcENgIAIAAoAnAiAQRAIAAgATYCdCAAKAJ4GiABECoLIAAQVhAqCywBAX8gAEGg9wQ2AgAgACgCcCIBBEAgACABNgJ0IAAoAngaIAEQKgsgABBWC48CAQN/IwBBIGsiAyQAIAEgAkEAIAEoAgAoAiwRBAAhBAJAAkACQCABKAJkQf//A0sNACABKAJoQf//A0sNACACIAEoAmxB//8DSyIFEEggBQ0BIAIgAS8BZBBNIAIgAS8BaBBNIAIgAS8BbBBNDAILIAJBARBICyACIAEoAmQQSiACIAEoAmgQSiACIAEoAmwQSgsgA0EMaiABIAIgBBCbASADLAAfQQBIBEAgAygCHBogAygCFBAqCyAAQZClBSkCADcCACAAQQhqIQACQEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLgsgA0EgaiQAC6EFAQR/IwBBoAFrIgMkACADQeTVAzYCRCADQfDVAygCACIGNgIMIANBDGoiBCAGQQxrKAIAakH01QMoAgA2AgAgBCADKAIMQQxrKAIAaiIGIANBEGoiBRA+IAZCgICAgHA3AkggA0Hk1QM2AkQgA0HQ1QM2AgwgBRA/IgZB8MsDNgIAIANCADcCOCADQgA3AjAgA0EQNgJAIANBlAFqIgUgASACEFkgBCADKAKUASAFIAMsAJ8BIgRBAEgiBRsgAygCmAEgBCAFGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyADQZQBaiIEIAIQNSADQQxqIAMoApQBIAQgAywAnwEiAkEASCIEGyADKAKYASACIAQbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBDGpBz/sAQQ4QLSABKAJkEDxBnp0BQQEQLSABKAJoEDxBnp0BQQEQLSABKAJsEDxB+IkCQQIQLRoCQAJ/IAMoAkAiAUEQcQRAIAMoAjwiASADKAIoIgJJBEAgAyACNgI8IAIhAQsgA0EkagwBCyABQQhxRQRAQQAhASAAQQA6AAsMAgsgAygCICEBIANBGGoLIQICQCABIAIoAgAiBGsiAUH4////B0kEQCABQQtPBEAgAUEHckEBaiIFECwhAiAAIAVBgICAgHhyNgIIIAAgAjYCACAAIAE2AgQgAiEADAILIAAgAToACyABDQFBACEBDAILEDgACyAAIAQgARA3GgsgACABakEAOgAAIANB7NUDKAIAIgA2AgwgAEEMaygCACADQQxqakH41QMoAgA2AgAgBkHwywM2AgAgAywAO0EASARAIAMoAjgaIAMoAjAQKgsgBhA9GiADQcQAahA7GiADQaABaiQAC+IBACMAQRBrIgMkACABAn8gAhBSQQFxBEAgASACEEk2AmQgASACEEk2AmggAhBJDAELIAEgAhBONgJkIAEgAhBONgJoIAIQTgs2AmwCQCACLQAUQQFGBEAgA0EAOgAEIANBADoADyAAQQJB5AAgA0EEahAvGiADLAAPQQBODQEgAygCDBogAygCBBAqDAELIABBkKUFKQIANwIAIABBCGohAEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLgsgA0EQaiQAC8UIAgR/AX4jAEGwAWsiAyQAIANB5NUDNgJUIANB8NUDKAIAIgY2AhwgA0EcaiIEIAZBDGsoAgBqQfTVAygCADYCACAEIAMoAhxBDGsoAgBqIgYgA0EgaiIFED4gBkKAgICAcDcCSCADQeTVAzYCVCADQdDVAzYCHCAFED8iBkHwywM2AgAgA0IANwJIIANCADcCQCADQRA2AlAgA0GkAWoiBSABIAIQrAIgBCADKAKkASAFIAMsAK8BIgRBAEgiBRsgAygCqAEgBCAFGxAtGiADLACvAUEASARAIAMoAqwBGiADKAKkARAqCwJ/AkACQAJAAkAgASkDCCIHIAEoAiAiBK1aBEAgASgCZCEBIANBiMIBLwAAOwEUIANBBjoAGyADQYTCASgAADYCECADQQA6ABYgA0HoxAEvAAA7AQggA0EGOgAPIANB5MQBKAAANgIEIANBADoACiADQaQBaiICIAEgB6cgBGsgA0EQaiADQQRqEKwEIANBHGogAygCpAEgAiADLACvASIBQQBIIgIbIAMoAqgBIAEgAhsQLRogAywArwFBAEgEQCADKAKsARogAygCpAEQKgsgAywAD0EASARAIAMoAgwaIAMoAgQQKgsgAywAG0EASARAIAMoAhgaIAMoAhAQKgsCfyADKAJQIgFBEHEEQCADKAJMIgEgAygCOCICSQRAIAMgAjYCTCACIQELIANBNGoMAQsgAUEIcUUEQCAAQQA6AAsgAAwHCyADKAIwIQEgA0EoagshAiABIAIoAgAiBGsiAkH4////B08NASACQQtPBEAgAkEHckEBaiIFECwhASAAIAVBgICAgHhyNgIIIAAgATYCACAAIAI2AgQgASEADAULIAAgAjoACyACDQQgAAwFCyADQaQBaiIEIAIQNSADQRxqIAMoAqQBIAQgAywArwEiAkEASCIEGyADKAKoASACIAQbEC0aIAMsAK8BQQBIBEAgAygCrAEaIAMoAqQBECoLIANBHGpBtK0BQREQLSABKQMIEIUBQZSPAkEXEC0aAn8gAygCUCIBQRBxBEAgAygCTCIBIAMoAjgiAkkEQCADIAI2AkwgAiEBCyADQTRqDAELIAFBCHFFBEBBACEBIABBADoACwwECyADKAIwIQEgA0EoagshAiABIAIoAgAiBGsiAUH4////B08NACABQQtPBEAgAUEHckEBaiIFECwhAiAAIAVBgICAgHhyNgIIIAAgAjYCACAAIAE2AgQgAiEADAILIAAgAToACyABDQFBACEBDAILEDgACyAAIAQgARA3GgsgACABagwBCyAAIAQgAhA3IAJqC0EAOgAAIANB7NUDKAIAIgA2AhwgAEEMaygCACADQRxqakH41QMoAgA2AgAgBkHwywM2AgAgAywAS0EASARAIAMoAkgaIAMoAkAQKgsgBhA9GiADQdQAahA7GiADQbABaiQAC6UBAQJ/IwBBIGsiAyQAIAEgAkEAIAEoAgAoAiwRBAAhBCACIAEtAGEQSCADQQxqIAEgAiAEEJsBIAMsAB9BAEgEQCADKAIcGiADKAIUECoLIABBkKUFKQIANwIAIABBCGohAAJAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAELIABBmKUFKAIAQZylBSgCABAuCyADQSBqJAALgwUBBH8jAEGgAWsiAyQAIANB5NUDNgJEIANB8NUDKAIAIgY2AgwgA0EMaiIEIAZBDGsoAgBqQfTVAygCADYCACAEIAMoAgxBDGsoAgBqIgYgA0EQaiIFED4gBkKAgICAcDcCSCADQeTVAzYCRCADQdDVAzYCDCAFED8iBkHwywM2AgAgA0IANwI4IANCADcCMCADQRA2AkAgA0GUAWoiBSABIAIQWSAEIAMoApQBIAUgAywAnwEiBEEASCIFGyADKAKYASAEIAUbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBlAFqIgQgAhA1IANBDGogAygClAEgBCADLACfASICQQBIIgQbIAMoApgBIAIgBBsQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgA0EMakGhsgFBChAtIAEtAGEQQkHPkAJBARAtGgJAAn8gAygCQCIBQRBxBEAgAygCPCICIAMoAigiAUkEQCADIAE2AjwgASECCyADQSRqDAELIAFBCHFFBEBBACECIABBADoACwwCCyADKAIgIQIgA0EYagshAQJAIAIgASgCACIEayICQfj///8HSQRAIAJBC08EQCACQQdyQQFqIgUQLCEBIAAgBUGAgICAeHI2AgggACABNgIAIAAgAjYCBCAB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QSBrIgMkACABIAJBACABKAIAKAIsEQQAIQQCQCABKQMIIAE1AiBaBEAgAiABQeQAahCUASACIAQ2AgwgA0EMaiABIAIgAigCBCAEIAIoAgBqa0EAIAEoAgAoAjARBwAgAiACKAIEIAIoAgBrNgIMIAMsAB9BAEgEQCADKAIcGiADKAIUECoLIABBkKUFKQIANwIAIABBCGohAEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwCCyAAQZilBSgCAEGcpQUoAgAQLgwBCyADQQA6AAAgA0EAOgALIABBAkHlACADEC8aIAMsAAtBAE4NACADKAIIGiADKAIAECoLIANBIGokAAsZAEEMQQogACgCICIALQBmG0EIIAAtAGUbC7ICAQR/IwBBEGsiAiQAIAJBADYCDCACQgA3AgQCQAJAIAEoAiAiASACQewAa0YEQCAAQQA2AgggAEIANwIADAELIAJBBGogASgCcCIDIAEoAnQiASABIANrEKkBIAIoAgghASACKAIEIQMgAEEANgIIIABCADcCACABIANHBEAgASADayIBQQBIDQIgACABECwiBDYCBCAAIAQ2AgAgACABIARqIgU2AgggBCADIAEQMhogACAFNgIECwsgAEGQpQUpAgA3AgwgAEEUaiEAAkBBo6UFLAAAQQBOBEAgAEGYpQUpAgA3AgAgAEGgpQUoAgA2AggMAQsgAEGYpQUoAgBBnKUFKAIAEC4gAigCBCEDCyADBEAgAiADNgIIIAIoAgwaIAMQKgsgAkEQaiQADwsQNgALCABBseDYiwYLRQECfyAAQYT2BDYCAAJAIAAoAvgCIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLIAAQdBAqC0MBAn8gAEGE9gQ2AgACQCAAKAL4AiIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCyAAEHQLpBgCC38CfiMAQYABayIBJAAgAUIANwN4IAFCADcDcCABQgA3A2ggAUIANwNgIAFBADYAXCABQgA3AFUgAUEBOgBUIAFBQGshBiACKAIAQQAQQCEHQQFBAiACKAIAKAIkIgRBA0YbQQIgB0ELSCIIGyIJQQAgBEECTxsgCSAIGyELIAIoAgBBABCmASIIIAIoAgBBABClASIJbCEKIAECfwJAIAhBgMAASg0AIAlBgCJKDQBBDSAKQYGAoARIDQEaC0EfQR9BEUEfIApBgYCAEUgbIAlBgcQAThsgCEGBgAFOGws6AFYgASALOgBVIAEgBEU6AFogASAHQQtLOgBZIAEgB0EISzoAWCABQYGEiAggBEEDdCIHdkEAIARBBEkiCBtBA3FBAXY6AFsgASAEQQFHQQF0OgBdIAFBgYSECCAHdkEAIAgbQQNxQQF2OgBcIAZBkKUFKQIANwIAIAZBCGohBAJAQaOlBSwAAEEATgRAIARBmKUFKQIANwIAIARBoKUFKAIANgIIDAELIARBmKUFKAIAQZylBSgCABAuCyABLABTQQBIBEAgASgCUBogASgCSBAqCyABQQA2AjwgAigCACEGAkAgAigCBCIERQRAIAFBADYCPCABIAY2AjgMAQsgBCAEKAIEQQFqNgIEIAEgBjYCOCABKAI8IQIgASAENgI8IAJFDQAgAiACKAIEIgRBAWs2AgQgBA0AIAIgAigCACgCCBEAACACECsLIAFBLGogAygCBCABQThqIAUgAygCACgCZBEGAAJAAkACQCABKAIsIgRFBEADQCABQRhqIAMoAgQgAUEMaiABQQhqQQAgAygCACgCaBEHACABQdQAaiEGIAEoAgwhAiABKAIIIQVBACEEIwBBMGsiCSQAAkAgCUEQaiACIAUQhQIiBTQCCEIDhiAFNAIYfEIAVw0AAkADQCAFQQEQVCAFQQQQRSECIAVBARBFIQ0gBUEBEEUhCCAFQQEQVCANBEAgBUEIEFQLIAgEQCAFQQgQRa0iEkL/AIMhEQJAIBJCgAGDUA0AIAVBCBBFrSISQgeGQoD/AIMgEYQhESASQoABg1ANACAFQQgQRa0iEkIOhkKAgP8AgyARhCERIBJCgAGDUA0AIAVBCBBFrSISQhWGQoCAgP8AgyARhCERIBJCgAGDUA0AIAVBCBBFrSISQhyGQoCAgID/AIMgEYQhESASQoABg1ANACAFQQgQRa0iEkIjhkKAgICAgP8AgyARhCERIBJCgAGDUA0AIAVBCBBFrSISQiqGQoCAgICAgP8AgyARhCERIBJCgAGDUA0AIAVBCBBFrUIxhkKAgICAgICA/wCDIBGEIRELIAJBAUYNAiARQv////8HVg0DIAUgEacQywQgBTQCGCAFNAIIQgOGfEIAVQ0BDAMLCyACQQFHDQELIAYgBUEDEEU6AAEgBUEBEEUaAkAgBUEBEEUiCwRAIAVBBRBFIQIgBkEAOgADIAYgAjoAAgwBCwJ/AkAgBUEBEEVFDQAgBUEIEMsEIAVBARBFBEAgBSAJQQxqEHkaCyAFQQEQRUUNACAFQQUQRSEEIAVBIBBUIAVBChBUQQEMAQtBAAshCiAFQQEQRSEOIAVBBRBFIghBAEgNACAFQQwQVCAGIAVBBRBFIgI6AAIgBEEBaiEHIAJB+AFxIQIgDkUEQCACBEAgBiAFQQEQRToAAwsCQCAKRQ0AIAVBARBFRQ0AIAUgBxBUIAUgBxBUIAVBARBUCyAIRQ0BQQEhAgNAIAVBDBBUIAVBBRBFQfgBcQRAIAVBARBFGgsgAiEEAkAgCkUNACAFQQEQRUUNACAFIAcQVCAFIAcQVCAFQQEQVAsgBEEBaiECIAQgCEcNAAsMAQsgCkUEQCACBEAgBiAFQQEQRToAAwtBASEEIAYgBUEBEEUiAkEARzoACiACBEAgBiAFQQQQRToACwsgCEUNAQNAIAVBDBBUIAVBBRBFQfgBcQRAIAVBARBFGgsgBUEBEEUEQCAFQQQQRRoLIAQgCEchDyAEQQFqIQQgDw0ACwwBCyACBEAgBiAFQQEQRToAAwsgBUEBEEUEQCAFIAcQVCAFIAcQVCAFQQEQVAsgBiAFQQEQRSICQQBHOgAKIAIEQCAGIAVBBBBFOgALCyAIRQ0AQQEhBANAIAVBDBBUIAVBBRBFQfgBcQRAIAVBARBFGgsgBUEBEEUEQCAFIAcQVCAFIAcQVCAFQQEQVAsgBUEBEEUEQCAFQQQQRRoLIAQgCEYhECAEQQFqIQQgEEUNAAsLIAVBBBBFIQIgBUEEEEUhBCAFIAJBAWoQRRogBSAEQQFqEEUaAkAgC0UEQCAFQQEQRQRAIAVBBxBUCyAFQQMQVCAFQQQQVCAFQQEQRSICBEAgBUECEFQLAkAgBUEBEEVFBEAgBUEBEEVBAEwNAQsgBUEBEEUNACAFQQEQVAsgAkUNAQsgBUEDEFQLIAVBAxBUIAYgBUEBEEUiAjoABCAGLQABIQdBACEEAkAgAkH/AXFFBEBBACECDAELQQAhAiAHQQJHDQAgBUEBEEUhAiAGLQABIQcLIAYgAjoABSAGIAdBAUcEfyAFQQEQRQVBAAs6AAYCfyAFQQEQRUUEQEEAIQdBAAwBCyAFQQgQRUEBRiEHIAVBCBBFQQ1GIQQgBUEIEEVFCyECAkACfyAGLQAGBEAgBUEBEFQgBkGBAjsAB0EJIQRBAAwBCwJAIAQgB3EgAnFBAUYNACAFQQEQVAJAAkACQAJAAkAgBi0AAQ4CAQUACyAGLQAFBEAgBiAFQQEQRSICOgAHIAJB/wFxDQIMBAsgBkEBOgAHDAMLIAZBgQI7AAcMAQsgBiAFQQEQRSICOgAIIAYtAAdFDQQgAkH/AXFFDQQLQQkhBCAFQQIQRQwCC0EIIQRBAAwBCyAGQQA6AAdBCCEEQQALIQIgBCAGaiACOgAACyAFQQEQVAsgCUEwaiQAIAEoAgwiAkUNAiABQeAAaiACIAEoAggQ8gIMAAsACyABKAIwIQUgASgCNCIGEFgiA0H4////B08NAgJAAkAgA0ELTwRAIANBB3JBAWoiBxAsIQIgASAHQYCAgIB4cjYCFCABIAI2AgwgASADNgIQDAELIAEgAzoAFyABQQxqIQIgA0UNAQsgAiAGIAMQNxoLIAIgA2pBADoAACABQRhqIAQgBSABQQxqEC8hAiAAQgA3AhggAEIANwIQIABCADcCCCAAQgA3AgAgACACKQMANwIgIABBKGohAAJAIAIsABNBAE4EQCAAIAIpAgg3AgAgACACKAIQNgIIDAELIAAgAigCCCACKAIMEC4gAiwAE0EATg0AIAIoAhAaIAIoAggQKgsgASwAF0EATg0BIAEoAhQaIAEoAgwQKgwBC0GQARAsIgJBuNgENgIAIAJCADcCBCACQRBqIgRCADcDCCACQgA3AyAgAkIANwMoIAJBADYCMCACQdS9BDYCECACQgA3AjwgAkIANwI0IAJCfzcDSCACQn83A1AgAkIANwNYIAJCADcDYCACQgA3A2ggAkEAOgBwIAJBoPcENgIQIAJBADYCiAEgAkIANwKAASACQcPi2IsGNgIgIAIgASkAVDcAcSACIAEoAFw2AHkgASACNgIcIAEgBDYCGCACIAIoAgRBAWo2AgQCQCABKAJkIgMgASgCaEkEQCADIAI2AgQgAyAENgIAIAEgA0EIajYCZAwBCyABIAFB4ABqIAFBGGoQUzYCZCABKAIcIgNFDQAgAyADKAIEIgRBAWs2AgQgBA0AIAMgAygCACgCCBEAACADECsLIAAgAUHgAGoQ5AEgAiACKAIEIgBBAWs2AgQgAA0AIAIgAigCACgCCBEAACACECsLAkAgASgCPCIARQ0AIAAgACgCBCICQQFrNgIEIAINACAAIAAoAgAoAggRAAAgABArCyABKAJsIgAEQCABIAA2AnAgASgCdBogABAqCyABKAJgIgAEQCABKAJkIgMgACICRwRAA0ACQCADQQRrKAIAIgJFDQAgAiACKAIEIgRBAWs2AgQgBA0AIAIgAigCACgCCBEAACACECsLIANBCGsiAyAARw0ACyABKAJgIQILIAEgADYCZCABKAJoGiACECoLIAFBgAFqJAAPCxA4AAuiBwEJfyMAQTBrIgMkAAJAAkACQCABKAIYIgIgASgCHCIERwRAA0ACQCACKAIAIgVFDQAgBUGgvwRB1PcEEDkiBUUNACACKAIEIgQEQCAEIAQoAgRBAWo2AgQLQTQQLCICQgA3AgQgAkGg8gQ2AgAgAkEMaiEGIARFDQMgBCAEKAIEQQFqNgIEIAJBADoAGCACQgA3AhAgAkIANwIcIAJCADcCJCACIAQ2AjAgAiAFNgIsIAJB7PYENgIMIAQoAgRBf0cNBCAEIAQoAgAoAggRAAAgBBArDAQLIAJBCGoiAiAERw0ACwsgA0EAOgAQIANBADoAGyAAQQJBgwEgA0EQahAvGiADLAAbQQBODQIgAygCGBogAygCEBAqDAILIAJCADcCECACQgA3AhwgAkEANgIwIAIgBTYCLCACQQA6ABggAkIANwIkIAJB7PYENgIMCyABIAY2AvQCIAEoAvgCIQUgASACNgL4AgJAIAVFDQAgBSAFKAIEIgJBAWs2AgQgAg0AIAUgBSgCACgCCBEAACAFECsLIANBADoAGCADQgA3AiQgA0IANwMQIANCADcCHCADIAEoAhQiAigCMDYCCCADIAIoAjQiAjYCDCACBEAgAiACKAIEQQFqNgIECyABKAIkIQIgAyADKQIINwMAIANBEGogAyACENIBIAEoAvQCIQEgAygCFCEFIANBADYCFCADKAIQIQIgA0EANgIQIAMoAiQhBiADQQA2AiQgAygCICEHIANBADYCICADKAIcIQggA0EANgIcIAMtABghCSADKAIoIQogASACNgIEIAEoAgghAiABIAU2AggCQCACRQ0AIAIgAigCBCIFQQFrNgIEIAUNACACIAIoAgAoAggRAAAgAhArCyABIAk6AAwgASgCECICBEAgASACNgIUIAEoAhgaIAIQKgsgASAKNgIcIAEgBjYCGCABIAc2AhQgASAINgIQIABBkKUFKQIANwIAIABBCGohAAJAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAELIABBmKUFKAIAQZylBSgCABAuCyADKAIcIgAEQCADIAA2AiAgAygCJBogABAqCwJAIAMoAhQiAEUNACAAIAAoAgQiAUEBazYCBCABDQAgACAAKAIAKAIIEQAAIAAQKwsgBEUNACAEIAQoAgQiAEEBazYCBCAADQAgBCAEKAIAKAIIEQAAIAQQKwsgA0EwaiQAC5cBAQJ/IABB0PUENgIAAkAgACgCJCIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCyAAQcjxBDYCACAAKAIQIgEEQCAAIAE2AhQgACgCGBogARAqCwJAIAAoAggiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsgABAqC5UBAQJ/IABB0PUENgIAAkAgACgCJCIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCyAAQcjxBDYCACAAKAIQIgEEQCAAIAE2AhQgACgCGBogARAqCwJAIAAoAggiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsgAAvEAwICfgN/IwBBEGsiAyQAAkACQAJAIAEpAwgiBEIAUgRAIAQgATUCICIFVA0BIAQgBX0iBEKAgICACFoEQCADQRgQLCIBNgIEIANCkoCAgICDgICAfzcCCCABQZ7XACkAADcAACABQQA6ABIgAUGu1wAvAAA7ABAgAUGm1wApAAA3AAggAEECQegHIANBBGoQLxogAywAD0EATg0EIAMoAgwaIAMoAgQQKgwECwJAIASnIgYgASgCaCABKAJkIgdrIghLBEAgAUHkAGogBiAIaxBlIAEoAmQhBwwBCyAGIAhPDQAgASAGIAdqNgJoCyACIAcgBhDqAQsgAi0AFEEBRw0BIANBADoABCADQQA6AA8gAEECQeQAIANBBGoQLxogAywAD0EATg0CIAMo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pAEgBCADLACvASIBQQBIIgQbIAMoAqgBIAEgBBsQLRogAywArwFBAEgEQCADKAKsARogAygCpAEQKgsgA0EIakGitAFBFBAtIAstAAAQQkHPkAJBARAtIQEgA0GkAWoiBCACEDUgASADKAKkASAEIAMsAK8BIgRBAEgiBRsgAygCqAEgBCAFGxAtGiADLACvAUEASARAIAMoAqwBGiADKAKkARAqCyABQYG+AUEPEC0gCy0AARBCQc+QAkEBEC0aAkAgCygCBCINIAsoAggiE0YNAANAIANBkAFqIAIQNSADLACbASEGIAMoApABIQggAygClAEhCgJAIANBnAFqIANBCGoiARBzIg4tAABBAUcNACABIAMoAghBDGsoAgBqIgcoAgQhDyAHKAIYIQQgBygCTCIFQX9GBEAgA0GkAWoiCSAHKAIcIgE2AgAgAUHszgZHBEAgASABKAIEQQFqNgIECyAJQaTQBhBDIgFBICABKAIAKAIcEQUAIQUgCRBHIAcgBTYCTAsCQCAERQ0AIAcoAgwhCSAIIANBkAFqIAZBAEgiCBsiASAKIAYgCBsiBmoiECABIA9BsAFxQSBGGyIIIAFrIgpBAEoEQCAEIAEgCiAEKAIAKAIwEQQAIApHDQELIAkgBmtBACAGIAlIGyIBQQBKBEAgAUH4////B08NBwJAIAFBC08EQCABQQdyQQFqIgkQLCEGIAMgCUGAgICAeHI2AqwBIAMgBjYCpAEgAyABNgKoAQwBCyADIAE6AK8BIANBpAFqIQYLIAYgBSABEDQgAWpBADoAACAEIAMoAqQBIANBpAFqIAMsAK8BQQBIGyABIAQoAgAoAjARBAAhBSADLACvAUEASARAIAMoAqwBGiADKAKkARAqCyABIAVHDQELIBAgCGsiAUEASgRAIAQgCCABIAQoAgAoAjARBAAgAUcNAQsgB0EANgIMDAELIAMoAghBDGsoAgAgA0EIamoiASABKAIQQQVyEHoLIA4QciADLACbAUEASARAIAMoApgBGiADKAKQARAqCyANKAIAIgQgDSgCBCIORwRAA0AgBC0AACEHIAMoAggiAUEMaygCACADQQhqaiIFKAJMQX9GBEAgA0GkAWoiBiAFKAIcIgE2AgAgAUHszgZHBEAgASABKAIEQQFqNgIECyAGQaTQBhBDIgFBICABKAIAKAIc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ADcCACAAIAEpAwA3AiAgAEEoaiEAAkAgASwAE0EATgRAIAAgASkCCDcCACAAIAEoAhA2AggMAQsgACABKAIIIAEoAgwQLiABLAATQQBODQAgASgCEBogASgCCBAqCyAELABbQQBODQEgBCgCWBogBCgCUBAqDAELIARBADYCTCAEQQA2AkggBEEgaiADKAIEIARB0ABqIARBxABqQQAgAygCACgCaBEHACAEKAJQIgYEQANAIAYtAAAiBUH+AXFBwgBGBEAgBEIANwIoIARBDGohFiAGIREgBCgCRCETIARBzABqIRQgBEHIAGohFUEAIQFBACEFQQAhBkEAIQhBACESIwBB0ABrIgokACAKQQA2AkwgCkIANwJEAkACQAJAAkACQAJAIBMEQANAAkACQCAIQQJqIgsgE08NACAIIBFqIgctAAANACAHLQABDQAgCyARai0AAEEDRw0AAkAgASAGSwRAIAZBADoAACAGQQFqIQgMAQsgBiAFayIMQQFqIgdBAEgNCCAMQf////8HIAEgBWsiAUEBdCIIIAcgByAISRsgAUH/////A08bIhAEfyAQECwFQQALIg9qIghBADoAAAJ/IAggBSAGRg0AGkEAIQ0gCCEHIAYhASAMQQNxIgwEQANAIAdBAWsiByABQQFrIgEtAAA6AAAgDUEBaiINIAxHDQALCyAPIAUgBmtBfEsNABoDQCAHQQFrIAFBAWstAAA6AAAgB0ECayABQQJrLQAAOgAAIAdBA2sgAUEDay0AADoAACAHQQRrIgcgAUEEayIBLQAAOgAAIAEgBUcNAAsgDwshFyAPIBBqIQEgCEEBaiEIIAUEQCAFECoLIBchBQsgASAISwRAIAhBADoAACAIQQFqIQYMAgsgCCAFayIMQQFqIgZBAEgNBCAMQf////8HIAEgBWsiAUEBdCIHIAYgBiAHSRsgAUH/////A08bIhAEfyAQECwFQQALIg9qIgZBADoAAAJ/IAYgBSAIRg0AGkEAIQ0gBiEHIAghASAMQQNxIgwEQANAIAdBAWsiByABQQFrIgEtAAA6AAAgDUEBaiINIAxHDQALCyAPIAUgCGtBfEsNABoDQCAHQQFrIAFBAWstAAA6AAAgB0ECayABQQJrLQAAOgAAIAdBA2sgAUEDay0AADoAACAHQQRrIgcgAUEEayIBLQAAOgAAIAEg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NwIEIAJB+PEENgIAIAJBDGohBiAERQ0DIAQgBCgCBEEBajYCBCACQQA6ABggAkIANwIQIAJCADcCHCACQgA3AiQgAiAENgIwIAIgBTYCLCACQdD1BDYCDCAEKAIEQX9HDQQgBCAEKAIAKAIIEQAAIAQQKwwECyACQQhqIgIgBEcNAAsLIANBADoAECADQQA6ABsgAEECQeoAIANBEGoQLxogAywAG0EATg0CIAMoAhgaIAMoAhAQKgwCCyACQgA3AhAgAkIANwIcIAJBADYCMCACIAU2AiwgAkEAOgAYIAJCADcCJCACQdD1BDYCDAsgASAGNgL0AiABKAL4AiEFIAEgAjYC+AICQCAFRQ0AIAUgBSgCBCICQQFrNgIEIAINACAFIAUoAgAoAggRAAAgBRArCyADQQA6ABggA0IANwIkIANCADcDECADQgA3AhwgAyABKAIUIgIoAjA2AgggAyACKAI0IgI2AgwgAgRAIAIgAigCBEEBajYCBAsgASgCJCECIAMgAykCCDcDACADQRBqIAMgAhDSASABKAL0AiEBIAMoAhQhBSADQQA2AhQgAygCECECIANBADYCECADKAIkIQYgA0EANgIkIAMoAiAhByADQQA2AiAgAygCHCEIIANBADYCHCADLQAYIQkgAygCKCEKIAEgAjYCBCABKAIIIQIgASAFNgIIAkAgAkUNACACIAIoAgQiBUEBazYCBCAFDQAgAiACKAIAKAIIEQAAIAIQKwsgASAJOgAMIAEoAhAiAgRAIAEgAjYCFCABKAIYGiACECoLIAEgCjYCHCABIAY2AhggASAHNgIUIAEgCDYCECAAQZClBSkCADcCACAAQQhqIQACQEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLgsgAygCHCIABEAgAyAANgIgIAMoAiQaIAAQKgsCQCADKAIUIgBFDQAgACAAKAIEIgFBAWs2AgQgAQ0AIAAgACgCACgCCBEAACAAECsLIARFDQAgBCAEKAIEIgBBAWs2AgQgAA0AIAQgBCgCACgCCBEAACAEECsLIANBMGokAAsPACAAQcDzBDYCACAAECoLDQAgAEHA8wQ2AgAgAAsPACAAQZjzBDYCACAAECoLDQAgAEGY8wQ2AgAgAAsPACAAQfDyBDYCACAAECoLDQAgAEHw8gQ2AgAgAAsPACAAQcjyBDYCACAAECoLDQAgAEHI8gQ2AgAgAAsPACAAQaDyBDYCACAAECoLDQAgAEGg8gQ2AgAgAAsPACAAQfjxBDYCACAAECoLDQAgAEH48QQ2AgAgAAtbAQJ/IABByPEENgIAIAAoAhAiAQRAIAAgATYCFCAAKAIYGiABECoLAkAgACgCCCIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCyAAC70NAgd/AX4jAEHgAGsiAyQAAkACQAJAIAEgASgCACgCCBEBACACKAIYELEEIgRFBEAgA0EAOgAYIANBADoAIyADQTBqQQtB8y4gA0EYahAvIQEgAEIANwIAIAAgASkDADcCCCAAQRBqIQACQCABLAATQQBOBEAgACABKQIINwIAIAAgASgCEDYCCAwBCyAAIAEoAgggASgCDBAuIAEsABNBAE4NACABKAIQGiABKAIIECoLIAMsACNBAE4NASADKAIgGiADKAIYECoMAQsgBCgCFCIFRQRAIANBMBAsIgE2AhggA0KrgICAgIaAgIB/NwIcIAFB0ZYBKAAANgAnIAFBypYBKQAANwAgIAFBwpYBKQAANwAYIAFBupYBKQAANwAQIAFBspYBKQAANwAIIAFBqpYBKQAANwAAIAFBADoAKyADQTBqQQtB8y4gA0EYahAvIQEgAEIANwIAIAAgASkDADcCCCAAQRBqIQACQCABLAATQQBOBEAgACABKQIINwIAIAAgASgCEDYCCAwBCyAAIAEoAgggASgCDBAuIAEsABNBAE4NACABKAIQGiABKAIIECoLIAMsACNBAE4NASADKAIgGiADKAIYECoMAQsgA0HQAGogA0HcAGogBRECACADKAJQIgUEQCADKAJUIQQgAygCWCIHEFgiAkH4////B08NAgJAAkAgAkELTwRAIAJBB3JBAWoiBhAsIQEgAyAGQYCAgIB4cjYCICADIAE2AhggAyACNgIcDAELIAMgAjoAIyADQRhqIQEgAkUNAQsgASAHIAIQNxoLIAEgAmpBADoAACADQTBqIAUgBCADQRhqEC8hASAAQgA3AgAgACABKQMANwIIIABBEGohAAJAIAEsABNBAE4EQCAAIAEpAgg3AgAgACABKAIQNgIIDAELIAAgASgCCCABKAIMEC4gASwAE0EATg0AIAEoAhAaIAEoAggQKgsgAywAI0EATg0BIAMoAiAaIAMoAhgQKgwBCyAEKAIYIQcgAygCXCEFAkAgBCgCAEECSA0AIAQoAiQiBkUNACAFIAItABUgBhECAAsgA0EwaiABEKoCAkAgAygCPARAIABCADcCACAAIAMpAjw3AgggAEEQaiEAIAMsAE9BAE4EQCAAIAMpAkQ3AgAgACADKAJMNgIIDAILIAAgAygCRCADKAJIEC4MAQsgA0EYaiADKAJcIAMoAjAiASADKAI0IAFrIAQoAhwRBgAgAyADKAIgNgJYIAMgAykCGCIKNwNQIAqnIgYEQCADKAJUIQQgAygCWCIIEFgiAkH4////B08NBAJAAkAgAkELTwRAIAJBB3JBAWoiCRAsIQEgAyAJQYCAgIB4cjYCFCADIAE2AgwgAyACNgIQDAELIAMgAjoAFyADQQxqIQEgAkUNAQsgASAIIAIQNxoLIAEgAmpBADoAACADQRhqIAYgBCADQQxqEC8hASAAQgA3AgAgACABKQMANwIIIABBEGohAAJAIAEsABNBAE4EQCAAIAEpAgg3AgAgACABKAIQNgIIDAELIAAgASgCCCABKAIMEC4gASwAE0EATg0AIAEoAhAaIAEoAggQKgsgAywAF0EATg0BIAMoAhQaIAMoAgwQKgwBCyADQQA2AgggA0EYaiIBIAMoAlwgA0EIaiAEKAIgEQMAIAMgAygCIDYCWCADIAMpAhgiCjcDUCAKpyICBEAgASACIAMoAlQgA0EMaiADKAJYEIABIgIQLyEBIABCADcCACAAIAEpAwA3AgggAEEQaiEAAkAgASwAE0EATgRAIAAgASkCCDcCACAAIAEoAhA2AggMAQsgACABKAIIIAEoAgwQLiABLAATQQBODQAgASgCEBogASgCCBAqCyACLAALQQBODQEgAigCCBogAigCABAqDAELIAMoAggiAUUEQCADQRhqQQdBACADQQxqQdCQAhCAASICEC8hASAAQgA3AgAgACABKQMANwIIIABBEGohAAJAIAEsABNBAE4EQCAAIAEpAgg3AgAgACABKAIQNgIIDAELIAAgASgCCCABKAIMEC4gASwAE0EATg0AIAEoAhAaIAEoAggQKgsgAiwAC0EATg0BIAIoAggaIAIoAgAQKgwBCyAD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LAATQQBODQEgAigCEBogAigCCBAqDAELIARBDGogAkEAELYCIAQoAhQaAkAgBCgCDCICIAQoAhBHBEAgAyEFQQgQLCEDIAIoAgAoAgAhASADQQA2AgQgAyABNgIAIAUgAzYCACAAIAMQygQMAQsgA0EANgIAIARBADoAACAEQQA6AAsgBEEMakEDQQAgBBAvIQMgBCwAC0EASARAIAQoAggaIAQoAgAQKgsgACADIAEEfyABKAIABUEACxBBIAMsABNBAEgEQCADKAIQGiADKAIIECoLIAJFDQELIAIQKgsgBEEgaiQAC2IBA38jAEEQayIBJAAQtAIgAUEEaiAAQQAQtgICQAJAIAEoAggiAyABKAIEIgBHBEAgACgCACgCACECDAELIANFDQELIAEgADYCCCABKAIMGiAAECoLIAFBEGokACACQQBHCwwAIABBABCxBEEARwutAQEBfyMAQSBrIgQkAAJAIAJBACADG0UEQCAEQQA6AAAgBEEAOgALIARBDGpBBUHRDyAEEC8hAiAELAALQQBIBEAgBCgCCBogBCgCABAqCyAAIAIgAQR/IAEoAgAFQQALEEEgAiwAE0EATg0BIAIoAhAaIAIoAggQKgwBC0EIECwhASACKAIAIQIgAUEANgIEIAEgAjYCACADIAE2AgAgACABEMoECyAEQSBqJAALCgAgACgCACgCBAsXAQF/IAAoAgBBA04EfyAAKAIoBUEACwsKACAAKAIEEQ8AC8wGAQp/IwBBMGsiAyQAIANBADYCLCADQgA3AiQCQCAARQRAIANBiL8CKQIANwMYIANBgL8CKQIANwMQIANB+L4CKQIANwMIIANBJGogA0EIaiADQSBqQQYQ1wEMAQtBBBAsIgUgADYCACADIAVBBGoiADYCLCADIAU2AiQgAyAANgIoCxC0AgJAQbilBSgCACIFQbylBUYNACADKAIkIAMoAihGDQACQANAAkACQCADKAIkIgAgAygCKCIGRg0AIAUoAhAhCQNAIAAoAgAgCSgCEBEBACILRQRAIAYgAEEEaiIARw0BDAILCyAEIAhJBEAgBCALNgIEIAQgCTYCACAEQQhqIQQMAQsgBCAHa0EDdSIGQQFqIgBBgICAgAJPDQFB/////wEgCCAHayIIQQJ1IgogACAAIApJGyAIQfj///8HTxsiCAR/IAhBgICA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BBArCyADQSBqJAAL4wIBA38jAEEgayIDJAACQCACRQRAIANBADoAACADQQA6AAsgA0EMakEFQdEPIAMQLyECIAMsAAtBAEgEQCADKAIIGiADKAIAECoLIAAgAiABKAIAIgBBCGpBACAAGxBBIAIsABNBAE4NASACKAIQGiACKAIIECoMAQsgASgCACIEKAI0IQUgBCgCOCIEBEAgBCAEKAIEQQFqNgIECwJAIAUEQCACIAUoAggiAiAFKAIMIAJrEDIaIABBkKUFIAEoAgAiAEEIakEAIAAbEEEMAQsgA0EAOgAAIANBADoACyADQQxqQQpBACADEC8hAiADLAALQQBIBEAgAygCCBogAygCABAqCyAAIAIgASgCACIAQQhqQQAgABsQQSACLAATQQBODQAgAigCEBogAigCCBAqCyAERQ0AIAQgBCgCBCIAQQFrNgIEIAANACAEIAQoAgAoAggRAAAgBBArCyADQSBqJAALagEDfyAAKAIAIgAoAjQhASAAKAI4IgAEQCAAIAAoAgRBAWo2AgQLIAEEfyABKAIMIAEoAghrBUEACyEDAkAgAEUNACAAIAAoAgQiAkEBazYCBCACDQAgACAAKAIAKAIIEQAAIAAQKwsgAwvMAQEEfyAAKAIAIgEoAjQhAiABKAI4IgEEQCABIAEoAgRBAWo2AgQLAn8CQCACBEAgASEADAELIAAoAgAiACgCLCECIAAoAjAiAARAIAAgACgCBEEBajYCBAsCQCABRQ0AIAEgASgCBCIDQQFrNgIEIAMNACABIAEoAgAoAggRAAAgARArCyACDQBBAAwBCyACIAIoAgAoAggRAQALIQQCQCAARQ0AIAAgACgCBCIBQQFrNgIEIAENACAAIAAoAgAoAggRAAAgABArCyAEC+UCAQN/IwBBIGsiAyQAAkAgAkUEQCADQQA6AAAgA0EAOgALIANBDGpBBUHRDyADEC8hAiADLAALQQBIBEAgAygCCBogAygCABAqCyAAIAIgASgCACIAQQRqQQAgABsQQSACLAATQQBODQEgAigCEBogAigCCBAqDAELIAEoAgAiBCgCyAEhBSAEKALMASIEBEAgBCAEKAIEQQFqNgIECwJAIAUEQCACIAUoAggiAiAFKAIMIAJrEDIaIABBkKUFIAEoAgAiAEEEakEAIAAbEEEMAQsgA0EAOgAAIANBADoACyADQQxqQQpBACADEC8hAiADLAALQQBIBEAgAygCCBogAygCABAqCyAAIAIgASgCACIAQQRqQQAgABsQQSACLAATQQBODQAgAigCEBogAigCCBAqCyAERQ0AIAQgBCgCBCIAQQFrNgIEIAANACAEIAQoAgAoAggRAAAgBBArCyADQSBqJAAL9QIBBH8jAEEgayIDJAACQCACRQRAIANBADoAACADQQA6AAsgA0EMakEFQdEPIAMQLyECIAMsAAtBAEgEQCADKAIIGiADKAIAECoLIAAgAiABKAIAIgBBBGpBACAAGxBBIAIsABNBAE4NASACKAIQGiACKAIIECoMAQsgASgCACIEKALAASEFIAQoAsQBIgQEQCAEIAQoAgRBAWo2AgQLAkAgBUUEQCADQQA6AAAgA0EAOgALIANBDGpBCkEAIAMQLyECIAMsAAtBAEgEQCADKAIIGiADKAIAECoLIAAgAiABKAIAIgBBBGpBACAAGxBBIAIsABNBAE4NASACKAIQGiACKAIIECoMAQsgA0EMaiIGIAUgAhCvBCAAIAYgASgCACIAQQRqQQAgABsQQSADLAAfQQBODQAgAygCHBogAygCFBAqCyAERQ0AIAQgBCgCBCIAQQFrNgIEIAANACAEIAQoAgAoAggRAAAgBBArCyADQSBqJAALEABB+KUFQfylBSgCABDKAQvRAQAjAEEgayIEJAAgBEEIaiABIAIgA0EAEJYEAkAgBCgCCARAIAAgBCkDCDcCACAAIAQoAhg2AhAgACAEKQMQNwIIIARBADYCGCAEQgA3AxAMAQsgAiABKAJkIAEtAGFBGHRyEEogAEGQpQUpAgA3AgAgAEEIaiEAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAELIABBmKUFKAIAQZylBSgCABAuCyAELAAbQQBIBEAgBCgCGBogBCgCEBAqCyAEQSBqJAALEABB7KUFQfClBSgCABDKAQsQAEHgpQVB5KUFKAIAEMoBC2wBA38gACgCACIAKALIASEBIAAoAswBIgAEQCAAIAAoAgRBAWo2AgQLIAEEfyABKAIMIAEoAghrBUEACyEDAkAgAEUNACAAIAAoAgQiAkEBazYCBCACDQAgACAAKAIAKAIIEQAAIAAQKwsgAwvVAQEDfyAAKAIAIgEoAsgBIQIgASgCzAEiAQRAIAEgASgCBEEBajYCBAsCQCACBEAgAiACKAIAKAIIEQEAIQIMAQsgACgCACIAKALAASECIAAoAsQBIgAEQCAAIAAoAgRBAWo2AgQLIAIEfyACIAIoAgAoAggRAQAFQQALIQIgAEUNACAAIAAoAgQiA0EBazYCBCADDQAgACAAKAIAKAIIEQAAIAAQKwsCQCABRQ0AIAEgASgCBCIAQQFrNgIEIAANACABIAEoAgAoAggRAAAgARArCyACC9gCAQV/IwBBIGsiBCQAAkACQCABKAIAIgUoArQBIgYgBSgCuAEiCEYNAANAIAIgBigCACIHKAIARwRAIAggBkEIaiIGRw0BDAILCyAHKAIoIgIgBygCLCIGRwRAIANFBEAgBEEAOgAAIARBADoACyAEQQxqQQVB0Q8gBBAvIQIgBCwAC0EASARAIAQoAggaIAQoAgAQKgsgACACIAEoAgAiAEEEakEAIAAbEEEgAiwAE0EATg0DIAIoAhAaIAIoAggQKgwDCyADIAIgBiACaxAyGiABKAIAIQULIABBkKUFIAVBBGpBACAFGxBBDAELIARBADoAACAEQQA6AAsgBEEMakEFQdAPIAQQLyECIAQsAAtBAEgEQCAEKAIIGiAEKAIAECoLIAAgAiABKAIAIgBBBGpBACAAGxBBIAIsABNBAE4NACACKAIQGiACKAIIECoLIARBIGokAAtPAQN/AkAgACgCACICKAK0ASIAIAIoArgBIgRGDQADQCABIAAoAgAiAigCAEcEQCAEIABBCGoiAEcNAQwCCwsgAigCLCACKAIoayEDCyADC1cBA38CQCAAKAIAIgIoArQBIgAgAigCuAEiBEYNAANAIAEgACgCACICKAIARwRAIAQgAEEIaiIARw0BDAILCyACKAIcIAJBHGogAiwAJ0EASBshAwsgAwtXAQN/AkAgACgCACICKAK0ASIAIAIoArgBIgRGDQADQCABIAAoAgAiAigCAEcEQCAEIABBCGoiAEcNAQwCCwsgAigCECACQRBqIAIsABtBAEgbIQMLIAMLVwEDfwJAIAAoAgAiAigCtAEiACACKAK4ASIERg0AA0AgASAAKAIAIgIoAgBHBEAgBCAAQQhqIgBHDQEMAgsLIAIoAgQgAkEEaiACLAAPQQBIGyEDCyADCzQBAn8gASgCDCEEIAFBGEEIIAAoAhBB5NLVqwdGGyIAQQhqIAAgAhsQvwIgAUEEEL8CIAQL0AEBBX8CQCAAKAIAIgUoArQBIgAgBSgCuAEiB0YNACABBEADQAJAIAAoAgAiBSgCCCAFLAAPIgYgBkEASCIGGyIIIAEQWEcNACAFKAIEIAVBBGogBhsgASAIEF8NACADIARMDQMgAiAEQQJ0aiAFKAIANgIAIARBAWohBAsgAEEIaiIAIAdHDQAMAgsACyADQQAgA0EAShshAQNAIAEgBEYEQCABDwsgAiAEQQJ0aiAAKAIAKAIANgIAIARBAWohBCAAQQhqIgAgB0cNAAsLIAQLjgEBBX8gACgCACICKAK0ASIAIAIoArgBIgVGBEBBAA8LAkAgAUUEQCAFIABrQQhrQQN2QQFqIQIMAQsgARBYIQZBACECA0AgBiAAKAIAIgMoAgggAywADyIEIARBAEgiBBtGBEAgAiADKAIEIANBBGogBBsgASAGEF9FaiECCyAAQQhqIgAgBUcNAAsLIAIL1wMBA38jAEEQayIFJAACQAJAIAIQWEEERwRAIABB/OwEKQIANwIAIABBhO0EKAIANgIIDAELIAIoAAAhBiAFQQA2AgwgBUIANwIEIAVBBGpBACADIAMgBGogBBDFAUEgECwiAkEANgIcIAJCADcCFCACIAZBGHQgBkGA/gNxQQh0ciAGQQh2QYD+A3EgBkEYdnJyNgIQIAJBpOYENgIMIAJBvOcENgIAIAJCADcCBCAFKAIIIgMgBSgCBCIERwRAIAMgBGsiA0EASA0CIAIgAxAsIgY2AhQgAiADIAZqIgc2AhwgBiAEIAMQMhogAiAHNgIYCyABKAIAIQMgAiACKAIEQQJqNgIEIAMgAkEMajYCNCADKAI4IQEgAyACNgI4AkAgAUUNACABIAEoAgQiA0EBazYCBCADDQAgASABKAIAKAIIEQAAIAEQKwsgAiACKAIEIgFBAWs2AgQgAUUEQCACIAIoAgAoAggRAAAgAhArCyAAQeTsBCkCADcCACAAQezsBCgCADYCCCACIAIoAgQiAEEBazYCBCAARQRAIAIgAigCACgCCBEAACACECsLIAUoAgQiAEUNACAFIAA2AgggBSgCDBogABAqCyAFQRBqJAAPCxA2AAuTCgEQfyMAQSBrIgskACALQQxqIQggASgCACEKIAIhDyADIRAjAEEwayIEJAACQCAKKAI8IgMgCkFAayINRwRAIAhBCGohDgNAIA8gECADKAIQIAooAiQgBEEsaiAEQShqEIkDAkAgAygCECIGQQpGBEBB/wEhByAKKAIkQQprIgJBBk8NAUKYwMCBhIYQIAJBA3StiKchBwwBC0EAIQcgDSIFKAIAIgJFDQADQCAFIAIgAigCECAGSCIJGyEFIAIgCUECdGooAgAiAg0ACyAFIA1GDQAgBSgCECAGSg0AIAUtABhBB2ohBwsgAygCICEFIAMoAhwhDCAHQQN2QR9xIQkgBCgCKCECAkACQAJAAkACQCAEKAIsIgcgAygCJE0EQCADKAIoIAJPDQELIARBgAI7AQggBEEBNgIEIARBADYCJCAEQgA3AhwgBEIANwIUIARCADcCDCAIIARBBGogByACIAMoAhQgAy0AGAJ/QQEhAgJAAkACQAJAIAooAiQOZAMDAwMCAgICAgIAAQABAAECAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCC0EDDAMLQQQMAgtBACECCyACC0EAELkCIAgoAgANByAILAATQQBIBEAgCCgCEBogCCgCCBAqCyAEKAIcIgZFDQEgAygCIARAQQAhAiAEKAIkIQcDQCAGIAIgB2xqIAMoAiwgAygCNCACbGogAygCHCAJbBAyGiACQQFqIgIgAygCIEkNAAsLIAMgBCkCBDcCFCADIAQoAiQ2AjQgAyAEKQIcNwIsIAMgBCkCFDcCJCADIAQpAgw3AhwgAygCECEGIAQoAiwhBwtBgH9BACAGQQFrQQJJG0EAIAlBAUYbIQICQCAHIAxGDQAgBUUNACAJIAxsIQdBACEGIAVBAUcEQCAFQX5xIRJBACERA0AgAygCLCADKAI0IAZsaiAHaiACIAQoAiwgDGsgCWwQNBogAygCLCADKAI0IAZBAXJsaiAHaiACIAQoAiwgDGsgCWwQNBogBkECaiEGIBFBAmoiESASRw0ACwsgBUEBcUUNACADKAIsIAMoAjQgBmxqIAdqIAIgBCgCLCAMayAJbBA0GgsgBSAEKAIoIgZJDQEMAwsgCEGkpQUpAgA3AgBBt6UFLAAAQQBIDQEgDkGspQUpAgA3AgAgDkG0pQUoAgA2AggMBQsDQCADKAIsIAMoAjQgBWxqIAIgBCgCLCAJbBA0GiAFQQFqIgUgBCgCKCIGSQ0ACwwBCyAOQaylBSgCAEGwpQUoAgAQLgwDCyAEKAIsIQIgAyAGNgIgIAMgAjYCHAJAIAMoAgQiBQRAA0AgBSICKAIAIgUNAAwCCwALA0AgAygCCCICKAIAIANHIRMgAiEDIBMNAAsLIAIiAyANRw0ACwsgCiAQNgIcIAogDzYCGCAIQZClBSkCADcCACAIQQhqIQJBo6UFLAAAQQBOBEAgAkGYpQUpAgA3AgAgAkGgpQUoAgA2AggMAQsgAkGYpQUoAgBBnKUFKAIAEC4LIARBMGokAAJAIAsoAgwEQCAAIAggASgCACIAQQhqQQAgABsQQQwBCyAAQZzxBCkCADcCACAAQaTxBCgCADYCCAsgCywAH0EASARAIAsoAhwaIAsoAhQQKgsgC0EgaiQAC8IBAgF/AX4jAEEgayIFJAAgBUIANwIYIAVBBGoiBiABKAIAIAVBGGogAyAEQQAQjAMgACAFKAIEBH8gBgUgAkEIECwiADYCACAFKQIYIQcgBUIANwIYIAAgBzcCAEGQpQULIAEoAgAiAEEIakEAIAAbEEEgBSwAF0EASARAIAUoAhQaIAUoAgwQKgsCQCAFKAIcIgBFDQAgACAAKAIEIgFBAWs2AgQgAQ0AIAAgACgCACgCCBEAACAAECsLIAVBIGokAAuUCQEPfyMAQSBrIgokACAKQQxqIQggASgCACELIAIhDyADIRAjAEEwayIEJAACQAJAIAsoAjwiAyALQUBrIg1HBEAgCEEIaiEOA0AgDyAQIAMoAhAgCygCJCAEQSxqIARBKGoQiQMCQCADKAIQIglBCkYEQEH/ASEGIAsoAiRBCmsiAkEGTw0BQpjAwIGEhhAgAkEDdK2IpyEGDAELQQAhBiANIgUoAgAiAkUNAANAIAUgAiACKAIQIAlIIgcbIQUgAiAHQQJ0aigCACICDQALIAUgDUYNACAFKAIQIAlKDQAgBS0AGEEHaiEGCyADKAIgIQkgAygCHCEFIAZB+AFxQQN2IQwgBCgCKCECAkAgBCgCLCIHIAMoAiRNBEAgAygCKCACTw0BCyAEQYACOwEIIARBATYCBCAEQQA2AiQgBEIANwIcIARCADcCFCAEQgA3AgwgCCAEQQRqIAcgAiADKAIUIAMtABgCf0EBIQICQAJAAkACQCALKAIkDmQDAwMDAgICAgICAAEAAQABAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgtBAwwDC0EEDAILQQAhAgsgAgtBABC5AiAIKAIADQQgCCwAE0EASARAIAgoAhAaIAgoAggQKgsgBCgCHCIGRQ0DIAMoAiAEQEEAIQIgBCgCJCEHA0AgBiACIAdsaiADKAIsIAMoAjQgAmxqIAMoAhwgDGwQMhogAkEBaiICIAMoAiBJDQALCyADIAQpAgQ3AhQgAyAEKAIkNgI0IAMgBCkCHDcCLCADIAQpAhQ3AiQgAyAEKQIMNwIcIAQoAiwhBwsCQCAFIAdGDQAgCUUNACAFIAdPDQAgBUEBayAMbCERQQAhBgNAIAUiAiAHSQRAA0AgAygCLCADKAI0IAZsaiIHIAIgDGxqIAcgEWogDBAyGiACQQFqIgIgBCgCLCIHSQ0ACwsgBkEBaiIGIAlHDQALCyAEKAIoIAlLBEAgCUEBayECA0AgAygCLCIFIAMoAjQiBiAJbGogBSACIAZsaiAEKAIsIAxsEDIaIAlBAWoiCSAEKAIoSQ0ACwsCQCADKAIEIgUEQANAIAUiAigCACIFDQAMAgsACwNAIAMoAggiAigCACADRyESIAIhAyASDQALCyACIgMgDUcNAAsLIAhBkKUFKQIANwIAIAhBCGohAkGjpQUsAABBAE4EQCACQZilBSkCADcCACACQaClBSgCADYCCAwCCyACQZilBSgCAEGcpQUoAgAQLgwBCyAIQaSlBSkCADcCAEG3pQUsAABBAE4EQCAOQaylBSkCADcCACAOQbSlBSgCADYCCAwBCyAOQaylBSgCAEGwpQUoAgAQLgsgBEEwaiQAAkAgCigCDARAIAAgCCABKAIAIgBBCGpBACAAGxBBDAELIABB5OwEKQIANwIAIABB7OwEKAIANgIICyAKLAAfQQBIBEAgCigCHBogCigCFBAqCyAKQSBqJAALEwAgAEUEQEEADwsgACgCAC0AKAsUACAABEAgACgCACABQQBHOgAoCwstAQJ/IAEoAgwhBCABQRhB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EEggASACIAA0AgQQaCABIAIgADQCCBBoCyEAIAAoAgRBgIACa0GAgHxJIAAoAghBgIACa0GAgHxJcgvfAwEFfyMAQRBrIgckAAJAIAIoAgQgBCgCACIGIAIoAgBqIgVrIANBCG1BAXRJBEAgB0EwECwiATYCBCAHQqyAgICAhoCAgH83AgggAUG4NykAADcAACABQQA6ACwgAUHgNygAADYAKCABQdg3KQAANwAgIAFB0DcpAAA3ABggAUHINykAADcAECABQcA3KQAANwAIIABBAkGIASAHQQRqEC8aIAcsAA9BAE4NASAHKAIMGiAHKAIEECoMAQsgBS0AACEIIAUtAAEhCQJ/IANBIEYEQCAGQQRqIQYgBS0AAyAJQRB0IAhBGHRyIAUtAAJBCHRycgwBCyAGQQJqIQYgCUEQdCAIQRh0ckEQdQshBSAEIAY2AgAgASAFNgIEIAQoAgAiBSACKAIAaiICLQAAIQYgAi0AASEIAn8gA0EgRgRAIAVBBGohAyACLQADIAhBEHQgBkEYdHIgAi0AAkEIdHJyDAELIAVBAmohAyAIQRB0IAZBGHRyQRB1CyECIAQgAzYCACABIAI2AgggAEGQpQUpAgA3AgAgAEEIaiEAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAELIABBmKUFKAIAQZylBSgCABAuCyAHQRBqJAALLQECfyAAKAIAIgEEQANAIAEQKiAAIAJBAWoiAkECdGooAgAiAQ0ACwsgABAqC1ABAX8gACgCGCEBIABBADYCGCAAQfi7BDYCACABBEAgASABKAIAKAIEEQAACyAAQai9BDYCACAALAAXQQBIBEAgACgCFBogACgCDBAqCyAACxEBAX9BBBAsIgBBADYCACAACyYAIAMEQCADQQA2AgALIABB4OgEKQIANwIAIABB6OgEKAIANgIICxoAIABB4OgEKQIANwIAIABB6OgEKAIANgIICxoAIABB4OgEKQIANwIAIABB6OgEKAIANgIIC6ADAQR/AkACQAJAQdClBSgCACIADgICAAELQbilBSgCACIAQbylBUcEQANAIAAoAhAoAgwiAQRAIAERDgALAkAgACgCBCIBBEADQCABIgAoAgAiAQ0ADAILAAsDQCAAIAAoAggiACgCAEcNAAsLIABBvKUFRw0ACwtB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BCADKAIMQQxrKAIAaiIGIANBEGoiBRA+IAZCgICAgHA3AkggA0Hk1QM2AkQgA0HQ1QM2AgwgBRA/IgZB8MsDNgIAIANCADcCOCADQgA3AjAgA0EQNgJAIANBlAFqIgUgASACEFkgBCADKAKUASAFIAMsAJ8BIgRBAEgiBRsgAygCmAEgBCAFGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCwJAIAEoAmQEQCADQZQBaiIEIAIQNSADQQxqIAMoApQBIAQgAywAnwEiBEEASCIFGyADKAKYASAEIAUbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBDGpBkb4BQQ0QLSEIIANBlAFqIgUgASgCZCIHIAcoAgAoAggRAQAQpAEgCCADKAKUASAFIAMsAJ8BIgRBAEgiBRsgAygCmAEgBCAFGxAtQc+QAkEBEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBlAFqIgQgASgCZCIBIAIgASgCACgCDBEDACADQQxqIAMoApQBIAQgAywAnwEiAUEASCICGyADKAKYASABIAIbEC0aIAMsAJ8BQQBODQEgAygCnAEaIAMoApQBECoMAQsgA0GUAWoiASACEDUgA0EMaiADKAKUASABIAMsAJ8BIgFBAEgiAhsgAygCmAEgASACGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyADQQxqIgFB0o4CQREQLRogAUGIyQFBERAtGgsCQAJ/IAMoAkAiAUEQcQRAIAMoAjwiASADKAIoIgJJBEAgAyACNgI8IAIhAQsgA0EkagwBCyABQQhxRQRAQQAhASAAQQA6AAsMAgsgAygCICEBIANBGGoLIQICQCABIAIoAgAiBGsiAUH4////B0kEQCABQQtPBEAgAUEHckEBaiIFECwhAiAAIAVBgICAgHhyNgIIIAAgAjYCACAAIAE2AgQgAiEADAILIAAgAToACyABDQFBACEBDAILEDgACyAAIAQgARA3GgsgACABakEAOgAAIANB7NUDKAIAIgA2AgwgAEEMaygCACADQQxqakH41QMoAgA2AgAgBkHwywM2AgAgAywAO0EASARAIAMoAjgaIAMoAjAQKgsgBhA9GiADQcQAahA7GiADQaABaiQAC9MLAgZ/An4jAEEQayIEJAACQAJAAkACQAJAAkACQCACEEkiCUHDhqWSB0YNACAJQebeyYMHRg0AIAlB+NiN8wZHDQFBGBAsIgVBAToAFiAFQQY7ARQgBUGBgDQ2AhAgBUIBNwIEIAVBzOYENgIMIAVB1OMENgIAIAEgBUEMaiIDNgJkIAEoAmghBiABIAU2AmgCQCAGRQ0AIAYgBigCBCIBQQFrNgIEIAENACAGIAYoAgAoAggRAAAgBhArCyMAQRBrIgYkACACKAIAIgEgASgCACgCCBESACEKAkAgAigCACIBIApCB3wgASgCACgCDBEQAARAIAZBADoABCAGQQA6AA8gAEECQeQAIAZBBGoQLxogBiwAD0EATg0BIAYoAgwaIAYoAgQQKgwBCyADIAIQTjsBBCADIAIQTjsBBiADIAIQTjsBCCADIAIQUkEHdjoACiAAQZClBSkCADcCACAAQQhqIQFBo6UFLAAAQQBOBEAgAUGYpQUpAgA3AgAgAUGgpQUoAgA2AggMAQsgAUGYpQUoAgBBnKUFKAIAEC4LIAZBEGokACAAKAIADQIgACwAE0EASARAIAAoAhAaIAAoAggQKgsgBSAFKAIEIgFBAWs2AgQgAQ0FIAUgBSgCACgCCBEAACAFECsMBQsgASkDCCIKUARAIARBOBAsIgE2AgQgBEK0gICAgIeAgIB/NwIIIAFBl+cAKQAANwAAIAFBADoANCABQcfnACgAADYAMCABQb/nACkAADcAKCABQbfnACkAADcAICABQa/nACkAADcAGCABQafnACkAADcAECABQZ/nACkAADcACCAAQQRBACAEQQRqEC8aIAQsAA9BAE4NBiAEKAIMGiAEKAIEECoMBgsgCiABNQIgfUIEfSELAkAgAzUCICIKUA0AIAogC1oNACAEQTAQLCIBNgIEIARCrICAgICGgICAfzcCCCABQanLACkAADcAACABQQA6ACwgAUHRywAoAAA2ACggAUHJywApAAA3ACAgAUHBywApAAA3ABggAUG5ywApAAA3ABAgAUGxywApAAA3AAggAEECQegHIARBBGoQLxogBCwAD0EATg0GIAQoAgwaIAQoAgQQKgwGCyACKAIAIgMgAygCACgCCBESACEKIAIoAgAiAyAKIAunIgetfCADKAIAKAIMERAABEAgBEEAOgAEIARBADoADyAAQQJB5AAgBEEEahAvGiAELAAPQQBODQYgBCgCDBogBCgCBBAqDAYLIARBADYCDCAEQgA3AgQgBwRAIAdBAEgNAyAEIAcQLCIINgIEIAQgByAIaiIFNgIMQQAhAyAIQQAgBxA0IQYgBCAFNgIIA0AgAyAGaiACEFI6AAAgA0EBaiIDIAdHDQALC0EgECwiB0EANgIcIAdCADcCFCAHIAk2AhAgB0IANwIEIAdBpOYENgIMIAdBvOcENgIAIAUgCEcEQCAFIAhrIgVBAEgNBCAHIAUQLCIGNgIUIAcgBSAGaiIDNgIcIAYgCCAFEDIaIAcgAzYCGAsgASAHQQxqNgJkIAEoAmghAyABIAc2AmgCQCADRQ0AIAMgAygCBCIBQQFrNgIEIAENACADIAMoAgAoAggRAAAgAxArCyAEKAIEIgFFDQQgBCgCDBogARAqDAQLIARBADoABCAEQQA6AA8gAEECQf4AIARBBGoQLxogBCwAD0EATg0EIAQoAgwaIAQoAgQQKgwECyAFIAUoAgQiAEEBazYCBCAADQMgBSAFKAIAKAIIEQAAIAUQKwwDCxA2AAsQNgALIAItABRBAUYEQCAEQQA6AAQgBEEAOgAPIABBAkHkACAEQQRqEC8aIAQsAA9BAE4NASAEKAIMGiAEKAIEECoMAQsgAEGQpQUpAgA3AgAgAEEIaiEAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAELIABBmKUFKAIAQZylBSgCABAuCyAEQRBqJAALEABBxKUFQcilBSgCABC3AgsQAEG4pQVBvKUFKAIAELgCC4oRAgd/AX4jAEHgAWsiAyQAQn8hCiAAKAIYIgQoAgBBAk4EQCADQcgBaiABIAIgACgCHCAEKAIUERwAIANBADYCwAEgA0IANwO4AQJAAkACQAJAAkACQAJAAkACQAJAIAMoAtwBIgdFDQAgBxBYIgVB+P///wdPDQECQAJAIAVBC08EQCAFQQdyQQFqIgYQLCEEIAMgBkGAgICAeHI2AjAgAyAENgIoIAMgBTYCLAwBCyADIAU6ADMgA0EoaiEEIAVFDQELIAQgByAFEDcaCyAEIAVqQQA6AAAgAywAwwFBAEgEQCADKALAARogAygCuAEQKgsgAyADKAIwNgLAASADIAMpAig3A7gBIAAoAhgoAiAiBEUNACADKALcASAEEQAACwJAAkACQCADKALIAQ4ECwoAAQILIANBGBAsIgQ2AhAgA0KVgICAgIOAgIB/NwIUIARB48oAKQAANwANIARB3soAKQAANwAIIARB1soAKQAANwAAIARBADoAFSAAIANBKGpBAkHkACADQRBqEC8iBCkDADcCBCAALAAXQQBIBEAgACgCFBogACgCDBAqCyAAIAQpAgg3AgwgACAEKAIQNgIUIARBADoAEyAEQQA6AAggAywAG0EASARAIAMoAhgaIAMoAhAQKgsgAykD0AEhAgwKCyADKALcAQRAIANBoNMDNgIwIANBtNMDNgJoIANBxNMDKAIAIgQ2AiggBEEMaygCACADQShqakHI0wMoAgA2AgAgAygCKCEJIANBADYCLCAJQQxrKAIAIANBKGpqIgQgA0E0aiIFED4gBEKAgICAcDcCSCADQczTAygCACIENgIwIANBMGoiBiAEQQxrKAIAakHQ0wMoAgA2AgAgA0HA0wMoAgAiBDYCKCAEQQxrKAIAIANBKGpqQdTTAygCADYCACADQbTTAzYCaCADQYzTAzYCKCADQaDTAzYCMCAFED8iB0HwywM2AgAgA0IANwJcIANCADcCVCADQRg2AmQgBkHEowFBDRAtIAMoAtgBEEJBssQBQQQQLSADKAK4ASADQbgBaiADLADDASIEQQBIIgUbIAMoArwBIAQgBRsQLRoCfyADKAJkIgRBEHEEQCADQcgAaiEEIAMoAmAiBiADKAJMIgVJBH8gAyAFNgJgIAUFIAYLDAELIARBCHFFBEBBACEFIANBADoADyADQQRqIQQMCgsgA0E8aiEEIAMoAkQLIAQoAgAiBmsiBUH4////B08NAyAFQQtPBEAgBUEHckEBaiIIECwhBCADIAhBgICAgHhyNgIMIAMgBDYCBCADIAU2AggMCAsgAyAFOgAPIANBBGohBCAFDQdBACEFDAgLIANBoNMDNgIwIANBtNMDNgJoIANBxNMDKAIAIgQ2AiggA0EoaiIFIARBDGsoAgBqQcjTAygCADYCACADQQA2AiwgBSADKAIoQQxrKAIAaiIEIANBNGoiBxA+IARCgICAgHA3AkggA0HM0wMoAgAiBDYCMCADQTBqIgYgBEEMaygCAGpB0NMDKAIANgIAIANBwNMDKAIAIgQ2AiggBSAEQQxrKAIAakHU0wMoAgA2AgAgA0G00wM2AmggA0GM0wM2AiggA0Gg0wM2AjAgBxA/IgdB8MsDNgIAIANCADcCXCADQgA3AlQgA0EYNgJkIAZBxKMBQQ0QLSADKALYARBCQcSiAUEBEC0aAn8gAygCZCIEQRBxBEAgA0HIAGohBCADKAJgIgYgAygCTCIFSQR/IAMgBTYCYCAFBSAGCwwBCyAEQQhxRQRAQQAhBSADQQA6AA8gA0EEaiEEDAcLIANBPGohBCADKAJECyAEKAIAIgZrIgVB+P///wdPDQMgBUELTwRAIAVBB3JBAWoiCBAsIQQgAyAIQYCAgIB4cjYCDCADIAQ2AgQgAyAFNgIIDAULIAMgBToADyADQQRqIQQgBQ0EQQAhBQwFCyADQSgQLCIENgIQIANCoYCAgICFgICAfzcCFCAEQdTNAC0AADoAICAEQczNACkAADcAGCAEQcTNACkAADcAECAEQbzNACkAADcACCAEQbTNACkAADcAACAEQQA6ACEgACADQShqQQJBACADQRBqEC8iBCkDADcCBCAALAAXQQBIBEAgACgCFBogACgCDBAqCyAAIAQpAgg3AgwgACAEKAIQNgIUIARBADoAEyAEQQA6AAggAywAG0EATg0HIAMoAhgaIAMoAhAQKgwHCxA4AAsQOAALEDgACyAEIAYgBRA3GgsgBCAFakEAOgAAIAAgA0EQakECQQAgA0EEahAvIgQpAwA3AgQgACwAF0EASARAIAAoAhQaIAAoAgwQKgsgACAEKQIINwIMIAAgBCgCEDYCFCAEQQA6ABMgBEEAOgAIIAMsAA9BAEgEQCADKAIMGiADKAIEECoLIANBvNMDKAIAIgA2AiggAEEMaygCACADQShqakHc0wMoAgA2AgAgA0Hg0wMoAgA2AjAgB0HwywM2AgAgAywAX0EASARAIAMoAlwaIAMoAlQQKgsgBxA9GiADQegAahA7GgwCCyAEIAYgBRA3GgsgBCAFakEAOgAAIAAgA0EQakECQQAgA0EEahAvIgQpAwA3AgQgACwAF0EASARAIAAoAhQaIAAoAgwQKgsgACAEKQIINwIMIAAgBCgCEDYCFCAEQQA6ABMgBEEAOgAIIAMsAA9BAEgEQCADKAIMGiADKAIEECoLIANBvNMDKAIAIgA2AiggAEEMaygCACADQShqakHc0wMoAgA2AgAgA0Hg0wMoAgA2AjAgB0HwywM2AgAgAywAX0EASARAIAMoAlwaIAMoAlQQKgsgBxA9GiADQegAahA7GgtCACECCyADLADDAUEASARAIAMoAsABGiADKAK4ARAqCyACIQoLIANB4AFqJAAgCgsPACAAQfzlBDYCACAAECoLDQAgAEH85QQ2AgAgAAsPACAAQdTlBDYCACAAECoLDQAgAEHU5QQ2AgAgAAu+AgEEfwJAIAAoAlQiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsCQCAAKAJMIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLAkAgACgCOCIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCwJAIAAoAjAiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsgACgCICIBBEAgASECIAEgACgCJCIDRwRAA0ACQCADQQRrKAIAIgJFDQAgAiACKAIEIgRBAWs2AgQgBA0AIAIgAigCACgCCBEAACACECsLIANBCGsiAyABRw0ACyAAKAIgIQILIAAgATYCJCAAKAIoGiACECoLCxUAIAEgACgCHCAAKAIYKAIMESEARQsPACAAQazlBDYCACAAECoLDQAgAEGs5QQ2AgAgAAsXACABIAIgACgCHCAAKAIYKAIIEQQARQsSACAAKAIcIAAoAhgoAgQREgALJwAgAEGovQQ2AgAgACwAF0EASARAIAAoAhQaIAAoAgwQKgsgABAqCyIBAX4gASAAKQMgIgJYBEAgACgCGCABQQAQxAMLIAEgAlgLZwEBfyAAKAI0IgEEQCAAIAE2AjggACgCPBogARAqCyAALAAzQQBIBEAgACgCMBogACgCKBAqCyAALAAnQQBIBEAgACgCJBogACgCHBAqCyAALAAbQQBIBEAgACgCGBogACgCEBAqCwsPACAAQfzkBDYCACAAECoLDQAgAEH85AQ2AgAgAAt4AQR/IAAoAhgiAgRAIAAoAhwiAyACIgFHBEADQAJAIANBBGsoAgAiAUUNACABIAEoAgQiBEEBazYCBCAEDQAgASABKAIAKAIIEQAAIAEQKwsgA0EIayIDIAJHDQALIAAoAhghAQsgACACNgIcIAAoAiAaIAEQKgsLDwAgAEGk5AQ2AgAgABAqCw0AIABBpOQENgIAIAALuAYBBH8gAEGIAWogACgCjAEQvAICQCAAKAKEASIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCwJAIAAoAnwiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsCQCAAKAJ0IgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLAkAgACgCbCIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCwJAIAAoAmQiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsCQCAAKAJcIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLAkAgACgCVCIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCwJAIAAoAkwiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsCQCAAKAJEIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLAkAgACgCPCIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCwJAIAAoAjQiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsCQCAAKAIsIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLIAAoAhwiAQRAIAEhAiABIAAoAiAiA0cEQANAAkAgA0EEaygCACICRQ0AIAIgAigCBCIEQQFrNgIEIAQNACACIAIoAgAoAggRAAAgAhArCyADQQhrIgMgAUcNAAsgACgCHCECCyAAIAE2AiAgACgCJBogAhAqCwJAIAAoAhgiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsCQCAAKAIQIgBFDQAgACAAKAIEIgFBAWs2AgQgAQ0AIAAgACgCACgCCBEAACAAECsLCw8AIABB/OMENgIAIAAQKgsNACAAQfzjBDYCACAACyUAIABBqL0ENgIA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AiADRw0ACyAAKAJoIQELIAAgAzYCbCAAKAJwGiABECoLIAAQVgt6ACAAQYDEBDYCACAALACjAUEASARAIAAoAqABGiAAKAKYARAqCyAALACXAUEASARAIAAoApQBGiAAKAKMARAqCyAALACLAUEASARAIAAoAogBGiAAKAKAARAqCyAALAB/QQBIBEAgACgCfBogACgCdBAqCyAAEFYQKgt4ACAAQYDEBDYCACAALACjAUEASARAIAAoAqABGiAAKAKYARAqCyAALACXAUEASARAIAAoApQBGiAAKAKMARAqCyAALACLAUEASARAIAAoAogBGiAAKAKAARAqCyAALAB/QQBIBEAgACgCfBogACgCdBAqCyAAEFYLKwAgAEHwwgQ2AgAgACwAhwFBAEgEQCAAKAKEARogACgCfBAqCyAAEFYQKgspACAAQfDCBDYCACAALACHAUEASARAIAAoAoQBGiAAKAJ8ECoLIAAQVgsuAQF/IABBmMEENgIAIAAoAmwiAQRAIAAgATYCcCAAKAJ0GiABECoLIAAQVhAqCywBAX8gAEGYwQQ2AgAgACgCbCIBBEAgACABNgJwIAAoAnQaIAEQKgsgABBWC00AIABBkKUFKQIANwIAIABBCGohAEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCA8LIABBmKUFKAIAQZylBSgCABAuC4oBACMAQRBrIgEkACABQSAQLCICNgIEIAFCnYCAgICEgICAfzcCCCACQfOQASkAADcAACACQQA6AB0gAkGIkQEpAAA3ABUgAkGDkQEpAAA3ABAgAkH7kAEpAAA3AAggAEEFQQAgAUEEahAvGiABLAAPQQBIBEAgASgCDBogASgCBBAqCyABQRBqJAALKQAgAEHQwAQ2AgAgACwAe0EASARAIAAoAngaIAAoAnAQKgsgABBWECoLJwAgAEHQwAQ2AgAgACwAe0EASARAIAAoAngaIAAoAnAQKgsgABBWCy4BAX8gAEGIwAQ2AgAgACgCZCIBBEAgACABNgJoIAAoAmwaIAEQKgsgABBWECoLLAEBfyAAQYjABDYCACAAKAJkIgEEQCAAIAE2AmggACgCbBogARAqCyAAEFYLCQAgAEEAOgBhCywBAX8gAEHUvQQ2AgAgACgCFCIBBEAgACABNgIYIAAoAhwaIAEQKgsgABAqCwcAIAAtAGALiwYCAXwCfyMAQSBrIgQkACABIAJBACABKAIAKAIsEQQAIQUgAS0AuAFBAUYEQCACIAEoAmgQSgsgAS0AuQFBAUYEQCACIAEoAmwQSgsgAS0AugFBAUYEQCACIAEoAnAQSgsCQCABLQC7AUEBRw0AIAEtAHRBAUYEQCABKwN4IQMgAS0AdUEBRgRAIAICfyADRAAAAAAAANBBoiIDmUQAAAAAAADgQWMEQCADqgwBC0GAgICAeAsQSiACAn8gASsDgAFEAAAAAAAA0EGiIgOZRAAAAAAAAOBBYwRAIAOqDAELQYCAgIB4CxBKIAErA4gBRAAAAAAAANBBoiIDmUQAAAAAAADgQWMEQCACIAOqEEoMAwsgAkGAgICAeBBKDAILIAICfyADRAAAAAAAANBAoiIDmUQAAAAAAADgQWMEQCADqgwBC0GAgICAeAsQTSACAn8gASsDgAFEAAAAAAAA0ECiIgOZRAAAAAAAAOBBYwRAIAOqDAELQYCAgIB4CxBNIAErA4gBRAAAAAAAANBAoiIDmUQAAAAAAADgQWMEQCACIAOqEE0MAgsgAkGAgICAeBBNDAELIAICfyABKwOYAUQAAAAAAADwQKIiA5lEAAAAAAAA4EFjBEAgA6oMAQtBgICAgHgLEEogAgJ/IAErA6ABRAAAAAAAAPBAoiIDmUQAAAAAAADgQWMEQCADqgwBC0GAgICAeAsQSiACAn8gASsDqAFEAAAAAAAA8ECiIgOZRAAAAAAAAOBBYwRAIAOqDAELQYCAgIB4CxBKCyABLQC8AUEBRgRAIAIgASgCsAEQSgsgAiAFNgIMIARBDGogASACIAIoAgQgBSACKAIAamtBACABKAIAKAIwEQcAIAIgAigCBCACKAIAazYCDCAELAAfQQBIBEAgBCgCHBogBCgCFBAqCyAAQZClBSkCADcCACAAQQhqIQACQEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLgsgBEEgaiQAC4gLAQR/IwBBoAFrIgMkACADQeTVAzYCRCADQfDVAygCACIGNgIMIANBDGoiBCAGQQxrKAIAakH01QMoAgA2AgAgBCADKAIMQQxrKAIAaiIGIANBEGoiBRA+IAZCgICAgHA3AkggA0Hk1QM2AkQgA0HQ1QM2AgwgBRA/IgZB8MsDNgIAIANCADcCOCADQgA3AjAgA0EQNgJAIANBlAFqIgUgASACEFkgBCADKAKUASAFIAMsAJ8BIgRBAEgiBRsgAygCmAEgBCAFGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyADQZQBaiIEIAIQNSADQQxqIAMoApQBIAQgAywAnwEiBEEASCIFGyADKAKYASAEIAUbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBDGoiBEGbxAFBFhAtGiAEIAEoAmgQQkHPsAFBAxAtGiAEIAEoAmwQQkHPsAFBAxAtGiAEIAEoAnAQQkHPkAJBARAtGiADQZQBaiIFIAIQNSAEIAMoApQBIAUgAywAnwEiBEEASCIFGyADKAKYASAEIAUbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBDGoiBEH9qQFBDBAtGgJAIAEtAHRBAUYEQCAEQb6PAkEMEC0aIANBlAFqIgUgAhA1IAQgAygClAEgBSADLACfASIEQQBIIgUbIAMoApgBIAQgBRsQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgA0EMakHH+wBBBxAtIAErA3gQngFBuYgBQQEQLSABKwOAARCeAUG5iAFBARAtIAErA4gBEJ4BQbmIAUEBEC0gASsDkAEQngFB+IkCQQIQLRoMAQsgA0EMaiIEQeeOAkEJEC0aIANBlAFqIgUgAhA1IAQgAygClAEgBSADLACfASIEQQBIIgUbIAMoApgBIAQgBRsQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgA0EMaiIEQdrEAUEJEC0gASsDmAEQngFBz5ACQQEQLRogA0GUAWoiBSACEDUgBCADKAKUASAFIAMsAJ8BIgRBAEgiBRsgAygCmAEgBCAFGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyADQQxqIgRB97oBQQkQLSABKwOgARCeAUHPkAJBARAtGiADQZQBaiIFIAIQNSAEIAMoApQBIAUgAywAnwEiBEEASCIFGyADKAKYASAEIAUbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBDGpBu8QBQQkQLSABKwOoARCeAUHPkAJBARAtGgsgA0GUAWoiBCACEDUgA0EMaiADKAKUASAEIAMsAJ8BIgJBAEgiBBsgAygCmAEgAiAEGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyADQQxqQfvAAUEcEC0gASgCsAEQPEHPkAJBARAtGgJAAn8gAygCQCIBQRBxBEAgAygCPCIBIAMoAigiAkkEQCADIAI2AjwgAiEBCyADQSRqDAELIAFBCHFFBEBBACEBIABBADoACwwCCyADKAIgIQEgA0EYagshAgJAIAEgAigCACIEayIBQfj///8HSQRAIAFBC08EQCABQQdyQQFqIgUQLCECIAAgBUGAgICAeHI2AgggACACNgIAIAAgATYCBCACIQAMAgsgACABOgALIAENAUEAIQEMAgsQOAALIAAgBCABEDcaCyAAIAFqQQA6AAAgA0Hs1QMoAgAiADYCDCAAQQxrKAIAIANBDGpqQfjVAygCADYCACAGQfDLAzYCACADLAA7QQBIBEAgAygCOBogAygCMBAqCyAGED0aIANBxABqEDsaIANBoAFqJAALyQYCBH8DfCMAQSBrIgMkACADIAEgAhB7IAMsABNBAEgEQCADKAIQGiADKAIIECoLAkAgAS0AYQRAIAAgAUGVFRCRAQwBCyABQgA3A3ggAUEBOwF0IAFBADYCcCABQgA3A2ggAUIANwOYASABQoCAgICAgID4PzcDkAEgAUIANwOAASABQgA3A4gBIAFCADcDoAEgAUIANwOoASABQQA2ArABIAEoAmQiBEEBcQRAIAFBAToAuAEgASACEEk2AmggASgCZCEECyAEQQJxBEAgAUEBOgC5ASABIAIQSTYCbCABKAJkIQQLIARBBHEEQCABQQE6ALoBIAEgAhBJNgJwIAEoAmQhBAsCQCAEQQhxRQ0AIAFBAToAuwECQAJAAkAgAS0AYQ4CAAEDCwJ/IARBEHEiBgRAIAIQSSEEIAIQSSEFIAIQSQwBCyACEKwDIQQgAhCsAyEFIAIQrAMLIQcgAUEBOgB0IAEgB7dBgIABIAZ0uCIIoyIJOQOIASABIAW3IAijIgo5A4ABIAEgBLcgCKMiCDkDeCAJIAmiIAggCKIgCiAKoqCgIghEAAAAAAAA8D9kRQ0BIANBMBAsIgE2AhQgA0KvgICAgIaAgIB/NwIYIAFB4BQpAAA3AAAgAUEAOgAvIAFBhxUpAAA3ACcgAUGAFSkAADcAICABQfgUKQAANwAYIAFB8BQpAAA3ABAgAUHoFCkAADcACCAAQQJBACADQRRqEC8aIAMsAB9BAE4NAyADKAIcGiADKAIUECoMAwsgASACEEm3RAAAAAAAAPA+ojkDmAEgASACEEm3RAAAAAAAAPA+ojkDoAEgASACEEm3RAAAAAAAAPA+ojkDqAEMAQsgAUQAAAAAAADwPyAIoZ85A5ABCyABLQBkQSBxBEAgAUEBOgC8ASABIAIQSTYCsAELIAItABRBAUYEQCADQQA6ABQgA0EAOgAfIABBAkHkACADQRRqEC8aIAMsAB9BAE4NASADKAIcGiADKAIUECoMAQsgAEGQpQUpAgA3AgAgAEEIaiEAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAELIABBmKUFKAIAQZylBSgCABAuCyADQSBqJAALvAMCAnwCfyMAQSBrIgUkACABIAJBACABKAIAKAIsEQQAIQYgAgJ/IAErA2hBASABKAKYAXS4IgOiIgSZRAAAAAAAAOBBYwRAIASqDAELQYCAgIB4CxBKIAICfyABKwNwIAOiIgSZRAAAAAAAAOBBYwRAIASqDAELQYCAgIB4CxBKIAICfyABKwN4IAOiIgSZRAAAAAAAAOBBYwRAIASqDAELQYCAgIB4CxBKIAEtAGRBAXEEQCACAn8gASsDiAEgA6IiA5lEAAAAAAAA4EFjBEAgA6oMAQtBgICAgHgLEEogAgJ/IAErA5ABQQEgASgCnAF0uKIiA5lEAAAAAAAA4EFjBEAgA6oMAQtBgICAgHgLEEoLIAIgBjYCDCAFQQxqIAEgAiACKAIEIAYgAigCAGprQQAgASgCACgCMBEHACACIAIoAgQgAigCAGs2AgwgBSwAH0EASARAIAUoAhwaIAUoAhQQKgsgAEGQpQUpAgA3AgAgAEEIaiEAAkBBo6UFLAAAQQBOBEAgAEGYpQUpAgA3AgAgAEGgpQUoAgA2AggMAQsgAEGYpQUoAgBBnKUFKAIAEC4LIAVBIGokAAv9AgICfwF8IwBBIGsiAyQAIAMgASACEHsgAywAE0EASARAIAMoAhAaIAMoAggQKgsCQCABLQBhBEAgACABQak6EJEBDAELIAEgASgCZEEIdiIEQR9xNgKYAUEBIQUgASACEEm3QQEgBHS4IgajOQNoIAEgAhBJtyAGozkDcCABIAIQSbcgBqM5A3ggAQJ8IAEoAmQiBEEBcQRAIAEgBEEQdiIEQR9xNgKcASABIAIQSbcgBqM5A4gBIAIQSbdBASAEdLijDAELIAFCADcDiAFBACEFRAAAAAAAAAAACzkDkAEgASAFOgCAASACLQAUQQFGBEAgA0EAOgAUIANBADoAHyAAQQJB5AAgA0EUahAvGiADLAAfQQBODQEgAygCHBogAygCFBAqDAELIABBkKUFKQIANwIAIABBCGohAEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLgsgA0EgaiQAC9wIAQR/IwBBoAFrIgMkACADQeTVAzYCRCADQfDVAygCACIGNgIMIANBDGoiBCAGQQxrKAIAakH01QMoAgA2AgAgBCADKAIMQQxrKAIAaiIGIANBEGoiBRA+IAZCgICAgHA3AkggA0Hk1QM2AkQgA0HQ1QM2AgwgBRA/IgZB8MsDNgIAIANCADcCOCADQgA3AjAgA0EQNgJAIANBlAFqIgUgASACEFkgBCADKAKUASAFIAMsAJ8BIgRBAEgiBRsgAygCmAEgBCAFGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyADQZQBaiIEIAIQNSADQQxqIAMoApQBIAQgAywAnwEiBEEASCIFGyADKAKYASAEIAUbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBDGoiBEHtsgFBERAtIAErA3AQngFBuMQBQQIQLSABKwN4EJ4BQc+QAkEBEC0aAkAgAS0AgAFBAUYEQCADQZQBaiIFIAIQNSAEIAMoApQBIAUgAywAnwEiBEEASCIFGyADKAKYASAEIAUbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBDGoiBEHaugFBDhAtIAErA2gQngFBuMQBQQIQLSABKwOIARCeAUHPkAJBARAtGiADQZQBaiIFIAIQNSAEIAMoApQBIAUgAywAnwEiAkEASCIEGyADKAKYASACIAQbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBDGpB5rIBQQYQLSABKwOQARCeAUHPkAJBARAtGgwBCyADQZQBaiIEIAIQNSADQQxqIAMoApQBIAQgAywAnwEiBEEASCIFGyADKAKYASAEIAUbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBDGoiBEHaugFBDhAtIAErA2gQngFBz5ACQQEQLRogA0GUAWoiASACEDUgBCADKAKUASABIAMsAJ8BIgFBAEgiAhsgAygCmAEgASACGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyADQQxqQevEAUEIEC0aCwJAAn8gAygCQCIBQRBxBEAgAygCPCIBIAMoAigiAkkEQCADIAI2AjwgAiEBCyADQSRqDAELIAFBCHFFBEBBACEBIABBADoACwwCCyADKAIgIQEgA0EYagshAgJAIAEgAigCACIEayIBQfj///8HSQRAIAFBC08EQCABQQdyQQFqIgUQLCECIAAgBUGAgICAeHI2AgggACACNgIAIAAgATYCBCACIQAMAgsgACABOgALIAENAUEAIQEMAgsQOAALIAAgBCABEDcaCyAAIAFqQQA6AAAgA0Hs1QMoAgAiADYCDCAAQQxrKAIAIANBDGpqQfjVAygCADYCACAGQfDLAzYCACADLAA7QQBIBEAgAygCOBogAygCMBAqCyAGED0aIANBxABqEDsaIANBoAFqJAAL9QEBAn8jAEEgayIDJAAgASACQQAgASgCACgCLBEEACEEIAIgAUHoAGoQoAEgAiABQfQAahCgASACIAFBgAFqEKABIAIgAUGMAWoQoAEgAiAENgIMIANBDGogASACIAIoAgQgBCACKAIAamtBACABKAIAKAIwEQcAIAIgAigCBCACKAIAazYCDCADLAAfQQBIBEAgAygCHBogAygCFBAqCyAAQZClBSkCADcCACAAQQhqIQACQEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLgsgA0EgaiQAC7wIAQZ/IwBBoAFrIgMkACADQeTVAzYCRCADQfDVAygCACIHNgIMIANBDGoiBCAHQQxrKAIAakH01QMoAgA2AgAgBCADKAIMQQxrKAIAaiIHIANBEGoiBhA+IAdCgICAgHA3AkggA0Hk1QM2AkQgA0HQ1QM2AgwgBhA/IgdB8MsDNgIAIANCADcCOCADQgA3AjAgA0EQNgJAIANBlAFqIgYgASACEFkgBCADKAKUASAGIAMsAJ8BIgRBAEgiBhsgAygCmAEgBCAGGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyADQZQBaiIEIAIQNSADQQxqIAMoApQBIAQgAywAnwEiBEEASCIGGyADKAKYASAEIAYbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBDGoiBEG2uwFBBhAtIAEoAmggAUHoAGoiBiABLABzIgVBAEgiCBsgASgCbCAFIAgbEC1Bz5ACQQEQLRogA0GUAWoiBSACEDUgBCADKAKUASAFIAMsAJ8BIgRBAEgiBRsgAygCmAEgBCAFGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyADQQxqIgRBp78BQQYQLSABKAJ0IAFB9ABqIAEsAH8iBUEASCIIGyABKAJ4IAUgCBsQLUHPkAJBARAtGiADQZQBaiIFIAIQNSAEIAMoApQBIAUgAywAnwEiBEEASCIFGyADKAKYASAEIAUbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBDGoiBEHztwFBDRAtIAEoAoABIAFBgAFqIAEsAIsBIgVBAEgiCBsgASgChAEgBSAIGxAtQc+QAkEBEC0aIANBlAFqIgUgAhA1IAQgAygClAEgBSADLACfASICQQBIIgQbIAMoApgBIAIgBBsQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgA0EMakGXtQFBBhAtIAEoAmggBiABLABzIgJBAEgiBBsgASgCbCACIAQbEC1Bz5ACQQEQLRoCQAJ/IAMoAkAiAUEQcQRAIAMoAjwiASADKAIoIgJJBEAgAyACNgI8IAIhAQsgA0EkagwBCyABQQhxRQRAQQAhASAAQQA6AAsMAgsgAygCICEBIANBGGoLIQICQCABIAIoAgAiBGsiAUH4////B0kEQCABQQtPBEAgAUEHckEBaiIGECwhAiAAIAZBgICAgHhyNgIIIAAgAjYCACAAIAE2AgQgAiEADAILIAAgAToACyABDQFBACEBDAILEDgACyAAIAQgARA3GgsgACABakEAOgAAIANB7NUDKAIAIgA2AgwgAEEMaygCACADQQxqakH41QMoAgA2AgAgB0HwywM2AgAgAywAO0EASARAIAMoAjgaIAMoAjAQKgsgBxA9GiADQcQAahA7GiADQaABaiQAC7gDACMAQSBrIgMkACADIAEgAhB7IAMsABNBAEgEQCADKAIQGiADKAIIECoLAkAgAS0AYQRAIAAgAUG+JhCRAQwBCyADQRRqIAIQlgEgASwAc0EASARAIAEoAnAaIAEoAmgQKgsgASADKQIUNwJoIAEgAygCHDYCcCADQRRqIAIQlgEgASwAf0EASARAIAEoAnwaIAEoAnQQKgsgASADKQIUNwJ0IAEgAygCHDYCfCADQRRqIAIQlgEgASwAiwFBAEgEQCABKAKIARogASgCgAEQKgsgASADKQIUNwKAASABIAMoAhw2AogBIANBFGogAhCWASABLACXAUEASARAIAEoApQBGiABKAKMARAqCyABIAMpAhQ3AowBIAEgAygCHDYClAEgAi0AFEEBRgRAIANBADoAFCADQQA6AB8gAEECQeQAIANBFGoQLxogAywAH0EATg0BIAMoAhwaIAMoAhQQKgwBCyAAQZClBSkCADcCACAAQQhqIQBBo6UFLAAAQQBOBEAgAEGYpQUpAgA3AgAgAEGgpQUoAgA2AggMAQsgAEGYpQUoAgBBnKUFKAIAEC4LIANBIGokAAugBQEEfyMAQaABayIDJAAgA0Hk1QM2AkQgA0Hw1QMoAgAiBjYCDCADQQxqIgQgBkEMaygCAGpB9NUDKAIANgIAIAQgAygCDEEMaygCAGoiBiADQRBqIgUQPiAGQoCAgIBwNwJIIANB5NUDNgJEIANB0NUDNgIMIAUQPyIGQfDLAzYCACADQgA3AjggA0IANwIwIANBEDYCQCADQZQBaiIFIAEgAhBZIAQgAygClAEgBSADLACfASIEQQBIIgUbIAMoApgBIAQgBRsQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgA0GUAWoiBCACEDUgA0EMaiADKAKUASAEIAMsAJ8BIgJBAEgiBBsgAygCmAEgAiAEGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyADQQxqQee4AUEKEC0gASgCaCABQegAaiABLABzIgJBAEgiBBsgASgCbCACIAQbEC1Bz5ACQQEQLRoCQAJ/IAMoAkAiAUEQcQRAIAMoAjwiASADKAIoIgJJBEAgAyACNgI8IAIhAQsgA0EkagwBCyABQQhxRQRAQQAhASAAQQA6AAsMAgsgAygCICEBIANBGGoLIQICQCABIAIoAgAiBGsiAUH4////B0kEQCABQQtPBEAgAUEHckEBaiIFECwhAiAAIAVBgICAgHhyNgIIIAAgAjYCACAAIAE2AgQgAiEADAILIAAgAToACyABDQFBACEBDAILEDgACyAAIAQgARA3GgsgACABakEAOgAAIANB7NUDKAIAIgA2AgwgAEEMaygCACADQQxqakH41QMoAgA2AgAgBkHwywM2AgAgAywAO0EASARAIAMoAjgaIAMoAjAQKgsgBhA9GiADQcQAahA7GiADQaABaiQAC8gCACMAQSBrIgMkACADIAEgAhB7IAMsABNBAEgEQCADKAIQGiADKAIIECoLAkAgAS0AYQRAIAAgAUG9PhCRAQwBCwJAIAEtAGRBAXEEQCABLABzQQBIBEAgASgCaEEAOgAAIAFBADYCbAwCCyABQQA6AHMgAUEAOgBoDAELIANBFGogAhCWASABLABzQQBIBEAgASgCcBogASgCaBAqCyABIAMpAhQ3AmggASADKAIcNgJwCyACLQAUQQFGBEAgA0EAOgAUIANBADoAHyAAQQJB5AAgA0EUahAvGiADLAAfQQBODQEgAygCHBogAygCFBAqDAELIABBkKUFKQIANwIAIABBCGohAEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLgsgA0EgaiQACyUAIAEgAiADIAQgBSAGrSAHrUIghoQgCK0gCa1CIIaEIAARJAALIwAgASACIAMgBCAFrSAGrUIghoQgB60gCK1CIIaEIAARJQALGQAgASACIAMgBCAFrSAGrUIghoQgABEaAAsZACABIAIgA60gBK1CIIaEIAUgBiAAERgACxYAIAEgAq0gA61CIIaEIAQgABEXAKcLHQAgASACrSADrUIghoQgBK0gBa1CIIaEIAARHQALHgAgASACrSADrUIghoQgBK0gBa1CIIaEIAARFgCnCxMAIAEgAq0gA61CIIaEIAAREAALCgAgASAAERIApwvfAQECfyMAQSBrIgQkACAEQQxqIAEgAhB7IAQsAB9BAEgEQCAEKAIcGiAEKAIUECoLAkAgAS0AYQRAIAAgAUGayQAQkQEMAQsgAhBJIgVBAEgEQCAEQSAQLCIBNgIAIARCnoCAgICEgICAfzcCBCABQZGRASkAADcAACABQQA6AB4gAUGnkQEpAAA3ABYgAUGhkQEpAAA3ABAgAUGZkQEpAAA3AAggAEEGQegHIAQQLxogBCwAC0EATg0BIAQoAggaIAQoAgAQKgwBCyAAIAEgAiAFIAMQqQILIARBIGokAAsXACAAIAEgAiADrSAErUIghoQgBRCZBgsGAEHtxQALBgBB6fIACwUAQcczCxoAIABFBEBBAA8LIABB7LIEQfyzBBA5QQBHC40IAQd/IwBBoAFrIgMkACADQeTVAzYCRCADQfDVAygCACIHNgIMIANBDGoiBCAHQQxrKAIAakH01QMoAgA2AgAgBCADKAIMQQxrKAIAaiIHIANBEGoiBRA+IAdCgICAgHA3AkggA0Hk1QM2AkQgA0HQ1QM2AgwgBRA/IgdB8MsDNgIAIANCADcCOCADQgA3AjAgA0EQNgJAIANBlAFqIgUgASACEOIEIAQgAygClAEgBSADLACfASIEQQBIIgUbIAMoApgBIAQgBRsQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgA0GUAWoiBCACEDUgA0EMaiADKAKUASAEIAMsAJ8BIgRBAEgiBRsgAygCmAEgBCAFGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyADQQxqQeG8AUELEC0gAS8BeBA8QbUVQQEQLSABLwF6EDxBz5ACQQEQLRogASgCfCIEIAEoAoABIglHBEBBACEBA0AgA0GUAWoiBSACEDUgA0EMaiADKAKUASAFIAMsAJ8BIgVBAEgiBhsgAygCmAEgBSAGGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyADQQxqQcioAUEGEC0gARBCQcKKAkECEC0hBSADQZQBaiIGIAIQNSAFIAMoApQBIAYgAywAnwEiBkEASCIIGyADKAKYASAGIAgbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIAVBgbsBQQsQLSAELwEAEDxBz5ACQQEQLSEFIANBlAFqIgYgAhA1IAUgAygClAEgBiADLACfASIGQQBIIggbIAMoApgBIAYgCBsQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgBUG+tgFBCRAtIAQv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AjAgA0EQNgJAIANBlAFqIgUgASACEFkgBCADKAKUASAFIAMsAJ8BIgRBAEgiBRsgAygCmAEgBCAFGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCwJAIAEpAwggATUCIFoEQCADQZQBaiIEIAIQNSADQQxqIAMoApQBIAQgAywAnwEiAkEASCIEGyADKAKYASACIAQbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBDGpBmLYBQRYQLSABKQMIIAE1AiB9EIUBQc+QAkEBEC0aDAELIANBlAFqIgEgAhA1IANBDGogAygClAEgASADLACfASIBQQBIIgIbIAMoApgBIAEgAhsQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgA0EMakGlyQFBIBAtGgsCQAJ/IAMoAkAiAUEQcQRAIAMoAjwiASADKAIoIgJJBEAgAyACNgI8IAIhAQsgA0EkagwBCyABQQhxRQRAQQAhASAAQQA6AAsMAgsgAygCICEBIANBGGoLIQICQCABIAIoAgAiBGsiAUH4////B0kEQCABQQtPBEAgAUEHckEBaiIFECwhAiAAIAVBgICAgHhyNgIIIAAgAjYCACAAIAE2AgQgAiEADAILIAAgAToACyABDQFBACEBDAILEDgACyAAIAQgARA3GgsgACABakEAOgAAIANB7NUDKAIAIgA2AgwgAEEMaygCACADQQxqakH41QMoAgA2AgAgBkHwywM2AgAgAywAO0EASARAIAMoAjgaIAMoAjAQKgsgBhA9GiADQcQAahA7GiADQaABaiQACwkAIAAQ5QQQKgsVACAAKAIIIgBFBEBBAQ8LIAAQ7AQL1AEBAn8jAEEgayIDJAAgASACQQAgASgCACgCLBEEACEEIAIgAUH4AGoQlAEgAiAENgIMIANBDGogASACIAIoAgQgBCACKAIAamtBACABKAIAKAIwEQcAIAIgAigCBCACKAIAazYCDCADLAAfQQBIBEAgAygCHBogAygCFBAqCyAAQZClBSkCADcCACAAQQhqIQACQEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLgsgA0EgaiQAC7gBAQd/A0ACQCAEIAlNDQAgAiADRg0AQQEhCCAAKAII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aiIFIApHDQALCyADQThqIgMgCEcNAAsLIAIgBjYCDCAEQQxqIAEgAiACKAIEIAYgAigCAGprQQAgASgCACgCMBEHACACIAIoAgQgAigCAGs2AgwgBCwAH0EASARAIAQoAhwaIAQoAhQQKgsgAEGQpQUpAgA3AgAgAEEIaiEAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAELIABBmKUFKAIAQZylBSgCABAuCyAEQSBqJAALygQBBH8jAEHwBGsiACQAIAAgAjYC6AQgACABNgLsBCAAQYYLNgIQIABByAFqIABB0AFqIABBEGoiARBrIQggAEHAAWoiCSAEKAIcIgc2AgAgB0HszgZHBEAgByAHKAIEQQFqNgIECyAJQZzQBhBDIQcgAEEAOgC/AQJAIABB7ARqIAIgAyAJIAQoAgQgBSAAQb8BaiAHIAggAEHEAWogAEHgBGoQ/wRFDQAgAEHeiAEoAAA2ALcBIABB14gBKQAANwOwASAHIABBsAFqIABBugFqIABBgAFqIAcoAgAoAjARCgAaIABBhQs2AhAgAEEIakEAIAEQayEDIAEhBAJAIAAoAsQBIAgoAgBrIgFBiQNOBEAgAUECdUECahBVIQIgAygCACEBIAMgAjYCACABBEAgASADKAIEEQAACyADKAIAIgRFDQELIAAtAL8BQQFGBEAgBEEtOgAAIARBAWohBAsgCCgCACECA0AgACgCxAEgAk0EQAJAIARBADoAACAAIAY2AgAgAEEQaiAAEKAFQQFHDQAgAygCACEBIANBADYCACABBEAgASADKAIEEQAACwwECwUgBCAAQbABaiAAQYABaiIBIAFBKGogAhCuAyABa0ECdWotAAA6AAAgBEEBaiEEIAJBBGohAgwBCwsQbAALEGwACyAAQewEaiAAQegEahBdBEAgBSAFKAIAQQJyNgIACyAAKALsBCEKIABBwAFqEEcgCCgCACEBIAhBADYCACABBEAgASAIKAIEEQAACyAAQfAEaiQAIAoLqAgBBn8jAEGQAWsiACQAIAAgAjYCiAEgACABNgKMASAAQYYLNgIUIABBGGogAEEgaiAAQRRqIggQayEJIABBEGoiByAEKAIcIgE2AgAgAUHszgZHBEAgASABKAIEQQFqNgIECyAHQaTQBhBDIQEgAEEAOgAPIABB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AghB/////wdxQQFrBUEKCxBQIAACfyABLQALQQd2BEAgASgCAAwBCyABCyICNgK0ASAAIABBEGo2AgwgAEEANgIIA0ACQCAAQcwCaiAAQcgCahBdDQAgACgCtAECfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQsgAmpGBEACfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQshAyABAn8gAS0AC0EHdgRAIAEoAgQMAQsgAS0AC0H/AHELQQF0EFAgASABLQALQQd2BH8gASgCCEH/////B3FBAWsFQQoLEFAgACADAn8gAS0AC0EHdgRAIAEoAgAMAQsgAQsiAmo2ArQBCwJ/IABBzAJqIggoAgAiAygCDCIJIAMoAhBGBEAgAyADKAIAKAIkEQEADAELIAkoAgALIAYgAiAAQbQBaiAAQQhqIAAoAsQCIABBxAFqIABBEGogAEEMaiAHEO4BDQAgCBB2GgwBCwsCQAJ/IAAtAM8BQQd2BEAgACgCyAEMAQsgAC0AzwFB/wBxC0UNACAAKAIMIgMgAEEQamtBnwFKDQAgACADQQRqNgIMIAMgACgCCDYCAAsgBSACIAAoArQBIAQgBhCbBTcDACAAQcQBaiAAQRBqIAAoAgwgBBCDASAAQcwCaiAAQcgCahBdBEAgBCAEKAIAQQJyNgIACyAAKALMAiEKIAEQRhogAEHEAWoQRhogAEHQAmokACAKC5sFAQV/IwBB0AJrIgAkACAAIAI2AsgCIAAgATYCzAIgAxCvASEGIAMgAEHQAWoQjAIhByAAQcQBaiADIABBxAJqEIsCIwBBEGsiAiQAIABBuAFqIgFCADcCACABQQA2AgggAkEQaiQAIAEgAS0AC0EHdgR/IAEoAghB/////wdxQQFrBUEKCxBQIAACfyABLQALQQd2BEAgASgCAAwBCyABCyICNgK0ASAAIABBEGo2AgwgAEEANgIIA0ACQCAAQcwCaiAAQcgCahBdDQAgACgCtAECfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQsgAmpGBEACfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQshAyABAn8gAS0AC0EHdgRAIAEoAgQMAQsgAS0AC0H/AHELQQF0EFAgASABLQALQQd2BH8gASgCCEH/////B3FBAWsFQQoLEFAg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IABB+AFqEF4EQCAEIAQoAgBBAnI2AgALIAAoAvwBIQggARBGGiAAQcABahBGGiAAQYACaiQAIAgLvQUBA38jAEGAAmsiACQAIAAgAjYC+AEgACABNgL8ASAAQcABaiADIABB0AFqIABBzwFqIABBzgFqELQDIwBBEGsiAiQAIABBtAFqIgFCADcCACABQQA2AgggAkEQaiQAIAEgAS0AC0EHdgR/IAEoAghB/////wdxQQFrBUEKCxBQIAACfyABLQALQQd2BEAgASgCAAwBCyABCyICNgKwASAAIABBEGo2AgwgAEEANgIIIABBAToAByAAQcUAOgAGA0ACQCAAQfwBaiAAQfgBahBeDQAgACgCsAECfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQsgAmpGBEACfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQshAyABAn8gAS0AC0EHdgRAIAEoAgQMAQsgAS0AC0H/AHELQQF0EFAgASABLQALQQd2BH8gASgCCEH/////B3FBAWsFQQoLEFAgACADAn8gAS0AC0EHdgRAIAEoAgAMAQsgAQsiAmo2ArABCwJ/IABB/AFqIgYoAgAiAygCDCIHIAMoAhBGBEAgAyADKAIAKAIkEQEADAELIActAAALwCAAQQdqIABBBmogAiAAQbABaiAALADPASAALADOASAAQcABaiAAQRBqIABBDGogAEEIaiAAQdABahCzAw0AIAYQdxoMAQsLAkACfyAALQDLAUEHdgRAIAAoAsQBDAELIAAtAMsBQf8AcQtFDQAgAC0AB0EBRw0AIAAoAgwiAyAAQRBqa0GfAUoNACAAIANBBGo2AgwgAyAAKAIINgIACyAFIAIgACgCsAEgBBCWBTgCACAAQcABaiAAQRBqIAAoAgwgBBCDASAAQfwBaiAAQfgBahBeBEAgBCAEKAIAQQJyNgIACyAAKAL8ASEIIAEQRhogAEHAAWoQRhogAEGAAmokACAIC8oGAQR/IwBBoAFrIgMkACADQeTVAzYCRCADQfDVAygCACIGNgIMIANBDGoiBCAGQQxrKAIAakH01QMoAgA2AgAgBCADKAIMQQxrKAIAaiIGIANBEGoiBRA+IAZCgICAgHA3AkggA0Hk1QM2AkQgA0HQ1QM2AgwgBRA/IgZB8MsDNgIAIANCADcCOCAD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IANBDGpB08cBQQsQLRoMAQsgA0EMakG9yQFBCBAtGgsCQAJ/IAMoAkAiAUEQcQRAIAMoAjwiAiADKAIoIgFJBEAgAyABNgI8IAEhAgsgA0EkagwBCyABQQhxRQRAQQAhAiAAQQA6AAsMAgsgAygCICECIANBGGoLIQECQCACIAEoAgAiBGsiAkH4////B0kEQCACQQtPBEAgAkEHckEBaiIFECwhASAAIAVBgICAgHhyNgIIIAAgATYCACAAIAI2AgQgASEADAILIAAgAjoACyACDQFBACECDAILEDgACyAAIAQgAhA3GgsgACACakEAOgAAIANB7NUDKAIAIgA2AgwgAEEMaygCACADQQxqakH41QMoAgA2AgAgBkHwywM2AgAgAywAO0EASARAIAMoAjgaIAMoAjAQKgsgBhA9GiADQcQAahA7GiADQaABaiQAC1QBAn8gASAAKAJUIgEgAUEAIAJBgAJqIgMQzAMiBCABayADIAQbIgMgAiACIANLGyICEDIaIAAgASADaiIDNgJUIAAgAzYCCCAAIAEgAmo2AgQgAgvSAQECfyMAQSBrIgMkACABIAJBACABKAIAKAIsEQQAIQQgAiABLQBkEEggAiAENgIMIANBDGogASACIAIoAgQgBCACKAIAamtBACABKAIAKAIwEQcAIAIgAigCBCACKAIAazYCDCADLAAfQQBIBEAgAygCHBogAygCFBAqCyAAQZClBSkCADcCACAAQQhqIQACQEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLgsgA0EgaiQAC64BACMAQRBrIgMkACABIAIQUkEBcTYCZAJAIAItABRBAUYEQCADQQA6AAQgA0EAOgAPIABBAkHkACADQQRqEC8aIAMsAA9BAE4NASADKAIMGiADKAIEECoMAQsgAEGQpQUpAgA3AgAgAEEIaiEAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAELIABBmKUFKAIAQZylBSgCABAuCyADQRBqJAALlwIBBn8jAEEgayICJAACfwJAAkAgAUF/Rg0AIAIgATYCFCAALQAsQQFGBEACfyAAKAIgIgAoAkxBAEgEQCABIAAQtQUMAQsgASAAELUFC0F/Rg0CDAELIAIgAkEYaiIFNgIQIAJBIGohBiACQRRqIQMDQCAAKAIkIgQgACgCKCADIAUgAkEMaiACQRhqIAYgAkEQaiAEKAIAKAIMERMAIQQgAigCDCADRg0CIARBA0YEQCADQQFBASAAKAIgEHhBAUYNAgwDCyAEQQFLDQIgAkEYaiIDQQEgAigCECADayIDIAAoAiAQeCADRw0CIAIoAgwhAyAEQQFGDQALCyABQQAgAUF/RxsMAQtBfwshByACQSBqJAAgBwtlAQF/AkAgAC0ALEUEQCACQQAgAkEAShshAgNAIAIgA0YNAiAAIAEoAgAgACgCACgCNBEFAEF/RgRAIAMPBSABQQRqIQEgA0EBaiEDDAELAAsACyABQQQgAiAAKAIgEHghAgsgAgsxACAAIAAoAgAoAhgRAQAaIAAgAUG00AYQQyIBNgIkIAAgASABKAIAKAIcEQEAOgAsC6QCAQN/IwBBIGsiAiQAAkAgAUF/RgRAIAAtADQNASAAIAAoAjAiAUF/RzoANAwBCyAALQA0IQMCQAJAAkAgAC0ANUUEQCADQQFxDQEMAwsgA0EBcSIDBEAgACgCMCAAKAIgEKwFDQMMAgsgA0UNAgsgAiAAKAIwNgIQAkACQCAAKAIkIgMgACgCKCACQRBqIAJBFGoiBCACQQxqIAJBGGogAkEgaiAEIAMoAgAoAgwREwBBAWsOAwICAAELIAAoAjAhAyACIAJBGWo2AhQgAiADOgAYCwNAIAIoAhQiAyACQRhqTQ0CIAIgA0EBayIDNgIUIAMsAAAgACgCIBDxAUF/Rw0ACwtBfyEBDAELIABBAToANCAAIAE2AjALIAJBIGokACABCwkAIABBARCtBQsJACAAQQAQrQULgwUBBH8jAEGgAWsiAyQAIANB5NUDNgJEIANB8NUDKAIAIgY2AgwgA0EMaiIEIAZBDGsoAgBqQfTVAygCADYCACAEIAMoAgxBDGsoAgBqIgYgA0EQaiIFED4gBkKAgICAcDcCSCADQeTVAzYCRCADQdDVAzYCDCAFED8iBkHwywM2AgAgA0IANwI4IANCADcCMCADQRA2AkAgA0GUAWoiBSABIAIQWSAEIAMoApQBIAUgAywAnwEiBEEASCIFGyADKAKYASAEIAUbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBlAFqIgQgAhA1IANBDGogAygClAEgBCADLACfASICQQBIIgQbIAMoApgBIAIgBBsQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgA0EMakGtuAFBChAtIAEoAmQQQkHBkAJBDxAtGgJAAn8gAygCQCIBQRBxBEAgAygCPCICIAMoAigiAUkEQCADIAE2AjwgASECCyADQSRqDAELIAFBCHFFBEBBACECIABBADoACwwCCyADKAIgIQIgA0EYagshAQJAIAIgASgCACIEayICQfj///8HSQRAIAJBC08EQCACQQdyQQFqIgUQLCEBIAAgBUGAgICAeHI2AgggACABNgIAIAAgAjYCBCABIQAMAgsgACACOgALIAINAUEAIQIMAgsQOAALIAAgBCACEDcaCyAAIAJqQQA6AAAgA0Hs1QMoAgAiADYCDCAAQQxrKAIAIANBDGpqQfjVAygCADYCACAGQfDLAzYCACADLAA7QQBIBEAgAygCOBogAygCMBAqCyAGED0aIANBxABqEDsaIANBoAFqJAALSAAgACABQbTQBhBDIgE2AiQgACABIAEoAgAoAhgRAQA2AiwgACAAKAIkIgEgASgCACgCHBEBADoANSAAKAIsQQlOBEAQbAALC6YCAQd/IwBBIGsiAiQAAn8CQAJAIAFBf0YNACACIAHAIgM6ABcgAC0ALEEBRgRAIAAoAiAhBCMAQRBrIgAkACAAIAM6AA8gAEEPakEBQQEgBBB4IQcgAEEQaiQAIAdBAUcNAgwBCyACIAJBGGoiBTYCECACQSBqIQYgAkEXaiEDA0AgACgCJCIEIAAoAiggAyAFIAJBDGogAkEYaiAGIAJBEGogBCgCACgCDBETACEEIAIoAgwgA0YNAiAEQQNGBEAgA0EBQQEgACgCIBB4QQFGDQIMAwsgBEEBSw0CIAJBGGoiA0EBIAIoAhAgA2siAyAAKAIgEHggA0cNAiACKAIMIQMgBEEBRg0ACwsgAUEAIAFBf0cbDAELQX8LIQggAkEgaiQAIAgLZQEBfwJAIAAtACxFBEAgAkEAIAJBAEobIQIDQCACIANGDQIgACABLQAAIAAoAgAoAjQRBQBBf0YEQCADDwUgAUEBaiEBIANBAWohAwwBCwALAAsgAUEBIAIgACgCIBB4IQILIAILMQAgACAAKAIAKAIYEQEAGiAAIAFBrNAGEEMiATYCJCAAIAEgASgCACgCHBEBADoALAulAgEDfyMAQSBrIgIkAAJAIAFBf0YEQCAALQA0DQEgACAAKAIwIgFBf0c6ADQMAQsgAC0ANCEDAkACQAJAIAAtADVFBEAgA0EBcQ0BDAMLIANBAXEiAwRAIAAoAjAgACgCIBCwBQ0DDAILIANFDQILIAIgACgCMMA6ABMCQAJAIAAoAiQiAyAAKAIoIAJBE2ogAkEUaiIEIAJBDGogAkEYaiACQSBqIAQgAygCACgCDBETAEEBaw4DAgIAAQsgACgCMCEDIAIgAkEZajYCFCACIAM6ABgLA0AgAigCFCIDIAJBGGpNDQIgAiADQQFrIgM2AhQgAywAACAAKAIgEPEBQX9HDQALC0F/IQEMAQsgAEEBOgA0IAAgATYCMAsgAkEgaiQAIAELCQAgAEEBELEFC9oBAQJ/IwBBIGsiAyQAIAEgAkEAIAEoAgAoAiwRBAAhBCACIAEoAmRB2gBtQf8BcRBIIAIgBDYCDCADQQxqIAEgAiACKAIEIAQgAigCAGprQQAgASgCACgCMBEHACACIAIoAgQgAigCAGs2AgwgAywAH0EASARAIAMoAhwaIAMoAhQQKgsgAEGQpQUpAgA3AgAgAEEIaiEAAkBBo6UFLAAAQQBOBEAgAEGYpQUpAgA3AgAgAEGgpQUoAgA2AggMAQsgAEGYpQUoAgBBnKUFKAIAEC4LIANBIGokAAsJACAAQQAQsQULSAAgACABQazQBhBDIgE2AiQgACABIAEoAgAoAhgRAQA2AiwgACAAKAIkIgEgASgCACgCHBEBADoANSAAKAIsQQlOBEAQbAALCx4AQdzFBhCVAkGsyAYQlQJBsMYGEL8DQYDJBhC/AwuyAQAjAEEQayIDJAAgASACEFJBA3FB2gBsNgJkAkAgAi0AFEEBRgRAIANBADoABCADQQA6AA8gAEECQeQAIANBBGoQLxogAywAD0EATg0BIAMoAgwaIAMoAgQQKgwBCyAAQZClBSkCADcCACAAQQhqIQBBo6UFLAAAQQBOBEAgAEGYpQUpAgA3AgAgAEGgpQUoAgA2AggMAQsgAEGYpQUoAgBBnKUFKAIAEC4LIANBEGokAAsIACAAEDsQKgvQBwEHfyMAQaABayIDJAAgA0Hk1QM2AkQgA0Hw1QMoAgAiBjYCDCADQQxqIgUgBkEMaygCAGpB9NUDKAIANgIAIAUgAygCDEEMaygCAGoiBiADQRBqIgQQPiAGQoCAgIBwNwJIIANB5NUDNgJEIANB0NUDNgIMIAQQPyIGQfDLAzYCACADQgA3AjggA0IANwIwIANBEDYCQCADQZQBaiIEIAEgAhBZIAUgAygClAEgBCADLACfASIFQQBIIgQbIAMoApgBIAUgBBsQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgA0GUAWoiBSACEDUgA0EMaiADKAKUASAFIAMsAJ8BIgVBAEgiBBsgAygCmAEgBSAEGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyADQQxqQe++AUEKEC0gASgCaCABQegAaiABLABzIgVBAEgiBBsgASgCbCAFIAQbEC1Bz5ACQQEQLSEFIANBlAFqIgQgAhA1IAUgAygClAEgBCADLACfASICQQBIIgQbIAMoApgBIAIgBBsQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgBUGvtgFBDhAtGiADQRhqIQUgASgCdCICIAEoAngiCEcEQANAIAItAAAhCSAGIAMoAgxBDGsiASgCAGoiBCAEKAIAQbV/cUEIcjYCACAFIAEoAgBqQQI2AgAgASgCACADQQxqaiIEKAJMQX9GBEAgA0GUAWoiByAEKAIcIgE2AgAgAUHszgZHBEAgASABKAIEQQFqNgIECyAHQaTQBhBDIgFBICABKAIAKAIcEQUAGiAHEEcLIARBMDYCTCADQQxqIAkQQkHpxAFBARAtGiACQQFqIgIgCEcNAAsLIANBDGpBz5ACQQEQLRoCQAJAAn8gAygCQCIBQRBxBEAgA0EkaiEFIAMoAjwiAiADKAIoIgFJBH8gAyABNgI8IAEFIAILDAELIAFBCHFFBEBBACECIABBADoACwwDCyADKAIgCyAFKAIAIgVrIgJB+P///wdJBEAgAkELTwRAIAJBB3JBAWoiBBAsIQEgACAEQYCAgIB4cjYCCCAAIAE2AgAgACACNgIEIAEhAAwCCyAAIAI6AAsgAg0BQQAhAgwCCxA4AAsgACAFIAIQNxoLIAAgAmpBADoAACADQezVAygCACIANgIMIABBDGsoAgAgA0EMampB+NUDKAIANgIAIAZB8MsDNgIAIAMsADtBAEgEQCADKAI4GiADKAIwECoLIAYQPRogA0HEAGoQOxogA0GgAWokAAv+AQEEfyMAQSBrIgMkACABIAJBACABKAIAKAIsEQQAIQUgAiABQegAahCgASABKAJ0IgQgASgCeCIGRwRAA0AgAiAELQAAEEggBEEBaiIEIAZHDQALCyACIAU2AgwgA0EMaiABIAIgAigCBCAFIAIoAgBqa0EAIAEoAgAoAjARBwAgAiACKAIEIAIoAgBrNgIMIAMsAB9BAEgEQCADKAIcGiADKAIUECoLIABBkKUFKQIANwIAIABBCGohAAJAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAELIABBmKUFKAIAQZylBSgCABAuCyADQSBqJAALEwAgACAAKAIAQQxrKAIAahC/BQsTACAAIAAoAgBBDGsoAgBqELoDCxMAIAAgACgCAEEMaygCAGoQwAULEwAgACAAKAIAQQxrKAIAahC7AwuEBQEJfyMAQSBrIgQkACAEIAEgAhB7IAQsABNBAEgEQCAEKAIQGiAEKAIIECoLAkACQCABLQBhBEAgACABQamAARCRAQwBCyAEQRRqIAIQlgEgASwAc0EASARAIAEoAnAaIAEoAmgQKgsgASAEKQIUNwJoIAEgBCgCHDYCcCACKAIQBEADQCACEFIhAwJAIAEoAngiCSABKAJ8IgdJBEAgCSADOgAAIAlBAWohBgwBCyAJIAEoAnQiCGsiCkEBaiIFQQBIDQQgCkH/////ByAHIAhrIgdBAXQiBiAFIAUgBkkbIAdB/////wNPGyIGBH8gBhAsBUEACyIHaiIFIAM6AAAgBiAHaiEMIAVBAWohBgJAIAggCUYEQCAFIQcMAQtBACELIAkhAyAKQQNxIgoEQANAIAVBAWsiBSADQQFrIgMtAAA6AAAgC0EBaiILIApHDQALCyAIIAlrQXxNBEADQCAFQQFrIANBAWstAAA6AAAgBUECayADQQJrLQAAOgAAIAVBA2sgA0EDay0AADoAACAFQQRrIgUgA0EEayIDLQAAOgAAIAMgCEcNAAsLIAEoAnwaIAEoAnQhCAsgASAMNgJ8IAEgBjYCeCABIAc2AnQgCEUNACAIECoLIAEgBjYCeCACKAIQDQALCyACLQAUQQFGBEAgBEEAOgAUIARBADoAHyAAQQJB5AAgBEEUahAvGiAELAAfQQBODQEgBCgCHBogBCgCFBAqDAELIABBkKUFKQIANwIAIABBCGohAEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLgsgBEEgaiQADwsQNgALEwAgACAAKAIAQQxrKAIAahDBBQsTACAAIAAoAgBBDGsoAgBqELwDCxMAIAAgACgCAEEMaygCAGoQvQMLEwAgACAAKAIAQQxrKAIAahDpAQsKACAAQQhrEL0DCwoAIABBCGsQ6QELrgMBCH8jAEEgayIFJAAgASACQQAgASgCACgCLBEEACEGIAIgASgCbCABKAJoa0EEdRBKIAEoAmgiAyABKAJsIglHBEADQCADKAIAIQQCQCABLQBhRQRAIAIgBEH//wNxEE0MAQsgAiAEEEoLIAIgAygCCCADKAIEa0ECdkH/AXEQSCADKAIEIgQgAygCCCIKRwRAA0AgBC8BAiEHIAQtAAAhCAJAIAEtAGRBAXEEQCACIAdB//8BcUGAgH5BACAIQQFxG3JB//8DcRBNDAELIAIgB0H/AHFBgH9BACAIQQFxG3JB/wFxEEgLIARBBGoiBCAKRw0ACwsgA0EQaiIDIAlHDQALCyACIAY2AgwgBUEMaiABIAIgAigCBCAGIAIoAgBqa0EAIAEoAgAoAjARBwAgAiACKAIEIAIoAgBrNgIMIAUsAB9BAEgEQCAFKAIcGiAFKAIUECoLIABBkKUFKQIANwIAIABBCGohAAJAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAELIABBmKUFKAIAQZylBSgCABAuCyAFQSBqJAALGgAgACABIAIpAwhBACADIAEoAgAoAhARGAALCQAgABC+AxAqC7ICAQF/IAAgACgCACgCGBEBABogACABQazQBhBDIgE2AkQgAC0AYiECIAAgASABKAIAKAIcEQEAIgE6AGIgASACRwRAIABBADYCECAAQQA2AgwgAEEANgIIIABBADYCHCAAQQA2AhQgAEEANgIYIAAtAGAhASAALQBiQQFGBEACQCABQQFxRQ0AIAAoAiAiAUUNACABECoLIAAgAC0AYToAYCAAIAAoAjw2AjQgACgCOCEBIABCADcCOCAAIAE2AiAgAEEAOgBhDwsCQCABQQFxDQAgACgCICIB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ASACIAQbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBDGpB/7kBQR0QLSABLwFkEDxBz5ACQQEQLRoCQAJ/IAMoAkAiAUEQcQRAIAMoAjwiAiADKAIoIgFJBEAgAyABNgI8IAEhAgsgA0EkagwBCyABQQhxRQRAQQAhAiAAQQA6AAsMAgsgAygCICECIANBGGoLIQECQCACIAEoAgAiBGsiAkH4////B0kEQCACQQtPBEAgAkEHckEBaiIFECwhASAAIAVBgICAgHhyNgIIIAAgATYCACAAIAI2AgQgASEADAILIAAgAjoACyACDQFBACECDAILEDgACyAAIAQgAhA3GgsgACACakEAOgAAIANB7NUDKAIAIgA2AgwgAEEMaygCACADQQxqakH41QMoAgA2AgAgBkHwywM2AgAgAywAO0EASARAIAMoAjgaIAMoAjAQKgsgBhA9GiADQcQAahA7GiADQaABaiQAC6QBAQN/IwBBgAFrIgMkACADIAEoAgg2AgAgA0EQaiIBQbvyACADENwCIAEQWCICQfj///8HSQRAAkACQCACQQtPBEAgAkEHckEBaiIEECwhASAAIARBgICAgHhyNgIIIAAgATYCACAAIAI2AgQgASEADAELIAAgAjoACyACRQ0BCyAAIANBEGogAhAyGgsgACACakEAOgAAIANBgAFqJAAPCxA4AAv4CQEMfyAAQQE2AgQgACgCDCIBIAEoAsQCQQFrNgLEAiABIAEoAsgCQQFqNgLIAiAAKAIMIgEoAnwiCigC7IMBIQkgASAAIAooAvyDASIMQQFrIgMgACgCCCAAKAIYELUBIAAoAggiAkEASgRAIAAoAgwgACADIAJBAWsgACgCGBC1ASAAKAIIIQILIAJBAWoiASAKKAKEhAFIBEAgACgCDCAAIAMgASAAKAIYELUBIAAoAggiAkEBaiEBCyAAKAIUIQUgACgCECEDIAEgCXQhAQJAAkACQCACIAl0IgJBAXFFBEAgAygCHCIHIAEgASAHShsiBEEBcQ0BIAUoAnwiASgCyIMBQQdqQQhtIQcgASgCwIMBQQdqQQhtIQYgAygCKCIBIAUoAihGDQIgAiAETg0DIAIhAQNAIAUoAgQgASAGbCIIIAUoAihsaiADKAIEIAggAygCKGxqIAMoAhggBmwQMhogAUEBaiIB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BUH8////B3EhCyAFQQNxIQlBACEDIAVBBEkhDANAIAAgA0EBdGohAiAGIAMgBWxBAXRqIQdBACEKIAxFBEADQCACIAcvAQA7AQAgAiABQQF0IghqIgIgBy8BAjsBACACIAhqIgIgBy8BBDsBACACIAhqIgIgBy8BBjsBACACIAhqIQIgB0EIaiEHIApBBGoiCiALRw0ACwtBACEIIAkEQANAIAIgBy8BADsBACAHQQJqIQcgAiABQQF0aiECIAhBAWoiCCAJRw0ACwsgA0EBaiIDIARHDQALCwurAQAjAEEQayIDJAAgASACEE47AWICQCACLQAUQQFGBEAgA0EAOgAEIANBADoADyAAQQJB5AAgA0EEahAvGiADLAAPQQBODQEgAygCDBogAygCBBAqDAELIABBkKUFKQIANwIAIABBCGohAEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLgsgA0EQaiQACxkAIAAgASACIAMgBCAFIAZBAkEDIAcQwgELGQAgACABIAIgAyAEIAUgBkECQQIgBxDCAQsZACAAIAEgAiADIAQgBSAGQQJBASAHEMIBC5ADAQV/AkAgBUEATA0AIARBAEwNACAHQQhrIQogAkEGayELA0AgBiAJQQF0aiECIAsgAyAJbEEBdGohB0EAIQgDQCACIAcvAQJBAnQgBy8BAGsgBy8BCCAHLwEGakEobGogBy8BDEECdGogBy8BDmsgBy8BCiAHLwEEakF1bGogCnU7AQAgB0ECaiEHIAIgBUEBdGohAiAIQQFqIgggBEcNAAsgCUEBaiIJIAVHDQALIAVBAEwNACAFQfz///8HcSELIAVBA3EhCUEAIQMgBUEESSEMA0AgACADQQF0aiECIAYgAyAFbEEBdGohB0EAIQogDEUEQANAIAIgBy8BADsBACACIAFBAXQiCGoiAiAHLwECOwEAIAIgCGoiAiAHLwEEOwEAIAIgCGoiAiAHLwEGOwEAIAIgCGohAiAHQQhqIQcgCkEEaiIKIAtHDQALC0EAIQggCQRAA0AgAiAHLwEAOwEAIAdBAmohByACIAFBAXRqIQIgCEEBaiIIIAlHDQALCyADQQFqIgMgBEcNAAsLCxkAIAAgASACIAMgBCAFIAZBAUEDIAcQwgELGQAg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bEEBdGohAkEAIQkgDEUEQANAIAcgAi8BADsBACAHIAFBAXQiCGoiByACLwECOwEAIAcgCGoiByACLwEEOwEAIAcgCGoiByACLwEGOwEAIAcgCGohByACQQhqIQIgCUEEaiIJIAtHDQALC0EAIQggCgRAA0AgByACLwEAOwEAIAJBAmohAiAHIAFBAXRqIQcgCEEBaiIIIApHDQALCyADQQFqIgMgBEcNAAsLC+8FAQR/IwBBoAFrIgMkACADQeTVAzYCRCADQfDVAygCACIGNgIMIANBDGoiBCAGQQxrKAIAakH01QMoAgA2AgAgBCADKAIMQQxrKAIAaiIGIANBEGoiBRA+IAZCgICAgHA3AkggA0Hk1QM2AkQgA0HQ1QM2AgwgBRA/IgZB8MsDNgIAIANCADcCOCADQgA3AjAgA0EQNgJAIANBlAFqIgUgASACEFkgBCADKAKUASAFIAMsAJ8BIgRBAEgiBRsgAygCmAEgBCAFGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyADQZQBaiIEIAIQNSADQQxqIAMoApQBIAQgAywAnwEiBEEASCIFGyADKAKYASAEIAUbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBDGoiBEGruwFBChAtIAEoAmQQPEHPkAJBARAtGiADQZQBaiIFIAIQNSAEIAMoApQBIAUgAywAnwEiAkEASCIEGyADKAKYASACIAQbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBDGpBoLsBQQoQLSABKAJoEDxBz5ACQQEQLRoCQAJ/IAMoAkAiAUEQcQRAIAMoAjwiAiADKAIoIgFJBEAgAyABNgI8IAEhAgsgA0EkagwBCyABQQhxRQRAQQAhAiAAQQA6AAsMAgsgAygCICECIANBGGoLIQECQCACIAEoAgAiBGsiAkH4////B0kEQCACQQtPBEAgAkEHckEBaiIFECwhASAAIAVBgICAgHhyNgIIIAAgATYCACAAIAI2AgQgASEADAILIAAgAjoACyACDQFBACECDAILEDgACyAAIAQgAhA3GgsgACACakEAOgAAIANB7NUDKAIAIgA2AgwgAEEMaygCACADQQxqakH41QMoAgA2AgAgBkHwywM2AgAgAywAO0EASARAIAMoAjgaIAMoAjAQ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A0EkagwBCyABQQhxRQRAQQAhASAAQQA6AAsMAgsgAygCICEBIANBGGoLIQICQCABIAIoAgAiBGsiAUH4////B0kEQCABQQtPBEAgAUEHckEBaiIFECwhAiAAIAVBgICAgHhyNgIIIAAgAjYCACAAIAE2AgQgAiEADAILIAAgAToACyABDQFBACEBDAILEDgACyAAIAQgARA3GgsgACABakEAOgAAIANB7NUDKAIAIgA2AgwgAEEMaygCACADQQxqakH41QMoAgA2AgAgBkHwywM2AgAgAywAO0EASARAIAMoAjgaIAMoAjAQKgsgBhA9GiADQcQAahA7GiADQaABaiQACw0AIABBBCABIAIQ6QILDwAgACACQSAgASADEOoCCw8AIAAgAkEQIAEgAxDqAgsPACAAIAJBCCABIAMQ6gILDwAgACACQQQgASADEOoCCw0AIAAgAkEgIAEQ6wILDQAgACACQRAgARDrAgsNACAAIAJBCCABEOsCC60DAgR/AX4jAEEgayIDJAAgAyABIAIQeyADLAATQQBIBEAgAygCEBogAygCCBAqCwJAIAEtAGEEQCAAIAFBhsQAEJEBDAELIAIQUiEEIAIoAgAiBSAFKAIAKAIIERIAIQggAigCACIFIAggBK18IAUoAgAoAgwREAAEQCADQQA6ABQgA0EAOgAfIABBAkHkACADQRRqEC8aIAMsAB9BAE4NASADKAIcGiADKAIUECoMAQsgAUHoAGohBQJAIAEoAmwgASgCaCIHayIGIARJBEAgBSAEIAZrEGUMAQsgBCAGTw0AIAEgBCAHajYCbAsgBARAQQAhAQNAIAIQUiEGIAUoAgAgAWogBjoAACABQQFqIgEgBEcNAAsLIAItABRBAUYEQCADQQA6ABQgA0EAOgAfIABBAkHkACADQRRqEC8aIAMsAB9BAE4NASADKAIcGiADKAIUECoMAQsgAEGQpQUpAgA3AgAgAEEIaiEAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAELIABBmKUFKAIAQZylBSgCABAuCyADQSBqJAALDQAgACACQQQgARDrAgsPACAAQSAgASACIAMQ7AILDwAgAEEQIAEgAiADEOwCCw8AIABBCCABIAIgAxDsAgsPACAAQQQgASACIAMQ7AILowsBGX8gAS4BCiEc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LRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgA0GUAWoiBCACEDUgA0EMaiADKAKUASAEIAMsAJ8BIgRBAEgiBRsgAygCmAEgBCAFGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyADQQxqQZDDAUEJEC0gASgCaBA8Qc+QAkEBEC0hBCADQZQBaiIFIAIQNSAEIAMoApQBIAUgAywAnwEiBUEASCIGGyADKAKYASAFIAYbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIARB1LEBQRcQLSABLwFsEDxBz5ACQQEQLSEEIANBlAFqIgUgAhA1IAQgAygClAEgBSADLACfASIFQQBIIgYbIAMoApgBIAUgBhsQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgBEHBvgFBCxAtIQggAyABKAJwEKQBIAggAygCACADIAMsAAsiBEEASCIFGyADKAIEIAQgBRsQLUHPkAJBARAtIQQgA0GUAWoiBSACEDUgBCADKAKUASAFIAMsAJ8BIgVBAEgiBhsgAygCmAEgBSAGGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyAEQaK/AUELEC0gASgCdCABQfQAaiABLAB/IgRBAEgiBRsgASgCeCAEIAUbEC1Bz5ACQQEQLRogAywAC0EASARAIAMoAggaIAMoAgAQKgsgASgCcCIEQeXapesGRgR/IANBlAFqIgQgAhA1IANBDGogAygClAEgBCADLACfASIEQQBIIgUbIAMoApgBIAQgBRsQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgA0EMakHyvQFBDhAtIAEoAoABIAFBgAFqIAEsAIsBIgRBAEgiBRsgASgChAEgBCAFGxAtQc+QAkEBEC0hBCADQZQBaiIFIAIQNSAEIAMoApQBIAUgAywAnwEiBUEASCIGGyADKAKYASAFIAYbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIARBjbsBQRIQLSABKAKMASABQYwBaiABLACXASIEQQBIIgUbIAEoApABIAQgBRsQLUHPkAJBARAtGiABKAJwBSAEC0Gg0smrB0YEQCADQZQBaiIEIAIQNSADQQxqIAMoApQBIAQgAywAnwEiBEEASCIFGyADKAKYASAEIAUbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBDGpB+r4BQQ8QLSABKAKYASABQZgBaiABLACjASIEQQBIIgUbIAEoApwBIAQgBRsQLUHPkAJBARAtGgsgA0GUAWoiBCACEDUgA0EMaiADKAKUASAEIAMsAJ8BIgJBAEgiBBsgAygCmAEgAiAEGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyADQQxqQca5AUENEC0iAiACKAIAQQxrKAIAaiIEIAQoAgRBAXI2AgQgAiABLQCkARDQAkHPkAJBARAtGgJAAn8gAygCQCIBQRBxBEAgAygCPCIBIAMoAigiAkkEQCADIAI2AjwgAiEBCyADQSRqDAELIAFBCHFFBEBBACEBIABBADoACwwCCyADKAIgIQEgA0EYagshAgJAIAEgAigCACIEayIBQfj///8HSQRAIAFBC08EQCABQQdyQQFqIgUQLCECIAAgBUGAgICAeHI2AgggACACNgIAIAAgATYCBCACIQAMAgsgACABOgALIAENAUEAIQEMAgsQOAALIAAgBCABEDcaCyAAIAFqQQA6AAAgA0Hs1QMoAgAiADYCDCAAQQxrKAIAIANBDGpqQfjVAygCADYCACAHQfDLAzYCACADLAA7QQBIBEAgAygCOBogAygCMBAqCyAHED0aIANBxABqEDsaIANBoAFqJAALBwAgACgCFAslAQF/IAFBAk0EfyAAKAJ8IAFBAnRB3OwCaigCAGooAgAFQQALCyIBAX8gAUECTQR/IAAgAUECdEHQ7AJqKAIAaigCAAVBAAsLIgEBfyABQQJNBH8gACABQQJ0QcTsAmooAgBqKAIABUEACwsJACAAIAEQigYLkgMBA38jAEEgayIDJAAgASACQQAgASgCACgCLBEEACEFAkAgAS0AYSIEQQFNBEAgAiABLwFoEE0gAiABLwFsEE0gAiABQfQAahCgASACIAFBgAFqEKABIAIgAUGMAWoQoAEgAS0AYSIEQQJJDQELAkACQAJAIARBAmsOAgABAgsgAiABLwFoEE0MAQsgAiABKAJoEEoLIAIgAS8BbBBNIAIgASgCcBBKIAIgAUH0AGoQoAEgAiABKAJwIgRBoNLJqwdGBH9BmAEFIARB5dql6wZHDQEgAiABQYABahCgAUGMAQsgAWoQoAEL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CBEAACAIECsLIA9FDQAgDyAPKAIEIgBBAWs2AgQgAA0AIA8gDygCACgCCBEAACAPECsLIAdBgAFqJAAL/wEBAn8jAEEgayIFJAACQCACKAIABEAgAEEANgIIIABCADcCAAwBCyACKAIEQQNHBEAgAEEANgIIIABCADcCAAwBCyAEKAIEQQJHBEAgAEEANgIIIABCADcCAAwBCyACKAIMQQhMBEAgAEEANgIIIABCADcCAAwBCyACLwEYRQRAIABBADYCCCAAQgA3AgAMAQsgAygCBCEGIABBADYCCCAAQgA3AgAgBkECRw0AIAVBBGoQxgEiAUKAgICAIDcCACABIAItAAg6AAggASACKAIMNgIMIAEgAigCFDYCFCABIAIoABc2ABcgBUELNgIAIAAgASAFEGILIAVBIGokAAu1AQIDfwF+IABBADYAeUECIAAtAHgiASABQQJNGyABIAAoAmwiAyAAKAJoIgFrQeD//wBLGyECIAEgA0YEf0EEBQNAQQFBAiACIAJBAkwbIAIgASgCAEH//wNLGyICIAJBAUwbIAIgAS0ABBshAiABKAIQKQMQIAR8IQQgAUEgaiIBIANHDQALQQhBBCAEQoCAgIAPfUKAgICAcFQbCyEBIABBhAg7AHkgACABOgB7IAAgAjoAYQuxFQEdfyMAQYABayIHJAAgAigCAEEAEEAhASACKAIAQQEQQCEEIAIoAgBBAhBAIQUgAigCAEEGEGQiFARAIAIoAgBBBhBAIRULAkACQAJAIAFBCEsNACAEQQhLDQAgBUEJSQ0BCyAAQgA3AgAgAEGkpQUpAgA3AgggAEEQaiEAQbelBSwAAEEATgRAIABBrKUFKQIANwIAIABBtKUFKAIANgIIDAILIABBrKUFKAIAQbClBSgCABAuDAELIAEgBEYgASAFRnFFBEAgAEIANwIAIABBpKUFKQIANwIIIABBEGohAEG3pQUsAABBAE4EQCAAQaylBSkCADcCACAAQbSlBSgCADYCCAwCCyAAQaylBSgCAEGwpQUoAgAQLgwBCyACKAIAIgMoAjAiDgRAIA4gDigCBEEBajYCBCACKAIAIQMLIAMoAhwhCiADKAIYIQtBiAEQLCIIQazjBDYCACAIQgA3AgQgCEEUakEAQegAEDQaIAggCCgCBCIJQQFqIg82AgQgCEIANwI4IAhC44CA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LQAAOgAAIAEgCSANbGogAyANIBJsai0AADoAACACQQJqIQIgFkECaiIWIBFHDQALCyAQQQFxRQ0AIAQgAiATbGogBiACIA9sai0AADoAACABIAIgCWxqIAMgAiASbGotAAA6AAALIApFDQELIAtBAWsiAwRAQQAhAQNAIAEgEmwhBCABIA9sIQYgGiABIAlsaiENIBkgASATbGohEEEAIQIDQCAYIAIgBGpqIhEtAAAhFiARLQABIREgECACQQF2IiJqIBcgAiAGamoiIy0AACAjLQABakEBakEBdjoAACANICJqIBEgFmpBAWpBAXY6AAAgAkECaiICIANJDQALIAFBAWoiASAKRw0ACwsgCyAVQQhLdCEBQQAhAgNAIB0gAiAebGogGyACIBxsaiALEDIaIBQEQCAhIAIgBWxqIB8gAiAgbGogARAyGgsgAkEBaiICIApHDQALCyAAIAg2AgQgACAMNgIAIAggCCgCBEEBajYCBCAAQZClBSkCADcCCCAAQRBqIQBBo6UFLAAAQQBOBEAgAEGYpQUpAgA3AgAgAEGgpQUoAgA2AggMAQsgAEGYpQUoAgBBnKUFKAIAEC4LIAggCCgCBCIAQQFrNgIEIABFBEAgCCAIKAIAKAIIEQAAIAgQKwsgDkUNACAOIA4oAgQiAEEBazYCBCAADQAgDiAOKAIAKAIIEQAAIA4QKwsgB0GAAWokAAv/AQECfyMAQSBrIgUkAAJAIAIoAgAEQCAAQQA2AgggAEIANwIADAELIAIoAgRBA0cEQCAAQQA2AgggAEIANwIADAELIAQoAgRBAkcEQCAAQQA2AgggAEIANwIADAELIAIoAgxBCU4EQCAAQQA2AgggAEIANwIADAELIAIvARhFBEAgAEEANgIIIABCADcCAAwBCyADKAIEIQYgAEEANgIIIABCADcCACAGQQJHDQAgBUEEahDGASIBQoCAgIAgNwIAIAEgAi0ACDoACCABIAIoAgw2AgwgASACKAIUNgIUIAEgAigAFzYAFyAFQQs2AgAgACABIAUQYgsgBUEgaiQAC5cYASJ/IwBBgAFrIgckACACKAIAQQAQQCEDIAIoAgBBARBAIQUgAigCAEECEEAhCSACKAIAQQYQZCIaBEAgAigCAEEGEEAhGwsCQAJAAkAgA0EJSQ0AIAVBCUkNACAJQQhLDQELIABC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QQAMAQtBACABKAIQQQZKDQAaIAEoAjQhGSABKAIsCyEFAn9BACADKAIAIgFFDQAaIAMhAgNAIAIgASABKAIQQQpIIgYbIQIgASAGQQJ0aigCACIBDQALQQAgAiADRg0AGkEAIAIoAhBBCkoNABogAigCNCETIAIoAiwLIQMgEQRAIA1BfnEhFCANQQFxIRUgDUEBayEWQQAhAgNAAkAgBC0ACEUEQCANRQ0BIAMgAiATbGohCyAPIAIgEmxqIQxBACEBQQAhBiAWBEADQCALIAFBA2xqIgggASAMai0AACIJOgAAIAggCToAAiAIIAk6AAEgCyABQQFyIglBA2xqIgggCSAMai0AACIJOgACIAggCToAASAIIAk6AAAgAUECaiEBIAZBAmoiBiAURw0ACwsgFUUNASALIAFBA2xqIgYgASAMai0AACIBOgAAIAYgAToAAiAGIAE6AAEMAQsgF0UEQCANRQ0BIAMgAiATbGohCyAPIAIgEmxqIQxBACEBQQAhBiAWBEADQCALIAFBAnRqIgggASAMai0AACIJOgAAIAhB/wE6AAMgCCAJOgACIAggCToAASAMIAFBAXIiCWotAAAhCCALIAlBAnRqIglB/wE6AAMgCSAIOgACIAkgCDoAASAJIAg6AAAgAUECaiEBIAZBAmoiBiAURw0ACwsgFUUNASALIAFBAnRqIgYgASAMai0AACIBOgAAIAZB/wE6AAMgBiABOgACIAYgAToAAQwBCyANRQ0AIAIgGWwhBiADIAIgE2xqIQsgDyACIBJsaiEMQQAhAUEAIQkgFgRAA0AgCyABQQJ0aiIIIAEgDGotAAAiEDoAACAIIBA6AAIgCCAQOgABIAggBSABIAZqai0AADoAAyALIAFBAXIiEEECdGoiCCAMIBBqLQAAIhg6AAIgCCAYOgABIAggGDoAACAIIAUgBiAQamotAAA6AAMgAUECaiEBIAlBAmoiCSAURw0ACwsgFUUNACALIAFBAnRqIgsgASAMai0AACIMOgAAIAsgDDoAAiALIAw6AAEgCyAFIAEgBmpqLQAAOgADCyACQQFqIgIgEUcNAAsLIAAgBzYCBCAAIA42AgAgByAHKAIEQQFqNgIEIABBkKUFKQIANwIIIABBEGohAEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwB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IARCADcCXCAEQgA3AmQgBEIANwJsIARCADcAcSAEIARBDGoiCzYCDCAEIAQoAghBAWo2AgggBCABNgIEIAQgBDYCECAIRQRAIAQgBCgCACgCCBEAACAEECsLAkAgAigCACIBKAIkQQxrIgpBBE8EQCAAQgA3AgAgAEGkpQUpAgA3AgggAEEQaiEAQbelBSwAAEEATgRAIABBrKUFKQIANwIAIABBtKUFKAIANgIIDAILIABBrKUFKAIAQbClBSgCABAuDAELIAEoAhghCCABKAIcIgwhASALIApBAnRBmOsCaigCADYCJCALQQE2AiAgCyABNgIcIAsgCDYCGCAFQQhqIAtBCiAIIAwgAigCAEEKEEAgBhA6IAUoAggEQCAAQgA3AgAgACAFKQMINwIIIABBEGohACAFLAAbQQBOBEAgACAFKQIQNwIAIAAgBSgCGDYCCAwCCyAAIAUoAhAgBSgCFBAuIAUsABtBAE4NASAFKAIYGiAFKAIQECoMAQsgBSwAG0EASARAIAUoAhgaIAUoAhAQKgtBACEGAn8CQCACKAIAIgEoAkAiAkUNACABQUBrIgghAQNAIAEgAiACKAIQQQpIIgobIQEgAiAKQQJ0aigCACICDQALIAEgCEYNAEEAIAEoAhBBCkoNARogASgCLCEPIAEoAjQMAQtBAAshCgJ/QQAgAygCACICRQ0AGiADIQEDQCABIAIgAigCEEEKSCIGGyEBIAIgBkECdGooAgAiAg0ACyABIANGBEBBACEGQQAMAQtBACEGQQAgASgCEEEKSg0AGiABKAI0IQYgASgCLAshEAJAIAxFDQAgBiAKIAYgCkkbIgFFDQAgAUEBayIBQQF2QQFqIgJBfHEhESACQQNxIQ4gAUEGSSESA0AgECAGIA1saiEBIA8gCiANbGohA0EAIQJBACEIIBJFBEADQCABIAJqIgcgAiADaiIJLQABOgAAIAcgCS0AADoAASABIAJBAnIiB2oiCSADIAdqIgctAAE6AAAgCSAHLQAAOgABIAEgAkEEciIHaiIJIAMgB2oiBy0AAToAACAJIActAAA6AAEgASACQQZyIgdqIgkgAyAHaiIHLQABOgAAIAkgBy0AADoAASACQQhqIQIgCEEEaiIIIBFHDQALC0EAIQggDgRAA0AgASACaiIHIAIgA2oiCS0AAToAACAHIAktAAA6AAEgAkECaiECIAhBAWoiCCAORw0ACwsgDUEBaiINIAxHDQALCyAAIAQ2AgQgACALNgIAIAQgBCgCBEEBajYCBCAAQZClBSkCADcCCCAAQRBqIQBBo6UFLAAAQQBOBEAgAEGYpQUpAgA3AgAgAEGgpQUoAgA2AggMAQsgAEGYpQUoAgBBnKUFKAIAEC4LIAQgBCgCBCIAQQFrNgIEIABFBEAgBCAEKAIAKAIIEQAAIAQQKwsgBUEgaiQAC7wCACMAQSBrIgEkAAJAAkAgAigCAEEBRgRAIAIoAgRBfHFBDEYNAQsgAEEANgIIIABCADcCAAwBCyAAQQA2AgggAEIANwIAIAFBAToAHiABQYKACDYCGCABQQA6AAwgAULjgICAsAw3AgQgAUEINgIQIAFBzOYENgIUIAFBAjsBHCABQQE6AB4gAUEGOwEcIAFBgYA0NgIYAkACQCACKAIEIgNBDGsOAwABAAELIAFBADoADCABQQE2AgQgAUEMQQ4gA0EORhs2AgggASACKAIMNgIQIAFBCzYCACAAIAFBBGogARBiIAIoAgQhAwsCQCADQQ1rDgMAAQABCyABQQE6AAwgAUEBNgIEIAFBDUEPIANBD0YbNgIIIAEgAigCDDYCECABQQs2AgAgACABQQRqIAEQYgsgAUEgaiQAC/oQARN/IwBBgAFrIgMkACAELQAIIQkgAigCACgCJCEMQYgBECwiBUGs4wQ2AgAgBUIANwIEIAVBFGpBAEHoABA0GiAFIAUoAgQiBEEBaiIINgIEIAVCADcCOCAFQuOAgICwDDcCLCAFQa4gNgIgIAVBQGtCADcCACAFQQA2AoQBIAVCADcCfCAFQoGAgIAQNwJUIAUgBUHMAGoiATYCSCAFQgA3AlwgBUIANwJkIAVCADcCbCAFQgA3AHEgBSAFQQxqIgo2AgwgBSAFKAIIQQFqNgIIIAUgBDYCBCAFIAU2AhAgCEUEQCAFIAUoAgAoAggRAAAgBRArCyACKAIAIgQoAhghCCAEKAIcIg0hBCAKQQM2AiQgCkEBNgIgIAogBDYCHCAKIAg2AhggA0E4aiAKQQMgCCANQQggBhA6IANBIGogCkEEIAggDUEIIAYQOiADQdgAaiEEAkAgAygCOARAIAMgAykDODcDUCADLABLQQBOBEAgBCADQUBrIgcpAwA3AwAgBCAHKAIINgIIDAILIAQgAygCQCADKAJEEC4MAQsgAyADKQMgNwNQIAMsADNBAE4EQCAEIAMpAyg3AwAgBCADKAIwNgIIDAELIAQgAygCKCADKAIsEC4LIANBCGogCkEFIAggDUEIIAYQOiADQfAAaiEHAkAgAygCUARAIAMgAykDUDcDaCADLABjQQBOBEAgByAEKQMANwMAIAcgBCgCCDYCCAwCCyAHIAMoAlggAygCXBAuDAELIAMgAykDCDcDaCADLAAbQQBOBEAgByADKQMQNwMAIAcgAygCGDYCCAwBCyAHIAMoAhAgAygCFBAuCyADLAAbQQBIBEAgAygCGBogAygCEBAqCyADLABjQQBIBEAgAygCYBogAygCWBAqCyADLAAzQQBIBEAgAygCMBogAygCKBAqCyADLABLQQBIBEAgAygCSBogAygCQBAqCwJAIAMoAmgEQCAAQgA3AgAgACADKQNoNwIIIABBEGohACADLAB7QQBOBEAgACAHKQIANwIAIAAgBygCCDYCCAwCCyAAIAMoAnAgAygCdBAuIAMsAHtBAE4NASADKAJ4GiADKAJwECoMAQsgAywAe0EASARAIAMoAngaIAMoAnAQKgsCQCAJQQFxRQ0AIANB6ABqIApBBiAIIA1BCCAGEDogAygCaARAIABCADcCACAAIAMpA2g3AgggAEEQaiEAIAMsAHtBAE4EQCAAIAMpAnA3AgAgACADKAJ4NgIIDAMLIAAgAygCcCADKAJ0EC4gAywAe0EATg0CIAMoAngaIAMoAnAQKgwCCyADLAB7QQBODQAgAygCeBogAygCcBAqCwJ/AkAgAigCACICKAJAIgZFDQAgAkFAayIEIQIDQCACIAYgBigCEEEKSCIHGyECIAYgB0ECdGooAgAiBg0ACyACIARGDQBBACACKAIQQQpKDQEaIAIoAiwhEiACKAI0DAELQQALIRMCfwJAIAEoAgAiAgRAIAEhBCACIQYDQCAEIAYgBigCEEEDSCIHGyEEIAYgB0ECdGooAgAiBg0ACwJ/QQAgASAERg0AGkEAIAQoAhBBA0oNABogBCgCNCEUIAQoAiwLIRUgASEEIAIhBgNAIAQgBiAGKAIQQQRIIgcbIQQgBiAHQQJ0aigCACIGDQALAn9BACABIARGDQAaQQAgBCgCEEEESg0AGiAEKAIsIRYgBCgC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QQJ0aigCACICDQALAn9BACABIAZGDQAaQQAgBigCEEEESg0AGiAGKAI0IRUgBigCLAshESABIQYgBCECA0AgBiACIAIoAhBBBUgiEhshBiACIBJBAnRqKAIAIgINAAsgASAGRw0BC0EADAELQQAgBigCEEEFSg0AGiAGKAI0IRYgBigCLAshEgJ/QQAgAygCACICRQ0AGiADIQYDQCAGIAIgAigCEEEKSCIMGyEGIAIgDEECdGooAgAiAg0ACyADIAZGBEBBACEMQQAMAQtBACEMQQAgBigCEEEKSg0AGiAGKAI0IQwgBigCLAshF0EAIQYCf0EAIARFIAlBAXNyDQAaIAEhAgNAIAIgBCAEKAIQQQZIIgMbIQIgBCADQQJ0aigCACIEDQALQQAgASACRg0AGkEAIAIoAhBBBkoNABogAigCNCEGIAIoAiwLIQMCQCAPRQ0AIAkEQCAORQ0BQQAhAQNAIAEgBmwhCSASIAEgFmxqIQogESABIBVsaiELIBQgASAQbGohCCAXIAEgDGxqIRhBACEEA0AgGCAEQQN0aiICQQA6AAAgBCAIai0AACETIAJBADoAAiACIBM6AAEgBCALai0AACETIAJBADoABCACIBM6AAMgBCAKai0AACETIAJBADoABiACIBM6AAUgAiADIAQgCWpqLQAAOgAHIARBAWoiBCAORw0ACyABQQFqIgEgD0cNAAsMAQsgDkUNAEEIQQYgC0EBcRshBkEAIQMgCkEBcQRAA0AgEiADIBZsaiECIBEgAyAVbGohCSAUIAMgEGxqIQogFyADIAxsaiELQQAhBANAIAsgBCAGbGoiAUEAOgAAIAQgCmotAAAhCCABQQA6AAIgASAIOgABIAQgCWotAAAhCCABQQA6AAQgASAIOgADIAIgBGotAAAhCCABQYD+AzsABiABIAg6AAUgBEEBaiIEIA5HDQALIANBAWoiAyAPRw0ADAILAAsDQCASIAMgFmxqIQQgESADIBVsaiEJIBQgAyAQbGohCiAXIAMgDGxqIQtBACECA0AgCyACIAZsaiIBQQA6AAAgAiAKai0AACEIIAFBADoAAiABIAg6AAEgAiAJai0AACEIIAFBADoABCABIAg6AAMgASACIARqLQAAOgAFIAJBAWoiAiAORw0ACyADQQFqIgMgD0cNAAsLIAAgBTYCBCAAIA02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CEEBajYCCCAFIAc2AgQgBSAFNgIQIAhFBEAgBSAFKAIAKAIIEQAAIAUQKwsgDUEDNgIkIA1BADYCICANIA42AhwgDSAKNgIYIAQtAAghCCACKAIAKAIkIQ8gA0E4aiANQQAgCiAOQQggBhA6IANBIGogDUEBIAogDkEIIAYQOiADQdgAaiEEAkAgAygCOARAIAMgAykDODcDUCADLABLQQBOBEAgBCADQUBrIgcpAwA3AwAgBCAHKAIINgIIDAILIAQgAygCQCADKAJEEC4MAQsgAyADKQMgNwNQIAMsADNBAE4EQCAEIAMpAyg3AwAgBCADKAIwNgIIDAELIAQgAygCKCADKAIsEC4LIANBCGogDUECIAogDkEIIAYQOiADQfAAaiEHAkAgAygCUARAIAMgAykDUDcDaCADLABjQQBOBEAgByAEKQMANwMAIAcgBCgCCDYCCAwCCyAHIAMoAlggAygCXBAuDAELIAMgAykDCDcDaCADLAAbQQBOBEAgByADKQMQNwMAIAcgAygCGDYCCAwBCyAHIAMoAhAgAygCFBAuCyADLAAbQQBIBEAgAygCGBogAygCEBAqCyADLABjQQBIBEAgAygCYBogAygCWBAqCyADLAAzQQBIBEAgAygCMBogAygCKBAqCyADLABLQQBIBEAgAygCSBogAygCQBAqCwJAIAMoAmgEQCAAQgA3AgAgACADKQNoNwIIIABBEGohACADLAB7QQBOBEAgACAHKQIANwIAIAAgBygCCDYCCAwCCyAAIAMoAnAgAygCdBAuIAMsAHtBAE4NASADKAJ4GiADKAJwECoMAQsgAywAe0EASARAIAMoAngaIAMoAnAQKgsCQCAIQQFxRQ0AIANB6ABqIA1BBiAKIA5BCCAGEDogAygCaARAIABCADcCACAAIAMpA2g3AgggAEEQaiEAIAMsAHtBAE4EQCAAIAMpAnA3AgAgACADKAJ4NgIIDAMLIAAgAygCcCADKAJ0EC4gAywAe0EATg0CIAMoAngaIAMoAnAQKgwCCyADLAB7QQBODQAgAygCeBogAygCcBAqCwJ/AkAgAigCACICKAJAIgZFDQAgAkFAayICIQQDQCAEIAYgBigCEEEKSCIHGyEEIAYgB0ECdGooAgAiBg0ACyACIARGDQBBACAEKAIQQQpKDQEaIAQoAjQhFiAEKAIs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GSALQQNxIRYgEUEBcSEPIAtBBEkhIUEAIQUDQCAUIAUgGGxqIQMgHSAFIBxsaiEEAkAgIwRAIB8gBSAebGohDCAXIAUgG2xqIRJBACEBA0AgASADakH/AQJ/IAEgDGotAACzIAcqAjyUIAEgEmotAACzIAcqAjSUIAcqAjggASAEai0AALOUkpIiKSApQwAAW0OUQwAAgDuUQwAAgEGSIA8bQwAAAD+SIimLQwAAAE9dBEAgKagMAQtBgICAgHgLIgYgBkH/AU8bQQAgBkEAThs6AAAgAUEBaiIBIAtHDQALDAELQQAhAQJAIA8EQEEAIQZBACEMICENAQNAIAEgA2ogASAEai0AADoAACADIAFBAXIiEmogBCASai0AADoAACADIAFBAnIiEmogBCASai0AADoAACADIAFBA3IiEmogBCASai0AADoAACABQQRqIQEgDEEEaiIMIBlHDQALDAELA0AgASADakH/AQJ/IAEgBGotAACzQwAAW0OUQwAAgDuUQwAAgEGSQwAAAD+SIimLQwAAAE9dBEAgKagMAQtBgICAgHgLIgYgBkH/AU8bQQAgBkEAThs6AAAgCyABQQFqIgFHDQALDAELIBZFDQADQCABIANqIAEgBGotAAA6AAAgAUEBaiEBIAZBAWoiBiAWRw0ACwsgBUEBaiIFIA1HDQALIBNBAkYhFiAOIBNyQQJJISFBACEDA0AgHyADIB5sIgFqIQUgJSADIBNuIgQgJGwiD2ohBgJAICMEQCAfIANBAWoiASADIAEgDUkbIAMgFhsiASAebGohDyAdIAEgHGxqIQwgFyABIBtsaiEUIB0gAyAcbGohGCAXIAMgG2xqIRkgIiAEICZsaiESQQAhAQNAIAEgBWotAACzISkgASAYai0AALMhKiABIBlqLQAAsyErICFFBEAgKSAFIAFBAWoiBCABIAQgC0kbIAEgDkECRhsgASAWGyIEai0AALOSIAEgD2otAACzkiAEIA9qLQAAs5JDAACAPpQhKSArIAQgGWotAACzkiABIBRqLQAAs5IgBCAUai0AALOSQwAAgD6UISsgKiAEIBhqLQAAs5IgASAMai0AALOSIAQgDGotAACzkkMAAIA+lCEqCyAHKgJUIS0gByoCTCEuIAcqAlAhLyAGIAEgDm4iJ2pB/wECfyApIAcqAkiUICsgByoCQJQgKiAHKgJElJKSIiwgLEMAAGBDlEMAAIA7lCARQQFxIigbQwAAAEOSQwAAAD+SIiyLQwAAAE9dBEAgLKgMAQtBgICAgHgLIgQgBEH/AU8bQQAgBEEAThs6AAAgEiAnakH/AQJ/ICkgLZQgKyAulCAqIC+UkpIiKSApQwAAYEOUQwAAgDuUICgbQwAAAEOSQwAAAD+SIimLQwAAAE9dBEAgKagMAQtBgICAgHgLIgQgBEH/AU8bQQAgBEEAThs6AAAgASAOaiIBIAtJDQALDAELIAEgF2ohBCAPICJqIQ9BACEBIBFBAXFFBEADQCAGIAEgDm4iFGpB/wECfyABIAVqLQAAs0MAAGBDlEMAAIA7lEMAAIBBkkMAAAA/kiIpi0MAAABPXQRAICmoDAELQYCAgIB4CyIMIAxB/wFPG0EAIAxBAE4bOgAAIA8gFGpB/wECfyABIARqLQAAs0MAAGBDlEMAAIA7lEMAAIBBkkMAAAA/kiIpi0MAAABPXQRAICmoDAELQYCAgIB4CyIMIAxB/wFPG0EAIAxBAE4bOgAAIAsgASAOaiIBSw0ADAILAAsDQCAGIAEgDm4iDGogASAFai0AADoAACAMIA9qIAEgBGotAAA6AAAgASAOaiIBIAtJDQALCyADIBNqIgMgDUkNAAsLAkAgGkUNACACKAIAQQYQQCEBIA1FDQAgCyABQQhLdCECQQAhASANQQFHBEAgDUF+cSEEQQAhAwNAIAogASAJbGogICABIBVsaiACEDIaIAogAUEBciIFIAlsaiAgIAUgFWxqIAIQMhogAUECaiEBIANBAmoiAyAERw0ACwsgDUEBcUUNACAKIAEgCWxqICAgASAVbGogAhAyGgsgACAINgIEIAAgEDYCACAIIAgoAgRBAWo2AgQgAEGQpQUpAgA3AgggAEEQaiEAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAELIABBmKUFKAIAQZylBSgCABAuCyAIIAgoAgQiAEEBazYCBCAADQAgCCAIKAIAKAIIEQAAIAgQKwsgB0GgAWokAAsJACAAEJ8GECoLrwMBAX8jAEEgayIBJAACQCACKAIMIgVBCU4EQCAAQQA2AgggAEIANwIADAELIAVBCEcEQCAAQQA2AgggAEIANwIADAELAkAgAigCAEEBRgRAIAIoAgRBA0YNAQsgAEEANgIIIABCADcCAAwBCwJAIAMvARgiBUEOSw0AQQEgBXRBgJIBcUUNACAAQQA2AgggAEIANwIADAELIABBADYCCCAAQgA3AgAgAUEBOgAeIAFBAjsBHCABQYKACDYCGCABQQA6AAwgAULjgICAsAw3AgQgAUEINgIQIAFBzOYENgIUIAFBAToAHiABQQY7ARwgAUGBgDQ2AhgCQCADKAIEIgVBA0YNACAEKAIEQQFHBEAgBC0ADA0BCyABIAU2AgggAUEANgIEIAEgAi0ACDoADCABIAIoAgw2AhAgASADKAAXNgAbIAEgAygCFDYCGCABQQs2AgAgACABQQRqIAEQYgwBCyABQoCAgIAwNwIEIAEgAi0ACDoADCABIAIoAgw2AhAgASADKAAXNgAbIAEgAygCFDYCGCABQQs2AgAgACABQQRqIAEQYgsgAUEgaiQACw8AIABBuJkFNgIAIAAQKgsNACAAQbiZBTYCACAACw8AIABB7JgFNgIAIAAQKgsNACAAQeyYBTYCACAACw8AIABBoJgFNgIAIAAQKgsNACAAQaCYBTYCACAACw8AIABB1JcFNgIAIAAQKgsNACAAQdSXBTYCACAACw8AIABBiJcFNgIAIAAQKgsNACAAQYiXBTYCACAACw8AIABBvJYFNgIAIAAQKgsNACAAQbyWBTYCACAACw8AIABB8JUFNgIAIAAQKgsNACAAQfCVBTYCACAACw8AIABBpJUFNgIAIAAQKgsNACAAQaSVBTYCACAACw8AIABB2JQFNgIAIAAQKgsNACAAQdiUBTYCACAACw8AIABBsJQFNgIAIAAQKgsNACAAQbCUBTYCACAACw8AIABBiJQFNgIAIAAQKgsNACAAQYiUBTYCACAACw8AIABB4JMFNgIAIAAQKgsNACAAQeCTBTYCACAACw8AIABBuJMFNgIAIAAQKgsNACAAQbiTBTYCACAACw8AIABBkJMFNgIAIAAQKgsNACAAQZCTBTYCACAACw8AIABBxJIFNgIAIAAQKgsNACAAQcSSBTYCACAACw8AIABB+JEFNgIAIAAQKgsNACAAQfiRBTYCACAACw8AIABB0JEFNgIAIAAQKgsNACAAQdCRBTYCACAACw8AIABBqJEFNgIAIAAQKgsNACAAQaiRBTYCACAACw8AIABBgJEFNgIAIAAQ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CBEAACABECsLIAAoArQDIgEEQCAAIAE2ArgDIAAoArwDGiABECoLIAAQdBAqC5MBAQJ/IABBhIwFNgIAAkAgACgC5AMiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsCQCAAKALcAyIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCyAAKAK0AyIBBEAgACABNgK4AyAAKAK8AxogARAqCyAAEHQLkgMBCn8jAEFAaiIBJAAgAUEAOgAoIAFCADcCNCABQgA3AyAgAUIANwIsIAFBDGogACABQSxqQQBBABDjAyABLAAfQQBIBEAgASgCHBogASgCFBAqCyAAKALgAyECIAEoAjQhBSABQQA2AjQgASgCJCEEIAFBADYCJCABKAIgIQMgAUEANgIgIAEoAiwhBiABKAIwIQcgAUIANwIsIAEoAjghCCABLQAoIQkgAiADNgIEIAIoAgghAyACIAQ2AggCQCADRQ0AIAMgAygCBCIEQQFrNgIEIAQNACADIAMoAgAoAggRAAAgAxArCyACIAk6AAwgAigCECIDBEAgAiADNgIUIAIoAhgaIAMQKgsgAiAINgIcIAIgBTYCGCACIAc2AhQgAiAGNgIQIAAoAuADIgAgACgCACgCEBEBACEKIAEoAiwiAARAIAEgADYCMCABKAI0GiAAECoLAkAgASgCJCIARQ0AIAAgACgCBCIDQQFrNgIEIAMNACAAIAAoAgAoAggRAAAgABArCyABQUBrJAAgCgsRACAAIAAoAmhB//8DSzoAYQuSAwEKfyMAQUBqIgEkACABQQA6ACggAUIANwI0IAFCADcDICABQgA3AiwgAUEMaiAAIAFBLGpBAEEAEOMDIAEsAB9BAEgEQCABKAIcGiABKAIUECoLIAAoAuADIQIgASgCNCEFIAFBADYCNCABKAIkIQQgAUEANgIkIAEoAiAhAyABQQA2AiAgASgCLCEGIAEoAjAhByABQgA3AiwgASgCOCEIIAEtACghCSACIAM2AgQgAigCCCEDIAIgBDYCCAJAIANFDQAgAyADKAIEIgRBAWs2AgQgBA0AIAMgAygCACgCCBEAACADECsLIAIgCToADCACKAIQIgMEQCACIAM2AhQgAigCGBogAxAqCyACIAg2AhwgAiAFNgIYIAIgBzYCFCACIAY2AhAgACgC4AMiACAAKAIAKAIMEQEAIQogASgCLCIABEAgASAANgIwIAEoAjQaIAAQKgsCQCABKAIkIgBFDQAgACAAKAIEIgNBAWs2AgQgAw0AIAAgACgCACgCCBEAACAAECsLIAFBQGskACAKC78GAQl/IwBB4ABrIgQkACAEQTBqIAFBAEEAEKEGAkAgBCgCTARAIAAgBCkCTDcCACAAQQhqIQAgBCwAX0EATgRAIAAgBCkCVDcCACAAIAQoAlw2AggMAgsgACAEKAJUIAQoAlgQLgwBCyABKALgAyEFIAQoAkQhCCAEQQA2AkQgBCgCNCEHIARBADYCNCAEKAIwIQYgBEEANgIwIAQoAjwhCSAEKAJAIQogBEIANwI8IAQoAkghCyAELQA4IQwgBSAGNgIEIAUoAgghBiAFIAc2AggCQCAGRQ0AIAYgBigCBCIHQQFrNgIEIAcNACAGIAYoAgAoAggRAAAgBhArCyAFIAw6AAwgBSgCECIGBEAgBSAGNgIUIAUoAhgaIAYQKgsgBSALNgIcIAUgCDYCGCAFIAo2AhQgBSAJNgIQIARBGGogASgC4AMiBSACIAMgBSgCACgCFBEGAAJAIAQoAhgEQCAAIAQpAxg3AgAgACAEKAIoNgIQIAAgBCkDIDcCCCAEQQA2AiggBEIANwMgDAELIARBBGohBQJAIAIoAgANACABKALAASEGIAEoAsQBIgEEQCABIAEoAgRBAWo2AgQLAkAgBkUNACAGLwEIDQAgAkEBNgIAIANBAzYCAAsgAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsgBUGQpQUpAgA3AgAgBUEIaiEBAkBBo6UFLAAAQQBOBEAgAUGYpQUpAgA3AgAgAUGgpQUoAgA2AggMAQsgAUGYpQUoAgBBnKUFKAIAEC4LIAQsABdBAEgEQCAEKAIUGiAEKAIMECoLIABBkKUFKQIANwIAIABBCGohAEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLgsgBCwAK0EATg0AIAQoAigaIAQoAiAQKgsgBCwAX0EASARAIAQoAlwaIAQoAlQQKgsgBCgCPCIABEAgBCAANgJAIAQoAkQaIAAQKgsCQCAEKAI0IgBFDQAgACAAKAIEIgFBAWs2AgQgAQ0AIAAgACgCACgCCBEAACAAECsLIARB4ABqJAALGAAgASAAKAKAAzYCACACIAAoAoQDNgIAC5ABAQR/IABBAEHIABA0IgAgASgC+AIiBCABKAKAAyIDakEBayADbjYCBCABKAKEAyECIAAgASgC/AIiBTYCGCAAIAQ2AhQgACACNgIQIAAgAzYCDCAAIAIgBWpBAWsgAm42AgggACABLQCOAyICOgAkIAIEQCAAQShqIAFBkANqQQggAiACQQhPG0ECdBAyGgsL0AUBB38jAEEwayIGJAACQCADBEAjAEEwayIDJAAgAyABIAQgBRChBgJAIAMoAhwEQCAAQgA3AgAgACADKQIcNwIIIABBEGohACADLAAvQQBOBEAgACADKQIkNwIAIAAgAygCLDYCCAwCCyAAIAMoAiQgAygCKBAuDAELIAEoAuADIQQgAygCFCEIIANBADYCFCADKAIEIQcgA0EANgIEIAMoAgAhBSADQQA2AgAgAygCDCEJIAMoAhAhCiADQgA3AgwgAygCGCELIAMtAAghDCAEIAU2AgQgBCgCCCEFIAQgBzYCCAJAIAVFDQAgBSAFKAIEIgdBAWs2AgQgBw0AIAUgBSgCACgCCBEAACAFECsLIAQgDDoADCAEKAIQIgUEQCAEIAU2AhQgBCgCGBogBRAqCyAEIAs2AhwgBCAINgIYIAQgCjYCFCAEIAk2AhAgACABKALgAyIAIAIgACgCACgCHBEDAAsgAywAL0EASARAIAMoAiwaIAMoAiQQKgsgAygCDCIABEAgAyAANgIQIAMoAhQaIAAQKgsCQCADKAIEIgBFDQAgACAAKAIEIgFBAWs2AgQgAQ0AIAAgACgCACgCCBEAACAAECsLIANBMGokAAwBCyAGQTAQLCIBNgIMIAZCqYCAgICGgICAfzcCECABQd3TAC0AADoAKCABQdXTACkAADcAICABQc3TACkAADcAGCABQcXTACkAADcAECABQb3TACkAADcACCABQbXTACkAADcAACABQQA6ACkgBkEYakEEQQAgBkEMahAvIQEgAEIANwIAIAAgASkDADcCCCAAQRBqIQACQCABLAATQQBOBEAgACABKQIINwIAIAAgASgCEDYCCAwBCyAAIAEoAgggASgCDBAuIAEsABNBAE4N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gH83AiwgAEG9lQEpAAA3AAAgAEEAOgAxIABB7ZUBLQAAOgAwIABB5ZUBKQAANwAoIABB3ZUBKQAANwAgIABB1ZUBKQAANwAYIABBzZUBKQAANwAQIABBxZUBKQAANwAIIAhBBEG4FyAEQShqEC8aIAQsADNBAE4NASAEKAIwGiAEKAIoECoMAQsCQCABLQDUA0EBRw0AIARBiAFqIQIgASgCJCEBIwBBEGsiAyQAQfDnBCkDACEWAn4gBygCECIAIAcoAghqQQFrIABurSAHKAIMIgAgBygCBGpBAWsgAG6tfiIVIActABoiAEUNABogFSAHNQIcfiIVIABBAWsiAEUNABogFSAHNQIgfiIVIABBAUYNABogFSAHNQIkfiIVIABBAkYNABogFSAHNQIofiIVIABBA0YNABogFSAHNQIsfiIVIABBBEYNABogFSAHNQIwfiIVIABBBUYNABogFSAHNQI0fiIVIABBBkYNABogFSAHNQI4fgshFQJAAkAgFlANACAVIBZYDQAgA0EoECwiADYCBCADQqeAgICAhYCAgH83AgggAEHElAEpAAA3AAAgAEEAOgAnIABB45QBKQAANwAfIABB3JQBKQAANwAYIABB1JQBKQAANwAQIABBzJQBKQAANwAIIAhBAkHoByADQQRqEC8aIAMsAA9BAE4NASADKAIMGiADKAIEECoMAQsgCCAHIAIgAUIAIBUQogYLIANBEGokACAIKAIADQEgCCwAE0EATg0AIAgoAhAaIAgoAggQKgsgCBDoAQsgD0UNACAPIA8oAgQiAEEBazYCBCAADQAgDyAPKAIAKAIIEQAAIA8QKwsgDkUNBSAOIA4oAgQiAEEBazYCBCAADQUgDiAOKAIAKAIIEQAAIA4QKwwFCxA2AAsQNgALIAVBCGoiBSADRw0ACwsgBEEwECwiATYCSCAEQqiAgICAhoCAgH83AkwgAUHKkAEpAAA3AAAgAUEAOgAoIAFB6pABKQAANwAgIAFB4pABKQAANwAYIAFB2pABKQAANwAQIAFB0pABKQAANwAIIABBAkEAIARByABqEC8aIAQsAFNBAE4NACAEKAJQGiAEKAJIECoLAkAgBCgCjAEiAUUNACABIAEoAgQiAEEBazYCBCAADQAgASABKAIAKAIIEQAAIAEQKwsgBEGQAWokAAsLACAAKAKIAxDo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AhAgBigCDCIIa0EERwRAIAZBMBAsIgE2AgAgBkKvgICAgIaAgIB/NwIEIAFBkt4AKQAANwAnIAFBi94AKQAANwAgIAFBg94AKQAANwAYIAFB+90AKQAANwAQIAFB890AKQAANwAIIAFB690AKQAANwAAIAFBADoALyAGQRhqQQJBACAGEC8hASAAQgA3AgAgACABKQMANwIIIABBEGohAAJAIAEsABNBAE4EQCAAIAEpAgg3AgAgACABKAIQNgIIDAELIAAgASgCCCABKAIMEC4gASwAE0EATg0AIAEoAhAaIAEoAggQKgsgBiwAC0EATg0BIAYoAggaIAYoAgAQKgwBCyAIKAIAIgggASgCJEYEQCAGQSgQLCIBNgIAIAZCoICAgICFgICAfzcCBCABQfLIACkAADcAGCABQerIACkAADcAECABQeLIACkAADcACCABQdrIACkAADcAACABQQA6ACAgBkEYakECQQAgBhAvIQEgAEIANwIAIAAgASkDADcCCCAAQRBqIQACQCABLAATQQBOBEAgACABKQIINwIAIAAgASgCEDYCCAwBCyAAIAEoAgggASgCDBAuIAEsABNBAE4NACABKAIQGiABKAIIECoLIAYsAAtBAE4NASAGKAIIGiAGKAIAECoMAQsgBkEYaiIJIAEoAhQgCEEBEI0BIAYoAhwhCAJAIAYoAhgiAUUEQCAGQTAQLCIBNgIAIAZCqYCAgICGgICAfzcCBCABQendAC0AADoAKCABQeHdACkAADcAICABQdndACkAADcAGCABQdHdACkAADcAECABQcndACkAADcACCABQcHdACkAADcAACABQQA6ACkgCUECQQAgBhAvIQEgAEIANwIAIAAgASkDADcCCCAAQRBqIQACQCABLAATQQBOBEAgACABKQIINwIAIAAgASgCEDYCCAwBCyAAIAEoAgggASgCDBAuIAEsABNBAE4NACABKAIQGiABKAIIECoLIAYsAAtBAE4NASAGKAIIGiAGKAIAECoMAQsgBkEYaiABIAEoAgAoAhQRAgAgBigCGARAIABCADcCACAAIAYpAxg3AgggAEEQaiEAIAYsACtBAE4EQCAAIAYpAiA3AgAgACAGKAIoNgIIDAILIAAgBigCICAGKAIkEC4gBiwAK0EATg0BIAYoAigaIAYoAiAQKgwBCyAGLAArQQBIBEAgBigCKBogBigCIBAqCyAAIAEgAiADIAQgBRCnAgsgCEUNACAIIAgoAgQiAEEBazYCBCAADQAgCCAIKAIAKAIIEQAAIAgQKwsgBigCDCIARQ0AIAYgADYCECAGKAIUGiAAECoLAkAgB0UNACAHIAcoAgQiAEEBazYCBCAADQAgByAHKAIAKAIIEQAAIAcQKwsgBkEwaiQAC4QCACMAQTBrIgEkACABQSAQLCICNgIMIAFCnYCAgICEgICAfzcCECACQcikASkAADcAFSACQcOkASkAADcAECACQbukASkAADcACCACQbOkASkAADcAACACQQA6AB0gAUEYakEEQQAgAUEMahAvIQIgAEIANwIYIABCADcCECAAQgA3AgggAEIANwIAIAAgAikDADcCICAAQShqIQACQCACLAATQQBOBEAgACACKQIINwIAIAAgAigCEDYCCAwBCyAAIAIoAgggAigCDBAuIAIsABNBAE4NACACKAIQGiACKAIIECoLIAEsABdBAEgEQCABKAIUGiABKAIMECoLIAFBMGokAAsIAEHs7L3LBgtPAQF/IABBtIoFNgIAIAAoApQDIgEEQCAAIAE2ApgDIAAoApwDGiABECoLIAAoAogDIgEEQCAAIAE2AowDIAAoApADGiABECoLIAAQdBAqC00BAX8gAEG0igU2AgAgACgClAMiAQRAIAAgATYCmAMgACgCnAMaIAEQKgsgACgCiAMiAQRAIAAgATYCjAMgACgCkAMaIAEQKgsgABB0C/UBAQF/IwBBIGsiAyQAIAMgASACEHsgAywAE0EASARAIAMoAhAaIAMoAggQKgsCQCABLQBhIgRBAk8EQCAAIAFBrTsQkQEMAQsgAQJ/IARFBEAgAhBODAELIAIQSQs2AmggAi0AFEEBRgRAIANBADoAFCADQQA6AB8gAEECQeQAIANBFGoQLxogAywAH0EATg0BIAMoAhwaIAMoAhQQKgwBCyAAQZClBSkCADcCACAAQQhqIQBBo6UFLAAAQQBOBEAgAEGYpQUpAgA3AgAgAEGgpQUoAgA2AggMAQsgAEGYpQUoAgBBnKUFKAIAEC4LIANBIGokAAtbACACQQE2AgAgA0EDNgIAIABBkKUFKQIANwIAIABBCGohAEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgC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ahAvGiAKLAAPQQBODQEgCigCDBogCigCBBAqDAELIApBADoABCAKQQA6AA8gDEEFQdIPIApBBGoQLxogCiwAD0EATg0AIAooAgwaIAooAgQQKgsgCkEQaiQAIAMgAykDOCIpNwNYIAMsAGtBAE4EfyAppwUgAygCaBogAygCYBAqIAMoAlgLIQUgAyADKQNANwNgIAMgAygCSDYCaAJAAkAgBUUEQCABKAKUAyIFIAEoApgDRg0CIAJBHGohISAAQRBqIQ0gA0FAayEZDAELIABCADcCACAAIAMpA1g3AgggAEEQaiEAIAMsAGtBAE4EQCAAIAMpAmA3AgAgACADKAJoNgIIDAMLIAAgAygCYCADKAJkEC4MAgsDQCAFIBtBAnRqKAIAIgUgASgCJEYEQCADQThqQQJBACADQRBqQZ+YARCAASICEC8hASAAQgA3AgAgACABKQMANwIIAkAgASwAE0EATgRAIA0gASkCCDcCACANIAEoAhA2AggMAQsgDSABKAIIIAEoAgwQLiABLAATQQBODQAgASgCEBogASgCCBAqCyACLAALQQBODQMgAigCCBogAigCABAqDAMLIANBOGoiBiABKAIUIAVBARCNASADKAI8IRcCQCADKAI4IgVFBEAgA0EwECwiBTYCECADQqyAgICAhoCAgH83AhQgBUGamAEoAAA2ACggBUGSmAEpAAA3ACAgBUGKmAEpAAA3ABggBUGCmAEpAAA3ABAgBUH6lwEpAAA3AAggBUHylwEpAAA3AAAgBUEAOgAsIAZBAkHQDyADQRBqEC8hBSAAQgA3AgAgACAFKQMANwIIAkAgAywAS0EATgRAIA0gGSkCADcCACANIBkoAgg2AggMAQsgDSADKAJAIAMoAkQQLiADLABLQQBODQAgAygCSBogAygCQBAqCyADLAAbQQBIBEAgAygCGBogAygCEBAqC0EBIQUMAQsgA0E4aiAFIAUoAgAoAhQRAgAgAygCOARAIABCADcCACAAIAMpAzg3AgggAywAS0EATgRAIA0gGSkCADcCACANIBkoAgg2AghBASEFDAILIA0gAygCQCADKAJEEC4gAywAS0EASARAIAMoAkgaIAMoAkAQKgtBASEFDAELIAMsAEtBAEgEQCADKAJIGiADKAJAECoLIANBOGogBSACQQBBAEEAEKcCAkACQCAD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QCABQZilBSkCADcCACABQaClBSgCADYCCAwBCyABQZilBSgCAEGcpQUoAgAQLgsgDSwAG0EASARAIA0oAhgaIA0oAhAQKgsgDUEgaiQAC4QCACMAQTBrIgEkACABQSAQLCICNgIMIAFCnYCAgICEgICAfzcCECACQYSlASkAADcAFSACQf+kASkAADcAECACQfekASkAADcACCACQe+kASkAADcAACACQQA6AB0gAUEYakEEQQAgAUEMahAvIQIgAEIANwIYIABCADcCECAAQgA3AgggAEIANwIAIAAgAikDADcCICAAQShqIQACQCACLAATQQBOBEAgACACKQIINwIAIAAgAigCEDYCCAwBCyAAIAIoAgggAigCDBAuIAIsABNBAE4NACACKAIQGiACKAIIECoLIAEsABdBAEgEQCABKAIUGiABKAIMECoLIAFBMGokAAsIAEHk0sm7BgsxAQF/IABBzIkFNgIAIAAoAoADIgEEQCAAIAE2AoQDIAAoAogDGiABECoLIAAQdBAqCy8BAX8gAEHMiQU2AgAgACgCgAMiAQRAIAAgATYChAMgACgCiAMaIAEQKgsgABB0C6QEAQN/IwBBQGoiAiQAIAJBKGogASgCFCABKAIkIAJBPGoQ1QECQCACKAIoBEAgAEIANwIAIAAgAikDKDcCCCAAQRBqIQAgAiwAO0EATgRAIAAgAikCMDcCACAAIAIoAjg2AggMAgsgACACKAIwIAIoAjQQLgwBCyACQRBqIgQgASgCFCACKAI8QQEQjQEgAigCFCEDAkAgAigCECIBRQRAIAJBADoABCACQQA6AA8gBEECQdAPIAJBBGoQLyEBIABCADcCACAAIAEpAwA3AgggAEEQaiEAAkAgASwAE0EATgRAIAAgASkCCDcCACAAIAEoAhA2AggMAQsgACABKAIIIAEoAgwQLiABLAATQQBODQAgASgCEBogASgCCBAqCyACLAAPQQBODQEgAigCDBogAigCBBAqDAELIAJBEGogASABKAIAKAIUEQIAIAIoAhAEQCAAQgA3AgAgACACKQMQNwIIIABBEGohACACLAAjQQBOBEAgACACKQIYNwIAIAAgAigCIDYCCAwCCyAAIAIoAhggAigCHBAuIAIsACNBAE4NASACKAIgGiACKAIYECoMAQsgAiwAI0EASARAIAIoAiAaIAIoAhgQKgsgACABIAEoAgAoAkwRAgALIANFDQAgAyADKAIEIgBBAWs2AgQgAA0AIAMgAygCACgCCBEAACADECsLIAIsADtBAEgEQCACKAI4GiACKAIwECoLIAJBQGskAAuBAgECfyMAQSBrIgMkACABIAJBACABKAIAKAIsEQQAIQQgAiABKAJoEEogAiABKAJsEEogAiABKAJwEEogAiABKAJ0EEogAiABKAJ4EEogAiABQfwAahCgASACIAQ2AgwgA0EMaiABIAIgAigCBCAEIAIoAgBqa0EAIAEoAgAoAjARBwAgAiACKAIEIAIoAgBrNgIMIAMsAB9BAEgEQCADKAIcGiADKAIUECoLIABBkKUFKQIANwIAIABBCGohAAJAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAELIABBmKUFKAIAQZylBSgCABAuCyADQSBqJAALuwEBBH8jAEEgayIDJAAgA0EMaiIEIAAoAhQgACgCgAMoAgBBARCNASADKAIQIQAgBCADKAIMIgQgBCgCACgCFBECACADKAIMIQYgAywAH0EASARAIAMoAhwaIAMoAhQQKgsgBgRAIAJBADYCACABQQA2AgALIAEgBCgCKDYCACACIAQoAiw2AgACQCAARQ0AIAAgACgCBCIBQQFrNgIEIAENACAAIAAoAgAoAggRAAAgABArCyADQSBqJAAL6wIBCH8jAEEgayICJAAgAEEAQcgAEDQiACABLwH2AjYCBCAAIAEvAfQCNgIIIAAgASgC+AI2AhQgACABKAL8AjYCGCACQQA2AhwgAkIANwIUAkACQAJAAkAgASgChAMiAyABKAKAAyIERiIGDQAgAyAEayIDQQBIDQMgAiADECwiBTYCFCACIAMgBWoiBzYCHCAFIAQgAxAyIQggAiAHNgIYIAYNACAIKAIAIgNFDQAgAiABKAIUIANBARCNASACKAIEIQEgAigCACIDRQ0BIAIgAyADKAIAKAIUEQIAIAIoAgAhCSACLAATQQBIBEAgAigCEBogAigCCBAqCyAJDQEgACADKAIoNgIMIAAgAygCLDYCEAwBCyAAQgA3AgwMAQsgAUUNACABIAEoAgQiAEEBazYCBCAADQAgASABKAIAKAIIEQAAIAEQKwsgAigCFCIABEAgAigCHBogABAqCyAC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Tg0AIAEoAhAaIAEoAggQKgsgBiwAD0EASARAIAYoAgwaIAYoAgQQKgsgBkG80wMoAgAiADYCKCAAQQxrKAIAIAZBKGpqQdzTAygCADYCACAGQeDTAygCADYCMCACQfDLAzYCACAGLABfQQBIBEAgBigCXBogBigCVBAqCyACED0aIAZB6ABqEDsaCwJAIAYoArwBIgBFDQAgACAAKAIEIgFBAWs2AgQgAQ0AIAAgACgCACgCCBEAACAAECsLIAZBwAFqJAALnw0CCn8BfiMAQSBrIgYkACMAQcABayICJAAgASgCFCIFKAIwIQMgBSgCNCIIBEAgCCAIKAIEQQFqNgIECyAGQQhqIQUgAkEANgK8ASACQgA3ArQBIAJBoAFqIAMgASgCJCACQbQBahCBAgJAIAIoAqABBEAgBSACKQOgATcCACAFIAIoArABNgIQIAUgAikDqAE3AgggAkEANgKwASACQgA3A6gBDAELIAJBEGogAUH0AmogAkG0AWoQpQYgAiACKQMQIgw3A6ABIAIsALMBQQBOBH8gDKcFIAIoArABGiACKAKoARAqIAIoAqABCyELIAIgAikDGDcDqAEgAiACKAIgNgKwASALBEAgBSACKQOgATcCACAFIAIoArABNgIQIAUgAikCqAE3AgggAkIANwOoASACQQA2ArABDAELIAMoAlQhBCADKAJYIgcEQCAHIAcoAgRBAWo2AgQLAkAgBEUEQCACQTgQLCIBNgIQIAJCsICAgICHgICAfzcCFCABQZveACkAADcAACABQQA6ADAgAUHD3gApAAA3ACggAUG73gApAAA3ACAgAUGz3gApAAA3ABggAUGr3gApAAA3ABAgAUGj3gApAAA3AAggBUECQfEAIAJBEGoQLxogAiwAG0EATg0BIAIoAhgaIAIoAhAQKgwBCyACQRBqIAQgASgCJEHn2qWjBhC6ASABKAKAAyIDBEAgASADNgKEAyABKAKIAxogAxAqCyABIAIoAhAiAzYCgAMgASACKAIUIgQ2AoQDIAEgAigCGDYCiAMCQAJAAkAgAS8B9gIgAS8B9AJsIAQgA2tBAnVHBEAgAkGg0wM2AhggAkG00wM2AlAgAkHE0wMoAgAiBDYCECACQRBqIgMgBEEMaygCAGpByNMDKAIANgIAIAJBADYCFCADIAIoAhBBDGsoAgBqIgQg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AUH4////B0kEQCABQQtPBEAgAUEHckEBaiIFECwhAiAAIAVBgICAgHhyNgIIIAAgAjYCACAAIAE2AgQgAiEADAILIAAgAToACyABDQFBACEBDAILEDgACyAAIAQgARA3GgsgACABakEAOgAAIANB7NUDKAIAIgA2AgwgAEEMaygCACADQQxqakH41QMoAgA2AgAgBkHwywM2AgAgAywAO0EASARAIAMoAjgaIAMoAjAQKgsgBhA9GiADQcQAahA7GiADQaABaiQACw8AIABB1IgFNgIAIAAQKgsNACAAQdSIBTYCACAACw8AIABBrIgFNgIAIAAQKgsNACAAQayIBTYCACAACw8AIABBhIgFNgIAIAAQKgsNACAAQYSIBTYCACAACw8AIABB3IcFNgIAIAAQKgsNACAAQdyHBTYCACAAC0sAIAAgASkD+AI3AgAgAEEIaiEAIAEsAIsDQQBOBEAgACABQYADaiIBKQIANwIAIAAgASgCCDYCCA8LIAAgASgCgAMgASgChAMQLgu8AgAjAEEgayIDJAAgAyABIAIQeyADLAATQQBIBEAgAygCEBogAygCCBAqCwJAIAEtAGEEQCAAIAFB2y0QkQEMAQsgASACEEk2AmggASACEEk2AmwgASACEEk2AnAgASACEEk2AnQgASACEEk2AnggA0EUaiACEJYBIAEsAIcBQQBIBEAgASgChAEaIAEoAnwQKgsgASADKQIUNwJ8IAEgAygCHDYChAEgAi0AFEEBRgRAIANBADoAFCADQQA6AB8gAEECQeQAIANBFGoQLxogAywAH0EATg0BIAMoAhwaIAMoAhQQKgwBCyAAQZClBSkCADcCACAAQQhqIQBBo6UFLAAAQQBOBEAgAEGYpQUpAgA3AgAgAEGgpQUoAgA2AggMAQsgAEGYpQUoAgBBnKUFKAIAEC4LIANBIGokAAsIACAAKAL0AgssACAAQYCHBTYCACAALACLA0EASARAIAAoAogDGiAAKAKAAxAqCyAAEHQQKgsqACAAQYCHBTYCACAALACLA0EASARAIAAoAogDGiAAKAKAAxAqCyAAEHQLDwAgAEHYhgU2AgAgABAqCw0AIABB2IYFNgIAIAALDwAgAEGwhgU2AgAgABAqCw0AIABBsIYFNgIAIAALDwAgAEGIhgU2AgAgABAqCw0AIABBiIYFNgIAIAALDwAgAEHghQU2AgAgABAqCw0AIABB4IUFNgIAIAALDwAgAEG4hQU2AgAgABAqCw0AIABBuIUFNgIAIAALDwAgAEGQhQU2AgAgABAqCw0AIABBkIUFNgIAIAALcgEBfyAAQQE2AgggAEKBgICAEDcCACAAQQA2AiQgACABKAIoIgI2AgwgASgCLCEBIABCADcCKCAAIAE2AhggACACNgIUIAAgATYCECAAQgA3AjAgAEIANwI4IABBQGtCADcCACAAQgA3AhwgAEEAOgAkC5QFAQZ/IwBB0ABrIgMkACADQQA6ADggA0IANwJEIANCADcDMCADQgA3AjwgAyABKAIUIgQoAjA2AiggAyAEKAI0IgQ2AiwgBARAIAQgBCgCBEEBajYCBAsgASgCJCEEIAMgAykCKDcDACADQTBqIAMgBBDSASADQQxqIAEgASgCACgCTBECAAJAIAMoAhQEQCAAQgA3AgAgACADKQIUNwIIIABBEGohACADLAAnQQBOBEAgACADKQIcNwIAIAAgAygCJDYCCAwCCyAAIAMoAhwgAygCIBAuDAELIAMoAgwhASADKAIQIgQEQCAEIAQoAgRBAWo2AgQLIAMoAkQhByADQQA2AkQgAygCNCEGIAMoAjAhBSADQgA3AzAgAygCPCEIIAMoAkAhCSADQgA3AjwgAygCSCEKIAMtADghCyABIAU2AgQgASgCCCEFIAEgBjYCCAJAIAVFDQAgBSAFKAIEIgZBAWs2AgQgBg0AIAUgBSgCACgCCBEAACAFECsLIAEgCzoADCABKAIQIgUEQCABIAU2AhQgASgCGBogBRAqCyABIAo2AhwgASAHNgIYIAEgCTYCFCABIAg2AhAgACABIAIgASgCACgCHBEDACAERQ0AIAQgBCgCBCIAQQFrNgIEIAANACAEIAQoAgAoAggRAAAgBBArCyADLAAnQQBIBEAgAygCJBogAygCHBAqCwJAIAMoAhAiAEUNACAAIAAoAgQiAUEBazYCBCABDQAgACAAKAIAKAIIEQAAIAAQKwsgAygCPCIABEAgAyAANgJAIAMoAkQaIAAQKgsCQCADKAI0IgBFDQAgACAAKAIEIgFBAWs2AgQgAQ0AIAAgACgCACgCCBEAACAAECsLIANB0ABqJAALtQUBBX8jAEFAaiICJAAgAkEgaiABIAEoAgAoAiAR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C1wBAX8jAEEgayIEJAAgBEEMaiABIAIQeyAELAAfQQBIBEAgBCgCHBogBCgCFBAqCwJAIAEtAGEEQCAAIAFBsfYAEJEBDAELIAAgASACQX8gAxCpAgsgBEEgaiQACx0BAX4gASAAKQMgIgJYBEAgACABNwMoCyABIAJYCykCAX8CfiMAQRBrIgEkACABIAAoAhgQywUgASkDCCEDIAFBEGokACADCwuPgAVgAEGACAuIqwIxN1N0cmVhbVJlYWRlcl9DQXBpADEyU3RyZWFtUmVhZGVyADIwU3RyZWFtUmVhZGVyX2lzdHJlYW0AMTlTdHJlYW1SZWFkZXJfbWVtb3J5AGhlaWZfc3ViZXJyb3JfVW5zdXBwb3J0ZWRfZXNzZW50aWFsX3Byb3BlcnR5AGhlaWZfc3ViZXJyb3JfSXBtYV9ib3hfcmVmZXJlbmNlc19ub25leGlzdGluZ19wcm9wZXJ0eQBoZWlmX3N1YmVycm9yX05vX2lzcGVfcHJvcGVydHkAaGVpZl9zdWJlcnJvcl9JbnZhbGlkX3Byb3BlcnR5AFVuc3VwcG9ydGVkIGVzc2VudGlhbCBpdGVtIHByb3BlcnR5ACdpcG1hJyBib3ggcmVmZXJlbmNlcyBhIG5vbi1leGlzdGluZyBwcm9wZXJ0eQBJbnZhbGlkIHByb3BlcnR5AEltYWdlIGhhcyBubyAnaXNwZScgcHJvcGVydHkAaGVpZl9jaGFubmVsX2Rpc3Bhcml0eQBpbmZpbml0eQBoZWlmX3N1YmVycm9yX0Nhbm5vdF9yZWFkX3BsdWdpbl9kaXJlY3RvcnkAaGVpZl9jb250ZXh0X3JlYWRfZnJvbV9tZW1vcnkARmVicnVhcnkASmFudWFyeQBKdWx5AFRtcCBkYXRhIGNvdWxkIG5vdCBiZSByZWFkIGNvbXBsZXRlbHkAaGVpZl9jaGFubmVsX2ZpbHRlcl9hcnJheQBUaHVyc2RheQBUdWVzZGF5AFdlZG5lc2RheQBTYXR1cmRheQBTdW5kYXkATW9uZGF5AEZyaWRheQBNYXkAaGV2eABoZWlmX3N1YmVycm9yX05vX2lkYXRfYm94AGhlaWZfc3ViZXJyb3JfTm9faGRscl9ib3gAaGVpZl9zdWJlcnJvcl9Ob19pY2JyX2JveABoZWlmX3N1YmVycm9yX05vX2Z0eXBfYm94AGhlaWZfc3ViZXJyb3JfTm9faXBycF9ib3gAaGVpZl9zdWJlcnJvcl9Ob19pcGNvX2JveABoZWlmX3N1YmVycm9yX05vX3BpdG1fYm94AGhlaWZfc3ViZXJyb3JfSW52YWxpZF9waXhpX2JveABoZWlmX3N1YmVycm9yX0ludmFsaWRfbWluaV9ib3gAaGVpZl9zdWJlcnJvcl9Ob19paW5mX2JveABoZWlmX3N1YmVycm9yX05vX2lyZWZfYm94AGhlaWZfc3ViZXJyb3JfTm9faW5mZV9ib3gAaGVpZl9zdWJlcnJvcl9Ob19pbG9jX2JveABoZWlmX3N1YmVycm9yX05vX21ldGFfYm94AGhlaWZfc3ViZXJyb3JfTm9faXBtYV9ib3gAaGVpZl9zdWJlcnJvcl9Ob192dmNDX2JveABoZWlmX3N1YmVycm9yX05vX2h2Y0NfYm94AGhlaWZfc3ViZXJyb3JfTm9fYXZjQ19ib3gAaGVpZl9zdWJlcnJvcl9Ob19hdjFDX2JveAB0aGlzIHByb3BlcnR5IGlzIG5vdCByZWFkIGFzIGEgcmF3IGJveABlcnJvciByZWFkaW5nIGZ0eXAgYm94AGlucHV0IGlzIG5vdCBhIGZ0eXAgYm94AEludmFsaWQgcGl4aSBib3gAQ2Fubm90IHJlYWQgZnVsbCBtZXRhIGJveAApIGhhcyBubyBwcm9wZXJ0aWVzIGFzc2lnbmVkIHRvIGl0IGluIGlwbWEgYm94ACByZWZlcmVuY2VkIGluIGlwbWEgYm94AGVycm9yIHdoaWxlIHJlYWRpbmcgaHZjQyBib3gATm8gJ2lkYXQnIGJveABObyAnaGRscicgYm94AE5vICdpY2JyJyBib3gATm8gJ2Z0eXAnIGJveABObyAnaXBycCcgYm94AE5vICdpcGNvJyBib3gATm8gJ3BpdG0nIGJveABVbnN1cHBvcnRlZCBvciBpbnZhbGlkICdtaW5pJyBib3gATm8gJ2lpbmYnIGJveABObyAnaXJlZicgYm94AE5vICdpbmZlJyBib3gATm8gJ2lsb2MnIGJveABObyAnbWV0YScgYm94AE5vICdpcG1hJyBib3gATm8gJ3Z2Y0MnIGJveABObyAnaHZjQycgYm94AE5vICdhdmNDJyBib3gATm8gJ2F2MUMnIGJveABJbnZhbGlkIHF1YXRlcm5pb24gaW4gZXh0cmluc2ljIHJvdGF0aW9uIG1hdHJpeABoZWl4AGNtZXgALSsgICAwWDB4AC0wWCswWCAwWC0weCsweCAweABfX25leHRfcHJpbWUgb3ZlcmZsb3cAaGVpZl9jaHJvbWFfZG93bnNhbXBsaW5nX3NoYXJwX3l1dgBOb3YAVGh1AGhlaWZfY29udGV4dABnZXRfdGhyZWFkX2NvbnRleHQAaGVpZl93cml0ZXIgY2FsbGJhY2sgcmV0dXJuZWQgYSBudWxsIGVycm9yIHRleHQAaGVpZl9lcnJvcl9JbnZhbGlkX2lucHV0AGludmFsaWQgZGlzcGFyaXR5X3JlZmVyZW5jZV92aWV3IGluIGlucHV0AGludmFsaWQgZGVwdGggcmVwcmVzZW50YXRpb24gdHlwZSBpbiBpbnB1dAB1bnN1cHBvcnRlZCBsb2NhbGUgZm9yIHN0YW5kYXJkIGlucHV0AEludmFsaWQgaW5wdXQAQXVndXN0AGhlaWZfZXJyb3JfSW5wdXRfZG9lc19ub3RfZXhpc3QAaGVpZl9lcnJvcl9Db2xvcl9wcm9maWxlX2RvZXNfbm90X2V4aXN0AFJlZ2lvbiBpdGVtIGRvZXMgbm90IGV4aXN0AEl0ZW0gZG9lcyBub3QgZXhpc3QAQ29sb3IgcHJvZmlsZSBkb2VzIG5vdCBleGlzdABJbnB1dCBmaWxlIGRvZXMgbm90IGV4aXN0AHJlYWRfc2NhbGluZ19saXN0AE1hc2sgaW1hZ2UgZGF0YSBpcyB0b28gc2hvcnQASEVWQyBTRUkgTkFMIHRvbyBzaG9ydAB1bnNpZ25lZCBzaG9ydAB1bnNpZ25lZCBpbnQAY29tcG9uZW50AGhlaWZfc3ViZXJyb3JfTnVsbF9wb2ludGVyX2FyZ3VtZW50AE5VTEwgYXJndW1lbnQAcmVmY250AGNvbnN0YW50AEhpZ2ggdmFyaWFudABoZWlmX2ZpbGV0eXBlX3Jlc3VsdAByZWFkX3RyYW5zZm9ybV91bml0AHJlYWRfY29kaW5nX3VuaXQAaW5pdABOdW1iZXIgb2YgdGlsZXMgZXhjZWVkcyBzZWN1cml0eSBsaW1pdABoZWlmX2Nocm9tYV9pbnRlcmxlYXZlZF8yNGJpdABoZWlmX2Nocm9tYV9pbnRlcmxlYXZlZF8zMmJpdABoZWlmX2ltYWdlX2hhbmRsZV9nZXRfaGVpZ2h0AHplcm8gd2lkdGggb3IgaGVpZ2h0AExheWVyZWQgSEVWQyBpbWFnZXMgKGxodjEpIGFyZSBub3Qgc3VwcG9ydGVkIHlldAAgaXMgbm90IGltcGxlbWVudGVkIHlldAByZWFkX3Nob3J0X3Rlcm1fcmVmX3BpY19zZXQAZ2V0AE9jdABmbG9hdABoZWlmX2NvbXByZXNzaW9uX2Zvcm1hdABoZWlmX3N1YmVycm9yX1dyb25nX3RpbGVfaW1hZ2VfY2hyb21hX2Zvcm1hdABObyBkZWNvZGVyIGZvciB0aGlzIGltYWdlIGZvcm1hdABXcm9uZyB0aWxlIGltYWdlIGNocm9tYSBmb3JtYXQAU2F0AHVpbnQ2NF90AGhldnMAYWxsb2NhdGVfdGhyZWFkX2NvbnRleHRzAG4gPCBuVGhyZWFkQ29udGV4dHMAY29uc3RydWN0X3JlZmVyZW5jZV9waWN0dXJlX2xpc3RzACBjb21wb25lbnRzAGhlaWZfc3ViZXJyb3JfVW5rbm93bl9OQ0xYX21hdHJpeF9jb2VmZmljaWVudHMAVW5rbm93biBOQ0xYIG1hdHJpeCBjb2VmZmljaWVudHMAdW5pdFkgPj0gMCAmJiB1bml0WSA8IGhlaWdodF9pbl91bml0cwB1bml0WCA+PSAwICYmIHVuaXRYIDwgd2lkdGhfaW5fdW5pdHMAU3VjY2VzcwBmaWxsX2x1bWFfbW90aW9uX3ZlY3Rvcl9wcmVkaWN0b3JzAGRlcml2ZV9jb2xsb2NhdGVkX21vdGlvbl92ZWN0b3JzAHNwcwBwcHMARm9ybWF0UmFuZ2VFeHRlbnNpb25zAGhlaWZfc3ViZXJyb3JfVG9vX21hbnlfcmVnaW9ucwBFcnJvciB3aGlsZSBzY2FubmluZyB0aGUgZGlyZWN0b3J5IGZvciBwbHVnaW5zAERlcml2ZWQgaW1hZ2UgZG9lcyBub3QgcmVmZXJlbmNlIGFueSBvdGhlciBpbWFnZSBpdGVtcwBjaGFubmVscwBpbml0aWFsaXplX0NBQkFDX21vZGVscwBhdmlzAGhlaXMAaW1hZ2UvajJpcwBHcmlkIHRpbGVzIGhhdmUgZGlmZmVyZW50IHNpemVzAHNldF9kZXJpdmVkX3ZhbHVlcwAgYnl0ZXMAZGVyaXZlX2NvbWJpbmVkX2JpcHJlZGljdGl2ZV9tZXJnaW5nX2NhbmRpZGF0ZXMAWUNiQ3IgaW1hZ2Ugd2l0aG91dCBZLENiLENyIHBsYW5lcwBSR0IgaW5wdXQgd2l0aG91dCBSLEcsQiwgcGxhbmVzAGdlbmVyYXRlX2ludGVyX3ByZWRpY3Rpb25fc2FtcGxlcwBkZWNvZGVfc2xpY2VfdW5pdF90aWxlcwAgbGF5ZXJzIGVudHJpZXMAaGVpZl9zdWJlcnJvcl9Vbmtub3duX05DTFhfY29sb3JfcHJpbWFyaWVzAFVua25vd24gTkNMWCBjb2xvciBwcmltYXJpZXMAdGhyZWFkX2ZpbmlzaGVzAGhlaWZfY29udGV4dF9nZXRfbnVtYmVyX29mX3RvcF9sZXZlbF9pbWFnZXMAaGVpZl9zdWJlcnJvcl9NaXNzaW5nX2dyaWRfaW1hZ2VzACdzdGVyJyBlbnRpdHkgZ3JvdXAgZG9lcyBub3QgZXhpc3RzIG9mIGV4YWN0bHkgdHdvIGltYWdlcwBNaXNzaW5nIGdyaWQgaW1hZ2VzAHVkZXMAJ2lyZWYnIGhhcyBkb3VibGUgcmVmZXJlbmNlcwBOdW1iZXIgb2YgaW1hZ2Ugb2Zmc2V0cyBkb2VzIG5vdCBtYXRjaCB0aGUgbnVtYmVyIG9mIGltYWdlIHJlZmVyZW5jZXMAaGVpZl9zdWJlcnJvcl9Vbmtub3duX05DTFhfdHJhbnNmZXJfY2hhcmFjdGVyaXN0aWNzAFVua25vd24gTkNMWCB0cmFuc2ZlciBjaGFyYWN0ZXJpc3RpY3MAaGVpZl9zdWJlcnJvcl9PdmVybGF5X2ltYWdlX291dHNpZGVfb2ZfY2FudmFzAHk8c3BzLT5QaWNIZWlnaHRJbk1pblBVcwB4PHNwcy0+UGljV2lkdGhJbk1pblBVcwBoZWlmX2pzX2NvbnRleHRfZ2V0X2xpc3Rfb2ZfdG9wX2xldmVsX2ltYWdlX0lEcwBiYWRfd2Vha19wdHIAQXByAHZlY3RvcgBmaWxsX3NjYWxpbmdfZmFjdG9yAGhlaWZfc3ViZXJyb3JfQ29tcHJlc3Npb25faW5pdGlhbGlzYXRpb25fZXJyb3IAaGVpZl9lcnJvcl9NZW1vcnlfYWxsb2NhdGlvbl9lcnJvcgBoZWlmX2Vycm9yX0VuY29kZXJfcGx1Z2luX2Vycm9yAGhlaWZfZXJyb3JfRGVjb2Rlcl9wbHVnaW5fZXJyb3IAaGVpZl9lcnJvcl9FbmNvZGluZ19lcnJvcgBoZWlmX3N1YmVycm9yX1BsdWdpbl9sb2FkaW5nX2Vycm9yAGhlaWZfZXJyb3JfUGx1Z2luX2xvYWRpbmdfZXJyb3IAaGVpZl9lcnJvcgBoZWlmX2Vycm9yX1VzYWdlX2Vycm9yAG1vbmV5X2dldCBlcnJvcgBVbmtub3duIGVycm9yAE1lbW9yeSBhbGxvY2F0aW9uIGVycm9yAEVuY29kZXIgcGx1Z2luIGdlbmVyYXRlZCBhbiBlcnJvcgBEZWNvZGVyIHBsdWdpbiBnZW5lcmF0ZWQgYW4gZXJyb3IASW50ZXJuYWwgZXJyb3IAVXNhZ2UgZXJyb3IAQ29tcHJlc3Npb24gaW5pdGlhbGlzYXRpb24gbWV0aG9kIGVycm9yAGhlaWZfY2hyb21hX3Vwc2FtcGxpbmdfbmVhcmVzdF9uZWlnaGJvcgBoZWlmX2Nocm9tYV9kb3duc2FtcGxpbmdfbmVhcmVzdF9uZWlnaGJvcgBoZGxyAHN1Yl9sYXllcgBtdWx0aS1sYXllcgBoZWlmX3N1YmVycm9yX1Vuc3VwcG9ydGVkX3BhcmFtZXRlcgBVbnN1cHBvcnRlZCBlbmNvZGVyIHBhcmFtZXRlcgBVbnN1cHBvcnRlZCBwYXJhbWV0ZXIAQ2FuY2VsZWQgYnkgdXNlcgBoZWlmX3N1YmVycm9yX05vX3BpY3RfaGFuZGxlcgBOb3QgYSAncGljdCcgaGFuZGxlcgBNaXNzaW5nIHJlcXVpcmVkIFNJWiBNYXJrZXIATWlzc2luZyByZXF1aXJlZCBTT0MgTWFya2VyAGRlMjY1X2ltYWdlX2dldF9idWZmZXIAb3V0cHV0X25leHRfcGljdHVyZV9pbl9yZW9yZGVyX2J1ZmZlcgBpbml0X0NBQkFDX2RlY29kZXIAbGliZGUyNjUgSEVWQyBkZWNvZGVyAGR1bXBfc2xpY2Vfc2VnbWVudF9oZWFkZXIASW52YWxpZCBKUEVHIFNPRiBoZWFkZXIAT2N0b2JlcgBoZWlmX2dldF92ZXJzaW9uX251bWJlcgBoZWlmX3N1YmVycm9yX0ludmFsaWRfZnJhY3Rpb25hbF9udW1iZXIASW52YWxpZCBmcmFjdGlvbmFsIG51bWJlcgBOb3ZlbWJlcgBTZXB0ZW1iZXIARGVjZW1iZXIAYnIAcGxhbmFyAGludHJhX3ByZWRpY3Rpb25fYW5ndWxhcgB1bnNpZ25lZCBjaGFyAGhlaWZfY2hyb21hX3Vwc2FtcGxpbmdfYmlsaW5lYXIAaW9zX2Jhc2U6OmNsZWFyAE1hcgBoZWlmX2NvbG9yc3BhY2VfWUNiQ3IAaGVpZl9jaGFubmVsX0NyAGhlaWZfc3ViZXJyb3JfRW5jb2Rlcl9jbGVhbnVwAFNlcAAlSTolTTolUyAlcABtb25vAGhlaWZfZmlsZXR5cGVfbm8AdW5rbm93bgBVbmtub3duAFN1bgBKdW4Ac3RkOjpleGNlcHRpb24ARXJyb3Igc2V0dGluZyBpbnB1dCBmaWxlIHBvc2l0aW9uAGRlcml2ZV9zcGF0aWFsX2x1bWFfdmVjdG9yX3ByZWRpY3Rpb24AaGVpZl9zdWJlcnJvcl9FbmNvZGVyX2luaXRpYWxpemF0aW9uAHVua25vd24gY29sb3IgY29uZmlndXJhdGlvbgBJbnZhbGlkIGRhdGEgaW4gZ2VuZXJpYyBjb21wcmVzc2lvbiBpbmZsYXRpb24ASW52YWxpZCBjbGVhbi1hcGVydHVyZSBzcGVjaWZpY2F0aW9uAGhlaWZfc3ViZXJyb3JfVW5zdXBwb3J0ZWRfY29sb3JfY29udmVyc2lvbgBVbnN1cHBvcnRlZCBjb2xvciBjb252ZXJzaW9uAGhlaWZfZ2V0X3ZlcnNpb24AaGVpZl9zdWJlcnJvcl9VbnN1cHBvcnRlZF93cml0ZXJfdmVyc2lvbgBoZWlmX3N1YmVycm9yX1Vuc3VwcG9ydGVkX3BsdWdpbl92ZXJzaW9uAGhlaWZfc3ViZXJyb3JfVW5zdXBwb3J0ZWRfZGF0YV92ZXJzaW9uAFVuc3VwcG9ydGVkIHBsdWdpbiB2ZXJzaW9uAFVuc3VwcG9ydGVkIGRhdGEgdmVyc2lvbgBJbnN1ZmZpY2llbnQgZGF0YSByZW1haW5pbmcgZm9yIHBvaW50IHJlZ2lvbgBVbnN1cHBvcnRlZCBiaXQgZGVwdGggZm9yIG1hc2sgcmVnaW9uAFVuc3VwcG9ydGVkIGNvbG91cnNwYWNlIGZvciBtYXNrIHJlZ2lvbgBJbnN1ZmZpY2llbnQgZGF0YSByZW1haW5pbmcgZm9yIGlubGluZSBtYXNrIHJlZ2lvbgBJbnN1ZmZpY2llbnQgZGF0YSByZW1haW5pbmcgZm9yIHJlZmVyZW5jZWQgbWFzayByZWdpb24ASW5zdWZmaWNpZW50IGRhdGEgcmVtYWluaW5nIGZvciBlbGxpcHNlIHJlZ2lvbgBJbnN1ZmZpY2llbnQgZGF0YSByZW1haW5pbmcgZm9yIHJlY3RhbmdsZSByZWdpb24ASW5zdWZmaWNpZW50IGRhdGEgcmVtYWluaW5nIGZvciBwb2x5Z29uAE1vbgBjbWluAEVycm9yIHdoaWxlIGxvYWRpbmcgcGx1Z2luAE1haW4AU3VwcG9ydCBmb3IgdGhpcyBjb21wcmVzc2lvbiBmb3JtYXQgaGFzIG5vdCBiZWVuIGJ1aWx0IGluAE5VTEwgYXJndW1lbnQgcGFzc2VkIGluAG5hbgBKYW4AaGV2bQBwaXRtAGNvcHlfbGluZXNfZnJvbQBoZWltAGhlaWZfY2hyb21hX3Vwc2FtcGxpbmdfYWxnb3JpdGhtAGhlaWZfY2hyb21hX2Rvd25zYW1wbGluZ19hbGdvcml0aG0AaGVpZl9zdWJlcnJvcl9Ob19vcl9pbnZhbGlkX3ByaW1hcnlfaXRlbQBoZWlmX3N1YmVycm9yX05vX3Byb3BlcnRpZXNfYXNzaWduZWRfdG9faXRlbQBObyBvciBpbnZhbGlkIHByaW1hcnkgaXRlbQBObyBwcm9wZXJ0aWVzIGFzc2lnbmVkIHRvIGl0ZW0AVW5zdXBwb3J0ZWQgYml0IGRlcHRoIGZvciBtYXNrIGl0ZW0AQ2xlYW51cCBwcm9ibGVtAEluaXRpYWxpemF0aW9uIHByb2JsZW0ARW5jb2RpbmcgcHJvYmxlbQBoZWlmX3N1YmVycm9yX0ludmFsaWRfSjJLX2NvZGVzdHJlYW0ASW52YWxpZCBKUEVHIDIwMDAgY29kZXN0cmVhbQBKdWwAdXJsAGRlMjY1X3NldF9wYXJhbWV0ZXJfYm9vbABhcHBsaWNhdGlvbi9yZGYreG1sAGxsAEFwcmlsAFRodW1ibmFpbCByZWZlcmVuY2VzIGFub3RoZXIgdGh1bWJuYWlsAGJpdHNfcGVyX3BpeGVsAENhbiBjdXJyZW50bHkgb25seSBjcm9wIGltYWdlcyB3aXRoIDggYml0cyBwZXIgcGl4ZWwAQ2FuIGN1cnJlbnRseSBvbmx5IGZpbGwgaW1hZ2VzIHdpdGggOCBiaXRzIHBlciBwaXhlbABoZWlmX2NoYW5uZWwASW5saW5lIG1hc2sgaW1hZ2UgbXVzdCBoYXZlIGEgWSBjaGFubmVsAGRlY29kZV9zbGljZV91bml0X3BhcmFsbGVsAGhlaWZfY29sb3JzcGFjZV9ub252aXN1YWwAZ2VuZXJhbABzY2FsZV9jb2VmZmljaWVudHNfaW50ZXJuYWwAaGVpZl9jb21wcmVzc2lvbl9tYXNrAHRyYW5zZm9ybV9za2lwXzhfZmFsbGJhY2sAcHV0X3dlaWdodGVkX3ByZWRfYXZnXzhfZmFsbGJhY2sAcHV0X3dlaWdodGVkX2JpcHJlZF84X2ZhbGxiYWNrAHB1dF91bndlaWdodGVkX3ByZWRfOF9mYWxsYmFjawBwdXRfd2VpZ2h0ZWRfcHJlZF84X2ZhbGxiYWNrAHRyYW5zZm9ybV9za2lwXzE2X2ZhbGxiYWNrAHB1dF93ZWlnaHRlZF9wcmVkX2F2Z18xNl9mYWxsYmFjawBwdXRfd2VpZ2h0ZWRfYmlwcmVkXzE2X2ZhbGxiYWNrAHB1dF91bndlaWdodGVkX3ByZWRfMTZfZmFsbGJhY2sAcHV0X3dlaWdodGVkX3ByZWRfMTZfZmFsbGJhY2sAaGVpZl9lcnJvcl9PawBpbWFnZS9oZWoyawBwaXhpAEZyaQBqMmtpAGhlaWZfc3ViZXJyb3JfVW5zdXBwb3J0ZWRfYml0X2RlcHRoAGhlaWZfc3ViZXJyb3JfV3JvbmdfdGlsZV9pbWFnZV9waXhlbF9kZXB0aABoZWlmX2NoYW5uZWxfZGVwdGgAdXJuOm1wZWc6bXBlZ0I6Y2ljcDpzeXN0ZW1zOmF1eGlsaWFyeTpkZXB0aABVbnN1cHBvcnRlZCBiaXQgZGVwdGgAV3JvbmcgdGlsZSBpbWFnZSBwaXhlbCBkZXB0aABkZXJpdmVfYm91bmRhcnlTdHJlbmd0aABiYWRfYXJyYXlfbmV3X2xlbmd0aABoZWlmX2ltYWdlX2hhbmRsZV9nZXRfd2lkdGgAcHVzaABNYXJjaAAuL2RlY2N0eC5oAC4uL2xpYmRlMjY1L2ltYWdlLmgALi9pbWFnZS5oAC4vaW50cmFwcmVkLmgAQXVnAGltYWdlL3BuZwB1bnNpZ25lZCBsb25nAHN0ZDo6d3N0cmluZwBiYXNpY19zdHJpbmcAc3RkOjpzdHJpbmcAc3RkOjp1MTZzdHJpbmcAc3RkOjp1MzJzdHJpbmcARmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIHR5cGUgc3RyaW5nAGludHJhX3ByZWRpY3Rpb25fc2FtcGxlX2ZpbHRlcmluZwBoZWlmX3N1YmVycm9yX0VuY29kZXJfZW5jb2RpbmcAaW1hZ2UvanBlZwBkZWNvZGVfc3BsaXRfdHJhbnNmb3JtX2ZsYWcAaW5mACdpZGVuJyBpbWFnZSByZWZlcnJpbmcgdG8gaXRzZWxmAGltYWdlL2F2aWYAaW1hZ2UvaGVpZgBvZmYAaXJlZgBkcmVmACUuMExmACVMZgBoZWlmX3N1YmVycm9yX0ludmFsaWRfYm94X3NpemUAaGVpZl9zdWJlcnJvcl9JbnZhbGlkX2ltYWdlX3NpemUAaWR4PGludHJhUHJlZE1vZGVDLmRhdGFfc2l6ZQBJbnZhbGlkIGJveCBzaXplAGF2MUMgd2l0aCB1bnNwZWNpZmllZCBib3ggc2l6ZQBqcGdDIGJsb2NrIGV4Y2VlZHMgbWF4aW11bSBzaXplAFJlYWQgYmV5b25kIGZpbGUgc2l6ZQBJbnZhbGlkIGltYWdlIHNpemUASW1hZ2Ugc2l6ZSBleGNlZWRzIG1heGltdW0gc3VwcG9ydGVkIHNpemUAQ29sb3IgcHJvZmlsZSBleGNlZWRzIG1heGltdW0gc3VwcG9ydGVkIHNpemUAQ2Fubm90IHJlYWQgbWV0YSBib3ggd2l0aCB1bnNwZWNpZmllZCBzaXplAGRhdGEgbGVuZ3RoIG11c3QgYmUgcG9zaXRpdmUAaW50ZXJsZWF2ZQB0cnVlAGhlaWZfc3ViZXJyb3JfSW52YWxpZF9wYXJhbWV0ZXJfdmFsdWUAT3V0IG9mIHJhbmdlIExzaXogdmFsdWUAT3V0IG9mIHJhbmdlIENzaXogdmFsdWUASW52YWxpZCBwYXJhbWV0ZXIgdmFsdWUAT3V0IG9mIHJhbmdlIExjYXAgdmFsdWUASW52YWxpZCBpbnB1dCByZWFkZXIgcmV0dXJuIHZhbHVlAHNldF9pbml0VmFsdWUAVHVlAFRpbGkgaGVhZGVyIGRhdGEgaW5jb21wbGV0ZQBSZWdpb24gZGF0YSBpbmNvbXBsZXRlAE92ZXJsYXkgaW1hZ2UgZGF0YSBpbmNvbXBsZXRlAEdyaWQgaW1hZ2UgZGF0YSBpbmNvbXBsZXRlAGRlZmxhdGUAZmFsc2UAaGVpZl9pbWFnZV9oYW5kbGVfcmVsZWFzZQBoZWlmX2ltYWdlX3JlbGVhc2UAaGVpZl9zdWJlcnJvcl9JbnZhbGlkX2NsZWFuX2FwZXJ0dXJlAGdlbmVyYXRlX3VuYXZhaWxhYmxlX3JlZmVyZW5jZV9waWN0dXJlAE1haW5TdGlsbFBpY3R1cmUAaGVpZl9lcnJvcl9VbnN1cHBvcnRlZF9mZWF0dXJlAFVuc3VwcG9ydGVkIGZlYXR1cmUAaGVpZl9qc19jaGVja19maWxldHlwZQBoZWlmX2Vycm9yX1Vuc3VwcG9ydGVkX2ZpbGV0eXBlAGhlaWZfc3ViZXJyb3JfVW5rbm93bl9jb2xvcl9wcm9maWxlX3R5cGUAaGVpZl9zdWJlcnJvcl9VbnN1cHBvcnRlZF9pbWFnZV90eXBlAFVuc3VwcG9ydGVkIGZpbGUtdHlwZQB3cm9uZyBwcm9wZXJ0eSB0eXBlAFVua25vd24gY29sb3IgcHJvZmlsZSB0eXBlAFVuc3VwcG9ydGVkIGltYWdlIHR5cGUAaXNwZQBKdW5lAENvbnN0cmFpbmVkIEJhc2VsaW5lAGRlMjY1X2dldF9pbWFnZV9wbGFuZQBzY2FsaW5nIGlucHV0IGhhcyBleHRyYSBjb2xvciBwbGFuZQBtb25vY2hyb21lIGlucHV0IHdpdGggbm8gWSBwbGFuZQBoZWlmX2NvbG9yc3BhY2VfbW9ub2Nocm9tZQBoZWlmX2Nocm9tYV9tb25vY2hyb21lAGRlY291cGxlACd0aWxpJyBpbWFnZXMgY2FuIG9ubHkgYmUgYWNjZXNzIHBlciB0aWxlAEVycm9yIGR1cmluZyBlbmNvZGluZyBvciB3cml0aW5nIG91dHB1dCBmaWxlAEVycm9yIHJlYWRpbmcgaW5wdXQgZmlsZQBpZGF0IGJveCByZWZlcmVuY2VkIGluIGlyZWYgYm94IGlzIG5vdCBwcmVzZW50IGluIGZpbGUAIHRpbGUgaW1hZ2VzIGluIGZpbGUAVW5leHBlY3RlZCBlbmQgb2YgZmlsZQBmdHlwIGJveCBzaGFsbCBub3QgYmUgdGhlIG9ubHkgYm94IGluIHRoZSBmaWxlAGhlaWZfanNfY29udGV4dF9nZXRfcHJpbWFyeV9pbWFnZV9oYW5kbGUAaGVpZl9qc19jb250ZXh0X2dldF9pbWFnZV9oYW5kbGUAaGVpZl9pbWFnZV9oYW5kbGUAaGVpZl9zdWJlcnJvcl9JdGVtX3JlZmVyZW5jZV9jeWNsZQBJbWFnZSByZWZlcmVuY2UgY3ljbGUAZG91YmxlAHJlYWRfcHJlZF93ZWlnaHRfdGFibGUAYWxsb2NfYW5kX2luaXRfc2lnbmlmaWNhbnRfY29lZmZfY3R4SWR4X2xvb2t1cFRhYmxlAEJveCBzaXplIHRvbyBsYXJnZQBwcm9wZXJ0eSBpbmRleCBvdXQgb2YgcmFuZ2UAR3JpZCB0aWxlIGluZGV4IG91dCBvZiByYW5nZQBpbnB1dCBkZXB0aCByZXByZXNlbnRhdGlvbiB0eXBlIG91dCBvZiByYW5nZQBpbG9jIGRhdGEgcG9pbnRlcnMgb3V0IG9mIGFsbG93ZWQgcmFuZ2UAZnR5cCBib3ggbGFyZ2VyIHRoYW4gaW5pdGlhbCByZWFkIHJhbmdlAG1lc3NhZ2UAaGVpZl9jaHJvbWFfZG93bnNhbXBsaW5nX2F2ZXJhZ2UAaGVpZl9pbWFnZV9oYW5kbGVfaXNfcHJpbWFyeV9pbWFnZQBuZXdfaW1hZ2UAZmlsbF9mcm9tX2ltYWdlAGhlaWZfaW1hZ2UAYWxsb2NfaW1hZ2UATm8gaXJlZiBib3ggYXZhaWxhYmxlLCBidXQgbmVlZGVkIGZvciBpZGVuIGltYWdlAFJlZ2lvbiBtYXNrIHJlZmVyZW5jZWQgaXRlbSBpcyBub3QgYW4gaW1hZ2UATm8gaXJlZiBib3ggYXZhaWxhYmxlLCBidXQgbmVlZGVkIGZvciBpb3ZsIGltYWdlACdwaXRtJyBib3ggcmVmZXJlbmNlcyBhbiB1bnN1cHBvcnRlZCBvciBub24tZXhpc3RpbmcgaW1hZ2UAUmVnaW9uIGl0ZW0gYXNzaWduZWQgdG8gbm9uLWV4aXN0aW5nIGltYWdlAGBwcmVtYCBsaW5rIGFzc2lnbmVkIHRvIG5vbi1leGlzdGluZyBpbWFnZQBNZXRhZGF0YSBhc3NpZ25lZCB0byBub24tZXhpc3RpbmcgaW1hZ2UAVGh1bWJuYWlsIHJlZmVyZW5jZXMgYSBub24tZXhpc3RpbmcgaW1hZ2UATm8gdnZjQyBwcm9wZXJ0eSBpbiB2dmMxIHR5cGUgaW1hZ2UATm8gaHZjQyBwcm9wZXJ0eSBpbiBodmMxIHR5cGUgaW1hZ2UAR3JpZCB0aWxlcyBkbyBub3QgY292ZXIgd2hvbGUgaW1hZ2UAJ2lkZW4nIGltYWdlIHJlZmVyZW5jZXMgdW5hdmFpbGFibGUgaW1hZ2UAJ2lkZW4nIGltYWdlIHdpdGggbW9yZSB0aGFuIG9uZSByZWZlcmVuY2UgaW1hZ2UATm8gaXJlZiBib3ggYXZhaWxhYmxlLCBidXQgbmVlZGVkIGZvciBncmlkIGltYWdlAEltYWdlIGlzIG5vIGdyaWQgaW1hZ2UASW1hZ2UgdGlsZSBoYXMgZGlmZmVyZW50IGNocm9tYSBmb3JtYXQgdGhhbiBjb21iaW5lZCBpbWFnZQBDYW5ub3QgYWRkIHRpbGUgdG8gYSBub24tdGlsZWQgaW1hZ2UAaW5mZQByZWFkX3RyYW5zZm9ybV90cmVlAGhlaWZfY29udGV4dF9mcmVlAGRlY29kZV9wYXJ0X21vZGUAZGVjb2RlAHN1YmNvZGUAaGVpZl9zdWJlcnJvcl9jb2RlAGhlaWZfZXJyb3JfY29kZQBQcmVkTW9kZSA9PSBjdVByZWRNb2RlAHN0cmlkZQBpbWFnZS9hdmlmLXNlcXVlbmNlAGltYWdlL2hlaWYtc2VxdWVuY2UAaW1hZ2UvaGVpYy1zZXF1ZW5jZQBSZWdpb24gbWFzayByZWZlcmVuY2Ugd2l0aCBub24tZXhpc3RpbmcgbWFzayBpbWFnZSByZWZlcmVuY2UAaGVpZl9jb2xvcnNwYWNlAGhlaWZfZmlsZXR5cGVfbWF5YmUAaGVpZl9zdWJlcnJvcl9VbnN1cHBvcnRlZF9pdGVtX2NvbnN0cnVjdGlvbl9tZXRob2QAaGVpZl9zdWJlcnJvcl9VbnN1cHBvcnRlZF9oZWFkZXJfY29tcHJlc3Npb25fbWV0aG9kAGhlaWZfc3ViZXJyb3JfVW5zdXBwb3J0ZWRfZ2VuZXJpY19jb21wcmVzc2lvbl9tZXRob2QAVW5zdXBwb3J0ZWQgaXRlbSBjb25zdHJ1Y3Rpb24gbWV0aG9kAFVuc3VwcG9ydGVkIGhlYWRlciBjb21wcmVzc2lvbiBtZXRob2QAVW5zdXBwb3J0ZWQgZ2VuZXJpYyBjb21wcmVzc2lvbiBtZXRob2QATm8gbWV0YSBib3ggZm91bmQAdm9pZABOVUxMIGFyZ3VtZW50IHJlY2VpdmVkAGhlaWZfY2hhbm5lbF9pbnRlcmxlYXZlZABoZWlmX2ZpbGV0eXBlX3llc191bnN1cHBvcnRlZABoZWlmX2ZpbGV0eXBlX3llc19zdXBwb3J0ZWQAVGhlIHZlcnNpb24gb2YgdGhlIHBhc3NlZCB3cml0ZXIgaXMgbm90IHN1cHBvcnRlZABUaGUgdmVyc2lvbiBvZiB0aGUgcGFzc2VkIHBsdWdpbiBpcyBub3Qgc3VwcG9ydGVkAHBjbHIgbW9yZSB0aGFuIDE2IGJpdHMgcGVyIGNoYW5uZWwgaXMgbm90IHN1cHBvcnRlZABwY2xyIHdpdGggc2lnbmVkIGRhdGEgaXMgbm90IHN1cHBvcnRlZABQbHVnaW5zIGFyZSBub3Qgc3VwcG9ydGVkAENoYW5uZWxzIHdpdGggZGlmZmVyZW50IG51bWJlciBvZiBiaXRzIHBlciBwaXhlbCBhcmUgbm90IHN1cHBvcnRlZABjb2xyIGJveGVzIHdpdGggdW5kZWZpbmVkIGJveCBzaXplIGFyZSBub3Qgc3VwcG9ydGVkAGpwZ0Mgd2l0aCB1bnNwZWNpZmllZCBzaXplIGFyZSBub3Qgc3VwcG9ydGVkAGxvY2FsZSBub3Qgc3VwcG9ydGVkAERlZmxhdGUgY29tcHJlc3NlZCBpbmxpbmUgbWFzayBpcyBub3QgeWV0IHN1cHBvcnRlZABzY2FsaW5nIGxpc3QgbG9nZ2luZyBvdXRwdXQgbm90IGltcGxlbWVudGVkAFJlY3Vyc2l2ZSBhdXggaW1hZ2UgZGV0ZWN0ZWQAUmVjdXJzaXZlIHRodW1ibmFpbCBpbWFnZSBkZXRlY3RlZABSZWN1cnNpdmUgZGVwdGggaW1hZ2UgZGV0ZWN0ZWQAUmVjdXJzaXZlIGFscGhhIGltYWdlIGRldGVjdGVkAGhlaWZfY29tcHJlc3Npb25fdW5jb21wcmVzc2VkAE5VTEwgcGFzc2VkAGhlaWZfc3ViZXJyb3JfQ2FtZXJhX2V4dHJpbnNpY19tYXRyaXhfdW5kZWZpbmVkAGhlaWZfc3ViZXJyb3JfQ2FtZXJhX2ludHJpbnNpY19tYXRyaXhfdW5kZWZpbmVkAGhlaWZfY29tcHJlc3Npb25fdW5kZWZpbmVkAGhlaWZfY29sb3JzcGFjZV91bmRlZmluZWQAaGVpZl9jaHJvbWFfdW5kZWZpbmVkAENhbWVyYSBleHRyaW5zaWMgbWF0cml4IHVuZGVmaW5lZABDYW1lcmEgaW50cmluc2ljIG1hdHJpeCB1bmRlZmluZWQAaGVpZl9zdWJlcnJvcl9Ob19tYXRjaGluZ19kZWNvZGVyX2luc3RhbGxlZABtdXRleCBsb2NrIGZhaWxlZABEZWNvZGluZyB0aGUgaW1hZ2Ugd2FzIGNhbmNlbGVkAGhlaWZfZXJyb3JfQ2FuY2VsZWQAaGVpZl9zdWJlcnJvcl9BdXhpbGlhcnlfaW1hZ2VfdHlwZV91bnNwZWNpZmllZABUeXBlIG9mIGF1eGlsaWFyeSBpbWFnZSB1bnNwZWNpZmllZABoZWlmX3N1YmVycm9yX1Vuc3BlY2lmaWVkAGhlaWZfc3ViZXJyb3JfU2VjdXJpdHlfbGltaXRfZXhjZWVkZWQAU2VjdXJpdHkgbGltaXQgZXhjZWVkZWQAU2VjdXJpdHkgbGltaXQgZm9yIG1heGltdW0gbmVzdGluZyBvZiBib3hlcyBoYXMgYmVlbiBleGNlZWRlZABoZWlmX3N1YmVycm9yX1BsdWdpbl9pc19ub3RfbG9hZGVkAFRyeWluZyB0byByZW1vdmUgYSBwbHVnaW4gdGhhdCBpcyBub3QgbG9hZGVkAFBsdWdpbiBmaWxlIGNhbm5vdCBiZSBsb2FkZWQAaGVpZl9zdWJlcnJvcl9Ob25leGlzdGluZ19pdGVtX3JlZmVyZW5jZWQAaGVpZl9zdWJlcnJvcl9Ob25leGlzdGluZ19pbWFnZV9jaGFubmVsX3JlZmVyZW5jZWQATm9uLWV4aXN0aW5nIGltYWdlIGNoYW5uZWwgcmVmZXJlbmNlZABOb24tZXhpc3RpbmcgYXV4IGltYWdlIHJlZmVyZW5jZWQATm9uLWV4aXN0aW5nIGRlcHRoIGltYWdlIHJlZmVyZW5jZWQATm9uZXhpc3RlbnQgZ3JpZCBpbWFnZSByZWZlcmVuY2VkAE5vbi1leGlzdGluZyBhbHBoYSBpbWFnZSByZWZlcmVuY2VkAE5vbi1leGlzdGluZyBpdGVtIElEIHJlZmVyZW5jZWQAV2VkAHNwcy0+c3BzX3JlYWQAcHBzLT5wcHNfcmVhZABzbGljZS1zZWdtZW50LSVkOyVkAGN0Yi1yb3ctJWQAc2FvLSVkAGRlYmxvY2stJWQAKiVkAGhldmMAaGVpZl9jb250ZXh0X2FsbG9jAHN0ZDo6YmFkX2FsbG9jAGlsb2MAY3R4SWR4TG9va3VwW2xvZzJ3LTJdW2NJZHhdW3NjYW5JZHhdW3ByZXZDc2JmXVt4QysoeUM8PGxvZzJ3KV0gPT0gY3R4SWR4SW5jAGdldF91dmxjAHZ2aWMAaW1hZ2UvaGVpYwBoZWlmX3N1YmVycm9yX1Vuc3VwcG9ydGVkX2NvZGVjAE1pc3NpbmcgcmVxdWlyZWQgYm94IGZvciBtYXNrIGNvZGVjAFVuc3VwcG9ydGVkIGNvZGVjAERlYwBkZWNjdHguY2MAZmFsbGJhY2stZGN0LmNjAHZwcy5jYwBzcHMuY2MAcHBzLmNjAG5hbC1wYXJzZXIuY2MAZmFsbGJhY2stbW90aW9uLmNjAHRyYW5zZm9ybS5jYwBiaXRzdHJlYW0uY2MAY29udGV4dG1vZGVsLmNjAGRlYmxvY2suY2MAaW1hZ2UuY2MAc2xpY2UuY2MAcmVmcGljLmNjAGNhYmFjLmNjAGRwYi5jYwBkZTI2NS5jYwB3YgByYgBjb21wcmVzc196bGliAEZlYgBhYgBoZWlmX2NoYW5uZWxfQ2IAdytiAHIrYgBhK2IAcndhAG1ldGEAZGVjb3VwbGVfb3JfYWxsb2Nfd2l0aF9lbXB0eV9kYXRhAGhlaWZfc3ViZXJyb3JfSW52YWxpZF9vdmVybGF5X2RhdGEAaGVpZl9zdWJlcnJvcl9DYW5ub3Rfd3JpdGVfb3V0cHV0X2RhdGEAaGVpZl9zdWJlcnJvcl9JbnZhbGlkX3JlZ2lvbl9kYXRhAGhlaWZfc3ViZXJyb3JfTm9faXRlbV9kYXRhAGhlaWZfc3ViZXJyb3JfRW5kX29mX2RhdGEAaGVpZl9zdWJlcnJvcl9JbnZhbGlkX2dyaWRfZGF0YQBoZWlmX3N1YmVycm9yX0RlY29tcHJlc3Npb25faW52YWxpZF9kYXRhAEludmFsaWQgb3ZlcmxheSBkYXRhAENhbm5vdCB3cml0ZSBvdXRwdXQgZGF0YQBpbnN1ZmZpY2llbnQgaW5wdXQgZGF0YQBJbnN1ZmZpY2llbnQgaW5wdXQgZGF0YQBJdGVtIGhhcyBubyBkYXRhAEludmFsaWQgcmVnaW9uIGl0ZW0gZGF0YQBMZXNzIHRoYW4gOCBieXRlcyBvZiBkYXRhAEludmFsaWQgZ3JpZCBkYXRhACBoYXMgbm8gY29tcHJlc3NlZCBkYXRhAGlwbWEAaGVpZl9jaHJvbWEAbWNfY2hyb21hAHVybjptcGVnOm1wZWdCOmNpY3A6c3lzdGVtczphdXhpbGlhcnk6YWxwaGEAaGVpZl9jaGFubmVsX0FscGhhAE92ZXJsYXkgaW1hZ2Ugb3V0c2lkZSBvZiBjYW52YXMgYXJlYQBJbnN1ZmZpY2llbnQgZGF0YSByZW1haW5pbmcgZm9yIGlubGluZSBtYXNrIHJlZ2lvbiBkYXRhW10AICBxID0gWwBsYXllci1zaXplczogWwBoZWlmX2NoYW5uZWxfWQAlYSAlYiAlZCAlSDolTTolUyAlWQBQT1NJWABMSUJIRUlGX1NFQ1VSSVRZX0xJTUlUUwBmaXJzdExheWVyUmVhZCA8IE1BWF9URU1QT1JBTF9TVUJMQVlFUlMAVlBTAFNQUwBQUFMAU1VGRklYX0FQUwBQUkVGSVhfQVBTAGo+PTAgJiYgaiA8IE1BWF9OVU1fUkVGX1BJQ1MAaGVpZl9jaGFubmVsX1IAZGVjb2RlX3NsaWNlX3VuaXRfV1BQAE5BTgBQTQBTRUNBTQB0aHJlYWRfY29udGV4dHM9PU5VTEwAY2Fubm90IHJldHVybiBkYXRhIHdpdGggb3V0X2RhdGFfc2l6ZT09TlVMTABwZW5kaW5nX2lucHV0X05BTCA9PSBOVUxMAExDX0FMTABQQUwAcHVzaF9OQUwAaGVpZl9jb21wcmVzc2lvbl9IVEoySwBPUEkARENJAFBIAGhlaWZfY2hhbm5lbF9HAExBTkcAaGVpZl9jb21wcmVzc2lvbl9KUEVHAElORgBPRkYAblQgPD0gTUFYX0lOVFJBX1BSRURfQkxPQ0tfU0laRQBoZWlmX2Nocm9tYV9pbnRlcmxlYXZlZF9SUkdHQkJfTEUAaGVpZl9jaHJvbWFfaW50ZXJsZWF2ZWRfUlJHR0JCQUFfTEUAaGVpZl9jaHJvbWFfaW50ZXJsZWF2ZWRfUlJHR0JCX0JFAGhlaWZfY2hyb21hX2ludGVybGVhdmVkX1JSR0dCQkFBX0JFAGF1eEMAc3BzLT5TdWJIZWlnaHRDID09IFN1YkhlaWdodEMAc3BzLT5TdWJXaWR0aEMgPT0gU3ViV2lkdGhDAHNldF9JbnRyYVByZWRNb2RlQwBoZWlmX2NvbXByZXNzaW9uX1ZWQwBoZWlmX2NvbXByZXNzaW9uX0VWQwBoZWlmX2NvbXByZXNzaW9uX0hFVkMAaGVpZl9jb21wcmVzc2lvbl9BVkMATlRTQwBNQUMAaGVpZl9jaGFubmVsX0IAc2hkci0+c2xpY2VfdHlwZSA9PSBTTElDRV9UWVBFX0IAaGVpZl9jb2xvcnNwYWNlX1JHQgBoZWlmX2Nocm9tYV9pbnRlcmxlYXZlZF9SR0IAaGVpZl9jaHJvbWFfaW50ZXJsZWF2ZWRfUkdCQQA/AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNob3J0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBpbnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGZsb2F0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50OF90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50NjRfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50NjRfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dWludDMyX3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDMyX3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGNoYXI+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIGNoYXI+AHN0ZDo6YmFzaWNfc3RyaW5nPHVuc2lnbmVkIGNoYXI+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxsb25nPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBsb25nPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxkb3VibGU+ADtpbmRleD0ATm9uZXhpc3RpbmcgcHJvcGVydHkgKGluZGV4PQBJdGVtIChJRD0AVGlsZSBpbWFnZSBJRD0AOwBjb25maWcgT0JVczoAZ2VuZXJhbCBsZXZlbDoAMDEyMzQ1Njc4OQAxLjE5LjgAQy5VVEYtOAByZWY8NwBoZHItPm51bV9yZWZfaWR4X2wxX2FjdGl2ZSA8PSAxNgBoZHItPm51bV9yZWZfaWR4X2wwX2FjdGl2ZSA8PSAxNgBpbWctPkJpdERlcHRoX1kgPj0gOCAmJiBpbWctPkJpdERlcHRoX1kgPD0gMTYAaW1nLT5CaXREZXB0aF9DID49IDggJiYgaW1nLT5CaXREZXB0aF9DIDw9IDE2AGxpYmRlMjY1AGludHJhUHJlZE1vZGU8MzUATnVtYmVyIG9mIHRpbGUgcm93cy9jb2x1bW5zIG1heSBub3QgZXhjZWVkIDY1NTM1ADEuMC4xNQBIaWdoIDQ6NDo0AENBTFZDIDQ6NDo0AGhlaWZfY2hyb21hXzQ0NABzY2FsaW5nX2xpc3RfcHJlZF9tYXRyaXhfaWRfZGVsdGE9PTMAaGVpZl9qc19kZWNvZGVfaW1hZ2UyAGludHJhUHJlZE1vZGU+PTIAbnVtTVZQQ2FuZExYPT0yAHVybjptcGVnOmhldmM6MjAxNTphdXhpZDoyAEhpZ2ggNDoyOjIAbW9kZWxbaV0uc3RhdGUgPD0gNjIAblQ8PTMyAGhlaWZfY2hyb21hXzQyMgBjb250ZXh0ID49IDAgJiYgY29udGV4dCA8PSAyAGNoYW5uZWw+PTAgJiYgY2hhbm5lbCA8PSAyAGluaXRUeXBlID49IDAgJiYgaW5pdFR5cGUgPD0gMgBtc2YxAG1pZjEAaGVpZl9jb21wcmVzc2lvbl9BVjEAcmVmUGljUTA9PXJlZlBpY1ExACpyZWZjbnQ+MQBsb2cyV0Q+PTEAdXJuOm1wZWc6aGV2YzoyMDE1OmF1eGlkOjEAdXJuOm1wZWc6YXZjOjIwMTU6YXV4aWQ6MQBjYmZfY3IgIT0gLTEAY2JmX2NiICE9IC0xAGNiZl9sdW1hICE9IC0xAHZhbHVlPjAAUklkeD49MAByZWZQaWNMaXN0Pj0wAHRpbGVYPj0wICYmIHRpbGVZPj0wAHJkcGNtTW9kZT09MAAod2lkdGgmMSk9PTAANDoyOjAAaGVpZl9jaHJvbWFfNDIwAE1haW4xMABIaWdoIDEwAGhlaWZfY29tcHJlc3Npb25fSlBFRzIwMDAAbGVuZ3RoID49IDAAblRocmVhZHNSdW5uaW5nID49IDAAZmlyc3QgJSAyID09IDAAZW5kICUgMiA9PSAwAGltZy0+bnVtX3RocmVhZHNfYWN0aXZlKCkgPT0gMAAvAFRpbGVkIGltYWdlIHdpdGhvdXQgJ2lzcGUnIHByb3BlcnR5IGJveC4AVGlsZWQgaW1hZ2Ugd2l0aG91dCAndGlsQycgcHJvcGVydHkgYm94LgBDYW5ub3Qgd3JpdGUgZHVtbXkgZXJyb3IgYm94LgBUb28gbWFueSBlbnRpdGllcyBpbiBkcmVmIGJveC4AQ2Fubm90IHdyaXRlIG1vcmUgdGhhbiAyNTUgU1BTLUV4dCBpbnRvIGF2Y0MgYm94LgBDYW5ub3Qgd3JpdGUgU1BTLUV4dCBsYXJnZXIgdGhhbiA2NTUzNSBieXRlcyBpbnRvIGF2Y0MgYm94LgBDYW5ub3Qgd3JpdGUgU1BTIGxhcmdlciB0aGFuIDY1NTM1IGJ5dGVzIGludG8gYXZjQyBib3guAENhbm5vdCB3cml0ZSBQUFMgbGFyZ2VyIHRoYW4gNjU1MzUgYnl0ZXMgaW50byBhdmNDIGJveC4AQ2Fubm90IHdyaXRlIG1vcmUgdGhhbiAyNTUgUFBTIGludG8gYXZjQyBib3guAENhbm5vdCB3cml0ZSBtb3JlIHRoYW4gMzEgUFBTIGludG8gYXZjQyBib3guAEZpbGUgZG9lcyBub3Qgc3RhcnQgd2l0aCAnZnR5cCcgYm94LgBOb3QgZW5vdWdoIGRhdGEgcHJlc2VudCBpbiAnaWxvYycgdG8gc2F0aXNmeSByZXF1ZXN0LgBOdW1iZXIgb2YgdGlsZXMgZXhjZWVkcyBzZWN1cml0eSBsaW1pdC4AT3ZlcmxheSBpbWFnZSB3aXRoIHplcm8gd2lkdGggb3IgaGVpZ2h0LgAndGlsaScgaW1hZ2Ugd2l0aCB6ZXJvIHdpZHRoIG9yIGhlaWdodC4AJ3RpbGknIGltYWdlIHdpdGggdW5zdXBwb3J0ZWQgY29tcHJlc3Npb24gZm9ybWF0LgBUb28gbWFueSBWVkMgTkFMIGFycmF5cy4AIGV4dGVudHMuAFRvbyBtYW55IFZWQyBOQUwgdW5pdHMuAENhbm5vdCBkZWNvZGUgd2l0aCBhIGR1bW15IGRlY29kZXIgcGx1Z2lucy4AIGl0ZW1zLgAgZW50aXRpZXMuAElucHV0IGZpbGUgaGFzIGFuICdpcmVmJyBib3ggd2l0aCBubyByZWZlcmVuY2VzLgBoZWlmX2ltYWdlX2NyZWF0ZTogTlVMTCBwYXNzZWQgYXMgaW1hZ2UgcG9pbnRlci4ASW52YWxpZCBjb2xvcnNwYWNlL2Nocm9tYSBjb21iaW5hdGlvbi4AJ2lvdmwnIGltYWdlIHJlZmVyZW5jZXMgYSBub24tZXhpc3RpbmcgaXRlbS4AU2VsZi1yZWZlcmVuY2UgaW4gJ2lvdmwnIGltYWdlIGl0ZW0uAFRvbyBtYW55IHJlZ2lvbnMgKD4yNTUpIGluIGFuICdyZ2FuJyBpdGVtLgBGaWxlIHNpemUgdG9vIHNtYWxsLgBUaWxlIGltYWdlIHNpemUgZG9lcyBub3QgbWF0Y2ggdGhlIHNwZWNpZmllZCB0aWxlIHNpemUuAFZWQyBOQUwgdG9vIGxhcmdlLgBWQ0MgYml0IGRlcHRoIG91dCBvZiByYW5nZS4ARXhjZWVkZWQgc3VwcG9ydGVkIHZhbHVlIHJhbmdlLgAgaXMgbm90IGEgcHJvcGVyIGltYWdlLgBUaHVtYm5haWwgaW1hZ2VzIG11c3QgYmUgc21hbGxlciB0aGFuIHRoZSBvcmlnaW5hbCBpbWFnZS4ATm8gajJrSCBib3ggZm91bmQuAE5vIHN1cHBvcnRlZCBicmFuZHMgZm91bmQuAHZ2Y0Mgd2l0aCBudW1fYnl0ZXNfY29uc3RyYWludF9pbmZvPT0wIGlzIG5vdCBhbGxvd2VkLgAnIGlzIG5vdCBzdXBwb3J0ZWQuACcgYm94IGV4Y2VlZGVkLgBDb3VsZCBub3QgZmluZCBsb2NhdGlvbiBvZiBUSUZGIGhlYWRlciBpbiBFeGlmIG1ldGFkYXRhLgBjYWxsZWQgaGVpZl9jb250ZXh0X2FkZF9pdGVtKCkgd2l0aCBpbnZhbGlkICdpdGVtX3R5cGUnLgBjYWxsZWQgaGVpZl9jb250ZXh0X2FkZF9nZW5lcmljX21ldGFkYXRhKCkgd2l0aCBpbnZhbGlkICdpdGVtX3R5cGUnLgAqLAB3KwByKwBhKwBJbnZhbGlkIGNvbG9yX3Byb2ZpbGVfdHlwZSAobXVzdCBiZSA0IGNoYXJhY3RlcnMpAChmcm9tIHBwcykAZnR5cCBib3ggdG9vIHNtYWxsIChsZXNzIHRoYW4gOCBieXRlcykATWlzc2luZyByZXF1aXJlZCBoZWFkZXIgbWFya2VyKHMpACh1bmtub3duKQAobnVsbCkAZHBiLmhhc19mcmVlX2RwYl9waWN0dXJlKHRydWUpAChvdmVycmlkZSkAY3R4LT5oYXNfaW1hZ2UoY29sUGljKQAoZnJvbSBQUFMpAENvdWxkIG5vdCB3cml0ZSB0byB0bXAgZmlsZSAoc3RvcmFnZSBmdWxsPykAU1BTIG1heCBwaWN0dXJlIHdpZHRoIG9yIGhlaWdodCBleGNlZWRzIG1heGltdW0gKDY1NTM1KQBUb28gbWFueSB0aWxlcyAobWF4aW11bTogNjU1MzUpAFRvbyBtYW55IG92ZXJsYXkgaW1hZ2VzIChtYXhpbXVtOiA2NTUzNSkAISh0cmFmb0RlcHRoPT0wICYmIGxvZzJUcmFmb1NpemU9PTIpACFyZW9yZGVyX291dHB1dF9xdWV1ZS5lbXB0eSgpAE5VTEwgcGFzc2VkIHRvIGhlaWZfaW1hZ2VfaGFuZGxlX2dldF9pbWFnZV90aWxpbmcoKQBSSWR4ID49IDAgJiYgUklkeCA8IHNldHMuc2l6ZSgpAE5VTEwgb3V0X2RlcHRoX2hhbmRsZSBwYXNzZWQgdG8gaGVpZl9pbWFnZV9oYW5kbGVfZ2V0X2RlcHRoX2ltYWdlX2hhbmRsZSgpAE5VTEwgb3V0X2ltZyBwYXNzZWQgdG8gaGVpZl9kZWNvZGVfaW1hZ2UoKQBOdW1iZXIgb2YgcmVmZXJlbmNlcyBpbiBpcmVmIGJveCAoAE51bWJlciBvZiBleHRlbnRzIGluIGlsb2MgYm94ICgAKSBleGNlZWRzIHNlY3VyaXR5IGxpbWl0ICgATWF4aW11bSBudW1iZXIgb2YgY2hpbGQgYm94ZXMgKABJbnB1dCBlcnJvciAoAEJveCBzaXplICgAIGJ5dGVzKSBzbWFsbGVyIHRoYW4gaGVhZGVyIHNpemUgKAB3aGl0ZSBwb2ludCAoeCx5KTogKABDYW5ub3QgZW5jb2RlIGltYWdlIHRvICdpZGVuJwBDYW5ub3QgZW5jb2RlIGltYWdlIHRvICdpb3ZsJwBDYW5ub3QgZW5jb2RlIGltYWdlIHRvICd0aWxkJwBDYW5ub3QgZW5jb2RlIGltYWdlIHRvICdncmlkJwBjb3VsZCBub3QgcGFyc2UgaXRlbSBwcm9wZXJ0eSAnACkgaW4gJwByZWZlcmVuY2Ugd2l0aCB0eXBlICcASW1hZ2UgaXRlbSBvZiB0eXBlICcAUHVyZSB2aXJ0dWFsIGZ1bmN0aW9uIGNhbGxlZCEAfCAAIHRpbGVzLCBidXQgb25seSAAIHggAEpQRUctMjAwMCBsYXllcnMsIGJ1dCB0aGUgYm94IG9ubHkgY29udGFpbnMgACBKUEVHLTIwMDAgY2hhbm5lbHMsIGJ1dCBmaWxlIG9ubHkgY29udGFpbnMgAGVudGl0eSBncm91cCBib3ggY29udGFpbnMgAGlsb2MgYm94IGNvbnRhaW5zIABFeHRlbnQgaW4gaWxvYyBib3ggcmVmZXJlbmNlcyBkYXRhIG91dHNpZGUgb2YgZmlsZSBib3VuZHMgAENvdWxkIG5vdCB3cml0ZSB0byB0bXAgZmlsZTogZXJyb3IgAENhbm5vdCByZWFkIHRtcCBkYXRhIGZpbGUsIGVycm9yIABpcG1hIGJveCB3YW50cyB0byBkZWZpbmUgcHJvcGVydGllcyBmb3IgAGxheWVyIAAgSlBFRy0yMDAwIGNoYW5uZWxzLCBidXQgdGhlIHNlY3VyaXR5IGxpbWl0IGlzIHNldCB0byAAIGVudGl0aWVzLCBidXQgdGhlIHNlY3VyaXR5IGxpbWl0IGlzIHNldCB0byAAIGl0ZW1zLCBidXQgdGhlIHNlY3VyaXR5IGxpbWl0IGhhcyBiZWVuIHNldCB0byAAKHBvaW50cyB0byBmaWxlIHBvc2l0aW9uIABvcmllbnRhdGlvbiAAR3JpZCBpbWFnZSB2ZXJzaW9uIAAgYm94IGRhdGEgdmVyc2lvbiAAT3ZlcmxheSBpbWFnZSBkYXRhIHZlcnNpb24gACwgdmVyc2lvbiAAZW50aXR5IGdyb3VwIGJveCBzaG91bGQgY29udGFpbiAAaXJlZiBib3ggc2hvdWxkIGNvbnRhaW4gAGlsb2MgYm94IHNob3VsZCBjb250YWluIABpbG9jIGl0ZW0gc2hvdWxkIGNvbnRhaW4gACkgZm9yIGl0ZW0gAEltYWdlIGl0ZW0gAENhbm5vdCBtaXJyb3IgaW1hZ2VzIHdpdGggAFRpbGVkIGltYWdlIHdpdGggAEFsbG9jYXRpbmcgACBieXRlcyBleGNlZWRzIHRoZSBzZWN1cml0eSBsaW1pdCBvZiAAIGl0ZW1zLCB3aGljaCBleGNlZWRzIHRoZSBzZWN1cml0eSBsaW1pdCBvZiAAIGJ5dGVzLCBleGNlZWRpbmcgdGhlIHNlY3VyaXR5IGxpbWl0IG9mIAApIGV4Y2VlZHMgdGhlIHNlY3VyaXR5IGxpbWl0cyBvZiAAaW52YWxpZCBib3ggc2l6ZSAAQm94IHNpemUgACBleGNlZWRzIHRoZSBtYXhpbXVtIGltYWdlIHNpemUgAEltYWdlIHNpemUgAGNkZWYgYm94IHdhbnRzIHRvIGRlZmluZSAAajJrTCBib3ggd2FudHMgdG8gZGVmaW5lIABObyBhdXhDIHByb3BlcnR5IGZvciBpbWFnZSAAIGJ5dGVzLCB0b3RhbCBtZW1vcnkgc2l6ZSB3b3VsZCBiZSAASXRlbSBjb25zdHJ1Y3Rpb24gbWV0aG9kIABpZGF0IGJveCBjb250YWluZWQgAGlsb2MgYm94IGNvbnRhaW5lZCAAIGV4dGVudHMsIGJ1dCB3ZSBjYW4gb25seSByZWFkIAAgaXRlbXMsIGJ1dCB3ZSBjYW4gb25seSByZWFkIAAgZW50aXRpZXMsIGJ1dCB3ZSBjYW4gb25seSByZWFkIAAgcmVmZXJlbmNlcywgYnV0IHdlIGNhbiBvbmx5IHJlYWQgAColZCAAKiVkJWMgAEl0ZW0gd2l0aCBJRCAAIDsgAHByb2ZpbGVfY29tcGF0aWJpbGl0eTogAGZhdGFsaXR5OiAAaW5pdGlhbF9wcmVzZW50YXRpb25fZGVsYXk6IABhbWJpZW50X2xpZ2h0X3k6IABjaHJvbWFfc3Vic2FtcGxpbmdfeTogAEJveDogAGNvbXBvbmVudF9pbmRleDogAGl0ZW1fcHJvdGVjdGlvbl9pbmRleDogAGNoYW5uZWxfaW5kZXg6IAAgIGRhdGFfcmVmZXJlbmNlX2luZGV4OiAAb2xzLWluZGV4OiAAb3AtaW5kZXg6IABwcm9wZXJ0eSBpbmRleDogAGFtYmllbnRfbGlnaHRfeDogAGNocm9tYV9zdWJzYW1wbGluZ194OiAAc2tldzogAHByaW5jaXBhbC1wb2ludDogAHR3ZWx2ZV9iaXQ6IABtYXggcGljdHVyZSBoZWlnaHQ6IABpbWFnZSBoZWlnaHQ6IAAgIGJhc2Vfb2Zmc2V0OiAAY2hyb21hX2Zvcm1hdDogAGNocm9tYS1mb3JtYXQ6IABDaHJvbWEgZm9ybWF0OiAAbnVtIG9mIGFycmF5czogACAgZXh0ZW50czogAG1hdHJpeF9jb2VmZmljaWVudHM6IABhcnJheV9jb21wbGV0ZW5lc3M6IABhcnJheSBjb21wbGV0ZW5lc3M6IABudW0gc3VibGF5ZXJzOiAAbnVtX3RlbXBvcmFsX2xheWVyczogACwgZGVjb2RlX2xheWVyczogACwgZGlzY2FyZF9sZXZlbHM6IAB0YWdzOiAAICAlc19wcm9maWxlX2NvbXBhdGliaWxpdHlfZmxhZ3M6IABnZW5lcmFsX3Byb2ZpbGVfY29tcGF0aWJpbGl0eV9mbGFnczogAGdlbmVyYWxfY29uc3RyYWludF9pbmRpY2F0b3JfZmxhZ3M6IABudW0gYnl0ZXM6IABudW1iZXIgb2YgZGF0YSBieXRlczogAGF1eCBzdWJ0eXBlczogAHwgdGlsZXM6IABjb2xvdXJfcHJpbWFyaWVzOiAAdGlsZSByb3cgYm91bmRhcmllczogAHRpbGUgY29sdW1uIGJvdW5kYXJpZXM6IABjb21wYXRpYmxlIGJyYW5kczogAHRyYW5zZmVyX2NoYXJhY3RlcmlzdGljczogAGVudGl0eSBJRHM6IAAgdG8gSURzOiAALCBwYWxldHRlX2NvbG91cjogACcgcGFyc2UgZXJyb3I6IABkZXNjcmlwdGlvbjogAGNocm9tYV9zYW1wbGVfcG9zaXRpb246IABtaXJyb3IgZGlyZWN0aW9uOiAAcm90YXRpb246IABhbWJpZW50X2lsbHVtaW5hdGlvbjogACwgY2hhbm5lbF9hc3NvY2lhdGlvbjogAGxvY2F0aW9uOiAAQVZDTGV2ZWxJbmRpY2F0aW9uOiAAQVZDUHJvZmlsZUluZGljYXRpb246IABjb25maWd1cmF0aW9uX3ZlcnNpb246IABtaW5vciB2ZXJzaW9uOiAAaGlkZGVuIGl0ZW06IABiaXRzX3Blcl9waXhlbDogAG1heF9jb250ZW50X2xpZ2h0X2xldmVsOiAAbWF4X3BpY19hdmVyYWdlX2xpZ2h0X2xldmVsOiAAYml0c19wZXJfY2hhbm5lbDogACAoZXNzZW50aWFsOiAAaGlnaF9iaXRkZXB0aDogAGJpdC1kZXB0aDogAGZvY2FsLWxlbmd0aDogAGltYWdlIHdpZHRoOiAAICBwaXRjaDogAHwgYmlubmluZzogAGNvbnRlbnRfZW5jb2Rpbmc6IAB2U3BhY2luZzogAGhTcGFjaW5nOiAAbGFuZzogAGdlbmVyYWxfdGllcl9mbGFnOiAAZnVsbF9yYW5nZV9mbGFnOiAAcHRsIGZyYW1lIG9ubHkgY29uc3RyYWludCBmbGFnOiAAdGllciBmbGFnOiAAcHRsIG11bHRpIGxheWVyIGVuYWJsZWQgZmxhZzogAGxlbmd0aF9zaXplOiAAICAgKGhlYWRlciBzaXplOiAATkFMIGxlbmd0aCBzaXplOiAAdGlsZSBzaXplOiAAcHJvZmlsZSBzaXplOiAAdW5oYW5kbGVkIGV4dGVuZGVkIGNhcGFiaWxpdGllcyB2YWx1ZTogAGNvbnN0YW50X2ZyYW1lX3JhdGU6IABhdmdfZnJhbWVfcmF0ZTogAGNvbnN0YW50IGZyYW1lIHJhdGU6IABjbGVhbl9hcGVydHVyZTogAGNvbnRlbnRfdHlwZTogAE5BTF91bml0X3R5cGU6IABjb2xvdXJfdHlwZTogAGhhbmRsZXJfdHlwZTogAHBhcmFsbGVsaXNtX3R5cGU6IABpdGVtX3R5cGU6IAAsIGNoYW5uZWxfdHlwZTogACwgbWFwcGluZ190eXBlOiAAYXV4IHR5cGU6IABpdGVtIHVyaSB0eXBlOiAATkFMIHR5cGU6IABtb25vY2hyb21lOiAAaXRlbV9uYW1lOiAAc2VxX3Byb2ZpbGU6IABnZW5lcmFsIHByb2ZpbGU6IABFcnJvciBvcGVuaW5nIGZpbGU6IABtYXggZGlzcGxheSBtYXN0ZXJpbmcgbHVtaW5hbmNlOiAAbWluIGRpc3BsYXkgbWFzdGVyaW5nIGx1bWluYW5jZTogAGdlbmVyYWxfcHJvZmlsZV9zcGFjZTogACAgY29uc3RydWN0aW9uIG1ldGhvZDogAG1ham9yIGJyYW5kOiAAbGF5ZXJfaWQ6IABncm91cCBpZDogAHdvcmxkIGNvb3JkaW5hdGUgc3lzdGVtIGlkOiAAdGVtcG9yYWxfaWRfbmVzdGVkOiAAcHJlX2RlZmluZWQ6IABtaW5fc3BhdGlhbF9zZWdtZW50YXRpb25faWRjOiAAZ2VuZXJhbF9sZXZlbF9pZGM6IABnZW5lcmFsX3Byb2ZpbGVfaWRjOiAAZGF0YTogAGJpdF9kZXB0aF9sdW1hOiAAQml0IGRlcHRoIGx1bWE6IABiaXRfZGVwdGhfY2hyb21hOiAAQml0IGRlcHRoIGNocm9tYTogAHJlZl9waWNfc2V0WyAlMmQgXTogAFNQUy1FWFQ6IABTUFM6IABQUFM6IABFUlI6IABJTkZPOiAATkU6IABpdGVtX0lEOiAAIGZyb20gSUQ6IABhc3NvY2lhdGlvbnMgZm9yIGl0ZW0gSUQ6IAByaWdodCBpbWFnZSBJRDogAGxlZnQgaW1hZ2UgSUQ6IAAsIE5QQzogACwgQjogAHNlcV9sZXZlbF9pZHhfMDogAGRpc3BsYXlfcHJpbWFyaWVzICh4LHkpOiAAY2FtZXJhIHBvc2l0aW9uICh1bSk6IAApIDogACksIAAgIHJvbGw6ICAAbWF4IHBpY3R1cmUgd2lkdGg6ICAAICB5YXc6ICAgACAgICAgIABubyBza2V3CgAgcmVmZXJlbmNlZCwgYnV0IGl0IGRvZXMgbm90IGV4aXN0CgBub3QgcHJlc2VudAoAU1BTIGVycm9yOiBDQiBhbGlnbm1lbnQKACVwIGluaXQKAColcwoAc2xpY2VfZGVibG9ja2luZ19maWx0ZXJfZGlzYWJsZWRfZmxhZyA6ICVkICVzCgBudW1fcmVmX2lkeF9sMV9hY3RpdmUgICAgICAgICAgOiAlZCAlcwoAbnVtX3JlZl9pZHhfbDBfYWN0aXZlICAgICAgICAgIDogJWQgJXMKACAgJXNfcHJvZmlsZV9pZGMgICAgICAgOiAlcwoAICB2aWRlb19mb3JtYXQgICAgICAgICAgICAgICAgOiAlcwoAJXAgZGVzdHJ1Y3RvcgoAJXAgcmVsZWFzZSAlcAoAbWZyZWUgJXAKACVwIGMndG9yID0gJXAKACVwIGFzc2lnbiA9ICVwCgBob3Jpem9udGFsCgBmYXRhbAoAb3B0aW9uYWwKAHZlcnRpY2FsCgBTUFMgZXJyb3I6IHRyYW5zZm9ybSBoaWVyYXJjaHkgZGVwdGggKGludGVyKSA+IENUQiBzaXplIC0gbWluIFRCIHNpemUKAFNQUyBlcnJvcjogdHJhbnNmb3JtIGhpZXJhcmNoeSBkZXB0aCAoaW50cmEpID4gQ1RCIHNpemUgLSBtaW4gVEIgc2l6ZQoAbm8gY29sb3IgcHJvZmlsZQoAaWdub3JhYmxlCgBudW1iZXIgb2YgZGF0YSBieXRlcyBpcyBpbnZhbGlkCgB1bnN1cHBvcnRlZAoAaW52YWxpZCBTUFMgcmVmZXJlbmNlZAoAaW52YWxpZCBQUFMgcmVmZXJlbmNlZAoAUFBTICVkIGhhcyBub3QgYmVlbiByZWFkCgBzYW1wbGUgYXNwZWN0IHJhdGlvICAgICAgICA6ICVkOiVkCgBMYXllciAlZAoAdnBzX251bV9sYXllcl9zZXRzID0gJWQKAHZwc19udW1fdW5pdHNfaW5fdGljayA9ICVkCgBsYXllciAlZDogdnBzX21heF9kZWNfcGljX2J1ZmZlcmluZyA9ICVkCgBsYXllciAoYWxsKTogdnBzX21heF9kZWNfcGljX2J1ZmZlcmluZyA9ICVkCgB2cHNfdGltaW5nX2luZm9fcHJlc2VudF9mbGFnID0gJWQKAHZwc19leHRlbnNpb25fZmxhZyA9ICVkCgB2cHNfcG9jX3Byb3BvcnRpb25hbF90b190aW1pbmdfZmxhZyA9ICVkCgB2cHNfbnVtX3RpY2tzX3BvY19kaWZmX29uZSA9ICVkCgBocmRfbGF5ZXJfc2V0X2lkeFslZF0gPSAlZAoAbGF5ZXJfaWRfaW5jbHVkZWRfZmxhZ1slZF1bJWRdID0gJWQKACAgICAgICAgICAgICB2cHNfbWF4X251bV9yZW9yZGVyX3BpY3MgID0gJWQKACAgICAgICAgICAgICB2cHNfbWF4X2xhdGVuY3lfaW5jcmVhc2UgID0gJWQKAHZwc19tYXhfbGF5ZXJfaWQgICA9ICVkCgB2cHNfbnVtX2hyZF9wYXJhbWV0ZXJzICAgICA9ICVkCgB2cHNfdGltZV9zY2FsZSAgICAgICAgPSAlZAoAY29uZl93aW5fYm90dG9tX29mZnNldDogJWQKAGNocm9tYV9sb2NfaW5mb19wcmVzZW50X2ZsYWc6ICVkCgBsaXN0c19tb2RpZmljYXRpb25fcHJlc2VudF9mbGFnOiAlZAoAZGVibG9ja2luZ19maWx0ZXJfY29udHJvbF9wcmVzZW50X2ZsYWc6ICVkCgB2aWRlb19zaWduYWxfdHlwZV9wcmVzZW50X2ZsYWc6ICVkCgBwaWNfc2NhbGluZ19saXN0X2RhdGFfcHJlc2VudF9mbGFnOiAlZAoAcGljX2Rpc2FibGVfZGVibG9ja2luZ19maWx0ZXJfZmxhZzogJWQKAG5ldXRyYWxfY2hyb21hX2luZGljYXRpb25fZmxhZzogJWQKAHVuaWZvcm1fc3BhY2luZ19mbGFnOiAlZAoAdHJhbnNxdWFudF9ieXBhc3NfZW5hYmxlX2ZsYWc6ICVkCgBjb25zdHJhaW5lZF9pbnRyYV9wcmVkX2ZsYWc6ICVkCgBwcHNfbG9vcF9maWx0ZXJfYWNyb3NzX3NsaWNlc19lbmFibGVkX2ZsYWc6ICVkCgB0cmFuc2Zvcm1fc2tpcF9lbmFibGVkX2ZsYWc6ICVkCgBkZWJsb2NraW5nX2ZpbHRlcl9vdmVycmlkZV9lbmFibGVkX2ZsYWc6ICVkCgBlbnRyb3B5X2NvZGluZ19zeW5jX2VuYWJsZWRfZmxhZzogJWQKACAgY2hyb21hX3NhbXBsZV9sb2NfdHlwZV9ib3R0b21fZmllbGQ6ICVkCgAgICVkOiAlZAoAY29uZl93aW5fcmlnaHRfb2Zmc2V0IDogJWQKAG51bV9zaG9ydF90ZXJtX3JlZl9waWNfc2V0cyA6ICVkCgBudW1fbG9uZ190ZXJtX3JlZl9waWNzX3NwcyA6ICVkCgBwaWNfaGVpZ2h0X2luX2x1bWFfc2FtcGxlcyA6ICVkCgBtYXhfdHJhbnNmb3JtX2hpZXJhcmNoeV9kZXB0aF9pbnRlciA6ICVkCgAgICAgJXNfZnJhbWVfb25seV9jb25zdHJhaW50X2ZsYWcgOiAlZAoAICAgICVzX25vbl9wYWNrZWRfY29uc3RyYWludF9mbGFnIDogJWQKAHBwc19zbGljZV9jaHJvbWFfcXBfb2Zmc2V0c19wcmVzZW50X2ZsYWcgOiAlZAoAdnVpX2hyZF9wYXJhbWV0ZXJzX3ByZXNlbnRfZmxhZyA6ICVkCgBsb25nX3Rlcm1fcmVmX3BpY3NfcHJlc2VudF9mbGFnIDogJWQKAG92ZXJzY2FuX2luZm9fcHJlc2VudF9mbGFnIDogJWQKAHZwc19zdWJfbGF5ZXJfb3JkZXJpbmdfaW5mb19wcmVzZW50X2ZsYWcgOiAlZAoAc3BzX3N1Yl9sYXllcl9vcmRlcmluZ19pbmZvX3ByZXNlbnRfZmxhZyA6ICVkCgBmcmFtZV9maWVsZF9pbmZvX3ByZXNlbnRfZmxhZyA6ICVkCgAgIGNvbG91cl9kZXNjcmlwdGlvbl9wcmVzZW50X2ZsYWcgOiAlZAoAc2xpY2Vfc2VnbWVudF9oZWFkZXJfZXh0ZW5zaW9uX3ByZXNlbnRfZmxhZyA6ICVkCgBzcHNfc2NhbGluZ19saXN0X2RhdGFfcHJlc2VudF9mbGFnIDogJWQKACAgbW90aW9uX3ZlY3RvcnNfb3Zlcl9waWNfYm91bmRhcmllc19mbGFnIDogJWQKAHNwc19tdWx0aWxheWVyX2V4dGVuc2lvbl9mbGFnIDogJWQKAHBwc19tdWx0aWxheWVyX2V4dGVuc2lvbl9mbGFnIDogJWQKAHNwc190ZW1wb3JhbF9pZF9uZXN0aW5nX2ZsYWcgOiAlZAoAdnVpX3BvY19wcm9wb3J0aW9uYWxfdG9fdGltaW5nX2ZsYWcgOiAlZAoAc2VwYXJhdGVfY29sb3VyX3BsYW5lX2ZsYWcgOiAlZAoAc2NhbGluZ19saXN0X2VuYWJsZV9mbGFnIDogJWQKAHN0cm9uZ19pbnRyYV9zbW9vdGhpbmdfZW5hYmxlX2ZsYWcgOiAlZAoAZGVibG9ja2luZ19maWx0ZXJfb3ZlcnJpZGVfZmxhZyA6ICVkCgBudW1fcmVmX2lkeF9hY3RpdmVfb3ZlcnJpZGVfZmxhZyA6ICVkCgAgICAgJXNfcHJvZ3Jlc3NpdmVfc291cmNlX2ZsYWcgOiAlZAoAICAgICVzX2ludGVybGFjZWRfc291cmNlX2ZsYWcgOiAlZAoAc2FtcGxlX2FkYXB0aXZlX29mZnNldF9lbmFibGVkX2ZsYWcgOiAlZAoAZGVwZW5kZW50X3NsaWNlX3NlZ21lbnRzX2VuYWJsZWRfZmxhZyA6ICVkCgBsb29wX2ZpbHRlcl9hY3Jvc3NfdGlsZXNfZW5hYmxlZF9mbGFnIDogJWQKAHNsaWNlX2xvb3BfZmlsdGVyX2Fjcm9zc19zbGljZXNfZW5hYmxlZF9mbGFnIDogJWQKAHNsaWNlX3RlbXBvcmFsX212cF9lbmFibGVkX2ZsYWcgOiAlZAoAY3Jvc3NfY29tcG9uZW50X3ByZWRpY3Rpb25fZW5hYmxlZF9mbGFnIDogJWQKAHBlcnNpc3RlbnRfcmljZV9hZGFwdGF0aW9uX2VuYWJsZWRfZmxhZyA6ICVkCgBsb2cyX2RpZmZfbWF4X21pbl90cmFuc2Zvcm1fYmxvY2tfc2l6ZSA6ICVkCgBsb2cyX2RpZmZfbWF4X21pbl9sdW1hX2NvZGluZ19ibG9ja19zaXplIDogJWQKAGxvZzJfbWluX2x1bWFfY29kaW5nX2Jsb2NrX3NpemUgOiAlZAoAbG9nMl9kaWZmX21heF9taW5fcGNtX2x1bWFfY29kaW5nX2Jsb2NrX3NpemUgOiAlZAoAbG9nMl9taW5fcGNtX2x1bWFfY29kaW5nX2Jsb2NrX3NpemUgOiAlZAoAbnVtX3JlZl9pZHhfbDFfZGVmYXVsdF9hY3RpdmUgOiAlZAoAbnVtX3JlZl9pZHhfbDBfZGVmYXVsdF9hY3RpdmUgOiAlZAoAbG9nMl9tYXhfcGljX29yZGVyX2NudF9sc2IgOiAlZAoAbWF4X3RyYW5zZm9ybV9oaWVyYXJjaHlfZGVwdGhfaW50cmEgOiAlZAoAYml0X2RlcHRoX2Nocm9tYSA6ICVkCgBlbnRyeSBwb2ludCBbJWldIDogJWQKACAgc3BzX21heF9sYXRlbmN5X2luY3JlYXNlX3BsdXMxIDogJWQKAHJlZl9waWNfbGlzdF9tb2RpZmljYXRpb25fZmxhZ19sMSA6ICVkCgByZWZfcGljX2xpc3RfbW9kaWZpY2F0aW9uX2ZsYWdfbDAgOiAlZAoATG9nMk1pbkN1Q2hyb21hUXBPZmZzZXRTaXplIChSRXh0KSA6ICVkCgBMb2cyTWF4VHJhbnNmb3JtU2tpcFNpemUgICAgKFJFeHQpIDogJWQKAGNvbmZfd2luX2xlZnRfb2Zmc2V0ICA6ICVkCgAgIGRlZl9kaXNwX3dpbl9ib3R0b21fb2Zmc2V0ICA6ICVkCgBzbGljZV9iZXRhX29mZnNldCAgOiAlZAoAcGljX3dpZHRoX2luX2x1bWFfc2FtcGxlcyAgOiAlZAoAdnVpX3RpbWluZ19pbmZvX3ByZXNlbnRfZmxhZyAgOiAlZAoAb3ZlcnNjYW5fYXBwcm9wcmlhdGVfZmxhZyAgOiAlZAoAcGNtX2xvb3BfZmlsdGVyX2Rpc2FibGVfZmxhZyAgOiAlZAoAZml2ZV9taW51c19tYXhfbnVtX21lcmdlX2NhbmQgIDogJWQKAHZpZGVvX3BhcmFtZXRlcl9zZXRfaWQgIDogJWQKACAgZGVmX2Rpc3Bfd2luX3JpZ2h0X29mZnNldCAgIDogJWQKAGNvbmZfd2luX3RvcF9vZmZzZXQgICA6ICVkCgBkZWZhdWx0X2Rpc3BsYXlfd2luZG93X2ZsYWcgICA6ICVkCgBjdV9xcF9kZWx0YV9lbmFibGVkX2ZsYWcgICA6ICVkCgBsb2cyX21pbl90cmFuc2Zvcm1fYmxvY2tfc2l6ZSAgIDogJWQKACAgY2hyb21hX3NhbXBsZV9sb2NfdHlwZV90b3BfZmllbGQgICA6ICVkCgBiaXRfZGVwdGhfbHVtYSAgIDogJWQKAHBjbV9zYW1wbGVfYml0X2RlcHRoX2Nocm9tYSAgIDogJWQKAE1heENiU2l6ZVkgICA6ICVkCgBNaW5DYlNpemVZICAgOiAlZAoATWF4VEJTaXplWSAgIDogJWQKAE1pblRCU2l6ZVkgICA6ICVkCgAgIGRlZl9kaXNwX3dpbl9sZWZ0X29mZnNldCAgICA6ICVkCgBzbGljZV90Y19vZmZzZXQgICAgOiAlZAoAbnVtX2V4dHJhX3NsaWNlX2hlYWRlcl9iaXRzICAgIDogJWQKAG51bV9lbnRyeV9wb2ludF9vZmZzZXRzICAgIDogJWQKAG51bV90aWxlX2NvbHVtbnMgICAgOiAlZAoAICB0cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3MgICAgOiAlZAoAICBsb2cyX21heF9tdl9sZW5ndGhfaG9yaXpvbnRhbCAgICA6ICVkCgBjb25mb3JtYW5jZV93aW5kb3dfZmxhZyAgICA6ICVkCgBjYWJhY19pbml0X3ByZXNlbnRfZmxhZyAgICA6ICVkCgBzcHNfZXh0ZW5zaW9uX3ByZXNlbnRfZmxhZyAgICA6ICVkCgAgIHJlc3RyaWN0ZWRfcmVmX3BpY19saXN0c19mbGFnICAgIDogJWQKAHRyYW5zZm9ybV9za2lwX3JvdGF0aW9uX2VuYWJsZWRfZmxhZyAgICA6ICVkCgBzZXFfcGFyYW1ldGVyX3NldF9pZCAgICA6ICVkCgBzbGljZV9jcl9xcF9vZmZzZXQgICAgIDogJWQKAHNsaWNlX2NiX3FwX29mZnNldCAgICAgOiAlZAoAICBkZWZfZGlzcF93aW5fdG9wX29mZnNldCAgICAgOiAlZAoAZGlmZl9jdV9xcF9kZWx0YV9kZXB0aCAgICAgOiAlZAoAb3V0cHV0X2ZsYWdfcHJlc2VudF9mbGFnICAgICA6ICVkCgB0cmFuc2Zvcm1fc2tpcF9jb250ZXh0X2VuYWJsZWRfZmxhZyAgICAgOiAlZAoAY2FiYWNfYnlwYXNzX2FsaWdubWVudF9lbmFibGVkX2ZsYWcgICAgIDogJWQKAGhpZ2hfcHJlY2lzaW9uX29mZnNldHNfZW5hYmxlZF9mbGFnICAgICA6ICVkCgAgICVzX3Byb2ZpbGVfc3BhY2UgICAgIDogJWQKACAgbWluX3NwYXRpYWxfc2VnbWVudGF0aW9uX2lkYyAgICAgOiAlZAoAcGNtX3NhbXBsZV9iaXRfZGVwdGhfbHVtYSAgICAgOiAlZAoAQ3RiU2l6ZVkgICAgIDogJWQKAHNwc19tYXhfc3ViX2xheWVycyAgICAgIDogJWQKAGxvZzJfcGFyYWxsZWxfbWVyZ2VfbGV2ZWwgICAgICA6ICVkCgAgIGxvZzJfbWF4X212X2xlbmd0aF92ZXJ0aWNhbCAgICAgIDogJWQKACAgc3BzX21heF9kZWNfcGljX2J1ZmZlcmluZyAgICAgIDogJWQKAHNob3J0X3Rlcm1fcmVmX3BpY19zZXRfc3BzX2ZsYWcgICAgICA6ICVkCgBzcHNfcmFuZ2VfZXh0ZW5zaW9uX2ZsYWcgICAgICA6ICVkCgBwcHNfcmFuZ2VfZXh0ZW5zaW9uX2ZsYWcgICAgICA6ICVkCgBleHRlbmRlZF9wcmVjaXNpb25fcHJvY2Vzc2luZ19mbGFnICAgICAgOiAlZAoAc2lnbl9kYXRhX2hpZGluZ19mbGFnICAgICAgOiAlZAoAY2hyb21hX3FwX29mZnNldF9saXN0X2VuYWJsZWRfZmxhZyAgICAgIDogJWQKAHNwc190ZW1wb3JhbF9tdnBfZW5hYmxlZF9mbGFnICAgICAgOiAlZAoAZmlyc3Rfc2xpY2Vfc2VnbWVudF9pbl9waWNfZmxhZyAgICAgIDogJWQKAGxvZzJfbWF4X3RyYW5zZm9ybV9za2lwX2Jsb2NrX3NpemUgICAgICA6ICVkCgBudW1fdGlsZV9yb3dzICAgICAgIDogJWQKACAgc3BzX21heF9udW1fcmVvcmRlcl9waWNzICAgICAgIDogJWQKACAgdnVpX251bV91bml0c19pbl90aWNrICAgICAgIDogJWQKACAgdGlsZXNfZml4ZWRfc3RydWN0dXJlX2ZsYWcgICAgICAgOiAlZAoAICB2aWRlb19mdWxsX3JhbmdlX2ZsYWcgICAgICAgOiAlZAoAc2VxX3BhcmFtZXRlcl9zZXRfaWQgICAgICAgOiAlZAoAcGljX3BhcmFtZXRlcl9zZXRfaWQgICAgICAgOiAlZAoAICBtYXhfYml0c19wZXJfbWluX2N1X2Rlbm9tICAgICAgICA6ICVkCgB2dWlfcGFyYW1ldGVyc19wcmVzZW50X2ZsYWcgICAgICAgIDogJWQKAGNvbGxvY2F0ZWRfZnJvbV9sMF9mbGFnICAgICAgICA6ICVkCgBDaHJvbWFXZWlnaHRfTCVkWyVkXVslZF0gICAgICAgIDogJWQKAENocm9tYU9mZnNldF9MJWRbJWRdWyVkXSAgICAgICAgOiAlZAoAUGljSGVpZ2h0SW5DdGJzWSAgICAgICAgOiAlZAoAbHVtYV9sb2cyX3dlaWdodF9kZW5vbSAgICAgICAgIDogJWQKAGRlcGVuZGVudF9zbGljZV9zZWdtZW50X2ZsYWcgICAgICAgICA6ICVkCgBub19vdXRwdXRfb2ZfcHJpb3JfcGljc19mbGFnICAgICAgICAgOiAlZAoAICAlc190aWVyX2ZsYWcgICAgICAgICA6ICVkCgBiaXRzdHJlYW1fcmVzdHJpY3Rpb25fZmxhZyAgICAgICAgIDogJWQKAHdlaWdodGVkX2JpcHJlZF9mbGFnICAgICAgICAgOiAlZAoAc2xpY2VfcXBfZGVsdGEgICAgICAgICA6ICVkCgBQaWNXaWR0aEluQ3Ric1kgICAgICAgICA6ICVkCgAgIG1heF9ieXRlc19wZXJfcGljX2Rlbm9tICAgICAgICAgIDogJWQKAENocm9tYUxvZzJXZWlnaHREZW5vbSAgICAgICAgICA6ICVkCgBkaWZmX2N1X2Nocm9tYV9xcF9vZmZzZXRfZGVwdGggICAgICAgICAgOiAlZAoAdnBzX3RlbXBvcmFsX2lkX25lc3RpbmdfZmxhZyAgICAgICAgICA6ICVkCgBMb2cyTWluQ3VRcERlbHRhU2l6ZSAgICAgICAgICA6ICVkCgB2dWlfbnVtX3RpY2tzX3BvY19kaWZmX29uZSAgICAgICAgICA6ICVkCgBzaG9ydF90ZXJtX3JlZl9waWNfc2V0X2lkeCAgICAgICAgICAgOiAlZAoAc3BzX2V4dGVuc2lvbl82Yml0cyAgICAgICAgICAgOiAlZAoAcHBzX2V4dGVuc2lvbl82Yml0cyAgICAgICAgICAgOiAlZAoAd2VpZ2h0ZWRfcHJlZF9mbGFnICAgICAgICAgICA6ICVkCgBpbnRyYV9zbW9vdGhpbmdfZGlzYWJsZWRfZmxhZyAgICAgICAgICAgOiAlZAoAdGlsZXNfZW5hYmxlZF9mbGFnICAgICAgICAgICA6ICVkCgBzbGljZV9zYW9fY2hyb21hX2ZsYWcgICAgICAgICAgIDogJWQKAHNsaWNlX3BpY19wYXJhbWV0ZXJfc2V0X2lkICAgICAgICAgICA6ICVkCgAgIGNvbG91cl9wcmltYXJpZXMgICAgICAgICAgICA6ICVkCgBwcHNfZXh0ZW5zaW9uX2ZsYWcgICAgICAgICAgICA6ICVkCgBsb2cyX3Nhb19vZmZzZXRfc2NhbGVfY2hyb21hICAgICAgICAgICAgOiAlZAoAbHVtYV9vZmZzZXRfbCVkWyVkXSAgICAgICAgICAgIDogJWQKAGNvbGxvY2F0ZWRfcmVmX2lkeCAgICAgICAgICAgICA6ICVkCgBwaWNfY3JfcXBfb2Zmc2V0ICAgICAgICAgICAgIDogJWQKAHBpY19jYl9xcF9vZmZzZXQgICAgICAgICAgICAgOiAlZAoAZXhwbGljaXRfcmRwY21fZW5hYmxlZF9mbGFnICAgICAgICAgICAgIDogJWQKAGltcGxpY2l0X3JkcGNtX2VuYWJsZWRfZmxhZyAgICAgICAgICAgICA6ICVkCgBzbGljZV9zYW9fbHVtYV9mbGFnICAgICAgICAgICAgIDogJWQKAEx1bWFXZWlnaHRfTCVkWyVkXSAgICAgICAgICAgICA6ICVkCgAgIHZ1aV90aW1lX3NjYWxlICAgICAgICAgICAgICA6ICVkCgBzbGljZV9waWNfb3JkZXJfY250X2xzYiAgICAgICAgICAgICAgOiAlZAoAbG9nMl9zYW9fb2Zmc2V0X3NjYWxlX2x1bWEgICAgICAgICAgICAgIDogJWQKAFN1YkhlaWdodEMgICAgICAgICAgICAgIDogJWQKACAgbWF0cml4X2NvZWZmcyAgICAgICAgICAgICAgIDogJWQKAGNocm9tYV9xcF9vZmZzZXRfbGlzdF9sZW4gICAgICAgICAgICAgICA6ICVkCgBtdmRfbDFfemVyb19mbGFnICAgICAgICAgICAgICAgOiAlZAoAU3ViV2lkdGhDICAgICAgICAgICAgICAgOiAlZAoAc2xpY2Vfc2VnbWVudF9hZGRyZXNzICAgICAgICAgICAgICAgIDogJWQKAHBpY19pbml0X3FwICAgICAgICAgICAgICAgIDogJWQKAGNhYmFjX2luaXRfZmxhZyAgICAgICAgICAgICAgICA6ICVkCgBmaWVsZF9zZXFfZmxhZyAgICAgICAgICAgICAgICA6ICVkCgB2aWRlb19wYXJhbWV0ZXJfc2V0X2lkICAgICAgICAgICAgICAgIDogJWQKAG9mZnNldF9sZW4gICAgICAgICAgICAgICAgIDogJWQKAHZwc19tYXhfc3ViX2xheWVycyAgICAgICAgICAgICAgICAgICAgOiAlZAoAYW1wX2VuYWJsZWRfZmxhZyAgICAgICAgICAgICAgICAgICAgOiAlZAoAcGNtX2VuYWJsZWRfZmxhZyAgICAgICAgICAgICAgICAgICAgOiAlZAoAY3JfcXBfb2Zmc2V0X2xpc3RbJWRdICAgICAgICAgICAgICAgICAgICA6ICVkCgBjYl9xcF9vZmZzZXRfbGlzdFslZF0gICAgICAgICAgICAgICAgICAgIDogJWQKAHBpY19vdXRwdXRfZmxhZyAgICAgICAgICAgICAgICAgICAgICA6ICVkCgBjb2xvdXJfcGxhbmVfaWQgICAgICAgICAgICAgICAgICAgICAgOiAlZAoAbnVtX2xvbmdfdGVybV9waWNzICAgICAgICAgICAgICAgICAgICAgICA6ICVkCgB2cHNfbWF4X2xheWVycyAgICAgICAgICAgICAgICAgICAgICAgIDogJWQKAG51bV9sb25nX3Rlcm1fc3BzICAgICAgICAgICAgICAgICAgICAgICAgOiAlZAoAYmV0YV9vZmZzZXQ6ICAlZAoAdGNfb2Zmc2V0OiAgICAlZAoAc2xpY2VfdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJWMKACAgUHJvZmlsZS9UaWVyL0xldmVsIFtMYXllciAlZF0KAFNQUyBlcnJvcjogYml0ZGVwdGggWSBub3QgaW4gWzg7MTZdCgBTUFMgZXJyb3I6IGJpdGRlcHRoIEMgbm90IGluIFs4OzE2XQoAU1BTIGVycm9yOiBUQl9tYXggPiAzMiBvciBDVEIKAFNQUyBlcnJvcjogVEIgPiBDQgoAPGFycmF5PgoAY29uZmlnIE5BTHM6CgA0OjQ6NAoANDoyOjIKADQ6MjowCgA0OjA6MAoARmlsZSBkb2VzIG5vdCBpbmNsdWRlIGFueSBzdXBwb3J0ZWQgYnJhbmRzLgoAbGliaGVpZiB3YXJuaW5nOiBoZWlmX2ltYWdlX2NyZWF0ZSgpIHVzZWQgd2l0aCBhbiBpbGxlZ2FsIGNvbG9yc3BhY2UvY2hyb21hIGNvbWJpbmF0aW9uLiBUaGlzIHdpbGwgcmV0dXJuIGFuIGVycm9yIGluIGEgZnV0dXJlIHZlcnNpb24uCgAtLS0tLS0tLS0tLS0tLS0tLSBTUFMtcmFuZ2UtZXh0ZW5zaW9uIC0tLS0tLS0tLS0tLS0tLS0tCgAtLS0tLS0tLS0tLS0tLS0tLSBWUFMgLS0tLS0tLS0tLS0tLS0tLS0KAC0tLS0tLS0tLS0tLS0tLS0tIFNQUyAtLS0tLS0tLS0tLS0tLS0tLQoALS0tLS0tLS0tLS0tLS0tLS0gUFBTIC0tLS0tLS0tLS0tLS0tLS0tCgAtLS0tLS0tLS0tLS0tLS0tLSBWVUkgLS0tLS0tLS0tLS0tLS0tLS0KAC0tLS0tLS0tLS0tLS0tLS0tIFNMSUNFIC0tLS0tLS0tLS0tLS0tLS0tCgAtLS0tLS0tLS0tIFBQUyByYW5nZS1leHRlbnNpb24gLS0tLS0tLS0tLQoAIC0tLS0tCgBjb2xvdXJfdHlwZTogLS0tCgAqCgAoYW5nbGVzKQoAY2hyb21hX2Zvcm1hdF9pZGMgICAgICAgOiAlZCAoJXMpCgAgKHNtYWxsZXIgdGhhbiBoZWFkZXIpCgAlcCBkZWNvdXBsZSAoJXApCgAocXVhdGVyaW9uKQoAICAlc19sZXZlbF9pZGMgICAgICAgICA6ICVkICglNC4yZikKAGx0X3JlZl9waWNfcG9jX2xzYl9zcHNbJWRdIDogJWQgICAodXNlZF9ieV9jdXJyX3BpY19sdF9zcHNfZmxhZz0lZCkKACVwIChhbGxvYykKACBkZWdyZWVzIChDQ1cpCgAzQm94ADlCb3hIZWFkZXIAOEJveF9pc3BlADdGdWxsQm94ADlCb3hfb3RoZXIAOUJveF9FcnJvcgA4Qm94X2Z0eXAAOEJveF9mcmVlADhCb3hfbWV0YQA4Qm94X2hkbHIAOEJveF9waXRtADhCb3hfaW5mZQA4Qm94X2lpbmYAOEJveF9pcHJwADhCb3hfaXBjbwA4Qm94X2lwbWEAOEJveF9hdXhDADhCb3hfaXJvdAA4Qm94X2ltaXIAOEJveF9jbGFwADhCb3hfaXJlZgA4Qm94X2lkYXQAOEJveF9ncnBsADE3Qm94X0VudGl0eVRvR3JvdXAAOEJveF9zdGVyADhCb3hfcHltZAA4Qm94X2RpbmYAOEJveF9kcmVmADdCb3hfdXJsADhCb3hfcGl4aQA4Qm94X3Bhc3AAOEJveF9sc2VsADhCb3hfY2xsaQA4Qm94X21kY3YAOEJveF9hbXZlADhCb3hfY21pbgA4Qm94X2NtZXgAOEJveF91ZGVzADhCb3hfaWxvYwBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk4Qm94X21ldGFOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOEJveF9mdHlwTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSThCb3hfZnJlZU5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk4Qm94X2hkbHJOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOEJveF9waXRtTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSThCb3hfaWxvY05TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk4Qm94X2lpbmZOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOEJveF9pbmZlTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSThCb3hfaXBycE5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk4Qm94X2lwY29OU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOEJveF9pcG1hTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSThCb3hfaXNwZU5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk4Qm94X2F1eENOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOEJveF9pcm90TlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSThCb3hfaW1pck5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk4Qm94X2NsYXBOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOEJveF9pcmVmTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSThCb3hfaHZjQ05TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk4Qm94X2F2MUNOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOEJveF92dmNDTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSThCb3hfaWRhdE5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk4Qm94X2dycGxOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOEJveF9weW1kTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTE3Qm94X0VudGl0eVRvR3JvdXBOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOEJveF9zdGVyTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSThCb3hfZGluZk5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk4Qm94X2RyZWZOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJN0JveF91cmxOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOEJveF9jb2xyTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSThCb3hfcGl4aU5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk4Qm94X3Bhc3BOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOEJveF9sc2VsTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSThCb3hfYTFvcE5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk4Qm94X2ExbHhOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOEJveF9jbGxpTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSThCb3hfbWRjdk5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk4Qm94X2FtdmVOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOEJveF9jbWluTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSThCb3hfY21leE5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk4Qm94X3VkZXNOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOEJveF9qcGdDTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSThCb3hfajJrSE5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk4Qm94X2NkZWZOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOEJveF9jbWFwTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSThCb3hfcGNsck5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk4Qm94X2oya0xOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOEJveF9tc2tDTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSThCb3hfYXZjQ05TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkzQm94TlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTlCb3hfb3RoZXJOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOUJveF9FcnJvck5TXzlhbGxvY2F0b3JJUzFfRUVFRQBTdWNjZXNzADEzY29sb3JfcHJvZmlsZQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxNEhlaWZQaXhlbEltYWdlTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTE4Y29sb3JfcHJvZmlsZV9uY2x4TlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSThIZWlmRmlsZU5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxMFJlZ2lvbkl0ZW1OU185YWxsb2NhdG9ySVMxX0VFRUUAMTBTRUlNZXNzYWdlADM2U0VJTWVzc2FnZV9kZXB0aF9yZXByZXNlbnRhdGlvbl9pbmZvADMwaGVpZl9kZXB0aF9yZXByZXNlbnRhdGlvbl9pbmZvAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTEzSW1hZ2VNZXRhZGF0YU5TXzlhbGxvY2F0b3JJUzFfRUVFRQAxNFJlZ2lvbkdlb21ldHJ5AE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTEwRmlsZUxheW91dE5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkyMFN0cmVhbVJlYWRlcl9pc3RyZWFtTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTE5U3RyZWFtUmVhZGVyX21lbW9yeU5TXzlhbGxvY2F0b3JJUzFfRUVFRQAAAwAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAAAMAAAAEAAAABgAAAAgAAAAGAAAACAAAADE3Y29sb3JfcHJvZmlsZV9yYXcAMThjb2xvcl9wcm9maWxlX25jbHgAOEJveF9jb2xyAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTE3Y29sb3JfcHJvZmlsZV9yYXdOU185YWxsb2NhdG9ySVMxX0VFRUUAAACamZk+AAAAAAAAAAA9Clc+4XqUPlK4nj5SuJ4+/tR4PnsULj4AAAAAFK6HPhSuhz4AQayzAgs0PQqXPpqZGT8AAAAAAAAAAI/CNT+amRk/7FEYP+xRGD/pJjE/MQhMPwAAgD/XozA/16MwPwBBhLQCCzRI4Ro/mpkZPgAAAAAAAAAAKVwPPpqZGT5SuB4+UrgePuF6FD7dJAY+AAAAAJqZGT6amRk+AEHctAILNFK4Hj6PwnU9AAAAAAAAAAAK16M9j8J1PSlcjz0pXI89ObRIPX9qPD0AAAAAj8J1PY/CdT0AQbS1Ags0LbKdPQrXIz8AAAAAAAAAAB+FKz8K1yM/rkchP65HIT8EVi4/fT81PwAAgD97FC4/exQuPwBBjLYCCzSuRyE/w/WoPgAAAAAAAAAAw/WoPsP1qD57FK4+exSuPvhToz4GgZU+AAAAAArXoz4K16M+AEHktgILNHsUrj43GqA+AAAAAAAAAABSuJ4+NxqgPjcaoD43GqA+UriePjcaoD6fqqo+nMSgPjcaoD4AQby3Ags0NxqgPrByqD4AAAAAAAAAAMHKoT6wcqg+sHKoPrByqD7ByqE+sHKoPjuqqj5GtrM+sHKoPgBBlLgCC8IRsHKoPgEAAAACAAAAAgAAAAEAAAABAAAAAgAAAAEAAAABAAAAMjBSZWdpb25HZW9tZXRyeV9Qb2ludAAyNFJlZ2lvbkdlb21ldHJ5X1JlY3RhbmdsZQAyMlJlZ2lvbkdlb21ldHJ5X0VsbGlwc2UAMjJSZWdpb25HZW9tZXRyeV9Qb2x5Z29uADI5UmVnaW9uR2VvbWV0cnlfUmVmZXJlbmNlZE1hc2sAMjVSZWdpb25HZW9tZXRyeV9JbmxpbmVNYXNrAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTIwUmVnaW9uR2VvbWV0cnlfUG9pbnROU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMjRSZWdpb25HZW9tZXRyeV9SZWN0YW5nbGVOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMjJSZWdpb25HZW9tZXRyeV9FbGxpcHNlTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTIyUmVnaW9uR2VvbWV0cnlfUG9seWdvbk5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkyOVJlZ2lvbkdlb21ldHJ5X1JlZmVyZW5jZWRNYXNrTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTI1UmVnaW9uR2VvbWV0cnlfSW5saW5lTWFza05TXzlhbGxvY2F0b3JJUzFfRUVFRQAAAGZpdmFjaWVoeGllaGlrMmpnZXBqZmFpbTFmaW0yZmltAQAAAAIAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAAWAAAAAQAAAAIAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAAAAAAAAQAAAAIAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAAEAAAAEAAAAAwAAAAcAAAAKAAAABQAAAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAHBwAGlwAFAxMmhlaWZfY29udGV4dAAxMmhlaWZfY29udGV4dAB2cHAAMTBoZWlmX2Vycm9yAHBwcHAAMjBoZWlmX2ZpbGV0eXBlX3Jlc3VsdABpcHAATjEwZW1zY3JpcHRlbjN2YWxFAHBwcABwcHBpAFAxN2hlaWZfaW1hZ2VfaGFuZGxlADE3aGVpZl9pbWFnZV9oYW5kbGUAMTVoZWlmX2NvbG9yc3BhY2UAMTFoZWlmX2Nocm9tYQBwcHBpaQAAAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAACgAAAFAxMGhlaWZfaW1hZ2UAMTBoZWlmX2ltYWdlADEyaGVpZl9jaGFubmVsAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWhFRQBQSzE3aGVpZl9pbWFnZV9oYW5kbGUAUEsxMGhlaWZfaW1hZ2UAMTVoZWlmX2Vycm9yX2NvZGUAMThoZWlmX3N1YmVycm9yX2NvZGUAMjNoZWlmX2NvbXByZXNzaW9uX2Zvcm1hdAAzNGhlaWZfY2hyb21hX2Rvd25zYW1wbGluZ19hbGdvcml0aG0AMzJoZWlmX2Nocm9tYV91cHNhbXBsaW5nX2FsZ29yaXRobQBQSzEyaGVpZl9jb250ZXh0AHYAdnAAcAB2cHBpAHZwcHAATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTFIZWlmQ29udGV4dE5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxN1N0cmVhbVJlYWRlcl9DQXBpTlNfOWFsbG9jYXRvcklTMV9FRUVFADE1SW1hZ2VJdGVtX0Vycm9yADdEZWNvZGVyAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTEyRGVjb2Rlcl9IRVZDTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTEyRGVjb2Rlcl9BVklGTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTExRGVjb2Rlcl9BVkNOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTZEZWNvZGVyX0pQRUcyMDAwTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTExRGVjb2Rlcl9WVkNOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTJEZWNvZGVyX0pQRUdOU185YWxsb2NhdG9ySVMxX0VFRUUAMTRJbWFnZUl0ZW1fSEVWQwA4Qm94X2h2Y0MATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMzZTRUlNZXNzYWdlX2RlcHRoX3JlcHJlc2VudGF0aW9uX2luZm9OU185YWxsb2NhdG9ySVMxX0VFRUUAMTJEZWNvZGVyX0hFVkMAMTRJbWFnZUl0ZW1fQVZJRgAxMkRlY29kZXJfQVZJRgA4Qm94X2F2MUMAOEJveF9hMW9wADhCb3hfYTFseAAxNEltYWdlSXRlbV9KUEVHADhCb3hfanBnQwBB4MkCC9MiAQEBAQABAQEAAQEBAAEBATEyRGVjb2Rlcl9KUEVHADE4SW1hZ2VJdGVtX0pQRUcyMDAwADE2RGVjb2Rlcl9KUEVHMjAwMAA4Qm94X2NkZWYAOEJveF9jbWFwADhCb3hfcGNscgA4Qm94X2oya0wAOEJveF9qMmtIADEzSW1hZ2VJdGVtX1ZWQwAxMURlY29kZXJfVlZDADhCb3hfdnZjQwAxM0ltYWdlSXRlbV9BVkMAOEJveF9hdmNDADExRGVjb2Rlcl9BVkMAOEJveF9tc2tDADE0SW1hZ2VJdGVtX21hc2sAOUltYWdlSXRlbQAxMUVycm9yQnVmZmVyAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTE0SW1hZ2VJdGVtX0pQRUdOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTRJbWFnZUl0ZW1fSEVWQ05TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxNEltYWdlSXRlbV9BVklGTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTEzSW1hZ2VJdGVtX1ZWQ05TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxM0ltYWdlSXRlbV9BVkNOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTVJbWFnZUl0ZW1fRXJyb3JOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMThJbWFnZUl0ZW1fSlBFRzIwMDBOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTRJbWFnZUl0ZW1fbWFza05TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxNEltYWdlSXRlbV9HcmlkTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTE3SW1hZ2VJdGVtX092ZXJsYXlOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTRJbWFnZUl0ZW1faWRlbk5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxNUltYWdlSXRlbV9UaWxlZE5TXzlhbGxvY2F0b3JJUzFfRUVFRQAAAAAAAwAAAAAAAAAxNEltYWdlSXRlbV9HcmlkADE3SW1hZ2VJdGVtX092ZXJsYXkAMTRJbWFnZUl0ZW1faWRlbgA4Qm94X3RpbEMAMTVJbWFnZUl0ZW1fVGlsZWQATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMThPcF9SR0JfdG9fUkdCMjRfMzJOU185YWxsb2NhdG9ySVMxX0VFRUUAMjRDb2xvckNvbnZlcnNpb25PcGVyYXRpb24ATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMThPcF9SR0IyNF8zMl90b19SR0JOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTVPcF9ZQ2JDcl90b19SR0JJdEVOU185YWxsb2NhdG9ySVMyX0VFRUUAMTVPcF9ZQ2JDcl90b19SR0JJdEUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTVPcF9ZQ2JDcl90b19SR0JJaEVOU185YWxsb2NhdG9ySVMyX0VFRUUAMTVPcF9ZQ2JDcl90b19SR0JJaEUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMjBPcF9ZQ2JDcjQyMF90b19SR0IyNE5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkyME9wX1lDYkNyNDIwX3RvX1JHQjMyTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTIzT3BfWUNiQ3I0MjBfdG9fUlJHR0JCYWFOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMjVPcF9SR0JfSERSX3RvX1JSR0dCQmFhX0JFTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTIxT3BfUkdCX3RvX1JSR0dCQmFhX0JFTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTE5T3BfbW9ub190b19ZQ2JDcjQyME5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxOU9wX21vbm9fdG9fUkdCMjRfMzJOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMjdPcF9SUkdHQkJhYV9zd2FwX2VuZGlhbm5lc3NOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMjVPcF9SUkdHQkJhYV9CRV90b19SR0JfSERSTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTIwT3BfUkdCMjRfMzJfdG9fWUNiQ3JOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTVPcF9SR0JfdG9fWUNiQ3JJaEVOU185YWxsb2NhdG9ySVMyX0VFRUUAMTVPcF9SR0JfdG9fWUNiQ3JJaEUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTVPcF9SR0JfdG9fWUNiQ3JJdEVOU185YWxsb2NhdG9ySVMyX0VFRUUAMTVPcF9SR0JfdG9fWUNiQ3JJdEUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMjdPcF9SUkdHQkJ4eF9IRFJfdG9fWUNiQ3I0MjBOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMjdPcF9SR0IyNF8zMl90b19ZQ2JDcjQ0NF9HQlJOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTlPcF9kcm9wX2FscGhhX3BsYW5lTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTE2T3BfdG9faGRyX3BsYW5lc05TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxNk9wX3RvX3Nkcl9wbGFuZXNOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMzJPcF9ZQ2JDcjQyMF9iaWxpbmVhcl90b19ZQ2JDcjQ0NEloRU5TXzlhbGxvY2F0b3JJUzJfRUVFRQAzMk9wX1lDYkNyNDIwX2JpbGluZWFyX3RvX1lDYkNyNDQ0SWhFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTMyT3BfWUNiQ3I0MjBfYmlsaW5lYXJfdG9fWUNiQ3I0NDRJdEVOU185YWxsb2NhdG9ySVMyX0VFRUUAMzJPcF9ZQ2JDcjQyMF9iaWxpbmVhcl90b19ZQ2JDcjQ0NEl0RQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkzMk9wX1lDYkNyNDIyX2JpbGluZWFyX3RvX1lDYkNyNDQ0SWhFTlNfOWFsbG9jYXRvcklTMl9FRUVFADMyT3BfWUNiQ3I0MjJfYmlsaW5lYXJfdG9fWUNiQ3I0NDRJaEUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMzJPcF9ZQ2JDcjQyMl9iaWxpbmVhcl90b19ZQ2JDcjQ0NEl0RU5TXzlhbGxvY2F0b3JJUzJfRUVFRQAzMk9wX1lDYkNyNDIyX2JpbGluZWFyX3RvX1lDYkNyNDQ0SXRFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTMxT3BfWUNiQ3I0NDRfdG9fWUNiQ3I0MjBfYXZlcmFnZUloRU5TXzlhbGxvY2F0b3JJUzJfRUVFRQAzMU9wX1lDYkNyNDQ0X3RvX1lDYkNyNDIwX2F2ZXJhZ2VJaEUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMzFPcF9ZQ2JDcjQ0NF90b19ZQ2JDcjQyMF9hdmVyYWdlSXRFTlNfOWFsbG9jYXRvcklTMl9FRUVFADMxT3BfWUNiQ3I0NDRfdG9fWUNiQ3I0MjBfYXZlcmFnZUl0RQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkzMU9wX1lDYkNyNDQ0X3RvX1lDYkNyNDIyX2F2ZXJhZ2VJaEVOU185YWxsb2NhdG9ySVMyX0VFRUUAMzFPcF9ZQ2JDcjQ0NF90b19ZQ2JDcjQyMl9hdmVyYWdlSWhFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTMxT3BfWUNiQ3I0NDRfdG9fWUNiQ3I0MjJfYXZlcmFnZUl0RU5TXzlhbGxvY2F0b3JJUzJfRUVFRQAzMU9wX1lDYkNyNDQ0X3RvX1lDYkNyNDIyX2F2ZXJhZ2VJdEUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMjlPcF9BbnlfUkdCX3RvX1lDYkNyXzQyMF9TaGFycE5TXzlhbGxvY2F0b3JJUzFfRUVFRQAyN09wX1JSR0dCQnh4X0hEUl90b19ZQ2JDcjQyMAAyME9wX1JHQjI0XzMyX3RvX1lDYkNyADI3T3BfUkdCMjRfMzJfdG9fWUNiQ3I0NDRfR0JSADI5T3BfQW55X1JHQl90b19ZQ2JDcl80MjBfU2hhcnAAMjBPcF9ZQ2JDcjQyMF90b19SR0IyNAAyME9wX1lDYkNyNDIwX3RvX1JHQjMyADIzT3BfWUNiQ3I0MjBfdG9fUlJHR0JCYWEAMThPcF9SR0JfdG9fUkdCMjRfMzIAMjVPcF9SR0JfSERSX3RvX1JSR0dCQmFhX0JFADIxT3BfUkdCX3RvX1JSR0dCQmFhX0JFADI1T3BfUlJHR0JCYWFfQkVfdG9fUkdCX0hEUgAxOE9wX1JHQjI0XzMyX3RvX1JHQgAyN09wX1JSR0dCQmFhX3N3YXBfZW5kaWFubmVzcwAAAAAOAAAADwAAAAwAAAANAAAAMTlPcF9tb25vX3RvX1lDYkNyNDIwADE5T3BfbW9ub190b19SR0IyNF8zMgAAAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAAMTZPcF90b19oZHJfcGxhbmVzADE2T3BfdG9fc2RyX3BsYW5lcwAxOU9wX2Ryb3BfYWxwaGFfcGxhbmUAU3VjY2VzcwBBvOwCCyoBAAAAAgAAAEwAAABUAAAAVAAAAFAAAABYAAAAWAAAAMBBAADIQQAAyEEAQfDsAgthxQAAALkAAADJAAAAxQAAALkAAADJAAAAlQAAAIYAAABuAAAAmgAAAHoAAACJAAAAjAAAAMYAAACpAAAAxgAAAIsAAACNAAAAnQAAAGsAAACLAAAAfgAAAGsAAACLAAAAfgBB4O0CC6EBuAAAAJoAAACLAAAAmgAAAJoAAACaAAAAiwAAAJoAAACaAAAAuAAAAJoAAAC3AAAAPwAAAJgAAACYAAAAAAAAAG8AAACNAAAAmQAAAG8AAABeAAAAigAAALYAAACaAAAAlQAAAGsAAACnAAAAmgAAAJUAAABcAAAApwAAAJoAAACZAAAAigAAAIoAAAB8AAAAigAAAF4AAADgAAAApwAAAHoAQZDvAgvVAW4AAABu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AyAAAAAaAAAAFQAAABEAAAANAAAACQAAAAUAAAACAAAAAAAAAP7////7////9/////P////v////6////+b////g////5v///+v////v////8/////f////7/////v///wAAAAACAAAABQAAAAkAAAANAAAAEQAAABUAAAAaAAAAIAAAAAAAAAAA8P//mvn//3L8//+K/f//Hv7//3r+///F/v//AP///8X+//96/v//Hv7//4r9//9y/P//mvn//wDw//8AAAAAAAAAAAEAAAAAAAAAAgAAAAEAAAACAAAAAAAAAAMAAAABAAAAAwAAAAIAAAADAAAAAQAAAAAAAAACAAAAAAAAAAIAAAABAAAAAwAAAAAAAAADAAAAAQAAAAMAAAACAAAAAAAAAHDHAAABBQAAAgUAADMwTW90aW9uVmVjdG9yQWNjZXNzX2RlMjY1X2ltYWdlADE4TW90aW9uVmVjdG9yQWNjZXNzAAAA3BsBAFHHAAAEHAEAMMcAAGjHAEGEjwMLvQIDAAAAAwAAAAIAAAAAAAAAAwAAAAQAAAAEAAAAAAEEBQIDBAUGBggIBwcIYwAAAAAaAAAACgAAAAEAAAAAAQICAgIDBQcICgwNDxESExQVFhcXGBgZGRobGxwcHR0eHwAAAAAAGMgAAJUEAAADBQAABAUAAAUFAAAyNXRocmVhZF90YXNrX3NsaWNlX3NlZ21lbnQABBwBAPzHAAB4vAAAAAAAAFTIAACVBAAABgUAAAcFAAAIBQAAMTl0aHJlYWRfdGFza19jdGJfcm93AAAABBwBADzIAAB4vAAAAQAAAAIAAAACAAAAAQAAAAEAAAACAAAAAQAAAAEAAAChKQAAhEcAAApGAAAAAAAAHQAAAB4AAAAfAAAAIAAAACEAAAAhAAAAIgAAACIAAAAjAAAAIwAAACQAAAAkAAAAJQBB0JEDCyYoAAAALQAAADMAAAA5AAAAQAAAAEgAAABJHQAAmkcAANsnAACCEABBhJIDC94GAQABAAwACwAKAAsAEAALACgAIQAYAAsAFAALACAACwBQACEAEgALAA8ACwBAACEAoABjAAQAAwADAAIAAgABAAAAAAABDQAAHD8AANBAAACzPgAA1UAAAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0loTlNfMTFjaGFyX3RyYWl0c0loRUVOU185YWxsb2NhdG9ySWhFRUVFAADcGwEAXMkAAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0l3TlNfMTFjaGFyX3RyYWl0c0l3RUVOU185YWxsb2NhdG9ySXdFRUVFAADcGwEApMkAAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0lEc05TXzExY2hhcl90cmFpdHNJRHNFRU5TXzlhbGxvY2F0b3JJRHNFRUVFAAAA3BsBAOzJAABOU3QzX18yMTJiYXNpY19zdHJpbmdJRGlOU18xMWNoYXJfdHJhaXRzSURpRUVOU185YWxsb2NhdG9ySURpRUVFRQAAANwbAQA4ygAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJY0VFAADcGwEAhMoAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWFFRQAA3BsBAKzKAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lzRUUAANwbAQDUygAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJdEVFAADcGwEA/MoAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWlFRQAA3BsBACTLAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lqRUUAANwbAQBMywAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJbEVFAADcGwEAdMsAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SW1FRQAA3BsBAJzLAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l4RUUAANwbAQDEywAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJeUVFAADcGwEA7MsAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWZFRQAA3BsBABTMAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lkRUUAANwbAQA8zABB8JgDC9cVAwAAAAQAAAAEAAAABgAAAIP5ogBETm4A/CkVANFXJwDdNPUAYtvAADyZlQBBkEMAY1H+ALveqwC3YcUAOm4kANJNQgBJBuAACeouAByS0QDrHf4AKbEcAOg+pwD1NYIARLsuAJzphAC0JnAAQX5fANaROQBTgzkAnPQ5AItfhAAo+b0A+B87AN7/lwAPmAUAES/vAApaiwBtH20Az342AAnLJwBG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cm1hdGlvbgBJbGxlZ2FsIGJ5dGUgc2VxdWVuY2UARG9tYWluIGVycm9yAFJlc3VsdCBub3QgcmVwcmVzZW50YWJsZQBOb3QgYSB0dHkAUGVybWlzc2lvbiBkZW5pZWQAT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQATm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQBObyBzdWNoIHByb2Nlc3MARmlsZSBleGlzdHMAVmFsdWUgdG9vIGxhcmdlIGZvciBkYXRhIHR5cGUATm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UAT3V0IG9mIG1lbW9yeQBSZXNvdXJjZSBidXN5AEludGVycnVwdGVkIHN5c3RlbSBjYWxsAFJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlAEludmFsaWQgc2VlawBDcm9zcy1kZXZpY2UgbGluawBSZWFkLW9ubHkgZmlsZSBzeXN0ZW0ARGlyZWN0b3J5IG5vdCBlbXB0eQBDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIAT3BlcmF0aW9uIHRpbWVkIG91dABDb25uZWN0aW9uIHJlZnVzZWQASG9zdCBpcyBkb3duAEhvc3QgaXMgdW5yZWFjaGFibGUAQWRkcmVzcyBpbiB1c2UAQnJva2VuIHBpcGUASS9PIGVycm9yAE5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MAQmxvY2sgZGV2aWNlIHJlcXVpcmVkAE5vIHN1Y2ggZGV2aWNlAE5vdCBhIGRpcmVjdG9yeQBJcyBhIGRpcmVjdG9yeQBUZXh0IGZpbGUgYnVzeQBFeGVjIGZvcm1hdCBlcnJvcgBJbnZhbGlkIGFyZ3VtZW50AEFyZ3VtZW50IGxpc3QgdG9vIGxvbmcAU3ltYm9saWMgbGluayBsb29wAEZpbGVuYW1lIHRvbyBsb25nAFRvbyBtYW55IG9wZW4gZmlsZXMgaW4gc3lzdGVtAE5vIGZpbGUgZGVzY3JpcHRvcnMgYXZhaWxhYmxlAEJhZCBmaWxlIGRlc2NyaXB0b3IATm8gY2hpbGQgcHJvY2VzcwBCYWQgYWRkcmVzcwBGaWxlIHRvbyBsYXJnZQBUb28gbWFueSBsaW5rcwBObyBsb2NrcyBhdmFpbGFibGUAUmVzb3VyY2UgZGVhZGxvY2sgd291bGQgb2NjdXIAU3RhdGUgbm90IHJlY292ZXJhYmxlAFByZXZpb3VzIG93bmVyIGRpZWQAT3BlcmF0aW9uIGNhbmNlbGVkAEZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZABObyBtZXNzYWdlIG9mIGRlc2lyZWQgdHlwZQBJZGVudGlmaWVyIHJlbW92ZWQARGV2aWNlIG5vdCBhIHN0cmVhbQBObyBkYXRhIGF2YWlsYWJsZQBEZXZpY2UgdGltZW91dABPdXQgb2Ygc3RyZWFtcyByZXNvdXJjZXMATGluayBoYXMgYmVlbiBzZXZlcmVkAFByb3RvY29sIGVycm9yAEJhZCBtZXNzYWdlAEZpbGUgZGVzY3JpcHRvciBpbiBiYWQgc3RhdGUATm90IGEgc29ja2V0AERlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQATWVzc2FnZSB0b28gbGFyZ2UAUHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0AFByb3RvY29sIG5vdCBhdmFpbGFibGUAUHJvdG9jb2wgbm90IHN1cHBvcnRlZABTb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkAE5vdCBzdXBwb3J0ZWQAUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWQAQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbABBZGRyZXNzIG5vdCBhdmFpbGFibGUATmV0d29yayBpcyBkb3duAE5ldHdvcmsgdW5yZWFjaGFibGUAQ29ubmVjdGlvbiByZXNldCBieSBuZXR3b3JrAENvbm5lY3Rpb24gYWJvcnRlZABObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlAFNvY2tldCBpcyBjb25uZWN0ZWQAU29ja2V0IG5vdCBjb25uZWN0ZWQAQ2Fubm90IHNlbmQgYWZ0ZXIgc29ja2V0IHNodXRkb3duAE9wZXJhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzAE9wZXJhdGlvbiBpbiBwcm9ncmVzcwBTdGFsZSBmaWxlIGhhbmRsZQBSZW1vdGUgSS9PIGVycm9yAFF1b3RhIGV4Y2VlZGVkAE5vIG1lZGl1bSBmb3VuZABXcm9uZyBtZWRpdW0gdHlwZQBNdWx0aWhvcCBhdHRlbXB0ZWQAUmVxdWlyZWQga2V5IG5vdCBhdmFpbGFibGUAS2V5IGhhcyBleHBpcmVkAEtleSBoYXMgYmVlbiByZXZva2VkAEtleSB3YXMgcmVqZWN0ZWQgYnkgc2VydmljZQBBor4DC5YBpQJbAPABtQWMBSUBgwYdA5QE/wDHAzEDCwa8AY8BfwPKBCsA2gavAEIDTgPcAQ4EFQChBg0BlAILAjgGZAK8Av8CXQPnBAsHzwLLBe8F2wXhAh4GRQKFAIICbANvBPEA8wMYBdkA2gNMBlQCewGdA70EAABRABUCuwCzA20A/wGFBC8F+QQ4AGUBRgGfALcGqAFzAlMBAEHovwMLDCEEAAAAAAAAAAAvAgBBiMADCwY1BEcEVgQAQZ7AAwsCoAQAQbLAAwsiRgVgBW4FYQYAAM8BAAAAAAAAAADJBukG+QYeBzkHSQdeBwBB4MADC0EZAAsAGRkZAAAAAAUAAAAAAAAJAAAAAAsAAAAAAAAAABkACgoZGRkDCgcAAQAJCxgAAAkGCwAACwAGGQAAABkZGQBBscEDCyEOAAAAAAAAAAAZAAsNGRkZAA0AAAIACQ4AAAAJAA4AAA4AQevBAwsBDABB98EDCxUTAAAAABMAAAAACQwAAAAAAAwAAAwAQaXCAwsBEABBscIDCxUPAAAABA8AAAAACRAAAAAAABAAABAAQd/CAwsBEgBB68IDCx4RAAAAABEAAAAACRIAAAAAABIAABIAABoAAAAaGhoAQaLDAwsOGgAAABoaGgAAAAAAAAkAQdPDAwsBFABB38MDCxUXAAAAABcAAAAACRQAAAAAABQAABQAQY3EAwsBFgBBmcQDCycVAAAAABUAAAAACRYAAAAAABYAABYAADAxMjM0NTY3ODlBQkNERUYAQeTEAwsCEQUAQYzFAwsI//////////8AQdTFAwvvFAIAAAADAAAABQAAAAcAAAALAAAADQAAABEAAAATAAAAFwAAAB0AAAAfAAAAJQAAACkAAAArAAAALwAAADUAAAA7AAAAPQAAAEMAAABHAAAASQAAAE8AAABTAAAAWQAAAGEAAABlAAAAZwAAAGsAAABtAAAAcQAAAH8AAACDAAAAiQAAAIsAAACVAAAAlwAAAJ0AAACjAAAApwAAAK0AAACzAAAAtQAAAL8AAADBAAAAxQAAAMcAAADTAAAAAQAAAAsAAAANAAAAEQAAABMAAAAXAAAAHQAAAB8AAAAlAAAAKQAAACsAAAAvAAAANQAAADsAAAA9AAAAQwAAAEcAAABJAAAATwAAAFMAAABZAAAAYQAAAGUAAABnAAAAawAAAG0AAABxAAAAeQAAAH8AAACDAAAAiQAAAIsAAACPAAAAlQAAAJcAAACdAAAAowAAAKcAAACpAAAArQAAALMAAAC1AAAAuwAAAL8AAADBAAAAxQAAAMcAAADRAAAAAAAAAOTmAAAUBQAAFQUAABYFAAAXBQAAGAUAABkFAAAaBQAAGwUAABwFAAAdBQAAHgUAAB8FAAAgBQAAIQUAAAgAAAAAAAAAHOcAACIFAAAjBQAA+P////j///8c5wAAJAUAACUFAACc5AAAsOQAAAQAAAAAAAAAZOcAACYFAAAnBQAA/P////z///9k5wAAKAUAACkFAADM5AAA4OQAAAwAAAAAAAAA/OcAACoFAAArBQAABAAAAPj////85wAALAUAAC0FAAD0////9P////znAAAuBQAALwUAAPzkAACI5wAAnOcAALDnAADE5wAAJOUAABDlAAAAAAAAmOgAADAFAAAxBQAAMgUAADMFAAA0BQAANQUAADYFAAA3BQAAOAUAADkFAAA6BQAAOwUAADwFAAA9BQAACAAAAAAAAADQ6AAAPgUAAD8FAAD4////+P///9DoAABABQAAQQUAAJTlAACo5QAABAAAAAAAAAAY6QAAQgUAAEMFAAD8/////P///xjpAABEBQAARQUAAMTlAADY5QAAAAAAAHTpAABGBQAARwUAABYFAAAXBQAASAUAAEkFAAAaBQAAGwUAABwFAABKBQAAHgUAAEsFAAAgBQAATAUAAAAAAADg7AAATQUAAE4FAABPBQAAUAUAAFEFAABSBQAAUwUAABsFAAAcBQAAVAUAAB4FAABVBQAAIAUAAFYFAAAAAAAApOYAAFcFAABYBQAATlN0M19fMjliYXNpY19pb3NJY05TXzExY2hhcl90cmFpdHNJY0VFRUUAAAAEHAEAeOYAABDtAABOU3QzX18yMTViYXNpY19zdHJlYW1idWZJY05TXzExY2hhcl90cmFpdHNJY0VFRUUAAAAA3BsBALDmAABOU3QzX18yMTNiYXNpY19pc3RyZWFtSWNOU18xMWNoYXJfdHJhaXRzSWNFRUVFAABgHAEA7OYAAAAAAAABAAAApOYAAAP0//9OU3QzX18yMTNiYXNpY19vc3RyZWFtSWNOU18xMWNoYXJfdHJhaXRzSWNFRUVFAABgHAEANOcAAAAAAAABAAAApOYAAAP0//8MAAAAAAAAABznAAAiBQAAIwUAAPT////0////HOcAACQFAAAlBQAABAAAAAAAAABk5wAAJgUAACcFAAD8/////P///2TnAAAoBQAAKQUAAE5TdDNfXzIxNGJhc2ljX2lvc3RyZWFtSWNOU18xMWNoYXJfdHJhaXRzSWNFRUVFAGAcAQDM5wAAAwAAAAIAAAAc5wAAAgAAAGTnAAACCAAAAAAAAFjoAABZBQAAWgUAAE5TdDNfXzI5YmFzaWNfaW9zSXdOU18xMWNoYXJfdHJhaXRzSXdFRUVFAAAABBwBACzoAAAQ7QAATlN0M19fMjE1YmFzaWNfc3RyZWFtYnVmSXdOU18xMWNoYXJfdHJhaXRzSXdFRUVFAAAAANwbAQBk6AAATlN0M19fMjEzYmFzaWNfaXN0cmVhbUl3TlNfMTFjaGFyX3RyYWl0c0l3RUVFRQAAYBwBAKDoAAAAAAAAAQAAAFjoAAAD9P//TlN0M19fMjEzYmFzaWNfb3N0cmVhbUl3TlNfMTFjaGFyX3RyYWl0c0l3RUVFRQAAYBwBAOjoAAAAAAAAAQAAAFjoAAAD9P//TlN0M19fMjE1YmFzaWNfc3RyaW5nYnVmSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUUAAAAEHAEAMOkAAOTmAABAAAAAAAAAALjqAABbBQAAXAUAADgAAAD4////uOoAAF0FAABeBQAAwP///8D///+46gAAXwUAAGAFAACM6QAA8OkAACzqAABA6gAAVOoAAGjqAAAY6gAABOoAALTpAACg6QAAQAAAAAAAAAD85wAAKgUAACsFAAA4AAAA+P////znAAAsBQAALQUAAMD////A/////OcAAC4FAAAvBQAAQAAAAAAAAAAc5wAAIgUAACMFAADA////wP///xznAAAkBQAAJQUAADgAAAAAAAAAZOcAACYFAAAnBQAAyP///8j///9k5wAAKAUAACkFAABOU3QzX18yMThiYXNpY19zdHJpbmdzdHJlYW1JY05TXzExY2hhcl90cmFpdHNJY0VFTlNfOWFsbG9jYXRvckljRUVFRQAAAAAEHAEAcOoAAPznAAA4AAAAAAAAAGzrAABhBQAAYgUAAMj////I////bOsAAGMFAABkBQAA0OoAAAjrAAAc6wAA5OoAADgAAAAAAAAAZOcAACYFAAAnBQAAyP///8j///9k5wAAKAUAACkFAABOU3QzX18yMTliYXNpY19vc3RyaW5nc3RyZWFtSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUUAAAAEHAEAJOsAAGTnAABsAAAAAAAAAAjsAABlBQAAZgUAAJT///+U////COwAAGcFAABoBQAAhOsAALzrAADQ6wAAmOsAAGwAAAAAAAAAHOcAACIFAAAjBQAAlP///5T///8c5wAAJAUAACUFAABOU3QzX18yMTRiYXNpY19pZnN0cmVhbUljTlNfMTFjaGFyX3RyYWl0c0ljRUVFRQAEHAEA2OsAABznAABoAAAAAAAAAKTsAABpBQAAagUAAJj///+Y////pOwAAGsFAABsBQAAIOwAAFjsAABs7AAANOwAAGgAAAAAAAAAZOcAACYFAAAnBQAAmP///5j///9k5wAAKAUAACkFAABOU3QzX18yMTRiYXNpY19vZnN0cmVhbUljTlNfMTFjaGFyX3RyYWl0c0ljRUVFRQAEHAEAdOwAAGTnAABOU3QzX18yMTNiYXNpY19maWxlYnVmSWNOU18xMWNoYXJfdHJhaXRzSWNFRUVFAAAEHAEAsOwAAOTmAAAAAAAAEO0AAG0FAABuBQAATlN0M19fMjhpb3NfYmFzZUUAAADcGwEA/OwAAOBRAQAAAAAA3hIElQAAAAD///////////////8g7QAAFAAAAEMuVVRGLTgAQfDaAwsCNO0AQZDbAwviBAIAAMADAADABAAAwAUAAMAGAADABwAAwAgAAMAJAADACgAAwAsAAMAMAADADQAAwA4AAMAPAADAEAAAwBEAAMASAADAEwAAwBQAAMAVAADAFgAAwBcAAMAYAADAGQAAwBoAAMAbAADAHAAAwB0AAMAeAADAHwAAwAAAALMBAADDAgAAwwMAAMMEAADDBQAAwwYAAMMHAADDCAAAwwkAAMMKAADDCwAAwwwAAMMNAADTDgAAww8AAMMAAAy7AQAMwwIADMMDAAzDBAAM2wAAAAC07gAAFAUAAHAFAABxBQAAFwUAABgFAAAZBQAAGgUAABsFAAAcBQAAcgUAAHMFAAB0BQAAIAUAACEFAABOU3QzX18yMTBfX3N0ZGluYnVmSWNFRQAEHAEAnO4AAOTmAAAAAAAAHO8AABQFAAB1BQAAdgUAABcFAAAYBQAAGQUAAHcFAAAbBQAAHAUAAB0FAAAeBQAAHwUAAHgFAAB5BQAATlN0M19fMjExX19zdGRvdXRidWZJY0VFAAAAAAQcAQAA7wAA5OYAAAAAAACA7wAAMAUAAHoFAAB7BQAAMwUAADQFAAA1BQAANgUAADcFAAA4BQAAfAUAAH0FAAB+BQAAPAUAAD0FAABOU3QzX18yMTBfX3N0ZGluYnVmSXdFRQAEHAEAaO8AAJjoAAAAAAAA6O8AADAFAAB/BQAAgAUAADMFAAA0BQAANQUAAIEFAAA3BQAAOAUAADkFAAA6BQAAOwUAAIIFAACDBQAATlN0M19fMjExX19zdGRvdXRidWZJd0VFAAAAAAQcAQDM7wAAmOgAQYDgAwuqA9F0ngBXnb0qgHBSD///PicKAAAAZAAAAOgDAAAQJwAAoIYBAEBCDwCAlpgAAOH1BRgAAAA1AAAAcQAAAGv////O+///kr///wAAAAAAAAAA/////////////////////////////////////////////////////////////////wABAgMEBQYHCAn/////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP///////8KCwwNDg8QERITFBUWFxgZGhscHR4fICEiI/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AAQIEBwMGBQAAAAAAAABMQ19DVFlQRQAAAABMQ19OVU1FUklDAABMQ19USU1FAAAAAABMQ19DT0xMQVRFAABMQ19NT05FVEFSWQBMQ19NRVNTQUdFUwCw8wBBtOcDC/kDAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAA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\");var Pe=(f={})=>(0,_6.default)({...f,wasmBinary:B6});return Ce(Me);})();\n\nlibheif = libheif.default;\nif (typeof exports === 'object' && typeof module === 'object') {\n  module.exports = libheif;\n}\n","module.exports = require('./libheif-wasm/libheif-bundle.js')();\n","const uint8ArrayUtf8ByteString = (array, start, end) => {\n  return String.fromCharCode(...array.slice(start, end));\n};\n\n// brands explained: https://github.com/strukturag/libheif/issues/83\n// code adapted from: https://github.com/sindresorhus/file-type/blob/6f901bd82b849a85ca4ddba9c9a4baacece63d31/core.js#L428-L438\nconst isHeic = (buffer) => {\n  const brandMajor = uint8ArrayUtf8ByteString(buffer, 8, 12).replace('\\0', ' ').trim();\n\n  switch (brandMajor) {\n    case 'mif1':\n      return true; // {ext: 'heic', mime: 'image/heif'};\n    case 'msf1':\n      return true; // {ext: 'heic', mime: 'image/heif-sequence'};\n    case 'heic':\n    case 'heix':\n      return true; // {ext: 'heic', mime: 'image/heic'};\n    case 'hevc':\n    case 'hevx':\n      return true; // {ext: 'heic', mime: 'image/heic-sequence'};\n  }\n\n  return false;\n};\n\nconst decodeImage = async (image) => {\n  const width = image.get_width();\n  const height = image.get_height();\n\n  const { data } = await new Promise((resolve, reject) => {\n    image.display({ data: new Uint8ClampedArray(width*height*4), width, height }, (displayData) => {\n      if (!displayData) {\n        return reject(new Error('HEIF processing error'));\n      }\n\n      resolve(displayData);\n    });\n  });\n\n  return { width, height, data };\n};\n\nmodule.exports = libheif => {\n  const decodeBuffer = async ({ buffer, all }) => {\n    if (!isHeic(buffer)) {\n      throw new TypeError('input buffer is not a HEIC image');\n    }\n\n    // wait for module to be initialized\n    // currently it is synchronous but it might be async in the future\n    await libheif.ready;\n\n    const decoder = new libheif.HeifDecoder();\n    const data = decoder.decode(buffer);\n\n    const dispose = () => {\n      for (const image of data) {\n        image.free();\n      }\n\n      decoder.decoder.delete();\n    };\n\n    if (!data.length) {\n      throw new Error('HEIF image not found');\n    }\n\n    if (!all) {\n      try {\n        return await decodeImage(data[0]);\n      } finally {\n        dispose();\n      }\n    }\n\n    return Object.defineProperty(data.map(image => {\n      return {\n        width: image.get_width(),\n        height: image.get_height(),\n        decode: async () => await decodeImage(image)\n      };\n    }), 'dispose', {\n      enumerable: false,\n      configurable: false,\n      writable: false,\n      value: dispose\n    });\n  };\n\n  return {\n    one: async ({ buffer }) => await decodeBuffer({ buffer, all: false }),\n    all: async ({ buffer }) => await decodeBuffer({ buffer, all: true })\n  };\n};\n","const libheif = require('libheif-js/wasm-bundle');\n\nconst { one, all } = require('./lib.js')(libheif);\n\nmodule.exports = one;\nmodule.exports.all = all;\n","/*\n  Copyright (c) 2008, Adobe Systems Incorporated\n  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 notice, \n    this list of conditions and the following disclaimer.\n  \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  \n  * Neither the name of Adobe Systems Incorporated 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 \"AS\n  IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR \n  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n/*\nJPEG encoder ported to JavaScript and optimized by Andreas Ritter, www.bytestrom.eu, 11/2009\n\nBasic GUI blocking jpeg encoder\n*/\n\nvar btoa = btoa || function(buf) {\n  return Buffer.from(buf).toString('base64');\n};\n\nfunction JPEGEncoder(quality) {\n  var self = this;\n\tvar fround = Math.round;\n\tvar ffloor = Math.floor;\n\tvar YTable = new Array(64);\n\tvar UVTable = new Array(64);\n\tvar fdtbl_Y = new Array(64);\n\tvar fdtbl_UV = new Array(64);\n\tvar YDC_HT;\n\tvar UVDC_HT;\n\tvar YAC_HT;\n\tvar UVAC_HT;\n\t\n\tvar bitcode = new Array(65535);\n\tvar category = new Array(65535);\n\tvar outputfDCTQuant = new Array(64);\n\tvar DU = new Array(64);\n\tvar byteout = [];\n\tvar bytenew = 0;\n\tvar bytepos = 7;\n\t\n\tvar YDU = new Array(64);\n\tvar UDU = new Array(64);\n\tvar VDU = new Array(64);\n\tvar clt = new Array(256);\n\tvar RGB_YUV_TABLE = new Array(2048);\n\tvar currentQuality;\n\t\n\tvar ZigZag = [\n\t\t\t 0, 1, 5, 6,14,15,27,28,\n\t\t\t 2, 4, 7,13,16,26,29,42,\n\t\t\t 3, 8,12,17,25,30,41,43,\n\t\t\t 9,11,18,24,31,40,44,53,\n\t\t\t10,19,23,32,39,45,52,54,\n\t\t\t20,22,33,38,46,51,55,60,\n\t\t\t21,34,37,47,50,56,59,61,\n\t\t\t35,36,48,49,57,58,62,63\n\t\t];\n\t\n\tvar std_dc_luminance_nrcodes = [0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0];\n\tvar std_dc_luminance_values = [0,1,2,3,4,5,6,7,8,9,10,11];\n\tvar std_ac_luminance_nrcodes = [0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,0x7d];\n\tvar std_ac_luminance_values = [\n\t\t\t0x01,0x02,0x03,0x00,0x04,0x11,0x05,0x12,\n\t\t\t0x21,0x31,0x41,0x06,0x13,0x51,0x61,0x07,\n\t\t\t0x22,0x71,0x14,0x32,0x81,0x91,0xa1,0x08,\n\t\t\t0x23,0x42,0xb1,0xc1,0x15,0x52,0xd1,0xf0,\n\t\t\t0x24,0x33,0x62,0x72,0x82,0x09,0x0a,0x16,\n\t\t\t0x17,0x18,0x19,0x1a,0x25,0x26,0x27,0x28,\n\t\t\t0x29,0x2a,0x34,0x35,0x36,0x37,0x38,0x39,\n\t\t\t0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49,\n\t\t\t0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59,\n\t\t\t0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,\n\t\t\t0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,\n\t\t\t0x7a,0x83,0x84,0x85,0x86,0x87,0x88,0x89,\n\t\t\t0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,\n\t\t\t0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,\n\t\t\t0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6,\n\t\t\t0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5,\n\t\t\t0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,\n\t\t\t0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xe1,0xe2,\n\t\t\t0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,\n\t\t\t0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,\n\t\t\t0xf9,0xfa\n\t\t];\n\t\n\tvar std_dc_chrominance_nrcodes = [0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0];\n\tvar std_dc_chrominance_values = [0,1,2,3,4,5,6,7,8,9,10,11];\n\tvar std_ac_chrominance_nrcodes = [0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,0x77];\n\tvar std_ac_chrominance_values = [\n\t\t\t0x00,0x01,0x02,0x03,0x11,0x04,0x05,0x21,\n\t\t\t0x31,0x06,0x12,0x41,0x51,0x07,0x61,0x71,\n\t\t\t0x13,0x22,0x32,0x81,0x08,0x14,0x42,0x91,\n\t\t\t0xa1,0xb1,0xc1,0x09,0x23,0x33,0x52,0xf0,\n\t\t\t0x15,0x62,0x72,0xd1,0x0a,0x16,0x24,0x34,\n\t\t\t0xe1,0x25,0xf1,0x17,0x18,0x19,0x1a,0x26,\n\t\t\t0x27,0x28,0x29,0x2a,0x35,0x36,0x37,0x38,\n\t\t\t0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48,\n\t\t\t0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58,\n\t\t\t0x59,0x5a,0x63,0x64,0x65,0x66,0x67,0x68,\n\t\t\t0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78,\n\t\t\t0x79,0x7a,0x82,0x83,0x84,0x85,0x86,0x87,\n\t\t\t0x88,0x89,0x8a,0x92,0x93,0x94,0x95,0x96,\n\t\t\t0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5,\n\t\t\t0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,\n\t\t\t0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xc2,0xc3,\n\t\t\t0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2,\n\t\t\t0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,\n\t\t\t0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,\n\t\t\t0xea,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,\n\t\t\t0xf9,0xfa\n\t\t];\n\t\n\tfunction initQuantTables(sf){\n\t\t\tvar YQT = [\n\t\t\t\t16, 11, 10, 16, 24, 40, 51, 61,\n\t\t\t\t12, 12, 14, 19, 26, 58, 60, 55,\n\t\t\t\t14, 13, 16, 24, 40, 57, 69, 56,\n\t\t\t\t14, 17, 22, 29, 51, 87, 80, 62,\n\t\t\t\t18, 22, 37, 56, 68,109,103, 77,\n\t\t\t\t24, 35, 55, 64, 81,104,113, 92,\n\t\t\t\t49, 64, 78, 87,103,121,120,101,\n\t\t\t\t72, 92, 95, 98,112,100,103, 99\n\t\t\t];\n\t\t\t\n\t\t\tfor (var i = 0; i < 64; i++) {\n\t\t\t\tvar t = ffloor((YQT[i]*sf+50)/100);\n\t\t\t\tif (t < 1) {\n\t\t\t\t\tt = 1;\n\t\t\t\t} else if (t > 255) {\n\t\t\t\t\tt = 255;\n\t\t\t\t}\n\t\t\t\tYTable[ZigZag[i]] = t;\n\t\t\t}\n\t\t\tvar UVQT = [\n\t\t\t\t17, 18, 24, 47, 99, 99, 99, 99,\n\t\t\t\t18, 21, 26, 66, 99, 99, 99, 99,\n\t\t\t\t24, 26, 56, 99, 99, 99, 99, 99,\n\t\t\t\t47, 66, 99, 99, 99, 99, 99, 99,\n\t\t\t\t99, 99, 99, 99, 99, 99, 99, 99,\n\t\t\t\t99, 99, 99, 99, 99, 99, 99, 99,\n\t\t\t\t99, 99, 99, 99, 99, 99, 99, 99,\n\t\t\t\t99, 99, 99, 99, 99, 99, 99, 99\n\t\t\t];\n\t\t\tfor (var j = 0; j < 64; j++) {\n\t\t\t\tvar u = ffloor((UVQT[j]*sf+50)/100);\n\t\t\t\tif (u < 1) {\n\t\t\t\t\tu = 1;\n\t\t\t\t} else if (u > 255) {\n\t\t\t\t\tu = 255;\n\t\t\t\t}\n\t\t\t\tUVTable[ZigZag[j]] = u;\n\t\t\t}\n\t\t\tvar aasf = [\n\t\t\t\t1.0, 1.387039845, 1.306562965, 1.175875602,\n\t\t\t\t1.0, 0.785694958, 0.541196100, 0.275899379\n\t\t\t];\n\t\t\tvar k = 0;\n\t\t\tfor (var row = 0; row < 8; row++)\n\t\t\t{\n\t\t\t\tfor (var col = 0; col < 8; col++)\n\t\t\t\t{\n\t\t\t\t\tfdtbl_Y[k]  = (1.0 / (YTable [ZigZag[k]] * aasf[row] * aasf[col] * 8.0));\n\t\t\t\t\tfdtbl_UV[k] = (1.0 / (UVTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0));\n\t\t\t\t\tk++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction computeHuffmanTbl(nrcodes, std_table){\n\t\t\tvar codevalue = 0;\n\t\t\tvar pos_in_table = 0;\n\t\t\tvar HT = new Array();\n\t\t\tfor (var k = 1; k <= 16; k++) {\n\t\t\t\tfor (var j = 1; j <= nrcodes[k]; j++) {\n\t\t\t\t\tHT[std_table[pos_in_table]] = [];\n\t\t\t\t\tHT[std_table[pos_in_table]][0] = codevalue;\n\t\t\t\t\tHT[std_table[pos_in_table]][1] = k;\n\t\t\t\t\tpos_in_table++;\n\t\t\t\t\tcodevalue++;\n\t\t\t\t}\n\t\t\t\tcodevalue*=2;\n\t\t\t}\n\t\t\treturn HT;\n\t\t}\n\t\t\n\t\tfunction initHuffmanTbl()\n\t\t{\n\t\t\tYDC_HT = computeHuffmanTbl(std_dc_luminance_nrcodes,std_dc_luminance_values);\n\t\t\tUVDC_HT = computeHuffmanTbl(std_dc_chrominance_nrcodes,std_dc_chrominance_values);\n\t\t\tYAC_HT = computeHuffmanTbl(std_ac_luminance_nrcodes,std_ac_luminance_values);\n\t\t\tUVAC_HT = computeHuffmanTbl(std_ac_chrominance_nrcodes,std_ac_chrominance_values);\n\t\t}\n\t\n\t\tfunction initCategoryNumber()\n\t\t{\n\t\t\tvar nrlower = 1;\n\t\t\tvar nrupper = 2;\n\t\t\tfor (var cat = 1; cat <= 15; cat++) {\n\t\t\t\t//Positive numbers\n\t\t\t\tfor (var nr = nrlower; nr<nrupper; nr++) {\n\t\t\t\t\tcategory[32767+nr] = cat;\n\t\t\t\t\tbitcode[32767+nr] = [];\n\t\t\t\t\tbitcode[32767+nr][1] = cat;\n\t\t\t\t\tbitcode[32767+nr][0] = nr;\n\t\t\t\t}\n\t\t\t\t//Negative numbers\n\t\t\t\tfor (var nrneg =-(nrupper-1); nrneg<=-nrlower; nrneg++) {\n\t\t\t\t\tcategory[32767+nrneg] = cat;\n\t\t\t\t\tbitcode[32767+nrneg] = [];\n\t\t\t\t\tbitcode[32767+nrneg][1] = cat;\n\t\t\t\t\tbitcode[32767+nrneg][0] = nrupper-1+nrneg;\n\t\t\t\t}\n\t\t\t\tnrlower <<= 1;\n\t\t\t\tnrupper <<= 1;\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction initRGBYUVTable() {\n\t\t\tfor(var i = 0; i < 256;i++) {\n\t\t\t\tRGB_YUV_TABLE[i]      \t\t=  19595 * i;\n\t\t\t\tRGB_YUV_TABLE[(i+ 256)>>0] \t=  38470 * i;\n\t\t\t\tRGB_YUV_TABLE[(i+ 512)>>0] \t=   7471 * i + 0x8000;\n\t\t\t\tRGB_YUV_TABLE[(i+ 768)>>0] \t= -11059 * i;\n\t\t\t\tRGB_YUV_TABLE[(i+1024)>>0] \t= -21709 * i;\n\t\t\t\tRGB_YUV_TABLE[(i+1280)>>0] \t=  32768 * i + 0x807FFF;\n\t\t\t\tRGB_YUV_TABLE[(i+1536)>>0] \t= -27439 * i;\n\t\t\t\tRGB_YUV_TABLE[(i+1792)>>0] \t= - 5329 * i;\n\t\t\t}\n\t\t}\n\t\t\n\t\t// IO functions\n\t\tfunction writeBits(bs)\n\t\t{\n\t\t\tvar value = bs[0];\n\t\t\tvar posval = bs[1]-1;\n\t\t\twhile ( posval >= 0 ) {\n\t\t\t\tif (value & (1 << posval) ) {\n\t\t\t\t\tbytenew |= (1 << bytepos);\n\t\t\t\t}\n\t\t\t\tposval--;\n\t\t\t\tbytepos--;\n\t\t\t\tif (bytepos < 0) {\n\t\t\t\t\tif (bytenew == 0xFF) {\n\t\t\t\t\t\twriteByte(0xFF);\n\t\t\t\t\t\twriteByte(0);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\twriteByte(bytenew);\n\t\t\t\t\t}\n\t\t\t\t\tbytepos=7;\n\t\t\t\t\tbytenew=0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\tfunction writeByte(value)\n\t\t{\n\t\t\t//byteout.push(clt[value]); // write char directly instead of converting later\n      byteout.push(value);\n\t\t}\n\t\n\t\tfunction writeWord(value)\n\t\t{\n\t\t\twriteByte((value>>8)&0xFF);\n\t\t\twriteByte((value   )&0xFF);\n\t\t}\n\t\t\n\t\t// DCT & quantization core\n\t\tfunction fDCTQuant(data, fdtbl)\n\t\t{\n\t\t\tvar d0, d1, d2, d3, d4, d5, d6, d7;\n\t\t\t/* Pass 1: process rows. */\n\t\t\tvar dataOff=0;\n\t\t\tvar i;\n\t\t\tvar I8 = 8;\n\t\t\tvar I64 = 64;\n\t\t\tfor (i=0; i<I8; ++i)\n\t\t\t{\n\t\t\t\td0 = data[dataOff];\n\t\t\t\td1 = data[dataOff+1];\n\t\t\t\td2 = data[dataOff+2];\n\t\t\t\td3 = data[dataOff+3];\n\t\t\t\td4 = data[dataOff+4];\n\t\t\t\td5 = data[dataOff+5];\n\t\t\t\td6 = data[dataOff+6];\n\t\t\t\td7 = data[dataOff+7];\n\t\t\t\t\n\t\t\t\tvar tmp0 = d0 + d7;\n\t\t\t\tvar tmp7 = d0 - d7;\n\t\t\t\tvar tmp1 = d1 + d6;\n\t\t\t\tvar tmp6 = d1 - d6;\n\t\t\t\tvar tmp2 = d2 + d5;\n\t\t\t\tvar tmp5 = d2 - d5;\n\t\t\t\tvar tmp3 = d3 + d4;\n\t\t\t\tvar tmp4 = d3 - d4;\n\t\n\t\t\t\t/* Even part */\n\t\t\t\tvar tmp10 = tmp0 + tmp3;\t/* phase 2 */\n\t\t\t\tvar tmp13 = tmp0 - tmp3;\n\t\t\t\tvar tmp11 = tmp1 + tmp2;\n\t\t\t\tvar tmp12 = tmp1 - tmp2;\n\t\n\t\t\t\tdata[dataOff] = tmp10 + tmp11; /* phase 3 */\n\t\t\t\tdata[dataOff+4] = tmp10 - tmp11;\n\t\n\t\t\t\tvar z1 = (tmp12 + tmp13) * 0.707106781; /* c4 */\n\t\t\t\tdata[dataOff+2] = tmp13 + z1; /* phase 5 */\n\t\t\t\tdata[dataOff+6] = tmp13 - z1;\n\t\n\t\t\t\t/* Odd part */\n\t\t\t\ttmp10 = tmp4 + tmp5; /* phase 2 */\n\t\t\t\ttmp11 = tmp5 + tmp6;\n\t\t\t\ttmp12 = tmp6 + tmp7;\n\t\n\t\t\t\t/* The rotator is modified from fig 4-8 to avoid extra negations. */\n\t\t\t\tvar z5 = (tmp10 - tmp12) * 0.382683433; /* c6 */\n\t\t\t\tvar z2 = 0.541196100 * tmp10 + z5; /* c2-c6 */\n\t\t\t\tvar z4 = 1.306562965 * tmp12 + z5; /* c2+c6 */\n\t\t\t\tvar z3 = tmp11 * 0.707106781; /* c4 */\n\t\n\t\t\t\tvar z11 = tmp7 + z3;\t/* phase 5 */\n\t\t\t\tvar z13 = tmp7 - z3;\n\t\n\t\t\t\tdata[dataOff+5] = z13 + z2;\t/* phase 6 */\n\t\t\t\tdata[dataOff+3] = z13 - z2;\n\t\t\t\tdata[dataOff+1] = z11 + z4;\n\t\t\t\tdata[dataOff+7] = z11 - z4;\n\t\n\t\t\t\tdataOff += 8; /* advance pointer to next row */\n\t\t\t}\n\t\n\t\t\t/* Pass 2: process columns. */\n\t\t\tdataOff = 0;\n\t\t\tfor (i=0; i<I8; ++i)\n\t\t\t{\n\t\t\t\td0 = data[dataOff];\n\t\t\t\td1 = data[dataOff + 8];\n\t\t\t\td2 = data[dataOff + 16];\n\t\t\t\td3 = data[dataOff + 24];\n\t\t\t\td4 = data[dataOff + 32];\n\t\t\t\td5 = data[dataOff + 40];\n\t\t\t\td6 = data[dataOff + 48];\n\t\t\t\td7 = data[dataOff + 56];\n\t\t\t\t\n\t\t\t\tvar tmp0p2 = d0 + d7;\n\t\t\t\tvar tmp7p2 = d0 - d7;\n\t\t\t\tvar tmp1p2 = d1 + d6;\n\t\t\t\tvar tmp6p2 = d1 - d6;\n\t\t\t\tvar tmp2p2 = d2 + d5;\n\t\t\t\tvar tmp5p2 = d2 - d5;\n\t\t\t\tvar tmp3p2 = d3 + d4;\n\t\t\t\tvar tmp4p2 = d3 - d4;\n\t\n\t\t\t\t/* Even part */\n\t\t\t\tvar tmp10p2 = tmp0p2 + tmp3p2;\t/* phase 2 */\n\t\t\t\tvar tmp13p2 = tmp0p2 - tmp3p2;\n\t\t\t\tvar tmp11p2 = tmp1p2 + tmp2p2;\n\t\t\t\tvar tmp12p2 = tmp1p2 - tmp2p2;\n\t\n\t\t\t\tdata[dataOff] = tmp10p2 + tmp11p2; /* phase 3 */\n\t\t\t\tdata[dataOff+32] = tmp10p2 - tmp11p2;\n\t\n\t\t\t\tvar z1p2 = (tmp12p2 + tmp13p2) * 0.707106781; /* c4 */\n\t\t\t\tdata[dataOff+16] = tmp13p2 + z1p2; /* phase 5 */\n\t\t\t\tdata[dataOff+48] = tmp13p2 - z1p2;\n\t\n\t\t\t\t/* Odd part */\n\t\t\t\ttmp10p2 = tmp4p2 + tmp5p2; /* phase 2 */\n\t\t\t\ttmp11p2 = tmp5p2 + tmp6p2;\n\t\t\t\ttmp12p2 = tmp6p2 + tmp7p2;\n\t\n\t\t\t\t/* The rotator is modified from fig 4-8 to avoid extra negations. */\n\t\t\t\tvar z5p2 = (tmp10p2 - tmp12p2) * 0.382683433; /* c6 */\n\t\t\t\tvar z2p2 = 0.541196100 * tmp10p2 + z5p2; /* c2-c6 */\n\t\t\t\tvar z4p2 = 1.306562965 * tmp12p2 + z5p2; /* c2+c6 */\n\t\t\t\tvar z3p2 = tmp11p2 * 0.707106781; /* c4 */\n\t\n\t\t\t\tvar z11p2 = tmp7p2 + z3p2;\t/* phase 5 */\n\t\t\t\tvar z13p2 = tmp7p2 - z3p2;\n\t\n\t\t\t\tdata[dataOff+40] = z13p2 + z2p2; /* phase 6 */\n\t\t\t\tdata[dataOff+24] = z13p2 - z2p2;\n\t\t\t\tdata[dataOff+ 8] = z11p2 + z4p2;\n\t\t\t\tdata[dataOff+56] = z11p2 - z4p2;\n\t\n\t\t\t\tdataOff++; /* advance pointer to next column */\n\t\t\t}\n\t\n\t\t\t// Quantize/descale the coefficients\n\t\t\tvar fDCTQuant;\n\t\t\tfor (i=0; i<I64; ++i)\n\t\t\t{\n\t\t\t\t// Apply the quantization and scaling factor & Round to nearest integer\n\t\t\t\tfDCTQuant = data[i]*fdtbl[i];\n\t\t\t\toutputfDCTQuant[i] = (fDCTQuant > 0.0) ? ((fDCTQuant + 0.5)|0) : ((fDCTQuant - 0.5)|0);\n\t\t\t\t//outputfDCTQuant[i] = fround(fDCTQuant);\n\n\t\t\t}\n\t\t\treturn outputfDCTQuant;\n\t\t}\n\t\t\n\t\tfunction writeAPP0()\n\t\t{\n\t\t\twriteWord(0xFFE0); // marker\n\t\t\twriteWord(16); // length\n\t\t\twriteByte(0x4A); // J\n\t\t\twriteByte(0x46); // F\n\t\t\twriteByte(0x49); // I\n\t\t\twriteByte(0x46); // F\n\t\t\twriteByte(0); // = \"JFIF\",'\\0'\n\t\t\twriteByte(1); // versionhi\n\t\t\twriteByte(1); // versionlo\n\t\t\twriteByte(0); // xyunits\n\t\t\twriteWord(1); // xdensity\n\t\t\twriteWord(1); // ydensity\n\t\t\twriteByte(0); // thumbnwidth\n\t\t\twriteByte(0); // thumbnheight\n\t\t}\n\n\t\tfunction writeAPP1(exifBuffer) {\n\t\t\tif (!exifBuffer) return;\n\n\t\t\twriteWord(0xFFE1); // APP1 marker\n\n\t\t\tif (exifBuffer[0] === 0x45 &&\n\t\t\t\t\texifBuffer[1] === 0x78 &&\n\t\t\t\t\texifBuffer[2] === 0x69 &&\n\t\t\t\t\texifBuffer[3] === 0x66) {\n\t\t\t\t// Buffer already starts with EXIF, just use it directly\n\t\t\t\twriteWord(exifBuffer.length + 2); // length is buffer + length itself!\n\t\t\t} else {\n\t\t\t\t// Buffer doesn't start with EXIF, write it for them\n\t\t\t\twriteWord(exifBuffer.length + 5 + 2); // length is buffer + EXIF\\0 + length itself!\n\t\t\t\twriteByte(0x45); // E\n\t\t\t\twriteByte(0x78); // X\n\t\t\t\twriteByte(0x69); // I\n\t\t\t\twriteByte(0x66); // F\n\t\t\t\twriteByte(0); // = \"EXIF\",'\\0'\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < exifBuffer.length; i++) {\n\t\t\t\twriteByte(exifBuffer[i]);\n\t\t\t}\n\t\t}\n\n\t\tfunction writeSOF0(width, height)\n\t\t{\n\t\t\twriteWord(0xFFC0); // marker\n\t\t\twriteWord(17);   // length, truecolor YUV JPG\n\t\t\twriteByte(8);    // precision\n\t\t\twriteWord(height);\n\t\t\twriteWord(width);\n\t\t\twriteByte(3);    // nrofcomponents\n\t\t\twriteByte(1);    // IdY\n\t\t\twriteByte(0x11); // HVY\n\t\t\twriteByte(0);    // QTY\n\t\t\twriteByte(2);    // IdU\n\t\t\twriteByte(0x11); // HVU\n\t\t\twriteByte(1);    // QTU\n\t\t\twriteByte(3);    // IdV\n\t\t\twriteByte(0x11); // HVV\n\t\t\twriteByte(1);    // QTV\n\t\t}\n\t\n\t\tfunction writeDQT()\n\t\t{\n\t\t\twriteWord(0xFFDB); // marker\n\t\t\twriteWord(132);\t   // length\n\t\t\twriteByte(0);\n\t\t\tfor (var i=0; i<64; i++) {\n\t\t\t\twriteByte(YTable[i]);\n\t\t\t}\n\t\t\twriteByte(1);\n\t\t\tfor (var j=0; j<64; j++) {\n\t\t\t\twriteByte(UVTable[j]);\n\t\t\t}\n\t\t}\n\t\n\t\tfunction writeDHT()\n\t\t{\n\t\t\twriteWord(0xFFC4); // marker\n\t\t\twriteWord(0x01A2); // length\n\t\n\t\t\twriteByte(0); // HTYDCinfo\n\t\t\tfor (var i=0; i<16; i++) {\n\t\t\t\twriteByte(std_dc_luminance_nrcodes[i+1]);\n\t\t\t}\n\t\t\tfor (var j=0; j<=11; j++) {\n\t\t\t\twriteByte(std_dc_luminance_values[j]);\n\t\t\t}\n\t\n\t\t\twriteByte(0x10); // HTYACinfo\n\t\t\tfor (var k=0; k<16; k++) {\n\t\t\t\twriteByte(std_ac_luminance_nrcodes[k+1]);\n\t\t\t}\n\t\t\tfor (var l=0; l<=161; l++) {\n\t\t\t\twriteByte(std_ac_luminance_values[l]);\n\t\t\t}\n\t\n\t\t\twriteByte(1); // HTUDCinfo\n\t\t\tfor (var m=0; m<16; m++) {\n\t\t\t\twriteByte(std_dc_chrominance_nrcodes[m+1]);\n\t\t\t}\n\t\t\tfor (var n=0; n<=11; n++) {\n\t\t\t\twriteByte(std_dc_chrominance_values[n]);\n\t\t\t}\n\t\n\t\t\twriteByte(0x11); // HTUACinfo\n\t\t\tfor (var o=0; o<16; o++) {\n\t\t\t\twriteByte(std_ac_chrominance_nrcodes[o+1]);\n\t\t\t}\n\t\t\tfor (var p=0; p<=161; p++) {\n\t\t\t\twriteByte(std_ac_chrominance_values[p]);\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction writeCOM(comments)\n\t\t{\n\t\t\tif (typeof comments === \"undefined\" || comments.constructor !== Array) return;\n\t\t\tcomments.forEach(e => {\n\t\t\t\tif (typeof e !== \"string\") return;\n\t\t\t\twriteWord(0xFFFE); // marker\n\t\t\t\tvar l = e.length;\n\t\t\t\twriteWord(l + 2); // length itself as well\n\t\t\t\tvar i;\n\t\t\t\tfor (i = 0; i < l; i++)\n\t\t\t\t\twriteByte(e.charCodeAt(i));\n\t\t\t});\n\t\t}\n\t\n\t\tfunction writeSOS()\n\t\t{\n\t\t\twriteWord(0xFFDA); // marker\n\t\t\twriteWord(12); // length\n\t\t\twriteByte(3); // nrofcomponents\n\t\t\twriteByte(1); // IdY\n\t\t\twriteByte(0); // HTY\n\t\t\twriteByte(2); // IdU\n\t\t\twriteByte(0x11); // HTU\n\t\t\twriteByte(3); // IdV\n\t\t\twriteByte(0x11); // HTV\n\t\t\twriteByte(0); // Ss\n\t\t\twriteByte(0x3f); // Se\n\t\t\twriteByte(0); // Bf\n\t\t}\n\t\t\n\t\tfunction processDU(CDU, fdtbl, DC, HTDC, HTAC){\n\t\t\tvar EOB = HTAC[0x00];\n\t\t\tvar M16zeroes = HTAC[0xF0];\n\t\t\tvar pos;\n\t\t\tvar I16 = 16;\n\t\t\tvar I63 = 63;\n\t\t\tvar I64 = 64;\n\t\t\tvar DU_DCT = fDCTQuant(CDU, fdtbl);\n\t\t\t//ZigZag reorder\n\t\t\tfor (var j=0;j<I64;++j) {\n\t\t\t\tDU[ZigZag[j]]=DU_DCT[j];\n\t\t\t}\n\t\t\tvar Diff = DU[0] - DC; DC = DU[0];\n\t\t\t//Encode DC\n\t\t\tif (Diff==0) {\n\t\t\t\twriteBits(HTDC[0]); // Diff might be 0\n\t\t\t} else {\n\t\t\t\tpos = 32767+Diff;\n\t\t\t\twriteBits(HTDC[category[pos]]);\n\t\t\t\twriteBits(bitcode[pos]);\n\t\t\t}\n\t\t\t//Encode ACs\n\t\t\tvar end0pos = 63; // was const... which is crazy\n\t\t\tfor (; (end0pos>0)&&(DU[end0pos]==0); end0pos--) {};\n\t\t\t//end0pos = first element in reverse order !=0\n\t\t\tif ( end0pos == 0) {\n\t\t\t\twriteBits(EOB);\n\t\t\t\treturn DC;\n\t\t\t}\n\t\t\tvar i = 1;\n\t\t\tvar lng;\n\t\t\twhile ( i <= end0pos ) {\n\t\t\t\tvar startpos = i;\n\t\t\t\tfor (; (DU[i]==0) && (i<=end0pos); ++i) {}\n\t\t\t\tvar nrzeroes = i-startpos;\n\t\t\t\tif ( nrzeroes >= I16 ) {\n\t\t\t\t\tlng = nrzeroes>>4;\n\t\t\t\t\tfor (var nrmarker=1; nrmarker <= lng; ++nrmarker)\n\t\t\t\t\t\twriteBits(M16zeroes);\n\t\t\t\t\tnrzeroes = nrzeroes&0xF;\n\t\t\t\t}\n\t\t\t\tpos = 32767+DU[i];\n\t\t\t\twriteBits(HTAC[(nrzeroes<<4)+category[pos]]);\n\t\t\t\twriteBits(bitcode[pos]);\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tif ( end0pos != I63 ) {\n\t\t\t\twriteBits(EOB);\n\t\t\t}\n\t\t\treturn DC;\n\t\t}\n\n\t\tfunction initCharLookupTable(){\n\t\t\tvar sfcc = String.fromCharCode;\n\t\t\tfor(var i=0; i < 256; i++){ ///// ACHTUNG // 255\n\t\t\t\tclt[i] = sfcc(i);\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.encode = function(image,quality) // image data object\n\t\t{\n\t\t\tvar time_start = new Date().getTime();\n\t\t\t\n\t\t\tif(quality) setQuality(quality);\n\t\t\t\n\t\t\t// Initialize bit writer\n\t\t\tbyteout = new Array();\n\t\t\tbytenew=0;\n\t\t\tbytepos=7;\n\t\n\t\t\t// Add JPEG headers\n\t\t\twriteWord(0xFFD8); // SOI\n\t\t\twriteAPP0();\n\t\t\twriteCOM(image.comments);\n\t\t\twriteAPP1(image.exifBuffer);\n\t\t\twriteDQT();\n\t\t\twriteSOF0(image.width,image.height);\n\t\t\twriteDHT();\n\t\t\twriteSOS();\n\n\t\n\t\t\t// Encode 8x8 macroblocks\n\t\t\tvar DCY=0;\n\t\t\tvar DCU=0;\n\t\t\tvar DCV=0;\n\t\t\t\n\t\t\tbytenew=0;\n\t\t\tbytepos=7;\n\t\t\t\n\t\t\t\n\t\t\tthis.encode.displayName = \"_encode_\";\n\n\t\t\tvar imageData = image.data;\n\t\t\tvar width = image.width;\n\t\t\tvar height = image.height;\n\n\t\t\tvar quadWidth = width*4;\n\t\t\tvar tripleWidth = width*3;\n\t\t\t\n\t\t\tvar x, y = 0;\n\t\t\tvar r, g, b;\n\t\t\tvar start,p, col,row,pos;\n\t\t\twhile(y < height){\n\t\t\t\tx = 0;\n\t\t\t\twhile(x < quadWidth){\n\t\t\t\tstart = quadWidth * y + x;\n\t\t\t\tp = start;\n\t\t\t\tcol = -1;\n\t\t\t\trow = 0;\n\t\t\t\t\n\t\t\t\tfor(pos=0; pos < 64; pos++){\n\t\t\t\t\trow = pos >> 3;// /8\n\t\t\t\t\tcol = ( pos & 7 ) * 4; // %8\n\t\t\t\t\tp = start + ( row * quadWidth ) + col;\t\t\n\t\t\t\t\t\n\t\t\t\t\tif(y+row >= height){ // padding bottom\n\t\t\t\t\t\tp-= (quadWidth*(y+1+row-height));\n\t\t\t\t\t}\n\n\t\t\t\t\tif(x+col >= quadWidth){ // padding right\t\n\t\t\t\t\t\tp-= ((x+col) - quadWidth +4)\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tr = imageData[ p++ ];\n\t\t\t\t\tg = imageData[ p++ ];\n\t\t\t\t\tb = imageData[ p++ ];\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t/* // calculate YUV values dynamically\n\t\t\t\t\tYDU[pos]=((( 0.29900)*r+( 0.58700)*g+( 0.11400)*b))-128; //-0x80\n\t\t\t\t\tUDU[pos]=(((-0.16874)*r+(-0.33126)*g+( 0.50000)*b));\n\t\t\t\t\tVDU[pos]=((( 0.50000)*r+(-0.41869)*g+(-0.08131)*b));\n\t\t\t\t\t*/\n\t\t\t\t\t\n\t\t\t\t\t// use lookup table (slightly faster)\n\t\t\t\t\tYDU[pos] = ((RGB_YUV_TABLE[r]             + RGB_YUV_TABLE[(g +  256)>>0] + RGB_YUV_TABLE[(b +  512)>>0]) >> 16)-128;\n\t\t\t\t\tUDU[pos] = ((RGB_YUV_TABLE[(r +  768)>>0] + RGB_YUV_TABLE[(g + 1024)>>0] + RGB_YUV_TABLE[(b + 1280)>>0]) >> 16)-128;\n\t\t\t\t\tVDU[pos] = ((RGB_YUV_TABLE[(r + 1280)>>0] + RGB_YUV_TABLE[(g + 1536)>>0] + RGB_YUV_TABLE[(b + 1792)>>0]) >> 16)-128;\n\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tDCY = processDU(YDU, fdtbl_Y, DCY, YDC_HT, YAC_HT);\n\t\t\t\tDCU = processDU(UDU, fdtbl_UV, DCU, UVDC_HT, UVAC_HT);\n\t\t\t\tDCV = processDU(VDU, fdtbl_UV, DCV, UVDC_HT, UVAC_HT);\n\t\t\t\tx+=32;\n\t\t\t\t}\n\t\t\t\ty+=8;\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t////////////////////////////////////////////////////////////////\n\t\n\t\t\t// Do the bit alignment of the EOI marker\n\t\t\tif ( bytepos >= 0 ) {\n\t\t\t\tvar fillbits = [];\n\t\t\t\tfillbits[1] = bytepos+1;\n\t\t\t\tfillbits[0] = (1<<(bytepos+1))-1;\n\t\t\t\twriteBits(fillbits);\n\t\t\t}\n\t\n\t\t\twriteWord(0xFFD9); //EOI\n\n\t\t\tif (typeof module === 'undefined') return new Uint8Array(byteout);\n      return Buffer.from(byteout);\n\n\t\t\tvar jpegDataUri = 'data:image/jpeg;base64,' + btoa(byteout.join(''));\n\t\t\t\n\t\t\tbyteout = [];\n\t\t\t\n\t\t\t// benchmarking\n\t\t\tvar duration = new Date().getTime() - time_start;\n    \t\t//console.log('Encoding time: '+ duration + 'ms');\n    \t\t//\n\t\t\t\n\t\t\treturn jpegDataUri\t\t\t\n\t}\n\t\n\tfunction setQuality(quality){\n\t\tif (quality <= 0) {\n\t\t\tquality = 1;\n\t\t}\n\t\tif (quality > 100) {\n\t\t\tquality = 100;\n\t\t}\n\t\t\n\t\tif(currentQuality == quality) return // don't recalc if unchanged\n\t\t\n\t\tvar sf = 0;\n\t\tif (quality < 50) {\n\t\t\tsf = Math.floor(5000 / quality);\n\t\t} else {\n\t\t\tsf = Math.floor(200 - quality*2);\n\t\t}\n\t\t\n\t\tinitQuantTables(sf);\n\t\tcurrentQuality = quality;\n\t\t//console.log('Quality set to: '+quality +'%');\n\t}\n\t\n\tfunction init(){\n\t\tvar time_start = new Date().getTime();\n\t\tif(!quality) quality = 50;\n\t\t// Create tables\n\t\tinitCharLookupTable()\n\t\tinitHuffmanTbl();\n\t\tinitCategoryNumber();\n\t\tinitRGBYUVTable();\n\t\t\n\t\tsetQuality(quality);\n\t\tvar duration = new Date().getTime() - time_start;\n    \t//console.log('Initialization '+ duration + 'ms');\n\t}\n\t\n\tinit();\n\t\n};\n\nif (typeof module !== 'undefined') {\n\tmodule.exports = encode;\n} else if (typeof window !== 'undefined') {\n\twindow['jpeg-js'] = window['jpeg-js'] || {};\n\twindow['jpeg-js'].encode = encode;\n}\n\nfunction encode(imgData, qu) {\n  if (typeof qu === 'undefined') qu = 50;\n  var encoder = new JPEGEncoder(qu);\n\tvar data = encoder.encode(imgData, qu);\n  return {\n    data: data,\n    width: imgData.width,\n    height: imgData.height,\n  };\n}\n\n// helper function to get the imageData of an existing image on the current page.\nfunction getImageDataFromImage(idOrElement){\n\tvar theImg = (typeof(idOrElement)=='string')? document.getElementById(idOrElement):idOrElement;\n\tvar cvs = document.createElement('canvas');\n\tcvs.width = theImg.width;\n\tcvs.height = theImg.height;\n\tvar ctx = cvs.getContext(\"2d\");\n\tctx.drawImage(theImg,0,0);\n\t\n\treturn (ctx.getImageData(0, 0, cvs.width, cvs.height));\n}\n","/* -*- tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /\n/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */\n/*\n   Copyright 2011 notmasteryet\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n*/\n\n// - The JPEG specification can be found in the ITU CCITT Recommendation T.81\n//   (www.w3.org/Graphics/JPEG/itu-t81.pdf)\n// - The JFIF specification can be found in the JPEG File Interchange Format\n//   (www.w3.org/Graphics/JPEG/jfif3.pdf)\n// - The Adobe Application-Specific JPEG markers in the Supporting the DCT Filters\n//   in PostScript Level 2, Technical Note #5116\n//   (partners.adobe.com/public/developer/en/ps/sdk/5116.DCT_Filter.pdf)\n\nvar JpegImage = (function jpegImage() {\n  \"use strict\";\n  var dctZigZag = new Int32Array([\n     0,\n     1,  8,\n    16,  9,  2,\n     3, 10, 17, 24,\n    32, 25, 18, 11, 4,\n     5, 12, 19, 26, 33, 40,\n    48, 41, 34, 27, 20, 13,  6,\n     7, 14, 21, 28, 35, 42, 49, 56,\n    57, 50, 43, 36, 29, 22, 15,\n    23, 30, 37, 44, 51, 58,\n    59, 52, 45, 38, 31,\n    39, 46, 53, 60,\n    61, 54, 47,\n    55, 62,\n    63\n  ]);\n\n  var dctCos1  =  4017   // cos(pi/16)\n  var dctSin1  =   799   // sin(pi/16)\n  var dctCos3  =  3406   // cos(3*pi/16)\n  var dctSin3  =  2276   // sin(3*pi/16)\n  var dctCos6  =  1567   // cos(6*pi/16)\n  var dctSin6  =  3784   // sin(6*pi/16)\n  var dctSqrt2 =  5793   // sqrt(2)\n  var dctSqrt1d2 = 2896  // sqrt(2) / 2\n\n  function constructor() {\n  }\n\n  function buildHuffmanTable(codeLengths, values) {\n    var k = 0, code = [], i, j, length = 16;\n    while (length > 0 && !codeLengths[length - 1])\n      length--;\n    code.push({children: [], index: 0});\n    var p = code[0], q;\n    for (i = 0; i < length; i++) {\n      for (j = 0; j < codeLengths[i]; j++) {\n        p = code.pop();\n        p.children[p.index] = values[k];\n        while (p.index > 0) {\n          if (code.length === 0)\n            throw new Error('Could not recreate Huffman Table');\n          p = code.pop();\n        }\n        p.index++;\n        code.push(p);\n        while (code.length <= i) {\n          code.push(q = {children: [], index: 0});\n          p.children[p.index] = q.children;\n          p = q;\n        }\n        k++;\n      }\n      if (i + 1 < length) {\n        // p here points to last code\n        code.push(q = {children: [], index: 0});\n        p.children[p.index] = q.children;\n        p = q;\n      }\n    }\n    return code[0].children;\n  }\n\n  function decodeScan(data, offset,\n                      frame, components, resetInterval,\n                      spectralStart, spectralEnd,\n                      successivePrev, successive, opts) {\n    var precision = frame.precision;\n    var samplesPerLine = frame.samplesPerLine;\n    var scanLines = frame.scanLines;\n    var mcusPerLine = frame.mcusPerLine;\n    var progressive = frame.progressive;\n    var maxH = frame.maxH, maxV = frame.maxV;\n\n    var startOffset = offset, bitsData = 0, bitsCount = 0;\n    function readBit() {\n      if (bitsCount > 0) {\n        bitsCount--;\n        return (bitsData >> bitsCount) & 1;\n      }\n      bitsData = data[offset++];\n      if (bitsData == 0xFF) {\n        var nextByte = data[offset++];\n        if (nextByte) {\n          throw new Error(\"unexpected marker: \" + ((bitsData << 8) | nextByte).toString(16));\n        }\n        // unstuff 0\n      }\n      bitsCount = 7;\n      return bitsData >>> 7;\n    }\n    function decodeHuffman(tree) {\n      var node = tree, bit;\n      while ((bit = readBit()) !== null) {\n        node = node[bit];\n        if (typeof node === 'number')\n          return node;\n        if (typeof node !== 'object')\n          throw new Error(\"invalid huffman sequence\");\n      }\n      return null;\n    }\n    function receive(length) {\n      var n = 0;\n      while (length > 0) {\n        var bit = readBit();\n        if (bit === null) return;\n        n = (n << 1) | bit;\n        length--;\n      }\n      return n;\n    }\n    function receiveAndExtend(length) {\n      var n = receive(length);\n      if (n >= 1 << (length - 1))\n        return n;\n      return n + (-1 << length) + 1;\n    }\n    function decodeBaseline(component, zz) {\n      var t = decodeHuffman(component.huffmanTableDC);\n      var diff = t === 0 ? 0 : receiveAndExtend(t);\n      zz[0]= (component.pred += diff);\n      var k = 1;\n      while (k < 64) {\n        var rs = decodeHuffman(component.huffmanTableAC);\n        var s = rs & 15, r = rs >> 4;\n        if (s === 0) {\n          if (r < 15)\n            break;\n          k += 16;\n          continue;\n        }\n        k += r;\n        var z = dctZigZag[k];\n        zz[z] = receiveAndExtend(s);\n        k++;\n      }\n    }\n    function decodeDCFirst(component, zz) {\n      var t = decodeHuffman(component.huffmanTableDC);\n      var diff = t === 0 ? 0 : (receiveAndExtend(t) << successive);\n      zz[0] = (component.pred += diff);\n    }\n    function decodeDCSuccessive(component, zz) {\n      zz[0] |= readBit() << successive;\n    }\n    var eobrun = 0;\n    function decodeACFirst(component, zz) {\n      if (eobrun > 0) {\n        eobrun--;\n        return;\n      }\n      var k = spectralStart, e = spectralEnd;\n      while (k <= e) {\n        var rs = decodeHuffman(component.huffmanTableAC);\n        var s = rs & 15, r = rs >> 4;\n        if (s === 0) {\n          if (r < 15) {\n            eobrun = receive(r) + (1 << r) - 1;\n            break;\n          }\n          k += 16;\n          continue;\n        }\n        k += r;\n        var z = dctZigZag[k];\n        zz[z] = receiveAndExtend(s) * (1 << successive);\n        k++;\n      }\n    }\n    var successiveACState = 0, successiveACNextValue;\n    function decodeACSuccessive(component, zz) {\n      var k = spectralStart, e = spectralEnd, r = 0;\n      while (k <= e) {\n        var z = dctZigZag[k];\n        var direction = zz[z] < 0 ? -1 : 1;\n        switch (successiveACState) {\n        case 0: // initial state\n          var rs = decodeHuffman(component.huffmanTableAC);\n          var s = rs & 15, r = rs >> 4;\n          if (s === 0) {\n            if (r < 15) {\n              eobrun = receive(r) + (1 << r);\n              successiveACState = 4;\n            } else {\n              r = 16;\n              successiveACState = 1;\n            }\n          } else {\n            if (s !== 1)\n              throw new Error(\"invalid ACn encoding\");\n            successiveACNextValue = receiveAndExtend(s);\n            successiveACState = r ? 2 : 3;\n          }\n          continue;\n        case 1: // skipping r zero items\n        case 2:\n          if (zz[z])\n            zz[z] += (readBit() << successive) * direction;\n          else {\n            r--;\n            if (r === 0)\n              successiveACState = successiveACState == 2 ? 3 : 0;\n          }\n          break;\n        case 3: // set value for a zero item\n          if (zz[z])\n            zz[z] += (readBit() << successive) * direction;\n          else {\n            zz[z] = successiveACNextValue << successive;\n            successiveACState = 0;\n          }\n          break;\n        case 4: // eob\n          if (zz[z])\n            zz[z] += (readBit() << successive) * direction;\n          break;\n        }\n        k++;\n      }\n      if (successiveACState === 4) {\n        eobrun--;\n        if (eobrun === 0)\n          successiveACState = 0;\n      }\n    }\n    function decodeMcu(component, decode, mcu, row, col) {\n      var mcuRow = (mcu / mcusPerLine) | 0;\n      var mcuCol = mcu % mcusPerLine;\n      var blockRow = mcuRow * component.v + row;\n      var blockCol = mcuCol * component.h + col;\n      // If the block is missing and we're in tolerant mode, just skip it.\n      if (component.blocks[blockRow] === undefined && opts.tolerantDecoding)\n        return;\n      decode(component, component.blocks[blockRow][blockCol]);\n    }\n    function decodeBlock(component, decode, mcu) {\n      var blockRow = (mcu / component.blocksPerLine) | 0;\n      var blockCol = mcu % component.blocksPerLine;\n      // If the block is missing and we're in tolerant mode, just skip it.\n      if (component.blocks[blockRow] === undefined && opts.tolerantDecoding)\n        return;\n      decode(component, component.blocks[blockRow][blockCol]);\n    }\n\n    var componentsLength = components.length;\n    var component, i, j, k, n;\n    var decodeFn;\n    if (progressive) {\n      if (spectralStart === 0)\n        decodeFn = successivePrev === 0 ? decodeDCFirst : decodeDCSuccessive;\n      else\n        decodeFn = successivePrev === 0 ? decodeACFirst : decodeACSuccessive;\n    } else {\n      decodeFn = decodeBaseline;\n    }\n\n    var mcu = 0, marker;\n    var mcuExpected;\n    if (componentsLength == 1) {\n      mcuExpected = components[0].blocksPerLine * components[0].blocksPerColumn;\n    } else {\n      mcuExpected = mcusPerLine * frame.mcusPerColumn;\n    }\n    if (!resetInterval) resetInterval = mcuExpected;\n\n    var h, v;\n    while (mcu < mcuExpected) {\n      // reset interval stuff\n      for (i = 0; i < componentsLength; i++)\n        components[i].pred = 0;\n      eobrun = 0;\n\n      if (componentsLength == 1) {\n        component = components[0];\n        for (n = 0; n < resetInterval; n++) {\n          decodeBlock(component, decodeFn, mcu);\n          mcu++;\n        }\n      } else {\n        for (n = 0; n < resetInterval; n++) {\n          for (i = 0; i < componentsLength; i++) {\n            component = components[i];\n            h = component.h;\n            v = component.v;\n            for (j = 0; j < v; j++) {\n              for (k = 0; k < h; k++) {\n                decodeMcu(component, decodeFn, mcu, j, k);\n              }\n            }\n          }\n          mcu++;\n\n          // If we've reached our expected MCU's, stop decoding\n          if (mcu === mcuExpected) break;\n        }\n      }\n\n      if (mcu === mcuExpected) {\n        // Skip trailing bytes at the end of the scan - until we reach the next marker\n        do {\n          if (data[offset] === 0xFF) {\n            if (data[offset + 1] !== 0x00) {\n              break;\n            }\n          }\n          offset += 1;\n        } while (offset < data.length - 2);\n      }\n\n      // find marker\n      bitsCount = 0;\n      marker = (data[offset] << 8) | data[offset + 1];\n      if (marker < 0xFF00) {\n        throw new Error(\"marker was not found\");\n      }\n\n      if (marker >= 0xFFD0 && marker <= 0xFFD7) { // RSTx\n        offset += 2;\n      }\n      else\n        break;\n    }\n\n    return offset - startOffset;\n  }\n\n  function buildComponentData(frame, component) {\n    var lines = [];\n    var blocksPerLine = component.blocksPerLine;\n    var blocksPerColumn = component.blocksPerColumn;\n    var samplesPerLine = blocksPerLine << 3;\n    // Only 1 used per invocation of this function and garbage collected after invocation, so no need to account for its memory footprint.\n    var R = new Int32Array(64), r = new Uint8Array(64);\n\n    // A port of poppler's IDCT method which in turn is taken from:\n    //   Christoph Loeffler, Adriaan Ligtenberg, George S. Moschytz,\n    //   \"Practical Fast 1-D DCT Algorithms with 11 Multiplications\",\n    //   IEEE Intl. Conf. on Acoustics, Speech & Signal Processing, 1989,\n    //   988-991.\n    function quantizeAndInverse(zz, dataOut, dataIn) {\n      var qt = component.quantizationTable;\n      var v0, v1, v2, v3, v4, v5, v6, v7, t;\n      var p = dataIn;\n      var i;\n\n      // dequant\n      for (i = 0; i < 64; i++)\n        p[i] = zz[i] * qt[i];\n\n      // inverse DCT on rows\n      for (i = 0; i < 8; ++i) {\n        var row = 8 * i;\n\n        // check for all-zero AC coefficients\n        if (p[1 + row] == 0 && p[2 + row] == 0 && p[3 + row] == 0 &&\n            p[4 + row] == 0 && p[5 + row] == 0 && p[6 + row] == 0 &&\n            p[7 + row] == 0) {\n          t = (dctSqrt2 * p[0 + row] + 512) >> 10;\n          p[0 + row] = t;\n          p[1 + row] = t;\n          p[2 + row] = t;\n          p[3 + row] = t;\n          p[4 + row] = t;\n          p[5 + row] = t;\n          p[6 + row] = t;\n          p[7 + row] = t;\n          continue;\n        }\n\n        // stage 4\n        v0 = (dctSqrt2 * p[0 + row] + 128) >> 8;\n        v1 = (dctSqrt2 * p[4 + row] + 128) >> 8;\n        v2 = p[2 + row];\n        v3 = p[6 + row];\n        v4 = (dctSqrt1d2 * (p[1 + row] - p[7 + row]) + 128) >> 8;\n        v7 = (dctSqrt1d2 * (p[1 + row] + p[7 + row]) + 128) >> 8;\n        v5 = p[3 + row] << 4;\n        v6 = p[5 + row] << 4;\n\n        // stage 3\n        t = (v0 - v1+ 1) >> 1;\n        v0 = (v0 + v1 + 1) >> 1;\n        v1 = t;\n        t = (v2 * dctSin6 + v3 * dctCos6 + 128) >> 8;\n        v2 = (v2 * dctCos6 - v3 * dctSin6 + 128) >> 8;\n        v3 = t;\n        t = (v4 - v6 + 1) >> 1;\n        v4 = (v4 + v6 + 1) >> 1;\n        v6 = t;\n        t = (v7 + v5 + 1) >> 1;\n        v5 = (v7 - v5 + 1) >> 1;\n        v7 = t;\n\n        // stage 2\n        t = (v0 - v3 + 1) >> 1;\n        v0 = (v0 + v3 + 1) >> 1;\n        v3 = t;\n        t = (v1 - v2 + 1) >> 1;\n        v1 = (v1 + v2 + 1) >> 1;\n        v2 = t;\n        t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12;\n        v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12;\n        v7 = t;\n        t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12;\n        v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12;\n        v6 = t;\n\n        // stage 1\n        p[0 + row] = v0 + v7;\n        p[7 + row] = v0 - v7;\n        p[1 + row] = v1 + v6;\n        p[6 + row] = v1 - v6;\n        p[2 + row] = v2 + v5;\n        p[5 + row] = v2 - v5;\n        p[3 + row] = v3 + v4;\n        p[4 + row] = v3 - v4;\n      }\n\n      // inverse DCT on columns\n      for (i = 0; i < 8; ++i) {\n        var col = i;\n\n        // check for all-zero AC coefficients\n        if (p[1*8 + col] == 0 && p[2*8 + col] == 0 && p[3*8 + col] == 0 &&\n            p[4*8 + col] == 0 && p[5*8 + col] == 0 && p[6*8 + col] == 0 &&\n            p[7*8 + col] == 0) {\n          t = (dctSqrt2 * dataIn[i+0] + 8192) >> 14;\n          p[0*8 + col] = t;\n          p[1*8 + col] = t;\n          p[2*8 + col] = t;\n          p[3*8 + col] = t;\n          p[4*8 + col] = t;\n          p[5*8 + col] = t;\n          p[6*8 + col] = t;\n          p[7*8 + col] = t;\n          continue;\n        }\n\n        // stage 4\n        v0 = (dctSqrt2 * p[0*8 + col] + 2048) >> 12;\n        v1 = (dctSqrt2 * p[4*8 + col] + 2048) >> 12;\n        v2 = p[2*8 + col];\n        v3 = p[6*8 + col];\n        v4 = (dctSqrt1d2 * (p[1*8 + col] - p[7*8 + col]) + 2048) >> 12;\n        v7 = (dctSqrt1d2 * (p[1*8 + col] + p[7*8 + col]) + 2048) >> 12;\n        v5 = p[3*8 + col];\n        v6 = p[5*8 + col];\n\n        // stage 3\n        t = (v0 - v1 + 1) >> 1;\n        v0 = (v0 + v1 + 1) >> 1;\n        v1 = t;\n        t = (v2 * dctSin6 + v3 * dctCos6 + 2048) >> 12;\n        v2 = (v2 * dctCos6 - v3 * dctSin6 + 2048) >> 12;\n        v3 = t;\n        t = (v4 - v6 + 1) >> 1;\n        v4 = (v4 + v6 + 1) >> 1;\n        v6 = t;\n        t = (v7 + v5 + 1) >> 1;\n        v5 = (v7 - v5 + 1) >> 1;\n        v7 = t;\n\n        // stage 2\n        t = (v0 - v3 + 1) >> 1;\n        v0 = (v0 + v3 + 1) >> 1;\n        v3 = t;\n        t = (v1 - v2 + 1) >> 1;\n        v1 = (v1 + v2 + 1) >> 1;\n        v2 = t;\n        t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12;\n        v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12;\n        v7 = t;\n        t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12;\n        v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12;\n        v6 = t;\n\n        // stage 1\n        p[0*8 + col] = v0 + v7;\n        p[7*8 + col] = v0 - v7;\n        p[1*8 + col] = v1 + v6;\n        p[6*8 + col] = v1 - v6;\n        p[2*8 + col] = v2 + v5;\n        p[5*8 + col] = v2 - v5;\n        p[3*8 + col] = v3 + v4;\n        p[4*8 + col] = v3 - v4;\n      }\n\n      // convert to 8-bit integers\n      for (i = 0; i < 64; ++i) {\n        var sample = 128 + ((p[i] + 8) >> 4);\n        dataOut[i] = sample < 0 ? 0 : sample > 0xFF ? 0xFF : sample;\n      }\n    }\n\n    requestMemoryAllocation(samplesPerLine * blocksPerColumn * 8);\n\n    var i, j;\n    for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) {\n      var scanLine = blockRow << 3;\n      for (i = 0; i < 8; i++)\n        lines.push(new Uint8Array(samplesPerLine));\n      for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) {\n        quantizeAndInverse(component.blocks[blockRow][blockCol], r, R);\n\n        var offset = 0, sample = blockCol << 3;\n        for (j = 0; j < 8; j++) {\n          var line = lines[scanLine + j];\n          for (i = 0; i < 8; i++)\n            line[sample + i] = r[offset++];\n        }\n      }\n    }\n    return lines;\n  }\n\n  function clampTo8bit(a) {\n    return a < 0 ? 0 : a > 255 ? 255 : a;\n  }\n\n  constructor.prototype = {\n    load: function load(path) {\n      var xhr = new XMLHttpRequest();\n      xhr.open(\"GET\", path, true);\n      xhr.responseType = \"arraybuffer\";\n      xhr.onload = (function() {\n        // TODO catch parse error\n        var data = new Uint8Array(xhr.response || xhr.mozResponseArrayBuffer);\n        this.parse(data);\n        if (this.onload)\n          this.onload();\n      }).bind(this);\n      xhr.send(null);\n    },\n    parse: function parse(data) {\n      var maxResolutionInPixels = this.opts.maxResolutionInMP * 1000 * 1000;\n      var offset = 0, length = data.length;\n      function readUint16() {\n        var value = (data[offset] << 8) | data[offset + 1];\n        offset += 2;\n        return value;\n      }\n      function readDataBlock() {\n        var length = readUint16();\n        var array = data.subarray(offset, offset + length - 2);\n        offset += array.length;\n        return array;\n      }\n      function prepareComponents(frame) {\n        // According to the JPEG standard, the sampling factor must be between 1 and 4\n        // See https://github.com/libjpeg-turbo/libjpeg-turbo/blob/9abeff46d87bd201a952e276f3e4339556a403a3/libjpeg.txt#L1138-L1146\n        var maxH = 1, maxV = 1;\n        var component, componentId;\n        for (componentId in frame.components) {\n          if (frame.components.hasOwnProperty(componentId)) {\n            component = frame.components[componentId];\n            if (maxH < component.h) maxH = component.h;\n            if (maxV < component.v) maxV = component.v;\n          }\n        }\n        var mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / maxH);\n        var mcusPerColumn = Math.ceil(frame.scanLines / 8 / maxV);\n        for (componentId in frame.components) {\n          if (frame.components.hasOwnProperty(componentId)) {\n            component = frame.components[componentId];\n            var blocksPerLine = Math.ceil(Math.ceil(frame.samplesPerLine / 8) * component.h / maxH);\n            var blocksPerColumn = Math.ceil(Math.ceil(frame.scanLines  / 8) * component.v / maxV);\n            var blocksPerLineForMcu = mcusPerLine * component.h;\n            var blocksPerColumnForMcu = mcusPerColumn * component.v;\n            var blocksToAllocate = blocksPerColumnForMcu * blocksPerLineForMcu;\n            var blocks = [];\n\n            // Each block is a Int32Array of length 64 (4 x 64 = 256 bytes)\n            requestMemoryAllocation(blocksToAllocate * 256);\n\n            for (var i = 0; i < blocksPerColumnForMcu; i++) {\n              var row = [];\n              for (var j = 0; j < blocksPerLineForMcu; j++)\n                row.push(new Int32Array(64));\n              blocks.push(row);\n            }\n            component.blocksPerLine = blocksPerLine;\n            component.blocksPerColumn = blocksPerColumn;\n            component.blocks = blocks;\n          }\n        }\n        frame.maxH = maxH;\n        frame.maxV = maxV;\n        frame.mcusPerLine = mcusPerLine;\n        frame.mcusPerColumn = mcusPerColumn;\n      }\n      var jfif = null;\n      var adobe = null;\n      var pixels = null;\n      var frame, resetInterval;\n      var quantizationTables = [], frames = [];\n      var huffmanTablesAC = [], huffmanTablesDC = [];\n      var fileMarker = readUint16();\n      var malformedDataOffset = -1;\n      this.comments = [];\n      if (fileMarker != 0xFFD8) { // SOI (Start of Image)\n        throw new Error(\"SOI not found\");\n      }\n\n      fileMarker = readUint16();\n      while (fileMarker != 0xFFD9) { // EOI (End of image)\n        var i, j, l;\n        switch(fileMarker) {\n          case 0xFF00: break;\n          case 0xFFE0: // APP0 (Application Specific)\n          case 0xFFE1: // APP1\n          case 0xFFE2: // APP2\n          case 0xFFE3: // APP3\n          case 0xFFE4: // APP4\n          case 0xFFE5: // APP5\n          case 0xFFE6: // APP6\n          case 0xFFE7: // APP7\n          case 0xFFE8: // APP8\n          case 0xFFE9: // APP9\n          case 0xFFEA: // APP10\n          case 0xFFEB: // APP11\n          case 0xFFEC: // APP12\n          case 0xFFED: // APP13\n          case 0xFFEE: // APP14\n          case 0xFFEF: // APP15\n          case 0xFFFE: // COM (Comment)\n            var appData = readDataBlock();\n\n            if (fileMarker === 0xFFFE) {\n              var comment = String.fromCharCode.apply(null, appData);\n              this.comments.push(comment);\n            }\n\n            if (fileMarker === 0xFFE0) {\n              if (appData[0] === 0x4A && appData[1] === 0x46 && appData[2] === 0x49 &&\n                appData[3] === 0x46 && appData[4] === 0) { // 'JFIF\\x00'\n                jfif = {\n                  version: { major: appData[5], minor: appData[6] },\n                  densityUnits: appData[7],\n                  xDensity: (appData[8] << 8) | appData[9],\n                  yDensity: (appData[10] << 8) | appData[11],\n                  thumbWidth: appData[12],\n                  thumbHeight: appData[13],\n                  thumbData: appData.subarray(14, 14 + 3 * appData[12] * appData[13])\n                };\n              }\n            }\n            // TODO APP1 - Exif\n            if (fileMarker === 0xFFE1) {\n              if (appData[0] === 0x45 &&\n                appData[1] === 0x78 &&\n                appData[2] === 0x69 &&\n                appData[3] === 0x66 &&\n                appData[4] === 0) { // 'EXIF\\x00'\n                this.exifBuffer = appData.subarray(5, appData.length);\n              }\n            }\n\n            if (fileMarker === 0xFFEE) {\n              if (appData[0] === 0x41 && appData[1] === 0x64 && appData[2] === 0x6F &&\n                appData[3] === 0x62 && appData[4] === 0x65 && appData[5] === 0) { // 'Adobe\\x00'\n                adobe = {\n                  version: appData[6],\n                  flags0: (appData[7] << 8) | appData[8],\n                  flags1: (appData[9] << 8) | appData[10],\n                  transformCode: appData[11]\n                };\n              }\n            }\n            break;\n\n          case 0xFFDB: // DQT (Define Quantization Tables)\n            var quantizationTablesLength = readUint16();\n            var quantizationTablesEnd = quantizationTablesLength + offset - 2;\n            while (offset < quantizationTablesEnd) {\n              var quantizationTableSpec = data[offset++];\n              requestMemoryAllocation(64 * 4);\n              var tableData = new Int32Array(64);\n              if ((quantizationTableSpec >> 4) === 0) { // 8 bit values\n                for (j = 0; j < 64; j++) {\n                  var z = dctZigZag[j];\n                  tableData[z] = data[offset++];\n                }\n              } else if ((quantizationTableSpec >> 4) === 1) { //16 bit\n                for (j = 0; j < 64; j++) {\n                  var z = dctZigZag[j];\n                  tableData[z] = readUint16();\n                }\n              } else\n                throw new Error(\"DQT: invalid table spec\");\n              quantizationTables[quantizationTableSpec & 15] = tableData;\n            }\n            break;\n\n          case 0xFFC0: // SOF0 (Start of Frame, Baseline DCT)\n          case 0xFFC1: // SOF1 (Start of Frame, Extended DCT)\n          case 0xFFC2: // SOF2 (Start of Frame, Progressive DCT)\n            readUint16(); // skip data length\n            frame = {};\n            frame.extended = (fileMarker === 0xFFC1);\n            frame.progressive = (fileMarker === 0xFFC2);\n            frame.precision = data[offset++];\n            frame.scanLines = readUint16();\n            frame.samplesPerLine = readUint16();\n            frame.components = {};\n            frame.componentsOrder = [];\n\n            var pixelsInFrame = frame.scanLines * frame.samplesPerLine;\n            if (pixelsInFrame > maxResolutionInPixels) {\n              var exceededAmount = Math.ceil((pixelsInFrame - maxResolutionInPixels) / 1e6);\n              throw new Error(`maxResolutionInMP limit exceeded by ${exceededAmount}MP`);\n            }\n\n            var componentsCount = data[offset++], componentId;\n            var maxH = 0, maxV = 0;\n            for (i = 0; i < componentsCount; i++) {\n              componentId = data[offset];\n              var h = data[offset + 1] >> 4;\n              var v = data[offset + 1] & 15;\n              var qId = data[offset + 2];\n\n              if ( h <= 0 || v <= 0 ) {\n                throw new Error('Invalid sampling factor, expected values above 0');\n              }\n\n              frame.componentsOrder.push(componentId);\n              frame.components[componentId] = {\n                h: h,\n                v: v,\n                quantizationIdx: qId\n              };\n              offset += 3;\n            }\n            prepareComponents(frame);\n            frames.push(frame);\n            break;\n\n          case 0xFFC4: // DHT (Define Huffman Tables)\n            var huffmanLength = readUint16();\n            for (i = 2; i < huffmanLength;) {\n              var huffmanTableSpec = data[offset++];\n              var codeLengths = new Uint8Array(16);\n              var codeLengthSum = 0;\n              for (j = 0; j < 16; j++, offset++) {\n                codeLengthSum += (codeLengths[j] = data[offset]);\n              }\n              requestMemoryAllocation(16 + codeLengthSum);\n              var huffmanValues = new Uint8Array(codeLengthSum);\n              for (j = 0; j < codeLengthSum; j++, offset++)\n                huffmanValues[j] = data[offset];\n              i += 17 + codeLengthSum;\n\n              ((huffmanTableSpec >> 4) === 0 ?\n                huffmanTablesDC : huffmanTablesAC)[huffmanTableSpec & 15] =\n                buildHuffmanTable(codeLengths, huffmanValues);\n            }\n            break;\n\n          case 0xFFDD: // DRI (Define Restart Interval)\n            readUint16(); // skip data length\n            resetInterval = readUint16();\n            break;\n\n          case 0xFFDC: // Number of Lines marker\n            readUint16() // skip data length\n            readUint16() // Ignore this data since it represents the image height\n            break;\n            \n          case 0xFFDA: // SOS (Start of Scan)\n            var scanLength = readUint16();\n            var selectorsCount = data[offset++];\n            var components = [], component;\n            for (i = 0; i < selectorsCount; i++) {\n              component = frame.components[data[offset++]];\n              var tableSpec = data[offset++];\n              component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4];\n              component.huffmanTableAC = huffmanTablesAC[tableSpec & 15];\n              components.push(component);\n            }\n            var spectralStart = data[offset++];\n            var spectralEnd = data[offset++];\n            var successiveApproximation = data[offset++];\n            var processed = decodeScan(data, offset,\n              frame, components, resetInterval,\n              spectralStart, spectralEnd,\n              successiveApproximation >> 4, successiveApproximation & 15, this.opts);\n            offset += processed;\n            break;\n\n          case 0xFFFF: // Fill bytes\n            if (data[offset] !== 0xFF) { // Avoid skipping a valid marker.\n              offset--;\n            }\n            break;\n          default:\n            if (data[offset - 3] == 0xFF &&\n                data[offset - 2] >= 0xC0 && data[offset - 2] <= 0xFE) {\n              // could be incorrect encoding -- last 0xFF byte of the previous\n              // block was eaten by the encoder\n              offset -= 3;\n              break;\n            }\n            else if (fileMarker === 0xE0 || fileMarker == 0xE1) {\n              // Recover from malformed APP1 markers popular in some phone models.\n              // See https://github.com/eugeneware/jpeg-js/issues/82\n              if (malformedDataOffset !== -1) {\n                throw new Error(`first unknown JPEG marker at offset ${malformedDataOffset.toString(16)}, second unknown JPEG marker ${fileMarker.toString(16)} at offset ${(offset - 1).toString(16)}`);\n              }\n              malformedDataOffset = offset - 1;\n              const nextOffset = readUint16();\n              if (data[offset + nextOffset - 2] === 0xFF) {\n                offset += nextOffset - 2;\n                break;\n              }\n            }\n            throw new Error(\"unknown JPEG marker \" + fileMarker.toString(16));\n        }\n        fileMarker = readUint16();\n      }\n      if (frames.length != 1)\n        throw new Error(\"only single frame JPEGs supported\");\n\n      // set each frame's components quantization table\n      for (var i = 0; i < frames.length; i++) {\n        var cp = frames[i].components;\n        for (var j in cp) {\n          cp[j].quantizationTable = quantizationTables[cp[j].quantizationIdx];\n          delete cp[j].quantizationIdx;\n        }\n      }\n\n      this.width = frame.samplesPerLine;\n      this.height = frame.scanLines;\n      this.jfif = jfif;\n      this.adobe = adobe;\n      this.components = [];\n      for (var i = 0; i < frame.componentsOrder.length; i++) {\n        var component = frame.components[frame.componentsOrder[i]];\n        this.components.push({\n          lines: buildComponentData(frame, component),\n          scaleX: component.h / frame.maxH,\n          scaleY: component.v / frame.maxV\n        });\n      }\n    },\n    getData: function getData(width, height) {\n      var scaleX = this.width / width, scaleY = this.height / height;\n\n      var component1, component2, component3, component4;\n      var component1Line, component2Line, component3Line, component4Line;\n      var x, y;\n      var offset = 0;\n      var Y, Cb, Cr, K, C, M, Ye, R, G, B;\n      var colorTransform;\n      var dataLength = width * height * this.components.length;\n      requestMemoryAllocation(dataLength);\n      var data = new Uint8Array(dataLength);\n      switch (this.components.length) {\n        case 1:\n          component1 = this.components[0];\n          for (y = 0; y < height; y++) {\n            component1Line = component1.lines[0 | (y * component1.scaleY * scaleY)];\n            for (x = 0; x < width; x++) {\n              Y = component1Line[0 | (x * component1.scaleX * scaleX)];\n\n              data[offset++] = Y;\n            }\n          }\n          break;\n        case 2:\n          // PDF might compress two component data in custom colorspace\n          component1 = this.components[0];\n          component2 = this.components[1];\n          for (y = 0; y < height; y++) {\n            component1Line = component1.lines[0 | (y * component1.scaleY * scaleY)];\n            component2Line = component2.lines[0 | (y * component2.scaleY * scaleY)];\n            for (x = 0; x < width; x++) {\n              Y = component1Line[0 | (x * component1.scaleX * scaleX)];\n              data[offset++] = Y;\n              Y = component2Line[0 | (x * component2.scaleX * scaleX)];\n              data[offset++] = Y;\n            }\n          }\n          break;\n        case 3:\n          // The default transform for three components is true\n          colorTransform = true;\n          // The adobe transform marker overrides any previous setting\n          if (this.adobe && this.adobe.transformCode)\n            colorTransform = true;\n          else if (typeof this.opts.colorTransform !== 'undefined')\n            colorTransform = !!this.opts.colorTransform;\n\n          component1 = this.components[0];\n          component2 = this.components[1];\n          component3 = this.components[2];\n          for (y = 0; y < height; y++) {\n            component1Line = component1.lines[0 | (y * component1.scaleY * scaleY)];\n            component2Line = component2.lines[0 | (y * component2.scaleY * scaleY)];\n            component3Line = component3.lines[0 | (y * component3.scaleY * scaleY)];\n            for (x = 0; x < width; x++) {\n              if (!colorTransform) {\n                R = component1Line[0 | (x * component1.scaleX * scaleX)];\n                G = component2Line[0 | (x * component2.scaleX * scaleX)];\n                B = component3Line[0 | (x * component3.scaleX * scaleX)];\n              } else {\n                Y = component1Line[0 | (x * component1.scaleX * scaleX)];\n                Cb = component2Line[0 | (x * component2.scaleX * scaleX)];\n                Cr = component3Line[0 | (x * component3.scaleX * scaleX)];\n\n                R = clampTo8bit(Y + 1.402 * (Cr - 128));\n                G = clampTo8bit(Y - 0.3441363 * (Cb - 128) - 0.71413636 * (Cr - 128));\n                B = clampTo8bit(Y + 1.772 * (Cb - 128));\n              }\n\n              data[offset++] = R;\n              data[offset++] = G;\n              data[offset++] = B;\n            }\n          }\n          break;\n        case 4:\n          if (!this.adobe)\n            throw new Error('Unsupported color mode (4 components)');\n          // The default transform for four components is false\n          colorTransform = false;\n          // The adobe transform marker overrides any previous setting\n          if (this.adobe && this.adobe.transformCode)\n            colorTransform = true;\n          else if (typeof this.opts.colorTransform !== 'undefined')\n            colorTransform = !!this.opts.colorTransform;\n\n          component1 = this.components[0];\n          component2 = this.components[1];\n          component3 = this.components[2];\n          component4 = this.components[3];\n          for (y = 0; y < height; y++) {\n            component1Line = component1.lines[0 | (y * component1.scaleY * scaleY)];\n            component2Line = component2.lines[0 | (y * component2.scaleY * scaleY)];\n            component3Line = component3.lines[0 | (y * component3.scaleY * scaleY)];\n            component4Line = component4.lines[0 | (y * component4.scaleY * scaleY)];\n            for (x = 0; x < width; x++) {\n              if (!colorTransform) {\n                C = component1Line[0 | (x * component1.scaleX * scaleX)];\n                M = component2Line[0 | (x * component2.scaleX * scaleX)];\n                Ye = component3Line[0 | (x * component3.scaleX * scaleX)];\n                K = component4Line[0 | (x * component4.scaleX * scaleX)];\n              } else {\n                Y = component1Line[0 | (x * component1.scaleX * scaleX)];\n                Cb = component2Line[0 | (x * component2.scaleX * scaleX)];\n                Cr = component3Line[0 | (x * component3.scaleX * scaleX)];\n                K = component4Line[0 | (x * component4.scaleX * scaleX)];\n\n                C = 255 - clampTo8bit(Y + 1.402 * (Cr - 128));\n                M = 255 - clampTo8bit(Y - 0.3441363 * (Cb - 128) - 0.71413636 * (Cr - 128));\n                Ye = 255 - clampTo8bit(Y + 1.772 * (Cb - 128));\n              }\n              data[offset++] = 255-C;\n              data[offset++] = 255-M;\n              data[offset++] = 255-Ye;\n              data[offset++] = 255-K;\n            }\n          }\n          break;\n        default:\n          throw new Error('Unsupported color mode');\n      }\n      return data;\n    },\n    copyToImageData: function copyToImageData(imageData, formatAsRGBA) {\n      var width = imageData.width, height = imageData.height;\n      var imageDataArray = imageData.data;\n      var data = this.getData(width, height);\n      var i = 0, j = 0, x, y;\n      var Y, K, C, M, R, G, B;\n      switch (this.components.length) {\n        case 1:\n          for (y = 0; y < height; y++) {\n            for (x = 0; x < width; x++) {\n              Y = data[i++];\n\n              imageDataArray[j++] = Y;\n              imageDataArray[j++] = Y;\n              imageDataArray[j++] = Y;\n              if (formatAsRGBA) {\n                imageDataArray[j++] = 255;\n              }\n            }\n          }\n          break;\n        case 3:\n          for (y = 0; y < height; y++) {\n            for (x = 0; x < width; x++) {\n              R = data[i++];\n              G = data[i++];\n              B = data[i++];\n\n              imageDataArray[j++] = R;\n              imageDataArray[j++] = G;\n              imageDataArray[j++] = B;\n              if (formatAsRGBA) {\n                imageDataArray[j++] = 255;\n              }\n            }\n          }\n          break;\n        case 4:\n          for (y = 0; y < height; y++) {\n            for (x = 0; x < width; x++) {\n              C = data[i++];\n              M = data[i++];\n              Y = data[i++];\n              K = data[i++];\n\n              R = 255 - clampTo8bit(C * (1 - K / 255) + K);\n              G = 255 - clampTo8bit(M * (1 - K / 255) + K);\n              B = 255 - clampTo8bit(Y * (1 - K / 255) + K);\n\n              imageDataArray[j++] = R;\n              imageDataArray[j++] = G;\n              imageDataArray[j++] = B;\n              if (formatAsRGBA) {\n                imageDataArray[j++] = 255;\n              }\n            }\n          }\n          break;\n        default:\n          throw new Error('Unsupported color mode');\n      }\n    }\n  };\n\n\n  // We cap the amount of memory used by jpeg-js to avoid unexpected OOMs from untrusted content.\n  var totalBytesAllocated = 0;\n  var maxMemoryUsageBytes = 0;\n  function requestMemoryAllocation(increaseAmount = 0) {\n    var totalMemoryImpactBytes = totalBytesAllocated + increaseAmount;\n    if (totalMemoryImpactBytes > maxMemoryUsageBytes) {\n      var exceededAmount = Math.ceil((totalMemoryImpactBytes - maxMemoryUsageBytes) / 1024 / 1024);\n      throw new Error(`maxMemoryUsageInMB limit exceeded by at least ${exceededAmount}MB`);\n    }\n\n    totalBytesAllocated = totalMemoryImpactBytes;\n  }\n\n  constructor.resetMaxMemoryUsage = function (maxMemoryUsageBytes_) {\n    totalBytesAllocated = 0;\n    maxMemoryUsageBytes = maxMemoryUsageBytes_;\n  };\n\n  constructor.getBytesAllocated = function () {\n    return totalBytesAllocated;\n  };\n\n  constructor.requestMemoryAllocation = requestMemoryAllocation;\n\n  return constructor;\n})();\n\nif (typeof module !== 'undefined') {\n\tmodule.exports = decode;\n} else if (typeof window !== 'undefined') {\n\twindow['jpeg-js'] = window['jpeg-js'] || {};\n\twindow['jpeg-js'].decode = decode;\n}\n\nfunction decode(jpegData, userOpts = {}) {\n  var defaultOpts = {\n    // \"undefined\" means \"Choose whether to transform colors based on the image’s color model.\"\n    colorTransform: undefined,\n    useTArray: false,\n    formatAsRGBA: true,\n    tolerantDecoding: true,\n    maxResolutionInMP: 100, // Don't decode more than 100 megapixels\n    maxMemoryUsageInMB: 512, // Don't decode if memory footprint is more than 512MB\n  };\n\n  var opts = {...defaultOpts, ...userOpts};\n  var arr = new Uint8Array(jpegData);\n  var decoder = new JpegImage();\n  decoder.opts = opts;\n  // If this constructor ever supports async decoding this will need to be done differently.\n  // Until then, treating as singleton limit is fine.\n  JpegImage.resetMaxMemoryUsage(opts.maxMemoryUsageInMB * 1024 * 1024);\n  decoder.parse(arr);\n\n  var channels = (opts.formatAsRGBA) ? 4 : 3;\n  var bytesNeeded = decoder.width * decoder.height * channels;\n  try {\n    JpegImage.requestMemoryAllocation(bytesNeeded);\n    var image = {\n      width: decoder.width,\n      height: decoder.height,\n      exifBuffer: decoder.exifBuffer,\n      data: opts.useTArray ?\n        new Uint8Array(bytesNeeded) :\n        Buffer.alloc(bytesNeeded)\n    };\n    if(decoder.comments.length > 0) {\n      image[\"comments\"] = decoder.comments;\n    }\n  } catch (err) {\n    if (err instanceof RangeError) {\n      throw new Error(\"Could not allocate enough memory for the image. \" +\n                      \"Required: \" + bytesNeeded);\n    } \n    \n    if (err instanceof ReferenceError) {\n      if (err.message === \"Buffer is not defined\") {\n        throw new Error(\"Buffer is not globally defined in this environment. \" +\n                        \"Consider setting useTArray to true\");\n      }\n    }\n    throw err;\n  }\n\n  decoder.copyToImageData(image, opts.formatAsRGBA);\n\n  return image;\n}\n","var encode = require('./lib/encoder'),\n    decode = require('./lib/decoder');\n\nmodule.exports = {\n  encode: encode,\n  decode: decode\n};\n","\"use strict\";\n\nlet util = require(\"util\");\nlet Stream = require(\"stream\");\n\nlet ChunkStream = (module.exports = function () {\n  Stream.call(this);\n\n  this._buffers = [];\n  this._buffered = 0;\n\n  this._reads = [];\n  this._paused = false;\n\n  this._encoding = \"utf8\";\n  this.writable = true;\n});\nutil.inherits(ChunkStream, Stream);\n\nChunkStream.prototype.read = function (length, callback) {\n  this._reads.push({\n    length: Math.abs(length), // if length < 0 then at most this length\n    allowLess: length < 0,\n    func: callback,\n  });\n\n  process.nextTick(\n    function () {\n      this._process();\n\n      // its paused and there is not enought data then ask for more\n      if (this._paused && this._reads && this._reads.length > 0) {\n        this._paused = false;\n\n        this.emit(\"drain\");\n      }\n    }.bind(this)\n  );\n};\n\nChunkStream.prototype.write = function (data, encoding) {\n  if (!this.writable) {\n    this.emit(\"error\", new Error(\"Stream not writable\"));\n    return false;\n  }\n\n  let dataBuffer;\n  if (Buffer.isBuffer(data)) {\n    dataBuffer = data;\n  } else {\n    dataBuffer = Buffer.from(data, encoding || this._encoding);\n  }\n\n  this._buffers.push(dataBuffer);\n  this._buffered += dataBuffer.length;\n\n  this._process();\n\n  // ok if there are no more read requests\n  if (this._reads && this._reads.length === 0) {\n    this._paused = true;\n  }\n\n  return this.writable && !this._paused;\n};\n\nChunkStream.prototype.end = function (data, encoding) {\n  if (data) {\n    this.write(data, encoding);\n  }\n\n  this.writable = false;\n\n  // already destroyed\n  if (!this._buffers) {\n    return;\n  }\n\n  // enqueue or handle end\n  if (this._buffers.length === 0) {\n    this._end();\n  } else {\n    this._buffers.push(null);\n    this._process();\n  }\n};\n\nChunkStream.prototype.destroySoon = ChunkStream.prototype.end;\n\nChunkStream.prototype._end = function () {\n  if (this._reads.length > 0) {\n    this.emit(\"error\", new Error(\"Unexpected end of input\"));\n  }\n\n  this.destroy();\n};\n\nChunkStream.prototype.destroy = function () {\n  if (!this._buffers) {\n    return;\n  }\n\n  this.writable = false;\n  this._reads = null;\n  this._buffers = null;\n\n  this.emit(\"close\");\n};\n\nChunkStream.prototype._processReadAllowingLess = function (read) {\n  // ok there is any data so that we can satisfy this request\n  this._reads.shift(); // == read\n\n  // first we need to peek into first buffer\n  let smallerBuf = this._buffers[0];\n\n  // ok there is more data than we need\n  if (smallerBuf.length > read.length) {\n    this._buffered -= read.length;\n    this._buffers[0] = smallerBuf.slice(read.length);\n\n    read.func.call(this, smallerBuf.slice(0, read.length));\n  } else {\n    // ok this is less than maximum length so use it all\n    this._buffered -= smallerBuf.length;\n    this._buffers.shift(); // == smallerBuf\n\n    read.func.call(this, smallerBuf);\n  }\n};\n\nChunkStream.prototype._processRead = function (read) {\n  this._reads.shift(); // == read\n\n  let pos = 0;\n  let count = 0;\n  let data = Buffer.alloc(read.length);\n\n  // create buffer for all data\n  while (pos < read.length) {\n    let buf = this._buffers[count++];\n    let len = Math.min(buf.length, read.length - pos);\n\n    buf.copy(data, pos, 0, len);\n    pos += len;\n\n    // last buffer wasn't used all so just slice it and leave\n    if (len !== buf.length) {\n      this._buffers[--count] = buf.slice(len);\n    }\n  }\n\n  // remove all used buffers\n  if (count > 0) {\n    this._buffers.splice(0, count);\n  }\n\n  this._buffered -= read.length;\n\n  read.func.call(this, data);\n};\n\nChunkStream.prototype._process = function () {\n  try {\n    // as long as there is any data and read requests\n    while (this._buffered > 0 && this._reads && this._reads.length > 0) {\n      let read = this._reads[0];\n\n      // read any data (but no more than length)\n      if (read.allowLess) {\n        this._processReadAllowingLess(read);\n      } else if (this._buffered >= read.length) {\n        // ok we can meet some expectations\n\n        this._processRead(read);\n      } else {\n        // not enought data to satisfy first request in queue\n        // so we need to wait for more\n        break;\n      }\n    }\n\n    if (this._buffers && !this.writable) {\n      this._end();\n    }\n  } catch (ex) {\n    this.emit(\"error\", ex);\n  }\n};\n","\"use strict\";\n\n// Adam 7\n//   0 1 2 3 4 5 6 7\n// 0 x 6 4 6 x 6 4 6\n// 1 7 7 7 7 7 7 7 7\n// 2 5 6 5 6 5 6 5 6\n// 3 7 7 7 7 7 7 7 7\n// 4 3 6 4 6 3 6 4 6\n// 5 7 7 7 7 7 7 7 7\n// 6 5 6 5 6 5 6 5 6\n// 7 7 7 7 7 7 7 7 7\n\nlet imagePasses = [\n  {\n    // pass 1 - 1px\n    x: [0],\n    y: [0],\n  },\n  {\n    // pass 2 - 1px\n    x: [4],\n    y: [0],\n  },\n  {\n    // pass 3 - 2px\n    x: [0, 4],\n    y: [4],\n  },\n  {\n    // pass 4 - 4px\n    x: [2, 6],\n    y: [0, 4],\n  },\n  {\n    // pass 5 - 8px\n    x: [0, 2, 4, 6],\n    y: [2, 6],\n  },\n  {\n    // pass 6 - 16px\n    x: [1, 3, 5, 7],\n    y: [0, 2, 4, 6],\n  },\n  {\n    // pass 7 - 32px\n    x: [0, 1, 2, 3, 4, 5, 6, 7],\n    y: [1, 3, 5, 7],\n  },\n];\n\nexports.getImagePasses = function (width, height) {\n  let images = [];\n  let xLeftOver = width % 8;\n  let yLeftOver = height % 8;\n  let xRepeats = (width - xLeftOver) / 8;\n  let yRepeats = (height - yLeftOver) / 8;\n  for (let i = 0; i < imagePasses.length; i++) {\n    let pass = imagePasses[i];\n    let passWidth = xRepeats * pass.x.length;\n    let passHeight = yRepeats * pass.y.length;\n    for (let j = 0; j < pass.x.length; j++) {\n      if (pass.x[j] < xLeftOver) {\n        passWidth++;\n      } else {\n        break;\n      }\n    }\n    for (let j = 0; j < pass.y.length; j++) {\n      if (pass.y[j] < yLeftOver) {\n        passHeight++;\n      } else {\n        break;\n      }\n    }\n    if (passWidth > 0 && passHeight > 0) {\n      images.push({ width: passWidth, height: passHeight, index: i });\n    }\n  }\n  return images;\n};\n\nexports.getInterlaceIterator = function (width) {\n  return function (x, y, pass) {\n    let outerXLeftOver = x % imagePasses[pass].x.length;\n    let outerX =\n      ((x - outerXLeftOver) / imagePasses[pass].x.length) * 8 +\n      imagePasses[pass].x[outerXLeftOver];\n    let outerYLeftOver = y % imagePasses[pass].y.length;\n    let outerY =\n      ((y - outerYLeftOver) / imagePasses[pass].y.length) * 8 +\n      imagePasses[pass].y[outerYLeftOver];\n    return outerX * 4 + outerY * width * 4;\n  };\n};\n","\"use strict\";\n\nmodule.exports = function paethPredictor(left, above, upLeft) {\n  let paeth = left + above - upLeft;\n  let pLeft = Math.abs(paeth - left);\n  let pAbove = Math.abs(paeth - above);\n  let pUpLeft = Math.abs(paeth - upLeft);\n\n  if (pLeft <= pAbove && pLeft <= pUpLeft) {\n    return left;\n  }\n  if (pAbove <= pUpLeft) {\n    return above;\n  }\n  return upLeft;\n};\n","\"use strict\";\n\nlet interlaceUtils = require(\"./interlace\");\nlet paethPredictor = require(\"./paeth-predictor\");\n\nfunction getByteWidth(width, bpp, depth) {\n  let byteWidth = width * bpp;\n  if (depth !== 8) {\n    byteWidth = Math.ceil(byteWidth / (8 / depth));\n  }\n  return byteWidth;\n}\n\nlet Filter = (module.exports = function (bitmapInfo, dependencies) {\n  let width = bitmapInfo.width;\n  let height = bitmapInfo.height;\n  let interlace = bitmapInfo.interlace;\n  let bpp = bitmapInfo.bpp;\n  let depth = bitmapInfo.depth;\n\n  this.read = dependencies.read;\n  this.write = dependencies.write;\n  this.complete = dependencies.complete;\n\n  this._imageIndex = 0;\n  this._images = [];\n  if (interlace) {\n    let passes = interlaceUtils.getImagePasses(width, height);\n    for (let i = 0; i < passes.length; i++) {\n      this._images.push({\n        byteWidth: getByteWidth(passes[i].width, bpp, depth),\n        height: passes[i].height,\n        lineIndex: 0,\n      });\n    }\n  } else {\n    this._images.push({\n      byteWidth: getByteWidth(width, bpp, depth),\n      height: height,\n      lineIndex: 0,\n    });\n  }\n\n  // when filtering the line we look at the pixel to the left\n  // the spec also says it is done on a byte level regardless of the number of pixels\n  // so if the depth is byte compatible (8 or 16) we subtract the bpp in order to compare back\n  // a pixel rather than just a different byte part. However if we are sub byte, we ignore.\n  if (depth === 8) {\n    this._xComparison = bpp;\n  } else if (depth === 16) {\n    this._xComparison = bpp * 2;\n  } else {\n    this._xComparison = 1;\n  }\n});\n\nFilter.prototype.start = function () {\n  this.read(\n    this._images[this._imageIndex].byteWidth + 1,\n    this._reverseFilterLine.bind(this)\n  );\n};\n\nFilter.prototype._unFilterType1 = function (\n  rawData,\n  unfilteredLine,\n  byteWidth\n) {\n  let xComparison = this._xComparison;\n  let xBiggerThan = xComparison - 1;\n\n  for (let x = 0; x < byteWidth; x++) {\n    let rawByte = rawData[1 + x];\n    let f1Left = x > xBiggerThan ? unfilteredLine[x - xComparison] : 0;\n    unfilteredLine[x] = rawByte + f1Left;\n  }\n};\n\nFilter.prototype._unFilterType2 = function (\n  rawData,\n  unfilteredLine,\n  byteWidth\n) {\n  let lastLine = this._lastLine;\n\n  for (let x = 0; x < byteWidth; x++) {\n    let rawByte = rawData[1 + x];\n    let f2Up = lastLine ? lastLine[x] : 0;\n    unfilteredLine[x] = rawByte + f2Up;\n  }\n};\n\nFilter.prototype._unFilterType3 = function (\n  rawData,\n  unfilteredLine,\n  byteWidth\n) {\n  let xComparison = this._xComparison;\n  let xBiggerThan = xComparison - 1;\n  let lastLine = this._lastLine;\n\n  for (let x = 0; x < byteWidth; x++) {\n    let rawByte = rawData[1 + x];\n    let f3Up = lastLine ? lastLine[x] : 0;\n    let f3Left = x > xBiggerThan ? unfilteredLine[x - xComparison] : 0;\n    let f3Add = Math.floor((f3Left + f3Up) / 2);\n    unfilteredLine[x] = rawByte + f3Add;\n  }\n};\n\nFilter.prototype._unFilterType4 = function (\n  rawData,\n  unfilteredLine,\n  byteWidth\n) {\n  let xComparison = this._xComparison;\n  let xBiggerThan = xComparison - 1;\n  let lastLine = this._lastLine;\n\n  for (let x = 0; x < byteWidth; x++) {\n    let rawByte = rawData[1 + x];\n    let f4Up = lastLine ? lastLine[x] : 0;\n    let f4Left = x > xBiggerThan ? unfilteredLine[x - xComparison] : 0;\n    let f4UpLeft = x > xBiggerThan && lastLine ? lastLine[x - xComparison] : 0;\n    let f4Add = paethPredictor(f4Left, f4Up, f4UpLeft);\n    unfilteredLine[x] = rawByte + f4Add;\n  }\n};\n\nFilter.prototype._reverseFilterLine = function (rawData) {\n  let filter = rawData[0];\n  let unfilteredLine;\n  let currentImage = this._images[this._imageIndex];\n  let byteWidth = currentImage.byteWidth;\n\n  if (filter === 0) {\n    unfilteredLine = rawData.slice(1, byteWidth + 1);\n  } else {\n    unfilteredLine = Buffer.alloc(byteWidth);\n\n    switch (filter) {\n      case 1:\n        this._unFilterType1(rawData, unfilteredLine, byteWidth);\n        break;\n      case 2:\n        this._unFilterType2(rawData, unfilteredLine, byteWidth);\n        break;\n      case 3:\n        this._unFilterType3(rawData, unfilteredLine, byteWidth);\n        break;\n      case 4:\n        this._unFilterType4(rawData, unfilteredLine, byteWidth);\n        break;\n      default:\n        throw new Error(\"Unrecognised filter type - \" + filter);\n    }\n  }\n\n  this.write(unfilteredLine);\n\n  currentImage.lineIndex++;\n  if (currentImage.lineIndex >= currentImage.height) {\n    this._lastLine = null;\n    this._imageIndex++;\n    currentImage = this._images[this._imageIndex];\n  } else {\n    this._lastLine = unfilteredLine;\n  }\n\n  if (currentImage) {\n    // read, using the byte width that may be from the new current image\n    this.read(currentImage.byteWidth + 1, this._reverseFilterLine.bind(this));\n  } else {\n    this._lastLine = null;\n    this.complete();\n  }\n};\n","\"use strict\";\n\nlet util = require(\"util\");\nlet ChunkStream = require(\"./chunkstream\");\nlet Filter = require(\"./filter-parse\");\n\nlet FilterAsync = (module.exports = function (bitmapInfo) {\n  ChunkStream.call(this);\n\n  let buffers = [];\n  let that = this;\n  this._filter = new Filter(bitmapInfo, {\n    read: this.read.bind(this),\n    write: function (buffer) {\n      buffers.push(buffer);\n    },\n    complete: function () {\n      that.emit(\"complete\", Buffer.concat(buffers));\n    },\n  });\n\n  this._filter.start();\n});\nutil.inherits(FilterAsync, ChunkStream);\n","\"use strict\";\n\nmodule.exports = {\n  PNG_SIGNATURE: [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a],\n\n  TYPE_IHDR: 0x49484452,\n  TYPE_IEND: 0x49454e44,\n  TYPE_IDAT: 0x49444154,\n  TYPE_PLTE: 0x504c5445,\n  TYPE_tRNS: 0x74524e53, // eslint-disable-line camelcase\n  TYPE_gAMA: 0x67414d41, // eslint-disable-line camelcase\n\n  // color-type bits\n  COLORTYPE_GRAYSCALE: 0,\n  COLORTYPE_PALETTE: 1,\n  COLORTYPE_COLOR: 2,\n  COLORTYPE_ALPHA: 4, // e.g. grayscale and alpha\n\n  // color-type combinations\n  COLORTYPE_PALETTE_COLOR: 3,\n  COLORTYPE_COLOR_ALPHA: 6,\n\n  COLORTYPE_TO_BPP_MAP: {\n    0: 1,\n    2: 3,\n    3: 1,\n    4: 2,\n    6: 4,\n  },\n\n  GAMMA_DIVISION: 100000,\n};\n","\"use strict\";\n\nlet crcTable = [];\n\n(function () {\n  for (let i = 0; i < 256; i++) {\n    let currentCrc = i;\n    for (let j = 0; j < 8; j++) {\n      if (currentCrc & 1) {\n        currentCrc = 0xedb88320 ^ (currentCrc >>> 1);\n      } else {\n        currentCrc = currentCrc >>> 1;\n      }\n    }\n    crcTable[i] = currentCrc;\n  }\n})();\n\nlet CrcCalculator = (module.exports = function () {\n  this._crc = -1;\n});\n\nCrcCalculator.prototype.write = function (data) {\n  for (let i = 0; i < data.length; i++) {\n    this._crc = crcTable[(this._crc ^ data[i]) & 0xff] ^ (this._crc >>> 8);\n  }\n  return true;\n};\n\nCrcCalculator.prototype.crc32 = function () {\n  return this._crc ^ -1;\n};\n\nCrcCalculator.crc32 = function (buf) {\n  let crc = -1;\n  for (let i = 0; i < buf.length; i++) {\n    crc = crcTable[(crc ^ buf[i]) & 0xff] ^ (crc >>> 8);\n  }\n  return crc ^ -1;\n};\n","\"use strict\";\n\nlet constants = require(\"./constants\");\nlet CrcCalculator = require(\"./crc\");\n\nlet Parser = (module.exports = function (options, dependencies) {\n  this._options = options;\n  options.checkCRC = options.checkCRC !== false;\n\n  this._hasIHDR = false;\n  this._hasIEND = false;\n  this._emittedHeadersFinished = false;\n\n  // input flags/metadata\n  this._palette = [];\n  this._colorType = 0;\n\n  this._chunks = {};\n  this._chunks[constants.TYPE_IHDR] = this._handleIHDR.bind(this);\n  this._chunks[constants.TYPE_IEND] = this._handleIEND.bind(this);\n  this._chunks[constants.TYPE_IDAT] = this._handleIDAT.bind(this);\n  this._chunks[constants.TYPE_PLTE] = this._handlePLTE.bind(this);\n  this._chunks[constants.TYPE_tRNS] = this._handleTRNS.bind(this);\n  this._chunks[constants.TYPE_gAMA] = this._handleGAMA.bind(this);\n\n  this.read = dependencies.read;\n  this.error = dependencies.error;\n  this.metadata = dependencies.metadata;\n  this.gamma = dependencies.gamma;\n  this.transColor = dependencies.transColor;\n  this.palette = dependencies.palette;\n  this.parsed = dependencies.parsed;\n  this.inflateData = dependencies.inflateData;\n  this.finished = dependencies.finished;\n  this.simpleTransparency = dependencies.simpleTransparency;\n  this.headersFinished = dependencies.headersFinished || function () {};\n});\n\nParser.prototype.start = function () {\n  this.read(constants.PNG_SIGNATURE.length, this._parseSignature.bind(this));\n};\n\nParser.prototype._parseSignature = function (data) {\n  let signature = constants.PNG_SIGNATURE;\n\n  for (let i = 0; i < signature.length; i++) {\n    if (data[i] !== signature[i]) {\n      this.error(new Error(\"Invalid file signature\"));\n      return;\n    }\n  }\n  this.read(8, this._parseChunkBegin.bind(this));\n};\n\nParser.prototype._parseChunkBegin = function (data) {\n  // chunk content length\n  let length = data.readUInt32BE(0);\n\n  // chunk type\n  let type = data.readUInt32BE(4);\n  let name = \"\";\n  for (let i = 4; i < 8; i++) {\n    name += String.fromCharCode(data[i]);\n  }\n\n  //console.log('chunk ', name, length);\n\n  // chunk flags\n  let ancillary = Boolean(data[4] & 0x20); // or critical\n  //    priv = Boolean(data[5] & 0x20), // or public\n  //    safeToCopy = Boolean(data[7] & 0x20); // or unsafe\n\n  if (!this._hasIHDR && type !== constants.TYPE_IHDR) {\n    this.error(new Error(\"Expected IHDR on beggining\"));\n    return;\n  }\n\n  this._crc = new CrcCalculator();\n  this._crc.write(Buffer.from(name));\n\n  if (this._chunks[type]) {\n    return this._chunks[type](length);\n  }\n\n  if (!ancillary) {\n    this.error(new Error(\"Unsupported critical chunk type \" + name));\n    return;\n  }\n\n  this.read(length + 4, this._skipChunk.bind(this));\n};\n\nParser.prototype._skipChunk = function (/*data*/) {\n  this.read(8, this._parseChunkBegin.bind(this));\n};\n\nParser.prototype._handleChunkEnd = function () {\n  this.read(4, this._parseChunkEnd.bind(this));\n};\n\nParser.prototype._parseChunkEnd = function (data) {\n  let fileCrc = data.readInt32BE(0);\n  let calcCrc = this._crc.crc32();\n\n  // check CRC\n  if (this._options.checkCRC && calcCrc !== fileCrc) {\n    this.error(new Error(\"Crc error - \" + fileCrc + \" - \" + calcCrc));\n    return;\n  }\n\n  if (!this._hasIEND) {\n    this.read(8, this._parseChunkBegin.bind(this));\n  }\n};\n\nParser.prototype._handleIHDR = function (length) {\n  this.read(length, this._parseIHDR.bind(this));\n};\nParser.prototype._parseIHDR = function (data) {\n  this._crc.write(data);\n\n  let width = data.readUInt32BE(0);\n  let height = data.readUInt32BE(4);\n  let depth = data[8];\n  let colorType = data[9]; // bits: 1 palette, 2 color, 4 alpha\n  let compr = data[10];\n  let filter = data[11];\n  let interlace = data[12];\n\n  // console.log('    width', width, 'height', height,\n  //     'depth', depth, 'colorType', colorType,\n  //     'compr', compr, 'filter', filter, 'interlace', interlace\n  // );\n\n  if (\n    depth !== 8 &&\n    depth !== 4 &&\n    depth !== 2 &&\n    depth !== 1 &&\n    depth !== 16\n  ) {\n    this.error(new Error(\"Unsupported bit depth \" + depth));\n    return;\n  }\n  if (!(colorType in constants.COLORTYPE_TO_BPP_MAP)) {\n    this.error(new Error(\"Unsupported color type\"));\n    return;\n  }\n  if (compr !== 0) {\n    this.error(new Error(\"Unsupported compression method\"));\n    return;\n  }\n  if (filter !== 0) {\n    this.error(new Error(\"Unsupported filter method\"));\n    return;\n  }\n  if (interlace !== 0 && interlace !== 1) {\n    this.error(new Error(\"Unsupported interlace method\"));\n    return;\n  }\n\n  this._colorType = colorType;\n\n  let bpp = constants.COLORTYPE_TO_BPP_MAP[this._colorType];\n\n  this._hasIHDR = true;\n\n  this.metadata({\n    width: width,\n    height: height,\n    depth: depth,\n    interlace: Boolean(interlace),\n    palette: Boolean(colorType & constants.COLORTYPE_PALETTE),\n    color: Boolean(colorType & constants.COLORTYPE_COLOR),\n    alpha: Boolean(colorType & constants.COLORTYPE_ALPHA),\n    bpp: bpp,\n    colorType: colorType,\n  });\n\n  this._handleChunkEnd();\n};\n\nParser.prototype._handlePLTE = function (length) {\n  this.read(length, this._parsePLTE.bind(this));\n};\nParser.prototype._parsePLTE = function (data) {\n  this._crc.write(data);\n\n  let entries = Math.floor(data.length / 3);\n  // console.log('Palette:', entries);\n\n  for (let i = 0; i < entries; i++) {\n    this._palette.push([data[i * 3], data[i * 3 + 1], data[i * 3 + 2], 0xff]);\n  }\n\n  this.palette(this._palette);\n\n  this._handleChunkEnd();\n};\n\nParser.prototype._handleTRNS = function (length) {\n  this.simpleTransparency();\n  this.read(length, this._parseTRNS.bind(this));\n};\nParser.prototype._parseTRNS = function (data) {\n  this._crc.write(data);\n\n  // palette\n  if (this._colorType === constants.COLORTYPE_PALETTE_COLOR) {\n    if (this._palette.length === 0) {\n      this.error(new Error(\"Transparency chunk must be after palette\"));\n      return;\n    }\n    if (data.length > this._palette.length) {\n      this.error(new Error(\"More transparent colors than palette size\"));\n      return;\n    }\n    for (let i = 0; i < data.length; i++) {\n      this._palette[i][3] = data[i];\n    }\n    this.palette(this._palette);\n  }\n\n  // for colorType 0 (grayscale) and 2 (rgb)\n  // there might be one gray/color defined as transparent\n  if (this._colorType === constants.COLORTYPE_GRAYSCALE) {\n    // grey, 2 bytes\n    this.transColor([data.readUInt16BE(0)]);\n  }\n  if (this._colorType === constants.COLORTYPE_COLOR) {\n    this.transColor([\n      data.readUInt16BE(0),\n      data.readUInt16BE(2),\n      data.readUInt16BE(4),\n    ]);\n  }\n\n  this._handleChunkEnd();\n};\n\nParser.prototype._handleGAMA = function (length) {\n  this.read(length, this._parseGAMA.bind(this));\n};\nParser.prototype._parseGAMA = function (data) {\n  this._crc.write(data);\n  this.gamma(data.readUInt32BE(0) / constants.GAMMA_DIVISION);\n\n  this._handleChunkEnd();\n};\n\nParser.prototype._handleIDAT = function (length) {\n  if (!this._emittedHeadersFinished) {\n    this._emittedHeadersFinished = true;\n    this.headersFinished();\n  }\n  this.read(-length, this._parseIDAT.bind(this, length));\n};\nParser.prototype._parseIDAT = function (length, data) {\n  this._crc.write(data);\n\n  if (\n    this._colorType === constants.COLORTYPE_PALETTE_COLOR &&\n    this._palette.length === 0\n  ) {\n    throw new Error(\"Expected palette not found\");\n  }\n\n  this.inflateData(data);\n  let leftOverLength = length - data.length;\n\n  if (leftOverLength > 0) {\n    this._handleIDAT(leftOverLength);\n  } else {\n    this._handleChunkEnd();\n  }\n};\n\nParser.prototype._handleIEND = function (length) {\n  this.read(length, this._parseIEND.bind(this));\n};\nParser.prototype._parseIEND = function (data) {\n  this._crc.write(data);\n\n  this._hasIEND = true;\n  this._handleChunkEnd();\n\n  if (this.finished) {\n    this.finished();\n  }\n};\n","\"use strict\";\n\nlet interlaceUtils = require(\"./interlace\");\n\nlet pixelBppMapper = [\n  // 0 - dummy entry\n  function () {},\n\n  // 1 - L\n  // 0: 0, 1: 0, 2: 0, 3: 0xff\n  function (pxData, data, pxPos, rawPos) {\n    if (rawPos === data.length) {\n      throw new Error(\"Ran out of data\");\n    }\n\n    let pixel = data[rawPos];\n    pxData[pxPos] = pixel;\n    pxData[pxPos + 1] = pixel;\n    pxData[pxPos + 2] = pixel;\n    pxData[pxPos + 3] = 0xff;\n  },\n\n  // 2 - LA\n  // 0: 0, 1: 0, 2: 0, 3: 1\n  function (pxData, data, pxPos, rawPos) {\n    if (rawPos + 1 >= data.length) {\n      throw new Error(\"Ran out of data\");\n    }\n\n    let pixel = data[rawPos];\n    pxData[pxPos] = pixel;\n    pxData[pxPos + 1] = pixel;\n    pxData[pxPos + 2] = pixel;\n    pxData[pxPos + 3] = data[rawPos + 1];\n  },\n\n  // 3 - RGB\n  // 0: 0, 1: 1, 2: 2, 3: 0xff\n  function (pxData, data, pxPos, rawPos) {\n    if (rawPos + 2 >= data.length) {\n      throw new Error(\"Ran out of data\");\n    }\n\n    pxData[pxPos] = data[rawPos];\n    pxData[pxPos + 1] = data[rawPos + 1];\n    pxData[pxPos + 2] = data[rawPos + 2];\n    pxData[pxPos + 3] = 0xff;\n  },\n\n  // 4 - RGBA\n  // 0: 0, 1: 1, 2: 2, 3: 3\n  function (pxData, data, pxPos, rawPos) {\n    if (rawPos + 3 >= data.length) {\n      throw new Error(\"Ran out of data\");\n    }\n\n    pxData[pxPos] = data[rawPos];\n    pxData[pxPos + 1] = data[rawPos + 1];\n    pxData[pxPos + 2] = data[rawPos + 2];\n    pxData[pxPos + 3] = data[rawPos + 3];\n  },\n];\n\nlet pixelBppCustomMapper = [\n  // 0 - dummy entry\n  function () {},\n\n  // 1 - L\n  // 0: 0, 1: 0, 2: 0, 3: 0xff\n  function (pxData, pixelData, pxPos, maxBit) {\n    let pixel = pixelData[0];\n    pxData[pxPos] = pixel;\n    pxData[pxPos + 1] = pixel;\n    pxData[pxPos + 2] = pixel;\n    pxData[pxPos + 3] = maxBit;\n  },\n\n  // 2 - LA\n  // 0: 0, 1: 0, 2: 0, 3: 1\n  function (pxData, pixelData, pxPos) {\n    let pixel = pixelData[0];\n    pxData[pxPos] = pixel;\n    pxData[pxPos + 1] = pixel;\n    pxData[pxPos + 2] = pixel;\n    pxData[pxPos + 3] = pixelData[1];\n  },\n\n  // 3 - RGB\n  // 0: 0, 1: 1, 2: 2, 3: 0xff\n  function (pxData, pixelData, pxPos, maxBit) {\n    pxData[pxPos] = pixelData[0];\n    pxData[pxPos + 1] = pixelData[1];\n    pxData[pxPos + 2] = pixelData[2];\n    pxData[pxPos + 3] = maxBit;\n  },\n\n  // 4 - RGBA\n  // 0: 0, 1: 1, 2: 2, 3: 3\n  function (pxData, pixelData, pxPos) {\n    pxData[pxPos] = pixelData[0];\n    pxData[pxPos + 1] = pixelData[1];\n    pxData[pxPos + 2] = pixelData[2];\n    pxData[pxPos + 3] = pixelData[3];\n  },\n];\n\nfunction bitRetriever(data, depth) {\n  let leftOver = [];\n  let i = 0;\n\n  function split() {\n    if (i === data.length) {\n      throw new Error(\"Ran out of data\");\n    }\n    let byte = data[i];\n    i++;\n    let byte8, byte7, byte6, byte5, byte4, byte3, byte2, byte1;\n    switch (depth) {\n      default:\n        throw new Error(\"unrecognised depth\");\n      case 16:\n        byte2 = data[i];\n        i++;\n        leftOver.push((byte << 8) + byte2);\n        break;\n      case 4:\n        byte2 = byte & 0x0f;\n        byte1 = byte >> 4;\n        leftOver.push(byte1, byte2);\n        break;\n      case 2:\n        byte4 = byte & 3;\n        byte3 = (byte >> 2) & 3;\n        byte2 = (byte >> 4) & 3;\n        byte1 = (byte >> 6) & 3;\n        leftOver.push(byte1, byte2, byte3, byte4);\n        break;\n      case 1:\n        byte8 = byte & 1;\n        byte7 = (byte >> 1) & 1;\n        byte6 = (byte >> 2) & 1;\n        byte5 = (byte >> 3) & 1;\n        byte4 = (byte >> 4) & 1;\n        byte3 = (byte >> 5) & 1;\n        byte2 = (byte >> 6) & 1;\n        byte1 = (byte >> 7) & 1;\n        leftOver.push(byte1, byte2, byte3, byte4, byte5, byte6, byte7, byte8);\n        break;\n    }\n  }\n\n  return {\n    get: function (count) {\n      while (leftOver.length < count) {\n        split();\n      }\n      let returner = leftOver.slice(0, count);\n      leftOver = leftOver.slice(count);\n      return returner;\n    },\n    resetAfterLine: function () {\n      leftOver.length = 0;\n    },\n    end: function () {\n      if (i !== data.length) {\n        throw new Error(\"extra data found\");\n      }\n    },\n  };\n}\n\nfunction mapImage8Bit(image, pxData, getPxPos, bpp, data, rawPos) {\n  // eslint-disable-line max-params\n  let imageWidth = image.width;\n  let imageHeight = image.height;\n  let imagePass = image.index;\n  for (let y = 0; y < imageHeight; y++) {\n    for (let x = 0; x < imageWidth; x++) {\n      let pxPos = getPxPos(x, y, imagePass);\n      pixelBppMapper[bpp](pxData, data, pxPos, rawPos);\n      rawPos += bpp; //eslint-disable-line no-param-reassign\n    }\n  }\n  return rawPos;\n}\n\nfunction mapImageCustomBit(image, pxData, getPxPos, bpp, bits, maxBit) {\n  // eslint-disable-line max-params\n  let imageWidth = image.width;\n  let imageHeight = image.height;\n  let imagePass = image.index;\n  for (let y = 0; y < imageHeight; y++) {\n    for (let x = 0; x < imageWidth; x++) {\n      let pixelData = bits.get(bpp);\n      let pxPos = getPxPos(x, y, imagePass);\n      pixelBppCustomMapper[bpp](pxData, pixelData, pxPos, maxBit);\n    }\n    bits.resetAfterLine();\n  }\n}\n\nexports.dataToBitMap = function (data, bitmapInfo) {\n  let width = bitmapInfo.width;\n  let height = bitmapInfo.height;\n  let depth = bitmapInfo.depth;\n  let bpp = bitmapInfo.bpp;\n  let interlace = bitmapInfo.interlace;\n  let bits;\n\n  if (depth !== 8) {\n    bits = bitRetriever(data, depth);\n  }\n  let pxData;\n  if (depth <= 8) {\n    pxData = Buffer.alloc(width * height * 4);\n  } else {\n    pxData = new Uint16Array(width * height * 4);\n  }\n  let maxBit = Math.pow(2, depth) - 1;\n  let rawPos = 0;\n  let images;\n  let getPxPos;\n\n  if (interlace) {\n    images = interlaceUtils.getImagePasses(width, height);\n    getPxPos = interlaceUtils.getInterlaceIterator(width, height);\n  } else {\n    let nonInterlacedPxPos = 0;\n    getPxPos = function () {\n      let returner = nonInterlacedPxPos;\n      nonInterlacedPxPos += 4;\n      return returner;\n    };\n    images = [{ width: width, height: height }];\n  }\n\n  for (let imageIndex = 0; imageIndex < images.length; imageIndex++) {\n    if (depth === 8) {\n      rawPos = mapImage8Bit(\n        images[imageIndex],\n        pxData,\n        getPxPos,\n        bpp,\n        data,\n        rawPos\n      );\n    } else {\n      mapImageCustomBit(\n        images[imageIndex],\n        pxData,\n        getPxPos,\n        bpp,\n        bits,\n        maxBit\n      );\n    }\n  }\n  if (depth === 8) {\n    if (rawPos !== data.length) {\n      throw new Error(\"extra data found\");\n    }\n  } else {\n    bits.end();\n  }\n\n  return pxData;\n};\n","\"use strict\";\n\nfunction dePalette(indata, outdata, width, height, palette) {\n  let pxPos = 0;\n  // use values from palette\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      let color = palette[indata[pxPos]];\n\n      if (!color) {\n        throw new Error(\"index \" + indata[pxPos] + \" not in palette\");\n      }\n\n      for (let i = 0; i < 4; i++) {\n        outdata[pxPos + i] = color[i];\n      }\n      pxPos += 4;\n    }\n  }\n}\n\nfunction replaceTransparentColor(indata, outdata, width, height, transColor) {\n  let pxPos = 0;\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      let makeTrans = false;\n\n      if (transColor.length === 1) {\n        if (transColor[0] === indata[pxPos]) {\n          makeTrans = true;\n        }\n      } else if (\n        transColor[0] === indata[pxPos] &&\n        transColor[1] === indata[pxPos + 1] &&\n        transColor[2] === indata[pxPos + 2]\n      ) {\n        makeTrans = true;\n      }\n      if (makeTrans) {\n        for (let i = 0; i < 4; i++) {\n          outdata[pxPos + i] = 0;\n        }\n      }\n      pxPos += 4;\n    }\n  }\n}\n\nfunction scaleDepth(indata, outdata, width, height, depth) {\n  let maxOutSample = 255;\n  let maxInSample = Math.pow(2, depth) - 1;\n  let pxPos = 0;\n\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      for (let i = 0; i < 4; i++) {\n        outdata[pxPos + i] = Math.floor(\n          (indata[pxPos + i] * maxOutSample) / maxInSample + 0.5\n        );\n      }\n      pxPos += 4;\n    }\n  }\n}\n\nmodule.exports = function (indata, imageData, skipRescale = false) {\n  let depth = imageData.depth;\n  let width = imageData.width;\n  let height = imageData.height;\n  let colorType = imageData.colorType;\n  let transColor = imageData.transColor;\n  let palette = imageData.palette;\n\n  let outdata = indata; // only different for 16 bits\n\n  if (colorType === 3) {\n    // paletted\n    dePalette(indata, outdata, width, height, palette);\n  } else {\n    if (transColor) {\n      replaceTransparentColor(indata, outdata, width, height, transColor);\n    }\n    // if it needs scaling\n    if (depth !== 8 && !skipRescale) {\n      // if we need to change the buffer size\n      if (depth === 16) {\n        outdata = Buffer.alloc(width * height * 4);\n      }\n      scaleDepth(indata, outdata, width, height, depth);\n    }\n  }\n  return outdata;\n};\n","\"use strict\";\n\nlet util = require(\"util\");\nlet zlib = require(\"zlib\");\nlet ChunkStream = require(\"./chunkstream\");\nlet FilterAsync = require(\"./filter-parse-async\");\nlet Parser = require(\"./parser\");\nlet bitmapper = require(\"./bitmapper\");\nlet formatNormaliser = require(\"./format-normaliser\");\n\nlet ParserAsync = (module.exports = function (options) {\n  ChunkStream.call(this);\n\n  this._parser = new Parser(options, {\n    read: this.read.bind(this),\n    error: this._handleError.bind(this),\n    metadata: this._handleMetaData.bind(this),\n    gamma: this.emit.bind(this, \"gamma\"),\n    palette: this._handlePalette.bind(this),\n    transColor: this._handleTransColor.bind(this),\n    finished: this._finished.bind(this),\n    inflateData: this._inflateData.bind(this),\n    simpleTransparency: this._simpleTransparency.bind(this),\n    headersFinished: this._headersFinished.bind(this),\n  });\n  this._options = options;\n  this.writable = true;\n\n  this._parser.start();\n});\nutil.inherits(ParserAsync, ChunkStream);\n\nParserAsync.prototype._handleError = function (err) {\n  this.emit(\"error\", err);\n\n  this.writable = false;\n\n  this.destroy();\n\n  if (this._inflate && this._inflate.destroy) {\n    this._inflate.destroy();\n  }\n\n  if (this._filter) {\n    this._filter.destroy();\n    // For backward compatibility with Node 7 and below.\n    // Suppress errors due to _inflate calling write() even after\n    // it's destroy()'ed.\n    this._filter.on(\"error\", function () {});\n  }\n\n  this.errord = true;\n};\n\nParserAsync.prototype._inflateData = function (data) {\n  if (!this._inflate) {\n    if (this._bitmapInfo.interlace) {\n      this._inflate = zlib.createInflate();\n\n      this._inflate.on(\"error\", this.emit.bind(this, \"error\"));\n      this._filter.on(\"complete\", this._complete.bind(this));\n\n      this._inflate.pipe(this._filter);\n    } else {\n      let rowSize =\n        ((this._bitmapInfo.width *\n          this._bitmapInfo.bpp *\n          this._bitmapInfo.depth +\n          7) >>\n          3) +\n        1;\n      let imageSize = rowSize * this._bitmapInfo.height;\n      let chunkSize = Math.max(imageSize, zlib.Z_MIN_CHUNK);\n\n      this._inflate = zlib.createInflate({ chunkSize: chunkSize });\n      let leftToInflate = imageSize;\n\n      let emitError = this.emit.bind(this, \"error\");\n      this._inflate.on(\"error\", function (err) {\n        if (!leftToInflate) {\n          return;\n        }\n\n        emitError(err);\n      });\n      this._filter.on(\"complete\", this._complete.bind(this));\n\n      let filterWrite = this._filter.write.bind(this._filter);\n      this._inflate.on(\"data\", function (chunk) {\n        if (!leftToInflate) {\n          return;\n        }\n\n        if (chunk.length > leftToInflate) {\n          chunk = chunk.slice(0, leftToInflate);\n        }\n\n        leftToInflate -= chunk.length;\n\n        filterWrite(chunk);\n      });\n\n      this._inflate.on(\"end\", this._filter.end.bind(this._filter));\n    }\n  }\n  this._inflate.write(data);\n};\n\nParserAsync.prototype._handleMetaData = function (metaData) {\n  this._metaData = metaData;\n  this._bitmapInfo = Object.create(metaData);\n\n  this._filter = new FilterAsync(this._bitmapInfo);\n};\n\nParserAsync.prototype._handleTransColor = function (transColor) {\n  this._bitmapInfo.transColor = transColor;\n};\n\nParserAsync.prototype._handlePalette = function (palette) {\n  this._bitmapInfo.palette = palette;\n};\n\nParserAsync.prototype._simpleTransparency = function () {\n  this._metaData.alpha = true;\n};\n\nParserAsync.prototype._headersFinished = function () {\n  // Up until this point, we don't know if we have a tRNS chunk (alpha)\n  // so we can't emit metadata any earlier\n  this.emit(\"metadata\", this._metaData);\n};\n\nParserAsync.prototype._finished = function () {\n  if (this.errord) {\n    return;\n  }\n\n  if (!this._inflate) {\n    this.emit(\"error\", \"No Inflate block\");\n  } else {\n    // no more data to inflate\n    this._inflate.end();\n  }\n};\n\nParserAsync.prototype._complete = function (filteredData) {\n  if (this.errord) {\n    return;\n  }\n\n  let normalisedBitmapData;\n\n  try {\n    let bitmapData = bitmapper.dataToBitMap(filteredData, this._bitmapInfo);\n\n    normalisedBitmapData = formatNormaliser(\n      bitmapData,\n      this._bitmapInfo,\n      this._options.skipRescale\n    );\n    bitmapData = null;\n  } catch (ex) {\n    this._handleError(ex);\n    return;\n  }\n\n  this.emit(\"parsed\", normalisedBitmapData);\n};\n","\"use strict\";\n\nlet constants = require(\"./constants\");\n\nmodule.exports = function (dataIn, width, height, options) {\n  let outHasAlpha =\n    [constants.COLORTYPE_COLOR_ALPHA, constants.COLORTYPE_ALPHA].indexOf(\n      options.colorType\n    ) !== -1;\n  if (options.colorType === options.inputColorType) {\n    let bigEndian = (function () {\n      let buffer = new ArrayBuffer(2);\n      new DataView(buffer).setInt16(0, 256, true /* littleEndian */);\n      // Int16Array uses the platform's endianness.\n      return new Int16Array(buffer)[0] !== 256;\n    })();\n    // If no need to convert to grayscale and alpha is present/absent in both, take a fast route\n    if (options.bitDepth === 8 || (options.bitDepth === 16 && bigEndian)) {\n      return dataIn;\n    }\n  }\n\n  // map to a UInt16 array if data is 16bit, fix endianness below\n  let data = options.bitDepth !== 16 ? dataIn : new Uint16Array(dataIn.buffer);\n\n  let maxValue = 255;\n  let inBpp = constants.COLORTYPE_TO_BPP_MAP[options.inputColorType];\n  if (inBpp === 4 && !options.inputHasAlpha) {\n    inBpp = 3;\n  }\n  let outBpp = constants.COLORTYPE_TO_BPP_MAP[options.colorType];\n  if (options.bitDepth === 16) {\n    maxValue = 65535;\n    outBpp *= 2;\n  }\n  let outData = Buffer.alloc(width * height * outBpp);\n\n  let inIndex = 0;\n  let outIndex = 0;\n\n  let bgColor = options.bgColor || {};\n  if (bgColor.red === undefined) {\n    bgColor.red = maxValue;\n  }\n  if (bgColor.green === undefined) {\n    bgColor.green = maxValue;\n  }\n  if (bgColor.blue === undefined) {\n    bgColor.blue = maxValue;\n  }\n\n  function getRGBA() {\n    let red;\n    let green;\n    let blue;\n    let alpha = maxValue;\n    switch (options.inputColorType) {\n      case constants.COLORTYPE_COLOR_ALPHA:\n        alpha = data[inIndex + 3];\n        red = data[inIndex];\n        green = data[inIndex + 1];\n        blue = data[inIndex + 2];\n        break;\n      case constants.COLORTYPE_COLOR:\n        red = data[inIndex];\n        green = data[inIndex + 1];\n        blue = data[inIndex + 2];\n        break;\n      case constants.COLORTYPE_ALPHA:\n        alpha = data[inIndex + 1];\n        red = data[inIndex];\n        green = red;\n        blue = red;\n        break;\n      case constants.COLORTYPE_GRAYSCALE:\n        red = data[inIndex];\n        green = red;\n        blue = red;\n        break;\n      default:\n        throw new Error(\n          \"input color type:\" +\n            options.inputColorType +\n            \" is not supported at present\"\n        );\n    }\n\n    if (options.inputHasAlpha) {\n      if (!outHasAlpha) {\n        alpha /= maxValue;\n        red = Math.min(\n          Math.max(Math.round((1 - alpha) * bgColor.red + alpha * red), 0),\n          maxValue\n        );\n        green = Math.min(\n          Math.max(Math.round((1 - alpha) * bgColor.green + alpha * green), 0),\n          maxValue\n        );\n        blue = Math.min(\n          Math.max(Math.round((1 - alpha) * bgColor.blue + alpha * blue), 0),\n          maxValue\n        );\n      }\n    }\n    return { red: red, green: green, blue: blue, alpha: alpha };\n  }\n\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      let rgba = getRGBA(data, inIndex);\n\n      switch (options.colorType) {\n        case constants.COLORTYPE_COLOR_ALPHA:\n        case constants.COLORTYPE_COLOR:\n          if (options.bitDepth === 8) {\n            outData[outIndex] = rgba.red;\n            outData[outIndex + 1] = rgba.green;\n            outData[outIndex + 2] = rgba.blue;\n            if (outHasAlpha) {\n              outData[outIndex + 3] = rgba.alpha;\n            }\n          } else {\n            outData.writeUInt16BE(rgba.red, outIndex);\n            outData.writeUInt16BE(rgba.green, outIndex + 2);\n            outData.writeUInt16BE(rgba.blue, outIndex + 4);\n            if (outHasAlpha) {\n              outData.writeUInt16BE(rgba.alpha, outIndex + 6);\n            }\n          }\n          break;\n        case constants.COLORTYPE_ALPHA:\n        case constants.COLORTYPE_GRAYSCALE: {\n          // Convert to grayscale and alpha\n          let grayscale = (rgba.red + rgba.green + rgba.blue) / 3;\n          if (options.bitDepth === 8) {\n            outData[outIndex] = grayscale;\n            if (outHasAlpha) {\n              outData[outIndex + 1] = rgba.alpha;\n            }\n          } else {\n            outData.writeUInt16BE(grayscale, outIndex);\n            if (outHasAlpha) {\n              outData.writeUInt16BE(rgba.alpha, outIndex + 2);\n            }\n          }\n          break;\n        }\n        default:\n          throw new Error(\"unrecognised color Type \" + options.colorType);\n      }\n\n      inIndex += inBpp;\n      outIndex += outBpp;\n    }\n  }\n\n  return outData;\n};\n","\"use strict\";\n\nlet paethPredictor = require(\"./paeth-predictor\");\n\nfunction filterNone(pxData, pxPos, byteWidth, rawData, rawPos) {\n  for (let x = 0; x < byteWidth; x++) {\n    rawData[rawPos + x] = pxData[pxPos + x];\n  }\n}\n\nfunction filterSumNone(pxData, pxPos, byteWidth) {\n  let sum = 0;\n  let length = pxPos + byteWidth;\n\n  for (let i = pxPos; i < length; i++) {\n    sum += Math.abs(pxData[i]);\n  }\n  return sum;\n}\n\nfunction filterSub(pxData, pxPos, byteWidth, rawData, rawPos, bpp) {\n  for (let x = 0; x < byteWidth; x++) {\n    let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n    let val = pxData[pxPos + x] - left;\n\n    rawData[rawPos + x] = val;\n  }\n}\n\nfunction filterSumSub(pxData, pxPos, byteWidth, bpp) {\n  let sum = 0;\n  for (let x = 0; x < byteWidth; x++) {\n    let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n    let val = pxData[pxPos + x] - left;\n\n    sum += Math.abs(val);\n  }\n\n  return sum;\n}\n\nfunction filterUp(pxData, pxPos, byteWidth, rawData, rawPos) {\n  for (let x = 0; x < byteWidth; x++) {\n    let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n    let val = pxData[pxPos + x] - up;\n\n    rawData[rawPos + x] = val;\n  }\n}\n\nfunction filterSumUp(pxData, pxPos, byteWidth) {\n  let sum = 0;\n  let length = pxPos + byteWidth;\n  for (let x = pxPos; x < length; x++) {\n    let up = pxPos > 0 ? pxData[x - byteWidth] : 0;\n    let val = pxData[x] - up;\n\n    sum += Math.abs(val);\n  }\n\n  return sum;\n}\n\nfunction filterAvg(pxData, pxPos, byteWidth, rawData, rawPos, bpp) {\n  for (let x = 0; x < byteWidth; x++) {\n    let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n    let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n    let val = pxData[pxPos + x] - ((left + up) >> 1);\n\n    rawData[rawPos + x] = val;\n  }\n}\n\nfunction filterSumAvg(pxData, pxPos, byteWidth, bpp) {\n  let sum = 0;\n  for (let x = 0; x < byteWidth; x++) {\n    let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n    let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n    let val = pxData[pxPos + x] - ((left + up) >> 1);\n\n    sum += Math.abs(val);\n  }\n\n  return sum;\n}\n\nfunction filterPaeth(pxData, pxPos, byteWidth, rawData, rawPos, bpp) {\n  for (let x = 0; x < byteWidth; x++) {\n    let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n    let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n    let upleft =\n      pxPos > 0 && x >= bpp ? pxData[pxPos + x - (byteWidth + bpp)] : 0;\n    let val = pxData[pxPos + x] - paethPredictor(left, up, upleft);\n\n    rawData[rawPos + x] = val;\n  }\n}\n\nfunction filterSumPaeth(pxData, pxPos, byteWidth, bpp) {\n  let sum = 0;\n  for (let x = 0; x < byteWidth; x++) {\n    let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n    let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n    let upleft =\n      pxPos > 0 && x >= bpp ? pxData[pxPos + x - (byteWidth + bpp)] : 0;\n    let val = pxData[pxPos + x] - paethPredictor(left, up, upleft);\n\n    sum += Math.abs(val);\n  }\n\n  return sum;\n}\n\nlet filters = {\n  0: filterNone,\n  1: filterSub,\n  2: filterUp,\n  3: filterAvg,\n  4: filterPaeth,\n};\n\nlet filterSums = {\n  0: filterSumNone,\n  1: filterSumSub,\n  2: filterSumUp,\n  3: filterSumAvg,\n  4: filterSumPaeth,\n};\n\nmodule.exports = function (pxData, width, height, options, bpp) {\n  let filterTypes;\n  if (!(\"filterType\" in options) || options.filterType === -1) {\n    filterTypes = [0, 1, 2, 3, 4];\n  } else if (typeof options.filterType === \"number\") {\n    filterTypes = [options.filterType];\n  } else {\n    throw new Error(\"unrecognised filter types\");\n  }\n\n  if (options.bitDepth === 16) {\n    bpp *= 2;\n  }\n  let byteWidth = width * bpp;\n  let rawPos = 0;\n  let pxPos = 0;\n  let rawData = Buffer.alloc((byteWidth + 1) * height);\n\n  let sel = filterTypes[0];\n\n  for (let y = 0; y < height; y++) {\n    if (filterTypes.length > 1) {\n      // find best filter for this line (with lowest sum of values)\n      let min = Infinity;\n\n      for (let i = 0; i < filterTypes.length; i++) {\n        let sum = filterSums[filterTypes[i]](pxData, pxPos, byteWidth, bpp);\n        if (sum < min) {\n          sel = filterTypes[i];\n          min = sum;\n        }\n      }\n    }\n\n    rawData[rawPos] = sel;\n    rawPos++;\n    filters[sel](pxData, pxPos, byteWidth, rawData, rawPos, bpp);\n    rawPos += byteWidth;\n    pxPos += byteWidth;\n  }\n  return rawData;\n};\n","\"use strict\";\n\nlet constants = require(\"./constants\");\nlet CrcStream = require(\"./crc\");\nlet bitPacker = require(\"./bitpacker\");\nlet filter = require(\"./filter-pack\");\nlet zlib = require(\"zlib\");\n\nlet Packer = (module.exports = function (options) {\n  this._options = options;\n\n  options.deflateChunkSize = options.deflateChunkSize || 32 * 1024;\n  options.deflateLevel =\n    options.deflateLevel != null ? options.deflateLevel : 9;\n  options.deflateStrategy =\n    options.deflateStrategy != null ? options.deflateStrategy : 3;\n  options.inputHasAlpha =\n    options.inputHasAlpha != null ? options.inputHasAlpha : true;\n  options.deflateFactory = options.deflateFactory || zlib.createDeflate;\n  options.bitDepth = options.bitDepth || 8;\n  // This is outputColorType\n  options.colorType =\n    typeof options.colorType === \"number\"\n      ? options.colorType\n      : constants.COLORTYPE_COLOR_ALPHA;\n  options.inputColorType =\n    typeof options.inputColorType === \"number\"\n      ? options.inputColorType\n      : constants.COLORTYPE_COLOR_ALPHA;\n\n  if (\n    [\n      constants.COLORTYPE_GRAYSCALE,\n      constants.COLORTYPE_COLOR,\n      constants.COLORTYPE_COLOR_ALPHA,\n      constants.COLORTYPE_ALPHA,\n    ].indexOf(options.colorType) === -1\n  ) {\n    throw new Error(\n      \"option color type:\" + options.colorType + \" is not supported at present\"\n    );\n  }\n  if (\n    [\n      constants.COLORTYPE_GRAYSCALE,\n      constants.COLORTYPE_COLOR,\n      constants.COLORTYPE_COLOR_ALPHA,\n      constants.COLORTYPE_ALPHA,\n    ].indexOf(options.inputColorType) === -1\n  ) {\n    throw new Error(\n      \"option input color type:\" +\n        options.inputColorType +\n        \" is not supported at present\"\n    );\n  }\n  if (options.bitDepth !== 8 && options.bitDepth !== 16) {\n    throw new Error(\n      \"option bit depth:\" + options.bitDepth + \" is not supported at present\"\n    );\n  }\n});\n\nPacker.prototype.getDeflateOptions = function () {\n  return {\n    chunkSize: this._options.deflateChunkSize,\n    level: this._options.deflateLevel,\n    strategy: this._options.deflateStrategy,\n  };\n};\n\nPacker.prototype.createDeflate = function () {\n  return this._options.deflateFactory(this.getDeflateOptions());\n};\n\nPacker.prototype.filterData = function (data, width, height) {\n  // convert to correct format for filtering (e.g. right bpp and bit depth)\n  let packedData = bitPacker(data, width, height, this._options);\n\n  // filter pixel data\n  let bpp = constants.COLORTYPE_TO_BPP_MAP[this._options.colorType];\n  let filteredData = filter(packedData, width, height, this._options, bpp);\n  return filteredData;\n};\n\nPacker.prototype._packChunk = function (type, data) {\n  let len = data ? data.length : 0;\n  let buf = Buffer.alloc(len + 12);\n\n  buf.writeUInt32BE(len, 0);\n  buf.writeUInt32BE(type, 4);\n\n  if (data) {\n    data.copy(buf, 8);\n  }\n\n  buf.writeInt32BE(\n    CrcStream.crc32(buf.slice(4, buf.length - 4)),\n    buf.length - 4\n  );\n  return buf;\n};\n\nPacker.prototype.packGAMA = function (gamma) {\n  let buf = Buffer.alloc(4);\n  buf.writeUInt32BE(Math.floor(gamma * constants.GAMMA_DIVISION), 0);\n  return this._packChunk(constants.TYPE_gAMA, buf);\n};\n\nPacker.prototype.packIHDR = function (width, height) {\n  let buf = Buffer.alloc(13);\n  buf.writeUInt32BE(width, 0);\n  buf.writeUInt32BE(height, 4);\n  buf[8] = this._options.bitDepth; // Bit depth\n  buf[9] = this._options.colorType; // colorType\n  buf[10] = 0; // compression\n  buf[11] = 0; // filter\n  buf[12] = 0; // interlace\n\n  return this._packChunk(constants.TYPE_IHDR, buf);\n};\n\nPacker.prototype.packIDAT = function (data) {\n  return this._packChunk(constants.TYPE_IDAT, data);\n};\n\nPacker.prototype.packIEND = function () {\n  return this._packChunk(constants.TYPE_IEND, null);\n};\n","\"use strict\";\n\nlet util = require(\"util\");\nlet Stream = require(\"stream\");\nlet constants = require(\"./constants\");\nlet Packer = require(\"./packer\");\n\nlet PackerAsync = (module.exports = function (opt) {\n  Stream.call(this);\n\n  let options = opt || {};\n\n  this._packer = new Packer(options);\n  this._deflate = this._packer.createDeflate();\n\n  this.readable = true;\n});\nutil.inherits(PackerAsync, Stream);\n\nPackerAsync.prototype.pack = function (data, width, height, gamma) {\n  // Signature\n  this.emit(\"data\", Buffer.from(constants.PNG_SIGNATURE));\n  this.emit(\"data\", this._packer.packIHDR(width, height));\n\n  if (gamma) {\n    this.emit(\"data\", this._packer.packGAMA(gamma));\n  }\n\n  let filteredData = this._packer.filterData(data, width, height);\n\n  // compress it\n  this._deflate.on(\"error\", this.emit.bind(this, \"error\"));\n\n  this._deflate.on(\n    \"data\",\n    function (compressedData) {\n      this.emit(\"data\", this._packer.packIDAT(compressedData));\n    }.bind(this)\n  );\n\n  this._deflate.on(\n    \"end\",\n    function () {\n      this.emit(\"data\", this._packer.packIEND());\n      this.emit(\"end\");\n    }.bind(this)\n  );\n\n  this._deflate.end(filteredData);\n};\n","\"use strict\";\n\nlet assert = require(\"assert\").ok;\nlet zlib = require(\"zlib\");\nlet util = require(\"util\");\n\nlet kMaxLength = require(\"buffer\").kMaxLength;\n\nfunction Inflate(opts) {\n  if (!(this instanceof Inflate)) {\n    return new Inflate(opts);\n  }\n\n  if (opts && opts.chunkSize < zlib.Z_MIN_CHUNK) {\n    opts.chunkSize = zlib.Z_MIN_CHUNK;\n  }\n\n  zlib.Inflate.call(this, opts);\n\n  // Node 8 --> 9 compatibility check\n  this._offset = this._offset === undefined ? this._outOffset : this._offset;\n  this._buffer = this._buffer || this._outBuffer;\n\n  if (opts && opts.maxLength != null) {\n    this._maxLength = opts.maxLength;\n  }\n}\n\nfunction createInflate(opts) {\n  return new Inflate(opts);\n}\n\nfunction _close(engine, callback) {\n  if (callback) {\n    process.nextTick(callback);\n  }\n\n  // Caller may invoke .close after a zlib error (which will null _handle).\n  if (!engine._handle) {\n    return;\n  }\n\n  engine._handle.close();\n  engine._handle = null;\n}\n\nInflate.prototype._processChunk = function (chunk, flushFlag, asyncCb) {\n  if (typeof asyncCb === \"function\") {\n    return zlib.Inflate._processChunk.call(this, chunk, flushFlag, asyncCb);\n  }\n\n  let self = this;\n\n  let availInBefore = chunk && chunk.length;\n  let availOutBefore = this._chunkSize - this._offset;\n  let leftToInflate = this._maxLength;\n  let inOff = 0;\n\n  let buffers = [];\n  let nread = 0;\n\n  let error;\n  this.on(\"error\", function (err) {\n    error = err;\n  });\n\n  function handleChunk(availInAfter, availOutAfter) {\n    if (self._hadError) {\n      return;\n    }\n\n    let have = availOutBefore - availOutAfter;\n    assert(have >= 0, \"have should not go down\");\n\n    if (have > 0) {\n      let out = self._buffer.slice(self._offset, self._offset + have);\n      self._offset += have;\n\n      if (out.length > leftToInflate) {\n        out = out.slice(0, leftToInflate);\n      }\n\n      buffers.push(out);\n      nread += out.length;\n      leftToInflate -= out.length;\n\n      if (leftToInflate === 0) {\n        return false;\n      }\n    }\n\n    if (availOutAfter === 0 || self._offset >= self._chunkSize) {\n      availOutBefore = self._chunkSize;\n      self._offset = 0;\n      self._buffer = Buffer.allocUnsafe(self._chunkSize);\n    }\n\n    if (availOutAfter === 0) {\n      inOff += availInBefore - availInAfter;\n      availInBefore = availInAfter;\n\n      return true;\n    }\n\n    return false;\n  }\n\n  assert(this._handle, \"zlib binding closed\");\n  let res;\n  do {\n    res = this._handle.writeSync(\n      flushFlag,\n      chunk, // in\n      inOff, // in_off\n      availInBefore, // in_len\n      this._buffer, // out\n      this._offset, //out_off\n      availOutBefore\n    ); // out_len\n    // Node 8 --> 9 compatibility check\n    res = res || this._writeState;\n  } while (!this._hadError && handleChunk(res[0], res[1]));\n\n  if (this._hadError) {\n    throw error;\n  }\n\n  if (nread >= kMaxLength) {\n    _close(this);\n    throw new RangeError(\n      \"Cannot create final Buffer. It would be larger than 0x\" +\n        kMaxLength.toString(16) +\n        \" bytes\"\n    );\n  }\n\n  let buf = Buffer.concat(buffers, nread);\n  _close(this);\n\n  return buf;\n};\n\nutil.inherits(Inflate, zlib.Inflate);\n\nfunction zlibBufferSync(engine, buffer) {\n  if (typeof buffer === \"string\") {\n    buffer = Buffer.from(buffer);\n  }\n  if (!(buffer instanceof Buffer)) {\n    throw new TypeError(\"Not a string or buffer\");\n  }\n\n  let flushFlag = engine._finishFlushFlag;\n  if (flushFlag == null) {\n    flushFlag = zlib.Z_FINISH;\n  }\n\n  return engine._processChunk(buffer, flushFlag);\n}\n\nfunction inflateSync(buffer, opts) {\n  return zlibBufferSync(new Inflate(opts), buffer);\n}\n\nmodule.exports = exports = inflateSync;\nexports.Inflate = Inflate;\nexports.createInflate = createInflate;\nexports.inflateSync = inflateSync;\n","\"use strict\";\n\nlet SyncReader = (module.exports = function (buffer) {\n  this._buffer = buffer;\n  this._reads = [];\n});\n\nSyncReader.prototype.read = function (length, callback) {\n  this._reads.push({\n    length: Math.abs(length), // if length < 0 then at most this length\n    allowLess: length < 0,\n    func: callback,\n  });\n};\n\nSyncReader.prototype.process = function () {\n  // as long as there is any data and read requests\n  while (this._reads.length > 0 && this._buffer.length) {\n    let read = this._reads[0];\n\n    if (\n      this._buffer.length &&\n      (this._buffer.length >= read.length || read.allowLess)\n    ) {\n      // ok there is any data so that we can satisfy this request\n      this._reads.shift(); // == read\n\n      let buf = this._buffer;\n\n      this._buffer = buf.slice(read.length);\n\n      read.func.call(this, buf.slice(0, read.length));\n    } else {\n      break;\n    }\n  }\n\n  if (this._reads.length > 0) {\n    throw new Error(\"There are some read requests waitng on finished stream\");\n  }\n\n  if (this._buffer.length > 0) {\n    throw new Error(\"unrecognised content at end of stream\");\n  }\n};\n","\"use strict\";\n\nlet SyncReader = require(\"./sync-reader\");\nlet Filter = require(\"./filter-parse\");\n\nexports.process = function (inBuffer, bitmapInfo) {\n  let outBuffers = [];\n  let reader = new SyncReader(inBuffer);\n  let filter = new Filter(bitmapInfo, {\n    read: reader.read.bind(reader),\n    write: function (bufferPart) {\n      outBuffers.push(bufferPart);\n    },\n    complete: function () {},\n  });\n\n  filter.start();\n  reader.process();\n\n  return Buffer.concat(outBuffers);\n};\n","\"use strict\";\n\nlet hasSyncZlib = true;\nlet zlib = require(\"zlib\");\nlet inflateSync = require(\"./sync-inflate\");\nif (!zlib.deflateSync) {\n  hasSyncZlib = false;\n}\nlet SyncReader = require(\"./sync-reader\");\nlet FilterSync = require(\"./filter-parse-sync\");\nlet Parser = require(\"./parser\");\nlet bitmapper = require(\"./bitmapper\");\nlet formatNormaliser = require(\"./format-normaliser\");\n\nmodule.exports = function (buffer, options) {\n  if (!hasSyncZlib) {\n    throw new Error(\n      \"To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0\"\n    );\n  }\n\n  let err;\n  function handleError(_err_) {\n    err = _err_;\n  }\n\n  let metaData;\n  function handleMetaData(_metaData_) {\n    metaData = _metaData_;\n  }\n\n  function handleTransColor(transColor) {\n    metaData.transColor = transColor;\n  }\n\n  function handlePalette(palette) {\n    metaData.palette = palette;\n  }\n\n  function handleSimpleTransparency() {\n    metaData.alpha = true;\n  }\n\n  let gamma;\n  function handleGamma(_gamma_) {\n    gamma = _gamma_;\n  }\n\n  let inflateDataList = [];\n  function handleInflateData(inflatedData) {\n    inflateDataList.push(inflatedData);\n  }\n\n  let reader = new SyncReader(buffer);\n\n  let parser = new Parser(options, {\n    read: reader.read.bind(reader),\n    error: handleError,\n    metadata: handleMetaData,\n    gamma: handleGamma,\n    palette: handlePalette,\n    transColor: handleTransColor,\n    inflateData: handleInflateData,\n    simpleTransparency: handleSimpleTransparency,\n  });\n\n  parser.start();\n  reader.process();\n\n  if (err) {\n    throw err;\n  }\n\n  //join together the inflate datas\n  let inflateData = Buffer.concat(inflateDataList);\n  inflateDataList.length = 0;\n\n  let inflatedData;\n  if (metaData.interlace) {\n    inflatedData = zlib.inflateSync(inflateData);\n  } else {\n    let rowSize =\n      ((metaData.width * metaData.bpp * metaData.depth + 7) >> 3) + 1;\n    let imageSize = rowSize * metaData.height;\n    inflatedData = inflateSync(inflateData, {\n      chunkSize: imageSize,\n      maxLength: imageSize,\n    });\n  }\n  inflateData = null;\n\n  if (!inflatedData || !inflatedData.length) {\n    throw new Error(\"bad png - invalid inflate data response\");\n  }\n\n  let unfilteredData = FilterSync.process(inflatedData, metaData);\n  inflateData = null;\n\n  let bitmapData = bitmapper.dataToBitMap(unfilteredData, metaData);\n  unfilteredData = null;\n\n  let normalisedBitmapData = formatNormaliser(\n    bitmapData,\n    metaData,\n    options.skipRescale\n  );\n\n  metaData.data = normalisedBitmapData;\n  metaData.gamma = gamma || 0;\n\n  return metaData;\n};\n","\"use strict\";\n\nlet hasSyncZlib = true;\nlet zlib = require(\"zlib\");\nif (!zlib.deflateSync) {\n  hasSyncZlib = false;\n}\nlet constants = require(\"./constants\");\nlet Packer = require(\"./packer\");\n\nmodule.exports = function (metaData, opt) {\n  if (!hasSyncZlib) {\n    throw new Error(\n      \"To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0\"\n    );\n  }\n\n  let options = opt || {};\n\n  let packer = new Packer(options);\n\n  let chunks = [];\n\n  // Signature\n  chunks.push(Buffer.from(constants.PNG_SIGNATURE));\n\n  // Header\n  chunks.push(packer.packIHDR(metaData.width, metaData.height));\n\n  if (metaData.gamma) {\n    chunks.push(packer.packGAMA(metaData.gamma));\n  }\n\n  let filteredData = packer.filterData(\n    metaData.data,\n    metaData.width,\n    metaData.height\n  );\n\n  // compress it\n  let compressedData = zlib.deflateSync(\n    filteredData,\n    packer.getDeflateOptions()\n  );\n  filteredData = null;\n\n  if (!compressedData || !compressedData.length) {\n    throw new Error(\"bad png - invalid compressed data response\");\n  }\n  chunks.push(packer.packIDAT(compressedData));\n\n  // End\n  chunks.push(packer.packIEND());\n\n  return Buffer.concat(chunks);\n};\n","\"use strict\";\n\nlet parse = require(\"./parser-sync\");\nlet pack = require(\"./packer-sync\");\n\nexports.read = function (buffer, options) {\n  return parse(buffer, options || {});\n};\n\nexports.write = function (png, options) {\n  return pack(png, options);\n};\n","\"use strict\";\n\nlet util = require(\"util\");\nlet Stream = require(\"stream\");\nlet Parser = require(\"./parser-async\");\nlet Packer = require(\"./packer-async\");\nlet PNGSync = require(\"./png-sync\");\n\nlet PNG = (exports.PNG = function (options) {\n  Stream.call(this);\n\n  options = options || {}; // eslint-disable-line no-param-reassign\n\n  // coerce pixel dimensions to integers (also coerces undefined -> 0):\n  this.width = options.width | 0;\n  this.height = options.height | 0;\n\n  this.data =\n    this.width > 0 && this.height > 0\n      ? Buffer.alloc(4 * this.width * this.height)\n      : null;\n\n  if (options.fill && this.data) {\n    this.data.fill(0);\n  }\n\n  this.gamma = 0;\n  this.readable = this.writable = true;\n\n  this._parser = new Parser(options);\n\n  this._parser.on(\"error\", this.emit.bind(this, \"error\"));\n  this._parser.on(\"close\", this._handleClose.bind(this));\n  this._parser.on(\"metadata\", this._metadata.bind(this));\n  this._parser.on(\"gamma\", this._gamma.bind(this));\n  this._parser.on(\n    \"parsed\",\n    function (data) {\n      this.data = data;\n      this.emit(\"parsed\", data);\n    }.bind(this)\n  );\n\n  this._packer = new Packer(options);\n  this._packer.on(\"data\", this.emit.bind(this, \"data\"));\n  this._packer.on(\"end\", this.emit.bind(this, \"end\"));\n  this._parser.on(\"close\", this._handleClose.bind(this));\n  this._packer.on(\"error\", this.emit.bind(this, \"error\"));\n});\nutil.inherits(PNG, Stream);\n\nPNG.sync = PNGSync;\n\nPNG.prototype.pack = function () {\n  if (!this.data || !this.data.length) {\n    this.emit(\"error\", \"No data provided\");\n    return this;\n  }\n\n  process.nextTick(\n    function () {\n      this._packer.pack(this.data, this.width, this.height, this.gamma);\n    }.bind(this)\n  );\n\n  return this;\n};\n\nPNG.prototype.parse = function (data, callback) {\n  if (callback) {\n    let onParsed, onError;\n\n    onParsed = function (parsedData) {\n      this.removeListener(\"error\", onError);\n\n      this.data = parsedData;\n      callback(null, this);\n    }.bind(this);\n\n    onError = function (err) {\n      this.removeListener(\"parsed\", onParsed);\n\n      callback(err, null);\n    }.bind(this);\n\n    this.once(\"parsed\", onParsed);\n    this.once(\"error\", onError);\n  }\n\n  this.end(data);\n  return this;\n};\n\nPNG.prototype.write = function (data) {\n  this._parser.write(data);\n  return true;\n};\n\nPNG.prototype.end = function (data) {\n  this._parser.end(data);\n};\n\nPNG.prototype._metadata = function (metadata) {\n  this.width = metadata.width;\n  this.height = metadata.height;\n\n  this.emit(\"metadata\", metadata);\n};\n\nPNG.prototype._gamma = function (gamma) {\n  this.gamma = gamma;\n};\n\nPNG.prototype._handleClose = function () {\n  if (!this._parser.writable && !this._packer.readable) {\n    this.emit(\"close\");\n  }\n};\n\nPNG.bitblt = function (src, dst, srcX, srcY, width, height, deltaX, deltaY) {\n  // eslint-disable-line max-params\n  // coerce pixel dimensions to integers (also coerces undefined -> 0):\n  /* eslint-disable no-param-reassign */\n  srcX |= 0;\n  srcY |= 0;\n  width |= 0;\n  height |= 0;\n  deltaX |= 0;\n  deltaY |= 0;\n  /* eslint-enable no-param-reassign */\n\n  if (\n    srcX > src.width ||\n    srcY > src.height ||\n    srcX + width > src.width ||\n    srcY + height > src.height\n  ) {\n    throw new Error(\"bitblt reading outside image\");\n  }\n\n  if (\n    deltaX > dst.width ||\n    deltaY > dst.height ||\n    deltaX + width > dst.width ||\n    deltaY + height > dst.height\n  ) {\n    throw new Error(\"bitblt writing outside image\");\n  }\n\n  for (let y = 0; y < height; y++) {\n    src.data.copy(\n      dst.data,\n      ((deltaY + y) * dst.width + deltaX) << 2,\n      ((srcY + y) * src.width + srcX) << 2,\n      ((srcY + y) * src.width + srcX + width) << 2\n    );\n  }\n};\n\nPNG.prototype.bitblt = function (\n  dst,\n  srcX,\n  srcY,\n  width,\n  height,\n  deltaX,\n  deltaY\n) {\n  // eslint-disable-line max-params\n\n  PNG.bitblt(this, dst, srcX, srcY, width, height, deltaX, deltaY);\n  return this;\n};\n\nPNG.adjustGamma = function (src) {\n  if (src.gamma) {\n    for (let y = 0; y < src.height; y++) {\n      for (let x = 0; x < src.width; x++) {\n        let idx = (src.width * y + x) << 2;\n\n        for (let i = 0; i < 3; i++) {\n          let sample = src.data[idx + i] / 255;\n          sample = Math.pow(sample, 1 / 2.2 / src.gamma);\n          src.data[idx + i] = Math.round(sample * 255);\n        }\n      }\n    }\n    src.gamma = 0;\n  }\n};\n\nPNG.prototype.adjustGamma = function () {\n  PNG.adjustGamma(this);\n};\n","const jpegJs = require('jpeg-js');\nconst { PNG } = require('pngjs');\n\nmodule.exports = {};\n\nmodule.exports.JPEG = ({ data, width, height, quality }) => jpegJs.encode({ data, width, height }, Math.floor(quality * 100)).data;\n\nmodule.exports.PNG = ({ data, width, height }) => {\n  const png = new PNG({ width, height });\n  png.data = data;\n\n  return PNG.sync.write(png, {\n    width: width,\n    height: height,\n    deflateLevel: 9,\n    deflateStrategy: 3,\n    filterType: -1,\n    colorType: 6,\n    inputHasAlpha: true\n  });\n};\n","module.exports = (decode, encode) => {\n  const convertImage = async ({ image, format, quality }) => {\n    return await encode[format]({\n      width: image.width,\n      height: image.height,\n      data: image.data,\n      quality\n    });\n  };\n\n  const convert = async ({ buffer, format, quality, all }) => {\n    if (!encode[format]) {\n      throw new Error(`output format needs to be one of [${Object.keys(encode)}]`);\n    }\n\n    if (!all) {\n      const image = await decode({ buffer });\n      return await convertImage({ image, format, quality });\n    }\n\n    const images = await decode.all({ buffer });\n\n    return images.map(image => {\n      return {\n        convert: async () => await convertImage({\n          image: await image.decode(),\n          format,\n          quality\n        })\n      };\n    });\n  };\n\n  return {\n    one: async ({ buffer, format, quality = 0.92 }) => await convert({ buffer, format, quality, all: false }),\n    all: async ({ buffer, format, quality = 0.92 }) => await convert({ buffer, format, quality, all: true })\n  };\n};\n","const decode = require('heic-decode');\nconst formats = require('./formats-node.js');\nconst { one, all } = require('./lib.js')(decode, formats);\n\nmodule.exports = one;\nmodule.exports.all = all;\n","'use strict'\n\nexports.parse = function (source, transform) {\n  return new ArrayParser(source, transform).parse()\n}\n\nclass ArrayParser {\n  constructor (source, transform) {\n    this.source = source\n    this.transform = transform || identity\n    this.position = 0\n    this.entries = []\n    this.recorded = []\n    this.dimension = 0\n  }\n\n  isEof () {\n    return this.position >= this.source.length\n  }\n\n  nextCharacter () {\n    var character = this.source[this.position++]\n    if (character === '\\\\') {\n      return {\n        value: this.source[this.position++],\n        escaped: true\n      }\n    }\n    return {\n      value: character,\n      escaped: false\n    }\n  }\n\n  record (character) {\n    this.recorded.push(character)\n  }\n\n  newEntry (includeEmpty) {\n    var entry\n    if (this.recorded.length > 0 || includeEmpty) {\n      entry = this.recorded.join('')\n      if (entry === 'NULL' && !includeEmpty) {\n        entry = null\n      }\n      if (entry !== null) entry = this.transform(entry)\n      this.entries.push(entry)\n      this.recorded = []\n    }\n  }\n\n  consumeDimensions () {\n    if (this.source[0] === '[') {\n      while (!this.isEof()) {\n        var char = this.nextCharacter()\n        if (char.value === '=') break\n      }\n    }\n  }\n\n  parse (nested) {\n    var character, parser, quote\n    this.consumeDimensions()\n    while (!this.isEof()) {\n      character = this.nextCharacter()\n      if (character.value === '{' && !quote) {\n        this.dimension++\n        if (this.dimension > 1) {\n          parser = new ArrayParser(this.source.substr(this.position - 1), this.transform)\n          this.entries.push(parser.parse(true))\n          this.position += parser.position - 2\n        }\n      } else if (character.value === '}' && !quote) {\n        this.dimension--\n        if (!this.dimension) {\n          this.newEntry()\n          if (nested) return this.entries\n        }\n      } else if (character.value === '\"' && !character.escaped) {\n        if (quote) this.newEntry(true)\n        quote = !quote\n      } else if (character.value === ',' && !quote) {\n        this.newEntry()\n      } else {\n        this.record(character.value)\n      }\n    }\n    if (this.dimension !== 0) {\n      throw new Error('array dimension not balanced')\n    }\n    return this.entries\n  }\n}\n\nfunction identity (value) {\n  return value\n}\n","var array = require('postgres-array');\n\nmodule.exports = {\n  create: function (source, transform) {\n    return {\n      parse: function() {\n        return array.parse(source, transform);\n      }\n    };\n  }\n};\n","'use strict'\n\nvar DATE_TIME = /(\\d{1,})-(\\d{2})-(\\d{2}) (\\d{2}):(\\d{2}):(\\d{2})(\\.\\d{1,})?.*?( BC)?$/\nvar DATE = /^(\\d{1,})-(\\d{2})-(\\d{2})( BC)?$/\nvar TIME_ZONE = /([Z+-])(\\d{2})?:?(\\d{2})?:?(\\d{2})?/\nvar INFINITY = /^-?infinity$/\n\nmodule.exports = function parseDate (isoDate) {\n  if (INFINITY.test(isoDate)) {\n    // Capitalize to Infinity before passing to Number\n    return Number(isoDate.replace('i', 'I'))\n  }\n  var matches = DATE_TIME.exec(isoDate)\n\n  if (!matches) {\n    // Force YYYY-MM-DD dates to be parsed as local time\n    return getDate(isoDate) || null\n  }\n\n  var isBC = !!matches[8]\n  var year = parseInt(matches[1], 10)\n  if (isBC) {\n    year = bcYearToNegativeYear(year)\n  }\n\n  var month = parseInt(matches[2], 10) - 1\n  var day = matches[3]\n  var hour = parseInt(matches[4], 10)\n  var minute = parseInt(matches[5], 10)\n  var second = parseInt(matches[6], 10)\n\n  var ms = matches[7]\n  ms = ms ? 1000 * parseFloat(ms) : 0\n\n  var date\n  var offset = timeZoneOffset(isoDate)\n  if (offset != null) {\n    date = new Date(Date.UTC(year, month, day, hour, minute, second, ms))\n\n    // Account for years from 0 to 99 being interpreted as 1900-1999\n    // by Date.UTC / the multi-argument form of the Date constructor\n    if (is0To99(year)) {\n      date.setUTCFullYear(year)\n    }\n\n    if (offset !== 0) {\n      date.setTime(date.getTime() - offset)\n    }\n  } else {\n    date = new Date(year, month, day, hour, minute, second, ms)\n\n    if (is0To99(year)) {\n      date.setFullYear(year)\n    }\n  }\n\n  return date\n}\n\nfunction getDate (isoDate) {\n  var matches = DATE.exec(isoDate)\n  if (!matches) {\n    return\n  }\n\n  var year = parseInt(matches[1], 10)\n  var isBC = !!matches[4]\n  if (isBC) {\n    year = bcYearToNegativeYear(year)\n  }\n\n  var month = parseInt(matches[2], 10) - 1\n  var day = matches[3]\n  // YYYY-MM-DD will be parsed as local time\n  var date = new Date(year, month, day)\n\n  if (is0To99(year)) {\n    date.setFullYear(year)\n  }\n\n  return date\n}\n\n// match timezones:\n// Z (UTC)\n// -05\n// +06:30\nfunction timeZoneOffset (isoDate) {\n  if (isoDate.endsWith('+00')) {\n    return 0\n  }\n\n  var zone = TIME_ZONE.exec(isoDate.split(' ')[1])\n  if (!zone) return\n  var type = zone[1]\n\n  if (type === 'Z') {\n    return 0\n  }\n  var sign = type === '-' ? -1 : 1\n  var offset = parseInt(zone[2], 10) * 3600 +\n    parseInt(zone[3] || 0, 10) * 60 +\n    parseInt(zone[4] || 0, 10)\n\n  return offset * sign * 1000\n}\n\nfunction bcYearToNegativeYear (year) {\n  // Account for numerical difference between representations of BC years\n  // See: https://github.com/bendrucker/postgres-date/issues/5\n  return -(year - 1)\n}\n\nfunction is0To99 (num) {\n  return num >= 0 && num < 100\n}\n","module.exports = extend\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction extend(target) {\n    for (var i = 1; i < arguments.length; i++) {\n        var source = arguments[i]\n\n        for (var key in source) {\n            if (hasOwnProperty.call(source, key)) {\n                target[key] = source[key]\n            }\n        }\n    }\n\n    return target\n}\n","'use strict'\n\nvar extend = require('xtend/mutable')\n\nmodule.exports = PostgresInterval\n\nfunction PostgresInterval (raw) {\n  if (!(this instanceof PostgresInterval)) {\n    return new PostgresInterval(raw)\n  }\n  extend(this, parse(raw))\n}\nvar properties = ['seconds', 'minutes', 'hours', 'days', 'months', 'years']\nPostgresInterval.prototype.toPostgres = function () {\n  var filtered = properties.filter(this.hasOwnProperty, this)\n\n  // In addition to `properties`, we need to account for fractions of seconds.\n  if (this.milliseconds && filtered.indexOf('seconds') < 0) {\n    filtered.push('seconds')\n  }\n\n  if (filtered.length === 0) return '0'\n  return filtered\n    .map(function (property) {\n      var value = this[property] || 0\n\n      // Account for fractional part of seconds,\n      // remove trailing zeroes.\n      if (property === 'seconds' && this.milliseconds) {\n        value = (value + this.milliseconds / 1000).toFixed(6).replace(/\\.?0+$/, '')\n      }\n\n      return value + ' ' + property\n    }, this)\n    .join(' ')\n}\n\nvar propertiesISOEquivalent = {\n  years: 'Y',\n  months: 'M',\n  days: 'D',\n  hours: 'H',\n  minutes: 'M',\n  seconds: 'S'\n}\nvar dateProperties = ['years', 'months', 'days']\nvar timeProperties = ['hours', 'minutes', 'seconds']\n// according to ISO 8601\nPostgresInterval.prototype.toISOString = PostgresInterval.prototype.toISO = function () {\n  var datePart = dateProperties\n    .map(buildProperty, this)\n    .join('')\n\n  var timePart = timeProperties\n    .map(buildProperty, this)\n    .join('')\n\n  return 'P' + datePart + 'T' + timePart\n\n  function buildProperty (property) {\n    var value = this[property] || 0\n\n    // Account for fractional part of seconds,\n    // remove trailing zeroes.\n    if (property === 'seconds' && this.milliseconds) {\n      value = (value + this.milliseconds / 1000).toFixed(6).replace(/0+$/, '')\n    }\n\n    return value + propertiesISOEquivalent[property]\n  }\n}\n\nvar NUMBER = '([+-]?\\\\d+)'\nvar YEAR = NUMBER + '\\\\s+years?'\nvar MONTH = NUMBER + '\\\\s+mons?'\nvar DAY = NUMBER + '\\\\s+days?'\nvar TIME = '([+-])?([\\\\d]*):(\\\\d\\\\d):(\\\\d\\\\d)\\\\.?(\\\\d{1,6})?'\nvar INTERVAL = new RegExp([YEAR, MONTH, DAY, TIME].map(function (regexString) {\n  return '(' + regexString + ')?'\n})\n  .join('\\\\s*'))\n\n// Positions of values in regex match\nvar positions = {\n  years: 2,\n  months: 4,\n  days: 6,\n  hours: 9,\n  minutes: 10,\n  seconds: 11,\n  milliseconds: 12\n}\n// We can use negative time\nvar negatives = ['hours', 'minutes', 'seconds', 'milliseconds']\n\nfunction parseMilliseconds (fraction) {\n  // add omitted zeroes\n  var microseconds = fraction + '000000'.slice(fraction.length)\n  return parseInt(microseconds, 10) / 1000\n}\n\nfunction parse (interval) {\n  if (!interval) return {}\n  var matches = INTERVAL.exec(interval)\n  var isNegative = matches[8] === '-'\n  return Object.keys(positions)\n    .reduce(function (parsed, property) {\n      var position = positions[property]\n      var value = matches[position]\n      // no empty string\n      if (!value) return parsed\n      // milliseconds are actually microseconds (up to 6 digits)\n      // with omitted trailing zeroes.\n      value = property === 'milliseconds'\n        ? parseMilliseconds(value)\n        : parseInt(value, 10)\n      // no zeros\n      if (!value) return parsed\n      if (isNegative && ~negatives.indexOf(property)) {\n        value *= -1\n      }\n      parsed[property] = value\n      return parsed\n    }, {})\n}\n","'use strict'\n\nvar bufferFrom = Buffer.from || Buffer\n\nmodule.exports = function parseBytea (input) {\n  if (/^\\\\x/.test(input)) {\n    // new 'hex' style response (pg >9.0)\n    return bufferFrom(input.substr(2), 'hex')\n  }\n  var output = ''\n  var i = 0\n  while (i < input.length) {\n    if (input[i] !== '\\\\') {\n      output += input[i]\n      ++i\n    } else {\n      if (/[0-7]{3}/.test(input.substr(i + 1, 3))) {\n        output += String.fromCharCode(parseInt(input.substr(i + 1, 3), 8))\n        i += 4\n      } else {\n        var backslashes = 1\n        while (i + backslashes < input.length && input[i + backslashes] === '\\\\') {\n          backslashes++\n        }\n        for (var k = 0; k < Math.floor(backslashes / 2); ++k) {\n          output += '\\\\'\n        }\n        i += Math.floor(backslashes / 2) * 2\n      }\n    }\n  }\n  return bufferFrom(output, 'binary')\n}\n","var array = require('postgres-array')\nvar arrayParser = require('./arrayParser');\nvar parseDate = require('postgres-date');\nvar parseInterval = require('postgres-interval');\nvar parseByteA = require('postgres-bytea');\n\nfunction allowNull (fn) {\n  return function nullAllowed (value) {\n    if (value === null) return value\n    return fn(value)\n  }\n}\n\nfunction parseBool (value) {\n  if (value === null) return value\n  return value === 'TRUE' ||\n    value === 't' ||\n    value === 'true' ||\n    value === 'y' ||\n    value === 'yes' ||\n    value === 'on' ||\n    value === '1';\n}\n\nfunction parseBoolArray (value) {\n  if (!value) return null\n  return array.parse(value, parseBool)\n}\n\nfunction parseBaseTenInt (string) {\n  return parseInt(string, 10)\n}\n\nfunction parseIntegerArray (value) {\n  if (!value) return null\n  return array.parse(value, allowNull(parseBaseTenInt))\n}\n\nfunction parseBigIntegerArray (value) {\n  if (!value) return null\n  return array.parse(value, allowNull(function (entry) {\n    return parseBigInteger(entry).trim()\n  }))\n}\n\nvar parsePointArray = function(value) {\n  if(!value) { return null; }\n  var p = arrayParser.create(value, function(entry) {\n    if(entry !== null) {\n      entry = parsePoint(entry);\n    }\n    return entry;\n  });\n\n  return p.parse();\n};\n\nvar parseFloatArray = function(value) {\n  if(!value) { return null; }\n  var p = arrayParser.create(value, function(entry) {\n    if(entry !== null) {\n      entry = parseFloat(entry);\n    }\n    return entry;\n  });\n\n  return p.parse();\n};\n\nvar parseStringArray = function(value) {\n  if(!value) { return null; }\n\n  var p = arrayParser.create(value);\n  return p.parse();\n};\n\nvar parseDateArray = function(value) {\n  if (!value) { return null; }\n\n  var p = arrayParser.create(value, function(entry) {\n    if (entry !== null) {\n      entry = parseDate(entry);\n    }\n    return entry;\n  });\n\n  return p.parse();\n};\n\nvar parseIntervalArray = function(value) {\n  if (!value) { return null; }\n\n  var p = arrayParser.create(value, function(entry) {\n    if (entry !== null) {\n      entry = parseInterval(entry);\n    }\n    return entry;\n  });\n\n  return p.parse();\n};\n\nvar parseByteAArray = function(value) {\n  if (!value) { return null; }\n\n  return array.parse(value, allowNull(parseByteA));\n};\n\nvar parseInteger = function(value) {\n  return parseInt(value, 10);\n};\n\nvar parseBigInteger = function(value) {\n  var valStr = String(value);\n  if (/^\\d+$/.test(valStr)) { return valStr; }\n  return value;\n};\n\nvar parseJsonArray = function(value) {\n  if (!value) { return null; }\n\n  return array.parse(value, allowNull(JSON.parse));\n};\n\nvar parsePoint = function(value) {\n  if (value[0] !== '(') { return null; }\n\n  value = value.substring( 1, value.length - 1 ).split(',');\n\n  return {\n    x: parseFloat(value[0])\n  , y: parseFloat(value[1])\n  };\n};\n\nvar parseCircle = function(value) {\n  if (value[0] !== '<' && value[1] !== '(') { return null; }\n\n  var point = '(';\n  var radius = '';\n  var pointParsed = false;\n  for (var i = 2; i < value.length - 1; i++){\n    if (!pointParsed) {\n      point += value[i];\n    }\n\n    if (value[i] === ')') {\n      pointParsed = true;\n      continue;\n    } else if (!pointParsed) {\n      continue;\n    }\n\n    if (value[i] === ','){\n      continue;\n    }\n\n    radius += value[i];\n  }\n  var result = parsePoint(point);\n  result.radius = parseFloat(radius);\n\n  return result;\n};\n\nvar init = function(register) {\n  register(20, parseBigInteger); // int8\n  register(21, parseInteger); // int2\n  register(23, parseInteger); // int4\n  register(26, parseInteger); // oid\n  register(700, parseFloat); // float4/real\n  register(701, parseFloat); // float8/double\n  register(16, parseBool);\n  register(1082, parseDate); // date\n  register(1114, parseDate); // timestamp without timezone\n  register(1184, parseDate); // timestamp\n  register(600, parsePoint); // point\n  register(651, parseStringArray); // cidr[]\n  register(718, parseCircle); // circle\n  register(1000, parseBoolArray);\n  register(1001, parseByteAArray);\n  register(1005, parseIntegerArray); // _int2\n  register(1007, parseIntegerArray); // _int4\n  register(1028, parseIntegerArray); // oid[]\n  register(1016, parseBigIntegerArray); // _int8\n  register(1017, parsePointArray); // point[]\n  register(1021, parseFloatArray); // _float4\n  register(1022, parseFloatArray); // _float8\n  register(1231, parseFloatArray); // _numeric\n  register(1014, parseStringArray); //char\n  register(1015, parseStringArray); //varchar\n  register(1008, parseStringArray);\n  register(1009, parseStringArray);\n  register(1040, parseStringArray); // macaddr[]\n  register(1041, parseStringArray); // inet[]\n  register(1115, parseDateArray); // timestamp without time zone[]\n  register(1182, parseDateArray); // _date\n  register(1185, parseDateArray); // timestamp with time zone[]\n  register(1186, parseInterval);\n  register(1187, parseIntervalArray);\n  register(17, parseByteA);\n  register(114, JSON.parse.bind(JSON)); // json\n  register(3802, JSON.parse.bind(JSON)); // jsonb\n  register(199, parseJsonArray); // json[]\n  register(3807, parseJsonArray); // jsonb[]\n  register(3907, parseStringArray); // numrange[]\n  register(2951, parseStringArray); // uuid[]\n  register(791, parseStringArray); // money[]\n  register(1183, parseStringArray); // time[]\n  register(1270, parseStringArray); // timetz[]\n};\n\nmodule.exports = {\n  init: init\n};\n","'use strict';\n\n// selected so (BASE - 1) * 0x100000000 + 0xffffffff is a safe integer\nvar BASE = 1000000;\n\nfunction readInt8(buffer) {\n\tvar high = buffer.readInt32BE(0);\n\tvar low = buffer.readUInt32BE(4);\n\tvar sign = '';\n\n\tif (high < 0) {\n\t\thigh = ~high + (low === 0);\n\t\tlow = (~low + 1) >>> 0;\n\t\tsign = '-';\n\t}\n\n\tvar result = '';\n\tvar carry;\n\tvar t;\n\tvar digits;\n\tvar pad;\n\tvar l;\n\tvar i;\n\n\t{\n\t\tcarry = high % BASE;\n\t\thigh = high / BASE >>> 0;\n\n\t\tt = 0x100000000 * carry + low;\n\t\tlow = t / BASE >>> 0;\n\t\tdigits = '' + (t - BASE * low);\n\n\t\tif (low === 0 && high === 0) {\n\t\t\treturn sign + digits + result;\n\t\t}\n\n\t\tpad = '';\n\t\tl = 6 - digits.length;\n\n\t\tfor (i = 0; i < l; i++) {\n\t\t\tpad += '0';\n\t\t}\n\n\t\tresult = pad + digits + result;\n\t}\n\n\t{\n\t\tcarry = high % BASE;\n\t\thigh = high / BASE >>> 0;\n\n\t\tt = 0x100000000 * carry + low;\n\t\tlow = t / BASE >>> 0;\n\t\tdigits = '' + (t - BASE * low);\n\n\t\tif (low === 0 && high === 0) {\n\t\t\treturn sign + digits + result;\n\t\t}\n\n\t\tpad = '';\n\t\tl = 6 - digits.length;\n\n\t\tfor (i = 0; i < l; i++) {\n\t\t\tpad += '0';\n\t\t}\n\n\t\tresult = pad + digits + result;\n\t}\n\n\t{\n\t\tcarry = high % BASE;\n\t\thigh = high / BASE >>> 0;\n\n\t\tt = 0x100000000 * carry + low;\n\t\tlow = t / BASE >>> 0;\n\t\tdigits = '' + (t - BASE * low);\n\n\t\tif (low === 0 && high === 0) {\n\t\t\treturn sign + digits + result;\n\t\t}\n\n\t\tpad = '';\n\t\tl = 6 - digits.length;\n\n\t\tfor (i = 0; i < l; i++) {\n\t\t\tpad += '0';\n\t\t}\n\n\t\tresult = pad + digits + result;\n\t}\n\n\t{\n\t\tcarry = high % BASE;\n\t\tt = 0x100000000 * carry + low;\n\t\tdigits = '' + t % BASE;\n\n\t\treturn sign + digits + result;\n\t}\n}\n\nmodule.exports = readInt8;\n","var parseInt64 = require('pg-int8');\n\nvar parseBits = function(data, bits, offset, invert, callback) {\n  offset = offset || 0;\n  invert = invert || false;\n  callback = callback || function(lastValue, newValue, bits) { return (lastValue * Math.pow(2, bits)) + newValue; };\n  var offsetBytes = offset >> 3;\n\n  var inv = function(value) {\n    if (invert) {\n      return ~value & 0xff;\n    }\n\n    return value;\n  };\n\n  // read first (maybe partial) byte\n  var mask = 0xff;\n  var firstBits = 8 - (offset % 8);\n  if (bits < firstBits) {\n    mask = (0xff << (8 - bits)) & 0xff;\n    firstBits = bits;\n  }\n\n  if (offset) {\n    mask = mask >> (offset % 8);\n  }\n\n  var result = 0;\n  if ((offset % 8) + bits >= 8) {\n    result = callback(0, inv(data[offsetBytes]) & mask, firstBits);\n  }\n\n  // read bytes\n  var bytes = (bits + offset) >> 3;\n  for (var i = offsetBytes + 1; i < bytes; i++) {\n    result = callback(result, inv(data[i]), 8);\n  }\n\n  // bits to read, that are not a complete byte\n  var lastBits = (bits + offset) % 8;\n  if (lastBits > 0) {\n    result = callback(result, inv(data[bytes]) >> (8 - lastBits), lastBits);\n  }\n\n  return result;\n};\n\nvar parseFloatFromBits = function(data, precisionBits, exponentBits) {\n  var bias = Math.pow(2, exponentBits - 1) - 1;\n  var sign = parseBits(data, 1);\n  var exponent = parseBits(data, exponentBits, 1);\n\n  if (exponent === 0) {\n    return 0;\n  }\n\n  // parse mantissa\n  var precisionBitsCounter = 1;\n  var parsePrecisionBits = function(lastValue, newValue, bits) {\n    if (lastValue === 0) {\n      lastValue = 1;\n    }\n\n    for (var i = 1; i <= bits; i++) {\n      precisionBitsCounter /= 2;\n      if ((newValue & (0x1 << (bits - i))) > 0) {\n        lastValue += precisionBitsCounter;\n      }\n    }\n\n    return lastValue;\n  };\n\n  var mantissa = parseBits(data, precisionBits, exponentBits + 1, false, parsePrecisionBits);\n\n  // special cases\n  if (exponent == (Math.pow(2, exponentBits + 1) - 1)) {\n    if (mantissa === 0) {\n      return (sign === 0) ? Infinity : -Infinity;\n    }\n\n    return NaN;\n  }\n\n  // normale number\n  return ((sign === 0) ? 1 : -1) * Math.pow(2, exponent - bias) * mantissa;\n};\n\nvar parseInt16 = function(value) {\n  if (parseBits(value, 1) == 1) {\n    return -1 * (parseBits(value, 15, 1, true) + 1);\n  }\n\n  return parseBits(value, 15, 1);\n};\n\nvar parseInt32 = function(value) {\n  if (parseBits(value, 1) == 1) {\n    return -1 * (parseBits(value, 31, 1, true) + 1);\n  }\n\n  return parseBits(value, 31, 1);\n};\n\nvar parseFloat32 = function(value) {\n  return parseFloatFromBits(value, 23, 8);\n};\n\nvar parseFloat64 = function(value) {\n  return parseFloatFromBits(value, 52, 11);\n};\n\nvar parseNumeric = function(value) {\n  var sign = parseBits(value, 16, 32);\n  if (sign == 0xc000) {\n    return NaN;\n  }\n\n  var weight = Math.pow(10000, parseBits(value, 16, 16));\n  var result = 0;\n\n  var digits = [];\n  var ndigits = parseBits(value, 16);\n  for (var i = 0; i < ndigits; i++) {\n    result += parseBits(value, 16, 64 + (16 * i)) * weight;\n    weight /= 10000;\n  }\n\n  var scale = Math.pow(10, parseBits(value, 16, 48));\n  return ((sign === 0) ? 1 : -1) * Math.round(result * scale) / scale;\n};\n\nvar parseDate = function(isUTC, value) {\n  var sign = parseBits(value, 1);\n  var rawValue = parseBits(value, 63, 1);\n\n  // discard usecs and shift from 2000 to 1970\n  var result = new Date((((sign === 0) ? 1 : -1) * rawValue / 1000) + 946684800000);\n\n  if (!isUTC) {\n    result.setTime(result.getTime() + result.getTimezoneOffset() * 60000);\n  }\n\n  // add microseconds to the date\n  result.usec = rawValue % 1000;\n  result.getMicroSeconds = function() {\n    return this.usec;\n  };\n  result.setMicroSeconds = function(value) {\n    this.usec = value;\n  };\n  result.getUTCMicroSeconds = function() {\n    return this.usec;\n  };\n\n  return result;\n};\n\nvar parseArray = function(value) {\n  var dim = parseBits(value, 32);\n\n  var flags = parseBits(value, 32, 32);\n  var elementType = parseBits(value, 32, 64);\n\n  var offset = 96;\n  var dims = [];\n  for (var i = 0; i < dim; i++) {\n    // parse dimension\n    dims[i] = parseBits(value, 32, offset);\n    offset += 32;\n\n    // ignore lower bounds\n    offset += 32;\n  }\n\n  var parseElement = function(elementType) {\n    // parse content length\n    var length = parseBits(value, 32, offset);\n    offset += 32;\n\n    // parse null values\n    if (length == 0xffffffff) {\n      return null;\n    }\n\n    var result;\n    if ((elementType == 0x17) || (elementType == 0x14)) {\n      // int/bigint\n      result = parseBits(value, length * 8, offset);\n      offset += length * 8;\n      return result;\n    }\n    else if (elementType == 0x19) {\n      // string\n      result = value.toString(this.encoding, offset >> 3, (offset += (length << 3)) >> 3);\n      return result;\n    }\n    else {\n      console.log(\"ERROR: ElementType not implemented: \" + elementType);\n    }\n  };\n\n  var parse = function(dimension, elementType) {\n    var array = [];\n    var i;\n\n    if (dimension.length > 1) {\n      var count = dimension.shift();\n      for (i = 0; i < count; i++) {\n        array[i] = parse(dimension, elementType);\n      }\n      dimension.unshift(count);\n    }\n    else {\n      for (i = 0; i < dimension[0]; i++) {\n        array[i] = parseElement(elementType);\n      }\n    }\n\n    return array;\n  };\n\n  return parse(dims, elementType);\n};\n\nvar parseText = function(value) {\n  return value.toString('utf8');\n};\n\nvar parseBool = function(value) {\n  if(value === null) return null;\n  return (parseBits(value, 8) > 0);\n};\n\nvar init = function(register) {\n  register(20, parseInt64);\n  register(21, parseInt16);\n  register(23, parseInt32);\n  register(26, parseInt32);\n  register(1700, parseNumeric);\n  register(700, parseFloat32);\n  register(701, parseFloat64);\n  register(16, parseBool);\n  register(1114, parseDate.bind(null, false));\n  register(1184, parseDate.bind(null, true));\n  register(1000, parseArray);\n  register(1007, parseArray);\n  register(1016, parseArray);\n  register(1008, parseArray);\n  register(1009, parseArray);\n  register(25, parseText);\n};\n\nmodule.exports = {\n  init: init\n};\n","/**\n * Following query was used to generate this file:\n\n SELECT json_object_agg(UPPER(PT.typname), PT.oid::int4 ORDER BY pt.oid)\n FROM pg_type PT\n WHERE typnamespace = (SELECT pgn.oid FROM pg_namespace pgn WHERE nspname = 'pg_catalog') -- Take only builting Postgres types with stable OID (extension types are not guaranted to be stable)\n AND typtype = 'b' -- Only basic types\n AND typelem = 0 -- Ignore aliases\n AND typisdefined -- Ignore undefined types\n */\n\nmodule.exports = {\n    BOOL: 16,\n    BYTEA: 17,\n    CHAR: 18,\n    INT8: 20,\n    INT2: 21,\n    INT4: 23,\n    REGPROC: 24,\n    TEXT: 25,\n    OID: 26,\n    TID: 27,\n    XID: 28,\n    CID: 29,\n    JSON: 114,\n    XML: 142,\n    PG_NODE_TREE: 194,\n    SMGR: 210,\n    PATH: 602,\n    POLYGON: 604,\n    CIDR: 650,\n    FLOAT4: 700,\n    FLOAT8: 701,\n    ABSTIME: 702,\n    RELTIME: 703,\n    TINTERVAL: 704,\n    CIRCLE: 718,\n    MACADDR8: 774,\n    MONEY: 790,\n    MACADDR: 829,\n    INET: 869,\n    ACLITEM: 1033,\n    BPCHAR: 1042,\n    VARCHAR: 1043,\n    DATE: 1082,\n    TIME: 1083,\n    TIMESTAMP: 1114,\n    TIMESTAMPTZ: 1184,\n    INTERVAL: 1186,\n    TIMETZ: 1266,\n    BIT: 1560,\n    VARBIT: 1562,\n    NUMERIC: 1700,\n    REFCURSOR: 1790,\n    REGPROCEDURE: 2202,\n    REGOPER: 2203,\n    REGOPERATOR: 2204,\n    REGCLASS: 2205,\n    REGTYPE: 2206,\n    UUID: 2950,\n    TXID_SNAPSHOT: 2970,\n    PG_LSN: 3220,\n    PG_NDISTINCT: 3361,\n    PG_DEPENDENCIES: 3402,\n    TSVECTOR: 3614,\n    TSQUERY: 3615,\n    GTSVECTOR: 3642,\n    REGCONFIG: 3734,\n    REGDICTIONARY: 3769,\n    JSONB: 3802,\n    REGNAMESPACE: 4089,\n    REGROLE: 4096\n};\n","var textParsers = require('./lib/textParsers');\nvar binaryParsers = require('./lib/binaryParsers');\nvar arrayParser = require('./lib/arrayParser');\nvar builtinTypes = require('./lib/builtins');\n\nexports.getTypeParser = getTypeParser;\nexports.setTypeParser = setTypeParser;\nexports.arrayParser = arrayParser;\nexports.builtins = builtinTypes;\n\nvar typeParsers = {\n  text: {},\n  binary: {}\n};\n\n//the empty parse function\nfunction noParse (val) {\n  return String(val);\n};\n\n//returns a function used to convert a specific type (specified by\n//oid) into a result javascript type\n//note: the oid can be obtained via the following sql query:\n//SELECT oid FROM pg_type WHERE typname = 'TYPE_NAME_HERE';\nfunction getTypeParser (oid, format) {\n  format = format || 'text';\n  if (!typeParsers[format]) {\n    return noParse;\n  }\n  return typeParsers[format][oid] || noParse;\n};\n\nfunction setTypeParser (oid, format, parseFn) {\n  if(typeof format == 'function') {\n    parseFn = format;\n    format = 'text';\n  }\n  typeParsers[format][oid] = parseFn;\n};\n\ntextParsers.init(function(oid, converter) {\n  typeParsers.text[oid] = converter;\n});\n\nbinaryParsers.init(function(oid, converter) {\n  typeParsers.binary[oid] = converter;\n});\n","'use strict'\n\nlet user\ntry {\n  user = process.platform === 'win32' ? process.env.USERNAME : process.env.USER\n} catch {\n  // ignore, e.g., Deno without --allow-env\n}\n\nmodule.exports = {\n  // database host. defaults to localhost\n  host: 'localhost',\n\n  // database user's name\n  user,\n\n  // name of database to connect\n  database: undefined,\n\n  // database user's password\n  password: null,\n\n  // a Postgres connection string to be used instead of setting individual connection items\n  // NOTE:  Setting this value will cause it to override any other value (such as database or user) defined\n  // in the defaults object.\n  connectionString: undefined,\n\n  // database port\n  port: 5432,\n\n  // number of rows to return at a time from a prepared statement's\n  // portal. 0 will return all rows at once\n  rows: 0,\n\n  // binary result mode\n  binary: false,\n\n  // Connection pool options - see https://github.com/brianc/node-pg-pool\n\n  // number of connections to use in connection pool\n  // 0 will disable connection pooling\n  max: 10,\n\n  // max milliseconds a client can go unused before it is removed\n  // from the pool and destroyed\n  idleTimeoutMillis: 30000,\n\n  client_encoding: '',\n\n  ssl: false,\n\n  // SSL negotiation style: 'postgres' (traditional SSLRequest) or 'direct'\n  sslnegotiation: undefined,\n\n  application_name: undefined,\n\n  fallback_application_name: undefined,\n\n  options: undefined,\n\n  parseInputDatesAsUTC: false,\n\n  // max milliseconds any query using this connection will execute for before timing out in error.\n  // false=unlimited\n  statement_timeout: false,\n\n  // Abort any statement that waits longer than the specified duration in milliseconds while attempting to acquire a lock.\n  // false=unlimited\n  lock_timeout: false,\n\n  // Terminate any session with an open transaction that has been idle for longer than the specified duration in milliseconds\n  // false=unlimited\n  idle_in_transaction_session_timeout: false,\n\n  // max milliseconds to wait for query to complete (client side)\n  query_timeout: false,\n\n  connect_timeout: 0,\n\n  keepalives: 1,\n\n  keepalives_idle: 0,\n}\n\nconst pgTypes = require('pg-types')\n// save default parsers\nconst parseBigInteger = pgTypes.getTypeParser(20, 'text')\nconst parseBigIntegerArray = pgTypes.getTypeParser(1016, 'text')\n\n// parse int8 so you can get your count values as actual numbers\nmodule.exports.__defineSetter__('parseInt8', function (val) {\n  pgTypes.setTypeParser(20, 'text', val ? pgTypes.getTypeParser(23, 'text') : parseBigInteger)\n  pgTypes.setTypeParser(1016, 'text', val ? pgTypes.getTypeParser(1007, 'text') : parseBigIntegerArray)\n})\n","'use strict'\n\nconst defaults = require('./defaults')\n\nconst { isDate } = require('util/types')\n\nfunction escapeElement(elementRepresentation) {\n  const escaped = elementRepresentation.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"')\n\n  return '\"' + escaped + '\"'\n}\n\n// convert a JS array to a postgres array literal\n// uses comma separator so won't work for types like box that use\n// a different array separator.\nfunction arrayString(val) {\n  let result = '{'\n  for (let i = 0; i < val.length; i++) {\n    if (i > 0) {\n      result += ','\n    }\n    let item = val[i]\n    if (item == null) {\n      result += 'NULL'\n    } else if (Array.isArray(item)) {\n      result += arrayString(item)\n    } else if (ArrayBuffer.isView(item)) {\n      if (!(item instanceof Buffer)) {\n        item = Buffer.from(item.buffer, item.byteOffset, item.byteLength)\n      }\n      result += '\\\\\\\\x' + item.toString('hex')\n    } else {\n      result += escapeElement(prepareValue(item))\n    }\n  }\n  result += '}'\n  return result\n}\n\n// converts values from javascript types\n// to their 'raw' counterparts for use as a postgres parameter\n// note: you can override this function to provide your own conversion mechanism\n// for complex types, etc...\nconst prepareValue = function (val, seen) {\n  // null and undefined are both null for postgres\n  if (val == null) {\n    return null\n  }\n  if (typeof val === 'object') {\n    if (val instanceof Buffer) {\n      return val\n    }\n    if (ArrayBuffer.isView(val)) {\n      return Buffer.from(val.buffer, val.byteOffset, val.byteLength)\n    }\n    if (isDate(val)) {\n      if (defaults.parseInputDatesAsUTC) {\n        return dateToStringUTC(val)\n      } else {\n        return dateToString(val)\n      }\n    }\n    if (Array.isArray(val)) {\n      return arrayString(val)\n    }\n\n    return prepareObject(val, seen)\n  }\n  return val.toString()\n}\n\nfunction prepareObject(val, seen) {\n  if (val && typeof val.toPostgres === 'function') {\n    seen = seen || []\n    if (seen.indexOf(val) !== -1) {\n      throw new Error('circular reference detected while preparing \"' + val + '\" for query')\n    }\n    seen.push(val)\n\n    return prepareValue(val.toPostgres(prepareValue), seen)\n  }\n  return JSON.stringify(val)\n}\n\nfunction dateToString(date) {\n  let offset = -date.getTimezoneOffset()\n\n  let year = date.getFullYear()\n  const isBCYear = year < 1\n  if (isBCYear) year = Math.abs(year) + 1 // negative years are 1 off their BC representation\n\n  let ret =\n    String(year).padStart(4, '0') +\n    '-' +\n    String(date.getMonth() + 1).padStart(2, '0') +\n    '-' +\n    String(date.getDate()).padStart(2, '0') +\n    'T' +\n    String(date.getHours()).padStart(2, '0') +\n    ':' +\n    String(date.getMinutes()).padStart(2, '0') +\n    ':' +\n    String(date.getSeconds()).padStart(2, '0') +\n    '.' +\n    String(date.getMilliseconds()).padStart(3, '0')\n\n  if (offset < 0) {\n    ret += '-'\n    offset *= -1\n  } else {\n    ret += '+'\n  }\n\n  ret += String(Math.floor(offset / 60)).padStart(2, '0') + ':' + String(offset % 60).padStart(2, '0')\n  if (isBCYear) ret += ' BC'\n  return ret\n}\n\nfunction dateToStringUTC(date) {\n  let year = date.getUTCFullYear()\n  const isBCYear = year < 1\n  if (isBCYear) year = Math.abs(year) + 1 // negative years are 1 off their BC representation\n\n  let ret =\n    String(year).padStart(4, '0') +\n    '-' +\n    String(date.getUTCMonth() + 1).padStart(2, '0') +\n    '-' +\n    String(date.getUTCDate()).padStart(2, '0') +\n    'T' +\n    String(date.getUTCHours()).padStart(2, '0') +\n    ':' +\n    String(date.getUTCMinutes()).padStart(2, '0') +\n    ':' +\n    String(date.getUTCSeconds()).padStart(2, '0') +\n    '.' +\n    String(date.getUTCMilliseconds()).padStart(3, '0')\n\n  ret += '+00:00'\n  if (isBCYear) ret += ' BC'\n  return ret\n}\n\nfunction normalizeQueryConfig(config, values, callback) {\n  // can take in strings or config objects\n  config = typeof config === 'string' ? { text: config } : config\n  if (values) {\n    if (typeof values === 'function') {\n      config.callback = values\n    } else {\n      config.values = values\n    }\n  }\n  if (callback) {\n    config.callback = callback\n  }\n  return config\n}\n\n// Ported from PostgreSQL 9.2.4 source code in src/interfaces/libpq/fe-exec.c\nconst escapeIdentifier = function (str) {\n  return '\"' + str.replace(/\"/g, '\"\"') + '\"'\n}\n\nconst escapeLiteral = function (str) {\n  let hasBackslash = false\n  let escaped = \"'\"\n\n  if (str == null) {\n    return \"''\"\n  }\n\n  if (typeof str !== 'string') {\n    return \"''\"\n  }\n\n  for (let i = 0; i < str.length; i++) {\n    const c = str[i]\n    if (c === \"'\") {\n      escaped += c + c\n    } else if (c === '\\\\') {\n      escaped += c + c\n      hasBackslash = true\n    } else {\n      escaped += c\n    }\n  }\n\n  escaped += \"'\"\n\n  if (hasBackslash === true) {\n    escaped = ' E' + escaped\n  }\n\n  return escaped\n}\n\nmodule.exports = {\n  prepareValue: function prepareValueWrapper(value) {\n    // this ensures that extra arguments do not get passed into prepareValue\n    // by accident, eg: from calling values.map(utils.prepareValue)\n    return prepareValue(value)\n  },\n  normalizeQueryConfig,\n  escapeIdentifier,\n  escapeLiteral,\n}\n","const nodeCrypto = require('crypto')\n\nmodule.exports = {\n  postgresMd5PasswordHash,\n  randomBytes,\n  deriveKey,\n  sha256,\n  hashByName,\n  hmacSha256,\n  md5,\n}\n\n/**\n * The Web Crypto API - grabbed from the Node.js library or the global\n * @type Crypto\n */\n// eslint-disable-next-line no-undef\nconst webCrypto = nodeCrypto.webcrypto || globalThis.crypto\n/**\n * The SubtleCrypto API for low level crypto operations.\n * @type SubtleCrypto\n */\nconst subtleCrypto = webCrypto.subtle\nconst textEncoder = new TextEncoder()\n\n/**\n *\n * @param {*} length\n * @returns\n */\nfunction randomBytes(length) {\n  return webCrypto.getRandomValues(Buffer.alloc(length))\n}\n\nasync function md5(string) {\n  try {\n    return nodeCrypto.createHash('md5').update(string, 'utf-8').digest('hex')\n  } catch (e) {\n    // `createHash()` failed so we are probably not in Node.js, use the WebCrypto API instead.\n    // Note that the MD5 algorithm on WebCrypto is not available in Node.js.\n    // This is why we cannot just use WebCrypto in all environments.\n    const data = typeof string === 'string' ? textEncoder.encode(string) : string\n    const hash = await subtleCrypto.digest('MD5', data)\n    return Array.from(new Uint8Array(hash))\n      .map((b) => b.toString(16).padStart(2, '0'))\n      .join('')\n  }\n}\n\n// See AuthenticationMD5Password at https://www.postgresql.org/docs/current/static/protocol-flow.html\nasync function postgresMd5PasswordHash(user, password, salt) {\n  const inner = await md5(password + user)\n  const outer = await md5(Buffer.concat([Buffer.from(inner), salt]))\n  return 'md5' + outer\n}\n\n/**\n * Create a SHA-256 digest of the given data\n * @param {Buffer} data\n */\nasync function sha256(text) {\n  return await subtleCrypto.digest('SHA-256', text)\n}\n\nasync function hashByName(hashName, text) {\n  return await subtleCrypto.digest(hashName, text)\n}\n\n/**\n * Sign the message with the given key\n * @param {ArrayBuffer} keyBuffer\n * @param {string} msg\n */\nasync function hmacSha256(keyBuffer, msg) {\n  const key = await subtleCrypto.importKey('raw', keyBuffer, { name: 'HMAC', hash: 'SHA-256' }, false, ['sign'])\n  return await subtleCrypto.sign('HMAC', key, textEncoder.encode(msg))\n}\n\n/**\n * Derive a key from the password and salt\n * @param {string} password\n * @param {Uint8Array} salt\n * @param {number} iterations\n */\nasync function deriveKey(password, salt, iterations) {\n  const key = await subtleCrypto.importKey('raw', textEncoder.encode(password), 'PBKDF2', false, ['deriveBits'])\n  const params = { name: 'PBKDF2', hash: 'SHA-256', salt: salt, iterations: iterations }\n  return await subtleCrypto.deriveBits(params, key, 32 * 8, ['deriveBits'])\n}\n","function x509Error(msg, cert) {\n  return new Error('SASL channel binding: ' + msg + ' when parsing public certificate ' + cert.toString('base64'))\n}\n\nfunction readASN1Length(data, index) {\n  let length = data[index++]\n  if (length < 0x80) return { length, index }\n\n  const lengthBytes = length & 0x7f\n  if (lengthBytes > 4) throw x509Error('bad length', data)\n\n  length = 0\n  for (let i = 0; i < lengthBytes; i++) {\n    length = (length << 8) | data[index++]\n  }\n\n  return { length, index }\n}\n\nfunction readASN1OID(data, index) {\n  if (data[index++] !== 0x6) throw x509Error('non-OID data', data) // 6 = OID\n\n  const { length: OIDLength, index: indexAfterOIDLength } = readASN1Length(data, index)\n  index = indexAfterOIDLength\n  const lastIndex = index + OIDLength\n\n  const byte1 = data[index++]\n  let oid = ((byte1 / 40) >> 0) + '.' + (byte1 % 40)\n\n  while (index < lastIndex) {\n    // loop over numbers in OID\n    let value = 0\n    while (index < lastIndex) {\n      // loop over bytes in number\n      const nextByte = data[index++]\n      value = (value << 7) | (nextByte & 0x7f)\n      if (nextByte < 0x80) break\n    }\n    oid += '.' + value\n  }\n\n  return { oid, index }\n}\n\nfunction expectASN1Seq(data, index) {\n  if (data[index++] !== 0x30) throw x509Error('non-sequence data', data) // 30 = Sequence\n  return readASN1Length(data, index)\n}\n\nfunction signatureAlgorithmHashFromCertificate(data, index) {\n  // read this thread: https://www.postgresql.org/message-id/17760-b6c61e752ec07060%40postgresql.org\n  if (index === undefined) index = 0\n  index = expectASN1Seq(data, index).index\n  const { length: certInfoLength, index: indexAfterCertInfoLength } = expectASN1Seq(data, index)\n  index = indexAfterCertInfoLength + certInfoLength // skip over certificate info\n  index = expectASN1Seq(data, index).index // skip over signature length field\n  const { oid, index: indexAfterOID } = readASN1OID(data, index)\n  switch (oid) {\n    // RSA\n    case '1.2.840.113549.1.1.4':\n      return 'MD5'\n    case '1.2.840.113549.1.1.5':\n      return 'SHA-1'\n    case '1.2.840.113549.1.1.11':\n      return 'SHA-256'\n    case '1.2.840.113549.1.1.12':\n      return 'SHA-384'\n    case '1.2.840.113549.1.1.13':\n      return 'SHA-512'\n    case '1.2.840.113549.1.1.14':\n      return 'SHA-224'\n    case '1.2.840.113549.1.1.15':\n      return 'SHA512-224'\n    case '1.2.840.113549.1.1.16':\n      return 'SHA512-256'\n    // ECDSA\n    case '1.2.840.10045.4.1':\n      return 'SHA-1'\n    case '1.2.840.10045.4.3.1':\n      return 'SHA-224'\n    case '1.2.840.10045.4.3.2':\n      return 'SHA-256'\n    case '1.2.840.10045.4.3.3':\n      return 'SHA-384'\n    case '1.2.840.10045.4.3.4':\n      return 'SHA-512'\n    // RSASSA-PSS: hash is indicated separately\n    case '1.2.840.113549.1.1.10': {\n      index = indexAfterOID\n      index = expectASN1Seq(data, index).index\n      if (data[index++] !== 0xa0) throw x509Error('non-tag data', data) // a0 = constructed tag 0\n      index = readASN1Length(data, index).index // skip over tag length field\n      index = expectASN1Seq(data, index).index // skip over sequence length field\n      const { oid: hashOID } = readASN1OID(data, index)\n      switch (hashOID) {\n        // standalone hash OIDs\n        case '1.2.840.113549.2.5':\n          return 'MD5'\n        case '1.3.14.3.2.26':\n          return 'SHA-1'\n        case '2.16.840.1.101.3.4.2.1':\n          return 'SHA-256'\n        case '2.16.840.1.101.3.4.2.2':\n          return 'SHA-384'\n        case '2.16.840.1.101.3.4.2.3':\n          return 'SHA-512'\n      }\n      throw x509Error('unknown hash OID ' + hashOID, data)\n    }\n    // Ed25519 -- see https: return//github.com/openssl/openssl/issues/15477\n    case '1.3.101.110':\n    case '1.3.101.112': // ph\n      return 'SHA-512'\n    // Ed448 -- still not in pg 17.2 (if supported, digest would be SHAKE256 x 64 bytes)\n    case '1.3.101.111':\n    case '1.3.101.113': // ph\n      throw x509Error('Ed448 certificate channel binding is not currently supported by Postgres')\n  }\n  throw x509Error('unknown OID ' + oid, data)\n}\n\nmodule.exports = { signatureAlgorithmHashFromCertificate }\n","'use strict'\nconst crypto = require('./utils')\nconst { signatureAlgorithmHashFromCertificate } = require('./cert-signatures')\n\n// SASLprep (RFC 4013) — minimal in-tree implementation.\n//\n// Per RFC 5802 §2.2, the SCRAM-SHA-256 client must normalize the password via\n// SASLprep before feeding it into PBKDF2. PostgreSQL's server applies the same\n// SASLprep when computing the stored verifier, and libpq does the same client\n// side, so passwords whose NFKC form differs from the raw form\n// would otherwise authenticate against psql/libpq but fail against pg with `28P01`.\n//\n// We deliberately implement only the three steps that change the byte content:\n//   1. RFC 3454 Table C.1.2 (non-ASCII space) → U+0020 SPACE.\n//   2. RFC 3454 Table B.1 (commonly mapped to nothing) → empty.\n//   3. NFKC normalization.\n// We skip the prohibition (RFC 4013 §2.3) and bidi (RFC 3454 §6) checks.\n// libpq is forgiving on those paths and Postgres's own SASLprep matches that\n// leniency for legacy roles, so omitting the rejection logic keeps existing\n// roles working without adding complexity.\nfunction saslprep(password) {\n  // RFC 3454 Table C.1.2 — non-ASCII space characters, mapped to U+0020.\n  const nonAsciiSpace = /[\\u00A0\\u1680\\u2000-\\u200B\\u202F\\u205F\\u3000]/g\n  // RFC 3454 Table B.1 — \"commonly mapped to nothing\". The set intentionally\n  // contains zero-width joiners and variation selectors — the very characters\n  // ESLint's no-misleading-character-class warns about — because they combine\n  // with their neighbors and the RFC strips them for that reason.\n  // eslint-disable-next-line no-misleading-character-class\n  const mappedToNothing = /[\\u00AD\\u034F\\u1806\\u180B\\u180C\\u180D\\u200C\\u200D\\u2060\\uFE00-\\uFE0F\\uFEFF]/g\n  return password.replace(nonAsciiSpace, ' ').replace(mappedToNothing, '').normalize('NFKC')\n}\n\nconst DEFAULT_MAX_SCRAM_ITERATIONS = 100000\n\nfunction startSession(mechanisms, stream, scramMaxIterations = DEFAULT_MAX_SCRAM_ITERATIONS) {\n  const candidates = ['SCRAM-SHA-256']\n  if (stream) candidates.unshift('SCRAM-SHA-256-PLUS') // higher-priority, so placed first\n\n  const mechanism = candidates.find((candidate) => mechanisms.includes(candidate))\n\n  if (!mechanism) {\n    throw new Error('SASL: Only mechanism(s) ' + candidates.join(' and ') + ' are supported')\n  }\n\n  if (mechanism === 'SCRAM-SHA-256-PLUS' && typeof stream.getPeerCertificate !== 'function') {\n    // this should never happen if we are really talking to a Postgres server\n    throw new Error('SASL: Mechanism SCRAM-SHA-256-PLUS requires a certificate')\n  }\n\n  const clientNonce = crypto.randomBytes(18).toString('base64')\n  const gs2Header = mechanism === 'SCRAM-SHA-256-PLUS' ? 'p=tls-server-end-point' : stream ? 'y' : 'n'\n\n  return {\n    mechanism,\n    clientNonce,\n    response: gs2Header + ',,n=*,r=' + clientNonce,\n    message: 'SASLInitialResponse',\n    scramMaxIterations,\n  }\n}\n\nasync function continueSession(session, password, serverData, stream) {\n  if (session.message !== 'SASLInitialResponse') {\n    throw new Error('SASL: Last message was not SASLInitialResponse')\n  }\n  if (typeof password !== 'string') {\n    throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: client password must be a string')\n  }\n  if (password === '') {\n    throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: client password must be a non-empty string')\n  }\n  if (typeof serverData !== 'string') {\n    throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: serverData must be a string')\n  }\n\n  const sv = parseServerFirstMessage(serverData)\n\n  if (!sv.nonce.startsWith(session.clientNonce)) {\n    throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: server nonce does not start with client nonce')\n  } else if (sv.nonce.length === session.clientNonce.length) {\n    throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: server nonce is too short')\n  }\n\n  const scramMaxIterations =\n    typeof session.scramMaxIterations === 'number' ? session.scramMaxIterations : DEFAULT_MAX_SCRAM_ITERATIONS\n  // a value of 0 disables the iteration count check\n  if (scramMaxIterations !== 0 && sv.iteration > scramMaxIterations) {\n    throw new Error(\n      'SASL: SCRAM-SERVER-FIRST-MESSAGE: iteration count ' +\n        sv.iteration +\n        ' exceeds scramMaxIterations of ' +\n        scramMaxIterations\n    )\n  }\n\n  const clientFirstMessageBare = 'n=*,r=' + session.clientNonce\n  const serverFirstMessage = 'r=' + sv.nonce + ',s=' + sv.salt + ',i=' + sv.iteration\n\n  // without channel binding:\n  let channelBinding = stream ? 'eSws' : 'biws' // 'y,,' or 'n,,', base64-encoded\n\n  // override if channel binding is in use:\n  if (session.mechanism === 'SCRAM-SHA-256-PLUS') {\n    const peerCert = stream.getPeerCertificate().raw\n    let hashName = signatureAlgorithmHashFromCertificate(peerCert)\n    if (hashName === 'MD5' || hashName === 'SHA-1') hashName = 'SHA-256'\n    const certHash = await crypto.hashByName(hashName, peerCert)\n    const bindingData = Buffer.concat([Buffer.from('p=tls-server-end-point,,'), Buffer.from(certHash)])\n    channelBinding = bindingData.toString('base64')\n  }\n\n  const clientFinalMessageWithoutProof = 'c=' + channelBinding + ',r=' + sv.nonce\n  const authMessage = clientFirstMessageBare + ',' + serverFirstMessage + ',' + clientFinalMessageWithoutProof\n\n  const saltBytes = Buffer.from(sv.salt, 'base64')\n  const saltedPassword = await crypto.deriveKey(saslprep(password), saltBytes, sv.iteration)\n  const clientKey = await crypto.hmacSha256(saltedPassword, 'Client Key')\n  const storedKey = await crypto.sha256(clientKey)\n  const clientSignature = await crypto.hmacSha256(storedKey, authMessage)\n  const clientProof = xorBuffers(Buffer.from(clientKey), Buffer.from(clientSignature)).toString('base64')\n  const serverKey = await crypto.hmacSha256(saltedPassword, 'Server Key')\n  const serverSignatureBytes = await crypto.hmacSha256(serverKey, authMessage)\n\n  session.message = 'SASLResponse'\n  session.serverSignature = Buffer.from(serverSignatureBytes).toString('base64')\n  session.response = clientFinalMessageWithoutProof + ',p=' + clientProof\n}\n\nfunction finalizeSession(session, serverData) {\n  if (session.message !== 'SASLResponse') {\n    throw new Error('SASL: Last message was not SASLResponse')\n  }\n  if (typeof serverData !== 'string') {\n    throw new Error('SASL: SCRAM-SERVER-FINAL-MESSAGE: serverData must be a string')\n  }\n\n  const { serverSignature } = parseServerFinalMessage(serverData)\n\n  if (serverSignature !== session.serverSignature) {\n    throw new Error('SASL: SCRAM-SERVER-FINAL-MESSAGE: server signature does not match')\n  }\n}\n\n/**\n * printable       = %x21-2B / %x2D-7E\n *                   ;; Printable ASCII except \",\".\n *                   ;; Note that any \"printable\" is also\n *                   ;; a valid \"value\".\n */\nfunction isPrintableChars(text) {\n  if (typeof text !== 'string') {\n    throw new TypeError('SASL: text must be a string')\n  }\n  return text\n    .split('')\n    .map((_, i) => text.charCodeAt(i))\n    .every((c) => (c >= 0x21 && c <= 0x2b) || (c >= 0x2d && c <= 0x7e))\n}\n\n/**\n * base64-char     = ALPHA / DIGIT / \"/\" / \"+\"\n *\n * base64-4        = 4base64-char\n *\n * base64-3        = 3base64-char \"=\"\n *\n * base64-2        = 2base64-char \"==\"\n *\n * base64          = *base64-4 [base64-3 / base64-2]\n */\nfunction isBase64(text) {\n  return /^(?:[a-zA-Z0-9+/]{4})*(?:[a-zA-Z0-9+/]{2}==|[a-zA-Z0-9+/]{3}=)?$/.test(text)\n}\n\nfunction parseAttributePairs(text) {\n  if (typeof text !== 'string') {\n    throw new TypeError('SASL: attribute pairs text must be a string')\n  }\n\n  return new Map(\n    text.split(',').map((attrValue) => {\n      if (!/^.=/.test(attrValue)) {\n        throw new Error('SASL: Invalid attribute pair entry')\n      }\n      const name = attrValue[0]\n      const value = attrValue.substring(2)\n      return [name, value]\n    })\n  )\n}\n\nfunction parseServerFirstMessage(data) {\n  const attrPairs = parseAttributePairs(data)\n\n  const nonce = attrPairs.get('r')\n  if (!nonce) {\n    throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: nonce missing')\n  } else if (!isPrintableChars(nonce)) {\n    throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: nonce must only contain printable characters')\n  }\n  const salt = attrPairs.get('s')\n  if (!salt) {\n    throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: salt missing')\n  } else if (!isBase64(salt)) {\n    throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: salt must be base64')\n  }\n  const iterationText = attrPairs.get('i')\n  if (!iterationText) {\n    throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: iteration missing')\n  } else if (!/^[1-9][0-9]*$/.test(iterationText)) {\n    throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: invalid iteration count')\n  }\n  const iteration = parseInt(iterationText, 10)\n\n  return {\n    nonce,\n    salt,\n    iteration,\n  }\n}\n\nfunction parseServerFinalMessage(serverData) {\n  const attrPairs = parseAttributePairs(serverData)\n  const error = attrPairs.get('e')\n  const serverSignature = attrPairs.get('v')\n\n  if (error) {\n    throw new Error(`SASL: SCRAM-SERVER-FINAL-MESSAGE: server returned error: \"${error}\"`)\n  }\n\n  if (!serverSignature) {\n    throw new Error('SASL: SCRAM-SERVER-FINAL-MESSAGE: server signature is missing')\n  } else if (!isBase64(serverSignature)) {\n    throw new Error('SASL: SCRAM-SERVER-FINAL-MESSAGE: server signature must be base64')\n  }\n  return {\n    serverSignature,\n  }\n}\n\nfunction xorBuffers(a, b) {\n  if (!Buffer.isBuffer(a)) {\n    throw new TypeError('first argument must be a Buffer')\n  }\n  if (!Buffer.isBuffer(b)) {\n    throw new TypeError('second argument must be a Buffer')\n  }\n  if (a.length !== b.length) {\n    throw new Error('Buffer lengths must match')\n  }\n  if (a.length === 0) {\n    throw new Error('Buffers cannot be empty')\n  }\n  return Buffer.from(a.map((_, i) => a[i] ^ b[i]))\n}\n\nmodule.exports = {\n  startSession,\n  continueSession,\n  finalizeSession,\n  DEFAULT_MAX_SCRAM_ITERATIONS,\n}\n","'use strict'\n\nconst types = require('pg-types')\n\nfunction TypeOverrides(userTypes) {\n  this._types = userTypes || types\n  this.text = {}\n  this.binary = {}\n}\n\nTypeOverrides.prototype.getOverrides = function (format) {\n  switch (format) {\n    case 'text':\n      return this.text\n    case 'binary':\n      return this.binary\n    default:\n      return {}\n  }\n}\n\nTypeOverrides.prototype.setTypeParser = function (oid, format, parseFn) {\n  if (typeof format === 'function') {\n    parseFn = format\n    format = 'text'\n  }\n  this.getOverrides(format)[oid] = parseFn\n}\n\nTypeOverrides.prototype.getTypeParser = function (oid, format) {\n  format = format || 'text'\n  return this.getOverrides(format)[oid] || this._types.getTypeParser(oid, format)\n}\n\nmodule.exports = TypeOverrides\n","'use strict'\n\n//Parse method copied from https://github.com/brianc/node-postgres\n//Copyright (c) 2010-2014 Brian Carlson (brian.m.carlson@gmail.com)\n//MIT License\n\n//parses a connection string\nfunction parse(str, options = {}) {\n  //unix socket\n  if (str.charAt(0) === '/') {\n    const config = str.split(' ')\n    return { host: config[0], database: config[1] }\n  }\n\n  // Check for empty host in URL\n\n  const config = Object.create(null)\n  let result\n  let dummyHost = false\n  if (/ |%[^a-f0-9]|%[a-f0-9][^a-f0-9]/i.test(str)) {\n    // Ensure spaces are encoded as %20\n    str = encodeURI(str).replace(/%25(\\d\\d)/g, '%$1')\n  }\n\n  try {\n    try {\n      result = new URL(str, 'postgres://base')\n    } catch (e) {\n      // The URL is invalid so try again with a dummy host\n      result = new URL(str.replace('@/', '@___DUMMY___/'), 'postgres://base')\n      dummyHost = true\n    }\n  } catch (err) {\n    // Remove the input from the error message to avoid leaking sensitive information\n    err.input && (err.input = '*****REDACTED*****')\n    throw err\n  }\n\n  // We'd like to use Object.fromEntries() here but Node.js 10 does not support it\n  for (const entry of result.searchParams.entries()) {\n    config[entry[0]] = entry[1]\n  }\n\n  config.user = config.user || decodeURIComponent(result.username)\n  config.password = config.password || decodeURIComponent(result.password)\n\n  if (result.protocol == 'socket:') {\n    config.host = decodeURI(result.pathname)\n    config.database = result.searchParams.get('db')\n    config.client_encoding = result.searchParams.get('encoding')\n    return config\n  }\n  const hostname = dummyHost ? '' : result.hostname\n  if (!config.host) {\n    // Only set the host if there is no equivalent query param.\n    config.host = decodeURIComponent(hostname)\n  } else if (hostname && /^%2f/i.test(hostname)) {\n    // Only prepend the hostname to the pathname if it is not a URL encoded Unix socket host.\n    result.pathname = hostname + result.pathname\n  }\n  if (!config.port) {\n    // Only set the port if there is no equivalent query param.\n    config.port = result.port\n  }\n\n  const pathname = result.pathname.slice(1) || null\n  config.database = pathname ? decodeURI(pathname) : null\n\n  if (config.ssl === 'true' || config.ssl === '1') {\n    config.ssl = true\n  }\n\n  if (config.ssl === '0') {\n    config.ssl = false\n  }\n\n  if (config.sslcert || config.sslkey || config.sslrootcert || config.sslmode) {\n    config.ssl = {}\n  }\n\n  // sslnegotiation=direct implies SSL is in use (libpq requires sslmode>=require),\n  // so enable SSL if the connection string did not otherwise configure it.\n  if (config.sslnegotiation === 'direct' && config.ssl === undefined) {\n    config.ssl = true\n  }\n\n  // Only try to load fs if we expect to read from the disk\n  const fs = config.sslcert || config.sslkey || config.sslrootcert ? require('fs') : null\n\n  if (config.sslcert) {\n    config.ssl.cert = fs.readFileSync(config.sslcert).toString()\n  }\n\n  if (config.sslkey) {\n    config.ssl.key = fs.readFileSync(config.sslkey).toString()\n  }\n\n  if (config.sslrootcert) {\n    config.ssl.ca = fs.readFileSync(config.sslrootcert).toString()\n  }\n\n  if (options.useLibpqCompat && config.uselibpqcompat) {\n    throw new Error('Both useLibpqCompat and uselibpqcompat are set. Please use only one of them.')\n  }\n\n  if (config.uselibpqcompat === 'true' || options.useLibpqCompat) {\n    switch (config.sslmode) {\n      case 'disable': {\n        config.ssl = false\n        break\n      }\n      case 'prefer': {\n        config.ssl.rejectUnauthorized = false\n        break\n      }\n      case 'require': {\n        if (config.sslrootcert) {\n          // If a root CA is specified, behavior of `sslmode=require` will be the same as that of `verify-ca`\n          config.ssl.checkServerIdentity = function () {}\n        } else {\n          config.ssl.rejectUnauthorized = false\n        }\n        break\n      }\n      case 'verify-ca': {\n        if (!config.ssl.ca) {\n          throw new Error(\n            'SECURITY WARNING: Using sslmode=verify-ca requires specifying a CA with sslrootcert. If a public CA is used, verify-ca allows connections to a server that somebody else may have registered with the CA, making you vulnerable to Man-in-the-Middle attacks. Either specify a custom CA certificate with sslrootcert parameter or use sslmode=verify-full for proper security.'\n          )\n        }\n        config.ssl.checkServerIdentity = function () {}\n        break\n      }\n      case 'verify-full': {\n        break\n      }\n    }\n  } else {\n    switch (config.sslmode) {\n      case 'disable': {\n        config.ssl = false\n        break\n      }\n      case 'prefer':\n      case 'require':\n      case 'verify-ca':\n      case 'verify-full': {\n        if (config.sslmode !== 'verify-full') {\n          deprecatedSslModeWarning(config.sslmode)\n        }\n        break\n      }\n      case 'no-verify': {\n        config.ssl.rejectUnauthorized = false\n        break\n      }\n    }\n  }\n\n  return config\n}\n\n// convert pg-connection-string ssl config to a ClientConfig.ConnectionOptions\nfunction toConnectionOptions(sslConfig) {\n  const connectionOptions = Object.entries(sslConfig).reduce((c, [key, value]) => {\n    // we explicitly check for undefined and null instead of `if (value)` because some\n    // options accept falsy values. Example: `ssl.rejectUnauthorized = false`\n    if (value !== undefined && value !== null) {\n      c[key] = value\n    }\n\n    return c\n  }, Object.create(null))\n\n  return connectionOptions\n}\n\n// convert pg-connection-string config to a ClientConfig\nfunction toClientConfig(config) {\n  const poolConfig = Object.entries(config).reduce((c, [key, value]) => {\n    if (key === 'ssl') {\n      const sslConfig = value\n\n      if (typeof sslConfig === 'boolean') {\n        c[key] = sslConfig\n      }\n\n      if (typeof sslConfig === 'object') {\n        c[key] = toConnectionOptions(sslConfig)\n      }\n    } else if (value !== undefined && value !== null) {\n      if (key === 'port') {\n        // when port is not specified, it is converted into an empty string\n        // we want to avoid NaN or empty string as a values in ClientConfig\n        if (value !== '') {\n          const v = parseInt(value, 10)\n          if (isNaN(v)) {\n            throw new Error(`Invalid ${key}: ${value}`)\n          }\n\n          c[key] = v\n        }\n      } else {\n        c[key] = value\n      }\n    }\n\n    return c\n  }, Object.create(null))\n\n  return poolConfig\n}\n\n// parses a connection string into ClientConfig\nfunction parseIntoClientConfig(str) {\n  return toClientConfig(parse(str))\n}\n\nfunction deprecatedSslModeWarning(sslmode) {\n  if (!deprecatedSslModeWarning.warned && typeof process !== 'undefined' && process.emitWarning) {\n    deprecatedSslModeWarning.warned = true\n    process.emitWarning(`SECURITY WARNING: The SSL modes 'prefer', 'require', and 'verify-ca' are treated as aliases for 'verify-full'.\nIn the next major version (pg-connection-string v3.0.0 and pg v9.0.0), these modes will adopt standard libpq semantics, which have weaker security guarantees.\n\nTo prepare for this change:\n- If you want the current behavior, explicitly use 'sslmode=verify-full'\n- If you want libpq compatibility now, use 'uselibpqcompat=true&sslmode=${sslmode}'\n\nSee https://www.postgresql.org/docs/current/libpq-ssl.html for libpq SSL mode definitions.`)\n  }\n}\n\nmodule.exports = parse\n\nparse.parse = parse\nparse.toClientConfig = toClientConfig\nparse.parseIntoClientConfig = parseIntoClientConfig\n","'use strict'\n\nconst dns = require('dns')\n\nconst defaults = require('./defaults')\n\nconst parse = require('pg-connection-string').parse // parses a connection string\n\nconst val = function (key, config, envVar) {\n  if (config[key]) {\n    return config[key]\n  }\n\n  if (envVar === undefined) {\n    envVar = process.env['PG' + key.toUpperCase()]\n  } else if (envVar === false) {\n    // do nothing ... use false\n  } else {\n    envVar = process.env[envVar]\n  }\n\n  return envVar || defaults[key]\n}\n\nconst readSSLConfigFromEnvironment = function () {\n  switch (process.env.PGSSLMODE) {\n    case 'disable':\n      return false\n    case 'prefer':\n    case 'require':\n    case 'verify-ca':\n    case 'verify-full':\n      return true\n    case 'no-verify':\n      return { rejectUnauthorized: false }\n  }\n  return defaults.ssl\n}\n\n// Convert arg to a string, surround in single quotes, and escape single quotes and backslashes\nconst quoteParamValue = function (value) {\n  return \"'\" + ('' + value).replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\") + \"'\"\n}\n\nconst add = function (params, config, paramName) {\n  const value = config[paramName]\n  if (value !== undefined && value !== null) {\n    params.push(paramName + '=' + quoteParamValue(value))\n  }\n}\n\nclass ConnectionParameters {\n  constructor(config) {\n    // if a string is passed, it is a raw connection string so we parse it into a config\n    config = typeof config === 'string' ? parse(config) : config || {}\n\n    // if the config has a connectionString defined, parse IT into the config we use\n    // this will override other default values with what is stored in connectionString\n    if (config.connectionString) {\n      config = Object.assign({}, config, parse(config.connectionString))\n    }\n\n    this.user = val('user', config)\n    this.database = val('database', config)\n\n    if (this.database === undefined) {\n      this.database = this.user\n    }\n\n    this.port = parseInt(val('port', config), 10)\n    this.host = val('host', config)\n\n    // \"hiding\" the password so it doesn't show up in stack traces\n    // or if the client is console.logged\n    Object.defineProperty(this, 'password', {\n      configurable: true,\n      enumerable: false,\n      writable: true,\n      value: val('password', config),\n    })\n\n    this.binary = val('binary', config)\n    this.options = val('options', config)\n\n    this.ssl = typeof config.ssl === 'undefined' ? readSSLConfigFromEnvironment() : config.ssl\n\n    if (typeof this.ssl === 'string') {\n      if (this.ssl === 'true') {\n        this.ssl = true\n      }\n    }\n    // support passing in ssl=no-verify via connection string\n    if (this.ssl === 'no-verify') {\n      this.ssl = { rejectUnauthorized: false }\n    }\n    if (this.ssl && this.ssl.key) {\n      Object.defineProperty(this.ssl, 'key', {\n        enumerable: false,\n      })\n    }\n\n    // How to negotiate SSL: 'postgres' (default, the traditional SSLRequest\n    // handshake) or 'direct' (start the TLS handshake immediately on connect).\n    this.sslnegotiation = val('sslnegotiation', config, 'PGSSLNEGOTIATION')\n    if (this.sslnegotiation !== undefined && this.sslnegotiation !== 'postgres' && this.sslnegotiation !== 'direct') {\n      throw new Error(\n        `Invalid sslnegotiation value: \"${this.sslnegotiation}\". Valid values are \"postgres\" and \"direct\".`\n      )\n    }\n    if (this.sslnegotiation === 'direct' && !this.ssl) {\n      throw new Error('sslnegotiation=direct requires SSL to be enabled')\n    }\n\n    this.client_encoding = val('client_encoding', config)\n    this.replication = val('replication', config)\n    // a domain socket begins with '/'\n    this.isDomainSocket = !(this.host || '').indexOf('/')\n\n    this.application_name = val('application_name', config, 'PGAPPNAME')\n    this.fallback_application_name = val('fallback_application_name', config, false)\n    this.statement_timeout = val('statement_timeout', config, false)\n    this.lock_timeout = val('lock_timeout', config, false)\n    this.idle_in_transaction_session_timeout = val('idle_in_transaction_session_timeout', config, false)\n    this.query_timeout = val('query_timeout', config, false)\n\n    if (config.connectionTimeoutMillis === undefined) {\n      this.connect_timeout = process.env.PGCONNECT_TIMEOUT || 0\n    } else {\n      this.connect_timeout = Math.floor(config.connectionTimeoutMillis / 1000)\n    }\n\n    if (config.keepAlive === false) {\n      this.keepalives = 0\n    } else if (config.keepAlive === true) {\n      this.keepalives = 1\n    }\n\n    if (typeof config.keepAliveInitialDelayMillis === 'number') {\n      this.keepalives_idle = Math.floor(config.keepAliveInitialDelayMillis / 1000)\n    }\n  }\n\n  getLibpqConnectionString(cb) {\n    const params = []\n    add(params, this, 'user')\n    add(params, this, 'password')\n    add(params, this, 'port')\n    add(params, this, 'application_name')\n    add(params, this, 'fallback_application_name')\n    add(params, this, 'connect_timeout')\n    add(params, this, 'options')\n\n    const ssl = typeof this.ssl === 'object' ? this.ssl : this.ssl ? { sslmode: this.ssl } : {}\n    add(params, ssl, 'sslmode')\n    add(params, ssl, 'sslca')\n    add(params, ssl, 'sslkey')\n    add(params, ssl, 'sslcert')\n    add(params, ssl, 'sslrootcert')\n    add(params, this, 'sslnegotiation')\n\n    if (this.database) {\n      params.push('dbname=' + quoteParamValue(this.database))\n    }\n    if (this.replication) {\n      params.push('replication=' + quoteParamValue(this.replication))\n    }\n    if (this.host) {\n      params.push('host=' + quoteParamValue(this.host))\n    }\n    if (this.isDomainSocket) {\n      return cb(null, params.join(' '))\n    }\n    if (this.client_encoding) {\n      params.push('client_encoding=' + quoteParamValue(this.client_encoding))\n    }\n    dns.lookup(this.host, function (err, address) {\n      if (err) return cb(err, null)\n      params.push('hostaddr=' + quoteParamValue(address))\n      return cb(null, params.join(' '))\n    })\n  }\n}\n\nmodule.exports = ConnectionParameters\n","'use strict'\n\nconst types = require('pg-types')\n\nconst matchRegexp = /^([A-Za-z]+)(?: (\\d+))?(?: (\\d+))?/\n\n// result object returned from query\n// in the 'end' event and also\n// passed as second argument to provided callback\nclass Result {\n  constructor(rowMode, types) {\n    this.command = null\n    this.rowCount = null\n    this.oid = null\n    this.rows = []\n    this.fields = []\n    this._parsers = undefined\n    this._types = types\n    this.RowCtor = null\n    this.rowAsArray = rowMode === 'array'\n    if (this.rowAsArray) {\n      this.parseRow = this._parseRowAsArray\n    }\n    this._prebuiltEmptyResultObject = null\n  }\n\n  // adds a command complete message\n  addCommandComplete(msg) {\n    let match\n    if (msg.text) {\n      // pure javascript\n      match = matchRegexp.exec(msg.text)\n    } else {\n      // native bindings\n      match = matchRegexp.exec(msg.command)\n    }\n    if (match) {\n      this.command = match[1]\n      if (match[3]) {\n        // COMMAND OID ROWS\n        this.oid = parseInt(match[2], 10)\n        this.rowCount = parseInt(match[3], 10)\n      } else if (match[2]) {\n        // COMMAND ROWS\n        this.rowCount = parseInt(match[2], 10)\n      }\n    }\n  }\n\n  _parseRowAsArray(rowData) {\n    const row = new Array(rowData.length)\n    for (let i = 0, len = rowData.length; i < len; i++) {\n      const rawValue = rowData[i]\n      if (rawValue !== null) {\n        row[i] = this._parsers[i](rawValue)\n      } else {\n        row[i] = null\n      }\n    }\n    return row\n  }\n\n  parseRow(rowData) {\n    const row = { ...this._prebuiltEmptyResultObject }\n    for (let i = 0, len = rowData.length; i < len; i++) {\n      const rawValue = rowData[i]\n      const field = this.fields[i].name\n      if (rawValue !== null) {\n        const v = this.fields[i].format === 'binary' ? Buffer.from(rawValue) : rawValue\n        row[field] = this._parsers[i](v)\n      } else {\n        row[field] = null\n      }\n    }\n    return row\n  }\n\n  addRow(row) {\n    this.rows.push(row)\n  }\n\n  addFields(fieldDescriptions) {\n    // clears field definitions\n    // multiple query statements in 1 action can result in multiple sets\n    // of rowDescriptions...eg: 'select NOW(); select 1::int;'\n    // you need to reset the fields\n    this.fields = fieldDescriptions\n    if (this.fields.length) {\n      this._parsers = new Array(fieldDescriptions.length)\n    }\n\n    const row = Object.create(null)\n\n    for (let i = 0; i < fieldDescriptions.length; i++) {\n      const desc = fieldDescriptions[i]\n      row[desc.name] = null\n\n      if (this._types) {\n        this._parsers[i] = this._types.getTypeParser(desc.dataTypeID, desc.format || 'text')\n      } else {\n        this._parsers[i] = types.getTypeParser(desc.dataTypeID, desc.format || 'text')\n      }\n    }\n\n    this._prebuiltEmptyResultObject = { ...row }\n  }\n}\n\nmodule.exports = Result\n","'use strict'\n\nconst { EventEmitter } = require('events')\n\nconst Result = require('./result')\nconst utils = require('./utils')\n\nclass Query extends EventEmitter {\n  constructor(config, values, callback) {\n    super()\n\n    config = utils.normalizeQueryConfig(config, values, callback)\n\n    this.text = config.text\n    this.values = config.values\n    this.rows = config.rows\n    this.types = config.types\n    this.name = config.name\n    this.queryMode = config.queryMode\n    this.binary = config.binary\n    // use unique portal name each time\n    this.portal = config.portal || ''\n    this.callback = config.callback\n    this._rowMode = config.rowMode\n    if (process.domain && config.callback) {\n      this.callback = process.domain.bind(config.callback)\n    }\n    this._result = new Result(this._rowMode, this.types)\n\n    // potential for multiple results\n    this._results = this._result\n    this._canceledDueToError = false\n  }\n\n  requiresPreparation() {\n    if (this.queryMode === 'extended') {\n      return true\n    }\n\n    // named queries must always be prepared\n    if (this.name) {\n      return true\n    }\n    // always prepare if there are max number of rows expected per\n    // portal execution\n    if (this.rows) {\n      return true\n    }\n    // don't prepare empty text queries\n    if (!this.text) {\n      return false\n    }\n    // prepare if there are values\n    if (!this.values) {\n      return false\n    }\n    return this.values.length > 0\n  }\n\n  _checkForMultirow() {\n    // if we already have a result with a command property\n    // then we've already executed one query in a multi-statement simple query\n    // turn our results into an array of results\n    if (this._result.command) {\n      if (!Array.isArray(this._results)) {\n        this._results = [this._result]\n      }\n      this._result = new Result(this._rowMode, this._result._types)\n      this._results.push(this._result)\n    }\n  }\n\n  // associates row metadata from the supplied\n  // message with this query object\n  // metadata used when parsing row results\n  handleRowDescription(msg) {\n    this._checkForMultirow()\n    this._result.addFields(msg.fields)\n    this._accumulateRows = this.callback || !this.listeners('row').length\n  }\n\n  handleDataRow(msg) {\n    let row\n\n    if (this._canceledDueToError) {\n      return\n    }\n\n    try {\n      row = this._result.parseRow(msg.fields)\n    } catch (err) {\n      this._canceledDueToError = err\n      return\n    }\n\n    this.emit('row', row, this._result)\n    if (this._accumulateRows) {\n      this._result.addRow(row)\n    }\n  }\n\n  handleCommandComplete(msg, connection) {\n    this._checkForMultirow()\n    this._result.addCommandComplete(msg)\n    // need to sync after each command complete of a prepared statement\n    // if we were using a row count which results in multiple calls to _getRows\n    if (this.rows) {\n      connection.sync()\n    }\n  }\n\n  // if a named prepared statement is created with empty query text\n  // the backend will send an emptyQuery message but *not* a command complete message\n  // since we pipeline sync immediately after execute we don't need to do anything here\n  // unless we have rows specified, in which case we did not pipeline the initial sync call\n  handleEmptyQuery(connection) {\n    if (this.rows) {\n      connection.sync()\n    }\n  }\n\n  handleError(err, connection) {\n    // need to sync after error during a prepared statement\n    if (this._canceledDueToError) {\n      err = this._canceledDueToError\n      this._canceledDueToError = false\n    }\n    // if callback supplied do not emit error event as uncaught error\n    // events will bubble up to node process\n    if (this.callback) {\n      return this.callback(err)\n    }\n    this.emit('error', err)\n  }\n\n  handleReadyForQuery(con) {\n    if (this._canceledDueToError) {\n      return this.handleError(this._canceledDueToError, con)\n    }\n    if (this.callback) {\n      try {\n        this.callback(null, this._results)\n      } catch (err) {\n        process.nextTick(() => {\n          throw err\n        })\n      }\n    }\n    this.emit('end', this._results)\n  }\n\n  submit(connection) {\n    if (typeof this.text !== 'string' && typeof this.name !== 'string') {\n      return new Error('A query must have either text or a name. Supplying neither is unsupported.')\n    }\n    const previous = connection.parsedStatements[this.name] || connection.submittedNamedStatements[this.name]\n    if (this.text && previous && this.text !== previous) {\n      return new Error(`Prepared statements must be unique - '${this.name}' was used for a different statement`)\n    }\n    if (this.values && !Array.isArray(this.values)) {\n      return new Error('Query values must be an array')\n    }\n    if (this.requiresPreparation()) {\n      // If we're using the extended query protocol we fire off several separate commands\n      // to the backend. On some versions of node & some operating system versions\n      // the network stack writes each message separately instead of buffering them together\n      // causing the client & network to send more slowly. Corking & uncorking the stream\n      // allows node to buffer up the messages internally before sending them all off at once.\n      // note: we're checking for existence of cork/uncork because some versions of streams\n      // might not have this (cloudflare?)\n      connection.stream.cork && connection.stream.cork()\n      try {\n        this.prepare(connection)\n      } finally {\n        // while unlikely for this.prepare to throw, if it does & we don't uncork this stream\n        // this client becomes unresponsive, so put in finally block \"just in case\"\n        connection.stream.uncork && connection.stream.uncork()\n      }\n    } else {\n      connection.query(this.text)\n    }\n    return null\n  }\n\n  hasBeenParsed(connection) {\n    return this.name && (connection.parsedStatements[this.name] || connection.submittedNamedStatements[this.name])\n  }\n\n  handlePortalSuspended(connection) {\n    this._getRows(connection, this.rows)\n  }\n\n  _getRows(connection, rows) {\n    connection.execute({\n      portal: this.portal,\n      rows: rows,\n    })\n    // if we're not reading pages of rows send the sync command\n    // to indicate the pipeline is finished\n    if (!rows) {\n      connection.sync()\n    } else {\n      // otherwise flush the call out to read more rows\n      connection.flush()\n    }\n  }\n\n  // http://developer.postgresql.org/pgdocs/postgres/protocol-flow.html#PROTOCOL-FLOW-EXT-QUERY\n  prepare(connection) {\n    // TODO refactor this poor encapsulation\n    if (!this.hasBeenParsed(connection)) {\n      connection.parse({\n        text: this.text,\n        name: this.name,\n        types: this.types,\n      })\n      if (this.name) {\n        connection.submittedNamedStatements[this.name] = this.text\n      }\n    }\n\n    // because we're mapping user supplied values to\n    // postgres wire protocol compatible values it could\n    // throw an exception, so try/catch this section\n    try {\n      connection.bind({\n        portal: this.portal,\n        statement: this.name,\n        values: this.values,\n        binary: this.binary,\n        valueMapper: utils.prepareValue,\n      })\n    } catch (err) {\n      // we should close parse to avoid leaking connections\n      connection.close({ type: 'S', name: this.name })\n      connection.sync()\n\n      this.handleError(err, connection)\n      return\n    }\n\n    connection.describe({\n      type: 'P',\n      name: this.portal || '',\n    })\n\n    this._getRows(connection, this.rows)\n  }\n\n  handleCopyInResponse(connection) {\n    connection.sendCopyFail('No source stream defined')\n  }\n\n  handleCopyData(msg, connection) {\n    // noop\n  }\n}\n\nmodule.exports = Query\n","export type Mode = 'text' | 'binary'\n\nexport type MessageName =\n  | 'parseComplete'\n  | 'bindComplete'\n  | 'closeComplete'\n  | 'noData'\n  | 'portalSuspended'\n  | 'replicationStart'\n  | 'emptyQuery'\n  | 'copyDone'\n  | 'copyData'\n  | 'rowDescription'\n  | 'parameterDescription'\n  | 'parameterStatus'\n  | 'backendKeyData'\n  | 'notification'\n  | 'readyForQuery'\n  | 'commandComplete'\n  | 'dataRow'\n  | 'copyInResponse'\n  | 'copyOutResponse'\n  | 'authenticationOk'\n  | 'authenticationMD5Password'\n  | 'authenticationCleartextPassword'\n  | 'authenticationSASL'\n  | 'authenticationSASLContinue'\n  | 'authenticationSASLFinal'\n  | 'error'\n  | 'notice'\n\nexport interface BackendMessage {\n  name: MessageName\n  length: number\n}\n\nexport const parseComplete: BackendMessage = {\n  name: 'parseComplete',\n  length: 5,\n}\n\nexport const bindComplete: BackendMessage = {\n  name: 'bindComplete',\n  length: 5,\n}\n\nexport const closeComplete: BackendMessage = {\n  name: 'closeComplete',\n  length: 5,\n}\n\nexport const noData: BackendMessage = {\n  name: 'noData',\n  length: 5,\n}\n\nexport const portalSuspended: BackendMessage = {\n  name: 'portalSuspended',\n  length: 5,\n}\n\nexport const replicationStart: BackendMessage = {\n  name: 'replicationStart',\n  length: 4,\n}\n\nexport const emptyQuery: BackendMessage = {\n  name: 'emptyQuery',\n  length: 4,\n}\n\nexport const copyDone: BackendMessage = {\n  name: 'copyDone',\n  length: 4,\n}\n\ninterface NoticeOrError {\n  message: string | undefined\n  severity: string | undefined\n  code: string | undefined\n  detail: string | undefined\n  hint: string | undefined\n  position: string | undefined\n  internalPosition: string | undefined\n  internalQuery: string | undefined\n  where: string | undefined\n  schema: string | undefined\n  table: string | undefined\n  column: string | undefined\n  dataType: string | undefined\n  constraint: string | undefined\n  file: string | undefined\n  line: string | undefined\n  routine: string | undefined\n}\n\nexport class DatabaseError extends Error implements NoticeOrError {\n  public severity: string | undefined\n  public code: string | undefined\n  public detail: string | undefined\n  public hint: string | undefined\n  public position: string | undefined\n  public internalPosition: string | undefined\n  public internalQuery: string | undefined\n  public where: string | undefined\n  public schema: string | undefined\n  public table: string | undefined\n  public column: string | undefined\n  public dataType: string | undefined\n  public constraint: string | undefined\n  public file: string | undefined\n  public line: string | undefined\n  public routine: string | undefined\n  constructor(\n    message: string,\n    public readonly length: number,\n    public readonly name: MessageName\n  ) {\n    super(message)\n  }\n}\n\nexport class CopyDataMessage {\n  public readonly name = 'copyData'\n  constructor(\n    public readonly length: number,\n    public readonly chunk: Buffer\n  ) {}\n}\n\nexport class CopyResponse {\n  public readonly columnTypes: number[]\n  constructor(\n    public readonly length: number,\n    public readonly name: MessageName,\n    public readonly binary: boolean,\n    columnCount: number\n  ) {\n    this.columnTypes = new Array(columnCount)\n  }\n}\n\nexport class Field {\n  constructor(\n    public readonly name: string,\n    public readonly tableID: number,\n    public readonly columnID: number,\n    public readonly dataTypeID: number,\n    public readonly dataTypeSize: number,\n    public readonly dataTypeModifier: number,\n    public readonly format: Mode\n  ) {}\n}\n\nexport class RowDescriptionMessage {\n  public readonly name: MessageName = 'rowDescription'\n  public readonly fields: Field[]\n  constructor(\n    public readonly length: number,\n    public readonly fieldCount: number\n  ) {\n    this.fields = new Array(this.fieldCount)\n  }\n}\n\nexport class ParameterDescriptionMessage {\n  public readonly name: MessageName = 'parameterDescription'\n  public readonly dataTypeIDs: number[]\n  constructor(\n    public readonly length: number,\n    public readonly parameterCount: number\n  ) {\n    this.dataTypeIDs = new Array(this.parameterCount)\n  }\n}\n\nexport class ParameterStatusMessage {\n  public readonly name: MessageName = 'parameterStatus'\n  constructor(\n    public readonly length: number,\n    public readonly parameterName: string,\n    public readonly parameterValue: string\n  ) {}\n}\n\nexport class AuthenticationMD5Password implements BackendMessage {\n  public readonly name: MessageName = 'authenticationMD5Password'\n  constructor(\n    public readonly length: number,\n    public readonly salt: Buffer\n  ) {}\n}\n\nexport class BackendKeyDataMessage {\n  public readonly name: MessageName = 'backendKeyData'\n  constructor(\n    public readonly length: number,\n    public readonly processID: number,\n    public readonly secretKey: number\n  ) {}\n}\n\nexport class NotificationResponseMessage {\n  public readonly name: MessageName = 'notification'\n  constructor(\n    public readonly length: number,\n    public readonly processId: number,\n    public readonly channel: string,\n    public readonly payload: string\n  ) {}\n}\n\nexport class ReadyForQueryMessage {\n  public readonly name: MessageName = 'readyForQuery'\n  constructor(\n    public readonly length: number,\n    public readonly status: string\n  ) {}\n}\n\nexport class CommandCompleteMessage {\n  public readonly name: MessageName = 'commandComplete'\n  constructor(\n    public readonly length: number,\n    public readonly text: string\n  ) {}\n}\n\nexport class DataRowMessage {\n  public readonly fieldCount: number\n  public readonly name: MessageName = 'dataRow'\n  constructor(\n    public length: number,\n    public fields: any[]\n  ) {\n    this.fieldCount = fields.length\n  }\n}\n\nexport class NoticeMessage implements BackendMessage, NoticeOrError {\n  constructor(\n    public readonly length: number,\n    public readonly message: string | undefined\n  ) {}\n  public readonly name = 'notice'\n  public severity: string | undefined\n  public code: string | undefined\n  public detail: string | undefined\n  public hint: string | undefined\n  public position: string | undefined\n  public internalPosition: string | undefined\n  public internalQuery: string | undefined\n  public where: string | undefined\n  public schema: string | undefined\n  public table: string | undefined\n  public column: string | undefined\n  public dataType: string | undefined\n  public constraint: string | undefined\n  public file: string | undefined\n  public line: string | undefined\n  public routine: string | undefined\n}\n","//binary data writer tuned for encoding binary specific to the postgres binary protocol\n\nexport class Writer {\n  private buffer: Buffer\n  private offset: number = 5\n  private headerPosition: number = 0\n  constructor(private size = 256) {\n    this.buffer = Buffer.allocUnsafe(size)\n  }\n\n  private ensure(size: number): void {\n    const remaining = this.buffer.length - this.offset\n    if (remaining < size) {\n      const oldBuffer = this.buffer\n      // exponential growth factor of around ~ 1.5\n      // https://stackoverflow.com/questions/2269063/buffer-growth-strategy\n      const newSize = oldBuffer.length + (oldBuffer.length >> 1) + size\n      this.buffer = Buffer.allocUnsafe(newSize)\n      oldBuffer.copy(this.buffer)\n    }\n  }\n\n  public addInt32(num: number): Writer {\n    this.ensure(4)\n    this.buffer[this.offset++] = (num >>> 24) & 0xff\n    this.buffer[this.offset++] = (num >>> 16) & 0xff\n    this.buffer[this.offset++] = (num >>> 8) & 0xff\n    this.buffer[this.offset++] = (num >>> 0) & 0xff\n    return this\n  }\n\n  public addInt16(num: number): Writer {\n    this.ensure(2)\n    this.buffer[this.offset++] = (num >>> 8) & 0xff\n    this.buffer[this.offset++] = (num >>> 0) & 0xff\n    return this\n  }\n\n  public addCString(string: string): Writer {\n    if (!string) {\n      this.ensure(1)\n    } else {\n      const len = Buffer.byteLength(string)\n      this.ensure(len + 1) // +1 for null terminator\n      this.buffer.write(string, this.offset, 'utf-8')\n      this.offset += len\n    }\n\n    this.buffer[this.offset++] = 0 // null terminator\n    return this\n  }\n\n  public addString(string: string = ''): Writer {\n    const len = Buffer.byteLength(string)\n    this.ensure(len)\n    this.buffer.write(string, this.offset)\n    this.offset += len\n    return this\n  }\n\n  // Write an Int32 byte-length prefix immediately followed by the string's UTF-8\n  // bytes. Postgres' Bind wire format prefixes every parameter with its length,\n  // and doing it in one method computes Buffer.byteLength ONCE — the previous\n  // `addInt32(Buffer.byteLength(s)).addString(s)` pairing scanned the string\n  // three times (byteLength for the prefix, byteLength again inside addString,\n  // then the encode), which is costly for large text parameters.\n  public addInt32PrefixedString(string: string): Writer {\n    const len = Buffer.byteLength(string)\n    this.ensure(4 + len)\n    const buffer = this.buffer\n    let offset = this.offset\n    buffer[offset++] = (len >>> 24) & 0xff\n    buffer[offset++] = (len >>> 16) & 0xff\n    buffer[offset++] = (len >>> 8) & 0xff\n    buffer[offset++] = (len >>> 0) & 0xff\n    buffer.write(string, offset, 'utf-8')\n    this.offset = offset + len\n    return this\n  }\n\n  public add(otherBuffer: Buffer): Writer {\n    this.ensure(otherBuffer.length)\n    otherBuffer.copy(this.buffer, this.offset)\n    this.offset += otherBuffer.length\n    return this\n  }\n\n  private join(code?: number): Buffer {\n    if (code) {\n      this.buffer[this.headerPosition] = code\n      //length is everything in this packet minus the code\n      const length = this.offset - (this.headerPosition + 1)\n      this.buffer.writeInt32BE(length, this.headerPosition + 1)\n    }\n    return this.buffer.slice(code ? 0 : 5, this.offset)\n  }\n\n  public flush(code?: number): Buffer {\n    const result = this.join(code)\n    this.offset = 5\n    this.headerPosition = 0\n    this.buffer = Buffer.allocUnsafe(this.size)\n    return result\n  }\n\n  public clear(): void {\n    this.offset = 5\n    this.headerPosition = 0\n  }\n}\n","import { Writer } from './buffer-writer'\n\nconst enum code {\n  startup = 0x70,\n  query = 0x51,\n  parse = 0x50,\n  bind = 0x42,\n  execute = 0x45,\n  flush = 0x48,\n  sync = 0x53,\n  end = 0x58,\n  close = 0x43,\n  describe = 0x44,\n  copyFromChunk = 0x64,\n  copyDone = 0x63,\n  copyFail = 0x66,\n}\n\nconst writer = new Writer()\n\nconst startup = (opts: Record<string, string>): Buffer => {\n  // protocol version\n  writer.addInt16(3).addInt16(0)\n  for (const key of Object.keys(opts)) {\n    writer.addCString(key).addCString(opts[key])\n  }\n\n  writer.addCString('client_encoding').addCString('UTF8')\n\n  const bodyBuffer = writer.addCString('').flush()\n  // this message is sent without a code\n\n  const length = bodyBuffer.length + 4\n\n  return new Writer().addInt32(length).add(bodyBuffer).flush()\n}\n\nconst requestSsl = (): Buffer => {\n  const response = Buffer.allocUnsafe(8)\n  response.writeInt32BE(8, 0)\n  response.writeInt32BE(80877103, 4)\n  return response\n}\n\nconst password = (password: string): Buffer => {\n  return writer.addCString(password).flush(code.startup)\n}\n\nconst sendSASLInitialResponseMessage = function (mechanism: string, initialResponse: string): Buffer {\n  // 0x70 = 'p'\n  writer.addCString(mechanism).addInt32PrefixedString(initialResponse)\n\n  return writer.flush(code.startup)\n}\n\nconst sendSCRAMClientFinalMessage = function (additionalData: string): Buffer {\n  return writer.addString(additionalData).flush(code.startup)\n}\n\nconst query = (text: string): Buffer => {\n  return writer.addCString(text).flush(code.query)\n}\n\ntype ParseOpts = {\n  name?: string\n  types?: number[]\n  text: string\n}\n\nconst emptyArray: any[] = []\n\nconst parse = (query: ParseOpts): Buffer => {\n  // expect something like this:\n  // { name: 'queryName',\n  //   text: 'select * from blah',\n  //   types: ['int8', 'bool'] }\n\n  // normalize missing query names to allow for null\n  const name = query.name || ''\n  if (name.length > 63) {\n    console.error('Warning! Postgres only supports 63 characters for query names.')\n    console.error('You supplied %s (%s)', name, name.length)\n    console.error('This can cause conflicts and silent errors executing queries')\n  }\n\n  const types = query.types || emptyArray\n\n  const len = types.length\n\n  const buffer = writer\n    .addCString(name) // name of query\n    .addCString(query.text) // actual query text\n    .addInt16(len)\n\n  for (let i = 0; i < len; i++) {\n    buffer.addInt32(types[i])\n  }\n\n  return writer.flush(code.parse)\n}\n\ntype ValueMapper = (param: any, index: number) => any\n\ntype BindOpts = {\n  portal?: string\n  binary?: boolean\n  statement?: string\n  values?: any[]\n  // optional map from JS value to postgres value per parameter\n  valueMapper?: ValueMapper\n}\n\nconst paramWriter = new Writer()\n\n// make this a const enum so typescript will inline the value\nconst enum ParamType {\n  STRING = 0,\n  BINARY = 1,\n}\n\nconst writeValues = function (values: any[], valueMapper?: ValueMapper): void {\n  for (let i = 0; i < values.length; i++) {\n    const mappedVal = valueMapper ? valueMapper(values[i], i) : values[i]\n    if (mappedVal == null) {\n      // add the param type (string) to the writer\n      writer.addInt16(ParamType.STRING)\n      // write -1 to the param writer to indicate null\n      paramWriter.addInt32(-1)\n    } else if (mappedVal instanceof Buffer) {\n      // add the param type (binary) to the writer\n      writer.addInt16(ParamType.BINARY)\n      // add the buffer to the param writer\n      paramWriter.addInt32(mappedVal.length)\n      paramWriter.add(mappedVal)\n    } else {\n      // add the param type (string) to the writer\n      writer.addInt16(ParamType.STRING)\n      // length prefix + UTF-8 bytes in one pass (Buffer.byteLength computed once)\n      paramWriter.addInt32PrefixedString(mappedVal)\n    }\n  }\n}\n\nconst bind = (config: BindOpts = {}): Buffer => {\n  // normalize config\n  const portal = config.portal || ''\n  const statement = config.statement || ''\n  const binary = config.binary || false\n  const values = config.values || emptyArray\n  const len = values.length\n\n  writer.addCString(portal).addCString(statement)\n  writer.addInt16(len)\n\n  try {\n    writeValues(values, config.valueMapper)\n  } catch (err) {\n    writer.clear()\n    paramWriter.clear()\n    throw err\n  }\n\n  writer.addInt16(len)\n  writer.add(paramWriter.flush())\n\n  // all results use the same format code\n  writer.addInt16(1)\n  // format code\n  writer.addInt16(binary ? ParamType.BINARY : ParamType.STRING)\n  return writer.flush(code.bind)\n}\n\ntype ExecOpts = {\n  portal?: string\n  rows?: number\n}\n\nconst emptyExecute = Buffer.from([code.execute, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00])\n\nconst execute = (config?: ExecOpts): Buffer => {\n  // this is the happy path for most queries\n  if (!config || (!config.portal && !config.rows)) {\n    return emptyExecute\n  }\n\n  const portal = config.portal || ''\n  const rows = config.rows || 0\n\n  const portalLength = Buffer.byteLength(portal)\n  const len = 4 + portalLength + 1 + 4\n  // one extra bit for code\n  const buff = Buffer.allocUnsafe(1 + len)\n  buff[0] = code.execute\n  buff.writeInt32BE(len, 1)\n  buff.write(portal, 5, 'utf-8')\n  buff[portalLength + 5] = 0 // null terminate portal cString\n  buff.writeUInt32BE(rows, buff.length - 4)\n  return buff\n}\n\nconst cancel = (processID: number, secretKey: number): Buffer => {\n  const buffer = Buffer.allocUnsafe(16)\n  buffer.writeInt32BE(16, 0)\n  buffer.writeInt16BE(1234, 4)\n  buffer.writeInt16BE(5678, 6)\n  buffer.writeInt32BE(processID, 8)\n  buffer.writeInt32BE(secretKey, 12)\n  return buffer\n}\n\ntype PortalOpts = {\n  type: 'S' | 'P'\n  name?: string\n}\n\nconst cstringMessage = (code: code, string: string): Buffer => {\n  const stringLen = Buffer.byteLength(string)\n  const len = 4 + stringLen + 1\n  // one extra bit for code\n  const buffer = Buffer.allocUnsafe(1 + len)\n  buffer[0] = code\n  buffer.writeInt32BE(len, 1)\n  buffer.write(string, 5, 'utf-8')\n  buffer[len] = 0 // null terminate cString\n  return buffer\n}\n\nconst emptyDescribePortal = writer.addCString('P').flush(code.describe)\nconst emptyDescribeStatement = writer.addCString('S').flush(code.describe)\n\nconst describe = (msg: PortalOpts): Buffer => {\n  return msg.name\n    ? cstringMessage(code.describe, `${msg.type}${msg.name || ''}`)\n    : msg.type === 'P'\n    ? emptyDescribePortal\n    : emptyDescribeStatement\n}\n\nconst close = (msg: PortalOpts): Buffer => {\n  const text = `${msg.type}${msg.name || ''}`\n  return cstringMessage(code.close, text)\n}\n\nconst copyData = (chunk: Buffer): Buffer => {\n  return writer.add(chunk).flush(code.copyFromChunk)\n}\n\nconst copyFail = (message: string): Buffer => {\n  return cstringMessage(code.copyFail, message)\n}\n\nconst codeOnlyBuffer = (code: code): Buffer => Buffer.from([code, 0x00, 0x00, 0x00, 0x04])\n\nconst flushBuffer = codeOnlyBuffer(code.flush)\nconst syncBuffer = codeOnlyBuffer(code.sync)\nconst endBuffer = codeOnlyBuffer(code.end)\nconst copyDoneBuffer = codeOnlyBuffer(code.copyDone)\n\nconst serialize = {\n  startup,\n  password,\n  requestSsl,\n  sendSASLInitialResponseMessage,\n  sendSCRAMClientFinalMessage,\n  query,\n  parse,\n  bind,\n  execute,\n  describe,\n  close,\n  flush: () => flushBuffer,\n  sync: () => syncBuffer,\n  end: () => endBuffer,\n  copyData,\n  copyDone: () => copyDoneBuffer,\n  copyFail,\n  cancel,\n}\n\nexport { serialize }\n","export class BufferReader {\n  private buffer: Buffer = Buffer.allocUnsafe(0)\n\n  // TODO(bmc): support non-utf8 encoding?\n  private encoding: BufferEncoding = 'utf-8'\n\n  constructor(private offset: number = 0) {}\n\n  public setBuffer(offset: number, buffer: Buffer): void {\n    this.offset = offset\n    this.buffer = buffer\n  }\n\n  public int16(): number {\n    const result = this.buffer.readInt16BE(this.offset)\n    this.offset += 2\n    return result\n  }\n\n  public byte(): number {\n    const result = this.buffer[this.offset]\n    this.offset++\n    return result\n  }\n\n  public int32(): number {\n    const result = this.buffer.readInt32BE(this.offset)\n    this.offset += 4\n    return result\n  }\n\n  public uint32(): number {\n    const result = this.buffer.readUInt32BE(this.offset)\n    this.offset += 4\n    return result\n  }\n\n  public string(length: number): string {\n    const result = this.buffer.toString(this.encoding, this.offset, this.offset + length)\n    this.offset += length\n    return result\n  }\n\n  public cstring(): string {\n    const start = this.offset\n    let end = start\n    // eslint-disable-next-line no-empty\n    while (this.buffer[end++]) {}\n    this.offset = end\n    return this.buffer.toString(this.encoding, start, end - 1)\n  }\n\n  public bytes(length: number): Buffer {\n    const result = this.buffer.slice(this.offset, this.offset + length)\n    this.offset += length\n    return result\n  }\n}\n","import { TransformOptions } from 'stream'\nimport {\n  Mode,\n  bindComplete,\n  parseComplete,\n  closeComplete,\n  noData,\n  portalSuspended,\n  copyDone,\n  replicationStart,\n  emptyQuery,\n  ReadyForQueryMessage,\n  CommandCompleteMessage,\n  CopyDataMessage,\n  CopyResponse,\n  NotificationResponseMessage,\n  RowDescriptionMessage,\n  ParameterDescriptionMessage,\n  Field,\n  DataRowMessage,\n  ParameterStatusMessage,\n  BackendKeyDataMessage,\n  DatabaseError,\n  BackendMessage,\n  MessageName,\n  AuthenticationMD5Password,\n  NoticeMessage,\n} from './messages'\nimport { BufferReader } from './buffer-reader'\n\n// every message is prefixed with a single byte\nconst CODE_LENGTH = 1\n// every message has an int32 length which includes itself but does\n// NOT include the code in the length\nconst LEN_LENGTH = 4\n\nconst HEADER_LENGTH = CODE_LENGTH + LEN_LENGTH\n\n// A placeholder for a `BackendMessage`’s length value that will be set after construction.\nconst LATEINIT_LENGTH = -1\n\nexport type Packet = {\n  code: number\n  packet: Buffer\n}\n\nconst emptyBuffer = Buffer.allocUnsafe(0)\n\ntype StreamOptions = TransformOptions & {\n  mode: Mode\n}\n\nconst enum MessageCodes {\n  DataRow = 0x44, // D\n  ParseComplete = 0x31, // 1\n  BindComplete = 0x32, // 2\n  CloseComplete = 0x33, // 3\n  CommandComplete = 0x43, // C\n  ReadyForQuery = 0x5a, // Z\n  NoData = 0x6e, // n\n  NotificationResponse = 0x41, // A\n  AuthenticationResponse = 0x52, // R\n  ParameterStatus = 0x53, // S\n  BackendKeyData = 0x4b, // K\n  ErrorMessage = 0x45, // E\n  NoticeMessage = 0x4e, // N\n  RowDescriptionMessage = 0x54, // T\n  ParameterDescriptionMessage = 0x74, // t\n  PortalSuspended = 0x73, // s\n  ReplicationStart = 0x57, // W\n  EmptyQuery = 0x49, // I\n  CopyIn = 0x47, // G\n  CopyOut = 0x48, // H\n  CopyDone = 0x63, // c\n  CopyData = 0x64, // d\n}\n\nexport type MessageCallback = (msg: BackendMessage) => void\n\nexport class Parser {\n  private buffer: Buffer = emptyBuffer\n  private bufferLength: number = 0\n  private bufferOffset: number = 0\n  private reader = new BufferReader()\n  private mode: Mode\n\n  constructor(opts?: StreamOptions) {\n    if (opts?.mode === 'binary') {\n      throw new Error('Binary mode not supported yet')\n    }\n    this.mode = opts?.mode || 'text'\n  }\n\n  public parse(buffer: Buffer, callback: MessageCallback) {\n    this.mergeBuffer(buffer)\n    const bufferFullLength = this.bufferOffset + this.bufferLength\n    let offset = this.bufferOffset\n    while (offset + HEADER_LENGTH <= bufferFullLength) {\n      // code is 1 byte long - it identifies the message type\n      const code = this.buffer[offset]\n      // length is 1 Uint32BE - it is the length of the message EXCLUDING the code\n      const length = this.buffer.readUInt32BE(offset + CODE_LENGTH)\n      const fullMessageLength = CODE_LENGTH + length\n      if (fullMessageLength + offset <= bufferFullLength) {\n        const message = this.handlePacket(offset + HEADER_LENGTH, code, length, this.buffer)\n        callback(message)\n        offset += fullMessageLength\n      } else {\n        break\n      }\n    }\n    if (offset === bufferFullLength) {\n      // No more use for the buffer\n      this.buffer = emptyBuffer\n      this.bufferLength = 0\n      this.bufferOffset = 0\n    } else {\n      // Adjust the cursors of remainingBuffer\n      this.bufferLength = bufferFullLength - offset\n      this.bufferOffset = offset\n    }\n  }\n\n  private mergeBuffer(buffer: Buffer): void {\n    if (this.bufferLength > 0) {\n      const newLength = this.bufferLength + buffer.byteLength\n      const newFullLength = newLength + this.bufferOffset\n      if (newFullLength > this.buffer.byteLength) {\n        // We can't concat the new buffer with the remaining one\n        let newBuffer: Buffer\n        if (newLength <= this.buffer.byteLength && this.bufferOffset >= this.bufferLength) {\n          // We can move the relevant part to the beginning of the buffer instead of allocating a new buffer\n          newBuffer = this.buffer\n        } else {\n          // Allocate a new larger buffer\n          let newBufferLength = this.buffer.byteLength * 2\n          while (newLength >= newBufferLength) {\n            newBufferLength *= 2\n          }\n          newBuffer = Buffer.allocUnsafe(newBufferLength)\n        }\n        // Move the remaining buffer to the new one\n        this.buffer.copy(newBuffer, 0, this.bufferOffset, this.bufferOffset + this.bufferLength)\n        this.buffer = newBuffer\n        this.bufferOffset = 0\n      }\n      // Concat the new buffer with the remaining one\n      buffer.copy(this.buffer, this.bufferOffset + this.bufferLength)\n      this.bufferLength = newLength\n    } else {\n      this.buffer = buffer\n      this.bufferOffset = 0\n      this.bufferLength = buffer.byteLength\n    }\n  }\n\n  private handlePacket(offset: number, code: number, length: number, bytes: Buffer): BackendMessage {\n    const { reader } = this\n\n    // NOTE: This undesirably retains the buffer in `this.reader` if the `parse*Message` calls below throw. However, those should only throw in the case of a protocol error, which normally results in the reader being discarded.\n    reader.setBuffer(offset, bytes)\n\n    let message: BackendMessage\n\n    switch (code) {\n      case MessageCodes.BindComplete:\n        message = bindComplete\n        break\n      case MessageCodes.ParseComplete:\n        message = parseComplete\n        break\n      case MessageCodes.CloseComplete:\n        message = closeComplete\n        break\n      case MessageCodes.NoData:\n        message = noData\n        break\n      case MessageCodes.PortalSuspended:\n        message = portalSuspended\n        break\n      case MessageCodes.CopyDone:\n        message = copyDone\n        break\n      case MessageCodes.ReplicationStart:\n        message = replicationStart\n        break\n      case MessageCodes.EmptyQuery:\n        message = emptyQuery\n        break\n      case MessageCodes.DataRow:\n        message = parseDataRowMessage(reader)\n        break\n      case MessageCodes.CommandComplete:\n        message = parseCommandCompleteMessage(reader)\n        break\n      case MessageCodes.ReadyForQuery:\n        message = parseReadyForQueryMessage(reader)\n        break\n      case MessageCodes.NotificationResponse:\n        message = parseNotificationMessage(reader)\n        break\n      case MessageCodes.AuthenticationResponse:\n        message = parseAuthenticationResponse(reader, length)\n        break\n      case MessageCodes.ParameterStatus:\n        message = parseParameterStatusMessage(reader)\n        break\n      case MessageCodes.BackendKeyData:\n        message = parseBackendKeyData(reader)\n        break\n      case MessageCodes.ErrorMessage:\n        message = parseErrorMessage(reader, 'error')\n        break\n      case MessageCodes.NoticeMessage:\n        message = parseErrorMessage(reader, 'notice')\n        break\n      case MessageCodes.RowDescriptionMessage:\n        message = parseRowDescriptionMessage(reader)\n        break\n      case MessageCodes.ParameterDescriptionMessage:\n        message = parseParameterDescriptionMessage(reader)\n        break\n      case MessageCodes.CopyIn:\n        message = parseCopyInMessage(reader)\n        break\n      case MessageCodes.CopyOut:\n        message = parseCopyOutMessage(reader)\n        break\n      case MessageCodes.CopyData:\n        message = parseCopyData(reader, length)\n        break\n      default:\n        return new DatabaseError('received invalid response: ' + code.toString(16), length, 'error')\n    }\n\n    reader.setBuffer(0, emptyBuffer)\n\n    message.length = length\n    return message\n  }\n}\n\nconst parseReadyForQueryMessage = (reader: BufferReader) => {\n  const status = reader.string(1)\n  return new ReadyForQueryMessage(LATEINIT_LENGTH, status)\n}\n\nconst parseCommandCompleteMessage = (reader: BufferReader) => {\n  const text = reader.cstring()\n  return new CommandCompleteMessage(LATEINIT_LENGTH, text)\n}\n\nconst parseCopyData = (reader: BufferReader, length: number) => {\n  const chunk = reader.bytes(length - 4)\n  return new CopyDataMessage(LATEINIT_LENGTH, chunk)\n}\n\nconst parseCopyInMessage = (reader: BufferReader) => parseCopyMessage(reader, 'copyInResponse')\n\nconst parseCopyOutMessage = (reader: BufferReader) => parseCopyMessage(reader, 'copyOutResponse')\n\nconst parseCopyMessage = (reader: BufferReader, messageName: MessageName) => {\n  const isBinary = reader.byte() !== 0\n  const columnCount = reader.int16()\n  const message = new CopyResponse(LATEINIT_LENGTH, messageName, isBinary, columnCount)\n  for (let i = 0; i < columnCount; i++) {\n    message.columnTypes[i] = reader.int16()\n  }\n  return message\n}\n\nconst parseNotificationMessage = (reader: BufferReader) => {\n  const processId = reader.int32()\n  const channel = reader.cstring()\n  const payload = reader.cstring()\n  return new NotificationResponseMessage(LATEINIT_LENGTH, processId, channel, payload)\n}\n\nconst parseRowDescriptionMessage = (reader: BufferReader) => {\n  const fieldCount = reader.int16()\n  const message = new RowDescriptionMessage(LATEINIT_LENGTH, fieldCount)\n  for (let i = 0; i < fieldCount; i++) {\n    message.fields[i] = parseField(reader)\n  }\n  return message\n}\n\nconst parseField = (reader: BufferReader) => {\n  const name = reader.cstring()\n  const tableID = reader.uint32()\n  const columnID = reader.int16()\n  const dataTypeID = reader.uint32()\n  const dataTypeSize = reader.int16()\n  const dataTypeModifier = reader.int32()\n  const mode = reader.int16() === 0 ? 'text' : 'binary'\n  return new Field(name, tableID, columnID, dataTypeID, dataTypeSize, dataTypeModifier, mode)\n}\n\nconst parseParameterDescriptionMessage = (reader: BufferReader) => {\n  const parameterCount = reader.int16()\n  const message = new ParameterDescriptionMessage(LATEINIT_LENGTH, parameterCount)\n  for (let i = 0; i < parameterCount; i++) {\n    // OIDs are unsigned, same as dataTypeID in parseField above\n    message.dataTypeIDs[i] = reader.uint32()\n  }\n  return message\n}\n\nconst parseDataRowMessage = (reader: BufferReader) => {\n  const fieldCount = reader.int16()\n  const fields: any[] = new Array(fieldCount)\n  for (let i = 0; i < fieldCount; i++) {\n    const len = reader.int32()\n    // a -1 for length means the value of the field is null\n    fields[i] = len === -1 ? null : reader.string(len)\n  }\n  return new DataRowMessage(LATEINIT_LENGTH, fields)\n}\n\nconst parseParameterStatusMessage = (reader: BufferReader) => {\n  const name = reader.cstring()\n  const value = reader.cstring()\n  return new ParameterStatusMessage(LATEINIT_LENGTH, name, value)\n}\n\nconst parseBackendKeyData = (reader: BufferReader) => {\n  const processID = reader.int32()\n  const secretKey = reader.int32()\n  return new BackendKeyDataMessage(LATEINIT_LENGTH, processID, secretKey)\n}\n\nconst parseAuthenticationResponse = (reader: BufferReader, length: number) => {\n  const code = reader.int32()\n  // TODO(bmc): maybe better types here\n  const message: BackendMessage & any = {\n    name: 'authenticationOk',\n    length,\n  }\n\n  switch (code) {\n    case 0: // AuthenticationOk\n      break\n    case 3: // AuthenticationCleartextPassword\n      if (message.length === 8) {\n        message.name = 'authenticationCleartextPassword'\n      }\n      break\n    case 5: // AuthenticationMD5Password\n      if (message.length === 12) {\n        message.name = 'authenticationMD5Password'\n        const salt = reader.bytes(4)\n        return new AuthenticationMD5Password(LATEINIT_LENGTH, salt)\n      }\n      break\n    case 10: // AuthenticationSASL\n      {\n        message.name = 'authenticationSASL'\n        message.mechanisms = []\n        let mechanism: string\n        do {\n          mechanism = reader.cstring()\n          if (mechanism) {\n            message.mechanisms.push(mechanism)\n          }\n        } while (mechanism)\n      }\n      break\n    case 11: // AuthenticationSASLContinue\n      message.name = 'authenticationSASLContinue'\n      message.data = reader.string(length - 8)\n      break\n    case 12: // AuthenticationSASLFinal\n      message.name = 'authenticationSASLFinal'\n      message.data = reader.string(length - 8)\n      break\n    default:\n      throw new Error('Unknown authenticationOk message type ' + code)\n  }\n  return message\n}\n\nconst parseErrorMessage = (reader: BufferReader, name: MessageName) => {\n  const fields: Record<string, string> = {}\n  let fieldType = reader.string(1)\n  while (fieldType !== '\\0') {\n    fields[fieldType] = reader.cstring()\n    fieldType = reader.string(1)\n  }\n\n  const messageValue = fields.M\n\n  const message =\n    name === 'notice'\n      ? new NoticeMessage(LATEINIT_LENGTH, messageValue)\n      : new DatabaseError(messageValue, LATEINIT_LENGTH, name)\n\n  message.severity = fields.S\n  message.code = fields.C\n  message.detail = fields.D\n  message.hint = fields.H\n  message.position = fields.P\n  message.internalPosition = fields.p\n  message.internalQuery = fields.q\n  message.where = fields.W\n  message.schema = fields.s\n  message.table = fields.t\n  message.column = fields.c\n  message.dataType = fields.d\n  message.constraint = fields.n\n  message.file = fields.F\n  message.line = fields.L\n  message.routine = fields.R\n  return message\n}\n","import { DatabaseError } from './messages'\nimport { serialize } from './serializer'\nimport { Parser, MessageCallback } from './parser'\n\nexport function parse(stream: NodeJS.ReadableStream, callback: MessageCallback): Promise<void> {\n  const parser = new Parser()\n  stream.on('data', (buffer: Buffer) => parser.parse(buffer, callback))\n  return new Promise((resolve) => stream.on('end', () => resolve()))\n}\n\nexport { serialize, DatabaseError }\n","// This is an empty module that is served up when outside of a workerd environment\n// See the `exports` field in package.json\nexport default {}\n","const { getStream, getSecureStream } = getStreamFuncs()\n\nmodule.exports = {\n  /**\n   * Get a socket stream compatible with the current runtime environment.\n   * @returns {Duplex}\n   */\n  getStream,\n  /**\n   * Get a TLS secured socket, compatible with the current environment,\n   * using the socket and other settings given in `options`.\n   * @returns {Duplex}\n   */\n  getSecureStream,\n}\n\n/**\n * The stream functions that work in Node.js\n */\nfunction getNodejsStreamFuncs() {\n  function getStream(ssl) {\n    const net = require('net')\n    return new net.Socket()\n  }\n\n  function getSecureStream(options) {\n    const tls = require('tls')\n    return tls.connect(options)\n  }\n  return {\n    getStream,\n    getSecureStream,\n  }\n}\n\n/**\n * The stream functions that work in Cloudflare Workers\n */\nfunction getCloudflareStreamFuncs() {\n  function getStream(ssl) {\n    const { CloudflareSocket } = require('pg-cloudflare')\n    return new CloudflareSocket(ssl)\n  }\n\n  function getSecureStream(options) {\n    options.socket.startTls(options)\n    return options.socket\n  }\n  return {\n    getStream,\n    getSecureStream,\n  }\n}\n\n/**\n * Are we running in a Cloudflare Worker?\n *\n * @returns true if the code is currently running inside a Cloudflare Worker.\n */\nfunction isCloudflareRuntime() {\n  // Since 2022-03-21 the `global_navigator` compatibility flag is on for Cloudflare Workers\n  // which means that `navigator.userAgent` will be defined.\n  // eslint-disable-next-line no-undef\n  if (typeof navigator === 'object' && navigator !== null && typeof navigator.userAgent === 'string') {\n    // eslint-disable-next-line no-undef\n    return navigator.userAgent === 'Cloudflare-Workers'\n  }\n  // In case `navigator` or `navigator.userAgent` is not defined then try a more sneaky approach\n  if (typeof Response === 'function') {\n    const resp = new Response(null, { cf: { thing: true } })\n    if (typeof resp.cf === 'object' && resp.cf !== null && resp.cf.thing) {\n      return true\n    }\n  }\n  return false\n}\n\nfunction getStreamFuncs() {\n  if (isCloudflareRuntime()) {\n    return getCloudflareStreamFuncs()\n  }\n  return getNodejsStreamFuncs()\n}\n","'use strict'\n\nconst EventEmitter = require('events').EventEmitter\n\nconst { parse, serialize } = require('pg-protocol')\nconst stream = require('./stream')\nconst { getStream } = stream\n\nconst flushBuffer = serialize.flush()\nconst syncBuffer = serialize.sync()\nconst endBuffer = serialize.end()\n\n// TODO(bmc) support binary mode at some point\nclass Connection extends EventEmitter {\n  constructor(config) {\n    super()\n    config = config || {}\n\n    this.stream = config.stream || getStream(config.ssl)\n    if (typeof this.stream === 'function') {\n      this.stream = this.stream(config)\n    }\n\n    this._keepAlive = config.keepAlive\n    this._keepAliveInitialDelayMillis = config.keepAliveInitialDelayMillis\n    this.parsedStatements = {}\n    this.submittedNamedStatements = {}\n    this.ssl = config.ssl || false\n    this.sslNegotiation = config.sslNegotiation || 'postgres'\n    this._ending = false\n    this._emitMessage = false\n    const self = this\n    this.on('newListener', function (eventName) {\n      if (eventName === 'message') {\n        self._emitMessage = true\n      }\n    })\n  }\n\n  connect(port, host) {\n    const self = this\n\n    this._connecting = true\n    this.stream.setNoDelay(true)\n    this.stream.connect(port, host)\n\n    this.stream.once('connect', function () {\n      if (self._keepAlive) {\n        self.stream.setKeepAlive(true, self._keepAliveInitialDelayMillis)\n      }\n      self.emit('connect')\n    })\n\n    const reportStreamError = function (error) {\n      // errors about disconnections should be ignored during disconnect\n      if (self._ending && (error.code === 'ECONNRESET' || error.code === 'EPIPE')) {\n        return\n      }\n      self.emit('error', error)\n    }\n    this.stream.on('error', reportStreamError)\n\n    this.stream.on('close', function () {\n      self.emit('end')\n    })\n\n    if (!this.ssl) {\n      return this.attachListeners(this.stream)\n    }\n\n    // With direct SSL negotiation the TLS handshake starts immediately on the\n    // raw socket, skipping the SSLRequest packet and the server's 'S'/'N' reply.\n    if (this.sslNegotiation === 'direct') {\n      return this.stream.once('connect', function () {\n        self.upgradeToSSL(host, reportStreamError)\n      })\n    }\n\n    this.stream.once('data', function (buffer) {\n      const responseCode = buffer.toString('utf8')\n      switch (responseCode) {\n        case 'S': // Server supports SSL connections, continue with a secure connection\n          break\n        case 'N': // Server does not support SSL connections\n          self.stream.end()\n          return self.emit('error', new Error('The server does not support SSL connections'))\n        default:\n          // Any other response byte, including 'E' (ErrorResponse) indicating a server error\n          self.stream.end()\n          return self.emit('error', new Error('There was an error establishing an SSL connection'))\n      }\n      self.upgradeToSSL(host, reportStreamError)\n    })\n  }\n\n  upgradeToSSL(host, reportStreamError) {\n    const self = this\n    const options = {\n      socket: self.stream,\n    }\n\n    if (self.ssl !== true) {\n      Object.assign(options, self.ssl)\n\n      if ('key' in self.ssl) {\n        options.key = self.ssl.key\n      }\n    }\n\n    // Direct SSL negotiation requires ALPN so the server can confirm it is\n    // speaking the PostgreSQL protocol over the TLS connection.\n    if (self.sslNegotiation === 'direct') {\n      options.ALPNProtocols = ['postgresql']\n    }\n\n    const net = require('net')\n    if (net.isIP && net.isIP(host) === 0) {\n      options.servername = host\n    }\n    try {\n      self.stream = stream.getSecureStream(options)\n    } catch (err) {\n      return self.emit('error', err)\n    }\n    self.attachListeners(self.stream)\n    self.stream.on('error', reportStreamError)\n\n    self.emit('sslconnect')\n  }\n\n  attachListeners(stream) {\n    parse(stream, (msg) => {\n      const eventName = msg.name === 'error' ? 'errorMessage' : msg.name\n      if (this._emitMessage) {\n        this.emit('message', msg)\n      }\n      this.emit(eventName, msg)\n    })\n  }\n\n  requestSsl() {\n    this.stream.write(serialize.requestSsl())\n  }\n\n  startup(config) {\n    this.stream.write(serialize.startup(config))\n  }\n\n  cancel(processID, secretKey) {\n    this._send(serialize.cancel(processID, secretKey))\n  }\n\n  password(password) {\n    this._send(serialize.password(password))\n  }\n\n  sendSASLInitialResponseMessage(mechanism, initialResponse) {\n    this._send(serialize.sendSASLInitialResponseMessage(mechanism, initialResponse))\n  }\n\n  sendSCRAMClientFinalMessage(additionalData) {\n    this._send(serialize.sendSCRAMClientFinalMessage(additionalData))\n  }\n\n  _send(buffer) {\n    if (!this.stream.writable) {\n      return false\n    }\n    return this.stream.write(buffer)\n  }\n\n  query(text) {\n    this._send(serialize.query(text))\n  }\n\n  // send parse message\n  parse(query) {\n    this._send(serialize.parse(query))\n  }\n\n  // send bind message\n  bind(config) {\n    this._send(serialize.bind(config))\n  }\n\n  // send execute message\n  execute(config) {\n    this._send(serialize.execute(config))\n  }\n\n  flush() {\n    if (this.stream.writable) {\n      this.stream.write(flushBuffer)\n    }\n  }\n\n  sync() {\n    this._ending = true\n    this._send(syncBuffer)\n  }\n\n  ref() {\n    this.stream.ref()\n  }\n\n  unref() {\n    this.stream.unref()\n  }\n\n  end() {\n    // 0x58 = 'X'\n    this._ending = true\n    if (!this._connecting || !this.stream.writable) {\n      this.stream.end()\n      return\n    }\n    return this.stream.write(endBuffer, () => {\n      this.stream.end()\n    })\n  }\n\n  close(msg) {\n    this._send(serialize.close(msg))\n  }\n\n  describe(msg) {\n    this._send(serialize.describe(msg))\n  }\n\n  sendCopyFromChunk(chunk) {\n    this._send(serialize.copyData(chunk))\n  }\n\n  endCopyFrom() {\n    this._send(serialize.copyDone())\n  }\n\n  sendCopyFail(msg) {\n    this._send(serialize.copyFail(msg))\n  }\n}\n\nmodule.exports = Connection\n","/*\nCopyright (c) 2014-2021, Matteo Collina <hello@matteocollina.com>\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR\nIN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n*/\n\n'use strict'\n\nconst { Transform } = require('stream')\nconst { StringDecoder } = require('string_decoder')\nconst kLast = Symbol('last')\nconst kDecoder = Symbol('decoder')\n\nfunction transform (chunk, enc, cb) {\n  let list\n  if (this.overflow) { // Line buffer is full. Skip to start of next line.\n    const buf = this[kDecoder].write(chunk)\n    list = buf.split(this.matcher)\n\n    if (list.length === 1) return cb() // Line ending not found. Discard entire chunk.\n\n    // Line ending found. Discard trailing fragment of previous line and reset overflow state.\n    list.shift()\n    this.overflow = false\n  } else {\n    this[kLast] += this[kDecoder].write(chunk)\n    list = this[kLast].split(this.matcher)\n  }\n\n  this[kLast] = list.pop()\n\n  for (let i = 0; i < list.length; i++) {\n    try {\n      push(this, this.mapper(list[i]))\n    } catch (error) {\n      return cb(error)\n    }\n  }\n\n  this.overflow = this[kLast].length > this.maxLength\n  if (this.overflow && !this.skipOverflow) {\n    cb(new Error('maximum buffer reached'))\n    return\n  }\n\n  cb()\n}\n\nfunction flush (cb) {\n  // forward any gibberish left in there\n  this[kLast] += this[kDecoder].end()\n\n  if (this[kLast]) {\n    try {\n      push(this, this.mapper(this[kLast]))\n    } catch (error) {\n      return cb(error)\n    }\n  }\n\n  cb()\n}\n\nfunction push (self, val) {\n  if (val !== undefined) {\n    self.push(val)\n  }\n}\n\nfunction noop (incoming) {\n  return incoming\n}\n\nfunction split (matcher, mapper, options) {\n  // Set defaults for any arguments not supplied.\n  matcher = matcher || /\\r?\\n/\n  mapper = mapper || noop\n  options = options || {}\n\n  // Test arguments explicitly.\n  switch (arguments.length) {\n    case 1:\n      // If mapper is only argument.\n      if (typeof matcher === 'function') {\n        mapper = matcher\n        matcher = /\\r?\\n/\n      // If options is only argument.\n      } else if (typeof matcher === 'object' && !(matcher instanceof RegExp) && !matcher[Symbol.split]) {\n        options = matcher\n        matcher = /\\r?\\n/\n      }\n      break\n\n    case 2:\n      // If mapper and options are arguments.\n      if (typeof matcher === 'function') {\n        options = mapper\n        mapper = matcher\n        matcher = /\\r?\\n/\n      // If matcher and options are arguments.\n      } else if (typeof mapper === 'object') {\n        options = mapper\n        mapper = noop\n      }\n  }\n\n  options = Object.assign({}, options)\n  options.autoDestroy = true\n  options.transform = transform\n  options.flush = flush\n  options.readableObjectMode = true\n\n  const stream = new Transform(options)\n\n  stream[kLast] = ''\n  stream[kDecoder] = new StringDecoder('utf8')\n  stream.matcher = matcher\n  stream.mapper = mapper\n  stream.maxLength = options.maxLength\n  stream.skipOverflow = options.skipOverflow || false\n  stream.overflow = false\n  stream._destroy = function (err, cb) {\n    // Weird Node v12 bug that we need to work around\n    this._writableState.errorEmitted = false\n    cb(err)\n  }\n\n  return stream\n}\n\nmodule.exports = split\n","'use strict';\n\nvar path = require('path')\n  , Stream = require('stream').Stream\n  , split = require('split2')\n  , util = require('util')\n  , defaultPort = 5432\n  , isWin = (process.platform === 'win32')\n  , warnStream = process.stderr\n;\n\n\nvar S_IRWXG = 56     //    00070(8)\n  , S_IRWXO = 7      //    00007(8)\n  , S_IFMT  = 61440  // 00170000(8)\n  , S_IFREG = 32768  //  0100000(8)\n;\nfunction isRegFile(mode) {\n    return ((mode & S_IFMT) == S_IFREG);\n}\n\nvar fieldNames = [ 'host', 'port', 'database', 'user', 'password' ];\nvar nrOfFields = fieldNames.length;\nvar passKey = fieldNames[ nrOfFields -1 ];\n\n\nfunction warn() {\n    var isWritable = (\n        warnStream instanceof Stream &&\n          true === warnStream.writable\n    );\n\n    if (isWritable) {\n        var args = Array.prototype.slice.call(arguments).concat(\"\\n\");\n        warnStream.write( util.format.apply(util, args) );\n    }\n}\n\n\nObject.defineProperty(module.exports, 'isWin', {\n    get : function() {\n        return isWin;\n    } ,\n    set : function(val) {\n        isWin = val;\n    }\n});\n\n\nmodule.exports.warnTo = function(stream) {\n    var old = warnStream;\n    warnStream = stream;\n    return old;\n};\n\nmodule.exports.getFileName = function(rawEnv){\n    var env = rawEnv || process.env;\n    var file = env.PGPASSFILE || (\n        isWin ?\n          path.join( env.APPDATA || './' , 'postgresql', 'pgpass.conf' ) :\n          path.join( env.HOME || './', '.pgpass' )\n    );\n    return file;\n};\n\nmodule.exports.usePgPass = function(stats, fname) {\n    if (Object.prototype.hasOwnProperty.call(process.env, 'PGPASSWORD')) {\n        return false;\n    }\n\n    if (isWin) {\n        return true;\n    }\n\n    fname = fname || '<unkn>';\n\n    if (! isRegFile(stats.mode)) {\n        warn('WARNING: password file \"%s\" is not a plain file', fname);\n        return false;\n    }\n\n    if (stats.mode & (S_IRWXG | S_IRWXO)) {\n        /* If password file is insecure, alert the user and ignore it. */\n        warn('WARNING: password file \"%s\" has group or world access; permissions should be u=rw (0600) or less', fname);\n        return false;\n    }\n\n    return true;\n};\n\n\nvar matcher = module.exports.match = function(connInfo, entry) {\n    return fieldNames.slice(0, -1).reduce(function(prev, field, idx){\n        if (idx == 1) {\n            // the port\n            if ( Number( connInfo[field] || defaultPort ) === Number( entry[field] ) ) {\n                return prev && true;\n            }\n        }\n        return prev && (\n            entry[field] === '*' ||\n              entry[field] === connInfo[field]\n        );\n    }, true);\n};\n\n\nmodule.exports.getPassword = function(connInfo, stream, cb) {\n    var pass;\n    var lineStream = stream.pipe(split());\n\n    function onLine(line) {\n        var entry = parseLine(line);\n        if (entry && isValidEntry(entry) && matcher(connInfo, entry)) {\n            pass = entry[passKey];\n            lineStream.end(); // -> calls onEnd(), but pass is set now\n        }\n    }\n\n    var onEnd = function() {\n        stream.destroy();\n        cb(pass);\n    };\n\n    var onErr = function(err) {\n        stream.destroy();\n        warn('WARNING: error on reading file: %s', err);\n        cb(undefined);\n    };\n\n    stream.on('error', onErr);\n    lineStream\n        .on('data', onLine)\n        .on('end', onEnd)\n        .on('error', onErr)\n    ;\n\n};\n\n\nvar parseLine = module.exports.parseLine = function(line) {\n    if (line.length < 11 || line.match(/^\\s+#/)) {\n        return null;\n    }\n\n    var curChar = '';\n    var prevChar = '';\n    var fieldIdx = 0;\n    var startIdx = 0;\n    var endIdx = 0;\n    var obj = {};\n    var isLastField = false;\n    var addToObj = function(idx, i0, i1) {\n        var field = line.substring(i0, i1);\n\n        if (! Object.hasOwnProperty.call(process.env, 'PGPASS_NO_DEESCAPE')) {\n            field = field.replace(/\\\\([:\\\\])/g, '$1');\n        }\n\n        obj[ fieldNames[idx] ] = field;\n    };\n\n    for (var i = 0 ; i < line.length-1 ; i += 1) {\n        curChar = line.charAt(i+1);\n        prevChar = line.charAt(i);\n\n        isLastField = (fieldIdx == nrOfFields-1);\n\n        if (isLastField) {\n            addToObj(fieldIdx, startIdx);\n            break;\n        }\n\n        if (i >= 0 && curChar == ':' && prevChar !== '\\\\') {\n            addToObj(fieldIdx, startIdx, i+1);\n\n            startIdx = i+2;\n            fieldIdx += 1;\n        }\n    }\n\n    obj = ( Object.keys(obj).length === nrOfFields ) ? obj : null;\n\n    return obj;\n};\n\n\nvar isValidEntry = module.exports.isValidEntry = function(entry){\n    var rules = {\n        // host\n        0 : function(x){\n            return x.length > 0;\n        } ,\n        // port\n        1 : function(x){\n            if (x === '*') {\n                return true;\n            }\n            x = Number(x);\n            return (\n                isFinite(x) &&\n                  x > 0 &&\n                  x < 9007199254740992 &&\n                  Math.floor(x) === x\n            );\n        } ,\n        // database\n        2 : function(x){\n            return x.length > 0;\n        } ,\n        // username\n        3 : function(x){\n            return x.length > 0;\n        } ,\n        // password\n        4 : function(x){\n            return x.length > 0;\n        }\n    };\n\n    for (var idx = 0 ; idx < fieldNames.length ; idx += 1) {\n        var rule = rules[idx];\n        var value = entry[ fieldNames[idx] ] || '';\n\n        var res = rule(value);\n        if (!res) {\n            return false;\n        }\n    }\n\n    return true;\n};\n\n","'use strict';\n\nvar path = require('path')\n  , fs = require('fs')\n  , helper = require('./helper.js')\n;\n\n\nmodule.exports = function(connInfo, cb) {\n    var file = helper.getFileName();\n    \n    fs.stat(file, function(err, stat){\n        if (err || !helper.usePgPass(stat, file)) {\n            return cb(undefined);\n        }\n\n        var st = fs.createReadStream(file);\n\n        helper.getPassword(connInfo, st, cb);\n    });\n};\n\nmodule.exports.warnTo = helper.warnTo;\n","const EventEmitter = require('events').EventEmitter\nconst utils = require('./utils')\nconst nodeUtils = require('util')\nconst sasl = require('./crypto/sasl')\nconst TypeOverrides = require('./type-overrides')\n\nconst ConnectionParameters = require('./connection-parameters')\nconst Query = require('./query')\nconst defaults = require('./defaults')\nconst Connection = require('./connection')\nconst crypto = require('./crypto/utils')\n\nconst activeQueryDeprecationNotice = nodeUtils.deprecate(\n  () => {},\n  'Client.activeQuery is deprecated and will be removed in pg@9.0'\n)\n\nconst queryQueueDeprecationNotice = nodeUtils.deprecate(\n  () => {},\n  'Client.queryQueue is deprecated and will be removed in pg@9.0.'\n)\n\nconst pgPassDeprecationNotice = nodeUtils.deprecate(\n  () => {},\n  'pgpass support is deprecated and will be removed in pg@9.0. ' +\n    'You can provide an async function as the password property to the Client/Pool constructor that returns a password instead. Within this function you can call the pgpass module in your own code.'\n)\n\nconst byoPromiseDeprecationNotice = nodeUtils.deprecate(\n  () => {},\n  'Passing a custom Promise implementation to the Client/Pool constructor is deprecated and will be removed in pg@9.0.'\n)\n\nconst queryQueueLengthDeprecationNotice = nodeUtils.deprecate(\n  () => {},\n  'Calling client.query() when the client is already executing a query is deprecated and will be removed in pg@9.0. Use async/await or an external async flow control mechanism instead.'\n)\n\nfunction coerceNumberOrDefault(value, defaultValue) {\n  if (typeof value === 'number') {\n    return Number.isFinite(value) ? value : defaultValue\n  }\n  if (typeof value === 'string' && value.trim() !== '') {\n    const n = Number(value)\n    return Number.isFinite(n) ? n : defaultValue\n  }\n  return defaultValue\n}\n\nclass Client extends EventEmitter {\n  constructor(config) {\n    super()\n\n    this.connectionParameters = new ConnectionParameters(config)\n    this.user = this.connectionParameters.user\n    this.database = this.connectionParameters.database\n    this.port = this.connectionParameters.port\n    this.host = this.connectionParameters.host\n\n    // \"hiding\" the password so it doesn't show up in stack traces\n    // or if the client is console.logged\n    Object.defineProperty(this, 'password', {\n      configurable: true,\n      enumerable: false,\n      writable: true,\n      value: this.connectionParameters.password,\n    })\n\n    this.replication = this.connectionParameters.replication\n\n    const c = config || {}\n\n    if (c.Promise) {\n      byoPromiseDeprecationNotice()\n    }\n    this._Promise = c.Promise || global.Promise\n    this._types = new TypeOverrides(c.types)\n    this._ending = false\n    this._ended = false\n    this._connecting = false\n    this._connected = false\n    this._connectionError = false\n    this._queryable = true\n    this._activeQuery = null\n    this._txStatus = null\n\n    this.enableChannelBinding = Boolean(c.enableChannelBinding) // set true to use SCRAM-SHA-256-PLUS when offered\n    this.scramMaxIterations = coerceNumberOrDefault(c.scramMaxIterations, sasl.DEFAULT_MAX_SCRAM_ITERATIONS)\n    this.connection =\n      c.connection ||\n      new Connection({\n        stream: c.stream,\n        ssl: this.connectionParameters.ssl,\n        sslNegotiation: this.connectionParameters.sslnegotiation,\n        keepAlive: c.keepAlive || false,\n        keepAliveInitialDelayMillis: c.keepAliveInitialDelayMillis || 0,\n        encoding: this.connectionParameters.client_encoding || 'utf8',\n      })\n    this._queryQueue = []\n    this._sentQueryQueue = []\n    this.pipeline = Boolean(c.pipeline)\n    this.binary = c.binary || defaults.binary\n    this.processID = null\n    this.secretKey = null\n    this.ssl = this.connectionParameters.ssl || false\n    this.sslNegotiation = this.connectionParameters.sslnegotiation || 'postgres'\n    // As with Password, make SSL->Key (the private key) non-enumerable.\n    // It won't show up in stack traces\n    // or if the client is console.logged\n    if (this.ssl && this.ssl.key) {\n      Object.defineProperty(this.ssl, 'key', {\n        enumerable: false,\n      })\n    }\n\n    this._connectionTimeoutMillis = c.connectionTimeoutMillis || 0\n  }\n\n  get activeQuery() {\n    activeQueryDeprecationNotice()\n    return this._activeQuery\n  }\n\n  set activeQuery(val) {\n    activeQueryDeprecationNotice()\n    this._activeQuery = val\n  }\n\n  _getActiveQuery() {\n    return this._activeQuery\n  }\n\n  _errorAllQueries(err) {\n    const enqueueError = (query) => {\n      process.nextTick(() => {\n        query.handleError(err, this.connection)\n      })\n    }\n\n    const activeQuery = this._getActiveQuery()\n    if (activeQuery) {\n      enqueueError(activeQuery)\n      this._activeQuery = null\n    }\n\n    this._sentQueryQueue.forEach(enqueueError)\n    this._sentQueryQueue.length = 0\n\n    this._queryQueue.forEach(enqueueError)\n    this._queryQueue.length = 0\n  }\n\n  _connect(callback) {\n    const self = this\n    const con = this.connection\n    this._connectionCallback = callback\n\n    if (this._connecting || this._connected) {\n      const err = new Error('Client has already been connected. You cannot reuse a client.')\n      process.nextTick(() => {\n        callback(err)\n      })\n      return\n    }\n    this._connecting = true\n\n    if (this._connectionTimeoutMillis > 0) {\n      this.connectionTimeoutHandle = setTimeout(() => {\n        con._ending = true\n        con.stream.destroy(new Error('timeout expired'))\n      }, this._connectionTimeoutMillis)\n\n      if (this.connectionTimeoutHandle.unref) {\n        this.connectionTimeoutHandle.unref()\n      }\n    }\n\n    if (this.host && this.host.indexOf('/') === 0) {\n      con.connect(this.host + '/.s.PGSQL.' + this.port)\n    } else {\n      con.connect(this.port, this.host)\n    }\n\n    // once connection is established send startup message\n    con.on('connect', function () {\n      if (self.ssl) {\n        // With direct SSL negotiation the connection upgrades to TLS without an\n        // SSLRequest packet, so the startup message is sent after 'sslconnect'.\n        if (self.sslNegotiation !== 'direct') {\n          con.requestSsl()\n        }\n      } else {\n        con.startup(self.getStartupConf())\n      }\n    })\n\n    con.on('sslconnect', function () {\n      con.startup(self.getStartupConf())\n    })\n\n    this._attachListeners(con)\n\n    con.once('end', () => {\n      const error = this._ending ? new Error('Connection terminated') : new Error('Connection terminated unexpectedly')\n\n      clearTimeout(this.connectionTimeoutHandle)\n      this._errorAllQueries(error)\n      this._ended = true\n\n      if (!this._ending) {\n        // if the connection is ended without us calling .end()\n        // on this client then we have an unexpected disconnection\n        // treat this as an error unless we've already emitted an error\n        // during connection.\n        if (this._connecting && !this._connectionError) {\n          if (this._connectionCallback) {\n            this._connectionCallback(error)\n          } else {\n            this._handleErrorEvent(error)\n          }\n        } else if (!this._connectionError) {\n          this._handleErrorEvent(error)\n        }\n      }\n\n      process.nextTick(() => {\n        this.emit('end')\n      })\n    })\n  }\n\n  connect(callback) {\n    if (callback) {\n      this._connect(callback)\n      return\n    }\n\n    return new this._Promise((resolve, reject) => {\n      this._connect((error) => {\n        if (error) {\n          reject(error)\n        } else {\n          resolve(this)\n        }\n      })\n    })\n  }\n\n  _attachListeners(con) {\n    // password request handling\n    con.on('authenticationCleartextPassword', this._handleAuthCleartextPassword.bind(this))\n    // password request handling\n    con.on('authenticationMD5Password', this._handleAuthMD5Password.bind(this))\n    // password request handling (SASL)\n    con.on('authenticationSASL', this._handleAuthSASL.bind(this))\n    con.on('authenticationSASLContinue', this._handleAuthSASLContinue.bind(this))\n    con.on('authenticationSASLFinal', this._handleAuthSASLFinal.bind(this))\n    con.on('backendKeyData', this._handleBackendKeyData.bind(this))\n    con.on('error', this._handleErrorEvent.bind(this))\n    con.on('errorMessage', this._handleErrorMessage.bind(this))\n    con.on('readyForQuery', this._handleReadyForQuery.bind(this))\n    con.on('notice', this._handleNotice.bind(this))\n    con.on('rowDescription', this._handleRowDescription.bind(this))\n    con.on('dataRow', this._handleDataRow.bind(this))\n    con.on('portalSuspended', this._handlePortalSuspended.bind(this))\n    con.on('emptyQuery', this._handleEmptyQuery.bind(this))\n    con.on('commandComplete', this._handleCommandComplete.bind(this))\n    con.on('parseComplete', this._handleParseComplete.bind(this))\n    con.on('copyInResponse', this._handleCopyInResponse.bind(this))\n    con.on('copyData', this._handleCopyData.bind(this))\n    con.on('notification', this._handleNotification.bind(this))\n  }\n\n  _getPassword(cb) {\n    const con = this.connection\n    if (typeof this.password === 'function') {\n      this._Promise\n        .resolve()\n        .then(() => this.password(this.connectionParameters))\n        .then((pass) => {\n          if (pass !== undefined) {\n            if (typeof pass !== 'string') {\n              con.emit('error', new TypeError('Password must be a string'))\n              return\n            }\n            this.connectionParameters.password = this.password = pass\n          } else {\n            this.connectionParameters.password = this.password = null\n          }\n          cb()\n        })\n        .catch((err) => {\n          con.emit('error', err)\n        })\n    } else if (this.password !== null) {\n      cb()\n    } else {\n      try {\n        const pgPass = require('pgpass')\n        pgPass(this.connectionParameters, (pass) => {\n          if (undefined !== pass) {\n            pgPassDeprecationNotice()\n            this.connectionParameters.password = this.password = pass\n          }\n          cb()\n        })\n      } catch (e) {\n        this.emit('error', e)\n      }\n    }\n  }\n\n  _handleAuthCleartextPassword(msg) {\n    this._getPassword(() => {\n      this.connection.password(this.password)\n    })\n  }\n\n  _handleAuthMD5Password(msg) {\n    this._getPassword(async () => {\n      try {\n        const hashedPassword = await crypto.postgresMd5PasswordHash(this.user, this.password, msg.salt)\n        this.connection.password(hashedPassword)\n      } catch (e) {\n        this.emit('error', e)\n      }\n    })\n  }\n\n  _handleAuthSASL(msg) {\n    this._getPassword(() => {\n      try {\n        this.saslSession = sasl.startSession(\n          msg.mechanisms,\n          this.enableChannelBinding && this.connection.stream,\n          this.scramMaxIterations\n        )\n        this.connection.sendSASLInitialResponseMessage(this.saslSession.mechanism, this.saslSession.response)\n      } catch (err) {\n        this.connection.emit('error', err)\n      }\n    })\n  }\n\n  async _handleAuthSASLContinue(msg) {\n    try {\n      await sasl.continueSession(\n        this.saslSession,\n        this.password,\n        msg.data,\n        this.enableChannelBinding && this.connection.stream\n      )\n      this.connection.sendSCRAMClientFinalMessage(this.saslSession.response)\n    } catch (err) {\n      this.connection.emit('error', err)\n    }\n  }\n\n  _handleAuthSASLFinal(msg) {\n    try {\n      sasl.finalizeSession(this.saslSession, msg.data)\n      this.saslSession = null\n    } catch (err) {\n      this.connection.emit('error', err)\n    }\n  }\n\n  _handleBackendKeyData(msg) {\n    this.processID = msg.processID\n    this.secretKey = msg.secretKey\n  }\n\n  _handleReadyForQuery(msg) {\n    if (this._connecting) {\n      this._connecting = false\n      this._connected = true\n      clearTimeout(this.connectionTimeoutHandle)\n\n      // process possible callback argument to Client#connect\n      if (this._connectionCallback) {\n        this._connectionCallback(null, this)\n        // remove callback for proper error handling\n        // after the connect event\n        this._connectionCallback = null\n      }\n      this.emit('connect')\n    }\n    const activeQuery = this._getActiveQuery()\n    this._activeQuery = null\n    this._txStatus = msg?.status ?? null\n    this.readyForQuery = true\n    if (activeQuery) {\n      activeQuery.handleReadyForQuery(this.connection)\n    }\n    this._pulseQueryQueue()\n  }\n\n  // if we receive an error event or error message\n  // during the connection process we handle it here\n  _handleErrorWhileConnecting(err) {\n    if (this._connectionError) {\n      // TODO(bmc): this is swallowing errors - we shouldn't do this\n      return\n    }\n    this._connectionError = true\n    clearTimeout(this.connectionTimeoutHandle)\n    if (this._connectionCallback) {\n      return this._connectionCallback(err)\n    }\n    this.emit('error', err)\n  }\n\n  // if we're connected and we receive an error event from the connection\n  // this means the socket is dead - do a hard abort of all queries and emit\n  // the socket error on the client as well\n  _handleErrorEvent(err) {\n    if (this._connecting) {\n      return this._handleErrorWhileConnecting(err)\n    }\n    this._queryable = false\n    this._errorAllQueries(err)\n    this.emit('error', err)\n  }\n\n  // handle error messages from the postgres backend\n  _handleErrorMessage(msg) {\n    if (this._connecting) {\n      return this._handleErrorWhileConnecting(msg)\n    }\n    const activeQuery = this._getActiveQuery()\n\n    if (!activeQuery) {\n      this._handleErrorEvent(msg)\n      return\n    }\n\n    this._activeQuery = null\n    if (activeQuery.name) {\n      delete this.connection.submittedNamedStatements[activeQuery.name]\n    }\n    activeQuery.handleError(msg, this.connection)\n  }\n\n  _handleRowDescription(msg) {\n    const activeQuery = this._getActiveQuery()\n    if (activeQuery == null) {\n      const error = new Error('Received unexpected rowDescription message from backend.')\n      this._handleErrorEvent(error)\n      return\n    }\n    // delegate rowDescription to active query\n    activeQuery.handleRowDescription(msg)\n  }\n\n  _handleDataRow(msg) {\n    const activeQuery = this._getActiveQuery()\n    if (activeQuery == null) {\n      const error = new Error('Received unexpected dataRow message from backend.')\n      this._handleErrorEvent(error)\n      return\n    }\n    // delegate dataRow to active query\n    activeQuery.handleDataRow(msg)\n  }\n\n  _handlePortalSuspended(msg) {\n    const activeQuery = this._getActiveQuery()\n    if (activeQuery == null) {\n      const error = new Error('Received unexpected portalSuspended message from backend.')\n      this._handleErrorEvent(error)\n      return\n    }\n    // delegate portalSuspended to active query\n    activeQuery.handlePortalSuspended(this.connection)\n  }\n\n  _handleEmptyQuery(msg) {\n    const activeQuery = this._getActiveQuery()\n    if (activeQuery == null) {\n      const error = new Error('Received unexpected emptyQuery message from backend.')\n      this._handleErrorEvent(error)\n      return\n    }\n    // delegate emptyQuery to active query\n    activeQuery.handleEmptyQuery(this.connection)\n  }\n\n  _handleCommandComplete(msg) {\n    const activeQuery = this._getActiveQuery()\n    if (activeQuery == null) {\n      const error = new Error('Received unexpected commandComplete message from backend.')\n      this._handleErrorEvent(error)\n      return\n    }\n    // delegate commandComplete to active query\n    activeQuery.handleCommandComplete(msg, this.connection)\n  }\n\n  _handleParseComplete() {\n    const activeQuery = this._getActiveQuery()\n    if (activeQuery == null) {\n      const error = new Error('Received unexpected parseComplete message from backend.')\n      this._handleErrorEvent(error)\n      return\n    }\n    // if a prepared statement has a name and properly parses\n    // we track that its already been executed so we don't parse\n    // it again on the same client\n    if (activeQuery.name) {\n      this.connection.parsedStatements[activeQuery.name] = activeQuery.text\n      delete this.connection.submittedNamedStatements[activeQuery.name]\n    }\n  }\n\n  _handleCopyInResponse(msg) {\n    const activeQuery = this._getActiveQuery()\n    if (activeQuery == null) {\n      const error = new Error('Received unexpected copyInResponse message from backend.')\n      this._handleErrorEvent(error)\n      return\n    }\n    activeQuery.handleCopyInResponse(this.connection)\n  }\n\n  _handleCopyData(msg) {\n    const activeQuery = this._getActiveQuery()\n    if (activeQuery == null) {\n      const error = new Error('Received unexpected copyData message from backend.')\n      this._handleErrorEvent(error)\n      return\n    }\n    activeQuery.handleCopyData(msg, this.connection)\n  }\n\n  _handleNotification(msg) {\n    this.emit('notification', msg)\n  }\n\n  _handleNotice(msg) {\n    this.emit('notice', msg)\n  }\n\n  getStartupConf() {\n    const params = this.connectionParameters\n\n    const data = {\n      user: params.user,\n      database: params.database,\n    }\n\n    const appName = params.application_name || params.fallback_application_name\n    if (appName) {\n      data.application_name = appName\n    }\n    if (params.replication) {\n      data.replication = '' + params.replication\n    }\n    if (params.statement_timeout) {\n      data.statement_timeout = String(parseInt(params.statement_timeout, 10))\n    }\n    if (params.lock_timeout) {\n      data.lock_timeout = String(parseInt(params.lock_timeout, 10))\n    }\n    if (params.idle_in_transaction_session_timeout) {\n      data.idle_in_transaction_session_timeout = String(parseInt(params.idle_in_transaction_session_timeout, 10))\n    }\n    if (params.options) {\n      data.options = params.options\n    }\n\n    return data\n  }\n\n  cancel(client, query) {\n    if (client.activeQuery === query) {\n      const con = this.connection\n\n      if (this.host && this.host.indexOf('/') === 0) {\n        con.connect(this.host + '/.s.PGSQL.' + this.port)\n      } else {\n        con.connect(this.port, this.host)\n      }\n\n      // once connection is established send cancel message\n      con.on('connect', function () {\n        con.cancel(client.processID, client.secretKey)\n      })\n    } else if (client._queryQueue.indexOf(query) !== -1) {\n      client._queryQueue.splice(client._queryQueue.indexOf(query), 1)\n    } else if (client._sentQueryQueue.indexOf(query) !== -1) {\n      // Query already sent on wire — can't remove it without corrupting the\n      // pipeline. No-op the callback so the result is silently discarded.\n      query.callback = () => {}\n    }\n  }\n\n  setTypeParser(oid, format, parseFn) {\n    return this._types.setTypeParser(oid, format, parseFn)\n  }\n\n  getTypeParser(oid, format) {\n    return this._types.getTypeParser(oid, format)\n  }\n\n  // escapeIdentifier and escapeLiteral moved to utility functions & exported\n  // on PG\n  // re-exported here for backwards compatibility\n  escapeIdentifier(str) {\n    return utils.escapeIdentifier(str)\n  }\n\n  escapeLiteral(str) {\n    return utils.escapeLiteral(str)\n  }\n\n  _pulseQueryQueue() {\n    if (this.pipeline) {\n      this._pulsePipelinedQueryQueue()\n      return\n    }\n    if (this.readyForQuery === true) {\n      this._activeQuery = this._queryQueue.shift()\n      const activeQuery = this._getActiveQuery()\n      if (activeQuery) {\n        this.readyForQuery = false\n        this.hasExecuted = true\n\n        const queryError = activeQuery.submit(this.connection)\n        if (queryError) {\n          process.nextTick(() => {\n            activeQuery.handleError(queryError, this.connection)\n            this.readyForQuery = true\n            this._pulseQueryQueue()\n          })\n        }\n      } else if (this.hasExecuted) {\n        this._activeQuery = null\n        this.emit('drain')\n      }\n    }\n  }\n\n  _pulsePipelinedQueryQueue() {\n    if (!this._connected || !this._queryable) {\n      return\n    }\n    while (this._queryQueue.length > 0) {\n      const query = this._queryQueue.shift()\n      this.hasExecuted = true\n      const queryError = query.submit(this.connection)\n      if (queryError) {\n        process.nextTick(() => {\n          query.handleError(queryError, this.connection)\n        })\n        continue\n      }\n      this._sentQueryQueue.push(query)\n    }\n    if (this.readyForQuery && !this._activeQuery && this._sentQueryQueue.length > 0) {\n      this._activeQuery = this._sentQueryQueue.shift()\n      this.readyForQuery = false\n    }\n    if (!this._activeQuery && this._sentQueryQueue.length === 0 && this._queryQueue.length === 0 && this.hasExecuted) {\n      this.emit('drain')\n    }\n  }\n\n  query(config, values, callback) {\n    // can take in strings, config object or query object\n    let query\n    let result\n\n    if (config == null) {\n      throw new TypeError('Client was passed a null or undefined query')\n    }\n\n    if (typeof config.submit === 'function') {\n      result = query = config\n      if (!query.callback) {\n        if (typeof values === 'function') {\n          query.callback = values\n        } else if (callback) {\n          query.callback = callback\n        }\n      }\n    } else {\n      query = new Query(config, values, callback)\n      if (!query.callback) {\n        result = new this._Promise((resolve, reject) => {\n          query.callback = (err, res) => (err ? reject(err) : resolve(res))\n        }).catch((err) => {\n          // replace the stack trace that leads to `TCP.onStreamRead` with one that leads back to the\n          // application that created the query\n          Error.captureStackTrace(err)\n          throw err\n        })\n      } else if (typeof query.callback !== 'function') {\n        throw new TypeError('callback is not a function')\n      }\n    }\n\n    const readTimeout = config.query_timeout || this.connectionParameters.query_timeout\n    if (readTimeout) {\n      const queryCallback = query.callback || (() => {})\n\n      const readTimeoutTimer = setTimeout(() => {\n        const error = new Error('Query read timeout')\n\n        process.nextTick(() => {\n          query.handleError(error, this.connection)\n        })\n\n        queryCallback(error)\n\n        // we already returned an error,\n        // just do nothing if query completes\n        query.callback = () => {}\n\n        // Remove from queue (only safe if not yet sent)\n        const index = this._queryQueue.indexOf(query)\n        if (index > -1) {\n          this._queryQueue.splice(index, 1)\n        } else if (this.pipeline) {\n          // Query already sent — the pipeline is blocked until it completes.\n          // Destroy the connection to unblock all remaining pipelined queries.\n          this.connection.stream.destroy()\n          return\n        }\n\n        this._pulseQueryQueue()\n      }, readTimeout)\n\n      query.callback = (err, res) => {\n        clearTimeout(readTimeoutTimer)\n        queryCallback(err, res)\n      }\n    }\n\n    if (this.binary && !query.binary) {\n      query.binary = true\n    }\n\n    if (query._result && !query._result._types) {\n      query._result._types = this._types\n    }\n\n    if (!this._queryable) {\n      process.nextTick(() => {\n        query.handleError(new Error('Client has encountered a connection error and is not queryable'), this.connection)\n      })\n      return result\n    }\n\n    if (this._ending) {\n      process.nextTick(() => {\n        query.handleError(new Error('Client was closed and is not queryable'), this.connection)\n      })\n      return result\n    }\n\n    if (this._queryQueue.length > 0 && !this.pipeline) {\n      queryQueueLengthDeprecationNotice()\n    }\n    this._queryQueue.push(query)\n    this._pulseQueryQueue()\n    return result\n  }\n\n  ref() {\n    this.connection.ref()\n  }\n\n  unref() {\n    this.connection.unref()\n  }\n\n  getTransactionStatus() {\n    return this._txStatus\n  }\n\n  end(cb) {\n    this._ending = true\n\n    // if we have never connected, then end is a noop, callback immediately\n    if (!this.connection._connecting || this._ended) {\n      if (cb) {\n        cb()\n        return\n      } else {\n        return this._Promise.resolve()\n      }\n    }\n\n    if (!this._queryable) {\n      // socket is dead — force close\n      this.connection.stream.destroy()\n    } else if (\n      this.pipeline &&\n      (this._getActiveQuery() || this._sentQueryQueue.length > 0 || this._queryQueue.length > 0)\n    ) {\n      // pipelined queries are already on the wire (or queued to send) and will\n      // complete normally; wait for drain then do a graceful goodbye\n      this.once('drain', () => this.connection.end())\n    } else if (this._getActiveQuery()) {\n      // non-pipeline: a hung query could block end forever — force disconnect\n      this.connection.stream.destroy()\n    } else {\n      this.connection.end()\n    }\n\n    if (cb) {\n      this.connection.once('end', cb)\n    } else {\n      return new this._Promise((resolve) => {\n        this.connection.once('end', resolve)\n      })\n    }\n  }\n  get queryQueue() {\n    queryQueueDeprecationNotice()\n    return this._queryQueue\n  }\n}\n\n// expose a Query constructor\nClient.Query = Query\n\nmodule.exports = Client\n","'use strict'\nconst EventEmitter = require('events').EventEmitter\n\nconst NOOP = function () {}\n\nconst removeWhere = (list, predicate) => {\n  const i = list.findIndex(predicate)\n\n  return i === -1 ? undefined : list.splice(i, 1)[0]\n}\n\nclass IdleItem {\n  constructor(client, idleListener, timeoutId) {\n    this.client = client\n    this.idleListener = idleListener\n    this.timeoutId = timeoutId\n  }\n}\n\nclass PendingItem {\n  constructor(callback) {\n    this.callback = callback\n  }\n}\n\nfunction throwOnDoubleRelease() {\n  throw new Error('Release called on client which has already been released to the pool.')\n}\n\nfunction promisify(Promise, callback) {\n  if (callback) {\n    return { callback: callback, result: undefined }\n  }\n  let rej\n  let res\n  const cb = function (err, client) {\n    err ? rej(err) : res(client)\n  }\n  const result = new Promise(function (resolve, reject) {\n    res = resolve\n    rej = reject\n  }).catch((err) => {\n    // replace the stack trace that leads to `TCP.onStreamRead` with one that leads back to the\n    // application that created the query\n    Error.captureStackTrace(err)\n    throw err\n  })\n  return { callback: cb, result: result }\n}\n\nfunction makeIdleListener(pool, client) {\n  return function idleListener(err) {\n    err.client = client\n\n    client.removeListener('error', idleListener)\n    client.on('error', () => {\n      pool.log('additional client error after disconnection due to error', err)\n    })\n    pool._remove(client)\n    // TODO - document that once the pool emits an error\n    // the client has already been closed & purged and is unusable\n    pool.emit('error', err, client)\n  }\n}\n\nclass Pool extends EventEmitter {\n  constructor(options, Client) {\n    super()\n    this.options = Object.assign({}, options)\n\n    if (options != null && 'password' in options) {\n      // \"hiding\" the password so it doesn't show up in stack traces\n      // or if the client is console.logged\n      Object.defineProperty(this.options, 'password', {\n        configurable: true,\n        enumerable: false,\n        writable: true,\n        value: options.password,\n      })\n    }\n    if (options != null && options.ssl && options.ssl.key) {\n      // \"hiding\" the ssl->key so it doesn't show up in stack traces\n      // or if the client is console.logged\n      Object.defineProperty(this.options.ssl, 'key', {\n        enumerable: false,\n      })\n    }\n\n    this.options.max = this.options.max || this.options.poolSize || 10\n    this.options.min = this.options.min || 0\n    this.options.maxUses = this.options.maxUses || Infinity\n    this.options.allowExitOnIdle = this.options.allowExitOnIdle || false\n    this.options.maxLifetimeSeconds = this.options.maxLifetimeSeconds || 0\n    this.log = this.options.log || function () {}\n    this.Client = this.options.Client || Client || require('pg').Client\n    this.Promise = this.options.Promise || global.Promise\n\n    if (typeof this.options.idleTimeoutMillis === 'undefined') {\n      this.options.idleTimeoutMillis = 10000\n    }\n\n    this._clients = []\n    this._idle = []\n    this._expired = new WeakSet()\n    this._pendingQueue = []\n    this._endCallback = undefined\n    this.ending = false\n    this.ended = false\n  }\n\n  _promiseTry(f) {\n    const Promise = this.Promise\n    if (typeof Promise.try === 'function') {\n      return Promise.try(f)\n    }\n    return new Promise((resolve) => resolve(f()))\n  }\n\n  _isFull() {\n    return this._clients.length >= this.options.max\n  }\n\n  _isAboveMin() {\n    return this._clients.length > this.options.min\n  }\n\n  _pulseQueue() {\n    this.log('pulse queue')\n    if (this.ended) {\n      this.log('pulse queue ended')\n      return\n    }\n    if (this.ending) {\n      this.log('pulse queue on ending')\n      if (this._idle.length) {\n        this._idle.slice().map((item) => {\n          this._remove(item.client)\n        })\n      }\n      if (!this._clients.length) {\n        this.ended = true\n        this._endCallback()\n      }\n      return\n    }\n\n    // if we don't have any waiting, do nothing\n    if (!this._pendingQueue.length) {\n      this.log('no queued requests')\n      return\n    }\n    // if we don't have any idle clients and we have no more room do nothing\n    if (!this._idle.length && this._isFull()) {\n      return\n    }\n    const pendingItem = this._pendingQueue.shift()\n    if (this._idle.length) {\n      const idleItem = this._idle.pop()\n      clearTimeout(idleItem.timeoutId)\n      const client = idleItem.client\n      client.ref && client.ref()\n      const idleListener = idleItem.idleListener\n\n      return this._acquireClient(client, pendingItem, idleListener, false)\n    }\n    if (!this._isFull()) {\n      return this.newClient(pendingItem)\n    }\n    throw new Error('unexpected condition')\n  }\n\n  _remove(client, callback) {\n    const removed = removeWhere(this._idle, (item) => item.client === client)\n\n    if (removed !== undefined) {\n      clearTimeout(removed.timeoutId)\n    }\n\n    this._clients = this._clients.filter((c) => c !== client)\n    const context = this\n    client.end(() => {\n      context.emit('remove', client)\n\n      if (typeof callback === 'function') {\n        callback()\n      }\n    })\n  }\n\n  connect(cb) {\n    if (this.ending) {\n      const err = new Error('Cannot use a pool after calling end on the pool')\n      return cb ? cb(err) : this.Promise.reject(err)\n    }\n\n    const response = promisify(this.Promise, cb)\n    const result = response.result\n\n    // if we don't have to connect a new client, don't do so\n    if (this._isFull() || this._idle.length) {\n      // if we have idle clients schedule a pulse immediately\n      if (this._idle.length) {\n        process.nextTick(() => this._pulseQueue())\n      }\n\n      if (!this.options.connectionTimeoutMillis) {\n        this._pendingQueue.push(new PendingItem(response.callback))\n        return result\n      }\n\n      const queueCallback = (err, res, done) => {\n        clearTimeout(tid)\n        response.callback(err, res, done)\n      }\n\n      const pendingItem = new PendingItem(queueCallback)\n\n      // set connection timeout on checking out an existing client\n      const tid = setTimeout(() => {\n        // remove the callback from pending waiters because\n        // we're going to call it with a timeout error\n        removeWhere(this._pendingQueue, (i) => i.callback === queueCallback)\n        pendingItem.timedOut = true\n        response.callback(new Error('timeout exceeded when trying to connect'))\n      }, this.options.connectionTimeoutMillis)\n\n      if (tid.unref) {\n        tid.unref()\n      }\n\n      this._pendingQueue.push(pendingItem)\n      return result\n    }\n\n    this.newClient(new PendingItem(response.callback))\n\n    return result\n  }\n\n  newClient(pendingItem) {\n    const client = new this.Client(this.options)\n    this._clients.push(client)\n    const idleListener = makeIdleListener(this, client)\n\n    this.log('checking client timeout')\n\n    // connection timeout logic\n    let tid\n    let timeoutHit = false\n    if (this.options.connectionTimeoutMillis) {\n      tid = setTimeout(() => {\n        if (client.connection) {\n          this.log('ending client due to timeout')\n          timeoutHit = true\n          client.connection.stream.destroy()\n        } else if (!client.isConnected()) {\n          this.log('ending client due to timeout')\n          timeoutHit = true\n          // force kill the node driver, and let libpq do its teardown\n          client.end()\n        }\n      }, this.options.connectionTimeoutMillis)\n    }\n\n    this.log('connecting new client')\n    client.connect((err) => {\n      if (tid) {\n        clearTimeout(tid)\n      }\n      client.on('error', idleListener)\n      if (err) {\n        this.log('client failed to connect', err)\n        // remove the dead client from our list of clients\n        this._clients = this._clients.filter((c) => c !== client)\n        if (timeoutHit) {\n          err = new Error('Connection terminated due to connection timeout', { cause: err })\n        }\n\n        // this client won’t be released, so move on immediately\n        this._pulseQueue()\n\n        if (!pendingItem.timedOut) {\n          pendingItem.callback(err, undefined, NOOP)\n        }\n      } else {\n        this.log('new client connected')\n\n        if (this.options.onConnect) {\n          this._promiseTry(() => this.options.onConnect(client)).then(\n            () => {\n              this._afterConnect(client, pendingItem, idleListener)\n            },\n            (hookErr) => {\n              this._clients = this._clients.filter((c) => c !== client)\n              client.end(() => {\n                this._pulseQueue()\n                if (!pendingItem.timedOut) {\n                  pendingItem.callback(hookErr, undefined, NOOP)\n                }\n              })\n            }\n          )\n          return\n        }\n\n        return this._afterConnect(client, pendingItem, idleListener)\n      }\n    })\n  }\n\n  _afterConnect(client, pendingItem, idleListener) {\n    if (this.options.maxLifetimeSeconds !== 0) {\n      const maxLifetimeTimeout = setTimeout(() => {\n        this.log('ending client due to expired lifetime')\n        this._expired.add(client)\n        const idleIndex = this._idle.findIndex((idleItem) => idleItem.client === client)\n        if (idleIndex !== -1) {\n          this._acquireClient(\n            client,\n            new PendingItem((err, client, clientRelease) => clientRelease()),\n            idleListener,\n            false\n          )\n        }\n      }, this.options.maxLifetimeSeconds * 1000)\n\n      maxLifetimeTimeout.unref()\n      client.once('end', () => clearTimeout(maxLifetimeTimeout))\n    }\n\n    return this._acquireClient(client, pendingItem, idleListener, true)\n  }\n\n  // acquire a client for a pending work item\n  _acquireClient(client, pendingItem, idleListener, isNew) {\n    if (isNew) {\n      this.emit('connect', client)\n    }\n\n    this.emit('acquire', client)\n\n    client.release = this._releaseOnce(client, idleListener)\n\n    client.removeListener('error', idleListener)\n\n    if (!pendingItem.timedOut) {\n      if (isNew && this.options.verify) {\n        this.options.verify(client, (err) => {\n          if (err) {\n            client.release(err)\n            return pendingItem.callback(err, undefined, NOOP)\n          }\n\n          pendingItem.callback(undefined, client, client.release)\n        })\n      } else {\n        pendingItem.callback(undefined, client, client.release)\n      }\n    } else {\n      if (isNew && this.options.verify) {\n        this.options.verify(client, client.release)\n      } else {\n        client.release()\n      }\n    }\n  }\n\n  // returns a function that wraps _release and throws if called more than once\n  _releaseOnce(client, idleListener) {\n    let released = false\n\n    return (err) => {\n      if (released) {\n        throwOnDoubleRelease()\n      }\n\n      released = true\n      this._release(client, idleListener, err)\n    }\n  }\n\n  // release a client back to the poll, include an error\n  // to remove it from the pool\n  _release(client, idleListener, err) {\n    client.on('error', idleListener)\n\n    client._poolUseCount = (client._poolUseCount || 0) + 1\n\n    this.emit('release', err, client)\n\n    // TODO(bmc): expose a proper, public interface _queryable and _ending\n    if (err || this.ending || !client._queryable || client._ending || client._poolUseCount >= this.options.maxUses) {\n      if (client._poolUseCount >= this.options.maxUses) {\n        this.log('remove expended client')\n      }\n\n      return this._remove(client, this._pulseQueue.bind(this))\n    }\n\n    const isExpired = this._expired.has(client)\n    if (isExpired) {\n      this.log('remove expired client')\n      this._expired.delete(client)\n      return this._remove(client, this._pulseQueue.bind(this))\n    }\n\n    // idle timeout\n    let tid\n    if (this.options.idleTimeoutMillis && this._isAboveMin()) {\n      tid = setTimeout(() => {\n        if (this._isAboveMin()) {\n          this.log('remove idle client')\n          this._remove(client, this._pulseQueue.bind(this))\n        }\n      }, this.options.idleTimeoutMillis)\n\n      if (this.options.allowExitOnIdle) {\n        // allow Node to exit if this is all that's left\n        tid.unref()\n      }\n    }\n\n    if (this.options.allowExitOnIdle) {\n      client.unref()\n    }\n\n    this._idle.push(new IdleItem(client, idleListener, tid))\n    this._pulseQueue()\n  }\n\n  query(text, values, cb) {\n    // guard clause against passing a function as the first parameter\n    if (typeof text === 'function') {\n      const response = promisify(this.Promise, text)\n      setImmediate(function () {\n        return response.callback(new Error('Passing a function as the first parameter to pool.query is not supported'))\n      })\n      return response.result\n    }\n\n    // allow plain text query without values, but callback\n    if (typeof values === 'function') {\n      cb = values\n      values = undefined\n    }\n    const response = promisify(this.Promise, cb)\n    cb = response.callback\n\n    this.connect((err, client) => {\n      if (err) {\n        return cb(err)\n      }\n\n      let clientReleased = false\n      const onError = (err) => {\n        if (clientReleased) {\n          return\n        }\n        clientReleased = true\n        client.release(err)\n        cb(err)\n      }\n\n      client.once('error', onError)\n      this.log('dispatching query')\n      try {\n        client.query(text, values, (err, res) => {\n          this.log('query dispatched')\n          client.removeListener('error', onError)\n          if (clientReleased) {\n            return\n          }\n          clientReleased = true\n          client.release(err)\n          if (err) {\n            return cb(err)\n          }\n          return cb(undefined, res)\n        })\n      } catch (err) {\n        client.release(err)\n        return cb(err)\n      }\n    })\n    return response.result\n  }\n\n  end(cb) {\n    this.log('ending')\n    if (this.ending) {\n      const err = new Error('Called end on pool more than once')\n      return cb ? cb(err) : this.Promise.reject(err)\n    }\n    this.ending = true\n    const promised = promisify(this.Promise, cb)\n    this._endCallback = promised.callback\n    this._pulseQueue()\n    return promised.result\n  }\n\n  get waitingCount() {\n    return this._pendingQueue.length\n  }\n\n  get idleCount() {\n    return this._idle.length\n  }\n\n  get expiredCount() {\n    return this._clients.reduce((acc, client) => acc + (this._expired.has(client) ? 1 : 0), 0)\n  }\n\n  get totalCount() {\n    return this._clients.length\n  }\n}\nmodule.exports = Pool\n","'use strict'\n\nconst EventEmitter = require('events').EventEmitter\nconst util = require('util')\nconst utils = require('../utils')\n\nconst NativeQuery = (module.exports = function (config, values, callback) {\n  EventEmitter.call(this)\n  config = utils.normalizeQueryConfig(config, values, callback)\n  this.text = config.text\n  this.values = config.values\n  this.name = config.name\n  this.queryMode = config.queryMode\n  this.callback = config.callback\n  this.state = 'new'\n  this._arrayMode = config.rowMode === 'array'\n\n  // if the 'row' event is listened for\n  // then emit them as they come in\n  // without setting singleRowMode to true\n  // this has almost no meaning because libpq\n  // reads all rows into memory before returning any\n  this._emitRowEvents = false\n  this.on(\n    'newListener',\n    function (event) {\n      if (event === 'row') this._emitRowEvents = true\n    }.bind(this)\n  )\n})\n\nutil.inherits(NativeQuery, EventEmitter)\n\nconst errorFieldMap = {\n  sqlState: 'code',\n  statementPosition: 'position',\n  messagePrimary: 'message',\n  context: 'where',\n  schemaName: 'schema',\n  tableName: 'table',\n  columnName: 'column',\n  dataTypeName: 'dataType',\n  constraintName: 'constraint',\n  sourceFile: 'file',\n  sourceLine: 'line',\n  sourceFunction: 'routine',\n}\n\nNativeQuery.prototype.handleError = function (err) {\n  // copy pq error fields into the error object\n  const fields = this.native && this.native.pq.resultErrorFields()\n  if (fields) {\n    for (const key in fields) {\n      const normalizedFieldName = errorFieldMap[key] || key\n      err[normalizedFieldName] = fields[key]\n    }\n  }\n  if (this.callback) {\n    this.callback(err)\n  } else {\n    this.emit('error', err)\n  }\n  this.state = 'error'\n}\n\nNativeQuery.prototype.then = function (onSuccess, onFailure) {\n  return this._getPromise().then(onSuccess, onFailure)\n}\n\nNativeQuery.prototype.catch = function (callback) {\n  return this._getPromise().catch(callback)\n}\n\nNativeQuery.prototype._getPromise = function () {\n  if (this._promise) return this._promise\n  this._promise = new Promise(\n    function (resolve, reject) {\n      this._once('end', resolve)\n      this._once('error', reject)\n    }.bind(this)\n  )\n  return this._promise\n}\n\nNativeQuery.prototype.submit = function (client) {\n  this.state = 'running'\n  const self = this\n  this.native = client.native\n  client.native.arrayMode = this._arrayMode\n\n  let after = function (err, rows, results) {\n    client.native.arrayMode = false\n    setImmediate(function () {\n      self.emit('_done')\n    })\n\n    // handle possible query error\n    if (err) {\n      return self.handleError(err)\n    }\n\n    // emit row events for each row in the result\n    if (self._emitRowEvents) {\n      if (results.length > 1) {\n        rows.forEach((rowOfRows, i) => {\n          rowOfRows.forEach((row) => {\n            self.emit('row', row, results[i])\n          })\n        })\n      } else {\n        rows.forEach(function (row) {\n          self.emit('row', row, results)\n        })\n      }\n    }\n\n    // handle successful result\n    self.state = 'end'\n    self.emit('end', results)\n    if (self.callback) {\n      self.callback(null, results)\n    }\n  }\n\n  if (process.domain) {\n    after = process.domain.bind(after)\n  }\n\n  // named query\n  if (this.name) {\n    if (this.name.length > 63) {\n      console.error('Warning! Postgres only supports 63 characters for query names.')\n      console.error('You supplied %s (%s)', this.name, this.name.length)\n      console.error('This can cause conflicts and silent errors executing queries')\n    }\n    const values = (this.values || []).map(utils.prepareValue)\n\n    // check if the client has already executed this named query\n    // if so...just execute it again - skip the planning phase\n    if (client.namedQueries[this.name]) {\n      if (this.text && client.namedQueries[this.name] !== this.text) {\n        const err = new Error(`Prepared statements must be unique - '${this.name}' was used for a different statement`)\n        return after(err)\n      }\n      return client.native.execute(this.name, values, after)\n    }\n    // plan the named query the first time, then execute it\n    return client.native.prepare(this.name, this.text, values.length, function (err) {\n      if (err) return after(err)\n      client.namedQueries[self.name] = self.text\n      return self.native.execute(self.name, values, after)\n    })\n  } else if (this.values) {\n    if (!Array.isArray(this.values)) {\n      const err = new Error('Query values must be an array')\n      return after(err)\n    }\n    const vals = this.values.map(utils.prepareValue)\n    client.native.query(this.text, vals, after)\n  } else if (this.queryMode === 'extended') {\n    client.native.query(this.text, [], after)\n  } else {\n    client.native.query(this.text, after)\n  }\n}\n","const nodeUtils = require('util')\n// eslint-disable-next-line\nvar Native\n// eslint-disable-next-line no-useless-catch\ntry {\n  // Wrap this `require()` in a try-catch to avoid upstream bundlers from complaining that this might not be available since it is an optional import\n  Native = require('pg-native')\n} catch (e) {\n  throw e\n}\nconst TypeOverrides = require('../type-overrides')\nconst EventEmitter = require('events').EventEmitter\nconst util = require('util')\nconst ConnectionParameters = require('../connection-parameters')\n\nconst NativeQuery = require('./query')\n\nconst queryQueueLengthDeprecationNotice = nodeUtils.deprecate(\n  () => {},\n  'Calling client.query() when the client is already executing a query is deprecated and will be removed in pg@9.0. Use async/await or an external async flow control mechanism instead.'\n)\n\nconst Client = (module.exports = function (config) {\n  EventEmitter.call(this)\n  config = config || {}\n\n  this._Promise = config.Promise || global.Promise\n  this._types = new TypeOverrides(config.types)\n\n  this.native = new Native({\n    types: this._types,\n  })\n\n  this._queryQueue = []\n  this._ending = false\n  this._connecting = false\n  this._connected = false\n  this._queryable = true\n  this.pipeline = Boolean(config.pipeline)\n  this._pipelineInFlight = false\n\n  // keep these on the object for legacy reasons\n  // for the time being. TODO: deprecate all this jazz\n  const cp = (this.connectionParameters = new ConnectionParameters(config))\n  if (config.nativeConnectionString) cp.nativeConnectionString = config.nativeConnectionString\n  this.user = cp.user\n\n  // \"hiding\" the password so it doesn't show up in stack traces\n  // or if the client is console.logged\n  Object.defineProperty(this, 'password', {\n    configurable: true,\n    enumerable: false,\n    writable: true,\n    value: cp.password,\n  })\n  this.database = cp.database\n  this.host = cp.host\n  this.port = cp.port\n\n  // a hash to hold named queries\n  this.namedQueries = {}\n})\n\nClient.Query = NativeQuery\n\nutil.inherits(Client, EventEmitter)\n\nClient.prototype._errorAllQueries = function (err) {\n  const enqueueError = (query) => {\n    process.nextTick(() => {\n      query.native = this.native\n      query.handleError(err)\n    })\n  }\n\n  if (this._hasActiveQuery()) {\n    enqueueError(this._activeQuery)\n    this._activeQuery = null\n  }\n\n  this._queryQueue.forEach(enqueueError)\n  this._queryQueue.length = 0\n}\n\n// connect to the backend\n// pass an optional callback to be called once connected\n// or with an error if there was a connection error\nClient.prototype._connect = function (cb) {\n  const self = this\n\n  if (this._connecting) {\n    process.nextTick(() => cb(new Error('Client has already been connected. You cannot reuse a client.')))\n    return\n  }\n\n  this._connecting = true\n\n  this.connectionParameters.getLibpqConnectionString(function (err, conString) {\n    if (self.connectionParameters.nativeConnectionString) conString = self.connectionParameters.nativeConnectionString\n    if (err) return cb(err)\n    self.native.connect(conString, function (err) {\n      if (err) {\n        self.native.end()\n        return cb(err)\n      }\n\n      // set internal states to connected\n      self._connected = true\n\n      // handle connection errors from the native layer\n      self.native.on('error', function (err) {\n        self._queryable = false\n        self._errorAllQueries(err)\n        self.emit('error', err)\n      })\n\n      self.native.on('notification', function (msg) {\n        self.emit('notification', {\n          channel: msg.relname,\n          payload: msg.extra,\n        })\n      })\n\n      // signal we are connected now\n      self.emit('connect')\n      self._pulseQueryQueue(true)\n\n      cb(null, this)\n    })\n  })\n}\n\nClient.prototype.connect = function (callback) {\n  if (callback) {\n    this._connect(callback)\n    return\n  }\n\n  return new this._Promise((resolve, reject) => {\n    this._connect((error) => {\n      if (error) {\n        reject(error)\n      } else {\n        resolve(this)\n      }\n    })\n  })\n}\n\n// send a query to the server\n// this method is highly overloaded to take\n// 1) string query, optional array of parameters, optional function callback\n// 2) object query with {\n//    string query\n//    optional array values,\n//    optional function callback instead of as a separate parameter\n//    optional string name to name & cache the query plan\n//    optional string rowMode = 'array' for an array of results\n//  }\nClient.prototype.query = function (config, values, callback) {\n  let query\n  let result\n  let readTimeout\n  let readTimeoutTimer\n  let queryCallback\n\n  if (config === null || config === undefined) {\n    throw new TypeError('Client was passed a null or undefined query')\n  } else if (typeof config.submit === 'function') {\n    readTimeout = config.query_timeout || this.connectionParameters.query_timeout\n    result = query = config\n    // accept query(new Query(...), (err, res) => { }) style\n    if (typeof values === 'function') {\n      config.callback = values\n    }\n  } else {\n    readTimeout = config.query_timeout || this.connectionParameters.query_timeout\n    query = new NativeQuery(config, values, callback)\n    if (!query.callback) {\n      let resolveOut, rejectOut\n      result = new this._Promise((resolve, reject) => {\n        resolveOut = resolve\n        rejectOut = reject\n      }).catch((err) => {\n        Error.captureStackTrace(err)\n        throw err\n      })\n      query.callback = (err, res) => (err ? rejectOut(err) : resolveOut(res))\n    }\n  }\n\n  if (readTimeout) {\n    queryCallback = query.callback || (() => {})\n\n    readTimeoutTimer = setTimeout(() => {\n      const error = new Error('Query read timeout')\n\n      process.nextTick(() => {\n        query.handleError(error, this.connection)\n      })\n\n      queryCallback(error)\n\n      // we already returned an error,\n      // just do nothing if query completes\n      query.callback = () => {}\n\n      // Remove from queue\n      const index = this._queryQueue.indexOf(query)\n      if (index > -1) {\n        this._queryQueue.splice(index, 1)\n      }\n\n      this._pulseQueryQueue()\n    }, readTimeout)\n\n    query.callback = (err, res) => {\n      clearTimeout(readTimeoutTimer)\n      queryCallback(err, res)\n    }\n  }\n\n  if (!this._queryable) {\n    query.native = this.native\n    process.nextTick(() => {\n      query.handleError(new Error('Client has encountered a connection error and is not queryable'))\n    })\n    return result\n  }\n\n  if (this._ending) {\n    query.native = this.native\n    process.nextTick(() => {\n      query.handleError(new Error('Client was closed and is not queryable'))\n    })\n    return result\n  }\n\n  if (this._queryQueue.length > 0 && !this.pipeline) {\n    queryQueueLengthDeprecationNotice()\n  }\n\n  this._queryQueue.push(query)\n  this._pulseQueryQueue()\n  return result\n}\n\n// disconnect from the backend server\nClient.prototype.end = function (cb) {\n  const self = this\n\n  this._ending = true\n\n  if (this._connecting && !this._connected) {\n    this.once('connect', () => {\n      this.end(() => {})\n    })\n  }\n  let result\n  if (!cb) {\n    result = new this._Promise(function (resolve, reject) {\n      cb = (err) => (err ? reject(err) : resolve())\n    })\n  }\n\n  const doEnd = function () {\n    self.native.end(function () {\n      self._connected = false\n\n      self._errorAllQueries(new Error('Connection terminated'))\n\n      process.nextTick(() => {\n        self.emit('end')\n        if (cb) cb()\n      })\n    })\n  }\n\n  // If pipeline has in-flight or queued queries, wait for them to drain before closing\n  if (this.pipeline && (this._pipelineInFlight || this._queryQueue.length > 0)) {\n    this.once('drain', doEnd)\n  } else {\n    doEnd()\n  }\n  return result\n}\n\nClient.prototype._hasActiveQuery = function () {\n  return this._activeQuery && this._activeQuery.state !== 'error' && this._activeQuery.state !== 'end'\n}\n\nClient.prototype._pulseQueryQueue = function (initialConnection) {\n  if (!this._connected) {\n    return\n  }\n  if (this.pipeline && !initialConnection) {\n    return this._pulsePipelinedQueryQueue()\n  }\n  if (this._hasActiveQuery()) {\n    return\n  }\n  const query = this._queryQueue.shift()\n  if (!query) {\n    if (!initialConnection) {\n      this.emit('drain')\n    }\n    return\n  }\n  this._activeQuery = query\n  query.submit(this)\n  const self = this\n  query.once('_done', function () {\n    self._pulseQueryQueue()\n  })\n}\n\nClient.prototype._pulsePipelinedQueryQueue = function () {\n  if (!this._connected || this._pipelineInFlight) {\n    return\n  }\n  if (this._queryQueue.length === 0) {\n    if (this.hasExecuted) {\n      this.emit('drain')\n    }\n    return\n  }\n\n  this._pipelineInFlight = true\n  const self = this\n  const queries = []\n  const nativeQueries = []\n  const utils = require('../utils')\n\n  while (this._queryQueue.length > 0) {\n    const query = this._queryQueue.shift()\n    this.hasExecuted = true\n    nativeQueries.push(query)\n\n    const values = query.values ? query.values.map(utils.prepareValue) : null\n    const pipelineEntry = { text: query.text, name: query.name }\n    if (values) {\n      pipelineEntry.values = values\n    }\n    if (query.name && this.namedQueries[query.name]) {\n      pipelineEntry._alreadyPrepared = true\n    }\n    queries.push(pipelineEntry)\n  }\n\n  this.native.pipeline(queries, function (err, results) {\n    self._pipelineInFlight = false\n\n    if (err) {\n      // Total pipeline failure — error all queries\n      for (let i = 0; i < nativeQueries.length; i++) {\n        const q = nativeQueries[i]\n        q.native = self.native\n        q.handleError(err)\n      }\n      self._pulsePipelinedQueryQueue()\n      return\n    }\n\n    // Deliver results to each query\n    for (let i = 0; i < nativeQueries.length; i++) {\n      const q = nativeQueries[i]\n      const r = results[i]\n      q.native = self.native\n\n      if (r.err) {\n        q.handleError(r.err)\n      } else {\n        // Track named queries on success\n        if (q.name) {\n          self.namedQueries[q.name] = q.text\n        }\n        q.state = 'end'\n        q.emit('end', r.result)\n        if (q.callback) {\n          q.callback(null, r.result)\n        }\n      }\n\n      setImmediate(function () {\n        q.emit('_done')\n      })\n    }\n\n    // Process any queries that arrived while we were reading\n    self._pulsePipelinedQueryQueue()\n  })\n}\n\n// attempt to cancel an in-progress query\nClient.prototype.cancel = function (query) {\n  if (this._activeQuery === query) {\n    this.native.cancel(function () {})\n  } else if (this._queryQueue.indexOf(query) !== -1) {\n    this._queryQueue.splice(this._queryQueue.indexOf(query), 1)\n  }\n}\n\nClient.prototype.ref = function () {}\nClient.prototype.unref = function () {}\n\nClient.prototype.setTypeParser = function (oid, format, parseFn) {\n  return this._types.setTypeParser(oid, format, parseFn)\n}\n\nClient.prototype.getTypeParser = function (oid, format) {\n  return this._types.getTypeParser(oid, format)\n}\n\nClient.prototype.isConnected = function () {\n  return this._connected\n}\n\nClient.prototype.getTransactionStatus = function () {\n  return this.native.getTransactionStatus()\n}\n","'use strict'\nmodule.exports = require('./client')\n","'use strict'\n\nconst Client = require('./client')\nconst defaults = require('./defaults')\nconst Connection = require('./connection')\nconst Result = require('./result')\nconst utils = require('./utils')\nconst Pool = require('pg-pool')\nconst TypeOverrides = require('./type-overrides')\nconst { DatabaseError } = require('pg-protocol')\nconst { escapeIdentifier, escapeLiteral } = require('./utils')\n\nconst poolFactory = (Client) => {\n  return class BoundPool extends Pool {\n    constructor(options) {\n      super(options, Client)\n    }\n  }\n}\n\nconst PG = function (clientConstructor) {\n  this.defaults = defaults\n  this.Client = clientConstructor\n  this.Query = this.Client.Query\n  this.Pool = poolFactory(this.Client)\n  this._pools = []\n  this.Connection = Connection\n  this.types = require('pg-types')\n  this.DatabaseError = DatabaseError\n  this.TypeOverrides = TypeOverrides\n  this.escapeIdentifier = escapeIdentifier\n  this.escapeLiteral = escapeLiteral\n  this.Result = Result\n  this.utils = utils\n}\n\nlet clientConstructor = Client\n\nlet forceNative = false\ntry {\n  forceNative = !!process.env.NODE_PG_FORCE_NATIVE\n} catch {\n  // ignore, e.g., Deno without --allow-env\n}\n\nif (forceNative) {\n  clientConstructor = require('./native')\n}\n\nmodule.exports = new PG(clientConstructor)\n\n// lazy require native module...the native module may not have installed\nObject.defineProperty(module.exports, 'native', {\n  configurable: true,\n  enumerable: false,\n  get() {\n    let native = null\n    try {\n      native = new PG(require('./native'))\n    } catch (err) {\n      if (err.code !== 'MODULE_NOT_FOUND') {\n        throw err\n      }\n    }\n\n    // overwrite module.exports.native so that getter is never called again\n    Object.defineProperty(module.exports, 'native', {\n      value: native,\n    })\n\n    return native\n  },\n})\n","// ESM wrapper for pg\nimport pg from '../lib/index.js'\n\n// Re-export all the properties\nexport const Client = pg.Client\nexport const Pool = pg.Pool\nexport const Connection = pg.Connection\nexport const types = pg.types\nexport const Query = pg.Query\nexport const DatabaseError = pg.DatabaseError\nexport const escapeIdentifier = pg.escapeIdentifier\nexport const escapeLiteral = pg.escapeLiteral\nexport const Result = pg.Result\nexport const TypeOverrides = pg.TypeOverrides\n\n// Also export the defaults\nexport const defaults = pg.defaults\n\n// Re-export the default\nexport default pg\n","import Database from \"better-sqlite3\";\nimport { homedir } from \"os\";\nimport { join } from \"path\";\nimport { instrumentDatabase } from \"./query-timing\";\nimport { resolveMigrationsDir, runSqliteMigrations } from \"./sqlite-migrate\";\n\n/**\n * Where runtime.db lives: explicit override, then the test hook, then a sibling\n * of server.yaml — deliberately NOT under cache/, for the reasons below.\n *\n * Exported because both StreamerServer and the CLI's `devices` command need to\n * agree on it, and a second hand-written copy of this precedence chain would\n * drift the moment one of the three sources changed.\n */\nexport function resolveRuntimeDbPath(override?: string): string {\n  return (\n    override ??\n    process.env.THREADBASE_RUNTIME_DB ??\n    join(process.env.THREADBASE_CONFIG_DIR ?? join(homedir(), \".threadbase\"), \"runtime.db\")\n  );\n}\n\n/**\n * `~/.threadbase/runtime.db` — the authoritative, non-derived half of the\n * streamer's SQLite state.\n *\n * Deliberately a separate file from `cache/cache.db`, and deliberately not\n * under `cache/`. The conversation cache is rebuildable from the provider\n * JSONLs at any time, which is why \"delete the cache and restart\" is reasonable\n * support advice and why the integrity monitor offers a reset-and-rescan\n * action. The managed-session registry is not rebuildable from anything on\n * disk, so it must not sit one plausible instruction away from deletion — nor\n * share a handle whose failure (a better-sqlite3 ABI mismatch, most commonly)\n * would silently disable session persistence along with the cache.\n *\n * Runs its own migrations from `src/db/runtime-migrations/`, tracked in this\n * file's own `schema_migrations` table.\n */\nexport class RuntimeStore {\n  private constructor(private readonly db: Database.Database) {}\n\n  static open(dbPath: string, migrationsDir?: string): RuntimeStore {\n    const db = instrumentDatabase(new Database(dbPath));\n    db.pragma(\"journal_mode = WAL\");\n    runSqliteMigrations(db, migrationsDir ?? resolveMigrationsDir(\"runtime-migrations\"));\n    return new RuntimeStore(db);\n  }\n\n  getDatabase(): Database.Database {\n    return this.db;\n  }\n\n  /**\n   * One-time move of `managed_sessions` rows out of a pre-split `cache.db`.\n   *\n   * Returns the number of rows copied.\n   */\n  importLegacyManagedSessions(source: Database.Database): number {\n    return this.importLegacyTable(source, \"managed_sessions\");\n  }\n\n  /**\n   * One-time move of `devices` rows out of `cache.db`, where the registry used\n   * to live (migration `011_create_devices.sql`).\n   *\n   * Losing this table invalidates every device token ever issued, and cache.db\n   * is the file `tb-streamer cache clear` deletes and the integrity monitor\n   * rebuilds — see `runtime-migrations/003_create_devices.sql`.\n   *\n   * Unlike `managed_sessions`, this one MOVES rather than copies: the source\n   * rows are deleted once the copy is verified. A `devices` row carries a\n   * user-supplied label (\"Ronen's iPhone\"), and leaving a second copy of that\n   * on disk indefinitely — in the one file the user is told to delete when\n   * something goes wrong — is more retained personal data than the rollback\n   * path is worth. Recovering from a rollback is re-scanning a pairing QR.\n   *\n   * The delete is conditional on the copy being complete: `INSERT OR IGNORE`\n   * can silently skip a row, so the destination count must match what was read\n   * before anything is removed. A mismatch keeps the source and reports\n   * `purged: false` rather than throwing — the import itself still succeeded,\n   * and keeping data is the safe direction to fail in.\n   */\n  importLegacyDevices(source: Database.Database): { copied: number; purged: boolean } {\n    const copied = this.importLegacyTable(source, \"devices\");\n    if (copied === 0) return { copied: 0, purged: false };\n\n    const landed = (this.db.prepare(\"SELECT COUNT(*) AS n FROM devices\").get() as { n: number }).n;\n    if (landed !== copied) return { copied, purged: false };\n\n    source.prepare(\"DELETE FROM devices\").run();\n    // Deliberately no VACUUM. The rows can linger in cache.db's free pages\n    // until reused, but the same data sits unencrypted in runtime.db by design,\n    // so reclaiming those pages buys nothing and a VACUUM locks a database the\n    // scanner is actively writing to.\n    return { copied, purged: true };\n  }\n\n  /**\n   * Copy a whole table out of a pre-split `cache.db` into this file.\n   *\n   * The copy itself is non-destructive — the source is left in place, so an\n   * older streamer rolled back onto the same machine still finds its data.\n   * `importLegacyDevices` deletes the source afterwards for its own reasons;\n   * `managed_sessions` does not. Runs only when this file's table is empty, so\n   * a second boot is a no-op rather than a re-copy that would resurrect rows\n   * deleted since.\n   *\n   * The table name is interpolated into SQL, so it is typed as a closed union\n   * rather than `string` — the set of tables that can ever be lifted is known\n   * at compile time, and that is what keeps a caller from making this a hole.\n   */\n  private importLegacyTable(\n    source: Database.Database,\n    table: \"managed_sessions\" | \"devices\",\n  ): number {\n    const existing = this.db.prepare(`SELECT COUNT(*) AS n FROM ${table}`).get() as {\n      n: number;\n    };\n    if (existing.n > 0) return 0;\n\n    const hasTable = source\n      .prepare(\"SELECT name FROM sqlite_master WHERE type = 'table' AND name = ?\")\n      .get(table);\n    if (!hasTable) return 0;\n\n    const rows = source.prepare(`SELECT * FROM ${table}`).all() as Array<Record<string, unknown>>;\n    if (rows.length === 0) return 0;\n\n    // Column names come from SQLite's own schema, never from user input.\n    const columns = Object.keys(rows[0]);\n    const insert = this.db.prepare(\n      `INSERT OR IGNORE INTO ${table} (${columns.join(\", \")})\n       VALUES (${columns.map((c) => `@${c}`).join(\", \")})`,\n    );\n    this.db.transaction((batch: Array<Record<string, unknown>>) => {\n      for (const row of batch) insert.run(row);\n    })(rows);\n\n    return rows.length;\n  }\n\n  close(): void {\n    this.db.close();\n  }\n}\n","// Persisted answers for Codex's blocking startup gates (directory trust,\n// hooks review). When mobile answers a gate card with a \"remember for all\n// projects\" option, the choice lands here and future gates are auto-answered\n// without a card. One tiny JSON file; read at gate time so edits (or tests\n// via THREADBASE_CONFIG_DIR) apply without a restart.\n\nimport { mkdirSync, readFileSync, writeFileSync } from \"fs\";\nimport { homedir } from \"os\";\nimport { dirname, join } from \"path\";\n\nexport type CodexGateType = \"hooks\" | \"trust\";\n\nexport interface GateAnswers {\n  codexHooksGate?: \"trust_all\" | \"continue_untrusted\";\n  codexTrustGate?: \"yes\";\n}\n\nfunction gateAnswersPath(): string {\n  const dir = process.env.THREADBASE_CONFIG_DIR ?? join(homedir(), \".threadbase\");\n  return join(dir, \"gate-answers.json\");\n}\n\nexport function loadGateAnswers(): GateAnswers {\n  try {\n    const parsed = JSON.parse(readFileSync(gateAnswersPath(), \"utf-8\"));\n    return parsed && typeof parsed === \"object\" ? (parsed as GateAnswers) : {};\n  } catch {\n    return {};\n  }\n}\n\nexport function saveGateAnswer<K extends keyof GateAnswers>(key: K, value: GateAnswers[K]): void {\n  const path = gateAnswersPath();\n  mkdirSync(dirname(path), { recursive: true });\n  writeFileSync(path, `${JSON.stringify({ ...loadGateAnswers(), [key]: value }, null, 2)}\\n`);\n}\n\n/**\n * The digit that answers a gate per the remembered choice, or null when the\n * user must be asked. Digits are the dialogs' literal on-screen numbers;\n * the runner appends Enter because current Codex only highlights on the digit.\n */\nexport function rememberedGateDigit(gate: CodexGateType): string | null {\n  const answers = loadGateAnswers();\n  if (gate === \"hooks\") {\n    if (answers.codexHooksGate === \"trust_all\") return \"2\";\n    if (answers.codexHooksGate === \"continue_untrusted\") return \"3\";\n    return null;\n  }\n  return answers.codexTrustGate === \"yes\" ? \"1\" : null;\n}\n","// Agent-phase detection. Answers \"what is the agent doing right now\" for a\n// session whose status is already `running` — a refinement of that status, not\n// a state with its own lifecycle.\n//\n// Pure — no I/O. Operates on rendered screen lines (getOutputLines), because\n// the TUI paints its footer with absolute-cursor moves and it does not exist as\n// a contiguous run of bytes in the raw PTY stream. This is the same constraint\n// parseStatusLine documents, and the reason mobile's own attempt at this\n// (tb-mobile PR #647) failed: it searched a client-side emulator that resolves\n// absolute cursor moves against the wrong rows.\n//\n// Returns `null` when no phase is recognised. Callers must treat that as \"no\n// phase\", never as \"unchanged\" — a derive that holds its previous value is how\n// an indicator latches on a finished turn.\n//\n// Why phase is readable from a repainted footer at all, when parseStatusLine\n// deliberately refuses to forward the elapsed counter from that same line: the\n// counter is a continuous function of wall-clock time sampled at output events,\n// so between samples it is simply wrong and the error grows without bound. A\n// phase is a step function whose transitions ARE output events — the agent\n// starts streaming *because* tokens began painting — so sampling at output\n// events is exact for it, not approximate. The one exception is the exit edge,\n// which is not an output event; that is why the phase is cleared out-of-band in\n// markReady() rather than inferred from the screen going quiet.\n\nimport type { ProviderName } from \"../../providers\";\nimport { CLAUDE_CODE_PROVIDER, CODEX_CLI_PROVIDER } from \"../../providers\";\nimport type { AgentPhase } from \"../../types\";\nimport { CODEX_WORKING_STATUS_RE, codexScreenPreTurn, codexStatusBarWords } from \"./codexScreen\";\n\n/**\n * Codex's status bar is binary: a turn walks Ready → Working → Ready with no\n * intermediate state observed on a live PTY probe, so reporting anything finer\n * would be invention. `working` is the only phase this provider can support.\n *\n * Two screens keep the composer shut without a turn being in flight, and both\n * would otherwise read as `working` before the user has submitted anything:\n * a blocking startup gate (directory trust, hooks review), and MCP boot — whose\n * status bar says \"Starting\", which is why this tests Working alone rather than\n * the composer-gating CODEX_BUSY_STATUS_RE that covers both words.\n */\nfunction codexPhase(lines: string[]): AgentPhase | null {\n  if (codexScreenPreTurn(lines)) return null;\n  return CODEX_WORKING_STATUS_RE.test(codexStatusBarWords(lines)) ? \"working\" : null;\n}\n\n/**\n * Claude's footer carries a richer phase, but the marker set has not yet been\n * re-verified against a fresh PTY capture — the candidate grammar was derived\n * from two captured turns, and the distinction it rests on (output-token `↓`\n * markers, which parseStatusLine does not read, versus the input-token `↑`\n * counter, which it deliberately rejects) is too load-bearing to build on\n * unconfirmed. Reporting no phase is correct until that lands: the indicator\n * simply does not render, which is the pre-feature behaviour.\n */\nfunction claudePhase(_lines: string[]): AgentPhase | null {\n  return null;\n}\n\n/**\n * Derive the agent's phase from a rendered screen.\n *\n * An unrecognised provider yields `null` rather than falling back to a\n * provider-specific grammar. `getTerminalChromeFilter` already establishes that\n * instinct — \"prefer passthrough over wrong Claude filters\" — and the opposite\n * default is what let a wrong grammar run against the wrong provider in #647.\n */\nexport function parseAgentPhase(lines: string[], provider: ProviderName): AgentPhase | null {\n  if (provider === CODEX_CLI_PROVIDER) return codexPhase(lines);\n  if (provider === CLAUDE_CODE_PROVIDER) return claudePhase(lines);\n  return null;\n}\n","/**\n * Trailing-edge debounce: collapses calls that arrive within `waitMs` of each\n * other into a single invocation, scheduled `waitMs` after the most recent\n * call. The last call's arguments win.\n *\n * The returned function carries two extra methods:\n *   - cancel(): drop any pending invocation (use on shutdown so a timer\n *     doesn't keep the process alive).\n *   - flush():  run any pending invocation immediately (useful in tests).\n */\nexport function debounce<A extends unknown[]>(\n  fn: (...args: A) => void,\n  waitMs: number,\n): ((...args: A) => void) & { flush: () => void; cancel: () => void } {\n  let timer: ReturnType<typeof setTimeout> | null = null;\n  let lastArgs: A | null = null;\n\n  const run = () => {\n    timer = null;\n    if (lastArgs) {\n      const args = lastArgs;\n      lastArgs = null;\n      fn(...args);\n    }\n  };\n\n  const debounced = (...args: A): void => {\n    lastArgs = args;\n    if (timer) clearTimeout(timer);\n    timer = setTimeout(run, waitMs);\n  };\n\n  debounced.cancel = (): void => {\n    if (timer) clearTimeout(timer);\n    timer = null;\n    lastArgs = null;\n  };\n\n  debounced.flush = (): void => {\n    if (timer) {\n      clearTimeout(timer);\n      run();\n    }\n  };\n\n  return debounced;\n}\n","import { randomUUID } from \"crypto\";\nimport { existsSync } from \"fs\";\nimport { basename } from \"path\";\nimport { getLogger, type Logger } from \"./logger\";\nimport { clearCodexExeCache, resolveCodexExe } from \"./platform\";\nimport { CODEX_CLI_PROVIDER } from \"./providers\";\nimport {\n  createScreen,\n  type InternalSession,\n  loadPty,\n  PTY_COLS,\n  PTY_ROWS,\n  stripAnsi,\n} from \"./pty-shared\";\nimport {\n  type CodexGateType,\n  rememberedGateDigit,\n  saveGateAnswer,\n} from \"./services/questions/codexGateAnswers\";\nimport {\n  CODEX_ACTIVE_WRITER_CODE,\n  CODEX_ACTIVE_WRITER_RE,\n  CODEX_HOOKS_GATE_REGEX,\n  CODEX_PROMPT_READY_TEXT,\n  CODEX_TRUST_GATE_REGEX,\n  type CodexBlockingPrompt,\n  codexScreenBlocksComposer,\n  codexScreenLooksIdle,\n  codexScreenShowsReady,\n  codexStatusBarLine,\n  detectCodexBlockingPrompt,\n  detectCodexCommandApproval,\n  detectCodexPicker,\n  gateCard,\n} from \"./services/questions/codexScreen\";\nimport { parseAgentPhase } from \"./services/questions/parseAgentPhase\";\nimport type {\n  AgentPhase,\n  ManagedSession,\n  PTYManagerOptions,\n  SessionRunner,\n  StartForkSessionOptions,\n  StartFreshSessionOptions,\n  StartSessionOptions,\n  StatusSource,\n  UserMessage,\n} from \"./types\";\nimport { debounce } from \"./utils/debounce\";\n\nconst OUTPUT_BUFFER_MAX = 65536;\n\n// Cap on recorded user messages per session (drop oldest); mirrors\n// pty-manager.ts INPUT_HISTORY_MAX.\nconst INPUT_HISTORY_MAX = 50;\n\n// PTY geometry, the render terminal, node-pty loading, the session shape and\n// ANSI stripping are shared with pty-manager.ts — see pty-shared.ts.\n\n// Re-run screen detection this long after the PTY goes quiet — a session\n// blocked on a gate (or a status bar whose \"Ready\" got truncated) may never\n// produce another chunk to trigger detection. Same value/rationale as\n// pty-manager.ts QUIET_DETECT_MS. Quiet alone does NOT mark boot ready\n// (mirrors PTYManager.handleQuiet): silence during MCP Starting used to\n// disarm the input queue and let \\r land as a compose newline.\nconst QUIET_DETECT_MS = 500;\n\n// Flat backstop from spawn: \"Ready\" lives at the END of a single status line\n// whose prefix (dir · repo · branch · diffstats) can exceed PTY_COLS, in which\n// case the marker is truncated off-screen and can NEVER match (live-probe\n// verified). Must stay below server.ts START_READY_TIMEOUT_MS (10s) so the\n// start request resolves 200-with-session rather than 202-pending — but only\n// when the screen is not still Starting/Working/MCP-booting; otherwise we\n// re-arm so a slow MCP boot cannot be mistaken for Ready.\nconst CODEX_READY_FALLBACK_MS = 8_000;\n\nconst SUBMIT_BYTES = \"\\r\";\n\n// Delay between the input write and the submit \\r. Same value as Claude's\n// SUBMIT_DELAY_MS (pty-manager.ts) — no bracketed-paste wrap needed for\n// Codex (Phase 0: plain keystrokes are accepted directly into the compose\n// box), but we still wait for PTY quiescence before Enter (see writeSubmit).\nconst CODEX_SUBMIT_DELAY_MS = 16;\n\n// Cap on how long writeSubmit will wait for the PTY to go quiet before\n// forcing \\r — mirrors pty-manager.ts SUBMIT_MAX_WAIT_MS.\nconst CODEX_SUBMIT_MAX_WAIT_MS = 500;\n\n// After sendInput flips waiting_input → running, if Working never appears\n// within this window the turn never started (\\r absorbed as a compose\n// newline, truncated Ready boot, etc.). Recover so grace/hold and mobile\n// are not stuck on `running`. Same 2s used by the Ready-stale path.\nconst CODEX_SUBMIT_STALE_MS = 2_000;\n\nexport class CodexPtyRunner implements SessionRunner {\n  private sessions = new Map<string, InternalSession>();\n  private onOutput: PTYManagerOptions[\"onOutput\"];\n  private onStatusChange: PTYManagerOptions[\"onStatusChange\"];\n  private onPhaseChange: PTYManagerOptions[\"onPhaseChange\"];\n  private onReady: PTYManagerOptions[\"onReady\"];\n  // Every Codex prompt the client can answer — startup gates (directory trust,\n  // hooks review), command approvals, and the rate-limit model picker — is\n  // broadcast through this one channel; null dismisses the card once the prompt\n  // leaves the screen.\n  //\n  // Deliberately NOT onLiveQuestion/onLiveQuestionGone, which is Claude's\n  // AskUserQuestion transport. Both channels land on the same mobile\n  // QuestionCard, and the permission one is the correct fit for Codex: its menus\n  // are answered by the option's real on-screen number (parseCodexNumberedOptions\n  // emits `answerKeys: \"2\\r\"`), which is exactly what `permissionIndices` carries\n  // and what AskUserQuestion's down-arrow-count model cannot express. Wiring the\n  // question channel as well would be a second path to the same card.\n  private onPermissionChange: PTYManagerOptions[\"onPermissionChange\"];\n  private onUserMessage: PTYManagerOptions[\"onUserMessage\"];\n  private log: Logger;\n  // Tracks sessions whose PTY has spawned but Codex hasn't yet reached its\n  // \"Ready\" status bar — i.e. onReady hasn't fired.\n  private pendingReady = new Set<string>();\n  // Inputs received via sendInput() while the session was still pendingReady.\n  // Flushed in arrival order once Codex reaches Ready.\n  private queuedInputs = new Map<string, string[]>();\n  // Gate currently on a session's screen (card broadcast, unanswered). While\n  // set, queued-input flushes are held — a flushed digit would CONFIRM a\n  // dialog option — and sendKeys() intercepts remember-variant digits.\n  private openGate = new Map<string, CodexGateType>();\n  // `${sessionId}:${gate}` once a gate has been actioned (auto-answered or\n  // card broadcast) — dedupes repaints of the same dialog.\n  private gateActioned = new Set<string>();\n  // Per-session trailing debounce re-armed on every chunk; on quiet, re-runs\n  // screen detection so a blocked/truncated boot still reaches ready.\n  private quietCheckers = new Map<string, ReturnType<typeof debounce<[]>>>();\n  // Per-session flat backstop from spawn (CODEX_READY_FALLBACK_MS).\n  private readyFallbackTimers = new Map<string, NodeJS.Timeout>();\n  // After a user submit: if Working never appears, recover from stuck `running`.\n  private submitWatchTimers = new Map<string, NodeJS.Timeout>();\n  // Wall-clock of the last PTY chunk per session — writeSubmit waits until\n  // this hasn't advanced for CODEX_SUBMIT_DELAY_MS before writing \\r.\n  private lastChunkAt = new Map<string, number>();\n  // Sessions that have shown a Working status bar since the last user submit.\n  // Mid-session Ready→waiting_input only fires after this, so a still-painted\n  // Ready bar immediately after sendInput cannot flip status back before the\n  // turn starts (which would let grace/hold kill a live turn).\n  private turnBusy = new Set<string>();\n  // Usage-limit / rate-limit menus — content key for deduped permission cards.\n  private openBlockingPrompt = new Map<string, string>();\n  // Command-approval cards are independent of quota cards: both use the\n  // permission transport, but a repaint/removal of one must not suppress the\n  // other detector's state.\n  private openCommandApproval = new Map<string, string>();\n  // Codex's own numbered pickers (the sign-in screen before login, plain\n  // menus). Keyed by content so TUI repaints do not re-broadcast (#868).\n  private openPicker = new Map<string, string>();\n  // Last codex.screen fingerprint per session — only emit when it changes so\n  // MCP boot redraw storms don't flood the log.\n  private lastScreenLog = new Map<string, string>();\n  // In-flight start()/startFresh() calls keyed by sessionId. A second\n  // concurrent resume for the same session (double-tap, client retry) awaits\n  // the first call's promise instead of spawning a duplicate PTY (CRITICAL #3).\n  private startPromises = new Map<string, Promise<ManagedSession>>();\n\n  constructor(options: PTYManagerOptions = {}) {\n    this.onOutput = options.onOutput;\n    this.onStatusChange = options.onStatusChange;\n    this.onPhaseChange = options.onPhaseChange;\n    this.onReady = options.onReady;\n    this.onPermissionChange = options.onPermissionChange;\n    this.onUserMessage = options.onUserMessage;\n    this.log = options.logger ?? getLogger(\"codex-pty\");\n  }\n\n  // Resume an existing Codex session. sessionId is the Codex-persisted\n  // session_meta.payload.id (Phase 0, Section 8) — Codex has no fresh-session\n  // equivalent of --session-id, so start() always means \"resume\".\n  async start(sessionId: string, options: StartSessionOptions): Promise<ManagedSession> {\n    // Guard the check-then-spawn: a second concurrent resume for the same\n    // sessionId must not race past both checks and spawn a second PTY. See\n    // PTYManager.start() for the identical pattern (CRITICAL #3).\n    const existing = this.sessions.get(sessionId);\n    if (existing) return toPublicSession(existing);\n\n    const inFlight = this.startPromises.get(sessionId);\n    if (inFlight) return inFlight;\n\n    const promise = this.doStart(sessionId, options).finally(() => {\n      this.startPromises.delete(sessionId);\n    });\n    this.startPromises.set(sessionId, promise);\n    return promise;\n  }\n\n  private async doStart(sessionId: string, options: StartSessionOptions): Promise<ManagedSession> {\n    // `sessionId` stays the runner's map key — only argv carries the\n    // provider-side id, so a resumed Codex session keeps the placeholder id\n    // its client already navigated to.\n    return this.launch(\n      sessionId,\n      [\"resume\", options.resumeId ?? sessionId, \"--cd\", options.projectPath, \"--no-alt-screen\"],\n      options,\n    );\n  }\n\n  // Spawn a Codex PTY under `sessionId` and wire up the shared boot machinery\n  // (screen, ready fallback, output/exit handlers). The only difference between\n  // resume, fresh and fork is argv.\n  private async launch(\n    sessionId: string,\n    args: string[],\n    options: { projectPath: string; projectName?: string; branch?: string },\n  ): Promise<ManagedSession> {\n    const nodePty = await loadPty();\n    const projectName = options.projectName ?? basename(options.projectPath);\n\n    let proc: ReturnType<typeof nodePty.spawn>;\n    try {\n      proc = nodePty.spawn(resolveCodexExe(), args, {\n        name: \"xterm-256color\",\n        cols: PTY_COLS,\n        rows: PTY_ROWS,\n        cwd: options.projectPath,\n        env: process.env as Record<string, string>,\n      });\n    } catch (err) {\n      // See resolveClaudeExe's clearClaudeExeCache() in platform.ts — same\n      // memoize-then-invalidate-on-spawn-failure rationale for Codex.\n      clearCodexExeCache();\n      throw err;\n    }\n\n    const session: InternalSession = {\n      id: sessionId,\n      provider: CODEX_CLI_PROVIDER,\n      projectPath: options.projectPath,\n      projectName,\n      branch: options.branch ?? \"\",\n      status: \"running\",\n      statusSource: \"spawn\",\n      statusUpdatedAt: new Date(),\n      startedAt: new Date(),\n      completedAt: null,\n      promptCount: 0,\n      lastOutput: \"\",\n      process: proc,\n      outputBuffer: Buffer.alloc(0),\n      screen: createScreen(),\n      inputHistory: [],\n    };\n\n    this.sessions.set(sessionId, session);\n    this.pendingReady.add(sessionId);\n    this.armReadyFallback(sessionId);\n\n    proc.onData((data: string) => {\n      this.handleOutput(sessionId, data);\n    });\n\n    proc.onExit(({ exitCode }: { exitCode: number }) => {\n      this.pendingReady.delete(sessionId);\n      this.handleExit(sessionId, exitCode);\n    });\n\n    return toPublicSession(session);\n  }\n\n  // Start a brand-new Codex session. Codex has no --session-id equivalent for\n  // a fresh launch — it assigns its own id, discovered later (Task 3's\n  // binding logic). This runner generates a local placeholder id for the\n  // ManagedSession handle only.\n  async startFresh(options: StartFreshSessionOptions): Promise<ManagedSession> {\n    const sessionId = randomUUID();\n\n    // Codex CLI has no `--system-prompt` flag (unlike Claude). Its only\n    // launch-time injection point is the positional `[PROMPT]` argument, which\n    // Codex processes as the opening turn. Pass the server-built prompt\n    // (default + browse-root boundary + client prompt) there so the safety\n    // boundary and client instructions aren't silently dropped for Codex\n    // sessions. Positional arg goes last, after all `[OPTIONS]`.\n    const args = [\"--cd\", options.projectPath, \"--no-alt-screen\"];\n    if (options.systemPrompt) {\n      args.push(options.systemPrompt);\n    }\n\n    return this.launch(sessionId, args, options);\n  }\n\n  /**\n   * Fork an existing Codex conversation into a new, independently-owned one\n   * (`codex fork <session-id>`).\n   *\n   * This is the recovery path for a rollout Codex will not let us resume: fork\n   * starts a *new* rollout seeded from the source's history and never touches\n   * the source's writer, so the terminal / VS Code / desktop client that owns\n   * it keeps running untouched. Like a fresh start, Codex assigns the new\n   * rollout id itself — the returned session is keyed by a local placeholder\n   * until watchForCodexRollout binds the real id.\n   */\n  async startFork(options: StartForkSessionOptions): Promise<ManagedSession> {\n    const sessionId = randomUUID();\n    return this.launch(\n      sessionId,\n      [\"fork\", options.forkFromId, \"--cd\", options.projectPath, \"--no-alt-screen\"],\n      options,\n    );\n  }\n\n  // Flat backstop: if the \"Ready\" marker never appears within\n  // CODEX_READY_FALLBACK_MS of spawn (truncated status bar), mark ready once\n  // the screen is no longer Starting/Working/MCP-booting. Re-arms while the\n  // boot is still busy so a slow MCP load cannot be mistaken for Ready.\n  // unref() so a pending timer never holds the process open.\n  private armReadyFallback(sessionId: string): void {\n    const timer = setTimeout(() => {\n      this.readyFallbackTimers.delete(sessionId);\n      void this.tryReadyFallback(sessionId);\n    }, CODEX_READY_FALLBACK_MS);\n    timer.unref?.();\n    this.readyFallbackTimers.set(sessionId, timer);\n  }\n\n  private async tryReadyFallback(sessionId: string): Promise<void> {\n    const session = this.sessions.get(sessionId);\n    if (session?.status !== \"running\" || !this.pendingReady.has(sessionId)) return;\n\n    // No PTY output at all — nothing busy to inspect; settle so start() can\n    // resolve and queued input is not held forever (same role as Claude's\n    // flat fallback on a silent boot).\n    if (session.outputBuffer.length === 0) {\n      this.markReady(sessionId, session, \"timeout-fallback\", \"fallback:timeout\");\n      return;\n    }\n\n    try {\n      const lines = await this.getOutputLines(sessionId, PTY_ROWS);\n      if (!this.pendingReady.has(sessionId)) return;\n      const busy = codexScreenBlocksComposer(lines);\n      this.log.info(`[codex.ready_fallback] ${sessionId.slice(0, 8)} busy=${busy}`, {\n        event: \"codex.ready_fallback\",\n        sessionId,\n        busy,\n        hasReady: codexScreenShowsReady(lines),\n      });\n      if (busy) {\n        this.armReadyFallback(sessionId);\n        return;\n      }\n      // Truncated Ready bar still needs a compose prompt (or Ready itself) —\n      // a model-only status line mid-paint must not disarm the input queue.\n      if (!codexScreenShowsReady(lines) && !codexScreenLooksIdle(lines)) {\n        this.armReadyFallback(sessionId);\n        return;\n      }\n      this.markReady(sessionId, session, \"timeout-fallback\", \"fallback:timeout\");\n    } catch (err) {\n      this.log.warn(\"[codex.ready_fallback] failed\", {\n        event: \"codex.ready_fallback_failed\",\n        sessionId,\n        err,\n      });\n      // Keep trying — a transient screen-read failure must not strand boot.\n      if (this.pendingReady.has(sessionId)) this.armReadyFallback(sessionId);\n    }\n  }\n\n  // Write raw key bytes directly to the PTY, same as PTYManager.sendKeys.\n  sendKeys(sessionId: string, keys: string): void {\n    const session = this.sessions.get(sessionId);\n    if (!session) throw new Error(`Session not found: ${sessionId}`);\n    if (session.status === \"idle\") {\n      throw new Error(`Session is idle (no active PTY): ${sessionId}`);\n    }\n    if (session.status === \"waiting_input\") {\n      session.status = \"running\";\n      session.statusSource = \"user-input\";\n      session.statusUpdatedAt = new Date();\n      this.onStatusChange?.(toPublicSession(session));\n    }\n    const gate = this.openGate.get(sessionId);\n    const digit = gate ? /^([0-9])\\r?$/.exec(keys)?.[1] : undefined;\n    // A picker digit selects AND confirms (verified on codex-cli 0.154.0), so a\n    // trailing \\r an older client appends would land on the NEXT screen.\n    const pickerDigit =\n      !gate && this.openPicker.has(sessionId) ? /^(\\d+)\\r?$/.exec(keys)?.[1] : undefined;\n    const out =\n      gate && digit ? this.resolveGateAnswer(sessionId, gate, digit) : (pickerDigit ?? keys);\n    this.log.info(`[codex.keys.write] ${sessionId.slice(0, 8)} bytes=${out.length}`, {\n      event: \"codex.keys_write\",\n      sessionId,\n      byteLen: out.length,\n    });\n    session.process.write(out);\n    session.lastActivityAt = new Date();\n  }\n\n  sendRawKeys(sessionId: string, keys: string): void {\n    const session = this.sessions.get(sessionId);\n    if (!session) throw new Error(`Session not found: ${sessionId}`);\n    if (session.status === \"idle\") throw new Error(`Session is idle (no active PTY): ${sessionId}`);\n    this.log.info(`[codex.raw_keys.write] ${sessionId.slice(0, 8)} bytes=${keys.length}`, {\n      event: \"codex.raw_keys_write\",\n      sessionId,\n      byteLen: keys.length,\n    });\n    session.process.write(keys);\n    session.lastActivityAt = new Date();\n  }\n\n  // Map a gate-card digit to the PTY bytes that answer the real dialog,\n  // persisting the choice when the digit was a synthetic \"remember for all\n  // projects\" option (those numbers don't exist on the actual dialog and must\n  // never reach codex). Current Codex trust/hooks pickers highlight on the\n  // digit and wait for Enter (`Press enter to continue`); write both.\n  private resolveGateAnswer(sessionId: string, gate: CodexGateType, digit: string): string {\n    let real = digit;\n    let remembered = false;\n    if (gate === \"hooks\" && digit === \"4\") {\n      saveGateAnswer(\"codexHooksGate\", \"trust_all\");\n      real = \"2\";\n      remembered = true;\n    } else if (gate === \"hooks\" && digit === \"5\") {\n      saveGateAnswer(\"codexHooksGate\", \"continue_untrusted\");\n      real = \"3\";\n      remembered = true;\n    } else if (gate === \"trust\" && digit === \"3\") {\n      saveGateAnswer(\"codexTrustGate\", \"yes\");\n      real = \"1\";\n      remembered = true;\n    }\n    this.log.info(`[codex.gate_answer] ${sessionId.slice(0, 8)} ${gate} digit=${real}`, {\n      event: \"codex.gate_answer\",\n      sessionId,\n      gate,\n      digit: real,\n      remembered,\n    });\n    return `${real}\\r`;\n  }\n\n  sendInput(sessionId: string, input: string): number {\n    const session = this.sessions.get(sessionId);\n    if (!session) throw new Error(`Session not found: ${sessionId}`);\n    if (session.status === \"idle\") {\n      throw new Error(`Session is idle (no active PTY): ${sessionId}`);\n    }\n    // Hold input while booting OR while a dialog owns the screen — a digit\n    // flushed into a Codex approval card would confirm an option; plain text\n    // mid-boot lands as compose newlines once \\r is treated as Enter.\n    if (\n      this.pendingReady.has(sessionId) ||\n      this.openGate.has(sessionId) ||\n      this.openCommandApproval.has(sessionId) ||\n      this.openPicker.has(sessionId)\n    ) {\n      const queue = this.queuedInputs.get(sessionId) ?? [];\n      queue.push(input);\n      this.queuedInputs.set(sessionId, queue);\n      session.lastActivityAt = new Date();\n      session.promptCount++;\n      this.log.warn(\n        `[codex.input.queued] ${sessionId.slice(0, 8)} promptCount=${session.promptCount} queueLen=${queue.length}`,\n        {\n          event: \"codex.input_queued\",\n          sessionId,\n          promptCount: session.promptCount,\n          queueLen: queue.length,\n          inputLen: input.length,\n        },\n      );\n      return session.promptCount;\n    }\n    if (session.status === \"waiting_input\") {\n      session.status = \"running\";\n      session.statusSource = \"user-input\";\n      session.statusUpdatedAt = new Date();\n      this.onStatusChange?.(toPublicSession(session));\n    }\n    this.turnBusy.delete(sessionId);\n    this.writeSubmit(sessionId, session, input, \"direct\", session.promptCount + 1);\n    session.lastActivityAt = new Date();\n    session.promptCount++;\n    return session.promptCount;\n  }\n\n  // Write the input as plain bytes (no bracketed-paste wrap — Phase 0\n  // confirmed Codex accepts plain keystrokes), then submit \\r once the PTY\n  // has been quiet for CODEX_SUBMIT_DELAY_MS. A flat delay fired \\r into a\n  // still-repainting TUI and the Enter became a compose newline instead of a\n  // turn submit (same pathology Claude's quiescence wait fixed).\n  private writeSubmit(\n    sessionId: string,\n    session: InternalSession,\n    input: string,\n    path: \"direct\" | \"flush\",\n    promptCount: number,\n  ): void {\n    this.recordUserMessage(session, input);\n    this.log.info(\n      `[codex.input.write] ${sessionId.slice(0, 8)} promptCount=${promptCount} bytes=${input.length}`,\n      {\n        event: \"codex.input_write\",\n        sessionId,\n        promptCount,\n        byteLen: input.length,\n        path,\n        phase: \"input\",\n      },\n    );\n    const writeAt = Date.now();\n    session.process.write(input);\n\n    const trySubmit = () => {\n      const current = this.sessions.get(sessionId);\n      if (!current || current !== session) return;\n      const now = Date.now();\n      const lastChunk = this.lastChunkAt.get(sessionId) ?? writeAt;\n      const quiet = now - lastChunk >= CODEX_SUBMIT_DELAY_MS;\n      const timedOut = now - writeAt >= CODEX_SUBMIT_MAX_WAIT_MS;\n      if (!quiet && !timedOut) {\n        setTimeout(trySubmit, CODEX_SUBMIT_DELAY_MS);\n        return;\n      }\n      this.log.info(\n        `[codex.input.submit] ${sessionId.slice(0, 8)} promptCount=${promptCount} digest=\\\\r waitedMs=${now - writeAt} timedOut=${timedOut}`,\n        {\n          event: \"codex.input_write\",\n          sessionId,\n          promptCount,\n          byteLen: SUBMIT_BYTES.length,\n          digest: \"\\\\r\",\n          path,\n          phase: \"submit\",\n          waitedMs: now - writeAt,\n          timedOut,\n        },\n      );\n      current.process.write(SUBMIT_BYTES);\n      this.armSubmitWatch(sessionId);\n    };\n    setTimeout(trySubmit, CODEX_SUBMIT_DELAY_MS);\n  }\n\n  // If Working never appears after \\r, the turn did not start — recover from\n  // stuck `running` even when no further PTY chunks re-arm the quiet checker\n  // (session ddc67b57: one post-submit chunk, then silence forever).\n  private armSubmitWatch(sessionId: string): void {\n    const prev = this.submitWatchTimers.get(sessionId);\n    if (prev) clearTimeout(prev);\n    const timer = setTimeout(() => {\n      this.submitWatchTimers.delete(sessionId);\n      void this.trySubmitStaleRecovery(sessionId);\n    }, CODEX_SUBMIT_STALE_MS);\n    timer.unref?.();\n    this.submitWatchTimers.set(sessionId, timer);\n  }\n\n  private async trySubmitStaleRecovery(sessionId: string): Promise<void> {\n    const session = this.sessions.get(sessionId);\n    if (session?.status !== \"running\") return;\n    if (this.turnBusy.has(sessionId)) return;\n    if (session.statusSource !== \"user-input\") return;\n\n    try {\n      const lines = await this.getOutputLines(sessionId, PTY_ROWS);\n      if (session.status !== \"running\" || this.turnBusy.has(sessionId)) return;\n      if (codexScreenBlocksComposer(lines)) {\n        // Still Starting/MCP — give the turn more time.\n        this.armSubmitWatch(sessionId);\n        return;\n      }\n      this.log.info(`[codex.submit_stale] ${sessionId.slice(0, 8)} recovering`, {\n        event: \"codex.submit_stale\",\n        sessionId,\n      });\n      this.markReady(sessionId, session, \"quiet-fallback\", \"submit-stale\");\n    } catch (err) {\n      this.log.warn(\"[codex.submit_stale] failed\", {\n        event: \"codex.submit_stale_failed\",\n        sessionId,\n        err,\n      });\n      this.armSubmitWatch(sessionId);\n    }\n  }\n\n  // Drain any inputs sent while the session was still pendingReady, writing\n  // them in arrival order now that Codex is Ready. No-op while a gate dialog\n  // is open (a flushed digit would confirm a dialog option) or while still\n  // pendingReady (markReady drains it) — the gate-close path re-drives it for\n  // the ready-with-gate-open case.\n  private flushQueuedInputs(sessionId: string): void {\n    if (\n      this.openGate.has(sessionId) ||\n      this.openCommandApproval.has(sessionId) ||\n      this.openPicker.has(sessionId) ||\n      this.pendingReady.has(sessionId)\n    ) {\n      return;\n    }\n    const queue = this.queuedInputs.get(sessionId);\n    if (!queue || queue.length === 0) return;\n    this.queuedInputs.delete(sessionId);\n    const session = this.sessions.get(sessionId);\n    if (!session) return;\n    this.log.info(\n      `[codex.flush] ${sessionId.slice(0, 8)} flushing ${queue.length} queued input(s)`,\n      {\n        event: \"codex.flush_queued\",\n        sessionId,\n        queueLen: queue.length,\n      },\n    );\n    queue.forEach((input, i) => {\n      const writeAt = i * CODEX_SUBMIT_DELAY_MS * 2;\n      if (writeAt === 0) {\n        this.writeSubmit(sessionId, session, input, \"flush\", session.promptCount);\n      } else {\n        setTimeout(() => {\n          const current = this.sessions.get(sessionId);\n          if (!current || current !== session) return;\n          this.writeSubmit(sessionId, session, input, \"flush\", session.promptCount);\n        }, writeAt);\n      }\n    });\n  }\n\n  // SIGINT produces a clean exitCode=0 exit (Phase 0 — confirmed).\n  /**\n   * Resize a live PTY. Silent when the session is unknown or has no process:\n   * a terminal emitting SIGWINCH races session exit by nature, and throwing\n   * would turn an ordinary window drag into an error the caller must catch.\n   */\n  resize(sessionId: string, cols: number, rows: number): void {\n    const session = this.sessions.get(sessionId);\n    if (!session?.process) return;\n    if (!Number.isInteger(cols) || !Number.isInteger(rows) || cols < 1 || rows < 1) return;\n    try {\n      session.process.resize(cols, rows);\n      // The headless render terminal MUST track the PTY (see pty-shared.ts):\n      // getOutputLines reads its grid for replay, and the gate detectors scrape\n      // it. Resizing one without the other desyncs every absolute cursor move\n      // the TUI makes — which would break gate detection, the reason a managed\n      // session exists at all.\n      session.screen.resize(cols, rows);\n    } catch (err) {\n      // node-pty throws if the fd closed between the guard above and here.\n      // The session is going away; a resize for it is moot, not an error.\n      this.log.debug(`[pty.resize.failed] ${sessionId.slice(0, 8)}`, {\n        event: \"pty.resize_failed\",\n        sessionId,\n        err,\n      });\n    }\n  }\n\n  cancel(sessionId: string): void {\n    const session = this.sessions.get(sessionId);\n    if (!session) throw new Error(`Session not found: ${sessionId}`);\n    session.process.kill(\"SIGINT\");\n  }\n\n  killPid(pid: number): void {\n    try {\n      process.kill(pid, \"SIGTERM\");\n    } catch {\n      // Process may already be gone\n    }\n  }\n\n  // Kill the PTY and mark the session idle. Mirrors PTYManager.putOnHold.\n  putOnHold(sessionId: string, signal: NodeJS.Signals = \"SIGINT\"): void {\n    const session = this.sessions.get(sessionId);\n    if (!session) return;\n    this.pendingReady.delete(sessionId);\n    this.queuedInputs.delete(sessionId);\n    this.clearSessionDetectors(sessionId);\n    try {\n      session.process.kill(signal);\n    } catch {\n      // already dead\n    }\n    session.status = \"idle\";\n    session.statusSource = \"shutdown\";\n    session.statusUpdatedAt = new Date();\n    session.completedAt = new Date();\n    session.screen.dispose();\n    this.sessions.delete(sessionId);\n    this.onStatusChange?.(toPublicSession(session));\n  }\n\n  // Drop a session's detection state: quiet-checker, ready-fallback timer,\n  // gate bookkeeping — and dismiss a still-open gate card so mobile doesn't\n  // keep rendering a question for a dead PTY.\n  private clearSessionDetectors(sessionId: string): void {\n    this.quietCheckers.get(sessionId)?.cancel();\n    this.quietCheckers.delete(sessionId);\n    const timer = this.readyFallbackTimers.get(sessionId);\n    if (timer) clearTimeout(timer);\n    this.readyFallbackTimers.delete(sessionId);\n    const submitWatch = this.submitWatchTimers.get(sessionId);\n    if (submitWatch) clearTimeout(submitWatch);\n    this.submitWatchTimers.delete(sessionId);\n    this.lastChunkAt.delete(sessionId);\n    if (this.openGate.delete(sessionId)) {\n      this.onPermissionChange?.(sessionId, null);\n    }\n    this.gateActioned.delete(`${sessionId}:hooks`);\n    this.gateActioned.delete(`${sessionId}:trust`);\n    this.turnBusy.delete(sessionId);\n    if (this.openBlockingPrompt.delete(sessionId)) {\n      this.onPermissionChange?.(sessionId, null);\n    }\n    if (this.openCommandApproval.delete(sessionId)) {\n      this.onPermissionChange?.(sessionId, null);\n    }\n    this.lastScreenLog.delete(sessionId);\n  }\n\n  getOutput(sessionId: string): string {\n    const session = this.sessions.get(sessionId);\n    if (!session) throw new Error(`Session not found: ${sessionId}`);\n    return session.outputBuffer.toString(\"utf-8\");\n  }\n\n  // Render the last `maxLines` rows of the session's screen in true on-screen\n  // order — same flush-then-read technique as PTYManager.getOutputLines.\n  async getOutputLines(sessionId: string, maxLines: number): Promise<string[]> {\n    const session = this.sessions.get(sessionId);\n    if (!session) throw new Error(`Session not found: ${sessionId}`);\n    await new Promise<void>((resolve) => session.screen.write(\"\", () => resolve()));\n\n    const buf = session.screen.buffer.active;\n    const lines: string[] = [];\n    for (let y = 0; y < buf.length; y++) {\n      lines.push(buf.getLine(y)?.translateToString(true) ?? \"\");\n    }\n    while (lines.length > 0 && lines[lines.length - 1] === \"\") {\n      lines.pop();\n    }\n    return lines.slice(-maxLines);\n  }\n\n  getInputHistory(sessionId: string): UserMessage[] {\n    return this.sessions.get(sessionId)?.inputHistory ?? [];\n  }\n\n  // OS pid of the spawned agent, or null if the session isn't live here.\n  // Mirrors PTYManager.getPid — see there for why the registry records it.\n  getPid(sessionId: string): number | null {\n    return this.sessions.get(sessionId)?.process?.pid ?? null;\n  }\n\n  // Record a submitted user message as ground truth and fire onUserMessage.\n  // Called from writeSubmit (direct and flush paths) — never from sendKeys.\n  private recordUserMessage(session: InternalSession, text: string): void {\n    const ts = Date.now();\n    session.inputHistory.push({ text, ts });\n    if (session.inputHistory.length > INPUT_HISTORY_MAX) {\n      session.inputHistory.shift();\n    }\n    this.onUserMessage?.(session.id, text, ts);\n  }\n\n  getSession(sessionId: string): ManagedSession | null {\n    const session = this.sessions.get(sessionId);\n    return session ? toPublicSession(session) : null;\n  }\n\n  hasSession(sessionId: string): boolean {\n    return this.sessions.has(sessionId);\n  }\n\n  listSessions(): ManagedSession[] {\n    return Array.from(this.sessions.values()).map(toPublicSession);\n  }\n\n  dispose(): void {\n    for (const session of this.sessions.values()) {\n      try {\n        session.process.kill();\n      } catch {\n        // Process may already be dead\n      }\n      session.screen.dispose();\n    }\n    for (const sessionId of Array.from(this.quietCheckers.keys())) {\n      this.clearSessionDetectors(sessionId);\n    }\n    for (const timer of this.readyFallbackTimers.values()) {\n      clearTimeout(timer);\n    }\n    this.sessions.clear();\n    this.pendingReady.clear();\n    this.queuedInputs.clear();\n    this.openGate.clear();\n    this.gateActioned.clear();\n    this.quietCheckers.clear();\n    this.readyFallbackTimers.clear();\n    for (const timer of this.submitWatchTimers.values()) {\n      clearTimeout(timer);\n    }\n    this.submitWatchTimers.clear();\n    this.lastChunkAt.clear();\n    this.turnBusy.clear();\n    this.openBlockingPrompt.clear();\n    this.openCommandApproval.clear();\n    this.lastScreenLog.clear();\n  }\n\n  private handleOutput(sessionId: string, data: string): void {\n    const session = this.sessions.get(sessionId);\n    if (!session) return;\n\n    this.lastChunkAt.set(sessionId, Date.now());\n\n    const chunk = Buffer.from(data, \"utf-8\");\n    session.outputBuffer = Buffer.concat([session.outputBuffer, chunk]);\n    if (session.outputBuffer.length > OUTPUT_BUFFER_MAX) {\n      session.outputBuffer = session.outputBuffer.subarray(\n        session.outputBuffer.length - OUTPUT_BUFFER_MAX,\n      );\n    }\n\n    // Render into the headless screen so detectReady()/getOutputLines() read\n    // true on-screen order — Codex paints via absolute cursor-position\n    // escapes that split words across non-contiguous PTY writes (Phase 0),\n    // so raw substring matching on `data` would miss things.\n    session.screen.write(data);\n    session.lastOutput = stripAnsi(data);\n\n    this.onOutput?.(sessionId, data);\n\n    this.detectScreenState(sessionId, \"chunk\").catch((err) => {\n      this.log.warn(\"[codex.ready_detect] failed\", {\n        event: \"codex.ready_detect_failed\",\n        sessionId,\n        err,\n      });\n    });\n\n    // Re-arm the quiet-checker on every chunk. A session blocked on a gate\n    // dialog (or whose status-bar \"Ready\" is truncated off-screen) may never\n    // produce the chunk that would trigger detection — re-run after\n    // QUIET_DETECT_MS of silence instead.\n    let quiet = this.quietCheckers.get(sessionId);\n    if (!quiet) {\n      quiet = debounce(() => {\n        this.detectScreenState(sessionId, \"quiet\").catch((err) => {\n          this.log.warn(\"[codex.ready_detect] failed\", {\n            event: \"codex.ready_detect_failed\",\n            sessionId,\n            err,\n          });\n        });\n      }, QUIET_DETECT_MS);\n      this.quietCheckers.set(sessionId, quiet);\n    }\n    quiet();\n  }\n\n  // Renders the session's headless screen and drives both detections:\n  //   - Gates (directory trust, hooks review) — checked on EVERY pass,\n  //     independent of pendingReady, so a gate appearing after ready is still\n  //     surfaced and a gate leaving the screen closes its card.\n  //   - Readiness — boot (pendingReady) requires the \"Ready\" status-bar marker\n  //     (quiet alone never settles boot — Starting shows `›` already). Mid-\n  //     session, running → waiting_input after Working then Ready (or a stale\n  //     Ready recovery if the turn never started).\n  private async detectScreenState(sessionId: string, _trigger: \"chunk\" | \"quiet\"): Promise<void> {\n    const session = this.sessions.get(sessionId);\n    if (!session || session.status === \"idle\") return;\n\n    const lines = await this.getOutputLines(sessionId, PTY_ROWS);\n    const screenText = lines.join(\"\\n\");\n\n    // ── Writer lock ────────────────────────────────────────────────\n    // Codex refused to attach: another client owns this rollout. Only during\n    // boot — the message can only be produced before the session is usable,\n    // and treating a later appearance (a user pasting the error text, say) as\n    // fatal would kill a live session.\n    if (this.pendingReady.has(sessionId) && CODEX_ACTIVE_WRITER_RE.test(screenText)) {\n      this.failStartup(\n        sessionId,\n        session,\n        CODEX_ACTIVE_WRITER_CODE,\n        \"This Codex session is already open in another client\",\n      );\n      return;\n    }\n\n    // Phase refinement, off the screen read the detectors below already share.\n    // Only while running: markReady clears the phase at turn end, and reading\n    // it in any other state would let a stale screen re-assert one after that\n    // clear. Placed after the writer-lock return so a refused startup, which\n    // never reaches waiting_input, cannot leave a phase behind.\n    if (session.status === \"running\") {\n      this.setPhase(sessionId, session, parseAgentPhase(lines, CODEX_CLI_PROVIDER));\n    }\n\n    // ── Gates ──────────────────────────────────────────────────────\n    const gate: CodexGateType | null = CODEX_HOOKS_GATE_REGEX.test(screenText)\n      ? \"hooks\"\n      : CODEX_TRUST_GATE_REGEX.test(screenText)\n        ? \"trust\"\n        : null;\n\n    if (gate) {\n      this.handleGate(sessionId, session, gate, lines);\n    } else if (this.openGate.delete(sessionId)) {\n      // The dialog left the screen (answered via card, keys, or desktop) —\n      // dismiss the card and release inputs held while it was open.\n      this.onPermissionChange?.(sessionId, null);\n      this.flushQueuedInputs(sessionId);\n    }\n\n    // ── Command approval ──────────────────────────────────────────\n    // Trust/hooks dialogs own the screen before this one can appear. Do not\n    // inspect their rendered content as an approval card, even if an old\n    // command-approval repaint remains in the scrollback buffer.\n    const commandApproval = gate ? null : detectCodexCommandApproval(lines);\n    if (commandApproval) {\n      this.handleCommandApproval(sessionId, commandApproval);\n    } else if (this.openCommandApproval.delete(sessionId)) {\n      this.onPermissionChange?.(sessionId, null);\n      this.flushQueuedInputs(sessionId);\n    }\n\n    // ── Usage / rate limits ────────────────────────────────────────\n    const blocking = detectCodexBlockingPrompt(lines);\n    if (blocking) {\n      // Soft tip alone is informational during boot / healthy idle — only\n      // elevate it when a user submit is stuck in `running` without Working\n      // (hard-limit text never appears; tip is the only quota signal).\n      const elevateSoft =\n        !blocking.soft ||\n        (session.status === \"running\" &&\n          session.statusSource === \"user-input\" &&\n          !this.turnBusy.has(sessionId) &&\n          !this.pendingReady.has(sessionId));\n      if (elevateSoft) {\n        this.handleBlockingPrompt(sessionId, session, blocking);\n      }\n    } else if (this.openBlockingPrompt.delete(sessionId)) {\n      this.onPermissionChange?.(sessionId, null);\n    }\n\n    // ── Numbered picker ───────────────────────────────────────────\n    // Last of the card detectors: every dialog above owns the screen while it\n    // is up. Without this, Codex's sign-in picker raised no card at all and\n    // nothing refused composer text, so a sent message picked the highlighted\n    // option and started an auth flow (#868).\n    const picker = gate || commandApproval || blocking ? null : detectCodexPicker(lines);\n    if (picker) {\n      this.handlePicker(sessionId, picker);\n    } else if (this.openPicker.delete(sessionId)) {\n      this.onPermissionChange?.(sessionId, null);\n      this.flushQueuedInputs(sessionId);\n    }\n\n    // ── Readiness ──────────────────────────────────────────────────\n    const hasReady = codexScreenShowsReady(lines);\n    const busy = codexScreenBlocksComposer(lines);\n    const bar = codexStatusBarLine(lines);\n\n    // State-change trail for Starting/Ready/usage investigations. Info (not\n    // debug) so a default LOG_LEVEL=info prod log captures it; fingerprint\n    // dedupe keeps MCP redraw storms from flooding the file.\n    const screenFp = [\n      this.pendingReady.has(sessionId) ? \"1\" : \"0\",\n      session.status,\n      hasReady ? \"1\" : \"0\",\n      busy ? \"1\" : \"0\",\n      blocking ? (blocking.soft ? \"soft\" : \"1\") : \"0\",\n      bar.slice(0, 80),\n    ].join(\"|\");\n    if (this.lastScreenLog.get(sessionId) !== screenFp) {\n      this.lastScreenLog.set(sessionId, screenFp);\n      // Metadata only: the bottom rendered line feeds the fingerprint above but\n      // is screen content and must not be logged.\n      this.log.info(\n        `[codex.screen] ${sessionId.slice(0, 8)} pending=${this.pendingReady.has(sessionId)} ` +\n          `status=${session.status} ready=${hasReady} busy=${busy} usage=${Boolean(blocking)}`,\n        {\n          event: \"codex.screen\",\n          sessionId,\n          trigger: _trigger,\n          pendingReady: this.pendingReady.has(sessionId),\n          status: session.status,\n          hasReady,\n          busy,\n          usageHit: Boolean(blocking),\n          usageSoft: Boolean(blocking?.soft),\n        },\n      );\n    }\n\n    if (this.pendingReady.has(sessionId)) {\n      // Boot: only the Ready marker settles pendingReady on a chunk/quiet\n      // pass. The flat fallback covers a truncated status bar once MCP boot\n      // lines are gone — quiet-during-Starting must never disarm the queue.\n      if (hasReady) {\n        this.markReady(sessionId, session, \"prompt-marker\", `marker:${CODEX_PROMPT_READY_TEXT}`);\n      }\n      return;\n    }\n\n    // Mid-session: after sendInput flipped waiting_input → running, flip back\n    // only once we've observed Working (turn actually started) and Ready has\n    // returned. A stale Ready still on screen right after submit must not\n    // undo the running status — grace/hold would then kill a live turn.\n    if (session.status === \"running\") {\n      if (/\\bWorking\\b/.test(bar)) {\n        this.turnBusy.add(sessionId);\n        const watch = this.submitWatchTimers.get(sessionId);\n        if (watch) clearTimeout(watch);\n        this.submitWatchTimers.delete(sessionId);\n      }\n\n      if (hasReady && this.turnBusy.has(sessionId)) {\n        this.turnBusy.delete(sessionId);\n        this.markReady(sessionId, session, \"prompt-marker\", `marker:${CODEX_PROMPT_READY_TEXT}`);\n      } else if (\n        !this.turnBusy.has(sessionId) &&\n        !busy &&\n        session.statusSource === \"user-input\" &&\n        session.statusUpdatedAt != null &&\n        Date.now() - session.statusUpdatedAt.getTime() >= CODEX_SUBMIT_STALE_MS\n      ) {\n        // Submit never started a turn (Enter absorbed, no Ready on screen,\n        // etc.) — recover so the session is not stuck \"running\" forever.\n        // Does not require Ready: fallback boots often never paint it.\n        this.markReady(sessionId, session, \"quiet-fallback\", \"submit-stale\");\n      }\n    }\n  }\n\n  // Surface quota / rate-limit screens as permission cards and stop leaving\n  // the session stuck in `running` while Codex waits for a menu pick.\n  private handleBlockingPrompt(\n    sessionId: string,\n    session: InternalSession,\n    blocking: CodexBlockingPrompt,\n  ): void {\n    const key = `${blocking.prompt}\\0${blocking.detail ?? \"\"}\\0${blocking.options.map((o) => o.index).join(\",\")}`;\n    const prev = this.openBlockingPrompt.get(sessionId);\n    if (prev !== key) {\n      this.openBlockingPrompt.set(sessionId, key);\n      session.failureReason = blocking.detail\n        ? `${blocking.prompt} ${blocking.detail}`\n        : blocking.prompt;\n      this.log.info(`[codex.usage_limit] ${sessionId.slice(0, 8)}`, {\n        event: \"codex.usage_limit\",\n        sessionId,\n      });\n      this.onPermissionChange?.(sessionId, blocking);\n    }\n    if (session.status === \"running\") {\n      this.turnBusy.delete(sessionId);\n      this.markReady(sessionId, session, \"quiet-fallback\", \"usage-limit\");\n    }\n  }\n\n  // Surface Codex's EXEC card through the existing permission event. The\n  // rendered screen is authoritative: keying it by content suppresses TUI\n  // repaint repeats and the absence path above clears it only after the card\n  // has left the screen.\n  private handleCommandApproval(sessionId: string, approval: CodexBlockingPrompt): void {\n    const key = `${approval.detail ?? \"\"}\\0${approval.options.map((o) => o.answerKeys).join(\",\")}`;\n    if (this.openCommandApproval.get(sessionId) === key) return;\n    this.openCommandApproval.set(sessionId, key);\n    this.log.info(`[codex.command_approval] ${sessionId.slice(0, 8)}`, {\n      event: \"codex.command_approval\",\n      sessionId,\n    });\n    this.onPermissionChange?.(sessionId, approval);\n  }\n\n  // Surface a numbered picker over the permission transport. Keyed by content:\n  // the picker repaints as its ASCII banner animates, and only a real change of\n  // prompt or options is a new card.\n  private handlePicker(sessionId: string, picker: CodexBlockingPrompt): void {\n    const key = `${picker.prompt}\\0${picker.options.map((o) => `${o.index}.${o.label}`).join(\",\")}`;\n    if (this.openPicker.get(sessionId) === key) return;\n    this.openPicker.set(sessionId, key);\n    this.log.info(\n      `[codex.picker_prompt] ${sessionId.slice(0, 8)} options=${picker.options.length}`,\n      {\n        event: \"codex.picker_prompt\",\n        sessionId,\n        optionCount: picker.options.length,\n      },\n    );\n    this.onPermissionChange?.(sessionId, picker);\n  }\n\n  // Answer a gate from the persisted remember-store, or surface it as a\n  // question card over the permission transport. Auto-answer is one write;\n  // if the dialog is still painted on the next scrape, fall through to a\n  // card so a digit-only Codex picker cannot swallow the prompt.\n  private handleGate(\n    sessionId: string,\n    session: InternalSession,\n    gate: CodexGateType,\n    lines: string[],\n  ): void {\n    const key = `${sessionId}:${gate}`;\n    if (this.openGate.get(sessionId) === gate) return;\n\n    const remembered = rememberedGateDigit(gate);\n    if (remembered && !this.gateActioned.has(key)) {\n      this.gateActioned.add(key);\n      this.log.info(`[codex.gate_auto_answer] ${sessionId.slice(0, 8)} ${gate} → ${remembered}`, {\n        event: \"codex.gate_auto_answer\",\n        sessionId,\n        gate,\n        digit: remembered,\n      });\n      session.process.write(`${remembered}\\r`);\n      return;\n    }\n\n    if (this.gateActioned.has(key) && !remembered) return;\n\n    this.gateActioned.add(key);\n    this.openGate.set(sessionId, gate);\n    const card = gateCard(gate, lines);\n    this.log.info(`[codex.gate_prompt] ${sessionId.slice(0, 8)} ${gate}`, {\n      event: \"codex.gate_prompt\",\n      sessionId,\n      gate,\n    });\n    this.onPermissionChange?.(sessionId, card);\n  }\n\n  /**\n   * Record the agent's phase and notify only on a real change. The guard is\n   * load-bearing, not an optimisation: detectScreenState runs on every chunk,\n   * so an unguarded setter would fire the WS frame behind this several times a\n   * second for a whole turn while reporting the same value. Same contract as\n   * PTYManager.setPhase — the two runners deliberately stay separate classes.\n   */\n  private setPhase(sessionId: string, session: InternalSession, phase: AgentPhase | null): void {\n    const next = phase ?? null;\n    if ((session.subStatus ?? null) === next) return;\n    session.subStatus = next;\n    this.onPhaseChange?.(sessionId, next);\n  }\n\n  private markReady(\n    sessionId: string,\n    session: InternalSession,\n    source: StatusSource,\n    reason: string,\n  ): void {\n    session.lastActivityAt = new Date();\n    session.status = \"waiting_input\";\n    // C3: same vocabulary as the Claude runner — a status reached by a timer\n    // must be distinguishable from one reached by observing a marker.\n    session.statusSource = source;\n    session.statusUpdatedAt = new Date();\n    // Turn end clears the phase. The exit edge is not an output event, so it\n    // cannot be read off the screen — without this the phase latches on any\n    // session that stops emitting, the bug tb-mobile PR #647 shipped. Below the\n    // source assignment for the same reason as PTYManager.markReady.\n    this.setPhase(sessionId, session, null);\n    // `reason=fallback:timeout`/`quiet:soft-idle` in volume would mean the\n    // status-bar Ready marker regressed (e.g. a Codex TUI redesign) — keep logged.\n    this.log.info(`[codex.ready] ${sessionId.slice(0, 8)} ${reason}`, {\n      event: \"codex.ready\",\n      sessionId,\n      reason,\n    });\n    this.onStatusChange?.(toPublicSession(session));\n    const wasPending = this.pendingReady.delete(sessionId);\n    const submitWatch = this.submitWatchTimers.get(sessionId);\n    if (submitWatch) clearTimeout(submitWatch);\n    this.submitWatchTimers.delete(sessionId);\n    if (wasPending) {\n      const timer = this.readyFallbackTimers.get(sessionId);\n      if (timer) clearTimeout(timer);\n      this.readyFallbackTimers.delete(sessionId);\n      this.flushQueuedInputs(sessionId);\n      this.onReady?.(toPublicSession(session));\n    }\n  }\n\n  /**\n   * Tear down a session that failed before it ever became usable, and report\n   * the reason in machine-readable form.\n   *\n   * Deliberately NOT markReady + exit: the caller must be able to tell a\n   * never-started session from a live one, `onReady` must not fire (no\n   * `session_ready` for a failed start), and every piece of per-session state —\n   * queue, timers, quiet-checker, gate cards, screen — has to go, since the\n   * session is removed from the map and nothing will collect it later.\n   */\n  private failStartup(\n    sessionId: string,\n    session: InternalSession,\n    code: string,\n    message: string,\n  ): void {\n    this.log.warn(`[codex.start_failed] ${sessionId.slice(0, 8)} ${code}`, {\n      event: \"codex.start_failed\",\n      sessionId,\n      code,\n      message,\n    });\n    session.failureCode = code;\n    session.failureReason = message;\n    session.status = \"idle\";\n    session.statusSource = \"process-exit\";\n    session.statusUpdatedAt = new Date();\n    session.completedAt = new Date();\n\n    this.pendingReady.delete(sessionId);\n    this.queuedInputs.delete(sessionId);\n    this.clearSessionDetectors(sessionId);\n    // Removed before the callback: the server reacts by reading the runner,\n    // and must not see a session that is already dead.\n    this.sessions.delete(sessionId);\n    try {\n      // Codex normally exits on its own here; SIGINT covers the case where it\n      // sits on the error screen instead. handleExit no-ops — session is gone.\n      session.process.kill(\"SIGINT\");\n    } catch {\n      // Already dead.\n    }\n    session.screen.dispose();\n    this.onStatusChange?.(toPublicSession(session));\n  }\n\n  private handleExit(sessionId: string, exitCode: number): void {\n    const session = this.sessions.get(sessionId);\n    if (!session) return;\n\n    session.completedAt = new Date();\n    session.status = \"idle\";\n    session.statusSource = \"process-exit\";\n    session.statusUpdatedAt = new Date();\n\n    // Instant exit with no output — diagnose the most likely cause.\n    const elapsedMs = session.completedAt.getTime() - session.startedAt.getTime();\n    if (exitCode !== 0 && elapsedMs < 2000 && session.lastOutput === \"\") {\n      if (!existsSync(session.projectPath)) {\n        session.failureReason = `Project directory not found: ${session.projectPath}`;\n      } else {\n        session.failureReason = `Codex process exited immediately (code ${exitCode}).`;\n      }\n    }\n\n    this.onStatusChange?.(toPublicSession(session));\n    session.screen.dispose();\n    this.sessions.delete(sessionId);\n    this.queuedInputs.delete(sessionId);\n    this.clearSessionDetectors(sessionId);\n  }\n}\n\nfunction toPublicSession(s: InternalSession): ManagedSession {\n  return {\n    id: s.id,\n    provider: s.provider ?? CODEX_CLI_PROVIDER,\n    projectPath: s.projectPath,\n    projectName: s.projectName,\n    branch: s.branch,\n    status: s.status,\n    startedAt: s.startedAt,\n    completedAt: s.completedAt,\n    promptCount: s.promptCount,\n    lastOutput: s.lastOutput,\n    ...(s.failureReason != null && { failureReason: s.failureReason }),\n    ...(s.failureCode != null && { failureCode: s.failureCode }),\n    ...(s.lastActivityAt != null && { lastActivityAt: s.lastActivityAt }),\n    ...(s.statusSource != null && { statusSource: s.statusSource }),\n    ...(s.statusUpdatedAt != null && { statusUpdatedAt: s.statusUpdatedAt }),\n    ...(s.filePath != null && { filePath: s.filePath }),\n    // Unconditional — see PTYManager's toPublicSession: a streamer re-adopting\n    // a surviving pty-host's sessions mid-turn has no other source for the\n    // phase, and the host's change guard will not re-emit it.\n    subStatus: s.subStatus ?? null,\n  };\n}\n","import { randomUUID } from \"crypto\";\nimport { existsSync } from \"fs\";\nimport { basename } from \"path\";\nimport { getLogger, type Logger } from \"./logger\";\nimport { clearCursorExeCache, resolveCursorExe } from \"./platform\";\nimport { CURSOR_PROVIDER } from \"./providers\";\nimport {\n  createScreen,\n  type InternalSession,\n  loadPty,\n  PTY_COLS,\n  PTY_ROWS,\n  stripAnsi,\n} from \"./pty-shared\";\nimport type {\n  ManagedSession,\n  PTYManagerOptions,\n  SessionRunner,\n  StartFreshSessionOptions,\n  StartSessionOptions,\n  StatusSource,\n  UserMessage,\n} from \"./types\";\nimport { debounce } from \"./utils/debounce\";\n\nconst OUTPUT_BUFFER_MAX = 65536;\nconst INPUT_HISTORY_MAX = 50;\nconst QUIET_DETECT_MS = 500;\nconst CURSOR_READY_FALLBACK_MS = 8_000;\nconst SUBMIT_BYTES = \"\\r\";\n/** Ctrl+U — kill the compose line before pasting the next turn. */\nconst CLEAR_COMPOSE_BYTES = \"\\x15\";\nconst CURSOR_SUBMIT_DELAY_MS = 16;\nconst CURSOR_SUBMIT_MAX_WAIT_MS = 500;\nconst CURSOR_SUBMIT_STALE_MS = 2_000;\n\n/**\n * Cursor CLI (`agent`) PTY runner.\n *\n * Spawn/resume flags come from the published CLI: `--workspace`, `--trust`\n * (headless, skip the workspace-trust prompt), `--resume=<id>`, positional\n * opening prompt. TUI detection is deliberately generic: we have no verified\n * Ready/gate scrape, so boot settles on quiet or the 8s fallback, and a turn\n * returns to waiting_input after submit-stale silence.\n *\n * Input clears the compose line (`Ctrl+U`) before writing text — Cursor leaves\n * the previous prompt editable, and a bare write would concatenate turns.\n */\nexport class CursorPtyRunner implements SessionRunner {\n  private sessions = new Map<string, InternalSession>();\n  private onOutput: PTYManagerOptions[\"onOutput\"];\n  private onStatusChange: PTYManagerOptions[\"onStatusChange\"];\n  private onReady: PTYManagerOptions[\"onReady\"];\n  private onUserMessage: PTYManagerOptions[\"onUserMessage\"];\n  private log: Logger;\n  private pendingReady = new Set<string>();\n  private queuedInputs = new Map<string, string[]>();\n  private quietCheckers = new Map<string, ReturnType<typeof debounce<[]>>>();\n  private readyFallbackTimers = new Map<string, NodeJS.Timeout>();\n  private submitWatchTimers = new Map<string, NodeJS.Timeout>();\n  private lastChunkAt = new Map<string, number>();\n  private startPromises = new Map<string, Promise<ManagedSession>>();\n\n  constructor(options: PTYManagerOptions = {}) {\n    this.onOutput = options.onOutput;\n    this.onStatusChange = options.onStatusChange;\n    this.onReady = options.onReady;\n    this.onUserMessage = options.onUserMessage;\n    this.log = options.logger ?? getLogger();\n  }\n\n  async start(sessionId: string, options: StartSessionOptions): Promise<ManagedSession> {\n    const existing = this.sessions.get(sessionId);\n    if (existing) return toPublicSession(existing);\n\n    const inFlight = this.startPromises.get(sessionId);\n    if (inFlight) return inFlight;\n\n    const promise = this.doStart(sessionId, options).finally(() => {\n      this.startPromises.delete(sessionId);\n    });\n    this.startPromises.set(sessionId, promise);\n    return promise;\n  }\n\n  private async doStart(sessionId: string, options: StartSessionOptions): Promise<ManagedSession> {\n    const resumeId = options.resumeId ?? sessionId;\n    return this.launch(\n      sessionId,\n      this.baseArgs(options.projectPath, [`--resume=${resumeId}`]),\n      options,\n    );\n  }\n\n  async startFresh(options: StartFreshSessionOptions): Promise<ManagedSession> {\n    const sessionId = randomUUID();\n    const args = this.baseArgs(options.projectPath);\n    if (options.systemPrompt) args.push(options.systemPrompt);\n    return this.launch(sessionId, args, options);\n  }\n\n  private baseArgs(projectPath: string, extra: string[] = []): string[] {\n    // `--trust` is headless-only and skips the workspace prompt; it is not\n    // permission-gate scraping. `--workspace` is the documented project root.\n    return [\"--workspace\", projectPath, \"--trust\", ...extra];\n  }\n\n  private async launch(\n    sessionId: string,\n    args: string[],\n    options: { projectPath: string; projectName?: string; branch?: string },\n  ): Promise<ManagedSession> {\n    const nodePty = await loadPty();\n    const projectName = options.projectName ?? basename(options.projectPath);\n\n    let proc: ReturnType<typeof nodePty.spawn>;\n    try {\n      proc = nodePty.spawn(resolveCursorExe(), args, {\n        name: \"xterm-256color\",\n        cols: PTY_COLS,\n        rows: PTY_ROWS,\n        cwd: options.projectPath,\n        env: process.env as Record<string, string>,\n      });\n    } catch (err) {\n      clearCursorExeCache();\n      throw err;\n    }\n\n    const session: InternalSession = {\n      id: sessionId,\n      provider: CURSOR_PROVIDER,\n      projectPath: options.projectPath,\n      projectName,\n      branch: options.branch ?? \"\",\n      status: \"running\",\n      statusSource: \"spawn\",\n      statusUpdatedAt: new Date(),\n      startedAt: new Date(),\n      completedAt: null,\n      promptCount: 0,\n      lastOutput: \"\",\n      process: proc,\n      outputBuffer: Buffer.alloc(0),\n      screen: createScreen(),\n      inputHistory: [],\n    };\n\n    this.sessions.set(sessionId, session);\n    this.pendingReady.add(sessionId);\n    this.armReadyFallback(sessionId);\n\n    proc.onData((data: string) => {\n      this.handleOutput(sessionId, data);\n    });\n    proc.onExit(({ exitCode }: { exitCode: number }) => {\n      this.pendingReady.delete(sessionId);\n      this.handleExit(sessionId, exitCode);\n    });\n\n    return toPublicSession(session);\n  }\n\n  private armReadyFallback(sessionId: string): void {\n    const timer = setTimeout(() => {\n      this.readyFallbackTimers.delete(sessionId);\n      this.tryReadyFallback(sessionId);\n    }, CURSOR_READY_FALLBACK_MS);\n    timer.unref?.();\n    this.readyFallbackTimers.set(sessionId, timer);\n  }\n\n  private tryReadyFallback(sessionId: string): void {\n    const session = this.sessions.get(sessionId);\n    if (session?.status !== \"running\" || !this.pendingReady.has(sessionId)) return;\n    this.markReady(sessionId, session, \"timeout-fallback\", \"fallback:timeout\");\n  }\n\n  sendKeys(sessionId: string, keys: string): void {\n    const session = this.sessions.get(sessionId);\n    if (!session) throw new Error(`Session not found: ${sessionId}`);\n    if (session.status === \"idle\") {\n      throw new Error(`Session is idle (no active PTY): ${sessionId}`);\n    }\n    if (session.status === \"waiting_input\") {\n      session.status = \"running\";\n      session.statusSource = \"user-input\";\n      session.statusUpdatedAt = new Date();\n      this.onStatusChange?.(toPublicSession(session));\n    }\n    session.process.write(keys);\n    session.lastActivityAt = new Date();\n  }\n\n  sendRawKeys(sessionId: string, keys: string): void {\n    const session = this.sessions.get(sessionId);\n    if (!session) throw new Error(`Session not found: ${sessionId}`);\n    if (session.status === \"idle\") throw new Error(`Session is idle (no active PTY): ${sessionId}`);\n    session.process.write(keys);\n    session.lastActivityAt = new Date();\n  }\n\n  sendInput(sessionId: string, input: string): number {\n    const session = this.sessions.get(sessionId);\n    if (!session) throw new Error(`Session not found: ${sessionId}`);\n    if (session.status === \"idle\") {\n      throw new Error(`Session is idle (no active PTY): ${sessionId}`);\n    }\n    if (this.pendingReady.has(sessionId)) {\n      const queue = this.queuedInputs.get(sessionId) ?? [];\n      queue.push(input);\n      this.queuedInputs.set(sessionId, queue);\n      session.lastActivityAt = new Date();\n      session.promptCount++;\n      return session.promptCount;\n    }\n    if (session.status === \"waiting_input\") {\n      session.status = \"running\";\n      session.statusSource = \"user-input\";\n      session.statusUpdatedAt = new Date();\n      this.onStatusChange?.(toPublicSession(session));\n    }\n    this.writeSubmit(sessionId, session, input);\n    session.lastActivityAt = new Date();\n    session.promptCount++;\n    return session.promptCount;\n  }\n\n  private writeSubmit(sessionId: string, session: InternalSession, input: string): void {\n    this.recordUserMessage(session, input);\n    const writeAt = Date.now();\n    // Cursor's TUI leaves the previous prompt in the compose box after a turn.\n    // Writing the next input on top concatenates (\"Commit it\" + \"Yes, commit it\"\n    // → \"Commit itYes, commit it\") and that smashed string is what lands in\n    // agent-transcripts. Clear the line first (same kill-line byte readline\n    // uses), then write the new text, then \\r once the PTY is quiet.\n    session.process.write(CLEAR_COMPOSE_BYTES + input);\n\n    const trySubmit = () => {\n      const current = this.sessions.get(sessionId);\n      if (!current || current !== session) return;\n      const now = Date.now();\n      const lastChunk = this.lastChunkAt.get(sessionId) ?? writeAt;\n      const quiet = now - lastChunk >= CURSOR_SUBMIT_DELAY_MS;\n      const timedOut = now - writeAt >= CURSOR_SUBMIT_MAX_WAIT_MS;\n      if (!quiet && !timedOut) {\n        setTimeout(trySubmit, CURSOR_SUBMIT_DELAY_MS);\n        return;\n      }\n      current.process.write(SUBMIT_BYTES);\n      this.armSubmitWatch(sessionId);\n    };\n    setTimeout(trySubmit, CURSOR_SUBMIT_DELAY_MS);\n  }\n\n  private armSubmitWatch(sessionId: string): void {\n    const prev = this.submitWatchTimers.get(sessionId);\n    if (prev) clearTimeout(prev);\n    const timer = setTimeout(() => {\n      this.submitWatchTimers.delete(sessionId);\n      const session = this.sessions.get(sessionId);\n      if (session?.status !== \"running\") return;\n      if (session.statusSource !== \"user-input\") return;\n      this.markReady(sessionId, session, \"quiet-fallback\", \"submit-stale\");\n    }, CURSOR_SUBMIT_STALE_MS);\n    timer.unref?.();\n    this.submitWatchTimers.set(sessionId, timer);\n  }\n\n  private flushQueuedInputs(sessionId: string): void {\n    if (this.pendingReady.has(sessionId)) return;\n    const queue = this.queuedInputs.get(sessionId);\n    if (!queue || queue.length === 0) return;\n    this.queuedInputs.delete(sessionId);\n    const session = this.sessions.get(sessionId);\n    if (!session) return;\n    queue.forEach((input, i) => {\n      const writeAt = i * CURSOR_SUBMIT_DELAY_MS * 2;\n      const fire = () => {\n        const current = this.sessions.get(sessionId);\n        if (!current || current !== session) return;\n        this.writeSubmit(sessionId, session, input);\n      };\n      if (writeAt === 0) fire();\n      else setTimeout(fire, writeAt);\n    });\n  }\n\n  resize(sessionId: string, cols: number, rows: number): void {\n    const session = this.sessions.get(sessionId);\n    if (!session?.process) return;\n    if (!Number.isInteger(cols) || !Number.isInteger(rows) || cols < 1 || rows < 1) return;\n    try {\n      session.process.resize(cols, rows);\n      session.screen.resize(cols, rows);\n    } catch (err) {\n      this.log.debug(`[pty.resize.failed] ${sessionId.slice(0, 8)}`, {\n        event: \"pty.resize_failed\",\n        sessionId,\n        err,\n      });\n    }\n  }\n\n  cancel(sessionId: string): void {\n    const session = this.sessions.get(sessionId);\n    if (!session) throw new Error(`Session not found: ${sessionId}`);\n    session.process.kill(\"SIGINT\");\n  }\n\n  killPid(pid: number): void {\n    try {\n      process.kill(pid, \"SIGTERM\");\n    } catch {\n      // Process may already be gone\n    }\n  }\n\n  putOnHold(sessionId: string, signal: NodeJS.Signals = \"SIGINT\"): void {\n    const session = this.sessions.get(sessionId);\n    if (!session) return;\n    this.pendingReady.delete(sessionId);\n    this.queuedInputs.delete(sessionId);\n    this.clearSessionDetectors(sessionId);\n    try {\n      session.process.kill(signal);\n    } catch {\n      // already dead\n    }\n    session.status = \"idle\";\n    session.statusSource = \"shutdown\";\n    session.statusUpdatedAt = new Date();\n    session.completedAt = new Date();\n    session.screen.dispose();\n    this.sessions.delete(sessionId);\n    this.onStatusChange?.(toPublicSession(session));\n  }\n\n  getOutput(sessionId: string): string {\n    const session = this.sessions.get(sessionId);\n    if (!session) throw new Error(`Session not found: ${sessionId}`);\n    return session.outputBuffer.toString(\"utf-8\");\n  }\n\n  async getOutputLines(sessionId: string, maxLines: number): Promise<string[]> {\n    const session = this.sessions.get(sessionId);\n    if (!session) throw new Error(`Session not found: ${sessionId}`);\n    await new Promise<void>((resolve) => session.screen.write(\"\", () => resolve()));\n\n    const buf = session.screen.buffer.active;\n    const lines: string[] = [];\n    for (let y = 0; y < buf.length; y++) {\n      lines.push(buf.getLine(y)?.translateToString(true) ?? \"\");\n    }\n    while (lines.length > 0 && lines[lines.length - 1] === \"\") {\n      lines.pop();\n    }\n    return lines.slice(-maxLines);\n  }\n\n  getInputHistory(sessionId: string): UserMessage[] {\n    return this.sessions.get(sessionId)?.inputHistory ?? [];\n  }\n\n  getPid(sessionId: string): number | null {\n    return this.sessions.get(sessionId)?.process?.pid ?? null;\n  }\n\n  private recordUserMessage(session: InternalSession, text: string): void {\n    const ts = Date.now();\n    session.inputHistory.push({ text, ts });\n    if (session.inputHistory.length > INPUT_HISTORY_MAX) {\n      session.inputHistory.shift();\n    }\n    this.onUserMessage?.(session.id, text, ts);\n  }\n\n  getSession(sessionId: string): ManagedSession | null {\n    const session = this.sessions.get(sessionId);\n    return session ? toPublicSession(session) : null;\n  }\n\n  hasSession(sessionId: string): boolean {\n    return this.sessions.has(sessionId);\n  }\n\n  listSessions(): ManagedSession[] {\n    return Array.from(this.sessions.values()).map(toPublicSession);\n  }\n\n  dispose(): void {\n    for (const session of this.sessions.values()) {\n      try {\n        session.process.kill();\n      } catch {\n        // Process may already be dead\n      }\n      session.screen.dispose();\n    }\n    for (const sessionId of Array.from(this.quietCheckers.keys())) {\n      this.clearSessionDetectors(sessionId);\n    }\n    for (const timer of this.readyFallbackTimers.values()) clearTimeout(timer);\n    for (const timer of this.submitWatchTimers.values()) clearTimeout(timer);\n    this.sessions.clear();\n    this.pendingReady.clear();\n    this.queuedInputs.clear();\n    this.quietCheckers.clear();\n    this.readyFallbackTimers.clear();\n    this.submitWatchTimers.clear();\n    this.lastChunkAt.clear();\n  }\n\n  private handleOutput(sessionId: string, data: string): void {\n    const session = this.sessions.get(sessionId);\n    if (!session) return;\n\n    this.lastChunkAt.set(sessionId, Date.now());\n\n    const chunk = Buffer.from(data, \"utf-8\");\n    session.outputBuffer = Buffer.concat([session.outputBuffer, chunk]);\n    if (session.outputBuffer.length > OUTPUT_BUFFER_MAX) {\n      session.outputBuffer = session.outputBuffer.subarray(\n        session.outputBuffer.length - OUTPUT_BUFFER_MAX,\n      );\n    }\n\n    session.screen.write(data);\n    session.lastOutput = stripAnsi(data);\n    this.onOutput?.(sessionId, data);\n\n    let quiet = this.quietCheckers.get(sessionId);\n    if (!quiet) {\n      quiet = debounce(() => {\n        this.detectQuiet(sessionId);\n      }, QUIET_DETECT_MS);\n      this.quietCheckers.set(sessionId, quiet);\n    }\n    quiet();\n  }\n\n  private detectQuiet(sessionId: string): void {\n    const session = this.sessions.get(sessionId);\n    if (!session || session.status === \"idle\") return;\n    if (this.pendingReady.has(sessionId)) {\n      this.markReady(sessionId, session, \"quiet-fallback\", \"quiet:boot\");\n    }\n  }\n\n  private markReady(\n    sessionId: string,\n    session: InternalSession,\n    source: StatusSource,\n    reason: string,\n  ): void {\n    session.lastActivityAt = new Date();\n    session.status = \"waiting_input\";\n    session.statusSource = source;\n    session.statusUpdatedAt = new Date();\n    this.log.info(`[cursor.ready] ${sessionId.slice(0, 8)} ${reason}`, {\n      event: \"cursor.ready\",\n      sessionId,\n      reason,\n    });\n    this.onStatusChange?.(toPublicSession(session));\n    const wasPending = this.pendingReady.delete(sessionId);\n    const submitWatch = this.submitWatchTimers.get(sessionId);\n    if (submitWatch) clearTimeout(submitWatch);\n    this.submitWatchTimers.delete(sessionId);\n    if (wasPending) {\n      const timer = this.readyFallbackTimers.get(sessionId);\n      if (timer) clearTimeout(timer);\n      this.readyFallbackTimers.delete(sessionId);\n      this.flushQueuedInputs(sessionId);\n      this.onReady?.(toPublicSession(session));\n    }\n  }\n\n  private handleExit(sessionId: string, exitCode: number): void {\n    const session = this.sessions.get(sessionId);\n    if (!session) return;\n\n    session.completedAt = new Date();\n    session.status = \"idle\";\n    session.statusSource = \"process-exit\";\n    session.statusUpdatedAt = new Date();\n\n    const elapsedMs = session.completedAt.getTime() - session.startedAt.getTime();\n    if (exitCode !== 0 && elapsedMs < 2000 && session.lastOutput === \"\") {\n      if (!existsSync(session.projectPath)) {\n        session.failureReason = `Project directory not found: ${session.projectPath}`;\n      } else {\n        session.failureReason = `Cursor agent process exited immediately (code ${exitCode}).`;\n      }\n    }\n\n    this.onStatusChange?.(toPublicSession(session));\n    session.screen.dispose();\n    this.sessions.delete(sessionId);\n    this.queuedInputs.delete(sessionId);\n    this.clearSessionDetectors(sessionId);\n  }\n\n  private clearSessionDetectors(sessionId: string): void {\n    this.quietCheckers.get(sessionId)?.cancel();\n    this.quietCheckers.delete(sessionId);\n    const ready = this.readyFallbackTimers.get(sessionId);\n    if (ready) clearTimeout(ready);\n    this.readyFallbackTimers.delete(sessionId);\n    const watch = this.submitWatchTimers.get(sessionId);\n    if (watch) clearTimeout(watch);\n    this.submitWatchTimers.delete(sessionId);\n    this.lastChunkAt.delete(sessionId);\n  }\n}\n\nfunction toPublicSession(s: InternalSession): ManagedSession {\n  return {\n    id: s.id,\n    provider: s.provider ?? CURSOR_PROVIDER,\n    projectPath: s.projectPath,\n    projectName: s.projectName,\n    branch: s.branch,\n    status: s.status,\n    startedAt: s.startedAt,\n    completedAt: s.completedAt,\n    promptCount: s.promptCount,\n    lastOutput: s.lastOutput,\n    ...(s.failureReason != null && { failureReason: s.failureReason }),\n    ...(s.failureCode != null && { failureCode: s.failureCode }),\n    ...(s.lastActivityAt != null && { lastActivityAt: s.lastActivityAt }),\n    ...(s.statusSource != null && { statusSource: s.statusSource }),\n    ...(s.statusUpdatedAt != null && { statusUpdatedAt: s.statusUpdatedAt }),\n    ...(s.filePath != null && { filePath: s.filePath }),\n    subStatus: s.subStatus ?? null,\n  };\n}\n","import type { ProviderName } from \"../providers\";\nimport type {\n  AgentPhase,\n  AskQuestion,\n  ManagedSession,\n  PermissionOption,\n  StartFreshSessionOptions,\n  StartSessionOptions,\n  UserMessage,\n} from \"../types\";\n\n/**\n * Wire protocol between the streamer and `tb-streamer pty-host`\n * (persistence plan Phase 6a).\n * See docs/plans/live-sessions-persistence-plan.md §4 and\n * docs/architecture/2026-07-24-durable-session-runtime.md (alternative D).\n *\n * The point of the host is that the PTY master fd is held by a process that is\n * NOT being restarted. Everything the audit lists as lost with the streamer —\n * node-pty, the ring buffer, the xterm screen, inputHistory, pendingReady,\n * queuedInputs, and the prompt/gate detectors — lives on the host side of this\n * boundary; the streamer keeps only a mirror it can rebuild from `status`.\n *\n * Newline-delimited JSON rather than a binary framing: PTY output is already\n * being JSON-escaped for the WebSocket hub a layer above, the volumes are a\n * terminal's worth of bytes rather than a video stream, and a protocol you can\n * read with `nc` is worth more during an incident than the bytes it saves.\n *\n * Two message directions, never mixed:\n *\n *  - **Requests** (streamer → host) each carry an `id` and are answered by\n *    exactly one `Response` with the same `id`.\n *  - **Events** (host → streamer) are unsolicited and carry no `id`. They are\n *    the transport for what are callbacks in `PTYManagerOptions` today; the\n *    detectors that fire them run in the host, so every one of those callbacks\n *    needs an event here or the feature silently stops working when the flag\n *    is on. That is why this list is longer than the sketch in the plan.\n *\n * `resize` was deliberately absent until there was a caller: sessions spawn at\n * the fixed `PTY_COLS`/`PTY_ROWS` and every headless consumer assumes that\n * size. An attached local terminal is the caller that needs it — it has a real\n * size of its own — so the verb exists now. Sessions still spawn at the\n * constants; nothing resizes unless something attached asks.\n */\n\n/**\n * Bumped on any incompatible change to the shapes below. Version 2 adds the\n * heartbeat and shutdown controls required for host supervision. Version 3\n * adds the `phase-change` event. Version 4 adds host-owned prompt occurrence\n * ids and current detector snapshots so a reconnect does not lose a prompt\n * that opened before the new streamer subscribed. Version 5 adds `raw_keys`.\n * Version 6 adds `resize`; an older host rejects either as an unknown verb.\n */\nexport const PTY_HOST_PROTOCOL_VERSION = 6;\n\nexport interface HostHeartbeatState {\n  registryState: \"known\" | \"unknown\";\n  referencedSessionIds: string[];\n}\n\n/** `spawn` with a null sessionId means startFresh — the host assigns the id. */\nexport type SpawnRequest = {\n  id: number;\n  type: \"spawn\";\n  provider: ProviderName;\n} & (\n  | { sessionId: string; options: StartSessionOptions }\n  | { sessionId: null; options: StartFreshSessionOptions }\n);\n\nexport type HostRequest =\n  | SpawnRequest\n  /** A submitted user message. Answered with the session's new promptCount. */\n  | { id: number; type: \"write\"; sessionId: string; input: string }\n  /** Raw keystrokes — never recorded as a user message. */\n  | { id: number; type: \"keys\"; sessionId: string; keys: string }\n  /** Navigation keys that must not change a waiting prompt's session status. */\n  | { id: number; type: \"raw_keys\"; sessionId: string; keys: string }\n  /**\n   * Set a session's PTY dimensions. Answered once applied; the host treats an\n   * unknown session as a no-op rather than an error, because a terminal\n   * emitting SIGWINCH races session exit by nature.\n   */\n  | { id: number; type: \"resize\"; sessionId: string; cols: number; rows: number }\n  /** Begin receiving events. Sent once per connection after status passes the version check. */\n  | { id: number; type: \"subscribe\" }\n  /** The rendered screen, newest `maxLines` rows, in true on-screen order. */\n  | { id: number; type: \"replay\"; sessionId: string; maxLines: number }\n  | { id: number; type: \"input-history\"; sessionId: string }\n  | { id: number; type: \"cancel\"; sessionId: string }\n  /**\n   * Stop a session. `hold` is `putOnHold` (SIGINT, history intact, resumable);\n   * without it, and addressed by `pid`, it is `killPid`. One verb because the\n   * host's answer is the same either way: that process is no longer running.\n   */\n  | { id: number; type: \"kill\"; sessionId: string; hold: true }\n  | { id: number; type: \"kill\"; pid: number; hold?: false }\n  | ({ id: number; type: \"heartbeat\" } & HostHeartbeatState)\n  /** Stop this host after acknowledging the request. Used only on version skew. */\n  | { id: number; type: \"shutdown-host\" }\n  /** Every session the host owns. Seeds the streamer's mirror on connect. */\n  | { id: number; type: \"status\" };\n\nexport type HostRequestType = HostRequest[\"type\"];\n\n/**\n * One response per request, correlated by `id`.\n *\n * A failure is a value, not a dropped message: a request that never gets a\n * response leaves the caller's promise pending forever, which is how a\n * transport bug turns into a hung session start rather than an error.\n */\nexport type HostResponse =\n  | { id: number; ok: true; result: unknown }\n  | { id: number; ok: false; error: string };\n\n/**\n * Unsolicited host → streamer messages. One per `PTYManagerOptions` callback,\n * plus `exit`, which is `onStatusChange` with the process actually gone.\n */\nexport type HostEvent =\n  | { type: \"event\"; event: \"output\"; sessionId: string; data: string }\n  | { type: \"event\"; event: \"status-change\"; session: ManagedSession }\n  | { type: \"event\"; event: \"ready\"; session: ManagedSession }\n  | {\n      type: \"event\";\n      event: \"permission-change\";\n      sessionId: string;\n      gate: {\n        prompt?: string;\n        detail?: string;\n        options: PermissionOption[];\n        cursor?: number;\n      } | null;\n      occurrenceId?: string;\n    }\n  /**\n   * Agent phase changed within a running turn, including to `null` at turn\n   * end. Carries the same always-present/nullable contract as the wire field:\n   * absence must never mean \"cleared\", because the consumer merges state.\n   */\n  | { type: \"event\"; event: \"phase-change\"; sessionId: string; phase: AgentPhase | null }\n  /**\n   * Composer next-prompt suggestion changed (`null` = cleared). Additive host ->\n   * server event, so PTY_HOST_PROTOCOL_VERSION is deliberately not bumped: a\n   * bump makes connect() shut down a surviving host and its sessions, and an\n   * older streamer's event switch simply ignores an unknown event.\n   */\n  | { type: \"event\"; event: \"prompt-suggestion-change\"; sessionId: string; text: string | null }\n  | {\n      type: \"event\";\n      event: \"live-question\";\n      sessionId: string;\n      questions: AskQuestion[];\n      occurrenceId: string;\n    }\n  | { type: \"event\"; event: \"live-question-gone\"; sessionId: string }\n  | { type: \"event\"; event: \"user-message\"; sessionId: string; text: string; ts: number }\n  | { type: \"event\"; event: \"exit\"; sessionId: string; exitCode: number };\n\nexport type HostMessage = HostResponse | HostEvent;\n\nexport function isHostEvent(message: HostMessage): message is HostEvent {\n  return \"type\" in message && message.type === \"event\";\n}\n\n/**\n * A request minus the `id` the sender assigns.\n *\n * Distributive on purpose: a plain `Omit<HostRequest, \"id\">` collapses the\n * union into its common keys, which loses `sessionId`, `provider` and the rest\n * — so every call site fails to type-check against a request shape that is\n * actually correct.\n */\nexport type HostRequestBody = HostRequest extends infer T\n  ? T extends { id: number }\n    ? Omit<T, \"id\">\n    : never\n  : never;\n\n/**\n * A session plus the one thing `ManagedSession` does not carry: the OS pid.\n *\n * The in-process runners read it off the node-pty handle, which lives on the\n * host now — and the durable registry needs it at spawn to record something a\n * later boot can probe. It is fixed for the life of a session, so `spawn` and\n * `status` are the only messages that carry it.\n */\nexport interface HostSession {\n  session: ManagedSession;\n  pid: number | null;\n}\n\n/** Result shapes, named so both ends agree on what a given request answers. */\nexport interface StatusResult {\n  protocolVersion: number;\n  sessions: HostSession[];\n  promptSnapshots?: HostPromptSnapshot[];\n}\nexport interface SubscribeResult {\n  promptSnapshots: HostPromptSnapshot[];\n}\n\nexport type HostPromptSnapshot =\n  | {\n      kind: \"permission\";\n      sessionId: string;\n      occurrenceId: string;\n      gate: NonNullable<\n        Parameters<NonNullable<import(\"../types\").PTYManagerOptions[\"onPermissionChange\"]>>[1]\n      >;\n    }\n  | {\n      kind: \"question\";\n      sessionId: string;\n      occurrenceId: string;\n      questions: AskQuestion[];\n    };\nexport interface InputHistoryResult {\n  history: UserMessage[];\n}\nexport interface ReplayResult {\n  lines: string[];\n  /** The raw ring buffer, so a reconnecting streamer can restore `getOutput`. */\n  output: string;\n}\n\n/**\n * A duplex line channel. Deliberately not a socket: the runner is tested\n * against an in-memory pair, and PR 7 supplies the real one over a unix socket\n * (POSIX) or named pipe (Windows).\n */\nexport interface HostTransport {\n  send(line: string): void;\n  onLine(handler: (line: string) => void): void;\n  onClose(handler: () => void): void;\n  close(): void;\n}\n\n/** `Date` survives JSON as a string; every session field that is one is listed here. */\nconst SESSION_DATE_FIELDS = [\n  \"startedAt\",\n  \"completedAt\",\n  \"statusUpdatedAt\",\n  \"lastActivityAt\",\n  \"firstMessageAt\",\n  \"lastMessageAt\",\n] as const;\n\n/**\n * Restore a `ManagedSession` that crossed the wire.\n *\n * JSON turns every `Date` into a string, and `ManagedSession.startedAt` is read\n * as a Date all over the server (`elapsedMs` arithmetic, `toISOString()`).\n * Without this the failure is a string where a Date is expected — which does\n * not throw, it produces `NaN` elapsed times and a crash only at the\n * `.toISOString()` call sites.\n */\nexport function reviveSession(raw: unknown): ManagedSession {\n  const s = { ...(raw as Record<string, unknown>) };\n  for (const field of SESSION_DATE_FIELDS) {\n    const value = s[field];\n    if (typeof value === \"string\") s[field] = new Date(value);\n  }\n  return s as unknown as ManagedSession;\n}\n\nexport function encodeMessage(message: HostRequest | HostMessage): string {\n  return `${JSON.stringify(message)}\\n`;\n}\n\n/**\n * Reassemble newline-delimited JSON from arbitrarily-chunked reads.\n *\n * A socket splits wherever it likes, so \"one chunk is one message\" holds right\n * up until a PTY burst makes it false. Stateful for exactly that reason: the\n * tail of a chunk is held until its newline arrives.\n */\nexport class LineDecoder {\n  private buffer = \"\";\n\n  push(chunk: string): string[] {\n    this.buffer += chunk;\n    const lines = this.buffer.split(\"\\n\");\n    // The final element is whatever followed the last newline — an empty string\n    // when the chunk ended cleanly, a partial message otherwise. Either way it\n    // is not a complete line yet.\n    this.buffer = lines.pop() ?? \"\";\n    return lines.filter((line) => line.length > 0);\n  }\n}\n","import type { ProviderName } from \"../providers\";\nimport type {\n  ManagedSession,\n  PTYManagerOptions,\n  SessionRunner,\n  StartFreshSessionOptions,\n  StartSessionOptions,\n  UserMessage,\n} from \"../types\";\nimport {\n  encodeMessage,\n  type HostEvent,\n  type HostHeartbeatState,\n  type HostMessage,\n  type HostRequest,\n  type HostRequestBody,\n  type HostSession,\n  type HostTransport,\n  type InputHistoryResult,\n  isHostEvent,\n  LineDecoder,\n  PTY_HOST_PROTOCOL_VERSION,\n  type ReplayResult,\n  reviveSession,\n  type StatusResult,\n  type SubscribeResult,\n} from \"./protocol\";\n\nexport class PtyHostProtocolMismatchError extends Error {\n  constructor(\n    readonly hostVersion: number,\n    readonly streamerVersion: number,\n  ) {\n    super(\n      `pty-host protocol ${hostVersion} is incompatible with streamer protocol ${streamerVersion}`,\n    );\n    this.name = \"PtyHostProtocolMismatchError\";\n  }\n}\n\nexport const HOST_HEARTBEAT_INTERVAL_MS = 10_000;\nexport const HOST_HEARTBEAT_REQUEST_TIMEOUT_MS = 5_000;\nexport const HOST_SHUTDOWN_REQUEST_TIMEOUT_MS = 1_000;\n\n/**\n * `SessionRunner` backed by an out-of-process pty-host (plan Phase 6a).\n *\n * `LiveSessionManager` selects this runner at boot when the `ptyHost` feature\n * flag is enabled; the default-off path keeps the in-process runners.\n *\n * **The mirror is the whole design problem.** `SessionRunner` is mostly\n * synchronous — `hasSession`, `getPid`, `listSessions`, `getOutput` and\n * `sendInput` all return values, not promises — and they are called from\n * request handlers that cannot await a socket round-trip. So the runner keeps a\n * local copy of session state, seeded by `status` on connect and kept current\n * by pushed events. Reads answer from the mirror; only mutations and the two\n * genuinely async methods cross the wire.\n *\n * The consequence worth stating: a mirror can be stale, and the honest failure\n * for a stale mirror is the same one an in-process runner gives for an unknown\n * session — throw. It must never invent a session, and it must never answer\n * \"no such session\" for one the host is holding, which is why `status` is\n * awaited before the runner is handed out (see `connect`).\n */\nexport class RemoteSessionRunner implements SessionRunner {\n  private transport: HostTransport;\n  private options: PTYManagerOptions;\n  private decoder = new LineDecoder();\n  private nextRequestId = 1;\n  private pending = new Map<\n    number,\n    {\n      resolve: (value: unknown) => void;\n      reject: (err: Error) => void;\n      timeout: ReturnType<typeof setTimeout> | null;\n    }\n  >();\n\n  /** The mirror. Rebuilt wholesale by `status`, patched by events. */\n  private sessions = new Map<string, ManagedSession>();\n  /** Ring buffers, fed by `output` events so `getOutput` stays synchronous. */\n  private output = new Map<string, string>();\n  private inputHistory = new Map<string, UserMessage[]>();\n  /** Fixed for a session's lifetime, so only spawn and status carry it. */\n  private pids = new Map<string, number | null>();\n  private closed = false;\n  private heartbeatTimer: ReturnType<typeof setInterval> | null = null;\n  private heartbeatInFlight = false;\n\n  /**\n   * The only supported way to build one: a runner whose mirror has not been\n   * seeded yet would answer `hasSession` with a confident, wrong `false` for\n   * every session the host is holding — which reads as \"the agent is gone\" and\n   * routes the user to start a new one.\n   */\n  static async connect(\n    transport: HostTransport,\n    options: PTYManagerOptions = {},\n  ): Promise<RemoteSessionRunner> {\n    const runner = new RemoteSessionRunner(transport, options);\n    const status = await runner.readStatus();\n    if (status.protocolVersion !== PTY_HOST_PROTOCOL_VERSION) {\n      try {\n        await runner.request({ type: \"shutdown-host\" }, HOST_SHUTDOWN_REQUEST_TIMEOUT_MS);\n      } catch (err) {\n        options.logger?.warn(\"[pty-host] incompatible host did not acknowledge shutdown\", {\n          event: \"pty_host.shutdown_failed\",\n          err,\n        });\n      } finally {\n        runner.dispose();\n      }\n      throw new PtyHostProtocolMismatchError(status.protocolVersion, PTY_HOST_PROTOCOL_VERSION);\n    }\n    const subscribed = (await runner.request({ type: \"subscribe\" })) as SubscribeResult;\n    runner.refreshMirror(status);\n    runner.restorePromptSnapshots({\n      ...status,\n      promptSnapshots: subscribed.promptSnapshots ?? status.promptSnapshots,\n    });\n    return runner;\n  }\n\n  private constructor(transport: HostTransport, options: PTYManagerOptions) {\n    this.transport = transport;\n    this.options = options;\n    transport.onLine((line) => this.handleLine(line));\n    transport.onClose(() => this.handleClose());\n  }\n\n  // ─── Transport plumbing ──────────────────────────────────────────\n\n  private handleLine(line: string): void {\n    for (const complete of this.decoder.push(line)) {\n      let message: HostMessage;\n      try {\n        message = JSON.parse(complete) as HostMessage;\n      } catch {\n        // A malformed line is the host's bug, not a reason to tear down every\n        // live session. Drop it and keep reading.\n        this.options.logger?.warn(\"[pty-host] dropped unparseable message\", {\n          event: \"pty_host.bad_message\",\n        });\n        continue;\n      }\n      if (isHostEvent(message)) {\n        this.handleEvent(message);\n        continue;\n      }\n      const waiter = this.pending.get(message.id);\n      if (!waiter) continue;\n      this.pending.delete(message.id);\n      if (waiter.timeout) clearTimeout(waiter.timeout);\n      if (message.ok) waiter.resolve(message.result);\n      else waiter.reject(new Error(message.error));\n    }\n  }\n\n  /**\n   * Fail every in-flight request when the socket drops.\n   *\n   * Without this each one stays pending forever and the caller — a session\n   * start, an input write — hangs rather than erroring. PR 9 adds reconnection;\n   * until then a dropped host is a hard failure that says so.\n   */\n  private handleClose(): void {\n    if (this.closed) return;\n    this.closed = true;\n    this.stopHeartbeat();\n    const err = new Error(\"pty-host connection closed\");\n    for (const waiter of this.pending.values()) {\n      if (waiter.timeout) clearTimeout(waiter.timeout);\n      waiter.reject(err);\n    }\n    this.pending.clear();\n  }\n\n  private request(body: HostRequestBody, timeoutMs?: number): Promise<unknown> {\n    if (this.closed) return Promise.reject(new Error(\"pty-host connection closed\"));\n    const id = this.nextRequestId++;\n    return new Promise((resolve, reject) => {\n      const timeout =\n        timeoutMs === undefined\n          ? null\n          : setTimeout(() => {\n              if (!this.pending.delete(id)) return;\n              reject(new Error(`${body.type} timed out after ${timeoutMs}ms`));\n            }, timeoutMs);\n      timeout?.unref?.();\n      this.pending.set(id, { resolve, reject, timeout });\n      this.transport.send(encodeMessage({ ...body, id } as HostRequest));\n    });\n  }\n\n  /**\n   * Fire-and-forget for the synchronous parts of `SessionRunner`.\n   *\n   * `sendKeys`, `cancel`, `killPid` and `putOnHold` all return void, so there is\n   * no channel to report a failure through even if we waited for one. The\n   * response is still consumed — an unhandled rejection would take the process\n   * down over a keystroke that failed to land.\n   */\n  private fireAndForget(body: HostRequestBody): void {\n    this.request(body).catch((err) => {\n      this.options.logger?.warn(\"[pty-host] request failed\", {\n        event: \"pty_host.request_failed\",\n        type: body.type,\n        err,\n      });\n    });\n  }\n\n  private async readStatus(): Promise<StatusResult> {\n    return (await this.request({ type: \"status\" })) as StatusResult;\n  }\n\n  private refreshMirror(status: StatusResult): void {\n    this.sessions = new Map();\n    this.pids = new Map();\n    for (const entry of status.sessions) {\n      const session = reviveSession(entry.session);\n      this.sessions.set(session.id, session);\n      this.pids.set(session.id, entry.pid);\n    }\n  }\n\n  private restorePromptSnapshots(status: StatusResult): void {\n    for (const snapshot of status.promptSnapshots ?? []) {\n      if (snapshot.kind === \"permission\") {\n        this.options.onPermissionChange?.(snapshot.sessionId, snapshot.gate, snapshot.occurrenceId);\n      } else {\n        this.options.onLiveQuestion?.(\n          snapshot.sessionId,\n          snapshot.questions,\n          snapshot.occurrenceId,\n        );\n      }\n    }\n  }\n\n  async heartbeat(\n    state: HostHeartbeatState,\n    timeoutMs: number = HOST_HEARTBEAT_REQUEST_TIMEOUT_MS,\n  ): Promise<void> {\n    await this.request({ type: \"heartbeat\", ...state }, timeoutMs);\n  }\n\n  startHeartbeat(\n    getState: () => HostHeartbeatState,\n    intervalMs: number = HOST_HEARTBEAT_INTERVAL_MS,\n  ): void {\n    this.stopHeartbeat();\n    const send = () => {\n      if (this.closed || this.heartbeatInFlight) return;\n      this.heartbeatInFlight = true;\n      void Promise.resolve()\n        .then(() => this.heartbeat(getState()))\n        .catch((err) => {\n          if (this.closed) return;\n          this.options.logger?.warn(\"[pty-host] heartbeat failed\", {\n            event: \"pty_host.heartbeat_failed\",\n            err,\n          });\n        })\n        .finally(() => {\n          this.heartbeatInFlight = false;\n        });\n    };\n    send();\n    this.heartbeatTimer = setInterval(send, intervalMs);\n    this.heartbeatTimer.unref?.();\n  }\n\n  private stopHeartbeat(): void {\n    if (this.heartbeatTimer) clearInterval(this.heartbeatTimer);\n    this.heartbeatTimer = null;\n  }\n\n  // ─── Events ──────────────────────────────────────────────────────\n\n  private handleEvent(event: HostEvent): void {\n    switch (event.event) {\n      case \"output\": {\n        this.output.set(event.sessionId, (this.output.get(event.sessionId) ?? \"\") + event.data);\n        this.options.onOutput?.(event.sessionId, event.data);\n        break;\n      }\n      case \"status-change\": {\n        const session = reviveSession(event.session);\n        if (session.status === \"idle\" && session.completedAt != null) {\n          this.sessions.delete(session.id);\n          this.pids.delete(session.id);\n          this.output.delete(session.id);\n          this.inputHistory.delete(session.id);\n        } else {\n          this.sessions.set(session.id, session);\n        }\n        this.options.onStatusChange?.(session);\n        break;\n      }\n      case \"ready\": {\n        const session = reviveSession(event.session);\n        this.sessions.set(session.id, session);\n        this.options.onReady?.(session);\n        break;\n      }\n      case \"permission-change\":\n        this.options.onPermissionChange?.(event.sessionId, event.gate, event.occurrenceId);\n        break;\n      case \"phase-change\":\n        this.options.onPhaseChange?.(event.sessionId, event.phase);\n        break;\n      case \"prompt-suggestion-change\":\n        this.options.onPromptSuggestionChange?.(event.sessionId, event.text);\n        break;\n      case \"live-question\":\n        this.options.onLiveQuestion?.(event.sessionId, event.questions, event.occurrenceId);\n        break;\n      case \"live-question-gone\":\n        this.options.onLiveQuestionGone?.(event.sessionId);\n        break;\n      case \"user-message\": {\n        const history = this.inputHistory.get(event.sessionId) ?? [];\n        history.push({ text: event.text, ts: event.ts });\n        this.inputHistory.set(event.sessionId, history);\n        this.options.onUserMessage?.(event.sessionId, event.text, event.ts);\n        break;\n      }\n      case \"exit\": {\n        // Drop it from the mirror, matching what the in-process runners do on\n        // exit — `handleExit` deletes from their map, which is what makes a\n        // held session read as absent rather than as `status: \"idle\"`.\n        this.sessions.delete(event.sessionId);\n        this.pids.delete(event.sessionId);\n        this.output.delete(event.sessionId);\n        this.inputHistory.delete(event.sessionId);\n        break;\n      }\n    }\n  }\n\n  // ─── SessionRunner ───────────────────────────────────────────────\n\n  async start(sessionId: string, options: StartSessionOptions): Promise<ManagedSession> {\n    const provider = (options as { provider?: ProviderName }).provider ?? \"claude-code\";\n    return this.adopt(await this.request({ type: \"spawn\", provider, sessionId, options }));\n  }\n\n  async startFresh(options: StartFreshSessionOptions): Promise<ManagedSession> {\n    const provider = (options as { provider?: ProviderName }).provider ?? \"claude-code\";\n    return this.adopt(await this.request({ type: \"spawn\", provider, sessionId: null, options }));\n  }\n\n  /**\n   * Take a spawn answer into the mirror.\n   *\n   * The pid lands here and nowhere else in the live path: `recordSessionSpawn`\n   * reads it immediately after start to write the durable registry row, and a\n   * null there costs the next boot its ability to probe whether the agent\n   * outlived us.\n   */\n  private adopt(raw: unknown): ManagedSession {\n    const entry = raw as HostSession;\n    const session = reviveSession(entry.session);\n    this.sessions.set(session.id, session);\n    this.pids.set(session.id, entry.pid);\n    return session;\n  }\n\n  /**\n   * Returns the mirror's promptCount, optimistically incremented.\n   *\n   * The interface is synchronous, so there is no way to return the host's\n   * authoritative count. The increment matches what an in-process runner does\n   * for the same call, and the next `status-change` event overwrites it — so a\n   * mirror that guessed wrong is corrected within one round trip rather than\n   * drifting.\n   */\n  sendInput(sessionId: string, input: string): number {\n    const session = this.requireSession(sessionId);\n    this.fireAndForget({ type: \"write\", sessionId, input });\n    session.promptCount += 1;\n    return session.promptCount;\n  }\n\n  sendKeys(sessionId: string, keys: string): void {\n    this.requireSession(sessionId);\n    this.fireAndForget({ type: \"keys\", sessionId, keys });\n  }\n\n  sendRawKeys(sessionId: string, keys: string): void {\n    this.requireSession(sessionId);\n    this.fireAndForget({ type: \"raw_keys\", sessionId, keys });\n  }\n\n  resize(sessionId: string, cols: number, rows: number): void {\n    // No requireSession: unlike keys, a resize for a session that just exited\n    // is meaningless rather than wrong, and SIGWINCH races exit by nature.\n    if (!Number.isInteger(cols) || !Number.isInteger(rows) || cols < 1 || rows < 1) return;\n    this.fireAndForget({ type: \"resize\", sessionId, cols, rows });\n  }\n\n  cancel(sessionId: string): void {\n    this.fireAndForget({ type: \"cancel\", sessionId });\n  }\n\n  killPid(pid: number): void {\n    this.fireAndForget({ type: \"kill\", pid });\n  }\n\n  // ponytail: `signal` is accepted for interface parity but not forwarded —\n  // the \"kill\" wire message has no signal field (PTY_HOST_PROTOCOL_VERSION 6),\n  // so a host-backed session always gets the host's existing SIGINT hold\n  // regardless of what's asked for. Bump the protocol if a forced SIGKILL\n  // needs to reach a session running under `ptyHost` (off by default).\n  putOnHold(sessionId: string, _signal: NodeJS.Signals = \"SIGINT\"): void {\n    this.fireAndForget({ type: \"kill\", sessionId, hold: true });\n    // Matches PTYManager.putOnHold, which deletes from its map — a held session\n    // must read as absent from the runner, not as an idle one it still owns.\n    this.sessions.delete(sessionId);\n    this.pids.delete(sessionId);\n  }\n\n  getOutput(sessionId: string): string {\n    this.requireSession(sessionId);\n    return this.output.get(sessionId) ?? \"\";\n  }\n\n  async getOutputLines(sessionId: string, maxLines: number): Promise<string[]> {\n    const result = (await this.request({ type: \"replay\", sessionId, maxLines })) as ReplayResult;\n    // The host renders from the xterm screen it owns; seed the local ring buffer\n    // from the same answer so a reconnecting streamer's getOutput is not empty.\n    if (typeof result.output === \"string\") this.output.set(sessionId, result.output);\n    return result.lines;\n  }\n\n  /**\n   * Synchronous, so it answers from the mirror rather than the host.\n   *\n   * Seeded lazily: `user-message` events append as they arrive, and a session\n   * this streamer did not start has none until `hydrateInputHistory` fetches\n   * them. Empty is the same answer an in-process runner gives for an unknown\n   * session, so a caller cannot tell \"none yet\" from \"not fetched\" — which is\n   * why the fetch is explicit rather than hidden behind this getter.\n   */\n  getInputHistory(sessionId: string): UserMessage[] {\n    return this.inputHistory.get(sessionId) ?? [];\n  }\n\n  /** Pull a session's recorded messages from the host into the mirror. */\n  async hydrateInputHistory(sessionId: string): Promise<UserMessage[]> {\n    const result = (await this.request({\n      type: \"input-history\",\n      sessionId,\n    })) as InputHistoryResult;\n    this.inputHistory.set(sessionId, result.history);\n    return result.history;\n  }\n\n  getPid(sessionId: string): number | null {\n    return this.pids.get(sessionId) ?? null;\n  }\n\n  getSession(sessionId: string): ManagedSession | null {\n    return this.sessions.get(sessionId) ?? null;\n  }\n\n  hasSession(sessionId: string): boolean {\n    return this.sessions.has(sessionId);\n  }\n\n  listSessions(): ManagedSession[] {\n    return [...this.sessions.values()];\n  }\n\n  /**\n   * Drops this streamer's connection and nothing else.\n   *\n   * Emphatically NOT the in-process `dispose()`, which signals every child. The\n   * entire point of the host is that its PTYs outlive the streamer, so tearing\n   * them down here would spend the feature to implement a method name.\n   */\n  dispose(): void {\n    this.handleClose();\n    this.transport.close();\n  }\n\n  private requireSession(sessionId: string): ManagedSession {\n    const session = this.sessions.get(sessionId);\n    if (!session) throw new Error(`Session not found: ${sessionId}`);\n    return session;\n  }\n}\n","import type { Terminal } from \"@xterm/headless\";\n\n// Claude Code's composer draws its \"❯\" prompt on the row between two full-width\n// ─ rules. A predicted next prompt (\"add type hints and a docstring\") is\n// painted into that row as SGR 2 (faint) text — `ESC[2m … ESC[22m`, verified\n// against Claude Code v2.1.278 — where text the user typed carries no dim flag.\n// The rendered *text* is identical either way, so the only thing that tells a\n// suggestion from real input is the cell attribute, which the text scrape\n// (translateToString) throws away.\nconst COMPOSER_RULE_RE = /^\\s*─{8,}\\s*$/;\nconst PROMPT_GLYPH = \"❯ \";\n// Older Claude Code builds put a dim example prompt in an empty composer\n// (`Try \"fix typecheck errors\"`, v2.1.6). That is a tip, not a prediction.\nconst PLACEHOLDER_TIP_RE = /^Try \"/;\n\n/**\n * Read the bottom-most composer row of a headless screen and return its text\n * iff every non-blank cell after the prompt glyph is dim; otherwise `null`.\n * Reads the visible viewport only, so scrollback (an old `❯ <user message>`\n * echo, which is never dim and never rule-bracketed) cannot match.\n */\nexport function readPromptSuggestion(term: Terminal): string | null {\n  const buf = term.buffer.active;\n  const text = (y: number) => buf.getLine(y)?.translateToString(true) ?? \"\";\n  for (let y = buf.baseY + term.rows - 2; y > buf.baseY; y--) {\n    const row = text(y);\n    if (!row.startsWith(PROMPT_GLYPH)) continue;\n    if (!COMPOSER_RULE_RE.test(text(y - 1)) || !COMPOSER_RULE_RE.test(text(y + 1))) continue;\n    const suggestion = row.slice(PROMPT_GLYPH.length).trim();\n    if (!suggestion || PLACEHOLDER_TIP_RE.test(suggestion)) return null;\n    const line = buf.getLine(y);\n    // By column, not string index: a wide glyph spans two cells but one char.\n    for (let x = PROMPT_GLYPH.length; x < term.cols; x++) {\n      const cell = line?.getCell(x);\n      if (cell?.getChars().trim() && !cell.isDim()) return null;\n    }\n    return suggestion;\n  }\n  return null;\n}\n","/**\n * Derive a session title from its first user message.\n *\n * Mirrors `@threadbase-sh/scanner`'s `deriveSessionNameFromFirstMessage`\n * (first line of the first user message, truncated) so a live session gets\n * the same title a resumed/scanned one would compute from the same JSONL —\n * without waiting on the scanner or cache to observe the line.\n */\nexport function deriveSessionName(firstMessageText: string): string {\n  const firstLine = firstMessageText.split(\"\\n\", 1)[0]?.trim() ?? \"\";\n  return firstLine.slice(0, 80);\n}\n","import { randomUUID } from \"crypto\";\nimport { existsSync } from \"fs\";\nimport { basename } from \"path\";\nimport { buildFlagArgs, buildSettingsJson } from \"./claude-flags\";\nimport { getLogger, type Logger } from \"./logger\";\nimport { clearClaudeExeCache, resolveClaudeExe } from \"./platform\";\nimport { CLAUDE_CODE_PROVIDER } from \"./providers\";\nimport { createScreen, type InternalSession, loadPty, PTY_ROWS, stripAnsi } from \"./pty-shared\";\nimport {\n  detectGateScreen,\n  detectPickerScreen,\n  hasPermissionOsc,\n  hasWaitingForInputOsc,\n  type PermissionGate,\n  permissionContentKey,\n  scrapePermissionGate,\n} from \"./services/questions/detectPermissionGate\";\nimport { readPromptSuggestion } from \"./services/questions/detectPromptSuggestion\";\nimport {\n  detectQuestionFromScreen,\n  questionContentKey,\n} from \"./services/questions/detectQuestionFromScreen\";\nimport { detectShellPrompt } from \"./services/questions/detectShellPrompt\";\nimport { detectStartupChoiceGate } from \"./services/questions/detectStartupChoiceGate\";\nimport { parseAgentPhase } from \"./services/questions/parseAgentPhase\";\nimport { isPermissionAnswer } from \"./services/questions/permissionAnswerKeys\";\nimport type {\n  AgentPhase,\n  ManagedSession,\n  PTYManagerOptions,\n  SessionRunner,\n  StartFreshSessionOptions,\n  StartSessionOptions,\n  StatusSource,\n  UserMessage,\n} from \"./types\";\nimport { debounce } from \"./utils/debounce\";\nimport { deriveSessionName } from \"./utils/deriveSessionName\";\n\nconst OUTPUT_BUFFER_MAX = 65536;\n\n// Cap on recorded user messages per session (drop oldest). Bounds memory on a\n// long-lived session; replay only needs the recent tail for ownership.\nconst INPUT_HISTORY_MAX = 50;\n\n// PTY geometry, the render terminal, node-pty loading, the session shape and\n// ANSI stripping are shared with codex-pty-runner.ts — see pty-shared.ts.\n\n// Markers that indicate Claude has reached an interactive prompt and is ready\n// for user input. The TUI has at least two startup variants:\n//   - \"Tips\" banner: renders a box with corner ╭ characters\n//   - Connector/MCP-status splash: no box at all; shows ❯ as the prompt arrow\n// We treat either marker in a chunk as \"ready\". False-positives are harmless —\n// the worst case is flushing queued input slightly early, which Claude buffers.\nconst CLAUDE_PROMPT_MARKERS = [\"╭\", \"❯\"] as const;\n\n// Claude's turn signal: OSC 9;4 (terminal progress) — `9;4;3` when a turn\n// starts, `9;4;0` exactly when it ends, including across a permission gate\n// (verified on Claude Code v2.1.278). Mid-conversation the `❯` input box stays\n// painted for the whole turn, so the marker alone flipped the session to\n// waiting_input ~50ms after every submit and the \"waiting for your input\" push\n// fired as the agent started. While a turn is open the markers are ignored.\n// biome-ignore lint/suspicious/noControlCharactersInRegex: matching the literal OSC 9;4 escape\nconst CLAUDE_PROGRESS_RE = /\\x1b\\]9;4;(\\d)/g;\n\n// A submit opens the turn before Claude's `9;4;3` arrives (~300ms later),\n// because the echo of the pasted prompt already carries `❯`. A submit that\n// starts no turn at all (a slash command) never sends one, so the optimistic\n// open lapses after this long and readiness is re-checked from the screen.\nconst TURN_START_GRACE_MS = 3_000;\n\n// Re-run ready/prompt detection this long after the PTY goes quiet, instead of\n// waiting for another chunk (which may never come if Claude is blocked on a\n// prompt) or the full CLAUDE_READY_FALLBACK_MS. 500ms was picked from real\n// [pty.chunk] gap logs: p50/p75 inter-chunk gaps while status=running are\n// 31ms/467ms, so 500ms clears normal streaming pauses without adding\n// meaningful perceived latency (see docs/postmortems or session notes for the\n// gapMs sample this was based on).\nconst QUIET_DETECT_MS = 500;\n\n// Raw tail carried across chunks for the OSC 777 regexes. node-pty chunk\n// boundaries are arbitrary, and the ~54-char notify escape matched NEITHER\n// half when split. 128 chars covers the escape with margin, tmux-wrapped or\n// not.\nconst OSC_TAIL_CHARS = 128;\n\n// Ceiling on unsolicited rendered-screen scrapes: a chunk's arrival alone\n// may trigger a full detection pass at most this often. Exists because the\n// gate paint has NO reliable chunk-level signal (the TUI paints\n// cursor-addressed fragments and the box gutter defeats the hint regex)\n// while Claude debounces its OSC 777 notify ~6s — see\n// docs/superpowers/specs/2026-08-08-paint-time-gate-detection-design.md.\n// 300ms = half the blink cadence of a waiting gate (~450-620ms observed), so\n// worst-case added card latency is one tick and scrape work is ≤ ~3/s per\n// active session (idle sessions emit no chunks, so they never scrape).\nconst SCRAPE_THROTTLE_MS = 300;\n\n// Flat backstop armed at spawn, mirroring CODEX_READY_FALLBACK_MS. It replaces\n// a chunk-gated 10s check that could only fire if another chunk happened to\n// arrive — useless for the case it was written for, a boot that falls silent\n// without ever painting a marker. A timer fires either way.\n//\n// The quiet-checker cannot fill this role: a resume replaying a large JSONL is\n// quiet for well over QUIET_DETECT_MS *before* the TUI reads stdin, so treating\n// that silence as readiness disarms the input queue during exactly the window\n// it exists to protect. Must stay below server.ts START_READY_TIMEOUT_MS (10s)\n// so a start request resolves on our verdict rather than racing its timeout.\nconst CLAUDE_READY_FALLBACK_MS = 8_000;\n\n// Build the two byte sequences for a paste-then-submit. We deliberately split\n// the paste body and the trailing \\r into two separate PTY writes (see\n// writeSubmit() below) so Claude's TUI gets one event-loop tick to process the\n// paste (clear input buffer, render `Pasting…`) before Enter arrives.\n//\n// Why bracketed paste at all: Claude's TUI enables bracketed paste mode\n// (\\x1b[?2004h) at startup. Content between \\x1b[200~ and \\x1b[201~ is\n// committed as a single insertion without triggering autocomplete or key\n// bindings. Without this wrap an input like \"@<path>\" opens the mention\n// picker and the trailing \\r gets consumed as \"accept completion\" rather\n// than \"submit\" — see docs/postmortems/2026-05-20-pty-bracketed-paste-fix.md.\n//\n// Why split paste and \\r: on 2026-05-27 a follow-up stuck session\n// (39118d3e) showed the bracketed-paste wrap was being written but the\n// trailing \\r still didn't submit — Claude's TUI was mid-render of a\n// startup status banner (\"Update available\", \"192 skill descriptions\n// dropped\", etc.) when the bytes arrived, and the whole chunk landed in\n// the wrong handler context. Splitting the write lets the TUI ingest the\n// paste in one tick (the data event runs after current render finishes)\n// before the next tick delivers the Enter.\nfunction buildPasteBytes(input: string): string {\n  return `\\x1b[200~${input}\\x1b[201~`;\n}\n\nconst SUBMIT_BYTES = \"\\r\";\n\n// Delay between the paste write and the submit \\r. We need to yield the event\n// loop at least once so Claude's TUI processes the paste before Enter lands;\n// a small real-time delay is more robust against the TUI batching renders\n// across multiple data events. Kept tiny so user-perceived latency is nil.\nconst SUBMIT_DELAY_MS = 16;\n\n// writeSubmit() polls in SUBMIT_DELAY_MS steps and only writes \\r once the PTY\n// has been quiet (no chunk) for a full SUBMIT_DELAY_MS — see writeSubmit() for\n// the redraw race this closes. Cap the wait so a genuinely wedged/silent PTY\n// still gets its \\r rather than hanging forever.\nconst SUBMIT_MAX_WAIT_MS = 500;\n\n// Build the environment for a spawned `claude` process. The Anthropic API key\n// is injected only here — never exported into the streamer's global process\n// env — so it does not leak into unrelated child processes. CLAUDE_API_KEY\n// (the Fly secret) is mapped to ANTHROPIC_MODEL's sibling, ANTHROPIC_API_KEY,\n// which the CLI reads. If CLAUDE_API_KEY is unset, nothing is added and the CLI\n// falls back to its own auth (e.g. an interactive login).\nfunction buildSpawnEnv(): Record<string, string> {\n  const env = { ...process.env } as Record<string, string>;\n  if (env.CLAUDE_API_KEY) {\n    env.ANTHROPIC_API_KEY = env.CLAUDE_API_KEY;\n  }\n  // If the streamer itself was launched from inside a Claude Code session,\n  // it inherits that session's markers (CLAUDECODE, CLAUDE_CODE_SESSION_ID,\n  // CLAUDE_CODE_CHILD_SESSION, ...). A spawned `claude` seeing them treats\n  // itself as a nested child session and never persists a project JSONL —\n  // the session \"works\" in the terminal but has no conversation to stream.\n  for (const key of Object.keys(env)) {\n    if (key === \"CLAUDECODE\" || key.startsWith(\"CLAUDE_CODE_\")) {\n      delete env[key];\n    }\n  }\n  // Claude Code reads TERM to decide whether the terminal can render its Unicode\n  // chrome, and with TERM absent it paints ASCII fallbacks: `>` for the composer\n  // prompt instead of `❯`, and `>` for the gate selection cursor. The composer\n  // one is the damaging half — CLAUDE_PROMPT_MARKERS is `[\"╭\", \"❯\"]`, so with\n  // neither glyph ever painted `hasPromptMarker` is permanently false, a session\n  // never leaves `running`, and mobile shows \"Working\" for a session that has\n  // been idle for hours.\n  //\n  // TERM is absent here for the normal deployment, not an exotic one: a\n  // supervised streamer (Task Scheduler / launchd / systemd) inherits no TERM of\n  // its own, and node-pty's `name` option sets TERM on POSIX but does not reach\n  // the child through Windows ConPTY. So the spawn declares `xterm-256color` in\n  // `name` while the child sees no TERM at all — this makes the two agree.\n  //\n  // Measured A/B, same binary, same `name`, same cwd, only the env differing:\n  // TERM absent -> the composer paints `> `; TERM=xterm-256color -> `❯ `.\n  // (`WT_SESSION` flips it too, which is why a hand-run `claude` in Windows\n  // Terminal never showed this and only the supervised spawn did.)\n  if (!env.TERM) {\n    env.TERM = \"xterm-256color\";\n  }\n  return env;\n}\n\nexport class PTYManager implements SessionRunner {\n  private sessions = new Map<string, InternalSession>();\n  private onOutput: PTYManagerOptions[\"onOutput\"];\n  private onStatusChange: PTYManagerOptions[\"onStatusChange\"];\n  private onReady: PTYManagerOptions[\"onReady\"];\n  private onPermissionChange: PTYManagerOptions[\"onPermissionChange\"];\n  private onPhaseChange: PTYManagerOptions[\"onPhaseChange\"];\n  private onPromptSuggestionChange: PTYManagerOptions[\"onPromptSuggestionChange\"];\n  private onLiveQuestion: PTYManagerOptions[\"onLiveQuestion\"];\n  private onLiveQuestionGone: PTYManagerOptions[\"onLiveQuestionGone\"];\n  private onUserMessage: PTYManagerOptions[\"onUserMessage\"];\n  // Per-session permission-gate state: the gate currently open on a session's\n  // screen. Set between an OSC 777 / paint-time claim (gate open) and the next\n  // prompt-ready without a fresh 777 (gate closed). Prevents re-broadcasting\n  // open/close on every chunk. Holds the gate itself rather than just the id so\n  // sendKeys can tell whether the bytes it is writing are that gate's answer.\n  private permissionOpen = new Map<string, PermissionGate>();\n  // Last chunk's raw tail per session — prepended to the next chunk before\n  // the OSC regex test so a split escape still matches. Consumed on match.\n  private oscTail = new Map<string, string>();\n  // Open turn per session, from OSC 9;4: \"submitted\" between our submit and\n  // Claude's 9;4;3, \"working\" after it. Absent = no turn open.\n  private turnOpen = new Map<string, \"submitted\" | \"working\">();\n  // Sessions whose Claude has emitted OSC 9;4 at all — an older CLI that never\n  // does keeps the marker-only behaviour instead of waiting on a signal.\n  private progressSeen = new Set<string>();\n  // An OSC 9;4 escape cut off at the end of the previous chunk, if any.\n  private progressTail = new Map<string, string>();\n  // When the last full detection pass ran per session (any trigger) — the\n  // clock the SCRAPE_THROTTLE_MS ceiling is measured against.\n  private lastDetectAt = new Map<string, number>();\n  // Content key of the last AskUserQuestion broadcast from the rendered screen,\n  // per session — de-dupes the same menu firing on consecutive repaints.\n  private lastScreenQuestionKey = new Map<string, string>();\n  // Content key of the last unstructured shell prompt (detectShellPrompt)\n  // broadcast per session — present between open and resolve so we can clear it\n  // on a prompt-ready/marker return and de-dupe consecutive repaints. Modelled\n  // on permissionOpen but keyed by content (a shell prompt has no OSC trigger).\n  private shellPromptOpen = new Map<string, string>();\n  // Content key (permissionContentKey, cursor excluded — see arm 3) of the\n  // gate that was still painted on screen when arm 2 closed it. Suppresses\n  // arm 3 re-claiming that same box from a later trigger-less/throttled pass\n  // before Claude erases it — otherwise the paint-time claim reopens the\n  // card it just closed. Cleared once detectGateScreen sees the box is gone,\n  // so a genuinely new (even content-identical) gate is claimed normally.\n  private closedGateKey = new Map<string, string>();\n  // Tracks sessions (both fresh and resume) whose PTY has spawned but Claude\n  // hasn't yet reached an interactive prompt — i.e. onReady hasn't fired.\n  private pendingReady = new Set<string>();\n  // Inputs received via sendInput() while the session was still in pendingReady.\n  // Flushed in arrival order once Claude reaches its first prompt. Without this,\n  // input written into the raw PTY mid-boot is consumed by Claude's startup TUI\n  // (welcome banner / first-run modals on fresh, JSONL restore on resume) and\n  // silently lost — the \"dot bug\".\n  private queuedInputs = new Map<string, string[]>();\n  private log: Logger;\n  // Timestamp of first PTY chunk per session; used for the [pty.ready] elapsed\n  // measurement so a slow boot is visible in the logs.\n  private firstChunkAt = new Map<string, number>();\n  // Per-session chunk counter and last-chunk timestamp. Diagnostic-only,\n  // feeds the [pty.chunk] log lines so we can trace whether Claude responded\n  // to a given input or fell silent. Reset on dispose().\n  private chunkIndex = new Map<string, number>();\n  private lastChunkAt = new Map<string, number>();\n  // Per-session debounced \"went quiet\" checker, re-armed on every chunk. Fires\n  // QUIET_DETECT_MS after the last chunk so ready/prompt detection doesn't\n  // wait for another chunk that may never arrive (Claude blocked on input).\n  private quietCheckers = new Map<string, ReturnType<typeof debounce>>();\n  // Per-session flat backstop from the first chunk (CLAUDE_READY_FALLBACK_MS).\n  private readyFallbackTimers = new Map<string, NodeJS.Timeout>();\n  // In-flight start()/startFresh() calls keyed by sessionId. A second\n  // concurrent resume for the same session (double-tap, client retry) awaits\n  // the first call's promise instead of spawning a duplicate PTY (CRITICAL #3).\n  private startPromises = new Map<string, Promise<ManagedSession>>();\n\n  constructor(options: PTYManagerOptions = {}) {\n    this.onOutput = options.onOutput;\n    this.onStatusChange = options.onStatusChange;\n    this.onReady = options.onReady;\n    this.onPermissionChange = options.onPermissionChange;\n    this.onPhaseChange = options.onPhaseChange;\n    this.onPromptSuggestionChange = options.onPromptSuggestionChange;\n    this.onLiveQuestion = options.onLiveQuestion;\n    this.onLiveQuestionGone = options.onLiveQuestionGone;\n    this.onUserMessage = options.onUserMessage;\n    this.log = options.logger ?? getLogger(\"pty\");\n  }\n\n  // Resume an existing Claude conversation. sessionId is the JSONL UUID.\n  //\n  // options.permissionMode defaults to `acceptEdits` — the safe default that\n  // auto-approves file edits while still prompting for shell commands. All six\n  // Claude CLI modes are accepted (see PERMISSION_MODES in claude-flags.ts).\n  //\n  // On the bypass modes: `bypassPermissions`/`dontAsk` DO trigger a blocking\n  // \"Bypass Permissions mode\" warning menu at boot (\"1. No, exit\" /\n  // \"2. Yes, I accept\") which would strand the PTY and leave mobile on an empty\n  // screen. buildSettingsJson() suppresses it by adding\n  // `skipDangerousModePermissionPrompt` to the `--settings` blob for exactly\n  // those modes — probe-verified on Claude Code v2.1.218. We never pass\n  // `--dangerously-skip-permissions`; bypass is requested via --permission-mode.\n  // (The other first-run gates — onboarding/theme, workspace trust,\n  // custom-API-key — are cleared by the seeded ~/.claude.json in\n  // docker/entrypoint.sh.) startFresh() uses the same default for the same reason.\n  async start(sessionId: string, options: StartSessionOptions): Promise<ManagedSession> {\n    // Guard the check-then-spawn: a second concurrent resume for the same\n    // sessionId (double-tap, client retry — server.ts's own hasSession check\n    // has an await gap before it calls start()) must not race past both\n    // checks and spawn a second PTY. Returning the first call's in-flight\n    // promise serializes the spawn; an already-running session short-circuits\n    // without touching doStart at all.\n    const existing = this.sessions.get(sessionId);\n    if (existing) return toPublicSession(existing);\n\n    const inFlight = this.startPromises.get(sessionId);\n    if (inFlight) return inFlight;\n\n    const promise = this.doStart(sessionId, options).finally(() => {\n      this.startPromises.delete(sessionId);\n    });\n    this.startPromises.set(sessionId, promise);\n    return promise;\n  }\n\n  private async doStart(sessionId: string, options: StartSessionOptions): Promise<ManagedSession> {\n    const nodePty = await loadPty();\n    const projectName = options.projectName ?? basename(options.projectPath);\n\n    const permissionMode = options.permissionMode ?? \"acceptEdits\";\n    const args = [\n      \"--permission-mode\",\n      permissionMode,\n      \"--settings\",\n      buildSettingsJson(permissionMode),\n      \"--model\",\n      options.model ?? \"sonnet\",\n      \"--effort\",\n      options.effort ?? \"low\",\n      \"--resume\",\n      sessionId,\n    ];\n    // Allowlisted per-server flags, then the free-text escape hatch — last so it\n    // can override anything above it.\n    args.push(...buildFlagArgs(options.claudeFlags, options.claudeExtraArgs));\n\n    let proc: ReturnType<typeof nodePty.spawn>;\n    try {\n      proc = nodePty.spawn(resolveClaudeExe(), args, {\n        name: \"xterm-256color\",\n        cols: 120,\n        rows: 40,\n        cwd: options.projectPath,\n        env: buildSpawnEnv(),\n      });\n    } catch (err) {\n      // The cached path resolved to something CreateProcess can't launch\n      // (stale after a reinstall, or a since-fixed bad match) — clear it so\n      // the next start/resume attempt re-resolves instead of repeating the\n      // same failure indefinitely.\n      clearClaudeExeCache();\n      throw err;\n    }\n\n    const session: InternalSession = {\n      id: sessionId,\n      provider: CLAUDE_CODE_PROVIDER,\n      projectPath: options.projectPath,\n      projectName,\n      branch: options.branch ?? \"\",\n      ...(options.effort != null && { effort: options.effort }),\n      status: \"running\",\n      statusSource: \"spawn\",\n      statusUpdatedAt: new Date(),\n      startedAt: new Date(),\n      completedAt: null,\n      promptCount: 0,\n      lastOutput: \"\",\n      process: proc,\n      outputBuffer: Buffer.alloc(0),\n      screen: createScreen(),\n      inputHistory: [],\n    };\n\n    this.sessions.set(sessionId, session);\n    // Resume re-uses the same boot path as a fresh launch: --resume replays the\n    // JSONL into Claude's TUI, which can take several seconds before the prompt\n    // is reachable. Until then, raw pty.write() bytes land in the boot UI and\n    // are swallowed (the \"dot bug\" — first message vanishes, second message\n    // appears to trigger both). Same pendingReady + flush gating as startFresh.\n    this.pendingReady.add(sessionId);\n    this.armReadyFallback(sessionId);\n\n    proc.onData((data: string) => {\n      this.handleOutput(sessionId, data);\n    });\n\n    proc.onExit(({ exitCode }: { exitCode: number }) => {\n      this.pendingReady.delete(sessionId);\n      this.handleExit(sessionId, exitCode);\n    });\n\n    return toPublicSession(session);\n  }\n\n  // Start a brand-new Claude session. A stable UUID is generated here and passed\n  // to Claude via --session-id so the JSONL filename matches from the start.\n  // onReady fires once Claude reaches its first prompt (waiting_input).\n  async startFresh(options: StartFreshSessionOptions): Promise<ManagedSession> {\n    const nodePty = await loadPty();\n    const sessionId = randomUUID();\n    const projectName = options.projectName ?? basename(options.projectPath);\n\n    // `--permission-mode` defaults to acceptEdits for the same reason as start()\n    // above. Guarded by __tests__/pty-ready-detection.test.ts.\n    const permissionMode = options.permissionMode ?? \"acceptEdits\";\n    const args = [\n      \"--permission-mode\",\n      permissionMode,\n      \"--settings\",\n      buildSettingsJson(permissionMode),\n      \"--model\",\n      options.model ?? \"sonnet\",\n      \"--effort\",\n      options.effort ?? \"low\",\n      \"--session-id\",\n      sessionId,\n    ];\n    if (options.systemPrompt) {\n      args.push(\"--system-prompt\", options.systemPrompt);\n    }\n    // Allowlisted per-server flags, then the free-text escape hatch — last so it\n    // can override anything above it.\n    args.push(...buildFlagArgs(options.claudeFlags, options.claudeExtraArgs));\n\n    let proc: ReturnType<typeof nodePty.spawn>;\n    try {\n      proc = nodePty.spawn(resolveClaudeExe(), args, {\n        name: \"xterm-256color\",\n        cols: 120,\n        rows: 40,\n        cwd: options.projectPath,\n        env: buildSpawnEnv(),\n      });\n    } catch (err) {\n      // See the analogous catch in doStart() above.\n      clearClaudeExeCache();\n      throw err;\n    }\n\n    const session: InternalSession = {\n      id: sessionId,\n      provider: CLAUDE_CODE_PROVIDER,\n      projectPath: options.projectPath,\n      projectName,\n      branch: \"\",\n      ...(options.effort != null && { effort: options.effort }),\n      status: \"running\",\n      statusSource: \"spawn\",\n      statusUpdatedAt: new Date(),\n      startedAt: new Date(),\n      completedAt: null,\n      promptCount: 0,\n      lastOutput: \"\",\n      process: proc,\n      outputBuffer: Buffer.alloc(0),\n      screen: createScreen(),\n      inputHistory: [],\n    };\n\n    this.sessions.set(sessionId, session);\n    this.pendingReady.add(sessionId);\n    this.armReadyFallback(sessionId);\n\n    proc.onData((data: string) => {\n      this.handleOutput(sessionId, data);\n    });\n\n    proc.onExit(({ exitCode }: { exitCode: number }) => {\n      this.pendingReady.delete(sessionId);\n      this.handleExit(sessionId, exitCode);\n    });\n\n    return toPublicSession(session);\n  }\n\n  // Write raw key bytes directly to the PTY without bracketed-paste wrapping.\n  // Use for control sequences (arrow keys, Enter) that must not be quoted.\n  sendKeys(sessionId: string, keys: string): void {\n    const session = this.sessions.get(sessionId);\n    if (!session) throw new Error(`Session not found: ${sessionId}`);\n    if (session.status === \"idle\") {\n      throw new Error(`Session is idle (no active PTY): ${sessionId}`);\n    }\n    if (session.status === \"waiting_input\") {\n      session.status = \"running\";\n      // Observed by construction: we are the ones writing the input.\n      session.statusSource = \"user-input\";\n      session.statusUpdatedAt = new Date();\n      // Sending anything consumes the suggestion — don't wait for a scrape.\n      this.setPromptSuggestion(sessionId, session, null);\n      this.onStatusChange?.(toPublicSession(session));\n    }\n    this.log.info(`[pty.keys.write] ${sessionId.slice(0, 8)} bytes=${keys.length}`, {\n      event: \"pty.keys_write\",\n      sessionId,\n      byteLen: keys.length,\n    });\n    session.process.write(keys);\n    session.lastActivityAt = new Date();\n    // These bytes answer the gate this session has open, so the box is gone as\n    // soon as Claude reads them. The detector cannot see that: it closes on the\n    // end-of-turn OSC or a prompt marker, and an approved tool run produces\n    // neither until the whole turn ends — which left the card up for the rest of\n    // the turn. Close it here, the one choke point every *card* answer goes\n    // through, so `permissionOpen` and the server's `pendingPermission` retire\n    // together (onPermissionChange(null) is what broadcasts permission_cancelled).\n    //\n    // NOT every way a gate gets answered: `/input` splits on the body field, so\n    // a `{input}` composer send reaches sendInput() instead and still closes the\n    // old way, at end of turn. That is deliberate — pattern-matching composer\n    // prose into a gate answer is the false positive this rule exists to avoid.\n    //\n    // Optimistic by design: `closedGateKey` is deliberately NOT set here. If the\n    // keystroke doesn't take and the box stays painted, the paint-time claim\n    // reopens the card on the next pass — a gate that is still on screen must\n    // never stay hidden. If it did take, the box is gone and nothing reclaims it.\n    const openGate = this.permissionOpen.get(sessionId);\n    if (openGate && isPermissionAnswer(openGate, keys)) {\n      this.permissionOpen.delete(sessionId);\n      this.onPermissionChange?.(sessionId, null);\n    }\n  }\n\n  // Navigation keys move a focused picker without submitting user input. Keep\n  // its waiting_input status intact so clients retain the prompt identity for\n  // a multi-key sequence (for example Down, Down, Enter).\n  sendRawKeys(sessionId: string, keys: string): void {\n    const session = this.sessions.get(sessionId);\n    if (!session) throw new Error(`Session not found: ${sessionId}`);\n    if (session.status === \"idle\") throw new Error(`Session is idle (no active PTY): ${sessionId}`);\n    this.log.info(`[pty.raw_keys.write] ${sessionId.slice(0, 8)} bytes=${keys.length}`, {\n      event: \"pty.raw_keys_write\",\n      sessionId,\n      byteLen: keys.length,\n    });\n    session.process.write(keys);\n    session.lastActivityAt = new Date();\n  }\n\n  sendInput(sessionId: string, input: string): number {\n    const session = this.sessions.get(sessionId);\n    if (!session) throw new Error(`Session not found: ${sessionId}`);\n    if (session.status === \"idle\") {\n      throw new Error(`Session is idle (no active PTY): ${sessionId}`);\n    }\n    // Claude is still booting (TUI not yet at first prompt). Writing into the\n    // raw PTY now would let the startup UI swallow the keystrokes. Queue and\n    // flush in flushQueuedInputs() once the prompt marker fires.\n    if (this.pendingReady.has(sessionId)) {\n      const queue = this.queuedInputs.get(sessionId) ?? [];\n      queue.push(input);\n      this.queuedInputs.set(sessionId, queue);\n      session.lastActivityAt = new Date();\n      session.promptCount++;\n      // Surface that input is being held because Claude hasn't yet emitted a\n      // prompt marker. If you see this without a corresponding pty.ready\n      // follow-up, the marker detection has regressed.\n      this.log.warn(\n        `[pty.input.queued] ${sessionId.slice(0, 8)} promptCount=${session.promptCount} queueLen=${queue.length}`,\n        {\n          event: \"pty.input_queued\",\n          sessionId,\n          promptCount: session.promptCount,\n          queueLen: queue.length,\n          inputLen: input.length,\n        },\n      );\n      return session.promptCount;\n    }\n    if (session.status === \"waiting_input\") {\n      session.status = \"running\";\n      // Observed by construction: we are the ones writing the input.\n      session.statusSource = \"user-input\";\n      session.statusUpdatedAt = new Date();\n      // Sending anything consumes the suggestion — don't wait for a scrape.\n      this.setPromptSuggestion(sessionId, session, null);\n      this.onStatusChange?.(toPublicSession(session));\n    }\n    this.openTurnOnSubmit(sessionId);\n    this.writeSubmit(sessionId, session, input, \"direct\", session.promptCount + 1);\n    session.lastActivityAt = new Date();\n    session.promptCount++;\n    return session.promptCount;\n  }\n\n  // Two-step paste-then-submit. Writes the bracketed-paste body, then waits\n  // for the PTY to go quiet before writing \\r. See buildPasteBytes() for why\n  // the split matters.\n  //\n  // The wait is quiescence-based, not a flat delay: a fixed SUBMIT_DELAY_MS\n  // timer (the original fix) still races a TUI that's mid-redraw of its own\n  // output (e.g. re-painting right after posting a question) when the paste\n  // lands — the timer can elapse and fire \\r while the TUI is still busy,\n  // and that \\r gets absorbed by the redraw instead of submitting (see\n  // 2026-07 session 14dda340: a \"Yes\" reply was accepted into the input line\n  // but never landed as a submitted JSONL turn). Polling in SUBMIT_DELAY_MS\n  // steps and only submitting once lastChunkAt hasn't advanced for a full\n  // step gives the TUI as many extra ticks as it needs, capped at\n  // SUBMIT_MAX_WAIT_MS so a silent/wedged PTY still gets its \\r eventually.\n  private writeSubmit(\n    sessionId: string,\n    session: InternalSession,\n    input: string,\n    path: \"direct\" | \"flush\",\n    promptCount: number,\n  ): void {\n    this.recordUserMessage(session, input);\n    const pasteBytes = buildPasteBytes(input);\n    this.log.info(\n      `[pty.input.write] ${sessionId.slice(0, 8)} promptCount=${promptCount} bytes=${pasteBytes.length}`,\n      {\n        event: \"pty.input_write\",\n        sessionId,\n        promptCount,\n        byteLen: pasteBytes.length,\n        path,\n        phase: \"paste\",\n      },\n    );\n    const pasteAt = Date.now();\n    session.process.write(pasteBytes);\n\n    const trySubmit = () => {\n      const current = this.sessions.get(sessionId);\n      if (!current || current !== session) return;\n      const now = Date.now();\n      const lastChunk = this.lastChunkAt.get(sessionId) ?? pasteAt;\n      const quiet = now - lastChunk >= SUBMIT_DELAY_MS;\n      const timedOut = now - pasteAt >= SUBMIT_MAX_WAIT_MS;\n      if (!quiet && !timedOut) {\n        setTimeout(trySubmit, SUBMIT_DELAY_MS);\n        return;\n      }\n      this.log.info(\n        `[pty.input.submit] ${sessionId.slice(0, 8)} promptCount=${promptCount} digest=\\\\r waitedMs=${now - pasteAt} timedOut=${timedOut}`,\n        {\n          event: \"pty.input_write\",\n          sessionId,\n          promptCount,\n          byteLen: SUBMIT_BYTES.length,\n          digest: \"\\\\r\",\n          path,\n          phase: \"submit\",\n          waitedMs: now - pasteAt,\n          timedOut,\n        },\n      );\n      current.process.write(SUBMIT_BYTES);\n    };\n    setTimeout(trySubmit, SUBMIT_DELAY_MS);\n  }\n\n  // Drain any inputs that were sent while the session was still pendingReady,\n  // writing them in arrival order now that Claude is at its prompt.\n  private flushQueuedInputs(sessionId: string): void {\n    const queue = this.queuedInputs.get(sessionId);\n    if (!queue || queue.length === 0) return;\n    this.queuedInputs.delete(sessionId);\n    const session = this.sessions.get(sessionId);\n    if (!session) return;\n    this.log.info(`[pty.flush] ${sessionId.slice(0, 8)} flushing ${queue.length} queued input(s)`, {\n      event: \"pty.flush_queued\",\n      sessionId,\n      queueLen: queue.length,\n    });\n    // Chain queued inputs serially: each writeSubmit() defers its \\r by\n    // SUBMIT_DELAY_MS, and we further stagger subsequent inputs by 2x the\n    // delay so paste/submit pairs don't interleave on the wire. Two queued\n    // inputs is rare in practice (user tapped Send twice during the brief\n    // boot window), but ordering must still produce two distinct submits.\n    queue.forEach((input, i) => {\n      const writeAt = i * SUBMIT_DELAY_MS * 2;\n      if (writeAt === 0) {\n        this.writeSubmit(sessionId, session, input, \"flush\", session.promptCount);\n      } else {\n        setTimeout(() => {\n          const current = this.sessions.get(sessionId);\n          if (!current || current !== session) return;\n          this.writeSubmit(sessionId, session, input, \"flush\", session.promptCount);\n        }, writeAt);\n      }\n    });\n  }\n\n  /**\n   * Resize a live PTY. Silent when the session is unknown or has no process:\n   * a terminal emitting SIGWINCH races session exit by nature, and throwing\n   * would turn an ordinary window drag into an error the caller must catch.\n   */\n  resize(sessionId: string, cols: number, rows: number): void {\n    const session = this.sessions.get(sessionId);\n    if (!session?.process) return;\n    if (!Number.isInteger(cols) || !Number.isInteger(rows) || cols < 1 || rows < 1) return;\n    try {\n      session.process.resize(cols, rows);\n      // The headless render terminal MUST track the PTY (see pty-shared.ts):\n      // getOutputLines reads its grid for replay, and the gate detectors scrape\n      // it. Resizing one without the other desyncs every absolute cursor move\n      // the TUI makes — which would break gate detection, the reason a managed\n      // session exists at all.\n      session.screen.resize(cols, rows);\n    } catch (err) {\n      // node-pty throws if the fd closed between the guard above and here.\n      // The session is going away; a resize for it is moot, not an error.\n      this.log.debug(`[pty.resize.failed] ${sessionId.slice(0, 8)}`, {\n        event: \"pty.resize_failed\",\n        sessionId,\n        err,\n      });\n    }\n  }\n\n  cancel(sessionId: string): void {\n    const session = this.sessions.get(sessionId);\n    if (!session) throw new Error(`Session not found: ${sessionId}`);\n    session.process.kill(\"SIGINT\");\n  }\n\n  killPid(pid: number): void {\n    try {\n      process.kill(pid, \"SIGTERM\");\n    } catch {\n      // Process may already be gone\n    }\n  }\n\n  // Kill the PTY and mark the session idle. Called by the WS grace timer.\n  // `signal` defaults to SIGINT (graceful); pass SIGKILL to force-kill a\n  // process that isn't responding to it.\n  putOnHold(sessionId: string, signal: NodeJS.Signals = \"SIGINT\"): void {\n    const session = this.sessions.get(sessionId);\n    if (!session) return;\n    this.pendingReady.delete(sessionId);\n    this.queuedInputs.delete(sessionId);\n    this.firstChunkAt.delete(sessionId);\n    this.permissionOpen.delete(sessionId);\n    this.oscTail.delete(sessionId);\n    this.turnOpen.delete(sessionId);\n    this.progressSeen.delete(sessionId);\n    this.progressTail.delete(sessionId);\n    this.lastDetectAt.delete(sessionId);\n    this.lastScreenQuestionKey.delete(sessionId);\n    this.shellPromptOpen.delete(sessionId);\n    this.closedGateKey.delete(sessionId);\n    this.quietCheckers.get(sessionId)?.cancel();\n    this.quietCheckers.delete(sessionId);\n    this.clearReadyFallback(sessionId);\n    try {\n      session.process.kill(signal);\n    } catch {\n      // already dead\n    }\n    session.status = \"idle\";\n    session.statusSource = \"shutdown\";\n    session.statusUpdatedAt = new Date();\n    session.completedAt = new Date();\n    session.screen.dispose();\n    this.sessions.delete(sessionId);\n    this.onStatusChange?.(toPublicSession(session));\n  }\n\n  getOutput(sessionId: string): string {\n    const session = this.sessions.get(sessionId);\n    if (!session) throw new Error(`Session not found: ${sessionId}`);\n    return session.outputBuffer.toString(\"utf-8\");\n  }\n\n  // Render the last `maxLines` rows of the session's screen in true on-screen\n  // order. Reads the headless terminal (fed raw PTY bytes in handleOutput) so\n  // Claude's absolute-cursor repaints resolve to where they actually paint —\n  // unlike the old raw-byte slice, which scrambled order after a TUI repaint\n  // and made replayed conversations appear out of order on resume.\n  //\n  // Async because xterm parses writes on a deferred tick; we flush pending\n  // writes (empty write + callback) before reading so the buffer is current.\n  async getOutputLines(sessionId: string, maxLines: number): Promise<string[]> {\n    const session = this.sessions.get(sessionId);\n    if (!session) throw new Error(`Session not found: ${sessionId}`);\n    await new Promise<void>((resolve) => session.screen.write(\"\", () => resolve()));\n\n    const buf = session.screen.buffer.active;\n    const lines: string[] = [];\n    // buf.length spans scrollback + viewport; iterate the whole thing top-down\n    // so the rendered output preserves screen order, then keep the last N.\n    for (let y = 0; y < buf.length; y++) {\n      lines.push(buf.getLine(y)?.translateToString(true) ?? \"\");\n    }\n    // Drop trailing blank rows (the unused bottom of the viewport) before\n    // trimming to maxLines, so replay isn't padded with empty lines.\n    while (lines.length > 0 && lines[lines.length - 1] === \"\") {\n      lines.pop();\n    }\n    return lines.slice(-maxLines);\n  }\n\n  getInputHistory(sessionId: string): UserMessage[] {\n    return this.sessions.get(sessionId)?.inputHistory ?? [];\n  }\n\n  // OS pid of the spawned agent, or null if the session isn't live here. The\n  // durable registry records this so a later streamer run can probe whether the\n  // process outlived it. Liveness alone is never identity — a recycled pid is\n  // why the registry stores a cmdline alongside it.\n  getPid(sessionId: string): number | null {\n    return this.sessions.get(sessionId)?.process?.pid ?? null;\n  }\n\n  // Record a submitted user message as ground truth and fire onUserMessage.\n  // Called from writeSubmit (both direct and flush paths) — never from\n  // sendKeys, so raw keystrokes aren't logged as messages.\n  private recordUserMessage(session: InternalSession, text: string): void {\n    const ts = Date.now();\n    session.inputHistory.push({ text, ts });\n    if (session.inputHistory.length > INPUT_HISTORY_MAX) {\n      session.inputHistory.shift();\n    }\n    // First message of the session: derive a title the same way the scanner\n    // would once it observes this line, so a live session has a name from its\n    // very first turn rather than waiting on a resume/rescan to compute it.\n    if (session.firstMessageText === undefined) {\n      session.firstMessageText = text;\n      session.sessionName = deriveSessionName(text);\n    }\n    this.onUserMessage?.(session.id, text, ts);\n  }\n\n  getSession(sessionId: string): ManagedSession | null {\n    const session = this.sessions.get(sessionId);\n    return session ? toPublicSession(session) : null;\n  }\n\n  hasSession(sessionId: string): boolean {\n    return this.sessions.has(sessionId);\n  }\n\n  listSessions(): ManagedSession[] {\n    return Array.from(this.sessions.values()).map(toPublicSession);\n  }\n\n  dispose(): void {\n    for (const session of this.sessions.values()) {\n      try {\n        session.process.kill();\n      } catch {\n        // Process may already be dead\n      }\n      session.screen.dispose();\n    }\n    this.sessions.clear();\n    this.firstChunkAt.clear();\n    this.chunkIndex.clear();\n    this.lastChunkAt.clear();\n    for (const quiet of this.quietCheckers.values()) quiet.cancel();\n    this.quietCheckers.clear();\n    for (const timer of this.readyFallbackTimers.values()) clearTimeout(timer);\n    this.readyFallbackTimers.clear();\n    this.permissionOpen.clear();\n    this.oscTail.clear();\n    this.turnOpen.clear();\n    this.progressSeen.clear();\n    this.progressTail.clear();\n    this.lastDetectAt.clear();\n    this.lastScreenQuestionKey.clear();\n    this.shellPromptOpen.clear();\n    this.closedGateKey.clear();\n  }\n\n  private handleOutput(sessionId: string, data: string): void {\n    const session = this.sessions.get(sessionId);\n    if (!session) return;\n\n    const chunk = Buffer.from(data, \"utf-8\");\n    const now = Date.now();\n    if (!this.firstChunkAt.has(sessionId)) {\n      this.firstChunkAt.set(sessionId, now);\n    }\n\n    // Per-chunk diagnostic log. Keep until the @<path> submit bug is solved.\n    const idx = (this.chunkIndex.get(sessionId) ?? 0) + 1;\n    this.chunkIndex.set(sessionId, idx);\n    const last = this.lastChunkAt.get(sessionId);\n    this.lastChunkAt.set(sessionId, now);\n    const gapMs = last == null ? 0 : now - last;\n    this.log.info(\n      `[pty.chunk] ${sessionId.slice(0, 8)} #${idx} +${chunk.length}B gap=${gapMs}ms status=${session.status}`,\n      {\n        event: \"pty.chunk\",\n        sessionId,\n        chunkIndex: idx,\n        chunkBytes: chunk.length,\n        gapMs,\n        status: session.status,\n        pendingReady: this.pendingReady.has(sessionId),\n      },\n    );\n\n    session.outputBuffer = Buffer.concat([session.outputBuffer, chunk]);\n\n    if (session.outputBuffer.length > OUTPUT_BUFFER_MAX) {\n      session.outputBuffer = session.outputBuffer.subarray(\n        session.outputBuffer.length - OUTPUT_BUFFER_MAX,\n      );\n    }\n\n    // Render into the headless screen so getOutputLines() can reproduce true\n    // on-screen order. write() is async (parsed on a later tick) but we never\n    // read the screen synchronously after a single chunk — replay only happens\n    // on subscribe, long after these writes have drained.\n    session.screen.write(data);\n\n    const stripped = stripAnsi(data);\n    session.lastOutput = stripped;\n    const matchedMarker = CLAUDE_PROMPT_MARKERS.find((m) => stripped.includes(m));\n    const turnEnded = this.trackProgress(sessionId, data);\n\n    if (session.status === \"running\" && matchedMarker && !this.turnOpen.has(sessionId)) {\n      this.markReady(sessionId, session, \"prompt-marker\", `marker:${matchedMarker}`);\n    }\n    // The turn-end chunk rarely repaints the box, so ask the screen.\n    if (turnEnded && session.status === \"running\") this.recheckReadyLogged(sessionId);\n    // The no-marker backstop lives in armReadyFallback() rather than here: this\n    // branch only ran when a chunk happened to arrive, so a boot that fell\n    // silent before showing a marker was never rescued by it.\n\n    this.onOutput?.(sessionId, data);\n\n    // Live interactive-prompt detection from the PTY stream — fires the moment\n    // a prompt is on screen, independent of (and ahead of) the JSONL flush.\n    // Trigger-gated with a throttle floor so we don't scrape the rendered\n    // buffer on every chunk:\n    //   - OSC 777 (raw byte signal, tail-carried across chunks) → gate opened.\n    //   - \"Enter to select\" footer (AskUserQuestion menu) → structured question.\n    //   - an already-open gate/prompt keeps passing, so its close is seen (the\n    //     prompt-ready marker without a fresh 777 is what marks it closed).\n    //   - otherwise, at most every SCRAPE_THROTTLE_MS, a chunk alone triggers\n    //     a pass — how a painted gate is claimed ~6s before its OSC arrives.\n    this.detectLivePrompts(sessionId, data, stripped).catch((err) => {\n      this.log.warn(\"[pty.prompt_detect] failed\", {\n        event: \"pty.prompt_detect_failed\",\n        sessionId,\n        err,\n      });\n    });\n\n    // Re-arm the quiet-checker on every chunk. If no further chunk arrives for\n    // QUIET_DETECT_MS, re-run the same ready/prompt detection without waiting\n    // for a chunk that may never come (Claude blocked on a prompt).\n    let quiet = this.quietCheckers.get(sessionId);\n    if (!quiet) {\n      quiet = debounce(() => this.handleQuiet(sessionId), QUIET_DETECT_MS);\n      this.quietCheckers.set(sessionId, quiet);\n    }\n    quiet();\n  }\n\n  // Detect permission gates (OSC 777 + scraped options) and AskUserQuestion\n  // menus from the rendered screen, firing the additive callbacks. Async because\n  // reading the rendered buffer needs the xterm write queue flushed. Pure\n  // detection lives in services/questions/*; this only orchestrates triggers,\n  // per-session debounce, and the callbacks.\n  private async detectLivePrompts(\n    sessionId: string,\n    rawData: string,\n    stripped: string,\n  ): Promise<void> {\n    const session = this.sessions.get(sessionId);\n    if (!session) return;\n\n    // OSC escapes can split across node-pty chunk boundaries — test against\n    // the previous chunk's tail + this chunk. The tail carries the ROLLING\n    // WINDOW (not just the last chunk), so a split across three+ chunks still\n    // matches once the final piece arrives. The tail is consumed on a match\n    // so the quiet path (rawData === \"\") can never re-fire a seen escape, and\n    // left untouched by the quiet path so a pending partial isn't dropped.\n    const oscWindow = (this.oscTail.get(sessionId) ?? \"\") + rawData;\n    const oscPermission = hasPermissionOsc(oscWindow);\n    // Claude finished its turn. Authoritative \"no gate is open\" signal — it\n    // arrives even when no further chunk will (the turn is over), so it is the\n    // only thing that can close a gate whose options never painted.\n    const oscWaitingForInput = hasWaitingForInputOsc(oscWindow);\n    if (rawData !== \"\") {\n      if (oscPermission || oscWaitingForInput) this.oscTail.delete(sessionId);\n      else this.oscTail.set(sessionId, oscWindow.slice(-OSC_TAIL_CHARS));\n    }\n    // Footer test on the CURRENT chunk — a cheap trigger only. The authoritative\n    // test runs on the full rendered screen below (askFooterOnScreen), because\n    // the OSC-777 notify and the \"Enter to select\" footer often arrive in\n    // SEPARATE chunks: the OSC lands first (no footer yet), so a chunk-only test\n    // misclassifies an AskUserQuestion menu as a permission gate.\n    const hasAskFooter = /Enter to select/i.test(stripped);\n    const hasPromptMarker = CLAUDE_PROMPT_MARKERS.some((m) => stripped.includes(m));\n    // Cheap raw-chunk hint that an UNSTRUCTURED shell prompt may be on screen:\n    // a y/N hint, a \"press enter\"/\"continue?\" tail, or a numbered menu row. Just\n    // a trigger gate (mirrors hasAskFooter) — the real conservative matching is\n    // in detectShellPrompt against the rendered tail. ponytail: substring gate.\n    const hasShellPromptHint =\n      /[[(]\\s*y\\s*\\/\\s*n\\s*[\\])]|press\\s+(enter|return|any key)|\\bcontinue\\b\\s*\\?|^\\s*(?:❯|>)?\\s*\\d+[.)]\\s+\\S/im.test(\n        stripped,\n      );\n\n    // A suggestion is painted as SGR 2 (faint) after the turn's last chunk and\n    // can land inside the throttle window of the previous pass; handleQuiet only\n    // re-scans a `running` session, so without this trigger it would be missed\n    // for good. Also keep scanning while one is shown so its clear is seen.\n    const suggestionTrigger =\n      session.status === \"waiting_input\" &&\n      (rawData.includes(\"\\x1b[2m\") || session.promptSuggestion != null);\n\n    // Paint-time throttle: when the last full pass is ≥ SCRAPE_THROTTLE_MS\n    // old, a chunk's arrival alone is enough to scrape — the gate paint has\n    // no reliable chunk-level signal and its OSC arrives ~6s late.\n    const nowMs = Date.now();\n    const scrapeDue = nowMs - (this.lastDetectAt.get(sessionId) ?? 0) >= SCRAPE_THROTTLE_MS;\n    // Nothing to do unless a trigger fired or a prompt we already broadcast is\n    // open (so we can detect its close on the next prompt-ready).\n    if (\n      !oscPermission &&\n      !oscWaitingForInput &&\n      !hasAskFooter &&\n      !hasShellPromptHint &&\n      !suggestionTrigger &&\n      !scrapeDue &&\n      !this.permissionOpen.has(sessionId) &&\n      !this.shellPromptOpen.has(sessionId) &&\n      !this.lastScreenQuestionKey.has(sessionId)\n    ) {\n      return;\n    }\n    this.lastDetectAt.set(sessionId, nowMs);\n\n    const lines = await this.getOutputLines(sessionId, 60);\n\n    // Phase refinement, off the screen read the detectors below already share.\n    // Only while the turn is running: the phase describes what the agent is\n    // doing *within* `running`, and markReady clears it at turn end. Reading it\n    // in any other state would let a stale screen re-assert a phase after the\n    // clear, which is the latch this design exists to prevent.\n    const phaseSession = this.sessions.get(sessionId);\n    if (phaseSession?.status === \"running\") {\n      this.setPhase(sessionId, phaseSession, parseAgentPhase(lines, CLAUDE_CODE_PROVIDER));\n    }\n\n    // Composer suggestion, read from cell attributes off the same flushed screen\n    // (getOutputLines awaited the xterm write queue). Not `waiting_input` -> no\n    // suggestion, which also clears one left over from before a new turn.\n    this.setPromptSuggestion(\n      sessionId,\n      session,\n      session.status === \"waiting_input\" ? readPromptSuggestion(session.screen) : null,\n    );\n\n    // Authoritative footer test on the FULL rendered screen (not just the\n    // trigger chunk). The \"Enter to select · Tab/Arrow keys to navigate\" footer\n    // is unique to an AskUserQuestion menu; a permission gate uses \"Tab to amend\n    // · ctrl+e to explain\". When this is on screen the prompt IS an\n    // AskUserQuestion — even if an OSC-777 notify also fired — so it must take\n    // priority over the permission path (Claude emits OSC 777 for BOTH).\n    const askFooterOnScreen = lines.some((l) => /Enter to select/i.test(l));\n\n    // Diagnostic: detector verdicts when a trigger fires. Metadata only — no\n    // rendered lines, no scraped prompt/question text — so it stays safe at any\n    // log level; prompt and answer content must never enter logs. At debug\n    // level so it's silent under normal --verbose; enable with LOG_LEVEL=debug.\n    if (oscPermission || hasAskFooter || askFooterOnScreen) {\n      const permGate = oscPermission && !askFooterOnScreen ? scrapePermissionGate(lines) : null;\n      const askQuestion = askFooterOnScreen ? detectQuestionFromScreen(lines) : null;\n      this.log.debug?.(`[pty.prompt_detect] ${sessionId.slice(0, 8)} trigger`, {\n        event: \"pty.prompt_detect\",\n        sessionId,\n        oscPermission,\n        hasAskFooter,\n        askFooterOnScreen,\n        permGateDetected: permGate !== null,\n        permGateOptionCount: permGate?.options.length ?? 0,\n        askQuestionDetected: askQuestion !== null,\n        askQuestionCount: askQuestion?.questions.length ?? 0,\n      });\n    }\n\n    // ── Permission gate ──────────────────────────────────────────────\n    // Skip entirely when the screen is an AskUserQuestion menu — its OSC-777\n    // notify would otherwise be misread as a permission gate.\n    if (oscPermission && !askFooterOnScreen) {\n      const gate = scrapePermissionGate(lines);\n      this.permissionOpen.set(sessionId, gate ?? { options: [] });\n      // Broadcast even if options aren't painted yet (gate: empty options) so\n      // the client can show \"Claude needs permission\" immediately; a later\n      // repaint with the footer/options re-broadcasts the populated gate.\n      this.onPermissionChange?.(sessionId, gate ?? { options: [] });\n    } else if (this.permissionOpen.has(sessionId) && !askFooterOnScreen) {\n      // Gate was open. If options are still on screen, refresh (cursor moved);\n      // if the turn ended or the prompt is ready again with the options gone,\n      // the gate closed. The end-of-turn notify is checked FIRST and without a\n      // prompt-marker requirement: it is the last chunk of the turn, so a gate\n      // still waiting on a marker here would never close at all.\n      const gate =\n        detectGateScreen(lines) ?? detectPickerScreen(lines) ?? detectStartupChoiceGate(lines);\n      // \"Gate is gone\" must survive a mid-repaint tick: detectGateScreen needs\n      // the footer, which can be briefly absent while the box repaints, and\n      // hasPromptMarker matches the box's own ╭/❯ glyphs — together those would\n      // close a live gate. Require BOTH detectors to see nothing before closing;\n      // the refresh below stays strict so prose is never broadcast as options.\n      const stillPainted = gate !== null || scrapePermissionGate(lines) !== null;\n      if (oscWaitingForInput || (!stillPainted && hasPromptMarker)) {\n        this.permissionOpen.delete(sessionId);\n        this.onPermissionChange?.(sessionId, null);\n        // Record what's still on screen (if anything) so arm 3 doesn't\n        // reclaim this exact box on a later trigger-less pass before Claude\n        // erases it — see closedGateKey.\n        if (gate) {\n          this.closedGateKey.set(sessionId, permissionContentKey({ ...gate, cursor: undefined }));\n        } else {\n          this.closedGateKey.delete(sessionId);\n        }\n      } else if (gate) {\n        // Keep the stored gate the one actually on screen: sendKeys tests the\n        // incoming bytes against its option indices, and a refresh can replace\n        // the box with a different gate.\n        this.permissionOpen.set(sessionId, gate);\n        this.onPermissionChange?.(sessionId, gate);\n      }\n    } else if (!askFooterOnScreen && !oscWaitingForInput) {\n      // Paint-time claim: the gate is on screen but Claude's OSC 777 notify\n      // (debounced ~6s upstream) hasn't arrived. detectGateScreen anchors on\n      // the gate footer + a Yes/No option label so a numbered list in prose\n      // can't open a card; detectPickerScreen claims an unboxed picker with no\n      // footer (a ❯ cursor and no composer below it). Downstream is the OSC\n      // path unchanged — same broadcast, same dedupe, same close signals. A\n      // still-painted box that arm 2 closed on an EARLIER pass reaches this\n      // arm on the very next trigger-less/throttled tick (arm 3 is an else-if\n      // of arm 2, so it can never run in the SAME pass as the close) —\n      // closedGateKey suppresses reclaiming that exact content until Claude\n      // erases the box.\n      const gate =\n        detectGateScreen(lines) ?? detectPickerScreen(lines) ?? detectStartupChoiceGate(lines);\n      if (gate) {\n        const key = permissionContentKey({ ...gate, cursor: undefined });\n        if (this.closedGateKey.get(sessionId) !== key) {\n          this.permissionOpen.set(sessionId, gate);\n          this.onPermissionChange?.(sessionId, gate);\n        }\n      } else {\n        // Box is gone — clear the suppression so a later, even\n        // content-identical, gate is claimed normally.\n        this.closedGateKey.delete(sessionId);\n      }\n    }\n\n    // ── AskUserQuestion menu (rendered, ahead of JSONL) ──────────────\n    // The multi-question TUI's final \"Ready to submit your answers?\" screen is\n    // detected and broadcast as a normal card (Submit answers / Cancel) so the\n    // user can tap to confirm — the carousel doesn't reliably auto-submit.\n    // (Roadmap: robust carousel auto-submit.)\n    if (askFooterOnScreen) {\n      const detected = detectQuestionFromScreen(lines);\n      if (detected) {\n        const key = questionContentKey(detected.questions);\n        if (this.lastScreenQuestionKey.get(sessionId) !== key) {\n          this.lastScreenQuestionKey.set(sessionId, key);\n          this.onLiveQuestion?.(sessionId, detected.questions);\n        }\n      }\n    } else if (this.lastScreenQuestionKey.has(sessionId) && hasPromptMarker) {\n      // The menu was open but its footer is gone and Claude's prompt marker is\n      // back — the question was answered (or dismissed). Clear the screen key\n      // and tell the server so the pending question is cancelled; without this\n      // the answered menu lingers and a later repaint can re-broadcast it.\n      this.lastScreenQuestionKey.delete(sessionId);\n      this.onLiveQuestionGone?.(sessionId);\n    }\n\n    // ── Unstructured shell prompt (read -p \"[y/N]\", CLI picker, … ) ───\n    // Last fallback: only when this isn't already a structured permission gate\n    // or AskUserQuestion menu. Reuses the `permission` transport so mobile\n    // renders a QuestionCard with zero new event handling; each option carries\n    // its literal answerKeys (y\\r / n\\r / N\\r) so the client stays dumb.\n    if (!oscPermission && !askFooterOnScreen && !this.permissionOpen.has(sessionId)) {\n      const shell = detectShellPrompt(lines);\n      if (shell) {\n        const key = `${shell.prompt}\\u0000${shell.options.map((o) => o.label).join(\"\\u0000\")}`;\n        if (this.shellPromptOpen.get(sessionId) !== key) {\n          this.shellPromptOpen.set(sessionId, key);\n          this.onPermissionChange?.(sessionId, {\n            prompt: shell.prompt,\n            options: shell.options,\n          });\n        }\n      } else if (this.shellPromptOpen.has(sessionId) && hasPromptMarker) {\n        // Prompt is gone and Claude's marker is back (input was answered) —\n        // close the card.\n        this.shellPromptOpen.delete(sessionId);\n        this.onPermissionChange?.(sessionId, null);\n      }\n    }\n  }\n\n  // Fired QUIET_DETECT_MS after the last PTY chunk. Re-runs the same\n  // ready/prompt detection handleOutput() runs per-chunk, using the last\n  // rendered output — a session blocked on a prompt (or an unmarked boot\n  // screen) may never produce another chunk to trigger detection otherwise.\n  private handleQuiet(sessionId: string): void {\n    const session = this.sessions.get(sessionId);\n    if (!session) return;\n    if (session.status !== \"running\") {\n      // A blocking startup gate (workspace trust) paints its own `❯` cursor on\n      // the selected option, which readiness cannot tell from a composer prompt\n      // — so the session settles to `waiting_input` at boot with the gate still\n      // on screen. The screen then goes static, so the per-chunk paint-time\n      // claim never runs again and the gate is never broadcast: it reaches the\n      // client as raw terminal text with no way to answer it but raw keys.\n      //\n      // Scan once more here for exactly that case. Bounded the same way every\n      // other unsolicited scrape is (the SCRAPE_THROTTLE_MS gate inside\n      // detectLivePrompts), and skipped when a card is already open so an\n      // answered gate is not re-claimed.\n      if (session.status === \"waiting_input\" && !this.permissionOpen.has(sessionId)) {\n        this.detectLivePrompts(sessionId, \"\", session.lastOutput).catch((err) => {\n          this.log.warn(\"[pty.prompt_detect] idle rescan failed\", {\n            event: \"pty.prompt_detect_failed\",\n            sessionId,\n            err,\n          });\n        });\n      }\n      return;\n    }\n\n    if (this.pendingReady.has(sessionId)) {\n      // Silence is NOT evidence of readiness while booting. `--resume` replays\n      // the JSONL and can sit quiet for far longer than QUIET_DETECT_MS before\n      // the TUI reads stdin at all; marking ready here disarmed the input\n      // queue mid-boot, and the bytes then sat unconsumed in the tty buffer\n      // until the TUI started reading — surfacing as the NEXT message silently\n      // carrying the previous one as a prefix. Ask the screen instead, the\n      // same question the settled branch below asks, and leave the flat\n      // backstop (armReadyFallback) to break a genuine deadlock.\n      this.recheckReadyFromScreen(sessionId).catch((err) => {\n        this.log.warn(\"[pty.ready] boot screen recheck failed\", {\n          event: \"pty.ready_recheck_failed\",\n          sessionId,\n          err,\n        });\n      });\n    } else {\n      // handleOutput() only checks the triggering chunk for a prompt marker,\n      // but Claude's TUI does differential repaints and doesn't always\n      // retransmit the box border once it's already drawn — so a\n      // mid-conversation return to idle can go undetected forever if the last\n      // chunk didn't happen to carry it. Re-derive readiness from the actual\n      // rendered screen instead of waiting for a chunk that may never come.\n      this.recheckReadyFromScreen(sessionId).catch((err) => {\n        this.log.warn(\"[pty.ready] screen recheck failed\", {\n          event: \"pty.ready_recheck_failed\",\n          sessionId,\n          err,\n        });\n      });\n    }\n\n    this.detectLivePrompts(sessionId, \"\", session.lastOutput).catch((err) => {\n      this.log.warn(\"[pty.prompt_detect] failed\", {\n        event: \"pty.prompt_detect_failed\",\n        sessionId,\n        err,\n      });\n    });\n  }\n\n  /** Update the open turn from OSC 9;4 in this chunk; true when it just closed. */\n  private trackProgress(sessionId: string, data: string): boolean {\n    // Prepend an escape the previous chunk cut off, so a split one still counts.\n    const window = (this.progressTail.get(sessionId) ?? \"\") + data;\n    let state: string | undefined;\n    for (const m of window.matchAll(CLAUDE_PROGRESS_RE)) state = m[1];\n    // Carry only a trailing escape too short to be a whole `ESC]9;4;N` (7\n    // chars), so a complete one is never counted twice.\n    const esc = window.lastIndexOf(\"\\x1b\");\n    const rest = esc >= 0 ? window.slice(esc) : \"\";\n    if (rest.length < 7) this.progressTail.set(sessionId, rest);\n    else this.progressTail.delete(sessionId);\n    if (state === undefined) return false;\n    this.progressSeen.add(sessionId);\n    if (state !== \"0\") {\n      this.turnOpen.set(sessionId, \"working\");\n      return false;\n    }\n    return this.turnOpen.delete(sessionId);\n  }\n\n  private openTurnOnSubmit(sessionId: string): void {\n    if (!this.progressSeen.has(sessionId)) return;\n    this.turnOpen.set(sessionId, \"submitted\");\n    const timer = setTimeout(() => {\n      if (this.turnOpen.get(sessionId) !== \"submitted\") return;\n      this.turnOpen.delete(sessionId);\n      this.recheckReadyLogged(sessionId);\n    }, TURN_START_GRACE_MS);\n    timer.unref?.();\n  }\n\n  private recheckReadyLogged(sessionId: string): void {\n    this.recheckReadyFromScreen(sessionId).catch((err) => {\n      this.log.warn(\"[pty.ready] screen recheck failed\", {\n        event: \"pty.ready_recheck_failed\",\n        sessionId,\n        err,\n      });\n    });\n  }\n\n  // Re-check the rendered screen (not just the last chunk) for a prompt\n  // marker. Only meaningful once pendingReady is already clear — the boot\n  // fallback above covers the first prompt after spawn/resume. Scoped to a\n  // full viewport (PTY_ROWS), not just the last few lines: \"on screen\" means\n  // whatever a user attached to this PTY would currently see.\n  private async recheckReadyFromScreen(sessionId: string): Promise<void> {\n    const session = this.sessions.get(sessionId);\n    if (session?.status !== \"running\") return;\n    const lines = await this.getOutputLines(sessionId, PTY_ROWS);\n    const matchedMarker = CLAUDE_PROMPT_MARKERS.find((m) => lines.some((l) => l.includes(m)));\n    if (matchedMarker && session.status === \"running\" && !this.turnOpen.has(sessionId)) {\n      this.markReady(sessionId, session, \"screen-marker\", `quiet:screen-marker:${matchedMarker}`);\n    }\n  }\n\n  // Flat backstop from the first chunk: if neither a prompt marker nor the\n  // screen recheck settles the session within CLAUDE_READY_FALLBACK_MS, mark it\n  // ready anyway so start requests resolve and queued input is not held\n  // forever. This is what makes the quiet-checker safe to be strict — a boot\n  // variant whose marker we cannot see still recovers, just 8s later instead of\n  // 500ms sooner and wrong. unref() so it never holds the process open.\n  private armReadyFallback(sessionId: string): void {\n    const timer = setTimeout(() => {\n      this.readyFallbackTimers.delete(sessionId);\n      const session = this.sessions.get(sessionId);\n      if (session?.status === \"running\" && this.pendingReady.has(sessionId)) {\n        this.markReady(sessionId, session, \"timeout-fallback\", \"fallback:timeout\");\n      }\n    }, CLAUDE_READY_FALLBACK_MS);\n    timer.unref?.();\n    this.readyFallbackTimers.set(sessionId, timer);\n  }\n\n  private clearReadyFallback(sessionId: string): void {\n    const timer = this.readyFallbackTimers.get(sessionId);\n    if (timer) clearTimeout(timer);\n    this.readyFallbackTimers.delete(sessionId);\n  }\n\n  // Transition a session from \"running\" to \"waiting_input\", clear pendingReady,\n  // and flush any queued input. Idempotent: callers can invoke at any chunk.\n  /**\n   * Record the agent's phase and notify only on a real change.\n   *\n   * The change guard is load-bearing, not an optimisation: the scrape pass runs\n   * on every chunk, so an unguarded setter would fire the callback — and the\n   * WS frame behind it — several times a second for the entire duration of a\n   * turn while reporting the same value.\n   */\n  private setPhase(sessionId: string, session: InternalSession, phase: AgentPhase | null): void {\n    const next = phase ?? null;\n    if ((session.subStatus ?? null) === next) return;\n    session.subStatus = next;\n    this.onPhaseChange?.(sessionId, next);\n  }\n\n  /** Record the composer suggestion and notify only on a real change. */\n  private setPromptSuggestion(\n    sessionId: string,\n    session: InternalSession,\n    text: string | null,\n  ): void {\n    if ((session.promptSuggestion ?? null) === text) return;\n    session.promptSuggestion = text;\n    this.onPromptSuggestionChange?.(sessionId, text);\n  }\n\n  private markReady(\n    sessionId: string,\n    session: InternalSession,\n    source: StatusSource,\n    reason: string,\n  ): void {\n    this.clearReadyFallback(sessionId);\n    session.lastActivityAt = new Date();\n    session.status = \"waiting_input\";\n    // C3: record HOW we concluded this, not just that we did. A\n    // `timeout-fallback` here means no marker ever appeared and we assumed —\n    // previously indistinguishable on the wire from an observed marker.\n    session.statusSource = source;\n    session.statusUpdatedAt = new Date();\n    // Turn end clears the phase. This is the only place it can happen\n    // correctly: the exit edge is not an output event, so it cannot be read off\n    // the screen — Claude's TUI does differential repaints and a return to idle\n    // can go undetected forever if the last chunk didn't carry the marker.\n    // Without this the phase latches on any session that stops emitting, which\n    // is the bug tb-mobile PR #647 shipped. markReady is the single idempotent\n    // running -> waiting_input transition, and it is driven by the waiting-for-\n    // input OSC, which arrives even when no further chunk will.\n    // Kept below the source assignment so it stays inside the window\n    // status-confidence.test.ts scans, and so onPhaseChange never observes a\n    // session whose status has moved but whose statusSource has not.\n    this.setPhase(sessionId, session, null);\n    // Log retained on purpose: `reason=fallback:timeout` would be the only\n    // signal that Claude's TUI introduced a new boot variant our markers miss.\n    const elapsedMs = Date.now() - (this.firstChunkAt.get(sessionId) ?? Date.now());\n    this.log.info(`[pty.ready] ${sessionId.slice(0, 8)} ${reason} (elapsed=${elapsedMs}ms)`, {\n      event: \"pty.ready\",\n      sessionId,\n      reason,\n      elapsedMs,\n    });\n    this.onStatusChange?.(toPublicSession(session));\n    if (this.pendingReady.has(sessionId)) {\n      this.pendingReady.delete(sessionId);\n      this.flushQueuedInputs(sessionId);\n      this.onReady?.(toPublicSession(session));\n    }\n  }\n\n  private handleExit(sessionId: string, exitCode: number): void {\n    const session = this.sessions.get(sessionId);\n    if (!session) return;\n\n    session.completedAt = new Date();\n    session.status = \"idle\";\n    session.statusSource = \"process-exit\";\n    session.statusUpdatedAt = new Date();\n\n    // Instant exit with no output — diagnose the most likely cause.\n    const elapsedMs = session.completedAt.getTime() - session.startedAt.getTime();\n    if (exitCode !== 0 && elapsedMs < 2000 && session.lastOutput === \"\") {\n      if (!existsSync(session.projectPath)) {\n        session.failureReason = `Project directory not found: ${session.projectPath}`;\n      } else {\n        session.failureReason =\n          `Process exited immediately (code ${exitCode}). ` +\n          `Check that the Claude binary is installed and accessible.`;\n      }\n    }\n\n    this.onStatusChange?.(toPublicSession(session));\n    session.screen.dispose();\n    this.sessions.delete(sessionId);\n    this.queuedInputs.delete(sessionId);\n    this.firstChunkAt.delete(sessionId);\n    this.permissionOpen.delete(sessionId);\n    this.oscTail.delete(sessionId);\n    this.turnOpen.delete(sessionId);\n    this.progressSeen.delete(sessionId);\n    this.progressTail.delete(sessionId);\n    this.lastDetectAt.delete(sessionId);\n    this.lastScreenQuestionKey.delete(sessionId);\n    this.shellPromptOpen.delete(sessionId);\n    this.closedGateKey.delete(sessionId);\n    this.quietCheckers.get(sessionId)?.cancel();\n    this.quietCheckers.delete(sessionId);\n    this.clearReadyFallback(sessionId);\n  }\n}\n\nfunction toPublicSession(s: InternalSession): ManagedSession {\n  return {\n    id: s.id,\n    provider: s.provider ?? CLAUDE_CODE_PROVIDER,\n    projectPath: s.projectPath,\n    projectName: s.projectName,\n    branch: s.branch,\n    status: s.status,\n    startedAt: s.startedAt,\n    completedAt: s.completedAt,\n    promptCount: s.promptCount,\n    lastOutput: s.lastOutput,\n    ...(s.failureReason != null && { failureReason: s.failureReason }),\n    ...(s.lastActivityAt != null && { lastActivityAt: s.lastActivityAt }),\n    ...(s.statusSource != null && { statusSource: s.statusSource }),\n    ...(s.statusUpdatedAt != null && { statusUpdatedAt: s.statusUpdatedAt }),\n    ...(s.filePath != null && { filePath: s.filePath }),\n    ...(s.sessionName != null && { sessionName: s.sessionName }),\n    ...(s.effort != null && { effort: s.effort }),\n    ...(s.firstMessageText != null && { firstMessageText: s.firstMessageText }),\n    // Unconditional: this shape crosses the pty-host boundary, and a streamer\n    // re-adopting a surviving host's sessions mid-turn has no other source for\n    // the phase — no snapshot or replay event carries it, and setPhase's change\n    // guard means the host will never re-emit it for the rest of that turn.\n    subStatus: s.subStatus ?? null,\n    promptSuggestion: s.promptSuggestion ?? null,\n  };\n}\n","import { basename } from \"path\";\nimport { CodexPtyRunner } from \"./codex-pty-runner\";\nimport { CursorPtyRunner } from \"./cursor-pty-runner\";\nimport { locateProviderExe } from \"./platform\";\nimport {\n  CLAUDE_CODE_PROVIDER,\n  CODEX_CLI_PROVIDER,\n  CURSOR_PROVIDER,\n  commandNameForProvider,\n  type ProviderName,\n} from \"./providers\";\nimport type { HostHeartbeatState, HostTransport } from \"./pty-host/protocol\";\nimport { RemoteSessionRunner } from \"./pty-host/remote-session-runner\";\nimport { PTYManager } from \"./pty-manager\";\nimport type {\n  ManagedSession,\n  PTYManagerOptions,\n  SessionRunner,\n  StartForkSessionOptions,\n  StartFreshSessionOptions,\n  StartSessionOptions,\n  UserMessage,\n} from \"./types\";\n\nexport class LiveSessionManager {\n  private runners: Map<ProviderName, SessionRunner>;\n  private remoteRunner: RemoteSessionRunner | null = null;\n  private options: PTYManagerOptions;\n\n  constructor(options: PTYManagerOptions = {}) {\n    this.options = options;\n    this.runners = new Map<ProviderName, SessionRunner>([\n      [CLAUDE_CODE_PROVIDER, new PTYManager(options)],\n      [CODEX_CLI_PROVIDER, new CodexPtyRunner(options)],\n      [CURSOR_PROVIDER, new CursorPtyRunner(options)],\n    ]);\n  }\n\n  async useRemoteRunner(transport: HostTransport): Promise<ManagedSession[]> {\n    const remote = await RemoteSessionRunner.connect(transport, this.options);\n    await Promise.all(\n      remote.listSessions().map((session) => remote.hydrateInputHistory(session.id)),\n    );\n    for (const runner of this.runners.values()) runner.dispose();\n    this.remoteRunner = remote;\n    return remote.listSessions();\n  }\n\n  isRemote(): boolean {\n    return this.remoteRunner !== null;\n  }\n\n  startRemoteHeartbeat(getState: () => HostHeartbeatState): void {\n    this.remoteRunner?.startHeartbeat(getState);\n  }\n\n  async start(\n    sessionId: string,\n    options: StartSessionOptions & { provider?: ProviderName },\n  ): Promise<ManagedSession> {\n    const provider = options.provider ?? CLAUDE_CODE_PROVIDER;\n    const runner = this.assertSupportedProvider(provider, options.projectPath);\n    this.assertProviderInstalled(provider);\n    return runner.start(sessionId, options);\n  }\n\n  async startFresh(\n    options: StartFreshSessionOptions & { provider?: ProviderName },\n  ): Promise<ManagedSession> {\n    const provider = options.provider ?? CLAUDE_CODE_PROVIDER;\n    const runner = this.assertSupportedProvider(provider, options.projectPath);\n    this.assertProviderInstalled(provider);\n    return runner.startFresh(options);\n  }\n\n  /**\n   * Fork an existing conversation into a new session. Codex-only: `codex fork`\n   * has no Claude Code equivalent, and there is no safe generic fallback — a\n   * silent downgrade to resume would attach to the very writer the caller is\n   * trying to leave alone.\n   */\n  async startFork(\n    options: StartForkSessionOptions & { provider?: ProviderName },\n  ): Promise<ManagedSession> {\n    const provider = options.provider ?? CODEX_CLI_PROVIDER;\n    const runner = this.remoteRunner ?? this.runners.get(provider);\n    if (!(runner instanceof CodexPtyRunner)) {\n      const err = new Error(\n        this.remoteRunner\n          ? \"Forking is not supported while sessions are hosted by the pty-host\"\n          : `Forking is not supported for ${provider} sessions`,\n      );\n      (err as Error & { statusCode?: number }).statusCode = 501;\n      throw err;\n    }\n    this.assertProviderInstalled(provider);\n    return runner.startFork(options);\n  }\n\n  sendInput(sessionId: string, input: string): number {\n    return this.runnerFor(sessionId).sendInput(sessionId, input);\n  }\n\n  sendKeys(sessionId: string, keys: string): void {\n    this.runnerFor(sessionId).sendKeys(sessionId, keys);\n  }\n\n  sendRawKeys(sessionId: string, keys: string): void {\n    this.runnerFor(sessionId).sendRawKeys(sessionId, keys);\n  }\n\n  resize(sessionId: string, cols: number, rows: number): void {\n    this.runnerFor(sessionId).resize(sessionId, cols, rows);\n  }\n\n  cancel(sessionId: string): void {\n    this.runnerFor(sessionId).cancel(sessionId);\n  }\n\n  killPid(pid: number): void {\n    for (const runner of this.activeRunners()) {\n      runner.killPid(pid);\n    }\n  }\n\n  // putOnHold tolerates an unknown sessionId (PTYManager.putOnHold is a no-op\n  // when the session isn't in its map), so — unlike the other session-keyed\n  // methods — route to the owning runner when found, otherwise broadcast to\n  // every runner rather than throwing; this matches the pre-extraction\n  // behavior of delegating straight through with no existence check.\n  putOnHold(sessionId: string, signal: NodeJS.Signals = \"SIGINT\"): void {\n    for (const runner of this.activeRunners()) {\n      if (runner.hasSession(sessionId) || runner.getSession(sessionId)) {\n        runner.putOnHold(sessionId, signal);\n        return;\n      }\n    }\n    for (const runner of this.activeRunners()) {\n      runner.putOnHold(sessionId, signal);\n    }\n  }\n\n  getOutput(sessionId: string): string {\n    return this.runnerFor(sessionId).getOutput(sessionId);\n  }\n\n  getOutputLines(sessionId: string, maxLines: number): Promise<string[]> {\n    return this.runnerFor(sessionId).getOutputLines(sessionId, maxLines);\n  }\n\n  getInputHistory(sessionId: string): UserMessage[] {\n    return this.runnerFor(sessionId).getInputHistory(sessionId);\n  }\n\n  getSession(sessionId: string): ManagedSession | null {\n    for (const runner of this.activeRunners()) {\n      const session = runner.getSession(sessionId);\n      if (session) return session;\n    }\n    return null;\n  }\n\n  // Scans rather than using runnerFor(): the registry records a pid on a\n  // best-effort basis, so an unknown session must return null rather than\n  // throw the way the input-routing methods do.\n  getPid(sessionId: string): number | null {\n    for (const runner of this.activeRunners()) {\n      const pid = runner.getPid(sessionId);\n      if (pid != null) return pid;\n    }\n    return null;\n  }\n\n  hasSession(sessionId: string): boolean {\n    for (const runner of this.activeRunners()) {\n      if (runner.hasSession(sessionId)) return true;\n    }\n    return false;\n  }\n\n  listSessions(): ManagedSession[] {\n    return this.activeRunners().flatMap((runner) => runner.listSessions());\n  }\n\n  dispose(): void {\n    for (const runner of this.activeRunners()) {\n      runner.dispose();\n    }\n  }\n\n  // Look up which runner owns a session. Only one runner exists today, so\n  // this is a linear scan across hasSession()/getSession() rather than a\n  // separate session→provider index — see task-1-brief.md.\n  private runnerFor(sessionId: string): SessionRunner {\n    for (const runner of this.activeRunners()) {\n      if (runner.hasSession(sessionId) || runner.getSession(sessionId)) return runner;\n    }\n    throw new Error(`Session not found: ${sessionId}`);\n  }\n\n  /**\n   * Refuse before spawning when the provider's CLI is not on this machine.\n   *\n   * Without this the spawn \"succeeds\": on POSIX execvp fails inside the forked\n   * child, so a session appears, exits ~12ms later with code 1 and no output,\n   * and the caller is told only that it \"exited before becoming ready\" — or,\n   * on the Claude resume path, is told nothing at all, since that path answers\n   * 200 before the process has had a chance to die. Every start route funnels\n   * through here, so one check covers start, resume, adopt and fork.\n   *\n   * 503, not 500: the request was well-formed and the fault is this machine's\n   * environment. `code` is what mobile branches on (it reads `errBody.code`),\n   * and `PROVIDER_NOT_INSTALLED` is a remediation string it already knows.\n   */\n  private assertProviderInstalled(provider: ProviderName): void {\n    if (locateProviderExe(provider) !== null) return;\n    // Written to be read by a person, not parsed: mobile shows `error` verbatim\n    // in its \"Failed to start\" alert, so it names the command to install and\n    // the other thing that produces this — a CLI the streamer's PATH cannot\n    // see, which is the usual shape under launchd/Task Scheduler.\n    const command = commandNameForProvider(provider);\n    const err = new Error(\n      `The ${command} command was not found on this server. Install the ${provider} CLI, ` +\n        \"or make sure it is on the PATH the streamer runs with.\",\n    );\n    (err as Error & { statusCode?: number; code?: string }).statusCode = 503;\n    (err as Error & { statusCode?: number; code?: string }).code = \"PROVIDER_NOT_INSTALLED\";\n    throw err;\n  }\n\n  private assertSupportedProvider(provider: ProviderName, projectPath: string): SessionRunner {\n    if (this.remoteRunner) return this.remoteRunner;\n    const runner = this.runners.get(provider);\n    if (runner) return runner;\n    const err = new Error(\n      `Live ${provider} sessions are not implemented yet for ${basename(projectPath)}`,\n    );\n    (err as Error & { statusCode?: number }).statusCode = 501;\n    throw err;\n  }\n\n  private activeRunners(): SessionRunner[] {\n    return this.remoteRunner ? [this.remoteRunner] : [...this.runners.values()];\n  }\n}\n","import { createConnection, createServer, type Server, type Socket } from \"node:net\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport {\n  encodeMessage,\n  type HostMessage,\n  type HostTransport,\n  isHostEvent,\n  LineDecoder,\n} from \"./protocol\";\n\n/**\n * Socket plumbing for the pty-host (plan Phase 6b).\n *\n * A unix domain socket on POSIX, a named pipe on Windows. Both are local-only\n * by construction, which is the security property that matters: the host can\n * spawn arbitrary agent processes, so it must never be reachable over a TCP\n * port that something else on the network could find.\n */\n\n/**\n * Where the host listens.\n *\n * Scoped by instance id, so two streamers configured as separate instances on\n * one machine do not fight over one host — the same reason DB-persisted\n * sessions are scoped by it.\n *\n * POSIX puts it under the config dir rather than /tmp: `THREADBASE_CONFIG_DIR`\n * already redirects the whole config tree in tests, and a path under a\n * user-owned directory cannot be pre-created by another user to hijack the\n * bind. Windows named pipes are not filesystem paths at all, so the config dir\n * has nothing to say about them.\n */\nexport function hostSocketPath(instanceId: string): string {\n  if (process.platform === \"win32\") {\n    return `\\\\\\\\.\\\\pipe\\\\threadbase-pty-host-${instanceId}`;\n  }\n  const dir = process.env.THREADBASE_CONFIG_DIR ?? join(homedir(), \".threadbase\");\n  return join(dir, \"run\", `pty-host-${instanceId}.sock`);\n}\n\n/** Wrap a connected socket as the duplex line channel the runner expects. */\nexport function socketTransport(socket: Socket): HostTransport {\n  socket.setEncoding(\"utf8\");\n  return {\n    send(line: string) {\n      // Writes are fire-and-forget: a full send buffer backpressures inside\n      // node, and a dead socket surfaces through onClose rather than here.\n      socket.write(line);\n    },\n    onLine(handler) {\n      socket.on(\"data\", (chunk: string) => handler(chunk));\n    },\n    onClose(handler) {\n      let handled = false;\n      const handleClose = () => {\n        if (handled) return;\n        handled = true;\n        handler();\n      };\n      socket.once(\"close\", handleClose);\n      // A connection error is a close as far as every caller is concerned; the\n      // runner's job is to fail in-flight requests either way.\n      socket.once(\"error\", handleClose);\n    },\n    close() {\n      socket.destroy();\n    },\n  };\n}\n\n/** Connect to a host that is already listening. Rejects if none is. */\nexport function connectToHost(socketPath: string): Promise<HostTransport> {\n  return new Promise((resolve, reject) => {\n    const socket = createConnection(socketPath);\n    socket.once(\"error\", reject);\n    socket.once(\"connect\", () => {\n      socket.removeListener(\"error\", reject);\n      resolve(socketTransport(socket));\n    });\n  });\n}\n\nexport type PtyHostStatusProbe =\n  | { reachable: true; protocolVersion: number; sessionCount: number }\n  | { reachable: false; error: string };\n\n/** Query host status without subscribing to events or adopting its sessions. */\nexport async function probePtyHostStatus(\n  socketPath: string,\n  timeoutMs = 1_000,\n): Promise<PtyHostStatusProbe> {\n  let transport: HostTransport;\n  let connectTimedOut = false;\n  let connectTimer: ReturnType<typeof setTimeout> | undefined;\n  const connecting = connectToHost(socketPath);\n  try {\n    transport = await Promise.race([\n      connecting,\n      new Promise<never>((_, reject) => {\n        connectTimer = setTimeout(() => {\n          connectTimedOut = true;\n          reject(new Error(`status timed out after ${timeoutMs}ms`));\n        }, timeoutMs);\n        connectTimer.unref?.();\n      }),\n    ]);\n  } catch (err) {\n    if (connectTimer) clearTimeout(connectTimer);\n    if (connectTimedOut)\n      void connecting.then(\n        (late) => late.close(),\n        () => {},\n      );\n    return { reachable: false, error: err instanceof Error ? err.message : String(err) };\n  }\n  if (connectTimer) clearTimeout(connectTimer);\n\n  return await new Promise<PtyHostStatusProbe>((resolve) => {\n    const decoder = new LineDecoder();\n    let settled = false;\n    const finish = (result: PtyHostStatusProbe) => {\n      if (settled) return;\n      settled = true;\n      clearTimeout(timer);\n      transport.close();\n      resolve(result);\n    };\n    const timer = setTimeout(\n      () => finish({ reachable: false, error: `status timed out after ${timeoutMs}ms` }),\n      timeoutMs,\n    );\n    timer.unref?.();\n    transport.onClose(() => finish({ reachable: false, error: \"pty-host connection closed\" }));\n    transport.onLine((chunk) => {\n      for (const line of decoder.push(chunk)) {\n        let message: HostMessage;\n        try {\n          message = JSON.parse(line) as HostMessage;\n        } catch {\n          finish({ reachable: false, error: \"pty-host returned an invalid status response\" });\n          return;\n        }\n        if (isHostEvent(message) || message.id !== 1) continue;\n        if (!message.ok) {\n          finish({ reachable: false, error: message.error });\n          return;\n        }\n        const status = message.result as { protocolVersion?: unknown; sessions?: unknown };\n        if (typeof status?.protocolVersion !== \"number\" || !Array.isArray(status.sessions)) {\n          finish({ reachable: false, error: \"pty-host returned an invalid status response\" });\n          return;\n        }\n        finish({\n          reachable: true,\n          protocolVersion: status.protocolVersion,\n          sessionCount: status.sessions.length,\n        });\n      }\n    });\n    try {\n      transport.send(encodeMessage({ id: 1, type: \"status\" }));\n    } catch (err) {\n      finish({ reachable: false, error: err instanceof Error ? err.message : String(err) });\n    }\n  });\n}\n\nexport interface HostServerHandlers {\n  /** One connected streamer. Returns a disposer run when it disconnects. */\n  onConnection: (transport: HostTransport) => () => void;\n}\n\n/**\n * Listen for streamer connections.\n *\n * A stale socket file from a host that died without cleaning up would make\n * `listen` fail with EADDRINUSE forever, so an unconnectable one is removed\n * first — but only after a probe confirms nothing answers on it, because\n * deleting a live host's socket would strand every session it holds.\n */\nexport async function listenForStreamers(\n  socketPath: string,\n  handlers: HostServerHandlers,\n): Promise<Server> {\n  if (process.platform !== \"win32\") {\n    const { mkdirSync, rmSync } = await import(\"node:fs\");\n    const { dirname } = await import(\"node:path\");\n    mkdirSync(dirname(socketPath), { recursive: true });\n    try {\n      const probe = await connectToHost(socketPath);\n      probe.close();\n      throw new Error(`a pty-host is already listening on ${socketPath}`);\n    } catch (err) {\n      if ((err as Error).message?.startsWith(\"a pty-host is already listening\")) throw err;\n      // Nothing answered — the file, if any, is a corpse.\n      rmSync(socketPath, { force: true });\n    }\n  }\n\n  const server = createServer((socket) => {\n    const transport = socketTransport(socket);\n    const dispose = handlers.onConnection(transport);\n    transport.onClose(dispose);\n  });\n\n  return new Promise((resolve, reject) => {\n    server.once(\"error\", reject);\n    server.listen(socketPath, () => {\n      server.removeListener(\"error\", reject);\n      resolve(server);\n    });\n  });\n}\n\n/** Broadcast helper: a message to every currently-connected streamer. */\nexport function broadcast(\n  transports: Iterable<HostTransport>,\n  message: Parameters<typeof encodeMessage>[0],\n): void {\n  const line = encodeMessage(message);\n  for (const t of transports) {\n    try {\n      t.send(line);\n    } catch {\n      // A dead peer is reaped by its own close handler; one bad write must not\n      // stop the others from being told.\n    }\n  }\n}\n","(function(nacl) {\n'use strict';\n\n// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.\n// Public domain.\n//\n// Implementation derived from TweetNaCl version 20140427.\n// See for details: http://tweetnacl.cr.yp.to/\n\nvar gf = function(init) {\n  var i, r = new Float64Array(16);\n  if (init) for (i = 0; i < init.length; i++) r[i] = init[i];\n  return r;\n};\n\n//  Pluggable, initialized in high-level API below.\nvar randombytes = function(/* x, n */) { throw new Error('no PRNG'); };\n\nvar _0 = new Uint8Array(16);\nvar _9 = new Uint8Array(32); _9[0] = 9;\n\nvar gf0 = gf(),\n    gf1 = gf([1]),\n    _121665 = gf([0xdb41, 1]),\n    D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]),\n    D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]),\n    X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]),\n    Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]),\n    I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);\n\nfunction ts64(x, i, h, l) {\n  x[i]   = (h >> 24) & 0xff;\n  x[i+1] = (h >> 16) & 0xff;\n  x[i+2] = (h >>  8) & 0xff;\n  x[i+3] = h & 0xff;\n  x[i+4] = (l >> 24)  & 0xff;\n  x[i+5] = (l >> 16)  & 0xff;\n  x[i+6] = (l >>  8)  & 0xff;\n  x[i+7] = l & 0xff;\n}\n\nfunction vn(x, xi, y, yi, n) {\n  var i,d = 0;\n  for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i];\n  return (1 & ((d - 1) >>> 8)) - 1;\n}\n\nfunction crypto_verify_16(x, xi, y, yi) {\n  return vn(x,xi,y,yi,16);\n}\n\nfunction crypto_verify_32(x, xi, y, yi) {\n  return vn(x,xi,y,yi,32);\n}\n\nfunction core_salsa20(o, p, k, c) {\n  var j0  = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n      j1  = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n      j2  = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n      j3  = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n      j4  = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n      j5  = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n      j6  = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n      j7  = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n      j8  = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n      j9  = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n      j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n      j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n      j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n      j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n      j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n      j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n  var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n      x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n      x15 = j15, u;\n\n  for (var i = 0; i < 20; i += 2) {\n    u = x0 + x12 | 0;\n    x4 ^= u<<7 | u>>>(32-7);\n    u = x4 + x0 | 0;\n    x8 ^= u<<9 | u>>>(32-9);\n    u = x8 + x4 | 0;\n    x12 ^= u<<13 | u>>>(32-13);\n    u = x12 + x8 | 0;\n    x0 ^= u<<18 | u>>>(32-18);\n\n    u = x5 + x1 | 0;\n    x9 ^= u<<7 | u>>>(32-7);\n    u = x9 + x5 | 0;\n    x13 ^= u<<9 | u>>>(32-9);\n    u = x13 + x9 | 0;\n    x1 ^= u<<13 | u>>>(32-13);\n    u = x1 + x13 | 0;\n    x5 ^= u<<18 | u>>>(32-18);\n\n    u = x10 + x6 | 0;\n    x14 ^= u<<7 | u>>>(32-7);\n    u = x14 + x10 | 0;\n    x2 ^= u<<9 | u>>>(32-9);\n    u = x2 + x14 | 0;\n    x6 ^= u<<13 | u>>>(32-13);\n    u = x6 + x2 | 0;\n    x10 ^= u<<18 | u>>>(32-18);\n\n    u = x15 + x11 | 0;\n    x3 ^= u<<7 | u>>>(32-7);\n    u = x3 + x15 | 0;\n    x7 ^= u<<9 | u>>>(32-9);\n    u = x7 + x3 | 0;\n    x11 ^= u<<13 | u>>>(32-13);\n    u = x11 + x7 | 0;\n    x15 ^= u<<18 | u>>>(32-18);\n\n    u = x0 + x3 | 0;\n    x1 ^= u<<7 | u>>>(32-7);\n    u = x1 + x0 | 0;\n    x2 ^= u<<9 | u>>>(32-9);\n    u = x2 + x1 | 0;\n    x3 ^= u<<13 | u>>>(32-13);\n    u = x3 + x2 | 0;\n    x0 ^= u<<18 | u>>>(32-18);\n\n    u = x5 + x4 | 0;\n    x6 ^= u<<7 | u>>>(32-7);\n    u = x6 + x5 | 0;\n    x7 ^= u<<9 | u>>>(32-9);\n    u = x7 + x6 | 0;\n    x4 ^= u<<13 | u>>>(32-13);\n    u = x4 + x7 | 0;\n    x5 ^= u<<18 | u>>>(32-18);\n\n    u = x10 + x9 | 0;\n    x11 ^= u<<7 | u>>>(32-7);\n    u = x11 + x10 | 0;\n    x8 ^= u<<9 | u>>>(32-9);\n    u = x8 + x11 | 0;\n    x9 ^= u<<13 | u>>>(32-13);\n    u = x9 + x8 | 0;\n    x10 ^= u<<18 | u>>>(32-18);\n\n    u = x15 + x14 | 0;\n    x12 ^= u<<7 | u>>>(32-7);\n    u = x12 + x15 | 0;\n    x13 ^= u<<9 | u>>>(32-9);\n    u = x13 + x12 | 0;\n    x14 ^= u<<13 | u>>>(32-13);\n    u = x14 + x13 | 0;\n    x15 ^= u<<18 | u>>>(32-18);\n  }\n   x0 =  x0 +  j0 | 0;\n   x1 =  x1 +  j1 | 0;\n   x2 =  x2 +  j2 | 0;\n   x3 =  x3 +  j3 | 0;\n   x4 =  x4 +  j4 | 0;\n   x5 =  x5 +  j5 | 0;\n   x6 =  x6 +  j6 | 0;\n   x7 =  x7 +  j7 | 0;\n   x8 =  x8 +  j8 | 0;\n   x9 =  x9 +  j9 | 0;\n  x10 = x10 + j10 | 0;\n  x11 = x11 + j11 | 0;\n  x12 = x12 + j12 | 0;\n  x13 = x13 + j13 | 0;\n  x14 = x14 + j14 | 0;\n  x15 = x15 + j15 | 0;\n\n  o[ 0] = x0 >>>  0 & 0xff;\n  o[ 1] = x0 >>>  8 & 0xff;\n  o[ 2] = x0 >>> 16 & 0xff;\n  o[ 3] = x0 >>> 24 & 0xff;\n\n  o[ 4] = x1 >>>  0 & 0xff;\n  o[ 5] = x1 >>>  8 & 0xff;\n  o[ 6] = x1 >>> 16 & 0xff;\n  o[ 7] = x1 >>> 24 & 0xff;\n\n  o[ 8] = x2 >>>  0 & 0xff;\n  o[ 9] = x2 >>>  8 & 0xff;\n  o[10] = x2 >>> 16 & 0xff;\n  o[11] = x2 >>> 24 & 0xff;\n\n  o[12] = x3 >>>  0 & 0xff;\n  o[13] = x3 >>>  8 & 0xff;\n  o[14] = x3 >>> 16 & 0xff;\n  o[15] = x3 >>> 24 & 0xff;\n\n  o[16] = x4 >>>  0 & 0xff;\n  o[17] = x4 >>>  8 & 0xff;\n  o[18] = x4 >>> 16 & 0xff;\n  o[19] = x4 >>> 24 & 0xff;\n\n  o[20] = x5 >>>  0 & 0xff;\n  o[21] = x5 >>>  8 & 0xff;\n  o[22] = x5 >>> 16 & 0xff;\n  o[23] = x5 >>> 24 & 0xff;\n\n  o[24] = x6 >>>  0 & 0xff;\n  o[25] = x6 >>>  8 & 0xff;\n  o[26] = x6 >>> 16 & 0xff;\n  o[27] = x6 >>> 24 & 0xff;\n\n  o[28] = x7 >>>  0 & 0xff;\n  o[29] = x7 >>>  8 & 0xff;\n  o[30] = x7 >>> 16 & 0xff;\n  o[31] = x7 >>> 24 & 0xff;\n\n  o[32] = x8 >>>  0 & 0xff;\n  o[33] = x8 >>>  8 & 0xff;\n  o[34] = x8 >>> 16 & 0xff;\n  o[35] = x8 >>> 24 & 0xff;\n\n  o[36] = x9 >>>  0 & 0xff;\n  o[37] = x9 >>>  8 & 0xff;\n  o[38] = x9 >>> 16 & 0xff;\n  o[39] = x9 >>> 24 & 0xff;\n\n  o[40] = x10 >>>  0 & 0xff;\n  o[41] = x10 >>>  8 & 0xff;\n  o[42] = x10 >>> 16 & 0xff;\n  o[43] = x10 >>> 24 & 0xff;\n\n  o[44] = x11 >>>  0 & 0xff;\n  o[45] = x11 >>>  8 & 0xff;\n  o[46] = x11 >>> 16 & 0xff;\n  o[47] = x11 >>> 24 & 0xff;\n\n  o[48] = x12 >>>  0 & 0xff;\n  o[49] = x12 >>>  8 & 0xff;\n  o[50] = x12 >>> 16 & 0xff;\n  o[51] = x12 >>> 24 & 0xff;\n\n  o[52] = x13 >>>  0 & 0xff;\n  o[53] = x13 >>>  8 & 0xff;\n  o[54] = x13 >>> 16 & 0xff;\n  o[55] = x13 >>> 24 & 0xff;\n\n  o[56] = x14 >>>  0 & 0xff;\n  o[57] = x14 >>>  8 & 0xff;\n  o[58] = x14 >>> 16 & 0xff;\n  o[59] = x14 >>> 24 & 0xff;\n\n  o[60] = x15 >>>  0 & 0xff;\n  o[61] = x15 >>>  8 & 0xff;\n  o[62] = x15 >>> 16 & 0xff;\n  o[63] = x15 >>> 24 & 0xff;\n}\n\nfunction core_hsalsa20(o,p,k,c) {\n  var j0  = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n      j1  = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n      j2  = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n      j3  = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n      j4  = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n      j5  = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n      j6  = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n      j7  = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n      j8  = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n      j9  = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n      j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n      j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n      j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n      j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n      j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n      j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n  var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n      x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n      x15 = j15, u;\n\n  for (var i = 0; i < 20; i += 2) {\n    u = x0 + x12 | 0;\n    x4 ^= u<<7 | u>>>(32-7);\n    u = x4 + x0 | 0;\n    x8 ^= u<<9 | u>>>(32-9);\n    u = x8 + x4 | 0;\n    x12 ^= u<<13 | u>>>(32-13);\n    u = x12 + x8 | 0;\n    x0 ^= u<<18 | u>>>(32-18);\n\n    u = x5 + x1 | 0;\n    x9 ^= u<<7 | u>>>(32-7);\n    u = x9 + x5 | 0;\n    x13 ^= u<<9 | u>>>(32-9);\n    u = x13 + x9 | 0;\n    x1 ^= u<<13 | u>>>(32-13);\n    u = x1 + x13 | 0;\n    x5 ^= u<<18 | u>>>(32-18);\n\n    u = x10 + x6 | 0;\n    x14 ^= u<<7 | u>>>(32-7);\n    u = x14 + x10 | 0;\n    x2 ^= u<<9 | u>>>(32-9);\n    u = x2 + x14 | 0;\n    x6 ^= u<<13 | u>>>(32-13);\n    u = x6 + x2 | 0;\n    x10 ^= u<<18 | u>>>(32-18);\n\n    u = x15 + x11 | 0;\n    x3 ^= u<<7 | u>>>(32-7);\n    u = x3 + x15 | 0;\n    x7 ^= u<<9 | u>>>(32-9);\n    u = x7 + x3 | 0;\n    x11 ^= u<<13 | u>>>(32-13);\n    u = x11 + x7 | 0;\n    x15 ^= u<<18 | u>>>(32-18);\n\n    u = x0 + x3 | 0;\n    x1 ^= u<<7 | u>>>(32-7);\n    u = x1 + x0 | 0;\n    x2 ^= u<<9 | u>>>(32-9);\n    u = x2 + x1 | 0;\n    x3 ^= u<<13 | u>>>(32-13);\n    u = x3 + x2 | 0;\n    x0 ^= u<<18 | u>>>(32-18);\n\n    u = x5 + x4 | 0;\n    x6 ^= u<<7 | u>>>(32-7);\n    u = x6 + x5 | 0;\n    x7 ^= u<<9 | u>>>(32-9);\n    u = x7 + x6 | 0;\n    x4 ^= u<<13 | u>>>(32-13);\n    u = x4 + x7 | 0;\n    x5 ^= u<<18 | u>>>(32-18);\n\n    u = x10 + x9 | 0;\n    x11 ^= u<<7 | u>>>(32-7);\n    u = x11 + x10 | 0;\n    x8 ^= u<<9 | u>>>(32-9);\n    u = x8 + x11 | 0;\n    x9 ^= u<<13 | u>>>(32-13);\n    u = x9 + x8 | 0;\n    x10 ^= u<<18 | u>>>(32-18);\n\n    u = x15 + x14 | 0;\n    x12 ^= u<<7 | u>>>(32-7);\n    u = x12 + x15 | 0;\n    x13 ^= u<<9 | u>>>(32-9);\n    u = x13 + x12 | 0;\n    x14 ^= u<<13 | u>>>(32-13);\n    u = x14 + x13 | 0;\n    x15 ^= u<<18 | u>>>(32-18);\n  }\n\n  o[ 0] = x0 >>>  0 & 0xff;\n  o[ 1] = x0 >>>  8 & 0xff;\n  o[ 2] = x0 >>> 16 & 0xff;\n  o[ 3] = x0 >>> 24 & 0xff;\n\n  o[ 4] = x5 >>>  0 & 0xff;\n  o[ 5] = x5 >>>  8 & 0xff;\n  o[ 6] = x5 >>> 16 & 0xff;\n  o[ 7] = x5 >>> 24 & 0xff;\n\n  o[ 8] = x10 >>>  0 & 0xff;\n  o[ 9] = x10 >>>  8 & 0xff;\n  o[10] = x10 >>> 16 & 0xff;\n  o[11] = x10 >>> 24 & 0xff;\n\n  o[12] = x15 >>>  0 & 0xff;\n  o[13] = x15 >>>  8 & 0xff;\n  o[14] = x15 >>> 16 & 0xff;\n  o[15] = x15 >>> 24 & 0xff;\n\n  o[16] = x6 >>>  0 & 0xff;\n  o[17] = x6 >>>  8 & 0xff;\n  o[18] = x6 >>> 16 & 0xff;\n  o[19] = x6 >>> 24 & 0xff;\n\n  o[20] = x7 >>>  0 & 0xff;\n  o[21] = x7 >>>  8 & 0xff;\n  o[22] = x7 >>> 16 & 0xff;\n  o[23] = x7 >>> 24 & 0xff;\n\n  o[24] = x8 >>>  0 & 0xff;\n  o[25] = x8 >>>  8 & 0xff;\n  o[26] = x8 >>> 16 & 0xff;\n  o[27] = x8 >>> 24 & 0xff;\n\n  o[28] = x9 >>>  0 & 0xff;\n  o[29] = x9 >>>  8 & 0xff;\n  o[30] = x9 >>> 16 & 0xff;\n  o[31] = x9 >>> 24 & 0xff;\n}\n\nfunction crypto_core_salsa20(out,inp,k,c) {\n  core_salsa20(out,inp,k,c);\n}\n\nfunction crypto_core_hsalsa20(out,inp,k,c) {\n  core_hsalsa20(out,inp,k,c);\n}\n\nvar sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);\n            // \"expand 32-byte k\"\n\nfunction crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) {\n  var z = new Uint8Array(16), x = new Uint8Array(64);\n  var u, i;\n  for (i = 0; i < 16; i++) z[i] = 0;\n  for (i = 0; i < 8; i++) z[i] = n[i];\n  while (b >= 64) {\n    crypto_core_salsa20(x,z,k,sigma);\n    for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n    u = 1;\n    for (i = 8; i < 16; i++) {\n      u = u + (z[i] & 0xff) | 0;\n      z[i] = u & 0xff;\n      u >>>= 8;\n    }\n    b -= 64;\n    cpos += 64;\n    mpos += 64;\n  }\n  if (b > 0) {\n    crypto_core_salsa20(x,z,k,sigma);\n    for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n  }\n  return 0;\n}\n\nfunction crypto_stream_salsa20(c,cpos,b,n,k) {\n  var z = new Uint8Array(16), x = new Uint8Array(64);\n  var u, i;\n  for (i = 0; i < 16; i++) z[i] = 0;\n  for (i = 0; i < 8; i++) z[i] = n[i];\n  while (b >= 64) {\n    crypto_core_salsa20(x,z,k,sigma);\n    for (i = 0; i < 64; i++) c[cpos+i] = x[i];\n    u = 1;\n    for (i = 8; i < 16; i++) {\n      u = u + (z[i] & 0xff) | 0;\n      z[i] = u & 0xff;\n      u >>>= 8;\n    }\n    b -= 64;\n    cpos += 64;\n  }\n  if (b > 0) {\n    crypto_core_salsa20(x,z,k,sigma);\n    for (i = 0; i < b; i++) c[cpos+i] = x[i];\n  }\n  return 0;\n}\n\nfunction crypto_stream(c,cpos,d,n,k) {\n  var s = new Uint8Array(32);\n  crypto_core_hsalsa20(s,n,k,sigma);\n  var sn = new Uint8Array(8);\n  for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n  return crypto_stream_salsa20(c,cpos,d,sn,s);\n}\n\nfunction crypto_stream_xor(c,cpos,m,mpos,d,n,k) {\n  var s = new Uint8Array(32);\n  crypto_core_hsalsa20(s,n,k,sigma);\n  var sn = new Uint8Array(8);\n  for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n  return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s);\n}\n\n/*\n* Port of Andrew Moon's Poly1305-donna-16. Public domain.\n* https://github.com/floodyberry/poly1305-donna\n*/\n\nvar poly1305 = function(key) {\n  this.buffer = new Uint8Array(16);\n  this.r = new Uint16Array(10);\n  this.h = new Uint16Array(10);\n  this.pad = new Uint16Array(8);\n  this.leftover = 0;\n  this.fin = 0;\n\n  var t0, t1, t2, t3, t4, t5, t6, t7;\n\n  t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0                     ) & 0x1fff;\n  t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 <<  3)) & 0x1fff;\n  t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 <<  6)) & 0x1f03;\n  t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>>  7) | (t3 <<  9)) & 0x1fff;\n  t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>>  4) | (t4 << 12)) & 0x00ff;\n  this.r[5] = ((t4 >>>  1)) & 0x1ffe;\n  t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 <<  2)) & 0x1fff;\n  t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 <<  5)) & 0x1f81;\n  t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>>  8) | (t7 <<  8)) & 0x1fff;\n  this.r[9] = ((t7 >>>  5)) & 0x007f;\n\n  this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8;\n  this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8;\n  this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8;\n  this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8;\n  this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8;\n  this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8;\n  this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8;\n  this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8;\n};\n\npoly1305.prototype.blocks = function(m, mpos, bytes) {\n  var hibit = this.fin ? 0 : (1 << 11);\n  var t0, t1, t2, t3, t4, t5, t6, t7, c;\n  var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;\n\n  var h0 = this.h[0],\n      h1 = this.h[1],\n      h2 = this.h[2],\n      h3 = this.h[3],\n      h4 = this.h[4],\n      h5 = this.h[5],\n      h6 = this.h[6],\n      h7 = this.h[7],\n      h8 = this.h[8],\n      h9 = this.h[9];\n\n  var r0 = this.r[0],\n      r1 = this.r[1],\n      r2 = this.r[2],\n      r3 = this.r[3],\n      r4 = this.r[4],\n      r5 = this.r[5],\n      r6 = this.r[6],\n      r7 = this.r[7],\n      r8 = this.r[8],\n      r9 = this.r[9];\n\n  while (bytes >= 16) {\n    t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0                     ) & 0x1fff;\n    t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 <<  3)) & 0x1fff;\n    t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 <<  6)) & 0x1fff;\n    t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>>  7) | (t3 <<  9)) & 0x1fff;\n    t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>>  4) | (t4 << 12)) & 0x1fff;\n    h5 += ((t4 >>>  1)) & 0x1fff;\n    t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 <<  2)) & 0x1fff;\n    t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 <<  5)) & 0x1fff;\n    t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>>  8) | (t7 <<  8)) & 0x1fff;\n    h9 += ((t7 >>> 5)) | hibit;\n\n    c = 0;\n\n    d0 = c;\n    d0 += h0 * r0;\n    d0 += h1 * (5 * r9);\n    d0 += h2 * (5 * r8);\n    d0 += h3 * (5 * r7);\n    d0 += h4 * (5 * r6);\n    c = (d0 >>> 13); d0 &= 0x1fff;\n    d0 += h5 * (5 * r5);\n    d0 += h6 * (5 * r4);\n    d0 += h7 * (5 * r3);\n    d0 += h8 * (5 * r2);\n    d0 += h9 * (5 * r1);\n    c += (d0 >>> 13); d0 &= 0x1fff;\n\n    d1 = c;\n    d1 += h0 * r1;\n    d1 += h1 * r0;\n    d1 += h2 * (5 * r9);\n    d1 += h3 * (5 * r8);\n    d1 += h4 * (5 * r7);\n    c = (d1 >>> 13); d1 &= 0x1fff;\n    d1 += h5 * (5 * r6);\n    d1 += h6 * (5 * r5);\n    d1 += h7 * (5 * r4);\n    d1 += h8 * (5 * r3);\n    d1 += h9 * (5 * r2);\n    c += (d1 >>> 13); d1 &= 0x1fff;\n\n    d2 = c;\n    d2 += h0 * r2;\n    d2 += h1 * r1;\n    d2 += h2 * r0;\n    d2 += h3 * (5 * r9);\n    d2 += h4 * (5 * r8);\n    c = (d2 >>> 13); d2 &= 0x1fff;\n    d2 += h5 * (5 * r7);\n    d2 += h6 * (5 * r6);\n    d2 += h7 * (5 * r5);\n    d2 += h8 * (5 * r4);\n    d2 += h9 * (5 * r3);\n    c += (d2 >>> 13); d2 &= 0x1fff;\n\n    d3 = c;\n    d3 += h0 * r3;\n    d3 += h1 * r2;\n    d3 += h2 * r1;\n    d3 += h3 * r0;\n    d3 += h4 * (5 * r9);\n    c = (d3 >>> 13); d3 &= 0x1fff;\n    d3 += h5 * (5 * r8);\n    d3 += h6 * (5 * r7);\n    d3 += h7 * (5 * r6);\n    d3 += h8 * (5 * r5);\n    d3 += h9 * (5 * r4);\n    c += (d3 >>> 13); d3 &= 0x1fff;\n\n    d4 = c;\n    d4 += h0 * r4;\n    d4 += h1 * r3;\n    d4 += h2 * r2;\n    d4 += h3 * r1;\n    d4 += h4 * r0;\n    c = (d4 >>> 13); d4 &= 0x1fff;\n    d4 += h5 * (5 * r9);\n    d4 += h6 * (5 * r8);\n    d4 += h7 * (5 * r7);\n    d4 += h8 * (5 * r6);\n    d4 += h9 * (5 * r5);\n    c += (d4 >>> 13); d4 &= 0x1fff;\n\n    d5 = c;\n    d5 += h0 * r5;\n    d5 += h1 * r4;\n    d5 += h2 * r3;\n    d5 += h3 * r2;\n    d5 += h4 * r1;\n    c = (d5 >>> 13); d5 &= 0x1fff;\n    d5 += h5 * r0;\n    d5 += h6 * (5 * r9);\n    d5 += h7 * (5 * r8);\n    d5 += h8 * (5 * r7);\n    d5 += h9 * (5 * r6);\n    c += (d5 >>> 13); d5 &= 0x1fff;\n\n    d6 = c;\n    d6 += h0 * r6;\n    d6 += h1 * r5;\n    d6 += h2 * r4;\n    d6 += h3 * r3;\n    d6 += h4 * r2;\n    c = (d6 >>> 13); d6 &= 0x1fff;\n    d6 += h5 * r1;\n    d6 += h6 * r0;\n    d6 += h7 * (5 * r9);\n    d6 += h8 * (5 * r8);\n    d6 += h9 * (5 * r7);\n    c += (d6 >>> 13); d6 &= 0x1fff;\n\n    d7 = c;\n    d7 += h0 * r7;\n    d7 += h1 * r6;\n    d7 += h2 * r5;\n    d7 += h3 * r4;\n    d7 += h4 * r3;\n    c = (d7 >>> 13); d7 &= 0x1fff;\n    d7 += h5 * r2;\n    d7 += h6 * r1;\n    d7 += h7 * r0;\n    d7 += h8 * (5 * r9);\n    d7 += h9 * (5 * r8);\n    c += (d7 >>> 13); d7 &= 0x1fff;\n\n    d8 = c;\n    d8 += h0 * r8;\n    d8 += h1 * r7;\n    d8 += h2 * r6;\n    d8 += h3 * r5;\n    d8 += h4 * r4;\n    c = (d8 >>> 13); d8 &= 0x1fff;\n    d8 += h5 * r3;\n    d8 += h6 * r2;\n    d8 += h7 * r1;\n    d8 += h8 * r0;\n    d8 += h9 * (5 * r9);\n    c += (d8 >>> 13); d8 &= 0x1fff;\n\n    d9 = c;\n    d9 += h0 * r9;\n    d9 += h1 * r8;\n    d9 += h2 * r7;\n    d9 += h3 * r6;\n    d9 += h4 * r5;\n    c = (d9 >>> 13); d9 &= 0x1fff;\n    d9 += h5 * r4;\n    d9 += h6 * r3;\n    d9 += h7 * r2;\n    d9 += h8 * r1;\n    d9 += h9 * r0;\n    c += (d9 >>> 13); d9 &= 0x1fff;\n\n    c = (((c << 2) + c)) | 0;\n    c = (c + d0) | 0;\n    d0 = c & 0x1fff;\n    c = (c >>> 13);\n    d1 += c;\n\n    h0 = d0;\n    h1 = d1;\n    h2 = d2;\n    h3 = d3;\n    h4 = d4;\n    h5 = d5;\n    h6 = d6;\n    h7 = d7;\n    h8 = d8;\n    h9 = d9;\n\n    mpos += 16;\n    bytes -= 16;\n  }\n  this.h[0] = h0;\n  this.h[1] = h1;\n  this.h[2] = h2;\n  this.h[3] = h3;\n  this.h[4] = h4;\n  this.h[5] = h5;\n  this.h[6] = h6;\n  this.h[7] = h7;\n  this.h[8] = h8;\n  this.h[9] = h9;\n};\n\npoly1305.prototype.finish = function(mac, macpos) {\n  var g = new Uint16Array(10);\n  var c, mask, f, i;\n\n  if (this.leftover) {\n    i = this.leftover;\n    this.buffer[i++] = 1;\n    for (; i < 16; i++) this.buffer[i] = 0;\n    this.fin = 1;\n    this.blocks(this.buffer, 0, 16);\n  }\n\n  c = this.h[1] >>> 13;\n  this.h[1] &= 0x1fff;\n  for (i = 2; i < 10; i++) {\n    this.h[i] += c;\n    c = this.h[i] >>> 13;\n    this.h[i] &= 0x1fff;\n  }\n  this.h[0] += (c * 5);\n  c = this.h[0] >>> 13;\n  this.h[0] &= 0x1fff;\n  this.h[1] += c;\n  c = this.h[1] >>> 13;\n  this.h[1] &= 0x1fff;\n  this.h[2] += c;\n\n  g[0] = this.h[0] + 5;\n  c = g[0] >>> 13;\n  g[0] &= 0x1fff;\n  for (i = 1; i < 10; i++) {\n    g[i] = this.h[i] + c;\n    c = g[i] >>> 13;\n    g[i] &= 0x1fff;\n  }\n  g[9] -= (1 << 13);\n\n  mask = (c ^ 1) - 1;\n  for (i = 0; i < 10; i++) g[i] &= mask;\n  mask = ~mask;\n  for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i];\n\n  this.h[0] = ((this.h[0]       ) | (this.h[1] << 13)                    ) & 0xffff;\n  this.h[1] = ((this.h[1] >>>  3) | (this.h[2] << 10)                    ) & 0xffff;\n  this.h[2] = ((this.h[2] >>>  6) | (this.h[3] <<  7)                    ) & 0xffff;\n  this.h[3] = ((this.h[3] >>>  9) | (this.h[4] <<  4)                    ) & 0xffff;\n  this.h[4] = ((this.h[4] >>> 12) | (this.h[5] <<  1) | (this.h[6] << 14)) & 0xffff;\n  this.h[5] = ((this.h[6] >>>  2) | (this.h[7] << 11)                    ) & 0xffff;\n  this.h[6] = ((this.h[7] >>>  5) | (this.h[8] <<  8)                    ) & 0xffff;\n  this.h[7] = ((this.h[8] >>>  8) | (this.h[9] <<  5)                    ) & 0xffff;\n\n  f = this.h[0] + this.pad[0];\n  this.h[0] = f & 0xffff;\n  for (i = 1; i < 8; i++) {\n    f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0;\n    this.h[i] = f & 0xffff;\n  }\n\n  mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff;\n  mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff;\n  mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff;\n  mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff;\n  mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff;\n  mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff;\n  mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff;\n  mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff;\n  mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff;\n  mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff;\n  mac[macpos+10] = (this.h[5] >>> 0) & 0xff;\n  mac[macpos+11] = (this.h[5] >>> 8) & 0xff;\n  mac[macpos+12] = (this.h[6] >>> 0) & 0xff;\n  mac[macpos+13] = (this.h[6] >>> 8) & 0xff;\n  mac[macpos+14] = (this.h[7] >>> 0) & 0xff;\n  mac[macpos+15] = (this.h[7] >>> 8) & 0xff;\n};\n\npoly1305.prototype.update = function(m, mpos, bytes) {\n  var i, want;\n\n  if (this.leftover) {\n    want = (16 - this.leftover);\n    if (want > bytes)\n      want = bytes;\n    for (i = 0; i < want; i++)\n      this.buffer[this.leftover + i] = m[mpos+i];\n    bytes -= want;\n    mpos += want;\n    this.leftover += want;\n    if (this.leftover < 16)\n      return;\n    this.blocks(this.buffer, 0, 16);\n    this.leftover = 0;\n  }\n\n  if (bytes >= 16) {\n    want = bytes - (bytes % 16);\n    this.blocks(m, mpos, want);\n    mpos += want;\n    bytes -= want;\n  }\n\n  if (bytes) {\n    for (i = 0; i < bytes; i++)\n      this.buffer[this.leftover + i] = m[mpos+i];\n    this.leftover += bytes;\n  }\n};\n\nfunction crypto_onetimeauth(out, outpos, m, mpos, n, k) {\n  var s = new poly1305(k);\n  s.update(m, mpos, n);\n  s.finish(out, outpos);\n  return 0;\n}\n\nfunction crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {\n  var x = new Uint8Array(16);\n  crypto_onetimeauth(x,0,m,mpos,n,k);\n  return crypto_verify_16(h,hpos,x,0);\n}\n\nfunction crypto_secretbox(c,m,d,n,k) {\n  var i;\n  if (d < 32) return -1;\n  crypto_stream_xor(c,0,m,0,d,n,k);\n  crypto_onetimeauth(c, 16, c, 32, d - 32, c);\n  for (i = 0; i < 16; i++) c[i] = 0;\n  return 0;\n}\n\nfunction crypto_secretbox_open(m,c,d,n,k) {\n  var i;\n  var x = new Uint8Array(32);\n  if (d < 32) return -1;\n  crypto_stream(x,0,32,n,k);\n  if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1;\n  crypto_stream_xor(m,0,c,0,d,n,k);\n  for (i = 0; i < 32; i++) m[i] = 0;\n  return 0;\n}\n\nfunction set25519(r, a) {\n  var i;\n  for (i = 0; i < 16; i++) r[i] = a[i]|0;\n}\n\nfunction car25519(o) {\n  var i, v, c = 1;\n  for (i = 0; i < 16; i++) {\n    v = o[i] + c + 65535;\n    c = Math.floor(v / 65536);\n    o[i] = v - c * 65536;\n  }\n  o[0] += c-1 + 37 * (c-1);\n}\n\nfunction sel25519(p, q, b) {\n  var t, c = ~(b-1);\n  for (var i = 0; i < 16; i++) {\n    t = c & (p[i] ^ q[i]);\n    p[i] ^= t;\n    q[i] ^= t;\n  }\n}\n\nfunction pack25519(o, n) {\n  var i, j, b;\n  var m = gf(), t = gf();\n  for (i = 0; i < 16; i++) t[i] = n[i];\n  car25519(t);\n  car25519(t);\n  car25519(t);\n  for (j = 0; j < 2; j++) {\n    m[0] = t[0] - 0xffed;\n    for (i = 1; i < 15; i++) {\n      m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);\n      m[i-1] &= 0xffff;\n    }\n    m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);\n    b = (m[15]>>16) & 1;\n    m[14] &= 0xffff;\n    sel25519(t, m, 1-b);\n  }\n  for (i = 0; i < 16; i++) {\n    o[2*i] = t[i] & 0xff;\n    o[2*i+1] = t[i]>>8;\n  }\n}\n\nfunction neq25519(a, b) {\n  var c = new Uint8Array(32), d = new Uint8Array(32);\n  pack25519(c, a);\n  pack25519(d, b);\n  return crypto_verify_32(c, 0, d, 0);\n}\n\nfunction par25519(a) {\n  var d = new Uint8Array(32);\n  pack25519(d, a);\n  return d[0] & 1;\n}\n\nfunction unpack25519(o, n) {\n  var i;\n  for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);\n  o[15] &= 0x7fff;\n}\n\nfunction A(o, a, b) {\n  for (var i = 0; i < 16; i++) o[i] = a[i] + b[i];\n}\n\nfunction Z(o, a, b) {\n  for (var i = 0; i < 16; i++) o[i] = a[i] - b[i];\n}\n\nfunction M(o, a, b) {\n  var v, c,\n     t0 = 0,  t1 = 0,  t2 = 0,  t3 = 0,  t4 = 0,  t5 = 0,  t6 = 0,  t7 = 0,\n     t8 = 0,  t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,\n    t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,\n    t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,\n    b0 = b[0],\n    b1 = b[1],\n    b2 = b[2],\n    b3 = b[3],\n    b4 = b[4],\n    b5 = b[5],\n    b6 = b[6],\n    b7 = b[7],\n    b8 = b[8],\n    b9 = b[9],\n    b10 = b[10],\n    b11 = b[11],\n    b12 = b[12],\n    b13 = b[13],\n    b14 = b[14],\n    b15 = b[15];\n\n  v = a[0];\n  t0 += v * b0;\n  t1 += v * b1;\n  t2 += v * b2;\n  t3 += v * b3;\n  t4 += v * b4;\n  t5 += v * b5;\n  t6 += v * b6;\n  t7 += v * b7;\n  t8 += v * b8;\n  t9 += v * b9;\n  t10 += v * b10;\n  t11 += v * b11;\n  t12 += v * b12;\n  t13 += v * b13;\n  t14 += v * b14;\n  t15 += v * b15;\n  v = a[1];\n  t1 += v * b0;\n  t2 += v * b1;\n  t3 += v * b2;\n  t4 += v * b3;\n  t5 += v * b4;\n  t6 += v * b5;\n  t7 += v * b6;\n  t8 += v * b7;\n  t9 += v * b8;\n  t10 += v * b9;\n  t11 += v * b10;\n  t12 += v * b11;\n  t13 += v * b12;\n  t14 += v * b13;\n  t15 += v * b14;\n  t16 += v * b15;\n  v = a[2];\n  t2 += v * b0;\n  t3 += v * b1;\n  t4 += v * b2;\n  t5 += v * b3;\n  t6 += v * b4;\n  t7 += v * b5;\n  t8 += v * b6;\n  t9 += v * b7;\n  t10 += v * b8;\n  t11 += v * b9;\n  t12 += v * b10;\n  t13 += v * b11;\n  t14 += v * b12;\n  t15 += v * b13;\n  t16 += v * b14;\n  t17 += v * b15;\n  v = a[3];\n  t3 += v * b0;\n  t4 += v * b1;\n  t5 += v * b2;\n  t6 += v * b3;\n  t7 += v * b4;\n  t8 += v * b5;\n  t9 += v * b6;\n  t10 += v * b7;\n  t11 += v * b8;\n  t12 += v * b9;\n  t13 += v * b10;\n  t14 += v * b11;\n  t15 += v * b12;\n  t16 += v * b13;\n  t17 += v * b14;\n  t18 += v * b15;\n  v = a[4];\n  t4 += v * b0;\n  t5 += v * b1;\n  t6 += v * b2;\n  t7 += v * b3;\n  t8 += v * b4;\n  t9 += v * b5;\n  t10 += v * b6;\n  t11 += v * b7;\n  t12 += v * b8;\n  t13 += v * b9;\n  t14 += v * b10;\n  t15 += v * b11;\n  t16 += v * b12;\n  t17 += v * b13;\n  t18 += v * b14;\n  t19 += v * b15;\n  v = a[5];\n  t5 += v * b0;\n  t6 += v * b1;\n  t7 += v * b2;\n  t8 += v * b3;\n  t9 += v * b4;\n  t10 += v * b5;\n  t11 += v * b6;\n  t12 += v * b7;\n  t13 += v * b8;\n  t14 += v * b9;\n  t15 += v * b10;\n  t16 += v * b11;\n  t17 += v * b12;\n  t18 += v * b13;\n  t19 += v * b14;\n  t20 += v * b15;\n  v = a[6];\n  t6 += v * b0;\n  t7 += v * b1;\n  t8 += v * b2;\n  t9 += v * b3;\n  t10 += v * b4;\n  t11 += v * b5;\n  t12 += v * b6;\n  t13 += v * b7;\n  t14 += v * b8;\n  t15 += v * b9;\n  t16 += v * b10;\n  t17 += v * b11;\n  t18 += v * b12;\n  t19 += v * b13;\n  t20 += v * b14;\n  t21 += v * b15;\n  v = a[7];\n  t7 += v * b0;\n  t8 += v * b1;\n  t9 += v * b2;\n  t10 += v * b3;\n  t11 += v * b4;\n  t12 += v * b5;\n  t13 += v * b6;\n  t14 += v * b7;\n  t15 += v * b8;\n  t16 += v * b9;\n  t17 += v * b10;\n  t18 += v * b11;\n  t19 += v * b12;\n  t20 += v * b13;\n  t21 += v * b14;\n  t22 += v * b15;\n  v = a[8];\n  t8 += v * b0;\n  t9 += v * b1;\n  t10 += v * b2;\n  t11 += v * b3;\n  t12 += v * b4;\n  t13 += v * b5;\n  t14 += v * b6;\n  t15 += v * b7;\n  t16 += v * b8;\n  t17 += v * b9;\n  t18 += v * b10;\n  t19 += v * b11;\n  t20 += v * b12;\n  t21 += v * b13;\n  t22 += v * b14;\n  t23 += v * b15;\n  v = a[9];\n  t9 += v * b0;\n  t10 += v * b1;\n  t11 += v * b2;\n  t12 += v * b3;\n  t13 += v * b4;\n  t14 += v * b5;\n  t15 += v * b6;\n  t16 += v * b7;\n  t17 += v * b8;\n  t18 += v * b9;\n  t19 += v * b10;\n  t20 += v * b11;\n  t21 += v * b12;\n  t22 += v * b13;\n  t23 += v * b14;\n  t24 += v * b15;\n  v = a[10];\n  t10 += v * b0;\n  t11 += v * b1;\n  t12 += v * b2;\n  t13 += v * b3;\n  t14 += v * b4;\n  t15 += v * b5;\n  t16 += v * b6;\n  t17 += v * b7;\n  t18 += v * b8;\n  t19 += v * b9;\n  t20 += v * b10;\n  t21 += v * b11;\n  t22 += v * b12;\n  t23 += v * b13;\n  t24 += v * b14;\n  t25 += v * b15;\n  v = a[11];\n  t11 += v * b0;\n  t12 += v * b1;\n  t13 += v * b2;\n  t14 += v * b3;\n  t15 += v * b4;\n  t16 += v * b5;\n  t17 += v * b6;\n  t18 += v * b7;\n  t19 += v * b8;\n  t20 += v * b9;\n  t21 += v * b10;\n  t22 += v * b11;\n  t23 += v * b12;\n  t24 += v * b13;\n  t25 += v * b14;\n  t26 += v * b15;\n  v = a[12];\n  t12 += v * b0;\n  t13 += v * b1;\n  t14 += v * b2;\n  t15 += v * b3;\n  t16 += v * b4;\n  t17 += v * b5;\n  t18 += v * b6;\n  t19 += v * b7;\n  t20 += v * b8;\n  t21 += v * b9;\n  t22 += v * b10;\n  t23 += v * b11;\n  t24 += v * b12;\n  t25 += v * b13;\n  t26 += v * b14;\n  t27 += v * b15;\n  v = a[13];\n  t13 += v * b0;\n  t14 += v * b1;\n  t15 += v * b2;\n  t16 += v * b3;\n  t17 += v * b4;\n  t18 += v * b5;\n  t19 += v * b6;\n  t20 += v * b7;\n  t21 += v * b8;\n  t22 += v * b9;\n  t23 += v * b10;\n  t24 += v * b11;\n  t25 += v * b12;\n  t26 += v * b13;\n  t27 += v * b14;\n  t28 += v * b15;\n  v = a[14];\n  t14 += v * b0;\n  t15 += v * b1;\n  t16 += v * b2;\n  t17 += v * b3;\n  t18 += v * b4;\n  t19 += v * b5;\n  t20 += v * b6;\n  t21 += v * b7;\n  t22 += v * b8;\n  t23 += v * b9;\n  t24 += v * b10;\n  t25 += v * b11;\n  t26 += v * b12;\n  t27 += v * b13;\n  t28 += v * b14;\n  t29 += v * b15;\n  v = a[15];\n  t15 += v * b0;\n  t16 += v * b1;\n  t17 += v * b2;\n  t18 += v * b3;\n  t19 += v * b4;\n  t20 += v * b5;\n  t21 += v * b6;\n  t22 += v * b7;\n  t23 += v * b8;\n  t24 += v * b9;\n  t25 += v * b10;\n  t26 += v * b11;\n  t27 += v * b12;\n  t28 += v * b13;\n  t29 += v * b14;\n  t30 += v * b15;\n\n  t0  += 38 * t16;\n  t1  += 38 * t17;\n  t2  += 38 * t18;\n  t3  += 38 * t19;\n  t4  += 38 * t20;\n  t5  += 38 * t21;\n  t6  += 38 * t22;\n  t7  += 38 * t23;\n  t8  += 38 * t24;\n  t9  += 38 * t25;\n  t10 += 38 * t26;\n  t11 += 38 * t27;\n  t12 += 38 * t28;\n  t13 += 38 * t29;\n  t14 += 38 * t30;\n  // t15 left as is\n\n  // first car\n  c = 1;\n  v =  t0 + c + 65535; c = Math.floor(v / 65536);  t0 = v - c * 65536;\n  v =  t1 + c + 65535; c = Math.floor(v / 65536);  t1 = v - c * 65536;\n  v =  t2 + c + 65535; c = Math.floor(v / 65536);  t2 = v - c * 65536;\n  v =  t3 + c + 65535; c = Math.floor(v / 65536);  t3 = v - c * 65536;\n  v =  t4 + c + 65535; c = Math.floor(v / 65536);  t4 = v - c * 65536;\n  v =  t5 + c + 65535; c = Math.floor(v / 65536);  t5 = v - c * 65536;\n  v =  t6 + c + 65535; c = Math.floor(v / 65536);  t6 = v - c * 65536;\n  v =  t7 + c + 65535; c = Math.floor(v / 65536);  t7 = v - c * 65536;\n  v =  t8 + c + 65535; c = Math.floor(v / 65536);  t8 = v - c * 65536;\n  v =  t9 + c + 65535; c = Math.floor(v / 65536);  t9 = v - c * 65536;\n  v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n  v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n  v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n  v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n  v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n  v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n  t0 += c-1 + 37 * (c-1);\n\n  // second car\n  c = 1;\n  v =  t0 + c + 65535; c = Math.floor(v / 65536);  t0 = v - c * 65536;\n  v =  t1 + c + 65535; c = Math.floor(v / 65536);  t1 = v - c * 65536;\n  v =  t2 + c + 65535; c = Math.floor(v / 65536);  t2 = v - c * 65536;\n  v =  t3 + c + 65535; c = Math.floor(v / 65536);  t3 = v - c * 65536;\n  v =  t4 + c + 65535; c = Math.floor(v / 65536);  t4 = v - c * 65536;\n  v =  t5 + c + 65535; c = Math.floor(v / 65536);  t5 = v - c * 65536;\n  v =  t6 + c + 65535; c = Math.floor(v / 65536);  t6 = v - c * 65536;\n  v =  t7 + c + 65535; c = Math.floor(v / 65536);  t7 = v - c * 65536;\n  v =  t8 + c + 65535; c = Math.floor(v / 65536);  t8 = v - c * 65536;\n  v =  t9 + c + 65535; c = Math.floor(v / 65536);  t9 = v - c * 65536;\n  v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n  v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n  v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n  v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n  v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n  v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n  t0 += c-1 + 37 * (c-1);\n\n  o[ 0] = t0;\n  o[ 1] = t1;\n  o[ 2] = t2;\n  o[ 3] = t3;\n  o[ 4] = t4;\n  o[ 5] = t5;\n  o[ 6] = t6;\n  o[ 7] = t7;\n  o[ 8] = t8;\n  o[ 9] = t9;\n  o[10] = t10;\n  o[11] = t11;\n  o[12] = t12;\n  o[13] = t13;\n  o[14] = t14;\n  o[15] = t15;\n}\n\nfunction S(o, a) {\n  M(o, a, a);\n}\n\nfunction inv25519(o, i) {\n  var c = gf();\n  var a;\n  for (a = 0; a < 16; a++) c[a] = i[a];\n  for (a = 253; a >= 0; a--) {\n    S(c, c);\n    if(a !== 2 && a !== 4) M(c, c, i);\n  }\n  for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction pow2523(o, i) {\n  var c = gf();\n  var a;\n  for (a = 0; a < 16; a++) c[a] = i[a];\n  for (a = 250; a >= 0; a--) {\n      S(c, c);\n      if(a !== 1) M(c, c, i);\n  }\n  for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction crypto_scalarmult(q, n, p) {\n  var z = new Uint8Array(32);\n  var x = new Float64Array(80), r, i;\n  var a = gf(), b = gf(), c = gf(),\n      d = gf(), e = gf(), f = gf();\n  for (i = 0; i < 31; i++) z[i] = n[i];\n  z[31]=(n[31]&127)|64;\n  z[0]&=248;\n  unpack25519(x,p);\n  for (i = 0; i < 16; i++) {\n    b[i]=x[i];\n    d[i]=a[i]=c[i]=0;\n  }\n  a[0]=d[0]=1;\n  for (i=254; i>=0; --i) {\n    r=(z[i>>>3]>>>(i&7))&1;\n    sel25519(a,b,r);\n    sel25519(c,d,r);\n    A(e,a,c);\n    Z(a,a,c);\n    A(c,b,d);\n    Z(b,b,d);\n    S(d,e);\n    S(f,a);\n    M(a,c,a);\n    M(c,b,e);\n    A(e,a,c);\n    Z(a,a,c);\n    S(b,a);\n    Z(c,d,f);\n    M(a,c,_121665);\n    A(a,a,d);\n    M(c,c,a);\n    M(a,d,f);\n    M(d,b,x);\n    S(b,e);\n    sel25519(a,b,r);\n    sel25519(c,d,r);\n  }\n  for (i = 0; i < 16; i++) {\n    x[i+16]=a[i];\n    x[i+32]=c[i];\n    x[i+48]=b[i];\n    x[i+64]=d[i];\n  }\n  var x32 = x.subarray(32);\n  var x16 = x.subarray(16);\n  inv25519(x32,x32);\n  M(x16,x16,x32);\n  pack25519(q,x16);\n  return 0;\n}\n\nfunction crypto_scalarmult_base(q, n) {\n  return crypto_scalarmult(q, n, _9);\n}\n\nfunction crypto_box_keypair(y, x) {\n  randombytes(x, 32);\n  return crypto_scalarmult_base(y, x);\n}\n\nfunction crypto_box_beforenm(k, y, x) {\n  var s = new Uint8Array(32);\n  crypto_scalarmult(s, x, y);\n  return crypto_core_hsalsa20(k, _0, s, sigma);\n}\n\nvar crypto_box_afternm = crypto_secretbox;\nvar crypto_box_open_afternm = crypto_secretbox_open;\n\nfunction crypto_box(c, m, d, n, y, x) {\n  var k = new Uint8Array(32);\n  crypto_box_beforenm(k, y, x);\n  return crypto_box_afternm(c, m, d, n, k);\n}\n\nfunction crypto_box_open(m, c, d, n, y, x) {\n  var k = new Uint8Array(32);\n  crypto_box_beforenm(k, y, x);\n  return crypto_box_open_afternm(m, c, d, n, k);\n}\n\nvar K = [\n  0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n  0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n  0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n  0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n  0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n  0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n  0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n  0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n  0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n  0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n  0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n  0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n  0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n  0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n  0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n  0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n  0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n  0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n  0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n  0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n  0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n  0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n  0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n  0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n  0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n  0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n  0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n  0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n  0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n  0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n  0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n  0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n  0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n  0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n  0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n  0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n  0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n  0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n  0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n  0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction crypto_hashblocks_hl(hh, hl, m, n) {\n  var wh = new Int32Array(16), wl = new Int32Array(16),\n      bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7,\n      bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7,\n      th, tl, i, j, h, l, a, b, c, d;\n\n  var ah0 = hh[0],\n      ah1 = hh[1],\n      ah2 = hh[2],\n      ah3 = hh[3],\n      ah4 = hh[4],\n      ah5 = hh[5],\n      ah6 = hh[6],\n      ah7 = hh[7],\n\n      al0 = hl[0],\n      al1 = hl[1],\n      al2 = hl[2],\n      al3 = hl[3],\n      al4 = hl[4],\n      al5 = hl[5],\n      al6 = hl[6],\n      al7 = hl[7];\n\n  var pos = 0;\n  while (n >= 128) {\n    for (i = 0; i < 16; i++) {\n      j = 8 * i + pos;\n      wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3];\n      wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7];\n    }\n    for (i = 0; i < 80; i++) {\n      bh0 = ah0;\n      bh1 = ah1;\n      bh2 = ah2;\n      bh3 = ah3;\n      bh4 = ah4;\n      bh5 = ah5;\n      bh6 = ah6;\n      bh7 = ah7;\n\n      bl0 = al0;\n      bl1 = al1;\n      bl2 = al2;\n      bl3 = al3;\n      bl4 = al4;\n      bl5 = al5;\n      bl6 = al6;\n      bl7 = al7;\n\n      // add\n      h = ah7;\n      l = al7;\n\n      a = l & 0xffff; b = l >>> 16;\n      c = h & 0xffff; d = h >>> 16;\n\n      // Sigma1\n      h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32))));\n      l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32))));\n\n      a += l & 0xffff; b += l >>> 16;\n      c += h & 0xffff; d += h >>> 16;\n\n      // Ch\n      h = (ah4 & ah5) ^ (~ah4 & ah6);\n      l = (al4 & al5) ^ (~al4 & al6);\n\n      a += l & 0xffff; b += l >>> 16;\n      c += h & 0xffff; d += h >>> 16;\n\n      // K\n      h = K[i*2];\n      l = K[i*2+1];\n\n      a += l & 0xffff; b += l >>> 16;\n      c += h & 0xffff; d += h >>> 16;\n\n      // w\n      h = wh[i%16];\n      l = wl[i%16];\n\n      a += l & 0xffff; b += l >>> 16;\n      c += h & 0xffff; d += h >>> 16;\n\n      b += a >>> 16;\n      c += b >>> 16;\n      d += c >>> 16;\n\n      th = c & 0xffff | d << 16;\n      tl = a & 0xffff | b << 16;\n\n      // add\n      h = th;\n      l = tl;\n\n      a = l & 0xffff; b = l >>> 16;\n      c = h & 0xffff; d = h >>> 16;\n\n      // Sigma0\n      h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32))));\n      l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32))));\n\n      a += l & 0xffff; b += l >>> 16;\n      c += h & 0xffff; d += h >>> 16;\n\n      // Maj\n      h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2);\n      l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2);\n\n      a += l & 0xffff; b += l >>> 16;\n      c += h & 0xffff; d += h >>> 16;\n\n      b += a >>> 16;\n      c += b >>> 16;\n      d += c >>> 16;\n\n      bh7 = (c & 0xffff) | (d << 16);\n      bl7 = (a & 0xffff) | (b << 16);\n\n      // add\n      h = bh3;\n      l = bl3;\n\n      a = l & 0xffff; b = l >>> 16;\n      c = h & 0xffff; d = h >>> 16;\n\n      h = th;\n      l = tl;\n\n      a += l & 0xffff; b += l >>> 16;\n      c += h & 0xffff; d += h >>> 16;\n\n      b += a >>> 16;\n      c += b >>> 16;\n      d += c >>> 16;\n\n      bh3 = (c & 0xffff) | (d << 16);\n      bl3 = (a & 0xffff) | (b << 16);\n\n      ah1 = bh0;\n      ah2 = bh1;\n      ah3 = bh2;\n      ah4 = bh3;\n      ah5 = bh4;\n      ah6 = bh5;\n      ah7 = bh6;\n      ah0 = bh7;\n\n      al1 = bl0;\n      al2 = bl1;\n      al3 = bl2;\n      al4 = bl3;\n      al5 = bl4;\n      al6 = bl5;\n      al7 = bl6;\n      al0 = bl7;\n\n      if (i%16 === 15) {\n        for (j = 0; j < 16; j++) {\n          // add\n          h = wh[j];\n          l = wl[j];\n\n          a = l & 0xffff; b = l >>> 16;\n          c = h & 0xffff; d = h >>> 16;\n\n          h = wh[(j+9)%16];\n          l = wl[(j+9)%16];\n\n          a += l & 0xffff; b += l >>> 16;\n          c += h & 0xffff; d += h >>> 16;\n\n          // sigma0\n          th = wh[(j+1)%16];\n          tl = wl[(j+1)%16];\n          h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7);\n          l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7)));\n\n          a += l & 0xffff; b += l >>> 16;\n          c += h & 0xffff; d += h >>> 16;\n\n          // sigma1\n          th = wh[(j+14)%16];\n          tl = wl[(j+14)%16];\n          h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6);\n          l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6)));\n\n          a += l & 0xffff; b += l >>> 16;\n          c += h & 0xffff; d += h >>> 16;\n\n          b += a >>> 16;\n          c += b >>> 16;\n          d += c >>> 16;\n\n          wh[j] = (c & 0xffff) | (d << 16);\n          wl[j] = (a & 0xffff) | (b << 16);\n        }\n      }\n    }\n\n    // add\n    h = ah0;\n    l = al0;\n\n    a = l & 0xffff; b = l >>> 16;\n    c = h & 0xffff; d = h >>> 16;\n\n    h = hh[0];\n    l = hl[0];\n\n    a += l & 0xffff; b += l >>> 16;\n    c += h & 0xffff; d += h >>> 16;\n\n    b += a >>> 16;\n    c += b >>> 16;\n    d += c >>> 16;\n\n    hh[0] = ah0 = (c & 0xffff) | (d << 16);\n    hl[0] = al0 = (a & 0xffff) | (b << 16);\n\n    h = ah1;\n    l = al1;\n\n    a = l & 0xffff; b = l >>> 16;\n    c = h & 0xffff; d = h >>> 16;\n\n    h = hh[1];\n    l = hl[1];\n\n    a += l & 0xffff; b += l >>> 16;\n    c += h & 0xffff; d += h >>> 16;\n\n    b += a >>> 16;\n    c += b >>> 16;\n    d += c >>> 16;\n\n    hh[1] = ah1 = (c & 0xffff) | (d << 16);\n    hl[1] = al1 = (a & 0xffff) | (b << 16);\n\n    h = ah2;\n    l = al2;\n\n    a = l & 0xffff; b = l >>> 16;\n    c = h & 0xffff; d = h >>> 16;\n\n    h = hh[2];\n    l = hl[2];\n\n    a += l & 0xffff; b += l >>> 16;\n    c += h & 0xffff; d += h >>> 16;\n\n    b += a >>> 16;\n    c += b >>> 16;\n    d += c >>> 16;\n\n    hh[2] = ah2 = (c & 0xffff) | (d << 16);\n    hl[2] = al2 = (a & 0xffff) | (b << 16);\n\n    h = ah3;\n    l = al3;\n\n    a = l & 0xffff; b = l >>> 16;\n    c = h & 0xffff; d = h >>> 16;\n\n    h = hh[3];\n    l = hl[3];\n\n    a += l & 0xffff; b += l >>> 16;\n    c += h & 0xffff; d += h >>> 16;\n\n    b += a >>> 16;\n    c += b >>> 16;\n    d += c >>> 16;\n\n    hh[3] = ah3 = (c & 0xffff) | (d << 16);\n    hl[3] = al3 = (a & 0xffff) | (b << 16);\n\n    h = ah4;\n    l = al4;\n\n    a = l & 0xffff; b = l >>> 16;\n    c = h & 0xffff; d = h >>> 16;\n\n    h = hh[4];\n    l = hl[4];\n\n    a += l & 0xffff; b += l >>> 16;\n    c += h & 0xffff; d += h >>> 16;\n\n    b += a >>> 16;\n    c += b >>> 16;\n    d += c >>> 16;\n\n    hh[4] = ah4 = (c & 0xffff) | (d << 16);\n    hl[4] = al4 = (a & 0xffff) | (b << 16);\n\n    h = ah5;\n    l = al5;\n\n    a = l & 0xffff; b = l >>> 16;\n    c = h & 0xffff; d = h >>> 16;\n\n    h = hh[5];\n    l = hl[5];\n\n    a += l & 0xffff; b += l >>> 16;\n    c += h & 0xffff; d += h >>> 16;\n\n    b += a >>> 16;\n    c += b >>> 16;\n    d += c >>> 16;\n\n    hh[5] = ah5 = (c & 0xffff) | (d << 16);\n    hl[5] = al5 = (a & 0xffff) | (b << 16);\n\n    h = ah6;\n    l = al6;\n\n    a = l & 0xffff; b = l >>> 16;\n    c = h & 0xffff; d = h >>> 16;\n\n    h = hh[6];\n    l = hl[6];\n\n    a += l & 0xffff; b += l >>> 16;\n    c += h & 0xffff; d += h >>> 16;\n\n    b += a >>> 16;\n    c += b >>> 16;\n    d += c >>> 16;\n\n    hh[6] = ah6 = (c & 0xffff) | (d << 16);\n    hl[6] = al6 = (a & 0xffff) | (b << 16);\n\n    h = ah7;\n    l = al7;\n\n    a = l & 0xffff; b = l >>> 16;\n    c = h & 0xffff; d = h >>> 16;\n\n    h = hh[7];\n    l = hl[7];\n\n    a += l & 0xffff; b += l >>> 16;\n    c += h & 0xffff; d += h >>> 16;\n\n    b += a >>> 16;\n    c += b >>> 16;\n    d += c >>> 16;\n\n    hh[7] = ah7 = (c & 0xffff) | (d << 16);\n    hl[7] = al7 = (a & 0xffff) | (b << 16);\n\n    pos += 128;\n    n -= 128;\n  }\n\n  return n;\n}\n\nfunction crypto_hash(out, m, n) {\n  var hh = new Int32Array(8),\n      hl = new Int32Array(8),\n      x = new Uint8Array(256),\n      i, b = n;\n\n  hh[0] = 0x6a09e667;\n  hh[1] = 0xbb67ae85;\n  hh[2] = 0x3c6ef372;\n  hh[3] = 0xa54ff53a;\n  hh[4] = 0x510e527f;\n  hh[5] = 0x9b05688c;\n  hh[6] = 0x1f83d9ab;\n  hh[7] = 0x5be0cd19;\n\n  hl[0] = 0xf3bcc908;\n  hl[1] = 0x84caa73b;\n  hl[2] = 0xfe94f82b;\n  hl[3] = 0x5f1d36f1;\n  hl[4] = 0xade682d1;\n  hl[5] = 0x2b3e6c1f;\n  hl[6] = 0xfb41bd6b;\n  hl[7] = 0x137e2179;\n\n  crypto_hashblocks_hl(hh, hl, m, n);\n  n %= 128;\n\n  for (i = 0; i < n; i++) x[i] = m[b-n+i];\n  x[n] = 128;\n\n  n = 256-128*(n<112?1:0);\n  x[n-9] = 0;\n  ts64(x, n-8,  (b / 0x20000000) | 0, b << 3);\n  crypto_hashblocks_hl(hh, hl, x, n);\n\n  for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]);\n\n  return 0;\n}\n\nfunction add(p, q) {\n  var a = gf(), b = gf(), c = gf(),\n      d = gf(), e = gf(), f = gf(),\n      g = gf(), h = gf(), t = gf();\n\n  Z(a, p[1], p[0]);\n  Z(t, q[1], q[0]);\n  M(a, a, t);\n  A(b, p[0], p[1]);\n  A(t, q[0], q[1]);\n  M(b, b, t);\n  M(c, p[3], q[3]);\n  M(c, c, D2);\n  M(d, p[2], q[2]);\n  A(d, d, d);\n  Z(e, b, a);\n  Z(f, d, c);\n  A(g, d, c);\n  A(h, b, a);\n\n  M(p[0], e, f);\n  M(p[1], h, g);\n  M(p[2], g, f);\n  M(p[3], e, h);\n}\n\nfunction cswap(p, q, b) {\n  var i;\n  for (i = 0; i < 4; i++) {\n    sel25519(p[i], q[i], b);\n  }\n}\n\nfunction pack(r, p) {\n  var tx = gf(), ty = gf(), zi = gf();\n  inv25519(zi, p[2]);\n  M(tx, p[0], zi);\n  M(ty, p[1], zi);\n  pack25519(r, ty);\n  r[31] ^= par25519(tx) << 7;\n}\n\nfunction scalarmult(p, q, s) {\n  var b, i;\n  set25519(p[0], gf0);\n  set25519(p[1], gf1);\n  set25519(p[2], gf1);\n  set25519(p[3], gf0);\n  for (i = 255; i >= 0; --i) {\n    b = (s[(i/8)|0] >> (i&7)) & 1;\n    cswap(p, q, b);\n    add(q, p);\n    add(p, p);\n    cswap(p, q, b);\n  }\n}\n\nfunction scalarbase(p, s) {\n  var q = [gf(), gf(), gf(), gf()];\n  set25519(q[0], X);\n  set25519(q[1], Y);\n  set25519(q[2], gf1);\n  M(q[3], X, Y);\n  scalarmult(p, q, s);\n}\n\nfunction crypto_sign_keypair(pk, sk, seeded) {\n  var d = new Uint8Array(64);\n  var p = [gf(), gf(), gf(), gf()];\n  var i;\n\n  if (!seeded) randombytes(sk, 32);\n  crypto_hash(d, sk, 32);\n  d[0] &= 248;\n  d[31] &= 127;\n  d[31] |= 64;\n\n  scalarbase(p, d);\n  pack(pk, p);\n\n  for (i = 0; i < 32; i++) sk[i+32] = pk[i];\n  return 0;\n}\n\nvar L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);\n\nfunction modL(r, x) {\n  var carry, i, j, k;\n  for (i = 63; i >= 32; --i) {\n    carry = 0;\n    for (j = i - 32, k = i - 12; j < k; ++j) {\n      x[j] += carry - 16 * x[i] * L[j - (i - 32)];\n      carry = Math.floor((x[j] + 128) / 256);\n      x[j] -= carry * 256;\n    }\n    x[j] += carry;\n    x[i] = 0;\n  }\n  carry = 0;\n  for (j = 0; j < 32; j++) {\n    x[j] += carry - (x[31] >> 4) * L[j];\n    carry = x[j] >> 8;\n    x[j] &= 255;\n  }\n  for (j = 0; j < 32; j++) x[j] -= carry * L[j];\n  for (i = 0; i < 32; i++) {\n    x[i+1] += x[i] >> 8;\n    r[i] = x[i] & 255;\n  }\n}\n\nfunction reduce(r) {\n  var x = new Float64Array(64), i;\n  for (i = 0; i < 64; i++) x[i] = r[i];\n  for (i = 0; i < 64; i++) r[i] = 0;\n  modL(r, x);\n}\n\n// Note: difference from C - smlen returned, not passed as argument.\nfunction crypto_sign(sm, m, n, sk) {\n  var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64);\n  var i, j, x = new Float64Array(64);\n  var p = [gf(), gf(), gf(), gf()];\n\n  crypto_hash(d, sk, 32);\n  d[0] &= 248;\n  d[31] &= 127;\n  d[31] |= 64;\n\n  var smlen = n + 64;\n  for (i = 0; i < n; i++) sm[64 + i] = m[i];\n  for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];\n\n  crypto_hash(r, sm.subarray(32), n+32);\n  reduce(r);\n  scalarbase(p, r);\n  pack(sm, p);\n\n  for (i = 32; i < 64; i++) sm[i] = sk[i];\n  crypto_hash(h, sm, n + 64);\n  reduce(h);\n\n  for (i = 0; i < 64; i++) x[i] = 0;\n  for (i = 0; i < 32; i++) x[i] = r[i];\n  for (i = 0; i < 32; i++) {\n    for (j = 0; j < 32; j++) {\n      x[i+j] += h[i] * d[j];\n    }\n  }\n\n  modL(sm.subarray(32), x);\n  return smlen;\n}\n\nfunction unpackneg(r, p) {\n  var t = gf(), chk = gf(), num = gf(),\n      den = gf(), den2 = gf(), den4 = gf(),\n      den6 = gf();\n\n  set25519(r[2], gf1);\n  unpack25519(r[1], p);\n  S(num, r[1]);\n  M(den, num, D);\n  Z(num, num, r[2]);\n  A(den, r[2], den);\n\n  S(den2, den);\n  S(den4, den2);\n  M(den6, den4, den2);\n  M(t, den6, num);\n  M(t, t, den);\n\n  pow2523(t, t);\n  M(t, t, num);\n  M(t, t, den);\n  M(t, t, den);\n  M(r[0], t, den);\n\n  S(chk, r[0]);\n  M(chk, chk, den);\n  if (neq25519(chk, num)) M(r[0], r[0], I);\n\n  S(chk, r[0]);\n  M(chk, chk, den);\n  if (neq25519(chk, num)) return -1;\n\n  if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]);\n\n  M(r[3], r[0], r[1]);\n  return 0;\n}\n\nfunction crypto_sign_open(m, sm, n, pk) {\n  var i;\n  var t = new Uint8Array(32), h = new Uint8Array(64);\n  var p = [gf(), gf(), gf(), gf()],\n      q = [gf(), gf(), gf(), gf()];\n\n  if (n < 64) return -1;\n\n  if (unpackneg(q, pk)) return -1;\n\n  for (i = 0; i < n; i++) m[i] = sm[i];\n  for (i = 0; i < 32; i++) m[i+32] = pk[i];\n  crypto_hash(h, m, n);\n  reduce(h);\n  scalarmult(p, q, h);\n\n  scalarbase(q, sm.subarray(32));\n  add(p, q);\n  pack(t, p);\n\n  n -= 64;\n  if (crypto_verify_32(sm, 0, t, 0)) {\n    for (i = 0; i < n; i++) m[i] = 0;\n    return -1;\n  }\n\n  for (i = 0; i < n; i++) m[i] = sm[i + 64];\n  return n;\n}\n\nvar crypto_secretbox_KEYBYTES = 32,\n    crypto_secretbox_NONCEBYTES = 24,\n    crypto_secretbox_ZEROBYTES = 32,\n    crypto_secretbox_BOXZEROBYTES = 16,\n    crypto_scalarmult_BYTES = 32,\n    crypto_scalarmult_SCALARBYTES = 32,\n    crypto_box_PUBLICKEYBYTES = 32,\n    crypto_box_SECRETKEYBYTES = 32,\n    crypto_box_BEFORENMBYTES = 32,\n    crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES,\n    crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES,\n    crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES,\n    crypto_sign_BYTES = 64,\n    crypto_sign_PUBLICKEYBYTES = 32,\n    crypto_sign_SECRETKEYBYTES = 64,\n    crypto_sign_SEEDBYTES = 32,\n    crypto_hash_BYTES = 64;\n\nnacl.lowlevel = {\n  crypto_core_hsalsa20: crypto_core_hsalsa20,\n  crypto_stream_xor: crypto_stream_xor,\n  crypto_stream: crypto_stream,\n  crypto_stream_salsa20_xor: crypto_stream_salsa20_xor,\n  crypto_stream_salsa20: crypto_stream_salsa20,\n  crypto_onetimeauth: crypto_onetimeauth,\n  crypto_onetimeauth_verify: crypto_onetimeauth_verify,\n  crypto_verify_16: crypto_verify_16,\n  crypto_verify_32: crypto_verify_32,\n  crypto_secretbox: crypto_secretbox,\n  crypto_secretbox_open: crypto_secretbox_open,\n  crypto_scalarmult: crypto_scalarmult,\n  crypto_scalarmult_base: crypto_scalarmult_base,\n  crypto_box_beforenm: crypto_box_beforenm,\n  crypto_box_afternm: crypto_box_afternm,\n  crypto_box: crypto_box,\n  crypto_box_open: crypto_box_open,\n  crypto_box_keypair: crypto_box_keypair,\n  crypto_hash: crypto_hash,\n  crypto_sign: crypto_sign,\n  crypto_sign_keypair: crypto_sign_keypair,\n  crypto_sign_open: crypto_sign_open,\n\n  crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES,\n  crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES,\n  crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES,\n  crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES,\n  crypto_scalarmult_BYTES: crypto_scalarmult_BYTES,\n  crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES,\n  crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES,\n  crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES,\n  crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES,\n  crypto_box_NONCEBYTES: crypto_box_NONCEBYTES,\n  crypto_box_ZEROBYTES: crypto_box_ZEROBYTES,\n  crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES,\n  crypto_sign_BYTES: crypto_sign_BYTES,\n  crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES,\n  crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES,\n  crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES,\n  crypto_hash_BYTES: crypto_hash_BYTES,\n\n  gf: gf,\n  D: D,\n  L: L,\n  pack25519: pack25519,\n  unpack25519: unpack25519,\n  M: M,\n  A: A,\n  S: S,\n  Z: Z,\n  pow2523: pow2523,\n  add: add,\n  set25519: set25519,\n  modL: modL,\n  scalarmult: scalarmult,\n  scalarbase: scalarbase,\n};\n\n/* High-level API */\n\nfunction checkLengths(k, n) {\n  if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size');\n  if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size');\n}\n\nfunction checkBoxLengths(pk, sk) {\n  if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size');\n  if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size');\n}\n\nfunction checkArrayTypes() {\n  for (var i = 0; i < arguments.length; i++) {\n    if (!(arguments[i] instanceof Uint8Array))\n      throw new TypeError('unexpected type, use Uint8Array');\n  }\n}\n\nfunction cleanup(arr) {\n  for (var i = 0; i < arr.length; i++) arr[i] = 0;\n}\n\nnacl.randomBytes = function(n) {\n  var b = new Uint8Array(n);\n  randombytes(b, n);\n  return b;\n};\n\nnacl.secretbox = function(msg, nonce, key) {\n  checkArrayTypes(msg, nonce, key);\n  checkLengths(key, nonce);\n  var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);\n  var c = new Uint8Array(m.length);\n  for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i];\n  crypto_secretbox(c, m, m.length, nonce, key);\n  return c.subarray(crypto_secretbox_BOXZEROBYTES);\n};\n\nnacl.secretbox.open = function(box, nonce, key) {\n  checkArrayTypes(box, nonce, key);\n  checkLengths(key, nonce);\n  var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);\n  var m = new Uint8Array(c.length);\n  for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i];\n  if (c.length < 32) return null;\n  if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return null;\n  return m.subarray(crypto_secretbox_ZEROBYTES);\n};\n\nnacl.secretbox.keyLength = crypto_secretbox_KEYBYTES;\nnacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES;\nnacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES;\n\nnacl.scalarMult = function(n, p) {\n  checkArrayTypes(n, p);\n  if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n  if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size');\n  var q = new Uint8Array(crypto_scalarmult_BYTES);\n  crypto_scalarmult(q, n, p);\n  return q;\n};\n\nnacl.scalarMult.base = function(n) {\n  checkArrayTypes(n);\n  if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n  var q = new Uint8Array(crypto_scalarmult_BYTES);\n  crypto_scalarmult_base(q, n);\n  return q;\n};\n\nnacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;\nnacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES;\n\nnacl.box = function(msg, nonce, publicKey, secretKey) {\n  var k = nacl.box.before(publicKey, secretKey);\n  return nacl.secretbox(msg, nonce, k);\n};\n\nnacl.box.before = function(publicKey, secretKey) {\n  checkArrayTypes(publicKey, secretKey);\n  checkBoxLengths(publicKey, secretKey);\n  var k = new Uint8Array(crypto_box_BEFORENMBYTES);\n  crypto_box_beforenm(k, publicKey, secretKey);\n  return k;\n};\n\nnacl.box.after = nacl.secretbox;\n\nnacl.box.open = function(msg, nonce, publicKey, secretKey) {\n  var k = nacl.box.before(publicKey, secretKey);\n  return nacl.secretbox.open(msg, nonce, k);\n};\n\nnacl.box.open.after = nacl.secretbox.open;\n\nnacl.box.keyPair = function() {\n  var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n  var sk = new Uint8Array(crypto_box_SECRETKEYBYTES);\n  crypto_box_keypair(pk, sk);\n  return {publicKey: pk, secretKey: sk};\n};\n\nnacl.box.keyPair.fromSecretKey = function(secretKey) {\n  checkArrayTypes(secretKey);\n  if (secretKey.length !== crypto_box_SECRETKEYBYTES)\n    throw new Error('bad secret key size');\n  var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n  crypto_scalarmult_base(pk, secretKey);\n  return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES;\nnacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES;\nnacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES;\nnacl.box.nonceLength = crypto_box_NONCEBYTES;\nnacl.box.overheadLength = nacl.secretbox.overheadLength;\n\nnacl.sign = function(msg, secretKey) {\n  checkArrayTypes(msg, secretKey);\n  if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n    throw new Error('bad secret key size');\n  var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length);\n  crypto_sign(signedMsg, msg, msg.length, secretKey);\n  return signedMsg;\n};\n\nnacl.sign.open = function(signedMsg, publicKey) {\n  checkArrayTypes(signedMsg, publicKey);\n  if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n    throw new Error('bad public key size');\n  var tmp = new Uint8Array(signedMsg.length);\n  var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);\n  if (mlen < 0) return null;\n  var m = new Uint8Array(mlen);\n  for (var i = 0; i < m.length; i++) m[i] = tmp[i];\n  return m;\n};\n\nnacl.sign.detached = function(msg, secretKey) {\n  var signedMsg = nacl.sign(msg, secretKey);\n  var sig = new Uint8Array(crypto_sign_BYTES);\n  for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];\n  return sig;\n};\n\nnacl.sign.detached.verify = function(msg, sig, publicKey) {\n  checkArrayTypes(msg, sig, publicKey);\n  if (sig.length !== crypto_sign_BYTES)\n    throw new Error('bad signature size');\n  if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n    throw new Error('bad public key size');\n  var sm = new Uint8Array(crypto_sign_BYTES + msg.length);\n  var m = new Uint8Array(crypto_sign_BYTES + msg.length);\n  var i;\n  for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];\n  for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i];\n  return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);\n};\n\nnacl.sign.keyPair = function() {\n  var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n  var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n  crypto_sign_keypair(pk, sk);\n  return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.keyPair.fromSecretKey = function(secretKey) {\n  checkArrayTypes(secretKey);\n  if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n    throw new Error('bad secret key size');\n  var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n  for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i];\n  return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.sign.keyPair.fromSeed = function(seed) {\n  checkArrayTypes(seed);\n  if (seed.length !== crypto_sign_SEEDBYTES)\n    throw new Error('bad seed size');\n  var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n  var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n  for (var i = 0; i < 32; i++) sk[i] = seed[i];\n  crypto_sign_keypair(pk, sk, true);\n  return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES;\nnacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES;\nnacl.sign.seedLength = crypto_sign_SEEDBYTES;\nnacl.sign.signatureLength = crypto_sign_BYTES;\n\nnacl.hash = function(msg) {\n  checkArrayTypes(msg);\n  var h = new Uint8Array(crypto_hash_BYTES);\n  crypto_hash(h, msg, msg.length);\n  return h;\n};\n\nnacl.hash.hashLength = crypto_hash_BYTES;\n\nnacl.verify = function(x, y) {\n  checkArrayTypes(x, y);\n  // Zero length arguments are considered not equal.\n  if (x.length === 0 || y.length === 0) return false;\n  if (x.length !== y.length) return false;\n  return (vn(x, 0, y, 0, x.length) === 0) ? true : false;\n};\n\nnacl.setPRNG = function(fn) {\n  randombytes = fn;\n};\n\n(function() {\n  // Initialize PRNG if environment provides CSPRNG.\n  // If not, methods calling randombytes will throw.\n  var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null;\n  if (crypto && crypto.getRandomValues) {\n    // Browsers.\n    var QUOTA = 65536;\n    nacl.setPRNG(function(x, n) {\n      var i, v = new Uint8Array(n);\n      for (i = 0; i < n; i += QUOTA) {\n        crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));\n      }\n      for (i = 0; i < n; i++) x[i] = v[i];\n      cleanup(v);\n    });\n  } else if (typeof require !== 'undefined') {\n    // Node.js.\n    crypto = require('crypto');\n    if (crypto && crypto.randomBytes) {\n      nacl.setPRNG(function(x, n) {\n        var i, v = crypto.randomBytes(n);\n        for (i = 0; i < n; i++) x[i] = v[i];\n        cleanup(v);\n      });\n    }\n  }\n})();\n\n})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {}));\n","// Written in 2014-2016 by Dmitry Chestnykh and Devi Mandiri.\n// Public domain.\n(function(root, f) {\n  'use strict';\n  if (typeof module !== 'undefined' && module.exports) module.exports = f();\n  else if (root.nacl) root.nacl.util = f();\n  else {\n    root.nacl = {};\n    root.nacl.util = f();\n  }\n}(this, function() {\n  'use strict';\n\n  var util = {};\n\n  function validateBase64(s) {\n    if (!(/^(?:[A-Za-z0-9+\\/]{2}[A-Za-z0-9+\\/]{2})*(?:[A-Za-z0-9+\\/]{2}==|[A-Za-z0-9+\\/]{3}=)?$/.test(s))) {\n      throw new TypeError('invalid encoding');\n    }\n  }\n\n  util.decodeUTF8 = function(s) {\n    if (typeof s !== 'string') throw new TypeError('expected string');\n    var i, d = unescape(encodeURIComponent(s)), b = new Uint8Array(d.length);\n    for (i = 0; i < d.length; i++) b[i] = d.charCodeAt(i);\n    return b;\n  };\n\n  util.encodeUTF8 = function(arr) {\n    var i, s = [];\n    for (i = 0; i < arr.length; i++) s.push(String.fromCharCode(arr[i]));\n    return decodeURIComponent(escape(s.join('')));\n  };\n\n  if (typeof atob === 'undefined') {\n    // Node.js\n\n    if (typeof Buffer.from !== 'undefined') {\n       // Node v6 and later\n      util.encodeBase64 = function (arr) { // v6 and later\n          return Buffer.from(arr).toString('base64');\n      };\n\n      util.decodeBase64 = function (s) {\n        validateBase64(s);\n        return new Uint8Array(Array.prototype.slice.call(Buffer.from(s, 'base64'), 0));\n      };\n\n    } else {\n      // Node earlier than v6\n      util.encodeBase64 = function (arr) { // v6 and later\n        return (new Buffer(arr)).toString('base64');\n      };\n\n      util.decodeBase64 = function(s) {\n        validateBase64(s);\n        return new Uint8Array(Array.prototype.slice.call(new Buffer(s, 'base64'), 0));\n      };\n    }\n\n  } else {\n    // Browsers\n\n    util.encodeBase64 = function(arr) {\n      var i, s = [], len = arr.length;\n      for (i = 0; i < len; i++) s.push(String.fromCharCode(arr[i]));\n      return btoa(s.join(''));\n    };\n\n    util.decodeBase64 = function(s) {\n      validateBase64(s);\n      var i, d = atob(s), b = new Uint8Array(d.length);\n      for (i = 0; i < d.length; i++) b[i] = d.charCodeAt(i);\n      return b;\n    };\n\n  }\n\n  return util;\n\n}));\n","'use strict'\n\n// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n/* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\n// Max safe length for a build identifier. The max length minus 6 characters for\n// the shortest version with a build 0.0.0+BUILD.\nconst MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6\n\nconst RELEASE_TYPES = [\n  'major',\n  'premajor',\n  'minor',\n  'preminor',\n  'patch',\n  'prepatch',\n  'prerelease',\n]\n\nmodule.exports = {\n  MAX_LENGTH,\n  MAX_SAFE_COMPONENT_LENGTH,\n  MAX_SAFE_BUILD_LENGTH,\n  MAX_SAFE_INTEGER,\n  RELEASE_TYPES,\n  SEMVER_SPEC_VERSION,\n  FLAG_INCLUDE_PRERELEASE: 0b001,\n  FLAG_LOOSE: 0b010,\n}\n","'use strict'\n\nconst debug = (\n  typeof process === 'object' &&\n  process.env &&\n  process.env.NODE_DEBUG &&\n  /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n  : () => {}\n\nmodule.exports = debug\n","'use strict'\n\nconst {\n  MAX_SAFE_COMPONENT_LENGTH,\n  MAX_SAFE_BUILD_LENGTH,\n  MAX_LENGTH,\n} = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst safeRe = exports.safeRe = []\nconst src = exports.src = []\nconst safeSrc = exports.safeSrc = []\nconst t = exports.t = {}\nlet R = 0\n\nconst LETTERDASHNUMBER = '[a-zA-Z0-9-]'\n\n// Replace some greedy regex tokens to prevent regex dos issues. These regex are\n// used internally via the safeRe object since all inputs in this library get\n// normalized first to trim and collapse all extra whitespace. The original\n// regexes are exported for userland consumption and lower level usage. A\n// future breaking change could export the safer regex only with a note that\n// all input should have extra whitespace removed.\nconst safeRegexReplacements = [\n  ['\\\\s', 1],\n  ['\\\\d', MAX_LENGTH],\n  [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH],\n]\n\nconst makeSafeRegex = (value) => {\n  for (const [token, max] of safeRegexReplacements) {\n    value = value\n      .split(`${token}*`).join(`${token}{0,${max}}`)\n      .split(`${token}+`).join(`${token}{1,${max}}`)\n  }\n  return value\n}\n\nconst createToken = (name, value, isGlobal) => {\n  const safe = makeSafeRegex(value)\n  const index = R++\n  debug(name, index, value)\n  t[name] = index\n  src[index] = value\n  safeSrc[index] = safe\n  re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n  safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '\\\\d+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`)\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n                   `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n                   `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n                        `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n                        `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n// Non-numeric identifiers include numeric identifiers but can be longer.\n// Therefore non-numeric identifiers must go first.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NONNUMERICIDENTIFIER]\n}|${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NONNUMERICIDENTIFIER]\n}|${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`)\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups.  The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n  src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n  src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifier, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n                   `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n                   `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n                   `(?:${src[t.PRERELEASE]})?${\n                     src[t.BUILD]}?` +\n                   `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n                        `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n                        `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n                        `(?:${src[t.PRERELEASELOOSE]})?${\n                          src[t.BUILD]}?` +\n                        `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCEPLAIN', `${'(^|[^\\\\d])' +\n              '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n              `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n              `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`)\ncreateToken('COERCE', `${src[t.COERCEPLAIN]}(?:$|[^\\\\d])`)\ncreateToken('COERCEFULL', src[t.COERCEPLAIN] +\n              `(?:${src[t.PRERELEASE]})?` +\n              `(?:${src[t.BUILD]})?` +\n              `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\ncreateToken('COERCERTLFULL', src[t.COERCEFULL], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n                   `\\\\s+-\\\\s+` +\n                   `(${src[t.XRANGEPLAIN]})` +\n                   `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n                        `\\\\s+-\\\\s+` +\n                        `(${src[t.XRANGEPLAINLOOSE]})` +\n                        `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$')\n","'use strict'\n\n// parse out just the options we care about\nconst looseOption = Object.freeze({ loose: true })\nconst emptyOpts = Object.freeze({ })\nconst parseOptions = options => {\n  if (!options) {\n    return emptyOpts\n  }\n\n  if (typeof options !== 'object') {\n    return looseOption\n  }\n\n  return options\n}\nmodule.exports = parseOptions\n","'use strict'\n\nconst numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n  if (typeof a === 'number' && typeof b === 'number') {\n    return a === b ? 0 : a < b ? -1 : 1\n  }\n\n  const anum = numeric.test(a)\n  const bnum = numeric.test(b)\n\n  if (anum && bnum) {\n    a = +a\n    b = +b\n  }\n\n  return a === b ? 0\n    : (anum && !bnum) ? -1\n    : (bnum && !anum) ? 1\n    : a < b ? -1\n    : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n  compareIdentifiers,\n  rcompareIdentifiers,\n}\n","'use strict'\n\nconst debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst parseOptions = require('../internal/parse-options')\nconst { compareIdentifiers } = require('../internal/identifiers')\n\nconst isPrereleaseIdentifier = (prerelease, identifier) => {\n  const identifiers = identifier.split('.')\n  if (identifiers.length > prerelease.length) {\n    return false\n  }\n\n  for (let i = 0; i < identifiers.length; i++) {\n    if (compareIdentifiers(prerelease[i], identifiers[i]) !== 0) {\n      return false\n    }\n  }\n\n  return true\n}\n\nclass SemVer {\n  constructor (version, options) {\n    options = parseOptions(options)\n\n    if (version instanceof SemVer) {\n      if (version.loose === !!options.loose &&\n        version.includePrerelease === !!options.includePrerelease) {\n        return version\n      } else {\n        version = version.version\n      }\n    } else if (typeof version !== 'string') {\n      throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`)\n    }\n\n    if (version.length > MAX_LENGTH) {\n      throw new TypeError(\n        `version is longer than ${MAX_LENGTH} characters`\n      )\n    }\n\n    debug('SemVer', version, options)\n    this.options = options\n    this.loose = !!options.loose\n    // this isn't actually relevant for versions, but keep it so that we\n    // don't run into trouble passing this.options around.\n    this.includePrerelease = !!options.includePrerelease\n\n    const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n    if (!m) {\n      throw new TypeError(`Invalid Version: ${version}`)\n    }\n\n    this.raw = version\n\n    // these are actually numbers\n    this.major = +m[1]\n    this.minor = +m[2]\n    this.patch = +m[3]\n\n    if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n      throw new TypeError('Invalid major version')\n    }\n\n    if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n      throw new TypeError('Invalid minor version')\n    }\n\n    if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n      throw new TypeError('Invalid patch version')\n    }\n\n    // numberify any prerelease numeric ids\n    if (!m[4]) {\n      this.prerelease = []\n    } else {\n      this.prerelease = m[4].split('.').map((id) => {\n        if (/^[0-9]+$/.test(id)) {\n          const num = +id\n          if (num >= 0 && num < MAX_SAFE_INTEGER) {\n            return num\n          }\n        }\n        return id\n      })\n    }\n\n    this.build = m[5] ? m[5].split('.') : []\n    this.format()\n  }\n\n  format () {\n    this.version = `${this.major}.${this.minor}.${this.patch}`\n    if (this.prerelease.length) {\n      this.version += `-${this.prerelease.join('.')}`\n    }\n    return this.version\n  }\n\n  toString () {\n    return this.version\n  }\n\n  compare (other) {\n    debug('SemVer.compare', this.version, this.options, other)\n    if (!(other instanceof SemVer)) {\n      if (typeof other === 'string' && other === this.version) {\n        return 0\n      }\n      other = new SemVer(other, this.options)\n    }\n\n    if (other.version === this.version) {\n      return 0\n    }\n\n    return this.compareMain(other) || this.comparePre(other)\n  }\n\n  compareMain (other) {\n    if (!(other instanceof SemVer)) {\n      other = new SemVer(other, this.options)\n    }\n\n    if (this.major < other.major) {\n      return -1\n    }\n    if (this.major > other.major) {\n      return 1\n    }\n    if (this.minor < other.minor) {\n      return -1\n    }\n    if (this.minor > other.minor) {\n      return 1\n    }\n    if (this.patch < other.patch) {\n      return -1\n    }\n    if (this.patch > other.patch) {\n      return 1\n    }\n    return 0\n  }\n\n  comparePre (other) {\n    if (!(other instanceof SemVer)) {\n      other = new SemVer(other, this.options)\n    }\n\n    // NOT having a prerelease is > having one\n    if (this.prerelease.length && !other.prerelease.length) {\n      return -1\n    } else if (!this.prerelease.length && other.prerelease.length) {\n      return 1\n    } else if (!this.prerelease.length && !other.prerelease.length) {\n      return 0\n    }\n\n    let i = 0\n    do {\n      const a = this.prerelease[i]\n      const b = other.prerelease[i]\n      debug('prerelease compare', i, a, b)\n      if (a === undefined && b === undefined) {\n        return 0\n      } else if (b === undefined) {\n        return 1\n      } else if (a === undefined) {\n        return -1\n      } else if (a === b) {\n        continue\n      } else {\n        return compareIdentifiers(a, b)\n      }\n    } while (++i)\n  }\n\n  compareBuild (other) {\n    if (!(other instanceof SemVer)) {\n      other = new SemVer(other, this.options)\n    }\n\n    let i = 0\n    do {\n      const a = this.build[i]\n      const b = other.build[i]\n      debug('build compare', i, a, b)\n      if (a === undefined && b === undefined) {\n        return 0\n      } else if (b === undefined) {\n        return 1\n      } else if (a === undefined) {\n        return -1\n      } else if (a === b) {\n        continue\n      } else {\n        return compareIdentifiers(a, b)\n      }\n    } while (++i)\n  }\n\n  // preminor will bump the version up to the next minor release, and immediately\n  // down to pre-release. premajor and prepatch work the same way.\n  inc (release, identifier, identifierBase) {\n    if (release.startsWith('pre')) {\n      if (!identifier && identifierBase === false) {\n        throw new Error('invalid increment argument: identifier is empty')\n      }\n      // Avoid an invalid semver results\n      if (identifier) {\n        const match = `-${identifier}`.match(this.options.loose ? re[t.PRERELEASELOOSE] : re[t.PRERELEASE])\n        if (!match || match[1] !== identifier) {\n          throw new Error(`invalid identifier: ${identifier}`)\n        }\n      }\n    }\n\n    switch (release) {\n      case 'premajor':\n        this.prerelease.length = 0\n        this.patch = 0\n        this.minor = 0\n        this.major++\n        this.inc('pre', identifier, identifierBase)\n        break\n      case 'preminor':\n        this.prerelease.length = 0\n        this.patch = 0\n        this.minor++\n        this.inc('pre', identifier, identifierBase)\n        break\n      case 'prepatch':\n        // If this is already a prerelease, it will bump to the next version\n        // drop any prereleases that might already exist, since they are not\n        // relevant at this point.\n        this.prerelease.length = 0\n        this.inc('patch', identifier, identifierBase)\n        this.inc('pre', identifier, identifierBase)\n        break\n      // If the input is a non-prerelease version, this acts the same as\n      // prepatch.\n      case 'prerelease':\n        if (this.prerelease.length === 0) {\n          this.inc('patch', identifier, identifierBase)\n        }\n        this.inc('pre', identifier, identifierBase)\n        break\n      case 'release':\n        if (this.prerelease.length === 0) {\n          throw new Error(`version ${this.raw} is not a prerelease`)\n        }\n        this.prerelease.length = 0\n        break\n\n      case 'major':\n        // If this is a pre-major version, bump up to the same major version.\n        // Otherwise increment major.\n        // 1.0.0-5 bumps to 1.0.0\n        // 1.1.0 bumps to 2.0.0\n        if (\n          this.minor !== 0 ||\n          this.patch !== 0 ||\n          this.prerelease.length === 0\n        ) {\n          this.major++\n        }\n        this.minor = 0\n        this.patch = 0\n        this.prerelease = []\n        break\n      case 'minor':\n        // If this is a pre-minor version, bump up to the same minor version.\n        // Otherwise increment minor.\n        // 1.2.0-5 bumps to 1.2.0\n        // 1.2.1 bumps to 1.3.0\n        if (this.patch !== 0 || this.prerelease.length === 0) {\n          this.minor++\n        }\n        this.patch = 0\n        this.prerelease = []\n        break\n      case 'patch':\n        // If this is not a pre-release version, it will increment the patch.\n        // If it is a pre-release it will bump up to the same patch version.\n        // 1.2.0-5 patches to 1.2.0\n        // 1.2.0 patches to 1.2.1\n        if (this.prerelease.length === 0) {\n          this.patch++\n        }\n        this.prerelease = []\n        break\n      // This probably shouldn't be used publicly.\n      // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n      case 'pre': {\n        const base = Number(identifierBase) ? 1 : 0\n\n        if (this.prerelease.length === 0) {\n          this.prerelease = [base]\n        } else {\n          let i = this.prerelease.length\n          while (--i >= 0) {\n            if (typeof this.prerelease[i] === 'number') {\n              this.prerelease[i]++\n              i = -2\n            }\n          }\n          if (i === -1) {\n            // didn't increment anything\n            if (identifier === this.prerelease.join('.') && identifierBase === false) {\n              throw new Error('invalid increment argument: identifier already exists')\n            }\n            this.prerelease.push(base)\n          }\n        }\n        if (identifier) {\n          // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n          // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n          let prerelease = [identifier, base]\n          if (identifierBase === false) {\n            prerelease = [identifier]\n          }\n          if (isPrereleaseIdentifier(this.prerelease, identifier)) {\n            const prereleaseBase = this.prerelease[identifier.split('.').length]\n            if (isNaN(prereleaseBase)) {\n              this.prerelease = prerelease\n            }\n          } else {\n            this.prerelease = prerelease\n          }\n        }\n        break\n      }\n      default:\n        throw new Error(`invalid increment argument: ${release}`)\n    }\n    this.raw = this.format()\n    if (this.build.length) {\n      this.raw += `+${this.build.join('.')}`\n    }\n    return this\n  }\n}\n\nmodule.exports = SemVer\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst parse = (version, options, throwErrors = false) => {\n  if (version instanceof SemVer) {\n    return version\n  }\n  try {\n    return new SemVer(version, options)\n  } catch (er) {\n    if (!throwErrors) {\n      return null\n    }\n    throw er\n  }\n}\n\nmodule.exports = parse\n","'use strict'\n\nconst parse = require('./parse')\nconst valid = (version, options) => {\n  const v = parse(version, options)\n  return v ? v.version : null\n}\nmodule.exports = valid\n","'use strict'\n\nconst parse = require('./parse')\nconst clean = (version, options) => {\n  const s = parse(version.trim().replace(/^[=v]+/, ''), options)\n  return s ? s.version : null\n}\nmodule.exports = clean\n","'use strict'\n\nconst SemVer = require('../classes/semver')\n\nconst inc = (version, release, options, identifier, identifierBase) => {\n  if (typeof (options) === 'string') {\n    identifierBase = identifier\n    identifier = options\n    options = undefined\n  }\n\n  try {\n    return new SemVer(\n      version instanceof SemVer ? version.version : version,\n      options\n    ).inc(release, identifier, identifierBase).version\n  } catch (er) {\n    return null\n  }\n}\nmodule.exports = inc\n","'use strict'\n\nconst parse = require('./parse.js')\n\nconst diff = (version1, version2) => {\n  const v1 = parse(version1, null, true)\n  const v2 = parse(version2, null, true)\n  const comparison = v1.compare(v2)\n\n  if (comparison === 0) {\n    return null\n  }\n\n  const v1Higher = comparison > 0\n  const highVersion = v1Higher ? v1 : v2\n  const lowVersion = v1Higher ? v2 : v1\n  const highHasPre = !!highVersion.prerelease.length\n  const lowHasPre = !!lowVersion.prerelease.length\n\n  if (lowHasPre && !highHasPre) {\n    // Going from prerelease -> no prerelease requires some special casing\n\n    // If the low version has only a major, then it will always be a major\n    // Some examples:\n    // 1.0.0-1 -> 1.0.0\n    // 1.0.0-1 -> 1.1.1\n    // 1.0.0-1 -> 2.0.0\n    if (!lowVersion.patch && !lowVersion.minor) {\n      return 'major'\n    }\n\n    // If the main part has no difference\n    if (lowVersion.compareMain(highVersion) === 0) {\n      if (lowVersion.minor && !lowVersion.patch) {\n        return 'minor'\n      }\n      return 'patch'\n    }\n  }\n\n  // add the `pre` prefix if we are going to a prerelease version\n  const prefix = highHasPre ? 'pre' : ''\n\n  if (v1.major !== v2.major) {\n    return prefix + 'major'\n  }\n\n  if (v1.minor !== v2.minor) {\n    return prefix + 'minor'\n  }\n\n  if (v1.patch !== v2.patch) {\n    return prefix + 'patch'\n  }\n\n  // high and low are prereleases\n  return 'prerelease'\n}\n\nmodule.exports = diff\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst major = (a, loose) => new SemVer(a, loose).major\nmodule.exports = major\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst minor = (a, loose) => new SemVer(a, loose).minor\nmodule.exports = minor\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst patch = (a, loose) => new SemVer(a, loose).patch\nmodule.exports = patch\n","'use strict'\n\nconst parse = require('./parse')\nconst prerelease = (version, options) => {\n  const parsed = parse(version, options)\n  return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\nmodule.exports = prerelease\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst compare = (a, b, loose) =>\n  new SemVer(a, loose).compare(new SemVer(b, loose))\n\nmodule.exports = compare\n","'use strict'\n\nconst compare = require('./compare')\nconst rcompare = (a, b, loose) => compare(b, a, loose)\nmodule.exports = rcompare\n","'use strict'\n\nconst compare = require('./compare')\nconst compareLoose = (a, b) => compare(a, b, true)\nmodule.exports = compareLoose\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst compareBuild = (a, b, loose) => {\n  const versionA = new SemVer(a, loose)\n  const versionB = new SemVer(b, loose)\n  return versionA.compare(versionB) || versionA.compareBuild(versionB)\n}\nmodule.exports = compareBuild\n","'use strict'\n\nconst compareBuild = require('./compare-build')\nconst sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose))\nmodule.exports = sort\n","'use strict'\n\nconst compareBuild = require('./compare-build')\nconst rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose))\nmodule.exports = rsort\n","'use strict'\n\nconst compare = require('./compare')\nconst gt = (a, b, loose) => compare(a, b, loose) > 0\nmodule.exports = gt\n","'use strict'\n\nconst compare = require('./compare')\nconst lt = (a, b, loose) => compare(a, b, loose) < 0\nmodule.exports = lt\n","'use strict'\n\nconst compare = require('./compare')\nconst eq = (a, b, loose) => compare(a, b, loose) === 0\nmodule.exports = eq\n","'use strict'\n\nconst compare = require('./compare')\nconst neq = (a, b, loose) => compare(a, b, loose) !== 0\nmodule.exports = neq\n","'use strict'\n\nconst compare = require('./compare')\nconst gte = (a, b, loose) => compare(a, b, loose) >= 0\nmodule.exports = gte\n","'use strict'\n\nconst compare = require('./compare')\nconst lte = (a, b, loose) => compare(a, b, loose) <= 0\nmodule.exports = lte\n","'use strict'\n\nconst eq = require('./eq')\nconst neq = require('./neq')\nconst gt = require('./gt')\nconst gte = require('./gte')\nconst lt = require('./lt')\nconst lte = require('./lte')\n\nconst cmp = (a, op, b, loose) => {\n  switch (op) {\n    case '===':\n      if (typeof a === 'object') {\n        a = a.version\n      }\n      if (typeof b === 'object') {\n        b = b.version\n      }\n      return a === b\n\n    case '!==':\n      if (typeof a === 'object') {\n        a = a.version\n      }\n      if (typeof b === 'object') {\n        b = b.version\n      }\n      return a !== b\n\n    case '':\n    case '=':\n    case '==':\n      return eq(a, b, loose)\n\n    case '!=':\n      return neq(a, b, loose)\n\n    case '>':\n      return gt(a, b, loose)\n\n    case '>=':\n      return gte(a, b, loose)\n\n    case '<':\n      return lt(a, b, loose)\n\n    case '<=':\n      return lte(a, b, loose)\n\n    default:\n      throw new TypeError(`Invalid operator: ${op}`)\n  }\n}\nmodule.exports = cmp\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst parse = require('./parse')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst coerce = (version, options) => {\n  if (version instanceof SemVer) {\n    return version\n  }\n\n  if (typeof version === 'number') {\n    version = String(version)\n  }\n\n  if (typeof version !== 'string') {\n    return null\n  }\n\n  options = options || {}\n\n  let match = null\n  if (!options.rtl) {\n    match = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE])\n  } else {\n    // Find the right-most coercible string that does not share\n    // a terminus with a more left-ward coercible string.\n    // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'\n    // With includePrerelease option set, '1.2.3.4-rc' wants to coerce '2.3.4-rc', not '2.3.4'\n    //\n    // Walk through the string checking with a /g regexp\n    // Manually set the index so as to pick up overlapping matches.\n    // Stop when we get a match that ends at the string end, since no\n    // coercible string can be more right-ward without the same terminus.\n    const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL]\n    let next\n    while ((next = coerceRtlRegex.exec(version)) &&\n        (!match || match.index + match[0].length !== version.length)\n    ) {\n      if (!match ||\n            next.index + next[0].length !== match.index + match[0].length) {\n        match = next\n      }\n      coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length\n    }\n    // leave it in a clean state\n    coerceRtlRegex.lastIndex = -1\n  }\n\n  if (match === null) {\n    return null\n  }\n\n  const major = match[2]\n  const minor = match[3] || '0'\n  const patch = match[4] || '0'\n  const prerelease = options.includePrerelease && match[5] ? `-${match[5]}` : ''\n  const build = options.includePrerelease && match[6] ? `+${match[6]}` : ''\n\n  return parse(`${major}.${minor}.${patch}${prerelease}${build}`, options)\n}\nmodule.exports = coerce\n","'use strict'\n\nconst parse = require('./parse')\nconst constants = require('../internal/constants')\nconst SemVer = require('../classes/semver')\n\nconst truncate = (version, truncation, options) => {\n  if (!constants.RELEASE_TYPES.includes(truncation)) {\n    return null\n  }\n\n  const clonedVersion = cloneInputVersion(version, options)\n  return clonedVersion && doTruncation(clonedVersion, truncation)\n}\n\nconst cloneInputVersion = (version, options) => {\n  const versionStringToParse = (\n    version instanceof SemVer ? version.version : version\n  )\n\n  return parse(versionStringToParse, options)\n}\n\nconst doTruncation = (version, truncation) => {\n  if (isPrerelease(truncation)) {\n    return version.version\n  }\n\n  version.prerelease = []\n\n  switch (truncation) {\n    case 'major':\n      version.minor = 0\n      version.patch = 0\n      break\n    case 'minor':\n      version.patch = 0\n      break\n  }\n\n  return version.format()\n}\n\nconst isPrerelease = (type) => {\n  return type.startsWith('pre')\n}\n\nmodule.exports = truncate\n","'use strict'\n\nclass LRUCache {\n  constructor () {\n    this.max = 1000\n    this.map = new Map()\n  }\n\n  get (key) {\n    const value = this.map.get(key)\n    if (value === undefined) {\n      return undefined\n    } else {\n      // Remove the key from the map and add it to the end\n      this.map.delete(key)\n      this.map.set(key, value)\n      return value\n    }\n  }\n\n  delete (key) {\n    return this.map.delete(key)\n  }\n\n  set (key, value) {\n    const deleted = this.delete(key)\n\n    if (!deleted && value !== undefined) {\n      // If cache is full, delete the least recently used item\n      if (this.map.size >= this.max) {\n        const firstKey = this.map.keys().next().value\n        this.delete(firstKey)\n      }\n\n      this.map.set(key, value)\n    }\n\n    return this\n  }\n}\n\nmodule.exports = LRUCache\n","'use strict'\n\nconst SPACE_CHARACTERS = /\\s+/g\n\n// hoisted class for cyclic dependency\nclass Range {\n  constructor (range, options) {\n    options = parseOptions(options)\n\n    if (range instanceof Range) {\n      if (\n        range.loose === !!options.loose &&\n        range.includePrerelease === !!options.includePrerelease\n      ) {\n        return range\n      } else {\n        return new Range(range.raw, options)\n      }\n    }\n\n    if (range instanceof Comparator) {\n      // just put it in the set and return\n      this.raw = range.value\n      this.set = [[range]]\n      this.formatted = undefined\n      return this\n    }\n\n    this.options = options\n    this.loose = !!options.loose\n    this.includePrerelease = !!options.includePrerelease\n\n    // First reduce all whitespace as much as possible so we do not have to rely\n    // on potentially slow regexes like \\s*. This is then stored and used for\n    // future error messages as well.\n    this.raw = range.trim().replace(SPACE_CHARACTERS, ' ')\n\n    // First, split on ||\n    this.set = this.raw\n      .split('||')\n      // map the range to a 2d array of comparators\n      .map(r => this.parseRange(r.trim()))\n      // throw out any comparator lists that are empty\n      // this generally means that it was not a valid range, which is allowed\n      // in loose mode, but will still throw if the WHOLE range is invalid.\n      .filter(c => c.length)\n\n    if (!this.set.length) {\n      throw new TypeError(`Invalid SemVer Range: ${this.raw}`)\n    }\n\n    // if we have any that are not the null set, throw out null sets.\n    if (this.set.length > 1) {\n      // keep the first one, in case they're all null sets\n      const first = this.set[0]\n      this.set = this.set.filter(c => !isNullSet(c[0]))\n      if (this.set.length === 0) {\n        this.set = [first]\n      } else if (this.set.length > 1) {\n        // if we have any that are *, then the range is just *\n        for (const c of this.set) {\n          if (c.length === 1 && isAny(c[0])) {\n            this.set = [c]\n            break\n          }\n        }\n      }\n    }\n\n    this.formatted = undefined\n  }\n\n  get range () {\n    if (this.formatted === undefined) {\n      this.formatted = ''\n      for (let i = 0; i < this.set.length; i++) {\n        if (i > 0) {\n          this.formatted += '||'\n        }\n        const comps = this.set[i]\n        for (let k = 0; k < comps.length; k++) {\n          if (k > 0) {\n            this.formatted += ' '\n          }\n          this.formatted += comps[k].toString().trim()\n        }\n      }\n    }\n    return this.formatted\n  }\n\n  format () {\n    return this.range\n  }\n\n  toString () {\n    return this.range\n  }\n\n  parseRange (range) {\n    // strip build metadata so it can't bleed into the version\n    range = range.replace(BUILDSTRIPRE, '')\n\n    // memoize range parsing for performance.\n    // this is a very hot path, and fully deterministic.\n    const memoOpts =\n      (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) |\n      (this.options.loose && FLAG_LOOSE)\n    const memoKey = memoOpts + ':' + range\n    const cached = cache.get(memoKey)\n    if (cached) {\n      return cached\n    }\n\n    const loose = this.options.loose\n    // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n    const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]\n    range = range.replace(hr, hyphenReplace(this.options.includePrerelease))\n    debug('hyphen replace', range)\n\n    // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n    range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)\n    debug('comparator trim', range)\n\n    // `~ 1.2.3` => `~1.2.3`\n    range = range.replace(re[t.TILDETRIM], tildeTrimReplace)\n    debug('tilde trim', range)\n\n    // `^ 1.2.3` => `^1.2.3`\n    range = range.replace(re[t.CARETTRIM], caretTrimReplace)\n    debug('caret trim', range)\n\n    // At this point, the range is completely trimmed and\n    // ready to be split into comparators.\n\n    let rangeList = range\n      .split(' ')\n      .map(comp => parseComparator(comp, this.options))\n      .join(' ')\n      .split(/\\s+/)\n      // >=0.0.0 is equivalent to *\n      .map(comp => replaceGTE0(comp, this.options))\n\n    if (loose) {\n      // in loose mode, throw out any that are not valid comparators\n      rangeList = rangeList.filter(comp => {\n        debug('loose invalid filter', comp, this.options)\n        return !!comp.match(re[t.COMPARATORLOOSE])\n      })\n    }\n    debug('range list', rangeList)\n\n    // if any comparators are the null set, then replace with JUST null set\n    // if more than one comparator, remove any * comparators\n    // also, don't include the same comparator more than once\n    const rangeMap = new Map()\n    const comparators = rangeList.map(comp => new Comparator(comp, this.options))\n    for (const comp of comparators) {\n      if (isNullSet(comp)) {\n        return [comp]\n      }\n      rangeMap.set(comp.value, comp)\n    }\n    if (rangeMap.size > 1 && rangeMap.has('')) {\n      rangeMap.delete('')\n    }\n\n    const result = [...rangeMap.values()]\n    cache.set(memoKey, result)\n    return result\n  }\n\n  intersects (range, options) {\n    if (!(range instanceof Range)) {\n      throw new TypeError('a Range is required')\n    }\n\n    return this.set.some((thisComparators) => {\n      return (\n        isSatisfiable(thisComparators, options) &&\n        range.set.some((rangeComparators) => {\n          return (\n            isSatisfiable(rangeComparators, options) &&\n            thisComparators.every((thisComparator) => {\n              return rangeComparators.every((rangeComparator) => {\n                return thisComparator.intersects(rangeComparator, options)\n              })\n            })\n          )\n        })\n      )\n    })\n  }\n\n  // if ANY of the sets match ALL of its comparators, then pass\n  test (version) {\n    if (!version) {\n      return false\n    }\n\n    if (typeof version === 'string') {\n      try {\n        version = new SemVer(version, this.options)\n      } catch (er) {\n        return false\n      }\n    }\n\n    for (let i = 0; i < this.set.length; i++) {\n      if (testSet(this.set[i], version, this.options)) {\n        return true\n      }\n    }\n    return false\n  }\n}\n\nmodule.exports = Range\n\nconst LRU = require('../internal/lrucache')\nconst cache = new LRU()\n\nconst parseOptions = require('../internal/parse-options')\nconst Comparator = require('./comparator')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst {\n  safeRe: re,\n  src,\n  t,\n  comparatorTrimReplace,\n  tildeTrimReplace,\n  caretTrimReplace,\n} = require('../internal/re')\nconst { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require('../internal/constants')\n\n// unbounded global build-metadata stripper used by parseRange\nconst BUILDSTRIPRE = new RegExp(src[t.BUILD], 'g')\n\nconst isNullSet = c => c.value === '<0.0.0-0'\nconst isAny = c => c.value === ''\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nconst isSatisfiable = (comparators, options) => {\n  let result = true\n  const remainingComparators = comparators.slice()\n  let testComparator = remainingComparators.pop()\n\n  while (result && remainingComparators.length) {\n    result = remainingComparators.every((otherComparator) => {\n      return testComparator.intersects(otherComparator, options)\n    })\n\n    testComparator = remainingComparators.pop()\n  }\n\n  return result\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nconst parseComparator = (comp, options) => {\n  comp = comp.replace(re[t.BUILD], '')\n  debug('comp', comp, options)\n  comp = replaceCarets(comp, options)\n  debug('caret', comp)\n  comp = replaceTildes(comp, options)\n  debug('tildes', comp)\n  comp = replaceXRanges(comp, options)\n  debug('xrange', comp)\n  comp = replaceStars(comp, options)\n  debug('stars', comp)\n  return comp\n}\n\nconst isX = id => !id || id.toLowerCase() === 'x' || id === '*'\n\nconst invalidXRangeOrder = (M, m, p) => (\n  (isX(M) && !isX(m)) ||\n  (isX(m) && p && !isX(p))\n)\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\n// ~0.0.1 --> >=0.0.1 <0.1.0-0\nconst replaceTildes = (comp, options) => {\n  return comp\n    .trim()\n    .split(/\\s+/)\n    .map((c) => replaceTilde(c, options))\n    .join(' ')\n}\n\nconst replaceTilde = (comp, options) => {\n  const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]\n  // if we're including prereleases in the match, then the lower bound is\n  // -0, the lowest possible prerelease value, just like x-ranges and carets.\n  // this keeps `~1.2` equivalent to the `1.2.x` x-range it's documented as.\n  const z = options.includePrerelease ? '-0' : ''\n  return comp.replace(r, (_, M, m, p, pr) => {\n    debug('tilde', comp, _, M, m, p, pr)\n    let ret\n\n    if (isX(M)) {\n      ret = ''\n    } else if (isX(m)) {\n      ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n    } else if (isX(p)) {\n      // ~1.2 == >=1.2.0 <1.3.0-0\n      ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n    } else if (pr) {\n      debug('replaceTilde pr', pr)\n      ret = `>=${M}.${m}.${p}-${pr\n      } <${M}.${+m + 1}.0-0`\n    } else {\n      // ~1.2.3 == >=1.2.3 <1.3.0-0\n      ret = `>=${M}.${m}.${p\n      } <${M}.${+m + 1}.0-0`\n    }\n\n    debug('tilde return', ret)\n    return ret\n  })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n// ^1.2.3 --> >=1.2.3 <2.0.0-0\n// ^1.2.0 --> >=1.2.0 <2.0.0-0\n// ^0.0.1 --> >=0.0.1 <0.0.2-0\n// ^0.1.0 --> >=0.1.0 <0.2.0-0\nconst replaceCarets = (comp, options) => {\n  return comp\n    .trim()\n    .split(/\\s+/)\n    .map((c) => replaceCaret(c, options))\n    .join(' ')\n}\n\nconst replaceCaret = (comp, options) => {\n  debug('caret', comp, options)\n  const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]\n  const z = options.includePrerelease ? '-0' : ''\n  return comp.replace(r, (_, M, m, p, pr) => {\n    debug('caret', comp, _, M, m, p, pr)\n    let ret\n\n    if (isX(M)) {\n      ret = ''\n    } else if (isX(m)) {\n      ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n    } else if (isX(p)) {\n      if (M === '0') {\n        ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n      } else {\n        ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`\n      }\n    } else if (pr) {\n      debug('replaceCaret pr', pr)\n      if (M === '0') {\n        if (m === '0') {\n          ret = `>=${M}.${m}.${p}-${pr\n          } <${M}.${m}.${+p + 1}-0`\n        } else {\n          ret = `>=${M}.${m}.${p}-${pr\n          } <${M}.${+m + 1}.0-0`\n        }\n      } else {\n        ret = `>=${M}.${m}.${p}-${pr\n        } <${+M + 1}.0.0-0`\n      }\n    } else {\n      debug('no pr')\n      if (M === '0') {\n        if (m === '0') {\n          ret = `>=${M}.${m}.${p\n          } <${M}.${m}.${+p + 1}-0`\n        } else {\n          ret = `>=${M}.${m}.${p\n          } <${M}.${+m + 1}.0-0`\n        }\n      } else {\n        ret = `>=${M}.${m}.${p\n        } <${+M + 1}.0.0-0`\n      }\n    }\n\n    debug('caret return', ret)\n    return ret\n  })\n}\n\nconst replaceXRanges = (comp, options) => {\n  debug('replaceXRanges', comp, options)\n  return comp\n    .split(/\\s+/)\n    .map((c) => replaceXRange(c, options))\n    .join(' ')\n}\n\nconst replaceXRange = (comp, options) => {\n  comp = comp.trim()\n  const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]\n  return comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n    debug('xRange', comp, ret, gtlt, M, m, p, pr)\n    if (invalidXRangeOrder(M, m, p)) {\n      return comp\n    }\n\n    const xM = isX(M)\n    const xm = xM || isX(m)\n    const xp = xm || isX(p)\n    const anyX = xp\n\n    if (gtlt === '=' && anyX) {\n      gtlt = ''\n    }\n\n    // if we're including prereleases in the match, then we need\n    // to fix this to -0, the lowest possible prerelease value\n    pr = options.includePrerelease ? '-0' : ''\n\n    if (xM) {\n      if (gtlt === '>' || gtlt === '<') {\n        // nothing is allowed\n        ret = '<0.0.0-0'\n      } else {\n        // nothing is forbidden\n        ret = '*'\n      }\n    } else if (gtlt && anyX) {\n      // we know patch is an x, because we have any x at all.\n      // replace X with 0\n      if (xm) {\n        m = 0\n      }\n      p = 0\n\n      if (gtlt === '>') {\n        // >1 => >=2.0.0\n        // >1.2 => >=1.3.0\n        gtlt = '>='\n        if (xm) {\n          M = +M + 1\n          m = 0\n          p = 0\n        } else {\n          m = +m + 1\n          p = 0\n        }\n      } else if (gtlt === '<=') {\n        // <=0.7.x is actually <0.8.0, since any 0.7.x should\n        // pass.  Similarly, <=7.x is actually <8.0.0, etc.\n        gtlt = '<'\n        if (xm) {\n          M = +M + 1\n        } else {\n          m = +m + 1\n        }\n      }\n\n      if (gtlt === '<') {\n        pr = '-0'\n      }\n\n      ret = `${gtlt + M}.${m}.${p}${pr}`\n    } else if (xm) {\n      ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`\n    } else if (xp) {\n      ret = `>=${M}.${m}.0${pr\n      } <${M}.${+m + 1}.0-0`\n    }\n\n    debug('xRange return', ret)\n\n    return ret\n  })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nconst replaceStars = (comp, options) => {\n  debug('replaceStars', comp, options)\n  // Looseness is ignored here.  star is always as loose as it gets!\n  return comp\n    .trim()\n    .replace(re[t.STAR], '')\n}\n\nconst replaceGTE0 = (comp, options) => {\n  debug('replaceGTE0', comp, options)\n  return comp\n    .trim()\n    .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0-0\n// TODO build?\nconst hyphenReplace = incPr => ($0,\n  from, fM, fm, fp, fpr, fb,\n  to, tM, tm, tp, tpr) => {\n  if (isX(fM)) {\n    from = ''\n  } else if (isX(fm)) {\n    from = `>=${fM}.0.0${incPr ? '-0' : ''}`\n  } else if (isX(fp)) {\n    from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`\n  } else if (fpr) {\n    from = `>=${from}`\n  } else {\n    from = `>=${from}${incPr ? '-0' : ''}`\n  }\n\n  if (isX(tM)) {\n    to = ''\n  } else if (isX(tm)) {\n    to = `<${+tM + 1}.0.0-0`\n  } else if (isX(tp)) {\n    to = `<${tM}.${+tm + 1}.0-0`\n  } else if (tpr) {\n    to = `<=${tM}.${tm}.${tp}-${tpr}`\n  } else if (incPr) {\n    to = `<${tM}.${tm}.${+tp + 1}-0`\n  } else {\n    to = `<=${to}`\n  }\n\n  return `${from} ${to}`.trim()\n}\n\nconst testSet = (set, version, options) => {\n  for (let i = 0; i < set.length; i++) {\n    if (!set[i].test(version)) {\n      return false\n    }\n  }\n\n  if (version.prerelease.length && !options.includePrerelease) {\n    // Find the set of versions that are allowed to have prereleases\n    // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n    // That should allow `1.2.3-pr.2` to pass.\n    // However, `1.2.4-alpha.notready` should NOT be allowed,\n    // even though it's within the range set by the comparators.\n    for (let i = 0; i < set.length; i++) {\n      debug(set[i].semver)\n      if (set[i].semver === Comparator.ANY) {\n        continue\n      }\n\n      if (set[i].semver.prerelease.length > 0) {\n        const allowed = set[i].semver\n        if (allowed.major === version.major &&\n            allowed.minor === version.minor &&\n            allowed.patch === version.patch) {\n          return true\n        }\n      }\n    }\n\n    // Version has a -pre, but it's not one of the ones we like.\n    return false\n  }\n\n  return true\n}\n","'use strict'\n\nconst ANY = Symbol('SemVer ANY')\n// hoisted class for cyclic dependency\nclass Comparator {\n  static get ANY () {\n    return ANY\n  }\n\n  constructor (comp, options) {\n    options = parseOptions(options)\n\n    if (comp instanceof Comparator) {\n      if (comp.loose === !!options.loose) {\n        return comp\n      } else {\n        comp = comp.value\n      }\n    }\n\n    comp = comp.trim().split(/\\s+/).join(' ')\n    debug('comparator', comp, options)\n    this.options = options\n    this.loose = !!options.loose\n    this.parse(comp)\n\n    if (this.semver === ANY) {\n      this.value = ''\n    } else {\n      this.value = this.operator + this.semver.version\n    }\n\n    debug('comp', this)\n  }\n\n  parse (comp) {\n    const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n    const m = comp.match(r)\n\n    if (!m) {\n      throw new TypeError(`Invalid comparator: ${comp}`)\n    }\n\n    this.operator = m[1] !== undefined ? m[1] : ''\n    if (this.operator === '=') {\n      this.operator = ''\n    }\n\n    // if it literally is just '>' or '' then allow anything.\n    if (!m[2]) {\n      this.semver = ANY\n    } else {\n      this.semver = new SemVer(m[2], this.options.loose)\n    }\n  }\n\n  toString () {\n    return this.value\n  }\n\n  test (version) {\n    debug('Comparator.test', version, this.options.loose)\n\n    if (this.semver === ANY || version === ANY) {\n      return true\n    }\n\n    if (typeof version === 'string') {\n      try {\n        version = new SemVer(version, this.options)\n      } catch (er) {\n        return false\n      }\n    }\n\n    return cmp(version, this.operator, this.semver, this.options)\n  }\n\n  intersects (comp, options) {\n    if (!(comp instanceof Comparator)) {\n      throw new TypeError('a Comparator is required')\n    }\n\n    if (this.operator === '') {\n      if (this.value === '') {\n        return true\n      }\n      return new Range(comp.value, options).test(this.value)\n    } else if (comp.operator === '') {\n      if (comp.value === '') {\n        return true\n      }\n      return new Range(this.value, options).test(comp.semver)\n    }\n\n    options = parseOptions(options)\n\n    // Special cases where nothing can possibly be lower\n    if (options.includePrerelease &&\n      (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {\n      return false\n    }\n    if (!options.includePrerelease &&\n      (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {\n      return false\n    }\n\n    // Same direction increasing (> or >=)\n    if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {\n      return true\n    }\n    // Same direction decreasing (< or <=)\n    if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {\n      return true\n    }\n    // same SemVer and both sides are inclusive (<= or >=)\n    if (\n      (this.semver.version === comp.semver.version) &&\n      this.operator.includes('=') && comp.operator.includes('=')) {\n      return true\n    }\n    // opposite directions less than\n    if (cmp(this.semver, '<', comp.semver, options) &&\n      this.operator.startsWith('>') && comp.operator.startsWith('<')) {\n      return true\n    }\n    // opposite directions greater than\n    if (cmp(this.semver, '>', comp.semver, options) &&\n      this.operator.startsWith('<') && comp.operator.startsWith('>')) {\n      return true\n    }\n    return false\n  }\n}\n\nmodule.exports = Comparator\n\nconst parseOptions = require('../internal/parse-options')\nconst { safeRe: re, t } = require('../internal/re')\nconst cmp = require('../functions/cmp')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst Range = require('./range')\n","'use strict'\n\nconst Range = require('../classes/range')\nconst satisfies = (version, range, options) => {\n  try {\n    range = new Range(range, options)\n  } catch (er) {\n    return false\n  }\n  return range.test(version)\n}\nmodule.exports = satisfies\n","'use strict'\n\nconst Range = require('../classes/range')\n\n// Mostly just for testing and legacy API reasons\nconst toComparators = (range, options) =>\n  new Range(range, options).set\n    .map(comp => comp.map(c => c.value).join(' ').trim().split(' '))\n\nmodule.exports = toComparators\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\n\nconst maxSatisfying = (versions, range, options) => {\n  let max = null\n  let maxSV = null\n  let rangeObj = null\n  try {\n    rangeObj = new Range(range, options)\n  } catch (er) {\n    return null\n  }\n  versions.forEach((v) => {\n    if (rangeObj.test(v)) {\n      // satisfies(v, range, options)\n      if (!max || maxSV.compare(v) === -1) {\n        // compare(max, v, true)\n        max = v\n        maxSV = new SemVer(max, options)\n      }\n    }\n  })\n  return max\n}\nmodule.exports = maxSatisfying\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst minSatisfying = (versions, range, options) => {\n  let min = null\n  let minSV = null\n  let rangeObj = null\n  try {\n    rangeObj = new Range(range, options)\n  } catch (er) {\n    return null\n  }\n  versions.forEach((v) => {\n    if (rangeObj.test(v)) {\n      // satisfies(v, range, options)\n      if (!min || minSV.compare(v) === 1) {\n        // compare(min, v, true)\n        min = v\n        minSV = new SemVer(min, options)\n      }\n    }\n  })\n  return min\n}\nmodule.exports = minSatisfying\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst gt = require('../functions/gt')\n\nconst minVersion = (range, loose) => {\n  range = new Range(range, loose)\n\n  let minver = new SemVer('0.0.0')\n  if (range.test(minver)) {\n    return minver\n  }\n\n  minver = new SemVer('0.0.0-0')\n  if (range.test(minver)) {\n    return minver\n  }\n\n  minver = null\n  for (let i = 0; i < range.set.length; ++i) {\n    const comparators = range.set[i]\n\n    let setMin = null\n    comparators.forEach((comparator) => {\n      // Clone to avoid manipulating the comparator's semver object.\n      const compver = new SemVer(comparator.semver.version)\n      switch (comparator.operator) {\n        case '>':\n          if (compver.prerelease.length === 0) {\n            compver.patch++\n          } else {\n            compver.prerelease.push(0)\n          }\n          compver.raw = compver.format()\n          /* fallthrough */\n        case '':\n        case '>=':\n          if (!setMin || gt(compver, setMin)) {\n            setMin = compver\n          }\n          break\n        case '<':\n        case '<=':\n          /* Ignore maximum versions */\n          break\n        /* istanbul ignore next */\n        default:\n          throw new Error(`Unexpected operation: ${comparator.operator}`)\n      }\n    })\n    if (setMin && (!minver || gt(minver, setMin))) {\n      minver = setMin\n    }\n  }\n\n  if (minver && range.test(minver)) {\n    return minver\n  }\n\n  return null\n}\nmodule.exports = minVersion\n","'use strict'\n\nconst Range = require('../classes/range')\nconst validRange = (range, options) => {\n  try {\n    // Return '*' instead of '' so that truthiness works.\n    // This will throw if it's invalid anyway\n    return new Range(range, options).range || '*'\n  } catch (er) {\n    return null\n  }\n}\nmodule.exports = validRange\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Comparator = require('../classes/comparator')\nconst { ANY } = Comparator\nconst Range = require('../classes/range')\nconst satisfies = require('../functions/satisfies')\nconst gt = require('../functions/gt')\nconst lt = require('../functions/lt')\nconst lte = require('../functions/lte')\nconst gte = require('../functions/gte')\n\nconst outside = (version, range, hilo, options) => {\n  version = new SemVer(version, options)\n  range = new Range(range, options)\n\n  let gtfn, ltefn, ltfn, comp, ecomp\n  switch (hilo) {\n    case '>':\n      gtfn = gt\n      ltefn = lte\n      ltfn = lt\n      comp = '>'\n      ecomp = '>='\n      break\n    case '<':\n      gtfn = lt\n      ltefn = gte\n      ltfn = gt\n      comp = '<'\n      ecomp = '<='\n      break\n    default:\n      throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n  }\n\n  // If it satisfies the range it is not outside\n  if (satisfies(version, range, options)) {\n    return false\n  }\n\n  // From now on, variable terms are as if we're in \"gtr\" mode.\n  // but note that everything is flipped for the \"ltr\" function.\n\n  for (let i = 0; i < range.set.length; ++i) {\n    const comparators = range.set[i]\n\n    let high = null\n    let low = null\n\n    comparators.forEach((comparator) => {\n      if (comparator.semver === ANY) {\n        comparator = new Comparator('>=0.0.0')\n      }\n      high = high || comparator\n      low = low || comparator\n      if (gtfn(comparator.semver, high.semver, options)) {\n        high = comparator\n      } else if (ltfn(comparator.semver, low.semver, options)) {\n        low = comparator\n      }\n    })\n\n    // If the edge version comparator has a operator then our version\n    // isn't outside it\n    if (high.operator === comp || high.operator === ecomp) {\n      return false\n    }\n\n    // If the lowest version comparator has an operator and our version\n    // is less than it then it isn't higher than the range\n    if ((!low.operator || low.operator === comp) &&\n        ltefn(version, low.semver)) {\n      return false\n    } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n      return false\n    }\n  }\n  return true\n}\n\nmodule.exports = outside\n","'use strict'\n\n// Determine if version is greater than all the versions possible in the range.\nconst outside = require('./outside')\nconst gtr = (version, range, options) => outside(version, range, '>', options)\nmodule.exports = gtr\n","'use strict'\n\nconst outside = require('./outside')\n// Determine if version is less than all the versions possible in the range\nconst ltr = (version, range, options) => outside(version, range, '<', options)\nmodule.exports = ltr\n","'use strict'\n\nconst Range = require('../classes/range')\nconst intersects = (r1, r2, options) => {\n  r1 = new Range(r1, options)\n  r2 = new Range(r2, options)\n  return r1.intersects(r2, options)\n}\nmodule.exports = intersects\n","'use strict'\n\n// given a set of versions and a range, create a \"simplified\" range\n// that includes the same versions that the original range does\n// If the original range is shorter than the simplified one, return that.\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\nmodule.exports = (versions, range, options) => {\n  const set = []\n  let first = null\n  let prev = null\n  const v = versions.sort((a, b) => compare(a, b, options))\n  for (const version of v) {\n    const included = satisfies(version, range, options)\n    if (included) {\n      prev = version\n      if (!first) {\n        first = version\n      }\n    } else {\n      if (prev) {\n        set.push([first, prev])\n      }\n      prev = null\n      first = null\n    }\n  }\n  if (first) {\n    set.push([first, null])\n  }\n\n  const ranges = []\n  for (const [min, max] of set) {\n    if (min === max) {\n      ranges.push(min)\n    } else if (!max && min === v[0]) {\n      ranges.push('*')\n    } else if (!max) {\n      ranges.push(`>=${min}`)\n    } else if (min === v[0]) {\n      ranges.push(`<=${max}`)\n    } else {\n      ranges.push(`${min} - ${max}`)\n    }\n  }\n  const simplified = ranges.join(' || ')\n  const original = typeof range.raw === 'string' ? range.raw : String(range)\n  return simplified.length < original.length ? simplified : range\n}\n","'use strict'\n\nconst Range = require('../classes/range.js')\nconst Comparator = require('../classes/comparator.js')\nconst { ANY } = Comparator\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\n\n// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:\n// - Every simple range `r1, r2, ...` is a null set, OR\n// - Every simple range `r1, r2, ...` which is not a null set is a subset of\n//   some `R1, R2, ...`\n//\n// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:\n// - If c is only the ANY comparator\n//   - If C is only the ANY comparator, return true\n//   - Else if in prerelease mode, return false\n//   - else replace c with `[>=0.0.0]`\n// - If C is only the ANY comparator\n//   - if in prerelease mode, return true\n//   - else replace C with `[>=0.0.0]`\n// - Let EQ be the set of = comparators in c\n// - If EQ is more than one, return true (null set)\n// - Let GT be the highest > or >= comparator in c\n// - Let LT be the lowest < or <= comparator in c\n// - If GT and LT, and GT.semver > LT.semver, return true (null set)\n// - If any C is a = range, and GT or LT are set, return false\n// - If EQ\n//   - If GT, and EQ does not satisfy GT, return true (null set)\n//   - If LT, and EQ does not satisfy LT, return true (null set)\n//   - If EQ satisfies every C, return true\n//   - Else return false\n// - If GT\n//   - If GT.semver is lower than any > or >= comp in C, return false\n//   - If GT is >=, and GT.semver does not satisfy every C, return false\n//   - If GT.semver has a prerelease, and not in prerelease mode\n//     - If no C has a prerelease and the GT.semver tuple, return false\n// - If LT\n//   - If LT.semver is greater than any < or <= comp in C, return false\n//   - If LT is <=, and LT.semver does not satisfy every C, return false\n//   - If LT.semver has a prerelease, and not in prerelease mode\n//     - If no C has a prerelease and the LT.semver tuple, return false\n// - Else return true\n\nconst subset = (sub, dom, options = {}) => {\n  if (sub === dom) {\n    return true\n  }\n\n  sub = new Range(sub, options)\n  dom = new Range(dom, options)\n  let sawNonNull = false\n\n  OUTER: for (const simpleSub of sub.set) {\n    for (const simpleDom of dom.set) {\n      const isSub = simpleSubset(simpleSub, simpleDom, options)\n      sawNonNull = sawNonNull || isSub !== null\n      if (isSub) {\n        continue OUTER\n      }\n    }\n    // the null set is a subset of everything, but null simple ranges in\n    // a complex range should be ignored.  so if we saw a non-null range,\n    // then we know this isn't a subset, but if EVERY simple range was null,\n    // then it is a subset.\n    if (sawNonNull) {\n      return false\n    }\n  }\n  return true\n}\n\nconst minimumVersionWithPreRelease = [new Comparator('>=0.0.0-0')]\nconst minimumVersion = [new Comparator('>=0.0.0')]\n\nconst simpleSubset = (sub, dom, options) => {\n  if (sub === dom) {\n    return true\n  }\n\n  if (sub.length === 1 && sub[0].semver === ANY) {\n    if (dom.length === 1 && dom[0].semver === ANY) {\n      return true\n    } else if (options.includePrerelease) {\n      sub = minimumVersionWithPreRelease\n    } else {\n      sub = minimumVersion\n    }\n  }\n\n  if (dom.length === 1 && dom[0].semver === ANY) {\n    if (options.includePrerelease) {\n      return true\n    } else {\n      dom = minimumVersion\n    }\n  }\n\n  const eqSet = new Set()\n  let gt, lt\n  for (const c of sub) {\n    if (c.operator === '>' || c.operator === '>=') {\n      gt = higherGT(gt, c, options)\n    } else if (c.operator === '<' || c.operator === '<=') {\n      lt = lowerLT(lt, c, options)\n    } else {\n      eqSet.add(c.semver)\n    }\n  }\n\n  if (eqSet.size > 1) {\n    return null\n  }\n\n  let gtltComp\n  if (gt && lt) {\n    gtltComp = compare(gt.semver, lt.semver, options)\n    if (gtltComp > 0) {\n      return null\n    } else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) {\n      return null\n    }\n  }\n\n  // will iterate one or zero times\n  for (const eq of eqSet) {\n    if (gt && !satisfies(eq, String(gt), options)) {\n      return null\n    }\n\n    if (lt && !satisfies(eq, String(lt), options)) {\n      return null\n    }\n\n    for (const c of dom) {\n      if (!satisfies(eq, String(c), options)) {\n        return false\n      }\n    }\n\n    return true\n  }\n\n  let higher, lower\n  let hasDomLT, hasDomGT\n  // if the subset has a prerelease, we need a comparator in the superset\n  // with the same tuple and a prerelease, or it's not a subset\n  let needDomLTPre = lt &&\n    !options.includePrerelease &&\n    lt.semver.prerelease.length ? lt.semver : false\n  let needDomGTPre = gt &&\n    !options.includePrerelease &&\n    gt.semver.prerelease.length ? gt.semver : false\n  // exception: <1.2.3-0 is the same as <1.2.3\n  if (needDomLTPre && needDomLTPre.prerelease.length === 1 &&\n      lt.operator === '<' && needDomLTPre.prerelease[0] === 0) {\n    needDomLTPre = false\n  }\n\n  for (const c of dom) {\n    hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>='\n    hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<='\n    if (gt) {\n      if (needDomGTPre) {\n        if (c.semver.prerelease && c.semver.prerelease.length &&\n            c.semver.major === needDomGTPre.major &&\n            c.semver.minor === needDomGTPre.minor &&\n            c.semver.patch === needDomGTPre.patch) {\n          needDomGTPre = false\n        }\n      }\n      if (c.operator === '>' || c.operator === '>=') {\n        higher = higherGT(gt, c, options)\n        if (higher === c && higher !== gt) {\n          return false\n        }\n      } else if (gt.operator === '>=' && !c.test(gt.semver)) {\n        return false\n      }\n    }\n    if (lt) {\n      if (needDomLTPre) {\n        if (c.semver.prerelease && c.semver.prerelease.length &&\n            c.semver.major === needDomLTPre.major &&\n            c.semver.minor === needDomLTPre.minor &&\n            c.semver.patch === needDomLTPre.patch) {\n          needDomLTPre = false\n        }\n      }\n      if (c.operator === '<' || c.operator === '<=') {\n        lower = lowerLT(lt, c, options)\n        if (lower === c && lower !== lt) {\n          return false\n        }\n      } else if (lt.operator === '<=' && !c.test(lt.semver)) {\n        return false\n      }\n    }\n    if (!c.operator && (lt || gt) && gtltComp !== 0) {\n      return false\n    }\n  }\n\n  // if there was a < or >, and nothing in the dom, then must be false\n  // UNLESS it was limited by another range in the other direction.\n  // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0\n  if (gt && hasDomLT && !lt && gtltComp !== 0) {\n    return false\n  }\n\n  if (lt && hasDomGT && !gt && gtltComp !== 0) {\n    return false\n  }\n\n  // we needed a prerelease range in a specific tuple, but didn't get one\n  // then this isn't a subset.  eg >=1.2.3-pre is not a subset of >=1.0.0,\n  // because it includes prereleases in the 1.2.3 tuple\n  if (needDomGTPre || needDomLTPre) {\n    return false\n  }\n\n  return true\n}\n\n// >=1.2.3 is lower than >1.2.3\nconst higherGT = (a, b, options) => {\n  if (!a) {\n    return b\n  }\n  const comp = compare(a.semver, b.semver, options)\n  return comp > 0 ? a\n    : comp < 0 ? b\n    : b.operator === '>' && a.operator === '>=' ? b\n    : a\n}\n\n// <=1.2.3 is higher than <1.2.3\nconst lowerLT = (a, b, options) => {\n  if (!a) {\n    return b\n  }\n  const comp = compare(a.semver, b.semver, options)\n  return comp < 0 ? a\n    : comp > 0 ? b\n    : b.operator === '<' && a.operator === '<=' ? b\n    : a\n}\n\nmodule.exports = subset\n","'use strict'\n\n// just pre-load all the stuff that index.js lazily exports\nconst internalRe = require('./internal/re')\nconst constants = require('./internal/constants')\nconst SemVer = require('./classes/semver')\nconst identifiers = require('./internal/identifiers')\nconst parse = require('./functions/parse')\nconst valid = require('./functions/valid')\nconst clean = require('./functions/clean')\nconst inc = require('./functions/inc')\nconst diff = require('./functions/diff')\nconst major = require('./functions/major')\nconst minor = require('./functions/minor')\nconst patch = require('./functions/patch')\nconst prerelease = require('./functions/prerelease')\nconst compare = require('./functions/compare')\nconst rcompare = require('./functions/rcompare')\nconst compareLoose = require('./functions/compare-loose')\nconst compareBuild = require('./functions/compare-build')\nconst sort = require('./functions/sort')\nconst rsort = require('./functions/rsort')\nconst gt = require('./functions/gt')\nconst lt = require('./functions/lt')\nconst eq = require('./functions/eq')\nconst neq = require('./functions/neq')\nconst gte = require('./functions/gte')\nconst lte = require('./functions/lte')\nconst cmp = require('./functions/cmp')\nconst coerce = require('./functions/coerce')\nconst truncate = require('./functions/truncate')\nconst Comparator = require('./classes/comparator')\nconst Range = require('./classes/range')\nconst satisfies = require('./functions/satisfies')\nconst toComparators = require('./ranges/to-comparators')\nconst maxSatisfying = require('./ranges/max-satisfying')\nconst minSatisfying = require('./ranges/min-satisfying')\nconst minVersion = require('./ranges/min-version')\nconst validRange = require('./ranges/valid')\nconst outside = require('./ranges/outside')\nconst gtr = require('./ranges/gtr')\nconst ltr = require('./ranges/ltr')\nconst intersects = require('./ranges/intersects')\nconst simplifyRange = require('./ranges/simplify')\nconst subset = require('./ranges/subset')\nmodule.exports = {\n  parse,\n  valid,\n  clean,\n  inc,\n  diff,\n  major,\n  minor,\n  patch,\n  prerelease,\n  compare,\n  rcompare,\n  compareLoose,\n  compareBuild,\n  sort,\n  rsort,\n  gt,\n  lt,\n  eq,\n  neq,\n  gte,\n  lte,\n  cmp,\n  coerce,\n  truncate,\n  Comparator,\n  Range,\n  satisfies,\n  toComparators,\n  maxSatisfying,\n  minSatisfying,\n  minVersion,\n  validRange,\n  outside,\n  gtr,\n  ltr,\n  intersects,\n  simplifyRange,\n  subset,\n  SemVer,\n  re: internalRe.re,\n  src: internalRe.src,\n  tokens: internalRe.t,\n  SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,\n  RELEASE_TYPES: constants.RELEASE_TYPES,\n  compareIdentifiers: identifiers.compareIdentifiers,\n  rcompareIdentifiers: identifiers.rcompareIdentifiers,\n}\n","module.exports = {\n    MODE_NUMBER :       1 << 0,\n    MODE_ALPHA_NUM :    1 << 1,\n    MODE_8BIT_BYTE :    1 << 2,\n    MODE_KANJI :        1 << 3\n};\n","var QRMode = require('./QRMode');\n\nfunction QR8bitByte(data) {\n\tthis.mode = QRMode.MODE_8BIT_BYTE;\n\tthis.data = data;\n}\n\nQR8bitByte.prototype = {\n\n\tgetLength : function() {\n\t\treturn this.data.length;\n\t},\n\t\n\twrite : function(buffer) {\n\t\tfor (var i = 0; i < this.data.length; i++) {\n\t\t\t// not JIS ...\n\t\t\tbuffer.put(this.data.charCodeAt(i), 8);\n\t\t}\n\t}\n};\n\nmodule.exports = QR8bitByte;\n","var QRMath = {\n\n\tglog : function(n) {\n\t\n\t\tif (n < 1) {\n\t\t\tthrow new Error(\"glog(\" + n + \")\");\n\t\t}\n\t\t\n\t\treturn QRMath.LOG_TABLE[n];\n\t},\n\t\n\tgexp : function(n) {\n\t\n\t\twhile (n < 0) {\n\t\t\tn += 255;\n\t\t}\n\t\n\t\twhile (n >= 256) {\n\t\t\tn -= 255;\n\t\t}\n\t\n\t\treturn QRMath.EXP_TABLE[n];\n\t},\n\t\n\tEXP_TABLE : new Array(256),\n\t\n\tLOG_TABLE : new Array(256)\n\n};\n\t\nfor (var i = 0; i < 8; i++) {\n\tQRMath.EXP_TABLE[i] = 1 << i;\n}\nfor (var i = 8; i < 256; i++) {\n\tQRMath.EXP_TABLE[i] = QRMath.EXP_TABLE[i - 4]\n\t\t^ QRMath.EXP_TABLE[i - 5]\n\t\t^ QRMath.EXP_TABLE[i - 6]\n\t\t^ QRMath.EXP_TABLE[i - 8];\n}\nfor (var i = 0; i < 255; i++) {\n\tQRMath.LOG_TABLE[QRMath.EXP_TABLE[i] ] = i;\n}\n\nmodule.exports = QRMath;\n","var QRMath = require('./QRMath');\n\nfunction QRPolynomial(num, shift) {\n\tif (num.length === undefined) {\n\t\tthrow new Error(num.length + \"/\" + shift);\n\t}\n\n\tvar offset = 0;\n\n\twhile (offset < num.length && num[offset] === 0) {\n\t\toffset++;\n\t}\n\n\tthis.num = new Array(num.length - offset + shift);\n\tfor (var i = 0; i < num.length - offset; i++) {\n\t\tthis.num[i] = num[i + offset];\n\t}\n}\n\nQRPolynomial.prototype = {\n\n\tget : function(index) {\n\t\treturn this.num[index];\n\t},\n\t\n\tgetLength : function() {\n\t\treturn this.num.length;\n\t},\n\t\n\tmultiply : function(e) {\n\t\n\t\tvar num = new Array(this.getLength() + e.getLength() - 1);\n\t\n\t\tfor (var i = 0; i < this.getLength(); i++) {\n\t\t\tfor (var j = 0; j < e.getLength(); j++) {\n\t\t\t\tnum[i + j] ^= QRMath.gexp(QRMath.glog(this.get(i) ) + QRMath.glog(e.get(j) ) );\n\t\t\t}\n\t\t}\n\t\n\t\treturn new QRPolynomial(num, 0);\n\t},\n\t\n\tmod : function(e) {\n\t\n\t\tif (this.getLength() - e.getLength() < 0) {\n\t\t\treturn this;\n\t\t}\n\t\n\t\tvar ratio = QRMath.glog(this.get(0) ) - QRMath.glog(e.get(0) );\n\t\n\t\tvar num = new Array(this.getLength() );\n\t\t\n\t\tfor (var i = 0; i < this.getLength(); i++) {\n\t\t\tnum[i] = this.get(i);\n\t\t}\n\t\t\n\t\tfor (var x = 0; x < e.getLength(); x++) {\n\t\t\tnum[x] ^= QRMath.gexp(QRMath.glog(e.get(x) ) + ratio);\n\t\t}\n\t\n\t\t// recursive call\n\t\treturn new QRPolynomial(num, 0).mod(e);\n\t}\n};\n\nmodule.exports = QRPolynomial;\n","module.exports = {\n\tPATTERN000 : 0,\n\tPATTERN001 : 1,\n\tPATTERN010 : 2,\n\tPATTERN011 : 3,\n\tPATTERN100 : 4,\n\tPATTERN101 : 5,\n\tPATTERN110 : 6,\n\tPATTERN111 : 7\n};\n","var QRMode = require('./QRMode');\nvar QRPolynomial = require('./QRPolynomial');\nvar QRMath = require('./QRMath');\nvar QRMaskPattern = require('./QRMaskPattern');\n\nvar QRUtil = {\n\n    PATTERN_POSITION_TABLE : [\n        [],\n        [6, 18],\n        [6, 22],\n        [6, 26],\n        [6, 30],\n        [6, 34],\n        [6, 22, 38],\n        [6, 24, 42],\n        [6, 26, 46],\n        [6, 28, 50],\n        [6, 30, 54],        \n        [6, 32, 58],\n        [6, 34, 62],\n        [6, 26, 46, 66],\n        [6, 26, 48, 70],\n        [6, 26, 50, 74],\n        [6, 30, 54, 78],\n        [6, 30, 56, 82],\n        [6, 30, 58, 86],\n        [6, 34, 62, 90],\n        [6, 28, 50, 72, 94],\n        [6, 26, 50, 74, 98],\n        [6, 30, 54, 78, 102],\n        [6, 28, 54, 80, 106],\n        [6, 32, 58, 84, 110],\n        [6, 30, 58, 86, 114],\n        [6, 34, 62, 90, 118],\n        [6, 26, 50, 74, 98, 122],\n        [6, 30, 54, 78, 102, 126],\n        [6, 26, 52, 78, 104, 130],\n        [6, 30, 56, 82, 108, 134],\n        [6, 34, 60, 86, 112, 138],\n        [6, 30, 58, 86, 114, 142],\n        [6, 34, 62, 90, 118, 146],\n        [6, 30, 54, 78, 102, 126, 150],\n        [6, 24, 50, 76, 102, 128, 154],\n        [6, 28, 54, 80, 106, 132, 158],\n        [6, 32, 58, 84, 110, 136, 162],\n        [6, 26, 54, 82, 110, 138, 166],\n        [6, 30, 58, 86, 114, 142, 170]\n    ],\n\n    G15 : (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0),\n    G18 : (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0),\n    G15_MASK : (1 << 14) | (1 << 12) | (1 << 10)    | (1 << 4) | (1 << 1),\n\n    getBCHTypeInfo : function(data) {\n        var d = data << 10;\n        while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) {\n            d ^= (QRUtil.G15 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) ) );    \n        }\n        return ( (data << 10) | d) ^ QRUtil.G15_MASK;\n    },\n\n    getBCHTypeNumber : function(data) {\n        var d = data << 12;\n        while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) {\n            d ^= (QRUtil.G18 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) ) );    \n        }\n        return (data << 12) | d;\n    },\n\n    getBCHDigit : function(data) {\n\n        var digit = 0;\n\n        while (data !== 0) {\n            digit++;\n            data >>>= 1;\n        }\n\n        return digit;\n    },\n\n    getPatternPosition : function(typeNumber) {\n        return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1];\n    },\n\n    getMask : function(maskPattern, i, j) {\n        \n        switch (maskPattern) {\n            \n        case QRMaskPattern.PATTERN000 : return (i + j) % 2 === 0;\n        case QRMaskPattern.PATTERN001 : return i % 2 === 0;\n        case QRMaskPattern.PATTERN010 : return j % 3 === 0;\n        case QRMaskPattern.PATTERN011 : return (i + j) % 3 === 0;\n        case QRMaskPattern.PATTERN100 : return (Math.floor(i / 2) + Math.floor(j / 3) ) % 2 === 0;\n        case QRMaskPattern.PATTERN101 : return (i * j) % 2 + (i * j) % 3 === 0;\n        case QRMaskPattern.PATTERN110 : return ( (i * j) % 2 + (i * j) % 3) % 2 === 0;\n        case QRMaskPattern.PATTERN111 : return ( (i * j) % 3 + (i + j) % 2) % 2 === 0;\n\n        default :\n            throw new Error(\"bad maskPattern:\" + maskPattern);\n        }\n    },\n\n    getErrorCorrectPolynomial : function(errorCorrectLength) {\n\n        var a = new QRPolynomial([1], 0);\n\n        for (var i = 0; i < errorCorrectLength; i++) {\n            a = a.multiply(new QRPolynomial([1, QRMath.gexp(i)], 0) );\n        }\n\n        return a;\n    },\n\n    getLengthInBits : function(mode, type) {\n\n        if (1 <= type && type < 10) {\n\n            // 1 - 9\n\n            switch(mode) {\n            case QRMode.MODE_NUMBER     : return 10;\n            case QRMode.MODE_ALPHA_NUM  : return 9;\n            case QRMode.MODE_8BIT_BYTE  : return 8;\n            case QRMode.MODE_KANJI      : return 8;\n            default :\n                throw new Error(\"mode:\" + mode);\n            }\n\n        } else if (type < 27) {\n\n            // 10 - 26\n\n            switch(mode) {\n            case QRMode.MODE_NUMBER     : return 12;\n            case QRMode.MODE_ALPHA_NUM  : return 11;\n            case QRMode.MODE_8BIT_BYTE  : return 16;\n            case QRMode.MODE_KANJI      : return 10;\n            default :\n                throw new Error(\"mode:\" + mode);\n            }\n\n        } else if (type < 41) {\n\n            // 27 - 40\n\n            switch(mode) {\n            case QRMode.MODE_NUMBER     : return 14;\n            case QRMode.MODE_ALPHA_NUM  : return 13;\n            case QRMode.MODE_8BIT_BYTE  : return 16;\n            case QRMode.MODE_KANJI      : return 12;\n            default :\n                throw new Error(\"mode:\" + mode);\n            }\n\n        } else {\n            throw new Error(\"type:\" + type);\n        }\n    },\n\n    getLostPoint : function(qrCode) {\n        \n        var moduleCount = qrCode.getModuleCount();\n        var lostPoint = 0;\n        var row = 0; \n        var col = 0;\n\n        \n        // LEVEL1\n        \n        for (row = 0; row < moduleCount; row++) {\n\n            for (col = 0; col < moduleCount; col++) {\n\n                var sameCount = 0;\n                var dark = qrCode.isDark(row, col);\n\n                for (var r = -1; r <= 1; r++) {\n\n                    if (row + r < 0 || moduleCount <= row + r) {\n                        continue;\n                    }\n\n                    for (var c = -1; c <= 1; c++) {\n\n                        if (col + c < 0 || moduleCount <= col + c) {\n                            continue;\n                        }\n\n                        if (r === 0 && c === 0) {\n                            continue;\n                        }\n\n                        if (dark === qrCode.isDark(row + r, col + c) ) {\n                            sameCount++;\n                        }\n                    }\n                }\n\n                if (sameCount > 5) {\n                    lostPoint += (3 + sameCount - 5);\n                }\n            }\n        }\n\n        // LEVEL2\n\n        for (row = 0; row < moduleCount - 1; row++) {\n            for (col = 0; col < moduleCount - 1; col++) {\n                var count = 0;\n                if (qrCode.isDark(row,     col    ) ) count++;\n                if (qrCode.isDark(row + 1, col    ) ) count++;\n                if (qrCode.isDark(row,     col + 1) ) count++;\n                if (qrCode.isDark(row + 1, col + 1) ) count++;\n                if (count === 0 || count === 4) {\n                    lostPoint += 3;\n                }\n            }\n        }\n\n        // LEVEL3\n\n        for (row = 0; row < moduleCount; row++) {\n            for (col = 0; col < moduleCount - 6; col++) {\n                if (qrCode.isDark(row, col) && \n                        !qrCode.isDark(row, col + 1) && \n                         qrCode.isDark(row, col + 2) && \n                         qrCode.isDark(row, col + 3) && \n                         qrCode.isDark(row, col + 4) && \n                        !qrCode.isDark(row, col + 5) && \n                         qrCode.isDark(row, col + 6) ) {\n                    lostPoint += 40;\n                }\n            }\n        }\n\n        for (col = 0; col < moduleCount; col++) {\n            for (row = 0; row < moduleCount - 6; row++) {\n                if (qrCode.isDark(row, col) &&\n                        !qrCode.isDark(row + 1, col) &&\n                         qrCode.isDark(row + 2, col) &&\n                         qrCode.isDark(row + 3, col) &&\n                         qrCode.isDark(row + 4, col) &&\n                        !qrCode.isDark(row + 5, col) &&\n                         qrCode.isDark(row + 6, col) ) {\n                    lostPoint += 40;\n                }\n            }\n        }\n\n        // LEVEL4\n        \n        var darkCount = 0;\n\n        for (col = 0; col < moduleCount; col++) {\n            for (row = 0; row < moduleCount; row++) {\n                if (qrCode.isDark(row, col) ) {\n                    darkCount++;\n                }\n            }\n        }\n        \n        var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;\n        lostPoint += ratio * 10;\n\n        return lostPoint;       \n    }\n\n};\n\nmodule.exports = QRUtil;\n","module.exports = {\n\tL : 1,\n\tM : 0,\n\tQ : 3,\n\tH : 2\n};\n\n","var QRErrorCorrectLevel = require('./QRErrorCorrectLevel');\n\nfunction QRRSBlock(totalCount, dataCount) {\n\tthis.totalCount = totalCount;\n\tthis.dataCount  = dataCount;\n}\n\nQRRSBlock.RS_BLOCK_TABLE = [\n\n\t// L\n\t// M\n\t// Q\n\t// H\n\n\t// 1\n\t[1, 26, 19],\n\t[1, 26, 16],\n\t[1, 26, 13],\n\t[1, 26, 9],\n\t\n\t// 2\n\t[1, 44, 34],\n\t[1, 44, 28],\n\t[1, 44, 22],\n\t[1, 44, 16],\n\n\t// 3\n\t[1, 70, 55],\n\t[1, 70, 44],\n\t[2, 35, 17],\n\t[2, 35, 13],\n\n\t// 4\t\t\n\t[1, 100, 80],\n\t[2, 50, 32],\n\t[2, 50, 24],\n\t[4, 25, 9],\n\t\n\t// 5\n\t[1, 134, 108],\n\t[2, 67, 43],\n\t[2, 33, 15, 2, 34, 16],\n\t[2, 33, 11, 2, 34, 12],\n\t\n\t// 6\n\t[2, 86, 68],\n\t[4, 43, 27],\n\t[4, 43, 19],\n\t[4, 43, 15],\n\t\n\t// 7\t\t\n\t[2, 98, 78],\n\t[4, 49, 31],\n\t[2, 32, 14, 4, 33, 15],\n\t[4, 39, 13, 1, 40, 14],\n\t\n\t// 8\n\t[2, 121, 97],\n\t[2, 60, 38, 2, 61, 39],\n\t[4, 40, 18, 2, 41, 19],\n\t[4, 40, 14, 2, 41, 15],\n\t\n\t// 9\n\t[2, 146, 116],\n\t[3, 58, 36, 2, 59, 37],\n\t[4, 36, 16, 4, 37, 17],\n\t[4, 36, 12, 4, 37, 13],\n\t\n\t// 10\t\t\n\t[2, 86, 68, 2, 87, 69],\n\t[4, 69, 43, 1, 70, 44],\n\t[6, 43, 19, 2, 44, 20],\n\t[6, 43, 15, 2, 44, 16],\n\n\t// 11\n\t[4, 101, 81],\n\t[1, 80, 50, 4, 81, 51],\n\t[4, 50, 22, 4, 51, 23],\n\t[3, 36, 12, 8, 37, 13],\n\n\t// 12\n\t[2, 116, 92, 2, 117, 93],\n\t[6, 58, 36, 2, 59, 37],\n\t[4, 46, 20, 6, 47, 21],\n\t[7, 42, 14, 4, 43, 15],\n\n\t// 13\n\t[4, 133, 107],\n\t[8, 59, 37, 1, 60, 38],\n\t[8, 44, 20, 4, 45, 21],\n\t[12, 33, 11, 4, 34, 12],\n\n\t// 14\n\t[3, 145, 115, 1, 146, 116],\n\t[4, 64, 40, 5, 65, 41],\n\t[11, 36, 16, 5, 37, 17],\n\t[11, 36, 12, 5, 37, 13],\n\n\t// 15\n\t[5, 109, 87, 1, 110, 88],\n\t[5, 65, 41, 5, 66, 42],\n\t[5, 54, 24, 7, 55, 25],\n\t[11, 36, 12],\n\n\t// 16\n\t[5, 122, 98, 1, 123, 99],\n\t[7, 73, 45, 3, 74, 46],\n\t[15, 43, 19, 2, 44, 20],\n\t[3, 45, 15, 13, 46, 16],\n\n\t// 17\n\t[1, 135, 107, 5, 136, 108],\n\t[10, 74, 46, 1, 75, 47],\n\t[1, 50, 22, 15, 51, 23],\n\t[2, 42, 14, 17, 43, 15],\n\n\t// 18\n\t[5, 150, 120, 1, 151, 121],\n\t[9, 69, 43, 4, 70, 44],\n\t[17, 50, 22, 1, 51, 23],\n\t[2, 42, 14, 19, 43, 15],\n\n\t// 19\n\t[3, 141, 113, 4, 142, 114],\n\t[3, 70, 44, 11, 71, 45],\n\t[17, 47, 21, 4, 48, 22],\n\t[9, 39, 13, 16, 40, 14],\n\n\t// 20\n\t[3, 135, 107, 5, 136, 108],\n\t[3, 67, 41, 13, 68, 42],\n\t[15, 54, 24, 5, 55, 25],\n\t[15, 43, 15, 10, 44, 16],\n\n\t// 21\n\t[4, 144, 116, 4, 145, 117],\n\t[17, 68, 42],\n\t[17, 50, 22, 6, 51, 23],\n\t[19, 46, 16, 6, 47, 17],\n\n\t// 22\n\t[2, 139, 111, 7, 140, 112],\n\t[17, 74, 46],\n\t[7, 54, 24, 16, 55, 25],\n\t[34, 37, 13],\n\n\t// 23\n\t[4, 151, 121, 5, 152, 122],\n\t[4, 75, 47, 14, 76, 48],\n\t[11, 54, 24, 14, 55, 25],\n\t[16, 45, 15, 14, 46, 16],\n\n\t// 24\n\t[6, 147, 117, 4, 148, 118],\n\t[6, 73, 45, 14, 74, 46],\n\t[11, 54, 24, 16, 55, 25],\n\t[30, 46, 16, 2, 47, 17],\n\n\t// 25\n\t[8, 132, 106, 4, 133, 107],\n\t[8, 75, 47, 13, 76, 48],\n\t[7, 54, 24, 22, 55, 25],\n\t[22, 45, 15, 13, 46, 16],\n\n\t// 26\n\t[10, 142, 114, 2, 143, 115],\n\t[19, 74, 46, 4, 75, 47],\n\t[28, 50, 22, 6, 51, 23],\n\t[33, 46, 16, 4, 47, 17],\n\n\t// 27\n\t[8, 152, 122, 4, 153, 123],\n\t[22, 73, 45, 3, 74, 46],\n\t[8, 53, 23, 26, 54, 24],\n\t[12, 45, 15, 28, 46, 16],\n\n\t// 28\n\t[3, 147, 117, 10, 148, 118],\n\t[3, 73, 45, 23, 74, 46],\n\t[4, 54, 24, 31, 55, 25],\n\t[11, 45, 15, 31, 46, 16],\n\n\t// 29\n\t[7, 146, 116, 7, 147, 117],\n\t[21, 73, 45, 7, 74, 46],\n\t[1, 53, 23, 37, 54, 24],\n\t[19, 45, 15, 26, 46, 16],\n\n\t// 30\n\t[5, 145, 115, 10, 146, 116],\n\t[19, 75, 47, 10, 76, 48],\n\t[15, 54, 24, 25, 55, 25],\n\t[23, 45, 15, 25, 46, 16],\n\n\t// 31\n\t[13, 145, 115, 3, 146, 116],\n\t[2, 74, 46, 29, 75, 47],\n\t[42, 54, 24, 1, 55, 25],\n\t[23, 45, 15, 28, 46, 16],\n\n\t// 32\n\t[17, 145, 115],\n\t[10, 74, 46, 23, 75, 47],\n\t[10, 54, 24, 35, 55, 25],\n\t[19, 45, 15, 35, 46, 16],\n\n\t// 33\n\t[17, 145, 115, 1, 146, 116],\n\t[14, 74, 46, 21, 75, 47],\n\t[29, 54, 24, 19, 55, 25],\n\t[11, 45, 15, 46, 46, 16],\n\n\t// 34\n\t[13, 145, 115, 6, 146, 116],\n\t[14, 74, 46, 23, 75, 47],\n\t[44, 54, 24, 7, 55, 25],\n\t[59, 46, 16, 1, 47, 17],\n\n\t// 35\n\t[12, 151, 121, 7, 152, 122],\n\t[12, 75, 47, 26, 76, 48],\n\t[39, 54, 24, 14, 55, 25],\n\t[22, 45, 15, 41, 46, 16],\n\n\t// 36\n\t[6, 151, 121, 14, 152, 122],\n\t[6, 75, 47, 34, 76, 48],\n\t[46, 54, 24, 10, 55, 25],\n\t[2, 45, 15, 64, 46, 16],\n\n\t// 37\n\t[17, 152, 122, 4, 153, 123],\n\t[29, 74, 46, 14, 75, 47],\n\t[49, 54, 24, 10, 55, 25],\n\t[24, 45, 15, 46, 46, 16],\n\n\t// 38\n\t[4, 152, 122, 18, 153, 123],\n\t[13, 74, 46, 32, 75, 47],\n\t[48, 54, 24, 14, 55, 25],\n\t[42, 45, 15, 32, 46, 16],\n\n\t// 39\n\t[20, 147, 117, 4, 148, 118],\n\t[40, 75, 47, 7, 76, 48],\n\t[43, 54, 24, 22, 55, 25],\n\t[10, 45, 15, 67, 46, 16],\n\n\t// 40\n\t[19, 148, 118, 6, 149, 119],\n\t[18, 75, 47, 31, 76, 48],\n\t[34, 54, 24, 34, 55, 25],\n\t[20, 45, 15, 61, 46, 16]\n];\n\nQRRSBlock.getRSBlocks = function(typeNumber, errorCorrectLevel) {\n\t\n\tvar rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectLevel);\n\t\n\tif (rsBlock === undefined) {\n\t\tthrow new Error(\"bad rs block @ typeNumber:\" + typeNumber + \"/errorCorrectLevel:\" + errorCorrectLevel);\n\t}\n\n\tvar length = rsBlock.length / 3;\n\t\n\tvar list = [];\n\t\n\tfor (var i = 0; i < length; i++) {\n\n\t\tvar count = rsBlock[i * 3 + 0];\n\t\tvar totalCount = rsBlock[i * 3 + 1];\n\t\tvar dataCount  = rsBlock[i * 3 + 2];\n\n\t\tfor (var j = 0; j < count; j++) {\n\t\t\tlist.push(new QRRSBlock(totalCount, dataCount) );\t\n\t\t}\n\t}\n\t\n\treturn list;\n};\n\nQRRSBlock.getRsBlockTable = function(typeNumber, errorCorrectLevel) {\n\n\tswitch(errorCorrectLevel) {\n\tcase QRErrorCorrectLevel.L :\n\t\treturn QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];\n\tcase QRErrorCorrectLevel.M :\n\t\treturn QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];\n\tcase QRErrorCorrectLevel.Q :\n\t\treturn QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];\n\tcase QRErrorCorrectLevel.H :\n\t\treturn QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];\n\tdefault :\n\t\treturn undefined;\n\t}\n};\n\nmodule.exports = QRRSBlock;\n","function QRBitBuffer() {\n\tthis.buffer = [];\n\tthis.length = 0;\n}\n\nQRBitBuffer.prototype = {\n\n\tget : function(index) {\n\t\tvar bufIndex = Math.floor(index / 8);\n\t\treturn ( (this.buffer[bufIndex] >>> (7 - index % 8) ) & 1) == 1;\n\t},\n\t\n\tput : function(num, length) {\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tthis.putBit( ( (num >>> (length - i - 1) ) & 1) == 1);\n\t\t}\n\t},\n\t\n\tgetLengthInBits : function() {\n\t\treturn this.length;\n\t},\n\t\n\tputBit : function(bit) {\n\t\n\t\tvar bufIndex = Math.floor(this.length / 8);\n\t\tif (this.buffer.length <= bufIndex) {\n\t\t\tthis.buffer.push(0);\n\t\t}\n\t\n\t\tif (bit) {\n\t\t\tthis.buffer[bufIndex] |= (0x80 >>> (this.length % 8) );\n\t\t}\n\t\n\t\tthis.length++;\n\t}\n};\n\nmodule.exports = QRBitBuffer;\n","//---------------------------------------------------------------------\n// QRCode for JavaScript\n//\n// Copyright (c) 2009 Kazuhiko Arase\n//\n// URL: http://www.d-project.com/\n//\n// Licensed under the MIT license:\n//   http://www.opensource.org/licenses/mit-license.php\n//\n// The word \"QR Code\" is registered trademark of \n// DENSO WAVE INCORPORATED\n//   http://www.denso-wave.com/qrcode/faqpatent-e.html\n//\n//---------------------------------------------------------------------\n// Modified to work in node for this project (and some refactoring)\n//---------------------------------------------------------------------\n\nvar QR8bitByte = require('./QR8bitByte');\nvar QRUtil = require('./QRUtil');\nvar QRPolynomial = require('./QRPolynomial');\nvar QRRSBlock = require('./QRRSBlock');\nvar QRBitBuffer = require('./QRBitBuffer');\n\nfunction QRCode(typeNumber, errorCorrectLevel) {\n\tthis.typeNumber = typeNumber;\n\tthis.errorCorrectLevel = errorCorrectLevel;\n\tthis.modules = null;\n\tthis.moduleCount = 0;\n\tthis.dataCache = null;\n\tthis.dataList = [];\n}\n\nQRCode.prototype = {\n\t\n\taddData : function(data) {\n\t\tvar newData = new QR8bitByte(data);\n\t\tthis.dataList.push(newData);\n\t\tthis.dataCache = null;\n\t},\n\t\n\tisDark : function(row, col) {\n\t\tif (row < 0 || this.moduleCount <= row || col < 0 || this.moduleCount <= col) {\n\t\t\tthrow new Error(row + \",\" + col);\n\t\t}\n\t\treturn this.modules[row][col];\n\t},\n\n\tgetModuleCount : function() {\n\t\treturn this.moduleCount;\n\t},\n\t\n\tmake : function() {\n\t\t// Calculate automatically typeNumber if provided is < 1\n\t\tif (this.typeNumber < 1 ){\n\t\t\tvar typeNumber = 1;\n\t\t\tfor (typeNumber = 1; typeNumber < 40; typeNumber++) {\n\t\t\t\tvar rsBlocks = QRRSBlock.getRSBlocks(typeNumber, this.errorCorrectLevel);\n\n\t\t\t\tvar buffer = new QRBitBuffer();\n\t\t\t\tvar totalDataCount = 0;\n\t\t\t\tfor (var i = 0; i < rsBlocks.length; i++) {\n\t\t\t\t\ttotalDataCount += rsBlocks[i].dataCount;\n\t\t\t\t}\n\n\t\t\t\tfor (var x = 0; x < this.dataList.length; x++) {\n\t\t\t\t\tvar data = this.dataList[x];\n\t\t\t\t\tbuffer.put(data.mode, 4);\n\t\t\t\t\tbuffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber) );\n\t\t\t\t\tdata.write(buffer);\n\t\t\t\t}\n\t\t\t\tif (buffer.getLengthInBits() <= totalDataCount * 8)\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tthis.typeNumber = typeNumber;\n\t\t}\n\t\tthis.makeImpl(false, this.getBestMaskPattern() );\n\t},\n\t\n\tmakeImpl : function(test, maskPattern) {\n\t\t\n\t\tthis.moduleCount = this.typeNumber * 4 + 17;\n\t\tthis.modules = new Array(this.moduleCount);\n\t\t\n\t\tfor (var row = 0; row < this.moduleCount; row++) {\n\t\t\t\n\t\t\tthis.modules[row] = new Array(this.moduleCount);\n\t\t\t\n\t\t\tfor (var col = 0; col < this.moduleCount; col++) {\n\t\t\t\tthis.modules[row][col] = null;//(col + row) % 3;\n\t\t\t}\n\t\t}\n\t\n\t\tthis.setupPositionProbePattern(0, 0);\n\t\tthis.setupPositionProbePattern(this.moduleCount - 7, 0);\n\t\tthis.setupPositionProbePattern(0, this.moduleCount - 7);\n\t\tthis.setupPositionAdjustPattern();\n\t\tthis.setupTimingPattern();\n\t\tthis.setupTypeInfo(test, maskPattern);\n\t\t\n\t\tif (this.typeNumber >= 7) {\n\t\t\tthis.setupTypeNumber(test);\n\t\t}\n\t\n\t\tif (this.dataCache === null) {\n\t\t\tthis.dataCache = QRCode.createData(this.typeNumber, this.errorCorrectLevel, this.dataList);\n\t\t}\n\t\n\t\tthis.mapData(this.dataCache, maskPattern);\n\t},\n\n\tsetupPositionProbePattern : function(row, col)  {\n\t\t\n\t\tfor (var r = -1; r <= 7; r++) {\n\t\t\t\n\t\t\tif (row + r <= -1 || this.moduleCount <= row + r) continue;\n\t\t\t\n\t\t\tfor (var c = -1; c <= 7; c++) {\n\t\t\t\t\n\t\t\t\tif (col + c <= -1 || this.moduleCount <= col + c) continue;\n\t\t\t\t\n\t\t\t\tif ( (0 <= r && r <= 6 && (c === 0 || c === 6) ) || \n                     (0 <= c && c <= 6 && (r === 0 || r === 6) ) || \n                     (2 <= r && r <= 4 && 2 <= c && c <= 4) ) {\n\t\t\t\t\tthis.modules[row + r][col + c] = true;\n\t\t\t\t} else {\n\t\t\t\t\tthis.modules[row + r][col + c] = false;\n\t\t\t\t}\n\t\t\t}\t\t\n\t\t}\t\t\n\t},\n\t\n\tgetBestMaskPattern : function() {\n\t\n\t\tvar minLostPoint = 0;\n\t\tvar pattern = 0;\n\t\n\t\tfor (var i = 0; i < 8; i++) {\n\t\t\t\n\t\t\tthis.makeImpl(true, i);\n\t\n\t\t\tvar lostPoint = QRUtil.getLostPoint(this);\n\t\n\t\t\tif (i === 0 || minLostPoint >  lostPoint) {\n\t\t\t\tminLostPoint = lostPoint;\n\t\t\t\tpattern = i;\n\t\t\t}\n\t\t}\n\t\n\t\treturn pattern;\n\t},\n\t\n\tcreateMovieClip : function(target_mc, instance_name, depth) {\n\t\n\t\tvar qr_mc = target_mc.createEmptyMovieClip(instance_name, depth);\n\t\tvar cs = 1;\n\t\n\t\tthis.make();\n\n\t\tfor (var row = 0; row < this.modules.length; row++) {\n\t\t\t\n\t\t\tvar y = row * cs;\n\t\t\t\n\t\t\tfor (var col = 0; col < this.modules[row].length; col++) {\n\t\n\t\t\t\tvar x = col * cs;\n\t\t\t\tvar dark = this.modules[row][col];\n\t\t\t\n\t\t\t\tif (dark) {\n\t\t\t\t\tqr_mc.beginFill(0, 100);\n\t\t\t\t\tqr_mc.moveTo(x, y);\n\t\t\t\t\tqr_mc.lineTo(x + cs, y);\n\t\t\t\t\tqr_mc.lineTo(x + cs, y + cs);\n\t\t\t\t\tqr_mc.lineTo(x, y + cs);\n\t\t\t\t\tqr_mc.endFill();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn qr_mc;\n\t},\n\n\tsetupTimingPattern : function() {\n\t\t\n\t\tfor (var r = 8; r < this.moduleCount - 8; r++) {\n\t\t\tif (this.modules[r][6] !== null) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthis.modules[r][6] = (r % 2 === 0);\n\t\t}\n\t\n\t\tfor (var c = 8; c < this.moduleCount - 8; c++) {\n\t\t\tif (this.modules[6][c] !== null) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthis.modules[6][c] = (c % 2 === 0);\n\t\t}\n\t},\n\t\n\tsetupPositionAdjustPattern : function() {\n\t\n\t\tvar pos = QRUtil.getPatternPosition(this.typeNumber);\n\t\t\n\t\tfor (var i = 0; i < pos.length; i++) {\n\t\t\n\t\t\tfor (var j = 0; j < pos.length; j++) {\n\t\t\t\n\t\t\t\tvar row = pos[i];\n\t\t\t\tvar col = pos[j];\n\t\t\t\t\n\t\t\t\tif (this.modules[row][col] !== null) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfor (var r = -2; r <= 2; r++) {\n\t\t\t\t\n\t\t\t\t\tfor (var c = -2; c <= 2; c++) {\n\t\t\t\t\t\n\t\t\t\t\t\tif (Math.abs(r) === 2 || \n                            Math.abs(c) === 2 ||\n                            (r === 0 && c === 0) ) {\n\t\t\t\t\t\t\tthis.modules[row + r][col + c] = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.modules[row + r][col + c] = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t\n\tsetupTypeNumber : function(test) {\n\t\n\t\tvar bits = QRUtil.getBCHTypeNumber(this.typeNumber);\n        var mod;\n\t\n\t\tfor (var i = 0; i < 18; i++) {\n\t\t\tmod = (!test && ( (bits >> i) & 1) === 1);\n\t\t\tthis.modules[Math.floor(i / 3)][i % 3 + this.moduleCount - 8 - 3] = mod;\n\t\t}\n\t\n\t\tfor (var x = 0; x < 18; x++) {\n\t\t\tmod = (!test && ( (bits >> x) & 1) === 1);\n\t\t\tthis.modules[x % 3 + this.moduleCount - 8 - 3][Math.floor(x / 3)] = mod;\n\t\t}\n\t},\n\t\n\tsetupTypeInfo : function(test, maskPattern) {\n\t\n\t\tvar data = (this.errorCorrectLevel << 3) | maskPattern;\n\t\tvar bits = QRUtil.getBCHTypeInfo(data);\n        var mod;\n\t\n\t\t// vertical\t\t\n\t\tfor (var v = 0; v < 15; v++) {\n\t\n\t\t\tmod = (!test && ( (bits >> v) & 1) === 1);\n\t\n\t\t\tif (v < 6) {\n\t\t\t\tthis.modules[v][8] = mod;\n\t\t\t} else if (v < 8) {\n\t\t\t\tthis.modules[v + 1][8] = mod;\n\t\t\t} else {\n\t\t\t\tthis.modules[this.moduleCount - 15 + v][8] = mod;\n\t\t\t}\n\t\t}\n\t\n\t\t// horizontal\n\t\tfor (var h = 0; h < 15; h++) {\n\t\n\t\t\tmod = (!test && ( (bits >> h) & 1) === 1);\n\t\t\t\n\t\t\tif (h < 8) {\n\t\t\t\tthis.modules[8][this.moduleCount - h - 1] = mod;\n\t\t\t} else if (h < 9) {\n\t\t\t\tthis.modules[8][15 - h - 1 + 1] = mod;\n\t\t\t} else {\n\t\t\t\tthis.modules[8][15 - h - 1] = mod;\n\t\t\t}\n\t\t}\n\t\n\t\t// fixed module\n\t\tthis.modules[this.moduleCount - 8][8] = (!test);\n\t\n\t},\n\t\n\tmapData : function(data, maskPattern) {\n\t\t\n\t\tvar inc = -1;\n\t\tvar row = this.moduleCount - 1;\n\t\tvar bitIndex = 7;\n\t\tvar byteIndex = 0;\n\t\t\n\t\tfor (var col = this.moduleCount - 1; col > 0; col -= 2) {\n\t\n\t\t\tif (col === 6) col--;\n\t\n\t\t\twhile (true) {\n\t\n\t\t\t\tfor (var c = 0; c < 2; c++) {\n\t\t\t\t\t\n\t\t\t\t\tif (this.modules[row][col - c] === null) {\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar dark = false;\n\t\n\t\t\t\t\t\tif (byteIndex < data.length) {\n\t\t\t\t\t\t\tdark = ( ( (data[byteIndex] >>> bitIndex) & 1) === 1);\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tvar mask = QRUtil.getMask(maskPattern, row, col - c);\n\t\n\t\t\t\t\t\tif (mask) {\n\t\t\t\t\t\t\tdark = !dark;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tthis.modules[row][col - c] = dark;\n\t\t\t\t\t\tbitIndex--;\n\t\n\t\t\t\t\t\tif (bitIndex === -1) {\n\t\t\t\t\t\t\tbyteIndex++;\n\t\t\t\t\t\t\tbitIndex = 7;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\trow += inc;\n\t\n\t\t\t\tif (row < 0 || this.moduleCount <= row) {\n\t\t\t\t\trow -= inc;\n\t\t\t\t\tinc = -inc;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t}\n\n};\n\nQRCode.PAD0 = 0xEC;\nQRCode.PAD1 = 0x11;\n\nQRCode.createData = function(typeNumber, errorCorrectLevel, dataList) {\n\t\n\tvar rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectLevel);\n\t\n\tvar buffer = new QRBitBuffer();\n\t\n\tfor (var i = 0; i < dataList.length; i++) {\n\t\tvar data = dataList[i];\n\t\tbuffer.put(data.mode, 4);\n\t\tbuffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber) );\n\t\tdata.write(buffer);\n\t}\n\n\t// calc num max data.\n\tvar totalDataCount = 0;\n\tfor (var x = 0; x < rsBlocks.length; x++) {\n\t\ttotalDataCount += rsBlocks[x].dataCount;\n\t}\n\n\tif (buffer.getLengthInBits() > totalDataCount * 8) {\n\t\tthrow new Error(\"code length overflow. (\" + \n            buffer.getLengthInBits() + \n            \">\" +  \n            totalDataCount * 8 + \n            \")\");\n\t}\n\n\t// end code\n\tif (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {\n\t\tbuffer.put(0, 4);\n\t}\n\n\t// padding\n\twhile (buffer.getLengthInBits() % 8 !== 0) {\n\t\tbuffer.putBit(false);\n\t}\n\n\t// padding\n\twhile (true) {\n\t\t\n\t\tif (buffer.getLengthInBits() >= totalDataCount * 8) {\n\t\t\tbreak;\n\t\t}\n\t\tbuffer.put(QRCode.PAD0, 8);\n\t\t\n\t\tif (buffer.getLengthInBits() >= totalDataCount * 8) {\n\t\t\tbreak;\n\t\t}\n\t\tbuffer.put(QRCode.PAD1, 8);\n\t}\n\n\treturn QRCode.createBytes(buffer, rsBlocks);\n};\n\nQRCode.createBytes = function(buffer, rsBlocks) {\n\n\tvar offset = 0;\n\t\n\tvar maxDcCount = 0;\n\tvar maxEcCount = 0;\n\t\n\tvar dcdata = new Array(rsBlocks.length);\n\tvar ecdata = new Array(rsBlocks.length);\n\t\n\tfor (var r = 0; r < rsBlocks.length; r++) {\n\n\t\tvar dcCount = rsBlocks[r].dataCount;\n\t\tvar ecCount = rsBlocks[r].totalCount - dcCount;\n\n\t\tmaxDcCount = Math.max(maxDcCount, dcCount);\n\t\tmaxEcCount = Math.max(maxEcCount, ecCount);\n\t\t\n\t\tdcdata[r] = new Array(dcCount);\n\t\t\n\t\tfor (var i = 0; i < dcdata[r].length; i++) {\n\t\t\tdcdata[r][i] = 0xff & buffer.buffer[i + offset];\n\t\t}\n\t\toffset += dcCount;\n\t\t\n\t\tvar rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);\n\t\tvar rawPoly = new QRPolynomial(dcdata[r], rsPoly.getLength() - 1);\n\n\t\tvar modPoly = rawPoly.mod(rsPoly);\n\t\tecdata[r] = new Array(rsPoly.getLength() - 1);\n\t\tfor (var x = 0; x < ecdata[r].length; x++) {\n            var modIndex = x + modPoly.getLength() - ecdata[r].length;\n\t\t\tecdata[r][x] = (modIndex >= 0)? modPoly.get(modIndex) : 0;\n\t\t}\n\n\t}\n\t\n\tvar totalCodeCount = 0;\n\tfor (var y = 0; y < rsBlocks.length; y++) {\n\t\ttotalCodeCount += rsBlocks[y].totalCount;\n\t}\n\n\tvar data = new Array(totalCodeCount);\n\tvar index = 0;\n\n\tfor (var z = 0; z < maxDcCount; z++) {\n\t\tfor (var s = 0; s < rsBlocks.length; s++) {\n\t\t\tif (z < dcdata[s].length) {\n\t\t\t\tdata[index++] = dcdata[s][z];\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (var xx = 0; xx < maxEcCount; xx++) {\n\t\tfor (var t = 0; t < rsBlocks.length; t++) {\n\t\t\tif (xx < ecdata[t].length) {\n\t\t\t\tdata[index++] = ecdata[t][xx];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn data;\n\n};\n\nmodule.exports = QRCode;\n","var QRCode = require('./../vendor/QRCode'),\n    QRErrorCorrectLevel = require('./../vendor/QRCode/QRErrorCorrectLevel'),\n    black = \"\\x1b[40m  \\x1b[0m\",\n    white = \"\\x1b[47m  \\x1b[0m\",\n    toCell = function (isBlack) {\n        return isBlack ? black : white;\n    },\n    repeat = function (color) {\n        return {\n            times: function (count) {\n                return new Array(count).join(color);\n            }\n        };\n    },\n    fill = function(length, value) {\n        var arr = new Array(length);\n        for (var i = 0; i < length; i++) {\n            arr[i] = value;\n        }\n        return arr;\n    };\n\nmodule.exports = {\n\n    error: QRErrorCorrectLevel.L,\n\n    generate: function (input, opts, cb) {\n        if (typeof opts === 'function') {\n            cb = opts;\n            opts = {};\n        }\n\n        var qrcode = new QRCode(-1, this.error);\n        qrcode.addData(input);\n        qrcode.make();\n\n        var output = '';\n        if (opts && opts.small) {\n            var BLACK = true, WHITE = false;\n            var moduleCount = qrcode.getModuleCount();\n            var moduleData = qrcode.modules.slice();\n\n            var oddRow = moduleCount % 2 === 1;\n            if (oddRow) {\n                moduleData.push(fill(moduleCount, WHITE));\n            }\n\n            var platte= {\n                WHITE_ALL: '\\u2588',\n                WHITE_BLACK: '\\u2580',\n                BLACK_WHITE: '\\u2584',\n                BLACK_ALL: ' ',\n            };\n\n            var borderTop = repeat(platte.BLACK_WHITE).times(moduleCount + 3);\n            var borderBottom = repeat(platte.WHITE_BLACK).times(moduleCount + 3);\n            output += borderTop + '\\n';\n\n            for (var row = 0; row < moduleCount; row += 2) {\n                output += platte.WHITE_ALL;\n\n                for (var col = 0; col < moduleCount; col++) {\n                    if (moduleData[row][col] === WHITE && moduleData[row + 1][col] === WHITE) {\n                        output += platte.WHITE_ALL;\n                    } else if (moduleData[row][col] === WHITE && moduleData[row + 1][col] === BLACK) {\n                        output += platte.WHITE_BLACK;\n                    } else if (moduleData[row][col] === BLACK && moduleData[row + 1][col] === WHITE) {\n                        output += platte.BLACK_WHITE;\n                    } else {\n                        output += platte.BLACK_ALL;\n                    }\n                }\n\n                output += platte.WHITE_ALL + '\\n';\n            }\n\n            if (!oddRow) {\n                output += borderBottom;\n            }\n        } else {\n            var border = repeat(white).times(qrcode.getModuleCount() + 3);\n\n            output += border + '\\n';\n            qrcode.modules.forEach(function (row) {\n                output += white;\n                output += row.map(toCell).join(''); \n                output += white + '\\n';\n            });\n            output += border;\n        }\n\n        if (cb) cb(output);\n        else console.log(output);\n    },\n\n    setErrorLevel: function (error) {\n        this.error = QRErrorCorrectLevel[error] || this.error;\n    }\n\n};\n","import { execFileSync } from \"node:child_process\";\nimport { LAUNCHD_LABEL } from \"./constants\";\n\n/**\n * All known launchd labels this project has shipped (or might ship). The\n * conflict check scans for *loaded* labels OTHER than the one about to run.\n */\nexport const KNOWN_STREAMER_LABELS = [\n  \"com.ronen.threadbase\",\n  \"homebrew.mxcl.tb-streamer\",\n  \"com.threadbase.streamer\",\n] as const;\n\n/** Legacy label pattern: `com.threadbase.streamer*` (e.g. `com.threadbase.streamer.1`). */\nconst LEGACY_PATTERN = /^com\\.threadbase\\.streamer/;\n\nfunction uidScope(): string {\n  return `gui/${process.getuid?.() ?? 501}`;\n}\n\n/**\n * Resolves the launchd label THIS process will operate on (the same label\n * `resolveLoadedLabel` in `launchd.ts` returns). Duplicated here to avoid a\n * cyclic import; the canonical resolver lives in launchd.ts.\n */\nfunction resolveOwnLabel(): string {\n  if (process.env.LAUNCHD_LABEL) return process.env.LAUNCHD_LABEL;\n  try {\n    execFileSync(\"launchctl\", [\"print\", `${uidScope()}/homebrew.mxcl.tb-streamer`], {\n      stdio: \"ignore\",\n    });\n    return \"homebrew.mxcl.tb-streamer\";\n  } catch {\n    return LAUNCHD_LABEL;\n  }\n}\n\nfunction isLabelLoaded(label: string): boolean {\n  try {\n    execFileSync(\"launchctl\", [\"list\", label], { stdio: \"ignore\" });\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nexport type ConflictInfo = {\n  label: string;\n  resolution: \"bootout\" | \"uninstall-homebrew\";\n};\n\n/**\n * Scans for Threadbase streamer launchd agents OTHER than the one this\n * process will operate on. Returns an array of loaded conflicting labels\n * with a suggested resolution.\n *\n * On non-macOS platforms, returns an empty array (no launchd).\n */\nexport function detectConflictingAgents(): ConflictInfo[] {\n  if (process.platform !== \"darwin\") return [];\n\n  const ownLabel = resolveOwnLabel();\n  const conflicts: ConflictInfo[] = [];\n\n  for (const label of KNOWN_STREAMER_LABELS) {\n    if (label === ownLabel) continue;\n    if (isLabelLoaded(label)) {\n      conflicts.push({\n        label,\n        resolution: label === \"homebrew.mxcl.tb-streamer\" ? \"uninstall-homebrew\" : \"bootout\",\n      });\n    }\n  }\n\n  // Scan for legacy variants (com.threadbase.streamer.N, etc.) via launchctl list\n  try {\n    const out = execFileSync(\"launchctl\", [\"list\"], {\n      stdio: [\"ignore\", \"pipe\", \"ignore\"],\n    }).toString();\n    for (const line of out.split(\"\\n\")) {\n      const parts = line.trim().split(/\\s+/);\n      const label = parts[2];\n      if (!label) continue;\n      if (\n        LEGACY_PATTERN.test(label) &&\n        label !== ownLabel &&\n        !conflicts.some((c) => c.label === label)\n      ) {\n        conflicts.push({ label, resolution: \"bootout\" });\n      }\n    }\n  } catch {\n    // launchctl list failed — can't scan for legacy\n  }\n\n  return conflicts;\n}\n\n/**\n * Formats a user-friendly message explaining the conflict and how to resolve it.\n */\nexport function formatConflictMessage(conflicts: ConflictInfo[]): string {\n  if (conflicts.length === 0) return \"\";\n\n  const lines = [\"Conflicting Threadbase streamer agents detected:\", \"\"];\n\n  for (const c of conflicts) {\n    if (c.resolution === \"uninstall-homebrew\") {\n      lines.push(\n        `  • ${c.label} — run: brew services stop tb-streamer && brew uninstall tb-streamer`,\n      );\n    } else {\n      lines.push(`  • ${c.label} — run: launchctl bootout gui/$(id -u)/${c.label}`);\n    }\n  }\n\n  lines.push(\n    \"\",\n    \"Only one Threadbase streamer can bind port 8766. Remove the conflicting agent(s) to proceed.\",\n  );\n\n  return lines.join(\"\\n\");\n}\n","import { execFileSync } from \"node:child_process\";\nimport { LAUNCHD_LABEL, logPaths } from \"./constants\";\n\n// launchd label Homebrew registers for `brew services start tb-streamer`,\n// distinct from the deploy.sh LAUNCHD_LABEL. A brew prod install must be\n// detected at runtime so the prod/dev coordination targets the live service.\nconst BREW_LAUNCHD_LABEL = \"homebrew.mxcl.tb-streamer\";\n\nfunction uidScope(): string {\n  return `gui/${process.getuid?.() ?? 501}`;\n}\n\n// Resolves which launchd label the prod/dev machinery should operate on:\n// LAUNCHD_LABEL env override → the brew label if its service is loaded →\n// the deploy.sh default. The brew probe runs only when no env override pins a\n// label, so a deploy.sh install never pays for it. Mirrors the async\n// resolveDarwinLabel in src/updater/restart.ts (this side is sync because the\n// lifecycle wrappers use execFileSync).\nfunction resolveLoadedLabel(): string {\n  if (process.env.LAUNCHD_LABEL) return process.env.LAUNCHD_LABEL;\n  try {\n    execFileSync(\"launchctl\", [\"print\", `${uidScope()}/${BREW_LAUNCHD_LABEL}`], {\n      stdio: \"ignore\",\n    });\n    return BREW_LAUNCHD_LABEL;\n  } catch {\n    return LAUNCHD_LABEL;\n  }\n}\n\nfunction fullTarget(): string {\n  return `${uidScope()}/${resolveLoadedLabel()}`;\n}\n\nexport function isAgentLoaded(): boolean {\n  try {\n    execFileSync(\"launchctl\", [\"list\", resolveLoadedLabel()], { stdio: \"ignore\" });\n    return true;\n  } catch {\n    return false;\n  }\n}\n\n// Bootout is async on macOS: launchctl returns immediately but the launchd\n// domain may still be tearing down the service when the command exits.\n// Poll up to `timeoutMs` for isAgentLoaded() to flip false so callers can\n// safely bootstrap a fresh copy without hitting the \"service already exists\"\n// race that returns exit 5 from `launchctl bootstrap`.\nexport function bootoutAgent(timeoutMs = 2000): void {\n  try {\n    execFileSync(\"launchctl\", [\"bootout\", fullTarget()], { stdio: \"ignore\" });\n  } catch {\n    // already unloaded — fine\n  }\n  const deadline = Date.now() + timeoutMs;\n  // Park the thread for 50 ms between polls. A busy-wait pegs a core for\n  // the whole deadline; Atomics.wait yields without forking `sleep`.\n  const park = new Int32Array(new SharedArrayBuffer(4));\n  while (isAgentLoaded() && Date.now() < deadline) {\n    Atomics.wait(park, 0, 0, 50);\n  }\n}\n\n// Bootstrap is idempotent in intent — re-running it when the service is\n// already loaded should be a no-op, but launchctl returns exit 5\n// (\"Input/output error\") instead of 0. Catch that specific case so callers\n// like `prod restart` can race-recover gracefully. Other failures (bad\n// plist, permission denied, etc.) still throw with stderr attached.\n//\n// The `afterBootout` flag controls tolerance for exit 5 + empty stderr:\n// callers that just ran bootoutAgent() pass `true` — the \"already loaded\"\n// race is benign there. Callers bootstrapping cold (no prior bootout) should\n// leave it false/absent so a stale agent isn't silently treated as success.\nexport function bootstrapAgent(plistPath: string, opts?: { afterBootout?: boolean }): void {\n  try {\n    execFileSync(\"launchctl\", [\"bootstrap\", uidScope(), plistPath], {\n      stdio: [\"ignore\", \"ignore\", \"pipe\"],\n    });\n  } catch (err) {\n    const e = err as NodeJS.ErrnoException & {\n      status?: number | null;\n      stderr?: Buffer | string;\n    };\n    const stderr = (e.stderr?.toString?.() ?? \"\").trim();\n    // Exit 5 + \"already\" in stderr → service is already loaded with the\n    // intended plist. Treat as success; the goal state matches the actual.\n    if (e.status === 5 && /already|loaded|in progress/i.test(stderr)) return;\n    // Exit 5 with empty stderr (newer launchctl versions) → only accept when\n    // the caller just ran bootoutAgent and the loaded state is from a race.\n    // Without the flag, exit 5 + empty stderr could hide a real failure when\n    // a stale agent is still loaded.\n    if (e.status === 5 && stderr === \"\" && opts?.afterBootout && isAgentLoaded()) return;\n    if (stderr) (e as Error).message = `launchctl bootstrap failed: ${stderr}`;\n    throw e;\n  }\n}\n\nexport function kickstartAgent(): void {\n  execFileSync(\"launchctl\", [\"kickstart\", \"-k\", fullTarget()], { stdio: \"ignore\" });\n}\n\n/**\n * Absolute path to the LaunchAgents plist for the currently-loaded service\n * (brew or deploy.sh). `prod restart` re-bootstraps from this path, so it must\n * resolve the label BEFORE booting the agent out — once unloaded, the probe\n * would no longer detect a brew service.\n */\nexport function darwinPlistPath(): string {\n  return `${process.env.HOME}/Library/LaunchAgents/${resolveLoadedLabel()}.plist`;\n}\n\n/**\n * Returns the absolute paths to the streamer's stdout/stderr log files. These\n * match the StandardOutPath / StandardErrorPath written by `scripts/deploy.sh`\n * into the launchd plist: `$INSTALL_DIR/logs/{stdout,stderr}.log`.\n */\nexport function getLogPaths(): { stdout: string; stderr: string } {\n  return logPaths();\n}\n\n/** Returns the current PID of the supervised agent, or null. */\nexport function getAgentPid(): number | null {\n  try {\n    const out = execFileSync(\"launchctl\", [\"list\"], {\n      stdio: [\"ignore\", \"pipe\", \"ignore\"],\n    }).toString();\n    const label = resolveLoadedLabel();\n    for (const line of out.split(\"\\n\")) {\n      const parts = line.trim().split(/\\s+/);\n      if (parts[2] === label) {\n        const pid = Number.parseInt(parts[0] ?? \"\", 10);\n        return Number.isFinite(pid) && pid > 0 ? pid : null;\n      }\n    }\n    return null;\n  } catch {\n    return null;\n  }\n}\n","import { z } from \"zod\";\n\nexport const MarkerSchema = z.object({\n  devPid: z.number().int().positive(),\n  port: z.number().int().positive(),\n  repoToplevel: z.string().min(1),\n  suspendedAt: z.string().datetime(),\n  userHeld: z.boolean(),\n  shimVersion: z.literal(1),\n});\n\nexport type Marker = z.infer<typeof MarkerSchema>;\n","import { existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\nimport { getLogger } from \"../logger\";\nimport { markerPath } from \"./constants\";\nimport { type Marker, MarkerSchema } from \"./marker-schema\";\n\nconst log = getLogger(\"lifecycle.marker\");\n\nexport function readMarker(): Marker | null {\n  if (!existsSync(markerPath())) return null;\n  try {\n    const raw = readFileSync(markerPath(), \"utf8\");\n    const parsed = JSON.parse(raw);\n    return MarkerSchema.parse(parsed);\n  } catch (err) {\n    log.warn(`marker at ${markerPath()} is malformed; treating as absent`, {\n      error: err instanceof Error ? err.message : String(err),\n    });\n    return null;\n  }\n}\n\nexport function writeMarker(marker: Marker): void {\n  MarkerSchema.parse(marker);\n  mkdirSync(dirname(markerPath()), { recursive: true });\n  const tmp = `${markerPath()}.tmp`;\n  writeFileSync(tmp, `${JSON.stringify(marker, null, 2)}\\n`, { mode: 0o600 });\n  renameSync(tmp, markerPath());\n}\n\nexport function clearMarker(): void {\n  if (existsSync(markerPath())) rmSync(markerPath());\n}\n","import { execFileSync } from \"node:child_process\";\nimport { logPaths, TASK_NAME } from \"./constants\";\n\n/**\n * Windows backend for the Supervisor interface. Wraps Windows Task Scheduler\n * cmdlets via powershell.exe. Counterpart of launchd.ts for macOS.\n *\n * Task Scheduler has no equivalent of launchd's KeepAlive: SuccessfulExit=false,\n * so the marker-suppression mechanism (used by the shim on macOS) is not needed\n * here. When dev exits cleanly, the prod task simply remains stopped until\n * `tb-streamer prod start` (or system reboot, if the task is at-logon-triggered).\n */\nfunction ps(command: string): string {\n  return execFileSync(\"powershell.exe\", [\"-NoProfile\", \"-NonInteractive\", \"-Command\", command], {\n    stdio: [\"ignore\", \"pipe\", \"ignore\"],\n  }).toString();\n}\n\nfunction psSafe(command: string): void {\n  try {\n    ps(command);\n  } catch {\n    // Intentionally swallowed — caller is one of the stop/disable variants where\n    // \"already gone\" is the desired state.\n  }\n}\n\nexport function isAgentLoaded(): boolean {\n  try {\n    ps(`Get-ScheduledTask -TaskName '${TASK_NAME}' -ErrorAction Stop | Out-Null`);\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nexport function bootoutAgent(): void {\n  // Stop running instance + disable trigger. Mirrors macOS bootout semantics:\n  // the task stays registered but will not run again until bootstrap.\n  psSafe(`Stop-ScheduledTask -TaskName '${TASK_NAME}' -ErrorAction SilentlyContinue`);\n  psSafe(`Disable-ScheduledTask -TaskName '${TASK_NAME}' -ErrorAction SilentlyContinue | Out-Null`);\n}\n\nexport function bootstrapAgent(_specPath: string, _opts?: { afterBootout?: boolean }): void {\n  // _specPath is the plist path on macOS; ignored on Windows because the task\n  // is already registered by scripts\\deploy.ps1 setup. The caller is asking\n  // us to re-enable + start it. _opts.afterBootout is macOS-specific (exit 5\n  // race tolerance) and has no effect here.\n  ps(`Enable-ScheduledTask -TaskName '${TASK_NAME}' -ErrorAction Stop | Out-Null`);\n  ps(`Start-ScheduledTask -TaskName '${TASK_NAME}' -ErrorAction Stop`);\n}\n\nexport function kickstartAgent(): void {\n  psSafe(`Stop-ScheduledTask -TaskName '${TASK_NAME}' -ErrorAction SilentlyContinue`);\n  ps(`Start-ScheduledTask -TaskName '${TASK_NAME}' -ErrorAction Stop`);\n}\n\n/**\n * Returns the absolute paths to the streamer's stdout/stderr log files.\n *\n * Task Scheduler has no native stdout/stderr redirection, so the launch.cmd\n * generated by scripts/deploy.ps1 carries it as cmd `>>` targets. Those targets\n * are these paths — both sides read them from `logPaths()`, which is what keeps\n * the launcher and `prod logs` from drifting apart.\n */\nexport function getLogPaths(): { stdout: string; stderr: string } {\n  return logPaths();\n}\n\nexport function getAgentPid(): number | null {\n  // Task Scheduler does not expose the running PID directly. WMI is the\n  // best-available probe: find node.exe processes whose command line\n  // mentions \"cli.js serve\". Returns the first match, or null.\n  try {\n    const out = ps(\n      `(Get-CimInstance Win32_Process -Filter \"Name='node.exe'\" ` +\n        `| Where-Object { $_.CommandLine -like '*cli.js*serve*' } ` +\n        `| Select-Object -First 1 -ExpandProperty ProcessId)`,\n    ).trim();\n    const n = Number.parseInt(out, 10);\n    return Number.isFinite(n) && n > 0 ? n : null;\n  } catch {\n    return null;\n  }\n}\n","import * as launchd from \"./launchd\";\nimport * as taskScheduler from \"./task-scheduler\";\n\nexport interface Supervisor {\n  /** True if the platform service supervisor knows about our service. */\n  isAgentLoaded(): boolean;\n  /** Stop & unload the supervised service. Idempotent. */\n  bootoutAgent(): void;\n  /**\n   * Re-load the supervised service from its on-disk definition.\n   * macOS: `launchctl bootstrap gui/<uid> <plist>` — `specPath` is the plist path.\n   * Windows: `Enable-ScheduledTask` — `specPath` is ignored (the task is already registered).\n   *\n   * @param opts.afterBootout - If true, tolerate exit 5 + empty stderr when\n   *   isAgentLoaded() is true. Set this when calling bootstrap immediately\n   *   after bootoutAgent() where the \"already loaded\" race is benign.\n   */\n  bootstrapAgent(specPath: string, opts?: { afterBootout?: boolean }): void;\n  /** Restart the service (stop+start). */\n  kickstartAgent(): void;\n  /** PID of the running supervised service, or null. */\n  getAgentPid(): number | null;\n  /**\n   * Absolute paths to the stdout/stderr log files for the supervised service.\n   * Both backends return `logPaths()`; what differs is who fills those files —\n   * the plist's StandardOutPath on macOS, launch.cmd's `>>` on Windows.\n   */\n  getLogPaths(): { stdout: string; stderr: string };\n}\n\nexport function getSupervisor(): Supervisor {\n  if (process.platform === \"darwin\") {\n    return launchd;\n  }\n  if (process.platform === \"win32\") {\n    return taskScheduler;\n  }\n  throw new Error(`lifecycle: unsupported platform ${process.platform}. Supported: darwin, win32.`);\n}\n","// Preflight guard for the better-sqlite3 native binary.\n//\n// better-sqlite3 ships a compiled `.node` addon tied to a specific Node ABI\n// (NODE_MODULE_VERSION). When the installed binary was built against a\n// different Node than the one running (a stale node_modules after a Node\n// upgrade or branch switch — `git pull` does NOT rebuild native modules), the\n// module throws at open time. The server used to catch that and silently run\n// *without* the SQLite cache, which turns every /api/conversations,\n// /api/conversations/count and /project-chats request into a 500 with no\n// obvious cause. Fail loudly at startup instead.\n\nconst REBUILD_HINT = \"npm rebuild better-sqlite3\";\n\n/** Thrown when the installed better-sqlite3 binary can't load under this Node. */\nexport class SqliteAbiError extends Error {\n  constructor(cause: string) {\n    super(\n      `better-sqlite3 native module failed to load — likely a Node ABI mismatch ` +\n        `(node_modules was built against a different Node version).\\n` +\n        `  Running Node: ${process.version} (NODE_MODULE_VERSION ${process.versions.modules})\\n` +\n        `  Fix: ${REBUILD_HINT}\\n` +\n        `  (or 'npm ci' after any dependency-affecting pull)\\n` +\n        `  Underlying error: ${cause}`,\n    );\n    this.name = \"SqliteAbiError\";\n  }\n}\n\n// The ABI-mismatch error text better-sqlite3 surfaces from the native loader.\nconst ABI_MARKERS = [\"NODE_MODULE_VERSION\", \"was compiled against a different Node.js version\"];\n\n/** True when an error message looks like a better-sqlite3 native ABI mismatch. */\nexport function isAbiMismatch(message: string): boolean {\n  return ABI_MARKERS.some((m) => message.includes(m));\n}\n\n/**\n * Load better-sqlite3 and open a throwaway in-memory DB. Returns normally when\n * the native binary is usable under the current Node. Throws {@link SqliteAbiError}\n * on an ABI mismatch; rethrows anything else unchanged.\n */\nexport function checkSqliteAbi(): void {\n  try {\n    // Require lazily so a broken binary surfaces here, not at import time.\n    const Database = require(\"better-sqlite3\") as typeof import(\"better-sqlite3\");\n    const db = new Database(\":memory:\");\n    db.close();\n  } catch (err) {\n    const message = err instanceof Error ? err.message : String(err);\n    if (isAbiMismatch(message)) {\n      throw new SqliteAbiError(message);\n    }\n    throw err;\n  }\n}\n","import { statSync, truncateSync } from \"node:fs\";\nimport { logPaths } from \"./constants\";\n\n/**\n * Size above which a supervised log file is emptied at boot. Nothing else\n * bounds these files: the plist/unit/task points StandardOutPath straight at\n * them, there is no logrotate or newsyslog entry, and none is wanted — see\n * `truncateOversizedLogs` for why rotation-by-rename cannot work here.\n */\nexport const LOG_CAP_BYTES = 32 * 1024 * 1024;\n\n/**\n * Empty every supervised log file larger than `maxBytes`, returning the paths\n * actually truncated.\n *\n * **Truncate, never rename or unlink.** The supervisor holds the descriptor via\n * StandardOutPath/StandardError, so replacing the inode leaves the daemon\n * writing to an unlinked file that nobody can read and the visible one frozen\n * at zero. `truncate(2)` keeps the inode, which is why it is the only move\n * available.\n *\n * **Boot is the only safe moment.** `truncate(2)` resets the inode size but not\n * any open writer's seek offset, so emptying a live daemon's log leaves its next\n * write landing at the old offset with the kernel filling 0..N with NULs (the\n * sparse-log bug in docs/BACKLOG.md). Here the calling process has written\n * nothing yet, so its own fd is still at offset 0 and no gap can form. The one\n * window that remains is a previous process still dying with a high offset on\n * its own descriptor; `kickstart -k` kills it first, so the overlap is brief and\n * only reachable on the rare boot that finds the file already over the cap.\n *\n * Best-effort by design: a log that cannot be stat'd or truncated — missing,\n * unreadable, locked on Windows — must never stop the server from booting.\n *\n * ponytail: bounds growth across restarts only; an instance that runs for months\n * without one still grows unbounded. Upgrade path is a periodic size check on\n * the same truncate-in-place call, or a pino transport owning its own file —\n * note the latter leaves real stdout (uncaught stacks, node warnings, PTY noise)\n * still unrotated, so it does not replace this on its own.\n */\nexport function truncateOversizedLogs(\n  maxBytes: number = LOG_CAP_BYTES,\n  paths: string[] = Object.values(logPaths()),\n): string[] {\n  const truncated: string[] = [];\n  for (const file of paths) {\n    try {\n      if (statSync(file).size <= maxBytes) continue;\n      truncateSync(file, 0);\n      truncated.push(file);\n    } catch {\n      // Never fatal at boot.\n    }\n  }\n  return truncated;\n}\n","import { stdin, stdout } from \"node:process\";\nimport { createInterface } from \"node:readline/promises\";\n\nexport type PromptResult =\n  | { choice: \"replace-prod\"; remember: boolean }\n  | { choice: \"use-port\"; port: number; remember: boolean };\n\nexport type PromptFn = (opts: {\n  prodPort: number;\n  suggestedAltPort: number;\n  prodActive: boolean;\n  portTaken: boolean;\n}) => Promise<PromptResult>;\n\nexport const interactivePrompt: PromptFn = async ({ prodPort, suggestedAltPort, prodActive }) => {\n  const rl = createInterface({ input: stdin, output: stdout });\n  try {\n    // portTaken is always true here — resolveDevPlan only reaches this prompt\n    // when the requested port is actually held. prodActive distinguishes\n    // whether the supervised prod streamer is the one holding it — bootout\n    // (the \"r\" option) only helps in that case, so an unrelated process\n    // holding the port skips straight to the alt-port question.\n    if (!prodActive) {\n      stdout.write(\n        `\\nPort ${prodPort} is already in use by another process.\\n` +\n          `Running dev on port ${suggestedAltPort} instead.\\n`,\n      );\n      const rememberAns = (await rl.question(\"Remember this choice for this repo? [y/N]: \"))\n        .trim()\n        .toLowerCase();\n      return {\n        choice: \"use-port\",\n        port: suggestedAltPort,\n        remember: rememberAns === \"y\" || rememberAns === \"yes\",\n      };\n    }\n\n    stdout.write(\n      `\\nThe supervised prod streamer is already holding port ${prodPort}.\\n` +\n        `  [r] Stop prod and take port ${prodPort}\\n` +\n        `  [p] Run dev on port ${suggestedAltPort} instead\\n`,\n    );\n    const choiceAns = (await rl.question(\"Choice [r/p]: \")).trim().toLowerCase();\n    const rememberAns = (await rl.question(\"Remember this choice for this repo? [y/N]: \"))\n      .trim()\n      .toLowerCase();\n    const remember = rememberAns === \"y\" || rememberAns === \"yes\";\n\n    if (choiceAns === \"r\") {\n      return { choice: \"replace-prod\", remember };\n    }\n    return { choice: \"use-port\", port: suggestedAltPort, remember };\n  } finally {\n    rl.close();\n  }\n};\n\nexport type PermissionModePromptFn = () => Promise<\"acceptEdits\" | \"manual\">;\n\nexport const interactivePermissionModePrompt: PermissionModePromptFn = async () => {\n  const rl = createInterface({ input: stdin, output: stdout });\n  try {\n    stdout.write(\n      \"\\nWhich permission mode should spawned Claude Code sessions use?\\n\" +\n        \"  [a] acceptEdits — auto-approve file edits, still prompt for shell commands (default)\\n\" +\n        \"  [m] manual — prompt for every edit and command\\n\",\n    );\n    const ans = (await rl.question(\"Choice [a/m] (default a): \")).trim().toLowerCase();\n    return ans === \"m\" ? \"manual\" : \"acceptEdits\";\n  } finally {\n    rl.close();\n  }\n};\n\nexport type AutoResumePromptFn = () => Promise<boolean>;\n\n/**\n * The one-time question behind auto-resume on boot (plan Phase 7b).\n *\n * Asked at most once per machine: both answers are persisted, so the next boot\n * finds the key present and stays quiet. Defaults to **no** on an empty line,\n * because this is the one setting that lets the streamer start an agent nobody\n * asked for in that moment — and with a bypass permission mode that is\n * unattended arbitrary code execution. Silence must never enable it.\n */\nexport const interactiveAutoResumePrompt: AutoResumePromptFn = async () => {\n  const rl = createInterface({ input: stdin, output: stdout });\n  try {\n    stdout.write(\n      \"\\nResume interrupted sessions automatically when the streamer starts?\\n\" +\n        \"  [n] No — show them in the list and let me tap to resume (default)\\n\" +\n        \"  [y] Yes — re-attach them automatically on boot\\n\\n\" +\n        \"Note: yes means agents can start without you present, including after a reboot.\\n\",\n    );\n    const ans = (await rl.question(\"Choice [y/N]: \")).trim().toLowerCase();\n    return ans === \"y\" || ans === \"yes\";\n  } finally {\n    rl.close();\n  }\n};\n","import { existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\nimport { z } from \"zod\";\nimport { getLogger } from \"../logger\";\nimport { prefsPath } from \"./constants\";\n\nconst log = getLogger(\"lifecycle.prefs\");\n\nexport const PrefsSchema = z.object({\n  repos: z.record(\n    z.string(),\n    z.object({\n      choice: z.enum([\"replace-prod\", \"use-port\"]),\n      port: z.number().int().positive().optional(),\n      rememberedAt: z.string().datetime(),\n    }),\n  ),\n});\n\nexport type Prefs = z.infer<typeof PrefsSchema>;\nexport type RepoChoice = { choice: \"replace-prod\" } | { choice: \"use-port\"; port: number };\n\nexport function readPrefs(): Prefs {\n  const path = prefsPath();\n  if (!existsSync(path)) return { repos: {} };\n  try {\n    return PrefsSchema.parse(JSON.parse(readFileSync(path, \"utf8\")));\n  } catch (err) {\n    log.warn(`prefs at ${path} are malformed; treating as empty`, {\n      error: err instanceof Error ? err.message : String(err),\n    });\n    return { repos: {} };\n  }\n}\n\nfunction savePrefs(p: Prefs): void {\n  const path = prefsPath();\n  mkdirSync(dirname(path), { recursive: true });\n  const tmp = `${path}.tmp`;\n  writeFileSync(tmp, `${JSON.stringify(p, null, 2)}\\n`, { mode: 0o600 });\n  renameSync(tmp, path);\n}\n\nexport function writePrefForRepo(repoToplevel: string, choice: RepoChoice): void {\n  const p = readPrefs();\n  p.repos[repoToplevel] = {\n    ...choice,\n    rememberedAt: new Date().toISOString(),\n  };\n  savePrefs(p);\n}\n\nexport function getPrefForRepo(repoToplevel: string | null) {\n  if (!repoToplevel) return null;\n  return readPrefs().repos[repoToplevel] ?? null;\n}\n\nexport function forgetRepo(repoToplevel: string): void {\n  const p = readPrefs();\n  delete p.repos[repoToplevel];\n  savePrefs(p);\n}\n\nexport function forgetAll(): void {\n  const path = prefsPath();\n  if (existsSync(path)) rmSync(path);\n}\n","import { createServer } from \"node:net\";\nimport { getLogger } from \"../logger\";\nimport { readMarker, writeMarker } from \"./marker\";\nimport { getSupervisor } from \"./platform\";\nimport { forgetAll, forgetRepo, getPrefForRepo, writePrefForRepo } from \"./prefs\";\nimport type { PromptFn } from \"./prompt\";\n\nconst log = getLogger(\"lifecycle.dev-takeover\");\n\nexport type DevPlan = { kind: \"use-port\"; port: number } | { kind: \"replace-prod\"; port: number };\n\nexport type ResolveDevPlanOpts = {\n  requestedPort: number;\n  replaceProd: boolean;\n  forget: boolean;\n  forgetAll: boolean;\n  repoToplevel: string | null;\n  isProdActive: () => boolean;\n  portInUse: (port: number) => boolean;\n  prompt: PromptFn;\n  findFreePort: (start: number) => Promise<number>;\n};\n\nexport async function resolveDevPlan(opts: ResolveDevPlanOpts): Promise<DevPlan> {\n  if (opts.forgetAll) forgetAll();\n  if (opts.forget && opts.repoToplevel) forgetRepo(opts.repoToplevel);\n\n  // Explicit flag overrides everything.\n  if (opts.replaceProd) {\n    return { kind: \"replace-prod\", port: opts.requestedPort };\n  }\n\n  const prodActive = opts.isProdActive();\n  const portTaken = opts.portInUse(opts.requestedPort);\n  // Prod running on a different port than requested is not a conflict — only\n  // the requested port actually being held (by prod or anything else) is.\n  if (!portTaken) {\n    return { kind: \"use-port\", port: opts.requestedPort };\n  }\n\n  // Conflict path. Honour remembered choice if not --forget.\n  if (!opts.forget) {\n    const pref = getPrefForRepo(opts.repoToplevel);\n    if (pref) {\n      if (pref.choice === \"replace-prod\") {\n        return { kind: \"replace-prod\", port: opts.requestedPort };\n      }\n      if (pref.choice === \"use-port\" && pref.port) {\n        return { kind: \"use-port\", port: pref.port };\n      }\n    }\n  }\n\n  const suggested = await opts.findFreePort(opts.requestedPort + 1);\n  const answer = await opts.prompt({\n    prodPort: opts.requestedPort,\n    suggestedAltPort: suggested,\n    prodActive,\n    portTaken,\n  });\n\n  if (answer.remember && opts.repoToplevel) {\n    if (answer.choice === \"replace-prod\") {\n      writePrefForRepo(opts.repoToplevel, { choice: \"replace-prod\" });\n    } else {\n      writePrefForRepo(opts.repoToplevel, { choice: \"use-port\", port: answer.port });\n    }\n  }\n\n  return answer.choice === \"replace-prod\"\n    ? { kind: \"replace-prod\", port: opts.requestedPort }\n    : { kind: \"use-port\", port: answer.port };\n}\n\n// Real I/O helpers used by cli/index.ts; kept here so they're collocated.\nexport function detectProdActive(): boolean {\n  return getSupervisor().isAgentLoaded();\n}\n\nexport function isPortInUse(port: number): Promise<boolean> {\n  return new Promise((resolve) => {\n    const srv = createServer();\n    srv.once(\"error\", () => resolve(true));\n    srv.once(\"listening\", () => srv.close(() => resolve(false)));\n    srv.listen(port, \"127.0.0.1\");\n  });\n}\n\nexport function findFreePort(start: number): Promise<number> {\n  return tryBind(start, 0);\n}\n\nasync function tryBind(start: number, offset: number): Promise<number> {\n  if (offset >= 50) return start;\n  const port = start + offset;\n  const free = await new Promise<boolean>((resolve) => {\n    const srv = createServer();\n    srv.once(\"error\", () => resolve(false));\n    srv.once(\"listening\", () => srv.close(() => resolve(true)));\n    srv.listen(port, \"127.0.0.1\");\n  });\n  if (free) return port;\n  return tryBind(start, offset + 1);\n}\n\n/**\n * Acquire the prod port from launchd. Writes marker, unloads agent, installs\n * signal handlers that flip userHeld=true on clean exit (so launchd's shim\n * stays out until `tb-streamer prod start`).\n */\nfunction isPidAlive(pid: number): boolean {\n  try {\n    process.kill(pid, 0);\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nexport function takeoverProd(opts: { port: number; repoToplevel: string | null }): void {\n  const existing = readMarker();\n  if (existing) {\n    if (isPidAlive(existing.devPid)) {\n      throw new Error(\n        `prod is already suspended by dev pid ${existing.devPid} (since ${existing.suspendedAt}). ` +\n          `Stop that dev session first, or run 'tb-streamer prod doctor'.`,\n      );\n    }\n    log.info(`stale marker found (pid ${existing.devPid} is gone) — clearing and proceeding`);\n  }\n\n  getSupervisor().bootoutAgent();\n  writeMarker({\n    devPid: process.pid,\n    port: opts.port,\n    repoToplevel: opts.repoToplevel ?? \"(no-repo)\",\n    suspendedAt: new Date().toISOString(),\n    userHeld: false,\n    shimVersion: 1,\n  });\n\n  const flipUserHeld = () => {\n    const m = readMarker();\n    if (m && m.devPid === process.pid) {\n      writeMarker({ ...m, userHeld: true });\n      log.info(\n        `prod is suspended (userHeld). Run 'tb-streamer prod start' to restore the supervised instance.`,\n      );\n    }\n  };\n\n  process.on(\"SIGINT\", () => {\n    flipUserHeld();\n    process.exit(0);\n  });\n  process.on(\"SIGTERM\", () => {\n    flipUserHeld();\n    process.exit(0);\n  });\n  process.on(\"SIGHUP\", () => {\n    flipUserHeld();\n    process.exit(0);\n  });\n  process.on(\"uncaughtException\", (err) => {\n    flipUserHeld();\n    log.error(`uncaught: ${err.message}`);\n    process.exit(1);\n  });\n  process.on(\"exit\", () => {\n    flipUserHeld();\n  });\n}\n","import { execFileSync } from \"node:child_process\";\n\nexport function getGitToplevel(cwd: string): string | null {\n  try {\n    return execFileSync(\"git\", [\"rev-parse\", \"--show-toplevel\"], {\n      cwd,\n      stdio: [\"ignore\", \"pipe\", \"ignore\"],\n    })\n      .toString()\n      .trim();\n  } catch {\n    return null;\n  }\n}\n","import { relative, resolve, sep } from \"node:path\";\n\n/**\n * `tb codex` — start a streamer-managed Codex session in a directory and drive\n * it from this terminal.\n *\n * The point is not the terminal. A Codex session started from a shell is one\n * the streamer does not own: its startup gates (the directory-trust dialog, the\n * hooks-review dialog) are drawn by the TUI and never written to the rollout,\n * so nothing can forward them to a phone. Only the PTY owner can see them.\n * Starting the session through the streamer makes it managed from birth, which\n * is what puts those gates on the phone as answerable cards; attaching here is\n * what keeps it usable from the keyboard you started it at.\n *\n * Keystrokes go over HTTP rather than the socket because `POST\n * /api/sessions/:id/input` with `{ keys }` is the raw-key path mobile already\n * uses. On loopback the round trip is not worth a second transport.\n */\n\n/** Byte the local terminal sends that means \"let go\", not \"type this\". */\nconst DETACH_KEY = \"\\x1d\"; // Ctrl-]\n\nexport interface AttachSocket {\n  send(data: string): void;\n  close(): void;\n  onMessage(handler: (raw: string) => void): void;\n  onClose(handler: () => void): void;\n  onError(handler: (err: Error) => void): void;\n}\n\nexport interface AttachIO {\n  /** Terminal size, or null when stdout is not a TTY. */\n  size(): { cols: number; rows: number } | null;\n  write(data: string): void;\n  /** Put stdin in raw mode and stream it. Returns a stop function. */\n  readKeys(onKeys: (keys: string) => void): () => void;\n  /** Subscribe to terminal resizes. Returns an unsubscribe function. */\n  onResize(handler: () => void): () => void;\n  log(line: string): void;\n  error(line: string): void;\n}\n\nexport interface AttachDeps {\n  fetchFn: typeof fetch;\n  connect(url: string): Promise<AttachSocket>;\n  io: AttachIO;\n}\n\nexport interface AttachOptions {\n  /** Directory to start the session in. Absolute, already resolved. */\n  cwd: string;\n  browseRoot: string | undefined;\n  port: number;\n  apiKey: string;\n  /** Skip the terminal attach and just report the started session. */\n  detached: boolean;\n  /**\n   * Resize the session's PTY to this terminal. Off by default, and the default\n   * is the load-bearing part: `VIEWPORT_ROWS` is compiled into every mobile\n   * build already on a device, and those builds cannot be force-updated. A\n   * session resized away from the spawn geometry renders as garbage on any\n   * phone watching it — including one that never asked for a local attach.\n   * Opt in when you are driving from the terminal and not watching from a phone.\n   */\n  resize: boolean;\n}\n\n/**\n * The session start endpoint addresses projects relative to the server's\n * browse root, so a directory outside it has no name the server will accept.\n * Refuse with the reason rather than posting a path that resolves somewhere\n * else — `resolveBrowsePath` rejects traversal, so the alternative is a 400\n * whose message is about path syntax rather than about configuration.\n */\nexport function toBrowseRelativePath(\n  cwd: string,\n  browseRoot: string | undefined,\n): { ok: true; path: string } | { ok: false; reason: string } {\n  if (!browseRoot) {\n    return {\n      ok: false,\n      reason:\n        \"This streamer has no browse root configured, so it cannot start a session anywhere.\\nSet browse_root in ~/.threadbase/server.yaml (or pass --browse-root) and restart it.\",\n    };\n  }\n  const root = resolve(browseRoot);\n  const target = resolve(cwd);\n  const rel = relative(root, target);\n  if (rel.startsWith(\"..\") || resolve(root, rel) !== target) {\n    return {\n      ok: false,\n      reason: `${target} is outside this streamer's browse root (${root}).\\nRun from a directory inside it, or widen browse_root.`,\n    };\n  }\n  // \"\" is the root itself, which the server addresses as \".\".\n  return { ok: true, path: rel === \"\" ? \".\" : rel.split(sep).join(\"/\") };\n}\n\n/** Terminal dimensions to report, or null when there is nothing trustworthy. */\nfunction sizeOrNull(io: AttachIO): { cols: number; rows: number } | null {\n  const size = io.size();\n  if (!size) return null;\n  if (!Number.isInteger(size.cols) || !Number.isInteger(size.rows)) return null;\n  if (size.cols < 1 || size.rows < 1) return null;\n  return size;\n}\n\nexport async function runCodexAttach(opts: AttachOptions, deps: AttachDeps): Promise<number> {\n  const { io } = deps;\n\n  const rel = toBrowseRelativePath(opts.cwd, opts.browseRoot);\n  if (!rel.ok) {\n    io.error(rel.reason);\n    return 1;\n  }\n\n  const base = `http://localhost:${opts.port}`;\n  const headers = {\n    Authorization: `Bearer ${opts.apiKey}`,\n    \"Content-Type\": \"application/json\",\n  };\n\n  let started: Response;\n  try {\n    started = await deps.fetchFn(`${base}/api/sessions/start`, {\n      method: \"POST\",\n      headers,\n      body: JSON.stringify({ path: rel.path, provider: \"codex-cli\" }),\n    });\n  } catch (err) {\n    io.error(\n      `Could not reach the streamer on port ${opts.port}. Is it running? (tb prod status)\\n${\n        err instanceof Error ? err.message : String(err)\n      }`,\n    );\n    return 1;\n  }\n\n  const body = (await started.json().catch(() => null)) as {\n    session?: { id?: string };\n    error?: string;\n  } | null;\n\n  if (!started.ok || !body?.session?.id) {\n    io.error(body?.error ?? `Session start failed (HTTP ${started.status}).`);\n    return 1;\n  }\n  const sessionId = body.session.id;\n\n  if (opts.detached) {\n    io.log(`Started Codex session ${sessionId} in ${rel.path}`);\n    return 0;\n  }\n\n  let socket: AttachSocket;\n  try {\n    socket = await deps.connect(\n      `ws://localhost:${opts.port}/ws?key=${encodeURIComponent(opts.apiKey)}`,\n    );\n  } catch (err) {\n    io.error(\n      `Session ${sessionId} started, but the stream could not be attached: ${\n        err instanceof Error ? err.message : String(err)\n      }`,\n    );\n    return 1;\n  }\n\n  const sendResize = () => {\n    if (!opts.resize) return;\n    const size = sizeOrNull(io);\n    if (!size) return;\n    socket.send(\n      JSON.stringify({ type: \"resize_session\", sessionId, cols: size.cols, rows: size.rows }),\n    );\n  };\n\n  return await new Promise<number>((resolveExit) => {\n    let stopKeys: (() => void) | null = null;\n    let stopResize: (() => void) | null = null;\n    let settled = false;\n\n    const finish = (code: number, message?: string) => {\n      if (settled) return;\n      settled = true;\n      stopKeys?.();\n      stopResize?.();\n      socket.close();\n      if (message) io.log(message);\n      resolveExit(code);\n    };\n\n    socket.onMessage((raw) => {\n      let msg: { type?: string; sessionId?: string; data?: string; lines?: string[] };\n      try {\n        msg = JSON.parse(raw);\n      } catch {\n        return;\n      }\n      if (msg.sessionId !== sessionId) return;\n      // Replay first paints the screen the session already has; output is the\n      // live stream after it. Both are raw PTY bytes — write them through.\n      if (msg.type === \"terminal_replay\" && Array.isArray(msg.lines)) {\n        io.write(`${msg.lines.join(\"\\r\\n\")}\\r\\n`);\n        return;\n      }\n      if (msg.type === \"terminal_output\" && typeof msg.data === \"string\") {\n        io.write(msg.data);\n      }\n    });\n\n    socket.onClose(() =>\n      finish(0, \"\\r\\nStream closed. The session keeps running; reopen it from the app.\"),\n    );\n    socket.onError((err) => finish(1, `\\r\\nStream error: ${err.message}`));\n\n    socket.send(JSON.stringify({ type: \"subscribe_session\", sessionId }));\n    // Before the first output, so the session is drawn at this terminal's size\n    // rather than repainting at the spawn default a moment later.\n    sendResize();\n    stopResize = io.onResize(sendResize);\n\n    stopKeys = io.readKeys((keys) => {\n      if (keys.includes(DETACH_KEY)) {\n        finish(\n          0,\n          \"\\r\\nDetached. The session keeps running; reopen it from the app or with tb codex.\",\n        );\n        return;\n      }\n      void deps\n        .fetchFn(`${base}/api/sessions/${sessionId}/input`, {\n          method: \"POST\",\n          headers,\n          body: JSON.stringify({ keys }),\n        })\n        .catch(() => {\n          // A dropped keystroke is not worth tearing the attach down: the\n          // socket's own close/error path owns that decision.\n        });\n    });\n\n    const geometry = opts.resize\n      ? \" This terminal's size is now the session's; a phone watching it will render incorrectly.\"\n      : \"\";\n    io.log(`Attached to Codex session ${sessionId}. Ctrl-] to detach.${geometry}\\r\\n`);\n  });\n}\n","import WebSocket from \"ws\";\nimport type { AttachIO, AttachSocket } from \"./attach\";\n\n/**\n * The real terminal and socket behind `runCodexAttach`. Kept apart from the\n * flow itself so the flow is testable without a TTY: everything here either\n * touches process stdio or opens a socket, and none of it has logic worth\n * asserting on.\n */\n\nexport function createTerminalIO(): AttachIO {\n  return {\n    size() {\n      const { columns, rows } = process.stdout;\n      if (!process.stdout.isTTY || !columns || !rows) return null;\n      return { cols: columns, rows };\n    },\n    write(data) {\n      process.stdout.write(data);\n    },\n    readKeys(onKeys) {\n      const stdin = process.stdin;\n      // Raw mode is what makes this a terminal rather than a line editor: the\n      // TUI wants each keypress, including the ones readline would swallow.\n      const wasRaw = stdin.isRaw ?? false;\n      if (stdin.isTTY) stdin.setRawMode(true);\n      stdin.resume();\n      const handler = (chunk: Buffer) => onKeys(chunk.toString(\"utf8\"));\n      stdin.on(\"data\", handler);\n      return () => {\n        stdin.off(\"data\", handler);\n        if (stdin.isTTY) stdin.setRawMode(wasRaw);\n        stdin.pause();\n      };\n    },\n    onResize(handler) {\n      process.stdout.on(\"resize\", handler);\n      return () => process.stdout.off(\"resize\", handler);\n    },\n    log(line) {\n      process.stdout.write(`${line}\\n`);\n    },\n    error(line) {\n      process.stderr.write(`${line}\\n`);\n    },\n  };\n}\n\nexport function connectSocket(url: string): Promise<AttachSocket> {\n  return new Promise((resolvePromise, rejectPromise) => {\n    const ws = new WebSocket(url);\n    // Reject only until the socket is open; after that a failure is the\n    // attach's own onError, not a failed connect.\n    const onOpenError = (err: Error) => rejectPromise(err);\n    ws.once(\"error\", onOpenError);\n    ws.once(\"open\", () => {\n      ws.off(\"error\", onOpenError);\n      resolvePromise({\n        send: (data) => ws.send(data),\n        close: () => ws.close(),\n        onMessage: (handler) => ws.on(\"message\", (raw) => handler(raw.toString())),\n        onClose: (handler) => ws.on(\"close\", handler),\n        onError: (handler) => ws.on(\"error\", handler),\n      });\n    });\n  });\n}\n","import { currentServerIdentityFingerprint, serverIdentityKeyPath } from \"../src/server-identity\";\n\nexport interface IdentityDeps {\n  log: { info: (msg: string) => void; error: (msg: string) => void };\n  /** Overridable for tests; defaults to the real on-disk key. */\n  fingerprint?: () => string;\n  keyPath?: () => string;\n}\n\n/**\n * `serverIdentityPublicKey()` throws when the key file exists but can't be\n * read (src/server-identity.ts), rather than minting a replacement that would\n * silently invalidate every paired device. `/api/info` absorbs that by\n * omitting the field (misc.routes.ts) because it serves a lot else besides.\n * This command's only job is showing the key, so it does the opposite: say\n * plainly that it can't, with a non-zero exit, rather than an empty banner.\n */\nexport function runIdentity(deps: IdentityDeps): number {\n  const keyPath = (deps.keyPath ?? serverIdentityKeyPath)();\n  const fingerprint = deps.fingerprint ?? currentServerIdentityFingerprint;\n\n  let value: string;\n  try {\n    value = fingerprint();\n  } catch (err) {\n    // The thrown message from loadOrCreateServerIdentity() already names the\n    // path and the repair step (src/server-identity.ts); prefix rather than\n    // duplicate it.\n    deps.log.error(\n      `Could not read the server identity key: ${err instanceof Error ? err.message : String(err)}`,\n    );\n    return 1;\n  }\n\n  deps.log.info(formatIdentityBanner(value, keyPath));\n  return 0;\n}\n\nexport function formatIdentityBanner(fingerprint: string, keyPath: string): string {\n  return [\n    `Server identity  (X25519, ${keyPath})`,\n    \"\",\n    `  ${fingerprint}`,\n    \"\",\n    \"Compare this with the identity code your phone shows when you add this server.\",\n  ].join(\"\\n\");\n}\n","import { setApiKey } from \"../src/auth\";\n\nconst KEY_PATTERN = /^tb_[a-f0-9]{32}$/;\n\nexport interface SetKeyArgs {\n  key: string | undefined;\n}\n\nexport interface SetKeyDeps {\n  log: { info: (msg: string) => void; error: (msg: string) => void };\n  readStdin?: () => Promise<string>;\n}\n\nasync function defaultReadStdin(): Promise<string> {\n  return new Promise((resolve, reject) => {\n    const chunks: Buffer[] = [];\n    process.stdin.on(\"data\", (chunk) => chunks.push(Buffer.from(chunk)));\n    process.stdin.on(\"end\", () => resolve(Buffer.concat(chunks).toString(\"utf-8\")));\n    process.stdin.on(\"error\", reject);\n  });\n}\n\nexport async function runSetKey(args: SetKeyArgs, deps: SetKeyDeps): Promise<number> {\n  const readStdin = deps.readStdin ?? defaultReadStdin;\n\n  let key = args.key;\n  if (key === \"-\") {\n    key = (await readStdin()).trim();\n  }\n\n  if (!key || key.length === 0) {\n    deps.log.error(\"API key required. Pass as argument or via stdin with '-'.\");\n    return 1;\n  }\n\n  if (!KEY_PATTERN.test(key)) {\n    deps.log.error(\"Invalid key format. Expected: tb_<32 hex chars>\");\n    return 1;\n  }\n\n  try {\n    setApiKey(key);\n  } catch (err) {\n    deps.log.error(`Failed to write key: ${(err as Error).message}`);\n    return 1;\n  }\n\n  deps.log.info(\"API key updated.\");\n  deps.log.info(\"Restart the service to pick up the new key: brew services restart tb-streamer\");\n  return 0;\n}\n","import { randomUUID } from \"node:crypto\";\nimport { LiveSessionManager } from \"../live-session-manager\";\nimport type { Logger } from \"../logger\";\nimport { getLogger } from \"../logger\";\nimport { permissionGateKey } from \"../services/questions/detectPermissionGate\";\nimport { questionContentKey } from \"../services/questions/detectQuestionFromScreen\";\nimport type { ManagedSession, StartFreshSessionOptions, StartSessionOptions } from \"../types\";\nimport {\n  encodeMessage,\n  type HostEvent,\n  type HostHeartbeatState,\n  type HostPromptSnapshot,\n  type HostRequest,\n  type HostSession,\n  type HostTransport,\n  isHostEvent,\n  LineDecoder,\n  PTY_HOST_PROTOCOL_VERSION,\n  type ReplayResult,\n} from \"./protocol\";\n\n/**\n * The pty-host: the process that actually owns the PTYs (plan Phase 6b).\n *\n * The whole feature rests on one property — this process is not the one being\n * restarted. It holds node-pty, the ring buffer, the xterm screen, the input\n * history, the queued-input state and the prompt/gate detectors, so a streamer\n * restart costs a socket reconnect rather than every live agent.\n *\n * It is deliberately thin above `LiveSessionManager`: the runners are the same\n * ones the in-process path uses, so there is one implementation of how a\n * session is spawned and detected, not two that can drift.\n *\n * **The idle reaper runs here, not in the streamer.** That is not a detail. A\n * host whose streamer went away for good would otherwise keep every PTY alive\n * forever, and the reaper is the only bound on that.\n */\n\n/** How often to sweep for idle sessions. Mirrors the streamer's own cadence. */\nexport const HOST_IDLE_SWEEP_MS = 5 * 60 * 1000;\n\n/** Agent silence after which a settled session is released. */\nexport const HOST_IDLE_AFTER_MS = 6 * 60 * 60 * 1000;\n\nexport const HOST_HEARTBEAT_TIMEOUT_MS = 30_000;\nexport const HOST_ORPHAN_SWEEP_MS = 10_000;\n\nexport interface SessionHostOptions {\n  logger?: Logger;\n  idleSweepMs?: number;\n  idleAfterMs?: number;\n  onShutdown?: () => void;\n  heartbeatTimeoutMs?: number;\n  orphanSweepMs?: number;\n  onOrphaned?: () => void;\n}\n\nexport class SessionHost {\n  private runner: LiveSessionManager;\n  private log: Logger;\n  private subscribers = new Set<HostTransport>();\n  private decoders = new WeakMap<HostTransport, LineDecoder>();\n  /** Last time each session's agent produced output. Drives the reaper. */\n  private lastAgentChunkAt = new Map<string, number>();\n  private idleTimer: ReturnType<typeof setInterval> | null = null;\n  private idleAfterMs: number;\n  private onShutdown: (() => void) | undefined;\n  private heartbeatTimeoutMs: number;\n  private heartbeatLeases = new Map<HostTransport, number>();\n  private lastRegistryHeartbeat: (HostHeartbeatState & { at: number }) | null = null;\n  private orphanTimer: ReturnType<typeof setInterval> | null = null;\n  private onOrphaned: (() => void) | undefined;\n  private orphaned = false;\n  private promptSnapshots = new Map<string, HostPromptSnapshot>();\n\n  constructor(options: SessionHostOptions = {}) {\n    this.log = options.logger ?? getLogger(\"pty-host\");\n    this.idleAfterMs = options.idleAfterMs ?? HOST_IDLE_AFTER_MS;\n    this.onShutdown = options.onShutdown;\n    this.heartbeatTimeoutMs = options.heartbeatTimeoutMs ?? HOST_HEARTBEAT_TIMEOUT_MS;\n    this.onOrphaned = options.onOrphaned;\n\n    // Every runner callback becomes an event. The detectors run here, so a\n    // callback with no event is a feature that silently stops working.\n    this.runner = new LiveSessionManager({\n      logger: this.log,\n      onOutput: (sessionId, data) => {\n        this.lastAgentChunkAt.set(sessionId, Date.now());\n        this.emit({ type: \"event\", event: \"output\", sessionId, data });\n      },\n      onStatusChange: (session) => {\n        if (session.status === \"idle\") this.promptSnapshots.delete(session.id);\n        this.emit({ type: \"event\", event: \"status-change\", session });\n      },\n      onReady: (session) => this.emit({ type: \"event\", event: \"ready\", session }),\n      onPermissionChange: (sessionId, gate) => {\n        const prior = this.promptSnapshots.get(sessionId);\n        if (gate === null) {\n          this.promptSnapshots.delete(sessionId);\n          this.emit({\n            type: \"event\",\n            event: \"permission-change\",\n            sessionId,\n            gate,\n            ...(prior ? { occurrenceId: prior.occurrenceId } : {}),\n          });\n          return;\n        }\n        const occurrenceId =\n          prior?.kind === \"permission\" && permissionGateKey(prior.gate) === permissionGateKey(gate)\n            ? prior.occurrenceId\n            : randomUUID();\n        this.promptSnapshots.set(sessionId, {\n          kind: \"permission\",\n          sessionId,\n          occurrenceId,\n          gate,\n        });\n        this.emit({\n          type: \"event\",\n          event: \"permission-change\",\n          sessionId,\n          gate,\n          occurrenceId,\n        });\n      },\n      onPhaseChange: (sessionId, phase) =>\n        this.emit({ type: \"event\", event: \"phase-change\", sessionId, phase }),\n      onPromptSuggestionChange: (sessionId, text) =>\n        this.emit({ type: \"event\", event: \"prompt-suggestion-change\", sessionId, text }),\n      onLiveQuestion: (sessionId, questions) => {\n        const prior = this.promptSnapshots.get(sessionId);\n        const occurrenceId =\n          prior?.kind === \"question\" &&\n          questionContentKey(prior.questions) === questionContentKey(questions)\n            ? prior.occurrenceId\n            : randomUUID();\n        this.promptSnapshots.set(sessionId, {\n          kind: \"question\",\n          sessionId,\n          occurrenceId,\n          questions,\n        });\n        this.emit({ type: \"event\", event: \"live-question\", sessionId, questions, occurrenceId });\n      },\n      onLiveQuestionGone: (sessionId) => {\n        this.promptSnapshots.delete(sessionId);\n        this.emit({ type: \"event\", event: \"live-question-gone\", sessionId });\n      },\n      onUserMessage: (sessionId, text, ts) =>\n        this.emit({ type: \"event\", event: \"user-message\", sessionId, text, ts }),\n    });\n\n    this.idleTimer = setInterval(() => this.reapIdle(), options.idleSweepMs ?? HOST_IDLE_SWEEP_MS);\n    this.idleTimer.unref?.();\n    this.orphanTimer = setInterval(\n      () => this.reapOrphan(),\n      options.orphanSweepMs ?? HOST_ORPHAN_SWEEP_MS,\n    );\n    this.orphanTimer.unref?.();\n  }\n\n  /**\n   * Attach a connected streamer. Returns the disposer for its disconnect.\n   *\n   * A disconnect removes the subscriber and nothing else: the sessions stay,\n   * which is the entire point of the host existing.\n   */\n  accept(transport: HostTransport): () => void {\n    this.decoders.set(transport, new LineDecoder());\n    transport.onLine((chunk) => this.handleChunk(transport, chunk));\n    return () => {\n      this.subscribers.delete(transport);\n      this.heartbeatLeases.delete(transport);\n      this.log.info(\"[pty-host] streamer disconnected; sessions kept\", {\n        event: \"pty_host.streamer_disconnected\",\n        subscribers: this.subscribers.size,\n      });\n    };\n  }\n\n  private handleChunk(transport: HostTransport, chunk: string): void {\n    const decoder = this.decoders.get(transport);\n    if (!decoder) return;\n    for (const line of decoder.push(chunk)) {\n      let request: HostRequest;\n      try {\n        request = JSON.parse(line) as HostRequest;\n      } catch {\n        this.log.warn(\"[pty-host] dropped unparseable request\", {\n          event: \"pty_host.bad_request\",\n        });\n        continue;\n      }\n      // Events only travel host → streamer. One arriving here means a confused\n      // peer, and answering it would invent a response id that matches nothing.\n      if (isHostEvent(request as never)) continue;\n      void this.dispatch(transport, request);\n    }\n  }\n\n  private async dispatch(transport: HostTransport, request: HostRequest): Promise<void> {\n    try {\n      const result = await this.handle(transport, request);\n      transport.send(encodeMessage({ id: request.id, ok: true, result }));\n      if (request.type === \"shutdown-host\") this.onShutdown?.();\n    } catch (err) {\n      // A failure is always a response. Staying silent would leave the\n      // streamer's promise pending forever — a hung session start rather than\n      // an error it can report.\n      transport.send(\n        encodeMessage({\n          id: request.id,\n          ok: false,\n          error: err instanceof Error ? err.message : String(err),\n        }),\n      );\n    }\n  }\n\n  private async handle(transport: HostTransport, request: HostRequest): Promise<unknown> {\n    switch (request.type) {\n      case \"subscribe\":\n        this.subscribers.add(transport);\n        this.log.info(\"[pty-host] streamer subscribed\", {\n          event: \"pty_host.streamer_subscribed\",\n          subscribers: this.subscribers.size,\n        });\n        return { promptSnapshots: [...this.promptSnapshots.values()] };\n\n      case \"status\":\n        return {\n          protocolVersion: PTY_HOST_PROTOCOL_VERSION,\n          sessions: this.runner.listSessions().map((session) => this.toHostSession(session)),\n          promptSnapshots: [...this.promptSnapshots.values()],\n        };\n\n      case \"heartbeat\":\n        this.heartbeatLeases.set(transport, Date.now());\n        this.lastRegistryHeartbeat = {\n          registryState: request.registryState,\n          referencedSessionIds: [...request.referencedSessionIds],\n          at: Date.now(),\n        };\n        return {};\n\n      case \"spawn\": {\n        const session =\n          request.sessionId === null\n            ? await this.runner.startFresh(request.options as StartFreshSessionOptions)\n            : await this.runner.start(request.sessionId, {\n                ...(request.options as StartSessionOptions),\n                provider: request.provider,\n              });\n        return this.toHostSession(session);\n      }\n\n      case \"write\":\n        return this.runner.sendInput(request.sessionId, request.input);\n\n      case \"keys\":\n        this.runner.sendKeys(request.sessionId, request.keys);\n        return {};\n\n      case \"raw_keys\":\n        this.runner.sendRawKeys(request.sessionId, request.keys);\n        return {};\n\n      case \"resize\":\n        this.runner.resize(request.sessionId, request.cols, request.rows);\n        return {};\n\n      case \"cancel\":\n        this.runner.cancel(request.sessionId);\n        return {};\n\n      case \"kill\": {\n        if (\"hold\" in request && request.hold) {\n          this.runner.putOnHold(request.sessionId);\n          this.forget(request.sessionId);\n        } else if (\"pid\" in request) {\n          this.runner.killPid(request.pid);\n        }\n        return {};\n      }\n\n      case \"shutdown-host\":\n        return {};\n\n      case \"replay\": {\n        const lines = await this.runner.getOutputLines(request.sessionId, request.maxLines);\n        // The raw buffer travels too, so a reconnecting streamer's getOutput is\n        // not empty just because it missed the events that filled it.\n        return { lines, output: this.runner.getOutput(request.sessionId) } satisfies ReplayResult;\n      }\n\n      case \"input-history\":\n        return { history: this.runner.getInputHistory(request.sessionId) };\n    }\n  }\n\n  private toHostSession(session: ManagedSession): HostSession {\n    return { session, pid: this.runner.getPid(session.id) };\n  }\n\n  private emit(event: HostEvent): void {\n    const line = encodeMessage(event);\n    for (const transport of this.subscribers) {\n      try {\n        transport.send(line);\n      } catch {\n        // Reaped by its own close handler; one bad write must not silence the\n        // rest of the fan-out.\n      }\n    }\n  }\n\n  private forget(sessionId: string): void {\n    this.lastAgentChunkAt.delete(sessionId);\n    this.promptSnapshots.delete(sessionId);\n  }\n\n  /**\n   * Release PTYs whose agent has been silent past the threshold.\n   *\n   * Same rule as the streamer's own reaper — a `running` session is never\n   * touched however long the turn runs — but it lives here because this process\n   * is the one holding the fds. An abandoned host with no reaper keeps every\n   * agent alive indefinitely.\n   *\n   * Exposed so tests can drive one sweep instead of waiting on the interval.\n   */\n  reapIdle(now: number = Date.now()): string[] {\n    const reaped: string[] = [];\n    for (const session of this.runner.listSessions()) {\n      if (session.status === \"running\") continue;\n\n      const lastActive =\n        this.lastAgentChunkAt.get(session.id) ??\n        session.lastActivityAt?.getTime() ??\n        session.startedAt.getTime();\n      if (now - lastActive < this.idleAfterMs) continue;\n\n      this.log.info(`[pty-host] releasing idle PTY for ${session.id}`, {\n        event: \"pty_host.idle_reap\",\n        sessionId: session.id,\n        idleMs: now - lastActive,\n      });\n      this.runner.putOnHold(session.id);\n      this.forget(session.id);\n      this.emit({ type: \"event\", event: \"exit\", sessionId: session.id, exitCode: 0 });\n      reaped.push(session.id);\n    }\n    return reaped;\n  }\n\n  /** Session count, for the supervisor and the orphan check in PR 9. */\n  sessionCount(): number {\n    return this.runner.listSessions().length;\n  }\n\n  reapOrphan(now: number = Date.now()): boolean {\n    if (this.orphaned) return false;\n    for (const lastSeen of this.heartbeatLeases.values()) {\n      if (now - lastSeen <= this.heartbeatTimeoutMs) return false;\n    }\n    const registry = this.lastRegistryHeartbeat;\n    if (registry?.registryState !== \"known\") return false;\n    if (now - registry.at <= this.heartbeatTimeoutMs) return false;\n    if (registry.referencedSessionIds.length > 0) return false;\n    if (this.sessionCount() > 0) return false;\n\n    this.orphaned = true;\n    this.log.info(\"[pty-host] releasing unreferenced idle host\", {\n      event: \"pty_host.orphan_reap\",\n    });\n    this.onOrphaned?.();\n    return true;\n  }\n\n  /**\n   * Shut the host down, signalling its children.\n   *\n   * The opposite of `RemoteSessionRunner.dispose()`, which only drops a\n   * connection: when the *host* goes away there is nothing left to hold the\n   * fds, so leaving the agents running would orphan them with no owner.\n   */\n  dispose(): void {\n    if (this.idleTimer) clearInterval(this.idleTimer);\n    this.idleTimer = null;\n    if (this.orphanTimer) clearInterval(this.orphanTimer);\n    this.orphanTimer = null;\n    this.subscribers.clear();\n    this.heartbeatLeases.clear();\n    this.runner.dispose();\n  }\n}\n","(function () {\n  require('./lib/main').config(\n    Object.assign(\n      {},\n      require('./lib/env-options'),\n      require('./lib/cli-options')(process.argv)\n    )\n  )\n})()\n","import \"dotenv/config\";\nimport { stdin } from \"node:process\";\nimport { Command } from \"commander\";\nimport {\n  loadAutoResumeOnBoot,\n  loadBrowseRoot,\n  loadDefaultPermissionMode,\n  loadOrCreateApiKey,\n  loadPtyGracePeriodMs,\n  loadPublicUrl,\n  setAutoResumeOnBoot,\n  setDefaultPermissionMode,\n} from \"../src/auth\";\nimport {\n  CLAUDE_FLAGS,\n  type ClaudeFlagValues,\n  EFFORT_LEVELS,\n  effectivePermissionMode,\n  findFlag,\n  isDangerousPermissionMode,\n  isEffortLevel,\n  isPermissionMode,\n  PERMISSION_MODES,\n  validateFlagValues,\n} from \"../src/claude-flags\";\nimport { loadUpdateConfig, UPDATE_CONFIG_PATH } from \"../src/config/update-config\";\nimport { appendDevSessionMarker } from \"../src/devLog\";\nimport {\n  FEATURE_FLAG_IDS,\n  type FeatureFlagValues,\n  parseFeatureFlagArgs,\n} from \"../src/feature-flags\";\nimport { resolveServerUrl } from \"../src/lan-url\";\nimport { getLogger } from \"../src/logger\";\nimport { StreamerServer } from \"../src/server\";\nimport { checkForUpdate } from \"../src/updater/check-update\";\nimport { runInstall } from \"../src/updater/install\";\nimport { appendUpdateLog } from \"../src/updater/update-log\";\nimport { getVersion } from \"../src/version\";\nimport { logApiKeyLine } from \"./boot-log\";\nimport { applyNoE2ee } from \"./no-e2ee\";\nimport { printServerBanner, printUrlBanner } from \"./pair-banner\";\nimport { registerProdCommands } from \"./prod\";\n\nconst log = getLogger(\"cli\");\n\nconst program = new Command();\n\nprogram\n  .name(\"threadbase-streamer\")\n  .description(\"PTY session management, WebSocket streaming, and REST API server for Claude Code\")\n  .version(getVersion());\n\nprogram\n  .command(\"serve\")\n  .description(\"Start the streamer server\")\n  .option(\"-p, --port <number>\", \"Port to listen on\", \"8766\")\n  .option(\"--host <address>\", \"Host/address to bind the server to (default: all interfaces)\")\n  .option(\"--api-key <key>\", \"API key for authentication\")\n  .option(\"--local-no-auth\", \"Skip auth for localhost requests\", false)\n  .option(\"-v, --verbose\", \"Verbose output\", false)\n  .option(\n    \"--log-menubar-requests\",\n    \"Also log the menubar app's healthy /healthz polls (its failures are always logged)\",\n    false,\n  )\n  .option(\"--browse-root <path>\", \"Root directory for file browsing\")\n  .option(\n    \"--public-url <url>\",\n    \"Public URL clients should use to reach this server (https:// required, except localhost). Falls back to THREADBASE_PUBLIC_URL env or public_url: in ~/.threadbase/server.yaml.\",\n  )\n  .option(\n    \"--default-permission-mode <mode>\",\n    \"Claude Code permission mode for spawned sessions: acceptEdits (auto-approve file edits, default) or manual (prompt for everything). Falls back to default_permission_mode: in ~/.threadbase/server.yaml, or a first-run interactive prompt on a human TTY invocation (skip with THREADBASE_SKIP_PERMISSION_MODE_PROMPT=true).\",\n  )\n  .option(\n    \"--default-model <model>\",\n    \"Claude Code --model for spawned sessions (alias like 'sonnet'/'opus' or a full model name). Default: sonnet.\",\n  )\n  .option(\n    \"--default-effort <level>\",\n    \"Claude Code --effort for spawned sessions: low, medium, high, xhigh, or max. Default: low.\",\n  )\n  .option(\n    \"--pty-grace-period-ms <ms>\",\n    \"Ms to keep a PTY alive after the last WebSocket subscriber disconnects before auto-holding it (default 270000, 4.5 min). 0 disables auto-hold entirely (an explicit hold_session still works). Falls back to pty_grace_period_ms: in ~/.threadbase/server.yaml.\",\n  )\n  .option(\n    \"--claude-flag <id=value>\",\n    \"Allowlisted Claude CLI flag applied to every spawned session, e.g. --claude-flag permissionMode=bypassPermissions. Repeatable; repeat the same id to build a list (--claude-flag addDir=/a --claude-flag addDir=/b). Overrides claude_flags: in ~/.threadbase/server.yaml and makes the value non-persistable.\",\n    (value: string, previous: string[] = []) => [...previous, value],\n  )\n  .option(\n    \"--feature <id=bool>\",\n    `Enable or disable a server feature flag. Ids are the FEATURE_FLAGS keys (${FEATURE_FLAG_IDS.join(\", \")}), e.g. --feature ptyHost=true — not the THREADBASE_FEATURE_* env names. Repeatable. Overridden by the flag's env var; overrides feature_flags: in ~/.threadbase/server.yaml.`,\n    (value: string, previous: string[] = []) => [...previous, value],\n  )\n  .option(\n    \"--claude-extra-args <args>\",\n    \"Free-text argv appended verbatim to every spawned Claude session, after the allowlisted flags. Unvalidated escape hatch.\",\n  )\n  .option(\"--no-pair-qr\", \"Skip the pairing QR on startup\")\n  .option(\n    \"--no-e2ee\",\n    \"Disable transport encryption for this run. Sugar for --feature e2ee=false, and a serve option only: there is no server.yaml key and no environment variable for it, so it cannot outlive the command that typed it. THREADBASE_FEATURE_E2EE still wins, because env outranks the CLI in the documented precedence.\",\n  )\n  .option(\"--replace-prod\", \"Stop the launchd-supervised prod streamer and bind its port\", false)\n  .option(\"--forget\", \"Clear this repo's remembered dev-vs-prod choice and re-prompt\", false)\n  .option(\"--forget-all\", \"Clear every repo's remembered dev-vs-prod choice\", false)\n  .option(\n    \"--prod\",\n    \"Run as if invoked by launchd: skip the dev-takeover prompt and signal handlers\",\n    false,\n  )\n  .option(\n    \"--multi-agent-flow\",\n    \"Run in multi-agent mode (PTY mode unreachable in this process)\",\n    false,\n  )\n  .action(async (opts) => {\n    // Fail loudly before binding if the better-sqlite3 native binary can't load\n    // under this Node — otherwise the cache silently dies and every\n    // /api/conversations* request 500s with no obvious cause.\n    try {\n      const { checkSqliteAbi } = await import(\"../src/db/check-sqlite-abi\");\n      checkSqliteAbi();\n    } catch (err) {\n      log.error(err instanceof Error ? err.message : String(err), undefined, \"console\");\n      process.exit(1);\n    }\n\n    if (opts.multiAgentFlow) {\n      process.env.MULTI_AGENT_FLOW = \"true\";\n    }\n    if (opts.defaultPermissionMode !== undefined && !isPermissionMode(opts.defaultPermissionMode)) {\n      log.error(\n        `Invalid --default-permission-mode: ${opts.defaultPermissionMode} (expected one of ${PERMISSION_MODES.join(\", \")})`,\n        undefined,\n        \"console\",\n      );\n      process.exit(1);\n    }\n    // Repeatable --claude-flag id=value pairs, validated against the registry.\n    // A list-valued flag repeats the id (--claude-flag addDir=/a --claude-flag addDir=/b).\n    let claudeFlags: ClaudeFlagValues | undefined;\n    if (Array.isArray(opts.claudeFlag) && opts.claudeFlag.length > 0) {\n      const raw: Record<string, string | string[] | boolean> = {};\n      for (const entry of opts.claudeFlag as string[]) {\n        const eq = entry.indexOf(\"=\");\n        const id = eq === -1 ? entry : entry.slice(0, eq);\n        const value = eq === -1 ? true : entry.slice(eq + 1);\n        const def = findFlag(id);\n        if (!def) {\n          log.error(\n            `Invalid --claude-flag id: ${id} (expected one of ${CLAUDE_FLAGS.map((f) => f.id).join(\", \")})`,\n            undefined,\n            \"console\",\n          );\n          process.exit(1);\n        }\n        if (def.valueType === \"list\") {\n          const existing = raw[id];\n          raw[id] = Array.isArray(existing) ? [...existing, String(value)] : [String(value)];\n        } else {\n          raw[id] = value;\n        }\n      }\n      claudeFlags = validateFlagValues(raw);\n      // validateFlagValues drops anything that failed its per-type check, so a\n      // silently-empty result means the user's input never took effect.\n      for (const id of Object.keys(raw)) {\n        if (!(id in claudeFlags)) {\n          log.error(`Invalid value for --claude-flag ${id}`, undefined, \"console\");\n          process.exit(1);\n        }\n      }\n    }\n    // Repeatable --feature id=bool pairs. Strict, unlike the server.yaml path:\n    // a CLI typo should stop the boot with a legible message.\n    let featureFlags: FeatureFlagValues | undefined;\n    if (Array.isArray(opts.feature) && opts.feature.length > 0) {\n      const parsed = parseFeatureFlagArgs(opts.feature as string[]);\n      if (parsed.errors.length > 0) {\n        for (const error of parsed.errors) log.error(`--feature: ${error}`, undefined, \"console\");\n        process.exit(1);\n      }\n      featureFlags = parsed.values;\n    }\n    {\n      const applied = applyNoE2ee(featureFlags, opts.e2ee);\n      if (applied.error) {\n        log.error(applied.error, undefined, \"console\");\n        process.exit(1);\n      }\n      featureFlags = applied.values;\n    }\n\n    if (opts.defaultEffort !== undefined && !isEffortLevel(opts.defaultEffort)) {\n      log.error(\n        `Invalid --default-effort: ${opts.defaultEffort} (expected one of ${EFFORT_LEVELS.join(\", \")})`,\n        undefined,\n        \"console\",\n      );\n      process.exit(1);\n    }\n    // Resolve the auto-hold grace period: --pty-grace-period-ms flag → yaml →\n    // undefined (server applies DEFAULT_PTY_GRACE_PERIOD_MS). A non-negative\n    // integer is required; 0 is valid and disables auto-hold.\n    let ptyGracePeriodMs: number | undefined;\n    if (opts.ptyGracePeriodMs !== undefined) {\n      const parsed = Number(opts.ptyGracePeriodMs);\n      if (!Number.isInteger(parsed) || parsed < 0) {\n        log.error(\n          `Invalid --pty-grace-period-ms: ${opts.ptyGracePeriodMs} (expected a non-negative integer; 0 disables auto-hold)`,\n          undefined,\n          \"console\",\n        );\n        process.exit(1);\n      }\n      ptyGracePeriodMs = parsed;\n    } else {\n      ptyGracePeriodMs = loadPtyGracePeriodMs();\n    }\n    const requestedPort = Number.parseInt(opts.port, 10);\n    const apiKey = opts.apiKey ?? loadOrCreateApiKey();\n    const publicUrl = opts.publicUrl ?? loadPublicUrl() ?? null;\n\n    // Detect whether this invocation is \"dev mode\" (started by a human shell)\n    // or \"prod mode\" (started by launchd). PPID 1 = launchd on macOS.\n    const isProdInvocation = opts.prod === true || process.ppid === 1;\n    if (!isProdInvocation) appendDevSessionMarker();\n\n    // Cap the supervised logs before anything writes to them. Gated on prod\n    // because only there is fd 1 the log file itself, still at offset 0 — an\n    // ad-hoc `serve` logs to its terminal, so truncating prod's file would both\n    // destroy history and race the live daemon's offset.\n    if (isProdInvocation) {\n      const { truncateOversizedLogs } = await import(\"../src/lifecycle/log-cap\");\n      for (const f of truncateOversizedLogs()) {\n        log.info(`truncated oversized log at boot: ${f}`, { path: f, event: \"log.truncated\" });\n      }\n    }\n\n    // On macOS, check for conflicting Threadbase streamer agents (Homebrew vs\n    // deploy.sh). If a conflict is detected, warn and let the user resolve it\n    // — the port-in-use check downstream will still catch EADDRINUSE, but\n    // surfacing the root cause upfront is clearer.\n    if (process.platform === \"darwin\") {\n      const { detectConflictingAgents, formatConflictMessage } = await import(\n        \"../src/lifecycle/conflict-check\"\n      );\n      const conflicts = detectConflictingAgents();\n      if (conflicts.length > 0) {\n        log.warn(formatConflictMessage(conflicts), undefined, \"console\");\n      }\n    }\n\n    // First-run interactive prompt for permission mode. Only fires for a human\n    // dev invocation (never under --prod/launchd, which must never block on\n    // stdin) on a real TTY, when the mode isn't already pinned by --flag or a\n    // prior answer persisted to server.yaml, and unless explicitly disabled.\n    let resolvedDefaultPermissionMode = opts.defaultPermissionMode;\n    if (\n      resolvedDefaultPermissionMode === undefined &&\n      !isProdInvocation &&\n      process.env.THREADBASE_SKIP_PERMISSION_MODE_PROMPT !== \"true\" &&\n      loadDefaultPermissionMode() === undefined &&\n      stdin.isTTY\n    ) {\n      const { interactivePermissionModePrompt } = await import(\"../src/lifecycle/prompt\");\n      resolvedDefaultPermissionMode = await interactivePermissionModePrompt();\n      setDefaultPermissionMode(resolvedDefaultPermissionMode);\n    }\n\n    // Auto-resume on boot (plan Phase 7b). Same three gates as above, and for\n    // the same reason: a supervised service must never block on stdin.\n    //\n    // Persisting BOTH answers is the whole mechanism — `no` writes `false`, so\n    // the key is present and this never asks again. Every other path (non-TTY,\n    // skipped, declined, prompt failure) resolves to false. There is no\n    // sequence of events in which silence turns this on.\n    let resolvedAutoResumeOnBoot = loadAutoResumeOnBoot();\n    if (\n      resolvedAutoResumeOnBoot === undefined &&\n      !isProdInvocation &&\n      process.env.THREADBASE_SKIP_AUTO_RESUME_PROMPT !== \"true\" &&\n      stdin.isTTY\n    ) {\n      const { interactiveAutoResumePrompt } = await import(\"../src/lifecycle/prompt\");\n      resolvedAutoResumeOnBoot = await interactiveAutoResumePrompt();\n      setAutoResumeOnBoot(resolvedAutoResumeOnBoot);\n    } else if (resolvedAutoResumeOnBoot === undefined) {\n      // A --prod-only machine never sees a TTY, so the key stays absent forever\n      // and the operator has no way to learn the setting exists. One line, only\n      // when we neither found an answer nor asked for one.\n      log.info(\n        \"auto_resume_on_boot is not set; interrupted sessions will wait for you to resume them.\\n\" +\n          \"Set `auto_resume_on_boot: true` in ~/.threadbase/server.yaml to resume them automatically.\",\n        undefined,\n        \"console\",\n      );\n    }\n\n    let resolvedPort = requestedPort;\n\n    if (!isProdInvocation) {\n      const { resolveDevPlan, detectProdActive, isPortInUse, findFreePort, takeoverProd } =\n        await import(\"../src/lifecycle/dev-takeover\");\n      const { interactivePrompt } = await import(\"../src/lifecycle/prompt\");\n      const { getGitToplevel } = await import(\"../src/lifecycle/repo\");\n\n      const repoToplevel = getGitToplevel(process.cwd());\n      const portTaken = await isPortInUse(requestedPort);\n\n      const plan = await resolveDevPlan({\n        requestedPort,\n        replaceProd: opts.replaceProd === true,\n        forget: opts.forget === true,\n        forgetAll: opts.forgetAll === true,\n        repoToplevel,\n        isProdActive: detectProdActive,\n        portInUse: () => portTaken,\n        prompt: interactivePrompt,\n        findFreePort,\n      });\n\n      resolvedPort = plan.port;\n      if (plan.kind === \"replace-prod\") {\n        takeoverProd({ port: plan.port, repoToplevel });\n      }\n    }\n\n    // A bypass mode disables the human-in-the-loop confirmation for every\n    // session this server spawns, and nothing bounds what one costs. The\n    // interactive prompt cannot reach these modes — they arrive only via\n    // --default-permission-mode, --claude-flag, or server.yaml, all of which\n    // are set once and then forgotten. So say it at every boot, where the\n    // person actually running it will see it, not only in the README they read\n    // at install time. claudeFlags wins over the default: spawnFlagOverrides()\n    // resolves permissionMode from there, so warn on what will really be spawned.\n    const spawnMode = effectivePermissionMode(\n      claudeFlags,\n      resolvedDefaultPermissionMode ?? loadDefaultPermissionMode(),\n    );\n    if (spawnMode !== undefined && isDangerousPermissionMode(spawnMode)) {\n      log.warn(\n        `[WARN] permission mode is ${spawnMode} — spawned sessions run without confirmation prompts, ` +\n          \"so anyone holding the API key can execute arbitrary code on this machine. There is no spend limit.\",\n        undefined,\n        \"console\",\n      );\n    }\n\n    const server = new StreamerServer({\n      port: resolvedPort,\n      host: opts.host,\n      apiKey,\n      apiKeySource: opts.apiKey ? \"cli\" : \"config\",\n      localNoAuth: opts.localNoAuth,\n      verbose: opts.verbose,\n      logMenubarRequests: opts.logMenubarRequests,\n      browseRoot: opts.browseRoot,\n      publicUrl: opts.publicUrl,\n      defaultPermissionMode: resolvedDefaultPermissionMode,\n      autoResumeOnBoot: resolvedAutoResumeOnBoot ?? false,\n      defaultModel: opts.defaultModel,\n      defaultEffort: opts.defaultEffort,\n      ptyGracePeriodMs,\n      claudeFlags,\n      featureFlags,\n      claudeExtraArgs: opts.claudeExtraArgs,\n    });\n\n    await server.listen(resolvedPort);\n\n    {\n      const v = getVersion();\n      log.info(`Threadbase Streamer v${v}`, { version: v, port: resolvedPort });\n    }\n    log.info(`Listening on http://localhost:${resolvedPort}`, {\n      url: `http://localhost:${resolvedPort}`,\n    });\n    log.info(`WebSocket at ws://localhost:${resolvedPort}/ws`, {\n      wsUrl: `ws://localhost:${resolvedPort}/ws`,\n    });\n    logApiKeyLine(log, apiKey);\n\n    try {\n      await printServerBanner({\n        port: resolvedPort,\n        apiKey,\n        publicUrl,\n        includeQr: opts.pairQr !== false,\n      });\n    } catch (err) {\n      const message = err instanceof Error ? err.message : String(err);\n      log.warn(`(skipped pairing QR: ${message})`, { reason: message });\n      log.info(\n        printUrlBanner({ url: resolveServerUrl({ publicUrl, port: resolvedPort }) }),\n        undefined,\n        \"console\",\n      );\n    }\n\n    const shutdown = async () => {\n      log.info(\"Shutting down...\");\n      await server.close();\n      process.exit(0);\n    };\n\n    if (isProdInvocation) {\n      // Prod mode: simple shutdown handlers (no takeover semantics).\n      process.on(\"SIGINT\", shutdown);\n      process.on(\"SIGTERM\", shutdown);\n      // Belt-and-suspenders for unhandled socket errors that slip past the\n      // specific guards in StreamerServer (clientError, server-error, upgrade\n      // race). Without this handler, an unhandled 'error' event from any TCP\n      // socket terminates the process with a stack trace to stderr; launchd\n      // respawns it but the next startup repeats the same warm-up. Logging\n      // the error with the cause + exiting 1 ensures launchd respawns\n      // cleanly AND we can grep the log for what slipped through.\n      process.on(\"uncaughtException\", (err) => {\n        log.error(`uncaught: ${err.message}`, {\n          error: err.message,\n          stack: err.stack,\n          event: \"process.uncaught\",\n        });\n        process.exit(1);\n      });\n      process.on(\"unhandledRejection\", (reason) => {\n        const msg = reason instanceof Error ? reason.message : String(reason);\n        log.error(`unhandled rejection: ${msg}`, {\n          error: msg,\n          event: \"process.unhandled_rejection\",\n        });\n        process.exit(1);\n      });\n    }\n    // Dev mode with takeover already installed its handlers in takeoverProd().\n    // Dev mode without takeover (use-port path) — install simple ones too:\n    if (!isProdInvocation) {\n      process.on(\"SIGINT\", shutdown);\n      process.on(\"SIGTERM\", shutdown);\n    }\n  });\n\nprogram\n  .command(\"cache\")\n  .description(\"Manage the local SQLite conversation cache\")\n  .addCommand(\n    new Command(\"clear\")\n      .description(\"Delete the cache DB so it rebuilds from disk on next startup\")\n      .option(\n        \"--cache-dir <path>\",\n        \"Cache directory (default: ~/.threadbase/cache)\",\n        `${process.env.HOME}/.threadbase/cache`,\n      )\n      .action((opts) => {\n        const { rmSync, existsSync } = require(\"node:fs\");\n        const { join } = require(\"node:path\");\n        const dbPath = join(opts.cacheDir, \"cache.db\");\n        for (const suffix of [\"\", \"-shm\", \"-wal\"]) {\n          const f = dbPath + suffix;\n          if (existsSync(f)) {\n            rmSync(f);\n            log.info(`Deleted ${f}`, { path: f }, \"console\");\n          }\n        }\n        log.info(\"Cache cleared. Restart the server to rebuild.\", undefined, \"console\");\n        // The scanner keeps its OWN index outside ~/.threadbase, so a user who\n        // cleared \"the cache\" has not cleared that one — and before #879 a cold\n        // rescan imported its stale rows straight back into the fresh cache\n        // (#876). Nothing the server serves reads that index, so this is a\n        // pointer, not an instruction. See docs/troubleshooting.md.\n        log.info(\n          \"Note: the scanner's separate index at ~/.config/threadbase-scanner/index.db is NOT cleared by this command.\",\n          undefined,\n          \"console\",\n        );\n      }),\n  );\n\n/**\n * Erase the push tokens belonging to devices, from the shell.\n *\n * Push tokens live in cache.db while devices live in runtime.db, so the cascade\n * the HTTP routes do in application code has to be repeated here — these\n * commands deliberately bypass the server. Opened only when the file already\n * exists: creating and migrating a cache.db as a side effect of revoking a\n * device would be a surprise, and a machine with no cache has no tokens to\n * erase either.\n */\nasync function dropPushTokensForDevices(cacheDir: string, deviceIds: string[]): Promise<number> {\n  const { existsSync } = await import(\"node:fs\");\n  const { join } = await import(\"node:path\");\n  const dbPath = join(cacheDir, \"cache.db\");\n  if (deviceIds.length === 0 || !existsSync(dbPath)) return 0;\n\n  const { ConversationCache } = await import(\"../src/conversation-cache\");\n  const { PushRepository } = await import(\"../src/db/repositories/push.repository\");\n  const cache = ConversationCache.open(dbPath);\n  try {\n    const repo = new PushRepository(cache.getDatabase());\n    let deleted = 0;\n    for (const deviceId of deviceIds) deleted += repo.deleteForDevice(deviceId);\n    return deleted;\n  } finally {\n    cache.close();\n  }\n}\n\n/**\n * Paired-device management from the shell.\n *\n * Talks to runtime.db directly rather than to the HTTP API, so it works with\n * the server stopped — an erasure tool that needs the thing you are erasing\n * from to be running is not much of an erasure tool. Device auth re-reads the\n * row on every request with no cache (see 011/003), so removing one from under\n * a live server takes effect immediately rather than going stale.\n */\nprogram\n  .command(\"devices\")\n  .description(\"List, revoke and erase paired devices\")\n  .addCommand(\n    new Command(\"list\")\n      .description(\"Show every paired device, including revoked ones\")\n      .option(\"--db <path>\", \"runtime.db path (default: ~/.threadbase/runtime.db)\")\n      .action(async (opts) => {\n        const { RuntimeStore, resolveRuntimeDbPath } = await import(\"../src/db/runtime-store\");\n        const { DevicesRepository } = await import(\"../src/db/repositories/devices.repository\");\n        const store = RuntimeStore.open(resolveRuntimeDbPath(opts.db));\n        const devices = new DevicesRepository(store.getDatabase()).list();\n        store.close();\n        if (devices.length === 0) {\n          log.info(\"No paired devices.\", undefined, \"console\");\n          return;\n        }\n        for (const d of devices) {\n          const state = d.revokedAt ? \"revoked\" : \"active\";\n          const seen = d.lastSeenAt ? new Date(d.lastSeenAt).toISOString() : \"never\";\n          log.info(\n            `${d.deviceId}  ${state.padEnd(7)}  ${d.name ?? \"(unnamed)\"}  last seen ${seen}  [${d.capabilities.join(\", \")}]`,\n            undefined,\n            \"console\",\n          );\n        }\n      }),\n  )\n  .addCommand(\n    new Command(\"revoke\")\n      .argument(\"<deviceId>\")\n      .description(\"Refuse this device's token, keeping its record for the audit trail\")\n      .option(\"--db <path>\", \"runtime.db path (default: ~/.threadbase/runtime.db)\")\n      .option(\n        \"--cache-dir <path>\",\n        \"Cache directory holding push tokens (default: ~/.threadbase/cache)\",\n        `${process.env.HOME}/.threadbase/cache`,\n      )\n      .action(async (deviceId: string, opts) => {\n        const { RuntimeStore, resolveRuntimeDbPath } = await import(\"../src/db/runtime-store\");\n        const { DevicesRepository } = await import(\"../src/db/repositories/devices.repository\");\n        const store = RuntimeStore.open(resolveRuntimeDbPath(opts.db));\n        const ok = new DevicesRepository(store.getDatabase()).revoke(deviceId);\n        store.close();\n        if (ok) {\n          const dropped = await dropPushTokensForDevices(opts.cacheDir, [deviceId]);\n          if (dropped) {\n            log.info(`Deleted ${dropped} push token(s).`, undefined, \"console\");\n          }\n        }\n        log.info(ok ? `Revoked ${deviceId}.` : `No such device: ${deviceId}`, undefined, \"console\");\n        if (!ok) process.exitCode = 1;\n      }),\n  )\n  .addCommand(\n    new Command(\"delete\")\n      .argument(\"[deviceId]\")\n      .description(\"Erase a device record. With --revoked, erase every revoked device instead\")\n      .option(\"--revoked\", \"Erase all revoked devices rather than one by id\")\n      .option(\"--force\", \"Erase an ACTIVE device (revoking first is the safe order)\")\n      .option(\"--db <path>\", \"runtime.db path (default: ~/.threadbase/runtime.db)\")\n      .option(\n        \"--cache-dir <path>\",\n        \"Cache directory holding push tokens (default: ~/.threadbase/cache)\",\n        `${process.env.HOME}/.threadbase/cache`,\n      )\n      .action(async (deviceId: string | undefined, opts) => {\n        const { RuntimeStore, resolveRuntimeDbPath } = await import(\"../src/db/runtime-store\");\n        const { DevicesRepository } = await import(\"../src/db/repositories/devices.repository\");\n        const store = RuntimeStore.open(resolveRuntimeDbPath(opts.db));\n        const repo = new DevicesRepository(store.getDatabase());\n\n        if (opts.revoked) {\n          // Collect the ids BEFORE the delete: afterwards there is no row left\n          // to name, and the push tokens would outlive the device silently.\n          const revokedIds = repo\n            .list()\n            .filter((device) => device.revokedAt != null)\n            .map((device) => device.deviceId);\n          const n = repo.deleteRevoked();\n          store.close();\n          const dropped = await dropPushTokensForDevices(opts.cacheDir, revokedIds);\n          if (dropped) log.info(`Deleted ${dropped} push token(s).`, undefined, \"console\");\n          log.info(`Erased ${n} revoked device record(s).`, undefined, \"console\");\n          return;\n        }\n        if (!deviceId) {\n          store.close();\n          log.error(\"Pass a device id, or --revoked to erase all revoked devices.\");\n          process.exitCode = 1;\n          return;\n        }\n        const existing = repo.get(deviceId);\n        if (!existing) {\n          store.close();\n          log.info(`No such device: ${deviceId}`, undefined, \"console\");\n          process.exitCode = 1;\n          return;\n        }\n        // Erasing an active device frees its token_hash without telling the\n        // device anything, so it stops being known rather than being refused.\n        if (existing.revoked_at == null && !opts.force) {\n          store.close();\n          log.error(\n            `${deviceId} is still active. Run 'devices revoke ${deviceId}' first, or pass --force.`,\n          );\n          process.exitCode = 1;\n          return;\n        }\n        repo.delete(deviceId);\n        store.close();\n        const dropped = await dropPushTokensForDevices(opts.cacheDir, [deviceId]);\n        if (dropped) log.info(`Deleted ${dropped} push token(s).`, undefined, \"console\");\n        log.info(`Erased ${deviceId}.`, undefined, \"console\");\n      }),\n  );\n\nprogram\n  .command(\"pair\")\n  .description(\"Print a pairing QR code (server must already be running)\")\n  .option(\"-p, --port <number>\", \"Port the server is listening on\", \"8766\")\n  .action(async (opts) => {\n    const port = Number.parseInt(opts.port, 10);\n    const apiKey = loadOrCreateApiKey();\n    const publicUrl = loadPublicUrl() ?? null;\n    await printServerBanner({ port, apiKey, publicUrl, includeQr: true });\n  });\n\nprogram\n  .command(\"codex [path]\")\n  .description(\n    \"Start a streamer-managed Codex session in a directory and attach this terminal to it (server must already be running)\",\n  )\n  .option(\"-p, --port <number>\", \"Port the server is listening on\", \"8766\")\n  .option(\"--detached\", \"Start the session and print its id instead of attaching\", false)\n  .option(\n    \"--resize\",\n    \"Resize the session to this terminal. A phone watching the same session renders incorrectly while this is on, because installed mobile builds assume the spawn geometry.\",\n    false,\n  )\n  .action(async (path: string | undefined, opts) => {\n    const { runCodexAttach } = await import(\"./attach\");\n    const { createTerminalIO, connectSocket } = await import(\"./attach-io\");\n    const { resolve } = await import(\"node:path\");\n    const code = await runCodexAttach(\n      {\n        cwd: resolve(process.cwd(), path ?? \".\"),\n        browseRoot: loadBrowseRoot(),\n        port: Number.parseInt(opts.port, 10),\n        apiKey: loadOrCreateApiKey(),\n        detached: opts.detached,\n        resize: opts.resize,\n      },\n      { fetchFn: fetch, connect: connectSocket, io: createTerminalIO() },\n    );\n    process.exit(code);\n  });\n\nprogram\n  .command(\"identity\")\n  .description(\"Print this server's identity fingerprint for out-of-band verification\")\n  .action(async () => {\n    const { runIdentity } = await import(\"./identity\");\n    const code = runIdentity({\n      log: {\n        info: (msg) => log.info(msg, undefined, \"console\"),\n        error: (msg) => log.error(msg, undefined, \"console\"),\n      },\n    });\n    process.exit(code);\n  });\n\nprogram\n  .command(\"set-key [key]\")\n  .description(\"Set the streamer API key in ~/.threadbase/server.yaml\")\n  .action(async (key: string | undefined) => {\n    const { runSetKey } = await import(\"./setKey\");\n    const code = await runSetKey(\n      { key },\n      {\n        log: {\n          info: (msg) => console.log(msg),\n          error: (msg) => console.error(msg),\n        },\n      },\n    );\n    process.exit(code);\n  });\n\nprogram\n  .command(\"update\")\n  .description(\"Check for streamer updates from GitHub Releases and install them\")\n  .option(\"--check\", \"Check only; do not install\", false)\n  .option(\"--version <version>\", \"Pin to a specific release tag\")\n  .option(\"--allow-major\", \"Allow a major-version bump\", false)\n  .option(\"--force\", \"Skip the active-session defer check\", false)\n  .option(\"--dry-run\", \"Print what would be installed without writing to disk\", false)\n  .option(\"-p, --port <number>\", \"Port of the running streamer for active-session check\", \"8766\")\n  .action(async (opts) => {\n    const cfg = loadUpdateConfig();\n    if (!cfg) {\n      log.warn(\n        `No update config found at ${UPDATE_CONFIG_PATH}. Create one with at least 'github_repo: owner/name' to enable updates.`,\n        undefined,\n        \"console\",\n      );\n      process.exitCode = 1;\n      return;\n    }\n\n    try {\n      if (opts.check) {\n        const result = await checkForUpdate({\n          currentVersion: getVersion(),\n          config: cfg,\n          pinnedVersion: opts.version,\n          allowMajor: opts.allowMajor,\n        });\n        appendUpdateLog(\n          `[check] current=${result.current} latest=${result.latest ?? \"none\"} status=${result.reason}`,\n        );\n        log.info(`Current : ${result.current}`, undefined, \"console\");\n        log.info(`Latest  : ${result.latest ?? \"(none)\"}`, undefined, \"console\");\n        log.info(`Channel : ${cfg.channel}`, undefined, \"console\");\n        log.info(`Diff    : ${result.diff ?? \"(none)\"}`, undefined, \"console\");\n        log.info(`Status  : ${result.reason}`, undefined, \"console\");\n        return;\n      }\n\n      const port = Number.parseInt(opts.port, 10);\n      const apiKey = loadOrCreateApiKey();\n\n      const result = await runInstall({\n        currentVersion: getVersion(),\n        config: cfg,\n        pinnedVersion: opts.version,\n        allowMajor: opts.allowMajor,\n        force: opts.force,\n        dryRun: opts.dryRun,\n        runningServer: { port, apiKey },\n      });\n\n      switch (result.kind) {\n        case \"no-op\":\n          log.info(`Current : ${result.current}`, undefined, \"console\");\n          log.info(`Latest  : ${result.latest ?? \"(none)\"}`, undefined, \"console\");\n          log.info(`Status  : ${result.reason}`, undefined, \"console\");\n          break;\n        case \"unsupported-install\":\n          log.warn(result.reason, undefined, \"console\");\n          process.exitCode = 2;\n          break;\n        case \"deferred\":\n          log.warn(`Deferred: ${result.reason}`, undefined, \"console\");\n          process.exitCode = 2;\n          break;\n        case \"dry-run\":\n          log.info(\n            `Would install ${result.latest} from ${result.tarballUrl}`,\n            undefined,\n            \"console\",\n          );\n          break;\n        case \"installed\":\n          if (result.restart.method.startsWith(\"failed:\")) {\n            log.error(\n              `Installed ${result.installed} on disk, but the running service was not updated. Restart: ${result.restart.method}.`,\n              undefined,\n              \"console\",\n            );\n            process.exitCode = 1;\n          } else {\n            log.info(\n              `Installed ${result.installed} (was ${result.previous}). Restart: ${result.restart.method}.`,\n              undefined,\n              \"console\",\n            );\n          }\n          if (result.pruned.length > 0) {\n            log.info(`Pruned old releases: ${result.pruned.join(\", \")}`, undefined, \"console\");\n          }\n          break;\n      }\n    } catch (err) {\n      const message = err instanceof Error ? err.message : String(err);\n      appendUpdateLog(`[error] ${message}`);\n      log.error(`Update failed: ${message}`, { error: message }, \"console\");\n      process.exitCode = 1;\n    }\n  });\n\nprogram\n  .command(\"pty-host\")\n  .description(\n    \"Run the PTY host: owns spawned agent processes so they survive a streamer restart. Started automatically by the streamer; not usually run by hand.\",\n  )\n  .requiredOption(\n    \"--socket <path>\",\n    \"Unix socket (POSIX) or named pipe (Windows) to listen on. Must match the streamer's THREADBASE_INSTANCE_ID-derived path.\",\n  )\n  .action(async (opts) => {\n    const { SessionHost } = await import(\"../src/pty-host/host\");\n    const { listenForStreamers } = await import(\"../src/pty-host/socket\");\n\n    let server: Awaited<ReturnType<typeof listenForStreamers>>;\n    let host: InstanceType<typeof SessionHost>;\n    host = new SessionHost({\n      logger: getLogger(\"pty-host\"),\n      onShutdown: () => {\n        host.dispose();\n        server.close(() => process.exit(0));\n      },\n      onOrphaned: () => {\n        host.dispose();\n        server.close(() => process.exit(0));\n      },\n    });\n    try {\n      server = await listenForStreamers(opts.socket, {\n        onConnection: (transport) => host.accept(transport),\n      });\n    } catch (err) {\n      // The common cause is another host already listening, which is not an\n      // error worth a stack trace: the streamer's connect-first path handles it.\n      log.error(\n        `pty-host could not listen on ${opts.socket}: ${err instanceof Error ? err.message : String(err)}`,\n        undefined,\n        \"console\",\n      );\n      process.exit(1);\n    }\n\n    log.info(`pty-host listening on ${opts.socket}`, {\n      event: \"pty_host.listening\",\n      socket: opts.socket,\n    });\n\n    // Signalled teardown kills the agents on the way out. When the host goes\n    // away there is nothing left holding their fds, so leaving them running\n    // would orphan them with no owner and no reaper.\n    const shutdown = () => {\n      host.dispose();\n      server.close();\n      process.exit(0);\n    };\n    process.on(\"SIGTERM\", shutdown);\n    process.on(\"SIGINT\", shutdown);\n  });\n\nregisterProdCommands(program);\n\nprogram.parse();\n","/**\n * CommanderError class\n */\nexport class CommanderError extends Error {\n  /**\n   * Constructs the CommanderError class\n   * @param {number} exitCode suggested exit code which could be used with process.exit\n   * @param {string} code an id string representing the error\n   * @param {string} message human-readable description of the error\n   */\n  constructor(exitCode, code, message) {\n    super(message);\n    // properly capture stack trace in Node.js\n    Error.captureStackTrace(this, this.constructor);\n    this.name = this.constructor.name;\n    this.code = code;\n    this.exitCode = exitCode;\n    this.nestedError = undefined;\n  }\n}\n\n/**\n * InvalidArgumentError class\n */\nexport class InvalidArgumentError extends CommanderError {\n  /**\n   * Constructs the InvalidArgumentError class\n   * @param {string} [message] explanation of why argument is invalid\n   */\n  constructor(message) {\n    super(1, 'commander.invalidArgument', message);\n    // properly capture stack trace in Node.js\n    Error.captureStackTrace(this, this.constructor);\n    this.name = this.constructor.name;\n  }\n}\n","import { InvalidArgumentError } from './error.js';\n\nexport class Argument {\n  /**\n   * Initialize a new command argument with the given name and description.\n   * The default is that the argument is required, and you can explicitly\n   * indicate this with <> around the name. Put [] around the name for an optional argument.\n   *\n   * @param {string} name\n   * @param {string} [description]\n   */\n\n  constructor(name, description) {\n    this.description = description || '';\n    this.variadic = false;\n    this.parseArg = undefined;\n    this.defaultValue = undefined;\n    this.defaultValueDescription = undefined;\n    this.argChoices = undefined;\n\n    switch (name[0]) {\n      case '<': // e.g. <required>\n        this.required = true;\n        this._name = name.slice(1, -1);\n        break;\n      case '[': // e.g. [optional]\n        this.required = false;\n        this._name = name.slice(1, -1);\n        break;\n      default:\n        this.required = true;\n        this._name = name;\n        break;\n    }\n\n    if (this._name.endsWith('...')) {\n      this.variadic = true;\n      this._name = this._name.slice(0, -3);\n    }\n  }\n\n  /**\n   * Return argument name.\n   *\n   * @return {string}\n   */\n\n  name() {\n    return this._name;\n  }\n\n  /**\n   * @package\n   */\n\n  _collectValue(value, previous) {\n    if (previous === this.defaultValue || !Array.isArray(previous)) {\n      return [value];\n    }\n\n    previous.push(value);\n    return previous;\n  }\n\n  /**\n   * Set the default value, and optionally supply the description to be displayed in the help.\n   *\n   * @param {*} value\n   * @param {string} [description]\n   * @return {Argument}\n   */\n\n  default(value, description) {\n    this.defaultValue = value;\n    this.defaultValueDescription = description;\n    return this;\n  }\n\n  /**\n   * Set the custom handler for processing CLI command arguments into argument values.\n   *\n   * @param {Function} [fn]\n   * @return {Argument}\n   */\n\n  argParser(fn) {\n    this.parseArg = fn;\n    return this;\n  }\n\n  /**\n   * Only allow argument value to be one of choices.\n   *\n   * @param {string[]} values\n   * @return {Argument}\n   */\n\n  choices(values) {\n    this.argChoices = values.slice();\n    this.parseArg = (arg, previous) => {\n      if (!this.argChoices.includes(arg)) {\n        throw new InvalidArgumentError(\n          `Allowed choices are ${this.argChoices.join(', ')}.`,\n        );\n      }\n      if (this.variadic) {\n        return this._collectValue(arg, previous);\n      }\n      return arg;\n    };\n    return this;\n  }\n\n  /**\n   * Make argument required.\n   *\n   * @returns {Argument}\n   */\n  argRequired() {\n    this.required = true;\n    return this;\n  }\n\n  /**\n   * Make argument optional.\n   *\n   * @returns {Argument}\n   */\n  argOptional() {\n    this.required = false;\n    return this;\n  }\n}\n\n/**\n * Takes an argument and returns its human readable equivalent for help usage.\n *\n * @param {Argument} arg\n * @return {string}\n * @private\n */\n\nexport function humanReadableArgName(arg) {\n  const nameOutput = arg.name() + (arg.variadic === true ? '...' : '');\n\n  return arg.required ? '<' + nameOutput + '>' : '[' + nameOutput + ']';\n}\n","import { EventEmitter } from 'node:events';\nimport childProcess from 'node:child_process';\nimport path from 'node:path';\nimport fs from 'node:fs';\nimport process from 'node:process';\nimport { stripVTControlCharacters } from 'node:util';\n\nimport { Argument, humanReadableArgName } from './argument.js';\nimport { CommanderError } from './error.js';\nimport { Help } from './help.js';\nimport { Option, DualOptions } from './option.js';\nimport { suggestSimilar } from './suggestSimilar.js';\n\nexport class Command extends EventEmitter {\n  /**\n   * Initialize a new `Command`.\n   *\n   * @param {string} [name]\n   */\n\n  constructor(name) {\n    super();\n    /** @type {Command[]} */\n    this.commands = [];\n    /** @type {Option[]} */\n    this.options = [];\n    this.parent = null;\n    this._allowUnknownOption = false;\n    this._allowExcessArguments = false;\n    /** @type {Argument[]} */\n    this.registeredArguments = [];\n    this._args = this.registeredArguments; // deprecated old name\n    /** @type {string[]} */\n    this.args = []; // cli args with options removed\n    this.rawArgs = [];\n    this.processedArgs = []; // like .args but after custom processing and collecting variadic\n    this._scriptPath = null;\n    this._name = name || '';\n    this._optionValues = {};\n    this._optionValueSources = {}; // default, env, cli etc\n    this._storeOptionsAsProperties = false;\n    this._actionHandler = null;\n    this._executableHandler = false;\n    this._executableFile = null; // custom name for executable\n    this._executableDir = null; // custom search directory for subcommands\n    this._defaultCommandName = null;\n    this._exitCallback = null;\n    this._aliases = [];\n    this._combineFlagAndOptionalValue = true;\n    this._description = '';\n    this._summary = '';\n    this._argsDescription = undefined; // legacy\n    this._enablePositionalOptions = false;\n    this._passThroughOptions = false;\n    this._lifeCycleHooks = {}; // a hash of arrays\n    /** @type {(boolean | string)} */\n    this._showHelpAfterError = false;\n    this._showSuggestionAfterError = true;\n    this._savedState = null; // used in save/restoreStateBeforeParse\n\n    // see configureOutput() for docs\n    this._outputConfiguration = {\n      writeOut: (str) => process.stdout.write(str),\n      writeErr: (str) => process.stderr.write(str),\n      outputError: (str, write) => write(str),\n      getOutHelpWidth: () =>\n        process.stdout.isTTY ? process.stdout.columns : undefined,\n      getErrHelpWidth: () =>\n        process.stderr.isTTY ? process.stderr.columns : undefined,\n      getOutHasColors: () =>\n        useColor() ?? (process.stdout.isTTY && process.stdout.hasColors?.()),\n      getErrHasColors: () =>\n        useColor() ?? (process.stderr.isTTY && process.stderr.hasColors?.()),\n      stripColor: (str) => stripVTControlCharacters(str),\n    };\n\n    this._hidden = false;\n    /** @type {(Option | null | undefined)} */\n    this._helpOption = undefined; // Lazy created on demand. May be null if help option is disabled.\n    this._addImplicitHelpCommand = undefined; // undecided whether true or false yet, not inherited\n    /** @type {Command} */\n    this._helpCommand = undefined; // lazy initialised, inherited\n    this._helpConfiguration = {};\n    /** @type {string | undefined} */\n    this._helpGroupHeading = undefined; // soft initialised when added to parent\n    /** @type {string | undefined} */\n    this._defaultCommandGroup = undefined;\n    /** @type {string | undefined} */\n    this._defaultOptionGroup = undefined;\n  }\n\n  /**\n   * Copy settings that are useful to have in common across root command and subcommands.\n   *\n   * (Used internally when adding a command using `.command()` so subcommands inherit parent settings.)\n   *\n   * @param {Command} sourceCommand\n   * @return {Command} `this` command for chaining\n   */\n  copyInheritedSettings(sourceCommand) {\n    this._outputConfiguration = sourceCommand._outputConfiguration;\n    this._helpOption = sourceCommand._helpOption;\n    this._helpCommand = sourceCommand._helpCommand;\n    this._helpConfiguration = sourceCommand._helpConfiguration;\n    this._exitCallback = sourceCommand._exitCallback;\n    this._storeOptionsAsProperties = sourceCommand._storeOptionsAsProperties;\n    this._combineFlagAndOptionalValue =\n      sourceCommand._combineFlagAndOptionalValue;\n    this._allowExcessArguments = sourceCommand._allowExcessArguments;\n    this._enablePositionalOptions = sourceCommand._enablePositionalOptions;\n    this._showHelpAfterError = sourceCommand._showHelpAfterError;\n    this._showSuggestionAfterError = sourceCommand._showSuggestionAfterError;\n\n    return this;\n  }\n\n  /**\n   * @returns {Command[]}\n   * @private\n   */\n\n  _getCommandAndAncestors() {\n    const result = [];\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    for (let command = this; command; command = command.parent) {\n      result.push(command);\n    }\n    return result;\n  }\n\n  /**\n   * Define a command.\n   *\n   * There are two styles of command: pay attention to where to put the description.\n   *\n   * @example\n   * // Command implemented using action handler (description is supplied separately to `.command`)\n   * program\n   *   .command('clone <source> [destination]')\n   *   .description('clone a repository into a newly created directory')\n   *   .action((source, destination) => {\n   *     console.log('clone command called');\n   *   });\n   *\n   * // Command implemented using separate executable file (description is second parameter to `.command`)\n   * program\n   *   .command('start <service>', 'start named service')\n   *   .command('stop [service]', 'stop named service, or all if no name supplied');\n   *\n   * @param {string} nameAndArgs - command name and arguments, args are `<required>` or `[optional]` and last may also be `variadic...`\n   * @param {(object | string)} [actionOptsOrExecDesc] - configuration options (for action), or description (for executable)\n   * @param {object} [execOpts] - configuration options (for executable)\n   * @return {Command} returns new command for action handler, or `this` for executable command\n   */\n\n  command(nameAndArgs, actionOptsOrExecDesc, execOpts) {\n    let desc = actionOptsOrExecDesc;\n    let opts = execOpts;\n    if (typeof desc === 'object' && desc !== null) {\n      opts = desc;\n      desc = null;\n    }\n    opts = opts || {};\n    const [, name, args] = nameAndArgs.match(/([^ ]+) *(.*)/);\n\n    const cmd = this.createCommand(name);\n    if (desc) {\n      cmd.description(desc);\n      cmd._executableHandler = true;\n    }\n    if (opts.isDefault) this._defaultCommandName = cmd._name;\n    cmd._hidden = !!(opts.noHelp || opts.hidden); // noHelp is deprecated old name for hidden\n    cmd._executableFile = opts.executableFile || null; // Custom name for executable file, set missing to null to match constructor\n    if (args) cmd.arguments(args);\n    this._registerCommand(cmd);\n    cmd.parent = this;\n    cmd.copyInheritedSettings(this);\n\n    if (desc) return this;\n    return cmd;\n  }\n\n  /**\n   * Factory routine to create a new unattached command.\n   *\n   * See .command() for creating an attached subcommand, which uses this routine to\n   * create the command. You can override createCommand to customise subcommands.\n   *\n   * @param {string} [name]\n   * @return {Command} new command\n   */\n\n  createCommand(name) {\n    return new Command(name);\n  }\n\n  /**\n   * You can customise the help with a subclass of Help by overriding createHelp,\n   * or by overriding Help properties using configureHelp().\n   *\n   * @return {Help}\n   */\n\n  createHelp() {\n    return Object.assign(new Help(), this.configureHelp());\n  }\n\n  /**\n   * You can customise the help by overriding Help properties using configureHelp(),\n   * or with a subclass of Help by overriding createHelp().\n   *\n   * @param {object} [configuration] - configuration options\n   * @return {(Command | object)} `this` command for chaining, or stored configuration\n   */\n\n  configureHelp(configuration) {\n    if (configuration === undefined) return this._helpConfiguration;\n\n    this._helpConfiguration = configuration;\n    return this;\n  }\n\n  /**\n   * The default output goes to stdout and stderr. You can customise this for special\n   * applications. You can also customise the display of errors by overriding outputError.\n   *\n   * The configuration properties are all functions:\n   *\n   *     // change how output being written, defaults to stdout and stderr\n   *     writeOut(str)\n   *     writeErr(str)\n   *     // change how output being written for errors, defaults to writeErr\n   *     outputError(str, write) // used for displaying errors and not used for displaying help\n   *     // specify width for wrapping help\n   *     getOutHelpWidth()\n   *     getErrHelpWidth()\n   *     // color support, currently only used with Help\n   *     getOutHasColors()\n   *     getErrHasColors()\n   *     stripColor() // used to remove ANSI escape codes if output does not have colors\n   *\n   * @param {object} [configuration] - configuration options\n   * @return {(Command | object)} `this` command for chaining, or stored configuration\n   */\n\n  configureOutput(configuration) {\n    if (configuration === undefined) return this._outputConfiguration;\n\n    this._outputConfiguration = {\n      ...this._outputConfiguration,\n      ...configuration,\n    };\n    return this;\n  }\n\n  /**\n   * Display the help or a custom message after an error occurs.\n   *\n   * @param {(boolean|string)} [displayHelp]\n   * @return {Command} `this` command for chaining\n   */\n  showHelpAfterError(displayHelp = true) {\n    if (typeof displayHelp !== 'string') displayHelp = !!displayHelp;\n    this._showHelpAfterError = displayHelp;\n    return this;\n  }\n\n  /**\n   * Display suggestion of similar commands for unknown commands, or options for unknown options.\n   *\n   * @param {boolean} [displaySuggestion]\n   * @return {Command} `this` command for chaining\n   */\n  showSuggestionAfterError(displaySuggestion = true) {\n    this._showSuggestionAfterError = !!displaySuggestion;\n    return this;\n  }\n\n  /**\n   * Add a prepared subcommand.\n   *\n   * See .command() for creating an attached subcommand which inherits settings from its parent.\n   *\n   * @param {Command} cmd - new subcommand\n   * @param {object} [opts] - configuration options\n   * @return {Command} `this` command for chaining\n   */\n\n  addCommand(cmd, opts) {\n    if (!cmd._name) {\n      throw new Error(`Command passed to .addCommand() must have a name\n- specify the name in Command constructor or using .name()`);\n    }\n\n    opts = opts || {};\n    if (opts.isDefault) this._defaultCommandName = cmd._name;\n    if (opts.noHelp || opts.hidden) cmd._hidden = true; // modifying passed command due to existing implementation\n\n    this._registerCommand(cmd);\n    cmd.parent = this;\n    cmd._checkForBrokenPassThrough();\n\n    return this;\n  }\n\n  /**\n   * Factory routine to create a new unattached argument.\n   *\n   * See .argument() for creating an attached argument, which uses this routine to\n   * create the argument. You can override createArgument to return a custom argument.\n   *\n   * @param {string} name\n   * @param {string} [description]\n   * @return {Argument} new argument\n   */\n\n  createArgument(name, description) {\n    return new Argument(name, description);\n  }\n\n  /**\n   * Define argument syntax for command.\n   *\n   * The default is that the argument is required, and you can explicitly\n   * indicate this with <> around the name. Put [] around the name for an optional argument.\n   *\n   * @example\n   * program.argument('<input-file>');\n   * program.argument('[output-file]');\n   *\n   * @param {string} name\n   * @param {string} [description]\n   * @param {(Function|*)} [parseArg] - custom argument processing function or default value\n   * @param {*} [defaultValue]\n   * @return {Command} `this` command for chaining\n   */\n  argument(name, description, parseArg, defaultValue) {\n    const argument = this.createArgument(name, description);\n    if (typeof parseArg === 'function') {\n      argument.default(defaultValue).argParser(parseArg);\n    } else {\n      argument.default(parseArg);\n    }\n    this.addArgument(argument);\n    return this;\n  }\n\n  /**\n   * Define argument syntax for command, adding multiple at once (without descriptions).\n   *\n   * See also .argument().\n   *\n   * @example\n   * program.arguments('<cmd> [env]');\n   *\n   * @param {string} names\n   * @return {Command} `this` command for chaining\n   */\n\n  arguments(names) {\n    names\n      .trim()\n      .split(/ +/)\n      .forEach((detail) => {\n        this.argument(detail);\n      });\n    return this;\n  }\n\n  /**\n   * Define argument syntax for command, adding a prepared argument.\n   *\n   * @param {Argument} argument\n   * @return {Command} `this` command for chaining\n   */\n  addArgument(argument) {\n    const previousArgument = this.registeredArguments.slice(-1)[0];\n    if (previousArgument?.variadic) {\n      throw new Error(\n        `only the last argument can be variadic '${previousArgument.name()}'`,\n      );\n    }\n    if (\n      argument.required &&\n      argument.defaultValue !== undefined &&\n      argument.parseArg === undefined\n    ) {\n      throw new Error(\n        `a default value for a required argument is never used: '${argument.name()}'`,\n      );\n    }\n    this.registeredArguments.push(argument);\n    return this;\n  }\n\n  /**\n   * Customise or override default help command. By default a help command is automatically added if your command has subcommands.\n   *\n   * @example\n   *    program.helpCommand('help [cmd]');\n   *    program.helpCommand('help [cmd]', 'show help');\n   *    program.helpCommand(false); // suppress default help command\n   *    program.helpCommand(true); // add help command even if no subcommands\n   *\n   * @param {string|boolean} enableOrNameAndArgs - enable with custom name and/or arguments, or boolean to override whether added\n   * @param {string} [description] - custom description\n   * @return {Command} `this` command for chaining\n   */\n\n  helpCommand(enableOrNameAndArgs, description) {\n    if (typeof enableOrNameAndArgs === 'boolean') {\n      this._addImplicitHelpCommand = enableOrNameAndArgs;\n      if (enableOrNameAndArgs && this._defaultCommandGroup) {\n        // make the command to store the group\n        this._initCommandGroup(this._getHelpCommand());\n      }\n      return this;\n    }\n\n    const nameAndArgs = enableOrNameAndArgs ?? 'help [command]';\n    const [, helpName, helpArgs] = nameAndArgs.match(/([^ ]+) *(.*)/);\n    const helpDescription = description ?? 'display help for command';\n\n    const helpCommand = this.createCommand(helpName);\n    helpCommand.helpOption(false);\n    if (helpArgs) helpCommand.arguments(helpArgs);\n    if (helpDescription) helpCommand.description(helpDescription);\n\n    this._addImplicitHelpCommand = true;\n    this._helpCommand = helpCommand;\n    // init group unless lazy create\n    if (enableOrNameAndArgs || description) this._initCommandGroup(helpCommand);\n\n    return this;\n  }\n\n  /**\n   * Add prepared custom help command.\n   *\n   * @param {(Command|string|boolean)} helpCommand - custom help command, or deprecated enableOrNameAndArgs as for `.helpCommand()`\n   * @param {string} [deprecatedDescription] - deprecated custom description used with custom name only\n   * @return {Command} `this` command for chaining\n   */\n  addHelpCommand(helpCommand, deprecatedDescription) {\n    // If not passed an object, call through to helpCommand for backwards compatibility,\n    // as addHelpCommand was originally used like helpCommand is now.\n    if (typeof helpCommand !== 'object') {\n      this.helpCommand(helpCommand, deprecatedDescription);\n      return this;\n    }\n\n    this._addImplicitHelpCommand = true;\n    this._helpCommand = helpCommand;\n    this._initCommandGroup(helpCommand);\n    return this;\n  }\n\n  /**\n   * Lazy create help command.\n   *\n   * @return {(Command|null)}\n   * @package\n   */\n  _getHelpCommand() {\n    const hasImplicitHelpCommand =\n      this._addImplicitHelpCommand ??\n      (this.commands.length &&\n        !this._actionHandler &&\n        !this._findCommand('help'));\n\n    if (hasImplicitHelpCommand) {\n      if (this._helpCommand === undefined) {\n        this.helpCommand(undefined, undefined); // use default name and description\n      }\n      return this._helpCommand;\n    }\n    return null;\n  }\n\n  /**\n   * Add hook for life cycle event.\n   *\n   * @param {string} event\n   * @param {Function} listener\n   * @return {Command} `this` command for chaining\n   */\n\n  hook(event, listener) {\n    const allowedValues = ['preSubcommand', 'preAction', 'postAction'];\n    if (!allowedValues.includes(event)) {\n      throw new Error(`Unexpected value for event passed to hook : '${event}'.\nExpecting one of '${allowedValues.join(\"', '\")}'`);\n    }\n    if (this._lifeCycleHooks[event]) {\n      this._lifeCycleHooks[event].push(listener);\n    } else {\n      this._lifeCycleHooks[event] = [listener];\n    }\n    return this;\n  }\n\n  /**\n   * Register callback to use as replacement for calling process.exit.\n   *\n   * @param {Function} [fn] optional callback which will be passed a CommanderError, defaults to throwing\n   * @return {Command} `this` command for chaining\n   */\n\n  exitOverride(fn) {\n    if (fn) {\n      this._exitCallback = fn;\n    } else {\n      this._exitCallback = (err) => {\n        if (err.code !== 'commander.executeSubCommandAsync') {\n          throw err;\n        } else {\n          // Async callback from spawn events, not useful to throw.\n        }\n      };\n    }\n    return this;\n  }\n\n  /**\n   * Call process.exit, and _exitCallback if defined.\n   *\n   * @param {number} exitCode exit code for using with process.exit\n   * @param {string} code an id string representing the error\n   * @param {string} message human-readable description of the error\n   * @return never\n   * @private\n   */\n\n  _exit(exitCode, code, message) {\n    if (this._exitCallback) {\n      this._exitCallback(new CommanderError(exitCode, code, message));\n      // Expecting this line is not reached.\n    }\n    process.exit(exitCode);\n  }\n\n  /**\n   * Register callback `fn` for the command.\n   *\n   * @example\n   * program\n   *   .command('serve')\n   *   .description('start service')\n   *   .action(function() {\n   *      // do work here\n   *   });\n   *\n   * @param {Function} fn\n   * @return {Command} `this` command for chaining\n   */\n\n  action(fn) {\n    const listener = (args) => {\n      // The .action callback takes an extra parameter which is the command or options.\n      const expectedArgsCount = this.registeredArguments.length;\n      const actionArgs = args.slice(0, expectedArgsCount);\n      if (this._storeOptionsAsProperties) {\n        actionArgs[expectedArgsCount] = this; // backwards compatible \"options\"\n      } else {\n        actionArgs[expectedArgsCount] = this.opts();\n      }\n      actionArgs.push(this);\n\n      return fn.apply(this, actionArgs);\n    };\n    this._actionHandler = listener;\n    return this;\n  }\n\n  /**\n   * Factory routine to create a new unattached option.\n   *\n   * See .option() for creating an attached option, which uses this routine to\n   * create the option. You can override createOption to return a custom option.\n   *\n   * @param {string} flags\n   * @param {string} [description]\n   * @return {Option} new option\n   */\n\n  createOption(flags, description) {\n    return new Option(flags, description);\n  }\n\n  /**\n   * Wrap parseArgs to catch 'commander.invalidArgument'.\n   *\n   * @param {(Option | Argument)} target\n   * @param {string} value\n   * @param {*} previous\n   * @param {string} invalidArgumentMessage\n   * @private\n   */\n\n  _callParseArg(target, value, previous, invalidArgumentMessage) {\n    try {\n      return target.parseArg(value, previous);\n    } catch (err) {\n      if (err.code === 'commander.invalidArgument') {\n        const message = `${invalidArgumentMessage} ${err.message}`;\n        this.error(message, { exitCode: err.exitCode, code: err.code });\n      }\n      throw err;\n    }\n  }\n\n  /**\n   * Check for option flag conflicts.\n   * Register option if no conflicts found, or throw on conflict.\n   *\n   * @param {Option} option\n   * @private\n   */\n\n  _registerOption(option) {\n    const matchingOption =\n      (option.short && this._findOption(option.short)) ||\n      (option.long && this._findOption(option.long));\n    if (matchingOption) {\n      const matchingFlag =\n        option.long && this._findOption(option.long)\n          ? option.long\n          : option.short;\n      throw new Error(`Cannot add option '${option.flags}'${this._name && ` to command '${this._name}'`} due to conflicting flag '${matchingFlag}'\n-  already used by option '${matchingOption.flags}'`);\n    }\n\n    this._initOptionGroup(option);\n    this.options.push(option);\n  }\n\n  /**\n   * Check for command name and alias conflicts with existing commands.\n   * Register command if no conflicts found, or throw on conflict.\n   *\n   * @param {Command} command\n   * @private\n   */\n\n  _registerCommand(command) {\n    const knownBy = (cmd) => {\n      return [cmd.name()].concat(cmd.aliases());\n    };\n\n    const alreadyUsed = knownBy(command).find((name) =>\n      this._findCommand(name),\n    );\n    if (alreadyUsed) {\n      const existingCmd = knownBy(this._findCommand(alreadyUsed)).join('|');\n      const newCmd = knownBy(command).join('|');\n      throw new Error(\n        `cannot add command '${newCmd}' as already have command '${existingCmd}'`,\n      );\n    }\n\n    this._initCommandGroup(command);\n    this.commands.push(command);\n  }\n\n  /**\n   * Add an option.\n   *\n   * @param {Option} option\n   * @return {Command} `this` command for chaining\n   */\n  addOption(option) {\n    this._registerOption(option);\n\n    const oname = option.name();\n    const name = option.attributeName();\n\n    // store default value\n    if (option.defaultValue !== undefined) {\n      this.setOptionValueWithSource(name, option.defaultValue, 'default');\n    }\n\n    // handler for cli and env supplied values\n    const handleOptionValue = (val, invalidValueMessage, valueSource) => {\n      // val is null for optional option used without an optional-argument.\n      // val is undefined for boolean and negated option.\n      if (val == null && option.presetArg !== undefined) {\n        val = option.presetArg;\n      }\n\n      // custom processing\n      const oldValue = this.getOptionValue(name);\n      if (val !== null && option.parseArg) {\n        val = this._callParseArg(option, val, oldValue, invalidValueMessage);\n      } else if (val !== null && option.variadic) {\n        val = option._collectValue(val, oldValue);\n      }\n\n      // Fill-in appropriate missing values. Long winded but easy to follow.\n      if (val == null) {\n        if (option.negate) {\n          val = false;\n        } else if (option.isBoolean() || option.optional) {\n          val = true;\n        } else {\n          val = ''; // not normal, parseArg might have failed or be a mock function for testing\n        }\n      }\n      this.setOptionValueWithSource(name, val, valueSource);\n    };\n\n    this.on('option:' + oname, (val) => {\n      const invalidValueMessage = `error: option '${option.flags}' argument '${val}' is invalid.`;\n      handleOptionValue(val, invalidValueMessage, 'cli');\n    });\n\n    if (option.envVar) {\n      this.on('optionEnv:' + oname, (val) => {\n        const invalidValueMessage = `error: option '${option.flags}' value '${val}' from env '${option.envVar}' is invalid.`;\n        handleOptionValue(val, invalidValueMessage, 'env');\n      });\n    }\n\n    return this;\n  }\n\n  /**\n   * Internal implementation shared by .option() and .requiredOption()\n   *\n   * @return {Command} `this` command for chaining\n   * @private\n   */\n  _optionEx(config, flags, description, fn, defaultValue) {\n    if (typeof flags === 'object' && flags instanceof Option) {\n      throw new Error(\n        'To add an Option object use addOption() instead of option() or requiredOption()',\n      );\n    }\n    const option = this.createOption(flags, description);\n    option.makeOptionMandatory(!!config.mandatory);\n    if (typeof fn === 'function') {\n      option.default(defaultValue).argParser(fn);\n    } else if (fn instanceof RegExp) {\n      // deprecated\n      const regex = fn;\n      fn = (val, def) => {\n        const m = regex.exec(val);\n        return m ? m[0] : def;\n      };\n      option.default(defaultValue).argParser(fn);\n    } else {\n      option.default(fn);\n    }\n\n    return this.addOption(option);\n  }\n\n  /**\n   * Define option with `flags`, `description`, and optional argument parsing function or `defaultValue` or both.\n   *\n   * The `flags` string contains the short and/or long flags, separated by comma, a pipe or space. A required\n   * option-argument is indicated by `<>` and an optional option-argument by `[]`.\n   *\n   * See the README for more details, and see also addOption() and requiredOption().\n   *\n   * @example\n   * program\n   *     .option('-p, --pepper', 'add pepper')\n   *     .option('--pt, --pizza-type <TYPE>', 'type of pizza') // required option-argument\n   *     .option('-c, --cheese [CHEESE]', 'add extra cheese', 'mozzarella') // optional option-argument with default\n   *     .option('-t, --tip <VALUE>', 'add tip to purchase cost', parseFloat) // custom parse function\n   *\n   * @param {string} flags\n   * @param {string} [description]\n   * @param {(Function|*)} [parseArg] - custom option processing function or default value\n   * @param {*} [defaultValue]\n   * @return {Command} `this` command for chaining\n   */\n\n  option(flags, description, parseArg, defaultValue) {\n    return this._optionEx({}, flags, description, parseArg, defaultValue);\n  }\n\n  /**\n   * Add a required option which must have a value after parsing. This usually means\n   * the option must be specified on the command line. (Otherwise the same as .option().)\n   *\n   * The `flags` string contains the short and/or long flags, separated by comma, a pipe or space.\n   *\n   * @param {string} flags\n   * @param {string} [description]\n   * @param {(Function|*)} [parseArg] - custom option processing function or default value\n   * @param {*} [defaultValue]\n   * @return {Command} `this` command for chaining\n   */\n\n  requiredOption(flags, description, parseArg, defaultValue) {\n    return this._optionEx(\n      { mandatory: true },\n      flags,\n      description,\n      parseArg,\n      defaultValue,\n    );\n  }\n\n  /**\n   * Alter parsing of short flags with optional values.\n   *\n   * @example\n   * // for `.option('-f,--flag [value]'):\n   * program.combineFlagAndOptionalValue(true);  // `-f80` is treated like `--flag=80`, this is the default behaviour\n   * program.combineFlagAndOptionalValue(false) // `-fb` is treated like `-f -b`\n   *\n   * @param {boolean} [combine] - if `true` or omitted, an optional value can be specified directly after the flag.\n   * @return {Command} `this` command for chaining\n   */\n  combineFlagAndOptionalValue(combine = true) {\n    this._combineFlagAndOptionalValue = !!combine;\n    return this;\n  }\n\n  /**\n   * Allow unknown options on the command line.\n   *\n   * @param {boolean} [allowUnknown] - if `true` or omitted, no error will be thrown for unknown options.\n   * @return {Command} `this` command for chaining\n   */\n  allowUnknownOption(allowUnknown = true) {\n    this._allowUnknownOption = !!allowUnknown;\n    return this;\n  }\n\n  /**\n   * Allow excess command-arguments on the command line. Pass false to make excess arguments an error.\n   *\n   * @param {boolean} [allowExcess] - if `true` or omitted, no error will be thrown for excess arguments.\n   * @return {Command} `this` command for chaining\n   */\n  allowExcessArguments(allowExcess = true) {\n    this._allowExcessArguments = !!allowExcess;\n    return this;\n  }\n\n  /**\n   * Enable positional options. Positional means global options are specified before subcommands which lets\n   * subcommands reuse the same option names, and also enables subcommands to turn on passThroughOptions.\n   * The default behaviour is non-positional and global options may appear anywhere on the command line.\n   *\n   * @param {boolean} [positional]\n   * @return {Command} `this` command for chaining\n   */\n  enablePositionalOptions(positional = true) {\n    this._enablePositionalOptions = !!positional;\n    return this;\n  }\n\n  /**\n   * Pass through options that come after command-arguments rather than treat them as command-options,\n   * so actual command-options come before command-arguments. Turning this on for a subcommand requires\n   * positional options to have been enabled on the program (parent commands).\n   * The default behaviour is non-positional and options may appear before or after command-arguments.\n   *\n   * @param {boolean} [passThrough] for unknown options.\n   * @return {Command} `this` command for chaining\n   */\n  passThroughOptions(passThrough = true) {\n    this._passThroughOptions = !!passThrough;\n    this._checkForBrokenPassThrough();\n    return this;\n  }\n\n  /**\n   * @private\n   */\n\n  _checkForBrokenPassThrough() {\n    if (\n      this.parent &&\n      this._passThroughOptions &&\n      !this.parent._enablePositionalOptions\n    ) {\n      throw new Error(\n        `passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`,\n      );\n    }\n  }\n\n  /**\n   * Whether to store option values as properties on command object,\n   * or store separately (specify false). In both cases the option values can be accessed using .opts().\n   *\n   * @param {boolean} [storeAsProperties=true]\n   * @return {Command} `this` command for chaining\n   */\n\n  storeOptionsAsProperties(storeAsProperties = true) {\n    if (this.options.length) {\n      throw new Error('call .storeOptionsAsProperties() before adding options');\n    }\n    if (Object.keys(this._optionValues).length) {\n      throw new Error(\n        'call .storeOptionsAsProperties() before setting option values',\n      );\n    }\n    this._storeOptionsAsProperties = !!storeAsProperties;\n    return this;\n  }\n\n  /**\n   * Retrieve option value.\n   *\n   * @param {string} key\n   * @return {object} value\n   */\n\n  getOptionValue(key) {\n    if (this._storeOptionsAsProperties) {\n      return this[key];\n    }\n    return this._optionValues[key];\n  }\n\n  /**\n   * Store option value.\n   *\n   * @param {string} key\n   * @param {object} value\n   * @return {Command} `this` command for chaining\n   */\n\n  setOptionValue(key, value) {\n    return this.setOptionValueWithSource(key, value, undefined);\n  }\n\n  /**\n   * Store option value and where the value came from.\n   *\n   * @param {string} key\n   * @param {object} value\n   * @param {string} source - expected values are default/config/env/cli/implied\n   * @return {Command} `this` command for chaining\n   */\n\n  setOptionValueWithSource(key, value, source) {\n    if (this._storeOptionsAsProperties) {\n      this[key] = value;\n    } else {\n      this._optionValues[key] = value;\n    }\n    this._optionValueSources[key] = source;\n    return this;\n  }\n\n  /**\n   * Get source of option value.\n   * Expected values are default | config | env | cli | implied\n   *\n   * @param {string} key\n   * @return {string}\n   */\n\n  getOptionValueSource(key) {\n    return this._optionValueSources[key];\n  }\n\n  /**\n   * Get source of option value. See also .optsWithGlobals().\n   * Expected values are default | config | env | cli | implied\n   *\n   * @param {string} key\n   * @return {string}\n   */\n\n  getOptionValueSourceWithGlobals(key) {\n    // global overwrites local, like optsWithGlobals\n    let source;\n    this._getCommandAndAncestors().forEach((cmd) => {\n      if (cmd.getOptionValueSource(key) !== undefined) {\n        source = cmd.getOptionValueSource(key);\n      }\n    });\n    return source;\n  }\n\n  /**\n   * Get user arguments from implied or explicit arguments.\n   * Side-effects: set _scriptPath if args included script. Used for default program name, and subcommand searches.\n   *\n   * @private\n   */\n\n  _prepareUserArgs(argv, parseOptions) {\n    if (argv !== undefined && !Array.isArray(argv)) {\n      throw new Error('first parameter to parse must be array or undefined');\n    }\n    parseOptions = parseOptions || {};\n\n    // auto-detect argument conventions if nothing supplied\n    if (argv === undefined && parseOptions.from === undefined) {\n      if (process.versions?.electron) {\n        parseOptions.from = 'electron';\n      }\n      // check node specific options for scenarios where user CLI args follow executable without scriptname\n      const execArgv = process.execArgv ?? [];\n      if (\n        execArgv.includes('-e') ||\n        execArgv.includes('--eval') ||\n        execArgv.includes('-p') ||\n        execArgv.includes('--print')\n      ) {\n        parseOptions.from = 'eval'; // internal usage, not documented\n      }\n    }\n\n    // default to using process.argv\n    if (argv === undefined) {\n      argv = process.argv;\n    }\n    this.rawArgs = argv.slice();\n\n    // extract the user args and scriptPath\n    let userArgs;\n    switch (parseOptions.from) {\n      case undefined:\n      case 'node':\n        this._scriptPath = argv[1];\n        userArgs = argv.slice(2);\n        break;\n      case 'electron':\n        // @ts-ignore: because defaultApp is an unknown property\n        if (process.defaultApp) {\n          this._scriptPath = argv[1];\n          userArgs = argv.slice(2);\n        } else {\n          userArgs = argv.slice(1);\n        }\n        break;\n      case 'user':\n        userArgs = argv.slice(0);\n        break;\n      case 'eval':\n        userArgs = argv.slice(1);\n        break;\n      default:\n        throw new Error(\n          `unexpected parse option { from: '${parseOptions.from}' }`,\n        );\n    }\n\n    // Find default name for program from arguments.\n    if (!this._name && this._scriptPath)\n      this.nameFromFilename(this._scriptPath);\n    this._name = this._name || 'program';\n\n    return userArgs;\n  }\n\n  /**\n   * Parse `argv`, setting options and invoking commands when defined.\n   *\n   * Use parseAsync instead of parse if any of your action handlers are async.\n   *\n   * Call with no parameters to parse `process.argv`. Detects Electron and special node options like `node --eval`. Easy mode!\n   *\n   * Or call with an array of strings to parse, and optionally where the user arguments start by specifying where the arguments are `from`:\n   * - `'node'`: default, `argv[0]` is the application and `argv[1]` is the script being run, with user arguments after that\n   * - `'electron'`: `argv[0]` is the application and `argv[1]` varies depending on whether the electron application is packaged\n   * - `'user'`: just user arguments\n   *\n   * @example\n   * program.parse(); // parse process.argv and auto-detect electron and special node flags\n   * program.parse(process.argv); // assume argv[0] is app and argv[1] is script\n   * program.parse(my-args, { from: 'user' }); // just user supplied arguments, nothing special about argv[0]\n   *\n   * @param {string[]} [argv] - optional, defaults to process.argv\n   * @param {object} [parseOptions] - optionally specify style of options with from: node/user/electron\n   * @param {string} [parseOptions.from] - where the args are from: 'node', 'user', 'electron'\n   * @return {Command} `this` command for chaining\n   */\n\n  parse(argv, parseOptions) {\n    this._prepareForParse();\n    const userArgs = this._prepareUserArgs(argv, parseOptions);\n    this._parseCommand([], userArgs);\n\n    return this;\n  }\n\n  /**\n   * Parse `argv`, setting options and invoking commands when defined.\n   *\n   * Call with no parameters to parse `process.argv`. Detects Electron and special node options like `node --eval`. Easy mode!\n   *\n   * Or call with an array of strings to parse, and optionally where the user arguments start by specifying where the arguments are `from`:\n   * - `'node'`: default, `argv[0]` is the application and `argv[1]` is the script being run, with user arguments after that\n   * - `'electron'`: `argv[0]` is the application and `argv[1]` varies depending on whether the electron application is packaged\n   * - `'user'`: just user arguments\n   *\n   * @example\n   * await program.parseAsync(); // parse process.argv and auto-detect electron and special node flags\n   * await program.parseAsync(process.argv); // assume argv[0] is app and argv[1] is script\n   * await program.parseAsync(my-args, { from: 'user' }); // just user supplied arguments, nothing special about argv[0]\n   *\n   * @param {string[]} [argv]\n   * @param {object} [parseOptions]\n   * @param {string} parseOptions.from - where the args are from: 'node', 'user', 'electron'\n   * @return {Promise}\n   */\n\n  async parseAsync(argv, parseOptions) {\n    this._prepareForParse();\n    const userArgs = this._prepareUserArgs(argv, parseOptions);\n    await this._parseCommand([], userArgs);\n\n    return this;\n  }\n\n  _prepareForParse() {\n    // Save the state the first time, then restore the state before each subsequent parse.\n    if (this._savedState === null) {\n      // Do the special default of lone negated option to true, now that we have all the options.\n      // Filter for negated options that have not been processed already.\n      this.options\n        .filter(\n          (option) =>\n            option.negate &&\n            option.defaultValue === undefined &&\n            this.getOptionValue(option.attributeName()) === undefined,\n        )\n        .forEach((option) => {\n          // check for lone negated option: --no-foo without a --foo option\n          const positiveLongFlag = option.long.replace(/^--no-/, '--');\n          if (!this._findOption(positiveLongFlag)) {\n            this.setOptionValueWithSource(\n              option.attributeName(),\n              true,\n              'default',\n            );\n          }\n        });\n\n      this.saveStateBeforeParse();\n    } else {\n      this.restoreStateBeforeParse();\n    }\n  }\n\n  /**\n   * Called the first time parse is called to save state and allow a restore before subsequent calls to parse.\n   * Not usually called directly, but available for subclasses to save their custom state.\n   *\n   * This is called in a lazy way. Only commands used in parsing chain will have state saved.\n   */\n  saveStateBeforeParse() {\n    this._savedState = {\n      // name is stable if supplied by author, but may be unspecified for root command and deduced during parsing\n      _name: this._name,\n      // option values before parse have default values (including false for negated options)\n      // shallow clones\n      _optionValues: { ...this._optionValues },\n      _optionValueSources: { ...this._optionValueSources },\n    };\n  }\n\n  /**\n   * Restore state before parse for calls after the first.\n   * Not usually called directly, but available for subclasses to save their custom state.\n   *\n   * This is called in a lazy way. Only commands used in parsing chain will have state restored.\n   */\n  restoreStateBeforeParse() {\n    if (this._storeOptionsAsProperties)\n      throw new Error(`Can not call parse again when storeOptionsAsProperties is true.\n- either make a new Command for each call to parse, or stop storing options as properties`);\n\n    // clear state from _prepareUserArgs\n    this._name = this._savedState._name;\n    this._scriptPath = null;\n    this.rawArgs = [];\n    // clear state from setOptionValueWithSource\n    this._optionValues = { ...this._savedState._optionValues };\n    this._optionValueSources = { ...this._savedState._optionValueSources };\n    // clear state from _parseCommand\n    this.args = [];\n    // clear state from _processArguments\n    this.processedArgs = [];\n  }\n\n  /**\n   * Throw if expected executable is missing. Add lots of help for author.\n   *\n   * @param {string} executableFile\n   * @param {string} executableDir\n   * @param {string} subcommandName\n   */\n  _checkForMissingExecutable(executableFile, executableDir, subcommandName) {\n    if (fs.existsSync(executableFile)) return;\n\n    const executableDirMessage = executableDir\n      ? `searched for local subcommand relative to directory '${executableDir}'`\n      : 'no directory for search for local subcommand, use .executableDir() to supply a custom directory';\n    const executableMissing = `'${executableFile}' does not exist\n - if '${subcommandName}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead\n - if the default executable name is not suitable, use the executableFile option to supply a custom name or path\n - ${executableDirMessage}`;\n    throw new Error(executableMissing);\n  }\n\n  /**\n   * Execute a sub-command executable.\n   *\n   * @private\n   */\n\n  _executeSubCommand(subcommand, args) {\n    args = args.slice();\n    const sourceExt = ['.js', '.ts', '.tsx', '.mjs', '.cjs'];\n\n    function findFile(baseDir, baseName) {\n      // Look for specified file\n      const localBin = path.resolve(baseDir, baseName);\n      if (fs.existsSync(localBin)) return localBin;\n\n      // Stop looking if candidate already has an expected extension.\n      if (sourceExt.includes(path.extname(baseName))) return undefined;\n\n      // Try all the extensions.\n      const foundExt = sourceExt.find((ext) =>\n        fs.existsSync(`${localBin}${ext}`),\n      );\n      if (foundExt) return `${localBin}${foundExt}`;\n\n      return undefined;\n    }\n\n    // Not checking for help first. Unlikely to have mandatory and executable, and can't robustly test for help flags in external command.\n    this._checkForMissingMandatoryOptions();\n    this._checkForConflictingOptions();\n\n    // executableFile and executableDir might be full path, or just a name\n    let executableFile =\n      subcommand._executableFile || `${this._name}-${subcommand._name}`;\n    let executableDir = this._executableDir || '';\n    if (this._scriptPath) {\n      let resolvedScriptPath; // resolve possible symlink for installed npm binary\n      try {\n        resolvedScriptPath = fs.realpathSync(this._scriptPath);\n      } catch {\n        resolvedScriptPath = this._scriptPath;\n      }\n      executableDir = path.resolve(\n        path.dirname(resolvedScriptPath),\n        executableDir,\n      );\n    }\n\n    // Look for a local file in preference to a command in PATH.\n    if (executableDir) {\n      let localFile = findFile(executableDir, executableFile);\n\n      // Legacy search using prefix of script name instead of command name\n      if (!localFile && !subcommand._executableFile && this._scriptPath) {\n        const legacyName = path.basename(\n          this._scriptPath,\n          path.extname(this._scriptPath),\n        );\n        if (legacyName !== this._name) {\n          localFile = findFile(\n            executableDir,\n            `${legacyName}-${subcommand._name}`,\n          );\n        }\n      }\n      executableFile = localFile || executableFile;\n    }\n\n    const launchWithNode = sourceExt.includes(path.extname(executableFile));\n\n    let proc;\n    if (process.platform !== 'win32') {\n      if (launchWithNode) {\n        args.unshift(executableFile);\n        // add executable arguments to spawn\n        args = incrementNodeInspectorPort(process.execArgv).concat(args);\n\n        proc = childProcess.spawn(process.argv[0], args, { stdio: 'inherit' });\n      } else {\n        proc = childProcess.spawn(executableFile, args, { stdio: 'inherit' });\n      }\n    } else {\n      this._checkForMissingExecutable(\n        executableFile,\n        executableDir,\n        subcommand._name,\n      );\n      args.unshift(executableFile);\n      // add executable arguments to spawn\n      args = incrementNodeInspectorPort(process.execArgv).concat(args);\n      proc = childProcess.spawn(process.execPath, args, { stdio: 'inherit' });\n    }\n\n    if (!proc.killed) {\n      // testing mainly to avoid leak warnings during unit tests with mocked spawn\n      const signals = ['SIGUSR1', 'SIGUSR2', 'SIGTERM', 'SIGINT', 'SIGHUP'];\n      signals.forEach((signal) => {\n        process.on(signal, () => {\n          if (proc.killed === false && proc.exitCode === null) {\n            // @ts-ignore because signals not typed to known strings\n            proc.kill(signal);\n          }\n        });\n      });\n    }\n\n    // By default terminate process when spawned process terminates.\n    const exitCallback = this._exitCallback;\n    proc.on('close', (code) => {\n      code = code ?? 1; // code is null if spawned process terminated due to a signal\n      if (!exitCallback) {\n        process.exit(code);\n      } else {\n        exitCallback(\n          new CommanderError(\n            code,\n            'commander.executeSubCommandAsync',\n            '(close)',\n          ),\n        );\n      }\n    });\n    proc.on('error', (err) => {\n      // @ts-ignore: because err.code is an unknown property\n      if (err.code === 'ENOENT') {\n        this._checkForMissingExecutable(\n          executableFile,\n          executableDir,\n          subcommand._name,\n        );\n        // @ts-ignore: because err.code is an unknown property\n      } else if (err.code === 'EACCES') {\n        throw new Error(`'${executableFile}' not executable`);\n      }\n      if (!exitCallback) {\n        process.exit(1);\n      } else {\n        const wrappedError = new CommanderError(\n          1,\n          'commander.executeSubCommandAsync',\n          '(error)',\n        );\n        wrappedError.nestedError = err;\n        exitCallback(wrappedError);\n      }\n    });\n\n    // Store the reference to the child process\n    this.runningCommand = proc;\n  }\n\n  /**\n   * @private\n   */\n\n  _dispatchSubcommand(commandName, operands, unknown) {\n    const subCommand = this._findCommand(commandName);\n    if (!subCommand) this.help({ error: true });\n\n    subCommand._prepareForParse();\n    let promiseChain;\n    promiseChain = this._chainOrCallSubCommandHook(\n      promiseChain,\n      subCommand,\n      'preSubcommand',\n    );\n    promiseChain = this._chainOrCall(promiseChain, () => {\n      if (subCommand._executableHandler) {\n        this._executeSubCommand(subCommand, operands.concat(unknown));\n      } else {\n        return subCommand._parseCommand(operands, unknown);\n      }\n    });\n    return promiseChain;\n  }\n\n  /**\n   * Invoke help directly if possible, or dispatch if necessary.\n   * e.g. help foo\n   *\n   * @private\n   */\n\n  _dispatchHelpCommand(subcommandName) {\n    if (!subcommandName) {\n      this.help();\n    }\n    const subCommand = this._findCommand(subcommandName);\n    if (subCommand && !subCommand._executableHandler) {\n      subCommand.help();\n    }\n\n    // Fallback to parsing the help flag to invoke the help.\n    return this._dispatchSubcommand(\n      subcommandName,\n      [],\n      [this._getHelpOption()?.long ?? this._getHelpOption()?.short ?? '--help'],\n    );\n  }\n\n  /**\n   * Check this.args against expected this.registeredArguments.\n   *\n   * @private\n   */\n\n  _checkNumberOfArguments() {\n    // too few\n    this.registeredArguments.forEach((arg, i) => {\n      if (arg.required && this.args[i] == null) {\n        this.missingArgument(arg.name());\n      }\n    });\n    // too many\n    if (\n      this.registeredArguments.length > 0 &&\n      this.registeredArguments[this.registeredArguments.length - 1].variadic\n    ) {\n      return;\n    }\n    if (this.args.length > this.registeredArguments.length) {\n      this._excessArguments(this.args);\n    }\n  }\n\n  /**\n   * Process this.args using this.registeredArguments and save as this.processedArgs!\n   *\n   * @private\n   */\n\n  _processArguments() {\n    const myParseArg = (argument, value, previous) => {\n      // Extra processing for nice error message on parsing failure.\n      let parsedValue = value;\n      if (value !== null && argument.parseArg) {\n        const invalidValueMessage = `error: command-argument value '${value}' is invalid for argument '${argument.name()}'.`;\n        parsedValue = this._callParseArg(\n          argument,\n          value,\n          previous,\n          invalidValueMessage,\n        );\n      }\n      return parsedValue;\n    };\n\n    this._checkNumberOfArguments();\n\n    const processedArgs = [];\n    this.registeredArguments.forEach((declaredArg, index) => {\n      let value = declaredArg.defaultValue;\n      if (declaredArg.variadic) {\n        // Collect together remaining arguments for passing together as an array.\n        if (index < this.args.length) {\n          value = this.args.slice(index);\n          if (declaredArg.parseArg) {\n            value = value.reduce((processed, v) => {\n              return myParseArg(declaredArg, v, processed);\n            }, declaredArg.defaultValue);\n          }\n        } else if (value === undefined) {\n          value = [];\n        }\n      } else if (index < this.args.length) {\n        value = this.args[index];\n        if (declaredArg.parseArg) {\n          value = myParseArg(declaredArg, value, declaredArg.defaultValue);\n        }\n      }\n      processedArgs[index] = value;\n    });\n    this.processedArgs = processedArgs;\n  }\n\n  /**\n   * Once we have a promise we chain, but call synchronously until then.\n   *\n   * @param {(Promise|undefined)} promise\n   * @param {Function} fn\n   * @return {(Promise|undefined)}\n   * @private\n   */\n\n  _chainOrCall(promise, fn) {\n    // thenable\n    if (promise?.then && typeof promise.then === 'function') {\n      // already have a promise, chain callback\n      return promise.then(() => fn());\n    }\n    // callback might return a promise\n    return fn();\n  }\n\n  /**\n   *\n   * @param {(Promise|undefined)} promise\n   * @param {string} event\n   * @return {(Promise|undefined)}\n   * @private\n   */\n\n  _chainOrCallHooks(promise, event) {\n    let result = promise;\n    const hooks = [];\n    this._getCommandAndAncestors()\n      .reverse()\n      .filter((cmd) => cmd._lifeCycleHooks[event] !== undefined)\n      .forEach((hookedCommand) => {\n        hookedCommand._lifeCycleHooks[event].forEach((callback) => {\n          hooks.push({ hookedCommand, callback });\n        });\n      });\n    if (event === 'postAction') {\n      hooks.reverse();\n    }\n\n    hooks.forEach((hookDetail) => {\n      result = this._chainOrCall(result, () => {\n        return hookDetail.callback(hookDetail.hookedCommand, this);\n      });\n    });\n    return result;\n  }\n\n  /**\n   *\n   * @param {(Promise|undefined)} promise\n   * @param {Command} subCommand\n   * @param {string} event\n   * @return {(Promise|undefined)}\n   * @private\n   */\n\n  _chainOrCallSubCommandHook(promise, subCommand, event) {\n    let result = promise;\n    if (this._lifeCycleHooks[event] !== undefined) {\n      this._lifeCycleHooks[event].forEach((hook) => {\n        result = this._chainOrCall(result, () => {\n          return hook(this, subCommand);\n        });\n      });\n    }\n    return result;\n  }\n\n  /**\n   * Process arguments in context of this command.\n   * Returns action result, in case it is a promise.\n   *\n   * @private\n   */\n\n  _parseCommand(operands, unknown) {\n    const parsed = this.parseOptions(unknown);\n    this._parseOptionsEnv(); // after cli, so parseArg not called on both cli and env\n    this._parseOptionsImplied();\n    operands = operands.concat(parsed.operands);\n    unknown = parsed.unknown;\n    this.args = operands.concat(unknown);\n\n    if (operands && this._findCommand(operands[0])) {\n      return this._dispatchSubcommand(operands[0], operands.slice(1), unknown);\n    }\n    if (\n      this._getHelpCommand() &&\n      operands[0] === this._getHelpCommand().name()\n    ) {\n      return this._dispatchHelpCommand(operands[1]);\n    }\n    if (this._defaultCommandName) {\n      this._outputHelpIfRequested(unknown); // Run the help for default command from parent rather than passing to default command\n      return this._dispatchSubcommand(\n        this._defaultCommandName,\n        operands,\n        unknown,\n      );\n    }\n    if (\n      this.commands.length &&\n      this.args.length === 0 &&\n      !this._actionHandler &&\n      !this._defaultCommandName\n    ) {\n      // probably missing subcommand and no handler, user needs help (and exit)\n      this.help({ error: true });\n    }\n\n    this._outputHelpIfRequested(parsed.unknown);\n    this._checkForMissingMandatoryOptions();\n    this._checkForConflictingOptions();\n\n    // We do not always call this check to avoid masking a \"better\" error, like unknown command.\n    const checkForUnknownOptions = () => {\n      if (parsed.unknown.length > 0) {\n        this.unknownOption(parsed.unknown[0]);\n      }\n    };\n\n    const commandEvent = `command:${this.name()}`;\n    if (this._actionHandler) {\n      checkForUnknownOptions();\n      this._processArguments();\n\n      let promiseChain;\n      promiseChain = this._chainOrCallHooks(promiseChain, 'preAction');\n      promiseChain = this._chainOrCall(promiseChain, () =>\n        this._actionHandler(this.processedArgs),\n      );\n      if (this.parent) {\n        promiseChain = this._chainOrCall(promiseChain, () => {\n          this.parent.emit(commandEvent, operands, unknown); // legacy\n        });\n      }\n      promiseChain = this._chainOrCallHooks(promiseChain, 'postAction');\n      return promiseChain;\n    }\n    if (this.parent?.listenerCount(commandEvent)) {\n      checkForUnknownOptions();\n      this._processArguments();\n      this.parent.emit(commandEvent, operands, unknown); // legacy\n    } else if (operands.length) {\n      if (this._findCommand('*')) {\n        // legacy default command\n        return this._dispatchSubcommand('*', operands, unknown);\n      }\n      if (this.listenerCount('command:*')) {\n        // skip option check, emit event for possible misspelling suggestion\n        this.emit('command:*', operands, unknown);\n      } else if (this.commands.length) {\n        this.unknownCommand();\n      } else {\n        checkForUnknownOptions();\n        this._processArguments();\n      }\n    } else if (this.commands.length) {\n      checkForUnknownOptions();\n      // This command has subcommands and nothing hooked up at this level, so display help (and exit).\n      this.help({ error: true });\n    } else {\n      checkForUnknownOptions();\n      this._processArguments();\n      // fall through for caller to handle after calling .parse()\n    }\n  }\n\n  /**\n   * Find matching command.\n   *\n   * @private\n   * @return {Command | undefined}\n   */\n  _findCommand(name) {\n    if (!name) return undefined;\n    return this.commands.find(\n      (cmd) => cmd._name === name || cmd._aliases.includes(name),\n    );\n  }\n\n  /**\n   * Return an option matching `arg` if any.\n   *\n   * @param {string} arg\n   * @return {Option}\n   * @package\n   */\n\n  _findOption(arg) {\n    return this.options.find((option) => option.is(arg));\n  }\n\n  /**\n   * Display an error message if a mandatory option does not have a value.\n   * Called after checking for help flags in leaf subcommand.\n   *\n   * @private\n   */\n\n  _checkForMissingMandatoryOptions() {\n    // Walk up hierarchy so can call in subcommand after checking for displaying help.\n    this._getCommandAndAncestors().forEach((cmd) => {\n      cmd.options.forEach((anOption) => {\n        if (\n          anOption.mandatory &&\n          cmd.getOptionValue(anOption.attributeName()) === undefined\n        ) {\n          cmd.missingMandatoryOptionValue(anOption);\n        }\n      });\n    });\n  }\n\n  /**\n   * Display an error message if conflicting options are used together in this.\n   *\n   * @private\n   */\n  _checkForConflictingLocalOptions() {\n    const definedNonDefaultOptions = this.options.filter((option) => {\n      const optionKey = option.attributeName();\n      if (this.getOptionValue(optionKey) === undefined) {\n        return false;\n      }\n      return this.getOptionValueSource(optionKey) !== 'default';\n    });\n\n    const optionsWithConflicting = definedNonDefaultOptions.filter(\n      (option) => option.conflictsWith.length > 0,\n    );\n\n    optionsWithConflicting.forEach((option) => {\n      const conflictingAndDefined = definedNonDefaultOptions.find((defined) =>\n        option.conflictsWith.includes(defined.attributeName()),\n      );\n      if (conflictingAndDefined) {\n        this._conflictingOption(option, conflictingAndDefined);\n      }\n    });\n  }\n\n  /**\n   * Display an error message if conflicting options are used together.\n   * Called after checking for help flags in leaf subcommand.\n   *\n   * @private\n   */\n  _checkForConflictingOptions() {\n    // Walk up hierarchy so can call in subcommand after checking for displaying help.\n    this._getCommandAndAncestors().forEach((cmd) => {\n      cmd._checkForConflictingLocalOptions();\n    });\n  }\n\n  /**\n   * Parse options from `argv` removing known options,\n   * and return argv split into operands and unknown arguments.\n   *\n   * Side effects: modifies command by storing options. Does not reset state if called again.\n   *\n   * Examples:\n   *\n   *     argv => operands, unknown\n   *     --known kkk op => [op], []\n   *     op --known kkk => [op], []\n   *     sub --unknown uuu op => [sub], [--unknown uuu op]\n   *     sub -- --unknown uuu op => [sub --unknown uuu op], []\n   *\n   * @param {string[]} args\n   * @return {{operands: string[], unknown: string[]}}\n   */\n\n  parseOptions(args) {\n    const operands = []; // operands, not options or values\n    const unknown = []; // first unknown option and remaining unknown args\n    let dest = operands;\n\n    function maybeOption(arg) {\n      return arg.length > 1 && arg[0] === '-';\n    }\n\n    const negativeNumberArg = (arg) => {\n      // return false if not a negative number\n      if (!/^-(\\d+|\\d*\\.\\d+)(e[+-]?\\d+)?$/.test(arg)) return false;\n      // negative number is ok unless digit used as an option in command hierarchy\n      return !this._getCommandAndAncestors().some((cmd) =>\n        cmd.options\n          .map((opt) => opt.short)\n          .some((short) => /^-\\d$/.test(short)),\n      );\n    };\n\n    // parse options\n    let activeVariadicOption = null;\n    let activeGroup = null; // working through group of short options, like -abc\n    let i = 0;\n    while (i < args.length || activeGroup) {\n      const arg = activeGroup ?? args[i++];\n      activeGroup = null;\n\n      // literal\n      if (arg === '--') {\n        if (dest === unknown) dest.push(arg);\n        dest.push(...args.slice(i));\n        break;\n      }\n\n      if (\n        activeVariadicOption &&\n        (!maybeOption(arg) || negativeNumberArg(arg))\n      ) {\n        this.emit(`option:${activeVariadicOption.name()}`, arg);\n        continue;\n      }\n      activeVariadicOption = null;\n\n      if (maybeOption(arg)) {\n        const option = this._findOption(arg);\n        // recognised option, call listener to assign value with possible custom processing\n        if (option) {\n          if (option.required) {\n            const value = args[i++];\n            if (value === undefined) this.optionMissingArgument(option);\n            this.emit(`option:${option.name()}`, value);\n          } else if (option.optional) {\n            let value = null;\n            // historical behaviour is optional value is following arg unless an option\n            if (\n              i < args.length &&\n              (!maybeOption(args[i]) || negativeNumberArg(args[i]))\n            ) {\n              value = args[i++];\n            }\n            this.emit(`option:${option.name()}`, value);\n          } else {\n            // boolean flag\n            this.emit(`option:${option.name()}`);\n          }\n          activeVariadicOption = option.variadic ? option : null;\n          continue;\n        }\n      }\n\n      // Look for combo options following single dash, eat first one if known.\n      if (arg.length > 2 && arg[0] === '-' && arg[1] !== '-') {\n        const option = this._findOption(`-${arg[1]}`);\n        if (option) {\n          if (\n            option.required ||\n            (option.optional && this._combineFlagAndOptionalValue)\n          ) {\n            // option with value following in same argument\n            this.emit(`option:${option.name()}`, arg.slice(2));\n          } else {\n            // boolean option\n            this.emit(`option:${option.name()}`);\n            // remove the processed option and keep processing group\n            activeGroup = `-${arg.slice(2)}`;\n          }\n          continue;\n        }\n      }\n\n      // Look for known long flag with value, like --foo=bar\n      if (/^--[^=]+=/.test(arg)) {\n        const index = arg.indexOf('=');\n        const option = this._findOption(arg.slice(0, index));\n        if (option && (option.required || option.optional)) {\n          this.emit(`option:${option.name()}`, arg.slice(index + 1));\n          continue;\n        }\n      }\n\n      // Not a recognised option by this command.\n      // Might be a command-argument, or subcommand option, or unknown option, or help command or option.\n\n      // An unknown option means further arguments also classified as unknown so can be reprocessed by subcommands.\n      // A negative number in a leaf command is not an unknown option.\n      if (\n        dest === operands &&\n        maybeOption(arg) &&\n        !(this.commands.length === 0 && negativeNumberArg(arg))\n      ) {\n        dest = unknown;\n      }\n\n      // If using positionalOptions, stop processing our options at subcommand.\n      if (\n        (this._enablePositionalOptions || this._passThroughOptions) &&\n        operands.length === 0 &&\n        unknown.length === 0\n      ) {\n        if (this._findCommand(arg)) {\n          operands.push(arg);\n          unknown.push(...args.slice(i));\n          break;\n        } else if (\n          this._getHelpCommand() &&\n          arg === this._getHelpCommand().name()\n        ) {\n          operands.push(arg, ...args.slice(i));\n          break;\n        } else if (this._defaultCommandName) {\n          unknown.push(arg, ...args.slice(i));\n          break;\n        }\n      }\n\n      // If using passThroughOptions, stop processing options at first command-argument.\n      if (this._passThroughOptions) {\n        dest.push(arg, ...args.slice(i));\n        break;\n      }\n\n      // add arg\n      dest.push(arg);\n    }\n\n    return { operands, unknown };\n  }\n\n  /**\n   * Return an object containing local option values as key-value pairs.\n   *\n   * @return {object}\n   */\n  opts() {\n    if (this._storeOptionsAsProperties) {\n      // Preserve original behaviour so backwards compatible when still using properties\n      const result = {};\n      const len = this.options.length;\n\n      for (let i = 0; i < len; i++) {\n        const key = this.options[i].attributeName();\n        result[key] =\n          key === this._versionOptionName ? this._version : this[key];\n      }\n      return result;\n    }\n\n    return this._optionValues;\n  }\n\n  /**\n   * Return an object containing merged local and global option values as key-value pairs.\n   *\n   * @return {object}\n   */\n  optsWithGlobals() {\n    // globals overwrite locals\n    return this._getCommandAndAncestors().reduce(\n      (combinedOptions, cmd) => Object.assign(combinedOptions, cmd.opts()),\n      {},\n    );\n  }\n\n  /**\n   * Display error message and exit (or call exitOverride).\n   *\n   * @param {string} message\n   * @param {object} [errorOptions]\n   * @param {string} [errorOptions.code] - an id string representing the error\n   * @param {number} [errorOptions.exitCode] - used with process.exit\n   */\n  error(message, errorOptions) {\n    // output handling\n    this._outputConfiguration.outputError(\n      `${message}\\n`,\n      this._outputConfiguration.writeErr,\n    );\n    if (typeof this._showHelpAfterError === 'string') {\n      this._outputConfiguration.writeErr(`${this._showHelpAfterError}\\n`);\n    } else if (this._showHelpAfterError) {\n      this._outputConfiguration.writeErr('\\n');\n      this.outputHelp({ error: true });\n    }\n\n    // exit handling\n    const config = errorOptions || {};\n    const exitCode = config.exitCode || 1;\n    const code = config.code || 'commander.error';\n    this._exit(exitCode, code, message);\n  }\n\n  /**\n   * Apply any option related environment variables, if option does\n   * not have a value from cli or client code.\n   *\n   * @private\n   */\n  _parseOptionsEnv() {\n    this.options.forEach((option) => {\n      if (option.envVar && option.envVar in process.env) {\n        const optionKey = option.attributeName();\n        // Priority check. Do not overwrite cli or options from unknown source (client-code).\n        if (\n          this.getOptionValue(optionKey) === undefined ||\n          ['default', 'config', 'env'].includes(\n            this.getOptionValueSource(optionKey),\n          )\n        ) {\n          if (option.required || option.optional) {\n            // option can take a value\n            // keep very simple, optional always takes value\n            this.emit(`optionEnv:${option.name()}`, process.env[option.envVar]);\n          } else {\n            // boolean\n            // keep very simple, only care that envVar defined and not the value\n            this.emit(`optionEnv:${option.name()}`);\n          }\n        }\n      }\n    });\n  }\n\n  /**\n   * Apply any implied option values, if option is undefined or default value.\n   *\n   * @private\n   */\n  _parseOptionsImplied() {\n    const dualHelper = new DualOptions(this.options);\n    const hasCustomOptionValue = (optionKey) => {\n      return (\n        this.getOptionValue(optionKey) !== undefined &&\n        !['default', 'implied'].includes(this.getOptionValueSource(optionKey))\n      );\n    };\n    this.options\n      .filter(\n        (option) =>\n          option.implied !== undefined &&\n          hasCustomOptionValue(option.attributeName()) &&\n          dualHelper.valueFromOption(\n            this.getOptionValue(option.attributeName()),\n            option,\n          ),\n      )\n      .forEach((option) => {\n        Object.keys(option.implied)\n          .filter((impliedKey) => !hasCustomOptionValue(impliedKey))\n          .forEach((impliedKey) => {\n            this.setOptionValueWithSource(\n              impliedKey,\n              option.implied[impliedKey],\n              'implied',\n            );\n          });\n      });\n  }\n\n  /**\n   * Argument `name` is missing.\n   *\n   * @param {string} name\n   * @private\n   */\n\n  missingArgument(name) {\n    const message = `error: missing required argument '${name}'`;\n    this.error(message, { code: 'commander.missingArgument' });\n  }\n\n  /**\n   * `Option` is missing an argument.\n   *\n   * @param {Option} option\n   * @private\n   */\n\n  optionMissingArgument(option) {\n    const message = `error: option '${option.flags}' argument missing`;\n    this.error(message, { code: 'commander.optionMissingArgument' });\n  }\n\n  /**\n   * `Option` does not have a value, and is a mandatory option.\n   *\n   * @param {Option} option\n   * @private\n   */\n\n  missingMandatoryOptionValue(option) {\n    const message = `error: required option '${option.flags}' not specified`;\n    this.error(message, { code: 'commander.missingMandatoryOptionValue' });\n  }\n\n  /**\n   * `Option` conflicts with another option.\n   *\n   * @param {Option} option\n   * @param {Option} conflictingOption\n   * @private\n   */\n  _conflictingOption(option, conflictingOption) {\n    // The calling code does not know whether a negated option is the source of the\n    // value, so do some work to take an educated guess.\n    const findBestOptionFromValue = (option) => {\n      const optionKey = option.attributeName();\n      const optionValue = this.getOptionValue(optionKey);\n      const negativeOption = this.options.find(\n        (target) => target.negate && optionKey === target.attributeName(),\n      );\n      const positiveOption = this.options.find(\n        (target) => !target.negate && optionKey === target.attributeName(),\n      );\n      if (\n        negativeOption &&\n        ((negativeOption.presetArg === undefined && optionValue === false) ||\n          (negativeOption.presetArg !== undefined &&\n            optionValue === negativeOption.presetArg))\n      ) {\n        return negativeOption;\n      }\n      return positiveOption || option;\n    };\n\n    const getErrorMessage = (option) => {\n      const bestOption = findBestOptionFromValue(option);\n      const optionKey = bestOption.attributeName();\n      const source = this.getOptionValueSource(optionKey);\n      if (source === 'env') {\n        return `environment variable '${bestOption.envVar}'`;\n      }\n      return `option '${bestOption.flags}'`;\n    };\n\n    const message = `error: ${getErrorMessage(option)} cannot be used with ${getErrorMessage(conflictingOption)}`;\n    this.error(message, { code: 'commander.conflictingOption' });\n  }\n\n  /**\n   * Unknown option `flag`.\n   *\n   * @param {string} flag\n   * @private\n   */\n\n  unknownOption(flag) {\n    if (this._allowUnknownOption) return;\n    let suggestion = '';\n\n    if (flag.startsWith('--') && this._showSuggestionAfterError) {\n      // Looping to pick up the global options too\n      let candidateFlags = [];\n      // eslint-disable-next-line @typescript-eslint/no-this-alias\n      let command = this;\n      do {\n        const moreFlags = command\n          .createHelp()\n          .visibleOptions(command)\n          .filter((option) => option.long)\n          .map((option) => option.long);\n        candidateFlags = candidateFlags.concat(moreFlags);\n        command = command.parent;\n      } while (command && !command._enablePositionalOptions);\n      suggestion = suggestSimilar(flag, candidateFlags);\n    }\n\n    const message = `error: unknown option '${flag}'${suggestion}`;\n    this.error(message, { code: 'commander.unknownOption' });\n  }\n\n  /**\n   * Excess arguments, more than expected.\n   *\n   * @param {string[]} receivedArgs\n   * @private\n   */\n\n  _excessArguments(receivedArgs) {\n    if (this._allowExcessArguments) return;\n\n    const expected = this.registeredArguments.length;\n    const s = expected === 1 ? '' : 's';\n    const received = receivedArgs.length;\n    const forSubcommand = this.parent ? ` for '${this.name()}'` : '';\n    const details = receivedArgs.join(', ');\n    const message = `error: too many arguments${forSubcommand}. Expected ${expected} argument${s} but got ${received}: ${details}.`;\n    this.error(message, { code: 'commander.excessArguments' });\n  }\n\n  /**\n   * Unknown command.\n   *\n   * @private\n   */\n\n  unknownCommand() {\n    const unknownName = this.args[0];\n    let suggestion = '';\n\n    if (this._showSuggestionAfterError) {\n      const candidateNames = [];\n      this.createHelp()\n        .visibleCommands(this)\n        .forEach((command) => {\n          candidateNames.push(command.name());\n          // just visible alias\n          if (command.alias()) candidateNames.push(command.alias());\n        });\n      suggestion = suggestSimilar(unknownName, candidateNames);\n    }\n\n    const message = `error: unknown command '${unknownName}'${suggestion}`;\n    this.error(message, { code: 'commander.unknownCommand' });\n  }\n\n  /**\n   * Get or set the program version.\n   *\n   * This method auto-registers the \"-V, --version\" option which will print the version number.\n   *\n   * You can optionally supply the flags and description to override the defaults.\n   *\n   * @param {string} [str]\n   * @param {string} [flags]\n   * @param {string} [description]\n   * @return {(this | string | undefined)} `this` command for chaining, or version string if no arguments\n   */\n\n  version(str, flags, description) {\n    if (str === undefined) return this._version;\n    this._version = str;\n    flags = flags || '-V, --version';\n    description = description || 'output the version number';\n    const versionOption = this.createOption(flags, description);\n    this._versionOptionName = versionOption.attributeName();\n    this._registerOption(versionOption);\n\n    this.on('option:' + versionOption.name(), () => {\n      this._outputConfiguration.writeOut(`${str}\\n`);\n      this._exit(0, 'commander.version', str);\n    });\n    return this;\n  }\n\n  /**\n   * Set the description.\n   *\n   * @param {string} [str]\n   * @param {object} [argsDescription]\n   * @return {(string|Command)}\n   */\n  description(str, argsDescription) {\n    if (str === undefined && argsDescription === undefined)\n      return this._description;\n    this._description = str;\n    if (argsDescription) {\n      this._argsDescription = argsDescription;\n    }\n    return this;\n  }\n\n  /**\n   * Set the summary. Used when listed as subcommand of parent.\n   *\n   * @param {string} [str]\n   * @return {(string|Command)}\n   */\n  summary(str) {\n    if (str === undefined) return this._summary;\n    this._summary = str;\n    return this;\n  }\n\n  /**\n   * Set an alias for the command.\n   *\n   * You may call more than once to add multiple aliases. Only the first alias is shown in the auto-generated help.\n   *\n   * @param {string} [alias]\n   * @return {(string|Command)}\n   */\n\n  alias(alias) {\n    if (alias === undefined) return this._aliases[0]; // just return first, for backwards compatibility\n\n    /** @type {Command} */\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    let command = this;\n    if (\n      this.commands.length !== 0 &&\n      this.commands[this.commands.length - 1]._executableHandler\n    ) {\n      // assume adding alias for last added executable subcommand, rather than this\n      command = this.commands[this.commands.length - 1];\n    }\n\n    if (alias === command._name)\n      throw new Error(\"Command alias can't be the same as its name\");\n    const matchingCommand = this.parent?._findCommand(alias);\n    if (matchingCommand) {\n      // c.f. _registerCommand\n      const existingCmd = [matchingCommand.name()]\n        .concat(matchingCommand.aliases())\n        .join('|');\n      throw new Error(\n        `cannot add alias '${alias}' to command '${this.name()}' as already have command '${existingCmd}'`,\n      );\n    }\n\n    command._aliases.push(alias);\n    return this;\n  }\n\n  /**\n   * Set aliases for the command.\n   *\n   * Only the first alias is shown in the auto-generated help.\n   *\n   * @param {string[]} [aliases]\n   * @return {(string[]|Command)}\n   */\n\n  aliases(aliases) {\n    // Getter for the array of aliases is the main reason for having aliases() in addition to alias().\n    if (aliases === undefined) return this._aliases;\n\n    aliases.forEach((alias) => this.alias(alias));\n    return this;\n  }\n\n  /**\n   * Set / get the command usage `str`.\n   *\n   * @param {string} [str]\n   * @return {(string|Command)}\n   */\n\n  usage(str) {\n    if (str === undefined) {\n      if (this._usage) return this._usage;\n\n      const args = this.registeredArguments.map((arg) => {\n        return humanReadableArgName(arg);\n      });\n      return []\n        .concat(\n          this.options.length || this._helpOption !== null ? '[options]' : [],\n          this.commands.length ? '[command]' : [],\n          this.registeredArguments.length ? args : [],\n        )\n        .join(' ');\n    }\n\n    this._usage = str;\n    return this;\n  }\n\n  /**\n   * Get or set the name of the command.\n   *\n   * @param {string} [str]\n   * @return {(string|Command)}\n   */\n\n  name(str) {\n    if (str === undefined) return this._name;\n    this._name = str;\n    return this;\n  }\n\n  /**\n   * Set/get the help group heading for this subcommand in parent command's help.\n   *\n   * @param {string} [heading]\n   * @return {Command | string}\n   */\n\n  helpGroup(heading) {\n    if (heading === undefined) return this._helpGroupHeading ?? '';\n    this._helpGroupHeading = heading;\n    return this;\n  }\n\n  /**\n   * Set/get the default help group heading for subcommands added to this command.\n   * (This does not override a group set directly on the subcommand using .helpGroup().)\n   *\n   * @example\n   * program.commandsGroup('Development Commands:);\n   * program.command('watch')...\n   * program.command('lint')...\n   * ...\n   *\n   * @param {string} [heading]\n   * @returns {Command | string}\n   */\n  commandsGroup(heading) {\n    if (heading === undefined) return this._defaultCommandGroup ?? '';\n    this._defaultCommandGroup = heading;\n    return this;\n  }\n\n  /**\n   * Set/get the default help group heading for options added to this command.\n   * (This does not override a group set directly on the option using .helpGroup().)\n   *\n   * @example\n   * program\n   *   .optionsGroup('Development Options:')\n   *   .option('-d, --debug', 'output extra debugging')\n   *   .option('-p, --profile', 'output profiling information')\n   *\n   * @param {string} [heading]\n   * @returns {Command | string}\n   */\n  optionsGroup(heading) {\n    if (heading === undefined) return this._defaultOptionGroup ?? '';\n    this._defaultOptionGroup = heading;\n    return this;\n  }\n\n  /**\n   * @param {Option} option\n   * @private\n   */\n  _initOptionGroup(option) {\n    if (this._defaultOptionGroup && !option.helpGroupHeading)\n      option.helpGroup(this._defaultOptionGroup);\n  }\n\n  /**\n   * @param {Command} cmd\n   * @private\n   */\n  _initCommandGroup(cmd) {\n    if (this._defaultCommandGroup && !cmd.helpGroup())\n      cmd.helpGroup(this._defaultCommandGroup);\n  }\n\n  /**\n   * Set the name of the command from script filename, such as process.argv[1],\n   * or import.meta.filename.\n   *\n   * (Used internally and public although not documented in README.)\n   *\n   * @example\n   * program.nameFromFilename(import.meta.filename);\n   *\n   * @param {string} filename\n   * @return {Command}\n   */\n\n  nameFromFilename(filename) {\n    this._name = path.basename(filename, path.extname(filename));\n\n    return this;\n  }\n\n  /**\n   * Get or set the directory for searching for executable subcommands of this command.\n   *\n   * @example\n   * program.executableDir(import.meta.dirname);\n   * // or\n   * program.executableDir('subcommands');\n   *\n   * @param {string} [path]\n   * @return {(string|null|Command)}\n   */\n\n  executableDir(path) {\n    if (path === undefined) return this._executableDir;\n    this._executableDir = path;\n    return this;\n  }\n\n  /**\n   * Return program help documentation.\n   *\n   * @param {{ error: boolean }} [contextOptions] - pass {error:true} to wrap for stderr instead of stdout\n   * @return {string}\n   */\n\n  helpInformation(contextOptions) {\n    const helper = this.createHelp();\n    const context = this._getOutputContext(contextOptions);\n    helper.prepareContext({\n      error: context.error,\n      helpWidth: context.helpWidth,\n      outputHasColors: context.hasColors,\n    });\n    const text = helper.formatHelp(this, helper);\n    if (context.hasColors) return text;\n    return this._outputConfiguration.stripColor(text);\n  }\n\n  /**\n   * @typedef HelpContext\n   * @type {object}\n   * @property {boolean} error\n   * @property {number} helpWidth\n   * @property {boolean} hasColors\n   * @property {function} write - includes stripColor if needed\n   *\n   * @returns {HelpContext}\n   * @private\n   */\n\n  _getOutputContext(contextOptions) {\n    contextOptions = contextOptions || {};\n    const error = !!contextOptions.error;\n    let baseWrite;\n    let hasColors;\n    let helpWidth;\n    if (error) {\n      baseWrite = (str) => this._outputConfiguration.writeErr(str);\n      hasColors = this._outputConfiguration.getErrHasColors();\n      helpWidth = this._outputConfiguration.getErrHelpWidth();\n    } else {\n      baseWrite = (str) => this._outputConfiguration.writeOut(str);\n      hasColors = this._outputConfiguration.getOutHasColors();\n      helpWidth = this._outputConfiguration.getOutHelpWidth();\n    }\n    const write = (str) => {\n      if (!hasColors) str = this._outputConfiguration.stripColor(str);\n      return baseWrite(str);\n    };\n    return { error, write, hasColors, helpWidth };\n  }\n\n  /**\n   * Output help information for this command.\n   *\n   * Outputs built-in help, and custom text added using `.addHelpText()`.\n   *\n   * @param {{ error: boolean } | Function} [contextOptions] - pass {error:true} to write to stderr instead of stdout\n   */\n\n  outputHelp(contextOptions) {\n    let deprecatedCallback;\n    if (typeof contextOptions === 'function') {\n      deprecatedCallback = contextOptions;\n      contextOptions = undefined;\n    }\n\n    const outputContext = this._getOutputContext(contextOptions);\n    /** @type {HelpTextEventContext} */\n    const eventContext = {\n      error: outputContext.error,\n      write: outputContext.write,\n      command: this,\n    };\n\n    this._getCommandAndAncestors()\n      .reverse()\n      .forEach((command) => command.emit('beforeAllHelp', eventContext));\n    this.emit('beforeHelp', eventContext);\n\n    let helpInformation = this.helpInformation({ error: outputContext.error });\n    if (deprecatedCallback) {\n      helpInformation = deprecatedCallback(helpInformation);\n      if (\n        typeof helpInformation !== 'string' &&\n        !Buffer.isBuffer(helpInformation)\n      ) {\n        throw new Error('outputHelp callback must return a string or a Buffer');\n      }\n    }\n    outputContext.write(helpInformation);\n\n    if (this._getHelpOption()?.long) {\n      this.emit(this._getHelpOption().long); // deprecated\n    }\n    this.emit('afterHelp', eventContext);\n    this._getCommandAndAncestors().forEach((command) =>\n      command.emit('afterAllHelp', eventContext),\n    );\n  }\n\n  /**\n   * You can pass in flags and a description to customise the built-in help option.\n   * Pass in false to disable the built-in help option.\n   *\n   * @example\n   * program.helpOption('-?, --help' 'show help'); // customise\n   * program.helpOption(false); // disable\n   *\n   * @param {(string | boolean)} flags\n   * @param {string} [description]\n   * @return {Command} `this` command for chaining\n   */\n\n  helpOption(flags, description) {\n    // Support enabling/disabling built-in help option.\n    if (typeof flags === 'boolean') {\n      if (flags) {\n        if (this._helpOption === null) this._helpOption = undefined; // reenable\n        if (this._defaultOptionGroup) {\n          // make the option to store the group\n          this._initOptionGroup(this._getHelpOption());\n        }\n      } else {\n        this._helpOption = null; // disable\n      }\n      return this;\n    }\n\n    // Customise flags and description.\n    this._helpOption = this.createOption(\n      flags ?? '-h, --help',\n      description ?? 'display help for command',\n    );\n    // init group unless lazy create\n    if (flags || description) this._initOptionGroup(this._helpOption);\n\n    return this;\n  }\n\n  /**\n   * Lazy create help option.\n   * Returns null if has been disabled with .helpOption(false).\n   *\n   * @returns {(Option | null)} the help option\n   * @package\n   */\n  _getHelpOption() {\n    // Lazy create help option on demand.\n    if (this._helpOption === undefined) {\n      this.helpOption(undefined, undefined);\n    }\n    return this._helpOption;\n  }\n\n  /**\n   * Supply your own option to use for the built-in help option.\n   * This is an alternative to using helpOption() to customise the flags and description etc.\n   *\n   * @param {Option} option\n   * @return {Command} `this` command for chaining\n   */\n  addHelpOption(option) {\n    this._helpOption = option;\n    this._initOptionGroup(option);\n    return this;\n  }\n\n  /**\n   * Output help information and exit.\n   *\n   * Outputs built-in help, and custom text added using `.addHelpText()`.\n   *\n   * @param {{ error: boolean }} [contextOptions] - pass {error:true} to write to stderr instead of stdout\n   */\n\n  help(contextOptions) {\n    this.outputHelp(contextOptions);\n    let exitCode = Number(process.exitCode ?? 0); // process.exitCode does allow a string or an integer, but we prefer just a number\n    if (\n      exitCode === 0 &&\n      contextOptions &&\n      typeof contextOptions !== 'function' &&\n      contextOptions.error\n    ) {\n      exitCode = 1;\n    }\n    // message: do not have all displayed text available so only passing placeholder.\n    this._exit(exitCode, 'commander.help', '(outputHelp)');\n  }\n\n  /**\n   * // Do a little typing to coordinate emit and listener for the help text events.\n   * @typedef HelpTextEventContext\n   * @type {object}\n   * @property {boolean} error\n   * @property {Command} command\n   * @property {function} write\n   */\n\n  /**\n   * Add additional text to be displayed with the built-in help.\n   *\n   * Position is 'before' or 'after' to affect just this command,\n   * and 'beforeAll' or 'afterAll' to affect this command and all its subcommands.\n   *\n   * @param {string} position - before or after built-in help\n   * @param {(string | Function)} text - string to add, or a function returning a string\n   * @return {Command} `this` command for chaining\n   */\n\n  addHelpText(position, text) {\n    const allowedValues = ['beforeAll', 'before', 'after', 'afterAll'];\n    if (!allowedValues.includes(position)) {\n      throw new Error(`Unexpected value for position to addHelpText.\nExpecting one of '${allowedValues.join(\"', '\")}'`);\n    }\n\n    const helpEvent = `${position}Help`;\n    this.on(helpEvent, (/** @type {HelpTextEventContext} */ context) => {\n      let helpStr;\n      if (typeof text === 'function') {\n        helpStr = text({ error: context.error, command: context.command });\n      } else {\n        helpStr = text;\n      }\n      // Ignore falsy value when nothing to output.\n      if (helpStr) {\n        context.write(`${helpStr}\\n`);\n      }\n    });\n    return this;\n  }\n\n  /**\n   * Output help information if help flags specified\n   *\n   * @param {Array} args - array of options to search for help flags\n   * @private\n   */\n\n  _outputHelpIfRequested(args) {\n    const helpOption = this._getHelpOption();\n    const helpRequested = helpOption && args.find((arg) => helpOption.is(arg));\n    if (helpRequested) {\n      this.outputHelp();\n      // (Do not have all displayed text available so only passing placeholder.)\n      this._exit(0, 'commander.helpDisplayed', '(outputHelp)');\n    }\n  }\n}\n\n/**\n * Scan arguments and increment port number for inspect calls (to avoid conflicts when spawning new command).\n *\n * @param {string[]} args - array of arguments from node.execArgv\n * @returns {string[]}\n * @private\n */\n\nfunction incrementNodeInspectorPort(args) {\n  // Testing for these options:\n  //  --inspect[=[host:]port]\n  //  --inspect-brk[=[host:]port]\n  //  --inspect-port=[host:]port\n  return args.map((arg) => {\n    if (!arg.startsWith('--inspect')) {\n      return arg;\n    }\n    let debugOption;\n    let debugHost = '127.0.0.1';\n    let debugPort = '9229';\n    let match;\n    if ((match = arg.match(/^(--inspect(-brk)?)$/)) !== null) {\n      // e.g. --inspect\n      debugOption = match[1];\n    } else if (\n      (match = arg.match(/^(--inspect(-brk|-port)?)=([^:]+)$/)) !== null\n    ) {\n      debugOption = match[1];\n      if (/^\\d+$/.test(match[3])) {\n        // e.g. --inspect=1234\n        debugPort = match[3];\n      } else {\n        // e.g. --inspect=localhost\n        debugHost = match[3];\n      }\n    } else if (\n      (match = arg.match(/^(--inspect(-brk|-port)?)=([^:]+):(\\d+)$/)) !== null\n    ) {\n      // e.g. --inspect=localhost:1234\n      debugOption = match[1];\n      debugHost = match[3];\n      debugPort = match[4];\n    }\n\n    if (debugOption && debugPort !== '0') {\n      return `${debugOption}=${debugHost}:${parseInt(debugPort) + 1}`;\n    }\n    return arg;\n  });\n}\n\n/**\n * Exported for using from tests, not otherwise used outside this file.\n *\n * @returns {boolean | undefined}\n * @package\n */\nexport function useColor() {\n  // Test for common conventions.\n  // NB: the observed behaviour is in combination with how author adds color! For example:\n  //   - we do not test NODE_DISABLE_COLORS, but util:styletext does\n  //   - we do test NO_COLOR, but Chalk does not\n  //\n  // References:\n  // https://no-color.org\n  // https://bixense.com/clicolors/\n  // https://github.com/nodejs/node/blob/0a00217a5f67ef4a22384cfc80eb6dd9a917fdc1/lib/internal/tty.js#L109\n  // https://github.com/chalk/supports-color/blob/c214314a14bcb174b12b3014b2b0a8de375029ae/index.js#L33\n  // (https://force-color.org recent web page from 2023, does not match major javascript implementations)\n\n  if (\n    process.env.NO_COLOR ||\n    process.env.FORCE_COLOR === '0' ||\n    process.env.FORCE_COLOR === 'false'\n  )\n    return false;\n  if (process.env.FORCE_COLOR || process.env.CLICOLOR_FORCE !== undefined)\n    return true;\n  return undefined;\n}\n","import { humanReadableArgName } from './argument.js';\nimport { stripVTControlCharacters } from 'node:util';\n\n/**\n * TypeScript import types for JSDoc, used by Visual Studio Code IntelliSense and `npm run typescript-checkJS`\n * https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html#import-types\n * @typedef { import(\"./argument.js\").Argument } Argument\n * @typedef { import(\"./command.js\").Command } Command\n * @typedef { import(\"./option.js\").Option } Option\n */\n\n// Although this is a class, methods are static in style to allow override using subclass or just functions.\nexport class Help {\n  constructor() {\n    this.helpWidth = undefined;\n    this.minWidthToWrap = 40;\n    this.sortSubcommands = false;\n    this.sortOptions = false;\n    this.showGlobalOptions = false;\n  }\n\n  /**\n   * prepareContext is called by Commander after applying overrides from `Command.configureHelp()`\n   * and just before calling `formatHelp()`.\n   *\n   * Commander just uses the helpWidth and the rest is provided for optional use by more complex subclasses.\n   *\n   * @param {{ error?: boolean, helpWidth?: number, outputHasColors?: boolean }} contextOptions\n   */\n  prepareContext(contextOptions) {\n    this.helpWidth = this.helpWidth ?? contextOptions.helpWidth ?? 80;\n  }\n\n  /**\n   * Get an array of the visible subcommands. Includes a placeholder for the implicit help command, if there is one.\n   *\n   * @param {Command} cmd\n   * @returns {Command[]}\n   */\n\n  visibleCommands(cmd) {\n    const visibleCommands = cmd.commands.filter((cmd) => !cmd._hidden);\n    const helpCommand = cmd._getHelpCommand();\n    if (helpCommand && !helpCommand._hidden) {\n      visibleCommands.push(helpCommand);\n    }\n    if (this.sortSubcommands) {\n      visibleCommands.sort((a, b) => {\n        // @ts-ignore: because overloaded return type\n        return a.name().localeCompare(b.name());\n      });\n    }\n    return visibleCommands;\n  }\n\n  /**\n   * Compare options for sort.\n   *\n   * @param {Option} a\n   * @param {Option} b\n   * @returns {number}\n   */\n  compareOptions(a, b) {\n    const getSortKey = (option) => {\n      // WYSIWYG for order displayed in help. Short used for comparison if present. No special handling for negated.\n      return option.short\n        ? option.short.replace(/^-/, '')\n        : option.long.replace(/^--/, '');\n    };\n    return getSortKey(a).localeCompare(getSortKey(b));\n  }\n\n  /**\n   * Get an array of the visible options. Includes a placeholder for the implicit help option, if there is one.\n   *\n   * @param {Command} cmd\n   * @returns {Option[]}\n   */\n\n  visibleOptions(cmd) {\n    const visibleOptions = cmd.options.filter((option) => !option.hidden);\n    // Built-in help option.\n    const helpOption = cmd._getHelpOption();\n    if (helpOption && !helpOption.hidden) {\n      // Automatically hide conflicting flags. Bit dubious but a historical behaviour that is convenient for single-command programs.\n      const removeShort = helpOption.short && cmd._findOption(helpOption.short);\n      const removeLong = helpOption.long && cmd._findOption(helpOption.long);\n      if (!removeShort && !removeLong) {\n        visibleOptions.push(helpOption); // no changes needed\n      } else if (helpOption.long && !removeLong) {\n        visibleOptions.push(\n          cmd.createOption(helpOption.long, helpOption.description),\n        );\n      } else if (helpOption.short && !removeShort) {\n        visibleOptions.push(\n          cmd.createOption(helpOption.short, helpOption.description),\n        );\n      }\n    }\n    if (this.sortOptions) {\n      visibleOptions.sort(this.compareOptions);\n    }\n    return visibleOptions;\n  }\n\n  /**\n   * Get an array of the visible global options. (Not including help.)\n   *\n   * @param {Command} cmd\n   * @returns {Option[]}\n   */\n\n  visibleGlobalOptions(cmd) {\n    if (!this.showGlobalOptions) return [];\n\n    const globalOptions = [];\n    for (\n      let ancestorCmd = cmd.parent;\n      ancestorCmd;\n      ancestorCmd = ancestorCmd.parent\n    ) {\n      const visibleOptions = ancestorCmd.options.filter(\n        (option) => !option.hidden,\n      );\n      globalOptions.push(...visibleOptions);\n    }\n    if (this.sortOptions) {\n      globalOptions.sort(this.compareOptions);\n    }\n    return globalOptions;\n  }\n\n  /**\n   * Get an array of the arguments if any have a description.\n   *\n   * @param {Command} cmd\n   * @returns {Argument[]}\n   */\n\n  visibleArguments(cmd) {\n    // Side effect! Apply the legacy descriptions before the arguments are displayed.\n    if (cmd._argsDescription) {\n      cmd.registeredArguments.forEach((argument) => {\n        argument.description =\n          argument.description || cmd._argsDescription[argument.name()] || '';\n      });\n    }\n\n    // If there are any arguments with a description then return all the arguments.\n    if (cmd.registeredArguments.find((argument) => argument.description)) {\n      return cmd.registeredArguments;\n    }\n    return [];\n  }\n\n  /**\n   * Get the command term to show in the list of subcommands.\n   *\n   * @param {Command} cmd\n   * @returns {string}\n   */\n\n  subcommandTerm(cmd) {\n    // Legacy. Ignores custom usage string, and nested commands.\n    const args = cmd.registeredArguments\n      .map((arg) => humanReadableArgName(arg))\n      .join(' ');\n    return (\n      cmd._name +\n      (cmd._aliases[0] ? '|' + cmd._aliases[0] : '') +\n      (cmd.options.length ? ' [options]' : '') + // simplistic check for non-help option\n      (args ? ' ' + args : '')\n    );\n  }\n\n  /**\n   * Get the option term to show in the list of options.\n   *\n   * @param {Option} option\n   * @returns {string}\n   */\n\n  optionTerm(option) {\n    return option.flags;\n  }\n\n  /**\n   * Get the argument term to show in the list of arguments.\n   *\n   * @param {Argument} argument\n   * @returns {string}\n   */\n\n  argumentTerm(argument) {\n    return argument.name();\n  }\n\n  /**\n   * Get the longest command term length.\n   *\n   * @param {Command} cmd\n   * @param {Help} helper\n   * @returns {number}\n   */\n\n  longestSubcommandTermLength(cmd, helper) {\n    return helper.visibleCommands(cmd).reduce((max, command) => {\n      return Math.max(\n        max,\n        this.displayWidth(\n          helper.styleSubcommandTerm(helper.subcommandTerm(command)),\n        ),\n      );\n    }, 0);\n  }\n\n  /**\n   * Get the longest option term length.\n   *\n   * @param {Command} cmd\n   * @param {Help} helper\n   * @returns {number}\n   */\n\n  longestOptionTermLength(cmd, helper) {\n    return helper.visibleOptions(cmd).reduce((max, option) => {\n      return Math.max(\n        max,\n        this.displayWidth(helper.styleOptionTerm(helper.optionTerm(option))),\n      );\n    }, 0);\n  }\n\n  /**\n   * Get the longest global option term length.\n   *\n   * @param {Command} cmd\n   * @param {Help} helper\n   * @returns {number}\n   */\n\n  longestGlobalOptionTermLength(cmd, helper) {\n    return helper.visibleGlobalOptions(cmd).reduce((max, option) => {\n      return Math.max(\n        max,\n        this.displayWidth(helper.styleOptionTerm(helper.optionTerm(option))),\n      );\n    }, 0);\n  }\n\n  /**\n   * Get the longest argument term length.\n   *\n   * @param {Command} cmd\n   * @param {Help} helper\n   * @returns {number}\n   */\n\n  longestArgumentTermLength(cmd, helper) {\n    return helper.visibleArguments(cmd).reduce((max, argument) => {\n      return Math.max(\n        max,\n        this.displayWidth(\n          helper.styleArgumentTerm(helper.argumentTerm(argument)),\n        ),\n      );\n    }, 0);\n  }\n\n  /**\n   * Get the command usage to be displayed at the top of the built-in help.\n   *\n   * @param {Command} cmd\n   * @returns {string}\n   */\n\n  commandUsage(cmd) {\n    // Usage\n    let cmdName = cmd._name;\n    if (cmd._aliases[0]) {\n      cmdName = cmdName + '|' + cmd._aliases[0];\n    }\n    let ancestorCmdNames = '';\n    for (\n      let ancestorCmd = cmd.parent;\n      ancestorCmd;\n      ancestorCmd = ancestorCmd.parent\n    ) {\n      ancestorCmdNames = ancestorCmd.name() + ' ' + ancestorCmdNames;\n    }\n    return ancestorCmdNames + cmdName + ' ' + cmd.usage();\n  }\n\n  /**\n   * Get the description for the command.\n   *\n   * @param {Command} cmd\n   * @returns {string}\n   */\n\n  commandDescription(cmd) {\n    // @ts-ignore: because overloaded return type\n    return cmd.description();\n  }\n\n  /**\n   * Get the subcommand summary to show in the list of subcommands.\n   * (Fallback to description for backwards compatibility.)\n   *\n   * @param {Command} cmd\n   * @returns {string}\n   */\n\n  subcommandDescription(cmd) {\n    // @ts-ignore: because overloaded return type\n    return cmd.summary() || cmd.description();\n  }\n\n  /**\n   * Get the option description to show in the list of options.\n   *\n   * @param {Option} option\n   * @return {string}\n   */\n\n  optionDescription(option) {\n    const extraInfo = [];\n\n    if (option.argChoices) {\n      extraInfo.push(\n        // use stringify to match the display of the default value\n        `choices: ${option.argChoices.map((choice) => JSON.stringify(choice)).join(', ')}`,\n      );\n    }\n    if (option.defaultValue !== undefined) {\n      // default for boolean and negated more for programmer than end user,\n      // but show true/false for boolean option as may be for hand-rolled env or config processing.\n      const showDefault =\n        option.required ||\n        option.optional ||\n        (option.isBoolean() && typeof option.defaultValue === 'boolean');\n      if (showDefault) {\n        extraInfo.push(\n          `default: ${option.defaultValueDescription || JSON.stringify(option.defaultValue)}`,\n        );\n      }\n    }\n    // preset for boolean and negated are more for programmer than end user\n    if (option.presetArg !== undefined && option.optional) {\n      extraInfo.push(`preset: ${JSON.stringify(option.presetArg)}`);\n    }\n    if (option.envVar !== undefined) {\n      extraInfo.push(`env: ${option.envVar}`);\n    }\n    if (extraInfo.length > 0) {\n      const extraDescription = `(${extraInfo.join(', ')})`;\n      if (option.description) {\n        return `${option.description} ${extraDescription}`;\n      }\n      return extraDescription;\n    }\n\n    return option.description;\n  }\n\n  /**\n   * Get the argument description to show in the list of arguments.\n   *\n   * @param {Argument} argument\n   * @return {string}\n   */\n\n  argumentDescription(argument) {\n    const extraInfo = [];\n    if (argument.argChoices) {\n      extraInfo.push(\n        // use stringify to match the display of the default value\n        `choices: ${argument.argChoices.map((choice) => JSON.stringify(choice)).join(', ')}`,\n      );\n    }\n    if (argument.defaultValue !== undefined) {\n      extraInfo.push(\n        `default: ${argument.defaultValueDescription || JSON.stringify(argument.defaultValue)}`,\n      );\n    }\n    if (extraInfo.length > 0) {\n      const extraDescription = `(${extraInfo.join(', ')})`;\n      if (argument.description) {\n        return `${argument.description} ${extraDescription}`;\n      }\n      return extraDescription;\n    }\n    return argument.description;\n  }\n\n  /**\n   * Format a list of items, given a heading and an array of formatted items.\n   *\n   * @param {string} heading\n   * @param {string[]} items\n   * @param {Help} helper\n   * @returns string[]\n   */\n  formatItemList(heading, items, helper) {\n    if (items.length === 0) return [];\n\n    return [helper.styleTitle(heading), ...items, ''];\n  }\n\n  /**\n   * Group items by their help group heading.\n   *\n   * @param {Command[] | Option[]} unsortedItems\n   * @param {Command[] | Option[]} visibleItems\n   * @param {Function} getGroup\n   * @returns {Map<string, Command[] | Option[]>}\n   */\n  groupItems(unsortedItems, visibleItems, getGroup) {\n    const result = new Map();\n    // Add groups in order of appearance in unsortedItems.\n    unsortedItems.forEach((item) => {\n      const group = getGroup(item);\n      if (!result.has(group)) result.set(group, []);\n    });\n    // Add items in order of appearance in visibleItems.\n    visibleItems.forEach((item) => {\n      const group = getGroup(item);\n      if (!result.has(group)) {\n        result.set(group, []);\n      }\n      result.get(group).push(item);\n    });\n    return result;\n  }\n\n  /**\n   * Generate the built-in help text.\n   *\n   * @param {Command} cmd\n   * @param {Help} helper\n   * @returns {string}\n   */\n\n  formatHelp(cmd, helper) {\n    const termWidth = helper.padWidth(cmd, helper);\n    const helpWidth = helper.helpWidth ?? 80; // in case prepareContext() was not called\n\n    function callFormatItem(term, description) {\n      return helper.formatItem(term, termWidth, description, helper);\n    }\n\n    // Usage\n    let output = [\n      `${helper.styleTitle('Usage:')} ${helper.styleUsage(helper.commandUsage(cmd))}`,\n      '',\n    ];\n\n    // Description\n    const commandDescription = helper.commandDescription(cmd);\n    if (commandDescription.length > 0) {\n      output = output.concat([\n        helper.boxWrap(\n          helper.styleCommandDescription(commandDescription),\n          helpWidth,\n        ),\n        '',\n      ]);\n    }\n\n    // Arguments\n    const argumentList = helper.visibleArguments(cmd).map((argument) => {\n      return callFormatItem(\n        helper.styleArgumentTerm(helper.argumentTerm(argument)),\n        helper.styleArgumentDescription(helper.argumentDescription(argument)),\n      );\n    });\n    output = output.concat(\n      this.formatItemList('Arguments:', argumentList, helper),\n    );\n\n    // Options\n    const optionGroups = this.groupItems(\n      cmd.options,\n      helper.visibleOptions(cmd),\n      (option) => option.helpGroupHeading ?? 'Options:',\n    );\n    optionGroups.forEach((options, group) => {\n      const optionList = options.map((option) => {\n        return callFormatItem(\n          helper.styleOptionTerm(helper.optionTerm(option)),\n          helper.styleOptionDescription(helper.optionDescription(option)),\n        );\n      });\n      output = output.concat(this.formatItemList(group, optionList, helper));\n    });\n\n    if (helper.showGlobalOptions) {\n      const globalOptionList = helper\n        .visibleGlobalOptions(cmd)\n        .map((option) => {\n          return callFormatItem(\n            helper.styleOptionTerm(helper.optionTerm(option)),\n            helper.styleOptionDescription(helper.optionDescription(option)),\n          );\n        });\n      output = output.concat(\n        this.formatItemList('Global Options:', globalOptionList, helper),\n      );\n    }\n\n    // Commands\n    const commandGroups = this.groupItems(\n      cmd.commands,\n      helper.visibleCommands(cmd),\n      (sub) => sub.helpGroup() || 'Commands:',\n    );\n    commandGroups.forEach((commands, group) => {\n      const commandList = commands.map((sub) => {\n        return callFormatItem(\n          helper.styleSubcommandTerm(helper.subcommandTerm(sub)),\n          helper.styleSubcommandDescription(helper.subcommandDescription(sub)),\n        );\n      });\n      output = output.concat(this.formatItemList(group, commandList, helper));\n    });\n\n    return output.join('\\n');\n  }\n\n  /**\n   * Return display width of string, ignoring ANSI escape sequences. Used in padding and wrapping calculations.\n   *\n   * @param {string} str\n   * @returns {number}\n   */\n  displayWidth(str) {\n    return stripVTControlCharacters(str).length;\n  }\n\n  /**\n   * Style the title for displaying in the help. Called with 'Usage:', 'Options:', etc.\n   *\n   * @param {string} str\n   * @returns {string}\n   */\n  styleTitle(str) {\n    return str;\n  }\n\n  styleUsage(str) {\n    // Usage has lots of parts the user might like to color separately! Assume default usage string which is formed like:\n    //    command subcommand [options] [command] <foo> [bar]\n    return str\n      .split(' ')\n      .map((word) => {\n        if (word === '[options]') return this.styleOptionText(word);\n        if (word === '[command]') return this.styleSubcommandText(word);\n        if (word[0] === '[' || word[0] === '<')\n          return this.styleArgumentText(word);\n        return this.styleCommandText(word); // Restrict to initial words?\n      })\n      .join(' ');\n  }\n  styleCommandDescription(str) {\n    return this.styleDescriptionText(str);\n  }\n  styleOptionDescription(str) {\n    return this.styleDescriptionText(str);\n  }\n  styleSubcommandDescription(str) {\n    return this.styleDescriptionText(str);\n  }\n  styleArgumentDescription(str) {\n    return this.styleDescriptionText(str);\n  }\n  styleDescriptionText(str) {\n    return str;\n  }\n  styleOptionTerm(str) {\n    return this.styleOptionText(str);\n  }\n  styleSubcommandTerm(str) {\n    // This is very like usage with lots of parts! Assume default string which is formed like:\n    //    subcommand [options] <foo> [bar]\n    return str\n      .split(' ')\n      .map((word) => {\n        if (word === '[options]') return this.styleOptionText(word);\n        if (word[0] === '[' || word[0] === '<')\n          return this.styleArgumentText(word);\n        return this.styleSubcommandText(word); // Restrict to initial words?\n      })\n      .join(' ');\n  }\n  styleArgumentTerm(str) {\n    return this.styleArgumentText(str);\n  }\n  styleOptionText(str) {\n    return str;\n  }\n  styleArgumentText(str) {\n    return str;\n  }\n  styleSubcommandText(str) {\n    return str;\n  }\n  styleCommandText(str) {\n    return str;\n  }\n\n  /**\n   * Calculate the pad width from the maximum term length.\n   *\n   * @param {Command} cmd\n   * @param {Help} helper\n   * @returns {number}\n   */\n\n  padWidth(cmd, helper) {\n    return Math.max(\n      helper.longestOptionTermLength(cmd, helper),\n      helper.longestGlobalOptionTermLength(cmd, helper),\n      helper.longestSubcommandTermLength(cmd, helper),\n      helper.longestArgumentTermLength(cmd, helper),\n    );\n  }\n\n  /**\n   * Detect manually wrapped and indented strings by checking for line break followed by whitespace.\n   *\n   * @param {string} str\n   * @returns {boolean}\n   */\n  preformatted(str) {\n    return /\\n[^\\S\\r\\n]/.test(str);\n  }\n\n  /**\n   * Format the \"item\", which consists of a term and description. Pad the term and wrap the description, indenting the following lines.\n   *\n   * So \"TTT\", 5, \"DDD DDDD DD DDD\" might be formatted for this.helpWidth=17 like so:\n   *   TTT  DDD DDDD\n   *        DD DDD\n   *\n   * @param {string} term\n   * @param {number} termWidth\n   * @param {string} description\n   * @param {Help} helper\n   * @returns {string}\n   */\n  formatItem(term, termWidth, description, helper) {\n    const itemIndent = 2;\n    const itemIndentStr = ' '.repeat(itemIndent);\n    if (!description) return itemIndentStr + term;\n\n    // Pad the term out to a consistent width, so descriptions are aligned.\n    const paddedTerm = term.padEnd(\n      termWidth + term.length - helper.displayWidth(term),\n    );\n\n    // Format the description.\n    const spacerWidth = 2; // between term and description\n    const helpWidth = this.helpWidth ?? 80; // in case prepareContext() was not called\n    const remainingWidth = helpWidth - termWidth - spacerWidth - itemIndent;\n    let formattedDescription;\n    if (\n      remainingWidth < this.minWidthToWrap ||\n      helper.preformatted(description)\n    ) {\n      formattedDescription = description;\n    } else {\n      const wrappedDescription = helper.boxWrap(description, remainingWidth);\n      formattedDescription = wrappedDescription.replace(\n        /\\n/g,\n        '\\n' + ' '.repeat(termWidth + spacerWidth),\n      );\n    }\n\n    // Construct and overall indent.\n    return (\n      itemIndentStr +\n      paddedTerm +\n      ' '.repeat(spacerWidth) +\n      formattedDescription.replace(/\\n/g, `\\n${itemIndentStr}`)\n    );\n  }\n\n  /**\n   * Wrap a string at whitespace, preserving existing line breaks.\n   * Wrapping is skipped if the width is less than `minWidthToWrap`.\n   *\n   * @param {string} str\n   * @param {number} width\n   * @returns {string}\n   */\n  boxWrap(str, width) {\n    if (width < this.minWidthToWrap) return str;\n\n    const rawLines = str.split(/\\r\\n|\\n/);\n    // split up text by whitespace\n    const chunkPattern = /[\\s]*[^\\s]+/g;\n    const wrappedLines = [];\n    rawLines.forEach((line) => {\n      const chunks = line.match(chunkPattern);\n      if (chunks === null) {\n        wrappedLines.push('');\n        return;\n      }\n\n      let sumChunks = [chunks.shift()];\n      let sumWidth = this.displayWidth(sumChunks[0]);\n      chunks.forEach((chunk) => {\n        const visibleWidth = this.displayWidth(chunk);\n        // Accumulate chunks while they fit into width.\n        if (sumWidth + visibleWidth <= width) {\n          sumChunks.push(chunk);\n          sumWidth += visibleWidth;\n          return;\n        }\n        wrappedLines.push(sumChunks.join(''));\n\n        const nextChunk = chunk.trimStart(); // trim space at line break\n        sumChunks = [nextChunk];\n        sumWidth = this.displayWidth(nextChunk);\n      });\n      wrappedLines.push(sumChunks.join(''));\n    });\n\n    return wrappedLines.join('\\n');\n  }\n}\n","import { InvalidArgumentError } from './error.js';\n\nexport class Option {\n  /**\n   * Initialize a new `Option` with the given `flags` and `description`.\n   *\n   * @param {string} flags\n   * @param {string} [description]\n   */\n\n  constructor(flags, description) {\n    this.flags = flags;\n    this.description = description || '';\n\n    this.required = flags.includes('<'); // A value must be supplied when the option is specified.\n    this.optional = flags.includes('['); // A value is optional when the option is specified.\n    // variadic test ignores <value,...> et al which might be used to describe custom splitting of single argument\n    this.variadic = /\\w\\.\\.\\.[>\\]]$/.test(flags); // The option can take multiple values.\n    this.mandatory = false; // The option must have a value after parsing, which usually means it must be specified on command line.\n    const optionFlags = splitOptionFlags(flags);\n    this.short = optionFlags.shortFlag; // May be a short flag, undefined, or even a long flag (if option has two long flags).\n    this.long = optionFlags.longFlag;\n    this.negate = false;\n    if (this.long) {\n      this.negate = this.long.startsWith('--no-');\n    }\n    this.defaultValue = undefined;\n    this.defaultValueDescription = undefined;\n    this.presetArg = undefined;\n    this.envVar = undefined;\n    this.parseArg = undefined;\n    this.hidden = false;\n    this.argChoices = undefined;\n    this.conflictsWith = [];\n    this.implied = undefined;\n    this.helpGroupHeading = undefined; // soft initialised when option added to command\n  }\n\n  /**\n   * Set the default value, and optionally supply the description to be displayed in the help.\n   *\n   * @param {*} value\n   * @param {string} [description]\n   * @return {Option}\n   */\n\n  default(value, description) {\n    this.defaultValue = value;\n    this.defaultValueDescription = description;\n    return this;\n  }\n\n  /**\n   * Preset to use when option used without option-argument, especially optional but also boolean and negated.\n   * The custom processing (parseArg) is called.\n   *\n   * @example\n   * new Option('--color').default('GREYSCALE').preset('RGB');\n   * new Option('--donate [amount]').preset('20').argParser(parseFloat);\n   *\n   * @param {*} arg\n   * @return {Option}\n   */\n\n  preset(arg) {\n    this.presetArg = arg;\n    return this;\n  }\n\n  /**\n   * Add option name(s) that conflict with this option.\n   * An error will be displayed if conflicting options are found during parsing.\n   *\n   * @example\n   * new Option('--rgb').conflicts('cmyk');\n   * new Option('--js').conflicts(['ts', 'jsx']);\n   *\n   * @param {(string | string[])} names\n   * @return {Option}\n   */\n\n  conflicts(names) {\n    this.conflictsWith = this.conflictsWith.concat(names);\n    return this;\n  }\n\n  /**\n   * Specify implied option values for when this option is set and the implied options are not.\n   *\n   * The custom processing (parseArg) is not called on the implied values.\n   *\n   * @example\n   * program\n   *   .addOption(new Option('--log', 'write logging information to file'))\n   *   .addOption(new Option('--trace', 'log extra details').implies({ log: 'trace.txt' }));\n   *\n   * @param {object} impliedOptionValues\n   * @return {Option}\n   */\n  implies(impliedOptionValues) {\n    let newImplied = impliedOptionValues;\n    if (typeof impliedOptionValues === 'string') {\n      // string is not documented, but easy mistake and we can do what user probably intended.\n      newImplied = { [impliedOptionValues]: true };\n    }\n    this.implied = Object.assign(this.implied || {}, newImplied);\n    return this;\n  }\n\n  /**\n   * Set environment variable to check for option value.\n   *\n   * An environment variable is only used if when processed the current option value is\n   * undefined, or the source of the current value is 'default' or 'config' or 'env'.\n   *\n   * @param {string} name\n   * @return {Option}\n   */\n\n  env(name) {\n    this.envVar = name;\n    return this;\n  }\n\n  /**\n   * Set the custom handler for processing CLI option arguments into option values.\n   *\n   * @param {Function} [fn]\n   * @return {Option}\n   */\n\n  argParser(fn) {\n    this.parseArg = fn;\n    return this;\n  }\n\n  /**\n   * Whether the option is mandatory and must have a value after parsing.\n   *\n   * @param {boolean} [mandatory=true]\n   * @return {Option}\n   */\n\n  makeOptionMandatory(mandatory = true) {\n    this.mandatory = !!mandatory;\n    return this;\n  }\n\n  /**\n   * Hide option in help.\n   *\n   * @param {boolean} [hide=true]\n   * @return {Option}\n   */\n\n  hideHelp(hide = true) {\n    this.hidden = !!hide;\n    return this;\n  }\n\n  /**\n   * @package\n   */\n\n  _collectValue(value, previous) {\n    if (previous === this.defaultValue || !Array.isArray(previous)) {\n      return [value];\n    }\n\n    previous.push(value);\n    return previous;\n  }\n\n  /**\n   * Only allow option value to be one of choices.\n   *\n   * @param {string[]} values\n   * @return {Option}\n   */\n\n  choices(values) {\n    this.argChoices = values.slice();\n    this.parseArg = (arg, previous) => {\n      if (!this.argChoices.includes(arg)) {\n        throw new InvalidArgumentError(\n          `Allowed choices are ${this.argChoices.join(', ')}.`,\n        );\n      }\n      if (this.variadic) {\n        return this._collectValue(arg, previous);\n      }\n      return arg;\n    };\n    return this;\n  }\n\n  /**\n   * Return option name.\n   *\n   * @return {string}\n   */\n\n  name() {\n    if (this.long) {\n      return this.long.replace(/^--/, '');\n    }\n    return this.short.replace(/^-/, '');\n  }\n\n  /**\n   * Return option name, in a camelcase format that can be used\n   * as an object attribute key.\n   *\n   * @return {string}\n   */\n\n  attributeName() {\n    if (this.negate) {\n      return camelcase(this.name().replace(/^no-/, ''));\n    }\n    return camelcase(this.name());\n  }\n\n  /**\n   * Set the help group heading.\n   *\n   * @param {string} heading\n   * @return {Option}\n   */\n  helpGroup(heading) {\n    this.helpGroupHeading = heading;\n    return this;\n  }\n\n  /**\n   * Check if `arg` matches the short or long flag.\n   *\n   * @param {string} arg\n   * @return {boolean}\n   * @package\n   */\n\n  is(arg) {\n    return this.short === arg || this.long === arg;\n  }\n\n  /**\n   * Return whether a boolean option.\n   *\n   * Options are one of boolean, negated, required argument, or optional argument.\n   *\n   * @return {boolean}\n   * @package\n   */\n\n  isBoolean() {\n    return !this.required && !this.optional && !this.negate;\n  }\n}\n\n/**\n * This class is to make it easier to work with dual options, without changing the existing\n * implementation. We support separate dual options for separate positive and negative options,\n * like `--build` and `--no-build`, which share a single option value. This works nicely for some\n * use cases, but is tricky for others where we want separate behaviours despite\n * the single shared option value.\n */\nexport class DualOptions {\n  /**\n   * @param {Option[]} options\n   */\n  constructor(options) {\n    this.positiveOptions = new Map();\n    this.negativeOptions = new Map();\n    this.dualOptions = new Set();\n    options.forEach((option) => {\n      if (option.negate) {\n        this.negativeOptions.set(option.attributeName(), option);\n      } else {\n        this.positiveOptions.set(option.attributeName(), option);\n      }\n    });\n    this.negativeOptions.forEach((value, key) => {\n      if (this.positiveOptions.has(key)) {\n        this.dualOptions.add(key);\n      }\n    });\n  }\n\n  /**\n   * Did the value come from the option, and not from possible matching dual option?\n   *\n   * @param {*} value\n   * @param {Option} option\n   * @returns {boolean}\n   */\n  valueFromOption(value, option) {\n    const optionKey = option.attributeName();\n    if (!this.dualOptions.has(optionKey)) return true;\n\n    // Use the value to deduce if (probably) came from the option.\n    const preset = this.negativeOptions.get(optionKey).presetArg;\n    const negativeValue = preset !== undefined ? preset : false;\n    return option.negate === (negativeValue === value);\n  }\n}\n\n/**\n * Convert string from kebab-case to camelCase.\n *\n * @param {string} str\n * @return {string}\n * @private\n */\n\nfunction camelcase(str) {\n  return str.split('-').reduce((str, word) => {\n    return str + word[0].toUpperCase() + word.slice(1);\n  });\n}\n\n/**\n * Split the short and long flag out of something like '-m,--mixed <value>'\n *\n * @private\n */\n\nfunction splitOptionFlags(flags) {\n  let shortFlag;\n  let longFlag;\n  // short flag, single dash and single character\n  const shortFlagExp = /^-[^-]$/;\n  // long flag, double dash and at least one character\n  const longFlagExp = /^--[^-]/;\n\n  const flagParts = flags.split(/[ |,]+/).concat('guard');\n  // Normal is short and/or long.\n  if (shortFlagExp.test(flagParts[0])) shortFlag = flagParts.shift();\n  if (longFlagExp.test(flagParts[0])) longFlag = flagParts.shift();\n  // Long then short. Rarely used but fine.\n  if (!shortFlag && shortFlagExp.test(flagParts[0]))\n    shortFlag = flagParts.shift();\n  // Allow two long flags, like '--ws, --workspace'\n  // This is the supported way to have a shortish option flag.\n  if (!shortFlag && longFlagExp.test(flagParts[0])) {\n    shortFlag = longFlag;\n    longFlag = flagParts.shift();\n  }\n\n  // Check for unprocessed flag. Fail noisily rather than silently ignore.\n  if (flagParts[0].startsWith('-')) {\n    const unsupportedFlag = flagParts[0];\n    const baseError = `option creation failed due to '${unsupportedFlag}' in option flags '${flags}'`;\n    if (/^-[^-][^-]/.test(unsupportedFlag))\n      throw new Error(\n        `${baseError}\n- a short flag is a single dash and a single character\n  - either use a single dash and a single character (for a short flag)\n  - or use a double dash for a long option (and can have two, like '--ws, --workspace')`,\n      );\n    if (shortFlagExp.test(unsupportedFlag))\n      throw new Error(`${baseError}\n- too many short flags`);\n    if (longFlagExp.test(unsupportedFlag))\n      throw new Error(`${baseError}\n- too many long flags`);\n\n    throw new Error(`${baseError}\n- unrecognised flag format`);\n  }\n  if (shortFlag === undefined && longFlag === undefined)\n    throw new Error(\n      `option creation failed due to no flags found in '${flags}'.`,\n    );\n\n  return { shortFlag, longFlag };\n}\n","const maxDistance = 3;\n\nfunction editDistance(a, b) {\n  // https://en.wikipedia.org/wiki/Damerau–Levenshtein_distance\n  // Calculating optimal string alignment distance, no substring is edited more than once.\n  // (Simple implementation.)\n\n  // Quick early exit, return worst case.\n  if (Math.abs(a.length - b.length) > maxDistance)\n    return Math.max(a.length, b.length);\n\n  // distance between prefix substrings of a and b\n  const d = [];\n\n  // pure deletions turn a into empty string\n  for (let i = 0; i <= a.length; i++) {\n    d[i] = [i];\n  }\n  // pure insertions turn empty string into b\n  for (let j = 0; j <= b.length; j++) {\n    d[0][j] = j;\n  }\n\n  // fill matrix\n  for (let j = 1; j <= b.length; j++) {\n    for (let i = 1; i <= a.length; i++) {\n      let cost;\n      if (a[i - 1] === b[j - 1]) {\n        cost = 0;\n      } else {\n        cost = 1;\n      }\n      d[i][j] = Math.min(\n        d[i - 1][j] + 1, // deletion\n        d[i][j - 1] + 1, // insertion\n        d[i - 1][j - 1] + cost, // substitution\n      );\n      // transposition\n      if (i > 1 && j > 1 && a[i - 1] === b[j - 2] && a[i - 2] === b[j - 1]) {\n        d[i][j] = Math.min(d[i][j], d[i - 2][j - 2] + 1);\n      }\n    }\n  }\n\n  return d[a.length][b.length];\n}\n\n/**\n * Find close matches, restricted to same number of edits.\n *\n * @param {string} word\n * @param {string[]} candidates\n * @returns {string}\n */\n\nexport function suggestSimilar(word, candidates) {\n  if (!candidates || candidates.length === 0) return '';\n  // remove possible duplicates\n  candidates = Array.from(new Set(candidates));\n\n  const searchingOptions = word.startsWith('--');\n  if (searchingOptions) {\n    word = word.slice(2);\n    candidates = candidates.map((candidate) => candidate.slice(2));\n  }\n\n  let similar = [];\n  let bestDistance = maxDistance;\n  const minSimilarity = 0.4;\n  candidates.forEach((candidate) => {\n    if (candidate.length <= 1) return; // no one character guesses\n\n    const distance = editDistance(word, candidate);\n    const length = Math.max(word.length, candidate.length);\n    const similarity = (length - distance) / length;\n    if (similarity > minSimilarity) {\n      if (distance < bestDistance) {\n        // better edit distance, throw away previous worse matches\n        bestDistance = distance;\n        similar = [candidate];\n      } else if (distance === bestDistance) {\n        similar.push(candidate);\n      }\n    }\n  });\n\n  similar.sort((a, b) => a.localeCompare(b));\n  if (searchingOptions) {\n    similar = similar.map((candidate) => `--${candidate}`);\n  }\n\n  if (similar.length > 1) {\n    return `\\n(Did you mean one of ${similar.join(', ')}?)`;\n  }\n  if (similar.length === 1) {\n    return `\\n(Did you mean ${similar[0]}?)`;\n  }\n  return '';\n}\n","import { Argument } from './lib/argument.js';\nimport { Command } from './lib/command.js';\nimport { CommanderError, InvalidArgumentError } from './lib/error.js';\nimport { Help } from './lib/help.js';\nimport { Option } from './lib/option.js';\n\nexport const program = new Command();\n\nexport const createCommand = (name) => new Command(name);\nexport const createOption = (flags, description) =>\n  new Option(flags, description);\nexport const createArgument = (name, description) =>\n  new Argument(name, description);\n\n/**\n * Expose classes\n */\n\nexport { Command, Option, Argument, Help };\nexport { CommanderError, InvalidArgumentError };\nexport { InvalidArgumentError as InvalidOptionArgumentError }; // Deprecated\n","import { readFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { parse as parseYaml } from \"yaml\";\nimport { type UpdateConfig, UpdateConfigSchema } from \"../schemas/updateConfig.schema\";\n\nconst DEFAULT_CONFIG_PATH = join(homedir(), \".threadbase\", \"update.yaml\");\n\nexport interface LoadUpdateConfigOptions {\n  path?: string;\n}\n\n/**\n * Loads ~/.threadbase/update.yaml. Returns null when the file does not exist\n * (auto-update disabled). Throws on malformed YAML or schema-invalid content\n * so misconfiguration is loud rather than silently disabling updates.\n */\nexport function loadUpdateConfig(opts: LoadUpdateConfigOptions = {}): UpdateConfig | null {\n  const path = opts.path ?? DEFAULT_CONFIG_PATH;\n\n  let raw: string;\n  try {\n    raw = readFileSync(path, \"utf-8\");\n  } catch (err) {\n    if ((err as NodeJS.ErrnoException).code === \"ENOENT\") return null;\n    throw err;\n  }\n\n  const parsed: unknown = parseYaml(raw);\n  if (parsed === null || parsed === undefined) {\n    throw new Error(`update.yaml at ${path} is empty — github_repo is required`);\n  }\n\n  return UpdateConfigSchema.parse(parsed);\n}\n\nexport { DEFAULT_CONFIG_PATH as UPDATE_CONFIG_PATH };\n","import { z } from \"zod\";\n\nexport const UpdateConfigSchema = z\n  .object({\n    auto_update: z.boolean().default(false),\n    channel: z.enum([\"stable\", \"next\"]).default(\"stable\"),\n    allow: z.array(z.enum([\"patch\", \"minor\", \"major\"])).default([\"patch\", \"minor\"]),\n    poll_interval_minutes: z.number().int().min(0).default(1440),\n    defer_if_active_sessions: z.boolean().default(true),\n    github_repo: z.string().regex(/^[^/]+\\/[^/]+$/, \"github_repo must be 'owner/name'\"),\n    webhook_secret: z.string().min(1).nullable().default(null),\n  })\n  .strict();\n\nexport type UpdateConfig = z.infer<typeof UpdateConfigSchema>;\n","import { appendFileSync, mkdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { installDir } from \"./lifecycle/constants\";\n\nexport function devLogPath(): string {\n  return join(installDir(), \"logs\", \"dev.log\");\n}\n\n// ponytail: append-only, never truncated — dev sessions stack up in one\n// file instead of overwriting each other like prod's stdout/stderr do.\nexport function appendDevSessionMarker(): void {\n  try {\n    const path = devLogPath();\n    mkdirSync(join(installDir(), \"logs\"), { recursive: true });\n    appendFileSync(path, `=== dev session started ${new Date().toISOString()} ===\\n`, \"utf8\");\n  } catch {\n    // Non-fatal — never let a logging failure block server startup.\n  }\n}\n","import { networkInterfaces } from \"os\";\n\nexport interface ResolveOpts {\n  publicUrl: string | null;\n  port: number;\n}\n\nexport function resolveServerUrl({ publicUrl, port }: ResolveOpts): string {\n  if (publicUrl) return publicUrl;\n  const lan = firstLanIPv4();\n  if (lan) return `http://${lan}:${port}`;\n  return `http://localhost:${port}`;\n}\n\nfunction firstLanIPv4(): string | null {\n  const ifaces = networkInterfaces();\n  for (const name of Object.keys(ifaces)) {\n    const addrs = ifaces[name] ?? [];\n    for (const addr of addrs) {\n      if (addr.family === \"IPv4\" && !addr.internal) return addr.address;\n    }\n  }\n  return null;\n}\n","import { Connection, Client as TemporalClient } from \"@temporalio/client\";\nimport { randomUUID } from \"crypto\";\nimport { EventEmitter } from \"events\";\nimport { existsSync, readdirSync, readFileSync, statSync } from \"fs\";\nimport { realpath } from \"fs/promises\";\nimport type { Hono } from \"hono\";\nimport { createServer, type IncomingMessage, type ServerResponse } from \"http\";\nimport { homedir, hostname } from \"os\";\nimport { dirname, join } from \"path\";\nimport type { WebSocket } from \"ws\";\nimport { describeAccessProbe, probeAccessGate, safeHost } from \"./access-probe\";\nimport { type AgentClient, createAgentClient } from \"./agent/agent-client\";\nimport { type AgentConfig, readAgentConfig } from \"./agent/agent-config\";\nimport { type ConversationWriter, createConversationWriter } from \"./agent/conversation-writer\";\nimport { type AppEnv, createHonoApp } from \"./api/app\";\nimport { ConversationHandlers } from \"./api/handlers/conversations.handlers\";\nimport { json, readBody, writeHonoResponse } from \"./api/handlers/http-helpers\";\nimport { SessionHandlers } from \"./api/handlers/sessions.handlers\";\nimport { describeE2eeCapability, E2EE_OFF_SWITCH } from \"./api/routes/misc.routes\";\nimport { ALREADY_HANDLED } from \"./api/routes/sessions.routes\";\nimport { mountWebSocket } from \"./api/routes/ws.routes\";\nimport {\n  generateApiKey,\n  loadAccessServiceToken,\n  loadBrowseRoot,\n  loadBrowserCors,\n  loadCacheDir,\n  loadClaudeExtraArgs,\n  loadClaudeFlags,\n  loadDefaultPermissionMode,\n  loadFeatureFlags,\n  loadPublicUrl,\n  loadTailSize,\n  setApiKey,\n  setClaudeExtraArgs,\n  setClaudeFlags,\n  validatePublicUrl,\n} from \"./auth\";\nimport {\n  BrowsePathNotFoundError,\n  createDirectory,\n  listDirectories,\n  listFiles,\n  resolveBrowsePath,\n} from \"./browse\";\nimport {\n  CLAUDE_FLAGS,\n  type ClaudeFlagValues,\n  EFFORT_LEVELS,\n  type EffortLevel,\n  isEffortLevel,\n  isPermissionMode,\n  type PermissionMode,\n  validateFlagValues,\n} from \"./claude-flags\";\nimport { ConversationCache } from \"./conversation-cache\";\nimport { listCursorTranscriptWatchDirs } from \"./cursor-transcript-watch\";\nimport { createPool, getDbConfig, maskConnectionString, runMigrations } from \"./db\";\nimport { CacheMetadataRepository } from \"./db/repositories/cacheMetadata.repository\";\nimport { ConversationsRepository } from \"./db/repositories/conversations.repository\";\nimport { DevicesRepository } from \"./db/repositories/devices.repository\";\nimport { ManagedSessionsRepository } from \"./db/repositories/managed-sessions.repository\";\nimport { ProjectsRepository } from \"./db/repositories/projects.repository\";\nimport { PushRepository } from \"./db/repositories/push.repository\";\nimport { SessionsRepository } from \"./db/repositories/sessions.repository\";\nimport { RuntimeStore, resolveRuntimeDbPath } from \"./db/runtime-store\";\nimport {\n  type HandshakeResponderState,\n  keyPairFrom,\n  PAIR_PROLOGUE,\n  pskFromPairToken,\n  readMessage1,\n  writeMessage2,\n} from \"./e2ee/noise\";\nimport {\n  type E2eePairRegistration,\n  encodeE2eeMsg2Payload,\n  parseE2eeMsg1Payload,\n} from \"./e2ee/pair-payload\";\nimport {\n  E2EE_EXCHANGE_VERSION,\n  type E2eeExchangeRequest,\n  type E2eeRequestError,\n  parseE2eeRequest,\n} from \"./e2ee/pair-request\";\nimport { type ExternalTailEntry, ExternalTailManager } from \"./external-tails\";\nimport {\n  describeFeatureFlags,\n  FEATURE_FLAG_LIST,\n  type FeatureFlagId,\n  type FeatureFlagSource,\n  nonDefaultFeatureFlags,\n  type ResolvedFeatureFlags,\n  resolveFeatureFlags,\n} from \"./feature-flags\";\nimport { LiveSessionManager } from \"./live-session-manager\";\nimport { getLogger } from \"./logger\";\nimport { PairTokenStore } from \"./pair-store\";\nimport { locateProviderExe } from \"./platform\";\nimport {\n  CLAUDE_CODE_PROVIDER,\n  CODEX_CLI_PROVIDER,\n  coerceProviderForRunner,\n  PROVIDER_NAMES,\n  type ProviderName,\n} from \"./providers\";\nimport { PtyHostProtocolMismatchError } from \"./pty-host/remote-session-runner\";\nimport { connectOrSpawnHost } from \"./pty-host/spawn-host\";\nimport { ScannerManager } from \"./scanner-manager\";\nimport { seal } from \"./seal\";\nimport { loadOrCreateServerIdentity } from \"./server-identity\";\nimport {\n  clearExpiredPendingPrompt,\n  createApiDeps,\n  createConversationWatcherEvents,\n  createLiveSessionOptions,\n  type PendingPermission,\n  type PendingQuestion,\n} from \"./server-wiring\";\nimport { setCacheMetadata } from \"./services/cache/cacheMetadata\";\nimport { CacheIntegrityMonitor } from \"./services/cache-integrity/cacheIntegrityMonitor\";\nimport { ConversationWatcher } from \"./services/conversations/conversationWatcher\";\nimport { parseAgentEntrypointsEnv } from \"./services/conversations/isAgentConversation\";\nimport { pruneAgentConversations } from \"./services/conversations/pruneAgentConversations\";\nimport { refreshConversationCache } from \"./services/conversations/refreshConversationCache\";\nimport {\n  createHostPressureMonitor,\n  type HostPressureMonitor,\n} from \"./services/host-pressure/hostPressure\";\nimport { PromptRegistry } from \"./services/prompts/promptRegistry\";\nimport {\n  ApnsClient,\n  describeMissingApnsCredentials,\n  readApnsCredentialsFromEnv,\n} from \"./services/push/apnsClient\";\nimport { ExpoPushSender } from \"./services/push/expoPushSender\";\nimport { LiveActivityNotifier } from \"./services/push/liveActivityNotifier\";\nimport { LiveActivityRenewalScheduler } from \"./services/push/liveActivityRenewal\";\nimport { LiveActivitySender } from \"./services/push/liveActivitySender\";\nimport { WaitingInputNotifier } from \"./services/push/waitingInputNotifier\";\nimport { questionContentKey } from \"./services/questions/detectQuestionFromScreen\";\nimport {\n  questionsFromLines,\n  shouldBroadcastQuestion,\n} from \"./services/questions/questionBroadcast\";\nimport { sweepCodexFormat } from \"./services/sessions/codexFormatCanary\";\nimport type { CodexOwnerSource } from \"./services/sessions/codexRolloutOwner\";\nimport { type BusySignal, resolveResumeBusyWindowMs } from \"./services/sessions/conversationBusy\";\nimport { IdempotencyStore } from \"./services/sessions/idempotency\";\nimport type { ReconcileVerdict } from \"./services/sessions/reconcileSessions\";\nimport { resumeIdForRow } from \"./services/sessions/resumeIdentity\";\nimport { SessionRegistryBoot } from \"./session-registry-boot\";\nimport { SessionStore } from \"./session-store\";\nimport { SessionWatchers } from \"./session-watchers\";\nimport type {\n  AskQuestion,\n  DiscoveredProcess,\n  ManagedSession,\n  ServerConfig,\n  ServerWarmingUpResponse,\n  ServerWarmupState,\n  SessionResponse,\n} from \"./types\";\nimport { canonicalizeFilePath, toNativeFilePath } from \"./utils/canonicalizeFilePath\";\nimport { toClientConversationLines } from \"./utils/codexConversationLine\";\nimport { parseIsoDateOrNull } from \"./utils/dates\";\nimport { createScanProgressThrottle } from \"./utils/scanProgressThrottle\";\nimport { getVersion } from \"./version\";\nimport { WSHub } from \"./ws-hub\";\n\nconst DEFAULT_SYSTEM_PROMPT =\n  \"When presenting options or choices to the user, limit the options to at most 3.\";\n\nconst DEFAULT_PTY_GRACE_PERIOD_MS = 270_000; // 4.5 minutes\n\n// A `running` session is deferred (not held) so a mid-response turn is never\n// interrupted. But a PTY that never settles back to waiting_input (e.g. its\n// last line was a status bar with no prompt marker) would re-arm the grace\n// timer forever and leak. Cap consecutive defers: after this many, hold anyway.\nexport const GRACE_MAX_DEFERS = 4;\n\n// Idle reaper. Replaces \"kill the PTY because nobody is subscribed\" with \"kill\n// the PTY because the *agent* has done nothing for a long time\" — a socket\n// closing says nothing about whether work is in flight, but silence from the\n// agent itself does. See docs/architecture/2026-07-24-durable-session-runtime.md.\n//\n// 6h is deliberately far above the old 4.5-minute grace period: the reaper is a\n// resource backstop for abandoned sessions, not a session-lifetime policy. A\n// session is only ever eligible while settled (waiting_input/idle) — a `running`\n// PTY is never reaped no matter how long it has been running, because a long\n// silent turn is exactly the work this runtime exists to protect.\nexport const IDLE_REAP_AFTER_MS = 6 * 60 * 60 * 1000;\n// How often the sweep runs. Coarse on purpose — reaping 5 minutes late costs\n// nothing, and a frequent timer on an idle server does not earn its wakeups.\nexport const IDLE_REAP_SWEEP_MS = 5 * 60 * 1000;\n\n/**\n * How often the Codex rollout format is sampled. Hourly: the thing being\n * watched changes with a Codex release, not minute to minute, and a sweep\n * reads a few files' opening lines.\n */\nconst CODEX_FORMAT_CANARY_INTERVAL_MS = 60 * 60 * 1000;\n\n// Accepted `--model` / `/model` values: an alias (\"opus\", \"sonnet\") or a full\n// model name (\"claude-opus-4-5\"). Deliberately strict — this string is written\n// straight into a live PTY by applyLiveSessionSetting, so anything that could\n// terminate the slash command (\\r, \\n) or start another word must be rejected\n// rather than escaped.\nconst MODEL_NAME_RE = /^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/;\n\n// ─── Session lifecycle handlers ──────────────────────────────────────────────\n// Same arrangement: the adopt kill-wait and the resume discovery bound live\n// beside the handlers that use them, and are re-exported here because callers\n// (and tests) import them from this module.\nexport {\n  ADOPT_KILL_TIMEOUT_MS,\n  RESUME_DISCOVERY_TIMEOUT_MS,\n  waitForProcessExit,\n} from \"./api/handlers/sessions.handlers\";\n// ─── External (non-PTY) live tails ───────────────────────────────────────────\n// Constants and behaviour live in ./external-tails with the manager that uses\n// them; re-exported here because callers (and tests) import them from this\n// module.\nexport {\n  EXTERNAL_ACTIVE_WRITING_MS,\n  EXTERNAL_TAIL_IDLE_MS,\n  EXTERNAL_TAIL_MAX,\n  EXTERNAL_TAIL_RECENCY_MS,\n} from \"./external-tails\";\n\n// Default OFF. Set to \"1\" or \"true\" to show Claude Agent SDK / claude-mem\n// runs in /api/conversations and /project-chats.\nexport function parseIncludeAgentsEnv(raw: string | undefined): boolean {\n  if (raw === undefined) return false;\n  const v = raw.trim().toLowerCase();\n  return !(v === \"0\" || v === \"false\" || v === \"no\" || v === \"off\" || v === \"\");\n}\n\n/**\n * Why a resume did not happen, in the vocabulary of the thing that failed\n * rather than of HTTP (plan Phase 7c).\n *\n * `resumeSession` has two callers with nothing in common at the response layer:\n * one writes a status code, the other writes a log line. Neither can be the\n * owner of these distinctions, so they live here.\n */\nexport type ResumeFailure =\n  | { ok: false; reason: \"history_file_missing\" }\n  | { ok: false; reason: \"no_project_path\" }\n  | {\n      ok: false;\n      reason: \"conversation_busy\";\n      /** Which signals fired — carried verbatim so the 409 body is unchanged. */\n      detectedBy: BusySignal[];\n      lastActivityMs: number | null;\n      likelyOwner: \"external\" | \"unknown\";\n    }\n  /**\n   * Codex's own single-writer lock said no — either an open handle on the exact\n   * rollout (pre-flight) or the `-32600` error Codex printed after spawn.\n   *\n   * Separate from `conversation_busy` because the two are not the same claim:\n   * that one is a heuristic a caller may override with `force`, this one is the\n   * provider refusing, which no flag of ours can bypass.\n   */\n  | {\n      ok: false;\n      reason: \"codex_session_active\";\n      detectedBy: BusySignal[];\n      lastActivityMs: number | null;\n      ownerPid?: number;\n      ownerSource?: CodexOwnerSource;\n    }\n  /** Codex exited or errored during startup for some other reason. */\n  | { ok: false; reason: \"codex_start_failed\"; failureReason: string };\n\nexport type ResumeOutcome =\n  | ResumeFailure\n  | {\n      ok: true;\n      /** The session was already live here — nothing was spawned. */\n      alreadyRunning: true;\n      session: null;\n      response: SessionResponse;\n    }\n  | {\n      ok: true;\n      alreadyRunning: false;\n      session: ManagedSession;\n      /** Null only if the store lost the session between spawn and read. */\n      response: SessionResponse | null;\n    };\n\nexport class StreamerServer {\n  private httpServer: ReturnType<typeof createServer>;\n  private ptyManager: LiveSessionManager;\n  private sessionStore: SessionStore;\n  private wsHub: WSHub;\n  private fileWatcher: ConversationWatcher;\n  private sessionFileMap = new Map<string, string>(); // sessionId → JSONL filePath\n  // canonical JSONL path → live tail on a file NO PTY session owns (an external\n  // agent is writing it). Deliberately separate from sessionFileMap so managed\n  // session semantics — terminal_output, session_update, question cards — are\n  // untouched: an external tail only ever pushes transcript lines.\n  private externalTails = new Map<string, ExternalTailEntry>();\n  // Drives the map above; the map itself stays a server field because it is\n  // also read directly here (agent-file eviction, close()).\n  private externalTailManager: ExternalTailManager;\n  // Per-file seq assignments from the most recent onNewLineSpans (offset index),\n  // handed to the immediately-following onNewLines so it can stamp WS `seq` on\n  // the matching conversation_events entries. Same read → same lines order.\n  private pendingLineSeqs = new Map<string, (number | null)[]>();\n  /**\n   * A session's PTY size, recorded only when something resizes it away from the\n   * spawn defaults. Absent means \"still PTY_COLS x PTY_ROWS\", which is why this\n   * is a sparse map rather than a field on every session: resize is opt-in and\n   * rare, and the default is what every reader already assumes.\n   */\n  private sessionGeometry = new Map<string, { cols: number; rows: number }>();\n  // `origin` records whether the pending question came from the live PTY-screen\n  // path (handleLiveQuestion) or a JSONL flush. A JSONL-derived question must\n  // never clobber a PTY-originated one for a DIFFERENT question — an external\n  // agent appending an AskUserQuestion into a shared conversation would\n  // otherwise misroute the answer into this streamer's PTY.\n  private pendingQuestions = new Map<string, PendingQuestion>();\n  // Sessions resumed past a detected collision (busy probe said busy, caller\n  // forced). JSONL-derived actionable question cards are suppressed for these\n  // because a line in the shared file may have been written by the other owner.\n  private contendedSessions = new Set<string>();\n  // conversationId → ms epoch when THIS streamer's PTY for it last went idle.\n  // Lets the resume collision probe tell our own trailing JSONL writes (a\n  // hold → resume round trip) apart from another owner's. Pruned on write so it\n  // cannot grow without bound across a long-lived process.\n  private selfPtyEndedAt = new Map<string, number>();\n  // Content key of the AskUserQuestion currently broadcast for a session (from\n  // either the rendered screen or JSONL), used to de-dupe the two paths: when\n  // the screen detection fires first, the later JSONL flush of the same question\n  // is suppressed. Cleared alongside pendingQuestions.\n  private pendingQuestionKey = new Map<string, string>();\n  // Per-session permission gate currently open (scraped via OSC 777). Parallel\n  // to pendingQuestions; mobile answers it by sending the option index via\n  // /input { keys }. Cleared when the gate closes.\n  private pendingPermission = new Map<string, PendingPermission>();\n  // Content key (prompt + detail + options + cursor) of the permission gate\n  // currently broadcast for a session — mirrors pendingQuestionKey so a PTY\n  // repaint of the same gate doesn't re-broadcast on every tick. Cleared\n  // alongside pendingPermission.\n  private pendingPermissionKey = new Map<string, string>();\n  private promptRegistry: PromptRegistry;\n  // Scanner lifecycle, freshness state and the cache↔disk reconcile.\n  private scannerManager: ScannerManager;\n  // Binds a live session to the JSONL/rollout its provider writes.\n  private sessionWatchers: SessionWatchers;\n  // Boot/shutdown lifecycle of the durable session registry.\n  private registryBoot: SessionRegistryBoot;\n  // Conversation list/count/detail/search reads and the JSONL/cwd resolvers.\n  private conversationHandlers: ConversationHandlers;\n  // Session list/get/start/resume/fork/adopt/input/answer/upload/stop handlers.\n  private sessionHandlers: SessionHandlers;\n  // True only while bindWithRetry is actively retrying. The persistent\n  // listener-level 'error' handler demotes EADDRINUSE to debug during this\n  // window so the self-healing kickstart-relaunch race doesn't spam warn.\n  private binding = false;\n  private activeWarmups = new Map<number, ServerWarmupState>([[0, \"startup\"]]);\n  private nextWarmupId = 1;\n  // Every fire-and-forget task that runs a scan and then writes to this.cache\n  // in an async continuation (startup warm-up, background count refresh, …).\n  // close() awaits all of them before closing this.cache, so a scan's post-scan\n  // cache writes (upsertFromScannerMeta / populateTailFromFile / pruneGhostFiles\n  // / reconcileDeletions) can never hit a cache.db that was already closed\n  // (\"database connection is not open\"), which would otherwise leave the cache\n  // empty. Register via trackCacheWrite(); each entry removes itself on settle.\n  private inFlightCacheWrites = new Set<Promise<unknown>>();\n  private apiKey: string;\n  private apiKeySource: \"config\" | \"cli\";\n  private localNoAuth: boolean;\n  private logMenubarRequests: boolean;\n  private verbose: boolean;\n  private scanProfiles:\n    | Array<{ id: string; label: string; configDir: string; enabled: boolean; emoji: string }>\n    | undefined;\n  private dbPool: Awaited<ReturnType<typeof createPool>> | null = null;\n  private dbInstanceId: string | null = null;\n  private disableDb = false;\n  private host: string | undefined;\n  // Skip the startup warm-up scan (test hook; see ServerConfig.skipStartupWarmup).\n  private skipStartupWarmup: boolean;\n  private autoResumeOnBoot: boolean;\n  private browseRoot: string | null = null;\n  private publicUrl: string | null = null;\n  private browserCors: string | undefined;\n  private pairTokens = new PairTokenStore();\n  private exchangeAttempts = new Map<string, number[]>();\n  private sessionStartAttempts = new Map<string, number[]>();\n  private sessionInputAttempts = new Map<string, number[]>();\n  private ptyGracePeriodMs: number;\n  private defaultSystemPrompt: string;\n  // Resolved once at boot; see src/feature-flags.ts. Total map — every registry\n  // id is present, so indexing it never yields undefined.\n  private featureFlags: ResolvedFeatureFlags;\n  // Which rung of the precedence chain decided each flag. Reported at boot and\n  // over GET /api/config/feature-flags — the resolved boolean alone cannot say\n  // whether a value came from the environment, the CLI, server.yaml or nowhere.\n  private featureFlagSources: Record<FeatureFlagId, FeatureFlagSource>;\n  // Derived from featureFlags.codexSystemPrompt. Kept as its own field so the\n  // read site in startFresh() is unchanged.\n  private codexSystemPromptEnabled: boolean;\n  private defaultPermissionMode: PermissionMode;\n  private defaultModel: string;\n  private defaultEffort: EffortLevel;\n  // Allowlisted Claude CLI flags + free-text escape hatch, applied to every\n  // spawn. Resolved once at startup (flag → server.yaml), then mutated in place\n  // by PUT /api/config/claude-flags so a change applies to the next session\n  // without a restart.\n  private claudeFlags: ClaudeFlagValues;\n  private claudeExtraArgs: string | undefined;\n  // True when the values came from server.yaml (and so a write persists).\n  // False when they were pinned by a CLI flag, mirroring the api-key rotate\n  // contract: the write still takes effect in memory but won't survive restart.\n  private claudeFlagsPersistable: boolean;\n  // Map of sessionId → grace timer; fires to kill PTY after WS disconnect\n  private ptyGraceTimers = new Map<string, ReturnType<typeof setTimeout>>();\n  // Consecutive grace-timer defers for a still-`running` session (see\n  // GRACE_MAX_DEFERS). Reset when a subscriber reconnects or the PTY settles.\n  private ptyGraceDeferCounts = new Map<string, number>();\n  // Session ids that should be putOnHold at the next waiting_input/idle.\n  // Same lifetime as ptyGraceTimers: in-memory, dropped on close/restart.\n  // Last writer wins against the grace timer — never both armed. Value\n  // records whether THIS arming should ignore watchers, both at fire time\n  // and against a later subscriber connecting while it's still armed, and\n  // whether the cached conversation should be soft-deleted once it fires.\n  private holdWhenIdle = new Map<string, { ignoreWatchers: boolean; deleteAfter: boolean }>();\n  // Map of sessionId → set of subscribed WS clients\n  private sessionSubscribers = new Map<string, Set<WebSocket>>();\n  // sessionId → wall-clock ms of the last PTY chunk. Written from onOutput for\n  // every provider; read only by the idle reaper. Entries are dropped when the\n  // session leaves the runner (reap/exit/hold).\n  private lastAgentChunkAt = new Map<string, number>();\n  // sessionId → last terminal_output seq broadcast (starts at 1, per session).\n  // Stamped on every terminal_output/terminal_replay so a client can detect a\n  // stale chunk delivered after a reconnect race instead of trusting raw WS\n  // arrival order. Entries dropped alongside lastAgentChunkAt.\n  private terminalSeq = new Map<string, number>();\n  // Recently accepted input idempotency keys (C4). A retried POST replays its\n  // original outcome instead of submitting the prompt to the agent twice.\n  private idempotency = new IdempotencyStore();\n  // sessionId → lifecycle verdict from boot reconciliation. Only holds sessions\n  // this run did NOT spawn; live ones derive their lifecycle from ptyAttached.\n  private sessionVerdicts = new Map<string, ReconcileVerdict>();\n  // Periodic sweep that releases PTYs no agent is using. Null until listen().\n  private idleReaperTimer: ReturnType<typeof setInterval> | null = null;\n  private codexFormatCanaryTimer: ReturnType<typeof setInterval> | null = null;\n  // Map of clientId → WS socket (populated by the \"register\" WS handshake)\n  private clientIdToWs = new Map<string, WebSocket>();\n  // Reverse map for cleanup on close\n  private wsToClientId = new Map<WebSocket, string>();\n  private cache: ConversationCache | null = null;\n  private cacheMonitor: CacheIntegrityMonitor | null = null;\n  private hostPressureMonitor: HostPressureMonitor | null = null;\n  private projectsRepo: ProjectsRepository | null = null;\n  private conversationsRepo: ConversationsRepository | null = null;\n  private sessionsRepo: SessionsRepository | null = null;\n  // Durable session registry (C1 Phase 2). Null when runtime.db failed to open\n  // — persistence degrades to today's in-memory-only behaviour rather than\n  // taking the server down with it, so every write goes through `?.`. Note the\n  // handle is runtime.db, NOT the conversation cache: a cache failure used to\n  // null this repo and silently disable all session persistence.\n  private managedSessionsRepo: ManagedSessionsRepository | null = null;\n  private runtimeStore: RuntimeStore | null = null;\n  // Identifies this streamer run. A registry row carrying a different id is a\n  // session that outlived the process that started it.\n  private readonly streamerInstanceId = randomUUID();\n  private cacheMetadataRepo: CacheMetadataRepository | null = null;\n  // Push registration + delivery state (C7). Null when the cache DB failed to\n  // open — registration then degrades to a no-op rather than 500ing.\n  private pushRepo: PushRepository | null = null;\n\n  // Paired-device registry (C5). Null when the cache DB failed to open — auth\n  // then falls back to the shared API key alone, which is the pre-C5 behaviour.\n  private devicesRepo: DevicesRepository | null = null;\n  // Live Activity push (Feature 12). Null when APNS_KEY is unset — the ordinary\n  // case on a dev machine and in CI, where the feature is simply off. Missing an\n  // optional push credential must never stop the server from booting.\n  private apnsClient: ApnsClient | null = null;\n  private liveActivityNotifier: LiveActivityNotifier | null = null;\n  private liveActivityRenewal: LiveActivityRenewalScheduler | null = null;\n  // \"Your turn\" notifications over Expo's relay (#528). Needs no credential of\n  // its own, so unlike the Live Activity path it is on wherever the cache DB\n  // opened — with no registered device it simply sends nothing.\n  private waitingInputNotifier: WaitingInputNotifier | null = null;\n  private expoPushSender: ExpoPushSender | null = null;\n  private discoveryCache: {\n    entries: DiscoveredProcess[];\n    fetchedAt: number;\n  } | null = null;\n  // Single-flight for process discovery. Mobile polls GET /api/sessions and\n  // retries on timeout; without this, every concurrent request starts its own\n  // Windows CIM scan (observed: overlapping 80–100s /api/sessions responses).\n  private discoveryInFlight: Promise<DiscoveredProcess[]> | null = null;\n  private cacheDir: string;\n  private runtimeDbPath: string;\n  private tailSize: number;\n  private directoryDebounceMs: number;\n  private codexRoots: string[];\n  private cursorRoots: string[];\n  private includeAgents: boolean;\n  private agentEntrypoints: ReadonlySet<string>;\n  private honoApp: Hono<AppEnv>;\n  private log = getLogger(\"server\");\n  private agentConfig: AgentConfig;\n  private agentClient: AgentClient | null = null;\n  private sessionStatusBus = new EventEmitter();\n\n  constructor(config: ServerConfig & { apiKey: string }) {\n    this.sessionStatusBus.setMaxListeners(0);\n    this.apiKey = config.apiKey;\n    this.apiKeySource = config.apiKeySource ?? \"config\";\n    this.localNoAuth = config.localNoAuth ?? false;\n    this.logMenubarRequests = config.logMenubarRequests ?? false;\n    if (this.localNoAuth) {\n      console.warn(\n        \"[WARN] localNoAuth is ENABLED — all requests from localhost bypass authentication. \" +\n          \"Do not run with --local-no-auth in shared or production environments.\",\n      );\n    }\n    this.verbose = config.verbose ?? false;\n    this.disableDb = config.disableDb ?? false;\n    this.host = config.host;\n    this.skipStartupWarmup = config.skipStartupWarmup ?? false;\n    this.autoResumeOnBoot = config.autoResumeOnBoot ?? false;\n    this.scanProfiles = config.scanProfiles;\n    this.codexRoots = config.codexRoots ?? [join(homedir(), \".codex\", \"sessions\")];\n    this.cursorRoots = config.cursorRoots ?? [join(homedir(), \".cursor\", \"projects\")];\n    this.ptyGracePeriodMs = config.ptyGracePeriodMs ?? DEFAULT_PTY_GRACE_PERIOD_MS;\n    this.defaultSystemPrompt = config.defaultSystemPrompt ?? DEFAULT_SYSTEM_PROMPT;\n    // env > CLI > server.yaml > registry default, then the legacy explicit\n    // field on top (see ServerConfig.codexSystemPromptEnabled).\n    const flagResolution = resolveFeatureFlags({\n      override:\n        config.codexSystemPromptEnabled === undefined\n          ? undefined\n          : { codexSystemPrompt: config.codexSystemPromptEnabled },\n      cli: config.featureFlags,\n      yaml: loadFeatureFlags(),\n    });\n    this.featureFlags = flagResolution.values;\n    this.featureFlagSources = flagResolution.sources;\n    this.codexSystemPromptEnabled = this.featureFlags.codexSystemPrompt;\n    this.defaultPermissionMode =\n      config.defaultPermissionMode ?? loadDefaultPermissionMode() ?? \"acceptEdits\";\n    this.defaultModel = config.defaultModel ?? \"sonnet\";\n    this.defaultEffort = config.defaultEffort ?? \"low\";\n    this.claudeFlagsPersistable = config.claudeFlags === undefined;\n    this.claudeFlags = config.claudeFlags ?? loadClaudeFlags();\n    this.claudeExtraArgs = config.claudeExtraArgs ?? loadClaudeExtraArgs();\n    this.cacheDir = config.cacheDir ?? loadCacheDir() ?? join(homedir(), \".threadbase\", \"cache\");\n    // Sibling of server.yaml, deliberately NOT under cache/ — see runtime-store.ts.\n    this.runtimeDbPath = resolveRuntimeDbPath(config.runtimeDbPath);\n    this.tailSize = config.tailSize ?? loadTailSize() ?? 10;\n    this.directoryDebounceMs =\n      parseDirScanDebounceEnv(process.env.THREADBASE_DIR_SCAN_DEBOUNCE_MS) ??\n      config.directoryScanDebounceMs ??\n      1000;\n    this.scannerManager = new ScannerManager({\n      scanProfiles: this.scanProfiles,\n      codexRoots: this.codexRoots,\n      cursorRoots: this.cursorRoots,\n      directoryDebounceMs: this.directoryDebounceMs,\n      persistenceDisabled: config.scannerPersistent === false,\n      // Thunks, not values: these are opened during listen() and rebound by\n      // the integrity monitor's reset-and-rescan.\n      cache: () => this.cache,\n      cacheMonitor: () => this.cacheMonitor,\n      projectsRepo: () => this.projectsRepo,\n      conversationsRepo: () => this.conversationsRepo,\n      cacheMetadataRepo: () => this.cacheMetadataRepo,\n      trackCacheWrite: (task) => this.trackCacheWrite(task),\n    });\n    this.registryBoot = new SessionRegistryBoot({\n      // Thunks for the same reason ScannerManager takes them: the registry repo\n      // is opened during listen(), and `log`/`resumeSession` are swapped on the\n      // server instance by tests.\n      log: () => this.log,\n      ptyManager: () => this.ptyManager,\n      sessionStore: () => this.sessionStore,\n      featureFlags: () => this.featureFlags,\n      autoResumeOnBoot: () => this.autoResumeOnBoot,\n      managedSessionsRepo: () => this.managedSessionsRepo,\n      cache: () => this.cache,\n      streamerInstanceId: this.streamerInstanceId,\n      sessionVerdicts: this.sessionVerdicts,\n      selfPtyEndedAt: this.selfPtyEndedAt,\n      resumeSession: (opts) => this.sessionHandlers.resumeSession(opts),\n      watchConversationFile: (sessionId, historyId) =>\n        this.sessionWatchers.watchConversationFile(sessionId, historyId),\n      broadcastSessionList: () => this.wsHub.broadcast(this.sessionListPayload()),\n      resolveConversationTarget: (sessionId) => this.resolveConversationTarget(sessionId),\n    });\n    this.includeAgents = parseIncludeAgentsEnv(process.env.THREADBASE_INCLUDE_AGENTS);\n    this.agentEntrypoints = parseAgentEntrypointsEnv(process.env.THREADBASE_AGENT_ENTRYPOINTS);\n\n    // Every flag, every boot, with its value and the rung that decided it.\n    //\n    // This used to print only the ids differing from their defaults, under the\n    // heading \"Feature flags active\" — which stated the opposite of the truth\n    // for a flag defaulting ON: disabling sessionRehydration listed it as\n    // active. It also went silent on a stock boot, so the log could never\n    // answer \"what was this process actually running with\", only hint at it.\n    // One line for four booleans is affordable; being wrong is not.\n    this.log.info(`Feature flags: ${describeFeatureFlags(flagResolution)}`, {\n      event: \"config.feature_flags\",\n      values: this.featureFlags,\n      sources: this.featureFlagSources,\n      nonDefault: nonDefaultFeatureFlags(this.featureFlags),\n    });\n\n    const rawRoot = process.env.THREADBASE_BROWSE_ROOT ?? loadBrowseRoot() ?? config.browseRoot;\n    if (rawRoot) {\n      realpath(rawRoot)\n        .then((resolved) => {\n          this.browseRoot = resolved;\n          if (this.verbose) this.log.info(`Browse root: ${resolved}`, { browseRoot: resolved });\n        })\n        .catch(() => {\n          this.log.warn(`Warning: browse root does not exist: ${rawRoot}`, { browseRoot: rawRoot });\n        });\n    }\n\n    const rawPublicUrl = process.env.THREADBASE_PUBLIC_URL ?? config.publicUrl ?? loadPublicUrl();\n    if (rawPublicUrl) {\n      const result = validatePublicUrl(rawPublicUrl);\n      if (result.ok) {\n        this.publicUrl = result.normalized;\n        if (this.verbose)\n          this.log.info(`Public URL: ${this.publicUrl}`, { publicUrl: this.publicUrl });\n      } else {\n        this.log.warn(`Warning: ${result.error}`, { error: result.error });\n      }\n    }\n\n    this.browserCors = config.browserCors ?? loadBrowserCors();\n\n    this.sessionStore = new SessionStore(\n      (id, session) =>\n        (this.featureFlags.subagentSessions || session?.isSubagent !== true) &&\n        (this.cache?.isVisible(id) ?? true),\n    );\n    this.wsHub = new WSHub();\n    this.promptRegistry = new PromptRegistry({\n      emit: (event) =>\n        this.wsHub.broadcastToClients(this.sessionSubscribers.get(event.sessionId) ?? [], event),\n      onExpire: (prompt) =>\n        clearExpiredPendingPrompt(\n          {\n            pendingPermission: this.pendingPermission,\n            pendingPermissionKey: this.pendingPermissionKey,\n            pendingQuestions: this.pendingQuestions,\n            pendingQuestionKey: this.pendingQuestionKey,\n            sessionSubscribers: this.sessionSubscribers,\n            wsHub: this.wsHub,\n          },\n          prompt,\n        ),\n    });\n\n    this.fileWatcher = new ConversationWatcher(\n      createConversationWatcherEvents({\n        sessionFileMap: this.sessionFileMap,\n        pendingLineSeqs: this.pendingLineSeqs,\n        scannerManager: this.scannerManager,\n        // Thunks, not values: the cache is opened during listen(),\n        // externalTailManager is constructed below, and fileWatcher is the\n        // watcher these very events are being handed to.\n        cache: () => this.cache,\n        log: () => this.log,\n        fileWatcher: () => this.fileWatcher,\n        externalTailManager: () => this.externalTailManager,\n        trackCacheWrite: (task) => this.trackCacheWrite(task),\n        processJsonlQuestions: (sessionId, lines) => this.processJsonlQuestions(sessionId, lines),\n        broadcastConversationLines: (sessionId, lines, seqs) =>\n          this.broadcastConversationLines(sessionId, lines, seqs),\n      }),\n    );\n\n    this.externalTailManager = new ExternalTailManager({\n      tails: this.externalTails,\n      sessionFileMap: this.sessionFileMap,\n      fileWatcher: this.fileWatcher,\n      wsHub: this.wsHub,\n      // Thunks, not values: these are opened during listen() and rebound by\n      // the integrity monitor's reset-and-rescan.\n      cache: () => this.cache,\n      cacheMonitor: () => this.cacheMonitor,\n      broadcastConversationLines: (sessionId, lines, seqs) =>\n        this.broadcastConversationLines(sessionId, lines, seqs),\n    });\n\n    this.ptyManager = new LiveSessionManager(\n      createLiveSessionOptions({\n        sessionGeometry: this.sessionGeometry,\n        sessionStore: this.sessionStore,\n        wsHub: this.wsHub,\n        fileWatcher: this.fileWatcher,\n        scannerManager: this.scannerManager,\n        sessionStatusBus: this.sessionStatusBus,\n        sessionFileMap: this.sessionFileMap,\n        sessionSubscribers: this.sessionSubscribers,\n        lastAgentChunkAt: this.lastAgentChunkAt,\n        terminalSeq: this.terminalSeq,\n        pendingQuestions: this.pendingQuestions,\n        pendingQuestionKey: this.pendingQuestionKey,\n        pendingPermission: this.pendingPermission,\n        pendingPermissionKey: this.pendingPermissionKey,\n        promptRegistry: this.promptRegistry,\n        contendedSessions: this.contendedSessions,\n        // Thunks, not values: sessionHandlers is constructed below, the\n        // registry repo and the push notifiers are bound during listen(), and\n        // tests swap `log` on the server instance.\n        log: () => this.log,\n        sessionHandlers: () => this.sessionHandlers,\n        managedSessionsRepo: () => this.managedSessionsRepo,\n        liveActivityNotifier: () => this.liveActivityNotifier,\n        waitingInputNotifier: () => this.waitingInputNotifier,\n        ptyAttachedIds: () => this.ptyAttachedIds(),\n        cancelPendingQuestion: (sessionId) => this.cancelPendingQuestion(sessionId),\n        rememberSelfPtyEnded: (conversationId) => this.rememberSelfPtyEnded(conversationId),\n        maybeFireHoldWhenIdle: (session) => this.maybeFireHoldWhenIdle(session),\n      }),\n    );\n\n    this.sessionWatchers = new SessionWatchers({\n      ptyManager: this.ptyManager,\n      sessionStore: this.sessionStore,\n      wsHub: this.wsHub,\n      fileWatcher: this.fileWatcher,\n      sessionFileMap: this.sessionFileMap,\n      scannerManager: this.scannerManager,\n      codexRoots: this.codexRoots,\n      cursorRoots: this.cursorRoots,\n      // Thunks, not values: these are opened during listen() and rebound by\n      // the integrity monitor's reset-and-rescan.\n      cache: () => this.cache,\n      projectsRepo: () => this.projectsRepo,\n      conversationsRepo: () => this.conversationsRepo,\n      sessionsRepo: () => this.sessionsRepo,\n      cacheMetadataRepo: () => this.cacheMetadataRepo,\n      managedSessionsRepo: () => this.managedSessionsRepo,\n      findConversationByUuid: (uuid) => this.conversationHandlers.findConversationByUuid(uuid),\n      broadcastConversationLines: (sessionId, lines, seqs) =>\n        this.broadcastConversationLines(sessionId, lines, seqs),\n      ptyAttachedIds: () => this.ptyAttachedIds(),\n    });\n\n    this.conversationHandlers = new ConversationHandlers({\n      includeSubagentSessions: () => this.featureFlags.subagentSessions,\n      scannerManager: this.scannerManager,\n      sessionStore: this.sessionStore,\n      ptyManager: this.ptyManager,\n      wsHub: this.wsHub,\n      scanProfiles: this.scanProfiles,\n      // Thunks for the same reason the managers above take them: the cache is\n      // opened during listen() and rebound by the integrity monitor's\n      // reset-and-rescan, and tests swap `log` on the server instance.\n      cache: () => this.cache,\n      log: () => this.log,\n      rejectIfWarmingUp: (res) => this.rejectIfWarmingUp(res),\n      withWarmup: (state, operation) => this.withWarmup(state, operation),\n      trackCacheWrite: (task) => this.trackCacheWrite(task),\n      resolveConversationLookupId: (uuid) => this.resolveConversationLookupId(uuid),\n      findLiveSessionFilePath: (uuid) => this.findLiveSessionFilePath(uuid),\n      isBoundConversationLive: (boundId) => this.isBoundConversationLive(boundId),\n    });\n\n    // ─── Multi-agent mode bootstrap ──────────────────────────────────\n    // When MULTI_AGENT_FLOW is on, construct the Temporal client + JSONL\n    // writer. We use Connection.lazy() so the constructor stays sync —\n    // the actual gRPC connection happens on first RPC.\n    this.agentConfig = readAgentConfig();\n    const agentConfig = this.agentConfig;\n    let conversationWriter: ConversationWriter | null = null;\n    if (agentConfig.enabled) {\n      const connection = Connection.lazy({\n        address: agentConfig.temporal.address,\n      });\n      const temporalClient = new TemporalClient({\n        connection,\n        namespace: agentConfig.temporal.namespace,\n      });\n      this.agentClient = createAgentClient({\n        temporalClient,\n        taskQueue: agentConfig.temporal.taskQueue,\n      });\n      // JSONL goes next to (not inside) the SQLite cacheDir, mirroring the\n      // existing convention: ~/.threadbase/conversations/.\n      const conversationsBaseDir =\n        agentConfig.conversationsDir || join(dirname(this.cacheDir), \"conversations\");\n      conversationWriter = createConversationWriter({\n        baseDir: conversationsBaseDir,\n      });\n    }\n    const agentClient = this.agentClient;\n\n    this.sessionHandlers = new SessionHandlers({\n      includeSubagentSessions: () => this.featureFlags.subagentSessions,\n      // Collaborators the constructor already built. The Maps and Sets are\n      // passed by reference on purpose: they stay StreamerServer state, and a\n      // mutation from a handler is the same mutation the WS/PTY callbacks here\n      // — and the tests that reach in via `(server as any)` — observe.\n      sessionStore: this.sessionStore,\n      ptyManager: this.ptyManager,\n      wsHub: this.wsHub,\n      scannerManager: this.scannerManager,\n      sessionWatchers: this.sessionWatchers,\n      registryBoot: this.registryBoot,\n      externalTailManager: this.externalTailManager,\n      idempotency: this.idempotency,\n      sessionStatusBus: this.sessionStatusBus,\n      sessionFileMap: this.sessionFileMap,\n      pendingQuestions: this.pendingQuestions,\n      promptRegistry: this.promptRegistry,\n      pendingQuestionKey: this.pendingQuestionKey,\n      pendingPermission: this.pendingPermission,\n      pendingPermissionKey: this.pendingPermissionKey,\n      contendedSessions: this.contendedSessions,\n      selfPtyEndedAt: this.selfPtyEndedAt,\n      sessionSubscribers: this.sessionSubscribers,\n      agentConfig: this.agentConfig,\n      agentClient: this.agentClient,\n      defaultSystemPrompt: this.defaultSystemPrompt,\n      codexSystemPromptEnabled: this.codexSystemPromptEnabled,\n      cacheDir: this.cacheDir,\n      // Thunks for the same reason ConversationHandlers takes them: bound after\n      // construction (cache, dbPool, browseRoot), mutated at runtime by\n      // PUT /api/config/claude-flags, or swapped on the instance by tests.\n      cache: () => this.cache,\n      log: () => this.log,\n      browseRoot: () => this.browseRoot,\n      claudeFlags: () => this.claudeFlags,\n      claudeExtraArgs: () => this.claudeExtraArgs,\n      dbPool: () => this.dbPool,\n      dbInstanceId: () => this.dbInstanceId,\n      discoveryCache: () => this.discoveryCache,\n      setDiscoveryCache: (value) => {\n        this.discoveryCache = value;\n      },\n      discoveryInFlight: () => this.discoveryInFlight,\n      setDiscoveryInFlight: (value) => {\n        this.discoveryInFlight = value;\n      },\n      rejectIfWarmingUp: (res) => this.rejectIfWarmingUp(res),\n      ptyAttachedIds: () => this.ptyAttachedIds(),\n      withReconciledLifecycle: (sessions) => this.withReconciledLifecycle(sessions),\n      broadcastOrUnicastSessionList: (req) => this.broadcastOrUnicastSessionList(req),\n      checkSessionStartRateLimit: (ip) => this.checkSessionStartRateLimit(ip),\n      checkSessionInputRateLimit: (sessionId) => this.checkSessionInputRateLimit(sessionId),\n      spawnFlagOverrides: () => this.spawnFlagOverrides(),\n      resolveConversationTarget: (sessionId) => this.resolveConversationTarget(sessionId),\n      waitForStartupOutcome: (sessionId, timeoutMs) =>\n        this.waitForStartupOutcome(sessionId, timeoutMs),\n      forgetSession: (sessionId) => this.forgetSession(sessionId),\n      abandonFailedStart: (sessionId) => this.abandonFailedStart(sessionId),\n      armHoldWhenIdle: (sessionId, opts) => this.armHoldWhenIdle(sessionId, opts),\n      enrichResumedSessionAsync: (sessionId, projectPath, conv) =>\n        this.enrichResumedSessionAsync(sessionId, projectPath, conv),\n      findJsonlPath: (uuid) => this.conversationHandlers.findJsonlPath(uuid),\n      readCwdFromJsonl: (filePath) => this.conversationHandlers.readCwdFromJsonl(filePath),\n    });\n\n    const apiDeps = createApiDeps({\n      sessionGeometry: this.sessionGeometry,\n      // Values where the literal captured values: publicUrl/browseRoot are the\n      // construction-time reads they always were (realpath resolves later and\n      // deliberately does not update these).\n      apiKey: () => this.apiKey,\n      localNoAuth: this.localNoAuth,\n      logMenubarRequests: this.logMenubarRequests,\n      publicUrl: this.publicUrl,\n      browseRoot: this.browseRoot,\n      browserCors: this.browserCors,\n      ptyGracePeriodMs: this.ptyGracePeriodMs,\n      rotateApiKey: () => this.rotateApiKey(),\n      claudeFlagsConfig: () => this.getClaudeFlagsConfig(),\n      featureFlagsConfig: () => this.getFeatureFlagsConfig(),\n      setClaudeFlagsConfig: (values, extraArgs) => this.setClaudeFlagsConfig(values, extraArgs),\n      ptyManager: this.ptyManager,\n      sessionStore: this.sessionStore,\n      wsHub: this.wsHub,\n      sessionHandlers: this.sessionHandlers,\n      conversationHandlers: this.conversationHandlers,\n      // Thunks for the same reason the handler classes take them: the stores\n      // open during listen() and are rebound by the integrity monitor's\n      // reset-and-rescan, and tests swap methods on the server instance.\n      cache: () => this.cache,\n      cacheMonitor: () => this.cacheMonitor,\n      hostPressureMonitor: () => this.hostPressureMonitor,\n      pushRepo: () => this.pushRepo,\n      liveActivityPushEnabled: () => this.liveActivityNotifier !== null,\n      expoPushEnabled: () => this.waitingInputNotifier !== null,\n      expoPushSender: () => this.expoPushSender,\n      devicesRepo: () => this.devicesRepo,\n      projectsRepo: () => this.projectsRepo,\n      conversationsRepo: () => this.conversationsRepo,\n      sessionsRepo: () => this.sessionsRepo,\n      cacheMetadataRepo: () => this.cacheMetadataRepo,\n      runtimeStore: () => this.runtimeStore,\n      managedSessionsRepo: () => this.managedSessionsRepo,\n      sessionVerdicts: () => this.sessionVerdicts,\n      log: () => this.log,\n      ptyAttachedIds: () => this.ptyAttachedIds(),\n      withReconciledLifecycle: (sessions) => this.withReconciledLifecycle(sessions),\n      currentWarmupState: () => this.currentWarmupState(),\n      addSessionSubscriber: (sessionId, ws) => this.addSessionSubscriber(sessionId, ws),\n      removeSessionSubscriber: (sessionId, ws) => this.removeSessionSubscriber(sessionId, ws),\n      startGraceTimer: (sessionId, delayMs) => this.startGraceTimer(sessionId, delayMs),\n      armHoldWhenIdle: (sessionId) => this.armHoldWhenIdle(sessionId),\n      handleSessionsCount: (res) => this.handleSessionsCount(res),\n      applyLiveSessionSetting: (id, req, res, setting) =>\n        this.applyLiveSessionSetting(id, req, res, setting),\n      handlePairStart: (res) => this.handlePairStart(res),\n      handlePairExchange: (req, res) => this.handlePairExchange(req, res),\n      handleBrowse: (url, res) => this.handleBrowse(url, res),\n      handleMkdir: (req, res) => this.handleMkdir(req, res),\n      clientIdToWs: this.clientIdToWs,\n      wsToClientId: this.wsToClientId,\n      sessionSubscribers: this.sessionSubscribers,\n      terminalSeq: this.terminalSeq,\n      pendingPermission: this.pendingPermission,\n      pendingQuestions: this.pendingQuestions,\n      promptRegistry: this.promptRegistry,\n      agentClient,\n      conversationWriter,\n      agentConfig,\n    });\n\n    this.httpServer = createServer((req, res) => this.handleRequest(req, res));\n\n    // Defense-in-depth against unhandled socket errors that would otherwise\n    // crash the process with \"Unhandled 'error' event\":\n    //\n    // 1. 'clientError' fires when the http parser rejects a request (bad\n    //    headers, etc.). Default behavior destroys the socket, but a stale\n    //    handler could leak. We respond 400 (or destroy on any I/O error)\n    //    and never throw.\n    this.httpServer.on(\"clientError\", (_err, socket) => {\n      try {\n        socket.end(\"HTTP/1.1 400 Bad Request\\r\\nConnection: close\\r\\n\\r\\n\");\n      } catch {\n        socket.destroy();\n      }\n    });\n    // 2. Listener-level 'error' (port in use, etc.) — log instead of crashing.\n    this.httpServer.on(\"error\", (err) => {\n      const e = err as NodeJS.ErrnoException;\n      // While bindWithRetry is retrying, each failed listen() attempt also\n      // reaches this persistent handler. That EADDRINUSE is the expected,\n      // self-healing kickstart race — log it at debug, not warn, so boots stay\n      // quiet. Genuine runtime errors (and the final give-up) still warn.\n      if (this.binding && e.code === \"EADDRINUSE\") {\n        this.log.debug?.(`httpServer error during bind: ${err.message}`, {\n          error: err.message,\n          event: \"http.server_error\",\n        });\n        return;\n      }\n      this.log.warn(`httpServer error: ${err.message}`, {\n        error: err.message,\n        event: \"http.server_error\",\n      });\n    });\n    // 3. The WebSocket upgrade race that caused real prod crashes:\n    //    @hono/node-ws registers an 'upgrade' listener that does `await\n    //    app.request(...)` before promoting the socket. If the peer RSTs\n    //    during the await, the raw net.Socket emits 'error' with no listener,\n    //    crashing the process. Registering our own 'upgrade' listener FIRST\n    //    attaches a noop 'error' handler to the raw socket so the upgrade\n    //    abort becomes a harmless event. Node fires upgrade listeners in\n    //    registration order, so this must be wired before injectWebSocket().\n    this.httpServer.on(\"upgrade\", (_req, socket) => {\n      socket.on(\"error\", () => {\n        // Intentional: a RST during the WS handshake is normal client\n        // behavior (network blip, peer kill). The socket is already torn\n        // down; we just need to absorb the event so Node doesn't crash.\n      });\n    });\n\n    // createNodeWebSocket needs the real Hono app (it calls app.request() on\n    // upgrade). Resolve the chicken-and-egg by creating the app without WS\n    // routes first, handing it to createNodeWebSocket, then mounting the WS\n    // route onto the same app instance.\n    this.honoApp = createHonoApp(apiDeps);\n    mountWebSocket(this.honoApp, this.httpServer, apiDeps);\n  }\n\n  // ─── PTY Grace Timer ────────────────────────────────────────────\n\n  private ptyAttachedIds(): Set<string> {\n    return new Set(this.ptyManager.listSessions().map((s) => s.id));\n  }\n\n  // Record that our own PTY for `conversationId` just ended. Entries older than\n  // the busy window can never change a verdict, so drop them as we go rather\n  // than accumulating one per conversation for the process's lifetime.\n  private rememberSelfPtyEnded(conversationId: string): void {\n    const now = Date.now();\n    const cutoff = now - resolveResumeBusyWindowMs();\n    for (const [id, at] of this.selfPtyEndedAt) {\n      if (at < cutoff) this.selfPtyEndedAt.delete(id);\n    }\n    this.selfPtyEndedAt.set(conversationId, now);\n  }\n\n  /**\n   * Send a session_list to only the client that triggered this HTTP request\n   * (identified by X-Client-Id header → registered WS socket). Falls back to\n   * a full broadcast if no match exists (old clients, or no WS registered yet).\n   */\n  private broadcastOrUnicastSessionList(req: IncomingMessage): void {\n    const clientId = req.headers[\"x-client-id\"];\n    const ws = typeof clientId === \"string\" ? this.clientIdToWs.get(clientId) : undefined;\n    const payload = this.sessionListPayload();\n    if (ws) {\n      this.wsHub.unicast(ws, payload);\n    } else {\n      this.wsHub.broadcast(payload);\n    }\n  }\n\n  private sessionListPayload(): { type: \"session_list\"; sessions: readonly SessionResponse[] } {\n    return {\n      type: \"session_list\" as const,\n      sessions: this.withReconciledLifecycle(this.sessionStore.list(this.ptyAttachedIds())),\n    };\n  }\n\n  /**\n   * Overlay boot-reconciliation verdicts onto session responses.\n   *\n   * A session left by a previous run is not in the in-memory store, so\n   * SessionStore cannot classify it — it only ever sees what this run spawned.\n   * Discovery may still surface the process, in which case the reconciler knows\n   * strictly more about it than discovery does: it can tell `detached` (alive\n   * and confirmed ours) from `orphaned` (alive but identity unconfirmed), which\n   * a pid enumeration alone cannot.\n   *\n   * Only applied when the session is NOT live here: a session this run owns has\n   * an authoritative lifecycle already, and a stale verdict must never override\n   * it.\n   */\n  private withReconciledLifecycle(\n    sessions: readonly SessionResponse[],\n  ): readonly SessionResponse[] {\n    if (this.sessionVerdicts.size === 0) return sessions;\n    return sessions.map((s) => {\n      if (s.ptyAttached) return s;\n      const verdict = this.sessionVerdicts.get(s.id);\n      if (!verdict) return s;\n      return { ...s, lifecycle: verdict.lifecycle, lifecycleSource: \"reconcile\" as const };\n    });\n  }\n\n  private addSessionSubscriber(sessionId: string, ws: WebSocket): void {\n    let subs = this.sessionSubscribers.get(sessionId);\n    if (!subs) {\n      subs = new Set();\n      this.sessionSubscribers.set(sessionId, subs);\n    }\n    subs.add(ws);\n    // Cancel any pending grace timer since someone is now watching. Reset the\n    // defer count too so the next disconnect starts a fresh defer budget.\n    const existing = this.ptyGraceTimers.get(sessionId);\n    if (existing) {\n      clearTimeout(existing);\n      this.ptyGraceTimers.delete(sessionId);\n    }\n    this.ptyGraceDeferCounts.delete(sessionId);\n    // A latch armed with ignoreWatchers stays armed through a later connect —\n    // \"ignore them\" means ignore watchers who show up after arming too, not\n    // just the ones present at arm time.\n    const armed = this.holdWhenIdle.get(sessionId);\n    if (armed && !armed.ignoreWatchers) {\n      this.holdWhenIdle.delete(sessionId);\n      this.log.info(\n        `[hold-when-idle] cancelled ${sessionId} (subscribe)`,\n        { sessionId, event: \"pty.hold_when_idle_cancel\", reason: \"subscribe\" },\n        \"pino\",\n      );\n    }\n  }\n\n  private removeSessionSubscriber(sessionId: string, ws: WebSocket): void {\n    const subs = this.sessionSubscribers.get(sessionId);\n    if (!subs) return;\n    subs.delete(ws);\n    if (subs.size === 0) this.sessionSubscribers.delete(sessionId);\n  }\n\n  /**\n   * Bring up Live Activity push, if credentials are present (Feature 12).\n   *\n   * APNS_KEY absent is the ordinary case on a dev machine and in CI, so this\n   * logs once at info and leaves the feature off rather than failing: the server\n   * must not refuse to boot over a missing optional push credential.\n   *\n   * The key is read from the environment as PEM contents and never from a path\n   * on disk; neither it nor any device token is ever logged.\n   */\n  private initLiveActivityPush(pushRepo: PushRepository): void {\n    // Logged rather than returned silently: a box with APNS_KEY configured used\n    // to print \"Live Activity push enabled\" here, so an operator who flips the\n    // flag off needs the credential to look ignored on purpose, not missing.\n    if (!this.featureFlags.liveActivityPush) {\n      this.log.info(\n        \"Live Activity push is disabled by the liveActivityPush feature flag. \" +\n          \"Enable it with THREADBASE_FEATURE_LIVE_ACTIVITY_PUSH=1, --feature liveActivityPush=true, \" +\n          \"or feature_flags: in server.yaml.\",\n        { event: \"live_activity.disabled\" },\n      );\n      return;\n    }\n\n    const creds = readApnsCredentialsFromEnv();\n    if (!creds) {\n      const why = describeMissingApnsCredentials();\n      if (why) this.log.info(why, { event: \"live_activity.disabled\" });\n      return;\n    }\n\n    this.apnsClient = new ApnsClient(creds);\n    const sender = new LiveActivitySender(this.apnsClient, pushRepo);\n    // Identifies this streamer to mobile, which shows several servers at once.\n    // Matches the id used for DB-persisted session scoping.\n    const serverId = process.env.THREADBASE_INSTANCE_ID ?? hostname();\n    this.liveActivityNotifier = new LiveActivityNotifier(sender, serverId, hostname());\n    // Re-arms pending renewals from the DB. Started here rather than lazily\n    // because the deadlines were persisted precisely so a restart inside an\n    // 8-hour window does not drop them.\n    this.liveActivityRenewal = new LiveActivityRenewalScheduler({\n      repo: pushRepo,\n      sender,\n      sessionStore: this.sessionStore,\n      serverId,\n      serverLabel: hostname(),\n    });\n    this.liveActivityRenewal.start();\n    // Host is logged (it selects sandbox vs production, a routine source of\n    // \"why is nothing arriving\") but no credential material is.\n    this.log.info(\"Live Activity push enabled\", {\n      event: \"live_activity.enabled\",\n      host: creds.host,\n      topic: `${creds.bundleId}.push-type.liveactivity`,\n    });\n  }\n\n  /**\n   * Bring up \"your turn\" notifications over Expo's relay (#528).\n   *\n   * Unconditional, unlike Live Activity push: Expo holds the app's APNs and FCM\n   * credentials, so a self-hosted streamer needs no credential of its own. The\n   * access token is optional and only relevant if the Expo project has enhanced\n   * security enabled — requiring one would lock out every self-hoster, since\n   * they do not own the project. It is never logged.\n   */\n  private initWaitingInputPush(pushRepo: PushRepository): void {\n    const sender = new ExpoPushSender(pushRepo, process.env.THREADBASE_EXPO_ACCESS_TOKEN);\n    this.expoPushSender = sender;\n    this.waitingInputNotifier = new WaitingInputNotifier(sender);\n  }\n\n  /** Whether any live socket is subscribed to this session — \"someone is looking\". */\n  private hasSessionSubscriber(sessionId: string): boolean {\n    const subs = this.sessionSubscribers.get(sessionId);\n    if (!subs) return false;\n    for (const ws of subs) {\n      if (ws.readyState === ws.OPEN) return true;\n    }\n    return false;\n  }\n\n  /**\n   * Log any Codex rollout assumption that no longer holds.\n   *\n   * Deliberately log-only. A format change is not something the streamer can\n   * repair or route around, and a WS alert or a blocked request would turn an\n   * informational signal into an outage. What it buys is that the next silent\n   * empty conversation is preceded by a line naming the assumption that moved.\n   */\n  private runCodexFormatCanary(): void {\n    try {\n      const report = sweepCodexFormat(this.codexRoots, {\n        readdirSync,\n        statSync,\n        existsSync,\n        readFileSync,\n        join,\n      });\n      for (const finding of report.findings) {\n        this.log.warn(`[codex-format] ${finding.code}: ${finding.detail}`, {\n          event: \"codex.format_drift\",\n          code: finding.code,\n          detail: finding.detail,\n          filePath: finding.filePath,\n        });\n      }\n    } catch (err) {\n      // A canary must never be the thing that breaks the daemon it watches.\n      this.log.warn(\"codex format canary failed\", { event: \"codex.format_canary_failed\", err });\n    }\n  }\n\n  /**\n   * Release PTYs whose agent has been silent past IDLE_REAP_AFTER_MS.\n   *\n   * This is the bound that lets handleWsClose stop arming kill timers. The\n   * distinction that matters: the old timer measured how long nobody was\n   * *watching*, which is uncorrelated with whether work is in flight. This\n   * measures how long the *agent* has produced nothing, and only ever considers\n   * sessions that are already settled — a `running` PTY is skipped regardless of\n   * age, so a long silent turn is never interrupted.\n   *\n   * Exposed (not private) so tests can drive one sweep deterministically instead\n   * of waiting on the interval.\n   */\n  reapIdleSessions(now: number = Date.now()): string[] {\n    if (this.ptyManager.isRemote()) return [];\n    const reaped: string[] = [];\n    for (const session of this.ptyManager.listSessions()) {\n      // Never touch a session mid-turn. This is the whole point.\n      if (session.status === \"running\") continue;\n\n      // Fall back to startedAt so a session that never produced a chunk is\n      // still eligible eventually — otherwise a PTY that failed to emit\n      // anything would be immortal.\n      const lastActive =\n        this.lastAgentChunkAt.get(session.id) ??\n        session.lastActivityAt?.getTime() ??\n        session.startedAt.getTime();\n\n      if (now - lastActive < IDLE_REAP_AFTER_MS) continue;\n\n      this.log.info(\n        `[reap] releasing idle PTY for ${session.id} (idle ${Math.round((now - lastActive) / 60_000)}m)`,\n        { sessionId: session.id, event: \"pty.idle_reap\", idleMs: now - lastActive },\n        \"pino\",\n      );\n      this.ptyManager.putOnHold(session.id);\n      this.lastAgentChunkAt.delete(session.id);\n      this.terminalSeq.delete(session.id);\n      this.idempotency.clear(session.id);\n      this.sessionSubscribers.delete(session.id);\n      reaped.push(session.id);\n\n      const held = this.sessionStore.get(session.id, this.ptyAttachedIds());\n      if (held) this.wsHub.broadcast({ type: \"session_update\", session: held });\n    }\n    return reaped;\n  }\n\n  private startGraceTimer(sessionId: string, delayMs: number): void {\n    // Last writer wins: a bare hold_session clears a waiting_input latch.\n    this.holdWhenIdle.delete(sessionId);\n    const existing = this.ptyGraceTimers.get(sessionId);\n    if (existing) clearTimeout(existing);\n\n    const timer = setTimeout(() => {\n      this.ptyGraceTimers.delete(sessionId);\n      if (this.ptyManager.hasSession(sessionId)) {\n        // Never interrupt a session mid-response. A `running` PTY is actively\n        // streaming a Claude turn that hasn't flushed to the JSONL yet; killing\n        // it (SIGINT) would lose the in-flight answer. Re-arm the grace timer\n        // and re-check after another grace period — it only becomes eligible\n        // for hold once it settles back to waiting_input/idle.\n        //\n        // But bound the deferral: a PTY that never settles (its last line was a\n        // status bar with no prompt marker) would re-arm forever and leak.\n        // After GRACE_MAX_DEFERS consecutive defers, hold it anyway.\n        const resp = this.sessionStore.get(sessionId, this.ptyAttachedIds());\n        if (resp?.status === \"running\") {\n          const defers = (this.ptyGraceDeferCounts.get(sessionId) ?? 0) + 1;\n          if (defers <= GRACE_MAX_DEFERS) {\n            this.ptyGraceDeferCounts.set(sessionId, defers);\n            this.log.info(\n              `[grace] session ${sessionId} still running, deferring hold (${defers}/${GRACE_MAX_DEFERS})`,\n              { sessionId, event: \"pty.grace_defer\", defers, maxDefers: GRACE_MAX_DEFERS },\n              \"pino\",\n            );\n            this.startGraceTimer(sessionId, delayMs);\n            return;\n          }\n          this.log.warn(\n            `[grace] session ${sessionId} exceeded ${GRACE_MAX_DEFERS} defers, holding anyway`,\n            { sessionId, event: \"pty.grace_defer_cap\", defers, maxDefers: GRACE_MAX_DEFERS },\n            \"pino\",\n          );\n        }\n        this.ptyGraceDeferCounts.delete(sessionId);\n        this.sessionSubscribers.delete(sessionId);\n        this.log.info(\n          `[grace] killing idle PTY for ${sessionId}`,\n          { sessionId, event: \"pty.grace_kill\" },\n          \"pino\",\n        );\n        this.ptyManager.putOnHold(sessionId);\n        const held = this.sessionStore.get(sessionId, this.ptyAttachedIds());\n        if (held) this.wsHub.broadcast({ type: \"session_update\", session: held });\n      } else {\n        this.ptyGraceDeferCounts.delete(sessionId);\n        this.sessionSubscribers.delete(sessionId);\n      }\n    }, delayMs);\n\n    this.ptyGraceTimers.set(sessionId, timer);\n  }\n\n  private clearGrace(sessionId: string): void {\n    const existing = this.ptyGraceTimers.get(sessionId);\n    if (existing) {\n      clearTimeout(existing);\n      this.ptyGraceTimers.delete(sessionId);\n    }\n    this.ptyGraceDeferCounts.delete(sessionId);\n  }\n\n  /**\n   * Arm the in-app \"Kill on idle\" latch: hold now if already settled, otherwise\n   * on the next running → waiting_input (or idle). No grace delay, no defer cap.\n   * A subscribed leaving socket must not block an immediate hold.\n   */\n  private armHoldWhenIdle(\n    sessionId: string,\n    opts: { ignoreWatchers?: boolean; deleteAfter?: boolean } = {},\n  ): \"held\" | \"armed\" | \"no_session\" {\n    if (!this.ptyManager.hasSession(sessionId)) return \"no_session\";\n    this.clearGrace(sessionId);\n    const ignoreWatchers = opts.ignoreWatchers ?? false;\n    const deleteAfter = opts.deleteAfter ?? false;\n    const status =\n      this.ptyManager.getSession(sessionId)?.status ??\n      this.sessionStore.getManaged(sessionId)?.status;\n    if (status === \"waiting_input\" || status === \"idle\") {\n      this.holdWhenIdle.delete(sessionId);\n      this.ptyManager.putOnHold(sessionId);\n      this.forgetIfEmptyUnused(sessionId);\n      if (deleteAfter) this.softDeleteConversation(sessionId);\n      return \"held\";\n    }\n    this.holdWhenIdle.set(sessionId, { ignoreWatchers, deleteAfter });\n    this.log.info(\n      `[hold-when-idle] armed ${sessionId}`,\n      { sessionId, event: \"pty.hold_when_idle_armed\", ignoreWatchers, deleteAfter },\n      \"pino\",\n    );\n    return \"armed\";\n  }\n\n  /**\n   * Fire the Kill-on-idle latch from the shared onStatusChange funnel.\n   * Delete first so the ensuing idle transition cannot re-enter.\n   */\n  private maybeFireHoldWhenIdle(session: { id: string; status: string }): void {\n    if (session.status !== \"waiting_input\" && session.status !== \"idle\") return;\n    const armed = this.holdWhenIdle.get(session.id);\n    if (!armed) return;\n    this.holdWhenIdle.delete(session.id);\n    if (!armed.ignoreWatchers && this.hasSessionSubscriber(session.id)) {\n      this.log.info(\n        `[hold-when-idle] cancelled ${session.id} (subscriber)`,\n        { sessionId: session.id, event: \"pty.hold_when_idle_cancel\", reason: \"subscriber\" },\n        \"pino\",\n      );\n      return;\n    }\n    this.log.info(\n      `[hold-when-idle] holding ${session.id}`,\n      { sessionId: session.id, event: \"pty.hold_when_idle_fire\" },\n      \"pino\",\n    );\n    this.ptyManager.putOnHold(session.id);\n    this.forgetIfEmptyUnused(session.id);\n    if (armed.deleteAfter) this.softDeleteConversation(session.id);\n  }\n\n  private forgetIfEmptyUnused(sessionId: string): void {\n    this.sessionHandlers.forgetIfEmptyUnused(sessionId);\n  }\n\n  private softDeleteConversation(sessionId: string): void {\n    this.sessionHandlers.softDeleteConversation(sessionId);\n  }\n\n  get port(): number {\n    const addr = this.httpServer.address();\n    return typeof addr === \"object\" && addr ? addr.port : 0;\n  }\n\n  private currentWarmupState(): ServerWarmupState | null {\n    let current: ServerWarmupState | null = null;\n    for (const state of this.activeWarmups.values()) current = state;\n    return current;\n  }\n\n  private beginWarmup(state: ServerWarmupState): number {\n    const id = this.nextWarmupId++;\n    this.activeWarmups.set(id, state);\n    return id;\n  }\n\n  private finishWarmup(id: number): void {\n    if (!this.activeWarmups.delete(id) || this.activeWarmups.size > 0) return;\n    this.wsHub.broadcast({ type: \"cache_ready\" });\n  }\n\n  private async withWarmup<T>(state: ServerWarmupState, operation: () => Promise<T>): Promise<T> {\n    const id = this.beginWarmup(state);\n    try {\n      return await operation();\n    } finally {\n      this.finishWarmup(id);\n    }\n  }\n\n  private rejectIfWarmingUp(res: ServerResponse): boolean {\n    const warmupState = this.currentWarmupState();\n    if (!warmupState) return false;\n    const body: ServerWarmingUpResponse = {\n      error: \"Server is warming up\",\n      code: \"SERVER_WARMING_UP\",\n      warmupState,\n    };\n    json(res, 503, body);\n    return true;\n  }\n\n  /**\n   * Say which provider CLIs this machine can actually launch.\n   *\n   * The operator cannot discover this case unaided: under launchd/Task\n   * Scheduler the service inherits a stripped PATH, so a CLI that works\n   * perfectly in their terminal is invisible to the service, and every session\n   * start dies milliseconds in. `/api/diagnostics` answers it too, but only for\n   * someone who already suspects it.\n   *\n   * Availability only, never a version — `--version` costs a process spawn per\n   * provider (85ms for claude here) and belongs on the first request that wants\n   * it, not on boot.\n   *\n   * Called AFTER the port is bound, which is not cosmetic. This is the first\n   * caller of the exe resolvers in the process, so the memo is cold by\n   * definition and each provider pays one synchronous `which` / `where.exe`\n   * (platform.ts) with a 3s timeout. On POSIX that is 3ms found, 7ms missing.\n   * Windows is the risk — `where.exe` is slower, `execFileSync` blocks the\n   * event loop, and Task Scheduler's stripped PATH is exactly where a miss\n   * pays the full timeout — so the worst case is ~6s of two blocking lookups.\n   * After `listen()` that delays the first requests on a box that cannot start\n   * a session anyway; before it, it would have delayed binding the port.\n   */\n  private logProviderAvailability(): void {\n    for (const provider of PROVIDER_NAMES) {\n      if (locateProviderExe(provider)) {\n        this.log.info(`Provider ${provider}: found`, { event: \"config.provider\", provider });\n      } else {\n        this.log.warn(`Provider ${provider}: not found on PATH — sessions cannot start`, {\n          event: \"config.provider_missing\",\n          provider,\n        });\n      }\n    }\n  }\n\n  async listen(port: number, opts?: { awaitReady?: boolean }): Promise<void> {\n    if (this.featureFlags.ptyHost) {\n      // Degrade to in-process runners rather than refusing to boot.\n      //\n      // `connectOrSpawnHost` rejects after ~5s if the host never accepts a\n      // connection — a broken node-pty in the child, an unwritable socket\n      // directory, a half-dead host still holding the path. Unhandled, that\n      // makes an experimental, default-off flag the one subsystem that can stop\n      // the streamer from starting at all, when every other optional subsystem\n      // here (runtime store, cache, reconciliation) logs and continues.\n      //\n      // Safe to fall through: `useRemoteRunner` only disposes the in-process\n      // runners *after* a successful connect, so on this path they are still\n      // the live ones and nothing has been adopted.\n      try {\n        let sessions: ManagedSession[] | null = null;\n        for (let attempt = 0; attempt < 2; attempt += 1) {\n          const transport = await connectOrSpawnHost({\n            instanceId: process.env.THREADBASE_INSTANCE_ID ?? hostname(),\n          });\n          try {\n            sessions = await this.ptyManager.useRemoteRunner(transport);\n            break;\n          } catch (err) {\n            if (!(err instanceof PtyHostProtocolMismatchError) || attempt > 0) throw err;\n            this.log.info(`[pty-host] replaced incompatible protocol ${err.hostVersion}`, {\n              event: \"pty_host.protocol_replaced\",\n              hostVersion: err.hostVersion,\n              streamerVersion: err.streamerVersion,\n            });\n          }\n        }\n        if (!sessions) throw new Error(\"pty-host replacement did not produce a compatible host\");\n        for (const session of sessions) {\n          this.sessionStore.addManaged({ ...session, reconciled: true });\n        }\n        this.log.info(`[pty-host] re-adopted ${sessions.length} live session(s)`, {\n          event: \"pty_host.sessions_adopted\",\n          sessions: sessions.length,\n        });\n      } catch (err) {\n        // Error, not warn: the operator asked for the host and is not getting\n        // it, so sessions will not survive the next restart. Boot continues.\n        this.log.error(\n          \"[pty-host] could not attach; falling back to in-process PTYs for this run\",\n          { event: \"pty_host.attach_failed\", err },\n        );\n      }\n    }\n\n    // DB is still used for upload records and other non-session purposes.\n    // Session state is no longer persisted to DB.\n    const dbConfig = this.disableDb ? null : getDbConfig();\n    if (dbConfig) {\n      this.dbPool = await createPool(dbConfig);\n      this.dbInstanceId = dbConfig.instanceId;\n      const masked = maskConnectionString(dbConfig.connectionString);\n      this.log.info(`Database enabled: ${masked}`, {\n        connectionString: masked,\n        instanceId: dbConfig.instanceId,\n      });\n      this.log.info(`Instance ID: ${dbConfig.instanceId}`, { instanceId: dbConfig.instanceId });\n      await runMigrations(this.dbPool);\n      this.log.info(\"Database migrations applied\", { event: \"db.migrations_applied\" });\n    }\n\n    // Bind with bounded retry. `launchctl kickstart -k` kills the old prod\n    // instance and relaunches immediately; even after the old process has\n    // exited cleanly, the kernel can hold :PORT in a transient teardown state\n    // for a beat, so the fresh instance's first bind can race into EADDRINUSE.\n    // Retrying with a short backoff absorbs that window instead of leaving the\n    // process listener-less (the old behavior: the listener-level 'error'\n    // handler logged EADDRINUSE once and gave up, failing the deploy\n    // healthcheck). On the final attempt we let the error propagate so a\n    // genuinely occupied port still surfaces loudly.\n    await this.bindWithRetry(port, this.host);\n\n    // unref() so an idle server with no other work can still exit — this timer\n    // must never be the reason the process stays alive.\n    if (!this.ptyManager.isRemote()) {\n      this.idleReaperTimer = setInterval(() => this.reapIdleSessions(), IDLE_REAP_SWEEP_MS);\n      this.idleReaperTimer.unref?.();\n    }\n\n    // Codex owns the rollout format and does not version it. Sample the newest\n    // files periodically so a change is a log line rather than a user reporting\n    // an empty conversation weeks later. Reads at most a few files' opening\n    // lines; never blocks a request and never changes behaviour.\n    if (this.codexRoots.length > 0) {\n      this.runCodexFormatCanary();\n      this.codexFormatCanaryTimer = setInterval(\n        () => this.runCodexFormatCanary(),\n        CODEX_FORMAT_CANARY_INTERVAL_MS,\n      );\n      this.codexFormatCanaryTimer.unref?.();\n    }\n\n    // Informational only: samples cheap OS + event-loop signals and broadcasts\n    // host_pressure on a level change. Never holds, kills, or refuses sessions.\n    this.hostPressureMonitor = createHostPressureMonitor(\n      this.wsHub,\n      () => this.ptyAttachedIds().size,\n    );\n\n    const warmUp = new Promise<void>((resolveWarm) => {\n      {\n        this.log.info(`Streamer server listening on port ${port}`, {\n          port,\n          event: \"server.listening\",\n          ...(this.host !== undefined && { host: this.host }),\n        });\n        this.logProviderAvailability();\n        // Opened BEFORE and INDEPENDENTLY of the conversation cache. These two\n        // used to share a handle, so the documented better-sqlite3 ABI mismatch\n        // — which the cache catch below tolerates by design — silently took the\n        // session registry with it: recordSpawn/recordStatus/recordShutdownState\n        // all became no-ops with no separate signal. Each store now fails, and\n        // logs, on its own.\n        try {\n          this.runtimeStore = RuntimeStore.open(this.runtimeDbPath);\n          this.managedSessionsRepo = new ManagedSessionsRepository(this.runtimeStore.getDatabase());\n          // Devices live here, not in the cache. Two consequences beyond\n          // surviving `cache clear`: the registry no longer depends on the\n          // conversation cache opening at all — a cache failure used to null\n          // devicesRepo and silently drop every device to the shared-key path —\n          // and it is now durable enough for a client to present the device\n          // token as its only credential.\n          this.devicesRepo = new DevicesRepository(this.runtimeStore.getDatabase());\n        } catch (err) {\n          const message = err instanceof Error ? err.message : String(err);\n          const abiMismatch =\n            message.includes(\"NODE_MODULE_VERSION\") ||\n            message.includes(\"was compiled against a different Node.js version\");\n          this.log.error(\n            `Runtime store failed to open — session persistence DISABLED; ` +\n              `sessions will not survive a restart.` +\n              (abiMismatch ? ` Fix: npm rebuild better-sqlite3` : \"\") +\n              ` (${message})`,\n            { error: message, abiMismatch, path: this.runtimeDbPath, event: \"runtime.open_failed\" },\n          );\n        }\n        this.warnIfE2eeDisabled();\n        void this.probeAccessGate();\n        if (this.ptyManager.isRemote()) {\n          this.ptyManager.startRemoteHeartbeat(() => {\n            if (!this.managedSessionsRepo) {\n              return { registryState: \"unknown\", referencedSessionIds: [] };\n            }\n            const referencedSessionIds = this.ptyManager\n              .listSessions()\n              .filter((session) => this.managedSessionsRepo?.get(session.id)?.completed_at == null)\n              .map((session) => session.id);\n            return { registryState: \"known\", referencedSessionIds };\n          });\n        }\n        try {\n          this.cache = ConversationCache.open(\n            join(this.cacheDir, \"cache.db\"),\n            this.tailSize,\n            undefined,\n            {\n              filterAgentConversations: !this.includeAgents,\n              includeSubagentSessions: this.featureFlags.subagentSessions,\n              agentEntrypoints: this.agentEntrypoints,\n              onAgentFileDetected: (fp) => {\n                this.fileWatcher.unwatch(fp);\n                // Release the external-tail slot too, otherwise an agent JSONL\n                // holds a capped slot forever with a watcher that's already closed.\n                this.externalTails.delete(canonicalizeFilePath(fp));\n              },\n            },\n          );\n          if (!this.includeAgents) {\n            const result = pruneAgentConversations(this.cache);\n            if (result.pruned > 0 || result.missing > 0) {\n              this.log.info(\n                `Agent conversation prune: scanned=${result.scanned} pruned=${result.pruned} missing=${result.missing}`,\n                { ...result, event: \"cache.prune_agents\" },\n              );\n            }\n          }\n          const db = this.cache.getDatabase();\n          this.projectsRepo = new ProjectsRepository(db);\n          this.conversationsRepo = new ConversationsRepository(this.cache);\n          this.sessionsRepo = new SessionsRepository(this.sessionStore);\n          // One-time lift of pre-split tables out of cache.db. Never fatal: a\n          // failed copy costs one boot of post-restart visibility, not the\n          // cache. The two are no longer symmetric — managed_sessions is copied\n          // and left behind, devices are MOVED (see importLegacyDevices) — so\n          // they are handled separately rather than through one loop.\n          try {\n            const copied = this.runtimeStore?.importLegacyManagedSessions(db) ?? 0;\n            if (copied > 0) {\n              this.log.info(`Copied ${copied} managed session row(s) from cache.db to runtime.db`, {\n                copied,\n                table: \"managed_sessions\",\n                event: \"runtime.legacy_import\",\n              });\n            }\n          } catch (err) {\n            this.log.warn(\"[registry] legacy managed_sessions copy failed\", {\n              event: \"runtime.legacy_import_failed\",\n              table: \"managed_sessions\",\n              err,\n            });\n          }\n          try {\n            const result = this.runtimeStore?.importLegacyDevices(db);\n            if (result && result.copied > 0) {\n              // Says whether the source rows were removed, because this is the\n              // one import that deletes user data — a device label is\n              // user-supplied — and an erasure should leave a trace.\n              this.log.info(\n                `Moved ${result.copied} device row(s) from cache.db to runtime.db` +\n                  (result.purged\n                    ? \"; removed the cache-side copy\"\n                    : \"; KEPT the cache-side copy (row count did not match after copy)\"),\n                {\n                  copied: result.copied,\n                  purged: result.purged,\n                  table: \"devices\",\n                  event: \"runtime.legacy_import\",\n                },\n              );\n            }\n          } catch (err) {\n            this.log.warn(\"[registry] legacy devices move failed\", {\n              event: \"runtime.legacy_import_failed\",\n              table: \"devices\",\n              err,\n            });\n          }\n          this.cacheMetadataRepo = new CacheMetadataRepository(db);\n          this.pushRepo = new PushRepository(db);\n\n          this.initLiveActivityPush(this.pushRepo);\n          this.initWaitingInputPush(this.pushRepo);\n          // Cache-integrity drift monitor. reset_rescan rebuilds from a fresh\n          // scan via the same machinery ?refresh=1 uses (rescanForRefresh).\n          this.cacheMonitor = new CacheIntegrityMonitor(\n            this.cache,\n            this.wsHub,\n            this.log,\n            this.cacheDir,\n            async () => {\n              const scanner = await this.scannerManager.rescanForRefresh();\n              return [...scanner.getMetadataCache().values()] as never;\n            },\n            (operation) => {\n              const reset = this.withWarmup(\"cache_reset\", operation);\n              this.trackCacheWrite(reset);\n              return reset;\n            },\n          );\n          // Watch the active profile dirs (or ~/.claude/projects as fallback) so\n          // new JSONL files created after startup are discovered and the scanner\n          // and cache are invalidated without a restart. projectsDirs() is the\n          // shared source of truth with findJsonlPath's degraded-mode discovery.\n          for (const dir of this.scannerManager.projectsDirs()) {\n            this.fileWatcher.watchDirectory(dir);\n          }\n          // Codex rollouts too (P4.a). Previously only the Claude projects dirs\n          // were watched, so an externally-launched Codex session produced NO\n          // event at all — it never even flipped the scanner-stale flag, making\n          // it strictly pull-only. The roots are date-partitioned\n          // (<root>/YYYY/MM/DD), so watch the root and let chokidar recurse.\n          for (const dir of this.codexRoots) {\n            if (!existsSync(dir)) continue;\n            this.fileWatcher.watchDirectory(dir);\n          }\n          // Cursor agent-transcripts (opt-in cursorRoots, default\n          // ~/.cursor/projects/<slug>/agent-transcripts). Watch only those\n          // folders — chokidar on the projects root also sees canvases and\n          // node_modules and will EMFILE a machine with many Cursor worktrees.\n          for (const transcripts of listCursorTranscriptWatchDirs(this.cursorRoots)) {\n            this.fileWatcher.watchDirectory(transcripts);\n          }\n        } catch (err) {\n          const message = err instanceof Error ? err.message : String(err);\n          // Loud, not swallowed: without the cache every /api/conversations*\n          // request falls back to slower disk-only scans. The most common\n          // cause is a better-sqlite3 ABI mismatch (node_modules built against\n          // a different Node) — name the fix so it isn't rediscovered from a\n          // bare failure. The serve preflight (check-sqlite-abi.ts) catches\n          // the ABI case before we ever get here; this covers a cache that\n          // dies for any other reason mid-run.\n          const abiMismatch =\n            message.includes(\"NODE_MODULE_VERSION\") ||\n            message.includes(\"was compiled against a different Node.js version\");\n          this.log.error(\n            `ConversationCache failed to open — running WITHOUT cache; ` +\n              `/api/conversations, /api/conversations/count and /project-chats serve from disk (degraded).` +\n              (abiMismatch ? ` Fix: npm rebuild better-sqlite3` : \"\") +\n              ` (${message})`,\n            { error: message, abiMismatch, event: \"cache.open_failed\" },\n          );\n          // The scanner's persistent index uses the same better-sqlite3 module;\n          // fall back to in-memory scans so requests keep working from disk.\n          this.scannerManager.disablePersistence();\n        }\n        if (this.ptyManager.isRemote()) this.registryBoot.refreshHostedSessionsFromRegistry();\n        // Classify whatever previous runs left behind. Fire-and-forget: it only\n        // populates a diagnostic map, and blocking startup on `ps` probes would\n        // delay the listener for no correctness gain. Runs after the cache block\n        // so it sees any rows the legacy copy just brought across, and outside\n        // it so a cache failure no longer skips reconciliation.\n        void this.registryBoot.reconcilePreviousSessions().then(async (v) => {\n          const recoverableRows = this.registryBoot.rehydratePreviousSessions(v);\n          await this.registryBoot.autoResumePreviousSessions(recoverableRows);\n          // Last, so retention can never delete a row this boot still wanted:\n          // reconciliation has finished probing, rehydration has finished\n          // seeding, and auto-resume has made its attempts before removal.\n          this.registryBoot.pruneTerminalSessions();\n        });\n        // Opt out of the warm-up scan entirely (test hook). The cache and\n        // repositories above are already open, so conversation endpoints serve an\n        // empty cache instead of throwing; only the scan and its dependent cache\n        // writes are skipped. Must still finish the warm-up bookkeeping, or\n        // close() would await a promise that never settles.\n        if (this.skipStartupWarmup) {\n          this.log.debug?.(\"startup warm-up scan skipped (skipStartupWarmup)\", {\n            event: \"cache.warmup_skipped\",\n          });\n          this.finishWarmup(0);\n          resolveWarm();\n          return;\n        }\n        // Use a dedicated scanner for warm-up, independent of this.scannerManager.current, so\n        // that onConversationChanged invalidations during the scan cannot cause\n        // getScanner() to restart indefinitely and leave the warm-up stuck.\n        const warmupStatCache = this.scannerManager.buildStatCache(null);\n        // Scanner 0.9.4 reads statCache only in non-persistent scans, and a\n        // cold start has none — see the note in ScannerManager.get (#876).\n        const warmupScanner = this.scannerManager.newScanner({ persistent: false });\n        this.scannerManager.track(warmupScanner);\n        // Throttle the per-file onProgress firings to ~one frame per whole\n        // percent (plus the final tick) so a large scan doesn't flood every\n        // WebSocket client with thousands of scan_progress messages.\n        const shouldEmitProgress = createScanProgressThrottle();\n        const scanOpts = {\n          ...(this.scanProfiles ? { profiles: this.scanProfiles } : {}),\n          ...this.scannerManager.codexScanOpts(),\n          ...(warmupStatCache ? { statCache: warmupStatCache } : {}),\n        };\n        warmupScanner\n          .scan({\n            ...scanOpts,\n            onProgress: (scanned, total) => {\n              if (shouldEmitProgress(scanned, total)) {\n                this.wsHub.broadcast({ type: \"scan_progress\", scanned, total });\n              }\n            },\n          })\n          .then(async () => {\n            // Adopt the warm-up scan as the live scanner so the first real\n            // request reuses it instead of paying for a second full scan.\n            // Success path only — adopting a scanner whose scan rejected would\n            // pair a broken engine with a resolved scannerReady, making every\n            // later request throw instantly. Guard: only adopt if nothing else\n            // already owns the slot.\n            this.scannerManager.adoptIfUnclaimed(warmupScanner);\n            if (!this.cache) return;\n            const metas = [...warmupScanner.getMetadataCache().values()] as any[];\n            // upsertFromScannerMeta returns IDs of rows actually upserted\n            // (excluding agent JSONLs skipped when includeAgents=false).\n            // Warming tails for filtered-out IDs would hit the\n            // conversation_tail.conversation_id → conversation_meta(id) FK\n            // and abort the whole warm-up before pruneGhostFiles can run.\n            const upsertedIds = new Set(this.cache.upsertFromScannerMeta(metas));\n            const tailTargets: Array<{ id: string; filePath: string }> = [];\n            for (const m of metas) {\n              if (!m.filePath) continue;\n              const id =\n                m.sessionId ||\n                m.id\n                  ?.split(\"/\")\n                  .pop()\n                  ?.replace(/\\.jsonl$/, \"\") ||\n                m.id;\n              if (upsertedIds.has(id)) tailTargets.push({ id, filePath: m.filePath });\n            }\n            const BATCH = 50;\n            let tailFailures = 0;\n            for (let i = 0; i < tailTargets.length; i += BATCH) {\n              const batch = tailTargets.slice(i, i + BATCH);\n              for (const t of batch) {\n                try {\n                  this.cache.populateTailFromFile(t.id, t.filePath);\n                } catch (err) {\n                  // Benign race: the live ConversationWatcher runs during\n                  // warm-up, so an active session writing/deleting its JSONL\n                  // fires invalidateByFilePath() → invalidate(id), which deletes\n                  // the conversation_meta row we just upserted. The follow-up\n                  // tail insert then trips the conversation_tail → conversation_meta\n                  // FK. Skipping is correct — the row was invalidated and gets\n                  // re-upserted on the next scan, and pruneGhostFiles (below)\n                  // reconciles any file that was genuinely deleted. We must not\n                  // throw here or pruneGhostFiles never runs. Logged at info (not\n                  // debug) so the failing id+reason is visible by default.\n                  tailFailures += 1;\n                  this.log.info(\n                    `populateTailFromFile skipped for ${t.id}: ${\n                      err instanceof Error ? err.message : String(err)\n                    }`,\n                    { id: t.id, event: \"cache.warmup_tail_failed\" },\n                  );\n                }\n              }\n              await new Promise<void>((r) => setImmediate(r));\n            }\n            if (tailFailures > 0) {\n              this.log.warn(\n                `Warm-up: ${tailFailures}/${tailTargets.length} tail populates skipped (see info logs for ids)`,\n                {\n                  failures: tailFailures,\n                  total: tailTargets.length,\n                  event: \"cache.warmup_tail_failures\",\n                },\n              );\n            }\n            // Detect cache/disk drift before the routine ghost prune. If a\n            // pending alert is raised, freeze — skip pruneGhostFiles until a\n            // human resolves it; otherwise prune exactly as before. The\n            // on-disk reconcile below is part of the same write path, so it\n            // stays inside the freeze too.\n            await this.cacheMonitor?.runDetection();\n            if (this.cacheMonitor?.pending) {\n              this.log.warn(\"Startup ghost prune skipped — cache integrity alert pending\", {\n                fingerprint: this.cacheMonitor.pending.fingerprint,\n                event: \"cache.prune_ghosts_frozen\",\n              });\n            } else {\n              const pruned = this.cache.pruneGhostFiles();\n              this.log.info(`Startup ghost prune: removed ${pruned.length} stale cache rows`, {\n                count: pruned.length,\n                event: \"cache.prune_ghosts\",\n              });\n              if (this.projectsRepo && this.conversationsRepo && this.cacheMetadataRepo) {\n                refreshConversationCache({\n                  cache: this.cache,\n                  projectsRepo: this.projectsRepo,\n                  conversationsRepo: this.conversationsRepo,\n                  cacheMetadataRepo: this.cacheMetadataRepo,\n                });\n              } else if (this.cacheMetadataRepo) {\n                setCacheMetadata(\n                  this.cacheMetadataRepo,\n                  \"conversations_last_indexed_at\",\n                  new Date().toISOString(),\n                );\n              }\n            }\n          })\n          .catch((err) => {\n            const message = err instanceof Error ? err.message : String(err);\n            this.log.warn(`Startup cache warm-up failed: ${message}`, {\n              error: message,\n              event: \"cache.warmup_failed\",\n            });\n          })\n          .finally(() => {\n            this.finishWarmup(0);\n            resolveWarm();\n          });\n      }\n    });\n    // Track the warm-up's scan→cache-write chain so close() can await it.\n    this.trackCacheWrite(warmUp);\n    if (opts?.awaitReady) await warmUp;\n  }\n\n  // Bind the HTTP listener, retrying on a transient EADDRINUSE. See the call\n  // site in listen() for why the race exists (kickstart -k relaunch). Total\n  // worst case ≈ 6 × 500 ms = 3 s before the final attempt rethrows.\n  private async bindWithRetry(\n    port: number,\n    host?: string,\n    attempts = 6,\n    delayMs = 500,\n  ): Promise<void> {\n    this.binding = true;\n    try {\n      await this.bindWithRetryLoop(port, host, attempts, delayMs);\n    } finally {\n      this.binding = false;\n    }\n  }\n\n  private async bindWithRetryLoop(\n    port: number,\n    host: string | undefined,\n    attempts: number,\n    delayMs: number,\n  ): Promise<void> {\n    for (let attempt = 1; attempt <= attempts; attempt++) {\n      try {\n        await new Promise<void>((resolve, reject) => {\n          const onError = (err: NodeJS.ErrnoException) => {\n            this.httpServer.removeListener(\"listening\", onListening);\n            reject(err);\n          };\n          const onListening = () => {\n            this.httpServer.removeListener(\"error\", onError);\n            resolve();\n          };\n          this.httpServer.once(\"error\", onError);\n          this.httpServer.once(\"listening\", onListening);\n          if (host === undefined) {\n            this.httpServer.listen(port);\n          } else {\n            this.httpServer.listen(port, host);\n          }\n        });\n        return;\n      } catch (err) {\n        const e = err as NodeJS.ErrnoException;\n        if (e.code === \"EADDRINUSE\" && attempt === attempts) {\n          // Final attempt exhausted on a still-busy port: this is a genuine\n          // failure (not the self-healing kickstart race), so surface it once\n          // before rethrowing.\n          this.log.error(\n            `port ${port} still busy (EADDRINUSE) after ${attempts} attempts; giving up`,\n            {\n              port,\n              attempts,\n              event: \"server.bind_failed\",\n              ...(host !== undefined && { host }),\n            },\n          );\n        }\n        if (e.code !== \"EADDRINUSE\" || attempt === attempts) throw err;\n        // Routine kickstart-relaunch race: log at debug (invisible by default)\n        // since bindWithRetry recovers on its own within the attempt budget.\n        this.log.debug?.(\n          `port ${port} busy (EADDRINUSE), retry ${attempt}/${attempts - 1} in ${delayMs}ms`,\n          { port, attempt, event: \"server.bind_retry\", ...(host !== undefined && { host }) },\n        );\n        await new Promise<void>((r) => setTimeout(r, delayMs));\n      }\n    }\n  }\n\n  // Register a fire-and-forget task that writes to this.cache after a scan, so\n  // close() can await it before closing cache.db. Removes itself on settle. The\n  // caller keeps its own error handling; this wrapper swallows rejections so a\n  // failed task never rejects close()'s Promise.all.\n  private trackCacheWrite(task: Promise<unknown>): void {\n    const guarded = task.catch(() => undefined);\n    this.inFlightCacheWrites.add(guarded);\n    void guarded.finally(() => {\n      this.inFlightCacheWrites.delete(guarded);\n    });\n  }\n\n  async close(): Promise<void> {\n    for (const timer of this.ptyGraceTimers.values()) clearTimeout(timer);\n    this.ptyGraceTimers.clear();\n    this.holdWhenIdle.clear();\n    if (this.idleReaperTimer) {\n      clearInterval(this.idleReaperTimer);\n      this.idleReaperTimer = null;\n    }\n    if (this.codexFormatCanaryTimer) {\n      clearInterval(this.codexFormatCanaryTimer);\n      this.codexFormatCanaryTimer = null;\n    }\n    this.hostPressureMonitor?.dispose();\n    this.hostPressureMonitor = null;\n    this.lastAgentChunkAt.clear();\n    this.terminalSeq.clear();\n    // An in-process runner is about to kill its children, so record that before\n    // dispose() and before runtimeStore.close() takes the registry handle away.\n    // A remote runner does the opposite: disconnect first so no late host event\n    // can write through a closed handle, and leave its live registry rows alone.\n    if (this.ptyManager.isRemote()) this.ptyManager.dispose();\n    else this.registryBoot.recordShutdownState();\n    // Wait for every fire-and-forget scan→cache-write task to finish before\n    // tearing anything down. Their post-scan steps write to this.cache\n    // (upsert / populateTail / pruneGhostFiles); closing cache.db under them\n    // throws \"database connection is not open\" and leaves the cache empty\n    // (deterministic once Stage 4's dir-mtime gate widened the scan window).\n    // Snapshot the set — entries remove themselves as they settle.\n    await Promise.all([...this.inFlightCacheWrites]);\n    // Close all scanner SQLite connections before the cache so file handles are\n    // released on Windows (open handles block temp-dir deletion in tests).\n    // scanner.close() is async (scanner >=0.9.2): it awaits any in-flight scan\n    // before releasing the DB handle, so a fire-and-forget refresh scan can't be\n    // shut mid-indexAll(). Await all so handles are torn down only after scans\n    // settle.\n    await this.scannerManager.close();\n    this.cache?.close();\n    this.runtimeStore?.close();\n    if (!this.ptyManager.isRemote()) this.ptyManager.dispose();\n    this.fileWatcher.dispose();\n    this.externalTails.clear();\n    this.promptRegistry.dispose();\n    this.wsHub.dispose();\n    this.pairTokens.dispose();\n    // The APNs HTTP/2 session is long-lived by design, so it keeps the event\n    // loop alive until closed explicitly.\n    this.liveActivityRenewal?.stop();\n    this.apnsClient?.close();\n    if (this.dbPool) {\n      await this.dbPool.end();\n    }\n    // Force any sockets that survived wsHub.dispose() (e.g. a half-open\n    // connection mid-upgrade) to close, so httpServer.close()'s callback —\n    // which only fires once every connection drains — can't hang. Without\n    // this the old process keeps :PORT bound until launchd's SIGKILL, and the\n    // freshly-started instance hits EADDRINUSE. Guarded for Node < 18.2.\n    this.httpServer.closeAllConnections?.();\n    return new Promise((resolve) => {\n      // Belt-and-suspenders: never let process exit block forever on the\n      // listener close. The port is released the moment closeAllConnections()\n      // runs; the timeout only guards against an unforeseen lingering socket.\n      const timer = setTimeout(resolve, 2000);\n      this.httpServer.close(() => {\n        clearTimeout(timer);\n        resolve();\n      });\n    });\n  }\n\n  // ─── Request Router ────────────────────────────────────────────\n\n  private async handleRequest(req: IncomingMessage, res: ServerResponse): Promise<void> {\n    const host = req.headers.host ?? \"localhost\";\n    const webReq = new Request(`http://${host}${req.url ?? \"/\"}`, {\n      method: req.method ?? \"GET\",\n      headers: req.headers as Record<string, string>,\n    });\n    const honoRes = await this.honoApp.fetch(webReq, { incoming: req, outgoing: res });\n    if (honoRes.status !== ALREADY_HANDLED) {\n      await writeHonoResponse(honoRes, res);\n    }\n  }\n\n  // ─── Handlers ──────────────────────────────────────────────────\n\n  private handlePairStart(res: ServerResponse): void {\n    const minted = this.pairTokens.mint();\n    json(res, 200, {\n      token: minted.token,\n      expiresAt: minted.expiresAt,\n      expiresInSeconds: minted.expiresInSeconds,\n      publicUrl: this.publicUrl,\n    });\n  }\n\n  private async handlePairExchange(req: IncomingMessage, res: ServerResponse): Promise<void> {\n    const ct = req.headers[\"content-type\"] ?? \"\";\n    if (!String(ct).toLowerCase().includes(\"application/json\")) {\n      json(res, 415, { error: \"Content-Type: application/json required\" });\n      return;\n    }\n\n    const ip = req.socket.remoteAddress ?? \"unknown\";\n    if (!this.checkExchangeRateLimit(ip)) {\n      json(res, 429, { error: \"Too many pair exchange attempts; try again in a minute\" });\n      return;\n    }\n\n    let body: any;\n    try {\n      body = await readBody(req);\n    } catch (err) {\n      const message = err instanceof Error ? err.message : \"Invalid body\";\n      json(res, 400, { error: message });\n      return;\n    }\n\n    const { token, clientPublicKey } = body ?? {};\n    if (typeof token !== \"string\" || typeof clientPublicKey !== \"string\") {\n      json(res, 400, { error: \"Missing token or clientPublicKey\" });\n      return;\n    }\n\n    // GET /api/info already answers whether this build can perform the Noise\n    // handshake (describeE2eeCapability, design.md §6.2/§6.3) — this endpoint\n    // just never consulted it, so a build reporting `enabled: false` would\n    // still run the handshake below if a request carried an `e2ee` field.\n    // Reuse the same function rather than a second constant or expression:\n    // if the two answers can drift, they eventually will.\n    const e2eeEnabled = describeE2eeCapability(this.featureFlags.e2ee).enabled;\n\n    // Optional, and its absence is the ordinary case. A released tb-mobile\n    // build sends no `e2ee` at all and must pair exactly as it does today, so\n    // this is an explicit branch rather than an optional-chaining accident —\n    // a silent skip reads as a bug to the next person, who tightens it into a\n    // rejection and breaks every old app in the field.\n    //\n    // When the capability is off, the field is ignored outright rather than\n    // parsed and validated: this endpoint is public and unauthenticated, and\n    // `parseE2eeRequest`'s header comment is explicit that everything it does\n    // runs on bytes an attacker chose before anything has authenticated them.\n    // A build with nothing to gain from that field should not run it either.\n    let e2eeRequest: E2eeExchangeRequest | null = null;\n    if (e2eeEnabled) {\n      try {\n        e2eeRequest = parseE2eeRequest(body?.e2ee);\n      } catch (err) {\n        const e = err as E2eeRequestError;\n        json(res, 400, { error: e.message, code: e.code });\n        return;\n      }\n    }\n\n    // Reject a bad token before doing any work, but do NOT spend it yet.\n    //\n    // Spending a token that a later step then fails on costs the user their\n    // whole pairing: the token is single-use, so their retry gets `401 Pair\n    // token used` — which is the signal design.md §2.6 designates as QR-replay\n    // detection. Giving that signal a common benign cause is how it stops being\n    // believed, and a malformed `clientPublicKey` was enough to trigger it.\n    const precheck = this.pairTokens.wouldConsume(token);\n    if (!precheck.ok) {\n      if (precheck.reason === \"used\") {\n        // The §2.6 detection signal, made observable. Until now a replayed\n        // token reached the client as a 401 and reached the operator's log as\n        // silence — and the operator is the one who can act on it, since a user\n        // whose pairing failed is not reading HTTP status codes.\n        //\n        // Carries `ip` and nothing else the request log does not already have.\n        // The token is deliberately absent: it is live credential material\n        // until it expires.\n        this.log.warn(\n          \"[pair] a pair token was replayed. If you did not just pair a device, \" +\n            \"check the paired-devices list and revoke anything you do not recognise.\",\n          { event: \"pair.token_replayed\", ip },\n        );\n      }\n      json(res, 401, { error: `Pair token ${precheck.reason}` });\n      return;\n    }\n\n    // The handshake runs BEFORE `seal`, for two reasons that both matter.\n    //\n    // `seal` materialises this machine's shared API key in memory. Doing that\n    // for a caller who has not authenticated is worse than not doing it, even\n    // though the response is never sent — so an E2EE client proves itself\n    // first, and only then is the legacy credential built for it.\n    //\n    // And a failing handshake must not spend the token. A malformed or hostile\n    // `msg1` would otherwise hand anyone who photographed the QR a denial of\n    // service they did not have: burn the token, and the legitimate phone's\n    // pairing dies with it. Same spine as the ordering above — the token is\n    // spent when the exchange succeeds, not when it is attempted.\n    let handshake: HandshakeResponderState | null = null;\n    let registration: E2eePairRegistration | null = null;\n    if (e2eeRequest) {\n      try {\n        handshake = readMessage1({\n          staticKeyPair: keyPairFrom(loadOrCreateServerIdentity().privateKey),\n          // The pair token binds this handshake to the scanned QR. Derivation\n          // is specified in design.md §2.4 and pinned by a committed vector\n          // that tb-mobile checks against independently.\n          psk: pskFromPairToken(token),\n          // Explicit: `prologue` is a required parameter, because defaulting it\n          // through `??` let a polluted prototype make this handshake accept an\n          // `/open` message (§11).\n          prologue: PAIR_PROLOGUE,\n          message1: e2eeRequest.message1,\n        });\n      } catch {\n        // Deliberately one code for every handshake failure. Distinguishing\n        // \"wrong static key\" from \"wrong PSK\" from \"tampered ciphertext\" would\n        // tell an attacker which half of their guess was right, and the client\n        // has the same remedy in all three: scan a fresh code.\n        //\n        // The caught error is dropped rather than surfaced, for the same reason.\n        json(res, 400, {\n          error: \"E2EE handshake failed. Scan a fresh pairing code and try again.\",\n          code: \"E2EE_HANDSHAKE_FAILED\",\n        });\n        return;\n      }\n\n      // The registration inputs, taken from inside the AEAD (design.md §2.4).\n      //\n      // Read here rather than after the token is spent, and the placement is\n      // the point: a payload this build cannot read must cost the client a\n      // retry, not their pair token. Same spine as the handshake above — the\n      // token is spent when the exchange succeeds, not when it is attempted.\n      //\n      // The error is surfaced with its code, unlike the handshake failure. It\n      // leaks nothing: reaching this line already proves the caller completed\n      // the handshake, so it is a real client with a shape disagreement, and\n      // telling it which is what lets it be fixed.\n      try {\n        registration = parseE2eeMsg1Payload(handshake.payload);\n      } catch (err) {\n        const e = err as E2eeRequestError;\n        json(res, 400, { error: e.message, code: e.code });\n        return;\n      }\n    }\n\n    let sealed: ReturnType<typeof seal>;\n    try {\n      sealed = seal(this.apiKey, clientPublicKey);\n    } catch (err) {\n      // The token is deliberately still unspent here. The client can fix its\n      // key and retry with the same QR.\n      const message = err instanceof Error ? err.message : \"Invalid clientPublicKey\";\n      json(res, 400, { error: message });\n      return;\n    }\n\n    // Spend it, now that everything that can fail on client input has passed.\n    //\n    // Consuming late grants an attacker nothing: a token that is not the live\n    // one fails `wouldConsume`'s `unknown` branch above, before any\n    // cryptography runs, and `checkExchangeRateLimit` already bounds attempts\n    // to five per minute per IP. Anyone who reaches this line was holding the\n    // real token when they started.\n    //\n    // EVERYTHING BETWEEN `wouldConsume` AND `consume` MUST STAY SYNCHRONOUS.\n    // `PairTokenStore` takes no lock, so the single-use guarantee here rests\n    // entirely on Node running one callback to completion: a single `await` in\n    // this gap returns control to the event loop and lets two concurrent\n    // requests carrying the same token both pass the check and both pair.\n    // `seal` is synchronous for that reason, and anything added between these\n    // two calls has to be too — an `await auditLog(...)` with an excellent\n    // justification is the shape this breaks in.\n    // `__tests__/pair-endpoints.test.ts` asserts no macrotask runs in the gap.\n    const result = this.pairTokens.consume(token);\n    if (!result.ok) {\n      // Cannot fail today: nothing yields between the check above and here, so\n      // no other request can have spent this token in the gap. Checked anyway\n      // because if that invariant is ever broken the failure is silent — two\n      // devices paired from one single-use token, no error, no log — and three\n      // lines is a cheap price for making it loud instead.\n      json(res, 401, { error: `Pair token ${result.reason}` });\n      return;\n    }\n\n    const ts = new Date().toISOString();\n    this.log.info(`[pair] token exchanged from ${ip} at ${ts}`, {\n      event: \"pair.token_exchanged\",\n      ip,\n      ts,\n    });\n\n    // Mint a per-device credential alongside the shared key (C5). The sealed\n    // apiKey is still returned so an existing client keeps working unchanged;\n    // a client that understands deviceToken can use the narrower credential and\n    // become individually revocable.\n    //\n    // Best-effort on the legacy path: a registry failure must not break pairing,\n    // which would lock the user out of their own server. Losing the row costs\n    // revocability for that device, not access. The E2EE path is the opposite\n    // and is handled just below.\n    //\n    // Where the inputs come from is the whole of GATE 4. `/api/pair/exchange` is\n    // public and unauthenticated, so an intermediary can rename a device or\n    // widen `readOnly` in the outer JSON on the way past; inside the AEAD it\n    // cannot. So a completed handshake means the authenticated payload decides,\n    // and the outer copies are not consulted at all.\n    //\n    // Written as an explicit branch rather than `registration?.deviceName ??\n    // body.deviceName`: the `??` would fall through to the outer name whenever\n    // the authenticated payload deliberately carried none, which is the same\n    // substitution wearing a nullish coalesce.\n    let device: { deviceId: string; deviceToken: string; capabilities: string[] } | null = null;\n    try {\n      const name = registration\n        ? registration.deviceName\n        : typeof body?.deviceName === \"string\"\n          ? body.deviceName.slice(0, 100)\n          : null;\n      const readOnly = registration ? registration.readOnly : body?.readOnly === true;\n      const preset = readOnly ? \"read-only\" : \"full\";\n      device =\n        this.devicesRepo?.register({\n          publicKey: clientPublicKey,\n          name,\n          preset,\n          // Recorded only when the handshake authenticated it. The static key\n          // comes out of the transcript, never off the wire as a claim — that\n          // is the difference between a device identified by a key it proved\n          // it holds and one identified by a string it sent.\n          //\n          // Setting it also sets `e2ee_required`, so a device that has once\n          // paired encrypted is pinned and never served plaintext again.\n          ...(handshake && {\n            e2eeStaticPub: handshake.initiatorStaticPub.toString(\"base64\"),\n            e2eeVersion: E2EE_EXCHANGE_VERSION,\n          }),\n        }) ?? null;\n    } catch (err) {\n      this.log.warn(\"[pair] device registration failed; pairing continues\", {\n        event: \"pair.device_register_failed\",\n        err,\n      });\n    }\n\n    // On the E2EE path, registration is mandatory rather than best-effort.\n    //\n    // Message 2 carries the `deviceId` and `deviceToken` a new client uses as\n    // its only credential — it ignores the outer compatibility copies — so a\n    // pairing that cannot produce them has nothing to tell the client. Answering\n    // 200 anyway would return a key-pinned result with no usable device: the\n    // server has recorded the static key and set the downgrade lock, the phone\n    // believes it paired, and the failure surfaces in the record layer weeks\n    // later, far from this line.\n    //\n    // Covers a null `devicesRepo` as well as a throwing one — `?? null` above\n    // turns an unopened runtime.db into a quiet `null`, which is the same\n    // half-provisioned outcome by a different route.\n    //\n    // The pair token is already spent by this point and cannot be un-spent: the\n    // consume ordering above is load-bearing for the single-use guarantee, and\n    // the device row cannot exist before it. So the honest cost of refusing here\n    // is that the user scans a fresh code, which is strictly better than a\n    // success they cannot act on.\n    if (handshake && !device) {\n      this.log.error(\"[pair] E2EE pairing failed: the device could not be registered\", {\n        event: \"pair.e2ee_registration_failed\",\n        ip,\n      });\n      json(res, 500, {\n        error:\n          \"Pairing failed: this server could not register the device. \" +\n          \"Scan a fresh pairing code and try again.\",\n        code: \"E2EE_REGISTRATION_FAILED\",\n      });\n      return;\n    }\n\n    // Message 2, written last because its payload carries the `deviceId` and\n    // the device row cannot exist until the token has been spent.\n    //\n    // Failing here would be a server fault rather than a client one, and it\n    // comes after the token is already gone — so it must not 500 the pairing\n    // and lose the device the client is about to be told about. The client\n    // sees a reply with no `e2ee` field, which its own pin turns into a\n    // visible refusal rather than a silent plaintext pairing.\n    let e2eeResponse: { v: number; noise: string } | null = null;\n    if (handshake && device) {\n      try {\n        const { message2 } = writeMessage2(\n          handshake,\n          // Every result a new client persists or presents as verified, so it\n          // never has to trust the outer, unauthenticated copy of a credential.\n          // The outer response still carries those copies for released builds;\n          // this is what the new client actually reads.\n          encodeE2eeMsg2Payload({\n            deviceId: device.deviceId,\n            deviceToken: device.deviceToken,\n            capabilities: device.capabilities,\n            publicUrl: this.publicUrl,\n            machineName: hostname(),\n            serverVersion: getVersion(),\n          }),\n        );\n        e2eeResponse = { v: E2EE_EXCHANGE_VERSION, noise: message2.toString(\"base64\") };\n      } catch (err) {\n        this.log.warn(\"[pair] E2EE response could not be written; pairing continues\", {\n          event: \"pair.e2ee_response_failed\",\n          err,\n        });\n      }\n    }\n\n    json(res, 200, {\n      // Unchanged and still sent on the E2EE path, deliberately. An older app\n      // is the only thing that can read these and it cannot be force-updated\n      // (docs/compatibility/tb-mobile.md); a new app ignores them and uses the\n      // Noise result. The response grows a field, it never loses one.\n      ciphertext: sealed.ciphertext,\n      nonce: sealed.nonce,\n      ephemeralPublicKey: sealed.ephemeralPublicKey,\n      // Advertises, does not dictate. This is what the server believes its\n      // public address to be; the address the client talks to is the one its\n      // user typed or scanned. Do not build anything on the assumption that a\n      // client adopts this.\n      //\n      // Mobile used to resolve its server address as `publicUrl ?? typedUrl`,\n      // so this field silently replaced what the user entered — and since the\n      // reply is unauthenticated before E2EE, one response could relocate a\n      // device permanently (TB-S-13). Fixed client-side in threadbase-mobile#720;\n      // still sent, now recorded rather than applied.\n      //\n      // Released builds that predate that fix DO still adopt it, so changing\n      // this value moves where old devices talk. It is not a free field.\n      publicUrl: this.publicUrl,\n      machineName: hostname(),\n      ...(device && {\n        deviceId: device.deviceId,\n        deviceToken: device.deviceToken,\n        capabilities: device.capabilities,\n      }),\n      // Additive. Absent means this pairing is plaintext — either the client\n      // never asked, or writing the reply failed — and a client that asked for\n      // encryption must treat its absence as a refusal, not as consent.\n      ...(e2eeResponse && { e2ee: e2eeResponse }),\n    });\n  }\n\n  private rotateApiKey(): { newKey: string; persisted: boolean } {\n    const oldKey = this.apiKey;\n    const newKey = generateApiKey();\n    // Only persist to server.yaml when the key came from there.\n    // If --api-key was passed on the CLI, the flag wins on restart and\n    // would silently revert to the old key — so skip the write and let\n    // the caller know via the response.\n    const persisted = this.apiKeySource === \"config\";\n    if (persisted) setApiKey(newKey);\n    this.apiKey = newKey;\n    this.log.info(\"API key rotated\", {\n      event: \"auth.api_key_rotated\",\n      oldKeyMasked: `${oldKey.slice(0, 6)}…`,\n      newKeyMasked: `${newKey.slice(0, 6)}…`,\n      persisted,\n    });\n    return { newKey, persisted };\n  }\n\n  /**\n   * The registry ships with the values so a client renders the list from one\n   * round-trip, same as getClaudeFlagsConfig().\n   *\n   * Deliberately no `persisted` field: unlike claude-flags there is no PUT, and\n   * the absence of that field is the signal that this endpoint is read-only.\n   */\n  /**\n   * The boot warning for a run that turned transport encryption off from any\n   * explicit, non-default source.\n   *\n   * D-8 wanted no env var to hold encryption off invisibly; that guarantee\n   * turned out to be unenforceable without breaking the registry's uniform\n   * five-rung resolution (see dilemmas.md D-8's resolution note), so this is\n   * the replacement: every explicit \"off\" — `override`, `env`, `cli`, `yaml` —\n   * announces itself the same way `--no-e2ee` always has. `default` is exempt:\n   * off-by-default is not a decision anyone made this boot, and warning on\n   * every default boot before stage 2 flips it would be noise with nothing\n   * behind it.\n   *\n   * Fires regardless of the pinned count, including at zero — a leading\n   * indicator (warn the moment the box boots plaintext) beats a lagging one\n   * (warn only once a device has already paired against it).\n   *\n   * Through the console dest as well as the JSON log, because the person who\n   * set the source is watching a terminal, and a warning they have to grep for\n   * is a warning that arrives after the incident. It says what is readable and\n   * by whom — the tunnel's edge terminates TLS, so \"we are behind HTTPS\" is not\n   * an answer — and how many paired devices this run will refuse.\n   *\n   * Called after `devicesRepo` opens, since the count is the point. Silent when\n   * the repo did not open: a boot already shouting about a failed runtime store\n   * does not need a second line saying it also cannot count.\n   */\n  private warnIfE2eeDisabled(): void {\n    if (this.featureFlags.e2ee) return;\n    const source = this.featureFlagSources.e2ee;\n    if (source === \"default\") return;\n    const repo = this.devicesRepo;\n    if (!repo) return;\n    // Live rows only — a revoked device is already refused and counting it\n    // would inflate the number that is meant to make someone stop and think.\n    const pinned = repo.list().filter((d) => d.e2ee && d.revokedAt == null).length;\n    // The caveat is in the text rather than in a comment because the number is\n    // read by a person deciding whether to proceed. A pairing whose msg2 was\n    // lost leaves a row that is pinned but has never connected (#744), so this\n    // counts intent to encrypt, not devices in anyone's hand.\n    const devices =\n      pinned === 0\n        ? \"no paired device requires it\"\n        : `${pinned} paired device${pinned === 1 ? \"\" : \"s\"} require${pinned === 1 ? \"s\" : \"\"} it and will be refused (rows that never completed pairing are counted too)`;\n    // `both`, not `console`: the person who set the source is watching a\n    // terminal, and the person reading the JSON log afterwards is asking why a\n    // device was refused. `console` alone would answer only the first of them —\n    // and the brief for this flag asks specifically for `e2ee.disabled` in the\n    // JSON log.\n    this.log.warn(\n      `Transport encryption is OFF for this run (${E2EE_OFF_SWITCH[source]}): traffic on the path is readable, including at the Cloudflare edge, and ${devices}.`,\n      { event: \"e2ee.disabled\", reason: source, pinnedDevices: pinned },\n      \"both\",\n    );\n  }\n\n  /**\n   * Ask this server's own public URL what an unauthenticated device would get.\n   *\n   * Fire-and-forget, deliberately: the probe must never delay `listen()` or\n   * refuse a boot. It reports a misconfiguration the operator can fix, and a\n   * server that will not start is a worse outcome than one that warns.\n   *\n   * Silent unless there is something to say. No public URL means no edge to\n   * probe; e2ee off means no device would be refused by one; an unreachable URL\n   * is a different problem with its own symptoms, and warning about it here\n   * would cry wolf on every laptop that is merely offline.\n   */\n  private async probeAccessGate(): Promise<void> {\n    if (!this.featureFlags.accessProbe) return;\n    if (!this.publicUrl) return;\n    if (!describeE2eeCapability(this.featureFlags.e2ee).enabled) return;\n\n    const result = await probeAccessGate({\n      publicUrl: this.publicUrl,\n      serviceToken: loadAccessServiceToken(),\n    });\n    const message = describeAccessProbe(result);\n    if (!message) return;\n\n    // Console as well as the JSON log: the operator who put Access in front of\n    // this server is the only person who can remove it, and they are looking at\n    // a terminal, not at a log aggregator.\n    this.log.warn(\n      message,\n      {\n        event: \"access.gate_detected\",\n        publicUrl: this.publicUrl,\n        // The login URL carries a signed JWT in its query string. The host is the\n        // diagnostic; the rest is not ours to write down.\n        gateHost: safeHost(result.kind === \"gated\" ? result.location : undefined),\n        serviceTokenAccepted: result.kind === \"gated\" ? result.serviceTokenAccepted : undefined,\n      },\n      \"both\",\n    );\n  }\n\n  private getFeatureFlagsConfig(): {\n    registry: typeof FEATURE_FLAG_LIST;\n    values: ResolvedFeatureFlags;\n    sources: Record<FeatureFlagId, FeatureFlagSource>;\n  } {\n    // `sources` is additive — older clients ignore it. It exists so a support\n    // question (\"why is this on?\") is answerable over HTTP instead of requiring\n    // shell access to read the environment, the argv and server.yaml by hand.\n    return {\n      registry: FEATURE_FLAG_LIST,\n      values: this.featureFlags,\n      sources: this.featureFlagSources,\n    };\n  }\n\n  private getClaudeFlagsConfig(): {\n    registry: typeof CLAUDE_FLAGS;\n    values: ClaudeFlagValues;\n    extraArgs: string | null;\n    persisted: boolean;\n  } {\n    return {\n      registry: CLAUDE_FLAGS,\n      values: this.claudeFlags,\n      extraArgs: this.claudeExtraArgs ?? null,\n      persisted: this.claudeFlagsPersistable,\n    };\n  }\n\n  /**\n   * Replace the per-server flag set. Applies to the NEXT spawn — a live PTY\n   * keeps the argv it was started with.\n   *\n   * Mirrors rotateApiKey(): when the values were pinned by a CLI flag we still\n   * apply them in memory but skip the server.yaml write, because the flag would\n   * win again on restart and silently revert them.\n   *\n   * Logged with old→new at info level on purpose: this can disable the\n   * permission prompts entirely, so it needs a forensic trail.\n   */\n  private setClaudeFlagsConfig(\n    values: ClaudeFlagValues,\n    extraArgs: string | undefined,\n  ): { values: ClaudeFlagValues; extraArgs: string | null; persisted: boolean } {\n    const safe = validateFlagValues(values);\n    const previous = { values: this.claudeFlags, extraArgs: this.claudeExtraArgs };\n\n    if (this.claudeFlagsPersistable) {\n      // setClaudeExtraArgs throws on an embedded newline; let it propagate so\n      // the route answers 400 rather than writing a corrupt config line.\n      setClaudeExtraArgs(extraArgs);\n      setClaudeFlags(safe);\n    }\n    this.claudeFlags = safe;\n    this.claudeExtraArgs = extraArgs?.trim() ? extraArgs.trim() : undefined;\n\n    this.log.info(\"Claude CLI flags updated\", {\n      event: \"config.claude_flags_updated\",\n      persisted: this.claudeFlagsPersistable,\n      previousValues: previous.values,\n      previousExtraArgs: previous.extraArgs ?? null,\n      values: this.claudeFlags,\n      extraArgs: this.claudeExtraArgs ?? null,\n    });\n\n    return {\n      values: this.claudeFlags,\n      extraArgs: this.claudeExtraArgs ?? null,\n      persisted: this.claudeFlagsPersistable,\n    };\n  }\n\n  /**\n   * The three spawn options that a configured claude-flag can override, with\n   * the boot-time CLI/yaml default as the fallback. Spread into every\n   * start/resume/adopt call so all three paths agree.\n   *\n   * These ids are excluded from buildFlagArgs (SPAWN_POSITIONAL_FLAG_IDS)\n   * precisely because they arrive here instead — the PTY spawn paths pass them\n   * as explicit positionals, so emitting them from the allowlist too would\n   * duplicate the flag.\n   *\n   * Narrowed with the type guards rather than cast: ClaudeFlagValues is a loose\n   * Record by design, and while validateFlagValues already guarantees the shape\n   * on the way in, TypeScript cannot see that through the record.\n   */\n  private spawnFlagOverrides(): {\n    permissionMode: PermissionMode;\n    model: string;\n    effort: EffortLevel;\n  } {\n    const mode = this.claudeFlags.permissionMode;\n    const model = this.claudeFlags.model;\n    const effort = this.claudeFlags.effort;\n    return {\n      permissionMode: isPermissionMode(mode) ? mode : this.defaultPermissionMode,\n      model: typeof model === \"string\" ? model : this.defaultModel,\n      effort: isEffortLevel(effort) ? effort : this.defaultEffort,\n    };\n  }\n\n  private checkRateLimit(\n    map: Map<string, number[]>,\n    key: string,\n    limit: number,\n    windowMs: number,\n  ): boolean {\n    const now = Date.now();\n    const arr = (map.get(key) ?? []).filter((t) => now - t < windowMs);\n    if (arr.length >= limit) {\n      map.set(key, arr);\n      return false;\n    }\n    arr.push(now);\n    map.set(key, arr);\n    // TTL-evict the entry once the window expires so the map doesn't grow unbounded.\n    setTimeout(() => {\n      const remaining = (map.get(key) ?? []).filter((t) => Date.now() - t < windowMs);\n      if (remaining.length === 0) map.delete(key);\n      else map.set(key, remaining);\n    }, windowMs);\n    return true;\n  }\n\n  private checkExchangeRateLimit(ip: string): boolean {\n    return this.checkRateLimit(this.exchangeAttempts, ip, 5, 60_000);\n  }\n\n  private checkSessionStartRateLimit(ip: string): boolean {\n    // 10 new sessions per minute per client IP\n    return this.checkRateLimit(this.sessionStartAttempts, ip, 10, 60_000);\n  }\n\n  private checkSessionInputRateLimit(sessionId: string): boolean {\n    // 500 keystrokes per minute per session\n    return this.checkRateLimit(this.sessionInputAttempts, sessionId, 500, 60_000);\n  }\n\n  private handleSessionsCount(res: ServerResponse): void {\n    if (this.rejectIfWarmingUp(res)) return;\n    // Recovered stubs are excluded: this badge means \"sessions this streamer is\n    // running\", and a restart must not inflate it with everything it could\n    // offer to resume. The updater's active-session probe reads the same number.\n    const total = this.sessionStore\n      .list(this.ptyAttachedIds())\n      .filter((s) => s.ownership !== \"historical\").length;\n    json(res, 200, { total });\n  }\n\n  /**\n   * Live Codex sessions keep `SessionResponse.conversationId === managed.id`\n   * (stable deep-link / PTY key) and store the rollout UUID separately as\n   * `boundConversationId`. REST history is indexed under the rollout UUID, so\n   * resolve the placeholder → bound id before looking up the scanner.\n   */\n  private resolveConversationLookupId(uuid: string): string {\n    const managed = this.sessionStore.getManaged(uuid);\n    if (managed?.boundConversationId) return managed.boundConversationId;\n    return uuid;\n  }\n\n  /** File path for a live managed session (placeholder id or bound Codex id). */\n  private findLiveSessionFilePath(uuid: string): string | null {\n    const direct = this.sessionFileMap.get(uuid);\n    if (direct) return direct;\n    for (const s of this.sessionStore.listManaged()) {\n      if (s.boundConversationId === uuid) {\n        return this.sessionFileMap.get(s.id) ?? null;\n      }\n    }\n    return null;\n  }\n\n  /** True when a conversation UUID is the bound rollout of a live PTY session. */\n  private isBoundConversationLive(boundId: string): boolean {\n    for (const s of this.sessionStore.listManaged()) {\n      if (s.boundConversationId === boundId && this.ptyManager.hasSession(s.id)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Broadcast conversation JSONL lines to WS clients. Codex rollout and Cursor\n   * transcript lines are normalized to the Claude `type:user|assistant` shape\n   * mobile understands; Claude lines pass through unchanged.\n   */\n  private broadcastConversationLines(\n    sessionId: string,\n    lines: string[],\n    seqs?: (number | null)[] | null,\n  ): void {\n    // Filtered seqs come back parallel to the kept lines, so a normalized batch\n    // keeps its message_index instead of losing every seq to one dropped line.\n    const { lines: clientLines, seqs: clientSeqs } = toClientConversationLines(lines, seqs);\n    if (clientLines.length === 0) return;\n    this.wsHub.broadcast({\n      type: \"conversation_events\",\n      sessionId,\n      lines: clientLines,\n      ...(clientSeqs ? { seqs: clientSeqs } : {}),\n    });\n    // ...plus per-line conversation_event so older mobile clients,\n    // which only know that shape, keep working byte-for-byte.\n    for (const line of clientLines) {\n      this.wsHub.broadcast({ type: \"conversation_event\", sessionId, line });\n    }\n  }\n\n  /**\n   * Resolve a client-supplied session/conversation id into everything needed to\n   * launch against it: the id the PROVIDER filed the history under, that\n   * history's path, the project cwd, and which CLI owns it.\n   *\n   * Shared by resume and fork so the two can never disagree about identity —\n   * which for Codex is the whole difficulty: the id a client navigated to may\n   * be a local placeholder, and only the registry knows the rollout id behind\n   * it.\n   */\n  private async resolveConversationTarget(sessionId: string): Promise<\n    | ResumeFailure\n    | {\n        ok: true;\n        historyId: string;\n        jsonlPath: string | null;\n        historyPath: string | null;\n        conv: any;\n        projectPath: string;\n        provider: ProviderName;\n      }\n  > {\n    // Authoritative cwd comes from the JSONL itself — the file Claude looks\n    // up by filename when processing --resume. The scanner index can return a\n    // stale or wrong path (e.g. …/tb-mobile/android vs …/tb-mobile), so we\n    // read the first cwd field directly, mirroring tb-scanner/src/parser.ts.\n    // A fresh Codex session uses a local placeholder id while Codex indexes\n    // history under the rollout id it assigned itself. Resolve that managed\n    // binding before any conversation lookup: findConversationByUuid can serve\n    // the placeholder through the in-memory alias, but that does not make the\n    // placeholder a valid `codex resume` target. The live session keeps the id\n    // the client navigated to; only argv and history lookups use the bound id.\n    const row = this.managedSessionsRepo?.get(sessionId) ?? null;\n    const liveSession = this.sessionStore.getManaged(sessionId);\n    const resumeId =\n      (row ? resumeIdForRow(row) : null) ??\n      (liveSession?.provider === CODEX_CLI_PROVIDER\n        ? (liveSession.boundConversationId ?? null)\n        : null);\n    const historyId = resumeId ?? sessionId;\n    if (await this.conversationHandlers.isExcludedSubagent(historyId)) {\n      return { ok: false, reason: \"history_file_missing\" };\n    }\n    const managedProvider = row?.provider ?? liveSession?.provider;\n    const jsonlPath = this.conversationHandlers.findJsonlPath(historyId);\n    const conv = await this.conversationHandlers.findConversationByUuid(historyId);\n\n    // Cold boot resolves nothing through the scanner yet, so a persisted Codex\n    // rollout has to come from the cache. Without this a boot-time resume of a\n    // Codex session reads as history_file_missing purely because the warm-up\n    // has not run, and auto-resume permanently skips a session that is fine.\n    const cachedConvMeta = this.cache?.getMetaById(historyId);\n    if (\n      !this.featureFlags.subagentSessions &&\n      (row?.is_subagent === 1 || liveSession?.isSubagent || cachedConvMeta?.isSubagent)\n    ) {\n      return { ok: false, reason: \"history_file_missing\" };\n    }\n    const cachedPath = cachedConvMeta?.filePath ? toNativeFilePath(cachedConvMeta.filePath) : null;\n    const cachedCodexPath =\n      (managedProvider === CODEX_CLI_PROVIDER || cachedConvMeta?.provider === CODEX_CLI_PROVIDER) &&\n      cachedPath != null &&\n      existsSync(cachedPath)\n        ? cachedPath\n        : null;\n    const jsonlCwd = jsonlPath ? await this.conversationHandlers.readCwdFromJsonl(jsonlPath) : null;\n    const projectPath: string =\n      jsonlCwd ??\n      (conv as any)?.projectPath ??\n      (cachedCodexPath ? cachedConvMeta?.projectPath : null);\n    if (!projectPath) {\n      // Nothing at all resolved — the history file is gone, not merely\n      // unreadable. Distinguished from \"path unknown\" because it is permanent:\n      // the caller must not retry it.\n      if (!conv && !jsonlPath && !cachedCodexPath) {\n        return { ok: false, reason: \"history_file_missing\" };\n      }\n      return { ok: false, reason: \"no_project_path\" };\n    }\n\n    // Same provider-resolution fallback as the conversation-detail path\n    // (server.ts ~1685): `conv` (the full Conversation shape) doesn't carry\n    // provider, so fall back to the cached metadata, then default to Claude.\n    // …and, when the fallback above fired, the managed session's provider as a\n    // last resort: neither lookup is keyed by the placeholder id, so without it\n    // a Codex placeholder would default to Claude and spawn the wrong CLI. The\n    // live session covers the supported degraded mode where runtime.db failed.\n    const provider = coerceProviderForRunner(\n      (conv as any)?.provider ?? cachedConvMeta?.provider ?? managedProvider,\n    );\n\n    return {\n      ok: true,\n      historyId,\n      jsonlPath,\n      // findJsonlPath() only knows Claude's `<uuid>.jsonl` layout under\n      // ~/.claude/projects; a Codex rollout lives in a date-nested directory\n      // under a name it chose, so its path only ever comes from the indexed\n      // conversation. Kept separate from `jsonlPath` deliberately: feeding it to\n      // conversationBusy() would newly arm the mtime heuristic for Codex, which\n      // is exactly the over-broad signal the report ruled out.\n      historyPath:\n        jsonlPath ?? ((conv as any)?.filePath as string | undefined) ?? cachedCodexPath ?? null,\n      conv,\n      projectPath,\n      provider,\n    };\n  }\n\n  /**\n   * Block until a freshly spawned session reaches `waiting_input` (ready) or\n   * `idle` (failed), or until `timeoutMs` elapses with the process still alive.\n   *\n   * \"timeout\" is not an error: it is the pre-existing asynchronous contract —\n   * the session keeps booting and the caller answers with a pending shape.\n   */\n  private waitForStartupOutcome(\n    sessionId: string,\n    timeoutMs: number,\n  ): Promise<{ outcome: \"ready\" | \"failed\" | \"timeout\"; session: ManagedSession | null }> {\n    return new Promise((resolve) => {\n      let timer: NodeJS.Timeout | null = null;\n      const handler = (status: string, session?: ManagedSession) => {\n        if (status !== \"waiting_input\" && status !== \"idle\") return;\n        this.sessionStatusBus.off(`status:${sessionId}`, handler);\n        if (timer) clearTimeout(timer);\n        resolve({\n          outcome: status === \"waiting_input\" ? \"ready\" : \"failed\",\n          session: session ?? null,\n        });\n      };\n      this.sessionStatusBus.on(`status:${sessionId}`, handler);\n      timer = setTimeout(() => {\n        this.sessionStatusBus.off(`status:${sessionId}`, handler);\n        resolve({ outcome: \"timeout\", session: null });\n      }, timeoutMs);\n      timer.unref?.();\n    });\n  }\n\n  /**\n   * Drop every trace of a managed session: in-memory store, durable registry\n   * row, and the collision-probe markers that would otherwise outlive it.\n   *\n   * Used when a start never became usable (`abandonFailedStart`) and when stop\n   * is asked to discard an empty session that has no cached conversation. The\n   * registry delete is load-bearing — `rehydrateSessions` will bring the row\n   * back on the next boot if it remains.\n   *\n   * Callers that kill the PTY (`putOnHold`) must do that *first*: onStatusChange\n   * on idle writes `selfPtyEndedAt` and a registry status, and those have to\n   * be cleared here afterwards.\n   */\n  private forgetSession(sessionId: string): void {\n    this.sessionStore.removeManaged(sessionId);\n    this.selfPtyEndedAt.delete(sessionId);\n    this.contendedSessions.delete(sessionId);\n    try {\n      this.managedSessionsRepo?.delete(sessionId);\n    } catch (err) {\n      this.log.warn(\"[registry] failed to drop a session\", {\n        event: \"registry.forget_failed\",\n        sessionId,\n        err,\n      });\n    }\n  }\n\n  /**\n   * Drop every trace of a session that never became usable.\n   *\n   * The runner has already torn itself down (failStartup / handleExit); what\n   * remains is server-side bookkeeping that would otherwise leave a dead\n   * session in the list, a registry row claiming a spawn, and a `selfPtyEndedAt`\n   * marker that would suppress the mtime collision signal on the NEXT resume —\n   * i.e. it would help hide the very owner we just collided with.\n   */\n  private abandonFailedStart(sessionId: string): void {\n    this.forgetSession(sessionId);\n  }\n\n  private enrichResumedSessionAsync(sessionId: string, projectPath: string, conv: any): void {\n    try {\n      // Writes go through updateManaged: sessionStore.get() would hand back a\n      // response copy and every assignment below would be silently discarded.\n      // The store holds `ManagedSession`, so the timestamps are Dates here —\n      // managedToResponse serializes them, as it already does for startedAt.\n      if (!this.sessionStore.getManaged(sessionId)) return;\n\n      if (conv) {\n        this.sessionStore.updateManaged(sessionId, {\n          sessionName: conv.sessionName ?? undefined,\n          messageCount: conv.messageCount ?? 0,\n          account: conv.account ?? undefined,\n          filePath: conv.filePath ?? undefined,\n        });\n      }\n\n      if (!this.cache || !this.projectsRepo || !this.conversationsRepo) return;\n\n      // Single SQLite read covers model, preview, timestamps, and projectId —\n      // no scanner round-trip needed; these fields are already cached.\n      const cached = this.cache.getMetaById(sessionId);\n      if (cached) {\n        const first = cached.firstMessage ? JSON.parse(cached.firstMessage as string) : null;\n        const last = cached.lastMessage ? JSON.parse(cached.lastMessage as string) : null;\n        this.sessionStore.updateManaged(sessionId, {\n          model: cached.model ?? undefined,\n          preview: cached.preview ?? undefined,\n          firstMessageText: first?.text ?? undefined,\n          // parseIsoDateOrNull, not `new Date()`: an unparseable cached\n          // timestamp must land as absent, not as an Invalid Date that\n          // managedToResponse would throw on when it calls .toISOString().\n          firstMessageAt: parseIsoDateOrNull(first?.timestamp) ?? undefined,\n          lastMessageText: last?.text ?? undefined,\n          lastMessageAt: parseIsoDateOrNull(last?.timestamp) ?? undefined,\n        });\n      }\n\n      let resolvedProjectId: string | null = cached?.projectId ?? null;\n      if (!resolvedProjectId) {\n        const project = this.projectsRepo.upsertProjectByPath(projectPath);\n        resolvedProjectId = project.id;\n        this.conversationsRepo.updateConversationProjectId({\n          conversationId: sessionId,\n          projectId: project.id,\n        });\n      }\n      if (resolvedProjectId) {\n        this.sessionStore.updateManaged(sessionId, {\n          projectId: resolvedProjectId,\n          resumedFromConversationId: sessionId,\n        });\n      }\n    } catch (err) {\n      // ponytail: log but don't crash; session is already live and usable\n      console.error(`[enrichResumedSessionAsync] ${sessionId}:`, err);\n    }\n  }\n\n  // Store + broadcast AskUserQuestion cards found in a JSONL batch for a watched\n  // session. Two P0 safety guards on top of the screen/JSONL de-dupe:\n  //   (a) contended file → suppress JSONL-derived cards entirely (a line may be\n  //       the OTHER owner's question); the streamer's own PTY questions still\n  //       arrive via the live-screen path (handleLiveQuestion), not suppressed.\n  //   (b) a JSONL question must never clobber a PTY-screen question that is a\n  //       DIFFERENT question — answering it would type into this streamer's PTY.\n  //       Same-content re-syncs (screen synthetic id → real toolUseId) still pass.\n  private processJsonlQuestions(sessionId: string, lines: string[]): void {\n    // toolUseId the client currently holds for this session (set by the\n    // live-screen path as `screen:…`, or a prior JSONL flush). Captured BEFORE\n    // the overwrite below so we can detect an id change.\n    const priorPending = this.pendingQuestions.get(sessionId);\n    const priorToolUseId = priorPending?.toolUseId;\n    const contended = this.contendedSessions.has(sessionId);\n    const priorPtyKey =\n      priorPending?.origin === \"pty\" ? questionContentKey(priorPending.questions) : null;\n    const foreignVsPty = (questions: AskQuestion[]): boolean =>\n      priorPtyKey !== null && questionContentKey(questions) !== priorPtyKey;\n    // An ANSWERED question keeps its menu's key while nothing is pending — every\n    // answer path keeps it until the menu leaves the screen (#724). A JSONL flush\n    // of that same content landing after the answer is the answered question\n    // arriving late, not a new one: minting it opened a fresh actionable prompt\n    // (and re-rendered a legacy card) that the 60s timer below only cancelled a\n    // minute later — #724's 60-second phantom.\n    const answeredKey = priorPending ? null : (this.pendingQuestionKey.get(sessionId) ?? null);\n    const answeredLate = (questions: AskQuestion[]): boolean =>\n      answeredKey !== null && questionContentKey(questions) === answeredKey;\n    const { messages, pending } = questionsFromLines(sessionId, lines);\n    for (const p of pending) {\n      if (contended || foreignVsPty(p.questions) || answeredLate(p.questions)) continue;\n      // Preserve a same-question re-sync's \"pty\" origin so a later foreign JSONL\n      // question still can't clobber it.\n      const origin: \"pty\" | \"jsonl\" =\n        priorPtyKey !== null && questionContentKey(p.questions) === priorPtyKey ? \"pty\" : \"jsonl\";\n      this.sessionHandlers.handleJsonlQuestion(sessionId, p.toolUseId, p.questions, origin);\n      const t = setTimeout(() => {\n        if (this.pendingQuestions.get(sessionId)?.toolUseId === p.toolUseId) {\n          this.cancelPendingQuestion(sessionId);\n        }\n      }, 60_000);\n      t.unref();\n    }\n    // De-dupe vs the live-screen path: if the rendered detection already\n    // broadcast this exact question (same content key), don't re-render —\n    // EXCEPT when the real JSONL toolUseId differs from the synthetic `screen:`\n    // id the client holds. The client answers with the id it was given; if it\n    // still has the screen id, resolveAnswer rejects the POST as\n    // tool_use_mismatch. Re-broadcasting the real id re-syncs the client\n    // (mapAskQuestionToBlock just replaces activeQuestion — the card re-renders\n    // identically) so answering works.\n    for (const m of messages) {\n      // Same suppression as the pending loop: never render a JSONL card for a\n      // contended file, nor a foreign question over a live PTY one.\n      if (contended || foreignVsPty(m.questions) || answeredLate(m.questions)) continue;\n      const key = questionContentKey(m.questions);\n      const broadcast = shouldBroadcastQuestion({\n        newContentKey: key,\n        lastContentKey: this.pendingQuestionKey.get(sessionId),\n        newToolUseId: m.toolUseId,\n        priorToolUseId,\n      });\n      this.pendingQuestionKey.set(sessionId, key);\n      // Prompt content goes to the session's subscribers only; a late\n      // subscriber gets it from the subscribe replay.\n      if (broadcast) this.wsHub.broadcastToClients(this.sessionSubscribers.get(sessionId) ?? [], m);\n    }\n  }\n\n  private cancelPendingQuestion(sessionId: string): void {\n    const pq = this.pendingQuestions.get(sessionId);\n    if (!pq) return;\n    this.pendingQuestions.delete(sessionId);\n    this.pendingQuestionKey.delete(sessionId);\n    const prompt = this.promptRegistry.get(pq.promptId);\n    if (prompt?.state === \"open\" || prompt?.state === \"updated\") {\n      this.promptRegistry.transition(pq.promptId, \"cancelled\", \"provider_closed\");\n    }\n    this.wsHub.broadcastToClients(this.sessionSubscribers.get(sessionId) ?? [], {\n      type: \"question_cancelled\",\n      sessionId,\n      toolUseId: pq.toolUseId,\n    });\n  }\n\n  private async handleBrowse(url: URL, res: ServerResponse): Promise<void> {\n    if (!this.browseRoot) {\n      json(res, 403, {\n        error: \"File browsing not configured. Set browseRoot on the server.\",\n        code: \"BROWSE_ROOT_NOT_SET\",\n      });\n      return;\n    }\n    const relativePath = url.searchParams.get(\"path\") ?? \"\";\n    try {\n      const resolved = await resolveBrowsePath(this.browseRoot, relativePath);\n      const [directories, files] = await Promise.all([\n        listDirectories(resolved),\n        listFiles(resolved),\n      ]);\n      json(res, 200, { path: relativePath, directories, files });\n    } catch (err) {\n      const message = err instanceof Error ? err.message : \"Browse failed\";\n      if (err instanceof BrowsePathNotFoundError) {\n        json(res, 404, { error: message, code: \"PATH_NOT_FOUND\" });\n        return;\n      }\n      json(res, 400, { error: message });\n    }\n  }\n\n  private async handleMkdir(req: IncomingMessage, res: ServerResponse): Promise<void> {\n    if (!this.browseRoot) {\n      json(res, 403, {\n        error: \"File browsing not configured. Set browseRoot on the server.\",\n        code: \"BROWSE_ROOT_NOT_SET\",\n      });\n      return;\n    }\n    const body = await readBody(req);\n    const { path: relativePath, name } = body;\n    if (!name || typeof name !== \"string\") {\n      json(res, 400, { error: \"Missing name field\" });\n      return;\n    }\n    try {\n      const parentPath = await resolveBrowsePath(this.browseRoot, relativePath ?? \"\");\n      await createDirectory(parentPath, name);\n      const parentRelative = relativePath ?? \"\";\n      const created = parentRelative ? `${parentRelative}/${name}` : name;\n      json(res, 201, { created });\n    } catch (err) {\n      const message = err instanceof Error ? err.message : \"Failed to create directory\";\n      if (message.includes(\"already exists\")) {\n        json(res, 409, { error: message });\n      } else if (message.includes(\"Invalid directory name\")) {\n        json(res, 400, { error: message });\n      } else {\n        json(res, 400, { error: message });\n      }\n    }\n  }\n\n  /**\n   * Retarget a LIVE session's model or effort by typing the corresponding\n   * Claude Code slash command into its PTY.\n   *\n   * There is no CLI or IPC channel for this — `--model`/`--effort` are spawn\n   * arguments — so the interactive `/model <x>` / `/effort <y>` commands are the\n   * only way to change a session already running. Both accept an argument and\n   * apply it without opening the picker (verified against Claude Code v2.1.220).\n   *\n   * Answers 202, not 200: the value is applied by the TUI on its next render, so\n   * there is nothing truthful to echo back synchronously. Clients confirm with\n   * `GET /api/sessions/:id`, which scrapes the applied value off the live status\n   * line.\n   */\n  private async applyLiveSessionSetting(\n    sessionId: string,\n    req: IncomingMessage,\n    res: ServerResponse,\n    setting: \"model\" | \"effort\",\n  ): Promise<void> {\n    // Both putOnHold() and handleExit() DELETE the session from the runner's\n    // map, so \"no live PTY\" reads as absent here, not as status \"idle\". Fall back\n    // to the registry to tell a held/exited session (409, resume it) apart from\n    // an id that was never ours (404) — mobile holds sessions routinely via the\n    // grace timer, and answering 404 for one it can see in its list is a lie.\n    const session = this.ptyManager.getSession(sessionId);\n    if (!session) {\n      const known = this.sessionStore.getManaged(sessionId);\n      if (known) {\n        json(res, 409, {\n          error: \"Session has no live PTY; resume it first\",\n          code: \"SESSION_IDLE\",\n        });\n        return;\n      }\n      json(res, 404, { error: \"Session not found\" });\n      return;\n    }\n    if ((session.provider ?? CLAUDE_CODE_PROVIDER) !== CLAUDE_CODE_PROVIDER) {\n      json(res, 501, {\n        error: `Setting ${setting} on a ${session.provider} session is not supported`,\n        code: \"UNSUPPORTED_PROVIDER\",\n      });\n      return;\n    }\n    // Mid-turn the composer is not accepting a slash command, so the injected\n    // text would be swallowed or garbled. Make the caller wait for the turn.\n    if (session.status === \"running\") {\n      json(res, 409, {\n        error: \"Session is mid-turn; retry once it is waiting for input\",\n        code: \"SESSION_BUSY\",\n      });\n      return;\n    }\n\n    let parsed: { model?: unknown; effort?: unknown };\n    try {\n      parsed = await readBody(req);\n    } catch {\n      json(res, 400, { error: \"Invalid JSON\" });\n      return;\n    }\n\n    // TRUST BOUNDARY: this value is written as raw bytes into a live terminal.\n    // An unvalidated \\r would end the slash command and let the rest of the\n    // string run as a second, attacker-chosen command. Validate, never escape.\n    let value: string;\n    if (setting === \"effort\") {\n      if (!isEffortLevel(parsed.effort)) {\n        json(res, 400, {\n          error: `effort must be one of ${EFFORT_LEVELS.join(\", \")}`,\n        });\n        return;\n      }\n      value = parsed.effort;\n    } else {\n      if (typeof parsed.model !== \"string\" || !MODEL_NAME_RE.test(parsed.model)) {\n        json(res, 400, {\n          error:\n            \"model must be an alias or full model name (letters, digits, dot, dash, underscore)\",\n        });\n        return;\n      }\n      value = parsed.model;\n    }\n\n    try {\n      this.ptyManager.sendKeys(sessionId, `/${setting} ${value}\\r`);\n    } catch (err) {\n      json(res, 400, { error: err instanceof Error ? err.message : \"Failed to write to session\" });\n      return;\n    }\n    this.log.info(`Live session ${setting} set to ${value}`, {\n      event: \"session.setting_applied\",\n      sessionId,\n      setting,\n      value,\n    });\n    // Record what we asked for and tell subscribers, so the WS carries the new\n    // value instead of leaving every client to re-GET the session. Only\n    // `effort` is stored: `model` is owned by the scanner, and overwriting it\n    // here with a spawn-time alias would clobber the resolved name.\n    //\n    // Optimistic by nature — 202 means the TUI has not applied it yet. The\n    // status-line scrape on GET /api/sessions/:id stays authoritative and wins\n    // if the two ever disagree.\n    if (setting === \"effort\") {\n      this.sessionStore.updateManaged(sessionId, { effort: value });\n      const updated = this.sessionStore.get(sessionId, this.ptyAttachedIds());\n      if (updated) this.wsHub.broadcast({ type: \"session_update\", session: updated });\n    }\n    json(res, 202, { id: sessionId, [setting]: value });\n  }\n}\n\n// ─── Utilities ─────────────────────────────────────────────────────\n\n// Parse THREADBASE_DIR_SCAN_DEBOUNCE_MS → a non-negative integer, or undefined\n// when unset/invalid so the caller can fall through to config/default.\nfunction parseDirScanDebounceEnv(raw: string | undefined): number | undefined {\n  if (raw == null || raw === \"\") return undefined;\n  const parsed = Number.parseInt(raw, 10);\n  return Number.isNaN(parsed) || parsed < 0 ? undefined : parsed;\n}\n","// Does an edge gate stand between paired devices and this server?\n//\n// **Why the streamer asks this at all.** A sealed request carries no\n// `Authorization` header — that is the point of the envelope — and an\n// interactive Cloudflare Access application rejects credential-less requests at\n// the edge, before the tunnel. Measured on hardware (D2 row 9, 2026-09-02): with\n// Access in front of a tunnelled streamer, `POST /api/e2ee/open` never arrives;\n// the device receives an HTML redirect to a login page where message 2 belongs,\n// and pairing fails closed with \"this server offered an encrypted pairing and\n// then did not finish it\". Nothing in that message points at the gate, so the\n// operator regenerates pairing codes forever.\n//\n// The server is the one component that can see both sides: it knows its own\n// public URL and can ask the edge what an unauthenticated device would get. So\n// it asks once, at boot, and says so plainly.\n\n/** What the probe found. */\nexport type AccessProbeResult =\n  /** No gate: an unauthenticated request reached this server. */\n  | { kind: \"open\"; status: number }\n  /** A gate answered instead of this server. `location` is the login redirect. */\n  | { kind: \"gated\"; status: number; location: string; serviceTokenAccepted?: boolean }\n  /** The probe could not tell. Never a warning — an unreachable public URL is a\n   *  different problem with its own symptoms, and guessing would cry wolf. */\n  | { kind: \"unknown\"; reason: string };\n\nexport interface AccessServiceToken {\n  clientId: string;\n  clientSecret: string;\n}\n\n/**\n * A redirect to Cloudflare's Access login is the signature: any 30x whose\n * `location` names the `/cdn-cgi/access/login` path. Matched on the path rather\n * than the hostname because the team domain is per-account\n * (`<team>.cloudflareaccess.com`) and a custom domain is allowed.\n */\nfunction isAccessRedirect(status: number, location: string | null): location is string {\n  if (status < 300 || status >= 400 || !location) return false;\n  return location.includes(\"/cdn-cgi/access/login\");\n}\n\n/**\n * One request to this server's own public URL, from outside its own process.\n *\n * `/healthz` deliberately: it needs no credential, so a non-200 says something\n * about the *path in front of* the server rather than about authorization.\n * `redirect: \"manual\"` because the answer IS the redirect — following it would\n * fetch a login page and lose the evidence.\n */\nexport async function probeAccessGate(args: {\n  publicUrl: string;\n  serviceToken?: AccessServiceToken;\n  fetchImpl?: typeof fetch;\n  timeoutMs?: number;\n}): Promise<AccessProbeResult> {\n  const doFetch = args.fetchImpl ?? fetch;\n  const base = args.publicUrl.replace(/\\/$/, \"\");\n  const timeoutMs = args.timeoutMs ?? 5000;\n\n  const once = async (headers?: Record<string, string>) => {\n    const controller = new AbortController();\n    const timer = setTimeout(() => controller.abort(), timeoutMs);\n    try {\n      return await doFetch(`${base}/healthz`, {\n        method: \"GET\",\n        redirect: \"manual\",\n        signal: controller.signal,\n        ...(headers ? { headers } : {}),\n      });\n    } finally {\n      clearTimeout(timer);\n    }\n  };\n\n  let res: Response;\n  try {\n    res = await once();\n  } catch (err) {\n    // Includes the timeout. An unreachable public URL is not a gate.\n    return { kind: \"unknown\", reason: err instanceof Error ? err.message : String(err) };\n  }\n\n  const location = res.headers.get(\"location\");\n  if (!isAccessRedirect(res.status, location)) {\n    return { kind: \"open\", status: res.status };\n  }\n\n  // A gate is there. If the operator configured a service token, the useful\n  // question is no longer \"is there a gate\" but \"does my token get through it\",\n  // because that is the difference between a working rollout and a broken one.\n  if (!args.serviceToken) {\n    return { kind: \"gated\", status: res.status, location };\n  }\n  try {\n    const withToken = await once({\n      \"CF-Access-Client-Id\": args.serviceToken.clientId,\n      \"CF-Access-Client-Secret\": args.serviceToken.clientSecret,\n    });\n    const tokenLocation = withToken.headers.get(\"location\");\n    return {\n      kind: \"gated\",\n      status: res.status,\n      location,\n      serviceTokenAccepted: !isAccessRedirect(withToken.status, tokenLocation),\n    };\n  } catch {\n    // The unauthenticated probe already answered the question that matters.\n    // A failed second request leaves `serviceTokenAccepted` absent, which the\n    // message below reads as \"not verified\" rather than as \"rejected\".\n    return { kind: \"gated\", status: res.status, location };\n  }\n}\n\n/**\n * The operator-facing sentence. Separate from the probe so a test can read the\n * words rather than assert on a shape, and so the wording can change without\n * touching the network code.\n */\nexport function describeAccessProbe(result: AccessProbeResult): string | null {\n  if (result.kind !== \"gated\") return null;\n  const head =\n    \"An edge gate (Cloudflare Access) answers requests to this server's public URL, so encrypted \" +\n    \"devices cannot reach it: a sealed request carries no Authorization header by design, and the \" +\n    \"gate refuses it before it arrives. Pairing will fail with a message that blames the server.\";\n  if (result.serviceTokenAccepted === true) {\n    return `${head} The configured Access service token DOES satisfy the gate, so devices presenting it can pair.`;\n  }\n  if (result.serviceTokenAccepted === false) {\n    return `${head} The configured Access service token does NOT satisfy the gate — check that a Service Auth policy names it.`;\n  }\n  return `${head} Fix it by removing Access from this hostname, or by adding a service token and a Service Auth policy for it.`;\n}\n\n/**\n * The host of the login redirect, and nothing else.\n *\n * That URL carries a signed JWT in its query string — identity metadata about\n * the account and the request. The host (`<team>.cloudflareaccess.com`) is the\n * diagnostic an operator needs; the rest is not ours to write into a log file\n * that ends up attached to bug reports.\n */\nexport function safeHost(location: string | undefined): string | undefined {\n  if (!location) return undefined;\n  try {\n    return new URL(location).host;\n  } catch {\n    return undefined;\n  }\n}\n","// src/agent/agent-client.ts\n//\n// Thin Temporal client wrapper used by tb-streamer in multi-agent mode.\n// Does NOT import workflow code from tb-multi-agent — we identify the\n// workflow and its signals/queries by name. The workflow's wire contract\n// lives in @threadbase-sh/agent-types.\n\nimport type { Client } from \"@temporalio/client\";\nimport type { UserInputSignal } from \"@threadbase-sh/agent-types\";\n\n// `defineSignal` / `defineQuery` only ship in `@temporalio/workflow` (a worker-\n// side package we deliberately do NOT pull into the streamer). The handle\n// methods `.signal(...)` and `.query(...)` accept either a plain string OR a\n// definition object with `{ type, name }`. We construct minimal definition\n// objects here — Temporal matches by name, the rest of the shape is virtual\n// branding.\n//\n// Same identifiers as tb-multi-agent's src/workflows/signals.ts.\nconst userInputSignal = { type: \"signal\", name: \"userInput\" } as unknown as {\n  type: \"signal\";\n  name: \"userInput\";\n};\nconst stageQuery = { type: \"query\", name: \"stage\" } as unknown as {\n  type: \"query\";\n  name: \"stage\";\n};\n\nconst ORCHESTRATOR_WORKFLOW_TYPE = \"orchestratorWorkflow\";\n\nexport interface AgentClient {\n  startSession(sessionId: string): Promise<string>;\n  sendUserInput(sessionId: string, payload: UserInputSignal): Promise<void>;\n  endSession(sessionId: string): Promise<void>;\n  getSessionStage(sessionId: string): Promise<string>;\n}\n\nexport interface AgentClientOpts {\n  temporalClient: Client;\n  taskQueue: string;\n}\n\nconst sessionWorkflowId = (sessionId: string): string => `session-${sessionId}`;\n\nexport function createAgentClient({ temporalClient, taskQueue }: AgentClientOpts): AgentClient {\n  return {\n    async startSession(sessionId: string): Promise<string> {\n      const handle = await temporalClient.workflow.start(ORCHESTRATOR_WORKFLOW_TYPE, {\n        taskQueue,\n        workflowId: sessionWorkflowId(sessionId),\n        args: [sessionId],\n        workflowIdReusePolicy: \"REJECT_DUPLICATE\",\n      } as any);\n      return handle.workflowId;\n    },\n    async sendUserInput(sessionId: string, payload: UserInputSignal): Promise<void> {\n      await temporalClient.workflow\n        .getHandle(sessionWorkflowId(sessionId))\n        .signal(userInputSignal as any, payload);\n    },\n    async endSession(sessionId: string): Promise<void> {\n      await temporalClient.workflow.getHandle(sessionWorkflowId(sessionId)).cancel();\n    },\n    async getSessionStage(sessionId: string): Promise<string> {\n      return temporalClient.workflow\n        .getHandle(sessionWorkflowId(sessionId))\n        .query(stageQuery as any);\n    },\n  };\n}\n","// src/agent/agent-config.ts\n//\n// Runtime config for multi-agent mode. Read once at server startup so we don't\n// thread env-var lookups through the rest of the codebase.\n\nexport interface AgentConfig {\n  enabled: boolean;\n  temporal: {\n    address: string;\n    namespace: string;\n    taskQueue: string;\n  };\n  webhook: {\n    hmacSecret: string;\n    timestampSkewSeconds: number;\n  };\n  dedupe: {\n    perSessionCapacity: number;\n  };\n  payload: {\n    limitBytes: number;\n    trajectoryLogBytes: number;\n    trajectoryLogTurns: number;\n  };\n  sessionBusyRetryMs: number;\n  conversationsDir: string;\n}\n\nconst DEFAULTS = {\n  TEMPORAL_ADDRESS: \"localhost:7233\",\n  TEMPORAL_NAMESPACE: \"default\",\n  TEMPORAL_TASK_QUEUE: \"agent-tasks\",\n  PROGRESS_HMAC_SECRET: \"dev-secret-change-me\",\n  PROGRESS_WEBHOOK_TIMESTAMP_SKEW_SECONDS: \"300\",\n  PROGRESS_DEDUPE_CAPACITY: \"1024\",\n  AGENT_PAYLOAD_LIMIT_BYTES: \"1572864\", // 1.5 MB — 75% of Temporal's 2 MB ceiling\n  AGENT_TRAJECTORY_LOG_BYTES: \"512000\", // 500 KB\n  AGENT_TRAJECTORY_LOG_TURNS: \"20\", // First turn count for trajectory WARN\n  AGENT_SESSION_BUSY_RETRY_MS: \"1000\",\n};\n\nfunction isTruthy(v: string | undefined): boolean {\n  if (v === undefined) return false;\n  return v === \"true\" || v === \"1\" || v === \"yes\" || v === \"on\";\n}\n\nexport function readAgentConfig(env: NodeJS.ProcessEnv = process.env): AgentConfig {\n  const enabled = isTruthy(env.MULTI_AGENT_FLOW);\n  return {\n    enabled,\n    temporal: {\n      address: env.TEMPORAL_ADDRESS ?? DEFAULTS.TEMPORAL_ADDRESS,\n      namespace: env.TEMPORAL_NAMESPACE ?? DEFAULTS.TEMPORAL_NAMESPACE,\n      taskQueue: env.TEMPORAL_TASK_QUEUE ?? DEFAULTS.TEMPORAL_TASK_QUEUE,\n    },\n    webhook: {\n      hmacSecret: env.PROGRESS_HMAC_SECRET ?? DEFAULTS.PROGRESS_HMAC_SECRET,\n      timestampSkewSeconds: Number(\n        env.PROGRESS_WEBHOOK_TIMESTAMP_SKEW_SECONDS ??\n          DEFAULTS.PROGRESS_WEBHOOK_TIMESTAMP_SKEW_SECONDS,\n      ),\n    },\n    dedupe: {\n      perSessionCapacity: Number(env.PROGRESS_DEDUPE_CAPACITY ?? DEFAULTS.PROGRESS_DEDUPE_CAPACITY),\n    },\n    payload: {\n      limitBytes: Number(env.AGENT_PAYLOAD_LIMIT_BYTES ?? DEFAULTS.AGENT_PAYLOAD_LIMIT_BYTES),\n      trajectoryLogBytes: Number(\n        env.AGENT_TRAJECTORY_LOG_BYTES ?? DEFAULTS.AGENT_TRAJECTORY_LOG_BYTES,\n      ),\n      trajectoryLogTurns: Number(\n        env.AGENT_TRAJECTORY_LOG_TURNS ?? DEFAULTS.AGENT_TRAJECTORY_LOG_TURNS,\n      ),\n    },\n    sessionBusyRetryMs: Number(\n      env.AGENT_SESSION_BUSY_RETRY_MS ?? DEFAULTS.AGENT_SESSION_BUSY_RETRY_MS,\n    ),\n    // Mirrors ServerConfig.cacheDir's parent — the actual JSONL directory.\n    // We read it from env here; the conversation writer takes the resolved\n    // value from ServerConfig in Task 9.\n    conversationsDir: env.THREADBASE_CONVERSATIONS_DIR ?? \"\",\n  };\n}\n","// src/agent/conversation-writer.ts\n//\n// Persists assistant turns to JSONL when the worker's final agent_output for a\n// turn arrives. The existing ConversationCache + ConversationWatcher then\n// ingest the line via the existing watcher pipeline — see spec §6.3.\n\nimport { appendFile, mkdir } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\n\nexport interface AppendArgs {\n  sessionId: string;\n  turnId: string;\n  content: string;\n  reviewerOverruled?: boolean;\n}\n\nexport interface ConversationWriter {\n  appendAssistantTurn(args: AppendArgs): Promise<void>;\n}\n\nexport function createConversationWriter(opts: { baseDir: string }): ConversationWriter {\n  const { baseDir } = opts;\n\n  return {\n    async appendAssistantTurn(args: AppendArgs): Promise<void> {\n      if (!args.content || args.content.length === 0) {\n        throw new Error(\"ConversationWriter: refusing to write empty assistant turn\");\n      }\n      const file = join(baseDir, `${args.sessionId}.jsonl`);\n      await mkdir(dirname(file), { recursive: true });\n\n      const record = {\n        role: \"assistant\" as const,\n        turnId: args.turnId,\n        content: args.content,\n        timestamp: Date.now(),\n        ...(args.reviewerOverruled ? { reviewerOverruled: true } : {}),\n      };\n\n      const line = `${JSON.stringify(record)}\\n`;\n      await appendFile(file, line, { encoding: \"utf8\" });\n    },\n  };\n}\n","// src/compose.ts\nvar compose = (middleware, onError, onNotFound) => {\n  return (context, next) => {\n    let index = -1;\n    return dispatch(0);\n    async function dispatch(i) {\n      if (i <= index) {\n        throw new Error(\"next() called multiple times\");\n      }\n      index = i;\n      let res;\n      let isError = false;\n      let handler;\n      if (middleware[i]) {\n        handler = middleware[i][0][0];\n        context.req.routeIndex = i;\n      } else {\n        handler = i === middleware.length && next || void 0;\n      }\n      if (handler) {\n        try {\n          res = await handler(context, () => dispatch(i + 1));\n        } catch (err) {\n          if (err instanceof Error && onError) {\n            context.error = err;\n            res = await onError(err, context);\n            isError = true;\n          } else {\n            throw err;\n          }\n        }\n      } else {\n        if (context.finalized === false && onNotFound) {\n          res = await onNotFound(context);\n        }\n      }\n      if (res && (context.finalized === false || isError)) {\n        context.res = res;\n      }\n      return context;\n    }\n  };\n};\nexport {\n  compose\n};\n","// src/request/constants.ts\nvar GET_MATCH_RESULT = /* @__PURE__ */ Symbol();\nexport {\n  GET_MATCH_RESULT\n};\n","// src/utils/buffer.ts\nimport { sha256 } from \"./crypto.js\";\nvar equal = (a, b) => {\n  if (a === b) {\n    return true;\n  }\n  if (a.byteLength !== b.byteLength) {\n    return false;\n  }\n  const va = new DataView(a);\n  const vb = new DataView(b);\n  let i = va.byteLength;\n  while (i--) {\n    if (va.getUint8(i) !== vb.getUint8(i)) {\n      return false;\n    }\n  }\n  return true;\n};\nvar constantTimeEqualString = (a, b) => {\n  const aLen = a.length;\n  const bLen = b.length;\n  const maxLen = Math.max(aLen, bLen);\n  let out = aLen ^ bLen;\n  for (let i = 0; i < maxLen; i++) {\n    const aChar = i < aLen ? a.charCodeAt(i) : 0;\n    const bChar = i < bLen ? b.charCodeAt(i) : 0;\n    out |= aChar ^ bChar;\n  }\n  return out === 0;\n};\nvar timingSafeEqualString = async (a, b, hashFunction) => {\n  if (!hashFunction) {\n    hashFunction = sha256;\n  }\n  const [sa, sb] = await Promise.all([hashFunction(a), hashFunction(b)]);\n  if (sa == null || sb == null || typeof sa !== \"string\" || typeof sb !== \"string\") {\n    return false;\n  }\n  const hashEqual = constantTimeEqualString(sa, sb);\n  const originalEqual = constantTimeEqualString(a, b);\n  return hashEqual && originalEqual;\n};\nvar timingSafeEqual = async (a, b, hashFunction) => {\n  if (typeof a === \"string\" && typeof b === \"string\") {\n    return timingSafeEqualString(a, b, hashFunction);\n  }\n  if (!hashFunction) {\n    hashFunction = sha256;\n  }\n  const [sa, sb] = await Promise.all([hashFunction(a), hashFunction(b)]);\n  if (!sa || !sb || typeof sa !== \"string\" || typeof sb !== \"string\") {\n    return false;\n  }\n  return timingSafeEqualString(sa, sb);\n};\nvar bufferToString = (buffer) => {\n  if (buffer instanceof ArrayBuffer) {\n    const enc = new TextDecoder(\"utf-8\");\n    return enc.decode(buffer);\n  }\n  return buffer;\n};\nvar bufferToFormData = (arrayBuffer, contentType) => {\n  const response = new Response(arrayBuffer, {\n    headers: {\n      // Normalize the media type (case-insensitive) while keeping parameters like the boundary\n      \"Content-Type\": contentType.replace(/^[^;]+/, (mediaType) => mediaType.toLowerCase())\n    }\n  });\n  return response.formData();\n};\nexport {\n  bufferToFormData,\n  bufferToString,\n  equal,\n  timingSafeEqual\n};\n","// src/utils/body.ts\nimport { bufferToFormData } from \"./buffer.js\";\nvar MAX_NESTING_DEPTH = 32;\nvar MAX_NESTED_OBJECTS = 1e4;\nvar isRawRequest = (request) => \"headers\" in request;\nvar parseBody = async (request, options = /* @__PURE__ */ Object.create(null)) => {\n  const { all = false, dot = false } = options;\n  const headers = isRawRequest(request) ? request.headers : request.raw.headers;\n  const contentType = headers.get(\"Content-Type\");\n  const mediaType = contentType?.split(\";\")[0].trim().toLowerCase();\n  if (mediaType === \"multipart/form-data\" || mediaType === \"application/x-www-form-urlencoded\") {\n    return parseFormData(request, { all, dot });\n  }\n  return {};\n};\nasync function parseFormData(request, options) {\n  if (!isRawRequest(request) && request.bodyCache.formData) {\n    return convertFormDataToBodyData(\n      await request.bodyCache.formData,\n      options\n    );\n  }\n  const headers = isRawRequest(request) ? request.headers : request.raw.headers;\n  const arrayBuffer = await request.arrayBuffer();\n  const formDataPromise = bufferToFormData(arrayBuffer, headers.get(\"Content-Type\") || \"\");\n  if (!isRawRequest(request)) {\n    request.bodyCache.formData = formDataPromise;\n  }\n  const formData = await formDataPromise;\n  if (formData) {\n    return convertFormDataToBodyData(formData, options);\n  }\n  return {};\n}\nfunction convertFormDataToBodyData(formData, options) {\n  const form = /* @__PURE__ */ Object.create(null);\n  const nestingState = { count: 0 };\n  formData.forEach((value, key) => {\n    const shouldParseAllValues = options.all || key.endsWith(\"[]\");\n    if (!shouldParseAllValues) {\n      form[key] = value;\n    } else {\n      handleParsingAllValues(form, key, value);\n    }\n  });\n  if (options.dot) {\n    Object.entries(form).forEach(([key, value]) => {\n      const shouldParseDotValues = key.includes(\".\");\n      if (shouldParseDotValues) {\n        handleParsingNestedValues(form, key, value, nestingState);\n        delete form[key];\n      }\n    });\n  }\n  return form;\n}\nvar handleParsingAllValues = (form, key, value) => {\n  if (form[key] !== void 0) {\n    if (Array.isArray(form[key])) {\n      ;\n      form[key].push(value);\n    } else {\n      form[key] = [form[key], value];\n    }\n  } else {\n    if (!key.endsWith(\"[]\")) {\n      form[key] = value;\n    } else {\n      form[key] = [value];\n    }\n  }\n};\nvar handleParsingNestedValues = (form, key, value, state) => {\n  if (/(?:^|\\.)__proto__\\./.test(key)) {\n    return;\n  }\n  let nestedForm = form;\n  const keys = key.split(\".\", MAX_NESTING_DEPTH + 2);\n  if (keys.length > MAX_NESTING_DEPTH + 1) {\n    throwNestingLimitExceeded();\n  }\n  keys.forEach((key2, index) => {\n    if (index === keys.length - 1) {\n      nestedForm[key2] = value;\n    } else {\n      if (!nestedForm[key2] || typeof nestedForm[key2] !== \"object\" || Array.isArray(nestedForm[key2]) || nestedForm[key2] instanceof File) {\n        if (state.count++ >= MAX_NESTED_OBJECTS) {\n          throwNestingLimitExceeded();\n        }\n        nestedForm[key2] = /* @__PURE__ */ Object.create(null);\n      }\n      nestedForm = nestedForm[key2];\n    }\n  });\n};\nvar throwNestingLimitExceeded = () => {\n  throw new Error(\"Nesting limit exceeded\");\n};\nexport {\n  parseBody\n};\n","// src/utils/url.ts\nvar splitPath = (path) => {\n  const paths = path.split(\"/\");\n  if (paths[0] === \"\") {\n    paths.shift();\n  }\n  return paths;\n};\nvar splitRoutingPath = (routePath) => {\n  const { groups, path } = extractGroupsFromPath(routePath);\n  const paths = splitPath(path);\n  return replaceGroupMarks(paths, groups);\n};\nvar extractGroupsFromPath = (path) => {\n  const groups = [];\n  path = path.replace(/\\{[^}]+\\}/g, (match, index) => {\n    const mark = `@${index}`;\n    groups.push([mark, match]);\n    return mark;\n  });\n  return { groups, path };\n};\nvar replaceGroupMarks = (paths, groups) => {\n  for (let i = groups.length - 1; i >= 0; i--) {\n    const [mark] = groups[i];\n    for (let j = paths.length - 1; j >= 0; j--) {\n      if (paths[j].includes(mark)) {\n        paths[j] = paths[j].replace(mark, groups[i][1]);\n        break;\n      }\n    }\n  }\n  return paths;\n};\nvar patternCache = {};\nvar getPattern = (label, next) => {\n  if (label === \"*\") {\n    return \"*\";\n  }\n  const match = label.match(/^\\:([^\\{\\}]+)(?:\\{(.+)\\})?$/);\n  if (match) {\n    const cacheKey = `${label}#${next}`;\n    if (!patternCache[cacheKey]) {\n      if (match[2]) {\n        patternCache[cacheKey] = next && next[0] !== \":\" && next[0] !== \"*\" ? [cacheKey, match[1], new RegExp(`^${match[2]}(?=/${next})`)] : [label, match[1], new RegExp(`^${match[2]}$`)];\n      } else {\n        patternCache[cacheKey] = [label, match[1], true];\n      }\n    }\n    return patternCache[cacheKey];\n  }\n  return null;\n};\nvar tryDecode = (str, decoder) => {\n  try {\n    return decoder(str);\n  } catch {\n    return str.replace(/(?:%[0-9A-Fa-f]{2})+/g, (match) => {\n      try {\n        return decoder(match);\n      } catch {\n        return match;\n      }\n    });\n  }\n};\nvar tryDecodeURI = (str) => tryDecode(str, decodeURI);\nvar getPath = (request) => {\n  const url = request.url;\n  const start = url.indexOf(\"/\", url.indexOf(\":\") + 4);\n  let i = start;\n  for (; i < url.length; i++) {\n    const charCode = url.charCodeAt(i);\n    if (charCode === 37) {\n      const queryIndex = url.indexOf(\"?\", i);\n      const hashIndex = url.indexOf(\"#\", i);\n      const end = queryIndex === -1 ? hashIndex === -1 ? void 0 : hashIndex : hashIndex === -1 ? queryIndex : Math.min(queryIndex, hashIndex);\n      const path = url.slice(start, end);\n      return tryDecodeURI(path.includes(\"%25\") ? path.replace(/%25/g, \"%2525\") : path);\n    } else if (charCode === 63 || charCode === 35) {\n      break;\n    }\n  }\n  return url.slice(start, i);\n};\nvar getQueryStrings = (url) => {\n  const queryIndex = url.indexOf(\"?\", 8);\n  if (queryIndex === -1) {\n    return \"\";\n  }\n  const hashIndex = url.indexOf(\"#\", 8);\n  return hashIndex === -1 ? url.slice(queryIndex) : queryIndex < hashIndex ? url.slice(queryIndex, hashIndex) : \"\";\n};\nvar getPathNoStrict = (request) => {\n  const result = getPath(request);\n  return result.length > 1 && result.at(-1) === \"/\" ? result.slice(0, -1) : result;\n};\nvar mergePath = (base, sub, ...rest) => {\n  if (rest.length) {\n    sub = mergePath(sub, ...rest);\n  }\n  return `${base?.[0] === \"/\" ? \"\" : \"/\"}${base}${sub === \"/\" ? \"\" : `${base?.at(-1) === \"/\" ? \"\" : \"/\"}${sub?.[0] === \"/\" ? sub.slice(1) : sub}`}`;\n};\nvar checkOptionalParameter = (path) => {\n  if (path.charCodeAt(path.length - 1) !== 63 || !path.includes(\":\")) {\n    return null;\n  }\n  const segments = path.split(\"/\");\n  const results = [];\n  let basePath = \"\";\n  segments.forEach((segment) => {\n    if (segment !== \"\" && !/\\:/.test(segment)) {\n      basePath += \"/\" + segment;\n    } else if (/\\:/.test(segment)) {\n      if (segment.charCodeAt(segment.length - 1) === 63) {\n        if (results.length === 0 && basePath === \"\") {\n          results.push(\"/\");\n        } else {\n          results.push(basePath);\n        }\n        const optionalSegment = segment.slice(0, -1);\n        basePath += \"/\" + optionalSegment;\n        results.push(basePath);\n      } else {\n        basePath += \"/\" + segment;\n      }\n    }\n  });\n  return results.filter((v, i, a) => a.indexOf(v) === i);\n};\nvar tryDecodeURIComponent = (str) => str.indexOf(\"%\") !== -1 ? tryDecode(str, decodeURIComponent_) : str;\nvar _decodeURI = (value) => {\n  if (value.indexOf(\"+\") !== -1) {\n    value = value.replace(/\\+/g, \" \");\n  }\n  return tryDecodeURIComponent(value);\n};\nvar _getQueryParam = (url, key, multiple) => {\n  const hashIndex = url.indexOf(\"#\", 8);\n  if (hashIndex !== -1) {\n    url = url.slice(0, hashIndex);\n  }\n  let encoded;\n  if (!multiple && key && key.indexOf(\"%\") === -1 && key.indexOf(\"+\") === -1) {\n    let keyIndex2 = url.indexOf(\"?\", 8);\n    if (keyIndex2 === -1) {\n      return void 0;\n    }\n    if (!url.startsWith(key, keyIndex2 + 1)) {\n      keyIndex2 = url.indexOf(`&${key}`, keyIndex2 + 1);\n    }\n    while (keyIndex2 !== -1) {\n      const trailingKeyCode = url.charCodeAt(keyIndex2 + key.length + 1);\n      if (trailingKeyCode === 61) {\n        const valueIndex = keyIndex2 + key.length + 2;\n        const endIndex = url.indexOf(\"&\", valueIndex);\n        return _decodeURI(url.slice(valueIndex, endIndex === -1 ? void 0 : endIndex));\n      } else if (trailingKeyCode == 38 || isNaN(trailingKeyCode)) {\n        return \"\";\n      }\n      keyIndex2 = url.indexOf(`&${key}`, keyIndex2 + 1);\n    }\n    encoded = /[%+]/.test(url);\n    if (!encoded) {\n      return void 0;\n    }\n  }\n  const results = /* @__PURE__ */ Object.create(null);\n  encoded ??= /[%+]/.test(url);\n  let keyIndex = url.indexOf(\"?\", 8);\n  while (keyIndex !== -1) {\n    const nextKeyIndex = url.indexOf(\"&\", keyIndex + 1);\n    let valueIndex = url.indexOf(\"=\", keyIndex);\n    if (valueIndex > nextKeyIndex && nextKeyIndex !== -1) {\n      valueIndex = -1;\n    }\n    let name = url.slice(\n      keyIndex + 1,\n      valueIndex === -1 ? nextKeyIndex === -1 ? void 0 : nextKeyIndex : valueIndex\n    );\n    if (encoded) {\n      name = _decodeURI(name);\n    }\n    keyIndex = nextKeyIndex;\n    if (name === \"\") {\n      continue;\n    }\n    let value;\n    if (valueIndex === -1) {\n      value = \"\";\n    } else {\n      value = url.slice(valueIndex + 1, nextKeyIndex === -1 ? void 0 : nextKeyIndex);\n      if (encoded) {\n        value = _decodeURI(value);\n      }\n    }\n    if (multiple) {\n      if (!(results[name] && Array.isArray(results[name]))) {\n        results[name] = [];\n      }\n      ;\n      results[name].push(value);\n    } else {\n      results[name] ??= value;\n    }\n  }\n  return key ? results[key] : results;\n};\nvar getQueryParam = _getQueryParam;\nvar getQueryParams = (url, key) => {\n  return _getQueryParam(url, key, true);\n};\nvar decodeURIComponent_ = decodeURIComponent;\nexport {\n  checkOptionalParameter,\n  decodeURIComponent_,\n  getPath,\n  getPathNoStrict,\n  getPattern,\n  getQueryParam,\n  getQueryParams,\n  getQueryStrings,\n  mergePath,\n  splitPath,\n  splitRoutingPath,\n  tryDecode,\n  tryDecodeURI,\n  tryDecodeURIComponent\n};\n","// src/request.ts\nimport { HTTPException } from \"./http-exception.js\";\nimport { GET_MATCH_RESULT } from \"./request/constants.js\";\nimport { parseBody } from \"./utils/body.js\";\nimport { getQueryParam, getQueryParams, tryDecodeURIComponent } from \"./utils/url.js\";\nvar HonoRequest = class {\n  /**\n   * `.raw` can get the raw Request object.\n   *\n   * @see {@link https://hono.dev/docs/api/request#raw}\n   *\n   * @example\n   * ```ts\n   * // For Cloudflare Workers\n   * app.post('/', async (c) => {\n   *   const metadata = c.req.raw.cf?.hostMetadata?\n   *   ...\n   * })\n   * ```\n   */\n  raw;\n  #validatedData;\n  // Short name of validatedData\n  #matchResult;\n  routeIndex = 0;\n  /**\n   * `.path` can get the pathname of the request.\n   *\n   * @see {@link https://hono.dev/docs/api/request#path}\n   *\n   * @example\n   * ```ts\n   * app.get('/about/me', (c) => {\n   *   const pathname = c.req.path // `/about/me`\n   * })\n   * ```\n   */\n  path;\n  bodyCache = {};\n  constructor(request, path = \"/\", matchResult = [[]]) {\n    this.raw = request;\n    this.path = path;\n    this.#matchResult = matchResult;\n  }\n  param(key) {\n    return key ? this.#getDecodedParam(key) : this.#getAllDecodedParams();\n  }\n  #getDecodedParam(key) {\n    const paramKey = this.#matchResult[0][this.routeIndex]?.[1][key];\n    const param = this.#getParamValue(paramKey);\n    return param && tryDecodeURIComponent(param);\n  }\n  #getAllDecodedParams() {\n    const decoded = {};\n    const keys = Object.keys(this.#matchResult[0][this.routeIndex]?.[1] ?? {});\n    for (const key of keys) {\n      const value = this.#getParamValue(this.#matchResult[0][this.routeIndex][1][key]);\n      if (value !== void 0) {\n        decoded[key] = tryDecodeURIComponent(value);\n      }\n    }\n    return decoded;\n  }\n  #getParamValue(paramKey) {\n    return this.#matchResult[1] ? this.#matchResult[1][paramKey] : paramKey;\n  }\n  query(key) {\n    return getQueryParam(this.url, key);\n  }\n  queries(key) {\n    return getQueryParams(this.url, key);\n  }\n  header(name) {\n    if (name) {\n      return this.raw.headers.get(name) ?? void 0;\n    }\n    const headerData = /* @__PURE__ */ Object.create(null);\n    this.raw.headers.forEach((value, key) => {\n      headerData[key] = value;\n    });\n    return headerData;\n  }\n  async parseBody(options) {\n    return parseBody(this, options);\n  }\n  #cachedBody = (key) => {\n    const { bodyCache, raw } = this;\n    const cachedBody = bodyCache[key];\n    if (cachedBody) {\n      return cachedBody;\n    }\n    for (const anyCachedKey in bodyCache) {\n      return bodyCache[anyCachedKey].then((body) => {\n        if (anyCachedKey === \"json\") {\n          body = JSON.stringify(body);\n        }\n        const contentType = anyCachedKey === \"formData\" ? void 0 : raw.headers.get(\"content-type\");\n        return new Response(body, {\n          headers: contentType ? { \"Content-Type\": contentType } : void 0\n        })[key]();\n      });\n    }\n    return bodyCache[key] = raw[key]();\n  };\n  /**\n   * `.json()` can parse Request body of type `application/json`\n   *\n   * @see {@link https://hono.dev/docs/api/request#json}\n   *\n   * @example\n   * ```ts\n   * app.post('/entry', async (c) => {\n   *   const body = await c.req.json()\n   * })\n   * ```\n   */\n  json() {\n    return this.#cachedBody(\"text\").then((text) => JSON.parse(text));\n  }\n  /**\n   * `.text()` can parse Request body of type `text/plain`\n   *\n   * @see {@link https://hono.dev/docs/api/request#text}\n   *\n   * @example\n   * ```ts\n   * app.post('/entry', async (c) => {\n   *   const body = await c.req.text()\n   * })\n   * ```\n   */\n  text() {\n    return this.#cachedBody(\"text\");\n  }\n  /**\n   * `.arrayBuffer()` parse Request body as an `ArrayBuffer`\n   *\n   * @see {@link https://hono.dev/docs/api/request#arraybuffer}\n   *\n   * @example\n   * ```ts\n   * app.post('/entry', async (c) => {\n   *   const body = await c.req.arrayBuffer()\n   * })\n   * ```\n   */\n  arrayBuffer() {\n    return this.#cachedBody(\"arrayBuffer\");\n  }\n  /**\n   * `.bytes()` parses the request body as a `Uint8Array`.\n   *\n   * @see {@link https://hono.dev/docs/api/request#bytes}\n   *\n   * @example\n   * ```ts\n   * app.post('/entry', async (c) => {\n   *   const body = await c.req.bytes()\n   * })\n   * ```\n   */\n  bytes() {\n    return this.#cachedBody(\"arrayBuffer\").then((buffer) => new Uint8Array(buffer));\n  }\n  /**\n   * Parses the request body as a `Blob`.\n   * @example\n   * ```ts\n   * app.post('/entry', async (c) => {\n   *   const body = await c.req.blob();\n   * });\n   * ```\n   * @see https://hono.dev/docs/api/request#blob\n   */\n  blob() {\n    return this.#cachedBody(\"blob\");\n  }\n  /**\n   * Parses the request body as `FormData`.\n   * @example\n   * ```ts\n   * app.post('/entry', async (c) => {\n   *   const body = await c.req.formData();\n   * });\n   * ```\n   * @see https://hono.dev/docs/api/request#formdata\n   */\n  formData() {\n    return this.#cachedBody(\"formData\");\n  }\n  /**\n   * Adds validated data to the request.\n   *\n   * @param target - The target of the validation.\n   * @param data - The validated data to add.\n   */\n  addValidatedData(target, data) {\n    ;\n    (this.#validatedData ??= {})[target] = data;\n  }\n  valid(target) {\n    return this.#validatedData?.[target];\n  }\n  /**\n   * `.url()` can get the request url strings.\n   *\n   * @see {@link https://hono.dev/docs/api/request#url}\n   *\n   * @example\n   * ```ts\n   * app.get('/about/me', (c) => {\n   *   const url = c.req.url // `http://localhost:8787/about/me`\n   *   ...\n   * })\n   * ```\n   */\n  get url() {\n    return this.raw.url;\n  }\n  /**\n   * `.method()` can get the method name of the request.\n   *\n   * @see {@link https://hono.dev/docs/api/request#method}\n   *\n   * @example\n   * ```ts\n   * app.get('/about/me', (c) => {\n   *   const method = c.req.method // `GET`\n   * })\n   * ```\n   */\n  get method() {\n    return this.raw.method;\n  }\n  get [GET_MATCH_RESULT]() {\n    return this.#matchResult;\n  }\n  /**\n   * `.matchedRoutes()` can return a matched route in the handler\n   *\n   * @deprecated\n   *\n   * Use matchedRoutes helper defined in \"hono/route\" instead.\n   *\n   * @see {@link https://hono.dev/docs/api/request#matchedroutes}\n   *\n   * @example\n   * ```ts\n   * app.use('*', async function logger(c, next) {\n   *   await next()\n   *   c.req.matchedRoutes.forEach(({ handler, method, path }, i) => {\n   *     const name = handler.name || (handler.length < 2 ? '[handler]' : '[middleware]')\n   *     console.log(\n   *       method,\n   *       ' ',\n   *       path,\n   *       ' '.repeat(Math.max(10 - path.length, 0)),\n   *       name,\n   *       i === c.req.routeIndex ? '<- respond from here' : ''\n   *     )\n   *   })\n   * })\n   * ```\n   */\n  get matchedRoutes() {\n    return this.#matchResult[0].map(([[, route]]) => route);\n  }\n  /**\n   * `routePath()` can retrieve the path registered within the handler\n   *\n   * @deprecated\n   *\n   * Use routePath helper defined in \"hono/route\" instead.\n   *\n   * @see {@link https://hono.dev/docs/api/request#routepath}\n   *\n   * @example\n   * ```ts\n   * app.get('/posts/:id', (c) => {\n   *   return c.json({ path: c.req.routePath })\n   * })\n   * ```\n   */\n  get routePath() {\n    return this.#matchResult[0].map(([[, route]]) => route)[this.routeIndex].path;\n  }\n};\nvar cloneRawRequest = async (req) => {\n  if (!req.raw.bodyUsed) {\n    return req.raw.clone();\n  }\n  const cacheKey = Object.keys(req.bodyCache)[0];\n  if (!cacheKey) {\n    throw new HTTPException(500, {\n      message: \"Cannot clone request: body was already consumed and not cached. Please use HonoRequest methods (e.g., req.json(), req.text()) instead of consuming req.raw directly.\"\n    });\n  }\n  let body = await req[cacheKey]();\n  const headers = req.header();\n  if (cacheKey === \"json\") {\n    body = JSON.stringify(body);\n    delete headers[\"content-length\"];\n  } else if (body instanceof FormData) {\n    delete headers[\"content-type\"];\n    delete headers[\"content-length\"];\n  }\n  const requestInit = {\n    body,\n    cache: req.raw.cache,\n    credentials: req.raw.credentials,\n    headers,\n    integrity: req.raw.integrity,\n    keepalive: req.raw.keepalive,\n    method: req.method,\n    mode: req.raw.mode,\n    redirect: req.raw.redirect,\n    referrer: req.raw.referrer,\n    referrerPolicy: req.raw.referrerPolicy,\n    signal: req.raw.signal\n  };\n  return new Request(req.url, requestInit);\n};\nexport {\n  HonoRequest,\n  cloneRawRequest\n};\n","// src/utils/html.ts\nvar HtmlEscapedCallbackPhase = {\n  Stringify: 1,\n  BeforeStream: 2,\n  Stream: 3\n};\nvar raw = (value, callbacks) => {\n  const escapedString = new String(value);\n  escapedString.isEscaped = true;\n  escapedString.callbacks = callbacks;\n  return escapedString;\n};\nvar escapeRe = /[&<>'\"]/;\nvar stringBufferToString = async (buffer, callbacks) => {\n  let str = \"\";\n  callbacks ||= [];\n  const resolvedBuffer = await Promise.all(buffer);\n  for (let i = resolvedBuffer.length - 1; ; i--) {\n    str += resolvedBuffer[i];\n    i--;\n    if (i < 0) {\n      break;\n    }\n    let r = resolvedBuffer[i];\n    if (typeof r === \"object\") {\n      callbacks.push(...r.callbacks || []);\n    }\n    const isEscaped = r.isEscaped;\n    r = await (typeof r === \"object\" ? r.toString() : r);\n    if (typeof r === \"object\") {\n      callbacks.push(...r.callbacks || []);\n    }\n    if (r.isEscaped ?? isEscaped) {\n      str += r;\n    } else {\n      const buf = [str];\n      escapeToBuffer(r, buf);\n      str = buf[0];\n    }\n  }\n  return raw(str, callbacks);\n};\nvar escapeToBuffer = (str, buffer) => {\n  const match = str.search(escapeRe);\n  if (match === -1) {\n    buffer[0] += str;\n    return;\n  }\n  let escape;\n  let index;\n  let lastIndex = 0;\n  for (index = match; index < str.length; index++) {\n    switch (str.charCodeAt(index)) {\n      case 34:\n        escape = \"&quot;\";\n        break;\n      case 39:\n        escape = \"&#39;\";\n        break;\n      case 38:\n        escape = \"&amp;\";\n        break;\n      case 60:\n        escape = \"&lt;\";\n        break;\n      case 62:\n        escape = \"&gt;\";\n        break;\n      default:\n        continue;\n    }\n    buffer[0] += str.substring(lastIndex, index) + escape;\n    lastIndex = index + 1;\n  }\n  buffer[0] += str.substring(lastIndex, index);\n};\nvar resolveCallbackSync = (str) => {\n  const callbacks = str.callbacks;\n  if (!callbacks?.length) {\n    return str;\n  }\n  const buffer = [str];\n  const context = {};\n  callbacks.forEach((c) => c({ phase: HtmlEscapedCallbackPhase.Stringify, buffer, context }));\n  return buffer[0];\n};\nvar resolveCallback = async (str, phase, preserveCallbacks, context, buffer) => {\n  if (typeof str === \"object\" && !(str instanceof String)) {\n    if (!(str instanceof Promise)) {\n      str = str.toString();\n    }\n    if (str instanceof Promise) {\n      str = await str;\n    }\n  }\n  const callbacks = str.callbacks;\n  if (!callbacks?.length) {\n    return Promise.resolve(str);\n  }\n  if (buffer) {\n    buffer[0] += str;\n  } else {\n    buffer = [str];\n  }\n  const resStr = Promise.all(callbacks.map((c) => c({ phase, buffer, context }))).then(\n    (res) => Promise.all(\n      res.filter(Boolean).map((str2) => resolveCallback(str2, phase, false, context, buffer))\n    ).then(() => buffer[0])\n  );\n  if (preserveCallbacks) {\n    return raw(await resStr, callbacks);\n  } else {\n    return resStr;\n  }\n};\nexport {\n  HtmlEscapedCallbackPhase,\n  escapeToBuffer,\n  raw,\n  resolveCallback,\n  resolveCallbackSync,\n  stringBufferToString\n};\n","// src/context.ts\nimport { HonoRequest } from \"./request.js\";\nimport { HtmlEscapedCallbackPhase, resolveCallback } from \"./utils/html.js\";\nvar TEXT_PLAIN = \"text/plain; charset=UTF-8\";\nvar setDefaultContentType = (contentType, headers) => {\n  return {\n    \"Content-Type\": contentType,\n    ...headers\n  };\n};\nvar createResponseInstance = (body, init) => new Response(body, init);\nvar Context = class {\n  #rawRequest;\n  #req;\n  /**\n   * `.env` can get bindings (environment variables, secrets, KV namespaces, D1 database, R2 bucket etc.) in Cloudflare Workers.\n   *\n   * @see {@link https://hono.dev/docs/api/context#env}\n   *\n   * @example\n   * ```ts\n   * // Environment object for Cloudflare Workers\n   * app.get('*', async c => {\n   *   const counter = c.env.COUNTER\n   * })\n   * ```\n   */\n  env = {};\n  #var;\n  finalized = false;\n  /**\n   * `.error` can get the error object from the middleware if the Handler throws an error.\n   *\n   * @see {@link https://hono.dev/docs/api/context#error}\n   *\n   * @example\n   * ```ts\n   * app.use('*', async (c, next) => {\n   *   await next()\n   *   if (c.error) {\n   *     // do something...\n   *   }\n   * })\n   * ```\n   */\n  error;\n  #status;\n  #executionCtx;\n  #res;\n  #layout;\n  #renderer;\n  #notFoundHandler;\n  #preparedHeaders;\n  #matchResult;\n  #path;\n  /**\n   * Creates an instance of the Context class.\n   *\n   * @param req - The Request object.\n   * @param options - Optional configuration options for the context.\n   */\n  constructor(req, options) {\n    this.#rawRequest = req;\n    if (options) {\n      this.#executionCtx = options.executionCtx;\n      this.env = options.env;\n      this.#notFoundHandler = options.notFoundHandler;\n      this.#path = options.path;\n      this.#matchResult = options.matchResult;\n    }\n  }\n  /**\n   * `.req` is the instance of {@link HonoRequest}.\n   */\n  get req() {\n    this.#req ??= new HonoRequest(this.#rawRequest, this.#path, this.#matchResult);\n    return this.#req;\n  }\n  /**\n   * @see {@link https://hono.dev/docs/api/context#event}\n   * The FetchEvent associated with the current request.\n   *\n   * @throws Will throw an error if the context does not have a FetchEvent.\n   */\n  get event() {\n    if (this.#executionCtx && \"respondWith\" in this.#executionCtx) {\n      return this.#executionCtx;\n    } else {\n      throw Error(\"This context has no FetchEvent\");\n    }\n  }\n  /**\n   * @see {@link https://hono.dev/docs/api/context#executionctx}\n   * The ExecutionContext associated with the current request.\n   *\n   * @throws Will throw an error if the context does not have an ExecutionContext.\n   */\n  get executionCtx() {\n    if (this.#executionCtx) {\n      return this.#executionCtx;\n    } else {\n      throw Error(\"This context has no ExecutionContext\");\n    }\n  }\n  /**\n   * @see {@link https://hono.dev/docs/api/context#res}\n   * The Response object for the current request.\n   */\n  get res() {\n    return this.#res ||= createResponseInstance(null, {\n      headers: this.#preparedHeaders ??= new Headers()\n    });\n  }\n  /**\n   * Sets the Response object for the current request.\n   *\n   * @param _res - The Response object to set.\n   */\n  set res(_res) {\n    if (this.#res && _res) {\n      _res = createResponseInstance(_res.body, _res);\n      for (const [k, v] of this.#res.headers.entries()) {\n        if (k === \"content-type\") {\n          continue;\n        }\n        if (k === \"set-cookie\") {\n          const cookies = this.#res.headers.getSetCookie();\n          _res.headers.delete(\"set-cookie\");\n          for (const cookie of cookies) {\n            _res.headers.append(\"set-cookie\", cookie);\n          }\n        } else {\n          _res.headers.set(k, v);\n        }\n      }\n    }\n    this.#res = _res;\n    this.finalized = true;\n  }\n  /**\n   * `.render()` can create a response within a layout.\n   *\n   * @see {@link https://hono.dev/docs/api/context#render-setrenderer}\n   *\n   * @example\n   * ```ts\n   * app.get('/', (c) => {\n   *   return c.render('Hello!')\n   * })\n   * ```\n   */\n  render = (...args) => {\n    this.#renderer ??= (content) => this.html(content);\n    return this.#renderer(...args);\n  };\n  /**\n   * Sets the layout for the response.\n   *\n   * @param layout - The layout to set.\n   * @returns The layout function.\n   */\n  setLayout = (layout) => this.#layout = layout;\n  /**\n   * Gets the current layout for the response.\n   *\n   * @returns The current layout function.\n   */\n  getLayout = () => this.#layout;\n  /**\n   * `.setRenderer()` can set the layout in the custom middleware.\n   *\n   * @see {@link https://hono.dev/docs/api/context#render-setrenderer}\n   *\n   * @example\n   * ```tsx\n   * app.use('*', async (c, next) => {\n   *   c.setRenderer((content) => {\n   *     return c.html(\n   *       <html>\n   *         <body>\n   *           <p>{content}</p>\n   *         </body>\n   *       </html>\n   *     )\n   *   })\n   *   await next()\n   * })\n   * ```\n   */\n  setRenderer = (renderer) => {\n    this.#renderer = renderer;\n  };\n  /**\n   * `.header()` can set headers.\n   *\n   * @see {@link https://hono.dev/docs/api/context#header}\n   *\n   * @example\n   * ```ts\n   * app.get('/welcome', (c) => {\n   *   // Set headers\n   *   c.header('X-Message', 'Hello!')\n   *   c.header('Content-Type', 'text/plain')\n   *\n   *   // Append multiple headers using the append option (e.g. Vary)\n   *   c.header('Vary', 'Accept-Encoding', { append: true })\n   *   c.header('Vary', 'User-Agent', { append: true })\n   *\n   *   return c.body('Thank you for coming')\n   * })\n   * ```\n   */\n  header = (name, value, options) => {\n    if (this.finalized) {\n      this.#res = createResponseInstance(this.#res.body, this.#res);\n    }\n    const headers = this.#res ? this.#res.headers : this.#preparedHeaders ??= new Headers();\n    if (value === void 0) {\n      headers.delete(name);\n    } else if (options?.append) {\n      headers.append(name, value);\n    } else {\n      headers.set(name, value);\n    }\n  };\n  status = (status) => {\n    this.#status = status;\n  };\n  /**\n   * `.set()` can set the value specified by the key.\n   *\n   * @see {@link https://hono.dev/docs/api/context#set-get}\n   *\n   * @example\n   * ```ts\n   * app.use('*', async (c, next) => {\n   *   c.set('message', 'Hono is hot!!')\n   *   await next()\n   * })\n   * ```\n   */\n  set = (key, value) => {\n    this.#var ??= /* @__PURE__ */ new Map();\n    this.#var.set(key, value);\n  };\n  /**\n   * `.get()` can use the value specified by the key.\n   *\n   * @see {@link https://hono.dev/docs/api/context#set-get}\n   *\n   * @example\n   * ```ts\n   * app.get('/', (c) => {\n   *   const message = c.get('message')\n   *   return c.text(`The message is \"${message}\"`)\n   * })\n   * ```\n   */\n  get = (key) => {\n    return this.#var ? this.#var.get(key) : void 0;\n  };\n  /**\n   * `.var` can access the value of a variable.\n   *\n   * @see {@link https://hono.dev/docs/api/context#var}\n   *\n   * @example\n   * ```ts\n   * const result = c.var.client.oneMethod()\n   * ```\n   */\n  // c.var.propName is a read-only\n  get var() {\n    if (!this.#var) {\n      return {};\n    }\n    return Object.fromEntries(this.#var);\n  }\n  #newResponse(data, arg, headers) {\n    let responseHeaders = this.#res ? new Headers(this.#res.headers) : this.#preparedHeaders;\n    if (typeof arg === \"object\" && arg.headers) {\n      responseHeaders ??= new Headers();\n      for (const [key, value] of new Headers(arg.headers)) {\n        if (key === \"set-cookie\") {\n          responseHeaders.append(key, value);\n        } else {\n          responseHeaders.set(key, value);\n        }\n      }\n    }\n    if (headers) {\n      if (!responseHeaders) {\n        let count = 0;\n        for (const k in headers) {\n          if (++count > 1 || typeof headers[k] !== \"string\") {\n            responseHeaders = new Headers();\n            break;\n          }\n        }\n      }\n      if (responseHeaders) {\n        for (const k in headers) {\n          const v = headers[k];\n          if (typeof v === \"string\") {\n            responseHeaders.set(k, v);\n          } else {\n            responseHeaders.delete(k);\n            for (const v2 of v) {\n              responseHeaders.append(k, v2);\n            }\n          }\n        }\n      }\n    }\n    const status = typeof arg === \"number\" ? arg : arg?.status ?? this.#status;\n    return createResponseInstance(data, {\n      status,\n      headers: responseHeaders ?? headers\n    });\n  }\n  newResponse = (...args) => this.#newResponse(...args);\n  /**\n   * `.body()` can return the HTTP response.\n   * You can set headers with `.header()` and set HTTP status code with `.status`.\n   * This can also be set in `.text()`, `.json()` and so on.\n   *\n   * @see {@link https://hono.dev/docs/api/context#body}\n   *\n   * @example\n   * ```ts\n   * app.get('/welcome', (c) => {\n   *   // Set headers\n   *   c.header('X-Message', 'Hello!')\n   *   c.header('Content-Type', 'text/plain')\n   *   // Set HTTP status code\n   *   c.status(201)\n   *\n   *   // Return the response body\n   *   return c.body('Thank you for coming')\n   * })\n   * ```\n   */\n  body = (data, arg, headers) => this.#newResponse(data, arg, headers);\n  /**\n   * `.text()` can render text as `Content-Type:text/plain`.\n   *\n   * @see {@link https://hono.dev/docs/api/context#text}\n   *\n   * @example\n   * ```ts\n   * app.get('/say', (c) => {\n   *   return c.text('Hello!')\n   * })\n   * ```\n   */\n  text = (text, arg, headers) => {\n    return !this.#preparedHeaders && !this.#status && !arg && !headers && !this.finalized ? new Response(text) : this.#newResponse(\n      text,\n      arg,\n      setDefaultContentType(TEXT_PLAIN, headers)\n    );\n  };\n  /**\n   * `.json()` can render JSON as `Content-Type:application/json`.\n   *\n   * @see {@link https://hono.dev/docs/api/context#json}\n   *\n   * @example\n   * ```ts\n   * app.get('/api', (c) => {\n   *   return c.json({ message: 'Hello!' })\n   * })\n   * ```\n   */\n  json = (object, arg, headers) => {\n    return this.#newResponse(\n      JSON.stringify(object),\n      arg,\n      setDefaultContentType(\"application/json\", headers)\n    );\n  };\n  html = (html, arg, headers) => {\n    const res = (html2) => this.#newResponse(html2, arg, setDefaultContentType(\"text/html; charset=UTF-8\", headers));\n    return typeof html === \"object\" ? resolveCallback(html, HtmlEscapedCallbackPhase.Stringify, false, {}).then(res) : res(html);\n  };\n  /**\n   * `.redirect()` can Redirect, default status code is 302.\n   *\n   * @see {@link https://hono.dev/docs/api/context#redirect}\n   *\n   * @example\n   * ```ts\n   * app.get('/redirect', (c) => {\n   *   return c.redirect('/')\n   * })\n   * app.get('/redirect-permanently', (c) => {\n   *   return c.redirect('/', 301)\n   * })\n   * ```\n   */\n  redirect = (location, status) => {\n    const locationString = String(location);\n    this.header(\n      \"Location\",\n      // Multibytes should be encoded\n      // eslint-disable-next-line no-control-regex\n      !/[^\\x00-\\xFF]/.test(locationString) ? locationString : encodeURI(locationString)\n    );\n    return this.newResponse(null, status ?? 302);\n  };\n  /**\n   * `.notFound()` can return the Not Found Response.\n   *\n   * @see {@link https://hono.dev/docs/api/context#notfound}\n   *\n   * @example\n   * ```ts\n   * app.get('/notfound', (c) => {\n   *   return c.notFound()\n   * })\n   * ```\n   */\n  notFound = () => {\n    this.#notFoundHandler ??= () => createResponseInstance();\n    return this.#notFoundHandler(this);\n  };\n};\nexport {\n  Context,\n  TEXT_PLAIN\n};\n","// src/router.ts\nvar METHOD_NAME_ALL = \"ALL\";\nvar METHOD_NAME_ALL_LOWERCASE = \"all\";\nvar METHODS = [\"get\", \"post\", \"put\", \"delete\", \"options\", \"patch\", \"query\"];\nvar MESSAGE_MATCHER_IS_ALREADY_BUILT = \"Can not add a route since the matcher is already built.\";\nvar UnsupportedPathError = class extends Error {\n};\nexport {\n  MESSAGE_MATCHER_IS_ALREADY_BUILT,\n  METHODS,\n  METHOD_NAME_ALL,\n  METHOD_NAME_ALL_LOWERCASE,\n  UnsupportedPathError\n};\n","// src/utils/constants.ts\nvar COMPOSED_HANDLER = \"__COMPOSED_HANDLER\";\nexport {\n  COMPOSED_HANDLER\n};\n","// src/hono-base.ts\nimport { compose } from \"./compose.js\";\nimport { Context } from \"./context.js\";\nimport { METHODS, METHOD_NAME_ALL, METHOD_NAME_ALL_LOWERCASE } from \"./router.js\";\nimport { COMPOSED_HANDLER } from \"./utils/constants.js\";\nimport { getPath, getPathNoStrict, mergePath } from \"./utils/url.js\";\nvar notFoundHandler = (c) => {\n  return c.text(\"404 Not Found\", 404);\n};\nvar errorHandler = (err, c) => {\n  if (\"getResponse\" in err) {\n    const res = err.getResponse();\n    return c.newResponse(res.body, res);\n  }\n  console.error(err);\n  return c.text(\"Internal Server Error\", 500);\n};\nvar Hono = class _Hono {\n  get;\n  post;\n  put;\n  delete;\n  options;\n  patch;\n  query;\n  all;\n  on;\n  use;\n  /*\n    This class is like an abstract class and does not have a router.\n    To use it, inherit the class and implement router in the constructor.\n  */\n  router;\n  getPath;\n  // Cannot use `#` because it requires visibility at JavaScript runtime.\n  _basePath = \"/\";\n  #path = \"/\";\n  routes = [];\n  constructor(options = {}) {\n    const allMethods = [...METHODS, METHOD_NAME_ALL_LOWERCASE];\n    allMethods.forEach((method) => {\n      this[method] = (args1, ...args) => {\n        const methodName = method.toUpperCase();\n        if (typeof args1 === \"string\") {\n          this.#path = args1;\n        } else {\n          this.#addRoute(methodName, this.#path, args1);\n        }\n        args.forEach((handler) => {\n          this.#addRoute(methodName, this.#path, handler);\n        });\n        return this;\n      };\n    });\n    this.on = (method, path, ...handlers) => {\n      for (const p of [path].flat()) {\n        this.#path = p;\n        for (const m of [method].flat()) {\n          const methodName = m.toUpperCase();\n          for (const handler of handlers) {\n            this.#addRoute(methodName, this.#path, handler);\n          }\n        }\n      }\n      return this;\n    };\n    this.use = (arg1, ...handlers) => {\n      if (typeof arg1 === \"string\") {\n        this.#path = arg1;\n      } else {\n        this.#path = \"*\";\n        handlers.unshift(arg1);\n      }\n      handlers.forEach((handler) => {\n        this.#addRoute(METHOD_NAME_ALL, this.#path, handler);\n      });\n      return this;\n    };\n    const { strict, ...optionsWithoutStrict } = options;\n    Object.assign(this, optionsWithoutStrict);\n    this.getPath = strict ?? true ? options.getPath ?? getPath : getPathNoStrict;\n  }\n  #clone() {\n    const clone = new _Hono({\n      router: this.router,\n      getPath: this.getPath\n    });\n    clone.errorHandler = this.errorHandler;\n    clone.#notFoundHandler = this.#notFoundHandler;\n    clone.routes = this.routes;\n    return clone;\n  }\n  #notFoundHandler = notFoundHandler;\n  // Cannot use `#` because it requires visibility at JavaScript runtime.\n  errorHandler = errorHandler;\n  /**\n   * `.route()` allows grouping other Hono instance in routes.\n   *\n   * @see {@link https://hono.dev/docs/api/routing#grouping}\n   *\n   * @param {string} path - base Path\n   * @param {Hono} app - other Hono instance\n   * @returns {Hono} routed Hono instance\n   *\n   * @example\n   * ```ts\n   * const app = new Hono()\n   * const app2 = new Hono()\n   *\n   * app2.get(\"/user\", (c) => c.text(\"user\"))\n   * app.route(\"/api\", app2) // GET /api/user\n   * ```\n   */\n  route(path, app) {\n    const subApp = this.basePath(path);\n    app.routes.map((r) => {\n      let handler;\n      if (app.errorHandler === errorHandler) {\n        handler = r.handler;\n      } else {\n        handler = async (c, next) => (await compose([], app.errorHandler)(c, () => r.handler(c, next))).res;\n        handler[COMPOSED_HANDLER] = r.handler;\n      }\n      subApp.#addRoute(r.method, r.path, handler, r.basePath);\n    });\n    return this;\n  }\n  /**\n   * `.basePath()` allows base paths to be specified.\n   *\n   * @see {@link https://hono.dev/docs/api/routing#base-path}\n   *\n   * @param {string} path - base Path\n   * @returns {Hono} changed Hono instance\n   *\n   * @example\n   * ```ts\n   * const api = new Hono().basePath('/api')\n   * ```\n   */\n  basePath(path) {\n    const subApp = this.#clone();\n    subApp._basePath = mergePath(this._basePath, path);\n    return subApp;\n  }\n  /**\n   * `.onError()` handles an error and returns a customized Response.\n   *\n   * @see {@link https://hono.dev/docs/api/hono#error-handling}\n   *\n   * @param {ErrorHandler} handler - request Handler for error\n   * @returns {Hono} changed Hono instance\n   *\n   * @example\n   * ```ts\n   * app.onError((err, c) => {\n   *   console.error(`${err}`)\n   *   return c.text('Custom Error Message', 500)\n   * })\n   * ```\n   */\n  onError = (handler) => {\n    this.errorHandler = handler;\n    return this;\n  };\n  /**\n   * `.notFound()` allows you to customize a Not Found Response.\n   *\n   * @see {@link https://hono.dev/docs/api/hono#not-found}\n   *\n   * @param {NotFoundHandler} handler - request handler for not-found\n   * @returns {Hono} changed Hono instance\n   *\n   * @example\n   * ```ts\n   * app.notFound((c) => {\n   *   return c.text('Custom 404 Message', 404)\n   * })\n   * ```\n   */\n  notFound = (handler) => {\n    this.#notFoundHandler = handler;\n    return this;\n  };\n  /**\n   * `.mount()` allows you to mount applications built with other frameworks into your Hono application.\n   *\n   * @see {@link https://hono.dev/docs/api/hono#mount}\n   *\n   * @param {string} path - base Path\n   * @param {Function} applicationHandler - other Request Handler\n   * @param {MountOptions} [options] - options of `.mount()`\n   * @returns {Hono} mounted Hono instance\n   *\n   * @example\n   * ```ts\n   * import { Router as IttyRouter } from 'itty-router'\n   * import { Hono } from 'hono'\n   * // Create itty-router application\n   * const ittyRouter = IttyRouter()\n   * // GET /itty-router/hello\n   * ittyRouter.get('/hello', () => new Response('Hello from itty-router'))\n   *\n   * const app = new Hono()\n   * app.mount('/itty-router', ittyRouter.handle)\n   * ```\n   *\n   * @example\n   * ```ts\n   * const app = new Hono()\n   * // Send the request to another application without modification.\n   * app.mount('/app', anotherApp, {\n   *   replaceRequest: (req) => req,\n   * })\n   * ```\n   */\n  mount(path, applicationHandler, options) {\n    let replaceRequest;\n    let optionHandler;\n    if (options) {\n      if (typeof options === \"function\") {\n        optionHandler = options;\n      } else {\n        optionHandler = options.optionHandler;\n        if (options.replaceRequest === false) {\n          replaceRequest = (request) => request;\n        } else {\n          replaceRequest = options.replaceRequest;\n        }\n      }\n    }\n    const getOptions = optionHandler ? (c) => {\n      const options2 = optionHandler(c);\n      return Array.isArray(options2) ? options2 : [options2];\n    } : (c) => {\n      let executionContext = void 0;\n      try {\n        executionContext = c.executionCtx;\n      } catch {\n      }\n      return [c.env, executionContext];\n    };\n    replaceRequest ||= (() => {\n      const mergedPath = mergePath(this._basePath, path);\n      const pathPrefixLength = mergedPath === \"/\" ? 0 : mergedPath.length;\n      return (request) => {\n        const url = new URL(request.url);\n        url.pathname = this.getPath(request).slice(pathPrefixLength) || \"/\";\n        return new Request(url, request);\n      };\n    })();\n    const handler = async (c, next) => {\n      const res = await applicationHandler(replaceRequest(c.req.raw), ...getOptions(c));\n      if (res) {\n        return res;\n      }\n      await next();\n    };\n    this.#addRoute(METHOD_NAME_ALL, mergePath(path, \"*\"), handler);\n    return this;\n  }\n  #addRoute(method, path, handler, baseRoutePath) {\n    path = mergePath(this._basePath, path);\n    const r = {\n      basePath: baseRoutePath !== void 0 ? mergePath(this._basePath, baseRoutePath) : this._basePath,\n      path,\n      method,\n      handler\n    };\n    this.router.add(method, path, [handler, r]);\n    this.routes.push(r);\n  }\n  #handleError(err, c) {\n    if (err instanceof Error) {\n      return this.errorHandler(err, c);\n    }\n    throw err;\n  }\n  #dispatch(request, executionCtx, env, method) {\n    if (method === \"HEAD\") {\n      return (async () => new Response(null, await this.#dispatch(request, executionCtx, env, \"GET\")))();\n    }\n    const path = this.getPath(request, { env });\n    const matchResult = this.router.match(method, path);\n    const c = new Context(request, {\n      path,\n      matchResult,\n      env,\n      executionCtx,\n      notFoundHandler: this.#notFoundHandler\n    });\n    if (matchResult[0].length === 1) {\n      let res;\n      try {\n        res = matchResult[0][0][0][0](c, async () => {\n          c.res = await this.#notFoundHandler(c);\n        });\n      } catch (err) {\n        return this.#handleError(err, c);\n      }\n      return res instanceof Promise ? res.then(\n        (resolved) => resolved || (c.finalized ? c.res : this.#notFoundHandler(c))\n      ).catch((err) => this.#handleError(err, c)) : res ?? this.#notFoundHandler(c);\n    }\n    const composed = compose(matchResult[0], this.errorHandler, this.#notFoundHandler);\n    return (async () => {\n      try {\n        const context = await composed(c);\n        if (!context.finalized) {\n          throw new Error(\n            \"Context is not finalized. Did you forget to return a Response object or `await next()`?\"\n          );\n        }\n        return context.res;\n      } catch (err) {\n        return this.#handleError(err, c);\n      }\n    })();\n  }\n  /**\n   * `.fetch()` will be entry point of your app.\n   *\n   * @see {@link https://hono.dev/docs/api/hono#fetch}\n   *\n   * @param {Request} request - request Object of request\n   * @param {Env} env - env Object\n   * @param {ExecutionContext} executionCtx - context of execution\n   * @returns {Response | Promise<Response>} response of request\n   *\n   */\n  fetch = (request, ...rest) => {\n    return this.#dispatch(request, rest[1], rest[0], request.method);\n  };\n  /**\n   * `.request()` is a useful method for testing.\n   * You can pass a URL or pathname to send a GET request.\n   * app will return a Response object.\n   * ```ts\n   * test('GET /hello is ok', async () => {\n   *   const res = await app.request('/hello')\n   *   expect(res.status).toBe(200)\n   * })\n   * ```\n   * @see https://hono.dev/docs/api/hono#request\n   */\n  request = (input, requestInit, Env, executionCtx) => {\n    if (input instanceof Request) {\n      return this.fetch(requestInit ? new Request(input, requestInit) : input, Env, executionCtx);\n    }\n    input = input.toString();\n    return this.fetch(\n      new Request(\n        /^https?:\\/\\//.test(input) ? input : `http://localhost${mergePath(\"/\", input)}`,\n        requestInit\n      ),\n      Env,\n      executionCtx\n    );\n  };\n  /**\n   * `.fire()` automatically adds a global fetch event listener.\n   * This can be useful for environments that adhere to the Service Worker API, such as non-ES module Cloudflare Workers.\n   * @deprecated\n   * Use `fire` from `hono/service-worker` instead.\n   * ```ts\n   * import { Hono } from 'hono'\n   * import { fire } from 'hono/service-worker'\n   *\n   * const app = new Hono()\n   * // ...\n   * fire(app)\n   * ```\n   * @see https://hono.dev/docs/api/hono#fire\n   * @see https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API\n   * @see https://developers.cloudflare.com/workers/reference/migrate-to-module-workers/\n   */\n  fire = () => {\n    addEventListener(\"fetch\", (event) => {\n      event.respondWith(this.#dispatch(event.request, event, void 0, event.request.method));\n    });\n  };\n};\nexport {\n  Hono as HonoBase\n};\n","// src/router/utils.ts\nvar createNullObject = () => /* @__PURE__ */ Object.create(null);\nexport {\n  createNullObject\n};\n","// src/router/reg-exp-router/matcher.ts\nimport { METHOD_NAME_ALL } from \"../../router.js\";\nvar emptyParam = [];\nfunction match(method, path) {\n  const matchers = this.buildAllMatchers();\n  const match2 = ((method2, path2) => {\n    const matcher = matchers[method2] || matchers[METHOD_NAME_ALL];\n    const staticMatch = matcher[2][path2];\n    if (staticMatch) {\n      return staticMatch;\n    }\n    const match3 = path2.match(matcher[0]);\n    if (!match3) {\n      return [[], emptyParam];\n    }\n    const index = match3.indexOf(\"\", 1);\n    return [matcher[1][index], match3];\n  });\n  this.match = match2;\n  return match2(method, path);\n}\nexport {\n  emptyParam,\n  match\n};\n","// src/router/reg-exp-router/node.ts\nimport { createNullObject } from \"../utils.js\";\nvar LABEL_REG_EXP_STR = \"[^/]+\";\nvar ONLY_WILDCARD_REG_EXP_STR = \".*\";\nvar TAIL_WILDCARD_REG_EXP_STR = \"(?:|/.*)\";\nvar PATH_ERROR = /* @__PURE__ */ Symbol();\nvar regExpMetaChars = new Set(\".\\\\+*[^]$()\");\nfunction compareKey(a, b) {\n  if (a.length === 1) {\n    return b.length === 1 ? a < b ? -1 : 1 : -1;\n  }\n  if (b.length === 1) {\n    return 1;\n  }\n  if (a === ONLY_WILDCARD_REG_EXP_STR || a === TAIL_WILDCARD_REG_EXP_STR) {\n    return b === TAIL_WILDCARD_REG_EXP_STR ? -1 : 1;\n  } else if (b === ONLY_WILDCARD_REG_EXP_STR || b === TAIL_WILDCARD_REG_EXP_STR) {\n    return -1;\n  }\n  if (a === LABEL_REG_EXP_STR) {\n    return 1;\n  } else if (b === LABEL_REG_EXP_STR) {\n    return -1;\n  }\n  return a.length === b.length ? a < b ? -1 : 1 : b.length - a.length;\n}\nvar Node = class _Node {\n  // handler index of a dynamic path, or -1 for a static path terminal\n  #index;\n  #varIndex;\n  #children = createNullObject();\n  insert(tokens, index, paramMap, context, isStatic) {\n    let node = this;\n    for (let i = 0, len = tokens.length; i < len; i++) {\n      const token = tokens[i];\n      const pattern = token.length === 1 ? token === \"*\" ? i === len - 1 ? [\"\", \"\", ONLY_WILDCARD_REG_EXP_STR] : [\"\", \"\", LABEL_REG_EXP_STR] : null : token === \"/*\" ? [\"\", \"\", TAIL_WILDCARD_REG_EXP_STR] : token.match(/^\\:([^\\{\\}]+)(?:\\{(.+)\\})?$/);\n      let nextNode;\n      if (pattern) {\n        const name = pattern[1];\n        let regexpStr = pattern[2] || LABEL_REG_EXP_STR;\n        if (name && pattern[2]) {\n          if (regexpStr === \".*\") {\n            throw PATH_ERROR;\n          }\n          regexpStr = regexpStr.replace(/^\\((?!\\?:)(?=[^)]+\\)$)/, \"(?:\");\n          if (/\\((?!\\?:)/.test(regexpStr)) {\n            throw PATH_ERROR;\n          }\n          if (regexpStr.length === 1 && regExpMetaChars.has(regexpStr)) {\n            throw PATH_ERROR;\n          }\n        }\n        nextNode = node.#children[regexpStr];\n        if (!nextNode) {\n          if (regexpStr !== ONLY_WILDCARD_REG_EXP_STR && regexpStr !== TAIL_WILDCARD_REG_EXP_STR) {\n            for (const k in node.#children) {\n              if (\n                // a single-char pattern coexists with single-char literals as a literal does\n                (regexpStr.length > 1 || k.length > 1) && k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR\n              ) {\n                throw PATH_ERROR;\n              }\n            }\n          }\n          nextNode = node.#children[regexpStr] = new _Node();\n        }\n        if (name !== \"\") {\n          nextNode.#varIndex ??= context.varIndex++;\n          paramMap.push([name, nextNode.#varIndex]);\n        }\n      } else {\n        nextNode = node.#children[token];\n        if (!nextNode) {\n          for (const k in node.#children) {\n            if (k.length > 1 && k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR) {\n              throw PATH_ERROR;\n            }\n          }\n          nextNode = node.#children[token] = new _Node();\n        }\n      }\n      node = nextNode;\n    }\n    if (node.#index !== void 0) {\n      throw PATH_ERROR;\n    }\n    node.#index = isStatic ? -1 : index;\n  }\n  buildRegExpStr() {\n    const childKeys = Object.keys(this.#children).sort(compareKey);\n    const strList = childKeys.map((k) => {\n      const c = this.#children[k];\n      const childStr = c.buildRegExpStr();\n      return childStr === \"\" ? \"\" : (typeof c.#varIndex === \"number\" ? `(${k})@${c.#varIndex}` : regExpMetaChars.has(k) ? `\\\\${k}` : k) + childStr;\n    }).filter(Boolean);\n    if (typeof this.#index === \"number\" && this.#index !== -1) {\n      strList.unshift(`#${this.#index}`);\n    }\n    if (strList.length === 0) {\n      return \"\";\n    }\n    if (strList.length === 1) {\n      return strList[0];\n    }\n    return \"(?:\" + strList.join(\"|\") + \")\";\n  }\n};\nexport {\n  LABEL_REG_EXP_STR,\n  Node,\n  ONLY_WILDCARD_REG_EXP_STR,\n  PATH_ERROR,\n  TAIL_WILDCARD_REG_EXP_STR\n};\n","// src/router/reg-exp-router/trie.ts\nimport { createNullObject } from \"../utils.js\";\nimport { Node } from \"./node.js\";\nvar Trie = class {\n  #context = { varIndex: 0 };\n  #root = new Node();\n  #index = 0;\n  // dynamic path -> [handler index, param assoc]; static paths are not registered\n  paths = createNullObject();\n  insert(path, isStatic) {\n    if (isStatic) {\n      this.#root.insert(path.split(\"\"), 0, [], this.#context, true);\n      return;\n    }\n    const paramAssoc = [];\n    const groups = [];\n    let markedPath = path;\n    for (let i = 0; ; ) {\n      let replaced = false;\n      markedPath = markedPath.replace(/\\{[^}]+\\}/g, (m) => {\n        const mark = `@\\\\${i}`;\n        groups[i] = [mark, m];\n        i++;\n        replaced = true;\n        return mark;\n      });\n      if (!replaced) {\n        break;\n      }\n    }\n    const tokens = markedPath.match(/(?::[^\\/]+)|(?:\\/\\*$)|./g) || [];\n    for (let i = groups.length - 1; i >= 0; i--) {\n      const [mark] = groups[i];\n      for (let j = tokens.length - 1; j >= 0; j--) {\n        if (tokens[j].indexOf(mark) !== -1) {\n          tokens[j] = tokens[j].replace(mark, groups[i][1]);\n          break;\n        }\n      }\n    }\n    this.#root.insert(tokens, this.#index, paramAssoc, this.#context, false);\n    this.paths[path] = [this.#index++, paramAssoc];\n  }\n  buildRegExp() {\n    let regexp = this.#root.buildRegExpStr();\n    if (regexp === \"\") {\n      return [/^$/, [], []];\n    }\n    let captureIndex = 0;\n    const indexReplacementMap = [];\n    const paramReplacementMap = [];\n    regexp = regexp.replace(/#(\\d+)|@(\\d+)|\\.\\*\\$/g, (_, handlerIndex, paramIndex) => {\n      if (handlerIndex !== void 0) {\n        indexReplacementMap[++captureIndex] = Number(handlerIndex);\n        return \"$()\";\n      }\n      if (paramIndex !== void 0) {\n        paramReplacementMap[Number(paramIndex)] = ++captureIndex;\n        return \"\";\n      }\n      return \"\";\n    });\n    return [new RegExp(`^${regexp}`), indexReplacementMap, paramReplacementMap];\n  }\n};\nexport {\n  Trie\n};\n","// src/router/reg-exp-router/router.ts\nimport {\n  MESSAGE_MATCHER_IS_ALREADY_BUILT,\n  METHOD_NAME_ALL,\n  UnsupportedPathError\n} from \"../../router.js\";\nimport { checkOptionalParameter } from \"../../utils/url.js\";\nimport { createNullObject } from \"../utils.js\";\nimport { match, emptyParam } from \"./matcher.js\";\nimport {\n  LABEL_REG_EXP_STR,\n  ONLY_WILDCARD_REG_EXP_STR,\n  PATH_ERROR,\n  TAIL_WILDCARD_REG_EXP_STR\n} from \"./node.js\";\nimport { Trie } from \"./trie.js\";\nvar wildcardRegExpCache = createNullObject();\nfunction buildWildcardRegExp(path) {\n  return wildcardRegExpCache[path] ??= new RegExp(\n    `^${path.replace(\n      /\\/:[^/{}]+(?:\\{\\[\\^\\/]\\+})?(?=[/{]|$)|\\/?\\*$|([.\\\\+*[^\\]$()?{}|])/g,\n      (match2, metaChar) => metaChar ? `\\\\${metaChar}` : match2 === \"/*\" ? TAIL_WILDCARD_REG_EXP_STR : match2 === \"*\" ? ONLY_WILDCARD_REG_EXP_STR : `/:${LABEL_REG_EXP_STR}`\n    )}$`\n  );\n}\nfunction findMiddleware(middleware, path) {\n  for (const k of Object.keys(middleware).sort((a, b) => b.length - a.length)) {\n    if (buildWildcardRegExp(k).test(path)) {\n      return [...middleware[k]];\n    }\n  }\n  return void 0;\n}\nvar RegExpRouter = class {\n  name = \"RegExpRouter\";\n  #middleware;\n  #routes;\n  #tries;\n  constructor() {\n    this.#middleware = { [METHOD_NAME_ALL]: createNullObject() };\n    this.#routes = { [METHOD_NAME_ALL]: createNullObject() };\n    this.#tries = { [METHOD_NAME_ALL]: new Trie() };\n  }\n  #insertPath(method, path) {\n    try {\n      this.#tries[method].insert(path, !/\\*|\\/:/.test(path));\n    } catch (e) {\n      throw e === PATH_ERROR ? new UnsupportedPathError(path) : e;\n    }\n  }\n  add(method, path, handler) {\n    const middleware = this.#middleware;\n    const routes = this.#routes;\n    if (!middleware) {\n      throw new Error(MESSAGE_MATCHER_IS_ALREADY_BUILT);\n    }\n    if (!middleware[method]) {\n      this.#tries[method] = new Trie();\n      for (const handlerMap of [middleware, routes]) {\n        handlerMap[method] = createNullObject();\n        for (const p in handlerMap[METHOD_NAME_ALL]) {\n          handlerMap[method][p] = [...handlerMap[METHOD_NAME_ALL][p]];\n          this.#insertPath(method, p);\n        }\n      }\n    }\n    if (path === \"/*\") {\n      path = \"*\";\n    }\n    const methods = method === METHOD_NAME_ALL ? Object.keys(middleware) : [method];\n    if (/\\*$/.test(path)) {\n      const re = buildWildcardRegExp(path);\n      for (const m of methods) {\n        if (!middleware[m][path]) {\n          this.#insertPath(m, path);\n          middleware[m][path] = findMiddleware(middleware[m], path) || findMiddleware(middleware[METHOD_NAME_ALL], path) || [];\n        }\n      }\n      for (const handlerMap of [middleware, routes]) {\n        for (const m of methods) {\n          for (const p in handlerMap[m]) {\n            re.test(p) && handlerMap[m][p].push([handler, path]);\n          }\n        }\n      }\n      return;\n    }\n    const paths = checkOptionalParameter(path) || [path];\n    for (const path2 of paths) {\n      for (const m of methods) {\n        if (!routes[m][path2]) {\n          this.#insertPath(m, path2);\n          routes[m][path2] = findMiddleware(middleware[m], path2) || findMiddleware(middleware[METHOD_NAME_ALL], path2) || [];\n        }\n        routes[m][path2].push([handler, path2]);\n      }\n    }\n  }\n  match = match;\n  buildAllMatchers() {\n    const matchers = createNullObject();\n    for (const method of Object.keys(this.#routes)) {\n      matchers[method] = this.#buildMatcher(method);\n    }\n    this.#middleware = this.#routes = this.#tries = void 0;\n    wildcardRegExpCache = createNullObject();\n    return matchers;\n  }\n  #buildMatcher(method) {\n    const middleware = this.#middleware[method];\n    const routes = this.#routes[method];\n    const trie = this.#tries[method];\n    const staticMap = createNullObject();\n    const handlerData = [];\n    const [regexp, indexReplacementMap, paramReplacementMap] = trie.buildRegExp();\n    for (const r of [middleware, routes]) {\n      for (const path in r) {\n        const handlers = r[path];\n        const pathData = trie.paths[path];\n        if (!pathData) {\n          staticMap[path] = [handlers.map(([h]) => [h, createNullObject()]), emptyParam];\n          continue;\n        }\n        handlerData[pathData[0]] = handlers.map(([h, handlerPath]) => [\n          h,\n          trie.paths[handlerPath][1].reduceRight((map, [key], i) => {\n            map[key] = paramReplacementMap[pathData[1][i][1]];\n            return map;\n          }, createNullObject())\n        ]);\n      }\n    }\n    return [regexp, indexReplacementMap.map((i) => handlerData[i]), staticMap];\n  }\n};\nexport {\n  RegExpRouter\n};\n","// src/router/smart-router/router.ts\nimport { MESSAGE_MATCHER_IS_ALREADY_BUILT, UnsupportedPathError } from \"../../router.js\";\nvar SmartRouter = class {\n  name = \"SmartRouter\";\n  #routers = [];\n  #routes = [];\n  constructor(init) {\n    this.#routers = init.routers;\n  }\n  add(method, path, handler) {\n    if (!this.#routes) {\n      throw new Error(MESSAGE_MATCHER_IS_ALREADY_BUILT);\n    }\n    this.#routes.push([method, path, handler]);\n  }\n  match(method, path) {\n    if (!this.#routes) {\n      throw new Error(\"Fatal error\");\n    }\n    const routers = this.#routers;\n    const routes = this.#routes;\n    const len = routers.length;\n    let i = 0;\n    let res;\n    for (; i < len; i++) {\n      const router = routers[i];\n      try {\n        for (let i2 = 0, len2 = routes.length; i2 < len2; i2++) {\n          router.add(...routes[i2]);\n        }\n        res = router.match(method, path);\n      } catch (e) {\n        if (e instanceof UnsupportedPathError) {\n          continue;\n        }\n        throw e;\n      }\n      this.match = router.match.bind(router);\n      this.#routers = [router];\n      this.#routes = void 0;\n      break;\n    }\n    if (i === len) {\n      throw new Error(\"Fatal error\");\n    }\n    this.name = `SmartRouter + ${this.activeRouter.name}`;\n    return res;\n  }\n  get activeRouter() {\n    if (this.#routes || this.#routers.length !== 1) {\n      throw new Error(\"No active router has been determined yet.\");\n    }\n    return this.#routers[0];\n  }\n};\nexport {\n  SmartRouter\n};\n","// src/router/trie-router/node.ts\nimport { METHOD_NAME_ALL } from \"../../router.js\";\nimport { getPattern, splitPath, splitRoutingPath } from \"../../utils/url.js\";\nimport { createNullObject } from \"../utils.js\";\nvar emptyParams = createNullObject();\nvar order = 0;\nvar Node = class _Node {\n  #methods = [];\n  #children = createNullObject();\n  #patterns = [];\n  #pattern;\n  #params = emptyParams;\n  insert(method, path, handler) {\n    let curNode = this;\n    const parts = splitRoutingPath(path);\n    const possibleKeys = /* @__PURE__ */ new Set();\n    let i = 0;\n    for (const p of parts) {\n      const nextP = parts[++i];\n      const pattern = getPattern(p, nextP) || (nextP === void 0 && p && p.indexOf(\"*\") === p.length - 1 ? p : null);\n      const isParam = Array.isArray(pattern);\n      const key = isParam ? pattern[0] : pattern || p;\n      const child = curNode.#children[key] ||= new _Node();\n      if (pattern && !child.#pattern) {\n        child.#pattern = pattern;\n        curNode.#patterns.push(child);\n      }\n      curNode = child;\n      if (isParam) {\n        possibleKeys.add(pattern[1]);\n      }\n    }\n    curNode.#methods.push({\n      [method]: {\n        handler,\n        possibleKeys: [...possibleKeys],\n        score: ++order\n      }\n    });\n  }\n  #pushHandlerSets(handlerSets, node, method, nodeParams, params) {\n    for (let i = 0, len = node.#methods.length; i < len; i++) {\n      const m = node.#methods[i];\n      const handlerSet = m[method] || m[METHOD_NAME_ALL];\n      if (handlerSet) {\n        handlerSet.params = createNullObject();\n        handlerSets.push(handlerSet);\n        for (let i2 = 0, len2 = handlerSet.possibleKeys.length; i2 < len2; i2++) {\n          const key = handlerSet.possibleKeys[i2];\n          handlerSet.params[key] = params?.[key] && !i2 ? params[key] : nodeParams[key] ?? params?.[key];\n        }\n      }\n    }\n  }\n  search(method, path) {\n    const handlerSets = [];\n    this.#params = emptyParams;\n    const curNode = this;\n    let curNodes = [curNode];\n    const parts = splitPath(path);\n    const curNodesQueue = [];\n    const len = parts.length;\n    let partOffsets = null;\n    for (let i = 0; i < len; i++) {\n      const part = parts[i];\n      const isLast = i === len - 1;\n      const tempNodes = [];\n      for (let j = 0, len2 = curNodes.length; j < len2; j++) {\n        const node = curNodes[j];\n        const nextNode = node.#children[part];\n        if (nextNode) {\n          nextNode.#params = node.#params;\n          if (isLast) {\n            if (nextNode.#children[\"*\"]) {\n              this.#pushHandlerSets(handlerSets, nextNode.#children[\"*\"], method, node.#params);\n            }\n            this.#pushHandlerSets(handlerSets, nextNode, method, node.#params);\n          } else {\n            tempNodes.push(nextNode);\n          }\n        }\n        for (const child of node.#patterns) {\n          const pattern = child.#pattern;\n          const params = node.#params === emptyParams ? {} : { ...node.#params };\n          if (typeof pattern === \"string\") {\n            if (pattern === \"*\" || part.startsWith(pattern.slice(0, -1))) {\n              this.#pushHandlerSets(handlerSets, child, method, node.#params);\n              if (pattern === \"*\") {\n                child.#params = params;\n                tempNodes.push(child);\n              }\n            }\n            continue;\n          }\n          const [, name, matcher] = pattern;\n          if (!part && matcher === true) {\n            continue;\n          }\n          if (matcher !== true) {\n            if (!partOffsets) {\n              partOffsets = [];\n              let offset = path[0] === \"/\" ? 1 : 0;\n              for (let p = 0; p < len; p++) {\n                partOffsets[p] = offset;\n                offset += parts[p].length + 1;\n              }\n            }\n            const restPathString = path.slice(partOffsets[i]);\n            const m = matcher.exec(restPathString);\n            if (m) {\n              params[name] = m[0];\n              this.#pushHandlerSets(handlerSets, child, method, node.#params, params);\n              if (m[0].length === restPathString.length && child.#children[\"*\"]) {\n                this.#pushHandlerSets(\n                  handlerSets,\n                  child.#children[\"*\"],\n                  method,\n                  node.#params,\n                  params\n                );\n              }\n              for (const _ in child.#children) {\n                child.#params = params;\n                const componentCount = m[0].match(/\\//g)?.length ?? 0;\n                const targetCurNodes = curNodesQueue[componentCount] ||= [];\n                targetCurNodes.push(child);\n                break;\n              }\n              continue;\n            }\n          }\n          if (matcher === true || matcher.test(part)) {\n            params[name] = part;\n            if (isLast) {\n              this.#pushHandlerSets(handlerSets, child, method, params, node.#params);\n              if (child.#children[\"*\"]) {\n                this.#pushHandlerSets(\n                  handlerSets,\n                  child.#children[\"*\"],\n                  method,\n                  params,\n                  node.#params\n                );\n              }\n            } else {\n              child.#params = params;\n              tempNodes.push(child);\n            }\n          }\n        }\n      }\n      const shifted = curNodesQueue.shift();\n      curNodes = shifted ? tempNodes.concat(shifted) : tempNodes;\n    }\n    if (handlerSets[1]) {\n      handlerSets.sort((a, b) => {\n        return a.score - b.score;\n      });\n    }\n    return [handlerSets.map(({ handler, params }) => [handler, params])];\n  }\n};\nexport {\n  Node\n};\n","// src/router/trie-router/router.ts\nimport { checkOptionalParameter } from \"../../utils/url.js\";\nimport { Node } from \"./node.js\";\nvar TrieRouter = class {\n  name = \"TrieRouter\";\n  #node = new Node();\n  add(method, path, handler) {\n    for (const result of checkOptionalParameter(path) || [path]) {\n      this.#node.insert(method, result, handler);\n    }\n  }\n  match(method, path) {\n    return this.#node.search(method, path);\n  }\n};\nexport {\n  TrieRouter\n};\n","// src/hono.ts\nimport { HonoBase } from \"./hono-base.js\";\nimport { RegExpRouter } from \"./router/reg-exp-router/index.js\";\nimport { SmartRouter } from \"./router/smart-router/index.js\";\nimport { TrieRouter } from \"./router/trie-router/index.js\";\nvar Hono = class extends HonoBase {\n  /**\n   * Creates an instance of the Hono class.\n   *\n   * @param options - Optional configuration options for the Hono instance.\n   */\n  constructor(options = {}) {\n    super(options);\n    this.router = options.router ?? new SmartRouter({\n      routers: [new RegExpRouter(), new TrieRouter()]\n    });\n  }\n};\nexport {\n  Hono\n};\n","import type { HttpBindings } from \"@hono/node-server\";\nimport { Hono } from \"hono\";\nimport type { UpgradeWebSocket } from \"hono/ws\";\nimport type { ServerResponse } from \"http\";\nimport type { WebSocket } from \"ws\";\nimport type { E2eeContext } from \"../e2ee/context\";\nimport { getLogger } from \"../logger\";\nimport type { Principal } from \"../services/security/capabilities\";\nimport { authMiddleware } from \"./middleware/auth.middleware\";\nimport { corsMiddleware } from \"./middleware/cors.middleware\";\nimport { e2eeEnvelopeMiddleware } from \"./middleware/e2ee-envelope.middleware\";\nimport { errorMiddleware } from \"./middleware/error.middleware\";\nimport { createBackupRoutes } from \"./routes/backup.routes\";\nimport { createBrowseRoutes } from \"./routes/browse.routes\";\nimport { createCacheAlertRoutes } from \"./routes/cacheAlert.routes\";\nimport { createConfigRoutes } from \"./routes/config.routes\";\nimport { createConversationRoutes } from \"./routes/conversations.routes\";\nimport { createDeviceRoutes } from \"./routes/devices.routes\";\nimport { createDiagnosticsRoutes } from \"./routes/diagnostics.routes\";\nimport { createE2eeRoutes } from \"./routes/e2ee.routes\";\nimport { createHealthRoutes } from \"./routes/health.routes\";\nimport { createLogsRoutes } from \"./routes/logs.routes\";\nimport { createMiscRoutes } from \"./routes/misc.routes\";\nimport { createPairRoutes } from \"./routes/pair.routes\";\nimport { createProgressRoutes } from \"./routes/progress.routes\";\nimport { createProjectRoutes } from \"./routes/projects.routes\";\nimport { createProviderRoutes } from \"./routes/providers.routes\";\nimport { createScannerRoutes } from \"./routes/scanner.routes\";\nimport { createSessionRoutes } from \"./routes/sessions.routes\";\nimport { createWsRoutes } from \"./routes/ws.routes\";\nimport type { ApiDeps } from \"./types/api-deps\";\n\nexport type AppEnv = {\n  Bindings: HttpBindings;\n  Variables: {\n    requestId?: string;\n    validatedBody?: unknown;\n    validatedQuery?: unknown;\n    /** Who is making this request (C5). Set by authMiddleware. */\n    principal?: Principal;\n    /**\n     * The E2EE context this request authenticated under, if any.\n     *\n     * **ONE declaration, deliberately, for two setters.** W1b's `/ws` upgrade\n     * and X-server's REST unseal both need this field, and both branches added\n     * it independently; two declarations of the same optional key merge in\n     * TypeScript and compile, right up until the two comments disagree about\n     * what the field means. Set by `authMiddleware` when a `/ws` upgrade\n     * presents a live ticket and read by the WebSocket route; set by\n     * `e2eeEnvelopeMiddleware` when a REST request unseals under `X-TB-Ctx`.\n     *\n     * It is here rather than in a module-level map because the setter and the\n     * reader are separated by an `await` — a shared variable would let two\n     * concurrent upgrades swap contexts.\n     *\n     * Absent on every plaintext request, which is what `refuseUnsealedIfPinned`\n     * reads as \"this request was not sealed\".\n     */\n    e2eeContext?: E2eeContext;\n  };\n};\n\n/** Routes that write to `c.env.outgoing` themselves return this sentinel. */\nconst ALREADY_HANDLED = 597;\n\n/**\n * Query parameters whose value is reduced REGARDLESS of its shape.\n *\n * The numeric rule below is a heuristic — it keeps pagination readable — and a\n * heuristic is the wrong thing to protect a credential with. `?ticket=` was\n * covered only by the accident that a base64url ticket is essentially never all\n * digits, and \"essentially never\" is exactly the probability-instead-of-\n * invariant argument the nonce design rejects (NONCE-DESIGN §10):\n *\n *     summarizeQuery({ ticket: \"Xk9_2bQz-aR4\" })   →  ticket=_\n *     summarizeQuery({ ticket: \"84719203847192\" })  →  ticket=84719203847192\n *\n * Listing the keys instead protects `?key=` and every future secret-bearing\n * parameter rather than one generator's alphabet. Matched case-insensitively so\n * a `?apiKey=` cannot slip past on capitalisation.\n */\nconst SENSITIVE_QUERY_KEYS = new Set([\"ticket\", \"key\", \"token\", \"apikey\", \"api_key\"]);\n\n/**\n * The query string with only its numeric values kept.\n *\n * Pagination is the thing the log needs to show (`limit`, `offset`,\n * `before_index`, `msg_limit`), and those are numbers. Everything else —\n * `?path=/Users/...`, ids, search terms — is a value we deliberately do not\n * log, so the key is kept and the value is dropped. Returns undefined for a\n * bare path so the field stays absent rather than empty.\n *\n * Deliberately NOT blanket numeric redaction: `limit=50` must keep logging its\n * value, or the fix costs the diagnostics this field exists for.\n */\nexport function summarizeQuery(query: Record<string, string>): string | undefined {\n  const keys = Object.keys(query).sort();\n  if (keys.length === 0) return undefined;\n  return keys\n    .map((k) => {\n      const keep = !SENSITIVE_QUERY_KEYS.has(k.toLowerCase()) && /^-?\\d+$/.test(query[k]);\n      return `${k}=${keep ? query[k] : \"_\"}`;\n    })\n    .join(\"&\");\n}\n\n/**\n * Count the bytes a handler writes straight to the Node response.\n *\n * There is no Content-Length to read: the direct-write handlers stream JSON\n * into `c.env.outgoing` and Node uses chunked encoding. Patching write/end for\n * the life of the request is the only place the size is observable.\n */\nfunction countResponseBytes(res: ServerResponse): () => number {\n  let bytes = 0;\n  const add = (chunk: unknown) => {\n    if (typeof chunk === \"string\") bytes += Buffer.byteLength(chunk);\n    else if (chunk instanceof Uint8Array) bytes += chunk.byteLength;\n  };\n  const write = res.write as (...args: unknown[]) => boolean;\n  const end = res.end as (...args: unknown[]) => ServerResponse;\n  res.write = function (this: ServerResponse, ...args: unknown[]) {\n    add(args[0]);\n    return write.apply(this, args);\n  } as typeof res.write;\n  res.end = function (this: ServerResponse, ...args: unknown[]) {\n    add(args[0]);\n    return end.apply(this, args);\n  } as typeof res.end;\n  return () => bytes;\n}\n\nexport const createHonoApp = (deps: ApiDeps, upgradeWebSocket?: UpgradeWebSocket<WebSocket>) => {\n  const app = new Hono<AppEnv>();\n  const httpLog = getLogger(\"http\");\n\n  app.use(\"*\", async (c, next) => {\n    const start = Date.now();\n    const ua = c.req.header(\"user-agent\") ?? \"\";\n    // Absent only when the app is driven by Hono's test client rather than\n    // served over Node; the request must still be logged, minus the size.\n    const outgoing = c.env?.outgoing as ServerResponse | undefined;\n    const bytesWritten = outgoing && countResponseBytes(outgoing);\n    await next();\n    const ms = Date.now() - start;\n    // A direct-write route's Hono status is the 597 sentinel, not the status\n    // the client got — which is why 96% of these lines used to read `→ 597`.\n    // The real one is on the Node response the handler wrote to.\n    const handled = c.res.status === ALREADY_HANDLED && outgoing !== undefined;\n    const status = handled ? (outgoing as ServerResponse).statusCode : c.res.status;\n    // Drop the menubar's healthy poll, and only that. GET /healthz every 5s is\n    // the app's sole request (vendor/menubar src/renderer/renderer.js), so at\n    // the measured 285B per line it is ~17 280 lines ≈ 4.9MB/day — roughly 5×\n    // the rate of everything else this log records, against a 32MB cap that\n    // log-cap.ts only applies at a --prod boot. Until this predicate carried a\n    // path and a status it dropped EVERY menubar request: a menubar 401/404/500\n    // left no trace at all, which is invisible to exactly the log archaeology\n    // that finds bugs like the /api/conversations 404s (#778).\n    if (\n      !deps.logMenubarRequests &&\n      c.req.header(\"x-client\") === \"menubar\" &&\n      c.req.path === \"/healthz\" &&\n      status < 400\n    ) {\n      return;\n    }\n    const qs = summarizeQuery(c.req.query());\n    // Only the direct-write path has finished writing by now; a Hono-piped\n    // response is serialized after this middleware returns, so its size is not\n    // knowable here. Omit the field rather than log a confident 0.\n    const bytes = handled && bytesWritten ? bytesWritten() : undefined;\n    httpLog.info(`[req] ${c.req.method} ${c.req.path} → ${status} ${ms}ms`, {\n      method: c.req.method,\n      path: c.req.path,\n      status,\n      ms,\n      ua,\n      ...(qs ? { qs } : {}),\n      ...(bytes === undefined ? {} : { bytes }),\n      event: \"http.request\",\n    });\n  });\n  app.use(\"*\", corsMiddleware(deps.browserCors));\n  // AFTER cors, BEFORE auth. A preflight must be answerable without a context,\n  // and D-9 puts the unseal ahead of authentication so the credential travels\n  // sealed rather than in a plaintext header on every request.\n  app.use(\"*\", e2eeEnvelopeMiddleware(deps));\n  app.use(\"*\", authMiddleware(deps));\n  app.onError(errorMiddleware);\n\n  app.route(\"/healthz\", createHealthRoutes(deps));\n  app.route(\"/api/diagnostics\", createDiagnosticsRoutes(deps));\n  app.route(\"/\", createMiscRoutes(deps));\n  app.route(\"/api/sessions\", createSessionRoutes(deps));\n  app.route(\"/api/conversations\", createConversationRoutes(deps));\n  app.route(\"/api/cache/alert\", createCacheAlertRoutes(deps));\n  app.route(\"/api/config\", createConfigRoutes(deps));\n  app.route(\"/api/projects\", createProjectRoutes(deps));\n  app.route(\"/api/providers\", createProviderRoutes());\n  app.route(\"/api/devices\", createDeviceRoutes(deps));\n  app.route(\"/api/backup\", createBackupRoutes(deps));\n  app.route(\"/api/pair\", createPairRoutes(deps));\n  app.route(\"/api/e2ee\", createE2eeRoutes(deps));\n  app.route(\"/api\", createBrowseRoutes(deps));\n  app.route(\"/\", createScannerRoutes(deps));\n  app.route(\"/internal\", createProgressRoutes(deps));\n  app.route(\"/api/logs\", createLogsRoutes());\n\n  if (upgradeWebSocket) {\n    app.route(\"/\", createWsRoutes(deps, upgradeWebSocket));\n  }\n\n  return app;\n};\n","import type { MiddlewareHandler } from \"hono\";\nimport { validateApiKey } from \"../../auth\";\nimport { parseCapabilities } from \"../../db/repositories/devices.repository\";\nimport {\n  authenticateContext,\n  contextRegistry,\n  E2EE_WS_SUBPROTOCOL,\n  parseSubprotocols,\n  refuseUnsealedIfPinned,\n  TICKET_HEADER,\n  TICKET_SUBPROTOCOL_PREFIX,\n} from \"../../e2ee/context\";\nimport { E2EE_DEVICE_REVOKED } from \"../../e2ee/protocol\";\nimport { getLogger } from \"../../logger\";\nimport {\n  hasCapability,\n  legacyPrincipal,\n  type Principal,\n  requiredCapability,\n} from \"../../services/security/capabilities\";\nimport type { AppEnv } from \"../app\";\nimport type { ApiDeps } from \"../types/api-deps\";\n\nconst log = getLogger(\"e2ee\");\n\n/** The one path a WebSocket ticket authenticates. */\nconst WS_PATH = \"/ws\";\n\nfunction isLocalRequest(remoteAddr: string | undefined): boolean {\n  const addr = remoteAddr ?? \"\";\n  return addr === \"127.0.0.1\" || addr === \"::1\" || addr === \"::ffff:127.0.0.1\";\n}\n\n// `/healthz` is open to LOCAL callers only — the menubar poll, the deploy\n// healthcheck and the updater's restart probe all hit\n// `http://127.0.0.1:8766/healthz` with no credential and must keep working.\n// `remoteAddress` cannot separate those from an external probe: behind the\n// Cloudflare tunnel every request arrives from 127.0.0.1 and the streamer reads\n// no forwarded-IP header (see `e2ee.routes.ts` §8). But cloudflared injects\n// `Cf-Connecting-Ip` on every request it proxies, and a genuine loopback caller\n// sets none — so the header's PRESENCE is the \"came through the tunnel\" signal.\n// A tunneled `/healthz` therefore falls through to the same key/e2ee gate as\n// every other route (encrypted context, Bearer, or `?key=`), while a local one\n// stays open. An external probe cannot strip the header (cloudflared adds it at\n// its own edge), and a local process forging it only denies its own `/healthz`\n// — never a bypass.\nconst HEALTHZ_PATH = \"/healthz\";\nconst CF_TUNNEL_HEADER = \"cf-connecting-ip\";\n// Localhost-only unauthenticated paths (menubar logs viewer).\nconst LOCAL_ONLY_PATHS = new Set([\"/api/logs\", \"/api/logs/meta\"]);\n// /api/__update uses HMAC signature auth instead of Bearer; skip the\n// Bearer-token middleware so the route handler can validate the signature.\n// /api/e2ee/open is public for the same reason /api/pair/exchange is: the\n// handshake IS the authentication, and the credential the middleware would look\n// for only exists inside it (design.md §3.5, NONCE-DESIGN §10).\nconst PUBLIC_POST_PATHS = new Set([\"/api/pair/exchange\", \"/api/__update\", \"/api/e2ee/open\"]);\n// /internal/sessions/:sessionId/progress also uses HMAC (Progress webhook),\n// and the sessionId is dynamic so we match by prefix.\nconst PUBLIC_POST_PREFIXES = [\"/internal/sessions/\"];\n\nexport const authMiddleware =\n  (deps: Pick<ApiDeps, \"apiKey\" | \"localNoAuth\" | \"devicesRepo\">): MiddlewareHandler<AppEnv> =>\n  async (c, next) => {\n    const path = new URL(c.req.url).pathname;\n    const method = c.req.method;\n    const isPublicPostPath =\n      method === \"POST\" &&\n      (PUBLIC_POST_PATHS.has(path) || PUBLIC_POST_PREFIXES.some((p) => path.startsWith(p)));\n    // A local `/healthz` (no cloudflared header) is open; a tunneled one falls\n    // through to the gate below, where an e2ee context, a Bearer, or a `?key=`\n    // authenticates it and a bare probe gets 401.\n    const isLocalHealthz = path === HEALTHZ_PATH && c.req.header(CF_TUNNEL_HEADER) === undefined;\n    if (isLocalHealthz || isPublicPostPath) {\n      await next();\n      return;\n    }\n\n    const remoteAddr = c.env.incoming?.socket?.remoteAddress;\n    if (LOCAL_ONLY_PATHS.has(path) && isLocalRequest(remoteAddr)) {\n      await next();\n      return;\n    }\n\n    // `--local-no-auth` gives any loopback caller the owner's authority. It used\n    // to grant that by returning next() right here — before the capability check\n    // below and before c.set(\"principal\") — so the capability layer saw no\n    // principal at all, and the WebSocket guard took its null-principal path\n    // instead of an authorization decision. Resolving the caller to the owner\n    // principal leaves the access identical and puts it through the same checks\n    // as every other caller.\n    const loopbackOwner = deps.localNoAuth && isLocalRequest(remoteAddr);\n\n    const authorization = c.req.header(\"authorization\");\n    const bearer = authorization?.startsWith(\"Bearer \") ? authorization.slice(7) : undefined;\n    const queryKey = c.req.query(\"key\") ?? undefined;\n    const presented = bearer ?? queryKey;\n\n    // ─── A ticketed WebSocket upgrade authenticates by its ticket ───────\n    //\n    // NONCE-DESIGN §13: **no `Authorization` travels on a ticketed upgrade.**\n    // The ticket came out of a Noise handshake against the device's own static\n    // key and resolves to a context that names the device, so the long-term\n    // credential has nothing left to prove — and sending it anyway would put a\n    // device token on the wire on every reconnect, which is the exact leak the\n    // sealed-credential ordering exists to close.\n    //\n    // **The consume is a synchronous map delete with no `await` in front of\n    // it** (§14). Nothing above this line awaits, and `consumeTicket` reads and\n    // deletes in one uninterrupted turn — so two concurrent upgrades presenting\n    // one ticket cannot both see it, whatever order Node runs them in.\n    //\n    // A ticket that does not resolve — spent, expired, or lost to a restart —\n    // is terminal for THIS upgrade. Falling through to a bearer or `?key=`\n    // would turn a failed sealed attempt into a legacy plaintext socket. The\n    // client recovers by opening a new context and ticket.\n    // Mirror @hono/node-ws's upgrade predicate exactly: looser spends a ticket\n    // without a socket; stricter can downgrade an upgrade to legacy auth.\n    const isWsUpgrade =\n      method === \"GET\" &&\n      path === WS_PATH &&\n      c.req.header(\"upgrade\")?.toLowerCase() === \"websocket\";\n    //\n    // A browser presents the same ticket as a `tb-ticket.<ticket>` subprotocol\n    // offer (see `E2EE_WS_SUBPROTOCOL`). Everything above holds for it\n    // unchanged: the parse below is synchronous, and the consume is the same\n    // call. Offering `threadbase-e2ee-v1` at all declares a sealed attempt, so\n    // an offer with no ticket is refused rather than served as legacy — that is\n    // also what makes the static protocol selection in `mountWebSocket` honest:\n    // the protocol can only be selected on an upgrade a ticket authenticated.\n    const offered = isWsUpgrade ? parseSubprotocols(c.req.header(\"sec-websocket-protocol\")) : [];\n    if (offered === null) return c.json({ error: \"Bad Request\" }, 400);\n    const presentedTickets = offered\n      .filter((p) => p.startsWith(TICKET_SUBPROTOCOL_PREFIX))\n      .map((p) => p.slice(TICKET_SUBPROTOCOL_PREFIX.length));\n    const headerTicket = isWsUpgrade ? c.req.header(TICKET_HEADER) : undefined;\n    if (headerTicket !== undefined) presentedTickets.push(headerTicket);\n    if (presentedTickets.length > 1) {\n      // Two tickets — header plus subprotocol, or two offers — is refused, not\n      // resolved by preferring one: the same rule as a ticket beside a\n      // credential naming another device, since \"which one authenticates\"\n      // should never be a precedence a client can be unsure of. Every presented\n      // ticket is still spent, and a context this orphans is destroyed, exactly\n      // as the capability refusal below does: only a caller holding a ticket\n      // can resolve one, so the destroy is never someone else's to trigger.\n      const registry = contextRegistry();\n      for (const presented of presentedTickets) {\n        const spent = registry.consumeTicket(presented);\n        if (spent) registry.destroy(spent);\n      }\n      return c.json({ error: \"Unauthorized\" }, 401);\n    }\n    const ticket = presentedTickets[0] ?? (offered.includes(E2EE_WS_SUBPROTOCOL) ? \"\" : undefined);\n    if (ticket !== undefined) {\n      const registry = contextRegistry();\n      const ctxId = registry.consumeTicket(ticket);\n      const context = ctxId ? registry.get(ctxId) : null;\n      if (!context) return c.json({ error: \"Unauthorized\" }, 401);\n      // The shared tail, in `context.ts` because the REST unseal middleware\n      // runs exactly the same decision off `X-TB-Ctx`: device row, per-request\n      // `revoked_at`, credential-must-name-the-same-device, principal built\n      // from the CONTEXT. The helper returns a pure verdict; each caller maps\n      // the reason to its own response and applies the permitted lifecycle\n      // effect.\n      const auth = authenticateContext({\n        context,\n        devicesRepo: deps.devicesRepo(),\n        presented,\n      });\n      if (!auth.ok) {\n        // **Mapping the verdict to an answer is the CALLER's job**, which is\n        // why the helper returns a `reason` and no status: the REST\n        // middleware maps the same three onto HTTP, this maps them onto an\n        // upgrade refusal, and neither imposes its policy on the other.\n        //\n        // **Destroy only on the unforgeable trigger.** `revoked_at` (and a\n        // missing row) is a fact in our own database; a mismatched credential\n        // is a header an attacker chose, and destroying on it turns the\n        // safeguard into the weapon — on the REST channel `ctxId` travels in\n        // a plaintext header, so anyone on path could forge a credential\n        // beside an observed id and kill that device's context on repeat.\n        //\n        // Destroying here on a mismatch would in fact be harmless, since this\n        // ticket is already spent and there is no second attempt to deny. It\n        // is still not done, for SYMMETRY with the REST caller: a helper\n        // whose two consumers apply different effects to one verdict is how\n        // the dangerous behaviour gets copied from the harmless one later.\n        if (auth.reason === \"device-revoked\") registry.destroy(context.ctxId);\n        log.warn(\"[e2ee] upgrade refused by context authentication\", {\n          event: \"e2ee.upgrade_refused\",\n          reason: auth.reason,\n        });\n        if (auth.reason === \"device-revoked\") {\n          return c.json({ error: \"This device is not paired\", code: E2EE_DEVICE_REVOKED }, 403);\n        }\n        if (auth.reason === \"no-device-store\") {\n          // Transient, and deliberately NOT `E2EE_DEVICE_REVOKED`: §9 defines\n          // that code as a hard failure the client must never retry, and a\n          // registry that could not be read says nothing about the pairing.\n          // Same shape `/api/devices` already uses when its repo is missing.\n          return c.json(\n            { error: \"Device registry is unavailable\", code: \"STORE_UNAVAILABLE\" },\n            503,\n          );\n        }\n        return c.json({ error: \"Unauthorized\" }, 401);\n      }\n\n      c.set(\"e2eeContext\", context);\n      // A ticket AUTHENTICATES; it does not authorize. The capability check is\n      // the same one every other caller passes.\n      const required = requiredCapability(path, method);\n      if (required !== null && !hasCapability(auth.principal, required)) {\n        // **Destroy the context this refusal orphans.** `consumeTicket`\n        // already spent the ticket AND called `markUsed`, which promotes the\n        // context out of provisional and moves its deadline from the 30 s\n        // ticket TTL to the full 24 h lifetime. Refusing without destroying\n        // therefore leaves a context nobody can ever attach to — the ticket is\n        // gone — sitting for a day and counting against the device's cap,\n        // which is the opposite of what promoting it was for.\n        //\n        // Safe on this channel: the trigger is our own capability table, not\n        // a header an attacker chose, and the ticket is already spent so\n        // there is no second attempt to deny.\n        registry.destroy(context.ctxId);\n        return c.json({ error: \"Forbidden\", code: \"MISSING_CAPABILITY\", required }, 403);\n      }\n      try {\n        deps.devicesRepo()?.touch(auth.principal.deviceId);\n      } catch {\n        // A liveness stamp must never deny a valid upgrade.\n      }\n      c.set(\"principal\", auth.principal);\n      await next();\n      return;\n    }\n\n    // ─── A sealed REST request already resolved its own principal ──────\n    //\n    // `e2eeEnvelopeMiddleware` runs ahead of this one (D-9: the unseal sits in\n    // front of authentication so the credential travels sealed) and, on a\n    // request that unsealed under `X-TB-Ctx`, has already set the principal\n    // from the CONTEXT's device row after re-checking `revoked_at`. Resolving\n    // it again here would be worse than redundant: a sealed request carries no\n    // `Authorization` at all (§13(b)), so the resolution below would find no\n    // credential and 401 a request that authenticated correctly.\n    //\n    // **What is skipped is credential RESOLUTION, and nothing else.** The\n    // capability check still runs, on the context's principal, exactly as it\n    // does for every other caller. Read this as \"skip the rest of the\n    // middleware\" and a read-only device gains full write authority the moment\n    // it seals — `c.set(\"principal\", …)` below happens AFTER the capability\n    // gate, and not at all on the `required === null` early return, so a\n    // principal being present says nothing about authority having been checked.\n    //\n    // The 403 this can produce is sealed on the way out by the envelope\n    // middleware's response path, like every other answer that request is owed.\n    // A few focused middleware harnesses provide only the pre-existing\n    // Context surface; production Hono contexts always provide `get`.\n    const contextPrincipal = c.get?.(\"principal\");\n    if (contextPrincipal) {\n      const requiredForContext = requiredCapability(path, method);\n      if (requiredForContext !== null && !hasCapability(contextPrincipal, requiredForContext)) {\n        return c.json(\n          { error: \"Forbidden\", code: \"MISSING_CAPABILITY\", required: requiredForContext },\n          403,\n        );\n      }\n      await next();\n      return;\n    }\n\n    if (!presented && !loopbackOwner) {\n      return c.json({ error: \"Unauthorized\" }, 401);\n    }\n\n    // Resolve the caller to a principal (C5).\n    //\n    // Device tokens are tried FIRST so a device credential is never mistaken\n    // for the shared key, then the shared key falls back to a `legacy`\n    // principal holding the full preset. Keeping the shared key working is what\n    // lets this ship without breaking every already-paired device.\n    let principal: Principal | null = null;\n\n    const device = presented ? (deps.devicesRepo()?.authenticate(presented) ?? null) : null;\n    if (device) {\n      principal = {\n        kind: \"device\",\n        deviceId: device.device_id,\n        capabilities: parseCapabilities(device.capabilities),\n      };\n      // Best-effort liveness stamp; a failure here must not deny a valid request.\n      try {\n        deps.devicesRepo()?.touch(device.device_id);\n      } catch {\n        // ignore\n      }\n    } else if (presented && validateApiKey(presented, deps.apiKey)) {\n      principal = legacyPrincipal();\n    } else if (loopbackOwner) {\n      // No credential needed from loopback under the flag — and a wrong one does\n      // not demote it either, which is what the old unconditional bypass did.\n      principal = legacyPrincipal();\n    }\n\n    if (!principal) {\n      return c.json({ error: \"Unauthorized\" }, 401);\n    }\n\n    // ─── Downgrade enforcement: 426, never 401 (design.md §6.3) ────────\n    //\n    // We are on the PLAINTEXT branch by construction — the sealed branch\n    // returned above with a context principal — so a caller that reaches here\n    // resolved a credential and presented no `X-TB-Ctx`. If that credential\n    // names a device whose row is pinned (`e2ee_required`), it has already\n    // completed a handshake once and must never be served in the clear again.\n    //\n    // **426 and not 401, and the difference is not cosmetic.**\n    // `docs/compatibility/tb-mobile.md` maps 401 onto the re-authentication UI,\n    // so answering a downgrade with 401 would send a correctly-paired phone to\n    // a login screen it cannot satisfy — the credential is fine; the transport\n    // is not. 426 tells it to open a context and retry, which is a thing it can\n    // actually do.\n    //\n    // Through W1a's shared helper, never a second implementation: two copies of\n    // a downgrade rule is one copy that can be forgotten. Its stated limit\n    // carries over unchanged — a pinned device presenting the SHARED api key\n    // resolves to `legacy` with no device row, so the pin cannot bite. That is\n    // the stage-3 shared-key problem and it is R's, not this PR's.\n    const downgrade = refuseUnsealedIfPinned({\n      principal,\n      devicesRepo: deps.devicesRepo?.(),\n      context: c.get?.(\"e2eeContext\"),\n    });\n    if (downgrade) {\n      // The code and the status, and nothing about the request. A downgrade\n      // refusal names no body, no key and no context.\n      log.warn(\"[e2ee] pinned device refused a plaintext request\", {\n        event: \"e2ee.rest_downgrade_refused\",\n      });\n      return c.json(downgrade.body, downgrade.status);\n    }\n\n    // Capability check.\n    const required = requiredCapability(path, method);\n    if (required === null) {\n      // Authenticated but unclassified. Fall through to the router rather than\n      // denying: an unknown path must still 404, because answering 403 would\n      // tell an authenticated caller that a route it cannot name might exist.\n      //\n      // This is NOT a hole — every mounted /api route is classified, and a test\n      // asserts that. A genuinely new route added without a mapping reaches its\n      // handler, so the fail-closed guarantee lives in that test rather than in\n      // a runtime deny that would break 404s.\n      await next();\n      return;\n    }\n    if (!hasCapability(principal, required)) {\n      return c.json({ error: \"Forbidden\", code: \"MISSING_CAPABILITY\", required }, 403);\n    }\n\n    c.set(\"principal\", principal);\n    await next();\n  };\n","// Transport contexts: what a completed `/api/e2ee/open` handshake leaves\n// behind, and the only place a `ctxId` ever resolves to keys.\n//\n// specs/end-to-end-encryption/NONCE-DESIGN.md §8 is the design of record here\n// and it supersedes design.md §4.3 on two points that would otherwise have\n// shipped a bug:\n//\n//   1. **Two contexts per device, not one.** A WebSocket context bound to\n//      exactly one socket, and a long-lived REST context. A single device-wide\n//      context that died with the socket would take the 2 s HTTP replay\n//      fallback down with it — that fallback runs *precisely* when the socket\n//      is unavailable — and, worse, a context SHARED by both would\n//      sequence-violate itself into a close loop: frames in flight when a\n//      socket drops are lost, so under the strict counter (§5 R2) the first\n//      frame after a reconnect is a gap, the client closes, reconnects, gaps\n//      again, and never recovers.\n//   2. **No grace window.** A socket's context is destroyed at its close. A\n//      reconnect opens a NEW context — new `ctxId`, new keys, counters\n//      legitimately at 0 — which is not a counter reset: the invariant scopes\n//      uniqueness per context.\n//\n// Contexts are IN-MEMORY ONLY. They do not survive a streamer restart, which is\n// what stops an old capture from ever being replayed into a new run.\n//\n// A key is never REPLACED inside a context (§6): 24 h, 1 GiB and a foreground\n// past threshold all mean \"open a new context and retire the old one\", so there\n// is no rekey here, no `bytesSealed`, and no key generation for a concurrent\n// REST receiver to have to guess at.\n\nimport { type KeyObject, randomBytes } from \"crypto\";\nimport { type DeviceRow, parseCapabilities } from \"../db/repositories/devices.repository\";\nimport type { Principal } from \"../services/security/capabilities\";\nimport type { TrafficKeys } from \"./noise\";\nimport { E2EE_CTX_UNKNOWN, own, redactKeyMaterial, unpooled } from \"./protocol\";\nimport {\n  CHANNEL_REST_REQUEST,\n  CHANNEL_WS,\n  type Channel,\n  CTX_ID_BYTES,\n  createRecordState,\n  DIRECTION_C2S,\n  DIRECTION_S2C,\n  RecordError,\n  type RecordState,\n  RestResponseSealer,\n} from \"./record\";\nimport { RestReceiveWindow } from \"./rest-window\";\n\n/**\n * The header a client presents its single-use WebSocket ticket in.\n *\n * **A header, never a query parameter** (§10). `?ticket=` lands in every ingress\n * access log — Cloudflare logs full request URLs — and single-use plus thirty\n * seconds bounds that damage without removing it. React Native's `WebSocket`\n * takes custom headers, so the ticket never needs to touch a URL at all; a\n * browser, which cannot, uses `Sec-WebSocket-Protocol` instead (below). The\n * property that buys is stronger than redaction: there is nothing to redact,\n * because `http.request` logs a method, a path and a summarised query, never a\n * header.\n *\n * It lives HERE rather than beside the route because `auth.middleware.ts` reads\n * it too — a ticketed upgrade authenticates by its ticket (§13) — and a route\n * module is not something the auth middleware should have to import.\n */\nexport const TICKET_HEADER = \"x-tb-ticket\";\n\n/**\n * The browser spelling of the same ticket: a `Sec-WebSocket-Protocol` offer.\n *\n * A browser `WebSocket` cannot set `X-TB-Ticket`, but `new WebSocket(url,\n * protocols)` sets `Sec-WebSocket-Protocol`, which is still a header — so \"never\n * a query parameter\" holds for browsers too. The client offers exactly\n * `threadbase-e2ee-v1, tb-ticket.<ticket>`; the server consumes the ticket with\n * the header path's semantics and selects ONLY `E2EE_WS_SUBPROTOCOL` in the 101\n * (`mountWebSocket` pins that), because `ws` would otherwise echo the first\n * offer and a browser that offered protocols fails a 101 that selects none.\n * A ticket (22 base64url characters) is a valid RFC 6455 token as it stands.\n */\nexport const E2EE_WS_SUBPROTOCOL = \"threadbase-e2ee-v1\";\nexport const TICKET_SUBPROTOCOL_PREFIX = \"tb-ticket.\";\n\nconst SUBPROTOCOL_TOKEN = /^[!#$%&'*+\\-.^_`|~0-9A-Za-z]+$/;\n\n/**\n * `Sec-WebSocket-Protocol` as a list, or `null` where no socket can follow: an\n * offer `ws` would refuse (a non-token or a duplicate), or a `tb-ticket.` offer\n * without `E2EE_WS_SUBPROTOCOL`, for which the 101 selects nothing and a browser\n * drops the socket. Checked BEFORE a ticket is consumed: `ws` parses the header\n * only after the app has answered, so either offer would otherwise spend a\n * ticket, promote its context, and open no socket.\n */\nexport function parseSubprotocols(header: string | undefined): string[] | null {\n  if (header === undefined) return [];\n  const offered = header.split(\",\").map((p) => p.trim());\n  const valid =\n    offered.every((p) => SUBPROTOCOL_TOKEN.test(p)) &&\n    new Set(offered).size === offered.length &&\n    (offered.includes(E2EE_WS_SUBPROTOCOL) ||\n      !offered.some((p) => p.startsWith(TICKET_SUBPROTOCOL_PREFIX)));\n  return valid ? offered : null;\n}\n\n/** §8: a provisional context, and its ticket, die at 30 s. */\nexport const TICKET_TTL_MS = 30_000;\n/** A socket outlives this only if it is still open; it is a backstop. */\nexport const WS_CONTEXT_TTL_MS = 24 * 60 * 60 * 1000;\n/** §8: a REST context is destroyed at 24 h and the client re-opens. */\nexport const REST_CONTEXT_TTL_MS = 24 * 60 * 60 * 1000;\n\n/** §8: cap live contexts per device, evicting by usefulness. */\nexport const MAX_WS_CONTEXTS_PER_DEVICE = 4;\nexport const MAX_REST_CONTEXTS_PER_DEVICE = 2;\n\n/**\n * How long an evicted context keeps answering before it is swept (§8).\n *\n * \"Eviction honours the drain\": a context destroyed the instant its\n * replacement registers kills a request that is in flight on it, which is the\n * opposite of the short drain §6 promises. Ten seconds is far longer than any\n * REST round trip on this product and far shorter than the 30 s provisional\n * TTL, so a drained context never outlives the window it was evicted in.\n * NONCE-DESIGN names the rule and not a number; this is the number.\n */\nexport const CONTEXT_DRAIN_MS = 10_000;\n\nexport type ContextKind = \"ws\" | \"rest\";\n\n/**\n * A fresh context handle: 16 random bytes, base64url, 22 characters.\n *\n * **Server-assigned, never derived** (§12). The earlier\n * `HKDF(h_ss, \"tb-e2ee-ctx-id\", 16)` was fine as a server-side detail and wrong\n * as a contract: it pinned no salt/info/IKM roles, the client has no HKDF of\n * that shape, and since the server returns `ctxId` in msg2 anyway a deriving\n * client would hold a second source of truth to disagree with. It was also\n * circular in practice — the transcript hash a client would derive from is\n * computed over the very payload the `ctxId` has to travel in.\n */\nexport function newCtxId(): { raw: Buffer; id: string } {\n  // UNPOOLED: `ctxId` is public by design and travels on every sealed record,\n  // and a pooled public Buffer exposes the shared 8 KiB block it was carved\n  // from — which is how a registry walk reached live traffic keys without\n  // touching a key-bearing class at all (§13).\n  const raw = unpooled(randomBytes(CTX_ID_BYTES));\n  return { raw, id: raw.toString(\"base64url\") };\n}\n\n/**\n * When a context of this kind, opened now, stops resolving — before it has been\n * used for anything.\n *\n * Every context starts PROVISIONAL and dies at the ticket TTL (§8). An `IK`\n * msg1 carries no freshness, so anyone who captured one valid `/open` msg1 can\n * replay it: each replay passes \"fail closed on the device row\", because the\n * static key genuinely is a known device, and allocates a context and a ticket\n * for two DH and one AEAD. The attacker never gets keys — msg2 needs `D_priv` —\n * so this is pure allocation, the D-9 class, on a public endpoint. Without this\n * rule a socket context whose ticket is never consumed has no end of life at\n * all.\n */\nexport function provisionalExpiresAt(now: number): number {\n  return now + TICKET_TTL_MS;\n}\n\n/** When a context that HAS been used stops resolving. */\nexport function contextExpiresAt(kind: ContextKind, now: number): number {\n  return now + (kind === \"ws\" ? WS_CONTEXT_TTL_MS : REST_CONTEXT_TTL_MS);\n}\n\nexport interface E2eeContext {\n  /** The wire handle: base64url, 22 characters. What `X-TB-Ctx` carries. */\n  readonly ctxId: string;\n  /** The same value as the 16 raw bytes the AAD binds. */\n  readonly ctxIdRaw: Buffer;\n  readonly deviceId: string;\n  readonly kind: ContextKind;\n  readonly createdAt: number;\n  /** Moves out to the full lifetime once the context is first used (§8). */\n  readonly expiresAt: number;\n  /** True until the ticket is consumed or a request unseals under it (§8). */\n  readonly provisional: boolean;\n  /** Set when the context has been evicted and is draining; null otherwise (§8). */\n  readonly retireAt: number | null;\n  /** The moment this context stops resolving: its expiry, or its drain deadline. */\n  deadline(): number;\n  /** The sending half for a channel. Throws for a channel this kind does not carry. */\n  sendState(channel: Channel): RecordState;\n  /** The receiving half for a channel. Throws for a channel this kind does not carry. */\n  receiveState(channel: Channel): RecordState;\n  /** REST only: unseal a request and record its counter as answerable (§13(a)). */\n  unsealRequest(frame: Buffer, target: Buffer): Buffer;\n  /** REST only: seal the one response that request is owed (§13(a)). */\n  sealResponse(requestCounter: bigint, plaintext: Buffer, target: Buffer): Buffer;\n  /** First authenticated use. Promotes out of provisional. */\n  markUsed(now?: number): void;\n}\n\nconst contextInvalidators = new WeakMap<E2eeContext, () => void>();\n\nclass Context implements E2eeContext {\n  readonly ctxId: string;\n  readonly ctxIdRaw: Buffer;\n  readonly deviceId: string;\n  readonly kind: ContextKind;\n  readonly createdAt: number;\n  expiresAt: number;\n  provisional = true;\n  retireAt: number | null = null;\n\n  // Receive state is keyed by (context, CHANNEL) rather than by context alone,\n  // because the two channels have genuinely different rules: strict `expected`\n  // on the WebSocket, a sliding window on REST (§8, design.md §3.4).\n  readonly #send = new Map<Channel, RecordState>();\n  readonly #receive = new Map<Channel, RecordState>();\n  // Not `readonly`: W1b's invalidator nulls this to make destruction real\n  // rather than a map deletion. See `contextInvalidators` below.\n  #responses: RestResponseSealer | null;\n  /**\n   * REST contexts only; `null` on a socket context, and not merely unused\n   * there. A window a `ws` context carried would be an invitation to relax §5\n   * R2 to share an implementation, which is the one change this split exists to\n   * prevent.\n   *\n   * **Deliberately NOT cleared by the invalidator, and `readonly` says so.**\n   * `unsealRequest` opens with `requireRest()`, which throws once `#responses`\n   * is null, so an invalidated context refuses before the window is ever\n   * consulted — there is no path on which a stale window can admit a counter.\n   * It also holds no key material, only a bitmap of counters already seen. The\n   * one thing clearing it would buy is a second place to get destruction\n   * wrong.\n   */\n  readonly #window: RestReceiveWindow | null;\n\n  constructor(args: {\n    ctxIdRaw: Buffer;\n    ctxId: string;\n    deviceId: string;\n    kind: ContextKind;\n    keys: TrafficKeys;\n    now: number;\n  }) {\n    this.ctxIdRaw = unpooled(args.ctxIdRaw);\n    this.ctxId = args.ctxId;\n    this.deviceId = args.deviceId;\n    this.kind = args.kind;\n    this.createdAt = args.now;\n    this.expiresAt = provisionalExpiresAt(args.now);\n\n    const state = (key: KeyObject, direction: Direction, channel: Channel) =>\n      createRecordState({ key, ctxId: this.ctxIdRaw, direction, channel });\n\n    if (args.kind === \"ws\") {\n      this.#send.set(CHANNEL_WS, state(args.keys.serverToClient, DIRECTION_S2C, CHANNEL_WS));\n      this.#receive.set(CHANNEL_WS, state(args.keys.clientToServer, DIRECTION_C2S, CHANNEL_WS));\n      this.#responses = null;\n      this.#window = null;\n    } else {\n      // The REST receive path is WINDOWED, not strict. This state still does\n      // every check a record gets — bounds, version, `ctxId`, direction,\n      // channel, target hash, tag — but its sequence rule is not `expected`:\n      // `unsealRequest` below drives it through `unsealUnchecked` and hands the\n      // authenticated counter to `#window`, an RFC-6479-style 1024-bit bitmap\n      // (design.md §3.4). React Query issues concurrent requests, so an\n      // out-of-order arrival here is a network event and not a protocol\n      // violation.\n      //\n      // The acceptance rule is replaced on THIS state and nothing else: the\n      // WebSocket's strictness (§5 R2) is untouched, and `unsealUnchecked`\n      // refuses every channel but this one so the seam cannot reach it.\n      this.#receive.set(\n        CHANNEL_REST_REQUEST,\n        state(args.keys.clientToServer, DIRECTION_C2S, CHANNEL_REST_REQUEST),\n      );\n      this.#window = new RestReceiveWindow();\n      // Responses have NO counter of their own: each echoes the counter of the\n      // request it answers (§13(a)).\n      this.#responses = new RestResponseSealer({\n        key: args.keys.serverToClient,\n        ctxId: this.ctxIdRaw,\n      });\n    }\n\n    contextInvalidators.set(this, () => {\n      this.#send.clear();\n      this.#receive.clear();\n      this.#responses = null;\n    });\n\n    // Holds record states, which hold traffic keys. Redacted through the same\n    // helper as everything else that carries key material, so a fifth\n    // key-bearing object cannot be added with a fourth private convention.\n    redactKeyMaterial(\n      this,\n      () =>\n        `E2eeContext { ctxId: ${this.ctxId}, kind: ${this.kind}, provisional: ${this.provisional}, keys: <#private, in its record states> }`,\n    );\n  }\n\n  sendState(channel: Channel): RecordState {\n    const s = this.#send.get(channel);\n    if (!s) throw new RecordError(E2EE_CTX_UNKNOWN, `no send state for channel ${channel}`);\n    return s;\n  }\n\n  receiveState(channel: Channel): RecordState {\n    const s = this.#receive.get(channel);\n    if (!s) throw new RecordError(E2EE_CTX_UNKNOWN, `no receive state for channel ${channel}`);\n    return s;\n  }\n\n  unsealRequest(frame: Buffer, target: Buffer): Buffer {\n    const sealer = this.requireRest();\n    // A REST context is built with a window and a sealer together, so\n    // `requireRest()` above has already refused every context that has neither.\n    // This narrows the type; it is not a second opinion about what a REST\n    // context is, and there is no path on which it fires.\n    const window = this.#window;\n    if (!window) throw new RecordError(E2EE_CTX_UNKNOWN, \"not a REST context\");\n    const state = this.receiveState(CHANNEL_REST_REQUEST);\n    // **Authenticate first, then decide (§5 R2 ordering).** The counter the\n    // window judges is the one that came OUT of the AEAD, never one read from a\n    // header beforehand: a pre-authentication check would make\n    // `E2EE_SEQUENCE_VIOLATION` an unauthenticated verdict about the peer and\n    // buys no protection, since the same attacker can as cheaply send garbage\n    // carrying the right counter.\n    //\n    // And it must come from the return value rather than from `state.counter`.\n    // The strict path could read the counter first because `expected` and the\n    // frame's counter are equal by definition there; on the window path they\n    // are not, and the difference is silent — every test still passes for the\n    // first request in a context.\n    const { plaintext, counter } = state.unsealUnchecked(frame, target);\n    // The window owns acceptance: `unsealUnchecked` advances nothing, so a\n    // repeat, an already-received counter or one that has fallen out of the\n    // window is refused HERE, before anything is armed to answer it.\n    window.admit(counter);\n    // Acceptance is recorded ONLY on the success path, which is what makes\n    // §13(a) enforceable rather than a rule a middleware has to remember: a\n    // request the window or the AEAD rejected can never be answered with a\n    // sealed body, because no counter was ever accepted for it.\n    sealer.accept(counter);\n    this.markUsed();\n    return plaintext;\n  }\n\n  sealResponse(requestCounter: bigint, plaintext: Buffer, target: Buffer): Buffer {\n    return this.requireRest().seal(requestCounter, plaintext, target);\n  }\n\n  deadline(): number {\n    return this.retireAt === null ? this.expiresAt : Math.min(this.expiresAt, this.retireAt);\n  }\n\n  /** Evicted: keep answering for the drain, then go (§8). */\n  retire(at: number): void {\n    this.retireAt = this.retireAt === null ? at : Math.min(this.retireAt, at);\n  }\n\n  markUsed(now: number = Date.now()): void {\n    if (!this.provisional) return;\n    this.provisional = false;\n    // Measured from first use, not from the open: a ticket consumed at 29 s\n    // should not leave a socket 29 seconds short of its day.\n    this.expiresAt = contextExpiresAt(this.kind, now);\n  }\n\n  private requireRest(): RestResponseSealer {\n    if (!this.#responses) {\n      throw new RecordError(E2EE_CTX_UNKNOWN, \"not a REST context\");\n    }\n    return this.#responses;\n  }\n}\n\nfunction invalidateContext(context: E2eeContext): void {\n  contextInvalidators.get(context)?.();\n}\n\ntype Direction = typeof DIRECTION_C2S | typeof DIRECTION_S2C;\n\n/** What registry destruction reports to the caller (§8). */\nexport interface DestroyedContexts {\n  /** WS contexts that were still indexed when destruction began. */\n  socketCtxIds: string[];\n  restCtxIds: string[];\n  /** Unconsumed tickets dropped, so a revoked device cannot still upgrade. */\n  tickets: number;\n}\n\n/**\n * Every live context on this process, and the WS tickets bound to them.\n *\n * In-memory by design (§8). One instance per server — `contextRegistry()` below\n * — because the `/api/e2ee/open` route writes to it and the WebSocket upgrade\n * and the REST middleware read from it, and a second registry would mean a\n * context that exists for one of them and not the others.\n */\nexport class E2eeContextRegistry {\n  readonly #contexts = new Map<string, Context>();\n  readonly #byDevice = new Map<string, Set<string>>();\n  /**\n   * Live WS tickets, `#private` for the same reason the traffic keys are.\n   *\n   * A ticket is a credential by §10's own reasoning — single-use, 30 seconds,\n   * and the thing that authorises a socket upgrade — and this table rendered in\n   * full under `inspect(registry, { customInspect: false, showHidden: true })`:\n   * every live ticket in the process, in one call, from the object a\n   * diagnostics dump is most likely to reach for.\n   */\n  readonly #tickets = new Map<string, { ctxId: string; expiresAt: number }>();\n\n  constructor() {\n    // Inspecting the registry used to print every live context's traffic keys\n    // in ONE call — the widest version of the same leak, and the reason this is\n    // redacted at the container as well as at the leaves.\n    redactKeyMaterial(\n      this,\n      () =>\n        `E2eeContextRegistry { contexts: ${this.#contexts.size}, devices: ${this.#byDevice.size}, tickets: ${this.#tickets.size} }`,\n    );\n  }\n\n  /** Live contexts. For tests and for a future diagnostics line — never a key. */\n  get size(): number {\n    return this.#contexts.size;\n  }\n\n  /** Unconsumed, unexpired tickets. Tests only. */\n  get ticketCount(): number {\n    return this.#tickets.size;\n  }\n\n  open(args: {\n    deviceId: string;\n    kind: ContextKind;\n    ctxIdRaw: Buffer;\n    ctxId: string;\n    keys: TrafficKeys;\n    now?: number;\n  }): E2eeContext {\n    // Off the ARGUMENT: a polluted `Object.prototype.now` in the past makes\n    // every provisional context outlive the 30 s TTL that is §8's whole bound.\n    const now = own(args, \"now\") ?? Date.now();\n    // Sweep this device's dead contexts FIRST, and the ticket table with them.\n    //\n    // Nothing else collects them. `get()` prunes only the one `ctxId` it was\n    // asked for, so a context nobody ever looks up — which is exactly what a\n    // replayed msg1 produces, since the attacker cannot read msg2 and so never\n    // presents the ticket — stayed in both maps for good. The cap `retire()`d\n    // the older ones and they lingered anyway: memory growing without ceiling,\n    // defeating the very bound §8 wrote the provisional TTL to provide.\n    this.sweepDevice(args.deviceId, now);\n    this.sweepTickets(now);\n\n    // §8: cap per device, and **the context being opened is never an eviction\n    // candidate**. It is provisional by definition, so a naive \"provisional\n    // first\" ordering sorted it to the front of its own queue and the open\n    // evicted itself: a device holding four live sockets got a fifth that died\n    // at the drain deadline and could never open a usable one — consuming the\n    // ticket could not save it, because `deadline()` is\n    // `min(expiresAt, retireAt)`. The candidates are therefore computed from\n    // the OTHER live contexts, before the new one is inserted.\n    //\n    // A re-open storm after a restart, or a foreground racing a silence-timer\n    // reconnect, both legitimately produce a second context — the newer wins\n    // and the older is retired here rather than accumulating. Not a\n    // replace-on-open: two sockets briefly overlapping during a reconnect is\n    // ordinary, and destroying the live one would turn a reconnect into a\n    // failure of the connection it was replacing.\n    //\n    // **Eviction is by usefulness, not by age.** Sorting on `createdAt` alone\n    // picks the context that has been serving traffic all session and keeps two\n    // opened a second ago and never used — precisely inverted in the case that\n    // matters, a replay storm. Provisional (never authenticated) goes first;\n    // only then the oldest live one.\n    //\n    // And it honours the drain: the victim is marked for deletion at\n    // `now + CONTEXT_DRAIN_MS` rather than destroyed under a request already in\n    // flight on it. A draining context no longer counts against the cap, so the\n    // cap bounds *live* contexts and the overhang is bounded by the drain.\n    const cap = args.kind === \"ws\" ? MAX_WS_CONTEXTS_PER_DEVICE : MAX_REST_CONTEXTS_PER_DEVICE;\n    const candidates = (this.forDevice(args.deviceId) as Context[])\n      .filter((c) => c.kind === args.kind && c.retireAt === null)\n      .sort((a, b) => {\n        if (a.provisional !== b.provisional) return a.provisional ? -1 : 1;\n        return a.createdAt - b.createdAt;\n      });\n    // `+ 1` is the context about to be inserted: it counts against the cap, and\n    // is not in the list it could be evicted from.\n    for (const evicted of candidates.slice(0, Math.max(0, candidates.length + 1 - cap))) {\n      evicted.retire(now + CONTEXT_DRAIN_MS);\n    }\n\n    const context = new Context({\n      ctxIdRaw: args.ctxIdRaw,\n      ctxId: args.ctxId,\n      deviceId: args.deviceId,\n      kind: args.kind,\n      keys: args.keys,\n      now,\n    });\n    this.#contexts.set(context.ctxId, context);\n    let ids = this.#byDevice.get(args.deviceId);\n    if (!ids) {\n      ids = new Set();\n      this.#byDevice.set(args.deviceId, ids);\n    }\n    ids.add(context.ctxId);\n    return context;\n  }\n\n  /**\n   * Resolve a `ctxId`, or `null` for one that is unknown, expired, or lost to a\n   * restart — all three of which the caller reports as `E2EE_CTX_UNKNOWN`,\n   * because all three are recoverable by one transparent re-handshake and none\n   * of them is a revocation the client must surface (§9).\n   *\n   * The map lookup IS the first thing that runs, and nothing is allocated on\n   * the way to a rejection (§10). This is called before authentication, on a\n   * value an attacker chose.\n   */\n  get(ctxId: string, now: number = Date.now()): E2eeContext | null {\n    const context = this.#contexts.get(ctxId);\n    if (!context) return null;\n    if (now >= context.deadline()) {\n      this.destroy(ctxId);\n      return null;\n    }\n    return context;\n  }\n\n  /** Every live context for a device. */\n  forDevice(deviceId: string): E2eeContext[] {\n    const ids = this.#byDevice.get(deviceId);\n    if (!ids) return [];\n    const out: E2eeContext[] = [];\n    for (const id of ids) {\n      const context = this.#contexts.get(id);\n      if (context) out.push(context);\n    }\n    return out;\n  }\n\n  /**\n   * Destroy one context and any ticket bound to it.\n   *\n   * The socket's close calls this for its own context and NOTHING else: a\n   * device's REST context is unaffected by its socket going away, which is the\n   * whole reason there are two (§8).\n   */\n  destroy(ctxId: string): boolean {\n    // Tickets go FIRST and unconditionally. `/api/e2ee/open` issues a ticket\n    // before it can register the context — the traffic keys do not exist until\n    // msg2 has been written — so its failure path calls this for a `ctxId` the\n    // map has never seen. Returning early there would leave a live ticket\n    // bound to a context that will never exist, which is precisely what that\n    // call site calls this to prevent.\n    for (const [ticket, entry] of this.#tickets) {\n      if (entry.ctxId === ctxId) this.#tickets.delete(ticket);\n    }\n    const context = this.#contexts.get(ctxId);\n    if (!context) return false;\n    invalidateContext(context);\n    this.#contexts.delete(ctxId);\n    this.#byDevice.get(context.deviceId)?.delete(ctxId);\n    return true;\n  }\n\n  /**\n   * Release one exact context owner without deleting a replacement that reused\n   * the same identifier.\n   */\n  destroyOwned(context: E2eeContext): boolean {\n    if (this.#contexts.get(context.ctxId) !== context) {\n      invalidateContext(context);\n      return false;\n    }\n    return this.destroy(context.ctxId);\n  }\n\n  /**\n   * Destroy every context for a device and report what the caller must finish.\n   *\n   * `POST /api/devices/:id/revoke` calls this before the socket owner closes\n   * every hub reference for the device (design.md §4.4, point 3). The returned\n   * ids are accounting, not the close list: a drained context can already be\n   * absent here while its socket is still attached to the hub.\n   */\n  destroyDevice(deviceId: string): DestroyedContexts {\n    const out: DestroyedContexts = { socketCtxIds: [], restCtxIds: [], tickets: 0 };\n    for (const context of this.forDevice(deviceId)) {\n      out.tickets += this.ticketsFor(context.ctxId);\n      if (this.destroy(context.ctxId)) {\n        (context.kind === \"ws\" ? out.socketCtxIds : out.restCtxIds).push(context.ctxId);\n      }\n    }\n    this.#byDevice.delete(deviceId);\n    return out;\n  }\n\n  /**\n   * Mint a single-use, 30-second WS ticket bound to a `ctxId`.\n   *\n   * Issued INSIDE the encrypted msg2 payload, so the long-term credential never\n   * appears in a URL again — and §10 asks the client to carry it in a WebSocket\n   * header rather than a query parameter, because a URL lands in every ingress\n   * access log.\n   *\n   * Deliberately independent of whether the context is registered yet:\n   * `/api/e2ee/open` has to name the ticket in the payload it is about to seal,\n   * and the traffic keys the context needs only exist once that message has\n   * been written. A ticket whose context never materialised resolves to a\n   * `ctxId` the registry does not know, which is the ordinary\n   * `E2EE_CTX_UNKNOWN` path.\n   */\n  issueTicket(ctxId: string, now: number = Date.now()): string {\n    this.sweepTickets(now);\n    // 16 bytes → exactly 22 base64url characters, the §12 encoding.\n    const ticket = randomBytes(16).toString(\"base64url\");\n    this.#tickets.set(ticket, { ctxId, expiresAt: now + TICKET_TTL_MS });\n    return ticket;\n  }\n\n  /**\n   * Spend a ticket. Returns its `ctxId` exactly once; every later call — and\n   * every concurrent one, since this is synchronous and Node runs it to\n   * completion — gets `null`.\n   *\n   * Consuming a ticket IS the socket context's first authenticated use, so it\n   * promotes the context out of provisional (§8).\n   */\n  consumeTicket(ticket: string, now: number = Date.now()): string | null {\n    const entry = this.#tickets.get(ticket);\n    if (!entry) return null;\n    // Deleted whether or not it was still valid: a presented ticket is spent.\n    this.#tickets.delete(ticket);\n    if (now >= entry.expiresAt) return null;\n    this.#contexts.get(entry.ctxId)?.markUsed(now);\n    return entry.ctxId;\n  }\n\n  /** Drop everything. A streamer restart does this by existing; tests need a call. */\n  clear(): void {\n    for (const context of this.#contexts.values()) invalidateContext(context);\n    this.#contexts.clear();\n    this.#byDevice.clear();\n    this.#tickets.clear();\n  }\n\n  private ticketsFor(ctxId: string): number {\n    let n = 0;\n    for (const entry of this.#tickets.values()) if (entry.ctxId === ctxId) n++;\n    return n;\n  }\n\n  /** Drop every context of one device whose deadline has passed. */\n  private sweepDevice(deviceId: string, now: number): void {\n    for (const context of this.forDevice(deviceId)) {\n      if (now >= context.deadline()) this.destroy(context.ctxId);\n    }\n  }\n\n  private sweepTickets(now: number): void {\n    for (const [ticket, entry] of this.#tickets) {\n      if (now >= entry.expiresAt) this.#tickets.delete(ticket);\n    }\n  }\n}\n\n// One registry per process. `/api/e2ee/open` writes to it; the WebSocket\n// upgrade and the REST middleware (both later PRs) read from it. It is a module\n// singleton rather than an `ApiDeps` field because contexts are process-local\n// by definition and threading it through the server wiring would put a\n// non-serialisable, restart-scoped object into the dependency record for no\n// gain — the route factory takes an override so a test uses its own.\nlet shared: E2eeContextRegistry | null = null;\n\nexport function contextRegistry(): E2eeContextRegistry {\n  if (!shared) shared = new E2eeContextRegistry();\n  return shared;\n}\n\nexport interface E2eeRequiredRefusal {\n  status: 426;\n  body: { error: string; code: \"E2EE_REQUIRED\" };\n}\n\n/**\n * The 426 answer, in ONE place.\n *\n * A device that has once paired encrypted is pinned (`e2ee_required`), and a\n * pinned device must never be served plaintext: it gets `426`, never a `401`\n * and never a plaintext answer (design.md §6.3, §8). The WebSocket upgrade and\n * the REST unseal middleware are both later PRs and both consume this — neither\n * re-implements it, because two copies of a downgrade rule is one copy that can\n * be forgotten.\n *\n * Returns `null` when the request is fine: it was sealed, or the caller is not\n * a pinned device. An unpinned device and the legacy shared key keep working\n * exactly as they do today.\n *\n * **The limit, stated rather than discovered later.** The pin is per DEVICE, so\n * this can only enforce it against a caller that resolved to a device\n * principal. A pinned phone that presents the SHARED api key resolves to\n * `legacy` — indistinguishable from the owner's laptop — and is let through\n * here. Closing that is the WebSocket upgrade's job, where `?key=` and a ticket\n * are separable, and the REST middleware's, where a pinned device has an\n * `X-TB-Ctx` to be absent.\n */\nexport function refuseUnsealedIfPinned(args: {\n  principal: Principal | null | undefined;\n  /** Just the lookup — the caller already holds the repository. */\n  devicesRepo: { get(deviceId: string): DeviceRow | null } | null | undefined;\n  /** The context this request resolved to; `null` means the request was plaintext. */\n  context: E2eeContext | null | undefined;\n}): E2eeRequiredRefusal | null {\n  if (args.context) return null;\n\n  const deviceId = args.principal?.kind === \"device\" ? args.principal.deviceId : undefined;\n  if (!deviceId) return null;\n\n  // **Fail closed from here down.** This used to end in `row?.e2ee_required !== 1`\n  // over `devicesRepo?.get(id) ?? null`, which answered \"serve it in the clear\"\n  // for a null repository, a missing row, and every value other than the exact\n  // number 1 — `true`, `\"1\"`, `undefined`. A pinned device got plaintext in all\n  // of them, from the one guard two other tracks consume for exactly this\n  // decision. A downgrade guard that defaults to allowing the downgrade is not\n  // a guard.\n  //\n  // So: unpinned is a POSITIVE answer that the store must give. Anything else —\n  // no store, an unreadable store, no row, a value that is not the number 0 —\n  // is a refusal.\n  let row: DeviceRow | null;\n  try {\n    row = args.devicesRepo?.get(deviceId) ?? null;\n  } catch {\n    // An unreadable registry cannot prove this device is unpinned.\n    return refusal();\n  }\n  if (!args.devicesRepo || !row) return refusal();\n  // `Object.hasOwn`, then the value. Reading `row.e2ee_required` bare is a\n  // prototype-chain read — the last one left in `src/e2ee/*`, and it is in the\n  // downgrade guard: `Object.prototype.e2ee_required = 0` would answer \"unpinned\"\n  // for every device whose row does not carry the column. Absent still refuses.\n  if (!Object.hasOwn(row, \"e2ee_required\")) return refusal();\n  return row.e2ee_required === 0 ? null : refusal();\n}\n\nfunction refusal(): E2eeRequiredRefusal {\n  return {\n    status: 426,\n    body: {\n      error:\n        \"This device is paired for end-to-end encryption and cannot be served in the clear. \" +\n        \"Open an encrypted context with POST /api/e2ee/open and retry.\",\n      code: \"E2EE_REQUIRED\",\n    },\n  };\n}\n\n/**\n * What a caller needs from `devicesRepo` to authenticate a context.\n *\n * Structural, not the concrete repository: the two callers hold it through\n * different dependency records, and a narrow shape is also what lets a test\n * drive the refusals without a database.\n */\nexport interface DeviceLookup {\n  get(deviceId: string): DeviceRow | null;\n  authenticate(credential: string): DeviceRow | null;\n}\n\n/**\n * A `Principal` with its `deviceId` present.\n *\n * `Principal.deviceId` is optional, because a `legacy` principal has none. A\n * context always names a device, so this is the honest return type — and it is\n * what lets a caller read `principal.deviceId` without a cast or a `?.`, which\n * matters because that field is the one the invariant is stated over.\n */\nexport type DevicePrincipal = Principal & { kind: \"device\"; deviceId: string };\n\n/**\n * The verdict `authenticateContext` returns. **Frozen at W1b's merge**: the\n * REST unseal middleware is built against this exact text, so a variant renamed\n * here is a coordinated change in two tracks, not a refactor.\n *\n * A failure carries a `reason` and nothing else — no status, no body, no\n * message. The two callers answer the same verdict differently: REST maps it to\n * an HTTP status, the WebSocket upgrade maps it to a close reason. Putting HTTP\n * policy inside a two-consumer helper is how one caller's answer silently\n * becomes the other's.\n *\n * The reasons, and what each one covers — stated because each is a fail-open\n * path a consumer cannot close from its own side once this freezes:\n *\n * - **`device-revoked`** — the context names a device whose row is **missing**\n *   OR whose `revoked_at` is set. §10: absent is not the same as invalid, and\n *   neither is success. Do not read \"revoked\" narrowly and add a row-not-found\n *   success path; a context whose device has vanished authenticates nobody.\n * - **`credential-mismatch`** — a credential was presented beside the context\n *   and does not name the context's device. **Including one that names NO\n *   device**: the shared API key is a mismatch, not an exemption. \"Names\n *   another device\" read literally would exclude the case that matters most.\n * - **`no-device-store`** — there is no device registry, or reading it threw.\n *   A refusal, never a success: *a downgrade guard that defaults to allowing\n *   the downgrade is not a guard.*\n *\n *   **Its own arm, deliberately, and not folded into `device-revoked`.** The\n *   two are not the same fact: \"this device is revoked\" is a statement about\n *   the DEVICE, and \"I could not consult the store\" is a statement about US.\n *   Collapsing them tells the caller — and every log built from the caller —\n *   that a device was revoked when what actually happened is that our own\n *   storage was unreadable. That is precisely the defect §9 split\n *   `E2EE_SEAL_FAILED` from `E2EE_SEQUENCE_VIOLATION` to prevent: a\n *   server-side fault reported as a claim about the peer. Both arms still\n *   refuse and both are terminal, so nothing about behaviour changes — only\n *   what the caller is told, which is the entire point.\n *\n * \"No such context\" is deliberately NOT a reason. Both callers resolve the\n * context before calling, so a not-found is theirs to answer — and taking the\n * resolved object also closes a race the `ctxId` shape had, where a context\n * could expire between the caller's own lookup and the helper's.\n */\nexport type E2eeContextAuth =\n  | { ok: true; principal: DevicePrincipal }\n  | { ok: false; reason: \"device-revoked\" | \"credential-mismatch\" | \"no-device-store\" };\n\n/**\n * Turn a resolved context into the principal the request runs as — or refuse.\n *\n * **The tail every sealed entry point shares**, in one place because it has two\n * callers: the WebSocket upgrade resolves its context from a single-use\n * `X-TB-Ticket`, the REST unseal middleware resolves its from `X-TB-Ctx`, and\n * from that point on the decision is identical. Forking a copy is how the two\n * would come to disagree about which of them re-checks `revoked_at`.\n *\n * The property it exists to create, stated so a test can assert it:\n *\n * > **A context-attached connection's `principal.deviceId` always equals its\n * > `context.deviceId`**, and a credential presented beside a context must name\n * > that same device or the connection is refused.\n *\n * The principal is therefore built from the CONTEXT's own device row and never\n * from the credential — there is no path here on which the two can differ,\n * which is stronger than checking that they agree.\n *\n * Three refusals, all fail-closed:\n *\n *   - **no row, or `revoked_at` set** → `403 E2EE_DEVICE_REVOKED`. Re-checked\n *     per connection rather than trusted from the handshake: a device revoked\n *     between `/api/e2ee/open` and its next request holds a handle that is\n *     still valid on its face (§10). Absent and revoked are the same refusal\n *     and neither is success;\n *   - **a credential naming another device** → `401`. \"Header device ≠ context\n *     device\" must not be undefined behaviour at a trust boundary: two answers\n *     to \"who is this\" is not a request to resolve by preferring one;\n *   - **the SHARED api key beside a context** → `401` too. It names no device,\n *     so it is a mismatch rather than an exemption — the one reading of this\n *     rule that would otherwise let the stage-3 shared-key problem through a\n *     door that had just been closed.\n *\n * **This function has no side effects: it returns a verdict and never applies\n * one.** The rule its callers follow, which is the reason and not merely the\n * behaviour:\n *\n * > **Destroy a context only when the trigger is a fact in our own database\n * > that an attacker cannot forge — `revoked_at`. Never on a mismatched\n * > credential, which is an attacker-supplied header.**\n *\n * `X-TB-Ctx` carries the `ctxId` in a PLAINTEXT header on every sealed request,\n * so it is visible to exactly the on-path party this design assumes exists.\n * Destroying on a mismatch would let anyone who sees one request kill that\n * device's context over and over: forge a credential beside the observed id,\n * watch the victim re-open, read the new id, repeat. The safeguard becomes the\n * weapon.\n *\n * The property has to hold at ANY placement on EITHER channel, so it is this\n * function's job not to destroy rather than each caller's job to remember. A\n * refusal reports its `reason`, and a caller destroys on `device-revoked` and\n * on nothing else.\n */\nexport function authenticateContext(args: {\n  /** Already resolved by the caller — from a spent ticket, or from `X-TB-Ctx`. */\n  context: E2eeContext;\n  devicesRepo: DeviceLookup | null | undefined;\n  /**\n   * The credential presented beside the context, if any.\n   *\n   * `undefined` is the ORDINARY case and an ordinary success: §13(b) says a\n   * sealed REST request carries no `Authorization` at all, and a ticketed\n   * upgrade carries none either. The mismatch check is conditional on a\n   * credential being present; its absence is never a special case.\n   */\n  presented: string | undefined;\n}): E2eeContextAuth {\n  // Never throws out of here. A store that is missing, or that throws on read,\n  // cannot prove this device is live, and \"could not check\" must not resolve to\n  // \"let it through\" — the same rule `refuseUnsealedIfPinned` learned.\n  if (!args.devicesRepo) return { ok: false, reason: \"no-device-store\" };\n\n  // **Every read of the store is inside this `try`, including the reads OF the\n  // row it returns.** `DeviceLookup` is a structural contract another\n  // repository implements, so a conforming-but-hostile lookup is the ordinary\n  // case to survive, not an exotic one: a row whose `revoked_at` is an accessor\n  // that throws puts the throw at the property read, not at the call. A `try`\n  // around only `get()` leaves that read bare, and \"never throws\" then holds\n  // against the store we happen to have rather than against the contract we\n  // published.\n  let live: { deviceId: string; capabilities: string } | null;\n  try {\n    const row: DeviceRow | null = args.devicesRepo.get(args.context.deviceId) ?? null;\n    // Absent and revoked are the same refusal, and neither is success (§10).\n    // `Object.hasOwn` before the value, like its sibling: a row that does not\n    // carry the column must not read as live through a prototype-chain hit.\n    // Both the `hasOwn` and the value read are inside the `try`.\n    live =\n      !row || !Object.hasOwn(row, \"revoked_at\") || row.revoked_at != null\n        ? null\n        : { deviceId: row.device_id, capabilities: row.capabilities };\n  } catch {\n    return { ok: false, reason: \"no-device-store\" };\n  }\n  if (!live) return { ok: false, reason: \"device-revoked\" };\n\n  if (args.presented !== undefined) {\n    let namedDeviceId: string | undefined;\n    try {\n      namedDeviceId = args.devicesRepo.authenticate(args.presented)?.device_id;\n    } catch {\n      return { ok: false, reason: \"no-device-store\" };\n    }\n    // The credential must name the CONTEXT's device. Compared against the\n    // context and not against the row, for the same reason the principal is\n    // built from the context below.\n    //\n    // A credential naming NO device — the shared API key — lands here too. It\n    // is a mismatch, not an exemption.\n    if (namedDeviceId !== args.context.deviceId) {\n      return { ok: false, reason: \"credential-mismatch\" };\n    }\n  }\n\n  // **The invariant: `principal.deviceId === context.deviceId`, by\n  // CONSTRUCTION.**\n  //\n  // The id comes from the context itself, never from the row and never from the\n  // credential. §13 claims \"there is no path on which the two can differ, which\n  // is stronger than checking that they agree\" — and while this read\n  // `row.device_id` that claim was only true as long as\n  // `get(id).device_id === id`, which is a property of whichever store is\n  // plugged in rather than of this function. A conforming `DeviceLookup` that\n  // returns a row for a different device was enough to break it. The row is\n  // still what proves the device is live and still supplies the capabilities;\n  // it just does not get to name who this is.\n  return {\n    ok: true,\n    principal: {\n      kind: \"device\",\n      deviceId: args.context.deviceId,\n      capabilities: parseCapabilities(live.capabilities),\n    },\n  };\n}\n","import { createSecretKey, type KeyObject } from \"crypto\";\n\n// The two things every E2EE module and both repositories have to agree on: the\n// envelope version, and the four rejection codes.\n//\n// They live here rather than in a route module because the record layer imports\n// them, and `record.ts` importing `api/routes/misc.routes.ts` would invert the\n// dependency direction — a crypto primitive would pull in Hono, the push\n// repository and the update config to learn the number `1`\n// (specs/end-to-end-encryption/NONCE-DESIGN.md §4).\n\n/**\n * Envelope version this build speaks.\n *\n * The single canonical copy. It is the `version` byte of every record's AAD\n * (NONCE-DESIGN §4), the `v` of `/api/pair/exchange`'s and `/api/e2ee/open`'s\n * `e2ee` field, and the `version` reported by `GET /api/info`.\n *\n * There were two hand-synced copies of this number — `E2EE_PROTOCOL_VERSION` in\n * `api/routes/misc.routes.ts` and `E2EE_EXCHANGE_VERSION` in `pair-request.ts`,\n * kept equal by a comment. W1a collapsed them into this one rather than adding\n * a third: a version that can disagree with itself is a version that eventually\n * does, and the failure (\"decryption failed\") points nowhere near the cause.\n */\nexport const E2EE_PROTOCOL_VERSION = 1;\n\n/**\n * The four rejection codes, FROZEN at W1a's tag (NONCE-DESIGN §9).\n *\n * tb-mobile consumes these strings. Renaming one is a coordinated change in\n * both repositories, not a refactor.\n *\n * The distinctions are the point, and each one was chosen because collapsing it\n * would tell a client the wrong thing:\n *\n * - `E2EE_CTX_UNKNOWN` is **recoverable**. The context is unknown, expired, or\n *   was lost to a streamer restart. The client re-handshakes once and retries.\n * - `E2EE_DEVICE_REVOKED` is a **hard failure**. Surface it; never retry.\n *   \"Absent\" and \"invalid\" are different answers, and a restart the client can\n *   silently recover from must never look like a revocation it must surface.\n * - `E2EE_SEQUENCE_VIOLATION` is a **claim about the peer**: a repeat, a gap or\n *   a reorder on a channel where none of the three is possible. It is the\n *   WebSocket close reason, so a client can tell a policy close from a drop.\n * - `E2EE_SEAL_FAILED` is a **server-side fault** — it could not seal or unseal\n *   a frame it should have been able to. Deliberately not the same code as a\n *   sequence violation: collapsing them tells a client its own frames were\n *   wrong when the server was at fault, and two failures behind one code was a\n *   P1 in the prior program.\n */\nexport const E2EE_CTX_UNKNOWN = \"E2EE_CTX_UNKNOWN\";\nexport const E2EE_DEVICE_REVOKED = \"E2EE_DEVICE_REVOKED\";\nexport const E2EE_SEQUENCE_VIOLATION = \"E2EE_SEQUENCE_VIOLATION\";\nexport const E2EE_SEAL_FAILED = \"E2EE_SEAL_FAILED\";\n\nexport type E2eeRejectionCode =\n  | typeof E2EE_CTX_UNKNOWN\n  | typeof E2EE_DEVICE_REVOKED\n  | typeof E2EE_SEQUENCE_VIOLATION\n  | typeof E2EE_SEAL_FAILED;\n\n/** Every frozen code, for a test that asserts the set has not drifted. */\nexport const E2EE_REJECTION_CODES: readonly E2eeRejectionCode[] = [\n  E2EE_CTX_UNKNOWN,\n  E2EE_DEVICE_REVOKED,\n  E2EE_SEQUENCE_VIOLATION,\n  E2EE_SEAL_FAILED,\n];\n\n/**\n * Install a readable `util.inspect` summary on an object that holds key\n * material.\n *\n * **This is for legibility, not for secrecy.** The keys themselves are\n * ECMAScript `#private` fields, which are not properties at all: invisible to\n * `showHidden`, to `customInspect: false`, to `Object.getOwnPropertyDescriptors`,\n * to spread and to `structuredClone`. That is what makes them safe against a\n * rendering mode nobody thought of.\n *\n * The history is the argument. Hiding rested first on\n * `defineProperty(enumerable: false)` — beaten by `{ showHidden: true }` — and\n * then on this handler — beaten by `{ customInspect: false }`. Together the two\n * flags rendered every traffic key in the process, and on the context registry\n * that was every live context's key in one call. Three defeats of the same\n * approach is the approach being wrong, so secrecy moved into the language and\n * this stayed only to keep a dump readable.\n *\n * Summaries print SHAPE — lengths, counts, counters — and never bytes, not even\n * a prefix.\n */\nexport function redactKeyMaterial(target: object, summary: () => string): void {\n  Object.defineProperty(target, Symbol.for(\"nodejs.util.inspect.custom\"), {\n    enumerable: false,\n    value: summary,\n  });\n}\n\n/**\n * Read an optional argument from the ARGUMENT, never from the prototype chain.\n *\n * `args.x ?? fallback` and `args.x || fallback` both walk the prototype chain,\n * so a single `Object.prototype.x = …` anywhere in the process — a dependency's\n * bad day, a test helper, a JSON parse into a bare object — silently supplies a\n * value that no caller passed. On this module that is not a nuisance: a\n * polluted `prologue` collapses §11's domain separation and lets a pairing\n * message be read as an `/open` one, and a polluted `ephemeral` pins every\n * handshake to one attacker-chosen `e`, which by §8's own rule is definitionally\n * a replay.\n *\n * `Object.hasOwn` asks the object and nothing above it.\n */\nexport function own<T, K extends keyof T>(args: T, key: K): T[K] | undefined {\n  return Object.hasOwn(args as object, key as PropertyKey) ? args[key] : undefined;\n}\n\n/**\n * The one byte-length guard, used for every fixed-width secret and handle.\n *\n * **`.length` is not byte length for a typed array.** `new Float64Array(32)`\n * has `.length === 32` and `byteLength === 256`, so a `psk.length !== 32` check\n * accepted it and completed a full `IKpsk1` handshake binding 256 zero bytes —\n * a binding over a constant, which is exactly what §11 rejected, reached\n * through a guard rather than a decision. A 32-character string passes a\n * `.length` check too and is not bytes at all.\n *\n * So the check is: a real byte array (`Uint8Array`, which `Buffer` extends),\n * one byte per element, and exactly the expected `byteLength`.\n *\n * The predicate narrows to `Uint8Array`, NOT to `Buffer`. A `Buffer` is one\n * kind of byte view; a client built on `@stablelib` hands over plain\n * `Uint8Array`s, and §13 says that client calls the AAD builder directly. While\n * this said `value is Buffer`, a correct-length plain view passed the guard and\n * then died inside the builder on `target.copy is not a function` — a\n * `TypeError` outside §9's taxonomy, for input that was right.\n *\n * The thrower is a parameter because each module owns its error type and its\n * rejection code; a shared error class here would flatten `RecordError`'s codes\n * into something no caller can act on.\n */\nexport function isBytes(value: unknown, length: number): value is Uint8Array {\n  return (\n    value instanceof Uint8Array && value.BYTES_PER_ELEMENT === 1 && value.byteLength === length\n  );\n}\n\nexport function assertBytes(\n  value: unknown,\n  length: number,\n  name: string,\n  fail: (message: string) => Error,\n): asserts value is Uint8Array {\n  if (!isBytes(value, length)) {\n    throw fail(`${name} must be exactly ${length} bytes`);\n  }\n}\n\n/**\n * A copy that shares no allocation with anything else.\n *\n * `Buffer.allocUnsafe`, `Buffer.from(string)` and `Buffer.concat` all carve out\n * of Node's shared 8 KiB pool, and a Buffer's `.buffer`/`byteOffset` expose that\n * whole pool. So a PUBLIC buffer allocated near a secret one hands the secret to\n * anyone who walks it — which is how the context registry printed live traffic\n * keys through `ctxIdRaw`, without touching a key-bearing class at all.\n * `#private` closes nothing when a private buffer shares an allocation with a\n * public one.\n *\n * `allocUnsafeSlow` allocates outside the pool, so a public buffer made this way\n * neighbours nothing.\n */\nexport function unpooled(source: Uint8Array): Buffer {\n  const copy = Buffer.allocUnsafeSlow(source.byteLength);\n  copy.set(source);\n  return copy;\n}\n\n/**\n * Import secret bytes into a `KeyObject` and wipe the JS-heap copy.\n *\n * A `KeyObject`'s material lives in OpenSSL's memory, not on the JS heap: there\n * is no property to render, no pool to walk, and nothing for a serializer to\n * reach. `createCipheriv`/`createDecipheriv` take one directly, so the bytes\n * never need to come back.\n *\n * The intermediate copy is unpooled and zeroed immediately, so the window in\n * which the key exists as JS-visible bytes is this function's body.\n */\nexport function importSecret(bytes: Uint8Array): KeyObject {\n  const copy = unpooled(bytes);\n  try {\n    return createSecretKey(copy);\n  } finally {\n    copy.fill(0);\n  }\n}\n","// The record layer: one sealed frame in, one plaintext out.\n//\n// Written against specs/end-to-end-encryption/NONCE-DESIGN.md, which is the\n// design of record and outranks design.md wherever the two disagree. Every rule\n// below names the section it comes from, because \"why is it done this way\" must\n// be answerable without re-deriving the protocol.\n//\n// Four things this file deliberately does NOT do (NONCE-DESIGN §14):\n//\n//   - it does not reuse `chachaNonce` from noise.ts. That is Noise's own nonce\n//     encoding (4 zero bytes then a LITTLE-endian counter, spec §12.3); this\n//     layer's is `direction(4) || counter(8)` BIG-endian. Two layers, two\n//     encodings, both correct for their own specification;\n//   - it does not build on `CipherState`. That object's `n` belongs to the\n//     handshake and is reset by every `MixKey`; the record layer owns a counter\n//     that is never reset for any reason;\n//   - it takes no counter from a caller. `seal(plaintext)` and `unseal(frame)`\n//     are the only two ways the counter moves, so there is exactly one place\n//     the invariant can be broken instead of one per call site (§5 R4). The one\n//     sanctioned exception is `RestResponseSealer`, below, whose \"counter\" is\n//     an echo of a request that was already accepted rather than a sequence\n//     the sender chooses;\n//   - it has no `rekey()`. A key is never replaced inside a context: a new key\n//     is a new context (§6). The invariant that buys is one sentence — *one\n//     counter value, once, per direction, per context* — with no epoch field\n//     and no key generation for a receiver to guess at.\n\nimport { createCipheriv, createDecipheriv, createHash, type KeyObject } from \"crypto\";\nimport {\n  assertBytes,\n  E2EE_CTX_UNKNOWN,\n  E2EE_PROTOCOL_VERSION,\n  E2EE_SEAL_FAILED,\n  E2EE_SEQUENCE_VIOLATION,\n  type E2eeRejectionCode,\n  importSecret,\n  isBytes,\n  own,\n  redactKeyMaterial,\n  unpooled,\n} from \"./protocol\";\n\n/** Client → server. The value is the first 4 bytes of every c2s nonce. */\nexport const DIRECTION_C2S = 0x00000001;\n/** Server → client. */\nexport const DIRECTION_S2C = 0x00000002;\nexport type Direction = typeof DIRECTION_C2S | typeof DIRECTION_S2C;\n\nexport const CHANNEL_WS = 0x01;\nexport const CHANNEL_REST_REQUEST = 0x02;\nexport const CHANNEL_REST_RESPONSE = 0x03;\nexport type Channel =\n  | typeof CHANNEL_WS\n  | typeof CHANNEL_REST_REQUEST\n  | typeof CHANNEL_REST_RESPONSE;\n\nexport const KEY_BYTES = 32;\nexport const CTX_ID_BYTES = 16;\nexport const TAG_BYTES = 16;\nexport const NONCE_BYTES = 12;\n/** `version(1) || ctxId(16) || direction(4) || counter(8) || channel(1)` (§4). */\nexport const HEADER_BYTES = 1 + CTX_ID_BYTES + 4 + 8 + 1;\n/** The REST AAD suffix: `sha256(method || \"\\n\" || path || \"\\n\" || query)` (§4). */\nexport const TARGET_HASH_BYTES = 32;\n\n/**\n * The counter ceiling. A sender AT this value refuses rather than wrapping (§7).\n *\n * Unreachable in practice — at D-3's measured ~1.6 MB/s budget it is on the\n * order of 10^11 years — and asserted precisely so it can never become a silent\n * wrap. The cost of refusing at `2^64 - 1` rather than after it is one unused\n * counter value out of 2^64.\n *\n * The refusal leaves the state unchanged, so there is no recovery that keeps\n * the context: the caller destroys it and the client opens a new one (§7).\n */\nexport const MAX_COUNTER = 2n ** 64n - 1n;\n\n/**\n * Ceiling on a frame, checked before anything is parsed or decrypted.\n *\n * NONCE-DESIGN does not name a number; this one is a size no legitimate frame\n * reaches (the largest thing the hub sends is a terminal replay, tens of KB)\n * while staying far enough above it that a bound is never the reason a real\n * message fails. Same shape as `NOISE_MAX_MESSAGE_BYTES`: bound first, allocate\n * second, never allocate in proportion to an attacker-supplied length (D-9).\n *\n * §10 is explicit that on the WebSocket this is a check AFTER allocation —\n * `@hono/node-ws` assembles the frame with `ws`'s 100 MiB default before any of\n * this runs — and that closing that gap is W1b's, with its own per-direction\n * ceilings. This constant is not that bound and must not be mistaken for it.\n */\nexport const MAX_RECORD_BYTES = 4 * 1024 * 1024;\n\nexport class RecordError extends Error {\n  readonly code: E2eeRejectionCode;\n\n  constructor(code: E2eeRejectionCode, message: string) {\n    super(message);\n    this.name = \"RecordError\";\n    this.code = code;\n  }\n}\n\n/**\n * `direction(4) || counter(8)`, big-endian, and never random (§2).\n *\n * A counter makes nonce reuse an invariant a test asserts on rather than a\n * birthday bound argued about in review (D-2). Each direction has its own key\n * AND its own label, so a record can never be reflected back at its sender: the\n * reflected frame is decrypted with the wrong key *and* carries the wrong\n * direction in both its nonce and its AAD.\n */\nexport function recordNonce(direction: Direction, counter: bigint): Buffer {\n  const nonce = Buffer.alloc(NONCE_BYTES);\n  nonce.writeUInt32BE(direction, 0);\n  nonce.writeBigUInt64BE(counter, 4);\n  return nonce;\n}\n\n/**\n * The REST AAD suffix (§4): `sha256(method || \"\\n\" || path || \"\\n\" || query)`.\n *\n * Paths and query stay plaintext (D-7), so without this nothing in the AAD\n * binds *what a sealed body is for*: an on-path attacker re-points a sealed\n * `POST /api/sessions/A/input` at session B, the body authenticates, and the\n * server runs the user's own keystrokes against a different session. Same for\n * `/cancel`, `/stop`, `/permission/answer` and `prune_all`.\n *\n * It is computed by both sides from the request line and never transmitted, so\n * the wire header stays 30 bytes.\n *\n * `query` is the raw query string WITHOUT the leading `?`, empty when there is\n * none — the two sides must agree on that spelling exactly or every sealed\n * request fails to authenticate with no other diagnostic.\n */\nexport function restTargetHash(method: string, path: string, query: string): Buffer {\n  return createHash(\"sha256\")\n    .update(`${method.toUpperCase()}\\n${path}\\n${query}`, \"utf-8\")\n    .digest();\n}\n\n/**\n * The target hash for a request, taken from the RAW wire request-target.\n *\n * **This is the `ctxId`-encoding trap one layer down** (§4), so the inputs are\n * pinned rather than described: an implementation that normalises anything here\n * rejects a legitimate request with `E2EE_SEAL_FAILED` and nothing else to\n * debug it.\n *\n *   method  upper-case ASCII, as sent\n *   path    the raw request-target path — percent-encoding PRESERVED, never\n *           decoded, never normalised. `/api/conversations/a%2Fb` and\n *           `/api/conversations/a/b` are different targets and hash differently\n *   query   the raw substring after `?`, verbatim: original parameter order,\n *           original `+` vs `%20`, duplicates kept, nothing sorted or\n *           re-serialised. The empty string when there is no `?`\n *\n * The server MUST read this from `c.env.incoming.url` — the bytes Node received\n * — and NEVER from Hono's `c.req.path`, which is percent-decoded, nor from a\n * re-serialised `URLSearchParams`, whose ordering and escaping do not round\n * trip.\n *\n * **The client hashes the ORIGIN-FORM target, not the absolute URL it fetches.**\n * That is `/api/sessions?limit=50`, never `https://host/api/sessions?limit=50`:\n * scheme, host and port are not in the hash. A client that passes the URL it is\n * about to fetch produces a different digest for every request, and each one\n * fails with `E2EE_SEAL_FAILED` and nothing else to debug — the precise trap §4\n * exists to prevent, reintroduced by a sentence. The fixture pins it:\n * `restTargetCanonicalization.hashInputUtf8` in\n * `__tests__/fixtures/e2ee-record-vectors.json` begins with the method and a\n * bare `/`.\n */\nexport function restTargetHashFromUrl(method: string, rawUrl: string): Buffer {\n  const q = rawUrl.indexOf(\"?\");\n  const path = q === -1 ? rawUrl : rawUrl.slice(0, q);\n  const query = q === -1 ? \"\" : rawUrl.slice(q + 1);\n  return restTargetHash(method, path, query);\n}\n\nexport interface RecordHeader {\n  version: number;\n  /**\n   * Any byte view, not only a `Buffer`. A `@stablelib`-based client hands over\n   * plain `Uint8Array`s and §13 has it calling this builder directly.\n   */\n  ctxId: Uint8Array;\n  direction: Direction;\n  counter: bigint;\n  channel: Channel;\n}\n\n/**\n * The AAD: the 30-byte plaintext header, plus the 32-byte target hash on the\n * REST channels (§4).\n *\n * The header travels in the clear and is authenticated, so an intermediary can\n * neither rewrite a sequence number nor re-point a record at another context.\n *\n * Exported because the interop fixtures publish it and a client implementation\n * has to reproduce it byte for byte.\n */\nexport function recordHeader(header: RecordHeader): Buffer {\n  assertBytes(header.ctxId, CTX_ID_BYTES, \"ctxId\", (m) => new RecordError(E2EE_SEAL_FAILED, m));\n  const wire = Buffer.alloc(HEADER_BYTES);\n  wire.writeUInt8(header.version, 0);\n  // `.set`, not `.copy`: `copy` is Buffer-only, so a correct-length plain\n  // `Uint8Array` — exactly what the client track produces — threw\n  // `TypeError: target.copy is not a function` AFTER passing the guard. Right\n  // input, wrong crash, outside §9's taxonomy.\n  wire.set(header.ctxId, 1);\n  wire.writeUInt32BE(header.direction, 17);\n  wire.writeBigUInt64BE(header.counter, 21);\n  wire.writeUInt8(header.channel, 29);\n  return wire;\n}\n\n/**\n * The AAD: the 30-byte header, plus the 32-byte target hash on the REST\n * channels (§4).\n *\n * **This function enforces the target rule itself.** The client track consumes\n * the AAD BUILDER, not the wrapper one layer up, so a rule checked only in\n * `assertTarget` is a rule that implementation never receives — and a forgotten\n * target then yields a silently unbound AAD on the two channels that exist to\n * bind one. `recordHeader` above is the wire bytes and carries no such rule,\n * because a header is not an AAD.\n */\nexport function recordAad(header: RecordHeader, target?: Uint8Array): Buffer {\n  validateTarget(header.channel, target);\n  const wire = recordHeader(header);\n  if (!target) return wire;\n  const aad = Buffer.alloc(HEADER_BYTES + TARGET_HASH_BYTES);\n  aad.set(wire, 0);\n  aad.set(target, HEADER_BYTES);\n  return aad;\n}\n\n/**\n * A target is required, and exactly 32 bytes, on the REST channels; forbidden\n * on the socket.\n *\n * Byte LENGTH, not `.length`: `new Float64Array(32)` has `.length === 32` and\n * 256 bytes behind it, and a 32-character string has neither. `isBytes` is the\n * one place that distinction lives (§11).\n */\nfunction validateTarget(channel: Channel, target: Uint8Array | undefined): void {\n  if (!channelBindsTarget(channel)) {\n    if (target !== undefined) {\n      throw new RecordError(E2EE_SEAL_FAILED, `channel ${channel} takes no request target`);\n    }\n    return;\n  }\n  if (!isBytes(target, TARGET_HASH_BYTES)) {\n    throw new RecordError(\n      E2EE_SEAL_FAILED,\n      `channel ${channel} requires a ${TARGET_HASH_BYTES}-byte request target`,\n    );\n  }\n}\n\n/** Whether a channel's records bind a request target (§4). */\nexport function channelBindsTarget(channel: Channel): boolean {\n  return channel === CHANNEL_REST_REQUEST || channel === CHANNEL_REST_RESPONSE;\n}\n\n/**\n * A target is required on REST and forbidden on the socket.\n *\n * Both directions of the mistake are refused rather than defaulted: a missing\n * target on REST would silently unbind the request line the suffix exists to\n * bind, and a target on the socket would be a value the peer has no way to\n * reproduce.\n */\nfunction assertTarget(channel: Channel, target: Uint8Array | undefined): void {\n  // A thin wrapper over the builder's own rule, kept only so a refusal happens\n  // BEFORE any state moves — the response sealer spends an acceptance it can\n  // never re-arm, so a check that fires deep inside `recordAad` would fire too\n  // late. Same function, so the two can never disagree.\n  validateTarget(channel, target);\n}\n\nexport interface RecordStateOptions {\n  /** 32-byte traffic key for THIS direction, or one already imported. */\n  key: Buffer | KeyObject;\n  /** The context handle, raw 16 bytes. */\n  ctxId: Buffer;\n  direction: Direction;\n  channel: Channel;\n  /**\n   * INTERNAL — tests only. A construction-time counter seed, and the one narrow\n   * exception NONCE-DESIGN §5 R4 states explicitly: the §7 exhaustion test has\n   * to place a counter near `2^64 - 1`, which it cannot do a frame at a time.\n   *\n   * This is not the forbidden shape. The seed sets a starting point ONCE, at\n   * construction; `seal` and `unseal` still take no counter and remain the sole\n   * advancers. A `seal(counter, …)` signature stays forbidden.\n   */\n  initialCounter?: bigint;\n}\n\n/**\n * One direction of one channel of one context: a key, a label, and the counter\n * that belongs to them.\n *\n * A state both seals and unseals with its single counter, because a state is\n * one direction — the sending side calls `seal`, the receiving side calls\n * `unseal`, and neither ever calls the other. Two states per channel, built by\n * `context.ts`, is what keeps the two counters independent.\n */\nexport class RecordState {\n  /** `#private`: not a property, so no rendering mode can reach it. */\n  /** OpenSSL-side, not a JS Buffer: there is nothing left on the heap to find. */\n  readonly #k: KeyObject;\n  /**\n   * `#private`, because the counter is as sensitive as the key.\n   *\n   * It was TypeScript-`private`, i.e. an ordinary property at runtime, so\n   * `(state as any).n = 0n` performed the counter reset §14 forbids — and this\n   * ships as an untyped artefact, where `as any` is just how you write it. We\n   * moved the key material and stopped; the state that makes a nonce unique\n   * never moved.\n   */\n  #n: bigint;\n  /**\n   * Public by design — the AAD binds it and callers read it.\n   *\n   * UNPOOLED, therefore. A pooled public Buffer hands out a window onto the\n   * shared 8 KiB allocation its neighbours live in, which is how a registry\n   * walk reached live key bytes without touching a key-bearing class at all.\n   */\n  readonly ctxId: Buffer;\n  readonly direction: Direction;\n  readonly channel: Channel;\n\n  constructor(options: RecordStateOptions) {\n    const fail = (m: string) => new RecordError(E2EE_SEAL_FAILED, m);\n    assertBytes(options.ctxId, CTX_ID_BYTES, \"ctxId\", fail);\n    this.#k = toSecret(options.key, fail);\n    redactKeyMaterial(\n      this,\n      () =>\n        `RecordState { channel: ${this.channel}, direction: ${this.direction}, counter: ${this.#n}, key: <#private> }`,\n    );\n    this.ctxId = unpooled(options.ctxId);\n    this.direction = options.direction;\n    this.channel = options.channel;\n    this.#n = own(options, \"initialCounter\") ?? 0n;\n  }\n\n  /** The next counter this state will use. Read-only: nothing outside sets it. */\n  get counter(): bigint {\n    return this.#n;\n  }\n\n  /**\n   * Seal one record. The counter advances by exactly 1 AFTER success, never\n   * before (§5 R1).\n   *\n   * Returns `header(30) || ciphertext || tag(16)`.\n   */\n  seal(plaintext: Buffer, target?: Buffer): Buffer {\n    assertTarget(this.channel, target);\n    // Refuse rather than wrap (§7). Checked before the header is built, so a\n    // refusal costs nothing and leaves the state exactly as it was — which is\n    // what lets the caller destroy the context rather than repair it.\n    if (this.#n >= MAX_COUNTER) {\n      throw new RecordError(\n        E2EE_SEAL_FAILED,\n        \"record counter exhausted; refusing to send rather than reuse a nonce\",\n      );\n    }\n    const frame = sealWith(\n      this.#k,\n      this.ctxId,\n      this.direction,\n      this.channel,\n      this.#n,\n      plaintext,\n      target,\n    );\n    this.#n += 1n;\n    return frame;\n  }\n\n  /**\n   * Unseal one record, or throw.\n   *\n   * **Authenticate first, then compare the counter (§5 R2 ordering).** The\n   * nonce is built from the header either way, so the AEAD can run before the\n   * sequence check — and it must. Checking the counter first would make\n   * `E2EE_SEQUENCE_VIOLATION` an *unauthenticated verdict about the peer*:\n   * anyone who can inject a frame reads `ctxId` from a previous plaintext\n   * header, sends garbage with a wrong counter, and the server logs a sequence\n   * violation naming a device that did nothing and closes its socket. It buys\n   * no DoS protection either — the same attacker can as cheaply send a frame\n   * with the *right* counter, which is authenticated anyway.\n   *\n   * Strict once authenticated: `counter == expected` exactly, no window (§5 R2).\n   * A WebSocket runs over one TCP connection, so it is ordered and gap-free by\n   * construction; a repeat, a gap or a reorder is a protocol violation.\n   *\n   * A rejected frame advances NOTHING (§5 R3).\n   */\n  unseal(frame: Buffer, target?: Buffer): Buffer {\n    const { plaintext, counter } = this.openFrame(frame, target);\n\n    // Only now — the frame is proven to come from the peer, so a sequence\n    // violation is a true claim about the peer rather than about an injector.\n    if (counter !== this.#n) {\n      throw new RecordError(\n        E2EE_SEQUENCE_VIOLATION,\n        `record counter ${counter} is not the expected ${this.#n}`,\n      );\n    }\n    this.#n += 1n;\n    return plaintext;\n  }\n\n  /**\n   * The AEAD step WITHOUT the sequence check — the sanctioned seam for the REST\n   * sliding-window receiver (§13).\n   *\n   * `unseal` enforces strict `expected`, which is right for the socket and\n   * wrong for a channel React Query drives concurrently. The REST track needs\n   * the authenticated plaintext *and* the counter the frame claimed so its\n   * 1024-bit window can decide acceptance. Exposing that here rather than\n   * leaving it to be improvised is the whole point: the alternative is a second\n   * implementation of nonce and AAD assembly in another module, which is\n   * exactly how two implementations come to disagree.\n   *\n   * Three properties this deliberately keeps:\n   *\n   *   - it is the REST REQUEST channel only. On the socket a window is a\n   *     protocol violation (§5 R2), and a seam that could relax it there would\n   *     be a hole in the rule this layer exists to hold;\n   *   - it advances NOTHING. The window owns acceptance and replay bookkeeping,\n   *     so a state that advanced here would be two authorities on one counter;\n   *   - every other check still runs — bounds, version, `ctxId`, direction,\n   *     channel, the target hash and the tag. Only the sequence rule is the\n   *     caller's.\n   *\n   * The caller must therefore still refuse a counter its window rejects, and\n   * must never seal a response for one (§13(a)).\n   */\n  unsealUnchecked(frame: Buffer, target: Buffer): { plaintext: Buffer; counter: bigint } {\n    if (this.channel !== CHANNEL_REST_REQUEST) {\n      throw new RecordError(\n        E2EE_SEAL_FAILED,\n        \"unsealUnchecked is the REST request channel's seam; the socket's counter is strict\",\n      );\n    }\n    return this.openFrame(frame, target);\n  }\n\n  /**\n   * Everything both receive paths share: bounds, header checks, and the AEAD.\n   *\n   * One parser, two policies. The sequence rule is the only thing that differs\n   * between the socket and REST, so it is the only thing left to the callers —\n   * a second copy of the header checks is how the two channels would drift into\n   * disagreeing about what a frame even is.\n   */\n  private openFrame(frame: Buffer, target?: Buffer): { plaintext: Buffer; counter: bigint } {\n    assertTarget(this.channel, target);\n    // Bounds first, on the length of the buffer we were handed — nothing is\n    // parsed until the frame could plausibly be one (D-9).\n    // `byteLength`, not `.length` — the units this module insists on everywhere\n    // else. For a `Buffer` they agree; for any other byte view handed to a\n    // public entry point they need not, and this is the D-9 bound.\n    if (frame.byteLength < HEADER_BYTES + TAG_BYTES) {\n      throw new RecordError(E2EE_SEAL_FAILED, \"record shorter than its header and tag\");\n    }\n    if (frame.byteLength > MAX_RECORD_BYTES) {\n      throw new RecordError(E2EE_SEAL_FAILED, \"record too large\");\n    }\n\n    const header = frame.subarray(0, HEADER_BYTES);\n    const version = header.readUInt8(0);\n    if (version !== E2EE_PROTOCOL_VERSION) {\n      throw new RecordError(E2EE_SEAL_FAILED, `unsupported record version ${version}`);\n    }\n    // The context check stays FIRST, before the AEAD and before any allocation:\n    // a frame addressed elsewhere is the cheapest possible rejection and must\n    // not cost a ChaCha20 pass over an attacker-sized buffer (§10). It is\n    // observable from outside as the CODE — `E2EE_CTX_UNKNOWN`, not\n    // `E2EE_SEAL_FAILED`, which is what a check placed after the AEAD would\n    // produce. §9: the log line for this says *misaddressed*, not \"unknown\" —\n    // the frame names a context, just not this one.\n    if (!header.subarray(1, 1 + CTX_ID_BYTES).equals(this.ctxId)) {\n      throw new RecordError(E2EE_CTX_UNKNOWN, \"record is addressed to another context\");\n    }\n    if (header.readUInt32BE(17) !== this.direction) {\n      throw new RecordError(E2EE_SEAL_FAILED, \"record carries the wrong direction\");\n    }\n    if (header.readUInt8(29) !== this.channel) {\n      throw new RecordError(E2EE_SEAL_FAILED, \"record carries the wrong channel\");\n    }\n\n    const counter = header.readBigUInt64BE(21);\n    return {\n      plaintext: openWith(this.#k, this.direction, counter, frame, header, target),\n      counter,\n    };\n  }\n}\n\n/**\n * Seals a REST response under the counter of the request it answers (§13(a)).\n *\n * **This is the one sanctioned `seal(counter, …)` shape** and §5 R4 says why it\n * is not the forbidden one: R4 governs *sequence* counters — a value the sender\n * chooses and advances — and a response echo is not one. The value is dictated\n * by a request that was already accepted, and this is a distinct class from\n * `RecordState`, so a caller cannot reach a sequence counter through it.\n *\n * Nonce uniqueness for `(k_s2c, 2‖counter)` rests entirely on the rule below:\n *\n * > **At most one sealed response per accepted request counter.** A request\n * > rejected by the window or by the AEAD gets a PLAINTEXT error and never a\n * > sealed body — including through the framework's error path.\n *\n * So `accept()` is called only by a successful request unseal, and `seal()`\n * spends that acceptance. A response for a counter that was never accepted, or\n * a second response for one, is refused here rather than trusted to a caller.\n *\n * The alternative — a second sender counter for responses — was rejected: the\n * response would then not be bound to its request at all, and because the\n * client issues concurrent requests an on-path attacker could swap two in-flight\n * sealed responses within one context, both authenticating with fresh counters.\n */\nexport class RestResponseSealer {\n  /** `#private`: not a property, so no rendering mode can reach it. */\n  readonly #k: KeyObject;\n  readonly #ctxId: Buffer;\n  /** Counters accepted and not yet answered. Bounded by the window below. */\n  readonly #outstanding = new Set<bigint>();\n  /**\n   * RFC-6479-style bitmap of counters already ANSWERED, over the last\n   * `WINDOW_COUNTERS` positions ending at `acceptedHighWater`.\n   *\n   * This is the class's own memory of what it has done, and it is the whole\n   * reason the nonce invariant holds here. Until it existed, `accept()` armed\n   * unconditionally and `seal()` recorded nothing, so\n   * `accept(7) → seal(7) → accept(7) → seal(7)` produced two records under\n   * `(k_s2c, 2‖7)`: keystream reuse, demonstrated by an adversary as\n   * `xor(c1, c2) === xor(p1, p2)`. What made it unreachable in practice was the\n   * STRICT receive counter one layer up — precisely the code §13 schedules the\n   * sliding window to replace. An invariant held by a layer scheduled for\n   * replacement is not held.\n   *\n   * A bitmap rather than a capped Set for two reasons: it is bounded by\n   * construction, so there is no overflow table to shed entries into a\n   * non-recoverable dead end (the earlier `evicted` Set did exactly that); and\n   * it is the shape the REST track needs for the receive window, so the two\n   * halves of §13 agree instead of being invented twice.\n   */\n  readonly #answeredBits: Uint8Array;\n  /** Highest counter ever accepted. `-1n` means \"nothing yet\". */\n  /**\n   * `#private` with the rest of the window state: an attacker who can write\n   * `sealer.acceptedHighWater = -1n; sealer.answeredBits.fill(0)` re-arms every\n   * answered counter, which is keystream reuse under `(k_s2c, 2‖counter)` —\n   * the one failure this design exists to prevent, reached without touching a\n   * key at all.\n   */\n  #acceptedHighWater = -1n;\n\n  /**\n   * How far behind the high-water mark a counter is still tracked.\n   *\n   * Well above any realistic concurrency, and the same width as the 1024-bit\n   * REST receive window — deliberately, because a counter that window will\n   * still accept must be one this can still answer.\n   */\n  static readonly WINDOW_COUNTERS = 1024;\n  /** @deprecated Kept as the old name for one release; same number. */\n  static readonly MAX_OUTSTANDING = RestResponseSealer.WINDOW_COUNTERS;\n\n  constructor(options: { key: Buffer | KeyObject; ctxId: Buffer }) {\n    const fail = (m: string) => new RecordError(E2EE_SEAL_FAILED, m);\n    assertBytes(options.ctxId, CTX_ID_BYTES, \"ctxId\", fail);\n    this.#k = toSecret(options.key, fail);\n    this.#ctxId = unpooled(options.ctxId);\n    this.#answeredBits = new Uint8Array(RestResponseSealer.WINDOW_COUNTERS / 8);\n    redactKeyMaterial(\n      this,\n      () =>\n        `RestResponseSealer { outstanding: ${this.#outstanding.size}, highWater: ${this.#acceptedHighWater}, key: <#private> }`,\n    );\n  }\n\n  /**\n   * Arm exactly one response for a request counter that was just accepted.\n   *\n   * A second acceptance of one counter is an upstream bug, and it must never\n   * mint a second nonce: it is refused here rather than trusted to whatever\n   * sits above.\n   */\n  accept(counter: bigint): void {\n    if (this.#outstanding.has(counter)) {\n      throw new RecordError(\n        E2EE_SEAL_FAILED,\n        \"that request counter is already accepted and awaiting its one response\",\n      );\n    }\n    if (this.belowWindow(counter)) {\n      // Cannot prove it was never answered, so it is refused — but as the\n      // RECOVERABLE code: this is the saturation edge, and a dead end here is\n      // the failure §13(a) forbids.\n      throw new RecordError(\n        E2EE_CTX_UNKNOWN,\n        \"that request counter is further behind than this context tracks; re-open and retry\",\n      );\n    }\n    if (this.isAnswered(counter)) {\n      throw new RecordError(\n        E2EE_SEAL_FAILED,\n        \"that request counter has already been answered; it can never be answered again\",\n      );\n    }\n    this.advanceTo(counter);\n    this.#outstanding.add(counter);\n  }\n\n  /** Whether a response may still be sealed for this counter. */\n  isOutstanding(counter: bigint): boolean {\n    return this.#outstanding.has(counter);\n  }\n\n  seal(requestCounter: bigint, plaintext: Buffer, target: Buffer): Buffer {\n    // The response channel binds its request target too (§4), and this class\n    // never checked it: a caller could seal a REST response with no target or a\n    // short one, and the binding was silently absent on the one path nothing\n    // exercised — the path the REST middleware track will call. `target` is\n    // non-optional in the signature AND checked at runtime, because a type is\n    // not a check for a module another repository consumes.\n    assertTarget(CHANNEL_REST_RESPONSE, target);\n    if (!this.#outstanding.delete(requestCounter)) {\n      if (this.belowWindow(requestCounter)) {\n        throw new RecordError(\n          E2EE_CTX_UNKNOWN,\n          \"that request counter is further behind than this context tracks; re-open and retry\",\n        );\n      }\n      if (this.isAnswered(requestCounter)) {\n        throw new RecordError(\n          E2EE_SEAL_FAILED,\n          \"that request counter has already been answered; sealing again would reuse a nonce\",\n        );\n      }\n      if (requestCounter <= this.#acceptedHighWater) {\n        // Accepted at some point and no longer tracked: recoverable.\n        throw new RecordError(\n          E2EE_CTX_UNKNOWN,\n          \"no accepted request is waiting on that counter; re-open and retry\",\n        );\n      }\n      throw new RecordError(\n        E2EE_SEAL_FAILED,\n        \"no accepted request is waiting on that counter; a rejected request gets a plaintext error\",\n      );\n    }\n    // Marked BEFORE the record exists, so no ordering leaves the counter\n    // re-armable if `sealWith` throws.\n    this.markAnswered(requestCounter);\n    return sealWith(\n      this.#k,\n      this.#ctxId,\n      DIRECTION_S2C,\n      CHANNEL_REST_RESPONSE,\n      requestCounter,\n      plaintext,\n      target,\n    );\n  }\n\n  // ── the window ───────────────────────────────────────────────────\n  //\n  // Bits are indexed modulo the window width, so sliding forward must CLEAR the\n  // positions the window newly covers or a wrapped index reads as a stale\n  // \"answered\". Everything that falls out of the window is refused rather than\n  // forgotten, which is what makes bounded memory safe here.\n\n  private bit(counter: bigint): { index: number; mask: number } {\n    const position = Number(counter % BigInt(RestResponseSealer.WINDOW_COUNTERS));\n    return { index: position >> 3, mask: 1 << (position & 7) };\n  }\n\n  private belowWindow(counter: bigint): boolean {\n    return (\n      this.#acceptedHighWater >= 0n &&\n      counter + BigInt(RestResponseSealer.WINDOW_COUNTERS) <= this.#acceptedHighWater\n    );\n  }\n\n  /**\n   * Whether this counter is recorded as answered.\n   *\n   * **Only meaningful at or below the high-water mark.** Bits are indexed\n   * modulo the window width and are cleared as the window slides forward, so a\n   * counter ABOVE the mark reads a bit belonging to a position the window has\n   * not reached yet — 1024 counters ago, not this one. Reading it unguarded is\n   * how the first draft of this class refused a perfectly fresh counter as\n   * \"already answered\", which its own test caught.\n   */\n  private isAnswered(counter: bigint): boolean {\n    if (counter > this.#acceptedHighWater || this.belowWindow(counter)) return false;\n    const { index, mask } = this.bit(counter);\n    return (this.#answeredBits[index] & mask) !== 0;\n  }\n\n  private markAnswered(counter: bigint): void {\n    const { index, mask } = this.bit(counter);\n    this.#answeredBits[index] |= mask;\n  }\n\n  private advanceTo(counter: bigint): void {\n    if (counter <= this.#acceptedHighWater) return;\n    const width = BigInt(RestResponseSealer.WINDOW_COUNTERS);\n    if (this.#acceptedHighWater < 0n || counter - this.#acceptedHighWater >= width) {\n      this.#answeredBits.fill(0);\n    } else {\n      for (let c = this.#acceptedHighWater + 1n; c <= counter; c++) {\n        const { index, mask } = this.bit(c);\n        this.#answeredBits[index] &= ~mask;\n      }\n    }\n    this.#acceptedHighWater = counter;\n    // Outstanding entries that fell out of the window are dropped, so this set\n    // is bounded too. Dropping is safe because `accept` refuses to re-arm them\n    // and `seal` answers them with the recoverable code.\n    for (const pending of this.#outstanding) {\n      if (this.belowWindow(pending)) this.#outstanding.delete(pending);\n    }\n  }\n}\n\n/**\n * Build a record state.\n *\n * The factory rather than the constructor is what callers use, so the\n * `initialCounter` seam stays visible as a named option in one place\n * (NONCE-DESIGN §5 R4) instead of spreading through `new RecordState(...)` call\n * sites.\n */\nexport function createRecordState(options: RecordStateOptions): RecordState {\n  return new RecordState(options);\n}\n\n// ─── shared primitives ──────────────────────────────────────────────\n\n/**\n * A traffic key as a `KeyObject`, from either a Buffer or an already-imported\n * key.\n *\n * Accepting a Buffer keeps every existing call site working while guaranteeing\n * that what the object STORES is never a JS Buffer: the caller's bytes are\n * copied, imported, and the copy wiped, so no key survives on the heap for a\n * pool walk to find.\n */\nfunction toSecret(key: Buffer | KeyObject, fail: (m: string) => Error): KeyObject {\n  if (typeof key === \"object\" && key !== null && !isBytes(key, KEY_BYTES)) {\n    // An already-imported key, or a mistake. A secret KeyObject is accepted only\n    // at the right WIDTH: `type === \"secret\"` is the presence-vs-length class\n    // surviving in the one guard that does not route through `isBytes`, and a\n    // 16-byte secret would otherwise be installed as a traffic key.\n    const imported = key as KeyObject;\n    if (\"type\" in key && imported.type === \"secret\") {\n      if (imported.symmetricKeySize !== KEY_BYTES) {\n        throw fail(`traffic key must be exactly ${KEY_BYTES} bytes`);\n      }\n      return imported;\n    }\n    throw fail(`traffic key must be exactly ${KEY_BYTES} bytes`);\n  }\n  assertBytes(key, KEY_BYTES, \"traffic key\", fail);\n  return importSecret(key);\n}\n\nfunction sealWith(\n  key: KeyObject,\n  ctxId: Buffer,\n  direction: Direction,\n  channel: Channel,\n  counter: bigint,\n  plaintext: Buffer,\n  target: Buffer | undefined,\n): Buffer {\n  const framing = { version: E2EE_PROTOCOL_VERSION, ctxId, direction, counter, channel };\n  // The 30-byte plaintext header is what goes on the wire; the AAD is that plus\n  // the 32-byte target hash on the REST channels. Both come from `recordAad`,\n  // and the target is passed INTO it rather than concatenated beside it —\n  // otherwise `recordAad`'s \"target hash must be 32 bytes\" check is unreachable\n  // from every seal path, which is exactly how a short or absent target got\n  // through on channel 0x03.\n  const header = recordHeader(framing);\n  const aad = recordAad(framing, target);\n  const cipher = createCipheriv(\"chacha20-poly1305\", key, recordNonce(direction, counter), {\n    authTagLength: TAG_BYTES,\n  });\n  cipher.setAAD(aad, { plaintextLength: plaintext.length });\n  const body = cipher.update(plaintext);\n  const rest = cipher.final();\n  const tag = cipher.getAuthTag();\n  // Assembled UNPOOLED. `Buffer.concat` carves out of the shared pool, and a\n  // frame is public: handing one out would hand out a window onto whatever the\n  // pool holds next to it (§13).\n  const frame = Buffer.allocUnsafeSlow(header.length + body.length + rest.length + tag.length);\n  header.copy(frame, 0);\n  body.copy(frame, header.length);\n  rest.copy(frame, header.length + body.length);\n  tag.copy(frame, header.length + body.length + rest.length);\n  return frame;\n}\n\nfunction openWith(\n  key: KeyObject,\n  direction: Direction,\n  counter: bigint,\n  frame: Buffer,\n  header: Buffer,\n  target: Buffer | undefined,\n): Buffer {\n  const body = frame.subarray(HEADER_BYTES, frame.length - TAG_BYTES);\n  const tag = frame.subarray(frame.length - TAG_BYTES);\n  const decipher = createDecipheriv(\"chacha20-poly1305\", key, recordNonce(direction, counter), {\n    authTagLength: TAG_BYTES,\n  });\n  // The AAD is the header AS RECEIVED — that is what makes the header\n  // authenticated rather than merely present — plus the target the receiver\n  // computed from the request line it is actually serving. Built through\n  // `recordAad` on both sides, so the 32-byte target check is reachable here\n  // too rather than only on the seal path.\n  decipher.setAAD(\n    target\n      ? recordAad(\n          {\n            version: header.readUInt8(0),\n            ctxId: header.subarray(1, 1 + CTX_ID_BYTES),\n            direction: header.readUInt32BE(17) as Direction,\n            counter: header.readBigUInt64BE(21),\n            channel: header.readUInt8(29) as Channel,\n          },\n          target,\n        )\n      : header,\n    { plaintextLength: body.length },\n  );\n  decipher.setAuthTag(tag);\n  try {\n    return Buffer.concat([decipher.update(body), decipher.final()]);\n  } catch {\n    // Nothing advances. §5 R3.\n    throw new RecordError(E2EE_SEAL_FAILED, \"record failed authentication\");\n  }\n}\n","// The REST request channel's replay window: an RFC-6479-style sliding bitmap\n// over authenticated counters.\n//\n// Written against specs/end-to-end-encryption/NONCE-DESIGN.md §5, §9 and §13,\n// and design.md §3.4. The two channels get genuinely different rules and this\n// class is one half of that split:\n//\n//   - the WebSocket receiver stays STRICT — `counter == expected`, no window\n//     (§5 R2). A window there would forfeit the property that makes replay\n//     structurally impossible on the highest-volume channel, so nothing in this\n//     file is reachable from `CHANNEL_WS`: `RecordState.unsealUnchecked`, the\n//     only seam that hands a counter to this class, refuses every channel but\n//     the REST request one;\n//   - the REST receiver needs a window because HTTP requests are concurrent and\n//     React Query issues them concurrently. A strict counter rejects a\n//     perfectly legitimate out-of-order arrival (design.md §3.4).\n//\n// This class decides ACCEPTANCE and nothing else. It advances no counter, holds\n// no key, and never sees a nonce, an AAD or a frame: it is handed a counter the\n// AEAD has already authenticated, and answers \"record it\" or \"throw\". Ordering\n// matters and is the caller's to get right — authenticate first, then decide\n// (§5 R2 ordering) — because a pre-authentication counter check makes\n// `E2EE_SEQUENCE_VIOLATION` an unauthenticated verdict about the peer and buys\n// no protection at all.\n\nimport { E2EE_CTX_UNKNOWN, E2EE_SEQUENCE_VIOLATION } from \"./protocol\";\nimport { MAX_COUNTER, RecordError, RestResponseSealer } from \"./record\";\n\n/**\n * The receive-side sliding window for one REST context's request channel.\n *\n * `admit(counter)` either returns — the counter is accepted and recorded — or\n * throws a `RecordError` carrying one of the two §9 codes that apply here:\n *\n *   - `E2EE_SEQUENCE_VIOLATION` for a counter this window can PROVE it has\n *     already seen, and for one outside the counter's own range. A claim about\n *     the peer, and true only because the frame was authenticated first;\n *   - `E2EE_CTX_UNKNOWN` for one that fell out of the window. It cannot be\n *     proven a replay — the bit that would say so has been reused by a counter\n *     1024 positions later — so it gets the RECOVERABLE code, which is what\n *     `RestResponseSealer.accept` already answers on its own below-window edge.\n *     A client that lags this far behind re-opens and retries rather than\n *     dead-ending.\n */\nexport class RestReceiveWindow {\n  /**\n   * The width, in counters. Deliberately the SAME width as the response\n   * sealer's, and taken from it rather than repeated as a literal.\n   *\n   * §13(a) is what couples them: at most one sealed response per accepted\n   * request counter, and a counter this window still accepts must therefore be\n   * one the sealer can still answer. Two literals would let the widths drift in\n   * a later edit, and the failure that drift produces is not a rejected request\n   * — it is a request accepted here and refused there, i.e. an accepted request\n   * that can never be answered.\n   */\n  static readonly WINDOW_COUNTERS = RestResponseSealer.WINDOW_COUNTERS;\n\n  /**\n   * `#private`, both of them, for the reason §13 states verbatim: *\"The state\n   * that makes a nonce unique is as sensitive as the key … with them as\n   * ordinary properties, one assignment re-arms every answered counter, which\n   * is keystream reuse.\"*\n   *\n   * TypeScript `private` is NOT sufficient — it is an ordinary own property at\n   * runtime, and this module is consumed from a repository that has no types at\n   * all. `window.highWater = -1n` would re-admit every counter this context has\n   * ever seen, each of which the sealer would then be asked to answer a second\n   * time under `(k_s2c, 2‖counter)`.\n   */\n  readonly #seenBits: Uint8Array;\n  /** Highest counter ever admitted. `-1n` means \"nothing yet\". */\n  #highWater = -1n;\n\n  constructor() {\n    this.#seenBits = new Uint8Array(RestReceiveWindow.WINDOW_COUNTERS / 8);\n  }\n\n  /**\n   * Judge one AUTHENTICATED counter. Returns on acceptance; throws otherwise.\n   *\n   * The four outcomes, in the order they are decided — and the order is\n   * load-bearing. Below-window is tested BEFORE the bit, because a counter that\n   * has fallen out of the window reads a bit that now belongs to the counter\n   * 1024 positions later: whatever that bit says is about a different counter,\n   * so the range check has to answer first.\n   */\n  admit(counter: bigint): void {\n    // A counter outside the range a nonce can even encode. `unsealUnchecked`\n    // reads its counter with `readBigUInt64BE`, so this is unreachable from the\n    // wire and is here for every other caller: a bigint is not bounded by its\n    // type the way a `uint64` field is.\n    if (counter < 0n || counter > MAX_COUNTER) {\n      throw new RecordError(\n        E2EE_SEQUENCE_VIOLATION,\n        `record counter ${counter} is outside the range of a record nonce`,\n      );\n    }\n\n    if (counter > this.#highWater) {\n      this.#advanceTo(counter);\n      this.#markSeen(counter);\n      return;\n    }\n\n    if (this.#belowWindow(counter)) {\n      throw new RecordError(\n        E2EE_CTX_UNKNOWN,\n        `record counter ${counter} is further behind than this context tracks; re-open and retry`,\n      );\n    }\n\n    if (this.#isSeen(counter)) {\n      throw new RecordError(\n        E2EE_SEQUENCE_VIOLATION,\n        `record counter ${counter} has already been received`,\n      );\n    }\n\n    this.#markSeen(counter);\n  }\n\n  // ── the window ───────────────────────────────────────────────────\n  //\n  // The same ARITHMETIC as `RestResponseSealer`'s answered bitmap, deliberately:\n  // the two halves of §13 have to agree about what \"inside the window\" means,\n  // and `#bit`, `#belowWindow` and `#advanceTo` agree by being the same\n  // computation rather than by two independent derivations that happen to match\n  // today.\n  //\n  // **The guard placement deliberately differs, and this is the one difference.**\n  // `RestResponseSealer.isAnswered` re-tests the range itself and returns\n  // `false` outside it; `#isSeen` does not, because `admit` has already\n  // established both preconditions before it asks. Neither shape can fail open:\n  // both rejection tests sit in front of `#markSeen`, so a counter failing\n  // either one never reaches acceptance under any ordering of the two. What the\n  // order decides is *which* §9 code a below-window counter with a stale set bit\n  // receives — and §9 requires the recoverable `E2EE_CTX_UNKNOWN`, because a\n  // counter whose slot now belongs to a counter 1024 positions later is one we\n  // cannot prove anything about, and `E2EE_SEQUENCE_VIOLATION` is a claim about\n  // the peer. `__tests__/e2ee-rest-window.test.ts::decides below-window before\n  // it reads the bit` pins that.\n  //\n  // The helpers are `#private` as well as the state — `#advanceTo` clears bits,\n  // so a reachable one is the same re-arming assignment the fields are private\n  // to prevent.\n\n  #bit(counter: bigint): { index: number; mask: number } {\n    const position = Number(counter % BigInt(RestReceiveWindow.WINDOW_COUNTERS));\n    return { index: position >> 3, mask: 1 << (position & 7) };\n  }\n\n  #belowWindow(counter: bigint): boolean {\n    return (\n      this.#highWater >= 0n &&\n      counter + BigInt(RestReceiveWindow.WINDOW_COUNTERS) <= this.#highWater\n    );\n  }\n\n  /**\n   * Whether this counter is recorded as received.\n   *\n   * **Only meaningful at or below the high-water mark and inside the window.**\n   * Bits are indexed modulo the width, so a counter outside that range reads a\n   * bit belonging to a different counter entirely. `admit` establishes both\n   * before it asks, and this deliberately does NOT re-test them the way\n   * `RestResponseSealer.isAnswered` does — see the block comment above.\n   */\n  #isSeen(counter: bigint): boolean {\n    const { index, mask } = this.#bit(counter);\n    return (this.#seenBits[index] & mask) !== 0;\n  }\n\n  #markSeen(counter: bigint): void {\n    const { index, mask } = this.#bit(counter);\n    this.#seenBits[index] |= mask;\n  }\n\n  /**\n   * Slide the window forward, CLEARING every position it newly covers.\n   *\n   * The clear is the load-bearing half. Bits are indexed modulo the width, so\n   * without it counter `c + 1024` reads the bit `c` set and is refused as a\n   * replay it has nothing to do with — a legitimate request rejected, and one\n   * that stays rejected for as long as the client keeps counting.\n   *\n   * The cost is O(min(delta, width)), never O(delta): an advance of more than\n   * one full width has overwritten every position anyway, so it clears the\n   * whole bitmap in one call instead of looping. A context whose client jumps\n   * 10^9 counters must not spend 10^9 iterations proving that.\n   */\n  #advanceTo(counter: bigint): void {\n    const width = BigInt(RestReceiveWindow.WINDOW_COUNTERS);\n    if (this.#highWater < 0n || counter - this.#highWater >= width) {\n      this.#seenBits.fill(0);\n    } else {\n      for (let c = this.#highWater + 1n; c <= counter; c++) {\n        const { index, mask } = this.#bit(c);\n        this.#seenBits[index] &= ~mask;\n      }\n    }\n    this.#highWater = counter;\n  }\n}\n","// The REST envelope: unseal on the way in, seal on the way out.\n//\n// Written against specs/end-to-end-encryption/NONCE-DESIGN.md §4, §5, §9, §10\n// and §13, design.md §3.2/§3.4/§3.6, and dilemmas D-7 and D-9.\n//\n// **It sits between `corsMiddleware` and `authMiddleware`** (`api/app.ts`).\n// After CORS, because a preflight must be answerable without a context — an\n// `OPTIONS` carries no `X-TB-Ctx` and never will. Before auth, because that is\n// the whole point of the ordering: the credential travels *inside* the envelope\n// (D-9, §13(b)), so authentication cannot run until the body is plaintext.\n//\n// That places it on the pre-authentication attack surface, which is what the\n// ladder below is for. **The one line everything follows from:**\n//\n//   > every refusal before a successful `unsealRequest` is plaintext;\n//   > everything from a successful `unsealRequest` onward is sealed.\n//\n// A rejection must never carry a sealed body, because a sealed body would mean\n// spending a response counter on a request that was never accepted — and §13(a)\n// makes \"at most one sealed response per accepted request counter\" the rule\n// nonce uniqueness for `(k_s2c, 2‖counter)` rests on.\n//\n// **This middleware never touches `sealer.accept`.** `Context.unsealRequest` is\n// its sole caller, and that is what keeps the receive window's high-water mark\n// and the response sealer's acceptance set in lockstep. A second caller\n// anywhere produces requests that are accepted and can never be answered.\n\nimport type { MiddlewareHandler } from \"hono\";\nimport type { ContentfulStatusCode } from \"hono/utils/http-status\";\nimport { IncomingMessage, type OutgoingHttpHeaders, type ServerResponse } from \"http\";\nimport { authenticateContext, contextRegistry, type E2eeContextRegistry } from \"../../e2ee/context\";\nimport {\n  E2EE_CTX_UNKNOWN,\n  E2EE_DEVICE_REVOKED,\n  E2EE_SEAL_FAILED,\n  E2EE_SEQUENCE_VIOLATION,\n  type E2eeRejectionCode,\n} from \"../../e2ee/protocol\";\nimport {\n  CTX_ID_BYTES,\n  MAX_RECORD_BYTES,\n  RecordError,\n  restTargetHashFromUrl,\n} from \"../../e2ee/record\";\nimport { getLogger } from \"../../logger\";\nimport { hasCapability, requiredCapability } from \"../../services/security/capabilities\";\nimport type { AppEnv } from \"../app\";\nimport type { ApiDeps } from \"../types/api-deps\";\nimport { errorMiddleware } from \"./error.middleware\";\n\nconst log = getLogger(\"e2ee\");\n\n/** Routes that write to `c.env.outgoing` themselves return this sentinel. */\nconst ALREADY_HANDLED = 597;\n\n/** Pure marker: its presence says \"this request is sealed\", nothing more. */\nexport const HEADER_MARKER = \"x-tb-e2ee\";\n/** The `ctxId`, base64url unpadded — 16 bytes is exactly 22 characters. */\nexport const HEADER_CTX = \"x-tb-ctx\";\n/** The request counter, decimal. Read early (§9 needs it), acted on late (§5). */\nexport const HEADER_SEQ = \"x-tb-seq\";\n/**\n * A sealed record whose HTTP framing cannot carry a body, base64url.\n *\n * The rule is one rule in both directions: bodiless requests (React Native\n * drops a `GET` body) and the one bodiless response (`304`) put the record\n * here; everything whose framing allows a body puts it in the body.\n */\nexport const HEADER_ENVELOPE = \"x-tb-env\";\n\n/** 16 raw bytes, base64url unpadded. Checked as a shape, never decoded. */\nconst CTX_ID_PATTERN = new RegExp(`^[A-Za-z0-9_-]{${Math.ceil((CTX_ID_BYTES * 4) / 3)}}$`);\n\n/**\n * A decimal counter that can fit `2^64 - 1`, checked before `BigInt` sees it.\n *\n * `BigInt(\"1e999\")` and `BigInt(\" 12 \")` both succeed, and `BigInt` on a long\n * digit string is not free — 20 digits is the width of the largest `uint64`, so\n * anything longer cannot be a counter and is refused without the conversion.\n */\nconst SEQ_PATTERN = /^(?:0|[1-9][0-9]{0,19})$/;\nconst MAX_SEQ = 2n ** 64n - 1n;\n\n/**\n * Ceiling on the header-carried envelope, in ENCODED characters.\n *\n * A header-carried record answers a bodiless request, whose plaintext is empty\n * or near it: header(30) + tag(16) is 46 bytes, 62 base64url characters. 1024\n * is generous slack and still an order of magnitude under Node's 16 KiB header\n * limit, so this bound is the one that fires rather than a 431 from the parser\n * — which is what makes it testable, and testable is the only way it stays\n * true.\n *\n * **Bounded on the encoded length, not the decoded one**, exactly as\n * `pair-request.ts` argues: `Buffer.from(s, \"base64url\")` allocates in\n * proportion to `s`, so measuring the result performs the allocation the bound\n * exists to prevent.\n */\nexport const MAX_ENVELOPE_HEADER_CHARS = 1024;\n\n/**\n * Ceiling on the body-carried envelope, taken from the record layer rather than\n * repeated: a frame over `MAX_RECORD_BYTES` is refused by `openFrame` anyway,\n * and a second literal is how the two drift into disagreement.\n */\nexport const MAX_ENVELOPE_BODY_BYTES = MAX_RECORD_BYTES;\n\n/** Where the counter sits in a record header (§4): version, ctxId, direction. */\nconst COUNTER_OFFSET = 1 + CTX_ID_BYTES + 4;\n\n/** The §9 code → HTTP status map, in one place so no call site invents one. */\nfunction statusFor(code: E2eeRejectionCode): ContentfulStatusCode {\n  switch (code) {\n    // Recoverable: the client re-handshakes once and retries. 409 rather than\n    // 401, which would send mobile round its re-auth UI for a context that\n    // simply expired.\n    case E2EE_CTX_UNKNOWN:\n      return 409;\n    case E2EE_DEVICE_REVOKED:\n      return 403;\n    default:\n      return 400;\n  }\n}\n\n/**\n * Whether a response with this status can carry a body at all.\n *\n * `304` and `204` cannot, and Node will silently drop anything written to one.\n * A sealed record for such a response therefore travels in `X-TB-Env` — the\n * same frozen rule the request side uses for a bodiless `GET`. The CORS\n * preflight's `204` never reaches here: `corsMiddleware` answers it first.\n */\nfunction canCarryBody(status: number): boolean {\n  return status !== 204 && status !== 304 && status >= 200;\n}\n\n/**\n * Read the body, refusing one that grows past `maxBytes`, memory flat.\n *\n * The same shape `e2ee.routes.ts` uses on `/api/e2ee/open` and for the same\n * reason (§10): the shared `readBody` concatenates every chunk before anything\n * looks at a size, so on a pre-authentication path a multi-GB POST is fully\n * buffered before any bound applies. `Content-Length` refuses the honest\n * oversized body before a byte arrives; the running total refuses the dishonest\n * one, and past the cap the chunks are DROPPED as they arrive rather than\n * collected — the connection stays healthy enough to carry the 413 back.\n */\nclass BodyTooLarge extends Error {}\n\nfunction readBoundedBody(req: IncomingMessage, maxBytes: number): Promise<Buffer> {\n  return new Promise((resolve, reject) => {\n    let chunks: Buffer[] = [];\n    let size = 0;\n    let refused = false;\n    req.on(\"data\", (chunk: Buffer) => {\n      if (refused) return;\n      size += chunk.length;\n      if (size > maxBytes) {\n        refused = true;\n        chunks = [];\n        reject(new BodyTooLarge(\"sealed request body is too large\"));\n        return;\n      }\n      chunks.push(chunk);\n    });\n    req.on(\"end\", () => {\n      if (refused) return;\n      resolve(Buffer.concat(chunks));\n    });\n    req.on(\"error\", reject);\n  });\n}\n\n/**\n * Hand the plaintext to BOTH body-read paths in this codebase.\n *\n * There are two, and a middleware that satisfies one and not the other ships a\n * hole shaped like whichever route it did not test:\n *\n *   1. ~15 handlers read the raw Node request — `readBody(c.env.incoming)` in\n *      `sessions.handlers.ts` and friends. The original `IncomingMessage` has\n *      already been drained to ciphertext by the time we get here and cannot be\n *      re-pushed after `end`, so `c.env.incoming` is REPLACED by a real\n *      `IncomingMessage` carrying the plaintext. `env` is a fresh object\n *      literal per request inside `@hono/node-server`, so the assignment is\n *      local to this request.\n *   2. three routes read `c.req.arrayBuffer()`. Hono answers that from\n *      `HonoRequest.bodyCache`, which short-circuits `raw` entirely — so\n *      seeding the cache is what makes `arrayBuffer()`, `text()` and `json()`\n *      all resolve to the plaintext (`#cachedBody` converts between them\n *      through `new Response(body)[key]()`).\n *\n * `Content-Length` is restated and `Transfer-Encoding` dropped, because the\n * plaintext is a different length from the record that carried it and a handler\n * that trusts the header would otherwise be told the ciphertext's size.\n */\nfunction replaceRequestBody(\n  c: Parameters<MiddlewareHandler<AppEnv>>[0],\n  original: IncomingMessage,\n  plaintext: Buffer,\n): void {\n  const replacement = new IncomingMessage(original.socket);\n  replacement.url = original.url;\n  replacement.method = original.method;\n  replacement.httpVersion = original.httpVersion;\n  replacement.httpVersionMajor = original.httpVersionMajor;\n  replacement.httpVersionMinor = original.httpVersionMinor;\n  replacement.rawHeaders = original.rawHeaders;\n  // Spread copies OWN enumerable properties only, so this carries nothing down\n  // from a polluted `Object.prototype` (measured). `url`, `method`,\n  // `httpVersion*` and `rawHeaders` above are own properties of a live\n  // `IncomingMessage` and are read directly for the same reason.\n  const headers = { ...original.headers };\n  delete headers[\"transfer-encoding\"];\n  headers[\"content-length\"] = String(plaintext.byteLength);\n  replacement.headers = headers;\n  // Everything this stream will ever hold is pushed below, so there is nothing\n  // to pull. `IncomingMessage.prototype._read` resumes the underlying socket,\n  // which this object does not own — it is the real request's socket, already\n  // drained and managed by the http parser.\n  (replacement as unknown as { _read: () => void })._read = () => {};\n  replacement.push(plaintext);\n  replacement.push(null);\n  // **`complete` is load-bearing, not cosmetic.** `IncomingMessage._destroy`\n  // reads it as \"was this message fully received\", and a stream that ends\n  // without it is treated as ABORTED — which destroys `this.socket`, and this\n  // object's socket is the real connection. The symptom is a socket hang up on\n  // exactly the requests whose handler read the body through `c.env.incoming`,\n  // with the response already written; everything else passes.\n  replacement.complete = true;\n  c.env.incoming = replacement;\n\n  // `bodyCache` is typed `Partial<Body>`, so its `arrayBuffer` slot types as\n  // the METHOD; at runtime `#cachedBody` stores and awaits a PROMISE there.\n  // The cast is to the runtime contract, not around it.\n  const cache = c.req.bodyCache as { arrayBuffer?: Promise<ArrayBuffer> };\n  cache.arrayBuffer = Promise.resolve(\n    plaintext.buffer.slice(\n      plaintext.byteOffset,\n      plaintext.byteOffset + plaintext.byteLength,\n    ) as ArrayBuffer,\n  );\n}\n\n/**\n * Buffer everything a direct-write handler produces and seal it once, at `end`.\n *\n * ~34 routes write straight to `c.env.outgoing` and return the 597\n * `ALREADY_HANDLED` sentinel, so Hono never sees their response at all. The\n * `write`/`end` pair is the same seam `countResponseBytes` already patches in\n * `app.ts` — that one only counts, this one has to buffer and rewrite the\n * framing (§13's \"not settled here\" list names exactly this).\n *\n * The patches are installed BEFORE `next()`, because a handler can write and\n * end before `next()` returns (several routes do not even await their handler).\n *\n * **The ndjson `stop` stream is buffered like everything else, deliberately.**\n * `POST /api/sessions/:id/stop` is the only `application/x-ndjson` in the tree;\n * it writes a `stopping` line, waits up to 5 s, then writes `stopped` or\n * `timeout`. Sealing per line is NOT available: the AAD is fixed-width with no\n * index field (§4), and the sealer permits exactly one seal per accepted\n * counter (§13(a)) — so a second line would either reuse `(k_s2c, 2‖counter)`\n * or be refused. There is no added wall-clock latency, since the response\n * completes when the handler ends either way. What is lost is the EARLY ARRIVAL\n * of the intermediate `stopping` line: the client learns the stop began only\n * when it learns how it finished. Multi-record ndjson needs an envelope version\n * with an index field, which is a protocol change and not this one.\n */\nfunction interceptDirectWrite(\n  outgoing: ServerResponse,\n  seal: (\n    status: number,\n    headers: OutgoingHttpHeaders,\n    plaintext: Buffer,\n  ) => { status: number; headers: OutgoingHttpHeaders; body?: Buffer },\n): () => void {\n  let status = 200;\n  let headers: OutgoingHttpHeaders = {};\n  const chunks: Buffer[] = [];\n  let done = false;\n\n  // The PREVIOUS functions, not the prototype's: `countResponseBytes` in\n  // `app.ts` has already patched `write`/`end` by the time this runs, and its\n  // byte count has to keep seeing what actually goes out — which is the sealed\n  // record, since that is what the client receives.\n  const prevWriteHead = outgoing.writeHead;\n  const prevWrite = outgoing.write;\n  const prevEnd = outgoing.end;\n  const prevSetHeader = outgoing.setHeader;\n\n  const collect = (chunk: unknown) => {\n    if (typeof chunk === \"string\") chunks.push(Buffer.from(chunk));\n    else if (chunk instanceof Uint8Array) chunks.push(Buffer.from(chunk));\n  };\n\n  outgoing.writeHead = function (this: ServerResponse, code: number, ...rest: unknown[]) {\n    status = code;\n    for (const arg of rest) {\n      if (arg && typeof arg === \"object\") headers = { ...headers, ...(arg as OutgoingHttpHeaders) };\n    }\n    return this;\n  } as typeof outgoing.writeHead;\n\n  // Only the three framing headers are swallowed. Everything else — `ETag`,\n  // `Accept-Query`, the CORS headers `corsMiddleware` already set — is metadata\n  // that stays plaintext by design (§3.2) and must reach the wire unchanged.\n  outgoing.setHeader = function (this: ServerResponse, name: string, value: never) {\n    const lower = name.toLowerCase();\n    if (lower === \"content-type\" || lower === \"content-length\" || lower === \"transfer-encoding\") {\n      return this;\n    }\n    return (prevSetHeader as (n: string, v: never) => ServerResponse).call(this, name, value);\n  } as typeof outgoing.setHeader;\n\n  outgoing.write = function (this: ServerResponse, ...args: unknown[]) {\n    collect(args[0]);\n    const cb = args.find((a) => typeof a === \"function\") as (() => void) | undefined;\n    cb?.();\n    return true;\n  } as typeof outgoing.write;\n\n  outgoing.end = function (this: ServerResponse, ...args: unknown[]) {\n    // A second `end()` is a no-op, not a second seal.\n    //\n    // **This fires on every direct-write route, not on a hypothetical handler\n    // that ends twice.** `responseViaResponseObject` in `@hono/node-server`\n    // takes the 597 sentinel `Response(null, …)`, finds no body and no\n    // `x-already-sent`, and calls `outgoing.writeHead(597, …)` then\n    // `outgoing.end()` — after the handler has already written and ended.\n    // Today that second `writeHead` throws `ERR_HTTP_HEADERS_SENT` and\n    // node-server swallows it in `handleResponseError`; through this patch it\n    // would instead ask the sealer for a SECOND record under a counter already\n    // spent. Removing this line turns every sealed direct-write response into\n    // an unhandled `ERR_HTTP_HEADERS_SENT` (measured: the mutation leaves all\n    // assertions green and the suite exits non-zero on four such rejections).\n    if (done) return this;\n    done = true;\n    collect(args[0]);\n    const cb = args.find((a) => typeof a === \"function\") as (() => void) | undefined;\n    const out = seal(status, headers, Buffer.concat(chunks));\n    (prevWriteHead as (s: number, h: OutgoingHttpHeaders) => ServerResponse).call(\n      this,\n      out.status,\n      out.headers,\n    );\n    const end = prevEnd as (...a: unknown[]) => ServerResponse;\n    if (out.body) end.call(this, out.body, cb);\n    else end.call(this, cb);\n    return this;\n  } as typeof outgoing.end;\n\n  /**\n   * Take the patches back off.\n   *\n   * A Hono-PIPED response is written to `outgoing` by `@hono/node-server` after\n   * this middleware has returned, and it is written through exactly these four\n   * methods. Left installed, they would buffer the response this middleware had\n   * already sealed and ask the sealer for a SECOND record under a counter it\n   * has spent — which the sealer refuses, turning a served request into a 500.\n   * The piped path seals `c.res` instead, and takes these off first.\n   */\n  return () => {\n    outgoing.writeHead = prevWriteHead;\n    outgoing.write = prevWrite;\n    outgoing.end = prevEnd;\n    outgoing.setHeader = prevSetHeader;\n  };\n}\n\nexport const e2eeEnvelopeMiddleware = (\n  /**\n   * The device registry, for §13(b)'s per-request `revoked_at` re-check.\n   *\n   * Read through `deps.devicesRepo()` on every request rather than captured\n   * once: the repository is rebuilt when the database is reopened, and a\n   * captured handle would keep re-checking revocation against a store that is\n   * no longer the live one — which fails OPEN, since a revoked device would\n   * still read as live in the stale copy.\n   */\n  deps: Pick<ApiDeps, \"devicesRepo\">,\n  /** Overridden by tests so a suite gets its own registry rather than the process one. */\n  registry: E2eeContextRegistry = contextRegistry(),\n): MiddlewareHandler<AppEnv> =>\n  async function e2eeEnvelope(c, next) {\n    // ── Rung 1: not a sealed request ────────────────────────────────\n    //\n    // One header read, and then this middleware is not in the picture. An\n    // unpinned device with the shared API key does exactly what it does today:\n    // nothing below has run, no body has been touched, no response method has\n    // been patched.\n    if (c.req.header(HEADER_MARKER) === undefined) return next();\n\n    const refuse = (code: E2eeRejectionCode, message: string, status = statusFor(code)) => {\n      // Plaintext, always: a refusal here is a refusal BEFORE a successful\n      // unseal, so no counter was accepted and no sealed body is owed (§13(a)).\n      // The body carries the code and nothing about what was sent.\n      log.warn(`[e2ee] sealed request refused: ${code}`, { event: \"e2ee.rest_refused\", code });\n      return c.json({ error: message, code }, status);\n    };\n\n    // Not a rung — a precondition. The target hash must come from the raw wire\n    // URL, which only the Node request has; under Hono's test client there is\n    // no `incoming` and no honest way to compute it.\n    const incoming = c.env?.incoming;\n    const outgoing = c.env?.outgoing;\n    if (!incoming || !outgoing) {\n      return refuse(E2EE_SEAL_FAILED, \"sealed requests require the Node request seam\", 400);\n    }\n\n    // ── Rung 2: the ctxId's shape ───────────────────────────────────\n    // Length and charset. Nothing is decoded and nothing is looked up.\n    const ctxId = c.req.header(HEADER_CTX);\n    if (!ctxId || !CTX_ID_PATTERN.test(ctxId)) {\n      return refuse(E2EE_CTX_UNKNOWN, \"X-TB-Ctx is not a context id\");\n    }\n\n    // ── Rung 3: the registry lookup ─────────────────────────────────\n    //\n    // **THE D-9 property.** An unknown `ctxId` costs one `Map.get` and nothing\n    // else: no allocation, and the body is never read. That is why this sits\n    // above every line that touches the request stream rather than below them,\n    // and why the ladder is written as a ladder at all.\n    //\n    // Read it off the structure rather than trusting this sentence: between\n    // rung 1 and this line there is one header read, one `refuse` closure and\n    // two `c.env` property reads. `incoming` is a REFERENCE here and nothing\n    // more — the only call that touches the stream is `readBoundedBody` at rung\n    // 7, and every header this ladder consults is read through `c.req.header`,\n    // which reads the parsed header table and never the stream.\n    const context = registry.get(ctxId);\n    if (!context) return refuse(E2EE_CTX_UNKNOWN, \"no such encrypted context\");\n\n    // ── Rung 4: the channel ─────────────────────────────────────────\n    // A socket context has no window and no response sealer; asking it to\n    // unseal a REST request is a misaddressed frame, not a malformed one.\n    if (context.kind !== \"rest\") {\n      return refuse(E2EE_CTX_UNKNOWN, \"that context is not a REST context\");\n    }\n\n    // ── Rung 5: the counter's shape ─────────────────────────────────\n    //\n    // Read here, ACTED ON at rung 9 — after the AEAD. §5's ordering rule: a\n    // pre-authentication counter check makes `E2EE_SEQUENCE_VIOLATION` an\n    // unauthenticated verdict about the peer and buys no protection, because\n    // the same attacker can as cheaply send garbage carrying the right counter.\n    const seqHeader = c.req.header(HEADER_SEQ);\n    if (!seqHeader || !SEQ_PATTERN.test(seqHeader)) {\n      return refuse(E2EE_SEQUENCE_VIOLATION, \"X-TB-Seq is not a counter\");\n    }\n    const claimedSeq = BigInt(seqHeader);\n    if (claimedSeq > MAX_SEQ) {\n      return refuse(E2EE_SEQUENCE_VIOLATION, \"X-TB-Seq is outside the range of a record nonce\");\n    }\n\n    // ── Rung 5a: exactly one envelope source ────────────────────────\n    //\n    // A presence test, no read. Two sources is not a client this contract\n    // describes: it is someone hoping the two halves are checked by different\n    // code, so that the bound applied to one is skipped on the other. There is\n    // no \"prefer the body\" tie-break, because a tie-break is a choice an\n    // attacker gets to make.\n    //\n    // **Both framing headers are read through `c.req.header`, and that is not\n    // decoration.** Node builds `req.headers` with `Object.prototype`, and a\n    // header absent from the wire is absent as an OWN property, so a bare\n    // `incoming.headers[\"content-length\"]` is a prototype-chain read —\n    // measured on a live request, not reasoned about. Either half of that is an\n    // unauthenticated denial of the whole REST envelope. Both vectors were\n    // MEASURED against a live server rather than reasoned about, and both are\n    // stated at the width they were measured at:\n    //\n    //   - a polluted `transfer-encoding` makes `hasBodyFraming` true for a\n    //     bodiless `GET`, which carries neither framing header on the wire, so\n    //     a legitimate sealed `GET` in `X-TB-Env` is refused as carrying two\n    //     envelopes (400 `E2EE_SEAL_FAILED`);\n    //   - a polluted `content-length` reaches rung 6 for a CHUNKED sealed\n    //     request, which sends no `content-length` at all, and a forged\n    //     declaration over the bound is a 413 before a byte is read.\n    //\n    // Note what is NOT claimed: a request that declares its own\n    // `content-length` is unaffected, because an own property shadows the\n    // prototype. The reachable half is the absent half, which is the general\n    // shape of this bug and the reason it hides — you cannot poison a header\n    // that is there.\n    //\n    // Neither is a bypass; the AEAD and the window are both still below. But\n    // the channel is off the air, it is reachable from any prototype-pollution\n    // sink anywhere in the process by an attacker who never touches the\n    // crypto, and denial is not the lesser outcome.\n    //\n    // The remedy is the framework accessor, not our `own()` helper, and the\n    // difference is that `c.req.header` cannot be refactored back into a\n    // prototype read. `@hono/node-server` 2.1.1 `RequestHeaders#lookupHttp1`\n    // gates on `Object.hasOwn(headers, lowerName)` and returns `null` when the\n    // header is not an own property (`dist/index.mjs:84`); on the paths it\n    // declines — HTTP/2, `set-cookie`, `__proto__`, a non-string raw value — it\n    // falls through to a scan of the raw wire header array, which has no\n    // prototype to poison either. So absence reads as absence by construction\n    // at both layers. `own()` remains correct but is one edit away from being\n    // wrong; this is zero edits away.\n    const envelopeHeader = c.req.header(HEADER_ENVELOPE);\n    const declaredLength = c.req.header(\"content-length\");\n    const hasBodyFraming =\n      c.req.header(\"transfer-encoding\") !== undefined ||\n      (declaredLength !== undefined && declaredLength !== \"0\");\n    if (envelopeHeader !== undefined && hasBodyFraming) {\n      return refuse(E2EE_SEAL_FAILED, \"a sealed request carries one envelope, not two\");\n    }\n    if (envelopeHeader === undefined && !hasBodyFraming) {\n      return refuse(E2EE_SEAL_FAILED, \"a sealed request carries an envelope\");\n    }\n\n    // ── Rungs 6 and 7: the bounds, then the read ────────────────────\n    let frame: Buffer;\n    if (envelopeHeader !== undefined) {\n      // Rung 6, header form: the ENCODED length, before any base64url decode.\n      if (envelopeHeader.length > MAX_ENVELOPE_HEADER_CHARS) {\n        return refuse(E2EE_SEAL_FAILED, \"X-TB-Env is too large\", 413);\n      }\n      frame = Buffer.from(envelopeHeader, \"base64url\");\n      // `Buffer.from` never throws on base64url — it discards what it cannot\n      // decode, so garbage becomes a short buffer rather than an error.\n      if (frame.byteLength === 0) {\n        return refuse(E2EE_SEAL_FAILED, \"X-TB-Env is not valid base64url\");\n      }\n    } else {\n      // Rung 6, body form: the declared length, before a byte is read.\n      const declared = Number(declaredLength);\n      if (Number.isFinite(declared) && declared > MAX_ENVELOPE_BODY_BYTES) {\n        return refuse(E2EE_SEAL_FAILED, \"sealed request body is too large\", 413);\n      }\n      try {\n        // Rung 7: and the running total, for a sender that lied.\n        frame = await readBoundedBody(incoming, MAX_ENVELOPE_BODY_BYTES);\n      } catch (err) {\n        if (err instanceof BodyTooLarge) {\n          return refuse(E2EE_SEAL_FAILED, err.message, 413);\n        }\n        return refuse(E2EE_SEAL_FAILED, \"could not read the sealed request body\", 400);\n      }\n    }\n\n    // ── Rung 8: the AEAD ────────────────────────────────────────────\n    //\n    // **The target comes from the RAW wire URL** — the bytes Node received —\n    // and never from `c.req.path`, which is percent-decoded, nor from a\n    // re-serialised query, whose order and escaping do not round-trip (§4).\n    // `/api/conversations/a%2Fb` and `/api/conversations/a/b` are different\n    // targets and must hash differently; the fixture\n    // `restTargetCanonicalization.decodedPathMustDiffer` is the authority.\n    const target = restTargetHashFromUrl(incoming.method ?? c.req.method, incoming.url ?? \"\");\n    let plaintext: Buffer;\n    try {\n      // `unsealRequest` runs the AEAD, then the window, then the sealer's\n      // acceptance — and it is the SOLE caller of `sealer.accept`. This\n      // middleware never reaches for the sealer itself: the window's high-water\n      // mark and the sealer's acceptance set stay in lockstep only because one\n      // call site advances both.\n      plaintext = context.unsealRequest(frame, target);\n    } catch (err) {\n      if (err instanceof RecordError) return refuse(err.code, \"could not unseal the request\");\n      throw err;\n    }\n\n    // ── Rung 9: the AUTHENTICATED counter against the claimed one ───\n    //\n    // Now, and not before. The counter read here comes out of a frame the AEAD\n    // has already proven came from the peer — it is a field of the AAD, so a\n    // rewrite would have failed the tag — which is what makes\n    // `E2EE_SEQUENCE_VIOLATION` a true claim about the peer rather than a\n    // verdict on anyone who can inject bytes (§9).\n    const counter = frame.readBigUInt64BE(COUNTER_OFFSET);\n    if (counter !== claimedSeq) {\n      return refuse(E2EE_SEQUENCE_VIOLATION, \"X-TB-Seq does not match the sealed counter\");\n    }\n\n    replaceRequestBody(c, incoming, plaintext);\n    c.set(\"e2eeContext\", context);\n\n    /** The one seal this request is owed, and the framing it goes out in. */\n    let spent = false;\n    const sealOnce = (\n      status: number,\n      inHeaders: OutgoingHttpHeaders,\n      body: Buffer,\n    ): { status: number; headers: OutgoingHttpHeaders; body?: Buffer } => {\n      const headers: OutgoingHttpHeaders = {};\n      for (const [k, v] of Object.entries(inHeaders)) {\n        const lower = k.toLowerCase();\n        if (lower === \"content-type\" || lower === \"content-length\") continue;\n        if (lower === \"transfer-encoding\") continue;\n        headers[k] = v;\n      }\n      let record: Buffer;\n      try {\n        if (spent) throw new RecordError(E2EE_SEAL_FAILED, \"this request was already answered\");\n        spent = true;\n        record = context.sealResponse(counter, body, target);\n      } catch {\n        // A server-side fault (§9). Plaintext, because the alternative is a\n        // second seal under a counter already spent — the one failure §13\n        // exists to prevent — and because a client that cannot unseal an error\n        // has no way to learn what happened.\n        const payload = Buffer.from(\n          JSON.stringify({ error: \"Could not seal the response\", code: E2EE_SEAL_FAILED }),\n        );\n        return {\n          status: 500,\n          headers: {\n            ...headers,\n            \"Content-Type\": \"application/json\",\n            \"Content-Length\": payload.byteLength,\n          },\n          body: payload,\n        };\n      }\n      headers[HEADER_MARKER] = \"1\";\n      // **A sealed response must never enter a shared HTTP cache.** It is bound\n      // to ONE accepted request counter (§13(a)), so a cached copy is a record\n      // no later request can unseal — and worse, a cache that revalidates a\n      // sealed `304` applies its headers to the stored `200` and hands the\n      // client that status with a payload that is empty by construction. Field\n      // evidence, iOS build 219 against streamer 1.77.3: seven `304`s on\n      // `/api/conversations/:id`, and a `JSON Parse error: Unexpected end of\n      // input` on the app's messages query — `NSURLCache` revalidating on its\n      // own `If-None-Match`, because nothing in this tree ever said not to.\n      // Set for every sealed response, not just the bodiless one: the framing a\n      // record travels in is not what makes it single-use.\n      headers[\"Cache-Control\"] = \"no-store\";\n      if (!canCarryBody(status)) {\n        // The frozen rule, response side: a record whose framing cannot carry a\n        // body travels base64url in `X-TB-Env`. Such responses in the tree are\n        // the `304` at `conversations.handlers.ts` and the `204` from\n        // `DELETE /api/push/register`; each still owes the one sealed record its\n        // counter was accepted for.\n        headers[HEADER_ENVELOPE] = record.toString(\"base64url\");\n        return { status, headers };\n      }\n      headers[\"Content-Type\"] = \"application/octet-stream\";\n      headers[\"Content-Length\"] = record.byteLength;\n      return { status, headers, body: record };\n    };\n\n    /**\n     * Answer this request with the ONE sealed record its counter is owed.\n     *\n     * Every refusal from here down goes through here and never through\n     * `refuse`. That is §13(a) read from the far side: above the unseal,\n     * plaintext only; below it, sealed only. `unsealRequest` has succeeded, so\n     * the counter is committed and exactly one sealed response is owed — and a\n     * plaintext answer at this point would be an unauthenticated party's word\n     * about an authenticated request.\n     */\n    const refuseSealed = (status: number, payload: Record<string, unknown>): Response => {\n      // Deliberately NOT logged. `refuse` above logs its code because a\n      // pre-unseal refusal says nothing about anyone; these three say who was\n      // refused and why, which is a claim about an identified device, and the\n      // program rule is that no context state reaches a log line.\n      const out = sealOnce(status, {}, Buffer.from(JSON.stringify(payload), \"utf-8\"));\n      const headers = new Headers();\n      for (const [k, v] of Object.entries(out.headers)) {\n        if (v !== undefined) headers.set(k, String(v));\n      }\n      return new Response(out.body ? new Uint8Array(out.body) : null, {\n        status: out.status,\n        headers,\n      });\n    };\n\n    // ── Rung 12: the context principal (§13(b), design.md §4.4) ─────\n    //\n    // The credential presented BESIDE the context, if any. §13(b) says a\n    // sealed request carries none — the context already names the device — so\n    // `undefined` is the ordinary case and an ordinary success. Read the same\n    // two places `authMiddleware` reads, or a device could dodge the mismatch\n    // check by moving its token from the header to the query string.\n    const authorization = c.req.header(\"authorization\");\n    const presented =\n      (authorization?.startsWith(\"Bearer \") ? authorization.slice(7) : undefined) ??\n      c.req.query(\"key\") ??\n      undefined;\n\n    // A PURE verdict. The helper states the fact it found; the HTTP mapping and\n    // the lifecycle effect below are this caller's policy, and the WebSocket\n    // caller maps the same three reasons onto close reasons instead.\n    const auth = authenticateContext({\n      context,\n      devicesRepo: deps.devicesRepo(),\n      presented,\n    });\n\n    if (!auth.ok) {\n      // **Seal FIRST, with the still-live context. Destroy after, and only on\n      // `device-revoked`.**\n      //\n      // This ordering is load-bearing at v1.72.0 and was not at v1.71.0.\n      // W1b shipped real invalidation (streamer #743): `registry.destroy()`\n      // runs `contextInvalidators`, which nulls the context's response sealer,\n      // and `sealResponse` throws through `requireRest()` the moment it is\n      // null. So destroying first does not merely risk a future problem — it\n      // turns this refusal into a 500 the phone cannot decrypt, on the one\n      // code (§9 `E2EE_DEVICE_REVOKED`) the client is told never to retry.\n      const sealed =\n        auth.reason === \"device-revoked\"\n          ? refuseSealed(403, { error: \"This device is not paired\", code: E2EE_DEVICE_REVOKED })\n          : auth.reason === \"no-device-store\"\n            ? // Transient, and deliberately NOT `E2EE_DEVICE_REVOKED`: §9 makes\n              // that a hard failure the client must never retry, and a registry\n              // we could not read says nothing about the pairing. A 403 here\n              // would tell the phone its device was revoked because our disk\n              // faulted. Byte-identical to the WS caller's answer\n              // (`auth.middleware.ts`) and to `devices.routes.ts`.\n              refuseSealed(503, {\n                error: \"Device registry is unavailable\",\n                code: \"STORE_UNAVAILABLE\",\n              })\n            : // `credential-mismatch`, including the shared API key, which names\n              // no device and is a mismatch rather than an exemption.\n              refuseSealed(401, { error: \"Unauthorized\" });\n\n      // **Only `device-revoked` destroys, and the discriminator generalises:\n      // destroy on a fact in our own database that an attacker cannot forge,\n      // never on a header an attacker supplied.** `X-TB-Ctx` travels in\n      // plaintext on every sealed request, so a destroy reachable through a\n      // mismatched credential would let anyone who reads one request kill that\n      // device's context on repeat — forge a credential beside the observed id,\n      // watch the victim re-open, read the new id, repeat. `no-device-store`\n      // says nothing about the device either, and its context also survives.\n      if (auth.reason === \"device-revoked\") registry.destroy(ctxId);\n      return sealed;\n    }\n\n    // The principal is built from the CONTEXT's device id, never from the\n    // credential and never from the row — `principal.deviceId ===\n    // context.deviceId` by construction, which is stronger than checking that\n    // they agree.\n    c.set(\"principal\", auth.principal);\n\n    // ── Rung 13: authority, not just identity ───────────────────────\n    //\n    // A context AUTHENTICATES; it does not authorize. `authMiddleware` skips\n    // only credential RESOLUTION when a principal is already set and still runs\n    // this same check itself, so the two are defence in depth rather than one\n    // check in two places — see the note on the campaign row: neither mutation\n    // reddens alone, by design, and the safeguard is the pair.\n    const required = requiredCapability(new URL(c.req.url).pathname, c.req.method);\n    if (required !== null && !hasCapability(auth.principal, required)) {\n      // Sealed, like every other answer this counter is owed — and the context\n      // SURVIVES. Unlike the WebSocket caller, which destroys here because its\n      // ticket is already spent and the context it promoted would otherwise be\n      // orphaned for 24 h, a REST context is long-lived and addressable again\n      // on the very next request. A read-only device that touches one write\n      // route must not lose the channel it is entitled to use.\n      return refuseSealed(403, { error: \"Forbidden\", code: \"MISSING_CAPABILITY\", required });\n    }\n\n    // Installed BEFORE `next()`: several direct-write routes do not await their\n    // handler, so `end` can fire after `next()` has already returned.\n    const restoreDirectWrite = interceptDirectWrite(outgoing, sealOnce);\n\n    try {\n      await next();\n    } catch (err) {\n      // **A thrown handler still owes its one sealed response.** Hono's\n      // `onError` runs OUTSIDE this middleware — by the time it produces a\n      // response, `next()` has already thrown past here and there is nothing\n      // left to seal it. So the same handler is invoked here and its answer\n      // goes out through the same seal. One implementation of the error shape,\n      // not two.\n      c.res = await errorMiddleware(err as Error, c);\n    }\n\n    // A direct-write route returns the 597 sentinel and has written (or will\n    // write) to `outgoing`; the patched `end` seals it. Nothing to do here —\n    // and the patches stay on, because several routes do not await their\n    // handler and `end` may still be ahead of us.\n    if (c.res.status === ALREADY_HANDLED) return;\n\n    // ── The Hono-piped path ─────────────────────────────────────────\n    //\n    // `@hono/node-server` will write `c.res` to `outgoing` through the same\n    // four methods, so they come off first or the response is sealed twice.\n    restoreDirectWrite();\n    const body = Buffer.from(await c.res.arrayBuffer());\n    const headers: OutgoingHttpHeaders = {};\n    c.res.headers.forEach((value, key) => {\n      headers[key] = value;\n    });\n    const out = sealOnce(c.res.status, headers, body);\n    const outHeaders = new Headers();\n    for (const [k, v] of Object.entries(out.headers)) {\n      if (v !== undefined) outHeaders.set(k, String(v));\n    }\n    // Hono's `set res` copies the OLD response's headers onto the new one, so a\n    // stale `content-length` there would overwrite the sealed one.\n    c.res.headers.delete(\"content-length\");\n    c.res = new Response(out.body ? new Uint8Array(out.body) : null, {\n      status: c.res.status,\n      headers: outHeaders,\n    });\n  };\n","import type { ErrorHandler } from \"hono\";\nimport type { ContentfulStatusCode } from \"hono/utils/http-status\";\nimport type { AppEnv } from \"../app\";\n\nexport const errorMiddleware: ErrorHandler<AppEnv> = (err, c) => {\n  const message = err instanceof Error ? err.message : \"Internal server error\";\n  // Honour the { statusCode, code } convention the session paths already throw\n  // with (LiveSessionManager). Handlers that catch locally never reach here —\n  // start and fork do — but resume and adopt do not, so a refusal they raise\n  // deliberately used to arrive as a bare 500 carrying nothing to branch on.\n  // Bounded to real HTTP codes because `statusCode` is also a property some\n  // libraries hang on their own errors, and one of those bubbling up must not\n  // get to choose the response.\n  const { statusCode, code } = err as Error & { statusCode?: unknown; code?: unknown };\n  const status: ContentfulStatusCode =\n    typeof statusCode === \"number\" && statusCode >= 400 && statusCode <= 599\n      ? (statusCode as ContentfulStatusCode)\n      : 500;\n  return c.json(typeof code === \"string\" ? { error: message, code } : { error: message }, status);\n};\n","import type { MiddlewareHandler } from \"hono\";\nimport type { AppEnv } from \"../app\";\nimport { HEADER_CTX, HEADER_ENVELOPE, HEADER_MARKER, HEADER_SEQ } from \"./e2ee-envelope.middleware\";\n\n// Local dev origins allowed when browser CORS is enabled.\nconst DEFAULT_DEV_ORIGINS = [\n  \"http://localhost:8081\",\n  \"http://localhost:19006\",\n  \"http://localhost:3000\",\n];\n\n// Browser CORS is OFF by default: without an Origin allow-list, no web page can\n// make authenticated requests even if it obtains the API key out-of-band. Set\n// THREADBASE_ALLOW_BROWSER_CORS to enable (any of: 1, true, yes, on), and\n// optionally to a comma-separated origin list to allow origins beyond the\n// localhost dev defaults, e.g. THREADBASE_ALLOW_BROWSER_CORS=https://app.example.com\n// Mobile requests aren't browser-originated (no Origin header) and are unaffected.\nexport function resolveAllowedOrigins(raw: string | undefined): Set<string> | null {\n  if (!raw) return null;\n  const trimmed = raw.trim();\n  const lower = trimmed.toLowerCase();\n  if (lower === \"0\" || lower === \"false\" || lower === \"no\" || lower === \"off\" || trimmed === \"\") {\n    return null;\n  }\n\n  const origins = new Set(DEFAULT_DEV_ORIGINS);\n  // Treat plain on/off tokens as \"just enable the defaults\"; anything else is an\n  // explicit origin list to add on top.\n  if (![\"1\", \"true\", \"yes\", \"on\"].includes(lower)) {\n    for (const o of trimmed.split(\",\")) {\n      const origin = o.trim();\n      if (origin) origins.add(origin);\n    }\n  }\n  return origins;\n}\n\n// `configValue` is the resolved server.yaml `browser_cors:` setting (if any);\n// THREADBASE_ALLOW_BROWSER_CORS always takes precedence, matching the\n// env-over-yaml precedence used for browseRoot/publicUrl/etc. in server.ts.\nexport const corsMiddleware = (configValue?: string): MiddlewareHandler<AppEnv> => {\n  const allowedOrigins = resolveAllowedOrigins(\n    process.env.THREADBASE_ALLOW_BROWSER_CORS ?? configValue,\n  );\n\n  return async (c, next) => {\n    const origin = c.req.header(\"origin\");\n    const allowedOrigin = allowedOrigins && origin && allowedOrigins.has(origin) ? origin : null;\n\n    if (allowedOrigin) {\n      const headers: Record<string, string> = {\n        \"Access-Control-Allow-Origin\": allowedOrigin,\n        Vary: \"Origin\",\n        // tb-mobile's api-client issues PUT and DELETE too, sealed or not.\n        \"Access-Control-Allow-Methods\": \"GET, POST, PUT, PATCH, DELETE, QUERY, OPTIONS\",\n        // X-Client-Id rides on every tb-mobile REST call; without it here a\n        // browser cancels the request after the preflight (\"Failed to fetch\").\n        // The four envelope headers are what a sealed request sends instead of\n        // Authorization — named from the envelope middleware, not retyped.\n        \"Access-Control-Allow-Headers\": [\n          \"Authorization\",\n          \"Content-Type\",\n          \"If-None-Match\",\n          \"X-Client-Id\",\n          HEADER_MARKER,\n          HEADER_CTX,\n          HEADER_SEQ,\n          HEADER_ENVELOPE,\n        ].join(\", \"),\n        // A sealed response is recognised by its marker, and a bodiless one\n        // (204/304) carries its record in X-TB-Env: a browser hides both\n        // unless they are exposed, and the client then refuses the response.\n        \"Access-Control-Expose-Headers\": [\n          \"ETag\",\n          \"Accept-Query\",\n          HEADER_MARKER,\n          HEADER_ENVELOPE,\n        ].join(\", \"),\n      };\n      // Set on the raw ServerResponse too: many handlers write directly to\n      // c.env.outgoing and return the ALREADY_HANDLED sentinel, so Hono never\n      // pipes c.res.headers onto the actual response. writeHead() merges (does\n      // not clear) setHeader()-set headers, so these survive the direct write.\n      // A WebSocket upgrade has no ServerResponse: @hono/node-ws runs it through\n      // the app with `outgoing: undefined`, and browsers always send Origin on\n      // one, so an unguarded setHeader turned every browser socket into a 500.\n      for (const [name, value] of Object.entries(headers)) {\n        c.env.outgoing?.setHeader(name, value);\n        c.res.headers.set(name, value);\n      }\n    }\n\n    if (c.req.method === \"OPTIONS\") {\n      return c.newResponse(null, allowedOrigin ? 204 : 403);\n    }\n\n    await next();\n  };\n};\n","import { Hono } from \"hono\";\nimport { hostname } from \"os\";\nimport {\n  BACKUP_FORMAT_VERSION,\n  BackupError,\n  type BackupProject,\n  planRestore,\n  remapPaths,\n  validateArchive,\n} from \"../../services/backup/backup\";\nimport { getVersion } from \"../../version\";\nimport type { AppEnv } from \"../app\";\nimport type { ApiDeps } from \"../types/api-deps\";\n\n/**\n * Metadata export and restore (C9 / mobile U11).\n *\n * Only Threadbase metadata is exported. Provider history is authoritative and\n * is not ours; the cache derives from it and rebuilds by scanning. What cannot\n * be reconstructed is project identity — a fresh scan invents new project ids,\n * breaking every deep link and per-project setting that referenced the old ones.\n *\n * Restore is deliberately two-step: a dry run returns the plan so the user can\n * see what would change, and applying requires an explicit flag. A restore that\n * silently rewrites project identity is one nobody can review.\n */\n\nfunction readBody(c: { env: { incoming: NodeJS.ReadableStream } }): Promise<unknown> {\n  return new Promise((resolve, reject) => {\n    const chunks: Buffer[] = [];\n    c.env.incoming.on(\"data\", (chunk: Buffer) => chunks.push(chunk));\n    c.env.incoming.on(\"end\", () => {\n      try {\n        const raw = Buffer.concat(chunks).toString(\"utf-8\");\n        resolve(raw ? JSON.parse(raw) : {});\n      } catch {\n        reject(new Error(\"Invalid JSON body\"));\n      }\n    });\n    c.env.incoming.on(\"error\", reject);\n  });\n}\n\nexport const createBackupRoutes = (deps: Pick<ApiDeps, \"projectsRepo\">) => {\n  const app = new Hono<AppEnv>();\n\n  app.get(\"/export\", (c) => {\n    const repo = deps.projectsRepo();\n    if (!repo) {\n      return c.json({ error: \"Project store is unavailable\", code: \"STORE_UNAVAILABLE\" }, 503);\n    }\n\n    const projects: BackupProject[] = repo.listProjects().map((p) => ({\n      id: p.id,\n      path: p.path,\n      name: p.name ?? null,\n      createdAt: p.createdAt,\n      updatedAt: p.updatedAt,\n    }));\n\n    return c.json({\n      manifest: {\n        formatVersion: BACKUP_FORMAT_VERSION,\n        createdAt: new Date().toISOString(),\n        streamerVersion: getVersion(),\n        sourceHost: hostname(),\n        // No endpoint here exports the API key. The flag is recorded so an\n        // archive is self-describing about its own sensitivity rather than\n        // requiring a reader to infer it.\n        includesSecrets: false,\n        counts: { projects: projects.length },\n      },\n      projects,\n    });\n  });\n\n  app.post(\"/restore\", async (c) => {\n    const repo = deps.projectsRepo();\n    if (!repo) {\n      return c.json({ error: \"Project store is unavailable\", code: \"STORE_UNAVAILABLE\" }, 503);\n    }\n\n    let body: { archive?: unknown; pathMap?: unknown; apply?: unknown };\n    try {\n      body = (await readBody(c)) as typeof body;\n    } catch {\n      return c.json({ error: \"Invalid JSON body\", code: \"INVALID_BODY\" }, 400);\n    }\n\n    // Validate the whole archive before anything is applied. Restore rewrites\n    // project identity, so a malformed archive is rejected outright rather than\n    // applied halfway.\n    let archive: ReturnType<typeof validateArchive>;\n    try {\n      archive = validateArchive(body.archive);\n    } catch (err) {\n      if (err instanceof BackupError) {\n        return c.json({ error: err.message, code: err.code }, 400);\n      }\n      throw err;\n    }\n\n    const rules = Array.isArray(body.pathMap)\n      ? (body.pathMap as Array<{ from?: unknown; to?: unknown }>)\n          .filter((r) => typeof r?.from === \"string\" && typeof r?.to === \"string\")\n          .map((r) => ({ from: r.from as string, to: r.to as string }))\n      : [];\n\n    const incoming = rules.length > 0 ? remapPaths(archive.projects, rules) : archive.projects;\n    const existing = repo.listProjects().map((p) => ({ id: p.id, path: p.path }));\n    const plan = planRestore(incoming, existing);\n\n    const summary = {\n      create: plan.create.length,\n      update: plan.update.length,\n      conflict: plan.conflict.length,\n    };\n\n    // Dry run by default. The caller sees exactly what would change before\n    // anything is written.\n    if (body.apply !== true) {\n      return c.json({ applied: false, summary, plan });\n    }\n\n    // A conflict means one path is claimed by two different ids; applying\n    // either would break whichever links used the other. Refuse rather than\n    // pick a silent winner.\n    if (plan.conflict.length > 0) {\n      return c.json(\n        {\n          error: \"Restore has unresolved conflicts\",\n          code: \"RESTORE_CONFLICT\",\n          summary,\n          plan,\n        },\n        409,\n      );\n    }\n\n    let applied = 0;\n    for (const p of [...plan.create, ...plan.update]) {\n      try {\n        repo.upsertProjectByPath(p.path, { name: p.name });\n        applied++;\n      } catch {\n        // Continue rather than aborting midway: a partial restore that reports\n        // its own count is more recoverable than one that stops silently.\n      }\n    }\n\n    return c.json({ applied: true, summary, appliedCount: applied });\n  });\n\n  return app;\n};\n","/**\n * Metadata export and restore (C9).\n *\n * Threadbase owns very little durable state, and knowing exactly which parts\n * matter is the whole design:\n *\n *  - **Provider history** (`~/.claude/projects/*.jsonl`, Codex rollouts) is the\n *    authoritative record of every conversation, and it is NOT ours. It is\n *    written by the provider CLIs and survives independently of this server.\n *    Exporting it would duplicate gigabytes of data the user already has, in a\n *    format we do not control.\n *  - **Threadbase metadata** (the `projects` table: stable project ids,\n *    names, and their mapping to paths) is ours, is small, and cannot be\n *    reconstructed — a fresh scan invents new project ids, breaking every\n *    deep link and per-project setting that referenced the old ones.\n *  - **The cache** (conversation metadata, tails, offset index) is derived\n *    entirely from provider history and is rebuilt by scanning. Exporting it\n *    would bloat a backup with data that regenerates itself.\n *\n * So an export carries metadata only, and the restore path is explicit that\n * conversations come back by rescanning provider history rather than from the\n * archive.\n *\n * Credentials are never exported by default. The API key is a live credential\n * whose disclosure grants full control of the server; a backup file gets copied\n * to cloud storage, pasted into issues, and emailed around.\n */\n\nexport const BACKUP_FORMAT_VERSION = 1;\n\nexport interface BackupProject {\n  id: string;\n  path: string;\n  name: string | null;\n  createdAt: string;\n  updatedAt: string;\n}\n\nexport interface BackupManifest {\n  formatVersion: number;\n  createdAt: string;\n  streamerVersion: string;\n  /** Identity of the machine this was taken from, for path-remap decisions. */\n  sourceHost: string;\n  /**\n   * True when the operator explicitly opted into including secrets. Recorded so\n   * a restore can warn, and so an archive's sensitivity is self-describing\n   * rather than inferred.\n   */\n  includesSecrets: boolean;\n  counts: { projects: number };\n}\n\nexport interface BackupArchive {\n  manifest: BackupManifest;\n  projects: BackupProject[];\n}\n\nexport class BackupError extends Error {\n  constructor(\n    message: string,\n    readonly code: string,\n  ) {\n    super(message);\n  }\n}\n\n/**\n * Validate an archive before any of it is applied.\n *\n * Restore is destructive in the sense that it rewrites project identity, so a\n * malformed archive must be rejected whole rather than applied halfway. This\n * checks shape and version up front; the caller applies inside a transaction.\n */\nexport function validateArchive(input: unknown): BackupArchive {\n  if (!input || typeof input !== \"object\") {\n    throw new BackupError(\"Backup is not an object\", \"INVALID_ARCHIVE\");\n  }\n  const archive = input as Partial<BackupArchive>;\n  const manifest = archive.manifest;\n\n  if (!manifest || typeof manifest !== \"object\") {\n    throw new BackupError(\"Backup is missing its manifest\", \"INVALID_ARCHIVE\");\n  }\n  if (manifest.formatVersion !== BACKUP_FORMAT_VERSION) {\n    // Refuse rather than guess. A future format may mean something different by\n    // the same field names, and silently misreading it would corrupt project\n    // identity in a way the user cannot see.\n    throw new BackupError(\n      `Unsupported backup format version ${String(manifest.formatVersion)}; this build reads version ${BACKUP_FORMAT_VERSION}`,\n      \"UNSUPPORTED_VERSION\",\n    );\n  }\n  if (!Array.isArray(archive.projects)) {\n    throw new BackupError(\"Backup is missing its projects array\", \"INVALID_ARCHIVE\");\n  }\n\n  for (const [i, p] of archive.projects.entries()) {\n    if (!p || typeof p !== \"object\") {\n      throw new BackupError(`Project at index ${i} is not an object`, \"INVALID_ARCHIVE\");\n    }\n    if (typeof p.id !== \"string\" || p.id.length === 0) {\n      throw new BackupError(`Project at index ${i} has no id`, \"INVALID_ARCHIVE\");\n    }\n    if (typeof p.path !== \"string\" || p.path.length === 0) {\n      throw new BackupError(`Project at index ${i} has no path`, \"INVALID_ARCHIVE\");\n    }\n  }\n\n  const ids = new Set(archive.projects.map((p) => p.id));\n  if (ids.size !== archive.projects.length) {\n    // Duplicate ids would make restore order-dependent, so the archive is\n    // rejected rather than silently resolved by last-write-wins.\n    throw new BackupError(\"Backup contains duplicate project ids\", \"INVALID_ARCHIVE\");\n  }\n\n  return archive as BackupArchive;\n}\n\n/**\n * Rewrite project paths from one machine's layout to another's.\n *\n * A backup restored onto a different machine — or the same machine after a home\n * directory move — carries paths that no longer exist. Without remapping, every\n * project points at nothing and the restore is useless.\n *\n * Longest-prefix wins, so a more specific rule beats a general one. Paths that\n * match no rule are left untouched rather than mangled.\n */\nexport function remapPaths(\n  projects: BackupProject[],\n  rules: ReadonlyArray<{ from: string; to: string }>,\n): BackupProject[] {\n  const ordered = [...rules].sort((a, b) => b.from.length - a.from.length);\n  return projects.map((p) => {\n    const rule = ordered.find((r) => p.path === r.from || p.path.startsWith(`${r.from}/`));\n    if (!rule) return p;\n    return { ...p, path: `${rule.to}${p.path.slice(rule.from.length)}` };\n  });\n}\n\n/**\n * Classify how each incoming project relates to what already exists.\n *\n * Returned rather than applied so the caller can show the user what a restore\n * would do before doing it — a restore that silently rewrites project identity\n * is one the user cannot review.\n */\nexport interface RestorePlan {\n  create: BackupProject[];\n  /** Same id, different path — the machine-move case. */\n  update: BackupProject[];\n  /** Path already claimed by a DIFFERENT id. Requires an explicit decision. */\n  conflict: Array<{ incoming: BackupProject; existingId: string }>;\n}\n\nexport function planRestore(\n  incoming: BackupProject[],\n  existing: ReadonlyArray<{ id: string; path: string }>,\n): RestorePlan {\n  const byId = new Map(existing.map((e) => [e.id, e]));\n  const byPath = new Map(existing.map((e) => [e.path, e]));\n\n  const plan: RestorePlan = { create: [], update: [], conflict: [] };\n\n  for (const p of incoming) {\n    const sameId = byId.get(p.id);\n    if (sameId) {\n      if (sameId.path !== p.path) plan.update.push(p);\n      continue;\n    }\n    const samePath = byPath.get(p.path);\n    if (samePath) {\n      // Two different ids for one path: applying either would break whichever\n      // links used the other. The user has to decide.\n      plan.conflict.push({ incoming: p, existingId: samePath.id });\n      continue;\n    }\n    plan.create.push(p);\n  }\n\n  return plan;\n}\n","// Runtime version reporting.\n//\n// The version string is NOT baked into the compiled bundle. Each installer\n// (Homebrew, auto-updater, scripts/deploy.sh) writes a `version.txt` next to\n// the script it activates, so the binary reports the correct version even\n// when the tarball it was built from carried a stale package.json.\n//\n// Resolution order:\n//   1. Read `<dirname(process.argv[1])>/version.txt` — set by the installer.\n//   2. Read `<dirname(process.argv[1])>/../version.txt` — the built CLI is a\n//      symlink whose realpath resolves one level into $INSTALL_DIR/releases/,\n//      so the installer's version.txt sits in the parent dir.\n//   3. Fall back to `<dirname(process.argv[1])>/../package.json` with a\n//      `+source` suffix — covers source-tree runs (vitest, ts-node,\n//      `npm run dev`) where no installer has stamped a version.\n//   4. If all fail, return \"0.0.0+unknown\" so callers never crash on a\n//      missing version.\n\nimport { readFileSync, realpathSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\n\nlet cached: string | undefined;\n\nexport function getVersion(): string {\n  if (cached !== undefined) return cached;\n  cached = resolveVersion();\n  return cached;\n}\n\n// Exposed for tests to clear the memoization between cases.\nexport function resetVersionCache(): void {\n  cached = undefined;\n}\n\nfunction resolveVersion(): string {\n  const scriptPath = process.argv[1] ?? \"\";\n  const here = scriptPath ? dirname(scriptPath) : process.cwd();\n  // Also resolve the realpath so shims (e.g. /opt/homebrew/bin/tb-streamer →\n  // ~/.threadbase/cli.js → releases/cli.<sha>.cjs) don't cause version.txt\n  // lookups to land in the wrong directory.\n  let realHere = here;\n  try {\n    realHere = dirname(realpathSync(scriptPath));\n  } catch {}\n  // Deduplicate: if realHere === here we don't want to check the same dirs twice.\n  const searchDirs =\n    realHere === here\n      ? [here, join(here, \"..\")]\n      : [here, join(here, \"..\"), realHere, join(realHere, \"..\")];\n  // Check both the script directory and its parent — the installer places\n  // version.txt in $INSTALL_DIR (~/.threadbase/) but the built CLI is a\n  // symlink whose realpath resolves into $INSTALL_DIR/releases/, so `here`\n  // ends up one level too deep.\n  for (const dir of searchDirs) {\n    try {\n      const v = readFileSync(join(dir, \"version.txt\"), \"utf8\").trim();\n      if (v) return v;\n    } catch {}\n  }\n  try {\n    const pkg = JSON.parse(readFileSync(join(here, \"..\", \"package.json\"), \"utf8\")) as {\n      version?: string;\n    };\n    if (pkg.version) return `${pkg.version}+source`;\n  } catch {}\n  return \"0.0.0+unknown\";\n}\n","import { Hono } from \"hono\";\nimport type { AppEnv } from \"../app\";\nimport type { ApiDeps } from \"../types/api-deps\";\n\nconst ALREADY_HANDLED = 597;\nconst alreadyHandled = () => new Response(null, { status: ALREADY_HANDLED });\n\nexport const createBrowseRoutes = (deps: ApiDeps) => {\n  const app = new Hono<AppEnv>();\n\n  app.get(\"/browse\", async (c) => {\n    const url = new URL(c.req.url);\n    await deps.handleBrowse(url, c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  app.post(\"/browse/mkdir\", async (c) => {\n    await deps.handleMkdir(c.env.incoming, c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  return app;\n};\n","import { z } from \"zod\";\n\n/** Body for POST /api/cache/alert/resolve. */\nexport const ResolveCacheAlertSchema = z\n  .object({\n    fingerprint: z.string(),\n    action: z.enum([\"prune_all\", \"prune_selected\", \"ignore\", \"reset_rescan\"]),\n    ids: z.array(z.string()).optional(),\n  })\n  .refine((v) => v.action !== \"prune_selected\" || (v.ids !== undefined && v.ids.length > 0), {\n    message: \"prune_selected requires a non-empty ids array\",\n    path: [\"ids\"],\n  });\n\nexport type ResolveCacheAlertBody = z.infer<typeof ResolveCacheAlertSchema>;\n","import { Hono } from \"hono\";\nimport type { IncomingMessage } from \"http\";\nimport { ResolveCacheAlertSchema } from \"../../schemas/cacheAlert.schema\";\nimport type { AppEnv } from \"../app\";\nimport type { ApiDeps } from \"../types/api-deps\";\n\nfunction readRawBody(req: IncomingMessage): Promise<string> {\n  return new Promise((resolve, reject) => {\n    const chunks: Buffer[] = [];\n    req.on(\"data\", (chunk) => chunks.push(chunk));\n    req.on(\"end\", () => resolve(Buffer.concat(chunks).toString(\"utf-8\")));\n    req.on(\"error\", reject);\n  });\n}\n\nexport const createCacheAlertRoutes = (deps: ApiDeps) => {\n  const app = new Hono<AppEnv>();\n\n  // Full pending record (including the missing list) for building a picker.\n  app.get(\"/\", (c) => {\n    const monitor = deps.cacheMonitor();\n    return c.json({ pending: monitor?.pending ?? null });\n  });\n\n  app.post(\"/resolve\", async (c) => {\n    // Read from the raw Node stream (mirrors /api/__update): Hono's body helpers\n    // return empty under @hono/node-server. In tests (app.request), c.env.incoming\n    // is absent — fall back to arrayBuffer().\n    let body: unknown;\n    try {\n      const incoming = c.env?.incoming;\n      const raw = incoming\n        ? await readRawBody(incoming)\n        : Buffer.from(await c.req.arrayBuffer()).toString(\"utf-8\");\n      body = raw ? JSON.parse(raw) : {};\n    } catch {\n      return c.json({ error: \"invalid json\" }, 400);\n    }\n    const parsed = ResolveCacheAlertSchema.safeParse(body);\n    if (!parsed.success) {\n      return c.json({ error: \"invalid body\", details: parsed.error.flatten() }, 400);\n    }\n\n    const monitor = deps.cacheMonitor();\n    if (!monitor) return c.json({ ok: true, alreadyResolved: true });\n\n    const { fingerprint, action, ids } = parsed.data;\n    const result = await monitor.resolve(fingerprint, action, ids);\n\n    if (\"conflict\" in result) {\n      return c.json(\n        { error: \"fingerprint_mismatch\", currentFingerprint: result.currentFingerprint },\n        409,\n      );\n    }\n    if (\"alreadyResolved\" in result) {\n      return c.json({ ok: true, alreadyResolved: true });\n    }\n    return c.json(result);\n  });\n\n  return app;\n};\n","import { z } from \"zod\";\n\n// Body schema for PUT /api/config/claude-flags.\n//\n// Validated with zod rather than the hand-rolled `typeof` checks used elsewhere\n// in server.ts because this payload becomes process argv — it is a genuine trust\n// boundary, and the values can disable Claude's permission prompts entirely.\n//\n// This layer only enforces the SHAPE (a flat map of scalars/string arrays).\n// Which ids are legal, and which values each id accepts, is decided by\n// validateFlagValues() against the registry in src/claude-flags.ts — one source\n// of truth rather than two that can drift.\nexport const ClaudeFlagsBodySchema = z\n  .object({\n    values: z\n      .record(z.string(), z.union([z.string(), z.boolean(), z.array(z.string())]))\n      .default({}),\n    // A newline would corrupt the flat one-line-per-key server.yaml, so reject\n    // it here with a field error instead of silently stripping it.\n    extraArgs: z\n      .string()\n      .refine((v) => !/[\\r\\n]/.test(v), \"extraArgs must not contain newlines\")\n      .optional(),\n  })\n  .strict();\n\nexport type ClaudeFlagsBody = z.infer<typeof ClaudeFlagsBodySchema>;\n","import { Hono } from \"hono\";\nimport type { IncomingMessage } from \"http\";\nimport { ClaudeFlagsBodySchema } from \"../../schemas/claudeFlags.schema\";\nimport type { AppEnv } from \"../app\";\nimport type { ApiDeps } from \"../types/api-deps\";\n\nfunction readRawBody(req: IncomingMessage): Promise<string> {\n  return new Promise((resolve, reject) => {\n    const chunks: Buffer[] = [];\n    req.on(\"data\", (chunk) => chunks.push(chunk));\n    req.on(\"end\", () => resolve(Buffer.concat(chunks).toString(\"utf-8\")));\n    req.on(\"error\", reject);\n  });\n}\n\nexport const createConfigRoutes = (\n  deps: Pick<\n    ApiDeps,\n    \"claudeFlagsConfig\" | \"setClaudeFlagsConfig\" | \"featureFlagsConfig\" | \"localNoAuth\"\n  >,\n) => {\n  const app = new Hono<AppEnv>();\n\n  // The registry ships alongside the values so a client renders the form from\n  // one round-trip and can never offer a flag this server doesn't know.\n  app.get(\"/claude-flags\", (c) => c.json(deps.claudeFlagsConfig()));\n\n  // Read-only by design: feature flags resolve at boot (env > CLI > server.yaml\n  // > default), so there is no PUT counterpart. Changing one means a restart.\n  app.get(\"/feature-flags\", (c) => c.json(deps.featureFlagsConfig()));\n\n  app.put(\"/claude-flags\", async (c) => {\n    // Same reasoning as POST /api/auth/rotate: under localNoAuth any process on\n    // the machine can call this unauthenticated, and this endpoint can turn off\n    // Claude's permission prompts for every future session. Refuse rather than\n    // let a local process silently escalate the box.\n    if (deps.localNoAuth) {\n      return c.json({ error: \"claude flag changes are disabled while localNoAuth is active\" }, 403);\n    }\n\n    // Read from the raw Node stream (mirrors /api/cache/alert/resolve): Hono's\n    // body helpers return empty under @hono/node-server. In tests (app.request),\n    // c.env.incoming is absent — fall back to arrayBuffer().\n    let body: unknown;\n    try {\n      const incoming = c.env?.incoming;\n      const raw = incoming\n        ? await readRawBody(incoming)\n        : Buffer.from(await c.req.arrayBuffer()).toString(\"utf-8\");\n      body = raw ? JSON.parse(raw) : {};\n    } catch {\n      return c.json({ error: \"invalid json\" }, 400);\n    }\n\n    const parsed = ClaudeFlagsBodySchema.safeParse(body);\n    if (!parsed.success) {\n      return c.json({ error: \"invalid body\", details: parsed.error.flatten() }, 400);\n    }\n\n    try {\n      const result = deps.setClaudeFlagsConfig(parsed.data.values, parsed.data.extraArgs);\n      return c.json({\n        ...result,\n        ...(result.persisted\n          ? {}\n          : {\n              warning:\n                \"Flags applied in memory only. The server was started with --claude-flag, so \" +\n                \"the CLI values will be restored on restart. Drop the flag and let the server \" +\n                \"manage them via ~/.threadbase/server.yaml for changes to survive restarts.\",\n            }),\n      });\n    } catch (err) {\n      return c.json({ error: err instanceof Error ? err.message : \"could not apply flags\" }, 400);\n    }\n  });\n\n  return app;\n};\n","import { Hono } from \"hono\";\nimport type { AppEnv } from \"../app\";\nimport type { ApiDeps } from \"../types/api-deps\";\n\nconst ALREADY_HANDLED = 597;\nconst alreadyHandled = () => new Response(null, { status: ALREADY_HANDLED });\n\nexport const createConversationRoutes = (deps: ApiDeps) => {\n  const app = new Hono<AppEnv>();\n\n  app.get(\"/count\", async (c) => {\n    const url = new URL(c.req.url);\n    await deps.handleConversationsCount(url, c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  // QUERY (RFC 10008): safe + idempotent + cacheable like GET, but the query\n  // travels in a JSON body instead of ?q= — this endpoint's input is a single\n  // search string, exactly what QUERY was designed to carry. Must be\n  // registered before the greedy \"/:id{.+}\" catch-all or Hono would swallow\n  // \"<id>/search-target\" as a conversation id.\n  app.on(\"QUERY\", \"/:id{.+}/search-target\", async (c) => {\n    const id = c.req.param(\"id\");\n    if (await deps.isExcludedSubagent?.(id))\n      return c.json({ error: \"Conversation not found\" }, 404);\n    await deps.handleSearchTarget(id, c.env.incoming, c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  app.get(\"/:id{.+}\", async (c) => {\n    const id = c.req.param(\"id\");\n    const url = new URL(c.req.url);\n    const ifNoneMatch = c.req.header(\"if-none-match\");\n    await deps.handleGetConversation(id, url, c.env.outgoing, ifNoneMatch);\n    return alreadyHandled();\n  });\n\n  app.get(\"/\", async (c) => {\n    const url = new URL(c.req.url);\n    await deps.handleListConversations(url, c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  return app;\n};\n","import { Hono } from \"hono\";\nimport { contextRegistry } from \"../../e2ee/context\";\nimport { getLogger } from \"../../logger\";\nimport type { AppEnv } from \"../app\";\nimport type { ApiDeps } from \"../types/api-deps\";\n\nconst log = getLogger(\"e2ee\");\n\n/**\n * Paired-device management (C5 / mobile U10).\n *\n * Revoking a device previously meant rotating the shared API key, which\n * de-authenticated every other device at the same time. These routes make\n * revocation per-device and give the client something to display: which devices\n * exist, what each may do, and when it was last seen.\n *\n * No response ever includes a device token or its hash. A management surface\n * has no reason to hand back a credential, and this endpoint is exactly where\n * an accidental echo would be most damaging.\n */\nexport const createDeviceRoutes = (deps: Pick<ApiDeps, \"devicesRepo\" | \"wsHub\" | \"pushRepo\">) => {\n  const app = new Hono<AppEnv>();\n\n  /**\n   * Make a revocation reach the live process, not just the next request.\n   *\n   * `destroyDevice` drops every context the device still has indexed — N socket\n   * contexts, its REST context, and any unconsumed tickets. The hub closes by\n   * device identity rather than that answer because it can still own a socket\n   * whose context aged out of the registry's drain. Until this line existed, a\n   * revoked device kept a live encrypted socket, with its traffic keys resident\n   * in this process, until the peer happened to go away (design.md §4.4).\n   */\n  const cutLiveContexts = (deviceId: string): void => {\n    const destroyed = contextRegistry().destroyDevice(deviceId);\n    const sockets = deps.wsHub.closeDevice(deviceId);\n    if (destroyed.socketCtxIds.length || destroyed.restCtxIds.length || destroyed.tickets) {\n      log.info(\"[e2ee] revocation destroyed a device's live contexts\", {\n        event: \"e2ee.device_contexts_destroyed\",\n        sockets,\n        rest: destroyed.restCtxIds.length,\n        tickets: destroyed.tickets,\n      });\n    }\n  };\n\n  /**\n   * Revoking or erasing a device deletes its push tokens.\n   *\n   * Cross-database: devices are in runtime.db and push_tokens in cache.db, so\n   * there is no foreign key to lean on and this is the only place the two are\n   * joined. Delete rather than revoke, for the same reason the record itself\n   * goes — a retained row is still a stored delivery credential.\n   *\n   * Silent when the cache is unavailable: a device revoke must never fail\n   * because the conversation cache did not open.\n   */\n  const dropPushTokens = (deviceId: string): void => {\n    const deleted = deps.pushRepo?.()?.deleteForDevice(deviceId) ?? 0;\n    if (deleted) {\n      log.info(\"[push] revocation deleted a device's push tokens\", {\n        event: \"push.device_tokens_deleted\",\n        deviceId,\n        deleted,\n      });\n    }\n  };\n\n  app.get(\"/\", (c) => {\n    const repo = deps.devicesRepo();\n    // Report honestly rather than pretending no devices are paired: an empty\n    // list and \"the registry is unavailable\" mean very different things to a\n    // user deciding whether to revoke something.\n    if (!repo) return c.json({ devices: [], available: false });\n    return c.json({ devices: repo.list(), available: true });\n  });\n\n  app.post(\"/:id/revoke\", (c) => {\n    const repo = deps.devicesRepo();\n    if (!repo) {\n      return c.json({ error: \"Device registry is unavailable\", code: \"STORE_UNAVAILABLE\" }, 503);\n    }\n\n    const id = c.req.param(\"id\");\n    const existing = repo.get(id);\n    if (!existing) return c.json({ error: \"Device not found\" }, 404);\n\n    // Idempotent: revoking an already-revoked device is not an error, so a\n    // client retrying after a dropped response does not see a spurious failure.\n    if (existing.revoked_at != null) {\n      cutLiveContexts(id);\n      dropPushTokens(id);\n      return c.json({ ok: true, alreadyRevoked: true });\n    }\n\n    repo.revoke(id);\n    cutLiveContexts(id);\n    dropPushTokens(id);\n    return c.json({ ok: true, alreadyRevoked: false });\n  });\n\n  /**\n   * Erase a device record, rather than revoking it.\n   *\n   * Exists because there was no way to remove one. `revoke` is a soft delete\n   * that keeps the row for the audit surface, the registry lives in runtime.db,\n   * and no CLI command deletes that file — so a `devices` row, including the\n   * user-supplied name, was permanent. Additive: older clients never call it.\n   *\n   * Refuses a device that is still active. Deleting a live row frees its\n   * token_hash without telling the device anything, so it would stop being\n   * known rather than being refused; revoking first is what actually cuts the\n   * credential. `?force=1` is the escape hatch for someone who means it.\n   */\n  app.delete(\"/:id\", (c) => {\n    const repo = deps.devicesRepo();\n    if (!repo) {\n      return c.json({ error: \"Device registry is unavailable\", code: \"STORE_UNAVAILABLE\" }, 503);\n    }\n\n    const id = c.req.param(\"id\");\n    const existing = repo.get(id);\n    // Idempotent, like revoke: a client retrying after a dropped response gets\n    // the same answer rather than a spurious 404.\n    if (!existing) {\n      cutLiveContexts(id);\n      dropPushTokens(id);\n      return c.json({ ok: true, alreadyDeleted: true });\n    }\n\n    const force = c.req.query(\"force\") === \"1\" || c.req.query(\"force\") === \"true\";\n    if (existing.revoked_at == null && !force) {\n      return c.json(\n        {\n          error: \"Revoke the device before deleting it, or pass ?force=1\",\n          code: \"DEVICE_ACTIVE\",\n        },\n        409,\n      );\n    }\n\n    repo.delete(id);\n    // Same reason as revoke, and the reason it is here too: `?force=1` erases\n    // an ACTIVE row, so without this the credential is gone from the store\n    // while its sealed socket carries on with keys the store can no longer\n    // name. Erasing a device is at least as strong as revoking it.\n    cutLiveContexts(id);\n    dropPushTokens(id);\n    return c.json({ ok: true, alreadyDeleted: false });\n  });\n\n  /** Bulk erase of already-revoked devices. */\n  app.delete(\"/\", (c) => {\n    const repo = deps.devicesRepo();\n    if (!repo) {\n      return c.json({ error: \"Device registry is unavailable\", code: \"STORE_UNAVAILABLE\" }, 503);\n    }\n    const revokedIds = repo\n      .list()\n      .filter((device) => device.revokedAt != null)\n      .map((device) => device.deviceId);\n    const deleted = repo.deleteRevoked();\n    for (const deviceId of revokedIds) {\n      cutLiveContexts(deviceId);\n      dropPushTokens(deviceId);\n    }\n    return c.json({ ok: true, deleted });\n  });\n\n  return app;\n};\n","import { existsSync } from \"fs\";\nimport { Hono } from \"hono\";\nimport { locateProviderExe } from \"../../platform\";\nimport { PROVIDER_NAMES, type ProviderName } from \"../../providers\";\nimport {\n  buildReport,\n  type DiagnosticCheck,\n  redactPath,\n  redactValue,\n} from \"../../services/diagnostics/diagnostics\";\nimport { rehydrateSkipReason } from \"../../services/sessions/rehydrateSessions\";\nimport { currentBootToken } from \"../../utils/bootToken\";\nimport { getVersion } from \"../../version\";\nimport type { AppEnv } from \"../app\";\nimport type { ApiDeps } from \"../types/api-deps\";\n\n/**\n * GET /api/diagnostics — a versioned, redacted health report (C6).\n *\n * `/healthz` answers only \"is the process up\". When a session will not start,\n * that says nothing about why: the provider CLI may be missing, the cache may\n * have failed to open, or the clock may be skewed past the pairing TTL.\n *\n * Every subsystem is checked independently so one failure never masks another,\n * and each carries a stable remediation code the client maps to instructions\n * without parsing English.\n *\n * The response is designed to be pasted into a bug report, so paths are reduced\n * to their last two segments and the whole payload passes through redactValue()\n * before serialization.\n */\n\nfunction providerCheck(name: ProviderName): DiagnosticCheck {\n  try {\n    // Located, not merely resolved, and through the same entry point the\n    // session-start pre-flight uses so the two cannot disagree: neither\n    // resolver can fail — each falls back to the bare command name — so the\n    // failed branch below was unreachable, and this endpoint, whose entire job\n    // is explaining why a session will not start, reported a missing CLI as\n    // installed.\n    const exe = locateProviderExe(name);\n    if (exe !== null) {\n      // Report only that it resolved and roughly where — never the full path,\n      // which carries the username and home layout.\n      return {\n        id: `provider:${name}`,\n        status: \"ok\",\n        summary: `${name} CLI is installed.`,\n        remediation: \"NONE\",\n        detail: { location: redactPath(exe) },\n      };\n    }\n  } catch {\n    // Fall through to the not-installed answer below.\n  }\n  return {\n    id: `provider:${name}`,\n    status: \"failed\",\n    summary: `${name} CLI could not be located. Sessions for this provider cannot start.`,\n    remediation: \"PROVIDER_NOT_INSTALLED\",\n  };\n}\n\nexport const createDiagnosticsRoutes = (deps: ApiDeps) => {\n  const app = new Hono<AppEnv>();\n\n  app.get(\"/\", (c) => {\n    const checks: DiagnosticCheck[] = [];\n\n    checks.push({\n      id: \"streamer\",\n      status: \"ok\",\n      summary: \"Streamer is running.\",\n      remediation: \"NONE\",\n      detail: { version: getVersion(), uptimeSeconds: Math.floor(process.uptime()) },\n    });\n\n    for (const name of PROVIDER_NAMES) {\n      checks.push(providerCheck(name));\n    }\n\n    // The cache backs conversation reads; without it every request falls back\n    // to slower disk-only scans, which is degraded rather than broken.\n    const cacheAlert = deps.cacheMonitor()?.healthzField();\n    checks.push(\n      cacheAlert\n        ? {\n            id: \"cache\",\n            status: \"degraded\",\n            summary: \"Conversation cache reported an integrity alert.\",\n            remediation: \"CACHE_DEGRADED\",\n          }\n        : {\n            id: \"cache\",\n            status: \"ok\",\n            summary: \"Conversation cache is healthy.\",\n            remediation: \"NONE\",\n          },\n    );\n\n    // node-pty is a native addon; if it failed to load, no managed session can\n    // start regardless of provider availability.\n    let ptyOk = true;\n    try {\n      require.resolve(\"node-pty\");\n    } catch {\n      ptyOk = false;\n    }\n    checks.push(\n      ptyOk\n        ? { id: \"pty\", status: \"ok\", summary: \"PTY subsystem is available.\", remediation: \"NONE\" }\n        : {\n            id: \"pty\",\n            status: \"failed\",\n            summary: \"node-pty failed to load, so no managed session can start.\",\n            remediation: \"PTY_UNAVAILABLE\",\n          },\n    );\n\n    const home = process.env.HOME ?? process.env.USERPROFILE ?? \"\";\n    const claudeProjects = home ? `${home}/.claude/projects` : \"\";\n    checks.push(\n      claudeProjects && existsSync(claudeProjects)\n        ? {\n            id: \"filesystem\",\n            status: \"ok\",\n            summary: \"Provider history directory is present.\",\n            remediation: \"NONE\",\n            detail: { location: redactPath(claudeProjects) },\n          }\n        : {\n            id: \"filesystem\",\n            status: \"degraded\",\n            summary: \"Provider history directory was not found; history may be unavailable.\",\n            remediation: \"FS_SCOPE_MISSING\",\n          },\n    );\n\n    // Final redaction pass. Individual checks are written not to include\n    // secrets, but this payload is meant to be shared, so one careless field\n    // must not be able to leak a credential.\n    return c.json(redactValue(buildReport(checks)));\n  });\n\n  /**\n   * GET /api/diagnostics/sessions — why each registry row ended up as it did\n   * (plan Phase 5, gap G11).\n   *\n   * `GET /api/sessions` shows the outcome; this shows the reasoning. \"My\n   * session did not come back after a restart\" is otherwise unanswerable\n   * without the server's logs, and the interesting rows are precisely the ones\n   * that never made it into the session list.\n   *\n   * Read-only and side-effect free: it recomputes the rehydration decision from\n   * the same pure function the boot path uses rather than recording one, so\n   * calling it can never change what a later boot would do.\n   */\n  app.get(\"/sessions\", (c) => {\n    const repo = deps.managedSessionsRepo();\n    if (!repo) {\n      return c.json(\n        { error: \"Session registry is unavailable\", code: \"REGISTRY_UNAVAILABLE\" },\n        503,\n      );\n    }\n\n    const rows = repo.listAll();\n    const verdicts = deps.sessionVerdicts();\n    const bootToken = currentBootToken();\n    const now = Date.now();\n\n    const sessions = rows.map((row) => {\n      const verdict = verdicts.get(row.session_id);\n      const skip = rehydrateSkipReason(row, { now, projectExists: existsSync });\n      return {\n        sessionId: row.session_id,\n        provider: row.provider,\n        status: row.status,\n        statusSource: row.status_source,\n        statusUpdatedAt: new Date(row.status_updated_at).toISOString(),\n        // Whether the recorded pid is probeable at all this boot, not whether\n        // it is alive — a mismatch means the question was never asked.\n        //\n        // NOT named for the boot token it derives from: `redactValue`'s\n        // SECRET_KEY_RE matches any key containing \"token\", so `bootTokenMatches`\n        // was scrubbed to the string \"[redacted]\" and the field shipped useless.\n        // The regex is deliberately over-broad for a payload meant to be pasted\n        // into bug reports, so the field moved rather than the guard.\n        recordedThisBoot: row.boot_token != null && row.boot_token === bootToken,\n        // Absent when this boot never classified the row: a clean restart\n        // stamps completed_at on the way out, which takes it out of the probe\n        // set entirely. That absence is itself the answer.\n        lifecycle: verdict?.lifecycle ?? null,\n        lifecycleReason: verdict?.reason ?? null,\n        rehydrated: skip == null,\n        rehydrateSkipReason: skip,\n        projectExists: existsSync(row.project_path),\n        projectPath: redactPath(row.project_path),\n      };\n    });\n\n    // Same contract as the report above: meant to be pasted into a bug report,\n    // so paths are reduced and the whole payload gets a final redaction pass.\n    return c.json(redactValue({ generatedAt: new Date().toISOString(), sessions }));\n  });\n\n  return app;\n};\n","/**\n * Diagnostics contract (C6).\n *\n * `/healthz` answers one question — is the process up — and returns\n * `{ ok, version }`. When a user's session will not start, that tells them\n * nothing about why: the provider CLI may be missing, the database may have\n * failed to migrate, the PTY subsystem may be unavailable, or the clock may be\n * skewed enough to break token validation.\n *\n * This produces a structured report where each subsystem is checked\n * independently, so one failure never masks another, and every failure carries a\n * STABLE remediation code the client can map to instructions without parsing\n * English.\n *\n * Redaction is a contract requirement, not a nicety: this endpoint is designed\n * to be copied into a bug report. See `redactPath` below.\n */\n\nexport const DIAGNOSTICS_CONTRACT_VERSION = 1;\n\nexport type CheckStatus = \"ok\" | \"degraded\" | \"failed\" | \"unknown\";\n\n/**\n * Stable, machine-readable remediation identifiers.\n *\n * Clients map these to localized instructions, so they are part of the contract:\n * renaming one is a breaking change. New codes may be added; existing ones must\n * keep their meaning.\n */\nexport type RemediationCode =\n  | \"PROVIDER_NOT_INSTALLED\"\n  | \"PROVIDER_VERSION_UNVERIFIED\"\n  | \"DB_UNAVAILABLE\"\n  | \"DB_MIGRATION_PENDING\"\n  | \"PTY_UNAVAILABLE\"\n  | \"CACHE_DEGRADED\"\n  | \"CLOCK_SKEWED\"\n  | \"FS_SCOPE_MISSING\"\n  | \"NONE\";\n\nexport interface DiagnosticCheck {\n  /** Stable identifier for the subsystem, e.g. \"database\". */\n  id: string;\n  status: CheckStatus;\n  /** Human-readable summary. Never contains secrets or full paths. */\n  summary: string;\n  remediation: RemediationCode;\n  /** Structured, redacted detail. Optional. */\n  detail?: Record<string, string | number | boolean | null>;\n}\n\nexport interface DiagnosticsReport {\n  contractVersion: number;\n  generatedAt: string;\n  /** Worst status across all checks — a single field for a client to branch on. */\n  overall: CheckStatus;\n  checks: DiagnosticCheck[];\n}\n\n/**\n * Reduce a filesystem path to its last two segments.\n *\n * A full path leaks the user's home directory layout, their username, and often\n * client or project names. The tail is enough to recognize *which* directory is\n * meant when you already know your own machine, which is all a diagnostic needs.\n */\nexport function redactPath(path: string | null | undefined): string | null {\n  if (!path) return null;\n  const parts = path.split(/[/\\\\]/).filter(Boolean);\n  if (parts.length <= 2) return parts.join(\"/\");\n  return `…/${parts.slice(-2).join(\"/\")}`;\n}\n\n/** Worst status wins, so a single failure is never hidden by surrounding successes. */\nexport function worstStatus(checks: DiagnosticCheck[]): CheckStatus {\n  const rank: Record<CheckStatus, number> = { ok: 0, unknown: 1, degraded: 2, failed: 3 };\n  return checks.reduce<CheckStatus>(\n    (worst, c) => (rank[c.status] > rank[worst] ? c.status : worst),\n    \"ok\",\n  );\n}\n\n/**\n * Clock skew against a trusted reference, in milliseconds.\n *\n * Matters because pair tokens carry a 180-second TTL: a device whose clock is\n * far enough off will have every pairing attempt rejected as expired, with no\n * indication that time is the cause.\n */\nexport const CLOCK_SKEW_WARN_MS = 60_000;\n\nexport function clockSkewCheck(localNow: number, referenceNow: number | null): DiagnosticCheck {\n  if (referenceNow === null) {\n    return {\n      id: \"clock\",\n      status: \"unknown\",\n      summary: \"No trusted time reference was available to compare against.\",\n      remediation: \"NONE\",\n    };\n  }\n  const skewMs = localNow - referenceNow;\n  const magnitude = Math.abs(skewMs);\n  if (magnitude <= CLOCK_SKEW_WARN_MS) {\n    return {\n      id: \"clock\",\n      status: \"ok\",\n      summary: \"System clock is within tolerance.\",\n      remediation: \"NONE\",\n      detail: { skewMs },\n    };\n  }\n  return {\n    id: \"clock\",\n    status: \"degraded\",\n    summary:\n      `System clock differs from the reference by ${Math.round(magnitude / 1000)}s. ` +\n      \"Pairing tokens expire after 180s, so a large skew can make every pairing attempt fail.\",\n    remediation: \"CLOCK_SKEWED\",\n    detail: { skewMs },\n  };\n}\n\nexport function buildReport(checks: DiagnosticCheck[], now: Date = new Date()): DiagnosticsReport {\n  return {\n    contractVersion: DIAGNOSTICS_CONTRACT_VERSION,\n    generatedAt: now.toISOString(),\n    overall: worstStatus(checks),\n    checks,\n  };\n}\n\n/**\n * Recursively strip anything secret-shaped from a value destined for the\n * report.\n *\n * Belt-and-braces: individual checks are written not to include secrets, but\n * this endpoint exists to be pasted into bug reports, so a single careless\n * check must not be able to leak a credential. Key-name matching is deliberately\n * broad — a false positive costs a redacted diagnostic, a false negative costs a\n * leaked key.\n */\nconst SECRET_KEY_RE = /(key|token|secret|password|passwd|credential|authorization|cookie)/i;\n\nexport function redactValue<T>(value: T): T {\n  if (Array.isArray(value)) {\n    return value.map((v) => redactValue(v)) as unknown as T;\n  }\n  if (value && typeof value === \"object\") {\n    const out: Record<string, unknown> = {};\n    for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n      out[k] = SECRET_KEY_RE.test(k) ? \"[redacted]\" : redactValue(v);\n    }\n    return out as unknown as T;\n  }\n  return value;\n}\n","import type { ManagedSessionRow } from \"../../db/repositories/managed-sessions.repository\";\nimport { CODEX_CLI_PROVIDER } from \"../../providers\";\n\n/**\n * Which id can actually resume a registry row (persistence plan Phase 3, gap G6).\n *\n * Claude's session id is always resumable as-is: it was passed to the CLI as\n * `--session-id`, so the JSONL is named after it and `--resume <id>` finds it.\n *\n * Codex has no such flag. A fresh Codex session is keyed by a local placeholder\n * UUID and its real rollout id arrives later, via `watchForCodexRollout`, as\n * `bound_conversation_id`. `codex resume <placeholder>` fails, so the bound id\n * is the only usable one — and a row that never bound has none at all, which is\n * what the `null` here means. Callers must treat `null` as \"not resumable\",\n * never as \"resume by session_id\".\n */\nexport function resumeIdForRow(row: ManagedSessionRow): string | null {\n  if (row.provider !== CODEX_CLI_PROVIDER) return row.session_id;\n  return row.bound_conversation_id;\n}\n","import type { ManagedSessionRow } from \"../../db/repositories/managed-sessions.repository\";\nimport type { ManagedSession, StatusSource } from \"../../types\";\nimport { resumeIdForRow } from \"./resumeIdentity\";\n\n/**\n * Boot rehydration (persistence plan Phase 1, gaps G1/G2/G8).\n * See docs/plans/live-sessions-persistence-plan.md §4.\n *\n * `recordShutdownState()` stamps `completed_at` on every live session as the\n * streamer stops, which takes the row out of the reconciler's probe set. So a\n * *cleanly* restarted session is not classified as anything — it simply\n * disappears from `GET /api/sessions`, because `SessionStore` starts empty and\n * nothing ever seeds it from the registry.\n *\n * This module is the decision half of the fix: which rows come back, and what\n * they look like when they do. Pure functions with no database import, mirroring\n * how `classifySession` is split out of `reconcileSessions` — the decision table\n * is the part worth testing, and it should not need a SQLite file to do it.\n *\n * The stub these produce holds no PTY and never reaches `LiveSessionManager`;\n * it lives in `SessionStore` alone, so the idle reaper and the grace timer\n * (both of which iterate `ptyManager.listSessions()`) cannot see it.\n */\n\n/** Most recovered sessions to seed in one boot. */\nexport const REHYDRATE_MAX = 25;\n\n/** How far back a registry row may reach and still be offered as recoverable. */\nexport const REHYDRATE_WINDOW_MS = 7 * 24 * 60 * 60 * 1000;\n\n/**\n * Registry `status_source` values meaning \"the agent's own process ended it\",\n * as opposed to `shutdown`, which means we did. Both vocabularies appear here:\n * the registry writes `exit`, the wire's StatusSource says `process-exit`.\n */\nconst AGENT_EXIT_SOURCES = new Set([\"exit\", \"process-exit\"]);\n\nexport interface ShouldRehydrateOptions {\n  now: number;\n  /** Whether the row's project directory still exists on disk. */\n  projectExists: (projectPath: string) => boolean;\n  /**\n   * Whether the conversation cache holds a row for this id. Omitted when there\n   * is no cache, which leaves an unprompted row unprovable rather than empty.\n   */\n  hasConversation?: (id: string) => boolean;\n}\n\n/**\n * Why a registry row was not brought back, or `null` when it was.\n *\n * A stable code rather than a sentence: it is logged per row and surfaced by\n * `GET /api/diagnostics/sessions`, where \"my session did not come back\" has to\n * be answerable without reading the source.\n */\nexport type RehydrateSkipReason =\n  | \"never_prompted\"\n  | \"codex_unbound\"\n  | \"project_missing\"\n  | \"too_old\"\n  | \"agent_exited\";\n\n/**\n * Should this registry row come back as a recovered session? `null` means yes.\n *\n * Three ways to answer no, all of them \"resuming this would waste the user's\n * tap\":\n *\n *  - the project directory is gone — `handleResume` would fail to spawn, and\n *    `classifyResumability` already encodes the same rule for conversations;\n *  - the row is older than the window — a week-old session belongs in the\n *    conversations list, not the live-session list;\n *  - the agent exited on its own without recording a failure — it finished, so\n *    there is nothing to recover. A row that recorded a `failureReason` is\n *    deliberately still offered: that one was cut short.\n *\n * Plus a fourth that is not a heuristic but an impossibility: a Codex row that\n * never bound its rollout id has no id that can resume it at all (G6).\n *\n * And a fifth, checked first because the caller deletes its row rather than\n * skipping it: a session that was never prompted and has no cached\n * conversation under any of its ids. Neither provider writes a transcript\n * before the first turn, so the stub would open on \"No messages\" and resume\n * into nothing. Same evidence the stop path's `shouldForgetEmptySession` uses.\n */\nexport function rehydrateSkipReason(\n  row: ManagedSessionRow,\n  opts: ShouldRehydrateOptions,\n): RehydrateSkipReason | null {\n  const { hasConversation } = opts;\n  if (\n    row.prompt_count === 0 &&\n    hasConversation &&\n    ![row.session_id, row.bound_conversation_id, row.resumed_from_conversation_id].some(\n      (id) => id != null && hasConversation(id),\n    )\n  ) {\n    return \"never_prompted\";\n  }\n  if (resumeIdForRow(row) == null) return \"codex_unbound\";\n  if (!opts.projectExists(row.project_path)) return \"project_missing\";\n  if (opts.now - row.status_updated_at > REHYDRATE_WINDOW_MS) return \"too_old\";\n  if (AGENT_EXIT_SOURCES.has(row.status_source) && row.failure_reason == null) {\n    return \"agent_exited\";\n  }\n  return null;\n}\n\n/**\n * Registry row → an idle, non-attached `ManagedSession` stub.\n *\n * `status` is `idle` rather than anything new: a fresh `SessionStatus` value\n * would be rejected by `VALID_STATUSES` on `?status=` and dropped by\n * `SessionStore.paginate`'s filter, making recovered sessions *vanish* from\n * already-shipped mobile clients. The recovered-ness travels on `rehydrated`\n * instead, which `managedToResponse` turns into the existing\n * `ownership: \"historical\"` / `lifecycle: \"resumable\"` pair.\n */\nexport function rowToStubSession(row: ManagedSessionRow): ManagedSession {\n  return {\n    id: row.session_id,\n    isSubagent: row.is_subagent === 1,\n    parentConversationId: row.parent_conversation_id ?? null,\n    provider: row.provider as ManagedSession[\"provider\"],\n    projectPath: row.project_path,\n    projectName: row.project_name,\n    branch: row.branch,\n    // No PTY exists for a stub, so this is the only truthful status.\n    status: \"idle\",\n    startedAt: new Date(row.started_at),\n    completedAt: row.completed_at != null ? new Date(row.completed_at) : null,\n    promptCount: row.prompt_count,\n    lastOutput: \"\",\n    rehydrated: true,\n    ...(row.session_name != null && { sessionName: row.session_name }),\n    ...(row.project_id != null && { projectId: row.project_id }),\n    ...(row.bound_conversation_id != null && { boundConversationId: row.bound_conversation_id }),\n    ...(row.resumed_from_conversation_id != null && {\n      resumedFromConversationId: row.resumed_from_conversation_id,\n    }),\n    ...(row.failure_reason != null && { failureReason: row.failure_reason }),\n    ...(row.last_activity_at != null && { lastActivityAt: new Date(row.last_activity_at) }),\n    // Only `shutdown` crosses over. It is the one registry source that is also a\n    // wire StatusSource *and* that genuinely describes the `idle` above — the\n    // streamer stopped this session. A crashed row still says `transition` over\n    // a `running` status, and copying that here would attach observed-confidence\n    // provenance to a status we derived at boot, so leave it unset instead.\n    ...(row.status_source === \"shutdown\" && {\n      statusSource: \"shutdown\" satisfies StatusSource,\n      statusUpdatedAt: new Date(row.status_updated_at),\n      // `status` above had to flatten to `idle`, which erases whether the agent\n      // was mid-answer when we stopped it. Carried separately so a client can\n      // say \"interrupted mid-response\" without a novel SessionStatus value.\n      // Gated on the same `shutdown` source: a crashed row's `running` is a\n      // frozen value nobody confirmed, not an observation.\n      ...((row.status === \"running\" || row.status === \"waiting_input\") && {\n        interruptedStatus: row.status,\n      }),\n    }),\n  };\n}\n","import { readFileSync } from \"node:fs\";\nimport os from \"node:os\";\n\n/**\n * Machine boot identity — stable within one boot, different across boots.\n * See docs/plans/live-sessions-persistence-plan.md Phase 2.\n *\n * Stored alongside a session's pid so the boot reconciler can tell a pid it can\n * still probe from one that belongs to a previous boot, where the number has\n * since been handed to someone else's process.\n *\n * The token is only ever compared for **equality**, and a mismatch always means\n * \"skip the probe, treat as resumable\" — the harmless direction. So the uptime\n * fallback being imprecise (os.uptime() excludes suspend time on some\n * platforms) can only cost a spurious mismatch within one boot; it cannot\n * manufacture a spurious *match* across a reboot.\n */\n\nlet cached: string | undefined;\n\n/** Computed once per process — this is machine state, not a live reading. */\nexport function currentBootToken(): string {\n  if (cached === undefined) cached = computeBootToken();\n  return cached;\n}\n\nfunction computeBootToken(): string {\n  if (process.platform === \"linux\") {\n    try {\n      // Exact, and involves no clock at all.\n      const bootId = readFileSync(\"/proc/sys/kernel/random/boot_id\", \"utf8\").trim();\n      if (bootId) return bootId;\n    } catch {\n      // Unreadable (container, hardened sysctl) — fall through to the estimate.\n    }\n  }\n  // Approximate boot instant, bucketed to 10s to absorb clock drift.\n  return String(Math.round((Date.now() - os.uptime() * 1000) / 10_000));\n}\n","// Noise_IKpsk1_25519_ChaChaPoly_SHA256, written against the Noise Protocol\n// Framework specification revision 34.\n//\n// WHY THIS IS HAND-WRITTEN, since hand-written crypto is normally the wrong\n// answer. dilemmas.md D-1 chose the `IK` pattern and named its own flip\n// condition: no maintained Noise implementation that works in React Native\n// *and* Node without a native module. That condition holds (surveyed\n// 2026-08-15 — `noise-protocol` and `noise-handshake` both need\n// `sodium-universal`, which Hermes cannot run; the pure-JS alternatives are\n// either unmaintained or libp2p-coupled). D-1's prescribed fallback is exactly\n// this: an `IK`-shaped exchange written against the spec and reviewed as such,\n// never an ad-hoc design.\n//\n// So: the pattern, the token order, the transcript hash, and the key-mixing\n// order are all decided by the specification rather than by us. Nothing here is\n// invented. Where the spec offers a choice, the choice is stated in a comment\n// with the section it comes from, because \"why is it done this way\" must be\n// answerable without re-deriving the protocol.\n//\n// The client half lives in tb-mobile over @stablelib. The two implementations\n// agree because they are checked against the same committed test vectors\n// (`__tests__/fixtures/noise-ikpsk1-vectors.json`), which is the only thing\n// that catches a transcript divergence between two independent implementations.\n//\n//   IKpsk1:\n//     <- s                        (pre-message: the QR's `spk`)\n//     ...\n//     -> e, es, s, ss, psk        (message 1, from the phone)\n//     <- e, ee, se                (message 2, from the streamer)\n//\n// `psk1` places the `psk` token at the END of the first message (spec §9.3), so\n// the pair token binds the handshake to *this* QR: completing it proves the\n// initiator scanned this code rather than merely that it reached the server.\n\nimport {\n  createCipheriv,\n  createDecipheriv,\n  createHash,\n  createPrivateKey,\n  createPublicKey,\n  diffieHellman,\n  generateKeyPairSync,\n  hkdfSync,\n  type KeyObject,\n} from \"crypto\";\nimport { importSecret, isBytes, own, redactKeyMaterial, unpooled } from \"./protocol\";\n\nexport const NOISE_PROTOCOL_NAME = \"Noise_IKpsk1_25519_ChaChaPoly_SHA256\";\n\n/**\n * The psk-less pattern, used by `POST /api/e2ee/open` (NONCE-DESIGN §11).\n *\n * The transport handshake runs against static keys pairing already stored and\n * has no pair token, so there is no pre-shared secret to mix. A constant public\n * \"PSK\" was considered and rejected: it reduces to plain `IK` anyway and\n * encodes \"there is a PSK here that means nothing\", which a reader takes as a\n * freshness guarantee that does not exist.\n *\n * The name is not decoration — it is the string that seeds `h`, so it is itself\n * domain separation: a message from one pattern cannot be read by the other\n * even before the prologue is considered.\n */\nexport const NOISE_IK_PROTOCOL_NAME = \"Noise_IK_25519_ChaChaPoly_SHA256\";\n\n/**\n * Which of the two patterns a handshake call means.\n *\n * **Stated, never inferred.** This used to be decided by whether `psk` was\n * present, which made a forgotten argument select the WEAKER protocol: a\n * pairing call site that omitted its psk would have silently run plain `IK`\n * and lost the pair-token binding that is the entire reason pairing uses\n * `IKpsk1` (spec §9.3, design.md §2.4). A missing argument must never be a\n * downgrade, so the pattern is named and the two are checked against each\n * other in both directions — a psk handed to `IK` is the same caller confusion\n * wearing the other face.\n *\n * The default is the STRONGER pattern, so an un-updated call site that forgets\n * its psk throws instead of quietly weakening.\n */\nexport type NoisePattern = \"IKpsk1\" | \"IK\";\n\nconst NOISE_PATTERNS: readonly NoisePattern[] = [\"IKpsk1\", \"IK\"];\n\n/**\n * The protocol name for a pattern, or a throw.\n *\n * **Exhaustive, and fail-closed on anything unrecognised.** This used to end in\n * `pattern === \"IKpsk1\" ? A : B`, so a value that matched neither guard —\n * `\"IKPSK1\"`, `\"ik\"`, anything arriving from a config file, a wire field or a\n * client artefact — fell through to psk-less `IK` and silently dropped the\n * pair-token binding. TypeScript rules that out for callers inside this\n * repository; the client track consumes this module as an artefact, and a type\n * is not a runtime check.\n *\n * So there are two layers: a runtime membership test for values that were never\n * typed, and a `never` arm that makes adding a third pattern a compile error\n * here rather than a silent default somewhere else.\n */\n/**\n * A prologue is REQUIRED and must be real bytes — of any length, since the two\n * namespace strings differ in length.\n *\n * Not `assertBytes`, which pins a width: this is the presence-and-type half of\n * the same rule. It is a parameter rather than a default because\n * `args.prologue ?? PAIR_PROLOGUE` is a prototype-chain read, and a polluted\n * `Object.prototype.prologue` made the PAIRING handshake accept an `/open`\n * message — §11's domain separation collapsing through a language default\n * nobody wrote.\n */\nfunction assertPrologue(prologue: unknown): asserts prologue is Buffer {\n  if (!(prologue instanceof Uint8Array) || prologue.BYTES_PER_ELEMENT !== 1) {\n    throw new NoiseError(\"prologue is required: pass PAIR_PROLOGUE or OPEN_PROLOGUE\");\n  }\n}\n\nfunction protocolNameFor(pattern: NoisePattern, psk: Buffer | undefined): string {\n  if (!NOISE_PATTERNS.includes(pattern)) {\n    throw new NoiseError(\n      `Unknown Noise pattern ${JSON.stringify(String(pattern))}; expected \"IKpsk1\" or \"IK\"`,\n    );\n  }\n  switch (pattern) {\n    case \"IKpsk1\":\n      // ONE guard, and it checks BYTE LENGTH.\n      //\n      // Two versions of this were wrong in the same way. `!psk` accepted\n      // `Buffer.alloc(0)`, which is truthy, and completed a full `IKpsk1`\n      // handshake over an empty psk. `psk.length !== 32` then accepted\n      // `new Float64Array(32)`, whose `.length` is 32 and whose byteLength is\n      // 256, binding 256 zero bytes. Both produce the thing §11 rejects — a\n      // wire that says `IKpsk1` over a binding that is a constant — and both\n      // arrived through a guard rather than a decision.\n      //\n      // The defect was never in any single guard. It was in writing the guard\n      // four times, so `isBytes` is now the only place the question is asked.\n      if (!isBytes(psk, HASHLEN)) {\n        throw new NoiseError(\n          `The IKpsk1 pattern requires a ${HASHLEN}-byte psk; pass one, or pattern: \"IK\"`,\n        );\n      }\n      return NOISE_PROTOCOL_NAME;\n    case \"IK\":\n      if (psk) {\n        throw new NoiseError('The IK pattern takes no psk; drop it, or pattern: \"IKpsk1\"');\n      }\n      return NOISE_IK_PROTOCOL_NAME;\n    default: {\n      const unreachable: never = pattern;\n      throw new NoiseError(`Unhandled Noise pattern ${String(unreachable)}`);\n    }\n  }\n}\n\n/**\n * Prologue for the PAIRING handshake, mixed into the transcript before any\n * token (spec §5.3, `MixHash(prologue)`).\n *\n * Not in design.md, and added deliberately. The design has two `IK` handshakes:\n * this one at `/api/pair/exchange` with the pair token as PSK, and a later one\n * at `/api/e2ee/open` against stored static keys with no PSK. Without a\n * prologue the two transcripts differ only by the presence of the PSK, so\n * \"could a message from one be replayed into the other\" becomes a question you\n * answer by reasoning about the PSK. A prologue answers it by construction, and\n * it costs one hash.\n *\n * **`\"threadbase-e2ee/<version> <purpose>\"` is a namespace, not one string.**\n * Its sibling is `\"threadbase-e2ee/1 open\"` for `/api/e2ee/open`, named here\n * rather than left for that phase to invent: half a domain separation is a\n * property nobody has, and a convention chosen once with both instances visible\n * is the one that survives a third handshake. The constant itself is not\n * declared until something uses it.\n *\n * Changing this string is a silent, total incompatibility with tb-mobile — it\n * is hashed into `h` before any token, so the only symptom is \"decryption\n * failed\". It is pinned by a committed vector for that reason.\n */\nexport const PAIR_PROLOGUE = Buffer.from(\"threadbase-e2ee/1 pair\", \"utf-8\");\n\n/**\n * The sibling named above, now that `/api/e2ee/open` exists to use it.\n *\n * Same namespace, different purpose, so a message from the pairing handshake\n * can never be replayed into the transport handshake or the other way round —\n * by construction, rather than by an argument about the PSK.\n */\nexport const OPEN_PROLOGUE = Buffer.from(\"threadbase-e2ee/1 open\", \"utf-8\");\n\n// The `/open` handshake takes NO psk: pass `pattern: \"IK\"` to these calls and\n// omit `psk`. Omitting `psk` alone is NOT how the pattern is selected — that\n// would make a forgotten argument a downgrade — and it throws.\n\nconst DHLEN = 32;\nconst HASHLEN = 32;\nconst TAGLEN = 16;\n/** `e` (32) + `s` sealed (32 + 16) — everything before message 1's payload. */\nexport const NOISE_MESSAGE_1_OVERHEAD = DHLEN + DHLEN + TAGLEN + TAGLEN;\n/**\n * The initiator's ephemeral public key, or `null` when the message is too short\n * to contain one.\n *\n * `e` is the FIRST field of message 1 and travels in the clear (spec §7.4), so\n * it can be read before any Diffie-Hellman — which is what lets\n * `/api/e2ee/open` reject a replayed msg1 without paying for it. Reading it\n * lives here, with the rest of the wire layout, rather than in a route indexing\n * into a buffer by a number it inferred.\n *\n * Returns a VIEW, not a copy: callers must not mutate it.\n */\nexport function messageEphemeral(message1: Buffer): Buffer | null {\n  if (message1.length < NOISE_MESSAGE_1_OVERHEAD) return null;\n  return message1.subarray(0, DHLEN);\n}\n\n/** `e` (32) — everything before message 2's payload. */\nexport const NOISE_MESSAGE_2_OVERHEAD = DHLEN + TAGLEN;\n\n/**\n * Cap on a handshake message, checked BEFORE anything is allocated or parsed.\n *\n * The Noise spec's own transport limit is 65535 bytes. This is far below it\n * because our payloads are a handful of JSON fields, and because\n * `/api/pair/exchange` is a public, unauthenticated endpoint — the same\n * reasoning D-9 applies to the unseal middleware, reaching this far forward.\n */\nexport const NOISE_MAX_MESSAGE_BYTES = 4096;\n\nexport class NoiseError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = \"NoiseError\";\n  }\n}\n\n// ─── X25519 key helpers ─────────────────────────────────────────────\n//\n// Raw 32-byte keys are what travels; Node's crypto wants KeyObjects. The JWK\n// route is the same one server-identity.ts uses, so there is one representation\n// of an X25519 key in this codebase rather than two.\n\nexport interface KeyPair {\n  publicKey: KeyObject;\n  privateKey: KeyObject;\n  /** Raw 32 bytes, which is what goes on the wire. */\n  publicKeyRaw: Buffer;\n}\n\nexport function generateKeyPair(): KeyPair {\n  const { publicKey, privateKey } = generateKeyPairSync(\"x25519\");\n  return { publicKey, privateKey, publicKeyRaw: rawPublicKey(publicKey) };\n}\n\n/**\n * A `KeyPair` around a private key this process already holds.\n *\n * The bridge from `loadOrCreateServerIdentity()`, which owns the key file and\n * returns a bare `KeyObject`, to the handshake, which needs the public half\n * alongside it. Kept here rather than in server-identity.ts so that module\n * stays about storing a key rather than about the protocol that uses it.\n */\nexport function keyPairFrom(privateKey: KeyObject): KeyPair {\n  const publicKey = createPublicKey(privateKey);\n  return { publicKey, privateKey, publicKeyRaw: rawPublicKey(publicKey) };\n}\n\n/**\n * Raw 32 bytes out of a KeyObject. JWK OKP `x` is base64url of exactly that.\n *\n * Accepts either half: `createPublicKey` derives the public key from a private\n * one but rejects a KeyObject that is already public, so the type is checked\n * rather than the call being made unconditionally.\n */\nexport function rawPublicKey(key: KeyObject): Buffer {\n  const pub = key.type === \"public\" ? key : createPublicKey(key);\n  const jwk = pub.export({ format: \"jwk\" });\n  if (jwk.crv !== \"X25519\" || typeof jwk.x !== \"string\") {\n    throw new NoiseError(\"Not an X25519 public key\");\n  }\n  return Buffer.from(jwk.x, \"base64url\");\n}\n\n/**\n * A KeyObject from raw bytes, or a `NoiseError`.\n *\n * This is a trust boundary: the bytes are the QR's `spk` on the client side and\n * an attacker-supplied handshake message on the server side. A wrong length is\n * rejected here rather than being padded, truncated, or handed to a DH that\n * would fail somewhere less legible.\n */\nexport function publicKeyFromRaw(raw: Buffer): KeyObject {\n  if (raw.length !== DHLEN) {\n    throw new NoiseError(`X25519 public key must be ${DHLEN} bytes, got ${raw.length}`);\n  }\n  try {\n    return createPublicKey({\n      key: { kty: \"OKP\", crv: \"X25519\", x: raw.toString(\"base64url\") },\n      format: \"jwk\",\n    });\n  } catch {\n    // The input is dropped rather than interpolated: on the responder side it\n    // is attacker-controlled, and echoing it into a log or an error is how a\n    // parser becomes a reflection surface.\n    throw new NoiseError(\"Invalid X25519 public key\");\n  }\n}\n\n/**\n * A keypair from a raw 32-byte private scalar.\n *\n * Exists for the committed test vectors: a vector is only a contract if the\n * keys are fixed, and there is no other way to hand Node a chosen X25519\n * private key. Not used by any production path — every real keypair comes from\n * `generateKeyPair()` or the identity key file.\n *\n * Goes through PKCS#8 DER rather than JWK because a JWK OKP private key must\n * carry a matching `x`, and the point here is to supply only `d`. The prefix is\n * the fixed X25519 PrivateKeyInfo header (RFC 8410): SEQUENCE, version 0,\n * AlgorithmIdentifier 1.3.101.110, then an OCTET STRING wrapping the 32-byte\n * scalar.\n */\nexport function keyPairFromRawPrivate(raw: Buffer): KeyPair {\n  if (raw.length !== DHLEN) {\n    throw new NoiseError(`X25519 private key must be ${DHLEN} bytes, got ${raw.length}`);\n  }\n  const der = Buffer.concat([Buffer.from(\"302e020100300506032b656e04220420\", \"hex\"), raw]);\n  const privateKey = createPrivateKey({ key: der, format: \"der\", type: \"pkcs8\" });\n  const publicKey = createPublicKey(privateKey);\n  return { publicKey, privateKey, publicKeyRaw: rawPublicKey(publicKey) };\n}\n\n/**\n * The pair token as a 32-byte PSK.\n *\n * The token is `pt_<32 hex chars>` — 35 bytes of ASCII, and the spec requires\n * the PSK to be exactly 32. Hashing with a domain-separating label is the\n * standard way to fit it, and the label means this value can never collide with\n * some other use of the same token elsewhere in the system.\n *\n * Both implementations must compute this identically or the handshake fails\n * with no diagnostic beyond \"decryption failed\", which is why it is pinned by a\n * test vector rather than left as an obvious detail.\n */\nexport function pskFromPairToken(token: string): Buffer {\n  return createHash(\"sha256\")\n    .update(\"threadbase-e2ee/1 psk\", \"utf-8\")\n    .update(token, \"utf-8\")\n    .digest();\n}\n\n// ─── CipherState (spec §5.1) ────────────────────────────────────────\n\n/**\n * ChaChaPoly nonce, per spec §12.3: 4 zero bytes then the 8-byte\n * **little-endian** encoding of n.\n *\n * Deliberately NOT the record layer's nonce, which is `direction(4) ||\n * counter(8)` big-endian (design.md §3.3). Two layers, two encodings, both\n * correct for their own specification — do not unify them.\n */\nfunction chachaNonce(n: bigint): Buffer {\n  const nonce = Buffer.alloc(12);\n  nonce.writeBigUInt64LE(n, 4);\n  return nonce;\n}\n\n/**\n * Noise's `CipherState` (spec §5.1).\n *\n * Exported for two reasons, neither of them scaffolding. Phase 3's record layer\n * has to build a transport cipher from the buffers `split()` returns, so this is\n * the type it will construct. And the §5.1 rule that a failed decryption must\n * not advance `n` is unobservable through the handshake API — every AEAD\n * operation there runs at `n = 0`, because each is preceded by a `MixKey` that\n * calls `initializeKey`. Without a way to reach a cipher state directly, that\n * rule is protected by nothing: a \"simplification\" that advances before\n * verifying passes every other test in the suite.\n */\nexport class CipherState {\n  /**\n   * `#private`, not `private`: TypeScript's `private` is a compile-time\n   * annotation over an ordinary own property, which `showHidden` prints and\n   * `getOwnPropertyDescriptors` returns. A `#` field is not a property at all.\n   */\n  #k: Buffer | null = null;\n  private n = 0n;\n\n  constructor() {\n    redactKeyMaterial(this, () => `CipherState { n: ${this.n}, k: <#private> }`);\n  }\n\n  initializeKey(key: Buffer | null): void {\n    this.#k = key;\n    this.n = 0n;\n  }\n\n  hasKey(): boolean {\n    return this.#k !== null;\n  }\n\n  encryptWithAd(ad: Buffer, plaintext: Buffer): Buffer {\n    if (!this.#k) return plaintext;\n    const cipher = createCipheriv(\"chacha20-poly1305\", this.#k, chachaNonce(this.n), {\n      authTagLength: TAGLEN,\n    });\n    cipher.setAAD(ad, { plaintextLength: plaintext.length });\n    const out = Buffer.concat([cipher.update(plaintext), cipher.final(), cipher.getAuthTag()]);\n    this.n += 1n;\n    return out;\n  }\n\n  decryptWithAd(ad: Buffer, ciphertext: Buffer): Buffer {\n    if (!this.#k) return ciphertext;\n    if (ciphertext.length < TAGLEN) throw new NoiseError(\"Ciphertext shorter than its tag\");\n    const body = ciphertext.subarray(0, ciphertext.length - TAGLEN);\n    const tag = ciphertext.subarray(ciphertext.length - TAGLEN);\n    const decipher = createDecipheriv(\"chacha20-poly1305\", this.#k, chachaNonce(this.n), {\n      authTagLength: TAGLEN,\n    });\n    decipher.setAAD(ad, { plaintextLength: body.length });\n    decipher.setAuthTag(tag);\n    let out: Buffer;\n    try {\n      out = Buffer.concat([decipher.update(body), decipher.final()]);\n    } catch {\n      // The nonce is deliberately NOT advanced on failure (spec §5.1). A\n      // handshake that fails is over; advancing would only make a retry fail\n      // differently and hide the cause.\n      throw new NoiseError(\"Decryption failed\");\n    }\n    this.n += 1n;\n    return out;\n  }\n}\n\n// ─── SymmetricState (spec §5.2) ─────────────────────────────────────\n\nclass SymmetricState {\n  /**\n   * The LIVE chaining key. Both traffic keys are `HKDF(ck, \"\")`, so rendering\n   * it hands over the whole session rather than a fragment — it printed at\n   * `util.inspect`'s default depth before this became a `#` field.\n   */\n  #ck: Buffer;\n  #h: Buffer;\n  readonly #cipher = new CipherState();\n\n  constructor(protocolName: string) {\n    const name = Buffer.from(protocolName, \"utf-8\");\n    // Spec §5.2: pad to HASHLEN if it fits, otherwise hash it. Our name is 36\n    // bytes, so this is always the hash branch — written in full anyway, since\n    // the alternative is a constant nobody can check against the spec.\n    this.#h =\n      name.length <= HASHLEN\n        ? Buffer.concat([name, Buffer.alloc(HASHLEN - name.length)])\n        : createHash(\"sha256\").update(name).digest();\n    this.#ck = Buffer.from(this.#h);\n    this.#cipher.initializeKey(null);\n    // `ck` is the LIVE chaining key, and both traffic keys are `HKDF(ck, \"\")` —\n    // so rendering it hands over the whole session, not a fragment of it. It\n    // printed at `util.inspect`'s DEFAULT depth, with no `showHidden` needed,\n    // because this object was the one place the §13 rule had not reached.\n    redactKeyMaterial(this, () => \"SymmetricState { ck, h, cipher: <#private> }\");\n  }\n\n  /**\n   * Noise's HKDF (spec §4.3) is RFC 5869 with `salt = chaining_key`,\n   * `ikm = input_key_material` and an EMPTY info, so Node's `hkdfSync` is\n   * exactly it rather than approximately it. Using the platform's HKDF removes\n   * the HMAC chain that would otherwise be the easiest thing here to get\n   * subtly wrong.\n   */\n  private hkdf(ikm: Buffer, outputs: 2 | 3): Buffer[] {\n    const raw = Buffer.from(hkdfSync(\"sha256\", ikm, this.#ck, Buffer.alloc(0), HASHLEN * outputs));\n    const out: Buffer[] = [];\n    for (let i = 0; i < outputs; i++) out.push(raw.subarray(i * HASHLEN, (i + 1) * HASHLEN));\n    return out;\n  }\n\n  mixKey(ikm: Buffer): void {\n    const [ck, tempK] = this.hkdf(ikm, 2);\n    this.#ck = ck;\n    this.#cipher.initializeKey(tempK);\n  }\n\n  mixHash(data: Buffer): void {\n    this.#h = createHash(\"sha256\").update(this.#h).update(data).digest();\n  }\n\n  /** Spec §5.2. Used only by the `psk` token. */\n  mixKeyAndHash(ikm: Buffer): void {\n    const [ck, tempH, tempK] = this.hkdf(ikm, 3);\n    this.#ck = ck;\n    this.mixHash(tempH);\n    this.#cipher.initializeKey(tempK);\n  }\n\n  encryptAndHash(plaintext: Buffer): Buffer {\n    const ciphertext = this.#cipher.encryptWithAd(this.#h, plaintext);\n    this.mixHash(ciphertext);\n    return ciphertext;\n  }\n\n  decryptAndHash(ciphertext: Buffer): Buffer {\n    const plaintext = this.#cipher.decryptWithAd(this.#h, ciphertext);\n    // Hashes the CIPHERTEXT, not the plaintext, and only after a successful\n    // decrypt — so both sides' transcripts commit to the same bytes.\n    this.mixHash(ciphertext);\n    return plaintext;\n  }\n\n  /** The transcript hash. Both sides must arrive at the same value. */\n  handshakeHash(): Buffer {\n    return Buffer.from(this.#h);\n  }\n\n  /** Spec §5.2 `Split()`: the two directional transport keys. */\n  split(): { k1: Buffer; k2: Buffer } {\n    const [k1, k2] = this.hkdf(Buffer.alloc(0), 2);\n    return { k1: Buffer.from(k1), k2: Buffer.from(k2) };\n  }\n}\n\n// ─── The handshake ──────────────────────────────────────────────────\n\n/**\n * The transport keys a completed handshake yields.\n *\n * **A class with `#private` fields, not an object literal**, because this is\n * the value that TRAVELS — out of `respond()`, through the route, into\n * `createRecordState` — and so it is the one most likely to end up inside an\n * error, a log line or a test diff. As a literal its two traffic keys were\n * ordinary properties: `defineProperty(enumerable: false)` hid them from\n * default `inspect` and `{ showHidden: true }` printed them anyway; the custom\n * inspect handler hid them from that and `{ customInspect: false }` printed\n * them anyway. A `#` field is not a property, so there is no mode to find.\n *\n * The getters are on the prototype, which `inspect` does not walk and\n * `getOwnPropertyDescriptors` does not report, so `keys.clientToServer` reads\n * exactly as it did while rendering nothing.\n */\nexport interface TrafficKeys {\n  /** Initiator → responder. An OpenSSL key handle, never bytes. */\n  readonly clientToServer: KeyObject;\n  /** Responder → initiator. */\n  readonly serverToClient: KeyObject;\n  /** The transcript hash. Public, and an unpooled copy. */\n  readonly handshakeHash: Buffer;\n}\n\n/**\n * The transport keys a completed handshake yields.\n *\n * **The keys are `KeyObject`s and there is no byte getter at all.** Hiding was\n * tried four ways and defeated four times — non-enumerable by `showHidden`, the\n * inspect handler by `customInspect: false`, `#private` fields by\n * `{ getters: true }` reading through the accessors, and finally `#private`\n * with no getter by the ALLOCATION POOL: Node pool-allocates small Buffers, a\n * Buffer's `.buffer` exposes the shared 8 KiB block, and a public Buffer on the\n * same object hands out a window onto the pool the private key was allocated\n * in. Hiding a Buffer cannot work, so no traffic-key bytes exist as a JS Buffer\n * after the handshake: they are imported into OpenSSL and the copies wiped.\n *\n * `consume()` is the only way out and it works once, so ownership of the keys\n * is a fact about the object rather than a convention.\n */\nexport class HandshakeKeys {\n  #clientToServer: KeyObject | null;\n  #serverToClient: KeyObject | null;\n  readonly #handshakeHash: Buffer;\n\n  constructor(handshakeHash: Buffer, clientToServer: Buffer, serverToClient: Buffer) {\n    this.#handshakeHash = unpooled(handshakeHash);\n    this.#clientToServer = importSecret(clientToServer);\n    this.#serverToClient = importSecret(serverToClient);\n    // These are `split()`'s outputs and this object owns them: wiped now, so the\n    // window in which a traffic key exists as JS-visible bytes ends here.\n    clientToServer.fill(0);\n    serverToClient.fill(0);\n    redactKeyMaterial(this, () => \"HandshakeKeys { traffic keys: <KeyObject, off-heap> }\");\n  }\n\n  /**\n   * Hand the keys to the record layer. Once.\n   *\n   * NOT the transcript hash's guard — that is public — but the keys': a second\n   * caller getting the same handles would mean two record layers believing they\n   * own one counter space, which is the shape every nonce rule here exists to\n   * prevent.\n   */\n  consume(): TrafficKeys {\n    const clientToServer = this.#clientToServer;\n    const serverToClient = this.#serverToClient;\n    if (!clientToServer || !serverToClient) {\n      throw new NoiseError(\"These handshake keys have already been consumed\");\n    }\n    this.#clientToServer = null;\n    this.#serverToClient = null;\n    return { clientToServer, serverToClient, handshakeHash: unpooled(this.#handshakeHash) };\n  }\n}\n\nfunction dh(privateKey: KeyObject, publicKey: KeyObject): Buffer {\n  return diffieHellman({ privateKey, publicKey });\n}\n\n/**\n * Message 1, from the phone.\n *\n * Exported from the *server* module although the server never sends one. It is\n * the only way to drive the responder in a test, and it generates the committed\n * vectors the tb-mobile implementation is checked against — a second, drifting\n * initiator written inside a test file is the precise failure two independent\n * implementations invite.\n */\nexport function writeMessage1(args: {\n  staticKeyPair: KeyPair;\n  responderStaticPub: Buffer;\n  /** Required by `IKpsk1`, forbidden by `IK`. */\n  psk?: Buffer;\n  /** Defaults to the stronger `IKpsk1`. `/api/e2ee/open` passes `\"IK\"` (§11). */\n  pattern?: NoisePattern;\n  payload: Buffer;\n  /** REQUIRED: `PAIR_PROLOGUE` or `OPEN_PROLOGUE`. Never defaulted (§11). */\n  prologue: Buffer;\n  /** Test seam only. Production always generates a fresh ephemeral. */\n  ephemeral?: KeyPair;\n}): { message: Buffer; state: HandshakeInitiatorState } {\n  // `Object.hasOwn`, not `??`: `??` walks the prototype chain, so\n  // `Object.prototype.pattern = \"IK\"` silently downgrades every psk-less call\n  // site and breaks pairing. \"The default is the stronger pattern\" has to be\n  // enforced, not commented.\n  const pattern = Object.hasOwn(args, \"pattern\") ? (args.pattern as NoisePattern) : \"IKpsk1\";\n  const state = new SymmetricState(protocolNameFor(pattern, args.psk));\n  // REQUIRED, never defaulted. `args.prologue ??` is a prototype-chain read, so\n  // `Object.prototype.prologue = OPEN_PROLOGUE` made the PAIRING handshake\n  // accept an `/open` message — §11's domain separation collapsing through a\n  // language default nobody wrote.\n  // `own`, not `args.prologue`: making the parameter required is not enough,\n  // because reading it directly is ITSELF the prototype-chain read. With\n  // `Object.prototype.prologue` set, a call that passes none still found one.\n  const prologue = own(args, \"prologue\");\n  assertPrologue(prologue);\n  state.mixHash(prologue);\n\n  const rs = publicKeyFromRaw(args.responderStaticPub);\n  // Pre-message `<- s`: the responder's static key is known in advance, from\n  // the QR. This is what makes the QR an out-of-band authentication channel.\n  state.mixHash(args.responderStaticPub);\n\n  // Read off the ARGUMENT: a polluted `Object.prototype.ephemeral` pins every\n  // handshake to one attacker-chosen `e`, which by §8's own rule is\n  // definitionally a replay.\n  const e = own(args, \"ephemeral\") ?? generateKeyPair();\n\n  // `e`. In a PSK handshake the token also calls MixKey (spec §9.2), so the\n  // ephemeral contributes to the chaining key before any DH — without it the\n  // first message's payload would be protected by the PSK alone.\n  state.mixHash(e.publicKeyRaw);\n  state.mixKey(e.publicKeyRaw);\n\n  // `es` — DH(initiator ephemeral, responder static).\n  state.mixKey(dh(e.privateKey, rs));\n\n  // `s` — the initiator's static key, transmitted ENCRYPTED. That is `IK`'s\n  // identity-hiding property and the reason the pattern was chosen over `XX`.\n  const encryptedStatic = state.encryptAndHash(args.staticKeyPair.publicKeyRaw);\n\n  // `ss` — DH(initiator static, responder static).\n  state.mixKey(dh(args.staticKeyPair.privateKey, rs));\n\n  // `psk` — the pair token. Placed last in message 1 by the `psk1` modifier.\n  // The `IK` pattern has no token here at all (§11), and `protocolNameFor` has\n  // already refused the two incoherent combinations.\n  if (pattern === \"IKpsk1\") state.mixKeyAndHash(args.psk as Buffer);\n\n  const encryptedPayload = state.encryptAndHash(args.payload);\n\n  const initiator: HandshakeInitiatorState = {\n    symmetric: state,\n    ephemeral: e,\n    staticKeyPair: args.staticKeyPair,\n  };\n  // Holds the symmetric state and both keypairs. Redacted for the same reason\n  // and through the same helper (§13).\n  // Its `symmetric` is opaque by construction now, and the keypairs are Node\n  // `KeyObject`s, which never render their bytes. The summary is for reading.\n  redactKeyMaterial(initiator, () => \"HandshakeInitiatorState { keys: <#private> }\");\n\n  return {\n    message: Buffer.concat([e.publicKeyRaw, encryptedStatic, encryptedPayload]),\n    state: initiator,\n  };\n}\n\nexport interface HandshakeInitiatorState {\n  symmetric: SymmetricState;\n  ephemeral: KeyPair;\n  staticKeyPair: KeyPair;\n}\n\n/** Message 2, read by the phone. Completes the handshake. */\nexport function readMessage2(\n  state: HandshakeInitiatorState,\n  message: Buffer,\n): { payload: Buffer; keys: HandshakeKeys } {\n  assertMessageSize(message, NOISE_MESSAGE_2_OVERHEAD);\n  const re = publicKeyFromRaw(message.subarray(0, DHLEN));\n\n  state.symmetric.mixHash(message.subarray(0, DHLEN));\n  state.symmetric.mixKey(message.subarray(0, DHLEN));\n  state.symmetric.mixKey(dh(state.ephemeral.privateKey, re)); // ee\n  state.symmetric.mixKey(dh(state.staticKeyPair.privateKey, re)); // se\n\n  const payload = state.symmetric.decryptAndHash(message.subarray(DHLEN));\n  return { payload, keys: finish(state.symmetric) };\n}\n\nexport interface ResponderResult {\n  /** The initiator's static public key, authenticated by the handshake. */\n  initiatorStaticPub: Buffer;\n  payload: Buffer;\n  message2: Buffer;\n  keys: HandshakeKeys;\n}\n\n/**\n * Half-completed responder state, between reading message 1 and writing 2.\n *\n * Deliberately only ever a local: it is handed straight back into\n * `writeMessage2` within the same synchronous stretch of one request, never\n * stored, never keyed by anything a caller supplies. A responder state that\n * outlived a request would be a thing to allocate and expire on a public\n * endpoint, which is what the single-call shape originally avoided.\n */\nexport interface HandshakeResponderState {\n  symmetric: SymmetricState;\n  /** The initiator's static public key, authenticated by message 1. */\n  initiatorStaticPub: Buffer;\n  /** Message 1's decrypted payload. */\n  payload: Buffer;\n  initiatorEphemeral: KeyObject;\n  initiatorStatic: KeyObject;\n  staticKeyPair: KeyPair;\n}\n\n/**\n * Read message 1. Authenticates the initiator and recovers its static key.\n *\n * Split from `writeMessage2` because the server DOES now have something to do\n * between them: message 2's payload carries the `deviceId`, and the device row\n * cannot be written until the pair token has been spent, which cannot happen\n * until this half has succeeded. The original single-call shape assumed nothing\n * sat in the middle; the pairing handler is the caller that proved otherwise.\n *\n * SYNCHRONOUS on purpose, and it must stay that way: the caller runs this\n * between validating the pair token and consuming it, and `PairTokenStore` has\n * no lock. An `await` in that gap would let two concurrent requests with the\n * same token both pass validation.\n */\nexport function readMessage1(args: {\n  staticKeyPair: KeyPair;\n  /** Required by `IKpsk1`, forbidden by `IK`. */\n  psk?: Buffer;\n  /** Defaults to the stronger `IKpsk1`. `/api/e2ee/open` passes `\"IK\"` (§11). */\n  pattern?: NoisePattern;\n  message1: Buffer;\n  /** REQUIRED: `PAIR_PROLOGUE` or `OPEN_PROLOGUE`. Never defaulted (§11). */\n  prologue: Buffer;\n}): HandshakeResponderState {\n  assertMessageSize(args.message1, NOISE_MESSAGE_1_OVERHEAD);\n\n  // `Object.hasOwn`, not `??`: `??` walks the prototype chain, so\n  // `Object.prototype.pattern = \"IK\"` silently downgrades every psk-less call\n  // site and breaks pairing. \"The default is the stronger pattern\" has to be\n  // enforced, not commented.\n  const pattern = Object.hasOwn(args, \"pattern\") ? (args.pattern as NoisePattern) : \"IKpsk1\";\n  const state = new SymmetricState(protocolNameFor(pattern, args.psk));\n  // REQUIRED, never defaulted. `args.prologue ??` is a prototype-chain read, so\n  // `Object.prototype.prologue = OPEN_PROLOGUE` made the PAIRING handshake\n  // accept an `/open` message — §11's domain separation collapsing through a\n  // language default nobody wrote.\n  // `own`, not `args.prologue`: making the parameter required is not enough,\n  // because reading it directly is ITSELF the prototype-chain read. With\n  // `Object.prototype.prologue` set, a call that passes none still found one.\n  const prologue = own(args, \"prologue\");\n  assertPrologue(prologue);\n  state.mixHash(prologue);\n  state.mixHash(args.staticKeyPair.publicKeyRaw);\n\n  // `e`\n  const reRaw = args.message1.subarray(0, DHLEN);\n  const re = publicKeyFromRaw(reRaw);\n  state.mixHash(reRaw);\n  state.mixKey(reRaw);\n\n  // `es` — from the responder's side, its static against the initiator's ephemeral.\n  state.mixKey(dh(args.staticKeyPair.privateKey, re));\n\n  // `s` — decrypting this is the first point an attacker without the right\n  // static key fails, and it happens before the payload is touched.\n  const encryptedStatic = args.message1.subarray(DHLEN, DHLEN + DHLEN + TAGLEN);\n  const initiatorStaticPub = state.decryptAndHash(encryptedStatic);\n  const rs = publicKeyFromRaw(initiatorStaticPub);\n\n  // `ss`\n  state.mixKey(dh(args.staticKeyPair.privateKey, rs));\n\n  // `psk` — the `IK` pattern has no token here (§11).\n  if (pattern === \"IKpsk1\") state.mixKeyAndHash(args.psk as Buffer);\n\n  const payload = state.decryptAndHash(args.message1.subarray(DHLEN + DHLEN + TAGLEN));\n\n  const responder: HandshakeResponderState = {\n    symmetric: state,\n    initiatorStaticPub,\n    payload,\n    initiatorEphemeral: re,\n    initiatorStatic: rs,\n    staticKeyPair: args.staticKeyPair,\n  };\n  redactKeyMaterial(responder, () => \"HandshakeResponderState { keys: <#private> }\");\n  return responder;\n}\n\n/** Write message 2 and derive the transport keys. Completes the handshake. */\nexport function writeMessage2(\n  state: HandshakeResponderState,\n  responsePayload: Buffer,\n  /** Test seam only. Production always generates a fresh ephemeral. */\n  ephemeral?: KeyPair,\n): { message2: Buffer; keys: HandshakeKeys } {\n  const e = ephemeral ?? generateKeyPair();\n  state.symmetric.mixHash(e.publicKeyRaw);\n  state.symmetric.mixKey(e.publicKeyRaw);\n  state.symmetric.mixKey(dh(e.privateKey, state.initiatorEphemeral)); // ee\n  state.symmetric.mixKey(dh(e.privateKey, state.initiatorStatic)); // se\n\n  const encryptedPayload = state.symmetric.encryptAndHash(responsePayload);\n  return {\n    message2: Buffer.concat([e.publicKeyRaw, encryptedPayload]),\n    keys: finish(state.symmetric),\n  };\n}\n\n/**\n * Both halves in one call.\n *\n * Kept because most callers — every test, and any future responder with nothing\n * to do in the middle — want the whole handshake, and because the two halves\n * being separable should not force every one of them to sequence it by hand.\n */\nexport function respond(args: {\n  staticKeyPair: KeyPair;\n  /** Required by `IKpsk1`, forbidden by `IK`. */\n  psk?: Buffer;\n  /** Defaults to the stronger `IKpsk1`. `/api/e2ee/open` passes `\"IK\"` (§11). */\n  pattern?: NoisePattern;\n  message1: Buffer;\n  /** Built from the authenticated message-1 payload; sealed into message 2. */\n  buildPayload: (initiatorStaticPub: Buffer, payload: Buffer) => Buffer;\n  /** REQUIRED: `PAIR_PROLOGUE` or `OPEN_PROLOGUE`. Never defaulted (§11). */\n  prologue: Buffer;\n  /** Test seam only. */\n  ephemeral?: KeyPair;\n}): ResponderResult {\n  const state = readMessage1(args);\n  const { initiatorStaticPub, payload } = state;\n  const { message2, keys } = writeMessage2(\n    state,\n    args.buildPayload(initiatorStaticPub, payload),\n    // `own`, like the initiator half at `writeMessage1`. Reading `args.ephemeral`\n    // bare is a prototype-chain read, and a polluted `Object.prototype.ephemeral`\n    // pins the RESPONDER's `e` across every `respond()` — two calls producing\n    // byte-identical messages, which by §8's own rule is definitionally a replay.\n    own(args, \"ephemeral\"),\n  );\n\n  return { initiatorStaticPub, payload, message2, keys };\n}\n\nfunction finish(state: SymmetricState): HandshakeKeys {\n  const { k1, k2 } = state.split();\n  // Spec §5.2: the first key is always initiator→responder, whichever side\n  // called Split(). Naming them by direction here means no call site has to\n  // remember which end it is.\n  return new HandshakeKeys(state.handshakeHash(), k1, k2);\n}\n\n/**\n * Size check before anything is parsed or allocated.\n *\n * D-9's rule reaching forward from the unseal middleware to here: this runs on\n * a public, pre-authentication endpoint, so a message is bounded before it is\n * read and nothing is ever allocated in proportion to an attacker-supplied\n * length.\n */\nfunction assertMessageSize(message: Buffer, minimum: number): void {\n  if (message.length < minimum) {\n    throw new NoiseError(`Handshake message too short: ${message.length} < ${minimum}`);\n  }\n  if (message.length > NOISE_MAX_MESSAGE_BYTES) {\n    throw new NoiseError(`Handshake message too large: ${message.length}`);\n  }\n}\n","// Parsing the additive `e2ee` field of a pair-exchange request.\n//\n// `POST /api/pair/exchange` is public and unauthenticated (`PUBLIC_POST_PATHS`\n// in api/middleware/auth.middleware.ts), so everything here runs on bytes an\n// attacker chose, before anything has authenticated them. D-9 states the rule\n// for the Phase 4 unseal middleware and it reaches back to here: reject before\n// allocating, and never size a buffer from an attacker-supplied length.\n//\n// The field is OPTIONAL and its absence is not an error. A released tb-mobile\n// build sends `{ token, clientPublicKey }` and nothing else, cannot be\n// force-updated, and must keep pairing exactly as it does today\n// (docs/compatibility/tb-mobile.md). \"No `e2ee` key\" therefore means \"an older\n// client\", never \"a malformed request\".\n\nimport { NOISE_MAX_MESSAGE_BYTES } from \"./noise\";\nimport { E2EE_PROTOCOL_VERSION } from \"./protocol\";\n\n/**\n * @deprecated Use `E2EE_PROTOCOL_VERSION` from `src/e2ee/protocol.ts`, which is\n * the canonical home. This name survives as a re-export of that one value\n * because `src/server.ts` and `pair-payload.ts` import it and another track is\n * editing `server.ts` — deleting the symbol would widen W1a's diff into files\n * it does not own. `__tests__/e2ee-protocol-version.test.ts` asserts the two\n * names are one value, which is what makes the alias safe rather than a second\n * hand-synced copy (NONCE-DESIGN §4).\n */\nexport const E2EE_EXCHANGE_VERSION = E2EE_PROTOCOL_VERSION;\n\n/**\n * Cap on the base64 text before it is decoded.\n *\n * Checked against the *encoded* length rather than the decoded one, because\n * `Buffer.from(s, \"base64\")` allocates in proportion to `s` — testing the\n * result would mean doing the allocation this bound exists to prevent. base64\n * is 4 characters per 3 bytes; the padding allowance is slack, not precision.\n */\nconst MAX_BASE64_CHARS = Math.ceil((NOISE_MAX_MESSAGE_BYTES * 4) / 3) + 4;\n\nexport class E2eeRequestError extends Error {\n  /** Stable code for the client, so a version mismatch is not a parse failure. */\n  readonly code: \"E2EE_MALFORMED\" | \"E2EE_VERSION_UNSUPPORTED\";\n\n  constructor(code: E2eeRequestError[\"code\"], message: string) {\n    super(message);\n    this.name = \"E2eeRequestError\";\n    this.code = code;\n  }\n}\n\nexport interface E2eeExchangeRequest {\n  version: number;\n  /** Noise `IK` message 1, decoded. */\n  message1: Buffer;\n}\n\n/**\n * `null` for a client that did not ask for encryption; a parsed request for one\n * that did; a throw for one that asked incoherently.\n *\n * The three are deliberately distinct. Collapsing \"absent\" into \"malformed\"\n * breaks every released client, and collapsing \"malformed\" into \"absent\" would\n * silently pair a client that believed it was encrypting — which is the\n * downgrade the whole negotiation exists to prevent, arrived at through a\n * parser rather than an attacker.\n */\nexport function parseE2eeRequest(raw: unknown): E2eeExchangeRequest | null {\n  if (raw === undefined || raw === null) return null;\n  if (typeof raw !== \"object\" || Array.isArray(raw)) {\n    throw new E2eeRequestError(\"E2EE_MALFORMED\", \"e2ee must be an object\");\n  }\n\n  const { v, noise } = raw as { v?: unknown; noise?: unknown };\n\n  // Version first: a client speaking v2 is not a malformed v1 client, and\n  // telling it so is what lets it fall back deliberately rather than retrying.\n  if (typeof v !== \"number\" || !Number.isInteger(v)) {\n    throw new E2eeRequestError(\"E2EE_MALFORMED\", \"e2ee.v must be an integer\");\n  }\n  if (v !== E2EE_PROTOCOL_VERSION) {\n    throw new E2eeRequestError(\n      \"E2EE_VERSION_UNSUPPORTED\",\n      `e2ee.v ${v} is not supported; this server speaks ${E2EE_PROTOCOL_VERSION}`,\n    );\n  }\n\n  if (typeof noise !== \"string\") {\n    throw new E2eeRequestError(\"E2EE_MALFORMED\", \"e2ee.noise must be a base64 string\");\n  }\n  // Before the decode, not after.\n  if (noise.length > MAX_BASE64_CHARS) {\n    throw new E2eeRequestError(\"E2EE_MALFORMED\", \"e2ee.noise is too large\");\n  }\n\n  const message1 = Buffer.from(noise, \"base64\");\n  // `Buffer.from` never throws on base64 — it discards anything it cannot\n  // decode, so garbage silently becomes a short buffer rather than an error.\n  // An empty result from a non-empty string is that failure, and it has to be\n  // caught here or it surfaces later as a confusing handshake error.\n  if (message1.length === 0) {\n    throw new E2eeRequestError(\"E2EE_MALFORMED\", \"e2ee.noise is not valid base64\");\n  }\n\n  return { version: v, message1 };\n}\n","// The `/api/e2ee/open` msg1 replay cache.\n//\n// A Noise `IK` message 1 carries NO freshness: no PSK, no responder challenge,\n// no timestamp. Anyone who captures one valid msg1 can send it again for as\n// long as the server's identity key lives, and every replay is a complete,\n// authentic handshake — so it is neither a handshake failure nor a missing\n// device row, and neither budget on the route charged it. An adversary replayed\n// one captured message a thousand times and ran two thousand X25519 operations.\n//\n// Worse than the cost: because a replay AUTHENTICATES AS THE VICTIM, the\n// per-device limiter §8 asks for is what makes the attack *targeted*. Five\n// replays spent the victim's whole minute and pushed it past its four-socket\n// cap, retiring a live context — from one captured message, against one chosen\n// device, while every other device carried on.\n//\n// **What makes this detectable is the pattern itself.** In `IK`, `e` — the\n// initiator's ephemeral public key — is transmitted in the clear at a fixed\n// offset, and a legitimate client generates a fresh one for every handshake.\n// So a repeated `e` is not a heuristic for a replay; it is definitionally one.\n//\n// The residual, stated rather than left to be discovered: a capture replayed\n// after its entry is evicted, or past the TTL, still costs one DH pair and one\n// per-device slot per attempt. That is bounded by the source and per-device\n// budgets, and a one-minute per-device lockout per five such replays is the\n// accepted floor. The real cure is client-side freshness — a nonce in the msg1\n// payload, bound into the transcript — which is a protocol version away and\n// deliberately not now.\n\nimport { own } from \"./protocol\";\n\n/** ~2 MiB at 32-byte keys. The bound is on entries, not on bytes. */\nexport const MSG1_REPLAY_CACHE_ENTRIES = 65_536;\n\n/**\n * How many expired entries one `record` call may collect.\n *\n * ponytail: amortised prune with a per-call ceiling, not a sweeper. Entries\n * share one TTL and are stored in first-seen order, so the expired ones are\n * always at the front and this is O(1) amortised; the ceiling is there so a\n * burst of simultaneous expiries cannot stall a request. Memory is bounded by\n * the capacity check regardless of how little pruning happens.\n */\nconst MAX_PRUNE_PER_CALL = 128;\n\n/**\n * Remembers the ephemerals of message 1s that reached the handshake.\n *\n * Insertion-ordered and never refreshed on a hit — a hit is a replay, and\n * refreshing it would let an attacker pin a slot indefinitely with traffic that\n * is already being rejected. That is the one place this deliberately differs\n * from a textbook LRU: eviction is by first-seen age, which for entries that\n * are only ever written once is the same thing.\n */\nexport class Msg1ReplayCache {\n  /** ephemeral (base64) → the moment the entry stops counting. */\n  readonly #seen = new Map<string, number>();\n  readonly #capacity: number;\n  readonly #ttlMs: number;\n\n  constructor(options: { capacity?: number; ttlMs: number }) {\n    // Off the ARGUMENT: a polluted `Object.prototype.capacity` of 1 evicts a\n    // captured msg1 back into replayability on the next open.\n    this.#capacity = own(options, \"capacity\") ?? MSG1_REPLAY_CACHE_ENTRIES;\n    this.#ttlMs = options.ttlMs;\n  }\n\n  /** Live entries. For tests and for a diagnostics line — never a key. */\n  get size(): number {\n    return this.#seen.size;\n  }\n\n  /** Whether this ephemeral has already been through the handshake. */\n  has(ephemeral: Buffer, now: number = Date.now()): boolean {\n    const key = ephemeral.toString(\"base64\");\n    const expiresAt = this.#seen.get(key);\n    if (expiresAt === undefined) return false;\n    if (now >= expiresAt) {\n      this.#seen.delete(key);\n      return false;\n    }\n    return true;\n  }\n\n  /**\n   * Record an ephemeral that actually reached the handshake.\n   *\n   * Called only after `readMessage1` has succeeded, so garbage that never\n   * parsed cannot fill the cache — the bound protects the thing the bound is\n   * for.\n   */\n  record(ephemeral: Buffer, now: number = Date.now()): void {\n    let pruned = 0;\n    for (const [key, expiresAt] of this.#seen) {\n      if (now < expiresAt || pruned >= MAX_PRUNE_PER_CALL) break;\n      this.#seen.delete(key);\n      pruned++;\n    }\n    while (this.#seen.size >= this.#capacity) {\n      const oldest = this.#seen.keys().next();\n      if (oldest.done) break;\n      this.#seen.delete(oldest.value);\n    }\n    this.#seen.set(ephemeral.toString(\"base64\"), now + this.#ttlMs);\n  }\n\n  /** A streamer restart does this by existing; tests need a call. */\n  clear(): void {\n    this.#seen.clear();\n  }\n}\n","// `POST /api/e2ee/open` — the transport handshake.\n//\n// A second Noise handshake, this time against the static keys pairing already\n// stored, which leaves behind a transport context and (for a socket) a\n// single-use ticket. design.md §3.5, NONCE-DESIGN §8, §10 and §11.\n//\n// THIS ROUTE IS PUBLIC. It is in `PUBLIC_POST_PATHS`, so everything it parses is\n// bytes an attacker chose, before anything has authenticated them (D-9). The\n// order below is the hardening, and it is not incidental:\n//\n//   1. refuse a source that has already spent its FAILURE budget, before the\n//      handshake runs — an `IK` msg1 carries no freshness, so a captured one\n//      can be replayed for two Diffie-Hellmans each time (§8);\n//   2. bound the body as it arrives — `Content-Length` first, then the bytes\n//      themselves — so nothing is buffered in proportion to what the sender\n//      claims to be sending;\n//   3. bound the base64 BEFORE decoding it (`parseE2eeRequest`);\n//   4. run the handshake, the first point an attacker without a paired device's\n//      static key fails;\n//   5. fail closed on the device row: missing and revoked are both\n//      `E2EE_DEVICE_REVOKED`, and neither is success.\n//\n// The context that comes out is PROVISIONAL — it dies at the 30 s ticket TTL\n// unless something authenticates under it — and per-device caps bound how many\n// a replayer can hold at once.\n\nimport { Hono } from \"hono\";\nimport type { IncomingMessage } from \"http\";\nimport {\n  type ContextKind,\n  contextRegistry,\n  type E2eeContextRegistry,\n  newCtxId,\n  provisionalExpiresAt,\n  REST_CONTEXT_TTL_MS,\n} from \"../../e2ee/context\";\nimport {\n  keyPairFrom,\n  messageEphemeral,\n  OPEN_PROLOGUE,\n  readMessage1,\n  writeMessage2,\n} from \"../../e2ee/noise\";\nimport { E2eeRequestError, parseE2eeRequest } from \"../../e2ee/pair-request\";\nimport { E2EE_DEVICE_REVOKED, E2EE_PROTOCOL_VERSION, own } from \"../../e2ee/protocol\";\nimport { Msg1ReplayCache } from \"../../e2ee/replay-cache\";\nimport { getLogger } from \"../../logger\";\nimport { loadOrCreateServerIdentity } from \"../../server-identity\";\nimport type { AppEnv } from \"../app\";\nimport {\n  createRateBudget,\n  createRateLimiter,\n  OPEN_SOURCE_FAILURE_LIMIT,\n  PAIR_EXCHANGE_LIMIT,\n  PAIR_EXCHANGE_WINDOW_MS,\n} from \"../rate-limit\";\nimport type { ApiDeps } from \"../types/api-deps\";\nimport { describeE2eeCapability } from \"./misc.routes\";\n\n/**\n * Ceiling on the request body, enforced as it arrives rather than after.\n *\n * The only field that carries size is `e2ee.noise`, which `parseE2eeRequest`\n * caps at roughly 5.5 KB of base64 (`NOISE_MAX_MESSAGE_BYTES`). This is that\n * plus room for the JSON around it — deliberately snug, because the whole point\n * of a pre-authentication bound is that it is reached before memory is.\n */\nexport const MAX_OPEN_BODY_BYTES = 8 * 1024;\n\nconst log = getLogger(\"e2ee\");\n\n/**\n * Read a JSON body, refusing one that grows past `maxBytes`.\n *\n * `readBody` in `api/handlers/http-helpers.ts` concatenates every chunk before\n * parsing, so on a public path a multi-GB POST is fully buffered before any\n * bound applies — `pair-request.ts`'s base64 cap runs *after* the whole body is\n * in memory (§10). This is the bounded reader that replaces it here.\n * Retrofitting `/pair/exchange` is a one-line follow-up in another track's file.\n *\n * `Content-Length` is checked first because it costs nothing and refuses the\n * honest oversized body before a byte arrives; the running total is what\n * refuses the dishonest one.\n */\nfunction readBoundedJsonBody(req: IncomingMessage, maxBytes: number): Promise<unknown> {\n  return new Promise((resolve, reject) => {\n    // **`own()`, not a bracket read.** `req.headers` is a raw Node object with\n    // `Object.prototype` on its chain, so `req.headers[\"content-length\"]` on a\n    // request that sent no `Content-Length` returns whatever\n    // `Object.prototype[\"content-length\"]` holds — on this endpoint, which is\n    // public and runs before anything has authenticated the bytes it parses.\n    //\n    // Not a bypass: the running byte total below is the real ceiling and still\n    // refuses an oversized body. What a polluted value buys is a SELF-inflicted\n    // refusal — a bodiless or small request reads as huge and eats a `400` on\n    // the D-9 path.\n    //\n    // The stronger remedy is not to have a bracket read at all: Hono's\n    // `c.req.header()` goes through a fetch-API `Headers`, whose `get()`\n    // answers `null` for an absent name whatever the prototype holds. That is\n    // why the rest of W1b needs no guard here. This one is a raw Node object\n    // reached before Hono's request wrapper, so `own()` is the tool.\n    const declared = Number(own(req.headers, \"content-length\"));\n    if (Number.isFinite(declared) && declared > maxBytes) {\n      reject(new E2eeRequestError(\"E2EE_MALFORMED\", \"request body is too large\"));\n      return;\n    }\n    let chunks: Buffer[] = [];\n    let size = 0;\n    let refused = false;\n    req.on(\"data\", (chunk: Buffer) => {\n      if (refused) return;\n      size += chunk.length;\n      if (size > maxBytes) {\n        // Stop BUFFERING, but keep draining: the remaining chunks are dropped\n        // as they arrive rather than collected, so memory stays flat while the\n        // connection is left healthy enough to carry the 400 back.\n        refused = true;\n        chunks = [];\n        reject(new E2eeRequestError(\"E2EE_MALFORMED\", \"request body is too large\"));\n        return;\n      }\n      chunks.push(chunk);\n    });\n    req.on(\"end\", () => {\n      if (refused) return;\n      try {\n        const raw = Buffer.concat(chunks).toString(\"utf-8\");\n        resolve(raw ? JSON.parse(raw) : {});\n      } catch {\n        reject(new E2eeRequestError(\"E2EE_MALFORMED\", \"invalid JSON body\"));\n      }\n    });\n    req.on(\"error\", reject);\n  });\n}\n\n/**\n * Message 1's authenticated payload.\n *\n * `{ v, kind }`, exactly as NONCE-DESIGN §11 specifies. The two context kinds\n * (§8) differ in what they carry and how long they live, so the handshake has\n * to say which one it wants, and a capability that was never asked for must not\n * be inferred.\n *\n * `kind` lives INSIDE the AEAD rather than in the outer JSON for the same\n * reason the pairing payloads do: the outer body is attacker-modifiable, and a\n * rewritten `kind` would flip a socket context into a REST one.\n *\n * Required, not defaulted: a claim that was never made cannot be defaulted in\n * either direction (design.md §8's reasoning about `readOnly`).\n */\nexport function parseOpenPayload(payload: Buffer): { kind: ContextKind } {\n  let parsed: unknown;\n  try {\n    parsed = JSON.parse(payload.toString(\"utf-8\"));\n  } catch {\n    throw new E2eeRequestError(\"E2EE_MALFORMED\", \"e2ee open payload is not JSON\");\n  }\n  if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n    throw new E2eeRequestError(\"E2EE_MALFORMED\", \"e2ee open payload must be an object\");\n  }\n  const { v, kind } = parsed as { v?: unknown; kind?: unknown };\n  if (v !== E2EE_PROTOCOL_VERSION) {\n    throw new E2eeRequestError(\n      \"E2EE_VERSION_UNSUPPORTED\",\n      `e2ee open payload v ${String(v)} is not supported; this server speaks ${E2EE_PROTOCOL_VERSION}`,\n    );\n  }\n  if (kind !== \"ws\" && kind !== \"rest\") {\n    throw new E2eeRequestError(\"E2EE_MALFORMED\", 'e2ee open payload kind must be \"ws\" or \"rest\"');\n  }\n  return { kind };\n}\n\nexport const createE2eeRoutes = (\n  deps: Pick<ApiDeps, \"devicesRepo\" | \"featureFlagsConfig\">,\n  /** Overridden by tests so a suite gets its own registry rather than the process one. */\n  registry: E2eeContextRegistry = contextRegistry(),\n) => {\n  const app = new Hono<AppEnv>();\n  // Same policy `/api/pair/exchange` enforces, applied to two different keys\n  // for two different jobs (§8).\n  //\n  // `rateLimit` bounds ALLOCATION per authenticated device, after the\n  // handshake has named one.\n  const rateLimit = createRateLimiter({\n    limit: PAIR_EXCHANGE_LIMIT,\n    windowMs: PAIR_EXCHANGE_WINDOW_MS,\n  });\n  // `failures` bounds CPU per source address, before any Diffie-Hellman runs.\n  // It is a separate budget with a separate key because the two bound\n  // different things and neither substitutes for the other.\n  const failures = createRateBudget({\n    limit: OPEN_SOURCE_FAILURE_LIMIT,\n    windowMs: PAIR_EXCHANGE_WINDOW_MS,\n  });\n  // A captured msg1 is replayable for the life of the identity key, and a\n  // replay is a COMPLETE, authentic handshake — so neither budget above sees\n  // it: it never throws, and it resolves to a live device row. Worse, because\n  // it authenticates as the victim, the per-device limiter is what makes the\n  // attack targeted. This is what makes a replay refusable before any\n  // Diffie-Hellman runs.\n  const replays = new Msg1ReplayCache({ ttlMs: REST_CONTEXT_TTL_MS });\n\n  app.post(\"/open\", async (c) => {\n    // Same gate `/api/pair/exchange` applies, and for the same reason: a build\n    // or deployment that reports `enabled: false` on `/api/info` must not run a\n    // pre-authentication handshake anyway. Answered as a 404 so a disabled\n    // server looks like one without the endpoint at all.\n    if (!describeE2eeCapability(deps.featureFlagsConfig().values.e2ee).enabled) {\n      return c.json({ error: \"E2EE is not enabled on this server\", code: \"E2EE_DISABLED\" }, 404);\n    }\n\n    const ip = c.env.incoming?.socket?.remoteAddress ?? \"unknown\";\n    let body: unknown;\n    try {\n      body = await readBoundedJsonBody(c.env.incoming, MAX_OPEN_BODY_BYTES);\n    } catch (err) {\n      const e = err as E2eeRequestError;\n      return c.json({ error: e.message ?? \"Invalid body\", code: e.code ?? \"E2EE_MALFORMED\" }, 400);\n    }\n\n    let request: ReturnType<typeof parseE2eeRequest>;\n    try {\n      request = parseE2eeRequest((body as { e2ee?: unknown } | null)?.e2ee);\n    } catch (err) {\n      const e = err as E2eeRequestError;\n      return c.json({ error: e.message, code: e.code }, 400);\n    }\n    if (!request) {\n      // Unlike `/api/pair/exchange`, absence is not \"an older client\" here:\n      // nothing but an E2EE client has any reason to call this endpoint.\n      return c.json({ error: \"e2ee is required on this endpoint\", code: \"E2EE_MALFORMED\" }, 400);\n    }\n\n    // Checked BEFORE the handshake, because the handshake is the expensive\n    // part: `readMessage1` performs two Diffie-Hellmans on bytes nobody has\n    // authenticated yet, which is the D-9 CPU case on a public endpoint. A\n    // budget consulted after the work has already run bounds nothing.\n    //\n    // Charged only on FAILURE (below), so a device whose handshakes succeed\n    // never spends from it however often it re-opens — the per-device limit is\n    // what governs those.\n    //\n    // **The residual, stated rather than papered over.** This keys on the\n    // socket's `remoteAddress`, and behind a Cloudflare tunnel every request\n    // arrives from 127.0.0.1 — the streamer reads no forwarded-IP header — so\n    // it is one bucket for the whole fleet and cannot tell a flood from the\n    // fleet. A sustained malformed flood from the internet can therefore lock\n    // that tunnel's `/open` for a minute. The control for that is\n    // operator-side, Cloudflare rate limiting or Access in front of the\n    // tunnel, and it belongs in the rollout guide — not in a `429` we pretend\n    // is adequate. The ceiling is set high enough (§8) that no legitimate\n    // device reaches it, which is what keeps this from being the self-DoS it\n    // was at five.\n    if (!failures.check(ip)) {\n      return c.json({ error: \"Too many handshake attempts; try again in a minute\" }, 429);\n    }\n\n    // **Replay check, before any Diffie-Hellman.** `e` is message 1's first\n    // field and travels in the clear, and a legitimate client mints a fresh one\n    // per handshake — so a repeated `e` is definitionally a replay, not a\n    // heuristic for one.\n    //\n    // Charged to the SOURCE and never to the device. Charging the device is\n    // precisely what made this targeted: five replays of one captured message\n    // spent the victim's own minute and pushed it past its context cap, while\n    // every other device carried on.\n    //\n    // **The client is told nothing that distinguishes this from any other\n    // handshake failure, deliberately.** `E2EE_HANDSHAKE_FAILED` is the same\n    // code a wrong static key and a tampered ciphertext get, because telling an\n    // attacker which of its guesses was a replay is worse than the diagnostic\n    // being unavailable. The `e2ee.open_replayed` line is server-side only.\n    //\n    // The cost falls on a client that retries by re-sending the SAME bytes:\n    // it is indistinguishable from a replay and is refused for the life of the\n    // entry. That is a client obligation — every `/open` attempt, including a\n    // retry after a lost response, a timeout or a `429`, runs `writeMessage1`\n    // afresh (§11) — and it is in the contract rather than compensated for\n    // here, because compensating for it means telling replays apart from\n    // retries, which is the thing that cannot be done.\n    const ephemeral = messageEphemeral(request.message1);\n    if (ephemeral && replays.has(ephemeral)) {\n      failures.charge(ip);\n      log.warn(\"[e2ee] open refused: message 1 replays an ephemeral already seen\", {\n        event: \"e2ee.open_replayed\",\n      });\n      return c.json({ error: \"E2EE handshake failed\", code: \"E2EE_HANDSHAKE_FAILED\" }, 400);\n    }\n\n    let handshake: ReturnType<typeof readMessage1>;\n    try {\n      handshake = readMessage1({\n        staticKeyPair: keyPairFrom(loadOrCreateServerIdentity().privateKey),\n        // The psk-less pattern, named EXPLICITLY: `Noise_IK_25519_ChaChaPoly_\n        // SHA256` with the `\"threadbase-e2ee/1 open\"` prologue (§11). Both\n        // halves are domain separation — a captured pairing msg1 cannot be\n        // replayed into here, and the protocol name alone already makes the\n        // two transcripts disjoint. Passing `pattern` rather than omitting\n        // `psk` is what keeps a forgotten argument from selecting a weaker\n        // protocol somewhere else.\n        pattern: \"IK\",\n        message1: request.message1,\n        prologue: OPEN_PROLOGUE,\n      });\n    } catch {\n      // One code for every handshake failure, as at pairing: distinguishing\n      // \"wrong static key\" from \"tampered ciphertext\" would tell an attacker\n      // which half of their guess was right, and the client's remedy is the\n      // same either way. The caught error is dropped for the same reason.\n      //\n      // A failed handshake names nobody, so the cost is charged to the source\n      // address. The check that spends this is at the top of the handshake\n      // block, so the sixth garbage msg1 from one source is refused before its\n      // Diffie-Hellmans run rather than after.\n      failures.charge(ip);\n      // Logged because a device pinned to a DIFFERENT server identity fails\n      // here on every attempt, forever, and until now left nothing behind: the\n      // replay and unknown-device refusals below each wrote a line, this one\n      // wrote none, so the one permanent condition was the one that could not\n      // be told from the wire. `reason` distinguishes it; nothing about the\n      // message is logged, for the same reason the caught error is dropped.\n      //\n      // Safe to log HERE and not on the branches above: this one is charged to\n      // the source budget, so the line rate is bounded by\n      // `OPEN_SOURCE_FAILURE_LIMIT`. The malformed-body and `429` branches\n      // return before or instead of a charge, so logging there would hand an\n      // unauthenticated caller an unbounded write to the operator's disk.\n      log.warn(\"[e2ee] open refused: message 1 did not authenticate\", {\n        event: \"e2ee.open_refused\",\n        reason: \"handshake\",\n      });\n      return c.json({ error: \"E2EE handshake failed\", code: \"E2EE_HANDSHAKE_FAILED\" }, 400);\n    }\n\n    // Fail closed on the row. Absent and revoked are both refusals and neither\n    // is success (§10) — and both answer `E2EE_DEVICE_REVOKED` rather than\n    // `E2EE_CTX_UNKNOWN`, because this is the hard failure a client must\n    // surface, not the recoverable one it silently re-handshakes through (§9).\n    const staticPub = handshake.initiatorStaticPub.toString(\"base64\");\n\n    // Rate-limited HERE, on the authenticated static key, rather than on the\n    // socket's `remoteAddress` (§8). Behind a Cloudflare tunnel every request\n    // arrives from 127.0.0.1 and the streamer reads no forwarded-IP header, so\n    // an IP-keyed bucket degrades to ONE bucket for the whole fleet — it cannot\n    // tell an attacker from the fleet, and it 429s legitimate devices out of\n    // the very re-open storm §8 describes, since each device re-opens twice\n    // after a restart.\n    //\n    // The trade, stated rather than left to be discovered: a replayer still\n    // spends this server two DH per attempt before the check, because the key\n    // it is charged to only exists once the handshake has run. What this bounds\n    // is context and ticket ALLOCATION per device, which is the D-9 concern;\n    // the per-device cap is the other half and the real bound.\n    if (!rateLimit(`key:${staticPub}`)) {\n      // The same status `/pair/exchange` uses for the same policy.\n      return c.json({ error: \"Too many handshake attempts; try again in a minute\" }, 429);\n    }\n\n    const device = deps.devicesRepo()?.getByE2eeStaticPub(staticPub) ?? null;\n    if (!device || device.revoked_at != null) {\n      // The static key is deliberately not logged: it identifies a device.\n      // Charged to the source, because this IS a failure from it. The server's\n      // static key is public, so anyone can mint unlimited WELL-FORMED msg1s\n      // from fresh keypairs; each costs two Diffie-Hellmans and is refused only\n      // here. An adversary ran fifty and tripped nothing, because the budget\n      // was charged solely on a malformed handshake — the flood that costs CPU\n      // went uncounted while the trivial one locked out real devices.\n      failures.charge(ip);\n      log.warn(\"[e2ee] open refused: no live device holds that static key\", {\n        event: \"e2ee.open_refused\",\n        reason: \"unknown_device\",\n      });\n      return c.json(\n        { error: \"This device is not paired for encryption\", code: E2EE_DEVICE_REVOKED },\n        403,\n      );\n    }\n\n    // Recorded only HERE — after the handshake parsed AND the device row\n    // resolved to a live paired device.\n    //\n    // Anywhere earlier and unauthenticated traffic drives the eviction clock:\n    // a well-formed msg1 from a keypair the server has never seen would take a\n    // slot, one permitted source contributes ~43 200 entries a day (~66 % of\n    // capacity), and two fill it inside a day — at which point eviction starts\n    // discarding the OLDEST entries, which is exactly where a captured\n    // victim's msg1 lives. Only messages that authenticated as a real device\n    // can age this cache, and a stranger's replay is refused by the device row\n    // regardless.\n    //\n    // `ephemeral` is non-null on this path: `readMessage1` enforces the same\n    // minimum length.\n    if (ephemeral) replays.record(ephemeral);\n\n    let kind: ContextKind;\n    try {\n      kind = parseOpenPayload(handshake.payload).kind;\n    } catch (err) {\n      const e = err as E2eeRequestError;\n      // Past the handshake, so this caller authenticated as a live device and\n      // the line rate is bounded by the per-device limit rather than by\n      // anything a stranger controls. The code is logged; the payload is not.\n      log.warn(\"[e2ee] open refused: the sealed payload is not a valid open request\", {\n        event: \"e2ee.open_refused\",\n        reason: \"payload\",\n        code: e.code,\n      });\n      return c.json({ error: e.message, code: e.code }, 400);\n    }\n\n    // Server-assigned, 16 random bytes, never derived by the client (§12).\n    const { raw: ctxIdRaw, id: ctxId } = newCtxId();\n    const now = Date.now();\n    // **The advertised deadline is the deadline that applies** (§8, §12). Every\n    // context — socket and REST alike — starts provisional and is collected at\n    // the 30 s ticket TTL unless something authenticates under it, so msg2\n    // carries THAT, plus the `provisional` flag telling the client which kind\n    // of deadline it is holding.\n    //\n    // Advertising the 24 h lifetime here would be a promise the registry does\n    // not keep: a client that opened a REST context and sent its first request\n    // a minute later would get `E2EE_CTX_UNKNOWN` from a context it had been\n    // told it owned for a day. §8's answer to that is the client's — open a\n    // REST context with the request already in hand, never lazily in advance.\n    const expiresAt = provisionalExpiresAt(now);\n    // Only a socket needs a ticket; a REST context is addressed by `X-TB-Ctx`.\n    const ticket = kind === \"ws\" ? registry.issueTicket(ctxId, now) : undefined;\n\n    let message2: Buffer;\n    let keys: ReturnType<typeof writeMessage2>[\"keys\"];\n    try {\n      ({ message2, keys } = writeMessage2(\n        handshake,\n        Buffer.from(\n          JSON.stringify({\n            v: E2EE_PROTOCOL_VERSION,\n            ctxId,\n            expiresAt,\n            provisional: true,\n            ...(ticket && { ticket }),\n          }),\n          \"utf-8\",\n        ),\n      ));\n    } catch (err) {\n      // A server fault. Drop the ticket rather than leaving a live one bound to\n      // a context that will never exist.\n      registry.destroy(ctxId);\n      log.error(\"[e2ee] could not write the open response\", { event: \"e2ee.open_failed\", err });\n      return c.json({ error: \"Could not open an encrypted context\" }, 500);\n    }\n\n    // `consume()` hands the traffic keys over exactly once: the registry gets\n    // OpenSSL key handles and this route keeps nothing (§13).\n    registry.open({ deviceId: device.device_id, kind, ctxIdRaw, ctxId, keys: keys.consume(), now });\n    log.info(`[e2ee] opened a ${kind} context`, { event: \"e2ee.context_opened\", kind });\n\n    // `ctxId`, `expiresAt` and `ticket` travel ONLY inside the sealed payload.\n    // The outer body carries the version and the Noise message and nothing else\n    // — a ticket in an outer field would be a credential in a response body a\n    // proxy can read, which is the leak the ticket exists to close.\n    return c.json({ e2ee: { v: E2EE_PROTOCOL_VERSION, noise: message2.toString(\"base64\") } });\n  });\n\n  return app;\n};\n","/**\n * A sliding-window rate limiter for a public endpoint.\n *\n * **The POLICY is shared through this module; the arithmetic deliberately is\n * not** (NONCE-DESIGN §8). `/open` enforces the same 5 attempts per minute that\n * `/api/pair/exchange` enforces, and takes those numbers from the constants\n * below so the two cannot drift.\n *\n * The bucket arithmetic is a second implementation on purpose:\n * `StreamerServer.checkExchangeRateLimit` is a private method over private\n * per-map state on a class in `src/server.ts`, so sharing the code — rather\n * than the policy — would mean deleting that method and rewiring its three call\n * sites in a file another track owns. Consolidating the two is a named\n * follow-up, and it belongs to whoever next touches `server.ts`. Reaching into\n * that file to \"fix\" this module is the wrong direction.\n *\n * The KEY is the caller's choice and `/open` does not use the IP: NONCE-DESIGN\n * §8 records that behind a Cloudflare tunnel every request arrives from\n * 127.0.0.1, so an IP-keyed bucket is one bucket for the whole fleet. `/open`\n * keys on the authenticated static key instead, and charges the IP only for a\n * handshake that failed and therefore named nobody.\n */\n/** True when the caller may proceed; false when it has spent its budget. */\nexport type RateLimiter = (key: string) => boolean;\n\n/**\n * Same numbers `/api/pair/exchange` enforces today.\n *\n * **A tunable, and named as one.** Five `/open` per minute per device is tight\n * on a flaky network: a foreground, a silence-timer reconnect and a lazy REST\n * open can legitimately arrive as three in one burst, and the client's\n * single-flight (§8) is what keeps that from becoming six. If field data shows\n * legitimate devices hitting the ceiling, this is the number to raise — the\n * per-device context cap, not this, is the bound that actually stops a\n * replayer.\n */\nexport const PAIR_EXCHANGE_LIMIT = 5;\nexport const PAIR_EXCHANGE_WINDOW_MS = 60_000;\n\n/**\n * Failed `/api/e2ee/open` handshakes tolerated per source address per minute.\n *\n * **Deliberately far above the per-device limit, because it bounds a different\n * thing.** The per-device number bounds ALLOCATION and can be tight; this one\n * bounds CPU on a key nobody has authenticated, and behind a Cloudflare tunnel\n * every request arrives from `127.0.0.1` — so a tight number here is a denial\n * of service against the whole fleet rather than against an attacker. At five,\n * an adversary showed that five malformed messages locked out every paired\n * device on that address, including one mid-recovery.\n *\n * Thirty is above anything a real device does — a device's own recovery is two\n * or three handshakes, and they succeed, which costs this budget nothing — and\n * far below what a flood needs to be interesting.\n *\n * A tunable. If field evidence shows legitimate traffic reaching it, raise it;\n * the per-device cap on contexts, not this, is the bound that stops a replayer.\n */\nexport const OPEN_SOURCE_FAILURE_LIMIT = 30;\n\n/** Keys tracked before a full sweep runs. Bounds the map on a spray of IPs. */\nconst SWEEP_AFTER_KEYS = 1024;\n\n/**\n * A budget whose check and charge are SEPARATE.\n *\n * `createRateLimiter` charges every call, which is right when every call is\n * the thing being limited. It is wrong for a failure budget: there, a caller\n * must be able to ask \"does this source still have room?\" before doing the\n * expensive work, and spend from the budget only when that work turned out to\n * be wasted. Fusing the two would charge a legitimate caller for succeeding.\n */\nexport interface RateBudget {\n  /** True when `key` still has room. Charges nothing. */\n  check(key: string): boolean;\n  /** Spend one unit against `key`. */\n  charge(key: string): void;\n}\n\nexport function createRateBudget(options: { limit: number; windowMs: number }): RateBudget {\n  const hits = new Map<string, number[]>();\n\n  const recentFor = (key: string, now: number): number[] => {\n    if (hits.size > SWEEP_AFTER_KEYS) {\n      for (const [k, times] of hits) {\n        if (times.every((t) => now - t >= options.windowMs)) hits.delete(k);\n      }\n    }\n    const recent = (hits.get(key) ?? []).filter((t) => now - t < options.windowMs);\n    hits.set(key, recent);\n    return recent;\n  };\n\n  return {\n    check(key: string): boolean {\n      return recentFor(key, Date.now()).length < options.limit;\n    },\n    charge(key: string): void {\n      const now = Date.now();\n      recentFor(key, now).push(now);\n    },\n  };\n}\n\nexport function createRateLimiter(options: { limit: number; windowMs: number }): RateLimiter {\n  const budget = createRateBudget(options);\n  return (key: string): boolean => {\n    if (!budget.check(key)) return false;\n    budget.charge(key);\n    return true;\n  };\n}\n","import { spawn } from \"node:child_process\";\nimport { createHmac, timingSafeEqual } from \"node:crypto\";\nimport { Hono } from \"hono\";\nimport type { IncomingMessage } from \"http\";\nimport { hostname } from \"os\";\nimport { loadUpdateConfig } from \"../../config/update-config\";\nimport {\n  DEFAULT_PUSH_TOKEN_KIND,\n  isPushTokenKind,\n  PUSH_TOKEN_KINDS,\n  tokenState,\n} from \"../../db/repositories/push.repository\";\nimport { E2EE_PROTOCOL_VERSION } from \"../../e2ee/protocol\";\nimport type { FeatureFlagSource } from \"../../feature-flags\";\nimport { getLogger } from \"../../logger\";\nimport { NotificationPrefsSchema } from \"../../schemas/notification-prefs.schema\";\nimport { serverIdentityPublicKey } from \"../../server-identity\";\nimport { describeMissingApnsCredentials } from \"../../services/push/apnsClient\";\nimport { testNotificationBody } from \"../../services/push/notificationCopy\";\nimport { getVersion } from \"../../version\";\nimport type { AppEnv } from \"../app\";\nimport { createRateLimiter } from \"../rate-limit\";\nimport type { ApiDeps } from \"../types/api-deps\";\n\n/**\n * Accept a finite timestamp, reject anything else.\n *\n * These arrive as JSON from a client, so a string, a NaN, or an Infinity is\n * reachable. Storing one would make a renewal deadline that never fires (or\n * fires immediately), so a bad value becomes \"absent\" rather than a poisoned\n * schedule.\n */\nfunction numberOrNull(value: unknown): number | null {\n  return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\n/**\n * Ceiling on any JSON body `readJsonBody` accepts, enforced as bytes arrive\n * rather than after the whole request is buffered.\n *\n * Shared by all three callers (push register, push unregister, client-log)\n * rather than a per-route bound: none of them legitimately posts more than a\n * few KB, so one ceiling well above any real payload — and far below what\n * would pressure memory — covers all three. A release-build client shipping\n * this is the reason it's needed at all: a dev build behind Metro never sent\n * enough to matter.\n */\nexport const MAX_JSON_BODY_BYTES = 1024 * 1024; // 1 MiB\n\nclass BodyTooLargeError extends Error {}\n\nfunction readJsonBody(\n  req: IncomingMessage,\n  maxBytes: number = MAX_JSON_BODY_BYTES,\n): Promise<unknown> {\n  return new Promise((resolve, reject) => {\n    let chunks: Buffer[] = [];\n    let size = 0;\n    let refused = false;\n    req.on(\"data\", (chunk: Buffer) => {\n      if (refused) return;\n      size += chunk.length;\n      if (size > maxBytes) {\n        // Stop buffering but keep draining, so a slow/chunked oversized body\n        // doesn't grow memory further while the socket stays healthy enough\n        // to carry the 413 back.\n        refused = true;\n        chunks = [];\n        reject(new BodyTooLargeError(\"request body is too large\"));\n        return;\n      }\n      chunks.push(chunk);\n    });\n    req.on(\"end\", () => {\n      if (refused) return;\n      try {\n        const raw = Buffer.concat(chunks).toString(\"utf-8\");\n        resolve(raw ? JSON.parse(raw) : {});\n      } catch {\n        reject(new Error(\"Invalid JSON body\"));\n      }\n    });\n    req.on(\"error\", reject);\n  });\n}\n\nfunction readRawBody(req: IncomingMessage): Promise<string> {\n  return new Promise((resolve, reject) => {\n    const chunks: Buffer[] = [];\n    req.on(\"data\", (chunk) => chunks.push(chunk));\n    req.on(\"end\", () => resolve(Buffer.concat(chunks).toString(\"utf-8\")));\n    req.on(\"error\", reject);\n  });\n}\n\nfunction verifyWebhookSignature(body: string, header: string | undefined, secret: string): boolean {\n  if (!header) return false;\n  const provided = header.startsWith(\"sha256=\") ? header.slice(7) : header;\n  const expected = createHmac(\"sha256\", secret).update(body).digest(\"hex\");\n  const a = Buffer.from(provided, \"utf-8\");\n  const b = Buffer.from(expected, \"utf-8\");\n  if (a.length !== b.length) return false;\n  return timingSafeEqual(a, b);\n}\n\n/**\n * What push this server can actually deliver.\n *\n * Reported on `GET /api/info` and `GET /api/push/health` so a client can hide an\n * affordance the server can never honour instead of registering tokens nothing\n * will ever send to. It cannot be inferred from `/api/push/health`'s `available`,\n * which reports whether the SQLite token store opened — that is `true` on a\n * server holding no APNs credentials at all.\n */\nexport interface PushCapability {\n  /**\n   * Live Activity (ActivityKit) push. True only when APNs credentials resolved\n   * *and* the sender was wired, so it is the same fact the boot log reports as\n   * `live_activity.enabled` / `live_activity.disabled`.\n   */\n  liveActivity: boolean;\n  /**\n   * Ordinary \"your turn\" notifications over Expo's relay (`WaitingInputNotifier`).\n   * True when the notifier was wired, which needs only the push token store:\n   * Expo holds the app's credentials, so no APNs key or env var is involved.\n   * Independent of `liveActivity` — neither implies the other.\n   */\n  notifications: boolean;\n  /**\n   * The server stores and enforces per-device notification preferences\n   * (`PATCH /api/push/preferences`, `POST /api/push/test`). Absent on an older\n   * server, which is how a client tells \"not supported\" from \"turned off\".\n   */\n  preferences: boolean;\n  /** Why `liveActivity` is false; absent when it is true. Names env vars, never values. */\n  liveActivityReason?: string;\n  /** Why `notifications` is false; absent when it is true. */\n  notificationsReason?: string;\n}\n\n/**\n * Describe push capability for a client.\n *\n * `wired` is the server's own wiring state rather than a re-read of the\n * environment: credentials alone are not enough, since each notifier is only\n * built when the push token store opened too.\n */\nexport function describePushCapability(\n  wired: { liveActivity: boolean; notifications: boolean },\n  env: NodeJS.ProcessEnv = process.env,\n): PushCapability {\n  const capability: PushCapability = {\n    liveActivity: wired.liveActivity,\n    notifications: wired.notifications,\n    preferences: wired.notifications,\n  };\n  if (!wired.liveActivity) {\n    // describeMissingApnsCredentials only explains a *credential* gap and\n    // returns null once the credentials are complete — reachable here, because\n    // an unavailable token store disables the feature with the key still set.\n    capability.liveActivityReason =\n      describeMissingApnsCredentials(env) ??\n      \"APNs credentials are set but the push token store is unavailable, so Live Activity \" +\n        \"push is disabled.\";\n  }\n  if (!wired.notifications) {\n    capability.notificationsReason =\n      \"The push token store is unavailable (the SQLite cache failed to open), so \" +\n      \"notifications cannot be sent.\";\n  }\n  return capability;\n}\n\n/**\n * Envelope version this build speaks. The same number the pair QR carries as `v`.\n *\n * @deprecated Re-exported from `src/e2ee/protocol.ts`, which is the canonical\n * home: the record layer needs this constant and a crypto module importing a\n * Hono route module would invert the dependency direction (NONCE-DESIGN §4).\n * The name stays here because released call sites and tests import it from this\n * module.\n */\nexport { E2EE_PROTOCOL_VERSION };\n\n/**\n * Whether this build has the E2EE code path at all.\n *\n * Deliberately a constant rather than the `e2ee` feature flag. `supported` means\n * \"this build speaks the envelope\" (specs/end-to-end-encryption/design.md §6.2),\n * which is a property of the build; whether a given deployment offers it is the\n * flag's job, and `describeE2eeCapability` below requires both. Reporting the\n * flag here would let an operator who switches it on advertise a handshake the\n * build cannot perform — a client would offer to re-pair for encryption and then\n * fail, which is exactly the half-landed break this negotiation exists to remove.\n *\n * True since Phase 2 landed the handshake. Enabling it for a deployment is still\n * a separate, opt-in act: set `THREADBASE_FEATURE_E2EE=1`, `--feature e2ee=true`,\n * or `feature_flags:` in server.yaml.\n *\n * Typed `boolean` rather than inferred so the `&&` below stays a real branch\n * instead of narrowing to a constant.\n */\nconst E2EE_SUPPORTED: boolean = true;\n\n/**\n * Whether a client should encrypt to this server, and why not when it should not.\n *\n * The contract is `push`'s: additive, and **absent means \"older server,\n * unknown\"** rather than \"unsupported\". A client reads `enabled` to decide\n * whether to attempt a handshake — never `supported` alone, which only says the\n * code path exists.\n *\n * `required` is the stage-3 bit (refuse plaintext from *any* client) and is\n * false until that is an explicit product decision. It is reported rather than\n * omitted because an absent field means \"unknown\", and \"unknown\" is the wrong\n * answer to a question this server can answer.\n */\nexport interface E2eeCapability {\n  supported: boolean;\n  enabled: boolean;\n  version: number;\n  required: boolean;\n  /**\n   * This build accepts the WebSocket ticket as a `tb-ticket.<ticket>`\n   * subprotocol offer and selects `threadbase-e2ee-v1`, which is the only way a\n   * browser can present one. A property of the build, like `supported`. Absent\n   * means an older server that only reads `X-TB-Ticket`: a browser client must\n   * refuse encrypted pairing there rather than fall back to plaintext.\n   */\n  wsTicketSubprotocol: boolean;\n  /** Why `enabled` is false while `supported` is true; absent otherwise. */\n  reason?: string;\n}\n\nexport function describeE2eeCapability(\n  flagEnabled: boolean,\n  /**\n   * Which rung of the precedence chain decided the flag, when the caller knows\n   * it. An operator who typed `--no-e2ee` and reads \"set --feature e2ee=true\"\n   * has been answered with the wrong question; naming the rung that actually\n   * decided is the difference between a reason and a template.\n   */\n  flagSource?: FeatureFlagSource,\n): E2eeCapability {\n  const enabled = E2EE_SUPPORTED && flagEnabled;\n  const base = {\n    supported: E2EE_SUPPORTED,\n    enabled,\n    version: E2EE_PROTOCOL_VERSION,\n    required: false,\n    wsTicketSubprotocol: true,\n  };\n  if (enabled) return base;\n  return {\n    ...base,\n    // Always says why, including when `supported` is false. An operator who set\n    // the flag and saw nothing happen has exactly one question, and a field that\n    // goes absent in the case they hit is the field not answering it.\n    reason: E2EE_SUPPORTED ? disabledReason(flagSource) : NO_HANDSHAKE_REASON,\n  };\n}\n\nconst NO_HANDSHAKE_REASON =\n  \"this build carries the capability negotiation but not yet the handshake it gates\";\n\n/**\n * The switch that turned encryption off, in the operator's own terms — the\n * thing they typed or set, never the resolver's rung name. Shared by the boot\n * warning and `/api/info` so the two never describe one switch two ways.\n *\n * `cli` covers both spellings of one switch — `--no-e2ee` and\n * `--feature e2ee=false` land on the same rung. `override` is unreachable for\n * `e2ee` today (the only override rung is `codexSystemPromptEnabled`) but the\n * type demands an answer, and this one is at least true.\n */\nexport const E2EE_OFF_SWITCH: Record<Exclude<FeatureFlagSource, \"default\">, string> = {\n  cli: \"--no-e2ee (or --feature e2ee=false)\",\n  env: \"the THREADBASE_FEATURE_E2EE environment variable\",\n  yaml: \"feature_flags: in server.yaml\",\n  override: \"an explicit server configuration override\",\n};\n\n/**\n * Why encryption is off, in the operator's own terms — names the actual rung\n * that decided it rather than collapsing every non-`cli` source into one\n * generic line (D-8's resolution: the env var can't be hidden from the\n * resolver, so `/api/info` names it plainly instead). `cli` says \"for this\n * run\", because a CLI option cannot outlive the command that typed it; the\n * `default` rung keeps the original text, which names the ways to turn it on.\n */\nfunction disabledReason(source?: FeatureFlagSource): string {\n  if (source === \"cli\") return `disabled by ${E2EE_OFF_SWITCH.cli} for this run`;\n  if (source !== undefined && source !== \"default\") return `disabled by ${E2EE_OFF_SWITCH[source]}`;\n  return (\n    \"disabled by the e2ee feature flag — set THREADBASE_FEATURE_E2EE=1, --feature e2ee=true, \" +\n    \"or feature_flags: in server.yaml\"\n  );\n}\n\n// One line per process, not one per request: `/api/info` is polled, and this\n// module has a 261 MB unrotated-log precedent to respect (CLAUDE.md).\nlet identityKeyFailureLogged = false;\n\n/**\n * This server's identity public key, or `undefined` when the key file cannot be\n * read — which `JSON.stringify` renders as an absent field, exactly what the\n * `/api/info` contract says absent means.\n *\n * Deliberately different from the CLI's answer to the same failure. `/api/info`\n * is how a client discovers capabilities and renders its server list, so a\n * corrupt key file must cost verification and nothing else; turning it into a\n * 500 would take down the whole endpoint over a file unrelated to the rest of\n * the response. The pair banner throws instead, because a QR that cannot carry\n * `spk` is a QR worth refusing to print — and `serve` already degrades that\n * into a warn plus a QR-less banner (`cli/index.ts`).\n */\nexport function describeServerIdentityKey(): string | undefined {\n  try {\n    return serverIdentityPublicKey();\n  } catch (err) {\n    if (!identityKeyFailureLogged) {\n      identityKeyFailureLogged = true;\n      // Safe to interpolate: every error this can throw carries the file path\n      // and fixed text, never the file's contents.\n      getLogger(\"identity\").error(\n        `Server identity key unavailable, so /api/info will omit it: ${err instanceof Error ? err.message : String(err)}`,\n        { event: \"identity.unavailable\" },\n      );\n    }\n    return undefined;\n  }\n}\n\nconst clientLog = getLogger(\"client\");\n\n// A BCP 47 language tag (\"he\", \"en-US\", \"zh-Hant-TW\"), bounded.\nconst LOCALE_TAG_RE = /^[A-Za-z]{2,3}(?:[-_][A-Za-z0-9]{1,8}){0,4}$/;\n\ntype ClientLogEntry = {\n  level?: \"debug\" | \"info\" | \"warn\" | \"error\";\n  msg?: string;\n  ts?: string;\n  tag?: string;\n  fields?: Record<string, unknown>;\n};\n\n/**\n * Requests per window this endpoint accepts per authenticated caller. A log\n * sink, not a handshake, so it's generous: legitimate batching (mobile\n * shipping slow-request timings) lands well under one request per second.\n * 120/min gives 2x headroom over \"a batch every second\" before refusing.\n */\nexport const CLIENT_LOG_RATE_LIMIT = 120;\nexport const CLIENT_LOG_RATE_WINDOW_MS = 60_000;\n\n/** Entries beyond this in one batch are dropped, not logged. */\nexport const MAX_CLIENT_LOG_ENTRIES = 200;\n/** Characters kept from an entry's `msg` before the rest is dropped. */\nconst MAX_CLIENT_LOG_MSG_LEN = 2000;\n/** Characters kept from an entry's serialized `fields` before the rest is dropped. */\nconst MAX_CLIENT_LOG_FIELDS_LEN = 4000;\n\nfunction truncateString(value: string, maxLen: number): string {\n  return value.length > maxLen ? `${value.slice(0, maxLen)}…(truncated)` : value;\n}\n\n/**\n * `fields` is an arbitrary client-supplied object, unbounded in shape and\n * depth — stringifying it is what actually bounds the log line it ends up\n * inside, since a nested structure can be small in entry count but huge once\n * rendered.\n */\nfunction truncateFields(\n  fields: Record<string, unknown> | undefined,\n  maxLen: number,\n): Record<string, unknown> {\n  if (!fields) return {};\n  const serialized = JSON.stringify(fields);\n  if (serialized.length <= maxLen) return fields;\n  return { fieldsTruncated: truncateString(serialized, maxLen) };\n}\n\nexport const createMiscRoutes = (\n  deps: Pick<\n    ApiDeps,\n    | \"publicUrl\"\n    | \"sessionStore\"\n    | \"ptyAttachedIds\"\n    | \"rotateApiKey\"\n    | \"localNoAuth\"\n    | \"pushRepo\"\n    | \"liveActivityPushEnabled\"\n    | \"expoPushEnabled\"\n    | \"expoPushSender\"\n    | \"featureFlagsConfig\"\n  >,\n) => {\n  const app = new Hono<AppEnv>();\n\n  app.get(\"/api/info\", (c) => {\n    const ptyIds = deps.ptyAttachedIds();\n    return c.json({\n      version: getVersion(),\n      machineName: hostname(),\n      platform: process.platform,\n      activeSessions: deps.sessionStore.list(ptyIds).filter((s) => s.status === \"running\").length,\n      publicUrl: deps.publicUrl,\n      // Capability flag: this server serves /api/config/claude-flags. Additive —\n      // older clients ignore it, and clients talking to an older server see it\n      // absent and hide the UI rather than 404ing.\n      claudeFlags: true,\n      // Same contract: this server serves GET /api/config/feature-flags. Lives\n      // here rather than behind /api/config (admin-only) so a read-only client\n      // still learns the server supports flags even if it can't read values.\n      featureFlags: true,\n      // Same contract: this server serves GET /api/projects/summary, which the\n      // Hub's grouped views need before they can draw a tree.\n      projectSummary: true,\n      // The paired-device registry lives in runtime.db, so it survives\n      // `tb-streamer cache clear` and the integrity monitor's reset-and-rescan.\n      // A client may only prefer its scoped device token over the shared API\n      // key when this is true: on an older server the registry is inside\n      // cache.db, where a documented troubleshooting step deletes it and every\n      // device token with it. Absent means \"old server, assume not durable\".\n      devicesDurable: true,\n      // Delivery capability, not endpoint support: whether this server can\n      // actually send a push, so mobile can hide an affordance instead of\n      // registering tokens nothing will ever send to. Absent on older servers,\n      // which a client should read as \"unknown\", not \"unavailable\".\n      push: describePushCapability({\n        liveActivity: deps.liveActivityPushEnabled(),\n        notifications: deps.expoPushEnabled(),\n      }),\n      // This server's long-term X25519 public key, base64url. The same value the\n      // pair QR carries as `spk`, served here so an already-paired client can\n      // learn it without re-scanning. Additive: absent means a server with no\n      // readable identity key, which a client must read as \"cannot verify this\n      // server\" — never as a reason to fail the rest of this response.\n      serverIdentityKey: describeServerIdentityKey(),\n      // Whether to encrypt to this server. Additive, same contract as `push`:\n      // absent means an older server, which a client must read as \"unknown\" and\n      // resolve as today's plaintext path — never as a reason to fail.\n      e2ee: describeE2eeCapability(\n        deps.featureFlagsConfig().values.e2ee,\n        deps.featureFlagsConfig().sources.e2ee,\n      ),\n      // This build samples cheap host signals and pushes `host_pressure` when\n      // the box is starved. Additive capability flag only — live readings stay\n      // off this polled endpoint. Absent means an older server that never\n      // samples. Informational: pressure never holds, kills, or refuses sessions.\n      hostPressure: true,\n      // Fixed-action picker navigation is available at POST /api/sessions/:id/raw-key.\n      // Absent on older streamers, so mobile can explain the required update.\n      rawKeys: true,\n      // Provider-neutral prompt contract: normalized prompt events, opaque ids\n      // and the atomic /prompt/answer route. A prompt_snapshot on subscribe\n      // carries RETAINED prompts, terminal ones included — render on `state`,\n      // not on presence — and an answer retry after that retention window is\n      // answered 404 prompt_not_found rather than the recorded outcome.\n      promptContract: { schemaVersion: 1, atomicAnswer: true },\n    });\n  });\n\n  app.get(\"/api/profiles\", (c) => c.json([]));\n\n  app.post(\"/api/auth/rotate\", (c) => {\n    // Block rotation when localNoAuth is on — any localhost process could\n    // call this and lock out the legitimate owner.\n    if (deps.localNoAuth) {\n      return c.json({ error: \"key rotation is disabled while localNoAuth is active\" }, 403);\n    }\n    const { newKey, persisted } = deps.rotateApiKey();\n    return c.json({\n      apiKey: newKey,\n      persisted,\n      ...(persisted\n        ? {}\n        : {\n            warning:\n              \"Key rotated in memory only. The server was started with --api-key, so the \" +\n              \"old key will be restored on restart. Remove --api-key and let the server \" +\n              \"manage the key via ~/.threadbase/server.yaml for rotation to survive restarts.\",\n          }),\n    });\n  });\n\n  // Push registration (C7). This was a no-op returning { ok: true }: mobile\n  // registered, got success, and nothing was stored — so no notification could\n  // ever be delivered and no failure could be observed. The client had no way\n  // to discover that its \"successful\" registration meant nothing.\n  app.post(\"/api/push/register\", async (c) => {\n    // Read the raw Node request like the sibling routes do — Hono's c.req.json()\n    // does not see a body on this server's request plumbing.\n    const body = (await readJsonBody(c.env.incoming).catch(() => null)) as {\n      token?: unknown;\n      platform?: unknown;\n      deviceId?: unknown;\n      kind?: unknown;\n      activityId?: unknown;\n      sessionId?: unknown;\n      expiresAt?: unknown;\n      staleDate?: unknown;\n      startedAt?: unknown;\n      serverId?: unknown;\n      locale?: unknown;\n      notificationPrefs?: unknown;\n    } | null;\n    const token = body?.token;\n    const platform = body?.platform;\n    // The id the client files this server under, echoed back in the push so a\n    // tap opens the right server. Absent from older clients, which is fine.\n    // Bounded and charset-checked because it is stored and sent to a third\n    // party (Expo) verbatim.\n    const clientServerId = body?.serverId;\n    if (\n      clientServerId !== undefined &&\n      (typeof clientServerId !== \"string\" || !/^[A-Za-z0-9_.:-]{1,128}$/.test(clientServerId))\n    ) {\n      return c.json({ error: \"serverId must be 1-128 characters of [A-Za-z0-9_.:-]\" }, 400);\n    }\n    // The app's display language, so pushes arrive in it. Stored and sent on\n    // to Expo, hence the shape check. A build that predates the field still\n    // gets its device language from Accept-Language (iOS sends one).\n    const bodyLocale = body?.locale;\n    if (\n      bodyLocale !== undefined &&\n      (typeof bodyLocale !== \"string\" || !LOCALE_TAG_RE.test(bodyLocale))\n    ) {\n      return c.json({ error: \"locale must be a BCP 47 language tag\" }, 400);\n    }\n    // Optional: a build that predates preferences sends none and keeps getting\n    // everything. Validated here because it is stored and later drives sends.\n    const parsedPrefs =\n      body?.notificationPrefs === undefined\n        ? undefined\n        : NotificationPrefsSchema.safeParse(body.notificationPrefs);\n    if (parsedPrefs && !parsedPrefs.success) {\n      return c.json(\n        { error: `Invalid notificationPrefs: ${parsedPrefs.error.issues[0]?.message}` },\n        400,\n      );\n    }\n    const headerLocale = c.env.incoming.headers[\"accept-language\"]?.split(/[,;]/)[0]?.trim();\n    const locale =\n      bodyLocale ?? (headerLocale && LOCALE_TAG_RE.test(headerLocale) ? headerLocale : null);\n\n    if (typeof token !== \"string\" || token.length === 0) {\n      return c.json({ error: \"Missing token\" }, 400);\n    }\n    if (platform !== \"ios\" && platform !== \"android\") {\n      return c.json({ error: \"platform must be 'ios' or 'android'\" }, 400);\n    }\n\n    // Omitted kind means a client that predates Live Activities, which can only\n    // be registering an Expo relay token. Released clients cannot be\n    // force-updated, so this default is what keeps them working.\n    const kind = body?.kind === undefined ? DEFAULT_PUSH_TOKEN_KIND : body.kind;\n    if (!isPushTokenKind(kind)) {\n      // Reject rather than silently coercing to Expo: an ActivityKit token\n      // stored as Expo is rejected by the relay at send time with nothing at\n      // registration time to explain why.\n      return c.json(\n        { error: `kind must be one of ${PUSH_TOKEN_KINDS.join(\", \")}`, code: \"INVALID_KIND\" },\n        400,\n      );\n    }\n    // A per-activity token without its activity id cannot be targeted for an\n    // update or an end, so it would be stored and never usable.\n    if (kind === \"liveactivity_update\" && typeof body?.activityId !== \"string\") {\n      return c.json(\n        {\n          error: \"activityId is required for kind 'liveactivity_update'\",\n          code: \"MISSING_ACTIVITY\",\n        },\n        400,\n      );\n    }\n\n    const repo = deps.pushRepo();\n    if (!repo) {\n      // Report honestly rather than claiming success we cannot back — the exact\n      // failure mode this endpoint used to have.\n      return c.json({ error: \"Push registration is unavailable\", code: \"STORE_UNAVAILABLE\" }, 503);\n    }\n\n    // The device id comes from the authenticated principal, not from the body.\n    // A client-chosen id is unverified and tb-mobile sent its own install UUID,\n    // which matches no row in `devices` — so every token was attributed to a\n    // device that does not exist and the revoke cascade below would delete\n    // nothing. The body is still honoured for the shared api key, which names no\n    // device of its own. Register upserts by token and the upsert takes the new\n    // device_id whenever it is non-null, so rows written under the old handler\n    // heal on the next registration rather than needing a migration.\n    const principal = c.get(\"principal\");\n    const deviceId =\n      principal?.kind === \"device\" && principal.deviceId\n        ? principal.deviceId\n        : typeof body?.deviceId === \"string\"\n          ? body.deviceId\n          : null;\n\n    repo.register({\n      token,\n      platform,\n      deviceId,\n      kind,\n      activityId: typeof body?.activityId === \"string\" ? body.activityId : null,\n      sessionId: typeof body?.sessionId === \"string\" ? body.sessionId : null,\n      expiresAt: numberOrNull(body?.expiresAt),\n      staleDate: numberOrNull(body?.staleDate),\n      startedAt: numberOrNull(body?.startedAt),\n      clientServerId,\n      locale,\n      notificationPrefs: parsedPrefs?.data,\n    });\n    return c.json({ ok: true });\n  });\n\n  /**\n   * Change one token's notification preferences without re-registering it.\n   *\n   * Its own route because registering resets failure_streak and revoked_at:\n   * toggling a switch through it would wipe the delivery-health state the\n   * health screen reports. Same device-ownership rule as the delete below; the\n   * shared api key names no device and may set any token.\n   *\n   * 404 rather than the delete's idempotent 204: a client whose token is not\n   * registered here yet must find out its preferences were NOT stored, so it\n   * can register with them. A token owned by another device answers the same\n   * 404 so this cannot be used to probe for tokens.\n   */\n  app.patch(\"/api/push/preferences\", async (c) => {\n    const body = (await readJsonBody(c.env.incoming).catch(() => null)) as {\n      token?: unknown;\n      prefs?: unknown;\n    } | null;\n    const token = body?.token;\n    if (typeof token !== \"string\" || token.length === 0) {\n      return c.json({ error: \"Missing token\" }, 400);\n    }\n    const prefs = NotificationPrefsSchema.safeParse(body?.prefs);\n    if (!prefs.success) {\n      return c.json({ error: `Invalid prefs: ${prefs.error.issues[0]?.message}` }, 400);\n    }\n    const repo = deps.pushRepo();\n    if (!repo) {\n      return c.json({ error: \"Push registration is unavailable\", code: \"STORE_UNAVAILABLE\" }, 503);\n    }\n    const principal = c.get(\"principal\");\n    const deviceId = principal?.kind === \"device\" && principal.deviceId ? principal.deviceId : null;\n    if (!repo.setPrefs(token, prefs.data, deviceId)) {\n      return c.json({ error: \"Unknown token\", code: \"TOKEN_NOT_FOUND\" }, 404);\n    }\n    return c.body(null, 204);\n  });\n\n  /**\n   * Send one real push to a token the caller owns, ignoring its preferences.\n   *\n   * The settings screen's test button used to schedule a LOCAL notification,\n   * which proves the phone can show a banner and nothing about whether this\n   * server can reach it. This goes through Expo like every other push and\n   * reports what came back, so a failing relay or a dead token is visible.\n   * Preferences are bypassed on purpose: a test muted by the user's own quiet\n   * hours would answer \"does delivery work?\" with silence.\n   */\n  app.post(\"/api/push/test\", async (c) => {\n    const body = (await readJsonBody(c.env.incoming).catch(() => null)) as {\n      token?: unknown;\n    } | null;\n    const token = body?.token;\n    if (typeof token !== \"string\" || token.length === 0) {\n      return c.json({ error: \"Missing token\" }, 400);\n    }\n    const repo = deps.pushRepo();\n    const sender = deps.expoPushSender();\n    if (!repo || !sender) {\n      return c.json(\n        { error: \"Push notifications are unavailable\", code: \"STORE_UNAVAILABLE\" },\n        503,\n      );\n    }\n    const principal = c.get(\"principal\");\n    const row = repo.get(token);\n    const ownedElsewhere =\n      principal?.kind === \"device\" &&\n      principal.deviceId &&\n      row?.device_id != null &&\n      row.device_id !== principal.deviceId;\n    if (!row || ownedElsewhere) {\n      return c.json({ error: \"Unknown token\", code: \"TOKEN_NOT_FOUND\" }, 404);\n    }\n    if (row.kind !== \"expo\") {\n      return c.json(\n        { error: \"Only Expo tokens can receive a test push\", code: \"INVALID_KIND\" },\n        400,\n      );\n    }\n\n    const outcome = await sender.sendTo([row], (locale) => ({\n      title: \"Threadbase\",\n      body: testNotificationBody(locale),\n      data: { kind: \"test\" },\n      sound: \"default\",\n      priority: \"high\",\n    }));\n    // Re-read: the send just recorded success or failure against the row, and\n    // that state is the answer the caller wants.\n    const after = repo.get(token);\n    return c.json({\n      ok: outcome.succeeded > 0,\n      attempted: outcome.attempted,\n      succeeded: outcome.succeeded,\n      state: after ? tokenState(after) : \"revoked\",\n    });\n  });\n\n  /**\n   * Unregister a token.\n   *\n   * Same auth as register — `/api/push` maps to the `notifications` capability\n   * in `requiredCapability()`, which matches on path prefix and so classifies\n   * every method on it. An unauthenticated caller gets 401 and a read-only\n   * device 403, without a rule of its own.\n   *\n   * A device principal may only retire its own tokens (or an unattributed one\n   * left by the old register handler). The shared api key names no device, so it\n   * deletes by token alone — it is the owner's credential, and scoping it would\n   * leave a token nothing could ever remove.\n   *\n   * 204 and idempotent: an unknown token is already the state the caller asked\n   * for. Answering 404 would make a retry after a dropped response look like a\n   * failure and strand the client's local state. `kind` is accepted and ignored\n   * — the token is the primary key, so it names exactly one row whatever kind\n   * the client believes it to be.\n   */\n  app.delete(\"/api/push/register\", async (c) => {\n    // Raw Node request like the sibling routes — Hono's c.req.json() does not\n    // see a body on this server's request plumbing.\n    const body = (await readJsonBody(c.env.incoming).catch(() => null)) as {\n      token?: unknown;\n    } | null;\n    const token = body?.token;\n    if (typeof token !== \"string\" || token.length === 0) {\n      return c.json({ error: \"Missing token\" }, 400);\n    }\n\n    const repo = deps.pushRepo();\n    if (!repo) {\n      return c.json({ error: \"Push registration is unavailable\", code: \"STORE_UNAVAILABLE\" }, 503);\n    }\n\n    const principal = c.get(\"principal\");\n    // Return values deliberately ignored: deleting nothing is success here.\n    if (principal?.kind === \"device\" && principal.deviceId) {\n      repo.deleteTokenForDevice(token, principal.deviceId);\n    } else {\n      repo.deleteToken(token);\n    }\n    return c.body(null, 204);\n  });\n\n  // Delivery health for every registered token. Never echoes a token back — it\n  // is a delivery credential, and this endpoint exists to explain state, not to\n  // hand out secrets.\n  app.get(\"/api/push/health\", (c) => {\n    // `available` keeps its original meaning — \"the token store opened\" — because\n    // released mobile builds render it verbatim as \"Push store is available /\n    // unavailable (registration cannot persist)\". Retargeting it at credentials\n    // would make every credential-less server tell users their registrations do\n    // not persist, which is false. Credential state is the additive `push` object.\n    const push = describePushCapability({\n      liveActivity: deps.liveActivityPushEnabled(),\n      notifications: deps.expoPushEnabled(),\n    });\n    const repo = deps.pushRepo();\n    if (!repo) return c.json({ tokens: [], available: false, push });\n    return c.json({ tokens: repo.listHealth(), available: true, push });\n  });\n\n  // Webhook for auto-update. Triggered by the release CI (or any caller that\n  // knows webhook_secret) to make this server pull the new release without\n  // waiting for the next poll. Enabled only when webhook_secret is set in\n  // ~/.threadbase/update.yaml. HMAC-SHA256 of the raw body using that secret\n  // must match the X-Threadbase-Signature header.\n  app.post(\"/api/__update\", async (c) => {\n    const cfg = loadUpdateConfig();\n    if (!cfg?.webhook_secret) {\n      return c.json({ error: \"webhook disabled\" }, 404);\n    }\n\n    let body: string;\n    try {\n      body = await readRawBody(c.env.incoming);\n    } catch {\n      return c.json({ error: \"could not read body\" }, 400);\n    }\n\n    const sig = c.req.header(\"x-threadbase-signature\");\n    if (!verifyWebhookSignature(body, sig, cfg.webhook_secret)) {\n      return c.json({ error: \"invalid signature\" }, 401);\n    }\n\n    const cliPath = process.argv[1];\n    if (!cliPath) {\n      return c.json({ error: \"cannot resolve updater path\" }, 500);\n    }\n    const child = spawn(process.execPath, [cliPath, \"update\", \"--force\"], {\n      detached: true,\n      stdio: \"ignore\",\n    });\n    child.unref();\n\n    return c.json({ accepted: true, pid: child.pid }, 202);\n  });\n\n  const clientLogRateLimit = createRateLimiter({\n    limit: CLIENT_LOG_RATE_LIMIT,\n    windowMs: CLIENT_LOG_RATE_WINDOW_MS,\n  });\n\n  app.post(\"/api/__client-log\", async (c) => {\n    const principal = c.get(\"principal\");\n    const rateLimitKey =\n      principal?.kind === \"device\" && principal.deviceId\n        ? `device:${principal.deviceId}`\n        : \"legacy\";\n    if (!clientLogRateLimit(rateLimitKey)) {\n      return c.json({ ok: false, error: \"rate limited\" }, 429);\n    }\n\n    const ua = c.req.header(\"user-agent\") ?? \"\";\n    let body: { entries?: ClientLogEntry[] } = {};\n    try {\n      body = (await readJsonBody(c.env.incoming)) as { entries?: ClientLogEntry[] };\n    } catch (err) {\n      if (err instanceof BodyTooLargeError) {\n        return c.json({ ok: false, error: \"request body is too large\" }, 413);\n      }\n      return c.json({ ok: false, error: \"invalid json\" }, 400);\n    }\n    const entries = (Array.isArray(body.entries) ? body.entries : []).slice(\n      0,\n      MAX_CLIENT_LOG_ENTRIES,\n    );\n    for (const e of entries) {\n      const level =\n        e.level === \"debug\" || e.level === \"warn\" || e.level === \"error\" ? e.level : \"info\";\n      const msg = truncateString(e.msg ?? \"\", MAX_CLIENT_LOG_MSG_LEN);\n      clientLog[level](`[client] ${e.tag ?? \"log\"}: ${msg}`, {\n        clientTs: e.ts,\n        tag: e.tag,\n        ua,\n        ...truncateFields(e.fields, MAX_CLIENT_LOG_FIELDS_LEN),\n      });\n    }\n    return c.json({ ok: true, accepted: entries.length });\n  });\n\n  return app;\n};\n","import { z } from \"zod\";\n\nconst HHMM = /^([01]\\d|2[0-3]):[0-5]\\d$/;\n\n/** IANA zone names resolve in `Intl`; anything else throws a RangeError. */\nfunction isValidTimeZone(tz: string): boolean {\n  try {\n    new Intl.DateTimeFormat(\"en-US\", { timeZone: tz });\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nconst TimeSchema = z.string().regex(HHMM, \"expected HH:MM, 24-hour\");\n\nexport const QuietWindowSchema = z.object({ from: TimeSchema, to: TimeSchema });\n\nexport const WEEKDAYS = [\"mon\", \"tue\", \"wed\", \"thu\", \"fri\", \"sat\", \"sun\"] as const;\nexport type Weekday = (typeof WEEKDAYS)[number];\n\nexport const QuietHoursSchema = z.object({\n  enabled: z.boolean(),\n  /** The phone's zone. Without it \"22:00\" means the server's clock, not the user's. */\n  tz: z.string().refine(isValidTimeZone, \"unknown IANA time zone\"),\n  default: QuietWindowSchema,\n  /**\n   * A weekday listed here replaces `default` for the window that STARTS that\n   * day. `null` means no quiet hours that day.\n   */\n  days: z.partialRecord(z.enum(WEEKDAYS), QuietWindowSchema.nullable()).optional(),\n});\n\n/**\n * What one device wants to be told about.\n *\n * `waitingInput` gates every push that means \"the agent is waiting on you\" —\n * finished, needs a go-ahead, has a question. `sessionFailed` gates the\n * \"session could not start\" push.\n */\nexport const NotificationPrefsSchema = z.object({\n  waitingInput: z.boolean(),\n  sessionFailed: z.boolean(),\n  quietHours: QuietHoursSchema.optional(),\n});\n\nexport type QuietWindow = z.infer<typeof QuietWindowSchema>;\nexport type QuietHours = z.infer<typeof QuietHoursSchema>;\nexport type NotificationPrefs = z.infer<typeof NotificationPrefsSchema>;\n","import { createSign } from \"node:crypto\";\nimport { type ClientHttp2Session, connect, constants } from \"node:http2\";\nimport { getLogger } from \"../../logger\";\n\n/**\n * Direct APNs sender for ActivityKit Live Activities.\n *\n * ActivityKit cannot go through Expo's push relay: Live Activity updates need a\n * different token type, a `.push-type.liveactivity` topic, and a p8 signing\n * credential. That rules out `expo-server-sdk` and any relay, so this speaks\n * HTTP/2 to APNs directly.\n *\n * Built on `node:http2` and `node:crypto` rather than an APNs SDK — the whole\n * protocol surface used here is one POST with five headers and an ES256 JWT, and\n * a dependency for that would be larger than the code it replaced.\n *\n * Credentials come from the environment only. The signing key is PEM material in\n * `APNS_KEY` (the operator supplies it from 1Password), never a path on disk and\n * never written to a temp file. Neither the key nor any device token is logged.\n */\n\nconst log = getLogger(\"apns\");\n\n/** Sandbox default: the app's `aps-environment` is still `development`. */\nexport const APNS_HOST_SANDBOX = \"api.sandbox.push.apple.com\";\nexport const APNS_HOST_PRODUCTION = \"api.push.apple.com\";\n\n/**\n * APNs rejects a payload over 4 KB.\n *\n * Checked before sending rather than after a rejection, so an oversized payload\n * is a diagnosable local error instead of an opaque 413 from Apple.\n */\nexport const APNS_MAX_PAYLOAD_BYTES = 4096;\n\n/**\n * JWT lifetime. Apple rejects a token older than 1 hour, and reusing one is\n * expected — minting per request would be wasteful and can trip APNs' own\n * \"too many provider token updates\" throttle.\n */\nconst JWT_TTL_SECONDS = 3000;\n\nexport interface ApnsCredentials {\n  /** p8 PEM contents. Never a filesystem path. */\n  key: string;\n  keyId: string;\n  teamId: string;\n  bundleId: string;\n  host: string;\n}\n\nexport interface ApnsSendResult {\n  ok: boolean;\n  status: number;\n  /** APNs `reason`, e.g. `BadDeviceToken` / `ExpiredToken`. */\n  reason?: string;\n  /**\n   * True when APNs says this token will never work again. The caller must stop\n   * using it rather than retrying — retrying a dead token fails forever and\n   * makes the health report read \"failing\" instead of \"this device is gone\".\n   */\n  tokenDead: boolean;\n}\n\n/**\n * APNs reasons meaning the token is permanently unusable.\n *\n * Distinguished from transient failures (503, timeouts) because the two need\n * opposite handling: a dead token must be retired, a transient one must not be.\n */\nconst DEAD_TOKEN_REASONS = new Set([\n  \"BadDeviceToken\",\n  \"DeviceTokenNotForTopic\",\n  \"Unregistered\",\n  \"ExpiredToken\",\n]);\n\nfunction base64url(input: Buffer | string): string {\n  return Buffer.from(input).toString(\"base64url\");\n}\n\n/**\n * Read APNs credentials from the environment.\n *\n * Returns null when `APNS_KEY` is absent, which is the normal case for a\n * developer machine and for CI. Callers treat null as \"Live Activity push is\n * off\" and skip sending — the server must not fail to boot because an optional\n * push credential is missing.\n *\n * Every identifier comes from the environment with no default. Baking one\n * deployment's Apple account into the source would make this package silently\n * sign for the wrong team when someone else deploys it, and the resulting APNs\n * rejection names none of that. Only the host has a default, because sandbox\n * versus production is a deployment choice rather than an account identity.\n *\n * Returns null (rather than throwing) when the key is present but an identifier\n * is missing, so a half-configured environment disables the feature instead of\n * taking the server down. `describeMissingApnsCredentials` explains which one.\n */\nexport function readApnsCredentialsFromEnv(\n  env: NodeJS.ProcessEnv = process.env,\n): ApnsCredentials | null {\n  const key = env.APNS_KEY;\n  if (!key || key.trim().length === 0) return null;\n\n  const keyId = env.APNS_KEY_ID?.trim();\n  const teamId = env.APNS_TEAM_ID?.trim();\n  const bundleId = env.APNS_BUNDLE_ID?.trim();\n  if (!keyId || !teamId || !bundleId) return null;\n\n  const host = env.APNS_HOST ?? APNS_HOST_SANDBOX;\n\n  return { key, keyId, teamId, bundleId, host };\n}\n\n/**\n * Why Live Activity push is unavailable, as a message safe to log.\n *\n * Says which variable is missing and nothing about its value, so a boot log can\n * explain the feature being off without becoming a place secrets leak.\n */\nexport function describeMissingApnsCredentials(\n  env: NodeJS.ProcessEnv = process.env,\n): string | null {\n  if (!env.APNS_KEY || env.APNS_KEY.trim().length === 0) {\n    return (\n      \"APNS_KEY is not set, so Live Activity push is disabled. \" +\n      \"Set it to the p8 key contents (not a path) to enable it.\"\n    );\n  }\n\n  // A key with no identifiers is the harder case to diagnose: it looks\n  // configured, and APNs answers a mismatch with a bare InvalidProviderToken\n  // that names nothing. Say exactly which variable is absent.\n  const missing = (\n    [\n      [\"APNS_KEY_ID\", env.APNS_KEY_ID],\n      [\"APNS_TEAM_ID\", env.APNS_TEAM_ID],\n      [\"APNS_BUNDLE_ID\", env.APNS_BUNDLE_ID],\n    ] as const\n  )\n    .filter(([, value]) => !value || value.trim().length === 0)\n    .map(([name]) => name);\n\n  if (missing.length === 0) return null;\n  return (\n    `APNS_KEY is set but ${missing.join(\", \")} ${missing.length === 1 ? \"is\" : \"are\"} not, ` +\n    \"so Live Activity push is disabled. Under launchd, APNS_KEY_ID is derived from the \" +\n    \"AuthKey_<keyId>.p8 filename; the team and bundle ids must be set explicitly.\"\n  );\n}\n\nexport class ApnsClient {\n  private session: ClientHttp2Session | null = null;\n  private cachedJwt: { token: string; expiresAt: number } | null = null;\n\n  constructor(private readonly creds: ApnsCredentials) {}\n\n  /**\n   * The `apns-topic` for Live Activity pushes.\n   *\n   * The `.push-type.liveactivity` suffix is mandatory and is why the signing key\n   * must be Team Scoped (All Topics) — a key scoped to the bundle id alone\n   * cannot sign this topic.\n   */\n  get topic(): string {\n    return `${this.creds.bundleId}.push-type.liveactivity`;\n  }\n\n  /**\n   * Mint or reuse the provider JWT.\n   *\n   * ES256 over the p8 key. Cached until shortly before expiry: Apple rejects a\n   * token older than an hour, but minting one per request is wasteful and can\n   * trip APNs' provider-token-update throttle.\n   */\n  private getJwt(now: number = Date.now()): string {\n    const nowSeconds = Math.floor(now / 1000);\n    if (this.cachedJwt && this.cachedJwt.expiresAt > nowSeconds + 60) {\n      return this.cachedJwt.token;\n    }\n\n    const header = base64url(JSON.stringify({ alg: \"ES256\", kid: this.creds.keyId, typ: \"JWT\" }));\n    const payload = base64url(JSON.stringify({ iss: this.creds.teamId, iat: nowSeconds }));\n    const signingInput = `${header}.${payload}`;\n\n    // dsaEncoding: \"ieee-p1363\" produces the raw r||s form JWS requires. Node's\n    // default is DER, which APNs rejects as an invalid token — and the error\n    // (\"InvalidProviderToken\") does not hint at the encoding.\n    const signature = createSign(\"SHA256\")\n      .update(signingInput)\n      .sign({ key: this.creds.key, dsaEncoding: \"ieee-p1363\" });\n\n    const token = `${signingInput}.${base64url(signature)}`;\n    this.cachedJwt = { token, expiresAt: nowSeconds + JWT_TTL_SECONDS };\n    return token;\n  }\n\n  /**\n   * Reuse one HTTP/2 session across sends.\n   *\n   * APNs expects a long-lived connection; a fresh TLS handshake per push is slow\n   * and Apple treats connection churn as abuse.\n   */\n  private getSession(): ClientHttp2Session {\n    if (this.session && !this.session.closed && !this.session.destroyed) {\n      return this.session;\n    }\n    const session = connect(`https://${this.creds.host}`);\n    // A connection-level error must not reach the process as an unhandled\n    // 'error' event, which would take the server down over a push failure.\n    session.on(\"error\", (err) => {\n      log.warn(\"apns.session_error\", { event: \"apns.session_error\", err: String(err) });\n    });\n    this.session = session;\n    return session;\n  }\n\n  /**\n   * Send one push.\n   *\n   * Resolves with a result rather than rejecting on an APNs rejection: a\n   * rejected push is an expected outcome the caller must act on (retire the\n   * token), not an exception. Only a genuinely unexpected local failure throws,\n   * and the caller logs it.\n   */\n  async send(args: {\n    deviceToken: string;\n    payload: unknown;\n    /** 10 for a user-visible change, 5 to let iOS batch. */\n    priority?: 5 | 10;\n    /** Seconds since epoch after which APNs stops trying. */\n    expirationSeconds?: number;\n    timeoutMs?: number;\n  }): Promise<ApnsSendResult> {\n    const body = Buffer.from(JSON.stringify(args.payload), \"utf-8\");\n    if (body.byteLength > APNS_MAX_PAYLOAD_BYTES) {\n      // Fail locally with a diagnosable message instead of shipping a payload\n      // Apple will reject with a bare 413.\n      throw new Error(\n        `APNs payload is ${body.byteLength} bytes, over the ${APNS_MAX_PAYLOAD_BYTES} byte limit`,\n      );\n    }\n\n    const session = this.getSession();\n    const headers = {\n      [constants.HTTP2_HEADER_METHOD]: \"POST\",\n      [constants.HTTP2_HEADER_PATH]: `/3/device/${args.deviceToken}`,\n      [constants.HTTP2_HEADER_AUTHORIZATION]: `bearer ${this.getJwt()}`,\n      \"apns-push-type\": \"liveactivity\",\n      \"apns-topic\": this.topic,\n      \"apns-priority\": String(args.priority ?? 10),\n      ...(args.expirationSeconds != null && {\n        \"apns-expiration\": String(args.expirationSeconds),\n      }),\n      [constants.HTTP2_HEADER_CONTENT_TYPE]: \"application/json\",\n      [constants.HTTP2_HEADER_CONTENT_LENGTH]: String(body.byteLength),\n    };\n\n    return new Promise<ApnsSendResult>((resolve, reject) => {\n      const req = session.request(headers);\n      req.setTimeout(args.timeoutMs ?? 10_000, () => {\n        req.close(constants.NGHTTP2_CANCEL);\n        // A timeout is transient — the token stays usable, so tokenDead is\n        // false and the caller must not retire it.\n        resolve({ ok: false, status: 0, reason: \"Timeout\", tokenDead: false });\n      });\n\n      let status = 0;\n      req.on(\"response\", (resHeaders) => {\n        status = Number(resHeaders[constants.HTTP2_HEADER_STATUS] ?? 0);\n      });\n\n      const chunks: Buffer[] = [];\n      req.on(\"data\", (chunk: Buffer) => chunks.push(chunk));\n      req.on(\"error\", reject);\n      req.on(\"end\", () => {\n        const raw = Buffer.concat(chunks).toString(\"utf-8\");\n        // APNs sends an empty body on success and { reason } on failure.\n        let reason: string | undefined;\n        if (raw.length > 0) {\n          try {\n            reason = (JSON.parse(raw) as { reason?: string }).reason;\n          } catch {\n            // A non-JSON error body is still worth surfacing verbatim rather\n            // than discarding — it is all we would have to diagnose with.\n            reason = raw.slice(0, 200);\n          }\n        }\n        resolve({\n          ok: status === 200,\n          status,\n          reason,\n          tokenDead: reason != null && DEAD_TOKEN_REASONS.has(reason),\n        });\n      });\n\n      req.end(body);\n    });\n  }\n\n  /** Close the shared connection. Called on server shutdown. */\n  close(): void {\n    this.session?.close();\n    this.session = null;\n  }\n}\n","import type { ProviderName } from \"../../providers\";\n\n/**\n * Notification copy, per language.\n *\n * The languages are the ones tb-mobile ships (`locales/`): a push in a language\n * the app itself cannot display would be the only screen in it. Anything else\n * falls back to English.\n *\n * What the copy may say is bounded by the privacy policy: which session and\n * which agent, never what the agent said or what it wants to run. That is why a\n * permission push reads \"needs your go-ahead\" rather than naming the tool, and\n * why a question push does not carry the question. See waitingInputMessage.\n *\n * The non-English strings are machine-written and want a native review.\n */\n\nexport type AttentionKind = \"turn_done\" | \"permission\" | \"question\" | \"failed\";\n\ntype Copy = Record<AttentionKind, (agent: string) => string>;\n\nconst COPY: Record<string, Copy> = {\n  en: {\n    turn_done: (a) => `${a} finished — tap to read the reply and continue.`,\n    permission: (a) => `${a} needs your go-ahead to continue.`,\n    question: (a) => `${a} has a question for you.`,\n    failed: (a) => `${a} could not start.`,\n  },\n  he: {\n    turn_done: (a) => `התשובה של ${a} מוכנה — הקישו כדי לקרוא ולהמשיך.`,\n    permission: (a) => `${a} ממתין לאישור שלך כדי להמשיך.`,\n    question: (a) => `ל-${a} יש שאלה בשבילך.`,\n    failed: (a) => `${a} לא הצליח להתחיל.`,\n  },\n  ar: {\n    turn_done: (a) => `رد ${a} جاهز — اضغط للقراءة والمتابعة.`,\n    permission: (a) => `${a} بانتظار موافقتك للمتابعة.`,\n    question: (a) => `لدى ${a} سؤال لك.`,\n    failed: (a) => `تعذّر تشغيل ${a}.`,\n  },\n  ru: {\n    turn_done: (a) => `Ответ ${a} готов — нажмите, чтобы прочитать и продолжить.`,\n    permission: (a) => `${a} ждёт вашего разрешения, чтобы продолжить.`,\n    question: (a) => `У ${a} есть к вам вопрос.`,\n    failed: (a) => `${a} не удалось запустить.`,\n  },\n};\n\n/** Scannable at a glance in a stack of notifications, in any language. */\nconst TITLE_MARK: Record<AttentionKind, string> = {\n  turn_done: \"✅\",\n  permission: \"✋\",\n  question: \"💬\",\n  failed: \"❌\",\n};\n\n/** \"he-IL\" → \"he\"; unsupported or absent → \"en\". `iw` is Android's legacy Hebrew code. */\nexport function pushLanguage(locale: string | null | undefined): string {\n  const lang = locale?.split(/[-_]/)[0]?.toLowerCase();\n  if (lang === \"iw\") return \"he\";\n  return lang && Object.hasOwn(COPY, lang) ? lang : \"en\";\n}\n\nconst TEST_COPY: Record<string, string> = {\n  en: \"Test notification — push delivery works.\",\n  he: \"התראת בדיקה — שליחת ההתראות עובדת.\",\n  ar: \"إشعار تجريبي — تسليم الإشعارات يعمل.\",\n  ru: \"Тестовое уведомление — доставка работает.\",\n};\n\n/** What the settings screen's \"Send test notification\" delivers. */\nexport function testNotificationBody(locale: string | null | undefined): string {\n  return TEST_COPY[pushLanguage(locale)];\n}\n\nexport function agentLabel(provider: ProviderName | undefined): string {\n  if (provider === \"codex-cli\") return \"Codex\";\n  if (provider === \"cursor\") return \"Cursor\";\n  return \"Claude\";\n}\n\nexport function attentionTitle(kind: AttentionKind, projectName: string): string {\n  return `${TITLE_MARK[kind]} ${projectName || \"Threadbase\"}`;\n}\n\nexport function attentionBody(\n  kind: AttentionKind,\n  provider: ProviderName | undefined,\n  locale: string | null | undefined,\n): string {\n  return COPY[pushLanguage(locale)][kind](agentLabel(provider));\n}\n","import { Hono } from \"hono\";\nimport { getVersion } from \"../../version\";\nimport type { AppEnv } from \"../app\";\nimport type { ApiDeps } from \"../types/api-deps\";\n\nexport const createHealthRoutes = (deps: ApiDeps) => {\n  const app = new Hono<AppEnv>();\n\n  app.get(\"/\", (c) => {\n    const cacheAlert = deps.cacheMonitor()?.healthzField();\n    return c.json({ ok: true, version: getVersion(), ...(cacheAlert ? { cacheAlert } : {}) });\n  });\n\n  return app;\n};\n","import { closeSync, existsSync, fstatSync, openSync, readSync, statSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { Hono } from \"hono\";\nimport { installDir } from \"../../lifecycle/constants\";\nimport { getLogger } from \"../../logger\";\n\nconst logger = getLogger(\"logs-api\");\n\ntype LogSource = \"stdout\" | \"stderr\" | \"dev\";\n\nfunction resolveLogPath(source: LogSource): string {\n  return join(installDir(), \"logs\", `${source}.log`);\n}\n\nfunction pickDefaultSource(): LogSource {\n  // Prefer live prod stdout when present and non-empty; fall back to stderr/dev.\n  for (const source of [\"stdout\", \"stderr\", \"dev\"] as const) {\n    const p = resolveLogPath(source);\n    if (existsSync(p) && statSync(p).size > 0) return source;\n  }\n  return \"stdout\";\n}\n\n/** Read the last `limit` non-empty content lines starting after `since` line index. */\nfunction readLogLines(\n  filePath: string,\n  sinceOffset: number,\n  limit: number,\n): { lines: string[]; offset: number; total: number } {\n  if (!existsSync(filePath)) {\n    return { lines: [], offset: 0, total: 0 };\n  }\n\n  const fd = openSync(filePath, \"r\");\n  try {\n    const { size } = fstatSync(fd);\n    if (size === 0) return { lines: [], offset: 0, total: 0 };\n\n    // Cap read window so huge stdout.log (100MB+) stays responsive.\n    const maxBytes = Math.min(size, 2 * 1024 * 1024);\n    const start = size - maxBytes;\n    const buf = Buffer.alloc(maxBytes);\n    readSync(fd, buf, 0, maxBytes, start);\n    let text = buf.toString(\"utf8\");\n    if (start > 0) {\n      const firstNl = text.indexOf(\"\\n\");\n      if (firstNl >= 0) text = text.slice(firstNl + 1);\n    }\n\n    const allLines = text.split(\"\\n\").filter((line) => line.trim() && !line.startsWith(\"===\"));\n\n    let lines: string[];\n    let newOffset: number;\n\n    if (sinceOffset > 0 && sinceOffset < allLines.length) {\n      lines = allLines.slice(sinceOffset, sinceOffset + limit);\n      newOffset = sinceOffset + lines.length;\n    } else if (sinceOffset >= allLines.length && sinceOffset > 0) {\n      lines = [];\n      newOffset = allLines.length;\n    } else {\n      lines = allLines.slice(-limit);\n      newOffset = allLines.length;\n    }\n\n    return { lines, offset: newOffset, total: allLines.length };\n  } finally {\n    closeSync(fd);\n  }\n}\n\nexport function createLogsRoutes() {\n  const app = new Hono();\n\n  app.get(\"/\", (c) => {\n    try {\n      const sourceParam = (c.req.query(\"source\") || \"\").toLowerCase();\n      const source: LogSource =\n        sourceParam === \"stdout\" || sourceParam === \"stderr\" || sourceParam === \"dev\"\n          ? sourceParam\n          : pickDefaultSource();\n\n      const logPath = resolveLogPath(source);\n      const sinceOffset = parseInt(c.req.query(\"since\") || \"0\", 10);\n      const limit = Math.min(parseInt(c.req.query(\"limit\") || \"100\", 10) || 100, 1000);\n\n      if (!existsSync(logPath)) {\n        return c.json({\n          logs: [],\n          message: `No log file found for source=${source}`,\n          offset: 0,\n          total: 0,\n          source,\n        });\n      }\n\n      const { lines, offset, total } = readLogLines(logPath, sinceOffset, limit);\n      const stats = statSync(logPath);\n\n      return c.json({\n        logs: lines,\n        offset,\n        total,\n        hasMore: offset < total,\n        source,\n        fileSize: stats.size,\n        fileModified: stats.mtime.toISOString(),\n      });\n    } catch (error) {\n      logger.error(\"Failed to read logs\", { error: String(error) });\n      return c.json(\n        {\n          error: \"Failed to read logs\",\n          logs: [],\n          offset: 0,\n          total: 0,\n        },\n        500,\n      );\n    }\n  });\n\n  app.get(\"/meta\", (c) => {\n    try {\n      const sources = ([\"stdout\", \"stderr\", \"dev\"] as const).map((source) => {\n        const logPath = resolveLogPath(source);\n        if (!existsSync(logPath)) {\n          return { source, exists: false, total: 0, fileSize: 0 };\n        }\n        const stats = statSync(logPath);\n        return {\n          source,\n          exists: true,\n          fileSize: stats.size,\n          fileModified: stats.mtime.toISOString(),\n        };\n      });\n\n      return c.json({\n        defaultSource: pickDefaultSource(),\n        sources,\n      });\n    } catch (error) {\n      logger.error(\"Failed to read log metadata\", { error: String(error) });\n      return c.json({ error: \"Failed to read log metadata\", exists: false }, 500);\n    }\n  });\n\n  return app;\n}\n","import { Hono } from \"hono\";\nimport type { AppEnv } from \"../app\";\nimport type { ApiDeps } from \"../types/api-deps\";\n\nconst ALREADY_HANDLED = 597;\nconst alreadyHandled = () => new Response(null, { status: ALREADY_HANDLED });\n\nexport const createPairRoutes = (deps: ApiDeps) => {\n  const app = new Hono<AppEnv>();\n\n  app.post(\"/start\", (c) => {\n    deps.handlePairStart(c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  // /api/pair/exchange is public — auth middleware skips it\n  app.post(\"/exchange\", async (c) => {\n    await deps.handlePairExchange(c.env.incoming, c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  return app;\n};\n","// src/api/routes/progress.routes.ts\n//\n// Webhook receiver for worker → tb-streamer progress events.\n//\n// Auth: HMAC over the raw request body, header X-Progress-Signature.\n// Auth bypass: the auth middleware skips this prefix because validation\n// happens inside the handler (mirrors /api/__update).\n//\n// Idempotency: per-session LRU on the ManagedSession record. Duplicates\n// return 200 with deduped:true and do not broadcast.\n\nimport crypto from \"node:crypto\";\nimport type { IncomingMessage } from \"node:http\";\nimport type { AgentOutputPayload, ProgressEvent, Stage } from \"@threadbase-sh/agent-types\";\nimport { Hono } from \"hono\";\nimport type { WSMessage } from \"../../types\";\nimport type { AppEnv } from \"../app\";\nimport type { ApiDeps } from \"../types/api-deps\";\n\nfunction readRawBody(req: IncomingMessage): Promise<Buffer> {\n  return new Promise((resolve, reject) => {\n    const chunks: Buffer[] = [];\n    req.on(\"data\", (chunk) => chunks.push(chunk));\n    req.on(\"end\", () => resolve(Buffer.concat(chunks)));\n    req.on(\"error\", reject);\n  });\n}\n\ninterface AgentDeps {\n  sessionStore: {\n    getManaged: (sessionId: string) => {\n      id: string;\n      progressDedupeIds?: { hasSeen: (id: string) => boolean };\n      currentTurnId?: string | null;\n    } | null;\n  };\n  wsHub: { broadcast: (m: WSMessage) => void };\n  conversationWriter: {\n    appendAssistantTurn: (a: {\n      sessionId: string;\n      turnId: string;\n      content: string;\n      reviewerOverruled?: boolean;\n    }) => Promise<void>;\n  } | null;\n  agentConfig: {\n    enabled: boolean;\n    webhook: { hmacSecret: string; timestampSkewSeconds: number };\n    dedupe: { perSessionCapacity: number };\n  };\n}\n\nfunction verifySignature(rawBody: Buffer, signature: string, secret: string): boolean {\n  if (!signature || signature.length === 0) return false;\n  const expected = crypto.createHmac(\"sha256\", secret).update(rawBody).digest(\"hex\");\n  if (expected.length !== signature.length) return false;\n  try {\n    return crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected));\n  } catch {\n    return false;\n  }\n}\n\nfunction isWithinSkew(timestampHeader: string | undefined, skewSeconds: number): boolean {\n  if (!timestampHeader) return true; // header optional in milestone B\n  const t = Number(timestampHeader);\n  if (!Number.isFinite(t)) return false;\n  const now = Math.floor(Date.now() / 1000);\n  return Math.abs(now - t) <= skewSeconds;\n}\n\nfunction stageToRole(stage: Stage | string | undefined): \"worker\" | \"reviewer\" | \"signoff\" {\n  if (stage === \"review\") return \"reviewer\";\n  if (stage === \"sign-off\") return \"signoff\";\n  return \"worker\";\n}\n\nexport const createProgressRoutes = (deps: ApiDeps & AgentDeps) => {\n  const app = new Hono<AppEnv>();\n\n  app.post(\"/sessions/:sessionId/progress\", async (c) => {\n    if (!deps.agentConfig.enabled) {\n      return c.json({ error: \"multi-agent mode not enabled\" }, 404);\n    }\n    const sessionId = c.req.param(\"sessionId\");\n    const session = deps.sessionStore.getManaged(sessionId);\n    if (!session) {\n      return c.json({ error: \"unknown session\" }, 404);\n    }\n\n    // Read raw body from the underlying Node IncomingMessage stream — mirrors\n    // /api/__update. Hono's c.req.arrayBuffer() returns empty when the request\n    // arrives via @hono/node-server's bindings, leaving HMAC verification with\n    // the wrong byte buffer. In tests (app.request), c.env.incoming is absent\n    // and arrayBuffer() works fine — fall back to it.\n    let rawBuf: Buffer;\n    try {\n      const incoming = c.env?.incoming;\n      rawBuf = incoming ? await readRawBody(incoming) : Buffer.from(await c.req.arrayBuffer());\n    } catch {\n      return c.json({ error: \"could not read body\" }, 400);\n    }\n    const sigHeader = c.req.header(\"x-progress-signature\") ?? \"\";\n    if (!verifySignature(rawBuf, sigHeader, deps.agentConfig.webhook.hmacSecret)) {\n      return c.json({ error: \"unauthorized\" }, 401);\n    }\n    if (\n      !isWithinSkew(\n        c.req.header(\"x-progress-timestamp\"),\n        deps.agentConfig.webhook.timestampSkewSeconds,\n      )\n    ) {\n      return c.json({ error: \"stale timestamp\" }, 401);\n    }\n\n    let event: ProgressEvent;\n    try {\n      event = JSON.parse(rawBuf.toString(\"utf8\")) as ProgressEvent;\n    } catch {\n      return c.json({ error: \"bad json\" }, 400);\n    }\n    if (!event.eventId || !event.sessionId || !event.turnId) {\n      return c.json({ error: \"missing required fields\" }, 400);\n    }\n\n    // Dedupe (per spec §7.1). If the session lacks a dedupe map (e.g., it was\n    // created in PTY mode and re-used), the receiver still works — every event\n    // is treated as new.\n    if (session.progressDedupeIds?.hasSeen(event.eventId)) {\n      return c.json({ ok: true, deduped: true }, 200);\n    }\n\n    // ─── Translate to WSMessage and broadcast ───────────────────────────\n    if (event.type === \"stage_transition\") {\n      const msg: WSMessage = {\n        type: \"session_update\",\n        sessionId: event.sessionId,\n        // turnId disambiguates which turn this stage applies to. Critical\n        // for `queued` (identifies the waiting turn) and `rework` (with\n        // reworkAttempt). Existing single-turn consumers can ignore it.\n        turnId: event.turnId,\n        // Existing session_update consumers expect status; we leave it\n        // undefined here (stage is the new-only field).\n        stage: event.stage,\n        reworkAttempt: event.reworkAttempt,\n        stalledSinceMs: 0,\n      } as WSMessage;\n      deps.wsHub.broadcast(msg);\n    } else if (event.type === \"agent_output\") {\n      const payload = (event.payload ?? {}) as unknown as AgentOutputPayload;\n      const msg: WSMessage = {\n        type: \"agent_output\",\n        sessionId: event.sessionId,\n        turnId: event.turnId,\n        role: stageToRole(event.stage),\n        content: payload.content ?? \"\",\n        partial: payload.partial,\n        reviewerOverruled: payload.reviewerOverruled,\n        stage: event.stage,\n        reworkAttempt: event.reworkAttempt,\n      } as WSMessage;\n      deps.wsHub.broadcast(msg);\n\n      // Persist final answer to JSONL.\n      if (event.stage === \"done\" && deps.conversationWriter && payload.content) {\n        await deps.conversationWriter.appendAssistantTurn({\n          sessionId: event.sessionId,\n          turnId: event.turnId,\n          content: payload.content,\n          reviewerOverruled: payload.reviewerOverruled,\n        });\n      }\n\n      // Release the session lock when the turn completes (spec §6).\n      if (event.stage === \"done\" && session.currentTurnId === event.turnId) {\n        (session as { currentTurnId: string | null }).currentTurnId = null;\n      }\n    } else if (event.type === \"terminal_failure\") {\n      const reason = (event.payload as { reason?: string } | undefined)?.reason ?? \"unknown\";\n      const msg: WSMessage = {\n        type: \"turn_failure\",\n        sessionId: event.sessionId,\n        turnId: event.turnId,\n        reason,\n      } as WSMessage;\n      deps.wsHub.broadcast(msg);\n\n      // Release the session lock on failure (spec §6).\n      if (session.currentTurnId === event.turnId) {\n        (session as { currentTurnId: string | null }).currentTurnId = null;\n      }\n    }\n\n    return c.json({ ok: true }, 200);\n  });\n\n  return app;\n};\n","import { Hono } from \"hono\";\nimport type { AppEnv } from \"../app\";\nimport type { ApiDeps } from \"../types/api-deps\";\n\nconst ALREADY_HANDLED = 597;\nconst alreadyHandled = () => new Response(null, { status: ALREADY_HANDLED });\n\nexport const createProjectRoutes = (deps: ApiDeps) => {\n  const app = new Hono<AppEnv>();\n\n  app.get(\"/\", (c) => {\n    const url = new URL(c.req.url);\n    deps.handleListProjects(url, c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  app.get(\"/popular\", (c) => {\n    const url = new URL(c.req.url);\n    deps.handleGetPopularProjects(url, c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  app.get(\"/summary\", (c) => {\n    const url = new URL(c.req.url);\n    deps.handleGetProjectSummaries(url, c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  return app;\n};\n","import { Hono } from \"hono\";\nimport { PROVIDER_NAMES } from \"../../providers\";\nimport { providerHealth } from \"../../services/providers/providerHealth\";\nimport type { AppEnv } from \"../app\";\n\n/**\n * GET /api/providers — what each provider supports, and whether the installed\n * build is one we have verified against (C2).\n *\n * Clients need this to hide actions a provider cannot perform, rather than\n * offering them and failing. Before this, the only capability signal that\n * reached a client was a 501 from LiveSessionManager — i.e. it arrived as a\n * failed action instead of an absent button.\n *\n * Capabilities are per-provider, not per-session, so this is a separate\n * endpoint rather than more fields on SessionResponse.\n *\n * Deliberately exposes no filesystem paths: which binary resolved is an\n * implementation detail, and a resolved path can leak the user's home layout.\n */\nexport const createProviderRoutes = () => {\n  const app = new Hono<AppEnv>();\n\n  app.get(\"/\", async (c) => {\n    const providers = await Promise.all(PROVIDER_NAMES.map((name) => providerHealth(name)));\n\n    return c.json({ providers });\n  });\n\n  return app;\n};\n","import { execFile } from \"child_process\";\nimport { isWindows, locateProviderExe } from \"../../platform\";\nimport {\n  CLAUDE_CODE_PROVIDER,\n  CODEX_CLI_PROVIDER,\n  CURSOR_PROVIDER,\n  type ProviderName,\n} from \"../../providers\";\nimport { capabilitiesFor, type ProviderCapabilities, type VerifiedAgainst } from \"./capabilities\";\n\n/**\n * Provider version detection and compatibility reporting (C2).\n * See docs/architecture/2026-07-24-provider-compatibility.md.\n *\n * Our parsing and TUI detection are calibrated against specific provider\n * versions — the fixtures under __tests__/fixtures/providers/<provider>/<version>\n * record which. This module compares what is actually installed against that,\n * so drift is reported instead of surfacing as a mysteriously stuck session.\n *\n * A warning is never a refusal. A provider working slightly outside our verified\n * range is vastly better than us blocking it.\n */\n\n/** Versions each adapter's fixtures were captured against. */\nexport const VERIFIED_AGAINST: Record<ProviderName, VerifiedAgainst> = {\n  [CLAUDE_CODE_PROVIDER]: { captured: [\"2.1.214\"], min: \"2.1.0\" },\n  [CODEX_CLI_PROVIDER]: { captured: [\"0.140.0-alpha.19\"], min: \"0.140.0\" },\n  // Transcript *shape* era (agent-transcripts JSONL), not a live `agent --version`\n  // pin — we have no captured CLI build yet, so any installed version warns.\n  [CURSOR_PROVIDER]: { captured: [\"2026.1.0\"] },\n};\n\nexport type ProviderWarningCode =\n  /** The CLI is not installed, or not on PATH. */\n  | \"provider_not_found\"\n  /** Installed, but we could not read a version from it. */\n  | \"version_undetectable\"\n  /** Installed and readable, but outside the range our fixtures cover. */\n  | \"version_unverified\";\n\nexport interface ProviderWarning {\n  code: ProviderWarningCode;\n  message: string;\n}\n\nexport interface ProviderHealth {\n  name: ProviderName;\n  available: boolean;\n  version: string | null;\n  verifiedAgainst: VerifiedAgainst;\n  capabilities: ProviderCapabilities;\n  warnings: ProviderWarning[];\n}\n\nconst VERSION_TIMEOUT_MS = 3_000;\n\n/**\n * Run `<exe> --version` and return the first version-looking token.\n *\n * Deliberately tolerant: providers format this line differently and change it\n * between releases, so we scrape a semver-shaped substring rather than assume a\n * layout. Any failure yields null, which the caller treats as \"unverified\"\n * rather than \"incompatible\" — an unreadable version is not evidence of a\n * problem with the provider.\n */\nexport function parseVersionOutput(output: string): string | null {\n  const match = output.match(/\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z.-]+)?/);\n  return match ? match[0] : null;\n}\n\n/**\n * Versions already read, keyed by the executable they were read from.\n *\n * `--version` is the only part of a health check that costs a process spawn\n * (measured on macOS: claude 85ms, codex 13ms), and mobile re-asks every 60s\n * while a user browses. A version cannot change without someone replacing the\n * binary, so this is a fact about the machine rather than about the request.\n *\n * Deliberately no TTL, and deliberately NOT extended to `available`. A stale\n * version can only misword the compatibility warning; a stale `available` would\n * grey out the provider button for a user who just installed the CLI to fix the\n * error telling them it was missing. Availability is re-derived on every call\n * for exactly that reason — it is a PATH walk of stats, and costs nothing.\n *\n * Only successful reads are cached, so a probe that lost to a timeout under\n * load is retried rather than latched as \"unverifiable\" until restart.\n */\nconst versionByExe = new Map<string, string>();\n\nfunction runVersion(exe: string): Promise<string | null> {\n  const cached = versionByExe.get(exe);\n  if (cached !== undefined) return Promise.resolve(cached);\n\n  // Since the CVE-2024-27980 fix, node refuses to spawn a .cmd/.bat without a\n  // shell and throws EINVAL synchronously. npm installs the CLIs as claude.cmd\n  // and resolveClaudeExe() returns exactly that, so on Windows the shell is the\n  // only way to read a version at all. `--version` is a fixed literal and the\n  // resolved path is quoted, so the shell adds no injection surface.\n  const viaShell = isWindows && /\\.(?:cmd|bat)$/i.test(exe);\n  const file = viaShell ? `\"${exe}\"` : exe;\n  return new Promise((resolve) => {\n    execFile(\n      file,\n      [\"--version\"],\n      { timeout: VERSION_TIMEOUT_MS, shell: viaShell, windowsHide: true },\n      (err, stdout, stderr) => {\n        if (err && !stdout && !stderr) return resolve(null);\n        const version = parseVersionOutput(`${stdout}${stderr}`);\n        if (version !== null) versionByExe.set(exe, version);\n        resolve(version);\n      },\n    );\n  });\n}\n\n/**\n * Compare a detected version against the range an adapter claims to cover.\n *\n * Only `min` is enforced as a floor. There is deliberately no upper bound check\n * beyond `max` when set: providers release constantly, and refusing to run\n * against a version merely newer than our newest fixture would break users on\n * every provider update for no evidence of an actual incompatibility.\n */\nexport function compareToVerified(\n  version: string | null,\n  verified: VerifiedAgainst,\n): ProviderWarning | null {\n  if (version === null) {\n    return {\n      code: \"version_undetectable\",\n      message:\n        \"Could not determine the installed version, so compatibility is unverified. \" +\n        \"Parsing and prompt detection may not match this build.\",\n    };\n  }\n  if (verified.captured.includes(version)) return null;\n\n  const below = verified.min != null && compareSemver(version, verified.min) < 0;\n  const above = verified.max != null && compareSemver(version, verified.max) > 0;\n  if (!below && !above && verified.max != null) return null;\n  if (!below && verified.max == null && !isNewerThanAllCaptured(version, verified.captured)) {\n    return null;\n  }\n\n  return {\n    code: \"version_unverified\",\n    message:\n      `Installed version ${version} is outside the range these adapters were verified against ` +\n      `(captured: ${verified.captured.join(\", \")}). It will still run; parsing or prompt ` +\n      \"detection may differ.\",\n  };\n}\n\nfunction isNewerThanAllCaptured(version: string, captured: string[]): boolean {\n  return captured.every((c) => compareSemver(version, c) > 0);\n}\n\n/**\n * Compare two semver-ish strings. Prerelease suffixes sort BELOW the same\n * release (0.140.0-alpha.19 < 0.140.0), matching semver, so a prerelease we\n * captured does not read as newer than the release it precedes.\n */\nexport function compareSemver(a: string, b: string): number {\n  const parse = (v: string) => {\n    const [core, pre] = v.split(\"-\", 2);\n    const nums = core.split(\".\").map((n) => Number.parseInt(n, 10) || 0);\n    return { nums, pre: pre ?? null };\n  };\n  const pa = parse(a);\n  const pb = parse(b);\n  for (let i = 0; i < 3; i++) {\n    const d = (pa.nums[i] ?? 0) - (pb.nums[i] ?? 0);\n    if (d !== 0) return d < 0 ? -1 : 1;\n  }\n  if (pa.pre === pb.pre) return 0;\n  if (pa.pre === null) return 1; // release > prerelease\n  if (pb.pre === null) return -1;\n  return pa.pre < pb.pre ? -1 : 1;\n}\n\n/**\n * Resolve health for one provider. `locateExe` is injected so tests can drive\n * detection without depending on what happens to be installed on the machine;\n * it defaults to the same `locateProviderExe` the session-start pre-flight\n * uses. Sharing that one entry point is load-bearing rather than tidy: it\n * clears the memoized resolution on a miss, so a health check and a start\n * attempt cannot reach opposite conclusions about the same machine — which is\n * what happened when this called `locateExecutable(resolveExe())` directly and\n * left a stale absolute path (the normal case under launchd) in place.\n */\nexport async function providerHealth(\n  name: ProviderName,\n  locateExe: () => string | null = () => locateProviderExe(name),\n  detect: (exe: string) => Promise<string | null> = runVersion,\n): Promise<ProviderHealth> {\n  const verifiedAgainst = VERIFIED_AGAINST[name];\n  const capabilities = capabilitiesFor(name);\n\n  let exe: string | null = null;\n  try {\n    // Located, not merely resolved: neither resolver can fail — each falls back\n    // to the bare command name — so this used to be gated on a throw that never\n    // happens, and `available` was true for a CLI not on the machine at all.\n    // Mobile greys a provider out on `available === false`, so the button\n    // stayed enabled and the failure only surfaced as a session that died\n    // milliseconds after starting.\n    exe = locateExe();\n  } catch {\n    exe = null;\n  }\n  if (exe === null) {\n    return {\n      name,\n      available: false,\n      version: null,\n      verifiedAgainst,\n      capabilities,\n      warnings: [\n        {\n          code: \"provider_not_found\",\n          message: `${name} could not be located. Sessions for this provider cannot start.`,\n        },\n      ],\n    };\n  }\n\n  // A version we cannot read does not prove the CLI is missing — resolveExe\n  // found it. Report it available and flag the compatibility unknown. The guard\n  // sits here rather than inside runVersion because `detect` is an injected\n  // seam: a throwing detector must degrade to \"unverified\" whichever\n  // implementation is behind it, not take GET /api/providers down with it.\n  let version: string | null = null;\n  try {\n    version = await detect(exe);\n  } catch {\n    version = null;\n  }\n  const warning = compareToVerified(version, verifiedAgainst);\n\n  return {\n    name,\n    available: true,\n    version,\n    verifiedAgainst,\n    capabilities,\n    warnings: warning ? [warning] : [],\n  };\n}\n","import {\n  CLAUDE_CODE_PROVIDER,\n  CODEX_CLI_PROVIDER,\n  CURSOR_PROVIDER,\n  canonicalizeProviderName,\n  type ProviderName,\n} from \"../../providers\";\n\n/**\n * Provider capability declarations (C2).\n * See docs/architecture/2026-07-24-provider-compatibility.md.\n *\n * Every field here is a branch that ALREADY exists somewhere in the codebase —\n * this promotes it from an implied code path to queryable data. The point is\n * that a client can ask what a provider supports instead of discovering it by\n * attempting an action and getting a 501 or a silently wrong result.\n */\nexport interface ProviderCapabilities {\n  /**\n   * How a fresh session gets its id.\n   * `explicit`   — we generate it and pass it in (Claude: `--session-id <uuid>`).\n   * `late-bound` — the CLI creates its own and we discover it afterwards\n   *                (Codex: no `--session-id` equivalent, so the rollout id is\n   *                found by watching the sessions dir after spawn).\n   */\n  freshSessionId: \"explicit\" | \"late-bound\";\n  /** Whether the CLI can replay a prior transcript from an id. */\n  resume: \"native\" | \"unsupported\";\n  /**\n   * How a system prompt reaches the CLI.\n   * `flag`       — a dedicated flag (Claude: `--system-prompt`).\n   * `positional` — passed as the opening turn (Codex has no flag).\n   */\n  systemPrompt: \"flag\" | \"positional\" | \"unsupported\";\n  /** We can detect and parse structured question menus from the TUI. */\n  structuredQuestions: boolean;\n  /** We can detect permission/trust gates and answer them programmatically. */\n  permissionGates: boolean;\n  /**\n   * We can send input to a live session. False means read-only observation —\n   * the honest state for a provider whose input path we do not understand.\n   */\n  liveControl: boolean;\n}\n\n/**\n * Provider versions an adapter's parsing and detection were captured against.\n *\n * `captured` lists the versions we hold fixtures for. `min`/`max` bound the\n * range we claim to support. A provider outside that range still runs — it just\n * reports a compatibility warning rather than pretending to be verified.\n */\nexport interface VerifiedAgainst {\n  min?: string;\n  max?: string;\n  captured: string[];\n}\n\n/**\n * Outcome of normalizing one native-history line.\n *\n * The `ignored` / `unknown` split is the reason this type exists. Today every\n * non-chat line returns null (src/utils/codexConversationLine.ts), so \"a\n * session_meta header we deliberately skip\" and \"a shape this adapter has never\n * seen\" are indistinguishable — and a provider schema change therefore renders\n * an empty conversation with no error at all.\n */\nexport type NormalizeResult =\n  /** Recognized chat content, normalized to the client-facing shape. */\n  | { kind: \"message\"; line: string }\n  /** Recognized, but deliberately not rendered (headers, dupes, injected context). */\n  | { kind: \"ignored\"; reason: string }\n  /** NOT recognized. Counted and surfaced as a compatibility signal. */\n  | { kind: \"unknown\"; raw: string; reason: string };\n\n/**\n * The descriptive half of a provider integration. `SessionRunner` (types.ts) is\n * the behavioural half — how to spawn and drive the CLI. This is what the\n * integration claims about itself, so adding a provider means implementing a\n * declared surface rather than copying a runner and hoping.\n */\nexport interface ProviderAdapter {\n  name: ProviderName;\n  capabilities: ProviderCapabilities;\n  verifiedAgainst: VerifiedAgainst;\n  /** Installed provider version, or null when it cannot be determined. */\n  detectVersion(): Promise<string | null>;\n  /** Classify one raw native-history line. Never silently discards. */\n  normalizeLine(line: string): NormalizeResult;\n}\n\n// ─── Declared capabilities ────────────────────────────────────────────\n//\n// Each value below is sourced from existing behaviour, not aspiration:\n//   Claude  — `--session-id` (pty-manager.ts), `--resume`, `--system-prompt`,\n//             OSC-777 gates + \"Enter to select\" menus (services/questions/*).\n//   Codex   — no fresh-session id (codex-pty-runner.ts: \"start() always means\n//             resume\"), `codex resume <id>`, prompt passed positionally, and\n//             trust/hooks gates detected by regex. Codex has no equivalent of\n//             Claude's AskUserQuestion menu that we parse, hence\n//             structuredQuestions: false.\n\nexport const CLAUDE_CODE_CAPABILITIES: ProviderCapabilities = {\n  freshSessionId: \"explicit\",\n  resume: \"native\",\n  systemPrompt: \"flag\",\n  structuredQuestions: true,\n  permissionGates: true,\n  liveControl: true,\n};\n\nexport const CODEX_CLI_CAPABILITIES: ProviderCapabilities = {\n  freshSessionId: \"late-bound\",\n  resume: \"native\",\n  systemPrompt: \"positional\",\n  structuredQuestions: false,\n  permissionGates: true,\n  liveControl: true,\n};\n\n// Cursor CLI (`agent`): `--resume=<chatId>` and a positional opening prompt are\n// documented. Fresh chats mint their own id (no `--session-id`). We do not yet\n// scrape its TUI for questions or permission cards, so those stay false.\nexport const CURSOR_CLI_CAPABILITIES: ProviderCapabilities = {\n  freshSessionId: \"late-bound\",\n  resume: \"native\",\n  systemPrompt: \"positional\",\n  structuredQuestions: false,\n  permissionGates: false,\n  liveControl: true,\n};\n\n/**\n * Capabilities for a provider we do not recognize.\n *\n * This is the generic-terminal fallback: stream bytes, accept input, and claim\n * no semantic understanding. It exists because the current behaviour is worse —\n * `coerceProviderForRunner` (providers.ts) silently maps an unknown provider to\n * claude-code, so an unrecognized CLI gets driven with Claude's argv, Claude's\n * markers, and Claude's env scrubbing. Admitting we don't know beats asserting\n * the wrong thing.\n */\nexport const GENERIC_TERMINAL_CAPABILITIES: ProviderCapabilities = {\n  freshSessionId: \"late-bound\",\n  resume: \"unsupported\",\n  systemPrompt: \"unsupported\",\n  structuredQuestions: false,\n  permissionGates: false,\n  liveControl: true,\n};\n\nexport function capabilitiesFor(provider: ProviderName): ProviderCapabilities {\n  switch (canonicalizeProviderName(provider) ?? provider) {\n    case CLAUDE_CODE_PROVIDER:\n      return CLAUDE_CODE_CAPABILITIES;\n    case CODEX_CLI_PROVIDER:\n      return CODEX_CLI_CAPABILITIES;\n    case CURSOR_PROVIDER:\n      return CURSOR_CLI_CAPABILITIES;\n    default:\n      return GENERIC_TERMINAL_CAPABILITIES;\n  }\n}\n","import { Hono } from \"hono\";\nimport type { AppEnv } from \"../app\";\nimport type { ApiDeps } from \"../types/api-deps\";\n\nconst ALREADY_HANDLED = 597;\nconst alreadyHandled = () => new Response(null, { status: ALREADY_HANDLED });\n\nexport const createScannerRoutes = (deps: ApiDeps) => {\n  const app = new Hono<AppEnv>();\n\n  app.get(\"/api/search\", async (c) => {\n    const url = new URL(c.req.url);\n    await deps.handleSearch(url, c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  return app;\n};\n","import { Hono } from \"hono\";\nimport type { AppEnv } from \"../app\";\nimport type { ApiDeps } from \"../types/api-deps\";\n\n// Sentinel status used to signal that the handler already wrote to the Node\n// ServerResponse directly. writeHonoResponse in server.ts skips piping when\n// it sees this status.\nexport const ALREADY_HANDLED = 597;\nconst alreadyHandled = () => new Response(null, { status: ALREADY_HANDLED });\n\nexport const createSessionRoutes = (deps: ApiDeps) => {\n  const app = new Hono<AppEnv>();\n\n  app.use(\"/:id/*\", async (c, next) => {\n    if (await deps.isExcludedSubagent?.(c.req.param(\"id\") ?? \"\")) {\n      return c.json({ error: \"Session not found\" }, 404);\n    }\n    await next();\n  });\n  app.use(\"/:id\", async (c, next) => {\n    const id = c.req.param(\"id\") ?? \"\";\n    if (\n      ![\"count\", \"recents\", \"names\", \"resume\", \"start\"].includes(id) &&\n      (await deps.isExcludedSubagent?.(id))\n    ) {\n      return c.json({ error: \"Session not found\" }, 404);\n    }\n    await next();\n  });\n\n  app.get(\"/count\", (c) => {\n    deps.handleSessionsCount(c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  app.get(\"/recents\", (c) => {\n    const url = new URL(c.req.url);\n    deps.handleGetRecentSessions(url, c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  app.get(\"/names\", (c) => {\n    deps.handleGetSessionNames(c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  app.post(\"/resume\", async (c) => {\n    await deps.handleResume(c.env.incoming, c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  app.post(\"/start\", async (c) => {\n    await deps.handleStartSession(c.env.incoming, c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  app.get(\"/\", async (c) => {\n    const url = new URL(c.req.url);\n    await deps.handleListSessions(url, c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  app.get(\"/:id/output\", (c) => {\n    deps.handleGetOutput(c.req.param(\"id\"), c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  app.post(\"/:id/input\", async (c) => {\n    await deps.handleSendInput(c.req.param(\"id\"), c.env.incoming, c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  app.post(\"/:id/raw-key\", async (c) => {\n    await deps.handleRawKey(c.req.param(\"id\"), c.env.incoming, c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  app.post(\"/:id/answer\", async (c) => {\n    await deps.handleSendAnswer(c.req.param(\"id\"), c.env.incoming, c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  app.post(\"/:id/prompt/answer\", async (c) => {\n    await deps.handlePromptAnswer(c.req.param(\"id\"), c.env.incoming, c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  app.post(\"/:id/permission/answer\", async (c) => {\n    await deps.handlePermissionAnswer(c.req.param(\"id\"), c.env.incoming, c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  app.post(\"/:id/files\", async (c) => {\n    await deps.handleUploadFile(c.req.param(\"id\"), c.env.incoming, c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  app.post(\"/:id/cancel\", (c) => {\n    deps.handleCancel(c.req.param(\"id\"), c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  app.patch(\"/:id/name\", async (c) => {\n    await deps.handleSetSessionName(c.req.param(\"id\"), c.env.incoming, c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  app.patch(\"/:id/model\", async (c) => {\n    await deps.handleSetSessionModel(c.req.param(\"id\"), c.env.incoming, c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  app.patch(\"/:id/effort\", async (c) => {\n    await deps.handleSetSessionEffort(c.req.param(\"id\"), c.env.incoming, c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  app.post(\"/:id/adopt\", async (c) => {\n    await deps.handleAdopt(c.req.param(\"id\"), c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  app.post(\"/:id/fork\", async (c) => {\n    await deps.handleFork(c.req.param(\"id\"), c.env.incoming, c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  app.post(\"/:id/stop\", async (c) => {\n    const when = c.req.query(\"when\") === \"idle\" ? \"idle\" : \"now\";\n    const ignoreWatchers = c.req.query(\"ignoreWatchers\") === \"true\";\n    const deleteConversation = c.req.query(\"delete\") === \"true\";\n    await deps.handleStopSession(c.req.param(\"id\"), c.env.outgoing, {\n      when,\n      ignoreWatchers,\n      delete: deleteConversation,\n    });\n    return alreadyHandled();\n  });\n\n  app.post(\"/:id/kill\", async (c) => {\n    const deleteConversation = c.req.query(\"delete\") === \"true\";\n    await deps.handleKillSession(c.req.param(\"id\"), c.env.outgoing, { delete: deleteConversation });\n    return alreadyHandled();\n  });\n\n  app.get(\"/:id\", async (c) => {\n    await deps.handleGetSession(c.req.param(\"id\"), c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  return app;\n};\n","// src/helper/websocket/index.ts\nvar WSContext = class {\n  #init;\n  constructor(init) {\n    this.#init = init;\n    this.raw = init.raw;\n    this.url = init.url ? new URL(init.url) : null;\n    this.protocol = init.protocol ?? null;\n  }\n  send(source, options) {\n    this.#init.send(source, options ?? {});\n  }\n  raw;\n  binaryType = \"arraybuffer\";\n  get readyState() {\n    return this.#init.readyState;\n  }\n  url;\n  protocol;\n  close(code, reason) {\n    this.#init.close(code, reason);\n  }\n};\nvar createWSMessageEvent = (source) => {\n  return new MessageEvent(\"message\", {\n    data: source\n  });\n};\nvar defineWebSocketHelper = (handler) => {\n  return ((...args) => {\n    if (typeof args[0] === \"function\") {\n      const [createEvents, options] = args;\n      return async function upgradeWebSocket(c, next) {\n        const events = await createEvents(c);\n        const result = await handler(c, events, options);\n        if (result) {\n          return result;\n        }\n        await next();\n      };\n    } else {\n      const [c, events, options] = args;\n      return (async () => {\n        const upgraded = await handler(c, events, options);\n        if (!upgraded) {\n          throw new Error(\"Failed to upgrade WebSocket\");\n        }\n        return upgraded;\n      })();\n    }\n  });\n};\nexport {\n  WSContext,\n  createWSMessageEvent,\n  defineWebSocketHelper\n};\n","interface CloseEventInit extends EventInit {\n  code?: number\n  reason?: string\n  wasClean?: boolean\n}\n\n/**\n * @link https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent\n */\nexport const CloseEvent: typeof globalThis.CloseEvent =\n  globalThis.CloseEvent ??\n  class extends Event {\n    #eventInitDict\n\n    constructor(type: string, eventInitDict: CloseEventInit = {}) {\n      super(type, eventInitDict)\n      this.#eventInitDict = eventInitDict\n    }\n\n    get wasClean(): boolean {\n      return this.#eventInitDict.wasClean ?? false\n    }\n\n    get code(): number {\n      return this.#eventInitDict.code ?? 0\n    }\n\n    get reason(): string {\n      return this.#eventInitDict.reason ?? ''\n    }\n  }\n","import type { Hono } from 'hono'\nimport { defineWebSocketHelper } from 'hono/ws'\nimport type { UpgradeWebSocket, WSContext } from 'hono/ws'\nimport type { WebSocket } from 'ws'\nimport { WebSocketServer } from 'ws'\nimport { STATUS_CODES } from 'node:http'\nimport type { IncomingMessage, Server } from 'node:http'\nimport type { Http2SecureServer, Http2Server } from 'node:http2'\nimport type { Duplex } from 'node:stream'\nimport { CloseEvent } from './events'\n\nexport interface NodeWebSocket {\n  upgradeWebSocket: UpgradeWebSocket<\n    WebSocket,\n    {\n      onError: (err: unknown) => void\n    }\n  >\n  injectWebSocket(server: Server | Http2Server | Http2SecureServer): void\n  wss: WebSocketServer\n}\nexport interface NodeWebSocketInit {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  app: Hono<any, any, any>\n  baseUrl?: string | URL\n}\n\nconst generateConnectionSymbol = () => Symbol('connection')\n\n/** @example `c.env[CONNECTION_SYMBOL_KEY]` */\nconst CONNECTION_SYMBOL_KEY: unique symbol = Symbol('CONNECTION_SYMBOL_KEY')\n\n/**\n * Create WebSockets for Node.js\n * @param init Options\n * @returns NodeWebSocket\n */\nexport const createNodeWebSocket = (init: NodeWebSocketInit): NodeWebSocket => {\n  const wss = new WebSocketServer({ noServer: true })\n  const waiterMap = new Map<\n    IncomingMessage,\n    { resolve: (ws: WebSocket) => void; connectionSymbol: symbol }\n  >()\n\n  wss.on('connection', (ws, request) => {\n    const waiter = waiterMap.get(request)\n    if (waiter) {\n      waiter.resolve(ws)\n      waiterMap.delete(request)\n    }\n  })\n\n  const nodeUpgradeWebSocket = (request: IncomingMessage, connectionSymbol: symbol) => {\n    return new Promise<WebSocket>((resolve) => {\n      waiterMap.set(request, { resolve, connectionSymbol })\n    })\n  }\n\n  return {\n    wss,\n    injectWebSocket(server) {\n      server.on('upgrade', async (request, socket: Duplex, head) => {\n        const url = new URL(request.url ?? '/', init.baseUrl ?? 'http://localhost')\n        const headers = new Headers()\n        for (const key in request.headers) {\n          const value = request.headers[key]\n          if (!value) {\n            continue\n          }\n          headers.append(key, Array.isArray(value) ? value[0] : value)\n        }\n\n        const env: {\n          incoming: IncomingMessage\n          outgoing: undefined\n          [CONNECTION_SYMBOL_KEY]?: symbol\n        } = {\n          incoming: request,\n          outgoing: undefined,\n        }\n        const response = await init.app.request(url, { headers: headers }, env)\n        const waiter = waiterMap.get(request)\n\n        if (!waiter || waiter.connectionSymbol !== env[CONNECTION_SYMBOL_KEY]) {\n          socket.end(\n            `HTTP/1.1 ${response.status.toString()} ${STATUS_CODES[response.status] ?? ''}\\r\\n` +\n              'Connection: close\\r\\n' +\n              'Content-Length: 0\\r\\n' +\n              '\\r\\n'\n          )\n          waiterMap.delete(request)\n          return\n        }\n\n        wss.handleUpgrade(request, socket, head, (ws) => {\n          wss.emit('connection', ws, request)\n        })\n      })\n    },\n    upgradeWebSocket: defineWebSocketHelper(async (c, events, options) => {\n      if (c.req.header('upgrade')?.toLowerCase() !== 'websocket') {\n        // Not websocket\n        return\n      }\n\n      const connectionSymbol = generateConnectionSymbol()\n      c.env[CONNECTION_SYMBOL_KEY] = connectionSymbol\n      ;(async () => {\n        const ws = await nodeUpgradeWebSocket(c.env.incoming, connectionSymbol)\n\n        // buffer messages to handle messages received before the events are set up\n        const messagesReceivedInStarting: [data: WebSocket.RawData, isBinary: boolean][] = []\n        const bufferMessage = (data: WebSocket.RawData, isBinary: boolean) => {\n          messagesReceivedInStarting.push([data, isBinary])\n        }\n        ws.on('message', bufferMessage)\n\n        const ctx: WSContext<WebSocket> = {\n          binaryType: 'arraybuffer',\n          close(code, reason) {\n            ws.close(code, reason)\n          },\n          protocol: ws.protocol,\n          raw: ws,\n          get readyState() {\n            return ws.readyState\n          },\n          send(source, opts) {\n            ws.send(source, {\n              compress: opts?.compress,\n            })\n          },\n          url: new URL(c.req.url),\n        }\n        try {\n          events?.onOpen?.(new Event('open'), ctx)\n        } catch (e) {\n          ;(options?.onError ?? console.error)(e)\n        }\n\n        const handleMessage = (data: WebSocket.RawData, isBinary: boolean) => {\n          const datas = Array.isArray(data) ? data : [data]\n          for (const data of datas) {\n            try {\n              events?.onMessage?.(\n                new MessageEvent('message', {\n                  data: isBinary\n                    ? data instanceof ArrayBuffer\n                      ? data\n                      : data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength)\n                    : data.toString('utf-8'),\n                }),\n                ctx\n              )\n            } catch (e) {\n              ;(options?.onError ?? console.error)(e)\n            }\n          }\n        }\n        ws.off('message', bufferMessage)\n        for (const message of messagesReceivedInStarting) {\n          handleMessage(...message)\n        }\n\n        ws.on('message', (data, isBinary) => {\n          handleMessage(data, isBinary)\n        })\n        ws.on('close', (code, reason) => {\n          try {\n            events?.onClose?.(new CloseEvent('close', { code, reason: reason.toString() }), ctx)\n          } catch (e) {\n            ;(options?.onError ?? console.error)(e)\n          }\n        })\n        ws.on('error', (error) => {\n          try {\n            events?.onError?.(\n              new ErrorEvent('error', {\n                error: error,\n              }),\n              ctx\n            )\n          } catch (e) {\n            ;(options?.onError ?? console.error)(e)\n          }\n        })\n      })()\n\n      return new Response()\n    }),\n  }\n}\n","import { createNodeWebSocket } from \"@hono/node-ws\";\nimport type { Hono as HonoApp } from \"hono\";\nimport { Hono } from \"hono\";\nimport type { UpgradeWebSocket } from \"hono/ws\";\nimport type { IncomingMessage, Server } from \"http\";\nimport type { WebSocket } from \"ws\";\nimport { contextRegistry, E2EE_WS_SUBPROTOCOL, refuseUnsealedIfPinned } from \"../../e2ee/context\";\nimport { getLogger } from \"../../logger\";\nimport type { AppEnv } from \"../app\";\nimport type { ApiDeps } from \"../types/api-deps\";\n\nconst log = getLogger(\"ws\");\n\nexport const createWsRoutes = (deps: ApiDeps, upgradeWebSocket: UpgradeWebSocket<WebSocket>) => {\n  const app = new Hono<AppEnv>();\n\n  app.get(\n    \"/ws\",\n    // The downgrade refusal runs here, BEFORE `upgradeWebSocket` — once that\n    // middleware has seen `Upgrade: websocket` it answers 101 unconditionally,\n    // and a socket promoted and then closed is not the same answer as a 426 the\n    // client can act on.\n    //\n    // The ticket itself was spent one layer up: `authMiddleware` consumes it\n    // and sets both the principal and the context, because a ticketed upgrade\n    // authenticates BY the ticket and carries no `Authorization` (§13). By the\n    // time this runs, `e2eeContext` is either a live context or nothing.\n    async (c, next) => {\n      // W1a's guard, called and not re-implemented — two copies of a downgrade\n      // rule is one copy that can be forgotten. A pinned device that turns up\n      // with a bearer or `?key=` and no ticket gets 426, never a plaintext\n      // socket.\n      //\n      // **Its stated limit applies here and is not this PR's to close.** The\n      // pin is per DEVICE, so a pinned phone presenting the SHARED api key\n      // resolves to the `legacy` principal with no device row, and the pin\n      // cannot bite. That is the stage-3 shared-key problem.\n      const refusal = refuseUnsealedIfPinned({\n        principal: c.get(\"principal\"),\n        devicesRepo: deps.devicesRepo(),\n        context: c.get(\"e2eeContext\"),\n      });\n      if (refusal) {\n        log.warn(\"[e2ee.upgrade_refused] pinned device presented no sealed context\", {\n          event: \"e2ee.upgrade_refused\",\n        });\n        return c.json(refusal.body, refusal.status);\n      }\n      await next();\n    },\n    // The principal is read here, at the upgrade, and captured for the life of\n    // the socket. authMiddleware sets it because /ws is classified\n    // `history:read`, but it only ever reaches the HTTP request — without\n    // capturing it the socket has no principal at all, so every frame after\n    // the upgrade is unauthorized-by-omission.\n    upgradeWebSocket((c) => {\n      const principal = c.get(\"principal\") ?? null;\n      const context = c.get(\"e2eeContext\");\n      let openWs: WebSocket | null = null;\n      return {\n        onOpen(_evt, ws) {\n          const raw = ws.raw;\n          if (!raw) {\n            // **No orphan without a deadline clock.** The context was attached\n            // by `authMiddleware` and its ticket is spent, but without a raw\n            // socket `addClient` never runs — so nothing arms the 10 s\n            // first-frame deadline, and the one mechanism that collects an\n            // unproven context does not exist for this one. It would sit for\n            // its full lifetime. Every other path that abandons a consumed\n            // context destroys it; this one was the exception.\n            if (context) contextRegistry().destroy(context.ctxId);\n            return;\n          }\n          openWs = raw;\n          deps.handleWsOpen(raw, context);\n        },\n        onMessage(evt, _ws) {\n          if (openWs) deps.handleWsMessage(openWs, evt.data, principal);\n        },\n        onClose(_evt, _ws) {\n          if (openWs) deps.handleWsClose(openWs);\n        },\n      };\n    }),\n  );\n\n  return app;\n};\n\n/**\n * Ceiling on ONE client→server frame, enforced BEFORE the frame is allocated\n * (NONCE-DESIGN §10).\n *\n * Everything a client sends is a control message — `register`,\n * `subscribe_session`, `unsubscribe_session`, `hold_session` — none of which\n * reaches a kilobyte, so this is generous by three orders of magnitude and\n * still small enough that a socket without keys cannot make the process buffer\n * anything worth buffering.\n *\n * The server→client direction is bounded by the CLIENT, which is the only side\n * that can refuse a frame before allocating it; `terminal_replay` is the large\n * one and it is capped upstream by `REPLAY_MAX_LINES`.\n */\nexport const WS_MAX_CLIENT_FRAME_BYTES = 64 * 1024;\n\n/**\n * Strip inherited properties before @hono/node-ws copies raw Node headers with\n * `for...in`. Only bytes Node parsed from the request may reach authentication.\n */\nfunction keepOwnUpgradeHeaders(request: IncomingMessage): void {\n  const headers = Object.create(null) as typeof request.headers;\n  for (const key of Object.keys(request.headers)) headers[key] = request.headers[key];\n  request.headers = headers;\n}\n\n/**\n * Mount `/ws` on an app that is already built, and bind the frame ceiling.\n *\n * **This exists so the bound is wired in exactly one place.** §10 states the\n * gap plainly: `@hono/node-ws` constructs its `WebSocketServer` with\n * `{ noServer: true }` and nothing else, so `ws`'s 100 MiB `maxPayload` default\n * applies and a frame is fully assembled before any record-layer check runs —\n * anyone holding a socket without keys, a ticket thief or a legacy `?key=`\n * client, could push 100 MiB. §10 offers two ways out: build our own server\n * with a bound, or accept the ceiling and reap silent sockets.\n *\n * This is the first, without forking the upgrade path. `@hono/node-ws` RETURNS\n * the server it made, and `ws` reads `this.options.maxPayload` per upgrade in\n * `completeUpgrade` rather than at construction — so lowering it here bounds\n * every socket from the next one onwards. That is the whole \"construct your own\n * server\" outcome in one assignment, with no copy of the upgrade handling to\n * keep in sync. It is receiver-only: `maxPayload` bounds what `ws` will ACCEPT\n * and never what it will send, which is exactly the per-direction split §10\n * asks for.\n *\n * The cost is reaching into a dependency's `options`. That is why this is one\n * function called by both `server.ts` and the sealing tests rather than two\n * copies: a test that stood the wiring up itself would be asserting on its own\n * copy of it.\n */\nexport function mountWebSocket(\n  app: HonoApp<AppEnv>,\n  httpServer: Server,\n  deps: ApiDeps,\n): { wss: ReturnType<typeof createNodeWebSocket>[\"wss\"] } {\n  const { wss, injectWebSocket, upgradeWebSocket } = createNodeWebSocket({ app });\n  wss.options.maxPayload = WS_MAX_CLIENT_FRAME_BYTES;\n  // Same per-upgrade read, same reach: `ws` selects the FIRST offered\n  // subprotocol unless `handleProtocols` is set, and a browser offering\n  // `threadbase-e2ee-v1, tb-ticket.<ticket>` in the other order would get its\n  // ticket echoed in the 101. Only the one protocol this server speaks can be\n  // selected; `authMiddleware` refuses any offer of it that no ticket\n  // authenticated, so selecting it is never a claim about a plaintext socket.\n  wss.options.handleProtocols = (offered) =>\n    offered.has(E2EE_WS_SUBPROTOCOL) ? E2EE_WS_SUBPROTOCOL : false;\n  app.route(\"/\", createWsRoutes(deps, upgradeWebSocket));\n  httpServer.prependListener(\"upgrade\", keepOwnUpgradeHeaders);\n  injectWebSocket(httpServer);\n  return { wss };\n}\n","import {\n  applyIncludeFilter,\n  applyPagination,\n  applyProjectFilter,\n  applySort,\n  type Conversation,\n  type ConversationMeta,\n  type SearchMatch,\n  type SortOrder,\n  search,\n} from \"@threadbase-sh/scanner\";\nimport { createReadStream, existsSync, readdirSync } from \"fs\";\nimport type { IncomingMessage, ServerResponse } from \"http\";\nimport { basename, join } from \"path\";\nimport { createInterface } from \"readline\";\nimport { ConversationCache } from \"../../conversation-cache\";\nimport type { LiveSessionManager } from \"../../live-session-manager\";\nimport type { Logger } from \"../../logger\";\nimport {\n  CLAUDE_CODE_PROVIDER,\n  CODEX_CLI_PROVIDER,\n  canonicalizeProviderName,\n  coerceProviderForRunner,\n  isProviderResumable,\n} from \"../../providers\";\nimport type { ScannerManager, ScanProfile } from \"../../scanner-manager\";\nimport { classifyConversationFile } from \"../../services/conversations/classification\";\nimport {\n  findSearchTarget,\n  type SearchableMessage,\n} from \"../../services/conversations/findSearchTarget\";\nimport {\n  type InheritedHistory,\n  resolveInheritedHistory,\n} from \"../../services/conversations/inheritedHistory\";\nimport { deriveProjectChatTitle } from \"../../services/projectChats/deriveProjectChatTitle\";\nimport {\n  applyFilters,\n  type ParsedSearchQuery,\n  paginate,\n  parseSearchQuery,\n  SearchQueryError,\n} from \"../../services/search/searchQuery\";\nimport type { SessionStore } from \"../../session-store\";\nimport { TRANSCRIPT_WATCH_DEADLINE_MS } from \"../../session-watchers\";\nimport type { ManagedSession, ServerWarmupState } from \"../../types\";\nimport { toolResultText } from \"../../utils/claudeShapedLine\";\nimport { isLeadingInjectedContext } from \"../../utils/codexConversationLine\";\nimport { computeConversationEtag } from \"../../utils/conversationEtag\";\nimport { createScanProgressThrottle } from \"../../utils/scanProgressThrottle\";\nimport type { WSHub } from \"../../ws-hub\";\nimport {\n  boolQueryParam,\n  classifyResumability,\n  includeQueryParam,\n  intParam,\n  json,\n  readBody,\n} from \"./http-helpers\";\n\n// Search filters are applied after the scanner returns, so we ask it for more\n// than one page. The multiplier bounds the common case; SEARCH_MAX_SCAN caps a\n// broad query so it cannot pull an unbounded result set into memory.\nconst SEARCH_OVERFETCH = 4;\nconst SEARCH_MAX_SCAN = 1000;\n\n// Ceiling on the `max_bytes` page budget. The number a client asks for is its\n// own business — this only stops a typo'd extra zero from turning into a\n// multi-hundred-MB response. Above the largest conversation observed locally\n// (22.8 MB), so it clamps mistakes rather than legitimate requests.\nconst MAX_BYTES_CEILING = 32 * 1024 * 1024;\n\ninterface SnakeConversationMeta {\n  profile_id?: string;\n  project_name?: string;\n  session_name?: string;\n  project_path?: string;\n  file_path?: string;\n  last_updated_at?: string;\n  message_count?: number;\n}\n\n/**\n * The conversation detail `meta` predates the camelCase wire and names the same\n * concepts differently from `SessionResponse` (`profile_id` vs `account`,\n * `last_updated_at` vs `lastActivityAt`, ...). Released mobile builds read the\n * snake_case keys, so those stay; the camelCase names ride alongside so a\n * client can read one field set from either endpoint.\n */\nfunction withCamelMetaAliases<T extends SnakeConversationMeta>(meta: T) {\n  return {\n    ...meta,\n    account: meta.profile_id,\n    projectName: meta.project_name,\n    sessionName: meta.session_name,\n    projectPath: meta.project_path,\n    filePath: meta.file_path,\n    lastActivityAt: meta.last_updated_at,\n    messageCount: meta.message_count,\n  };\n}\n\n/**\n * Everything ConversationHandlers reads from the server. Collaborators\n * constructed once in the server constructor are passed by reference; anything\n * bound later (the cache opens during listen() and is rebound by the integrity\n * monitor's reset-and-rescan) or swapped by tests (`log`) is a thunk, for the\n * same reason ApiDeps passes `cache: () => ConversationCache | null`.\n *\n * The warm-up gate, the cache-write tracker and the three conversation-id\n * resolvers stay late-bound calls back into the server rather than moved code:\n * they read state (`activeWarmups`, `inFlightCacheWrites`, `sessionFileMap`)\n * that spans well beyond conversations.\n */\nexport type ConversationHandlersDeps = {\n  includeSubagentSessions?: () => boolean;\n  scannerManager: ScannerManager;\n  sessionStore: SessionStore;\n  ptyManager: LiveSessionManager;\n  wsHub: WSHub;\n  scanProfiles: ScanProfile[] | undefined;\n  cache: () => ConversationCache | null;\n  log: () => Logger;\n  rejectIfWarmingUp: (res: ServerResponse) => boolean;\n  withWarmup: <T>(state: ServerWarmupState, operation: () => Promise<T>) => Promise<T>;\n  trackCacheWrite: (task: Promise<unknown>) => void;\n  resolveConversationLookupId: (uuid: string) => string;\n  findLiveSessionFilePath: (uuid: string) => string | null;\n  isBoundConversationLive: (boundId: string) => boolean;\n};\n\n/**\n * The conversation read surface: listing, counting, project summaries, the\n * single-conversation detail fetch (pagination + ETag + stale-while-revalidate)\n * and search — plus the JSONL/cwd resolvers the resume and adopt paths share.\n *\n * Extracted from StreamerServer so conversation work stops editing the server\n * file (see docs/plans/2026-07-12-server-ts-split.md, PR 4). State stays on the\n * server: this class only reads it through `deps`.\n */\nexport class ConversationHandlers {\n  private publicScannerMeta(\n    meta: ConversationMeta,\n    include?: \"all\" | \"conversations\" | \"subagents\",\n  ): ConversationMeta | null {\n    const id = this.cache?.getIdByFilePath(meta.filePath);\n    const row = id ? this.cache?.getMetaById(id) : null;\n    if (row) return this.cache?.isVisible(row.id) ? { ...meta, sessionId: row.id } : null;\n    try {\n      const classification = classifyConversationFile(meta.filePath, meta.provider);\n      const showSubagents =\n        include === \"all\" ||\n        include === \"subagents\" ||\n        (this.deps.includeSubagentSessions?.() ?? false);\n      if (!classification.hasMessages || (classification.isSubagent && !showSubagents)) return null;\n      return {\n        ...meta,\n        sessionId:\n          classification.isSubagent || classification.provider === CODEX_CLI_PROVIDER\n            ? classification.id\n            : meta.sessionId,\n      };\n    } catch {\n      return meta;\n    }\n  }\n  async isExcludedSubagent(id: string): Promise<boolean> {\n    if (this.deps.includeSubagentSessions?.() ?? this.cache?.includeSubagentSessions ?? false)\n      return false;\n    const lookupId = this.deps.resolveConversationLookupId(id);\n    if (this.sessionStore.getManaged(id)?.isSubagent) return true;\n    const meta = this.cache?.getMetaById(lookupId);\n    if (meta?.isSubagent != null) return meta.isSubagent;\n    const filePath = meta?.filePath ?? (await this.locateJsonlPath(id, lookupId));\n    if (!filePath) return false;\n    try {\n      const classification = this.cache\n        ? this.cache.reconcileClassification(filePath)\n        : classifyConversationFile(filePath, meta?.provider);\n      return classification?.isSubagent ?? false;\n    } catch {\n      return false;\n    }\n  }\n  constructor(private deps: ConversationHandlersDeps) {}\n\n  private get scannerManager(): ScannerManager {\n    return this.deps.scannerManager;\n  }\n\n  private get sessionStore(): SessionStore {\n    return this.deps.sessionStore;\n  }\n\n  private get ptyManager(): LiveSessionManager {\n    return this.deps.ptyManager;\n  }\n\n  private get wsHub(): WSHub {\n    return this.deps.wsHub;\n  }\n\n  private get scanProfiles(): ScanProfile[] | undefined {\n    return this.deps.scanProfiles;\n  }\n\n  private get cache(): ConversationCache | null {\n    return this.deps.cache();\n  }\n\n  private get log(): Logger {\n    return this.deps.log();\n  }\n\n  private listFilters(url: URL) {\n    return {\n      project: url.searchParams.get(\"project\") ?? undefined,\n      provider: url.searchParams.get(\"provider\") ?? undefined,\n      include: includeQueryParam(url),\n      isImportedFromClaude: boolQueryParam(url, \"isImportedFromClaude\"),\n      isImportedFromCodex: boolQueryParam(url, \"isImportedFromCodex\"),\n      isImportedFromCursor: boolQueryParam(url, \"isImportedFromCursor\"),\n    };\n  }\n\n  private importFlags(c: {\n    isImportedFromClaude?: boolean;\n    isImportedFromCodex?: boolean;\n    isImportedFromCursor?: boolean;\n  }) {\n    return {\n      isImportedFromClaude: c.isImportedFromClaude === true,\n      isImportedFromCodex: c.isImportedFromCodex === true,\n      isImportedFromCursor: c.isImportedFromCursor === true,\n    };\n  }\n\n  private matchesImportFilters(\n    meta: ConversationMeta,\n    filters: ReturnType<ConversationHandlers[\"listFilters\"]>,\n  ): boolean {\n    if (\n      filters.isImportedFromClaude !== undefined &&\n      Boolean(meta.isImportedFromClaude) !== filters.isImportedFromClaude\n    ) {\n      return false;\n    }\n    if (\n      filters.isImportedFromCodex !== undefined &&\n      Boolean(meta.isImportedFromCodex) !== filters.isImportedFromCodex\n    ) {\n      return false;\n    }\n    if (\n      filters.isImportedFromCursor !== undefined &&\n      Boolean(meta.isImportedFromCursor) !== filters.isImportedFromCursor\n    ) {\n      return false;\n    }\n    return true;\n  }\n\n  async handleListConversations(url: URL, res: ServerResponse): Promise<void> {\n    if (this.deps.rejectIfWarmingUp(res)) return;\n\n    const limit = intParam(url, \"limit\", 50);\n    const offset = intParam(url, \"offset\", 0);\n    const sort = (url.searchParams.get(\"sort\") ?? \"recent\") as SortOrder;\n    const filters = this.listFilters(url);\n    const bustCache = url.searchParams.get(\"refresh\") === \"1\";\n\n    // Reconcile (not wipe): fullRescan bypasses the scanner dir-mtime gate, then\n    // upsert what exists and drop rows whose files are gone. Triggered by\n    // explicit ?refresh=1, directory-watcher scannerStale, or HDD freshness drift.\n    //\n    // Never block the response on a routine reconcile. A full rescan takes\n    // seconds on a large history, and active sessions trip scannerStale on\n    // every JSONL append — so awaiting here stalls the list on every write.\n    // Serve what is cached now and revalidate on disk in the background; the\n    // next poll sees the fresh data (stale-while-revalidate). Block only when\n    // there is nothing to serve (cold cache) or the caller asked for fresh data\n    // explicitly with ?refresh=1.\n    const reconcileMode = this.scannerManager.reconcileMode();\n    if (this.cache && (bustCache || reconcileMode)) {\n      const warm = this.cache.listConversations({ limit: 0, offset: 0 }).total > 0;\n      if (warm && !bustCache) {\n        this.scannerManager.startBackgroundReconcile(reconcileMode ?? \"full\");\n      } else {\n        // Cold cache or explicit refresh: await the rescan. Emit throttled\n        // scan_progress so the client renders a live progress bar during the\n        // wait instead of a frozen one; the routine background path above stays\n        // silent (no onProgress) so normal-use polls never flicker a bar.\n        const shouldEmitProgress = createScanProgressThrottle();\n        const rescan = () =>\n          this.scannerManager.reconcileFromDisk((scanned, total) => {\n            if (shouldEmitProgress(scanned, total)) {\n              this.wsHub.broadcast({ type: \"scan_progress\", scanned, total });\n            }\n          });\n        // Gate with the warm-up state only when the cache is cold: there is\n        // nothing to serve, so the client shows the one-time \"building history\"\n        // screen instead of an empty list. The gate is server-wide, so raising\n        // it for an explicit refresh on a warm cache would 503 every other gated\n        // route (e.g. /api/sessions) for the length of the rescan.\n        if (warm) await rescan();\n        else await this.deps.withWarmup(\"conversation_refresh\", rescan);\n      }\n    }\n\n    if (this.cache) {\n      const { conversations, total } = this.cache.listConversations({\n        ...filters,\n        limit,\n        offset,\n      });\n      const adapted = conversations.map((c) => ({\n        id: c.id,\n        isSubagent: c.isSubagent,\n        parentConversationId: c.parentConversationId,\n        title: deriveProjectChatTitle({\n          title: c.title,\n          projectName: c.projectName,\n          projectPath: c.projectPath,\n          id: c.id,\n        }),\n        sessionName: undefined as string | undefined,\n        filePath: c.filePath,\n        projectPath: c.projectPath,\n        branch: c.branch ?? undefined,\n        account: c.account ?? undefined,\n        preview: c.preview ?? undefined,\n        messageCount: c.messageCount,\n        lastActivity: c.lastActivity,\n        lastActivityAt: c.lastActivity,\n        firstMessage: c.firstMessage ? (JSON.parse(c.firstMessage) as unknown) : undefined,\n        lastMessage: c.lastMessage ? (JSON.parse(c.lastMessage) as unknown) : undefined,\n        model: c.model ?? undefined,\n        provider: canonicalizeProviderName(c.provider) ?? c.provider ?? CLAUDE_CODE_PROVIDER,\n        ...this.importFlags(c),\n      }));\n      json(res, 200, { conversations: adapted, hasMore: offset + limit < total, offset, total });\n      return;\n    }\n\n    const scanner = await this.scannerManager.get();\n    let metas = [...scanner.getMetadataCache().values()];\n    const include =\n      filters.include ??\n      ((this.deps.includeSubagentSessions?.() ?? false) ? \"all\" : \"conversations\");\n    metas = metas.flatMap((meta) => this.publicScannerMeta(meta, include) ?? []);\n    metas = applyIncludeFilter(metas, include);\n    if (filters.project) metas = applyProjectFilter(metas, filters.project);\n    if (filters.provider) {\n      const wanted = canonicalizeProviderName(filters.provider) ?? filters.provider;\n      metas = metas.filter(\n        (m) =>\n          (canonicalizeProviderName(m.provider) ?? m.provider ?? CLAUDE_CODE_PROVIDER) === wanted,\n      );\n    }\n    metas = metas.filter((m) => this.matchesImportFilters(m, filters));\n    metas = applySort(metas, sort);\n    const total = metas.length;\n    const page = applyPagination(metas, limit, offset);\n\n    const adapted = (page.items as ConversationMeta[]).map((c) => {\n      const id =\n        c.sessionId ||\n        c.id\n          .split(\"/\")\n          .pop()\n          ?.replace(/\\.jsonl$/, \"\") ||\n        c.id;\n      return {\n        id,\n        isSubagent: c.isSubagent,\n        parentConversationId: c.parentSessionId ?? undefined,\n        title: deriveProjectChatTitle({\n          title: c.sessionName,\n          projectName: c.projectName,\n          projectPath: c.projectPath,\n          id,\n        }),\n        sessionName: c.sessionName || undefined,\n        filePath: c.filePath,\n        projectPath: c.projectPath,\n        branch: c.gitBranch ?? undefined,\n        account: c.account,\n        preview: c.preview || undefined,\n        messageCount: c.messageCount,\n        lastActivity: c.timestamp,\n        lastActivityAt: c.timestamp,\n        firstMessage: c.firstMessage ?? undefined,\n        lastMessage: c.lastMessage ?? undefined,\n        model: c.model ?? undefined,\n        provider: canonicalizeProviderName(c.provider) ?? c.provider ?? CLAUDE_CODE_PROVIDER,\n        ...this.importFlags(c),\n      };\n    });\n    json(res, 200, { conversations: adapted, hasMore: offset + limit < total, offset, total });\n  }\n\n  async handleConversationsCount(url: URL, res: ServerResponse): Promise<void> {\n    if (this.deps.rejectIfWarmingUp(res)) return;\n\n    const filters = this.listFilters(url);\n    const bustCache = url.searchParams.get(\"refresh\") === \"1\";\n\n    // refresh=1 historically forced a full synchronous scan() to recount from\n    // disk. On a cold/empty index that scan walks every JSONL and blocks ~16s,\n    // tripping mobile's request timeout into a false \"unreachable\". Mirror the\n    // detail path's skipStaleRescan stance: serve the indexed/cached total\n    // immediately and reconcile from disk in the BACKGROUND so the count stays\n    // fast regardless of refresh.\n    if (this.cache) {\n      const { total } = this.cache.listConversations({\n        ...filters,\n        limit: 0,\n        offset: 0,\n      });\n      json(res, 200, { total });\n      if (bustCache) this.refreshCountInBackground();\n      return;\n    }\n\n    const scanner = await this.scannerManager.get(true);\n    let metas = [...scanner.getMetadataCache().values()];\n    const include =\n      filters.include ??\n      ((this.deps.includeSubagentSessions?.() ?? false) ? \"all\" : \"conversations\");\n    metas = metas.flatMap((meta) => this.publicScannerMeta(meta, include) ?? []);\n    metas = applyIncludeFilter(metas, include);\n    if (filters.project) metas = applyProjectFilter(metas, filters.project);\n    if (filters.provider) {\n      const wanted = canonicalizeProviderName(filters.provider) ?? filters.provider;\n      metas = metas.filter(\n        (m) =>\n          (canonicalizeProviderName(m.provider) ?? m.provider ?? CLAUDE_CODE_PROVIDER) === wanted,\n      );\n    }\n    metas = metas.filter((m) => this.matchesImportFilters(m, filters));\n    json(res, 200, { total: metas.length });\n  }\n\n  // Fire-and-forget full rescan that reconciles the SQLite cache from disk so a\n  // later count reflects new/removed conversations. Never awaited by the request\n  // path — refresh=1 returns the cached total synchronously and this catches up.\n  private refreshCountInBackground(): void {\n    // Gate only a cold cache, as handleListConversations does: the gate is\n    // server-wide, and a warm cache has data every other route can serve.\n    const warm = (this.cache?.listConversations({ limit: 0, offset: 0 }).total ?? 0) > 0;\n    const rescan = async () => {\n      try {\n        const scanner = await this.scannerManager.getFresh();\n        if (this.cache) {\n          this.cache.upsertFromScannerMeta([...scanner.getMetadataCache().values()] as any[]);\n        }\n      } catch (err) {\n        this.log.warn(\n          `Background count refresh failed: ${err instanceof Error ? err.message : String(err)}`,\n          { event: \"count.refresh_failed\" },\n        );\n      }\n    };\n    // Tracked so close() awaits this scan→cache-write before closing cache.db.\n    this.deps.trackCacheWrite(\n      warm ? rescan() : this.deps.withWarmup(\"conversation_refresh\", rescan),\n    );\n  }\n\n  handleGetRecentSessions(url: URL, res: ServerResponse): void {\n    if (this.deps.rejectIfWarmingUp(res)) return;\n    const limit = intParam(url, \"limit\", 20);\n    if (!this.cache) {\n      json(res, 200, { sessions: [], total: 0 });\n      return;\n    }\n    const { conversations } = this.cache.listConversations({ limit, offset: 0 });\n    // Items here are conversation cache rows, not live sessions in SessionStore.\n    // The `type` discriminator lets mobile route taps through /api/sessions/resume\n    // (which spawns a fresh PTY) instead of GET /api/sessions/:id (which 404s).\n    const sessions = conversations.map((c) => ({\n      type: \"conversation\" as const,\n      id: c.id,\n      isSubagent: c.isSubagent,\n      parentConversationId: c.parentConversationId,\n      status: \"idle\" as const,\n      ownership: \"historical\" as const,\n      ptyAttached: false,\n      projectId: c.projectId ?? undefined,\n      projectPath: c.projectPath ?? \"\",\n      projectName: c.projectName ?? \"\",\n      branch: c.branch ?? undefined,\n      lastOutput: \"\",\n      elapsedMs: 0,\n      promptCount: c.messageCount,\n      startedAt: c.lastActivity,\n      lastActivityAt: c.lastActivity,\n    }));\n    json(res, 200, { sessions, total: sessions.length });\n  }\n\n  handleGetPopularProjects(url: URL, res: ServerResponse): void {\n    const limit = intParam(url, \"limit\", 20);\n    if (!this.cache) {\n      json(res, 200, { projects: [], total: 0 });\n      return;\n    }\n    const projects = this.cache.getPopularProjects(limit);\n    json(res, 200, { projects, total: projects.length });\n  }\n\n  handleGetProjectSummaries(url: URL, res: ServerResponse): void {\n    if (this.deps.rejectIfWarmingUp(res)) return;\n    const limit = intParam(url, \"limit\", 200);\n    const offset = intParam(url, \"offset\", 0);\n    if (!this.cache) {\n      // Deliberately not an empty 200: without the cache /api/conversations\n      // falls back to the scanner and still returns rows, so \"no projects\"\n      // would be a lie mobile draws an empty group tree from.\n      json(res, 503, {\n        error: \"Conversation cache unavailable\",\n        code: \"CACHE_UNAVAILABLE\",\n      });\n      return;\n    }\n    const { projects, total } = this.cache.listProjectSummaries({ limit, offset });\n    json(res, 200, { projects, total, offset, hasMore: offset + projects.length < total });\n  }\n\n  findJsonlPath(uuid: string): string | null {\n    const filename = `${uuid}.jsonl`;\n    for (const projectsDir of this.scannerManager.projectsDirs()) {\n      if (!existsSync(projectsDir)) continue;\n      for (const dir of readdirSync(projectsDir)) {\n        const fp = join(projectsDir, dir, filename);\n        if (existsSync(fp)) return fp;\n        const projectDir = join(projectsDir, dir);\n        try {\n          for (const sub of readdirSync(projectDir)) {\n            const subagentPath = join(projectDir, sub, \"subagents\", filename);\n            if (existsSync(subagentPath)) return subagentPath;\n          }\n        } catch {\n          // Not a directory or no access\n        }\n      }\n    }\n    return null;\n  }\n\n  /**\n   * Resolve a conversation id to a JSONL path, in order of authority.\n   *\n   * `findJsonlPath` alone answers 64.0% of this machine's 961 conversations and\n   * 0 of 343 Codex ones — it reconstructs `<projectsDir>/<dir>/<uuid>.jsonl`,\n   * which is Claude Code's layout, and a Codex rollout is\n   * `rollout-<ts>-<uuid>.jsonl` under a date path, so that walk cannot match one\n   * by construction.\n   *\n   * That made the cache row the ONLY rung a Codex conversation could use, which\n   * is why the scanner-index rung exists: measured 2026-09-04, 3 of the 50 ids\n   * `GET /api/conversations` was serving 404'd here — every one a Codex rollout\n   * present on disk, listed from the scanner index, with no cache row left. The\n   * ladder's old \"99.7%, only the file-is-gone case remains\" held only while\n   * every Codex row still had its cache entry.\n   */\n  async locateJsonlPath(uuid: string, lookupId: string): Promise<string | null> {\n    // A live PTY owns its file; nothing on disk is more current.\n    const live =\n      this.deps.findLiveSessionFilePath(uuid) ?? this.deps.findLiveSessionFilePath(lookupId);\n    if (live) return live;\n\n    // The path the cache already recorded. Verified rather than trusted: 49 of\n    // 961 rows on one machine pointed at a subagent transcript OF the\n    // conversation instead of the conversation, so trusting this outright would\n    // serve a 56-message sidechain as a 1307-message conversation.\n    const cached = this.cache?.getMetaById(lookupId)?.filePath;\n    if (cached && (await this.isJsonlPathFor(cached, lookupId))) return cached;\n\n    // The scanner's own metadata index — literally the source the conversation\n    // LIST reads (`getMetadataCache()`, used at handleListConversations). Without\n    // this rung the list and the detail disagree: the list offers an id whose\n    // parsed snapshot `getConversation` never built, and neither the cache row\n    // (dropped) nor the Claude-layout walk (wrong shape) can name its file. Same\n    // verification as the cached path; reading `current` never triggers a scan.\n    const indexed = this.scannerManager.current?.getMetadataCache().get(lookupId)?.filePath;\n    if (indexed && (await this.isJsonlPathFor(indexed, lookupId))) return indexed;\n\n    // Codex and Cursor index keys are file paths (`ConversationMeta.id`), while\n    // the client looks up the session uuid. The map above misses that spelling;\n    // sessionId lookup is how the scanner itself resolves `getConversation(uuid)`.\n    const bySession =\n      this.scannerManager.current?.getConversationsBySessionId?.(lookupId)?.[0]?.filePath;\n    if (bySession && (await this.isJsonlPathFor(bySession, lookupId))) return bySession;\n\n    // Claude-layout directory walk, kept as the self-heal for ids the cache\n    // never learned about — and for the 49 above, where it happens to be right.\n    return this.findJsonlPath(lookupId);\n  }\n\n  /**\n   * Does `filePath` actually hold the conversation `requestedId` names?\n   *\n   * The filename settles it for every JSONL provider: Claude writes\n   * `<uuid>.jsonl` (or `agent-<agentId>.jsonl`), Codex writes\n   * `rollout-<ts>-<uuid>.jsonl`, Cursor writes `<runId>.jsonl` under\n   * `agent-transcripts/`.\n   * Only when the name says nothing do we open the file — and there the naive\n   * rule is wrong, because **a Claude subagent transcript carries the PARENT's\n   * `sessionId`**. Matching on `sessionId` alone therefore verifies exactly the\n   * file this check exists to reject, so a sidechain is refused outright unless\n   * it was asked for by its own `agent-<agentId>` name, which the filename\n   * branch above already covers.\n   */\n  async isJsonlPathFor(filePath: string, requestedId: string): Promise<boolean> {\n    if (!existsSync(filePath)) return false;\n    const stem = basename(filePath).replace(/\\.jsonl$/, \"\");\n    if (stem === requestedId || stem.includes(requestedId)) return true;\n\n    const first = await this.readFirstJsonlEntry(filePath);\n    if (!first || first.isSidechain === true) return false;\n    return first.sessionId === requestedId;\n  }\n\n  /** First parseable JSONL line, for identity checks. Null on an empty or unreadable file. */\n  async readFirstJsonlEntry(\n    filePath: string,\n  ): Promise<{ sessionId?: string; isSidechain?: boolean } | null> {\n    return new Promise((resolve) => {\n      const rl = createInterface({ input: createReadStream(filePath), crlfDelay: Infinity });\n      let done = false;\n      rl.on(\"line\", (line) => {\n        if (done) return;\n        try {\n          const entry = JSON.parse(line);\n          done = true;\n          rl.close();\n          resolve(entry as { sessionId?: string; isSidechain?: boolean });\n        } catch {\n          // skip malformed lines\n        }\n      });\n      rl.on(\"close\", () => {\n        if (!done) resolve(null);\n      });\n      rl.on(\"error\", () => resolve(null));\n    });\n  }\n\n  async readCwdFromJsonl(filePath: string): Promise<string | null> {\n    return new Promise((resolve) => {\n      const rl = createInterface({ input: createReadStream(filePath), crlfDelay: Infinity });\n      let found = false;\n      rl.on(\"line\", (line) => {\n        if (found) return;\n        try {\n          const entry = JSON.parse(line);\n          if (entry.cwd) {\n            found = true;\n            rl.close();\n            resolve(entry.cwd as string);\n          }\n        } catch {\n          // skip malformed lines\n        }\n      });\n      rl.on(\"close\", () => {\n        if (!found) resolve(null);\n      });\n      rl.on(\"error\", () => resolve(null));\n    });\n  }\n\n  async findConversationByUuid(uuid: string): Promise<Conversation | null> {\n    const lookupId = this.deps.resolveConversationLookupId(uuid);\n\n    // Cold-start fast path: until the warm-up scan has populated this.scannerManager.current\n    // (this.scannerManager.ready is null), do NOT trigger a full scan to answer a\n    // single-conversation request — that scan walks every JSONL on disk and is\n    // the 20s+ stall that makes mobile abort. Resolve the file directly\n    // (findJsonlPath is an O(project-dirs) walk) and parse just that one file.\n    // The warm-up scan keeps running in the background; once it adopts the\n    // scanner, subsequent requests use the indexed hot path below.\n    if (!this.scannerManager.ready && !this.scanProfiles) {\n      const filePath = await this.locateJsonlPath(uuid, lookupId);\n      if (filePath) {\n        const account = this.cache?.getMetaById(lookupId)?.account ?? undefined;\n        const coldScanner = this.scannerManager.current ?? this.scannerManager.newScanner();\n        const page = await coldScanner.parseSingleFilePage(filePath, account, {\n          limit: Number.MAX_SAFE_INTEGER,\n        });\n        if (page) return page.conversation;\n      }\n      // No JSONL on disk (or unparseable). Return null WITHOUT triggering a\n      // full scan — confirming not-found is not worth the 20s stall. The\n      // caller's cache-tail fallback / 404 self-heal handles it.\n      return null;\n    }\n\n    // Use the existing indexed scanner without honoring the global scannerStale\n    // full-rescan: the per-file refreshFile below reconciles the one\n    // conversation we care about, so a sibling file changing must not stall this\n    // single-conversation request behind a full-tree rescan.\n    const scanner = await this.scannerManager.get(true);\n    const child = this.cache?.getMetaById(lookupId);\n    if (child?.isSubagent && child.filePath) {\n      const page = await scanner.parseSingleFilePage(child.filePath, child.account ?? undefined, {\n        limit: Number.MAX_SAFE_INTEGER,\n      });\n      return page?.conversation ? { ...page.conversation, sessionId: lookupId } : null;\n    }\n    const fromIndex = await scanner.getConversation(lookupId);\n    if (fromIndex) {\n      // Live-session bypass: a conversation with a live PTY is exactly the case\n      // that stalls — its mtime is always newer than the snapshot, so the stale\n      // check below would refresh on every request. Serve the current snapshot\n      // with no stale-check and no refresh. The live client is on WS receiving\n      // conversation_event lines; the (TTL-throttled) turn-end refresh advances\n      // the snapshot server-side; mobile refetches once on the running →\n      // not-running transition, which is the reconcile point.\n      // Codex: PTY is keyed by the placeholder session id, while the scanner\n      // indexes the bound rollout UUID — check both.\n      if (\n        this.ptyManager.hasSession(uuid) ||\n        this.ptyManager.hasSession(lookupId) ||\n        this.deps.isBoundConversationLive(lookupId)\n      ) {\n        // Codex live sessions: the scanner LRU snapshot is often frozen at bind\n        // time (mtime always looks \"live\", so SWR never refreshes). Re-parse the\n        // watched rollout so REST history includes turns written after bind.\n        // Claude keeps the cheap bypass — its offset index + WS seq path stay fresh.\n        const livePath =\n          this.deps.findLiveSessionFilePath(uuid) ??\n          this.deps.findLiveSessionFilePath(lookupId) ??\n          fromIndex.filePath ??\n          null;\n        const isCodexLive =\n          this.deps.isBoundConversationLive(lookupId) ||\n          this.sessionStore.getManaged(uuid)?.provider === CODEX_CLI_PROVIDER;\n        if (isCodexLive && livePath) {\n          try {\n            const account =\n              this.cache?.getMetaById(lookupId)?.account ??\n              (fromIndex as { account?: string }).account ??\n              undefined;\n            const page = await scanner.parseSingleFilePage(livePath, account, {\n              limit: Number.MAX_SAFE_INTEGER,\n            });\n            if (page?.conversation) return page.conversation;\n          } catch (err) {\n            this.log.warn(\"codex.live_reparse_failed\", {\n              event: \"codex.live_reparse_failed\",\n              conversationId: lookupId,\n              filePath: livePath,\n              err,\n            });\n          }\n        }\n        return fromIndex;\n      }\n      // The scanner memoizes both its metadata index and parsed conversations\n      // for the server's lifetime. A conversation that grows after the initial\n      // scan (the chokidar watcher keeps the SQLite cache fresh, but never the\n      // scanner) keeps serving the startup snapshot here — so the detail/info\n      // view shows a stale message count + last activity that disagrees with\n      // the list view and with what --resume actually replays.\n      //\n      // Stale-while-revalidate: since a snapshot already exists, respond from it\n      // immediately and refresh the one file's indexes in the background\n      // (single-flighted + TTL-throttled via refreshFileForRead, tracked so\n      // close() awaits it). The next request after the refresh settles sees the\n      // fresh data. Only a conversation with NO snapshot pays the parse\n      // synchronously (the getConversation-null fallthrough below), so a cold\n      // thundering herd costs one parse, not N.\n      if (fromIndex.filePath && this.scannerManager.isConversationSnapshotStale(fromIndex)) {\n        const filePath = fromIndex.filePath;\n        this.deps.trackCacheWrite(\n          this.scannerManager.refreshFileForRead(scanner, filePath).catch((err: unknown) => {\n            this.log.warn(\"scanner.refreshFile: failed\", {\n              event: \"scanner.refresh_failed\",\n              conversationId: uuid,\n              filePath,\n              trigger: \"detail-swr\",\n              err,\n            });\n          }),\n        );\n      }\n      return fromIndex;\n    }\n\n    if (this.scanProfiles) return null;\n\n    const filePath = await this.locateJsonlPath(uuid, lookupId);\n    if (!filePath) return null;\n\n    // Mid-full-rescan (or any in-flight scannerReady): do NOT discard the live\n    // scanner and kick a competing getScanner() — that races the shadow rebuild\n    // in rescanForRefresh. Parse just this one file the same way the cold-start\n    // path does (#368).\n    if (this.scannerManager.ready) {\n      const account = this.cache?.getMetaById(lookupId)?.account ?? undefined;\n      const singleFileScanner = this.scannerManager.current ?? this.scannerManager.newScanner();\n      try {\n        const page = await singleFileScanner.parseSingleFilePage(filePath, account, {\n          limit: Number.MAX_SAFE_INTEGER,\n        });\n        if (page?.conversation) return page.conversation;\n      } catch (err) {\n        this.log.warn(\"detail.single_file_parse_failed\", {\n          event: \"detail.single_file_parse_failed\",\n          conversationId: lookupId,\n          filePath,\n          err,\n        });\n      }\n      return null;\n    }\n\n    this.scannerManager.invalidate();\n    const freshScanner = await this.scannerManager.get();\n    return freshScanner.getConversation(lookupId);\n  }\n\n  /**\n   * The 200 body for a session that exists but has written no transcript yet.\n   *\n   * Same shape as the cache-tail fallback in handleGetConversation, with an\n   * empty message list — a client cannot tell \"no turns yet\" from \"a\n   * conversation that happens to be empty\", which is the point: both are a\n   * working session with nothing to show, and neither is an error. There is no\n   * `file_path` on purpose; the file does not exist yet.\n   */\n  private emptyConversationPayload(id: string, session: ManagedSession) {\n    const provider = coerceProviderForRunner(session.provider);\n    const availability = classifyResumability(session.projectPath);\n    return {\n      meta: withCamelMetaAliases({\n        id,\n        profile_id: session.account ?? undefined,\n        project_name: session.projectName,\n        session_name: session.sessionName ?? undefined,\n        project_path: session.projectPath,\n        last_updated_at: (session.lastActivityAt ?? session.startedAt).toISOString(),\n        message_count: 0,\n        provider,\n        resumable: isProviderResumable(provider, availability.resumable),\n        ...(availability.unavailable_reason && {\n          unavailable_reason: availability.unavailable_reason,\n        }),\n      }),\n      messages: [] as unknown[],\n      message_pagination: {\n        total: 0,\n        before_index: 0,\n        from_index: 0,\n        has_more_older: false,\n        next_before_index: null,\n      },\n    };\n  }\n\n  /**\n   * Is this conversation a Codex rollout?\n   *\n   * Two callers, both needing the same fact for different reasons: only Codex\n   * writes a fork link, and only Codex numbers its offset index in a different\n   * space than this handler serves (see the gate in handleGetConversation). A\n   * conversation GET is a hot path, so answering from the cache row keeps every\n   * Claude request from paying an open+read of a first line that can never\n   * contain a link.\n   */\n  private isCodexConversation(conversationId: string, filePath: string): boolean {\n    const provider = this.cache?.getMetaById(\n      this.deps.resolveConversationLookupId(conversationId),\n    )?.provider;\n    if (provider) return provider === CODEX_CLI_PROVIDER;\n    // No cache row yet — a rollout bound seconds ago is exactly that case, and\n    // it is the one this feature exists for. Fall back to the filename, which\n    // is the same signal `isJsonlPathFor` reads: Codex writes\n    // `rollout-<ts>-<uuid>.jsonl`, Claude writes `<uuid>.jsonl`.\n    return basename(filePath).startsWith(\"rollout-\");\n  }\n\n  /**\n   * The stand-in for a conversation whose own file holds no messages yet but\n   * which inherits a history (a fresh fork). Carries the identity fields the\n   * response meta needs; `messages` stays empty because the prefix is merged in\n   * at the filter step, where the served index space is decided.\n   */\n  private shellConversationForInherited(\n    id: string,\n    filePath: string,\n    inherited: InheritedHistory,\n  ): Conversation & { provider: string } {\n    const session =\n      this.sessionStore.getManaged(id) ??\n      this.sessionStore.listManaged().find((s) => s.boundConversationId === id);\n    const meta = this.cache?.getMetaById(id);\n    const newest = inherited.messages.at(-1)?.timestamp;\n    return {\n      id,\n      filePath,\n      account: session?.account ?? meta?.account ?? \"\",\n      projectPath: session?.projectPath ?? meta?.projectPath ?? \"\",\n      projectName: session?.projectName ?? meta?.projectName ?? \"\",\n      sessionName: session?.sessionName ?? meta?.title ?? \"\",\n      sessionId: id,\n      messages: [],\n      fullText: \"\",\n      messageCount: 0,\n      timestamp: inherited.forkedAt ?? newest ?? new Date().toISOString(),\n      provider: CODEX_CLI_PROVIDER,\n    };\n  }\n\n  async handleGetConversation(\n    id: string,\n    url: URL,\n    res: ServerResponse,\n    ifNoneMatch?: string,\n  ): Promise<void> {\n    if (this.deps.rejectIfWarmingUp(res)) return;\n\n    if (await this.isExcludedSubagent(id)) {\n      json(res, 404, { error: \"Conversation not found\" });\n      return;\n    }\n\n    // Soft-deleted: the JSONL may still be on disk (the scanner would happily\n    // find it below), so this has to reject before any of that runs — a\n    // cache-row check alone wouldn't stop the scanner fallback from serving\n    // deleted content straight off the file.\n    if (this.cache?.getMetaById(id)?.deletedAt) {\n      json(res, 404, { error: \"Conversation not found\" });\n      return;\n    }\n\n    // Try the scanner first (has full content including tool_use blocks).\n    // Fall back to the cache tail only when the scanner can't find the file —\n    // e.g. a conversation that existed in a previous run but whose JSONL was deleted.\n    // A conversation can inherit its opening history from another file — see\n    // inheritedHistory.ts. Resolved from the file itself (one line for the\n    // common case: not a fork, and cached per path after that), never from our\n    // session records, so a fork the user made in their own terminal reads the\n    // same as one we started.\n    //\n    // Resolved before findConversationByUuid, but that order is no longer\n    // load-bearing and the next await added here is free to break it. It was:\n    // findConversationByUuid fires a stale-while-revalidate refresh in the\n    // background, awaiting anything after it hands the event loop over long\n    // enough for that refresh to COMPLETE, and a completed refresh used to\n    // make the next refresh of the same file inside REFRESH_TTL_MS a no-op —\n    // so a caller that appended a turn and asked for a refresh was told\n    // \"recent enough\" and served the pre-append snapshot. The read and\n    // post-write paths are separate contracts now (ScannerManager\n    // .refreshFileForRead / .refreshFileAfterWrite, #806): a read landing here\n    // cannot throttle a writer out.\n    const ownFilePath = await this.locateJsonlPath(id, this.deps.resolveConversationLookupId(id));\n    const inherited =\n      ownFilePath && this.isCodexConversation(id, ownFilePath)\n        ? await resolveInheritedHistory({\n            filePath: ownFilePath,\n            locateSource: (sourceId) =>\n              this.locateJsonlPath(sourceId, this.deps.resolveConversationLookupId(sourceId)),\n          })\n        : null;\n\n    let conversation = await this.findConversationByUuid(id);\n\n    // A fork with no turns of its own has no transcript to find, but it is not\n    // an empty conversation — its history is the prefix. Stand in a shell for\n    // the scanner's miss so the normal paging path below serves it.\n    if (!conversation && inherited && inherited.messages.length > 0 && ownFilePath) {\n      conversation = this.shellConversationForInherited(id, ownFilePath, inherited);\n    }\n\n    if (!conversation && this.cache) {\n      // Only `before_index` indicates the client is paginating backward (asking\n      // for messages older than a cursor) — `msg_limit` is just page size and is\n      // sent on the first page too. The tail fallback should serve any first-page\n      // request when the JSONL is missing, regardless of msg_limit.\n      const isFirstLoad = !url.searchParams.has(\"before_index\");\n      if (isFirstLoad) {\n        const tail = this.cache.getConversationTail(id);\n        // A tail row carrying neither text nor content blocks renders as nothing\n        // on a client, so serving it is a 200 that paints a blank conversation —\n        // worse than the 404, which clients already handle. Builds before the\n        // user/assistant role guard in ConversationCache wrote exactly these for\n        // Codex rollouts, keying `role` off the envelope type (event_msg /\n        // response_item), and the rows survive for any conversation whose file\n        // has since stopped changing.\n        const usableTail = (tail?.messages ?? []).filter(\n          (message) => (message.text ?? \"\").length > 0 || (message.content?.length ?? 0) > 0,\n        );\n        if (usableTail.length > 0) {\n          const cachedMeta = this.cache.getMetaById(id);\n          const cachedProvider = cachedMeta?.provider ?? CLAUDE_CODE_PROVIDER;\n          const availability = classifyResumability(cachedMeta?.projectPath);\n          const messagesPayload = usableTail.map((m, idx) => ({\n            message_index: idx,\n            role: m.role,\n            timestamp: m.timestamp,\n            text: m.text,\n            tool_calls: [] as unknown[],\n            content: (m.content ?? []).filter((b: any) => b.type !== \"text\"),\n          }));\n          json(res, 200, {\n            meta: withCamelMetaAliases({\n              id,\n              profile_id: cachedMeta?.account ?? undefined,\n              project_name: cachedMeta?.projectName ?? undefined,\n              session_name: cachedMeta?.title ?? undefined,\n              project_path: cachedMeta?.projectPath ?? undefined,\n              file_path: cachedMeta?.filePath ?? undefined,\n              last_updated_at: cachedMeta?.lastActivity ?? undefined,\n              message_count: cachedMeta?.messageCount ?? undefined,\n              provider: cachedProvider,\n              resumable: isProviderResumable(cachedProvider, availability.resumable),\n              ...(availability.unavailable_reason && {\n                unavailable_reason: availability.unavailable_reason,\n              }),\n            }),\n            messages: messagesPayload,\n            message_pagination: {\n              // Count what was actually served, not what the tail holds: the\n              // filtered rows are gone from the payload, and a total the page\n              // cannot account for is what a client reads as \"more to load\".\n              total: usableTail.length,\n              before_index: usableTail.length,\n              from_index: 0,\n              has_more_older: false,\n              next_before_index: null,\n            },\n          });\n          return;\n        }\n      }\n    }\n\n    if (!conversation) {\n      // A session that has never been given a prompt is an EMPTY conversation,\n      // not a missing one. Claude only creates `<sessionId>.jsonl` on the first\n      // user turn — measured 0.0s to 86.9s after `pty.ready` on this machine, and\n      // never at all if the user opens a session and walks away. 404 here was\n      // 62% of every conversation 404 in a three-week production log, and it is\n      // what renders \"Messages failed to load\" on a session that is working fine.\n      // `promptCount === 0` is the same \"unused start\" signal\n      // `shouldForgetEmptySession` uses, and it keeps a real deletion honest: a\n      // session that HAS sent prompts but has no transcript still 404s.\n      // `id` here is what the client requested, which for a bound Codex\n      // session is the rollout UUID (`boundConversationId`), not the\n      // placeholder PTY id `getManaged` is keyed by — check both.\n      const unusedStart =\n        this.sessionStore.getManaged(id) ??\n        this.sessionStore.listManaged().find((s) => s.boundConversationId === id) ??\n        null;\n      //\n      // `promptCount === 0` alone left a hole exactly one prompt wide. Sending\n      // the first prompt is what flips the counter to 1, and it is also what\n      // makes Claude create the file — so for the 0.3s-1.7s between the two this\n      // endpoint 404'd a session that was working fine. Measured on 4 sessions /\n      // 8 of 203 conversation 404s in a 20.5-day log, every one bracketed by\n      // `pty.input_write` -> 404 -> `session.jsonl_wired`; mobile refetches\n      // messages on submit and lands squarely in that window.\n      //\n      // So the in-flight case is its own clause: no transcript bound yet\n      // (`findLiveSessionFilePath` is the sessionFileMap the wiring writes to),\n      // and the session still recently active. Recency is anchored on\n      // `lastActivityAt ?? startedAt` — the same \"is this session live\" reading\n      // `session-store.ts` takes — not on `startedAt` alone, because the gap\n      // from spawn to first prompt is human think time and ran to 405.7s in\n      // production; anchoring on the spawn would leave the hole open for anyone\n      // slow to type. Past the watcher's own deadline with nothing on disk it\n      // 404s again: that is data loss, and it must not be dressed up as empty.\n      const bound = this.deps.findLiveSessionFilePath(id);\n      const activeAt = unusedStart?.lastActivityAt ?? unusedStart?.startedAt;\n      const transcriptPending =\n        !bound &&\n        activeAt != null &&\n        Date.now() - activeAt.getTime() < TRANSCRIPT_WATCH_DEADLINE_MS;\n      if (unusedStart && (unusedStart.promptCount === 0 || transcriptPending)) {\n        json(res, 200, this.emptyConversationPayload(id, unusedStart));\n        return;\n      }\n\n      // Self-heal, but only on PROOF. The row is a ghost when it names a file and\n      // that file is gone. Dropping it on an unexplained miss was the bug that\n      // made this permanent: for a Codex rollout the cache row is the only rung\n      // of locateJsonlPath that can match, so one transient miss deleted the row,\n      // the next request could no longer find the file, and `/api/sessions/:id`\n      // lost the same row as its own fallback — both endpoints 404ing forever on\n      // a conversation still sitting on disk. Invalidate `lookupId`, since that\n      // is the id the row is keyed by; `id` may be a Codex placeholder.\n      const lookupId = this.deps.resolveConversationLookupId(id);\n      const rowPath = this.cache?.getMetaById(lookupId)?.filePath;\n      if (rowPath && !existsSync(rowPath)) this.cache?.invalidate(lookupId);\n\n      json(res, 404, { error: \"Conversation not found\", code: \"not_found\" });\n      return;\n    }\n\n    // Compute the conditional-fetch validator from the RESOLVED conversation —\n    // findConversationByUuid has already done its staleness refresh above, so\n    // these fields reflect the same state the body would. Computing it from a\n    // pre-refresh snapshot would let us hand out a 304 against stale data.\n    const etagSource = conversation as unknown as {\n      filePath: string;\n      messageCount: number;\n      timestamp: string;\n    };\n    // Fold the offset index's count into the validator: when the index is\n    // fresher than the scanner snapshot (a live/appended file), the ETag must\n    // change so a client holding the old tail doesn't get a 304 against grown\n    // content. Cheap count lookup, and the window read below now shares it: the\n    // index writer applies the same leading-injected-context rule this handler\n    // does, so for Codex as well as Claude this count sits in the served space\n    // rather than one higher per preamble line.\n    //\n    // It is still only a validator — it has to CHANGE when the content does, not\n    // to be a meaningful message count — and both it and the\n    // `etagSource.messageCount` it is maxed against advance on an append, so the\n    // tag cannot freeze and hand out a stale 304. Pinned in\n    // __tests__/codex-meta-count-etag.test.ts.\n    const indexedCount =\n      etagSource.filePath && this.cache\n        ? this.cache.getIndexedMessageCount(\n            ConversationCache.conversationIdForFile(etagSource.filePath),\n          )\n        : 0;\n    const etagMessageCount = Math.max(etagSource.messageCount, indexedCount);\n    // The prefix is part of what this response serves, so it has to be part of\n    // the validator. Without it a client caches half a conversation under a tag\n    // that cannot change when the other half does. The prefix is immutable, so\n    // its path and cut are enough — no source mtime needed.\n    const etag = computeConversationEtag({\n      filePath: inherited\n        ? `${etagSource.filePath}+${inherited.sourceFilePath ?? inherited.sourceId}@${inherited.ordinalExclusive}`\n        : etagSource.filePath,\n      messageCount: etagMessageCount + (inherited?.messages.length ?? 0),\n      timestamp: etagSource.timestamp,\n    });\n\n    // Only the first page (\"is the conversation as a whole still current?\")\n    // participates in the freshness check. Older pages are immutable history —\n    // a back-page request (before_index set) always returns its 200 body, never\n    // a 304, even when the client echoes a matching If-None-Match. Anchored and\n    // after-windows also always return 200: their ETag inputs are identical to\n    // the tail page's, so honoring If-None-Match here would 304 a client that\n    // holds the tail page but is asking for a different window.\n    const isFirstPage =\n      !url.searchParams.has(\"before_index\") &&\n      !url.searchParams.has(\"anchor_index\") &&\n      !url.searchParams.has(\"after_index\");\n    if (isFirstPage && ifNoneMatch && ifNoneMatch === etag) {\n      // This is a direct-`ServerResponse` write, so the Hono CORS middleware's\n      // headers don't reach it — set the expose header here so a cross-origin\n      // client can read the validator off the 304 too.\n      res.writeHead(304, { ETag: etag, \"Access-Control-Expose-Headers\": \"ETag\" });\n      res.end();\n      return;\n    }\n\n    // Codex writes AGENTS.md / permissions dumps as role:user before any real\n    // turn. Drop them from the REST payload so the chat opens as user→agent\n    // rather than fake-user→fake-user→agent. Heuristic is Codex-specific text;\n    // Claude messages never match.\n    //\n    // Bounded to the LEADING turn, matching the scanner's own rule. Unbounded, a\n    // human who pastes instruction text mid-conversation had their message\n    // silently eaten. The bound is also what keeps this list in the same index\n    // space as the offset index, which applies the identical rule at write time.\n    //\n    // The bound is PER FILE, not per served conversation, which is why the two\n    // filter() calls below each get their own counter: Codex injects at the head\n    // of every rollout, so a fork's own file has its own preamble at ITS index 0\n    // even though that message sits at index N of the stitched conversation. The\n    // scanner bounds the same way — its accumulator is per file.\n    //\n    // The counter counts KEPT messages, not array positions. Position was wrong\n    // for a head of TWO injected lines — the AGENTS.md dump followed by this\n    // server's own argv prompt, measured on 17 of 685 rollouts — because it drops\n    // only the first while the scanner's accumulator (`acc.messageCount === 0`)\n    // and the offset-index writer both drop the whole leading run. A warm index\n    // then served 3 messages under a meta claiming 4, and every message_index\n    // moved by one depending on nothing but whether the index was warm.\n    const servableFilter = () => {\n      let kept = 0;\n      return (m: { role: string; text?: string }) => {\n        if (isLeadingInjectedContext(kept, m.role, m.text)) return false;\n        kept++;\n        return true;\n      };\n    };\n\n    // The inherited prefix is filtered SEPARATELY from the conversation's own\n    // messages, not because the result differs — concatenating then filtering\n    // gives the same list — but because the boundary between the two halves is\n    // only knowable after the filter runs. `through_message_index` names a\n    // served index, and injected-context lines are dropped before indices are\n    // assigned, so counting the prefix beforehand puts the divider in the wrong\n    // place by however many lines the filter removed.\n    const inheritedFiltered = inherited ? inherited.messages.filter(servableFilter()) : [];\n    const filtered = [...inheritedFiltered, ...conversation.messages.filter(servableFilter())];\n    const total = filtered.length;\n\n    const hasAnchor = url.searchParams.has(\"anchor_index\");\n    const hasAfter = url.searchParams.has(\"after_index\");\n    const usePaging =\n      url.searchParams.has(\"msg_limit\") ||\n      url.searchParams.has(\"before_index\") ||\n      url.searchParams.has(\"max_bytes\") ||\n      hasAnchor ||\n      hasAfter;\n\n    let slice = filtered;\n    let fromIdx = 0;\n    let messagePagination: Record<string, unknown> | undefined;\n    // Set to the offset index's total when it served this response, so the meta\n    // block can reflect the freshly-indexed count/timestamp instead of the\n    // (possibly stale) scanner snapshot.\n    let indexTotal: number | null = null;\n\n    if (usePaging) {\n      const limit = Math.min(Math.max(intParam(url, \"msg_limit\", 80), 1), 500);\n      let beforeIndex = total;\n      let scanLimit = limit;\n      let anchorIndex: number | null = null;\n      let newerPaging = false;\n      // True only when the after_index branch actually ran (before_index takes\n      // precedence over after_index, so `hasAfter` alone isn't enough).\n      let usedAfterIndex = false;\n      if (url.searchParams.has(\"before_index\")) {\n        beforeIndex = intParam(url, \"before_index\", total);\n        beforeIndex = Math.min(Math.max(beforeIndex, 0), total);\n      } else if (hasAfter) {\n        // Newer-direction page: [after_index, after_index + limit). The paged\n        // reader is end-anchored, so cap its limit at the window width — a full\n        // `limit` near the tail would widen the window backward over rows the\n        // client already has (duplicate message_index rows on mobile).\n        const from = Math.min(Math.max(intParam(url, \"after_index\", 0), 0), total);\n        beforeIndex = Math.min(total, from + limit);\n        scanLimit = beforeIndex - from;\n        newerPaging = true;\n        usedAfterIndex = true;\n      } else if (hasAnchor) {\n        // Centered window around the anchor, clamped into [0, total-1] — a\n        // stale index from search must still open the conversation, never 400.\n        // Near the tail the window widens backward so it stays full-size.\n        anchorIndex = Math.min(\n          Math.max(intParam(url, \"anchor_index\", 0), 0),\n          Math.max(0, total - 1),\n        );\n        const from = Math.max(0, anchorIndex - Math.floor(limit / 2));\n        beforeIndex = Math.min(total, from + limit);\n        newerPaging = true;\n      }\n      // A plain tail request (no explicit cursor) means \"the newest `limit`\n      // messages\". Its window was derived from the scanner's snapshot `total`,\n      // which lags a live, actively-appended file — the exact case the offset\n      // index exists to serve. When the index is fresher than the snapshot,\n      // anchor the tail on the INDEX's total so newly-appended messages aren't\n      // dropped by a stale upper bound.\n      const isTailRequest = !url.searchParams.has(\"before_index\") && !hasAfter && !hasAnchor;\n      const indexFilePath = (conversation as { filePath?: string }).filePath;\n      // Two different reasons used to exclude Codex here (#824); only one is\n      // gone.\n      //\n      // FIXED: the index counted the AGENTS.md / sandbox preamble this handler\n      // drops, so a window served a fabricated first turn and shifted every\n      // genuine message_index by one. The index writer now applies the same\n      // leading-injected-context rule, so both number a file identically, and\n      // migration 018 drops the pre-filter rows. Plain Codex rollouts get the\n      // fast path back.\n      //\n      // STILL EXCLUDED: a fork. Its inherited prefix lives in the PARENT's file,\n      // and this window only ever covers `indexFilePath` — the fork's own. Taking\n      // it discards `filtered`, the one array carrying the prefix, which is how a\n      // fork came to serve 2 messages under a meta claiming 6. Agreeing on the\n      // space does not help: the prefix is not in this file to be numbered.\n      // Serving a fork from the index needs a read that spans both files, which\n      // is the split-window read that docs/plans/2026-09-07-inherited-conversation\n      // -history.md records as dropped.\n      const servesInheritedPrefix = !!inherited;\n      if (isTailRequest && !servesInheritedPrefix && indexFilePath && this.cache) {\n        const indexed = this.cache.getIndexedMessageCount(\n          ConversationCache.conversationIdForFile(indexFilePath),\n        );\n        if (indexed > beforeIndex) {\n          beforeIndex = indexed;\n        }\n      }\n      const windowStart = Math.max(0, beforeIndex - scanLimit);\n\n      // Offset-index fast path: when the index is warm and matches the file on\n      // disk, serve the window straight from SQLite + pread of the exact byte\n      // ranges — no scanner, no re-parse. Falls through to the scanner (and\n      // enqueues a backfill) on any miss/mismatch so the response is never\n      // wrong. Only for the linear paging windows (before/after/tail); the\n      // anchored-search window keeps using the scanner's reader.\n      const indexWindow =\n        scanLimit > 0 && !hasAnchor && !servesInheritedPrefix && indexFilePath && this.cache\n          ? this.cache.readMessageWindow(indexFilePath, windowStart, beforeIndex)\n          : null;\n      if (!indexWindow && !servesInheritedPrefix && indexFilePath && this.cache && !hasAnchor) {\n        // The one line that separates a fast fetch from a slow one. A miss\n        // means this request falls through to the scanner and re-parses the\n        // whole file, which is the entire difference between the 34 ms and\n        // 2877 ms fetches of the same conversation — and it was invisible in\n        // the log, because only the failure case was ever recorded.\n        this.log.info(\n          `[server] offset-index miss ${id} → scanner fallback`,\n          {\n            event: \"offset_index.miss\",\n            conversationId: id,\n            fromIndex: windowStart,\n            toIndex: beforeIndex,\n          },\n          \"pino\",\n        );\n        // Cold/stale index for a file we page linearly → backfill in the\n        // background (tracked so close() awaits it) for next time. The current\n        // request is served by the scanner path below.\n        this.deps.trackCacheWrite(\n          this.cache.backfillIndex(indexFilePath).catch((err) => {\n            this.log.warn(\"offset-index.backfill_failed\", {\n              event: \"offset_index.backfill_failed\",\n              conversationId: id,\n              filePath: indexFilePath,\n              err,\n            });\n          }),\n        );\n      }\n\n      // Only consult the scanner's paged reader when it's already warm. On the\n      // cold path `conversation` came from the single-file fast path and holds\n      // every message in memory, so slice it locally — calling getScanner()\n      // here would trigger the full scan the fast path exists to avoid. Pass\n      // skipStaleRescan: this is the same single-conversation detail path, whose\n      // refreshFile already reconciled the one file we page here, so a sibling\n      // file's stale flag must not stall this read behind a full-tree rescan.\n      // Prefer the offset-index window when warm (Claude). Otherwise slice the\n      // in-memory `filtered` list — do NOT call getConversationPage here.\n      // That helper re-reads the scanner LRU (unfiltered, often stale for live\n      // Codex) and would bypass isCodexInjectedContext, which is exactly how\n      // mobile's ?msg_limit=80 path lost real user turns / showed PTY-only UI.\n      const page = indexWindow;\n      if (indexWindow) indexTotal = indexWindow.total;\n      const start = page?.fromIndex ?? windowStart;\n      slice = page?.messages ?? filtered.slice(start, beforeIndex);\n      fromIdx = start;\n      const effectiveTotal = page?.total ?? total;\n      messagePagination = {\n        total: effectiveTotal,\n        before_index: beforeIndex,\n        from_index: start,\n        has_more_older: start > 0,\n        next_before_index: start > 0 ? start : null,\n      };\n      if (anchorIndex != null) messagePagination.anchor_index = anchorIndex;\n      if (newerPaging) {\n        messagePagination.has_more_newer = beforeIndex < effectiveTotal;\n        messagePagination.next_after_index = beforeIndex < effectiveTotal ? beforeIndex : null;\n      }\n      // Delta-validity token: an after_index delta carries the conversation's\n      // current etag so a client can detect that its stored cursor is stale\n      // (etag mismatch → discard the cursor, refetch the tail). Only on the\n      // forward-delta path (before_index takes precedence, so gate on the flag\n      // not merely hasAfter); additive, so old clients ignore it.\n      if (usedAfterIndex) {\n        messagePagination.etag = etag;\n      }\n    }\n\n    const messagesPayload = slice.map((m: any, localIdx: number) => {\n      const content: unknown[] = [];\n      if (m.isThinking) {\n        content.push({\n          type: \"thinking\",\n          thinking: m.thinkingContent ?? \"\",\n          signature: m.thinkingSignature,\n        });\n      }\n      for (const b of m.metadata?.toolUseBlocks ?? []) {\n        content.push({ type: \"tool_use\", id: b.id, name: b.name, input: b.input });\n      }\n      for (const r of m.metadata?.toolResults ?? []) {\n        content.push({\n          type: \"tool_result\",\n          tool_use_id: r.toolUseId,\n          content: toolResultText(r.content),\n          is_error: r.isError ?? false,\n        });\n      }\n      return {\n        uuid: m.uuid ?? null,\n        message_index: fromIdx + localIdx,\n        role: m.role,\n        timestamp: m.timestamp,\n        text: m.text,\n        tool_calls: m.metadata?.toolUses ?? [],\n        has_images: m.hasImages ?? false,\n        parent_uuid: m.parentUuid ?? null,\n        permission_mode: m.permissionMode ?? null,\n        is_sidechain: m.isSidechain ?? false,\n        is_tool_result: m.isToolResult ?? false,\n        attachment: m.attachment ?? null,\n        content,\n      };\n    });\n\n    // Byte budget. A page is bounded by `msg_limit` (capped at 500), but a\n    // count says nothing about what actually lands in a phone's heap: locally\n    // measured conversations run p50 315 KB and max 22.8 MB, so the same 500\n    // messages can be two orders of magnitude apart in size. `max_bytes` drops\n    // the OLDEST messages of the page until the rest fit, keeping the newest —\n    // the client wants the tail, and it pages backward from there.\n    //\n    // No `truncated` flag: a trimmed page is exactly a page with older messages\n    // behind it, which `has_more_older`/`next_before_index` already say. The\n    // only genuinely new fact is what the budget spent, so that is all that is\n    // added.\n    const requestedMaxBytes = intParam(url, \"max_bytes\", 0);\n    if (requestedMaxBytes > 0 && messagesPayload.length > 0) {\n      const budget = Math.min(requestedMaxBytes, MAX_BYTES_CEILING);\n      let used = 0;\n      let firstKept = messagesPayload.length - 1;\n      for (let i = messagesPayload.length - 1; i >= 0; i--) {\n        // Bytes, not string length: a Hebrew or emoji-heavy conversation is up\n        // to 4x its UTF-16 length on the wire, and undercounting is how a\n        // budget silently stops binding for exactly the users it matters to.\n        const size = Buffer.byteLength(JSON.stringify(messagesPayload[i]));\n        // The newest message is served whatever its size — a blank screen is\n        // worse than an over-budget one, and there is no smaller page to fall\n        // back to.\n        if (i < messagesPayload.length - 1 && used + size > budget) break;\n        used += size;\n        firstKept = i;\n      }\n      if (firstKept > 0) {\n        messagesPayload.splice(0, firstKept);\n        // message_index is absolute (fromIdx + localIdx at map time), so the\n        // remaining entries keep their correct indices; only the page's own\n        // start moves, and with it the cursor a client pages older from.\n        if (messagePagination) {\n          const newFrom = fromIdx + firstKept;\n          messagePagination.from_index = newFrom;\n          messagePagination.has_more_older = newFrom > 0;\n          messagePagination.next_before_index = newFrom > 0 ? newFrom : null;\n        }\n      }\n      if (messagePagination) messagePagination.served_bytes = used;\n    }\n\n    const conv = conversation as any;\n    // `id` may be a live session's PTY placeholder; the cache row is keyed by the\n    // bound transcript id, and a miss here would default the label to claude-code.\n    const cachedConvMeta =\n      this.cache?.getMetaById(this.deps.resolveConversationLookupId(id)) ??\n      this.cache?.getMetaById(id);\n    const convProvider = coerceProviderForRunner(\n      this.sessionStore.getManaged(id)?.provider ?? conv.provider ?? cachedConvMeta?.provider,\n    );\n    const availability = classifyResumability(conv.projectPath);\n    // When the offset index served a fresher view than the scanner snapshot,\n    // the meta (message_count / last_updated_at) must reflect what was actually\n    // served — otherwise meta disagrees with the messages array. Prefer the\n    // index total and the newest served message's timestamp.\n    //\n    // The base is `total` (= `filtered.length`): the inherited prefix plus this\n    // file's own turns, each through `servableFilter`, so the whole number sits in\n    // the one space this response serves in. Taking it whole is also what counts\n    // the prefix, so a fork's meta does not say \"0 messages\" while its body\n    // carries 21 and the hub row disagrees with the open conversation.\n    //\n    // It replaces `conv.messageCount + inheritedFiltered.length`, which added a\n    // POST-filter prefix length to the scanner's RAW count — for Codex that\n    // count still holds the AGENTS.md / permissions lines `servableFilter` drops —\n    // producing a number in neither space: a fork carrying one injected line in\n    // its own file reported 7 against a body of 6.\n    //\n    // Freshness is then carried across as a DELTA rather than by swapping the\n    // raw `indexTotal` in for the own half, because only the delta is known to\n    // be filter-free. Both `indexTotal` and `total` now count in the served\n    // space for either provider — the index writer applies the same\n    // leading-injected-context rule this handler does — so the delta is exactly\n    // the messages the index has read past the scanner's snapshot, and adding it\n    // cannot reintroduce a preamble line the body does not carry.\n    //\n    // Equivalent to `indexFresh ? indexTotal : total` on every input reachable\n    // today: every Conversation the meta block can see is built with\n    // `messageCount: messages.length` (the scanner's parseConversation /\n    // parseCodexConversation / assemble, and `shellConversationForInherited`).\n    // The delta is preferred because it localizes the \"no messages were\n    // filtered here\" assumption to the newly-appended region instead of\n    // asserting it over the whole conversation.\n    const indexFreshDelta =\n      indexTotal != null && indexTotal > conv.messageCount ? indexTotal - conv.messageCount : 0;\n    const metaMessageCount = total + indexFreshDelta;\n    const metaLastUpdatedAt =\n      indexTotal != null && indexTotal > conv.messageCount\n        ? (slice.at(-1)?.timestamp ?? conv.timestamp)\n        : conv.timestamp;\n    const body: Record<string, unknown> = {\n      meta: withCamelMetaAliases({\n        id,\n        isSubagent: this.cache?.getMetaById(id)?.isSubagent,\n        parentConversationId: this.cache?.getMetaById(id)?.parentConversationId,\n        profile_id: conv.account,\n        project_name: conv.projectName,\n        session_name: conv.sessionName || undefined,\n        project_path: conv.projectPath,\n        file_path: conv.filePath,\n        last_updated_at: metaLastUpdatedAt,\n        message_count: metaMessageCount,\n        last_prompt: conv.lastPrompt ?? undefined,\n        provider: convProvider,\n        resumable: isProviderResumable(convProvider, availability.resumable),\n        ...(availability.unavailable_reason && {\n          unavailable_reason: availability.unavailable_reason,\n        }),\n        // Additive: an older client ignores it and simply sees a longer\n        // conversation, which is still the fix. A newer one draws the seam.\n        ...(inherited && {\n          inherited_history: {\n            source_id: inherited.sourceId,\n            source_provider: CODEX_CLI_PROVIDER,\n            through_message_index: inheritedFiltered.length,\n            forked_at: inherited.forkedAt,\n            unavailable_reason: inherited.unavailableReason,\n          },\n        }),\n      }),\n      messages: messagesPayload,\n    };\n    if (messagePagination) body.message_pagination = messagePagination;\n    if (conv.turnDurations?.length) {\n      body.turn_durations = conv.turnDurations.map((d: any) => ({\n        duration_ms: d.durationMs,\n        message_count: d.messageCount,\n        uuid: d.uuid,\n      }));\n    }\n    // Always expose the ETag on the 200 so the client can store it and send it\n    // back as If-None-Match next time. Old clients ignore the header. This is a\n    // direct-`ServerResponse` write that bypasses the Hono CORS middleware, so\n    // the expose header is set here too — without it a cross-origin client\n    // can't read ETag.\n    res.writeHead(200, {\n      \"Content-Type\": \"application/json\",\n      ETag: etag,\n      \"Access-Control-Expose-Headers\": \"ETag\",\n    });\n    res.end(JSON.stringify(body));\n  }\n\n  // Resolves an active search query to the message a client should anchor to\n  // inside one conversation. Matching is body-only (text first, then\n  // thinking/tool payloads) — a metadata-only search hit (project path, title)\n  // has no scroll target and returns 404 search_target_not_found.\n  //\n  // Implements HTTP QUERY (RFC 10008): the search query travels in a JSON\n  // request body instead of a URL query param — QUERY is safe + idempotent +\n  // cacheable like GET, but (like POST) can carry a body, which fits this\n  // endpoint's single-string input exactly. `Accept-Query` advertises the\n  // supported request media type per the spec.\n  async handleSearchTarget(id: string, req: IncomingMessage, res: ServerResponse): Promise<void> {\n    const contentType = (req.headers[\"content-type\"] ?? \"\").split(\";\")[0].trim();\n    if (contentType && contentType !== \"application/json\") {\n      res.setHeader(\"Accept-Query\", \"application/json\");\n      json(res, 415, {\n        error: \"Unsupported Content-Type; expected application/json\",\n        code: \"unsupported_media_type\",\n      });\n      return;\n    }\n\n    let body: unknown;\n    try {\n      body = await readBody(req);\n    } catch {\n      res.setHeader(\"Accept-Query\", \"application/json\");\n      json(res, 422, { error: \"Malformed JSON body\", code: \"invalid_query\" });\n      return;\n    }\n\n    const q =\n      typeof (body as { q?: unknown })?.q === \"string\" ? (body as { q: string }).q.trim() : \"\";\n    if (!q) {\n      res.setHeader(\"Accept-Query\", \"application/json\");\n      json(res, 422, { error: \"Missing or empty query field: q\", code: \"invalid_query\" });\n      return;\n    }\n    if (q.length > 256) {\n      res.setHeader(\"Accept-Query\", \"application/json\");\n      json(res, 422, { error: \"Query too long (max 256 characters)\", code: \"invalid_query\" });\n      return;\n    }\n\n    const conversation = await this.findConversationByUuid(id);\n    if (!conversation) {\n      json(res, 404, { error: \"Conversation not found\", code: \"not_found\" });\n      return;\n    }\n\n    const target = findSearchTarget(conversation.messages as unknown as SearchableMessage[], q);\n    if (!target) {\n      json(res, 404, { error: \"No message body matches query\", code: \"search_target_not_found\" });\n      return;\n    }\n\n    res.setHeader(\"Accept-Query\", \"application/json\");\n    json(res, 200, {\n      query: q,\n      message_index: target.messageIndex,\n      uuid: target.uuid,\n      snippet: target.snippet,\n      match_indexes: target.matchIndexes,\n      total_matches: target.totalMatches,\n    });\n  }\n\n  async handleSearch(url: URL, res: ServerResponse): Promise<void> {\n    let parsed: ParsedSearchQuery;\n    try {\n      parsed = parseSearchQuery(url.searchParams);\n    } catch (err) {\n      if (err instanceof SearchQueryError) {\n        json(res, 400, { error: err.message, code: err.code });\n        return;\n      }\n      throw err;\n    }\n    const { q, limit, offset, filters } = parsed;\n    const startedAt = Date.now();\n\n    const scanner = await this.scannerManager.get();\n    const results = await search(\n      q,\n      {\n        // Fetch beyond the requested page: filters below are applied AFTER the\n        // scanner returns, so slicing at `limit` here would drop results that a\n        // later page should contain. Bounded so a broad query cannot pull an\n        // unbounded set into memory.\n        limit: Math.min(offset + limit * SEARCH_OVERFETCH, SEARCH_MAX_SCAN),\n        include: \"conversations\",\n        ...(this.scanProfiles ? { profiles: this.scanProfiles } : {}),\n        ...this.scannerManager.codexScanOpts(),\n      },\n      scanner,\n    );\n    this.cache?.upsertFromScannerMeta(results.map((r: any) => r.meta));\n    const publicResults = results.flatMap((r) => {\n      const meta = this.publicScannerMeta(r.meta);\n      return meta ? [{ ...r, meta }] : [];\n    });\n    const adapted = publicResults.map((r: any) => ({\n      // Use sessionId so the id matches /api/conversations and resolves via\n      // findConversationByUuid — a client can round-trip a search result into\n      // GET /api/conversations/:id or the search-target QUERY. The old\n      // filename-stem derivation produced an id no other endpoint recognized.\n      id: this.cache?.getIdByFilePath(r.meta.filePath) ?? r.meta.sessionId ?? r.meta.id,\n      title: r.meta.projectName,\n      sessionName: r.meta.sessionName || undefined,\n      filePath: r.meta.filePath,\n      projectPath: r.meta.projectPath,\n      branch: r.meta.gitBranch ?? undefined,\n      account: r.meta.account,\n      preview: r.meta.preview || undefined,\n      messageCount: r.meta.messageCount,\n      lastActivity: r.meta.timestamp,\n      firstMessage: r.meta.firstMessage ?? undefined,\n      lastMessage: r.meta.lastMessage ?? undefined,\n      provider: r.meta.provider ?? CLAUDE_CODE_PROVIDER,\n      // The scanner already computes relevance and match snippets; the previous\n      // adapter discarded both, so results arrived in an unexplained order with\n      // no indication of WHY anything matched.\n      score: r.score,\n      matches: Array.isArray(r.matches)\n        ? r.matches.map((m: SearchMatch) => ({\n            field: m.field,\n            snippet: m.snippet,\n            // Offsets into `snippet` for the matched tokens. Absent on metadata\n            // hits, and on scanners older than the one that added them.\n            highlights: m.highlights,\n          }))\n        : [],\n    }));\n\n    const visible = adapted.filter((r) => this.cache?.isVisible(r.id) ?? true);\n    const page = paginate(applyFilters(visible, filters), offset, limit);\n    json(res, 200, {\n      conversations: page.items,\n      hasMore: page.hasMore,\n      offset: page.offset,\n      total: page.total,\n      // Query timing, so a slow search is diagnosable rather than merely felt.\n      tookMs: Date.now() - startedAt,\n    });\n  }\n}\n","export interface SearchTargetMatch {\n  messageIndex: number;\n  uuid: string | null;\n  snippet: string;\n  /**\n   * All matching message indexes, ascending. When any plain-text match exists\n   * only text matches are listed (they are the navigable/highlightable ones);\n   * otherwise the thinking/tool fallback matches are. Capped at the LAST\n   * MAX_MATCH_INDEXES entries — navigation starts at the tail-most match.\n   */\n  matchIndexes: number[];\n  /** Uncapped true match count (the \"of M\" in the client counter). */\n  totalMatches: number;\n}\n\n// Structural view of the scanner's parsed message — mirrors the fields\n// handleGetConversation already reads off it, so no scanner import is needed.\nexport interface SearchableMessage {\n  text?: string;\n  uuid?: string | null;\n  isThinking?: boolean;\n  thinkingContent?: string;\n  metadata?: {\n    toolUseBlocks?: Array<{ input?: unknown }>;\n    toolResults?: Array<{ content?: unknown }>;\n  };\n}\n\nconst SNIPPET_CONTEXT = 60;\nconst MAX_MATCH_INDEXES = 1000;\n\nfunction buildSnippet(source: string, matchStart: number, matchLength: number): string {\n  const start = Math.max(0, matchStart - SNIPPET_CONTEXT);\n  const end = Math.min(source.length, matchStart + matchLength + SNIPPET_CONTEXT);\n  const prefix = start > 0 ? \"…\" : \"\";\n  const suffix = end < source.length ? \"…\" : \"\";\n  return `${prefix}${source.slice(start, end).replace(/\\s+/g, \" \").trim()}${suffix}`;\n}\n\n// Thinking and tool payloads are searchable so a hit inside a tool card can\n// still anchor the scroll, even though mobile only highlights plain text.\nfunction extendedBody(m: SearchableMessage): string {\n  const parts: string[] = [];\n  if (m.isThinking && m.thinkingContent) parts.push(m.thinkingContent);\n  for (const b of m.metadata?.toolUseBlocks ?? []) {\n    if (b.input !== undefined) parts.push(JSON.stringify(b.input));\n  }\n  for (const r of m.metadata?.toolResults ?? []) {\n    if (r.content !== undefined) parts.push(JSON.stringify(r.content));\n  }\n  return parts.join(\"\\n\");\n}\n\nfunction collectMatches(\n  messages: SearchableMessage[],\n  needle: string,\n  body: (m: SearchableMessage) => string,\n): number[] {\n  const indexes: number[] = [];\n  for (let i = 0; i < messages.length; i++) {\n    if (body(messages[i]).toLowerCase().includes(needle)) indexes.push(i);\n  }\n  return indexes;\n}\n\n// Resolves a search hit to its matching messages: the anchor is the LAST\n// message chronologically whose body contains the query (case-insensitive\n// literal substring — no tokenization, and no regex built from user input).\n// Text matches are preferred over thinking/tool matches because only text is\n// visually highlightable on mobile.\nexport function findSearchTarget(\n  messages: SearchableMessage[],\n  query: string,\n): SearchTargetMatch | null {\n  const needle = query.toLowerCase();\n\n  let body = (m: SearchableMessage) => m.text ?? \"\";\n  let matches = collectMatches(messages, needle, body);\n  if (matches.length === 0) {\n    body = extendedBody;\n    matches = collectMatches(messages, needle, body);\n  }\n  if (matches.length === 0) return null;\n\n  const anchorIndex = matches[matches.length - 1];\n  const anchorBody = body(messages[anchorIndex]);\n  const at = anchorBody.toLowerCase().indexOf(needle);\n  return {\n    messageIndex: anchorIndex,\n    uuid: messages[anchorIndex].uuid ?? null,\n    snippet: buildSnippet(anchorBody, at, query.length),\n    matchIndexes: matches.slice(-MAX_MATCH_INDEXES),\n    totalMatches: matches.length,\n  };\n}\n","import { createReadStream } from \"node:fs\";\nimport { createInterface } from \"node:readline\";\nimport { type ConversationMessage, parseCodexJsonlLine } from \"@threadbase-sh/scanner\";\n\n/**\n * A conversation whose history begins in ANOTHER file.\n *\n * `codex fork` does not copy the source transcript. It writes a rollout holding\n * only `session_meta`, pointing back at the parent with `forked_from_id` and\n * `forked_from_ordinal_exclusive` — Codex reads the parent up to the cut and\n * carries on. So the agent has the full context while the transcript we serve\n * has none: the fork is not empty, it is elsewhere.\n *\n * Nothing here is Codex-specific by contract. The link is \"this conversation\n * inherits a prefix of that one\", and a second producer would only need its own\n * `readForkLinkFromLine`.\n */\n\n/** Deepest chain (fork of a fork of a …) we will resolve. */\nconst MAX_CHAIN_DEPTH = 8;\n\n/**\n * Resolved prefixes held in memory. Each entry pins a message array, so this is\n * a memory/parse trade: past the cap, every eviction costs a full re-parse of a\n * parent prefix. 8 was low enough that someone with a handful of forks open\n * thrashed it. Raised rather than replaced with a windowed read — see\n * \"Why the split-window read was dropped\" in\n * docs/plans/2026-09-07-inherited-conversation-history.md.\n */\nconst PREFIX_CACHE_MAX = 32;\n\nexport interface InheritedLink {\n  /** Provider-side id of the conversation this one continues. */\n  sourceId: string;\n  /**\n   * The cut, as the provider writes it: a LINE ordinal, exclusive.\n   *\n   * Not a message index. In a real rollout, ordinals count every envelope line\n   * — token counts, task events, turn context — while only a fraction render as\n   * messages. Translating one to the other is `countMessagesBeforeOrdinal`, and\n   * skipping that translation is the silent failure this module exists to\n   * prevent.\n   */\n  ordinalExclusive: number;\n  forkedAt: string | null;\n}\n\nexport interface InheritedHistory extends InheritedLink {\n  sourceFilePath: string | null;\n  /** The inherited messages, oldest first. Empty when the source is unreadable. */\n  messages: ConversationMessage[];\n  /** Set when the source could not be read; `messages` is then empty. */\n  unavailableReason: \"source_missing\" | null;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n  return typeof value === \"object\" && value !== null ? (value as Record<string, unknown>) : null;\n}\n\n/**\n * Read a fork link out of one JSONL line, or null if it carries none.\n *\n * Tolerant by construction, like every provider parser here: malformed JSON, a\n * missing payload, or a partial link (an id with no ordinal) all mean \"no\n * link\", never a throw. A conversation that is not a fork is the overwhelmingly\n * common case and must cost nothing.\n */\nexport function readForkLinkFromLine(line: string): InheritedLink | null {\n  let entry: Record<string, unknown> | null;\n  try {\n    entry = asRecord(JSON.parse(line));\n  } catch {\n    return null;\n  }\n  if (entry?.type !== \"session_meta\") return null;\n\n  const payload = asRecord(entry.payload);\n  if (!payload) return null;\n\n  const sourceId = payload.forked_from_id;\n  const ordinal = payload.forked_from_ordinal_exclusive;\n  if (typeof sourceId !== \"string\" || sourceId.length === 0) return null;\n  if (typeof ordinal !== \"number\" || !Number.isFinite(ordinal) || ordinal < 0) return null;\n\n  const forkedAt = typeof payload.timestamp === \"string\" ? payload.timestamp : null;\n  return { sourceId, ordinalExclusive: ordinal, forkedAt };\n}\n\n/**\n * Whether a file is a fork, and of what, keyed by path.\n *\n * A rollout's first line is written once, at creation, and never rewritten — and\n * the path carries the session uuid, so a path cannot come to mean a different\n * conversation. The answer is therefore permanent, including the \"not a fork\"\n * answer, which is the one nearly every lookup gets.\n *\n * This is what keeps the feature off the hot path: without it every Codex\n * conversation request re-opens the file to re-learn something that cannot have\n * changed, and that latency is not free — it was enough to shift a pre-existing\n * refresh-throttle race in the scanner manager from rare to routine.\n */\nconst linkCache = new Map<string, InheritedLink | null>();\nconst LINK_CACHE_MAX = 512;\n\n/** Test seam: the caches are process-global and would otherwise leak across tests. */\nexport function clearInheritedLinkCache(): void {\n  linkCache.clear();\n}\n\n/**\n * A fork declares itself on its FIRST line, so this reads one line and stops.\n * Returns null for a file that isn't there — an absent file is not a fork.\n */\nexport async function readForkLink(filePath: string): Promise<InheritedLink | null> {\n  const cached = linkCache.get(filePath);\n  if (cached !== undefined) return cached;\n  const link = await readForkLinkUncached(filePath);\n  if (linkCache.size >= LINK_CACHE_MAX) {\n    const oldest = linkCache.keys().next().value;\n    if (oldest !== undefined) linkCache.delete(oldest);\n  }\n  linkCache.set(filePath, link);\n  return link;\n}\n\nasync function readForkLinkUncached(filePath: string): Promise<InheritedLink | null> {\n  return new Promise((resolve) => {\n    let settled = false;\n    const done = (value: InheritedLink | null) => {\n      if (settled) return;\n      settled = true;\n      resolve(value);\n    };\n    let stream: ReturnType<typeof createReadStream>;\n    try {\n      stream = createReadStream(filePath);\n    } catch {\n      done(null);\n      return;\n    }\n    const rl = createInterface({ input: stream, crlfDelay: Infinity });\n    // Closing the readline interface does NOT close the file it reads from, and\n    // this runs on every Codex conversation request — so the stream is destroyed\n    // explicitly. Without it each request leaks a descriptor until GC.\n    const finish = (value: InheritedLink | null) => {\n      // Settle BEFORE closing: rl.close() emits 'close' synchronously, and that\n      // handler resolves with null — so cleaning up first throws the answer away.\n      done(value);\n      rl.close();\n      stream.destroy();\n    };\n    rl.on(\"line\", (line) => {\n      if (line.trim()) finish(readForkLinkFromLine(line));\n    });\n    rl.on(\"close\", () => done(null));\n    rl.on(\"error\", () => finish(null));\n    stream.on(\"error\", () => finish(null));\n  });\n}\n\n/**\n * The messages of `filePath` that precede line ordinal `ordinalExclusive`.\n *\n * The message decision is `parseCodexJsonlLine`, imported rather than\n * reimplemented: it is the same rule the scanner renders with, so the count\n * here cannot drift from what the conversation actually shows. Re-deriving it\n * locally is how a fork ends up displaying turns it never inherited.\n *\n * `ordinal` is read off each line, with the line counter as the fallback for a\n * writer that omits it — in observed rollouts the two are identical (a 331-line\n * file carries ordinals 0–330), so the fallback is a degrade path, not a guess.\n */\nexport async function readMessagesBeforeOrdinal(\n  filePath: string,\n  ordinalExclusive: number,\n): Promise<ConversationMessage[] | null> {\n  const messages: ConversationMessage[] = [];\n  let lineNumber = -1;\n  const stream = createReadStream(filePath);\n  try {\n    const rl = createInterface({ input: stream, crlfDelay: Infinity });\n    for await (const line of rl) {\n      if (!line.trim()) continue;\n      lineNumber++;\n      let ordinal = lineNumber;\n      try {\n        const entry = asRecord(JSON.parse(line));\n        if (entry && typeof entry.ordinal === \"number\") ordinal = entry.ordinal;\n      } catch {\n        // Unparseable line: it renders as nothing either way, and the line\n        // counter still advances, so the cut stays in the right place.\n      }\n      if (ordinal >= ordinalExclusive) {\n        rl.close();\n        break;\n      }\n      const message = parseCodexJsonlLine(line);\n      if (message) messages.push(message);\n    }\n  } catch {\n    return null;\n  } finally {\n    // Same reason as readForkLink: breaking out of the loop leaves the file\n    // open, and this one stops early by design.\n    stream.destroy();\n  }\n  return messages;\n}\n\n/**\n * Prefixes are immutable — everything before the cut is frozen even while the\n * source file keeps growing — so the key needs no mtime and a hit stays valid\n * for the life of the process. Bounded because each entry pins its messages.\n */\nconst prefixCache = new Map<string, ConversationMessage[]>();\n\nfunction cachePrefix(key: string, messages: ConversationMessage[]): void {\n  if (prefixCache.size >= PREFIX_CACHE_MAX) {\n    const oldest = prefixCache.keys().next().value;\n    if (oldest !== undefined) prefixCache.delete(oldest);\n  }\n  prefixCache.set(key, messages);\n}\n\n/** Test seam: the cache is process-global and would otherwise leak across tests. */\nexport function clearInheritedPrefixCache(): void {\n  prefixCache.clear();\n  linkCache.clear();\n}\n\nexport interface ResolveInheritedOptions {\n  /** The conversation being served — the fork, not the source. */\n  filePath: string;\n  /** Resolve a conversation id to its file, or null when it can't be found. */\n  locateSource: (conversationId: string) => Promise<string | null>;\n}\n\n/**\n * Resolve the full inherited prefix for a conversation, following a chain of\n * forks oldest-first.\n *\n * Returns null when the conversation inherits nothing, which is the normal\n * case and costs one line read.\n *\n * A source that cannot be found does NOT fail the request: the fork's own\n * messages are still served, with `unavailableReason` set so the client can say\n * the earlier history is unavailable instead of silently showing a truncated\n * conversation. That degrade is what makes it safe to keep pointing at the\n * source file rather than copying it.\n */\nexport async function resolveInheritedHistory(\n  opts: ResolveInheritedOptions,\n): Promise<InheritedHistory | null> {\n  const link = await readForkLink(opts.filePath);\n  if (!link) return null;\n\n  const messages: ConversationMessage[] = [];\n  const seen = new Set<string>();\n  let current: InheritedLink | null = link;\n  let sourceFilePath: string | null = null;\n  let unavailableReason: \"source_missing\" | null = null;\n  // Each hop's prefix is older than the last, so they are collected newest-first\n  // and reversed once at the end.\n  const segments: ConversationMessage[][] = [];\n\n  for (let depth = 0; current && depth < MAX_CHAIN_DEPTH; depth++) {\n    // A cycle is impossible in a well-formed chain and unbounded work if it\n    // happens anyway. Refuse rather than recurse.\n    if (seen.has(current.sourceId)) {\n      unavailableReason = \"source_missing\";\n      break;\n    }\n    seen.add(current.sourceId);\n\n    const path = await opts.locateSource(current.sourceId);\n    if (depth === 0) sourceFilePath = path;\n    if (!path) {\n      unavailableReason = \"source_missing\";\n      break;\n    }\n\n    const key = `${path}::${current.ordinalExclusive}`;\n    let segment = prefixCache.get(key);\n    if (!segment) {\n      const read = await readMessagesBeforeOrdinal(path, current.ordinalExclusive);\n      if (!read) {\n        unavailableReason = \"source_missing\";\n        break;\n      }\n      segment = read;\n      cachePrefix(key, segment);\n    }\n    segments.push(segment);\n\n    const next: InheritedLink | null = await readForkLink(path);\n    // A source that is itself a fork contributes only the part of ITS history\n    // that precedes this cut — never more than the hop below already took.\n    current = next\n      ? { ...next, ordinalExclusive: Math.min(next.ordinalExclusive, current.ordinalExclusive) }\n      : null;\n  }\n\n  for (let i = segments.length - 1; i >= 0; i--) messages.push(...segments[i]);\n\n  return {\n    ...link,\n    sourceFilePath,\n    messages: unavailableReason ? [] : messages,\n    unavailableReason,\n  };\n}\n","/**\n * Resolve a user-visible title for a ProjectChat row.\n *\n * Mobile (ConversationListItem.tsx) renders `title?.trim() || pathSuffix ||\n * ''`, so when title and projectPath are both blank the row appears empty.\n * This helper produces a non-empty title for every input by falling back\n * through title → slug-ish projectName → path suffix → short id.\n */\nexport function deriveProjectChatTitle(input: {\n  title: string | null | undefined;\n  projectName: string | null | undefined;\n  projectPath: string | null | undefined;\n  id: string;\n}): string {\n  const trimmed = input.title?.trim();\n  if (trimmed) return trimmed;\n  const name = input.projectName?.trim();\n  if (name) return name;\n  const pathSuffix = input.projectPath\n    ? input.projectPath.split(/[/\\\\]/).filter(Boolean).slice(-2).join(\"/\")\n    : \"\";\n  if (pathSuffix) return pathSuffix;\n  return `Untitled · ${input.id.slice(0, 8)}`;\n}\n","import type { ProviderName } from \"../../providers\";\nimport { canonicalizeProviderName, isProviderName } from \"../../providers\";\n\n/**\n * Search query parsing, pagination, and filters (C8).\n *\n * `/api/search` returned `{ hasMore: false, offset: 0, total: results.length }`\n * with all three values hardcoded. That was not merely unimplemented — it was\n * actively wrong: the scanner truncates at `limit`, so a query with more matches\n * than the limit reported `hasMore: false` and `total` equal to the truncated\n * count. A client had no way to learn that results were missing, let alone\n * fetch them.\n *\n * The scanner also already computes a relevance `score` and match `snippets`\n * per result, and the endpoint discarded both — so results arrived in an\n * unexplained order with no indication of *why* anything matched.\n */\n\nexport const DEFAULT_SEARCH_LIMIT = 50;\nexport const MAX_SEARCH_LIMIT = 200;\nexport const MAX_QUERY_LENGTH = 256;\n\nexport interface SearchFilters {\n  provider?: ProviderName;\n  projectPath?: string;\n  branch?: string;\n  /** Inclusive lower bound on last activity, epoch ms. */\n  since?: number;\n  /** Inclusive upper bound on last activity, epoch ms. */\n  until?: number;\n}\n\nexport interface ParsedSearchQuery {\n  q: string;\n  limit: number;\n  offset: number;\n  filters: SearchFilters;\n}\n\nexport class SearchQueryError extends Error {\n  constructor(\n    message: string,\n    readonly code: string,\n  ) {\n    super(message);\n  }\n}\n\nfunction intOr(raw: string | null, fallback: number): number {\n  if (raw === null) return fallback;\n  const n = Number.parseInt(raw, 10);\n  return Number.isFinite(n) ? n : fallback;\n}\n\n/**\n * Parse and validate search parameters.\n *\n * Rejects rather than silently clamping an invalid query, so a client that\n * mistypes a filter learns about it instead of receiving plausible-looking\n * results for a query it did not mean. `limit` is the exception: it is clamped,\n * because an over-large limit is a resource question rather than a\n * misunderstanding, and failing a search over it would be unhelpful.\n */\nexport function parseSearchQuery(params: URLSearchParams): ParsedSearchQuery {\n  const q = (params.get(\"q\") ?? \"\").trim();\n  if (!q) {\n    throw new SearchQueryError(\"Missing query parameter: q\", \"invalid_query\");\n  }\n  if (q.length > MAX_QUERY_LENGTH) {\n    throw new SearchQueryError(`Query exceeds ${MAX_QUERY_LENGTH} characters`, \"query_too_long\");\n  }\n\n  const limit = Math.min(\n    Math.max(intOr(params.get(\"limit\"), DEFAULT_SEARCH_LIMIT), 1),\n    MAX_SEARCH_LIMIT,\n  );\n  const offset = Math.max(intOr(params.get(\"offset\"), 0), 0);\n\n  const filters: SearchFilters = {};\n\n  const provider = params.get(\"provider\");\n  if (provider !== null) {\n    if (!isProviderName(provider)) {\n      throw new SearchQueryError(`Unknown provider: ${provider}`, \"invalid_filter\");\n    }\n    filters.provider = canonicalizeProviderName(provider) ?? provider;\n  }\n\n  const projectPath = params.get(\"projectPath\");\n  if (projectPath) filters.projectPath = projectPath;\n\n  const branch = params.get(\"branch\");\n  if (branch) filters.branch = branch;\n\n  for (const [key, field] of [\n    [\"since\", \"since\"],\n    [\"until\", \"until\"],\n  ] as const) {\n    const raw = params.get(key);\n    if (raw === null) continue;\n    const ms = Date.parse(raw);\n    if (Number.isNaN(ms)) {\n      throw new SearchQueryError(`Invalid ${key}: expected an ISO 8601 date`, \"invalid_filter\");\n    }\n    filters[field] = ms;\n  }\n\n  if (filters.since != null && filters.until != null && filters.since > filters.until) {\n    throw new SearchQueryError(\"`since` must not be after `until`\", \"invalid_filter\");\n  }\n\n  return { q, limit, offset, filters };\n}\n\n/** A search result as returned to clients, after adaptation. */\nexport interface AdaptedResult {\n  projectPath?: string;\n  branch?: string;\n  provider?: string;\n  lastActivity?: string | number | null;\n}\n\n/**\n * Apply the filters the scanner cannot express itself.\n *\n * The scanner's SearchOptions supports `provider` but not project, branch, or\n * date bounds, so those are applied here. Filtering after the fact means the\n * scanner's own limit must be raised before slicing — see `handleSearch` — or\n * a filter would silently drop results that a later page should have contained.\n */\nexport function applyFilters<T extends AdaptedResult>(results: T[], filters: SearchFilters): T[] {\n  return results.filter((r) => {\n    if (filters.provider && r.provider !== filters.provider) return false;\n    if (filters.projectPath && r.projectPath !== filters.projectPath) return false;\n    if (filters.branch && r.branch !== filters.branch) return false;\n\n    if (filters.since != null || filters.until != null) {\n      const ts = r.lastActivity == null ? Number.NaN : new Date(r.lastActivity).getTime();\n      // A result with no usable timestamp cannot be shown to satisfy a date\n      // bound, so exclude it rather than guessing.\n      if (Number.isNaN(ts)) return false;\n      if (filters.since != null && ts < filters.since) return false;\n      if (filters.until != null && ts > filters.until) return false;\n    }\n    return true;\n  });\n}\n\nexport interface Page<T> {\n  items: T[];\n  total: number;\n  offset: number;\n  hasMore: boolean;\n}\n\n/**\n * Slice a filtered result set into a page.\n *\n * `total` is the count AFTER filtering and BEFORE slicing, and `hasMore` is\n * derived from it — the two values the previous implementation hardcoded to\n * `results.length` and `false`.\n */\nexport function paginate<T>(results: T[], offset: number, limit: number): Page<T> {\n  const items = results.slice(offset, offset + limit);\n  return {\n    items,\n    total: results.length,\n    offset,\n    hasMore: offset + items.length < results.length,\n  };\n}\n","import { type Conversation, parseCursorJsonlLine } from \"@threadbase-sh/scanner\";\nimport { existsSync, watch as fsWatch, readdirSync, readFileSync, statSync } from \"fs\";\nimport { homedir } from \"os\";\nimport { basename, join } from \"path\";\nimport type { ConversationCache } from \"./conversation-cache\";\nimport { cursorAgentTranscriptsDir } from \"./cursor-transcript-watch\";\nimport type { CacheMetadataRepository } from \"./db/repositories/cacheMetadata.repository\";\nimport type { ConversationsRepository } from \"./db/repositories/conversations.repository\";\nimport type { ManagedSessionsRepository } from \"./db/repositories/managed-sessions.repository\";\nimport type { ProjectsRepository } from \"./db/repositories/projects.repository\";\nimport type { SessionsRepository } from \"./db/repositories/sessions.repository\";\nimport type { LiveSessionManager } from \"./live-session-manager\";\nimport { getLogger } from \"./logger\";\nimport { CLAUDE_CODE_PROVIDER, CODEX_CLI_PROVIDER, CURSOR_PROVIDER } from \"./providers\";\nimport type { ScannerManager } from \"./scanner-manager\";\nimport type { ConversationWatcher } from \"./services/conversations/conversationWatcher\";\nimport type { SessionStore } from \"./session-store\";\nimport type { WSHub } from \"./ws-hub\";\n\n/**\n * How long a transcript watcher keeps waiting for the file its provider will\n * write. Not a measured number: it arrived as `// give up after 2 minutes` in\n * 76cdf9f2, when these watchers existed to re-key a placeholder session id to\n * the real UUID — a mechanism that no longer exists. It survives only as a\n * bound on an abandoned session's watch, and it is deliberately measured from\n * the user's first turn rather than from the spawn, because that turn is what\n * causes the file to exist. Both watchers re-arm it per turn and neither applies\n * it before the first one. See the notes in watchForJsonl/watchForCodexRollout.\n */\nexport const TRANSCRIPT_WATCH_DEADLINE_MS = 120_000;\n\n/**\n * Everything SessionWatchers reads from the server. Collaborators constructed\n * once in the server constructor are passed by reference; the ones opened\n * during listen() (and rebound by the integrity monitor's reset-and-rescan) are\n * thunks, for the same reason ApiDeps passes `cache: () => ConversationCache | null`.\n *\n * `broadcastConversationLines` / `findConversationByUuid` / `ptyAttachedIds`\n * stay late-bound calls back into the server rather than moved code: they are\n * server methods with their own dependencies (and tests spy on them).\n */\nexport type SessionWatchersDeps = {\n  ptyManager: LiveSessionManager;\n  sessionStore: SessionStore;\n  wsHub: WSHub;\n  fileWatcher: ConversationWatcher;\n  /** sessionId → JSONL filePath. Owned by the server; mutated in place here. */\n  sessionFileMap: Map<string, string>;\n  scannerManager: ScannerManager;\n  codexRoots: string[];\n  /** Cursor project roots (`~/.cursor/projects`); empty disables Cursor binding. */\n  cursorRoots: string[];\n  cache: () => ConversationCache | null;\n  projectsRepo: () => ProjectsRepository | null;\n  conversationsRepo: () => ConversationsRepository | null;\n  sessionsRepo: () => SessionsRepository | null;\n  cacheMetadataRepo: () => CacheMetadataRepository | null;\n  managedSessionsRepo: () => ManagedSessionsRepository | null;\n  findConversationByUuid: (uuid: string) => Promise<Conversation | null>;\n  broadcastConversationLines: (\n    sessionId: string,\n    lines: string[],\n    seqs?: (number | null)[] | null,\n  ) => void;\n  ptyAttachedIds: () => Set<string>;\n};\n\n/**\n * Binds a live session to the transcript file its provider writes: finds the\n * JSONL (Claude), rollout (Codex), or agent-transcripts run (Cursor), starts\n * the tail watcher, replays whatever was written before the watcher attached,\n * and links the session to its project.\n *\n * Extracted from StreamerServer so watcher work stops editing the server file\n * (see docs/plans/2026-07-12-server-ts-split.md, PR 5).\n */\nexport class SessionWatchers {\n  private log = getLogger(\"server\");\n\n  constructor(private deps: SessionWatchersDeps) {}\n\n  // ─── Project linking ─────────────────────────────────────────────\n\n  linkSessionToProject(sessionId: string, projectPath: string, filePath: string): void {\n    const projectsRepo = this.deps.projectsRepo();\n    const conversationsRepo = this.deps.conversationsRepo();\n    const sessionsRepo = this.deps.sessionsRepo();\n    const cache = this.deps.cache();\n    if (!projectsRepo || !conversationsRepo || !sessionsRepo || !cache) {\n      return;\n    }\n    try {\n      const project = projectsRepo.upsertProjectByPath(projectPath, {\n        lastConversationId: sessionId,\n        lastConversationCreatedAt: new Date().toISOString(),\n      });\n      // The conversation row may not exist yet (Claude is still writing the\n      // JSONL). Best-effort: only link if the row is present.\n      if (cache.hasConversation(sessionId)) {\n        conversationsRepo.updateConversationProjectId({\n          conversationId: sessionId,\n          projectId: project.id,\n        });\n      }\n      sessionsRepo.updateSessionProjectId({\n        sessionId,\n        projectId: project.id,\n      });\n      const cacheMetadataRepo = this.deps.cacheMetadataRepo();\n      if (cacheMetadataRepo) {\n        cacheMetadataRepo.setCacheMetadata(\"last_conversation_id\", sessionId);\n      }\n    } catch (err) {\n      const message = err instanceof Error ? err.message : String(err);\n      this.log.warn(`[projects] failed to link session to project: ${message}`, {\n        event: \"session.project_link_failed\",\n        sessionId,\n        projectPath,\n        filePath,\n        error: message,\n      });\n    }\n  }\n\n  // ─── File Watcher Wiring ─────────────────────────────────────────\n\n  // `historyId` is the id the provider filed the history under, which for a\n  // fresh Codex session is its rollout id rather than our placeholder. The map\n  // stays keyed by `sessionId` — that is what broadcasts resolve against.\n  async watchConversationFile(sessionId: string, historyId = sessionId): Promise<void> {\n    try {\n      const conversation = await this.deps.findConversationByUuid(historyId);\n      if (conversation?.filePath) {\n        this.deps.sessionFileMap.set(sessionId, conversation.filePath);\n        this.deps.fileWatcher.watch(conversation.filePath);\n      }\n    } catch {\n      // Best-effort: if we can't find the JSONL file, raw terminal output still works\n    }\n  }\n\n  // Read just the `sessionId` field from a JSONL's first line, used by the\n  // watchForJsonl fallback to confirm a candidate file's identity before\n  // binding it. Reads only up to the first newline so a large actively-written\n  // file isn't slurped in full.\n  readFirstLineSessionId(filePath: string): string | null {\n    try {\n      const content = readFileSync(filePath, \"utf8\");\n      const nl = content.indexOf(\"\\n\");\n      const firstLine = nl === -1 ? content : content.slice(0, nl);\n      if (!firstLine.trim()) return null;\n      const obj = JSON.parse(firstLine);\n      return typeof obj.sessionId === \"string\" ? obj.sessionId : null;\n    } catch {\n      return null;\n    }\n  }\n\n  // Watch the project directory for the JSONL file Claude creates for sessionId.\n  // Once found, wire up structured event streaming. No rekeying needed — the UUID\n  // was passed to Claude via --session-id so the filename matches from the start.\n  watchForJsonl(sessionId: string, projectPath: string): void {\n    const encoded = projectPath.replace(/[/\\\\:.]/g, \"-\");\n    const projectsDir = join(homedir(), \".claude\", \"projects\", encoded);\n    const expectedFile = `${sessionId}.jsonl`;\n    const filePath = join(projectsDir, expectedFile);\n    const armedAt = Date.now();\n    let deadline = armedAt + TRANSCRIPT_WATCH_DEADLINE_MS;\n    let seenPrompts = 0;\n\n    let watcher: ReturnType<typeof fsWatch> | null = null;\n    const cleanup = () => {\n      try {\n        watcher?.close();\n      } catch {\n        /* ignore */\n      }\n    };\n\n    const tryWire = () => {\n      if (!this.deps.ptyManager.hasSession(sessionId)) {\n        cleanup();\n        return;\n      }\n\n      // Primary: Claude named the file after the session UUID\n      let resolvedFilePath = existsSync(filePath) ? filePath : null;\n\n      // Fallback: the `${sessionId}.jsonl` file hasn't appeared yet. Only bind a\n      // candidate whose identity actually matches this session — its filename\n      // stem OR its first-line `sessionId` field must equal our session id.\n      // Claude 'resume' APPENDS to the SAME file with the SAME sessionId\n      // (observed on Claude Code v2.1.215); the previous \"resume writes a NEW\n      // UUID file\" assumption let this bind whichever JSONL was most recently\n      // touched — capturing an actively-written FOREIGN conversation and\n      // re-broadcasting its whole transcript under our session id. mtime is now\n      // only a tiebreaker among already-matching candidates.\n      if (!resolvedFilePath && existsSync(projectsDir)) {\n        try {\n          const now = Date.now();\n          const match = readdirSync(projectsDir)\n            .filter((f) => f.endsWith(\".jsonl\"))\n            .map((f) => ({ f, mtime: statSync(join(projectsDir, f)).mtimeMs }))\n            .filter(({ mtime }) => now - mtime < 5_000)\n            .filter(\n              ({ f }) =>\n                basename(f, \".jsonl\") === sessionId ||\n                this.readFirstLineSessionId(join(projectsDir, f)) === sessionId,\n            )\n            .sort((a, b) => b.mtime - a.mtime)[0];\n          if (match) resolvedFilePath = join(projectsDir, match.f);\n        } catch {\n          /* ignore */\n        }\n      }\n\n      if (!resolvedFilePath) {\n        // The deadline bounds how long we WAIT, not whether we accept a file\n        // that has arrived. Claude writes <sessionId>.jsonl only on the user's\n        // FIRST turn, so what this races is human think time: across a 20.5-day\n        // production log the gap from pty.ready to the first prompt ran 3.6s to\n        // 405.7s, and 17% of spawns were past 120s.\n        //\n        // So the deadline runs from the TURN, never from the spawn, and before\n        // the first turn it does not run at all. Two separate reasons:\n        //\n        //  - Before any prompt the file CANNOT exist yet, so failing to find it\n        //    is not evidence of anything and must not end the watch. This is\n        //    what `fsWatch(projectsDir, …)` made dangerous: the handle is on the\n        //    whole project directory (406 transcripts in one real project), so\n        //    ANY neighbouring session writing its own JSONL fired tryWire, found\n        //    ours absent, and closed our watch for good — after which the user's\n        //    own first prompt bound nothing. The session then silently loses live\n        //    line streaming; `locateJsonlPath` rung 4 still answers REST reads,\n        //    which is why this never surfaced as a visible failure.\n        //  - What the deadline was ever bounding is an ABANDONED session's watch,\n        //    and abandonment is already covered above: `hasSession()` ends the\n        //    watch when the PTY goes (hold, grace, or the 6h idle reaper).\n        //\n        // Past the first turn the deadline is meaningful again — there the file\n        // is genuinely overdue — and it re-arms per turn, matching the identical\n        // reasoning in watchForCodexRollout.\n        const prompts = this.deps.sessionStore.getManaged(sessionId)?.promptCount ?? 0;\n        if (prompts > seenPrompts) {\n          seenPrompts = prompts;\n          deadline = Date.now() + TRANSCRIPT_WATCH_DEADLINE_MS;\n        }\n        if (prompts === 0) return;\n        if (Date.now() > deadline) {\n          this.log.warn(\n            `[startFresh] gave up watching for the JSONL of ${sessionId}`,\n            {\n              event: \"session.transcript_watch_expired\",\n              sessionId,\n              provider: CLAUDE_CODE_PROVIDER,\n              projectPath,\n              waitedMs: Date.now() - armedAt,\n            },\n            \"pino\",\n          );\n          cleanup();\n        }\n        return;\n      }\n\n      cleanup();\n      this.deps.sessionFileMap.set(sessionId, resolvedFilePath);\n\n      // Broadcast any lines already written before the watcher started — Claude\n      // can finish writing the JSONL in the same tick as the watcher wires up,\n      // so chokidar won't emit a change event for those lines. Dump BEFORE\n      // starting the watcher: fileWatcher.watch() seeds its byte offset at the\n      // file's current size, so seeding before the dump makes the next append\n      // re-ship every dumped line (double broadcast). Seeding after the dump\n      // means the watcher starts at the post-dump EOF.\n      try {\n        const existing = readFileSync(resolvedFilePath, \"utf8\").split(\"\\n\").filter(Boolean);\n        if (existing.length > 0) {\n          this.deps.broadcastConversationLines(sessionId, existing);\n        }\n      } catch {\n        /* ignore — file may not be readable yet; watcher will catch future writes */\n      }\n      this.deps.fileWatcher.watch(resolvedFilePath);\n\n      this.deps.scannerManager.markStaleOrDrop();\n      this.linkSessionToProject(sessionId, projectPath, resolvedFilePath);\n      this.deps.cache()?.markAsStreamer(sessionId);\n      this.log.info(\n        `[startFresh] wired JSONL for ${sessionId}`,\n        { event: \"session.jsonl_wired\", sessionId, filePath: resolvedFilePath },\n        \"pino\",\n      );\n    };\n\n    tryWire();\n    if (this.deps.sessionFileMap.has(sessionId)) return; // already found\n\n    try {\n      require(\"fs\").mkdirSync(projectsDir, { recursive: true });\n      watcher = fsWatch(projectsDir, tryWire);\n      watcher.on(\"error\", cleanup);\n    } catch {\n      // fs.watch not available (e.g. in tests), ignore\n    }\n  }\n\n  // Codex-equivalent of watchForJsonl(). Differs because Codex has no\n  // filename-encoded session id (it assigns its own persisted id) and its\n  // rollout files live under a date-nested directory\n  // (~/.codex/sessions/<YYYY>/<MM>/<DD>/rollout-*.jsonl) that Codex creates\n  // itself — it may not exist yet when this function is first called, so we\n  // poll rather than fs.watch a not-yet-existent directory.\n  //\n  // The rollout file is created LAZILY, on the user's first turn — not \"within\n  // ~1s of process spawn\", as this comment claimed until the deadline was\n  // investigated. Verified against Codex CLI 0.147.0 on a bound production\n  // rollout: the filename and `session_meta.payload.timestamp` both read the\n  // session-creation time (08:05:49) while the envelope `timestamp` of line 0\n  // reads the first input (08:07:15). Every rollout binding observed in a\n  // 20.5-day log landed ~100ms after the first input, never at spawn, with gaps\n  // of 60.2s / 75.6s / 86.8s. So this races human think time, and unlike the\n  // Claude side there is no recovery: `locateJsonlPath` has no rung that can\n  // reconstruct `rollout-<ts>-<uuid>.jsonl` from a placeholder session id, and\n  // an unbound Codex session also loses resume, fork and boot rehydration.\n  watchForCodexRollout(sessionId: string, projectPath: string): void {\n    let deadline = Date.now() + TRANSCRIPT_WATCH_DEADLINE_MS;\n    let seenPrompts = 0;\n    const now = new Date();\n    const dateDir = join(\n      String(now.getFullYear()),\n      String(now.getMonth() + 1).padStart(2, \"0\"),\n      String(now.getDate()).padStart(2, \"0\"),\n    );\n\n    // When this placeholder session started. Used to reject a stale same-cwd\n    // rollout that Codex wrote before this session launched — the cwd match\n    // alone can't tell a fresh rollout from a seconds-old one. 5s of slack\n    // absorbs clock skew between our clock and Codex's session_meta timestamp.\n    const sessionStartedAtMs =\n      (this.deps.sessionStore.getManaged(sessionId)?.startedAt?.getTime() ?? Date.now()) - 5_000;\n\n    let intervalHandle: ReturnType<typeof setInterval> | null = null;\n    const cleanup = () => {\n      if (intervalHandle) clearInterval(intervalHandle);\n      intervalHandle = null;\n    };\n\n    // Read a candidate file's session_meta first line; accept only if its cwd\n    // matches this session's projectPath and it was created at/after this\n    // session started. Guards against picking up an unrelated concurrent Codex\n    // session's rollout, or a stale same-cwd rollout from an earlier run, in\n    // the same date-nested directory. Returns { id, createdAtMs } or null.\n    const matchesProjectPath = (\n      candidatePath: string,\n    ): { id: string; createdAtMs: number } | null => {\n      try {\n        const firstLine = readFileSync(candidatePath, \"utf8\").split(\"\\n\", 1)[0];\n        if (!firstLine) return null;\n        const parsed = JSON.parse(firstLine);\n        if (parsed?.type !== \"session_meta\") return null;\n        const payload = parsed.payload ?? {};\n        if (payload.cwd !== projectPath) return null;\n        if (typeof payload.id !== \"string\") return null;\n        // payload.timestamp is Codex's session-creation time; fall back to the\n        // outer envelope timestamp if absent.\n        const createdIso = payload.timestamp ?? parsed.timestamp;\n        const createdAtMs = typeof createdIso === \"string\" ? Date.parse(createdIso) : Number.NaN;\n        if (Number.isNaN(createdAtMs) || createdAtMs < sessionStartedAtMs) return null;\n        return { id: payload.id, createdAtMs };\n      } catch {\n        return null;\n      }\n    };\n\n    const tryWire = () => {\n      if (!this.deps.ptyManager.hasSession(sessionId)) {\n        cleanup();\n        return;\n      }\n      // The turn is what creates the rollout, so the deadline runs from the\n      // turn. An abandoned session still stops polling 120s after the spawn,\n      // which is the only thing the deadline was ever bounding.\n      // ponytail: promptCount moves only on POST /api/sessions/:id/input, so a\n      // first prompt composed entirely of raw sendKeys keystrokes is not\n      // covered — every first prompt in the log went through that endpoint.\n      // Widen to a timestamp on the session if that ever stops being true.\n      const prompts = this.deps.sessionStore.getManaged(sessionId)?.promptCount ?? 0;\n      if (prompts > seenPrompts) {\n        seenPrompts = prompts;\n        deadline = Date.now() + TRANSCRIPT_WATCH_DEADLINE_MS;\n      }\n      if (Date.now() > deadline) {\n        this.log.warn(\n          `[startFresh] gave up watching for the Codex rollout of ${sessionId}`,\n          {\n            event: \"session.transcript_watch_expired\",\n            sessionId,\n            provider: CODEX_CLI_PROVIDER,\n            projectPath,\n            promptCount: prompts,\n          },\n          \"pino\",\n        );\n        cleanup();\n        return;\n      }\n\n      // Codex ids already bound to another live placeholder — never bind two\n      // placeholders to the same rollout (e.g. two Codex sessions started in\n      // the same project inside the mtime window).\n      const boundElsewhere = new Set(\n        this.deps.sessionStore\n          .listManaged()\n          .filter((s) => s.id !== sessionId && s.boundConversationId != null)\n          .map((s) => s.boundConversationId as string),\n      );\n\n      for (const root of this.deps.codexRoots) {\n        const sessionsDir = join(root, dateDir);\n        if (!existsSync(sessionsDir)) continue;\n\n        let candidateFiles: string[];\n        try {\n          candidateFiles = readdirSync(sessionsDir).filter((f) => f.endsWith(\".jsonl\"));\n        } catch {\n          continue;\n        }\n\n        const nowMs = Date.now();\n        const recentCandidates = candidateFiles\n          .map((f) => ({ f, mtime: statSync(join(sessionsDir, f)).mtimeMs }))\n          .filter(({ mtime }) => nowMs - mtime < 10_000)\n          .sort((a, b) => b.mtime - a.mtime);\n\n        for (const { f } of recentCandidates) {\n          const candidatePath = join(sessionsDir, f);\n          const match = matchesProjectPath(candidatePath);\n          if (!match) continue;\n          if (boundElsewhere.has(match.id)) continue;\n          const codexSessionId = match.id;\n\n          cleanup();\n          this.deps.sessionStore.updateManaged(sessionId, {\n            boundConversationId: codexSessionId,\n          });\n          // Durably too: after a restart the registry row is the only place\n          // this binding survives, and it is the only id `codex resume` accepts.\n          try {\n            this.deps.managedSessionsRepo()?.recordBinding(sessionId, codexSessionId);\n          } catch (err) {\n            this.log.warn(\"[registry] failed to record Codex rollout binding\", {\n              event: \"registry.binding_write_failed\",\n              sessionId,\n              err,\n            });\n          }\n\n          // Wire the bound rollout into the live update path: tail it for\n          // structured events and replay anything already written before the\n          // watcher attached (mirrors watchForJsonl()). Without this the bound\n          // Codex JSONL is never live-streamed to clients.\n          this.deps.sessionFileMap.set(sessionId, candidatePath);\n          this.deps.fileWatcher.watch(candidatePath);\n          try {\n            const existing = readFileSync(candidatePath, \"utf8\").split(\"\\n\").filter(Boolean);\n            if (existing.length > 0) {\n              this.deps.broadcastConversationLines(sessionId, existing);\n            }\n          } catch {\n            /* ignore — file may not be readable yet; watcher will catch future writes */\n          }\n\n          this.deps.scannerManager.markStaleOrDrop();\n          this.linkSessionToProject(sessionId, projectPath, candidatePath);\n          this.deps.cache()?.markAsStreamer(sessionId);\n\n          // Push the binding to subscribers now — the async discovery means the\n          // session_update at start time carried no boundConversationId.\n          const resp = this.deps.sessionStore.get(sessionId, this.deps.ptyAttachedIds());\n          if (resp) {\n            this.deps.wsHub.broadcast({ type: \"session_update\", session: resp });\n          }\n\n          this.log.info(\n            `[startFresh] bound Codex rollout for ${sessionId}`,\n            {\n              event: \"session.codex_rollout_bound\",\n              sessionId,\n              boundConversationId: codexSessionId,\n              filePath: candidatePath,\n            },\n            \"pino\",\n          );\n          return;\n        }\n      }\n    };\n\n    tryWire();\n    if (!intervalHandle && Date.now() <= deadline) {\n      // Only keep polling if tryWire() didn't already find + cleanup() the match.\n      const alreadyBound =\n        this.deps.sessionStore.getManaged(sessionId)?.boundConversationId != null;\n      if (!alreadyBound) {\n        intervalHandle = setInterval(tryWire, 250);\n      }\n    }\n  }\n\n  // Cursor-equivalent of watchForCodexRollout(). Cursor mints its own run id\n  // under `~/.cursor/projects/<slug>/agent-transcripts/<runId>/<runId>.jsonl`\n  // and never writes our placeholder into the file (no `sessionId` field).\n  // Without this bind, mobile keeps deep-linking to the placeholder while REST\n  // history is indexed only under the run id — GET /api/conversations/:id 404s\n  // after the empty-unused window closes. Same two-id shape as Codex:\n  // `id`/`conversationId` stay the placeholder; `boundConversationId` is the\n  // run id resume and history use.\n  watchForCursorTranscript(sessionId: string, projectPath: string): void {\n    if (this.deps.cursorRoots.length === 0) return;\n\n    let deadline = Date.now() + TRANSCRIPT_WATCH_DEADLINE_MS;\n    let seenPrompts = 0;\n    const sessionStartedAtMs =\n      (this.deps.sessionStore.getManaged(sessionId)?.startedAt?.getTime() ?? Date.now()) - 5_000;\n    // Threadbase uploads for this PTY land under `.threadbase-uploads/<sessionId>/`\n    // and Cursor's first user turn often @-mentions those paths — a strong signal\n    // when several chats share one project slug.\n    const uploadMarker = `.threadbase-uploads/${sessionId}/`;\n\n    let intervalHandle: ReturnType<typeof setInterval> | null = null;\n    const cleanup = () => {\n      if (intervalHandle) clearInterval(intervalHandle);\n      intervalHandle = null;\n    };\n\n    const tryWire = () => {\n      if (!this.deps.ptyManager.hasSession(sessionId)) {\n        cleanup();\n        return;\n      }\n\n      const prompts = this.deps.sessionStore.getManaged(sessionId)?.promptCount ?? 0;\n      if (prompts > seenPrompts) {\n        seenPrompts = prompts;\n        deadline = Date.now() + TRANSCRIPT_WATCH_DEADLINE_MS;\n      }\n      // Mirror Claude: the file cannot exist before the first turn, so failing\n      // to find it then is not abandonment. Codex still expires from spawn; Cursor\n      // follows the Claude contract because human think time was the production\n      // failure mode (empty 200 → permanent 404 once promptCount > 0 and no bind).\n      if (prompts === 0) return;\n      if (Date.now() > deadline) {\n        this.log.warn(\n          `[startFresh] gave up watching for the Cursor transcript of ${sessionId}`,\n          {\n            event: \"session.transcript_watch_expired\",\n            sessionId,\n            provider: CURSOR_PROVIDER,\n            projectPath,\n            promptCount: prompts,\n          },\n          \"pino\",\n        );\n        cleanup();\n        return;\n      }\n\n      const boundElsewhere = new Set(\n        this.deps.sessionStore\n          .listManaged()\n          .filter((s) => s.id !== sessionId && s.boundConversationId != null)\n          .map((s) => s.boundConversationId as string),\n      );\n\n      type Candidate = { runId: string; filePath: string; mtime: number; mentionsUpload: boolean };\n      const candidates: Candidate[] = [];\n      const nowMs = Date.now();\n\n      for (const root of this.deps.cursorRoots) {\n        const transcriptsDir = cursorAgentTranscriptsDir(root, projectPath);\n        if (!existsSync(transcriptsDir)) continue;\n\n        let runDirs: string[];\n        try {\n          runDirs = readdirSync(transcriptsDir, { withFileTypes: true })\n            .filter((e) => e.isDirectory())\n            .map((e) => e.name);\n        } catch {\n          continue;\n        }\n\n        for (const runId of runDirs) {\n          if (boundElsewhere.has(runId)) continue;\n          const filePath = join(transcriptsDir, runId, `${runId}.jsonl`);\n          if (!existsSync(filePath)) continue;\n\n          let mtime: number;\n          try {\n            mtime = statSync(filePath).mtimeMs;\n          } catch {\n            continue;\n          }\n          // Same recency window as Codex: the poll is continuous, so a just-\n          // written file is always recent when it appears.\n          if (nowMs - mtime >= 10_000) continue;\n          if (mtime < sessionStartedAtMs) continue;\n\n          let mentionsUpload = false;\n          try {\n            // Cap the read — we only need the opening user turn for the upload\n            // path marker, not the whole transcript.\n            const head = readFileSync(filePath, { encoding: \"utf8\" }).slice(0, 8_192);\n            mentionsUpload = head.includes(uploadMarker);\n          } catch {\n            continue;\n          }\n\n          candidates.push({ runId, filePath, mtime, mentionsUpload });\n        }\n      }\n\n      if (candidates.length === 0) return;\n\n      candidates.sort((a, b) => {\n        if (a.mentionsUpload !== b.mentionsUpload) return a.mentionsUpload ? -1 : 1;\n        return b.mtime - a.mtime;\n      });\n      const match = candidates[0];\n\n      cleanup();\n      this.deps.sessionStore.updateManaged(sessionId, {\n        boundConversationId: match.runId,\n      });\n      try {\n        this.deps.managedSessionsRepo()?.recordBinding(sessionId, match.runId);\n      } catch (err) {\n        this.log.warn(\"[registry] failed to record Cursor transcript binding\", {\n          event: \"registry.binding_write_failed\",\n          sessionId,\n          err,\n        });\n      }\n\n      this.deps.sessionFileMap.set(sessionId, match.filePath);\n      this.deps.fileWatcher.watch(match.filePath);\n      try {\n        const existing = readFileSync(match.filePath, \"utf8\").split(\"\\n\").filter(Boolean);\n        if (existing.length > 0) {\n          // The replay starts at the top of the file, so each line's message\n          // index is its count among the lines that parse — the numbering the\n          // offset index and REST use. It goes into the Cursor uuid, which is\n          // what lets the client match these against their history copies.\n          let next = 0;\n          const seqs = existing.map((l) => (parseCursorJsonlLine(l) ? next++ : null));\n          this.deps.broadcastConversationLines(sessionId, existing, seqs);\n        }\n      } catch {\n        /* ignore — file may not be readable yet; watcher will catch future writes */\n      }\n\n      this.deps.scannerManager.markStaleOrDrop();\n      this.linkSessionToProject(sessionId, projectPath, match.filePath);\n      this.deps.cache()?.markAsStreamer(sessionId);\n\n      const resp = this.deps.sessionStore.get(sessionId, this.deps.ptyAttachedIds());\n      if (resp) {\n        this.deps.wsHub.broadcast({ type: \"session_update\", session: resp });\n      }\n\n      this.log.info(\n        `[startFresh] bound Cursor transcript for ${sessionId}`,\n        {\n          event: \"session.cursor_transcript_bound\",\n          sessionId,\n          boundConversationId: match.runId,\n          filePath: match.filePath,\n        },\n        \"pino\",\n      );\n    };\n\n    tryWire();\n    if (!intervalHandle) {\n      const alreadyBound =\n        this.deps.sessionStore.getManaged(sessionId)?.boundConversationId != null;\n      if (!alreadyBound) {\n        intervalHandle = setInterval(tryWire, 250);\n      }\n    }\n  }\n}\n","import { existsSync, readdirSync } from \"fs\";\nimport { join } from \"path\";\n\n/**\n * Cursor stores projects as `~/.cursor/projects/<slug>` where `slug` is the\n * absolute project path with separators (and a Windows drive colon) replaced by\n * `-`, and a leading POSIX `/` dropped:\n * `/Users/me/app` → `Users-me-app`, `C:\\Users\\me\\app` → `C-Users-me-app`.\n * Matches what `@threadbase-sh/scanner`'s `decodeCursorProjectSlug` reverses.\n */\nexport function cursorProjectSlug(projectPath: string): string {\n  // Drop the drive colon before turning separators into `-`, otherwise\n  // `C:\\Users\\me` becomes `C--Users-me` (`:` → `-`, then `/` → `-`).\n  return projectPath.replace(/\\\\/g, \"/\").replace(/^\\/+/, \"\").replace(/:/g, \"\").replace(/\\//g, \"-\");\n}\n\n/**\n * Cursor `cursorRoots` default to `~/.cursor/projects`. Watching that root\n * recursively also sees canvases and `node_modules` and will EMFILE a machine\n * with many Cursor worktrees. Only the `agent-transcripts` folders matter.\n */\nexport function listCursorTranscriptWatchDirs(roots: readonly string[]): string[] {\n  const dirs: string[] = [];\n  for (const dir of roots) {\n    if (!existsSync(dir)) continue;\n    for (const slug of readdirSync(dir, { withFileTypes: true })) {\n      if (!slug.isDirectory()) continue;\n      const transcripts = join(dir, slug.name, \"agent-transcripts\");\n      if (existsSync(transcripts)) dirs.push(transcripts);\n    }\n  }\n  return dirs;\n}\n\n/** `cursorRoots/<slug>/agent-transcripts` for a live session's project path. */\nexport function cursorAgentTranscriptsDir(cursorRoot: string, projectPath: string): string {\n  return join(cursorRoot, cursorProjectSlug(projectPath), \"agent-transcripts\");\n}\n","import { createHash } from \"node:crypto\";\n\n/**\n * Inputs that uniquely identify a conversation's current state for the\n * purpose of a conditional fetch. These all live on the parsed `Conversation`\n * and must be read AFTER `findConversationByUuid`'s staleness refresh — never\n * from a pre-refresh snapshot — so the validator reflects the same state the\n * response body would.\n */\nexport interface ConversationEtagInput {\n  filePath: string;\n  messageCount: number;\n  timestamp: string;\n}\n\n/**\n * Derive a stable, opaque ETag for a conversation. The client never parses it;\n * it only echoes the value back via `If-None-Match`. Wrapping the inputs in a\n * hash keeps the formula changeable without the client caring.\n */\nexport function computeConversationEtag({\n  filePath,\n  messageCount,\n  timestamp,\n}: ConversationEtagInput): string {\n  const digest = createHash(\"sha1\")\n    .update(`${filePath}:${messageCount}:${timestamp}`)\n    .digest(\"hex\")\n    .slice(0, 16);\n  return `\"${digest}\"`;\n}\n","/**\n * The scanner fires onProgress once per file, so a large scan would otherwise\n * broadcast thousands of scan_progress WebSocket frames. This throttle collapses\n * them to at most one per whole-percent step, plus a guaranteed final frame when\n * the scan completes (scanned === total). Caps frames at ~101 regardless of the\n * file count, while always delivering the terminal 100% update.\n *\n * Returns a predicate: call it with each (scanned, total) tick; it returns true\n * when that tick should be broadcast. Stateful — create one per scan.\n */\nexport function createScanProgressThrottle(): (scanned: number, total: number) => boolean {\n  let lastPercent = -1;\n  return (scanned: number, total: number): boolean => {\n    // total === 0 (empty scan): emit once so clients see a terminal tick.\n    if (total <= 0) {\n      if (lastPercent === 100) return false;\n      lastPercent = 100;\n      return true;\n    }\n    const isFinal = scanned >= total;\n    const percent = Math.floor((scanned / total) * 100);\n    if (isFinal) {\n      // Always let the final tick through, even if its percent already fired.\n      lastPercent = 100;\n      return true;\n    }\n    if (percent === lastPercent) return false;\n    lastPercent = percent;\n    return true;\n  };\n}\n","import { existsSync } from \"fs\";\nimport type { IncomingMessage, ServerResponse } from \"http\";\nimport type { ConversationListItem } from \"../../conversation-cache\";\nimport { CLAUDE_CODE_PROVIDER, isProviderResumable } from \"../../providers\";\nimport type {\n  SessionListQuery,\n  SessionSortKey,\n  SortOrder as SessionSortOrder,\n  SessionStatus,\n} from \"../../types\";\n\n// Classify whether a conversation can be resumed from the project directory\n// (cwd) the session ran in. Shared by the detail handler and the\n// resumable-session shape. A conversation's JSONL parses fine even when its\n// cwd is gone, so callers still serve the full history — this only flags that\n// resume would fail and why. Returns optional meta fields older clients\n// ignore: cwd exists → resumable; gone → not resumable, with a\n// worktree-specific reason when the path was a git worktree (now removed).\nexport function classifyResumability(cwd: string | null | undefined): {\n  resumable: boolean;\n  unavailable_reason?: \"path_missing\" | \"worktree_removed\";\n} {\n  if (!cwd) return { resumable: true };\n  if (existsSync(cwd)) return { resumable: true };\n  const ranInWorktree = /\\/\\.worktrees\\//.test(cwd) || /\\/\\.claude\\/worktrees\\//.test(cwd);\n  return {\n    resumable: false,\n    unavailable_reason: ranInWorktree ? \"worktree_removed\" : \"path_missing\",\n  };\n}\n\nexport function conversationToResumableSession(c: ConversationListItem) {\n  const availability = classifyResumability(c.projectPath);\n  const provider = c.provider ?? CLAUDE_CODE_PROVIDER;\n  return {\n    type: \"conversation\" as const,\n    id: c.id,\n    conversationId: c.id,\n    status: \"on_hold\" as const,\n    // A cached conversation with no process behind it. Distinguishes \"nobody is\n    // running this\" from an external session that IS live (ownership \"external\").\n    // Match the rehydrated branch of managedToResponse: same conceptual state\n    // (\"resumable, no live process\") must produce the same wire shape (#438).\n    ownership: \"historical\" as const,\n    lifecycle: \"resumable\" as const,\n    lifecycleSource: \"reconcile\" as const,\n    ptyAttached: false,\n    projectId: c.projectId ?? undefined,\n    projectPath: c.projectPath ?? \"\",\n    projectName: c.projectName ?? \"\",\n    branch: c.branch ?? undefined,\n    lastOutput: \"\",\n    elapsedMs: 0,\n    // No PTY behind a cached conversation, so there is no phase — emitted\n    // explicitly for the same reason as in managedToResponse/discoveredToResponse:\n    // the client merges session frames, so an absent key keeps the previous\n    // value and the indicator latches. `GET /api/sessions/:id` serves this\n    // shape whenever the id is a conversation rather than a live session.\n    subStatus: null,\n    promptSuggestion: null,\n    promptCount: c.messageCount,\n    startedAt: c.lastActivity,\n    completedAt: null,\n    lastActivityAt: c.lastActivity,\n    ...(c.title != null && { sessionName: c.title }),\n    ...(c.model != null && { model: c.model }),\n    ...(c.account != null && { account: c.account }),\n    messageCount: c.messageCount,\n    ...(c.preview != null && { preview: c.preview }),\n    ...(c.firstMessage != null && { firstMessageText: c.firstMessage }),\n    ...(c.lastMessage != null && { lastMessageText: c.lastMessage }),\n    filePath: c.filePath,\n    provider,\n    resumable: isProviderResumable(provider, availability.resumable),\n    ...(availability.unavailable_reason && {\n      unavailable_reason: availability.unavailable_reason,\n    }),\n  };\n}\n\nexport function json(res: ServerResponse, status: number, data: unknown): void {\n  res.writeHead(status, { \"Content-Type\": \"application/json\" });\n  res.end(JSON.stringify(data));\n}\n\nexport async function writeHonoResponse(honoRes: Response, res: ServerResponse): Promise<void> {\n  const headers: Record<string, string> = {};\n  honoRes.headers.forEach((value, key) => {\n    headers[key] = value;\n  });\n  res.writeHead(honoRes.status, headers);\n  if (honoRes.body) {\n    const reader = honoRes.body.getReader();\n    try {\n      while (true) {\n        const { done, value } = await reader.read();\n        if (done) break;\n        res.write(value);\n      }\n    } finally {\n      reader.releaseLock();\n    }\n  }\n  res.end();\n}\n\nexport function intParam(url: URL, name: string, defaultValue: number): number {\n  const val = url.searchParams.get(name);\n  if (!val) return defaultValue;\n  const parsed = Number.parseInt(val, 10);\n  return Number.isNaN(parsed) ? defaultValue : parsed;\n}\n\n/** `refresh=1` style: 1/true → true, 0/false → false, absent/invalid → undefined. */\nexport function boolQueryParam(url: URL, name: string): boolean | undefined {\n  const val = url.searchParams.get(name);\n  if (val == null || val === \"\") return undefined;\n  if (val === \"1\" || val === \"true\") return true;\n  if (val === \"0\" || val === \"false\") return false;\n  return undefined;\n}\n\nexport function includeQueryParam(url: URL): \"all\" | \"conversations\" | \"subagents\" | undefined {\n  const val = url.searchParams.get(\"include\");\n  if (val === \"all\" || val === \"conversations\" || val === \"subagents\") return val;\n  return undefined;\n}\n\nconst VALID_SORT_KEYS: SessionSortKey[] = [\"startedAt\", \"lastActivityAt\", \"projectName\", \"status\"];\nconst VALID_ORDERS: SessionSortOrder[] = [\"asc\", \"desc\"];\nconst VALID_STATUSES: SessionStatus[] = [\"running\", \"waiting_input\", \"idle\"];\n\nconst SESSIONS_DEFAULT_LIMIT = 200;\nconst SESSIONS_MAX_LIMIT = 500;\n\nexport type ParsedSessionListQuery = { query: SessionListQuery } | { error: string };\n\nexport function parseSessionListQuery(url: URL): ParsedSessionListQuery {\n  const limitRaw = url.searchParams.get(\"limit\");\n  let limit = SESSIONS_DEFAULT_LIMIT;\n  if (limitRaw !== null) {\n    const n = Number.parseInt(limitRaw, 10);\n    if (!Number.isFinite(n) || n < 1 || n > SESSIONS_MAX_LIMIT) {\n      return { error: `limit must be 1..${SESSIONS_MAX_LIMIT}` };\n    }\n    limit = n;\n  }\n\n  const sortByRaw = url.searchParams.get(\"sortBy\") ?? \"startedAt\";\n  if (!VALID_SORT_KEYS.includes(sortByRaw as SessionSortKey)) {\n    return { error: `sortBy must be one of ${VALID_SORT_KEYS.join(\",\")}` };\n  }\n  const sortBy = sortByRaw as SessionSortKey;\n\n  const orderRaw = url.searchParams.get(\"order\") ?? \"desc\";\n  if (!VALID_ORDERS.includes(orderRaw as SessionSortOrder)) {\n    return { error: `order must be asc or desc` };\n  }\n  const order = orderRaw as SessionSortOrder;\n\n  const statusRaw = url.searchParams.get(\"status\");\n  let status: SessionStatus[] | undefined;\n  if (statusRaw) {\n    const parts = statusRaw\n      .split(\",\")\n      .map((s) => s.trim())\n      .filter(Boolean);\n    for (const p of parts) {\n      if (!VALID_STATUSES.includes(p as SessionStatus)) {\n        return { error: `status entry \"${p}\" is invalid` };\n      }\n    }\n    status = parts as SessionStatus[];\n  }\n\n  const cursor = url.searchParams.get(\"cursor\") ?? undefined;\n\n  return { query: { limit, sortBy, order, status, cursor } };\n}\n\nexport function readBody(req: IncomingMessage): Promise<any> {\n  return new Promise((resolve, reject) => {\n    const chunks: Buffer[] = [];\n    req.on(\"data\", (chunk) => chunks.push(chunk));\n    req.on(\"end\", () => {\n      try {\n        const raw = Buffer.concat(chunks).toString(\"utf-8\");\n        resolve(raw ? JSON.parse(raw) : {});\n      } catch {\n        reject(new Error(\"Invalid JSON body\"));\n      }\n    });\n    req.on(\"error\", reject);\n  });\n}\n","import { randomUUID } from \"crypto\";\nimport type { EventEmitter } from \"events\";\nimport { existsSync } from \"fs\";\nimport type { IncomingMessage, ServerResponse } from \"http\";\nimport { basename, dirname, join } from \"path\";\nimport type { WebSocket } from \"ws\";\nimport { z } from \"zod\";\nimport type { AgentClient } from \"../../agent/agent-client\";\nimport type { AgentConfig } from \"../../agent/agent-config\";\nimport { handleSendAgentInput } from \"../../agent/handle-send-agent-input\";\nimport { handleStartAgentSession } from \"../../agent/handle-start-agent-session\";\nimport { resolveBrowsePath } from \"../../browse\";\nimport type { ClaudeFlagValues, EffortLevel, PermissionMode } from \"../../claude-flags\";\nimport type { ConversationCache } from \"../../conversation-cache\";\nimport type { createPool } from \"../../db\";\nimport { recordUpload } from \"../../db/upload-records\";\nimport type { ExternalTailManager } from \"../../external-tails\";\nimport type { LiveSessionManager } from \"../../live-session-manager\";\nimport type { Logger } from \"../../logger\";\nimport { discoverClaudeProcesses } from \"../../process-discovery\";\nimport {\n  CLAUDE_CODE_PROVIDER,\n  CODEX_CLI_PROVIDER,\n  CURSOR_PROVIDER,\n  canonicalizeProviderName,\n  isProviderName,\n  type ProviderName,\n} from \"../../providers\";\nimport { PTY_ROWS } from \"../../pty-shared\";\nimport type { ScannerManager } from \"../../scanner-manager\";\nimport { type Prompt, PromptAnswerSchema } from \"../../schemas/prompt.schema\";\nimport type { ResumeFailure, ResumeOutcome } from \"../../server\";\nimport type { PendingPermission, PendingQuestion } from \"../../server-wiring\";\nimport { classifyConversationFile } from \"../../services/conversations/classification\";\nimport {\n  type PromptAdapterResult,\n  type PromptAnswerAdapter,\n  type PromptAnswerErrorCode,\n  PromptRegistry,\n} from \"../../services/prompts/promptRegistry\";\nimport {\n  permissionPromptDraft,\n  questionPromptDraft,\n} from \"../../services/prompts/ptyPromptAdapter\";\nimport { capabilitiesFor } from \"../../services/providers/capabilities\";\nimport { CODEX_ACTIVE_WRITER_CODE } from \"../../services/questions/codexScreen\";\nimport {\n  detectGateScreen,\n  permissionContentKey,\n  permissionGateKey,\n  scrapePermissionGate,\n} from \"../../services/questions/detectPermissionGate\";\nimport {\n  isQuestionMenuOnScreen,\n  questionContentKey,\n} from \"../../services/questions/detectQuestionFromScreen\";\nimport { detectShellPrompt } from \"../../services/questions/detectShellPrompt\";\nimport { detectStartupChoiceGate } from \"../../services/questions/detectStartupChoiceGate\";\nimport { parseStatusLine } from \"../../services/questions/parseStatusLine\";\nimport { permissionAnswerKeys } from \"../../services/questions/permissionAnswerKeys\";\nimport { resolveAnswer } from \"../../services/questions/resolveAnswer\";\nimport { type CodexOwnerSource, findRolloutOwner } from \"../../services/sessions/codexRolloutOwner\";\nimport {\n  type BusySignal,\n  conversationBusy,\n  resolveResumeBusyWindowMs,\n} from \"../../services/sessions/conversationBusy\";\nimport type { IdempotencyStore } from \"../../services/sessions/idempotency\";\nimport { readIdempotencyKey } from \"../../services/sessions/idempotency\";\nimport type { SessionRegistryBoot } from \"../../session-registry-boot\";\nimport type { SessionStore } from \"../../session-store\";\nimport type { SessionWatchers } from \"../../session-watchers\";\nimport type {\n  AskQuestion,\n  DiscoveredProcess,\n  ManagedSession,\n  PermissionOption,\n  SessionResponse,\n  WSMessage,\n} from \"../../types\";\nimport { saveUploadFile } from \"../../uploads\";\nimport type { WSHub } from \"../../ws-hub\";\nimport {\n  classifyResumability,\n  conversationToResumableSession,\n  json,\n  parseSessionListQuery,\n  readBody,\n} from \"./http-helpers\";\n\nconst BROWSE_SYSTEM_PROMPT = (browseRoot: string) =>\n  `You are working within the project boundary: ${browseRoot}. ` +\n  `Do not read, write, or execute commands that access files or directories outside this boundary.`;\n\n// Upper bound on the process-discovery half of the resume collision probe.\n// Enumerating processes costs one CIM/wmic query per pid on Windows, so a\n// machine with several CLIs open can take seconds — unacceptable on a path the\n// user is waiting on. Past this we fall back to the jsonl_mtime signal alone.\nexport const RESUME_DISCOVERY_TIMEOUT_MS = 750;\n\n// How long adopt waits for the external process to actually exit after SIGTERM\n// before giving up. Exceeding this means the takeover would spawn a second agent\n// alongside a live one, so adopt aborts instead.\n// How long a discovered-process list stays usable. Shared by the sessions list\n// and the resume collision probe so a resume can reuse a warm enumeration.\nconst DISCOVERY_TTL_MS = 15_000;\n\nexport const ADOPT_KILL_TIMEOUT_MS = 5_000;\nconst ADOPT_KILL_POLL_MS = 100;\n\n// Session start blocks for the PTY to reach waiting_input/idle before\n// responding; past this we fall back to the async 202 shape. Must stay BELOW\n// the mobile client's start-request fetch timeout (15s) — at the old 15s value\n// the client aborted first (\"fetch canceled\") and its retry double-spawned\n// sessions. Ready normally lands well under this: Claude's quiet-checker and\n// Codex's CODEX_READY_FALLBACK_MS (8s) both settle pendingReady first.\nconst START_READY_TIMEOUT_MS = 10_000;\n\nconst RawKeySchema = z.object({\n  action: z.enum([\"escape\", \"up\", \"down\", \"left\", \"right\", \"tab\", \"shift_tab\", \"enter\"]),\n  promptId: z.string().trim().min(1).max(200).optional(),\n  confirm: z.literal(true).optional(),\n});\n\nconst RAW_KEY_BYTES = {\n  escape: \"\\x1b\",\n  up: \"\\x1b[A\",\n  down: \"\\x1b[B\",\n  left: \"\\x1b[D\",\n  right: \"\\x1b[C\",\n  tab: \"\\t\",\n  shift_tab: \"\\x1b[Z\",\n  enter: \"\\r\",\n} as const;\n\n// How long a Codex resume/fork waits for an authoritative startup outcome\n// before falling back to the pre-existing \"spawned, still booting\" behaviour.\n//\n// Deliberately shorter than START_READY_TIMEOUT_MS: this window only has to\n// cover Codex FAILING, and the writer-lock refusal happens when it opens the\n// rollout — before the TUI boots at all — not after the 8s ready fallback. A\n// resume that is merely slow to paint still answers 201 and finishes booting in\n// the background, exactly as it did before.\nconst CODEX_STARTUP_TIMEOUT_MS = 4_000;\n\nfunction resolveCodexStartupTimeoutMs(env: NodeJS.ProcessEnv = process.env): number {\n  const raw = env.THREADBASE_CODEX_STARTUP_TIMEOUT_MS;\n  if (raw === undefined) return CODEX_STARTUP_TIMEOUT_MS;\n  const n = Number.parseInt(raw, 10);\n  return Number.isFinite(n) && n >= 0 ? n : CODEX_STARTUP_TIMEOUT_MS;\n}\n\n// Poll until `pid` is gone (signal 0 throws ESRCH) or the timeout elapses.\n// Returns true when the process is confirmed gone. Used by adopt so a takeover\n// never spawns a second agent while the one it replaces is still alive.\nexport async function waitForProcessExit(\n  pid: number,\n  timeoutMs: number,\n  pollMs: number = ADOPT_KILL_POLL_MS,\n): Promise<boolean> {\n  const deadline = Date.now() + timeoutMs;\n  for (;;) {\n    try {\n      process.kill(pid, 0);\n    } catch {\n      return true; // ESRCH (or no longer visible to us) — it is gone.\n    }\n    if (Date.now() >= deadline) return false;\n    await new Promise((resolve) => setTimeout(resolve, pollMs));\n  }\n}\n\n/**\n * The 409 body for a Codex conversation another client already owns.\n *\n * Keeps `code: \"CONVERSATION_BUSY\"` on purpose: released mobile builds switch\n * on that string, and a new top-level code would land as a generic network\n * error with no recovery UI. The Codex-specific truth is carried additively —\n * `reasonCode` names the real cause, and the capability flags say what the\n * client may offer, so nothing has to be inferred from `likelyOwner`.\n *\n * `canForce` is false because `force` only ever bypassed OUR heuristic; Codex's\n * writer lock is enforced inside Codex.\n *\n * `canTakeOver` is offered only when the owner is a standalone `codex` TUI:\n * that process owns exactly one conversation, so killing it costs the user\n * only the turn in flight. It stays false for every other owner — a shared VS\n * Code / desktop app-server hosts unrelated threads, and for an unidentified\n * owner there is nothing to prove it does not.\n */\nfunction codexSessionActiveBody(outcome: {\n  detectedBy: BusySignal[];\n  lastActivityMs: number | null;\n  ownerPid?: number;\n  ownerSource?: CodexOwnerSource;\n}): Record<string, unknown> {\n  return {\n    error: \"This Codex session is already open in another client\",\n    code: \"CONVERSATION_BUSY\",\n    reasonCode: \"CODEX_SESSION_ACTIVE\",\n    provider: CODEX_CLI_PROVIDER,\n    detectedBy: outcome.detectedBy,\n    lastActivityMs: outcome.lastActivityMs,\n    likelyOwner: \"external\",\n    canForce: false,\n    // Offered only against a standalone `codex` TUI, which owns exactly one\n    // conversation. A desktop/VS Code `codex app-server` hosts several\n    // unrelated threads in one process, so killing it to reclaim this\n    // conversation would take the others with it — see codexRolloutOwner.ts.\n    canTakeOver: outcome.ownerSource === \"terminal\",\n    canFork: true,\n    ...(outcome.ownerPid != null && { ownerPid: outcome.ownerPid }),\n    ...(outcome.ownerSource != null && { ownerSource: outcome.ownerSource }),\n  };\n}\n\n/**\n * Prompt-answer taxonomy to HTTP status.\n *\n * The validation class is 400, matching what the legacy `/answer` route already\n * returns for the same \"this answer cannot be applied to this prompt\" family;\n * the state class — the prompt moved on, or never existed here — is 409/404.\n */\nfunction promptAnswerStatus(code: PromptAnswerErrorCode): number {\n  switch (code) {\n    case \"prompt_not_found\":\n      return 404;\n    case \"provider_error\":\n      return 502;\n    case \"unknown_question\":\n    case \"unknown_option\":\n    case \"incomplete_answer\":\n    case \"unsupported_prompt_shape\":\n      return 400;\n    default:\n      return 409;\n  }\n}\n\n/**\n * Everything SessionHandlers reads from the server. Same split as\n * ConversationHandlersDeps: collaborators the server constructor already built\n * are passed by reference (Maps and Sets keep identity, so a mutation here is\n * the same mutation the server and its tests observe), anything bound later or\n * swapped by tests is a thunk, and the handful of methods that stay on\n * StreamerServer are late-bound calls back into it.\n *\n * Nothing here owns state. `pendingQuestions`, `pendingPermission`,\n * `contendedSessions`, `selfPtyEndedAt`, `sessionFileMap`, `sessionSubscribers`\n * and `idempotency` remain StreamerServer instance properties — tests reach\n * into them through `(server as any)`, and the WS/PTY callbacks that also read\n * them never moved.\n */\nexport type SessionHandlersDeps = {\n  sessionStore: SessionStore;\n  ptyManager: LiveSessionManager;\n  wsHub: WSHub;\n  scannerManager: ScannerManager;\n  sessionWatchers: SessionWatchers;\n  registryBoot: SessionRegistryBoot;\n  externalTailManager: ExternalTailManager;\n  idempotency: IdempotencyStore;\n  sessionStatusBus: EventEmitter;\n  sessionFileMap: Map<string, string>;\n  promptRegistry: PromptRegistry;\n  pendingQuestions: Map<string, PendingQuestion>;\n  pendingQuestionKey: Map<string, string>;\n  pendingPermission: Map<string, PendingPermission>;\n  pendingPermissionKey: Map<string, string>;\n  contendedSessions: Set<string>;\n  selfPtyEndedAt: Map<string, number>;\n  sessionSubscribers: Map<string, Set<WebSocket>>;\n  agentConfig: AgentConfig;\n  agentClient: AgentClient | null;\n  defaultSystemPrompt: string;\n  codexSystemPromptEnabled: boolean;\n  cacheDir: string;\n\n  // Late-bound: opened during listen(), rebound by the integrity monitor's\n  // reset-and-rescan, mutated by PUT /api/config/claude-flags, resolved\n  // asynchronously at boot (browseRoot), or swapped on the instance by tests.\n  cache: () => ConversationCache | null;\n  includeSubagentSessions?: () => boolean;\n  log: () => Logger;\n  browseRoot: () => string | null;\n  claudeFlags: () => ClaudeFlagValues;\n  claudeExtraArgs: () => string | undefined;\n  dbPool: () => Awaited<ReturnType<typeof createPool>> | null;\n  dbInstanceId: () => string | null;\n\n  // The discovered-process cache and its single-flight. Read and written from\n  // here, but owned by StreamerServer — close() and the session list read them.\n  discoveryCache: () => { entries: DiscoveredProcess[]; fetchedAt: number } | null;\n  setDiscoveryCache: (value: { entries: DiscoveredProcess[]; fetchedAt: number } | null) => void;\n  discoveryInFlight: () => Promise<DiscoveredProcess[]> | null;\n  setDiscoveryInFlight: (value: Promise<DiscoveredProcess[]> | null) => void;\n\n  // Methods that stay on StreamerServer.\n  rejectIfWarmingUp: (res: ServerResponse) => boolean;\n  ptyAttachedIds: () => Set<string>;\n  withReconciledLifecycle: (sessions: readonly SessionResponse[]) => readonly SessionResponse[];\n  broadcastOrUnicastSessionList: (req: IncomingMessage) => void;\n  checkSessionStartRateLimit: (ip: string) => boolean;\n  checkSessionInputRateLimit: (sessionId: string) => boolean;\n  spawnFlagOverrides: () => {\n    permissionMode: PermissionMode;\n    model: string;\n    effort: EffortLevel;\n  };\n  resolveConversationTarget: (sessionId: string) => Promise<\n    | ResumeFailure\n    | {\n        ok: true;\n        historyId: string;\n        jsonlPath: string | null;\n        historyPath: string | null;\n        conv: any;\n        projectPath: string;\n        provider: ProviderName;\n      }\n  >;\n  waitForStartupOutcome: (\n    sessionId: string,\n    timeoutMs: number,\n  ) => Promise<{ outcome: \"ready\" | \"failed\" | \"timeout\"; session: ManagedSession | null }>;\n  forgetSession: (sessionId: string) => void;\n  abandonFailedStart: (sessionId: string) => void;\n  armHoldWhenIdle: (\n    sessionId: string,\n    opts?: { ignoreWatchers?: boolean; deleteAfter?: boolean },\n  ) => \"held\" | \"armed\" | \"no_session\";\n  enrichResumedSessionAsync: (sessionId: string, projectPath: string, conv: any) => void;\n  findJsonlPath: (uuid: string) => string | null;\n  readCwdFromJsonl: (filePath: string) => Promise<string | null>;\n};\n\n/**\n * The session lifecycle surface: list/get, start, resume, fork, adopt, input,\n * answers, permission gates, uploads, stop/cancel and session names.\n *\n * Extracted from StreamerServer so session work stops editing the server file\n * (see docs/plans/2026-07-12-server-ts-split.md, PR 8). State stays on the\n * server: this class only reads and mutates it through `deps`.\n */\nexport class SessionHandlers {\n  constructor(private deps: SessionHandlersDeps) {}\n\n  private get sessionStore(): SessionStore {\n    return this.deps.sessionStore;\n  }\n\n  private get ptyManager(): LiveSessionManager {\n    return this.deps.ptyManager;\n  }\n\n  private get wsHub(): WSHub {\n    return this.deps.wsHub;\n  }\n\n  private get scannerManager(): ScannerManager {\n    return this.deps.scannerManager;\n  }\n\n  private get sessionWatchers(): SessionWatchers {\n    return this.deps.sessionWatchers;\n  }\n\n  private get registryBoot(): SessionRegistryBoot {\n    return this.deps.registryBoot;\n  }\n\n  private get externalTailManager(): ExternalTailManager {\n    return this.deps.externalTailManager;\n  }\n\n  private get idempotency(): IdempotencyStore {\n    return this.deps.idempotency;\n  }\n\n  private get sessionStatusBus(): EventEmitter {\n    return this.deps.sessionStatusBus;\n  }\n\n  private get sessionFileMap(): Map<string, string> {\n    return this.deps.sessionFileMap;\n  }\n\n  private get pendingQuestions(): SessionHandlersDeps[\"pendingQuestions\"] {\n    return this.deps.pendingQuestions;\n  }\n\n  private get promptRegistry(): PromptRegistry {\n    if (!this.deps.promptRegistry) this.deps.promptRegistry = new PromptRegistry();\n    return this.deps.promptRegistry;\n  }\n\n  private get pendingQuestionKey(): Map<string, string> {\n    return this.deps.pendingQuestionKey;\n  }\n\n  private get pendingPermission(): SessionHandlersDeps[\"pendingPermission\"] {\n    return this.deps.pendingPermission;\n  }\n\n  private get pendingPermissionKey(): Map<string, string> {\n    return this.deps.pendingPermissionKey;\n  }\n\n  private get contendedSessions(): Set<string> {\n    return this.deps.contendedSessions;\n  }\n\n  private get selfPtyEndedAt(): Map<string, number> {\n    return this.deps.selfPtyEndedAt;\n  }\n\n  private get sessionSubscribers(): Map<string, Set<WebSocket>> {\n    return this.deps.sessionSubscribers;\n  }\n\n  // Prompt lifecycle events (question / permission and their cancellations)\n  // carry prompt content and go ONLY to the session's subscribers — never to\n  // every connected socket. A client that subscribes after a prompt opened\n  // gets it from the subscribe replay (server-wiring), not from a broadcast.\n  private broadcastToSession(sessionId: string, message: WSMessage): void {\n    this.wsHub.broadcastToClients(this.sessionSubscribers.get(sessionId) ?? [], message);\n  }\n\n  private get agentConfig(): AgentConfig {\n    return this.deps.agentConfig;\n  }\n\n  private get agentClient(): AgentClient | null {\n    return this.deps.agentClient;\n  }\n\n  private get defaultSystemPrompt(): string {\n    return this.deps.defaultSystemPrompt;\n  }\n\n  private get codexSystemPromptEnabled(): boolean {\n    return this.deps.codexSystemPromptEnabled;\n  }\n\n  private get cacheDir(): string {\n    return this.deps.cacheDir;\n  }\n\n  private get cache(): ConversationCache | null {\n    return this.deps.cache();\n  }\n\n  private get log(): Logger {\n    return this.deps.log();\n  }\n\n  private get browseRoot(): string | null {\n    return this.deps.browseRoot();\n  }\n\n  private get claudeFlags(): ClaudeFlagValues {\n    return this.deps.claudeFlags();\n  }\n\n  private get claudeExtraArgs(): string | undefined {\n    return this.deps.claudeExtraArgs();\n  }\n\n  private get dbPool(): Awaited<ReturnType<typeof createPool>> | null {\n    return this.deps.dbPool();\n  }\n\n  private get dbInstanceId(): string | null {\n    return this.deps.dbInstanceId();\n  }\n\n  private get discoveryCache(): { entries: DiscoveredProcess[]; fetchedAt: number } | null {\n    return this.deps.discoveryCache();\n  }\n\n  private set discoveryCache(value: { entries: DiscoveredProcess[]; fetchedAt: number } | null) {\n    this.deps.setDiscoveryCache(value);\n  }\n\n  private get discoveryInFlight(): Promise<DiscoveredProcess[]> | null {\n    return this.deps.discoveryInFlight();\n  }\n\n  private set discoveryInFlight(value: Promise<DiscoveredProcess[]> | null) {\n    this.deps.setDiscoveryInFlight(value);\n  }\n\n  async handleListSessions(url: URL, res: ServerResponse): Promise<void> {\n    if (this.deps.rejectIfWarmingUp(res)) return;\n\n    await this.refreshDiscovery();\n\n    // Backwards compat: a bare GET /api/sessions returns the legacy plain\n    // array. Any pagination param switches to the new envelope.\n    const hasPaginationParams =\n      url.searchParams.has(\"limit\") ||\n      url.searchParams.has(\"cursor\") ||\n      url.searchParams.has(\"sortBy\") ||\n      url.searchParams.has(\"order\") ||\n      url.searchParams.has(\"status\");\n\n    if (!hasPaginationParams) {\n      json(\n        res,\n        200,\n        this.externalTailManager.withExternalActivity(\n          this.deps.withReconciledLifecycle(this.sessionStore.list(this.deps.ptyAttachedIds())),\n        ),\n      );\n      return;\n    }\n\n    const parsed = parseSessionListQuery(url);\n    if (\"error\" in parsed) {\n      json(res, 400, { error: parsed.error });\n      return;\n    }\n\n    try {\n      const page = this.sessionStore.paginate(this.deps.ptyAttachedIds(), parsed.query);\n      page.sessions = this.externalTailManager.withExternalActivity(\n        this.deps.withReconciledLifecycle(page.sessions),\n      );\n      json(res, 200, page);\n    } catch (err) {\n      if (err instanceof Error && err.message === \"INVALID_CURSOR\") {\n        json(res, 400, { error: \"Invalid cursor\" });\n        return;\n      }\n      throw err;\n    }\n  }\n\n  /**\n   * Refresh the discovered-process list, sharing one in-flight enumeration\n   * across concurrent callers and honouring the 15s TTL cache.\n   */\n  private async refreshDiscovery(): Promise<DiscoveredProcess[]> {\n    const cached = this.discoveryCache;\n    if (cached && Date.now() - cached.fetchedAt < DISCOVERY_TTL_MS) {\n      return cached.entries;\n    }\n    if (this.discoveryInFlight) {\n      return this.discoveryInFlight;\n    }\n\n    let flight!: Promise<DiscoveredProcess[]>;\n    flight = (async (): Promise<DiscoveredProcess[]> => {\n      try {\n        const discovered = await discoverClaudeProcesses();\n        this.sessionStore.setDiscovered(discovered);\n        this.discoveryCache = { entries: discovered, fetchedAt: Date.now() };\n        return discovered;\n      } catch {\n        // Discovery is best-effort — keep any previous cache rather than\n        // remembering a failure as \"nothing is running\".\n        return this.discoveryCache?.entries ?? [];\n      } finally {\n        if (this.discoveryInFlight === flight) {\n          this.discoveryInFlight = null;\n        }\n      }\n    })();\n\n    this.discoveryInFlight = flight;\n    return flight;\n  }\n\n  async handleGetSession(sessionId: string, res: ServerResponse): Promise<void> {\n    if (this.deps.rejectIfWarmingUp(res)) return;\n    // A response copy, so decorating it means building a new object — see\n    // SessionStore.get(). Persisting anything here would need updateManaged().\n    const base = this.sessionStore.get(sessionId, this.deps.ptyAttachedIds());\n    if (base) {\n      // Apply a boot-reconciliation verdict if one exists for this session and\n      // it isn't live here — the detail screen is where the distinction between\n      // `detached` and `orphaned` actually matters to a user.\n      const reconciled = this.deps.withReconciledLifecycle([base])[0];\n      const session: SessionResponse = {\n        ...base,\n        ...(existsSync(base.projectPath)\n          ? {}\n          : { failureReason: `Project directory not found: ${base.projectPath}` }),\n        lifecycle: reconciled.lifecycle,\n        lifecycleSource: reconciled.lifecycleSource,\n      };\n      // Scrape model/effort/permission-mode off the live PTY's rendered status\n      // line so the client can show them natively instead of parsing terminal\n      // text. Live sessions only, and strictly best-effort: a failed scrape\n      // leaves the fields absent rather than failing the request.\n      if (this.ptyManager.hasSession(sessionId)) {\n        try {\n          const lines = await this.ptyManager.getOutputLines(sessionId, 10);\n          const status = parseStatusLine(lines);\n          // Don't clobber the scanner-provided model with a scraped one.\n          if (session.model == null && status.model) session.model = status.model;\n          if (status.effort) session.effort = status.effort;\n          if (status.permissionMode) session.permissionMode = status.permissionMode;\n        } catch {\n          // PTY raced away between hasSession() and the read — report what we have.\n        }\n      }\n      json(res, 200, session);\n      return;\n    }\n    // Fall back to the conversation cache: older mobile builds tap recents\n    // entries via GET /api/sessions/:id even though those IDs are conversation\n    // UUIDs, not live sessions. Returning a resumable shape (status=on_hold)\n    // lets the mobile open flow proceed to /api/sessions/resume.\n    const conversation = this.cache?.getMetaById(sessionId);\n    if (conversation && !conversation.deletedAt) {\n      json(res, 200, conversationToResumableSession(conversation));\n      return;\n    }\n    json(res, 404, { error: \"Session not found\" });\n  }\n\n  async handleResume(req: IncomingMessage, res: ServerResponse): Promise<void> {\n    const body = await readBody(req);\n    // Accept both sessionId (new) and conversationId (legacy alias)\n    const sessionId: string | undefined = body.sessionId ?? body.conversationId;\n\n    if (!sessionId) {\n      json(res, 400, { error: \"Missing sessionId\" });\n      return;\n    }\n\n    const outcome = await this.resumeSession({\n      sessionId,\n      force: body.force === true,\n      projectName: body.projectName,\n      branch: body.branch,\n    });\n\n    if (!outcome.ok) {\n      switch (outcome.reason) {\n        case \"history_file_missing\":\n          // The cache can keep a \"tailed ghost\" row (JSONL deleted out-of-band,\n          // e.g. bulk branch/worktree cleanup) so its history stays viewable via\n          // GET /:id — see pruneGhostFiles(). It can never be resumed though, so\n          // give a distinct, non-retryable reason instead of a generic 404 that\n          // sends mobile into a retry loop.\n          json(res, 404, {\n            error: \"Conversation history file is missing; it can no longer be resumed\",\n            code: \"history_file_missing\",\n          });\n          return;\n        case \"no_project_path\":\n          json(res, 400, { error: \"Could not determine project path\" });\n          return;\n        case \"conversation_busy\":\n          json(res, 409, {\n            error: \"This conversation looks active in another session\",\n            code: \"CONVERSATION_BUSY\",\n            detectedBy: outcome.detectedBy,\n            lastActivityMs: outcome.lastActivityMs,\n            likelyOwner: outcome.likelyOwner,\n            // Additive capability hints (see docs/compatibility/tb-mobile.md).\n            // Older clients ignore them and keep deriving the same actions from\n            // `likelyOwner`; newer ones must honour these instead of guessing.\n            canForce: true,\n            canTakeOver: outcome.likelyOwner === \"external\",\n            canFork: false,\n          });\n          return;\n        case \"codex_session_active\":\n          json(res, 409, codexSessionActiveBody(outcome));\n          return;\n        case \"codex_start_failed\":\n          json(res, 502, {\n            error: outcome.failureReason,\n            code: \"SESSION_START_FAILED\",\n            provider: CODEX_CLI_PROVIDER,\n          });\n          return;\n      }\n    }\n\n    // Already ours: answer 200 rather than 201, and broadcast nothing — the\n    // session list did not change.\n    if (outcome.alreadyRunning) {\n      json(res, 200, outcome.response);\n      return;\n    }\n\n    this.deps.broadcastOrUnicastSessionList(req);\n    json(res, 201, outcome.response ?? outcome.session);\n  }\n\n  /**\n   * `POST /api/sessions/:id/fork` — continue a conversation this streamer is\n   * not allowed to resume, without touching whoever owns it.\n   *\n   * Codex only (`codex fork <id>`): Claude Code has no equivalent, and there is\n   * no safe generic fallback — quietly resuming instead would attach to the\n   * exact writer the caller is trying to leave alone, which is the failure this\n   * endpoint exists to avoid.\n   *\n   * NOT idempotent by default: every accepted call starts another Codex\n   * process and another rollout. Clients that retry on timeout must send\n   * `idempotencyKey`, which replays the first outcome for 10 minutes (same\n   * store and semantics as `POST /:id/input`).\n   */\n  async handleFork(sessionId: string, req: IncomingMessage, res: ServerResponse): Promise<void> {\n    const body = await readBody(req);\n\n    let idempotencyKey: string | undefined;\n    try {\n      idempotencyKey = readIdempotencyKey(body as Record<string, unknown>);\n    } catch (err) {\n      json(res, 400, { error: err instanceof Error ? err.message : \"Invalid idempotencyKey\" });\n      return;\n    }\n    if (idempotencyKey) {\n      const replayed = this.idempotency.get(sessionId, idempotencyKey);\n      if (replayed) {\n        json(res, replayed.status, replayed.body);\n        return;\n      }\n    }\n\n    const target = await this.deps.resolveConversationTarget(sessionId);\n    if (!target.ok) {\n      if (target.reason === \"history_file_missing\") {\n        json(res, 404, {\n          error: \"Conversation history file is missing; it can no longer be forked\",\n          code: \"history_file_missing\",\n        });\n      } else {\n        json(res, 400, { error: \"Could not determine project path\" });\n      }\n      return;\n    }\n    if (target.provider !== CODEX_CLI_PROVIDER) {\n      json(res, 501, {\n        error: \"Forking is only supported for Codex sessions\",\n        code: \"UNSUPPORTED_PROVIDER\",\n        provider: target.provider,\n      });\n      return;\n    }\n\n    this.discoveryCache = null;\n\n    let session: ManagedSession;\n    try {\n      session = await this.ptyManager.startFork({\n        provider: CODEX_CLI_PROVIDER,\n        // The rollout id, never the placeholder the client navigated to — it is\n        // the only id `codex fork` accepts.\n        forkFromId: target.historyId,\n        projectPath: target.projectPath,\n        projectName: body.projectName,\n        branch: body.branch,\n      });\n    } catch (err) {\n      const message = err instanceof Error ? err.message : \"Failed to fork session\";\n      const statusCode =\n        typeof (err as Error & { statusCode?: unknown }).statusCode === \"number\"\n          ? (err as Error & { statusCode: number }).statusCode\n          : 500;\n      this.log.error(`[fork] failed to fork ${sessionId}: ${message}`, {\n        event: \"session.fork_failed\",\n        sessionId,\n        error: message,\n      });\n      json(res, statusCode, { error: message, code: \"FORK_FAILED\" });\n      return;\n    }\n\n    // The fork's own id is a placeholder until Codex writes its rollout; the\n    // source id is recorded separately and deliberately never written into\n    // `resumedFromConversationId` — the two histories diverge here.\n    session.forkedFromConversationId = target.historyId;\n    this.sessionStore.addManaged(session);\n    this.registryBoot.recordSessionSpawn(session);\n\n    const { outcome, session: settled } = await this.deps.waitForStartupOutcome(\n      session.id,\n      resolveCodexStartupTimeoutMs(),\n    );\n    if (outcome === \"failed\") {\n      const failed = settled ?? this.sessionStore.getManaged(session.id);\n      this.deps.abandonFailedStart(session.id);\n      if (failed?.failureCode === CODEX_ACTIVE_WRITER_CODE) {\n        // Rare but real: Codex can refuse a fork too (e.g. the source rollout\n        // is mid-write). Same structured collision the resume path returns.\n        json(res, 409, codexSessionActiveBody({ detectedBy: [], lastActivityMs: null }));\n        return;\n      }\n      json(res, 502, {\n        error: failed?.failureReason ?? \"Codex exited before the fork became ready\",\n        code: \"SESSION_START_FAILED\",\n        provider: CODEX_CLI_PROVIDER,\n      });\n      return;\n    }\n\n    // Bind the NEW rollout id. The candidate filter requires a session_meta\n    // created at/after this session started, so it can never re-bind the source.\n    this.sessionWatchers.watchForCodexRollout(session.id, target.projectPath);\n\n    const response = this.sessionStore.get(session.id, this.deps.ptyAttachedIds());\n    const result = {\n      status: outcome === \"ready\" ? 201 : 202,\n      body:\n        outcome === \"ready\"\n          ? (response ?? session)\n          : { id: session.id, status: \"pending\", forkedFromConversationId: target.historyId },\n    };\n    if (idempotencyKey) this.idempotency.set(sessionId, idempotencyKey, result);\n\n    this.log.info(`[fork] forked ${target.historyId} into ${session.id}`, {\n      event: \"session.forked\",\n      sessionId: session.id,\n      forkedFromConversationId: target.historyId,\n      outcome,\n    });\n    this.deps.broadcastOrUnicastSessionList(req);\n    json(res, result.status, result.body);\n  }\n\n  /**\n   * Resume a session, from an HTTP request or from the boot path.\n   *\n   * Extracted from `handleResume` so both callers hit the **same collision\n   * probe** (plan Phase 7c). The probe is what stops this streamer attaching to\n   * a conversation an external terminal already owns; a second, hand-adapted\n   * copy of this sequence in the boot path is how two agents end up appending\n   * to one JSONL at 4am with nobody watching.\n   *\n   * Returns a typed reason rather than writing a response, so the HTTP caller\n   * maps it to a status code and the boot caller logs it.\n   */\n  async resumeSession(opts: {\n    sessionId: string;\n    force?: boolean;\n    projectName?: string;\n    branch?: string;\n  }): Promise<ResumeOutcome> {\n    const { sessionId } = opts;\n    const managed = this.sessionStore.getManaged(sessionId);\n    const includeSubagents =\n      this.deps.includeSubagentSessions?.() ?? this.cache?.includeSubagentSessions ?? false;\n    if (\n      (managed?.isSubagent && !includeSubagents) ||\n      this.cache?.isExcludedSubagent(managed?.boundConversationId ?? sessionId)\n    ) {\n      return { ok: false, reason: \"history_file_missing\" };\n    }\n\n    // If a PTY is already running for this session, return it immediately\n    if (this.ptyManager.hasSession(sessionId)) {\n      const resp = this.sessionStore.get(sessionId, this.deps.ptyAttachedIds());\n      if (resp) {\n        return { ok: true, alreadyRunning: true, session: null, response: resp };\n      }\n    }\n\n    const target = await this.deps.resolveConversationTarget(sessionId);\n    if (!target.ok) return target;\n    const { historyId, jsonlPath, historyPath, conv, projectPath, provider } = target;\n    let classification:\n      | { isSubagent?: boolean | null; parentConversationId?: string | null }\n      | null\n      | undefined = this.cache?.getMetaById(historyId);\n    const classificationPath = historyPath || jsonlPath;\n    if (classification?.isSubagent == null && classificationPath) {\n      try {\n        if (provider === CLAUDE_CODE_PROVIDER || provider === CODEX_CLI_PROVIDER) {\n          classification = classifyConversationFile(classificationPath, provider);\n        }\n      } catch {\n        // The existing target/readiness checks own unreadable-history errors.\n      }\n    }\n    if (!includeSubagents && classification?.isSubagent)\n      return { ok: false, reason: \"history_file_missing\" };\n\n    // Codex-only fast path: does another process hold this exact rollout open?\n    // The generic probe below cannot answer that — a Codex owner need not carry\n    // the rollout id in argv, and an owned rollout can sit quiet well past the\n    // mtime window (the 2026-08-09 incident). An open handle is the same\n    // condition Codex's own writer lock rejects, so this is treated as\n    // authoritative and `force` does NOT bypass it: forcing would spawn a PTY\n    // that Codex refuses anyway, and answer 201 for a session that will never\n    // become usable. Fork is the recovery path, not force.\n    if (provider === CODEX_CLI_PROVIDER && historyPath) {\n      const owner = await findRolloutOwner(historyPath);\n      if (owner) {\n        this.log.info(`[resume] codex rollout held by pid ${owner.pid}`, {\n          event: \"session.codex_rollout_busy\",\n          sessionId,\n          historyId,\n          ownerPid: owner.pid,\n          ownerCommand: owner.command,\n        });\n        return {\n          ok: false,\n          reason: \"codex_session_active\",\n          detectedBy: [\"file_handle\"],\n          lastActivityMs: null,\n          ownerPid: owner.pid,\n          ownerSource: owner.source,\n        };\n      }\n    }\n\n    // Pre-flight collision check: refuse to resume a conversation that looks\n    // actively owned elsewhere, unless the caller forces it. Runs AFTER the\n    // hasSession early-return above (a session this streamer already owns still\n    // returns 200). NOTE: this is a one-directional pre-flight guard only —\n    // once this streamer holds the PTY it cannot prevent an external terminal\n    // from attaching to the same conversation afterwards.\n    // Process enumeration is SLOW on Windows (one CIM/wmic query per candidate\n    // pid, seconds when several CLIs are open) and resume is latency-sensitive —\n    // the user is waiting on a spawn. Bound it: past the deadline we proceed\n    // with no process signals rather than making every resume pay the worst\n    // case. jsonl_mtime is the primary signal and is a single stat, so the probe\n    // stays useful even when discovery is dropped.\n    let discovered: DiscoveredProcess[] = [];\n    // Prefer the list GET /api/sessions already keeps warm (15s TTL), including\n    // any in-flight refresh — a slightly stale process list is fine for a\n    // heuristic pre-flight check, and mobile polls sessions often enough that\n    // this is usually a free hit. Bound the wait: past the deadline we proceed\n    // with no process signals rather than making every resume pay the worst\n    // case. jsonl_mtime is the primary signal and is a single stat, so the probe\n    // stays useful even when discovery is dropped.\n    try {\n      discovered = await Promise.race([\n        this.refreshDiscovery(),\n        new Promise<DiscoveredProcess[]>((resolve) =>\n          setTimeout(() => resolve([]), RESUME_DISCOVERY_TIMEOUT_MS).unref?.(),\n        ),\n      ]);\n    } catch {\n      // Discovery is best-effort; the jsonl_mtime signal still applies.\n    }\n    const busy = conversationBusy({\n      // The id another owner's argv would actually carry — for a placeholder\n      // that is the bound rollout id, not the one the client asked for.\n      conversationId: historyId,\n      projectPath,\n      jsonlPath,\n      discovered,\n      windowMs: resolveResumeBusyWindowMs(),\n      selfPtyEndedAt: this.selfPtyEndedAt.get(sessionId) ?? null,\n    });\n    if (busy.busy && opts.force !== true) {\n      return {\n        ok: false,\n        reason: \"conversation_busy\",\n        detectedBy: busy.detectedBy,\n        lastActivityMs: busy.lastActivityMs,\n        likelyOwner: busy.likelyOwner,\n      };\n    }\n    if (busy.busy) {\n      // Forced past a detected collision — mark the session so JSONL-derived\n      // question cards from the shared file are suppressed (they may be authored\n      // by the other owner). Cleared when the PTY settles to idle.\n      this.contendedSessions.add(sessionId);\n    }\n\n    // We are about to change what is running, so the discovered-process snapshot\n    // is now stale — drop it so the next sessions list re-enumerates. Done AFTER\n    // the collision probe, which wants the warm list (a fresh enumeration there\n    // costs seconds of wmic on Windows and resume is latency-sensitive).\n    this.discoveryCache = null;\n\n    const session = await this.ptyManager.start(sessionId, {\n      provider,\n      projectPath,\n      projectName: opts.projectName,\n      branch: opts.branch,\n      // Omitted on every ordinary resume, so argv is unchanged there.\n      ...(historyId !== sessionId && { resumeId: historyId }),\n      claudeFlags: this.claudeFlags,\n      claudeExtraArgs: this.claudeExtraArgs,\n      ...this.deps.spawnFlagOverrides(),\n    });\n    // Carry the binding onto the live session before it is recorded:\n    // recordSpawn writes `bound_conversation_id` from this field, so leaving it\n    // unset would upsert the row back to NULL and strand the *next* resume.\n    if (historyId !== sessionId) session.boundConversationId = historyId;\n\n    this.sessionStore.addManaged(session);\n    this.sessionStore.updateManaged(session.id, {\n      isSubagent: classification?.isSubagent ?? false,\n      parentConversationId: classification?.parentConversationId ?? null,\n    });\n    this.registryBoot.recordSessionSpawn(session);\n\n    // Codex is the only authority on its writer lock, and it reports the\n    // refusal AFTER the process starts. Spawning is therefore not evidence of a\n    // successful resume: wait for a bounded ready-or-failed outcome before\n    // telling the caller this worked. Claude's resume is unchanged — it has no\n    // equivalent lock, and its collision guard is entirely pre-spawn.\n    if (provider === CODEX_CLI_PROVIDER) {\n      const { outcome, session: settled } = await this.deps.waitForStartupOutcome(\n        sessionId,\n        resolveCodexStartupTimeoutMs(),\n      );\n      if (outcome === \"failed\") {\n        const failed = settled ?? this.sessionStore.getManaged(sessionId);\n        this.deps.abandonFailedStart(sessionId);\n        if (failed?.failureCode === CODEX_ACTIVE_WRITER_CODE) {\n          return {\n            ok: false,\n            reason: \"codex_session_active\",\n            detectedBy: [],\n            lastActivityMs: null,\n          };\n        }\n        return {\n          ok: false,\n          reason: \"codex_start_failed\",\n          failureReason: failed?.failureReason ?? \"Codex exited before becoming ready\",\n        };\n      }\n    }\n\n    // Watch the conversation's JSONL file for structured events\n    void this.sessionWatchers.watchConversationFile(sessionId, historyId);\n\n    // Enrich session metadata and update DB (best-effort bookkeeping; the\n    // conversation history is already in the JSONL). Now runs just before the\n    // caller writes its response rather than just after — it is a couple of\n    // local SQLite reads, on a path whose latency budget was set by seconds of\n    // Windows process enumeration, so the move is not measurable.\n    this.deps.enrichResumedSessionAsync(sessionId, projectPath, conv);\n\n    // Read AFTER enrichment: it writes to the store, so the 201 body carries\n    // sessionName/projectId/message metadata instead of the bare spawn shape.\n    const response = this.sessionStore.get(session.id, this.deps.ptyAttachedIds());\n\n    return { ok: true, alreadyRunning: false, session, response };\n  }\n\n  async handleSendInput(\n    sessionId: string,\n    req: IncomingMessage,\n    res: ServerResponse,\n  ): Promise<void> {\n    if (!this.deps.checkSessionInputRateLimit(sessionId)) {\n      json(res, 429, { error: \"Too many input requests for this session. Please slow down.\" });\n      return;\n    }\n    if (this.agentConfig.enabled) {\n      const body = await readBody(req);\n      const cache = this.cache;\n      if (!cache) {\n        json(res, 503, {\n          error: \"Conversation cache is not available\",\n          code: \"INTERNAL_ERROR\",\n        });\n        return;\n      }\n      const result = await handleSendAgentInput(sessionId, body, {\n        sessionStore: this.sessionStore,\n        cache,\n        // biome-ignore lint/style/noNonNullAssertion: agentClient is set when agentConfig.enabled is true\n        agentClient: this.agentClient!,\n        agentConfig: this.agentConfig,\n      });\n      json(res, result.status, result.body);\n      return;\n    }\n    const body = await readBody(req);\n    const { input, keys } = body;\n\n    // Idempotency (C4). A retry — flaky network, double-tap, client resend on\n    // timeout — must not submit the same prompt to the agent twice. Checked\n    // before ANY write so a replay never reaches the PTY.\n    let idempotencyKey: string | undefined;\n    try {\n      idempotencyKey = readIdempotencyKey(body as Record<string, unknown>);\n    } catch (err) {\n      // A client that sent a malformed key believes it has retry protection;\n      // proceeding without it silently would be worse than rejecting.\n      json(res, 400, { error: err instanceof Error ? err.message : \"Invalid idempotencyKey\" });\n      return;\n    }\n    if (idempotencyKey) {\n      const replayed = this.idempotency.get(sessionId, idempotencyKey);\n      if (replayed) {\n        this.log.info(`[input.replay] ${sessionId.slice(0, 8)} duplicate idempotencyKey`, {\n          event: \"input.idempotent_replay\",\n          sessionId,\n        });\n        json(res, replayed.status, replayed.body);\n        return;\n      }\n    }\n\n    if (typeof keys === \"string\") {\n      // Raw key bytes (e.g. arrow navigation for interactive prompts).\n      // These bypass bracketed-paste wrapping — caller is responsible for\n      // sending well-formed escape sequences.\n      try {\n        this.ptyManager.sendKeys(sessionId, keys);\n        const updated = this.sessionStore.get(sessionId, this.deps.ptyAttachedIds());\n        if (updated) {\n          this.wsHub.broadcast({ type: \"session_update\", session: updated });\n        }\n        const result = { status: 200, body: { ok: true } };\n        if (idempotencyKey) this.idempotency.set(sessionId, idempotencyKey, result);\n        json(res, result.status, result.body);\n      } catch (err) {\n        const message = err instanceof Error ? err.message : \"Failed to send keys\";\n        json(res, 400, { error: message });\n      }\n      return;\n    }\n\n    if (typeof input !== \"string\") {\n      json(res, 400, { error: \"Missing input field\" });\n      return;\n    }\n\n    // Semantic input arbitration. While a permission gate or AskUserQuestion\n    // menu is up, the PTY's cursor is on the picker, so composer text would\n    // commit the highlighted option (live capture: prose typed over an open\n    // card approved a tool call). Refuse before ANY write. `{ keys }` above is\n    // deliberately not arbitrated — Esc and arrow nav are how a card is\n    // dismissed or navigated. The pending maps are the same authority the\n    // answer routes use; no screen re-scrape here, because the Claude scraper\n    // would fail open on Codex's synthesized gates. Not recorded in\n    // idempotency: a resend of the same key after the card is answered must go\n    // through, not replay this refusal.\n    //\n    // Sweeps expired prompts so their onExpire clears the pending maps before the read below.\n    this.promptRegistry.sweepExpired(sessionId);\n    // One narrow exception to \"no screen re-scrape\". A gate whose OSC fired\n    // before its options painted is stored with `options: []` and NO promptId\n    // (handlePermissionChange opens no record for it), so isLive() below reads\n    // it as live forever, and only the detector's close retires it — which\n    // pty-manager evaluates only on a pass driven by new PTY output. A screen\n    // that went quiet left every later composer send refused indefinitely.\n    // For that entry alone, the rendered screen decides: no gate painted means\n    // the entry is stale, so clear it the way the detector's close would and\n    // let the text through; a gate still painted keeps refusing. The Claude\n    // detectors are safe here: only pty-manager's OSC path produces an\n    // optionless entry — every Codex card (gateCard, command approval,\n    // usage-limit) carries options and therefore a promptId — so this never\n    // scrapes a Codex screen.\n    const optionless = this.pendingPermission.get(sessionId);\n    if (\n      optionless &&\n      optionless.promptId === undefined &&\n      !(await this.anyPermissionGateOnScreen(sessionId)) &&\n      // Re-read after the await: a populated repaint may have replaced it.\n      this.pendingPermission.get(sessionId) === optionless\n    ) {\n      this.pendingPermission.delete(sessionId);\n      this.pendingPermissionKey.delete(sessionId);\n      this.broadcastToSession(sessionId, { type: \"permission_cancelled\", sessionId });\n    }\n    // Map membership alone is not authoritative: a prompt closed by a route\n    // other than sweepExpired or the answer paths (e.g. prompt_not_found)\n    // leaves its pendingPermission/pendingQuestions entry behind with no\n    // registry record ever cleaning it up (#757). Only that genuine absence\n    // means \"gone\" — a terminal-but-still-held record (`resolved` awaiting the\n    // detector's teardown, `cancelled` from a failed freshness scrape) is left\n    // alone: the picker may still be on screen, and #703 already covers why\n    // that window keeps refusing.\n    const isLive = (promptId: string | undefined): boolean =>\n      promptId === undefined || this.promptRegistry.get(promptId) !== null;\n    const pendingPermissionEntry = this.pendingPermission.get(sessionId);\n    const pendingQuestionEntry = this.pendingQuestions.get(sessionId);\n    const openPrompt =\n      pendingPermissionEntry && isLive(pendingPermissionEntry.promptId)\n        ? \"permission\"\n        : pendingQuestionEntry && isLive(pendingQuestionEntry.promptId)\n          ? \"question\"\n          : null;\n    if (openPrompt) {\n      // An accepted permission answer writes the keys and resolves the prompt record, but the\n      // entry lives on until the detector sees the gate repaint away. Text in that window is\n      // still refused — the cursor may still be on the picker — yet \"answer the prompt\" is the\n      // wrong thing to tell someone who just answered it. `resolved` is the only registry state\n      // that means the keys were written: a refused answer leaves a `cancelled` record beside a\n      // live entry and must keep reading \"open\". Questions never reach here answered, because\n      // both accept paths delete `pendingQuestions` before returning.\n      const pendingGate = openPrompt === \"permission\" ? pendingPermissionEntry : undefined;\n      const promptState =\n        pendingGate?.promptId !== undefined &&\n        this.promptRegistry.get(pendingGate.promptId)?.state === \"resolved\"\n          ? \"answered\"\n          : \"open\";\n      this.log.info(\n        `[input.prompt_pending] ${sessionId.slice(0, 8)} kind=${openPrompt} state=${promptState}`,\n        {\n          event: \"input.prompt_pending\",\n          sessionId,\n          promptKind: openPrompt,\n          promptState,\n        },\n      );\n      json(res, 409, {\n        ok: false,\n        reason: \"prompt_pending\",\n        promptKind: openPrompt,\n        promptState,\n        error:\n          promptState === \"answered\"\n            ? \"Your answer was sent; wait for the prompt to close before sending text\"\n            : \"A prompt is waiting for an answer; answer or dismiss it before sending text\",\n      });\n      return;\n    }\n\n    try {\n      const promptCount = this.ptyManager.sendInput(sessionId, input);\n      this.sessionStore.updateManaged(sessionId, { promptCount });\n      const updated = this.sessionStore.get(sessionId, this.deps.ptyAttachedIds());\n      if (updated) {\n        this.wsHub.broadcast({ type: \"session_update\", session: updated });\n      }\n      // Index the user's new message immediately so it's searchable right away.\n      const filePath = this.sessionFileMap.get(sessionId);\n      if (filePath) {\n        this.scannerManager\n          .get()\n          .then((scanner) => this.scannerManager.refreshFileAfterWrite(scanner, filePath))\n          .then(({ outcome, meta }) => {\n            // Post-write, and through the manager rather than straight at the\n            // scanner: a direct call would be single-flighted onto whatever\n            // parse happened to be running, which may have read the file\n            // before this input reached it.\n            this.log.info(`scanner.refreshFile: ${outcome === \"refreshed\" ? \"ok\" : outcome}`, {\n              event: \"scanner.refresh\",\n              sessionId,\n              filePath,\n              trigger: \"sendInput\",\n              outcome,\n              messageCount: meta?.messageCount,\n            });\n          })\n          .catch((err) => {\n            this.log.warn(\"scanner.refreshFile: failed\", {\n              event: \"scanner.refresh_failed\",\n              sessionId,\n              filePath,\n              trigger: \"sendInput\",\n              err,\n            });\n          });\n      }\n      const result = { status: 200, body: { ok: true } };\n      // Record only on success: a failed write must stay retryable, otherwise a\n      // transient error would be replayed as a permanent one.\n      if (idempotencyKey) this.idempotency.set(sessionId, idempotencyKey, result);\n      json(res, result.status, result.body);\n    } catch (err) {\n      const message = err instanceof Error ? err.message : \"Failed to send input\";\n      json(res, 400, { error: message });\n    }\n  }\n\n  // Live AskUserQuestion detected from the rendered screen (ahead of JSONL).\n  // Broadcasts the `question` event immediately and records the content key so\n  // the later JSONL flush of the same question is de-duped. We synthesize a\n  // screen-scoped toolUseId; the JSONL path overwrites pendingQuestions with the\n  // real toolUseId when it lands, so answering works once JSONL catches up.\n  handleLiveQuestion(sessionId: string, questions: AskQuestion[], occurrenceId?: string): void {\n    const key = questionContentKey(questions);\n    // Unchanged repaint: same content and, when the pty-host names the\n    // occurrence, one we already minted a prompt for (the registry keeps it\n    // under that id, answered or not, for PROMPT_TERMINAL_RETENTION_MS). The\n    // key now outlives an answer (#724), so without the occurrence half a\n    // genuinely new host occurrence with identical content would be swallowed\n    // by it — the same identity rule handlePermissionChange applies.\n    if (\n      this.pendingQuestionKey.get(sessionId) === key &&\n      (occurrenceId === undefined || this.promptRegistry.get(occurrenceId) !== null)\n    ) {\n      return; // already shown\n    }\n    const toolUseId = `screen:${sessionId}:${key.length}`;\n    const prior = this.pendingQuestions.get(sessionId);\n    const priorPrompt = prior ? this.promptRegistry.get(prior.promptId) : null;\n    if (priorPrompt?.state === \"open\" || priorPrompt?.state === \"updated\") {\n      this.promptRegistry.transition(priorPrompt.promptId, \"cancelled\", \"replaced\");\n    }\n    const prompt = this.promptRegistry.open(\n      questionPromptDraft(sessionId, questions, \"screen\"),\n      this.questionAnswerAdapter(sessionId),\n      occurrenceId,\n    );\n    this.pendingQuestions.set(sessionId, {\n      toolUseId,\n      questions,\n      origin: \"pty\",\n      promptId: prompt.promptId,\n    });\n    this.pendingQuestionKey.set(sessionId, key);\n    // Counterpart to ws.broadcast_permission below. Shape only — question and\n    // option TEXT must never enter logs, same rule the detectors follow. The\n    // absence of this line is what made a client-scraped card indistinguishable\n    // from one this server sent (#823).\n    const subscriberCount = this.sessionSubscribers.get(sessionId)?.size ?? 0;\n    this.log.info(\n      `[ws.broadcast_question] ${sessionId.slice(0, 8)} subscribers=${subscriberCount}`,\n      {\n        event: \"ws.broadcast_question\",\n        sessionId,\n        subscriberCount,\n        origin: \"screen\",\n        questionCount: questions.length,\n        optionCount: questions[0]?.options.length ?? 0,\n      },\n    );\n    this.broadcastToSession(sessionId, { type: \"question\", sessionId, toolUseId, questions });\n  }\n\n  handleJsonlQuestion(\n    sessionId: string,\n    toolUseId: string,\n    questions: AskQuestion[],\n    origin: \"pty\" | \"jsonl\",\n  ): void {\n    const prior = this.pendingQuestions.get(sessionId);\n    const sameQuestion =\n      prior !== undefined && questionContentKey(prior.questions) === questionContentKey(questions);\n    let prompt: Prompt;\n    if (sameQuestion) {\n      const current = this.promptRegistry.get(prior.promptId);\n      prompt =\n        current?.provenance.source === \"transcript\"\n          ? current\n          : this.promptRegistry.update(\n              prior.promptId,\n              questionPromptDraft(sessionId, questions, \"transcript\"),\n              this.questionAnswerAdapter(sessionId),\n            );\n    } else {\n      const priorPrompt = prior ? this.promptRegistry.get(prior.promptId) : null;\n      if (priorPrompt?.state === \"open\" || priorPrompt?.state === \"updated\") {\n        this.promptRegistry.transition(priorPrompt.promptId, \"cancelled\", \"replaced\");\n      }\n      prompt = this.promptRegistry.open(\n        questionPromptDraft(sessionId, questions, \"transcript\"),\n        this.questionAnswerAdapter(sessionId),\n      );\n    }\n    this.pendingQuestions.set(sessionId, {\n      toolUseId,\n      questions,\n      origin,\n      promptId: prompt.promptId,\n    });\n    // No broadcast on this path — the card reaches the client on the next\n    // GET /api/sessions/:id — so without this the question is pending with\n    // nothing at all in the log.\n    this.log.info(`[question.pending] ${sessionId.slice(0, 8)} origin=${origin}`, {\n      event: \"question.pending\",\n      sessionId,\n      origin,\n      questionCount: questions.length,\n      optionCount: questions[0]?.options.length ?? 0,\n    });\n  }\n\n  // Permission gate opened/closed (OSC 777 + scraped options). Broadcasts the\n  // additive `permission` / `permission_cancelled` events. Mobile answers by\n  // sending the chosen option index via /input { keys } (e.g. \"2\\r\").\n  handlePermissionChange(\n    sessionId: string,\n    gate: {\n      prompt?: string;\n      detail?: string;\n      options: PermissionOption[];\n      cursor?: number;\n    } | null,\n    occurrenceId?: string,\n  ): void {\n    if (gate === null) {\n      const prior = this.pendingPermission.get(sessionId);\n      if (!prior) return;\n      // providerClosed, not transition: on a scraped gate the answer keys are\n      // what removed the box, and sendKeys fires this synchronously from inside\n      // the write. Deferring it there lets the answer settle `resolved`; a close\n      // with no answer in flight still cancels here, unchanged. The broadcast\n      // below is unconditional either way — the box IS gone, and a legacy client\n      // must be told so whichever way the record settles.\n      if (prior.promptId) this.promptRegistry.providerClosed(prior.promptId, \"provider_closed\");\n      this.pendingPermission.delete(sessionId);\n      this.pendingPermissionKey.delete(sessionId);\n      this.broadcastToSession(sessionId, { type: \"permission_cancelled\", sessionId });\n      return;\n    }\n    const key = permissionContentKey(gate);\n    const prior = this.pendingPermission.get(sessionId);\n    const priorPromptId = prior?.promptId;\n    if (\n      this.pendingPermissionKey.get(sessionId) === key &&\n      (occurrenceId === undefined || prior?.occurrenceId === occurrenceId)\n    ) {\n      return; // unchanged repaint\n    }\n    // Server-owned instance id. permissionGateKey is content-derived and cannot\n    // tell two consecutive identical gates apart; this can. The same identity\n    // as the pending gate (cursor moved, repaint) keeps its id; anything else —\n    // first open, different content, reopen after a close — is a new instance.\n    //\n    // Occurrence is compared to OCCURRENCE, never to promptId. The two were\n    // equal by construction until open() began minting a fresh id for a\n    // replayed occurrence held by a terminal record: after such a reopen the\n    // entry carries the new id while the host still sends the original\n    // occurrence (host.ts keeps it while permissionGateKey is unchanged, and\n    // that key excludes the cursor), so comparing against promptId made every\n    // later repaint a new instance — a cancel+open pair per paint, a new\n    // gateId on the wire, and any in-flight answer settling prompt_cancelled.\n    // `priorPromptId !== undefined` stays: it guards the registry lookup\n    // below, which is a separate question from identity.\n    const samePrompt =\n      prior &&\n      priorPromptId !== undefined &&\n      permissionGateKey(prior) === permissionGateKey(gate) &&\n      (occurrenceId === undefined || prior.occurrenceId === occurrenceId);\n    if (prior && !samePrompt) {\n      const priorPrompt = prior.promptId ? this.promptRegistry.get(prior.promptId) : null;\n      if (priorPrompt?.state === \"open\" || priorPrompt?.state === \"updated\") {\n        this.promptRegistry.transition(priorPrompt.promptId, \"cancelled\", \"replaced\");\n      }\n    }\n    const prompt =\n      gate.options.length === 0\n        ? null\n        : samePrompt\n          ? this.promptRegistry.get(priorPromptId)\n          : this.promptRegistry.open(\n              permissionPromptDraft(sessionId, gate),\n              this.permissionAnswerAdapter(sessionId),\n              occurrenceId,\n            );\n    if (samePrompt && !prompt) throw new Error(\"Pending permission prompt disappeared\");\n    const gateId = prompt?.promptId ?? occurrenceId ?? prior?.gateId ?? randomUUID();\n    this.pendingPermission.set(sessionId, {\n      ...gate,\n      gateId,\n      ...(prompt ? { promptId: prompt.promptId } : {}),\n      ...(occurrenceId !== undefined ? { occurrenceId } : {}),\n    });\n    this.pendingPermissionKey.set(sessionId, key);\n    const subscriberCount = this.sessionSubscribers.get(sessionId)?.size ?? 0;\n    this.log.info(\n      `[ws.broadcast_permission] ${sessionId.slice(0, 8)} subscribers=${subscriberCount}`,\n      { event: \"ws.broadcast_permission\", sessionId, subscriberCount },\n    );\n    this.broadcastToSession(sessionId, {\n      type: \"permission\",\n      sessionId,\n      ...(gate.prompt ? { prompt: gate.prompt } : {}),\n      ...(gate.detail ? { detail: gate.detail } : {}),\n      options: gate.options,\n      ...(gate.cursor !== undefined ? { cursor: gate.cursor } : {}),\n      contentKey: permissionGateKey(gate),\n      gateId,\n    });\n  }\n\n  private permissionAnswerAdapter(sessionId: string): PromptAnswerAdapter {\n    return async ({ prompt, answer }): Promise<PromptAdapterResult> => {\n      const gate = this.pendingPermission.get(sessionId);\n      if (!gate || gate.promptId !== prompt.promptId) {\n        return {\n          ok: false,\n          code: \"prompt_unavailable\",\n          terminal: { state: \"unavailable\", reason: \"provider_prompt_missing\" },\n        };\n      }\n      const response = answer.responses[0];\n      const selectedId = response?.optionIds?.[0];\n      const selectedIndex = prompt.questions[0]?.options.findIndex(\n        (option) => option.optionId === selectedId,\n      );\n      if (selectedIndex === undefined || selectedIndex < 0) {\n        return { ok: false, code: \"unknown_option\" };\n      }\n      const option = gate.options[selectedIndex];\n      if (!option) return { ok: false, code: \"unknown_option\" };\n      const provider = this.sessionStore.getManaged(sessionId)?.provider;\n      if (\n        provider !== CODEX_CLI_PROVIDER &&\n        !(await this.permissionGateStillOpen(sessionId, permissionGateKey(gate)))\n      ) {\n        // The terminal below settles the registry record, but nothing else\n        // retires pendingPermission, so /input kept refusing text beside a\n        // cancelled record until retention swept it (the legacy route's\n        // gateClosed() clears it). Clear it here too — but only when NO gate is\n        // painted: a scrape also fails when a different gate has taken the\n        // screen before the detector announced it, and this entry is then what\n        // keeps composer text off that live gate (#703). The entry must still\n        // be THIS prompt, before and after the await: a newer gate that was\n        // registered meanwhile is live and must stay.\n        if (\n          this.pendingPermission.get(sessionId)?.promptId === prompt.promptId &&\n          !(await this.anyPermissionGateOnScreen(sessionId)) &&\n          this.pendingPermission.get(sessionId)?.promptId === prompt.promptId\n        ) {\n          this.pendingPermission.delete(sessionId);\n          this.pendingPermissionKey.delete(sessionId);\n          this.broadcastToSession(sessionId, { type: \"permission_cancelled\", sessionId });\n        }\n        return {\n          ok: false,\n          code: \"prompt_cancelled\",\n          terminal: { state: \"cancelled\", reason: \"provider_closed\" },\n        };\n      }\n      if (this.pendingPermission.get(sessionId)?.promptId !== prompt.promptId) {\n        return { ok: false, code: \"prompt_cancelled\" };\n      }\n      try {\n        this.ptyManager.sendKeys(\n          sessionId,\n          option.answerKeys ?? permissionAnswerKeys(option.index),\n        );\n      } catch {\n        return { ok: false, code: \"provider_error\" };\n      }\n      return { ok: true };\n    };\n  }\n\n  private questionAnswerAdapter(sessionId: string): PromptAnswerAdapter {\n    return async ({ prompt, answer }): Promise<PromptAdapterResult> => {\n      const pending = this.pendingQuestions.get(sessionId);\n      if (!pending || pending.promptId !== prompt.promptId) {\n        return {\n          ok: false,\n          code: \"prompt_unavailable\",\n          terminal: { state: \"unavailable\", reason: \"provider_prompt_missing\" },\n        };\n      }\n      const answers: Record<string, string | string[]> = {};\n      for (const question of prompt.questions) {\n        const response = answer.responses.find((item) => item.questionId === question.questionId);\n        if (!response?.optionIds) return { ok: false, code: \"unsupported_prompt_shape\" };\n        answers[question.text] = response.optionIds.map((optionId) => {\n          const option = question.options.find((item) => item.optionId === optionId);\n          return option?.label ?? \"\";\n        });\n      }\n      const resolution = resolveAnswer(pending, {\n        toolUseId: pending.toolUseId,\n        answers,\n      });\n      if (!resolution.ok) {\n        const code =\n          resolution.reason === \"unknown_option\" ||\n          resolution.reason === \"incomplete_answer\" ||\n          resolution.reason === \"unsupported_prompt_shape\"\n            ? resolution.reason\n            : \"prompt_unavailable\";\n        return { ok: false, code };\n      }\n      if (!(await this.questionMenuStillOpen(sessionId))) {\n        this.pendingQuestions.delete(sessionId);\n        this.pendingQuestionKey.delete(sessionId);\n        this.broadcastToSession(sessionId, {\n          type: \"question_cancelled\",\n          sessionId,\n          toolUseId: pending.toolUseId,\n        });\n        return {\n          ok: false,\n          code: \"prompt_cancelled\",\n          terminal: { state: \"cancelled\", reason: \"provider_closed\" },\n        };\n      }\n      if (this.pendingQuestions.get(sessionId)?.promptId !== prompt.promptId) {\n        return { ok: false, code: \"prompt_cancelled\" };\n      }\n      try {\n        this.ptyManager.sendKeys(sessionId, resolution.keys);\n      } catch {\n        return { ok: false, code: \"provider_error\" };\n      }\n      // pendingQuestionKey is KEPT, exactly as the legacy /answer route keeps\n      // it: a menu still painted after its answer must dedupe as a repaint, not\n      // re-mint as a fresh open prompt for a question already answered (#724).\n      // The menu leaving the screen clears it (onLiveQuestionGone), as does exit.\n      this.pendingQuestions.delete(sessionId);\n      this.broadcastToSession(sessionId, {\n        type: \"question_cancelled\",\n        sessionId,\n        toolUseId: pending.toolUseId,\n      });\n      return { ok: true };\n    };\n  }\n\n  /**\n   * Answer a permission gate — the validated counterpart of POST /:id/input.\n   *\n   * `/input` is a raw-bytes conduit (arrow-key nav uses it too) and stays that\n   * way; this route is the semantic one, mirroring the /answer split. Two\n   * things make it more than validation theatre:\n   *\n   *   - The client sends `{ contentKey, optionIndex }` and NO keystrokes. The\n   *     keys are derived here from our own copy of the gate, so the client's\n   *     key-derivation can never drift from the server's.\n   *   - `optionIndex` is a 0-based POSITION in the frame's `options[]`, NOT\n   *     `options[].index` (the digit painted on screen, 1-based and not always\n   *     contiguous). Both are small integers, so a client sending the digit\n   *     selects a different option — on \"1. Yes / 2. Yes, don't ask again\" the\n   *     digit for \"Yes\" is the position of \"don't ask again\". Optional\n   *     `optionLabel` binds the answer to the option the client displayed: when\n   *     present it must equal `options[optionIndex].label` or the answer is\n   *     refused as unknown_option. Absent, the position alone is trusted\n   *     (released clients).\n   *   - `contentKey` binds the answer to a specific gate. `isPermissionAnswer`\n   *     matches structurally, and approval gates repeat constantly (\"2. Yes /\n   *     3. No\" for every tool call), so without this a delayed answer to gate A\n   *     could be written as gate B's answer — a user approving a bash command\n   *     they never saw, with a 200 and a normal permission_cancelled. Treat the\n   *     check as a security boundary.\n   *\n   * Every refusal happens BEFORE sendKeys. On success we deliberately broadcast\n   * nothing: the PTY-side close (isPermissionAnswer in pty-manager) recognises\n   * the bytes we just wrote and fires permission_cancelled itself.\n   */\n  async handlePermissionAnswer(\n    sessionId: string,\n    req: IncomingMessage,\n    res: ServerResponse,\n  ): Promise<void> {\n    const body = await readBody(req);\n    const contentKey = body?.contentKey;\n    const optionIndex = body?.optionIndex;\n    const gateId = body?.gateId;\n    const optionLabel = body?.optionLabel;\n    if (typeof contentKey !== \"string\" || !Number.isInteger(optionIndex) || optionIndex < 0) {\n      json(res, 400, { ok: false, reason: \"Expected { contentKey: string, optionIndex: number }\" });\n      return;\n    }\n    if (gateId !== undefined && typeof gateId !== \"string\") {\n      json(res, 400, { ok: false, reason: \"Expected gateId to be a string\" });\n      return;\n    }\n    if (optionLabel !== undefined && typeof optionLabel !== \"string\") {\n      json(res, 400, { ok: false, reason: \"Expected optionLabel to be a string\" });\n      return;\n    }\n\n    // The client's card is dead. Clear it everywhere — permission_cancelled is\n    // unconditional here (a no-op for clients showing nothing) because a client\n    // that got this far believes a gate is up and must be told it isn't.\n    const gateClosed = (): void => {\n      const pending = this.pendingPermission.get(sessionId);\n      const prompt = pending?.promptId ? this.promptRegistry.get(pending.promptId) : null;\n      if (prompt?.state === \"open\" || prompt?.state === \"updated\") {\n        this.promptRegistry.transition(prompt.promptId, \"cancelled\", \"provider_closed\");\n      }\n      this.pendingPermission.delete(sessionId);\n      this.pendingPermissionKey.delete(sessionId);\n      this.broadcastToSession(sessionId, { type: \"permission_cancelled\", sessionId });\n      json(res, 409, { ok: false, reason: \"gate_closed\" });\n    };\n\n    // Cheapest first, screen scrape last. Every branch below returns before\n    // sendKeys — that ordering is the point of the route.\n    const gate = this.pendingPermission.get(sessionId);\n    if (!gate) {\n      gateClosed();\n      return;\n    }\n    // Instance check. A stale gateId means the client is answering a gate that\n    // has since closed and reopened — possibly with identical content, which\n    // contentKey alone would wave through. Refuse quietly, exactly like the\n    // content mismatch below: the live gate is fine and must stay up.\n    if (gateId !== undefined && gateId !== gate.gateId) {\n      json(res, 409, { ok: false, reason: \"gate_mismatch\" });\n      return;\n    }\n    if (gateId === undefined) {\n      // Temporary compatibility path for clients that predate gateId. Logged\n      // (metadata only) so its use is measurable and the path can be retired.\n      this.log.info(`[permission.answer_legacy_identity] ${sessionId.slice(0, 8)}`, {\n        event: \"permission.answer_legacy_identity\",\n        sessionId,\n      });\n    }\n    // A DIFFERENT gate is open, and it is legitimately on screen. Refuse, but\n    // broadcast nothing: permission_cancelled is session-wide, so it would\n    // clear a live card on every client, and the pendingPermissionKey dedupe\n    // means the repaint that would restore it may never come — a gate is a\n    // waiting screen. The requesting client clears from the reason instead.\n    // (Same shape as resolveAnswer's tool_use_mismatch, which also stays quiet.)\n    if (permissionGateKey(gate) !== contentKey) {\n      json(res, 409, { ok: false, reason: \"gate_mismatch\" });\n      return;\n    }\n    const option = gate.options[optionIndex];\n    if (!option) {\n      json(res, 409, { ok: false, reason: \"unknown_option\" });\n      return;\n    }\n    // Option check. contentKey and gateId pin the gate, not the choice: a\n    // client that sent options[].index instead of a position lands on another\n    // option of the SAME gate — possibly a persistent grant. Quiet, like\n    // unknown_option: the gate itself is fine and must stay up.\n    if (optionLabel !== undefined && option.label !== optionLabel) {\n      json(res, 409, { ok: false, reason: \"unknown_option\" });\n      return;\n    }\n    // Our copy agrees; now ask the screen, which is fresher than the map — for\n    // Claude. Codex gates are synthesized by its runner from its own TUI\n    // patterns, and the Claude box scraper never matches a Codex screen, so\n    // asking it refused every Codex answer as gate_closed. The Codex runner\n    // clears the pending gate itself when the dialog leaves the screen, so for\n    // Codex the map is the authority and gateId carries instance identity.\n    const provider = this.sessionStore.getManaged(sessionId)?.provider;\n    if (\n      provider !== CODEX_CLI_PROVIDER &&\n      !(await this.permissionGateStillOpen(sessionId, contentKey))\n    ) {\n      gateClosed();\n      return;\n    }\n\n    try {\n      // Same self-close as the prompt route: these keys remove the box, so\n      // sendKeys tears the record down from inside the write and the resolve\n      // below used to find it already `cancelled` — a 200 over a cancelled\n      // record, invisible because this route's status never reads the registry.\n      this.promptRegistry.whileAnswering(gate.promptId ?? \"\", () =>\n        this.ptyManager.sendKeys(\n          sessionId,\n          option.answerKeys ?? permissionAnswerKeys(option.index),\n        ),\n      );\n    } catch (err) {\n      const message = err instanceof Error ? err.message : \"Failed to send answer\";\n      json(res, 400, { ok: false, reason: message });\n      return;\n    }\n    const normalized = gate.promptId ? this.promptRegistry.get(gate.promptId) : null;\n    if (normalized?.state === \"open\" || normalized?.state === \"updated\") {\n      this.promptRegistry.transition(normalized.promptId, \"resolved\", \"answered_legacy\");\n    }\n    json(res, 200, { ok: true });\n  }\n\n  /**\n   * Is THIS gate still the one on screen?\n   *\n   * Deliberately stricter than questionMenuStillOpen's \"is a menu up\": the\n   * staleness window this exists to cover (the ~300ms scrape throttle plus the\n   * wait for the next PTY chunk) is exactly where pendingPermission still says\n   * gate A while the screen has moved to gate B — and since approval gates\n   * repeat their shape, \"some gate is open\" would wave that through.\n   *\n   * Reads 60 lines because that is the window the detector that produced the\n   * pending gate uses (pty-manager's scrape); `detail` walks up to 6 lines\n   * above the prompt, so a shorter window can truncate it and manufacture a\n   * mismatch on a healthy gate.\n   *\n   * Best-effort, like questionMenuStillOpen: a session we hold no PTY for, or\n   * one that raced away mid-read, is not ours to veto.\n   */\n  private async permissionGateStillOpen(sessionId: string, contentKey: string): Promise<boolean> {\n    if (!this.ptyManager.hasSession(sessionId)) return true;\n    try {\n      const lines = await this.ptyManager.getOutputLines(sessionId, 60);\n      // Both producers of a Claude-session gate, not just the box scraper: a\n      // card raised by detectShellPrompt (`read -p \"[y/N]\"`, \"press Enter\") is\n      // never a Claude box, so checking scrapePermissionGate alone refused every\n      // answer to one as closed and its Continue could never write the \\r.\n      // Every producer of a Claude-session gate, not just the box scraper: a\n      // card raised by detectShellPrompt, or the unnumbered startup choices\n      // (workspace trust) that no numbered scraper can see, would otherwise be\n      // refused as closed and its answer keys never written.\n      return [\n        scrapePermissionGate(lines),\n        detectShellPrompt(lines),\n        detectStartupChoiceGate(lines),\n      ].some((onScreen) => onScreen !== null && permissionGateKey(onScreen) === contentKey);\n    } catch {\n      return true;\n    }\n  }\n\n  /**\n   * Is ANY Claude permission gate painted? Not permissionGateStillOpen's \"is\n   * THIS gate\": an optionless entry has no content to compare against. The test\n   * is pty-manager's own \"box is still painted\" rule (either detector sees a\n   * gate), so this never retires an entry the detector would have kept — which\n   * also means a numbered list left in prose reads as painted and keeps\n   * refusing, the safe side. A shell prompt counts too: pty-manager raises it\n   * as a card, and composer text typed over a `[y/N]` answers it. Best-effort\n   * in the direction opposite to the answer routes: this may only UNBLOCK\n   * input, so a session with no PTY, or a read that fails, reports a gate.\n   */\n  private async anyPermissionGateOnScreen(sessionId: string): Promise<boolean> {\n    if (!this.ptyManager.hasSession(sessionId)) return true;\n    try {\n      const lines = await this.ptyManager.getOutputLines(sessionId, 60);\n      return (\n        detectGateScreen(lines) !== null ||\n        scrapePermissionGate(lines) !== null ||\n        detectShellPrompt(lines) !== null ||\n        // The unnumbered startup choices (workspace trust) are a gate too, and\n        // none of the scrapers above can see them — without this an answer to\n        // one would be refused as \"no gate on screen\".\n        detectStartupChoiceGate(lines) !== null\n      );\n    } catch {\n      return true;\n    }\n  }\n\n  /** Deliberately narrower than /input { keys }: fixed actions, no arbitrary bytes. */\n  async handleRawKey(sessionId: string, req: IncomingMessage, res: ServerResponse): Promise<void> {\n    const parsed = RawKeySchema.safeParse(await readBody(req));\n    if (!parsed.success) {\n      json(res, 400, { ok: false, code: \"invalid_raw_key\" });\n      return;\n    }\n    const { action, promptId, confirm } = parsed.data;\n    if (!this.ptyManager.hasSession(sessionId)) {\n      json(res, 409, { ok: false, code: \"raw_key_unavailable\" });\n      return;\n    }\n    let focused:\n      | { kind: \"permission\"; promptId: string; contentKey: string }\n      | { kind: \"question\"; promptId: string; toolUseId: string }\n      | null = null;\n    // Binding is opt-in on the payload, not implied by the action. Every other\n    // action must name its prompt (the `!promptId` refusal below); Escape may,\n    // and when it does it gets the same arbitration. Without it, a card's\n    // Cancel whose gate already closed lands at Claude's prompt and interrupts\n    // the turn the user is waiting on. Escape WITHOUT a promptId stays exactly\n    // as blind as before: the raw-keyboard Esc key and mobile's \"interrupt the\n    // agent\" action have no prompt to name and rely on that.\n    if (action !== \"escape\" || promptId !== undefined) {\n      // Pending maps can retain a prompt after its registry record expired or\n      // was retired by another route. Sweep first, then only let a live\n      // registry record authorize bytes to reach the PTY.\n      this.promptRegistry.sweepExpired(sessionId);\n      // The PTY cursor is on a permission gate when both maps coexist. This is\n      // the same arbitration order as composer input; accepting the question\n      // id here would send navigation to a different focused dialog.\n      const permission = this.pendingPermission.get(sessionId);\n      const question = this.pendingQuestions.get(sessionId);\n      const livePermission = permission?.promptId\n        ? this.promptRegistry.get(permission.promptId)\n        : null;\n      const liveQuestion = question?.promptId ? this.promptRegistry.get(question.promptId) : null;\n      if (\n        permission?.promptId &&\n        (livePermission?.state === \"open\" || livePermission?.state === \"updated\")\n      ) {\n        focused = {\n          kind: \"permission\",\n          promptId: permission.promptId,\n          contentKey: permissionGateKey(permission),\n        };\n      } else if (\n        question?.promptId &&\n        (liveQuestion?.state === \"open\" || liveQuestion?.state === \"updated\")\n      ) {\n        focused = { kind: \"question\", promptId: question.promptId, toolUseId: question.toolUseId };\n      }\n      if (!promptId || promptId !== focused?.promptId) {\n        json(res, 409, { ok: false, code: \"raw_key_stale\" });\n        return;\n      }\n      if (action === \"enter\" && confirm !== true) {\n        json(res, 400, { ok: false, code: \"raw_key_confirmation_required\" });\n        return;\n      }\n      // The registry is only an event record; a host-keyboard answer, Esc, or\n      // the next PTY repaint can leave it open briefly after its picker has\n      // gone. Use the same rendered-screen checks as the answer routes before\n      // navigation reaches whatever the terminal is showing now.\n      if (focused?.kind === \"question\" && !(await this.questionMenuStillOpen(sessionId))) {\n        const pending = this.pendingQuestions.get(sessionId);\n        if (pending?.promptId === focused.promptId) {\n          const prompt = this.promptRegistry.get(focused.promptId);\n          if (prompt?.state === \"open\" || prompt?.state === \"updated\") {\n            this.promptRegistry.transition(prompt.promptId, \"cancelled\", \"provider_closed\");\n          }\n          this.pendingQuestions.delete(sessionId);\n          this.pendingQuestionKey.delete(sessionId);\n          this.broadcastToSession(sessionId, {\n            type: \"question_cancelled\",\n            sessionId,\n            toolUseId: focused.toolUseId,\n          });\n        }\n        json(res, 409, { ok: false, code: \"raw_key_stale\" });\n        return;\n      }\n      if (\n        focused?.kind === \"permission\" &&\n        this.sessionStore.getManaged(sessionId)?.provider !== CODEX_CLI_PROVIDER &&\n        !(await this.permissionGateStillOpen(sessionId, focused.contentKey))\n      ) {\n        const pending = this.pendingPermission.get(sessionId);\n        if (pending?.promptId === focused.promptId) {\n          const prompt = this.promptRegistry.get(focused.promptId);\n          if (prompt?.state === \"open\" || prompt?.state === \"updated\") {\n            this.promptRegistry.transition(prompt.promptId, \"cancelled\", \"provider_closed\");\n          }\n          this.pendingPermission.delete(sessionId);\n          this.pendingPermissionKey.delete(sessionId);\n          this.broadcastToSession(sessionId, { type: \"permission_cancelled\", sessionId });\n        }\n        json(res, 409, { ok: false, code: \"raw_key_stale\" });\n        return;\n      }\n    }\n    try {\n      if (action === \"enter\") {\n        // Enter commits the selected option, so it is user input rather than\n        // navigation: mark waiting_input → running before retiring the prompt.\n        this.ptyManager.sendKeys(sessionId, RAW_KEY_BYTES[action]);\n      } else {\n        this.ptyManager.sendRawKeys(sessionId, RAW_KEY_BYTES[action]);\n      }\n      // A bound Escape retires its prompt as deterministically as Enter does,\n      // but as `cancelled`: Esc dismisses the prompt, it does not answer it.\n      // Clearing the dedupe key below is deliberate (for a question, on Escape\n      // only — see there): if the key did not take and the box is still\n      // painted, the detector must be able to show the card again — a gate\n      // still on screen must never stay hidden.\n      if (focused && (action === \"enter\" || action === \"escape\")) {\n        const normalized = this.promptRegistry.get(focused.promptId);\n        if (normalized?.state === \"open\" || normalized?.state === \"updated\") {\n          if (action === \"enter\") {\n            this.promptRegistry.transition(normalized.promptId, \"resolved\", \"raw_key_enter\");\n          } else {\n            this.promptRegistry.transition(normalized.promptId, \"cancelled\", \"raw_key_escape\");\n          }\n        }\n        if (focused.kind === \"permission\") {\n          this.pendingPermission.delete(sessionId);\n          this.pendingPermissionKey.delete(sessionId);\n          this.broadcastToSession(sessionId, { type: \"permission_cancelled\", sessionId });\n        } else {\n          this.pendingQuestions.delete(sessionId);\n          // An answered menu keeps its key like every other answer path, so a\n          // still-painted repaint does not re-mint it (#724). Escape answered\n          // nothing: a menu it failed to close must be able to show again.\n          if (action === \"escape\") this.pendingQuestionKey.delete(sessionId);\n          this.broadcastToSession(sessionId, {\n            type: \"question_cancelled\",\n            sessionId,\n            toolUseId: focused.toolUseId,\n          });\n        }\n      }\n      json(res, 200, { ok: true });\n    } catch {\n      json(res, 409, { ok: false, code: \"raw_key_unavailable\" });\n    }\n  }\n\n  async handleSendAnswer(\n    sessionId: string,\n    req: IncomingMessage,\n    res: ServerResponse,\n  ): Promise<void> {\n    const body = await readBody(req);\n    const pending = this.pendingQuestions.get(sessionId);\n    const resolution = resolveAnswer(pending, body);\n    if (!resolution.ok) {\n      // Shapes this PTY path cannot answer (multi-question, multi-select, or an\n      // answer for a question that was never given) fail closed: nothing is\n      // written, and the client is told where the prompt can still be answered.\n      const unanswerable =\n        resolution.reason === \"unsupported_prompt_shape\" ||\n        resolution.reason === \"incomplete_answer\";\n      json(res, 400, {\n        ok: false,\n        reason: resolution.reason,\n        ...(unanswerable\n          ? {\n              error:\n                \"This prompt needs an answer the app cannot give yet; answer it in the terminal\",\n            }\n          : {}),\n      });\n      return;\n    }\n    // pending is guaranteed defined when resolution.ok is true (resolveAnswer guards it)\n    const toolUseId = pending?.toolUseId ?? \"\";\n    // A menu can close without this route answering it — Esc via /input { keys },\n    // an answer typed at the host keyboard, /clear, the model giving up. Nothing\n    // clears pendingQuestions in those cases (onLiveQuestionGone has no producer),\n    // so the client keeps a live-looking card and these keystrokes would be typed\n    // into the prompt box instead of the picker. The rendered screen is the only\n    // authority on whether the picker is still up.\n    if (!(await this.questionMenuStillOpen(sessionId))) {\n      const prompt = this.promptRegistry.get(pending?.promptId ?? \"\");\n      if (prompt?.state === \"open\" || prompt?.state === \"updated\") {\n        this.promptRegistry.transition(prompt.promptId, \"cancelled\", \"provider_closed\");\n      }\n      this.pendingQuestions.delete(sessionId);\n      this.pendingQuestionKey.delete(sessionId);\n      this.broadcastToSession(sessionId, { type: \"question_cancelled\", sessionId, toolUseId });\n      json(res, 409, { ok: false, reason: \"question_gone\" });\n      return;\n    }\n    try {\n      this.ptyManager.sendKeys(sessionId, resolution.keys);\n    } catch (err) {\n      const message = err instanceof Error ? err.message : \"Failed to send answer\";\n      json(res, 400, { ok: false, reason: message });\n      return;\n    }\n    const normalized = this.promptRegistry.get(pending?.promptId ?? \"\");\n    if (normalized?.state === \"open\" || normalized?.state === \"updated\") {\n      this.promptRegistry.transition(normalized.promptId, \"resolved\", \"answered_legacy\");\n    }\n    this.pendingQuestions.delete(sessionId);\n    this.broadcastToSession(sessionId, { type: \"question_cancelled\", sessionId, toolUseId });\n    json(res, 200, { ok: true });\n  }\n\n  /**\n   * Answer a normalized prompt by its opaque ids.\n   *\n   * Refusals are keyed by `code` — the stable machine taxonomy of the prompt\n   * contract. The released legacy routes (`/answer`, `/permission/answer`) key\n   * theirs by `reason` and keep doing so; a client reads whichever key belongs\n   * to the route it called, and the two vocabularies are not merged.\n   *\n   * Status follows the same split as the legacy routes: a malformed or\n   * unanswerable *request* is 400, a prompt whose *state* refuses the answer is\n   * 409. A retry after PROMPT_TERMINAL_RETENTION_MS answers 404\n   * `prompt_not_found`, not the recorded outcome — the record it would replay\n   * is gone by then.\n   */\n  async handlePromptAnswer(\n    sessionId: string,\n    req: IncomingMessage,\n    res: ServerResponse,\n  ): Promise<void> {\n    const parsed = PromptAnswerSchema.safeParse(await readBody(req));\n    if (!parsed.success) {\n      json(res, 400, { ok: false, code: \"invalid_prompt_answer\" });\n      return;\n    }\n    const outcome = await this.promptRegistry.answer(sessionId, parsed.data);\n    if (outcome.ok) {\n      json(res, 200, outcome);\n      return;\n    }\n    json(res, promptAnswerStatus(outcome.code), outcome);\n  }\n\n  // Best-effort: a session we don't own a PTY for, or one that raced away\n  // mid-read, is not ours to veto — say yes and let the write decide.\n  private async questionMenuStillOpen(sessionId: string): Promise<boolean> {\n    if (!this.ptyManager.hasSession(sessionId)) return true;\n    try {\n      return isQuestionMenuOnScreen(await this.ptyManager.getOutputLines(sessionId, PTY_ROWS));\n    } catch {\n      return true;\n    }\n  }\n\n  async handleUploadFile(\n    sessionId: string,\n    req: IncomingMessage,\n    res: ServerResponse,\n  ): Promise<void> {\n    const session = this.sessionStore.get(sessionId, this.deps.ptyAttachedIds());\n    if (!session) {\n      json(res, 404, { error: \"Session not found\" });\n      return;\n    }\n    if (!session.projectPath) {\n      json(res, 400, { error: \"Session has no project path\" });\n      return;\n    }\n\n    const body = await readBody(req);\n    const { filename, mimeType, dataBase64 } = body ?? {};\n    if (\n      typeof filename !== \"string\" ||\n      typeof mimeType !== \"string\" ||\n      typeof dataBase64 !== \"string\"\n    ) {\n      json(res, 400, { error: \"Missing filename, mimeType, or dataBase64\" });\n      return;\n    }\n\n    try {\n      const saved = await saveUploadFile({\n        sessionId,\n        projectPath: session.projectPath,\n        originalName: filename,\n        mimeType,\n        dataBase64,\n      });\n\n      try {\n        await recordUpload(this.dbPool, this.dbInstanceId, {\n          id: saved.id,\n          sessionId,\n          filePath: saved.filePath,\n          originalName: saved.originalName,\n          mimeType: saved.mimeType,\n          sizeBytes: saved.sizeBytes,\n        });\n      } catch (err) {\n        const message = err instanceof Error ? err.message : String(err);\n        this.log.warn(\n          `[uploads] DB record failed: ${message}`,\n          { event: \"uploads.db_record_failed\", error: message },\n          \"pino\",\n        );\n      }\n\n      json(res, 201, {\n        id: saved.id,\n        path: saved.filePath,\n        originalName: saved.originalName,\n        mimeType: saved.mimeType,\n        sizeBytes: saved.sizeBytes,\n      });\n    } catch (err) {\n      const message = err instanceof Error ? err.message : \"Upload failed\";\n      json(res, 400, { error: message });\n    }\n  }\n\n  handleGetOutput(sessionId: string, res: ServerResponse): void {\n    // Return PTY ring buffer if a PTY is attached; otherwise return empty\n    // so clients render \"no buffered output\" instead of an error.\n    try {\n      const output = this.ptyManager.getOutput(sessionId);\n      json(res, 200, { output });\n    } catch {\n      json(res, 200, { output: \"\" });\n    }\n  }\n\n  handleCancel(sessionId: string, res: ServerResponse): void {\n    this.discoveryCache = null;\n    try {\n      this.ptyManager.cancel(sessionId);\n      json(res, 200, { ok: true });\n    } catch (err) {\n      const message = err instanceof Error ? err.message : \"Failed to cancel\";\n      json(res, 400, { error: message });\n    }\n  }\n\n  /** Force-kill: SIGKILL instead of /stop's graceful SIGINT. */\n  async handleKillSession(\n    sessionId: string,\n    res: ServerResponse,\n    opts: { delete?: boolean } = {},\n  ): Promise<void> {\n    await this.handleStopSession(sessionId, res, { signal: \"SIGKILL\", delete: opts.delete });\n  }\n\n  async handleStopSession(\n    sessionId: string,\n    res: ServerResponse,\n    opts: {\n      signal?: NodeJS.Signals;\n      when?: \"now\" | \"idle\";\n      ignoreWatchers?: boolean;\n      delete?: boolean;\n    } = {},\n  ): Promise<void> {\n    if (opts.when === \"idle\") {\n      this.handleStopSessionWhenIdle(\n        sessionId,\n        res,\n        opts.ignoreWatchers ?? false,\n        opts.delete ?? false,\n      );\n      return;\n    }\n    const signal = opts.signal ?? \"SIGINT\";\n    const deleteAfter = opts.delete ?? false;\n    const STOP_TIMEOUT_MS = 5000;\n\n    const session = this.ptyManager.getSession(sessionId);\n    if (!session) {\n      res.writeHead(404, { \"Content-Type\": \"application/json\" });\n      res.end(JSON.stringify({ error: \"Session not found\" }));\n      return;\n    }\n\n    // Capture before putOnHold: the runner deletes the live session on hold,\n    // and onStatusChange then writes selfPtyEndedAt / a registry idle row that\n    // forgetSession has to clear afterwards.\n    const shouldForget = this.shouldForgetEmptySession(session);\n\n    if (session.status === \"idle\") {\n      if (shouldForget) this.forgetEmptyStoppedSession(sessionId);\n      if (deleteAfter) this.softDeleteConversation(sessionId);\n      res.writeHead(200, { \"Content-Type\": \"application/json\" });\n      res.end(JSON.stringify({ status: \"already_idle\", sessionId }));\n      return;\n    }\n\n    res.writeHead(200, {\n      \"Content-Type\": \"application/x-ndjson\",\n      \"Transfer-Encoding\": \"chunked\",\n      \"Cache-Control\": \"no-cache\",\n      \"X-Accel-Buffering\": \"no\",\n    });\n    res.write(`${JSON.stringify({ event: \"stopping\", sessionId })}\\n`);\n\n    const idlePromise = new Promise<\"idle\">((resolve) => {\n      const handler = (status: string) => {\n        if (status === \"idle\") {\n          this.sessionStatusBus.off(`status:${sessionId}`, handler);\n          resolve(\"idle\");\n        }\n      };\n      this.sessionStatusBus.on(`status:${sessionId}`, handler);\n    });\n\n    const timeoutPromise = new Promise<\"timeout\">((resolve) =>\n      setTimeout(() => resolve(\"timeout\"), STOP_TIMEOUT_MS),\n    );\n\n    this.ptyManager.putOnHold(sessionId, signal);\n    this.discoveryCache = null;\n\n    const outcome = await Promise.race([idlePromise, timeoutPromise]);\n\n    if (shouldForget) this.forgetEmptyStoppedSession(sessionId);\n    if (deleteAfter) this.softDeleteConversation(sessionId);\n\n    if (outcome === \"idle\") {\n      res.write(`${JSON.stringify({ event: \"stopped\", sessionId })}\\n`);\n    } else {\n      res.write(`${JSON.stringify({ event: \"timeout\", sessionId })}\\n`);\n      this.log.warn(\n        `[stop] session ${sessionId.slice(0, 8)} did not idle within ${STOP_TIMEOUT_MS}ms`,\n      );\n    }\n\n    res.end();\n  }\n\n  /**\n   * An unused start: the user never submitted a prompt, and the conversation\n   * cache has no row for this id (empty Codex/Claude often never write a JSONL).\n   * `conversationId === sessionId` is not evidence of history — only the cache\n   * is. promptCount > 0 or a cache hit keeps today's hold path.\n   */\n  private shouldForgetEmptySession(session: ManagedSession): boolean {\n    const stored = this.sessionStore.getManaged(session.id);\n    const promptCount = Math.max(session.promptCount, stored?.promptCount ?? 0);\n    if (promptCount > 0) return false;\n    return !this.hasCachedConversationFor(session, stored);\n  }\n\n  private hasCachedConversationFor(\n    session: ManagedSession,\n    stored: ManagedSession | null,\n  ): boolean {\n    const cache = this.cache;\n    if (!cache) return false;\n    const ids = new Set<string>([session.id]);\n    if (session.boundConversationId) ids.add(session.boundConversationId);\n    if (session.resumedFromConversationId) ids.add(session.resumedFromConversationId);\n    if (stored?.boundConversationId) ids.add(stored.boundConversationId);\n    if (stored?.resumedFromConversationId) ids.add(stored.resumedFromConversationId);\n    for (const id of ids) {\n      if (cache.hasConversation(id)) return true;\n    }\n    return false;\n  }\n\n  /**\n   * `when=idle`: hold now if the session is already settled, otherwise arm the\n   * existing kill-on-idle latch (`armHoldWhenIdle`, the same one mobile's\n   * `hold_session {when: \"waiting_input\"}` uses) to fire on the next natural\n   * idle transition. Unlike `when=now`, this checks watchers UP FRONT and\n   * reports the count rather than silently no-op'ing later — `ignoreWatchers`\n   * skips that check (and the latch's own fire-time check) entirely.\n   */\n  private handleStopSessionWhenIdle(\n    sessionId: string,\n    res: ServerResponse,\n    ignoreWatchers: boolean,\n    deleteAfter: boolean,\n  ): void {\n    if (!ignoreWatchers) {\n      const watcherCount = this.sessionSubscribers.get(sessionId)?.size ?? 0;\n      if (watcherCount > 0) {\n        json(res, 200, { status: \"watchers_present\", watcherCount, sessionId });\n        return;\n      }\n    }\n    // The delete itself happens in server.ts once the latch actually fires\n    // (immediately, for \"held\", or later for \"armed\") — never here, since an\n    // \"armed\" result hasn't killed anything yet.\n    const result = this.deps.armHoldWhenIdle(sessionId, { ignoreWatchers, deleteAfter });\n    if (result === \"no_session\") {\n      json(res, 404, { error: \"Session not found\" });\n      return;\n    }\n    json(res, 200, { status: result === \"held\" ? \"killed\" : \"armed\", sessionId });\n  }\n\n  private forgetEmptyStoppedSession(sessionId: string): void {\n    this.log.info(`[stop] forgetting empty session ${sessionId.slice(0, 8)}`, {\n      event: \"session.forget_empty\",\n      sessionId,\n    });\n    this.deps.forgetSession(sessionId);\n    this.wsHub.broadcast({\n      type: \"session_list\",\n      sessions: this.sessionStore.list(this.deps.ptyAttachedIds()),\n    });\n  }\n\n  /**\n   * Same empty-unused check stop uses (promptCount === 0 and no cache row,\n   * including boundConversationId / resumedFromConversationId). Safe after\n   * putOnHold: the runner may already have dropped the live session.\n   */\n  forgetIfEmptyUnused(sessionId: string): void {\n    const live = this.ptyManager.getSession(sessionId);\n    const stored = this.sessionStore.getManaged(sessionId);\n    const session = live ?? stored;\n    if (!session) return;\n    if (!this.shouldForgetEmptySession(session)) return;\n    this.forgetEmptyStoppedSession(sessionId);\n  }\n\n  /**\n   * Soft-deletes the cached conversation(s) this session maps to — the\n   * session id itself, plus any bound/resumed-from alias `hasCachedConversationFor`\n   * already knows how to chase (a Codex placeholder id vs. its real rollout\n   * id, etc.). Reads from `sessionStore`, not `ptyManager`, so it's safe to\n   * call after `putOnHold` has already dropped the live session.\n   */\n  softDeleteConversation(sessionId: string): void {\n    const cache = this.cache;\n    if (!cache) return;\n    const stored = this.sessionStore.getManaged(sessionId);\n    const ids = new Set<string>([sessionId]);\n    if (stored?.boundConversationId) ids.add(stored.boundConversationId);\n    if (stored?.resumedFromConversationId) ids.add(stored.resumedFromConversationId);\n    for (const id of ids) {\n      if (cache.hasConversation(id)) cache.softDeleteConversation(id);\n    }\n  }\n\n  /**\n   * Take over a Codex conversation from the standalone TUI that holds it.\n   *\n   * The owner is re-probed HERE rather than trusted from the 409 that offered\n   * the action: that pid was observed when resume was refused, possibly minutes\n   * earlier, and pids are reused. Killing a stale pid would stop an unrelated\n   * process, which is the one mistake this path must never make.\n   *\n   * Only a standalone `codex` TUI is eligible. A desktop / VS Code\n   * `codex app-server` hosts unrelated conversations in the same process, and\n   * an unidentified owner offers nothing to prove it does not — both refuse,\n   * and forking stays the recovery path for them.\n   */\n  private async adoptCodexRolloutOwner(\n    sessionId: string,\n    res: ServerResponse,\n    ownedHere: boolean,\n  ): Promise<void> {\n    if (ownedHere) {\n      json(res, 404, { error: \"Discovered session not found\" });\n      return;\n    }\n\n    const target = await this.deps.resolveConversationTarget(sessionId);\n    if (!target.ok || target.provider !== CODEX_CLI_PROVIDER || !target.historyPath) {\n      json(res, 404, { error: \"Discovered session not found\" });\n      return;\n    }\n\n    const availability = classifyResumability(target.projectPath);\n    if (!availability.resumable) {\n      json(res, 400, {\n        error: \"Cannot take over this session: its project directory no longer exists\",\n        code: \"ADOPT_PROJECT_PATH_MISSING\",\n        reason: availability.unavailable_reason,\n      });\n      return;\n    }\n\n    const owner = await findRolloutOwner(target.historyPath);\n    if (!owner) {\n      // Nobody holds it now — the collision that prompted this has cleared, so\n      // there is nothing to take over and a plain resume will succeed.\n      json(res, 409, {\n        error: \"Nothing is holding this conversation now; resume it instead\",\n        code: \"ADOPT_NO_OWNER\",\n      });\n      return;\n    }\n    if (owner.source !== \"terminal\") {\n      this.log.warn(`[adopt] refusing takeover of ${owner.command} (pid ${owner.pid})`, {\n        event: \"adopt.owner_not_terminal\",\n        sessionId,\n        ownerPid: owner.pid,\n        ownerCommand: owner.command,\n      });\n      json(res, 409, {\n        error:\n          \"This conversation is held by a process that may host other conversations; forking is the safe option\",\n        code: \"ADOPT_OWNER_NOT_TERMINAL\",\n        ownerCommand: owner.command,\n      });\n      return;\n    }\n\n    this.log.info(`[adopt] taking over codex rollout from pid ${owner.pid}`, {\n      event: \"session.codex_takeover\",\n      sessionId,\n      historyId: target.historyId,\n      ownerPid: owner.pid,\n    });\n\n    await this.killAndRespawn(res, {\n      sessionId,\n      spawnId: sessionId,\n      pid: owner.pid,\n      provider: CODEX_CLI_PROVIDER,\n      projectPath: target.projectPath,\n      projectName: target.conv?.projectName,\n      // `codex resume` takes the rollout id, which is not necessarily the id\n      // the client navigated to (that may be a local placeholder).\n      resumeId: target.historyId,\n    });\n  }\n\n  async handleAdopt(sessionId: string, res: ServerResponse): Promise<void> {\n    // Refresh discovery so we have the latest metadata\n    const discovered = await discoverClaudeProcesses();\n    this.sessionStore.setDiscovered(discovered);\n    this.discoveryCache = null;\n\n    const discSession = this.sessionStore.get(sessionId, this.deps.ptyAttachedIds());\n    if (!discSession || discSession.ptyAttached) {\n      // A Codex collision usually has no discovered row to adopt: discovery\n      // matches on argv, and a Codex process need not carry its rollout uuid\n      // there. The open file handle on the rollout is the signal that does see\n      // it, so fall back to that before refusing.\n      await this.adoptCodexRolloutOwner(sessionId, res, discSession?.ptyAttached === true);\n      return;\n    }\n\n    const { branch } = discSession;\n    let { projectPath, projectName } = discSession;\n    const convId = discSession.id;\n\n    if (discSession.pid == null) {\n      json(res, 400, { error: \"Session has no known PID\" });\n      return;\n    }\n\n    // Windows exposes no process CWD (neither CIM nor wmic carries it), so\n    // discovery reports an empty projectPath rather than fabricating one. Fall\n    // back to the conversation's own JSONL — the same authoritative source\n    // handleResume uses, since it is the file Claude looks up by filename when\n    // processing --resume. Every session reaching adopt has a conversation id\n    // (SessionStore drops discovered processes without one), so this resolves\n    // in the normal case on every platform.\n    if (!projectPath) {\n      const jsonlPath = this.deps.findJsonlPath(convId);\n      const jsonlCwd = jsonlPath ? await this.deps.readCwdFromJsonl(jsonlPath) : null;\n      if (jsonlCwd) {\n        projectPath = jsonlCwd;\n        projectName = projectName || basename(jsonlCwd);\n      }\n    }\n\n    // Refuse BEFORE killing anything if we could not resolve where the process\n    // is running. Adopt is destructive-then-restorative, so every reason it\n    // cannot restore has to be checked first: spawning the replacement with an\n    // empty cwd fails outright, and killing first then discovering this would\n    // destroy the user's session with nothing to put back in its place.\n    if (!projectPath) {\n      this.log.warn(\"adopt: refusing, working directory unknown\", {\n        event: \"adopt.no_project_path\",\n        sessionId,\n        pid: discSession.pid,\n      });\n      json(res, 400, {\n        error:\n          \"Cannot take over this session: its working directory could not be determined on this platform\",\n        code: \"ADOPT_NO_PROJECT_PATH\",\n      });\n      return;\n    }\n\n    // Same reasoning one step further: a conversation whose project directory\n    // was deleted (or whose worktree was removed) cannot be respawned there, so\n    // refuse while the external session is still alive rather than killing it\n    // and failing on spawn.\n    const availability = classifyResumability(projectPath);\n    if (!availability.resumable) {\n      this.log.warn(\"adopt: refusing, project directory no longer exists\", {\n        event: \"adopt.project_path_missing\",\n        sessionId,\n        pid: discSession.pid,\n        projectPath,\n        reason: availability.unavailable_reason,\n      });\n      json(res, 400, {\n        error: \"Cannot take over this session: its project directory no longer exists\",\n        code: \"ADOPT_PROJECT_PATH_MISSING\",\n        reason: availability.unavailable_reason,\n      });\n      return;\n    }\n\n    await this.killAndRespawn(res, {\n      sessionId,\n      spawnId: convId,\n      pid: discSession.pid,\n      provider: discSession.provider,\n      projectPath,\n      projectName,\n      branch,\n      // No `resumeId` — a discovered Codex process states its rollout id in\n      // argv (`codex resume <uuid>`), so the conversation id already IS the\n      // provider-side id, which is the case that field exists to cover.\n    });\n  }\n\n  /**\n   * The destructive half of a takeover, shared by every path that reaches it:\n   * stop the process that owns the conversation, prove it is gone, then respawn\n   * the conversation under this streamer.\n   *\n   * Both halves matter. SIGTERM is asynchronous, and spawning a resume before\n   * the old process has actually exited leaves two agents appending to one\n   * transcript — the interleaved state this codebase has no way to repair. A\n   * process that outlives the grace period aborts the takeover rather than\n   * knowingly creating that.\n   */\n  private async killAndRespawn(\n    res: ServerResponse,\n    opts: {\n      /** The conversation the client asked about — for logs. */\n      sessionId: string;\n      /** The id the new session is keyed by. */\n      spawnId: string;\n      pid: number;\n      provider?: ProviderName;\n      projectPath: string;\n      projectName?: string;\n      branch?: string;\n      /** Provider-side id for the resume, when it differs from `spawnId`. */\n      resumeId?: string;\n    },\n  ): Promise<void> {\n    this.ptyManager.killPid(opts.pid);\n    const exited = await waitForProcessExit(opts.pid, ADOPT_KILL_TIMEOUT_MS);\n    if (!exited) {\n      this.log.warn(\"adopt: external process did not exit; refusing to double-write\", {\n        event: \"adopt.kill_timeout\",\n        sessionId: opts.sessionId,\n        pid: opts.pid,\n      });\n      json(res, 409, {\n        error:\n          \"The existing process did not exit; not starting a second agent on this conversation\",\n        code: \"ADOPT_KILL_TIMEOUT\",\n        pid: opts.pid,\n      });\n      return;\n    }\n\n    // The provider has to be carried: `LiveSessionManager.start` defaults to\n    // Claude when it is absent, so adopting a Codex session used to respawn it\n    // as Claude against a Codex rollout id.\n    const session = await this.ptyManager.start(opts.spawnId, {\n      provider: opts.provider,\n      projectPath: opts.projectPath,\n      projectName: opts.projectName,\n      branch: opts.branch,\n      ...(opts.resumeId != null && { resumeId: opts.resumeId }),\n      claudeFlags: this.claudeFlags,\n      claudeExtraArgs: this.claudeExtraArgs,\n      ...this.deps.spawnFlagOverrides(),\n    });\n\n    this.sessionStore.addManaged(session);\n    this.registryBoot.recordSessionSpawn(session);\n    void this.sessionWatchers.watchConversationFile(session.id);\n\n    this.wsHub.broadcast({\n      type: \"session_list\",\n      sessions: this.sessionStore.list(this.deps.ptyAttachedIds()),\n    });\n\n    json(res, 201, { sessionId: session.id });\n  }\n\n  async handleStartSession(req: IncomingMessage, res: ServerResponse): Promise<void> {\n    const ip = req.socket?.remoteAddress ?? \"unknown\";\n    if (!this.deps.checkSessionStartRateLimit(ip)) {\n      json(res, 429, {\n        error: \"Too many session start requests. Please wait before trying again.\",\n      });\n      return;\n    }\n    if (this.agentConfig.enabled) {\n      const body = await readBody(req);\n      const result = await handleStartAgentSession(body, {\n        sessionStore: this.sessionStore,\n        // biome-ignore lint/style/noNonNullAssertion: agentClient is set when agentConfig.enabled is true\n        agentClient: this.agentClient!,\n        conversationsDir: this.cacheDir ? join(dirname(this.cacheDir), \"conversations\") : \"\",\n        agentConfig: this.agentConfig,\n      });\n      json(res, result.status, result.body);\n      if (result.status === 200) {\n        this.deps.broadcastOrUnicastSessionList(req);\n      }\n      return;\n    }\n    const body = await readBody(req);\n    const { path: relativePath, provider: requestedProvider, systemPrompt: clientPrompt } = body;\n\n    if (requestedProvider !== undefined && !isProviderName(requestedProvider)) {\n      json(res, 400, { error: \"Invalid provider\" });\n      return;\n    }\n    const provider = canonicalizeProviderName(requestedProvider) ?? CLAUDE_CODE_PROVIDER;\n\n    if (!this.browseRoot) {\n      json(res, 403, {\n        error: \"File browsing not configured. Set browseRoot on the server.\",\n        code: \"BROWSE_ROOT_NOT_SET\",\n      });\n      return;\n    }\n\n    if (typeof relativePath !== \"string\") {\n      json(res, 400, { error: \"Missing path field\" });\n      return;\n    }\n\n    let resolvedPath: string;\n    try {\n      resolvedPath = await resolveBrowsePath(this.browseRoot, relativePath);\n    } catch (err) {\n      const message = err instanceof Error ? err.message : \"Invalid path\";\n      json(res, 400, { error: message });\n      return;\n    }\n\n    this.discoveryCache = null;\n\n    const systemPromptParts = [\n      this.defaultSystemPrompt,\n      BROWSE_SYSTEM_PROMPT(this.browseRoot),\n      typeof clientPrompt === \"string\" ? clientPrompt : null,\n    ].filter(Boolean);\n\n    // Positional systemPrompt is the opening user turn (Codex, Cursor), not a\n    // system-level instruction. Gate it so a fresh session never gets an\n    // uninvited first message unless opted in.\n    const includeSystemPrompt =\n      capabilitiesFor(provider).systemPrompt !== \"positional\" || this.codexSystemPromptEnabled;\n\n    try {\n      const session = await this.ptyManager.startFresh({\n        provider,\n        projectPath: resolvedPath,\n        projectName: body.projectName,\n        ...(includeSystemPrompt && { systemPrompt: systemPromptParts.join(\"\\n\") }),\n        claudeFlags: this.claudeFlags,\n        claudeExtraArgs: this.claudeExtraArgs,\n        ...this.deps.spawnFlagOverrides(),\n      });\n\n      this.sessionStore.addManaged(session);\n      this.registryBoot.recordSessionSpawn(session);\n\n      // Block for the PTY to actually reach waiting_input (or fail) so the\n      // caller gets a trustworthy status instead of navigating on a guess.\n      // Races against the same fallback window pty-manager itself uses for\n      // prompt-marker detection, plus margin — if neither settles in time we\n      // fall back to the old fire-and-forget shape rather than hang the request.\n      const { outcome, session: settled } = await this.deps.waitForStartupOutcome(\n        session.id,\n        START_READY_TIMEOUT_MS,\n      );\n      const current = this.sessionStore.get(session.id, this.deps.ptyAttachedIds());\n\n      if (outcome === \"ready\" && current) {\n        json(res, 200, { session: current });\n      } else if (outcome === \"failed\" && current) {\n        // The diagnosed reason rides on the settled session, not on the store\n        // copy — same as the Codex resume path below. Reading only the store\n        // here is what turned \"the Claude binary is not accessible\" into a\n        // bare \"exited before becoming ready\".\n        json(res, 502, {\n          id: session.id,\n          status: \"idle\",\n          error: settled?.failureReason ?? \"Session exited before becoming ready\",\n        });\n      } else {\n        // Timeout, or session vanished from the store — old async contract.\n        json(res, 202, { id: session.id, status: \"pending\" });\n      }\n\n      if (provider === CODEX_CLI_PROVIDER) {\n        // Wire up rollout-file binding once Codex creates its persisted session.\n        this.sessionWatchers.watchForCodexRollout(session.id, resolvedPath);\n      } else if (provider === CLAUDE_CODE_PROVIDER) {\n        // Wire up JSONL watching once Claude creates the conversation file.\n        this.sessionWatchers.watchForJsonl(session.id, resolvedPath);\n      } else if (provider === CURSOR_PROVIDER) {\n        // Cursor mints its own run id under agent-transcripts/; bind it so\n        // GET /api/conversations/:placeholderId resolves like Codex.\n        this.sessionWatchers.watchForCursorTranscript(session.id, resolvedPath);\n      }\n\n      this.deps.broadcastOrUnicastSessionList(req);\n    } catch (err) {\n      const message = err instanceof Error ? err.message : \"Failed to start session\";\n      const statusCode =\n        typeof (err as Error & { statusCode?: unknown }).statusCode === \"number\"\n          ? (err as Error & { statusCode: number }).statusCode\n          : 500;\n      const code = (err as Error & { code?: unknown }).code;\n      this.log.error(`[start] failed to start session: ${message}`, {\n        event: \"session.start_failed\",\n        error: message,\n      });\n      json(\n        res,\n        statusCode,\n        typeof code === \"string\" ? { error: message, code } : { error: message },\n      );\n    }\n  }\n\n  async handleSetSessionName(\n    sessionId: string,\n    req: IncomingMessage,\n    res: ServerResponse,\n  ): Promise<void> {\n    if (!this.cache) {\n      json(res, 503, { error: \"Cache not available\" });\n      return;\n    }\n    let parsed: { name?: string };\n    try {\n      parsed = await readBody(req);\n    } catch {\n      json(res, 400, { error: \"Invalid JSON\" });\n      return;\n    }\n    const name = parsed.name?.trim();\n    if (!name) {\n      json(res, 400, { error: \"name is required\" });\n      return;\n    }\n    this.cache.upsertSessionName(sessionId, name);\n    json(res, 200, { ok: true });\n  }\n\n  handleGetSessionNames(res: ServerResponse): void {\n    if (!this.cache) {\n      json(res, 200, {});\n      return;\n    }\n    json(res, 200, this.cache.listSessionNames());\n  }\n}\n","import crypto from 'crypto'\n\nimport { urlAlphabet } from './url-alphabet/index.js'\n\nconst POOL_SIZE_MULTIPLIER = 128\nlet pool, poolOffset\n\nlet fillPool = bytes => {\n  if (bytes < 0) throw new RangeError('Wrong ID size')\n  try {\n    if (!pool || pool.length < bytes) {\n      pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER)\n      crypto.randomFillSync(pool)\n      poolOffset = 0\n    } else if (poolOffset + bytes > pool.length) {\n      crypto.randomFillSync(pool)\n      poolOffset = 0\n    }\n  } catch (e) {\n    pool = undefined\n    throw e\n  }\n  poolOffset += bytes\n}\n\nlet random = bytes => {\n  fillPool((bytes |= 0))\n  return pool.subarray(poolOffset - bytes, poolOffset)\n}\n\nlet customRandom = (alphabet, defaultSize, getRandom) => {\n  let mask = (2 << (31 - Math.clz32((alphabet.length - 1) | 1))) - 1\n\n\n  let step = Math.ceil((1.6 * mask * defaultSize) / alphabet.length)\n\n  return (size = defaultSize) => {\n    if (size <= 0) return ''\n    let id = ''\n    while (true) {\n      let bytes = getRandom(step)\n      let i = step\n      while (i--) {\n        id += alphabet[bytes[i] & mask] || ''\n        if (id.length === size) return id\n      }\n    }\n  }\n}\n\nlet customAlphabet = (alphabet, size = 21) =>\n  customRandom(alphabet, size, random)\n\nlet nanoid = (size = 21) => {\n  fillPool((size |= 0))\n  let id = ''\n  for (let i = poolOffset - size; i < poolOffset; i++) {\n    id += urlAlphabet[pool[i] & 63]\n  }\n  return id\n}\n\nexport { nanoid, customAlphabet, customRandom, urlAlphabet, random }\n","let urlAlphabet =\n  'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\n\nexport { urlAlphabet }\n","// src/agent/handle-send-agent-input.ts\n//\n// Pure function for multi-agent user-input. Server.ts wraps this in HTTP\n// plumbing. Implements spec §3.2 + §5 (payload guard) + §6 (lock check).\n\nimport type { UserInputSignal } from \"@threadbase-sh/agent-types\";\nimport { nanoid } from \"nanoid\";\nimport type { ConversationCache } from \"../conversation-cache\";\nimport { getLogger } from \"../logger\";\nimport type { ManagedSession } from \"../types\";\nimport type { AgentClient } from \"./agent-client\";\nimport type { AgentConfig } from \"./agent-config\";\nimport { AgentErrorCode, agentErrorResponse } from \"./errors\";\nimport { mapTailToConversationTurns } from \"./history-mapper\";\nimport { measureSignalPayload, shouldLogTrajectory } from \"./payload-guard\";\n\nconst log = getLogger(\"agent.send-input\");\n\nexport interface SendInputBody {\n  text?: string;\n}\n\nexport interface SendAgentInputDeps {\n  sessionStore: {\n    getManaged: (sessionId: string) => ManagedSession | null;\n  };\n  cache: ConversationCache;\n  agentClient: AgentClient;\n  agentConfig: AgentConfig;\n}\n\nexport interface SendAgentInputResult {\n  status: number;\n  body: Record<string, unknown>;\n}\n\nexport async function handleSendAgentInput(\n  sessionId: string,\n  body: SendInputBody,\n  deps: SendAgentInputDeps,\n): Promise<SendAgentInputResult> {\n  // 1. Validate body\n  if (typeof body.text !== \"string\" || body.text.length === 0) {\n    return {\n      status: 400,\n      body: agentErrorResponse(\n        AgentErrorCode.INPUT_REQUIRED,\n        \"Body must contain a non-empty `text` field\",\n      ),\n    };\n  }\n\n  // 2. Look up session\n  const session = deps.sessionStore.getManaged(sessionId);\n  if (!session) {\n    return {\n      status: 404,\n      body: agentErrorResponse(AgentErrorCode.SESSION_NOT_FOUND, `Session ${sessionId} not found`),\n    };\n  }\n\n  // 3. Session-busy check\n  if (session.currentTurnId) {\n    return {\n      status: 429,\n      body: agentErrorResponse(\n        AgentErrorCode.SESSION_BUSY,\n        \"A turn is already in flight; retry shortly\",\n        { retryAfterMs: deps.agentConfig.sessionBusyRetryMs },\n      ),\n    };\n  }\n\n  const turnId = nanoid();\n  // 4. Acquire the lock by setting currentTurnId before any I/O.\n  session.currentTurnId = turnId;\n\n  // 5. Build conversation history from cache\n  const conversationId = session.conversationId ?? session.id;\n  const tail = deps.cache.getConversationTail(conversationId);\n  const conversationHistory = mapTailToConversationTurns(tail);\n\n  // 6. Compose signal\n  const signal: UserInputSignal = {\n    turnId,\n    prompt: body.text,\n    conversationHistory,\n  };\n\n  // 7. Payload-size guard\n  const measurement = measureSignalPayload(signal, deps.agentConfig.payload.limitBytes);\n  const turnCount = conversationHistory.length;\n  if (shouldLogTrajectory(turnCount, measurement.bytes, deps.agentConfig.payload)) {\n    log.warn(`session payload trajectory`, {\n      sessionId,\n      turnCount,\n      observedBytes: measurement.bytes,\n      limitBytes: deps.agentConfig.payload.limitBytes,\n      pctOfLimit: Math.round((measurement.bytes / deps.agentConfig.payload.limitBytes) * 100),\n    });\n  }\n  if (measurement.exceedsLimit) {\n    session.currentTurnId = null; // release lock — no signal will be sent\n    return {\n      status: 413,\n      body: agentErrorResponse(\n        AgentErrorCode.SESSION_HISTORY_FULL,\n        \"Conversation history exceeds payload limit\",\n        {\n          limitBytes: deps.agentConfig.payload.limitBytes,\n          observedBytes: measurement.bytes,\n        },\n      ),\n    };\n  }\n\n  // 8. Send signal\n  try {\n    await deps.agentClient.sendUserInput(sessionId, signal);\n  } catch (err) {\n    session.currentTurnId = null; // release lock on failure\n    const message = err instanceof Error ? err.message : \"Temporal unavailable\";\n    return {\n      status: 503,\n      body: agentErrorResponse(AgentErrorCode.TEMPORAL_UNAVAILABLE, message),\n    };\n  }\n\n  return { status: 202, body: { turnId, status: \"queued\" } };\n}\n","// src/agent/errors.ts\n//\n// Structured error codes for multi-agent HTTP endpoints.\n// Existing PTY-mode endpoints keep their unstructured {error: \"msg\"} shape;\n// the retrofit is captured in tb-multi-agent/docs/plans/structured-error-codes-retrofit.md.\n\nexport const AgentErrorCode = {\n  SESSION_NOT_FOUND: \"SESSION_NOT_FOUND\",\n  SESSION_HISTORY_FULL: \"SESSION_HISTORY_FULL\",\n  SESSION_BUSY: \"SESSION_BUSY\",\n  INVALID_SESSION_STATE: \"INVALID_SESSION_STATE\",\n  CONVERSATION_NOT_FOUND: \"CONVERSATION_NOT_FOUND\",\n  INPUT_REQUIRED: \"INPUT_REQUIRED\",\n  INVALID_BODY: \"INVALID_BODY\",\n  TEMPORAL_UNAVAILABLE: \"TEMPORAL_UNAVAILABLE\",\n  NOT_APPLICABLE_IN_MULTI_AGENT_MODE: \"NOT_APPLICABLE_IN_MULTI_AGENT_MODE\",\n  INTERNAL_ERROR: \"INTERNAL_ERROR\",\n} as const;\n\nexport type AgentErrorCode = (typeof AgentErrorCode)[keyof typeof AgentErrorCode];\n\n/**\n * Build a structured error response. `error` and `code` are canonical;\n * `extra` may carry hint fields like `retryAfterMs` or `limitBytes` but\n * cannot override the canonical fields.\n */\nexport function agentErrorResponse(\n  code: AgentErrorCode,\n  message: string,\n  extra: Record<string, unknown> = {},\n): { error: string; code: AgentErrorCode } & Record<string, unknown> {\n  return { ...extra, error: message, code };\n}\n","// src/agent/history-mapper.ts\n//\n// Converts a CachedTail (the shape ConversationCache returns) into a\n// ConversationTurn[] (the shape the worker's UserInputSignal expects).\n//\n// Rules per spec §4:\n// - Text blocks: keep, concatenate with \"\\n\".\n// - tool_use, tool_result, thinking blocks: drop.\n// - Messages with empty content after stripping: drop.\n// - Unknown roles: drop with WARN.\n\nimport type { ConversationTurn } from \"@threadbase-sh/agent-types\";\nimport type { CachedTail } from \"../conversation-cache\";\nimport { getLogger } from \"../logger\";\n\nconst log = getLogger(\"agent.history-mapper\");\n\ntype ContentBlock =\n  | { type: \"text\"; text: string }\n  | { type: \"tool_use\"; id: string; name: string; input: unknown }\n  | { type: \"tool_result\"; tool_use_id: string; content: unknown }\n  | { type: \"thinking\"; thinking: string }\n  | { type: string; [key: string]: unknown };\n\nfunction extractText(message: { text?: string; content?: unknown[] | null }): string {\n  // Prefer structured content[] over flat text if both are present.\n  if (Array.isArray(message.content)) {\n    const blocks = message.content as ContentBlock[];\n    const textParts: string[] = [];\n    for (const block of blocks) {\n      if (\n        block &&\n        typeof block === \"object\" &&\n        block.type === \"text\" &&\n        typeof block.text === \"string\"\n      ) {\n        textParts.push(block.text);\n      }\n      // tool_use / tool_result / thinking: ignored by design.\n    }\n    return textParts.join(\"\\n\");\n  }\n  return typeof message.text === \"string\" ? message.text : \"\";\n}\n\nexport function mapTailToConversationTurns(tail: CachedTail | null): ConversationTurn[] {\n  if (!tail || !Array.isArray(tail.messages) || tail.messages.length === 0) {\n    return [];\n  }\n\n  const turns: ConversationTurn[] = [];\n  for (const message of tail.messages) {\n    const role = message.role;\n    if (role !== \"user\" && role !== \"assistant\") {\n      log.warn(\"unknown role in tail; skipping\", {\n        role,\n        conversationId: tail.conversationId,\n      });\n      continue;\n    }\n    const content = extractText(message);\n    if (!content || content.length === 0) {\n      continue;\n    }\n    turns.push({ role, content });\n  }\n  return turns;\n}\n","// src/agent/payload-guard.ts\n//\n// Per spec §5: enforce a 1.5 MB ceiling on UserInputSignal payloads (75% of\n// Temporal's 2 MB hard limit) and emit trajectory WARN logs as a session\n// approaches the wall.\n\nimport type { UserInputSignal } from \"@threadbase-sh/agent-types\";\n\nexport interface PayloadMeasurement {\n  bytes: number;\n  exceedsLimit: boolean;\n}\n\n/**\n * Serialize the signal and measure its byte size. Returns both the count and\n * whether it exceeds the supplied limit.\n *\n * Callers should refuse the input and return 413 SESSION_HISTORY_FULL when\n * `exceedsLimit` is true.\n */\nexport function measureSignalPayload(\n  signal: UserInputSignal,\n  limitBytes: number,\n): PayloadMeasurement {\n  const bytes = Buffer.byteLength(JSON.stringify(signal), \"utf8\");\n  return { bytes, exceedsLimit: bytes > limitBytes };\n}\n\nexport interface TrajectoryConfig {\n  trajectoryLogBytes: number;\n  trajectoryLogTurns: number;\n}\n\n/**\n * Trajectory log trigger. Fires when EITHER:\n * - The session has reached a turn count that's a multiple of 5, starting at\n *   `trajectoryLogTurns` (default 20), OR\n * - The composed signal is >= `trajectoryLogBytes` (default 500 KB) regardless\n *   of turn count.\n *\n * Returning true means the caller should emit a WARN log line with current\n * size + turn count + percentage-of-limit info.\n */\nexport function shouldLogTrajectory(\n  turnCount: number,\n  bytes: number,\n  cfg: TrajectoryConfig,\n): boolean {\n  if (bytes >= cfg.trajectoryLogBytes) return true;\n  if (turnCount < cfg.trajectoryLogTurns) return false;\n  return (turnCount - cfg.trajectoryLogTurns) % 5 === 0;\n}\n","// src/agent/handle-start-agent-session.ts\n//\n// Pure function (deps + body in, response out) for multi-agent session\n// creation. Server.ts wraps this in HTTP plumbing.\n\nimport { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { nanoid } from \"nanoid\"; // already a transitive dep of tb-streamer\nimport type { ManagedSession } from \"../types\";\nimport type { AgentClient } from \"./agent-client\";\nimport type { AgentConfig } from \"./agent-config\";\nimport { AgentErrorCode, agentErrorResponse } from \"./errors\";\n\nexport interface StartSessionBody {\n  conversationId?: string;\n}\n\nexport interface StartAgentSessionDeps {\n  sessionStore: {\n    addManaged: (session: ManagedSession) => void;\n    initAgentSession: (sessionId: string, dedupeCapacity: number) => void;\n  };\n  agentClient: AgentClient;\n  conversationsDir: string;\n  agentConfig: AgentConfig;\n}\n\nexport interface StartAgentSessionResult {\n  status: number;\n  body: Record<string, unknown>;\n}\n\n/**\n * Validate body shape. Accept only `{}` or `{conversationId: string}`.\n * Anything else is `INVALID_BODY`.\n */\nfunction validateBody(body: unknown): { ok: true; conversationId: string | null } | { ok: false } {\n  if (body === null || body === undefined || typeof body !== \"object\") {\n    return { ok: false };\n  }\n  const keys = Object.keys(body);\n  if (keys.length === 0) {\n    return { ok: true, conversationId: null };\n  }\n  if (keys.length === 1 && keys[0] === \"conversationId\") {\n    const v = (body as { conversationId: unknown }).conversationId;\n    if (typeof v === \"string\" && v.length > 0) {\n      return { ok: true, conversationId: v };\n    }\n  }\n  return { ok: false };\n}\n\nexport async function handleStartAgentSession(\n  body: unknown,\n  deps: StartAgentSessionDeps,\n): Promise<StartAgentSessionResult> {\n  const parsed = validateBody(body);\n  if (!parsed.ok) {\n    return {\n      status: 400,\n      body: agentErrorResponse(\n        AgentErrorCode.INVALID_BODY,\n        \"Body must be {} or {conversationId: string}\",\n      ),\n    };\n  }\n\n  let conversationId = parsed.conversationId;\n  if (conversationId) {\n    // Resume — JSONL must exist\n    const jsonlPath = join(deps.conversationsDir, `${conversationId}.jsonl`);\n    if (!existsSync(jsonlPath)) {\n      return {\n        status: 404,\n        body: agentErrorResponse(\n          AgentErrorCode.CONVERSATION_NOT_FOUND,\n          `No conversation found for id ${conversationId}`,\n        ),\n      };\n    }\n  }\n\n  const sessionId = nanoid();\n  if (!conversationId) conversationId = sessionId;\n\n  // Build a minimal ManagedSession. PTY-specific fields stay undefined/null;\n  // the spec (§3.3) says they're returned as null in multi-agent mode.\n  const now = new Date();\n  const session: ManagedSession = {\n    id: sessionId,\n    conversationId,\n    projectPath: \"\",\n    projectName: \"\",\n    branch: \"\",\n    status: \"running\",\n    startedAt: now,\n    completedAt: null,\n    promptCount: 0,\n    lastOutput: \"\",\n    currentTurnId: null,\n  };\n\n  try {\n    deps.sessionStore.addManaged(session);\n    deps.sessionStore.initAgentSession(sessionId, deps.agentConfig.dedupe.perSessionCapacity);\n    await deps.agentClient.startSession(sessionId);\n  } catch (err) {\n    const message = err instanceof Error ? err.message : \"Temporal unavailable\";\n    return {\n      status: 503,\n      body: agentErrorResponse(AgentErrorCode.TEMPORAL_UNAVAILABLE, message),\n    };\n  }\n\n  return {\n    status: 200,\n    body: { sessionId, conversationId, status: \"running\" },\n  };\n}\n","import { mkdir, readdir, realpath, stat } from \"fs/promises\";\nimport { join, resolve, sep } from \"path\";\n\n/**\n * Thrown when a browse target is inside the root but does not exist on disk\n * (e.g. a mobile-cached path whose folder was since moved or deleted). Lets the\n * browse handler answer 404 instead of conflating it with an out-of-root 400.\n */\nexport class BrowsePathNotFoundError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = \"BrowsePathNotFoundError\";\n  }\n}\n\nexport async function resolveBrowsePath(browseRoot: string, relativePath: string): Promise<string> {\n  const normalizedRoot = resolve(browseRoot);\n  // On Unix, if relativePath is already an absolute path under browseRoot, use it directly.\n  // Only strip the leading separator for bare names like \"/projectA\" sent by the mobile browse\n  // tree — not for full paths like \"/Users/foo/bar\" which are absolute, not drive-root-relative.\n  // On Windows we always strip because \"\\foo\" means \"drive root relative\", never a full path.\n  let sanitized: string;\n  if (\n    process.platform !== \"win32\" &&\n    relativePath.startsWith(\"/\") &&\n    relativePath.length > 1 &&\n    relativePath.includes(\"/\", 1)\n  ) {\n    sanitized = relativePath;\n  } else {\n    sanitized = relativePath.replace(/^[/\\\\]+/, \"\");\n  }\n  const target = sanitized ? resolve(normalizedRoot, sanitized) : normalizedRoot;\n  // Build the allowed prefix with exactly one separator — normalizedRoot may already end with sep\n  // when browseRoot is a drive root (e.g. \"C:\\\"), which would otherwise create a double-sep prefix.\n  const rootPrefix = normalizedRoot.endsWith(sep) ? normalizedRoot : `${normalizedRoot}${sep}`;\n  if (!target.startsWith(rootPrefix) && target !== normalizedRoot) {\n    throw new Error(\"Path outside browse root\");\n  }\n  // Verify the path exists; surface a not-found as a typed error so the handler\n  // can answer 404 (folder gone) rather than the out-of-root 400 above.\n  try {\n    await realpath(target);\n  } catch (err: any) {\n    if (err?.code === \"ENOENT\") {\n      throw new BrowsePathNotFoundError(`Path not found: ${target}`);\n    }\n    throw err;\n  }\n  return target;\n}\n\nexport async function listDirectories(absolutePath: string): Promise<Array<{ name: string }>> {\n  const entries = await readdir(absolutePath, { withFileTypes: true });\n  return entries\n    .filter((e) => e.isDirectory())\n    .map((e) => ({ name: e.name }))\n    .sort((a, b) => a.name.localeCompare(b.name));\n}\n\nexport async function listFiles(absolutePath: string): Promise<Array<{ name: string }>> {\n  const entries = await readdir(absolutePath, { withFileTypes: true });\n  return entries\n    .filter((e) => e.isFile())\n    .map((e) => ({ name: e.name }))\n    .sort((a, b) => a.name.localeCompare(b.name));\n}\n\nexport async function createDirectory(parentAbsolutePath: string, name: string): Promise<string> {\n  if (name.includes(\"/\") || name.includes(\"\\\\\") || name === \"..\" || name === \".\") {\n    throw new Error(\"Invalid directory name\");\n  }\n  const target = join(parentAbsolutePath, name);\n  try {\n    const s = await stat(target);\n    if (s.isDirectory()) throw new Error(\"Directory already exists\");\n  } catch (err: any) {\n    if (err.code !== \"ENOENT\") throw err;\n  }\n  await mkdir(target);\n  return target;\n}\n","import type pg from \"pg\";\n\nexport interface UploadRecord {\n  id: string;\n  sessionId: string;\n  filePath: string;\n  originalName: string;\n  mimeType: string;\n  sizeBytes: number;\n}\n\nexport async function recordUpload(\n  pool: pg.Pool | null,\n  instanceId: string | null,\n  row: UploadRecord,\n): Promise<void> {\n  if (!pool) return;\n  await pool.query(\n    `INSERT INTO session_uploads\n       (id, session_id, instance_id, file_path, original_name, mime_type, size_bytes)\n     VALUES ($1, $2, $3, $4, $5, $6, $7)`,\n    [\n      row.id,\n      row.sessionId,\n      instanceId,\n      row.filePath,\n      row.originalName,\n      row.mimeType,\n      row.sizeBytes,\n    ],\n  );\n}\n","import { execFile } from \"child_process\";\nimport { platform } from \"os\";\nimport { basename, dirname } from \"path\";\nimport { isWindows } from \"./platform\";\nimport {\n  CLAUDE_CODE_PROVIDER,\n  CODEX_CLI_PROVIDER,\n  CURSOR_PROVIDER,\n  type ProviderName,\n} from \"./providers\";\nimport type { DiscoveredProcess } from \"./types\";\n\nexport async function discoverClaudeProcesses(): Promise<DiscoveredProcess[]> {\n  if (platform() === \"win32\") return discoverWindows();\n  return discoverUnix();\n}\n\n// ─── Command-line identification ───────────────────────────────────\n\n// The npm-installed CLI runs as `node <...>/claude-code/cli.js`, so matching on\n// the process NAME alone (the old `pgrep -x claude` / `IMAGENAME eq claude.exe`)\n// misses every shim install — the process is called `node`. Identify by what is\n// actually being executed instead.\nconst CLAUDE_CLI_SCRIPT = /claude-code[\\\\/](?:cli|index)\\.(?:js|mjs|cjs)$/i;\nconst JS_RUNTIMES = new Set([\"node\", \"node.exe\", \"bun\", \"bun.exe\", \"deno\", \"deno.exe\"]);\n\n// Split a command line into tokens, honouring double-quoted paths (Windows\n// installs live under \"C:\\Program Files\\...\" and would otherwise split apart).\nexport function tokenizeCommandLine(commandLine: string): string[] {\n  const tokens: string[] = [];\n  let current = \"\";\n  let quoted = false;\n  for (const ch of commandLine) {\n    if (ch === '\"') {\n      quoted = !quoted;\n      continue;\n    }\n    if (!quoted && (ch === \" \" || ch === \"\\t\")) {\n      if (current) tokens.push(current);\n      current = \"\";\n      continue;\n    }\n    current += ch;\n  }\n  if (current) tokens.push(current);\n  return tokens;\n}\n\n// A command line is just text and may carry a path in either separator form,\n// so `path.basename` cannot be used here — it honours only the host's\n// separator and would leave a Windows path intact when parsed on POSIX. The\n// script-path regex above is separator-agnostic for the same reason.\nfunction exeBaseName(token: string): string {\n  const cut = Math.max(token.lastIndexOf(\"/\"), token.lastIndexOf(\"\\\\\"));\n  return cut === -1 ? token : token.slice(cut + 1);\n}\n\n/**\n * Whether a command line is a Claude Code CLI process.\n *\n * Accepts a native binary invoked by any path, and a JS runtime hosting the\n * published CLI entry point. Deliberately conservative: it inspects only the\n * executable and the script it runs, never the whole string, so an unrelated\n * process that merely mentions \"claude\" in a flag (an editor session, this\n * streamer itself) is not mistaken for an agent.\n */\nexport function looksLikeClaudeProcess(commandLine: string): boolean {\n  const tokens = tokenizeCommandLine(commandLine);\n  if (tokens.length === 0) return false;\n\n  const exe = exeBaseName(tokens[0]).toLowerCase();\n  if (exe === \"claude\" || exe === \"claude.exe\") return true;\n\n  if (JS_RUNTIMES.has(exe)) {\n    // The script is the first non-flag argument (`node --flag script.js ...`).\n    for (const raw of tokens.slice(1)) {\n      if (raw.startsWith(\"-\")) continue;\n      return CLAUDE_CLI_SCRIPT.test(raw);\n    }\n  }\n  return false;\n}\n\n/**\n * Codex subcommands that are never an interactive session.\n *\n * A deny-list, arrived at the hard way. The obvious allow-list — \"the\n * subcommand must be `resume` or absent\" — cannot be written correctly, because\n * finding \"the subcommand\" means knowing which flags take a value: `codex --cd\n * /srv/app` would read the path as the subcommand and reject a real session,\n * and there is no reliable enumeration of Codex's value-taking flags to fix\n * that with.\n *\n * Over-accepting is the risk a deny-list carries, and here it is bounded. A\n * process only becomes adoptable if it also states a rollout id, which is what\n * `codex resume <uuid>` does and what no non-interactive subcommand does — so a\n * future non-interactive verb missing from this list is discovered but never\n * reaches adopt, because SessionStore drops a discovered process that names no\n * conversation.\n */\nconst CODEX_NON_INTERACTIVE_SUBCOMMANDS = new Set([\n  \"app-server\",\n  \"exec\",\n  \"mcp\",\n  \"proto\",\n  \"login\",\n  \"logout\",\n  \"completion\",\n]);\n\n/**\n * Whether a command line is an interactive Codex CLI session.\n *\n * Far more selective than the Claude matcher has to be, because \"codex\" is a\n * crowded name on a machine that has the ChatGPT desktop app: its Electron\n * framework is literally `Codex Framework.framework`, its helpers are\n * `Codex (Renderer)` and `Codex (Service)`, and `~/.codex/` holds a Chrome\n * extension host and a computer-use service. Measured on one developer machine,\n * 21 processes matched the word \"codex\" and only 3 were sessions.\n *\n * Two discriminators do the work:\n *\n *  - The executable's base name must be exactly `codex`, which drops every\n *    Electron helper and the `codex-code-mode-host` sidecar (which does have a\n *    TTY, so liveness alone would not have separated it).\n *  - No token may be a non-interactive subcommand. This is the load-bearing\n *    one: the ChatGPT app's `/Applications/ChatGPT.app/Contents/Resources/codex`\n *    and the VS Code extension's bundled binary are both named exactly `codex`,\n *    and only `app-server` distinguishes them from a session someone is typing\n *    at. Scanning every token rather than locating the subcommand means a\n *    value that happens to equal one of these names costs a missed session,\n *    never a wrongly claimed one.\n */\nexport function looksLikeCodexProcess(commandLine: string): boolean {\n  const tokens = tokenizeCommandLine(commandLine);\n  if (tokens.length === 0) return false;\n\n  const exe = exeBaseName(tokens[0]).toLowerCase();\n  if (exe !== \"codex\" && exe !== \"codex.exe\") return false;\n\n  // A macOS bundle path contains spaces, so tokenizing splits it mid-path and\n  // the first token can END at a directory called \"Codex\" — which is exactly\n  // what `.../Frameworks/Codex Framework.framework/.../Codex (Renderer)` and\n  // `~/.codex/computer-use/Codex Computer Use.app/...` do. Their base name then\n  // reads as `codex` and the executable check alone lets them through. No real\n  // CLI invocation has a bundle marker anywhere in it.\n  if (tokens.some((token) => /\\.(?:app|framework)[\\\\/]/i.test(token))) return false;\n\n  for (const token of tokens.slice(1)) {\n    if (CODEX_NON_INTERACTIVE_SUBCOMMANDS.has(token.toLowerCase())) return false;\n  }\n  return true;\n}\n\nconst CURSOR_NON_INTERACTIVE_SUBCOMMANDS = new Set([\n  \"login\",\n  \"logout\",\n  \"mcp\",\n  \"sandbox\",\n  \"worker\",\n  \"acp\",\n  \"update\",\n  \"create-chat\",\n  \"generate-rule\",\n  \"rule\",\n  \"help\",\n  \"about\",\n  \"status\",\n  \"whoami\",\n  \"models\",\n  \"install-shell-integration\",\n  \"uninstall-shell-integration\",\n]);\n\nexport function looksLikeCursorProcess(commandLine: string): boolean {\n  const tokens = tokenizeCommandLine(commandLine);\n  if (tokens.length === 0) return false;\n\n  const exe = exeBaseName(tokens[0]).toLowerCase();\n  if (\n    exe !== \"agent\" &&\n    exe !== \"agent.exe\" &&\n    exe !== \"cursor-agent\" &&\n    exe !== \"cursor-agent.exe\"\n  ) {\n    return false;\n  }\n\n  for (const token of tokens.slice(1)) {\n    if (CURSOR_NON_INTERACTIVE_SUBCOMMANDS.has(token.toLowerCase())) return false;\n  }\n  return true;\n}\n\n/** Which agent a command line is, or null when it is neither. */\nexport function providerForCommandLine(commandLine: string): ProviderName | null {\n  if (looksLikeClaudeProcess(commandLine)) return CLAUDE_CODE_PROVIDER;\n  if (looksLikeCodexProcess(commandLine)) return CODEX_CLI_PROVIDER;\n  if (looksLikeCursorProcess(commandLine)) return CURSOR_PROVIDER;\n  return null;\n}\n\n// Codex resumes by positional rollout id (`codex resume <uuid>`), not by the\n// `--resume <id>` flag Claude uses, so the Claude extractor cannot see it.\n// Anchored on a UUID shape rather than \"the token after resume\": `codex resume\n// --last` picks the most recent session and carries no id at all, and adopting\n// a session under the id \"--last\" would name a conversation that does not exist.\nconst CODEX_ROLLOUT_ID =\n  /\\bresume\\s+([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\\b/i;\n\nexport function extractCodexResumeId(args: string): string | null {\n  return args.match(CODEX_ROLLOUT_ID)?.[1] ?? null;\n}\n\n/** The conversation id a discovered process is working on, if it states one. */\nexport function extractConversationId(args: string, provider: ProviderName): string | null {\n  return provider === CODEX_CLI_PROVIDER ? extractCodexResumeId(args) : extractResumeId(args);\n}\n\nasync function discoverUnix(): Promise<DiscoveredProcess[]> {\n  const pids = await getPidsUnix();\n\n  const results = await Promise.all(\n    pids.map(async (pid) => {\n      try {\n        const [cwd, args, startedAt] = await Promise.all([\n          getProcessCwdUnix(pid),\n          getProcessArgsUnix(pid),\n          getProcessStartTimeUnix(pid),\n        ]);\n        // Re-derived here rather than carried from the sweep: the pgrep\n        // fallback matches on name alone, so this is the only point at which\n        // `codex app-server` can be told apart from a session.\n        const provider = providerForCommandLine(args);\n        if (provider === null) return null;\n\n        return {\n          pid,\n          provider,\n          projectPath: cwd,\n          projectName: basename(cwd),\n          branch: await readGitBranch(cwd),\n          conversationId: extractConversationId(args, provider),\n          startedAt,\n        } satisfies DiscoveredProcess;\n      } catch {\n        return null;\n      }\n    }),\n  );\n\n  return results.filter((r): r is DiscoveredProcess => r !== null);\n}\n\nasync function discoverWindows(): Promise<DiscoveredProcess[]> {\n  // Preferred: one CIM query for every candidate process. This finds npm-shim\n  // installs (which run as node.exe) and drops the wmic dependency — wmic is\n  // removed on current Windows 11 builds, where the legacy path below silently\n  // yields nothing. Falls back to tasklist+wmic if PowerShell/CIM is unavailable.\n  const viaCim = await discoverWindowsViaCim();\n  if (viaCim) return viaCim;\n\n  const pids = await getPidsWindows();\n\n  const results = await Promise.all(\n    pids.map(async (pid) => {\n      try {\n        const info = await getProcessInfoWindows(pid);\n        if (!info) return null;\n\n        const provider = providerForCommandLine(info.args);\n        if (provider === null) return null;\n\n        return {\n          pid,\n          provider,\n          projectPath: info.cwd,\n          projectName: basename(info.cwd),\n          branch: await readGitBranch(info.cwd),\n          conversationId: extractConversationId(info.args, provider),\n          startedAt: info.startedAt,\n        } satisfies DiscoveredProcess;\n      } catch {\n        return null;\n      }\n    }),\n  );\n\n  return results.filter((r): r is DiscoveredProcess => r !== null);\n}\n\n// ─── Unix Helpers ──────────────────────────────────────────────────\n\nfunction run(\n  cmd: string,\n  args: string[],\n  opts: { cwd?: string; timeout?: number } = {},\n): Promise<string> {\n  return new Promise((resolve, reject) => {\n    execFile(\n      cmd,\n      args,\n      { windowsHide: isWindows, encoding: \"utf-8\", timeout: opts.timeout ?? 5000, cwd: opts.cwd },\n      (err, stdout) => {\n        if (err) reject(err);\n        else resolve(stdout as string);\n      },\n    );\n  });\n}\n\n// Parse `ps -eo pid=,args=` output into pids whose command line is an agent CLI.\n// Exported for tests — this is where shim installs (running as `node`) are\n// recovered, which a name-only `pgrep -x claude` can never see.\nexport function parsePsOutput(stdout: string): number[] {\n  const pids: number[] = [];\n  for (const line of stdout.split(\"\\n\")) {\n    const trimmed = line.trim();\n    if (!trimmed) continue;\n    const match = trimmed.match(/^(\\d+)\\s+(.*)$/);\n    if (!match) continue;\n    const pid = Number.parseInt(match[1], 10);\n    if (!(pid > 0)) continue;\n    if (providerForCommandLine(match[2]) !== null) pids.push(pid);\n  }\n  return pids;\n}\n\nasync function getPidsUnix(): Promise<number[]> {\n  // One `ps` sweep matched on the command line. Falls back to the historical\n  // name-only pgrep if ps is unavailable; that path finds native-binary installs\n  // only, which is still better than returning nothing.\n  try {\n    return parsePsOutput(await run(\"ps\", [\"-eo\", \"pid=,args=\"]));\n  } catch {\n    // fall through\n  }\n  // Name-only fallback, one sweep per agent. It cannot see shim installs (those\n  // run as `node`) and cannot tell an interactive `codex` from the ChatGPT\n  // app's `codex app-server`, so the per-pid args re-read in discoverUnix is\n  // what actually filters this path — it drops anything that is neither agent.\n  const pids: number[] = [];\n  for (const name of [\"claude\", \"codex\"]) {\n    try {\n      const output = await run(\"pgrep\", [\"-x\", name]);\n      for (const line of output.trim().split(\"\\n\")) {\n        const pid = Number.parseInt(line, 10);\n        if (pid > 0) pids.push(pid);\n      }\n    } catch {\n      // No match for this agent, or no pgrep at all. Try the next one.\n    }\n  }\n  return pids;\n}\n\nasync function getProcessCwdUnix(pid: number): Promise<string> {\n  const output = await run(\"lsof\", [\"-p\", String(pid), \"-a\", \"-d\", \"cwd\", \"-Fn\"]);\n  const match = output.match(/n(.+)/);\n  return match?.[1] ?? \"\";\n}\n\nasync function getProcessArgsUnix(pid: number): Promise<string> {\n  return (await run(\"ps\", [\"-p\", String(pid), \"-o\", \"args=\"])).trim();\n}\n\n/**\n * Full command line of a single live process, or \"\" if it cannot be read.\n *\n * Used by the boot reconciler's pid-reuse guard: a recorded pid being alive is\n * never sufficient evidence that the process is still ours, because pids get\n * recycled. The caller matches its stored token against this before claiming a\n * surviving session — and treats an unreadable command line as \"cannot confirm\"\n * rather than \"confirmed\", so a failure here can never promote an unrelated\n * process into a managed session.\n */\nexport async function getProcessArgs(pid: number): Promise<string> {\n  if (!Number.isInteger(pid) || pid < 1) return \"\";\n  try {\n    if (platform() === \"win32\") {\n      const info = await getProcessInfoWindows(pid);\n      return info?.args ?? \"\";\n    }\n    return await getProcessArgsUnix(pid);\n  } catch {\n    // Process vanished between the liveness probe and this call, or ps/wmic is\n    // unavailable. Either way we cannot confirm identity.\n    return \"\";\n  }\n}\n\nasync function getProcessStartTimeUnix(pid: number): Promise<Date> {\n  const raw = (await run(\"ps\", [\"-p\", String(pid), \"-o\", \"lstart=\"])).trim();\n  const d = new Date(raw);\n  return Number.isNaN(d.getTime()) ? new Date() : d;\n}\n\n// ─── Windows Helpers ───────────────────────────────────────────────\n\ninterface CimProcess {\n  ProcessId: number;\n  CommandLine: string | null;\n  CreationDate: string | null;\n}\n\n// Parse the CIM/PowerShell JSON payload. Exported for tests: the shape differs\n// for a single result (bare object) vs several (array), and CreationDate can\n// arrive as an ISO string or as the /Date(ms)/ serialization.\nexport function parseCimProcesses(stdout: string): CimProcess[] {\n  const trimmed = stdout.trim();\n  if (!trimmed) return [];\n  const parsed = JSON.parse(trimmed);\n  return Array.isArray(parsed) ? parsed : [parsed];\n}\n\nexport function parseCimDate(value: string | null): Date {\n  if (value) {\n    const epoch = value.match(/\\/Date\\((\\d+)\\)\\//);\n    if (epoch) return new Date(Number(epoch[1]));\n    const d = new Date(value);\n    if (!Number.isNaN(d.getTime())) return d;\n  }\n  return new Date();\n}\n\nasync function discoverWindowsViaCim(): Promise<DiscoveredProcess[] | null> {\n  let stdout: string;\n  try {\n    // WQL filter at the provider — dumping every Win32_Process as JSON is what\n    // made GET /api/sessions take tens of seconds on a busy Windows box. Claude\n    // still runs as claude.exe or under a JS runtime (npm shim); looksLikeClaudeProcess\n    // below drops unrelated node/bun/deno processes.\n    stdout = await run(\"powershell.exe\", [\n      \"-NoProfile\",\n      \"-NonInteractive\",\n      \"-Command\",\n      \"Get-CimInstance Win32_Process -Filter \\\"Name = 'claude.exe' OR Name = 'claude' OR Name = 'codex.exe' OR Name = 'codex' OR Name = 'node.exe' OR Name = 'bun.exe' OR Name = 'deno.exe'\\\" | Select-Object ProcessId,CommandLine,CreationDate | ConvertTo-Json -Compress\",\n    ]);\n  } catch {\n    return null; // PowerShell unavailable — let the caller fall back.\n  }\n\n  let rows: CimProcess[];\n  try {\n    rows = parseCimProcesses(stdout);\n  } catch {\n    return null;\n  }\n\n  const results: DiscoveredProcess[] = [];\n  for (const row of rows) {\n    const commandLine = row.CommandLine ?? \"\";\n    if (!commandLine) continue;\n    // The CIM filter above matches on process name, which cannot separate an\n    // interactive `codex` from the ChatGPT app's `codex app-server`. This does.\n    const provider = providerForCommandLine(commandLine);\n    if (provider === null) continue;\n    // Windows exposes no process CWD (neither CIM nor wmic carries it), so the\n    // project path is genuinely unknown here rather than guessed. The previous\n    // code substituted the executable's own directory, which reported an\n    // unrelated install path as the user's project.\n    results.push({\n      pid: row.ProcessId,\n      provider,\n      projectPath: \"\",\n      projectName: \"\",\n      branch: \"\",\n      conversationId: extractConversationId(commandLine, provider),\n      startedAt: parseCimDate(row.CreationDate),\n    });\n  }\n  return results;\n}\n\nasync function getPidsWindows(): Promise<number[]> {\n  try {\n    const output = await run(\"tasklist\", [\"/FI\", \"IMAGENAME eq claude.exe\", \"/FO\", \"CSV\", \"/NH\"]);\n    return output\n      .trim()\n      .split(\"\\n\")\n      .filter(Boolean)\n      .map((line) => {\n        const parts = line.split(\",\");\n        return Number.parseInt(parts[1]?.replace(/\"/g, \"\") ?? \"0\", 10);\n      })\n      .filter((pid) => pid > 0);\n  } catch {\n    return [];\n  }\n}\n\nasync function getProcessInfoWindows(\n  pid: number,\n): Promise<{ cwd: string; args: string; startedAt: Date } | null> {\n  try {\n    const output = await run(\"wmic\", [\n      \"process\",\n      \"where\",\n      `ProcessId=${pid}`,\n      \"get\",\n      \"CommandLine,CreationDate,ExecutablePath\",\n      \"/FORMAT:CSV\",\n    ]);\n    // wmic uses CRLF; split on \\r?\\n so the blank separator line becomes \"\" and is filtered out.\n    const lines = output\n      .trim()\n      .split(/\\r?\\n/)\n      .filter((l) => l.trim().length > 0);\n    if (lines.length < 2) return null;\n\n    const parts = lines[1].split(\",\");\n    const args = parts[1] ?? \"\";\n    const creationDate = parts[2] ?? \"\";\n\n    // WMIC CreationDate format: 20260418153000.000000+000\n    const year = creationDate.slice(0, 4);\n    const month = creationDate.slice(4, 6);\n    const day = creationDate.slice(6, 8);\n    const hour = creationDate.slice(8, 10);\n    const min = creationDate.slice(10, 12);\n    const sec = creationDate.slice(12, 14);\n    const startedAt = new Date(`${year}-${month}-${day}T${hour}:${min}:${sec}`);\n    if (Number.isNaN(startedAt.getTime())) return null;\n\n    // CWD is not directly available via wmic; use the executable path's parent directory as fallback\n    const exePath = parts[3] ?? \"\";\n    const cwd = exePath ? dirname(exePath) : \"\";\n\n    return { cwd, args, startedAt };\n  } catch {\n    return null;\n  }\n}\n\n// ─── Shared Helpers ────────────────────────────────────────────────\n\n// Pull the conversation id out of a command line. Handles the forms Claude Code\n// accepts — `--resume <id>`, `--resume=<id>`, and the `-r` short flag — and\n// refuses a value that is itself a flag: `claude --resume --model opus` has no\n// id, and capturing \"--model\" would surface a session under a garbage id.\nexport function extractResumeId(args: string): string | null {\n  const eq = args.match(/(?:--resume|-r)=(\\S+)/);\n  if (eq?.[1] && !eq[1].startsWith(\"-\")) return eq[1];\n  const spaced = args.match(/(?:--resume|-r)\\s+(\\S+)/);\n  const candidate = spaced?.[1];\n  if (!candidate || candidate.startsWith(\"-\")) return null;\n  return candidate;\n}\n\nasync function readGitBranch(dir: string): Promise<string> {\n  // An empty cwd would make execFile inherit OUR working directory, so an\n  // unreadable process reported the streamer's own branch as if it were its own\n  // (observed live). No directory, no answer.\n  if (!dir) return \"\";\n  try {\n    return (\n      await run(\"git\", [\"rev-parse\", \"--abbrev-ref\", \"HEAD\"], { cwd: dir, timeout: 3000 })\n    ).trim();\n  } catch {\n    return \"\";\n  }\n}\n","import { z } from \"zod\";\n\nexport const PROMPT_SCHEMA_VERSION = 1 as const;\n\nconst OpaqueIdSchema = z.string().trim().min(1).max(200);\nconst MeaningfulStringSchema = z.string().trim().min(1);\n\nexport const PromptOptionSchema = z.object({\n  optionId: OpaqueIdSchema,\n  label: MeaningfulStringSchema,\n  description: z.string().optional(),\n  preview: z.string().optional(),\n});\n\nexport const PromptQuestionSchema = z\n  .object({\n    questionId: OpaqueIdSchema,\n    text: MeaningfulStringSchema,\n    header: z.string().optional(),\n    inputMode: z.enum([\"single\", \"multi\", \"text\"]),\n    options: z.array(PromptOptionSchema),\n    allowOther: z.boolean(),\n    secret: z.union([z.boolean(), z.literal(\"unknown\")]),\n  })\n  .superRefine((question, ctx) => {\n    const optionIds = question.options.map((option) => option.optionId);\n    if (new Set(optionIds).size !== optionIds.length) {\n      ctx.addIssue({\n        code: \"custom\",\n        message: \"optionId values must be unique\",\n        path: [\"options\"],\n      });\n    }\n    if (question.inputMode === \"text\" && question.options.length !== 0) {\n      ctx.addIssue({\n        code: \"custom\",\n        message: \"text questions cannot carry options\",\n        path: [\"options\"],\n      });\n    }\n    if (question.inputMode !== \"text\" && question.options.length === 0) {\n      ctx.addIssue({\n        code: \"custom\",\n        message: \"select questions require options\",\n        path: [\"options\"],\n      });\n    }\n  });\n\nconst TERMINAL_PROMPT_STATES = new Set([\"resolved\", \"cancelled\", \"expired\", \"unavailable\"]);\n\nexport const PromptSchema = z\n  .object({\n    schemaVersion: z.literal(PROMPT_SCHEMA_VERSION),\n    sessionId: OpaqueIdSchema,\n    promptId: OpaqueIdSchema,\n    revision: z.number().int().positive(),\n    state: z.enum([\"open\", \"updated\", \"resolved\", \"cancelled\", \"expired\", \"unavailable\"]),\n    terminalReason: MeaningfulStringSchema.optional(),\n    intent: z.enum([\"approval\", \"question\"]),\n    title: z.string().optional(),\n    message: z.string().optional(),\n    detail: z.string().optional(),\n    questions: z.array(PromptQuestionSchema).min(1),\n    answerRequirement: z.enum([\"blocking\", \"non_blocking\", \"unknown\"]),\n    expiresAt: z.string().datetime({ offset: true }).nullable(),\n    provenance: z.object({\n      source: z.enum([\"provider\", \"screen\", \"transcript\", \"synthetic\"]),\n      confidence: z.enum([\"authoritative\", \"inferred\"]),\n    }),\n  })\n  .superRefine((prompt, ctx) => {\n    if (![prompt.title, prompt.message, prompt.detail].some((value) => value?.trim())) {\n      ctx.addIssue({\n        code: \"custom\",\n        message: \"prompt requires a meaningful title, message, or detail\",\n        path: [\"message\"],\n      });\n    }\n    const questionIds = prompt.questions.map((question) => question.questionId);\n    if (new Set(questionIds).size !== questionIds.length) {\n      ctx.addIssue({\n        code: \"custom\",\n        message: \"questionId values must be unique\",\n        path: [\"questions\"],\n      });\n    }\n    const optionIds = prompt.questions.flatMap((question) =>\n      question.options.map((option) => option.optionId),\n    );\n    if (new Set(optionIds).size !== optionIds.length) {\n      ctx.addIssue({\n        code: \"custom\",\n        message: \"optionId values must be unique within a prompt\",\n        path: [\"questions\"],\n      });\n    }\n    const terminal = TERMINAL_PROMPT_STATES.has(prompt.state);\n    if (terminal !== (prompt.terminalReason !== undefined)) {\n      ctx.addIssue({\n        code: \"custom\",\n        message: terminal\n          ? \"terminal prompts require terminalReason\"\n          : \"actionable prompts cannot carry terminalReason\",\n        path: [\"terminalReason\"],\n      });\n    }\n  });\n\nconst OptionResponseSchema = z.object({\n  questionId: OpaqueIdSchema,\n  optionIds: z\n    .array(OpaqueIdSchema)\n    .min(1)\n    .refine((ids) => new Set(ids).size === ids.length, \"optionIds must be unique\"),\n  text: z.never().optional(),\n});\n\nconst TextResponseSchema = z.object({\n  questionId: OpaqueIdSchema,\n  text: z.string(),\n  optionIds: z.never().optional(),\n});\n\nexport const PromptResponseSchema = z.union([OptionResponseSchema, TextResponseSchema]);\n\nexport const PromptAnswerSchema = z\n  .object({\n    promptId: OpaqueIdSchema,\n    revision: z.number().int().positive(),\n    responses: z.array(PromptResponseSchema).min(1),\n    idempotencyKey: OpaqueIdSchema,\n  })\n  .superRefine((answer, ctx) => {\n    const questionIds = answer.responses.map((response) => response.questionId);\n    if (new Set(questionIds).size !== questionIds.length) {\n      ctx.addIssue({\n        code: \"custom\",\n        message: \"each questionId can be answered only once\",\n        path: [\"responses\"],\n      });\n    }\n  });\n\nexport type Prompt = z.infer<typeof PromptSchema>;\nexport type PromptQuestion = z.infer<typeof PromptQuestionSchema>;\nexport type PromptOption = z.infer<typeof PromptOptionSchema>;\nexport type PromptAnswer = z.infer<typeof PromptAnswerSchema>;\nexport type PromptResponse = z.infer<typeof PromptResponseSchema>;\n","import { randomUUID } from \"node:crypto\";\nimport {\n  PROMPT_SCHEMA_VERSION,\n  type Prompt,\n  type PromptAnswer,\n  type PromptOption,\n  type PromptQuestion,\n  PromptSchema,\n} from \"../../schemas/prompt.schema\";\n\nexport const PROMPT_TERMINAL_RETENTION_MS = 10 * 60 * 1000;\nexport const PROMPT_MAX_RECORDS_PER_SESSION = 200;\nconst MAX_TIMEOUT_MS = 2_147_483_647;\n\ntype PromptTerminalState = Extract<\n  Prompt[\"state\"],\n  \"resolved\" | \"cancelled\" | \"expired\" | \"unavailable\"\n>;\n\nexport type PromptOptionDraft = Omit<PromptOption, \"optionId\">;\nexport type PromptQuestionDraft = Omit<PromptQuestion, \"questionId\" | \"options\"> & {\n  options: PromptOptionDraft[];\n};\nexport type PromptDraft = Omit<\n  Prompt,\n  \"schemaVersion\" | \"promptId\" | \"revision\" | \"state\" | \"terminalReason\" | \"questions\"\n> & {\n  questions: PromptQuestionDraft[];\n};\n\nexport type PromptAnswerErrorCode =\n  | \"prompt_not_found\"\n  | \"prompt_revision_mismatch\"\n  | \"already_resolved\"\n  | \"prompt_expired\"\n  | \"prompt_cancelled\"\n  | \"prompt_unavailable\"\n  | \"unknown_question\"\n  | \"unknown_option\"\n  | \"incomplete_answer\"\n  | \"unsupported_prompt_shape\"\n  | \"provider_error\";\n\nexport type PromptAnswerOutcome =\n  | { ok: true; prompt: Prompt }\n  | {\n      ok: false;\n      code: PromptAnswerErrorCode;\n      currentRevision?: number;\n    };\n\nexport type PromptAdapterResult =\n  | { ok: true }\n  | {\n      ok: false;\n      code: PromptAnswerErrorCode;\n      terminal?: { state: PromptTerminalState; reason: string };\n    };\n\nexport type PromptAnswerAdapter = (context: {\n  prompt: Prompt;\n  answer: PromptAnswer;\n}) => PromptAdapterResult | Promise<PromptAdapterResult>;\n\nexport interface PromptEvent {\n  type: \"prompt_event\";\n  sessionId: string;\n  sequence: number;\n  prompt: Prompt;\n}\n\n/**\n * Everything the registry still RETAINS for a session, not just what is\n * actionable: terminal records stay for PROMPT_TERMINAL_RETENTION_MS (capped at\n * PROMPT_MAX_RECORDS_PER_SESSION) so a reconnecting client can see how a prompt\n * it was showing ended. A subscriber therefore filters on `state` — presence in\n * a snapshot is not an open prompt.\n *\n * Retention also bounds idempotency: once a record is pruned, an answer retry\n * that would have replayed its recorded outcome gets `prompt_not_found`\n * instead (HTTP 404 on the answer route).\n */\nexport interface PromptSnapshot {\n  type: \"prompt_snapshot\";\n  schemaVersion: typeof PROMPT_SCHEMA_VERSION;\n  sessionId: string;\n  sequence: number;\n  prompts: Prompt[];\n}\n\ninterface RecordedOutcome {\n  at: number;\n  outcome: PromptAnswerOutcome;\n}\n\ninterface PromptEntry {\n  prompt: Prompt;\n  adapter?: PromptAnswerAdapter;\n  terminalAt?: number;\n  expiryTimer?: ReturnType<typeof setTimeout>;\n  queue: Promise<void>;\n  inFlight: Map<string, Promise<PromptAnswerOutcome>>;\n  outcomes: Map<string, RecordedOutcome>;\n  // Set only across a provider write, so a teardown observed during it can be\n  // attributed to that write instead of read as the provider moving on.\n  answering?: boolean;\n  deferredClose?: string;\n}\n\nexport interface PromptRegistryOptions {\n  createId?: () => string;\n  emit?: (event: PromptEvent) => void;\n  onExpire?: (prompt: Prompt) => void;\n  now?: () => number;\n  terminalRetentionMs?: number;\n  maxRecordsPerSession?: number;\n}\n\nfunction copyPrompt(prompt: Prompt): Prompt {\n  return {\n    ...prompt,\n    questions: prompt.questions.map((question) => ({\n      ...question,\n      options: question.options.map((option) => ({ ...option })),\n    })),\n    provenance: { ...prompt.provenance },\n  };\n}\n\nfunction terminalError(state: PromptTerminalState): PromptAnswerErrorCode {\n  switch (state) {\n    case \"resolved\":\n      return \"already_resolved\";\n    case \"expired\":\n      return \"prompt_expired\";\n    case \"cancelled\":\n      return \"prompt_cancelled\";\n    case \"unavailable\":\n      return \"prompt_unavailable\";\n  }\n}\n\nexport class PromptRegistry {\n  private readonly bySession = new Map<string, Map<string, PromptEntry>>();\n  private readonly byId = new Map<string, PromptEntry>();\n  private readonly sequences = new Map<string, number>();\n  private readonly createId: () => string;\n  private readonly emit?: (event: PromptEvent) => void;\n  private readonly onExpire?: (prompt: Prompt) => void;\n  private readonly now: () => number;\n  private readonly terminalRetentionMs: number;\n  private readonly maxRecordsPerSession: number;\n\n  constructor(options: PromptRegistryOptions = {}) {\n    this.createId = options.createId ?? randomUUID;\n    this.emit = options.emit;\n    this.onExpire = options.onExpire;\n    this.now = options.now ?? Date.now;\n    this.terminalRetentionMs = options.terminalRetentionMs ?? PROMPT_TERMINAL_RETENTION_MS;\n    this.maxRecordsPerSession = options.maxRecordsPerSession ?? PROMPT_MAX_RECORDS_PER_SESSION;\n  }\n\n  open(draft: PromptDraft, adapter?: PromptAnswerAdapter, promptId = this.createId()): Prompt {\n    this.sweepExpired(draft.sessionId);\n    const held = this.byId.get(promptId);\n    if (held && (held.prompt.state === \"open\" || held.prompt.state === \"updated\")) {\n      throw new Error(`Prompt id already exists: ${promptId}`);\n    }\n    // A RETAINED TERMINAL record under this id is a producer replay, not a\n    // duplicate. The pty-host keeps one occurrence id for as long as its\n    // detector sees the same content, while a streamer-side clear the host\n    // never saw (gate_closed on the legacy answer route, a cancelled question)\n    // leaves that id terminal here for PROMPT_TERMINAL_RETENTION_MS. The next\n    // repaint of the same gate then arrives with an id we still hold — inside\n    // a detector callback with no catch anywhere above it. Mint a fresh id and\n    // open normally; the retained record stays readable under the old one.\n    const id = held ? this.createId() : promptId;\n    const prompt = PromptSchema.parse({\n      ...draft,\n      schemaVersion: PROMPT_SCHEMA_VERSION,\n      promptId: id,\n      revision: 1,\n      state: \"open\",\n      questions: draft.questions.map((question) => ({\n        ...question,\n        questionId: this.createId(),\n        options: question.options.map((option) => ({ ...option, optionId: this.createId() })),\n      })),\n      provenance: { ...draft.provenance },\n    });\n    const entry: PromptEntry = {\n      prompt,\n      adapter,\n      queue: Promise.resolve(),\n      inFlight: new Map(),\n      outcomes: new Map(),\n    };\n    const session = this.bySession.get(prompt.sessionId) ?? new Map<string, PromptEntry>();\n    session.set(prompt.promptId, entry);\n    this.bySession.set(prompt.sessionId, session);\n    this.byId.set(prompt.promptId, entry);\n    this.publish(entry);\n    this.scheduleExpiration(entry);\n    this.enforceCap(prompt.sessionId);\n    return copyPrompt(prompt);\n  }\n\n  update(promptId: string, draft: PromptDraft, adapter?: PromptAnswerAdapter): Prompt {\n    const entry = this.requireEntry(promptId);\n    this.expireIfDue(entry, this.now());\n    if (entry.prompt.sessionId !== draft.sessionId) throw new Error(\"Prompt session cannot change\");\n    if (entry.prompt.state !== \"open\" && entry.prompt.state !== \"updated\") {\n      throw new Error(`Cannot update terminal prompt ${promptId}`);\n    }\n    if (entry.prompt.questions.length !== draft.questions.length) {\n      throw new Error(\"Prompt question cardinality cannot change during an update\");\n    }\n    const questions = draft.questions.map((question, questionIndex): PromptQuestion => {\n      const prior = entry.prompt.questions[questionIndex];\n      if (prior.options.length !== question.options.length) {\n        throw new Error(\"Prompt option cardinality cannot change during an update\");\n      }\n      return {\n        ...question,\n        questionId: prior.questionId,\n        options: question.options.map((option, optionIndex) => ({\n          ...option,\n          optionId: prior.options[optionIndex].optionId,\n        })),\n      };\n    });\n    const prompt = PromptSchema.parse({\n      ...draft,\n      schemaVersion: PROMPT_SCHEMA_VERSION,\n      promptId,\n      revision: entry.prompt.revision + 1,\n      state: \"updated\",\n      questions,\n      provenance: { ...draft.provenance },\n    });\n    entry.prompt = prompt;\n    if (adapter) entry.adapter = adapter;\n    this.publish(entry);\n    this.scheduleExpiration(entry);\n    return copyPrompt(entry.prompt);\n  }\n\n  transition(promptId: string, state: PromptTerminalState, reason: string): Prompt {\n    const entry = this.requireEntry(promptId);\n    if (entry.prompt.state !== \"open\" && entry.prompt.state !== \"updated\") {\n      throw new Error(`Cannot transition terminal prompt ${promptId}`);\n    }\n    entry.prompt = {\n      ...entry.prompt,\n      revision: entry.prompt.revision + 1,\n      state,\n      terminalReason: reason,\n    };\n    entry.terminalAt = this.now();\n    this.clearExpiration(entry);\n    this.publish(entry);\n    return copyPrompt(entry.prompt);\n  }\n\n  /**\n   * The provider's prompt left the screen.\n   *\n   * Distinct from `transition` because the detector cannot tell a teardown it\n   * observed on its own from one OUR OWN write caused. On a screen-scraped gate\n   * the answer keys remove the box, and pty-manager's sendKeys fires the close\n   * synchronously from inside the write — so the close always arrives before\n   * the answer that caused it has settled, and reporting it as a cancel failed\n   * every answer whose bytes had already landed (#720).\n   *\n   * While an answer is writing, the close is deferred and the answer decides:\n   * `resolved` if the write landed, the deferred close if it did not. Success\n   * is the adapter's own result, never the prompt's absence from the screen —\n   * a prompt that does not vanish when answered (a multi-select form) simply\n   * never reaches here, and is settled by the same adapter result (#721).\n   *\n   * ONLY this path defers. `replaced` from a different gate taking the screen,\n   * `unavailable` from invalidateSession and `expired` all still go through\n   * `transition` and still win, because none of them was caused by our write.\n   */\n  providerClosed(promptId: string, reason: string): Prompt | null {\n    const entry = this.byId.get(promptId);\n    if (!entry) return null;\n    if (entry.prompt.state !== \"open\" && entry.prompt.state !== \"updated\") return null;\n    if (entry.answering) {\n      entry.deferredClose = reason;\n      return null;\n    }\n    return this.transition(promptId, \"cancelled\", reason);\n  }\n\n  /**\n   * Run a provider write that may close the prompt as a side effect, so the\n   * close it causes is deferred rather than applied. For callers outside this\n   * class that write without going through `answer()` — the legacy permission\n   * route. `performAnswer` manages the same two fields directly, because it\n   * needs the deferred value in its own control flow.\n   *\n   * The write's own failure needs no unwinding here: pty-manager fires the\n   * close as the last statement of a successful sendKeys, so a throw means no\n   * close was ever deferred and the record is still open for the caller.\n   */\n  whileAnswering<T>(promptId: string, write: () => T): T {\n    const entry = this.byId.get(promptId);\n    if (!entry) return write();\n    entry.answering = true;\n    try {\n      return write();\n    } finally {\n      entry.answering = false;\n      entry.deferredClose = undefined;\n    }\n  }\n\n  invalidateSession(sessionId: string, reason = \"session_ended\"): Prompt[] {\n    const transitioned: Prompt[] = [];\n    for (const entry of this.bySession.get(sessionId)?.values() ?? []) {\n      if (entry.prompt.state === \"open\" || entry.prompt.state === \"updated\") {\n        transitioned.push(this.transition(entry.prompt.promptId, \"unavailable\", reason));\n      }\n    }\n    return transitioned;\n  }\n\n  get(promptId: string): Prompt | null {\n    const entry = this.byId.get(promptId);\n    if (!entry) return null;\n    this.sweepExpired(entry.prompt.sessionId);\n    return this.byId.has(promptId) ? copyPrompt(entry.prompt) : null;\n  }\n\n  snapshot(sessionId: string): PromptSnapshot {\n    this.sweepExpired(sessionId);\n    return {\n      type: \"prompt_snapshot\",\n      schemaVersion: PROMPT_SCHEMA_VERSION,\n      sessionId,\n      sequence: this.sequences.get(sessionId) ?? 0,\n      prompts: [...(this.bySession.get(sessionId)?.values() ?? [])].map((entry) =>\n        copyPrompt(entry.prompt),\n      ),\n    };\n  }\n\n  dispose(): void {\n    for (const entry of this.byId.values()) this.clearExpiration(entry);\n  }\n\n  answer(sessionId: string, answer: PromptAnswer): Promise<PromptAnswerOutcome> {\n    this.sweepExpired(sessionId);\n    const entry = this.byId.get(answer.promptId);\n    if (!entry || entry.prompt.sessionId !== sessionId) {\n      return Promise.resolve({ ok: false, code: \"prompt_not_found\" });\n    }\n    this.pruneOutcomes(entry);\n    const recorded = entry.outcomes.get(answer.idempotencyKey);\n    if (recorded) return Promise.resolve(recorded.outcome);\n    const pending = entry.inFlight.get(answer.idempotencyKey);\n    if (pending) return pending;\n\n    const task = entry.queue.then(() => this.performAnswer(entry, answer));\n    entry.queue = task.then(\n      () => undefined,\n      () => undefined,\n    );\n    entry.inFlight.set(answer.idempotencyKey, task);\n    void task.then((outcome) => {\n      entry.inFlight.delete(answer.idempotencyKey);\n      entry.outcomes.set(answer.idempotencyKey, { at: this.now(), outcome });\n    });\n    return task;\n  }\n\n  private async performAnswer(\n    entry: PromptEntry,\n    answer: PromptAnswer,\n  ): Promise<PromptAnswerOutcome> {\n    const prompt = entry.prompt;\n    if (prompt.state !== \"open\" && prompt.state !== \"updated\") {\n      return { ok: false, code: terminalError(prompt.state) };\n    }\n    if (this.expireIfDue(entry, this.now())) {\n      return { ok: false, code: \"prompt_expired\" };\n    }\n    if (prompt.revision !== answer.revision) {\n      return {\n        ok: false,\n        code: \"prompt_revision_mismatch\",\n        currentRevision: prompt.revision,\n      };\n    }\n    const responseError = this.validateResponses(prompt, answer);\n    if (responseError) return { ok: false, code: responseError };\n    if (!entry.adapter) return { ok: false, code: \"prompt_unavailable\" };\n\n    // Marked HERE: after every pre-adapter check above has passed (state,\n    // expiry, revision, responses, adapter presence) and immediately before the\n    // write. Never at the top of this method — the marker's lifetime is exactly\n    // the window in which our own write can close the prompt, so it can never\n    // mask a teardown that has nothing to do with us. Validation stays entirely\n    // on the near side of the write: a refused answer writes zero bytes and\n    // leaves the record open at its revision, and nothing below moves a check\n    // across that boundary.\n    entry.answering = true;\n    let adapterResult: PromptAdapterResult;\n    let threw = false;\n    try {\n      adapterResult = await entry.adapter({ prompt: copyPrompt(prompt), answer });\n    } catch {\n      threw = true;\n      adapterResult = { ok: false, code: \"provider_error\" };\n    } finally {\n      entry.answering = false;\n    }\n    // A close the detector observed while we were writing is OUR close, held\n    // back by providerClosed rather than applied. It settles on every exit that\n    // does not resolve, so a refused answer can never leave the record open\n    // with the provider's box already gone.\n    const deferred = entry.deferredClose;\n    entry.deferredClose = undefined;\n    const settle = (outcome: PromptAnswerOutcome): PromptAnswerOutcome => {\n      if (deferred) this.providerClosed(prompt.promptId, deferred);\n      return outcome;\n    };\n\n    if (threw) return settle({ ok: false, code: \"provider_error\" });\n    if (entry.prompt.state !== \"open\" && entry.prompt.state !== \"updated\") {\n      return settle({ ok: false, code: terminalError(entry.prompt.state) });\n    }\n    if (entry.prompt.revision !== answer.revision) {\n      return settle({\n        ok: false,\n        code: \"prompt_revision_mismatch\",\n        currentRevision: entry.prompt.revision,\n      });\n    }\n    if (!adapterResult.ok) {\n      if (adapterResult.terminal) {\n        this.transition(\n          prompt.promptId,\n          adapterResult.terminal.state,\n          adapterResult.terminal.reason,\n        );\n      }\n      return settle({ ok: false, code: adapterResult.code });\n    }\n    return { ok: true, prompt: this.transition(prompt.promptId, \"resolved\", \"answered\") };\n  }\n\n  private validateResponses(prompt: Prompt, answer: PromptAnswer): PromptAnswerErrorCode | null {\n    const questions = new Map(prompt.questions.map((question) => [question.questionId, question]));\n    for (const response of answer.responses) {\n      if (!questions.has(response.questionId)) return \"unknown_question\";\n    }\n    if (answer.responses.length !== prompt.questions.length) return \"incomplete_answer\";\n\n    const responses = new Map(answer.responses.map((response) => [response.questionId, response]));\n    for (const question of prompt.questions) {\n      const response = responses.get(question.questionId);\n      if (!response) return \"incomplete_answer\";\n      if (question.inputMode === \"text\") {\n        if (typeof response.text !== \"string\") return \"incomplete_answer\";\n        continue;\n      }\n      const optionIds = response.optionIds;\n      if (!optionIds) return \"incomplete_answer\";\n      if (question.inputMode === \"single\" && optionIds.length !== 1) {\n        return \"unsupported_prompt_shape\";\n      }\n      const known = new Set(question.options.map((option) => option.optionId));\n      if (optionIds.some((optionId) => !known.has(optionId))) return \"unknown_option\";\n    }\n    return null;\n  }\n\n  private publish(entry: PromptEntry): void {\n    const sessionId = entry.prompt.sessionId;\n    const sequence = (this.sequences.get(sessionId) ?? 0) + 1;\n    this.sequences.set(sessionId, sequence);\n    this.emit?.({\n      type: \"prompt_event\",\n      sessionId,\n      sequence,\n      prompt: copyPrompt(entry.prompt),\n    });\n  }\n\n  private scheduleExpiration(entry: PromptEntry): void {\n    this.clearExpiration(entry);\n    const expiresAt = entry.prompt.expiresAt;\n    if (expiresAt === null) return;\n    const delay = Math.min(MAX_TIMEOUT_MS, Math.max(0, Date.parse(expiresAt) - this.now()));\n    entry.expiryTimer = setTimeout(() => {\n      entry.expiryTimer = undefined;\n      if (!this.expireIfDue(entry, this.now())) this.scheduleExpiration(entry);\n    }, delay);\n    entry.expiryTimer.unref?.();\n  }\n\n  private clearExpiration(entry: PromptEntry): void {\n    if (entry.expiryTimer) clearTimeout(entry.expiryTimer);\n    entry.expiryTimer = undefined;\n  }\n\n  private expireIfDue(entry: PromptEntry, now: number): boolean {\n    if (entry.prompt.state !== \"open\" && entry.prompt.state !== \"updated\") return false;\n    if (entry.prompt.expiresAt === null || now < Date.parse(entry.prompt.expiresAt)) return false;\n    const expired = this.transition(entry.prompt.promptId, \"expired\", \"deadline_elapsed\");\n    this.onExpire?.(expired);\n    return true;\n  }\n\n  private requireEntry(promptId: string): PromptEntry {\n    const entry = this.byId.get(promptId);\n    if (!entry) throw new Error(`Unknown prompt: ${promptId}`);\n    return entry;\n  }\n\n  sweepExpired(sessionId: string): void {\n    const now = this.now();\n    const session = this.bySession.get(sessionId);\n    if (!session) return;\n    for (const [promptId, entry] of session) {\n      this.expireIfDue(entry, now);\n      if (entry.terminalAt !== undefined && now - entry.terminalAt > this.terminalRetentionMs) {\n        this.clearExpiration(entry);\n        session.delete(promptId);\n        this.byId.delete(promptId);\n      }\n    }\n    if (session.size === 0) this.bySession.delete(sessionId);\n  }\n\n  private enforceCap(sessionId: string): void {\n    const session = this.bySession.get(sessionId);\n    if (!session || session.size <= this.maxRecordsPerSession) return;\n    const terminal = [...session.entries()]\n      .filter(([, entry]) => entry.terminalAt !== undefined)\n      .sort((a, b) => (a[1].terminalAt ?? 0) - (b[1].terminalAt ?? 0));\n    while (session.size > this.maxRecordsPerSession && terminal.length > 0) {\n      const [promptId, entry] = terminal.shift() as [string, PromptEntry];\n      this.clearExpiration(entry);\n      session.delete(promptId);\n      this.byId.delete(promptId);\n    }\n  }\n\n  private pruneOutcomes(entry: PromptEntry): void {\n    const now = this.now();\n    for (const [key, recorded] of entry.outcomes) {\n      if (now - recorded.at > this.terminalRetentionMs) entry.outcomes.delete(key);\n    }\n  }\n}\n","import type { AskQuestion } from \"../../types\";\nimport type { PermissionGate } from \"../questions/detectPermissionGate\";\nimport type { PromptDraft } from \"./promptRegistry\";\n\nexport function permissionPromptDraft(sessionId: string, gate: PermissionGate | null): PromptDraft {\n  if (!gate) throw new Error(\"Cannot normalize an absent permission gate\");\n  const message = gate.prompt?.trim() || \"Approval required\";\n  return {\n    sessionId,\n    intent: \"approval\",\n    title: \"Approval\",\n    message,\n    ...(gate.detail?.trim() ? { detail: gate.detail } : {}),\n    questions: [\n      {\n        text: message,\n        header: \"Approval\",\n        inputMode: \"single\",\n        options: gate.options.map((option) => ({ label: option.label })),\n        allowOther: false,\n        secret: \"unknown\",\n      },\n    ],\n    answerRequirement: \"unknown\",\n    expiresAt: null,\n    provenance: { source: \"screen\", confidence: \"inferred\" },\n  };\n}\n\nexport function questionPromptDraft(\n  sessionId: string,\n  questions: AskQuestion[],\n  source: \"screen\" | \"transcript\",\n): PromptDraft {\n  const first = questions[0];\n  if (!first) throw new Error(\"Cannot normalize an empty question list\");\n  return {\n    sessionId,\n    intent: \"question\",\n    ...(first.header.trim() ? { title: first.header } : {}),\n    message: first.question,\n    questions: questions.map((question) => ({\n      text: question.question,\n      ...(question.header.trim() ? { header: question.header } : {}),\n      inputMode: question.multiSelect ? \"multi\" : \"single\",\n      options: question.options.map((option) => ({\n        label: option.label,\n        ...(option.description ? { description: option.description } : {}),\n        ...(option.preview ? { preview: option.preview } : {}),\n      })),\n      allowOther: false,\n      secret: \"unknown\",\n    })),\n    answerRequirement: \"unknown\",\n    expiresAt: null,\n    provenance: {\n      source,\n      confidence: source === \"transcript\" ? \"authoritative\" : \"inferred\",\n    },\n  };\n}\n","// Status-line parsing. Claude Code paints a footer at the bottom of the screen\n// carrying the facts mobile wants to show natively instead of rendering raw\n// terminal text:\n//\n//   \"  Opus 4.8 (1M context) │ ~/dev/ai-tools/tb-streamer  main ✎ │  26.5.0 23:41 │ ⚓4\"\n//   \"  ⏵⏵ accept edits on (shift+tab to cycle) · ← for agents\"\n//   \"                                          ● high · /effort\"\n//\n// Only stable facts are extracted (model, effort, permission mode). The elapsed\n// \"(56s · ↑ 3.4k tokens)\" counter is deliberately NOT parsed: Claude repaints it\n// only when it has other output to draw, so any value we forwarded would be\n// stale the moment it arrived. The client animates elapsed time locally instead.\n//\n// Pure — no I/O. Operates on rendered screen lines (getOutputLines), because the\n// footer is painted with absolute-cursor moves and does not exist as a\n// contiguous run of bytes in the raw PTY stream.\n\nexport interface StatusLineInfo {\n  /** e.g. \"Opus 4.8 (1M context)\" or \"Sonnet 5\". */\n  model?: string;\n  /** e.g. \"high\" — the reasoning-effort tier. */\n  effort?: string;\n  /** e.g. \"accept edits on\" — the active permission mode. */\n  permissionMode?: string;\n}\n\n// Model segment: the footer row is \"│\"-delimited and the model is its first\n// cell. Anchored on a known family name so an arbitrary first cell (a path, a\n// git branch) can't be mistaken for a model.\nconst MODEL_RE = /(Opus|Sonnet|Haiku|Fable)\\s+[\\d.]+(?:\\s*\\([^)]*\\))?/;\n\n// Effort row: \"● high · /effort\". The bullet and the \"/effort\" suffix together\n// make this unambiguous; the tier itself is captured open-endedly so a new tier\n// name doesn't silently parse as undefined.\nconst EFFORT_RE = /●\\s*([A-Za-z]+)\\s*·\\s*\\/effort/;\n\n// Permission-mode row: \"⏵⏵ accept edits on (shift+tab to cycle) · ← for agents\".\n// Stop at the parenthetical so the hint text isn't captured as part of the mode.\nconst PERMISSION_MODE_RE = /⏵⏵\\s*([^(·\\n]+?)\\s*(?:\\(|·|$)/;\n\n/**\n * Extract model / effort / permission mode from rendered screen lines.\n * Returns an empty object when the footer isn't on screen — callers treat every\n * field as optional, so a missed parse degrades to \"not reported\" rather than\n * throwing or inventing a value.\n *\n * Scans from the bottom: the footer is the last thing painted, and older\n * scrollback can contain text that looks like a footer row.\n */\nexport function parseStatusLine(lines: string[]): StatusLineInfo {\n  const info: StatusLineInfo = {};\n\n  for (let i = lines.length - 1; i >= 0; i--) {\n    const line = lines[i];\n    if (!line) continue;\n\n    if (info.effort === undefined) {\n      const m = EFFORT_RE.exec(line);\n      if (m) info.effort = m[1];\n    }\n    if (info.permissionMode === undefined) {\n      const m = PERMISSION_MODE_RE.exec(line);\n      if (m) info.permissionMode = m[1].trim();\n    }\n    if (info.model === undefined) {\n      const m = MODEL_RE.exec(line);\n      if (m) info.model = m[0].replace(/\\s+/g, \" \").trim();\n    }\n\n    if (info.model && info.effort && info.permissionMode) break;\n  }\n\n  return info;\n}\n","import type { AskQuestion } from \"../../types\";\n\nconst DOWN = \"\\x1b[B\";\nconst ENTER = \"\\r\";\n\nexport class UnknownOptionError extends Error {\n  constructor(\n    public readonly question: string,\n    public readonly value: string,\n  ) {\n    super(`No option labelled \"${value}\" for question \"${question}\"`);\n    this.name = \"UnknownOptionError\";\n  }\n}\n\n// A shape this keystroke path cannot answer safely: a multi-question form, a\n// multi-select question, or more than one label for a single-select question.\nexport class UnsupportedPromptShapeError extends Error {\n  constructor(public readonly detail: string) {\n    super(`Unsupported prompt shape: ${detail}`);\n    this.name = \"UnsupportedPromptShapeError\";\n  }\n}\n\nexport class IncompleteAnswerError extends Error {\n  constructor(public readonly question: string) {\n    super(`Missing answer for question \"${question}\"`);\n    this.name = \"IncompleteAnswerError\";\n  }\n}\n\n// Supported shape: exactly one single-select question answered with one label.\n// Cursor starts at index 0; N downs + Enter selects index N.\n//\n// Deliberately nothing more. Multi-question forms used to be answered by\n// concatenating one block per question, blind to whether the TUI advanced or\n// where its cursor landed; a multi-select question was \"answered\" with its\n// first label as if single-select. Both wrote bytes for an answer the user did\n// not give. They now throw BEFORE any keystroke is built, and the route refuses\n// without writing. The TUI shows a multi-question form one picker at a time and\n// the screen detector cards each picker as a single question, so that path is\n// unaffected.\nexport function answersToKeystrokes(\n  questions: AskQuestion[],\n  answers: Record<string, string | string[]>,\n): string {\n  if (questions.length !== 1) {\n    throw new UnsupportedPromptShapeError(`${questions.length} questions`);\n  }\n  const q = questions[0];\n  if (q.multiSelect) throw new UnsupportedPromptShapeError(\"multiSelect\");\n  const raw = answers[q.question];\n  if (raw === undefined || (Array.isArray(raw) && raw.length === 0)) {\n    throw new IncompleteAnswerError(q.question);\n  }\n  if (Array.isArray(raw) && raw.length > 1) {\n    throw new UnsupportedPromptShapeError(`${raw.length} labels for a single-select question`);\n  }\n  const label = Array.isArray(raw) ? raw[0] : raw;\n  const target = q.options.findIndex((o) => o.label === label);\n  if (target < 0) throw new UnknownOptionError(q.question, label);\n  return DOWN.repeat(target) + ENTER;\n}\n","import type { AskQuestion } from \"../../types\";\nimport {\n  answersToKeystrokes,\n  IncompleteAnswerError,\n  UnknownOptionError,\n  UnsupportedPromptShapeError,\n} from \"./answersToKeystrokes\";\n\nexport type AnswerResolution =\n  | { ok: true; keys: string }\n  | {\n      ok: false;\n      reason:\n        | \"no_pending_question\"\n        | \"tool_use_mismatch\"\n        | \"unknown_option\"\n        | \"unsupported_prompt_shape\"\n        | \"incomplete_answer\";\n    };\n\nexport function resolveAnswer(\n  pending: { toolUseId: string; questions: AskQuestion[] } | undefined,\n  body: { toolUseId?: unknown; answers?: unknown },\n): AnswerResolution {\n  if (!pending) return { ok: false, reason: \"no_pending_question\" };\n  if (typeof body.toolUseId !== \"string\" || body.toolUseId !== pending.toolUseId) {\n    return { ok: false, reason: \"tool_use_mismatch\" };\n  }\n  const answers = (body.answers ?? {}) as Record<string, string | string[]>;\n  try {\n    return { ok: true, keys: answersToKeystrokes(pending.questions, answers) };\n  } catch (e) {\n    if (e instanceof UnknownOptionError) return { ok: false, reason: \"unknown_option\" };\n    if (e instanceof UnsupportedPromptShapeError) {\n      return { ok: false, reason: \"unsupported_prompt_shape\" };\n    }\n    if (e instanceof IncompleteAnswerError) return { ok: false, reason: \"incomplete_answer\" };\n    throw e;\n  }\n}\n","import { execFile } from \"child_process\";\n\n/**\n * Who is holding a Codex rollout JSONL open right now.\n *\n * Codex enforces a single-writer rule per rollout and only reports it *after*\n * `codex resume` has started (\"already has an active writer (code -32600)\"),\n * by which point the streamer has already spawned a PTY and answered 201. The\n * heuristic pre-flight in conversationBusy.ts cannot see that owner: a Codex\n * process need not carry the rollout UUID in its argv, and a quiet-but-owned\n * rollout has an mtime well outside the busy window (the 2026-08-09 incident:\n * pid 9935 held the file open with an mtime older than 120 s).\n *\n * An open file handle on the exact rollout is direct evidence of the condition\n * Codex itself rejects, so it is the one pre-spawn signal worth paying for.\n *\n * It is an OPTIMISATION, never a proof of the negative: `lsof` is POSIX-only,\n * may be absent, may be denied, and cannot see another user's process. A null\n * result means \"no evidence\", and the caller must still rely on the\n * authoritative post-spawn handshake.\n */\n\n/** Hard cap on the probe. Resume is latency-sensitive — a slow lsof is a miss. */\nexport const ROLLOUT_OWNER_TIMEOUT_MS = 800;\n\n/**\n * How the owning process is best described to a client.\n *\n * Only a process whose command is exactly `codex` is classified, and even then\n * only as \"terminal\". A VS Code / desktop `codex app-server` can host several\n * unrelated threads, so mis-labelling one as a standalone TUI is what would\n * make a destructive recovery action look safe. Everything else stays\n * \"unknown\", and no takeover is ever offered from this signal.\n */\nexport type CodexOwnerSource = \"terminal\" | \"unknown\";\n\nexport interface CodexRolloutOwner {\n  pid: number;\n  command: string;\n  source: CodexOwnerSource;\n}\n\nexport interface FindRolloutOwnerOptions {\n  platform?: NodeJS.Platform;\n  timeoutMs?: number;\n  /** Our own pid — the streamer's handles on the file are not a collision. */\n  selfPid?: number;\n  /** Injection point for tests; defaults to a bounded `lsof` call. */\n  run?: (rolloutPath: string, timeoutMs: number) => Promise<string>;\n}\n\nfunction runLsof(rolloutPath: string, timeoutMs: number): Promise<string> {\n  return new Promise((resolve, reject) => {\n    // -F pc → machine-readable field output, one `p<pid>` / `c<command>` per\n    // line. -w silences warnings that would otherwise land on stdout.\n    // `--` guards a path that starts with a dash.\n    const child = execFile(\n      \"lsof\",\n      [\"-F\", \"pc\", \"-w\", \"--\", rolloutPath],\n      { windowsHide: true },\n      (err, stdout) => {\n        clearTimeout(timer);\n        // lsof exits 1 when nothing matches — that is a normal empty result,\n        // and stdout is what we parse either way.\n        if (err && !stdout) {\n          reject(err);\n          return;\n        }\n        resolve(stdout);\n      },\n    );\n\n    // The deadline is enforced here rather than via execFile's `timeout`\n    // option, which only SIGTERMs. lsof walks every process on the box, and on\n    // a busy machine it both outlives a polite signal and keeps its stdio\n    // handles alive — enough to hold the whole streamer's event loop past\n    // shutdown. Kill it outright, drop the pipes, and stop counting it.\n    const timer = setTimeout(() => {\n      try {\n        child.kill(\"SIGKILL\");\n      } catch {\n        // Already gone.\n      }\n      child.stdout?.destroy();\n      child.stderr?.destroy();\n      reject(new Error(\"lsof timed out\"));\n    }, timeoutMs);\n    timer.unref?.();\n    child.unref();\n  });\n}\n\n/** Parse `lsof -F pc` output into (pid, command) pairs, in file order. */\nexport function parseLsofFieldOutput(stdout: string): Array<{ pid: number; command: string }> {\n  const owners: Array<{ pid: number; command: string }> = [];\n  let pid: number | null = null;\n  for (const line of stdout.split(\"\\n\")) {\n    if (line.startsWith(\"p\")) {\n      const n = Number.parseInt(line.slice(1), 10);\n      pid = Number.isFinite(n) ? n : null;\n    } else if (line.startsWith(\"c\") && pid != null) {\n      owners.push({ pid, command: line.slice(1).trim() });\n      pid = null;\n    }\n  }\n  return owners;\n}\n\n/**\n * First foreign process holding `rolloutPath` open, or null when there is no\n * evidence of one (no match, unsupported platform, missing/denied/slow lsof).\n */\nexport async function findRolloutOwner(\n  rolloutPath: string,\n  options: FindRolloutOwnerOptions = {},\n): Promise<CodexRolloutOwner | null> {\n  const platform = options.platform ?? process.platform;\n  // No portable open-handle enumeration on Windows; `handle.exe` is a separate\n  // Sysinternals download and not something to shell out to on a resume path.\n  if (platform === \"win32\") return null;\n\n  const selfPid = options.selfPid ?? process.pid;\n  const run = options.run ?? runLsof;\n\n  let stdout: string;\n  try {\n    stdout = await run(rolloutPath, options.timeoutMs ?? ROLLOUT_OWNER_TIMEOUT_MS);\n  } catch {\n    // Timed out, not installed, or refused — no evidence either way.\n    return null;\n  }\n\n  for (const { pid, command } of parseLsofFieldOutput(stdout)) {\n    if (pid === selfPid) continue;\n    return { pid, command, source: command === \"codex\" ? \"terminal\" : \"unknown\" };\n  }\n  return null;\n}\n","import { statSync } from \"fs\";\nimport type { DiscoveredProcess } from \"../../types\";\nimport { canonicalizeProjectPath } from \"../../utils/canonicalizeProjectPath\";\n\n// A conversation's JSONL touched within this window is treated as actively\n// owned. This is the PRIMARY collision signal — it is the only one that catches\n// a session launched WITHOUT `--resume` (no process argv to match). Exported so\n// callers and tests share one value; override at runtime via the env var below.\nexport const RESUME_BUSY_WINDOW_MS = 120_000;\n\n// Resolve the busy window, allowing an env override (ms). Falls back to the\n// constant for missing/invalid values.\nexport function resolveResumeBusyWindowMs(env: NodeJS.ProcessEnv = process.env): number {\n  const raw = env.THREADBASE_RESUME_BUSY_WINDOW_MS;\n  if (raw === undefined) return RESUME_BUSY_WINDOW_MS;\n  const n = Number.parseInt(raw, 10);\n  return Number.isFinite(n) && n >= 0 ? n : RESUME_BUSY_WINDOW_MS;\n}\n\n// `file_handle` is produced by the Codex-only pre-flight in\n// codexRolloutOwner.ts, not by conversationBusy() — another process holds the\n// exact rollout JSONL open. Listed here so the wire vocabulary of `detectedBy`\n// stays in one place.\nexport type BusySignal = \"jsonl_mtime\" | \"process_argv\" | \"process_cwd\" | \"file_handle\";\n\n// Allowance for a JSONL write that lands just AFTER we observe our own PTY go\n// idle — Claude flushes the tail of a turn as it exits, so the file's mtime can\n// trail the exit by a moment. Without this the flush would read as foreign.\nconst SELF_ACTIVITY_SKEW_MS = 5_000;\n\nexport interface ConversationBusyInput {\n  conversationId: string;\n  projectPath: string | null;\n  jsonlPath: string | null;\n  discovered: DiscoveredProcess[];\n  now?: number;\n  windowMs?: number;\n  platform?: NodeJS.Platform;\n  /**\n   * When this streamer's own PTY for this conversation last went idle (ms epoch),\n   * or null/undefined if it never owned one in this process's lifetime.\n   *\n   * Without this the probe cannot tell our own echo from a stranger: the normal\n   * background → hold_session → foreground → resume flow releases the PTY (so the\n   * hasSession early-return no longer applies) while leaving a JSONL we wrote\n   * seconds ago — which would 409 the single most common resume in the product.\n   * File activity at or before this timestamp is attributed to us, not a collision.\n   */\n  selfPtyEndedAt?: number | null;\n}\n\nexport interface ConversationBusyResult {\n  busy: boolean;\n  detectedBy: BusySignal[];\n  // Milliseconds since the JSONL was last written (now - mtime), or null when\n  // there is no readable JSONL to measure.\n  lastActivityMs: number | null;\n  likelyOwner: \"external\" | \"unknown\";\n}\n\n// Pre-flight collision probe for a conversation about to be resumed. Pure with\n// respect to process discovery (the caller passes `discovered`); only touches\n// the filesystem to stat the JSONL. No `force` handling here — that is a caller\n// decision (a forced resume never runs this).\nexport function conversationBusy(input: ConversationBusyInput): ConversationBusyResult {\n  const now = input.now ?? Date.now();\n  const windowMs = input.windowMs ?? RESUME_BUSY_WINDOW_MS;\n  const platform = input.platform ?? process.platform;\n  const detectedBy: BusySignal[] = [];\n  let lastActivityMs: number | null = null;\n\n  // Signal 1 (PRIMARY): the JSONL was modified within the busy window. Only the\n  // UPPER bound matters — a just-written file can carry an mtime a few ms in the\n  // FUTURE (filesystem timestamp granularity / clock skew), which still means\n  // \"active right now\". Over-detecting busy is the safe direction (soft 409 with\n  // a force override); under-detecting would miss a real collision.\n  if (input.jsonlPath) {\n    try {\n      const mtimeMs = statSync(input.jsonlPath).mtimeMs;\n      const age = now - mtimeMs;\n      lastActivityMs = Math.max(0, age);\n      // Attribute the write: if the file has not been touched since our own PTY\n      // for this conversation released it, the recency is our own echo (a\n      // hold → resume round trip), not evidence of another owner.\n      const isSelfEcho =\n        input.selfPtyEndedAt != null && mtimeMs <= input.selfPtyEndedAt + SELF_ACTIVITY_SKEW_MS;\n      if (age <= windowMs && !isSelfEcho) detectedBy.push(\"jsonl_mtime\");\n    } catch {\n      // File missing / unreadable — no mtime signal.\n    }\n  }\n\n  // Signal 2: a discovered process is resuming this exact conversation id.\n  const argvMatch = input.discovered.some((p) => p.conversationId === input.conversationId);\n  if (argvMatch) detectedBy.push(\"process_argv\");\n\n  // Signal 3: a discovered process is running in this conversation's project\n  // directory. POSIX only — a process cwd is not available on win32.\n  let cwdMatch = false;\n  if (platform !== \"win32\" && input.projectPath) {\n    const target = canonicalizeProjectPath(input.projectPath);\n    cwdMatch = input.discovered.some(\n      (p) => !!p.projectPath && canonicalizeProjectPath(p.projectPath) === target,\n    );\n    if (cwdMatch) detectedBy.push(\"process_cwd\");\n  }\n\n  return {\n    busy: detectedBy.length > 0,\n    detectedBy,\n    lastActivityMs,\n    // A matched process is a concrete external owner; a lone mtime hit could be\n    // an editor, a crashed process, or a process we could not enumerate.\n    likelyOwner: argvMatch || cwdMatch ? \"external\" : \"unknown\",\n  };\n}\n","/**\n * Canonicalize a project path so the same project always dedupes to the\n * same key, regardless of trailing slashes or surrounding whitespace.\n *\n * Rules:\n *   - Trim surrounding whitespace\n *   - Remove trailing forward or back slashes (one or more)\n *\n * Do NOT lowercase: project paths can be case-sensitive on Linux/macOS\n * and lowercasing them would silently merge two distinct real projects.\n */\nexport function canonicalizeProjectPath(projectPath: string): string {\n  return projectPath.trim().replace(/[\\\\/]+$/, \"\");\n}\n","/**\n * Idempotency for session input (C4).\n *\n * `POST /api/sessions/:id/input` had no duplicate protection. A retry — a flaky\n * network, a user double-tap, a client that resends on timeout — submitted the\n * same prompt to the agent twice, and nothing downstream could tell the second\n * submission from a deliberate repeat of the same words.\n *\n * The rate limiter does not help: 500 requests/minute is aimed at floods, and a\n * genuine retry is well inside it.\n *\n * Clients send `idempotencyKey` with a write. A repeat of a key we have already\n * accepted replays the original outcome instead of re-submitting.\n *\n * Scoped per session, because a key is only meaningful against the conversation\n * it was minted for — the same key against a different session is a different\n * write, and treating it as a duplicate would silently drop a real prompt.\n */\n\n/** How long a key is remembered. Long enough to cover a retry, not a session. */\nexport const IDEMPOTENCY_TTL_MS = 10 * 60 * 1000;\n\n/**\n * Cap on remembered keys per session. Bounds memory on a long conversation; the\n * oldest entries are evicted first, so a key older than the cap behaves as if it\n * had expired — the request is treated as new.\n */\nexport const IDEMPOTENCY_MAX_KEYS = 200;\n\nexport interface IdempotentResult {\n  status: number;\n  body: unknown;\n}\n\ninterface Entry {\n  key: string;\n  at: number;\n  result: IdempotentResult;\n}\n\n/**\n * Per-session record of recently accepted idempotency keys.\n *\n * Deliberately in-memory: this guards against retries seconds apart, and a\n * streamer restart already ends the PTY those retries would target (see the\n * durable-session-runtime ADR). Persisting it would imply a durability the\n * surrounding runtime does not have.\n */\nexport class IdempotencyStore {\n  private bySession = new Map<string, Entry[]>();\n\n  constructor(\n    private ttlMs: number = IDEMPOTENCY_TTL_MS,\n    private maxKeys: number = IDEMPOTENCY_MAX_KEYS,\n  ) {}\n\n  /**\n   * Previously recorded result for this key, or null if the key is new,\n   * expired, or evicted. A miss always means \"treat as a fresh request\" —\n   * failing open, because dropping a real prompt is far worse than allowing a\n   * rare duplicate.\n   */\n  get(sessionId: string, key: string, now: number = Date.now()): IdempotentResult | null {\n    const entries = this.bySession.get(sessionId);\n    if (!entries) return null;\n\n    const hit = entries.find((e) => e.key === key);\n    if (!hit) return null;\n    if (now - hit.at > this.ttlMs) {\n      this.bySession.set(\n        sessionId,\n        entries.filter((e) => e !== hit),\n      );\n      return null;\n    }\n    return hit.result;\n  }\n\n  /** Record the outcome of an accepted write so a retry can replay it. */\n  set(sessionId: string, key: string, result: IdempotentResult, now: number = Date.now()): void {\n    const entries = this.bySession.get(sessionId) ?? [];\n    const pruned = entries.filter((e) => e.key !== key && now - e.at <= this.ttlMs);\n    pruned.push({ key, at: now, result });\n    // Oldest-first eviction; entries are appended in arrival order.\n    this.bySession.set(sessionId, pruned.slice(-this.maxKeys));\n  }\n\n  /** Drop everything for a session whose PTY is gone. */\n  clear(sessionId: string): void {\n    this.bySession.delete(sessionId);\n  }\n\n  /** Test/diagnostic helper: how many keys are currently held for a session. */\n  size(sessionId: string): number {\n    return this.bySession.get(sessionId)?.length ?? 0;\n  }\n}\n\n/**\n * Extract and validate an idempotency key from a request body.\n *\n * Returns `undefined` when absent (the field is optional, so existing clients\n * keep working) and throws on a present-but-invalid value rather than ignoring\n * it — a client that sends a malformed key believes it has retry protection,\n * and silently proceeding without it would be worse than a clear rejection.\n */\nexport function readIdempotencyKey(body: Record<string, unknown>): string | undefined {\n  const raw = body.idempotencyKey;\n  if (raw === undefined || raw === null) return undefined;\n  if (typeof raw !== \"string\" || raw.length === 0 || raw.length > 200) {\n    throw new Error(\"idempotencyKey must be a non-empty string of at most 200 characters\");\n  }\n  return raw;\n}\n","import { randomBytes } from \"crypto\";\nimport { mkdir, writeFile } from \"fs/promises\";\nimport heicConvert from \"heic-convert\";\nimport { join } from \"path\";\n\nconst UPLOAD_DIR_NAME = \".threadbase-uploads\";\nconst MAX_BYTES = 25 * 1024 * 1024; // 25MB\n\nconst HEIC_MIMES = new Set([\"image/heic\", \"image/heif\"]);\n\nconst MIME_TO_EXT: Record<string, string> = {\n  \"image/jpeg\": \".jpg\",\n  \"image/png\": \".png\",\n  \"image/gif\": \".gif\",\n  \"image/webp\": \".webp\",\n  \"image/heic\": \".jpg\",\n  \"image/heif\": \".jpg\",\n  \"application/pdf\": \".pdf\",\n  \"application/msword\": \".doc\",\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\": \".docx\",\n  \"text/plain\": \".txt\",\n  \"text/javascript\": \".js\",\n  \"application/typescript\": \".ts\",\n  \"application/json\": \".json\",\n  \"text/csv\": \".csv\",\n};\n\nexport interface SaveUploadInput {\n  sessionId: string;\n  projectPath: string;\n  originalName: string;\n  mimeType: string;\n  dataBase64: string;\n}\n\nexport interface SavedUpload {\n  id: string;\n  filePath: string;\n  originalName: string;\n  mimeType: string;\n  sizeBytes: number;\n}\n\nexport async function saveUploadFile(input: SaveUploadInput): Promise<SavedUpload> {\n  let buffer = Buffer.from(input.dataBase64, \"base64\");\n  if (buffer.length === 0) throw new Error(\"Empty file\");\n  if (buffer.length > MAX_BYTES) throw new Error(`File exceeds ${MAX_BYTES} bytes`);\n\n  let { mimeType } = input;\n  let originalName = input.originalName;\n\n  if (HEIC_MIMES.has(mimeType)) {\n    buffer = Buffer.from(await heicConvert({ buffer, format: \"JPEG\", quality: 0.85 }));\n    mimeType = \"image/jpeg\";\n    originalName = originalName.replace(/\\.(heic|heif)$/i, \".jpg\");\n  }\n\n  const id = `up_${randomBytes(8).toString(\"hex\")}`;\n  const safeName = sanitizeFilename(originalName) || `file${MIME_TO_EXT[mimeType] ?? \"\"}`;\n  const dir = join(input.projectPath, UPLOAD_DIR_NAME, input.sessionId);\n  await mkdir(dir, { recursive: true });\n\n  const filePath = join(dir, `${Date.now()}-${id}-${safeName}`);\n  await writeFile(filePath, buffer);\n\n  return {\n    id,\n    filePath,\n    originalName: safeName,\n    mimeType,\n    sizeBytes: buffer.length,\n  };\n}\n\nfunction sanitizeFilename(name: string): string {\n  // Take only the basename (block path traversal)\n  const base = name.split(/[\\\\/]/).pop() ?? \"\";\n  // Strip leading dots; keep all printable Unicode (charCode >= 32, != 127)\n  const cleaned = base\n    .replace(/^\\.+/, \"\")\n    .split(\"\")\n    .filter((c) => c.charCodeAt(0) >= 32 && c.charCodeAt(0) !== 127)\n    .join(\"\")\n    // Replace spaces and other shell-problematic characters with underscores.\n    // Mobile sends paths as @path references; Claude Code's parser splits on\n    // whitespace, so \"My Photo.jpg\" becomes \"@/path/My\" + \"Photo.jpg\" (broken).\n    .replace(/[\\s@\"'`$\\\\]/g, \"_\");\n  return cleaned;\n}\n","export interface DbConfig {\n  connectionString: string;\n  max: number;\n  ssl?: string;\n  statementTimeout?: number;\n  instanceId: string;\n}\n\nexport function isDbEnabled(): boolean {\n  const url = process.env.THREADBASE_DATABASE_URL;\n  return typeof url === \"string\" && url.length > 0;\n}\n\nexport function getInstanceId(): string {\n  return process.env.THREADBASE_INSTANCE_ID || require(\"os\").hostname();\n}\n\nexport function getDbConfig(): DbConfig | null {\n  if (!isDbEnabled()) return null;\n\n  const connectionString = process.env.THREADBASE_DATABASE_URL ?? \"\";\n  const poolMax = Number.parseInt(process.env.THREADBASE_DATABASE_POOL_MAX ?? \"\", 10);\n  const stmtTimeout = Number.parseInt(\n    process.env.THREADBASE_DATABASE_STATEMENT_TIMEOUT_MS ?? \"\",\n    10,\n  );\n  const ssl = process.env.THREADBASE_DATABASE_SSL || undefined;\n\n  return {\n    connectionString,\n    max: Number.isNaN(poolMax) ? 10 : poolMax,\n    ssl,\n    statementTimeout: Number.isNaN(stmtTimeout) ? undefined : stmtTimeout,\n    instanceId: getInstanceId(),\n  };\n}\n","import { readdirSync, readFileSync } from \"fs\";\nimport { dirname, join } from \"path\";\nimport type pg from \"pg\";\nimport { fileURLToPath } from \"url\";\n\nfunction getMigrationsDir(): string {\n  // ESM: import.meta.url is available\n  if (import.meta.url) {\n    return dirname(fileURLToPath(import.meta.url));\n  }\n  // CJS: __dirname is available (injected by tsup)\n  return __dirname;\n}\n\nexport async function runMigrations(pool: pg.Pool, migrationsDir?: string): Promise<void> {\n  await pool.query(`\n    CREATE TABLE IF NOT EXISTS _migrations (\n      id SERIAL PRIMARY KEY,\n      name TEXT NOT NULL UNIQUE,\n      applied_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n    )\n  `);\n\n  const { rows: applied } = await pool.query<{ name: string }>(\n    \"SELECT name FROM _migrations ORDER BY name\",\n  );\n  const appliedSet = new Set(applied.map((r) => r.name));\n\n  const dir = migrationsDir ?? join(getMigrationsDir(), \"pg-migrations\");\n  const files = readdirSync(dir)\n    .filter((f) => f.endsWith(\".sql\"))\n    .sort();\n\n  for (const file of files) {\n    if (appliedSet.has(file)) continue;\n\n    const sql = readFileSync(join(dir, file), \"utf-8\");\n    await pool.query(sql);\n    await pool.query(\"INSERT INTO _migrations (name) VALUES ($1)\", [file]);\n  }\n}\n","import type { Pool as PoolType } from \"pg\";\nimport type { DbConfig } from \"./config\";\n\nexport function maskConnectionString(url: string): string {\n  try {\n    const parsed = new URL(url);\n    // Check if password field is present (including empty password like \"user:@host\")\n    const hasPasswordField =\n      parsed.username.length > 0 && url.includes(`${parsed.username}:`) && url.includes(\"@\");\n    if (hasPasswordField) {\n      parsed.password = \"***\";\n    }\n    return parsed.toString();\n  } catch {\n    return \"***masked***\";\n  }\n}\n\nexport async function createPool(config: DbConfig): Promise<PoolType> {\n  const pg = await import(\"pg\");\n  const { Pool } = pg.default ?? pg;\n\n  const poolConfig: ConstructorParameters<typeof Pool>[0] = {\n    connectionString: config.connectionString,\n    max: config.max,\n  };\n\n  if (config.ssl === \"require\") {\n    poolConfig.ssl = { rejectUnauthorized: false };\n  } else if (config.ssl === \"disable\") {\n    poolConfig.ssl = false;\n  }\n\n  if (config.statementTimeout) {\n    poolConfig.statement_timeout = config.statementTimeout;\n  }\n\n  return new Pool(poolConfig);\n}\n","import type Database from \"better-sqlite3\";\n\nexport type CacheMetadataKey =\n  | \"last_conversation_id\"\n  | \"last_conversation_created_at\"\n  | \"projects_last_indexed_at\"\n  | \"conversations_last_indexed_at\"\n  | \"conversations_dirty\";\n\nexport class CacheMetadataRepository {\n  private get: Database.Statement;\n  private upsert: Database.Statement;\n  private del: Database.Statement;\n\n  constructor(db: Database.Database) {\n    this.get = db.prepare(\"SELECT value FROM cache_metadata WHERE key = ?\");\n    this.upsert = db.prepare(`\n      INSERT INTO cache_metadata (key, value, updated_at)\n      VALUES (?, ?, ?)\n      ON CONFLICT(key) DO UPDATE SET\n        value      = excluded.value,\n        updated_at = excluded.updated_at\n    `);\n    this.del = db.prepare(\"DELETE FROM cache_metadata WHERE key = ?\");\n  }\n\n  getCacheMetadata(key: CacheMetadataKey): string | null {\n    const row = this.get.get(key) as { value: string } | undefined;\n    return row?.value ?? null;\n  }\n\n  setCacheMetadata(key: CacheMetadataKey, value: string): void {\n    this.upsert.run(key, value, new Date().toISOString());\n  }\n\n  deleteCacheMetadata(key: CacheMetadataKey): void {\n    this.del.run(key);\n  }\n}\n","import type { ConversationCache } from \"../../conversation-cache\";\n\n/**\n * Thin repository wrapper around ConversationCache for the project-id flow.\n * The cache is the source of truth for conversation rows; this just exposes\n * a stable, repo-style API for services that don't want to know about the\n * cache class directly.\n */\nexport class ConversationsRepository {\n  constructor(private cache: ConversationCache) {}\n\n  updateConversationProjectId(args: { conversationId: string; projectId: string }): void {\n    this.cache.setConversationProjectId(args.conversationId, args.projectId);\n  }\n\n  listConversationsForProjectBackfill() {\n    return this.cache.listConversationsForProjectBackfill();\n  }\n\n  getLatestConversation() {\n    return this.cache.getLatestConversation();\n  }\n\n  hasOrphanRows(): boolean {\n    return this.cache.hasOrphanProjectId();\n  }\n}\n","import type Database from \"better-sqlite3\";\nimport type { ManagedSession, SessionStatus } from \"../../types\";\nimport { currentBootToken } from \"../../utils/bootToken\";\n\n/**\n * Durable registry of managed sessions (C1 Phase 2).\n * See docs/architecture/2026-07-24-durable-session-runtime.md.\n *\n * Distinct from SessionsRepository, which wraps the in-memory SessionStore for\n * the live request path. This one exists so session identity and provenance\n * outlive the streamer process: without it, a restart loses startedAt,\n * promptCount, sessionName, the Codex rollout binding, and failureReason, and\n * the boot reconciler has nothing to reconcile against.\n *\n * Deliberately not stored here: the PTY output ring buffer and xterm screen.\n * Their authoritative copy is the provider's JSONL, and writing 64KiB of ANSI\n * on every chunk to duplicate it would be a write storm for no gain.\n */\n\n/** How a persisted status was obtained — never inferred, always recorded. */\nexport type StatusSource = \"spawn\" | \"transition\" | \"exit\" | \"shutdown\" | \"probe\" | \"reconcile\";\n\n// Canonical definition lives in types.ts — it is a wire type on\n// SessionResponse, not a persistence detail. Re-exported here so reconciler and\n// repository consumers can keep importing it from one place.\nexport type { SessionLifecycle } from \"../../types\";\n\nexport interface ManagedSessionRow {\n  is_subagent?: number;\n  parent_conversation_id?: string | null;\n  session_id: string;\n  provider: string;\n  pid: number | null;\n  cmdline: string | null;\n  project_path: string;\n  project_name: string;\n  branch: string;\n  status: string;\n  status_source: string;\n  status_updated_at: number;\n  started_at: number;\n  completed_at: number | null;\n  last_activity_at: number | null;\n  prompt_count: number;\n  session_name: string | null;\n  project_id: string | null;\n  bound_conversation_id: string | null;\n  resumed_from_conversation_id: string | null;\n  failure_reason: string | null;\n  streamer_instance_id: string;\n  /**\n   * Which machine boot `pid` was recorded during (migration 002). Optional\n   * because rows written before it exists read back as null/absent, which the\n   * reconciler treats exactly like a mismatch — never like a match.\n   */\n  boot_token?: string | null;\n}\n\n/** Most rows the boot reconciler will probe in one pass. */\nexport const PROBE_SET_MAX = 200;\n\n/** Most rows one diagnostics report will carry. */\nexport const DIAGNOSTICS_MAX = 200;\n\n/** How long a finished session stays in the registry as history. */\nexport const TERMINAL_RETENTION_MS = 30 * 24 * 60 * 60 * 1000;\n\nexport interface RecordSpawnInput {\n  session: ManagedSession;\n  pid: number | null;\n  cmdline: string | null;\n  streamerInstanceId: string;\n}\n\nexport class ManagedSessionsRepository {\n  private upsertStmt: Database.Statement;\n  private updateStatusStmt: Database.Statement;\n  private bindStmt: Database.Statement;\n  private getStmt: Database.Statement;\n  private listNonTerminalStmt: Database.Statement;\n  private listAllStmt: Database.Statement;\n  private pruneTerminalStmt: Database.Statement;\n  private listRecoverableStmt: Database.Statement;\n  private deleteStmt: Database.Statement;\n\n  constructor(db: Database.Database) {\n    this.upsertStmt = db.prepare(`\n      INSERT INTO managed_sessions (\n        session_id, provider, pid, cmdline, project_path, project_name, branch,\n        status, status_source, status_updated_at, started_at, completed_at,\n        last_activity_at, prompt_count, session_name, project_id,\n        bound_conversation_id, resumed_from_conversation_id, failure_reason,\n        streamer_instance_id, boot_token, is_subagent, parent_conversation_id\n      ) VALUES (\n        @session_id, @provider, @pid, @cmdline, @project_path, @project_name, @branch,\n        @status, @status_source, @status_updated_at, @started_at, @completed_at,\n        @last_activity_at, @prompt_count, @session_name, @project_id,\n        @bound_conversation_id, @resumed_from_conversation_id, @failure_reason,\n        @streamer_instance_id, @boot_token, @is_subagent, @parent_conversation_id\n      )\n      ON CONFLICT(session_id) DO UPDATE SET\n        pid = excluded.pid,\n        cmdline = excluded.cmdline,\n        project_path = excluded.project_path,\n        project_name = excluded.project_name,\n        branch = excluded.branch,\n        status = excluded.status,\n        status_source = excluded.status_source,\n        status_updated_at = excluded.status_updated_at,\n        completed_at = excluded.completed_at,\n        last_activity_at = excluded.last_activity_at,\n        prompt_count = excluded.prompt_count,\n        session_name = excluded.session_name,\n        project_id = excluded.project_id,\n        bound_conversation_id = excluded.bound_conversation_id,\n        resumed_from_conversation_id = excluded.resumed_from_conversation_id,\n        failure_reason = excluded.failure_reason,\n        streamer_instance_id = excluded.streamer_instance_id,\n        boot_token = excluded.boot_token,\n        is_subagent = excluded.is_subagent,\n        parent_conversation_id = excluded.parent_conversation_id\n    `);\n\n    // Narrow status-only write for the hot transition path, so a\n    // running↔waiting_input flip doesn't rewrite every column.\n    //\n    // session_name rides along under COALESCE, like failure_reason: it is\n    // derived from the session's FIRST user message, which is strictly after\n    // recordSpawn — the only other writer of the column — so without a second\n    // write path the registry could never hold a name at all, and every\n    // recovered session came back unnamed.\n    //\n    // last_activity_at and prompt_count follow the same rule: a caller that\n    // knows only the status (the reconciler) must not zero what it never read.\n    this.updateStatusStmt = db.prepare(`\n      UPDATE managed_sessions\n         SET status = @status,\n             status_source = @status_source,\n             status_updated_at = @status_updated_at,\n             completed_at = @completed_at,\n             last_activity_at = COALESCE(@last_activity_at, last_activity_at),\n             prompt_count = COALESCE(@prompt_count, prompt_count),\n             failure_reason = COALESCE(@failure_reason, failure_reason),\n             session_name = COALESCE(@session_name, session_name)\n       WHERE session_id = @session_id\n    `);\n\n    this.bindStmt = db.prepare(`\n      UPDATE managed_sessions\n         SET bound_conversation_id = @bound_conversation_id\n       WHERE session_id = @session_id\n    `);\n\n    this.getStmt = db.prepare(\"SELECT * FROM managed_sessions WHERE session_id = ?\");\n\n    // The reconciler's boot read. Terminal rows are kept as history but never\n    // re-probed — there is nothing left to discover about them.\n    //\n    // Bounded because every row costs a pid probe, and on Windows a probe is a\n    // CIM query measured in seconds: an unbounded set turns a registry that\n    // accumulated badly into a multi-minute boot. Oldest first, so the rows\n    // most likely to be genuinely stale are the ones examined.\n    this.listNonTerminalStmt = db.prepare(`\n      SELECT * FROM managed_sessions\n       WHERE completed_at IS NULL\n       ORDER BY started_at ASC\n       LIMIT @limit\n    `);\n\n    // The diagnostics read. Unlike the two above it filters nothing — the\n    // question it answers is \"what does the registry actually hold\", and a row\n    // excluded by a WHERE clause is exactly the row someone is looking for.\n    this.listAllStmt = db.prepare(`\n      SELECT * FROM managed_sessions\n       ORDER BY status_updated_at DESC\n       LIMIT @limit\n    `);\n\n    this.pruneTerminalStmt = db.prepare(`\n      DELETE FROM managed_sessions\n       WHERE completed_at IS NOT NULL\n         AND completed_at < @before\n    `);\n\n    // The rehydrator's boot read. Deliberately WIDER than listNonTerminal:\n    // `recordShutdownState` stamps completed_at on every live session as the\n    // streamer stops, so the sessions most worth recovering are exactly the ones\n    // the probe set excludes. `status_source = 'shutdown'` is what distinguishes\n    // \"we stopped it\" from \"the agent finished\" — written since C1 Phase 2, read\n    // by nothing until now.\n    this.listRecoverableStmt = db.prepare(`\n      SELECT * FROM managed_sessions\n       WHERE (completed_at IS NULL OR status_source = 'shutdown')\n         AND (@include_subagents = 1 OR is_subagent = 0)\n         AND status_updated_at >= @since\n       ORDER BY status_updated_at DESC\n       LIMIT @limit\n    `);\n\n    this.deleteStmt = db.prepare(\"DELETE FROM managed_sessions WHERE session_id = ?\");\n  }\n\n  /** Record a session at spawn, or refresh every field of an existing row. */\n  recordSpawn({ session, pid, cmdline, streamerInstanceId }: RecordSpawnInput): void {\n    this.upsertStmt.run({\n      session_id: session.id,\n      is_subagent: Number(session.isSubagent ?? false),\n      parent_conversation_id: session.parentConversationId ?? null,\n      provider: session.provider ?? \"claude-code\",\n      pid,\n      cmdline,\n      project_path: session.projectPath,\n      project_name: session.projectName,\n      branch: session.branch ?? \"\",\n      status: session.status,\n      status_source: \"spawn\" satisfies StatusSource,\n      status_updated_at: Date.now(),\n      started_at: session.startedAt.getTime(),\n      completed_at: session.completedAt?.getTime() ?? null,\n      last_activity_at: session.lastActivityAt?.getTime() ?? null,\n      prompt_count: session.promptCount,\n      session_name: session.sessionName ?? null,\n      project_id: session.projectId ?? null,\n      bound_conversation_id: session.boundConversationId ?? null,\n      resumed_from_conversation_id: session.resumedFromConversationId ?? null,\n      failure_reason: session.failureReason ?? null,\n      streamer_instance_id: streamerInstanceId,\n      // Recorded, never backfilled: the pid above is only probeable while this\n      // token still matches the running machine.\n      boot_token: currentBootToken(),\n    });\n  }\n\n  /**\n   * Persist a status transition. `source` is required rather than defaulted:\n   * a status whose provenance is unknown is the thing this table exists to\n   * prevent, and the reconciler reads it to decide how much to trust the value.\n   */\n  recordStatus(\n    sessionId: string,\n    status: SessionStatus,\n    source: StatusSource,\n    fields: {\n      completedAt?: Date | null;\n      lastActivityAt?: Date | null;\n      promptCount?: number;\n      failureReason?: string | null;\n      /** Null/omitted keeps whatever is stored — it never clears a known name. */\n      sessionName?: string | null;\n    } = {},\n  ): void {\n    this.updateStatusStmt.run({\n      session_id: sessionId,\n      status,\n      status_source: source,\n      status_updated_at: Date.now(),\n      completed_at: fields.completedAt?.getTime() ?? null,\n      last_activity_at: fields.lastActivityAt?.getTime() ?? null,\n      prompt_count: fields.promptCount ?? null,\n      failure_reason: fields.failureReason ?? null,\n      session_name: fields.sessionName ?? null,\n    });\n  }\n\n  /**\n   * Persist the Codex rollout id discovered after spawn.\n   *\n   * Its own statement rather than a `recordSpawn` re-run: the binding arrives\n   * while the session is live, and re-upserting would also rewrite `cmdline`\n   * with an id that is *not* in a fresh Codex process's argv, turning the\n   * reconciler's identity check into a false `orphaned`. Without this write the\n   * binding lives only in memory and dies with the streamer — which is the\n   * whole reason a restarted Codex session could not be resumed (G6).\n   */\n  recordBinding(sessionId: string, boundConversationId: string): void {\n    this.bindStmt.run({\n      session_id: sessionId,\n      bound_conversation_id: boundConversationId,\n    });\n  }\n\n  get(sessionId: string): ManagedSessionRow | null {\n    return (this.getStmt.get(sessionId) as ManagedSessionRow | undefined) ?? null;\n  }\n\n  /**\n   * Rows with no recorded completion — the reconciler's probe set.\n   *\n   * Capped. Callers must compare the result length against the limit and say so\n   * when it clips: a silently truncated probe set reads as \"we checked\n   * everything\" when it did not.\n   */\n  listNonTerminal(limit: number = PROBE_SET_MAX): ManagedSessionRow[] {\n    return this.listNonTerminalStmt.all({ limit }) as ManagedSessionRow[];\n  }\n\n  /** Every row, most recently touched first, for the diagnostics surface. */\n  listAll(limit: number = DIAGNOSTICS_MAX): ManagedSessionRow[] {\n    return this.listAllStmt.all({ limit }) as ManagedSessionRow[];\n  }\n\n  /**\n   * Delete terminal rows older than `olderThanMs`, returning how many went.\n   *\n   * Only rows carrying a `completed_at` are eligible, so nothing the reconciler\n   * or rehydrator might still want is reachable from here — a row without one\n   * is by definition unfinished business, however old it looks.\n   */\n  pruneTerminal(olderThanMs: number = TERMINAL_RETENTION_MS): number {\n    return this.pruneTerminalStmt.run({ before: Date.now() - olderThanMs }).changes;\n  }\n\n  /**\n   * Rows a restart could bring back: still open, or closed by our own shutdown,\n   * and touched no longer ago than `sinceMs`. Newest first, capped — the caller\n   * decides which of these actually deserve rehydrating (`shouldRehydrate`).\n   */\n  listRecoverable({\n    sinceMs,\n    limit,\n    includeSubagents = true,\n  }: {\n    sinceMs: number;\n    limit: number;\n    includeSubagents?: boolean;\n  }): ManagedSessionRow[] {\n    return this.listRecoverableStmt.all({\n      since: sinceMs,\n      limit,\n      include_subagents: Number(includeSubagents),\n    }) as ManagedSessionRow[];\n  }\n\n  delete(sessionId: string): void {\n    this.deleteStmt.run(sessionId);\n  }\n}\n","import type Database from \"better-sqlite3\";\nimport { randomUUID } from \"crypto\";\nimport type { Project } from \"../../schemas/project.schema\";\nimport { canonicalizeProjectPath } from \"../../utils/canonicalizeProjectPath\";\n\ninterface ProjectRow {\n  id: string;\n  path: string;\n  name: string | null;\n  last_conversation_id: string | null;\n  last_conversation_created_at: string | null;\n  last_indexed_at: string | null;\n  latest_message_at: string | null;\n  latest_message_id: string | null;\n  created_at: string;\n  updated_at: string;\n}\n\nfunction rowToProject(row: ProjectRow): Project {\n  return {\n    id: row.id,\n    path: row.path,\n    name: row.name,\n    lastConversationId: row.last_conversation_id,\n    lastConversationCreatedAt: row.last_conversation_created_at,\n    lastIndexedAt: row.last_indexed_at,\n    latestMessageAt: row.latest_message_at,\n    latestMessageId: row.latest_message_id,\n    createdAt: row.created_at,\n    updatedAt: row.updated_at,\n  };\n}\n\nexport interface UpsertProjectInput {\n  lastConversationId?: string | null;\n  lastConversationCreatedAt?: string | null;\n  latestMessageAt?: string | null;\n  latestMessageId?: string | null;\n  name?: string | null;\n}\n\nexport class ProjectsRepository {\n  private getByPath: Database.Statement;\n  private getById: Database.Statement;\n  private listAll: Database.Statement;\n  private insert: Database.Statement;\n  private update: Database.Statement;\n\n  constructor(db: Database.Database) {\n    this.getByPath = db.prepare(\"SELECT * FROM projects WHERE path = ?\");\n    this.getById = db.prepare(\"SELECT * FROM projects WHERE id = ?\");\n    this.listAll = db.prepare(\"SELECT * FROM projects ORDER BY updated_at DESC\");\n    this.insert = db.prepare(`\n      INSERT INTO projects (\n        id, path, name,\n        last_conversation_id, last_conversation_created_at, last_indexed_at,\n        latest_message_at, latest_message_id,\n        created_at, updated_at\n      ) VALUES (\n        @id, @path, @name,\n        @last_conversation_id, @last_conversation_created_at, @last_indexed_at,\n        @latest_message_at, @latest_message_id,\n        @created_at, @updated_at\n      )\n    `);\n    this.update = db.prepare(`\n      UPDATE projects SET\n        name                         = COALESCE(@name, name),\n        last_conversation_id         = COALESCE(@last_conversation_id, last_conversation_id),\n        last_conversation_created_at = COALESCE(@last_conversation_created_at, last_conversation_created_at),\n        last_indexed_at              = COALESCE(@last_indexed_at, last_indexed_at),\n        latest_message_at            = COALESCE(@latest_message_at, latest_message_at),\n        latest_message_id            = COALESCE(@latest_message_id, latest_message_id),\n        updated_at                   = @updated_at\n      WHERE id = @id\n    `);\n  }\n\n  getProjectByPath(rawPath: string): Project | null {\n    const path = canonicalizeProjectPath(rawPath);\n    const row = this.getByPath.get(path) as ProjectRow | undefined;\n    return row ? rowToProject(row) : null;\n  }\n\n  getProjectById(id: string): Project | null {\n    const row = this.getById.get(id) as ProjectRow | undefined;\n    return row ? rowToProject(row) : null;\n  }\n\n  listProjects(): Project[] {\n    return (this.listAll.all() as ProjectRow[]).map(rowToProject);\n  }\n\n  /**\n   * Insert a project at the given canonical path, or update its metadata\n   * if one already exists. Returns the persisted Project row.\n   *\n   * Idempotent: passing the same path twice returns the same project id.\n   */\n  upsertProjectByPath(rawPath: string, input: UpsertProjectInput = {}): Project {\n    const path = canonicalizeProjectPath(rawPath);\n    const now = new Date().toISOString();\n\n    const existing = this.getByPath.get(path) as ProjectRow | undefined;\n    if (existing) {\n      this.update.run({\n        id: existing.id,\n        name: input.name ?? null,\n        last_conversation_id: input.lastConversationId ?? null,\n        last_conversation_created_at: input.lastConversationCreatedAt ?? null,\n        last_indexed_at: now,\n        latest_message_at: input.latestMessageAt ?? null,\n        latest_message_id: input.latestMessageId ?? null,\n        updated_at: now,\n      });\n      return rowToProject(this.getById.get(existing.id) as ProjectRow);\n    }\n\n    const id = randomUUID();\n    this.insert.run({\n      id,\n      path,\n      name: input.name ?? deriveNameFromPath(path),\n      last_conversation_id: input.lastConversationId ?? null,\n      last_conversation_created_at: input.lastConversationCreatedAt ?? null,\n      last_indexed_at: now,\n      latest_message_at: input.latestMessageAt ?? null,\n      latest_message_id: input.latestMessageId ?? null,\n      created_at: now,\n      updated_at: now,\n    });\n    return rowToProject(this.getById.get(id) as ProjectRow);\n  }\n}\n\nfunction deriveNameFromPath(path: string): string | null {\n  const parts = path.split(/[\\\\/]/).filter(Boolean);\n  return parts.length > 0 ? parts[parts.length - 1] : null;\n}\n","import type { SessionStore } from \"../../session-store\";\n\n/**\n * Sessions live in-memory in SessionStore (Postgres-backed persistence\n * was dropped per the SQLite-only direction). This repository wraps the\n * store with a stable, project-id-aware API for the new services.\n */\nexport class SessionsRepository {\n  constructor(private store: SessionStore) {}\n\n  updateSessionProjectId(args: { sessionId: string; projectId: string }): void {\n    this.store.updateManaged(args.sessionId, { projectId: args.projectId });\n  }\n\n  listManagedSessions() {\n    return this.store.listManaged();\n  }\n}\n","// The authenticated payloads inside the pair handshake's two Noise messages.\n//\n// Distinct from `pair-request.ts`, which parses the *outer*, unauthenticated\n// `e2ee` field of the HTTP body. Everything here sits inside the AEAD: message\n// 1's payload decrypted only because the initiator held the right static key\n// and the PSK derived from this QR's pair token, and message 2's payload\n// encrypted so only that same initiator can read it.\n//\n// That is the whole reason these exist as a separate contract (design.md §2.4,\n// GATE 4). The outer JSON is attacker-modifiable — an intermediary can rename a\n// device or widen `readOnly` on the way past — so on the E2EE path the values\n// that reach the device row come from message 1's payload, and every result a\n// new client persists or presents as verified comes from message 2's.\n//\n// Being inside the AEAD makes the bytes authentic, NOT well-formed. A payload\n// that decrypts is one the peer really sent; it is still JSON of an arbitrary\n// shape, so it is parsed with the same suspicion as the outer field.\n\nimport { E2EE_EXCHANGE_VERSION, E2eeRequestError } from \"./pair-request\";\n\n/**\n * The device-registration inputs message 1 authenticates.\n *\n * `deviceName` is the one optional field in the contract, and is normalised to\n * `null` when absent so both pairing paths hand `devicesRepo.register` the same\n * shape. The 100-character bound is the legacy path's, kept identical rather\n * than re-chosen: authenticating a value is not a reason to stop bounding it.\n */\nexport interface E2eePairRegistration {\n  version: number;\n  deviceName: string | null;\n  readOnly: boolean;\n}\n\n/** Matches the legacy path's `body.deviceName.slice(0, 100)`. */\nconst MAX_DEVICE_NAME_CHARS = 100;\n\n/**\n * Parse message 1's decrypted payload.\n *\n * Throws rather than defaulting. A client that completed the handshake and then\n * sent an unreadable payload is a protocol violation, not an older client — an\n * older client cannot reach this function at all, because it sends no `e2ee`\n * field and no handshake is performed. Defaulting a missing `readOnly` to\n * `false` would silently grant the wider capability preset off a payload the\n * device never actually stated, which is the exact substitution this contract\n * exists to prevent, arrived at through a parser instead of an intermediary.\n *\n * `v` is checked against the same version and with the same ordering as\n * `parseE2eeRequest`: a version mismatch is not a malformed payload, and saying\n * so is what lets a future client fall back deliberately.\n */\nexport function parseE2eeMsg1Payload(payload: Buffer): E2eePairRegistration {\n  let raw: unknown;\n  try {\n    raw = JSON.parse(payload.toString(\"utf-8\"));\n  } catch {\n    throw new E2eeRequestError(\"E2EE_MALFORMED\", \"e2ee message 1 payload is not valid JSON\");\n  }\n\n  if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n    throw new E2eeRequestError(\"E2EE_MALFORMED\", \"e2ee message 1 payload must be an object\");\n  }\n\n  const { v, deviceName, readOnly } = raw as {\n    v?: unknown;\n    deviceName?: unknown;\n    readOnly?: unknown;\n  };\n\n  if (typeof v !== \"number\" || !Number.isInteger(v)) {\n    throw new E2eeRequestError(\"E2EE_MALFORMED\", \"e2ee message 1 payload v must be an integer\");\n  }\n  if (v !== E2EE_EXCHANGE_VERSION) {\n    throw new E2eeRequestError(\n      \"E2EE_VERSION_UNSUPPORTED\",\n      `e2ee message 1 payload v ${v} is not supported; this server speaks ${E2EE_EXCHANGE_VERSION}`,\n    );\n  }\n\n  if (typeof readOnly !== \"boolean\") {\n    throw new E2eeRequestError(\n      \"E2EE_MALFORMED\",\n      \"e2ee message 1 payload readOnly must be a boolean\",\n    );\n  }\n\n  if (deviceName !== undefined && deviceName !== null && typeof deviceName !== \"string\") {\n    throw new E2eeRequestError(\n      \"E2EE_MALFORMED\",\n      \"e2ee message 1 payload deviceName must be a string when present\",\n    );\n  }\n\n  return {\n    version: v,\n    deviceName: typeof deviceName === \"string\" ? deviceName.slice(0, MAX_DEVICE_NAME_CHARS) : null,\n    readOnly,\n  };\n}\n\n/**\n * Every pairing result a new client persists or presents as verified.\n *\n * The outer response still carries compatibility copies of `deviceId`,\n * `deviceToken`, `capabilities`, `publicUrl` and `machineName` for released\n * clients that can read nothing else, and a new client ignores all of them —\n * so this shape is the one that has to be complete. A field missing here is a\n * field the new client would have to take from the unauthenticated outer copy,\n * which is the same as not authenticating it at all.\n *\n * `deviceId` and `deviceToken` are non-nullable on purpose: an E2EE pairing\n * that cannot produce them is a failed pairing, not a success carrying nulls.\n */\nexport interface E2eeMsg2Payload {\n  v: number;\n  deviceId: string;\n  deviceToken: string;\n  capabilities: string[];\n  publicUrl: string | null;\n  machineName: string;\n  serverVersion: string;\n  /**\n   * Always `true`. Completing a handshake is what pins the device, and\n   * design.md §6.3 says nothing a client sends ever clears it — so this is a\n   * literal here rather than an argument, and there is no call site that can\n   * pass `false` by accident.\n   */\n  e2eeRequired: true;\n}\n\nexport function encodeE2eeMsg2Payload(fields: Omit<E2eeMsg2Payload, \"v\" | \"e2eeRequired\">): Buffer {\n  const payload: E2eeMsg2Payload = {\n    v: E2EE_EXCHANGE_VERSION,\n    ...fields,\n    e2eeRequired: true,\n  };\n  return Buffer.from(JSON.stringify(payload), \"utf-8\");\n}\n","import { statSync } from \"fs\";\nimport { ConversationCache } from \"./conversation-cache\";\nimport { getLogger } from \"./logger\";\nimport type { CacheIntegrityMonitor } from \"./services/cache-integrity/cacheIntegrityMonitor\";\nimport type { ConversationWatcher } from \"./services/conversations/conversationWatcher\";\nimport { RESUME_BUSY_WINDOW_MS } from \"./services/sessions/conversationBusy\";\nimport type { SessionActivity, SessionResponse } from \"./types\";\nimport { canonicalizeFilePath } from \"./utils/canonicalizeFilePath\";\nimport type { WSHub } from \"./ws-hub\";\n\n// ─── External (non-PTY) live tails ───────────────────────────────────────────\n// A JSONL that changes in a watched project directory while NOT owned by any\n// PTY session belongs to an external agent (a terminal `claude`, another\n// streamer, an IDE). Tail it explicitly so mobile gets pushed transcript lines\n// for it instead of nothing.\n\n// A directory event only attaches a tail when the file was touched this\n// recently — the same \"actively owned right now\" window the resume collision\n// probe uses, so both features agree on what \"live\" means.\nexport const EXTERNAL_TAIL_RECENCY_MS = RESUME_BUSY_WINDOW_MS;\n\n// Hard cap on concurrent external tails; attaching past it LRU-evicts the\n// least recently active one. Bounds chokidar handles on a machine with a large\n// project tree (an unbounded map would attach one per touched JSONL).\nexport const EXTERNAL_TAIL_MAX = 32;\n\n// An external tail with no appended lines for this long is detached — the\n// external agent finished or moved on, and the directory watcher re-attaches\n// if it starts writing again.\nexport const EXTERNAL_TAIL_IDLE_MS = 300_000; // 5 minutes\n\n// A JSONL that grew within this window reads as \"active_writing\"; older reads as\n// \"quiet\". Deliberately short — this is an inferred hint, not a status.\nexport const EXTERNAL_ACTIVE_WRITING_MS = 30_000;\n\nexport type ExternalTailEntry = { conversationId: string; lastActivityAt: number };\n\n/**\n * Everything ExternalTailManager reads from the server. Nullable collaborators\n * are thunks rather than values because they are opened during listen() and\n * rebound by the integrity monitor's reset-and-rescan — the same reason\n * ApiDeps passes `cache: () => ConversationCache | null`.\n *\n * `tails` and `sessionFileMap` are the server's own Maps, held by reference:\n * the server still owns them as instance fields (both are reached directly\n * elsewhere in server.ts, and the tests read `externalTails` off the server),\n * this class only drives them.\n */\nexport type ExternalTailManagerDeps = {\n  tails: Map<string, ExternalTailEntry>;\n  sessionFileMap: Map<string, string>;\n  fileWatcher: ConversationWatcher;\n  wsHub: WSHub;\n  cache: () => ConversationCache | null;\n  cacheMonitor: () => CacheIntegrityMonitor | null;\n  broadcastConversationLines: (\n    sessionId: string,\n    lines: string[],\n    seqs?: (number | null)[] | null,\n  ) => void;\n};\n\n/**\n * Owns the live tails on JSONLs no PTY session is writing: when one attaches,\n * when it is evicted or swept, the inferred activity it feeds into session\n * responses, and the transcript lines it pushes.\n *\n * Extracted from StreamerServer so external-tail work stops editing the server\n * file, continuing the split in docs/plans/2026-07-12-server-ts-split.md.\n */\nexport class ExternalTailManager {\n  private log = getLogger(\"server\");\n\n  constructor(private deps: ExternalTailManagerDeps) {}\n\n  private get externalTails(): Map<string, ExternalTailEntry> {\n    return this.deps.tails;\n  }\n\n  /** True when a managed (PTY) session owns the tail for this canonical path. */\n  isManagedTailPath(key: string): boolean {\n    for (const watchedPath of this.deps.sessionFileMap.values()) {\n      if (canonicalizeFilePath(watchedPath) === key) return true;\n    }\n    return false;\n  }\n\n  /**\n   * Attach a live tail to a JSONL nobody is tailing yet, when it was touched\n   * recently enough to look actively written by an external agent. Capped at\n   * EXTERNAL_TAIL_MAX with LRU eviction.\n   */\n  maybeAttachExternalTail(filePath: string): void {\n    if (!filePath.endsWith(\".jsonl\")) return;\n    const key = canonicalizeFilePath(filePath);\n    if (this.externalTails.has(key)) return;\n    // A managed session's tail is owned by the PTY path; never shadow it.\n    if (this.isManagedTailPath(key)) return;\n\n    let mtimeMs: number;\n    try {\n      mtimeMs = statSync(filePath).mtimeMs;\n    } catch {\n      return; // unlink event, or unreadable — nothing to tail\n    }\n    const now = Date.now();\n    // Only the UPPER bound matters: a just-written file can carry an mtime a\n    // few ms in the future (timestamp granularity / clock skew).\n    if (now - mtimeMs > EXTERNAL_TAIL_RECENCY_MS) return;\n\n    this.evictExternalTailsIfNeeded();\n    // The real conversation id is resolved from the cache row on the first\n    // broadcast (codex rollout files aren't named after their id); the filename\n    // stem is only a placeholder until then.\n    this.externalTails.set(key, {\n      conversationId: ConversationCache.conversationIdForFile(key),\n      lastActivityAt: now,\n    });\n    this.deps.fileWatcher.watch(filePath);\n    this.log.debug?.(`External tail attached: ${filePath}`, {\n      filePath,\n      tails: this.externalTails.size,\n      event: \"external_tail.attach\",\n    });\n  }\n\n  /** Stop tailing an external file and drop its bookkeeping. */\n  detachExternalTail(key: string): void {\n    if (!this.externalTails.delete(key)) return;\n    this.deps.fileWatcher.unwatch(key);\n    this.log.debug?.(`External tail detached: ${key}`, {\n      filePath: key,\n      event: \"external_tail.detach\",\n    });\n  }\n\n  /**\n   * Shared unlink path for the per-file watcher and the directory watcher.\n   * Detaches any external tail and drops the cache row (unless an integrity\n   * alert is freezing deletes).\n   */\n  handleJsonlDeleted(filePath: string): void {\n    // The file is gone; an external tail on it can never fire again.\n    this.detachExternalTail(canonicalizeFilePath(filePath));\n    // While an alert is pending, freeze: queue the deletion instead of\n    // invalidating the row, so an rm -rf mid-freeze can't drain the cache.\n    if (this.deps.cacheMonitor()?.pending) {\n      this.deps.cacheMonitor()?.deferUnlink(filePath);\n      return;\n    }\n    const id = this.deps.cache()?.invalidateByFilePath(filePath);\n    if (id)\n      this.log.info(`Cache row invalidated after JSONL delete: ${id}`, {\n        id,\n        filePath,\n        event: \"cache.invalidate_on_unlink\",\n      });\n    // Feed the storm detector — a burst of unlinks re-triggers detection.\n    this.deps.cacheMonitor()?.recordUnlink(filePath);\n  }\n\n  /** Make room for one more tail by evicting the least recently active ones. */\n  evictExternalTailsIfNeeded(): void {\n    while (this.externalTails.size >= EXTERNAL_TAIL_MAX) {\n      let lruKey: string | null = null;\n      let lruAt = Number.POSITIVE_INFINITY;\n      for (const [key, entry] of this.externalTails) {\n        // A path a PTY session has since adopted is no longer ours: release the\n        // bookkeeping WITHOUT closing the watcher the managed path now owns.\n        if (this.isManagedTailPath(key)) {\n          this.externalTails.delete(key);\n          return;\n        }\n        if (entry.lastActivityAt < lruAt) {\n          lruAt = entry.lastActivityAt;\n          lruKey = key;\n        }\n      }\n      if (!lruKey) return;\n      this.detachExternalTail(lruKey);\n    }\n  }\n\n  /**\n   * INFERRED activity for an externally-owned conversation, derived purely from\n   * how recently its JSONL grew (the external tail's bookkeeping). Returns\n   * undefined when we hold no tail for it, so a session we know nothing about\n   * reports no activity rather than a fabricated \"quiet\".\n   *\n   * This can never distinguish a generating agent from one blocked on a\n   * permission gate — gates render on the PTY screen and never reach the JSONL —\n   * which is why it is a separate field and not folded into `status`.\n   */\n  externalActivityFor(conversationId: string, now = Date.now()): SessionActivity | undefined {\n    for (const entry of this.externalTails.values()) {\n      if (entry.conversationId !== conversationId) continue;\n      return {\n        state:\n          now - entry.lastActivityAt <= EXTERNAL_ACTIVE_WRITING_MS ? \"active_writing\" : \"quiet\",\n        lastEventAt: new Date(entry.lastActivityAt).toISOString(),\n        source: \"jsonl\",\n      };\n    }\n    return undefined;\n  }\n\n  /** Attach inferred `activity` to externally-owned sessions in a response set. */\n  withExternalActivity(sessions: readonly SessionResponse[]): readonly SessionResponse[] {\n    if (this.externalTails.size === 0) return sessions;\n    const now = Date.now();\n    return sessions.map((s) => {\n      if (s.ownership !== \"external\") return s;\n      const activity = this.externalActivityFor(s.conversationId ?? s.id, now);\n      return activity ? { ...s, activity } : s;\n    });\n  }\n\n  /** Detach external tails idle past EXTERNAL_TAIL_IDLE_MS. */\n  sweepIdleExternalTails(now = Date.now()): void {\n    for (const [key, entry] of [...this.externalTails]) {\n      if (this.isManagedTailPath(key)) {\n        // Adopted by a PTY session — release bookkeeping, keep the watcher.\n        this.externalTails.delete(key);\n        continue;\n      }\n      if (now - entry.lastActivityAt > EXTERNAL_TAIL_IDLE_MS) this.detachExternalTail(key);\n    }\n  }\n\n  /**\n   * Push appended lines from an externally-owned conversation. Reuses the exact\n   * conversation_events / conversation_event shapes mobile already consumes,\n   * keyed by the conversation UUID — an external session has no PTY, so it must\n   * never produce terminal_output / terminal_replay / session_ready, and never a\n   * session_update whose session.id is a conversation UUID (that would mint a\n   * phantom session row in the mobile cache). Question cards are likewise never\n   * derived here: with no PTY there is nothing that could deliver an answer.\n   */\n  broadcastExternalTailLines(\n    filePath: string,\n    lines: string[],\n    seqs?: (number | null)[] | null,\n  ): void {\n    const key = canonicalizeFilePath(filePath);\n    const entry = this.externalTails.get(key);\n    if (!entry) return;\n    entry.lastActivityAt = Date.now();\n\n    // Resolve the id from the cache row updateFromLines just wrote. Absent means\n    // nothing recordable landed (or the batch was an agent JSONL, whose row is\n    // deleted) — either way there is nothing to push.\n    const conversationId = this.deps.cache()?.getIdByFilePath(key);\n    if (!conversationId) return;\n    entry.conversationId = conversationId;\n\n    // A provider-created child session is hidden everywhere over HTTP when the\n    // subagentSessions flag is off — the list omits it, /api/sessions omits it,\n    // the detail 404s, and subscribe_session refuses it. This path was the one\n    // surface that ignored that: chokidar watches project dirs recursively, so\n    // Claude's <project>/<parentId>/subagents/agent-<id>.jsonl looks exactly\n    // like a JSONL an external agent is writing, and its every line — including\n    // the fork boilerplate the parent never sees — went out to all clients.\n    // Same predicate the HTTP path uses, so the two cannot disagree.\n    if (this.deps.cache()?.isExcludedSubagent(conversationId)) return;\n\n    this.deps.broadcastConversationLines(conversationId, lines, seqs);\n\n    // List-row refresh hint so clients don't have to poll ?refresh=1 to notice\n    // an external conversation advancing.\n    const meta = this.deps.cache()?.getMetaById(conversationId);\n    this.deps.wsHub.broadcast({\n      type: \"conversation_updated\",\n      conversationId,\n      messageCount: meta?.messageCount ?? 0,\n      lastActivity: meta?.lastActivity ?? new Date().toISOString(),\n      ownership: \"external\",\n    });\n  }\n}\n","import { randomBytes } from \"crypto\";\n\nexport interface PairTokenRecord {\n  token: string;\n  expiresAt: number;\n  used: boolean;\n}\n\nexport interface MintResult {\n  token: string;\n  expiresAt: number;\n  expiresInSeconds: number;\n}\n\nexport interface ConsumeOk {\n  ok: true;\n}\n\nexport interface ConsumeErr {\n  ok: false;\n  reason: \"unknown\" | \"expired\" | \"used\";\n}\n\nexport type ConsumeResult = ConsumeOk | ConsumeErr;\n\nconst DEFAULT_TTL_SECONDS = 180;\nconst SWEEP_INTERVAL_MS = 60_000;\n\nexport class PairTokenStore {\n  private current: PairTokenRecord | null = null;\n  private readonly ttlMs: number;\n  private sweepTimer: ReturnType<typeof setInterval> | null = null;\n\n  constructor(opts: { ttlSeconds?: number; autoSweep?: boolean } = {}) {\n    this.ttlMs = (opts.ttlSeconds ?? DEFAULT_TTL_SECONDS) * 1000;\n    if (opts.autoSweep !== false) {\n      this.sweepTimer = setInterval(() => this.sweep(), SWEEP_INTERVAL_MS);\n      this.sweepTimer.unref?.();\n    }\n  }\n\n  mint(): MintResult {\n    const token = `pt_${randomBytes(16).toString(\"hex\")}`;\n    const expiresAt = Date.now() + this.ttlMs;\n    this.current = { token, expiresAt, used: false };\n    return {\n      token,\n      expiresAt,\n      expiresInSeconds: Math.floor(this.ttlMs / 1000),\n    };\n  }\n\n  /**\n   * What `consume` would answer right now, WITHOUT spending the token.\n   *\n   * Exists so a caller can reject a bad token before doing any work, and still\n   * spend the token only once the work has succeeded. A pair token is\n   * single-use and lives 180 seconds, so spending it on a request that then\n   * fails costs the user a whole new QR — and, worse, makes their retry\n   * indistinguishable from an attacker replaying a photographed code, which is\n   * the one signal `design.md` §2.6 designates as replay detection.\n   *\n   * **Named for its relationship to `consume`, deliberately.** It reserves\n   * nothing and takes no lock, so two callers can both be told `{ ok: true }`\n   * for the same token. A name like `verify` would read as a gate that had\n   * decided something, and inviting a caller to act on this alone is precisely\n   * the misuse the ordering it enables exists to prevent. A reader who sees\n   * `wouldConsume` asks where the `consume` is, which is the right question.\n   */\n  wouldConsume(token: string): ConsumeResult {\n    const result = this.check(token);\n    return result.ok ? { ok: true } : result;\n  }\n\n  consume(token: string): ConsumeResult {\n    const result = this.check(token);\n    if (!result.ok) return result;\n    result.record.used = true;\n    return { ok: true };\n  }\n\n  /**\n   * The shared predicate behind `verify` and `consume`.\n   *\n   * One implementation on purpose: two copies of \"is this token usable\" is two\n   * places for the expiry or single-use rule to drift, and a drift in this\n   * direction fails open.\n   */\n  private check(token: string): { ok: true; record: PairTokenRecord } | ConsumeErr {\n    const record = this.current;\n    if (!record || record.token !== token) return { ok: false, reason: \"unknown\" };\n    if (Date.now() > record.expiresAt) {\n      this.current = null;\n      return { ok: false, reason: \"expired\" };\n    }\n    if (record.used) return { ok: false, reason: \"used\" };\n    return { ok: true, record };\n  }\n\n  peek(): PairTokenRecord | null {\n    return this.current;\n  }\n\n  clear(): void {\n    this.current = null;\n  }\n\n  sweep(): void {\n    if (this.current && Date.now() > this.current.expiresAt) {\n      this.current = null;\n    }\n  }\n\n  dispose(): void {\n    if (this.sweepTimer) clearInterval(this.sweepTimer);\n    this.sweepTimer = null;\n    this.current = null;\n  }\n}\n","import { spawn } from \"node:child_process\";\nimport type { HostTransport } from \"./protocol\";\nimport { connectToHost, hostSocketPath } from \"./socket\";\n\n/**\n * Start a pty-host, or attach to the one already running (plan Phase 6b).\n *\n * The streamer calls this at boot when the `ptyHost` feature flag is enabled.\n */\n\n/** How long to wait for a freshly-spawned host to accept a connection. */\nconst HOST_READY_TIMEOUT_MS = 5_000;\nconst HOST_POLL_INTERVAL_MS = 50;\n\nexport interface SpawnHostOptions {\n  instanceId: string;\n  /** argv[1] for the child — the CLI entry point. Defaults to this process's. */\n  entryPoint?: string;\n  timeoutMs?: number;\n}\n\n/**\n * Connect to the host for this instance, spawning it if none is listening.\n *\n * Attach-first rather than spawn-first: the host outliving the streamer is the\n * feature, so the common case after a restart is that one is already there.\n */\nexport async function connectOrSpawnHost(options: SpawnHostOptions): Promise<HostTransport> {\n  const socketPath = hostSocketPath(options.instanceId);\n\n  try {\n    return await connectToHost(socketPath);\n  } catch {\n    // Nothing listening — ours to start.\n  }\n\n  spawnDetachedHost(socketPath, options.entryPoint);\n\n  // Poll rather than wait on a ready signal: the child's stdio is discarded, so\n  // there is no channel to signal on. The socket accepting a connection is the\n  // only readiness fact that actually matters to the caller.\n  const deadline = Date.now() + (options.timeoutMs ?? HOST_READY_TIMEOUT_MS);\n  let lastError: unknown;\n  while (Date.now() < deadline) {\n    try {\n      return await connectToHost(socketPath);\n    } catch (err) {\n      lastError = err;\n      await new Promise((r) => setTimeout(r, HOST_POLL_INTERVAL_MS));\n    }\n  }\n  throw new Error(\n    `pty-host did not accept a connection on ${socketPath} within ${options.timeoutMs ?? HOST_READY_TIMEOUT_MS}ms` +\n      (lastError instanceof Error ? `: ${lastError.message}` : \"\"),\n  );\n}\n\n/**\n * Spawn the host so it survives this process.\n *\n * Three properties, each load-bearing:\n *\n *  - `detached` puts it in its own process group, so a Ctrl-C or a group kill\n *    aimed at the streamer does not take the agents with it.\n *  - `stdio: \"ignore\"` means it holds none of our descriptors. A child that\n *    inherited our stdout keeps a pipe open that the parent's exit cannot\n *    close, and on POSIX would also receive our terminal's SIGHUP — which is\n *    precisely the hangup this whole feature exists to avoid.\n *  - `unref()` removes it from our event loop, so the streamer can exit while\n *    the host keeps running.\n */\nexport function spawnDetachedHost(socketPath: string, entryPoint?: string): void {\n  const child = spawn(\n    process.execPath,\n    [entryPoint ?? process.argv[1], \"pty-host\", \"--socket\", socketPath],\n    { detached: true, stdio: \"ignore\" },\n  );\n  child.unref();\n}\n","import {\n  type Conversation,\n  type ConversationMeta,\n  ConversationScanner,\n  type FileStatEntry,\n} from \"@threadbase-sh/scanner\";\nimport { statSync } from \"fs\";\nimport { homedir } from \"os\";\nimport { join } from \"path\";\nimport type { ConversationCache } from \"./conversation-cache\";\nimport type { CacheMetadataRepository } from \"./db/repositories/cacheMetadata.repository\";\nimport type { ConversationsRepository } from \"./db/repositories/conversations.repository\";\nimport type { ProjectsRepository } from \"./db/repositories/projects.repository\";\nimport { getLogger } from \"./logger\";\nimport { CLAUDE_CODE_PROVIDER, CODEX_CLI_PROVIDER, CURSOR_PROVIDER } from \"./providers\";\nimport { setCacheMetadata } from \"./services/cache/cacheMetadata\";\nimport type { CacheIntegrityMonitor } from \"./services/cache-integrity/cacheIntegrityMonitor\";\nimport { refreshConversationCache } from \"./services/conversations/refreshConversationCache\";\nimport { shouldRefreshProjectsFromHdd } from \"./services/conversations/shouldRefreshProjectsFromHdd\";\nimport {\n  canonicalizeFilePath,\n  canonicalLivePathSet,\n  joinStatCacheByNativePath,\n  toNativeFilePath,\n} from \"./utils/canonicalizeFilePath\";\nimport { debounce } from \"./utils/debounce\";\nimport { isScannedSnapshotStale } from \"./utils/isScannedSnapshotStale\";\n\n// A refresh that settled within this window is served from the current\n// snapshot instead of re-parsing. Read path only: a post-write refresh is\n// never throttled out (see refreshFileAfterWrite).\nexport const REFRESH_TTL_MS = 2000;\n\n/** What a refresh request actually did — see refreshFileForRead/AfterWrite. */\nexport type RefreshOutcome =\n  /** This request started the parse that covers it. */\n  | \"refreshed\"\n  /** It awaited a parse another request had already started or queued. */\n  | \"joined\"\n  /** Read path only: a parse fulfilled within REFRESH_TTL_MS, so none ran. */\n  | \"skipped\";\n\nexport type RefreshResult = {\n  outcome: RefreshOutcome;\n  /**\n   * The scanner's own answer for the covering pass: fresh metadata, or null\n   * for a file that no longer parses (missing/empty — refreshFile drops it\n   * from the indexes and returns null). Always null for \"skipped\", which is\n   * the outcome to check before reading anything into a null meta.\n   */\n  meta: ConversationMeta | null;\n};\n\ntype RefreshPass = Promise<ConversationMeta | null>;\n\nconst withOutcome = (outcome: RefreshOutcome, pass: RefreshPass): Promise<RefreshResult> =>\n  pass.then((meta) => ({ outcome, meta }));\n\n/**\n * Per-file refresh coordination. This state is the ONLY thing that calls\n * scanner.refreshFile for its path, which is what makes the post-write\n * guarantee hold: the scanner single-flights refreshFile internally, so a\n * caller that reached it directly during an in-flight parse would be handed\n * that parse's result — metadata read before the write it is asking about.\n */\ntype RefreshState = {\n  /**\n   * The scanner the recorded work belongs to. refreshFile indexes into one\n   * instance, so a pass against a scanner that rescanForRefresh has since\n   * swapped out can never satisfy a request against its replacement.\n   */\n  scanner: ConversationScanner;\n  /**\n   * The path as the first caller for this key spelled it. Kept native rather\n   * than reusing the canonical map key, because the scanner is a native-path\n   * consumer (its own canonicalPath() converts TO the platform separator) and\n   * handing it the key would change what every existing caller passes.\n   */\n  filePath: string;\n  /** The parse currently reading the file, if any. */\n  active: RefreshPass | null;\n  /**\n   * When the last parse FULFILLED. A rejection leaves this alone: it observed\n   * nothing about the file, so it must not tell the next read \"recent enough\".\n   */\n  completedAt: number;\n  /**\n   * The follow-up pass shared by every post-write request that arrived while\n   * `active` was running. Started synchronously the moment `active` settles.\n   */\n  queued: { promise: RefreshPass; settle: (pass: RefreshPass) => void } | null;\n};\n\nexport type ConversationReconcileMode = \"files\" | \"full\";\n\nexport type ScanProfile = {\n  id: string;\n  label: string;\n  configDir: string;\n  enabled: boolean;\n  emoji: string;\n};\n\n/**\n * Everything ScannerManager reads from the server. Nullable collaborators are\n * thunks rather than values because they are opened during listen() and\n * rebound by the integrity monitor's reset-and-rescan — the same reason\n * ApiDeps passes `cache: () => ConversationCache | null`.\n */\nexport type ScannerManagerDeps = {\n  scanProfiles: ScanProfile[] | undefined;\n  codexRoots: string[];\n  cursorRoots: string[];\n  directoryDebounceMs: number;\n  persistenceDisabled: boolean;\n  cache: () => ConversationCache | null;\n  cacheMonitor: () => CacheIntegrityMonitor | null;\n  projectsRepo: () => ProjectsRepository | null;\n  conversationsRepo: () => ConversationsRepository | null;\n  cacheMetadataRepo: () => CacheMetadataRepository | null;\n  trackCacheWrite: (task: Promise<unknown>) => void;\n};\n\n/**\n * Owns the conversation scanner's lifecycle and freshness state: which scanner\n * instance is current, whether a scan is in flight, which files went stale, and\n * the cache↔disk reconcile that closes the gap.\n *\n * Extracted from StreamerServer so scanner work stops editing the server file\n * (see docs/plans/2026-07-12-server-ts-split.md, PR 2).\n */\nexport class ScannerManager {\n  private scanner: ConversationScanner | null = null;\n  private scannerReady: Promise<unknown> | null = null;\n  private scannerStale = false;\n  private persistenceDisabled: boolean;\n  private allScanners = new Set<ConversationScanner>();\n  private stalePaths = new Set<string>();\n  private reconcileInFlight: Promise<void> | null = null;\n  private lastAutoFullReconcileAt = 0;\n  // reconcileMode() returns \"full\" on every poll while a permanent drift\n  // condition holds (e.g. an orphan row) — without a cooldown each poll\n  // re-walks the whole corpus back-to-back. refresh=1 and per-file\n  // reconciles go through other paths and are unaffected.\n  private static readonly AUTO_FULL_RECONCILE_COOLDOWN_MS = 60_000;\n  // Keyed canonically (canonicalizeFilePath), because that is the identity the\n  // rest of the process keys refresh work by and the form the scanner reduces\n  // its own in-flight key to. Bounded by the set of files ever refreshed; an\n  // entry is overwritten, never duplicated, per path.\n  private refreshState = new Map<string, RefreshState>();\n  private log = getLogger(\"server\");\n\n  /**\n   * Trailing-debounced \"the directory changed\" signal. Kept public because the\n   * server wires it straight into the watcher callback and cancels it in\n   * close(); `.cancel()` is part of its contract.\n   */\n  readonly markStaleDebounced: ReturnType<typeof debounce>;\n\n  constructor(private deps: ScannerManagerDeps) {\n    this.persistenceDisabled = deps.persistenceDisabled;\n    this.markStaleDebounced = debounce(() => {\n      if (this.scannerReady) {\n        // Only arm when paths remain. takeStaleFiles may have drained them\n        // while this debounce was pending; re-arming then would leave\n        // scannerStale=true with an empty set, and the next \"files\" reconcile\n        // would silently upgrade into a full-tree rescan (#409).\n        if (this.stalePaths.size > 0) this.scannerStale = true;\n      }\n      // No adopted scanner yet, so there are no in-place indexes to refresh —\n      // drop it and let the next get() build one. The recorded paths go with\n      // it; the fresh scan covers them.\n      else {\n        this.scanner = null;\n        this.stalePaths.clear();\n      }\n    }, deps.directoryDebounceMs);\n  }\n\n  // ─── state accessors ──────────────────────────────────────────────\n\n  /** The current scanner without triggering a scan; null before the first one. */\n  get current(): ConversationScanner | null {\n    return this.scanner;\n  }\n\n  /** The in-flight (or settled) scan promise; null when no scanner was ever built. */\n  get ready(): Promise<unknown> | null {\n    return this.scannerReady;\n  }\n\n  get stale(): boolean {\n    return this.scannerStale;\n  }\n\n  set stale(value: boolean) {\n    this.scannerStale = value;\n  }\n\n  /** The stale-path set itself, so callers can add/clear/size it in place. */\n  get staleFiles(): Set<string> {\n    return this.stalePaths;\n  }\n\n  /** Drop the current scanner so the next get() builds a fresh one. */\n  invalidate(): void {\n    this.scanner = null;\n    this.scannerReady = null;\n  }\n\n  /**\n   * A new JSONL bound to a live session: the index must pick it up.\n   *\n   * Arm the stale flag when a scan already exists, so the next get() reconciles\n   * in place. With no scanner yet there is nothing to mark, so drop it instead\n   * and let the next get() build one. Exactly one of the two happens — dropping\n   * the scanner in both cases would throw away a live index on every bind.\n   */\n  markStaleOrDrop(): void {\n    if (this.scannerReady) {\n      this.scannerStale = true;\n    } else {\n      this.scanner = null;\n    }\n  }\n\n  /** Persistent indexes are disabled for the rest of this process's life. */\n  disablePersistence(): void {\n    this.persistenceDisabled = true;\n  }\n\n  /** Track a scanner the server built itself so close() still tears it down. */\n  track(scanner: ConversationScanner): void {\n    this.allScanners.add(scanner);\n  }\n\n  /**\n   * Adopt the warm-up scanner as the live one, but only if nothing else claimed\n   * the slot while the warm-up scan ran.\n   */\n  adoptIfUnclaimed(scanner: ConversationScanner): boolean {\n    if (this.scannerReady || this.scanner) return false;\n    this.scanner = scanner;\n    this.scannerReady = Promise.resolve();\n    return true;\n  }\n\n  // ─── construction helpers ─────────────────────────────────────────\n\n  buildStatCache(\n    previousScanner: ConversationScanner | null,\n  ): Map<string, { stat: FileStatEntry; meta: ConversationMeta }> | undefined {\n    const cache = this.deps.cache();\n    if (!cache) return undefined;\n    // The scanner looks statCache entries up by its own ConversationMeta\n    // .filePath, which is native-separator. Cache rows are canonical. So every\n    // join below compares canonical forms, but the returned map is always keyed\n    // native — otherwise the scanner misses every entry on Windows and silently\n    // re-parses every conversation on each rescan.\n    if (!previousScanner) {\n      const persisted = cache.getScannerStatCache();\n      if (persisted.size === 0) return undefined;\n      const nativeKeyed = new Map<string, { stat: FileStatEntry; meta: ConversationMeta }>();\n      for (const [canonicalPath, entry] of persisted) {\n        nativeKeyed.set(toNativeFilePath(canonicalPath), entry);\n      }\n      return nativeKeyed;\n    }\n    const dbStats = cache.getFileStats();\n    if (dbStats.size === 0) return undefined;\n    const statCache = joinStatCacheByNativePath(\n      previousScanner.getMetadataCache().values(),\n      dbStats,\n    );\n    return statCache.size > 0 ? statCache : undefined;\n  }\n\n  // Returns the provider + roots fragment to spread into every scan()/search() call.\n  // Empty *Roots disables that provider (safe no-op per scanner contract).\n  codexScanOpts() {\n    return {\n      providers: [CLAUDE_CODE_PROVIDER, CODEX_CLI_PROVIDER, CURSOR_PROVIDER],\n      codexRoots: this.deps.codexRoots,\n      cursorRoots: this.deps.cursorRoots,\n    };\n  }\n\n  newScanner(options?: ConstructorParameters<typeof ConversationScanner>[0]): ConversationScanner {\n    return new ConversationScanner(\n      options ?? (this.persistenceDisabled ? { persistent: false } : undefined),\n    );\n  }\n\n  /**\n   * The projects dirs disk discovery should walk — the single source of truth\n   * for \"where do this server's JSONLs live\", mirroring the warm-up watcher\n   * (see listen()). Derived from the enabled scanProfiles' configDirs, or the\n   * real ~/.claude/projects when no profiles are configured. An all-disabled\n   * profile set intentionally yields [] (nothing to discover), matching the\n   * watcher — it does NOT fall back to home in that case.\n   */\n  projectsDirs(): string[] {\n    const profiles = this.deps.scanProfiles;\n    if (profiles && profiles.length > 0) {\n      return profiles.filter((p) => p.enabled).map((p) => join(p.configDir, \"projects\"));\n    }\n    return [join(homedir(), \".claude\", \"projects\")];\n  }\n\n  // ─── staleness ────────────────────────────────────────────────────\n\n  // Drain the stale set and disarm the flag together. The caller owns the\n  // returned paths: clearing before the refresh means events that land DURING\n  // it re-arm the flag and get their own pass instead of being swallowed.\n  takeStaleFiles(): string[] {\n    const paths = [...this.stalePaths];\n    this.stalePaths.clear();\n    this.scannerStale = false;\n    return paths;\n  }\n\n  // Reconcile exactly the JSONLs a directory event named. Failures are logged\n  // and swallowed per file: one unreadable transcript must not abort the\n  // others, and the file simply stays on its previous snapshot until the next\n  // event — the same outcome the full rescan gave on a parse failure.\n  async refreshStaleFiles(\n    scanner: ConversationScanner,\n    paths: string[],\n  ): Promise<ConversationMeta[]> {\n    const metas = await Promise.all(\n      paths.map((filePath) =>\n        // Post-write, not read: a directory event IS the notification that the\n        // file changed, so this must never be throttled out or satisfied by a\n        // parse that started before the event. Routing it through the same\n        // coordinator as the other writers is also what keeps the scanner's\n        // internal refreshFile coalescing from quietly serving one of them a\n        // pre-write parse.\n        this.refreshFileAfterWrite(scanner, filePath)\n          .then((result) => result.meta)\n          .catch((err) => {\n            this.log.warn(\"scanner.refreshFile: failed\", {\n              event: \"scanner.refresh_failed\",\n              filePath,\n              trigger: \"directory-event\",\n              err,\n            });\n            return null;\n          }),\n      ),\n    );\n    return metas.filter((m): m is ConversationMeta => m !== null);\n  }\n\n  // True when the JSONL on disk is meaningfully newer than the scanned\n  // snapshot's last-activity timestamp — i.e. the file grew after the scan.\n  isConversationSnapshotStale(conv: Conversation): boolean {\n    if (!conv.filePath) return false;\n    let mtimeMs: number | null = null;\n    try {\n      mtimeMs = statSync(conv.filePath).mtimeMs;\n    } catch {\n      // Stat failed (file moved/deleted mid-flight) — don't force a re-scan.\n      return false;\n    }\n    return isScannedSnapshotStale(conv.timestamp, mtimeMs);\n  }\n\n  /**\n   * Read-path refresh: throttled and coalesced, for a caller that would rather\n   * serve the current snapshot than pay a parse.\n   *\n   *  - a pass already reading the file → await it (\"joined\");\n   *  - a pass that fulfilled within REFRESH_TTL_MS → skip (\"skipped\"), so N\n   *    stacked detail requests on a live, actively-appended file cost one\n   *    parse per window rather than one each;\n   *  - otherwise parse (\"refreshed\").\n   *\n   * Deliberately NOT content-aware: skipping only when the file is unchanged\n   * would defeat the throttle exactly where it earns its keep, since a live\n   * rollout changes on every append.\n   */\n  refreshFileForRead(scanner: ConversationScanner, filePath: string): Promise<RefreshResult> {\n    const key = canonicalizeFilePath(filePath);\n    const state = this.refreshStateFor(scanner, key, filePath);\n    if (state.active) return withOutcome(\"joined\", state.active);\n    if (state.completedAt > 0 && Date.now() - state.completedAt < REFRESH_TTL_MS) {\n      return Promise.resolve({ outcome: \"skipped\", meta: null });\n    }\n    return withOutcome(\"refreshed\", this.startRefreshPass(state, key));\n  }\n\n  /**\n   * Post-write refresh, for a caller that knows the file just changed (the\n   * end of an agent turn, a user's input, a directory event).\n   *\n   * The guarantee: when the returned promise fulfils, a parse that STARTED\n   * after this call has completed. It cannot be thrown away by the read\n   * throttle, and it cannot be satisfied by an older parse — completion of a\n   * parse that began before the write is no proof it observed the write, and\n   * the scanner would hand exactly that parse to a direct caller.\n   *\n   * So: no pass running → parse now; a pass running → wait for a follow-up\n   * that starts when it settles. Every post-write request arriving during a\n   * pass shares that one follow-up, so a burst costs one extra parse, not one\n   * per caller. Requests that arrive after the follow-up has STARTED are not\n   * covered by it and get the next one.\n   *\n   * What it does not promise: that the writer's bytes have reached disk. This\n   * is \"everything visible in the file when this was called is indexed\", not\n   * a flush protocol — a waiting_input signal is not proof of a flush.\n   */\n  refreshFileAfterWrite(scanner: ConversationScanner, filePath: string): Promise<RefreshResult> {\n    const key = canonicalizeFilePath(filePath);\n    const state = this.refreshStateFor(scanner, key, filePath);\n    if (!state.active) return withOutcome(\"refreshed\", this.startRefreshPass(state, key));\n    if (state.queued) return withOutcome(\"joined\", state.queued.promise);\n    return withOutcome(\"refreshed\", this.queueRefreshPass(state).promise);\n  }\n\n  // The state for this file, rebuilt from scratch when the scanner it recorded\n  // work against is no longer the one being asked about. Any post-write pass\n  // the discarded state still owed is re-armed against the new scanner rather\n  // than left hanging: its callers asked for their write to be indexed, and\n  // the index that matters now is the new instance's.\n  private refreshStateFor(\n    scanner: ConversationScanner,\n    key: string,\n    filePath: string,\n  ): RefreshState {\n    const previous = this.refreshState.get(key);\n    if (previous && previous.scanner === scanner) return previous;\n    const state: RefreshState = {\n      scanner,\n      filePath,\n      active: null,\n      completedAt: 0,\n      queued: null,\n    };\n    this.refreshState.set(key, state);\n    const orphaned = previous?.queued;\n    if (orphaned) {\n      previous.queued = null;\n      orphaned.settle(this.startRefreshPass(state, key));\n    }\n    return state;\n  }\n\n  private startRefreshPass(state: RefreshState, key: string): RefreshPass {\n    const pass: RefreshPass = state.scanner.refreshFile(state.filePath).then(\n      (meta) => {\n        try {\n          if (meta) this.deps.cache()?.upsertFromScannerMeta([meta] as any[]);\n          else this.deps.cache()?.reconcileClassification(state.filePath);\n        } catch (err) {\n          this.log.warn(\"Failed to cache refreshed conversation classification\", { err });\n        }\n        this.finishRefreshPass(state, key, pass, true);\n        return meta;\n      },\n      (err) => {\n        this.finishRefreshPass(state, key, pass, false);\n        throw err;\n      },\n    );\n    state.active = pass;\n    return pass;\n  }\n\n  private queueRefreshPass(state: RefreshState): NonNullable<RefreshState[\"queued\"]> {\n    let settle!: (pass: RefreshPass) => void;\n    // Resolving with a promise adopts it, rejection included, so a queued\n    // caller sees exactly what its covering pass saw.\n    const promise = new Promise<ConversationMeta | null>((resolve) => {\n      settle = resolve;\n    });\n    state.queued = { promise, settle };\n    return state.queued;\n  }\n\n  private finishRefreshPass(\n    state: RefreshState,\n    key: string,\n    pass: RefreshPass,\n    fulfilled: boolean,\n  ): void {\n    // A pass whose state was replaced (or superseded) must not resurrect it or\n    // clobber the newer one's bookkeeping.\n    if (this.refreshState.get(key) !== state || state.active !== pass) return;\n    state.active = null;\n    if (fulfilled) state.completedAt = Date.now();\n    const queued = state.queued;\n    if (!queued) return;\n    state.queued = null;\n    // Started synchronously with the settle — not through a microtask hop —\n    // so nothing can slip into the gap and open a second parallel parse, and\n    // so a rejected pass still gets its follow-up attempted exactly once.\n    queued.settle(this.startRefreshPass(state, key));\n  }\n\n  // Let every outstanding pass finish before the scanners it indexes into are\n  // closed. Rounds, because a queued pass only starts once its predecessor\n  // settles; capped, because a caller appending during shutdown must not be\n  // able to hold close() open indefinitely.\n  private async drainRefreshPasses(): Promise<void> {\n    for (let round = 0; round < 4; round++) {\n      const outstanding: Promise<unknown>[] = [];\n      for (const state of this.refreshState.values()) {\n        if (state.active) outstanding.push(state.active.catch(() => undefined));\n        if (state.queued) outstanding.push(state.queued.promise.catch(() => undefined));\n      }\n      if (outstanding.length === 0) break;\n      await Promise.all(outstanding);\n    }\n    this.refreshState.clear();\n  }\n\n  // ─── scanner acquisition ──────────────────────────────────────────\n\n  // skipStaleRescan: when an indexed scanner already exists, return it directly\n  // even if scannerStale is set, leaving the flag untouched so the next\n  // list-level call still rescans. The single-conversation detail path passes\n  // this — its per-file refreshFile (in findConversationByUuid) already\n  // reconciles the one conversation being requested, so paying a full-tree\n  // rescan just because some OTHER file changed is the stall this avoids.\n  async get(skipStaleRescan = false): Promise<ConversationScanner> {\n    // Detail path (#368): never block on an in-flight scan. The live scanner is\n    // kept readable across full rescans (shadow-and-swap in rescanForRefresh);\n    // mid-rebuild the previous generation is still correct for conversations\n    // that existed before the rescan started.\n    if (skipStaleRescan && this.scanner) {\n      return this.scanner;\n    }\n    if (this.scannerReady) {\n      await this.scannerReady;\n      // onConversationChanged may have nulled this.scanner while we awaited —\n      // if so, fall through and create a fresh one.\n      if (this.scanner) {\n        if (skipStaleRescan) return this.scanner;\n        // If file events arrived while the scan was running, reconcile now\n        // rather than serving a stale result — but per file, not by discarding\n        // the instance. refreshFile() re-indexes exactly the named JSONL and\n        // touches only that file's conversationLRU keys, so an append to one\n        // conversation can no longer evict every other conversation's parsed\n        // snapshot. Paths are drained first so events arriving during the\n        // refresh re-arm the flag and get their own pass.\n        if (this.scannerStale) {\n          const paths = this.takeStaleFiles();\n          // Armed with no paths (\"stale, source unknown\"): fall back to the\n          // full rebuild, which is what the flag meant before it carried\n          // identity.\n          if (paths.length === 0) {\n            this.scanner = null;\n            this.scannerReady = null;\n            return this.get();\n          }\n          await this.refreshStaleFiles(this.scanner, paths);\n          return this.scanner ?? this.get();\n        }\n        return this.scanner;\n      }\n    }\n    this.takeStaleFiles();\n    const statCache = this.buildStatCache(this.scanner);\n    // Scanner 0.9.4 reads statCache only in non-persistent scans, and the\n    // streamer never serves from the scanner's persistent index. Letting the\n    // no-statCache case fall through to the persistent default made an empty\n    // cache import rows for files deleted long ago (#876).\n    this.scanner = this.newScanner({ persistent: false });\n    this.allScanners.add(this.scanner);\n    this.scannerReady = this.scanner.scan({\n      ...(this.deps.scanProfiles ? { profiles: this.deps.scanProfiles } : {}),\n      ...this.codexScanOpts(),\n      ...(statCache ? { statCache } : {}),\n    });\n    try {\n      await this.scannerReady;\n    } catch (err) {\n      // Don't memoize the rejection — a stored rejected promise would make\n      // every future request replay this error instantly instead of retrying.\n      this.scanner = null;\n      this.scannerReady = null;\n      throw err;\n    }\n    // Capture before returning — onConversationChanged could null this.scanner\n    // in the microtask between the await and the return.\n    const scanner = this.scanner;\n    if (!scanner) return this.get();\n    return scanner;\n  }\n\n  async getFresh(): Promise<ConversationScanner> {\n    this.scanner = null;\n    this.scannerReady = null;\n    return this.get();\n  }\n\n  // refresh=1's scan: build a SHADOW scanner with fullRescan:true, then swap\n  // it in atomically. The escape hatch bypasses the scanner's dir-mtime\n  // discovery gate (an explicit user pull-to-refresh is exactly the \"don't\n  // trust the gate, check disk for real\" signal).\n  //\n  // Scanning in place would clear the non-persistent scanner's metadataCache\n  // at start, so a concurrent detail fetch that skipped the await would 404 a\n  // conversation that exists — and one that awaited would pay the full scan's\n  // wall clock (#368). Shadow-and-swap keeps this.scanner readable as the\n  // previous generation for the whole rebuild.\n  async rescanForRefresh(\n    onProgress?: (scanned: number, total: number) => void,\n  ): Promise<ConversationScanner> {\n    // Let any in-flight scan finish first so we don't run two scans on the same\n    // index concurrently.\n    if (this.scannerReady) await this.scannerReady;\n    // A full rescan supersedes any pending staleness, per-file paths included.\n    this.takeStaleFiles();\n    const previous = this.scanner;\n    const statCache = this.buildStatCache(previous);\n    const shadow = this.newScanner({ persistent: false });\n    this.allScanners.add(shadow);\n    this.scannerReady = shadow.scan({\n      ...(this.deps.scanProfiles ? { profiles: this.deps.scanProfiles } : {}),\n      ...this.codexScanOpts(),\n      fullRescan: true,\n      ...(statCache ? { statCache } : {}),\n      ...(onProgress ? { onProgress } : {}),\n    });\n    try {\n      await this.scannerReady;\n    } catch (err) {\n      // Leave this.scanner as the previous generation; clear the failed promise\n      // so the next caller retries rather than replaying the rejection.\n      this.scannerReady = null;\n      throw err;\n    }\n    this.scanner = shadow;\n    return shadow;\n  }\n\n  // ─── cache ↔ disk reconcile ───────────────────────────────────────\n\n  /**\n   * Full-glob scan + cache upsert/delete reconcile. Used by ?refresh=1 and by\n   * the automatic freshness path when the directory watcher marked the scanner\n   * stale or shouldRefreshProjectsFromHdd detected disk drift.\n   */\n  async reconcileFromDisk(onProgress?: (scanned: number, total: number) => void): Promise<void> {\n    const cache = this.deps.cache();\n    if (!cache) return;\n    // No warm-up gate here: the caller decides. The cold-start path wraps this\n    // in withWarmup (nothing to serve, so 503 while building is correct); the\n    // routine background path must NOT gate, or every JSONL append flips the\n    // server into SERVER_WARMING_UP and the client flickers.\n    const scanner = await this.rescanForRefresh(onProgress);\n    const metas = [...scanner.getMetadataCache().values()];\n    try {\n      cache.upsertFromScannerMeta(metas as any[]);\n      // Additions/updates are always safe. But while a cache-integrity alert\n      // is pending, freeze the removal half — reconcileDeletions must not\n      // drop rows until a human resolves the alert.\n      if (!this.deps.cacheMonitor()?.pending) {\n        // Canonical, because reconcileDeletions compares against\n        // conversation_meta.file_path while the scanner's filePath is native.\n        cache.reconcileDeletions(canonicalLivePathSet(metas));\n      }\n      const projectsRepo = this.deps.projectsRepo();\n      const conversationsRepo = this.deps.conversationsRepo();\n      const cacheMetadataRepo = this.deps.cacheMetadataRepo();\n      if (projectsRepo && conversationsRepo && cacheMetadataRepo) {\n        refreshConversationCache({\n          cache,\n          projectsRepo,\n          conversationsRepo,\n          cacheMetadataRepo,\n        });\n      } else if (cacheMetadataRepo) {\n        setCacheMetadata(\n          cacheMetadataRepo,\n          \"conversations_last_indexed_at\",\n          new Date().toISOString(),\n        );\n      }\n    } catch (err) {\n      this.log.warn(\n        `refresh reconcile failed: ${err instanceof Error ? err.message : String(err)}`,\n        { event: \"conversations.reconcile_failed\" },\n      );\n    }\n  }\n\n  // Reconcile the cache from disk without blocking the caller. Single-flighted\n  // so a burst of list polls during active session writes shares one rescan\n  // rather than queueing a full rescan each; tracked so close() awaits the\n  // in-flight cache write before shutting the DB.\n  startBackgroundReconcile(mode: ConversationReconcileMode = \"full\"): void {\n    if (this.reconcileInFlight) return;\n    if (mode === \"full\") {\n      const now = Date.now();\n      if (now - this.lastAutoFullReconcileAt < ScannerManager.AUTO_FULL_RECONCILE_COOLDOWN_MS) {\n        return;\n      }\n      this.lastAutoFullReconcileAt = now;\n    }\n    const paths = mode === \"files\" ? this.takeStaleFiles() : [];\n    const task = (\n      paths.length > 0 ? this.reconcileStaleFilesFromDisk(paths) : this.reconcileFromDisk()\n    ).finally(() => {\n      this.reconcileInFlight = null;\n    });\n    this.reconcileInFlight = task;\n    this.deps.trackCacheWrite(task);\n  }\n\n  // \"files\": a directory event named specific JSONLs, so refresh only those.\n  // \"full\": disk drifted in ways a per-file refresh can't see (a project dir\n  // appeared, rows vanished), so walk the tree. Order matters — the staleness\n  // check short-circuits first so the HDD freshness probe stays off the hot\n  // poll path, exactly as it did when this returned a boolean.\n  reconcileMode(): ConversationReconcileMode | null {\n    if (!this.deps.cache()) return null;\n    if (this.scannerStale) return \"files\";\n    const conversationsRepo = this.deps.conversationsRepo();\n    const cacheMetadataRepo = this.deps.cacheMetadataRepo();\n    if (!conversationsRepo || !cacheMetadataRepo) return null;\n    return shouldRefreshProjectsFromHdd(conversationsRepo, cacheMetadataRepo, {\n      projectsDirs: this.projectsDirs(),\n    })\n      ? \"full\"\n      : null;\n  }\n\n  // The per-file half of reconcileFromDisk: re-index just the changed JSONLs\n  // and upsert their rows. No reconcileDeletions here — that needs the whole\n  // live-path set, and deletions already have their own path (onFileDeleted ->\n  // invalidateByFilePath). New projects still arrive via the HDD-freshness\n  // \"full\" mode.\n  private async reconcileStaleFilesFromDisk(paths: string[]): Promise<void> {\n    const cache = this.deps.cache();\n    if (!cache) return;\n    const scanner = await this.get(true);\n    const metas = await this.refreshStaleFiles(scanner, paths);\n    if (metas.length === 0) return;\n    try {\n      cache.upsertFromScannerMeta(metas as any[]);\n    } catch (err) {\n      this.log.warn(\n        `stale-file reconcile failed: ${err instanceof Error ? err.message : String(err)}`,\n        { event: \"conversations.reconcile_failed\" },\n      );\n    }\n  }\n\n  // ─── teardown ─────────────────────────────────────────────────────\n\n  async close(): Promise<void> {\n    this.markStaleDebounced.cancel();\n    await this.drainRefreshPasses();\n    await Promise.all([...this.allScanners].map((s) => s.close()));\n    this.allScanners.clear();\n    this.scanner = null;\n  }\n}\n","import type {\n  CacheMetadataKey,\n  CacheMetadataRepository,\n} from \"../../db/repositories/cacheMetadata.repository\";\n\n/**\n * Functional accessors over the cache_metadata table. Repositories give us\n * the SQL surface; these helpers give us the verbs the services use.\n */\nexport function getCacheMetadata(\n  repo: CacheMetadataRepository,\n  key: CacheMetadataKey,\n): string | null {\n  return repo.getCacheMetadata(key);\n}\n\nexport function setCacheMetadata(\n  repo: CacheMetadataRepository,\n  key: CacheMetadataKey,\n  value: string,\n): void {\n  repo.setCacheMetadata(key, value);\n}\n","/**\n * @module constants\n * @summary Useful constants\n * @description\n * Collection of useful date constants.\n *\n * The constants could be imported from `date-fns/constants`:\n *\n * ```ts\n * import { maxTime, minTime } from \"./constants/date-fns/constants\";\n *\n * function isAllowedTime(time) {\n *   return time <= maxTime && time >= minTime;\n * }\n * ```\n */\n\n/**\n * @constant\n * @name daysInWeek\n * @summary Days in 1 week.\n */\nexport const daysInWeek = 7;\n\n/**\n * @constant\n * @name daysInYear\n * @summary Days in 1 year.\n *\n * @description\n * How many days in a year.\n *\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occurs every 4 years, except for years that are divisible by 100 and not divisible by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n */\nexport const daysInYear = 365.2425;\n\n/**\n * @constant\n * @name maxTime\n * @summary Maximum allowed time.\n *\n * @example\n * import { maxTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = 8640000000000001 <= maxTime;\n * //=> false\n *\n * new Date(8640000000000001);\n * //=> Invalid Date\n */\nexport const maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n\n/**\n * @constant\n * @name minTime\n * @summary Minimum allowed time.\n *\n * @example\n * import { minTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = -8640000000000001 >= minTime;\n * //=> false\n *\n * new Date(-8640000000000001)\n * //=> Invalid Date\n */\nexport const minTime = -maxTime;\n\n/**\n * @constant\n * @name millisecondsInWeek\n * @summary Milliseconds in 1 week.\n */\nexport const millisecondsInWeek = 604800000;\n\n/**\n * @constant\n * @name millisecondsInDay\n * @summary Milliseconds in 1 day.\n */\nexport const millisecondsInDay = 86400000;\n\n/**\n * @constant\n * @name millisecondsInMinute\n * @summary Milliseconds in 1 minute\n */\nexport const millisecondsInMinute = 60000;\n\n/**\n * @constant\n * @name millisecondsInHour\n * @summary Milliseconds in 1 hour\n */\nexport const millisecondsInHour = 3600000;\n\n/**\n * @constant\n * @name millisecondsInSecond\n * @summary Milliseconds in 1 second\n */\nexport const millisecondsInSecond = 1000;\n\n/**\n * @constant\n * @name minutesInYear\n * @summary Minutes in 1 year.\n */\nexport const minutesInYear = 525600;\n\n/**\n * @constant\n * @name minutesInMonth\n * @summary Minutes in 1 month.\n */\nexport const minutesInMonth = 43200;\n\n/**\n * @constant\n * @name minutesInDay\n * @summary Minutes in 1 day.\n */\nexport const minutesInDay = 1440;\n\n/**\n * @constant\n * @name minutesInHour\n * @summary Minutes in 1 hour.\n */\nexport const minutesInHour = 60;\n\n/**\n * @constant\n * @name monthsInQuarter\n * @summary Months in 1 quarter.\n */\nexport const monthsInQuarter = 3;\n\n/**\n * @constant\n * @name monthsInYear\n * @summary Months in 1 year.\n */\nexport const monthsInYear = 12;\n\n/**\n * @constant\n * @name quartersInYear\n * @summary Quarters in 1 year\n */\nexport const quartersInYear = 4;\n\n/**\n * @constant\n * @name secondsInHour\n * @summary Seconds in 1 hour.\n */\nexport const secondsInHour = 3600;\n\n/**\n * @constant\n * @name secondsInMinute\n * @summary Seconds in 1 minute.\n */\nexport const secondsInMinute = 60;\n\n/**\n * @constant\n * @name secondsInDay\n * @summary Seconds in 1 day.\n */\nexport const secondsInDay = secondsInHour * 24;\n\n/**\n * @constant\n * @name secondsInWeek\n * @summary Seconds in 1 week.\n */\nexport const secondsInWeek = secondsInDay * 7;\n\n/**\n * @constant\n * @name secondsInYear\n * @summary Seconds in 1 year.\n */\nexport const secondsInYear = secondsInDay * daysInYear;\n\n/**\n * @constant\n * @name secondsInMonth\n * @summary Seconds in 1 month\n */\nexport const secondsInMonth = secondsInYear / 12;\n\n/**\n * @constant\n * @name secondsInQuarter\n * @summary Seconds in 1 quarter.\n */\nexport const secondsInQuarter = secondsInMonth * 3;\n\n/**\n * @constant\n * @name constructFromSymbol\n * @summary Symbol enabling Date extensions to inherit properties from the reference date.\n *\n * The symbol is used to enable the `constructFrom` function to construct a date\n * using a reference date and a value. It allows to transfer extra properties\n * from the reference date to the new date. It's useful for extensions like\n * [`TZDate`](https://github.com/date-fns/tz) that accept a time zone as\n * a constructor argument.\n */\nexport const constructFromSymbol = Symbol.for(\"constructDateFrom\");\n","import { constructFromSymbol } from \"./constants.js\";\n\n/**\n * @name constructFrom\n * @category Generic Helpers\n * @summary Constructs a date using the reference date and the value\n *\n * @description\n * The function constructs a new date using the constructor from the reference\n * date and the given value. It helps to build generic functions that accept\n * date extensions.\n *\n * It defaults to `Date` if the passed reference date is a number or a string.\n *\n * Starting from v3.7.0, it allows to construct a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The reference date to take constructor from\n * @param value - The value to create the date\n *\n * @returns Date initialized using the given date and value\n *\n * @example\n * import { constructFrom } from \"./constructFrom/date-fns\";\n *\n * // A function that clones a date preserving the original type\n * function cloneDate<DateType extends Date>(date: DateType): DateType {\n *   return constructFrom(\n *     date, // Use constructor from the given date\n *     date.getTime() // Use the date value to create a new date\n *   );\n * }\n */\nexport function constructFrom(date, value) {\n  if (typeof date === \"function\") return date(value);\n\n  if (date && typeof date === \"object\" && constructFromSymbol in date)\n    return date[constructFromSymbol](value);\n\n  if (date instanceof Date) return new date.constructor(value);\n\n  return new Date(value);\n}\n\n// Fallback for modularized imports:\nexport default constructFrom;\n","import { constructFrom } from \"./constructFrom.js\";\n\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * Starting from v3.7.0, it clones a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param argument - The value to convert\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport function toDate(argument, context) {\n  // [TODO] Get rid of `toDate` or `constructFrom`?\n  return constructFrom(context || argument, argument);\n}\n\n// Fallback for modularized imports:\nexport default toDate;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * @name compareDesc\n * @category Common Helpers\n * @summary Compare the two dates reverse chronologically and return -1, 0 or 1.\n *\n * @description\n * Compare the two dates and return -1 if the first date is after the second,\n * 1 if the first date is before the second or 0 if dates are equal.\n *\n * @param dateLeft - The first date to compare\n * @param dateRight - The second date to compare\n *\n * @returns The result of the comparison\n *\n * @example\n * // Compare 11 February 1987 and 10 July 1989 reverse chronologically:\n * const result = compareDesc(new Date(1987, 1, 11), new Date(1989, 6, 10))\n * //=> 1\n *\n * @example\n * // Sort the array of dates in reverse chronological order:\n * const result = [\n *   new Date(1995, 6, 2),\n *   new Date(1987, 1, 11),\n *   new Date(1989, 6, 10)\n * ].sort(compareDesc)\n * //=> [\n * //   Sun Jul 02 1995 00:00:00,\n * //   Mon Jul 10 1989 00:00:00,\n * //   Wed Feb 11 1987 00:00:00\n * // ]\n */\nexport function compareDesc(dateLeft, dateRight) {\n  const diff = +toDate(dateLeft) - +toDate(dateRight);\n\n  if (diff > 0) return -1;\n  else if (diff < 0) return 1;\n\n  // Return 0 if diff is 0; return NaN if diff is NaN\n  return diff;\n}\n\n// Fallback for modularized imports:\nexport default compareDesc;\n","/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * @param value - The value to check\n *\n * @returns True if the given value is a date\n *\n * @example\n * // For a valid date:\n * const result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * const result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * const result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * const result = isDate({})\n * //=> false\n */\nexport function isDate(value) {\n  return (\n    value instanceof Date ||\n    (typeof value === \"object\" &&\n      Object.prototype.toString.call(value) === \"[object Date]\")\n  );\n}\n\n// Fallback for modularized imports:\nexport default isDate;\n","import { isDate } from \"./isDate.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate](https://date-fns.org/docs/toDate)\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @param date - The date to check\n *\n * @returns The date is valid\n *\n * @example\n * // For the valid date:\n * const result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertible into a date:\n * const result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * const result = isValid(new Date(''))\n * //=> false\n */\nexport function isValid(date) {\n  return !((!isDate(date) && typeof date !== \"number\") || isNaN(+toDate(date)));\n}\n\n// Fallback for modularized imports:\nexport default isValid;\n","import {\n  millisecondsInHour,\n  millisecondsInMinute,\n} from \"./constants.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link parseISO} function options.\n */\n\n/**\n * @name parseISO\n * @category Common Helpers\n * @summary Parse ISO string\n *\n * @description\n * Parse the given string in ISO 8601 format and return an instance of Date.\n *\n * Function accepts complete ISO 8601 formats as well as partial implementations.\n * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601\n *\n * If the argument isn't a string, the function cannot parse the string or\n * the values are invalid, it returns Invalid Date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param argument - The value to convert\n * @param options - An object with options\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Convert string '2014-02-11T11:30:30' to date:\n * const result = parseISO('2014-02-11T11:30:30')\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert string '+02014101' to date,\n * // if the additional number of digits in the extended year format is 1:\n * const result = parseISO('+02014101', { additionalDigits: 1 })\n * //=> Fri Apr 11 2014 00:00:00\n */\nexport function parseISO(argument, options) {\n  const invalidDate = () => constructFrom(options?.in, NaN);\n\n  const additionalDigits = options?.additionalDigits ?? 2;\n  const dateStrings = splitDateString(argument);\n\n  let date;\n  if (dateStrings.date) {\n    const parseYearResult = parseYear(dateStrings.date, additionalDigits);\n    date = parseDate(parseYearResult.restDateString, parseYearResult.year);\n  }\n\n  if (!date || isNaN(+date)) return invalidDate();\n\n  const timestamp = +date;\n  let time = 0;\n  let offset;\n\n  if (dateStrings.time) {\n    time = parseTime(dateStrings.time);\n    if (isNaN(time)) return invalidDate();\n  }\n\n  if (dateStrings.timezone) {\n    offset = parseTimezone(dateStrings.timezone);\n    if (isNaN(offset)) return invalidDate();\n  } else {\n    const tmpDate = new Date(timestamp + time);\n    const result = toDate(0, options?.in);\n    result.setFullYear(\n      tmpDate.getUTCFullYear(),\n      tmpDate.getUTCMonth(),\n      tmpDate.getUTCDate(),\n    );\n    result.setHours(\n      tmpDate.getUTCHours(),\n      tmpDate.getUTCMinutes(),\n      tmpDate.getUTCSeconds(),\n      tmpDate.getUTCMilliseconds(),\n    );\n    return result;\n  }\n\n  return toDate(timestamp + time + offset, options?.in);\n}\n\nconst patterns = {\n  dateTimeDelimiter: /[T ]/,\n  timeZoneDelimiter: /[Z ]/i,\n  timezone: /([Z+-].*)$/,\n};\n\nconst dateRegex =\n  /^-?(?:(\\d{3})|(\\d{2})(?:-?(\\d{2}))?|W(\\d{2})(?:-?(\\d{1}))?|)$/;\nconst timeRegex =\n  /^(\\d{2}(?:[.,]\\d*)?)(?::?(\\d{2}(?:[.,]\\d*)?))?(?::?(\\d{2}(?:[.,]\\d*)?))?$/;\nconst timezoneRegex = /^([+-])(\\d{2})(?::?(\\d{2}))?$/;\n\nfunction splitDateString(dateString) {\n  const dateStrings = {};\n  const array = dateString.split(patterns.dateTimeDelimiter);\n  let timeString;\n\n  // The regex match should only return at maximum two array elements.\n  // [date], [time], or [date, time].\n  if (array.length > 2) {\n    return dateStrings;\n  }\n\n  if (/:/.test(array[0])) {\n    timeString = array[0];\n  } else {\n    dateStrings.date = array[0];\n    timeString = array[1];\n    if (patterns.timeZoneDelimiter.test(dateStrings.date)) {\n      dateStrings.date = dateString.split(patterns.timeZoneDelimiter)[0];\n      timeString = dateString.substr(\n        dateStrings.date.length,\n        dateString.length,\n      );\n    }\n  }\n\n  if (timeString) {\n    const token = patterns.timezone.exec(timeString);\n    if (token) {\n      dateStrings.time = timeString.replace(token[1], \"\");\n      dateStrings.timezone = token[1];\n    } else {\n      dateStrings.time = timeString;\n    }\n  }\n\n  return dateStrings;\n}\n\nfunction parseYear(dateString, additionalDigits) {\n  const regex = new RegExp(\n    \"^(?:(\\\\d{4}|[+-]\\\\d{\" +\n      (4 + additionalDigits) +\n      \"})|(\\\\d{2}|[+-]\\\\d{\" +\n      (2 + additionalDigits) +\n      \"})$)\",\n  );\n\n  const captures = dateString.match(regex);\n  // Invalid ISO-formatted year\n  if (!captures) return { year: NaN, restDateString: \"\" };\n\n  const year = captures[1] ? parseInt(captures[1]) : null;\n  const century = captures[2] ? parseInt(captures[2]) : null;\n\n  // either year or century is null, not both\n  return {\n    year: century === null ? year : century * 100,\n    restDateString: dateString.slice((captures[1] || captures[2]).length),\n  };\n}\n\nfunction parseDate(dateString, year) {\n  // Invalid ISO-formatted year\n  if (year === null) return new Date(NaN);\n\n  const captures = dateString.match(dateRegex);\n  // Invalid ISO-formatted string\n  if (!captures) return new Date(NaN);\n\n  const isWeekDate = !!captures[4];\n  const dayOfYear = parseDateUnit(captures[1]);\n  const month = parseDateUnit(captures[2]) - 1;\n  const day = parseDateUnit(captures[3]);\n  const week = parseDateUnit(captures[4]);\n  const dayOfWeek = parseDateUnit(captures[5]) - 1;\n\n  if (isWeekDate) {\n    if (!validateWeekDate(year, week, dayOfWeek)) {\n      return new Date(NaN);\n    }\n    return dayOfISOWeekYear(year, week, dayOfWeek);\n  } else {\n    const date = new Date(0);\n    if (\n      !validateDate(year, month, day) ||\n      !validateDayOfYearDate(year, dayOfYear)\n    ) {\n      return new Date(NaN);\n    }\n    date.setUTCFullYear(year, month, Math.max(dayOfYear, day));\n    return date;\n  }\n}\n\nfunction parseDateUnit(value) {\n  return value ? parseInt(value) : 1;\n}\n\nfunction parseTime(timeString) {\n  const captures = timeString.match(timeRegex);\n  if (!captures) return NaN; // Invalid ISO-formatted time\n\n  const hours = parseTimeUnit(captures[1]);\n  const minutes = parseTimeUnit(captures[2]);\n  const seconds = parseTimeUnit(captures[3]);\n\n  if (!validateTime(hours, minutes, seconds)) {\n    return NaN;\n  }\n\n  return (\n    hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * 1000\n  );\n}\n\nfunction parseTimeUnit(value) {\n  return (value && parseFloat(value.replace(\",\", \".\"))) || 0;\n}\n\nfunction parseTimezone(timezoneString) {\n  if (timezoneString === \"Z\") return 0;\n\n  const captures = timezoneString.match(timezoneRegex);\n  if (!captures) return 0;\n\n  const sign = captures[1] === \"+\" ? -1 : 1;\n  const hours = parseInt(captures[2]);\n  const minutes = (captures[3] && parseInt(captures[3])) || 0;\n\n  if (!validateTimezone(hours, minutes)) {\n    return NaN;\n  }\n\n  return sign * (hours * millisecondsInHour + minutes * millisecondsInMinute);\n}\n\nfunction dayOfISOWeekYear(isoWeekYear, week, day) {\n  const date = new Date(0);\n  date.setUTCFullYear(isoWeekYear, 0, 4);\n  const fourthOfJanuaryDay = date.getUTCDay() || 7;\n  const diff = (week - 1) * 7 + day + 1 - fourthOfJanuaryDay;\n  date.setUTCDate(date.getUTCDate() + diff);\n  return date;\n}\n\n// Validation functions\n\n// February is null to handle the leap year (using ||)\nconst daysInMonths = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\nfunction isLeapYearIndex(year) {\n  return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0);\n}\n\nfunction validateDate(year, month, date) {\n  return (\n    month >= 0 &&\n    month <= 11 &&\n    date >= 1 &&\n    date <= (daysInMonths[month] || (isLeapYearIndex(year) ? 29 : 28))\n  );\n}\n\nfunction validateDayOfYearDate(year, dayOfYear) {\n  return dayOfYear >= 1 && dayOfYear <= (isLeapYearIndex(year) ? 366 : 365);\n}\n\nfunction validateWeekDate(_year, week, day) {\n  return week >= 1 && week <= 53 && day >= 0 && day <= 6;\n}\n\nfunction validateTime(hours, minutes, seconds) {\n  if (hours === 24) {\n    return minutes === 0 && seconds === 0;\n  }\n\n  return (\n    seconds >= 0 &&\n    seconds < 60 &&\n    minutes >= 0 &&\n    minutes < 60 &&\n    hours >= 0 &&\n    hours < 25\n  );\n}\n\nfunction validateTimezone(_hours, minutes) {\n  return minutes >= 0 && minutes <= 59;\n}\n\n// Fallback for modularized imports:\nexport default parseISO;\n","import { compareDesc, isValid, parseISO } from \"date-fns\";\n\n/**\n * Parse an ISO timestamp string. Returns null for null/undefined input or\n * an unparseable value rather than throwing — callers can fall back.\n */\nexport function parseIsoDateOrNull(value?: string | null): Date | null {\n  if (!value) return null;\n  const parsed = parseISO(value);\n  return isValid(parsed) ? parsed : null;\n}\n\n/**\n * Compare two ISO timestamp strings descending. Null/undefined values sort\n * last regardless of order. Used for ProjectChat list ordering and latest\n * conversation selection.\n */\nexport function compareIsoDesc(a?: string | null, b?: string | null): number {\n  const dateA = parseIsoDateOrNull(a);\n  const dateB = parseIsoDateOrNull(b);\n\n  if (!dateA && !dateB) return 0;\n  if (!dateA) return 1;\n  if (!dateB) return -1;\n\n  return compareDesc(dateA, dateB);\n}\n","import type { ProjectsRepository } from \"../../db/repositories/projects.repository\";\nimport { canonicalizeProjectPath } from \"../../utils/canonicalizeProjectPath\";\nimport { compareIsoDesc } from \"../../utils/dates\";\n\nexport interface ConversationLikeForProjects {\n  id: string;\n  projectPath: string | null | undefined;\n  createdAt?: string | null;\n  latestMessageAt?: string | null;\n}\n\n/**\n * Group cached conversations by their canonical project path, find the\n * latest conversation per project, then upsert one project row per unique\n * path. Returns a map from canonical path → projectId so callers can\n * backfill conversation/session project_id columns afterwards.\n */\nexport function ensureProjectsForConversations(\n  repo: ProjectsRepository,\n  conversations: ConversationLikeForProjects[],\n): Map<string, string> {\n  const conversationsByPath = new Map<string, ConversationLikeForProjects[]>();\n\n  for (const conversation of conversations) {\n    if (!conversation.projectPath) continue;\n    const canonical = canonicalizeProjectPath(conversation.projectPath);\n    if (!canonical) continue;\n    const existing = conversationsByPath.get(canonical) ?? [];\n    existing.push(conversation);\n    conversationsByPath.set(canonical, existing);\n  }\n\n  const pathToProjectId = new Map<string, string>();\n\n  for (const [path, projectConversations] of conversationsByPath) {\n    const latest = pickLatestConversation(projectConversations);\n\n    const project = repo.upsertProjectByPath(path, {\n      lastConversationId: latest?.id ?? null,\n      lastConversationCreatedAt: latest?.createdAt ?? null,\n      latestMessageAt: latest?.latestMessageAt ?? null,\n    });\n\n    pathToProjectId.set(path, project.id);\n  }\n\n  return pathToProjectId;\n}\n\nfunction pickLatestConversation(\n  conversations: ConversationLikeForProjects[],\n): ConversationLikeForProjects | undefined {\n  if (conversations.length === 0) return undefined;\n  return [...conversations].sort((a, b) => {\n    const cmp = compareIsoDesc(a.latestMessageAt ?? null, b.latestMessageAt ?? null);\n    if (cmp !== 0) return cmp;\n    return compareIsoDesc(a.createdAt ?? null, b.createdAt ?? null);\n  })[0];\n}\n","import type { ConversationCache } from \"../../conversation-cache\";\nimport type { CacheMetadataRepository } from \"../../db/repositories/cacheMetadata.repository\";\nimport type { ConversationsRepository } from \"../../db/repositories/conversations.repository\";\nimport type { ProjectsRepository } from \"../../db/repositories/projects.repository\";\nimport { canonicalizeProjectPath } from \"../../utils/canonicalizeProjectPath\";\nimport { setCacheMetadata } from \"../cache/cacheMetadata\";\nimport { ensureProjectsForConversations } from \"../projects/ensureProjectsForConversations\";\n\nexport interface RefreshConversationCacheDeps {\n  cache: ConversationCache;\n  projectsRepo: ProjectsRepository;\n  conversationsRepo: ConversationsRepository;\n  cacheMetadataRepo: CacheMetadataRepository;\n}\n\nexport interface RefreshConversationCacheResult {\n  projectsTouched: number;\n  conversationsBackfilled: number;\n  latestConversationId: string | null;\n}\n\n/**\n * After a scanner-driven cache rebuild has run, walk the cache to:\n *   1. Upsert one project row per unique canonical project_path.\n *   2. Backfill conversation_meta.project_id for any rows missing it.\n *   3. Update cache_metadata.last_conversation_id so subsequent freshness\n *      checks can short-circuit.\n *\n * The scanner itself runs in `server.ts` today; this function picks up\n * after it has populated `conversation_meta`.\n */\nexport function refreshConversationCache(\n  deps: RefreshConversationCacheDeps,\n): RefreshConversationCacheResult {\n  const { projectsRepo, conversationsRepo, cacheMetadataRepo } = deps;\n\n  const conversations = conversationsRepo.listConversationsForProjectBackfill();\n\n  const pathToProjectId = ensureProjectsForConversations(\n    projectsRepo,\n    conversations.map((c) => ({\n      id: c.id,\n      projectPath: c.projectPath,\n      latestMessageAt: c.lastActivity ?? null,\n      createdAt: c.lastActivity ?? null,\n    })),\n  );\n\n  let conversationsBackfilled = 0;\n  for (const conversation of conversations) {\n    if (!conversation.projectPath) continue;\n    if (conversation.projectId) continue;\n    const projectId = pathToProjectId.get(canonicalizeProjectPath(conversation.projectPath));\n    if (!projectId) continue;\n    conversationsRepo.updateConversationProjectId({\n      conversationId: conversation.id,\n      projectId,\n    });\n    conversationsBackfilled += 1;\n  }\n\n  const latest = conversationsRepo.getLatestConversation();\n  if (latest) {\n    setCacheMetadata(cacheMetadataRepo, \"last_conversation_id\", latest.id);\n    if (latest.lastActivity) {\n      setCacheMetadata(cacheMetadataRepo, \"last_conversation_created_at\", latest.lastActivity);\n    }\n  }\n  setCacheMetadata(cacheMetadataRepo, \"conversations_last_indexed_at\", new Date().toISOString());\n\n  return {\n    projectsTouched: pathToProjectId.size,\n    conversationsBackfilled,\n    latestConversationId: latest?.id ?? null,\n  };\n}\n","import { readdirSync, statSync } from \"fs\";\nimport { homedir } from \"os\";\nimport { join } from \"path\";\nimport type { CacheMetadataRepository } from \"../../db/repositories/cacheMetadata.repository\";\nimport type { ConversationsRepository } from \"../../db/repositories/conversations.repository\";\nimport { getCacheMetadata } from \"../cache/cacheMetadata\";\n\nconst DEFAULT_PROJECTS_DIR = join(homedir(), \".claude\", \"projects\");\n\nexport interface ShouldRefreshOptions {\n  /** Override the disk path checked for drift. Defaults to ~/.claude/projects. */\n  projectsDir?: string;\n  /** Additional project roots (e.g. per-profile `configDir/projects`). */\n  projectsDirs?: string[];\n}\n\n/**\n * Newest mtime across a projects root and its immediate child directories.\n *\n * POSIX directory mtime updates when direct entries are added/removed/renamed,\n * not when a file inside a child is appended. Checking one level of children\n * catches new JSONLs in an existing project without stating every file.\n */\nexport function maxProjectsTreeMtimeMs(projectsDir: string): number | null {\n  let maxMs: number;\n  try {\n    maxMs = statSync(projectsDir).mtimeMs;\n  } catch {\n    return null;\n  }\n\n  try {\n    for (const ent of readdirSync(projectsDir, { withFileTypes: true })) {\n      if (!ent.isDirectory()) continue;\n      try {\n        const childMs = statSync(join(projectsDir, ent.name)).mtimeMs;\n        if (childMs > maxMs) maxMs = childMs;\n      } catch {\n        // race: directory removed between readdir and stat\n      }\n    }\n  } catch {\n    // projectsDir unreadable after the root stat — keep root mtime\n  }\n\n  return maxMs;\n}\n\n/**\n * Decide whether the projects/conversations cache needs a refresh.\n *\n * Returns true when either:\n *   1. The cache has orphan rows — conversations with a project_path but no\n *      project_id. These need a backfill pass to become visible to\n *      /project-chats (which filters out null project_id).\n *   2. A watched projects tree on disk has changed since the last scanner pass —\n *      max(root mtime, child-dir mtimes) is newer than\n *      cache_metadata.conversations_last_indexed_at. This catches new JSONLs\n *      that the file watcher missed (including under existing project dirs).\n *\n * Appends to existing JSONLs still rely on the directory watcher flipping\n * scannerStale; this mtime gate does not see in-place file growth.\n */\nexport function shouldRefreshProjectsFromHdd(\n  conversationsRepo: ConversationsRepository,\n  cacheMetadataRepo: CacheMetadataRepository,\n  opts: ShouldRefreshOptions = {},\n): boolean {\n  if (conversationsRepo.hasOrphanRows()) return true;\n\n  const dirs = new Set<string>();\n  if (opts.projectsDirs) {\n    for (const d of opts.projectsDirs) dirs.add(d);\n  }\n  dirs.add(opts.projectsDir ?? DEFAULT_PROJECTS_DIR);\n\n  let newestMs: number | null = null;\n  for (const dir of dirs) {\n    const ms = maxProjectsTreeMtimeMs(dir);\n    if (ms === null) continue;\n    if (newestMs === null || ms > newestMs) newestMs = ms;\n  }\n  if (newestMs === null) return false;\n\n  const lastIndexedIso = getCacheMetadata(cacheMetadataRepo, \"conversations_last_indexed_at\");\n  if (!lastIndexedIso) return true;\n\n  const lastIndexedMs = Date.parse(lastIndexedIso);\n  if (Number.isNaN(lastIndexedMs)) return true;\n\n  return newestMs > lastIndexedMs;\n}\n","import { parseIsoDateOrNull } from \"./dates\";\n\n// The on-disk mtime can run slightly ahead of the last message's own timestamp\n// (filesystem flush latency, non-message trailer lines like pr-link/mode that\n// the scanner ignores for `timestamp` but still bump mtime). Require the file\n// to be at least this much newer than the snapshot before forcing a re-scan, so\n// a single read doesn't churn the whole scanner index on every detail fetch.\nconst STALENESS_TOLERANCE_MS = 1000;\n\n/**\n * Decide whether a scanned conversation snapshot is stale relative to the\n * JSONL on disk. The scanner memoizes both its metadata index and parsed\n * conversations for the server's lifetime, so a conversation that grows after\n * the initial scan keeps serving the startup snapshot from\n * `/api/conversations/{id}`. We compare the file's mtime against the\n * snapshot's last-activity timestamp to detect that drift.\n *\n * Returns true when the file is meaningfully newer than the snapshot (a\n * re-scan is warranted). Returns false when the snapshot is current, when the\n * snapshot timestamp is unparseable (nothing to compare against — leave it),\n * or when mtime is null (stat failed — don't churn the index on a transient\n * read error).\n */\nexport function isScannedSnapshotStale(\n  snapshotTimestamp: string | null | undefined,\n  fileMtimeMs: number | null,\n): boolean {\n  if (fileMtimeMs == null) return false;\n  const snapshotDate = parseIsoDateOrNull(snapshotTimestamp);\n  if (!snapshotDate) return false;\n  return fileMtimeMs - snapshotDate.getTime() > STALENESS_TOLERANCE_MS;\n}\n","import nacl from \"tweetnacl\";\nimport naclUtil from \"tweetnacl-util\";\n\nexport interface SealedPayload {\n  ciphertext: string;\n  nonce: string;\n  ephemeralPublicKey: string;\n}\n\n/**\n * Encrypts a plaintext to a recipient's X25519 public key using NaCl box with\n * an ephemeral sender keypair. The phone holds the recipient private key in\n * its own memory and decrypts with nacl.box.open(ciphertext, nonce, ephemeralPublicKey, recipientPrivateKey).\n *\n * The wire format is custom (not libsodium crypto_box_seal) but cryptographically equivalent.\n */\nexport function seal(plaintext: string, recipientPublicKeyBase64: string): SealedPayload {\n  const recipientPk = naclUtil.decodeBase64(recipientPublicKeyBase64);\n  if (recipientPk.length !== nacl.box.publicKeyLength) {\n    throw new Error(\n      `clientPublicKey must be ${nacl.box.publicKeyLength} bytes (got ${recipientPk.length})`,\n    );\n  }\n  const ephemeral = nacl.box.keyPair();\n  const nonce = nacl.randomBytes(nacl.box.nonceLength);\n  const message = naclUtil.decodeUTF8(plaintext);\n  const cipher = nacl.box(message, nonce, recipientPk, ephemeral.secretKey);\n  return {\n    ciphertext: naclUtil.encodeBase64(cipher),\n    nonce: naclUtil.encodeBase64(nonce),\n    ephemeralPublicKey: naclUtil.encodeBase64(ephemeral.publicKey),\n  };\n}\n","import type { EventEmitter } from \"events\";\nimport { statSync } from \"fs\";\nimport type { IncomingMessage, ServerResponse } from \"http\";\nimport type { WebSocket } from \"ws\";\nimport type { AgentClient } from \"./agent/agent-client\";\nimport type { AgentConfig } from \"./agent/agent-config\";\nimport type { ConversationWriter } from \"./agent/conversation-writer\";\nimport type { ConversationHandlers } from \"./api/handlers/conversations.handlers\";\nimport type { SessionHandlers } from \"./api/handlers/sessions.handlers\";\nimport type { ApiDeps } from \"./api/types/api-deps\";\nimport { ConversationCache } from \"./conversation-cache\";\nimport type { CacheMetadataRepository } from \"./db/repositories/cacheMetadata.repository\";\nimport type { ConversationsRepository } from \"./db/repositories/conversations.repository\";\nimport type { DevicesRepository } from \"./db/repositories/devices.repository\";\nimport type { ManagedSessionsRepository } from \"./db/repositories/managed-sessions.repository\";\nimport type { ProjectsRepository } from \"./db/repositories/projects.repository\";\nimport type { PushRepository } from \"./db/repositories/push.repository\";\nimport type { SessionsRepository } from \"./db/repositories/sessions.repository\";\nimport type { RuntimeStore } from \"./db/runtime-store\";\nimport type { ExternalTailManager } from \"./external-tails\";\nimport { handleListProjects } from \"./handlers/handleListProjects\";\nimport type { LiveSessionManager } from \"./live-session-manager\";\nimport { getLogger, type Logger } from \"./logger\";\nimport { PTY_COLS, PTY_ROWS, REPLAY_MAX_LINES } from \"./pty-shared\";\nimport type { ScannerManager } from \"./scanner-manager\";\nimport type { Prompt } from \"./schemas/prompt.schema\";\nimport type { CacheIntegrityMonitor } from \"./services/cache-integrity/cacheIntegrityMonitor\";\nimport type {\n  ConversationWatcher,\n  ConversationWatcherEvents,\n} from \"./services/conversations/conversationWatcher\";\nimport type { HostPressureMonitor } from \"./services/host-pressure/hostPressure\";\nimport type { PromptRegistry } from \"./services/prompts/promptRegistry\";\nimport type { LiveActivityNotifier } from \"./services/push/liveActivityNotifier\";\nimport type { WaitingInputNotifier } from \"./services/push/waitingInputNotifier\";\nimport { permissionGateKey } from \"./services/questions/detectPermissionGate\";\nimport { type Capability, hasCapability, type Principal } from \"./services/security/capabilities\";\nimport type { ReconcileVerdict } from \"./services/sessions/reconcileSessions\";\nimport type { SessionStore } from \"./session-store\";\nimport type {\n  AskQuestion,\n  PermissionOption,\n  PTYManagerOptions,\n  ServerWarmupState,\n  SessionResponse,\n} from \"./types\";\nimport type { WSHub } from \"./ws-hub\";\n\n/**\n * Whether a socket's principal may send a given frame.\n *\n * A null principal means authMiddleware never set one, which for `/ws` — a\n * route it classifies as `history:read` — happens only on a bypass path. Today\n * that is `--local-no-auth`, which grants unauthenticated full access to\n * loopback callers by design, so allowing it here keeps the socket telling the\n * same story as the HTTP routes rather than being stricter than them.\n *\n * Deliberately local rather than exported: it is a fail-OPEN helper, correct\n * only where the caller has already established that a null principal means a\n * deliberate bypass.\n */\nfunction wsAllows(principal: Principal | null, required: Capability): boolean {\n  return principal === null || hasCapability(principal, required);\n}\n\n/** The permission gate currently open for a session (scraped via OSC 777). */\nexport type PendingPermission = {\n  prompt?: string;\n  detail?: string;\n  options: PermissionOption[];\n  cursor?: number;\n  /** Server-owned instance id, minted by handlePermissionChange. */\n  gateId: string;\n  promptId?: string;\n  /**\n   * The pty-host's occurrence id for this gate, absent on the in-process PTY\n   * path. Instance identity is compared against THIS, never against promptId:\n   * the two were equal by construction until open() started minting a fresh id\n   * for a replayed occurrence held by a terminal record.\n   */\n  occurrenceId?: string;\n};\n\n/** The AskUserQuestion card currently broadcast for a session. */\nexport type PendingQuestion = {\n  toolUseId: string;\n  questions: AskQuestion[];\n  origin: \"pty\" | \"jsonl\";\n  promptId: string;\n};\n\nexport type ExpiredPendingPromptDeps = {\n  pendingPermission: Map<string, PendingPermission>;\n  pendingPermissionKey: Map<string, string>;\n  pendingQuestions: Map<string, PendingQuestion>;\n  pendingQuestionKey: Map<string, string>;\n  sessionSubscribers: Map<string, Set<WebSocket>>;\n  wsHub: Pick<WSHub, \"broadcastToClients\">;\n};\n\nexport function clearExpiredPendingPrompt(deps: ExpiredPendingPromptDeps, prompt: Prompt): void {\n  const permission = deps.pendingPermission.get(prompt.sessionId);\n  if (permission?.promptId === prompt.promptId) {\n    deps.pendingPermission.delete(prompt.sessionId);\n    deps.pendingPermissionKey.delete(prompt.sessionId);\n    deps.wsHub.broadcastToClients(deps.sessionSubscribers.get(prompt.sessionId) ?? [], {\n      type: \"permission_cancelled\",\n      sessionId: prompt.sessionId,\n    });\n  }\n\n  const question = deps.pendingQuestions.get(prompt.sessionId);\n  if (question?.promptId === prompt.promptId) {\n    deps.pendingQuestions.delete(prompt.sessionId);\n    deps.pendingQuestionKey.delete(prompt.sessionId);\n    deps.wsHub.broadcastToClients(deps.sessionSubscribers.get(prompt.sessionId) ?? [], {\n      type: \"question_cancelled\",\n      sessionId: prompt.sessionId,\n      toolUseId: question.toolUseId,\n    });\n  }\n}\n\n/**\n * Everything the ConversationWatcher callbacks read from the server. Thunks\n * rather than values for anything constructed after the watcher itself\n * (`externalTailManager`, and `fileWatcher` — which IS the watcher these\n * callbacks are handed to) or swapped on the instance by tests (`log`,\n * `broadcastConversationLines`); the same reason ScannerManagerDeps passes\n * `cache: () => ConversationCache | null`.\n *\n * The Maps are the server's own, held by reference: they stay StreamerServer\n * state and are read directly elsewhere in server.ts.\n */\nexport type ConversationWatcherWiringDeps = {\n  sessionFileMap: Map<string, string>;\n  pendingLineSeqs: Map<string, (number | null)[]>;\n  scannerManager: ScannerManager;\n  cache: () => ConversationCache | null;\n  log: () => Logger;\n  fileWatcher: () => ConversationWatcher;\n  externalTailManager: () => ExternalTailManager;\n  trackCacheWrite: (task: Promise<unknown>) => void;\n  processJsonlQuestions: (sessionId: string, lines: string[]) => void;\n  broadcastConversationLines: (\n    sessionId: string,\n    lines: string[],\n    seqs?: (number | null)[] | null,\n  ) => void;\n};\n\n/**\n * The JSONL tail/offset-index/directory callbacks StreamerServer hands to its\n * ConversationWatcher.\n *\n * Extracted from the constructor so watcher work stops editing the server file\n * (see docs/plans/2026-07-12-server-ts-split.md, PR 7). State stays on the\n * server: these callbacks only reach it through `deps`.\n */\nexport function createConversationWatcherEvents(\n  deps: ConversationWatcherWiringDeps,\n): ConversationWatcherEvents {\n  return {\n    onNewLineSpans: (filePath, spans, readFrom, endOffset) => {\n      // Offset index: extend the per-message byte-span index with this read's\n      // lines. Fires alongside onNewLines (which writes the tail); both\n      // consume the same read. Best-effort — a failure here must never break\n      // the tail write or WS broadcast.\n      const cache = deps.cache();\n      if (!cache) return;\n      // No stale seqs from a prior read may leak into this one's WS stamping.\n      deps.pendingLineSeqs.delete(filePath);\n      try {\n        const seqs = cache.extendMessageIndex(\n          filePath,\n          spans,\n          statSync(filePath),\n          readFrom,\n          endOffset,\n        );\n        if (seqs === null) {\n          // Non-contiguous read (watcher attached at EOF after downtime, or an\n          // append raced a backfill): drop the file's index and rebuild from\n          // scratch. Single-flighted, tracked so close() awaits it. No seqs\n          // are stamped for this read — the client refetches on reconcile.\n          cache.deleteFileIndex(filePath, ConversationCache.conversationIdForFile(filePath));\n          cache.clearIndexParseState(filePath);\n          deps.trackCacheWrite(\n            cache.backfillIndex(filePath).catch((err) => {\n              deps.log().warn(\"offset-index.backfill_failed\", {\n                event: \"offset_index.backfill_failed\",\n                filePath,\n                trigger: \"noncontiguous-append\",\n                err,\n              });\n            }),\n          );\n          return;\n        }\n        // Stash for the onNewLines handler (fires next for the same read) to\n        // stamp WS `seq`. spans and lines are the same set in the same order.\n        deps.pendingLineSeqs.set(filePath, seqs);\n      } catch (err) {\n        deps.log().warn(\"offset-index.extend_failed\", {\n          event: \"offset_index.extend_failed\",\n          filePath,\n          err,\n        });\n      }\n    },\n    onNewLines: (filePath, lines) => {\n      // One transactional cache write for the whole batch instead of per line.\n      deps.cache()?.updateFromLines(filePath, lines);\n      let managed = false;\n      for (const [sessionId, watchedPath] of deps.sessionFileMap) {\n        if (watchedPath === filePath) {\n          managed = true;\n          deps.processJsonlQuestions(sessionId, lines);\n          // Additive batched event (one socket write) for newer clients. When\n          // the offset index assigned seqs for this read, carry them parallel\n          // to lines so a client can map each event to its message_index.\n          // Codex rollout lines are normalized to Claude shape here — mobile\n          // parseLineToMessage only understands type:user|assistant.\n          const seqs = deps.pendingLineSeqs.get(filePath);\n          deps.broadcastConversationLines(sessionId, lines, seqs);\n          break;\n        }\n      }\n      // No PTY owns this file: it's an external tail (or nothing at all, in\n      // which case the call is a no-op). Transcript push only — never the\n      // managed-session events, and never a question card.\n      if (!managed) {\n        deps\n          .externalTailManager()\n          .broadcastExternalTailLines(filePath, lines, deps.pendingLineSeqs.get(filePath));\n      }\n      // Seqs are consumed for this read; drop them so a later read for a file\n      // with no watched session can't reuse a stale mapping.\n      deps.pendingLineSeqs.delete(filePath);\n    },\n    onConversationChanged: (filePath) => {\n      // Directory unlink is the survivor when the per-file watcher's unlink\n      // is dropped (delete inside a write-finish window, or a dead handle).\n      // Detect gone-on-disk here and take the same detach + invalidate path\n      // as onFileDeleted — otherwise an external tail stays attached until\n      // the 5 min idle sweep (#393).\n      try {\n        statSync(filePath);\n      } catch {\n        deps.externalTailManager().handleJsonlDeleted(filePath);\n        return;\n      }\n      // A new JSONL appeared (or changed) in a watched project directory.\n      // If we hold a per-file tail for it, re-drive the tail read from here\n      // too: per-file fs.watch handles can die silently (2026-07-01 incident\n      // — tails went permanently quiet while directory events kept flowing),\n      // and the directory watcher is the survivor that can heal them.\n      const tailed = deps.fileWatcher().poke(filePath);\n      // Nobody is tailing it yet — if an external agent is actively writing\n      // it, attach a tail so its transcript is pushed instead of silently\n      // waiting for the client to poll.\n      if (!tailed) deps.externalTailManager().maybeAttachExternalTail(filePath);\n      deps.externalTailManager().sweepIdleExternalTails();\n      // Upsert-or-leave: a change event NEVER deletes the cache row (skipIfTailed).\n      // This same append also drives the live-tail watcher's updateFromLines\n      // upsert; the two fire with no ordering guarantee, so deleting here would\n      // wipe a row the live tail just wrote (CRITICAL #2) — and a refresh-created\n      // untailed row would vanish on its next append. The debounced rescan below\n      // re-derives metadata, so leaving the row loses nothing.\n      deps.cache()?.invalidateByFilePath(filePath, { skipIfTailed: true });\n      // Debounce the scanner-staleness flip so a burst of directory events\n      // during active sessions collapses into one reconcile trigger after a\n      // quiet period. The debounced callback still checks scannerReady at\n      // fire time, preserving the anti-infinite-loop rule (never null\n      // scannerReady mid-scan). Record the path before debouncing so the\n      // reconcile can refresh exactly this file instead of the whole tree.\n      deps.scannerManager.staleFiles.add(filePath);\n      deps.scannerManager.markStaleDebounced();\n      deps.log().debug?.(`Scanner invalidated by directory event: ${filePath}`, {\n        filePath,\n        event: \"cache.directory_change\",\n      });\n    },\n    onTruncated: (filePath) => {\n      deps.cache()?.reconcileClassification(filePath);\n      // The file shrank below our offset — it is a different generation of\n      // content now, so every byte span we recorded for it is meaningless.\n      // Drop the index (and its parse state); the next read rebuilds from 0.\n      deps.cache()?.deleteFileIndex(filePath, ConversationCache.conversationIdForFile(filePath));\n      deps.cache()?.clearIndexParseState(filePath);\n      deps.log().warn(`JSONL truncated/replaced; offset index dropped: ${filePath}`, {\n        filePath,\n        event: \"tail.truncated\",\n      });\n    },\n    onFileDeleted: (filePath) => deps.externalTailManager().handleJsonlDeleted(filePath),\n    onError: (filePath, err) => {\n      // Was unwired, so every watcher error was dropped on the floor. The one\n      // that matters is ENOSPC from a directory watch: chokidar takes one\n      // OS-level watch handle PER FILE under a watched root (see\n      // watchDirectory's note), so on Linux the conversation corpus is spent\n      // directly against inotify's per-user max_user_watches — a ceiling as\n      // low as 8192 on some distros, shared with every other watcher the user\n      // is running. Past it the watch never attaches: tails go quiet and new\n      // conversations stop being discovered, with nothing in the log tying it\n      // to the fd budget. Name the cause here so it isn't re-derived.\n      const enospc = (err as NodeJS.ErrnoException).code === \"ENOSPC\";\n      deps\n        .log()\n        .error(\n          enospc\n            ? `Watcher hit the OS watch-handle limit on ${filePath} — raise fs.inotify.max_user_watches (Linux) or the process fd limit; conversation discovery and live tails are degraded until then`\n            : `Watcher error on ${filePath}: ${err.message}`,\n          { filePath, err, event: enospc ? \"watcher.limit_exhausted\" : \"watcher.error\" },\n        );\n    },\n  };\n}\n\n/**\n * Everything the LiveSessionManager callbacks read from the server. Same thunk\n * discipline: `sessionHandlers` is constructed after the runner, the repos and\n * notifiers are bound during listen(), and `log` is swapped by tests.\n */\nexport type LiveSessionWiringDeps = {\n  sessionGeometry: Map<string, { cols: number; rows: number }>;\n  sessionStore: SessionStore;\n  wsHub: WSHub;\n  fileWatcher: ConversationWatcher;\n  scannerManager: ScannerManager;\n  sessionStatusBus: EventEmitter;\n  sessionFileMap: Map<string, string>;\n  sessionSubscribers: Map<string, Set<WebSocket>>;\n  lastAgentChunkAt: Map<string, number>;\n  terminalSeq: Map<string, number>;\n  pendingQuestions: Map<string, PendingQuestion>;\n  pendingQuestionKey: Map<string, string>;\n  pendingPermission: Map<string, PendingPermission>;\n  pendingPermissionKey: Map<string, string>;\n  promptRegistry: PromptRegistry;\n  contendedSessions: Set<string>;\n  log: () => Logger;\n  sessionHandlers: () => SessionHandlers;\n  managedSessionsRepo: () => ManagedSessionsRepository | null;\n  liveActivityNotifier: () => LiveActivityNotifier | null;\n  waitingInputNotifier: () => WaitingInputNotifier | null;\n  ptyAttachedIds: () => Set<string>;\n  cancelPendingQuestion: (sessionId: string) => void;\n  rememberSelfPtyEnded: (conversationId: string) => void;\n  maybeFireHoldWhenIdle: (session: { id: string; status: string }) => void;\n};\n\n/**\n * The options StreamerServer hands to its LiveSessionManager: terminal/user\n * output fan-out, gate and question plumbing, and the status funnel that\n * mirrors every transition into SessionStore, the durable registry, the\n * scanner index and the push notifiers.\n *\n * Extracted from the constructor for the same reason as the watcher events\n * above; the server keeps every Map and Set these callbacks mutate.\n */\nexport function createLiveSessionOptions(deps: LiveSessionWiringDeps): PTYManagerOptions {\n  // The agent stopped mid-turn for the user. Fire-and-forget, like the status\n  // notifiers below; the notifier dedupes repaints of one prompt itself.\n  const notifyPrompt = (sessionId: string, kind: \"permission\" | \"question\", open: boolean) => {\n    const notifier = deps.waitingInputNotifier();\n    const session = notifier && deps.sessionStore.get(sessionId, deps.ptyAttachedIds());\n    if (session) void notifier.onPrompt(session, kind, open);\n  };\n  return {\n    logger: getLogger(\"pty\"),\n    onOutput: (sessionId, data) => {\n      // Agent-activity stamp for the idle reaper. Fires for every provider\n      // (both runners call onOutput), so the reaper needs no per-runner\n      // bookkeeping. Distinct from ManagedSession.lastActivityAt, which only\n      // moves on *user* input — an agent grinding through a long task is\n      // active even when nobody has touched it.\n      deps.lastAgentChunkAt.set(sessionId, Date.now());\n      const seq = (deps.terminalSeq.get(sessionId) ?? 0) + 1;\n      deps.terminalSeq.set(sessionId, seq);\n      deps.wsHub.broadcastToClients(deps.sessionSubscribers.get(sessionId) ?? [], {\n        type: \"terminal_output\",\n        sessionId,\n        data,\n        seq,\n      });\n    },\n    onPhaseChange: (sessionId, phase) => {\n      // Mirror into SessionStore so the REST field carries it too. The runner\n      // mutates its own InternalSession and toPublicSession does not forward\n      // subStatus, so without this `GET /api/sessions/:id` reports null for the\n      // whole turn and only a subscribed socket ever sees a phase.\n      deps.sessionStore.updateManaged(sessionId, { subStatus: phase });\n      // Scoped to this session's subscribers and sent as a minimal frame —\n      // NOT routed through onStatusChange's handler, which writes a DB row,\n      // refreshes the scanner index, broadcasts globally and pokes the APNs\n      // and push notifiers on every call. This can fire every scrape tick.\n      deps.wsHub.broadcastToClients(deps.sessionSubscribers.get(sessionId) ?? [], {\n        type: \"session_phase\",\n        sessionId,\n        phase,\n        updatedAt: new Date().toISOString(),\n      });\n    },\n    onPromptSuggestionChange: (sessionId, text) => {\n      // Same shape as onPhaseChange above: mirror into the store so REST carries\n      // it, then a minimal frame to this session's subscribers only.\n      deps.sessionStore.updateManaged(sessionId, { promptSuggestion: text });\n      deps.wsHub.broadcastToClients(deps.sessionSubscribers.get(sessionId) ?? [], {\n        type: \"prompt_suggestion\",\n        sessionId,\n        text,\n        updatedAt: new Date().toISOString(),\n      });\n    },\n    onUserMessage: (sessionId, text, ts) => {\n      deps.wsHub.broadcastToClients(deps.sessionSubscribers.get(sessionId) ?? [], {\n        type: \"user_message\",\n        sessionId,\n        text,\n        ts,\n      });\n    },\n    onPermissionChange: (sessionId, gate, occurrenceId) => {\n      deps.sessionHandlers().handlePermissionChange(sessionId, gate, occurrenceId);\n      notifyPrompt(sessionId, \"permission\", gate !== null);\n    },\n    onLiveQuestion: (sessionId, questions, occurrenceId) => {\n      deps.sessionHandlers().handleLiveQuestion(sessionId, questions, occurrenceId);\n      notifyPrompt(sessionId, \"question\", true);\n    },\n    onLiveQuestionGone: (sessionId) => {\n      notifyPrompt(sessionId, \"question\", false);\n      // The rendered AskUserQuestion menu closed on this streamer's own live\n      // PTY — authoritative regardless of whether pendingQuestions still holds\n      // the screen-synthesized id or the real toolUseId a JSONL flush swapped\n      // in later. Gating on the \"screen:\" prefix (as this used to) assumed the\n      // JSONL id meant handleSendAnswer had already cleared it, which only\n      // holds when the menu closed BECAUSE we answered it — not when it closed\n      // via Esc, an answer typed at the host keyboard, /clear, or the model\n      // giving up, all of which leave pendingQuestions holding the real id.\n      deps.pendingQuestionKey.delete(sessionId);\n      deps.cancelPendingQuestion(sessionId);\n    },\n    onReady: (session) => {\n      const resp = deps.sessionStore.get(session.id, deps.ptyAttachedIds());\n      if (resp) deps.wsHub.broadcast({ type: \"session_ready\", session: resp });\n    },\n    onStatusChange: (session) => {\n      // Captured before the update below overwrites it — the Live Activity\n      // notifier needs the pre-transition status to tell a genuine\n      // waiting_input↔running edge apart from a same-status re-emit.\n      const previousStatus = deps.sessionStore.getManaged(session.id)?.status;\n      deps.sessionStore.updateManaged(session.id, {\n        status: session.status,\n        completedAt: session.completedAt,\n        ...(session.lastActivityAt != null && { lastActivityAt: session.lastActivityAt }),\n        // The runner derives this from the first user message, on its own\n        // copy of the session. Without mirroring it here SessionStore never\n        // learns it, so a fresh live session is served with no sessionName\n        // even though the registry has one — the name only appeared after a\n        // restart rebuilt the row as a stub. Guarded so a runner that has not\n        // derived one yet cannot blank a name set by enrichResumedSessionAsync.\n        ...(session.sessionName != null && { sessionName: session.sessionName }),\n        // Without mirroring this, SessionStore's copy is frozen at whatever\n        // `addManaged` saw at spawn (\"spawn\") forever, because updateManaged\n        // is a partial merge — so managedToResponse can never tell a\n        // grace-timer/idle-reaper hold (statusSource \"shutdown\") apart from a\n        // genuine process exit (\"process-exit\"), and reports both as\n        // `lifecycle: \"completed\"`. See managedToResponse in session-store.ts.\n        ...(session.statusSource != null && { statusSource: session.statusSource }),\n        // Why a session died, not just that it did. Without this the store's\n        // copy has no failureReason, so managedToResponse falls through to\n        // `lifecycle: \"completed\"` (see session-store.ts) and a session that\n        // never started — missing CLI, missing project dir — is reported to\n        // every client as one that finished normally. Guarded like its\n        // neighbours: a later transition must not blank a recorded failure.\n        ...(session.failureReason != null && { failureReason: session.failureReason }),\n        ...(session.failureCode != null && { failureCode: session.failureCode }),\n      });\n      // Mirror the transition into the durable registry. Both runners funnel\n      // every status change through this callback, so this is the one place\n      // that needs to know. `exit` vs `transition` is the distinction the\n      // reconciler cares about: a row with a recorded exit needs no probe.\n      deps\n        .managedSessionsRepo()\n        ?.recordStatus(\n          session.id,\n          session.status,\n          session.completedAt != null ? \"exit\" : \"transition\",\n          {\n            completedAt: session.completedAt,\n            lastActivityAt: session.lastActivityAt ?? null,\n            promptCount: session.promptCount,\n            failureReason: session.failureReason ?? null,\n            // Derived from the first user message, so it does not exist yet at\n            // recordSpawn. The input that produces it also flips\n            // waiting_input→running, which lands here.\n            sessionName: session.sessionName ?? null,\n          },\n        );\n      // Refresh the scanner index at the end of each Claude turn so the\n      // conversation is searchable with up-to-date content immediately.\n      if (session.status === \"waiting_input\" || session.status === \"idle\") {\n        const filePath = deps.sessionFileMap.get(session.id);\n        if (filePath) {\n          deps.scannerManager\n            .get()\n            .then((scanner) => deps.scannerManager.refreshFileAfterWrite(scanner, filePath))\n            .then(({ outcome, meta }) => {\n              // \"ok\" is reserved for a parse this request started. A post-write\n              // refresh is never \"skipped\"; \"joined\" means it shared the pass\n              // another writer had already queued, and one line per request\n              // with an explicit outcome is what makes the two countable —\n              // `messageCount` alone never could.\n              deps.log().info(`scanner.refreshFile: ${outcome === \"refreshed\" ? \"ok\" : outcome}`, {\n                event: \"scanner.refresh\",\n                sessionId: session.id,\n                filePath,\n                trigger: session.status,\n                outcome,\n                messageCount: meta?.messageCount,\n              });\n            })\n            .catch((err) => {\n              deps.log().warn(\"scanner.refreshFile: failed\", {\n                event: \"scanner.refresh_failed\",\n                sessionId: session.id,\n                filePath,\n                trigger: session.status,\n                err,\n              });\n            });\n        }\n      }\n      // Stop watching JSONL when PTY exits (session goes idle)\n      if (session.status === \"idle\") {\n        const filePath = deps.sessionFileMap.get(session.id);\n        if (filePath) {\n          deps.fileWatcher.unwatch(filePath);\n          deps.sessionFileMap.delete(session.id);\n        }\n        // The next PTY for this conversation spawns at the defaults again, so a\n        // remembered size would be reported for a session that never had it.\n        deps.sessionGeometry.delete(session.id);\n        // Unconditional, like the permission clear below: a screen-detected\n        // question needs no JSONL mapping to exist, and one left pending here\n        // survives the exit as an unanswerable card whose stale\n        // pendingQuestionKey then suppresses the same menu on resume. Before\n        // invalidateSession, so the prompt ends cancelled/provider_closed\n        // rather than unavailable.\n        deps.cancelPendingQuestion(session.id);\n        // cancelPendingQuestion clears the key only while a question is still\n        // pending, but an ANSWERED menu keeps its key with no pending entry\n        // (#724) — and that key would suppress the same menu on resume.\n        deps.pendingQuestionKey.delete(session.id);\n        // A gone PTY can never have an open gate; clear silently.\n        deps.pendingPermission.delete(session.id);\n        deps.pendingPermissionKey.delete(session.id);\n        deps.promptRegistry.invalidateSession(session.id, \"session_ended\");\n        deps.contendedSessions.delete(session.id);\n        // Remember that WE owned this conversation up to now, so a resume that\n        // follows a hold isn't mistaken for a collision with someone else\n        // (see conversationBusy's selfPtyEndedAt).\n        deps.rememberSelfPtyEnded(session.id);\n      }\n      const resp = deps.sessionStore.get(session.id, deps.ptyAttachedIds());\n      if (resp) {\n        deps.wsHub.broadcast({ type: \"session_update\", session: resp });\n      }\n      // Push the transition to any iOS Live Activity watching this session.\n      // Fire-and-forget: the notifier logs its own failures, and a push must\n      // never delay or fail a session transition. No-op when APNs is off.\n      void deps.liveActivityNotifier()?.onStatusChange(session, previousStatus);\n      // And tell the phone its turn is up, if nobody is watching this session\n      // already. Same funnel, same fire-and-forget contract as above.\n      void deps.waitingInputNotifier()?.onStatusChange(session, previousStatus);\n      // The session object rides along: SessionStore's copy is a partial\n      // merge that does not carry failureReason/failureCode, so a startup\n      // handshake reading the store could not tell WHY a session went idle.\n      deps.sessionStatusBus.emit(`status:${session.id}`, session.status, session);\n      // Kill-on-idle latch: hold at the next waiting_input/idle if a client\n      // armed `hold_session` with when:\"waiting_input\". Both runners (and the\n      // pty-host remote runner) funnel status here, so this is the one fire\n      // site. Optional so unit tests that stub LiveSessionWiringDeps stay valid.\n      deps.maybeFireHoldWhenIdle?.(session);\n    },\n  };\n}\n\n/**\n * Everything the ApiDeps assembly reads from the server.\n *\n * Values where the original literal captured a value (`publicUrl`,\n * `browseRoot`, and the collaborators built earlier in the constructor);\n * thunks and arrows everywhere the original used them, which is load-bearing:\n * the stores open during listen(), `apiKey` changes under rotateApiKey(), and\n * tests swap `log`/`startGraceTimer`/`broadcastConversationLines` on the\n * server instance after construction.\n */\nexport type ApiDepsWiring = {\n  sessionGeometry: Map<string, { cols: number; rows: number }>;\n  apiKey: () => string;\n  localNoAuth: boolean;\n  logMenubarRequests: boolean;\n  publicUrl: string | null;\n  browseRoot: string | null;\n  browserCors: string | undefined;\n  ptyGracePeriodMs: number;\n  rotateApiKey: ApiDeps[\"rotateApiKey\"];\n  claudeFlagsConfig: ApiDeps[\"claudeFlagsConfig\"];\n  featureFlagsConfig: ApiDeps[\"featureFlagsConfig\"];\n  setClaudeFlagsConfig: ApiDeps[\"setClaudeFlagsConfig\"];\n  ptyManager: LiveSessionManager;\n  sessionStore: SessionStore;\n  wsHub: WSHub;\n  sessionHandlers: SessionHandlers;\n  conversationHandlers: ConversationHandlers;\n  cache: () => ConversationCache | null;\n  cacheMonitor: () => CacheIntegrityMonitor | null;\n  hostPressureMonitor: () => HostPressureMonitor | null;\n  pushRepo: () => PushRepository | null;\n  liveActivityPushEnabled: () => boolean;\n  expoPushEnabled: () => boolean;\n  expoPushSender: ApiDeps[\"expoPushSender\"];\n  devicesRepo: () => DevicesRepository | null;\n  projectsRepo: () => ProjectsRepository | null;\n  conversationsRepo: () => ConversationsRepository | null;\n  sessionsRepo: () => SessionsRepository | null;\n  cacheMetadataRepo: () => CacheMetadataRepository | null;\n  runtimeStore: () => RuntimeStore | null;\n  managedSessionsRepo: () => ManagedSessionsRepository | null;\n  sessionVerdicts: () => Map<string, ReconcileVerdict>;\n  log: () => Logger;\n  ptyAttachedIds: () => Set<string>;\n  withReconciledLifecycle: (sessions: readonly SessionResponse[]) => readonly SessionResponse[];\n  currentWarmupState: () => ServerWarmupState | null;\n  addSessionSubscriber: (sessionId: string, ws: WebSocket) => void;\n  removeSessionSubscriber: (sessionId: string, ws: WebSocket) => void;\n  startGraceTimer: (sessionId: string, delayMs: number) => void;\n  armHoldWhenIdle: (sessionId: string) => \"held\" | \"armed\" | \"no_session\";\n  handleSessionsCount: (res: ServerResponse) => void;\n  applyLiveSessionSetting: (\n    sessionId: string,\n    req: IncomingMessage,\n    res: ServerResponse,\n    setting: \"model\" | \"effort\",\n  ) => Promise<void>;\n  handlePairStart: (res: ServerResponse) => void;\n  handlePairExchange: (req: IncomingMessage, res: ServerResponse) => Promise<void>;\n  handleBrowse: (url: URL, res: ServerResponse) => Promise<void>;\n  handleMkdir: (req: IncomingMessage, res: ServerResponse) => Promise<void>;\n  clientIdToWs: Map<string, WebSocket>;\n  wsToClientId: Map<WebSocket, string>;\n  sessionSubscribers: Map<string, Set<WebSocket>>;\n  terminalSeq: Map<string, number>;\n  pendingPermission: Map<string, PendingPermission>;\n  pendingQuestions: Map<string, PendingQuestion>;\n  promptRegistry: PromptRegistry;\n  agentClient: AgentClient | null;\n  conversationWriter: ConversationWriter | null;\n  agentConfig: AgentConfig;\n};\n\n/**\n * Assemble the dependency bag the Hono app and the WS routes are built from,\n * including the three WebSocket lifecycle handlers.\n *\n * Extracted from the constructor for the same reason as the two factories\n * above; every key, its order and its target are unchanged.\n */\nexport function createApiDeps(deps: ApiDepsWiring): ApiDeps {\n  return {\n    // ponytail: getter so rotateApiKey() takes effect without restarting the server\n    get apiKey() {\n      return deps.apiKey();\n    },\n    localNoAuth: deps.localNoAuth,\n    logMenubarRequests: deps.logMenubarRequests,\n    rotateApiKey: () => deps.rotateApiKey(),\n    claudeFlagsConfig: () => deps.claudeFlagsConfig(),\n    featureFlagsConfig: () => deps.featureFlagsConfig(),\n    setClaudeFlagsConfig: (values, extraArgs) => deps.setClaudeFlagsConfig(values, extraArgs),\n    publicUrl: deps.publicUrl,\n    browseRoot: deps.browseRoot,\n    browserCors: deps.browserCors,\n    ptyManager: deps.ptyManager,\n    sessionStore: deps.sessionStore,\n    wsHub: deps.wsHub,\n    cache: () => deps.cache(),\n    isExcludedSubagent: (id) => deps.conversationHandlers.isExcludedSubagent(id),\n    cacheMonitor: () => deps.cacheMonitor(),\n    hostPressureMonitor: () => deps.hostPressureMonitor(),\n    pushRepo: () => deps.pushRepo(),\n    liveActivityPushEnabled: () => deps.liveActivityPushEnabled(),\n    expoPushEnabled: () => deps.expoPushEnabled(),\n    expoPushSender: () => deps.expoPushSender(),\n\n    devicesRepo: () => deps.devicesRepo(),\n    projectsRepo: () => deps.projectsRepo(),\n    conversationsRepo: () => deps.conversationsRepo(),\n    sessionsRepo: () => deps.sessionsRepo(),\n    cacheMetadataRepo: () => deps.cacheMetadataRepo(),\n    runtimeStore: () => deps.runtimeStore(),\n    managedSessionsRepo: () => deps.managedSessionsRepo(),\n    sessionVerdicts: () => deps.sessionVerdicts(),\n    ptyAttachedIds: () => deps.ptyAttachedIds(),\n    handleListSessions: (url, res) => deps.sessionHandlers.handleListSessions(url, res),\n    handleSessionsCount: (res) => deps.handleSessionsCount(res),\n    handleGetRecentSessions: (url, res) =>\n      deps.conversationHandlers.handleGetRecentSessions(url, res),\n    handleGetSessionNames: (res) => deps.sessionHandlers.handleGetSessionNames(res),\n    handleGetSession: (id, res) => deps.sessionHandlers.handleGetSession(id, res),\n    handleGetOutput: (id, res) => deps.sessionHandlers.handleGetOutput(id, res),\n    handleSendInput: (id, req, res) => deps.sessionHandlers.handleSendInput(id, req, res),\n    handleRawKey: (id, req, res) => deps.sessionHandlers.handleRawKey(id, req, res),\n    handleSendAnswer: (id, req, res) => deps.sessionHandlers.handleSendAnswer(id, req, res),\n    handlePromptAnswer: (id, req, res) => deps.sessionHandlers.handlePromptAnswer(id, req, res),\n    handlePermissionAnswer: (id, req, res) =>\n      deps.sessionHandlers.handlePermissionAnswer(id, req, res),\n    handleCancel: (id, res) => deps.sessionHandlers.handleCancel(id, res),\n    handleStopSession: (id, res, opts) => deps.sessionHandlers.handleStopSession(id, res, opts),\n    handleKillSession: (id, res, opts) => deps.sessionHandlers.handleKillSession(id, res, opts),\n    handleSetSessionName: (id, req, res) => deps.sessionHandlers.handleSetSessionName(id, req, res),\n    handleSetSessionModel: (id, req, res) => deps.applyLiveSessionSetting(id, req, res, \"model\"),\n    handleSetSessionEffort: (id, req, res) => deps.applyLiveSessionSetting(id, req, res, \"effort\"),\n    handleUploadFile: (id, req, res) => deps.sessionHandlers.handleUploadFile(id, req, res),\n    handleAdopt: (id, res) => deps.sessionHandlers.handleAdopt(id, res),\n    handleFork: (id, req, res) => deps.sessionHandlers.handleFork(id, req, res),\n    handleResume: (req, res) => deps.sessionHandlers.handleResume(req, res),\n    handleStartSession: (req, res) => deps.sessionHandlers.handleStartSession(req, res),\n    handleListConversations: (url, res) =>\n      deps.conversationHandlers.handleListConversations(url, res),\n    handleConversationsCount: (url, res) =>\n      deps.conversationHandlers.handleConversationsCount(url, res),\n    handleGetConversation: (id, url, res, ifNoneMatch) =>\n      deps.conversationHandlers.handleGetConversation(id, url, res, ifNoneMatch),\n    handleSearch: (url, res) => deps.conversationHandlers.handleSearch(url, res),\n    handleSearchTarget: (id, req, res) =>\n      deps.conversationHandlers.handleSearchTarget(id, req, res),\n    handleListProjects: (url, res) => handleListProjects(url, res),\n    handleGetPopularProjects: (url, res) =>\n      deps.conversationHandlers.handleGetPopularProjects(url, res),\n    handleGetProjectSummaries: (url, res) =>\n      deps.conversationHandlers.handleGetProjectSummaries(url, res),\n    handlePairStart: (res) => deps.handlePairStart(res),\n    handlePairExchange: (req, res) => deps.handlePairExchange(req, res),\n    handleBrowse: (url, res) => deps.handleBrowse(url, res),\n    handleMkdir: (req, res) => deps.handleMkdir(req, res),\n    handleWsOpen: (ws, context) => {\n      deps.wsHub.addClient(ws, context);\n      const sessions = deps.withReconciledLifecycle(deps.sessionStore.list(deps.ptyAttachedIds()));\n      deps.wsHub.unicast(ws, { type: \"session_list\", sessions });\n      if (!deps.currentWarmupState()) {\n        deps.wsHub.unicast(ws, { type: \"cache_ready\" });\n      }\n      // Re-surface a pending cache-integrity alert to every connecting client\n      // (covers the startup warm-up window and every reconnect).\n      const alertMsg = deps.cacheMonitor()?.wsMessage();\n      if (alertMsg) deps.wsHub.unicast(ws, alertMsg);\n      const pressureMsg = deps.hostPressureMonitor()?.wsMessage();\n      if (pressureMsg) deps.wsHub.unicast(ws, pressureMsg);\n    },\n    handleWsMessage: async (ws, raw, principal) => {\n      // A refused frame is dropped and logged rather than answered: the\n      // server→client union has no error type (types.ts), and adding one is a\n      // contract change older clients would ignore anyway. Dropping matches how\n      // this handler already treats malformed JSON; the log is what makes the\n      // refusal diagnosable.\n      const deny = (type: string, required: Capability): void => {\n        deps.log().warn(`[ws.capability_denied] ${type} requires ${required}`, {\n          event: \"ws.capability_denied\",\n          type,\n          required,\n          ...(principal?.deviceId ? { deviceId: principal.deviceId } : {}),\n        });\n      };\n      // **The parse catch below is narrowed to PARSING, and nothing else.**\n      //\n      // This used to be one `try { …the whole handler… } catch {}`, which\n      // swallowed every failure in the body as if it were malformed JSON. With\n      // sealing inside its reach a refused frame would have become a silently\n      // dropped one — no close, no code, no log — the opposite of what §9 froze\n      // four distinct codes to achieve.\n      //\n      // `receive` unseals for a sealed socket and passes a legacy client's text\n      // through unchanged, and it never throws: it closes the socket with the\n      // §9 code that says why and answers null. So it sits OUTSIDE both catches\n      // — anything that did escape it would be a fault in this server, and\n      // filing that under \"malformed JSON\" is the very shape being removed.\n      const text = deps.wsHub.receive(ws, raw);\n      if (text === null) return;\n\n      let msg: {\n        type?: string;\n        clientId?: string;\n        sessionId?: string;\n        when?: string;\n        cols?: number;\n        rows?: number;\n      };\n      try {\n        msg = JSON.parse(text);\n      } catch {\n        // malformed JSON, ignore. THIS catch covers the parse and nothing else.\n        return;\n      }\n\n      try {\n        if (msg.type === \"register\" && typeof msg.clientId === \"string\") {\n          const oldClientId = deps.wsToClientId.get(ws);\n          if (oldClientId) deps.clientIdToWs.delete(oldClientId);\n          deps.clientIdToWs.set(msg.clientId, ws);\n          deps.wsToClientId.set(ws, msg.clientId);\n        }\n        // Cache-backed and synchronous on purpose. `handleWsMessage` is async,\n        // so its first `await` defers everything after it by a microtask — and\n        // subscribe_session emits its snapshot BEFORE any await (the ordering\n        // ws-hub-wire-identity, ws-replay-depth, permission-gate-identity and\n        // prompt-contract-scoping all pin). The handler's own\n        // isExcludedSubagent may classify off disk, which belongs on the HTTP\n        // detail path, not on every WS frame.\n        if (typeof msg.sessionId === \"string\") {\n          // A live session carries its own flag in memory, so it is refused\n          // even with no cache; the stored classification is cache-derived and\n          // degrades with it. Cacheless also loses the flag's value, which\n          // falls back to the registry default (off).\n          const subagentCache = deps.cache?.();\n          const managed = deps.sessionStore?.getManaged?.(msg.sessionId);\n          const includeSubagents = subagentCache?.includeSubagentSessions ?? false;\n          if (\n            (managed?.isSubagent === true && !includeSubagents) ||\n            subagentCache?.isExcludedSubagent(managed?.boundConversationId ?? msg.sessionId)\n          )\n            return;\n        }\n        if (msg.type === \"subscribe_session\" && typeof msg.sessionId === \"string\") {\n          // Reading a session's stream is the same authority as reading its\n          // history over HTTP. Checked per frame rather than inherited from the\n          // upgrade, so this is the seam any future per-project scoping hangs\n          // off — it does not add scoping today, and every preset holds\n          // history:read, so no client's behaviour changes.\n          if (!wsAllows(principal, \"history:read\")) {\n            deny(msg.type, \"history:read\");\n            return;\n          }\n          deps.addSessionSubscriber(msg.sessionId, ws);\n          if (deps.promptRegistry) {\n            deps.wsHub.unicast(ws, deps.promptRegistry.snapshot(msg.sessionId));\n          }\n          if (deps.ptyManager.hasSession(msg.sessionId)) {\n            // Replay everything the session's render terminal still holds; it\n            // caps itself (REPLAY_MAX_LINES) and the client keeps its own,\n            // larger, retention cap. The old fixed 200 was under a fifth of\n            // that, so most of a live session's scrollback was unreachable on\n            // the client however far back it could scroll.\n            const lines = await deps.ptyManager.getOutputLines(msg.sessionId, REPLAY_MAX_LINES);\n            const userMessages = deps.ptyManager.getInputHistory(msg.sessionId);\n            // Carried on the replay rather than a separate frame: a client\n            // subscribing to an already-resized session would otherwise decode\n            // the replayed screen at the default size before any later resize\n            // told it better.\n            const geometry = deps.sessionGeometry.get(msg.sessionId) ?? {\n              cols: PTY_COLS,\n              rows: PTY_ROWS,\n            };\n            deps.wsHub.unicast(ws, {\n              type: \"terminal_replay\",\n              sessionId: msg.sessionId,\n              lines,\n              userMessages,\n              seq: deps.terminalSeq.get(msg.sessionId),\n              cols: geometry.cols,\n              rows: geometry.rows,\n            });\n          }\n          // A gate/question can open before the client finishes subscribing\n          // (Codex's startup gates fire within ~500ms of spawn) — broadcast()\n          // only reaches already-subscribed sockets, so a card that opened in\n          // that window is otherwise lost forever. Replay pending state the\n          // same way terminal_replay does above.\n          const pendingGate = deps.pendingPermission.get(msg.sessionId);\n          if (pendingGate) {\n            deps.log().info(`[ws.replay_permission] ${msg.sessionId.slice(0, 8)}`, {\n              event: \"ws.replay_permission\",\n              sessionId: msg.sessionId,\n            });\n            deps.wsHub.unicast(ws, {\n              type: \"permission\",\n              sessionId: msg.sessionId,\n              ...(pendingGate.prompt ? { prompt: pendingGate.prompt } : {}),\n              ...(pendingGate.detail ? { detail: pendingGate.detail } : {}),\n              options: pendingGate.options,\n              ...(pendingGate.cursor !== undefined ? { cursor: pendingGate.cursor } : {}),\n              contentKey: permissionGateKey(pendingGate),\n              gateId: pendingGate.gateId,\n            });\n          }\n          const pendingQuestion = deps.pendingQuestions.get(msg.sessionId);\n          if (pendingQuestion) {\n            deps.log().info(`[ws.replay_question] ${msg.sessionId.slice(0, 8)}`, {\n              event: \"ws.replay_question\",\n              sessionId: msg.sessionId,\n            });\n            deps.wsHub.unicast(ws, {\n              type: \"question\",\n              sessionId: msg.sessionId,\n              toolUseId: pendingQuestion.toolUseId,\n              questions: pendingQuestion.questions,\n            });\n          }\n        }\n        if (msg.type === \"unsubscribe_session\" && typeof msg.sessionId === \"string\") {\n          if (!wsAllows(principal, \"history:read\")) {\n            deny(msg.type, \"history:read\");\n            return;\n          }\n          deps.removeSessionSubscriber(msg.sessionId, ws);\n        }\n        if (\n          msg.type === \"resize_session\" &&\n          typeof msg.sessionId === \"string\" &&\n          typeof msg.cols === \"number\" &&\n          typeof msg.rows === \"number\"\n        ) {\n          // Control, not reading, for the same reason hold_session is: this\n          // reshapes the terminal every other subscriber is watching, so a\n          // read-only device must not be able to send it.\n          if (!wsAllows(principal, \"session:control\")) {\n            deny(msg.type, \"session:control\");\n            return;\n          }\n          // Silent on an unknown session and on nonsense dimensions — the\n          // runner guards both. A client dragging a window must not have to\n          // care whether the session is still alive.\n          if (!deps.ptyManager.hasSession(msg.sessionId)) return;\n          deps.ptyManager.resize(msg.sessionId, msg.cols, msg.rows);\n          deps.sessionGeometry.set(msg.sessionId, { cols: msg.cols, rows: msg.rows });\n          // Every other subscriber is decoding this session's stream against a\n          // geometry that just changed. A client that assumes the spawn size —\n          // as every shipped mobile build does — renders absolute cursor moves\n          // against the wrong viewport until it is told otherwise.\n          deps.wsHub.broadcast({\n            type: \"terminal_resize\",\n            sessionId: msg.sessionId,\n            cols: msg.cols,\n            rows: msg.rows,\n          });\n        }\n        if (msg.type === \"hold_session\" && typeof msg.sessionId === \"string\") {\n          // Holding a session SIGINTs the agent and disposes its screen, which\n          // is control, not reading — a read-only device could previously stop\n          // any session by id with a single frame, because the only check this\n          // path ever had was the upgrade's `history:read`.\n          if (!wsAllows(principal, \"session:control\")) {\n            deny(msg.type, \"session:control\");\n            deps.wsHub.unicast(ws, {\n              type: \"hold_session_result\",\n              sessionId: msg.sessionId,\n              ok: false,\n              reason: \"permission_denied\",\n            });\n            return;\n          }\n          // Additive `when` on the existing frame. Omitted / \"grace\" is today's\n          // backgrounding path (ptyGracePeriodMs). \"waiting_input\" latches a\n          // hold at the end of the current turn. Anything else is ignored —\n          // do not fall through to grace, including for read-only (already\n          // returned above).\n          const when = msg.when;\n          if (when === undefined || when === \"grace\") {\n            deps.startGraceTimer(msg.sessionId, deps.ptyGracePeriodMs);\n            deps.wsHub.unicast(ws, {\n              type: \"hold_session_result\",\n              sessionId: msg.sessionId,\n              ok: true,\n              applied: \"grace\",\n            });\n            return;\n          }\n          if (when === \"waiting_input\") {\n            const applied = deps.armHoldWhenIdle(msg.sessionId);\n            deps.wsHub.unicast(ws, {\n              type: \"hold_session_result\",\n              sessionId: msg.sessionId,\n              ok: applied !== \"no_session\",\n              ...(applied === \"no_session\" ? { reason: \"no_session\" } : { applied }),\n            });\n            return;\n          }\n          deps.log().warn(`[pty.hold_when_unknown] hold_session when=${String(when)}`, {\n            event: \"pty.hold_when_unknown\",\n            sessionId: msg.sessionId,\n            when,\n          });\n          deps.wsHub.unicast(ws, {\n            type: \"hold_session_result\",\n            sessionId: msg.sessionId,\n            ok: false,\n            reason: \"unknown_when\",\n          });\n        }\n      } catch (err) {\n        // NOT a parse failure — the frame was well-formed and the handler threw.\n        // Logged rather than swallowed: this handler is `async`, so an escaping\n        // rejection would be an unhandled one, and a silently dropped frame here\n        // is a client waiting forever for a reply that was never attempted.\n        deps.log().error(\"[ws.handler_failed] a well-formed frame threw\", {\n          event: \"ws.handler_failed\",\n          type: msg.type,\n          err,\n        });\n      }\n    },\n    handleWsClose: (ws) => {\n      const clientId = deps.wsToClientId.get(ws);\n      if (clientId) {\n        deps.clientIdToWs.delete(clientId);\n        deps.wsToClientId.delete(ws);\n      }\n      for (const subscribers of deps.sessionSubscribers.values()) {\n        subscribers.delete(ws);\n        // Deliberately does NOT arm a kill timer. A socket closing is not a\n        // request to stop the agent: phones sleep, signal drops, Wi-Fi hands\n        // off to cellular. Killing the PTY because nobody is watching means a\n        // long agent task cannot outlive a backgrounded app — the failure this\n        // runtime exists to prevent (see\n        // docs/architecture/2026-07-24-durable-session-runtime.md).\n        //\n        // Unbounded PTY growth is bounded by the idle reaper instead, which\n        // measures agent inactivity rather than subscriber absence. An\n        // explicit hold_session from the client still terminates immediately\n        // (see the hold_session handler above) — that one IS a user intent.\n      }\n    },\n    agentClient: deps.agentClient,\n    conversationWriter: deps.conversationWriter,\n    agentConfig: deps.agentConfig,\n  };\n}\n","import { closeSync, openSync, readdirSync, readSync, statSync } from \"fs\";\nimport type { ServerResponse } from \"http\";\nimport { homedir } from \"os\";\nimport { join } from \"path\";\n\n// How much of a conversation JSONL to read looking for `cwd`. The field is on\n// the first line in practice; a few KB of slack covers a long opening message.\nconst HEAD_BYTES = 64 * 1024;\n// Conversations whose head we'll read before giving up on a directory. A JSONL\n// truncated before its first `cwd` is rare; scanning all of them is not worth\n// the file handles.\nconst MAX_FILES_PROBED = 3;\n\n/**\n * The authoritative project path, read from the `cwd` a conversation in this\n * directory recorded.\n *\n * Claude encodes a project path into a directory name by replacing every '/',\n * '.' and '_' with '-', which is not invertible: `-Users-me-tb-mobile` is\n * equally `/Users/me/tb/mobile` and `/Users/me/tb-mobile`. Any path with a\n * hyphen inside a segment therefore decodes to something that exists nowhere\n * and can never be joined against a conversation's `project_path`.\n */\nfunction readRecordedCwd(dir: string): string | null {\n  let files: string[];\n  try {\n    files = readdirSync(dir).filter((f) => f.endsWith(\".jsonl\"));\n  } catch {\n    return null;\n  }\n\n  for (const file of files.slice(0, MAX_FILES_PROBED)) {\n    let fd: number | undefined;\n    try {\n      fd = openSync(join(dir, file), \"r\");\n      const buf = Buffer.alloc(HEAD_BYTES);\n      const bytes = readSync(fd, buf, 0, HEAD_BYTES, 0);\n      for (const line of buf.subarray(0, bytes).toString(\"utf8\").split(\"\\n\")) {\n        if (!line.includes('\"cwd\"')) continue;\n        try {\n          const cwd = (JSON.parse(line) as { cwd?: unknown }).cwd;\n          if (typeof cwd === \"string\" && cwd.length > 0) return cwd;\n        } catch {\n          // Partial trailing line, or a line that isn't JSON — keep looking.\n        }\n      }\n    } catch {\n      // Unreadable file — try the next one.\n    } finally {\n      if (fd !== undefined) closeSync(fd);\n    }\n  }\n  return null;\n}\n\nfunction decodeProjectPath(dirName: string): string {\n  // Lossy last resort, used only when no conversation in the directory records\n  // a cwd (an empty or freshly-created project dir).\n  return dirName.replace(/-/g, \"/\");\n}\n\nexport function handleListProjects(url: URL, res: ServerResponse): void {\n  const limit = Math.max(1, parseInt(url.searchParams.get(\"limit\") ?? \"50\", 10) || 50);\n  const offset = Math.max(0, parseInt(url.searchParams.get(\"offset\") ?? \"0\", 10) || 0);\n\n  const projectsDir = join(homedir(), \".claude\", \"projects\");\n\n  let entries: Array<{ dirName: string; mtime: number }>;\n  try {\n    entries = readdirSync(projectsDir)\n      .map((dirName) => {\n        const fullPath = join(projectsDir, dirName);\n        let mtime = 0;\n        try {\n          mtime = statSync(fullPath).mtimeMs;\n        } catch {\n          // ignore stat errors — directory may have been removed\n        }\n        return { dirName: String(dirName), mtime };\n      })\n      .sort((a, b) => b.mtime - a.mtime);\n  } catch {\n    res.writeHead(200, { \"Content-Type\": \"application/json\" });\n    res.end(JSON.stringify({ projects: [], total: 0 }));\n    return;\n  }\n\n  const total = entries.length;\n  // Resolve paths for the requested page only: reading a cwd costs a file\n  // open, and there are hundreds of project directories.\n  const page = entries.slice(offset, offset + limit).map(({ dirName }) => {\n    const path = readRecordedCwd(join(projectsDir, dirName)) ?? decodeProjectPath(String(dirName));\n    const name = path.split(/[\\\\/]/).filter(Boolean).pop() ?? dirName;\n    return { name, path, dirName };\n  });\n\n  res.writeHead(200, { \"Content-Type\": \"application/json\" });\n  res.end(JSON.stringify({ projects: page, total }));\n}\n","// CacheIntegrityMonitor — detects cache/disk drift (missing JSONLs), freezes\n// automatic pruning while a decision is pending, backs up the DB before any\n// destructive resolution, and applies exactly the action a human chose, once,\n// idempotently. See docs/superpowers/specs/2026-07-18-cache-integrity-alert-design.md.\n\nimport { createHash } from \"crypto\";\nimport { existsSync } from \"fs\";\nimport type { ConversationCache, ScannerMeta } from \"../../conversation-cache\";\nimport type { Logger } from \"../../logger\";\nimport type { CacheAlertResolveAction, WSMessage } from \"../../types\";\nimport type { WSHub } from \"../../ws-hub\";\nimport {\n  type AlertState,\n  loadAlertState,\n  type MissingEntry,\n  type PendingAlert,\n  saveAlertState,\n} from \"./alertStore\";\nimport { backupCacheDb } from \"./backup\";\n\nexport type ResolveAction = CacheAlertResolveAction;\n\n/** The `cache_alert` WS variant, narrowed from the WSMessage union. */\nexport type CacheAlertWsMessage = Extract<WSMessage, { type: \"cache_alert\" }>;\n\nexport type ResolveResult =\n  | { ok: true; action: ResolveAction; pruned?: number; backupPath?: string }\n  | { alreadyResolved: true }\n  | { conflict: true; currentFingerprint: string };\n\nconst MAX_MISSING_PERSISTED = 1000;\nconst SAMPLE_SIZE = 20;\nconst STORM_WINDOW_MS = 30_000;\nconst STORM_THRESHOLD = 10;\n\nfunction envInt(name: string, fallback: number): number {\n  const parsed = Number.parseInt(process.env[name] ?? \"\", 10);\n  return Number.isFinite(parsed) ? parsed : fallback;\n}\n\n/** sha256 of the sorted missing-id list — stable identity for a missing-set. */\nfunction fingerprintOf(ids: string[]): string {\n  const sorted = [...ids].sort();\n  return `sha256:${createHash(\"sha256\").update(sorted.join(\"\\n\")).digest(\"hex\")}`;\n}\n\nexport class CacheIntegrityMonitor {\n  private _pending: PendingAlert | null;\n  private ignoredIds: Set<string>;\n  private deferredUnlinks: string[] = [];\n  private unlinkTimes: number[] = [];\n\n  constructor(\n    private readonly cache: ConversationCache,\n    private readonly wsHub: WSHub,\n    private readonly log: Logger,\n    private readonly cacheDir: string,\n    // Injected so reset_rescan can rebuild from disk truth without the monitor\n    // depending on the whole server. Returns the metas a fresh scan surfaced.\n    private readonly rescan?: () => Promise<ScannerMeta[]>,\n    private readonly runDuringReset?: <T>(operation: () => Promise<T>) => Promise<T>,\n  ) {\n    const state = loadAlertState();\n    this._pending = state.pending ?? null;\n    this.ignoredIds = new Set(state.ignoredIds ?? []);\n  }\n\n  get pending(): PendingAlert | null {\n    return this._pending;\n  }\n\n  private persist(): void {\n    const state: AlertState = {};\n    if (this._pending) {\n      state.pending = {\n        ...this._pending,\n        missing: this._pending.missing.slice(0, MAX_MISSING_PERSISTED),\n      };\n    }\n    if (this.ignoredIds.size > 0) state.ignoredIds = [...this.ignoredIds];\n    saveAlertState(state);\n  }\n\n  private classifySeverity(missingCount: number, totalRows: number): \"high\" | \"low\" {\n    const minMissing = envInt(\"THREADBASE_CACHE_ALERT_MIN_MISSING\", 20);\n    const minRatio = Number.parseFloat(process.env.THREADBASE_CACHE_ALERT_MIN_RATIO ?? \"0.20\");\n    const ratio = totalRows > 0 ? missingCount / totalRows : 0;\n    const ratioThreshold = Number.isFinite(minRatio) ? minRatio : 0.2;\n    return missingCount >= minMissing && ratio >= ratioThreshold ? \"high\" : \"low\";\n  }\n\n  private sampleOf(missing: MissingEntry[]): { id: string; title?: string }[] {\n    return missing.slice(0, SAMPLE_SIZE).map((m) => ({\n      id: m.id,\n      ...(m.title != null ? { title: m.title } : {}),\n    }));\n  }\n\n  private buildWsMessage(pending: PendingAlert): CacheAlertWsMessage {\n    return {\n      type: \"cache_alert\",\n      fingerprint: pending.fingerprint,\n      severity: pending.severity,\n      missingCount: pending.missingCount,\n      totalRows: pending.totalRows,\n      detectedAt: pending.detectedAt,\n      sample: this.sampleOf(pending.missing),\n    };\n  }\n\n  wsMessage(): CacheAlertWsMessage | null {\n    return this._pending ? this.buildWsMessage(this._pending) : null;\n  }\n\n  healthzField():\n    | { severity: \"high\" | \"low\"; missingCount: number; fingerprint: string; detectedAt: string }\n    | undefined {\n    if (!this._pending) return undefined;\n    return {\n      severity: this._pending.severity,\n      missingCount: this._pending.missingCount,\n      fingerprint: this._pending.fingerprint,\n      detectedAt: this._pending.detectedAt,\n    };\n  }\n\n  /**\n   * Scan the cache for rows whose file is gone, excluding ids the user chose to\n   * ignore. If none remain, clear any stale pending alert and return (the caller\n   * decides whether to run pruneGhostFiles). Otherwise classify severity, persist\n   * the pending record, back up on high severity, and broadcast the alert.\n   */\n  async runDetection(detectedAt: string = new Date().toISOString()): Promise<void> {\n    const all = this.cache.listMissingFiles(existsSync);\n    const missing = all.filter((m) => !this.ignoredIds.has(m.id));\n\n    if (missing.length === 0) {\n      if (this._pending) {\n        this._pending = null;\n        this.persist();\n      }\n      return;\n    }\n\n    const totalRows = this.cache.countAllRows();\n    const fingerprint = fingerprintOf(missing.map((m) => m.id));\n    const severity = this.classifySeverity(missing.length, totalRows);\n\n    const pending: PendingAlert = {\n      fingerprint,\n      severity,\n      detectedAt,\n      missingCount: missing.length,\n      totalRows,\n      missing,\n    };\n\n    if (severity === \"high\") {\n      try {\n        pending.backupPath = await backupCacheDb(this.cache.getDatabase(), this.cacheDir);\n      } catch (err) {\n        this.log.warn(\"cache-integrity backup failed\", {\n          event: \"cache_integrity.backup_failed\",\n          error: err instanceof Error ? err.message : String(err),\n        });\n      }\n    }\n\n    this._pending = pending;\n    this.persist();\n    this.log.warn(\"cache integrity drift detected\", {\n      event: \"cache_integrity.detected\",\n      severity,\n      missingCount: missing.length,\n      totalRows,\n      fingerprint,\n    });\n    this.wsHub.broadcast(this.buildWsMessage(pending));\n  }\n\n  /** Queue an unlink while an alert is pending — the row is not invalidated. */\n  deferUnlink(filePath: string): void {\n    this.deferredUnlinks.push(filePath);\n  }\n\n  /**\n   * Record a live unlink while NO alert is pending. Crossing the storm threshold\n   * (>= 10 unlinks within 30s) re-triggers detection.\n   */\n  recordUnlink(filePath: string): void {\n    const now = Date.now();\n    this.unlinkTimes.push(now);\n    this.unlinkTimes = this.unlinkTimes.filter((t) => now - t < STORM_WINDOW_MS);\n    if (this.unlinkTimes.length >= STORM_THRESHOLD) {\n      this.unlinkTimes = [];\n      void this.runDetection().catch((err) => {\n        this.log.error(\"cache-integrity storm detection failed\", {\n          event: \"cache_integrity.storm_detection_failed\",\n          error: err instanceof Error ? err.message : String(err),\n          filePath,\n        });\n      });\n    }\n  }\n\n  private async ensureBackup(pending: PendingAlert): Promise<string | undefined> {\n    if (pending.backupPath) return pending.backupPath;\n    try {\n      pending.backupPath = await backupCacheDb(this.cache.getDatabase(), this.cacheDir);\n    } catch (err) {\n      this.log.warn(\"cache-integrity backup failed\", {\n        event: \"cache_integrity.backup_failed\",\n        error: err instanceof Error ? err.message : String(err),\n      });\n    }\n    return pending.backupPath;\n  }\n\n  private clearPending(): void {\n    this._pending = null;\n    this.deferredUnlinks = [];\n    this.persist();\n  }\n\n  private applyDeferredUnlinks(): void {\n    for (const fp of this.deferredUnlinks) this.cache.invalidateByFilePath(fp);\n    this.deferredUnlinks = [];\n  }\n\n  private broadcastResolved(fingerprint: string, action: ResolveAction): void {\n    this.wsHub.broadcast({ type: \"cache_alert_resolved\", fingerprint, action });\n  }\n\n  /**\n   * Apply the human's chosen resolution. Idempotent per fingerprint: no pending\n   * alert → alreadyResolved; a different fingerprint → conflict. See the spec's\n   * four-action semantics.\n   */\n  async resolve(\n    fingerprint: string,\n    action: ResolveAction,\n    ids?: string[],\n  ): Promise<ResolveResult> {\n    const pending = this._pending;\n    if (!pending) return { alreadyResolved: true };\n    if (pending.fingerprint !== fingerprint) {\n      return { conflict: true, currentFingerprint: pending.fingerprint };\n    }\n    // Claim the alert synchronously — before the first `await` below (backup is\n    // async). A concurrent same-fingerprint resolve then sees no pending alert\n    // and no-ops with `alreadyResolved`, upholding the spec's \"first resolver\n    // wins, second harmlessly no-ops\" invariant across the await points.\n    this._pending = null;\n\n    switch (action) {\n      case \"prune_all\": {\n        await this.ensureBackup(pending);\n        const backupPath = pending.backupPath;\n        // Re-verify each id against disk — a file may have reappeared.\n        const stillMissing = pending.missing\n          .filter((m) => !existsSync(m.filePath))\n          .map((m) => m.id);\n        const pruned = this.cache.dropRowsById(stillMissing);\n        this.applyDeferredUnlinks();\n        this.clearPending();\n        this.broadcastResolved(fingerprint, action);\n        return { ok: true, action, pruned, backupPath };\n      }\n\n      case \"prune_selected\": {\n        const requested = new Set(ids ?? []);\n        const pendingIds = new Set(pending.missing.map((m) => m.id));\n        // Intersect: only drop ids that are actually in the pending set.\n        const toDrop = [...requested].filter((id) => pendingIds.has(id));\n        await this.ensureBackup(pending);\n        const backupPath = pending.backupPath;\n        const pruned = this.cache.dropRowsById(toDrop);\n        // Drain only the deferred unlinks for the pruned subset.\n        const prunedPaths = new Set(\n          pending.missing.filter((m) => toDrop.includes(m.id)).map((m) => m.filePath),\n        );\n        this.deferredUnlinks = this.deferredUnlinks.filter((fp) => {\n          if (prunedPaths.has(fp)) {\n            this.cache.invalidateByFilePath(fp);\n            return false;\n          }\n          return true;\n        });\n        // Re-run detection on the remainder; a still-missing set raises a new\n        // alert. (_pending was already cleared at the top of resolve.)\n        this.persist();\n        await this.runDetection();\n        this.broadcastResolved(fingerprint, action);\n        return { ok: true, action, pruned, backupPath };\n      }\n\n      case \"ignore\": {\n        // Persist the individual ids (not the fingerprint) so one more deletion\n        // doesn't resurface these — see spec rationale.\n        for (const m of pending.missing) this.ignoredIds.add(m.id);\n        // Discard the deferred queue: the user chose to keep these rows, so\n        // queued deletions for other paths must not be applied as a side effect.\n        this.deferredUnlinks = [];\n        this.clearPending();\n        this.broadcastResolved(fingerprint, action);\n        return { ok: true, action };\n      }\n\n      case \"reset_rescan\": {\n        const backupPath = await this.ensureBackup(pending);\n        const reset = async () => {\n          this.cache.clearAll();\n          if (this.rescan) {\n            const metas = await this.rescan();\n            this.cache.upsertFromScannerMeta(metas);\n          }\n        };\n        const resetPromise = this.runDuringReset ? this.runDuringReset(reset) : reset();\n        void resetPromise.catch((err) => {\n          this.log.error(\"cache-integrity reset rescan failed\", {\n            event: \"cache_integrity.reset_rescan_failed\",\n            error: err instanceof Error ? err.message : String(err),\n          });\n        });\n        this.clearPending();\n        this.broadcastResolved(fingerprint, action);\n        return { ok: true, action, backupPath };\n      }\n    }\n  }\n}\n","// Persisted cache-integrity alert state. Mirrors codexGateAnswers.ts: one small\n// JSON file at ~/.threadbase/cache-alert.json (respecting THREADBASE_CONFIG_DIR),\n// read/written so a pending alert survives a restart and re-surfaces on every\n// client connect, and so an \"ignore\" decision is durable across restarts.\n\nimport { mkdirSync, readFileSync, writeFileSync } from \"fs\";\nimport { homedir } from \"os\";\nimport { dirname, join } from \"path\";\n\n/** One missing conversation the alert covers. */\nexport interface MissingEntry {\n  id: string;\n  filePath: string;\n  title: string | null;\n  tailed: boolean;\n}\n\nexport interface PendingAlert {\n  fingerprint: string;\n  severity: \"high\" | \"low\";\n  detectedAt: string;\n  missingCount: number;\n  totalRows: number;\n  backupPath?: string;\n  /** Capped at 1000 entries in the persisted file. */\n  missing: MissingEntry[];\n}\n\nexport interface AlertState {\n  pending?: PendingAlert;\n  ignoredIds?: string[];\n}\n\nfunction alertStatePath(): string {\n  const dir = process.env.THREADBASE_CONFIG_DIR ?? join(homedir(), \".threadbase\");\n  return join(dir, \"cache-alert.json\");\n}\n\nexport function loadAlertState(): AlertState {\n  try {\n    const parsed = JSON.parse(readFileSync(alertStatePath(), \"utf-8\"));\n    return parsed && typeof parsed === \"object\" ? (parsed as AlertState) : {};\n  } catch {\n    return {};\n  }\n}\n\nexport function saveAlertState(state: AlertState): void {\n  const path = alertStatePath();\n  mkdirSync(dirname(path), { recursive: true });\n  writeFileSync(path, `${JSON.stringify(state, null, 2)}\\n`);\n}\n","// WAL-safe backup of the SQLite conversation cache, taken before any\n// destructive cache-integrity resolution. Uses better-sqlite3's native async\n// db.backup() (not a raw cp) — the cache runs in WAL mode, so copying cache.db\n// alone would miss uncheckpointed data in cache.db-wal.\n\nimport type Database from \"better-sqlite3\";\nimport { existsSync, mkdirSync, readdirSync, statSync, unlinkSync } from \"fs\";\nimport { join } from \"path\";\n\nconst DEFAULT_RETAIN = 3;\n\nfunction retainCount(): number {\n  const parsed = Number.parseInt(process.env.THREADBASE_CACHE_BACKUP_RETAIN ?? \"\", 10);\n  return Number.isFinite(parsed) && parsed >= 0 ? parsed : DEFAULT_RETAIN;\n}\n\n/** `YYYYMMDD-HHMMSS` in local time, matching a hand-taken backup's name. */\nfunction timestamp(d: Date): string {\n  const p = (n: number) => String(n).padStart(2, \"0\");\n  return (\n    `${d.getFullYear()}${p(d.getMonth() + 1)}${p(d.getDate())}` +\n    `-${p(d.getHours())}${p(d.getMinutes())}${p(d.getSeconds())}`\n  );\n}\n\n/**\n * Back up the cache DB to `<cacheDir>/backups/cache-<timestamp>.db`, then prune\n * all but the newest THREADBASE_CACHE_BACKUP_RETAIN backups. Returns the path\n * of the backup just created.\n */\nexport async function backupCacheDb(db: Database.Database, cacheDir: string): Promise<string> {\n  const backupsDir = join(cacheDir, \"backups\");\n  mkdirSync(backupsDir, { recursive: true });\n  const destPath = join(backupsDir, `cache-${timestamp(new Date())}.db`);\n  await db.backup(destPath);\n\n  const retain = retainCount();\n  const backups = readdirSync(backupsDir)\n    .filter((f) => f.startsWith(\"cache-\") && f.endsWith(\".db\"))\n    .map((f) => {\n      const full = join(backupsDir, f);\n      return { full, mtime: statSync(full).mtimeMs };\n    })\n    .sort((a, b) => b.mtime - a.mtime); // newest first\n\n  for (const stale of backups.slice(retain)) {\n    if (existsSync(stale.full)) unlinkSync(stale.full);\n  }\n\n  return destPath;\n}\n","import chokidar, { type FSWatcher } from \"chokidar\";\nimport { statSync } from \"fs\";\nimport { open, stat } from \"fs/promises\";\nimport { canonicalizeFilePath } from \"../../utils/canonicalizeFilePath\";\nimport { type LineSpan, splitCompleteLines } from \"../../utils/fileIdentity\";\n\nexport interface ConversationWatcherEvents {\n  /** Fires once per new newline-terminated line appended to a watched file. */\n  onNewLine?: (filePath: string, line: string) => void;\n  /**\n   * Fires once per chokidar read with ALL new lines from that read, batched.\n   * When set, it REPLACES the per-line onNewLine dispatch for that file —\n   * callers pick one. Lets a burst of appended lines collapse into a single\n   * downstream cache write + WebSocket broadcast.\n   */\n  onNewLines?: (filePath: string, lines: string[]) => void;\n  /**\n   * Like onNewLines but also carries each line's absolute byte span in the\n   * file (for the offset index). Fires ALONGSIDE onNewLines/onNewLine (it does\n   * not replace them) so the cache tail write and the index extend can both\n   * consume the same read. `readFrom` is the absolute byte offset the read\n   * started at; `spans` are complete lines only (a torn trailing line is held\n   * for the next read).\n   */\n  onNewLineSpans?: (\n    filePath: string,\n    spans: LineSpan[],\n    readFrom: number,\n    endOffset: number,\n  ) => void;\n  /** Fires when chokidar reports an add/change/unlink at the directory level. */\n  onConversationChanged?: (filePath: string) => void | Promise<void>;\n  /** Fires when a tailed file is deleted (per-file watcher unlink event). */\n  onFileDeleted?: (filePath: string) => void;\n  /**\n   * Fires when a tailed file shrank below our read offset (in-place truncation\n   * or replacement by a shorter file). The tail has already reset to byte 0;\n   * the consumer must discard any byte-offset index built for the old content,\n   * which no longer describes this file.\n   */\n  onTruncated?: (filePath: string) => void;\n  /** Reported errors per file. */\n  onError?: (filePath: string, error: Error) => void;\n}\n\ninterface WatchedFile {\n  watcher: FSWatcher;\n  offset: number;\n  // The original (un-canonicalized) path passed to watch(). The `files` map is\n  // keyed by the canonical path (so mixed-separator poke/unwatch match), but FS\n  // reads and emitted callback paths use this original so the offset index's\n  // stat identity is unchanged (P1.a).\n  path: string;\n  // Async-read re-entrancy guard: `reading` is set while a readNewLines is in\n  // flight; `pending` records that a change arrived during that read so the\n  // in-flight loop re-runs once more after it finishes.\n  reading: boolean;\n  pending: boolean;\n}\n\n/**\n * Chokidar-backed replacement for src/file-watcher.ts.\n *\n *   - watch(filePath)      → tail a single JSONL file, emitting onNewLine\n *                            for each appended line.\n *   - watchDirectory(dir)  → mark cache dirty on add/change/unlink events\n *                            for any file inside the directory.\n *\n * Per the refactor plan, file watching is an OPTIMIZATION; correctness\n * still relies on refresh=1 / the latest HDD conversation id check.\n */\nexport class ConversationWatcher {\n  private files = new Map<string, WatchedFile>();\n  private directories = new Map<string, FSWatcher>();\n  private onNewLine: ConversationWatcherEvents[\"onNewLine\"];\n  private onNewLines: ConversationWatcherEvents[\"onNewLines\"];\n  private onNewLineSpans: ConversationWatcherEvents[\"onNewLineSpans\"];\n  private onConversationChanged: ConversationWatcherEvents[\"onConversationChanged\"];\n  private onFileDeleted: ConversationWatcherEvents[\"onFileDeleted\"];\n  private onTruncated: ConversationWatcherEvents[\"onTruncated\"];\n  private onError: ConversationWatcherEvents[\"onError\"];\n\n  constructor(events: ConversationWatcherEvents = {}) {\n    this.onNewLine = events.onNewLine;\n    this.onNewLines = events.onNewLines;\n    this.onNewLineSpans = events.onNewLineSpans;\n    this.onConversationChanged = events.onConversationChanged;\n    this.onFileDeleted = events.onFileDeleted;\n    this.onTruncated = events.onTruncated;\n    this.onError = events.onError;\n  }\n\n  watch(filePath: string): void {\n    // Key the map by the canonical (forward-slash) path so a native-separator\n    // path from a directory event (chokidar on Windows) resolves to the entry a\n    // scanner-posix path registered — otherwise poke()/unwatch() miss and the\n    // tail self-heal is dead (P1.a). FS reads and emitted callback paths keep the\n    // original path (`entry.path`); its stat identity is what the offset index\n    // relies on, so it must not be normalized.\n    const key = canonicalizeFilePath(filePath);\n    if (this.files.has(key)) return;\n\n    let offset: number;\n    try {\n      offset = statSync(filePath).size;\n    } catch {\n      offset = 0;\n    }\n\n    const watcher = chokidar.watch(filePath, {\n      ignoreInitial: true,\n      // No awaitWriteFinish: readNewLines already coalesces bursts via the\n      // reading/pending flags, and awaitWriteFinish on Linux has been observed\n      // to drop the unlink when a just-created file is deleted inside the\n      // stability window — leaving an external tail attached until the 5 min\n      // idle sweep (#393).\n    });\n\n    watcher.on(\"change\", () => {\n      void this.readNewLines(key);\n    });\n    watcher.on(\"add\", () => {\n      void this.readNewLines(key);\n    });\n    watcher.on(\"unlink\", () => this.onFileDeleted?.(filePath));\n    watcher.on(\"error\", (err) => {\n      const error = err instanceof Error ? err : new Error(String(err));\n      this.onError?.(filePath, error);\n    });\n\n    this.files.set(key, { watcher, offset, reading: false, pending: false, path: filePath });\n  }\n\n  unwatch(filePath: string): void {\n    const key = canonicalizeFilePath(filePath);\n    const entry = this.files.get(key);\n    if (!entry) return;\n    void entry.watcher.close();\n    this.files.delete(key);\n  }\n\n  /**\n   * Re-drive the tail read for a file that's already being tailed. A per-file\n   * chokidar handle can die silently (fs.watch stops firing after inode churn)\n   * while the coarser directory watcher keeps reporting changes — calling this\n   * from the directory-event path makes the tail self-healing. Reads are\n   * offset-based and coalesced, so a redundant poke after a normal change\n   * event is a cheap stat + no-op. Returns false for untailed paths.\n   */\n  poke(filePath: string): boolean {\n    // Canonicalize so a directory event's native-separator path matches the entry\n    // watch() keyed by the (possibly posix) scanner path (P1.a).\n    const key = canonicalizeFilePath(filePath);\n    if (!this.files.has(key)) return false;\n    void this.readNewLines(key);\n    return true;\n  }\n\n  /**\n   * Watch a directory of conversation JSONL files. Fires\n   * onConversationChanged for any add/change/unlink event so the caller\n   * can mark the cache dirty without scanning everything immediately.\n   *\n   * **This costs one OS watch handle per file under `directory`, not one per\n   * directory.** chokidar recurses the tree and registers a separate fs.watch\n   * per entry, because a directory watch alone does not report writes to files\n   * inside it — and per-file `change` events are exactly what the caller needs\n   * (they drive poke()'s tail self-heal and the external-tail attach). So the\n   * handle count tracks the size of the conversation corpus on disk, not the\n   * number of live sessions, and it does not shrink until transcripts are\n   * deleted. `ignoreInitial` suppresses the startup *events*, not the walk.\n   *\n   * Measured 2026-08-09 on the live macOS instance: 2131 open .jsonl fds\n   * against 2133 files under the watched roots — 1:1, ~88% of all fds on the\n   * process, at 2.0% of that box's 122 880 per-process ceiling. Comfortable\n   * there. **Linux is the tight one**: these are inotify watches billed to the\n   * per-user `max_user_watches`, which can be 8192 and is shared with every\n   * other watcher the user runs. Exhaustion surfaces as ENOSPC on the `error`\n   * event — which is why server.ts wires onError rather than leaving it unset.\n   *\n   * Before trading handles for a bound here, note the regression it invites: a\n   * conversation excluded from the walk (by age or by an LRU cap) is one whose\n   * external appends produce no event at all, and that failure is silent.\n   */\n  watchDirectory(directory: string): void {\n    if (this.directories.has(directory)) return;\n    const watcher = chokidar.watch(directory, {\n      ignoreInitial: true,\n      awaitWriteFinish: { stabilityThreshold: 500, pollInterval: 100 },\n    });\n    const fire = (filePath: string) => {\n      void Promise.resolve(this.onConversationChanged?.(filePath)).catch(() => {\n        // best-effort\n      });\n    };\n    watcher.on(\"add\", fire);\n    watcher.on(\"change\", fire);\n    watcher.on(\"unlink\", fire);\n    watcher.on(\"error\", (err) => {\n      const error = err instanceof Error ? err : new Error(String(err));\n      this.onError?.(directory, error);\n    });\n    this.directories.set(directory, watcher);\n  }\n\n  unwatchDirectory(directory: string): void {\n    const watcher = this.directories.get(directory);\n    if (!watcher) return;\n    void watcher.close();\n    this.directories.delete(directory);\n  }\n\n  dispose(): void {\n    for (const [path] of this.files) this.unwatch(path);\n    for (const [dir] of this.directories) this.unwatchDirectory(dir);\n  }\n\n  private async readNewLines(key: string): Promise<void> {\n    const entry = this.files.get(key);\n    if (!entry) return;\n    // Map is keyed by the canonical path; FS reads and emitted callbacks use the\n    // original path so the offset index's stat identity is unchanged (P1.a).\n    const filePath = entry.path;\n\n    // Coalesce: if a read is already running, flag that another change arrived;\n    // the in-flight loop will pick up the freshly-appended bytes before exiting.\n    if (entry.reading) {\n      entry.pending = true;\n      return;\n    }\n    entry.reading = true;\n\n    try {\n      // Loop so bytes appended during a read (or while dispatching) are caught\n      // without re-entering — preserves offset correctness under async I/O.\n      for (;;) {\n        const st = await stat(filePath);\n        // Truncated or replaced by a SHORTER file: our offset now points past\n        // EOF. Leaving it there makes the tail silently stall until the file\n        // grows back past the stale offset and then resume mid-line, splicing\n        // the new file's content onto the old conversation. Reset to the start\n        // and tell the caller so it can drop the byte-offset index it built for\n        // the previous generation of this file.\n        if (st.size < entry.offset) {\n          entry.offset = 0;\n          this.onTruncated?.(filePath);\n        }\n        if (st.size <= entry.offset) break;\n\n        const readFrom = entry.offset;\n        const bytesToRead = st.size - readFrom;\n        const buf = Buffer.alloc(bytesToRead);\n        const fh = await open(filePath, \"r\");\n        try {\n          await fh.read(buf, 0, bytesToRead, readFrom);\n        } finally {\n          await fh.close();\n        }\n        // Split into complete lines only, with absolute byte spans. Advance by\n        // `consumed` (up to the last \"\\n\"), NOT `bytesToRead`: a trailing\n        // partial line (no \"\\n\" yet) is left unconsumed so `offset` never moves\n        // past an unparsed line — it arrives whole on the next read. The file\n        // may have grown again mid-read; the next loop iteration's stat catches\n        // the rest.\n        const { spans, consumed } = splitCompleteLines(buf, readFrom);\n        entry.offset = readFrom + consumed;\n\n        // The watcher may have been closed while we awaited; don't emit then.\n        if (!this.files.has(key)) return;\n\n        const lines = spans.map((s) => s.text);\n        // The spans callback (offset index) fires alongside the text callbacks\n        // — they consume the same read, so a burst extends the index and writes\n        // the tail in one pass.\n        // Pass both the start (readFrom) and the post-read end offset\n        // (entry.offset = readFrom + consumed) so the index can enforce\n        // contiguity and store the same offset the watcher tracks.\n        if (spans.length > 0) {\n          this.onNewLineSpans?.(filePath, spans, readFrom, entry.offset);\n        }\n        if (this.onNewLines) {\n          this.onNewLines(filePath, lines);\n        } else {\n          for (const line of lines) this.onNewLine?.(filePath, line);\n        }\n\n        if (entry.pending) {\n          entry.pending = false;\n          continue;\n        }\n        break;\n      }\n    } catch (err) {\n      this.onError?.(filePath, err instanceof Error ? err : new Error(String(err)));\n    } finally {\n      entry.reading = false;\n      // If a change arrived while this read was in flight but the loop exited\n      // before consuming it (e.g. an error broke out of the loop), the pending\n      // bytes would otherwise sit unread until the next write. Re-arm once so\n      // they're picked up — guarded by files.has so a disposed watcher stays put.\n      if (entry.pending && this.files.has(key)) {\n        entry.pending = false;\n        void this.readNewLines(key);\n      }\n    }\n  }\n}\n","import { existsSync } from \"fs\";\nimport type { ConversationCache } from \"../../conversation-cache\";\n\nexport interface PruneAgentConversationsResult {\n  scanned: number;\n  pruned: number;\n  missing: number;\n}\n\n// Walks conversation_meta once at startup and deletes any row whose JSONL has\n// the sdk-cli marker. Idempotent. Safe to call on every boot — the second run\n// will simply find nothing to delete.\nexport function pruneAgentConversations(cache: ConversationCache): PruneAgentConversationsResult {\n  const db = cache.getDatabase();\n  const rows = db.prepare(\"SELECT id, file_path FROM conversation_meta\").all() as Array<{\n    id: string;\n    file_path: string;\n  }>;\n\n  let pruned = 0;\n  let missing = 0;\n  for (const row of rows) {\n    if (!existsSync(row.file_path)) {\n      missing += 1;\n      continue;\n    }\n    if (cache.isAgentFileCached(row.file_path)) {\n      cache.deleteByFilePath(row.file_path);\n      pruned += 1;\n    }\n  }\n\n  return { scanned: rows.length, pruned, missing };\n}\n","import { execFile } from \"node:child_process\";\nimport { type CpuInfo, cpus, freemem, loadavg, totalmem } from \"os\";\nimport { monitorEventLoopDelay } from \"perf_hooks\";\nimport type { HostPressureLevel, HostPressureOs, HostPressureReason, WSMessage } from \"../../types\";\nimport type { WSHub } from \"../../ws-hub\";\n\nexport type CpuTimesSnapshot = CpuInfo[\"times\"];\n\n// Derived from the function rather than imported by name: @types/node renamed\n// this interface IntervalHistogram -> ELDHistogram in 26.5.0, and the two\n// versions share neither name, so importing either one pins the repo to one\n// side of that bump. ReturnType tracks whatever the installed types call it.\ntype EventLoopHistogram = ReturnType<typeof monitorEventLoopDelay>;\n\nexport const HOST_PRESSURE_SAMPLE_MS = 5_000;\n\n/**\n * Enter a level at the more extreme bar; leave at the less extreme bar so a\n * value sitting between them does not flicker. The elevated→ok leave bars sit\n * a little past the enter bars so a 7.9% ↔ 8.1% free-mem wiggle stays put.\n *\n * Tune these only together with `__tests__/host-pressure.test.ts`.\n */\nexport const HOST_PRESSURE_BARS = {\n  memFreeRatio: {\n    enterElevated: 0.08,\n    leaveElevated: 0.1,\n    enterCritical: 0.04,\n    leaveCritical: 0.08,\n  },\n  eventLoopP99Ms: {\n    enterElevated: 250,\n    leaveElevated: 200,\n    enterCritical: 500,\n    leaveCritical: 250,\n  },\n  loadPerCpu: {\n    enterElevated: 2.0,\n    leaveElevated: 1.5,\n    enterCritical: 3.0,\n    leaveCritical: 2.0,\n  },\n  // win32 has no loadavg. Busy ratio from os.cpus()[].times deltas is 0–1, so\n  // it cannot reuse loadPerCpu's 3.0 critical bar. Reason on the wire stays `load`.\n  cpuBusy: {\n    enterElevated: 0.95,\n    leaveElevated: 0.85,\n    enterCritical: 0.99,\n    leaveCritical: 0.95,\n  },\n  liveAgentsPair: 8,\n} as const;\n\nexport type HostSample = {\n  liveAgents: number;\n  memFreeRatio?: number;\n  eventLoopP99Ms: number;\n  load1: number;\n  ncpu: number;\n  /** 0–1 CPU busy from consecutive os.cpus() times snapshots. Used on win32 only. */\n  cpuBusyRatio?: number;\n};\n\nexport type HostPressureState = \"ok\" | HostPressureLevel;\n\nexport type HostPressureClassification = {\n  level: HostPressureState;\n  reasons: HostPressureReason[];\n};\n\nexport type HostPressureWsMessage = Extract<WSMessage, { type: \"host_pressure\" }>;\n\nconst REASON_ORDER: readonly HostPressureReason[] = [\"memory\", \"event_loop\", \"load\", \"agents\"];\n\nconst RANK: Record<HostPressureState, number> = { ok: 0, elevated: 1, critical: 2 };\n\nexport function parseMacMemoryPressureFreeRatio(output: string): number | undefined {\n  const match = output.match(/System-wide memory free percentage:\\s*(\\d+(?:\\.\\d+)?)%/);\n  if (!match) return undefined;\n  const percentage = Number(match[1]);\n  return percentage <= 100 ? percentage / 100 : undefined;\n}\n\nfunction runMacMemoryPressure(): Promise<string> {\n  return new Promise((resolve, reject) => {\n    execFile(\n      \"/usr/bin/memory_pressure\",\n      [\"-Q\"],\n      { encoding: \"utf8\", timeout: 1_000 },\n      (error, stdout) => {\n        if (error) {\n          reject(error);\n          return;\n        }\n        resolve(stdout);\n      },\n    );\n  });\n}\n\nexport async function readMacMemoryPressureFreeRatio(\n  run: () => Promise<string> = runMacMemoryPressure,\n): Promise<number | undefined> {\n  try {\n    return parseMacMemoryPressureFreeRatio(await run());\n  } catch {\n    return undefined;\n  }\n}\n\nexport class MacMemoryPressureProbe {\n  private current: number | undefined;\n  private pending = false;\n\n  constructor(private readonly read: () => Promise<number | undefined>) {}\n\n  refresh(): void {\n    if (this.pending) return;\n    this.pending = true;\n    void this.read()\n      .then((ratio) => {\n        this.current = ratio;\n      })\n      .finally(() => {\n        this.pending = false;\n      });\n  }\n\n  value(): number | undefined {\n    return this.current;\n  }\n}\n\nexport function hostMemoryFreeRatio(\n  platform: NodeJS.Platform,\n  totalBytes: number,\n  freeBytes: number,\n  macPressureFreeRatio?: number,\n): number | undefined {\n  if (platform === \"darwin\") return macPressureFreeRatio;\n  return totalBytes > 0 ? freeBytes / totalBytes : 1;\n}\n\nfunction worst(levels: HostPressureState[]): HostPressureState {\n  return levels.reduce<HostPressureState>(\n    (acc, level) => (RANK[level] > RANK[acc] ? level : acc),\n    \"ok\",\n  );\n}\n\nfunction schmittLowIsWorse(\n  value: number,\n  previous: HostPressureState,\n  enterElevated: number,\n  leaveElevated: number,\n  enterCritical: number,\n  leaveCritical: number,\n): HostPressureState {\n  if (previous === \"critical\") {\n    if (value < leaveCritical) return \"critical\";\n    if (value < leaveElevated) return \"elevated\";\n    return \"ok\";\n  }\n  if (previous === \"elevated\") {\n    if (value < enterCritical) return \"critical\";\n    if (value < leaveElevated) return \"elevated\";\n    return \"ok\";\n  }\n  if (value < enterCritical) return \"critical\";\n  if (value < enterElevated) return \"elevated\";\n  return \"ok\";\n}\n\nfunction schmittHighIsWorse(\n  value: number,\n  previous: HostPressureState,\n  enterElevated: number,\n  leaveElevated: number,\n  enterCritical: number,\n  leaveCritical: number,\n): HostPressureState {\n  if (previous === \"critical\") {\n    if (value > leaveCritical) return \"critical\";\n    if (value > leaveElevated) return \"elevated\";\n    return \"ok\";\n  }\n  if (previous === \"elevated\") {\n    if (value > enterCritical) return \"critical\";\n    if (value > leaveElevated) return \"elevated\";\n    return \"ok\";\n  }\n  if (value > enterCritical) return \"critical\";\n  if (value > enterElevated) return \"elevated\";\n  return \"ok\";\n}\n\nfunction timesTotal(times: CpuTimesSnapshot): number {\n  return times.user + times.nice + times.sys + times.idle + times.irq;\n}\n\n/** Node reports win32 for every Windows build. Other platforms are omitted on the wire. */\nexport function hostPressureOs(platform: NodeJS.Platform): HostPressureOs | undefined {\n  if (platform === \"darwin\" || platform === \"linux\" || platform === \"win32\") return platform;\n  return undefined;\n}\n\n/** Fraction of CPU that was busy between two os.cpus() snapshots. 0 when there is no delta. */\nexport function cpuBusyRatio(\n  previous: readonly CpuTimesSnapshot[] | null,\n  next: readonly CpuTimesSnapshot[],\n): number {\n  if (!previous || previous.length === 0 || next.length === 0 || previous.length !== next.length) {\n    return 0;\n  }\n  let idle = 0;\n  let total = 0;\n  for (let i = 0; i < next.length; i++) {\n    const dt = timesTotal(next[i]) - timesTotal(previous[i]);\n    if (dt <= 0) continue;\n    total += dt;\n    idle += Math.max(0, next[i].idle - previous[i].idle);\n  }\n  if (total <= 0) return 0;\n  return 1 - idle / total;\n}\n\nexport function classifyHostPressure(\n  sample: HostSample,\n  previous: HostPressureState,\n  platform: NodeJS.Platform,\n): HostPressureClassification {\n  const mem =\n    sample.memFreeRatio === undefined\n      ? \"ok\"\n      : schmittLowIsWorse(\n          sample.memFreeRatio,\n          previous,\n          HOST_PRESSURE_BARS.memFreeRatio.enterElevated,\n          HOST_PRESSURE_BARS.memFreeRatio.leaveElevated,\n          HOST_PRESSURE_BARS.memFreeRatio.enterCritical,\n          HOST_PRESSURE_BARS.memFreeRatio.leaveCritical,\n        );\n  const eventLoop = schmittHighIsWorse(\n    sample.eventLoopP99Ms,\n    previous,\n    HOST_PRESSURE_BARS.eventLoopP99Ms.enterElevated,\n    HOST_PRESSURE_BARS.eventLoopP99Ms.leaveElevated,\n    HOST_PRESSURE_BARS.eventLoopP99Ms.enterCritical,\n    HOST_PRESSURE_BARS.eventLoopP99Ms.leaveCritical,\n  );\n  const ncpu = sample.ncpu > 0 ? sample.ncpu : 1;\n  // Node reports win32 for every Windows build (ia32, x64, arm64). There is no win64.\n  const windows = platform === \"win32\";\n  const loadValue = windows ? (sample.cpuBusyRatio ?? 0) : sample.load1 / ncpu;\n  const loadBars = windows ? HOST_PRESSURE_BARS.cpuBusy : HOST_PRESSURE_BARS.loadPerCpu;\n  const load = schmittHighIsWorse(\n    loadValue,\n    previous,\n    loadBars.enterElevated,\n    loadBars.leaveElevated,\n    loadBars.enterCritical,\n    loadBars.leaveCritical,\n  );\n\n  const resourceLevel = worst([mem, eventLoop, load]);\n  const agentsPair =\n    sample.liveAgents >= HOST_PRESSURE_BARS.liveAgentsPair && resourceLevel !== \"ok\";\n  const level = resourceLevel;\n\n  const firing: HostPressureReason[] = [];\n  if (mem !== \"ok\") firing.push(\"memory\");\n  if (eventLoop !== \"ok\") firing.push(\"event_loop\");\n  if (load !== \"ok\") firing.push(\"load\");\n  if (agentsPair) firing.push(\"agents\");\n  const reasons = REASON_ORDER.filter((reason) => firing.includes(reason));\n\n  return { level, reasons };\n}\n\nexport type HostPressureMonitorOpts = {\n  wsHub: Pick<WSHub, \"broadcast\">;\n  readSample: () => HostSample;\n  now?: () => Date;\n  platform?: NodeJS.Platform;\n  histogram?: EventLoopHistogram;\n  intervalMs?: number;\n};\n\nexport class HostPressureMonitor {\n  private timer: ReturnType<typeof setInterval> | null = null;\n  private level: HostPressureState = \"ok\";\n  private lastWarning: HostPressureWsMessage | null = null;\n\n  constructor(private readonly opts: HostPressureMonitorOpts) {}\n\n  start(): void {\n    this.opts.histogram?.enable();\n    if (this.timer) return;\n    const intervalMs = this.opts.intervalMs ?? HOST_PRESSURE_SAMPLE_MS;\n    this.timer = setInterval(() => this.tick(), intervalMs);\n    this.timer.unref?.();\n  }\n\n  tick(): void {\n    const sample = this.opts.readSample();\n    const platform = this.opts.platform ?? process.platform;\n    const classified = classifyHostPressure(sample, this.level, platform);\n    if (classified.level === this.level) return;\n\n    this.level = classified.level;\n    const updatedAt = (this.opts.now ?? (() => new Date()))().toISOString();\n    if (classified.level === \"ok\") {\n      this.lastWarning = null;\n      this.opts.wsHub.broadcast({ type: \"host_pressure_cleared\", updatedAt });\n      return;\n    }\n\n    const os = hostPressureOs(platform);\n    const message: HostPressureWsMessage = {\n      type: \"host_pressure\",\n      level: classified.level,\n      reasons: classified.reasons,\n      liveAgents: sample.liveAgents,\n      updatedAt,\n      ...(os ? { os } : {}),\n    };\n    this.lastWarning = message;\n    this.opts.wsHub.broadcast(message);\n  }\n\n  wsMessage(): HostPressureWsMessage | null {\n    return this.lastWarning;\n  }\n\n  dispose(): void {\n    if (this.timer) {\n      clearInterval(this.timer);\n      this.timer = null;\n    }\n    this.opts.histogram?.disable();\n  }\n}\n\nexport function createHostPressureMonitor(\n  wsHub: WSHub,\n  liveAgents: () => number,\n): HostPressureMonitor {\n  const histogram = monitorEventLoopDelay({ resolution: 20 });\n  const platform = process.platform;\n  const windows = platform === \"win32\";\n  const macMemoryPressure =\n    platform === \"darwin\" ? new MacMemoryPressureProbe(readMacMemoryPressureFreeRatio) : null;\n  let prevCpuTimes: CpuTimesSnapshot[] | null = null;\n  macMemoryPressure?.refresh();\n  const monitor = new HostPressureMonitor({\n    wsHub,\n    histogram,\n    readSample: () => {\n      const eventLoopP99Ms = histogram.percentile(99) / 1e6;\n      histogram.reset();\n      const total = platform === \"darwin\" ? 0 : totalmem();\n      const free = platform === \"darwin\" ? 0 : freemem();\n      const cpuList = cpus();\n      const sample: HostSample = {\n        liveAgents: liveAgents(),\n        memFreeRatio: hostMemoryFreeRatio(platform, total, free, macMemoryPressure?.value()),\n        eventLoopP99Ms,\n        load1: loadavg()[0],\n        ncpu: cpuList.length,\n      };\n      macMemoryPressure?.refresh();\n      if (windows) {\n        const cpuTimes = cpuList.map((cpu) => cpu.times);\n        sample.cpuBusyRatio = cpuBusyRatio(prevCpuTimes, cpuTimes);\n        prevCpuTimes = cpuTimes;\n      }\n      return sample;\n    },\n  });\n  monitor.start();\n  return monitor;\n}\n","import type { PushRepository, PushTokenRow } from \"../../db/repositories/push.repository\";\nimport { getLogger } from \"../../logger\";\nimport { allows, type PushEvent, parseStoredPrefs } from \"./notificationPrefs\";\n\n/**\n * Ordinary push notifications, sent through Expo's relay.\n *\n * Deliberately not the APNs path. `ApnsClient` signs with a `.p8` for\n * `${bundleId}.push-type.liveactivity`, and Apple issues those keys per\n * developer team — a self-hosted streamer cannot sign for the published app's\n * bundle id, so anything built on it works only for the maintainer. Expo holds\n * the APNs and FCM credentials for the app, so any streamer can send with a\n * plain POST, no Apple credential and one code path for both platforms.\n *\n * Self-hosting is the primary deployment, which is what makes this the\n * transport for ordinary notifications.\n */\n\nconst log = getLogger(\"expo-push\");\n\nexport const EXPO_PUSH_ENDPOINT = \"https://exp.host/--/api/v2/push/send\";\n\n/** Expo accepts at most 100 messages per request. */\nexport const EXPO_PUSH_BATCH_SIZE = 100;\n\nexport interface ExpoPushMessage {\n  title: string;\n  body: string;\n  /** Delivered to the app as `notification.request.content.data`. */\n  data: Record<string, string>;\n  /** iOS plays nothing unless this is set — \"default\" is the device sound. */\n  sound?: \"default\";\n  /** \"high\" wakes an Android device immediately instead of batching. */\n  priority?: \"default\" | \"normal\" | \"high\";\n  /** iOS: groups one session's notifications into a single stack. */\n  threadId?: string;\n  /** iOS + Android: a newer push with the same id replaces the shown one. */\n  collapseId?: string;\n  /** Android: the same replacement, for an already-displayed notification. */\n  tag?: string;\n}\n\n/** A message fixed for every device, or one built per device's language. */\nexport type ExpoPushContent = ExpoPushMessage | ((locale: string | null) => ExpoPushMessage);\n\nexport interface ExpoPushOutcome {\n  /** Tokens the send was actually attempted for, after preferences were applied. */\n  attempted: number;\n  succeeded: number;\n  /** Tokens Expo rejected as permanently dead, now revoked locally. */\n  retired: number;\n  /** Deliverable tokens skipped because their owner's preferences said not to send. */\n  suppressed: number;\n}\n\n/** One entry of Expo's `data` array, positionally matched to the request. */\ninterface ExpoPushTicket {\n  status?: string;\n  message?: string;\n  details?: { error?: string };\n}\n\n/**\n * The one ticket error that means \"this token will never work again\" — the app\n * was uninstalled, or the token rotated. Every other error (rate limit,\n * message too big, a relay hiccup) is transient and only counts toward the\n * repository's failure streak.\n */\nconst DEAD_TOKEN_ERROR = \"DeviceNotRegistered\";\n\nexport class ExpoPushSender {\n  /**\n   * @param accessToken Expo access token, when the project has enhanced\n   * security enabled. Optional on purpose: a self-hoster does not own the Expo\n   * project and cannot obtain one, so requiring it would break the deployment\n   * this transport exists to serve.\n   */\n  constructor(\n    private readonly repo: PushRepository,\n    private readonly accessToken?: string,\n  ) {}\n\n  /**\n   * Send one message to every deliverable Expo token whose preferences allow it.\n   *\n   * Sends are independent: Expo returns a ticket per token in one response, so\n   * a dead device is recorded against its own row and never silences the other\n   * devices in the batch. The same holds for preferences — they are applied per\n   * token, so one device's quiet hours never mute another phone.\n   *\n   * `event` names what the push is about so the right toggle applies; leaving\n   * it out sends to every deliverable token regardless of preferences.\n   */\n  async send(\n    message: ExpoPushContent,\n    opts: { event?: PushEvent; now?: number } = {},\n  ): Promise<ExpoPushOutcome> {\n    const now = opts.now ?? Date.now();\n    const deliverable = this.repo.listDeliverable();\n    const { event } = opts;\n    const rows = event\n      ? deliverable.filter((row) =>\n          allows(parseStoredPrefs(row.notification_prefs), event, new Date(now)),\n        )\n      : deliverable;\n    return this.deliver(rows, message, now, deliverable.length - rows.length);\n  }\n\n  /**\n   * Send to exactly these tokens, ignoring preferences.\n   *\n   * For a push the user asked for by name (the settings screen's test button):\n   * muting it because their own quiet hours are on would answer \"does delivery\n   * work?\" with silence.\n   */\n  sendTo(\n    rows: PushTokenRow[],\n    message: ExpoPushContent,\n    now: number = Date.now(),\n  ): Promise<ExpoPushOutcome> {\n    return this.deliver(rows, message, now, 0);\n  }\n\n  private async deliver(\n    rows: PushTokenRow[],\n    message: ExpoPushContent,\n    now: number,\n    suppressed: number,\n  ): Promise<ExpoPushOutcome> {\n    const outcome: ExpoPushOutcome = {\n      attempted: rows.length,\n      succeeded: 0,\n      retired: 0,\n      suppressed,\n    };\n    if (rows.length === 0) return outcome;\n\n    for (let i = 0; i < rows.length; i += EXPO_PUSH_BATCH_SIZE) {\n      const chunk = rows.slice(i, i + EXPO_PUSH_BATCH_SIZE);\n      await this.sendChunk(chunk, message, now, outcome);\n    }\n    return outcome;\n  }\n\n  private async sendChunk(\n    rows: PushTokenRow[],\n    content: ExpoPushContent,\n    now: number,\n    outcome: ExpoPushOutcome,\n  ): Promise<void> {\n    let payload: unknown;\n    try {\n      const res = await fetch(EXPO_PUSH_ENDPOINT, {\n        method: \"POST\",\n        headers: {\n          \"content-type\": \"application/json\",\n          accept: \"application/json\",\n          ...(this.accessToken && { authorization: `Bearer ${this.accessToken}` }),\n        },\n        body: JSON.stringify(\n          rows.map((row) => {\n            const message = typeof content === \"function\" ? content(row.locale) : content;\n            return {\n              to: row.token,\n              ...message,\n              // Per token, not per message: the same push token is registered\n              // with every server the phone pairs, and each server stores the id\n              // the app files *it* under. A token with none (an older client)\n              // gets no serverId, so the app uses its default server instead of\n              // failing to resolve a name it has no entry for.\n              data: row.client_server_id\n                ? { ...message.data, serverId: row.client_server_id }\n                : message.data,\n            };\n          }),\n        ),\n      });\n      if (!res.ok) {\n        // A request-level rejection (bad access token, malformed batch) says\n        // nothing about any individual device, so no token is retired here.\n        const code = `HTTP_${res.status}`;\n        for (const row of rows) this.repo.recordFailure(row.token, code, now);\n        log.warn(\"expo_push.request_rejected\", {\n          event: \"expo_push.request_rejected\",\n          status: res.status,\n          tokens: rows.length,\n        });\n        return;\n      }\n      payload = await res.json();\n    } catch (err) {\n      // Never swallowed: without this the user simply stops being told their\n      // turn is up, and there is nothing anywhere to explain why.\n      for (const row of rows) this.repo.recordFailure(row.token, \"SendError\", now);\n      log.error(\"expo_push.send_failed\", {\n        event: \"expo_push.send_failed\",\n        tokens: rows.length,\n        err: String(err),\n      });\n      return;\n    }\n\n    const tickets = (payload as { data?: ExpoPushTicket[] } | null)?.data;\n    rows.forEach((row, index) => {\n      const ticket = Array.isArray(tickets) ? tickets[index] : undefined;\n      if (!ticket) {\n        // Expo returns one ticket per message, positionally. A short array\n        // means we cannot say this device was reached, so it is a failure.\n        this.repo.recordFailure(row.token, \"NoTicket\", now);\n        return;\n      }\n      if (ticket.status === \"ok\") {\n        this.repo.recordSuccess(row.token, now);\n        outcome.succeeded += 1;\n        return;\n      }\n\n      const code = ticket.details?.error ?? \"PushError\";\n      this.repo.recordFailure(row.token, code, now);\n      if (code === DEAD_TOKEN_ERROR) {\n        // Retire rather than retry, mirroring how LiveActivitySender expires a\n        // dead APNs token: this one fails forever, and retrying it makes the\n        // health report read \"failing\" when the device is simply gone.\n        this.repo.revoke(row.token, now);\n        outcome.retired += 1;\n      }\n      log.warn(\"expo_push.send_rejected\", {\n        event: \"expo_push.send_rejected\",\n        code,\n        message: ticket.message,\n        retired: code === DEAD_TOKEN_ERROR,\n      });\n    });\n  }\n}\n","import {\n  type NotificationPrefs,\n  NotificationPrefsSchema,\n  type QuietHours,\n  type QuietWindow,\n  WEEKDAYS,\n  type Weekday,\n} from \"../../schemas/notification-prefs.schema\";\n\n/** The push kinds a preference can gate. */\nexport type PushEvent = \"waitingInput\" | \"sessionFailed\";\n\n/**\n * Read a stored preference blob.\n *\n * NULL and anything that no longer parses both come back `null`, which the send\n * path treats as \"everything on\". Failing open is deliberate: a corrupt row\n * must not silently mute the one notification the user is waiting for.\n */\nexport function parseStoredPrefs(raw: string | null): NotificationPrefs | null {\n  if (raw == null) return null;\n  try {\n    const parsed = NotificationPrefsSchema.safeParse(JSON.parse(raw));\n    return parsed.success ? parsed.data : null;\n  } catch {\n    return null;\n  }\n}\n\nfunction toMinutes(hhmm: string): number {\n  const [h, m] = hhmm.split(\":\").map(Number);\n  return h * 60 + m;\n}\n\n/** The weekday and minute-of-day `now` falls on in `tz`. */\nfunction localClock(now: Date, tz: string): { day: number; minutes: number } {\n  const parts = new Intl.DateTimeFormat(\"en-US\", {\n    timeZone: tz,\n    weekday: \"short\",\n    hour: \"2-digit\",\n    minute: \"2-digit\",\n    hourCycle: \"h23\",\n  }).formatToParts(now);\n  const get = (type: string) => parts.find((p) => p.type === type)?.value ?? \"\";\n  const key = get(\"weekday\").slice(0, 3).toLowerCase() as Weekday;\n  return { day: WEEKDAYS.indexOf(key), minutes: Number(get(\"hour\")) * 60 + Number(get(\"minute\")) };\n}\n\n/** The window that STARTS on weekday index `day`, or null for none. */\nfunction windowStartingOn(qh: QuietHours, day: number): QuietWindow | null {\n  const override = qh.days?.[WEEKDAYS[day]];\n  // `undefined` = no override for that day; `null` = explicitly no quiet hours.\n  return override === undefined ? qh.default : override;\n}\n\n/**\n * Is `now` inside the user's quiet hours?\n *\n * A window that ends earlier than it starts runs overnight and belongs to the\n * day it starts on: Friday 22:00–08:00 covers Saturday until 08:00 and uses\n * Friday's entry, not Saturday's. `from === to` is an empty window, not 24h —\n * \"always quiet\" is what turning the notification off is for.\n */\nexport function isQuietNow(qh: QuietHours, now: Date): boolean {\n  if (!qh.enabled) return false;\n  const { day, minutes } = localClock(now, qh.tz);\n\n  const today = windowStartingOn(qh, day);\n  if (today) {\n    const from = toMinutes(today.from);\n    const to = toMinutes(today.to);\n    if (from < to && minutes >= from && minutes < to) return true;\n    if (from > to && minutes >= from) return true;\n  }\n\n  // The tail of an overnight window that began yesterday.\n  const yesterday = windowStartingOn(qh, (day + 6) % 7);\n  if (yesterday) {\n    const from = toMinutes(yesterday.from);\n    const to = toMinutes(yesterday.to);\n    if (from > to && minutes < to) return true;\n  }\n  return false;\n}\n\n/** Should a push of this kind reach a device with these preferences right now? */\nexport function allows(prefs: NotificationPrefs | null, event: PushEvent, now: Date): boolean {\n  if (prefs === null) return true;\n  if (!prefs[event]) return false;\n  return !(prefs.quietHours && isQuietNow(prefs.quietHours, now));\n}\n","import { getLogger } from \"../../logger\";\nimport type { ManagedSession } from \"../../types\";\nimport {\n  type LiveActivityContentState,\n  toLiveActivityStatus,\n  truncateLastOutput,\n} from \"./liveActivityContentState\";\nimport type { LiveActivitySender } from \"./liveActivitySender\";\n\n/**\n * Bridge from the session lifecycle to Live Activity pushes.\n *\n * `onStatusChange` in server.ts is the one funnel every status transition passes\n * through, for both the Claude and Codex runners, so hooking here covers every\n * path rather than one runner's. This module exists to keep that callback a\n * single call and to hold the \"which transitions are worth a push\" rule in one\n * testable place.\n *\n * Per-turn, not per-session: a turn opens on `waiting_input → running` (the\n * user sent a prompt) and closes on the matching `running → waiting_input`\n * (the response — including sub-agents, invisible to this signal since they\n * run inside the same `running` span — finished). A session's very first\n * `running`, right after spawn with no prior `waiting_input`, opens nothing —\n * that's what keeps a freshly booted or idling session from showing an\n * activity before the user has asked for anything. See\n * docs/guides/live-activity-push.md for the full contract.\n */\n\nconst log = getLogger(\"live-activity\");\n\n/**\n * Build the content state mobile decodes.\n *\n * `startedAt` comes from the session's own start and is passed through in epoch\n * milliseconds: iOS renders its own ticking timer from it, so the server must\n * never compute an elapsed value.\n */\nexport function contentStateForSession(args: {\n  session: ManagedSession;\n  serverId: string;\n  serverLabel?: string;\n  /** Overrides the session's own start — used by a renewal to preserve continuity. */\n  startedAtOverride?: number | null;\n}): LiveActivityContentState | null {\n  const status = toLiveActivityStatus(args.session.status);\n  // No representation for a non-live status: that case is an `end`, not an\n  // update carrying a status mobile has no case for.\n  if (!status) return null;\n\n  return {\n    sessionId: args.session.id,\n    serverId: args.serverId,\n    projectName: args.session.projectName,\n    status,\n    startedAt: args.startedAtOverride ?? args.session.startedAt.getTime(),\n    lastOutput: truncateLastOutput(args.session.lastOutput ?? \"\"),\n    ...(args.serverLabel != null && { serverLabel: args.serverLabel }),\n    ...(args.session.sessionName != null && { sessionName: args.session.sessionName }),\n  };\n}\n\nexport class LiveActivityNotifier {\n  /**\n   * Sessions with a currently open (pushed) activity.\n   *\n   * An activity opens on a `waiting_input → running` edge (the user sent a\n   * prompt) and closes on the matching `running → waiting_input` edge (the\n   * response, including any sub-agents, finished) — so this set is what makes\n   * the notifier per-turn rather than per-session. A session's very first\n   * `running` (right after spawn, before any user prompt) has no prior\n   * `waiting_input` and therefore no edge, so it never opens an activity —\n   * this is what keeps a fresh/idle session from pushing anything.\n   */\n  private openActivity = new Map<string, { sessionNameSent: boolean }>();\n\n  constructor(\n    private readonly sender: LiveActivitySender,\n    private readonly serverId: string,\n    private readonly serverLabel?: string,\n  ) {}\n\n  /**\n   * React to a session status change.\n   *\n   * Fire-and-forget by design: a push must never delay or fail a session\n   * transition, so this returns a promise the caller may ignore and every error\n   * is logged rather than propagated.\n   */\n  async onStatusChange(session: ManagedSession, previousStatus?: string): Promise<void> {\n    const status = toLiveActivityStatus(session.status);\n\n    try {\n      if (!status) {\n        // Anything not renderable means the session is no longer live. If a\n        // turn was still open (mid-turn PTY death), end it so a renewal can't\n        // resurrect it; otherwise there is nothing to close.\n        if (this.openActivity.has(session.id)) await this.endFor(session);\n        return;\n      }\n\n      if (status === \"running\" && previousStatus === \"waiting_input\") {\n        await this.startTurn(session);\n        return;\n      }\n\n      if (status === \"waiting_input\" && previousStatus === \"running\") {\n        // Only a real turn end if one was actually opened — the session's\n        // very first waiting_input (boot ready, no prior turn) has none.\n        if (this.openActivity.has(session.id)) await this.endFor(session);\n        return;\n      }\n\n      // Any other same-status re-emit: refresh the name if it has just become\n      // available on an already-open turn (the first message races the title\n      // derivation, so the name can land after the turn already started).\n      await this.maybeSendName(session);\n    } catch (err) {\n      // A push failure must not surface as a session-transition failure, but it\n      // must not vanish either.\n      log.error(\"live_activity.notify_failed\", {\n        event: \"live_activity.notify_failed\",\n        sessionId: session.id,\n        status: session.status,\n        err: String(err),\n      });\n    }\n  }\n\n  private async startTurn(session: ManagedSession): Promise<void> {\n    const contentState = contentStateForSession({\n      session,\n      serverId: this.serverId,\n      serverLabel: this.serverLabel,\n    });\n    if (!contentState) return;\n\n    const outcome = await this.sender.send({\n      sessionId: session.id,\n      event: \"update\",\n      contentState,\n    });\n    this.openActivity.set(session.id, { sessionNameSent: session.sessionName != null });\n    if (outcome.attempted > 0) {\n      log.info(\"live_activity.updated\", {\n        event: \"live_activity.updated\",\n        sessionId: session.id,\n        status: contentState.status,\n        ...outcome,\n      });\n    }\n  }\n\n  private async maybeSendName(session: ManagedSession): Promise<void> {\n    const open = this.openActivity.get(session.id);\n    if (!open || open.sessionNameSent || session.sessionName == null) return;\n\n    const contentState = contentStateForSession({\n      session,\n      serverId: this.serverId,\n      serverLabel: this.serverLabel,\n    });\n    if (!contentState) return;\n\n    const outcome = await this.sender.send({\n      sessionId: session.id,\n      event: \"update\",\n      contentState,\n    });\n    open.sessionNameSent = true;\n    if (outcome.attempted > 0) {\n      log.info(\"live_activity.updated\", {\n        event: \"live_activity.updated\",\n        sessionId: session.id,\n        status: contentState.status,\n        ...outcome,\n      });\n    }\n  }\n\n  private async endFor(session: ManagedSession): Promise<void> {\n    this.openActivity.delete(session.id);\n\n    // Carry the last renderable status through the end event: the content state\n    // is required by the payload, and `idle` has no encoding mobile understands.\n    const status = toLiveActivityStatus(session.status);\n    const contentState = contentStateForSession({\n      session: { ...session, status: status ?? \"waiting_input\" },\n      serverId: this.serverId,\n      serverLabel: this.serverLabel,\n    });\n    if (!contentState) return;\n\n    const outcome = await this.sender.end({ sessionId: session.id, contentState });\n    if (outcome.attempted > 0) {\n      log.info(\"live_activity.ended\", {\n        event: \"live_activity.ended\",\n        sessionId: session.id,\n        ...outcome,\n      });\n    }\n  }\n\n  /** Drop cached state for a session, so a resume re-opens on its next turn. */\n  forget(sessionId: string): void {\n    this.openActivity.delete(sessionId);\n  }\n}\n","/**\n * The Live Activity content-state contract, shared with tb-mobile.\n *\n * tb-mobile defines the mirror of this shape in `types/live-activity.ts` and\n * decodes it with a Swift `Codable` ActivityAttributes struct. A decode failure\n * in ActivityKit is silent — the Lock Screen surface simply stops updating,\n * with no error anywhere on the server — so a field name or type drifting apart\n * from mobile's struct breaks the feature invisibly. Treat this file as a\n * contract, not an internal type: changing it requires a coordinated tb-mobile\n * change.\n */\n\n/**\n * Statuses the surface renders. Deliberately narrower than the server's\n * `SessionStatus`: `idle` has no Live Activity representation, because a session\n * that is no longer live gets an `end` event rather than an update carrying a\n * third status mobile has no case for.\n */\nexport type LiveActivityStatus = \"running\" | \"waiting_input\";\n\n/** Longest `lastOutput` sent. Mobile truncates to the same bound. */\nexport const LAST_OUTPUT_MAX_LENGTH = 90;\n\nexport interface LiveActivityContentState {\n  sessionId: string;\n  serverId: string;\n  projectName: string;\n  status: LiveActivityStatus;\n  /**\n   * Epoch **milliseconds** of the session's start.\n   *\n   * iOS renders its own ticking elapsed timer from this, so the server must\n   * never send a precomputed elapsed value and never push per-second updates.\n   * Carried unchanged across a renewal — a fresh value makes the user's visible\n   * timer reset to zero.\n   */\n  startedAt: number;\n  lastOutput: string;\n  serverLabel?: string;\n  /**\n   * User-visible session title, derived from the first user message.\n   *\n   * Absent until the first message is submitted (a session between spawn and\n   * that point has no title yet); mobile falls back to `projectName` when unset.\n   */\n  sessionName?: string;\n}\n\n/**\n * Collapse a server session status onto the two the surface renders.\n *\n * Returns null for a status with no representation, which is the signal to send\n * an `end` rather than an update.\n */\nexport function toLiveActivityStatus(status: string): LiveActivityStatus | null {\n  return status === \"running\" || status === \"waiting_input\" ? status : null;\n}\n\n/**\n * Trim terminal output to the field's bound.\n *\n * Terminal output is unbounded and the whole APNs payload must stay under 4 KB,\n * so this is what keeps a chatty session from producing a rejected push.\n * Newlines collapse to spaces because the surface renders a single line.\n */\nexport function truncateLastOutput(raw: string): string {\n  const oneLine = raw.replace(/\\s+/g, \" \").trim();\n  return oneLine.length <= LAST_OUTPUT_MAX_LENGTH\n    ? oneLine\n    : oneLine.slice(0, LAST_OUTPUT_MAX_LENGTH);\n}\n","import type { PushRepository, PushTokenRow } from \"../../db/repositories/push.repository\";\nimport { getLogger } from \"../../logger\";\nimport type { SessionStore } from \"../../session-store\";\nimport { toLiveActivityStatus, truncateLastOutput } from \"./liveActivityContentState\";\nimport { ACTIVITY_MAX_LIFETIME_MS, type LiveActivitySender } from \"./liveActivitySender\";\n\n/**\n * Live Activity renewal scheduler.\n *\n * iOS ends a Live Activity roughly 8 hours after it starts, so a long-running\n * session loses its Lock Screen surface mid-session unless the activity is\n * replaced before the cap. Renewal ends the old activity and starts a\n * replacement.\n *\n * Deadlines live in the DB (`push_tokens.stale_date`) and timers are re-armed on\n * boot. An in-process `setTimeout` alone is not enough: it dies with the process,\n * and a restart inside an 8-hour window would drop every pending renewal\n * silently. Firing is gated by `claimRenewal()` so a re-armed timer cannot\n * double-send.\n *\n * Temporal is deliberately not used here even though `@temporalio/client` is a\n * dependency: it is reachable only under MULTI_AGENT_FLOW, where the PTY path\n * this feature observes does not run. Adding a Temporal dependency to the\n * default path would make Live Activities require a Temporal server.\n */\n\nconst log = getLogger(\"live-activity\");\n\n/**\n * How long before the cap to renew.\n *\n * Far enough out that a missed tick or a slow APNs round trip still lands inside\n * the window, close enough that the replacement activity gets a nearly full\n * 8-hour lifetime of its own.\n */\nexport const RENEWAL_LEAD_MS = 30 * 60 * 1000;\n\n/**\n * Longest a single timer is allowed to sleep.\n *\n * `setTimeout` overflows past ~24.8 days (2^31 ms) and fires immediately, and a\n * long sleep also drifts across a laptop suspend. Long waits are therefore\n * chained in bounded hops, re-reading the deadline each time.\n */\nconst MAX_TIMER_MS = 60 * 60 * 1000;\n\nexport interface LiveActivityRenewalDeps {\n  repo: PushRepository;\n  sender: LiveActivitySender;\n  sessionStore: SessionStore;\n  serverId: string;\n  serverLabel?: string;\n  /** Injected in tests; production uses the real clock. */\n  now?: () => number;\n}\n\n/** When a row should be renewed: its cap, minus the lead time. */\nexport function renewalDueAt(row: PushTokenRow): number | null {\n  return row.stale_date == null ? null : row.stale_date - RENEWAL_LEAD_MS;\n}\n\nexport class LiveActivityRenewalScheduler {\n  private timer: NodeJS.Timeout | null = null;\n  private stopped = false;\n  private readonly now: () => number;\n\n  constructor(private readonly deps: LiveActivityRenewalDeps) {\n    this.now = deps.now ?? (() => Date.now());\n  }\n\n  /**\n   * Arm the scheduler from persisted state.\n   *\n   * Called on boot, which is what makes a renewal survive a restart: the\n   * deadlines were never in memory to begin with.\n   */\n  start(): void {\n    this.stopped = false;\n    void this.tick();\n  }\n\n  stop(): void {\n    this.stopped = true;\n    if (this.timer) {\n      clearTimeout(this.timer);\n      this.timer = null;\n    }\n  }\n\n  /**\n   * Renew everything due, then sleep until the next deadline.\n   *\n   * Re-reads from the DB every tick rather than caching a schedule in memory, so\n   * an activity registered after boot is picked up without re-arming anything.\n   */\n  async tick(): Promise<void> {\n    if (this.stopped) return;\n\n    const now = this.now();\n    try {\n      for (const row of this.deps.repo.listRenewable()) {\n        const dueAt = renewalDueAt(row);\n        if (dueAt == null || dueAt > now) continue;\n        await this.renew(row, now);\n      }\n    } catch (err) {\n      // A failed sweep must not kill the scheduler — the next tick retries.\n      // Silence here would strand every future renewal.\n      log.error(\"live_activity.renewal_sweep_failed\", {\n        event: \"live_activity.renewal_sweep_failed\",\n        err: String(err),\n      });\n    }\n\n    this.scheduleNext();\n  }\n\n  private scheduleNext(): void {\n    if (this.stopped) return;\n\n    const now = this.now();\n    const pending = this.deps.repo\n      .listRenewable()\n      .map(renewalDueAt)\n      .filter((d): d is number => d != null);\n\n    // Nothing pending: still wake up on the hour cap, since an activity may be\n    // registered while we sleep and nothing else re-arms this timer.\n    const nextDue = pending.length > 0 ? Math.min(...pending) : now + MAX_TIMER_MS;\n    const delay = Math.min(Math.max(nextDue - now, 0), MAX_TIMER_MS);\n\n    this.timer = setTimeout(() => void this.tick(), delay);\n    // Never hold the process open for a renewal: shutdown must not wait on it.\n    this.timer.unref?.();\n  }\n\n  /**\n   * Renew one activity.\n   *\n   * Claims first: `claimRenewal()` succeeds exactly once per row, so a timer\n   * re-armed after a restart mid-window cannot send a second time.\n   */\n  private async renew(row: PushTokenRow, now: number): Promise<void> {\n    if (!row.session_id) return;\n\n    // Only renew a session that is genuinely still live. A session that ended\n    // inside the renewal window must not be resurrected — the reason this is\n    // checked here rather than trusted from the row.\n    const session = this.deps.sessionStore.getManaged(row.session_id);\n    const status = session ? toLiveActivityStatus(session.status) : null;\n    if (!session || !status) {\n      // Claim it anyway so the sweep stops reconsidering a row it will never\n      // renew, and expire the token so it is no longer a delivery target.\n      this.deps.repo.claimRenewal(row.token, now);\n      this.deps.repo.expire(row.token, now);\n      log.info(\"live_activity.renewal_skipped\", {\n        event: \"live_activity.renewal_skipped\",\n        sessionId: row.session_id,\n        activityId: row.activity_id,\n        reason: session ? `status_${session.status}` : \"session_gone\",\n      });\n      return;\n    }\n\n    if (!this.deps.repo.claimRenewal(row.token, now)) {\n      // Another tick, or a pre-restart run, already handled this row.\n      return;\n    }\n\n    // THE failure mode this whole path exists to avoid: iOS renders its own\n    // ticking elapsed timer from startedAt, so the replacement must carry the\n    // ORIGINAL start. A fresh value makes the user's visible timer reset to zero.\n    const startedAt = row.started_at ?? session.startedAt.getTime();\n\n    const contentState = {\n      sessionId: session.id,\n      serverId: this.deps.serverId,\n      projectName: session.projectName,\n      status,\n      startedAt,\n      lastOutput: session.lastOutput ?? \"\",\n      ...(this.deps.serverLabel != null && { serverLabel: this.deps.serverLabel }),\n      ...(session.sessionName != null && { sessionName: session.sessionName }),\n    };\n\n    try {\n      // End the old activity, then hand mobile the state to start its\n      // replacement with. The replacement's own update token arrives via\n      // /api/push/register once iOS issues it.\n      await this.deps.sender.send({\n        sessionId: session.id,\n        event: \"end\",\n        contentState: { ...contentState, lastOutput: truncateLastOutput(contentState.lastOutput) },\n        now,\n      });\n      this.deps.repo.expire(row.token, now);\n\n      const started = await this.startReplacement({\n        sessionId: session.id,\n        startedAt,\n        now,\n      });\n\n      log.info(\"live_activity.renewed\", {\n        event: \"live_activity.renewed\",\n        sessionId: session.id,\n        activityId: row.activity_id,\n        // Logged because a regression here is invisible on the server and only\n        // shows up as a reset timer on someone's Lock Screen.\n        startedAt,\n        replacementRequested: started,\n      });\n    } catch (err) {\n      log.error(\"live_activity.renewal_failed\", {\n        event: \"live_activity.renewal_failed\",\n        sessionId: session.id,\n        activityId: row.activity_id,\n        err: String(err),\n      });\n    }\n  }\n\n  /**\n   * Ask the device to start a replacement activity.\n   *\n   * Uses the app-wide push-to-start token, because the replacement does not\n   * exist yet and therefore has no per-activity token. Returns false when the\n   * device never registered one, which is not an error: the app simply cannot be\n   * asked to start an activity remotely, and the next foreground WS update\n   * recreates it.\n   */\n  private async startReplacement(args: {\n    sessionId: string;\n    startedAt: number;\n    now: number;\n  }): Promise<boolean> {\n    const starters = this.deps.repo.listByKind(\"liveactivity_start\", args.now);\n    if (starters.length === 0) return false;\n\n    const session = this.deps.sessionStore.getManaged(args.sessionId);\n    const status = session ? toLiveActivityStatus(session.status) : null;\n    if (!session || !status) return false;\n\n    await this.deps.sender.sendToTokens({\n      tokens: starters,\n      event: \"update\",\n      sessionId: args.sessionId,\n      contentState: {\n        sessionId: session.id,\n        serverId: this.deps.serverId,\n        projectName: session.projectName,\n        status,\n        // Carried through unchanged — the whole point of the renewal.\n        startedAt: args.startedAt,\n        lastOutput: truncateLastOutput(session.lastOutput ?? \"\"),\n        ...(this.deps.serverLabel != null && { serverLabel: this.deps.serverLabel }),\n        ...(session.sessionName != null && { sessionName: session.sessionName }),\n      },\n      now: args.now,\n      staleDate: args.startedAt + ACTIVITY_MAX_LIFETIME_MS,\n    });\n    return true;\n  }\n}\n","import type { PushRepository, PushTokenRow } from \"../../db/repositories/push.repository\";\nimport { getLogger } from \"../../logger\";\nimport type { ApnsClient, ApnsSendResult } from \"./apnsClient\";\nimport type { LiveActivityContentState } from \"./liveActivityContentState\";\n\n/**\n * Live Activity push sender.\n *\n * Turns a session lifecycle change into an ActivityKit push. Owns the `aps`\n * envelope and the per-token bookkeeping — which token to send to, and what to\n * do when APNs rejects one — so the session lifecycle callback stays a one-line\n * call.\n */\n\nconst log = getLogger(\"live-activity\");\n\n/** iOS ends a Live Activity ~8h after it starts. */\nexport const ACTIVITY_MAX_LIFETIME_MS = 8 * 60 * 60 * 1000;\n\nexport type LiveActivityEvent = \"update\" | \"end\";\n\nexport interface LiveActivitySendOutcome {\n  attempted: number;\n  succeeded: number;\n  /** Tokens APNs rejected as permanently unusable, now expired locally. */\n  retired: number;\n}\n\n/**\n * The APNs `aps` envelope for an ActivityKit push.\n *\n * Key names are Apple's and are not ours to choose: `content-state`,\n * `stale-date`, and `dismissal-date` are hyphenated, while `timestamp` and\n * `event` are not.\n */\ninterface ActivityKitPayload {\n  aps: {\n    /** Seconds since epoch. iOS discards a push whose timestamp regresses. */\n    timestamp: number;\n    event: LiveActivityEvent;\n    \"content-state\": LiveActivityContentState;\n    /** Seconds since epoch. When iOS should start showing the content as stale. */\n    \"stale-date\"?: number;\n    \"dismissal-date\"?: number;\n  };\n}\n\nexport function buildActivityKitPayload(args: {\n  event: LiveActivityEvent;\n  contentState: LiveActivityContentState;\n  now: number;\n  staleDate?: number | null;\n  dismissalDate?: number | null;\n}): ActivityKitPayload {\n  return {\n    aps: {\n      timestamp: Math.floor(args.now / 1000),\n      event: args.event,\n      \"content-state\": args.contentState,\n      ...(args.staleDate != null && { \"stale-date\": Math.floor(args.staleDate / 1000) }),\n      ...(args.dismissalDate != null && {\n        \"dismissal-date\": Math.floor(args.dismissalDate / 1000),\n      }),\n    },\n  };\n}\n\nexport class LiveActivitySender {\n  constructor(\n    private readonly apns: ApnsClient,\n    private readonly repo: PushRepository,\n  ) {}\n\n  /**\n   * Push to every live activity of a session.\n   *\n   * Sends are independent: one rejected token must not stop the others, because\n   * a single dead device would otherwise silence every other device watching the\n   * same session.\n   */\n  async send(args: {\n    sessionId: string;\n    event: LiveActivityEvent;\n    contentState: LiveActivityContentState;\n    now?: number;\n    priority?: 5 | 10;\n  }): Promise<LiveActivitySendOutcome> {\n    const now = args.now ?? Date.now();\n    return this.sendToTokens({\n      tokens: this.repo.listForSession(\"liveactivity_update\", args.sessionId, now),\n      sessionId: args.sessionId,\n      event: args.event,\n      contentState: args.contentState,\n      now,\n      priority: args.priority,\n    });\n  }\n\n  /**\n   * Push to an explicit token list.\n   *\n   * Renewal needs this: a replacement activity does not exist yet, so it is\n   * started via the app-wide push-to-start token rather than any per-session\n   * lookup. Shares one fan-out body with `send()` so failure handling cannot\n   * drift between the two paths.\n   */\n  async sendToTokens(args: {\n    tokens: PushTokenRow[];\n    sessionId: string;\n    event: LiveActivityEvent;\n    contentState: LiveActivityContentState;\n    now?: number;\n    priority?: 5 | 10;\n    /** Overrides the row's own cap — renewal sets the replacement's window. */\n    staleDate?: number | null;\n  }): Promise<LiveActivitySendOutcome> {\n    const now = args.now ?? Date.now();\n    const tokens = args.tokens;\n    const outcome: LiveActivitySendOutcome = {\n      attempted: tokens.length,\n      succeeded: 0,\n      retired: 0,\n    };\n    if (tokens.length === 0) return outcome;\n\n    const results = await Promise.all(\n      tokens.map((row) =>\n        this.sendToToken(row, args.event, args.contentState, now, args.priority, args.staleDate),\n      ),\n    );\n\n    for (const { row, result, error } of results) {\n      if (error) {\n        // Never swallowed: without this the surface just stops updating and\n        // there is nothing anywhere to explain why.\n        log.error(\"live_activity.send_failed\", {\n          event: \"live_activity.send_failed\",\n          sessionId: args.sessionId,\n          activityId: row.activity_id,\n          apnsEvent: args.event,\n          err: String(error),\n        });\n        this.repo.recordFailure(row.token, \"SendError\", now);\n        continue;\n      }\n      if (!result) continue;\n\n      if (result.ok) {\n        this.repo.recordSuccess(row.token, now);\n        outcome.succeeded += 1;\n        continue;\n      }\n\n      this.repo.recordFailure(row.token, result.reason ?? `HTTP_${result.status}`, now);\n      if (result.tokenDead) {\n        // Retire rather than retry. A dead token fails forever, and retrying it\n        // makes the health report say \"failing\" when the truth is the device or\n        // activity is gone.\n        this.repo.expire(row.token, now);\n        outcome.retired += 1;\n      }\n      log.warn(\"live_activity.send_rejected\", {\n        event: \"live_activity.send_rejected\",\n        sessionId: args.sessionId,\n        activityId: row.activity_id,\n        apnsEvent: args.event,\n        status: result.status,\n        reason: result.reason,\n        tokenDead: result.tokenDead,\n      });\n    }\n\n    return outcome;\n  }\n\n  /**\n   * End every live activity for a session and stop tracking them.\n   *\n   * Expiring locally is what stops the renewal sweep from later resurrecting an\n   * activity for a session that has already finished.\n   */\n  async end(args: {\n    sessionId: string;\n    contentState: LiveActivityContentState;\n    now?: number;\n  }): Promise<LiveActivitySendOutcome> {\n    const now = args.now ?? Date.now();\n    const outcome = await this.send({\n      sessionId: args.sessionId,\n      event: \"end\",\n      contentState: args.contentState,\n      now,\n    });\n    this.repo.expireSessionActivities(args.sessionId, now);\n    return outcome;\n  }\n\n  private async sendToToken(\n    row: PushTokenRow,\n    event: LiveActivityEvent,\n    contentState: LiveActivityContentState,\n    now: number,\n    priority?: 5 | 10,\n    staleDateOverride?: number | null,\n  ): Promise<{ row: PushTokenRow; result?: ApnsSendResult; error?: unknown }> {\n    // A stale-date is only meaningful for an update; an `end` is terminal.\n    const staleDate =\n      event === \"update\"\n        ? (staleDateOverride ?? row.stale_date ?? contentState.startedAt + ACTIVITY_MAX_LIFETIME_MS)\n        : null;\n    try {\n      const result = await this.apns.send({\n        deviceToken: row.token,\n        payload: buildActivityKitPayload({ event, contentState, now, staleDate }),\n        priority,\n      });\n      return { row, result };\n    } catch (error) {\n      return { row, error };\n    }\n  }\n}\n","import { getLogger } from \"../../logger\";\nimport type { ManagedSession } from \"../../types\";\nimport type { ExpoPushContent, ExpoPushSender } from \"./expoPushSender\";\nimport { type AttentionKind, attentionBody, attentionTitle } from \"./notificationCopy\";\nimport type { PushEvent } from \"./notificationPrefs\";\n\n/**\n * \"Your turn\" notifications.\n *\n * The away-from-desk workflow depends on one moment: the agent finished and is\n * waiting for the user, who put the phone down expecting to be told. This is\n * the module that tells them.\n *\n * Hooked to `onStatusChange` in server.ts for the same reason\n * LiveActivityNotifier is — it is the one funnel every status transition passes\n * through, for both the Claude and Codex runners, so the three `markReady`\n * detectors (prompt-marker, screen-marker, timeout fallback) are all covered\n * without knowing about any of them.\n *\n * Per-turn, not per-status: a turn opens on `waiting_input → running` (the user\n * sent a prompt) and the notification fires on the matching\n * `running → waiting_input`. A session's very first `waiting_input` — boot or\n * resume ready, with no prior turn — opens nothing, so starting a session never\n * notifies the user about the session they just started.\n *\n * The same notifier covers the agent stopping mid-turn for the user — a\n * permission gate or an AskUserQuestion menu. Those keep the turn open (Claude\n * holds its turn signal across them), so without a push of their own an\n * away-from-desk user would never learn the agent was blocked on them. One\n * push per prompt: repaints and cursor moves of the same prompt are not new.\n *\n * A session that dies at birth — the process exits at once, or Codex refuses to\n * start — gets one push of its own, since otherwise a user who started it and\n * walked away sees nothing. The text never carries `failureReason`, which\n * embeds project paths. Codex usage-limit screens are not this: they already\n * arrive as a permission prompt.\n *\n * Every push is gated by the receiving device's own preferences, per token, in\n * ExpoPushSender: \"waitingInput\" for the three kinds that mean the agent needs\n * the user, \"sessionFailed\" for the failure push.\n *\n * Always notifies for a closed turn, including when a WebSocket client is still\n * subscribed. Suppression-while-watched used to skip those pushes as noise when\n * the phone was on the session screen; that also silenced the phone when a\n * desktop browser (or a second device) was subscribed, which is worse than a\n * duplicate banner.\n */\n\nconst log = getLogger(\"expo-push\");\n\n/**\n * The payload, and why it is this thin.\n *\n * It says *which* session wants attention, never *what* the agent said. The\n * published privacy policy states notification payloads exclude prompts,\n * terminal output, credentials and conversation content, so `lastOutput` (raw\n * PTY output) and `sessionName` (derived from the user's first message) are\n * both deliberately absent — carrying them is what made the Live Activity\n * payload diverge from that text (RonenMars/threadbase-mobile#636).\n *\n * `projectName` and `sessionId` stay: mobile needs the session id to route the\n * tap, and a notification that cannot say which project it is about is not\n * actionable.\n *\n * There is no `serverId` here on purpose. Which server the app files this one\n * under is per registered token, so `ExpoPushSender` adds it per recipient.\n * The streamer's own hostname is not a substitute: the app keys servers by a\n * hash of their URL and cannot resolve a hostname.\n */\nexport function waitingInputMessage(\n  session: Pick<ManagedSession, \"id\" | \"projectName\" | \"provider\">,\n  kind: AttentionKind = \"turn_done\",\n): ExpoPushContent {\n  return (locale) => ({\n    title: attentionTitle(kind, session.projectName),\n    body: attentionBody(kind, session.provider, locale),\n    data: { sessionId: session.id, kind },\n    sound: \"default\",\n    priority: \"high\",\n    // One stack per session, and the newest state replaces the older banner:\n    // \"needs your go-ahead\" is stale the moment the turn finishes.\n    threadId: session.id,\n    collapseId: session.id,\n    tag: session.id,\n  });\n}\n\nexport class WaitingInputNotifier {\n  /** Sessions with a turn the user started that has not yet been answered. */\n  private openTurn = new Set<string>();\n  /** Sessions with a prompt (gate or question) already pushed and still open. */\n  private openPrompt = new Set<string>();\n  /** Sessions that have reached a prompt at least once, so they did start. */\n  private readySeen = new Set<string>();\n  /**\n   * Sessions whose going idle has already been looked at, so a repeat emit is\n   * not read as a second death. Cleared when the session is alive again.\n   */\n  private idleHandled = new Set<string>();\n\n  constructor(private readonly sender: ExpoPushSender) {}\n\n  /**\n   * React to a session status change.\n   *\n   * Fire-and-forget by design: a push must never delay or fail a session\n   * transition, so this returns a promise the caller may ignore and every error\n   * is logged rather than propagated.\n   */\n  async onStatusChange(session: ManagedSession, previousStatus?: string): Promise<void> {\n    try {\n      if (session.status === \"running\") {\n        this.idleHandled.delete(session.id);\n        if (previousStatus === \"waiting_input\") this.openTurn.add(session.id);\n        return;\n      }\n      this.openPrompt.delete(session.id);\n      if (session.status !== \"waiting_input\") {\n        // idle: the PTY is gone, so any open turn ended without a prompt.\n        this.openTurn.delete(session.id);\n        // \"Could not start\" means it never got as far as a prompt. A Codex\n        // session that hit a usage limit keeps its failureReason and goes idle\n        // when the user closes it much later — that is not a failed start.\n        const neverReady = !this.readySeen.delete(session.id);\n        const firstIdle = !this.idleHandled.has(session.id);\n        this.idleHandled.add(session.id);\n        if (firstIdle && neverReady && session.failureReason != null) {\n          await this.push(session, \"failed\");\n        }\n        return;\n      }\n      // Alive again (a resume after a failed start), so the next failure counts.\n      this.idleHandled.delete(session.id);\n      this.readySeen.add(session.id);\n\n      // Delete-as-test: no open turn means boot/resume ready, or a repeat\n      // emit of a status we have already notified for. Either way the user is\n      // not owed a second notification for one turn.\n      if (!this.openTurn.delete(session.id)) return;\n\n      await this.push(session, \"turn_done\");\n    } catch (err) {\n      log.error(\"expo_push.notify_failed\", {\n        event: \"expo_push.notify_failed\",\n        sessionId: session.id,\n        status: session.status,\n        err: String(err),\n      });\n    }\n  }\n\n  /**\n   * A permission gate or question opened (`open`) or closed on this session.\n   * Fire-and-forget like onStatusChange.\n   */\n  async onPrompt(\n    session: Pick<ManagedSession, \"id\" | \"projectName\" | \"provider\">,\n    kind: \"permission\" | \"question\",\n    open: boolean,\n  ): Promise<void> {\n    try {\n      if (!open) {\n        this.openPrompt.delete(session.id);\n        return;\n      }\n      if (this.openPrompt.has(session.id)) return;\n      this.openPrompt.add(session.id);\n      await this.push(session, kind);\n    } catch (err) {\n      log.error(\"expo_push.notify_failed\", {\n        event: \"expo_push.notify_failed\",\n        sessionId: session.id,\n        kind,\n        err: String(err),\n      });\n    }\n  }\n\n  private async push(\n    session: Pick<ManagedSession, \"id\" | \"projectName\" | \"provider\">,\n    kind: AttentionKind,\n  ): Promise<void> {\n    const event: PushEvent = kind === \"failed\" ? \"sessionFailed\" : \"waitingInput\";\n    const outcome = await this.sender.send(waitingInputMessage(session, kind), { event });\n    if (outcome.attempted > 0 || outcome.suppressed > 0) {\n      log.info(\"expo_push.waiting_input\", {\n        event: \"expo_push.waiting_input\",\n        sessionId: session.id,\n        kind,\n        ...outcome,\n      });\n    }\n  }\n}\n","import type { AskOption, AskQuestion } from \"../../types\";\n\ntype ContentBlock = {\n  type: string;\n  name?: string;\n  id?: string;\n  input?: unknown;\n  [key: string]: unknown;\n};\n\ninterface JsonlLineShape {\n  content?: ContentBlock[] | string;\n  message?: { content?: ContentBlock[] | string };\n}\n\nfunction normalizeContent(raw: ContentBlock[] | string | null | undefined): ContentBlock[] {\n  if (Array.isArray(raw)) return raw;\n  if (typeof raw === \"string\") return [{ type: \"text\", text: raw }];\n  return [];\n}\n\nfunction coerceOptions(raw: unknown): AskOption[] | null {\n  if (!Array.isArray(raw)) return null;\n  const out: AskOption[] = [];\n  for (const o of raw) {\n    if (o && typeof o === \"object\" && typeof (o as AskOption).label === \"string\") {\n      const opt = o as { label: string; description?: unknown; preview?: unknown };\n      out.push({\n        label: opt.label,\n        description: typeof opt.description === \"string\" ? opt.description : \"\",\n        ...(typeof opt.preview === \"string\" ? { preview: opt.preview } : {}),\n      });\n    }\n  }\n  return out.length > 0 ? out : null;\n}\n\nfunction coerceQuestions(raw: unknown): AskQuestion[] | null {\n  if (!Array.isArray(raw)) return null;\n  const out: AskQuestion[] = [];\n  for (const q of raw) {\n    if (!q || typeof q !== \"object\") continue;\n    const qq = q as {\n      question?: unknown;\n      header?: unknown;\n      multiSelect?: unknown;\n      options?: unknown;\n    };\n    const options = coerceOptions(qq.options);\n    if (typeof qq.question !== \"string\" || !options) continue;\n    out.push({\n      question: qq.question,\n      header: typeof qq.header === \"string\" ? qq.header : \"\",\n      multiSelect: qq.multiSelect === true,\n      options,\n    });\n  }\n  return out.length > 0 ? out : null;\n}\n\nexport function detectAskUserQuestion(\n  rawLine: string,\n): { toolUseId: string; questions: AskQuestion[] } | null {\n  let parsed: JsonlLineShape;\n  try {\n    parsed = JSON.parse(rawLine) as JsonlLineShape;\n  } catch {\n    return null;\n  }\n  const blocks = normalizeContent(parsed.message?.content ?? parsed.content);\n  for (const b of blocks) {\n    if (b.type === \"tool_use\" && b.name === \"AskUserQuestion\" && typeof b.id === \"string\") {\n      const input = b.input as { questions?: unknown } | undefined;\n      const questions = coerceQuestions(input?.questions);\n      if (questions) return { toolUseId: b.id, questions };\n    }\n  }\n  return null;\n}\n","import type { AskQuestion, WSMessage } from \"../../types\";\nimport { detectAskUserQuestion } from \"./detectAskUserQuestion\";\n\nexport interface PendingQuestion {\n  toolUseId: string;\n  questions: AskQuestion[];\n}\n\n// Pure decision: given the new lines for a session, returns the question messages\n// to broadcast and the pending-question records to store. No I/O.\nexport function questionsFromLines(\n  sessionId: string,\n  lines: string[],\n): {\n  messages: Extract<WSMessage, { type: \"question\" }>[];\n  pending: PendingQuestion[];\n} {\n  const messages: Extract<WSMessage, { type: \"question\" }>[] = [];\n  const pending: PendingQuestion[] = [];\n  for (const line of lines) {\n    const detected = detectAskUserQuestion(line);\n    if (detected) {\n      messages.push({\n        type: \"question\",\n        sessionId,\n        toolUseId: detected.toolUseId,\n        questions: detected.questions,\n      });\n      pending.push(detected);\n    }\n  }\n  return { messages, pending };\n}\n\n// Pure decision: should the JSONL-flush path (re-)broadcast this question?\n//\n// The live-screen detector may have already broadcast the same question under a\n// synthetic `screen:…` toolUseId. When that JSONL line lands with the REAL\n// toolUseId we must re-broadcast — even though the content is identical — so the\n// client swaps the stale screen id for the real one. Otherwise the client\n// answers with the screen id and resolveAnswer rejects it as tool_use_mismatch.\n//\n// - Not shown before (different/absent content key) → broadcast (new card).\n// - Shown before AND the toolUseId changed → broadcast (re-sync the id).\n// - Shown before AND same toolUseId → suppress (true duplicate).\nexport function shouldBroadcastQuestion(args: {\n  newContentKey: string;\n  lastContentKey: string | undefined;\n  newToolUseId: string;\n  priorToolUseId: string | undefined;\n}): boolean {\n  const alreadyShown = args.lastContentKey === args.newContentKey;\n  if (!alreadyShown) return true;\n  return args.priorToolUseId !== args.newToolUseId;\n}\n","import { parseCodexJsonlLine } from \"@threadbase-sh/scanner\";\n\n/**\n * Does a Codex rollout still look the way this streamer reads it?\n *\n * Everything built on Codex history — the conversation list, detail, search,\n * resume identity, and a fork's inherited prefix — parses an on-disk format\n * that Codex owns, does not version, and changes without telling anyone. It has\n * already changed once here: `forked_from_ordinal_exclusive` appears in exactly\n * one of the 38 fork rollouts on the machine this was written on, and its\n * absence is why every earlier fork opened as an empty conversation for months.\n *\n * That is the failure mode worth paying for. A format change does not throw —\n * it renders a conversation short, or empty, or a fork with turns it never\n * inherited, and every one of those looks like a bug in this app rather than a\n * moved contract.\n *\n * So this asserts the handful of things the readers actually depend on, and\n * NOTHING ELSE. A canary that fires on a benign addition gets muted, and a\n * muted canary is worse than none — Codex is free to add line types, payload\n * fields and roles, and every one of those must pass silently.\n */\n\n/** What broke, in terms of the assumption it breaks. */\nexport type CodexFormatFindingCode =\n  /** First line is not a `session_meta` — every reader starts there. */\n  | \"first_line_not_session_meta\"\n  /** `session_meta` carries no id, so the file names no conversation. */\n  | \"session_meta_missing_id\"\n  /**\n   * Ordinals are not one-per-line ascending. `readMessagesBeforeOrdinal` treats\n   * a line ordinal as a position, and falls back to the line counter when the\n   * field is absent — both are wrong the moment ordinals skip or repeat, and a\n   * fork's cut then lands in the wrong place with no error.\n   */\n  | \"ordinals_not_sequential\"\n  /**\n   * Lines that are structurally messages exist, but the render rule matched\n   * none of them — a renamed role, type, or content shape. This is the silent\n   * empty-conversation case.\n   */\n  | \"no_messages_parsed\"\n  /**\n   * A fork that names its source but not where the source stops. Its inherited\n   * history cannot be reconstructed, so it opens showing only its own turns.\n   */\n  | \"fork_link_without_cut\"\n  /** Most lines are not JSON at all — the container itself changed. */\n  | \"not_jsonl\";\n\nexport interface CodexFormatFinding {\n  code: CodexFormatFindingCode;\n  detail: string;\n}\n\n/** Lines read before giving up: enough to see the shape, bounded for a 68 MB rollout. */\nexport const CANARY_LINE_BUDGET = 2000;\n\n/** Above this share of unparseable lines, the container is the problem. */\nconst NOT_JSONL_RATIO = 0.5;\n\n/** Message-shaped lines needed before \"none rendered\" means drift, not tag-stripping. */\nconst MIN_MESSAGES_FOR_RENDER_DRIFT = 5;\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n  return typeof value === \"object\" && value !== null ? (value as Record<string, unknown>) : null;\n}\n\n/**\n * Audit the opening `lines` of one rollout.\n *\n * Pure and synchronous so the assumptions can be tested against drifted\n * fixtures rather than only against healthy ones — a canary nobody has seen\n * fire is a canary nobody knows is wired up.\n */\nexport function auditCodexRolloutLines(lines: string[]): CodexFormatFinding[] {\n  const findings: CodexFormatFinding[] = [];\n  const present = lines.filter((l) => l.trim().length > 0);\n  if (present.length === 0) return findings;\n\n  const parsed: Array<Record<string, unknown> | null> = present.map((l) => {\n    try {\n      return asRecord(JSON.parse(l));\n    } catch {\n      return null;\n    }\n  });\n\n  const unparseable = parsed.filter((p) => p === null).length;\n  if (unparseable / present.length > NOT_JSONL_RATIO) {\n    return [\n      {\n        code: \"not_jsonl\",\n        detail: `${unparseable} of ${present.length} opening lines are not JSON`,\n      },\n    ];\n  }\n\n  const first = parsed[0];\n  if (first?.type !== \"session_meta\") {\n    findings.push({\n      code: \"first_line_not_session_meta\",\n      detail: `first line has type ${JSON.stringify(first?.type ?? null)}`,\n    });\n  } else {\n    const payload = asRecord(first.payload);\n    const id = payload?.id ?? payload?.session_id;\n    if (typeof id !== \"string\" || id.length === 0) {\n      findings.push({\n        code: \"session_meta_missing_id\",\n        detail: \"session_meta payload carries neither `id` nor `session_id`\",\n      });\n    }\n    // A fork that names its source should say where the source stops — but\n    // only when Codex could have known. Measured on real rollouts: a fork\n    // records `forked_from_ordinal_exclusive` exactly when its SOURCE has\n    // ordinals, and inherits them (its own first line carries the cut as its\n    // ordinal). Fork from a rollout written before ordinals existed and you\n    // get an id and nothing else, today, with a current Codex.\n    //\n    // So a missing cut is only drift when this file HAS an ordinal: that\n    // proves the source had them, which is exactly when a cut was available to\n    // record. Without that qualifier this fires on every fork of an old\n    // conversation — a permanent, known condition, and the fastest way to\n    // train someone to ignore the canary.\n    if (typeof payload?.forked_from_id === \"string\" && typeof first.ordinal === \"number\") {\n      const cut = payload.forked_from_ordinal_exclusive;\n      if (typeof cut !== \"number\" || !Number.isFinite(cut)) {\n        findings.push({\n          code: \"fork_link_without_cut\",\n          detail: `forked_from_id present with ordinals, forked_from_ordinal_exclusive is ${JSON.stringify(cut ?? null)}`,\n        });\n      }\n    }\n  }\n\n  // Ordinals must not go BACKWARDS. That is the whole assumption the readers\n  // make: `readMessagesBeforeOrdinal` walks until `ordinal >= cut` and stops,\n  // so a descending ordinal would end the prefix early and silently drop\n  // inherited turns.\n  //\n  // Not asserted: that they start at zero — a fork continues its source's\n  // numbering, its first line carrying the cut. Nor that they advance by\n  // exactly one. Codex does emit repeats: one file in ~676 on the machine this\n  // was written on carries ordinal 312 twice, and the readers are fine with it\n  // because two lines sharing a position still fall on the same side of a cut.\n  const ordinals = parsed.map((p) => (typeof p?.ordinal === \"number\" ? p.ordinal : null));\n  let lastOrdinal: number | null = null;\n  for (let i = 0; i < ordinals.length; i++) {\n    const cur = ordinals[i];\n    if (cur === null) continue;\n    if (lastOrdinal !== null && cur < lastOrdinal) {\n      findings.push({\n        code: \"ordinals_not_sequential\",\n        detail: `line ${i} has ordinal ${cur} after ${lastOrdinal}`,\n      });\n      break;\n    }\n    lastOrdinal = cur;\n  }\n\n  // The render rule, against the structural shape it reads. Only the\n  // all-or-nothing case is a finding: a file legitimately renders fewer\n  // messages than it has message-shaped lines (developer/system roles, bodies\n  // that are only system tags), and reporting that would fire on every file.\n  let messageShaped = 0;\n  let rendered = 0;\n  for (let i = 0; i < present.length; i++) {\n    const entry = parsed[i];\n    const payload = asRecord(entry?.payload);\n    // Only roles the render rule would ever accept count as \"should have\n    // rendered\". An aborted session whose sole message line is `developer`\n    // sandbox boilerplate is legitimately empty, not drift — four such files\n    // exist in this corpus, and counting them fires the canary on a working\n    // conversation that simply has nothing to say.\n    if (\n      entry?.type === \"response_item\" &&\n      payload?.type === \"message\" &&\n      (payload.role === \"user\" || payload.role === \"assistant\")\n    ) {\n      messageShaped++;\n    }\n    if (parseCodexJsonlLine(present[i])) rendered++;\n  }\n  // A handful of message-shaped lines can legitimately render as nothing: a\n  // body that is entirely `<command-name>` / `<local-command-stdout>` tags is\n  // stripped to empty by design, and two such files exist here. Drift is a\n  // file with real conversation in it rendering as none of it, so this needs a\n  // floor. Five is a judgement call, sized above the observed noise.\n  if (messageShaped >= MIN_MESSAGES_FOR_RENDER_DRIFT && rendered === 0) {\n    findings.push({\n      code: \"no_messages_parsed\",\n      detail: `${messageShaped} message-shaped lines, none matched the render rule`,\n    });\n  }\n\n  return findings;\n}\n\n/**\n * The newest rollouts under `roots`, newest first.\n *\n * Newest is the whole point: an old file proves only what Codex used to write,\n * and the drift worth catching is in what it writes now. Date-partitioned\n * directories (`<root>/YYYY/MM/DD`) mean the newest day's directory is enough —\n * walking every rollout would be a full-tree stat on a machine with thousands.\n */\nexport function findNewestRollouts(\n  roots: string[],\n  limit: number,\n  fs: {\n    readdirSync: (p: string) => string[];\n    statSync: (p: string) => { mtimeMs: number; isDirectory(): boolean };\n    existsSync: (p: string) => boolean;\n  },\n  join: (...parts: string[]) => string,\n): string[] {\n  const candidates: Array<{ path: string; mtimeMs: number }> = [];\n\n  const newestChildren = (dir: string, depth: number): void => {\n    if (!fs.existsSync(dir)) return;\n    let entries: string[];\n    try {\n      entries = fs.readdirSync(dir);\n    } catch {\n      return;\n    }\n    const dirs: Array<{ path: string; mtimeMs: number }> = [];\n    for (const name of entries) {\n      const full = join(dir, name);\n      let stat: { mtimeMs: number; isDirectory(): boolean };\n      try {\n        stat = fs.statSync(full);\n      } catch {\n        continue;\n      }\n      if (stat.isDirectory()) {\n        dirs.push({ path: full, mtimeMs: stat.mtimeMs });\n      } else if (name.startsWith(\"rollout-\") && name.endsWith(\".jsonl\")) {\n        candidates.push({ path: full, mtimeMs: stat.mtimeMs });\n      }\n    }\n    // Descend only into the newest directories, and only as deep as the\n    // YYYY/MM/DD layout goes.\n    if (depth <= 0) return;\n    dirs.sort((a, b) => b.mtimeMs - a.mtimeMs);\n    for (const d of dirs.slice(0, 2)) newestChildren(d.path, depth - 1);\n  };\n\n  for (const root of roots) newestChildren(root, 3);\n  candidates.sort((a, b) => b.mtimeMs - a.mtimeMs);\n  return candidates.slice(0, limit).map((c) => c.path);\n}\n\nexport interface CanaryDeps {\n  readdirSync: (p: string) => string[];\n  statSync: (p: string) => { mtimeMs: number; isDirectory(): boolean };\n  existsSync: (p: string) => boolean;\n  readFileSync: (p: string, enc: \"utf8\") => string;\n  join: (...parts: string[]) => string;\n}\n\nexport interface CanaryReport {\n  audited: number;\n  findings: Array<{ filePath: string } & CodexFormatFinding>;\n}\n\n/** How many of the newest rollouts each sweep looks at. */\nexport const CANARY_SAMPLE_SIZE = 3;\n\n/**\n * One sweep: audit the newest rollouts and report what no longer holds.\n *\n * Returns rather than logs so the caller owns the log vocabulary and a test can\n * assert on findings instead of on log lines.\n */\nexport function sweepCodexFormat(roots: string[], deps: CanaryDeps): CanaryReport {\n  const files = findNewestRollouts(roots, CANARY_SAMPLE_SIZE, deps, deps.join);\n  const findings: CanaryReport[\"findings\"] = [];\n  for (const filePath of files) {\n    let head: string[];\n    try {\n      // Bounded: a rollout can reach tens of MB, and the opening lines carry\n      // every structural assumption this checks.\n      head = deps.readFileSync(filePath, \"utf8\").split(\"\\n\", CANARY_LINE_BUDGET);\n    } catch {\n      continue; // Unreadable is not drift — it may be mid-write.\n    }\n    for (const finding of auditCodexRolloutLines(head)) findings.push({ filePath, ...finding });\n  }\n  return { audited: files.length, findings };\n}\n","import { existsSync } from \"fs\";\nimport type { ConversationCache } from \"./conversation-cache\";\nimport {\n  type ManagedSessionRow,\n  type ManagedSessionsRepository,\n  PROBE_SET_MAX,\n} from \"./db/repositories/managed-sessions.repository\";\nimport type { FeatureFlagValues } from \"./feature-flags\";\nimport { isPidAlive } from \"./lifecycle/process-liveness\";\nimport type { LiveSessionManager } from \"./live-session-manager\";\nimport type { Logger } from \"./logger\";\nimport { getProcessArgs } from \"./process-discovery\";\nimport { CODEX_CLI_PROVIDER } from \"./providers\";\nimport type { ResumeOutcome } from \"./server\";\nimport {\n  AUTO_RESUME_CONCURRENCY,\n  AUTO_RESUME_STAGGER_MS,\n  type AutoResumeSkipReason,\n  autoResumeSkipReason,\n  planAutoResume,\n} from \"./services/sessions/autoResumeOnBoot\";\nimport {\n  PRE_BOOT_REASON,\n  type ReconcileVerdict,\n  reconcileSessions,\n} from \"./services/sessions/reconcileSessions\";\nimport {\n  REHYDRATE_MAX,\n  REHYDRATE_WINDOW_MS,\n  rehydrateSkipReason,\n  rowToStubSession,\n} from \"./services/sessions/rehydrateSessions\";\nimport type { SessionStore } from \"./session-store\";\nimport type { ManagedSession } from \"./types\";\nimport { currentBootToken } from \"./utils/bootToken\";\n\n/**\n * Everything the boot-time registry lifecycle reads from the server. Thunks\n * rather than values for anything bound after construction or replaceable at\n * runtime (`managedSessionsRepo` opens during listen(); tests swap `log` and\n * `resumeSession` on the server instance) — the same reason ScannerManagerDeps\n * passes `cache: () => ConversationCache | null`.\n */\nexport type SessionRegistryBootDeps = {\n  log: () => Logger;\n  ptyManager: () => LiveSessionManager;\n  sessionStore: () => SessionStore;\n  featureFlags: () => FeatureFlagValues;\n  autoResumeOnBoot: () => boolean;\n  managedSessionsRepo: () => ManagedSessionsRepository | null;\n  cache: () => ConversationCache | null;\n  streamerInstanceId: string;\n  sessionVerdicts: Map<string, ReconcileVerdict>;\n  selfPtyEndedAt: Map<string, number>;\n  resumeSession: (opts: {\n    sessionId: string;\n    projectName?: string;\n    branch?: string;\n  }) => Promise<ResumeOutcome>;\n  watchConversationFile: (sessionId: string, historyId?: string) => Promise<void>;\n  broadcastSessionList: () => void;\n  // Boot auto-resume preflights each candidate for a provider history before\n  // spending one of the AUTO_RESUME_MAX slots on it (#483). Typed loosely on the\n  // success side for the same reason SessionHandlersDeps is: the full shape is\n  // declared on StreamerServer and only `ok` / `reason` are read here.\n  resolveConversationTarget: (\n    sessionId: string,\n  ) => Promise<{ ok: false; reason: string } | { ok: true; [key: string]: unknown }>;\n};\n\n/**\n * The durable session registry's boot-and-shutdown lifecycle: classifying what\n * previous runs left behind, seeding the session list from it, optionally\n * resuming, pruning retired rows, and mirroring spawns and shutdown back into\n * the registry.\n *\n * Extracted from StreamerServer so registry work stops editing the server file\n * (see docs/plans/2026-07-12-server-ts-split.md, PR 6). State stays on the\n * server: this class only reads it through `deps`.\n */\nexport class SessionRegistryBoot {\n  constructor(private deps: SessionRegistryBootDeps) {}\n\n  private get log(): Logger {\n    return this.deps.log();\n  }\n\n  private get ptyManager(): LiveSessionManager {\n    return this.deps.ptyManager();\n  }\n\n  private get sessionStore(): SessionStore {\n    return this.deps.sessionStore();\n  }\n\n  private get featureFlags(): FeatureFlagValues {\n    return this.deps.featureFlags();\n  }\n\n  private get autoResumeOnBoot(): boolean {\n    return this.deps.autoResumeOnBoot();\n  }\n\n  private get managedSessionsRepo(): ManagedSessionsRepository | null {\n    return this.deps.managedSessionsRepo();\n  }\n\n  private get streamerInstanceId(): string {\n    return this.deps.streamerInstanceId;\n  }\n\n  private get sessionVerdicts(): Map<string, ReconcileVerdict> {\n    return this.deps.sessionVerdicts;\n  }\n\n  private get selfPtyEndedAt(): Map<string, number> {\n    return this.deps.selfPtyEndedAt;\n  }\n\n  /**\n   * Classify sessions left behind by previous streamer runs (C1 Phase 3a).\n   *\n   * Agents already outlive the streamer today on the crash and dev-takeover\n   * paths, which exit without reaching ptyManager.dispose() — they are just\n   * invisible when they do, because nothing recorded that they existed. This\n   * turns those rows into an explicit verdict per session.\n   *\n   * Read-only with respect to processes: it probes and classifies, and never\n   * signals anything. `orphaned` is a report, not a cleanup trigger.\n   */\n  async reconcilePreviousSessions(): Promise<ReconcileVerdict[]> {\n    if (!this.managedSessionsRepo) return [];\n    let verdicts: ReconcileVerdict[] = [];\n    try {\n      const rows = this.managedSessionsRepo\n        .listNonTerminal()\n        .filter((row) => !this.ptyManager.hasSession(row.session_id));\n      if (rows.length === PROBE_SET_MAX) {\n        // Said out loud rather than absorbed: past the cap this boot classifies\n        // a subset, and the rows it skipped are indistinguishable in the log\n        // from rows that did not exist.\n        this.log.warn(\n          `[reconcile] probe set hit its cap of ${PROBE_SET_MAX} — older rows skipped`,\n          {\n            event: \"registry.probe_truncated\",\n            limit: PROBE_SET_MAX,\n          },\n        );\n      }\n      if (rows.length === 0) return [];\n\n      verdicts = await reconcileSessions(\n        rows,\n        { isPidAlive, getProcessArgs },\n        this.streamerInstanceId,\n        currentBootToken(),\n      );\n\n      for (const v of verdicts) {\n        this.sessionVerdicts.set(v.sessionId, v);\n        // A skipped probe is the one verdict that looks like a decision but is\n        // an abstention — surfaced so \"why is this resumable?\" has an answer.\n        if (v.reason === PRE_BOOT_REASON) {\n          this.log.info(`[reconcile] ${v.sessionId} predates this machine boot — pid not probed`, {\n            event: \"sessions.boot_token_mismatch\",\n            sessionId: v.sessionId,\n          });\n        }\n        // Terminal verdicts leave the probe set so the next boot does no work\n        // for them. Non-terminal ones stay: a `detached` process may still be\n        // running, and we want to re-probe it next time.\n        if (v.lifecycle === \"completed\" || v.lifecycle === \"failed\") {\n          this.managedSessionsRepo.recordStatus(v.sessionId, \"idle\", \"reconcile\", {\n            completedAt: new Date(),\n          });\n        }\n      }\n\n      this.log.info(`[reconcile] classified ${verdicts.length} session(s) from previous runs`, {\n        event: \"sessions.reconciled\",\n        counts: verdicts.reduce<Record<string, number>>((acc, v) => {\n          acc[v.lifecycle] = (acc[v.lifecycle] ?? 0) + 1;\n          return acc;\n        }, {}),\n      });\n    } catch (err) {\n      // Reconciliation is diagnostic. A failure costs post-restart visibility,\n      // and must never stop the server from starting.\n      this.log.warn(\"[reconcile] failed to reconcile previous sessions\", {\n        event: \"sessions.reconcile_failed\",\n        err,\n      });\n    }\n    return verdicts;\n  }\n\n  /**\n   * Drop finished sessions the registry has held long enough (plan Phase 4).\n   *\n   * The registry is authoritative and never rebuilt from the cache, so nothing\n   * else would ever remove a row: without this it grows for the life of the\n   * install, and every boot pays for rows about sessions from months ago.\n   */\n  pruneTerminalSessions(): void {\n    if (!this.managedSessionsRepo) return;\n    try {\n      const pruned = this.managedSessionsRepo.pruneTerminal();\n      if (pruned > 0) {\n        this.log.info(`[registry] pruned ${pruned} terminal session row(s)`, {\n          event: \"registry.pruned\",\n          pruned,\n        });\n      }\n    } catch (err) {\n      // Retention is housekeeping. Failing it costs disk, never correctness.\n      this.log.warn(\"[registry] failed to prune terminal sessions\", {\n        event: \"registry.prune_failed\",\n        err,\n      });\n    }\n  }\n\n  /**\n   * Seed the session list with what previous runs left behind (persistence plan\n   * Phase 1, gaps G1/G2/G8).\n   *\n   * Reconciliation classifies rows and stops there; a verdict is overlaid onto a\n   * SessionResponse that already exists, and after a clean restart none does —\n   * `SessionStore` starts empty. So the user's session did not become\n   * `resumable`, it became *absent*. This is the half that puts it back.\n   *\n   * The seeded stubs hold no PTY and are never handed to `LiveSessionManager`,\n   * so `reapIdleSessions` and `startGraceTimer` — both of which iterate\n   * `ptyManager.listSessions()` — cannot observe them. A later resume calls\n   * `sessionStore.addManaged` with the real session, which overwrites the stub\n   * by id rather than duplicating it.\n   */\n  rehydratePreviousSessions(verdicts: ReconcileVerdict[]): ManagedSessionRow[] {\n    if (!this.managedSessionsRepo) return [];\n    try {\n      const now = Date.now();\n      // One over the cap, so a clipped result set can be reported rather than\n      // silently read as \"that was all of them\".\n      const rows = this.managedSessionsRepo.listRecoverable({\n        sinceMs: now - REHYDRATE_WINDOW_MS,\n        limit: REHYDRATE_MAX + 1,\n        includeSubagents: this.featureFlags.subagentSessions ?? false,\n      });\n      const truncated = rows.length > REHYDRATE_MAX;\n      const candidates = truncated ? rows.slice(0, REHYDRATE_MAX) : rows;\n      // The auto-resume preference is independent of the Phase 1 feature flag,\n      // but both paths must make decisions from this exact, bounded row set.\n      if (!this.featureFlags.sessionRehydration || candidates.length === 0) return candidates;\n\n      const verdictById = new Map(verdicts.map((v) => [v.sessionId, v]));\n      const cache = this.deps.cache();\n      const hasConversation = cache ? (id: string) => cache.hasConversation(id) : undefined;\n      let rehydrated = 0;\n      const skippedBy: Record<string, number> = {};\n      for (const row of candidates) {\n        // Anything already in the store is live and authoritative; a stub must\n        // never overwrite it.\n        if (this.sessionStore.getManaged(row.session_id)) continue;\n\n        const skip = rehydrateSkipReason(row, {\n          now,\n          projectExists: existsSync,\n          hasConversation,\n        });\n        if (skip) {\n          skippedBy[skip] = (skippedBy[skip] ?? 0) + 1;\n          // Per row, not just counted: \"my session did not come back\" is the\n          // report this has to answer, and it is about one specific session.\n          this.log.info(`[rehydrate] skipped ${row.session_id}: ${skip}`, {\n            event: \"sessions.rehydrate_skipped\",\n            sessionId: row.session_id,\n            reason: skip,\n          });\n          // The one skip that deletes. A session killed by a restart rather than\n          // a stop never reached `forgetSession`, and its row is never terminal,\n          // so without this every later boot re-probes it.\n          if (skip === \"never_prompted\") this.managedSessionsRepo.delete(row.session_id);\n          continue;\n        }\n\n        this.sessionStore.addManaged(rowToStubSession(row));\n        // The reconciler knows strictly more when it produced a verdict for this\n        // row (it probed the pid); `resumable` is the fallback for the clean\n        // restart case, which leaves no row in the probe set at all.\n        this.sessionVerdicts.set(\n          row.session_id,\n          verdictById.get(row.session_id) ?? {\n            sessionId: row.session_id,\n            lifecycle: \"resumable\",\n            reason: \"recovered from the registry at boot\",\n          },\n        );\n        // Re-seed the \"our own PTY ended here\" marker, so the very first resume\n        // after a restart doesn't read the JSONL we flushed on the way out as a\n        // FOREIGN owner and answer 409 CONVERSATION_BUSY (plan risk R3).\n        if (row.completed_at != null) this.selfPtyEndedAt.set(row.session_id, row.completed_at);\n        rehydrated++;\n      }\n\n      this.log.info(`[rehydrate] recovered ${rehydrated} session(s) from the registry`, {\n        event: \"sessions.rehydrated\",\n        rehydrated,\n        skipped: candidates.length - rehydrated,\n        skippedBy,\n        truncated,\n      });\n      return candidates;\n    } catch (err) {\n      // Same contract as reconciliation: this costs post-restart visibility, and\n      // must never stop the server from starting.\n      this.log.warn(\"[rehydrate] failed to rehydrate previous sessions\", {\n        event: \"sessions.rehydrate_failed\",\n        err,\n      });\n      return [];\n    }\n  }\n\n  /** Resume only the recent sessions the user explicitly allowed us to start at boot. */\n  async autoResumePreviousSessions(rows: ManagedSessionRow[]): Promise<void> {\n    if (!this.autoResumeOnBoot) return;\n\n    // Preflight each otherwise-eligible row for a provider history before\n    // planning. A session whose JSONL/rollout is gone can never resume, and\n    // spending one of the AUTO_RESUME_MAX slots on it starves a session that\n    // could (#483). Rows already skippable for a cheaper reason are marked\n    // ineligible without a probe, so this costs nothing for them.\n    const now = Date.now();\n    const baseOptions = { now, projectExists: existsSync, historyExists: () => true };\n    const historyExists = new Map<string, boolean>();\n    const preflights = new Set<Promise<void>>();\n    for (const row of rows) {\n      if (autoResumeSkipReason(row, baseOptions) != null) {\n        historyExists.set(row.session_id, false);\n        continue;\n      }\n      while (preflights.size >= AUTO_RESUME_CONCURRENCY) {\n        await Promise.race(preflights);\n      }\n      const preflight = (async () => {\n        try {\n          const target = await this.deps.resolveConversationTarget(row.session_id);\n          historyExists.set(row.session_id, target.ok || target.reason !== \"history_file_missing\");\n        } catch {\n          // Preserve the normal per-attempt failure handling when preflight is unavailable.\n          historyExists.set(row.session_id, true);\n        }\n      })();\n      preflights.add(preflight);\n      void preflight.then(() => preflights.delete(preflight));\n    }\n    await Promise.all(preflights);\n\n    const plan = planAutoResume(rows, {\n      ...baseOptions,\n      historyExists: (row) => historyExists.get(row.session_id) ?? false,\n    });\n    const skippedBy: Partial<Record<AutoResumeSkipReason, number>> = {};\n    for (const { row, reason } of plan.skipped) {\n      skippedBy[reason] = (skippedBy[reason] ?? 0) + 1;\n      this.log.debug(`[auto-resume] skipped ${row.session_id}: ${reason}`, {\n        event: \"sessions.auto_resume_skipped\",\n        sessionId: row.session_id,\n        reason,\n      });\n    }\n    if (plan.skipped.length > 0) {\n      this.log.info(\n        `[auto-resume] left ${plan.skipped.length} ineligible session(s) for manual resume`,\n        {\n          event: \"sessions.auto_resume_skipped\",\n          skipped: plan.skipped.length,\n          skippedBy,\n        },\n      );\n    }\n    for (const row of plan.overflow) {\n      this.log.info(`[auto-resume] left ${row.session_id} for manual resume: ceiling reached`, {\n        event: \"sessions.auto_resume_skipped\",\n        sessionId: row.session_id,\n        reason: \"ceiling_reached\",\n      });\n    }\n\n    let resumed = 0;\n    let failed = 0;\n    const inFlight = new Set<Promise<void>>();\n    let started = 0;\n\n    const resume = async (row: ManagedSessionRow): Promise<void> => {\n      try {\n        const outcome = await this.deps.resumeSession({\n          sessionId: row.session_id,\n          projectName: row.project_name,\n          branch: row.branch,\n        });\n        if (!outcome.ok) {\n          failed++;\n          this.log.info(`[auto-resume] skipped ${row.session_id}: ${outcome.reason}`, {\n            event: \"sessions.auto_resume_skipped\",\n            sessionId: row.session_id,\n            reason: outcome.reason,\n            ...(outcome.reason === \"conversation_busy\" && {\n              detectedBy: outcome.detectedBy,\n              lastActivityMs: outcome.lastActivityMs,\n              likelyOwner: outcome.likelyOwner,\n            }),\n          });\n          return;\n        }\n\n        resumed++;\n        this.log.info(`[auto-resume] resumed ${row.session_id}`, {\n          event: \"sessions.auto_resume_succeeded\",\n          sessionId: row.session_id,\n          alreadyRunning: outcome.alreadyRunning,\n        });\n      } catch (err) {\n        failed++;\n        this.log.warn(`[auto-resume] failed to resume ${row.session_id}`, {\n          event: \"sessions.auto_resume_failed\",\n          sessionId: row.session_id,\n          err,\n        });\n      }\n    };\n\n    for (const row of plan.attempts) {\n      while (inFlight.size >= AUTO_RESUME_CONCURRENCY) {\n        await Promise.race(inFlight);\n      }\n      if (started > 0) {\n        await new Promise<void>((resolve) => setTimeout(resolve, AUTO_RESUME_STAGGER_MS));\n      }\n\n      const task = resume(row);\n      inFlight.add(task);\n      void task.then(() => inFlight.delete(task));\n      started++;\n    }\n    await Promise.all(inFlight);\n\n    if (resumed > 0) this.deps.broadcastSessionList();\n\n    this.log.info(`[auto-resume] completed boot recovery: ${resumed} resumed`, {\n      event: \"sessions.auto_resume_completed\",\n      attempted: plan.attempts.length,\n      resumed,\n      failed,\n      ineligible: plan.skipped.length,\n      overflow: plan.overflow.length,\n    });\n  }\n\n  /**\n   * Pick a token guaranteed to appear in the spawned process's argv, for the\n   * reconciler's pid-reuse guard.\n   *\n   * Claude always passes the session id (`--resume <id>` or `--session-id\n   * <id>`), so it is both present and unique. Codex only does on *resume*\n   * (`codex resume <id>`); a fresh Codex spawn is `codex --cd <path>\n   * --no-alt-screen` with no id at all, because the rollout id does not exist\n   * until the CLI writes it. boundConversationId is what distinguishes the two:\n   * it is set once that rollout has been discovered.\n   */\n  spawnArgvToken(session: ManagedSession): string {\n    if (session.provider !== CODEX_CLI_PROVIDER) return session.id;\n    return session.boundConversationId ?? session.projectPath;\n  }\n\n  /** Restore registry-only metadata after the host mirror has been adopted. */\n  refreshHostedSessionsFromRegistry(): void {\n    for (const session of this.ptyManager.listSessions()) {\n      const row = this.managedSessionsRepo?.get(session.id);\n      const merged: ManagedSession = {\n        ...session,\n        reconciled: true,\n        ...(row?.project_id != null && { projectId: row.project_id }),\n        ...(row?.session_name != null && { sessionName: row.session_name }),\n        ...(row?.bound_conversation_id != null && {\n          boundConversationId: row.bound_conversation_id,\n        }),\n        ...(row?.resumed_from_conversation_id != null && {\n          resumedFromConversationId: row.resumed_from_conversation_id,\n        }),\n      };\n      this.sessionStore.addManaged(merged);\n      void this.deps.watchConversationFile(session.id, merged.boundConversationId ?? session.id);\n    }\n  }\n\n  /**\n   * Mirror a freshly-spawned session into the durable registry (C1 Phase 2).\n   *\n   * Called at each addManaged() site rather than inside SessionStore, because\n   * the store is a pure in-memory structure with no DB dependency and adding\n   * one would drag persistence into every unit test that touches it.\n   *\n   * Best-effort by design: a failed registry write must never break session\n   * start. Losing a row costs post-restart *visibility* for that session, which\n   * is strictly better than refusing to run the agent at all.\n   */\n  recordSessionSpawn(session: ManagedSession): void {\n    if (!this.managedSessionsRepo) return;\n    try {\n      const pid = this.ptyManager.getPid(session.id);\n      this.managedSessionsRepo.recordSpawn({\n        session,\n        pid,\n        // Identity guard against pid reuse: the reconciler requires this token\n        // to appear in the live process's argv before it will claim the pid is\n        // still ours (docs/architecture/2026-07-24-durable-session-runtime.md).\n        //\n        // Reading the real argv here would cost an async `ps` per session start\n        // on a path the user is waiting on, so we record a token we already\n        // know is in it. Claude always carries the session id (`--resume <id>`\n        // on resume, `--session-id <id>` on fresh). A *fresh* Codex spawn does\n        // not — its argv is only `--cd <path> --no-alt-screen`, because the\n        // rollout id doesn't exist yet — so fall back to the project path,\n        // which is present in every spawn path for both providers.\n        //\n        // The fallback is weaker: two sessions in one project share a token, so\n        // it proves \"a process of ours in this project\" rather than \"this exact\n        // session\". It still rejects an unrelated recycled pid, which is the\n        // failure being guarded against.\n        //\n        // Note the Codex id is always *set* (a local placeholder) — it is just\n        // not in the process's argv — so the choice keys off the provider, not\n        // off the id being null.\n        cmdline: pid != null ? this.spawnArgvToken(session) : null,\n        streamerInstanceId: this.streamerInstanceId,\n      });\n    } catch (err) {\n      this.log.warn(\"[registry] failed to record session spawn\", {\n        event: \"registry.spawn_write_failed\",\n        sessionId: session.id,\n        err,\n      });\n    }\n  }\n\n  /**\n   * Stamp every live session as ended-by-shutdown before dispose() kills it.\n   *\n   * PTYManager.dispose() signals each child directly and fires no\n   * onStatusChange, so the registry would otherwise keep rows sitting at\n   * `running` forever and the next boot could not tell a deliberate restart\n   * from a crash. Recording `shutdown` as the status source makes that\n   * distinction explicit rather than inferred.\n   *\n   * Not a `completed_at` write for the agent's own work — the agent did not\n   * finish, we stopped it — but the session is genuinely terminal, so it must\n   * leave the reconciler's probe set.\n   */\n  recordShutdownState(): void {\n    if (!this.managedSessionsRepo) return;\n    const now = new Date();\n    for (const session of this.ptyManager.listSessions()) {\n      try {\n        // No failureReason: a shutdown is not a failure of the session, and\n        // writing one would make a healthy agent look broken on the next boot.\n        // status_source=\"shutdown\" already carries the reason.\n        //\n        // The session's LIVE status, not a flattened `idle`. `completed_at` and\n        // `status_source` are what make the row terminal; overwriting the status\n        // as well erased the one thing a recovered session cannot re-derive —\n        // whether the agent was mid-answer when we stopped it (Phase 5's\n        // `interruptedStatus`). Nothing keys off this value: the reconciler\n        // reads completed_at/pid/boot_token, the rehydrator reads status_source,\n        // and the stub reports `idle` on the wire regardless.\n        this.managedSessionsRepo.recordStatus(session.id, session.status, \"shutdown\", {\n          completedAt: now,\n          lastActivityAt: session.lastActivityAt ?? null,\n          promptCount: session.promptCount,\n        });\n      } catch (err) {\n        // Shutdown must complete regardless. A lost row costs visibility, not\n        // correctness, and throwing here would strand the rest of teardown.\n        this.log.warn(\"[registry] failed to record shutdown state\", {\n          event: \"registry.shutdown_write_failed\",\n          sessionId: session.id,\n          err,\n        });\n      }\n    }\n  }\n}\n","/**\n * POSIX trick: kill(pid, 0) sends no signal but throws ESRCH if no such PID,\n * EPERM if the PID exists but is owned by another user. Either way the\n * process exists; ESRCH alone means dead.\n */\nexport function isPidAlive(pid: number): boolean {\n  if (!Number.isInteger(pid) || pid < 1) return false;\n  try {\n    process.kill(pid, 0);\n    return true;\n  } catch (err) {\n    const code = (err as NodeJS.ErrnoException).code;\n    return code === \"EPERM\"; // exists, just not ours\n  }\n}\n","import type { ManagedSessionRow } from \"../../db/repositories/managed-sessions.repository\";\nimport { resumeIdForRow } from \"./resumeIdentity\";\n\n/** Only a recent restart is eligible for unattended recovery. */\nexport const AUTO_RESUME_WINDOW_MS = 15 * 60 * 1000;\n\n/** Hard ceiling for unattended agent starts during one boot. */\nexport const AUTO_RESUME_MAX = 5;\n\n/** At most two provider processes may be starting at once. */\nexport const AUTO_RESUME_CONCURRENCY = 2;\n\n/** Keep successive starts from landing on the host in the same instant. */\nexport const AUTO_RESUME_STAGGER_MS = 500;\n\nexport type AutoResumeSkipReason =\n  | \"not_shutdown\"\n  | \"not_interrupted\"\n  | \"too_old\"\n  | \"project_missing\"\n  | \"resume_identity_missing\"\n  | \"history_missing\";\n\nexport interface AutoResumeOptions {\n  now: number;\n  projectExists: (projectPath: string) => boolean;\n  historyExists: (row: ManagedSessionRow) => boolean;\n}\n\n/** Why a persisted row must remain a user-driven resume, or null when eligible. */\nexport function autoResumeSkipReason(\n  row: ManagedSessionRow,\n  opts: AutoResumeOptions,\n): AutoResumeSkipReason | null {\n  if (row.status_source !== \"shutdown\") return \"not_shutdown\";\n  if (row.status !== \"running\" && row.status !== \"waiting_input\") return \"not_interrupted\";\n  if (opts.now - row.status_updated_at > AUTO_RESUME_WINDOW_MS) return \"too_old\";\n  if (!opts.projectExists(row.project_path)) return \"project_missing\";\n  if (resumeIdForRow(row) == null) return \"resume_identity_missing\";\n  if (!opts.historyExists(row)) return \"history_missing\";\n  return null;\n}\n\nexport interface AutoResumePlan {\n  attempts: ManagedSessionRow[];\n  skipped: Array<{ row: ManagedSessionRow; reason: AutoResumeSkipReason }>;\n  overflow: ManagedSessionRow[];\n}\n\n/** Preserve repository order while applying eligibility and the per-boot ceiling. */\nexport function planAutoResume(rows: ManagedSessionRow[], opts: AutoResumeOptions): AutoResumePlan {\n  const eligible: ManagedSessionRow[] = [];\n  const skipped: AutoResumePlan[\"skipped\"] = [];\n\n  for (const row of rows) {\n    const reason = autoResumeSkipReason(row, opts);\n    if (reason) skipped.push({ row, reason });\n    else eligible.push(row);\n  }\n\n  return {\n    attempts: eligible.slice(0, AUTO_RESUME_MAX),\n    skipped,\n    overflow: eligible.slice(AUTO_RESUME_MAX),\n  };\n}\n","import type {\n  ManagedSessionRow,\n  SessionLifecycle,\n} from \"../../db/repositories/managed-sessions.repository\";\nimport { resumeIdForRow } from \"./resumeIdentity\";\n\n/**\n * Boot reconciliation (C1 Phase 3a).\n * See docs/architecture/2026-07-24-durable-session-runtime.md.\n *\n * On startup the registry holds rows from previous runs. Some of those\n * processes are gone; some are still alive (the crash and dev-takeover paths\n * exit without reaching ptyManager.dispose(), so agents genuinely outlive the\n * streamer today — they are simply invisible when they do). This module decides\n * which is which.\n *\n * Two rules make it safe:\n *\n *  1. **A stored status is never trusted over a live probe.** A SIGKILLed\n *     streamer never ran its exit writes, so a row can claim `running`\n *     indefinitely. Only the pid probe decides liveness.\n *\n *  2. **Liveness is never treated as identity.** Pids are recycled. A live pid\n *     whose command line does not carry the recorded token is reported\n *     `orphaned` and never signalled — that is the difference between a\n *     durability feature and one that kills an unrelated user process.\n */\n\n/**\n * Reason attached to a row whose pid was never probed because it was recorded\n * under a previous machine boot. Exported so the caller can recognise the\n * abstention and log it, without matching on a free-text string that could\n * drift away from the one produced here.\n */\nexport const PRE_BOOT_REASON = \"recorded before this machine boot\";\n\n/** Result for a single registry row. Pure data — nothing here acts. */\nexport interface ReconcileVerdict {\n  sessionId: string;\n  lifecycle: SessionLifecycle;\n  /** Why this verdict was reached, for logs and the diagnostics surface. */\n  reason: string;\n}\n\nexport interface ReconcileProbe {\n  /** Whether a process currently exists at this pid. */\n  isPidAlive: (pid: number) => boolean;\n  /** Full command line for a live pid, or \"\" when it cannot be read. */\n  getProcessArgs: (pid: number) => Promise<string>;\n  /**\n   * Whether the provider's own history shows this session ended cleanly.\n   * Distinguishes `completed` from `failed` for a process that is gone.\n   */\n  endedCleanly?: (row: ManagedSessionRow) => boolean;\n}\n\n/**\n * Classify one registry row against live process state.\n *\n * Exported separately from reconcileSessions so the decision table can be\n * tested without a database. `currentBootToken` is passed in rather than read\n * here for the same reason — this stays a pure function of its arguments.\n * Omitted/null means the caller has no boot identity, which skips the pre-boot\n * check entirely; the server always supplies one.\n */\nexport async function classifySession(\n  row: ManagedSessionRow,\n  probe: ReconcileProbe,\n  currentInstanceId: string,\n  currentBootToken: string | null = null,\n): Promise<ReconcileVerdict> {\n  const { session_id: sessionId } = row;\n\n  // `resumable` is only an honest verdict when some id can actually resume the\n  // row. A Codex session that died before `watchForCodexRollout` bound its\n  // rollout id has none — `codex resume <placeholder>` fails — so offering it\n  // would spend the user's tap on a guaranteed failure.\n  const resumable = (reason: string): ReconcileVerdict =>\n    resumeIdForRow(row) == null\n      ? {\n          sessionId,\n          lifecycle: \"failed\",\n          reason: \"Codex session ended before its rollout id was known\",\n        }\n      : { sessionId, lifecycle: \"resumable\", reason };\n\n  // A row this run created and completed needs no probe.\n  if (row.completed_at != null) {\n    const clean = probe.endedCleanly?.(row) ?? row.failure_reason == null;\n    return {\n      sessionId,\n      lifecycle: clean ? \"completed\" : \"failed\",\n      reason: `terminal (${row.status_source})`,\n    };\n  }\n\n  // No pid recorded — the spawn write raced the process, or the row predates\n  // pid capture. Nothing to probe, so fall back to whether the provider can\n  // resume it.\n  if (row.pid == null) {\n    return resumable(\"no pid recorded\");\n  }\n\n  // A pid only identifies a process within the boot it was recorded in: pid\n  // assignment restarts at boot, so probing a pre-reboot pid can hit an\n  // unrelated process that inherited the number — and if its argv happens to\n  // contain the recorded token (for a fresh Codex session that is only the\n  // project path) we would claim a live process that is not ours. Equality\n  // only, and a mismatch is always the harmless verdict.\n  if (currentBootToken != null && row.boot_token !== currentBootToken) {\n    return resumable(PRE_BOOT_REASON);\n  }\n\n  if (!probe.isPidAlive(row.pid)) {\n    // The process is gone. No provider answers `endedCleanly` today, so this\n    // used to fall through `?? false` and call every dead session `resumable`,\n    // including ones that died of a diagnosed failure. Decide on the evidence\n    // the registry already holds instead of on a probe nobody supplies — and\n    // still honour the hook if some future provider can answer it.\n    if (probe.endedCleanly?.(row)) {\n      return { sessionId, lifecycle: \"completed\", reason: \"process gone, history ended cleanly\" };\n    }\n    if (row.failure_reason != null) {\n      return { sessionId, lifecycle: \"failed\", reason: \"process gone, failure recorded\" };\n    }\n    // Nothing recorded why — the SIGKILL case, where the row can still say\n    // `running` because no exit write ever ran. Cleanliness is genuinely\n    // unknowable here, and `resumable` is the honest answer.\n    return resumable(\"process gone, resumable from provider history\");\n  }\n\n  // Something is alive at that pid. Identity must be confirmed before we claim\n  // it: an unreadable or non-matching command line means \"cannot confirm\",\n  // never \"confirmed\".\n  const args = await probe.getProcessArgs(row.pid);\n  const token = row.cmdline;\n  if (!token || !args?.includes(token)) {\n    return {\n      sessionId,\n      lifecycle: \"orphaned\",\n      reason: args ? \"pid alive but command line does not match\" : \"pid alive but argv unreadable\",\n    };\n  }\n\n  // Alive and ours. `detached` rather than `attached`: the process survived,\n  // but its PTY master fd died with the streamer that spawned it, so this run\n  // cannot stream its bytes — only observe it through provider history and\n  // offer an explicit resume.\n  const sameRun = row.streamer_instance_id === currentInstanceId;\n  return {\n    sessionId,\n    lifecycle: sameRun ? \"attached\" : \"detached\",\n    reason: sameRun ? \"owned by this run\" : \"survived a previous streamer run\",\n  };\n}\n\n/**\n * Classify every non-terminal row. Returns verdicts only — the caller decides\n * what to persist or broadcast. This function never signals a process.\n */\nexport async function reconcileSessions(\n  rows: ManagedSessionRow[],\n  probe: ReconcileProbe,\n  currentInstanceId: string,\n  currentBootToken: string | null = null,\n): Promise<ReconcileVerdict[]> {\n  return Promise.all(\n    rows.map((row) => classifySession(row, probe, currentInstanceId, currentBootToken)),\n  );\n}\n","// src/agent/dedupe.ts\n//\n// Bounded LRU for per-session progress-event dedupe. Implementation uses the\n// fact that Map iterates in insertion order — re-inserting a key moves it to\n// the end, which is exactly LRU semantics with no extra bookkeeping.\n//\n// Spec §7.1: this is the milestone-B dedupe. The map lives on the session\n// record and dies with the session. Postgres-backed durability is option D,\n// deferred — see tb-multi-agent docs/plans/postgres-dedupe.md.\n\nexport interface ProgressDedupeLRU {\n  hasSeen(eventId: string): boolean;\n  readonly size: number;\n}\n\nexport function createProgressDedupeLRU(capacity: number): ProgressDedupeLRU {\n  if (!Number.isFinite(capacity) || capacity < 1) {\n    throw new Error(`dedupe LRU capacity must be >= 1, got ${capacity}`);\n  }\n  const map = new Map<string, true>();\n\n  return {\n    hasSeen(eventId: string): boolean {\n      if (map.has(eventId)) {\n        // Refresh recency: remove + reinsert moves to most-recent position.\n        map.delete(eventId);\n        map.set(eventId, true);\n        return true;\n      }\n      map.set(eventId, true);\n      if (map.size > capacity) {\n        // Evict the oldest entry (the first key in insertion order).\n        const oldest = map.keys().next().value;\n        if (oldest !== undefined) map.delete(oldest);\n      }\n      return false;\n    },\n    get size(): number {\n      return map.size;\n    },\n  };\n}\n","import { createProgressDedupeLRU } from \"./agent/dedupe\";\nimport { CLAUDE_CODE_PROVIDER } from \"./providers\";\nimport type {\n  DiscoveredProcess,\n  ManagedSession,\n  SessionCursor,\n  SessionListPage,\n  SessionListQuery,\n  SessionResponse,\n  SessionSortKey,\n  SortOrder,\n} from \"./types\";\nimport { confidenceForSource } from \"./types\";\n\nexport class SessionStore {\n  constructor(\n    private readonly visibility: (id: string, session?: ManagedSession) => boolean = () => true,\n  ) {}\n  private managed = new Map<string, ManagedSession>();\n  private discovered = new Map<number, DiscoveredProcess>();\n\n  addManaged(session: ManagedSession): void {\n    this.managed.set(session.id, session);\n  }\n\n  /**\n   * Multi-agent mode only. Attach a dedupe LRU to a session record. Idempotent —\n   * calling twice keeps the existing LRU (and its contents).\n   */\n  initAgentSession(sessionId: string, dedupeCapacity: number): void {\n    const session = this.managed.get(sessionId);\n    if (!session) return;\n    if (session.progressDedupeIds) return;\n    session.progressDedupeIds = createProgressDedupeLRU(dedupeCapacity);\n  }\n\n  updateManaged(sessionId: string, updates: Partial<ManagedSession>): ManagedSession | null {\n    const session = this.managed.get(sessionId);\n    if (!session) return null;\n    Object.assign(session, updates);\n    // A phase only exists *within* a running turn, so leaving `running` clears\n    // it. Enforced here rather than at each transition because only markReady\n    // (running -> waiting_input) clears it in the runners: every other exit —\n    // handleExit, putOnHold, failStartup, in both runners — would otherwise\n    // leave a dead session reporting `{status:\"idle\", subStatus:\"working\"}`\n    // forever, and a merging client cannot express a removed key. Keyed off\n    // `updates.status` rather than the merged status so a phase write (which\n    // carries no status) can never be dropped by a store copy that has not yet\n    // seen the running transition.\n    if (updates.status != null && updates.status !== \"running\") session.subStatus = null;\n    // Likewise a suggestion exists only while the composer is waiting on input.\n    if (updates.status != null && updates.status !== \"waiting_input\") {\n      session.promptSuggestion = null;\n    }\n    return session;\n  }\n\n  removeManaged(sessionId: string): boolean {\n    return this.managed.delete(sessionId);\n  }\n\n  /**\n   * The **live** stored record — mutating it mutates the store. Paired with\n   * `get()`, which hands back a throwaway response copy. Prefer\n   * `updateManaged()` for writes; this is for readers that need the internal\n   * shape (Date fields, `rehydrated`, …) rather than the wire shape.\n   */\n  getManaged(sessionId: string): ManagedSession | null {\n    return this.managed.get(sessionId) ?? null;\n  }\n\n  setDiscovered(processes: DiscoveredProcess[]): void {\n    this.discovered.clear();\n    for (const proc of processes) {\n      this.discovered.set(proc.pid, proc);\n    }\n  }\n\n  /**\n   * The **live** stored records — mutating an element mutates the store. Paired\n   * with `list()`, which hands back throwaway response copies.\n   */\n  listManaged(): ManagedSession[] {\n    return Array.from(this.managed.values());\n  }\n\n  // Build the session list: live PTY sessions (managed) merged with externally\n  // discovered Claude processes. Managed sessions keyed by JSONL UUID take\n  // priority — discovered processes with the same UUID are skipped.\n  //\n  // Returns freshly constructed response objects, NOT references into the\n  // store — hence `Readonly`: writing to one changes nothing, so the compiler\n  // refuses it. Persist state with `updateManaged()`; to decorate a response,\n  // build a new object (`{ ...s, … }`) as `withReconciledLifecycle` does.\n  list(ptyAttachedIds: Set<string>): readonly Readonly<SessionResponse>[] {\n    const results: SessionResponse[] = [];\n    const seenIds = new Set<string>();\n\n    for (const s of this.managed.values()) {\n      if (!this.visibility(s.boundConversationId ?? s.id, s)) continue;\n      results.push(managedToResponse(s, ptyAttachedIds.has(s.id)));\n      seenIds.add(s.id);\n    }\n\n    for (const d of this.discovered.values()) {\n      if (!d.conversationId) continue;\n      if (!this.visibility(d.conversationId)) continue;\n      if (seenIds.has(d.conversationId)) continue;\n      results.push(discoveredToResponse(d, d.conversationId));\n      seenIds.add(d.conversationId);\n    }\n\n    return results;\n  }\n\n  // A freshly constructed response object, NOT a reference into the store —\n  // hence `Readonly`, for the same reason as `list()` above. Use `getManaged()`\n  // when you want the live record.\n  get(sessionId: string, ptyAttachedIds: Set<string>): Readonly<SessionResponse> | null {\n    const managed = this.managed.get(sessionId);\n    if (managed) return managedToResponse(managed, ptyAttachedIds.has(sessionId));\n\n    for (const d of this.discovered.values()) {\n      if (d.conversationId === sessionId) return discoveredToResponse(d, sessionId);\n    }\n\n    return null;\n  }\n\n  // Paginated, sorted, filtered view over the same merged data list() exposes.\n  // The discovery cache can mutate the underlying set between requests, so the\n  // cursor encodes both the chosen sort key value and the session id as a\n  // tiebreaker. New sessions appearing mid-scan are picked up on the next\n  // refetch — see plan for caveats.\n  paginate(ptyAttachedIds: Set<string>, query: SessionListQuery): SessionListPage {\n    const all = this.list(ptyAttachedIds);\n\n    const filtered = query.status?.length\n      ? all.filter((s) => query.status?.includes(s.status))\n      : all;\n\n    const sorted = [...filtered].sort(makeComparator(query.sortBy, query.order));\n\n    const total = sorted.length;\n\n    const startIdx = query.cursor\n      ? findCursorBoundary(sorted, decodeCursor(query.cursor), query.sortBy, query.order)\n      : 0;\n    const page = sorted.slice(startIdx, startIdx + query.limit);\n    const last = page[page.length - 1];\n    const nextCursor =\n      last && startIdx + page.length < sorted.length\n        ? encodeCursor({ k: getSortValue(last, query.sortBy) ?? \"\", id: last.id })\n        : null;\n\n    return { sessions: page, nextCursor, total };\n  }\n}\n\n// Cursor encoding is opaque to clients: base64url(JSON({ k, id })).\nexport function encodeCursor(c: SessionCursor): string {\n  return Buffer.from(JSON.stringify(c), \"utf8\").toString(\"base64url\");\n}\n\nexport function decodeCursor(s: string): SessionCursor {\n  let parsed: unknown;\n  try {\n    parsed = JSON.parse(Buffer.from(s, \"base64url\").toString(\"utf8\"));\n  } catch {\n    throw new Error(\"INVALID_CURSOR\");\n  }\n  if (\n    !parsed ||\n    typeof parsed !== \"object\" ||\n    typeof (parsed as SessionCursor).id !== \"string\" ||\n    ![\"string\", \"number\"].includes(typeof (parsed as SessionCursor).k)\n  ) {\n    throw new Error(\"INVALID_CURSOR\");\n  }\n  return parsed as SessionCursor;\n}\n\nfunction getSortValue(s: SessionResponse, key: SessionSortKey): string | number | undefined {\n  switch (key) {\n    case \"startedAt\":\n      return s.startedAt;\n    case \"lastActivityAt\":\n      return s.lastActivityAt ?? s.startedAt;\n    case \"projectName\":\n      return s.projectName;\n    case \"status\":\n      return statusSortValue(s);\n  }\n}\n\n// `sortBy=status` sorts by an explicit rank, not by the status string: the two\n// live statuses (`running`, `waiting_input`) rank ahead of `idle` as one bucket,\n// and inside a bucket the most recently active session comes first — the order a\n// client renders anyway. A lexicographic sort put `idle` first on `asc`.\n//\n// Both halves are folded into ONE ascending string rather than a rank plus a\n// secondary comparator key, because `findCursorBoundary` resumes a page from\n// `{k, id}` alone: a secondary key it cannot see would put the boundary scan and\n// the sort in disagreement. (Pagination over `status` is still racy by nature —\n// the key mutates and the list is re-derived per request — that is unchanged and\n// out of scope here.)\n//\n// `order=desc` therefore reverses the whole thing: `idle` first, oldest first.\nfunction statusSortValue(s: SessionResponse): string {\n  const rank = s.status === \"idle\" ? 1 : 0;\n  const activeAt = Date.parse(s.lastActivityAt ?? s.startedAt);\n  // Complement so newest sorts first under an ascending compare. Fixed width so\n  // the comparison stays lexicographic-safe.\n  const recency = String(1e15 - (Number.isNaN(activeAt) ? 0 : activeAt)).padStart(16, \"0\");\n  return `${rank}:${recency}`;\n}\n\nfunction compareValues(a: string | number | undefined, b: string | number | undefined): number {\n  // Undefined sorts last regardless of order; callers normalise via getSortValue\n  // so this branch only fires for genuinely missing values.\n  if (a === undefined && b === undefined) return 0;\n  if (a === undefined) return 1;\n  if (b === undefined) return -1;\n  if (typeof a === \"number\" && typeof b === \"number\") return a - b;\n  return String(a).localeCompare(String(b));\n}\n\nfunction makeComparator(key: SessionSortKey, order: SortOrder) {\n  const dir = order === \"asc\" ? 1 : -1;\n  return (a: SessionResponse, b: SessionResponse): number => {\n    const cmp = compareValues(getSortValue(a, key), getSortValue(b, key)) * dir;\n    if (cmp !== 0) return cmp;\n    // Tiebreaker on id is always ascending so the total order is stable\n    // regardless of `order`.\n    return a.id.localeCompare(b.id);\n  };\n}\n\n// Returns the index of the first element strictly *after* the cursor under the\n// chosen ordering. Linear scan is fine: total session counts are in the\n// hundreds, not millions.\nfunction findCursorBoundary(\n  sorted: SessionResponse[],\n  cursor: SessionCursor,\n  key: SessionSortKey,\n  order: SortOrder,\n): number {\n  const dir = order === \"asc\" ? 1 : -1;\n  for (let i = 0; i < sorted.length; i++) {\n    const item = sorted[i];\n    const cmp = compareValues(getSortValue(item, key), cursor.k) * dir;\n    if (cmp > 0) return i;\n    if (cmp === 0 && item.id.localeCompare(cursor.id) > 0) return i;\n  }\n  return sorted.length;\n}\n\n/** Multi-agent sessions set `currentTurnId` (possibly null); PTY sessions leave it undefined. */\nfunction isLiveMultiAgent(s: ManagedSession): boolean {\n  return s.currentTurnId !== undefined && (s.status === \"running\" || s.status === \"waiting_input\");\n}\n\nfunction managedToResponse(s: ManagedSession, ptyAttached: boolean): SessionResponse {\n  return {\n    isSubagent: s.isSubagent ?? false,\n    parentConversationId: s.parentConversationId ?? null,\n    id: s.id,\n    conversationId: s.id,\n    provider: s.provider ?? CLAUDE_CODE_PROVIDER,\n    status: s.status,\n    // Lifecycle for a session this run knows about. `attached` while we hold\n    // its PTY; once the PTY is gone the session is terminal from this run's\n    // perspective — `failed` when it recorded a reason, else `completed`.\n    // A `rehydrated` stub is the exception: the boot rehydrator seeded it from\n    // the durable registry, so it is a previous run's session with no process\n    // behind it — `resumable`, and `historical` rather than `managed`\n    // (docs/plans/live-sessions-persistence-plan.md §4, Phase 1).\n    // A session this run itself put on hold (grace timer, explicit hold_session,\n    // idle reaper) is the other exception: the PTY is gone the same way an exit\n    // leaves it gone, but the conversation is still resumable, not terminal —\n    // `putOnHold` records that by leaving `statusSource: \"shutdown\"` (the only\n    // place either runner sets it), so it is checked here alongside `rehydrated`.\n    // Multi-agent sessions never have a PTY (`currentTurnId` is defined — null\n    // while idle between turns — only on that path). While their status is\n    // still live they are `attached`, not terminal (#438).\n    // Otherwise, terminal requires evidence of termination — a recorded\n    // `failureReason`, or the `completedAt` every exit path stamps. Without\n    // either, no PTY here means the spawn has not landed, which is `starting`,\n    // not `completed` (tb-mobile #508). Scoped to the PTY path only\n    // (`currentTurnId === undefined`) — multi-agent never stamps `completedAt`\n    // at all, so an idle multi-agent session (no pre-attach race to\n    // disambiguate) stays `completed` regardless.\n    lifecycle:\n      ptyAttached || isLiveMultiAgent(s)\n        ? \"attached\"\n        : s.rehydrated || s.statusSource === \"shutdown\"\n          ? \"resumable\"\n          : s.failureReason != null\n            ? \"failed\"\n            : s.currentTurnId === undefined && s.completedAt == null\n              ? \"starting\"\n              : \"completed\",\n    lifecycleSource:\n      ptyAttached || isLiveMultiAgent(s)\n        ? s.reconciled\n          ? \"reconcile\"\n          : \"spawn\"\n        : s.rehydrated\n          ? \"reconcile\"\n          : s.currentTurnId === undefined && s.completedAt == null\n            ? \"spawn\"\n            : \"exit\",\n    // We own its PTY, so `status` is the authoritative signal — no inferred\n    // `activity` is attached for managed sessions.\n    ownership: s.rehydrated ? \"historical\" : \"managed\",\n    projectPath: s.projectPath,\n    projectName: s.projectName,\n    branch: s.branch,\n    lastOutput: s.lastOutput,\n    elapsedMs: (s.completedAt ?? new Date()).getTime() - s.startedAt.getTime(),\n    promptCount: s.promptCount,\n    startedAt: s.startedAt.toISOString(),\n    completedAt: s.completedAt?.toISOString() ?? null,\n    // Unconditional, like completedAt above — do NOT move this into the\n    // `...(x != null && { x })` block below. That guard uses loose `!=`, which\n    // catches null as well as undefined, and would turn an explicit \"no phase\"\n    // back into an absent key. The client merges session frames, so an absent\n    // key keeps the previous value and the indicator latches on a finished\n    // turn — the tb-mobile PR #647 bug, arriving through the serialiser.\n    subStatus: s.subStatus ?? null,\n    // Unconditional for the same reason as subStatus: absence must never be a\n    // third state on the wire.\n    promptSuggestion: s.promptSuggestion ?? null,\n    ptyAttached,\n    ...(s.projectId != null && { projectId: s.projectId }),\n    ...(s.sessionName != null && { sessionName: s.sessionName }),\n    ...(s.model != null && { model: s.model }),\n    ...(s.effort != null && { effort: s.effort }),\n    ...(s.account != null && { account: s.account }),\n    ...(s.messageCount != null && { messageCount: s.messageCount }),\n    ...(s.preview != null && { preview: s.preview }),\n    ...(s.firstMessageText != null && { firstMessageText: s.firstMessageText }),\n    ...(s.firstMessageAt != null && { firstMessageAt: s.firstMessageAt.toISOString() }),\n    ...(s.lastMessageText != null && { lastMessageText: s.lastMessageText }),\n    ...(s.lastMessageAt != null && { lastMessageAt: s.lastMessageAt.toISOString() }),\n    ...(s.lastActivityAt != null && { lastActivityAt: s.lastActivityAt.toISOString() }),\n    // C3: how the status was derived, and how far to trust it. Confidence is\n    // derived from the source rather than stored, so the two cannot disagree.\n    ...(s.statusSource != null && {\n      statusSource: s.statusSource,\n      statusConfidence: confidenceForSource(s.statusSource),\n    }),\n    ...(s.statusUpdatedAt != null && { statusUpdatedAt: s.statusUpdatedAt.toISOString() }),\n    ...(s.filePath != null && { filePath: s.filePath }),\n    ...(s.failureReason != null && { failureReason: s.failureReason }),\n    ...(s.resumedFromConversationId != null && {\n      resumedFromConversationId: s.resumedFromConversationId,\n    }),\n    ...(s.forkedFromConversationId != null && {\n      forkedFromConversationId: s.forkedFromConversationId,\n    }),\n    ...(s.boundConversationId != null && { boundConversationId: s.boundConversationId }),\n    ...(s.interruptedStatus != null && { interruptedStatus: s.interruptedStatus }),\n  };\n}\n\nfunction discoveredToResponse(d: DiscoveredProcess, conversationId: string): SessionResponse {\n  return {\n    id: conversationId,\n    conversationId,\n    provider: d.provider,\n    // Stays \"idle\" deliberately: we cannot see this process's prompt state, and\n    // reporting `running` would route mobile to the destructive Overtake screen.\n    // Liveness travels in the additive fields below instead.\n    status: \"idle\",\n    ownership: \"external\",\n    // Discovery just enumerated this PID, so it was alive moments ago. We never\n    // report \"gone\" here — a vanished process simply stops being listed.\n    processLiveness: \"alive\",\n    // Alive, but spawned outside this streamer, so we hold no PTY for it. That\n    // is precisely `detached` — and it is strictly more informative than the\n    // `status: \"idle\"` above, which discovery is forced to report because it\n    // cannot see the process's prompt state.\n    lifecycle: \"detached\",\n    lifecycleSource: \"probe\",\n    // No PTY here, so nothing to scrape and no phase to report. Emitted\n    // explicitly rather than omitted, for the same reason as in\n    // managedToResponse: absence must never be a third state on the wire.\n    subStatus: null,\n    promptSuggestion: null,\n    projectPath: d.projectPath,\n    projectName: d.projectName,\n    branch: d.branch,\n    lastOutput: \"\",\n    elapsedMs: Date.now() - d.startedAt.getTime(),\n    promptCount: 0,\n    startedAt: d.startedAt.toISOString(),\n    completedAt: null,\n    ptyAttached: false,\n    pid: d.pid,\n  };\n}\n","import type { Stage } from \"@threadbase-sh/agent-types\";\nimport type { ProgressDedupeLRU } from \"./agent/dedupe\";\nimport type { ClaudeFlagValues, EffortLevel, PermissionMode } from \"./claude-flags\";\nimport type { FeatureFlagValues } from \"./feature-flags\";\nimport type { ProviderName } from \"./providers\";\nimport type { PromptEvent, PromptSnapshot } from \"./services/prompts/promptRegistry\";\n\n// ─── Session Lifecycle ─────────────────────────────────────────────\n\nexport type SessionStatus = \"running\" | \"waiting_input\" | \"idle\";\n\n/**\n * Phase axis *inside* `status === \"running\"` — what the agent is doing during a\n * turn. Deliberately a separate field rather than new SessionStatus members:\n * VALID_STATUSES rejects unknown values and the store drops sessions outside\n * the requested set, so a new status string would make those sessions vanish\n * from already-shipped apps. Additive fields are safe; additive values in a\n * union a shipped client filters on are not.\n *\n * The full set is defined here even though Codex only ever emits `working`\n * (its status bar is binary — Ready/Working, and claiming otherwise would be\n * invention). Defining it up front keeps a two-valued provider from fixing the\n * field's shape before Claude's richer footer lands. Consumers must ignore an\n * unrecognised value rather than coerce it.\n *\n * This union lives in exactly one place. Two independently-maintained copies of\n * a TUI-derived grammar have already drifted once (tb-mobile PR #647).\n */\nexport type AgentPhase = \"thinking\" | \"streaming\" | \"hooks\" | \"acting\" | \"working\";\n\n/**\n * Process-lifetime axis for a managed session (C1 durable session runtime).\n * Orthogonal to SessionStatus — see SessionResponse.lifecycle for why the two\n * are separate, and docs/architecture/2026-07-24-durable-session-runtime.md.\n */\nexport type SessionLifecycle =\n  | \"attached\" // this streamer run owns the PTY and streams its bytes\n  | \"starting\" // registered, spawn in flight; not attached here and no exit observed\n  | \"detached\" // process alive, but this run does not own its fd\n  | \"orphaned\" // something is alive at the recorded pid, identity unconfirmed\n  | \"resumable\" // no live process; provider history supports resume\n  | \"completed\" // terminal, ended cleanly\n  | \"failed\"; // terminal, ended badly\n\n/**\n * How a SessionStatus was derived (C3).\n * See docs/architecture/2026-07-24-session-state-confidence.md.\n *\n * The runners already compute this at every transition — it was written to a log\n * line and discarded, so a status reached by a timer expiring was indistinguishable\n * on the wire from one reached by observing a prompt marker.\n */\nexport type StatusSource =\n  | \"spawn\" // initial state when the process started\n  | \"prompt-marker\" // a provider prompt marker appeared in the stream\n  | \"screen-marker\" // marker found by re-reading the rendered screen\n  | \"user-input\" // we wrote input, so it is running by construction\n  | \"process-exit\" // the process exited; status follows from that\n  | \"timeout-fallback\" // NO marker appeared; a timer elapsed and we assumed\n  | \"quiet-fallback\" // the PTY fell silent during boot; we assumed\n  | \"shutdown\"; // the streamer terminated it\n\n/**\n * How much to trust the status.\n *\n * `observed` — something in the stream or the process told us.\n * `inferred` — a timer expired and we picked the most likely state.\n *\n * Deliberately two buckets rather than a numeric score: a percentage would imply\n * a calibration we have no data to support. The point is that a guess must never\n * be presented as an observation.\n */\nexport type StatusConfidence = \"observed\" | \"inferred\";\n\n/** Confidence implied by each source. Inference is exactly the timer-driven paths. */\nexport function confidenceForSource(source: StatusSource): StatusConfidence {\n  return source === \"timeout-fallback\" || source === \"quiet-fallback\" ? \"inferred\" : \"observed\";\n}\n\nexport interface ManagedSession {\n  isSubagent?: boolean;\n  parentConversationId?: string | null;\n  id: string; // JSONL UUID — the .jsonl filename under ~/.claude/projects/\n  provider?: ProviderName;\n  projectId?: string; // Stable identity into the projects table (added during migration).\n  projectPath: string;\n  projectName: string;\n  branch: string;\n  status: SessionStatus;\n  startedAt: Date;\n  completedAt: Date | null;\n  promptCount: number;\n  lastOutput: string;\n  failureReason?: string;\n  /**\n   * Machine-readable companion to `failureReason`, set only when the runner\n   * recognised the failure. Currently just `codex_active_writer` (Codex's\n   * single-writer lock), which the resume path maps to a structured 409 rather\n   * than reporting a spawn as successful. Absent for every other failure.\n   */\n  failureCode?: string;\n  sessionName?: string;\n  model?: string;\n  /**\n   * Reasoning-effort tier this session is running with.\n   *\n   * Seeded from the resolved spawn config rather than scraped, because\n   * `session_update` is event-driven and has no screen to read. `GET\n   * /api/sessions/:id` still prefers a live status-line scrape, which is\n   * authoritative if the user changed it inside the terminal.\n   */\n  effort?: string;\n  account?: string;\n  messageCount?: number;\n  preview?: string;\n  firstMessageText?: string;\n  firstMessageAt?: Date;\n  lastMessageText?: string;\n  lastMessageAt?: Date;\n  lastActivityAt?: Date;\n  /**\n   * How `status` was derived, and when (C3). Confidence is derived from the\n   * source via confidenceForSource — storing both would let them disagree.\n   */\n  statusSource?: StatusSource;\n  statusUpdatedAt?: Date;\n  /**\n   * Agent phase within a running turn, scraped from the rendered screen.\n   * Optional internally (every existing construction site predates it), but\n   * managedToResponse emits it unconditionally as `?? null` — on the wire\n   * absence must never be a third state, because the client merges session\n   * frames and a merge cannot express a removed key.\n   *\n   * Cleared in markReady() for the running -> waiting_input turn end, which is\n   * the only exit a runner observes on screen. Every other way out of `running`\n   * — handleExit, putOnHold, failStartup — is enforced by SessionStore\n   * .updateManaged() instead: a phase exists only while the status is\n   * `running`, so leaving it clears the field.\n   */\n  subStatus?: AgentPhase | null;\n  /**\n   * Claude Code's dim \"next prompt\" suggestion from the composer row, scraped\n   * from cell attributes (see detectPromptSuggestion). Exists only while the\n   * status is `waiting_input`; SessionStore.updateManaged() clears it on any\n   * other status. Emitted unconditionally as `?? null` for the same reason as\n   * `subStatus`.\n   */\n  promptSuggestion?: string | null;\n  filePath?: string;\n  resumedFromConversationId?: string;\n\n  /**\n   * This session was seeded from the durable registry at boot, not spawned by\n   * this run — there is no PTY behind it and never was one in this process.\n   *\n   * INTERNAL. It never reaches the wire: `managedToResponse` translates it into\n   * the already-defined `ownership: \"historical\"` + `lifecycle: \"resumable\"`\n   * pair, so no client needs to learn a new field to render a recovered session.\n   * Cleared implicitly when a resume overwrites the stub with a real session.\n   */\n  rehydrated?: boolean;\n\n  /**\n   * This live session was re-adopted from the pty-host during boot rather than\n   * spawned by this streamer process. Internal lifecycle provenance only.\n   */\n  reconciled?: boolean;\n\n  /**\n   * What this session was doing when the streamer stopped it, for a stub whose\n   * `status` had to flatten to `idle`. Only ever set from a registry row whose\n   * `status_source` is `shutdown` — the one source that means \"we ended this\",\n   * as opposed to the agent finishing or a crash freezing the row mid-turn.\n   */\n  interruptedStatus?: \"running\" | \"waiting_input\";\n\n  /**\n   * Set once a live session's underlying persisted conversation file is\n   * discovered after the fact (currently: fresh Codex sessions, whose\n   * rollout id isn't known until the CLI creates its own JSONL). Distinct\n   * from `resumedFromConversationId` (resume flow) and `conversationId` on\n   * `SessionResponse` (stable mobile deep-link alias, always === id for the\n   * lifetime of a live PTY) — must never be written into either of those.\n   */\n  boundConversationId?: string;\n\n  /**\n   * Source conversation this session was FORKED from (`codex fork`). Distinct\n   * from `resumedFromConversationId`: a resume continues one conversation, a\n   * fork starts a second one whose history diverges from the source at the fork\n   * point — and the source keeps its own owner, which is the entire point.\n   */\n  forkedFromConversationId?: string;\n\n  /**\n   * Multi-agent mode only. Per-session in-memory LRU of progress event ids\n   * seen by the webhook receiver. Used to drop Temporal-replay duplicates\n   * before they reach the WebSocket. See spec §7.1.\n   */\n  progressDedupeIds?: ProgressDedupeLRU;\n\n  /** Multi-agent: current stage of the active turn (advisory; advisory wire field). */\n  stage?: Stage | string;\n\n  /** Multi-agent: ms since the session last emitted a stage transition. */\n  stalledSinceMs?: number;\n\n  /** Multi-agent: 1 or 2 when stage === \"rework\". */\n  reworkAttempt?: number;\n\n  /**\n   * Multi-agent: id of the in-flight turn, or null when idle. Set when\n   * `POST /api/sessions/:id/input` accepts a request; cleared by the webhook\n   * receiver on stage=done or terminal_failure. Undefined in PTY mode.\n   */\n  currentTurnId?: string | null;\n\n  /**\n   * Multi-agent resume: stable identity of the underlying conversation\n   * (the JSONL filename), distinct from `id` which is per-orchestrator-instance.\n   * Undefined in PTY mode (PTY uses `resumedFromConversationId` instead).\n   */\n  conversationId?: string;\n}\n\nexport interface DiscoveredProcess {\n  pid: number;\n  /**\n   * Which agent this process is running. Discovery used to find only Claude, so\n   * every consumer could assume it; a discovered Codex session must not be\n   * reported — or adopted — as a Claude one.\n   */\n  provider: ProviderName;\n  projectPath: string;\n  projectName: string;\n  branch: string;\n  conversationId: string | null; // JSONL UUID extracted from --resume arg\n  startedAt: Date;\n}\n\n// ─── WebSocket Messages ────────────────────────────────────────────\n\nexport interface AskOption {\n  label: string;\n  description: string;\n  preview?: string;\n}\n\nexport interface AskQuestion {\n  question: string;\n  header: string;\n  multiSelect: boolean;\n  options: AskOption[];\n}\n\n// A permission-gate option scraped from the rendered screen. `index` is the\n// ACTUAL on-screen number (e.g. 2, 3), not a 1-based array index — gates can\n// show \"2. Yes / 3. No\". Mobile answers by sending `${index}\\r` via the\n// existing /input { keys } route.\nexport interface PermissionOption {\n  index: number;\n  label: string;\n  // Literal keystroke bytes that answer this option (e.g. \"y\\r\", \"2\\r\"), set by\n  // the unstructured shell-prompt detector (detectShellPrompt). Authoritative\n  // over `index` when present; absent for OSC-777 gates. Additive — old clients\n  // ignore it and fall back to `${index}\\r`.\n  answerKeys?: string;\n}\n\n// A user message the streamer submitted to the PTY. `ts` is epoch ms recorded\n// at submit time.\nexport interface UserMessage {\n  text: string;\n  ts: number;\n}\n\nexport type WSMessage =\n  // `seq` is a per-session monotonically increasing chunk counter (starts at\n  // 1). Additive — old clients ignore it. Lets a client detect a stale chunk\n  // delivered after a reconnect/replay race (seq not > its last-seen seq for\n  // this session) instead of trusting raw WS arrival order.\n  | { type: \"terminal_output\"; sessionId: string; data: string; seq?: number }\n  | {\n      type: \"session_update\";\n      session?: SessionResponse;\n      sessionId?: string;\n      // Multi-agent additive fields. Existing clients ignore these.\n      turnId?: string;\n      stage?: Stage | string;\n      stalledSinceMs?: number;\n      reworkAttempt?: number;\n    }\n  /**\n   * Agent phase changed within a running turn. Scoped to that session's\n   * subscribers, like terminal_output and user_message.\n   *\n   * A minimal frame rather than a SessionResponse copy, deliberately:\n   * managedToResponse recomputes `elapsedMs` from `new Date()` on every call\n   * for a live session, so a session copy would differ on every tick whether\n   * or not the phase changed — and a client that merges frames would get a\n   * fresh object identity several times a second, re-rendering every consumer\n   * for the whole turn.\n   *\n   * `phase` is always present and is `null` when there is no phase. Absence\n   * must never carry meaning: clients merge session state, and a merge cannot\n   * express a removed key, so an omitted field would keep its previous value\n   * and the indicator would latch on a finished turn.\n   */\n  | {\n      type: \"session_phase\";\n      sessionId: string;\n      phase: AgentPhase | null;\n      updatedAt: string; // ISO 8601\n    }\n  /**\n   * The composer's predicted next prompt changed. Scoped to the session's\n   * subscribers and minimal like `session_phase`. `text` is always present and\n   * `null` means cleared — absence must never carry meaning.\n   */\n  | {\n      type: \"prompt_suggestion\";\n      sessionId: string;\n      text: string | null;\n      updatedAt: string; // ISO 8601\n    }\n  | { type: \"session_list\"; sessions: readonly SessionResponse[] }\n  | { type: \"conversation_event\"; sessionId: string; line: string }\n  // Additive batched variant: one message carries all lines from a single\n  // watcher read. Old clients ignore it and rely on conversation_event.\n  // `seqs`, when present, is parallel to `lines`: seqs[i] is the message_index\n  // (offset-index seq) of lines[i], or null for a non-message line. Additive —\n  // old clients ignore it.\n  | { type: \"conversation_events\"; sessionId: string; lines: string[]; seqs?: (number | null)[] }\n  // A conversation's cached row advanced. Emitted after the cache write for a\n  // live external (non-PTY) tail so list rows can refresh without polling\n  // ?refresh=1. Additive — old clients ignore it.\n  | {\n      type: \"conversation_updated\";\n      conversationId: string;\n      messageCount: number;\n      lastActivity: string;\n      ownership: \"external\" | \"managed\";\n    }\n  // Structured interactive prompt (AskUserQuestion). Old clients ignore it.\n  | { type: \"question\"; sessionId: string; toolUseId: string; questions: AskQuestion[] }\n  | { type: \"question_cancelled\"; sessionId: string; toolUseId: string }\n  // Permission gate (OSC 777). Additive; old clients ignore it. `options`/`cursor`\n  // are scraped from the rendered screen and may be absent if not yet painted.\n  | {\n      type: \"permission\";\n      sessionId: string;\n      prompt?: string;\n      detail?: string;\n      options: PermissionOption[];\n      cursor?: number;\n      /**\n       * Cursor-stripped identity of this gate (permissionGateKey). Echoed\n       * verbatim, as an opaque token, to POST /:id/permission/answer. Always\n       * present when the server has that route — its absence is how a client\n       * detects an older server and falls back to POST /:id/input.\n       */\n      contentKey: string;\n      /**\n       * Server-owned id of THIS gate instance. contentKey is content-derived\n       * and cannot tell two consecutive identical gates apart; gateId can.\n       * Echoed as an opaque token to POST /:id/permission/answer, which refuses\n       * an answer whose gateId is not the pending instance. Additive: clients\n       * that omit it fall back to contentKey-only identity.\n       */\n      gateId: string;\n    }\n  | { type: \"permission_cancelled\"; sessionId: string }\n  // Unicast reply to a client's `hold_session` frame, echoed to the requesting\n  // socket only (not broadcast). `applied` distinguishes an immediate hold\n  // from a latch armed for the next running -> waiting_input edge, so the\n  // client can navigate on `ok` without waiting for the PTY to actually exit\n  // (which may be arbitrarily far off for `armed`). Additive; old clients\n  // ignore it.\n  | {\n      type: \"hold_session_result\";\n      sessionId: string;\n      ok: boolean;\n      applied?: \"held\" | \"armed\" | \"grace\";\n      reason?: \"permission_denied\" | \"unknown_when\" | \"no_session\";\n    }\n  | PromptEvent\n  | PromptSnapshot\n  | { type: \"ping\"; ts: number }\n  // Ground-truth user message: the streamer wrote this text to the PTY, so the\n  // client can positively identify user-owned output instead of parsing the\n  // `❯ <text>` transcript line heuristically. Additive; old clients ignore it.\n  | { type: \"user_message\"; sessionId: string; text: string; ts: number }\n  // `seq` is the sender's last-emitted terminal_output seq at replay time (or\n  // absent if no chunk has been emitted yet), so a resubscribing client can\n  // baseline lastSeq before trusting subsequent terminal_output chunks.\n  | {\n      type: \"terminal_replay\";\n      sessionId: string;\n      lines: string[];\n      userMessages?: UserMessage[];\n      seq?: number;\n      // The geometry these lines were rendered at. A TUI addresses rows\n      // absolutely within the viewport, so a client decoding the replay at a\n      // different size resolves those moves to the wrong rows. Additive: absent\n      // means the spawn defaults, which is what an older client assumed anyway.\n      cols?: number;\n      rows?: number;\n    }\n  // A live session's PTY was resized. Broadcast so every subscriber re-bases\n  // its decoder; only something attached asks for this, so it is rare.\n  | { type: \"terminal_resize\"; sessionId: string; cols: number; rows: number }\n  | { type: \"session_ready\"; session: SessionResponse }\n  // Multi-agent additive variants. Old clients ignore unknown types.\n  | {\n      type: \"agent_output\";\n      sessionId: string;\n      turnId: string;\n      role: \"worker\" | \"reviewer\" | \"signoff\";\n      content: string;\n      partial?: boolean;\n      reviewerOverruled?: boolean;\n      stage?: Stage | string;\n      reworkAttempt?: number;\n    }\n  | {\n      type: \"turn_failure\";\n      sessionId: string;\n      turnId: string;\n      reason: string;\n    }\n  | { type: \"cache_ready\" }\n  | { type: \"scan_progress\"; scanned: number; total: number }\n  // Cache-integrity drift alert (server-level, no sessionId). Broadcast on\n  // raise/severity-change and unicast to a client on WS open while pending.\n  // Old clients ignore unknown types. See cacheIntegrityMonitor.ts.\n  | {\n      type: \"cache_alert\";\n      fingerprint: string;\n      severity: \"high\" | \"low\";\n      missingCount: number;\n      totalRows: number;\n      detectedAt: string;\n      sample: { id: string; title?: string }[]; // first 20\n    }\n  | { type: \"cache_alert_resolved\"; fingerprint: string; action: CacheAlertResolveAction }\n  // Host pressure (server-level, no sessionId). Broadcast on level change and\n  // unicast on WS open while currently warned. Additive; old clients ignore it.\n  | {\n      type: \"host_pressure\";\n      level: HostPressureLevel;\n      reasons: HostPressureReason[];\n      liveAgents: number;\n      updatedAt: string;\n      /** Additive: Node `process.platform` of the host. Old clients ignore it. */\n      os?: HostPressureOs;\n    }\n  | { type: \"host_pressure_cleared\"; updatedAt: string };\n\n/** Coarse host-starvation level pushed on `host_pressure`. Never `ok` on the wire. */\nexport type HostPressureLevel = \"elevated\" | \"critical\";\n\n/** Why the host is starved, worst-first. Enum, not English. */\nexport type HostPressureReason = \"memory\" | \"event_loop\" | \"load\" | \"agents\";\n\n/** Host OS for client advice. win32 covers 32- and 64-bit Windows. */\nexport type HostPressureOs = \"darwin\" | \"linux\" | \"win32\";\n\n/** The four cache-integrity resolution actions (POST /api/cache/alert/resolve). */\nexport type CacheAlertResolveAction = \"prune_all\" | \"prune_selected\" | \"ignore\" | \"reset_rescan\";\n\n// ─── REST Response Shapes ──────────────────────────────────────────\n\nexport type ServerWarmupState = \"startup\" | \"cache_reset\" | \"conversation_refresh\";\n\nexport interface ServerWarmingUpResponse {\n  error: \"Server is warming up\";\n  code: \"SERVER_WARMING_UP\";\n  warmupState: ServerWarmupState;\n}\n\nexport interface SessionResponse {\n  isSubagent?: boolean;\n  parentConversationId?: string | null;\n  id: string; // JSONL UUID\n  conversationId: string; // alias for id — mobile uses this to build deep-link URLs\n  provider?: ProviderName;\n  projectId?: string; // Stable identity into the projects table (added during migration).\n  status: SessionStatus;\n  projectPath: string;\n  projectName: string;\n  branch: string;\n  lastOutput: string;\n  elapsedMs: number;\n  promptCount: number;\n  startedAt: string;\n  completedAt: string | null;\n  ptyAttached: boolean; // true when a live PTY is spawned for this session\n  /**\n   * Process-lifetime axis, orthogonal to `status` (C1).\n   *\n   * `status` answers \"what is the agent doing\" (running / waiting_input /\n   * idle); `lifecycle` answers \"does this process still exist and do we own\n   * it\". They were conflated before: `idle` meant finished, killed-to-save-\n   * resources, and externally-discovered all at once, so a client could not\n   * tell a completed session from one we terminated.\n   *\n   * Additive and optional — `ptyAttached` keeps its meaning (=== \"attached\"),\n   * so a client that ignores this behaves exactly as it did before. `\"starting\"`\n   * is additive in the same way: a session we hold no PTY for and have observed\n   * no exit for reports it instead of the `\"completed\"` it used to, so a client\n   * can tell \"not attached yet\" from \"ended\" (tb-mobile #508).\n   */\n  /**\n   * How `status` was derived and how far to trust it (C3). Additive: `status`\n   * keeps its exact meaning, so a client ignoring these behaves as before.\n   * An `inferred` confidence means a timer expired and we assumed — not that\n   * anything in the stream confirmed the state.\n   */\n  statusSource?: StatusSource;\n  statusConfidence?: StatusConfidence;\n  statusUpdatedAt?: string; // ISO 8601\n  lifecycle?: SessionLifecycle;\n  /** How `lifecycle` was determined, so stale values are visible not implied. */\n  lifecycleSource?: \"spawn\" | \"exit\" | \"probe\" | \"reconcile\";\n  lifecycleUpdatedAt?: string; // ISO 8601\n  /**\n   * ADDITIVE (plan Phase 5). What a recovered session was doing when the\n   * streamer stopped it, so a client can say \"interrupted mid-response\" instead\n   * of the `idle` its `status` is forced to report — a stub holds no PTY, and a\n   * novel SessionStatus value would be dropped by `?status=` filtering on\n   * already-shipped clients. Present only on rows whose `status_source` was\n   * `shutdown`; older clients ignore it.\n   */\n  interruptedStatus?: \"running\" | \"waiting_input\";\n  failureReason?: string;\n  pid?: number;\n  sessionName?: string;\n  model?: string;\n  /**\n   * Reasoning-effort tier scraped from the live PTY status line (e.g. \"high\").\n   * Live sessions only — absent for historical/resumable conversations.\n   */\n  effort?: string;\n  /**\n   * Active permission mode from the live PTY status line (e.g. \"accept edits on\").\n   * Live sessions only.\n   */\n  permissionMode?: string;\n  /**\n   * Agent phase within a running turn, scraped from the rendered PTY screen.\n   *\n   * NOT optional, and always serialised — `null` when there is no phase. A\n   * client that merges session frames (`{...prev, ...next}`) cannot express a\n   * removed key, so an omitted field would keep its previous value and the\n   * indicator would latch on a finished turn. That is the bug tb-mobile PR #647\n   * shipped; absence must never carry meaning here.\n   *\n   * Consequently this must NOT be moved into the `...(x != null && { x })`\n   * guard block in managedToResponse: `!= null` catches null and undefined\n   * alike and would convert an explicit clear back into absence.\n   */\n  subStatus: AgentPhase | null;\n  /**\n   * Claude Code's predicted next prompt, or `null`. Always serialised, never\n   * omitted — a merging client cannot express a removed key, so an absent\n   * field would keep a stale suggestion on screen. Do not move it into a\n   * `...(x != null && { x })` block.\n   */\n  promptSuggestion: string | null;\n  account?: string;\n  messageCount?: number;\n  preview?: string;\n  firstMessageText?: string;\n  firstMessageAt?: string;\n  lastMessageText?: string;\n  lastMessageAt?: string;\n  lastActivityAt?: string;\n  filePath?: string;\n  resumedFromConversationId?: string;\n  /** See `ManagedSession.forkedFromConversationId`. Additive; older clients ignore it. */\n  forkedFromConversationId?: string;\n  /** See `ManagedSession.boundConversationId` — never repurposes `conversationId`. */\n  boundConversationId?: string;\n  /**\n   * Who owns the underlying process. Additive — older clients ignore it, and it\n   * deliberately does NOT introduce a new `status` value: `VALID_STATUSES`\n   * rejects unknown values in `?status=` and the store drops sessions outside\n   * the requested set, so a new status string would make these sessions vanish\n   * from already-shipped apps.\n   *   managed    — this streamer spawned and holds the PTY\n   *   external   — a process we discovered but do not own (read-only)\n   *   historical — a cached conversation, no process known\n   */\n  ownership?: SessionOwnership;\n  /**\n   * Whether the process is believed to be running. Only ever \"alive\" when\n   * discovery actually saw it; never guessed from file activity.\n   */\n  processLiveness?: ProcessLiveness;\n  /**\n   * INFERRED from JSONL writes, never authoritative: \"active_writing\" means the\n   * transcript grew recently, which cannot distinguish a generating agent from\n   * one blocked on a permission gate (gates are screen-only). Absent for\n   * sessions we own — their `status` is the authoritative signal.\n   */\n  activity?: SessionActivity;\n}\n\nexport type SessionOwnership = \"managed\" | \"external\" | \"historical\";\nexport type ProcessLiveness = \"alive\" | \"gone\" | \"unknown\";\n\nexport interface SessionActivity {\n  state: \"active_writing\" | \"quiet\";\n  lastEventAt: string;\n  source: \"jsonl\";\n}\n\nexport interface ConversationListResponse {\n  conversations: unknown[];\n  hasMore: boolean;\n  offset: number;\n  total: number;\n}\n\n// ─── Sessions Pagination ───────────────────────────────────────────\n\nexport type SessionSortKey = \"startedAt\" | \"lastActivityAt\" | \"projectName\" | \"status\";\nexport type SortOrder = \"asc\" | \"desc\";\n\nexport interface SessionListPage {\n  /** Response copies, like `SessionStore.list()` — see the note there. */\n  sessions: readonly Readonly<SessionResponse>[];\n  nextCursor: string | null;\n  total: number;\n}\n\nexport interface SessionListQuery {\n  limit: number;\n  cursor?: string;\n  sortBy: SessionSortKey;\n  order: SortOrder;\n  status?: SessionStatus[];\n}\n\n// Decoded cursor payload. `k` is the value of the chosen sort key for the\n// last item on the previous page; `id` is the tiebreaker.\nexport interface SessionCursor {\n  k: string | number;\n  id: string;\n}\n\n// ─── Configuration ─────────────────────────────────────────────────\n\nexport interface ServerConfig {\n  port: number;\n  host?: string;\n  apiKey?: string;\n  /** 'cli' when --api-key was passed; rotation persists in-memory only and reverts on restart */\n  apiKeySource?: \"config\" | \"cli\";\n  localNoAuth?: boolean;\n  verbose?: boolean;\n  // Also log the menubar app's HEALTHY /healthz polls (default: false — they are\n  // ~17 280 lines/day and carry nothing). A menubar request that is not a\n  // healthy /healthz poll is logged regardless; see src/api/app.ts.\n  logMenubarRequests?: boolean;\n  browseRoot?: string;\n  publicUrl?: string;\n  browserCors?: string;\n  disableDb?: boolean;\n  scanProfiles?: Array<{\n    id: string;\n    label: string;\n    configDir: string;\n    enabled: boolean;\n    emoji: string;\n  }>;\n  codexRoots?: string[]; // paths to codex sessions dirs; empty array disables codex scanning\n  cursorRoots?: string[]; // paths to Cursor project dirs; empty array disables cursor scanning\n  // false forces every ConversationScanner to run in-memory (persistent: false)\n  // instead of the scanner package's shared default SQLite index at\n  // ~/.config/threadbase-scanner/index.db. That index isn't scoped by\n  // scanProfiles, so multiple StreamerServer instances (e.g. test servers)\n  // see each other's — and any real serve instance's — indexed conversations.\n  // Default true (real serve usage keeps the persistent index).\n  scannerPersistent?: boolean;\n  // Skip the startup cache warm-up scan (default false — real servers warm up).\n  //\n  // A test hook, and specifically a flake fix. `listen()` kicks off a full scan\n  // of every conversation on the machine, and `close()` awaits it so a post-scan\n  // cache write can't hit a closed database. On a loaded machine that scan takes\n  // tens of seconds against a developer's real ~/.claude/projects, so any test\n  // that constructs a server pays it twice (listen + close) and can overrun the\n  // vitest timeout — measured at 34s for a single close() during a full-suite\n  // run. Tests that never read conversation data should set this.\n  //\n  // The cache and repositories are still opened; only the scan and its\n  // dependent cache writes are skipped, so /api/conversations serves an empty\n  // cache rather than throwing.\n  skipStartupWarmup?: boolean;\n  ptyGracePeriodMs?: number; // ms to wait after WS disconnect before killing PTY (default 270000, 4.5 minutes); 0 disables the auto-hold timer (explicit hold_session still works)\n  /**\n   * Re-start interrupted sessions at boot instead of listing them for the user\n   * to tap (plan Phase 7). A boolean here rather than the tri-state the loader\n   * returns: by the time a ServerConfig is built the \"never asked\" case has\n   * already resolved to false. Precedence: explicit here → `auto_resume_on_boot`\n   * in server.yaml → false. Never enabled implicitly — it is the one setting\n   * that starts an agent nobody asked for in that moment.\n   */\n  autoResumeOnBoot?: boolean;\n  cacheDir?: string;\n  // Path to the authoritative session registry. Defaults to runtime.db beside\n  // server.yaml (THREADBASE_CONFIG_DIR aware) — never under cacheDir, which a\n  // reset-and-rescan is allowed to delete.\n  runtimeDbPath?: string;\n  tailSize?: number;\n  directoryScanDebounceMs?: number; // trailing debounce before flagging the scanner stale on directory events (default 1000)\n  defaultSystemPrompt?: string; // prepended to every PTY session's --system-prompt; overrides the built-in default\n  // Codex has no --system-prompt flag — the only injection point is the\n  // positional [PROMPT] argument, which Codex treats as the opening turn\n  // rather than a system-level instruction. Off by default so a fresh Codex\n  // session never gets an uninvited first message; enable to send the built\n  // system prompt (+ browse-root boundary + client prompt) that way anyway.\n  //\n  // LEGACY EXPLICIT OVERRIDE, not a second source of truth: this is the same\n  // bit as featureFlags.codexSystemPrompt (see src/feature-flags.ts) and, when\n  // set, outranks every other source. It predates the flag registry and is kept\n  // so embedders and tests that set it directly keep working.\n  codexSystemPromptEnabled?: boolean;\n  // Feature-flag values from the CLI (`--feature <id=bool>`). Outranked by the\n  // matching env var and by codexSystemPromptEnabled above; outranks\n  // feature_flags: in server.yaml. See resolveFeatureFlags().\n  featureFlags?: FeatureFlagValues;\n  defaultPermissionMode?: PermissionMode; // Claude Code --permission-mode for spawned PTY sessions (default \"acceptEdits\")\n  defaultModel?: string; // Claude Code --model for spawned PTY sessions (default \"sonnet\")\n  defaultEffort?: EffortLevel; // Claude Code --effort for spawned PTY sessions (default \"low\")\n  claudeFlags?: ClaudeFlagValues; // allowlisted Claude CLI flags appended to every spawn (see src/claude-flags.ts)\n  claudeExtraArgs?: string; // free-text argv appended after claudeFlags; unvalidated escape hatch\n}\n\n// ─── PTY Manager ───────────────────────────────────────────────────\n\nexport interface PTYManagerOptions {\n  onOutput?: (sessionId: string, data: string) => void;\n  onStatusChange?: (session: ManagedSession) => void;\n  onReady?: (session: ManagedSession) => void;\n  // Fired when a permission gate opens (gate !== null, scraped from the rendered\n  // screen) or closes (gate === null). Detected live from the PTY stream (OSC\n  // 777 + rendered options) — not JSONL. Additive; absent in tests that omit it.\n  onPermissionChange?: (\n    sessionId: string,\n    gate: {\n      prompt?: string;\n      detail?: string;\n      options: PermissionOption[];\n      cursor?: number;\n    } | null,\n    occurrenceId?: string,\n  ) => void;\n  /**\n   * Fired when the agent's phase within a running turn changes, including to\n   * `null` at turn end. Additive; absent in tests that omit it.\n   *\n   * Deliberately NOT routed through onStatusChange, even though that callback\n   * already exists and is already relayed across the pty-host boundary. Its\n   * handler writes a DB row per invocation with no same-status guard, refreshes\n   * the scanner index, broadcasts globally, and pokes the APNs and push\n   * notifiers — machinery built for a handful of transitions per session, not\n   * for a signal that can fire every SCRAPE_THROTTLE_MS.\n   *\n   * The server must broadcast this to that session's subscribers only\n   * (wsHub.broadcastToClients), as a minimal frame rather than a SessionResponse\n   * copy: managedToResponse recomputes elapsedMs on every call, so a session\n   * copy would differ every tick and re-render every client consumer of that\n   * session for the whole turn.\n   */\n  onPhaseChange?: (sessionId: string, phase: AgentPhase | null) => void;\n  // Fired when the composer's dim next-prompt suggestion appears, changes or is\n  // cleared (`null`). Change-guarded like onPhaseChange: the scrape runs per chunk.\n  onPromptSuggestionChange?: (sessionId: string, text: string | null) => void;\n  // Fired when an AskUserQuestion menu is detected on the rendered screen (before\n  // the JSONL tool_use block flushes). The server de-dupes against the JSONL path.\n  onLiveQuestion?: (sessionId: string, questions: AskQuestion[], occurrenceId?: string) => void;\n  // Fired when a previously-detected AskUserQuestion screen menu disappears (the\n  // user answered it and Claude's prompt marker is back). Lets the server clear\n  // the pending question so an answered menu doesn't linger or re-appear.\n  onLiveQuestionGone?: (sessionId: string) => void;\n  // Fired when a user message is actually submitted to the PTY (after the\n  // paste/submit write, including the queued-input flush). Ground truth for\n  // user-owned output — not fired for raw keystrokes (sendKeys).\n  onUserMessage?: (sessionId: string, text: string, ts: number) => void;\n  logger?: import(\"./logger\").Logger;\n}\n\nexport interface StartSessionOptions {\n  projectPath: string;\n  projectName?: string;\n  branch?: string;\n  /**\n   * Provider-side id to resume from, when it differs from `sessionId`. Codex\n   * keys a fresh session by a local placeholder UUID and only learns its real\n   * rollout id once it writes the file, so resuming needs the rollout id in\n   * argv while the session keeps the placeholder the client navigated to.\n   * Absent means \"resume by the session id\", which is what every Claude session\n   * does — PTYManager ignores this field entirely.\n   */\n  resumeId?: string;\n  permissionMode?: PermissionMode;\n  model?: string;\n  effort?: EffortLevel;\n  claudeFlags?: ClaudeFlagValues;\n  claudeExtraArgs?: string;\n}\n\nexport interface StartForkSessionOptions {\n  /**\n   * Provider-side id of the conversation to fork FROM (for Codex, the rollout\n   * id — never a local placeholder). The forked session gets its own id; the\n   * two identities are deliberately kept distinct.\n   */\n  forkFromId: string;\n  projectPath: string;\n  projectName?: string;\n  branch?: string;\n}\n\nexport interface StartFreshSessionOptions {\n  projectPath: string;\n  projectName?: string;\n  systemPrompt?: string;\n  permissionMode?: PermissionMode;\n  model?: string;\n  effort?: EffortLevel;\n  claudeFlags?: ClaudeFlagValues;\n  claudeExtraArgs?: string;\n}\n\n// ─── Session Runner ────────────────────────────────────────────────\n\n// Provider-neutral subset of PTYManager's public surface that\n// LiveSessionManager delegates to. Each provider (claude-code, codex-cli,\n// ...) implements this against its own process-management mechanics.\nexport interface SessionRunner {\n  start(sessionId: string, options: StartSessionOptions): Promise<ManagedSession>;\n  startFresh(options: StartFreshSessionOptions): Promise<ManagedSession>;\n  sendInput(sessionId: string, input: string): number;\n  sendKeys(sessionId: string, keys: string): void;\n  sendRawKeys(sessionId: string, keys: string): void;\n  /**\n   * Resize the session's PTY. A no-op for a session this runner does not own,\n   * so a caller racing a session's exit does not have to guard the call.\n   *\n   * Sessions still SPAWN at the fixed `PTY_COLS`/`PTY_ROWS`: those are the size\n   * every headless consumer (mobile's VirtualTerminal, the replay ring buffer)\n   * assumes, and nothing here changes that default. This exists for an attached\n   * local terminal, which has a real size of its own and is the only caller\n   * that can know it.\n   */\n  resize(sessionId: string, cols: number, rows: number): void;\n  cancel(sessionId: string): void;\n  killPid(pid: number): void;\n  putOnHold(sessionId: string, signal?: NodeJS.Signals): void;\n  getOutput(sessionId: string): string;\n  getOutputLines(sessionId: string, maxLines: number): Promise<string[]>;\n  // Recorded user messages submitted to the PTY, oldest-first. Empty for an\n  // unknown session. Sourced by terminal_replay so a re-subscribing client can\n  // reconcile ground-truth ownership without the live user_message stream.\n  getInputHistory(sessionId: string): UserMessage[];\n  // OS pid of the live agent process, or null if this runner doesn't own the\n  // session. Recorded in the durable session registry so a later streamer run\n  // can probe whether the process outlived it.\n  getPid(sessionId: string): number | null;\n  getSession(sessionId: string): ManagedSession | null;\n  hasSession(sessionId: string): boolean;\n  listSessions(): ManagedSession[];\n  dispose(): void;\n}\n","import type { WebSocket } from \"ws\";\nimport { contextRegistry, type E2eeContext } from \"./e2ee/context\";\nimport {\n  E2EE_CTX_UNKNOWN,\n  E2EE_DEVICE_REVOKED,\n  E2EE_SEAL_FAILED,\n  E2EE_SEQUENCE_VIOLATION,\n  type E2eeRejectionCode,\n  own,\n} from \"./e2ee/protocol\";\nimport { CHANNEL_WS, RecordError } from \"./e2ee/record\";\nimport { getLogger } from \"./logger\";\nimport type { WSMessage } from \"./types\";\n\n/**\n * The one interval both liveness signals run on. It must stay under\n * `CLIENT_SILENCE_TIMEOUT_MS`.\n *\n * Two pings leave this timer per sweep and they are **not** redundant. The\n * WebSocket PROTOCOL ping proves the TCP connection is alive to the socket\n * layer, and is handled below `onmessage` — React Native's JS layer never sees\n * it. The app-level `{ type: \"ping\" }` frame is the only liveness signal the\n * client's silence timer can observe. Without it an idle-but-alive session\n * redials every `CLIENT_SILENCE_TIMEOUT_MS`: measured on hardware at 3.1\n * context opens per minute against a limit of 5 per device per minute, 62 % of\n * the budget spent while nobody touched the phone (tb-mobile #946).\n *\n * **One timer rather than two.** A single schedule cannot drift against itself,\n * there is one place to change the cadence, and the ordering argument on\n * `sendTo` has to hold for one call site instead of two.\n */\nexport const PING_INTERVAL_MS = 30_000;\n/**\n * The client's silence timer, mirrored here because this file's cadence is only\n * correct relative to it — `WS_SILENCE_TIMEOUT_MS` in tb-mobile\n * `hooks/useTerminalStream.ts`. A client that receives nothing for this long\n * calls `forceReconnect`, and against a pinned server every reconnect is a\n * fresh Noise handshake charged to a 5-per-minute-per-device limit.\n *\n * Nothing reads it at runtime. It is here so a test can assert\n * `PING_INTERVAL_MS` stays under it: raising the cadence past this window\n * silently restores the churn the app-level ping was added to stop, and no\n * other part of the server would notice.\n */\nexport const CLIENT_SILENCE_TIMEOUT_MS = 45_000;\n// How long to wait for a pong before treating the socket as dead.\n// Must be less than PING_INTERVAL_MS.\nconst PONG_TIMEOUT_MS = 10_000;\n\nconst log = getLogger(\"ws\");\n\n/**\n * How long a sealed socket has to prove it holds the keys (NONCE-DESIGN §10).\n *\n * The clock starts at the 101 and stops on the FIRST frame that unseals — **any\n * valid sealed inbound frame, never a particular message type.** The client\n * contract says a socket sends `register` promptly, and that is one way for a\n * client to satisfy this; making it the server's condition would tie the server\n * to a message name it does not need and break the day a client legitimately\n * sends something else first.\n *\n * It exists because of the ticket thief. An intermediary that spends the\n * client's ticket first holds a socket bound to a context whose keys it does not\n * have: it gets no plaintext — every frame is sealed to keys it lacks — but it\n * occupies a hub slot and receives sealed broadcasts, and **the existing ping\n * reaper cannot evict it, because answering a pong costs it nothing.** Silence\n * is precisely what it is good at. This is the only clock that runs on a socket\n * that never speaks.\n *\n * **Ten seconds, and 15 s — the client's own connect timeout — is the only\n * permitted relaxation. Never lower**: a real phone on a bad network has to fit\n * an upgrade and one frame inside it.\n */\nexport const WS_FIRST_FRAME_DEADLINE_MS = 10_000;\n\n/**\n * The plaintext of one broadcast, built at most once.\n *\n * A broadcast serialises its message once and then seals it N times. The JSON\n * is shared; the ciphertext never is. Lazy so a hub with no sealed socket at\n * all — every client on the legacy path — allocates nothing extra.\n */\ninterface Memo {\n  plaintext?: Buffer;\n}\n\n/** The §9 code a record-layer throw carries, or a server fault if it carries none. */\nfunction sealCode(err: unknown): E2eeRejectionCode {\n  return err instanceof RecordError ? err.code : E2EE_SEAL_FAILED;\n}\n\n/**\n * The code the SEND path is allowed to report (§9).\n *\n * A sequence violation is a **claim about the peer**. Nothing we fail at while\n * sealing our own frame can be one, so a send-path error carrying that code\n * would tell a client its frames were wrong when the fault was entirely ours —\n * the collapse §9 splits these two codes to prevent, arriving from the other\n * direction. Unreachable today, because `seal` only ever raises\n * `E2EE_SEAL_FAILED`; asserted here so it stays unreachable rather than staying\n * unreachable by luck. The original code is still logged.\n */\nfunction sendCode(err: unknown): E2eeRejectionCode {\n  const code = sealCode(err);\n  return code === E2EE_SEQUENCE_VIOLATION ? E2EE_SEAL_FAILED : code;\n}\n\n/**\n * Whatever `ws` handed us, as bytes.\n *\n * A sealed socket speaks the binary opcode (§12), so anything else — a text\n * frame, a client that forgot `binaryType` — is not a record. It becomes an\n * empty buffer and is refused by the record layer's own length check rather\n * than by a second copy of that check here.\n */\nfunction asBytes(raw: unknown): Buffer {\n  if (Buffer.isBuffer(raw)) return raw;\n  if (raw instanceof ArrayBuffer) return Buffer.from(raw);\n  if (ArrayBuffer.isView(raw)) return Buffer.from(raw.buffer, raw.byteOffset, raw.byteLength);\n  return Buffer.alloc(0);\n}\n\nexport class WSHub {\n  private clients = new Set<WebSocket>();\n  private pingTimer: ReturnType<typeof setInterval> | null = null;\n  // Per-socket pong-timeout handle; set when ping is sent, cleared on pong/close.\n  private pongTimers = new Map<WebSocket, ReturnType<typeof setTimeout>>();\n  /**\n   * The E2EE context of every sealed socket. Absent for a legacy `?key=` client.\n   *\n   * PER SOCKET, not per device (NONCE-DESIGN §8). That is what forces N seals\n   * for N sockets below: the three send paths used to `JSON.stringify` once and\n   * hand the same bytes to every client, and the same bytes cannot be sealed to\n   * N different keys under N independent counters.\n   *\n   * A socket absent from this map is a legacy plaintext client and keeps\n   * working exactly as it does today — dual paths are the whole reason a\n   * released app survives this change.\n   */\n  private contexts = new Map<WebSocket, E2eeContext>();\n  /**\n   * Every socket that has EVER held a context.\n   *\n   * `contexts` is cleared the moment a socket is closed for a policy violation\n   * or a revocation, and `close()` is not instantaneous — a frame already in\n   * the receive buffer still arrives. Without this set that frame would find no\n   * context and be handled as a LEGACY PLAINTEXT one: a sealed socket\n   * downgrading itself to cleartext in the window after it was cut off, which\n   * is the one thing a dual-path design must never do.\n   */\n  private everSealed = new WeakSet<WebSocket>();\n  /** Per-socket \"prove you hold the keys\" deadline; cleared on the first unseal. */\n  private unprovenTimers = new Map<WebSocket, ReturnType<typeof setTimeout>>();\n  private readonly firstFrameMs: number;\n\n  /**\n   * `firstFrameMs` is a test seam and nothing else: the deadline it defaults to\n   * is the contract, and a suite cannot spend ten seconds per case proving a\n   * socket went away. A test asserts the DEFAULT is the contract's value, so\n   * lowering the constant is still caught.\n   *\n   * **Read with `own()`, never `??`.** `server.ts` constructs `new WSHub()`, so\n   * `options` is `{}` — an object that carries `Object.prototype`, and `??`\n   * reads straight through it. A single `Object.prototype.firstFrameMs`\n   * anywhere in the process then sets this deadline, in either direction and\n   * both behavioural: lengthened, the ticket-thief defence stops firing\n   * entirely, because the ping reaper cannot evict a socket that answers\n   * pongs; shortened below the floor, every legitimate socket is reaped before\n   * a phone on a bad network can fit an upgrade and one frame inside it.\n   *\n   * `own()` asks the object and nothing above it. `context.ts` reads `now` this\n   * way and `record.ts` reads `initialCounter` this way, for exactly this\n   * reason; this call site is the one that did not.\n   */\n  constructor(options: { firstFrameMs?: number } = {}) {\n    this.firstFrameMs = own(options, \"firstFrameMs\") ?? WS_FIRST_FRAME_DEADLINE_MS;\n  }\n\n  addClient(ws: WebSocket, context?: E2eeContext): void {\n    this.clients.add(ws);\n    if (context) {\n      this.contexts.set(ws, context);\n      // Set HERE, at attach — not on the first successful seal. Whoever holds\n      // this socket has spent a ticket, and everything downstream that asks\n      // \"was this ever sealed?\" must be true from the 101 onwards.\n      this.everSealed.add(ws);\n      log.info(\"[e2ee.upgrade] encrypted websocket\", { event: \"e2ee.upgrade\" });\n      // The clock starts at the 101.\n      this.unprovenTimers.set(\n        ws,\n        setTimeout(() => {\n          this.unprovenTimers.delete(ws);\n          log.warn(\"[e2ee] closing a sealed socket that never proved it holds the keys\", {\n            event: \"e2ee.unproven_socket_reaped\",\n          });\n          // `E2EE_CTX_UNKNOWN` and not a fifth code: by the time this close\n          // lands the context IS destroyed, so the code is literally true, and\n          // §9 already defines it as the recoverable one — a legitimate client\n          // whose first frame was lost to a network stall re-opens, which is\n          // exactly the right recovery. A thief learns nothing it did not\n          // already know.\n          this.closeForE2ee(ws, E2EE_CTX_UNKNOWN, \"unproven\");\n        }, this.firstFrameMs),\n      );\n    }\n\n    ws.on(\"pong\", () => {\n      const t = this.pongTimers.get(ws);\n      if (t) {\n        clearTimeout(t);\n        this.pongTimers.delete(ws);\n      }\n    });\n\n    ws.on(\"close\", () => {\n      const t = this.pongTimers.get(ws);\n      if (t) {\n        clearTimeout(t);\n        this.pongTimers.delete(ws);\n      }\n      this.clients.delete(ws);\n      this.forgetContext(ws);\n    });\n\n    ws.on(\"error\", () => {\n      const t = this.pongTimers.get(ws);\n      if (t) {\n        clearTimeout(t);\n        this.pongTimers.delete(ws);\n      }\n      this.clients.delete(ws);\n      this.forgetContext(ws);\n    });\n\n    if (!this.pingTimer && this.clients.size > 0) {\n      this.startPing();\n    }\n  }\n\n  broadcast(message: WSMessage): void {\n    const data = JSON.stringify(message);\n    const memo: Memo = {};\n    const dead: WebSocket[] = [];\n\n    for (const client of this.clients) {\n      if (!this.sendTo(client, data, memo)) dead.push(client);\n    }\n\n    for (const client of dead) {\n      this.clients.delete(client);\n    }\n  }\n\n  // Scoped broadcast for high-frequency per-session messages (terminal_output,\n  // user_message). Sending to every connected client for every PTY output\n  // chunk made broadcast() cost scale with connections x active sessions;\n  // this bounds it to only that session's subscribers.\n  broadcastToClients(clients: Iterable<WebSocket>, message: WSMessage): void {\n    const data = JSON.stringify(message);\n    const memo: Memo = {};\n    for (const client of clients) {\n      if (!this.sendTo(client, data, memo)) this.clients.delete(client);\n    }\n  }\n\n  unicast(ws: WebSocket, message: WSMessage): void {\n    if (!this.sendTo(ws, JSON.stringify(message), {})) this.clients.delete(ws);\n  }\n\n  /**\n   * Seal for THIS socket, then send. One synchronous step, with no `await`\n   * anywhere between the two (NONCE-DESIGN §14).\n   *\n   * An await between `seal` and `ws.send` reorders frames — two sends resumed\n   * in the wrong order put counter 8 on the wire before counter 7 — and the\n   * peer's strict `counter == expected` (§5 R2) then closes the socket. The\n   * `await getOutputLines(...)` on the `terminal_replay` path is upstream of\n   * this method for exactly that reason: it finishes, and only then is anything\n   * sealed.\n   *\n   * Returns false when the caller should drop this client.\n   *\n   * The plaintext Buffer is memoised across a broadcast because it is the same\n   * bytes for every recipient; the SEAL is not, and cannot be — N sockets means\n   * N keys, N counters and N distinct nonces. `seal` does not mutate its\n   * argument, so one Buffer feeds every seal.\n   *\n   * An app-level `{ type: \"ping\" }` frame — emitted by `startPing` — is sealed\n   * here like every other frame and consumes a counter. That is correct and\n   * costs nothing, and it is written down because WebSocket PROTOCOL pings are\n   * invisible to React Native's JS layer — the client's silence timer depends on\n   * the app-level ping continuing to exist, so nobody should optimise it away on\n   * the grounds that the protocol already has one (NONCE-DESIGN §18).\n   */\n  private sendTo(ws: WebSocket, json: string, memo: Memo): boolean {\n    const context = this.contexts.get(ws);\n    // **A socket that consumed a ticket is never on the plaintext send path**\n    // (NONCE-DESIGN §8). Sealed-and-now-contextless is not a legacy client; it\n    // is a fault, and it closes rather than falling through.\n    //\n    // Unreachable as the code stands — the only way to hold `everSealed` with\n    // no context is `forgetContext`, which runs on close or error, and the\n    // `readyState` check a few lines down catches that socket anyway. The guard\n    // is here because UNREACHABILITY was doing the work: detach a context from\n    // a live socket by any future means and the failure is a silent plaintext\n    // `session_list`, which enumerates every session with its project path.\n    if (!context && this.everSealed.has(ws)) {\n      this.closeForE2ee(ws, E2EE_SEAL_FAILED, \"send-without-context\");\n      return false;\n    }\n    if (ws.readyState !== ws.OPEN) {\n      if (context) this.closeForE2ee(ws, E2EE_SEAL_FAILED, \"transport-not-open\");\n      return false;\n    }\n    let frame: string | Buffer = json;\n    if (context) {\n      memo.plaintext ??= Buffer.from(json, \"utf-8\");\n      try {\n        frame = context.sendState(CHANNEL_WS).seal(memo.plaintext);\n      } catch (err) {\n        // A seal failure is a SERVER-side fault and gets its own code (§9).\n        // Closing rather than dropping is deliberate: a dropped frame is a gap,\n        // and under the strict counter the peer would reject everything after\n        // it anyway — with a reason that pointed at the client.\n        this.closeForE2ee(ws, sendCode(err), \"send\", err);\n        return false;\n      }\n    }\n    try {\n      ws.send(frame);\n      return true;\n    } catch (err) {\n      if (context) this.closeForE2ee(ws, E2EE_SEAL_FAILED, \"transport-send\", err);\n      return false;\n    }\n  }\n\n  /**\n   * Decode one client→server frame: unseal it for a sealed socket, pass it\n   * through for a legacy one.\n   *\n   * Returns null when the frame was refused — the socket has already been\n   * closed with the §9 code that says why, and the caller drops the frame. A\n   * refusal is never silent: `E2EE_SEQUENCE_VIOLATION` is a claim about the\n   * peer, `E2EE_SEAL_FAILED` is a fault on this side, and the two must not\n   * arrive as the same \"nothing happened\".\n   */\n  receive(ws: WebSocket, raw: unknown): string | null {\n    const context = this.contexts.get(ws);\n    if (!context) {\n      // A socket that was never sealed is a legacy client; one that WAS is a\n      // socket already closed for cause, and it does not get to speak plaintext\n      // on the way out.\n      if (this.everSealed.has(ws)) return null;\n      return typeof raw === \"string\" ? raw : String(raw);\n    }\n\n    try {\n      const plaintext = context.receiveState(CHANNEL_WS).unseal(asBytes(raw)).toString(\"utf-8\");\n      // Proved. ANY valid sealed frame stops the clock — the unseal succeeding\n      // is the proof, and what the frame says is none of this method's business.\n      this.clearUnproven(ws);\n      return plaintext;\n    } catch (err) {\n      this.closeForE2ee(ws, sealCode(err), \"receive\", err);\n      return null;\n    }\n  }\n\n  /** Close every socket bound to one of these explicit context handles. */\n  closeContexts(ctxIds: Iterable<string>): number {\n    const ids = new Set(ctxIds);\n    if (ids.size === 0) return 0;\n    let closed = 0;\n    for (const [ws, context] of this.contexts) {\n      if (!ids.has(context.ctxId)) continue;\n      closed++;\n      this.closeForE2ee(ws, E2EE_DEVICE_REVOKED, \"revoked\");\n    }\n    return closed;\n  }\n\n  /** Close every sealed socket the hub owns for one device. */\n  closeDevice(deviceId: string): number {\n    let closed = 0;\n    for (const [ws, context] of this.contexts) {\n      if (context.deviceId !== deviceId) continue;\n      closed++;\n      this.closeForE2ee(ws, E2EE_DEVICE_REVOKED, \"revoked\");\n    }\n    return closed;\n  }\n\n  /**\n   * A socket's close destroys ITS OWN context and nothing else.\n   *\n   * Never the device's REST context (§8): the 2 s HTTP replay fallback runs\n   * precisely when the socket is down, so a REST context that died with the\n   * socket would take the fallback with it. A reconnect is a new\n   * `POST /api/e2ee/open`, not a resurrection of this one.\n   */\n  private clearUnproven(ws: WebSocket): void {\n    const t = this.unprovenTimers.get(ws);\n    if (t) {\n      clearTimeout(t);\n      this.unprovenTimers.delete(ws);\n    }\n  }\n\n  private forgetContext(ws: WebSocket): void {\n    // Unconditional, and before the early return: a socket whose context has\n    // already gone must not leave a timer behind to fire at a dead socket.\n    this.clearUnproven(ws);\n    const context = this.contexts.get(ws);\n    if (!context) return;\n    this.contexts.delete(ws);\n    contextRegistry().destroyOwned(context);\n  }\n\n  private closeForE2ee(ws: WebSocket, code: E2eeRejectionCode, phase: string, err?: unknown): void {\n    const violation = code === E2EE_SEQUENCE_VIOLATION;\n    // **The record layer's own words, carried through.** Without them a frame\n    // addressed to ANOTHER live context and a frame naming a context that never\n    // existed logged byte-identical lines — the hub threw away the distinction\n    // the record layer had already made. §9 is explicit that the wording here is\n    // what a human reads at 3am: \"misaddressed\" and \"unknown\" call for different\n    // next steps, and the log was the only place either could be seen.\n    const detail = err instanceof RecordError ? err.message : undefined;\n    const reported = err instanceof RecordError ? err.code : undefined;\n    log.warn(\n      `[e2ee.${violation ? \"sequence_violation\" : \"frame_refused\"}] ${phase}${detail ? `: ${detail}` : \"\"}`,\n      {\n        event: violation ? \"e2ee.sequence_violation\" : \"e2ee.frame_refused\",\n        code,\n        phase,\n        ...(detail ? { detail } : {}),\n        // Differs from `code` only where the send path coerced a peer-claim into\n        // a server fault; logging both keeps that coercion visible rather than\n        // silent.\n        ...(reported && reported !== code ? { reported } : {}),\n      },\n    );\n    this.clients.delete(ws);\n    try {\n      // 1008 policy violation. The REASON is the frozen §9 code, so the client\n      // can tell a policy close from a network drop and from each other.\n      ws.close(1008, code);\n    } catch {\n      // Already gone.\n    }\n    this.forgetContext(ws);\n  }\n\n  get connectionCount(): number {\n    return this.clients.size;\n  }\n\n  /** Sealed sockets. Tests and diagnostics — never a key, never a `ctxId`. */\n  get sealedCount(): number {\n    return this.contexts.size;\n  }\n\n  dispose(): void {\n    if (this.pingTimer) {\n      clearInterval(this.pingTimer);\n      this.pingTimer = null;\n    }\n    for (const [, t] of this.pongTimers) {\n      clearTimeout(t);\n    }\n    this.pongTimers.clear();\n    for (const client of this.clients) {\n      try {\n        // terminate() (not close()) so the underlying TCP socket dies\n        // immediately. A graceful close() only sends a close frame and waits\n        // for the peer's reply — a slow/backgrounded client would keep the\n        // connection (and thus the HTTP listener's port) alive until the peer\n        // ACKs, which is what stalled shutdown and caused EADDRINUSE on the\n        // next deploy.\n        client.terminate();\n      } catch {\n        // Already closed\n      }\n    }\n    this.clients.clear();\n    // Destroy them HERE rather than leaving it to each socket's `close` event.\n    // `terminate()` fires that event on a later tick, by which point this map\n    // is empty and `forgetContext` finds nothing — so the registry would keep\n    // every context of a hub that had already gone away. §8: contexts are\n    // in-memory only and do not outlive the thing they belong to.\n    for (const context of this.contexts.values()) {\n      contextRegistry().destroyOwned(context);\n    }\n    this.contexts.clear();\n    for (const [, t] of this.unprovenTimers) {\n      clearTimeout(t);\n    }\n    this.unprovenTimers.clear();\n  }\n\n  /**\n   * The maintenance sweep: both liveness pings, and the stale-context check.\n   *\n   * **The callback must stay synchronous.** `sendTo` seals and sends in one\n   * synchronous step precisely so no `await` can sit between the two and reorder\n   * counters (see `sendTo`), and that guarantee is what makes a periodic sender\n   * safe at all: a synchronous block runs to completion, so two sends cannot\n   * interleave and counter order is wire order. Making this callback `async`\n   * would create the hazard `sendTo` documents rather than inherit its absence.\n   *\n   * **Ordering inside the loop is load-bearing.** The app-level ping is emitted\n   * only for a socket that has already passed the stale-context and `readyState`\n   * guards. Sealing on a registry-invalidated context throws, so emitting above\n   * the stale-context guard would attempt a send on a socket this sweep has\n   * already decided to close, and report the refusal as `phase: \"send\"` rather\n   * than `phase: \"maintenance\"` — the sweep's own verdict, logged as if the\n   * frame had been at fault. The §9 code is unaffected either way, since\n   * `sendState` on an invalidated context raises `E2EE_CTX_UNKNOWN` itself.\n   */\n  private startPing(): void {\n    this.pingTimer = setInterval(() => {\n      if (this.clients.size === 0 && this.pingTimer) {\n        clearInterval(this.pingTimer);\n        this.pingTimer = null;\n        return;\n      }\n      // One `ts` and one plaintext Buffer per sweep; the SEAL is still per\n      // socket, because N sockets means N keys and N counters.\n      //\n      // `: WSMessage` is load-bearing, not redundant typing. Do NOT inline this\n      // literal into the `JSON.stringify` below: that function accepts anything,\n      // so an inlined literal is type-checked against nothing and this frame's\n      // shape could drift a field at a time with the build staying green. The\n      // annotation is what makes the contract with tb-mobile's own `WSMessage`\n      // union a build failure (TS2353) rather than a convention everyone has to\n      // remember — the shape is frozen across two repositories (`types.ts` and\n      // NONCE-DESIGN §18), and this is where that freeze is enforced.\n      const appPing: WSMessage = { type: \"ping\", ts: Date.now() };\n      const appPingJson = JSON.stringify(appPing);\n      const memo: Memo = {};\n      for (const client of this.clients) {\n        const context = this.contexts.get(client);\n        if (context && contextRegistry().get(context.ctxId) !== context) {\n          this.closeForE2ee(client, E2EE_CTX_UNKNOWN, \"maintenance\");\n          continue;\n        }\n        if (client.readyState !== client.OPEN) continue;\n        // The app-level liveness frame — the ONLY one the client's silence timer\n        // can see, since the protocol ping below never reaches `onmessage`.\n        // Sealed for a sealed socket and plaintext for a legacy one, by the same\n        // `sendTo` every other frame uses; a legacy client ignores an unknown\n        // type, and its silence timer resets just the same.\n        if (!this.sendTo(client, appPingJson, memo)) {\n          this.clients.delete(client);\n          continue;\n        }\n        // WS protocol ping — client must reply with a pong frame. If no pong\n        // arrives within PONG_TIMEOUT_MS the socket is considered dead and\n        // terminated. This is what detects iOS silently killing the TCP\n        // connection without delivering a close frame to the JS layer.\n        client.ping();\n        const t = setTimeout(() => {\n          this.pongTimers.delete(client);\n          client.terminate();\n        }, PONG_TIMEOUT_MS);\n        this.pongTimers.set(client, t);\n      }\n    }, PING_INTERVAL_MS);\n  }\n}\n","import semver from \"semver\";\nimport type { UpdateConfig } from \"../schemas/updateConfig.schema\";\nimport { fetchLatestRelease, fetchReleaseByTag, type ReleaseInfo } from \"./github-releases\";\n\nexport interface CheckResult {\n  current: string;\n  latest: string | null;\n  diff: semver.ReleaseType | null;\n  wouldInstall: boolean;\n  reason: string;\n}\n\nexport interface CheckOptions {\n  currentVersion: string;\n  config: UpdateConfig;\n  pinnedVersion?: string;\n  allowMajor?: boolean;\n}\n\n/**\n * Strips tsup's build-metadata suffix (\"+abc1234-dirty\") from a version\n * string before passing it to semver. semver tolerates build metadata in\n * a few APIs but coerce gives us a clean baseline.\n */\nfunction normalizeVersion(raw: string): string {\n  const stripped = raw.split(\"+\")[0];\n  const coerced = semver.coerce(stripped);\n  if (!coerced) throw new Error(`Cannot parse version: ${raw}`);\n  return coerced.version;\n}\n\nexport async function checkForUpdate(opts: CheckOptions): Promise<CheckResult> {\n  const current = normalizeVersion(opts.currentVersion);\n\n  const target: ReleaseInfo | null = opts.pinnedVersion\n    ? await fetchReleaseByTag(opts.config.github_repo, opts.pinnedVersion)\n    : await fetchLatestRelease(opts.config.github_repo, opts.config.channel);\n\n  if (!target) {\n    return {\n      current,\n      latest: null,\n      diff: null,\n      wouldInstall: false,\n      reason: opts.pinnedVersion\n        ? `No release found for tag ${opts.pinnedVersion}`\n        : `No ${opts.config.channel} release found for ${opts.config.github_repo}`,\n    };\n  }\n\n  const latest = normalizeVersion(target.version);\n\n  if (semver.eq(current, latest)) {\n    return { current, latest, diff: null, wouldInstall: false, reason: \"Already up to date\" };\n  }\n\n  if (semver.lt(latest, current)) {\n    return {\n      current,\n      latest,\n      diff: null,\n      wouldInstall: false,\n      reason: `Current version ${current} is newer than ${opts.config.channel} (${latest})`,\n    };\n  }\n\n  const diff = semver.diff(current, latest);\n  if (!diff) {\n    return { current, latest, diff: null, wouldInstall: false, reason: \"No semver diff\" };\n  }\n\n  if (diff === \"major\" && !opts.allowMajor) {\n    return {\n      current,\n      latest,\n      diff,\n      wouldInstall: false,\n      reason: `Major bump (${current} → ${latest}). Re-run with --allow-major to install.`,\n    };\n  }\n\n  const allowList = opts.config.allow;\n  const allowed =\n    diff === \"patch\"\n      ? allowList.includes(\"patch\")\n      : diff === \"minor\"\n        ? allowList.includes(\"minor\")\n        : diff === \"major\"\n          ? allowList.includes(\"major\") || Boolean(opts.allowMajor)\n          : false;\n\n  if (!allowed) {\n    return {\n      current,\n      latest,\n      diff,\n      wouldInstall: false,\n      reason: `Diff '${diff}' not in allow list [${allowList.join(\", \")}]`,\n    };\n  }\n\n  return {\n    current,\n    latest,\n    diff,\n    wouldInstall: true,\n    reason: `Would install ${current} → ${latest} (${diff})`,\n  };\n}\n","export interface ReleaseAsset {\n  name: string;\n  browserDownloadUrl: string;\n  size: number;\n}\n\nexport interface ReleaseInfo {\n  version: string;\n  tagName: string;\n  prerelease: boolean;\n  htmlUrl: string;\n  publishedAt: string | null;\n  assets: ReleaseAsset[];\n}\n\ninterface GitHubReleaseAsset {\n  name: string;\n  browser_download_url: string;\n  size: number;\n}\n\ninterface GitHubRelease {\n  tag_name: string;\n  name: string | null;\n  prerelease: boolean;\n  draft: boolean;\n  html_url: string;\n  published_at: string | null;\n  assets: GitHubReleaseAsset[];\n}\n\nconst GITHUB_API = \"https://api.github.com\";\n\nfunction stripV(tag: string): string {\n  return tag.startsWith(\"v\") ? tag.slice(1) : tag;\n}\n\nfunction toReleaseInfo(r: GitHubRelease): ReleaseInfo {\n  return {\n    version: stripV(r.tag_name),\n    tagName: r.tag_name,\n    prerelease: r.prerelease,\n    htmlUrl: r.html_url,\n    publishedAt: r.published_at,\n    assets: (r.assets ?? []).map((a) => ({\n      name: a.name,\n      browserDownloadUrl: a.browser_download_url,\n      size: a.size,\n    })),\n  };\n}\n\nasync function ghFetch(path: string): Promise<unknown> {\n  const res = await fetch(`${GITHUB_API}${path}`, {\n    headers: {\n      Accept: \"application/vnd.github+json\",\n      \"X-GitHub-Api-Version\": \"2022-11-28\",\n    },\n  });\n  if (!res.ok) {\n    throw new Error(`GitHub API ${path} returned ${res.status} ${res.statusText}`);\n  }\n  return res.json();\n}\n\n/**\n * Fetches the newest release on the given channel. \"stable\" excludes\n * prereleases and drafts; \"next\" returns the newest prerelease (also\n * excluding drafts). Returns null if no release matches the channel.\n */\nexport async function fetchLatestRelease(\n  repo: string,\n  channel: \"stable\" | \"next\",\n): Promise<ReleaseInfo | null> {\n  if (channel === \"stable\") {\n    try {\n      const data = (await ghFetch(`/repos/${repo}/releases/latest`)) as GitHubRelease;\n      return toReleaseInfo(data);\n    } catch (err) {\n      if (err instanceof Error && err.message.includes(\"404\")) return null;\n      throw err;\n    }\n  }\n\n  const all = (await ghFetch(`/repos/${repo}/releases?per_page=30`)) as GitHubRelease[];\n  const prereleases = all.filter((r) => r.prerelease && !r.draft);\n  if (prereleases.length === 0) return null;\n  return toReleaseInfo(prereleases[0]);\n}\n\nexport async function fetchReleaseByTag(repo: string, tag: string): Promise<ReleaseInfo | null> {\n  const tagToTry = tag.startsWith(\"v\") ? tag : `v${tag}`;\n  try {\n    const data = (await ghFetch(`/repos/${repo}/releases/tags/${tagToTry}`)) as GitHubRelease;\n    return toReleaseInfo(data);\n  } catch (err) {\n    if (err instanceof Error && err.message.includes(\"404\")) {\n      try {\n        const data = (await ghFetch(`/repos/${repo}/releases/tags/${tag}`)) as GitHubRelease;\n        return toReleaseInfo(data);\n      } catch {\n        return null;\n      }\n    }\n    throw err;\n  }\n}\n","import { mkdirSync } from \"node:fs\";\nimport type { UpdateConfig } from \"../schemas/updateConfig.schema\";\nimport { countActiveSessions } from \"./active-sessions\";\nimport { isBrewInstall } from \"./brew-detect\";\nimport { checkForUpdate } from \"./check-update\";\nimport { downloadAndVerify, fetchManifest } from \"./download\";\nimport { fetchLatestRelease, fetchReleaseByTag } from \"./github-releases\";\nimport { pickArtifact } from \"./manifest\";\nimport { DOWNLOAD_DIR, downloadPath, releaseDir } from \"./paths\";\nimport { restartService, stopService } from \"./restart\";\nimport { waitForRestartHealth } from \"./restart-health\";\nimport { stampVersionTxt } from \"./stamp-version\";\nimport { ensureReleasesDir, pruneOldReleases, swapCurrent } from \"./swap\";\nimport { unpackTarball } from \"./unpack\";\nimport { appendUpdateLog } from \"./update-log\";\n\nexport interface InstallOptions {\n  currentVersion: string;\n  config: UpdateConfig;\n  pinnedVersion?: string;\n  allowMajor?: boolean;\n  force?: boolean;\n  dryRun?: boolean;\n  /** Used to talk to the running streamer for the active-session defer check. */\n  runningServer?: { port: number; apiKey: string };\n}\n\nexport type InstallResult =\n  | { kind: \"no-op\"; reason: string; current: string; latest: string | null }\n  | { kind: \"unsupported-install\"; reason: string; current: string }\n  | {\n      kind: \"deferred\";\n      reason: string;\n      activeSessions: number;\n      latest: string;\n    }\n  | {\n      kind: \"dry-run\";\n      latest: string;\n      tarballUrl: string;\n    }\n  | {\n      kind: \"installed\";\n      previous: string;\n      installed: string;\n      pruned: string[];\n      restart: { method: string };\n    };\n\nexport async function runInstall(opts: InstallOptions): Promise<InstallResult> {\n  // A Homebrew install runs from the Cellar (libexec/), which this updater's\n  // file-swap never touches — downloading would orphan the new release without\n  // applying it. Refuse early and point at the supported path.\n  if (isBrewInstall()) {\n    const result = {\n      kind: \"unsupported-install\" as const,\n      reason: \"Installed via Homebrew — run `brew upgrade tb-streamer` to update.\",\n      current: opts.currentVersion,\n    };\n    appendUpdateLog(`[no-op] ${result.reason}`);\n    return result;\n  }\n\n  const check = await checkForUpdate({\n    currentVersion: opts.currentVersion,\n    config: opts.config,\n    pinnedVersion: opts.pinnedVersion,\n    allowMajor: opts.allowMajor,\n  });\n\n  appendUpdateLog(\n    `[check] current=${check.current} latest=${check.latest ?? \"none\"} status=${check.reason}`,\n  );\n\n  if (!check.wouldInstall) {\n    return { kind: \"no-op\", reason: check.reason, current: check.current, latest: check.latest };\n  }\n\n  const target = opts.pinnedVersion\n    ? await fetchReleaseByTag(opts.config.github_repo, opts.pinnedVersion)\n    : await fetchLatestRelease(opts.config.github_repo, opts.config.channel);\n\n  if (!target) {\n    return {\n      kind: \"no-op\",\n      reason: \"Release vanished between check and install\",\n      current: check.current,\n      latest: check.latest,\n    };\n  }\n\n  const targetVersion = check.latest;\n  if (!targetVersion) {\n    return {\n      kind: \"no-op\",\n      reason: \"checkForUpdate returned no latest version\",\n      current: check.current,\n      latest: null,\n    };\n  }\n\n  const manifest = await fetchManifest(target.assets);\n  const artifact = pickArtifact(manifest);\n\n  if (opts.dryRun) {\n    const asset = target.assets.find((a) => a.name === artifact.filename);\n    const tarballUrl = asset?.browserDownloadUrl ?? \"(missing)\";\n    appendUpdateLog(\n      `[dry-run] would install ${check.current} → ${targetVersion} from ${tarballUrl}`,\n    );\n    return { kind: \"dry-run\", latest: targetVersion, tarballUrl };\n  }\n\n  if (opts.config.defer_if_active_sessions && !opts.force && opts.runningServer) {\n    const active = await countActiveSessions(opts.runningServer);\n    if (active.kind === \"count\" && active.count > 0) {\n      const reason = `${active.count} active session(s); use --force to interrupt`;\n      appendUpdateLog(`[deferred] ${check.current} → ${targetVersion}: ${reason}`);\n      return { kind: \"deferred\", reason, activeSessions: active.count, latest: targetVersion };\n    }\n    if (active.kind === \"error\") {\n      // Streamer is reachable but its state is unknown — defer rather than\n      // risk killing live sessions we couldn't see.\n      const reason = `cannot determine active sessions (${active.reason}); use --force to override`;\n      appendUpdateLog(`[deferred] ${check.current} → ${targetVersion}: ${reason}`);\n      return { kind: \"deferred\", reason, activeSessions: -1, latest: targetVersion };\n    }\n    // active.kind === \"unreachable\" → streamer is down, nothing to interrupt.\n  }\n\n  ensureReleasesDir();\n  mkdirSync(DOWNLOAD_DIR, { recursive: true });\n\n  const tarballPath = downloadPath(targetVersion, artifact.filename);\n  await downloadAndVerify({ manifest, assets: target.assets, targetPath: tarballPath });\n\n  const destDir = releaseDir(targetVersion);\n  await unpackTarball({ tarballPath, destDir });\n  stampVersionTxt(destDir, targetVersion);\n\n  // On Windows the streamer process holds open handles inside\n  // ~/.threadbase/current/, which makes the directory replace inside\n  // swapCurrent fail with EBUSY. Stop the service first; restartService\n  // below will bring it back on the new version. macOS/Linux swap via\n  // atomic symlink rename and don't need this — stopService is a no-op\n  // there.\n  if (process.platform === \"win32\") {\n    await stopService({ port: opts.runningServer?.port }).catch(() => {\n      /* best effort — swap may still succeed if the streamer wasn't running */\n    });\n  }\n\n  swapCurrent(targetVersion);\n\n  const pruned = pruneOldReleases(targetVersion);\n\n  let restartMethod = \"skipped\";\n  try {\n    const r = await restartService();\n    restartMethod = r.method;\n    if (opts.runningServer && r.method !== \"none\") {\n      await waitForRestartHealth({\n        port: opts.runningServer.port,\n        expectedVersion: targetVersion,\n      });\n    }\n  } catch (err) {\n    // The release is on disk, but a command success is not enough: the process\n    // serving /healthz must report the target version. Surface failure loudly\n    // while leaving the new release ready for the next successful service start.\n    restartMethod = `failed: ${err instanceof Error ? err.message : String(err)}`;\n  }\n\n  const installed = {\n    kind: \"installed\" as const,\n    previous: check.current,\n    installed: targetVersion,\n    pruned,\n    restart: { method: restartMethod },\n  };\n  const outcome = restartMethod.startsWith(\"failed:\") ? \"failed\" : \"installed\";\n  appendUpdateLog(\n    `[${outcome}] ${installed.previous} → ${installed.installed} restart=${installed.restart.method}${pruned.length > 0 ? ` pruned=${pruned.length}` : \"\"}`,\n  );\n  return installed;\n}\n","export type ActiveSessionsResult =\n  | { kind: \"count\"; count: number }\n  | { kind: \"unreachable\"; reason: string }\n  | { kind: \"error\"; status?: number; reason: string };\n\n/**\n * Asks the running streamer how many sessions are mid-conversation.\n *\n * Three outcomes, intentionally distinguished so the caller can decide what\n * to do with each:\n *   - \"count\":       the streamer answered; trust the number.\n *   - \"unreachable\": connection refused, DNS failure, timeout. The streamer\n *                    is almost certainly not running, so there is no active\n *                    work to interrupt. Caller should proceed with update.\n *   - \"error\":       the streamer responded, but with a non-2xx status or\n *                    malformed body. State is unknown — caller should defer\n *                    rather than risk killing live sessions.\n */\nexport async function countActiveSessions(opts: {\n  port: number;\n  apiKey: string;\n  timeoutMs?: number;\n}): Promise<ActiveSessionsResult> {\n  const url = `http://127.0.0.1:${opts.port}/api/sessions?status=running,waiting_input&limit=1`;\n  const controller = new AbortController();\n  const timer = setTimeout(() => controller.abort(), opts.timeoutMs ?? 2000);\n\n  let res: Response;\n  try {\n    res = await fetch(url, {\n      headers: { Authorization: `Bearer ${opts.apiKey}` },\n      signal: controller.signal,\n    });\n  } catch (err) {\n    return { kind: \"unreachable\", reason: err instanceof Error ? err.message : String(err) };\n  } finally {\n    clearTimeout(timer);\n  }\n\n  if (!res.ok) {\n    return {\n      kind: \"error\",\n      status: res.status,\n      reason: `streamer returned ${res.status} ${res.statusText}`,\n    };\n  }\n\n  let body: unknown;\n  try {\n    body = await res.json();\n  } catch (err) {\n    return {\n      kind: \"error\",\n      status: res.status,\n      reason: `malformed JSON from streamer: ${err instanceof Error ? err.message : String(err)}`,\n    };\n  }\n\n  const parsed = body as { total?: unknown; sessions?: unknown };\n  if (typeof parsed.total === \"number\") return { kind: \"count\", count: parsed.total };\n  if (Array.isArray(parsed.sessions)) return { kind: \"count\", count: parsed.sessions.length };\n\n  return {\n    kind: \"error\",\n    status: res.status,\n    reason: \"streamer response missing both 'total' and 'sessions'\",\n  };\n}\n","// Detects whether the running CLI was installed by Homebrew. The built-in\n// auto-updater swaps files under ~/.threadbase/, but a brew install runs from\n// the Cellar (libexec/) — a location the updater never touches — so the swap\n// can't take effect. runInstall() uses this to refuse and point the user at\n// `brew upgrade` instead of silently downloading an update that won't apply.\n//\n// Every Homebrew prefix (Apple Silicon /opt/homebrew, Intel /usr/local,\n// linuxbrew /home/linuxbrew/.linuxbrew) installs formulae under `<prefix>/\n// Cellar/<formula>/<version>/…`, so a `/Cellar/` path segment is the reliable,\n// prefix-independent signal.\nexport function isBrewInstall(scriptPath: string = process.argv[1] ?? \"\"): boolean {\n  if (!scriptPath) return false;\n  return scriptPath.includes(\"/Cellar/\");\n}\n","import { createHash } from \"node:crypto\";\nimport { createWriteStream, mkdirSync, rmSync, statSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\nimport { pipeline } from \"node:stream/promises\";\nimport type { ReleaseAsset } from \"./github-releases\";\nimport { pickArtifact, type ReleaseManifest, ReleaseManifestSchema } from \"./manifest\";\n\nconst MANIFEST_FILENAME = \"manifest.json\";\n\n/**\n * Locates manifest.json among a release's assets, downloads it, and validates\n * its schema. Throws if missing or malformed.\n */\nexport async function fetchManifest(assets: ReleaseAsset[]): Promise<ReleaseManifest> {\n  const asset = assets.find((a) => a.name === MANIFEST_FILENAME);\n  if (!asset) {\n    throw new Error(\n      `Release has no ${MANIFEST_FILENAME} asset. Available: ${assets.map((a) => a.name).join(\", \") || \"(none)\"}`,\n    );\n  }\n  const res = await fetch(asset.browserDownloadUrl, {\n    headers: { Accept: \"application/json\" },\n  });\n  if (!res.ok) {\n    throw new Error(`Failed to download manifest: ${res.status} ${res.statusText}`);\n  }\n  const raw = (await res.json()) as unknown;\n  return ReleaseManifestSchema.parse(raw);\n}\n\n/**\n * Streams a release tarball to `targetPath` and verifies its sha256 against\n * the manifest. On hash mismatch, the partial file is deleted and an error\n * is thrown.\n */\nexport async function downloadAndVerify(opts: {\n  manifest: ReleaseManifest;\n  assets: ReleaseAsset[];\n  targetPath: string;\n}): Promise<{ path: string; bytes: number }> {\n  const { manifest, assets, targetPath } = opts;\n  const artifact = pickArtifact(manifest);\n\n  const asset = assets.find((a) => a.name === artifact.filename);\n  if (!asset) {\n    throw new Error(\n      `Manifest references ${artifact.filename} but it is not attached to the release`,\n    );\n  }\n\n  // Use dirname() rather than a \"/\"-only regex: on Windows targetPath is\n  // backslash-separated, so a forward-slash strip is a no-op and mkdirSync\n  // would create the target file itself as a directory.\n  mkdirSync(dirname(targetPath), { recursive: true });\n\n  const res = await fetch(asset.browserDownloadUrl);\n  if (!res.ok || !res.body) {\n    throw new Error(`Failed to download ${artifact.filename}: ${res.status} ${res.statusText}`);\n  }\n\n  const hash = createHash(\"sha256\");\n  const out = createWriteStream(targetPath);\n  let bytes = 0;\n\n  const measured = new TransformStream<Uint8Array, Uint8Array>({\n    transform(chunk, controller) {\n      hash.update(chunk);\n      bytes += chunk.byteLength;\n      controller.enqueue(chunk);\n    },\n  });\n\n  try {\n    await pipeline(res.body.pipeThrough(measured), out);\n  } catch (err) {\n    rmSync(targetPath, { force: true });\n    throw err;\n  }\n\n  const actual = hash.digest(\"hex\");\n  if (actual !== artifact.sha256) {\n    rmSync(targetPath, { force: true });\n    throw new Error(\n      `sha256 mismatch for ${artifact.filename}: expected ${artifact.sha256}, got ${actual}`,\n    );\n  }\n\n  const stat = statSync(targetPath);\n  if (stat.size !== artifact.size) {\n    rmSync(targetPath, { force: true });\n    throw new Error(\n      `size mismatch for ${artifact.filename}: expected ${artifact.size}, got ${stat.size}`,\n    );\n  }\n\n  return { path: targetPath, bytes };\n}\n","import { z } from \"zod\";\n\nexport const ReleaseManifestSchema = z\n  .object({\n    version: z.string(),\n    schemaVersion: z.number().int().positive(),\n    generatedAt: z.string().optional(),\n    artifacts: z.record(\n      z.string(),\n      z.object({\n        filename: z.string(),\n        sha256: z.string().regex(/^[a-f0-9]{64}$/),\n        size: z.number().int().nonnegative(),\n      }),\n    ),\n  })\n  .strict();\n\nexport type ReleaseManifest = z.infer<typeof ReleaseManifestSchema>;\n\nexport function platformKey(): string {\n  return `${process.platform}-${process.arch}`;\n}\n\nexport function pickArtifact(manifest: ReleaseManifest): ReleaseManifest[\"artifacts\"][string] {\n  const key = platformKey();\n  const artifact = manifest.artifacts[key];\n  if (!artifact) {\n    const available = Object.keys(manifest.artifacts).join(\", \") || \"(none)\";\n    throw new Error(\n      `No artifact for ${key} in release ${manifest.version}. Available: ${available}`,\n    );\n  }\n  return artifact;\n}\n","import { homedir } from \"node:os\";\nimport { join } from \"node:path\";\n\nexport const THREADBASE_ROOT = join(homedir(), \".threadbase\");\nexport const RELEASES_DIR = join(THREADBASE_ROOT, \"releases\");\nexport const CURRENT_SYMLINK = join(THREADBASE_ROOT, \"current\");\nexport const DOWNLOAD_DIR = join(THREADBASE_ROOT, \"releases\", \".tmp\");\n\nexport function releaseDir(version: string): string {\n  return join(RELEASES_DIR, version);\n}\n\nexport function downloadPath(version: string, filename: string): string {\n  return join(DOWNLOAD_DIR, `${version}-${filename}`);\n}\n","import { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\n\nconst execFileP = promisify(execFile);\n\nexport interface RestartResult {\n  method: \"launchctl\" | \"systemctl\" | \"schtasks\" | \"none\";\n  stdout: string;\n  stderr: string;\n}\n\nexport interface StopResult {\n  method: \"schtasks-end\" | \"noop\" | \"none\";\n  stdout: string;\n  stderr: string;\n}\n\nexport interface RestartOptions {\n  /** Override for tests; defaults to platform-appropriate label. */\n  serviceLabel?: string;\n  /** Streamer port whose listener must be stopped on Windows. */\n  port?: number;\n}\n\n// launchd label Homebrew registers for `brew services start tb-streamer`.\n// Distinct from the deploy.sh label below, so a brew install must be detected\n// at runtime rather than assumed.\nconst BREW_LAUNCHD_LABEL = \"homebrew.mxcl.tb-streamer\";\nconst DEPLOY_LAUNCHD_LABEL = \"com.ronen.threadbase\";\n\n// Defaults match what scripts/deploy-linux.sh and scripts/deploy.ps1 actually\n// create. Env-var overrides honor the same names the deploy scripts read, so a\n// user with a customized label only configures it once. macOS is resolved\n// separately (resolveDarwinLabel) because it probes for the brew service.\nfunction resolveDefaultLabel(): string | undefined {\n  if (process.platform === \"linux\") {\n    return process.env.THREADBASE_SYSTEMD_UNIT ?? \"threadbase.service\";\n  }\n  if (process.platform === \"win32\") {\n    return process.env.THREADBASE_TASK_NAME ?? \"Threadbase\";\n  }\n  return undefined;\n}\n\n// Reports whether a launchd label is loaded for the current GUI domain. Used to\n// tell a Homebrew-managed service apart from a deploy.sh one — `launchctl print`\n// exits non-zero when the target isn't loaded.\nasync function isLaunchdLabelLoaded(uid: number, label: string): Promise<boolean> {\n  try {\n    await execFileP(\"launchctl\", [\"print\", `gui/${uid}/${label}`]);\n    return true;\n  } catch {\n    return false;\n  }\n}\n\n// macOS label resolution: explicit option → LAUNCHD_LABEL env → detected brew\n// label → deploy.sh default. The brew probe runs only when neither the option\n// nor the env var pins a label, so a configured install never pays for it.\nasync function resolveDarwinLabel(uid: number, explicit?: string): Promise<string> {\n  if (explicit) return explicit;\n  if (process.env.LAUNCHD_LABEL) return process.env.LAUNCHD_LABEL;\n  if (await isLaunchdLabelLoaded(uid, BREW_LAUNCHD_LABEL)) return BREW_LAUNCHD_LABEL;\n  return DEPLOY_LAUNCHD_LABEL;\n}\n\n/**\n * Restarts the platform service that hosts the streamer. On macOS the label is\n * resolved at runtime (brew service detected, else the deploy.sh default);\n * Linux/Windows use the platform-default label. Returns the method used and the\n * command output for logging.\n *\n * Caller (the CLI) is responsible for catching errors — a failed restart\n * after a successful swap leaves the streamer on the new version but stopped\n * until the next boot, which is recoverable.\n */\nexport async function restartService(opts: RestartOptions = {}): Promise<RestartResult> {\n  if (process.platform === \"darwin\") {\n    const uid = process.getuid?.() ?? 0;\n    const label = await resolveDarwinLabel(uid, opts.serviceLabel);\n    const { stdout, stderr } = await execFileP(\"launchctl\", [\n      \"kickstart\",\n      \"-k\",\n      `gui/${uid}/${label}`,\n    ]);\n    return { method: \"launchctl\", stdout, stderr };\n  }\n\n  const label = opts.serviceLabel ?? resolveDefaultLabel();\n  if (!label) {\n    return { method: \"none\", stdout: \"\", stderr: `Unsupported platform: ${process.platform}` };\n  }\n\n  if (process.platform === \"linux\") {\n    const { stdout, stderr } = await execFileP(\"systemctl\", [\"--user\", \"restart\", label]);\n    return { method: \"systemctl\", stdout, stderr };\n  }\n\n  if (process.platform === \"win32\") {\n    const { stdout, stderr } = await execFileP(\"schtasks.exe\", [\"/End\", \"/TN\", label]).catch(\n      (err) => ({ stdout: \"\", stderr: String(err) }),\n    );\n    const startResult = await execFileP(\"schtasks.exe\", [\"/Run\", \"/TN\", label]);\n    return {\n      method: \"schtasks\",\n      stdout: `${stdout}\\n${startResult.stdout}`,\n      stderr: `${stderr}\\n${startResult.stderr}`,\n    };\n  }\n\n  return { method: \"none\", stdout: \"\", stderr: `Unsupported platform: ${process.platform}` };\n}\n\n/**\n * Stops the platform service without restarting it. Only meaningful on\n * Windows, where the streamer process holds open handles into\n * `~/.threadbase/current/dist/cli.cjs`; replacing that directory while the\n * process is live fails with EBUSY. macOS/Linux swap via atomic symlink\n * rename and do not need a pre-swap stop — `stopService` is a no-op there.\n */\nexport async function stopService(opts: RestartOptions = {}): Promise<StopResult> {\n  if (process.platform !== \"win32\") {\n    return { method: \"noop\", stdout: \"\", stderr: \"\" };\n  }\n  const label = opts.serviceLabel ?? resolveDefaultLabel();\n  if (!label) {\n    return { method: \"none\", stdout: \"\", stderr: \"No service label resolved\" };\n  }\n  const { stdout, stderr } = await execFileP(\"schtasks.exe\", [\"/End\", \"/TN\", label]).catch(\n    (err) => ({ stdout: \"\", stderr: String(err) }),\n  );\n  const listenerResult = await stopWindowsListener(opts.port ?? 8766);\n  return {\n    method: \"schtasks-end\",\n    stdout: `${stdout}\\n${listenerResult.stdout}`,\n    stderr: `${stderr}\\n${listenerResult.stderr}`,\n  };\n}\n\nasync function stopWindowsListener(port: number): Promise<{ stdout: string; stderr: string }> {\n  let netstat: { stdout: string; stderr: string };\n  try {\n    netstat = await execFileP(\"netstat.exe\", [\"-ano\", \"-p\", \"tcp\"]);\n  } catch (err) {\n    return { stdout: \"\", stderr: `Could not inspect port ${port}: ${String(err)}` };\n  }\n\n  const pids = new Set<string>();\n  for (const line of netstat.stdout.split(/\\r?\\n/)) {\n    const columns = line.trim().split(/\\s+/);\n    if (columns.length < 5 || columns[0]?.toUpperCase() !== \"TCP\") continue;\n    const [localAddress, state, pid] = [columns[1], columns[3], columns[4]];\n    if (state?.toUpperCase() !== \"LISTENING\" || !pid || pid === \"0\") continue;\n    if (localAddress?.endsWith(`:${port}`)) pids.add(pid);\n  }\n\n  const output: string[] = [];\n  const errors: string[] = [];\n  for (const pid of pids) {\n    try {\n      const result = await execFileP(\"taskkill.exe\", [\"/PID\", pid, \"/T\", \"/F\"]);\n      output.push(result.stdout);\n      if (result.stderr) errors.push(result.stderr);\n    } catch (err) {\n      errors.push(`Could not stop PID ${pid} on port ${port}: ${String(err)}`);\n    }\n  }\n  return { stdout: output.join(\"\\n\"), stderr: errors.join(\"\\n\") };\n}\n","export interface RestartHealthOptions {\n  port: number;\n  expectedVersion: string;\n  timeoutMs?: number;\n  pollIntervalMs?: number;\n}\n\nfunction isExpectedVersion(actual: string, expected: string): boolean {\n  return actual === expected || actual.startsWith(`${expected}+`);\n}\n\n/**\n * Waits until the process actually serving the streamer port reports the\n * activated version. This deliberately reads /healthz instead of version.txt:\n * the sidecar describes the files on disk, not necessarily the live process.\n */\nexport async function waitForRestartHealth(opts: RestartHealthOptions): Promise<void> {\n  const timeoutMs = opts.timeoutMs ?? 15_000;\n  const pollIntervalMs = opts.pollIntervalMs ?? 250;\n  const deadline = Date.now() + timeoutMs;\n  let lastFailure = \"server did not respond\";\n\n  while (Date.now() <= deadline) {\n    const controller = new AbortController();\n    const requestTimer = setTimeout(() => controller.abort(), Math.min(2_000, timeoutMs));\n    try {\n      const response = await fetch(`http://127.0.0.1:${opts.port}/healthz`, {\n        signal: controller.signal,\n      });\n      if (response.ok) {\n        const body = (await response.json()) as { ok?: unknown; version?: unknown };\n        if (body.ok === true && typeof body.version === \"string\") {\n          if (isExpectedVersion(body.version, opts.expectedVersion)) return;\n          lastFailure = `running version is ${body.version}, expected ${opts.expectedVersion}`;\n        } else {\n          lastFailure = \"health response is missing ok/version\";\n        }\n      } else {\n        lastFailure = `health endpoint returned ${response.status}`;\n      }\n    } catch (err) {\n      lastFailure = err instanceof Error ? err.message : String(err);\n    } finally {\n      clearTimeout(requestTimer);\n    }\n\n    const remaining = deadline - Date.now();\n    if (remaining <= 0) break;\n    await new Promise((resolve) => setTimeout(resolve, Math.min(pollIntervalMs, remaining)));\n  }\n\n  throw new Error(`restart verification failed: ${lastFailure}`);\n}\n","import { mkdirSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\n// Stamps the runtime version next to the unpacked dist/cli.cjs so\n// getVersion() reports the freshly installed version (not whatever\n// package.json shipped inside the tarball, which is frozen at the previous\n// release because semantic-release bumps the version after the build matrix\n// has packed the tarballs).\n//\n// Kept in its own module so __tests__/install.test.ts can mock the side\n// effect via vi.mock rather than wrestling with stubbing fs.writeFileSync.\nexport function stampVersionTxt(destDir: string, version: string): void {\n  const distDir = join(destDir, \"dist\");\n  // mkdirSync handles the (defensive) case where the tarball didn't include\n  // a dist/ tree — shouldn't happen in practice, but cheaper than crashing.\n  mkdirSync(distDir, { recursive: true });\n  writeFileSync(join(distDir, \"version.txt\"), versionStamp(version));\n}\n\n// Shared so swapCurrent() can fall back to the same format when it publishes\n// the active version.txt without a staged sidecar to copy.\nexport function versionStamp(version: string): string {\n  return `${version}+update\\n`;\n}\n","import {\n  copyFileSync,\n  cpSync,\n  existsSync,\n  lstatSync,\n  mkdirSync,\n  readdirSync,\n  renameSync,\n  rmSync,\n  symlinkSync,\n  unlinkSync,\n  writeFileSync,\n} from \"node:fs\";\nimport { join } from \"node:path\";\nimport semver from \"semver\";\nimport { CURRENT_SYMLINK, RELEASES_DIR, releaseDir, THREADBASE_ROOT } from \"./paths\";\nimport { versionStamp } from \"./stamp-version\";\n\nconst KEEP_LAST_N = 2;\n\n/**\n * Repoints ~/.threadbase/current at the new release directory.\n *\n * macOS/Linux: atomic symlink swap via rename(2).\n * Windows: no reliable symlinks without admin — copy the release dir into\n * `current/` as a plain folder. This mirrors what the existing Windows\n * deploy script does today.\n */\nexport function swapCurrent(version: string): void {\n  const target = releaseDir(version);\n  if (!existsSync(target)) {\n    throw new Error(`Cannot swap to ${version}: ${target} does not exist`);\n  }\n\n  if (process.platform === \"win32\") {\n    // Treat CURRENT_SYMLINK as a directory we replace wholesale.\n    const tmp = `${CURRENT_SYMLINK}.new`;\n    rmSync(tmp, { recursive: true, force: true });\n    cpSync(target, tmp, { recursive: true });\n    if (existsSync(CURRENT_SYMLINK)) {\n      rmSync(CURRENT_SYMLINK, { recursive: true, force: true });\n    }\n    renameSync(tmp, CURRENT_SYMLINK);\n    // Keep cli.js in sync so launch.cmd always points to the same entry\n    // point regardless of whether the update came from the deploy script\n    // (which writes cli.js directly) or the auto-updater (which writes\n    // current/ and must mirror it here).\n    copyFileSync(join(CURRENT_SYMLINK, \"dist\", \"cli.cjs\"), join(THREADBASE_ROOT, \"cli.js\"));\n    publishVersionTxt(target, version);\n    return;\n  }\n\n  const tmpLink = `${CURRENT_SYMLINK}.new`;\n  if (existsSync(tmpLink) || lstatSafeIsSymlink(tmpLink)) {\n    unlinkSync(tmpLink);\n  }\n  symlinkSync(target, tmpLink);\n  renameSync(tmpLink, CURRENT_SYMLINK);\n\n  // Keep cli.js in sync so the launchd/systemd entry point always resolves\n  // to the new release, regardless of whether the update came from the deploy\n  // script (which writes cli.js directly) or the auto-updater (which only\n  // swaps current/ and must mirror it here).\n  const cliJs = join(THREADBASE_ROOT, \"cli.js\");\n  const tmpCliJs = `${cliJs}.new`;\n  if (existsSync(tmpCliJs) || lstatSafeIsSymlink(tmpCliJs)) unlinkSync(tmpCliJs);\n  symlinkSync(join(target, \"dist\", \"cli.cjs\"), tmpCliJs);\n  renameSync(tmpCliJs, cliJs);\n\n  publishVersionTxt(target, version);\n}\n\n/**\n * Publishes the activated release's version stamp to $INSTALL_DIR/version.txt,\n * which is where getVersion() reads the running version from on every install\n * layout.\n *\n * This mirrors the second half of activate_release() in scripts/deploy.sh and\n * Invoke-Activate in scripts/deploy.ps1, which copy the same sidecar. Without\n * it the updater swaps the code but leaves version.txt reporting the previously\n * activated build, so the next `update --check` re-detects the old version and\n * reinstalls the same release — forever, once an hour.\n *\n * Copies the staged sidecar rather than formatting the version here so a\n * tarball that already ships its own dist/version.txt stays authoritative.\n */\nfunction publishVersionTxt(target: string, version: string): void {\n  const dest = join(THREADBASE_ROOT, \"version.txt\");\n  try {\n    copyFileSync(join(target, \"dist\", \"version.txt\"), dest);\n  } catch {\n    // No staged sidecar (a tarball unpacked without one). We still know the\n    // version being activated, so stamp it directly rather than leaving\n    // version.txt pointing at the release we just replaced.\n    writeFileSync(dest, versionStamp(version));\n  }\n}\n\nfunction lstatSafeIsSymlink(path: string): boolean {\n  try {\n    return lstatSync(path).isSymbolicLink();\n  } catch {\n    return false;\n  }\n}\n\n/**\n * Removes release directories beyond the most recent N (by semver), keeping\n * the currently-active one even if it would otherwise be pruned.\n */\nexport function pruneOldReleases(activeVersion: string, keep: number = KEEP_LAST_N): string[] {\n  if (!existsSync(RELEASES_DIR)) return [];\n\n  const entries = readdirSync(RELEASES_DIR, { withFileTypes: true })\n    .filter((e) => e.isDirectory() && !e.name.startsWith(\".\"))\n    .map((e) => e.name)\n    .filter((name) => semver.valid(name) !== null);\n\n  const sorted = entries.sort((a, b) => semver.rcompare(a, b));\n  const toKeep = new Set<string>(sorted.slice(0, keep));\n  toKeep.add(activeVersion);\n\n  const removed: string[] = [];\n  for (const name of sorted) {\n    if (toKeep.has(name)) continue;\n    rmSync(releaseDir(name), { recursive: true, force: true });\n    removed.push(name);\n  }\n  return removed;\n}\n\nexport function ensureReleasesDir(): void {\n  mkdirSync(RELEASES_DIR, { recursive: true });\n}\n","import { mkdirSync, rmSync } from \"node:fs\";\nimport { extract as tarExtract } from \"tar\";\n\n/**\n * Extracts a tarball into `destDir`. Wipes `destDir` first to ensure a clean\n * install — callers must ensure the streamer process is not reading from it.\n */\nexport async function unpackTarball(opts: { tarballPath: string; destDir: string }): Promise<void> {\n  const { tarballPath, destDir } = opts;\n  rmSync(destDir, { recursive: true, force: true });\n  mkdirSync(destDir, { recursive: true });\n  await tarExtract({ file: tarballPath, cwd: destDir });\n}\n","import EE from 'events'\nimport fs from 'fs'\nimport { Minipass } from 'minipass'\n\nconst writev = fs.writev\n\nconst _autoClose = Symbol('_autoClose')\nconst _close = Symbol('_close')\nconst _ended = Symbol('_ended')\nconst _fd = Symbol('_fd')\nconst _finished = Symbol('_finished')\nconst _flags = Symbol('_flags')\nconst _flush = Symbol('_flush')\nconst _handleChunk = Symbol('_handleChunk')\nconst _makeBuf = Symbol('_makeBuf')\nconst _mode = Symbol('_mode')\nconst _needDrain = Symbol('_needDrain')\nconst _onerror = Symbol('_onerror')\nconst _onopen = Symbol('_onopen')\nconst _onread = Symbol('_onread')\nconst _onwrite = Symbol('_onwrite')\nconst _open = Symbol('_open')\nconst _path = Symbol('_path')\nconst _pos = Symbol('_pos')\nconst _queue = Symbol('_queue')\nconst _read = Symbol('_read')\nconst _readSize = Symbol('_readSize')\nconst _reading = Symbol('_reading')\nconst _remain = Symbol('_remain')\nconst _size = Symbol('_size')\nconst _write = Symbol('_write')\nconst _writing = Symbol('_writing')\nconst _defaultFlag = Symbol('_defaultFlag')\nconst _errored = Symbol('_errored')\n\nexport type ReadStreamOptions =\n  Minipass.Options<Minipass.ContiguousData> & {\n    fd?: number\n    readSize?: number\n    size?: number\n    autoClose?: boolean\n  }\n\nexport type ReadStreamEvents = Minipass.Events<Minipass.ContiguousData> & {\n  open: [fd: number]\n}\n\nexport class ReadStream extends Minipass<\n  Minipass.ContiguousData,\n  Buffer,\n  ReadStreamEvents\n> {\n  [_errored]: boolean = false;\n  [_fd]?: number;\n  [_path]: string;\n  [_readSize]: number;\n  [_reading]: boolean = false;\n  [_size]: number;\n  [_remain]: number;\n  [_autoClose]: boolean\n\n  constructor(path: string, opt: ReadStreamOptions) {\n    opt = opt || {}\n    super(opt)\n\n    this.readable = true\n    this.writable = false\n\n    if (typeof path !== 'string') {\n      throw new TypeError('path must be a string')\n    }\n\n    this[_errored] = false\n    this[_fd] = typeof opt.fd === 'number' ? opt.fd : undefined\n    this[_path] = path\n    this[_readSize] = opt.readSize || 16 * 1024 * 1024\n    this[_reading] = false\n    this[_size] = typeof opt.size === 'number' ? opt.size : Infinity\n    this[_remain] = this[_size]\n    this[_autoClose] =\n      typeof opt.autoClose === 'boolean' ? opt.autoClose : true\n\n    if (typeof this[_fd] === 'number') {\n      this[_read]()\n    } else {\n      this[_open]()\n    }\n  }\n\n  get fd() {\n    return this[_fd]\n  }\n\n  get path() {\n    return this[_path]\n  }\n\n  //@ts-ignore\n  write() {\n    throw new TypeError('this is a readable stream')\n  }\n\n  //@ts-ignore\n  end() {\n    throw new TypeError('this is a readable stream')\n  }\n\n  [_open]() {\n    fs.open(this[_path], 'r', (er, fd) => this[_onopen](er, fd))\n  }\n\n  [_onopen](er?: NodeJS.ErrnoException | null, fd?: number) {\n    if (er) {\n      this[_onerror](er)\n    } else {\n      this[_fd] = fd\n      this.emit('open', fd as number)\n      this[_read]()\n    }\n  }\n\n  [_makeBuf]() {\n    return Buffer.allocUnsafe(Math.min(this[_readSize], this[_remain]))\n  }\n\n  [_read]() {\n    if (!this[_reading]) {\n      this[_reading] = true\n      const buf = this[_makeBuf]()\n      /* c8 ignore start */\n      if (buf.length === 0) {\n        return process.nextTick(() => this[_onread](null, 0, buf))\n      }\n      /* c8 ignore stop */\n      fs.read(this[_fd] as number, buf, 0, buf.length, null, (er, br, b) =>\n        this[_onread](er, br, b),\n      )\n    }\n  }\n\n  [_onread](er?: NodeJS.ErrnoException | null, br?: number, buf?: Buffer) {\n    this[_reading] = false\n    if (er) {\n      this[_onerror](er)\n    } else if (this[_handleChunk](br as number, buf as Buffer)) {\n      this[_read]()\n    }\n  }\n\n  [_close]() {\n    if (this[_autoClose] && typeof this[_fd] === 'number') {\n      const fd = this[_fd]\n      this[_fd] = undefined\n      fs.close(fd, er =>\n        er ? this.emit('error', er) : this.emit('close'),\n      )\n    }\n  }\n\n  [_onerror](er: NodeJS.ErrnoException) {\n    this[_reading] = true\n    this[_close]()\n    this.emit('error', er)\n  }\n\n  [_handleChunk](br: number, buf: Buffer) {\n    let ret = false\n    // no effect if infinite\n    this[_remain] -= br\n    if (br > 0) {\n      ret = super.write(br < buf.length ? buf.subarray(0, br) : buf)\n    }\n\n    if (br === 0 || this[_remain] <= 0) {\n      ret = false\n      this[_close]()\n      super.end()\n    }\n\n    return ret\n  }\n\n  emit<Event extends keyof ReadStreamEvents>(\n    ev: Event,\n    ...args: ReadStreamEvents[Event]\n  ): boolean {\n    switch (ev) {\n      case 'prefinish':\n      case 'finish':\n        return false\n\n      case 'drain':\n        if (typeof this[_fd] === 'number') {\n          this[_read]()\n        }\n        return false\n\n      case 'error':\n        if (this[_errored]) {\n          return false\n        }\n        this[_errored] = true\n        return super.emit(ev, ...args)\n\n      default:\n        return super.emit(ev, ...args)\n    }\n  }\n}\n\nexport class ReadStreamSync extends ReadStream {\n  [_open]() {\n    let threw = true\n    try {\n      this[_onopen](null, fs.openSync(this[_path], 'r'))\n      threw = false\n    } finally {\n      if (threw) {\n        this[_close]()\n      }\n    }\n  }\n\n  [_read]() {\n    let threw = true\n    try {\n      if (!this[_reading]) {\n        this[_reading] = true\n        do {\n          const buf = this[_makeBuf]()\n          /* c8 ignore start */\n          const br =\n            buf.length === 0\n              ? 0\n              : fs.readSync(this[_fd] as number, buf, 0, buf.length, null)\n          /* c8 ignore stop */\n          if (!this[_handleChunk](br, buf)) {\n            break\n          }\n        } while (true)\n        this[_reading] = false\n      }\n      threw = false\n    } finally {\n      if (threw) {\n        this[_close]()\n      }\n    }\n  }\n\n  [_close]() {\n    if (this[_autoClose] && typeof this[_fd] === 'number') {\n      const fd = this[_fd]\n      this[_fd] = undefined\n      fs.closeSync(fd)\n      this.emit('close')\n    }\n  }\n}\n\nexport type WriteStreamOptions = {\n  fd?: number\n  autoClose?: boolean\n  mode?: number\n  captureRejections?: boolean\n  start?: number\n  flags?: string\n}\n\nexport class WriteStream extends EE {\n  readable: false = false\n  writable: boolean = true;\n  [_errored]: boolean = false;\n  [_writing]: boolean = false;\n  [_ended]: boolean = false;\n  [_queue]: Buffer[] = [];\n  [_needDrain]: boolean = false;\n  [_path]: string;\n  [_mode]: number;\n  [_autoClose]: boolean;\n  [_fd]?: number;\n  [_defaultFlag]: boolean;\n  [_flags]: string;\n  [_finished]: boolean = false;\n  [_pos]?: number\n\n  constructor(path: string, opt: WriteStreamOptions) {\n    opt = opt || {}\n    super(opt)\n    this[_path] = path\n    this[_fd] = typeof opt.fd === 'number' ? opt.fd : undefined\n    this[_mode] = opt.mode === undefined ? 0o666 : opt.mode\n    this[_pos] = typeof opt.start === 'number' ? opt.start : undefined\n    this[_autoClose] =\n      typeof opt.autoClose === 'boolean' ? opt.autoClose : true\n\n    // truncating makes no sense when writing into the middle\n    const defaultFlag = this[_pos] !== undefined ? 'r+' : 'w'\n    this[_defaultFlag] = opt.flags === undefined\n    this[_flags] = opt.flags === undefined ? defaultFlag : opt.flags\n\n    if (this[_fd] === undefined) {\n      this[_open]()\n    }\n  }\n\n  emit(ev: string, ...args: any[]) {\n    if (ev === 'error') {\n      if (this[_errored]) {\n        return false\n      }\n      this[_errored] = true\n    }\n    return super.emit(ev, ...args)\n  }\n\n  get fd() {\n    return this[_fd]\n  }\n\n  get path() {\n    return this[_path]\n  }\n\n  [_onerror](er: NodeJS.ErrnoException) {\n    this[_close]()\n    this[_writing] = true\n    this.emit('error', er)\n  }\n\n  [_open]() {\n    fs.open(this[_path], this[_flags], this[_mode], (er, fd) =>\n      this[_onopen](er, fd),\n    )\n  }\n\n  [_onopen](er?: null | NodeJS.ErrnoException, fd?: number) {\n    if (\n      this[_defaultFlag] &&\n      this[_flags] === 'r+' &&\n      er &&\n      er.code === 'ENOENT'\n    ) {\n      this[_flags] = 'w'\n      this[_open]()\n    } else if (er) {\n      this[_onerror](er)\n    } else {\n      this[_fd] = fd\n      this.emit('open', fd)\n      if (!this[_writing]) {\n        this[_flush]()\n      }\n    }\n  }\n\n  end(buf: string, enc?: BufferEncoding): this\n  end(buf?: Buffer, enc?: undefined): this\n  end(buf?: Buffer | string, enc?: BufferEncoding): this {\n    if (buf) {\n      //@ts-ignore\n      this.write(buf, enc)\n    }\n\n    this[_ended] = true\n\n    // synthetic after-write logic, where drain/finish live\n    if (\n      !this[_writing] &&\n      !this[_queue].length &&\n      typeof this[_fd] === 'number'\n    ) {\n      this[_onwrite](null, 0)\n    }\n    return this\n  }\n\n  write(buf: string, enc?: BufferEncoding): boolean\n  write(buf: Buffer, enc?: undefined): boolean\n  write(buf: Buffer | string, enc?: BufferEncoding): boolean {\n    if (typeof buf === 'string') {\n      buf = Buffer.from(buf, enc)\n    }\n\n    if (this[_ended]) {\n      this.emit('error', new Error('write() after end()'))\n      return false\n    }\n\n    if (this[_fd] === undefined || this[_writing] || this[_queue].length) {\n      this[_queue].push(buf)\n      this[_needDrain] = true\n      return false\n    }\n\n    this[_writing] = true\n    this[_write](buf)\n    return true\n  }\n\n  [_write](buf: Buffer) {\n    fs.write(\n      this[_fd] as number,\n      buf,\n      0,\n      buf.length,\n      this[_pos],\n      (er, bw) => this[_onwrite](er, bw),\n    )\n  }\n\n  [_onwrite](er?: null | NodeJS.ErrnoException, bw?: number) {\n    if (er) {\n      this[_onerror](er)\n    } else {\n      if (this[_pos] !== undefined && typeof bw === 'number') {\n        this[_pos] += bw\n      }\n      if (this[_queue].length) {\n        this[_flush]()\n      } else {\n        this[_writing] = false\n\n        if (this[_ended] && !this[_finished]) {\n          this[_finished] = true\n          this[_close]()\n          this.emit('finish')\n        } else if (this[_needDrain]) {\n          this[_needDrain] = false\n          this.emit('drain')\n        }\n      }\n    }\n  }\n\n  [_flush]() {\n    if (this[_queue].length === 0) {\n      if (this[_ended]) {\n        this[_onwrite](null, 0)\n      }\n    } else if (this[_queue].length === 1) {\n      this[_write](this[_queue].pop() as Buffer)\n    } else {\n      const iovec = this[_queue]\n      this[_queue] = []\n      writev(this[_fd] as number, iovec, this[_pos] as number, (er, bw) =>\n        this[_onwrite](er, bw),\n      )\n    }\n  }\n\n  [_close]() {\n    if (this[_autoClose] && typeof this[_fd] === 'number') {\n      const fd = this[_fd]\n      this[_fd] = undefined\n      fs.close(fd, er =>\n        er ? this.emit('error', er) : this.emit('close'),\n      )\n    }\n  }\n}\n\nexport class WriteStreamSync extends WriteStream {\n  [_open](): void {\n    let fd\n    // only wrap in a try{} block if we know we'll retry, to avoid\n    // the rethrow obscuring the error's source frame in most cases.\n    if (this[_defaultFlag] && this[_flags] === 'r+') {\n      try {\n        fd = fs.openSync(this[_path], this[_flags], this[_mode])\n      } catch (er) {\n        if ((er as NodeJS.ErrnoException)?.code === 'ENOENT') {\n          this[_flags] = 'w'\n          return this[_open]()\n        } else {\n          throw er\n        }\n      }\n    } else {\n      fd = fs.openSync(this[_path], this[_flags], this[_mode])\n    }\n\n    this[_onopen](null, fd)\n  }\n\n  [_close]() {\n    if (this[_autoClose] && typeof this[_fd] === 'number') {\n      const fd = this[_fd]\n      this[_fd] = undefined\n      fs.closeSync(fd)\n      this.emit('close')\n    }\n  }\n\n  [_write](buf: Buffer) {\n    // throw the original, but try to close if it fails\n    let threw = true\n    try {\n      this[_onwrite](\n        null,\n        fs.writeSync(this[_fd] as number, buf, 0, buf.length, this[_pos]),\n      )\n      threw = false\n    } finally {\n      if (threw) {\n        try {\n          this[_close]()\n        } catch {\n          // ok error\n        }\n      }\n    }\n  }\n}\n","const proc =\n  typeof process === 'object' && process\n    ? process\n    : {\n        stdout: null,\n        stderr: null,\n      }\nimport { EventEmitter } from 'node:events'\nimport Stream from 'node:stream'\nimport { StringDecoder } from 'node:string_decoder'\n\n/**\n * Same as StringDecoder, but exposing the `lastNeed` flag on the type\n */\ntype SD = StringDecoder & { lastNeed: boolean }\n\nexport type { SD, Pipe, PipeProxyErrors }\n\n/**\n * Return true if the argument is a Minipass stream, Node stream, or something\n * else that Minipass can interact with.\n */\nexport const isStream = (\n  s: any\n): s is Minipass.Readable | Minipass.Writable =>\n  !!s &&\n  typeof s === 'object' &&\n  (s instanceof Minipass ||\n    s instanceof Stream ||\n    isReadable(s) ||\n    isWritable(s))\n\n/**\n * Return true if the argument is a valid {@link Minipass.Readable}\n */\nexport const isReadable = (s: any): s is Minipass.Readable =>\n  !!s &&\n  typeof s === 'object' &&\n  s instanceof EventEmitter &&\n  typeof (s as Minipass.Readable).pipe === 'function' &&\n  // node core Writable streams have a pipe() method, but it throws\n  (s as Minipass.Readable).pipe !== Stream.Writable.prototype.pipe\n\n/**\n * Return true if the argument is a valid {@link Minipass.Writable}\n */\nexport const isWritable = (s: any): s is Minipass.Readable =>\n  !!s &&\n  typeof s === 'object' &&\n  s instanceof EventEmitter &&\n  typeof (s as Minipass.Writable).write === 'function' &&\n  typeof (s as Minipass.Writable).end === 'function'\n\nconst EOF = Symbol('EOF')\nconst MAYBE_EMIT_END = Symbol('maybeEmitEnd')\nconst EMITTED_END = Symbol('emittedEnd')\nconst EMITTING_END = Symbol('emittingEnd')\nconst EMITTED_ERROR = Symbol('emittedError')\nconst CLOSED = Symbol('closed')\nconst READ = Symbol('read')\nconst FLUSH = Symbol('flush')\nconst FLUSHCHUNK = Symbol('flushChunk')\nconst ENCODING = Symbol('encoding')\nconst DECODER = Symbol('decoder')\nconst FLOWING = Symbol('flowing')\nconst PAUSED = Symbol('paused')\nconst RESUME = Symbol('resume')\nconst BUFFER = Symbol('buffer')\nconst PIPES = Symbol('pipes')\nconst BUFFERLENGTH = Symbol('bufferLength')\nconst BUFFERPUSH = Symbol('bufferPush')\nconst BUFFERSHIFT = Symbol('bufferShift')\nconst OBJECTMODE = Symbol('objectMode')\n// internal event when stream is destroyed\nconst DESTROYED = Symbol('destroyed')\n// internal event when stream has an error\nconst ERROR = Symbol('error')\nconst EMITDATA = Symbol('emitData')\nconst EMITEND = Symbol('emitEnd')\nconst EMITEND2 = Symbol('emitEnd2')\nconst ASYNC = Symbol('async')\nconst ABORT = Symbol('abort')\nconst ABORTED = Symbol('aborted')\nconst SIGNAL = Symbol('signal')\nconst DATALISTENERS = Symbol('dataListeners')\nconst DISCARDED = Symbol('discarded')\n\nconst defer = (fn: (...a: any[]) => any) => Promise.resolve().then(fn)\nconst nodefer = (fn: (...a: any[]) => any) => fn()\n\n// events that mean 'the stream is over'\n// these are treated specially, and re-emitted\n// if they are listened for after emitting.\ntype EndishEvent = 'end' | 'finish' | 'prefinish'\nconst isEndish = (ev: any): ev is EndishEvent =>\n  ev === 'end' || ev === 'finish' || ev === 'prefinish'\n\nconst isArrayBufferLike = (b: any): b is ArrayBufferLike =>\n  b instanceof ArrayBuffer ||\n  (!!b &&\n    typeof b === 'object' &&\n    b.constructor &&\n    b.constructor.name === 'ArrayBuffer' &&\n    b.byteLength >= 0)\n\nconst isArrayBufferView = (b: any): b is ArrayBufferView =>\n  !Buffer.isBuffer(b) && ArrayBuffer.isView(b)\n\n/**\n * Options that may be passed to stream.pipe()\n */\nexport interface PipeOptions {\n  /**\n   * end the destination stream when the source stream ends\n   */\n  end?: boolean\n  /**\n   * proxy errors from the source stream to the destination stream\n   */\n  proxyErrors?: boolean\n}\n\n/**\n * Internal class representing a pipe to a destination stream.\n *\n * @internal\n */\nclass Pipe<T extends unknown> {\n  src: Minipass<T>\n  dest: Minipass<any, T>\n  opts: PipeOptions\n  ondrain: () => any\n  constructor(\n    src: Minipass<T>,\n    dest: Minipass.Writable,\n    opts: PipeOptions\n  ) {\n    this.src = src\n    this.dest = dest as Minipass<any, T>\n    this.opts = opts\n    this.ondrain = () => src[RESUME]()\n    this.dest.on('drain', this.ondrain)\n  }\n  unpipe() {\n    this.dest.removeListener('drain', this.ondrain)\n  }\n  // only here for the prototype\n  /* c8 ignore start */\n  proxyErrors(_er: any) {}\n  /* c8 ignore stop */\n  end() {\n    this.unpipe()\n    if (this.opts.end) this.dest.end()\n  }\n}\n\n/**\n * Internal class representing a pipe to a destination stream where\n * errors are proxied.\n *\n * @internal\n */\nclass PipeProxyErrors<T> extends Pipe<T> {\n  unpipe() {\n    this.src.removeListener('error', this.proxyErrors)\n    super.unpipe()\n  }\n  constructor(\n    src: Minipass<T>,\n    dest: Minipass.Writable,\n    opts: PipeOptions\n  ) {\n    super(src, dest, opts)\n    this.proxyErrors = (er: Error) => this.dest.emit('error', er)\n    src.on('error', this.proxyErrors)\n  }\n}\n\nexport namespace Minipass {\n  /**\n   * Encoding used to create a stream that outputs strings rather than\n   * Buffer objects.\n   */\n  export type Encoding = BufferEncoding | 'buffer' | null\n\n  /**\n   * Any stream that Minipass can pipe into\n   */\n  export type Writable =\n    | Minipass<any, any, any>\n    | NodeJS.WriteStream\n    | (NodeJS.WriteStream & { fd: number })\n    | (EventEmitter & {\n        end(): any\n        write(chunk: any, ...args: any[]): any\n      })\n\n  /**\n   * Any stream that can be read from\n   */\n  export type Readable =\n    | Minipass<any, any, any>\n    | NodeJS.ReadStream\n    | (NodeJS.ReadStream & { fd: number })\n    | (EventEmitter & {\n        pause(): any\n        resume(): any\n        pipe(...destArgs: any[]): any\n      })\n\n  /**\n   * Utility type that can be iterated sync or async\n   */\n  export type DualIterable<T> = Iterable<T> & AsyncIterable<T>\n\n  type EventArguments = Record<string | symbol, unknown[]>\n\n  /**\n   * The listing of events that a Minipass class can emit.\n   * Extend this when extending the Minipass class, and pass as\n   * the third template argument.  The key is the name of the event,\n   * and the value is the argument list.\n   *\n   * Any undeclared events will still be allowed, but the handler will get\n   * arguments as `unknown[]`.\n   */\n  export interface Events<RType extends any = Buffer>\n    extends EventArguments {\n    readable: []\n    data: [chunk: RType]\n    error: [er: unknown]\n    abort: [reason: unknown]\n    drain: []\n    resume: []\n    end: []\n    finish: []\n    prefinish: []\n    close: []\n    [DESTROYED]: [er?: unknown]\n    [ERROR]: [er: unknown]\n  }\n\n  /**\n   * String or buffer-like data that can be joined and sliced\n   */\n  export type ContiguousData =\n    | Buffer\n    | ArrayBufferLike\n    | ArrayBufferView\n    | string\n  export type BufferOrString = Buffer | string\n\n  /**\n   * Options passed to the Minipass constructor.\n   */\n  export type SharedOptions = {\n    /**\n     * Defer all data emission and other events until the end of the\n     * current tick, similar to Node core streams\n     */\n    async?: boolean\n    /**\n     * A signal which will abort the stream\n     */\n    signal?: AbortSignal\n    /**\n     * Output string encoding. Set to `null` or `'buffer'` (or omit) to\n     * emit Buffer objects rather than strings.\n     *\n     * Conflicts with `objectMode`\n     */\n    encoding?: BufferEncoding | null | 'buffer'\n    /**\n     * Output data exactly as it was written, supporting non-buffer/string\n     * data (such as arbitrary objects, falsey values, etc.)\n     *\n     * Conflicts with `encoding`\n     */\n    objectMode?: boolean\n  }\n\n  /**\n   * Options for a string encoded output\n   */\n  export type EncodingOptions = SharedOptions & {\n    encoding: BufferEncoding\n    objectMode?: false\n  }\n\n  /**\n   * Options for contiguous data buffer output\n   */\n  export type BufferOptions = SharedOptions & {\n    encoding?: null | 'buffer'\n    objectMode?: false\n  }\n\n  /**\n   * Options for objectMode arbitrary output\n   */\n  export type ObjectModeOptions = SharedOptions & {\n    objectMode: true\n    encoding?: null\n  }\n\n  /**\n   * Utility type to determine allowed options based on read type\n   */\n  export type Options<T> =\n    | ObjectModeOptions\n    | (T extends string\n        ? EncodingOptions\n        : T extends Buffer\n        ? BufferOptions\n        : SharedOptions)\n}\n\nconst isObjectModeOptions = (\n  o: Minipass.SharedOptions\n): o is Minipass.ObjectModeOptions => !!o.objectMode\n\nconst isEncodingOptions = (\n  o: Minipass.SharedOptions\n): o is Minipass.EncodingOptions =>\n  !o.objectMode && !!o.encoding && o.encoding !== 'buffer'\n\n/**\n * Main export, the Minipass class\n *\n * `RType` is the type of data emitted, defaults to Buffer\n *\n * `WType` is the type of data to be written, if RType is buffer or string,\n * then any {@link Minipass.ContiguousData} is allowed.\n *\n * `Events` is the set of event handler signatures that this object\n * will emit, see {@link Minipass.Events}\n */\nexport class Minipass<\n    RType extends unknown = Buffer,\n    WType extends unknown = RType extends Minipass.BufferOrString\n      ? Minipass.ContiguousData\n      : RType,\n    Events extends Minipass.Events<RType> = Minipass.Events<RType>\n  >\n  extends EventEmitter\n  implements Minipass.DualIterable<RType>\n{\n  [FLOWING]: boolean = false;\n  [PAUSED]: boolean = false;\n  [PIPES]: Pipe<RType>[] = [];\n  [BUFFER]: RType[] = [];\n  [OBJECTMODE]: boolean;\n  [ENCODING]: BufferEncoding | null;\n  [ASYNC]: boolean;\n  [DECODER]: SD | null;\n  [EOF]: boolean = false;\n  [EMITTED_END]: boolean = false;\n  [EMITTING_END]: boolean = false;\n  [CLOSED]: boolean = false;\n  [EMITTED_ERROR]: unknown = null;\n  [BUFFERLENGTH]: number = 0;\n  [DESTROYED]: boolean = false;\n  [SIGNAL]?: AbortSignal;\n  [ABORTED]: boolean = false;\n  [DATALISTENERS]: number = 0;\n  [DISCARDED]: boolean = false\n\n  /**\n   * true if the stream can be written\n   */\n  writable: boolean = true\n  /**\n   * true if the stream can be read\n   */\n  readable: boolean = true\n\n  /**\n   * If `RType` is Buffer, then options do not need to be provided.\n   * Otherwise, an options object must be provided to specify either\n   * {@link Minipass.SharedOptions.objectMode} or\n   * {@link Minipass.SharedOptions.encoding}, as appropriate.\n   */\n  constructor(\n    ...args:\n      | [Minipass.ObjectModeOptions]\n      | (RType extends Buffer\n          ? [] | [Minipass.Options<RType>]\n          : [Minipass.Options<RType>])\n  ) {\n    const options: Minipass.Options<RType> = (args[0] ||\n      {}) as Minipass.Options<RType>\n    super()\n    if (options.objectMode && typeof options.encoding === 'string') {\n      throw new TypeError(\n        'Encoding and objectMode may not be used together'\n      )\n    }\n    if (isObjectModeOptions(options)) {\n      this[OBJECTMODE] = true\n      this[ENCODING] = null\n    } else if (isEncodingOptions(options)) {\n      this[ENCODING] = options.encoding\n      this[OBJECTMODE] = false\n    } else {\n      this[OBJECTMODE] = false\n      this[ENCODING] = null\n    }\n    this[ASYNC] = !!options.async\n    this[DECODER] = this[ENCODING]\n      ? (new StringDecoder(this[ENCODING]) as SD)\n      : null\n\n    //@ts-ignore - private option for debugging and testing\n    if (options && options.debugExposeBuffer === true) {\n      Object.defineProperty(this, 'buffer', { get: () => this[BUFFER] })\n    }\n    //@ts-ignore - private option for debugging and testing\n    if (options && options.debugExposePipes === true) {\n      Object.defineProperty(this, 'pipes', { get: () => this[PIPES] })\n    }\n\n    const { signal } = options\n    if (signal) {\n      this[SIGNAL] = signal\n      if (signal.aborted) {\n        this[ABORT]()\n      } else {\n        signal.addEventListener('abort', () => this[ABORT]())\n      }\n    }\n  }\n\n  /**\n   * The amount of data stored in the buffer waiting to be read.\n   *\n   * For Buffer strings, this will be the total byte length.\n   * For string encoding streams, this will be the string character length,\n   * according to JavaScript's `string.length` logic.\n   * For objectMode streams, this is a count of the items waiting to be\n   * emitted.\n   */\n  get bufferLength() {\n    return this[BUFFERLENGTH]\n  }\n\n  /**\n   * The `BufferEncoding` currently in use, or `null`\n   */\n  get encoding() {\n    return this[ENCODING]\n  }\n\n  /**\n   * @deprecated - This is a read only property\n   */\n  set encoding(_enc) {\n    throw new Error('Encoding must be set at instantiation time')\n  }\n\n  /**\n   * @deprecated - Encoding may only be set at instantiation time\n   */\n  setEncoding(_enc: Minipass.Encoding) {\n    throw new Error('Encoding must be set at instantiation time')\n  }\n\n  /**\n   * True if this is an objectMode stream\n   */\n  get objectMode() {\n    return this[OBJECTMODE]\n  }\n\n  /**\n   * @deprecated - This is a read-only property\n   */\n  set objectMode(_om) {\n    throw new Error('objectMode must be set at instantiation time')\n  }\n\n  /**\n   * true if this is an async stream\n   */\n  get ['async'](): boolean {\n    return this[ASYNC]\n  }\n  /**\n   * Set to true to make this stream async.\n   *\n   * Once set, it cannot be unset, as this would potentially cause incorrect\n   * behavior.  Ie, a sync stream can be made async, but an async stream\n   * cannot be safely made sync.\n   */\n  set ['async'](a: boolean) {\n    this[ASYNC] = this[ASYNC] || !!a\n  }\n\n  // drop everything and get out of the flow completely\n  [ABORT]() {\n    this[ABORTED] = true\n    this.emit('abort', this[SIGNAL]?.reason)\n    this.destroy(this[SIGNAL]?.reason)\n  }\n\n  /**\n   * True if the stream has been aborted.\n   */\n  get aborted() {\n    return this[ABORTED]\n  }\n  /**\n   * No-op setter. Stream aborted status is set via the AbortSignal provided\n   * in the constructor options.\n   */\n  set aborted(_) {}\n\n  /**\n   * Write data into the stream\n   *\n   * If the chunk written is a string, and encoding is not specified, then\n   * `utf8` will be assumed. If the stream encoding matches the encoding of\n   * a written string, and the state of the string decoder allows it, then\n   * the string will be passed through to either the output or the internal\n   * buffer without any processing. Otherwise, it will be turned into a\n   * Buffer object for processing into the desired encoding.\n   *\n   * If provided, `cb` function is called immediately before return for\n   * sync streams, or on next tick for async streams, because for this\n   * base class, a chunk is considered \"processed\" once it is accepted\n   * and either emitted or buffered. That is, the callback does not indicate\n   * that the chunk has been eventually emitted, though of course child\n   * classes can override this function to do whatever processing is required\n   * and call `super.write(...)` only once processing is completed.\n   */\n  write(chunk: WType, cb?: () => void): boolean\n  write(\n    chunk: WType,\n    encoding?: Minipass.Encoding,\n    cb?: () => void\n  ): boolean\n  write(\n    chunk: WType,\n    encoding?: Minipass.Encoding | (() => void),\n    cb?: () => void\n  ): boolean {\n    if (this[ABORTED]) return false\n    if (this[EOF]) throw new Error('write after end')\n\n    if (this[DESTROYED]) {\n      this.emit(\n        'error',\n        Object.assign(\n          new Error('Cannot call write after a stream was destroyed'),\n          { code: 'ERR_STREAM_DESTROYED' }\n        )\n      )\n      return true\n    }\n\n    if (typeof encoding === 'function') {\n      cb = encoding\n      encoding = 'utf8'\n    }\n\n    if (!encoding) encoding = 'utf8'\n\n    const fn = this[ASYNC] ? defer : nodefer\n\n    // convert array buffers and typed array views into buffers\n    // at some point in the future, we may want to do the opposite!\n    // leave strings and buffers as-is\n    // anything is only allowed if in object mode, so throw\n    if (!this[OBJECTMODE] && !Buffer.isBuffer(chunk)) {\n      if (isArrayBufferView(chunk)) {\n        //@ts-ignore - sinful unsafe type changing\n        chunk = Buffer.from(\n          chunk.buffer,\n          chunk.byteOffset,\n          chunk.byteLength\n        )\n      } else if (isArrayBufferLike(chunk)) {\n        //@ts-ignore - sinful unsafe type changing\n        chunk = Buffer.from(chunk)\n      } else if (typeof chunk !== 'string') {\n        throw new Error(\n          'Non-contiguous data written to non-objectMode stream'\n        )\n      }\n    }\n\n    // handle object mode up front, since it's simpler\n    // this yields better performance, fewer checks later.\n    if (this[OBJECTMODE]) {\n      // maybe impossible?\n      /* c8 ignore start */\n      if (this[FLOWING] && this[BUFFERLENGTH] !== 0) this[FLUSH](true)\n      /* c8 ignore stop */\n\n      if (this[FLOWING]) this.emit('data', chunk as unknown as RType)\n      else this[BUFFERPUSH](chunk as unknown as RType)\n\n      if (this[BUFFERLENGTH] !== 0) this.emit('readable')\n\n      if (cb) fn(cb)\n\n      return this[FLOWING]\n    }\n\n    // at this point the chunk is a buffer or string\n    // don't buffer it up or send it to the decoder\n    if (!(chunk as Minipass.BufferOrString).length) {\n      if (this[BUFFERLENGTH] !== 0) this.emit('readable')\n      if (cb) fn(cb)\n      return this[FLOWING]\n    }\n\n    // fast-path writing strings of same encoding to a stream with\n    // an empty buffer, skipping the buffer/decoder dance\n    if (\n      typeof chunk === 'string' &&\n      // unless it is a string already ready for us to use\n      !(encoding === this[ENCODING] && !this[DECODER]?.lastNeed)\n    ) {\n      //@ts-ignore - sinful unsafe type change\n      chunk = Buffer.from(chunk, encoding)\n    }\n\n    if (Buffer.isBuffer(chunk) && this[ENCODING]) {\n      //@ts-ignore - sinful unsafe type change\n      chunk = this[DECODER].write(chunk)\n    }\n\n    // Note: flushing CAN potentially switch us into not-flowing mode\n    if (this[FLOWING] && this[BUFFERLENGTH] !== 0) this[FLUSH](true)\n\n    if (this[FLOWING]) this.emit('data', chunk as unknown as RType)\n    else this[BUFFERPUSH](chunk as unknown as RType)\n\n    if (this[BUFFERLENGTH] !== 0) this.emit('readable')\n\n    if (cb) fn(cb)\n\n    return this[FLOWING]\n  }\n\n  /**\n   * Low-level explicit read method.\n   *\n   * In objectMode, the argument is ignored, and one item is returned if\n   * available.\n   *\n   * `n` is the number of bytes (or in the case of encoding streams,\n   * characters) to consume. If `n` is not provided, then the entire buffer\n   * is returned, or `null` is returned if no data is available.\n   *\n   * If `n` is greater that the amount of data in the internal buffer,\n   * then `null` is returned.\n   */\n  read(n?: number | null): RType | null {\n    if (this[DESTROYED]) return null\n    this[DISCARDED] = false\n\n    if (\n      this[BUFFERLENGTH] === 0 ||\n      n === 0 ||\n      (n && n > this[BUFFERLENGTH])\n    ) {\n      this[MAYBE_EMIT_END]()\n      return null\n    }\n\n    if (this[OBJECTMODE]) n = null\n\n    if (this[BUFFER].length > 1 && !this[OBJECTMODE]) {\n      // not object mode, so if we have an encoding, then RType is string\n      // otherwise, must be Buffer\n      this[BUFFER] = [\n        (this[ENCODING]\n          ? this[BUFFER].join('')\n          : Buffer.concat(\n              this[BUFFER] as Buffer[],\n              this[BUFFERLENGTH]\n            )) as RType,\n      ]\n    }\n\n    const ret = this[READ](n || null, this[BUFFER][0] as RType)\n    this[MAYBE_EMIT_END]()\n    return ret\n  }\n\n  [READ](n: number | null, chunk: RType) {\n    if (this[OBJECTMODE]) this[BUFFERSHIFT]()\n    else {\n      const c = chunk as Minipass.BufferOrString\n      if (n === c.length || n === null) this[BUFFERSHIFT]()\n      else if (typeof c === 'string') {\n        this[BUFFER][0] = c.slice(n) as RType\n        chunk = c.slice(0, n) as RType\n        this[BUFFERLENGTH] -= n\n      } else {\n        this[BUFFER][0] = c.subarray(n) as RType\n        chunk = c.subarray(0, n) as RType\n        this[BUFFERLENGTH] -= n\n      }\n    }\n\n    this.emit('data', chunk)\n\n    if (!this[BUFFER].length && !this[EOF]) this.emit('drain')\n\n    return chunk\n  }\n\n  /**\n   * End the stream, optionally providing a final write.\n   *\n   * See {@link Minipass#write} for argument descriptions\n   */\n  end(cb?: () => void): this\n  end(chunk: WType, cb?: () => void): this\n  end(chunk: WType, encoding?: Minipass.Encoding, cb?: () => void): this\n  end(\n    chunk?: WType | (() => void),\n    encoding?: Minipass.Encoding | (() => void),\n    cb?: () => void\n  ): this {\n    if (typeof chunk === 'function') {\n      cb = chunk as () => void\n      chunk = undefined\n    }\n    if (typeof encoding === 'function') {\n      cb = encoding\n      encoding = 'utf8'\n    }\n    if (chunk !== undefined) this.write(chunk, encoding)\n    if (cb) this.once('end', cb)\n    this[EOF] = true\n    this.writable = false\n\n    // if we haven't written anything, then go ahead and emit,\n    // even if we're not reading.\n    // we'll re-emit if a new 'end' listener is added anyway.\n    // This makes MP more suitable to write-only use cases.\n    if (this[FLOWING] || !this[PAUSED]) this[MAYBE_EMIT_END]()\n    return this\n  }\n\n  // don't let the internal resume be overwritten\n  [RESUME]() {\n    if (this[DESTROYED]) return\n\n    if (!this[DATALISTENERS] && !this[PIPES].length) {\n      this[DISCARDED] = true\n    }\n    this[PAUSED] = false\n    this[FLOWING] = true\n    this.emit('resume')\n    if (this[BUFFER].length) this[FLUSH]()\n    else if (this[EOF]) this[MAYBE_EMIT_END]()\n    else this.emit('drain')\n  }\n\n  /**\n   * Resume the stream if it is currently in a paused state\n   *\n   * If called when there are no pipe destinations or `data` event listeners,\n   * this will place the stream in a \"discarded\" state, where all data will\n   * be thrown away. The discarded state is removed if a pipe destination or\n   * data handler is added, if pause() is called, or if any synchronous or\n   * asynchronous iteration is started.\n   */\n  resume() {\n    return this[RESUME]()\n  }\n\n  /**\n   * Pause the stream\n   */\n  pause() {\n    this[FLOWING] = false\n    this[PAUSED] = true\n    this[DISCARDED] = false\n  }\n\n  /**\n   * true if the stream has been forcibly destroyed\n   */\n  get destroyed() {\n    return this[DESTROYED]\n  }\n\n  /**\n   * true if the stream is currently in a flowing state, meaning that\n   * any writes will be immediately emitted.\n   */\n  get flowing() {\n    return this[FLOWING]\n  }\n\n  /**\n   * true if the stream is currently in a paused state\n   */\n  get paused() {\n    return this[PAUSED]\n  }\n\n  [BUFFERPUSH](chunk: RType) {\n    if (this[OBJECTMODE]) this[BUFFERLENGTH] += 1\n    else this[BUFFERLENGTH] += (chunk as Minipass.BufferOrString).length\n    this[BUFFER].push(chunk)\n  }\n\n  [BUFFERSHIFT](): RType {\n    if (this[OBJECTMODE]) this[BUFFERLENGTH] -= 1\n    else\n      this[BUFFERLENGTH] -= (\n        this[BUFFER][0] as Minipass.BufferOrString\n      ).length\n    return this[BUFFER].shift() as RType\n  }\n\n  [FLUSH](noDrain: boolean = false) {\n    do {} while (\n      this[FLUSHCHUNK](this[BUFFERSHIFT]()) &&\n      this[BUFFER].length\n    )\n\n    if (!noDrain && !this[BUFFER].length && !this[EOF]) this.emit('drain')\n  }\n\n  [FLUSHCHUNK](chunk: RType) {\n    this.emit('data', chunk)\n    return this[FLOWING]\n  }\n\n  /**\n   * Pipe all data emitted by this stream into the destination provided.\n   *\n   * Triggers the flow of data.\n   */\n  pipe<W extends Minipass.Writable>(dest: W, opts?: PipeOptions): W {\n    if (this[DESTROYED]) return dest\n    this[DISCARDED] = false\n\n    const ended = this[EMITTED_END]\n    opts = opts || {}\n    if (dest === proc.stdout || dest === proc.stderr) opts.end = false\n    else opts.end = opts.end !== false\n    opts.proxyErrors = !!opts.proxyErrors\n\n    // piping an ended stream ends immediately\n    if (ended) {\n      if (opts.end) dest.end()\n    } else {\n      // \"as\" here just ignores the WType, which pipes don't care about,\n      // since they're only consuming from us, and writing to the dest\n      this[PIPES].push(\n        !opts.proxyErrors\n          ? new Pipe<RType>(this as Minipass<RType>, dest, opts)\n          : new PipeProxyErrors<RType>(this as Minipass<RType>, dest, opts)\n      )\n      if (this[ASYNC]) defer(() => this[RESUME]())\n      else this[RESUME]()\n    }\n\n    return dest\n  }\n\n  /**\n   * Fully unhook a piped destination stream.\n   *\n   * If the destination stream was the only consumer of this stream (ie,\n   * there are no other piped destinations or `'data'` event listeners)\n   * then the flow of data will stop until there is another consumer or\n   * {@link Minipass#resume} is explicitly called.\n   */\n  unpipe<W extends Minipass.Writable>(dest: W) {\n    const p = this[PIPES].find(p => p.dest === dest)\n    if (p) {\n      if (this[PIPES].length === 1) {\n        if (this[FLOWING] && this[DATALISTENERS] === 0) {\n          this[FLOWING] = false\n        }\n        this[PIPES] = []\n      } else this[PIPES].splice(this[PIPES].indexOf(p), 1)\n      p.unpipe()\n    }\n  }\n\n  /**\n   * Alias for {@link Minipass#on}\n   */\n  addListener<Event extends keyof Events>(\n    ev: Event,\n    handler: (...args: Events[Event]) => any\n  ): this {\n    return this.on(ev, handler)\n  }\n\n  /**\n   * Mostly identical to `EventEmitter.on`, with the following\n   * behavior differences to prevent data loss and unnecessary hangs:\n   *\n   * - Adding a 'data' event handler will trigger the flow of data\n   *\n   * - Adding a 'readable' event handler when there is data waiting to be read\n   *   will cause 'readable' to be emitted immediately.\n   *\n   * - Adding an 'endish' event handler ('end', 'finish', etc.) which has\n   *   already passed will cause the event to be emitted immediately and all\n   *   handlers removed.\n   *\n   * - Adding an 'error' event handler after an error has been emitted will\n   *   cause the event to be re-emitted immediately with the error previously\n   *   raised.\n   */\n  on<Event extends keyof Events>(\n    ev: Event,\n    handler: (...args: Events[Event]) => any\n  ): this {\n    const ret = super.on(\n      ev as string | symbol,\n      handler as (...a: any[]) => any\n    )\n    if (ev === 'data') {\n      this[DISCARDED] = false\n      this[DATALISTENERS]++\n      if (!this[PIPES].length && !this[FLOWING]) {\n        this[RESUME]()\n      }\n    } else if (ev === 'readable' && this[BUFFERLENGTH] !== 0) {\n      super.emit('readable')\n    } else if (isEndish(ev) && this[EMITTED_END]) {\n      super.emit(ev)\n      this.removeAllListeners(ev)\n    } else if (ev === 'error' && this[EMITTED_ERROR]) {\n      const h = handler as (...a: Events['error']) => any\n      if (this[ASYNC]) defer(() => h.call(this, this[EMITTED_ERROR]))\n      else h.call(this, this[EMITTED_ERROR])\n    }\n    return ret\n  }\n\n  /**\n   * Alias for {@link Minipass#off}\n   */\n  removeListener<Event extends keyof Events>(\n    ev: Event,\n    handler: (...args: Events[Event]) => any\n  ) {\n    return this.off(ev, handler)\n  }\n\n  /**\n   * Mostly identical to `EventEmitter.off`\n   *\n   * If a 'data' event handler is removed, and it was the last consumer\n   * (ie, there are no pipe destinations or other 'data' event listeners),\n   * then the flow of data will stop until there is another consumer or\n   * {@link Minipass#resume} is explicitly called.\n   */\n  off<Event extends keyof Events>(\n    ev: Event,\n    handler: (...args: Events[Event]) => any\n  ) {\n    const ret = super.off(\n      ev as string | symbol,\n      handler as (...a: any[]) => any\n    )\n    // if we previously had listeners, and now we don't, and we don't\n    // have any pipes, then stop the flow, unless it's been explicitly\n    // put in a discarded flowing state via stream.resume().\n    if (ev === 'data') {\n      this[DATALISTENERS] = this.listeners('data').length\n      if (\n        this[DATALISTENERS] === 0 &&\n        !this[DISCARDED] &&\n        !this[PIPES].length\n      ) {\n        this[FLOWING] = false\n      }\n    }\n    return ret\n  }\n\n  /**\n   * Mostly identical to `EventEmitter.removeAllListeners`\n   *\n   * If all 'data' event handlers are removed, and they were the last consumer\n   * (ie, there are no pipe destinations), then the flow of data will stop\n   * until there is another consumer or {@link Minipass#resume} is explicitly\n   * called.\n   */\n  removeAllListeners<Event extends keyof Events>(ev?: Event) {\n    const ret = super.removeAllListeners(ev as string | symbol | undefined)\n    if (ev === 'data' || ev === undefined) {\n      this[DATALISTENERS] = 0\n      if (!this[DISCARDED] && !this[PIPES].length) {\n        this[FLOWING] = false\n      }\n    }\n    return ret\n  }\n\n  /**\n   * true if the 'end' event has been emitted\n   */\n  get emittedEnd() {\n    return this[EMITTED_END]\n  }\n\n  [MAYBE_EMIT_END]() {\n    if (\n      !this[EMITTING_END] &&\n      !this[EMITTED_END] &&\n      !this[DESTROYED] &&\n      this[BUFFER].length === 0 &&\n      this[EOF]\n    ) {\n      this[EMITTING_END] = true\n      this.emit('end')\n      this.emit('prefinish')\n      this.emit('finish')\n      if (this[CLOSED]) this.emit('close')\n      this[EMITTING_END] = false\n    }\n  }\n\n  /**\n   * Mostly identical to `EventEmitter.emit`, with the following\n   * behavior differences to prevent data loss and unnecessary hangs:\n   *\n   * If the stream has been destroyed, and the event is something other\n   * than 'close' or 'error', then `false` is returned and no handlers\n   * are called.\n   *\n   * If the event is 'end', and has already been emitted, then the event\n   * is ignored. If the stream is in a paused or non-flowing state, then\n   * the event will be deferred until data flow resumes. If the stream is\n   * async, then handlers will be called on the next tick rather than\n   * immediately.\n   *\n   * If the event is 'close', and 'end' has not yet been emitted, then\n   * the event will be deferred until after 'end' is emitted.\n   *\n   * If the event is 'error', and an AbortSignal was provided for the stream,\n   * and there are no listeners, then the event is ignored, matching the\n   * behavior of node core streams in the presense of an AbortSignal.\n   *\n   * If the event is 'finish' or 'prefinish', then all listeners will be\n   * removed after emitting the event, to prevent double-firing.\n   */\n  emit<Event extends keyof Events>(\n    ev: Event,\n    ...args: Events[Event]\n  ): boolean {\n    const data = args[0]\n    // error and close are only events allowed after calling destroy()\n    if (\n      ev !== 'error' &&\n      ev !== 'close' &&\n      ev !== DESTROYED &&\n      this[DESTROYED]\n    ) {\n      return false\n    } else if (ev === 'data') {\n      return !this[OBJECTMODE] && !data\n        ? false\n        : this[ASYNC]\n        ? (defer(() => this[EMITDATA](data as RType)), true)\n        : this[EMITDATA](data as RType)\n    } else if (ev === 'end') {\n      return this[EMITEND]()\n    } else if (ev === 'close') {\n      this[CLOSED] = true\n      // don't emit close before 'end' and 'finish'\n      if (!this[EMITTED_END] && !this[DESTROYED]) return false\n      const ret = super.emit('close')\n      this.removeAllListeners('close')\n      return ret\n    } else if (ev === 'error') {\n      this[EMITTED_ERROR] = data\n      super.emit(ERROR, data)\n      const ret =\n        !this[SIGNAL] || this.listeners('error').length\n          ? super.emit('error', data)\n          : false\n      this[MAYBE_EMIT_END]()\n      return ret\n    } else if (ev === 'resume') {\n      const ret = super.emit('resume')\n      this[MAYBE_EMIT_END]()\n      return ret\n    } else if (ev === 'finish' || ev === 'prefinish') {\n      const ret = super.emit(ev)\n      this.removeAllListeners(ev)\n      return ret\n    }\n\n    // Some other unknown event\n    const ret = super.emit(ev as string, ...args)\n    this[MAYBE_EMIT_END]()\n    return ret\n  }\n\n  [EMITDATA](data: RType) {\n    for (const p of this[PIPES]) {\n      if (p.dest.write(data as RType) === false) this.pause()\n    }\n    const ret = this[DISCARDED] ? false : super.emit('data', data)\n    this[MAYBE_EMIT_END]()\n    return ret\n  }\n\n  [EMITEND]() {\n    if (this[EMITTED_END]) return false\n\n    this[EMITTED_END] = true\n    this.readable = false\n    return this[ASYNC]\n      ? (defer(() => this[EMITEND2]()), true)\n      : this[EMITEND2]()\n  }\n\n  [EMITEND2]() {\n    if (this[DECODER]) {\n      const data = this[DECODER].end()\n      if (data) {\n        for (const p of this[PIPES]) {\n          p.dest.write(data as RType)\n        }\n        if (!this[DISCARDED]) super.emit('data', data)\n      }\n    }\n\n    for (const p of this[PIPES]) {\n      p.end()\n    }\n    const ret = super.emit('end')\n    this.removeAllListeners('end')\n    return ret\n  }\n\n  /**\n   * Return a Promise that resolves to an array of all emitted data once\n   * the stream ends.\n   */\n  async collect(): Promise<RType[] & { dataLength: number }> {\n    const buf: RType[] & { dataLength: number } = Object.assign([], {\n      dataLength: 0,\n    })\n    if (!this[OBJECTMODE]) buf.dataLength = 0\n    // set the promise first, in case an error is raised\n    // by triggering the flow here.\n    const p = this.promise()\n    this.on('data', c => {\n      buf.push(c)\n      if (!this[OBJECTMODE])\n        buf.dataLength += (c as Minipass.BufferOrString).length\n    })\n    await p\n    return buf\n  }\n\n  /**\n   * Return a Promise that resolves to the concatenation of all emitted data\n   * once the stream ends.\n   *\n   * Not allowed on objectMode streams.\n   */\n  async concat(): Promise<RType> {\n    if (this[OBJECTMODE]) {\n      throw new Error('cannot concat in objectMode')\n    }\n    const buf = await this.collect()\n    return (\n      this[ENCODING]\n        ? buf.join('')\n        : Buffer.concat(buf as Buffer[], buf.dataLength)\n    ) as RType\n  }\n\n  /**\n   * Return a void Promise that resolves once the stream ends.\n   */\n  async promise(): Promise<void> {\n    return new Promise<void>((resolve, reject) => {\n      this.on(DESTROYED, () => reject(new Error('stream destroyed')))\n      this.on('error', er => reject(er))\n      this.on('end', () => resolve())\n    })\n  }\n\n  /**\n   * Asynchronous `for await of` iteration.\n   *\n   * This will continue emitting all chunks until the stream terminates.\n   */\n  [Symbol.asyncIterator](): AsyncGenerator<RType, void, void> {\n    // set this up front, in case the consumer doesn't call next()\n    // right away.\n    this[DISCARDED] = false\n    let stopped = false\n    const stop = async (): Promise<IteratorReturnResult<void>> => {\n      this.pause()\n      stopped = true\n      return { value: undefined, done: true }\n    }\n    const next = (): Promise<IteratorResult<RType, void>> => {\n      if (stopped) return stop()\n      const res = this.read()\n      if (res !== null) return Promise.resolve({ done: false, value: res })\n\n      if (this[EOF]) return stop()\n\n      let resolve!: (res: IteratorResult<RType>) => void\n      let reject!: (er: unknown) => void\n      const onerr = (er: unknown) => {\n        this.off('data', ondata)\n        this.off('end', onend)\n        this.off(DESTROYED, ondestroy)\n        stop()\n        reject(er)\n      }\n      const ondata = (value: RType) => {\n        this.off('error', onerr)\n        this.off('end', onend)\n        this.off(DESTROYED, ondestroy)\n        this.pause()\n        resolve({ value, done: !!this[EOF] })\n      }\n      const onend = () => {\n        this.off('error', onerr)\n        this.off('data', ondata)\n        this.off(DESTROYED, ondestroy)\n        stop()\n        resolve({ done: true, value: undefined })\n      }\n      const ondestroy = () => onerr(new Error('stream destroyed'))\n      return new Promise<IteratorResult<RType>>((res, rej) => {\n        reject = rej\n        resolve = res\n        this.once(DESTROYED, ondestroy)\n        this.once('error', onerr)\n        this.once('end', onend)\n        this.once('data', ondata)\n      })\n    }\n\n    return {\n      next,\n      throw: stop,\n      return: stop,\n      [Symbol.asyncIterator]() {\n        return this\n      },\n      [Symbol.asyncDispose]: async () => {},\n    }\n  }\n\n  /**\n   * Synchronous `for of` iteration.\n   *\n   * The iteration will terminate when the internal buffer runs out, even\n   * if the stream has not yet terminated.\n   */\n  [Symbol.iterator](): Generator<RType, void, void> {\n    // set this up front, in case the consumer doesn't call next()\n    // right away.\n    this[DISCARDED] = false\n    let stopped = false\n    const stop = (): IteratorReturnResult<void> => {\n      this.pause()\n      this.off(ERROR, stop)\n      this.off(DESTROYED, stop)\n      this.off('end', stop)\n      stopped = true\n      return { done: true, value: undefined }\n    }\n\n    const next = (): IteratorResult<RType, void> => {\n      if (stopped) return stop()\n      const value = this.read()\n      return value === null ? stop() : { done: false, value }\n    }\n\n    this.once('end', stop)\n    this.once(ERROR, stop)\n    this.once(DESTROYED, stop)\n\n    return {\n      next,\n      throw: stop,\n      return: stop,\n      [Symbol.iterator]() {\n        return this\n      },\n      [Symbol.dispose]: () => {},\n    }\n  }\n\n  /**\n   * Destroy a stream, preventing it from being used for any further purpose.\n   *\n   * If the stream has a `close()` method, then it will be called on\n   * destruction.\n   *\n   * After destruction, any attempt to write data, read data, or emit most\n   * events will be ignored.\n   *\n   * If an error argument is provided, then it will be emitted in an\n   * 'error' event.\n   */\n  destroy(er?: unknown) {\n    if (this[DESTROYED]) {\n      if (er) this.emit('error', er)\n      else this.emit(DESTROYED)\n      return this\n    }\n\n    this[DESTROYED] = true\n    this[DISCARDED] = true\n\n    // throw away all buffered data, it's never coming out\n    this[BUFFER].length = 0\n    this[BUFFERLENGTH] = 0\n\n    const wc = this as Minipass<RType, WType, Events> & {\n      close?: () => void\n    }\n    if (typeof wc.close === 'function' && !this[CLOSED]) wc.close()\n\n    if (er) this.emit('error', er)\n    // if no error to emit, still reject pending promises\n    else this.emit(DESTROYED)\n\n    return this\n  }\n\n  /**\n   * Alias for {@link isStream}\n   *\n   * Former export location, maintained for backwards compatibility.\n   *\n   * @deprecated\n   */\n  static get isStream() {\n    return isStream\n  }\n}\n","import { WriteStream, WriteStreamSync } from '@isaacs/fs-minipass'\nimport type { Minipass } from 'minipass'\nimport path from 'node:path'\nimport { list } from './list.js'\nimport { makeCommand } from './make-command.js'\nimport type {\n  TarOptions,\n  TarOptionsFile,\n  TarOptionsSync,\n  TarOptionsSyncFile,\n} from './options.js'\nimport { Pack, PackSync } from './pack.js'\n\nconst createFileSync = (opt: TarOptionsSyncFile, files: string[]) => {\n  const p = new PackSync(opt)\n  const stream = new WriteStreamSync(opt.file, {\n    mode: opt.mode || 0o666,\n  })\n  p.pipe(stream as unknown as Minipass.Writable)\n  addFilesSync(p, files)\n}\n\nconst createFile = (opt: TarOptionsFile, files: string[]) => {\n  const p = new Pack(opt)\n  const stream = new WriteStream(opt.file, {\n    mode: opt.mode || 0o666,\n  })\n  p.pipe(stream as unknown as Minipass.Writable)\n\n  const promise = new Promise<void>((res, rej) => {\n    stream.on('error', rej)\n    stream.on('close', res)\n    p.on('error', rej)\n  })\n\n  addFilesAsync(p, files).catch(er => p.emit('error', er))\n\n  return promise\n}\n\nconst addFilesSync = (p: PackSync, files: string[]) => {\n  files.forEach(file => {\n    if (file.charAt(0) === '@') {\n      list({\n        file: path.resolve(p.cwd, file.slice(1)),\n        sync: true,\n        noResume: true,\n        onReadEntry: entry => p.add(entry),\n      })\n    } else {\n      p.add(file)\n    }\n  })\n  p.end()\n}\n\nconst addFilesAsync = async (p: Pack, files: string[]): Promise<void> => {\n  for (const file of files) {\n    if (file.charAt(0) === '@') {\n      await list({\n        file: path.resolve(String(p.cwd), file.slice(1)),\n        noResume: true,\n        onReadEntry: entry => {\n          p.add(entry)\n        },\n      })\n    } else {\n      p.add(file)\n    }\n  }\n  p.end()\n}\n\nconst createSync = (opt: TarOptionsSync, files: string[]) => {\n  const p = new PackSync(opt)\n  addFilesSync(p, files)\n  return p\n}\n\nconst createAsync = (opt: TarOptions, files: string[]) => {\n  const p = new Pack(opt)\n  addFilesAsync(p, files).catch(er => p.emit('error', er))\n  return p\n}\n\nexport const create = makeCommand(\n  createFileSync,\n  createFile,\n  createSync,\n  createAsync,\n  (_opt, files) => {\n    if (!files?.length) {\n      throw new TypeError('no paths specified to add to archive')\n    }\n  },\n)\n","// tar -t\nimport * as fsm from '@isaacs/fs-minipass'\nimport fs from 'node:fs'\nimport { dirname, parse } from 'path'\nimport { makeCommand } from './make-command.js'\nimport type {\n  TarOptions,\n  TarOptionsFile,\n  TarOptionsSyncFile,\n} from './options.js'\nimport { Parser } from './parse.js'\nimport { stripTrailingSlashes } from './strip-trailing-slashes.js'\n\nconst onReadEntryFunction = (opt: TarOptions) => {\n  const onReadEntry = opt.onReadEntry\n  opt.onReadEntry =\n    onReadEntry ?\n      e => {\n        onReadEntry(e)\n        e.resume()\n      }\n    : e => e.resume()\n}\n\n// construct a filter that limits the file entries listed\n// include child entries if a dir is included\nexport const filesFilter = (opt: TarOptions, files: string[]) => {\n  const map = new Map<string, boolean>(\n    files.map(f => [stripTrailingSlashes(f), true]),\n  )\n  const filter = opt.filter\n\n  // limit recursion to 100 levels\n  const MAX = 100\n  const mapHas = (file: string, r: string = '', depth = 0): boolean => {\n    /* c8 ignore start - excessive caution */\n    if (depth >= MAX) {\n      map.set(file, false)\n      return false\n    }\n    /* c8 ignore stop */\n    const root = r || parse(file).root || '.'\n    let ret: boolean\n    if (file === root) ret = false\n    else {\n      const m = map.get(file)\n      ret = m !== undefined ? m : mapHas(dirname(file), root, depth + 1)\n    }\n\n    map.set(file, ret)\n    return ret\n  }\n\n  opt.filter =\n    filter ?\n      (file, entry) =>\n        filter(file, entry) && mapHas(stripTrailingSlashes(file))\n    : file => mapHas(stripTrailingSlashes(file))\n}\n\nconst listFileSync = (opt: TarOptionsSyncFile) => {\n  const p = new Parser(opt)\n  const file = opt.file\n  let fd: number | undefined\n  try {\n    fd = fs.openSync(file, 'r')\n    const stat: fs.Stats = fs.fstatSync(fd)\n    const readSize: number = opt.maxReadSize || 16 * 1024 * 1024\n    if (stat.size < readSize) {\n      const buf = Buffer.allocUnsafe(stat.size)\n      const read = fs.readSync(fd, buf, 0, stat.size, 0)\n      p.end(read === buf.byteLength ? buf : buf.subarray(0, read))\n    } else {\n      let pos = 0\n      const buf = Buffer.allocUnsafe(readSize)\n      while (pos < stat.size) {\n        const bytesRead = fs.readSync(fd, buf, 0, readSize, pos)\n        if (bytesRead === 0) break\n        pos += bytesRead\n        p.write(buf.subarray(0, bytesRead))\n      }\n      p.end()\n    }\n  } finally {\n    if (typeof fd === 'number') {\n      try {\n        fs.closeSync(fd)\n        /* c8 ignore next */\n      } catch {}\n    }\n  }\n}\n\nconst listFile = (\n  opt: TarOptionsFile,\n  _files: string[],\n): Promise<void> => {\n  const parse = new Parser(opt)\n  const readSize = opt.maxReadSize || 16 * 1024 * 1024\n\n  const file = opt.file\n  const p = new Promise<void>((resolve, reject) => {\n    parse.on('error', reject)\n    parse.on('end', resolve)\n\n    fs.stat(file, (er, stat) => {\n      if (er) {\n        reject(er)\n      } else {\n        const stream = new fsm.ReadStream(file, {\n          readSize: readSize,\n          size: stat.size,\n        })\n        stream.on('error', reject)\n        stream.pipe(parse)\n      }\n    })\n  })\n  return p\n}\n\nexport const list = makeCommand(\n  listFileSync,\n  listFile,\n  opt => new Parser(opt) as Parser & { sync: true },\n  opt => new Parser(opt),\n  (opt, files) => {\n    if (files?.length) filesFilter(opt, files)\n    if (!opt.noResume) onReadEntryFunction(opt)\n  },\n)\n","// turn tar(1) style args like `C` into the more verbose things like `cwd`\n\nimport { type GzipOptions, type ZlibOptions } from 'minizlib'\nimport { type Stats } from 'node:fs'\nimport { type ReadEntry } from './read-entry.js'\nimport { type WarnData } from './warn-method.js'\nimport type { WriteEntry } from './write-entry.js'\n\nconst argmap = new Map<keyof TarOptionsWithAliases, keyof TarOptions>([\n  ['C', 'cwd'],\n  ['f', 'file'],\n  ['z', 'gzip'],\n  ['P', 'preservePaths'],\n  ['U', 'unlink'],\n  ['strip-components', 'strip'],\n  ['stripComponents', 'strip'],\n  ['keep-newer', 'newer'],\n  ['keepNewer', 'newer'],\n  ['keep-newer-files', 'newer'],\n  ['keepNewerFiles', 'newer'],\n  ['k', 'keep'],\n  ['keep-existing', 'keep'],\n  ['keepExisting', 'keep'],\n  ['m', 'noMtime'],\n  ['no-mtime', 'noMtime'],\n  ['p', 'preserveOwner'],\n  ['L', 'follow'],\n  ['h', 'follow'],\n  ['onentry', 'onReadEntry'],\n])\n\n/**\n * The options that can be provided to tar commands.\n *\n * Note that some of these are only relevant for certain commands, since\n * they are specific to reading or writing.\n *\n * Aliases are provided in the {@link TarOptionsWithAliases} type.\n */\nexport interface TarOptions {\n  //////////////////////////\n  // shared options\n\n  /**\n   * Perform all I/O operations synchronously. If the stream is ended\n   * immediately, then it will be processed entirely synchronously.\n   */\n  sync?: boolean\n\n  /**\n   * The tar file to be read and/or written. When this is set, a stream\n   * is not returned. Asynchronous commands will return a promise indicating\n   * when the operation is completed, and synchronous commands will return\n   * immediately.\n   */\n  file?: string\n\n  /**\n   * Treat warnings as crash-worthy errors. Defaults false.\n   */\n  strict?: boolean\n\n  /**\n   * The effective current working directory for this tar command\n   */\n  cwd?: string\n\n  /**\n   * When creating a tar archive, this can be used to compress it as well.\n   * Set to `true` to use the default gzip options, or customize them as\n   * needed.\n   *\n   * When reading, if this is unset, then the compression status will be\n   * inferred from the archive data. This is generally best, unless you are\n   * sure of the compression settings in use to create the archive, and want to\n   * fail if the archive doesn't match expectations.\n   */\n  gzip?: boolean | GzipOptions\n\n  /**\n   * When creating archives, preserve absolute and `..` paths in the archive,\n   * rather than sanitizing them under the cwd.\n   *\n   * When extracting, allow absolute paths, paths containing `..`, and\n   * extracting through symbolic links. By default, the root `/` is stripped\n   * from absolute paths (eg, turning `/x/y/z` into `x/y/z`), paths containing\n   * `..` are not extracted, and any file whose location would be modified by a\n   * symbolic link is not extracted.\n   *\n   * **WARNING** This is almost always unsafe, and must NEVER be used on\n   * archives from untrusted sources, such as user input, and every entry must\n   * be validated to ensure it is safe to write. Even if the input is not\n   * malicious, mistakes can cause a lot of damage!\n   */\n  preservePaths?: boolean\n\n  /**\n   * When extracting, do not set the `mtime` value for extracted entries to\n   * match the `mtime` in the archive.\n   *\n   * When creating archives, do not store the `mtime` value in the entry. Note\n   * that this prevents properly using other mtime-based features (such as\n   * `tar.update` or the `newer` option) with the resulting archive.\n   */\n  noMtime?: boolean\n\n  /**\n   * Set to `true` or an object with settings for `zlib.BrotliCompress()` to\n   * create a brotli-compressed archive\n   *\n   * When extracting, this will cause the archive to be treated as a\n   * brotli-compressed file if set to `true` or a ZlibOptions object.\n   *\n   * If set `false`, then brotli options will not be used.\n   *\n   * If this, the `gzip`, and `zstd` options are left `undefined`, then tar\n   * will attempt to infer the brotli compression status, but can only do so\n   * based on the filename. If the filename ends in `.tbr` or `.tar.br`, and\n   * the first 512 bytes are not a valid tar header, then brotli decompression\n   * will be attempted.\n   */\n  brotli?: boolean | ZlibOptions\n\n  /**\n   * Set to `true` or an object with settings for `zstd.compress()` to\n   * create a zstd-compressed archive\n   *\n   * When extracting, this will cause the archive to be treated as a\n   * zstd-compressed file if set to `true` or a ZlibOptions object.\n   *\n   * If set `false`, then zstd options will not be used.\n   *\n   * If this, the `gzip`, and `brotli` options are left `undefined`, then tar\n   * will attempt to infer the zstd compression status, but can only do so\n   * based on the filename. If the filename ends in `.tzst` or `.tar.zst`, and\n   * the first 512 bytes are not a valid tar header, then zstd decompression\n   * will be attempted.\n   */\n  zstd?: boolean | ZlibOptions\n\n  /**\n   * A function that is called with `(path, stat)` when creating an archive, or\n   * `(path, entry)` when extracting. Return true to process the file/entry, or\n   * false to exclude it.\n   */\n  filter?: (path: string, entry: Stats | ReadEntry) => boolean\n\n  /**\n   * A function that gets called for any warning encountered.\n   *\n   * Note: if `strict` is set, then the warning will throw, and this method\n   * will not be called.\n   */\n  onwarn?: (code: string, message: string, data: WarnData) => unknown\n\n  /**\n   * The maximum allowed ratio of decompressed bytes to compressed bytes when\n   * reading gzip, brotli, or zstd-compressed archives.\n   *\n   * This defaults to `1000` and aborts extraction or parsing when exceeded.\n   * Set to `Infinity` to disable the limit.\n   */\n  maxDecompressionRatio?: number\n\n  //////////////////////////\n  // extraction options\n\n  /**\n   * When extracting, unlink files before creating them. Without this option,\n   * tar overwrites existing files, which preserves existing hardlinks. With\n   * this option, existing hardlinks will be broken, as will any symlink that\n   * would affect the location of an extracted file.\n   */\n  unlink?: boolean\n\n  /**\n   * When extracting, strip the specified number of path portions from the\n   * entry path. For example, with `{strip: 2}`, the entry `a/b/c/d` would be\n   * extracted to `{cwd}/c/d`.\n   *\n   * Any entry whose entire path is stripped will be excluded.\n   */\n  strip?: number\n\n  /**\n   * When extracting, keep the existing file on disk if it's newer than the\n   * file in the archive.\n   */\n  newer?: boolean\n\n  /**\n   * When extracting, do not overwrite existing files at all.\n   */\n  keep?: boolean\n\n  /**\n   * When extracting, set the `uid` and `gid` of extracted entries to the `uid`\n   * and `gid` fields in the archive. Defaults to true when run as root, and\n   * false otherwise.\n   *\n   * If false, then files and directories will be set with the owner and group\n   * of the user running the process. This is similar to `-p` in `tar(1)`, but\n   * ACLs and other system-specific data is never unpacked in this\n   * implementation, and modes are set by default already.\n   */\n  preserveOwner?: boolean\n\n  /**\n   * The maximum depth of subfolders to extract into. This defaults to 1024.\n   * Anything deeper than the limit will raise a warning and skip the entry.\n   * Set to `Infinity` to remove the limitation.\n   */\n  maxDepth?: number\n\n  /**\n   * When extracting, force all created files and directories, and all\n   * implicitly created directories, to be owned by the specified user id,\n   * regardless of the `uid` field in the archive.\n   *\n   * Cannot be used along with `preserveOwner`. Requires also setting the `gid`\n   * option.\n   */\n  uid?: number\n\n  /**\n   * When extracting, force all created files and directories, and all\n   * implicitly created directories, to be owned by the specified group id,\n   * regardless of the `gid` field in the archive.\n   *\n   * Cannot be used along with `preserveOwner`. Requires also setting the `uid`\n   * option.\n   */\n  gid?: number\n\n  /**\n   * When extracting, provide a function that takes an `entry` object, and\n   * returns a stream, or any falsey value. If a stream is provided, then that\n   * stream's data will be written instead of the contents of the archive\n   * entry. If a falsey value is provided, then the entry is written to disk as\n   * normal.\n   *\n   * To exclude items from extraction, use the `filter` option.\n   *\n   * Note that using an asynchronous stream type with the `transform` option\n   * will cause undefined behavior in synchronous extractions.\n   * [MiniPass](http://npm.im/minipass)-based streams are designed for this use\n   * case.\n   */\n  transform?: (\n    entry: ReadEntry,\n  ) => ReadEntry | null | undefined | false | 0 | ''\n\n  /**\n   * Call `chmod()` to ensure that extracted files match the entry's mode\n   * field. Without this field set, all mode fields in archive entries are a\n   * best effort attempt only.\n   *\n   * Setting this necessitates a call to the deprecated `process.umask()`\n   * method to determine the default umask value, unless a `processUmask`\n   * config is provided as well.\n   *\n   * If not set, tar will attempt to create file system entries with whatever\n   * mode is provided, and let the implicit process `umask` apply normally, but\n   * if a file already exists to be written to, then its existing mode will not\n   * be modified.\n   *\n   * When setting `chmod: true`, it is highly recommend to set the\n   * {@link TarOptions#processUmask} option as well, to avoid the call to the\n   * deprecated (and thread-unsafe) `process.umask()` method.\n   */\n  chmod?: boolean\n\n  /**\n   * When setting the {@link TarOptions#chmod} option to `true`, you may\n   * provide a value here to avoid having to call the deprecated and\n   * thread-unsafe `process.umask()` method.\n   *\n   * This has no effect with `chmod` is not set to true, as mode values are not\n   * set explicitly anyway. If `chmod` is set to `true`, and a value is not\n   * provided here, then `process.umask()` must be called, which will result in\n   * deprecation warnings.\n   *\n   * The most common values for this are `0o22` (resulting in directories\n   * created with mode `0o755` and files with `0o644` by default) and `0o2`\n   * (resulting in directores created with mode `0o775` and files `0o664`, so\n   * they are group-writable).\n   */\n  processUmask?: number\n\n  //////////////////////////\n  // archive creation options\n\n  /**\n   * When parsing/listing archives, `entry` streams are by default resumed\n   * (set into \"flowing\" mode) immediately after the call to `onReadEntry()`.\n   * Set `noResume: true` to suppress this behavior.\n   *\n   * Note that when this is set, the stream will never complete until the\n   * data is consumed somehow.\n   *\n   * Set automatically in extract operations, since the entry is piped to\n   * a file system entry right away. Only relevant when parsing.\n   */\n  noResume?: boolean\n\n  /**\n   * When creating, updating, or replacing within archives, this method will\n   * be called with each WriteEntry that is created.\n   */\n  onWriteEntry?: (entry: WriteEntry) => unknown\n\n  /**\n   * When extracting or listing archives, this method will be called with\n   * each entry that is not excluded by a `filter`.\n   *\n   * Important when listing archives synchronously from a file, because there\n   * is otherwise no way to interact with the data!\n   */\n  onReadEntry?: (entry: ReadEntry) => unknown\n\n  /**\n   * Pack the targets of symbolic links rather than the link itself.\n   */\n  follow?: boolean\n\n  /**\n   * When creating archives, omit any metadata that is system-specific:\n   * `ctime`, `atime`, `uid`, `gid`, `uname`, `gname`, `dev`, `ino`, and\n   * `nlink`. Note that `mtime` is still included, because this is necessary\n   * for other time-based operations such as `tar.update`. Additionally, `mode`\n   * is set to a \"reasonable default\" for mose unix systems, based on an\n   * effective `umask` of `0o22`.\n   *\n   * This also defaults the `portable` option in the gzip configs when creating\n   * a compressed archive, in order to produce deterministic archives that are\n   * not operating-system specific.\n   */\n  portable?: boolean\n\n  /**\n   * When creating archives, do not recursively archive the contents of\n   * directories. By default, archiving a directory archives all of its\n   * contents as well.\n   */\n  noDirRecurse?: boolean\n\n  /**\n   * Suppress Pax extended headers when creating archives. Note that this means\n   * long paths and linkpaths will be truncated, and large or negative numeric\n   * values may be interpreted incorrectly.\n   */\n  noPax?: boolean\n\n  /**\n   * Set to a `Date` object to force a specific `mtime` value for everything\n   * written to an archive.\n   *\n   * This is useful when creating archives that are intended to be\n   * deterministic based on their contents, irrespective of the file's last\n   * modification time.\n   *\n   * Overridden by `noMtime`.\n   */\n  mtime?: Date\n\n  /**\n   * A path portion to prefix onto the entries added to an archive.\n   */\n  prefix?: string\n\n  /**\n   * The mode to set on any created file archive, defaults to 0o666\n   * masked by the process umask, often resulting in 0o644.\n   *\n   * This does *not* affect the mode fields of individual entries, or the\n   * mode status of extracted entries on the filesystem.\n   */\n  mode?: number\n\n  //////////////////////////\n  // internal options\n\n  /**\n   * A cache of mtime values, to avoid having to stat the same file repeatedly.\n   *\n   * @internal\n   */\n  mtimeCache?: Map<string, Date>\n\n  /**\n   * maximum buffer size for `fs.read()` operations.\n   *\n   * @internal\n   */\n  maxReadSize?: number\n\n  /**\n   * Filter modes of entries being unpacked, like `process.umask()`\n   *\n   * @internal\n   */\n  umask?: number\n\n  /**\n   * Default mode for directories. Used for all implicitly created directories,\n   * and any directories in the archive that do not have a mode field.\n   *\n   * @internal\n   */\n  dmode?: number\n\n  /**\n   * default mode for files\n   *\n   * @internal\n   */\n  fmode?: number\n\n  /**\n   * Map that tracks which directories already exist, for extraction\n   *\n   * @internal\n   */\n  dirCache?: Map<string, boolean>\n  /**\n   * maximum supported size of meta entries. Defaults to 1MB\n   *\n   * @internal\n   */\n  maxMetaEntrySize?: number\n\n  /**\n   * A Map object containing the device and inode value for any file whose\n   * `nlink` value is greater than 1, to identify hard links when creating\n   * archives.\n   *\n   * @internal\n   */\n  linkCache?: Map<LinkCacheKey, string>\n\n  /**\n   * A map object containing the results of `fs.readdir()` calls.\n   *\n   * @internal\n   */\n  readdirCache?: Map<string, string[]>\n\n  /**\n   * A cache of all `lstat` results, for use in creating archives.\n   *\n   * @internal\n   */\n  statCache?: Map<string, Stats>\n\n  /**\n   * Number of concurrent jobs to run when creating archives.\n   *\n   * Defaults to 4.\n   *\n   * @internal\n   */\n  jobs?: number\n\n  /**\n   * Automatically set to true on Windows systems.\n   *\n   * When extracting, causes behavior where filenames containing `<|>?:`\n   * characters are converted to windows-compatible escape sequences in the\n   * created filesystem entries.\n   *\n   * When packing, causes behavior where paths replace `\\` with `/`, and\n   * filenames containing the windows-compatible escaped forms of `<|>?:` are\n   * converted to actual `<|>?:` characters in the archive.\n   *\n   * @internal\n   */\n  win32?: boolean\n\n  /**\n   * For `WriteEntry` objects, the absolute path to the entry on the\n   * filesystem. By default, this is `resolve(cwd, entry.path)`, but it can be\n   * overridden explicitly.\n   *\n   * @internal\n   */\n  absolute?: string\n\n  /**\n   * Used with Parser stream interface, to attach and take over when the\n   * stream is completely parsed. If this is set, then the prefinish,\n   * finish, and end events will not fire, and are the responsibility of\n   * the ondone method to emit properly.\n   *\n   * @internal\n   */\n  ondone?: () => void\n\n  /**\n   * Mostly for testing, but potentially useful in some cases.\n   * Forcibly trigger a chown on every entry, no matter what.\n   */\n  forceChown?: boolean\n\n  /**\n   * ambiguous deprecated name for {@link onReadEntry}\n   *\n   * @deprecated\n   */\n  onentry?: (entry: ReadEntry) => unknown\n}\n\nexport type TarOptionsSync = TarOptions & { sync: true }\nexport type TarOptionsAsync = TarOptions & { sync?: false }\nexport type TarOptionsFile = TarOptions & { file: string }\nexport type TarOptionsNoFile = TarOptions & { file?: undefined }\nexport type TarOptionsSyncFile = TarOptionsSync & TarOptionsFile\nexport type TarOptionsAsyncFile = TarOptionsAsync & TarOptionsFile\nexport type TarOptionsSyncNoFile = TarOptionsSync & TarOptionsNoFile\nexport type TarOptionsAsyncNoFile = TarOptionsAsync & TarOptionsNoFile\n\nexport type LinkCacheKey = `${number}:${number}`\n\nexport interface TarOptionsWithAliases extends TarOptions {\n  /**\n   * The effective current working directory for this tar command\n   */\n  C?: TarOptions['cwd']\n  /**\n   * The tar file to be read and/or written. When this is set, a stream\n   * is not returned. Asynchronous commands will return a promise indicating\n   * when the operation is completed, and synchronous commands will return\n   * immediately.\n   */\n  f?: TarOptions['file']\n  /**\n   * When creating a tar archive, this can be used to compress it as well.\n   * Set to `true` to use the default gzip options, or customize them as\n   * needed.\n   *\n   * When reading, if this is unset, then the compression status will be\n   * inferred from the archive data. This is generally best, unless you are\n   * sure of the compression settings in use to create the archive, and want to\n   * fail if the archive doesn't match expectations.\n   */\n  z?: TarOptions['gzip']\n  /**\n   * When creating archives, preserve absolute and `..` paths in the archive,\n   * rather than sanitizing them under the cwd.\n   *\n   * When extracting, allow absolute paths, paths containing `..`, and\n   * extracting through symbolic links. By default, the root `/` is stripped\n   * from absolute paths (eg, turning `/x/y/z` into `x/y/z`), paths containing\n   * `..` are not extracted, and any file whose location would be modified by a\n   * symbolic link is not extracted.\n   *\n   * **WARNING** This is almost always unsafe, and must NEVER be used on\n   * archives from untrusted sources, such as user input, and every entry must\n   * be validated to ensure it is safe to write. Even if the input is not\n   * malicious, mistakes can cause a lot of damage!\n   */\n  P?: TarOptions['preservePaths']\n  /**\n   * When extracting, unlink files before creating them. Without this option,\n   * tar overwrites existing files, which preserves existing hardlinks. With\n   * this option, existing hardlinks will be broken, as will any symlink that\n   * would affect the location of an extracted file.\n   */\n  U?: TarOptions['unlink']\n  /**\n   * When extracting, strip the specified number of path portions from the\n   * entry path. For example, with `{strip: 2}`, the entry `a/b/c/d` would be\n   * extracted to `{cwd}/c/d`.\n   */\n  'strip-components'?: TarOptions['strip']\n  /**\n   * When extracting, strip the specified number of path portions from the\n   * entry path. For example, with `{strip: 2}`, the entry `a/b/c/d` would be\n   * extracted to `{cwd}/c/d`.\n   */\n  stripComponents?: TarOptions['strip']\n  /**\n   * When extracting, keep the existing file on disk if it's newer than the\n   * file in the archive.\n   */\n  'keep-newer'?: TarOptions['newer']\n  /**\n   * When extracting, keep the existing file on disk if it's newer than the\n   * file in the archive.\n   */\n  keepNewer?: TarOptions['newer']\n  /**\n   * When extracting, keep the existing file on disk if it's newer than the\n   * file in the archive.\n   */\n  'keep-newer-files'?: TarOptions['newer']\n  /**\n   * When extracting, keep the existing file on disk if it's newer than the\n   * file in the archive.\n   */\n  keepNewerFiles?: TarOptions['newer']\n  /**\n   * When extracting, do not overwrite existing files at all.\n   */\n  k?: TarOptions['keep']\n  /**\n   * When extracting, do not overwrite existing files at all.\n   */\n  'keep-existing'?: TarOptions['keep']\n  /**\n   * When extracting, do not overwrite existing files at all.\n   */\n  keepExisting?: TarOptions['keep']\n  /**\n   * When extracting, do not set the `mtime` value for extracted entries to\n   * match the `mtime` in the archive.\n   *\n   * When creating archives, do not store the `mtime` value in the entry. Note\n   * that this prevents properly using other mtime-based features (such as\n   * `tar.update` or the `newer` option) with the resulting archive.\n   */\n  m?: TarOptions['noMtime']\n  /**\n   * When extracting, do not set the `mtime` value for extracted entries to\n   * match the `mtime` in the archive.\n   *\n   * When creating archives, do not store the `mtime` value in the entry. Note\n   * that this prevents properly using other mtime-based features (such as\n   * `tar.update` or the `newer` option) with the resulting archive.\n   */\n  'no-mtime'?: TarOptions['noMtime']\n  /**\n   * When extracting, set the `uid` and `gid` of extracted entries to the `uid`\n   * and `gid` fields in the archive. Defaults to true when run as root, and\n   * false otherwise.\n   *\n   * If false, then files and directories will be set with the owner and group\n   * of the user running the process. This is similar to `-p` in `tar(1)`, but\n   * ACLs and other system-specific data is never unpacked in this\n   * implementation, and modes are set by default already.\n   */\n  p?: TarOptions['preserveOwner']\n  /**\n   * Pack the targets of symbolic links rather than the link itself.\n   */\n  L?: TarOptions['follow']\n  /**\n   * Pack the targets of symbolic links rather than the link itself.\n   */\n  h?: TarOptions['follow']\n\n  /**\n   * Deprecated option. Set explicitly false to set `chmod: true`. Ignored\n   * if {@link TarOptions#chmod} is set to any boolean value.\n   *\n   * @deprecated\n   */\n  noChmod?: boolean\n}\n\nexport type TarOptionsWithAliasesSync = TarOptionsWithAliases & {\n  sync: true\n}\nexport type TarOptionsWithAliasesAsync = TarOptionsWithAliases & {\n  sync?: false\n}\nexport type TarOptionsWithAliasesFile =\n  | (TarOptionsWithAliases & {\n      file: string\n    })\n  | (TarOptionsWithAliases & { f: string })\nexport type TarOptionsWithAliasesSyncFile = TarOptionsWithAliasesSync &\n  TarOptionsWithAliasesFile\nexport type TarOptionsWithAliasesAsyncFile = TarOptionsWithAliasesAsync &\n  TarOptionsWithAliasesFile\n\nexport type TarOptionsWithAliasesNoFile = TarOptionsWithAliases & {\n  f?: undefined\n  file?: undefined\n}\n\nexport type TarOptionsWithAliasesSyncNoFile = TarOptionsWithAliasesSync &\n  TarOptionsWithAliasesNoFile\nexport type TarOptionsWithAliasesAsyncNoFile = TarOptionsWithAliasesAsync &\n  TarOptionsWithAliasesNoFile\n\nexport const isSyncFile = <O extends TarOptions>(\n  o: O,\n): o is O & TarOptionsSyncFile => !!o.sync && !!o.file\nexport const isAsyncFile = <O extends TarOptions>(\n  o: O,\n): o is O & TarOptionsAsyncFile => !o.sync && !!o.file\nexport const isSyncNoFile = <O extends TarOptions>(\n  o: O,\n): o is O & TarOptionsSyncNoFile => !!o.sync && !o.file\nexport const isAsyncNoFile = <O extends TarOptions>(\n  o: O,\n): o is O & TarOptionsAsyncNoFile => !o.sync && !o.file\nexport const isSync = <O extends TarOptions>(\n  o: O,\n): o is O & TarOptionsSync => !!o.sync\nexport const isAsync = <O extends TarOptions>(\n  o: O,\n): o is O & TarOptionsAsync => !o.sync\nexport const isFile = <O extends TarOptions>(\n  o: O,\n): o is O & TarOptionsFile => !!o.file\nexport const isNoFile = <O extends TarOptions>(\n  o: O,\n): o is O & TarOptionsNoFile => !o.file\n\nconst dealiasKey = (k: keyof TarOptionsWithAliases): keyof TarOptions => {\n  const d = argmap.get(k)\n  if (d) return d\n  return k as keyof TarOptions\n}\n\nexport const dealias = (opt: TarOptionsWithAliases = {}): TarOptions => {\n  if (!opt) return {}\n  const result: Record<string, unknown> = {}\n  for (const [key, v] of Object.entries(opt) as [\n    keyof TarOptionsWithAliases,\n    unknown,\n  ][]) {\n    // TS doesn't know that aliases are going to always be the same type\n    const k = dealiasKey(key)\n    result[k] = v\n  }\n  // affordance for deprecated noChmod -> chmod\n  if (result.chmod === undefined && result.noChmod === false) {\n    result.chmod = true\n  }\n  delete result.noChmod\n  return result as TarOptions\n}\n","import type {\n  TarOptions,\n  TarOptionsAsyncFile,\n  TarOptionsAsyncNoFile,\n  TarOptionsSyncFile,\n  TarOptionsSyncNoFile,\n  TarOptionsWithAliases,\n  TarOptionsWithAliasesAsync,\n  TarOptionsWithAliasesAsyncFile,\n  TarOptionsWithAliasesAsyncNoFile,\n  TarOptionsWithAliasesFile,\n  TarOptionsWithAliasesNoFile,\n  TarOptionsWithAliasesSync,\n  TarOptionsWithAliasesSyncFile,\n  TarOptionsWithAliasesSyncNoFile,\n} from './options.js'\nimport {\n  dealias,\n  isAsyncFile,\n  isAsyncNoFile,\n  isSyncFile,\n  isSyncNoFile,\n} from './options.js'\n\nexport type CB = (er?: Error) => unknown\n\nexport type TarCommand<AsyncClass, SyncClass extends { sync: true }> = {\n  // async and no file specified\n  (): AsyncClass\n  (opt: TarOptionsWithAliasesAsyncNoFile): AsyncClass\n  (entries: string[]): AsyncClass\n  (opt: TarOptionsWithAliasesAsyncNoFile, entries: string[]): AsyncClass\n} & {\n  // sync and no file\n  (opt: TarOptionsWithAliasesSyncNoFile): SyncClass\n  (opt: TarOptionsWithAliasesSyncNoFile, entries: string[]): SyncClass\n} & {\n  // async and file\n  (opt: TarOptionsWithAliasesAsyncFile): Promise<void>\n  (opt: TarOptionsWithAliasesAsyncFile, entries: string[]): Promise<void>\n  (opt: TarOptionsWithAliasesAsyncFile, cb: CB): Promise<void>\n  (\n    opt: TarOptionsWithAliasesAsyncFile,\n    entries: string[],\n    cb: CB,\n  ): Promise<void>\n} & {\n  // sync and file\n  (opt: TarOptionsWithAliasesSyncFile): void\n  (opt: TarOptionsWithAliasesSyncFile, entries: string[]): void\n} & {\n  // sync, maybe file\n  (opt: TarOptionsWithAliasesSync): typeof opt extends (\n    TarOptionsWithAliasesFile\n  ) ?\n    void\n  : typeof opt extends TarOptionsWithAliasesNoFile ? SyncClass\n  : void | SyncClass\n  (\n    opt: TarOptionsWithAliasesSync,\n    entries: string[],\n  ): typeof opt extends TarOptionsWithAliasesFile ? void\n  : typeof opt extends TarOptionsWithAliasesNoFile ? SyncClass\n  : void | SyncClass\n} & {\n  // async, maybe file\n  (opt: TarOptionsWithAliasesAsync): typeof opt extends (\n    TarOptionsWithAliasesFile\n  ) ?\n    Promise<void>\n  : typeof opt extends TarOptionsWithAliasesNoFile ? AsyncClass\n  : Promise<void> | AsyncClass\n  (\n    opt: TarOptionsWithAliasesAsync,\n    entries: string[],\n  ): typeof opt extends TarOptionsWithAliasesFile ? Promise<void>\n  : typeof opt extends TarOptionsWithAliasesNoFile ? AsyncClass\n  : Promise<void> | AsyncClass\n  (opt: TarOptionsWithAliasesAsync, cb: CB): Promise<void>\n  (\n    opt: TarOptionsWithAliasesAsync,\n    entries: string[],\n    cb: CB,\n  ): typeof opt extends TarOptionsWithAliasesFile ? Promise<void>\n  : typeof opt extends TarOptionsWithAliasesNoFile ? never\n  : Promise<void>\n} & {\n  // maybe sync, file\n  (opt: TarOptionsWithAliasesFile): Promise<void> | void\n  (\n    opt: TarOptionsWithAliasesFile,\n    entries: string[],\n  ): typeof opt extends TarOptionsWithAliasesSync ? void\n  : typeof opt extends TarOptionsWithAliasesAsync ? Promise<void>\n  : Promise<void> | void\n  (opt: TarOptionsWithAliasesFile, cb: CB): Promise<void>\n  (\n    opt: TarOptionsWithAliasesFile,\n    entries: string[],\n    cb: CB,\n  ): typeof opt extends TarOptionsWithAliasesSync ? never\n  : typeof opt extends TarOptionsWithAliasesAsync ? Promise<void>\n  : Promise<void>\n} & {\n  // maybe sync, no file\n  (opt: TarOptionsWithAliasesNoFile): typeof opt extends (\n    TarOptionsWithAliasesSync\n  ) ?\n    SyncClass\n  : typeof opt extends TarOptionsWithAliasesAsync ? AsyncClass\n  : SyncClass | AsyncClass\n  (\n    opt: TarOptionsWithAliasesNoFile,\n    entries: string[],\n  ): typeof opt extends TarOptionsWithAliasesSync ? SyncClass\n  : typeof opt extends TarOptionsWithAliasesAsync ? AsyncClass\n  : SyncClass | AsyncClass\n} & {\n  // maybe sync, maybe file\n  (opt: TarOptionsWithAliases): typeof opt extends (\n    TarOptionsWithAliasesFile\n  ) ?\n    typeof opt extends TarOptionsWithAliasesSync ? void\n    : typeof opt extends TarOptionsWithAliasesAsync ? Promise<void>\n    : void | Promise<void>\n  : typeof opt extends TarOptionsWithAliasesNoFile ?\n    typeof opt extends TarOptionsWithAliasesSync ? SyncClass\n    : typeof opt extends TarOptionsWithAliasesAsync ? AsyncClass\n    : SyncClass | AsyncClass\n  : typeof opt extends TarOptionsWithAliasesSync ? SyncClass | void\n  : typeof opt extends TarOptionsWithAliasesAsync ?\n    AsyncClass | Promise<void>\n  : SyncClass | void | AsyncClass | Promise<void>\n} & {\n  // extras\n  syncFile: (opt: TarOptionsSyncFile, entries: string[]) => void\n  asyncFile: (\n    opt: TarOptionsAsyncFile,\n    entries: string[],\n    cb?: CB,\n  ) => Promise<void>\n  syncNoFile: (opt: TarOptionsSyncNoFile, entries: string[]) => SyncClass\n  asyncNoFile: (\n    opt: TarOptionsAsyncNoFile,\n    entries: string[],\n  ) => AsyncClass\n  validate?: (opt: TarOptions, entries?: string[]) => void\n}\n\nexport const makeCommand = <AsyncClass, SyncClass extends { sync: true }>(\n  syncFile: (opt: TarOptionsSyncFile, entries: string[]) => void,\n  asyncFile: (\n    opt: TarOptionsAsyncFile,\n    entries: string[],\n    cb?: CB,\n  ) => Promise<void>,\n  syncNoFile: (opt: TarOptionsSyncNoFile, entries: string[]) => SyncClass,\n  asyncNoFile: (\n    opt: TarOptionsAsyncNoFile,\n    entries: string[],\n  ) => AsyncClass,\n  validate?: (opt: TarOptions, entries?: string[]) => void,\n): TarCommand<AsyncClass, SyncClass> => {\n  return Object.assign(\n    (\n      opt_: TarOptionsWithAliases | string[] = [],\n      entries?: string[] | CB,\n      cb?: CB,\n    ) => {\n      if (Array.isArray(opt_)) {\n        entries = opt_\n        opt_ = {}\n      }\n\n      if (typeof entries === 'function') {\n        cb = entries\n        entries = undefined\n      }\n\n      entries = !entries ? [] : Array.from(entries)\n\n      const opt = dealias(opt_)\n\n      validate?.(opt, entries)\n\n      if (isSyncFile(opt)) {\n        if (typeof cb === 'function') {\n          throw new TypeError(\n            'callback not supported for sync tar functions',\n          )\n        }\n        return syncFile(opt, entries)\n      } else if (isAsyncFile(opt)) {\n        const p = asyncFile(opt, entries)\n        return cb ? p.then(() => cb(), cb) : p\n      } else if (isSyncNoFile(opt)) {\n        if (typeof cb === 'function') {\n          throw new TypeError(\n            'callback not supported for sync tar functions',\n          )\n        }\n        return syncNoFile(opt, entries)\n      } else if (isAsyncNoFile(opt)) {\n        if (typeof cb === 'function') {\n          throw new TypeError('callback only supported with file option')\n        }\n        return asyncNoFile(opt, entries)\n        /* c8 ignore start */\n      }\n      throw new Error('impossible options??')\n\n      /* c8 ignore stop */\n    },\n    {\n      syncFile,\n      asyncFile,\n      syncNoFile,\n      asyncNoFile,\n      validate,\n    },\n  ) as TarCommand<AsyncClass, SyncClass>\n}\n","// this[BUFFER] is the remainder of a chunk if we're waiting for\n// the full 512 bytes of a header to come in.  We will Buffer.concat()\n// it to the next write(), which is a mem copy, but a small one.\n//\n// this[QUEUE] is a list of entries that haven't been emitted\n// yet this can only get filled up if the user keeps write()ing after\n// a write() returns false, or does a write() with more than one entry\n//\n// We don't buffer chunks, we always parse them and either create an\n// entry, or push it into the active entry.  The ReadEntry class knows\n// to throw data away if .ignore=true\n//\n// Shift entry off the buffer when it emits 'end', and emit 'entry' for\n// the next one in the list.\n//\n// At any time, we're pushing body chunks into the entry at WRITEENTRY,\n// and waiting for 'end' on the entry at READENTRY\n//\n// ignored entries get .resume() called on them straight away\n\nimport { EventEmitter as EE } from 'events'\nimport { BrotliDecompress, Unzip, ZstdDecompress } from 'minizlib'\nimport { Header } from './header.js'\nimport type { TarOptions } from './options.js'\nimport { Pax } from './pax.js'\nimport { ReadEntry } from './read-entry.js'\nimport { warnMethod, type WarnData, type Warner } from './warn-method.js'\n\nconst maxMetaEntrySize = 1024 * 1024\nconst gzipHeader = Buffer.from([0x1f, 0x8b])\nconst zstdHeader = Buffer.from([0x28, 0xb5, 0x2f, 0xfd])\nconst ZIP_HEADER_LEN = Math.max(gzipHeader.length, zstdHeader.length)\n\nconst STATE = Symbol('state')\nconst WRITEENTRY = Symbol('writeEntry')\nconst READENTRY = Symbol('readEntry')\nconst NEXTENTRY = Symbol('nextEntry')\nconst PROCESSENTRY = Symbol('processEntry')\nconst EX = Symbol('extendedHeader')\nconst GEX = Symbol('globalExtendedHeader')\nconst META = Symbol('meta')\nconst EMITMETA = Symbol('emitMeta')\nconst BUFFER = Symbol('buffer')\nconst QUEUE = Symbol('queue')\nconst ENDED = Symbol('ended')\nconst EMITTEDEND = Symbol('emittedEnd')\nconst EMIT = Symbol('emit')\nconst UNZIP = Symbol('unzip')\nconst CONSUMECHUNK = Symbol('consumeChunk')\nconst CONSUMECHUNKSUB = Symbol('consumeChunkSub')\nconst CONSUMEBODY = Symbol('consumeBody')\nconst CONSUMEMETA = Symbol('consumeMeta')\nconst CONSUMEHEADER = Symbol('consumeHeader')\nconst CONSUMING = Symbol('consuming')\nconst BUFFERCONCAT = Symbol('bufferConcat')\nconst MAYBEEND = Symbol('maybeEnd')\nconst WRITING = Symbol('writing')\nconst ABORTED = Symbol('aborted')\nconst DONE = Symbol('onDone')\nconst SAW_VALID_ENTRY = Symbol('sawValidEntry')\nconst SAW_NULL_BLOCK = Symbol('sawNullBlock')\nconst SAW_EOF = Symbol('sawEOF')\nconst CLOSESTREAM = Symbol('closeStream')\nconst MAX_DECOMPRESSION_RATIO = 1000\nconst COMPRESSEDBYTESREAD = Symbol('compressedBytesRead')\nconst DECOMPRESSEDBYTESREAD = Symbol('decompressedBytesRead')\nconst CHECKDECOMPRESSIONRATIO = Symbol('checkDecompressionRatio')\n\nconst noop = () => true\n\nexport type State = 'begin' | 'header' | 'ignore' | 'meta' | 'body'\n\nexport class Parser extends EE implements Warner {\n  file: string\n  strict: boolean\n  maxMetaEntrySize: number\n  filter: Exclude<TarOptions['filter'], undefined>\n  brotli?: TarOptions['brotli']\n  zstd?: TarOptions['zstd']\n  maxDecompressionRatio: number\n\n  writable: true = true\n  readable: false = false;\n\n  [QUEUE]: (ReadEntry | [string | symbol, unknown, unknown])[] = [];\n  [BUFFER]?: Buffer;\n  [READENTRY]?: ReadEntry;\n  [WRITEENTRY]?: ReadEntry;\n  [STATE]: State = 'begin';\n  [META]: string = '';\n  [EX]?: Pax;\n  [GEX]?: Pax;\n  [ENDED]: boolean = false;\n  [UNZIP]?: false | Unzip | BrotliDecompress | ZstdDecompress;\n  [ABORTED]: boolean = false;\n  [SAW_VALID_ENTRY]?: boolean;\n  [SAW_NULL_BLOCK]: boolean = false;\n  [SAW_EOF]: boolean = false;\n  [WRITING]: boolean = false;\n  [CONSUMING]: boolean = false;\n  [EMITTEDEND]: boolean = false;\n  [COMPRESSEDBYTESREAD]: number = 0;\n  [DECOMPRESSEDBYTESREAD]: number = 0\n\n  constructor(opt: TarOptions = {}) {\n    super()\n\n    this.file = opt.file || ''\n\n    // these BADARCHIVE errors can't be detected early. listen on DONE.\n    this.on(DONE, () => {\n      if (this[STATE] === 'begin' || this[SAW_VALID_ENTRY] === false) {\n        // either less than 1 block of data, or all entries were invalid.\n        // Either way, probably not even a tarball.\n        this.warn('TAR_BAD_ARCHIVE', 'Unrecognized archive format')\n      }\n    })\n\n    if (opt.ondone) {\n      this.on(DONE, opt.ondone)\n    } else {\n      this.on(DONE, () => {\n        this.emit('prefinish')\n        this.emit('finish')\n        this.emit('end')\n      })\n    }\n\n    this.strict = !!opt.strict\n    this.maxDecompressionRatio =\n      typeof opt.maxDecompressionRatio === 'number' ?\n        opt.maxDecompressionRatio\n      : MAX_DECOMPRESSION_RATIO\n    this.maxMetaEntrySize = opt.maxMetaEntrySize || maxMetaEntrySize\n    this.filter = typeof opt.filter === 'function' ? opt.filter : noop\n    // Unlike gzip, brotli doesn't have any magic bytes to identify it\n    // Users need to explicitly tell us they're extracting a brotli file\n    // Or we infer from the file extension\n    const isTBR =\n      opt.file &&\n      (opt.file.endsWith('.tar.br') || opt.file.endsWith('.tbr'))\n    // if it's a tbr file it MIGHT be brotli, but we don't know until\n    // we look at it and verify it's not a valid tar file.\n    this.brotli =\n      !(opt.gzip || opt.zstd) && opt.brotli !== undefined ? opt.brotli\n      : isTBR ? undefined\n      : false\n\n    // zstd has magic bytes to identify it, but we also support explicit options\n    // and file extension detection\n    const isTZST =\n      opt.file &&\n      (opt.file.endsWith('.tar.zst') || opt.file.endsWith('.tzst'))\n    this.zstd =\n      !(opt.gzip || opt.brotli) && opt.zstd !== undefined ? opt.zstd\n      : isTZST ? true\n      : undefined\n\n    // have to set this so that streams are ok piping into it\n    this.on('end', () => this[CLOSESTREAM]())\n\n    if (typeof opt.onwarn === 'function') {\n      this.on('warn', opt.onwarn)\n    }\n    if (typeof opt.onReadEntry === 'function') {\n      this.on('entry', opt.onReadEntry)\n    }\n  }\n\n  warn(code: string, message: string | Error, data: WarnData = {}): void {\n    warnMethod(this, code, message, data)\n  }\n\n  [CONSUMEHEADER](chunk: Buffer, position: number) {\n    if (this[SAW_VALID_ENTRY] === undefined) {\n      this[SAW_VALID_ENTRY] = false\n    }\n    let header\n    try {\n      header = new Header(chunk, position, this[EX], this[GEX])\n    } catch (er) {\n      return this.warn('TAR_ENTRY_INVALID', er as Error)\n    }\n\n    if (header.nullBlock) {\n      if (this[SAW_NULL_BLOCK]) {\n        this[SAW_EOF] = true\n        // ending an archive with no entries.  pointless, but legal.\n        if (this[STATE] === 'begin') {\n          this[STATE] = 'header'\n        }\n        this[EMIT]('eof')\n      } else {\n        this[SAW_NULL_BLOCK] = true\n        this[EMIT]('nullBlock')\n      }\n    } else {\n      this[SAW_NULL_BLOCK] = false\n      if (!header.cksumValid) {\n        this.warn('TAR_ENTRY_INVALID', 'checksum failure', { header })\n      } else if (!header.path) {\n        this.warn('TAR_ENTRY_INVALID', 'path is required', { header })\n      } else {\n        const type = header.type\n        if (/^(Symbolic)?Link$/.test(type) && !header.linkpath) {\n          this.warn('TAR_ENTRY_INVALID', 'linkpath required', {\n            header,\n          })\n        } else if (\n          !/^(Symbolic)?Link$/.test(type) &&\n          !/^(Global)?ExtendedHeader$/.test(type) &&\n          header.linkpath\n        ) {\n          this.warn('TAR_ENTRY_INVALID', 'linkpath forbidden', {\n            header,\n          })\n        } else {\n          const entry = (this[WRITEENTRY] = new ReadEntry(\n            header,\n            this[EX],\n            this[GEX],\n          ))\n\n          // we do this for meta & ignored entries as well, because they\n          // are still valid tar, or else we wouldn't know to ignore them\n          if (!this[SAW_VALID_ENTRY]) {\n            if (entry.remain) {\n              // this might be the one!\n              const onend = () => {\n                if (!entry.invalid) {\n                  this[SAW_VALID_ENTRY] = true\n                }\n              }\n              entry.on('end', onend)\n            } else {\n              this[SAW_VALID_ENTRY] = true\n            }\n          }\n\n          if (entry.meta) {\n            if (entry.size > this.maxMetaEntrySize) {\n              entry.ignore = true\n              this[EMIT]('ignoredEntry', entry)\n              this[STATE] = 'ignore'\n              entry.resume()\n            } else if (entry.size > 0) {\n              this[META] = ''\n              entry.on('data', c => (this[META] += c))\n              this[STATE] = 'meta'\n            }\n          } else {\n            this[EX] = undefined\n            entry.ignore = entry.ignore || !this.filter(entry.path, entry)\n\n            if (entry.ignore) {\n              // probably valid, just not something we care about\n              this[EMIT]('ignoredEntry', entry)\n              this[STATE] = entry.remain ? 'ignore' : 'header'\n              entry.resume()\n            } else {\n              if (entry.remain) {\n                this[STATE] = 'body'\n              } else {\n                this[STATE] = 'header'\n                entry.end()\n              }\n\n              if (!this[READENTRY]) {\n                this[QUEUE].push(entry)\n                this[NEXTENTRY]()\n              } else {\n                this[QUEUE].push(entry)\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n\n  [CLOSESTREAM]() {\n    queueMicrotask(() => this.emit('close'))\n  }\n\n  [PROCESSENTRY](entry?: ReadEntry | [string | symbol, unknown, unknown]) {\n    let go = true\n\n    if (!entry) {\n      this[READENTRY] = undefined\n      go = false\n    } else if (Array.isArray(entry)) {\n      const [ev, ...args]: [string | symbol, unknown, unknown] = entry\n      this.emit(ev, ...args)\n    } else {\n      this[READENTRY] = entry\n      this.emit('entry', entry)\n      if (!entry.emittedEnd) {\n        entry.on('end', () => this[NEXTENTRY]())\n        go = false\n      }\n    }\n\n    return go\n  }\n\n  [NEXTENTRY]() {\n    do {} while (this[PROCESSENTRY](this[QUEUE].shift()))\n\n    if (this[QUEUE].length === 0) {\n      // At this point, there's nothing in the queue, but we may have an\n      // entry which is being consumed (readEntry).\n      // If we don't, then we definitely can handle more data.\n      // If we do, and either it's flowing, or it has never had any data\n      // written to it, then it needs more.\n      // The only other possibility is that it has returned false from a\n      // write() call, so we wait for the next drain to continue.\n      const re = this[READENTRY]\n      const drainNow = !re || re.flowing || re.size === re.remain\n      if (drainNow) {\n        if (!this[WRITING]) {\n          this.emit('drain')\n        }\n      } else {\n        re.once('drain', () => this.emit('drain'))\n      }\n    }\n  }\n\n  [CONSUMEBODY](chunk: Buffer, position: number) {\n    // write up to but no  more than writeEntry.blockRemain\n    const entry = this[WRITEENTRY]\n    /* c8 ignore start */\n    if (!entry) {\n      throw new Error('attempt to consume body without entry??')\n    }\n    const br = entry.blockRemain ?? 0\n    /* c8 ignore stop */\n    const c =\n      br >= chunk.length && position === 0 ?\n        chunk\n      : chunk.subarray(position, position + br)\n\n    entry.write(c)\n\n    if (!entry.blockRemain) {\n      this[STATE] = 'header'\n      this[WRITEENTRY] = undefined\n      entry.end()\n    }\n\n    return c.length\n  }\n\n  [CONSUMEMETA](chunk: Buffer, position: number) {\n    const entry = this[WRITEENTRY]\n    const ret = this[CONSUMEBODY](chunk, position)\n\n    // if we finished, then the entry is reset\n    if (!this[WRITEENTRY] && entry) {\n      this[EMITMETA](entry)\n    }\n\n    return ret\n  }\n\n  [EMIT](ev: string | symbol, data?: unknown, extra?: unknown) {\n    if (this[QUEUE].length === 0 && !this[READENTRY]) {\n      this.emit(ev, data, extra)\n    } else {\n      this[QUEUE].push([ev, data, extra])\n    }\n  }\n\n  [EMITMETA](entry: ReadEntry) {\n    this[EMIT]('meta', this[META])\n    switch (entry.type) {\n      case 'ExtendedHeader':\n      case 'OldExtendedHeader':\n        this[EX] = Pax.parse(this[META], this[EX], false)\n        break\n\n      case 'GlobalExtendedHeader':\n        this[GEX] = Pax.parse(this[META], this[GEX], true)\n        break\n\n      case 'NextFileHasLongPath':\n      case 'OldGnuLongPath': {\n        const ex: Pax = this[EX] ?? Object.create(null)\n        this[EX] = ex\n        ex.path = this[META].replace(/\\0.*/, '')\n        break\n      }\n\n      case 'NextFileHasLongLinkpath': {\n        const ex: Pax = this[EX] || Object.create(null)\n        this[EX] = ex\n        ex.linkpath = this[META].replace(/\\0.*/, '')\n        break\n      }\n\n      /* c8 ignore start */\n      default:\n        throw new Error('unknown meta: ' + entry.type)\n      /* c8 ignore stop */\n    }\n  }\n\n  abort(error: Error) {\n    if (this[ABORTED]) {\n      return\n    }\n    if (this[UNZIP]) {\n      // fully nerf the decompressor and close its underlying binding\n      const u = this[UNZIP]\n      /* c8 ignore start */\n      u.write = () => true\n      u.end = () => u\n      u.emit = () => false\n      /* c8 ignore stop */\n      u.destroy?.()\n    }\n    this[ABORTED] = true\n    this.emit('abort', error)\n    // always throws, even in non-strict mode\n    this.warn('TAR_ABORT', error, { recoverable: false })\n  }\n\n  [CHECKDECOMPRESSIONRATIO](chunk: Buffer) {\n    this[DECOMPRESSEDBYTESREAD] += chunk.length\n    const ratio = this[DECOMPRESSEDBYTESREAD] / this[COMPRESSEDBYTESREAD]\n    if (ratio > this.maxDecompressionRatio) {\n      this.abort(\n        new Error(\n          `max decompression ratio exceeded: ${ratio.toFixed(2)} > ${\n            this.maxDecompressionRatio\n          }`,\n        ),\n      )\n      return false\n    }\n    return true\n  }\n\n  write(\n    buffer: Uint8Array | string,\n    cb?: (err?: Error | null) => void,\n  ): boolean\n  write(\n    str: string,\n    encoding?: BufferEncoding,\n    cb?: (err?: Error | null) => void,\n  ): boolean\n  write(\n    chunk: Buffer | string,\n    encoding?: BufferEncoding | (() => unknown),\n    cb?: () => unknown,\n  ): boolean {\n    if (typeof encoding === 'function') {\n      cb = encoding\n      encoding = undefined\n    }\n    if (typeof chunk === 'string') {\n      chunk = Buffer.from(\n        chunk,\n        /* c8 ignore next */\n        typeof encoding === 'string' ? encoding : 'utf8',\n      )\n    }\n    if (this[ABORTED]) {\n      /* c8 ignore next */\n      cb?.()\n      return false\n    }\n\n    // first write, might be gzipped, zstd, or brotli compressed\n    const needSniff =\n      this[UNZIP] === undefined ||\n      (this.brotli === undefined && this[UNZIP] === false)\n    if (needSniff && chunk) {\n      if (this[BUFFER]) {\n        chunk = Buffer.concat([this[BUFFER], chunk])\n        this[BUFFER] = undefined\n      }\n      if (chunk.length < ZIP_HEADER_LEN) {\n        this[BUFFER] = chunk\n        /* c8 ignore next */\n        cb?.()\n        return true\n      }\n\n      // look for gzip header\n      for (\n        let i = 0;\n        this[UNZIP] === undefined && i < gzipHeader.length;\n        i++\n      ) {\n        if (chunk[i] !== gzipHeader[i]) {\n          this[UNZIP] = false\n        }\n      }\n\n      // look for zstd header if gzip header not found\n      let isZstd = false\n      if (this[UNZIP] === false && this.zstd !== false) {\n        isZstd = true\n        for (let i = 0; i < zstdHeader.length; i++) {\n          if (chunk[i] !== zstdHeader[i]) {\n            isZstd = false\n            break\n          }\n        }\n      }\n\n      const maybeBrotli = this.brotli === undefined && !isZstd\n      if (this[UNZIP] === false && maybeBrotli) {\n        // read the first header to see if it's a valid tar file. If so,\n        // we can safely assume that it's not actually brotli, despite the\n        // .tbr or .tar.br file extension.\n        // if we ended before getting a full chunk, yes, def brotli\n        if (chunk.length < 512) {\n          if (this[ENDED]) {\n            this.brotli = true\n          } else {\n            this[BUFFER] = chunk\n            /* c8 ignore next */\n            cb?.()\n            return true\n          }\n        } else {\n          // if it's tar, it's pretty reliably not brotli, chances of\n          // that happening are astronomical.\n          try {\n            new Header(chunk.subarray(0, 512))\n            this.brotli = false\n          } catch (_) {\n            this.brotli = true\n          }\n        }\n      }\n\n      if (\n        this[UNZIP] === undefined ||\n        (this[UNZIP] === false && (this.brotli || isZstd))\n      ) {\n        const ended = this[ENDED]\n        this[ENDED] = false\n        this[UNZIP] =\n          this[UNZIP] === undefined ? new Unzip({})\n          : isZstd ? new ZstdDecompress({})\n          : new BrotliDecompress({})\n        this[UNZIP].on('data', chunk => {\n          if (this[CHECKDECOMPRESSIONRATIO](chunk)) {\n            this[CONSUMECHUNK](chunk)\n          }\n        })\n        this[UNZIP].on('error', er => {\n          if (!this[ABORTED]) {\n            this.abort(er as Error)\n          }\n        })\n        this[UNZIP].on('end', () => {\n          this[ENDED] = true\n          this[CONSUMECHUNK]()\n        })\n        this[WRITING] = true\n        this[COMPRESSEDBYTESREAD] += chunk.length\n        const ret = !!this[UNZIP][ended ? 'end' : 'write'](chunk)\n        this[WRITING] = false\n        cb?.()\n        return ret\n      }\n    }\n\n    this[WRITING] = true\n    if (this[UNZIP]) {\n      this[COMPRESSEDBYTESREAD] += chunk.length\n      this[UNZIP].write(chunk)\n    } else {\n      this[CONSUMECHUNK](chunk)\n    }\n    this[WRITING] = false\n\n    // return false if there's a queue, or if the current entry isn't flowing\n    const ret =\n      this[QUEUE].length > 0 ? false\n      : this[READENTRY] ? this[READENTRY].flowing\n      : true\n\n    // if we have no queue, then that means a clogged READENTRY\n    if (!ret && this[QUEUE].length === 0) {\n      this[READENTRY]?.once('drain', () => this.emit('drain'))\n    }\n\n    /* c8 ignore next */\n    cb?.()\n    return ret\n  }\n\n  [BUFFERCONCAT](c: Buffer) {\n    if (c && !this[ABORTED]) {\n      this[BUFFER] = this[BUFFER] ? Buffer.concat([this[BUFFER], c]) : c\n    }\n  }\n\n  [MAYBEEND]() {\n    if (\n      this[ENDED] &&\n      !this[EMITTEDEND] &&\n      !this[ABORTED] &&\n      !this[CONSUMING]\n    ) {\n      this[EMITTEDEND] = true\n      const entry = this[WRITEENTRY]\n      if (entry?.blockRemain) {\n        // truncated, likely a damaged file\n        const have = this[BUFFER] ? this[BUFFER].length : 0\n        this.warn(\n          'TAR_BAD_ARCHIVE',\n          `Truncated input (needed ${entry.blockRemain} more bytes, only ${have} available)`,\n          { entry },\n        )\n        if (this[BUFFER]) {\n          entry.write(this[BUFFER])\n        }\n        entry.end()\n      }\n      this[EMIT](DONE)\n    }\n  }\n\n  [CONSUMECHUNK](chunk?: Buffer) {\n    if (this[CONSUMING] && chunk) {\n      this[BUFFERCONCAT](chunk)\n    } else if (!chunk && !this[BUFFER]) {\n      this[MAYBEEND]()\n    } else if (chunk) {\n      this[CONSUMING] = true\n      if (this[BUFFER]) {\n        this[BUFFERCONCAT](chunk)\n        const c = this[BUFFER]\n        this[BUFFER] = undefined\n        this[CONSUMECHUNKSUB](c)\n      } else {\n        this[CONSUMECHUNKSUB](chunk)\n      }\n\n      while (\n        this[BUFFER] &&\n        (this[BUFFER] as Buffer)?.length >= 512 &&\n        !this[ABORTED] &&\n        !this[SAW_EOF]\n      ) {\n        const c = this[BUFFER]\n        this[BUFFER] = undefined\n        this[CONSUMECHUNKSUB](c)\n      }\n      this[CONSUMING] = false\n    }\n\n    if (!this[BUFFER] || this[ENDED]) {\n      this[MAYBEEND]()\n    }\n  }\n\n  [CONSUMECHUNKSUB](chunk: Buffer) {\n    // we know that we are in CONSUMING mode, so anything written goes into\n    // the buffer.  Advance the position and put any remainder in the buffer.\n    let position = 0\n    const length = chunk.length\n    while (position + 512 <= length && !this[ABORTED] && !this[SAW_EOF]) {\n      switch (this[STATE]) {\n        case 'begin':\n        case 'header':\n          this[CONSUMEHEADER](chunk, position)\n          position += 512\n          break\n\n        case 'ignore':\n        case 'body':\n          position += this[CONSUMEBODY](chunk, position)\n          break\n\n        case 'meta':\n          position += this[CONSUMEMETA](chunk, position)\n          break\n\n        /* c8 ignore start */\n        default:\n          throw new Error('invalid state: ' + this[STATE])\n        /* c8 ignore stop */\n      }\n    }\n\n    if (position < length) {\n      this[BUFFER] =\n        this[BUFFER] ?\n          Buffer.concat([chunk.subarray(position), this[BUFFER]])\n        : chunk.subarray(position)\n    }\n  }\n\n  end(cb?: () => void): this\n  end(data: string | Buffer, cb?: () => void): this\n  end(str: string, encoding?: BufferEncoding, cb?: () => void): this\n  end(\n    chunk?: string | Buffer | (() => void),\n    encoding?: BufferEncoding | (() => void),\n    cb?: () => void,\n  ) {\n    if (typeof chunk === 'function') {\n      cb = chunk\n      encoding = undefined\n      chunk = undefined\n    }\n    if (typeof encoding === 'function') {\n      cb = encoding\n      encoding = undefined\n    }\n    if (typeof chunk === 'string') {\n      chunk = Buffer.from(chunk, encoding)\n    }\n    if (cb) this.once('finish', cb)\n    if (!this[ABORTED]) {\n      if (this[UNZIP]) {\n        /* c8 ignore start */\n        if (chunk) {\n          this[COMPRESSEDBYTESREAD] += chunk.length\n          this[UNZIP].write(chunk)\n        }\n        /* c8 ignore stop */\n        this[UNZIP].end()\n      } else {\n        this[ENDED] = true\n        if (this.brotli === undefined || this.zstd === undefined)\n          chunk = chunk || Buffer.alloc(0)\n        if (chunk) this.write(chunk)\n        this[MAYBEEND]()\n      }\n    }\n    return this\n  }\n}\n","import assert from 'assert'\nimport { Buffer } from 'buffer'\nimport { Minipass } from 'minipass'\nimport * as realZlib from 'zlib'\nimport { constants } from './constants.js'\nexport { constants } from './constants.js'\n\nconst OriginalBufferConcat = Buffer.concat\nconst desc = Object.getOwnPropertyDescriptor(Buffer, 'concat')\nconst noop = (args: Buffer[]) => args as unknown as Buffer\nconst passthroughBufferConcat =\n  desc?.writable === true || desc?.set !== undefined\n    ? (makeNoOp: boolean) => {\n        Buffer.concat = makeNoOp ? noop : OriginalBufferConcat\n      }\n    : (_: boolean) => {}\n\nconst _superWrite = Symbol('_superWrite')\n\nexport class ZlibError extends Error {\n  code?: string\n  errno?: number\n  constructor(err: NodeJS.ErrnoException | Error, origin?: Function) {\n    super('zlib: ' + err.message, { cause: err })\n    this.code = (err as NodeJS.ErrnoException).code\n    this.errno = (err as NodeJS.ErrnoException).errno\n    /* c8 ignore next */\n    if (!this.code) this.code = 'ZLIB_ERROR'\n\n    this.message = 'zlib: ' + err.message\n    Error.captureStackTrace(this, origin ?? this.constructor)\n  }\n\n  get name() {\n    return 'ZlibError'\n  }\n}\n\n// the Zlib class they all inherit from\n// This thing manages the queue of requests, and returns\n// true or false if there is anything in the queue when\n// you call the .write() method.\nconst _flushFlag = Symbol('flushFlag')\n\nexport type ChunkWithFlushFlag = Minipass.ContiguousData & {\n  [_flushFlag]?: number\n}\n\nexport type ZlibBaseOptions = Minipass.Options<Minipass.ContiguousData> & {\n  flush?: number\n  finishFlush?: number\n  fullFlushFlag?: number\n}\n\nexport type ZlibHandle =\n  | realZlib.Gzip\n  | realZlib.Gunzip\n  | realZlib.Deflate\n  | realZlib.Inflate\n  | realZlib.DeflateRaw\n  | realZlib.InflateRaw\n  | realZlib.BrotliCompress\n  | realZlib.BrotliDecompress\n  | realZlib.ZstdCompress\n  | realZlib.ZstdDecompress\nexport type ZlibMode =\n  | 'Gzip'\n  | 'Gunzip'\n  | 'Deflate'\n  | 'Inflate'\n  | 'DeflateRaw'\n  | 'InflateRaw'\n  | 'Unzip'\nexport type BrotliMode = 'BrotliCompress' | 'BrotliDecompress'\nexport type ZstdMode = 'ZstdCompress' | 'ZstdDecompress'\n\nabstract class ZlibBase extends Minipass<Buffer, ChunkWithFlushFlag> {\n  #sawError: boolean = false\n  #ended: boolean = false\n  #flushFlag: number\n  #finishFlushFlag: number\n  #fullFlushFlag: number\n  #handle?: ZlibHandle\n  #onError: (err: ZlibError) => any\n\n  get sawError() {\n    return this.#sawError\n  }\n  get handle() {\n    return this.#handle\n  }\n  /* c8 ignore start */\n  get flushFlag() {\n    return this.#flushFlag\n  }\n  /* c8 ignore stop */\n\n  constructor(opts: ZlibBaseOptions, mode: ZlibMode | BrotliMode | ZstdMode) {\n    if (!opts || typeof opts !== 'object')\n      throw new TypeError('invalid options for ZlibBase constructor')\n\n    //@ts-ignore\n    super(opts)\n\n    /* c8 ignore start */\n    this.#flushFlag = opts.flush ?? 0\n    this.#finishFlushFlag = opts.finishFlush ?? 0\n    this.#fullFlushFlag = opts.fullFlushFlag ?? 0\n    /* c8 ignore stop */\n\n    //@ts-ignore\n    if (typeof realZlib[mode] !== 'function') {\n      throw new TypeError('Compression method not supported: ' + mode)\n    }\n\n    // this will throw if any options are invalid for the class selected\n    try {\n      // @types/node doesn't know that it exports the classes, but they're there\n      //@ts-ignore\n      this.#handle = new realZlib[mode](opts)\n    } catch (er) {\n      // make sure that all errors get decorated properly\n      throw new ZlibError(er as NodeJS.ErrnoException, this.constructor)\n    }\n\n    this.#onError = err => {\n      // no sense raising multiple errors, since we abort on the first one.\n      if (this.#sawError) return\n\n      this.#sawError = true\n\n      // there is no way to cleanly recover.\n      // continuing only obscures problems.\n      this.close()\n      this.emit('error', err)\n    }\n\n    this.#handle?.on('error', er => this.#onError(new ZlibError(er)))\n    this.once('end', () => this.close)\n  }\n\n  close() {\n    if (this.#handle) {\n      this.#handle.close()\n      this.#handle = undefined\n      this.emit('close')\n    }\n  }\n\n  reset() {\n    if (!this.#sawError) {\n      assert(this.#handle, 'zlib binding closed')\n      //@ts-ignore\n      return this.#handle.reset?.()\n    }\n  }\n\n  flush(flushFlag?: number) {\n    if (this.ended) return\n\n    if (typeof flushFlag !== 'number') flushFlag = this.#fullFlushFlag\n\n    this.write(Object.assign(Buffer.alloc(0), { [_flushFlag]: flushFlag }))\n  }\n\n  end(cb?: () => void): this\n  end(chunk: ChunkWithFlushFlag, cb?: () => void): this\n  end(\n    chunk: ChunkWithFlushFlag,\n    encoding?: Minipass.Encoding,\n    cb?: () => void,\n  ): this\n  end(\n    chunk?: ChunkWithFlushFlag | (() => void),\n    encoding?: Minipass.Encoding | (() => void),\n    cb?: () => void,\n  ) {\n    /* c8 ignore start */\n    if (typeof chunk === 'function') {\n      cb = chunk\n      encoding = undefined\n      chunk = undefined\n    }\n    if (typeof encoding === 'function') {\n      cb = encoding\n      encoding = undefined\n    }\n    /* c8 ignore stop */\n    if (chunk) {\n      if (encoding) this.write(chunk, encoding)\n      else this.write(chunk)\n    }\n    this.flush(this.#finishFlushFlag)\n    this.#ended = true\n    return super.end(cb)\n  }\n\n  get ended() {\n    return this.#ended\n  }\n\n  // overridden in the gzip classes to do portable writes\n  [_superWrite](data: Buffer & { [_flushFlag]?: number }) {\n    return super.write(data)\n  }\n\n  write(chunk: ChunkWithFlushFlag, cb?: () => void): boolean\n  write(\n    chunk: ChunkWithFlushFlag,\n    encoding?: Minipass.Encoding,\n    cb?: () => void,\n  ): boolean\n  write(\n    chunk: ChunkWithFlushFlag,\n    encoding?: Minipass.Encoding | (() => void),\n    cb?: () => void,\n  ) {\n    // process the chunk using the sync process\n    // then super.write() all the outputted chunks\n    if (typeof encoding === 'function')\n      (cb = encoding), (encoding = 'utf8')\n\n    if (typeof chunk === 'string')\n      chunk = Buffer.from(chunk as string, encoding as BufferEncoding)\n\n    if (this.#sawError) return\n    assert(this.#handle, 'zlib binding closed')\n\n    // _processChunk tries to .close() the native handle after it's done, so we\n    // intercept that by temporarily making it a no-op.\n    // diving into the node:zlib internals a bit here\n    const nativeHandle = (this.#handle as unknown as { _handle: any })\n      ._handle\n    const originalNativeClose = nativeHandle.close\n    nativeHandle.close = () => {}\n    const originalClose = this.#handle.close\n    this.#handle.close = () => {}\n    // It also calls `Buffer.concat()` at the end, which may be convenient\n    // for some, but which we are not interested in as it slows us down.\n    passthroughBufferConcat(true)\n    let result: undefined | Buffer | Buffer[] = undefined\n    try {\n      const flushFlag =\n        typeof chunk[_flushFlag] === 'number'\n          ? chunk[_flushFlag]\n          : this.#flushFlag\n      result = (\n        this.#handle as unknown as {\n          _processChunk: (chunk: Buffer, flushFlag: number) => Buffer[]\n        }\n      )._processChunk(chunk as Buffer, flushFlag)\n      // if we don't throw, reset it back how it was\n      passthroughBufferConcat(false)\n    } catch (err) {\n      // or if we do, put Buffer.concat() back before we emit error\n      // Error events call into user code, which may call Buffer.concat()\n      passthroughBufferConcat(false)\n      this.#onError(new ZlibError(err as NodeJS.ErrnoException, this.write))\n    } finally {\n      if (this.#handle) {\n        // Core zlib resets `_handle` to null after attempting to close the\n        // native handle. Our no-op handler prevented actual closure, but we\n        // need to restore the `._handle` property.\n        ;(this.#handle as unknown as { _handle: any })._handle =\n          nativeHandle\n        nativeHandle.close = originalNativeClose\n        this.#handle.close = originalClose\n        // `_processChunk()` adds an 'error' listener. If we don't remove it\n        // after each call, these handlers start piling up.\n        this.#handle.removeAllListeners('error')\n        // make sure OUR error listener is still attached tho\n      }\n    }\n\n    if (this.#handle)\n      this.#handle.on('error', er => this.#onError(new ZlibError(er, this.write)))\n\n    let writeReturn\n    if (result) {\n      if (Array.isArray(result) && result.length > 0) {\n        const r = result[0]\n        // The first buffer is always `handle._outBuffer`, which would be\n        // re-used for later invocations; so, we always have to copy that one.\n        writeReturn = this[_superWrite](Buffer.from(r as Buffer))\n        for (let i = 1; i < result.length; i++) {\n          writeReturn = this[_superWrite](result[i] as Buffer)\n        }\n      } else {\n        // either a single Buffer or an empty array\n        writeReturn = this[_superWrite](Buffer.from(result as Buffer | []))\n      }\n    }\n\n    if (cb) cb()\n    return writeReturn\n  }\n}\n\nexport type ZlibOptions = ZlibBaseOptions & {\n  level?: number\n  strategy?: number\n}\n\nexport class Zlib extends ZlibBase {\n  #level?: number\n  #strategy?: number\n\n  constructor(opts: ZlibOptions, mode: ZlibMode) {\n    opts = opts || {}\n\n    opts.flush = opts.flush || constants.Z_NO_FLUSH\n    opts.finishFlush = opts.finishFlush || constants.Z_FINISH\n    opts.fullFlushFlag = constants.Z_FULL_FLUSH\n    super(opts, mode)\n\n    this.#level = opts.level\n    this.#strategy = opts.strategy\n  }\n\n  params(level: number, strategy: number) {\n    if (this.sawError) return\n\n    if (!this.handle)\n      throw new Error('cannot switch params when binding is closed')\n\n    // no way to test this without also not supporting params at all\n    /* c8 ignore start */\n    if (!(this.handle as { params?: any }).params)\n      throw new Error('not supported in this implementation')\n    /* c8 ignore stop */\n\n    if (this.#level !== level || this.#strategy !== strategy) {\n      this.flush(constants.Z_SYNC_FLUSH)\n      assert(this.handle, 'zlib binding closed')\n      // .params() calls .flush(), but the latter is always async in the\n      // core zlib. We override .flush() temporarily to intercept that and\n      // flush synchronously.\n      const origFlush = this.handle.flush\n      this.handle.flush = (\n        flushFlag?: (() => void) | number,\n        cb?: () => void,\n      ) => {\n        /* c8 ignore start */\n        if (typeof flushFlag === 'function') {\n          cb = flushFlag\n          flushFlag = this.flushFlag\n        }\n        /* c8 ignore stop */\n        this.flush(flushFlag)\n        cb?.()\n      }\n      try {\n        ;(\n          this.handle as unknown as {\n            params: (level?: number, strategy?: number) => void\n          }\n        ).params(level, strategy)\n      } finally {\n        this.handle.flush = origFlush\n      }\n      /* c8 ignore start */\n      if (this.handle) {\n        this.#level = level\n        this.#strategy = strategy\n      }\n      /* c8 ignore stop */\n    }\n  }\n}\n\n// minimal 2-byte header\nexport class Deflate extends Zlib {\n  constructor(opts: ZlibOptions) {\n    super(opts, 'Deflate')\n  }\n}\n\nexport class Inflate extends Zlib {\n  constructor(opts: ZlibOptions) {\n    super(opts, 'Inflate')\n  }\n}\n\n// gzip - bigger header, same deflate compression\nexport type GzipOptions = ZlibOptions & { portable?: boolean }\nexport class Gzip extends Zlib {\n  #portable: boolean\n  constructor(opts: GzipOptions) {\n    super(opts, 'Gzip')\n    this.#portable = opts && !!opts.portable\n  }\n\n  [_superWrite](data: Buffer & { [_flushFlag]?: number }) {\n    if (!this.#portable) return super[_superWrite](data)\n\n    // we'll always get the header emitted in one first chunk\n    // overwrite the OS indicator byte with 0xFF\n    this.#portable = false\n    data[9] = 255\n    return super[_superWrite](data)\n  }\n}\n\nexport class Gunzip extends Zlib {\n  constructor(opts: ZlibOptions) {\n    super(opts, 'Gunzip')\n  }\n}\n\n// raw - no header\nexport class DeflateRaw extends Zlib {\n  constructor(opts: ZlibOptions) {\n    super(opts, 'DeflateRaw')\n  }\n}\n\nexport class InflateRaw extends Zlib {\n  constructor(opts: ZlibOptions) {\n    super(opts, 'InflateRaw')\n  }\n}\n\n// auto-detect header.\nexport class Unzip extends Zlib {\n  constructor(opts: ZlibOptions) {\n    super(opts, 'Unzip')\n  }\n}\n\nclass Brotli extends ZlibBase {\n  constructor(opts: ZlibOptions, mode: BrotliMode) {\n    opts = opts || {}\n\n    opts.flush = opts.flush || constants.BROTLI_OPERATION_PROCESS\n    opts.finishFlush =\n      opts.finishFlush || constants.BROTLI_OPERATION_FINISH\n    opts.fullFlushFlag = constants.BROTLI_OPERATION_FLUSH\n    super(opts, mode)\n  }\n}\n\nexport class BrotliCompress extends Brotli {\n  constructor(opts: ZlibOptions) {\n    super(opts, 'BrotliCompress')\n  }\n}\n\nexport class BrotliDecompress extends Brotli {\n  constructor(opts: ZlibOptions) {\n    super(opts, 'BrotliDecompress')\n  }\n}\n\nclass Zstd extends ZlibBase {\n  constructor(opts: ZlibOptions, mode: ZstdMode) {\n    opts = opts || {}\n\n    opts.flush = opts.flush || constants.ZSTD_e_continue\n    opts.finishFlush = opts.finishFlush || constants.ZSTD_e_end\n    opts.fullFlushFlag = constants.ZSTD_e_flush\n    super(opts, mode)\n  }\n}\n\nexport class ZstdCompress extends Zstd {\n  constructor(opts: ZlibOptions) {\n    super(opts, 'ZstdCompress')\n  }\n}\n\nexport class ZstdDecompress extends Zstd {\n  constructor(opts: ZlibOptions) {\n    super(opts, 'ZstdDecompress')\n  }\n}\n","// Update with any zlib constants that are added or changed in the future.\n// Node v6 didn't export this, so we just hard code the version and rely\n// on all the other hard-coded values from zlib v4736.  When node v6\n// support drops, we can just export the realZlibConstants object.\nimport realZlib from 'zlib'\n/* c8 ignore start */\nconst realZlibConstants = realZlib.constants || { ZLIB_VERNUM: 4736 }\n/* c8 ignore stop */\n\nexport const constants = Object.freeze(\n  Object.assign(\n    Object.create(null),\n    {\n      Z_NO_FLUSH: 0,\n      Z_PARTIAL_FLUSH: 1,\n      Z_SYNC_FLUSH: 2,\n      Z_FULL_FLUSH: 3,\n      Z_FINISH: 4,\n      Z_BLOCK: 5,\n      Z_OK: 0,\n      Z_STREAM_END: 1,\n      Z_NEED_DICT: 2,\n      Z_ERRNO: -1,\n      Z_STREAM_ERROR: -2,\n      Z_DATA_ERROR: -3,\n      Z_MEM_ERROR: -4,\n      Z_BUF_ERROR: -5,\n      Z_VERSION_ERROR: -6,\n      Z_NO_COMPRESSION: 0,\n      Z_BEST_SPEED: 1,\n      Z_BEST_COMPRESSION: 9,\n      Z_DEFAULT_COMPRESSION: -1,\n      Z_FILTERED: 1,\n      Z_HUFFMAN_ONLY: 2,\n      Z_RLE: 3,\n      Z_FIXED: 4,\n      Z_DEFAULT_STRATEGY: 0,\n      DEFLATE: 1,\n      INFLATE: 2,\n      GZIP: 3,\n      GUNZIP: 4,\n      DEFLATERAW: 5,\n      INFLATERAW: 6,\n      UNZIP: 7,\n      BROTLI_DECODE: 8,\n      BROTLI_ENCODE: 9,\n      Z_MIN_WINDOWBITS: 8,\n      Z_MAX_WINDOWBITS: 15,\n      Z_DEFAULT_WINDOWBITS: 15,\n      Z_MIN_CHUNK: 64,\n      Z_MAX_CHUNK: Infinity,\n      Z_DEFAULT_CHUNK: 16384,\n      Z_MIN_MEMLEVEL: 1,\n      Z_MAX_MEMLEVEL: 9,\n      Z_DEFAULT_MEMLEVEL: 8,\n      Z_MIN_LEVEL: -1,\n      Z_MAX_LEVEL: 9,\n      Z_DEFAULT_LEVEL: -1,\n      BROTLI_OPERATION_PROCESS: 0,\n      BROTLI_OPERATION_FLUSH: 1,\n      BROTLI_OPERATION_FINISH: 2,\n      BROTLI_OPERATION_EMIT_METADATA: 3,\n      BROTLI_MODE_GENERIC: 0,\n      BROTLI_MODE_TEXT: 1,\n      BROTLI_MODE_FONT: 2,\n      BROTLI_DEFAULT_MODE: 0,\n      BROTLI_MIN_QUALITY: 0,\n      BROTLI_MAX_QUALITY: 11,\n      BROTLI_DEFAULT_QUALITY: 11,\n      BROTLI_MIN_WINDOW_BITS: 10,\n      BROTLI_MAX_WINDOW_BITS: 24,\n      BROTLI_LARGE_MAX_WINDOW_BITS: 30,\n      BROTLI_DEFAULT_WINDOW: 22,\n      BROTLI_MIN_INPUT_BLOCK_BITS: 16,\n      BROTLI_MAX_INPUT_BLOCK_BITS: 24,\n      BROTLI_PARAM_MODE: 0,\n      BROTLI_PARAM_QUALITY: 1,\n      BROTLI_PARAM_LGWIN: 2,\n      BROTLI_PARAM_LGBLOCK: 3,\n      BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING: 4,\n      BROTLI_PARAM_SIZE_HINT: 5,\n      BROTLI_PARAM_LARGE_WINDOW: 6,\n      BROTLI_PARAM_NPOSTFIX: 7,\n      BROTLI_PARAM_NDIRECT: 8,\n      BROTLI_DECODER_RESULT_ERROR: 0,\n      BROTLI_DECODER_RESULT_SUCCESS: 1,\n      BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT: 2,\n      BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT: 3,\n      BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION: 0,\n      BROTLI_DECODER_PARAM_LARGE_WINDOW: 1,\n      BROTLI_DECODER_NO_ERROR: 0,\n      BROTLI_DECODER_SUCCESS: 1,\n      BROTLI_DECODER_NEEDS_MORE_INPUT: 2,\n      BROTLI_DECODER_NEEDS_MORE_OUTPUT: 3,\n      BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE: -1,\n      BROTLI_DECODER_ERROR_FORMAT_RESERVED: -2,\n      BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE: -3,\n      BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET: -4,\n      BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME: -5,\n      BROTLI_DECODER_ERROR_FORMAT_CL_SPACE: -6,\n      BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE: -7,\n      BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT: -8,\n      BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1: -9,\n      BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2: -10,\n      BROTLI_DECODER_ERROR_FORMAT_TRANSFORM: -11,\n      BROTLI_DECODER_ERROR_FORMAT_DICTIONARY: -12,\n      BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS: -13,\n      BROTLI_DECODER_ERROR_FORMAT_PADDING_1: -14,\n      BROTLI_DECODER_ERROR_FORMAT_PADDING_2: -15,\n      BROTLI_DECODER_ERROR_FORMAT_DISTANCE: -16,\n      BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET: -19,\n      BROTLI_DECODER_ERROR_INVALID_ARGUMENTS: -20,\n      BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES: -21,\n      BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS: -22,\n      BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP: -25,\n      BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1: -26,\n      BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2: -27,\n      BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES: -30,\n      BROTLI_DECODER_ERROR_UNREACHABLE: -31,\n    },\n    realZlibConstants,\n  ),\n)\n","// parse a 512-byte header block to a data object, or vice-versa\n// encode returns `true` if a pax extended header is needed, because\n// the data could not be faithfully encoded in a simple header.\n// (Also, check header.needPax to see if it needs a pax header.)\n\nimport { posix as pathModule } from 'node:path'\nimport * as large from './large-numbers.js'\nimport type { EntryTypeCode, EntryTypeName } from './types.js'\nimport * as types from './types.js'\n\nconst notNegative = (n?: number): number | undefined =>\n  n === undefined || n < 0 ? undefined : n\n\nexport type HeaderData = {\n  path?: string\n  mode?: number\n  uid?: number\n  gid?: number\n  size?: number\n  cksum?: number\n  type?: EntryTypeName | 'Unsupported'\n  linkpath?: string\n  uname?: string\n  gname?: string\n  devmaj?: number\n  devmin?: number\n  atime?: Date\n  ctime?: Date\n  mtime?: Date\n\n  // fields that are common in extended PAX headers, but not in the\n  // \"standard\" tar header block\n  charset?: string\n  comment?: string\n  dev?: number\n  ino?: number\n  nlink?: number\n}\n\nexport class Header implements HeaderData {\n  cksumValid: boolean = false\n  needPax: boolean = false\n  nullBlock: boolean = false\n\n  block?: Buffer\n  path?: string\n  mode?: number\n  uid?: number\n  gid?: number\n  size?: number\n  cksum?: number\n  #type: EntryTypeCode | 'Unsupported' = 'Unsupported'\n  linkpath?: string\n  uname?: string\n  gname?: string\n  devmaj: number = 0\n  devmin: number = 0\n  atime?: Date\n  ctime?: Date\n  mtime?: Date\n\n  charset?: string\n  comment?: string\n\n  constructor(\n    data?: Buffer | HeaderData,\n    off: number = 0,\n    ex?: HeaderData,\n    gex?: HeaderData,\n  ) {\n    if (Buffer.isBuffer(data)) {\n      this.decode(data, off || 0, ex, gex)\n    } else if (data) {\n      this.#slurp(data)\n    }\n  }\n\n  decode(buf: Buffer, off: number, ex?: HeaderData, gex?: HeaderData) {\n    if (!off) {\n      off = 0\n    }\n\n    if (!buf || !(buf.length >= off + 512)) {\n      throw new Error('need 512 bytes for header')\n    }\n\n    // Decode the typeflag (independent of any pending PAX/GNU extended header)\n    // up front so we can tell whether THIS block is itself an intermediary\n    // extension header (PAX `x`/`g`, GNU long-name `L`, GNU long-link `K`).\n    // Per POSIX pax, a PAX extended header describes the *next file entry*, not\n    // the extension headers that may sit between it and that file. Applying the\n    // pending PAX overrides (notably `size`) to an intervening `L`/`K`/`x`/`g`\n    // header desynchronizes the stream relative to other tar implementations\n    // and enables tar interpretation-conflict / file-smuggling attacks.\n    const t = decString(buf, off + 156, 1)\n    const isNormalFS = types.normalFsTypes.has(t as EntryTypeCode)\n    const exForFields = isNormalFS ? ex : undefined\n    const gexForFields = isNormalFS ? gex : undefined\n\n    this.path = exForFields?.path ?? decString(buf, off, 100)\n    this.mode =\n      exForFields?.mode ??\n      gexForFields?.mode ??\n      decNumber(buf, off + 100, 8)\n    this.uid =\n      exForFields?.uid ?? gexForFields?.uid ?? decNumber(buf, off + 108, 8)\n    this.gid =\n      exForFields?.gid ?? gexForFields?.gid ?? decNumber(buf, off + 116, 8)\n\n    this.size = notNegative(\n      exForFields?.size ??\n        gexForFields?.size ??\n        decNumber(buf, off + 124, 12),\n    )\n    this.mtime =\n      exForFields?.mtime ??\n      gexForFields?.mtime ??\n      decDate(buf, off + 136, 12)\n    this.cksum = decNumber(buf, off + 148, 12)\n\n    // if we have extended or global extended headers, apply them now\n    // See https://github.com/npm/node-tar/pull/187\n    // Apply global before local, so it overrides. Never slurp the pending\n    // extended-header fields onto an intermediary extension header.\n    if (gexForFields) this.#slurp(gexForFields, true)\n    if (exForFields) this.#slurp(exForFields)\n\n    // old tar versions marked dirs as a file with a trailing /\n    if (types.isCode(t)) {\n      this.#type = t || '0'\n    }\n    if (this.#type === '0' && this.path.slice(-1) === '/') {\n      this.#type = '5'\n    }\n\n    // tar implementations sometimes incorrectly put the stat(dir).size\n    // as the size in the tarball, even though Directory entries are\n    // not able to have any body at all.  In the very rare chance that\n    // it actually DOES have a body, we weren't going to do anything with\n    // it anyway, and it'll just be a warning about an invalid header.\n    if (this.#type === '5') {\n      this.size = 0\n    }\n\n    this.linkpath = decString(buf, off + 157, 100)\n    if (\n      buf.subarray(off + 257, off + 265).toString() === 'ustar\\u000000'\n    ) {\n      /* c8 ignore start */\n      this.uname =\n        exForFields?.uname ??\n        gexForFields?.uname ??\n        decString(buf, off + 265, 32)\n      this.gname =\n        exForFields?.gname ??\n        gexForFields?.gname ??\n        decString(buf, off + 297, 32)\n      this.devmaj =\n        exForFields?.devmaj ??\n        gexForFields?.devmaj ??\n        decNumber(buf, off + 329, 8) ??\n        0\n      this.devmin =\n        exForFields?.devmin ??\n        gexForFields?.devmin ??\n        decNumber(buf, off + 337, 8) ??\n        0\n      /* c8 ignore stop */\n      if (buf[off + 475] !== 0) {\n        // definitely a prefix, definitely >130 chars.\n        const prefix = decString(buf, off + 345, 155)\n        this.path = prefix + '/' + this.path\n      } else {\n        const prefix = decString(buf, off + 345, 130)\n        if (prefix) {\n          this.path = prefix + '/' + this.path\n        }\n        /* c8 ignore start */\n        this.atime = ex?.atime ?? gex?.atime ?? decDate(buf, off + 476, 12)\n        this.ctime = ex?.ctime ?? gex?.ctime ?? decDate(buf, off + 488, 12)\n        /* c8 ignore stop */\n      }\n    }\n\n    let sum = 8 * 0x20\n    for (let i = off; i < off + 148; i++) {\n      sum += buf[i] as number\n    }\n\n    for (let i = off + 156; i < off + 512; i++) {\n      sum += buf[i] as number\n    }\n\n    this.cksumValid = sum === this.cksum\n    if (this.cksum === undefined && sum === 8 * 0x20) {\n      this.nullBlock = true\n    }\n  }\n\n  #slurp(ex: HeaderData, gex: boolean = false) {\n    Object.assign(\n      this,\n      Object.fromEntries(\n        Object.entries(ex).filter(([k, v]) => {\n          // we slurp in everything except for the path attribute in\n          // a global extended header, because that's weird. Also, any\n          // null/undefined values are ignored.\n          return !(\n            v === null ||\n            v === undefined ||\n            (k === 'size' && Number(v) < 0) ||\n            (k === 'path' && gex) ||\n            (k === 'linkpath' && gex) ||\n            k === 'global'\n          )\n        }),\n      ),\n    )\n  }\n\n  encode(buf?: Buffer, off: number = 0) {\n    if (!buf) {\n      buf = this.block = Buffer.alloc(512)\n    }\n\n    if (this.#type === 'Unsupported') {\n      this.#type = '0'\n    }\n\n    if (!(buf.length >= off + 512)) {\n      throw new Error('need 512 bytes for header')\n    }\n\n    const prefixSize = this.ctime || this.atime ? 130 : 155\n    const split = splitPrefix(this.path || '', prefixSize)\n    const path = split[0]\n    const prefix = split[1]\n    this.needPax = !!split[2]\n\n    this.needPax = encString(buf, off, 100, path) || this.needPax\n    this.needPax = encNumber(buf, off + 100, 8, this.mode) || this.needPax\n    this.needPax = encNumber(buf, off + 108, 8, this.uid) || this.needPax\n    this.needPax = encNumber(buf, off + 116, 8, this.gid) || this.needPax\n    this.needPax = encNumber(buf, off + 124, 12, this.size) || this.needPax\n    this.needPax = encDate(buf, off + 136, 12, this.mtime) || this.needPax\n    buf[off + 156] = Number(this.#type.codePointAt(0))\n    this.needPax =\n      encString(buf, off + 157, 100, this.linkpath) || this.needPax\n    buf.write('ustar\\u000000', off + 257, 8)\n    this.needPax =\n      encString(buf, off + 265, 32, this.uname) || this.needPax\n    this.needPax =\n      encString(buf, off + 297, 32, this.gname) || this.needPax\n    this.needPax =\n      encNumber(buf, off + 329, 8, this.devmaj) || this.needPax\n    this.needPax =\n      encNumber(buf, off + 337, 8, this.devmin) || this.needPax\n    this.needPax =\n      encString(buf, off + 345, prefixSize, prefix) || this.needPax\n    if (buf[off + 475] !== 0) {\n      this.needPax = encString(buf, off + 345, 155, prefix) || this.needPax\n    } else {\n      this.needPax = encString(buf, off + 345, 130, prefix) || this.needPax\n      this.needPax =\n        encDate(buf, off + 476, 12, this.atime) || this.needPax\n      this.needPax =\n        encDate(buf, off + 488, 12, this.ctime) || this.needPax\n    }\n\n    let sum = 8 * 0x20\n    for (let i = off; i < off + 148; i++) {\n      sum += buf[i] as number\n    }\n\n    for (let i = off + 156; i < off + 512; i++) {\n      sum += buf[i] as number\n    }\n\n    this.cksum = sum\n    encNumber(buf, off + 148, 8, this.cksum)\n    this.cksumValid = true\n\n    return this.needPax\n  }\n\n  get type(): EntryTypeName {\n    return (\n      this.#type === 'Unsupported' ?\n        this.#type\n      : types.name.get(this.#type)) as EntryTypeName\n  }\n\n  get typeKey(): EntryTypeCode | 'Unsupported' {\n    return this.#type\n  }\n\n  set type(type: EntryTypeCode | EntryTypeName | 'Unsupported') {\n    const c = String(types.code.get(type as EntryTypeName))\n    if (types.isCode(c) || c === 'Unsupported') {\n      this.#type = c\n    } else if (types.isCode(type)) {\n      this.#type = type\n    } else {\n      throw new TypeError('invalid entry type: ' + type)\n    }\n  }\n}\n\nconst splitPrefix = (\n  p: string,\n  prefixSize: number,\n): [string, string, boolean] => {\n  const pathSize = 100\n  let pp = p\n  let prefix = ''\n  let ret: undefined | [string, string, boolean] = undefined\n  const root = pathModule.parse(p).root || '.'\n\n  if (Buffer.byteLength(pp) < pathSize) {\n    ret = [pp, prefix, false]\n  } else {\n    // first set prefix to the dir, and path to the base\n    prefix = pathModule.dirname(pp)\n    pp = pathModule.basename(pp)\n\n    do {\n      if (\n        Buffer.byteLength(pp) <= pathSize &&\n        Buffer.byteLength(prefix) <= prefixSize\n      ) {\n        // both fit!\n        ret = [pp, prefix, false]\n      } else if (\n        Buffer.byteLength(pp) > pathSize &&\n        Buffer.byteLength(prefix) <= prefixSize\n      ) {\n        // prefix fits in prefix, but path doesn't fit in path\n        ret = [pp.slice(0, pathSize - 1), prefix, true]\n      } else {\n        // make path take a bit from prefix\n        pp = pathModule.join(pathModule.basename(prefix), pp)\n        prefix = pathModule.dirname(prefix)\n      }\n    } while (prefix !== root && ret === undefined)\n\n    // at this point, found no resolution, just truncate\n    if (!ret) {\n      ret = [p.slice(0, pathSize - 1), '', true]\n    }\n  }\n  return ret\n}\n\nconst decString = (buf: Buffer, off: number, size: number) =>\n  buf\n    .subarray(off, off + size)\n    .toString('utf8')\n    .replace(/\\0.*/, '')\n\nconst decDate = (buf: Buffer, off: number, size: number) =>\n  numToDate(decNumber(buf, off, size))\n\nconst numToDate = (num?: number) =>\n  num === undefined ? undefined : new Date(num * 1000)\n\nconst decNumber = (buf: Buffer, off: number, size: number) =>\n  Number(buf[off]) & 0x80 ?\n    large.parse(buf.subarray(off, off + size))\n  : decSmallNumber(buf, off, size)\n\nconst nanUndef = (value: number) => (isNaN(value) ? undefined : value)\n\nconst decSmallNumber = (buf: Buffer, off: number, size: number) =>\n  nanUndef(\n    parseInt(\n      buf\n        .subarray(off, off + size)\n        .toString('utf8')\n        .replace(/\\0.*$/, '')\n        .trim(),\n      8,\n    ),\n  )\n\n// the maximum encodable as a null-terminated octal, by field size\nconst MAXNUM = {\n  12: 0o77777777777,\n  8: 0o7777777,\n}\n\nconst encNumber = (\n  buf: Buffer,\n  off: number,\n  size: 12 | 8,\n  num?: number,\n) =>\n  num === undefined ? false\n  : num > MAXNUM[size] || num < 0 ?\n    (large.encode(num, buf.subarray(off, off + size)), true)\n  : (encSmallNumber(buf, off, size, num), false)\n\nconst encSmallNumber = (\n  buf: Buffer,\n  off: number,\n  size: number,\n  num: number,\n) => buf.write(octalString(num, size), off, size, 'ascii')\n\nconst octalString = (num: number, size: number) =>\n  padOctal(Math.floor(num).toString(8), size)\n\nconst padOctal = (str: string, size: number) =>\n  (str.length === size - 1 ?\n    str\n  : new Array(size - str.length - 1).join('0') + str + ' ') + '\\0'\n\nconst encDate = (buf: Buffer, off: number, size: 8 | 12, date?: Date) =>\n  date === undefined ? false : (\n    encNumber(buf, off, size, date.getTime() / 1000)\n  )\n\n// enough to fill the longest string we've got\nconst NULLS = new Array(156).join('\\0')\n// pad with nulls, return true if it's longer or non-ascii\nconst encString = (\n  buf: Buffer,\n  off: number,\n  size: number,\n  str?: string,\n) =>\n  str === undefined ? false : (\n    (buf.write(str + NULLS, off, size, 'utf8'),\n    str.length !== Buffer.byteLength(str) || str.length > size)\n  )\n","// Tar can encode large and negative numbers using a leading byte of\n// 0xff for negative, and 0x80 for positive.\n\nexport const encode = (num: number, buf: Buffer) => {\n  if (!Number.isSafeInteger(num)) {\n    // The number is so large that javascript cannot represent it with integer\n    // precision.\n    throw Error(\n      'cannot encode number outside of javascript safe integer range',\n    )\n  } else if (num < 0) {\n    encodeNegative(num, buf)\n  } else {\n    encodePositive(num, buf)\n  }\n  return buf\n}\n\nconst encodePositive = (num: number, buf: Buffer) => {\n  buf[0] = 0x80\n\n  for (var i = buf.length; i > 1; i--) {\n    buf[i - 1] = num & 0xff\n    num = Math.floor(num / 0x100)\n  }\n}\n\nconst encodeNegative = (num: number, buf: Buffer) => {\n  buf[0] = 0xff\n  var flipped = false\n  num = num * -1\n  for (var i = buf.length; i > 1; i--) {\n    var byte = num & 0xff\n    num = Math.floor(num / 0x100)\n    if (flipped) {\n      buf[i - 1] = onesComp(byte)\n    } else if (byte === 0) {\n      buf[i - 1] = 0\n    } else {\n      flipped = true\n      buf[i - 1] = twosComp(byte)\n    }\n  }\n}\n\nexport const parse = (buf: Buffer) => {\n  const pre = buf[0]\n  const value =\n    pre === 0x80 ? pos(buf.subarray(1, buf.length))\n    : pre === 0xff ? twos(buf)\n    : null\n  if (value === null) {\n    throw Error('invalid base256 encoding')\n  }\n\n  if (!Number.isSafeInteger(value)) {\n    // The number is so large that javascript cannot represent it with integer\n    // precision.\n    throw Error('parsed number outside of javascript safe integer range')\n  }\n\n  return value\n}\n\nconst twos = (buf: Buffer) => {\n  var len = buf.length\n  var sum = 0\n  var flipped = false\n  for (var i = len - 1; i > -1; i--) {\n    var byte = Number(buf[i])\n    var f\n    if (flipped) {\n      f = onesComp(byte)\n    } else if (byte === 0) {\n      f = byte\n    } else {\n      flipped = true\n      f = twosComp(byte)\n    }\n    if (f !== 0) {\n      sum -= f * Math.pow(256, len - i - 1)\n    }\n  }\n  return sum\n}\n\nconst pos = (buf: Buffer) => {\n  var len = buf.length\n  var sum = 0\n  for (var i = len - 1; i > -1; i--) {\n    var byte = Number(buf[i])\n    if (byte !== 0) {\n      sum += byte * Math.pow(256, len - i - 1)\n    }\n  }\n  return sum\n}\n\nconst onesComp = (byte: number) => (0xff ^ byte) & 0xff\n\nconst twosComp = (byte: number) => ((0xff ^ byte) + 1) & 0xff\n","export const isCode = (c: string): c is EntryTypeCode =>\n  name.has(c as EntryTypeCode)\n\nexport const isName = (c: string): c is EntryTypeName =>\n  code.has(c as EntryTypeName)\n\nexport type EntryTypeCode =\n  | '0'\n  | ''\n  | '1'\n  | '2'\n  | '3'\n  | '4'\n  | '5'\n  | '6'\n  | '7'\n  | 'g'\n  | 'x'\n  | 'A'\n  | 'D'\n  | 'I'\n  | 'K'\n  | 'L'\n  | 'M'\n  | 'N'\n  | 'S'\n  | 'V'\n  | 'X'\n\nexport type EntryTypeName =\n  | 'File'\n  | 'OldFile'\n  | 'Link'\n  | 'SymbolicLink'\n  | 'CharacterDevice'\n  | 'BlockDevice'\n  | 'Directory'\n  | 'FIFO'\n  | 'ContiguousFile'\n  | 'GlobalExtendedHeader'\n  | 'ExtendedHeader'\n  | 'SolarisACL'\n  | 'GNUDumpDir'\n  | 'Inode'\n  | 'NextFileHasLongLinkpath'\n  | 'NextFileHasLongPath'\n  | 'ContinuationFile'\n  | 'OldGnuLongPath'\n  | 'SparseFile'\n  | 'TapeVolumeHeader'\n  | 'OldExtendedHeader'\n  | 'Unsupported'\n\n/**\n * types that are a normal file system entry, not metadata.\n *\n * These can be the subject of extended/globalExtended headers, long path\n * names, long linkpath names, etc.\n *\n * Any other types are meta, and cannot be targetted by extended PAX headers.\n */\nexport const normalFsTypes = new Set<EntryTypeCode>([\n  '0',\n  '',\n  '1',\n  '2',\n  '3',\n  '4',\n  '5',\n  '6',\n  '7',\n  'D',\n])\n\n// map types from key to human-friendly name\nexport const name = new Map<EntryTypeCode, EntryTypeName>([\n  ['0', 'File'],\n  // same as File\n  ['', 'OldFile'],\n  ['1', 'Link'],\n  ['2', 'SymbolicLink'],\n  // Devices and FIFOs aren't fully supported\n  // they are parsed, but skipped when unpacking\n  ['3', 'CharacterDevice'],\n  ['4', 'BlockDevice'],\n  ['5', 'Directory'],\n  ['6', 'FIFO'],\n  // same as File\n  ['7', 'ContiguousFile'],\n  // pax headers\n  ['g', 'GlobalExtendedHeader'],\n  ['x', 'ExtendedHeader'],\n  // vendor-specific stuff\n  // skip\n  ['A', 'SolarisACL'],\n  // like 5, but with data, which should be skipped\n  ['D', 'GNUDumpDir'],\n  // metadata only, skip\n  ['I', 'Inode'],\n  // data = link path of next file\n  ['K', 'NextFileHasLongLinkpath'],\n  // data = path of next file\n  ['L', 'NextFileHasLongPath'],\n  // skip\n  ['M', 'ContinuationFile'],\n  // like L\n  ['N', 'OldGnuLongPath'],\n  // skip\n  ['S', 'SparseFile'],\n  // skip\n  ['V', 'TapeVolumeHeader'],\n  // like x\n  ['X', 'OldExtendedHeader'],\n])\n\n// map the other direction\nexport const code = new Map<EntryTypeName, EntryTypeCode>(\n  Array.from(name).map(kv => [kv[1], kv[0]]),\n)\n","import { basename } from 'node:path'\nimport type { HeaderData } from './header.js'\nimport { Header } from './header.js'\n\nexport class Pax implements HeaderData {\n  atime?: Date\n  mtime?: Date\n  ctime?: Date\n\n  charset?: string\n  comment?: string\n\n  gid?: number\n  uid?: number\n\n  gname?: string\n  uname?: string\n  linkpath?: string\n  dev?: number\n  ino?: number\n  nlink?: number\n  path?: string\n  size?: number\n  mode?: number\n\n  global: boolean\n\n  constructor(obj: HeaderData, global: boolean = false) {\n    this.atime = obj.atime\n    this.charset = obj.charset\n    this.comment = obj.comment\n    this.ctime = obj.ctime\n    this.dev = obj.dev\n    this.gid = obj.gid\n    this.global = global\n    this.gname = obj.gname\n    this.ino = obj.ino\n    this.linkpath = obj.linkpath\n    this.mtime = obj.mtime\n    this.nlink = obj.nlink\n    this.path = obj.path\n    this.size = obj.size\n    this.uid = obj.uid\n    this.uname = obj.uname\n  }\n\n  encode() {\n    const body = this.encodeBody()\n    if (body === '') {\n      return Buffer.allocUnsafe(0)\n    }\n\n    const bodyLen = Buffer.byteLength(body)\n    // round up to 512 bytes\n    // add 512 for header\n    const bufLen = 512 * Math.ceil(1 + bodyLen / 512)\n    const buf = Buffer.allocUnsafe(bufLen)\n\n    // 0-fill the header section, it might not hit every field\n    for (let i = 0; i < 512; i++) {\n      buf[i] = 0\n    }\n\n    new Header({\n      // XXX split the path\n      // then the path should be PaxHeader + basename, but less than 99,\n      // prepend with the dirname\n      /* c8 ignore start */\n      path: ('PaxHeader/' + basename(this.path ?? '')).slice(0, 99),\n      /* c8 ignore stop */\n      mode: this.mode || 0o644,\n      uid: this.uid,\n      gid: this.gid,\n      size: bodyLen,\n      mtime: this.mtime,\n      type: this.global ? 'GlobalExtendedHeader' : 'ExtendedHeader',\n      linkpath: '',\n      uname: this.uname || '',\n      gname: this.gname || '',\n      devmaj: 0,\n      devmin: 0,\n      atime: this.atime,\n      ctime: this.ctime,\n    }).encode(buf)\n\n    buf.write(body, 512, bodyLen, 'utf8')\n\n    // null pad after the body\n    for (let i = bodyLen + 512; i < buf.length; i++) {\n      buf[i] = 0\n    }\n\n    return buf\n  }\n\n  encodeBody() {\n    return (\n      this.encodeField('path') +\n      this.encodeField('ctime') +\n      this.encodeField('atime') +\n      this.encodeField('dev') +\n      this.encodeField('ino') +\n      this.encodeField('nlink') +\n      this.encodeField('charset') +\n      this.encodeField('comment') +\n      this.encodeField('gid') +\n      this.encodeField('gname') +\n      this.encodeField('linkpath') +\n      this.encodeField('mtime') +\n      this.encodeField('size') +\n      this.encodeField('uid') +\n      this.encodeField('uname')\n    )\n  }\n\n  encodeField(field: keyof Pax): string {\n    if (this[field] === undefined) {\n      return ''\n    }\n    const r = this[field]\n    const v = r instanceof Date ? r.getTime() / 1000 : r\n    const s =\n      ' ' +\n      (field === 'dev' || field === 'ino' || field === 'nlink' ?\n        'SCHILY.'\n      : '') +\n      field +\n      '=' +\n      v +\n      '\\n'\n    const byteLen = Buffer.byteLength(s)\n    // the digits includes the length of the digits in ascii base-10\n    // so if it's 9 characters, then adding 1 for the 9 makes it 10\n    // which makes it 11 chars.\n    let digits = Math.floor(Math.log(byteLen) / Math.log(10)) + 1\n    if (byteLen + digits >= Math.pow(10, digits)) {\n      digits += 1\n    }\n    const len = digits + byteLen\n    return len + s\n  }\n\n  static parse(str: string, ex?: HeaderData, g: boolean = false) {\n    return new Pax(merge(parseKV(str), ex), g)\n  }\n}\n\nconst merge = (a: HeaderData, b?: HeaderData) =>\n  b ? Object.assign({}, b, a) : a\n\nconst parseKV = (str: string) =>\n  str\n    .replace(/\\n$/, '')\n    .split('\\n')\n    .reduce(parseKVLine, Object.create(null))\n\nconst parseKVLine = (\n  set: Record<string, string | number | Date>,\n  line: string,\n) => {\n  const n = parseInt(line, 10)\n\n  // XXX Values with \\n in them will fail this.\n  // Refactor to not be a naive line-by-line parse.\n  if (n !== Buffer.byteLength(line) + 1) {\n    return set\n  }\n\n  line = line.slice((n + ' ').length)\n  const kv = line.split('=')\n  const r = kv.shift()\n\n  if (!r) {\n    return set\n  }\n\n  const k = r.replace(/^SCHILY\\.(dev|ino|nlink)/, '$1')\n\n  const v = kv.join('=').replace(/\\0.*/, '')\n  switch (k) {\n    case 'path':\n    case 'linkpath':\n    case 'type':\n    case 'charset':\n    case 'comment':\n    case 'gname':\n    case 'uname':\n      set[k] = v\n      break\n    case 'ctime':\n    case 'atime':\n    case 'mtime':\n      set[k] = new Date(Number(v) * 1000)\n      break\n    case 'size':\n      const s = +v\n      if (s >= 0) set[k] = s\n      break\n    case 'gid':\n    case 'uid':\n    case 'dev':\n    case 'ino':\n    case 'nlink':\n    case 'mode':\n      set[k] = +v\n      break\n  }\n  return set\n}\n","// on windows, either \\ or / are valid directory separators.\n// on unix, \\ is a valid character in filenames.\n// so, on windows, and only on windows, we replace all \\ chars with /,\n// so that we can use / as our one and only directory separator char.\n\nconst platform = process.env.TESTING_TAR_FAKE_PLATFORM || process.platform\n\nexport const normalizeWindowsPath: (p: unknown) => string =\n  platform !== 'win32' ?\n    (p: unknown) => String(p)\n  : (p: unknown) => String(p).replaceAll(/\\\\/g, '/')\n","import { Minipass } from 'minipass'\nimport type { Header } from './header.js'\nimport { normalizeWindowsPath } from './normalize-windows-path.js'\nimport type { Pax } from './pax.js'\nimport type { EntryTypeName } from './types.js'\n\nexport class ReadEntry extends Minipass<Buffer, Buffer> {\n  extended?: Pax\n  globalExtended?: Pax\n  header: Header\n  startBlockSize: number\n  blockRemain: number\n  remain: number\n  type: EntryTypeName\n  meta: boolean = false\n  ignore: boolean = false\n  path: string\n  mode?: number\n  uid?: number\n  gid?: number\n  uname?: string\n  gname?: string\n  size: number = 0\n  mtime?: Date\n  atime?: Date\n  ctime?: Date\n  linkpath?: string\n\n  dev?: number\n  ino?: number\n  nlink?: number\n  invalid: boolean = false\n  absolute?: string\n  unsupported: boolean = false\n\n  constructor(header: Header, ex?: Pax, gex?: Pax) {\n    super({})\n    // read entries always start life paused.  this is to avoid the\n    // situation where Minipass's auto-ending empty streams results\n    // in an entry ending before we're ready for it.\n    this.pause()\n    this.extended = ex\n    this.globalExtended = gex\n    this.header = header\n    /* c8 ignore start */\n    this.remain = header.size ?? 0\n    /* c8 ignore stop */\n    this.startBlockSize = 512 * Math.ceil(this.remain / 512)\n    this.blockRemain = this.startBlockSize\n    this.type = header.type\n    switch (this.type) {\n      case 'File':\n      case 'OldFile':\n      case 'Link':\n      case 'SymbolicLink':\n      case 'CharacterDevice':\n      case 'BlockDevice':\n      case 'Directory':\n      case 'FIFO':\n      case 'ContiguousFile':\n      case 'GNUDumpDir':\n        break\n\n      case 'NextFileHasLongLinkpath':\n      case 'NextFileHasLongPath':\n      case 'OldGnuLongPath':\n      case 'GlobalExtendedHeader':\n      case 'ExtendedHeader':\n      case 'OldExtendedHeader':\n        this.meta = true\n        break\n\n      // NOTE: gnutar and bsdtar treat unrecognized types as 'File'\n      // it may be worth doing the same, but with a warning.\n      default:\n        this.ignore = true\n    }\n\n    /* c8 ignore start */\n    if (!header.path) {\n      throw new Error('no path provided for tar.ReadEntry')\n    }\n    /* c8 ignore stop */\n\n    this.path = normalizeWindowsPath(header.path) as string\n    this.mode = header.mode\n    if (this.mode) {\n      this.mode = this.mode & 0o7777\n    }\n    this.uid = header.uid\n    this.gid = header.gid\n    this.uname = header.uname\n    this.gname = header.gname\n    this.size = this.remain\n    this.mtime = header.mtime\n    this.atime = header.atime\n    this.ctime = header.ctime\n    /* c8 ignore start */\n    this.linkpath =\n      header.linkpath ? normalizeWindowsPath(header.linkpath) : undefined\n    /* c8 ignore stop */\n    this.uname = header.uname\n    this.gname = header.gname\n\n    if (ex) {\n      this.#slurp(ex)\n    }\n    if (gex) {\n      this.#slurp(gex, true)\n    }\n  }\n\n  write(data: Buffer) {\n    const writeLen = data.length\n    if (writeLen > this.blockRemain) {\n      throw new Error('writing more to entry than is appropriate')\n    }\n\n    const r = this.remain\n    const br = this.blockRemain\n    this.remain = Math.max(0, r - writeLen)\n    this.blockRemain = Math.max(0, br - writeLen)\n    if (this.ignore) {\n      return true\n    }\n\n    if (r >= writeLen) {\n      return super.write(data)\n    }\n\n    // r < writeLen\n    return super.write(data.subarray(0, r))\n  }\n\n  #slurp(ex: Pax, gex: boolean = false) {\n    if (ex.path) ex.path = normalizeWindowsPath(ex.path)\n    if (ex.linkpath) ex.linkpath = normalizeWindowsPath(ex.linkpath)\n    Object.assign(\n      this,\n      Object.fromEntries(\n        Object.entries(ex).filter(([k, v]) => {\n          // we slurp in everything except for the path attribute in\n          // a global extended header, because that's weird. Also, any\n          // null/undefined values are ignored.\n          return !(v === null || v === undefined || (k === 'path' && gex))\n        }),\n      ),\n    )\n  }\n}\n","import { type Minipass } from 'minipass'\n\n/** has a warn method */\nexport type Warner = {\n  warn(code: string, message: string | Error, data: unknown): void\n  file?: string\n  cwd?: string\n  strict?: boolean\n\n  emit(event: 'warn', code: string, message: string, data?: WarnData): void\n  emit(event: 'error', error: TarError): void\n}\n\nexport type WarnEvent<T = Buffer> = Minipass.Events<T> & {\n  warn: [code: string, message: string, data: WarnData]\n}\n\nexport type WarnData = {\n  file?: string\n  cwd?: string\n  code?: string\n  tarCode?: string\n  recoverable?: boolean\n  [k: string]: unknown\n}\n\nexport type TarError = Error & WarnData\n\nexport const warnMethod = (\n  self: Warner,\n  code: string,\n  message: string | Error,\n  data: WarnData = {},\n) => {\n  if (self.file) {\n    data.file = self.file\n  }\n  if (self.cwd) {\n    data.cwd = self.cwd\n  }\n  data.code =\n    (message instanceof Error &&\n      (message as NodeJS.ErrnoException).code) ||\n    code\n  data.tarCode = code\n  if (!self.strict && data.recoverable !== false) {\n    if (message instanceof Error) {\n      data = Object.assign(message, data)\n      message = message.message\n    }\n    self.emit('warn', code, message, data)\n  } else if (message instanceof Error) {\n    self.emit('error', Object.assign(message, data))\n  } else {\n    self.emit(\n      'error',\n      Object.assign(new Error(`${code}: ${message}`), data),\n    )\n  }\n}\n","// warning: extremely hot code path.\n// This has been meticulously optimized for use\n// within npm install on large package trees.\n// Do not edit without careful benchmarking.\nexport const stripTrailingSlashes = (str: string) => {\n  let i = str.length - 1\n  let slashesStart = -1\n  while (i > -1 && str.charAt(i) === '/') {\n    slashesStart = i\n    i--\n  }\n  return slashesStart === -1 ? str : str.slice(0, slashesStart)\n}\n","// A readable tar stream creator\n// Technically, this is a transform stream that you write paths into,\n// and tar format comes out of.\n// The `add()` method is like `write()` but returns this,\n// and end() return `this` as well, so you can\n// do `new Pack(opt).add('files').add('dir').end().pipe(output)\n// You could also do something like:\n// streamOfPaths().pipe(new Pack()).pipe(new fs.WriteStream('out.tar'))\n\nimport fs, { type Stats } from 'fs'\nimport {\n  WriteEntry,\n  WriteEntrySync,\n  WriteEntryTar,\n} from './write-entry.js'\n\nexport class PackJob {\n  path: string\n  absolute: string\n  entry?: WriteEntry | WriteEntryTar\n  stat?: Stats\n  readdir?: string[]\n  pending: boolean = false\n  pendingLink: boolean = false\n  ignore: boolean = false\n  piped: boolean = false\n  constructor(path: string, absolute: string) {\n    this.path = path || './'\n    this.absolute = absolute\n  }\n}\n\nimport { Minipass } from 'minipass'\nimport * as zlib from 'minizlib'\nimport { Yallist } from 'yallist'\nimport type { ReadEntry } from './read-entry.js'\nimport type { WarnEvent } from './warn-method.js'\nimport { warnMethod, type WarnData, type Warner } from './warn-method.js'\n\nconst EOF = Buffer.alloc(1024)\nconst ONSTAT = Symbol('onStat')\nconst ENDED = Symbol('ended')\nconst QUEUE = Symbol('queue')\nconst PENDINGLINKS = Symbol('pendingLinks')\nconst CURRENT = Symbol('current')\nconst PROCESS = Symbol('process')\nconst PROCESSING = Symbol('processing')\nconst PROCESSJOB = Symbol('processJob')\nconst JOBS = Symbol('jobs')\nconst JOBDONE = Symbol('jobDone')\nconst ADDFSENTRY = Symbol('addFSEntry')\nconst ADDTARENTRY = Symbol('addTarEntry')\nconst STAT = Symbol('stat')\nconst READDIR = Symbol('readdir')\nconst ONREADDIR = Symbol('onreaddir')\nconst PIPE = Symbol('pipe')\nconst ENTRY = Symbol('entry')\nconst ENTRYOPT = Symbol('entryOpt')\nconst WRITEENTRYCLASS = Symbol('writeEntryClass')\nconst WRITE = Symbol('write')\nconst ONDRAIN = Symbol('ondrain')\n\nimport path from 'path'\nimport { normalizeWindowsPath } from './normalize-windows-path.js'\nimport type { LinkCacheKey, TarOptions } from './options.js'\n\nexport class Pack\n  extends Minipass<Buffer, ReadEntry | string, WarnEvent<Buffer>>\n  implements Warner\n{\n  sync: boolean = false\n  opt: TarOptions\n  cwd: string\n  maxReadSize?: number\n  preservePaths: boolean\n  strict: boolean\n  noPax: boolean\n  prefix: string\n  linkCache: Exclude<TarOptions['linkCache'], undefined>\n  statCache: Exclude<TarOptions['statCache'], undefined>\n  file: string\n  portable: boolean\n  zip?: zlib.BrotliCompress | zlib.Gzip | zlib.ZstdCompress\n  readdirCache: Exclude<TarOptions['readdirCache'], undefined>\n  noDirRecurse: boolean\n  follow: boolean\n  noMtime: boolean\n  mtime?: Date\n  filter: Exclude<TarOptions['filter'], undefined>\n  jobs: number;\n\n  [WRITEENTRYCLASS]: typeof WriteEntry | typeof WriteEntrySync\n  onWriteEntry?: (entry: WriteEntry) => void;\n  // Note: we actually DO need a linked list here, because we\n  // shift() to update the head of the list where we start, but still\n  // while that happens, need to know what the next item in the queue\n  // will be. Since we do multiple jobs in parallel, it's not as simple\n  // as just an Array.shift(), since that would lose the information about\n  // the next job in the list. We could add a .next field on the PackJob\n  // class, but then we'd have to be tracking the tail of the queue the\n  // whole time, and Yallist just does that for us anyway.\n  [QUEUE]: Yallist<PackJob>;\n  [PENDINGLINKS] = new Map<LinkCacheKey, PackJob[]>();\n  [JOBS]: number = 0;\n  [PROCESSING]: boolean = false;\n  [ENDED]: boolean = false\n\n  constructor(opt: TarOptions = {}) {\n    super()\n    this.opt = opt\n    this.file = opt.file || ''\n    this.cwd = opt.cwd || process.cwd()\n    this.maxReadSize = opt.maxReadSize\n    this.preservePaths = !!opt.preservePaths\n    this.strict = !!opt.strict\n    this.noPax = !!opt.noPax\n    this.prefix = normalizeWindowsPath(opt.prefix || '')\n    this.linkCache = opt.linkCache || new Map()\n    this.statCache = opt.statCache || new Map()\n    this.readdirCache = opt.readdirCache || new Map()\n    this.onWriteEntry = opt.onWriteEntry\n\n    this[WRITEENTRYCLASS] = WriteEntry\n    if (typeof opt.onwarn === 'function') {\n      this.on('warn', opt.onwarn)\n    }\n\n    this.portable = !!opt.portable\n\n    if (opt.gzip || opt.brotli || opt.zstd) {\n      if (\n        (opt.gzip ? 1 : 0) + (opt.brotli ? 1 : 0) + (opt.zstd ? 1 : 0) >\n        1\n      ) {\n        throw new TypeError('gzip, brotli, zstd are mutually exclusive')\n      }\n      if (opt.gzip) {\n        if (typeof opt.gzip !== 'object') {\n          opt.gzip = {}\n        }\n        if (this.portable) {\n          opt.gzip.portable = true\n        }\n        this.zip = new zlib.Gzip(opt.gzip)\n      }\n      if (opt.brotli) {\n        if (typeof opt.brotli !== 'object') {\n          opt.brotli = {}\n        }\n        this.zip = new zlib.BrotliCompress(opt.brotli)\n      }\n      if (opt.zstd) {\n        if (typeof opt.zstd !== 'object') {\n          opt.zstd = {}\n        }\n        this.zip = new zlib.ZstdCompress(opt.zstd)\n      }\n      /* c8 ignore next */\n      if (!this.zip) throw new Error('impossible')\n      const zip = this.zip\n      zip.on('data', chunk => super.write(chunk as unknown as string))\n      zip.on('end', () => super.end())\n      zip.on('drain', () => this[ONDRAIN]())\n      this.on('resume', () => zip.resume())\n    } else {\n      this.on('drain', this[ONDRAIN])\n    }\n\n    this.noDirRecurse = !!opt.noDirRecurse\n    this.follow = !!opt.follow\n    this.noMtime = !!opt.noMtime\n    if (opt.mtime) this.mtime = opt.mtime\n\n    this.filter =\n      typeof opt.filter === 'function' ? opt.filter : () => true\n\n    this[QUEUE] = new Yallist<PackJob>()\n    this[JOBS] = 0\n    this.jobs = Number(opt.jobs) || 4\n    this[PROCESSING] = false\n    this[ENDED] = false\n  }\n\n  [WRITE](chunk: Buffer) {\n    return super.write(chunk as unknown as string)\n  }\n\n  add(path: string | ReadEntry) {\n    this.write(path)\n    return this\n  }\n\n  end(cb?: () => void): this\n  end(path: string | ReadEntry, cb?: () => void): this\n  end(\n    path: string | ReadEntry,\n    encoding?: Minipass.Encoding,\n    cb?: () => void,\n  ): this\n  end(\n    path?: string | ReadEntry | (() => void),\n    encoding?: Minipass.Encoding | (() => void),\n    cb?: () => void,\n  ) {\n    /* c8 ignore start */\n    if (typeof path === 'function') {\n      cb = path\n      path = undefined\n    }\n    if (typeof encoding === 'function') {\n      cb = encoding\n      encoding = undefined\n    }\n    /* c8 ignore stop */\n    if (path) {\n      this.add(path)\n    }\n    this[ENDED] = true\n    this[PROCESS]()\n    /* c8 ignore next */\n    if (cb) cb()\n    return this\n  }\n\n  write(path: string | ReadEntry) {\n    if (this[ENDED]) {\n      throw new Error('write after end')\n    }\n\n    if (typeof path === 'string') {\n      this[ADDFSENTRY](path)\n    } else {\n      this[ADDTARENTRY](path)\n    }\n    return this.flowing\n  }\n\n  [ADDTARENTRY](p: ReadEntry) {\n    const absolute = normalizeWindowsPath(path.resolve(this.cwd, p.path))\n    // in this case, we don't have to wait for the stat\n    if (!this.filter(p.path, p)) {\n      p.resume()\n    } else {\n      const job = new PackJob(p.path, absolute)\n      job.entry = new WriteEntryTar(p, this[ENTRYOPT](job))\n      job.entry.on('end', () => this[JOBDONE](job))\n      this[JOBS] += 1\n      this[QUEUE].push(job)\n    }\n\n    this[PROCESS]()\n  }\n\n  [ADDFSENTRY](p: string) {\n    const absolute = normalizeWindowsPath(path.resolve(this.cwd, p))\n    this[QUEUE].push(new PackJob(p, absolute))\n    this[PROCESS]()\n  }\n\n  [STAT](job: PackJob) {\n    job.pending = true\n    this[JOBS] += 1\n    const stat = this.follow ? 'stat' : 'lstat'\n    fs[stat](job.absolute, (er, stat) => {\n      job.pending = false\n      this[JOBS] -= 1\n      if (er) {\n        this.emit('error', er)\n      } else {\n        this[ONSTAT](job, stat)\n      }\n    })\n  }\n\n  [ONSTAT](job: PackJob, stat: Stats) {\n    this.statCache.set(job.absolute, stat)\n    job.stat = stat\n\n    // now we have the stat, we can filter it.\n    if (!this.filter(job.path, stat)) {\n      job.ignore = true\n    } else if (\n      stat.isFile() &&\n      stat.nlink > 1 &&\n      !this.linkCache.get(`${stat.dev}:${stat.ino}`) &&\n      !this.sync\n    ) {\n      // if it's not filtered, and it's a new File entry, and next anyway\n      // process right away in case any pending Link entries are about\n      // to try to link to it.\n      if (job === this[CURRENT]) {\n        this[PROCESSJOB](job)\n      } else {\n        // if it's NOT the current entry, it needs to be deferred,\n        // so that the link target can be built first.\n        const key: LinkCacheKey = `${stat.dev}:${stat.ino}`\n        const pending = this[PENDINGLINKS].get(key)\n        if (pending) pending.push(job)\n        else this[PENDINGLINKS].set(key, [job])\n        job.pendingLink = true\n        job.pending = true\n      }\n    }\n\n    this[PROCESS]()\n  }\n\n  [READDIR](job: PackJob) {\n    job.pending = true\n    this[JOBS] += 1\n    fs.readdir(job.absolute, (er, entries) => {\n      job.pending = false\n      this[JOBS] -= 1\n      if (er) {\n        return this.emit('error', er)\n      }\n      this[ONREADDIR](job, entries)\n    })\n  }\n\n  [ONREADDIR](job: PackJob, entries: string[]) {\n    this.readdirCache.set(job.absolute, entries)\n    job.readdir = entries\n    this[PROCESS]()\n  }\n\n  [PROCESS]() {\n    if (this[PROCESSING]) {\n      return\n    }\n\n    this[PROCESSING] = true\n    for (\n      let w = this[QUEUE].head;\n      !!w && this[JOBS] < this.jobs;\n      w = w.next\n    ) {\n      this[PROCESSJOB](w.value)\n      if (w.value.ignore) {\n        const p = w.next\n        this[QUEUE].removeNode(w)\n        w.next = p\n      }\n    }\n\n    this[PROCESSING] = false\n\n    if (this[ENDED] && this[QUEUE].length === 0 && this[JOBS] === 0) {\n      if (this.zip) {\n        this.zip.end(EOF)\n      } else {\n        super.write(EOF as unknown as string)\n        super.end()\n      }\n    }\n  }\n\n  get [CURRENT]() {\n    return this[QUEUE] && this[QUEUE].head && this[QUEUE].head.value\n  }\n\n  [JOBDONE](job: PackJob) {\n    this[QUEUE].shift()\n    this[JOBS] -= 1\n    const { stat } = job\n    if (stat && stat.isFile() && stat.nlink > 1) {\n      // might be a file with pending links\n      const key: LinkCacheKey = `${stat.dev}:${stat.ino}`\n      const pending = this[PENDINGLINKS].get(key)\n      if (pending) {\n        this[PENDINGLINKS].delete(key)\n        for (const job of pending) {\n          job.pending = false\n          this[PROCESSJOB](job)\n        }\n      }\n    }\n    this[PROCESS]()\n  }\n\n  [PROCESSJOB](job: PackJob) {\n    if (job.pending && job.pendingLink && job === this[CURRENT]) {\n      // At least one of the links to this file are not being included\n      // in the tarball, so we need to just proceed.\n      job.pending = false\n      job.pendingLink = false\n    }\n    if (job.pending) {\n      return\n    }\n\n    if (job.entry) {\n      if (job === this[CURRENT] && !job.piped) {\n        this[PIPE](job)\n      }\n      return\n    }\n\n    if (!job.stat) {\n      const sc = this.statCache.get(job.absolute)\n      if (sc) {\n        this[ONSTAT](job, sc)\n      } else {\n        this[STAT](job)\n      }\n    }\n    if (!job.stat) {\n      return\n    }\n\n    // filtered out!\n    if (job.ignore) {\n      return\n    }\n\n    if (!this.noDirRecurse && job.stat.isDirectory() && !job.readdir) {\n      const rc = this.readdirCache.get(job.absolute)\n      if (rc) {\n        this[ONREADDIR](job, rc)\n      } else {\n        this[READDIR](job)\n      }\n      if (!job.readdir) {\n        return\n      }\n    }\n\n    // we know it doesn't have an entry, because that got checked above\n    job.entry = this[ENTRY](job)\n    if (!job.entry) {\n      job.ignore = true\n      return\n    }\n\n    if (job === this[CURRENT] && !job.piped) {\n      this[PIPE](job)\n    }\n  }\n\n  [ENTRYOPT](job: PackJob): TarOptions {\n    return {\n      onwarn: (code, msg, data) => this.warn(code, msg, data),\n      noPax: this.noPax,\n      cwd: this.cwd,\n      absolute: job.absolute,\n      preservePaths: this.preservePaths,\n      maxReadSize: this.maxReadSize,\n      strict: this.strict,\n      portable: this.portable,\n      linkCache: this.linkCache,\n      statCache: this.statCache,\n      noMtime: this.noMtime,\n      mtime: this.mtime,\n      prefix: this.prefix,\n      onWriteEntry: this.onWriteEntry,\n    }\n  }\n\n  [ENTRY](job: PackJob) {\n    this[JOBS] += 1\n    try {\n      const e = new this[WRITEENTRYCLASS](job.path, this[ENTRYOPT](job))\n      return e\n        .on('end', () => this[JOBDONE](job))\n        .on('error', er => this.emit('error', er))\n    } catch (er) {\n      this.emit('error', er)\n    }\n  }\n\n  [ONDRAIN]() {\n    if (this[CURRENT] && this[CURRENT].entry) {\n      this[CURRENT].entry.resume()\n    }\n  }\n\n  // like .pipe() but using super, because our write() is special\n  [PIPE](job: PackJob) {\n    job.piped = true\n\n    if (job.readdir) {\n      job.readdir.forEach(entry => {\n        const p = job.path\n        const base = p === './' ? '' : p.replace(/\\/*$/, '/')\n        this[ADDFSENTRY](base + entry)\n      })\n    }\n\n    const source = job.entry\n    const zip = this.zip\n    /* c8 ignore start */\n    if (!source) throw new Error('cannot pipe without source')\n    /* c8 ignore stop */\n\n    if (zip) {\n      source.on('data', chunk => {\n        if (!zip.write(chunk)) {\n          source.pause()\n        }\n      })\n    } else {\n      source.on('data', chunk => {\n        if (!super.write(chunk as unknown as string)) {\n          source.pause()\n        }\n      })\n    }\n  }\n\n  pause() {\n    if (this.zip) {\n      this.zip.pause()\n    }\n    return super.pause()\n  }\n  warn(code: string, message: string | Error, data: WarnData = {}): void {\n    warnMethod(this, code, message, data)\n  }\n}\n\nexport class PackSync extends Pack {\n  sync: true = true\n  constructor(opt: TarOptions) {\n    super(opt)\n    this[WRITEENTRYCLASS] = WriteEntrySync\n  }\n\n  // pause/resume are no-ops in sync streams.\n  pause() {}\n  resume() {}\n\n  [STAT](job: PackJob) {\n    const stat = this.follow ? 'statSync' : 'lstatSync'\n    this[ONSTAT](job, fs[stat](job.absolute))\n  }\n\n  [READDIR](job: PackJob) {\n    this[ONREADDIR](job, fs.readdirSync(job.absolute))\n  }\n\n  // gotta get it all in this tick\n  [PIPE](job: PackJob) {\n    const source = job.entry\n    const zip = this.zip\n\n    if (job.readdir) {\n      job.readdir.forEach(entry => {\n        const p = job.path\n        const base = p === './' ? '' : p.replace(/\\/*$/, '/')\n        this[ADDFSENTRY](base + entry)\n      })\n    }\n\n    /* c8 ignore start */\n    if (!source) throw new Error('Cannot pipe without source')\n    /* c8 ignore stop */\n\n    if (zip) {\n      source.on('data', chunk => {\n        zip.write(chunk)\n      })\n    } else {\n      source.on('data', chunk => {\n        super[WRITE](chunk)\n      })\n    }\n  }\n}\n","import fs, { type Stats } from 'fs'\nimport { Minipass } from 'minipass'\nimport path from 'path'\nimport { Header } from './header.js'\nimport { modeFix } from './mode-fix.js'\nimport { normalizeWindowsPath } from './normalize-windows-path.js'\nimport type {\n  LinkCacheKey,\n  TarOptions,\n  TarOptionsWithAliases,\n} from './options.js'\nimport { dealias } from './options.js'\nimport { Pax } from './pax.js'\nimport type { ReadEntry } from './read-entry.js'\nimport { stripAbsolutePath } from './strip-absolute-path.js'\nimport { stripTrailingSlashes } from './strip-trailing-slashes.js'\nimport type { EntryTypeName } from './types.js'\nimport type { WarnData, Warner, WarnEvent } from './warn-method.js'\nimport { warnMethod } from './warn-method.js'\nimport * as winchars from './winchars.js'\n\nconst prefixPath = (path: string, prefix?: string) => {\n  if (!prefix) {\n    return normalizeWindowsPath(path)\n  }\n  path = normalizeWindowsPath(path).replace(/^\\.(\\/|$)/, '')\n  return stripTrailingSlashes(prefix) + '/' + path\n}\n\nconst maxReadSize = 16 * 1024 * 1024\n\nconst PROCESS = Symbol('process')\nconst FILE = Symbol('file')\nconst DIRECTORY = Symbol('directory')\nconst SYMLINK = Symbol('symlink')\nconst HARDLINK = Symbol('hardlink')\nconst HEADER = Symbol('header')\nconst READ = Symbol('read')\nconst LSTAT = Symbol('lstat')\nconst ONLSTAT = Symbol('onlstat')\nconst ONREAD = Symbol('onread')\nconst ONREADLINK = Symbol('onreadlink')\nconst OPENFILE = Symbol('openfile')\nconst ONOPENFILE = Symbol('onopenfile')\nconst CLOSE = Symbol('close')\nconst MODE = Symbol('mode')\nconst AWAITDRAIN = Symbol('awaitDrain')\nconst ONDRAIN = Symbol('ondrain')\nconst PREFIX = Symbol('prefix')\n\nexport class WriteEntry\n  extends Minipass<Buffer, Minipass.ContiguousData, WarnEvent>\n  implements Warner\n{\n  path: string\n  portable: boolean\n  myuid: number = (process.getuid && process.getuid()) || 0\n  // until node has builtin pwnam functions, this'll have to do\n  myuser: string = process.env.USER || ''\n  maxReadSize: number\n  linkCache: Exclude<TarOptions['linkCache'], undefined>\n  statCache: Exclude<TarOptions['statCache'], undefined>\n  preservePaths: boolean\n  cwd: string\n  strict: boolean\n  mtime?: Date\n  noPax: boolean\n  noMtime: boolean\n  prefix?: string\n  fd?: number\n\n  blockLen: number = 0\n  blockRemain: number = 0\n  buf?: Buffer\n  pos: number = 0\n  remain: number = 0\n  length: number = 0\n  offset: number = 0\n\n  win32: boolean\n  absolute: string\n\n  header?: Header\n  type?: EntryTypeName | 'Unsupported'\n  linkpath?: string\n  stat?: Stats\n  onWriteEntry?: (entry: WriteEntry) => unknown\n\n  #hadError: boolean = false\n\n  constructor(p: string, opt_: TarOptionsWithAliases = {}) {\n    const opt = dealias(opt_)\n    super()\n    this.path = normalizeWindowsPath(p)\n    // suppress atime, ctime, uid, gid, uname, gname\n    this.portable = !!opt.portable\n    this.maxReadSize = opt.maxReadSize || maxReadSize\n    this.linkCache = opt.linkCache || new Map()\n    this.statCache = opt.statCache || new Map()\n    this.preservePaths = !!opt.preservePaths\n    this.cwd = normalizeWindowsPath(opt.cwd || process.cwd())\n    this.strict = !!opt.strict\n    this.noPax = !!opt.noPax\n    this.noMtime = !!opt.noMtime\n    this.mtime = opt.mtime\n    this.prefix = opt.prefix ? normalizeWindowsPath(opt.prefix) : undefined\n    this.onWriteEntry = opt.onWriteEntry\n\n    if (typeof opt.onwarn === 'function') {\n      this.on('warn', opt.onwarn)\n    }\n\n    let pathWarn: string | boolean = false\n    if (!this.preservePaths) {\n      const [root, stripped] = stripAbsolutePath(this.path)\n      if (root && typeof stripped === 'string') {\n        this.path = stripped\n        pathWarn = root\n      }\n    }\n\n    this.win32 = !!opt.win32 || process.platform === 'win32'\n    if (this.win32) {\n      // force the \\ to / normalization, since we might not *actually*\n      // be on windows, but want \\ to be considered a path separator.\n      this.path = winchars.decode(this.path.replaceAll(/\\\\/g, '/'))\n      p = p.replaceAll(/\\\\/g, '/')\n    }\n\n    this.absolute = normalizeWindowsPath(\n      opt.absolute || path.resolve(this.cwd, p),\n    )\n\n    if (this.path === '') {\n      this.path = './'\n    }\n\n    if (pathWarn) {\n      this.warn(\n        'TAR_ENTRY_INFO',\n        `stripping ${pathWarn} from absolute path`,\n        {\n          entry: this,\n          path: pathWarn + this.path,\n        },\n      )\n    }\n\n    const cs = this.statCache.get(this.absolute)\n    if (cs) {\n      this[ONLSTAT](cs)\n    } else {\n      this[LSTAT]()\n    }\n  }\n\n  warn(code: string, message: string | Error, data: WarnData = {}) {\n    return warnMethod(this, code, message, data)\n  }\n\n  emit(ev: keyof WarnEvent, ...data: unknown[]) {\n    if (ev === 'error') {\n      this.#hadError = true\n    }\n    return super.emit(ev, ...data)\n  }\n\n  [LSTAT]() {\n    fs.lstat(this.absolute, (er, stat) => {\n      if (er) {\n        return this.emit('error', er)\n      }\n      this[ONLSTAT](stat)\n    })\n  }\n\n  [ONLSTAT](stat: Stats) {\n    this.statCache.set(this.absolute, stat)\n    this.stat = stat\n    if (!stat.isFile()) {\n      stat.size = 0\n    }\n    this.type = getType(stat)\n    this.emit('stat', stat)\n    this[PROCESS]()\n  }\n\n  [PROCESS]() {\n    switch (this.type) {\n      case 'File':\n        return this[FILE]()\n      case 'Directory':\n        return this[DIRECTORY]()\n      case 'SymbolicLink':\n        return this[SYMLINK]()\n      // unsupported types are ignored.\n      default:\n        return this.end()\n    }\n  }\n\n  [MODE](mode: number) {\n    return modeFix(mode, this.type === 'Directory', this.portable)\n  }\n\n  [PREFIX](path: string) {\n    return prefixPath(path, this.prefix)\n  }\n\n  [HEADER]() {\n    /* c8 ignore start */\n    if (!this.stat) {\n      throw new Error('cannot write header before stat')\n    }\n    /* c8 ignore stop */\n\n    if (this.type === 'Directory' && this.portable) {\n      this.noMtime = true\n    }\n\n    this.onWriteEntry?.(this)\n    this.header = new Header({\n      path: this[PREFIX](this.path),\n      // only apply the prefix to hard links.\n      linkpath:\n        this.type === 'Link' && this.linkpath !== undefined ?\n          this[PREFIX](this.linkpath)\n        : this.linkpath,\n      // only the permissions and setuid/setgid/sticky bitflags\n      // not the higher-order bits that specify file type\n      mode: this[MODE](this.stat.mode),\n      uid: this.portable ? undefined : this.stat.uid,\n      gid: this.portable ? undefined : this.stat.gid,\n      size: this.stat.size,\n      mtime: this.noMtime ? undefined : this.mtime || this.stat.mtime,\n      /* c8 ignore next */\n      type: this.type === 'Unsupported' ? undefined : this.type,\n      uname:\n        this.portable ? undefined\n        : this.stat.uid === this.myuid ? this.myuser\n        : '',\n      atime: this.portable ? undefined : this.stat.atime,\n      ctime: this.portable ? undefined : this.stat.ctime,\n    })\n\n    if (this.header.encode() && !this.noPax) {\n      super.write(\n        new Pax({\n          atime: this.portable ? undefined : this.header.atime,\n          ctime: this.portable ? undefined : this.header.ctime,\n          gid: this.portable ? undefined : this.header.gid,\n          mtime:\n            this.noMtime ? undefined : this.mtime || this.header.mtime,\n          path: this[PREFIX](this.path),\n          linkpath:\n            this.type === 'Link' && this.linkpath !== undefined ?\n              this[PREFIX](this.linkpath)\n            : this.linkpath,\n          size: this.header.size,\n          uid: this.portable ? undefined : this.header.uid,\n          uname: this.portable ? undefined : this.header.uname,\n          dev: this.portable ? undefined : this.stat.dev,\n          ino: this.portable ? undefined : this.stat.ino,\n          nlink: this.portable ? undefined : this.stat.nlink,\n        }).encode(),\n      )\n    }\n    const block = this.header?.block\n    /* c8 ignore start */\n    if (!block) {\n      throw new Error('failed to encode header')\n    }\n    /* c8 ignore stop */\n    super.write(block)\n  }\n\n  [DIRECTORY]() {\n    /* c8 ignore start */\n    if (!this.stat) {\n      throw new Error('cannot create directory entry without stat')\n    }\n    /* c8 ignore stop */\n    if (this.path.slice(-1) !== '/') {\n      this.path += '/'\n    }\n    this.stat.size = 0\n    this[HEADER]()\n    this.end()\n  }\n\n  [SYMLINK]() {\n    fs.readlink(this.absolute, (er, linkpath) => {\n      if (er) {\n        return this.emit('error', er)\n      }\n      this[ONREADLINK](linkpath)\n    })\n  }\n\n  [ONREADLINK](linkpath: string) {\n    this.linkpath = normalizeWindowsPath(linkpath)\n    this[HEADER]()\n    this.end()\n  }\n\n  [HARDLINK](linkpath: string) {\n    /* c8 ignore start */\n    if (!this.stat) {\n      throw new Error('cannot create link entry without stat')\n    }\n    /* c8 ignore stop */\n    this.type = 'Link'\n    this.linkpath = normalizeWindowsPath(path.relative(this.cwd, linkpath))\n    this.stat.size = 0\n    this[HEADER]()\n    this.end()\n  }\n\n  [FILE]() {\n    /* c8 ignore start */\n    if (!this.stat) {\n      throw new Error('cannot create file entry without stat')\n    }\n    /* c8 ignore stop */\n    if (this.stat.nlink > 1) {\n      const linkKey = `${this.stat.dev}:${this.stat.ino}` as LinkCacheKey\n      const linkpath = this.linkCache.get(linkKey)\n      if (linkpath?.indexOf(this.cwd) === 0) {\n        return this[HARDLINK](linkpath)\n      }\n      this.linkCache.set(linkKey, this.absolute)\n    }\n\n    this[HEADER]()\n    if (this.stat.size === 0) {\n      return this.end()\n    }\n\n    this[OPENFILE]()\n  }\n\n  [OPENFILE]() {\n    fs.open(this.absolute, 'r', (er, fd) => {\n      if (er) {\n        return this.emit('error', er)\n      }\n      this[ONOPENFILE](fd)\n    })\n  }\n\n  [ONOPENFILE](fd: number) {\n    this.fd = fd\n    if (this.#hadError) {\n      return this[CLOSE]()\n    }\n    /* c8 ignore start */\n    if (!this.stat) {\n      throw new Error('should stat before calling onopenfile')\n    }\n    /* c8 ignore start */\n\n    this.blockLen = 512 * Math.ceil(this.stat.size / 512)\n    this.blockRemain = this.blockLen\n    const bufLen = Math.min(this.blockLen, this.maxReadSize)\n    this.buf = Buffer.allocUnsafe(bufLen)\n    this.offset = 0\n    this.pos = 0\n    this.remain = this.stat.size\n    this.length = this.buf.length\n    this[READ]()\n  }\n\n  [READ]() {\n    const { fd, buf, offset, length, pos } = this\n    if (fd === undefined || buf === undefined) {\n      throw new Error('cannot read file without first opening')\n    }\n    fs.read(fd, buf, offset, length, pos, (er, bytesRead) => {\n      if (er) {\n        // ignoring the error from close(2) is a bad practice, but at\n        // this point we already have an error, don't need another one\n        return this[CLOSE](() => this.emit('error', er))\n      }\n      this[ONREAD](bytesRead)\n    })\n  }\n\n  /* c8 ignore start */\n  [CLOSE](\n    cb: (er?: null | Error | NodeJS.ErrnoException) => unknown = () => {},\n  ) {\n    /* c8 ignore stop */\n    if (this.fd !== undefined) fs.close(this.fd, cb)\n  }\n\n  [ONREAD](bytesRead: number) {\n    if (bytesRead <= 0 && this.remain > 0) {\n      const er = Object.assign(new Error('encountered unexpected EOF'), {\n        path: this.absolute,\n        syscall: 'read',\n        code: 'EOF',\n      })\n      return this[CLOSE](() => this.emit('error', er))\n    }\n\n    if (bytesRead > this.remain) {\n      const er = Object.assign(\n        new Error('did not encounter expected EOF'),\n        {\n          path: this.absolute,\n          syscall: 'read',\n          code: 'EOF',\n        },\n      )\n      return this[CLOSE](() => this.emit('error', er))\n    }\n\n    /* c8 ignore start */\n    if (!this.buf) {\n      throw new Error('should have created buffer prior to reading')\n    }\n    /* c8 ignore stop */\n\n    // null out the rest of the buffer, if we could fit the block padding\n    // at the end of this loop, we've incremented bytesRead and this.remain\n    // to be incremented up to the blockRemain level, as if we had expected\n    // to get a null-padded file, and read it until the end.  then we will\n    // decrement both remain and blockRemain by bytesRead, and know that we\n    // reached the expected EOF, without any null buffer to append.\n    if (bytesRead === this.remain) {\n      for (\n        let i = bytesRead;\n        i < this.length && bytesRead < this.blockRemain;\n        i++\n      ) {\n        this.buf[i + this.offset] = 0\n        bytesRead++\n        this.remain++\n      }\n    }\n\n    const chunk =\n      this.offset === 0 && bytesRead === this.buf.length ?\n        this.buf\n      : this.buf.subarray(this.offset, this.offset + bytesRead)\n\n    const flushed = this.write(chunk)\n    if (!flushed) {\n      this[AWAITDRAIN](() => this[ONDRAIN]())\n    } else {\n      this[ONDRAIN]()\n    }\n  }\n\n  [AWAITDRAIN](cb: () => unknown) {\n    this.once('drain', cb)\n  }\n\n  write(buffer: Buffer | string, cb?: () => void): boolean\n  write(\n    str: Buffer | string,\n    encoding?: BufferEncoding | null,\n    cb?: () => void,\n  ): boolean\n  write(\n    chunk: Buffer | string,\n    encoding?: BufferEncoding | (() => unknown) | null,\n    cb?: () => unknown,\n  ): boolean {\n    /* c8 ignore start - just junk to comply with NodeJS.WritableStream */\n    if (typeof encoding === 'function') {\n      cb = encoding\n      encoding = undefined\n    }\n    if (typeof chunk === 'string') {\n      chunk = Buffer.from(\n        chunk,\n        typeof encoding === 'string' ? encoding : 'utf8',\n      )\n    }\n    /* c8 ignore stop */\n\n    if (this.blockRemain < chunk.length) {\n      const er = Object.assign(\n        new Error('writing more data than expected'),\n        {\n          path: this.absolute,\n        },\n      )\n      return this.emit('error', er)\n    }\n    this.remain -= chunk.length\n    this.blockRemain -= chunk.length\n    this.pos += chunk.length\n    this.offset += chunk.length\n    return super.write(chunk, null, cb)\n  }\n\n  [ONDRAIN]() {\n    if (!this.remain) {\n      if (this.blockRemain) {\n        super.write(Buffer.alloc(this.blockRemain))\n      }\n      return this[CLOSE](er => (er ? this.emit('error', er) : this.end()))\n    }\n\n    /* c8 ignore start */\n    if (!this.buf) {\n      throw new Error('buffer lost somehow in ONDRAIN')\n    }\n    /* c8 ignore stop */\n\n    if (this.offset >= this.length) {\n      // if we only have a smaller bit left to read, alloc a smaller buffer\n      // otherwise, keep it the same length it was before.\n      this.buf = Buffer.allocUnsafe(\n        Math.min(this.blockRemain, this.buf.length),\n      )\n      this.offset = 0\n    }\n    this.length = this.buf.length - this.offset\n    this[READ]()\n  }\n}\n\nexport class WriteEntrySync extends WriteEntry implements Warner {\n  sync: true = true;\n\n  [LSTAT]() {\n    this[ONLSTAT](fs.lstatSync(this.absolute))\n  }\n\n  [SYMLINK]() {\n    this[ONREADLINK](fs.readlinkSync(this.absolute))\n  }\n\n  [OPENFILE]() {\n    this[ONOPENFILE](fs.openSync(this.absolute, 'r'))\n  }\n\n  [READ]() {\n    let threw = true\n    try {\n      const { fd, buf, offset, length, pos } = this\n      /* c8 ignore start */\n      if (fd === undefined || buf === undefined) {\n        throw new Error('fd and buf must be set in READ method')\n      }\n      /* c8 ignore stop */\n      const bytesRead = fs.readSync(fd, buf, offset, length, pos)\n      this[ONREAD](bytesRead)\n      threw = false\n    } finally {\n      // ignoring the error from close(2) is a bad practice, but at\n      // this point we already have an error, don't need another one\n      if (threw) {\n        try {\n          this[CLOSE](() => {})\n        } catch {}\n      }\n    }\n  }\n\n  [AWAITDRAIN](cb: () => unknown) {\n    cb()\n  }\n\n  /* c8 ignore start */\n  [CLOSE](\n    cb: (er?: null | Error | NodeJS.ErrnoException) => unknown = () => {},\n  ) {\n    /* c8 ignore stop */\n    if (this.fd !== undefined) fs.closeSync(this.fd)\n    cb()\n  }\n}\n\nexport class WriteEntryTar\n  extends Minipass<Buffer, Buffer | string, WarnEvent>\n  implements Warner\n{\n  blockLen: number = 0\n  blockRemain: number = 0\n  buf: number = 0\n  pos: number = 0\n  remain: number = 0\n  length: number = 0\n  preservePaths: boolean\n  portable: boolean\n  strict: boolean\n  noPax: boolean\n  noMtime: boolean\n  readEntry: ReadEntry\n  type: EntryTypeName\n  prefix?: string\n  path: string\n  mode?: number\n  uid?: number\n  gid?: number\n  uname?: string\n  gname?: string\n  header?: Header\n  mtime?: Date\n  atime?: Date\n  ctime?: Date\n  linkpath?: string\n  size: number\n  onWriteEntry?: (entry: WriteEntry) => unknown\n\n  warn(code: string, message: string | Error, data: WarnData = {}) {\n    return warnMethod(this, code, message, data)\n  }\n\n  constructor(readEntry: ReadEntry, opt_: TarOptionsWithAliases = {}) {\n    const opt = dealias(opt_)\n    super()\n    this.preservePaths = !!opt.preservePaths\n    this.portable = !!opt.portable\n    this.strict = !!opt.strict\n    this.noPax = !!opt.noPax\n    this.noMtime = !!opt.noMtime\n    this.onWriteEntry = opt.onWriteEntry\n\n    this.readEntry = readEntry\n    const { type } = readEntry\n    /* c8 ignore start */\n    if (type === 'Unsupported') {\n      throw new Error('writing entry that should be ignored')\n    }\n    /* c8 ignore stop */\n    this.type = type\n    if (this.type === 'Directory' && this.portable) {\n      this.noMtime = true\n    }\n\n    this.prefix = opt.prefix\n\n    this.path = normalizeWindowsPath(readEntry.path)\n    this.mode =\n      readEntry.mode !== undefined ? this[MODE](readEntry.mode) : undefined\n    this.uid = this.portable ? undefined : readEntry.uid\n    this.gid = this.portable ? undefined : readEntry.gid\n    this.uname = this.portable ? undefined : readEntry.uname\n    this.gname = this.portable ? undefined : readEntry.gname\n    this.size = readEntry.size\n    this.mtime = this.noMtime ? undefined : opt.mtime || readEntry.mtime\n    this.atime = this.portable ? undefined : readEntry.atime\n    this.ctime = this.portable ? undefined : readEntry.ctime\n    this.linkpath =\n      readEntry.linkpath !== undefined ?\n        normalizeWindowsPath(readEntry.linkpath)\n      : undefined\n\n    if (typeof opt.onwarn === 'function') {\n      this.on('warn', opt.onwarn)\n    }\n\n    let pathWarn: false | string = false\n    if (!this.preservePaths) {\n      const [root, stripped] = stripAbsolutePath(this.path)\n      if (root && typeof stripped === 'string') {\n        this.path = stripped\n        pathWarn = root\n      }\n    }\n\n    this.remain = readEntry.size\n    this.blockRemain = readEntry.startBlockSize\n\n    this.onWriteEntry?.(this as unknown as WriteEntry)\n    this.header = new Header({\n      path: this[PREFIX](this.path),\n      linkpath:\n        this.type === 'Link' && this.linkpath !== undefined ?\n          this[PREFIX](this.linkpath)\n        : this.linkpath,\n      // only the permissions and setuid/setgid/sticky bitflags\n      // not the higher-order bits that specify file type\n      mode: this.mode,\n      uid: this.portable ? undefined : this.uid,\n      gid: this.portable ? undefined : this.gid,\n      size: this.size,\n      mtime: this.noMtime ? undefined : this.mtime,\n      type: this.type,\n      uname: this.portable ? undefined : this.uname,\n      atime: this.portable ? undefined : this.atime,\n      ctime: this.portable ? undefined : this.ctime,\n    })\n\n    if (pathWarn) {\n      this.warn(\n        'TAR_ENTRY_INFO',\n        `stripping ${pathWarn} from absolute path`,\n        {\n          entry: this,\n          path: pathWarn + this.path,\n        },\n      )\n    }\n\n    if (this.header.encode() && !this.noPax) {\n      super.write(\n        new Pax({\n          atime: this.portable ? undefined : this.atime,\n          ctime: this.portable ? undefined : this.ctime,\n          gid: this.portable ? undefined : this.gid,\n          mtime: this.noMtime ? undefined : this.mtime,\n          path: this[PREFIX](this.path),\n          linkpath:\n            this.type === 'Link' && this.linkpath !== undefined ?\n              this[PREFIX](this.linkpath)\n            : this.linkpath,\n          size: this.size,\n          uid: this.portable ? undefined : this.uid,\n          uname: this.portable ? undefined : this.uname,\n          dev: this.portable ? undefined : this.readEntry.dev,\n          ino: this.portable ? undefined : this.readEntry.ino,\n          nlink: this.portable ? undefined : this.readEntry.nlink,\n        }).encode(),\n      )\n    }\n\n    const b = this.header?.block\n    /* c8 ignore start */\n    if (!b) throw new Error('failed to encode header')\n    /* c8 ignore stop */\n    super.write(b)\n    readEntry.pipe(this)\n  }\n\n  [PREFIX](path: string) {\n    return prefixPath(path, this.prefix)\n  }\n\n  [MODE](mode: number) {\n    return modeFix(mode, this.type === 'Directory', this.portable)\n  }\n\n  write(buffer: Buffer | string, cb?: () => void): boolean\n  write(\n    str: Buffer | string,\n    encoding?: BufferEncoding | null,\n    cb?: () => void,\n  ): boolean\n  write(\n    chunk: Buffer | string,\n    encoding?: BufferEncoding | (() => unknown) | null,\n    cb?: () => unknown,\n  ): boolean {\n    /* c8 ignore start - just junk to comply with NodeJS.WritableStream */\n    if (typeof encoding === 'function') {\n      cb = encoding\n      encoding = undefined\n    }\n    if (typeof chunk === 'string') {\n      chunk = Buffer.from(\n        chunk,\n        typeof encoding === 'string' ? encoding : 'utf8',\n      )\n    }\n    /* c8 ignore stop */\n    const writeLen = chunk.length\n    if (writeLen > this.blockRemain) {\n      throw new Error('writing more to entry than is appropriate')\n    }\n    this.blockRemain -= writeLen\n    return super.write(chunk, cb)\n  }\n\n  end(cb?: () => void): this\n  end(chunk: Buffer | string, cb?: () => void): this\n  end(\n    chunk: Buffer | string,\n    encoding?: BufferEncoding,\n    cb?: () => void,\n  ): this\n  end(\n    chunk?: Buffer | string | (() => void),\n    encoding?: BufferEncoding | (() => void),\n    cb?: () => void,\n  ): this {\n    if (this.blockRemain) {\n      super.write(Buffer.alloc(this.blockRemain))\n    }\n    /* c8 ignore start - just junk to comply with NodeJS.WritableStream */\n    if (typeof chunk === 'function') {\n      cb = chunk\n      encoding = undefined\n      chunk = undefined\n    }\n    if (typeof encoding === 'function') {\n      cb = encoding\n      encoding = undefined\n    }\n    if (typeof chunk === 'string') {\n      chunk = Buffer.from(chunk, encoding ?? 'utf8')\n    }\n    if (cb) this.once('finish', cb)\n    if (chunk) super.end(chunk, cb)\n    else super.end(cb)\n    /* c8 ignore stop */\n    return this\n  }\n}\n\nconst getType = (stat: Stats): EntryTypeName | 'Unsupported' =>\n  stat.isFile() ? 'File'\n  : stat.isDirectory() ? 'Directory'\n  : stat.isSymbolicLink() ? 'SymbolicLink'\n  : 'Unsupported'\n","export const modeFix = (\n  mode: number,\n  isDir: boolean,\n  portable: boolean,\n) => {\n  mode &= 0o7777\n\n  // in portable mode, use the minimum reasonable umask\n  // if this system creates files with 0o664 by default\n  // (as some linux distros do), then we'll write the\n  // archive with 0o644 instead.  Also, don't ever create\n  // a file that is not readable/writable by the owner.\n  if (portable) {\n    mode = (mode | 0o600) & ~0o22\n  }\n\n  // if dirs are readable, then they should be listable\n  if (isDir) {\n    if (mode & 0o400) {\n      mode |= 0o100\n    }\n    if (mode & 0o40) {\n      mode |= 0o10\n    }\n    if (mode & 0o4) {\n      mode |= 0o1\n    }\n  }\n  return mode\n}\n","// unix absolute paths are also absolute on win32, so we use this for both\nimport { win32 } from 'node:path'\nconst { isAbsolute, parse } = win32\n\n// returns [root, stripped]\n// Note that windows will think that //x/y/z/a has a \"root\" of //x/y, and in\n// those cases, we want to sanitize it to x/y/z/a, not z/a, so we strip /\n// explicitly if it's the first character.\n// drive-specific relative paths on Windows get their root stripped off even\n// though they are not absolute, so `c:../foo` becomes ['c:', '../foo']\nexport const stripAbsolutePath = (path: string): [string, string] => {\n  let r = ''\n\n  let parsed = parse(path)\n  while (isAbsolute(path) || parsed.root) {\n    // windows will think that //x/y/z has a \"root\" of //x/y/\n    // but strip the //?/C:/ off of //?/C:/path\n    const root =\n      path.charAt(0) === '/' && path.slice(0, 4) !== '//?/' ?\n        '/'\n      : parsed.root\n    path = path.slice(root.length)\n    r += root\n    parsed = parse(path)\n  }\n  return [r, path]\n}\n","// When writing files on Windows, translate the characters to their\n// 0xf000 higher-encoded versions.\n\nconst raw = ['|', '<', '>', '?', ':']\n\nconst win = raw.map(char =>\n  String.fromCodePoint(0xf000 + Number(char.codePointAt(0))),\n)\n\nconst toWin = new Map(raw.map((char, i) => [char, win[i]]))\nconst toRaw = new Map(win.map((char, i) => [char, raw[i]]))\n\nexport const encode = (s: string) =>\n  raw.reduce((s, c) => s.split(c).join(toWin.get(c)), s)\nexport const decode = (s: string) =>\n  win.reduce((s, c) => s.split(c).join(toRaw.get(c)), s)\n","export class Yallist<T = unknown> {\n  tail?: Node<T>\n  head?: Node<T>\n  length: number = 0\n\n  static create<T = unknown>(list: Iterable<T> = []) {\n    return new Yallist(list)\n  }\n\n  constructor(list: Iterable<T> = []) {\n    for (const item of list) {\n      this.push(item)\n    }\n  }\n\n  *[Symbol.iterator]() {\n    for (let walker = this.head; walker; walker = walker.next) {\n      yield walker.value\n    }\n  }\n\n  removeNode(node: Node<T>) {\n    if (node.list !== this) {\n      throw new Error(\n        'removing node which does not belong to this list',\n      )\n    }\n\n    const next = node.next\n    const prev = node.prev\n\n    if (next) {\n      next.prev = prev\n    }\n\n    if (prev) {\n      prev.next = next\n    }\n\n    if (node === this.head) {\n      this.head = next\n    }\n    if (node === this.tail) {\n      this.tail = prev\n    }\n\n    this.length--\n    node.next = undefined\n    node.prev = undefined\n    node.list = undefined\n\n    return next\n  }\n\n  unshiftNode(node: Node<T>) {\n    if (node === this.head) {\n      return\n    }\n\n    if (node.list) {\n      node.list.removeNode(node)\n    }\n\n    const head = this.head\n    node.list = this\n    node.next = head\n    if (head) {\n      head.prev = node\n    }\n\n    this.head = node\n    if (!this.tail) {\n      this.tail = node\n    }\n    this.length++\n  }\n\n  pushNode(node: Node<T>) {\n    if (node === this.tail) {\n      return\n    }\n\n    if (node.list) {\n      node.list.removeNode(node)\n    }\n\n    const tail = this.tail\n    node.list = this\n    node.prev = tail\n    if (tail) {\n      tail.next = node\n    }\n\n    this.tail = node\n    if (!this.head) {\n      this.head = node\n    }\n    this.length++\n  }\n\n  push(...args: T[]) {\n    for (let i = 0, l = args.length; i < l; i++) {\n      push(this, args[i])\n    }\n    return this.length\n  }\n\n  unshift(...args: T[]) {\n    for (var i = 0, l = args.length; i < l; i++) {\n      unshift(this, args[i])\n    }\n    return this.length\n  }\n\n  pop() {\n    if (!this.tail) {\n      return undefined\n    }\n\n    const res = this.tail.value\n    const t = this.tail\n    this.tail = this.tail.prev\n    if (this.tail) {\n      this.tail.next = undefined\n    } else {\n      this.head = undefined\n    }\n    t.list = undefined\n    this.length--\n    return res\n  }\n\n  shift() {\n    if (!this.head) {\n      return undefined\n    }\n\n    const res = this.head.value\n    const h = this.head\n    this.head = this.head.next\n    if (this.head) {\n      this.head.prev = undefined\n    } else {\n      this.tail = undefined\n    }\n    h.list = undefined\n    this.length--\n    return res\n  }\n\n  forEach(\n    fn: (value: T, i: number, list: Yallist<T>) => any,\n    thisp?: any,\n  ) {\n    thisp = thisp || this\n    for (let walker = this.head, i = 0; !!walker; i++) {\n      fn.call(thisp, walker.value, i, this)\n      walker = walker.next\n    }\n  }\n\n  forEachReverse(\n    fn: (value: T, i: number, list: Yallist<T>) => any,\n    thisp?: any,\n  ) {\n    thisp = thisp || this\n    for (let walker = this.tail, i = this.length - 1; !!walker; i--) {\n      fn.call(thisp, walker.value, i, this)\n      walker = walker.prev\n    }\n  }\n\n  get(n: number) {\n    let i = 0\n    let walker = this.head\n    for (; !!walker && i < n; i++) {\n      walker = walker.next\n    }\n    if (i === n && !!walker) {\n      return walker.value\n    }\n  }\n\n  getReverse(n: number) {\n    let i = 0\n    let walker = this.tail\n    for (; !!walker && i < n; i++) {\n      // abort out of the list early if we hit a cycle\n      walker = walker.prev\n    }\n    if (i === n && !!walker) {\n      return walker.value\n    }\n  }\n\n  map<R = any>(\n    fn: (value: T, list: Yallist<T>) => R,\n    thisp?: any,\n  ): Yallist<R> {\n    thisp = thisp || this\n    const res = new Yallist<R>()\n    for (let walker = this.head; !!walker; ) {\n      res.push(fn.call(thisp, walker.value, this))\n      walker = walker.next\n    }\n    return res\n  }\n\n  mapReverse<R = any>(\n    fn: (value: T, list: Yallist<T>) => R,\n    thisp?: any,\n  ): Yallist<R> {\n    thisp = thisp || this\n    var res = new Yallist<R>()\n    for (let walker = this.tail; !!walker; ) {\n      res.push(fn.call(thisp, walker.value, this))\n      walker = walker.prev\n    }\n    return res\n  }\n\n  reduce(fn: (left: T, right: T, i: number) => T): T\n  reduce<R = any>(\n    fn: (acc: R, next: T, i: number) => R,\n    initial: R,\n  ): R\n  reduce<R = any>(\n    fn: (acc: R, next: T, i: number) => R,\n    initial?: R,\n  ): R {\n    let acc: R | T\n    let walker = this.head\n    if (arguments.length > 1) {\n      acc = initial as R\n    } else if (this.head) {\n      walker = this.head.next\n      acc = this.head.value\n    } else {\n      throw new TypeError(\n        'Reduce of empty list with no initial value',\n      )\n    }\n\n    for (var i = 0; !!walker; i++) {\n      acc = fn(acc as R, walker.value, i)\n      walker = walker.next\n    }\n\n    return acc as R\n  }\n\n  reduceReverse(fn: (left: T, right: T, i: number) => T): T\n  reduceReverse<R = any>(\n    fn: (acc: R, next: T, i: number) => R,\n    initial: R,\n  ): R\n  reduceReverse<R = any>(\n    fn: (acc: R, next: T, i: number) => R,\n    initial?: R,\n  ): R {\n    let acc: R | T\n    let walker = this.tail\n    if (arguments.length > 1) {\n      acc = initial as R\n    } else if (this.tail) {\n      walker = this.tail.prev\n      acc = this.tail.value\n    } else {\n      throw new TypeError(\n        'Reduce of empty list with no initial value',\n      )\n    }\n\n    for (let i = this.length - 1; !!walker; i--) {\n      acc = fn(acc as R, walker.value, i)\n      walker = walker.prev\n    }\n\n    return acc as R\n  }\n\n  toArray() {\n    const arr = new Array(this.length)\n    for (let i = 0, walker = this.head; !!walker; i++) {\n      arr[i] = walker.value\n      walker = walker.next\n    }\n    return arr\n  }\n\n  toArrayReverse() {\n    const arr = new Array(this.length)\n    for (let i = 0, walker = this.tail; !!walker; i++) {\n      arr[i] = walker.value\n      walker = walker.prev\n    }\n    return arr\n  }\n\n  slice(from: number = 0, to: number = this.length) {\n    if (to < 0) {\n      to += this.length\n    }\n    if (from < 0) {\n      from += this.length\n    }\n    const ret = new Yallist()\n    if (to < from || to < 0) {\n      return ret\n    }\n    if (from < 0) {\n      from = 0\n    }\n    if (to > this.length) {\n      to = this.length\n    }\n    let walker = this.head\n    let i = 0\n    for (i = 0; !!walker && i < from; i++) {\n      walker = walker.next\n    }\n    for (; !!walker && i < to; i++, walker = walker.next) {\n      ret.push(walker.value)\n    }\n    return ret\n  }\n\n  sliceReverse(from: number = 0, to: number = this.length) {\n    if (to < 0) {\n      to += this.length\n    }\n    if (from < 0) {\n      from += this.length\n    }\n    const ret = new Yallist()\n    if (to < from || to < 0) {\n      return ret\n    }\n    if (from < 0) {\n      from = 0\n    }\n    if (to > this.length) {\n      to = this.length\n    }\n    let i = this.length\n    let walker = this.tail\n    for (; !!walker && i > to; i--) {\n      walker = walker.prev\n    }\n    for (; !!walker && i > from; i--, walker = walker.prev) {\n      ret.push(walker.value)\n    }\n    return ret\n  }\n\n  splice(start: number, deleteCount: number = 0, ...nodes: T[]) {\n    if (start > this.length) {\n      start = this.length - 1\n    }\n    if (start < 0) {\n      start = this.length + start\n    }\n\n    let walker = this.head\n\n    for (let i = 0; !!walker && i < start; i++) {\n      walker = walker.next\n    }\n\n    const ret: T[] = []\n    for (let i = 0; !!walker && i < deleteCount; i++) {\n      ret.push(walker.value)\n      walker = this.removeNode(walker)\n    }\n    if (!walker) {\n      walker = this.tail\n    } else if (walker !== this.tail) {\n      walker = walker.prev\n    }\n\n    for (const v of nodes) {\n      walker = insertAfter<T>(this, walker, v)\n    }\n\n    return ret\n  }\n\n  reverse() {\n    const head = this.head\n    const tail = this.tail\n    for (let walker = head; !!walker; walker = walker.prev) {\n      const p = walker.prev\n      walker.prev = walker.next\n      walker.next = p\n    }\n    this.head = tail\n    this.tail = head\n    return this\n  }\n}\n\n// insertAfter undefined means \"make the node the new head of list\"\nfunction insertAfter<T>(\n  self: Yallist<T>,\n  node: Node<T> | undefined,\n  value: T,\n) {\n  const prev = node\n  const next = node ? node.next : self.head\n  const inserted = new Node<T>(value, prev, next, self)\n\n  if (inserted.next === undefined) {\n    self.tail = inserted\n  }\n  if (inserted.prev === undefined) {\n    self.head = inserted\n  }\n\n  self.length++\n\n  return inserted\n}\n\nfunction push<T>(self: Yallist<T>, item: T) {\n  self.tail = new Node<T>(item, self.tail, undefined, self)\n  if (!self.head) {\n    self.head = self.tail\n  }\n  self.length++\n}\n\nfunction unshift<T>(self: Yallist<T>, item: T) {\n  self.head = new Node<T>(item, undefined, self.head, self)\n  if (!self.tail) {\n    self.tail = self.head\n  }\n  self.length++\n}\n\nexport class Node<T = unknown> {\n  list?: Yallist<T>\n  next?: Node<T>\n  prev?: Node<T>\n  value: T\n\n  constructor(\n    value: T,\n    prev?: Node<T> | undefined,\n    next?: Node<T> | undefined,\n    list?: Yallist<T> | undefined,\n  ) {\n    this.list = list\n    this.value = value\n\n    if (prev) {\n      prev.next = this\n      this.prev = prev\n    } else {\n      this.prev = undefined\n    }\n\n    if (next) {\n      next.prev = this\n      this.next = next\n    } else {\n      this.next = undefined\n    }\n  }\n}\n","// tar -x\nimport * as fsm from '@isaacs/fs-minipass'\nimport fs from 'node:fs'\nimport { filesFilter } from './list.js'\nimport { makeCommand } from './make-command.js'\nimport type { TarOptionsFile, TarOptionsSyncFile } from './options.js'\nimport { Unpack, UnpackSync } from './unpack.js'\n\nconst extractFileSync = (opt: TarOptionsSyncFile) => {\n  const u = new UnpackSync(opt)\n  const file = opt.file\n  const stat = fs.statSync(file)\n  // This trades a zero-byte read() syscall for a stat\n  // However, it will usually result in less memory allocation\n  const readSize = opt.maxReadSize || 16 * 1024 * 1024\n  const stream = new fsm.ReadStreamSync(file, {\n    readSize: readSize,\n    size: stat.size,\n  })\n  stream.pipe(u)\n}\n\nconst extractFile = (opt: TarOptionsFile, _?: string[]) => {\n  const u = new Unpack(opt)\n  const readSize = opt.maxReadSize || 16 * 1024 * 1024\n\n  const file = opt.file\n  const p = new Promise<void>((resolve, reject) => {\n    u.on('error', reject)\n    u.on('close', resolve)\n\n    // This trades a zero-byte read() syscall for a stat\n    // However, it will usually result in less memory allocation\n    fs.stat(file, (er, stat) => {\n      if (er) {\n        reject(er)\n      } else {\n        const stream = new fsm.ReadStream(file, {\n          readSize: readSize,\n          size: stat.size,\n        })\n        stream.on('error', reject)\n        stream.pipe(u)\n      }\n    })\n  })\n  return p\n}\n\nexport const extract = makeCommand<Unpack, UnpackSync>(\n  extractFileSync,\n  extractFile,\n  opt => new UnpackSync(opt),\n  opt => new Unpack(opt),\n  (opt, files) => {\n    if (files?.length) filesFilter(opt, files)\n  },\n)\n","// the PEND/UNPEND stuff tracks whether we're ready to emit end/close yet.\n// but the path reservations are required to avoid race conditions where\n// parallelized unpack ops may mess with one another, due to dependencies\n// (like a Link depending on its target) or destructive operations (like\n// clobbering an fs object to create one of a different type.)\n\nimport * as fsm from '@isaacs/fs-minipass'\nimport assert from 'node:assert'\nimport { randomBytes } from 'node:crypto'\nimport fs, { type Stats } from 'node:fs'\nimport path from 'node:path'\nimport { getWriteFlag } from './get-write-flag.js'\nimport type { MkdirError } from './mkdir.js'\nimport { mkdir, mkdirSync } from './mkdir.js'\nimport { normalizeWindowsPath } from './normalize-windows-path.js'\nimport { Parser } from './parse.js'\nimport { stripAbsolutePath } from './strip-absolute-path.js'\nimport * as wc from './winchars.js'\n\nimport type { TarOptions } from './options.js'\nimport { PathReservations } from './path-reservations.js'\nimport type { ReadEntry } from './read-entry.js'\nimport type { WarnData } from './warn-method.js'\nimport { SymlinkError } from './symlink-error.js'\nimport { umask } from './process-umask.js'\n\nconst ONENTRY = Symbol('onEntry')\nconst CHECKFS = Symbol('checkFs')\nconst CHECKFS2 = Symbol('checkFs2')\nconst ISREUSABLE = Symbol('isReusable')\nconst MAKEFS = Symbol('makeFs')\nconst FILE = Symbol('file')\nconst DIRECTORY = Symbol('directory')\nconst LINK = Symbol('link')\nconst SYMLINK = Symbol('symlink')\nconst HARDLINK = Symbol('hardlink')\nconst ENSURE_NO_SYMLINK = Symbol('ensureNoSymlink')\nconst UNSUPPORTED = Symbol('unsupported')\nconst CHECKPATH = Symbol('checkPath')\nconst STRIPABSOLUTEPATH = Symbol('stripAbsolutePath')\nconst MKDIR = Symbol('mkdir')\nconst ONERROR = Symbol('onError')\nconst PENDING = Symbol('pending')\nconst PEND = Symbol('pend')\nconst UNPEND = Symbol('unpend')\nconst ENDED = Symbol('ended')\nconst MAYBECLOSE = Symbol('maybeClose')\nconst SKIP = Symbol('skip')\nconst DOCHOWN = Symbol('doChown')\nconst UID = Symbol('uid')\nconst GID = Symbol('gid')\nconst CHECKED_CWD = Symbol('checkedCwd')\nconst platform = process.env.TESTING_TAR_FAKE_PLATFORM || process.platform\nconst isWindows = platform === 'win32'\nconst DEFAULT_MAX_DEPTH = 1024\n\n// Unlinks on Windows are not atomic.\n//\n// This means that if you have a file entry, followed by another\n// file entry with an identical name, and you cannot re-use the file\n// (because it's a hardlink, or because unlink:true is set, or it's\n// Windows, which does not have useful nlink values), then the unlink\n// will be committed to the disk AFTER the new file has been written\n// over the old one, deleting the new file.\n//\n// To work around this, on Windows systems, we rename the file and then\n// delete the renamed file.  It's a sloppy kludge, but frankly, I do not\n// know of a better way to do this, given windows' non-atomic unlink\n// semantics.\n//\n// See: https://github.com/npm/node-tar/issues/183\n/* c8 ignore start */\nconst unlinkFile = (path: string, cb: (er?: Error | null) => void) => {\n  if (!isWindows) {\n    return fs.unlink(path, cb)\n  }\n\n  const name = path + '.DELETE.' + randomBytes(16).toString('hex')\n  fs.rename(path, name, er => {\n    if (er) {\n      return cb(er)\n    }\n    fs.unlink(name, cb)\n  })\n}\n/* c8 ignore stop */\n\n/* c8 ignore start */\nconst unlinkFileSync = (path: string) => {\n  if (!isWindows) {\n    return fs.unlinkSync(path)\n  }\n\n  const name = path + '.DELETE.' + randomBytes(16).toString('hex')\n  fs.renameSync(path, name)\n  fs.unlinkSync(name)\n}\n/* c8 ignore stop */\n\n// this.gid, entry.gid, this.processUid\nconst uint32 = (\n  a: number | undefined,\n  b: number | undefined,\n  c: number | undefined,\n) =>\n  a !== undefined && a === a >>> 0 ? a\n  : b !== undefined && b === b >>> 0 ? b\n  : c\n\nexport class Unpack extends Parser {\n  [ENDED]: boolean = false;\n  [CHECKED_CWD]: boolean = false;\n  [PENDING]: number = 0\n\n  reservations: PathReservations = new PathReservations()\n  transform?: TarOptions['transform']\n  writable: true = true\n  readable: false = false\n  uid?: number\n  gid?: number\n  setOwner: boolean\n  preserveOwner: boolean\n  processGid?: number\n  processUid?: number\n  maxDepth: number\n  forceChown: boolean\n  win32: boolean\n  newer: boolean\n  keep: boolean\n  noMtime: boolean\n  preservePaths: boolean\n  unlink: boolean\n  cwd: string\n  strip: number\n  processUmask: number\n  umask: number\n  dmode: number\n  fmode: number\n  chmod: boolean\n\n  constructor(opt: TarOptions = {}) {\n    opt.ondone = () => {\n      this[ENDED] = true\n      this[MAYBECLOSE]()\n    }\n\n    super(opt)\n\n    this.transform = opt.transform\n\n    this.chmod = !!opt.chmod\n\n    if (typeof opt.uid === 'number' || typeof opt.gid === 'number') {\n      // need both or neither\n      if (typeof opt.uid !== 'number' || typeof opt.gid !== 'number') {\n        throw new TypeError('cannot set owner without number uid and gid')\n      }\n      if (opt.preserveOwner) {\n        throw new TypeError(\n          'cannot preserve owner in archive and also set owner explicitly',\n        )\n      }\n      this.uid = opt.uid\n      this.gid = opt.gid\n      this.setOwner = true\n    } else {\n      this.uid = undefined\n      this.gid = undefined\n      this.setOwner = false\n    }\n\n    // default true for root\n    this.preserveOwner =\n      opt.preserveOwner === undefined && typeof opt.uid !== 'number' ?\n        !!(process.getuid?.() === 0)\n      : !!opt.preserveOwner\n\n    this.processUid =\n      (this.preserveOwner || this.setOwner) && process.getuid ?\n        process.getuid()\n      : undefined\n    this.processGid =\n      (this.preserveOwner || this.setOwner) && process.getgid ?\n        process.getgid()\n      : undefined\n\n    // prevent excessively deep nesting of subfolders\n    // set to `Infinity` to remove this restriction\n    this.maxDepth =\n      typeof opt.maxDepth === 'number' ? opt.maxDepth : DEFAULT_MAX_DEPTH\n\n    // mostly just for testing, but useful in some cases.\n    // Forcibly trigger a chown on every entry, no matter what\n    this.forceChown = opt.forceChown === true\n\n    // turn ><?| in filenames into 0xf000-higher encoded forms\n    this.win32 = !!opt.win32 || isWindows\n\n    // do not unpack over files that are newer than what's in the archive\n    this.newer = !!opt.newer\n\n    // do not unpack over ANY files\n    this.keep = !!opt.keep\n\n    // do not set mtime/atime of extracted entries\n    this.noMtime = !!opt.noMtime\n\n    // allow .., absolute path entries, and unpacking through symlinks\n    // without this, warn and skip .., relativize absolutes, and error\n    // on symlinks in extraction path\n    this.preservePaths = !!opt.preservePaths\n\n    // unlink files and links before writing. This breaks existing hard\n    // links, and removes symlink directories rather than erroring\n    this.unlink = !!opt.unlink\n\n    this.cwd = normalizeWindowsPath(path.resolve(opt.cwd || process.cwd()))\n    this.strip = Number(opt.strip) || 0\n    // if we're not chmodding, then we don't need the process umask\n    this.processUmask =\n      !this.chmod ? 0\n      : typeof opt.processUmask === 'number' ? opt.processUmask\n      : umask()\n    this.umask =\n      typeof opt.umask === 'number' ? opt.umask : this.processUmask\n\n    // default mode for dirs created as parents\n    this.dmode = opt.dmode || 0o0777 & ~this.umask\n    this.fmode = opt.fmode || 0o0666 & ~this.umask\n\n    this.on('entry', entry => this[ONENTRY](entry))\n  }\n\n  // a bad or damaged archive is a warning for Parser, but an error\n  // when extracting.  Mark those errors as unrecoverable, because\n  // the Unpack contract cannot be met.\n  warn(code: string, msg: string | Error, data: WarnData = {}) {\n    if (code === 'TAR_BAD_ARCHIVE' || code === 'TAR_ABORT') {\n      data.recoverable = false\n    }\n    return super.warn(code, msg, data)\n  }\n\n  [MAYBECLOSE]() {\n    if (this[ENDED] && this[PENDING] === 0) {\n      this.emit('prefinish')\n      this.emit('finish')\n      this.emit('end')\n    }\n  }\n\n  // return false if we need to skip this file\n  // return true if the field was successfully sanitized\n  [STRIPABSOLUTEPATH](\n    entry: ReadEntry,\n    field: 'path' | 'linkpath',\n  ): boolean {\n    const p = entry[field]\n    const { type } = entry\n    if (!p || this.preservePaths) return true\n\n    // strip off the root\n    const [root, stripped] = stripAbsolutePath(p)\n    const parts = stripped.replaceAll(/\\\\/g, '/').split('/')\n\n    if (\n      parts.includes('..') ||\n      /* c8 ignore next */\n      (isWindows && /^[a-z]:\\.\\.$/i.test(parts[0] ?? ''))\n    ) {\n      // For linkpath, check if the resolved path escapes cwd rather than\n      // just rejecting any path with '..' - relative symlinks like\n      // '../sibling/file' are valid if they resolve within the cwd.\n      // For paths, they just simply may not ever use .. at all.\n      if (field === 'path' || type === 'Link') {\n        this.warn('TAR_ENTRY_ERROR', `${field} contains '..'`, {\n          entry,\n          [field]: p,\n        })\n        // not ok!\n        return false\n      }\n      // Resolve linkpath relative to the entry's directory.\n      // `path.posix` is safe to use because we're operating on\n      // tar paths, not a filesystem.\n      const entryDir = path.posix.dirname(entry.path)\n      const resolved = path.posix.normalize(\n        path.posix.join(entryDir, parts.join('/')),\n      )\n      // If the resolved path escapes (starts with ..), reject it\n      if (resolved.startsWith('../') || resolved === '..') {\n        this.warn(\n          'TAR_ENTRY_ERROR',\n          `${field} escapes extraction directory`,\n          {\n            entry,\n            [field]: p,\n          },\n        )\n        return false\n      }\n    }\n\n    if (root) {\n      // ok, but triggers warning about stripping root\n      entry[field] = String(stripped)\n      this.warn(\n        'TAR_ENTRY_INFO',\n        `stripping ${root} from absolute ${field}`,\n        {\n          entry,\n          [field]: p,\n        },\n      )\n    }\n    return true\n  }\n\n  // no IO, just string checking for absolute indicators\n  [CHECKPATH](entry: ReadEntry) {\n    const p = normalizeWindowsPath(entry.path)\n    const parts = p.split('/')\n\n    if (this.strip) {\n      if (parts.length < this.strip) {\n        return false\n      }\n      if (entry.type === 'Link') {\n        const linkparts = normalizeWindowsPath(\n          String(entry.linkpath),\n        ).split('/')\n        if (linkparts.length >= this.strip) {\n          entry.linkpath = linkparts.slice(this.strip).join('/')\n        } else {\n          return false\n        }\n      }\n      parts.splice(0, this.strip)\n      entry.path = parts.join('/')\n    }\n\n    if (isFinite(this.maxDepth) && parts.length > this.maxDepth) {\n      this.warn('TAR_ENTRY_ERROR', 'path excessively deep', {\n        entry,\n        path: p,\n        depth: parts.length,\n        maxDepth: this.maxDepth,\n      })\n      return false\n    }\n\n    if (\n      !this[STRIPABSOLUTEPATH](entry, 'path') ||\n      !this[STRIPABSOLUTEPATH](entry, 'linkpath')\n    ) {\n      return false\n    }\n\n    entry.absolute =\n      path.isAbsolute(entry.path) ?\n        normalizeWindowsPath(path.resolve(entry.path))\n      : normalizeWindowsPath(path.resolve(this.cwd, entry.path))\n\n    // if we somehow ended up with a path that escapes the cwd, and we are\n    // not in preservePaths mode, then something is fishy!  This should have\n    // been prevented above, so ignore this for coverage.\n    /* c8 ignore start - defense in depth */\n    if (\n      !this.preservePaths &&\n      typeof entry.absolute === 'string' &&\n      entry.absolute.indexOf(this.cwd + '/') !== 0 &&\n      entry.absolute !== this.cwd\n    ) {\n      this.warn('TAR_ENTRY_ERROR', 'path escaped extraction target', {\n        entry,\n        path: normalizeWindowsPath(entry.path),\n        resolvedPath: entry.absolute,\n        cwd: this.cwd,\n      })\n      return false\n    }\n    /* c8 ignore stop */\n\n    // an archive can set properties on the extraction directory, but it\n    // may not replace the cwd with a different kind of thing entirely.\n    if (\n      entry.absolute === this.cwd &&\n      entry.type !== 'Directory' &&\n      entry.type !== 'GNUDumpDir'\n    ) {\n      return false\n    }\n\n    // only encode : chars that aren't drive letter indicators\n    if (this.win32) {\n      const { root: aRoot } = path.win32.parse(String(entry.absolute))\n      entry.absolute =\n        aRoot + wc.encode(String(entry.absolute).slice(aRoot.length))\n      const { root: pRoot } = path.win32.parse(entry.path)\n      entry.path = pRoot + wc.encode(entry.path.slice(pRoot.length))\n    }\n\n    return true\n  }\n\n  [ONENTRY](entry: ReadEntry) {\n    if (!this[CHECKPATH](entry)) {\n      return entry.resume()\n    }\n\n    assert.equal(typeof entry.absolute, 'string')\n\n    switch (entry.type) {\n      case 'Directory':\n      case 'GNUDumpDir':\n        if (entry.mode) {\n          entry.mode = entry.mode | 0o700\n        }\n\n      // eslint-disable-next-line no-fallthrough\n      case 'File':\n      case 'OldFile':\n      case 'ContiguousFile':\n      case 'Link':\n      case 'SymbolicLink':\n        return this[CHECKFS](entry)\n\n      case 'CharacterDevice':\n      case 'BlockDevice':\n      case 'FIFO':\n      default:\n        return this[UNSUPPORTED](entry)\n    }\n  }\n\n  [ONERROR](er: Error, entry: ReadEntry) {\n    // Cwd has to exist, or else nothing works. That's serious.\n    // Other errors are warnings, which raise the error in strict\n    // mode, but otherwise continue on.\n    if (er.name === 'CwdError') {\n      this.emit('error', er)\n    } else {\n      this.warn('TAR_ENTRY_ERROR', er, { entry })\n      this[UNPEND]()\n      entry.resume()\n    }\n  }\n\n  [MKDIR](\n    dir: string,\n    mode: number,\n    cb: (er?: null | MkdirError, made?: string) => void,\n  ) {\n    void mkdir(\n      normalizeWindowsPath(dir),\n      {\n        uid: this.uid,\n        gid: this.gid,\n        processUid: this.processUid,\n        processGid: this.processGid,\n        umask: this.processUmask,\n        preserve: this.preservePaths,\n        unlink: this.unlink,\n        cwd: this.cwd,\n        mode: mode,\n      },\n      cb,\n    )\n  }\n\n  [DOCHOWN](entry: ReadEntry) {\n    // in preserve owner mode, chown if the entry doesn't match process\n    // in set owner mode, chown if setting doesn't match process\n    return (\n      this.forceChown ||\n      (this.preserveOwner &&\n        ((typeof entry.uid === 'number' &&\n          entry.uid !== this.processUid) ||\n          (typeof entry.gid === 'number' &&\n            entry.gid !== this.processGid))) ||\n      (typeof this.uid === 'number' && this.uid !== this.processUid) ||\n      (typeof this.gid === 'number' && this.gid !== this.processGid)\n    )\n  }\n\n  [UID](entry: ReadEntry) {\n    return uint32(this.uid, entry.uid, this.processUid)\n  }\n\n  [GID](entry: ReadEntry) {\n    return uint32(this.gid, entry.gid, this.processGid)\n  }\n\n  [FILE](entry: ReadEntry, fullyDone: () => void) {\n    const mode =\n      typeof entry.mode === 'number' ? entry.mode & 0o7777 : this.fmode\n    const stream = new fsm.WriteStream(String(entry.absolute), {\n      // slight lie, but it can be numeric flags\n      flags: getWriteFlag(entry.size) as string,\n      mode: mode,\n      autoClose: false,\n    })\n    stream.on('error', (er: Error) => {\n      if (stream.fd) {\n        fs.close(stream.fd, () => {})\n      }\n\n      // flush all the data out so that we aren't left hanging\n      // if the error wasn't actually fatal.  otherwise the parse\n      // is blocked, and we never proceed.\n      stream.write = () => true\n      this[ONERROR](er, entry)\n      fullyDone()\n    })\n\n    let actions = 1\n    const done = (er?: null | Error) => {\n      if (er) {\n        /* c8 ignore start - we should always have a fd by now */\n        if (stream.fd) {\n          fs.close(stream.fd, () => {})\n        }\n        /* c8 ignore stop */\n\n        this[ONERROR](er, entry)\n        fullyDone()\n        return\n      }\n\n      if (--actions === 0) {\n        if (stream.fd !== undefined) {\n          fs.close(stream.fd, er => {\n            if (er) {\n              this[ONERROR](er, entry)\n            } else {\n              this[UNPEND]()\n            }\n            fullyDone()\n          })\n        }\n      }\n    }\n\n    stream.on('finish', () => {\n      // if futimes fails, try utimes\n      // if utimes fails, fail with the original error\n      // same for fchown/chown\n      const abs = String(entry.absolute)\n      const fd = stream.fd\n\n      if (typeof fd === 'number' && entry.mtime && !this.noMtime) {\n        actions++\n        const atime = entry.atime || new Date()\n        const mtime = entry.mtime\n        fs.futimes(fd, atime, mtime, er =>\n          er ?\n            fs.utimes(abs, atime, mtime, er2 => done(er2 && er))\n          : done(),\n        )\n      }\n\n      if (typeof fd === 'number' && this[DOCHOWN](entry)) {\n        actions++\n        const uid = this[UID](entry)\n        const gid = this[GID](entry)\n        if (typeof uid === 'number' && typeof gid === 'number') {\n          fs.fchown(fd, uid, gid, er =>\n            er ? fs.chown(abs, uid, gid, er2 => done(er2 && er)) : done(),\n          )\n        }\n      }\n\n      done()\n    })\n\n    const tx = this.transform ? this.transform(entry) || entry : entry\n    if (tx !== entry) {\n      tx.on('error', er => {\n        this[ONERROR](er as Error, entry)\n        fullyDone()\n      })\n      entry.pipe(tx)\n    }\n    tx.pipe(stream)\n  }\n\n  [DIRECTORY](entry: ReadEntry, fullyDone: () => void) {\n    const mode =\n      typeof entry.mode === 'number' ? entry.mode & 0o7777 : this.dmode\n    this[MKDIR](String(entry.absolute), mode, er => {\n      if (er) {\n        this[ONERROR](er, entry)\n        fullyDone()\n        return\n      }\n\n      let actions = 1\n      const done = () => {\n        if (--actions === 0) {\n          fullyDone()\n          this[UNPEND]()\n          entry.resume()\n        }\n      }\n\n      if (entry.mtime && !this.noMtime) {\n        actions++\n        fs.utimes(\n          String(entry.absolute),\n          entry.atime || new Date(),\n          entry.mtime,\n          done,\n        )\n      }\n\n      if (this[DOCHOWN](entry)) {\n        actions++\n        fs.chown(\n          String(entry.absolute),\n          Number(this[UID](entry)),\n          Number(this[GID](entry)),\n          done,\n        )\n      }\n\n      done()\n    })\n  }\n\n  [UNSUPPORTED](entry: ReadEntry) {\n    entry.unsupported = true\n    this.warn(\n      'TAR_ENTRY_UNSUPPORTED',\n      `unsupported entry type: ${entry.type}`,\n      { entry },\n    )\n    entry.resume()\n  }\n\n  [SYMLINK](entry: ReadEntry, done: () => void) {\n    const parts = normalizeWindowsPath(\n      path.relative(\n        this.cwd,\n        path.resolve(\n          path.dirname(String(entry.absolute)),\n          String(entry.linkpath),\n        ),\n      ),\n    ).split('/')\n    this[ENSURE_NO_SYMLINK](\n      entry,\n      this.cwd,\n      parts,\n      () => this[LINK](entry, String(entry.linkpath), 'symlink', done),\n      er => {\n        this[ONERROR](er, entry)\n        done()\n      },\n    )\n  }\n\n  [HARDLINK](entry: ReadEntry, done: () => void) {\n    const linkpath = normalizeWindowsPath(\n      path.resolve(this.cwd, String(entry.linkpath)),\n    )\n    const parts = normalizeWindowsPath(String(entry.linkpath)).split('/')\n    this[ENSURE_NO_SYMLINK](\n      entry,\n      this.cwd,\n      parts,\n      () => this[LINK](entry, linkpath, 'link', done),\n      er => {\n        this[ONERROR](er, entry)\n        done()\n      },\n    )\n  }\n\n  [ENSURE_NO_SYMLINK](\n    entry: ReadEntry,\n    cwd: string,\n    parts: string[],\n    done: () => void,\n    onError: (er: SymlinkError) => void,\n  ) {\n    const p = parts.shift()\n    if (this.preservePaths || p === undefined) return done()\n    const t = path.resolve(cwd, p)\n    fs.lstat(t, (er, st) => {\n      if (er) return done()\n      if (st?.isSymbolicLink()) {\n        return onError(\n          new SymlinkError(t, path.resolve(t, parts.join('/'))),\n        )\n      }\n      this[ENSURE_NO_SYMLINK](entry, t, parts, done, onError)\n    })\n  }\n\n  [PEND]() {\n    this[PENDING]++\n  }\n\n  [UNPEND]() {\n    this[PENDING]--\n    this[MAYBECLOSE]()\n  }\n\n  [SKIP](entry: ReadEntry) {\n    this[UNPEND]()\n    entry.resume()\n  }\n\n  // Check if we can reuse an existing filesystem entry safely and\n  // overwrite it, rather than unlinking and recreating\n  // Windows doesn't report a useful nlink, so we just never reuse entries\n  [ISREUSABLE](entry: ReadEntry, st: Stats) {\n    return (\n      entry.type === 'File' &&\n      !this.unlink &&\n      st.isFile() &&\n      st.nlink <= 1 &&\n      !isWindows\n    )\n  }\n\n  // check if a thing is there, and if so, try to clobber it\n  [CHECKFS](entry: ReadEntry) {\n    this[PEND]()\n    const paths = [entry.path]\n    if (entry.linkpath) {\n      paths.push(entry.linkpath)\n    }\n    this.reservations.reserve(paths, done => this[CHECKFS2](entry, done))\n  }\n\n  [CHECKFS2](entry: ReadEntry, fullyDone: (er?: Error) => void) {\n    const done = (er?: Error) => {\n      fullyDone(er)\n    }\n\n    const checkCwd = () => {\n      this[MKDIR](this.cwd, this.dmode, er => {\n        if (er) {\n          this[ONERROR](er, entry)\n          done()\n          return\n        }\n        this[CHECKED_CWD] = true\n        start()\n      })\n    }\n\n    const start = () => {\n      if (entry.absolute !== this.cwd) {\n        const parent = normalizeWindowsPath(\n          path.dirname(String(entry.absolute)),\n        )\n        if (parent !== this.cwd) {\n          return this[MKDIR](parent, this.dmode, er => {\n            if (er) {\n              this[ONERROR](er, entry)\n              done()\n              return\n            }\n            afterMakeParent()\n          })\n        }\n      }\n      afterMakeParent()\n    }\n\n    const afterMakeParent = () => {\n      fs.lstat(String(entry.absolute), (lstatEr, st) => {\n        if (\n          st &&\n          (this.keep ||\n            /* c8 ignore next */\n            (this.newer && st.mtime > (entry.mtime ?? st.mtime)))\n        ) {\n          this[SKIP](entry)\n          done()\n          return\n        }\n        if (lstatEr || this[ISREUSABLE](entry, st)) {\n          return this[MAKEFS](null, entry, done)\n        }\n\n        if (st.isDirectory()) {\n          if (entry.type === 'Directory') {\n            const needChmod =\n              this.chmod && entry.mode && (st.mode & 0o7777) !== entry.mode\n            const afterChmod = (er?: Error | null | undefined) =>\n              this[MAKEFS](er ?? null, entry, done)\n            if (!needChmod) {\n              return afterChmod()\n            }\n            return fs.chmod(\n              String(entry.absolute),\n              Number(entry.mode),\n              afterChmod,\n            )\n          }\n          // Not a dir entry, have to remove it.\n          // NB: the only way to end up with an entry that is the cwd\n          // itself, in such a way that == does not detect, is a\n          // tricky windows absolute path with UNC or 8.3 parts (and\n          // preservePaths:true, or else it will have been stripped).\n          // In that case, the user has opted out of path protections\n          // explicitly, so if they blow away the cwd, c'est la vie.\n          if (entry.absolute !== this.cwd) {\n            return fs.rmdir(String(entry.absolute), (er?: null | Error) =>\n              this[MAKEFS](er ?? null, entry, done),\n            )\n          }\n        }\n\n        // not a dir, and not reusable\n        // don't remove if the cwd, we want that error\n        if (entry.absolute === this.cwd) {\n          return this[MAKEFS](null, entry, done)\n        }\n\n        unlinkFile(String(entry.absolute), er =>\n          this[MAKEFS](er ?? null, entry, done),\n        )\n      })\n    }\n\n    if (this[CHECKED_CWD]) {\n      start()\n    } else {\n      checkCwd()\n    }\n  }\n\n  [MAKEFS](\n    er: null | undefined | Error,\n    entry: ReadEntry,\n    done: () => void,\n  ) {\n    if (er) {\n      this[ONERROR](er, entry)\n      done()\n      return\n    }\n\n    switch (entry.type) {\n      case 'File':\n      case 'OldFile':\n      case 'ContiguousFile':\n        return this[FILE](entry, done)\n\n      case 'Link':\n        return this[HARDLINK](entry, done)\n\n      case 'SymbolicLink':\n        return this[SYMLINK](entry, done)\n\n      case 'Directory':\n      case 'GNUDumpDir':\n        return this[DIRECTORY](entry, done)\n    }\n  }\n\n  [LINK](\n    entry: ReadEntry,\n    linkpath: string,\n    link: 'link' | 'symlink',\n    done: () => void,\n  ) {\n    fs[link](linkpath, String(entry.absolute), er => {\n      if (er) {\n        this[ONERROR](er, entry)\n      } else {\n        this[UNPEND]()\n        entry.resume()\n      }\n      done()\n    })\n  }\n}\n\nconst callSync = <T>(\n  fn: () => T,\n): [null, T] | [NodeJS.ErrnoException, null] => {\n  try {\n    return [null, fn()]\n  } catch (er) {\n    return [er as NodeJS.ErrnoException, null]\n  }\n}\n\nexport class UnpackSync extends Unpack {\n  sync: true = true;\n\n  [MAKEFS](er: null | Error | undefined, entry: ReadEntry) {\n    return super[MAKEFS](er, entry, () => {})\n  }\n\n  [CHECKFS](entry: ReadEntry) {\n    if (!this[CHECKED_CWD]) {\n      const er = this[MKDIR](this.cwd, this.dmode)\n      if (er) {\n        return this[ONERROR](er as Error, entry)\n      }\n      this[CHECKED_CWD] = true\n    }\n\n    // don't bother to make the parent if the current entry is the cwd,\n    // we've already checked it.\n    if (entry.absolute !== this.cwd) {\n      const parent = normalizeWindowsPath(\n        path.dirname(String(entry.absolute)),\n      )\n      if (parent !== this.cwd) {\n        const mkParent = this[MKDIR](parent, this.dmode)\n        if (mkParent) {\n          return this[ONERROR](mkParent as Error, entry)\n        }\n      }\n    }\n\n    const [lstatEr, st] = callSync(() =>\n      fs.lstatSync(String(entry.absolute)),\n    )\n    if (\n      st &&\n      (this.keep ||\n        /* c8 ignore next */\n        (this.newer && st.mtime > (entry.mtime ?? st.mtime)))\n    ) {\n      return this[SKIP](entry)\n    }\n\n    if (lstatEr || this[ISREUSABLE](entry, st)) {\n      return this[MAKEFS](null, entry)\n    }\n\n    if (st.isDirectory()) {\n      if (entry.type === 'Directory') {\n        const needChmod =\n          this.chmod && entry.mode && (st.mode & 0o7777) !== entry.mode\n        const [er] =\n          needChmod ?\n            callSync(() => {\n              fs.chmodSync(String(entry.absolute), Number(entry.mode))\n            })\n          : []\n        return this[MAKEFS](er, entry)\n      }\n      // not a dir entry, have to remove it\n      const [er] = callSync(() => fs.rmdirSync(String(entry.absolute)))\n      this[MAKEFS](er, entry)\n    }\n\n    // not a dir, and not reusable.\n    // don't remove if it's the cwd, since we want that error.\n    const [er] =\n      entry.absolute === this.cwd ?\n        []\n      : callSync(() => unlinkFileSync(String(entry.absolute)))\n    this[MAKEFS](er, entry)\n  }\n\n  [FILE](entry: ReadEntry, done: () => void) {\n    const mode =\n      typeof entry.mode === 'number' ? entry.mode & 0o7777 : this.fmode\n\n    const oner = (er?: null | Error | undefined) => {\n      let closeError\n      try {\n        fs.closeSync(fd)\n      } catch (e) {\n        closeError = e\n      }\n      if (er || closeError) {\n        this[ONERROR]((er as Error) || closeError, entry)\n      }\n      done()\n    }\n\n    let fd: number\n    try {\n      fd = fs.openSync(\n        String(entry.absolute),\n        getWriteFlag(entry.size),\n        mode,\n      )\n      /* c8 ignore start - This is only a problem if the file was successfully\n       * statted, BUT failed to open. Testing this is annoying, and we\n       * already have ample testint for other uses of oner() methods.\n       */\n    } catch (er) {\n      return oner(er as Error)\n    }\n    /* c8 ignore stop */\n    const tx = this.transform ? this.transform(entry) || entry : entry\n    if (tx !== entry) {\n      tx.on('error', er => this[ONERROR](er as Error, entry))\n      entry.pipe(tx)\n    }\n\n    tx.on('data', (chunk: Buffer) => {\n      try {\n        fs.writeSync(fd, chunk, 0, chunk.length)\n      } catch (er) {\n        oner(er as Error)\n      }\n    })\n\n    tx.on('end', () => {\n      let er = null\n      // try both, falling futimes back to utimes\n      // if either fails, handle the first error\n      if (entry.mtime && !this.noMtime) {\n        const atime = entry.atime || new Date()\n        const mtime = entry.mtime\n        try {\n          fs.futimesSync(fd, atime, mtime)\n        } catch (futimeser) {\n          try {\n            fs.utimesSync(String(entry.absolute), atime, mtime)\n          } catch {\n            er = futimeser\n          }\n        }\n      }\n\n      if (this[DOCHOWN](entry)) {\n        const uid = this[UID](entry)\n        const gid = this[GID](entry)\n\n        try {\n          fs.fchownSync(fd, Number(uid), Number(gid))\n        } catch (fchowner) {\n          try {\n            fs.chownSync(String(entry.absolute), Number(uid), Number(gid))\n          } catch {\n            er = er || fchowner\n          }\n        }\n      }\n\n      oner(er as Error)\n    })\n  }\n\n  [DIRECTORY](entry: ReadEntry, done: () => void) {\n    const mode =\n      typeof entry.mode === 'number' ? entry.mode & 0o7777 : this.dmode\n    const er = this[MKDIR](String(entry.absolute), mode)\n    if (er) {\n      this[ONERROR](er as Error, entry)\n      done()\n      return\n    }\n    if (entry.mtime && !this.noMtime) {\n      try {\n        fs.utimesSync(\n          String(entry.absolute),\n          entry.atime || new Date(),\n          entry.mtime,\n        )\n        /* c8 ignore next */\n      } catch {}\n    }\n    if (this[DOCHOWN](entry)) {\n      try {\n        fs.chownSync(\n          String(entry.absolute),\n          Number(this[UID](entry)),\n          Number(this[GID](entry)),\n        )\n      } catch {}\n    }\n    done()\n    entry.resume()\n  }\n\n  [MKDIR](dir: string, mode: number) {\n    try {\n      return mkdirSync(normalizeWindowsPath(dir), {\n        uid: this.uid,\n        gid: this.gid,\n        processUid: this.processUid,\n        processGid: this.processGid,\n        umask: this.processUmask,\n        preserve: this.preservePaths,\n        unlink: this.unlink,\n        cwd: this.cwd,\n        mode: mode,\n      })\n    } catch (er) {\n      return er\n    }\n  }\n\n  [ENSURE_NO_SYMLINK](\n    _entry: ReadEntry,\n    cwd: string,\n    parts: string[],\n    done: () => void,\n    onError: (er: SymlinkError) => void,\n  ) {\n    if (this.preservePaths || parts.length === 0) return done()\n    let t = cwd\n    for (const p of parts) {\n      t = path.resolve(t, p)\n      const [er, st] = callSync(() => fs.lstatSync(t))\n      if (er) return done()\n      if (st.isSymbolicLink()) {\n        return onError(\n          new SymlinkError(t, path.resolve(cwd, parts.join('/'))),\n        )\n      }\n    }\n    done()\n  }\n\n  [LINK](\n    entry: ReadEntry,\n    linkpath: string,\n    link: 'link' | 'symlink',\n    done: () => void,\n  ) {\n    const linkSync: `${typeof link}Sync` = `${link}Sync`\n    try {\n      fs[linkSync](linkpath, String(entry.absolute))\n      done()\n      entry.resume()\n    } catch (er) {\n      return this[ONERROR](er as Error, entry)\n    }\n  }\n}\n","// Get the appropriate flag to use for creating files\n// We use fmap on Windows platforms for files less than\n// 512kb.  This is a fairly low limit, but avoids making\n// things slower in some cases.  Since most of what this\n// library is used for is extracting tarballs of many\n// relatively small files in npm packages and the like,\n// it can be a big boost on Windows platforms.\n\nimport fs from 'fs'\n\nconst platform = process.env.__FAKE_PLATFORM__ || process.platform\nconst isWindows = platform === 'win32'\n\n/* c8 ignore start */\nconst { O_CREAT, O_NOFOLLOW, O_TRUNC, O_WRONLY } = fs.constants\nconst UV_FS_O_FILEMAP =\n  Number(process.env.__FAKE_FS_O_FILENAME__) ||\n  fs.constants.UV_FS_O_FILEMAP ||\n  0\n/* c8 ignore stop */\n\nconst fMapEnabled = isWindows && !!UV_FS_O_FILEMAP\nconst fMapLimit = 512 * 1024\nconst fMapFlag = UV_FS_O_FILEMAP | O_TRUNC | O_CREAT | O_WRONLY\nconst noFollowFlag =\n  !isWindows && typeof O_NOFOLLOW === 'number' ?\n    O_NOFOLLOW | O_TRUNC | O_CREAT | O_WRONLY\n  : null\nexport const getWriteFlag =\n  noFollowFlag !== null ? () => noFollowFlag\n  : !fMapEnabled ? () => 'w'\n  : (size: number) => (size < fMapLimit ? fMapFlag : 'w')\n","import fs, { type Dirent } from 'node:fs'\nimport path from 'node:path'\n\nconst lchownSync = (path: string, uid: number, gid: number) => {\n  try {\n    return fs.lchownSync(path, uid, gid)\n  } catch (er) {\n    if ((er as NodeJS.ErrnoException)?.code !== 'ENOENT') throw er\n  }\n}\n\nconst chown = (\n  cpath: string,\n  uid: number,\n  gid: number,\n  cb: (er?: unknown) => any,\n) => {\n  fs.lchown(cpath, uid, gid, er => {\n    // Skip ENOENT error\n    cb(er && (er as NodeJS.ErrnoException)?.code !== 'ENOENT' ? er : null)\n  })\n}\n\nconst chownrKid = (\n  p: string,\n  child: Dirent,\n  uid: number,\n  gid: number,\n  cb: (er?: unknown) => any,\n) => {\n  if (child.isDirectory()) {\n    chownr(path.resolve(p, child.name), uid, gid, (er: unknown) => {\n      if (er) return cb(er)\n      const cpath = path.resolve(p, child.name)\n      chown(cpath, uid, gid, cb)\n    })\n  } else {\n    const cpath = path.resolve(p, child.name)\n    chown(cpath, uid, gid, cb)\n  }\n}\n\nexport const chownr = (\n  p: string,\n  uid: number,\n  gid: number,\n  cb: (er?: unknown) => any,\n) => {\n  fs.readdir(p, { withFileTypes: true }, (er, children) => {\n    // any error other than ENOTDIR or ENOTSUP means it's not readable,\n    // or doesn't exist.  give up.\n    if (er) {\n      if (er.code === 'ENOENT') return cb()\n      else if (er.code !== 'ENOTDIR' && er.code !== 'ENOTSUP')\n        return cb(er)\n    }\n    if (er || !children.length) return chown(p, uid, gid, cb)\n\n    let len = children.length\n    let errState: null | NodeJS.ErrnoException = null\n    const then = (er?: unknown) => {\n      /* c8 ignore start */\n      if (errState) return\n      /* c8 ignore stop */\n      if (er) return cb((errState = er as NodeJS.ErrnoException))\n      if (--len === 0) return chown(p, uid, gid, cb)\n    }\n\n    for (const child of children) {\n      chownrKid(p, child, uid, gid, then)\n    }\n  })\n}\n\nconst chownrKidSync = (\n  p: string,\n  child: Dirent,\n  uid: number,\n  gid: number,\n) => {\n  if (child.isDirectory())\n    chownrSync(path.resolve(p, child.name), uid, gid)\n\n  lchownSync(path.resolve(p, child.name), uid, gid)\n}\n\nexport const chownrSync = (p: string, uid: number, gid: number) => {\n  let children: Dirent[]\n  try {\n    children = fs.readdirSync(p, { withFileTypes: true })\n  } catch (er) {\n    const e = er as NodeJS.ErrnoException\n    if (e?.code === 'ENOENT') return\n    else if (e?.code === 'ENOTDIR' || e?.code === 'ENOTSUP')\n      return lchownSync(p, uid, gid)\n    else throw e\n  }\n\n  for (const child of children) {\n    chownrKidSync(p, child, uid, gid)\n  }\n\n  return lchownSync(p, uid, gid)\n}\n","import { chownr, chownrSync } from 'chownr'\nimport fs from 'node:fs'\nimport fsp from 'node:fs/promises'\nimport path from 'node:path'\nimport { CwdError } from './cwd-error.js'\nimport { normalizeWindowsPath } from './normalize-windows-path.js'\nimport { SymlinkError } from './symlink-error.js'\n\nexport type MkdirOptions = {\n  uid?: number\n  gid?: number\n  processUid?: number\n  processGid?: number\n  umask?: number\n  preserve: boolean\n  unlink: boolean\n  cwd: string\n  mode: number\n}\n\nexport type MkdirError = NodeJS.ErrnoException | CwdError | SymlinkError\n\nconst checkCwd = (\n  dir: string,\n  cb: (er?: null | MkdirError) => unknown,\n) => {\n  fs.stat(dir, (er, st) => {\n    if (er || !st.isDirectory()) {\n      er = new CwdError(\n        dir,\n        (er as NodeJS.ErrnoException)?.code || 'ENOTDIR',\n      )\n    }\n    cb(er)\n  })\n}\n\n/**\n * Wrapper around fs/promises.mkdir for tar's needs.\n *\n * The main purpose is to avoid creating directories if we know that\n * they already exist (and track which ones exist for this purpose),\n * and prevent entries from being extracted into symlinked folders,\n * if `preservePaths` is not set.\n */\nexport const mkdir = (\n  dir: string,\n  opt: MkdirOptions,\n  cb: (er?: null | MkdirError, made?: string) => void,\n) => {\n  dir = normalizeWindowsPath(dir)\n\n  // if there's any overlap between mask and mode,\n  // then we'll need an explicit chmod\n  /* c8 ignore next */\n  const umask = opt.umask ?? 0o22\n  const mode = opt.mode | 0o0700\n  const needChmod = (mode & umask) !== 0\n\n  const uid = opt.uid\n  const gid = opt.gid\n  const doChown =\n    typeof uid === 'number' &&\n    typeof gid === 'number' &&\n    (uid !== opt.processUid || gid !== opt.processGid)\n\n  const preserve = opt.preserve\n  const unlink = opt.unlink\n  const cwd = normalizeWindowsPath(opt.cwd)\n\n  const done = (er?: null | MkdirError, created?: string) => {\n    if (er) {\n      cb(er)\n    } else {\n      if (created && doChown) {\n        chownr(created, uid, gid, er => done(er as NodeJS.ErrnoException))\n      } else if (needChmod) {\n        fs.chmod(dir, mode, cb)\n      } else {\n        cb()\n      }\n    }\n  }\n\n  if (dir === cwd) {\n    return checkCwd(dir, done)\n  }\n\n  if (preserve) {\n    return fsp.mkdir(dir, { mode, recursive: true }).then(\n      made => done(null, made ?? undefined), // oh, ts\n      done,\n    )\n  }\n\n  const sub = normalizeWindowsPath(path.relative(cwd, dir))\n  const parts = sub.split('/')\n  mkdir_(cwd, parts, mode, unlink, cwd, undefined, done)\n}\n\nconst mkdir_ = (\n  base: string,\n  parts: string[],\n  mode: number,\n  unlink: boolean,\n  cwd: string,\n  created: string | undefined,\n  cb: (er?: null | MkdirError, made?: string) => void,\n): void => {\n  if (parts.length === 0) {\n    return cb(null, created)\n  }\n  const p = parts.shift()\n  const part = normalizeWindowsPath(path.resolve(base + '/' + p))\n  fs.mkdir(\n    part,\n    mode,\n    onmkdir(part, parts, mode, unlink, cwd, created, cb),\n  )\n}\n\nconst onmkdir =\n  (\n    part: string,\n    parts: string[],\n    mode: number,\n    unlink: boolean,\n    cwd: string,\n    created: string | undefined,\n    cb: (er?: null | MkdirError, made?: string) => void,\n  ) =>\n  (er?: null | NodeJS.ErrnoException) => {\n    if (er) {\n      fs.lstat(part, (statEr, st) => {\n        if (statEr) {\n          statEr.path = statEr.path && normalizeWindowsPath(statEr.path)\n          cb(statEr)\n        } else if (st.isDirectory()) {\n          mkdir_(part, parts, mode, unlink, cwd, created, cb)\n        } else if (unlink) {\n          fs.unlink(part, er => {\n            if (er) {\n              return cb(er)\n            }\n            fs.mkdir(\n              part,\n              mode,\n              onmkdir(part, parts, mode, unlink, cwd, created, cb),\n            )\n          })\n        } else if (st.isSymbolicLink()) {\n          return cb(new SymlinkError(part, part + '/' + parts.join('/')))\n        } else {\n          cb(er)\n        }\n      })\n    } else {\n      created = created || part\n      mkdir_(part, parts, mode, unlink, cwd, created, cb)\n    }\n  }\n\nconst checkCwdSync = (dir: string) => {\n  let ok = false\n  let code\n  try {\n    ok = fs.statSync(dir).isDirectory()\n  } catch (er) {\n    code = (er as NodeJS.ErrnoException)?.code\n  } finally {\n    if (!ok) {\n      throw new CwdError(dir, code ?? 'ENOTDIR')\n    }\n  }\n}\n\nexport const mkdirSync = (dir: string, opt: MkdirOptions) => {\n  dir = normalizeWindowsPath(dir)\n  // if there's any overlap between mask and mode,\n  // then we'll need an explicit chmod\n  /* c8 ignore next */\n  const umask = opt.umask ?? 0o22\n  const mode = opt.mode | 0o700\n  const needChmod = (mode & umask) !== 0\n\n  const uid = opt.uid\n  const gid = opt.gid\n  const doChown =\n    typeof uid === 'number' &&\n    typeof gid === 'number' &&\n    (uid !== opt.processUid || gid !== opt.processGid)\n\n  const preserve = opt.preserve\n  const unlink = opt.unlink\n  const cwd = normalizeWindowsPath(opt.cwd)\n\n  const done = (created?: string | undefined) => {\n    if (created && doChown) {\n      chownrSync(created, uid, gid)\n    }\n    if (needChmod) {\n      fs.chmodSync(dir, mode)\n    }\n  }\n\n  if (dir === cwd) {\n    checkCwdSync(cwd)\n    return done()\n  }\n\n  if (preserve) {\n    return done(fs.mkdirSync(dir, { mode, recursive: true }) ?? undefined)\n  }\n\n  const sub = normalizeWindowsPath(path.relative(cwd, dir))\n  const parts = sub.split('/')\n  let created\n  for (\n    let p = parts.shift(), part = cwd;\n    p && (part += '/' + p);\n    p = parts.shift()\n  ) {\n    part = normalizeWindowsPath(path.resolve(part))\n\n    try {\n      fs.mkdirSync(part, mode)\n      created = created || part\n    } catch {\n      const st = fs.lstatSync(part)\n      if (st.isDirectory()) {\n        continue\n      } else if (unlink) {\n        fs.unlinkSync(part)\n        fs.mkdirSync(part, mode)\n        created = created || part\n        continue\n      } else if (st.isSymbolicLink()) {\n        return new SymlinkError(part, part + '/' + parts.join('/'))\n      }\n    }\n  }\n\n  return done(created)\n}\n","export class CwdError extends Error {\n  path: string\n  code: string\n  syscall = 'chdir' as const\n\n  constructor(path: string, code: string) {\n    super(`${code}: Cannot cd into '${path}'`)\n    this.path = path\n    this.code = code\n  }\n\n  get name() {\n    return 'CwdError'\n  }\n}\n","export class SymlinkError extends Error {\n  path: string\n  symlink: string\n  syscall = 'symlink' as const\n  code = 'TAR_SYMLINK_ERROR' as const\n  constructor(symlink: string, path: string) {\n    super('TAR_SYMLINK_ERROR: Cannot extract through symbolic link')\n    this.symlink = symlink\n    this.path = path\n  }\n  get name() {\n    return 'SymlinkError'\n  }\n}\n","// A path exclusive reservation system\n// reserve([list, of, paths], fn)\n// When the fn is first in line for all its paths, it\n// is called with a cb that clears the reservation.\n//\n// Used by async unpack to avoid clobbering paths in use,\n// while still allowing maximal safe parallelization.\n\nimport { join } from 'node:path'\nimport { normalizeUnicode } from './normalize-unicode.js'\nimport { stripTrailingSlashes } from './strip-trailing-slashes.js'\n\nconst platform = process.env.TESTING_TAR_FAKE_PLATFORM || process.platform\nconst isWindows = platform === 'win32'\n\nexport type Reservation = {\n  paths: string[]\n  dirs: Set<string>\n}\n\nexport type Handler = (clear: () => void) => void\n\n// return a set of parent dirs for a given path\n// '/a/b/c/d' -> ['/', '/a', '/a/b', '/a/b/c', '/a/b/c/d']\nconst getDirs = (path: string) => {\n  const dirs = path\n    .split('/')\n    .slice(0, -1)\n    .reduce((set: string[], path) => {\n      const s = set.at(-1)\n      if (s !== undefined) {\n        path = join(s, path)\n      }\n      set.push(path || '/')\n      return set\n    }, [])\n  return dirs\n}\n\nexport class PathReservations {\n  // path => [function or Set]\n  // A Set object means a directory reservation\n  // A fn is a direct reservation on that path\n  #queues = new Map<string, (Handler | Set<Handler>)[]>()\n\n  // fn => {paths:[path,...], dirs:[path, ...]}\n  #reservations = new Map<Handler, Reservation>()\n\n  // functions currently running\n  #running = new Set<Handler>()\n\n  reserve(paths: string[], fn: Handler) {\n    paths =\n      isWindows ?\n        ['win32 parallelization disabled']\n      : paths.map(p => {\n          // don't need normPath, because we skip this entirely for windows\n          return stripTrailingSlashes(join(normalizeUnicode(p)))\n        })\n\n    const dirs = new Set<string>(\n      paths.map(path => getDirs(path)).reduce((a, b) => a.concat(b)),\n    )\n    this.#reservations.set(fn, { dirs, paths })\n    for (const p of paths) {\n      const q = this.#queues.get(p)\n      if (!q) {\n        this.#queues.set(p, [fn])\n      } else {\n        q.push(fn)\n      }\n    }\n    for (const dir of dirs) {\n      const q = this.#queues.get(dir)\n      if (!q) {\n        this.#queues.set(dir, [new Set([fn])])\n      } else {\n        const l = q.at(-1)\n        if (l instanceof Set) {\n          l.add(fn)\n        } else {\n          q.push(new Set([fn]))\n        }\n      }\n    }\n    return this.#run(fn)\n  }\n\n  // return the queues for each path the function cares about\n  // fn => {paths, dirs}\n  #getQueues(fn: Handler): {\n    paths: Handler[][]\n    dirs: (Handler | Set<Handler>)[][]\n  } {\n    const res = this.#reservations.get(fn)\n    /* c8 ignore start */\n    if (!res) {\n      throw new Error('function does not have any path reservations')\n    }\n    /* c8 ignore stop */\n    return {\n      paths: res.paths.map((path: string) =>\n        this.#queues.get(path),\n      ) as Handler[][],\n      dirs: [...res.dirs].map(path => this.#queues.get(path)) as (\n        | Handler\n        | Set<Handler>\n      )[][],\n    }\n  }\n\n  // check if fn is first in line for all its paths, and is\n  // included in the first set for all its dir queues\n  check(fn: Handler) {\n    const { paths, dirs } = this.#getQueues(fn)\n    return (\n      paths.every(q => q && q[0] === fn) &&\n      dirs.every(q => q && q[0] instanceof Set && q[0].has(fn))\n    )\n  }\n\n  // run the function if it's first in line and not already running\n  #run(fn: Handler) {\n    if (this.#running.has(fn) || !this.check(fn)) {\n      return false\n    }\n    this.#running.add(fn)\n    fn(() => this.#clear(fn))\n    return true\n  }\n\n  #clear(fn: Handler) {\n    if (!this.#running.has(fn)) {\n      return false\n    }\n    const res = this.#reservations.get(fn)\n    /* c8 ignore start */\n    if (!res) {\n      throw new Error('invalid reservation')\n    }\n    /* c8 ignore stop */\n    const { paths, dirs } = res\n\n    const next = new Set<Handler>()\n    for (const path of paths) {\n      const q = this.#queues.get(path)\n      /* c8 ignore start */\n      if (!q || q?.[0] !== fn) {\n        continue\n      }\n      /* c8 ignore stop */\n      const q0 = q[1]\n      if (!q0) {\n        this.#queues.delete(path)\n        continue\n      }\n      q.shift()\n      if (typeof q0 === 'function') {\n        next.add(q0)\n      } else {\n        for (const f of q0) {\n          next.add(f)\n        }\n      }\n    }\n\n    for (const dir of dirs) {\n      const q = this.#queues.get(dir)\n      const q0 = q?.[0]\n      /* c8 ignore next - type safety only */\n      if (!q || !(q0 instanceof Set)) continue\n      if (q0.size === 1 && q.length === 1) {\n        this.#queues.delete(dir)\n        continue\n      } else if (q0.size === 1) {\n        q.shift()\n        // next one must be a function,\n        // or else the Set would've been reused\n        const n = q[0]\n        if (typeof n === 'function') {\n          next.add(n)\n        }\n      } else {\n        q0.delete(fn)\n      }\n    }\n\n    this.#running.delete(fn)\n    next.forEach(fn => this.#run(fn))\n    return true\n  }\n}\n","// warning: extremely hot code path.\n// This has been meticulously optimized for use\n// within npm install on large package trees.\n// Do not edit without careful benchmarking.\nconst normalizeCache: Record<string, string> = Object.create(null)\n\n// Limit the size of this. Very low-sophistication LRU cache\nconst MAX = 10000\nconst cache = new Set<string>()\nexport const normalizeUnicode = (s: string): string => {\n  if (!cache.has(s)) {\n    // shake out identical accents and ligatures\n    normalizeCache[s] = s\n      .normalize('NFD')\n      .toLocaleLowerCase('en')\n      .toLocaleUpperCase('en')\n  } else {\n    cache.delete(s)\n  }\n  cache.add(s)\n\n  const ret = normalizeCache[s] as string\n\n  let i = cache.size - MAX\n  // only prune when we're 10% over the max\n  if (i > MAX / 10) {\n    for (const s of cache) {\n      cache.delete(s)\n      delete normalizeCache[s]\n      if (--i <= 0) break\n    }\n  }\n\n  return ret\n}\n","// separate file so I stop getting nagged in vim about deprecated API.\nexport const umask = () => process.umask()\n","// tar -r\nimport { WriteStream, WriteStreamSync } from '@isaacs/fs-minipass'\nimport type { Minipass } from 'minipass'\nimport fs from 'node:fs'\nimport path from 'node:path'\nimport { Header } from './header.js'\nimport { list } from './list.js'\nimport { makeCommand } from './make-command.js'\nimport type { TarOptionsFile, TarOptionsSyncFile } from './options.js'\nimport { isFile } from './options.js'\nimport { Pack, PackSync } from './pack.js'\n\n// starting at the head of the file, read a Header\n// If the checksum is invalid, that's our position to start writing\n// If it is, jump forward by the specified size (round up to 512)\n// and try again.\n// Write the new Pack stream starting there.\n\nconst replaceSync = (opt: TarOptionsSyncFile, files: string[]) => {\n  const p = new PackSync(opt)\n\n  let threw = true\n  let fd\n  let position\n\n  try {\n    try {\n      fd = fs.openSync(opt.file, 'r+')\n    } catch (er) {\n      if ((er as NodeJS.ErrnoException)?.code === 'ENOENT') {\n        fd = fs.openSync(opt.file, 'w+')\n      } else {\n        throw er\n      }\n    }\n\n    const st = fs.fstatSync(fd)\n    const headBuf = Buffer.alloc(512)\n\n    POSITION: for (position = 0; position < st.size; position += 512) {\n      for (let bufPos = 0, bytes = 0; bufPos < 512; bufPos += bytes) {\n        bytes = fs.readSync(\n          fd,\n          headBuf,\n          bufPos,\n          headBuf.length - bufPos,\n          position + bufPos,\n        )\n\n        if (position === 0 && headBuf[0] === 0x1f && headBuf[1] === 0x8b) {\n          throw new Error('cannot append to compressed archives')\n        }\n\n        if (!bytes) {\n          break POSITION\n        }\n      }\n\n      const h = new Header(headBuf)\n      if (!h.cksumValid) {\n        break\n      }\n      const entryBlockSize = 512 * Math.ceil((h.size || 0) / 512)\n      if (position + entryBlockSize + 512 > st.size) {\n        break\n      }\n      // the 512 for the header we just parsed will be added as well\n      // also jump ahead all the blocks for the body\n      position += entryBlockSize\n      if (opt.mtimeCache && h.mtime) {\n        opt.mtimeCache.set(String(h.path), h.mtime)\n      }\n    }\n    threw = false\n\n    streamSync(opt, p, position, fd, files)\n  } finally {\n    if (threw) {\n      try {\n        fs.closeSync(fd as number)\n      } catch {}\n    }\n  }\n}\n\nconst streamSync = (\n  opt: TarOptionsSyncFile,\n  p: Pack,\n  position: number,\n  fd: number,\n  files: string[],\n) => {\n  const stream = new WriteStreamSync(opt.file, {\n    fd: fd,\n    start: position,\n  })\n  p.pipe(stream as unknown as Minipass.Writable)\n  addFilesSync(p, files)\n}\n\nconst replaceAsync = (\n  opt: TarOptionsFile,\n  files: string[],\n): Promise<void> => {\n  files = Array.from(files)\n  const p = new Pack(opt)\n\n  const getPos = (\n    fd: number,\n    size: number,\n    cb_: (er?: null | Error, pos?: number) => void,\n  ) => {\n    const cb = (er?: Error | null, pos?: number) => {\n      if (er) {\n        fs.close(fd, _ => cb_(er))\n      } else {\n        cb_(null, pos)\n      }\n    }\n\n    let position = 0\n    if (size === 0) {\n      return cb(null, 0)\n    }\n\n    let bufPos = 0\n    const headBuf = Buffer.alloc(512)\n    const onread = (er?: null | Error, bytes?: number): void => {\n      if (er || bytes === undefined) {\n        return cb(er)\n      }\n      bufPos += bytes\n      if (bufPos < 512 && bytes) {\n        return fs.read(\n          fd,\n          headBuf,\n          bufPos,\n          headBuf.length - bufPos,\n          position + bufPos,\n          onread,\n        )\n      }\n\n      if (position === 0 && headBuf[0] === 0x1f && headBuf[1] === 0x8b) {\n        return cb(new Error('cannot append to compressed archives'))\n      }\n\n      // truncated header\n      if (bufPos < 512) {\n        return cb(null, position)\n      }\n\n      const h = new Header(headBuf)\n      if (!h.cksumValid) {\n        return cb(null, position)\n      }\n\n      /* c8 ignore next */\n      const entryBlockSize = 512 * Math.ceil((h.size ?? 0) / 512)\n      if (position + entryBlockSize + 512 > size) {\n        return cb(null, position)\n      }\n\n      position += entryBlockSize + 512\n      if (position >= size) {\n        return cb(null, position)\n      }\n\n      if (opt.mtimeCache && h.mtime) {\n        opt.mtimeCache.set(String(h.path), h.mtime)\n      }\n      bufPos = 0\n      fs.read(fd, headBuf, 0, 512, position, onread)\n    }\n    fs.read(fd, headBuf, 0, 512, position, onread)\n  }\n\n  const promise = new Promise<void>((resolve, reject) => {\n    p.on('error', reject)\n    let flag = 'r+'\n    const onopen = (er?: NodeJS.ErrnoException | null, fd?: number) => {\n      if (er && er.code === 'ENOENT' && flag === 'r+') {\n        flag = 'w+'\n        return fs.open(opt.file, flag, onopen)\n      }\n\n      if (er || !fd) {\n        return reject(er)\n      }\n\n      fs.fstat(fd, (er, st) => {\n        if (er) {\n          return fs.close(fd, () => reject(er))\n        }\n\n        getPos(fd, st.size, (er, position) => {\n          if (er) {\n            return reject(er)\n          }\n          const stream = new WriteStream(opt.file, {\n            fd: fd,\n            start: position,\n          })\n          p.pipe(stream as unknown as Minipass.Writable)\n          stream.on('error', reject)\n          stream.on('close', resolve)\n          addFilesAsync(p, files)\n        })\n      })\n    }\n    fs.open(opt.file, flag, onopen)\n  })\n\n  return promise\n}\n\nconst addFilesSync = (p: Pack, files: string[]) => {\n  files.forEach(file => {\n    if (file.charAt(0) === '@') {\n      list({\n        file: path.resolve(p.cwd, file.slice(1)),\n        sync: true,\n        noResume: true,\n        onReadEntry: entry => p.add(entry),\n      })\n    } else {\n      p.add(file)\n    }\n  })\n  p.end()\n}\n\nconst addFilesAsync = async (p: Pack, files: string[]): Promise<void> => {\n  for (const file of files) {\n    if (file.charAt(0) === '@') {\n      await list({\n        file: path.resolve(String(p.cwd), file.slice(1)),\n        noResume: true,\n        onReadEntry: entry => p.add(entry),\n      })\n    } else {\n      p.add(file)\n    }\n  }\n  p.end()\n}\n\nexport const replace = makeCommand(\n  replaceSync,\n  replaceAsync,\n  /* c8 ignore start */\n  (): never => {\n    throw new TypeError('file is required')\n  },\n  (): never => {\n    throw new TypeError('file is required')\n  },\n  /* c8 ignore stop */\n  (opt, entries) => {\n    if (!isFile(opt)) {\n      throw new TypeError('file is required')\n    }\n\n    if (\n      opt.gzip ||\n      opt.brotli ||\n      opt.zstd ||\n      opt.file.endsWith('.br') ||\n      opt.file.endsWith('.tbr')\n    ) {\n      throw new TypeError('cannot append to compressed archives')\n    }\n\n    if (!entries?.length) {\n      throw new TypeError('no paths specified to add/replace')\n    }\n  },\n)\n","// tar -u\n\nimport { makeCommand } from './make-command.js'\nimport { type TarOptionsWithAliases } from './options.js'\n\nimport { replace as r } from './replace.js'\n\n// just call tar.r with the filter and mtimeCache\nexport const update = makeCommand(\n  r.syncFile,\n  r.asyncFile,\n  r.syncNoFile,\n  r.asyncNoFile,\n  (opt, entries = []) => {\n    r.validate?.(opt, entries)\n    mtimeFilter(opt)\n  },\n)\n\nconst mtimeFilter = (opt: TarOptionsWithAliases) => {\n  const filter = opt.filter\n\n  if (!opt.mtimeCache) {\n    opt.mtimeCache = new Map()\n  }\n\n  opt.filter =\n    filter ?\n      (path, stat) =>\n        filter(path, stat) &&\n        !(\n          /* c8 ignore start */\n          (\n            (opt.mtimeCache?.get(path) ?? stat.mtime ?? 0) >\n            (stat.mtime ?? 0)\n          )\n          /* c8 ignore stop */\n        )\n    : (path, stat) =>\n        !(\n          /* c8 ignore start */\n          (\n            (opt.mtimeCache?.get(path) ?? stat.mtime ?? 0) >\n            (stat.mtime ?? 0)\n          )\n          /* c8 ignore stop */\n        )\n}\n","import { appendFileSync, mkdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { THREADBASE_ROOT } from \"./paths\";\n\nconst LOG_PATH = join(THREADBASE_ROOT, \"update.log\");\n\nexport function appendUpdateLog(line: string): void {\n  try {\n    mkdirSync(THREADBASE_ROOT, { recursive: true });\n    appendFileSync(LOG_PATH, `${new Date().toISOString()} ${line}\\n`, \"utf8\");\n  } catch {\n    // Non-fatal — never let a logging failure break the update flow.\n  }\n}\n","import type { Logger } from \"../src/logger\";\n\n/**\n * The boot line naming the key the server came up with.\n *\n * Only the masked form may reach a log sink. Interpolating the whole key here\n * wrote a credential equivalent to a shell on the machine into the JSON log\n * people attach to bug reports (#723); the structured `apiKeyMasked` field\n * beside it had always masked, and the message string was what leaked.\n *\n * Nothing needs the plaintext at boot. Contrary to the issue's reading,\n * `printServerBanner` does not print the key: the pairing banner carries a\n * short-lived `pt_` pair token and uses the key only as a Bearer header, so\n * masking here removes the last plaintext copy from a boot artefact rather\n * than duplicating something the terminal already shows. An operator who\n * wants the key reads `~/.threadbase/server.yaml`.\n *\n * It lives in its own module so a test can drive the real logger and read the\n * bytes it emits; `cli/index.ts` runs `program.parse()` on import and cannot\n * be loaded from a test.\n */\nexport function logApiKeyLine(log: Logger, apiKey: string): void {\n  const apiKeyMasked = `${apiKey.slice(0, 6)}…`;\n  log.info(`API key: ${apiKeyMasked}`, { apiKeyMasked });\n}\n","import type { FeatureFlagValues } from \"../src/feature-flags\";\n\n/**\n * `--no-e2ee` folded into the CLI rung of the feature-flag resolution.\n *\n * A `serve` option and nothing else (D-8): no `server.yaml` key, no\n * `THREADBASE_*` variable of its own. It is sugar for `--feature e2ee=false`\n * and lands on the same rung, so the documented precedence decides the run —\n * which means `THREADBASE_FEATURE_E2EE=1` still wins, because `env` outranks\n * `cli`. That is deliberate: the collision between D-8 and §6.5 is R2's\n * escalation to the user, and implementing an exception here would decide it.\n *\n * It lives in its own module for the reason `boot-log.ts` does: `cli/index.ts`\n * runs `program.parse()` on import and cannot be loaded from a test.\n */\nexport function applyNoE2ee(\n  featureFlags: FeatureFlagValues | undefined,\n  /** Commander's value for the negated option: `false` when `--no-e2ee` was passed. */\n  e2eeOption: unknown,\n): { values: FeatureFlagValues | undefined; error?: string } {\n  if (e2eeOption !== false) return { values: featureFlags };\n  // Two spellings of one switch must not disagree. Refusing the boot is the\n  // same strictness `--feature` already applies to a typo, and the alternative\n  // — silently picking a winner — is how an operator ends up believing\n  // encryption is off when it is on.\n  if (featureFlags?.e2ee === true) {\n    return {\n      values: featureFlags,\n      error: \"--no-e2ee contradicts --feature e2ee=true; pass one or the other\",\n    };\n  }\n  return { values: { ...featureFlags, e2ee: false } };\n}\n","import qrcode from \"qrcode-terminal\";\nimport type { E2eeCapability } from \"../src/api/routes/misc.routes\";\nimport { resolveServerUrl } from \"../src/lan-url\";\nimport { getLogger } from \"../src/logger\";\nimport { serverIdentityFingerprint, serverIdentityPublicKey } from \"../src/server-identity\";\n\nconst cliLog = getLogger(\"cli\");\n\nexport interface PairBannerLog {\n  /** Banner lines, always through the console dest — this is user-facing output. */\n  info: (msg: string) => void;\n  warn: (msg: string, meta?: Record<string, unknown>) => void;\n}\n\nexport interface PairBannerDeps {\n  /** Overridable for tests; defaults to the real console-dest logger. */\n  log?: PairBannerLog;\n  /** Overridable for tests; defaults to the global fetch. */\n  fetch?: typeof globalThis.fetch;\n  /** Overridable for tests; defaults to the real on-disk identity key. */\n  identityKey?: () => string;\n}\n\nconst defaultLog: PairBannerLog = {\n  info: (msg) => cliLog.info(msg, undefined, \"console\"),\n  warn: (msg, meta) => cliLog.warn(msg, meta),\n};\n\nfunction generateQr(payload: string): Promise<string> {\n  return new Promise((resolve) => {\n    qrcode.generate(payload, { small: true }, resolve);\n  });\n}\n\nexport function printUrlBanner({\n  url,\n  qr,\n  expiresAt,\n  fingerprint,\n}: {\n  url: string;\n  qr?: string;\n  expiresAt?: number;\n  /** Grouped hex from `serverIdentityFingerprint`. Printed under an E2EE QR. */\n  fingerprint?: string;\n}): string {\n  const contentLines = [\"Threadbase Streamer — server address\", \"\", url];\n  if (qr) {\n    contentLines.push(\"\", ...qr.split(\"\\n\").filter((l) => l.length > 0));\n    if (expiresAt !== undefined) {\n      contentLines.push(\n        \"\",\n        `Scan to pair a mobile client (expires ${new Date(expiresAt).toLocaleTimeString()})`,\n      );\n    } else {\n      contentLines.push(\"\", \"Scan to pair a mobile client\");\n    }\n  }\n  if (fingerprint) {\n    contentLines.push(\n      \"\",\n      \"Identity code\",\n      fingerprint,\n      \"This should match the code your phone shows after you scan.\",\n    );\n  }\n\n  const width = Math.max(...contentLines.map((l) => l.length));\n  const pad = (l: string) => `║ ${l}${\" \".repeat(width - l.length)} ║`;\n  const top = `╔${\"═\".repeat(width + 2)}╗`;\n  const bottom = `╚${\"═\".repeat(width + 2)}╝`;\n\n  return `\\n${top}\\n${contentLines.map(pad).join(\"\\n\")}\\n${bottom}\\n`;\n}\n\n/**\n * Whether the server that will handle `POST /api/pair/exchange` actually\n * accepts a handshake — asked of that server, not computed here.\n *\n * The two can disagree. `tb-streamer pair` prints a QR for a daemon that is\n * already running and may be a different build from this CLI, and the `e2ee`\n * feature flag resolves inside that daemon at its boot, from an argv a fixed\n * launchd plist or Task Scheduler action supplies and this process never sees.\n * The capability that matters belongs to the process that answers the exchange.\n *\n * `GET /api/info` returns `describeE2eeCapability(...)` verbatim, so this reads\n * that one answer rather than restating it — there is no second constant here\n * to drift from `E2EE_SUPPORTED`.\n *\n * Every failure resolves to false: an older server with no `e2ee` field (absent\n * means \"unknown\", and a server too old to answer is too old to have the\n * handshake), an unreachable endpoint, an unreadable body. That degrade is safe\n * in one direction only — a QR without `spk` always pairs through the legacy\n * path, whereas an `spk` the exchange then refuses is exactly the dishonest\n * advertisement the QR-carried capability exists to prevent (design.md §2.3).\n */\nasync function exchangeAcceptsE2ee({\n  fetchFn,\n  port,\n  apiKey,\n  log,\n}: {\n  fetchFn: typeof globalThis.fetch;\n  port: number;\n  apiKey: string;\n  log: PairBannerLog;\n}): Promise<boolean> {\n  try {\n    const res = await fetchFn(`http://localhost:${port}/api/info`, {\n      headers: { Authorization: `Bearer ${apiKey}` },\n    });\n    if (!res.ok) {\n      log.warn(`(pairing QR omits the encryption offer: /api/info returned ${res.status})`, {\n        event: \"pair.e2ee_capability_unknown\",\n        status: res.status,\n      });\n      return false;\n    }\n    const info = (await res.json()) as { e2ee?: Partial<E2eeCapability> };\n    return info.e2ee?.enabled === true;\n  } catch (err) {\n    const message = err instanceof Error ? err.message : String(err);\n    log.warn(`(pairing QR omits the encryption offer: ${message})`, {\n      event: \"pair.e2ee_capability_unknown\",\n      reason: message,\n    });\n    return false;\n  }\n}\n\nexport async function printServerBanner(\n  {\n    port,\n    apiKey,\n    publicUrl,\n    includeQr,\n  }: {\n    port: number;\n    apiKey: string;\n    publicUrl: string | null;\n    includeQr: boolean;\n  },\n  deps: PairBannerDeps = {},\n): Promise<void> {\n  const log = deps.log ?? defaultLog;\n  const fetchFn = deps.fetch ?? globalThis.fetch;\n  const identityKey = deps.identityKey ?? serverIdentityPublicKey;\n  const url = resolveServerUrl({ publicUrl, port });\n\n  if (!includeQr) {\n    log.info(printUrlBanner({ url }));\n    return;\n  }\n\n  const e2eeOffered = await exchangeAcceptsE2ee({ fetchFn, port, apiKey, log });\n\n  const res = await fetchFn(`http://localhost:${port}/api/pair/start`, {\n    method: \"POST\",\n    headers: { Authorization: `Bearer ${apiKey}`, \"Content-Type\": \"application/json\" },\n    body: \"{}\",\n  });\n  if (!res.ok) {\n    throw new Error(`/api/pair/start returned ${res.status}`);\n  }\n  const { token, expiresAt, expiresInSeconds } = (await res.json()) as {\n    token: string;\n    expiresAt: number;\n    expiresInSeconds: number;\n  };\n\n  const expSeconds = Math.floor(expiresAt / 1000);\n  // `spk` is this server's identity public key (src/server-identity.ts): 43\n  // base64url characters, so URL-safe unencoded. `v` is the envelope version,\n  // per design §2.3.\n  //\n  // Both are emitted ONLY while the exchange will accept a handshake, because\n  // this QR is the client's only pairing-time capability signal: `GET /api/info`\n  // is authenticated and pairing is the request that mints the credential. That\n  // is what makes the client's gate honest — a valid `spk` means \"this server\n  // will accept msg1\", so an absent msg2 afterwards is a refusal rather than a\n  // capability answer arriving late.\n  //\n  // A disabled build prints neither, which is byte-identical to the QR it\n  // printed before any of this existed. Additive either way: parsePairUri on\n  // the client reads named parameters and ignores the rest, so an older app\n  // scanning either QR behaves exactly as it does today.\n  //\n  // `identityKey()` is only called on the enabled path — a corrupt key file\n  // costs the QR on a build that would have used it, and costs nothing on one\n  // that would not. The same read feeds the fingerprint printed under the QR,\n  // so the phone and the computer show the same grouped hex.\n  let fingerprint: string | undefined;\n  let payload = `threadbase://pair?url=${encodeURIComponent(url)}&token=${token}&exp=${expSeconds}`;\n  if (e2eeOffered) {\n    const spk = identityKey();\n    payload += `&spk=${spk}&v=1`;\n    fingerprint = serverIdentityFingerprint(spk);\n  }\n  const qr = await generateQr(payload);\n\n  log.info(printUrlBanner({ url, qr, expiresAt, fingerprint }));\n  log.info(`Pair URL: ${payload}`);\n  log.info(`Expires in ${expiresInSeconds}s`);\n}\n","import { spawn } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport type { Command } from \"commander\";\nimport { Command as CommanderCommand } from \"commander\";\nimport { loadFeatureFlags } from \"../src/auth\";\nimport { getInstanceId } from \"../src/db/config\";\nimport { type FeatureFlagValues, resolveFeatureFlags } from \"../src/feature-flags\";\nimport { detectConflictingAgents } from \"../src/lifecycle/conflict-check\";\nimport { TASK_NAME } from \"../src/lifecycle/constants\";\nimport { darwinPlistPath } from \"../src/lifecycle/launchd\";\nimport { clearMarker, readMarker } from \"../src/lifecycle/marker\";\nimport { getSupervisor } from \"../src/lifecycle/platform\";\nimport { isPidAlive } from \"../src/lifecycle/process-liveness\";\nimport { getLogger } from \"../src/logger\";\nimport { PTY_HOST_PROTOCOL_VERSION } from \"../src/pty-host/protocol\";\nimport {\n  hostSocketPath,\n  type PtyHostStatusProbe,\n  probePtyHostStatus,\n} from \"../src/pty-host/socket\";\nimport { currentServerIdentityFingerprint, serverIdentityKeyPath } from \"../src/server-identity\";\n\nconst log = getLogger(\"prod\");\n\nexport type CommandResult = { ok: boolean; message: string };\n\nexport function clearSupervisorLogs(): void {\n  let paths: { stdout: string; stderr: string };\n  try {\n    paths = getSupervisor().getLogPaths();\n  } catch {\n    return;\n  }\n  for (const file of [paths.stdout, paths.stderr]) {\n    try {\n      // eslint-disable-next-line @typescript-eslint/no-require-imports\n      const fs = require(\"node:fs\") as typeof import(\"node:fs\");\n      fs.writeFileSync(file, \"\");\n    } catch {\n      // Best effort: keep start/restart working even if logs cannot be cleared.\n    }\n  }\n}\n\nexport async function runProdStart(): Promise<CommandResult> {\n  const sup = getSupervisor();\n  clearMarker();\n  // `prod stop` fully unloads the agent (launchctl bootout / Task Scheduler\n  // disable), so `start` must be able to re-load it — not just kickstart an\n  // already-loaded one. When the agent isn't loaded, bootstrap it from its\n  // on-disk definition (mirrors `prod restart`); when it is loaded but merely\n  // suspended via a marker, a kickstart is enough.\n  if (sup.isAgentLoaded()) {\n    sup.kickstartAgent();\n  } else {\n    const specPath = process.platform === \"darwin\" ? darwinPlistPath() : \"\";\n    try {\n      sup.bootstrapAgent(specPath, { afterBootout: false });\n    } catch {\n      // Agent was never installed (no plist / unregistered task) — bootstrap\n      // can't conjure a service definition. Point the user at the installer.\n      const message =\n        process.platform === \"darwin\"\n          ? \"launchd agent com.ronen.threadbase is not loaded and could not be bootstrapped. Run 'scripts/deploy.sh setup' to install it.\"\n          : `task '${TASK_NAME}' is not registered. Run 'scripts\\\\deploy.ps1 setup' to install it.`;\n      return { ok: false, message };\n    }\n  }\n  const restoredMsg =\n    process.platform === \"darwin\"\n      ? \"prod streamer restored — launchd is starting it now.\"\n      : \"prod streamer restored — Task Scheduler is starting it now.\";\n  return { ok: true, message: restoredMsg };\n}\n\nexport async function runProdStop(): Promise<CommandResult> {\n  getSupervisor().bootoutAgent();\n  const what =\n    process.platform === \"darwin\" ? \"launchd agent unloaded\" : \"Task Scheduler task disabled\";\n  return {\n    ok: true,\n    message: `prod streamer stopped (${what}). It will not auto-restart until 'tb-streamer prod start' or system reboot.`,\n  };\n}\n\nexport type ProdStatus = {\n  agentLoaded: boolean;\n  agentPid: number | null;\n  marker: ReturnType<typeof readMarker>;\n};\n\nexport async function runProdStatus(): Promise<ProdStatus> {\n  const sup = getSupervisor();\n  return {\n    agentLoaded: sup.isAgentLoaded(),\n    agentPid: sup.getAgentPid(),\n    marker: readMarker(),\n  };\n}\n\nexport type DoctorReport = {\n  findings: string[];\n  repairs: string[];\n  identity?: string;\n  ptyHost?: PtyHostStatusProbe;\n};\n\nexport async function runProdDoctor(\n  opts: { fix: boolean },\n  deps: {\n    featureFlags?: FeatureFlagValues;\n    probePtyHost?: () => Promise<PtyHostStatusProbe>;\n    // No default here, unlike probePtyHost: that one is gated behind the\n    // (off-by-default) ptyHost feature flag, so tests that don't pass it never\n    // reach it. The identity key has no such gate, so a default that reads the\n    // real on-disk file would make every existing doctor test touch the\n    // developer's actual ~/.threadbase/keys/server-identity.key. The real\n    // function is supplied by registerProdCommands' `doctor` action instead.\n    serverIdentityFingerprint?: () => string;\n  } = {},\n): Promise<DoctorReport> {\n  const findings: string[] = [];\n  const repairs: string[] = [];\n  let identity: string | undefined;\n  let ptyHost: PtyHostStatusProbe | undefined;\n\n  const marker = readMarker();\n  if (marker && !marker.userHeld && !isPidAlive(marker.devPid)) {\n    findings.push(`stale marker (dev pid ${marker.devPid} dead)`);\n    if (opts.fix) {\n      clearMarker();\n      repairs.push(`cleared stale marker (dev pid ${marker.devPid} was dead)`);\n    }\n  }\n\n  if (!getSupervisor().isAgentLoaded()) {\n    findings.push(\"launchd agent is not loaded — prod is fully down\");\n  }\n\n  if (deps.serverIdentityFingerprint) {\n    try {\n      identity = deps.serverIdentityFingerprint();\n    } catch (err) {\n      findings.push(\n        `server identity key at ${serverIdentityKeyPath()} is unreadable: ` +\n          (err instanceof Error ? err.message : String(err)),\n      );\n    }\n  }\n\n  // Detect conflicting Threadbase streamer agents (Homebrew vs deploy.sh)\n  const conflicts = detectConflictingAgents();\n  for (const c of conflicts) {\n    if (c.resolution === \"uninstall-homebrew\") {\n      findings.push(\n        `conflicting agent: ${c.label} — run: brew services stop tb-streamer && brew uninstall tb-streamer`,\n      );\n    } else {\n      findings.push(\n        `conflicting agent: ${c.label} — run: launchctl bootout gui/$(id -u)/${c.label}`,\n      );\n    }\n  }\n\n  const featureFlags =\n    deps.featureFlags ?? resolveFeatureFlags({ yaml: loadFeatureFlags() }).values;\n  if (featureFlags.ptyHost) {\n    const probe = deps.probePtyHost ?? (() => probePtyHostStatus(hostSocketPath(getInstanceId())));\n    try {\n      ptyHost = await probe();\n    } catch (err) {\n      ptyHost = { reachable: false, error: err instanceof Error ? err.message : String(err) };\n    }\n    if (!ptyHost.reachable) {\n      findings.push(`pty-host is not reachable: ${ptyHost.error}`);\n    } else if (ptyHost.protocolVersion !== PTY_HOST_PROTOCOL_VERSION) {\n      findings.push(\n        `pty-host protocol ${ptyHost.protocolVersion} does not match streamer protocol ${PTY_HOST_PROTOCOL_VERSION}`,\n      );\n    }\n  }\n\n  return { findings, repairs, ...(identity ? { identity } : {}), ...(ptyHost ? { ptyHost } : {}) };\n}\n\nexport type LogsOptions = {\n  lines: number;\n  follow: boolean;\n  errorsOnly: boolean;\n  clear?: boolean;\n};\nexport type SpawnTailArgs = { files: string[]; lines: number; follow: boolean };\nexport type SpawnTailResult = { ok: boolean; message?: string };\nexport type SpawnTail = (args: SpawnTailArgs) => Promise<SpawnTailResult>;\n\nfunction toPowerShellLiteral(value: string): string {\n  return `'${value.replace(/'/g, \"''\")}'`;\n}\n\n/**\n * Windows follow loop, standing in for `tail -F a b`.\n *\n * `Get-Content -Wait` cannot do this: given several paths it blocks inside the\n * first one's read loop forever, so the second file is never opened — not even\n * its seed lines. On the default `prod logs` (stdout + stderr) that hid stderr\n * entirely, which is the one stream a crashed boot leaves anything in.\n *\n * It also cannot recover from truncation. `-F` was chosen on POSIX precisely\n * because `prod logs --clear` and the boot log-cap both empty these files; a\n * `-Wait` follower keeps its stored offset, sits past the new EOF and silently\n * never prints again. Here a shrunk file resets the offset to 0.\n *\n * `$ErrorActionPreference = 'Stop'` covers the seed reads, so an unreadable\n * path exits non-zero instead of powershell.exe's default \"non-terminating\n * error, exit 0\" — which `runProdLogs` would otherwise report as success with\n * no output. The poll body deliberately swallows its errors instead: a file\n * that vanishes mid-follow is what `-F` is for, and must not kill the follower.\n */\nfunction windowsFollowScript(paths: string[], lines: number): string {\n  const list = `@(${paths.map(toPowerShellLiteral).join(\", \")})`;\n  return [\n    \"$ErrorActionPreference = 'Stop'\",\n    `$paths = ${list}`,\n    `foreach ($f in $paths) { Get-Content -LiteralPath $f -Tail ${lines} }`,\n    \"$offsets = @{}\",\n    \"foreach ($f in $paths) { $offsets[$f] = (Get-Item -LiteralPath $f).Length }\",\n    \"while ($true) {\",\n    \"  foreach ($f in $paths) {\",\n    \"    try {\",\n    \"      $len = (Get-Item -LiteralPath $f).Length\",\n    \"      if ($len -lt $offsets[$f]) { $offsets[$f] = 0 }\",\n    \"      if ($len -gt $offsets[$f]) {\",\n    \"        $stream = [IO.File]::Open($f, 'Open', 'Read', 'ReadWrite')\",\n    \"        [void]$stream.Seek($offsets[$f], 'Begin')\",\n    \"        $reader = New-Object IO.StreamReader($stream)\",\n    \"        $reader.ReadToEnd()\",\n    \"        $reader.Dispose(); $stream.Dispose()\",\n    \"        $offsets[$f] = $len\",\n    \"      }\",\n    \"    } catch { }\",\n    \"  }\",\n    \"  Start-Sleep -Milliseconds 400\",\n    \"}\",\n  ].join(\"; \");\n}\n\n/**\n * Default tail implementation. POSIX spawns `tail` (-F follows files across\n * rotation; macOS BSD tail and GNU tail both support -F and -n). Windows has no\n * `tail`, so it spawns `powershell.exe`: a plain `Get-Content -Tail` when not\n * following, and `windowsFollowScript` when following — see there for why\n * `Get-Content -Wait` is not usable for either of this command's two files.\n * Streams to the parent's stdout/stderr and resolves when the child exits.\n */\nexport const defaultSpawnTail: SpawnTail = ({ files, lines, follow }) => {\n  const existing = files.filter((f) => existsSync(f));\n  if (existing.length === 0) {\n    return Promise.resolve({\n      ok: false,\n      message: `no log files found at: ${files.join(\", \")}. The streamer may not have started yet, or the deploy uses a different log layout.`,\n    });\n  }\n  const isWindows = process.platform === \"win32\";\n  const args = isWindows\n    ? [\n        \"-NoLogo\",\n        \"-NoProfile\",\n        \"-NonInteractive\",\n        \"-Command\",\n        follow\n          ? windowsFollowScript(existing, lines)\n          : `$ErrorActionPreference = 'Stop'; Get-Content -LiteralPath @(${existing.map(toPowerShellLiteral).join(\", \")}) -Tail ${lines}`,\n      ]\n    : [\"-n\", String(lines), ...(follow ? [\"-F\"] : []), ...existing];\n  const program = isWindows ? \"powershell.exe\" : \"tail\";\n  return new Promise<SpawnTailResult>((resolve) => {\n    const child = spawn(program, args, {\n      stdio: [\"ignore\", \"inherit\", \"inherit\"],\n    });\n    child.on(\"error\", (err) =>\n      resolve({ ok: false, message: `${program} failed: ${err.message}` }),\n    );\n    child.on(\"exit\", (code) => resolve({ ok: code === 0 }));\n  });\n};\n\nexport async function runProdLogs(\n  opts: LogsOptions,\n  deps: {\n    spawnTail?: SpawnTail;\n    truncate?: (file: string) => void;\n    /** After truncate, restart the supervised process so log fds reopen at 0. */\n    kickstart?: () => void;\n  } = {},\n): Promise<CommandResult> {\n  const spawnTail = deps.spawnTail ?? defaultSpawnTail;\n  let paths: { stdout: string; stderr: string };\n  try {\n    paths = getSupervisor().getLogPaths();\n  } catch (err) {\n    return { ok: false, message: err instanceof Error ? err.message : String(err) };\n  }\n  if (opts.clear) {\n    // Truncate in place (don't unlink): the running streamer holds open file\n    // descriptors via launchd's StandardOut/ErrorPath. Removing the inode\n    // would leave the daemon writing to a ghost file. `: > file` semantics.\n    // After truncate, kickstart so the daemon reopens at offset 0 — otherwise\n    // the old fd stays at N and the next write creates a sparse NUL-filled gap.\n    const truncate =\n      deps.truncate ??\n      ((file: string) => {\n        // eslint-disable-next-line @typescript-eslint/no-require-imports\n        const fs = require(\"node:fs\") as typeof import(\"node:fs\");\n        fs.writeFileSync(file, \"\");\n      });\n    const kickstart = deps.kickstart ?? (() => getSupervisor().kickstartAgent());\n    const cleared: string[] = [];\n    const failures: string[] = [];\n    for (const f of [paths.stdout, paths.stderr]) {\n      try {\n        truncate(f);\n        cleared.push(f);\n      } catch (err) {\n        failures.push(`${f}: ${err instanceof Error ? err.message : String(err)}`);\n      }\n    }\n    try {\n      kickstart();\n    } catch (err) {\n      failures.push(`kickstart after clear: ${err instanceof Error ? err.message : String(err)}`);\n    }\n    if (failures.length > 0 && cleared.length === 0) {\n      return {\n        ok: false,\n        message: `failed to truncate logs:\\n  ${failures.join(\"\\n  \")}`,\n      };\n    }\n    if (failures.length > 0) {\n      return {\n        ok: false,\n        message: `cleared:\\n  ${cleared.join(\"\\n  \")}\\nfailed:\\n  ${failures.join(\"\\n  \")}`,\n      };\n    }\n    return { ok: true, message: `cleared:\\n  ${paths.stdout}\\n  ${paths.stderr}` };\n  }\n  const files = opts.errorsOnly ? [paths.stderr] : [paths.stdout, paths.stderr];\n  const result = await spawnTail({ files, lines: opts.lines, follow: opts.follow });\n  if (!result.ok) {\n    return { ok: false, message: result.message ?? \"tail exited with non-zero status\" };\n  }\n  return { ok: true, message: \"\" };\n}\n\nexport function registerProdCommands(program: Command): void {\n  const prod = new CommanderCommand(\"prod\").description(\n    \"Manage the launchd-supervised prod streamer\",\n  );\n\n  prod\n    .command(\"start\")\n    .description(\"Restore prod after a user-held suspension\")\n    .option(\"--clear-logs\", \"Clear existing stdout + stderr logs\", false)\n    .action(async (opts) => {\n      if (opts.clearLogs === true) clearSupervisorLogs();\n      const r = await runProdStart();\n      log.info(r.message, undefined, \"console\");\n      if (!r.ok) process.exitCode = 1;\n    });\n\n  prod\n    .command(\"stop\")\n    .description(\"Unload the launchd agent (prod will not auto-restart)\")\n    .action(async () => {\n      const r = await runProdStop();\n      log.info(r.message, undefined, \"console\");\n    });\n\n  prod\n    .command(\"status\")\n    .description(\"Report whether prod is supervised, suspended, or down\")\n    .action(async () => {\n      const s = await runProdStatus();\n      const parts = [\n        `agent: ${s.agentLoaded ? \"loaded\" : \"NOT loaded\"}`,\n        `pid: ${s.agentPid ?? \"(none)\"}`,\n        s.marker\n          ? `marker: ${s.marker.userHeld ? \"userHeld (intentional stop)\" : \"dev-suspended\"}, ` +\n            `devPid=${s.marker.devPid}, port=${s.marker.port}, repo=${s.marker.repoToplevel}`\n          : \"marker: none\",\n      ];\n      log.info(parts.join(\"\\n  \"), undefined, \"console\");\n    });\n\n  prod\n    .command(\"restart\")\n    .description(\"Stop + restart the supervised streamer (re-reads service definition)\")\n    .option(\"--clear-logs\", \"Clear existing stdout + stderr logs\", false)\n    .action(async (opts) => {\n      const sup = getSupervisor();\n      // Resolve the plist path while the service is still loaded — the label\n      // probe can't detect a brew service after bootout.\n      const specPath = process.platform === \"darwin\" ? darwinPlistPath() : \"\";\n      if (opts.clearLogs === true) clearSupervisorLogs();\n      sup.bootoutAgent();\n      sup.bootstrapAgent(specPath, { afterBootout: true });\n      const what =\n        process.platform === \"darwin\"\n          ? `agent restarted from ${specPath}`\n          : `task '${TASK_NAME}' restarted`;\n      log.info(what, undefined, \"console\");\n    });\n\n  prod\n    .command(\"doctor\")\n    .description(\"Detect stale markers, missing agents, and pty-host health\")\n    .option(\"--fix\", \"Apply repairs (default is dry-run)\", false)\n    .action(async (opts) => {\n      const r = await runProdDoctor(\n        { fix: opts.fix === true },\n        { serverIdentityFingerprint: currentServerIdentityFingerprint },\n      );\n      if (r.identity) {\n        log.info(`identity: ${r.identity}`, undefined, \"console\");\n      }\n      if (r.ptyHost) {\n        log.info(\n          r.ptyHost.reachable\n            ? `pty-host: reachable, protocol=${r.ptyHost.protocolVersion}, sessions=${r.ptyHost.sessionCount}`\n            : `pty-host: unreachable (${r.ptyHost.error})`,\n          undefined,\n          \"console\",\n        );\n      }\n      log.info(`findings: ${r.findings.length === 0 ? \"(none)\" : \"\"}`, undefined, \"console\");\n      for (const f of r.findings) log.info(`  - ${f}`, undefined, \"console\");\n      if (r.repairs.length) {\n        log.info(`repairs:`, undefined, \"console\");\n        for (const fix of r.repairs) log.info(`  - ${fix}`, undefined, \"console\");\n      } else if (!opts.fix && r.findings.length > 0) {\n        log.info(`(re-run with --fix to apply repairs)`, undefined, \"console\");\n      }\n    });\n\n  prod\n    .command(\"logs\")\n    .description(\"Tail the supervised streamer's stdout + stderr log files\")\n    .option(\"-n, --lines <count>\", \"Seed with the last N lines (default 50)\", \"50\")\n    .option(\"--no-follow\", \"Print last N lines and exit (do not follow)\")\n    .option(\"--errors-only\", \"Tail only stderr\", false)\n    .option(\"--clear\", \"Truncate stdout + stderr logs in place, then exit\", false)\n    .action(async (opts) => {\n      const lines = Number.parseInt(opts.lines, 10);\n      const r = await runProdLogs({\n        lines: Number.isFinite(lines) && lines > 0 ? lines : 50,\n        follow: opts.follow !== false,\n        errorsOnly: opts.errorsOnly === true,\n        clear: opts.clear === true,\n      });\n      if (r.message) log.info(r.message, undefined, \"console\");\n      if (!r.ok) process.exitCode = 1;\n    });\n\n  program.addCommand(prod);\n}\n"],"mappings":"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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAK;AAAA,gBAAG;AAAA;AAAA,gBAE9B;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAK;AAAA,gBAAG;AAAA;AAAA,gBAE9B;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAK;AAAA,gBAAG;AAAA;AAAA,gBAE9B;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAG;AAAA;AAAA,gBAE7C;AAAA,gBAAI;AAAA,gBAAK;AAAA,gBAAG;AAAA;AAAA,gBAEZ;AAAA,gBAAG;AAAA,gBAAG;AAAA,gBAAI;AAAA,gBAAG;AAAA;AAAA,gBAEb;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAI;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAChE;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAI;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAI;AAAA,gBAAI;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAChE;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAK;AAAA;AAAA,gBAEZ;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAI;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAChE;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAI;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAI;AAAA,gBAAI;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAChE;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAK;AAAA;AAAA,gBAEZ;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAI;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAChE;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAI;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAI;AAAA,gBAAI;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAChE;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAK;AAAA;AAAA,gBAEZ;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAI;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAChE;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAI;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAI;AAAA,gBAAI;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAChE;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAK;AAAA;AAAA,gBAEZ;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAI;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAChE;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAK;AAAA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,UAAU;AAAA,MAAK,UAAU;AAAA,MACzC,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MACzC,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACxD,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACxD,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACxD,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACvE,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACvE,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACxD,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACxD,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACxD,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACvE,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACvE,UAAU;AAAA,MAAM,UAAU;AAAA,MAC1B,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MACzC,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACvE,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACvE,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACxD,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACxD,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MACzC,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MACzC,UAAU;AAAA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AC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAC7C,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAC7C,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAC7C,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAC7C,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAC7C,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAC7C,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAC7C,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAC7C,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAC7C,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAC7C,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAC7C,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAC7C,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAC7C,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAC7C,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAC7C,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAC7C,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAC7C,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAC7C,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAC7C,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAC7C,CA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AAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAI;AACpE,UAAI,0BAA0B;AAAA,QAC5B;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,MACN;AAED,UAAI,6BAA6B,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AACnE,UAAI,4BAA4B,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,EAAE;AAC1D,UAAI,6BAA6B,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAI;AACtE,UAAI,4BAA4B;AAAA,QAC9B;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,Q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","names":["exports","module","fs","path","os","crypto","parse","match","error","relative","config","exports","module","exports","module","re","f","raw","v","input","exports","module","exports","module","exports","module","err","exports","module","err","exports","module","path","exports","module","exports","module","exports","module","_","exports","module","path","cloned","exports","module","exports","module","ns","k","path","exports","module","date","exports","module","f","ss","exports","module","ms","exports","module","fs","EventEmitter","path","assert","file","mkdir","err","n","releasedBufObj","cb","error","exports","module","registry","exports","module","exports","module","check","exports","module","exports","module","version","EventEmitter","join","assert","FinalizationRegistry","WeakRef","registry","cb","error","exports","module","existsSync","join","isAbsolute","sep","fileURLToPath","path","onExit","pipeline","fixTarget","exports","module","v","asString","time","stringify","defaultOptions","_","log","exports","module","exports","module","k","exports","module","exports","module","EventEmitter","version","bindings","k","ks","bi","log","s","cb","exports","module","array","number","value","bigint","join","tmp","key","res","stringify","exports","module","emit","clone","streamLevels","s","b","exports","module","os","time","version","hostname","defaultOptions","number","normalize","pino","serializers","timestamp","m","f","pino","raw","v","f","b","match","file","raw","url","exports","node","exports","visit","node","path","ci","pt","exports","visit","tn","version","isValid","error","node","exports","visit","anchor","sa","node","error","exports","k","exports","v","res","exports","res","exports","visit","Node","node","anchors","doc","anchor","exports","Node","exports","match","map","node","exports","Node","path","v","k","it","node","exports","exports","j","i","end","exports","json","qs","literal","ss","exports","match","node","anchor","exports","ws","cs","exports","exports","merge","map","it","value","exports","log","merge","map","node","exports","k","v","_","exports","stringify","comment","str","exports","k","it","map","node","_","exports","map","exports","it","_","exports","seq","exports","string","exports","exports","exports","exports","node","exports","node","int","exports","map","_null","string","int","require_schema","exports","map","exports","s","exports","cn","pairs","it","exports","_","map","omap","require_bool","exports","require_float","exports","node","f","require_int","exports","n","node","int","exports","_","set","map","exports","res","p","node","timestamp","match","date","require_schema","exports","map","_null","string","int","merge","set","timestamp","exports","map","_null","string","int","merge","set","timestamp","tags","exports","map","string","b","merge","exports","cs","exports","version","path","node","v","k","json","res","s","exports","prettifyError","error","ci","exports","anchor","cb","exports","st","it","exports","exports","search","b","exports","map","sep","exports","bs","node","exports","sep","cb","exports","sep","st","map","ce","ee","exports","anchor","kt","node","exports","value","end","sep","error","ts","m","exports","re","match","sep","raw","exports","error","kt","tag","ts","cs","exports","st","exports","anchor","node","error","re","exports","re","exports","it","cb","error","exports","he","st","oa","exports","st","sep","exports","visit","path","ci","exports","exports","dt","cs","sp","s","qb","i","ch","exports","exports","it","st","error","sep","map","start","fs","exports","log","lineCounter","parse","exports","visit","_","v","k","array","input","object","raw","path","b","Class","_a","config","base64","base64url","hex","F","initializer","_","own","proto","k","error","issue","path","node","_a","b","error","parse","parseAsync","timeRegex","version","delimiter","_a","input","result","F","validateAsync","_","input","url","hostname","base64","iban","k","r","union","map","b","f","lo","hi","own","s","_a","checks","checkResult","canary","result","v","isDate","memo","isObject","allowsEval","patterns","p","results","value","left","right","rr","keyResult","valueResult","output","F","resolve","cached","check","merge","raw","_a","input","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","p","error","issue","error","issue","error","issue","error","issue","error","input","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","v","be","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","number","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","plural","error","issue","plural","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","_a","meta","p","f","clone","recursive","F","name","v","k","check","issue","outputVar","getTupleOptStart","Class","_emoji","_undefined","_null","types","input","v","issue","codec","json","_a","meta","id","schema","types","members","required","object","m","k","union","b","io","json","types","v","record","_","input","registry","ctx","m","p","patterns","b","optional","_","core_exports","_emoji","_null","_undefined","init_core","checks_exports","init_checks","init_core","initializer","init_errors","init_core","self","issue","issues","parse","parseAsync","safeParse","safeParseAsync","encode","decode","encodeAsync","decodeAsync","safeEncode","safeDecode","safeEncodeAsync","safeDecodeAsync","init_parse","init_core","init_errors","schemas_exports","_default","base64","base64url","bigint","boolean","_catch","cidrv4","cidrv6","creditCard","cuid","cuid2","currencyCode","date","describe","e164","email","emoji","_enum","guid","hex","hostname","iban","ipv4","ipv6","ksuid","mac","meta","nanoid","_null","nullish","number","string","ulid","_undefined","uuid","_void","xid","_emoji","v","codec","init_schemas","init_core","init_checks","init_parse","check","_parse","parse","_parseAsync","parseAsync","safeParse","safeParseAsync","_encode","encode","_decode","decode","_encodeAsync","encodeAsync","_decodeAsync","decodeAsync","safeEncode","safeDecode","safeEncodeAsync","safeDecodeAsync","json","self","types","issue","output","map","init_core","ZodFirstPartyTypeKind","date","datetime","duration","time","init_core","init_schemas","path","raw","parts","k","zodSchema","v","patterns","p","s","version","init_checks","init_schemas","schemas_exports","checks_exports","node","run","s","cached","k","s","init_schemas","s","init_schemas","bigint","boolean","date","number","string","init_core","init_schemas","_default","base64","base64url","bigint","boolean","_catch","cidrv4","cidrv6","core_exports","creditCard","cuid","cuid2","currencyCode","date","decode","decodeAsync","describe","e164","email","emoji","encode","encodeAsync","_enum","guid","hex","hostname","iban","ipv4","ipv6","ksuid","mac","meta","nanoid","_null","nullish","number","parse","parseAsync","safeDecode","safeDecodeAsync","safeEncode","safeEncodeAsync","safeParse","safeParseAsync","string","ulid","_undefined","uuid","_void","xid","init_core","init_schemas","init_checks","init_errors","init_parse","import_node_os","import_node_path","exports","encode","decode","TextDecoder","TextEncoder","s","exports","assertNever","record","error","exports","exports","exports","exports","k","v","encode","input","decode","exports","v","k","isObject","output","exports","exports","_a","exports","exports","exports","exports","exports","exports","exports","service","exports","exports","exports","input","exports","exports","exports","exports","module","global","p","log2","or","xor","b","le","hi","lo","_default","exports","_a","error","failure","require_dist","exports","module","s","m","w","ms","parse","error","match","plural","exports","ts","date","exports","exports","map","k","v","p","json","exports","failure","base","exports","exports","exports","exports","time","ts","exports","SdkComponent","exports","logger","contributors","exports","exports","contributors","exports","_","exports","version","_a","v","exports","exports","exports","_a","exports","exports","_a","exports","_a","exports","s","error","Status","exports","LogVerbosity","Propagate","require_package","exports","module","exports","_a","getLogger","logger","log","exports","error","validate","v","error","exports","resolve","exports","exports","fs","exports","path","splitPath","exports","exports","_a","resolve","error","exports","_a","_e","config","exports","os","_a","config","hostname","record","ConnectivityState","exports","PickResultType","exports","_a","exports","_a","exports","config","_a","error","exports","exports","exports","__extends","d","b","TypeError","String","extendStatics","__","this","constructor","prototype","Object","create","__generator","thisArg","body","_","label","sent","t","trys","ops","f","y","g","next","verb","throw","return","Symbol","iterator","n","v","step","op","call","done","value","pop","length","push","e","throwIteratorAccessError","RangeError","TreeNode","TreeNodeEnableIndex","ContainerIterator","Base","Container","TreeContainer","TreeIterator","OrderedMapIterator","OrderedMap","setPrototypeOf","__proto__","Array","p","hasOwnProperty","key","color","_left","undefined","_right","_parent","_key","_value","_color","_pre","preNode","isRootOrHeader","pre","_next","nextNode","_rotateLeft","PP","V","R","_rotateRight","F","K","_super","_this","apply","arguments","_subTreeSize","parent","_recount","iteratorType","equals","iter","_node","_length","defineProperty","get","enumerable","configurable","size","empty","cmp","enableIndex","x","_root","_cmp","_TreeNodeClass","_header","_lowerBound","curNode","resNode","cmpResult","_upperBound","_reverseLowerBound","_reverseUpperBound","_eraseNodeSelfBalance","parentNode","brother","_eraseNode","clear","swapNode","_inOrderTraversal","param","pos","callback","nodeList","index","stack","_insertNodeSelfBalance","grandParent","uncle","GP","_set","hint","minNode","compareToMin","maxNode","compareToMax","iterNode","iterCmpRes","preCmpRes","parent_1","_getTreeNodeByKey","updateKeyByIterator","node","nextKey","preKey","eraseElementByPos","eraseElementByKey","eraseElementByIterator","hasNoRight","isNormal","getHeight","traversal","Math","max","header","root","isAccessible","container","self","Proxy","target","prop","set","newValue","copy","forEach","el","setElement","begin","end","rBegin","rEnd","front","back","lowerBound","upperBound","reverseLowerBound","reverseUpperBound","map","getElementByPos","find","getElementByKey","union","other","i","_a","exports","exports","error","_a","_size","cb","exports","error","_a","metadata","exports","_a","metadata","_e","_b","_c","path","getCall","error","_a","Client","metadata","exports","exports","partial","path","exports","module","array","string","object","Symbol","exports","module","resolve","params","offset","exports","base64","string","p","encode","i","j","b","decode","exports","module","EventEmitter","emit","require_float","exports","module","le","lo","hi","exports","string","exports","module","pool","size","exports","module","lo","hi","hash","exports","isObject","Buffer","hash","merge","newError","i","exports","module","base64","create","lo","hi","finish","exports","module","exports","module","create_array","create","buffer","exports","module","require_service","exports","module","self","err","exports","exports","module","exports","exports","module","exports","module","fs","exports","module","fetch","fs","exports","path","isAbsolute","normalize","resolve","exports","patterns","require_fs","exports","module","fs","exports","module","json","array","ns","object","define","path","exports","module","types","json","resolve","exports","module","json","resolve","require_service","exports","module","json","object","method","exports","module","encode","decode","object","exports","module","types","field","exports","module","j","exports","exports","object","exports","module","json","object","types","exports","module","parse","json","self","finish","cb","filename","process","resolved","i","fetch","source","object","j","exports","module","object","array","b","path","dst","value","require_types","exports","types","s","exports","module","types","json","extend","resolve","exports","module","json","self","exports","module","path","resolve","defaults","opt","exports","module","json","exports","module","types","exports","module","exports","module","unescape","re","match","optional","exports","module","parse","types","tn","token","extend","value","require_common","exports","module","json","file","exports","module","exports","module","exports","module","require_descriptor","exports","module","patterns","j","ks","set","ns","file","match","to","k","exports","module","exports","module","require_type","exports","module","fs","path","exports","exports","IdempotencyLevel","json","exports","timestamp","date","_a","_e","exports","CompressionAlgorithms","exports","exports","output","resolve","error","_a","exports","exports","exports","exports","splitPath","hostname","_a","error","metadata","exports","_a","error","exports","exports","_a","exports","_a","hostname","exports","hostname","_a","resolve","ReadState","exports","os","_a","error","cb","exports","error","_a","duration","success","resolve","errorHandler","_e","_b","exports","exports","_a","global","splitPath","hostname","_a","error","code","details","exports","_a","config","exports","exports","_a","error","exports","exports","_a","_e","error","exports","exports","error","_a","path","exports","_a","exports","duration","match","exports","_a","error","exports","_a","match","output","resolve","error","custom","_e","success","resolve","error","port","path","_b","_c","duration","_a","exports","exports","exports","j","_a","fs","config","exports","exports","exports","path","exports","path","_a","exports","exports","_a","b","b","j","node","exports","exports","b","_a","exports","logger","exports","decode","encode","failure","k","v","map","error","exports","exports","path","isValid","module","error","exports","require_aspromise","exports","module","resolve","params","offset","require_base64","exports","base64","string","p","encode","i","j","b","decode","require_eventemitter","exports","module","EventEmitter","emit","require_float","exports","module","le","lo","hi","require_utf8","exports","string","require_pool","exports","module","pool","size","require_longbits","exports","module","lo","hi","hash","require_minimal","exports","isObject","Buffer","hash","merge","newError","i","require_writer","exports","module","base64","create","lo","hi","p","finish","shared","require_writer_buffer","exports","module","require_reader","exports","module","create","buffer","b","array","k","j","require_reader_buffer","exports","module","require_service","exports","module","self","err","require_rpc","exports","require_roots","exports","module","require_index_minimal","exports","require_patterns","exports","patterns","require_codegen","exports","module","patterns","require_fs","exports","module","fs","require_fetch","exports","module","fetch","fs","require_path","exports","path","isAbsolute","normalize","resolve","require_namespace","exports","module","json","array","ns","object","define","path","require_mapfield","exports","module","types","json","resolve","require_method","exports","module","json","resolve","require_service","exports","module","json","object","method","require_message","exports","module","encode","decode","object","require_decoder","exports","module","types","require_verifier","exports","module","j","require_converter","exports","types","require_wrappers","exports","object","require_type","exports","module","json","object","types","require_root","exports","module","parse","json","self","finish","cb","filename","process","resolved","i","fetch","source","object","j","require_util","exports","module","object","array","b","path","dst","value","require_types","exports","types","s","require_field","exports","module","types","json","extend","resolve","require_oneof","exports","module","json","self","require_object","exports","module","path","resolve","defaults","opt","require_enum","exports","module","json","require_encoder","exports","module","types","require_index_light","exports","module","exports","module","exports","module","require_root","exports","module","exports","module","require_aspromise","exports","module","resolve","params","offset","require_base64","exports","base64","string","p","encode","i","j","b","decode","require_eventemitter","exports","module","EventEmitter","emit","require_float","exports","module","le","lo","hi","require_utf8","exports","string","require_pool","exports","module","pool","size","require_longbits","exports","module","lo","hi","hash","require_minimal","exports","isObject","Buffer","hash","merge","newError","i","require_writer","exports","module","base64","create","lo","hi","p","finish","shared","require_writer_buffer","exports","module","require_reader","exports","module","create","buffer","b","array","k","j","require_reader_buffer","exports","module","require_service","exports","module","self","err","require_rpc","exports","require_roots","exports","module","require_index_minimal","exports","require_patterns","exports","patterns","require_codegen","exports","module","patterns","require_fs","exports","module","fs","require_fetch","exports","module","fetch","fs","require_path","exports","path","isAbsolute","normalize","resolve","require_namespace","exports","module","json","array","ns","object","define","path","require_mapfield","exports","module","types","json","resolve","require_method","exports","module","json","resolve","require_service","exports","module","json","object","method","require_message","exports","module","encode","decode","object","require_decoder","exports","module","types","require_verifier","exports","module","j","require_converter","exports","types","require_wrappers","exports","object","require_type","exports","module","json","object","types","require_root","exports","module","parse","json","self","finish","cb","filename","process","resolved","i","fetch","source","object","j","require_util","exports","module","object","array","b","path","dst","value","require_types","exports","types","s","require_field","exports","module","types","json","extend","resolve","require_oneof","exports","module","json","self","require_object","exports","module","path","resolve","defaults","opt","require_enum","exports","module","json","require_encoder","exports","module","types","require_index_light","exports","module","require_light","exports","module","exports","module","s","map","k","v","mo","ki","j","path","match","json","custom","url","exports","record","exports","claim","raw","it","j","claim","exports","p","exports","resolve","exports","exports","exports","p","m","k","v","exports","visit","failure","exports","hostname","match","scheme","port","exports","match","exports","exports","exports","exports","next","status","require_package","exports","module","exports","exports","_a","_e","exports","Connection","k","v","resolve","exports","exports","payload","_","v","k","exports","raw","failure","err","exports","exports","input","exports","input","g","v","exports","exports","exports","exports","exports","validate","uuid","require_parse","exports","parse","uuid","v","require_stringify","exports","uuid","exports","exports","node","exports","uuid","exports","exports","version","hash","exports","exports","exports","exports","exports","exports","exports","uuid","exports","exports","version","uuid","exports","exports","_a","_e","input","options","describe","raw","exports","exports","_a","exports","input","pb","input","raw","exports","exports","exports","f","exports","exports","input","resolve","exports","failure","input","output","raw","exports","set","exports","_a","Client","exports","exports","required","path","b","raw","import_crypto","hash","path","p","candidates","import_fs","import_os","import_path","path","raw","hex","file","import_crypto","import_fs","import_os","import_path","json","require_constants","exports","module","exports","module","output","exports","module","exports","module","PerMessageDeflate","data","exports","module","exports","module","PerMessageDeflate","Receiver","cb","error","exports","module","PerMessageDeflate","Sender","merge","cb","_","exports","module","Event","CloseEvent","ErrorEvent","MessageEvent","error","exports","module","parse","extension","k","v","exports","module","EventEmitter","randomBytes","createHash","Readable","URL","PerMessageDeflate","Receiver","Sender","addEventListener","parse","WebSocket","cb","key","exports","module","WebSocket","createWebSocketStream","ws","error","err","open","finish","exports","module","parse","protocol","exports","module","EventEmitter","createHash","extension","PerMessageDeflate","subprotocol","WebSocket","WebSocketServer","cb","version","ws","map","WebSocket","b","k","f","g","m","p","u","q","v","A","F","B","z","C","J","G","N","O","P","L","U","K","exports","exports","error","require_fs","exports","require_path","exports","os","path","exports","module","match","exports","module","open","check","exports","module","exports","node","require_stringify","exports","module","node","output","exports","module","exports","module","cacheKey","b","max","intersection","string","integer","exports","module","isObject","transform","input","b","v","exports","module","compile","node","output","exports","module","node","p","q","require_constants","exports","module","require_parse","exports","module","parse","input","node","open","index","exports","module","compile","parse","input","output","require_constants","exports","module","path","require_utils","exports","path","match","input","output","exports","module","input","require_parse","exports","module","constants","v","input","j","b","match","branch","parse","opts","value","output","literal","open","m","esc","rest","source","exports","module","path","parse","constants","isObject","input","state","match","output","patterns","p","require_picomatch","exports","module","exports","module","v","patterns","omit","match","p","input","exports","path","DOUBLE_SLASH_RE","patterns","basename","b","pattern","relative","isAbsolute","exports","module","pipe","require_stream","exports","merge","error","require_string","exports","input","require_utils","exports","array","fs","path","string","exports","input","patterns","exports","path","lstat","stat","error","exports","path","lstat","stat","error","require_fs","exports","fs","exports","fs","exports","stat","path","statSync","exports","module","promise","cb","exports","module","queueMicrotask","cb","require_constants","exports","require_fs","exports","require_utils","exports","fs","require_common","exports","b","require_async","exports","readdir","path","error","require_sync","exports","readdir","error","require_fs","exports","fs","require_settings","exports","path","fs","require_out","exports","path","exports","module","exports","module","errorHandler","self","error","context","cb","p","resolve","require_common","exports","error","b","require_reader","exports","require_async","exports","error","require_async","exports","error","require_stream","exports","error","require_sync","exports","error","require_sync","exports","require_settings","exports","path","require_out","exports","require_reader","exports","path","error","require_stream","exports","patterns","error","resolve","require_async","exports","resolve","error","patterns","exports","exports","patterns","match","exports","patterns","exports","patterns","require_error","exports","error","require_entry","exports","exports","path","require_async","exports","require_stream","exports","error","require_sync","exports","patterns","error","require_sync","exports","require_settings","exports","fs","os","require_out","exports","module","FastGlob","patterns","posix","escapePath","convertPathToPattern","win32","input","import_promises","import_node_path","error","f","path","presolve","basename","pjoin","prelative","psep","path","fs_watch","error","import_node_fs","import_promises","import_node_os","isWindows","osType","set","rawEmitter","listener","basename","file","dirname","newStats","at","mt","closer","fsrealpath","resolve","realpath","stats","string","relative","path","patterns","testString","import_node_events","import_node_fs","import_promises","sp","p","promise","isWindows","stats","error","statcb","now","stat","order","b","m","s","ms","getLogger","log","raw","meta","canonicalizeProviderName","LEGACY_CURSOR_PROVIDER","CURSOR_PROVIDER","CLAUDE_CODE_PROVIDER","CODEX_CLI_PROVIDER","p","ts","dirname","join","getShortProjectName","basename","match","configDir","timestamp","uuid","input","output","spawn","createInterface","createReadStream","asString","hash","SUBAGENT_PATH_RE","sep","j","fg","stat","yieldToEventLoop","window","createHash","statSync","extractCodexText","Database","f","homedir","import_fs","import_path","import_pino","import_promises","import_os","import_readline","import_crypto","import_fast_glob","EXCLUDED_SEGMENTS","BATCH_SIZE","DEFAULT_CONFIG_PATH","pino","v","path","total","beforeIndex","fromIndex","build","resolve","w","process","promise","cached","previous","resolvedAccount","provider","extended","map","openSync","readSync","closeSync","raw","record","ms","log","import_meta","f","file","import_fs","import_path","import_url","uuid","b","output","extractCodexText","uuid","timestamp","classify","isCodexInjectedContext","import_fs","raw","spawn","isCodexInjectedContext","cached","raw","s","import_fs","meta","stat","import_path","stat","import_crypto","raw","import_better_sqlite3","import_fs","import_promises","import_path","path","stat","openAsync","yieldToEventLoop","ms","to","cached","s","Database","meta","timestamp","b","run","m","canonicalPath","partial","map","i","s","r","CircularList","Disposable","_maxLength","super","onDeleteEmitter","this","_register","Emitter","onDelete","event","onInsertEmitter","onInsert","onTrimEmitter","onTrim","_array","Array","_startIndex","_length","maxLength","newMaxLength","newArray","Math","min","length","_getCyclicIndex","newLength","index","value","fire","recycle","Error","isFull","pop","start","deleteCount","items","amount","countToTrim","count","offset","set","get","expandListBy","t","n","e","clone","val","depth","clonedObject","isArray","key","u","f","_","p","g","v","hasWriteSyncWarnHappened","CoreTerminal","onScroll","_onScrollApi","_onScroll","ev","position","cols","_bufferService","rows","buffers","options","optionsService","_windowsWrappingHeuristics","MutableDisposable","_onBinary","onBinary","_onData","onData","_onLineFeed","onLineFeed","_onResize","onResize","_onWriteParsed","onWriteParsed","_instantiationService","InstantiationService","OptionsService","setService","IOptionsService","createInstance","BufferService","IBufferService","_logService","LogService","ILogService","coreService","CoreService","ICoreService","coreMouseService","CoreMouseService","ICoreMouseService","unicodeService","UnicodeService","IUnicodeService","_charsetService","CharsetService","ICharsetService","_oscLinkService","OscLinkService","IOscLinkService","_inputHandler","InputHandler","Event","forward","onRequestScrollToBottom","scrollToBottom","onUserInput","_writeBuffer","handleUserInput","onMultipleOptionChange","_handleWindowsPtyOptionChange","buffer","ydisp","markRangeDirty","scrollTop","scrollBottom","WriteBuffer","data","promiseResult","parse","callback","write","maxSubsequentCalls","logLevel","LogLevelEnum","WARN","warn","writeSync","wasUserInput","triggerDataEvent","x","y","isNaN","max","MINIMUM_COLS","MINIMUM_ROWS","resize","eraseAttr","isWrapped","scroll","disp","suppressScrollEvent","scrollLines","pageCount","scrollToTop","disableSmoothScroll","ybase","line","scrollAmount","id","registerEscHandler","registerDcsHandler","registerCsiHandler","ident","registerOscHandler","_setup","reset","windowsPty","rawOptions","buildNumber","backend","windowsMode","_enableWindowsWrappingHeuristics","clear","disposables","push","updateWindowsModeWrappedState","bind","final","toDisposable","d","dispose","b","o","a","k","m","GLEVEL","MAX_PARSEBUFFER_LENGTH","paramToWindowOption","opts","setWinLines","restoreWin","minimizeWin","setWinPosition","setWinSizePixels","raiseWin","lowerWin","refreshWin","setWinSizeChars","maximizeWin","fullscreenWin","getWinState","getWinPosition","getWinSizePixels","getScreenSizePixels","getCellSizePixels","getWinSizeChars","getScreenSizeChars","getIconTitle","getWinTitle","pushTitle","popTitle","WindowsOptionsReportType","$temp","getAttrData","_curAttrData","_coreService","_optionsService","_coreMouseService","_unicodeService","_parser","EscapeSequenceParser","_parseBuffer","Uint32Array","_stringDecoder","StringToUtf32","_utf8Decoder","Utf8ToUtf32","_windowTitle","_iconName","_windowTitleStack","_iconNameStack","DEFAULT_ATTR_DATA","_eraseAttrDataInternal","_onRequestBell","onRequestBell","_onRequestRefreshRows","onRequestRefreshRows","_onRequestReset","onRequestReset","_onRequestSendFocus","onRequestSendFocus","_onRequestSyncScrollBar","onRequestSyncScrollBar","_onRequestWindowsOptionsReport","onRequestWindowsOptionsReport","_onA11yChar","onA11yChar","_onA11yTab","onA11yTab","_onCursorMove","onCursorMove","_onTitleChange","onTitleChange","_onColor","onColor","_parseStack","paused","cursorStartX","cursorStartY","decodedLength","_specialColors","_dirtyRowTracker","DirtyRowTracker","_activeBuffer","onBufferActivate","activeBuffer","setCsiHandlerFallback","params","debug","identifier","identToString","toArray","setEscHandlerFallback","setExecuteHandlerFallback","code","setOscHandlerFallback","action","setDcsHandlerFallback","payload","setPrintHandler","end","print","insertChars","intermediates","scrollLeft","cursorUp","scrollRight","cursorDown","cursorForward","cursorBackward","cursorNextLine","cursorPrecedingLine","cursorCharAbsolute","cursorPosition","cursorForwardTab","eraseInDisplay","prefix","eraseInLine","insertLines","deleteLines","deleteChars","scrollUp","scrollDown","eraseChars","cursorBackwardTab","charPosAbsolute","hPositionRelative","repeatPrecedingCharacter","sendDeviceAttributesPrimary","sendDeviceAttributesSecondary","linePosAbsolute","vPositionRelative","hVPosition","tabClear","setMode","setModePrivate","resetMode","resetModePrivate","charAttributes","deviceStatus","deviceStatusPrivate","softReset","setCursorStyle","setScrollRegion","saveCursor","windowOptions","restoreCursor","insertColumns","deleteColumns","selectProtected","requestMode","setExecuteHandler","C0","BEL","bell","LF","lineFeed","VT","FF","CR","carriageReturn","BS","backspace","HT","tab","SO","shiftOut","SI","shiftIn","C1","IND","NEL","nextLine","HTS","tabSet","OscHandler","setTitle","setIconName","setOrReportIndexedColor","setHyperlink","setOrReportFgColor","setOrReportBgColor","setOrReportCursorColor","restoreIndexedColor","restoreFgColor","restoreBgColor","restoreCursorColor","reverseIndex","keypadApplicationMode","keypadNumericMode","fullReset","setgLevel","selectDefaultCharset","flag","CHARSETS","selectCharset","screenAlignmentPattern","setErrorHandler","state","error","DcsHandler","requestStatusString","Promise","race","res","rej","setTimeout","catch","err","console","_getCurrentLinkId","extended","urlId","result","wasPaused","_logSlowResolvingAsync","DEBUG","prototype","map","call","String","fromCharCode","join","TRACE","trace","split","charCodeAt","clearRange","len","decode","substring","subarray","_preserveStack","viewportEnd","viewportStart","chWidth","charset","screenReaderMode","wraparoundMode","decPrivateModes","wraparound","insertMode","modes","curAttr","bufferRow","lines","markDirty","getWidth","setCellFromCodepoint","precedingJoinState","pos","ch","currentInfo","charProperties","extractWidth","shouldJoin","extractShouldJoin","oldWidth","stringFromCodePoint","addLineToLink","oldRow","oldCol","_eraseAttrData","BufferLine","copyCellsFrom","addCodepointToCell","delta","insertCells","getNullCell","NULL_CELL_CODE","NULL_CELL_WIDTH","hasContent","convertEol","reverseWraparound","_restrictCursor","hasWidth","originalX","nextStop","maxCol","origin","_setCursor","diffToTop","_moveCursor","diffToBottom","param","tabs","prevStop","bg","clearWrap","respectProtect","replaceCells","fill","clearMarkers","j","_eraseInBufferLine","_resetBufferLine","scrollOnEraseInDisplay","currentLine","getTrimmedLength","scrollBackSize","trimStart","row","scrollBottomRowsOffset","scrollBottomAbsolute","splice","getBlankLine","deleteCells","joinState","text","getString","idata","itext","codePointAt","tlength","copyWithin","_is","ESC","term","termName","indexOf","applicationCursorKeys","setgCharset","DEFAULT_CHARSET","cursorBlink","applicationKeypad","activeProtocol","sendFocus","activeEncoding","isCursorHidden","activateAltBuffer","isCursorInitialized","undefined","bracketedPasteMode","synchronizedOutput","activateNormalBuffer","ansi","dm","mouseProtocol","mouseEncoding","cs","active","alt","b2v","color","mode","c1","c2","c3","AttributeData","fromColorRGB","attr","accu","cSpace","advance","hasSubParams","subparams","getSubParams","fg","_updateAttrColor","underlineColor","style","underlineStyle","updateExtended","_processSGR0","l","_processUnderline","_extractColor","savedX","savedY","savedCurAttrData","savedCharset","cursorStyle","isBlinking","top","bottom","second","GET_WIN_SIZE_PIXELS","GET_CELL_SIZE_PIXELS","shift","_savedCharset","slots","idx","spec","exec","parseInt","isValidColorIndex","type","parseColor","slice","trim","uri","_createHyperlink","_finishHyperlink","parsedParams","idParamIndex","findIndex","startsWith","registerLink","_setOrReportSpecialColor","collectAndFlag","scrollRegionHeight","shiftElements","level","cell","CellData","content","yOffset","markAllDirty","isProtected","y1","y2","A","isSafari","majorVersion","userAgent","match","isNode","process","navigator","platform","isFirefox","includes","isLegacyEdge","test","isMac","isIpad","isIphone","isWindows","isLinux","isChromeOS","TaskQueue","_tasks","_i","task","_start","flush","_idleCallback","_cancelCallback","_requestCallback","_process","deadline","taskDuration","longestTask","lastDeadlineRemaining","timeRemaining","deadlineRemaining","performance","now","abs","round","PriorityTaskQueue","_createDeadline","clearTimeout","duration","IdleTaskQueue","window","requestIdleCallback","cancelIdleCallback","constructor","_queue","enqueue","bufferService","lastChar","CHAR_DATA_CODE_INDEX","WHITESPACE_CELL_CODE","ExtendedAttrs","newObj","isInverse","isBold","isUnderline","hasExtendedAttrs","isBlink","isInvisible","isItalic","isDim","isStrikethrough","isOverline","getFgColorMode","getBgColorMode","isFgRGB","isBgRGB","isFgPalette","isBgPalette","isFgDefault","isBgDefault","isAttributeDefault","getFgColor","getBgColor","isEmpty","getUnderlineColor","getUnderlineColorMode","isUnderlineColorRGB","isUnderlineColorPalette","isUnderlineColorDefault","getUnderlineStyle","getUnderlineVariantOffset","underlineVariantOffset","ext","_urlId","_ext","MAX_BUFFER_SIZE","_hasScrollback","markers","_nullCell","fromCharData","NULL_CELL_CHAR","_whitespaceCell","WHITESPACE_CELL_CHAR","WHITESPACE_CELL_WIDTH","_isClearing","_memoryCleanupQueue","_memoryCleanupPosition","_cols","_rows","_getCorrectBufferLength","setupTabStops","hasScrollback","isCursorInViewport","relativeY","correctBufferLength","scrollback","fillAttr","newCols","newRows","nullCell","dirtyMemoryLines","addToY","amountToTrim","_isReflowEnabled","_reflow","_batchedMemoryCleanup","normalRun","counted","cleanupMemory","_reflowLarger","_reflowSmaller","reflowCursorLine","toRemove","reflowLargerGetLinesToRemove","newLayoutResult","reflowLargerCreateNewLayout","reflowLargerApplyNewLayout","layout","_reflowLargerAdjustViewport","countRemoved","viewportAdjustments","toInsert","countToInsert","wrappedLines","unshift","absoluteY","lastLineLength","destLineLengths","reflowSmallerGetNewLineLengths","linesToAdd","trimmedLines","newLines","newLine","destLineIndex","destCol","srcLineIndex","srcCol","cellsToCopy","wrappedLinesIndex","getWrappedLineTrimmedLength","setCell","insertEvents","originalLines","originalLinesLength","originalLineIndex","nextToInsertIndex","nextToInsert","countInsertedSoFar","nextI","insertCountEmitted","lineIndex","trimRight","startCol","endCol","translateToString","first","last","tabStopWidth","clearAllMarkers","marker","Marker","register","onDispose","_removeMarker","Object","freeze","$startIndex","fillCellData","_combined","_extendedAttrs","_data","cp","CHAR_DATA_ATTR_INDEX","CHAR_DATA_CHAR_INDEX","CHAR_DATA_WIDTH_INDEX","combinedData","codePoint","width","attrs","loadCell","byteLength","uint32Cells","keys","extKeys","el","getNoBgTrimmedLength","src","applyInReverse","srcData","srcCombinedKeys","outColumns","chars","endsInNull","followingLineStartsWithWide","oldCols","bufferAbsoluteY","srcTrimmedTineLength","srcRemainingCells","destRemainingCells","countToRemove","nextToRemoveIndex","nextToRemoveStart","countRemovedSoFar","newLayout","newLayoutLines","newLineLengths","cellsNeeded","reduce","c","srcLine","cellsAvailable","oldTrimmedLength","endsWithWide","lineLength","BufferSet","_onBufferActivate","onSpecificOptionChange","_normal","Buffer","fillViewportRows","_alt","inactiveBuffer","normal","obj","setFromCharData","isCombined","getChars","getCode","combined","getAsCharData","DEFAULT_COLOR","DEFAULT_ATTR","DEFAULT_EXT","_id","isDisposed","_disposables","_nextId","_onDispose","disposable","C","C1_ESCAPED","NUL","SOH","STX","ETX","EOT","ENQ","ACK","DLE","DC1","DC2","DC3","DC4","NAK","SYN","ETB","CAN","EM","SUB","FS","GS","RS","US","SP","DEL","PAD","HOP","BPH","NBH","SSA","ESA","HTJ","VTS","PLD","PLU","RI","SS2","SS3","DCS","PU1","PU2","STS","CCH","MW","SPA","EPA","SOS","SGCI","SCI","CSI","ST","OSC","PM","APC","codepoint","_interim","input","target","size","startPos","interim","Uint8Array","byte1","byte2","byte3","byte4","discardInterim","tmp","missing","fourStop","BMP_COMBINING","HIGH_COMBINING","table","version","num","ucs","mid","preceding","wcwidth","createPropertyValue","_action","_callbacks","_pendingData","_bufferOffset","_isSyncWriting","_syncCalls","_didUserInput","chunk","cb","_innerWrite","lastTime","startTime","continuation","queueMicrotask","resolve","then","low","toLowerCase","RGB_REX","base","HASH_REX","adv","bits","pad","toString","s2","PAYLOAD_LIMIT","EMPTY_HANDLERS","_handlers","create","_active","_ident","_handlerFb","_stack","loopPosition","fallThrough","handler","handlerList","handlerIndex","unhook","hook","put","utf32ToString","success","handlerResult","EMPTY_PARAMS","Params","addParam","_handler","_params","_hitLimit","ret","TransitionTable","next","codes","NON_ASCII_PRINTABLE","VT500_TRANSITION_TABLE","blueprint","apply","unused","PRINTABLES","EXECUTABLES","states","setDefault","addMany","add","_transitions","handlers","handlerPos","transition","chunkPos","initialState","currentState","_collect","_printHandlerFb","_executeHandlerFb","_csiHandlerFb","_escHandlerFb","_errorHandlerFb","_printHandler","_executeHandlers","_csiHandlers","_escHandlers","_oscParser","OscParser","_dcsParser","DcsParser","_errorHandler","finalRange","intermediate","finalCode","reverse","clearPrintHandler","_identifier","registerHandler","clearHandler","setHandlerFallback","clearErrorHandler","collect","abort","addSubParam","addDigit","handlersEsc","jj","_state","_put","MAX_VALUE","values","maxSubParamsLength","Int32Array","_subParams","_subParamsLength","_subParamsIdx","Uint16Array","_rejectDigits","_rejectSubDigits","_digitIsSub","newParams","getSubParamsAll","store","cur","_addons","instance","terminal","loadedAddon","_wrappedAddonDispose","activate","_buffer","cursorY","cursorX","viewportY","baseY","BufferLineApiView","_line","startColumn","endColumn","BufferNamespaceApi","_core","_onBufferChange","onBufferChange","BufferApiView","_alternate","alternate","init","provider","versions","activeVersion","isUserScrolling","colsChanged","rowsChanged","_cachedBlankLine","getFg","getBg","topRow","bottomRow","willBufferBeTrimmed","copyFrom","oldYdisp","glevel","_charsets","DEFAULT_PROTOCOLS","NONE","events","restrict","X10","button","ctrl","VT200","DRAG","ANY","eventCode","isSGR","S","DEFAULT_ENCODINGS","DEFAULT","col","SGR","SGR_PIXELS","_protocols","_encodings","_activeProtocol","_activeEncoding","_lastEvent","_wheelPartialScroll","_onProtocolChange","onProtocolChange","name","addProtocol","addEncoding","protocol","encoding","areMouseEventsActive","cellHeight","dpr","deltaY","shiftKey","targetWheelEventPixels","_applyScrollModifier","deltaMode","WheelEvent","DOM_DELTA_PIXEL","floor","DOM_DELTA_PAGE","altKey","ctrlKey","fastScrollSensitivity","scrollSensitivity","_equalEvents","report","triggerBinaryEvent","down","up","drag","move","wheel","e1","e2","pixels","DEFAULT_MODES","DEFAULT_DEC_PRIVATE_MODES","_onUserInput","_onRequestScrollToBottom","disableStdin","scrollOnUserInput","ServiceCollection","entries","_entries","Map","service","has","_services","IInstantiationService","ctor","args","serviceDependencies","getServiceDependencies","sort","serviceArgs","dependency","firstServiceArgPos","logger","traceLogger","_target","descriptor","fn","JSON","stringify","optionsKeyToLogLevel","info","INFO","ERROR","off","OFF","_logLevel","_updateLogLevel","optionalParams","message","_evalLazyOptionalParams","_log","log","DEFAULT_OPTIONS","cursorWidth","cursorInactiveStyle","customGlyphs","drawBoldTextInBrightColors","documentOverride","fastScrollModifier","fontFamily","fontSize","fontWeight","fontWeightBold","ignoreBracketedPasteMode","lineHeight","letterSpacing","linkHandler","smoothScrollDuration","macOptionIsMeta","macOptionClickForcesSelection","minimumContrastRatio","allowProposedApi","allowTransparency","theme","rescaleOverlappingGlyphs","rightClickSelectsWord","wordSeparator","altClickMovesCursor","cancelEvents","overviewRuler","FONT_WEIGHT_OPTIONS","_onOptionChange","onOptionChange","defaultOptions","newValue","_sanitizeAndValidateOption","_setupOptions","listener","eventKey","getter","propName","setter","desc","defineProperty","_entriesWithId","_dataByLinkId","addMarker","entry","_removeMarkerFromLink","castData","_getEntryIdKey","linkId","every","linkData","delete","DI_DEPENDENCIES","serviceRegistry","decorator","arguments","DI_TARGET","createDecorator","IDecorationService","_providers","_onChange","onChange","defaultProvider","UnicodeV6","_activeProvider","precedingInfo","Terminal","_onBell","onBell","_onA11yCharEmitter","_onA11yTabEmitter","cursorYOffset","exports","Permutation","CallbackIterable","ArrayQueue","booleanComparator","numberComparator","CompareResult","tail","array","tail2","arr","equals","one","other","itemEquals","removeFastWithoutKeepingOrder","binarySearch","comparator","binarySearch2","quickSelect","nth","compare","TypeError","pivotValue","random","lower","higher","pivots","groupBy","currentGroup","element","groupAdjacentBy","shouldBeGrouped","item","forEachAdjacent","forEachWithNeighbors","sortedDiff","before","after","splices","removed","added","topStep","topAsync","batch","token","reject","isCancellationRequested","errors_1","CancellationError","coalesce","filter","coalesceInPlace","to","from","isFalsyOrEmpty","isNonEmptyArray","distinct","keyFn","seen","Set","uniqueFilter","firstOrDefault","notFoundValue","lastOrDefault","commonPrefixLength","range","arg","indexer","mapper","insert","remove","arrayInsert","insertIndex","insertArr","concat","shuffle","_seed","rand","seed","sin","temp","pushToStart","pushToEnd","pushMany","mapArrayOrNot","asArray","getRandomElement","insertInto","newItems","getActualStartIndex","compareBy","selector","tieBreakComparators","comparators","item1","item2","isNeitherLessOrGreaterThan","neitherLessOrGreaterThan","reverseOrder","arraysFind_1","compareToKey","high","comp","pushSplice","latest","beforeIdx","afterIdx","beforeElement","afterElement","findFirstIdxMonotonousOrArrLen","startIdx","originalLength","newItemsLength","isLessThan","isLessThanOrEqual","isGreaterThan","greaterThan","lessThan","firstIdx","lastIdx","predicate","endIdx","peek","peekLast","dequeue","removeLast","empty","_callback","iterate","mapFn","_indexMap","compareFn","sortIndices","index1","index2","inverse","inverseIndexMap","findLastIdx","fromIndex","findLastIdxMonotonous","endIdxEx","MonotonousArray","findLast","findLastMonotonous","findFirstMonotonous","findFirstIdxMonotonous","findFirstMax","findLastMax","findFirstMin","findMaxIdx","maxIdx","mapFindFirst","mapped","assertInvariants","_findLastMonotonousLastIdx","_prevFindLastPredicate","_a","SetWithKey","groupFn","diffSets","diffMaps","intersection","setA","setB","elem","Symbol","toStringTag","toKey","_map","callbackfn","thisArg","forEach","iterator","BugIndicatingError","ErrorNoTelemetry","ExpectedError","NotSupportedError","NotImplementedError","ReadonlyError","errorHandler","ErrorHandler","setUnexpectedErrorHandler","newUnexpectedErrorHandler","isSigPipeError","cast","syscall","toUpperCase","onUnexpectedError","isCancellationError","onUnexpectedExternalError","transformErrorForSerialization","$isError","stack","stacktrace","noTelemetry","isErrorNoTelemetry","transformErrorFromSerialization","canceled","canceledName","illegalArgument","illegalState","getErrorMessage","listeners","unexpectedErrorHandler","_removeListener","getUnexpectedErrorHandler","emit","isExpected","msg","setPrototypeOf","ValueWithChangeEvent","Relay","EventBufferer","DynamicListEventMultiplexer","EventMultiplexer","MicrotaskEmitter","DebounceEmitter","PauseableEmitter","AsyncEmitter","createEventDeliveryQueue","ListenerRefusalError","ListenerLeakError","EventProfiling","setGlobalLeakWarningThreshold","oldValue","_globalLeakWarningThreshold","functional_1","lifecycle_1","linkedList_1","stopwatch_1","once","thisArgs","didFire","snapshot","emitter","onWillAddFirstListener","onDidRemoveLastListener","debounce","merge","delay","leading","flushOnListenerRemove","leakWarningThreshold","subscription","output","handle","doFire","numDebouncedCalls","_output","onWillRemoveListener","None","defer","each","signal","any","combinedDisposable","initial","accumulate","latch","cache","firstCall","shouldEmit","isT","flushAfterTimeout","onDidAddFirstListener","chain","sythensize","ChainableSynthesis","evaluate","HaltChainable","steps","step","fromNodeEventEmitter","eventName","on","removeListener","fromDOMEventEmitter","addEventListener","removeEventListener","toPromise","fromPromise","promise","finally","runAndSubscribe","EmitterObserver","_observable","_counter","_hasChanged","addObserver","removeObserver","_change","reportChanges","fromObservable","obs","fromObservableLight","observable","didChange","observer","beginUpdate","endUpdate","handlePossibleChange","handleChange","DisposableStore","all","_idPool","listenerCount","invocationCount","elapsedOverall","durations","_stopWatch","StopWatch","stop","elapsed","LeakageMonitor","threshold","padStart","_warnCountdown","_stacks","topStack","topCount","getMostFrequentStack","Stacktrace","UniqueContainer","_size","_options","_leakageMon","onListenerError","_perfMon","_profName","_deliveryQueue","deliveryQueue","_disposed","current","_listeners","_event","tuple","contained","removeMonitor","ceil","check","EventDeliveryQueuePrivate","adjustDeliveryQueue","dq","_deliver","_deliverQueue","hasListeners","promiseJoin","_asyncDeliveryQueue","LinkedList","thenables","waitUntil","isFrozen","allSettled","status","reason","isPaused","_isPaused","_eventQueue","_mergeFn","pause","resume","_delay","_handle","_queuedEvents","onFirstListenerAdd","onLastListenerRemove","createSingleCallFunction","onAddItem","onRemoveItem","getEvent","_store","multiplexer","itemListeners","DisposableMap","addItem","deleteAndDispose","reduceData","reducedResult","listening","inputEvent","inputEventListener","ConstValueWithChangeEvent","_value","_onDidChange","onDidChange","fnDidRunCallback","_this","didCall","Iterable","is","thing","_empty","single","wrap","iterableOrElement","iterable","done","some","find","flatMap","iterables","reducer","initialValue","consume","atMost","Number","POSITIVE_INFINITY","consumed","asyncToArray","async","ImmortalReference","AsyncReferenceCollection","ReferenceCollection","SafeDisposable","RefCountedDisposable","MandatoryMutableDisposable","DisposableTracker","setDisposableTracker","tracker","disposableTracker","trackDisposable","markAsDisposed","markAsSingleton","singleton","isDisposable","disposeIfDisposable","parent","children","child","setParent","disposeOnReturn","arrays_1","collections_1","map_1","iterator_1","livingDisposables","source","isSingleton","getDisposableData","cacheValue","getRootParent","getTrackedDisposables","rootParentCache","maxReported","preComputedLeaks","uncoveredLeakingObjs","leakingObjects","leakingObjsSet","getStackTracePath","leaking","replace","linesToRemove","regexp","stackTraceStarts","SetMap","stackTracePath","stackTraceFormattedLines","prevStarts","continuations","cont","leaks","details","setParentOfDisposable","errors","AggregateError","self","DISABLE_DISPOSED_WARNING","_toDispose","_isDisposed","clearAndLeak","_disposable","acquire","release","unset","isset","references","reference","counter","object","createReferencedObject","destroyReferencedObject","referenceCollection","ref","clearAndDisposeAll","skipDisposeOnOverwrite","Node","Undefined","prev","_first","_last","node","_insert","atTheEnd","newNode","oldLast","oldFirst","didRemove","_remove","anchor","Touch","BidirectionalMap","CounterSet","getOrSet","mapToString","setToString","mapsStrictEqualIgnoreOrder","_m1","_m2","hasPerformanceNow","globalThis","highResolution","_now","Date","_startTime","_stopTime","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","module","__webpack_modules__","CONSTRUCTOR_ONLY_OPTIONS","_addonManager","AddonManager","_publicOptions","_checkReadonlyOptions","_checkProposedApi","parser","ParserApi","unicode","UnicodeApi","mouseTrackingMode","applicationCursorKeysMode","applicationKeypadMode","originMode","reverseWraparoundMode","sendFocusMode","synchronizedOutputMode","columns","_verifyIntegers","registerMarker","scrollPages","scrollToLine","addon","loadAddon","Infinity","m","f","m","BOX_ONLY_RE","OPTION_RE","m","raw","q","m","BOX_ONLY_RE","ASK_MENU_FOOTER_RE","m","NUMBERED_RE","ENTER","exports","module","xe","ye","Oe","Je","be","f","N","De","K","we","Ce","z","A","j","M","_","J","R","H","m","k","W","Ke","fe","B","b","Te","Fe","w","I","V","s","u","q","G","p","g","O","F","$","S","L","T","X","C","v","At","jt","tt","et","rt","kt","lt","Bt","_t","at","P","ot","it","Et","nt","st","U","Gt","ve","Z","dt","Y","$t","ut","pt","Ht","ct","qt","ht","mt","Nt","ft","vt","Ft","It","gt","xt","Lt","yt","Ot","Jt","bt","Dt","wt","Ct","St","Pt","Mt","Kt","Tt","Xt","Rt","Vt","Ut","Yt","zt","Wt","Zt","Qt","Ae","je","te","ee","re","ke","le","Be","_e","ae","oe","ie","Ee","ne","se","Ge","de","$e","ue","pe","He","ce","qe","he","me","Ne","Xe","Re","Ve","Ue","Ye","ze","We","Ze","Qe","Ar","jr","tr","er","rr","kr","lr","Br","_r","ar","or","ir","Er","nr","sr","Gr","dr","$r","ur","pr","Hr","cr","qr","hr","mr","Nr","fr","vr","Fr","Ir","gr","xr","Lr","yr","Or","Jr","br","Dr","wr","Cr","Sr","Pr","Mr","Kr","Tr","Xr","Rr","Vr","Ur","Yr","zr","Wr","Zr","Qr","pl","Q","Ie","ge","Me","Pe","exports","module","require_lib","exports","module","array","resolve","exports","module","require_encoder","exports","module","btoa","self","j","u","k","nr","bs","z2","fDCTQuant","m","p","quality","g","b","duration","encode","require_decoder","exports","module","k","j","p","q","node","n","component","rs","s","z","decode","mcu","v","R","qt","i","sample","path","parse","length","array","frame","maxH","maxV","componentId","Y","Cb","Cr","K","C","M","Ye","G","B","exports","module","encode","decode","exports","module","exports","j","exports","module","exports","module","exports","module","require_constants","exports","module","exports","module","j","require_parser","exports","module","constants","exports","exports","module","exports","module","exports","module","constants","exports","module","exports","module","constants","exports","module","constants","exports","module","assert","self","error","exports","module","exports","exports","module","inflatedData","exports","module","constants","exports","parse","exports","exports","module","require_lib","exports","module","decode","encode","exports","module","decode","exports","transform","exports","module","array","transform","exports","module","parseDate","ms","date","exports","module","extend","exports","module","extend","raw","parse","exports","module","input","output","k","exports","module","array","parseDate","string","p","exports","module","exports","module","bits","parseDate","value","elementType","parse","array","i","exports","module","exports","exports","module","require_utils","exports","module","defaults","isDate","date","config","escapeIdentifier","escapeLiteral","require_utils","exports","module","randomBytes","sha256","string","hash","b","exports","module","exports","module","crypto","_","error","b","exports","module","types","TypeOverrides","exports","module","parse","config","hostname","fs","v","exports","module","defaults","parse","config","cb","exports","module","types","Result","match","v","exports","module","EventEmitter","Result","Query","config","exports","DatabaseError","string","exports","password","parse","query","types","config","string","describe","exports","exports","exports","exports","parse","resolve","exports","require_stream","exports","module","getStream","getSecureStream","require_connection","exports","module","EventEmitter","parse","Connection","config","self","error","stream","exports","module","StringDecoder","transform","cb","error","self","exports","module","path","file","cb","require_lib","exports","module","path","fs","cb","file","stat","st","require_client","exports","module","EventEmitter","TypeOverrides","Query","defaults","Connection","crypto","Client","config","self","error","resolve","cb","exports","module","EventEmitter","promisify","Promise","cb","resolve","pool","Pool","Client","f","client","response","err","require_query","exports","module","EventEmitter","config","resolve","self","require_client","exports","module","TypeOverrides","EventEmitter","Client","config","cb","self","err","resolve","error","q","require_native","exports","module","require_lib","exports","module","Client","defaults","Connection","Result","Pool","TypeOverrides","DatabaseError","escapeIdentifier","escapeLiteral","clientConstructor","esm_exports","init_esm","pg","import_better_sqlite3","import_os","import_path","Database","path","import_fs","import_os","import_path","run","s","import_crypto","import_fs","import_path","promise","input","path","resolve","ts","watch","toPublicSession","s","import_crypto","import_fs","import_path","OUTPUT_BUFFER_MAX","INPUT_HISTORY_MAX","QUIET_DETECT_MS","SUBMIT_BYTES","promise","input","resolve","ts","watch","raw","s","resolve","raw","input","COMPOSER_RULE_RE","input","toPublicSession","s","import_crypto","import_fs","import_path","OUTPUT_BUFFER_MAX","INPUT_HISTORY_MAX","QUIET_DETECT_MS","SUBMIT_BYTES","promise","path","resolve","ts","m","window","esc","import_path","input","resolve","_","finish","mkdirSync","rmSync","dirname","import_node_os","import_node_path","exports","module","nacl","X","Y","I","vn","xi","yi","p","k","u","m","b","z","s","sn","mac","g","f","v","q","j","A","Z","M","b2","S","K","zi","L","crypto","exports","module","f","s","b","require_constants","exports","module","exports","module","exports","module","re","R","exports","module","exports","module","b","exports","module","re","version","m","b","match","require_parse","exports","module","parse","version","er","exports","module","parse","version","v","exports","module","parse","version","s","exports","module","version","er","exports","module","parse","exports","module","exports","module","exports","module","exports","module","parse","version","exports","module","b","exports","module","b","exports","module","b","exports","module","b","exports","module","b","exports","module","b","exports","module","gt","b","exports","module","lt","b","exports","module","b","exports","module","b","exports","module","b","exports","module","b","exports","module","gt","lt","b","exports","module","parse","re","version","match","build","exports","module","parse","constants","version","exports","module","LRUCache","exports","module","k","cached","hr","re","version","er","M","m","p","z","_","pr","fb","to","set","exports","module","re","m","version","er","exports","module","version","er","exports","module","exports","module","er","v","exports","module","er","v","exports","module","gt","require_valid","exports","module","er","exports","module","gt","lt","version","exports","module","version","exports","module","version","exports","module","exports","module","set","v","b","version","exports","module","gt","lt","b","require_semver","exports","module","constants","parse","gt","lt","exports","module","exports","module","exports","module","exports","module","j","exports","module","exports","module","j","exports","module","exports","module","j","exports","module","exports","module","cs","j","v","z","s","require_main","exports","module","input","cb","qrcode","output","row","error","import_node_child_process","uidScope","BREW_LAUNCHD_LABEL","import_node_child_process","raw","log","import_node_fs","import_node_path","bootoutAgent","bootstrapAgent","getAgentPid","getLogPaths","isAgentLoaded","kickstartAgent","ps","import_node_child_process","init_platform","m","Database","file","import_node_fs","import_node_process","import_promises","rememberAns","path","log","p","import_node_fs","import_node_path","resolve","isPidAlive","log","m","import_node_net","init_platform","import_node_child_process","io","finish","raw","import_node_path","stdin","url","ws","raw","fingerprint","resolve","import_node_crypto","ts","registry","import_node_process","import_node_util","cmd","b","output","hide","str","b","j","process","config","m","fs","path","childProcess","unknown","v","promise","option","s","error","match","import_node_fs","import_node_path","path","raw","parseYaml","import_node_fs","import_node_path","path","import_os","import_crypto","import_events","import_fs","import_promises","import_http","import_os","import_path","v","import_node_path","file","record","path","match","j","cacheKey","url","path","v","url","path","raw","k","v","v2","object","path","p","m","clone","url","input","path","path2","b","node","k","path","m","j","_","path","k","b","p","re","m","path2","map","path","Node","_Node","path","p","node","m","j","_","b","Node","path","Hono","import_crypto","import_crypto","own","import_crypto","path","q","m","own","version","p","raw","Context","s","window","at","own","b","path","p","registry","presented","required","log","resolve","seal","cb","registry","body","headers","k","v","record","out","required","raw","import_os","input","p","b","import_node_fs","import_node_path","cached","v","resolve","raw","Hono","p","ALREADY_HANDLED","Hono","url","v","resolve","Hono","raw","fingerprint","v","readRawBody","resolve","Hono","raw","ALREADY_HANDLED","alreadyHandled","Hono","url","log","Hono","import_fs","path","worst","v","k","import_node_fs","import_node_os","cached","os","Hono","import_crypto","raw","raw","own","re","rs","raw","v","own","k","import_node_child_process","import_node_crypto","import_os","log","base64url","input","log","resolve","raw","resolve","raw","readRawBody","b","Hono","s","platform","readRawBody","ua","log","resolve","own","raw","v","registry","Hono","Hono","import_node_fs","import_node_path","logger","p","Hono","error","ALREADY_HANDLED","alreadyHandled","Hono","import_node_crypto","readRawBody","resolve","crypto","Hono","ALREADY_HANDLED","alreadyHandled","Hono","url","import_child_process","output","match","cached","file","resolve","stdout","version","b","parse","v","pb","Hono","ALREADY_HANDLED","alreadyHandled","Hono","url","ALREADY_HANDLED","alreadyHandled","Hono","url","CloseEvent: typeof globalThis.CloseEvent","CONNECTION_SYMBOL_KEY: unique symbol","WebSocketServer","ws","resolve","url","env: {\n          incoming: IncomingMessage\n          outgoing: undefined\n          [CONNECTION_SYMBOL_KEY]?: symbol\n        }","messagesReceivedInStarting: [data: WebSocket.RawData, isBinary: boolean][]","ctx: WSContext<WebSocket>","data","error","log","Hono","refusal","ws","raw","ALREADY_HANDLED","k","Hono","ua","ms","qs","import_fs","import_path","import_readline","m","b","at","import_node_fs","cached","resolve","finish","path","input","raw","q","ms","ts","import_fs","import_os","import_path","import_fs","import_path","match","f","b","fsWatch","s","import_node_crypto","timestamp","import_fs","json","url","order","s","p","readBody","resolve","raw","meta","url","total","adapted","json","m","uuid","cached","resolve","filePath","s","availability","messagesPayload","b","readBody","q","import_crypto","import_fs","import_path","import_crypto","crypto","nanoid","log","log","nanoid","import_node_fs","import_node_path","v","nanoid","import_promises","import_path","b","s","pool","import_child_process","import_os","import_path","raw","readGitBranch","resolve","stdout","match","output","import_node_crypto","settle","b","m","DOWN","ENTER","q","raw","import_child_process","resolve","stdout","platform","run","import_fs","raw","input","platform","p","raw","import_crypto","import_promises","import_path","input","heicConvert","raw","resolve","url","json","cached","readBody","body","input","meta","prior","option","output","url","import_fs","import_path","import_url","import_meta","getMigrationsDir","runMigrations","pool","f","file","url","config","pg","Pool","import_crypto","path","input","raw","v","import_fs","s","meta","import_crypto","record","import_node_child_process","import_fs","import_os","import_path","date","date","date","timestamp","time","array","b","path","b","import_fs","import_os","import_path","ms","meta","canonicalPath","p","m","settle","promise","resolve","s","naclUtil","nacl","import_fs","import_fs","import_os","import_path","f","file","url","b","path","required","open","ts","meta","url","ws","raw","import_crypto","import_fs","import_fs","import_os","import_path","path","import_fs","import_path","p","f","b","log","m","fingerprint","import_fs","import_promises","error","path","st","s","import_fs","import_node_child_process","import_os","output","match","resolve","error","stdout","run","platform","dt","os","raw","m","p","to","log","raw","log","open","log","error","log","log","open","normalizeContent","raw","q","b","input","asRecord","p","fs","join","stat","b","import_fs","currentBootToken","v","resolve","map","s","b","order","log","raw","own","ws","memo","json","raw","v","config","uuid","TemporalClient","ws","url","s","at","json","runMigrations","m","resolve","ALREADY_HANDLED","ct","readBody","ts","map","cached","p","broadcast","path","raw","semver","import_node_fs","url","import_node_crypto","import_node_fs","import_node_path","import_promises","raw","hash","stat","import_node_os","import_node_path","version","import_node_child_process","import_node_util","label","stdout","output","resolve","import_node_fs","import_node_path","version","import_node_fs","import_node_path","import_semver","version","path","semver","b","import_node_fs","import_events","import_fs","import_node_events","import_node_stream","import_node_path","import_node_fs","import_path","import_buffer","import_node_crypto","import_promises","proc","isStream","s","Minipass","Stream","isReadable","isWritable","EventEmitter","EOF","MAYBE_EMIT_END","EMITTED_END","EMITTING_END","EMITTED_ERROR","CLOSED","READ","FLUSH","FLUSHCHUNK","ENCODING","DECODER","FLOWING","PAUSED","RESUME","BUFFER","PIPES","BUFFERLENGTH","BUFFERPUSH","BUFFERSHIFT","OBJECTMODE","DESTROYED","ERROR","EMITDATA","EMITEND","EMITEND2","ASYNC","ABORT","ABORTED","SIGNAL","DATALISTENERS","DISCARDED","defer","fn","nodefer","isEndish","ev","isArrayBufferLike","b","isArrayBufferView","Pipe","src","dest","opts","_er","PipeProxyErrors","er","isObjectModeOptions","o","isEncodingOptions","args","options","StringDecoder","signal","_enc","_om","a","_","chunk","encoding","cb","n","ret","c","noDrain","ended","p","handler","h","data","buf","resolve","reject","stopped","stop","res","onerr","ondata","onend","ondestroy","value","rej","next","wc","writev","fs","_autoClose","_close","_ended","_fd","_finished","_flags","_flush","_handleChunk","_makeBuf","_mode","_needDrain","_onerror","_onopen","_onread","_onwrite","_open","_path","_pos","_queue","_read","_readSize","_reading","_remain","_size","_write","_writing","_defaultFlag","_errored","ReadStream","path","opt","fd","br","ReadStreamSync","threw","WriteStream","EE","defaultFlag","enc","bw","iovec","WriteStreamSync","argmap","isSyncFile","isAsyncFile","isSyncNoFile","isAsyncNoFile","isFile","dealiasKey","k","d","dealias","result","key","v","makeCommand","syncFile","asyncFile","syncNoFile","asyncNoFile","validate","opt_","entries","realZlibConstants","realZlib","constants","OriginalBufferConcat","Buffer","desc","noop","passthroughBufferConcat","makeNoOp","_superWrite","ZlibError","err","origin","_flushFlag","ZlibBase","#sawError","#ended","#flushFlag","#finishFlushFlag","#fullFlushFlag","#handle","#onError","mode","assert","flushFlag","nativeHandle","originalNativeClose","originalClose","writeReturn","r","i","Zlib","#level","#strategy","level","strategy","origFlush","Gzip","#portable","Unzip","Brotli","BrotliCompress","BrotliDecompress","Zstd","ZstdCompress","ZstdDecompress","encode","num","encodeNegative","encodePositive","flipped","byte","onesComp","twosComp","parse","pre","pos","twos","len","sum","f","types_exports","__export","code","isCode","isName","name","normalFsTypes","kv","notNegative","Header","#type","off","ex","gex","#slurp","t","decString","isNormalFS","exForFields","gexForFields","decNumber","decDate","prefix","prefixSize","split","splitPrefix","encString","encNumber","encDate","type","pp","root","pathModule","size","numToDate","decSmallNumber","nanUndef","MAXNUM","encSmallNumber","octalString","padOctal","str","date","NULLS","Pax","_Pax","obj","global","body","bodyLen","bufLen","basename","field","byteLen","digits","g","merge","parseKV","parseKVLine","set","line","platform","normalizeWindowsPath","ReadEntry","header","writeLen","warnMethod","self","message","maxMetaEntrySize","gzipHeader","zstdHeader","ZIP_HEADER_LEN","STATE","WRITEENTRY","READENTRY","NEXTENTRY","PROCESSENTRY","EX","GEX","META","EMITMETA","QUEUE","ENDED","EMITTEDEND","EMIT","UNZIP","CONSUMECHUNK","CONSUMECHUNKSUB","CONSUMEBODY","CONSUMEMETA","CONSUMEHEADER","CONSUMING","BUFFERCONCAT","MAYBEEND","WRITING","DONE","SAW_VALID_ENTRY","SAW_NULL_BLOCK","SAW_EOF","CLOSESTREAM","MAX_DECOMPRESSION_RATIO","COMPRESSEDBYTESREAD","DECOMPRESSEDBYTESREAD","CHECKDECOMPRESSIONRATIO","Parser","isTBR","isTZST","position","entry","go","re","extra","error","u","ratio","isZstd","maybeBrotli","have","length","stripTrailingSlashes","slashesStart","onReadEntryFunction","onReadEntry","filesFilter","files","map","filter","MAX","mapHas","file","depth","m","dirname","listFileSync","stat","readSize","read","bytesRead","listFile","_files","stream","list","modeFix","isDir","portable","isAbsolute","win32","stripAbsolutePath","parsed","raw","win","char","toWin","toRaw","decode","prefixPath","maxReadSize","PROCESS","FILE","DIRECTORY","SYMLINK","HARDLINK","HEADER","LSTAT","ONLSTAT","ONREAD","ONREADLINK","OPENFILE","ONOPENFILE","CLOSE","MODE","AWAITDRAIN","ONDRAIN","PREFIX","WriteEntry","#hadError","pathWarn","stripped","cs","getType","block","linkpath","linkKey","offset","WriteEntrySync","WriteEntryTar","readEntry","Yallist","_Yallist","item","walker","node","prev","head","tail","l","push","unshift","thisp","initial","acc","arr","from","to","start","deleteCount","nodes","insertAfter","inserted","Node","PackJob","absolute","ONSTAT","PENDINGLINKS","CURRENT","PROCESSING","PROCESSJOB","JOBS","JOBDONE","ADDFSENTRY","ADDTARENTRY","STAT","READDIR","ONREADDIR","PIPE","ENTRY","ENTRYOPT","WRITEENTRYCLASS","WRITE","Pack","zip","job","pending","w","sc","rc","msg","base","source","PackSync","createFileSync","addFilesSync","createFile","promise","addFilesAsync","createSync","createAsync","create","_opt","isWindows","O_CREAT","O_NOFOLLOW","O_TRUNC","O_WRONLY","UV_FS_O_FILEMAP","fMapEnabled","fMapLimit","fMapFlag","noFollowFlag","getWriteFlag","lchownSync","uid","gid","chown","cpath","chownrKid","child","chownr","children","errState","then","chownrKidSync","chownrSync","e","CwdError","SymlinkError","symlink","checkCwd","dir","st","mkdir","umask","needChmod","doChown","preserve","unlink","cwd","done","created","fsp","made","parts","mkdir_","part","onmkdir","statEr","checkCwdSync","ok","mkdirSync","normalizeCache","cache","normalizeUnicode","getDirs","join","PathReservations","#queues","#reservations","#running","paths","dirs","q","#run","#getQueues","#clear","q0","ONENTRY","CHECKFS","CHECKFS2","ISREUSABLE","MAKEFS","LINK","ENSURE_NO_SYMLINK","UNSUPPORTED","CHECKPATH","STRIPABSOLUTEPATH","MKDIR","ONERROR","PENDING","PEND","UNPEND","MAYBECLOSE","SKIP","DOCHOWN","UID","GID","CHECKED_CWD","DEFAULT_MAX_DEPTH","unlinkFile","randomBytes","unlinkFileSync","uint32","Unpack","entryDir","resolved","linkparts","aRoot","pRoot","fullyDone","actions","abs","atime","mtime","er2","tx","onError","parent","afterMakeParent","lstatEr","afterChmod","link","callSync","UnpackSync","mkParent","oner","closeError","futimeser","fchowner","_entry","linkSync","extractFileSync","extractFile","extract","replaceSync","headBuf","POSITION","bufPos","bytes","entryBlockSize","streamSync","replaceAsync","getPos","cb_","onread","flag","onopen","replace","update","mtimeFilter","import_node_fs","import_node_path","check","log","meta","resolve","qrcode","url","qr","fingerprint","log","import_node_child_process","import_node_fs","init_platform","log","file","fs","f","isWindows","program","resolve","s","log","program","checkSqliteAbi","raw","f","error","truncateOversizedLogs","detectConflictingAgents","formatConflictMessage","interactivePermissionModePrompt","interactiveAutoResumePrompt","resolveDevPlan","detectProdActive","isPortInUse","findFreePort","takeoverProd","interactivePrompt","getGitToplevel","v","rmSync","existsSync","join","ConversationCache","PushRepository","RuntimeStore","resolveRuntimeDbPath","DevicesRepository","dropped","path","runCodexAttach","createTerminalIO","connectSocket","resolve","runIdentity","runSetKey","result","SessionHost","listenForStreamers"]}